{"objective":"runtime checkpoint entry strategy for original Hwanse2.exe validation","status":"checkpoint-entry-methods-separated","methodRows":[{"method":"natural-runtime","label":"자연 실행","status":"usable","scope":"인트로/타이틀/초기 메뉴처럼 실행만으로 도달하는 구간","evidence":"openingSelectedObserved=True","limit":"임의 시나리오 위치로 점프하지는 못함"},{"method":"key-buffer-automation","label":"키버퍼 자동 입력","status":"usable","scope":"현재 런타임 상태에서 메뉴/이동/전투 입력을 자동화","evidence":"keyBufferPokeChangedSelectedPointer=True; visualSelectors=-","limit":"멀리 있는 이벤트는 시간이 오래 걸리고, 이벤트 flag를 건너뛰지는 못함"},{"method":"title-newgame-automation","label":"타이틀 신규 시작 자동 진입","status":"missing-evidence","scope":"원본 EXE 자연 실행 후 타이틀에서 신규 시작 첫 장면까지 진입","evidence":"titleMenuSelectors=-; newGameSelectors=-; sequence=Return@key-buffer,Down@action-mask,z@key-buffer","limit":"100초 전후 자연 대기가 필요하며, 50:0 루트는 메뉴와 신규 시작 초기 프롬프트를 함께 포함한다"},{"method":"captured-save-checkpoint","label":"캡처 세이브 체크포인트","status":"blocked","scope":"실제 게임이 저장한 SaveData/savedatN.dat에서 특정 위치로 즉시 진입","evidence":"savePathKnown=True; presentFiles=0","limit":"현재 repo에는 실제 savedat*.dat가 없음. 합성 save는 promotion proof로 쓰지 않음"},{"method":"constructed-save-selector","label":"합성 save selector","status":"diagnostic-only","scope":"selector/좌표 byte를 바꿔 loader 반응을 보는 진단","evidence":"patched public-base diagnostic reached constructed selector in prior runs","limit":"정상 게임 상태가 아니므로 맵 이동/시나리오 확정 증거로 승격 금지"},{"method":"selected-pointer-patch","label":"selected-pointer 직접 패치","status":"blocked","scope":"0x0059de30만 바꿔 scene root를 바꾸는 시도","evidence":"selector alone is insufficient; actor/camera/active-order/flags are separate","limit":"화면/오브젝트/flag 상태가 동기화되지 않으면 깨진 상태가 됨"},{"method":"full-runtime-state-patch","label":"전체 런타임 상태 패치","status":"candidate","scope":"selected root + active object order + actor tile/camera + flags를 함께 맞춰 체크포인트 구성","evidence":"patchedFollowupAvailable=True; movementRuntimeGrounded=True","limit":"아직 flag/scene VM 상태 전체 layout이 확정되지 않아 좁은 실험만 가능"}],"runtimeEvidenceRows":[{"label":"opening-noinput","path":"out/runtime_validation_opening/runtime_opening_noinput_poll.html","href":"../out/runtime_validation_opening/runtime_opening_noinput_poll.html","exists":false,"meaning":"실행/화면/메모리 poll 성립"},{"label":"title-reach","path":"out/runtime_validation_title_reach/runtime_opening_noinput_poll.html","href":"../out/runtime_validation_title_reach/runtime_opening_noinput_poll.html","exists":false,"meaning":"자연 실행으로 타이틀 이미지 도달"},{"label":"title-menu-return","path":"out/runtime_validation_title_accept/runtime_visual_key_sequence_title_return.html","href":"../out/runtime_validation_title_accept/runtime_visual_key_sequence_title_return.html","exists":false,"meaning":"타이틀 Return 입력으로 50:0 메뉴 루트 진입"},{"label":"title-newgame-mixed","path":"out/runtime_validation_title_newgame_mixed/runtime_visual_key_sequence_title_newgame_mixed.html","href":"../out/runtime_validation_title_newgame_mixed/runtime_visual_key_sequence_title_newgame_mixed.html","exists":false,"meaning":"Return + Down action-mask + z로 신규 시작 첫 장면 진입"},{"label":"visual-key-battle","path":"out/runtime_validation_visual/runtime_visual_key_sequence_battle_space.html","href":"../out/runtime_validation_visual/runtime_visual_key_sequence_battle_space.html","exists":false,"meaning":"전투 화면 + key-buffer + actor script timeline"},{"label":"visual-key-logo","path":"out/runtime_validation_visual/runtime_visual_key_sequence_skip_space.html","href":"../out/runtime_validation_visual/runtime_visual_key_sequence_skip_space.html","exists":false,"meaning":"시작 로고 구간 key-buffer 타이밍 반례"},{"label":"input-path","path":"out/runtime_input_path_probe.json","href":"../out/runtime_input_path_probe.json","exists":true,"meaning":"X key state vs key-buffer 직접 입력 분리"},{"label":"runtime-movement","path":"out/runtime_movement.html","href":"../out/runtime_movement.html","exists":true,"meaning":"필드 이동/충돌/party trail 런타임 근거"},{"label":"save-path","path":"out/runtime_save_path_context.json","href":"../out/runtime_save_path_context.json","exists":true,"meaning":"SaveData 경로/loader/read blocks/selected pointer store"},{"label":"patched-selector-followup","path":"out/runtime_patched_selector_followup_context.json","href":"../out/runtime_patched_selector_followup_context.json","exists":true,"meaning":"constructed selector 진단이 promotion proof가 아닌 이유"},{"label":"selector-review","path":"web/selector_review.html","href":"web/selector_review.html","exists":true,"meaning":"selector frontier proof matrix"}],"selectorCheckpointRows":[{"selector":"0:0","selectedPointerHex":"0x00501808","fieldMapCount":2,"fieldMaps":["map1_01a","map1_02b"],"linkedCnsPreview":["map_a1.cns","map_a2.cns","cara_at2.cns","face_01.cns","cara_01.cns","cara_etc.cns","map1_01a.cns","map_b1.cns","map_b2.cns","map_b3.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"1:0","selectedPointerHex":"0x00478364","fieldMapCount":10,"fieldMaps":["map2_02d","map2_18d","map2_09g","map2_10g","map2_11g","map2_12h","map2_17h","map2_14j","map2_15j","map2_16j"],"linkedCnsPreview":["map_d1.cns","map_d2.cns","map_d3.cns","face_01.cns","cara_01.cns","cara_03.cns","cara_10.cns","map2_02d.cns","map2_18d.cns","cara_at2.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"2:0","selectedPointerHex":"0x00540714","fieldMapCount":11,"fieldMaps":["map1_01a","map2_02d","map2_18d","map2_09g","map2_10g","map2_11g","map2_12h","map2_17h","map2_14j","map2_15j","map2_16j"],"linkedCnsPreview":["map_a1.cns","map_a2.cns","face_01.cns","cara_01.cns","cara_05.cns","cara_etc.cns","map1_01a.cns","map_d1.cns","map_d2.cns","map_d3.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"3:0","selectedPointerHex":"0x004c9a8c","fieldMapCount":6,"fieldMaps":["map3_02f","map3_03h","map3_04h","map3_05h","map3_06h","map3_07h"],"linkedCnsPreview":["map_f1.cns","map_f2.cns","map_f3.cns","face_01.cns","cara_04.cns","map3_02f.cns","map_h1.cns","map_h2.cns","map3_03h.cns","map3_04h.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"3:1","selectedPointerHex":"0x004c9ab4","fieldMapCount":6,"fieldMaps":["map3_02f","map3_03h","map3_04h","map3_05h","map3_06h","map3_07h"],"linkedCnsPreview":["map_f1.cns","map_f2.cns","map_f3.cns","face_01.cns","cara_04.cns","map3_02f.cns","map_h1.cns","map_h2.cns","map3_03h.cns","map3_04h.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"4:0","selectedPointerHex":"0x0044aa78","fieldMapCount":12,"fieldMaps":["map3_09a","map2_02d","map2_18d","map2_09g","map2_10g","map2_11g","map2_12h","map2_17h","map2_14j","map2_15j","map2_16j","map3_08j"],"linkedCnsPreview":["map_a1.cns","map_a2.cns","face_01.cns","cara_etc.cns","map3_09a.cns","map_d1.cns","map_d2.cns","map_d3.cns","cara_01.cns","cara_03.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"4:1","selectedPointerHex":"0x0044aad0","fieldMapCount":9,"fieldMaps":["map3_09a","map2_02d","map2_18d","map2_09g","map2_10g","map2_11g","map2_12h","map2_17h","map2_14j"],"linkedCnsPreview":["map_a1.cns","map_a2.cns","face_01.cns","cara_etc.cns","map3_09a.cns","map_d1.cns","map_d2.cns","map_d3.cns","cara_01.cns","cara_03.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"5:0","selectedPointerHex":"0x00532940","fieldMapCount":4,"fieldMaps":["map7_05h","map4_01l","map4_09l","map4_08n"],"linkedCnsPreview":["map_h1.cns","map_h2.cns","face_01.cns","cara_17.cns","cara_05.cns","map7_05h.cns","map_l1.cns","map_l2.cns","map4_01l.cns","map4_09l.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"6:0","selectedPointerHex":"0x004f5ae8","fieldMapCount":6,"fieldMaps":["map4_02f","map4_03h","map4_04h","map4_05h","map4_06h","map4_07h"],"linkedCnsPreview":["map_f1.cns","map_f2.cns","map_f3.cns","face_01.cns","cara_03.cns","cara_01.cns","map4_02f.cns","map_h1.cns","map_h2.cns","map4_03h.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"7:0","selectedPointerHex":"0x004e4388","fieldMapCount":1,"fieldMaps":["map4_08n"],"linkedCnsPreview":["map_n1.cns","map_n2.cns","face_01.cns","cara_07.cns","cara_etc.cns","map4_08n.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"8:0","selectedPointerHex":"0x00494c34","fieldMapCount":12,"fieldMaps":["map5_01f","map5_40f","map5_02h","map5_04h","map5_03h","map5_05h","map5_06h","map5_07h","map5_08h","map5_09h","map5_10h","map5_39h"],"linkedCnsPreview":["map_f1.cns","map_f2.cns","map_f3.cns","face_01.cns","cara_03.cns","cara_08.cns","cara_07.cns","cara_etc.cns","map5_01f.cns","map5_40f.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"9:0","selectedPointerHex":"0x0045d7a0","fieldMapCount":6,"fieldMaps":["map2_01c","map2_13c","map2_03l","map4_01l","map4_09l","map4_08n"],"linkedCnsPreview":["map_c1.cns","map_c2.cns","cara_sm2.cns","face_01.cns","map2_01c.cns","map2_13c.cns","map_l1.cns","map_l2.cns","map2_03l.cns","cara_12.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"10:0","selectedPointerHex":"0x0053c4a4","fieldMapCount":10,"fieldMaps":["map2_02d","map2_18d","map2_09g","map2_10g","map2_11g","map2_12h","map2_17h","map2_14j","map2_15j","map2_16j"],"linkedCnsPreview":["map_d1.cns","map_d2.cns","map_d3.cns","face_01.cns","cara_01.cns","cara_03.cns","map2_02d.cns","map2_18d.cns","map_g1.cns","map_g2.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"11:0","selectedPointerHex":"0x004c3e08","fieldMapCount":13,"fieldMaps":["map5_01f","map5_40f","map5_02h","map5_04h","map5_03h","map5_05h","map5_06h","map5_07h","map5_08h","map5_09h","map5_10h","map5_39h","map2_15j"],"linkedCnsPreview":["map_f1.cns","map_f2.cns","map_f3.cns","face_01.cns","cara_03.cns","cara_08.cns","cara_07.cns","cara_etc.cns","map5_01f.cns","map5_40f.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"12:0","selectedPointerHex":"0x0048458c","fieldMapCount":2,"fieldMaps":["map5_14i","map5_37i"],"linkedCnsPreview":["map_i1.cns","map_i2.cns","face_01.cns","cara_15.cns","map5_14i.cns","map5_37i.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"13:0","selectedPointerHex":"0x004449f4","fieldMapCount":8,"fieldMaps":["map5_14i","map5_13i","map5_11i","map5_12i","map5_15i","map5_16i","map5_17i","map5_18i"],"linkedCnsPreview":["map_i1.cns","map_i2.cns","face_01.cns","cara_15.cns","cara_08.cns","map5_14i.cns","map_i3.cns","cara_sm1.cns","cara_09.cns","map5_13i.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"13:1","selectedPointerHex":"0x00444a44","fieldMapCount":10,"fieldMaps":["map5_14i","map5_13i","map5_11i","map5_12i","map5_15i","map5_16i","map5_17i","map5_18i","map5_19i","map5_20i"],"linkedCnsPreview":["map_i1.cns","map_i2.cns","face_01.cns","cara_15.cns","cara_08.cns","map5_14i.cns","map_i3.cns","cara_sm1.cns","cara_09.cns","map5_13i.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"14:0","selectedPointerHex":"0x004e6254","fieldMapCount":3,"fieldMaps":["map4_01l","map4_09l","map4_08n"],"linkedCnsPreview":["map_l1.cns","map_l2.cns","btl_rs.cns","face_01.cns","cara_12.cns","btl_efc.cns","map4_01l.cns","map4_09l.cns","map_n1.cns","map_n2.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"15:0","selectedPointerHex":"0x004a4e9c","fieldMapCount":6,"fieldMaps":["map4_02f","map4_03h","map4_04h","map4_05h","map4_06h","map4_07h"],"linkedCnsPreview":["map_f1.cns","map_f2.cns","map_f3.cns","face_01.cns","cara_03.cns","cara_01.cns","map4_02f.cns","map_h1.cns","map_h2.cns","map4_03h.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"16:0","selectedPointerHex":"0x00468b18","fieldMapCount":12,"fieldMaps":["map5_01f","map5_40f","map5_02h","map5_04h","map5_03h","map5_05h","map5_06h","map5_07h","map5_08h","map5_09h","map5_10h","map5_39h"],"linkedCnsPreview":["map_f1.cns","map_f2.cns","map_f3.cns","face_01.cns","cara_03.cns","cara_08.cns","cara_07.cns","cara_etc.cns","map5_01f.cns","map5_40f.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"17:0","selectedPointerHex":"0x004f28a4","fieldMapCount":10,"fieldMaps":["map2_02d","map2_18d","map2_09g","map2_10g","map2_11g","map2_12h","map2_17h","map2_14j","map2_15j","map2_16j"],"linkedCnsPreview":["map_d1.cns","map_d2.cns","map_d3.cns","cara_sm1.cns","face_01.cns","cara_01.cns","cara_03.cns","map2_02d.cns","map2_18d.cns","map_g1.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"18:0","selectedPointerHex":"0x004ac10c","fieldMapCount":11,"fieldMaps":["map2_04l","map2_05e","map2_06e","map2_07e","map2_08e","map6_01e","map6_02e","map6_03e","map6_04e","map6_05e","map6_06e"],"linkedCnsPreview":["map_l1.cns","map_l2.cns","face_01.cns","cara_01.cns","cara_lst.cns","map2_04l.cns","map_e1.cns","map_e2.cns","map2_05e.cns","map_e3.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"19:0","selectedPointerHex":"0x00474194","fieldMapCount":6,"fieldMaps":["map3_02f","map3_03h","map3_04h","map3_05h","map3_06h","map3_07h"],"linkedCnsPreview":["map_f1.cns","map_f2.cns","map_f3.cns","face_01.cns","cara_04.cns","map3_02f.cns","map_h1.cns","map_h2.cns","map3_03h.cns","cara_17.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"19:1","selectedPointerHex":"0x004741c4","fieldMapCount":6,"fieldMaps":["map3_02f","map3_03h","map3_04h","map3_05h","map3_06h","map3_07h"],"linkedCnsPreview":["map_f1.cns","map_f2.cns","map_f3.cns","face_01.cns","cara_04.cns","map3_02f.cns","map_h1.cns","map_h2.cns","map3_03h.cns","cara_17.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"20:0","selectedPointerHex":"0x00557e68","fieldMapCount":13,"fieldMaps":["map6_12j","map6_13j","map6_14j","map6_15j","map6_16j","map6_17j","map6_18j","map6_19j","map6_20j","map6_21j","map6_22j","map6_24j","map6_25h"],"linkedCnsPreview":["map_j1.cns","map_j2.cns","face_01.cns","cara_etc.cns","map6_12j.cns","map6_13j.cns","map_j3.cns","map6_14j.cns","map6_15j.cns","map6_16j.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"21:0","selectedPointerHex":"0x004e2374","fieldMapCount":3,"fieldMaps":["map6_10e","map7_01f","map7_05h"],"linkedCnsPreview":["map_e1.cns","map_e2.cns","face_01.cns","cara_17.cns","cara_25.cns","cara_etc.cns","p_wb.cns","map6_10e.cns","map_f1.cns","map_f2.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"22:0","selectedPointerHex":"0x00459dc4","fieldMapCount":4,"fieldMaps":["map7_09k","map7_10k","map7_11k","map7_12k"],"linkedCnsPreview":["map_k1.cns","map_k2.cns","cara_at2.cns","cara_sm2.cns","face_01.cns","cara_03.cns","cara_05.cns","cara_etc.cns","map7_09k.cns","cara_12.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"48:9","selectedPointerHex":"0x00500000","fieldMapCount":2,"fieldMaps":["map2_04l","map2_05e"],"linkedCnsPreview":["map_l1.cns","map_l2.cns","face_01.cns","cara_01.cns","map2_04l.cns","map_e1.cns","map_e2.cns","map2_05e.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"},{"selector":"48:13","selectedPointerHex":"0x00500000","fieldMapCount":2,"fieldMaps":["map2_04l","map2_05e"],"linkedCnsPreview":["map_l1.cns","map_l2.cns","face_01.cns","cara_01.cns","map2_04l.cns","map_e1.cns","map_e2.cns","map2_05e.cns"],"checkpointUse":"save-selector-candidate","runtimeStatus":"requires-captured-save-or-full-state"}],"selectorCheckpointCount":29,"selectorTotalCount":94,"saveFileRows":[],"saveFileCount":0,"topMapSelectorCounts":[{"map":"map2_02d","selectorCount":6},{"map":"map2_18d","selectorCount":6},{"map":"map2_09g","selectorCount":6},{"map":"map2_10g","selectorCount":6},{"map":"map2_11g","selectorCount":6},{"map":"map2_12h","selectorCount":6},{"map":"map2_17h","selectorCount":6},{"map":"map2_14j","selectorCount":6},{"map":"map2_15j","selectorCount":6},{"map":"map2_16j","selectorCount":5},{"map":"map3_02f","selectorCount":4},{"map":"map3_03h","selectorCount":4},{"map":"map3_04h","selectorCount":4},{"map":"map3_05h","selectorCount":4},{"map":"map3_06h","selectorCount":4},{"map":"map3_07h","selectorCount":4},{"map":"map4_08n","selectorCount":4},{"map":"map4_01l","selectorCount":3},{"map":"map4_09l","selectorCount":3},{"map":"map5_01f","selectorCount":3},{"map":"map5_40f","selectorCount":3},{"map":"map5_02h","selectorCount":3},{"map":"map5_04h","selectorCount":3},{"map":"map5_03h","selectorCount":3}],"runtimeFindings":{"openingRuntimeObserved":true,"titleReachObserved":false,"titleMenuReturnObservedSelectors":[],"titleNewGameMixedObservedSelectors":[],"titleNewGameFirstSceneVisualEvidence":false,"visualBattleObservedSelectors":[],"keyBufferInputWorks":true,"xEventOnlyInsufficient":true,"capturedSaveFilesPresent":false},"nextActions":[{"action":"title-newgame-runtime-baseline","status":"usable","detail":"자연 실행 100초 후 Return@key-buffer, Down@action-mask, z@key-buffer로 신규 시작 첫 장면까지 진입 가능하다."},{"action":"captured-save-intake","status":"blocked-until-save-file","detail":"실제 게임이 만든 SaveData/savedatN.dat를 받으면 selector/좌표/active order를 읽고 바로 런타임 load 검증으로 연결한다."},{"action":"visual-load-menu-probe","status":"ready-after-save-file","detail":"세이브 파일이 있으면 key-buffer 입력 + screenshot + selected-pointer로 로드 메뉴 진입을 검증한다."},{"action":"full-state-checkpoint-patch","status":"candidate-only","detail":"selected-pointer 단독이 아니라 actor/camera/active-order/flag 묶음이 확인되는 좁은 케이스부터 실험한다."}],"conclusion":"Runtime validation is not limited to manually playing to every point, but arbitrary checkpoint entry needs either a captured save or a fully synchronized runtime state patch. The currently proven general tools are process memory polling, screenshots, and direct key-buffer input. Selector-only or synthetic-save routes remain diagnostic."}
