summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPokeglitch <39797359+Pokeglitch@users.noreply.github.com>2018-06-18 21:32:52 -0400
committerGitHub <noreply@github.com>2018-06-18 21:32:52 -0400
commit61f84aa25409bbdfa7a7c95cc831977cd8462ae4 (patch)
tree0382b21830580d39759cba42a7073dee9c734fec
parentf25d7c2299513b7ec77738a4625d4e70dcfbbb1c (diff)
parenta6c1d2d45853214119b90b9918636508451a269f (diff)
Merge pull request #22 from Pokeglitch/master
More Bank 03 Routines
-rw-r--r--constants/map_data_constants.asm2
-rw-r--r--constants/move_constants.asm3
-rwxr-xr-xconstants/music_constants.asm2
-rw-r--r--constants/pokemon_data_constants.asm5
-rwxr-xr-xconstants/script_constants.asm11
-rw-r--r--constants/wram_constants.asm17
-rw-r--r--data/predef_pointers.inc20
-rwxr-xr-xengine/bcd.asm55
-rwxr-xr-xengine/events/field_moves.asm541
-rwxr-xr-xengine/events/overworld.asm103
-rwxr-xr-xengine/items/inventory.asm48
-rwxr-xr-xengine/items/item_effects.asm79
-rwxr-xr-xengine/overworld/spawn_points.asm5
-rwxr-xr-xengine/pokemon/health.asm358
-rw-r--r--home/copy.asm6
-rwxr-xr-xhome/items.asm2
-rw-r--r--home/menu.asm2
-rw-r--r--home/misc_32c8.asm2
-rwxr-xr-xhome/music.asm26
-rw-r--r--home/names.asm17
-rw-r--r--macros.asm2
-rwxr-xr-xmacros/queue.asm17
-rwxr-xr-xmacros/scripts.asm14
-rw-r--r--macros/text.asm10
-rw-r--r--shim.sym20
-rw-r--r--wram.asm82
26 files changed, 1285 insertions, 164 deletions
diff --git a/constants/map_data_constants.asm b/constants/map_data_constants.asm
index ac9908a..e711e1d 100644
--- a/constants/map_data_constants.asm
+++ b/constants/map_data_constants.asm
@@ -12,5 +12,7 @@
const_value = -1
const SPAWN_N_A
+NUM_SPAWNS EQU 18
+
; size of each spawn point data
SPAWN_POINT_SIZE EQU 4 \ No newline at end of file
diff --git a/constants/move_constants.asm b/constants/move_constants.asm
index b7daf0e..4c26c04 100644
--- a/constants/move_constants.asm
+++ b/constants/move_constants.asm
@@ -294,3 +294,6 @@ NUM_ATTACKS EQU const_value + -1
const BATTLEANIM_WOBBLE
const BATTLEANIM_SHAKE
const BATTLEANIM_HIT_CONFUSION
+
+
+MOVE_DATA_SIZE EQU 7
diff --git a/constants/music_constants.asm b/constants/music_constants.asm
index 5009983..c304fbb 100755
--- a/constants/music_constants.asm
+++ b/constants/music_constants.asm
@@ -14,4 +14,6 @@
const MUSIC_VICTORY_TRAINER ; 0B
const MUSIC_EVOLUTION ; 0C
+MUSIC_SURF EQU $62
+
SE_SELECT EQU 5
diff --git a/constants/pokemon_data_constants.asm b/constants/pokemon_data_constants.asm
index 0b00f47..e9ed0c1 100644
--- a/constants/pokemon_data_constants.asm
+++ b/constants/pokemon_data_constants.asm
@@ -130,3 +130,8 @@ WATER_WILDDATA_LENGTH EQU (NUM_WATERMON * 2 + 1) * 1 + 2
PP_UP_MASK EQU %11000000
PP_UP_ONE EQU %01000000
PP_MASK EQU %00111111
+
+; HP
+ENEMY_HP_BAR EQU 0
+BATTLE_HP_BAR EQU 1
+POKEMON_MENU_HP_BAR EQU 2
diff --git a/constants/script_constants.asm b/constants/script_constants.asm
index 3aa19b5..15a08c0 100755
--- a/constants/script_constants.asm
+++ b/constants/script_constants.asm
@@ -5,11 +5,14 @@
const SCRIPT_ID_01 ; 01
const SCRIPT_ID_02 ; 02
const SCRIPT_ID_03 ; 03
+ const SCRIPT_ID_04 ; 04
+ const SCRIPT_ID_05 ; 05
; Flags
-SCRIPT_FINISHED EQU 7
+SCRIPT_FINISHED_F EQU 7
; Masks/Return Values
-SCRIPT_FINISHED_MASK = 1 << SCRIPT_FINISHED
-SCRIPT_SUCCESS EQU SCRIPT_FINISHED_MASK | $f
-SCRIPT_FAIL EQU SCRIPT_FINISHED_MASK | 0 \ No newline at end of file
+SCRIPT_FINISHED_MASK EQU 1 << SCRIPT_FINISHED_F
+SCRIPT_SUCCESS EQU $f
+SCRIPT_FAIL EQU 0
+
diff --git a/constants/wram_constants.asm b/constants/wram_constants.asm
index a5e3044..c530a8b 100644
--- a/constants/wram_constants.asm
+++ b/constants/wram_constants.asm
@@ -5,4 +5,19 @@
const UP ; 1
const LEFT ; 2
const RIGHT ; 3
-NUM_DIRECTIONS EQU const_value \ No newline at end of file
+NUM_DIRECTIONS EQU const_value
+
+; wMonType:: ; cb5a
+ const_def
+ const PARTYMON ; 0
+ const OTPARTYMON ; 1
+ const BOXMON ; 2
+ const TEMPMON ; 3
+ const WILDMON ; 4
+
+; wPlayerState:: ; d95d
+PLAYER_NORMAL EQU 0
+PLAYER_BIKE EQU 1
+PLAYER_SKATE EQU 2
+PLAYER_SURF EQU 4
+PLAYER_SURF_PIKA EQU 8
diff --git a/data/predef_pointers.inc b/data/predef_pointers.inc
index 2463d3f..3ee6205 100644
--- a/data/predef_pointers.inc
+++ b/data/predef_pointers.inc
@@ -16,18 +16,18 @@ PredefPointers:: ; 1:62d3
add_predef Function6713
add_predef Function66b1
add_predef Function4031
- add_predef Functionce10
- add_predef Functioncd6f
- add_predef Functioncde3
- add_predef Functioncde3_2 ; 8
- add_predef Functioncde3_3
- add_predef Functioncdf9
- add_predef Functionce10_2
+ add_predef GetItemAmount
+ add_predef HealParty
+ add_predef AddBCD
+ dba AddBCD ; 8
+ dba AddBCD
+ add_predef SubBCD
+ dba GetItemAmount
add_predef SmallFarFlagAction
GiveItemPredef::
dbw 3, GiveItem
- add_predef Functionce3c
- add_predef Functionda28
+ add_predef ComputeHPBarPixels
+ add_predef FillPP
add_predef Functiond886 ; 10
add_predef Functionda4f
add_predef Functiondac8
@@ -35,7 +35,7 @@ GiveItemPredef::
add_predef Functiondc16
add_predef Functiondd5c
add_predef Functionde79
- add_predef Functionce7c
+ add_predef UpdateHPBar
add_predef Functiondf7d ; 18
add_predef Functiondf91
add_predef Function1128f
diff --git a/engine/bcd.asm b/engine/bcd.asm
new file mode 100755
index 0000000..020dc64
--- /dev/null
+++ b/engine/bcd.asm
@@ -0,0 +1,55 @@
+INCLUDE "constants.asm"
+
+SECTION "BCD", ROMX[$4de3], BANK[$03]
+
+AddBCD: ; 03:4de3
+ and a
+ ld b, c
+.add
+ ld a, [de]
+ adc [hl]
+ daa
+ ld [de], a
+ dec de
+ dec hl
+ dec c
+ jr nz, .add
+ jr nc, .done
+
+ ld a, $99
+ inc de
+
+.fill
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .fill
+
+.done
+ ret
+
+
+SubBCD: ; 03:4df9
+ and a
+ ld b, c
+.sub
+ ld a, [de]
+ sbc [hl]
+ daa
+ ld [de], a
+ dec de
+ dec hl
+ dec c
+ jr nz, .sub
+ jr nc, .done
+ ld a, 0
+ inc de
+
+.fill
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .fill
+ scf
+.done
+ ret
diff --git a/engine/events/field_moves.asm b/engine/events/field_moves.asm
new file mode 100755
index 0000000..49729d2
--- /dev/null
+++ b/engine/events/field_moves.asm
@@ -0,0 +1,541 @@
+INCLUDE "constants.asm"
+
+; TODO - need to constantize tile ids, movements
+
+SECTION "Field Moves", ROMX[$4fab], BANK[$03]
+
+CutFunction: ; 03:4fab
+ call .ResetScriptID
+.next
+ call .ExecScript
+ jr nc, .next
+ ld [wFieldMoveSucceeded], a
+ ret
+.ResetScriptID
+ xor a
+ ld [wFieldMoveScriptID], a
+ ret
+.ExecScript
+ ld a, [wFieldMoveScriptID]
+ ld hl, .CutScriptTable
+ jp CallJumptable
+
+.CutScriptTable ; 03:4fc5
+ init_script_table
+ add_script TryCut
+ add_script CheckCuttableBlock
+ add_script CheckCuttableTile
+ add_script DoCut
+ add_script DoCut2
+ add_script FailCut
+
+TryCut: ; 03:4fd1
+ call GetMapEnvironment
+ cp ROUTE
+ jr z, .success
+ cp TOWN
+ jr z, .success
+ set_script FailCut
+ xor a
+ ret
+.success
+ set_script CheckCuttableBlock
+ xor a
+ ret
+
+CheckCuttableBlock: ; 03:4fea
+ call GetFacingTileCoord
+ cp $80
+ jr nz, .fail
+ call GetBlockLocation
+ ld a, l
+ ld [wMapBlocksAddress], a
+ ld a, h
+ ld [wMapBlocksAddress + 1], a
+ ld a, [hl]
+ call GetCutReplacementBlock
+ jr nc, .fail
+ dec hl
+ ld a, [hl]
+ ld [wReplacementBlock], a
+ set_script DoCut2
+ xor a
+ ret
+.fail
+ set_script CheckCuttableTile
+ xor a
+ ret
+
+GetCutReplacementBlock: ; 03:5015
+ ld c, a
+ ld hl, CutReplacementBlocks
+.loop
+ ld a, [hli]
+ cp -1
+ ret z
+ inc hl
+ cp c
+ jr nz, .loop
+ scf
+ ret
+
+CutReplacementBlocks: ; 03:5023
+; replacement block, facing block
+ db $30, $25
+ db $31, $2A
+ db $32, $34
+ db $33, $35
+ db -1
+
+CheckCuttableTile: ; 03:502c
+ call GetFacingTileCoord
+ call IsCuttableTile
+ jr nc, .fail
+ call GetBlockLocation
+ ld a, [hl]
+ cp $3b
+ jr nz, .fail
+ ld a, l
+ ld [wMapBlocksAddress], a
+ ld a, h
+ ld [wMapBlocksAddress + 1], a
+ ld a, $04
+ ld [wReplacementBlock], a
+ set_script DoCut
+ xor a
+ ret
+.fail
+ set_script FailCut
+ xor a
+ ret
+
+IsCuttableTile: ; 03:5057
+ ld hl, CuttableTiles
+ ld c, a
+.loop
+ ld a, [hli]
+ cp -1
+ ret z
+ cp c
+ jr nz, .loop
+ scf
+ ret
+
+CuttableTiles: ; 03:5064
+ db $81
+ db $82
+ db $8A
+ db $8B
+ db -1
+
+FailCut: ; 03:5069
+ ld hl, Text_CantUseCutHere
+ call MenuTextBoxBackup
+ scf
+ ld a, SCRIPT_FAIL
+ ret
+
+Text_CantUseCutHere: ; 03:5073
+ text "ここでは つかえません"
+ prompt
+
+DoCut:
+DoCut2: ; 03:5080
+ far_queue CutScript
+ scf
+ ld a, SCRIPT_SUCCESS
+ ret
+
+CutScript: ; 03:508C
+ call RefreshScreen
+ ld hl, wPartyMonNicknames
+ ld a, BOXMON
+ ld [wMonType], a
+ ld a, [wWhichPokemon]
+ call GetNick
+ call CopyStringToStringBuffer2
+ ld hl, Text_CutItDown
+ call MenuTextBoxBackup
+ ld de, MUSIC_SURF
+ call PlaySFX
+ ld hl, wMapBlocksAddress
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [wReplacementBlock]
+ ld [hl], a
+ call LoadMapPart
+ call UpdateSprites
+ call WaitBGMap
+ call Function1fea
+ scf
+ ret
+
+Text_CutItDown ; 03:50c4
+ text_from_ram wStringBuffer2
+ text " は "
+ line "くさかりを つかった!"
+ prompt
+
+SurfFunction: ; 03:50d8
+ call .ResetScriptID
+.next
+ call .ExecScript
+ jr nc, .next
+ ld [wFieldMoveSucceeded], a
+ ret
+.ResetScriptID
+ xor a
+ ld [wFieldMoveScriptID], a
+ ret
+.ExecScript
+ ld a, [wFieldMoveScriptID]
+ ld hl, .SurfScriptTable
+ jp CallJumptable
+
+.SurfScriptTable: ; 03:50f2
+ init_script_table
+ add_script TrySurf
+ add_script DoSurf
+ add_script FailSurf
+
+TrySurf: ; 03:50f8
+ call GetFacingTileCoord
+ and $f0
+ cp $20
+ jr z, .success
+ cp $40
+ jr z, .success
+ set_script FailSurf
+ xor a
+ ret
+.success
+ set_script DoSurf
+ xor a
+ ret
+
+DoSurf: ; 03:5113
+ queue_ba SurfScript
+ ld a, -1
+ ld [wFieldMoveScriptID], a
+ scf
+ ld a, SCRIPT_SUCCESS
+ ret
+
+FailSurf: ; 03:5124
+ ld hl, Text_CantSurfHere
+ call MenuTextBoxBackup
+ ld a, -1
+ ld [wFieldMoveScriptID], a
+ scf
+ ld a, SCRIPT_FAIL
+ ret
+
+Text_CantSurfHere: ; 03:5133
+ text "ここでは のることが"
+ next "できません"
+ prompt
+
+SurfScript: ; 03:5145
+ call RefreshScreen
+ ld hl, wPartyMonNicknames
+ ld a, BOXMON
+ ld [wMonType], a
+ ld a, [wWhichPokemon]
+ call GetNick
+ call CopyStringToStringBuffer2
+ ld hl, Text_UsedSurf
+ call MenuTextBoxBackup
+ ld a, PLAYER_SURF
+ ld [wPlayerState], a
+ call Function0d02
+ call PlayMapMusic
+ call MovePlayerIntoWater
+ call Function1fea
+ ret
+
+Text_UsedSurf: ; 03:5171
+ text_from_ram wStringBuffer2
+ text " は "
+ line "@"
+ text_from_ram wPlayerName
+ text "を のせた!"
+ prompt
+
+MovePlayerIntoWater: ; 03:5185
+ call InitMovementBuffer
+ call .get_movement_direction
+ call AppendToMovementBuffer
+ ld a, $32
+ call AppendToMovementBuffer
+ ld a, 0
+ ld hl, wMovementBuffer
+ call LoadMovementDataPointer
+.get_movement_direction
+ ld a, [wPlayerWalking]
+ srl a
+ srl a
+ ld e, a
+ ld d, $00
+ ld hl, SurfMovementDirections
+ add hl, de
+ ld a, [hl]
+ ret
+
+; Direction to move player, mapped to facing direction
+SurfMovementDirections: ; 03:51ab
+ db 4, 5, 6, 7
+
+
+FlyFunction: ; 03:51af
+ call .ResetScriptID
+.next
+ call .ExecScript
+ jr nc, .next
+ ld [wFieldMoveSucceeded], a
+ ret
+.ResetScriptID
+ xor a
+ ld [wFieldMoveScriptID], a
+ ret
+.ExecScript
+ ld a, [wFieldMoveScriptID]
+ ld hl, .FlyScriptTable
+ jp CallJumptable
+
+.FlyScriptTable: ; 03:51c9
+ init_script_table
+ add_script TryFly
+ add_script ShowFlyMap
+ add_script DoFly
+ add_script FailFly
+
+TryFly: ; 03:51d1
+ call GetMapEnvironment
+ cp TOWN
+ jr z, .success
+ cp ROUTE
+ jr z, .success
+ set_script FailFly
+ xor a
+ ret
+.success
+ set_script ShowFlyMap
+ xor a
+ ret
+
+ShowFlyMap: ; 03:51ea
+ call LoadStandardMenuHeader
+ call ClearSprites
+ callab FlyMap
+ call ClearPalettes
+ call GetMemSGBLayout
+ call ExitMenu
+ ld a, [wFlyDestination]
+ cp -1
+ jr z, .dont_fly
+ cp NUM_SPAWNS
+ jr nc, .dont_fly
+ set_script DoFly
+ xor a
+ ret
+.dont_fly
+ call UpdateTimePals
+ ld a, -1
+ ld [wFieldMoveScriptID], a
+ scf
+ ld a, SCRIPT_FAIL
+ ret
+
+DoFly: ; 03:521f
+ ld a, [wFlyDestination]
+ inc a
+ ld [wDefaultSpawnPoint], a
+ queue_ba FlyScript
+ ld a, -1
+ ld [wFieldMoveScriptID], a
+ scf
+ ld a, SCRIPT_SUCCESS
+ ret
+
+FailFly: ; 03:5237
+ ld hl, Text_CantUseFlyHere
+ call MenuTextBoxBackup
+ ld a, -1
+ ld [wFieldMoveScriptID], a
+ scf
+ ld a, SCRIPT_FAIL
+ ret
+
+Text_CantUseFlyHere: ; 03:5246
+ text "ここでは つかえません!"
+ prompt
+
+FlyScript: ; 03:5254
+ ld a, MAPSETUP_TELEPORT
+ ldh [hMapEntryMethod], a
+ jpab Functionfcc24
+
+
+DigFunction: ; 03:5260
+ call .ResetScriptID
+.next
+ ld a, [wFieldMoveScriptID]
+ bit SCRIPT_FINISHED_F, a
+ jr nz, .finish
+ ld hl, .DigScriptTable
+ call CallJumptable
+ jr .next
+
+; Finish by returning only the low nibble
+.finish
+ and $FF - SCRIPT_FINISHED_MASK
+ ld [wFieldMoveSucceeded], a
+ ret
+
+.ResetScriptID
+ xor a
+ ld [wFieldMoveScriptID], a
+ ret
+
+.DigScriptTable: ; 03:527D
+ init_script_table
+ add_script CheckCanDig
+ add_script DoDig
+ add_script FailDig
+
+CheckCanDig: ; 03:5283
+ call GetMapEnvironment
+ cp INDOOR
+ jr z, .success
+ cp CAVE
+ jr z, .success
+ set_script FailDig
+ ret
+.success
+ set_script DoDig
+ ret
+
+DoDig: ; 03:529a
+ queue_ab DigScript
+ ld a, SCRIPT_FINISHED_MASK | SCRIPT_SUCCESS
+ ld [wFieldMoveScriptID], a
+ ret
+
+FailDig: ; 03:52a8
+ ld hl, Text_CantUseDigHere
+ call MenuTextBoxBackup
+ ld a, SCRIPT_FINISHED_MASK | SCRIPT_FAIL
+ ld [wFieldMoveScriptID], a
+ ret
+
+Text_CantUseDigHere: ; 03:52b4
+ text "ここでは つかえません!"
+ prompt
+
+DigScript: ; 03:52c2
+ ld hl, wDigWarpNumber
+ ld de, wNextWarp
+ ld bc, 3
+ call CopyBytes
+ ld a, MAPSETUP_WARP
+ ldh [hMapEntryMethod], a
+ jpab Functionfcc24
+
+EmptyFunctiond2da: ; 03:52da
+ ret
+
+TeleportFunction: ; 03:52db
+ xor a
+ ld [wFieldMoveScriptID], a
+.next
+ ld a, [wFieldMoveScriptID]
+ bit SCRIPT_FINISHED_F, a
+ jr nz, .finish
+ ld hl, .TeleportScriptTable
+ call CallJumptable
+ jr .next
+
+; Finish by returning only the low nibble
+.finish
+ and $FF - SCRIPT_FINISHED_MASK
+ ld [wFieldMoveSucceeded], a
+ ret
+
+.TeleportScriptTable
+ init_script_table
+ add_script TryTeleport
+ add_script DoTeleport
+ add_script FailTeleport
+ add_script CheckIfSpawnPoint
+
+TryTeleport: ; 03:52fc
+ call GetMapEnvironment
+ cp TOWN
+ jr z, .success
+ cp ROUTE
+ jr z, .success
+ set_script FailTeleport
+ ret
+.success
+ set_script CheckIfSpawnPoint
+ ret
+
+CheckIfSpawnPoint ; 03:5313
+ ld a, [wLastSpawnMapGroup]
+ ld d, a
+ ld a, [wLastSpawnMapNumber]
+ ld e, a
+ callab IsSpawnPoint
+ jr c, .not_spawn
+ ld hl, Text_CantFindDestination
+ call MenuTextBoxBackup
+ ld a, SCRIPT_FINISHED_MASK | SCRIPT_FAIL
+ ld [wFieldMoveScriptID], a
+ ret
+.not_spawn
+ ld a, c
+ ld [wDefaultSpawnPoint], a
+ set_script DoTeleport
+ ret
+
+Text_CantFindDestination: ; 03:533B
+ text "とびさきが みつかりません"
+ para ""
+ done
+
+DoTeleport: ; 03:534b
+ queue_ba TeleportScript
+ ld a, SCRIPT_FINISHED_MASK | SCRIPT_SUCCESS
+ ld [wFieldMoveScriptID], a
+ ret
+
+FailTeleport: ; 03:5359
+ ld hl, Text_CantUseTeleportHere
+ call MenuTextBoxBackup
+ ld a, SCRIPT_FINISHED_MASK | SCRIPT_FAIL
+ ld [wFieldMoveScriptID], a
+ scf
+ ret
+
+Text_CantUseTeleportHere: ; 03:5366
+ text "ここでは つかえません!"
+ para ""
+ done
+
+TeleportScript: ; 03:5375
+ call RefreshScreen
+ ld hl, Text_ReturnToLastMonCenter
+ call MenuTextBox
+ ld c, 60
+ call DelayFrames
+ call CloseWindow
+ call Function1fea
+ ld a, MAPSETUP_TELEPORT
+ ldh [hMapEntryMethod], a
+ jpab Functionfcc24
+
+Text_ReturnToLastMonCenter: ; 03:5395
+ text "さいごに たちよった"
+ line "#センターにもどります"
+ done
diff --git a/engine/events/overworld.asm b/engine/events/overworld.asm
deleted file mode 100755
index a5b4553..0000000
--- a/engine/events/overworld.asm
+++ /dev/null
@@ -1,103 +0,0 @@
-INCLUDE "constants.asm"
-
-SECTION "TeleportFunction", ROMX[$52db], BANK[$03]
-
-; Sets wFieldMoveSucceeded to $f if successful, $0 if not
-TeleportFunction: ; 03:52db
- xor a
- ld [wFieldMoveScriptID], a
-.loop
- ld a, [wFieldMoveScriptID]
- bit SCRIPT_FINISHED, a
- jr nz, .finish
- ld hl, .JumpTable
- call CallJumptable
- jr .loop
-
-; Finish by returning only the low nibble
-.finish
- and $FF - SCRIPT_FINISHED_MASK
- ld [wFieldMoveSucceeded], a
- ret
-
-.JumpTable
- dw .TryTeleport
- dw .DoTeleport
- dw .FailTeleport
- dw .CheckIfSpawnPoint
-
-.TryTeleport: ; 03:52fc
- call GetMapEnvironment
- cp TOWN
- jr z, .success
- cp ROUTE
- jr z, .success
- ld a, SCRIPT_ID_02
- ld [wFieldMoveScriptID], a
- ret
-.success
- ld a, SCRIPT_ID_03
- ld [wFieldMoveScriptID], a
- ret
-
-.CheckIfSpawnPoint ; 03:5313
- ld a, [wLastSpawnMapGroup]
- ld d, a
- ld a, [wLastSpawnMapNumber]
- ld e, a
- callab IsSpawnPoint
- jr c, .not_spawn
- ld hl, .Text_CantFindDestination
- call MenuTextBoxBackup
- ld a, SCRIPT_FAIL
- ld [wFieldMoveScriptID], a
- ret
-.not_spawn
- ld a, c
- ld [wDefaultSpawnpoint], a
- ld a, SCRIPT_ID_01
- ld [wFieldMoveScriptID], a
- ret
-
-.Text_CantFindDestination: ; 03:533B
- text "とびさきが みつかりません"
- para
- done
-
-.DoTeleport: ; 03:534b
- ldh a, [hROMBank]
- ld hl, .TeleportScript
- call QueueScript
- ld a, SCRIPT_SUCCESS
- ld [wFieldMoveScriptID], a
- ret
-
-.FailTeleport: ; 03:5359
- ld hl, .Text_CantUseHere
- call MenuTextBoxBackup
- ld a, SCRIPT_FAIL
- ld [wFieldMoveScriptID], a
- scf
- ret
-
-.Text_CantUseHere: ; 03:5366
- text "ここでは つかえません!"
- para
- done
-
-.TeleportScript: ; 03:5375
- call RefreshScreen
- ld hl, .Text_ReturnToLastMonCenter
- call MenuTextBox
- ld c, 60
- call DelayFrames
- call CloseWindow
- call Function1fea
- ld a, MAPSETUP_TELEPORT
- ldh [hMapEntryMethod], a
- jpab Functionfcc24
-
-.Text_ReturnToLastMonCenter: ; 03:5395
- text "さいごに たちよった"
- line "#センターにもどります"
- done \ No newline at end of file
diff --git a/engine/items/inventory.asm b/engine/items/inventory.asm
index 9c5a1ec..9524d70 100755
--- a/engine/items/inventory.asm
+++ b/engine/items/inventory.asm
@@ -1,6 +1,6 @@
INCLUDE "constants.asm"
-SECTION "AddItemToInventory_", ROMX[$4AA1], BANK[$03]
+SECTION "Inventory", ROMX[$4AA1], BANK[$03]
_ReceiveItem: ; 03:4AA1
call DoesHLEqualwNumBagItems
@@ -587,6 +587,52 @@ GetNumberedTMHM: ; 03:4D1A
.not_machine
and a
ret
+
+SECTION "GetItemAmount", ROMX[$4e10], BANK[$03]
+
+; Returns carry if user has the item
+; and the amount in b
+GetItemAmount: ; 03:4e10
+ call CheckAmountInItemPocket
+ ret c
+ call CheckAmountInKeyItems
+ ret c
+ ld b, 0
+ and a
+ ret
+
+; Returns the amount of item b in b
+CheckAmountInItemPocket: ; 03:4E1C
+ ld hl, wItems
+.loop
+ inc hl
+ ld a, [hli]
+ cp -1
+ ret z
+ cp b
+ jr nz, .loop
+
+ ld a, [hl]
+ ld b, a
+ scf
+ ret
+
+; Returns the amount of item b in b
+CheckAmountInKeyItems: ; 03:4E2B
+ ld hl, wNumKeyItems
+ ld a, [hli]
+ and a
+ ret z
+
+.loop
+ ld a, [hli]
+ cp -1
+ ret z
+ cp b
+ jr nz, .loop
+ ld b, 1
+ scf
+ ret
SECTION "_CheckTossableItem", ROMX[$53AD], BANK[$03]
diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm
new file mode 100755
index 0000000..d2e9545
--- /dev/null
+++ b/engine/items/item_effects.asm
@@ -0,0 +1,79 @@
+INCLUDE "constants.asm"
+
+SECTION "ApplyPPUp", ROMX[$78f6], BANK[$03]
+
+ApplyPPUp: ; 03:78f6
+ ld a, MON_MOVES
+ call GetPartyParamLocation
+ push hl
+ ld de, wStringBuffer1
+ predef FillPP
+ pop hl
+ ld c, MON_PP - MON_MOVES
+ ld b, 0
+ add hl, bc
+ ld de, wStringBuffer1 + 1
+ ld b, 0
+.loop
+ inc b
+ ld a, b
+ cp NUM_MOVES + 1
+ ret z
+ ld a, [wce37]
+ dec a
+ jr nz, .use
+ ld a, [wMenuCursorY]
+ inc a
+ cp b
+ jr nz, .skip
+.use
+ ld a, [hl]
+ and PP_UP_MASK
+ call nz, ComputeMaxPP
+.skip
+ inc hl
+ inc de
+ jr .loop
+
+ComputeMaxPP: ; 03:792B
+ push bc
+ ; Divide the base PP by 5.
+ ld a, [de]
+ ldh [hDividend + 3], a
+ xor a
+ ldh [hDividend], a
+ ldh [hDividend + 1], a
+ ldh [hDividend + 2], a
+ ld a, 5
+ ldh [hDivisor], a
+ ld b, 4
+ call Divide
+ ; Get the number of PP, which are bits 6 and 7 of the PP value stored in RAM.
+ ld a, [hl]
+ ld b, a
+ swap a
+ and $f
+ srl a
+ srl a
+ ld c, a
+.loop
+ ; Normally, a move with 40 PP would have 64 PP with three PP Ups.
+ ; Since this would overflow into bit 6, we prevent that from happening
+ ; by decreasing the extra amount of PP each PP Up provides, resulting
+ ; in a maximum of 61.
+ ldh a, [hQuotient + 2]
+ cp $8
+ jr c, .okay
+ ld a, $7
+.okay
+ add b
+ ld b, a
+ ld a, [wce37]
+ dec a
+ jr z, .no_pp_up
+ dec c
+ jr nz, .loop
+.no_pp_up
+ ld [hl], b
+ pop bc
+ ret
diff --git a/engine/overworld/spawn_points.asm b/engine/overworld/spawn_points.asm
index 81b04b0..c159a21 100755
--- a/engine/overworld/spawn_points.asm
+++ b/engine/overworld/spawn_points.asm
@@ -3,10 +3,10 @@ INCLUDE "constants.asm"
SECTION "LoadSpawnPoint", ROMX[$4791], BANK[$03]
LoadSpawnPoint: ; 03:4791
-; loads the spawn point in wDefaultSpawnpoint
+; loads the spawn point in wDefaultSpawnPoint
push hl
push de
- ld a, [wDefaultSpawnpoint]
+ ld a, [wDefaultSpawnPoint]
and a
jr z, .skip
dec a
@@ -57,4 +57,3 @@ IsSpawnPoint: ; 03:47b6
.succeed
scf
ret
-
diff --git a/engine/pokemon/health.asm b/engine/pokemon/health.asm
new file mode 100755
index 0000000..2d81b8d
--- /dev/null
+++ b/engine/pokemon/health.asm
@@ -0,0 +1,358 @@
+INCLUDE "constants.asm"
+
+SECTION "HealParty", ROMX[$4d6f], BANK[$03]
+
+HealParty: ; 03:4d6f
+ ld hl, wPartySpecies
+ ld de, wPartyMons
+
+.party_loop
+ ld a, [hli]
+ cp -1
+ jr z, .party_done
+ push hl
+ push de
+
+; Clear the status
+ ld hl, MON_STATUS
+ add hl, de
+ xor a
+ ld [hli], a
+ ld [hl], a
+
+; Reset the PP
+ ld hl, MON_MOVES
+ add hl, de
+ ld b, NUM_MOVES
+
+.move_loop
+ push hl
+ push bc
+ ld a, [hl]
+ and a
+ jr z, .next_move
+ dec a
+ push hl
+ ld hl, Moves
+ ld bc, MOVE_DATA_SIZE
+ call AddNTimes
+ ld a, BANK(Moves)
+ call GetFarByte
+ pop hl
+ ld bc, MON_PP - MON_MOVES
+ add hl, bc
+ ld b, a
+ ld a, [hl]
+ and PP_UP_MASK
+ add b
+ ld [hl], a
+
+.next_move
+ pop bc
+ pop hl
+ inc hl
+ dec b
+ jr nz, .move_loop
+
+; Reset the HP
+ pop de
+ push de
+ ld hl, MON_MAXHP
+ add hl, de
+ ld b, h
+ ld c, l
+ dec bc
+ dec bc
+ ld a, [hli]
+ ld [bc], a
+ inc bc
+ ld a, [hl]
+ ld [bc], a
+ pop de
+ pop hl
+ push hl
+ ld hl, PARTYMON_STRUCT_LENGTH
+ add hl, de
+ ld d, h
+ ld e, l
+ pop hl
+ jr .party_loop
+
+.party_done
+ xor a
+ ld [wWhichPokemon], a
+ ld [wce37], a
+ ld a, [wPartyCount]
+ ld b, a
+
+.pp_up
+ push bc
+ call ApplyPPUp
+ pop bc
+ ld hl, wWhichPokemon
+ inc [hl]
+ dec b
+ jr nz, .pp_up
+ ret
+
+SECTION "HP Bar", ROMX[$4e3c], BANK[$03]
+
+ComputeHPBarPixels: ; 03:4e3c
+ push hl
+ xor a
+ ldh [hMultiplicand], a
+ ld a, b
+ ldh [hMultiplicand + 1], a
+ ld a, c
+ ldh [hMultiplicand + 2], a
+ ld a, HP_BAR_LENGTH_PX
+ ldh [hMultiplier], a
+ call Multiply
+ ; We need de to be under 256 because hDivisor is only 1 byte.
+ ld a, d
+ and a
+ jr z, .divide
+ ; divide de and hProduct by 4
+ srl d
+ rr e
+ srl d
+ rr e
+ ldh a, [hProduct + 2]
+ ld b, a
+ ldh a, [hProduct + 3]
+ srl b
+ rr a
+ srl b
+ rr a
+ ldh [hDividend + 3], a
+ ld a, b
+ ldh [hDividend + 2], a
+.divide
+ ld a, e
+ ldh [hDivisor], a
+ ld b, 4
+ call Divide
+ ldh a, [hQuotient + 2]
+ ld e, a
+ pop hl
+ and a
+ ret nz
+ ld e, 1
+ ret
+
+UpdateHPBar: ; 03:4e7c
+ ld a, [wHPBarOldHP]
+ ld c, a
+ ld a, [wHPBarOldHP + 1]
+ ld b, a
+ ld a, [wHPBarNewHP]
+ ld e, a
+ ld a, [wHPBarNewHP + 1]
+ ld d, a
+ push de
+ push bc
+ call UpdateHPBar_CalcHPDifference
+ ld a, e
+ ld [wHPBarHPDifference + 1], a
+ ld a, d
+ ld [wHPBarHPDifference], a
+ pop bc
+ pop de
+ call UpdateHPBar_CompareNewHPToOldHP
+ ret z
+ ld a, -1
+ jr c, .hp_decrease
+ ld a, 1
+.hp_decrease
+ ld [wHPBarDelta], a
+ ld a, [wHPBarNewHP]
+ ld e, a
+ ld a, [wHPBarNewHP + 1]
+ ld d, a
+.animate_hp_bar_loop
+ push de
+ ld a, [wHPBarOldHP]
+ ld c, a
+ ld a, [wHPBarOldHP + 1]
+ ld b, a
+ call UpdateHPBar_CompareNewHPToOldHP
+ jr z, .animate_hp_bar_done
+ jr nc, .hp_increase
+
+;hp_decrease
+ dec bc
+ ld a, c
+ ld [wHPBarNewHP], a
+ ld a, b
+ ld [wHPBarNewHP + 1], a
+ call UpdateHPBar_CalcOldNewHPBarPixels
+ ld a, e
+ sub d
+ jr .apply
+.hp_increase
+ inc bc
+ ld a, c
+ ld [wHPBarNewHP], a
+ ld a, b
+ ld [wHPBarNewHP + 1], a
+ call UpdateHPBar_CalcOldNewHPBarPixels
+ ld a, d
+ sub e
+.apply
+ call UpdateHPBar_PrintHPNumber
+ and a
+ jr z, .no_pixel_difference
+ call UpdateHPBar_AnimateHPBar
+.no_pixel_difference
+ ld a, [wHPBarNewHP]
+ ld [wHPBarOldHP], a
+ ld a, [wHPBarNewHP + 1]
+ ld [wHPBarOldHP + 1], a
+ pop de
+ jr .animate_hp_bar_loop
+.animate_hp_bar_done
+ pop de
+ ld a, e
+ ld [wHPBarOldHP], a
+ ld a, d
+ ld [wHPBarOldHP + 1], a
+ or e
+ jr z, .mon_fainted
+ call UpdateHPBar_CalcOldNewHPBarPixels
+ ld d, e
+.mon_fainted
+ call UpdateHPBar_PrintHPNumber
+ ld a, 1
+ call UpdateHPBar_AnimateHPBar
+ jp WaitBGMap
+
+; animates the HP bar going up or down for (a) ticks (two waiting frames each)
+; stops prematurely if bar is filled up
+; e: current health (in pixels) to start with
+UpdateHPBar_AnimateHPBar: ; 03:4F11
+ push hl
+
+.bar_animation_loop
+ push af
+ push de
+ ld d, HP_BAR_LENGTH
+ ld a, [wHPBarType]
+ and BATTLE_HP_BAR
+ ld b, a
+ call DrawBattleHPBar
+ ld c, 2
+ call DelayFrames
+ pop de
+ ld a, [wHPBarDelta]
+ add e
+ cp HP_BAR_LENGTH_PX + 1
+ jr nc, .bar_filled_up
+ ld e, a
+ pop af
+ dec a
+ jr nz, .bar_animation_loop
+ pop hl
+ ret
+.bar_filled_up
+ pop af
+ pop hl
+ ret
+
+; compares old HP and new HP and sets c and z flags accordingly
+UpdateHPBar_CompareNewHPToOldHP: ; 03:4F37
+ ld a, d
+ sub b
+ ret nz
+ ld a, e
+ sub c
+ ret
+
+; calcs HP difference between bc and de (into de)
+UpdateHPBar_CalcHPDifference: ; 03:4F3D
+ ld a, d
+ sub b
+ jr c, .old_hp_greater
+ jr z, .test_lower_byte
+.new_hp_greater
+ ld a, e
+ sub c
+ ld e, a
+ ld a, d
+ sbc b
+ ld d, a
+ ret
+.old_hp_greater
+ ld a, c
+ sub e
+ ld e, a
+ ld a, b
+ sbc d
+ ld d, a
+ ret
+.test_lower_byte
+ ld a, e
+ sub c
+ jr c, .old_hp_greater
+ jr nz, .new_hp_greater
+ ld de, 0
+ ret
+
+UpdateHPBar_PrintHPNumber: ; 03:4F5B
+ push af
+ push de
+ ld a, [wHPBarType]
+ and a
+ jr z, .done
+ ld a, [wHPBarOldHP]
+ ld [wHPBarTempHP + 1], a
+ ld a, [wHPBarOldHP + 1]
+ ld [wHPBarTempHP], a
+ push hl
+ ld de, SCREEN_WIDTH + 1
+ add hl, de
+ push hl
+ ld a, " "
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ pop hl
+ ld de, wHPBarTempHP
+ lb bc, 2, 3
+ call PrintNumber
+ call DelayFrame
+ pop hl
+.done
+ pop de
+ pop af
+ ret
+
+; calcs number of HP bar pixels for old and new HP value
+; d: new pixels
+; e: old pixels
+UpdateHPBar_CalcOldNewHPBarPixels: ; 03:4F8B
+ push hl
+ ld hl, wHPBarMaxHP
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+ ld c, a
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ push hl
+ push de
+ call ComputeHPBarPixels
+ ld a, e
+ pop de
+ pop bc
+ push af
+ call ComputeHPBarPixels
+ pop af
+ ld d, e
+ ld e, a
+ pop hl
+ ret
diff --git a/home/copy.asm b/home/copy.asm
index c916cbd..e5ba9cf 100644
--- a/home/copy.asm
+++ b/home/copy.asm
@@ -99,9 +99,9 @@ ReloadTilesFromBuffer:: ; 3361
ldh [hBGMapMode], a
ret
-CopyStringToCD31::
-; copies a string from [de] to [wcd31]
- ld hl, wcd31
+CopyStringToStringBuffer2::
+; copies a string from [de] to [wStringBuffer2]
+ ld hl, wStringBuffer2
; fallthrough
CopyString::
diff --git a/home/items.asm b/home/items.asm
index 46f510c..dd4e8d3 100755
--- a/home/items.asm
+++ b/home/items.asm
@@ -64,6 +64,6 @@ GiveItem::
call ReceiveItem
ret nc
call GetItemName
- call CopyStringToCD31
+ call CopyStringToStringBuffer2
scf
ret
diff --git a/home/menu.asm b/home/menu.asm
index 4c8e957..f84554c 100644
--- a/home/menu.asm
+++ b/home/menu.asm
@@ -92,7 +92,7 @@ CopyNameFromMenu::
call GetNthString
ld d, h
ld e, l
- call CopyStringToCD31
+ call CopyStringToStringBuffer2
pop bc
pop hl
ret
diff --git a/home/misc_32c8.asm b/home/misc_32c8.asm
index 3eabb12..8b423bb 100644
--- a/home/misc_32c8.asm
+++ b/home/misc_32c8.asm
@@ -7,7 +7,7 @@ SECTION "Unknown 32c8", ROM0[$328c]
endc
Function32c8::
- predef Functionce10
+ predef GetItemAmount
ld a, b
and a
ret
diff --git a/home/music.asm b/home/music.asm
new file mode 100755
index 0000000..8d908f0
--- /dev/null
+++ b/home/music.asm
@@ -0,0 +1,26 @@
+SECTION "PlayMapMusic", ROM0[$3de1]
+
+PlayMapMusic: ; 00:3de1
+ push hl
+ push de
+ push bc
+ push af
+ call GetMapMusic
+ ld a, [wMapMusic]
+ cp e
+ jr z, .dont_play
+ push de
+ ld de, 0
+ call PlayMusic
+ call DelayFrame
+ pop de
+ ld a, e
+ ld [wMapMusic], a
+ call PlayMusic
+
+.dont_play
+ pop af
+ pop bc
+ pop de
+ pop hl
+ ret
diff --git a/home/names.asm b/home/names.asm
index f0ee433..aacd285 100644
--- a/home/names.asm
+++ b/home/names.asm
@@ -243,3 +243,20 @@ Unreferenced_GetMoveName:: ; 00:37fc
ld de, wStringBuffer1
pop hl
ret
+
+SECTION "GetNick", ROM0[$3a97]
+
+GetNick: ; 00:3a97
+; Get nickname a from list hl.
+ push hl
+ push bc
+ call SkipNames
+ ld de, wStringBuffer1
+ push de
+ ld bc, MON_NAME_LENGTH
+ call CopyBytes
+ pop de
+ callab CorrectNickErrors
+ pop bc
+ pop hl
+ ret
diff --git a/macros.asm b/macros.asm
index a348650..8f8175d 100644
--- a/macros.asm
+++ b/macros.asm
@@ -9,3 +9,5 @@ INCLUDE "macros/farcall.asm"
INCLUDE "macros/text.asm"
INCLUDE "macros/wram.asm"
INCLUDE "macros/audio.asm"
+INCLUDE "macros/scripts.asm"
+INCLUDE "macros/queue.asm"
diff --git a/macros/queue.asm b/macros/queue.asm
new file mode 100755
index 0000000..c868dc8
--- /dev/null
+++ b/macros/queue.asm
@@ -0,0 +1,17 @@
+queue_ab: MACRO
+ ld hl, \1
+ ldh a, [hROMBank]
+ call QueueScript
+ENDM
+
+queue_ba: MACRO
+ ldh a, [hROMBank]
+ ld hl, \1
+ call QueueScript
+ENDM
+
+far_queue: MACRO
+ ld hl, \1
+ ld a, BANK(\1)
+ call QueueScript
+ENDM
diff --git a/macros/scripts.asm b/macros/scripts.asm
new file mode 100755
index 0000000..73ad461
--- /dev/null
+++ b/macros/scripts.asm
@@ -0,0 +1,14 @@
+init_script_table: MACRO
+script_id = 0
+ENDM
+
+add_script: MACRO
+ dw \1
+\1ScriptID = script_id
+script_id = script_id + 1
+ENDM
+
+set_script: MACRO
+ ld a, \1ScriptID
+ ld [wFieldMoveScriptID], a
+ENDM
diff --git a/macros/text.asm b/macros/text.asm
index fd88918..f95c300 100644
--- a/macros/text.asm
+++ b/macros/text.asm
@@ -1,21 +1,13 @@
text EQUS "db $00," ; Start writing text.
next EQUS "db \"<NEXT>\"," ; Move a line down.
line EQUS "db \"<LINE>\"," ; Start writing at the bottom line.
+para EQUS "db \"<PARA>\"," ; Start a new paragraph.
cont EQUS "db \"<CONT>\"," ; Scroll to the next line.
done EQUS "db \"<DONE>\"" ; End a text box.
prompt EQUS "db \"<PROMPT>\"" ; Prompt the player to end a text box (initiating some other event).
text_end EQUS "db $50" ; End control code for text processor
; different from @
-; Start a new paragraph
-para: MACRO
- if _NARG == 0
- db "<PARA>"
- else
- db "<PARA>", \1 ; Rest of text
- endc
-ENDM
-
; TODO: determine if these are in
; Pokedex text commands are only used with pokered.
; They are included for compatibility.
diff --git a/shim.sym b/shim.sym
index 50ef966..0d89369 100644
--- a/shim.sym
+++ b/shim.sym
@@ -5,6 +5,7 @@
00:3233 Function3233
00:323E Function323e
00:3240 Function3240
+00:3C43 GetPartyParamLocation
00:3CA8 InitSpriteAnimStruct
00:3D86 WaitSFX
00:3D87 WaitSFX.wait
@@ -14,8 +15,6 @@
00:3DB6 UpdateSoundNTimes
00:3DBE FadeToMapMusic
00:3DDC FadeToMapMusic.dontfade
-00:3DE1 PlayMapMusic
-00:3E00 PlayMapMusic.dontplay
00:3E05 SpecialMapMusic
00:3E14 SpecialMapMusic.state2
00:3E19 SpecialMapMusic.normal
@@ -37,6 +36,7 @@
01:6445 Function6445
01:66B1 Function66b1
01:6713 Function6713
+01:67d5 CorrectNickErrors
01:776E Function776e
02:4000 Function8000
@@ -48,6 +48,7 @@
02:43E8 Function83e8
02:45DF QueueFollowerFirstStep
02:462E Function862e
+02:46CB FlyMap
02:4786 Function8786
02:4856 DecompTownMapTilemap
02:48DA DecompTownMapTilemap.tilemap
@@ -61,19 +62,10 @@
03:4000 Functionc000
03:47D5 SpawnPoints
03:488D Tilesets
-03:4D6F Functioncd6f
-03:4DE3 Functioncde3
-03:4DE3 Functioncde3_2
-03:4DE3 Functioncde3_3
-03:4DF9 Functioncdf9
-03:4E10 Functionce10
-03:4E10 Functionce10_2
-03:4E3C Functionce3c
-03:4E7C Functionce7c
03:54E6 Functiond4e6
03:56E4 Functiond6e4
03:5886 Functiond886
-03:5A28 Functionda28
+03:5A28 FillPP
03:5A4F Functionda4f
03:5AC8 Functiondac8
03:5C16 Functiondc16
@@ -159,6 +151,7 @@
10:4AC7 Function40ac7
10:4B45 Function40b45
10:4B5C Function40b5c
+10:58BB Moves
10:5FA1 Function41fa1
10:61F8 Function421f8
10:6252 Function42252
@@ -468,13 +461,10 @@
3F:6755 PicTestMenu.loop
00:CB6F wPlayerStepDirection
-00:CE67 wPlayerName
01:D19E wItems
01:D258 wRivalName
-01:D264 wPlayerBikeSurfState
; The starting house's map script number is stored at d29a. Others are probably nearby.
01:D35F wOptions
01:D513 wWarpNumber
-01:D7D2 wPartyMonOT
01:DA3B wOTPartyMonOT
diff --git a/wram.asm b/wram.asm
index cc5092e..b196ac4 100644
--- a/wram.asm
+++ b/wram.asm
@@ -228,7 +228,10 @@ wCurSpecies:: db ; cb5b
wNamedObjectTypeBuffer:: db ; cb5c
SECTION "CB5E", WRAM0[$CB5E]
-wJumptableIndex:: ds 4
+wJumptableIndex:: db ; cb5e
+wFlyDestination:: db ; cb5f
+
+ ds 2
SECTION "CB62", WRAM0[$CB62]
@@ -331,7 +334,7 @@ wcc38::
wTitleSequenceOpeningType:: ; cc38
db
-wDefaultSpawnpoint:: ; cc39
+wDefaultSpawnPoint:: ; cc39
db
wMovementBufferCount:: db ; cc3a
@@ -386,12 +389,19 @@ wStringBuffer1:: ds 1 ; How long is this? ; cd26
SECTION "CD31", WRAM0[$CD31]
-wStartDay::
-wcd31:: ; cd31
- db
+UNION
+wStartDay:: db ;cd31
+wStartHour:: db ;cd32
+wStartMinute:: db ;cd33
+
+NEXTU
+wHPBarTempHP:: dw ; cd31
+
+NEXTU
+wStringBuffer2:: db ; How long is this? ; cd31
+
+ENDU
-wStartHour:: db
-wStartMinute:: db
SECTION "CD3E", WRAM0[$CD3D]
@@ -437,8 +447,13 @@ wcd72:: dw ; cd72
wCurItem:: db ; cd76
wItemIndex:: db ;cd77
wMonDexIndex: db ; cd78
+wWhichPokemon: db ; cd79
-SECTION "CD7D", WRAM0[$CD7D]
+SECTION "CD7B", WRAM0[$CD7B]
+
+wHPBarType:: db ; cd76
+
+ ds 1
wItemQuantity:: db ; cd7d
wItemQuantityBuffer:: db ; cd7e
@@ -472,9 +487,22 @@ wPrevWarp:: db ; cdc1
ds 1
-wFieldMoveScriptID:: db ; cdc3
+UNION
+wFieldMoveScriptID:: db; cdc3
+wMapBlocksAddress:: dw ; cdc4
+wReplacementBlock:: db ; cdc6
- ds 9
+NEXTU
+
+wHPBarMaxHP:: dw ; cdc3
+wHPBarOldHP:: dw ; cdc5
+
+ENDU
+
+wHPBarNewHP:: dw ; cdc7
+wHPBarDelta:: db ; cdc9
+wcdca:: db ; cdca
+wHPBarHPDifference:: dw ; cdcb
wLinkBattleRNs:: ds 10 ; cdcd
; cddd
@@ -591,6 +619,11 @@ wce63:: db ; ce63
; 76543210
; \-- global debug enable
+ ds 3
+
+wPlayerName:: db ; ce67
+
+
SECTION "Mom's Name", WRAM0[$CE6D]
wMomsName:: ds 6 ; ce6d
@@ -700,6 +733,9 @@ wBallQuantities:: db ; d1df
SECTION "Rival's Name", WRAM0[$D258]
wRivalsName:: ds 6 ; d258
+SECTION "PlayerState", WRAM0[$D264]
+wPlayerState:: db ; d264
+
SECTION "D4AB", WRAM0[$D4A9]
wd4a9:: db ; d4a9
@@ -713,6 +749,10 @@ wJoypadFlags:: db ; d4ab
; |\------- joypad sync mtx
; \-------- joypad disabled
+SECTION "wDigWarpNumber", WRAM0[$D4B2]
+
+wDigWarpNumber:: db ; d4b2
+
SECTION "Warp data", WRAM0[$D514]
@@ -814,8 +854,26 @@ wTilesetCollisionAddress:: ; d6a4
ds 4 ; TODO
wTilesetEnd:: ; d6aa
-
-SECTION "PokeDexFlags", WRAM0[$D81A]
+wPartyCount:: db
+wPartySpecies:: ds PARTY_LENGTH
+wPartyEnd:: db
+
+wPartyMons::
+wPartyMon1:: party_struct wPartyMon1 ; d6b2
+wPartyMon2:: party_struct wPartyMon2 ; d6e2
+wPartyMon3:: party_struct wPartyMon3 ; d712
+wPartyMon4:: party_struct wPartyMon4 ; d742
+wPartyMon5:: party_struct wPartyMon5 ; d772
+wPartyMon6:: party_struct wPartyMon6 ; d7a2
+wPlayerPartyEnd:: ; d7d2
+
+wPartyMonOT:: ; d7d2
+ ds PARTY_LENGTH * 6
+wPartyMonOTEnd:: ; d7f6
+
+wPartyMonNicknames:: ; d7f6
+ ds PARTY_LENGTH * MON_NAME_LENGTH ; = $24
+wPartyMonNicknamesEnd:: ; d81a
wPokedexOwned:: ; d81a
flag_array NUM_POKEMON