diff options
Diffstat (limited to 'src/engine')
-rw-r--r-- | src/engine/bank03.asm | 264 | ||||
-rw-r--r-- | src/engine/bank04.asm | 106 | ||||
-rw-r--r-- | src/engine/bank07.asm | 104 | ||||
-rw-r--r-- | src/engine/bank20.asm | 14 | ||||
-rw-r--r-- | src/engine/home.asm | 44 |
5 files changed, 343 insertions, 189 deletions
diff --git a/src/engine/bank03.asm b/src/engine/bank03.asm index 6149c08..5330bd1 100644 --- a/src/engine/bank03.asm +++ b/src/engine/bank03.asm @@ -176,7 +176,7 @@ Func_c158: ; c158 (3:4158) cp $1 ret nz ld a, [wd0c4] - ld [wd3ab], a + ld [wTempNPC], a call Func_39c3 jr c, .asm_c179 ld a, [wd3aa] @@ -580,7 +580,7 @@ Func_c4b9: ; c4b9 (3:44b9) ld a, b ld [wd337], a ld a, $0 - farcall Func_1299f + farcall CreateSpriteAndAnimBufferEntry ld a, [wWhichSprite] ld [wd336], a ld b, $2 @@ -1225,51 +1225,51 @@ Func_c943: ; c943 (3:4943) push hl push bc push de - ld l, $0 - call Func_3abd - jr nc, .asm_c98f -.asm_c94d + ld l, MAP_SCRIPT_NPCS + call GetMapScriptPointer + jr nc, .quit +.loadNPCLoop ld a, l - ld [wd4c4], a + ld [wTempPointer], a ld a, h - ld [wd4c5], a - ld a, $4 - ld [wd4c6], a - ld de, wd3ab - ld bc, $0006 + ld [wTempPointer + 1], a + ld a, BANK(MapScripts) + ld [wTempPointerBank], a + ld de, wTempNPC + ld bc, NPC_MAP_SIZE call CopyBankedDataToDE - ld a, [wd3ab] + ld a, [wTempNPC] or a - jr z, .asm_c98f + jr z, .quit push hl - ld a, [wd3af] + ld a, [wLoadNPCFunction] ld l, a - ld a, [wd3b0] + ld a, [wLoadNPCFunction+1] ld h, a or l - jr z, .asm_c97a + jr z, .noScript call CallHL2 - jr nc, .asm_c988 -.asm_c97a - ld a, [wd3ab] - farcall Func_11857 + jr nc, .nextNPC +.noScript + ld a, [wTempNPC] + farcall LoadNPCSpriteData call Func_c998 farcall Func_1c485 -.asm_c988 +.nextNPC pop hl - ld bc, $0006 + ld bc, NPC_MAP_SIZE add hl, bc - jr .asm_c94d -.asm_c98f - ld l, $2 - call Func_c9c2 + jr .loadNPCLoop +.quit + ld l, MAP_SCRIPT_POST_NPC + call CallMapScriptPointerIfExists pop de pop bc pop hl ret Func_c998: ; c998 (3:4998) - ld a, [wd3ab] + ld a, [wTempNPC] cp $22 ret nz ld a, [wd3d0] @@ -1289,23 +1289,23 @@ Func_c998: ; c998 (3:4998) Func_c9b8: ; c9b8 (3:49b8) ld l, $8 - jr Func_c9c2 + jr CallMapScriptPointerIfExists Func_c9bc: ; c9bc (3:49bc) ld l, $a - jr Func_c9c2 + jr CallMapScriptPointerIfExists Func_c9c0: ; c9c0 (3:49c0) ld l, $c -Func_c9c2: ; c9c2 (3:49c2) - call Func_3abd +CallMapScriptPointerIfExists: ; c9c2 (3:49c2) + call GetMapScriptPointer ret nc jp hl Func_c9c7: ; c9c7 (3:49c7) ld l, $e - jr Func_c9c2 + jr CallMapScriptPointerIfExists Func_c9cb: ; c9cb (3:49cb) push hl @@ -1493,7 +1493,9 @@ MaxOutEventFlag: ; cac5 (3:4ac5) ret ; 0xcacd - INCROM $cacd, $cad0 +Func_cacd: ; cacd (3:4acd) + call Func_cab3 +; fallthrough ZeroOutEventFlag: ; cad0 (3:4ad0) push bc @@ -1951,7 +1953,7 @@ OWScript_PrintVariableText: ; cd83 (3:4d83) Func_cd94: ; cd94 (3:4d94) call Func_ca69 - ld b, h + db $44 Unknown_cd98: dec a and $3 @@ -1995,14 +1997,14 @@ Func_cdd1: ; cdd1 (3:4dd1) Func_cdd8: ; cdd8 (3:4dd8) ld a, [wd3aa] push af - ld a, [wd3ab] + ld a, [wTempNPC] push af ld a, [wd696] - ld [wd3ab], a + ld [wTempNPC], a call Func_39c3 call Func_cdd1 pop af - ld [wd3ab], a + ld [wTempNPC], a pop af ld [wd3aa], a ret @@ -2010,21 +2012,21 @@ Func_cdd8: ; cdd8 (3:4dd8) Func_cdf5: ; cdf5 (3:4df5) ld a, [wd3aa] push af - ld a, [wd3ab] + ld a, [wTempNPC] push af ld a, [wd696] - ld [wd3ab], a + ld [wTempNPC], a ld a, c - ld [wd3ac], a + ld [wLoadNPCXPos], a ld a, b - ld [wd3ad], a + ld [wLoadNPCYPos], a ld a, $2 - ld [wd3ae], a - ld a, [wd3ab] - farcall Func_11857 + ld [wLoadNPCDirection], a + ld a, [wTempNPC] + farcall LoadNPCSpriteData farcall Func_1c485 pop af - ld [wd3ab], a + ld [wTempNPC], a pop af ld [wd3aa], a jp IncreaseOWScriptPointerBy3 @@ -2059,15 +2061,15 @@ Func_ce4a: ; ce4a (3:4e4a) Func_ce52: ; ce52 (3:4e52) ld a, [wd3aa] push af - ld a, [wd3ab] + ld a, [wTempNPC] push af ld a, [wd696] asm_ce5d - ld [wd3ab], a + ld [wTempNPC], a call Func_39c3 call Func_ce3a pop af - ld [wd3ab], a + ld [wTempNPC], a pop af ld [wd3aa], a ret @@ -2075,7 +2077,7 @@ asm_ce5d Func_ce6f: ; ce6f (3:4e6f) ld a, [wd3aa] push af - ld a, [wd3ab] + ld a, [wTempNPC] push af ld a, c push af @@ -2270,28 +2272,30 @@ Func_cf7b: ; cf7b (3:4f7b) jr c, .asm_cf7d jp IncreaseOWScriptPointerBy1 -; This function doesn't look like a valid function, but it's pointed to in the table. Func_cf96: ; cf96 (3:4f96) ld c, $0 call Func_ca69 - ld de, $28b7 - ld hl, $08fe + db $11 + or a + jr z, Func_cfc0 + cp a, $08 jr c, .asm_cfa4 inc c .asm_cfa4 call Func_ca69 - rla + db $17 cp $8 jr c, .asm_cfad inc c .asm_cfad call Func_ca69 -.asm_cfb0 - jr nz, .asm_cfb0 - ld [$0138], sp + db $20 + cp a, $08 + jr c, .asm_cfb6 inc c +.asm_cfb6 ld a, c rlca add $3 @@ -2311,7 +2315,7 @@ Func_cfc6: ; cfc6 (3:4fc6) Func_cfd4: ; cfd4 (3:4fd4) call Func_ca69 - dec l + db $2d ld b, a .asm_cfd9 ld a, $5 @@ -2356,7 +2360,7 @@ Func_d00b: ; d00b (3:500b) add hl, bc push hl call Func_ca69 - dec hl + db $2b ld e, a ld d, $0 call GetCardName @@ -2368,21 +2372,21 @@ Func_d00b: ; d00b (3:500b) Func_d025: ; d025 (3:5025) call Func_ca69 - dec hl + db $2b call GetCardCountInCollectionAndDecks jp c, Func_cf67 jp Func_cf6d Func_d032: ; d032 (3:5032) call Func_ca69 - dec hl + db $2b call GetCardCountInCollection jp c, Func_cf67 jp Func_cf6d Func_d03f: ; d03f (3:503f) call Func_ca69 - dec hl + db $2b call RemoveCardFromCollection jp IncreaseOWScriptPointerBy1 @@ -2399,7 +2403,8 @@ Func_d055: ; d055 (3:5055) call Func_c5ce jp IncreaseOWScriptPointerBy2 - +; arg1 - Direction (index in ScriptedMovementOffsetTable) +; arg2 - Tiles Moves (Speed) OWScript_MovePlayer: ; 505c (3:505c) ld a, c ld [wd339], a @@ -2426,7 +2431,7 @@ OWScript_SetDialogName: ; d080 (3:5080) ; Not confident enough to give it a name yet Func_d088: ; d088 (3:5088) ld a, c - ld [wd3ab], a + ld [wTempNPC], a call GetOWSArgs2AfterPointer call Func_c926 jp IncreaseOWScriptPointerBy4 @@ -2498,10 +2503,10 @@ Func_d0f2: ; d0f2 (3:50f2) Func_d103: ; d103 (3:5103) ld a, [wd3aa] push af - ld a, [wd3ab] + ld a, [wTempNPC] push af ld a, c - ld [wd3ab], a + ld [wTempNPC], a call Func_39c3 jr c, .asm_d119 call $54d1 @@ -2512,7 +2517,7 @@ Func_d103: ; d103 (3:5103) .asm_d11c pop af - ld [wd3ab], a + ld [wTempNPC], a pop af ld [wd3aa], a ret @@ -2575,17 +2580,17 @@ Func_d16b: ; d16b (3:516b) jp IncreaseOWScriptPointerBy2 Func_d195: ; d195 (3:5195) - ld a, [wd3ab] + ld a, [wTempNPC] push af call Func_ca69 - ld b, l + db $45 inc a ld c, a call Func_ca8f ld b, l call Func_f580 pop af - ld [wd3ab], a + ld [wTempNPC], a jp IncreaseOWScriptPointerBy1 Func_d1ad: ; d1ad (3:51ad) @@ -2594,7 +2599,7 @@ Func_d1ad: ; d1ad (3:51ad) Func_d1b3: ; d1b3 (3:51b3) call Func_ca69 - ld b, h + db $44 dec a cp $2 jr c, .asm_d1c3 @@ -2623,7 +2628,7 @@ asm_d1c6 Func_d209: ; d209 (3:5209) call Func_ca69 - ld [hl], c + db $71 ld e, a .asm_d20e call UpdateRNGSources @@ -2870,7 +2875,7 @@ OWScript_GivePCPack: ; d3c9 (3:53c9) farcall GivePCPack jp IncreaseOWScriptPointerBy2 -Func_d3d1: ; d3d1 (3:53d1) +OWScript_nop: ; d3d1 (3:53d1) jp IncreaseOWScriptPointerBy1 Func_d3d4: ; d3d4 (3:53d4) @@ -3065,7 +3070,44 @@ OWScript_JumpIfFlagZero2: jp IncreaseOWScriptPointerBy4 ; 0xd4ec - INCROM $d4ec, $d52e +LoadOverworld: ; d4ec (3:54ec) + call Func_d4fb + call Func_ca69 + ld a, $b7 + ret nz + ld bc, OWSequence_d52e + jp Func_c935 + +Func_d4fb: ; d4fb (3:54fb) + call Func_cacd + ld e, c + call Func_f602 + call Func_ca69 + db $3f + cp $02 + jr z, .asm_d527 + call Func_ca69 + db $40 + cp $02 + jr z, .asm_d521 + call Func_ca69 + db $41 + cp $02 + jr z, .asm_d51b + ret +.asm_d51b + ld c, $07 + call Func_ca8f + ld b, c +.asm_d521 + ld c, $07 + call Func_ca8f + ld b, b +.asm_d527 + ld c, $07 + call Func_ca8f + ccf + ret OWSequence_d52e: ; d52e (3:552e) start_script @@ -3088,31 +3130,31 @@ OWSequence_d52e: ; d52e (3:552e) OWSequence_d753: ; d753 (3:5753) start_script run_script OWScript_MovePlayer - db $00 + db NORTH db $02 run_script OWScript_MovePlayer - db $00 + db NORTH db $02 run_script OWScript_MovePlayer - db $00 + db NORTH db $02 run_script OWScript_MovePlayer - db $00 + db NORTH db $02 run_script OWScript_MovePlayer - db $00 + db NORTH db $02 run_script OWScript_MovePlayer - db $00 + db NORTH db $02 run_script OWScript_MovePlayer - db $00 + db NORTH db $02 run_script OWScript_MovePlayer - db $00 + db NORTH db $02 run_script OWScript_MovePlayer - db $00 + db NORTH db $02 run_script OWScript_PrintTextString tx Text05e3 @@ -3145,8 +3187,7 @@ OWSequence_d779: ; d779 (03:5779) run_script OWScript_CloseAdvancedTextBox run_script Func_d088 db $01 - db $94 - db $57 + dw $5794 run_script OWScript_EndScriptLoop1 INCROM $d793, $e13f @@ -3156,11 +3197,11 @@ WaterClubMovePlayer: ; e13f (3:613f) cp $8 ret nz call Func_ca69 - inc sp + db $33 cp $2 ret nc ld a, $21 - ld [wd3ab], a + ld [wTempNPC], a ld bc, OWSequence_NotReadyToSeeAmy jp Func_c926 @@ -3282,7 +3323,7 @@ OWSequence_NotReadyToSeeAmy: db $08 dw $61f8 run_script OWScript_MovePlayer - db $02 + db SOUTH db $04 run_script Func_ce4a db $13 @@ -3474,15 +3515,15 @@ OWSequence_MeetAmy: ; e2d1 (3:62d1) run_script Func_d055 db $03 run_script OWScript_MovePlayer - db $03 + db WEST db $01 run_script Func_d055 db $00 run_script OWScript_MovePlayer - db $00 + db NORTH db $01 run_script OWScript_MovePlayer - db $00 + db NORTH db $01 run_script Func_ce6f db $21 @@ -3622,7 +3663,7 @@ FindEndOfBattleScript: ; e52c (3:652c) .found_enemy ld a, [hli] - ld [wd3ab], a + ld [wTempNPC], a ld b, $0 add hl, bc ld c, [hl] @@ -3748,6 +3789,8 @@ ClubEntranceAfterDuel: ; e7f6 (3:67f6) dw OWSequence_LostToSecondRonaldFight db $00 +; A Ronald is already loaded or not loaded depending on Pre-Load scripts +; in data/npc_map_data.asm. This just starts a sequence if possible. LoadClubEntrance: ; e809 (3:6809) call TryFirstRonaldFight call TrySecondRonaldFight @@ -3756,7 +3799,7 @@ LoadClubEntrance: ; e809 (3:6809) TryFirstRonaldEncounter: ; e813 (3:6813) ld a, RONALD1 - ld [wd3ab], a + ld [wTempNPC], a call Func_39c3 ret c ld bc, OWSequence_FirstRonaldEncounter @@ -3768,7 +3811,7 @@ TryFirstRonaldFight: ; e822 (3:6822) call Func_39c3 ret c call Func_ca69 - ld c, h + db $4c or a ret nz ld bc, OWSequence_FirstRonaldFight @@ -3780,7 +3823,7 @@ TrySecondRonaldFight: ; e837 (3:6837) call Func_39c3 ret c call Func_ca69 - ld c, l + db $4d or a ret nz ld bc, OWSequenceSecondRonaldFight @@ -3792,7 +3835,7 @@ TrySecondRonaldFight: ; e837 (3:6837) OWSequence_FirstRonaldEncounter: ; e862 (3:6862) start_script run_script OWScript_MaxOutFlagValue - db $4b + db EVENT_FLAG_4B run_script Func_ce4a db $94 db $68 @@ -3802,10 +3845,10 @@ OWSequence_FirstRonaldEncounter: ; e862 (3:6862) tx Text0645 run_script OWScript_CloseTextBox run_script OWScript_MovePlayer - db $00 + db NORTH db $01 run_script OWScript_MovePlayer - db $00 + db NORTH db $01 run_script OWScript_PrintTextString tx Text0646 @@ -3827,7 +3870,7 @@ OWSequence_FirstRonaldEncounter: ; e862 (3:6862) run_script Func_d055 db $03 run_script OWScript_MovePlayer - db $01 + db EAST db $04 run_script Func_ce4a db $94 @@ -3858,15 +3901,15 @@ OWSequence_FirstRonaldFight: ; e8c0 (3:68c0) run_script Func_d055 db $03 run_script OWScript_MovePlayer - db $03 + db WEST db $01 run_script Func_d055 db $02 run_script OWScript_MovePlayer - db $02 + db SOUTH db $01 run_script OWScript_MovePlayer - db $02 + db SOUTH db $01 run_script OWScript_PrintTextString tx Text064b @@ -3931,15 +3974,15 @@ OWSequenceSecondRonaldFight: ; e91e (3:691e) run_script Func_d055 db $03 run_script OWScript_MovePlayer - db $03 + db WEST db $01 run_script Func_d055 db $02 run_script OWScript_MovePlayer - db $02 + db SOUTH db $01 run_script OWScript_MovePlayer - db $02 + db SOUTH db $01 run_script OWScript_PrintTextString tx Text0650 @@ -3987,11 +4030,11 @@ OWJump_FinishedSecondRonaldFight ; e959 (3:6959) Func_f580: ; f580 (3:7580) call Func_ca69 - ld b, h + db $44 cp $3 jr z, .asm_f596 call Func_ca69 - ld b, l + db $45 cp $3 ld d, $18 jr nz, .asm_f598 @@ -4014,12 +4057,15 @@ Func_f580: ; f580 (3:7580) ld a, [hl] .asm_f5ac - ld [wd3ab], a + ld [wTempNPC], a ld [wd696], a ret ; 0xf5b3 - INCROM $f5b3, $fc2b + INCROM $f5b3, $f602 + +Func_f602: ; f602 (3:7602) + INCROM $f602, $fc2b Func_fc2b: ; fc2b (3:7c2b) ld a, [wDuelResult] diff --git a/src/engine/bank04.asm b/src/engine/bank04.asm index e127f70..4cba1d9 100644 --- a/src/engine/bank04.asm +++ b/src/engine/bank04.asm @@ -495,7 +495,7 @@ INCLUDE "data/overworld_indexes.asm" Func_10fbc: ; 10fbc (4:4fbc) ld a, $25 - farcall Func_1299f + farcall CreateSpriteAndAnimBufferEntry ld c, SPRITE_ANIM_COORD_X call GetSpriteAnimBufferProperty ld a, $80 @@ -518,7 +518,7 @@ Func_10fde: ; 10fde (4:4fde) xor a ld [wd33e], a ld a, $25 - call Func_1299f + call CreateSpriteAndAnimBufferEntry ld a, [wWhichSprite] ld [wd33b], a ld b, $35 @@ -839,13 +839,13 @@ Func_115a3: ; 115a3 (4:55a3) INCLUDE "data/map_scripts.asm" -; loads a pointer into hl found on PointerTable_118f5 +; loads a pointer into hl found on NPCDataTable GetNPCDataPointer: ; 1184a (4:584a) ; this may have been a macro rlca - add LOW(PointerTable_118f5) + add LOW(NPCDataTable) ld l, a - ld a, HIGH(PointerTable_118f5) + ld a, HIGH(NPCDataTable) adc $00 ld h, a ld a, [hli] @@ -853,12 +853,12 @@ GetNPCDataPointer: ; 1184a (4:584a) ld l, a ret -Func_11857: ; 11857 (4:5857) +LoadNPCSpriteData: ; 11857 (4:5857) push hl push bc call GetNPCDataPointer ld a, [hli] - ld [wd3ab], a + ld [wTempNPC], a ld a, [hli] ld [wd3b3], a ld a, [hli] @@ -869,7 +869,7 @@ Func_11857: ; 11857 (4:5857) ld [wd3b2], a pop bc ld a, [wConsole] - cp $2 + cp CONSOLE_CGB jr nz, .asm_1187a ld a, b ld [wd3b1], a @@ -1036,7 +1036,7 @@ OverworldScriptTable: ; 1217b (4:617b) dw Func_d39d dw Func_d3b9 dw OWScript_GivePCPack - dw Func_d3d1 + dw OWScript_nop dw Func_d3d4 dw Func_d3e0 dw Func_d3fe @@ -1231,14 +1231,15 @@ Unknown_128fb: ; 128fb Func_1296e: ; 1296e (4:696e) INCROM $1296e, $1299f -Func_1299f: ; 1299f (4:699f) +; creates a new entry in SpriteAnimBuffer, Alse loads the sprite if need be +CreateSpriteAndAnimBufferEntry: ; 1299f (4:699f) push af ld a, [wd5d7] or a - jr z, .asm_129a8 + jr z, .continue pop af ret -.asm_129a8 +.continue pop af push bc push hl @@ -1246,50 +1247,50 @@ Func_1299f: ; 1299f (4:699f) ld [wd5d3], a xor a ld [wWhichSprite], a - call Func_3db7 - ld bc, $0010 -.asm_129bb + call GetFirstSpriteAnimBufferProperty + ld bc, SPRITE_ANIM_LENGTH +.findFirstEmptyAnimField ld a, [hl] or a - jr z, .asm_129cf + jr z, .foundEmptyAnimField add hl, bc ld a, [wWhichSprite] inc a ld [wWhichSprite], a cp $10 - jr nz, .asm_129bb + jr nz, .findFirstEmptyAnimField debug_ret scf - jr .asm_129d6 -.asm_129cf + jr .quit +.foundEmptyAnimField ld a, $1 ld [hl], a - call Func_129d9 + call FillNewSpriteAnimBufferEntry or a -.asm_129d6 +.quit pop hl pop bc ret -Func_129d9: ; 129d9 (4:69d9) +FillNewSpriteAnimBufferEntry: ; 129d9 (4:69d9) push hl push bc push hl inc hl - ld c, $f + ld c, SPRITE_ANIM_LENGTH - 1 xor a -.asm_129e0 +.clearSpriteAnimBufferEntryLoop ld [hli], a dec c - jr nz, .asm_129e0 + jr nz, .clearSpriteAnimBufferEntryLoop pop hl - ld bc, $0004 + ld bc, SPRITE_ANIM_FIELD_05 - 1 add hl, bc ld a, [wd5d3] ld [hli], a ld a, $ff ld [hl], a - ld bc, $0009 + ld bc, SPRITE_ANIM_MOVEMENT_COUNTER - SPRITE_ANIM_FIELD_05 add hl, bc ld a, $ff ld [hl], a @@ -1324,7 +1325,7 @@ Func_12ab5: ; 12ab5 (4:6ab5) Func_12ae2: ; 12ae2 (4:6ae2) push bc push af - call Func_3db7 + call GetFirstSpriteAnimBufferProperty pop af push hl ld bc, $0005 @@ -1335,12 +1336,12 @@ Func_12ae2: ; 12ae2 (4:6ae2) farcall GetMapDataPointer farcall Func_80229 pop hl - ld a, [wd4c6] + ld a, [wTempPointerBank] ld [hli], a - ld a, [wd4c4] + ld a, [wTempPointer] ld [hli], a ld c, a - ld a, [wd4c5] + ld a, [wTempPointer + 1] ld [hli], a ld b, a ld a, $3 @@ -1362,15 +1363,15 @@ Func_12b13: ; 12b13 (4:6b13) ld bc, $0006 add hl, bc ld a, [hli] - ld [wd4c6], a + ld [wTempPointerBank], a inc hl inc hl ld a, [hl] - ld [wd4c4], a + ld [wTempPointer], a add $4 ld [hli], a ld a, [hl] - ld [wd4c5], a + ld [wTempPointer + 1], a adc $0 ld [hl], a ld de, wd23e @@ -1423,11 +1424,11 @@ Func_12b6a: ; 12b6a (4:6b6a) ld bc, $0006 add hl, bc ld a, [hli] - ld [wd4c6], a + ld [wTempPointerBank], a ld a, [hli] - ld [wd4c4], a + ld [wTempPointer], a ld a, [hli] - ld [wd4c5], a + ld [wTempPointer + 1], a pop hl call Func_3d72 pop de @@ -1467,6 +1468,8 @@ Func_12ba7: ; 12ba7 (4:6ba7) Func_12bcd: ; 12bcd (4:6bcd) INCROM $12bcd, $12c05 +; gets some value based on the sprite in b and wd5d8 +; loads the sprites data if it doesn't already exist Func_12c05: ; 12c05 (4:6c05) push hl push bc @@ -1477,23 +1480,24 @@ Func_12c05: ; 12c05 (4:6c05) ld c, a ld hl, wd5d8 or a - jr z, .asm_12c22 -.asm_12c15 + jr z, .tryToAddSprite + +.findSpriteMatchLoop inc hl ld a, [hl] cp b - jr z, .asm_12c3a + jr z, .foundSpriteMatch inc hl ld a, [hli] add [hl] ld d, a inc hl dec c - jr nz, .asm_12c15 -.asm_12c22 + jr nz, .findSpriteMatchLoop +.tryToAddSprite ld a, [wd618] cp $10 - jr nc, .asm_12c48 + jr nc, .quitFail inc a ld [wd618], a inc hl @@ -1507,7 +1511,7 @@ Func_12c05: ; 12c05 (4:6c05) pop af ld [hl], a pop hl -.asm_12c3a +.foundSpriteMatch dec hl inc [hl] inc hl @@ -1515,15 +1519,15 @@ Func_12c05: ; 12c05 (4:6c05) ld a, [hli] add [hl] cp $81 - jr nc, .asm_12c48 + jr nc, .quitFail ld a, d or a - jr .asm_12c4b -.asm_12c48 + jr .quitSucceed +.quitFail debug_ret xor a scf -.asm_12c4b +.quitSucceed pop de pop bc pop hl @@ -1584,4 +1588,8 @@ Func_13485: ; 13485 (4:7485) ret ; 0x134b1 - INCROM $134b1, $14000 + INCROM $134b1, $1372f + +INCLUDE "data/npc_map_data.asm" + + INCROM $13b04, $14000 diff --git a/src/engine/bank07.asm b/src/engine/bank07.asm index 25534f1..0b2ec00 100644 --- a/src/engine/bank07.asm +++ b/src/engine/bank07.asm @@ -128,8 +128,83 @@ Func_1c477: ; 1c477 (7:4477) pop hl ret +; Loads NPC Sprite Data Func_1c485: ; 1c485 (7:4485) - INCROM $1c485, $1c50a + push hl + push bc + push de + xor a + ld [wd3aa], a + ld b, a + ld c, $08 + ld hl, wd34a + ld de, $c +.findEmptyIndexLoop + ld a, [hl] + or a + jr z, .foundEmptyIndex + add hl, de + inc b + dec c + jr nz, .findEmptyIndexLoop + ld hl, wd34a + debug_ret + jr .exit +.foundEmptyIndex + ld a, b + ld [wd3aa], a + ld a, [wd3b3] + farcall CreateSpriteAndAnimBufferEntry + jr c, .exit + ld a, [wd3aa] + call Func_39a7 + push hl + ld a, [wTempNPC] + ld [hli], a + ld a, [wWhichSprite] + ld [hli], a + ld a, [wLoadNPCXPos] + ld [hli], a + ld a, [wLoadNPCYPos] + ld [hli], a + ld a, [wLoadNPCDirection] + ld [hli], a + ld a, [wd3b2] + ld [hli], a + ld a, [wd3b1] + ld [hli], a + ld a, [wLoadNPCDirection] + ld [hli], a + call Func_1c58e + call Func_1c5b9 + ld hl, wd349 + inc [hl] + pop hl + call Func_1c665 + call Func_1c6e3 + ld a, [wTempNPC] + call Func_1c4fa + jr nc, .exit + ld a, $01 + ld [wd3b8], a +.exit + pop de + pop bc + pop hl + ret + +Func_1c4fa: ; 1c4fa (7:44fa) + cp RONALD1 + jr z, .asm_1c508 + cp RONALD2 + jr z, .asm_1c508 + cp RONALD3 + jr z, .asm_1c508 + or a + ret +.asm_1c508 + scf + ret Func_1c50a: ; 1c50a (7:450a) push hl @@ -190,10 +265,10 @@ Func_1c557: ; 1c557 (7:4557) ld c, a ld a, [wd3aa] push af - ld a, [wd3ab] + ld a, [wTempNPC] push af ld a, c - ld [wd3ab], a + ld [wTempNPC], a ld c, $0 call Func_39c3 jr c, .asm_1c570 @@ -202,7 +277,7 @@ Func_1c557: ; 1c557 (7:4557) .asm_1c570 pop af - ld [wd3ab], a + ld [wTempNPC], a pop af ld [wd3aa], a ld a, c @@ -253,6 +328,7 @@ Func_1c58e: ; 1c58e (7:458e) ret ; 0x1c5b9 +Func_1c5b9: ; 1c5b9 (7:45b9) INCROM $1c5b9, $1c5e9 Func_1c5e9: ; 1c5e9 (7:45e9) @@ -274,7 +350,25 @@ Func_1c5e9: ; 1c5e9 (7:45e9) INCROM $1c5ff, $1c610 Func_1c610: ; 1c610 (7:4610) - INCROM $1c610, $1c6f8 + INCROM $1c610, $1c665 + +Func_1c665: ; 1c665 (7:4665) + INCROM $1c665, $1c6e3 + +Func_1c6e3: ; 1c6e3 (7:46e3) + push hl + push bc + ld a, [$d3aa] + ld l, $02 + call Func_39ad + ld a, [hli] + ld b, a + ld c, [hl] + ld a, $40 + call SetPermissionOfMapPosition + pop bc + pop hl + ret Func_1c6f8: ; 1c6f8 (7:46f8) INCROM $1c6f8, $1c719 diff --git a/src/engine/bank20.asm b/src/engine/bank20.asm index 1502ea4..0086f96 100644 --- a/src/engine/bank20.asm +++ b/src/engine/bank20.asm @@ -31,7 +31,7 @@ Func_80077: ; 80077 (20:4077) inc hl ld [hl], d call Func_803b9 - ld a, [wd4c6] + ld a, [wTempPointerBank] ld [wd23d], a ld de, wd23e ld bc, $0006 @@ -58,10 +58,10 @@ Func_800bd: ; 800bd (20:40bd) push hl push bc push de - ld a, [wd4c4] + ld a, [wTempPointer] add $05 ld e, a - ld a, [wd4c5] + ld a, [wTempPointer + 1] adc $00 ld d, a ld b, $c0 @@ -298,12 +298,12 @@ GetMapDataPointer: ; 8020f (20:420f) Func_80229: ; 80229 (20:4229) ld a, [hli] - ld [wd4c4], a + ld [wTempPointer], a ld a, [hli] - ld [wd4c5], a + ld [wTempPointer + 1], a ld a, [hli] add $20 - ld [wd4c6], a + ld [wTempPointerBank], a ret ; 0x80238 @@ -342,7 +342,7 @@ asm_8027c ld e, [hl] inc hl ld d, [hl] - ld hl, wd4c4 + ld hl, wTempPointer ld a, [hli] ld h, [hl] ld l, a diff --git a/src/engine/home.asm b/src/engine/home.asm index 8545b3d..adcbabd 100644 --- a/src/engine/home.asm +++ b/src/engine/home.asm @@ -10865,7 +10865,7 @@ GetPermissionByteOfMapPosition: ; 3946 (0:3946) Func_395a: ; 395a (0:395a) ldh a, [hBankROM] push af - ld a, [wd4c6] + ld a, [wTempPointerBank] call BankswitchROM call CopyGfxData pop af @@ -10934,6 +10934,9 @@ Func_39ad: ; 39ad (0:39ad) pop bc ret +; Finds the index on wd34a table of the npc in wTempNPC +; returns it in a and puts it into wd3aa +; c flag set if no npc found Func_39c3: ; 39c3 (0:39c3) push hl push bc @@ -10944,21 +10947,21 @@ Func_39c3: ; 39c3 (0:39c3) ld c, $8 ld de, $000c ld hl, wd34a - ld a, [wd3ab] -.asm_39d6 + ld a, [wTempNPC] +.findNPCLoop cp [hl] - jr z, .asm_39e1 + jr z, .foundNPCMatch add hl, de inc b dec c - jr nz, .asm_39d6 + jr nz, .findNPCLoop scf - jr z, .asm_39e6 -.asm_39e1 + jr z, .exit +.foundNPCMatch ld a, b ld [wd3aa], a or a -.asm_39e6 +.exit pop de pop bc pop hl @@ -11059,7 +11062,7 @@ Func_3a5e: ; 3a5e (0:3a5e) ldh a, [hBankROM] push af ld l, $4 - call Func_3abd + call GetMapScriptPointer jr nc, .asm_3ab3 ld a, BANK(Func_c653) call BankswitchROM @@ -11113,7 +11116,10 @@ Func_3a5e: ; 3a5e (0:3a5e) call $49c2 ret -Func_3abd: ; 3abd (0:3abd) +; returns a map script pointer in hl given +; current map in wCurMap and which sub-script in l +; sets c if pointer is found +GetMapScriptPointer: ; 3abd (0:3abd) push bc push hl ld a, [wCurMap] @@ -11321,7 +11327,7 @@ ResetDoFrameFunction: ; 3bdb (0:3bdb) Func_3be4: ; 3be4 (0:3be4) ldh a, [hBankROM] push af - ld a, [wd4c6] + ld a, [wTempPointerBank] call BankswitchROM call Func_08de pop af @@ -11329,16 +11335,16 @@ Func_3be4: ; 3be4 (0:3be4) ret ; 0x3bf5 -; Copies bc bytes from [wd4c4] to de +; Copies bc bytes from [wTempPointer] to de CopyBankedDataToDE: ; 3bf5 (0:3bf5) ldh a, [hBankROM] push af push hl - ld a, [wd4c6] + ld a, [wTempPointerBank] call BankswitchROM - ld a, [wd4c4] + ld a, [wTempPointer] ld l, a - ld a, [wd4c5] + ld a, [wTempPointer + 1] ld h, a call CopyDataHLtoDE_SaveRegisters pop hl @@ -11635,11 +11641,11 @@ Func_3d72: ; 3d72 (0:3d72) xor a jr .asm_3da1 .asm_3d84 - ld a, [wd4c4] + ld a, [wTempPointer] ld l, a - ld a, [wd4c5] + ld a, [wTempPointer + 1] ld h, a - ld a, [wd4c6] + ld a, [wTempPointerBank] call BankswitchROM ld a, [hli] push af @@ -11670,7 +11676,7 @@ Func_3d72: ; 3d72 (0:3d72) call BankswitchROM ret -Func_3db7: ; 3db7 (0:3db7) +GetFirstSpriteAnimBufferProperty: ; 3db7 (0:3db7) push bc ld c, SPRITE_ANIM_FIELD_00 call GetSpriteAnimBufferProperty |