<글에 앞서서 주의할 점 사.가.지>
1. 괴수분들이 써주신 쉽고(..?) 재미난 강좌들을 먼저 읽어주세요.
2. 제가 여러가지 시도해가며 스스로 '대략 이런거구나~' 라고 이해한 것들이
태반이기에 실제 지식과는 다를 수 있습니다. (랄까 전부 다를지도...)
3. 이건 꼭 필요한 정보인걸? 은 없습니다.
4. 정확한 명칭이 아닐 수 있습니다. 제가 부르기 편한 걸로 막 진행합니다.
네, 드디어 4편을 끄적여보는 프군입니다.
사실 바로 적으려 했는데, 히데님의 디나이 필터 강의의 그림을 보고는 적을 수가 없게 되었죠.
제가 글로 설명해보려고 한 것이 그 내용이었거든요. 그림으로 압축되어 간단히 설명되 버리니
딱히 할말이 없군요. 게다가 제가 설명하려는 내용과 안맞는 부분도 있구.(이거야 전적으로
제가 '이해한' 부분에 의한 것이니 어쩔수 없군요.)
그래서 오늘은 계산쪽으로 넘어가 보겠습니다. 이것까지 적으면 적어도 첫 강의 때
예고한부분까지는 다 적게 되는군요. 계산이라고 해봐야 이과분들에게는 쉬운 부분일 듯
합니다. 저처럼 문과 출신분들에게 조금이나마 도움이 될(지도 모를) 내용이 되겠습니다.
번역인자들은 16진수로 나타납니다. 처음 윈도우 보조프로그램에 있는 계산기의 위대함을(...)
몰랐던 저는 이것을 계산하기 위해 10진수로 변환하여 계산하는 방식을 택했습니다.
'에디트 보조 유틸리티 - 16진수 변환 프로그램' 이라고 해서 검색하면 자주 뜨는 물건입니다.
이걸로 16진수를 10진수로 변환하여 계산, 그리고 다시 16진수로 변환하여 적용하는 방법입니다.
그러나 히데님의 위대함과 계산기의 위대함으로 다시 태어난 저는 이제 저 방법은 안쓰겠지요.
(...)
이과분들은 모르겠지만, 문과출신분들은 대부분 모를겁니다. (아님 저만 몰랐던걸까요...)
(그림 01. 이게 계산기의 위력이닷!)
이럴수가 놀랍지 않습니까? 계산기에 저런 변신기능이 있었다니... 변신 명령 버튼은 간단합니다.
계산기 실행후 왼쪽 윗부분 목록중 보기 부분을 클릭하여 공학용을 눌러주시면 변신 완료입니다.
그림의 Hex 부분이 16진수 쪽이 되겠고, Dec부분이 10진수 쪽이 되겠습니다. 적으신 후 버튼만
바꿔주시면 변환됩니다. 그 외 부분에 대해서도 히데님의 가르침이 내려왔었지만, 기억에 없는걸
보면 분명 제 인생과는 관계가 없는 부분이겠죠. (......)
아 딱히 더 할말이 없군요. 이걸로 계산부분도 끝입니다.
... 라고 하면 '속았다!' 라고 외칠 분들이 계실지도 몰라서 몇 자 더 적어봐야겠군요.
사실 제가 피귯에서 찾아낸 해법은 피귯에서만 통하는 것입니다. 에스쿠드사 게임의 엔진은
시리즈가 새로 나올때마다 바뀌는 느낌이라서요. 하긴 일반 노벨물이 아닌 여러가지 게임성을
추구하는 회사이기에 당연히 시스템쪽 변화가 많아 엔진도 바뀌는 거겠죠.
(덕분에 찾을 땐 우울하지만)
어쨋건 결국 유르님의 시스템4.0(앨리스사 게임) 코드 찾기에 나오는 모듈 계산법과
다를바 없습니다. 단지 에스쿠드 쪽은 시스템 엔진 내부의 메모리쪽의 대사 주소만 밝혀내면
내부 계산이 가능하다는 것이겠네요.
이론적으로는 이렇습니다. (이론이라기보다 제 생각. 기본적인 강좌 주의점과 같습니다.)
기본적으로 계산이 필요한 게임들은 대사 추출하여 브레이크를 시도할시에
메모리 덤프쪽에 다음대사나 전대사 부분은 아예 뜨질 않고
오로지 현재 화면에 뜬 대사만 잡히는 경향이 있습니다. (라고 추측)
물론 계산이 필요없음에도 이러한 게임들은 많이 있습니다. 그런 경우(계산이 필요없는 경우)
엔 장소만 잘 잡으면 쉽게 찾아낼 수 있죠.
그러나 복잡한 구조를 지닌 게임의 경우의 또 다른 특징으로는 매번 대사가 뜨는 주소 부분이
바뀐다는 겁니다. 물론 이경우도 비슷한 게임이 많이 있는데, 확실히 다른점은 번역 인자쪽에
뜨는 주소도 바뀐다는겁니다.
아아... 뭔소린지 알기 힘드시죠?
예를 들어보겠습니다.
Z 라는 주소가 대사를 뽑아낼 수 있는 지점이라고 치고,
A 는 번역인자고, B 는 게임 실행시에 대사가 뜨고 기억되는 장소라고 합시다.
보통 찾기 쉬운 게임의 경우엔 Z라는 장소에서 A라는 번역인자를 지정해주면 간단히 코드가
완성됩니다. A라는 번역인자가 B라는 대사가 기억되는 장소를 품고 있기 때문이죠.
그러나 보통의 경우가 아닌 경우엔 이 A라는 인자가 직접적으로 B라는 곳을 가르키지 않습니다.
Z에서 Z+1 Z+2 ... 계속 진행하는 도중에 게임엔진 나름의 계산을 통해 A가 결국엔 B라는 곳을
가르키는 경우가 되게 바뀌게 되는것이죠.
즉, Z 라는 장소가 맞는 장소이긴 한데 현재 그 장소에서는 A가 B를 품지 못한 상태일 경우,
게임엔진 내부의 계산법을 무시하고 A가 B를 품는 지점을 찾는 것이 인자계산이 되겠죠.
물론 이 경우 실제로 A라는 인자가 품게 되는 것이 아니라 A+1 이든 A+C 든 바뀌긴 합니다.
다시말하자면, Z라는 장소가 확실한 번역 장소일 경우, 번역인자인 A가 B를 품지 못한 상태일 때
B를 품고 있는 인자를 직접적으로 찾는 법이 되는 것이죠.
Z라는 장소에서 B를 품고있는 인자를 찾아 번역하게 되면 결국 Z+1 Z+2 ..... 식이 진행되는 과정에서
이미 번역된 대사가 이동되다가 결국 화면에 출력되게 되는 겁니다.
예를 들만한 게임이 없어 안타깝군요. (랄까 피귯이 있긴 한데 다시 내부 보기도 싫음..)
쓸내용이 팍 줄어서 3편의 예고처럼 많이 나불대지 못하게 되었네요.
물론 덕분에 내용도 전혀 즐겁지 못하구요.
어쨋거나 저쨋거나 예정대로의 내용은 다 적게 되었습니다.
다음 강좌는 쓸만한 내용이 생길경우에(즉, 제가 그런 내용을 발견했거나 이해했을 경우)
하기로 하고, 물러가보겟습니다.
자유게시판 글 보다가 발견한 순애촉수 글 보고 추억이 떠올라 하타야마군을 다시 찾아두고
예제용 게임으로 쓰려고 했지만... 결국 써먹지는 못했군요.
적당한 시기에 공유란에 올려야 겠습니다.
오늘도 제목대로라는...
ps. 쓰고나니 굉장히 짧군요.