From 3a4940b28cb6e1f73581f00a84d0bdd22d07fdbc Mon Sep 17 00:00:00 2001 From: dannye <33dannye@gmail.com> Date: Sun, 5 Oct 2025 11:42:58 -0500 Subject: [PATCH] Update some script macro arguments --- src/engine/bank0b.asm | 60 ++-- src/engine/bank0d.asm | 4 +- src/engine/bank0f.asm | 16 +- tools/constants.py | 566 +++++++++++++++++++++++++++++++++++++- tools/script_extractor.py | 124 +++++---- 5 files changed, 672 insertions(+), 98 deletions(-) diff --git a/src/engine/bank0b.asm b/src/engine/bank0b.asm index aa37590..76647ef 100644 --- a/src/engine/bank0b.asm +++ b/src/engine/bank0b.asm @@ -279,16 +279,16 @@ Func_2c50a: ld [$d594], a xor a start_script - set_npc_position_and_direction $22, $05, $09, $02 - set_npc_position_and_direction $24, $08, $09, $02 - set_npc_position_and_direction $31, $07, $09, $02 + set_npc_position_and_direction OW_ISAAC, 5, 9, SOUTH + set_npc_position_and_direction OW_NICHOLAS, 8, 9, SOUTH + set_npc_position_and_direction OW_GR_4, 7, 9, SOUTH end_script jr .asm_2c55e .asm_2c54f xor a start_script - set_npc_position_and_direction $22, $05, $06, $02 - set_npc_position_and_direction $24, $08, $08, $02 + set_npc_position_and_direction OW_ISAAC, 5, 6, SOUTH + set_npc_position_and_direction OW_NICHOLAS, 8, 8, SOUTH end_script .asm_2c55e scf @@ -761,19 +761,19 @@ Func_2cda2: ld [$d594], a xor a start_script - set_npc_position_and_direction $26, $07, $06, $02 - set_npc_position_and_direction $27, $05, $06, $02 - set_npc_position_and_direction $28, $06, $06, $02 - set_npc_position_and_direction $29, $08, $0a, $02 + set_npc_position_and_direction OW_MURRAY, 7, 6, SOUTH + set_npc_position_and_direction OW_ROBERT, 5, 6, SOUTH + set_npc_position_and_direction OW_DANIEL, 6, 6, SOUTH + set_npc_position_and_direction OW_STEPHANIE, 8, 10, SOUTH end_script jr .asm_2ce0f .asm_2cdf6 xor a start_script - set_npc_position_and_direction $26, $06, $03, $02 - set_npc_position_and_direction $27, $05, $06, $02 - set_npc_position_and_direction $28, $06, $0a, $02 - set_npc_position_and_direction $29, $08, $0a, $02 + set_npc_position_and_direction OW_MURRAY, 6, 3, SOUTH + set_npc_position_and_direction OW_ROBERT, 5, 6, SOUTH + set_npc_position_and_direction OW_DANIEL, 6, 10, SOUTH + set_npc_position_and_direction OW_STEPHANIE, 8, 10, SOUTH end_script .asm_2ce0f scf @@ -1103,9 +1103,9 @@ Func_2d673: ld [$d594], a xor a start_script - set_npc_position_and_direction $0a, $05, $01, $02 - set_npc_position_and_direction $0b, $08, $01, $02 - set_npc_position_and_direction $0c, $06, $01, $02 + set_npc_position_and_direction OW_MATTHEW, 5, 1, SOUTH + set_npc_position_and_direction OW_RYAN, 8, 1, SOUTH + set_npc_position_and_direction OW_ANDREW, 6, 1, SOUTH end_script .asm_2d6a4 scf @@ -2416,9 +2416,9 @@ Func_2f0a5: jr nz, .asm_2f0c3 xor a start_script - load_npc $ac, $04, $06, $02 - load_npc $ad, $03, $06, $01 - load_npc $ae, $05, $06, $03 + load_npc OW_CAPTURED_AMY, 4, 6, SOUTH + load_npc OW_CAPTURED_SARA, 3, 6, EAST + load_npc OW_CAPTURED_AMANDA, 5, 6, WEST end_script jr .asm_2f0f5 .asm_2f0c3 @@ -2435,9 +2435,9 @@ Func_2f0a5: .asm_2f0e1 xor a start_script - set_npc_position_and_direction $19, $09, $05, $02 - set_npc_position_and_direction $1c, $08, $05, $02 - set_npc_position_and_direction $1d, $0a, $05, $02 + set_npc_position_and_direction OW_AMY, 9, 5, SOUTH + set_npc_position_and_direction OW_SARA, 8, 5, SOUTH + set_npc_position_and_direction OW_AMANDA, 10, 5, SOUTH end_script .asm_2f0f5 scf @@ -2794,10 +2794,10 @@ Func_2f86e: jr nz, .asm_2f891 xor a start_script - set_npc_position_and_direction $1e, $07, $0a, $02 - set_npc_position_and_direction $1f, $06, $0a, $02 - set_npc_position_and_direction $20, $05, $0a, $02 - set_npc_position_and_direction $21, $08, $0a, $02 + set_npc_position_and_direction OW_KEN, 7, 10, SOUTH + set_npc_position_and_direction OW_JOHN, 6, 10, SOUTH + set_npc_position_and_direction OW_ADAM, 5, 10, SOUTH + set_npc_position_and_direction OW_JONATHAN, 8, 10, SOUTH end_script jr .asm_2f8c6 .asm_2f891 @@ -2812,10 +2812,10 @@ Func_2f86e: jr z, .asm_2f8c6 xor a start_script - set_npc_position_and_direction $1e, $07, $0a, $02 - set_npc_position_and_direction $1f, $06, $0a, $02 - set_npc_position_and_direction $20, $05, $0a, $02 - set_npc_position_and_direction $21, $08, $0a, $02 + set_npc_position_and_direction OW_KEN, 7, 10, SOUTH + set_npc_position_and_direction OW_JOHN, 6, 10, SOUTH + set_npc_position_and_direction OW_ADAM, 5, 10, SOUTH + set_npc_position_and_direction OW_JONATHAN, 8, 10, SOUTH end_script .asm_2f8c6 scf diff --git a/src/engine/bank0d.asm b/src/engine/bank0d.asm index 2d59663..e9fa8e8 100644 --- a/src/engine/bank0d.asm +++ b/src/engine/bank0d.asm @@ -4,7 +4,7 @@ Func_341c4: xor a start_script script_command_01 - check_event $f1 + check_event EVENT_SET_UNTIL_MAP_RELOAD_2 script_jump_if_b0nz .ows_341dd print_npc_text Text126e give_card SUPER_ENERGY_RETRIEVAL @@ -18,7 +18,7 @@ Func_341c4: script_command_02 move_active_npc $41f0 wait_for_player_animation - unload_npc $03 + unload_npc OW_RONALD end_script ld a, [wNextMusic] farcall PlayAfterCurrentSong diff --git a/src/engine/bank0f.asm b/src/engine/bank0f.asm index 40d55af..171844d 100644 --- a/src/engine/bank0f.asm +++ b/src/engine/bank0f.asm @@ -209,14 +209,14 @@ Func_3c3ca: xor a start_script script_command_01 - set_var $25, $0f - check_event $f1 + set_var VAR_25, $0f + check_event EVENT_SET_UNTIL_MAP_RELOAD_2 script_jump_if_b0nz .ows_3c41b - inc_var $22 - get_var $22 + inc_var VAR_22 + get_var VAR_22 compare_loaded_var $0a script_jump_if_b1nz .ows_3c3e3 - set_var $22, $0a + set_var VAR_22, $0a .ows_3c3e3 compare_loaded_var $03 script_jump_if_b1nz .ows_3c3f8 @@ -255,12 +255,12 @@ Func_3c3ca: get_player_direction compare_loaded_var $02 script_jump_if_b0z .ows_3c42d - set_player_direction $03 + set_player_direction WEST animate_player_movement $81, $02 .ows_3c42d move_active_npc $4492 wait_for_player_animation - unload_npc $05 + unload_npc OW_IMAKUNI_BLACK end_script ld a, $00 ld [wd582], a @@ -301,7 +301,7 @@ Func_3c3ca: .ows_3c474 print_npc_text Text12d2 - get_var $22 + get_var VAR_22 compare_loaded_var $06 script_jump_if_b1nz .ows_3c486 compare_loaded_var $09 diff --git a/tools/constants.py b/tools/constants.py index 9a8bfeb..699bd92 100644 --- a/tools/constants.py +++ b/tools/constants.py @@ -458,7 +458,254 @@ directions = [ "WEST", ] -events = [] +events = [ + "EVENT_PLAYER_GENDER", + "EVENT_MASONS_LAB_CHALLENGE_MACHINE_STATE", + "EVENT_02", + "EVENT_MASONS_LAB_CHALLENGE_MACHINE_STATE_DUMMY", + "EVENT_GOT_CHANSEY_COIN", + "EVENT_GOT_ODDISH_COIN", + "EVENT_GOT_CHARMANDER_COIN", + "EVENT_GOT_STARMIE_COIN", + "EVENT_GOT_PIKACHU_COIN", + "EVENT_GOT_ALAKAZAM_COIN", + "EVENT_GOT_KABUTO_COIN", + "EVENT_GOT_GR_COIN", + "EVENT_GOT_GR_COIN_PIECE_TOP_LEFT", + "EVENT_GOT_GR_COIN_PIECE_TOP_RIGHT", + "EVENT_GOT_GR_COIN_PIECE_BOTTOM_LEFT", + "EVENT_GOT_GR_COIN_PIECE_BOTTOM_RIGHT", + "EVENT_GOT_MAGNEMITE_COIN", + "EVENT_GOT_GOLBAT_COIN", + "EVENT_GOT_MAGMAR_COIN", + "EVENT_GOT_PSYDUCK_COIN", + "EVENT_GOT_MACHAMP_COIN", + "EVENT_GOT_MEW_COIN", + "EVENT_GOT_SNORLAX_COIN", + "EVENT_GOT_TOGEPI_COIN", + "EVENT_GOT_PONYTA_COIN", + "EVENT_GOT_HORSEA_COIN", + "EVENT_GOT_ARBOK_COIN", + "EVENT_GOT_JIGGLYPUFF_COIN", + "EVENT_GOT_DUGTRIO_COIN", + "EVENT_GOT_GENGAR_COIN", + "EVENT_GOT_RAICHU_COIN", + "EVENT_GOT_LUGIA_COIN", + "EVENT_TALKED_TO_GENE", + "EVENT_TALKED_TO_MATTHEW", + "EVENT_TALKED_TO_RYAN", + "EVENT_TALKED_TO_ANDREW", + "EVENT_TALKED_TO_MITCH", + "EVENT_TALKED_TO_MICHAEL", + "EVENT_TALKED_TO_CHRIS", + "EVENT_TALKED_TO_JESSICA", + "EVENT_TALKED_TO_NIKKI", + "EVENT_TALKED_TO_BRITTANY", + "EVENT_TALKED_TO_KRISTIN", + "EVENT_TALKED_TO_HEATHER", + "EVENT_BEAT_BRITTANY", + "EVENT_TALKED_TO_RICK", + "EVENT_TALKED_TO_DAVID", + "EVENT_TALKED_TO_JOSEPH", + "EVENT_TALKED_TO_ERIK", + "EVENT_TALKED_TO_AMY", + "EVENT_TALKED_TO_JOSHUA", + "EVENT_TALKED_TO_SARA", + "EVENT_TALKED_TO_AMANDA", + "EVENT_35", + "EVENT_36", + "EVENT_TALKED_TO_ISAAC", + "EVENT_TALKED_TO_JENNIFER", + "EVENT_TALKED_TO_NICHOLAS", + "EVENT_TALKED_TO_BRANDON", + "EVENT_BEAT_NICHOLAS", + "EVENT_TALKED_TO_KEN", + "EVENT_TALKED_TO_JOHN", + "EVENT_TALKED_TO_ADAM", + "EVENT_TALKED_TO_JONATHAN", + "EVENT_TALKED_TO_MURRAY", + "EVENT_TALKED_TO_ROBERT", + "EVENT_TALKED_TO_DANIEL", + "EVENT_TALKED_TO_STEPHANIE", + "EVENT_BEAT_MURRAY", + "EVENT_WALKED_INTO_MURRAYS_CLUB_ROOM", + "EVENT_TALKED_TO_MIDORI", + "EVENT_TALKED_TO_YUTA", + "EVENT_TALKED_TO_MIYUKI", + "EVENT_TALKED_TO_MORINO", + "EVENT_FREED_RICK", + "EVENT_YUTAS_ROOM_DOOR_STATE", + "EVENT_MIYUKIS_ROOM_DOOR_STATE", + "EVENT_BEAT_MORINO", + "EVENT_TALKED_TO_RENNA", + "EVENT_TALKED_TO_ICHIKAWA", + "EVENT_TALKED_TO_CATHERINE", + "EVENT_TALKED_TO_TAP", + "EVENT_RENNAS_ROOM_DOOR_STATE", + "EVENT_ICHIKAWAS_ROOM_DOOR_STATE", + "EVENT_BEAT_CATHERINE", + "EVENT_TALKED_TO_JES", + "EVENT_TALKED_TO_YUKI", + "EVENT_TALKED_TO_SHOKO", + "EVENT_TALKED_TO_HIDERO", + "EVENT_JES_ROOM_DOOR_STATE", + "EVENT_YUKIS_ROOM_DOOR_STATE", + "EVENT_SHOKOS_ROOM_DOOR_STATE", + "EVENT_BEAT_HIDERO", + "EVENT_TALKED_TO_MIYAJIMA", + "EVENT_TALKED_TO_SENTA", + "EVENT_TALKED_TO_AIRA", + "EVENT_TALKED_TO_KANOKO", + "EVENT_MIYAJIMAS_ROOM_DOOR_STATE", + "EVENT_SENTAS_ROOM_BRIDGE_STATE", + "EVENT_AIRAS_ROOM_BRIDGE_STATE", + "EVENT_BEAT_KANOKO", + "EVENT_TALKED_TO_KAMIYA", + "EVENT_TALKED_TO_GODA", + "EVENT_TALKED_TO_GRACE", + "EVENT_BEAT_KAMIYA", + "EVENT_FREED_MITCH", + "EVENT_GRACES_ROOM_CHEST_STATE", + "EVENT_TALKED_TO_MIWA", + "EVENT_TALKED_TO_KEVIN", + "EVENT_TALKED_TO_YOSUKE", + "EVENT_TALKED_TO_RYOKO", + "EVENT_TALKED_TO_MAMI", + "EVENT_BEAT_MIWA", + "EVENT_BEAT_KEVIN", + "EVENT_BEAT_YOSUKE", + "EVENT_BEAT_RYOKO", + "EVENT_BEAT_MAMI", + "EVENT_TALKED_TO_NISHIJIMA", + "EVENT_TALKED_TO_ISHII", + "EVENT_TALKED_TO_SAMEJIMA", + "EVENT_BEAT_NISHIJIMA", + "EVENT_BEAT_ISHII", + "EVENT_BEAT_SAMEJIMA", + "EVENT_BEAT_COLORLESS_ALTAR_MEMBERS", + "EVENT_TALKED_TO_NISHIJIMA_2", + "EVENT_TALKED_TO_ISHII_2", + "EVENT_TALKED_TO_SAMEJIMA_2", + "EVENT_TALKED_TO_KANZAKI", + "EVENT_TALKED_TO_RUI", + "EVENT_BEAT_KANZAKI", + "EVENT_BEAT_RUI", + "EVENT_MET_GR_GAL_ISHIHARAS_VILLA", + "EVENT_TALKED_TO_BIRURITCHI", + "EVENT_TALKED_TO_TRADE_NPC_ROCK_CLUB", + "EVENT_TALKED_TO_TRADE_NPC_FIGHTING_CLUB", + "EVENT_TALKED_TO_TRADE_NPC_FIRE_CLUB", + "EVENT_TALKED_TO_TRADE_NPC_LIGHTNING_CLUB", + "EVENT_TALKED_TO_TRADE_NPC_PSYCHIC_CLUB", + "EVENT_TALKED_TO_TRADE_NPC_TCG_CHALLENGE_HALL", + "EVENT_TALKED_TO_TRADE_NPC_GRASS_FORT", + "EVENT_TALKED_TO_TRADE_NPC_LIGHTNING_FORT", + "EVENT_TALKED_TO_TRADE_NPC_GR_CHALLENGE_HALL", + "EVENT_TALKED_TO_TRADE_NPC_FIRE_FORT", + "EVENT_TALKED_TO_TRADE_NPC_WATER_FORT", + "EVENT_TALKED_TO_TRADE_NPC_PSYCHIC_STRONGHOLD", + "EVENT_91", + "EVENT_92", + "EVENT_TALKED_TO_SAM", + "EVENT_94", + "EVENT_TALKED_TO_ISHIHARA", + "EVENT_BATTLED_ISHIHARA", + "EVENT_TALKED_TO_ISHIHARA_POST_GAME", + "EVENT_MET_GR1_ROCK_CLUB", + "EVENT_MET_GR4_LIGHTNING_CLUB", + "EVENT_MET_GR4_PSYCHIC_CLUB", + "EVENT_MET_YUKI_FIRE_FORT", + "EVENT_MET_FIGHTING_FORT_MEMBERS", + "EVENT_MET_PSYCHIC_STRONGHOLD_MEMBERS", + "EVENT_MET_MAMI_AND_ROD", + "EVENT_MET_COLORLESS_ALTAR_MEMBERS", + "EVENT_MET_BIRURITCHI_AND_ADMINS", + "EVENT_GR_CASTLE_STAIRS_RUI_ROADBLOCK", + "EVENT_MET_RONALD_GAME_CENTER", + "EVENT_TALKED_TO_GR1_FIGHTING_CLUB", + "EVENT_TALKED_TO_GR2_SCIENCE_GRASS_CLUB", + "EVENT_TALKED_TO_GR3_WATER_CLUB", + "EVENT_TALKED_TO_GR4_PSYCHIC_CLUB", + "EVENT_A7", + "EVENT_OBTAINED_TWO_GR_COIN_PIECES", + "EVENT_TALKED_TO_GR5_POKEMON_DOME", + "EVENT_TALKED_TO_GR5_TCG_AIRPORT", + "EVENT_TRADED_CARDS_ROCK_CLUB", + "EVENT_TRADED_CARDS_FIGHTING_CLUB", + "EVENT_TRADED_CARDS_FIRE_CLUB", + "EVENT_TRADED_CARDS_LIGHTNING_CLUB", + "EVENT_TRADED_CARDS_PSYCHIC_CLUB", + "EVENT_TRADED_CARDS_TCG_CHALLENGE_HALL", + "EVENT_B1", + "EVENT_B2", + "EVENT_TRADED_CARDS_GRASS_FORT", + "EVENT_TRADED_CARDS_LIGHTNING_FORT", + "EVENT_TRADED_CARDS_GR_CHALLENGE_HALL", + "EVENT_TRADED_CARDS_FIRE_FORT", + "EVENT_TRADED_CARDS_WATER_FORT", + "EVENT_TRADED_CARDS_PSYCHIC_STRONGHOLD", + "EVENT_GODAS_ROOM_CAGE_STATE", + "EVENT_MIDORIS_ROOM_CAGE_STATE", + "EVENT_BB", + "EVENT_BC", + "EVENT_BD", + "EVENT_ENTERED_GRAND_MASTER_CUP", + "EVENT_FREED_COURTNEY", + "EVENT_FREED_STEVE", + "EVENT_FREED_JACK", + "EVENT_FREED_ROD", + "EVENT_GOT_CHIPS_FROM_GAME_CENTER_ATTENDANT", + "EVENT_TALKED_TO_SLOT_MACHINE_WOMAN", + "EVENT_TALKED_TO_COIN_TOSS_BOY", + "EVENT_C5", + "EVENT_LIGHTNING_FORT_ENTRANCE_DOOR_STATE", + "EVENT_FIRE_FORT_ENTRANCE_DOOR_STATE", + "EVENT_WATER_FORT_ENTRANCE_DOOR_STATE", + "EVENT_FIGHTING_FORT_ENTRANCE_DOOR_STATE", + "EVENT_INSERTED_LEFT_COIN_IN_FIGHTING_FORT_DOOR", + "EVENT_INSERTED_RIGHT_COIN_IN_FIGHTING_FORT_DOOR", + "EVENT_CAN_TRAVEL_PAST_FIGHTING_FORT", + "EVENT_GR_CASTLE_ENTRANCE_DOOR_STATE", + "EVENT_INSERTED_LEFT_COIN_IN_GR_CASTLE_DOOR", + "EVENT_INSERTED_RIGHT_COIN_IN_GR_CASTLE_DOOR", + "EVENT_SEALED_FORT_DOOR_STATE", + "EVENT_OPENED_CHEST_GRACES_ROOM", + "EVENT_OPENED_CHEST_FIGHTING_FORT_1", + "EVENT_OPENED_CHEST_FIGHTING_FORT_2", + "EVENT_OPENED_CHEST_FIGHTING_FORT_3", + "EVENT_OPENED_CHEST_FIGHTING_FORT_4", + "EVENT_OPENED_CHEST_FIGHTING_FORT_5", + "EVENT_OPENED_CHEST_FIGHTING_FORT_BASEMENT", + "EVENT_SHORT_GR_ISLAND_FLYOVER_SEQUENCE", + "EVENT_BEAT_GRAND_MASTER_CUP", + "EVENT_DB", + "EVENT_GHOST_MASTER_STATUES_STATE", + "EVENT_BATTLED_TOBICHAN", + "EVENT_BATTLED_EIJI", + "EVENT_BATTLED_MAGICIAN", + "EVENT_BATTLED_TOSHIRON", + "EVENT_BATTLED_PIERROT", + "EVENT_BATTLED_ANNA", + "EVENT_BATTLED_DEE", + "EVENT_BATTLED_MASQUERADE", + "EVENT_BATTLED_YUI", + "EVENT_TALKED_TO_PAWN", + "EVENT_TALKED_TO_KNIGHT", + "EVENT_TALKED_TO_BISHOP", + "EVENT_TALKED_TO_ROOK", + "EVENT_TALKED_TO_QUEEN", + "EVENT_EB", + "EVENT_EC", + "EVENT_SET_UNTIL_MAP_RELOAD_1", + "EVENT_EE", + "EVENT_EF", + "EVENT_F0", + "EVENT_SET_UNTIL_MAP_RELOAD_2", + "EVENT_F2", + "EVENT_F3", + "EVENT_ISHIHARA_CARD_TRADE_STATE", + "EVENT_F5", +] maps = [ "OVERWORLD_MAP_TCG", @@ -936,7 +1183,256 @@ npcs = [ "OW_STRONGHOLD_PLATFORM", ] -sfxs = [] +sfxs = [ + "SFX_STOP", + "SFX_01", + "SFX_02", + "SFX_03", + "SFX_04", + "SFX_05", + "SFX_06", + "SFX_07", + "SFX_08", + "SFX_09", + "SFX_0A", + "SFX_0B", + "SFX_0C", + "SFX_0D", + "SFX_0E", + "SFX_0F", + "SFX_10", + "SFX_11", + "SFX_12", + "SFX_13", + "SFX_14", + "SFX_15", + "SFX_16", + "SFX_17", + "SFX_18", + "SFX_19", + "SFX_1A", + "SFX_1B", + "SFX_1C", + "SFX_1D", + "SFX_1E", + "SFX_1F", + "SFX_20", + "SFX_21", + "SFX_22", + "SFX_23", + "SFX_24", + "SFX_25", + "SFX_26", + "SFX_27", + "SFX_28", + "SFX_29", + "SFX_2A", + "SFX_2B", + "SFX_2C", + "SFX_2D", + "SFX_2E", + "SFX_2F", + "SFX_30", + "SFX_31", + "SFX_32", + "SFX_33", + "SFX_34", + "SFX_35", + "SFX_36", + "SFX_37", + "SFX_38", + "SFX_39", + "SFX_3A", + "SFX_3B", + "SFX_3C", + "SFX_3D", + "SFX_3E", + "SFX_3F", + "SFX_40", + "SFX_41", + "SFX_42", + "SFX_43", + "SFX_44", + "SFX_45", + "SFX_46", + "SFX_47", + "SFX_48", + "SFX_49", + "SFX_4A", + "SFX_4B", + "SFX_4C", + "SFX_4D", + "SFX_4E", + "SFX_4F", + "SFX_50", + "SFX_51", + "SFX_52", + "SFX_53", + "SFX_54", + "SFX_55", + "SFX_56", + "SFX_57", + "SFX_58", + "SFX_59", + "SFX_5A", + "SFX_5B", + "SFX_5C", + "SFX_5D", + "SFX_5E", + "SFX_5F", + "SFX_60", + "SFX_61", + "SFX_62", + "SFX_63", + "SFX_64", + "SFX_65", + "SFX_66", + "SFX_67", + "SFX_68", + "SFX_69", + "SFX_6A", + "SFX_6B", + "SFX_6C", + "SFX_6D", + "SFX_6E", + "SFX_6F", + "SFX_70", + "SFX_71", + "SFX_72", + "SFX_73", + "SFX_74", + "SFX_75", + "SFX_76", + "SFX_77", + "SFX_78", + "SFX_79", + "SFX_7A", + "SFX_7B", + "SFX_7C", + "SFX_7D", + "SFX_7E", + "SFX_7F", + "SFX_80", + "SFX_81", + "SFX_82", + "SFX_83", + "SFX_84", + "SFX_85", + "SFX_86", + "SFX_87", + "SFX_88", + "SFX_89", + "SFX_8A", + "SFX_8B", + "SFX_8C", + "SFX_8D", + "SFX_8E", + "SFX_8F", + "SFX_90", + "SFX_91", + "SFX_92", + "SFX_93", + "SFX_94", + "SFX_95", + "SFX_96", + "SFX_97", + "SFX_98", + "SFX_99", + "SFX_9A", + "SFX_9B", + "SFX_9C", + "SFX_9D", + "SFX_9E", + "SFX_9F", + "SFX_A0", + "SFX_A1", + "SFX_A2", + "SFX_A3", + "SFX_A4", + "SFX_A5", + "SFX_A6", + "SFX_A7", + "SFX_A8", + "SFX_A9", + "SFX_AA", + "SFX_AB", + "SFX_AC", + "SFX_AD", + "SFX_AE", + "SFX_AF", + "SFX_B0", + "SFX_B1", + "SFX_B2", + "SFX_B3", + "SFX_B4", + "SFX_B5", + "SFX_B6", + "SFX_B7", + "SFX_B8", + "SFX_B9", + "SFX_BA", + "SFX_BB", + "SFX_BC", + "SFX_BD", + "SFX_BE", + "SFX_BF", + "SFX_C0", + "SFX_C1", + "SFX_C2", + "SFX_C3", + "SFX_C4", + "SFX_C5", + "SFX_C6", + "SFX_C7", + "SFX_C8", + "SFX_C9", + "SFX_CA", + "SFX_CB", + "SFX_CC", + "SFX_CD", + "SFX_CE", + "SFX_CF", + "SFX_D0", + "SFX_D1", + "SFX_D2", + "SFX_D3", + "SFX_D4", + "SFX_D5", + "SFX_D6", + "SFX_D7", + "SFX_D8", + "SFX_D9", + "SFX_DA", + "SFX_DB", + "SFX_DC", + "SFX_DD", + "SFX_DE", + "SFX_DF", + "SFX_E0", + "SFX_E1", + "SFX_E2", + "SFX_E3", + "SFX_E4", + "SFX_E5", + "SFX_E6", + "SFX_E7", + "SFX_E8", + "SFX_E9", + "SFX_EA", + "SFX_EB", + "SFX_EC", + "SFX_ED", + "SFX_EE", + "SFX_EF", + "SFX_F0", + "SFX_F1", + "SFX_F2", + "SFX_F3", + "SFX_F4", + "SFX_F5", + "SFX_F6", + "SFX_F7", +] songs = [ "MUSIC_STOP", @@ -1000,3 +1496,69 @@ songs = [ "MUSIC_DITTY6", "MUSIC_3B", ] + +vars = [ + "VAR_00", + "VAR_01", + "VAR_02", + "VAR_03", + "VAR_TIMES_MET_RONALD", + "VAR_05", + "VAR_06", + "VAR_07", + "VAR_08", + "VAR_09", + "VAR_0A", + "VAR_0B", + "VAR_0C", + "VAR_0D", + "VAR_0E", + "VAR_0F", + "VAR_10", + "VAR_11", + "VAR_12", + "VAR_13", + "VAR_14", + "VAR_15", + "VAR_16", + "VAR_17", + "VAR_18", + "VAR_19", + "VAR_1A", + "VAR_1B", + "VAR_1C", + "VAR_1D", + "VAR_1E", + "VAR_1F", + "VAR_20", + "VAR_21", + "VAR_22", + "VAR_23", + "VAR_24", + "VAR_25", + "VAR_26", + "VAR_27", + "VAR_28", + "VAR_29", + "VAR_2A", + "VAR_2B", + "VAR_2C", + "VAR_2D", + "VAR_2E", + "VAR_2F", + "VAR_30", + "VAR_31", + "VAR_32", + "VAR_33", + "VAR_34", + "VAR_35", + "VAR_36", + "VAR_37", + "VAR_38", + "VAR_39", + "VAR_3A", + "VAR_3B", + "VAR_NPC_DECK_ID", + "VAR_3D", + "VAR_3E", +] diff --git a/tools/script_extractor.py b/tools/script_extractor.py index 684baa5..05a927e 100644 --- a/tools/script_extractor.py +++ b/tools/script_extractor.py @@ -13,6 +13,7 @@ from constants import maps from constants import npcs from constants import sfxs from constants import songs +from constants import vars args = None rom = None @@ -30,107 +31,107 @@ script_commands = { 0x04: { "name": "print_variable_text", "params": [ "text", "text" ] }, 0x05: { "name": "print_npc_text", "params": [ "text" ] }, 0x06: { "name": "print_variable_npc_text", "params": [ "text", "text" ] }, - 0x07: { "name": "ask_question", "params": [ "text", "byte" ] }, + 0x07: { "name": "ask_question", "params": [ "text", "bool" ] }, 0x08: { "name": "script_jump", "params": [ "script" ] }, 0x09: { "name": "script_jump_if_b0nz", "params": [ "script" ] }, 0x0a: { "name": "script_jump_if_b0z", "params": [ "script" ] }, 0x0b: { "name": "script_jump_if_b1nz", "params": [ "script" ] }, 0x0c: { "name": "script_jump_if_b1z", "params": [ "script" ] }, 0x0d: { "name": "compare_loaded_var", "params": [ "byte" ] }, - 0x0e: { "name": "set_event", "params": [ "byte" ] }, - 0x0f: { "name": "reset_event", "params": [ "byte" ] }, - 0x10: { "name": "check_event", "params": [ "byte" ] }, - 0x11: { "name": "set_var", "params": [ "byte", "byte" ] }, - 0x12: { "name": "get_var", "params": [ "byte" ] }, - 0x13: { "name": "inc_var", "params": [ "byte" ] }, - 0x14: { "name": "dec_var", "params": [ "byte" ] }, - 0x15: { "name": "load_npc", "params": [ "byte", "byte", "byte", "byte" ] }, - 0x16: { "name": "unload_npc", "params": [ "byte" ] }, - 0x17: { "name": "set_player_direction", "params": [ "byte" ] }, - 0x18: { "name": "set_active_npc_direction", "params": [ "byte" ] }, + 0x0e: { "name": "set_event", "params": [ "event" ] }, + 0x0f: { "name": "reset_event", "params": [ "event" ] }, + 0x10: { "name": "check_event", "params": [ "event" ] }, + 0x11: { "name": "set_var", "params": [ "var", "byte" ] }, + 0x12: { "name": "get_var", "params": [ "var" ] }, + 0x13: { "name": "inc_var", "params": [ "var" ] }, + 0x14: { "name": "dec_var", "params": [ "var" ] }, + 0x15: { "name": "load_npc", "params": [ "npc", "byte_decimal", "byte_decimal", "direction" ] }, + 0x16: { "name": "unload_npc", "params": [ "npc" ] }, + 0x17: { "name": "set_player_direction", "params": [ "direction" ] }, + 0x18: { "name": "set_active_npc_direction", "params": [ "direction" ] }, 0x19: { "name": "do_frames", "params": [ "byte_decimal" ] }, 0x1a: { "name": "load_tilemap", "params": [ "word", "byte", "byte" ] }, 0x1b: { "name": "show_card_received_screen", "params": [ "card" ] }, - 0x1c: { "name": "set_player_position", "params": [ "byte", "byte" ] }, - 0x1d: { "name": "set_active_npc_position", "params": [ "byte", "byte" ] }, - 0x1e: { "name": "set_scroll_state", "params": [ "byte" ] }, + 0x1c: { "name": "set_player_position", "params": [ "byte_decimal", "byte_decimal" ] }, + 0x1d: { "name": "set_active_npc_position", "params": [ "byte_decimal", "byte_decimal" ] }, + 0x1e: { "name": "set_scroll_state", "params": [ "byte" ] }, # todo: enum scroll states 0x1f: { "name": "scroll_to_position", "params": [ "byte", "byte" ] }, - 0x20: { "name": "set_active_npc", "params": [ "byte", "text" ] }, - 0x21: { "name": "set_player_position_and_direction", "params": [ "byte", "byte", "byte" ] }, - 0x22: { "name": "set_npc_position_and_direction", "params": [ "byte", "byte", "byte", "byte" ] }, - 0x23: { "name": "fade_in", "params": [ "byte", "byte" ] }, - 0x24: { "name": "fade_out", "params": [ "byte", "byte" ] }, - 0x25: { "name": "set_npc_direction", "params": [ "byte", "byte" ] }, - 0x26: { "name": "set_npc_position", "params": [ "byte", "byte", "byte" ] }, - 0x27: { "name": "set_active_npc_position_and_direction", "params": [ "byte", "byte", "byte" ] }, + 0x20: { "name": "set_active_npc", "params": [ "npc", "text" ] }, + 0x21: { "name": "set_player_position_and_direction", "params": [ "byte_decimal", "byte_decimal", "direction" ] }, + 0x22: { "name": "set_npc_position_and_direction", "params": [ "npc", "byte_decimal", "byte_decimal", "direction" ] }, + 0x23: { "name": "fade_in", "params": [ "byte", "bool" ] }, + 0x24: { "name": "fade_out", "params": [ "byte", "bool" ] }, + 0x25: { "name": "set_npc_direction", "params": [ "npc", "direction" ] }, + 0x26: { "name": "set_npc_position", "params": [ "npc", "byte_decimal", "byte_decimal" ] }, + 0x27: { "name": "set_active_npc_position_and_direction", "params": [ "byte_decimal", "byte_decimal", "direction" ] }, 0x28: { "name": "animate_player_movement", "params": [ "byte", "byte" ] }, - 0x29: { "name": "animate_npc_movement", "params": [ "byte", "byte", "byte" ] }, + 0x29: { "name": "animate_npc_movement", "params": [ "npc", "byte", "byte" ] }, 0x2a: { "name": "animate_active_npc_movement", "params": [ "byte", "byte" ] }, - 0x2b: { "name": "move_player", "params": [ "word", "byte" ] }, - 0x2c: { "name": "move_npc", "params": [ "byte", "word" ] }, - 0x2d: { "name": "move_active_npc", "params": [ "word" ] }, - 0x2e: { "name": "start_duel", "params": [ "byte", "byte" ] }, + 0x2b: { "name": "move_player", "params": [ "word", "byte" ] }, # todo: parse movement data + 0x2c: { "name": "move_npc", "params": [ "npc", "word" ] }, # todo: parse movement data + 0x2d: { "name": "move_active_npc", "params": [ "word" ] }, # todo: parse movement data + 0x2e: { "name": "start_duel", "params": [ "byte", "song" ] }, # todo: enumerate decks 0x2f: { "name": "wait_for_player_animation", "params": [] }, 0x30: { "name": "wait_for_fade", "params": [] }, 0x31: { "name": "get_card_count_in_collection_and_decks", "params": [ "card" ] }, 0x32: { "name": "get_card_count_in_collection", "params": [ "card" ] }, 0x33: { "name": "give_card", "params": [ "card" ] }, 0x34: { "name": "take_card", "params": [ "card" ] }, - 0x35: { "name": "npc_ask_question", "params": [ "text", "byte" ] }, + 0x35: { "name": "npc_ask_question", "params": [ "text", "bool" ] }, 0x36: { "name": "get_player_direction", "params": [] }, - 0x37: { "name": "compare_var", "params": [ "byte", "byte" ] }, + 0x37: { "name": "compare_var", "params": [ "var", "byte" ] }, 0x38: { "name": "get_active_npc_direction", "params": [] }, 0x39: { "name": "scroll_to_active_npc", "params": [] }, 0x3a: { "name": "scroll_to_player", "params": [] }, - 0x3b: { "name": "scroll_to_npc", "params": [ "byte" ] }, - 0x3c: { "name": "spin_active_npc", "params": [ "word" ] }, + 0x3b: { "name": "scroll_to_npc", "params": [ "npc" ] }, + 0x3c: { "name": "spin_active_npc", "params": [ "word_decimal" ] }, 0x3d: { "name": "restore_active_npc_direction", "params": [] }, - 0x3e: { "name": "spin_active_npc_reverse", "params": [ "word" ] }, - 0x3f: { "name": "reset_npc_flag6", "params": [ "byte" ] }, - 0x40: { "name": "set_npc_flag6", "params": [ "byte" ] }, - 0x41: { "name": "duel_requirement_check", "params": [ "byte" ] }, + 0x3e: { "name": "spin_active_npc_reverse", "params": [ "word_decimal" ] }, + 0x3f: { "name": "reset_npc_flag6", "params": [ "npc" ] }, + 0x40: { "name": "set_npc_flag6", "params": [ "npc" ] }, + 0x41: { "name": "duel_requirement_check", "params": [ "byte" ] }, # todo: enumerate duel requirements 0x42: { "name": "get_active_npc_opposite_direction", "params": [] }, 0x43: { "name": "get_player_opposite_direction", "params": [] }, - 0x44: { "name": "play_sfx", "params": [ "byte" ] }, - 0x45: { "name": "play_sfx_and_wait", "params": [ "byte" ] }, + 0x44: { "name": "play_sfx", "params": [ "sfx" ] }, + 0x45: { "name": "play_sfx_and_wait", "params": [ "sfx" ] }, 0x46: { "name": "set_text_ram2", "params": [ "text" ] }, 0x47: { "name": "set_variable_text_ram2", "params": [ "text", "text" ] }, - 0x48: { "name": "wait_for_npc_animation", "params": [ "byte" ] }, + 0x48: { "name": "wait_for_npc_animation", "params": [ "npc" ] }, 0x49: { "name": "get_player_x_position", "params": [] }, 0x4a: { "name": "get_player_y_position", "params": [] }, - 0x4b: { "name": "restore_npc_direction", "params": [ "byte" ] }, - 0x4c: { "name": "spin_npc", "params": [ "byte", "word" ] }, - 0x4d: { "name": "spin_npc_reverse", "params": [ "byte", "word" ] }, + 0x4b: { "name": "restore_npc_direction", "params": [ "npc" ] }, + 0x4c: { "name": "spin_npc", "params": [ "npc", "word_decimal" ] }, + 0x4d: { "name": "spin_npc_reverse", "params": [ "npc", "word_decimal" ] }, 0x4e: { "name": "push_var", "params": [] }, 0x4f: { "name": "pop_var", "params": [] }, - 0x50: { "name": "script_call", "params": [ "script", "condition" ] }, + 0x50: { "name": "script_call", "params": [ "script", "condition" ] }, # todo: enumerate conditions 0x51: { "name": "script_ret", "params": [] }, - 0x52: { "name": "give_coin", "params": [ "byte" ] }, + 0x52: { "name": "give_coin", "params": [ "byte" ] }, # todo: enumerate coins 0x53: { "name": "backup_active_npc", "params": [] }, - 0x54: { "name": "load_player", "params": [ "byte", "byte", "byte" ] }, + 0x54: { "name": "load_player", "params": [ "byte_decimal", "byte_decimal", "direction" ] }, 0x55: { "name": "unload_player", "params": [] }, - 0x56: { "name": "give_booster_packs", "params": [ "word" ] }, + 0x56: { "name": "give_booster_packs", "params": [ "word" ] }, # todo: parse booster data 0x57: { "name": "get_random", "params": [ "byte" ] }, 0x58: { "name": "script_command_58", "params": [] }, # ? 0x59: { "name": "set_text_ram3", "params": [ "word" ] }, 0x5a: { "name": "quit_script", "params": [] }, - 0x5b: { "name": "play_song", "params": [ "byte" ] }, + 0x5b: { "name": "play_song", "params": [ "song" ] }, 0x5c: { "name": "resume_song", "params": [] }, 0x5d: { "name": "script_callfar", "params": [ "script_far" ] }, 0x5e: { "name": "script_retfar", "params": [] }, - 0x5f: { "name": "card_pop", "params": [ "byte" ] }, - 0x60: { "name": "play_song_next", "params": [ "byte" ] }, + 0x5f: { "name": "card_pop", "params": [ "byte" ] }, # todo: enumerate Card Pop! events + 0x60: { "name": "play_song_next", "params": [ "song" ] }, 0x61: { "name": "set_text_ram2b", "params": [ "text" ] }, 0x62: { "name": "set_variable_text_ram2b", "params": [ "text", "text" ] }, - 0x63: { "name": "replace_npc", "params": [ "byte", "byte" ] }, + 0x63: { "name": "replace_npc", "params": [ "npc", "npc" ] }, 0x64: { "name": "script_command_64", "params": [ "byte" ] }, # ? - 0x65: { "name": "check_npc_loaded", "params": [ "byte" ] }, - 0x66: { "name": "give_deck", "params": [ "byte" ] }, + 0x65: { "name": "check_npc_loaded", "params": [ "npc" ] }, + 0x66: { "name": "give_deck", "params": [ "byte" ] }, # todo: enumerate decks 0x67: { "name": "script_command_67", "params": [ "byte", "byte" ] }, # ? 0x68: { "name": "script_command_68", "params": [] }, # wait for ? 0x69: { "name": "print_npc_text_instant", "params": [ "text" ] }, - 0x6a: { "name": "var_add", "params": [ "byte", "byte" ] }, - 0x6b: { "name": "var_sub", "params": [ "byte", "byte" ] }, + 0x6a: { "name": "var_add", "params": [ "var", "byte" ] }, + 0x6b: { "name": "var_sub", "params": [ "var", "byte" ] }, 0x6c: { "name": "receive_card", "params": [ "card" ] }, 0x6d: { "name": "fetch_wda99", "params": [] }, 0x6e: { "name": "compare_loaded_var_word", "params": [ "word" ] }, @@ -144,8 +145,8 @@ script_commands = { 0x76: { "name": "script_command_76", "params": [] }, # ? 0x77: { "name": "link_duel", "params": [] }, 0x78: { "name": "wait_song", "params": [] }, - 0x79: { "name": "load_palette", "params": [ "word" ] }, - 0x7a: { "name": "set_sprite_frameset", "params": [ "byte", "word" ] }, + 0x79: { "name": "load_palette", "params": [ "word" ] }, # todo: enumerate palettes + 0x7a: { "name": "set_sprite_frameset", "params": [ "npc", "word" ] }, # todo: enumerate framesets 0x7b: { "name": "wait_sfx", "params": [] }, 0x7c: { "name": "print_text_wide_textbox", "params": [ "text" ] }, 0x7d: { "name": "wait_input", "params": [] }, @@ -163,6 +164,7 @@ quit_commands = [ param_lengths = { "byte": 1, "byte_decimal": 1, + "bool": 1, "condition": 1, "deck": 1, "direction": 1, @@ -172,6 +174,7 @@ param_lengths = { "prizes": 1, "sfx": 1, "song": 1, + "var": 1, "word": 2, "word_decimal": 2, "card": 2, @@ -284,6 +287,13 @@ def dump_script(start_address, address=None, visited=set()): output += " ${:02x}".format(param) elif param_type == "byte_decimal": output += " {}".format(param) + elif param_type == "bool": + if param == 0: + output += " FALSE" + elif param == 1: + output += " TRUE" + else: + raise ValueError elif param_type == "condition": if param != 0: output += " ${:02x}".format(param) @@ -303,6 +313,8 @@ def dump_script(start_address, address=None, visited=set()): output += " {}".format(sfxs[param]) elif param_type == "song": output += " {}".format(songs[param]) + elif param_type == "var": + output += " {}".format(vars[param]) elif param_type == "word": output += " ${:04x}".format(param + rom[address + 1] * 0x100) elif param_type == "word_decimal":