Repository navigation
Releases: snake759494/srwcb-korean-patch
Release list
v0.11.55 — 제2차 8화 정지 근본 수정 · 작전목적 창 · 장 선택 칸
v0.11.55 — 제2차 8화 정지의 진짜 원인(작전목적 창), 페이즈 종료·타이틀·장 선택 화면
패치 파일 재배포 (2026-10-06, #5) — 처음 올린 v0.11.55 xdelta 는 v0.11.54 와 다른 인코딩 설정
(lzma 2차 압축, 작은 소스·대상 창, 앱 헤더 없음)으로 만들어져, 일부 패처 프로그램·안드로이드 앱에서
체크섬(CRC) 오류가 났습니다. 게임 내용은 그대로이고, xdelta 4종을 v0.11.54 와 같은 형식으로 다시
만들었습니다. 9월에 받으신 분은 xdelta 나 easy-apply zip 을 다시 받아 주세요.
해결한 이슈
| 이슈 | 내용 |
|---|---|
| #1 제2차 8화 브라이트 대사 뒤 멈춤 | 작전목적 창 명령 E7 02 가 재조준 대상에 없어, 번역으로 밀린 블록을 옛 주소로 읽고 스택을 덮었습니다. 아래 상세. |
#2 제2차 페이즈 종료 네/아뇨 위치 |
숫자 칸을 줄인 만큼 선택지 이동을 되돌렸습니다(FC FE 05 → FC 03 05). |
| #3 제3차·EX 단독판 타이틀 메뉴 일본어 | 단독판 Z_SMAP.BIN 의 메뉴 그래픽(멤버 29·33)을 한글로 다시 그렸습니다. |
| #4 EX 슈우편 장 선택 간격 | 셋째 줄의 칸 경계가 2만큼 어긋나 구분선이 글자에 걸렸습니다. 아래 상세. |
#1 — 작전목적 창 E7 02
무엇이 일어났나
8화에서 증원이 오면 승리 조건이 "갼(마 쿠베) 파괴"로 바뀌고 작전목적 창이 갱신됩니다.
이 창은 풀 안의 블록을 읽습니다.
04 00 | L 00 | 승리조건 … FF FF | 패배조건 … FF FF
E7 02 <변위> 핸들러는 블록에서 두 문자열을 찾아 스택의 128바이트 버퍼에 0xFF 까지
길이 검사 없이 복사합니다. 두 가지가 어긋나 있었습니다.
E7 02변위가 옛 값이었습니다. 앞 블록의 승리조건이 번역으로 2바이트 늘어 뒤 블록이
밀렸는데,E7 02는 대사 포인터 목록에 없어 재조준되지 않았습니다. 창은 블록 2바이트 앞을
읽어 쓰레기 오프셋(0xFFA6)을 얻었고, 시나리오 밖의 배경음악 시퀀스 데이터를 문자열로 삼아
10,855바이트를 스택에 복사했습니다.- 그 복사가 메인 루프의 저장된 복귀 주소를
0x47003544로 덮었습니다. 아무 일 없이 대사가
이어지다가 8화 장면이 끝나 메인 루프가 반환하는 순간 쓰레기 주소로 뛰어 멈췄습니다.
제보해 주신 추적 빌드 세이브 두 장(대사 중 / 멈춤)으로 확정했습니다. 멈춤 세이브의 커널
예외 문맥(EPC 0x47003544, 명령어 페치 버스 오류)과 덮인 스택 바이트가 음악 파일과 정확히
일치했습니다. 옛 저장소 #32 도 같은 증상이었는데 그때는 풀 이벤트 참조 문제로 잘못 짚었습니다.
블록 안 L 도 틀려 있었다
L 은 창폭이 아니라 패배조건 문자열의 위치입니다(blk + L + 2). 그동안 게이트가 "원문과
같은 값"을 요구해서, 승리조건 길이가 바뀐 블록의 L 이 옛 값으로 남았습니다. 그 블록들은 작전목적
창의 패배조건이 빈 칸이거나 글자 중간부터 나왔습니다.
| 변위 스테일 | L 불일치 | |
|---|---|---|
| 제2차 | 1 → 0 | 14 → 0 |
| 제3차 | 0 | 0 |
| EX | 0 | 0 |
고친 방법
E7 02를 포인터 형식으로 등록했습니다(tools/analyze_sce_relocation.py).tools/objective_windows.py가 이미지 조립 마지막에E7 02변위와 블록 L 을 다시 씁니다.
블록은 모양으로 찾지 않고, 원문E7 02가 실제로 가리키는 곳과 작전목적 머리글로 정의합니다.
모양으로 찾으면 EX 1화 스크립트 속 우연한FF 04 00 ?? 00을 블록으로 오인해 망가뜨립니다.
#4 — EX 장 선택 화면 칸 경계
장 선택 줄은 [장 이름] │ [난이도] 두 칸이고, 모든 줄에서 둘째 칸 첫 글자가 같은 위치(원문 8)여야
칸 구분선이 글자에 걸리지 않습니다. 셋째 줄 슈우편 │ 레벨 어려움 은 폭 18 로 원문 17 을 넘어,
폭 맞춤 단계가 공백을 깎았습니다. 그 결과 이름 칸이 4(원문 5)로 줄고 난이도 칸이 2 만큼 당겨졌습니다.
트레이닝 모드도 같은 상태였습니다.
세 줄 모두 레이블 "레벨"을 빼고 난이도만 적었습니다.
마사키 │ 쉬움 류네편 │ 보통 슈우편 │ 어려움
ISS 질문 창에 가려지는 부분 줄은 원문처럼 첫 글자만 둡니다. EX 와 트레이닝 모드 모두 적용했습니다.
새 게이트
| 게이트 | 막는 것 |
|---|---|
audit/verify_objective_windows.py |
E7 02 가 제 블록을 가리키는지, 모든 작전목적 블록의 L 이 실제 길이인지 |
audit/verify_ex_chapter_menu.py |
EX·트레이닝 장 선택 줄의 이름 칸 폭·phase 와 둘째 칸 시작 위치 |
audit/verify_pointer_forms.py |
목록에 없는 포인터 형식. 원문 세 게임에서 형식마다 착지율을 재 미등록 고적중 형식이 있으면 실패합니다. 이 게이트가 있었다면 E7 02(99.5%)를 처음부터 잡았습니다. 현재 0종 |
audit/verify_record_prefix.py (정정) |
머리글 L 을 "원문과 같은 값"이 아니라 "실제 패배조건 위치"와 대조 |
게이트 판별력 검사(verify_gate_power.py)에 되심기 표본 3종을 더했습니다.
규칙은 docs/FREEZE_RULEBOOK.md 의 R-OBJHDR(정정)·R-OBJWIN·R-COLUMN·R-OPSET 에 있습니다.
검증
build_all.py --from 3 --to 9 --version v0.11.55전 단계 통과(게이트 32종, 단독판 3종 포함)- 작전목적 창: 제2차 E7 02 53곳·머리글 51, 제3차 79·70, EX 78·71 — 위반 0
- 장 선택 줄: EX·트레이닝 각 10줄 — 위반 0
- 미등록 포인터 형식 0종 (E7 02 를 빼면 게이트가 실패하는 것 확인)
- 게이트 판별력 표본 9종 전부 통과(새 표본 F-objwin-disp 6→6, F-objwin-len 9→9, F-objhdr-len 9→7)
- 제2차 8화 작전목적 창 복호: 승리
갼(마 쿠베) 파괴/ 패배아군 전멸,코지 격파당함 - CB·단독판 xdelta 4종 역적용 결과가 빌드 산출물과 SHA-256 일치
SHA-256 은 release/SHA256SUMS_v0.11.55.txt 에 있습니다.
적용
릴리스의 srwcb-cb-korean-v0.11.55-easy-apply.zip 을 쓰거나, 정품 원본 Track 1 에 해당 xdelta 를
적용하십시오. 단독판(제2차·제3차·EX)도 함께 올렸습니다.
8화는 메모리 카드 세이브로 이어 주세요. 에뮬레이터 즉석 세이브(세이브스테이트)는 옛 이미지의
메모리를 통째로 담고 있어서, 8화 도중에 뜬 세이브스테이트로 이어 가면 새 패치에서도 같은 자리에서
멈출 수 있습니다. 메모리 카드 세이브는 시나리오를 디스크에서 새로 읽으므로 고친 데이터가 쓰입니다.
v0.11.54 — 최종본 (컴플리트 박스 + 제2차·제3차·EX 단독판)
저장소 이전 안내 — 이 프로젝트는
snake7594/srwcb-korean-patch에서 이곳snake759494/srwcb-korean-patch로 옮겨 왔습니다. 이 릴리스가 새 저장소의 첫 릴리스이자 최종본(v0.11.54) 입니다. 옛 주소의 릴리스·이슈는 더 이상 열리지 않습니다.
| 파일 | 대상 |
|---|---|
srwcb-cb-korean-v0.11.54-easy-apply.zip |
컴플리트 박스 (xdelta + .cue + xdelta.exe + 적용 스크립트) |
srwcb-second-third-ex-korean-v0.11.54.xdelta + srwcb-cb-korean-v0.11.54.cue |
컴플리트 박스 (수동 적용) |
srw2-standalone-korean-v0.11.54.xdelta + .cue |
제2차 단독판 (SLPS_024.06) |
srw3-standalone-korean-v0.11.54.xdelta + .cue |
제3차 단독판 |
srwex-standalone-korean-v0.11.54.xdelta + .cue |
EX 단독판 |
SHA256SUMS_v0.11.54.txt |
체크섬 |
v0.11.54 — 게이트 사각지대에 숨어 있던 프리징 조건 2건
v0.11.53 에도 하드행 조건이 남아 있었습니다. 게이트가 산출물의 일부만 보고 있어서
초록불이 나왔을 뿐입니다. 증상 대응을 그만두고 과거 사례 236건에서 규칙을 뽑는 작업을
하다가 찾았습니다.
| 파일 | 페이지 | 한도 |
|---|---|---|
EX/E_SCE.BIN 0xB285C (슈우 대사) |
130바이트 | 127 |
THIRD/3_SCE.BIN 0x80C67 (레빌 대사) |
129바이트 | 127 |
한 페이지가 127바이트를 넘으면 호출자 스택의 128바이트 줄버퍼를 넘어 저장된 s0·s1
(디스패치 표 주소)을 덮고, jr 0xFFFFFFFF → BIOS 미해결예외 루프 → RAM 정지입니다.
EX 23화 듀라크실(#28)을 낸 바로 그 부류입니다.
왜 게이트가 못 봤나
audit/verify_page_bytes.py 는 검사 대상을 scenario.references 로 모았습니다.
그건 풀 앞 구간의 참조만 담습니다. 풀 안 이벤트 스크립트가 겨누는 대사는
목록에 아예 안 들어옵니다.
| 검사하던 비율 | |
|---|---|
| 제2차 | 1,046 / 1,318 (79%) |
| 제3차 | 2,886 / 3,803 (75%) |
| EX | 4,201 / 4,966 (84%) |
그 사각지대에 130·129바이트 페이지가 들어 있었습니다. 열거를
block_start ~ record_data_end 전 구간으로 넓혔습니다.
고친 대사
- EX 슈우 —
때로는 적이었고, 때로는 아군→때로는 적, 때로는 아군 - 제3차 레빌 —
남은 전력은 자네들 론도 벨뿐이다→남은 전력은 론도 벨뿐이다
함께 바로잡은 표기
사이버스터 47곳 → 사이바스터. 이름표는 이미 사이바스터 인데 EX 대사만 갈려
있었습니다(v0.11.44 의 용어 통일이 사이버스타 만 잡고 사이버스터 를 놓쳤습니다).
새 게이트 셋
| 게이트 | 막는 것 |
|---|---|
audit/verify_record_prefix.py |
작전목적 머리글 E9 03 FE FF 04 00 <창폭> 00 훼손 (EX 마사키 9·11·27화, 류네 45·49화, 슈우 58화 — #10·#11·#24). 이 부류를 보는 게이트가 하나도 없었습니다. 192개 대조 |
audit/verify_bmess_tables.py |
실행파일에 복제된 BMESS 목차표 스테일 → 전투 중 정지. 15건 대조 |
audit/verify_gate_power.py |
게이트가 과거 결함을 되심었을 때 정말 실패하는지 증명. 표본 6종 |
audit/verify_pool_event_refs.py 의 눈멂도 제거했습니다 — host 레코드 길이로 거르던
것을 레코드 시작부터 참조 자리까지의 바이트 일치로 바꿨습니다. 길이 조건은 한 번
고쳐서 경계가 움직이면 그 자리를 영영 못 보는 시야였습니다. 검사량 148/908/696 →
240/908/729.
규칙표
docs/FREEZE_RULEBOOK.md 에 정리했습니다. 릴리스 노트 61개·프로젝트
기억 37개·이슈 전문·감사 코드 27개에서 해결 사례 236건을 채굴하고 불변식으로 묶은
것입니다. 회귀가 되풀이된 이유도 한 문장으로 나왔습니다 —
게이트가 '결함이 지나갈 수 있는 자리' 를 보는 게 아니라 '수정기가 이미 본 자리' 를
다시 본다. 그래서 수정기가 눈먼 곳에서는 게이트도 눈이 멀고, 초록불이 곧 침묵이 된다.
아직 남은 것 — 숨기지 않겠습니다
제2차 sc4 의 이벤트 참조 한 곳이 여전히 엉뚱한 대사를 가리킵니다.
내용으로 확인했습니다 — 「화「카미유!? 무사했구나!!?」」가 나와야 할 자리에
「사야카「나, 일본에 가서 제트 스크랜더를…」」가 나옵니다.
원인은 레코드 분할이 레트일과 어긋나는 것입니다. 포인터 변위의 낮은 바이트가
0xFF 이면 우리 도구의 레코드 훑기가 거기서 끊깁니다. 그래서 그 자리 뒤로 서수가
밀리고, 재조준기가 대응 자리를 못 찾아 건너뜁니다.
근본 수정은 레코드 파서가 포인터 피연산자의 0xFF 를 종단자로 보지 않게 하는 것
인데, 파서는 재배치기와 게이트 전부가 쓰는 핵심이라 이번 판에 섞지 않았습니다.
다음 판에서 따로 다루겠습니다.
받는 법
- 컴플리트 박스:
srwcb-cb-korean-v0.11.54-easy-apply.zip을 풀고apply.ps1실행 - 단독판:
srw2/srw3/srwex각각의.xdelta+.cue - 반드시 함께 들어 있는
.cue로 실행하세요..ccd는 멈춥니다.
세이브 데이터는 그대로 쓰시면 됩니다.