{
  "schemaVersion": 1,
  "identity": {
    "gameId": "crusader-of-centy-usa",
    "romSha256": "70846fff7a4da8cd8b280b60e7d9c5009c73e968d8cd63a70b630a24705185f5",
    "coreId": "genesis-plus-gx-ejs4.2.3",
    "coreSha256": "cfec0e5915c4b3d03336482e990a7809f16b37909992f94631c2cad8e92b5aae",
    "stateVersion": "genplus-gx-1.7.6"
  },
  "profileSha256": "bd605a835f219a3823834c172993322f0807e209ef04867e36ad2bbf2b52ee03",
  "scope": "45 automatic source-backed goals:44 main story milestones across16 chapters and one optionalWong goal. The original117 detailed guide IDs and manual choices remain compatible;72 advice rows have no automatic predicate.",
  "originalSource": {
    "file": "crusader-of-centy-usa.md",
    "romBytes": 2097152,
    "unchanged": true
  },
  "sourceLayout": {
    "workingFlagBase": "0xFFC500",
    "persistentFlagBase": "0xFFFE0A",
    "bytes": 64,
    "indexFormula": "base+(flagIndex>>3), mask=1<<(flagIndex&7)",
    "persistentSetHelper": "0x03079E",
    "workingSetHelper": "0x030786",
    "workingClearHelper": "0x0307BE",
    "testHelper": "0x03076C",
    "commitHelper": "0x030B98",
    "saveOriginalPage": "0x031A8A"
  },
  "sourceInterpreter": {
    "pc": "0x0308AA",
    "dispatchTable": "0x0308DA",
    "roots": 1048,
    "commands": 2228,
    "unparsedErrors": [],
    "opcode33CompletionFlag": "0x030CC8..0x030CD4 configure actor fields;0x032C44..0x032C5E set working flag after dialogue"
  },
  "milestones": [
    {
      "stepId": "c1-s1",
      "goal": "Receive the inherited sword",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 1,
          "workingAddress": "0xFFC500",
          "persistentAddress": "0xFFFE0A",
          "mask": 2
        }
      ],
      "sourcePcs": [
        "0x013372",
        "0x01337A",
        "0x01337C",
        "0x01339A",
        "0x0133B8",
        "0x0133BC",
        "0x0133C4"
      ],
      "commitPcs": [
        "0x0133C4"
      ],
      "suggestedPredicate": {
        "allFlags": [
          1
        ]
      },
      "note": "Working flag1 is set after the father-sword dialogue; persistent commit occurs later after party conversations. Flag0 merely starts the birthday script and is unsuitable for receiving the sword.",
      "dialogues": [
        {
          "bank": 3,
          "group": 1,
          "index": 2,
          "textOffset": "0x1C09B0"
        }
      ]
    },
    {
      "stepId": "c1-s5",
      "goal": "Collect the Bronze Medal",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 22,
          "workingAddress": "0xFFC502",
          "persistentAddress": "0xFFFE0C",
          "mask": 64
        }
      ],
      "sourcePcs": [
        "0x01444A",
        "0x014454",
        "0x01445E",
        "0x014460"
      ],
      "commitPcs": [
        "0x01445E"
      ],
      "suggestedPredicate": {
        "allFlags": [
          22
        ]
      },
      "note": "",
      "dialogues": [
        {
          "bank": 9,
          "group": 5,
          "index": 0,
          "textOffset": "0x1C440E"
        }
      ]
    },
    {
      "stepId": "c1-s6",
      "goal": "Learn Sword Throw",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 19,
          "workingAddress": "0xFFC502",
          "persistentAddress": "0xFFFE0C",
          "mask": 8
        }
      ],
      "sourcePcs": [
        "0x0144B0",
        "0x0144BA",
        "0x0144C4",
        "0x0144C8",
        "0x0144DA"
      ],
      "commitPcs": [
        "0x0144DA"
      ],
      "suggestedPredicate": {
        "allFlags": [
          19
        ]
      },
      "note": "Text10/1/1 beginsE0 0013. Source payment takes20 Malins and then announces the learned skill before committing.",
      "dialogues": [
        {
          "bank": 10,
          "group": 1,
          "index": 1,
          "textOffset": "0x1C44F4"
        },
        {
          "bank": 10,
          "group": 1,
          "index": 5,
          "textOffset": "0x1C4690"
        }
      ]
    },
    {
      "stepId": "c2-s2",
      "goal": "Defeat Wolf",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 20,
          "workingAddress": "0xFFC502",
          "persistentAddress": "0xFFFE0C",
          "mask": 16
        }
      ],
      "sourcePcs": [
        "0x02A450",
        "0x02A6DA",
        "0x02A6DE",
        "0x014986",
        "0x014992"
      ],
      "commitPcs": [
        "0x014992"
      ],
      "suggestedPredicate": {
        "allFlags": [
          20
        ]
      },
      "note": "Type69, scene46, constructorHP4. Boss helper sets working20; rescued OldLady later sets21 and commits both. Do not require persistent20 immediately at the killing blow."
    },
    {
      "stepId": "c2-s3",
      "goal": "Gain animal speech",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 24,
          "workingAddress": "0xFFC503",
          "persistentAddress": "0xFFFE0D",
          "mask": 1
        }
      ],
      "sourcePcs": [
        "0x014A42",
        "0x014A4E",
        "0x014A58",
        "0x014A74"
      ],
      "commitPcs": [
        "0x014A74"
      ],
      "suggestedPredicate": {
        "allFlags": [
          24
        ]
      },
      "note": "Flag24 is first fortune-teller dialogue completion before the explanation. Persistent24 is committed after the full explanation.",
      "dialogues": [
        {
          "bank": 8,
          "group": 5,
          "index": 0,
          "textOffset": "0x1C3A0C"
        },
        {
          "bank": 8,
          "group": 5,
          "index": 1,
          "textOffset": "0x1C3A4A"
        }
      ]
    },
    {
      "stepId": "c2-s5",
      "goal": "Learn to jump",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 35,
          "workingAddress": "0xFFC504",
          "persistentAddress": "0xFFFE0E",
          "mask": 8
        }
      ],
      "sourcePcs": [
        "0x014886",
        "0x014890",
        "0x014896",
        "0x0148A8"
      ],
      "commitPcs": [
        "0x0148A8"
      ],
      "suggestedPredicate": {
        "allFlags": [
          35
        ]
      },
      "note": "",
      "dialogues": [
        {
          "bank": 14,
          "group": 1,
          "index": 6,
          "textOffset": "0x1C5368"
        }
      ]
    },
    {
      "stepId": "c3-s3",
      "goal": "Learn to carry objects",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 41,
          "workingAddress": "0xFFC505",
          "persistentAddress": "0xFFFE0F",
          "mask": 2
        }
      ],
      "sourcePcs": [
        "0x014DEE",
        "0x014E04",
        "0x014E16"
      ],
      "commitPcs": [
        "0x014E16"
      ],
      "suggestedPredicate": {
        "allFlags": [
          41
        ]
      },
      "note": "Text18/1/3 startsE0 0029; final lift instruction follows before commit.",
      "dialogues": [
        {
          "bank": 18,
          "group": 1,
          "index": 3,
          "textOffset": "0x1C5DD0"
        },
        {
          "bank": 18,
          "group": 1,
          "index": 4,
          "textOffset": "0x1C5E1A"
        }
      ]
    },
    {
      "stepId": "c3-s7",
      "goal": "Defeat Octopus and recruit Chilly",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 43,
          "workingAddress": "0xFFC505",
          "persistentAddress": "0xFFFE0F",
          "mask": 8
        }
      ],
      "sourcePcs": [
        "0x02AE0E",
        "0x014FEA",
        "0x014FEE",
        "0x014FFC"
      ],
      "commitPcs": [
        "0x014FFC"
      ],
      "suggestedPredicate": {
        "all": [
          {
            "flag": 43
          },
          {
            "ownedBit": 9
          }
        ]
      },
      "note": "Type71 scene57 HP8; working boss flag43 precedes Chilly acquisition. The compound legacy row should require companion9 as well."
    },
    {
      "stepId": "c4-s6",
      "goal": "Defeat Shuffler",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 49,
          "workingAddress": "0xFFC506",
          "persistentAddress": "0xFFFE10",
          "mask": 2
        }
      ],
      "sourcePcs": [
        "0x02B8B6",
        "0x02B8E8",
        "0x02B8EE"
      ],
      "commitPcs": [
        "0x02B8EE"
      ],
      "suggestedPredicate": {
        "allFlags": [
          49
        ]
      },
      "note": "",
      "dialogues": [
        {
          "bank": 23,
          "group": 2,
          "index": 1,
          "textOffset": "0x1C6A6E"
        }
      ]
    },
    {
      "stepId": "c5-s8",
      "goal": "Return to human form and recruit Pieces",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 96,
          "workingAddress": "0xFFC50C",
          "persistentAddress": "0xFFFE16",
          "mask": 1
        },
        {
          "flag": 83,
          "workingAddress": "0xFFC50A",
          "persistentAddress": "0xFFFE14",
          "mask": 8
        }
      ],
      "sourcePcs": [
        "0x01576E",
        "0x015782",
        "0x015788",
        "0x015814",
        "0x015818",
        "0x01579A",
        "0x0157A2"
      ],
      "commitPcs": [
        "0x015782",
        "0x0157A2"
      ],
      "suggestedPredicate": {
        "allFlags": [
          96,
          83
        ]
      },
      "note": "PiecesID16 is later removed at181A0; flag83 records the earlier recruitment dialogue and has no known clear in the complete extracted scripts/dialogues.",
      "dialogues": [
        {
          "bank": 32,
          "group": 1,
          "index": 6,
          "textOffset": "0x1C7EB4"
        },
        {
          "bank": 32,
          "group": 1,
          "index": 9,
          "textOffset": "0x1C8036"
        }
      ]
    },
    {
      "stepId": "c6-s7",
      "goal": "Defeat Roxie (rope monster)",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 94,
          "workingAddress": "0xFFC50B",
          "persistentAddress": "0xFFFE15",
          "mask": 64
        }
      ],
      "sourcePcs": [
        "0x029726",
        "0x02972C"
      ],
      "commitPcs": [
        "0x02972C"
      ],
      "suggestedPredicate": {
        "allFlags": [
          94
        ]
      },
      "note": ""
    },
    {
      "stepId": "c7-s8",
      "goal": "Defeat Georama",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 105,
          "workingAddress": "0xFFC50D",
          "persistentAddress": "0xFFFE17",
          "mask": 2
        }
      ],
      "sourcePcs": [
        "0x02CCA6",
        "0x02CCAC"
      ],
      "commitPcs": [
        "0x02CCAC"
      ],
      "suggestedPredicate": {
        "allFlags": [
          105
        ]
      },
      "note": ""
    },
    {
      "stepId": "c8-s5",
      "goal": "Defeat Leviathan",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 111,
          "workingAddress": "0xFFC50D",
          "persistentAddress": "0xFFFE17",
          "mask": 128
        }
      ],
      "sourcePcs": [
        "0x02C000",
        "0x02C00C"
      ],
      "commitPcs": [
        "0x02C00C"
      ],
      "suggestedPredicate": {
        "allFlags": [
          111
        ]
      },
      "note": ""
    },
    {
      "stepId": "c10-s6",
      "goal": "Defeat Maldra",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 122,
          "workingAddress": "0xFFC50F",
          "persistentAddress": "0xFFFE19",
          "mask": 4
        }
      ],
      "sourcePcs": [
        "0x026D4A",
        "0x026D50"
      ],
      "commitPcs": [
        "0x026D50"
      ],
      "suggestedPredicate": {
        "allFlags": [
          122
        ]
      },
      "note": ""
    },
    {
      "stepId": "c14-s6",
      "goal": "Defeat Chameleon",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 186,
          "workingAddress": "0xFFC517",
          "persistentAddress": "0xFFFE21",
          "mask": 4
        }
      ],
      "sourcePcs": [
        "0x027C14",
        "0x027C1A"
      ],
      "commitPcs": [
        "0x027C1A"
      ],
      "suggestedPredicate": {
        "allFlags": [
          186
        ]
      },
      "note": ""
    },
    {
      "stepId": "c15-s2",
      "goal": "Defeat Puppet Master",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 215,
          "workingAddress": "0xFFC51A",
          "persistentAddress": "0xFFFE24",
          "mask": 128
        }
      ],
      "sourcePcs": [
        "0x02883E",
        "0x028844"
      ],
      "commitPcs": [
        "0x028844"
      ],
      "suggestedPredicate": {
        "allFlags": [
          215
        ]
      },
      "note": ""
    },
    {
      "stepId": "c15-s4",
      "goal": "Defeat Baron",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 239,
          "workingAddress": "0xFFC51D",
          "persistentAddress": "0xFFFE27",
          "mask": 128
        }
      ],
      "sourcePcs": [
        "0x02C57A",
        "0x02C580"
      ],
      "commitPcs": [
        "0x02C580"
      ],
      "suggestedPredicate": {
        "allFlags": [
          239
        ]
      },
      "note": ""
    },
    {
      "stepId": "c15-s7",
      "goal": "Defeat Mother Monster Heart",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 267,
          "workingAddress": "0xFFC521",
          "persistentAddress": "0xFFFE2B",
          "mask": 8
        }
      ],
      "sourcePcs": [
        "0x02E2A0",
        "0x02E2B0"
      ],
      "commitPcs": [
        "0x02E2B0"
      ],
      "suggestedPredicate": {
        "allFlags": [
          267
        ]
      },
      "note": ""
    },
    {
      "stepId": "c7-s7",
      "goal": "Acquire the Giant Plant Seed",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 104,
          "workingAddress": "0xFFC50D",
          "persistentAddress": "0xFFFE17",
          "mask": 1
        }
      ],
      "sourcePcs": [
        "0x0164AC",
        "0x0164B6",
        "0x0164C0",
        "0x0164C4"
      ],
      "commitPcs": [
        "0x0164C4"
      ],
      "suggestedPredicate": {
        "allFlags": [
          104
        ]
      },
      "note": "Flag104 records chest opening; FE7Ebit4 is separately set. Prefer the event flag over inferring from current consumable possession.",
      "dialogues": [
        {
          "bank": 43,
          "group": 1,
          "index": 0,
          "textOffset": "0x1C96CC"
        }
      ]
    },
    {
      "stepId": "c9-s7",
      "goal": "Plant the Giant Plant Seed",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 116,
          "workingAddress": "0xFFC50E",
          "persistentAddress": "0xFFFE18",
          "mask": 16
        }
      ],
      "sourcePcs": [
        "0x01617C",
        "0x016186",
        "0x01618A"
      ],
      "commitPcs": [
        "0x01618A"
      ],
      "suggestedPredicate": {
        "allFlags": [
          116
        ]
      },
      "note": "",
      "dialogues": [
        {
          "bank": 39,
          "group": 3,
          "index": 0,
          "textOffset": "0x1C952E"
        }
      ]
    },
    {
      "stepId": "c10-s7",
      "goal": "Restore human speech and meet Monarchy",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 125,
          "workingAddress": "0xFFC50F",
          "persistentAddress": "0xFFFE19",
          "mask": 32
        },
        {
          "flag": 115,
          "workingAddress": "0xFFC50E",
          "persistentAddress": "0xFFFE18",
          "mask": 8
        }
      ],
      "sourcePcs": [
        "0x0180C8",
        "0x0180D4",
        "0x0180FA",
        "0x018264",
        "0x01826E",
        "0x018272",
        "0x018276"
      ],
      "commitPcs": [
        "0x0180FA",
        "0x018276"
      ],
      "suggestedPredicate": {
        "allFlags": [
          125,
          115
        ]
      },
      "note": "Human-language restoration and Monarchy are separate dialogues. Monarchy115 is committed after PiecesID16 returns.",
      "dialogues": [
        {
          "bank": 97,
          "group": 1,
          "index": 1,
          "textOffset": "0x1D11AA"
        },
        {
          "bank": 98,
          "group": 1,
          "index": 2,
          "textOffset": "0x1D14A2"
        }
      ]
    },
    {
      "stepId": "c11-s5",
      "goal": "Collect the Silver Medal",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 139,
          "workingAddress": "0xFFC511",
          "persistentAddress": "0xFFFE1B",
          "mask": 8
        },
        {
          "flag": 132,
          "workingAddress": "0xFFC510",
          "persistentAddress": "0xFFFE1A",
          "mask": 16
        }
      ],
      "sourcePcs": [
        "0x0169C4",
        "0x0169D8",
        "0x0169DC",
        "0x012DE6",
        "0x012DEA",
        "0x012DEE"
      ],
      "commitPcs": [
        "0x0169DC",
        "0x012DEE"
      ],
      "suggestedPredicate": {
        "anyFlags": [
          139,
          132
        ]
      },
      "note": "139 and FE7Ebit1 can be cleared by gifting the medal to Billy.132 is the source dialogue acceptance-history flag and is not cleared by extracted event scripts/dialogues.",
      "dialogues": [
        {
          "bank": 52,
          "group": 3,
          "index": 0,
          "textOffset": "0x1CAF4C"
        },
        {
          "bank": 4,
          "group": 1,
          "index": 3,
          "textOffset": "0x1C133C"
        },
        {
          "bank": 4,
          "group": 1,
          "index": 6,
          "textOffset": "0x1C1436"
        }
      ]
    },
    {
      "stepId": "c12-s5",
      "goal": "Collect the Gold Medal",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 140,
          "workingAddress": "0xFFC511",
          "persistentAddress": "0xFFFE1B",
          "mask": 16
        }
      ],
      "sourcePcs": [
        "0x016AAA",
        "0x016ABE",
        "0x016AC2"
      ],
      "commitPcs": [
        "0x016AC2"
      ],
      "suggestedPredicate": {
        "allFlags": [
          140
        ]
      },
      "note": "",
      "dialogues": [
        {
          "bank": 54,
          "group": 3,
          "index": 0,
          "textOffset": "0x1CB012"
        }
      ]
    },
    {
      "stepId": "c12-s6",
      "goal": "Receive the Holy Sword",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 143,
          "workingAddress": "0xFFC511",
          "persistentAddress": "0xFFFE1B",
          "mask": 128
        }
      ],
      "sourcePcs": [
        "0x013764",
        "0x013770",
        "0x013784",
        "0x013790",
        "0x013792"
      ],
      "commitPcs": [
        "0x013790"
      ],
      "suggestedPredicate": {
        "u8Bits": {
          "cpuAddress": "0xFFFE7E",
          "mask": 8
        }
      },
      "note": "Source hard-waits for22/139/140;143 only marks preliminary exchange dialogue. Actual Holy Sword property is FE7Ebit3 set by opcode61 after gain dialogue. King exchange does not clear medals in this script. Width correction:03103A isBSET.B toCPUbyteFE7E; if reading16bits atFE7E the equivalent mask is0x0800.",
      "dialogues": [
        {
          "bank": 5,
          "group": 1,
          "index": 6,
          "textOffset": "0x1C2460"
        },
        {
          "bank": 5,
          "group": 1,
          "index": 7,
          "textOffset": "0x1C2532"
        }
      ]
    },
    {
      "stepId": "c13-s5",
      "goal": "Collect the Magic Shoes",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 174,
          "workingAddress": "0xFFC515",
          "persistentAddress": "0xFFFE1F",
          "mask": 64
        },
        {
          "flag": 175,
          "workingAddress": "0xFFC515",
          "persistentAddress": "0xFFFE1F",
          "mask": 128
        }
      ],
      "sourcePcs": [
        "0x016B08",
        "0x016B1C",
        "0x016B24",
        "0x016B26"
      ],
      "commitPcs": [
        "0x016B24"
      ],
      "suggestedPredicate": {
        "flag": 174
      },
      "note": "174 is gain-message completion;175 marks next script stage. FE7Ebit5 set after commit is also source-backed.",
      "dialogues": [
        {
          "bank": 67,
          "group": 1,
          "index": 1,
          "textOffset": "0x1CC40E"
        }
      ]
    },
    {
      "stepId": "c14-s5",
      "goal": "Collect Awakening Powder",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 185,
          "workingAddress": "0xFFC517",
          "persistentAddress": "0xFFFE21",
          "mask": 2
        }
      ],
      "sourcePcs": [
        "0x016F3C",
        "0x016F46",
        "0x016F50",
        "0x016F52"
      ],
      "commitPcs": [
        "0x016F50"
      ],
      "suggestedPredicate": {
        "allFlags": [
          185
        ]
      },
      "note": "Chest dialogue completionflag185 and textE0 00B9 agree.16F50 commits;16F52 setsFE7Ebit6.",
      "dialogues": [
        {
          "bank": 72,
          "group": 14,
          "index": 0,
          "textOffset": "0x1CD558"
        }
      ]
    },
    {
      "stepId": "c14-s7",
      "goal": "Recruit Moa and escape the prison",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 188,
          "workingAddress": "0xFFC517",
          "persistentAddress": "0xFFFE21",
          "mask": 16
        }
      ],
      "sourcePcs": [
        "0x017006",
        "0x017012",
        "0x017016",
        "0x017022"
      ],
      "commitPcs": [
        "0x017016"
      ],
      "suggestedPredicate": {
        "ownedBit": 7
      },
      "note": "After acquisition7, original script unconditionally requestsscene47/entrance9 without further player choice; for a literal prison-exited label additionally observe that scene/entrance.",
      "dialogues": [
        {
          "bank": 73,
          "group": 1,
          "index": 4,
          "textOffset": "0x1CD814"
        }
      ]
    },
    {
      "stepId": "c15-s9",
      "goal": "Restore the fountain timeline",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 293,
          "workingAddress": "0xFFC524",
          "persistentAddress": "0xFFFE2E",
          "mask": 32
        }
      ],
      "sourcePcs": [
        "0x017804",
        "0x01781E",
        "0x005EE2",
        "0x005F2C"
      ],
      "commitPcs": [
        "0x01781E"
      ],
      "suggestedPredicate": {
        "allFlags": [
          293
        ]
      },
      "note": "Scene redirect directory182F8 sends normalSoleil1 to past119 iff flags269=1,293=0 (after ending63 priority). Gain293 disables that past redirect.",
      "dialogues": [
        {
          "bank": 87,
          "group": 6,
          "index": 1,
          "textOffset": "0x1CF5FA"
        }
      ]
    },
    {
      "stepId": "c16-s5",
      "goal": "Meet Mother Monster",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 304,
          "workingAddress": "0xFFC526",
          "persistentAddress": "0xFFFE30",
          "mask": 1
        }
      ],
      "sourcePcs": [
        "0x017AE4",
        "0x017AEE",
        "0x017AF0",
        "0x017AF8",
        "0x017AFA"
      ],
      "commitPcs": [
        "0x017AFA"
      ],
      "suggestedPredicate": {
        "allFlags": [
          304
        ]
      },
      "note": "",
      "dialogues": [
        {
          "bank": 93,
          "group": 1,
          "index": 5,
          "textOffset": "0x1D095C"
        },
        {
          "bank": 93,
          "group": 1,
          "index": 6,
          "textOffset": "0x1D09F0"
        }
      ]
    },
    {
      "stepId": "c16-s6",
      "goal": "Clear Smell",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 358,
          "workingAddress": "0xFFC52C",
          "persistentAddress": "0xFFFE36",
          "mask": 64
        }
      ],
      "sourcePcs": [
        "0x02DCB8",
        "0x02DCC8"
      ],
      "commitPcs": [
        "0x02DCC8"
      ],
      "suggestedPredicate": {
        "allFlags": [
          358
        ]
      },
      "note": "Original actor104,scene126,HP6. Final hub actor12 selector at017BEA requires flags358/359/360/361/362 all1 to open the center route."
    },
    {
      "stepId": "c16-s7",
      "goal": "Clear Sound",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 360,
          "workingAddress": "0xFFC52D",
          "persistentAddress": "0xFFFE37",
          "mask": 1
        }
      ],
      "sourcePcs": [
        "0x02CFAC",
        "0x02CFBC"
      ],
      "commitPcs": [
        "0x02CFBC"
      ],
      "suggestedPredicate": {
        "allFlags": [
          360
        ]
      },
      "note": "Original actor100,scene124,HP30. Final hub actor12 selector at017BEA requires flags358/359/360/361/362 all1 to open the center route."
    },
    {
      "stepId": "c16-s8",
      "goal": "Clear Sight",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 359,
          "workingAddress": "0xFFC52C",
          "persistentAddress": "0xFFFE36",
          "mask": 128
        }
      ],
      "sourcePcs": [
        "0x02D59A",
        "0x02D5AA"
      ],
      "commitPcs": [
        "0x02D5AA"
      ],
      "suggestedPredicate": {
        "allFlags": [
          359
        ]
      },
      "note": "Original actor102,scene122,HP26. Final hub actor12 selector at017BEA requires flags358/359/360/361/362 all1 to open the center route."
    },
    {
      "stepId": "c16-s9",
      "goal": "Clear Touch",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 361,
          "workingAddress": "0xFFC52D",
          "persistentAddress": "0xFFFE37",
          "mask": 2
        }
      ],
      "sourcePcs": [
        "0x02D8E4",
        "0x02D8F4"
      ],
      "commitPcs": [
        "0x02D8F4"
      ],
      "suggestedPredicate": {
        "allFlags": [
          361
        ]
      },
      "note": "Original actor103,scene123,HP30. Final hub actor12 selector at017BEA requires flags358/359/360/361/362 all1 to open the center route."
    },
    {
      "stepId": "c16-s10",
      "goal": "Clear Taste",
      "kind": "durable-event",
      "flagFields": [
        {
          "flag": 362,
          "workingAddress": "0xFFC52D",
          "persistentAddress": "0xFFFE37",
          "mask": 4
        }
      ],
      "sourcePcs": [
        "0x02D362",
        "0x02D372"
      ],
      "commitPcs": [
        "0x02D372"
      ],
      "suggestedPredicate": {
        "allFlags": [
          362
        ]
      },
      "note": "Original actor101,scene125,HPNone. Final hub actor12 selector at017BEA requires flags358/359/360/361/362 all1 to open the center route."
    },
    {
      "stepId": "c16-s11",
      "goal": "Defeat Spirit Energy",
      "kind": "live-ending-event",
      "flagFields": [
        {
          "flag": 63,
          "workingAddress": "0xFFC507",
          "mask": 128
        }
      ],
      "sourcePcs": [
        "0x02DF74",
        "0x02DF7A",
        "0x02DF80",
        "0x02DF86"
      ],
      "commitPcs": [],
      "suggestedPredicate": {
        "any": [
          {
            "adventureWorkingFlag": 63
          },
          {
            "verifiedPhase": "credits"
          }
        ]
      },
      "note": "Actor105 scene127 HP32. Sets working63 thenA4D6=2,scene139,entrance15. No direct30B98 commit; persistent63 is not guaranteed. Do not read workingC5 flags during credits because it becomes animation RAM."
    },
    {
      "stepId": "c16-s12",
      "goal": "Start the original credits",
      "kind": "credits-phase-required",
      "flagFields": [
        {
          "flag": 501,
          "workingAddress": "0xFFC53E",
          "mask": 32
        }
      ],
      "sourcePcs": [
        "0x012E38",
        "0x012E5A",
        "0x012E6A",
        "0x012E72",
        "0x032C44",
        "0x032C5E",
        "0x006810",
        "0x0068D4"
      ],
      "commitPcs": [],
      "suggestedPredicate": {
        "verifiedPhase": "credits"
      },
      "note": "Scene1/139 NPC2 variant requires63=1. Alice root12E2E waits351/356/354, final33[4,2,6,501] endsFFFF. On dialogueclose working501 sets and mainloop enterscredits; noopcode23 follows, so persistent501 is not established.",
      "dialogues": [
        {
          "bank": 4,
          "group": 2,
          "index": 6,
          "textOffset": "0x1C1866"
        }
      ]
    }
  ],
  "companionOwnership": {
    "address": 16776810,
    "width": 32,
    "acquireHandlerRom": "0x030C78",
    "availableSubsetAddress": 16776814,
    "equippedAddresses": [
      16776818,
      16776820
    ],
    "permanentIdsWithNoRemovalFound": [
      6,
      7,
      8,
      9,
      10,
      11,
      12,
      13,
      14,
      15,
      17
    ],
    "excludedConsumables": [
      5,
      18,
      19
    ],
    "PiecesDepartureUsesHistoricFlag83": true
  },
  "specialCases": {
    "silverMedal": "139 OR132: currently acquired medal or original optional gifting toBilly.139 alone would wrongly undo this completed goal.",
    "holySword": "Original opcode61 sets CPU BYTE FFFE7E bit3.",
    "ending": "Spirit63 andAlice501 are not proven in originalSRAM. Strict live ending/credits phase is the terminal proof. Credits reuseC500 animationRAM; no working story flags are read there.",
    "firstSword": "Workingflag1 follows the inherited-sword dialogue. Persistentflag1 is the terminal fallback. Welcomeflag0 is insufficient."
  },
  "nativeValidation": {
    "all512FlagIndicesVerified": true,
    "ownedBitsVerified": 32,
    "originalDialogueEventCases": 10,
    "originalItemCommands": 6,
    "originalSpiritHandlerWorkingOnlyVerified": true,
    "naturalOpeningSwordGiftVerified": true,
    "naturalOpeningInputSequence": "Ten GenesisA presses held18frames with90frame waits advanced the original mother dialogue; working sword-giftflag1 changed false\u2192true, without RAM writes or injected instructions.",
    "fullNaturalCampaignPlaythrough": false
  },
  "evidenceHashes": {
    "story-flags/milestone-events.json": "35df9cf91fc3a346e0e44268247b595a7bee671c0617217e5b74935547e0505a",
    "story-flags/scene-script-structure.json": "067827e5d727b15928e90d77dacd8720651a03203807d1261e82e8dcf58ef978",
    "story-flags/flag-helper-native-verification.json": "cbbf8ed47673f5ad6d3a470348e78e620a178305fb7021b34688a1bbf4391ad0",
    "original-progress-handler-tests.json": "c3555e6bb3cca443e1e00dc5b324d6776cd8ce9dddc3f68a8a47aabb38dbcd79",
    "original-milestone-event-tests.json": "30dcf016fa3cc8cadaf02734a02b02257b3d2549c46e1fc499221bb020e425e6",
    "natural-sword-gift-test.json": "d85c9ba0009a7d71bffb7f8310ac7520c3fd4bb8854aa3de3bfe7bed860772da"
  },
  "guideCorroboration": [
    "https://shrines.rpgclassics.com/genesis/centy/bosses.shtml",
    "https://shrines.rpgclassics.com/genesis/centy/walk2.shtml",
    "https://shrines.rpgclassics.com/genesis/centy/walk4.shtml",
    "https://shrines.rpgclassics.com/genesis/centy/walk15.shtml",
    "https://shrines.rpgclassics.com/genesis/centy/walk16.shtml"
  ],
  "limitations": [
    "Runtime identity and strict original phase/lifecycle guards are required in addition to these predicates.",
    "Most campaign goals are verified by original control flow and native mechanics fixtures; a natural full campaign was not played for this update.",
    "No arbitrary scene ordinal, sticky visit history or invented quest counters. Derived goals follow the current loaded native state and can roll back with an older load or rewind.",
    "Detailed instructions are advice; individual movements, puzzle button presses and optional actions are not all observed automatically."
  ]
}
