고전 게임 황금도끼에 대해서 아주 오래 전에 글을 쓴 적이 있었는데 또 내용을 첨언할 게 생겼다.
그 글은 이 블로그가 생기기도 전, 제로보드 시절에 썼던 글이니 시기로는 2009년이나 그 이전의 정말 옛날 글이다.

황금도끼는 오락실용 원판이 나온 이후로 다양한 플랫폼으로 이식되었다.
그 중 Mega Drive/Genesis 판(게임기용?)은 레벨을 좀 더 추가하고 Duel이라는 결투 모드를 넣는 등 게임 시스템에 변화를 좀 넣었는데, PC(도스)용 버전은 바로 이 버전에서 파생되어 나왔다. 원판이 1989년에 나왔고 PC용이 그 이듬해에 나왔다는 것은 페르시아의 왕자와 일치하는 내력이다.

Mega Drive/Genesis에서 추가되고 PC용에서도 도입된 결투 모드는 스토리(아케이드)를 따라 진행되는 정식 게임이 아니라, 주인공이 고정된 arena에서 정해진 적들과 PvP를 벌이는 일종의 대전 게임이다. 첫 레벨에서는 그냥 잡몹 한두 마리만 나오지만, 레벨이 올라갈수록 보스급 몬스터가 등장하면서 진행이 어려워진다.

결투 모드에서는 아케이드 때와는 달리 몹도 체력이 화면에 나온다. 정확히는 화면에 존재하는 모든 몹들의 체력의 합임. 덕분에 적을 얼마나 더 두들겨 패야 이번 레벨을 끝낼 수 있는지를 얼추 알 수 있다.

사용자 삽입 이미지

사실, MMORPG나 전략 시뮬, 아니면 아예 1:1 대전 액션 게임 같은 장르 말고 통상적인 액션/아케이드형 게임에서 내가 싸우고 있는 몹의 체력을 알 수 있는 게임은 별로 없다. 페르시아의 왕자는 적과 싸우는 것은 1:1 대전 컨셉을 표방했기 때문에 친절하게 적의 HP가 화면에 나오는 것일 테고, 황금도끼도 아케이드가 아닌 결투 모드에서는 그런 컨셉을 추구하여 적의 HP를 표시해 주는 것 같다.

단, PC용의 경우, 해골 두 마리가 등장하는 레벨 9 이상부터는 주인공과 몹들의 HP가 화면에 안 나오기 시작한다. 화면에 아무 정보도 표시되지 않으며, 이 덕분에 부하가 좀 줄어들어서 게임의 진행이 약간 빨라지기도 한다.

사용자 삽입 이미지

Mega Drive/Genesis 판에서는 레벨이 올라갈수록 날이 점점 어두워져서 밤이 되는 효과가 있으나, PC용은 그런 것도 없다. 아무튼...
그렇게 레벨 13까지 가면 빨간 기사와 빨간 뚱보에 잡몹 둘까지.. 총 4마리나 되는 몬스터가 나타난다.

사용자 삽입 이미지

그런데 문제는 이 레벨을 깬 다음이다. 무슨 파일이 없는지 다음 디스크를 넣으라는 메시지와 함께 게임 진행이 중단된다.
이건 뭐 취소할 수도 없고 프로그램을 종료할 수도 없다. 황금도끼를 돌리고 있는 도스 에뮬레이터를 강제 종료하는 수밖에 없다.

사용자 삽입 이미지

도대체 왜 이러는 것일까?
혹시 프로그램 배포에 문제가 있는 게 아닌가 싶어서 국내외 여러 곳에서 서로 다른 황금도끼 파일을 구해 봤지만, 파일 구성은 변한 게 없으며 레벨 13 이후에 저렇게 진행이 중단되는 건 여전했다.

그럼에도 불구하고 유튜브를 뒤져 보면, 황금도끼 PC판에서 레벨 13 이후에도 결투를 진행하는 플레이 동영상이 존재한다. 세상에! (☞ 링크 클릭. 2분 58초부터)
레벨 14는 아케이드 레벨 6의 보스인 Death Adder 주니어와 부하 해골 두 마리이며, 레벨 15는 아케이드 마지막 레벨의 최종 보스인 그 시커먼 Death Adder와 부하 해골 두 마리이다. 그리고 이게 결투의 마지막이다.

이 사람은 어떻게 해서 레벨 14와 15까지 잠금해제를 한 걸까?

결론부터 말하자면, 뜻밖에도 인터넷에 굴러다니는 황금도끼 배포본에 일부 파일이 누락됐거나 문제가 있는 건 아니다.
레벨 14~15의 리소스도 다 준비돼 있는데 프로그램 자체에 버그가 있어서 그걸 제대로 인식을 못 한 거라고 한다.
외국의 어느 리버스 엔지니어링/해커 팀에서 해당 프로그램을 기계어 코드를 일일이 분석하면서 디버깅한 끝에 그 버그가 무엇인지를 알아냈다. 이 문서를 참고하시라.

황금도끼 PC판은 gold.exe라는 실행 파일이 lzexe라는 과거의 16비트 도스용 실행 파일 압축기로 압축되어 있다.
그런데 저 글을 쓴 해커는 unlzexe가 있는 줄 모르고, 실행 파일 내부에 들어있는 압축 해독 루틴과 압축된 데이터를 읽고 따라가면서 그냥 근성으로 실행 파일의 로직을 추적했다고 한다.;; 8086 어셈블리와 도스 인터럽트 API에 통달한 사람이라면 최소한 80년대 이전생의 old timer일 텐데, unlzexe를 모르는 것도 신기하다만... 아무튼 괴수.

물론, 그 lzexe를 만든 사람도 괴물인 건 두 말할 나위가 없고 말이다. (ioccc 입상자이며, lzexe는 그가 겨우 고등학생일 때 만든 작품이다.. 쩝~)

자, 저 문서의 내용을 요약하면 이렇다.
문제의 원인은 레벨 14로 갈 때 프로그램이 잘못된 파일 이름을 요청한다고 한다. 파일 이름에 아스키 코드 4번 제어 문자가 들어있다고 하니 이는 명백한 오류이다.

역추적을 해 보면 드디어 레벨별로 소환할 몬스터 정보가 담긴 테이블에까지 도달하는데..
레벨 14와 15를 보면 비정상적인 값이 들어있다. 메모리의 내용을 강제로 일관성 있게 수정해 주니 놀랍게도 모든 결투 레벨이 정상적으로 진행된다.

이런 걸 찾아내다니 저 해커에게 경의를 표하는 바이다. 정말 안 되던 걸 되게 만든 사람이다.
SI가 가리키는 값을 보면 남자 여자 소형 잡몹은 따로 처리해 주는 게 없고, 0xA는 그 chicken leg 탈것이고 0xB+0x10은 붉은 용, 0xB+0x11은 푸른 용이다. 0x6은 대머리 보스, 0x3은 해골, 0x8은 칼 든 기사 보스, 그리고 0x7은 Death Adder의 스프라이트에 대응한다는 걸 알 수 있다.

저 메모리 테이블은 다행히 황금도끼의 실질적인 실행 파일에 해당하는 axe.dat에 고스란히 들어있다. unlzexe로 얘의 압축을 푼 뒤, 메모리를 패치하듯이 잘못된 값이 들어있는 부분(오프셋이 대략 0xFFxx대에 있음)을 고치면.. 레벨 14~15가 모두 잠금해제된 황금도끼를 즐길 수 있다~!

옛날에 게임 위저드 32를 이용해서 주인공의 HP를 강제로 늘리거나 심지어 값이 바뀌지 않는 무적 상태를 만들어 놓고 게임을 즐긴 적도 있다. HP 한 칸이 내부 HP 4에 대응하는 형태이기 때문에 비교적 쉽게 메모리 주소를 찾을 수 있었다.
지금도 그런 해킹 프로그램이 있다면 저 테이블을 메모리에서 찾아내서 결투 모드 버그 정도는 런타임 때 고칠 수 있을 듯하다.

디버깅을 할 줄 알면 이런 것도 다 가능하다는 걸 알 수 있었다.

Posted by 사무엘

2014/08/27 08:38 2014/08/27 08:38
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1000

황금도끼 도스용 버전을 처음 해 본 게 초등학교 고학년이던 92년이었습니다.
그 후 무려 17년이 지나서 몇 달 전에.. 마메를 돌려서 오락실 아케이드 버전을 처음으로 해 봤습니다. -_-;;

둘을 충분히 해 보고서 내린 결론은
도스용과 오락실용의 차이는 아래아한글과 MS 워드의 차이와 비슷하다는 것. =_=;;;;
모든 동작 방식이 손에 익어 있고 예측 가능한 아래아한글과는 달리, MS 워드류는 영 적응이 안 되는 야생마 같습니다.

도스용은 눈에 띌 정도로 스프라이트 수가 엄청 감소(strip down)해 있다는 것을 알 수 있었습니다. 메모리가 부족해서 그런 거겠죠. 그리고 원본에 존재하던 다중 스크롤도 삭제되었고, 움직이던 독수리 눈도 도스용에서는 응당 정지해 있습니다.

때리는 프레임이 남자와 여자는 2프레임, 그리고 가장 날렵한 캐릭터인 난쟁이 할아버지는 단 1프레임이죠. 뛰기 전에 잠깐 다리를 굽히는 동작도 오락실에는 있지만 PC에는 없습니다.

하지만 이 덕분에 PC판이 주인공의 조작 반응성이 더 날렵-_-해진 것은 있습니다. 오락실은 타이밍을 놓쳐서 적이 나의 때리기 공격을 피하고 반격을 하는 게 가능하지만 PC는 거의 그런 게 없지요. 물론 나뿐만 아니라 적도 더 날렵해졌지만.. -_-;; 때리면 거의 무조건 맞거나 아니면 아예 피하거나 이뿐입니다.

1단계에 나오는 꼬리로 공격하는 괴물은 PC판보다 다루기가 훨씬 더 어렵고 불을 쏘는 용도 발사 후의 cooldown이 굉장히 길어서 운용하기 어렵습니다. 그거 발사한 후 뒤의 적에게 반격을 당하기 쉽습니다.
PC판은 용에서 한번 떨어지고 나면 용은 거의 즉시 달아나 버리는 반면, 오락실판은 그래도 관용이 좀 있더군요.

몬스터의 AI도 원판이 훨씬 더 강력합니다. 작은 몬스터도 점프 공격을 하며, 해골은 훨씬 더 똑똑하고 무섭고 공격 데미지가 강합니다. PC판은 해골은 남자 몬스터와 체력도 일치하고, 점프 공격을 할 줄 아는 것 외에 딱히 차이가 없거든요. 사실, 몬스터별 체력이라든가 데미지 체계도 PC판은 딱 정해져 있는 반면 오락실판은 이미 수십 판을 해 봤는데도 파악이 잘 안 되겠더군요.

몬스터는 PC판처럼 무조건 주인공을 향해 접근만 하는 게 아니라 근처에 용이 있으면 용부터 탑니다. 그리고 PC판처럼 x축부터 일치시킨 후 y축으로 접근하는 게 아니라, y축부터 일치시킨 후 달리기 박치기 시도를 굉장히 잘 합니다. 이런 이유로 인해 용 같은 걸 뺏어 타기도 PC판보다 더 어렵습니다.

그리고 무엇보다도 오락실판이 PC판보다 어렵고 전략 전술을 근본적으로 다시 짜게 만드는 원인은.. 바로 근거리 공격 때문입니다.
PC판은 모든 몬스터들은 주인공이 너무 바싹 붙어 있으면 일단 뒤로 물러나서 일정 거리를 확보한 후 공격합니다. 게다가 다른 AI가 전반적으로 무척 멍청하기 때문에, PC판으로는 한 대도 안 맞고 엔딩 보는 것도 가능합니다.

하지만 오락실판은 그렇지 않으며 얄짤없이 근거리에 있는 주인공은 곧바로 공격합니다. 매우 위험합니다. 게다가 큰 몬스터인 대머리 아저씨나 칼 든 기사는 주인공을 내던지기까지 하며, 원거리에서도 공격 성향이 더욱 짙습니다. 용 없이 기사 두 명을 피해 없이 상대하는 건 거의 불가능에 가깝습니다. (제가 보기엔) 큰 몬스터를 향해 날라차기를 해도 실패하고 반격 당할 확률이 훨씬 더 높고요.

다만, 오락실판에만 존재하는 필살기가 있더군요(마법 쓰는 것 말고). 뛰면서 위로 점프한 후, 칼을 아래로 내리찍기. 이게 데미지가 굉장히 커서 작은 몬스터는 한 방에 바로 골로 보내더군요.
PC판의 몬스터라면 100% 저게 성공일 텐데, 오락실판 몬스터는 그걸 피할 줄 압니다. PC판은 몬스터가 y축으로 왔다갔다 하는 걸 거의 볼 일이 없는 반면 오락실판은 y축으로 이동하여 필살 공격을 회피할 줄 압니다. 그래서 제일 밑으로 내려가서 회피를 못 하게 하고 때리면 성공률이 꽤 높습니다.

오락실판은 날라차기를 하다가 목표물을 맞으면 목표물이 힘을 받아 튕겨나가고 나는 추진력이 탁 떨어지기 때문에 타격감과 탄성을 느끼죠. 하지만 PC판은 목표물을 맞든 안 맞든 언제나 정해진 공식만큼 앞으로 나아갑니다. 기계적입니다. 오락실판은 도둑을 때려서 나온 물약병도 통통 튀지만, PC판은 그렇지 않습니다.

이런 것 말고도, 오락실판은 PC판에서 게임의 쾌감을 떨어뜨리던 그런 요인들이 없습니다.
가령, 열심히 때리고 한 몬스터를 집어 던지는 모션을 취하느라 uncontrollable한 도중에는 다른 몬스터가 나를 공격하지 않습니다. 저 경우를 따로 배려를 했다는 걸 단번에 알 수 있었습니다. PC판은 나도 반격을 당해 튕겨 나가고 잡혀 있던 몬스터도 같이 튕겨 나가는 어색한 상황이 벌어지죠.

난쟁이 도둑을 때리면 PC판은 완전 랜덤한 다른 위치로 도망가 버려서 일일이 쫓아다니며 또 때려야 하지만 오락실판은 원래 있던 곳에서 그렇게 멀리 나가지 않으며, 또한 도둑을 때리기도 훨씬 더 쉽습니다. 어지간히 날라차기를 해도 맞고, 불을 쏘는 용으로도 굉장히 쉽게 맞힐 수 있습니다. 도둑이 약병을 다 내 준 뒤에도 이따금씩 가만히 죽어 버려서 게임 진행을 더 못 하고 끝내야 하는 버그도 오락실판에는 전혀 존재하지 않죠.

또한 '해골 다구리'. 가끔 여러 해골들이 있는 상태에서 막다른 곳에 몰리면, 해골들이 나를 일어나서 반격할 틈도 안 주고 계속 점프 공격을 해서 결국 죽게 만드는 경우가 PC판에는 있습니다. 오락실판은 그런 식의 공격 패턴을 지니고 있지는 않거든요.
여러모로 PC판보다 더 신경을 쓰고, 쓸데없는 것 갖고 사용자를 짜증 나지 않게 설계가 돼 있다는 것을 알 수 있었습니다. 다만, 단거리 공격까지 틈을 조금도 안 주는 거는 너무 어렵습니다.

오락실용은 세 마리 정도는 죽고 엔딩을 봤습니다. 점수는 230점대, strength는 85점까지는 가 봤네요.

Posted by 사무엘

2010/01/11 10:14 2010/01/11 10:14
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/89


블로그 이미지

철도를 명절 때에나 떠오르는 4대 교통수단 중 하나로만 아는 것은, 예수님을 사대성인· 성인군자 중 하나로만 아는 것과 같다.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2020/09   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      

Site Stats

Total hits:
1445916
Today:
160
Yesterday:
499