본문 바로가기
ULTIMA/울티마 주저리

XU4 - 울티마 4의 새로운 고해상도 그래픽

by NSM53 Project 2011. 7. 12.


이번에도 반가운 소식이 하나 있군요. 막상 XU4 포럼에서는 좀 지난 소식이지만 어쨌든 XU4에서 새로운 고해상도 타일을 지원할 예정인가 봅니다.

http://sourceforge.net/apps/phpbb/xu4/viewtopic.php?f=1&t=44&p=225#p225

예전에(그러니까 10년 전...) http://www.moongates.com/u4/ 에서 공개했던 VGA 업그레이드 패치가 있고 현재 XU4에서도 이것을 지원하고 있지만 지금 시점에서 보기에는 낮은 해상도와 낡은 그래픽 등으로 세월의 흐름을 느끼게 해줍니다.


▲ VGA 업그레이드 패치 화면


그래서인지 XU4 팀에서 새로이 작업을 하는 것 같은데 집시의 카드점 같은 경우는 타운즈 버전의 그래픽을 가져와 지원하기도 하는 등 여러모도 대대적인 개편을 할 모양인가 봅니다. 포럼에 공개한 스샷을 보면 요즘 나오는 로그라이크 같은 분위기가 느껴지도 하는군요. (당신은 멀리서 민달팽이가 분노로 울부짖는 소리를 들었다.)

하지만 아쉽게도 아직 결과물을 만나보실 수는 없습니다. 뭐 그래도 시간이 약이라고 느긋하게 기다리다보면 멋진 결과물이 나오지 않을까 싶네요. 여담이지만 Exult는 프로젝트 시작하고서 정식 버전이 나오기까지 3년이 걸렸고 Lazalus는 10년 가까운 시간이 걸렸죠. 물론 XU4의 제작 속도가 좀 느리기는 합니다...


▲ 타운즈 버전의 그래픽을 적용한 모습.



댓글19

  • 아스라이 2011.07.13 15:53 신고

    와~ 멋지군요~ VGA패치는 저도 해봤습니다만 조금 아쉬웠던게 사실이기는 하죠. 상당히 기대가 됩니다만 역시 오래 걸릴까요(하긴 아무런 벌이도 안되는 취미생활일테니...)

    유일하게 클리어 못한 시리즈가 1, 2, 3(이건 초창기니 넘어가고), 4와 8편인지라 많이 미련도 남아요... 4편이 5편처럼 대각선 공격만 가능했어도 딱 좋을텐데(전투시간이 너무 오래걸려요... ㅠㅠ) 말이죠...
    답글

    • NSM53 Project 2011.07.16 23:01 신고

      최근 들어서는 의욕적으로 계속 소식 들려주고
      있는 걸로 봐선 멀지 않은 미래(...)에 나오지
      않을까 생각되는데 xu4가 아직도 1.0beta에서
      정식 버전을 내지 못하고 있는 걸 보면 결론은
      시간이 답이다...겠지요.

      4편 전투가 지금하기에는 좀 짜증스러운 부분이 많죠.
      5처럼 대원을 지정할 수 있는 것도 아니고 8명을
      움직이는 것만 해도 일이긴 합니다.

      1, 2편은 반나절, 3편은 2틀 정도면 쉽게
      클리어할 수 있으니 언제 시간내서 해보세요.
      나름 재미있습니다ㅎㅎ 특히 1편은 이스 하는 것
      같은 기분이 들 때가 있죠-_-

  • 팬입니다!! 2011.07.14 00:54

    그냥 자기 일 하면서 기다리면 죽기전에는 나오겠죠 ㄷㄷ;;

    근데 그래픽 보니 던전크롤 생각나서 한판 하고왔습니다 흐흐
    답글

    • NSM53 Project 2011.07.16 23:03 신고

      정말 던전크롤 비슷하지 않습니까?ㅎㅎ

      원래는 던전크롤이 울티마랑 그래픽이 비슷하다고
      보는 게 더 맞는 말일 것 같긴 하지만요.

  • 은하수 2011.07.14 09:25

    와우.. 정말 멋지군요. 이런걸 보면 역시나 울티마의 인기가 얼마나 대단한것인지 세삼 놀랍습니다. 개인적으로 어떤 시리즈든 한글화가 가장 좋긴하지만 울티마에 대한 업그레이드는 뭐든지 좋군요.^^ 좋은 소식 감사합니다.
    답글

    • NSM53 Project 2011.07.16 23:07 신고

      오랜 시간이 지나도 이렇게 팬들에 의해 아직도 명맥이
      유지되고 있다는 사실이 바로 울티마의 힘이 아닌가
      생각됩니다.

      Dosbox로는 오리지널을 즐길 수 있고
      이렇게 OS포팅으로 업그레이드 되는 것은
      별미로 즐길 수 있으니 이래저래 기쁠 따름이죠:)

  • onion 2011.07.16 12:16

    다른건 몰라도.. font는 좀 고전틱한게 좋네요.
    그래픽은 좀 고해상도가 괜찮은듯 합니다 ㅎㅎㅎ
    답글

    • NSM53 Project 2011.07.16 23:09 신고

      감성을 자극하는 80년대식 고전 8x8폰트의 오마쥬..
      라고 하면 거창한 말이겠죠ㅋ

      어차피 오리지널 그래픽을 버리고 새로이 만들기로
      했으면 저렇게 고해상도로 깔끔하게 만드는 게 좋은
      것 같아요.

  • 야바타 2011.07.20 23:22 신고

    매번 떨어지는 해상도가 맘에 걸렸는데, 이 업그레이드 아주 맘에 드는군요.
    또 괜히 해보고 싶어지는데요~ ㅋ
    그런데, 게임 실행 화면 1번... F:9994, G:9999
    역시 Food와 Gold는... 울티마 시리즈의 참... 어려운 부분인거죠. ㅋㅋ
    답글

    • NSM53 Project 2011.07.22 21:21 신고

      저도 무척 기대가 되는 업그레이드입니다.
      완전 환골탈태예요ㅎㅎ

      초반에는 gold보다 food 때문에 참 어려움이 많죠.
      버는 족족 food 사느라 바쁘고...
      결국 gold 문제로 귀결되네요-_-
      어디든 물질만능주의가 판 치는 세상입니다ㅋ

  • 장호준 2011.08.06 12:14

    여기 쓸 댓글은 아니지만 울티마 관련이라서 이해해 주세요.

    저는 범례에 큰 가치를 둡니다.
    지식을 집대성함으로써 통일성을 가져다 주며
    최신 정보들을 모을 수 있기 때문입니다.
    물론 울티마처럼 업데이트가 중단된 아이템이라면
    실시간 업데이트라는 중압감도 없지요.

    군의관 시절 와우에 심취했을 때
    실제로 범례를 작성했던 경험이 있습니다.
    http://wow.playforum.net/post/paladin/0?type=search&query=%EB%B3%B4%ED%98%B8%EA%B8%B0%EC%82%AC%EC%9A%A9+%EB%B2%94%EB%A1%80

    같은 생각을 울티마에도 적용해보면 어떨까 합니다.
    마침 좋은 사이트를 찾았습니다.
    http://www.thealmightyguru.com/Reviews/Ultima/Ultima-Encyclopedia.html
    우리말 어순과 번역 실정에 맞게 옮겨 보면
    번역의 통일성과 장기 계획의 수립
    그리고 여러 사람들에게 정보를 줄 수 있는
    일석삼조의 효과가 있으리라 생각합니다.

    다만 게시한 적당한 공간은 물색해야 하겠지요.
    답글

    • NSM53 Project 2011.08.07 13:09 신고

      언제 또 와우까지 하셨답니까ㅎㅎ
      역시 번역하시는 것처럼 정리도 깔끔하게 하셨네요.

      말씀하시는 부분은 저도 상당히 공감하고 있고
      바라마지 않는 부분입니다.

      2000년 초반인가 소위 말하는 3대 롤플레잉
      (울티마, 위저드리, 마이트앤매직)
      관련해서 홈페이지를 만든 적이 있습니다.
      당시에는 한글화나 그런 쪽으로는 전혀 생각지
      않았던 터라 컬렉션 위주로 컨셉을 잡고
      운영을 했었는데 하이텔이 사라지면서 제 홈페이지도
      같이 사라졌죠.

      한글화를 하게 되면서 울티마 관련 사이트를
      생각한 건 한국판 울티마 위키였습니다.
      http://codex.ultimaaiera.com/wiki/Main_Page
      여러 문제가 있어서 이것도 좌초되었지만요.

      일반 홈페이지를 개설해 운영한다는 건
      현실적으로 유지보수의 어려움 등이 따르기 때문에
      카페 정도가 가장 무난한 대안이 아닐까 싶은데
      울티마라는 정체된 컨텐츠로 카페를 잘 꾸릴 수
      있을지 어떨지는 솔직히 잘 모르겠습니다.

      그래도 어떤 방식이 되었든 체계적인 정리가
      이루어진다면 말씀하신 일석삼조 이상의 효과가
      있지 않을까 싶네요.

      제가 번역한 9편도 기준에 맞춰 새로 번역하고
      기타 다른 시리즈도 그 기준으로 작업이 이루어진다면
      국내 울티마팬들에게 있어 기념비적인 일이 될 것
      같습니다.

      전 지금도 위키가 못내 아쉽기는 합니다ㅎㅎ
      참고로 일본에서는 자국어화에 위키를 많이 이용합니다.
      다만 위키 특성상 장단점이 너무 뚜렷해서
      호준 님이 생각하는 거나 제가 생각하는 거와는
      조금 맞지 않는 부분이 있네요.

  • 장호준 2011.08.12 18:11

    http://moongates.com/u4/Tech.asp#f_tlk

    이 곳의 정보를 참조하여
    울티마 4 인물대사를 확장해 보았는데 적용이 잘 됩니다.
    타운스 버전도 이와 같은 형식을 취하는 게 아닌가 생각되네요.

    *.TLK 파일

    1. 한 사람당 288kb가 일괄 배정됩니다.
    2. 0 byte는 yes/no 질문을 trigger하는 키워드를 지정합니다.
    0 없음 / 3 job / 4 health / 5 특수키워드1 / 6 특수키워드2
    3. 1 byte는 yes/no 질문이 겸양 지수에 영향을 주는지를 지정합니다. 1이 '그렇다'이며, 이 경우 yes는 -5, no는 +5의 점수가 부여됩니다.
    4. 2 byte는 대화 도중 돌아설 확률을 나타냅니다.
    5. 3부터 287 byte는 다음 순서로 배열됩니다.
    1) Name
    2) Pronoun (He, She, It)
    3) LOOK description
    4) JOB response
    5) HEALTH response
    6) KEYWORD 1 response
    7) KEYWORD 2 response
    8) Yes / No Question
    9) YES response
    10) NO response
    11) KEYWORD 1 (4 characters, all capital letters)
    12) KEYWORD 2 (4 characters, all capital letters)

    헥스값 00은 해당 항목이 끝났음을 표시합니다.
    헥스값 0A는 줄바꿈을 지시합니다.


    아래는 이올로에 해당하는 텍스트입니다.

    ...Iolo.He.Charming bard.I play for.the people..Good..I play my lute.and receive the.good wishes of.the people..If you treat.someone else.well then they.will have reason.to do the same..Do you like.my music?.I would.join thee!.A shame..PLAY.COMP

    헥스코드는 다음과 같습니다.

    05 00 00 49 6F 6C 6F 00 48 65 00 43 68 61 72 6D 69 6E 67 20 62 61 72 64 00 49 20 70 6C 61 79 20 66 6F 72 0A 74 68 65 20 70 65 6F 70 6C 65 2E 00 47 6F 6F 64 2E 00 49 20 70 6C 61 79 20 6D 79 20 6C 75 74 65 0A 61 6E 64 20 72 65 63 65 69 76 65 20 74 68 65 0A 67 6F 6F 64 20 77 69 73 68 65 73 20 6F 66 0A 74 68 65 20 70 65 6F 70 6C 65 2E 00 49 66 20 79 6F 75 20 74 72 65 61 74 0A 73 6F 6D 65 6F 6E 65 20 65 6C 73 65 0A 77 65 6C 6C 20 74 68 65 6E 20 74 68 65 79 0A 77 69 6C 6C 20 68 61 76 65 20 72 65 61 73 6F 6E 0A 74 6F 20 64 6F 20 74 68 65 20 73 61 6D 65 2E 00 44 6F 20 79 6F 75 20 6C 69 6B 65 0A 6D 79 20 6D 75 73 69 63 3F 00 49 20 77 6F 75 6C 64 0A 6A 6F 69 6E 20 74 68 65 65 21 00 41 20 73 68 61 6D 65 2E 00 50 4C 41 59 00 43 4F 4D 50

    첫번째 byte의 05는 특수키워드 1, 다시 말해
    PLAY
    를 입력할 때 yes/no 질문, 즉
    Do you like my music?
    이 발동되도록 하는 것입니다.
    위 질문의 대답은 겸양 지수에 영향을 주지 않으며, 이올로는 대화 도중 일방적으로 돌아서지 않습니다.

    위의 설명대로
    hex 값 00과 0A를 이용하면
    한 사람당 최대 288kb까지 대사를 확장할 수 있습니다.
    (실제로 hex값을 바꾸어 봤는데 잘 적용이 됩니다)


    혹시나
    nsm53p님의 걱정을 일부 해결할 수 있지 않을까 해서
    알려드렸습니다. 이상 !
    답글

    • NSM53 Project 2011.08.14 00:04 신고

      와우 좋은 정보 알려주셔서 감사합니다.

      타운즈 버전도 DOS 버전과 거의 동일한 구조를 갖고
      있습니다. 그런데TLK 파일 수정은 문제가 아니고
      EXE 실행파일 수정이 어려워서 중단했죠.

      시스템에 관계된 거와 집시의 질문, 그리고 심연에서
      최후의 문답 등이 실행 파일에 담겨 있는데
      마땅한 확장 방법이 없네요. 대화 입력도
      조금 문제가 되는 부분도 있었고요.

      여러모로 기다려봐야 할 작품인 것 같습니다^^

  • 장호준 2011.08.15 00:46

    http://ultima.wikia.com/wiki/Ultima_IV_Internal_Formats

    AVATAR.exe 파일의 구조를 설명해 놓았더군요. 덕분에 조금은 쉽게 문제를 해결할 수 있었습니다.


    offset(h); 00010CA4 부터를 보면 아래와 같이 단어가 배열됩니다.

    ..Pirate.Pirate.Nixie.Squid.Serpent.Seahorse.Whirlpool.Twister.Rat.Bat.Spider.Ghost.Slime.Troll.Gremlin.Mimic.Reaper.Insects.Gazer.Phantom.Orc.Skeleton.Rogue.Python.Ettin.Headless.Cyclops.Wisp.Mage.Liche.Lava Lizard.Zorn.Daemon.Hydra.Dragon.Balron.Hands.Staff.dagger.Sling.Mace.Axe.Sword.Bow.Crossbow.Flaming Oil.Halberd.Magic Axe.Magic Sword.Magic Bow.Magic Wand.Mystic Sword.Skin.Cloth.Leather.Chain Mail.Plate Mail.Magic Chain.Magic Plate.Mystic Robe.HND.STF.DAG.SLN.MAC.AXE.SWD.BOW.XBO.OIL.HAL.+AX.+SW.+BO.WND.^SW.Mage.Bard.Fighter.Druid.Tinker.Paladin.Ranger.Shepherd.Guard.Merchant.Bard.Jester.Beggar.Child.Bull.Lord British.Sulfur Ash.Ginseng.Garlic.Spider Silk.Blood Moss.Black Pearl.Nightshade.Mandrake.Awaken.Blink.Cure.Dispell.Energy.Fireball.Gate.Heal.Iceball.Jinx.Kill.Light.Magic Misl.Negate.Open.Protection.Quickness.Resurrect.Sleep.Tremor.Undead.View.Winds.X-it.Y-up.Z-down.Britannia.The Lycaeum.Empath Abbey.Serpents Hold.Moonglow.Britain.Jhelom.Yew.Minoc.Trinsic.Skara Brae.Magincia.Paws.Buccaneers Den.Vesper.Cove.Deceit.Despise.Destard.Wrong.Covetous.Shame.Hythloth.The Great Stygian Abyss!.Honesty.Compassion.Valor.Justice.Sacrifice.Honor.Spirituality.Humility.

    단어와 단어 사이는 hex code 00으로 구별되더군요. 그래서 일단은 00 코드를 뒤로 미는 방식으로 접근했습니다.

    staff.dagger --> staffff.gger
    이렇게 고쳤더니 출력이 다음과 같습니다.
    원래는

    B-Staffs
    C-Daggers

    인데 이게 아래와 같이 바뀌더군요.

    B-Staffffs
    C-fs

    이로써 확실해졌습니다. 단어는 단어의 길이가 아닌 시작점으로 인식하며 끝은 hex code 00으로 인식한다. 그렇다면 분명 어디엔가 단어의 시작점을 표시하는 부분이 있을 거라 생각했습니다.

    있더군요. 찾는 데 애를 좀 먹었습니다.

    offset(h); 0001114B 부터를 보면 아래와 같습니다.

    F2 19 F3 19 FA 19 01 1A 07 1A 0D 1A 15 1A 1E 1A 28 1A 30 1A 34 1A 38 1A 3F 1A 45 1A 4B 1A 51 1A 59 1A 5F 1A 66 1A 6E 1A 74 1A 7C 1A 80 1A 89 1A 8F 1A 96 1A 9C 1A A5 1A AD 1A B2 1A B7 1A BD 1A C9 1A CE 1A D5 1A DB 1A E2 1A E9 1A EF 1A F5 1A FC 1A 02 1B 07 1B 0B 1B 11 1B 15 1B 1E 1B 2A 1B 32 1B 3C 1B 48 1B 52 1B 5D 1B 6A 1B 6F 1B 75 1B 7D 1B 88 1B 93 1B 9F 1B AB 1B B7 1B BB 1B BF 1B C3 1B C7 1B CB 1B CF 1B D3 1B D7 1B DB 1B DF 1B E3 1B E7 1B EB 1B EF 1B F3 1B F7 1B FC 1B 01 1C 09 1C 0F 1C 16 1C 1E 1C 25 1C 2E 1C 34 1C 3D 1C 42 1C 49 1C 50 1C 56 1C 5B 1C 68 1C 73 1C 7B 1C 82 1C 8E 1C 99 1C A5 1C B0 1C B9 1C C0 1C C6 1C CB 1C D3 1C DA 1C E3 1C E8 1C ED 1C F5 1C FA 1C FF 1C 05 1D 10 1D 17 1D 1C 1D 27 1D 31 1D 3B 1D 41 1D 48 1D 4F 1D 54 1D 5A 1D 5F 1D 64 1D 6B 1D 75 1D 81 1D 8E 1D 9C 1D A5 1D AD 1D B4 1D B8 1D BE 1D C6 1D D1 1D DA 1D DF 1D EE 1D F5 1D FA 1D 01 1E 09 1E 11 1E 17 1E 20 1E 26 1E 2F 1E 48 1E 50 1E 5B 1E 61 1E 69 1E 73 1E 79 1E 86 1E 8F 1E

    뭔가 반복되는 형식이며, 잘 보시면 징검다리식으로 숫자가 점점 커지는 걸 알 수 있습니다. 이게 바로 위에서 언급했던 단어들이 있는 위치를 나타내는 코드입니다.

    맨 마지막 코드를 봅시다.
    8F 1E --> 이걸 순서를 바꾸어 1E8F로 봅니다. 이런 식으로 하면

    1E61 1E69 1E73 1E79 1E86 1E8F
    +8 +10 +6 +13 +9
    justice.sacrifice.honor.spirituality.humility.

    글자 개수가 딱 들어맞는 걸 보실 수 있습니다.

    이로서
    몬스터 이름, 무기, 방어구, 직업, 시약, 주문, 도시 및 마을, 동굴, 미덕 글자수의 확장은 가능해졌습니다.
    답글

  • 장호준 2011.08.15 00:58

    호크윈드의 대사 바로 뒤에 붙어 있는 hex code입니다.

    offset(h); 00013187 부터

    6E 31 B4 31 01 32 3C 32 73 32 C3 32 15 33 59 33 96 33 E6 33 2D 34 7A 34 BE 34 06 35 41 35 90 35 DC 35 2F 36 72 36 BF 36 0E 37 58 37 A9 37 FA 37 48 38 92 38 DF 38 2B 39 75 39 BC 39 10 3A 61 3A B6 3A F5 3A 3F 3B 8F 3B C3 3B 10 3C 59 3C 93 3C

    결국 확장이 되지 않는 대화라는 것이 이런 식으로 문장의 시작점을 강제 지정해놓았기 때문에 발생한다고 봐야 하겠습니다. 마찬가지 방식으로 확장 가능합니다.

    빨리 결과물을 보고 싶어서 몸이 근질거리는군요 ㅎㅎ
    답글

    • NSM53 Project 2011.08.15 08:19 신고

      와 wiki에 길이 있었군요!
      분석하느라 고생하셨습니다!!

      타운즈 버전은 제가 기억하기로 저렇게 드러나는
      포인터가 없었습니다. 아마도 실행파일 자체는
      구조가 좀 다른 듯 싶은데 다시 확인해봐야겠네요.

      어쨌든 도스 버전은 이렇게 해결책을 찾으셨으니
      이제 폰트의 출력만 해결하면 되겠습니다ㅎㅎ

  • 장호준 2011.08.18 14:10

    현재 CHARSET.EGA의 8x8 pixel을 1x8 구조로 변경하는 것은 불가능에 가깝습니다.

    CHARSET.EGA data를 보면 8x8 구조로 정리되어 들어가는 게 아니라 그냥 byte를 끝까지 이어서 나열해 놓았습니다. 그걸 8x8 행렬로 가져가는 것은 AVATAR.EXE 실행파일의 역할로 보입니다.

    SHAPES.EGA 파일은 16x16 pixel 구조로 읽힙니다. 이 파일의 이름을 강제로 CHARSET.EGA로 바꿔 보았더니 게임이 정지되지 않고 다만 깨진 폰트로서 표시됩니다. 결국 어떤 식으로 데이터를 읽어오느냐는 AVATAR.exe 파일이 결정한다는 겁니다.

    기계어를 뜯어고칠 능력이 필요한데 저는 그럴 자신이 없군요.

    CHARSET.EGA 파일의 data를 1x8 형식으로 읽어들이도록 AVATAR.EXE를 수정할 능력이 없다면 더 이상의 진행은 불가능합니다.
    답글

    • NSM53 Project 2011.08.18 14:47 신고

      1x8로 출력을 변경하는 건 당연히 어셈블리 영역입니다.
      단순히 폰트 장난으로 해결할 수 있는 부분이 아니죠ㅎㅎ

      다만 2바이트 확장보다는 좀 더 수월하지 않을까
      싶어서 계속 시도해보는 부분인데 도스 프로그램의
      디버깅은 너무 어렵고 생소하더군요.

      관련 업종에 있는 몇몇 지인들에게 도움을 요청해봐도
      이런 건 모르겠다고 하네요ㅎㅎ 프로그래머라도
      각자 전공이 있으니 그렇겠죠.

      결국에는 Exult처럼 울티마 4도 Xu4에서
      답을 구해야 하는 건 아닌가 모르겠습니다.