요술 고양이 펠릭스 한글 패치
원제는 “Felix the Cat”
armips를 포크해 롬 패치에 적합한 nessnes라는 프로그램을 만들었다. 수많은 매퍼를 전부 구현하기보다는 일단 자주 쓰이는 기본 매퍼 위주로 지원했다.
지시어에 따라 iNES 1.0과 NES 2.0 헤더를 선택한 매퍼에 맞춰 뱅크 단위와 ROM 위치를 자동 계산하공 .orga로 ROM 파일의 절대 오프셋을 직접 지정, .bank의 기본 CPU 주소를 사용하거나 .bank 뒤에 CPU 주소를 직접 명시하는 방식으로 조립할 수 있게 만들었다. 여기에 간단한 MCP를 붙여 반자동화한 뒤 시험 삼아 이 게임으로 한글 패치를 진행해 봤다. 매퍼 자체를 바꿔야 하거나 타일 수 부족으로 스캔라인 단위로 타일을 재구성한 CHR을 스왑하는 경우가 아니라면 대부분은 어떻게든 해결이 가능했다.
NES는 대사가 얼마 없어도 생각할 부분이 정말 많다. 아래 코드를 보면 별거 없어 보이지만 분석할 때는 정말 스트레스다. 그래도 6502는 NES와 떼어놓고 보면 교육용으로 배우기에 꽤 좋은 어셈블리라고 생각한다~~
아무튼 잘 되는 것 같다!
스크린 샷

코드
.nes
.mapper 4
.open "Felix the Cat (USA).nes", "Felix the Cat (KR).nes"
.prg
.bank 3, 0xA000
.loadtable "kr_table.txt", "utf-8"
.org 0xBC9A ; ROM 0x07CAA
; "<LINE><LINE> "Riiing..!"<LINE><END>"
.string "<LINE><LINE> [따르릉...!]<LINE><END>"
.org 0xBCAB ; ROM 0x07CBB
; "Felix, if you<LINE>don't want to<LINE>give me the bag,<LINE>I'll get it from<LINE>you anyway."<LINE>Click!!<LINE><END>
.string "[펠릭스,가방을 내놓지 않겠다<LINE>면 어떻게 해서든 네게서 빼앗<LINE>아 가겠다.<LINE>딸깍!!]<END>"
.org 0xBD00 ; ROM 0x07D10
; "You're doing<LINE>well, Felix. But<LINE>soon your game<LINE>will be over."<LINE>Click!!<LINE><END>
.string "[잘하고 있구나,펠릭스~하지만<LINE>곧 네 게임도 끝날 거다~<LINE>딸깍!!]<END>"
.org 0xBD46 ; ROM 0x07D56
; "I'm getting<LINE>mad, Felix!<LINE>I can't control<LINE>myself<LINE>any more."<LINE>Click!!<LINE><END>
.string "[화가 나는군,펠릭스!<LINE>이제 더는 나 자신을 억제할<LINE>수가 없어~<LINE>딸깍!!]<END>"
.org 0xBD8A ; ROM 0x07D9A
; "Felix, I can't<LINE>stand it<LINE>anymore.<LINE>I'm going to<LINE>smash you!"<LINE>Click!!<LINE><END>
.string "[펠릭스,더는 참을 수 없다~<LINE>널 박살 내겠다!<LINE>딸깍!!]<END>"
.org 0xBDCE ; ROM 0x07DDE
; "Felix, you did<LINE>a good job<LINE>getting here but<LINE>this will be our<LINE>last battle."<LINE>Click!!<LINE><END>
.string "[펠릭스,여기까지 잘 왔지만,<LINE>이번이 우리의 마지막 전투가<LINE>될 거다~ <LINE>딸깍!!]<END>"
.bank 12
.org 0x84C6 ; ROM 0x184D6
; <05>Congratulations!<FF><FF><06>At last FELIX!<FF><FF><06>You rescued Kitty!<FF><FF><FF><LINE>I love you,<FF><10>FELIX!<END>
.string "<05>축하해!<FF><FF><06>드디어 해냈구나,펠릭스!<FF><FF><06>키티를 구출했어!<FF><FF><FF><LINE>사랑해,펠릭스!<END>"
.bank last
.org 0xE9DE ; ROM 0x1E9EE
adc #0x00 ; 원본: adc #0x20
.org 0xE9F0 ; ROM 0x1EA00
cmp #0xDE
bne 0xE9F7
nop ; 원본: jmp 0xEA84
nop ; 원본: jmp 0xEA84
nop ; 원본: jmp 0xEA84
.org 0xE9F7 ; ROM 0x1EA07
cmp #0xDF
bne 0xE9FE
nop ; 원본: jmp 0xEA8C
nop ; 원본: jmp 0xEA8C
nop ; 원본: jmp 0xEA8C
; ----------------------------------------------------------------
; 하트 타일 오른쪽으로 1픽셀 수정
.orga 0x10245
.db 0x49, 0x00 ; 빈 타일 0x48개
.db 0x81, 0x24 ; 타일 0x24 1개
.db 0x3A, 0x00 ; 빈 타일 0x3B개
; 로고 E를 빈 타일로 교체
.orga 0x10220
.db 0x00 ; 0xBA
.orga 0x10221
.db 0x00 ; 0xAC
.orga 0x1022B
.db 0x00 ; 0xBB
.orga 0x1022C
.db 0x00 ; 0xBC
.orga 0x1004C
; 사용할 수 있는 타일
; 0xCA~0xCF, 0xDA~0xDE
; 0xBA, 0xAC, 0xBB, 0xBC = 기존 로고 E 타일
; PUSH START BUTTON
; 0xCA, 0xCB, 0xCC, 0xCD, 0x00, 0x00, 0xCC, 0xCE, 0xCF, 0xDA, 0xCE, 0x00, 0xDB, 0xCB, 0xCE, 0xCE, 0xDC, 0xDD, 0x00, 0xDE
; 스 타 트 버 튼 을 눌 러 주 세 요 !
.db 0x00, 0x00, 0xCA, 0xCB, 0xCC, 0x00, 0xCD, 0xCE, 0xCF, 0x00, 0xDA, 0xDB, 0x00, 0xDC, 0xDD, 0xDE, 0xAC, 0x00, 0x00, 0x00
.orga 0x3B210
.incbin "kr_font.bin"
.close
패치
USA MD5: 2F037C1DA6A59F56A0F65C6971F8B3BD xdelta 패치 파일