TL;DR
- DOS에서 SimCity 2000 저장 파일을 헥스 편집해 게임 머니를 늘리며, 디스크에 저장된 바이트와 16진수를 익힌 경험임.
- Packard Bell 386 SX에서 여러 게임과 교육용 소프트웨어를 사용했고, 플로피 디스크로 소프트웨어를 직접 소유하던 시절의 기억임.
- 저장 파일에서 게임 머니 값을 찾아 바꾸는 과정에 헥스 에디터를 사용했고, 값을 단계적으로 키워 약 1,600만 달러까지 늘림.
- 당시 이해한 저장 방식은 정확하지 않았으며, 실제로는 머니가 부호 있는 32비트 값으로 저장되고 데이터는 런 렝스 인코딩(RLE) 됨.
- 게임 치트를 통해 바이트와 16진수, 디스크 파일과 메모리의 수정 가능성을 익혔고, 이후 직접 게임을 만들고 싶다는 생각으로 이어짐.
컴퓨터와의 개인사
- Commodore 64 다음으로 컴퓨터를 경험하면서 디스크에 저장된 바이트와 16진수를 알게 된 이야기를 기록함. 대단하거나 중요한 일화는 아니지만, 기억에 선명하게 남은 여정의 한 부분임.
Packard Bell 데스크톱
- 가족이 베이지색 Packard Bell 386 SX 데스크톱과 CRT 모니터를 보유했고, MS-DOS를 실행했음. 기억 속 버전은 5와 6으로 시작함.
- 어린 시절에는 컴퓨터를 주로 게임 기기로 여겼고,
Carmen Sandiego,Operation Neptune,Oregon Trail,Scorched Earth,SimCity 2000등을 플레이함. - 교육용 소프트웨어인
Dinosaur Adventure와Orbits도 사용함.Dinosaur Adventure에는 좋은 음악이 있었고,Orbits는 행성 표면의 중력이 물체에 미치는 영향을 시각적으로 보여줌. - 각 행성의 중력 조건에서 알을 동시에 떨어뜨려 어느 알이 가장 빨리 떨어지는지 비교할 수 있었으며, 명왕성에서는 알이 깨지지 않을 정도였음.
Orbits는 명왕성이 여전히 행성으로 여겨지던 시기에 제작된 프로그램임.Egghead Software와Electronics Boutique에서 게임과 소프트웨어를 구경한 기억이 있음. 매력적인 박스 아트가 있는 큰 상자 제품과 3.5인치 플로피 디스크만 쌓아 둔 제품이 함께 판매됨.- 플로피 디스크는 느리고 결국 작동을 멈추기도 했지만, 제한된 라이선스를 받거나 모든 것을 대여하는 대신 소프트웨어를 실제로 소유할 수 있다는 점을 여전히 좋게 여김.
- 초기에 구매한 게임 가운데 하나가
SimCity 2000임.
SimCity 2000
- 실제로
SimCity 2000을 아주 많이 플레이한 것은 아니지만, 돌이켜보면 컴퓨터와 함께한 여정에서 중요한 순간으로 이어짐. SimCity 2000은 등각 투영 방식의 도시 건설 게임임. 좋은 평가를 받았는지는 확실하지 않지만, 그래픽이 아름답다고 느꼈고 샌드박스 게임의 즐거움을 처음 경험하게 해 줌.- 게임에는 달성해야 할 목표가 있었지만, 도시에 이것저것 짓고 결과를 지켜보는 것을 더 좋아함.
- 게임을 잘하지 못해 목표를 달성하기 전에 돈이 바닥나곤 함.
저장 게임
SimCity 2000은 도시 저장 데이터를 컴퓨터의 파일로 보관함. 어느 시점에 디스크의 저장 파일을 편집할 수 있다는 사실을 알게 됐지만, 어떻게 알았는지는 기억나지 않음.- 저장 게임이 디스크 파일로 저장된다는 점의 의미를 스스로 독립적으로 알아냈을 가능성은 10% 정도라고 생각함.
- 게임 머니를 늘리는 과정은 다음과 같음.
- 게임에서 보유한 돈을 기록하고 게임을 저장함.
- 저장 파일을 열어 해당 값을 이진 데이터에서 검색함.
- 값을 더 크게 바꿔 저장한 뒤, 저장 게임을 다시 불러옴.
- MS-DOS에 내장된
EDIT명령은 텍스트 파일만 편집할 수 있어 이진 파일 편집에는 적합하지 않았음.
16진수
- 이진 데이터를 편집하려면 텍스트 편집기의 이진 파일 버전과 같은 헥스 에디터를 사용함.
- 헥스 에디터는 바이트 단위로 맞춰 간결하게 표시하기 위해 보통 16진수를 기본으로 사용하고, 옆에 ASCII 표시를 함께 제공함. 사용한 프로그램은
Norton Utilities의DiskEdit였던 것으로 추정함. - 16진수는 10진수와 기본적으로 같지만, 밑을 2의 거듭제곱에 맞추기 위해
A부터F까지를 추가한다는 점을 배움. - 게임 머니 값을 16진수로 검색해 모든 자릿수를
F로 바꾸면 보유 금액을 최대로 늘릴 수 있었음. - 저장 파일 형식에 관한 당시의 설명은 완전히 정확하지 않음.
- 당시에는 저장 형식이 머니 값을 가능한 한 적은 바이트로 기록한다고 이해함. 예를 들어 20,000달러는 16진수
4E20이므로 두 바이트만 기록되고, 이를FFFF로 바꾸면 65,535달러가 됨. - 그 뒤 저장 게임을 불러와 몇 달러를 버는 사소한 행동을 하고 같은 과정을 반복하면, 이번에는
FFFFFF로 바꿔 약 1,600만 달러까지 늘릴 수 있었음. - 이후 누군가
SimCity 2000파일 형식을 역공학한 결과, 실제로는 데이터가 런 렝스 인코딩(RLE)되고 머니 값은 항상 부호 있는 32비트 값이라는 점이 밝혀짐. - 상위 두 바이트의
0000은 두 번째 바이트인00을 한 번 더 반복하라는 뜻의8100으로 변환됨. 반복되는 바이트가 큰 엔디안 머니 값 안에 들어 있지 않다면, 어린 시절 사용한 방법은 설명과 달리 실제로도 잘 작동함.
16진수 변환
- 아버지가 요청을 받고 10진수를 16진수로 바꾸는 변환기를 만들었던 것으로 기억함. C로 작성했고,
Power C컴파일러를 썼을 가능성이 있으며,for반복문을 사용했을 수도 있음. - 현재의 구현은 C 표준 라이브러리를 이용해 입력된 부호 없는 정수를 16진수로 출력하는 방식임.
- 16진수를 10진수로 바꾸는 기능은 필요하지 않았음. 16진수 자릿수를 모두
F로 덮어쓰기만 하면 됐기 때문임.
치트 과정을 다시 살펴보기
- 앞서 설명한 10진수-16진수 변환기는 사실 불필요했음. 과정을 다시 확인하다가
Norton DiskEdit에 이미 내장된 16진수 변환 기능이 있다는 점을 알아챔. DiskEdit는 원래DosBox에서는 작동하지 않고DosBox-X에서만 작동했으며,IMGMOUNT를 통해 원시 이미지 파일을 마운트해야 했음.DiskEdit는 DOS 파일 API를 거치지 않고 하드 드라이브를 직접 조작하는 것으로 보임.
SimCity를 넘어
- 지금은 비트와 바이트, 16진수가 익숙해 사소한 작업이지만, 당시에는 큰 돌파구였음.
SimCity 2000에서 치트를 할 수 있었고, 바이트와 16진수도 배움. - 그 지식을 바탕으로 다른 게임도 해킹할 수 있을지 궁금해했고, 이후 플레이한 거의 모든 게임에서 비슷한 시도를 했을 가능성이 있음.
- 나중에는 게임 실행 중 메모리의 바이트를 검색하고 수정하는 도구도 찾음.
Game Wizard라는 이름이었던 것으로 기억함. - 이 도구로 체력 값이 메모리의 어디에 저장됐는지 찾아 원하는 때에 체력을 가득 채울 수 있었음.
Nintendo Entertainment System용Game Genie도 이런 방식으로 작동했을 것으로 추측하지만, 도구를 찾아 실제 동작을 확인할 만큼 부지런하지는 않음.
배운 점
- 게임 치트를 통해 다음을 이해함.
- 16진수는 원시 바이트를 표시하는 데 편리함.
- 디스크의 파일은 쉽게 접근할 수 있음. 적어도 DOS에서는 그러했으며, 현대 휴대전화에서는 그렇지 않음.
- 메모리와 디스크에 있는 바이트는 수정할 수 있음.
- 이런 이해가 이후 컴퓨터 분야에서의 성공에 기여했을 가능성이 있음. 작은 토대였지만,
SimCity 2000에서 이기는 방법을 익힌 뒤 컴퓨터를 더 큰 목표에 활용하고 싶어졌고, 직접 게임을 만들고 싶다는 생각으로 이어짐.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요