summaryrefslogtreecommitdiff
path: root/src/engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/bank03.asm264
-rw-r--r--src/engine/bank04.asm106
-rw-r--r--src/engine/bank07.asm104
-rw-r--r--src/engine/bank20.asm14
-rw-r--r--src/engine/home.asm44
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