summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--constants.asm105
-rw-r--r--main.asm511
-rw-r--r--wram.asm171
3 files changed, 765 insertions, 22 deletions
diff --git a/constants.asm b/constants.asm
index 1f9a9444c..524841fae 100644
--- a/constants.asm
+++ b/constants.asm
@@ -1343,6 +1343,7 @@ MAP_MR_POKEMONS_HOUSE EQU $0a
MAP_ROUTE_31_VIOLET_GATE EQU $0b
; item constants
+NO_ITEM EQU $00
MASTER_BALL EQU $01
ULTRA_BALL EQU $02
BRIGHTPOWDER EQU $03
@@ -3345,4 +3346,106 @@ callchannel: MACRO
ENDM
endchannel: MACRO
db $ff
- ENDM \ No newline at end of file
+ ENDM
+
+
+
+; specials
+NUM_SPECIALS EQU $a8
+
+SPECIAL_UPDATESPRITETILES EQU $0038
+
+SPECIAL_WAITSFX EQU $003b
+SPECIAL_BIKESURFMUSIC EQU $003c
+
+SPECIAL_LOADFACESTEP EQU $003f
+
+SPECIAL_SNORLAXAWAKE EQU $0060
+
+SPECIAL_GAMEBOYCHECK EQU $0066
+SPECIAL_TRAINERHOUSE EQU $0067
+
+SPECIAL_RUSTLETREE EQU $006a
+
+SPECIAL_ODDEGG EQU $007d
+
+SPECIAL_MOVETUTOR EQU $0083
+SPECIAL_OMANYTECHAMBER EQU $0084
+
+SPECIAL_RUINCHAMBERWALL EQU $0087
+
+SPECIAL_HOOHCHAMBER EQU $008d
+
+SPECIAL_CELEBI EQU $008f
+
+SPECIAL_AFTERCELEBI EQU $0090
+SPECIAL_POKESEER EQU $0091
+
+SPECIAL_DRATINI EQU $0094
+
+SPECIAL_BEASTSCHECK EQU $0096
+SPECIAL_MONCHECK EQU $0097
+
+; battle scripts
+BATTLE_FILLPP EQU $05
+
+BATTLE_FILLSTATS EQU $0C
+
+BATTLE_FILLMOVES EQU $1B
+
+BATTLE_GETUNOWNLETTER EQU $2D
+
+
+; vars
+NUM_VARS EQU $1b
+VAR_MOVEMENT EQU $08
+
+; player states
+PLAYER_NORMAL EQU $00
+PLAYER_BIKE EQU $01
+PLAYER_SLIP EQU $02
+PLAYER_SURF EQU $04
+PLAYER_SURF_PIKA EQU $08
+
+
+; battle
+MAX_LEVEL EQU 100
+NUM_MOVES EQU 4
+
+; move struct
+MOVE_LENGTH EQU 7
+MOVE_ANIM EQU 0
+MOVE_EFFECT EQU 1
+MOVE_POWER EQU 2
+MOVE_TYPE EQU 3
+MOVE_ACC EQU 4
+MOVE_PP EQU 5
+MOVE_CHANCE EQU 6
+
+; stat constants
+NUM_STATS EQU 6
+STAT_HP EQU 1
+STAT_ATK EQU 2
+STAT_DEF EQU 3
+STAT_SPD EQU 4
+STAT_SATK EQU 5
+STAT_SDEF EQU 6
+STAT_MIN_NORMAL EQU 5
+STAT_MIN_HP EQU 10
+; shiny dvs
+ATKDEFDV_SHINY EQU $EA
+SPDSPCDV_SHINY EQU $AA
+
+; battle classes
+WILD_BATTLE EQU $00
+TRAINER_BATTLE EQU $02
+
+; battle types
+BATTLETYPE_NORMAL EQU $00
+BATTLETYPE_TUTORIAL EQU $03
+BATTLETYPE_FISH EQU $04
+BATTLETYPE_ROAMING EQU $05
+BATTLETYPE_SHINY EQU $07
+BATTLETYPE_TREE EQU $08
+BATTLETYPE_FORCEITEM EQU $0a
+BATTLETYPE_SUICUNE EQU $0c \ No newline at end of file
diff --git a/main.asm b/main.asm
index 7b998d542..98007de17 100644
--- a/main.asm
+++ b/main.asm
@@ -561,7 +561,56 @@ Char5F: ; 0x1356
pop hl
ret
-INCBIN "baserom.gbc",$135a,$26ef - $135a
+INCBIN "baserom.gbc",$135a,$185d - $135a
+
+GetTileType: ; 185d
+; checks the properties of a tile
+; input: a = tile id
+ push de
+ push hl
+ ld hl, TileTypeTable
+ ld e, a
+ ld d, $00
+ add hl, de
+ ld a, [$ff00+$9d] ; current bank
+ push af
+ ld a, BANK(TileTypeTable)
+ rst $10
+ ld e, [hl] ; get tile type
+ pop af
+ rst $10 ; return to current bank
+ ld a, e
+ and a, $0f ; lo nybble only
+ pop hl
+ pop de
+ ret
+; 1875
+
+INCBIN "baserom.gbc",$1875,$261f - $1875
+
+PushScriptPointer: ; 261f
+; used to call a script from asm
+; input:
+; a: bank
+; hl: address
+
+; bank
+ ld [$d439], a ; ScriptBank
+
+; address
+ ld a, l
+ ld [$d43a], a ; ScriptAddressLo
+ ld a, h
+ ld [$d43b], a ; ScriptAddressHi
+
+ ld a, $ff
+ ld [$d438], a
+
+ scf
+ ret
+; 2631
+
+INCBIN "baserom.gbc",$2631,$26ef - $2631
ObjectEvent: ; 0x26ef
jumptextfaceplayer ObjectEventText
@@ -891,7 +940,20 @@ GetFarHalfword: ; 0x305d
ret
; 0x306b
-INCBIN "baserom.gbc",$306b,$30e1-$306b
+INCBIN "baserom.gbc",$306b,$30d6-$306b
+
+CopyName1: ; 30d6
+ ld hl, StringBuffer2
+; 30d9
+CopyName2: ; 30d9
+.loop
+ ld a, [de]
+ inc de
+ ld [hli], a
+ cp "@"
+ jr nz, .loop
+ ret
+; 30e1
IsInArray: ; 30e1
; searches an array at hl for the value in a.
@@ -1185,7 +1247,32 @@ GetItemName: ; 3468
ret
; 0x3487
-INCBIN "baserom.gbc",$3487,$38bb - $3487
+INCBIN "baserom.gbc",$3487,$38a2 - $3487
+
+GetNick: ; 38a2
+; get the nickname of a partymon
+; write nick to StringBuffer1
+
+; input: a = which mon (0-5)
+
+ push hl
+ push bc
+ ; skip [a] nicks
+ call SkipNames
+ ld de, StringBuffer1
+ ; write nick
+ push de
+ ld bc, PKMN_NAME_LENGTH
+ call CopyBytes
+ ; error-check
+ pop de
+ callab CheckNickErrors
+ ; we're done
+ pop bc
+ pop hl
+ ret
+; 38bb
+
PrintBCDNumber: ; 38bb
; function to print a BCD (Binary-coded decimal) number
; de = address of BCD number
@@ -1425,8 +1512,89 @@ IntroFadePalettes: ; 0x617c
db %11111000
db %11110100
db %11100100
+; 6182
-INCBIN "baserom.gbc",$6182,$8000 - $6182
+INCBIN "baserom.gbc",$6182,$669f - $6182
+
+CheckNickErrors: ; 669f
+; error-check monster nick before use
+; must be a peace offering to gamesharkers
+
+; input: de = nick location
+
+ push bc
+ push de
+ ld b, PKMN_NAME_LENGTH
+
+.checkchar
+; end of nick?
+ ld a, [de]
+ cp "@" ; terminator
+ jr z, .end
+
+; check if this char is a text command
+ ld hl, .textcommands
+ dec hl
+.loop
+; next entry
+ inc hl
+; reached end of commands table?
+ ld a, [hl]
+ cp a, $ff
+ jr z, .done
+
+; is the current char between this value (inclusive)...
+ ld a, [de]
+ cp [hl]
+ inc hl
+ jr c, .loop
+; ...and this one?
+ cp [hl]
+ jr nc, .loop
+
+; replace it with a "?"
+ ld a, "?"
+ ld [de], a
+ jr .loop
+
+.done
+; next char
+ inc de
+; reached end of nick without finding a terminator?
+ dec b
+ jr nz, .checkchar
+
+; change nick to "?@"
+ pop de
+ push de
+ ld a, "?"
+ ld [de], a
+ inc de
+ ld a, "@"
+ ld [de], a
+.end
+; if the nick has any errors at this point it's out of our hands
+ pop de
+ pop bc
+ ret
+; 66cf
+
+.textcommands ; 66cf
+; table definining which characters
+; are actually text commands
+; format:
+; >= <
+ db $00, $05
+ db $14, $19
+ db $1d, $26
+ db $35, $3a
+ db $3f, $40
+ db $49, $5d
+ db $5e, $7f
+ db $ff ; end
+; 66de
+
+INCBIN "baserom.gbc",$66de,$8000 - $66de
SECTION "bank2",DATA,BANK[$2]
@@ -1757,16 +1925,29 @@ PrintNumber_AdvancePointer: ; c64a
ret
; 0xc658
-INCBIN "baserom.gbc",$c658,$c721 - $c658
+INCBIN "baserom.gbc",$c658,$c706 - $c658
+
+GetPartyNick: ; c706
+; write CurPartyMon nickname to StringBuffer1-3
+ ld hl, PartyMon1Nickname
+ ld a, $02
+ ld [$cf5f], a
+ ld a, [CurPartyMon]
+ call GetNick
+ call CopyName1
+; copy text from StringBuffer2 to StringBuffer3
+ ld de, StringBuffer2
+ ld hl, StringBuffer3
+ call CopyName2
+ ret
+; c721
CheckFlag2: ; c721
-; uses bittable2
-; checks flag id in de
-; returns carry if flag is not set
+; using bittable2
+; check flag id in de
+; return carry if flag is not set
ld b, $02 ; check flag
- ld a, BANK(GetFlag2)
- ld hl, GetFlag2
- rst $08
+ callba GetFlag2
ld a, c
and a
jr nz, .isset
@@ -1777,7 +1958,226 @@ CheckFlag2: ; c721
ret
; c731
-INCBIN "baserom.gbc",$c731,$ffff - $c731
+CheckBadge: ; c731
+; input: a = badge flag id ($1b-$2b)
+ call CheckFlag2
+ ret nc
+ ld hl, BadgeRequiredText
+ call $1d67 ; push text to queue
+ scf
+ ret
+; c73d
+
+BadgeRequiredText: ; c73d
+ TX_FAR _BadgeRequiredText ; Sorry! A new BADGE
+ db "@" ; is required.
+; c742
+
+CheckPartyMove: ; c742
+; checks if a pokemon in your party has a move
+; e = partymon being checked
+
+; input: d = move id
+ ld e, $00 ; mon #
+ xor a
+ ld [CurPartyMon], a
+.checkmon
+; check for valid species
+ ld c, e
+ ld b, $00
+ ld hl, PartySpecies
+ add hl, bc
+ ld a, [hl]
+ and a ; no id
+ jr z, .quit
+ cp a, $ff ; terminator
+ jr z, .quit
+ cp a, EGG
+ jr z, .nextmon
+; navigate to appropriate move table
+ ld bc, PartyMon2 - PartyMon1
+ ld hl, PartyMon1Moves
+ ld a, e
+ call AddNTimes
+ ld b, $04 ; number of moves
+.checkmove
+ ld a, [hli]
+ cp d ; move id
+ jr z, .end
+ dec b ; how many moves left?
+ jr nz, .checkmove
+.nextmon
+ inc e ; mon #
+ jr .checkmon
+.end
+ ld a, e
+ ld [CurPartyMon], a ; which mon has the move
+ xor a
+ ret
+.quit
+ scf
+ ret
+; c779
+
+INCBIN "baserom.gbc",$c779,$c986 - $c779
+
+UsedSurfScript: ; c986
+; print "[MON] used SURF!"
+ 2writetext UsedSurfText
+ closetext
+ loadmovesprites
+; this does absolutely nothing
+ 3callasm BANK(Functionc9a2), Functionc9a2
+; write surftype to PlayerState
+ copybytetovar $d1eb ; Buffer2
+ writevarcode VAR_MOVEMENT
+; update sprite tiles
+ special SPECIAL_UPDATESPRITETILES
+; start surf music
+ special SPECIAL_BIKESURFMUSIC
+; step into the water
+ special SPECIAL_LOADFACESTEP ; (slow_step_x, step_end)
+ applymovement $00, $d007 ; PLAYER, MovementBuffer
+ end
+; c9a2
+
+Functionc9a2: ; c9a2
+ callba Function1060bb ; empty
+ ret
+; c9a9
+
+UsedSurfText: ; c9a9
+ TX_FAR _UsedSurfText ; [MONSTER] used
+ db "@" ; SURF!
+; c9ae
+
+CantSurfText: ; c9ae
+ TX_FAR _CantSurfText ; You can't SURF
+ db "@" ; here.
+; c9b3
+
+AlreadySurfingText: ; c9b3
+ TX_FAR _AlreadySurfingText ; You're already
+ db "@" ; SURFING.
+; c9b8
+
+GetSurfType: ; c9b8
+; get surfmon species
+ ld a, [CurPartyMon]
+ ld e, a
+ ld d, $00
+ ld hl, PartySpecies
+ add hl, de
+; is pikachu surfing?
+ ld a, [hl]
+ cp PIKACHU
+ ld a, PLAYER_SURF_PIKA
+ ret z
+ ld a, PLAYER_SURF
+ ret
+; c9cb
+
+CheckDirection: ; c9cb
+; set carry if a tile permission prevents you
+; from moving in the direction you are facing
+
+; get player direction
+ ld a, [PlayerDirection]
+ and a, %00001100 ; bits 2 and 3 contain direction
+ rrca
+ rrca
+ ld e, a
+ ld d, $00
+ ld hl, .DirectionTable
+ add hl, de
+; can you walk in this direction?
+ ld a, [TilePermissions]
+ and [hl]
+ jr nz, .quit
+ xor a
+ ret
+.quit
+ scf
+ ret
+; c9e3
+
+.DirectionTable ; c9e3
+ db %00001000 ; down
+ db %00000100 ; up
+ db %00000010 ; left
+ db %00000001 ; right
+; c9e7
+
+CheckSurfOW: ; c9e7
+; called when checking a tile in the overworld
+; check if you can surf
+; return carry if conditions are met
+
+; can we surf?
+ ld a, [PlayerState]
+ ; are you already surfing (pikachu)?
+ cp PLAYER_SURF_PIKA
+ jr z, .quit
+ ; are you already surfing (normal)?
+ cp PLAYER_SURF
+ jr z, .quit
+ ; are you facing a surf tile?
+ ld a, [$d03e] ; buffer for the tile you are facing (used for other things too)
+ call GetTileType
+ cp $01 ; surfable
+ jr nz, .quit
+ ; does this contradict tile permissions?
+ call CheckDirection
+ jr c, .quit
+ ; do you have fog badge?
+ ld de, $001e ; FLAG_FOG_BADGE
+ call CheckFlag2
+ jr c, .quit
+ ; do you have a monster with surf?
+ ld d, SURF
+ call CheckPartyMove
+ jr c, .quit
+ ; can you get off the bike (cycling road)?
+ ld hl, $dbf5 ; overworld flags
+ bit 1, [hl] ; always on bike (can't surf)
+ jr nz, .quit
+
+; load surftype into MovementType
+ call GetSurfType
+ ld [$d1eb], a ; MovementType
+
+; get surfmon nick
+ call GetPartyNick
+
+; run AskSurfScript
+ ld a, BANK(AskSurfScript)
+ ld hl, AskSurfScript
+ call PushScriptPointer
+
+; conditions were met
+ scf
+ ret
+
+.quit
+; conditions were not met
+ xor a
+ ret
+; ca2c
+
+AskSurfScript: ; ca2c
+ loadfont
+ 2writetext AskSurfText
+ yesorno
+ iftrue UsedSurfScript
+ loadmovesprites
+ end
+
+AskSurfText: ; ca36
+ TX_FAR _AskSurfText ; The water is calm.
+ db "@" ; Want to SURF?
+; ca3b
+
+INCBIN "baserom.gbc",$ca3b,$10000 - $ca3b
SECTION "bank4",DATA,BANK[$4]
@@ -16527,7 +16927,49 @@ INCBIN "baserom.gbc",$4a843,$4C000 - $4a843
SECTION "bank13",DATA,BANK[$13]
-INCBIN "baserom.gbc",$4C000,$50000 - $4C000
+INCBIN "baserom.gbc",$4C000,$4ce1f - $4C000
+
+TileTypeTable: ; 4ce1f
+; 256 tiletypes
+; 01 = surfable
+ db $00, $00, $00, $00, $00, $00, $00, $0f
+ db $00, $00, $00, $00, $00, $00, $00, $0f
+ db $00, $00, $1f, $00, $00, $1f, $00, $00
+ db $00, $00, $1f, $00, $00, $1f, $00, $00
+ db $01, $01, $11, $00, $11, $01, $01, $0f
+ db $01, $01, $11, $00, $11, $01, $01, $0f
+ db $01, $01, $01, $01, $01, $01, $01, $01
+ db $01, $01, $01, $01, $01, $01, $01, $01
+
+ db $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $0f, $00, $00, $00, $00, $00
+ db $00, $00, $0f, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00
+
+ db $0f, $0f, $0f, $0f, $0f, $00, $00, $00
+ db $0f, $0f, $0f, $0f, $0f, $00, $00, $00
+ db $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f
+ db $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f
+ db $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00
+
+ db $01, $01, $01, $01, $01, $01, $01, $01
+ db $01, $01, $01, $01, $01, $01, $01, $01
+ db $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $0f
+; 4cf1f
+
+INCBIN "baserom.gbc",$4cf1f,$50000 - $4cf1f
SECTION "bank14",DATA,BANK[$14]
@@ -78179,7 +78621,14 @@ INCBIN "baserom.gbc",$100000,$4000
SECTION "bank41",DATA,BANK[$41]
-INCBIN "baserom.gbc",$104000,$4000
+INCBIN "baserom.gbc",$104000,$1060bb - $104000
+
+Function1060bb: ; 1060bb
+; commented out
+ ret
+; 1060bc
+
+INCBIN "baserom.gbc",$1060bc,$108000 - $1060bc
SECTION "bank42",DATA,BANK[$42]
@@ -119262,9 +119711,39 @@ INCBIN "baserom.gbc",$1BC000,$4000
SECTION "bank70",DATA,BANK[$70]
-INCBIN "baserom.gbc",$1C0000,$1c1ec9-$1c0000
+INCBIN "baserom.gbc",$1C0000,$1c05a7-$1c0000
+
+_BadgeRequiredText: ; 1c05a7
+ db $0, "Sorry! A new BADGE", $4f
+ db "is required.", $58
+; 1c05c8
+
+INCBIN "baserom.gbc",$1c05c8,$1c062f-$1c05c8
+
+_UsedSurfText: ; 1c062f
+ dbw $1, StringBuffer2
+ db $0, " used", $4f
+ db "SURF!", $57
+; 1c063f
+
+_CantSurfText: ; 1c063f
+ db $0, "You can't SURF", $4f
+ db "here.", $58
+; 1c0654
+
+_AlreadySurfingText: ; 1c0654
+ db $0, "You're already", $4f
+ db "SURFING.", $58
+; 1c066c
+
+_AskSurfText ; 1c066c
+ db $0, "The water is calm.", $4f
+ db "Want to SURF?", $57
+; 1c068e
+
+INCBIN "baserom.gbc",$1c068e,$1c1ec9-$1c068e
-INCBIN "baserom.gbc",$1C1EC9,$1c4000-$1c1ec9 ; empty
+INCBIN "baserom.gbc",$1c1ec9,$1c4000-$1c1ec9 ; empty
SECTION "bank71",DATA,BANK[$71]
diff --git a/wram.asm b/wram.asm
index dd77a3d23..78b4a405e 100644
--- a/wram.asm
+++ b/wram.asm
@@ -278,6 +278,25 @@ SECTION "linkbattle",BSS[$c2dc]
InLinkBattle: ; 0xc2dc
ds 1 ; nonzero when in a link battle
+SECTION "tiles",BSS[$c2fa]
+TileDown: ; c2fa
+ ds 1
+TileUp: ; c2fb
+ ds 1
+TileLeft: ; c2fc
+ ds 1
+TileRight: ; c2fd
+ ds 1
+
+TilePermissions: ; c2fe
+; set if tile behavior prevents
+; you from walking in that direction
+; bit 3: down
+; bit 2: up
+; bit 1: left
+; bit 0: right
+ ds 1
+
SECTION "BattleMons",BSS[$c62a]
BattleMonSpecies: ; c62a
@@ -338,6 +357,10 @@ BattleMonSpclAtk: ; c646
BattleMonSpclDef: ; c648
ds 2
+SECTION "prng",BSS[$c6e5]
+LinkBattleRNCount: ; c6e5
+ ds 1
+
SECTION "Engine",BSS[$cfcc]
Options: ; cfcc
; bit 0-2: number of frames to delay when printing text
@@ -347,10 +370,14 @@ Options: ; cfcc
; bit 6: battle style shift/set
; bit 7: battle scene off/on
ds 1
+
+ ds 1
TextBoxFrame: ; cfce
; bits 0-2: textbox frame 0-7
ds 1
+
+ ds 1
GBPrinter: ; cfd0
; bit 0-6: brightness
@@ -365,6 +392,16 @@ Options2: ; cfd1
; bit 1: menu account off/on
ds 1
+ ds 161
+
+StringBuffer1: ; d073
+ ds 19
+StringBuffer2: ; d086
+ ds 19
+StringBuffer3: ; d099
+ ds 19
+
+ ds 65
VramState: ; d0ed
; bit 0: overworld sprite updating on/off
@@ -373,13 +410,36 @@ VramState: ; d0ed
; flickers when climbing waterfall
ds 1
+ ds 26
+
+CurPartySpecies: ; d108
+ ds 1
CurPartyMon: ; d109
-; contains which monster in your party
+; contains which monster in a party
; is being dealt with at the moment
; 0-5
ds 1
+ ds 57
+
+CurPartyLevel: ; d143
+ ds 1
+
+ ds 166
+
+Buffer1:
+MagikarpLength:
+MagikarpLengthHi: ; d1ea
+ ds 1
+Buffer2:
+MagikarpLengthLo: ; d1eb
+ ds 1
+
+SECTION "prng2",BSS[$d1fa]
+LinkBattleRNs: ; d1fa
+ ds 10
+
SECTION "EnemyMon",BSS[$d204]
EnemyMonSpecies: ; d204
@@ -447,7 +507,15 @@ EnemyMonSpclAtk: ; d220
EnemyMonSpclDef: ; d222
ds 2
-SECTION "OtherTrainerClass",BSS[$d22f]
+SECTION "Battle",BSS[$d22d]
+
+BattleClass: ; d22d
+; 0: wild battle
+; 1:
+; 2: trainer battle
+ ds 1
+
+ ds 1
OtherTrainerClass: ; 0xd22f
; class (Youngster, Bug Catcher, etc.) of opposing trainer
@@ -455,8 +523,19 @@ OtherTrainerClass: ; 0xd22f
ds 1
BattleType: ; 0xd230
-; 00 normal
-; 08 headbutt/rock smash. probably bit 3
+; $00 normal
+; $01
+; $02
+; $03 dude
+; $04 fishing
+; $05 roaming
+; $06
+; $07 shiny
+; $08 headbutt/rock smash
+; $09
+; $0a force Item1
+; $0b
+; $0c suicune
ds 1
OtherTrainerID: ; 0xd231
@@ -464,6 +543,16 @@ OtherTrainerID: ; 0xd231
; (Joey, Mikey, Albert, etc.)
ds 1
+ ds 2
+
+UnownLetter: ; d234
+ ds 1
+
+ ds 1
+
+CurBaseStats: ; d236
+ ds 32
+
SECTION "TimeOfDay",BSS[$d269]
TimeOfDay: ; 0xd269
@@ -1002,15 +1091,37 @@ OTPartyMon5Nickname: ; d416
OTPartyMon6Nickname: ; d421
ds 11
+
SECTION "Player",BSS[$d47b]
PlayerID: ; 0xd47b
ds 2
PlayerName: ; 0xd47d
ds 11
+ ds 46
+
+; init time set at newgame
+StartDay: ; d4b6
+ ds 1
+StartHour: ; d4b7
+ ds 1
+StartMinute: ; d4b8
+ ds 1
+StartSecond: ; d4b9
+ ds 1
+
+ ds 17
+
+CurDay: ; d4cb
+ ds 1
+
+ ds 12
+
PlayerSprite: ; 0xd4d8
ds 1
-
+
+ ds 5
+
PlayerDirection: ; d4de
; uses bits 2 and 3 / $0c / %00001100
; %00 down
@@ -1572,6 +1683,16 @@ PartyMon5Nickname: ; 0xde6d
PartyMon6Nickname: ; 0xde78
ds 11
+SECTION "Pokedex",BSS[$de99]
+PokedexSeen: ; de99
+ ds 32
+PokedexCaught: ; deb9
+ ds 32
+UnownDex: ; ded9
+ ds 26
+UnownUnlockedGroups: ; def3
+ ds 1
+
SECTION "Breeding",BSS[$def5]
DaycareMan: ; def5
; bit 7: active
@@ -1621,3 +1742,43 @@ EggStats:
EggSpecies: ; df7b
ds 1
ds 31
+
+SECTION "RoamMons",BSS[$dfcf]
+RoamMon1Species: ; dfcf
+ ds 1
+RoamMon1Level: ; dfd0
+ ds 1
+RoamMon1MapGroup: ; dfd1
+ ds 1
+RoamMon1MapNumber: ; dfd2
+ ds 1
+RoamMon1CurHP: ; dfd3
+ ds 1
+RoamMon1DVs: ; dfd4
+ ds 2
+
+RoamMon2Species: ; dfd6
+ ds 1
+RoamMon2Level: ; dfd7
+ ds 1
+RoamMon2MapGroup: ; dfd8
+ ds 1
+RoamMon2MapNumber: ; dfd9
+ ds 1
+RoamMon2CurHP: ; dfda
+ ds 1
+RoamMon2DVs: ; dfdb
+ ds 2
+
+RoamMon3Species: ; dfdd
+ ds 1
+RoamMon3Level: ; dfde
+ ds 1
+RoamMon3MapGroup: ; dfdf
+ ds 1
+RoamMon3MapNumber: ; dfe0
+ ds 1
+RoamMon3CurHP: ; dfe1
+ ds 1
+RoamMon3DVs: ; dfe2
+ ds 2 \ No newline at end of file