diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/data/npc_map_data.asm | 5 | ||||
-rw-r--r-- | src/data/npcs.asm | 87 | ||||
-rw-r--r-- | src/engine/bank03.asm | 94 | ||||
-rw-r--r-- | src/engine/bank04.asm | 4 | ||||
-rw-r--r-- | src/engine/bank07.asm | 2 | ||||
-rw-r--r-- | src/macros/scripts.asm | 4 |
6 files changed, 121 insertions, 75 deletions
diff --git a/src/data/npc_map_data.asm b/src/data/npc_map_data.asm index 629eb91..d40e086 100644 --- a/src/data/npc_map_data.asm +++ b/src/data/npc_map_data.asm @@ -1,4 +1,5 @@ -; NPC Map data. Format: +; NPC Map data. Note: pre-load functions also run after battles +; Format: ; NPC, X position, Y Position, Direction, ; pre-load function. (Resets c flag if NPC should not be loaded) MasonLabNPCS: ; 772f (4:1372f) @@ -150,7 +151,7 @@ WaterClubNPCS: ; 787e (4:1387e) db JOSHUA, $16, $08, SOUTH dw $0000 db AMY, $16, $04, SOUTH - dw $62ad + dw Preload_Amy db $00 LightningClubEntranceNPCS: ; 7897 (4:13897) diff --git a/src/data/npcs.asm b/src/data/npcs.asm index 8fb8773..5d091a1 100644 --- a/src/data/npcs.asm +++ b/src/data/npcs.asm @@ -1,5 +1,6 @@ ; When you press the A button in front of something it will find a data entry somewhere on this list ; it will then jump to the pointer in the data item. All jumps lead to an RST20 operation. +; The Deck IDs are used for the challenge hall NPCDataTable: dw DrMasonData dw DrMasonData @@ -138,7 +139,7 @@ Ronald1Data: dw OWSequence_Ronald ; Pointer to OWScript tx Text03ad db RONALD_PIC - db $1a + db INVINCIBLE_RONALD_DECK_ID db $0f db $16 Ronald2Data: @@ -150,7 +151,7 @@ Ronald2Data: dw OWSequence_Ronald ; Pointer to OWScript tx Text03ad db RONALD_PIC - db $1a + db INVINCIBLE_RONALD_DECK_ID db $0f db $16 Ronald3Data: @@ -162,7 +163,7 @@ Ronald3Data: dw OWSequence_Ronald ; Pointer to OWScript tx Text03ad db RONALD_PIC - db $1a + db INVINCIBLE_RONALD_DECK_ID db $0f db $16 IshiharaData: @@ -186,7 +187,7 @@ ImakuniData: dw OWSequence_Imakuni ; Pointer to OWScript tx Text03af db IMAKUNI_PIC - db $34 + db IMAKUNI_DECK_ID db $10 db $15 SamData: @@ -198,7 +199,7 @@ SamData: dw $561d ; Pointer to OWScript tx Text03b1 db SAM_PIC - db $02 + db SAMS_NORMAL_DECK_ID db $02 db $15 Tech1Data: @@ -390,7 +391,7 @@ ChrisData: dw $5ef2 ; Pointer to OWScript tx Text03b4 db CHRIS_PIC - db $1c + db MUSCLES_FOR_BRAINS_DECK_ID db $03 db $15 MichaelData: @@ -402,7 +403,7 @@ MichaelData: dw $6573 ; Pointer to OWScript tx Text03b5 db MICHAEL_PIC - db $1d + db HEATED_BATTLE_DECK_ID db $03 db $15 JessicaData: @@ -414,7 +415,7 @@ JessicaData: dw $6d96 ; Pointer to OWScript tx Text03b6 db JESSICA_PIC - db $1e + db LOVE_TO_BATTLE_DECK_ID db $03 db $15 MitchData: @@ -426,7 +427,7 @@ MitchData: dw $5dc3 ; Pointer to OWScript tx Text03b7 db MITCH_PIC - db $10 + db FIRST_STRIKE_DECK_ID db $03 db $16 MatthewData: @@ -438,7 +439,7 @@ MatthewData: dw $5f39 ; Pointer to OWScript tx Text03b8 db MATTHEW_PIC - db $21 + db HARD_POKEMON_DECK_ID db $03 db $15 RyanData: @@ -450,7 +451,7 @@ RyanData: dw $5ff0 ; Pointer to OWScript tx Text03b9 db RYAN_PIC - db $1f + db EXCAVATION_DECK_ID db $03 db $15 AndrewData: @@ -462,7 +463,7 @@ AndrewData: dw $6017 ; Pointer to OWScript tx Text03ba db ANDREW_PIC - db $20 + db BLISTERING_POKEMON_DECK_ID db $03 db $15 GeneData: @@ -474,7 +475,7 @@ GeneData: dw $603e ; Pointer to OWScript tx Text03bb db GENE_PIC - db $11 + db ROCK_CRUSHER_DECK_ID db $03 db $16 SaraData: @@ -486,7 +487,7 @@ SaraData: dw OWSequence_Sara ; Pointer to OWScript tx Text03bc db SARA_PIC - db $22 + db WATERFRONT_POKEMON_DECK_ID db $03 db $15 AmandaData: @@ -498,7 +499,7 @@ AmandaData: dw OWSequence_Amanda ; Pointer to OWScript tx Text03bd db AMANDA_PIC ; battle profile picture - db $23 + db LONELY_FRIENDS_DECK_ID db $03 db $15 JoshuaData: @@ -510,7 +511,7 @@ JoshuaData: dw OWSequence_Joshua ; Pointer to OWScript tx Text03be db JOSHUA_PIC - db $24 + db SOUND_OF_THE_WAVES_DECK_ID db $03 db $15 AmyData: @@ -522,7 +523,7 @@ AmyData: dw OWSequence_Amy ; Pointer to OWScript tx Text03bf db AMY_PIC - db $12 + db GO_GO_RAIN_DANCE_DECK_ID db $03 db $16 JenniferData: @@ -534,7 +535,7 @@ JenniferData: dw $6408 ; Pointer to OWScript tx Text03c0 db JENNIFER_PIC - db $25 + db PIKACHU_DECK_ID db $03 db $15 NicholasData: @@ -546,7 +547,7 @@ NicholasData: dw $642f ; Pointer to OWScript tx Text03c1 db NICHOLAS_PIC - db $26 + db BOOM_BOOM_SELFDESTRUCT_DECK_ID db $03 db $15 BrandonData: @@ -558,7 +559,7 @@ BrandonData: dw $6456 ; Pointer to OWScript tx Text03c2 db BRANDON_PIC - db $27 + db POWER_GENERATOR_DECK_ID db $03 db $15 IsaacData: @@ -570,7 +571,7 @@ IsaacData: dw $64ad ; Pointer to OWScript tx Text03c3 db ISAAC_PIC - db $13 + db ZAPPING_SELFDESTRUCT_DECK_ID db $03 db $16 BrittanyData: @@ -582,7 +583,7 @@ BrittanyData: dw OWSequence_Brittany ; Pointer to OWScript tx Text03c4 db BRITTANY_PIC - db $28 + db ETCETERA_DECK_ID db $03 db $15 KristinData: @@ -594,7 +595,7 @@ KristinData: dw $6701 ; Pointer to OWScript tx Text03c5 db KRISTIN_PIC - db $29 + db FLOWER_GARDEN_DECK_ID db $03 db $15 HeatherData: @@ -606,7 +607,7 @@ HeatherData: dw $6745 ; Pointer to OWScript tx Text03c6 db HEATHER_PIC - db $2a + db KALEIDOSCOPE_DECK_ID db $03 db $15 NikkiData: @@ -618,7 +619,7 @@ NikkiData: dw $679e ; Pointer to OWScript tx Text03c7 db NIKKI_PIC - db $14 + db FLOWER_POWER_DECK_ID db $03 db $16 RobertData: @@ -630,7 +631,7 @@ RobertData: dw $6980 ; Pointer to OWScript tx Text03c8 db ROBERT_PIC - db $2b + db GHOST_DECK_ID db $03 db $15 DanielData: @@ -642,7 +643,7 @@ DanielData: dw $6a60 ; Pointer to OWScript tx Text03c9 db DANIEL_PIC - db $2c + db NAP_TIME_DECK_ID db $03 db $15 StephanieData: @@ -654,7 +655,7 @@ StephanieData: dw $6aa2 ; Pointer to OWScript tx Text03ca db STEPHANIE_PIC - db $2d + db STRANGE_POWER_DECK_ID db $03 db $15 Murray1Data: @@ -666,7 +667,7 @@ Murray1Data: dw $6adf ; Pointer to OWScript tx Text03cb db MURRAY_PIC - db $15 + db STRANGE_PSYSHOCK_DECK_ID db $03 db $16 Murray2Data: @@ -678,7 +679,7 @@ Murray2Data: dw $6adf ; Pointer to OWScript tx Text03cb db MURRAY_PIC - db $15 + db STRANGE_PSYSHOCK_DECK_ID db $03 db $16 JosephData: @@ -690,7 +691,7 @@ JosephData: dw $6cdb ; Pointer to OWScript tx Text03cc db JOSEPH_PIC - db $2e + db FLYIN_POKEMON_DECK_ID db $03 db $15 DavidData: @@ -702,7 +703,7 @@ DavidData: dw $6c11 ; Pointer to OWScript tx Text03cd db DAVID_PIC - db $2f + db LOVELY_NIDORAN_DECK_ID db $03 db $15 ErikData: @@ -714,7 +715,7 @@ ErikData: dw $6c42 ; Pointer to OWScript tx Text03ce db ERIK_PIC - db $30 + db POISON_DECK_ID db $03 db $15 RickData: @@ -726,7 +727,7 @@ RickData: dw $6c67 ; Pointer to OWScript tx Text03cf db RICK_PIC - db $16 + db WONDERS_OF_SCIENCE_DECK_ID db $03 db $16 JohnData: @@ -738,7 +739,7 @@ JohnData: dw $6eb3 ; Pointer to OWScript tx Text03d0 db JOHN_PIC - db $31 + db ANGER_DECK_ID db $03 db $15 AdamData: @@ -750,7 +751,7 @@ AdamData: dw $6ed8 ; Pointer to OWScript tx Text03d1 db ADAM_PIC - db $32 + db FLAMETHROWER_DECK_ID db $03 db $15 JonathanData: @@ -762,7 +763,7 @@ JonathanData: dw $6efd ; Pointer to OWScript tx Text03d2 db JONATHAN_PIC - db $33 + db RESHUFFLE_DECK_ID db $03 db $15 KenData: @@ -774,7 +775,7 @@ KenData: dw $6f22 ; Pointer to OWScript tx Text03d3 db KEN_PIC - db $17 + db FIRE_CHARGE_DECK_ID db $03 db $16 CourtneyData: @@ -786,7 +787,7 @@ CourtneyData: dw $771f ; Pointer to OWScript tx Text03d4 db COURTNEY_PIC - db $0c + db LEGENDARY_MOLTRES_DECK_ID db $04 db $17 SteveData: @@ -798,7 +799,7 @@ SteveData: dw $772a ; Pointer to OWScript tx Text03d5 db STEVE_PIC - db $0d + db LEGENDARY_ZAPDOS_DECK_ID db $04 db $17 JackData: @@ -810,7 +811,7 @@ JackData: dw $7735 ; Pointer to OWScript tx Text03d6 db JACK_PIC - db $0e + db LEGENDARY_ARTICUNO_DECK_ID db $04 db $17 RodData: @@ -822,7 +823,7 @@ RodData: dw $7740 ; Pointer to OWScript tx Text03d7 db ROD_PIC - db $0f + db LEGENDARY_DRAGONITE_DECK_ID db $04 db $17 Clerk10Data: @@ -1314,7 +1315,7 @@ AaronData: dw $58dd ; Pointer to OWScript tx Text03e7 db AARON_PIC - db $09 + db LIGHTNING_AND_FIRE_DECK_ID db $02 db $15 GuideData: diff --git a/src/engine/bank03.asm b/src/engine/bank03.asm index 651109d..38a736e 100644 --- a/src/engine/bank03.asm +++ b/src/engine/bank03.asm @@ -1901,7 +1901,7 @@ OWScript_StartBattle: ; cd01 (3:4d01) ld a, [wd695] ld c, a ld b, $0 - ld hl, $4d63 + ld hl, AaronDeckIDs add hl, bc ld a, [hl] ld [wcc19], a @@ -1933,8 +1933,10 @@ Func_cd4f: ; cd4f (3:4d4f) ld a, [wd696] jr asm_cd2f -Unknown_dd63: ; cd4f (3:4d4f) - INCROM $cd63, $cd66 +AaronDeckIDs: ; cd63 (3:4d63) + db LIGHTNING_AND_FIRE_DECK_ID + db WATER_AND_FIGHTING_DECK_ID + db GRASS_AND_PSYCHIC_DECK_ID Func_cd66: ; cd66 (3:4d66) ld a, c @@ -2045,10 +2047,12 @@ Func_cdf5: ; cdf5 (3:4df5) ld [wLoadedNPCTempIndex], a jp IncreaseOWScriptPointerBy3 -Func_ce26: ; ce26 (3:4e26) +; Finds and executes an NPCMovement script in the table provided in bc +; based on the active NPC's current direction +OWScript_MoveActiveNPCByDirection: ; ce26 (3:4e26) ld a, [wScriptNPC] ld [wLoadedNPCTempIndex], a - farcall Func_1c455 + farcall GetNPCDirection rlca add c ld l, a @@ -2058,6 +2062,7 @@ Func_ce26: ; ce26 (3:4e26) ld c, [hl] inc hl ld b, [hl] +; fallthrough ; Moves an NPC given the list of directions pointed to by bc ; set bit 7 to only rotate the NPC @@ -2084,7 +2089,11 @@ Func_ce52: ; ce52 (3:4e52) ld a, [wTempNPC] push af ld a, [wd696] -asm_ce5d +; fallthrough + +; Executes movement on an arbitrary NPC using values in a and on the stack +; Changes and fixes Temp NPC using stack values +ExecuteArbitraryNPCMovementFromStack ld [wTempNPC], a call FindLoadedNPC call ExecuteNPCMovement @@ -2094,7 +2103,7 @@ asm_ce5d ld [wLoadedNPCTempIndex], a ret -Func_ce6f: ; ce6f (3:4e6f) +OWScript_MoveArbitraryNPC: ; ce6f (3:4e6f) ld a, [wLoadedNPCTempIndex] push af ld a, [wTempNPC] @@ -2106,7 +2115,7 @@ Func_ce6f: ; ce6f (3:4e6f) call IncreaseOWScriptPointerBy1 pop bc pop af - jr asm_ce5d + jr ExecuteArbitraryNPCMovementFromStack OWScript_CloseTextBox: ; ce84 (3:4e84) call CloseTextBox @@ -4044,7 +4053,7 @@ OWSequence_Sara: ; e177 (3:6177) tx Text042f run_script OWScript_StartBattle db PRIZES_2 - db WATERFRONT_POKEMON_DECK_ID ; 6189 + db WATERFRONT_POKEMON_DECK_ID db MUSIC_DUEL_THEME_1 run_script OWScript_QuitScriptFully @@ -4305,8 +4314,8 @@ OWSequence_BeatJoshua: ; e26c (3:626c) run_script OWScript_PrintTextString tx Text0449 run_script OWScript_CloseTextBox - run_script Func_ce26 - dw $62a1 + run_script OWScript_MoveActiveNPCByDirection + dw NPCMovementTable_e2a1 run_script OWScript_PrintTextString tx Text044a run_script Func_cfc6 @@ -4318,7 +4327,39 @@ OWSequence_BeatJoshua: ; e26c (3:626c) run_script OWScript_EndScriptLoop1 ret - INCROM $e2a1, $e2d1 +NPCMovementTable_e2a1: ; e2a1 (3:62a1) + dw NPCMovement_e2a9 + dw NPCMovement_e2a9 + dw NPCMovement_e2a9 + dw NPCMovement_e2a9 + +NPCMovement_e2a9: ; e2a9 (3:62a9) + db NORTH + db $ff + +NPCMovement_e2ab: ; e2ab (3:62ab) + db SOUTH + db $ff + +Preload_Amy: ; e2ad (3:62ad) + xor a + ld [wd3d0], a + ld a, [wd0c2] + or a + jr z, .asm_e2cf + ld a, [wPlayerXCoord] + cp $14 + jr nz, .asm_e2cf + ld a, [wPlayerYCoord] + cp $06 + jr nz, .asm_e2cf + ld a, $14 + ld [wLoadNPCXPos], a + ld a, $01 + ld [wd3d0], a +.asm_e2cf + scf + ret OWSequence_MeetAmy: ; e2d1 (3:62d1) start_script @@ -4359,9 +4400,9 @@ OWSequence_MeetAmy: ; e2d1 (3:62d1) run_script OWScript_MovePlayer db NORTH db $01 - run_script Func_ce6f - db $21 - dw $62ab + run_script OWScript_MoveArbitraryNPC + db JOSHUA + dw NPCMovement_e2ab run_script OWScript_PrintTextString tx Text044e run_script OWScript_Jump @@ -5211,21 +5252,24 @@ Func_fcad: ; fcad (3:7cad) tx Text06d5 .ows_fcd5 - run_script Func_ce6f - db $3c - dw Unknown_fce1 + run_script OWScript_MoveArbitraryNPC + db GIFT_CENTER_CLERK + dw NPCMovement_fce1 run_script OWScript_PrintTextString tx Text06d6 - run_script Func_ce6f - db $3c - dw Unknown_fce3 + run_script OWScript_MoveArbitraryNPC + db GIFT_CENTER_CLERK + dw NPCMovement_fce3 run_script OWScript_QuitScriptFully -Unknown_fce1: ; fce1 (3:7ce1) - db $82, $ff +NPCMovement_fce1: ; fce1 (3:7ce1) + db SOUTH | NO_MOVE + db $ff -Unknown_fce3: ; fce3 (3:7ce3) - db $80, $ff +NPCMovement_fce3: ; fce3 (3:7ce3) + db NORTH | NO_MOVE + db $ff +; fce5 rept $31b db $ff diff --git a/src/engine/bank04.asm b/src/engine/bank04.asm index 3f1d4f4..76b7c0a 100644 --- a/src/engine/bank04.asm +++ b/src/engine/bank04.asm @@ -979,7 +979,7 @@ OverworldScriptTable: ; 1217b (4:617b) dw Func_cda8 dw OWScript_PrintTextQuitFully dw Func_cdcb - dw Func_ce26 + dw OWScript_MoveActiveNPCByDirection dw OWScript_CloseTextBox dw OWScript_GiveBoosterPacks dw Func_cf0c @@ -1028,7 +1028,7 @@ OverworldScriptTable: ; 1217b (4:617b) dw OWScript_OpenDeckMachine dw Func_d271 dw OWScript_EnterMap - dw Func_ce6f + dw OWScript_MoveArbitraryNPC dw Func_d209 dw Func_d38f dw Func_d396 diff --git a/src/engine/bank07.asm b/src/engine/bank07.asm index d655c42..54e5c74 100644 --- a/src/engine/bank07.asm +++ b/src/engine/bank07.asm @@ -93,7 +93,7 @@ INCLUDE "data/map_headers.asm" Func_1c440: ; 1c440 (7:4440) INCROM $1c440, $1c455 -Func_1c455: ; 1c455 (7:4455) +GetNPCDirection: ; 1c455 (7:4455) push hl ld a, [wLoadedNPCTempIndex] ld l, LOADED_NPC_DIRECTION diff --git a/src/macros/scripts.asm b/src/macros/scripts.asm index b7d07cb..d74db03 100644 --- a/src/macros/scripts.asm +++ b/src/macros/scripts.asm @@ -24,7 +24,7 @@ ENDM const Func_cda8_index ; $07 const OWScript_PrintTextQuitFully_index ; $08 const Func_cdcb_index ; $09 - const Func_ce26_index ; $0a + const OWScript_MoveActiveNPCByDirection_index ; $0a const OWScript_CloseTextBox_index ; $0b const OWScript_GiveBoosterPacks_index ; $0c const Func_cf0c_index ; $0d @@ -73,7 +73,7 @@ ENDM const OWScript_OpenDeckMachine_index ; $38 const Func_d271_index ; $39 const OWScript_EnterMap_index ; $3a - const Func_ce6f_index ; $3b + const OWScript_MoveArbitraryNPC_index ; $3b const Func_d209_index ; $3c const Func_d38f_index ; $3d const Func_d396_index ; $3e |