summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2015-02-07 02:43:08 -0800
committerYamaArashi <shadow962@live.com>2015-02-07 02:43:08 -0800
commit3fdb8a0d8995746d5605136ece384516338489b0 (patch)
tree214030fb5b6ec943cdcb2ba84e622fba0ad3fb8f
parent9de54645c896cc57a79679aecd6174afc59762c8 (diff)
serial/trade/misc
-rw-r--r--constants/hardware_constants.asm3
-rw-r--r--constants/misc_constants.asm38
-rw-r--r--constants/move_constants.asm8
-rw-r--r--constants/wram_constants.asm6
-rwxr-xr-xdata/hidden_objects.asm16
-rwxr-xr-xengine/battle/15.asm8
-rwxr-xr-xengine/battle/1c.asm4
-rwxr-xr-xengine/battle/4_2.asm20
-rwxr-xr-xengine/battle/animations.asm197
-rwxr-xr-xengine/battle/core.asm173
-rwxr-xr-xengine/battle/d.asm2
-rwxr-xr-xengine/battle/e.asm10
-rwxr-xr-xengine/cable_club.asm937
-rwxr-xr-xengine/clear_save.asm6
-rwxr-xr-xengine/evolve_trade.asm12
-rwxr-xr-xengine/evos_moves.asm22
-rwxr-xr-xengine/game_corner_slots.asm2
-rwxr-xr-xengine/hall_of_fame.asm12
-rwxr-xr-xengine/hidden_object_functions17.asm2
-rwxr-xr-xengine/in_game_trades.asm164
-rwxr-xr-xengine/intro.asm14
-rwxr-xr-xengine/items/items.asm4
-rwxr-xr-xengine/learn_move.asm4
-rw-r--r--engine/menu/bills_pc.asm40
-rwxr-xr-xengine/menu/diploma.asm2
-rwxr-xr-xengine/menu/main_menu.asm126
-rwxr-xr-xengine/menu/naming_screen.asm2
-rwxr-xr-xengine/menu/start_sub_menus.asm12
-rwxr-xr-xengine/menu/vending_machine.asm4
-rwxr-xr-xengine/mon_party_sprites.asm2
-rwxr-xr-xengine/overworld/cable_club_npc.asm138
-rwxr-xr-xengine/overworld/elevator.asm6
-rwxr-xr-xengine/overworld/pokemart.asm14
-rwxr-xr-xengine/predefs.asm10
-rwxr-xr-xengine/save.asm2
-rwxr-xr-xengine/slot_machine.asm6
-rwxr-xr-xengine/titlescreen.asm4
-rwxr-xr-xengine/trade.asm371
-rwxr-xr-xengine/trade2.asm22
m---------extras0
-rw-r--r--home.asm32
-rw-r--r--home/init.asm10
-rw-r--r--home/overworld.asm12
-rw-r--r--home/serial.asm617
-rw-r--r--home/text.asm8
-rw-r--r--hram.asm15
-rwxr-xr-xmain.asm157
-rwxr-xr-xscripts/celadongamecorner.asm2
-rwxr-xr-xscripts/celadonpokecenter.asm2
-rwxr-xr-xscripts/ceruleanhouse1.asm2
-rwxr-xr-xscripts/ceruleanpokecenter.asm2
-rwxr-xr-xscripts/cinnabarpokecenter.asm2
-rwxr-xr-xscripts/daycarem.asm4
-rwxr-xr-xscripts/fuchsiapokecenter.asm2
-rwxr-xr-xscripts/indigoplateaulobby.asm2
-rwxr-xr-xscripts/lab2.asm2
-rwxr-xr-xscripts/lab4.asm2
-rwxr-xr-xscripts/lavenderpokecenter.asm2
-rwxr-xr-xscripts/mtmoonpokecenter.asm6
-rwxr-xr-xscripts/museum1f.asm4
-rwxr-xr-xscripts/pewterpokecenter.asm2
-rwxr-xr-xscripts/rocktunnelpokecenter.asm2
-rwxr-xr-xscripts/route11gateupstairs.asm2
-rwxr-xr-xscripts/route18gateupstairs.asm2
-rwxr-xr-xscripts/route2house.asm2
-rw-r--r--scripts/safarizoneentrance-yellow.asm4
-rwxr-xr-xscripts/safarizoneentrance.asm4
-rwxr-xr-xscripts/saffronpokecenter.asm2
-rwxr-xr-xscripts/undergroundpathentranceroute5.asm2
-rwxr-xr-xscripts/vermilionhouse3.asm2
-rwxr-xr-xscripts/vermilionpokecenter.asm2
-rwxr-xr-xscripts/viridianpokecenter.asm2
-rw-r--r--text.asm50
-rwxr-xr-xwram.asm192
74 files changed, 1933 insertions, 1647 deletions
diff --git a/constants/hardware_constants.asm b/constants/hardware_constants.asm
index e875622d..f9e3fe19 100644
--- a/constants/hardware_constants.asm
+++ b/constants/hardware_constants.asm
@@ -30,6 +30,9 @@ OAM_X_FLIP EQU 5
OAM_Y_FLIP EQU 6
OAM_PRIORITY EQU 7 ; 0: OBJ above BG, 1: OBJ behind BG (colors 1-3)
+; serial
+START_TRANSFER_EXTERNAL_CLOCK EQU $80
+START_TRANSFER_INTERNAL_CLOCK EQU $81
; Hardware registers
rJOYP EQU $ff00 ; Joypad (R/W)
diff --git a/constants/misc_constants.asm b/constants/misc_constants.asm
index b864ab85..fd80eab2 100644
--- a/constants/misc_constants.asm
+++ b/constants/misc_constants.asm
@@ -26,4 +26,40 @@ SCREEN_HEIGHT EQU 18
NPC_MOVEMENT_DOWN EQU $00
NPC_MOVEMENT_UP EQU $40
NPC_MOVEMENT_LEFT EQU $80
-NPC_MOVEMENT_RIGHT EQU $C0 \ No newline at end of file
+NPC_MOVEMENT_RIGHT EQU $C0
+
+; two option menu constants
+YES_NO_MENU EQU 0
+NORTH_WEST_MENU EQU 1
+SOUTH_EAST_MENU EQU 2
+WIDE_YES_NO_MENU EQU 3
+NORTH_EAST_MENU EQU 4
+TRADE_CANCEL_MENU EQU 5
+HEAL_CANCEL_MENU EQU 6
+NO_YES_MENU EQU 7
+
+; serial
+
+ESTABLISH_CONNECTION_WITH_INTERNAL_CLOCK EQU $01
+ESTABLISH_CONNECTION_WITH_EXTERNAL_CLOCK EQU $02
+
+USING_EXTERNAL_CLOCK EQU $01
+USING_INTERNAL_CLOCK EQU $02
+CONNECTION_NOT_ESTABLISHED EQU $ff
+
+; signals the start of an array of bytes transferred over the link cable
+SERIAL_PREAMBLE_BYTE EQU $FD
+
+; this byte is used when there is no data to send
+SERIAL_NO_DATA_BYTE EQU $FE
+
+; signals the end of one part of a patch list (there are two parts) for player/enemy party data
+SERIAL_PATCH_LIST_PART_TERMINATOR EQU $FF
+
+LINK_STATE_NONE EQU $00 ; not using link
+LINK_STATE_IN_CABLE_CLUB EQU $01 ; in a cable club room (Colosseum or Trade Centre)
+LINK_STATE_START_TRADE EQU $02 ; pre-trade selection screen initialisation
+LINK_STATE_START_BATTLE EQU $03 ; pre-battle initialisation
+LINK_STATE_BATTLING EQU $04 ; in a link battle
+LINK_STATE_RESET EQU $05 ; reset game (unused)
+LINK_STATE_TRADING EQU $32 ; in a link trade \ No newline at end of file
diff --git a/constants/move_constants.asm b/constants/move_constants.asm
index 676f06f2..dfbb500e 100644
--- a/constants/move_constants.asm
+++ b/constants/move_constants.asm
@@ -175,10 +175,10 @@ NUM_ATTACKS EQU const_value + -1
const STATUS_AFFECTED_ANIM
const ANIM_A8
const ANIM_A9
- const ANIM_AA
- const ANIM_AB
- const ANIM_AC
- const ANIM_AD
+ const TRADE_BALL_DROP_ANIM
+ const TRADE_BALL_SHAKE_ANIM
+ const TRADE_BALL_TILT_ANIM
+ const TRADE_BALL_POOF_ANIM
const XSTATITEM_ANIM ; use X Attack/Defense/Speed/Special
const ANIM_AF
const ANIM_B0
diff --git a/constants/wram_constants.asm b/constants/wram_constants.asm
index e06ca2ce..067c8707 100644
--- a/constants/wram_constants.asm
+++ b/constants/wram_constants.asm
@@ -2,13 +2,9 @@
SPRITEBUFFERSIZE EQU 7*7 * 8 ; 7 * 7 (tiles) * 8 (bytes per tile)
; Overload W_GRASSMONS
-wd893 EQU $d893 ; W_GRASSMONS + 11
-wd896 EQU $d896 ; W_GRASSMONS + 14
+wSerialEnemyDataBlock EQU $d893 ; W_GRASSMONS + 11
; Overload enemy party data
W_WATERRATE EQU $d8a4 ; wEnemyMon1Species
W_WATERMONS EQU $d8a5 ; wEnemyMon1Species + 1
-; Overload enemy stat modifiers
-wTradeMonNick EQU $cd1e ; wPlayerMonAccuracyMod
-
diff --git a/data/hidden_objects.asm b/data/hidden_objects.asm
index b67f5c43..74d053bb 100755
--- a/data/hidden_objects.asm
+++ b/data/hidden_objects.asm
@@ -177,19 +177,19 @@ HiddenObjectPointers: ; 46a96 (11:6a96)
; format: y-coord, x-coord, text id/item id, object routine
BattleCenterHiddenObjects: ; 46b40 (11:6b40)
db $04,$05,$d0
- db BANK(PrintJustAMomentText2)
- dw PrintJustAMomentText2
+ db BANK(CableClubRightGameboy)
+ dw CableClubRightGameboy
db $04,$04,$d0
- db BANK(PrintJustAMomentText1)
- dw PrintJustAMomentText1
+ db BANK(CableClubLeftGameboy)
+ dw CableClubLeftGameboy
db $FF
TradeCenterHiddenObjects: ; 46b4d (11:6b4d)
db $04,$05,$d0
- db BANK(PrintJustAMomentText2)
- dw PrintJustAMomentText2
+ db BANK(CableClubRightGameboy)
+ dw CableClubRightGameboy
db $04,$04,$d0
- db BANK(PrintJustAMomentText1)
- dw PrintJustAMomentText1
+ db BANK(CableClubLeftGameboy)
+ dw CableClubLeftGameboy
db $FF
RedsHouse2FHiddenObjects: ; 46b5a (11:6b5a)
db $01,$00,$04
diff --git a/engine/battle/15.asm b/engine/battle/15.asm
index 2fb3b108..0acf3514 100755
--- a/engine/battle/15.asm
+++ b/engine/battle/15.asm
@@ -1,6 +1,6 @@
GainExperience: ; 5524f (15:524f)
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
ret z ; return if link battle
call DivideExpDataByNumMonsGainingExp
ld hl, wPartyMon1
@@ -226,8 +226,8 @@ GainExperience: ; 5524f (15:524f)
ld a, [W_PLAYERBATTSTATUS3]
bit 3, a ; is the mon transformed?
jr nz, .recalcStatChanges
-; the mon is transformed, so copy transformed data
- ld de, wcd0f
+; the mon is not transformed, so update the unmodified stats
+ ld de, wPlayerMonUnmodifiedLevel
ld bc, $b
call CopyData
.recalcStatChanges
diff --git a/engine/battle/1c.asm b/engine/battle/1c.asm
index bceeac2b..b905777b 100755
--- a/engine/battle/1c.asm
+++ b/engine/battle/1c.asm
@@ -127,8 +127,8 @@ BattleTransition: ; 7096d (1c:496d)
call Delay3
call LoadBattleTransitionTile
ld bc, $0
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr z, .linkBattle
call GetBattleTransitionID_WildOrTrainer
call GetBattleTransitionID_CompareLevels
diff --git a/engine/battle/4_2.asm b/engine/battle/4_2.asm
index 6ab5c004..a3ef1264 100755
--- a/engine/battle/4_2.asm
+++ b/engine/battle/4_2.asm
@@ -1,6 +1,6 @@
EndOfBattle: ; 137aa (4:77aa)
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr nz, .notLinkBattle
; link battle
ld a, [wEnemyMonPartyPos]
@@ -110,7 +110,7 @@ Func_13870: ; 13870 (4:7870)
jr z, .lastRepelStep
ld [wRepelRemainingSteps], a
.asm_1389e
-; determine if wild pokémon can appear in the half-block we’re standing
+; determine if wild pokmon can appear in the half-block were standing
; is the bottom right tile (9,9) of the half-block are we standing a grass/water tile?
hlCoord 9, 9
ld c, [hl]
@@ -122,9 +122,9 @@ Func_13870: ; 13870 (4:7870)
cp c
ld a, [W_WATERRATE]
jr z, .CanEncounter
-; even if not in grass/water, standing anywhere we can encounter pokémon
-; so long as the map is “indoor” and has wild pokémon defined.
-; …as long as it’s not Viridian Forest or Safari Zone.
+; even if not in grass/water, standing anywhere we can encounter pokmon
+; so long as the map is indoor and has wild pokmon defined.
+; as long as its not Viridian Forest or Safari Zone.
ld a, [W_CURMAP]
cp REDS_HOUSE_1F ; is this an indoor map?
jr c, .CantEncounter
@@ -148,7 +148,7 @@ Func_13870: ; 13870 (4:7870)
inc hl
jr .determineEncounterSlot
.gotEncounterSlot
-; determine which wild pokémon (grass or water) can appear in the half-block we’re standing
+; determine which wild pokmon (grass or water) can appear in the half-block were standing
ld c, [hl]
ld hl, W_GRASSMONS
aCoord 8, 9
@@ -314,7 +314,7 @@ HazeEffect_: ; 139da (4:79da)
call Func_13a43
ld hl, wEnemyMonAttackMod
call Func_13a43
- ld hl, wcd12
+ ld hl, wPlayerMonUnmodifiedAttack
ld de, wBattleMonAttack
call Func_13a4a
ld hl, wEnemyMonUnmodifiedAttack
@@ -386,8 +386,8 @@ StatusChangesEliminatedText: ; 13a53 (4:7a53)
db "@"
GetTrainerName_: ; 13a58 (4:7a58)
- ld hl, W_GRASSRATE
- ld a, [W_ISLINKBATTLE]
+ ld hl, W_GRASSRATE
+ ld a, [wLinkState]
and a
jr nz, .rival
ld hl, W_RIVALNAME ; wd34a
diff --git a/engine/battle/animations.asm b/engine/battle/animations.asm
index d84edeb8..d4cebb44 100755
--- a/engine/battle/animations.asm
+++ b/engine/battle/animations.asm
@@ -528,9 +528,9 @@ Func_78e23: ; 78e23 (1e:4e23)
ld [wcc79], a
ld b, $e4
ld a, [W_ANIMATIONID] ; W_ANIMATIONID
- cp ANIM_AA
+ cp TRADE_BALL_DROP_ANIM
jr c, .asm_78e3f
- cp ANIM_AD + 1
+ cp TRADE_BALL_POOF_ANIM + 1
jr nc, .asm_78e3f
ld b, $f0
.asm_78e3f
@@ -700,13 +700,13 @@ AnimationIdSpecialEffects: ; 78ef5 (1e:4ef5)
db ROCK_SLIDE
dw DoRockSlideSpecialEffects
- db ANIM_AA
+ db TRADE_BALL_DROP_ANIM
dw Func_79041
- db ANIM_AB
+ db TRADE_BALL_SHAKE_ANIM
dw Func_7904c
- db ANIM_AC
+ db TRADE_BALL_TILT_ANIM
dw Func_7907c
db TOSS_ANIM
@@ -960,9 +960,9 @@ Func_7907c ; 507C
ld c,5
call DelayFrames
pop bc
- ld a,[$ffae] ; background scroll X
+ ld a,[hSCX] ; background scroll X
sub a,8 ; scroll to the left
- ld [$ffae],a
+ ld [hSCX],a
pop de
jr .loop
@@ -1307,9 +1307,9 @@ AnimationSlideMonUp: ; 7927a (1e:527a)
AnimationSlideMonDown: ; 79297 (1e:5297)
; Slides the mon's sprite down out of the screen.
xor a
- call Func_79842
+ call GetTileIDList
.asm_7929b
- call Func_79820
+ call GetMonSpriteTileMapPointerFromRowCount
push bc
push de
call Func_79aae
@@ -1498,8 +1498,8 @@ AnimationFlashEnemyMonPic: ; 79398 (1e:5398)
AnimationShowMonPic: ; 7939e (1e:539e)
xor a
- call Func_79842
- call Func_79820
+ call GetTileIDList
+ call GetMonSpriteTileMapPointerFromRowCount
call Func_79aae
jp Delay3
@@ -1533,7 +1533,7 @@ AnimationShakeBackAndForth: ; 793b1 (1e:53b1)
push af
push hl
push hl
- call Func_79842
+ call GetTileIDList
pop hl
call Func_79aae
call Delay3
@@ -1541,7 +1541,7 @@ AnimationShakeBackAndForth: ; 793b1 (1e:53b1)
ld bc, $0709
call ClearScreenArea
pop af
- call Func_79842
+ call GetTileIDList
pop hl
call Func_79aae
call Delay3
@@ -1568,7 +1568,7 @@ AnimationMoveMonHorizontally: ; 793f9 (1e:53f9)
.asm_79407
xor a
push hl
- call Func_79842
+ call GetTileIDList
pop hl
call Func_79aae
ld c, $3
@@ -1863,8 +1863,8 @@ AnimationSlideMonDownAndHide: ; 795c9 (1e:55c9)
call AnimationHideMonPic
pop af
push af
- call Func_79842
- call Func_79820
+ call GetTileIDList
+ call GetMonSpriteTileMapPointerFromRowCount
call Func_79aae
ld c, $8
call DelayFrames
@@ -2133,8 +2133,8 @@ Func_79793: ; 79793 (1e:5793)
call GetMonHeader
predef LoadMonBackPic
xor a
- call Func_79842
- call Func_79820
+ call GetTileIDList
+ call GetMonSpriteTileMapPointerFromRowCount
call Func_79aae
pop af
ld [wBattleMonSpecies2], a
@@ -2194,37 +2194,46 @@ Func_7980c: ; 7980c (1e:580c)
pop hl
ret
-Func_79820: ; 79820 (1e:5820)
+; puts the tile map destination address of a mon sprite in hl, given the row count in b
+; The usual row count is 7, but it may be smaller when sliding a mon sprite in/out,
+; in order to show only a portion of the mon sprite.
+GetMonSpriteTileMapPointerFromRowCount: ; 79820 (1e:5820)
push de
- ld a, [H_WHOSETURN] ; $fff3
+ ld a, [H_WHOSETURN]
and a
- jr nz, .asm_7982a
- ld a, $65
- jr .asm_7982c
-.asm_7982a
- ld a, $c
-.asm_7982c
+ jr nz, .enemyTurn
+ ld a, 20 * 5 + 1
+ jr .next
+.enemyTurn
+ ld a, 12
+.next
ld hl, wTileMap
ld e, a
- ld d, $0
+ ld d, 0
add hl, de
- ld a, $7
+ ld a, 7
sub b
and a
- jr z, .asm_79840
- ld de, $14
-.asm_7983c
+ jr z, .done
+ ld de, 20
+.loop
add hl, de
dec a
- jr nz, .asm_7983c
-.asm_79840
+ jr nz, .loop
+.done
pop de
ret
-Func_79842: ; 79842 (1e:5842)
- ld hl, PointerTable_79aea ; $5aea
+; Input:
+; a = tile ID list index
+; Output:
+; de = tile ID list pointer
+; b = number of rows
+; c = number of columns
+GetTileIDList: ; 79842 (1e:5842)
+ ld hl, TileIDListPointerTable
ld e, a
- ld d, $0
+ ld d, 0
add hl, de
add hl, de
add hl, de
@@ -2486,13 +2495,14 @@ MoveSoundTable: ; 798bc (1e:58bc)
db (SFX_08_4b - SFX_Headers_08) / 3,$00,$80
Func_79aae: ; 79aae (1e:5aae)
- ld a, [H_WHOSETURN] ; $fff3
+ ld a, [H_WHOSETURN]
and a
- ld a, $31
+ ld a, $31 ; base tile ID of player mon sprite
jr z, .asm_79ab6
- xor a
+; enemy turn
+ xor a ; base tile ID of enemy mon sprite
.asm_79ab6
- ld [H_DOWNARROWBLINKCNT1], a ; $ff8b
+ ld [hBaseTileID], a
jr asm_79acb
Func_79aba: ; 79aba (1e:5aba)
@@ -2506,34 +2516,36 @@ Func_79aba: ; 79aba (1e:5aba)
ld de, Unknown_79b1b ; $5b1b
asm_79acb: ; 79acb (1e:5acb)
xor a
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
-Func_79ace: ; 79ace (1e:5ace)
+; b = number of rows
+; c = number of columns
+CopyTileIDs: ; 79ace (1e:5ace)
push hl
-.asm_79acf
+.rowLoop
push bc
push hl
- ld a, [H_DOWNARROWBLINKCNT1] ; $ff8b
+ ld a, [hBaseTileID]
ld b, a
-.asm_79ad4
+.columnLoop
ld a, [de]
add b
inc de
ld [hli], a
dec c
- jr nz, .asm_79ad4
+ jr nz, .columnLoop
pop hl
- ld bc, $14
+ ld bc, 20
add hl, bc
pop bc
dec b
- jr nz, .asm_79acf
+ jr nz, .rowLoop
ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
pop hl
ret
-PointerTable_79aea: ; 79aea (1e:5aea)
+TileIDListPointerTable: ; 79aea (1e:5aea)
dw Unknown_79b24
db $77
dw Unknown_79b55
@@ -2552,34 +2564,79 @@ PointerTable_79aea: ; 79aea (1e:5aea)
db $3C
Unknown_79b02: ; 79b02 (1e:5b02)
- db $31,$38,$46,$54,$5B,$32,$39,$47,$55,$5C,$34,$3B,$49,$57,$5E,$36,$3D,$4B,$59,$60,$37,$3E,$4C,$5A,$61
+ db $31,$38,$46,$54,$5B
+ db $32,$39,$47,$55,$5C
+ db $34,$3B,$49,$57,$5E
+ db $36,$3D,$4B,$59,$60
+ db $37,$3E,$4C,$5A,$61
Unknown_79b1b: ; 79b1b (1e:5b1b)
- db $31,$46,$5B,$34,$49,$5E,$37,$4C,$61
+ db $31,$46,$5B
+ db $34,$49,$5E
+ db $37,$4C,$61
Unknown_79b24: ; 79b24 (1e:5b24)
- db $00,$07,$0E,$15,$1C,$23,$2A,$01,$08,$0F,$16,$1D,$24,$2B,$02,$09,$10,$17,$1E,$25,$2C,$03,$0A,$11,$18,$1F,$26,$2D,$04,$0B,$12,$19,$20,$27,$2E,$05,$0C,$13,$1A,$21,$28,$2F,$06,$0D,$14,$1B,$22,$29,$30
+ db $00,$07,$0E,$15,$1C,$23,$2A
+ db $01,$08,$0F,$16,$1D,$24,$2B
+ db $02,$09,$10,$17,$1E,$25,$2C
+ db $03,$0A,$11,$18,$1F,$26,$2D
+ db $04,$0B,$12,$19,$20,$27,$2E
+ db $05,$0C,$13,$1A,$21,$28,$2F
+ db $06,$0D,$14,$1B,$22,$29,$30
Unknown_79b55: ; 79b55 (1e:5b55)
- db $00,$07,$0E,$15,$1C,$23,$2A,$01,$08,$0F,$16,$1D,$24,$2B,$03,$0A,$11,$18,$1F,$26,$2D,$04,$0B,$12,$19,$20,$27,$2E,$05,$0C,$13,$1A,$21,$28,$2F
+ db $00,$07,$0E,$15,$1C,$23,$2A
+ db $01,$08,$0F,$16,$1D,$24,$2B
+ db $03,$0A,$11,$18,$1F,$26,$2D
+ db $04,$0B,$12,$19,$20,$27,$2E
+ db $05,$0C,$13,$1A,$21,$28,$2F
Unknown_79b78: ; 79b78 (1e:5b78)
- db $00,$07,$0E,$15,$1C,$23,$2A,$02,$09,$10,$17,$1E,$25,$2C,$04,$0B,$12,$19,$20,$27,$2E
+ db $00,$07,$0E,$15,$1C,$23,$2A
+ db $02,$09,$10,$17,$1E,$25,$2C
+ db $04,$0B,$12,$19,$20,$27,$2E
Unknown_79b8d: ; 79b8d (1e:5b8d)
- db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$19,$00,$02,$06,$0B,$10,$14,$1A,$00,$00,$07,$0C,$11,$15,$1B,$00,$03,$08,$0D,$12,$16,$1C,$00,$04,$09,$0E,$13,$17,$1D,$1F,$05,$0A,$0F,$01,$18,$1E,$20
+ db $00,$00,$00,$00,$00,$00,$00
+ db $00,$00,$00,$00,$00,$19,$00
+ db $02,$06,$0B,$10,$14,$1A,$00
+ db $00,$07,$0C,$11,$15,$1B,$00
+ db $03,$08,$0D,$12,$16,$1C,$00
+ db $04,$09,$0E,$13,$17,$1D,$1F
+ db $05,$0A,$0F,$01,$18,$1E,$20
Unknown_79bbe: ; 79bbe (1e:5bbe)
- db $00,$00,$00,$30,$00,$37,$00,$00,$00,$2B,$31,$34,$38,$3D,$21,$26,$2C,$01,$35,$39,$3E,$22,$27,$2D,$32,$36,$01,$00,$23,$28,$2E,$33,$01,$3A,$00,$24,$29,$2F,$01,$01,$3B,$00,$25,$2A,$01,$01,$01,$3C,$00
+ db $00,$00,$00,$30,$00,$37,$00
+ db $00,$00,$2B,$31,$34,$38,$3D
+ db $21,$26,$2C,$01,$35,$39,$3E
+ db $22,$27,$2D,$32,$36,$01,$00
+ db $23,$28,$2E,$33,$01,$3A,$00
+ db $24,$29,$2F,$01,$01,$3B,$00
+ db $25,$2A,$01,$01,$01,$3C,$00
Unknown_79bef: ; 79bef (1e:5bef)
- db $00,$00,$00,$00,$00,$00,$00,$00,$00,$47,$4D,$00,$00,$00,$00,$00,$48,$4E,$52,$56,$5B,$3F,$43,$49,$4F,$53,$57,$5C,$40,$44,$4A,$50,$54,$58,$00,$41,$45,$4B,$51,$4C,$59,$5D,$42,$46,$4C,$4C,$55,$5A,$5E
+ db $00,$00,$00,$00,$00,$00,$00
+ db $00,$00,$47,$4D,$00,$00,$00
+ db $00,$00,$48,$4E,$52,$56,$5B
+ db $3F,$43,$49,$4F,$53,$57,$5C
+ db $40,$44,$4A,$50,$54,$58,$00
+ db $41,$45,$4B,$51,$4C,$59,$5D
+ db $42,$46,$4C,$4C,$55,$5A,$5E
Unknown_79c20: ; 79c20 (1e:5c20)
- db $31,$32,$32,$32,$32,$33,$34,$35,$36,$36,$37,$38,$34,$39,$3A,$3A,$3B,$38,$3C,$3D,$3E,$3E,$3F,$40,$41,$42,$43,$43,$44,$45,$46,$47,$43,$48,$49,$4A,$41,$43,$4B,$4C,$4D,$4E,$4F,$50,$50,$50,$51,$52
+ db $31,$32,$32,$32,$32,$33
+ db $34,$35,$36,$36,$37,$38
+ db $34,$39,$3A,$3A,$3B,$38
+ db $3C,$3D,$3E,$3E,$3F,$40
+ db $41,$42,$43,$43,$44,$45
+ db $46,$47,$43,$48,$49,$4A
+ db $41,$43,$4B,$4C,$4D,$4E
+ db $4F,$50,$50,$50,$51,$52
Unknown_79c50: ; 79c50 (1e:5c50)
- db $43,$55,$56,$53,$53,$53,$53,$53,$53,$53,$53,$53,$43,$57,$58,$54,$54,$54,$54,$54,$54,$54,$54,$54,$43,$59,$5A,$43,$43,$43,$43,$43,$43,$43,$43,$43
+ db $43,$55,$56,$53,$53,$53,$53,$53,$53,$53,$53,$53
+ db $43,$57,$58,$54,$54,$54,$54,$54,$54,$54,$54,$54
+ db $43,$59,$5A,$43,$43,$43,$43,$43,$43,$43,$43,$43
AnimationLeavesFalling: ; 79c74 (1e:5c74)
; Makes leaves float down from the top of the screen. This is used
@@ -2743,7 +2800,7 @@ AnimationShakeEnemyHUD: ; 79d77 (1e:5d77)
ld bc, 7 * 7
call CopyVideoData
xor a
- ld [$ffae], a
+ ld [hSCX], a
ld hl, vBGMap0
call Func_79e0d
ld a, $90
@@ -2776,34 +2833,36 @@ AnimationShakeEnemyHUD: ; 79d77 (1e:5d77)
ld hl, vBGMap1
jp Func_79e0d
-Func_79dda: ; 79dda (1e:5dda)
+; b = tile ID list index
+; c = base tile ID
+CopyTileIDsFromList: ; 79dda (1e:5dda)
call GetPredefRegisters
ld a, c
- ld [H_DOWNARROWBLINKCNT1], a ; $ff8b
+ ld [hBaseTileID], a
ld a, b
push hl
- call Func_79842
+ call GetTileIDList
pop hl
- jp Func_79ace
+ jp CopyTileIDs
Func_79de9: ; 79de9 (1e:5de9)
- ld a, [$ffae]
+ ld a, [hSCX]
ld [wTrainerSpriteOffset], a
.asm_79dee
ld a, [wTrainerSpriteOffset]
add d
- ld [$ffae], a
+ ld [hSCX], a
ld c, $2
call DelayFrames
ld a, [wTrainerSpriteOffset]
sub d
- ld [$ffae], a
+ ld [hSCX], a
ld c, $2
call DelayFrames
dec e
jr nz, .asm_79dee
ld a, [wTrainerSpriteOffset]
- ld [$ffae], a
+ ld [hSCX], a
ret
Func_79e0d: ; 79e0d (1e:5e0d)
diff --git a/engine/battle/core.asm b/engine/battle/core.asm
index 381c82b1..0c506e2b 100755
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -99,7 +99,7 @@ SpecialEffectsCont: ; 3c049 (f:4049)
SlidePlayerAndEnemySilhouettesOnScreen: ; 3c04c (f:404c)
call LoadPlayerBackPic
ld a, $1 ; the usual text box at the bottom of the screen
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
hlCoord 1, 5
ld bc, $307
@@ -240,7 +240,7 @@ StartBattle: ; 3c11e (f:411e)
jr .findFirstAliveEnemyMonLoop
.foundFirstAliveEnemyMon
ld a, d
- ld [wcc3e], a
+ ld [wSerialExchangeNybbleReceiveData], a
ld a, [W_ISINBATTLE]
dec a ; is it a trainer battle?
call nz, EnemySendOutFirstMon ; if it is a trainer battle, send out enemy mon
@@ -345,8 +345,8 @@ StartBattle: ; 3c11e (f:411e)
; wild mon or link battle enemy ran from battle
EnemyRan: ; 3c202 (f:4202)
call LoadScreenTilesFromBuffer1
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
ld hl, WildRanText
jr nz, .printText
; link battle
@@ -431,11 +431,11 @@ MainInBattleLoop: ; 3c233 (f:4233)
jr nz, MainInBattleLoop ; if the player didn't select a move, jump
.selectEnemyMove
call SelectEnemyMove
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr nz, .noLinkBattle
; link battle
- ld a, [wcc3e]
+ ld a, [wSerialExchangeNybbleReceiveData]
cp $f
jp z, EnemyRan
cp $e
@@ -838,7 +838,7 @@ FaintEnemyPokemon ; 0x3c567
ld hl, W_PLAYERBATTSTATUS1
res AttackingMultipleTimes, [hl]
xor a
- ld [W_NUMHITS], a
+ ld [wPlayerNumHits], a
ld hl, wd065 ; clear enemy statuses
ld [hli], a
ld [hli], a
@@ -976,12 +976,12 @@ ReplaceFaintedEnemyMon: ; 3c664 (f:4664)
ld e, $30
call GetBattleHealthBarColor
callab DrawEnemyPokeballs
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr nz, .notLinkBattle
; link battle
call LinkBattleExchangeData
- ld a, [wcc3e]
+ ld a, [wSerialExchangeNybbleReceiveData]
cp $f
ret z
call LoadScreenTilesFromBuffer1
@@ -1009,14 +1009,14 @@ TrainerBattleVictory: ; 3c696 (f:4696)
ld hl, W_FLAGS_D733
set 1, [hl]
.notrival
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
ld a, b
call nz, PlayBattleVictoryMusic
ld hl, TrainerDefeatedText
call PrintText
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
ret z
call ScrollTrainerPicAfterBattle
ld c, $28
@@ -1096,7 +1096,7 @@ RemoveFaintedPlayerMon: ; 3c741 (f:4741)
ld [wd083], a
call WaitForSoundToFinish
.skipWaitForSound
- ld hl, wcd05
+ ld hl, wEnemyNumHits
ld [hli], a
ld [hl], a
ld [wBattleMonStatus], a
@@ -1136,7 +1136,7 @@ DoUseNextMonDialogue: ; 3c79b (f:479b)
hlCoord 13, 9
ld bc, $a0e
ld a, $14 ; yes/no text box
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
ld a, [wd12e]
cp $2 ; did the player choose NO?
@@ -1169,8 +1169,8 @@ ChooseNextMon: ; 3c7d8 (f:47d8)
.monChosen
call HasMonFainted
jr z, .goBackToPartyMenu ; if mon fainted, you have to choose another
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr nz, .notLinkBattle
inc a
ld [wcd6a], a
@@ -1204,8 +1204,8 @@ ChooseNextMon: ; 3c7d8 (f:47d8)
; called when player is out of usable mons.
; prints approriate lose message, sets carry flag if player blacked out (special case for initial rival fight)
HandlePlayerBlackOut: ; 3c837 (f:4837)
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr z, .notSony1Battle
ld a, [W_CUROPPONENT]
cp $c8 + SONY1
@@ -1225,8 +1225,8 @@ HandlePlayerBlackOut: ; 3c837 (f:4837)
ld b, $0
call GoPAL_SET
ld hl, PlayerBlackedOutText2
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr nz, .noLinkBattle
ld hl, LinkBattleLostText
.noLinkBattle
@@ -1385,10 +1385,10 @@ EnemySendOutFirstMon: ; 3c92a (f:492a)
call SlideTrainerPicOffScreen
call PrintEmptyString
call SaveScreenTilesToBuffer1
- ld a,[W_ISLINKBATTLE]
- cp 4
+ ld a,[wLinkState]
+ cp LINK_STATE_BATTLING
jr nz,.next
- ld a,[wcc3e]
+ ld a,[wSerialExchangeNybbleReceiveData]
sub 4
ld [wWhichPokemon],a
jr .next3
@@ -1442,8 +1442,8 @@ EnemySendOutFirstMon: ; 3c92a (f:492a)
ld a,[wPartyCount]
dec a
jr z,.next4
- ld a,[W_ISLINKBATTLE]
- cp 4
+ ld a,[wLinkState]
+ cp LINK_STATE_BATTLING
jr z,.next4
ld a,[W_OPTIONS]
bit 6,a
@@ -1453,7 +1453,7 @@ EnemySendOutFirstMon: ; 3c92a (f:492a)
hlCoord 0, 7
ld bc,$0801
ld a,$14
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID
ld a,[wCurrentMenuItem]
and a
@@ -1572,8 +1572,8 @@ TryRunningFromBattle: ; 3cab9 (f:4ab9)
ld a, [W_BATTLETYPE]
cp $2
jp z, .canEscape ; jump if it's a safari battle
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jp z, .canEscape
ld a, [W_ISINBATTLE]
dec a
@@ -1654,8 +1654,8 @@ TryRunningFromBattle: ; 3cab9 (f:4ab9)
and a ; reset carry
ret
.canEscape
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
ld a, $2
jr nz, .playSound
; link battle
@@ -1666,7 +1666,7 @@ TryRunningFromBattle: ; 3cab9 (f:4ab9)
ld [wPlayerMoveListIndex], a
call LinkBattleExchangeData
call LoadScreenTilesFromBuffer1
- ld a, [wcc3e]
+ ld a, [wSerialExchangeNybbleReceiveData]
cp $f
ld a, $2
jr z, .playSound
@@ -2082,7 +2082,7 @@ DisplayBattleMenu: ; 3ceb3 (f:4eb3)
jr nz, .menuselected
ld a, $1b ; regular menu id
.menuselected
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
ld a, [W_BATTLETYPE]
dec a
@@ -2234,8 +2234,8 @@ DisplayBattleMenu: ; 3ceb3 (f:4eb3)
jp nz, PartyMenuOrRockOrRun
; either the bag (normal battle) or bait (safari battle) was selected
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr nz, .notLinkBattle
; can't use items in link battles
@@ -2401,7 +2401,7 @@ PartyMenuOrRockOrRun:
jr .checkIfPartyMonWasSelected
.partyMonWasSelected
ld a, $c ; switch/stats/cancel menu
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
ld hl, wTopMenuItemY
ld a, $c
@@ -2620,8 +2620,8 @@ MoveSelectionMenu: ; 3d219 (f:5219)
dec a
ld b, $c3
jr z, .matchedkeyspicked
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr z, .matchedkeyspicked
ld a, [W_FLAGS_D733]
bit 0, a
@@ -2974,14 +2974,14 @@ TypeText: ; 3d55f (f:555f)
db "TYPE@"
SelectEnemyMove: ; 3d564 (f:5564)
- ld a, [W_ISLINKBATTLE]
+ ld a, [wLinkState]
sub $4
jr nz, .noLinkBattle
; link battle
call SaveScreenTilesToBuffer1
call LinkBattleExchangeData
call LoadScreenTilesFromBuffer1
- ld a, [wcc3e]
+ ld a, [wSerialExchangeNybbleReceiveData]
cp $e
jp z, .asm_3d601
cp $d
@@ -3068,7 +3068,7 @@ SelectEnemyMove: ; 3d564 (f:5564)
; this appears to exchange data with the other gameboy during link battles
LinkBattleExchangeData: ; 3d605 (f:5605)
ld a, $ff
- ld [wcc3e], a
+ ld [wSerialExchangeNybbleReceiveData], a
ld a, [wPlayerMoveListIndex]
cp $f ; is the player running from battle?
jr z, .asm_3d630
@@ -3091,24 +3091,24 @@ LinkBattleExchangeData: ; 3d605 (f:5605)
.asm_3d62f
ld a, b
.asm_3d630
- ld [wcc42], a
+ ld [wSerialExchangeNybbleSendData], a
callab PrintWaitingText
.asm_3d63b
- call Func_22c3
+ call Serial_ExchangeNybble
call DelayFrame
- ld a, [wcc3e]
+ ld a, [wSerialExchangeNybbleReceiveData]
inc a
jr z, .asm_3d63b
ld b, $a
.asm_3d649
call DelayFrame
- call Func_22c3
+ call Serial_ExchangeNybble
dec b
jr nz, .asm_3d649
ld b, $a
.asm_3d654
call DelayFrame
- call Func_22ed
+ call Serial_SendZeroByte
dec b
jr nz, .asm_3d654
ret
@@ -3296,7 +3296,7 @@ MirrorMoveCheck
ld hl,MultiHitText
call PrintText
xor a
- ld [W_NUMHITS],a
+ ld [wPlayerNumHits],a
.executeOtherEffects
ld a,[W_PLAYERMOVEEFFECT]
and a
@@ -3529,7 +3529,7 @@ CheckPlayerStatusConditions: ; 3d854 (f:5854)
ld a,[hli]
ld b,a
ld c,[hl]
- ld hl,wd075
+ ld hl,wPlayerBideAccumulatedDamage + 1
ld a,[hl]
add c ; acumulate damage taken
ld [hld],a
@@ -3548,7 +3548,7 @@ CheckPlayerStatusConditions: ; 3d854 (f:5854)
call PrintText
ld a,1
ld [W_PLAYERMOVEPOWER],a
- ld hl,wd075
+ ld hl,wPlayerBideAccumulatedDamage + 1
ld a,[hld]
add a
ld b,a
@@ -3998,8 +3998,8 @@ OHKOText: ; 3dc83 (f:5c83)
CheckForDisobedience: ; 3dc88 (f:5c88)
xor a
ld [wcced], a
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr nz, .checkIfMonIsTraded
ld a, $1
and a
@@ -4424,8 +4424,8 @@ GetDamageVarsForEnemyAttack: ; 3de75 (f:5e75)
GetEnemyMonStat: ; 3df1c (f:5f1c)
push de
push bc
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr nz, .notLinkBattle
ld hl, wEnemyMon1Stats
dec c
@@ -5627,11 +5627,11 @@ ExecuteEnemyMove: ; 3e6bc (f:66bc)
jp z, ExecuteEnemyMoveDone
call PrintGhostText
jp z, ExecuteEnemyMoveDone
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr nz, .executeEnemyMove
ld b, $1
- ld a, [wcc3e]
+ ld a, [wSerialExchangeNybbleReceiveData]
cp $e
jr z, .executeEnemyMove
cp $4
@@ -5819,7 +5819,7 @@ asm_3e7ef: ; 3e7ef (f:67ef)
ld hl, HitXTimesText
call PrintText
xor a
- ld [wcd05], a
+ ld [wEnemyNumHits], a
.asm_3e873
ld a, [W_ENEMYMOVEEFFECT]
and a
@@ -6028,7 +6028,7 @@ CheckEnemyStatusConditions: ; 3e88f (f:688f)
ld a, [hli]
ld b, a
ld c, [hl]
- ld hl, wcd06
+ ld hl, wEnemyBideAccumulatedDamage + 1
ld a, [hl]
add c
ld [hld], a
@@ -6047,7 +6047,7 @@ CheckEnemyStatusConditions: ; 3e88f (f:688f)
call PrintText
ld a, $1
ld [W_ENEMYMOVEPOWER], a
- ld hl, wcd06
+ ld hl, wEnemyBideAccumulatedDamage + 1
ld a, [hld]
add a
ld b, a
@@ -6152,8 +6152,8 @@ GetCurrentMove: ; 3eabe (f:6abe)
jp CopyStringToCF4B
LoadEnemyMonData: ; 3eb01 (f:6b01)
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jp z, LoadEnemyMonFromParty
ld a, [wEnemyMonSpecies2]
ld [wEnemyMonSpecies], a
@@ -6312,8 +6312,8 @@ LoadEnemyMonData: ; 3eb01 (f:6b01)
; calls BattleTransition to show the battle transition animation and initializes some battle variables
DoBattleTransitionAndInitBattleVariables: ; 3ec32 (f:6c32)
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr nz, .next
; link battle
xor a
@@ -6616,8 +6616,8 @@ CalculateModifiedStat: ; 3eda5 (f:6da5)
ret
ApplyBadgeStatBoosts: ; 3ee19 (f:6e19)
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
ret z ; return if link battle
ld a, [W_OBTAINEDBADGES]
ld b, a
@@ -6706,19 +6706,19 @@ PrintEmptyString: ; 3ee94 (f:6e94)
BattleRandom:
; Link battles use a shared PRNG.
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jp nz, Random
push hl
push bc
- ld a, [wLinkBattleRNCount]
+ ld a, [wLinkBattleRandomNumberListIndex]
ld c, a
ld b, 0
- ld hl, wd148
+ ld hl, wLinkBattleRandomNumberList
add hl, bc
inc a
- ld [wLinkBattleRNCount], a
+ ld [wLinkBattleRandomNumberListIndex], a
cp 9
ld a, [hl]
pop bc
@@ -6732,8 +6732,9 @@ BattleRandom:
; point to seed 0 so we pick the first number the next time
xor a
- ld [wLinkBattleRNCount], a
- ld hl, wd148
+ ld [wLinkBattleRandomNumberListIndex], a
+
+ ld hl, wLinkBattleRandomNumberList
ld b, 9
.loop
ld a, [hl]
@@ -6939,7 +6940,7 @@ _LoadTrainerPic: ; 3f04b (f:704b)
ld e, a
ld a, [wd034]
ld d, a ; de contains pointer to trainer pic
- ld a, [W_ISLINKBATTLE]
+ ld a, [wLinkState]
and a
ld a, Bank(TrainerPics) ; this is where all the trainer pics are (not counting Red's)
jr z, .loadSprite
@@ -7698,8 +7699,8 @@ StatModifierDownEffect: ; 3f54c (f:754c)
ld hl, wPlayerMonStatMods
ld de, W_ENEMYMOVEEFFECT
ld bc, W_PLAYERBATTSTATUS1
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr z, .statModifierDownEffect
call BattleRandom
cp $40 ; 1/4 chance to miss by in regular battle
@@ -7934,13 +7935,13 @@ StatModifierRatios: ; 3f6cb (f:76cb)
BideEffect: ; 3f6e5 (f:76e5)
ld hl, W_PLAYERBATTSTATUS1
- ld de, W_NUMHITS
+ ld de, wPlayerBideAccumulatedDamage
ld bc, wPlayerNumAttacksLeft
ld a, [H_WHOSETURN]
and a
jr z, .bideEffect
ld hl, W_ENEMYBATTSTATUS1
- ld de, wcd05
+ ld de, wEnemyBideAccumulatedDamage
ld bc, wEnemyNumAttacksLeft
.bideEffect
set StoringEnergy, [hl] ; mon is now using bide
@@ -8096,13 +8097,13 @@ WasBlownAwayText: ; 3f80c (f:780c)
TwoToFiveAttacksEffect: ; 3f811 (f:7811)
ld hl, W_PLAYERBATTSTATUS1
ld de, wPlayerNumAttacksLeft
- ld bc, W_NUMHITS
+ ld bc, wPlayerNumHits
ld a, [H_WHOSETURN]
and a
jr z, .twoToFiveAttacksEffect
ld hl, W_ENEMYBATTSTATUS1
ld de, wEnemyNumAttacksLeft
- ld bc, wcd05
+ ld bc, wEnemyNumHits
.twoToFiveAttacksEffect
bit AttackingMultipleTimes, [hl] ; is mon attacking multiple times?
ret nz
@@ -8394,8 +8395,8 @@ MimicEffect: ; 3f9ed (f:79ed)
ld hl, wBattleMonMoves
ld a, [W_PLAYERBATTSTATUS1]
jr nz, .asm_3fa13
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr nz, .asm_3fa3a
ld hl, wEnemyMonMoves
ld a, [W_ENEMYBATTSTATUS1]
@@ -8500,8 +8501,8 @@ DisableEffect: ; 3fa8a (f:7a8a)
and a
ld hl, wBattleMonPP
jr nz, .asm_3facf
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
pop hl
jr nz, .asm_3fae1
push hl
@@ -8629,7 +8630,7 @@ ParalyzedMayNotAttackText: ; 3fb74 (f:7b74)
CheckTargetSubstitute: ; 3fb79 (f:7b79)
push hl
ld hl, W_ENEMYBATTSTATUS2
- ld a, [$fff3]
+ ld a, [H_WHOSETURN]
and a
jr z, .next1
ld hl, W_PLAYERBATTSTATUS2
diff --git a/engine/battle/d.asm b/engine/battle/d.asm
index 94a07eb6..7320da29 100755
--- a/engine/battle/d.asm
+++ b/engine/battle/d.asm
@@ -9,7 +9,7 @@ DisplayLinkBattleVersusTextBox: ; 372d6 (d:72d6)
ld de, wPlayerName
call PlaceString
hlCoord 4, 10
- ld de, W_GRASSRATE ; enemy name
+ ld de, wLinkEnemyTrainerName
call PlaceString
; place bold "VS" tiles between the names
hlCoord 9, 8
diff --git a/engine/battle/e.asm b/engine/battle/e.asm
index dd227be7..9f93baa6 100755
--- a/engine/battle/e.asm
+++ b/engine/battle/e.asm
@@ -700,7 +700,7 @@ Func_39c37: ; 39c37 (e:5c37)
ReadTrainer: ; 39c53 (e:5c53)
; don't change any moves in a link battle
- ld a,[W_ISLINKBATTLE]
+ ld a,[wLinkState]
and a
ret nz
@@ -872,8 +872,8 @@ TrainerAI: ; 3a52e (e:652e)
ld a,[W_ISINBATTLE]
dec a
ret z ; if not a trainer, we're done here
- ld a,[W_ISLINKBATTLE]
- cp 4
+ ld a,[wLinkState]
+ cp LINK_STATE_BATTLING
ret z
ld a,[W_TRAINERCLASS] ; what trainer class is this?
dec a
@@ -1230,8 +1230,8 @@ SwitchEnemyMon: ; 3a74b (e:674b)
xor a
ld [wd11d],a
- ld a,[W_ISLINKBATTLE]
- cp 4
+ ld a,[wLinkState]
+ cp LINK_STATE_BATTLING
ret z
scf
ret
diff --git a/engine/cable_club.asm b/engine/cable_club.asm
index a8a1f90f..43900694 100755
--- a/engine/cable_club.asm
+++ b/engine/cable_club.asm
@@ -1,4 +1,7 @@
-Func_5317: ; 5317 (1:5317)
+; performs the appropriate action when the player uses the gameboy on the table in the Colosseum or Trade Centre
+; In the Colosseum, it starts a battle. In the Trade Centre, it displays the trade selection screen.
+; Before doing either action, it swaps random numbers, trainer names and party data with the other gameboy.
+CableClub_DoBattleOrTrade: ; 5317 (1:5317)
ld c, $50
call DelayFrames
call ClearScreen
@@ -7,286 +10,292 @@ Func_5317: ; 5317 (1:5317)
call LoadHpBarAndStatusTilePatterns
call LoadTrainerInfoTextBoxTiles
hlCoord 3, 8
- ld b, $2
- ld c, $c
- call Func_5ab3
+ ld b, 2
+ ld c, 12
+ call CableClub_TextBoxBorder
hlCoord 4, 10
- ld de, PleaseWaitString ; $550f
+ ld de, PleaseWaitString
call PlaceString
- ld hl, W_NUMHITS ; wd074
+ ld hl, wPlayerNumHits
xor a
ld [hli], a
ld [hl], $50
+ ; fall through
-Func_5345: ; 5345
- ld hl, wd152
- ld a, $fd
- ld b, $6
-.asm_534c
+; This is called after completing a trade.
+CableClub_DoBattleOrTradeAgain: ; 5345
+ ld hl, wSerialPlayerDataBlock
+ ld a, SERIAL_PREAMBLE_BYTE
+ ld b, 6
+.writePlayeDataBlockPreambleLoop
ld [hli], a
dec b
- jr nz, .asm_534c
- ld hl, wd141
- ld a, $fd
- ld b, $7
-.asm_5357
+ jr nz, .writePlayeDataBlockPreambleLoop
+ ld hl, wSerialRandomNumberListBlock
+ ld a, SERIAL_PREAMBLE_BYTE
+ ld b, 7
+.writeRandomNumberListPreambleLoop
ld [hli], a
dec b
- jr nz, .asm_5357
- ld b, $a
-.asm_535d
+ jr nz, .writeRandomNumberListPreambleLoop
+ ld b, 10
+.generateRandomNumberListLoop
call Random
- cp $fd
- jr nc, .asm_535d
+ cp SERIAL_PREAMBLE_BYTE ; all the random numbers have to be less than the preamble byte
+ jr nc, .generateRandomNumberListLoop
ld [hli], a
dec b
- jr nz, .asm_535d
- ld hl, wTileMapBackup
- ld a, $fd
+ jr nz, .generateRandomNumberListLoop
+ ld hl, wSerialPartyMonsPatchList
+ ld a, SERIAL_PREAMBLE_BYTE
ld [hli], a
ld [hli], a
ld [hli], a
ld b, $c8
xor a
-.asm_5373
+.zeroPlayerDataPatchListLoop
ld [hli], a
dec b
- jr nz, .asm_5373
- ld hl, W_GRASSRATE ; W_GRASSRATE
- ld bc, $1a9
-.asm_537d
+ jr nz, .zeroPlayerDataPatchListLoop
+ ld hl, W_GRASSRATE
+ ld bc, W_TRAINERHEADERPTR - W_GRASSRATE
+.zeroEnemyPartyLoop
xor a
ld [hli], a
dec bc
ld a, b
or c
- jr nz, .asm_537d
+ jr nz, .zeroEnemyPartyLoop
ld hl, wPartyMons - 1
- ld de, wTileMapBackup + 10
- ld bc, $0
-.asm_538d
+ ld de, wSerialPartyMonsPatchList + 10
+ ld bc, 0
+.patchPartyMonsLoop
inc c
ld a, c
- cp $fd
- jr z, .asm_53a9
+ cp SERIAL_PREAMBLE_BYTE
+ jr z, .startPatchListPart2
ld a, b
- dec a
- jr nz, .asm_539c
+ dec a ; are we in part 2 of the patch list?
+ jr nz, .checkPlayerDataByte ; jump if in part 1
+; if we're in part 2
ld a, c
- cp $d
- jr z, .asm_53b2
-.asm_539c
+ cp (wPartyMonOT - (wPartyMons - 1)) - (SERIAL_PREAMBLE_BYTE - 1)
+ jr z, .finishedPatchingPlayerData
+.checkPlayerDataByte
inc hl
ld a, [hl]
- cp $fe
- jr nz, .asm_538d
+ cp SERIAL_NO_DATA_BYTE
+ jr nz, .patchPartyMonsLoop
+; if the player data byte matches SERIAL_NO_DATA_BYTE, patch it with $FF and record the offset in the patch list
ld a, c
ld [de], a
inc de
ld [hl], $ff
- jr .asm_538d
-.asm_53a9
- ld a, $ff
- ld [de], a
+ jr .patchPartyMonsLoop
+.startPatchListPart2
+ ld a, SERIAL_PATCH_LIST_PART_TERMINATOR
+ ld [de], a ; end of part 1
inc de
ld bc, $100
- jr .asm_538d
-.asm_53b2
- ld a, $ff
- ld [de], a
- call Func_227f
- ld a, [$ffaa]
- cp $2
- jr nz, .asm_53d2
+ jr .patchPartyMonsLoop
+.finishedPatchingPlayerData
+ ld a, SERIAL_PATCH_LIST_PART_TERMINATOR
+ ld [de], a ; end of part 2
+ call Serial_SyncAndExchangeNybble
+ ld a, [hSerialConnectionStatus]
+ cp USING_INTERNAL_CLOCK
+ jr nz, .skipSendingTwoZeroBytes
+; if using internal clock
+; send two zero bytes for syncing purposes?
call Delay3
xor a
- ld [$ffac], a
- ld a, $81
- ld [$ff02], a
+ ld [hSerialSendData], a
+ ld a, START_TRANSFER_INTERNAL_CLOCK
+ ld [rSC], a
call DelayFrame
xor a
- ld [$ffac], a
- ld a, $81
- ld [$ff02], a
-.asm_53d2
+ ld [hSerialSendData], a
+ ld a, START_TRANSFER_INTERNAL_CLOCK
+ ld [rSC], a
+.skipSendingTwoZeroBytes
call Delay3
- ld a, $8
- ld [rIE], a ; $ffff
- ld hl, wd141
- ld de, wTileMapBackup2
+ ld a, (1 << SERIAL)
+ ld [rIE], a
+ ld hl, wSerialRandomNumberListBlock
+ ld de, wSerialOtherGameboyRandomNumberListBlock
ld bc, $11
- call Func_216f
- ld a, $fe
+ call Serial_ExchangeBytes
+ ld a, SERIAL_NO_DATA_BYTE
ld [de], a
- ld hl, wd152
- ld de, wd893
+ ld hl, wSerialPlayerDataBlock
+ ld de, wSerialEnemyDataBlock
ld bc, $1a8
- call Func_216f
- ld a, $fe
+ call Serial_ExchangeBytes
+ ld a, SERIAL_NO_DATA_BYTE
ld [de], a
- ld hl, wTileMapBackup
- ld de, wTileMapBackup + 200
+ ld hl, wSerialPartyMonsPatchList
+ ld de, wSerialEnemyMonsPatchList
ld bc, $c8
- call Func_216f
- ld a, $d
- ld [rIE], a ; $ffff
+ call Serial_ExchangeBytes
+ ld a, (1 << SERIAL) | (1 << TIMER) | (1 << VBLANK)
+ ld [rIE], a
ld a, $ff
call PlaySound
- ld a, [$ffaa]
- cp $2
- jr z, .asm_5431
- ld hl, wTileMapBackup2
-.asm_5415
+ ld a, [hSerialConnectionStatus]
+ cp USING_INTERNAL_CLOCK
+ jr z, .skipCopyingRandomNumberList ; the list generated by the gameboy clocking the connection is used by both gameboys
+ ld hl, wSerialOtherGameboyRandomNumberListBlock
+.findStartOfRandomNumberListLoop
ld a, [hli]
and a
- jr z, .asm_5415
- cp $fd
- jr z, .asm_5415
- cp $fe
- jr z, .asm_5415
+ jr z, .findStartOfRandomNumberListLoop
+ cp SERIAL_PREAMBLE_BYTE
+ jr z, .findStartOfRandomNumberListLoop
+ cp SERIAL_NO_DATA_BYTE
+ jr z, .findStartOfRandomNumberListLoop
dec hl
- ld de, wd148
- ld c, $a
-.asm_5427
+ ld de, wLinkBattleRandomNumberList
+ ld c, 10
+.copyRandomNumberListLoop
ld a, [hli]
- cp $fe
- jr z, .asm_5427
+ cp SERIAL_NO_DATA_BYTE
+ jr z, .copyRandomNumberListLoop
ld [de], a
inc de
dec c
- jr nz, .asm_5427
-.asm_5431
- ld hl, wd896
-.asm_5434
+ jr nz, .copyRandomNumberListLoop
+.skipCopyingRandomNumberList
+ ld hl, wSerialEnemyDataBlock + 3
+.findStartOfEnemyNameLoop
ld a, [hli]
and a
- jr z, .asm_5434
- cp $fd
- jr z, .asm_5434
- cp $fe
- jr z, .asm_5434
+ jr z, .findStartOfEnemyNameLoop
+ cp SERIAL_PREAMBLE_BYTE
+ jr z, .findStartOfEnemyNameLoop
+ cp SERIAL_NO_DATA_BYTE
+ jr z, .findStartOfEnemyNameLoop
dec hl
- ld de, W_GRASSRATE ; W_GRASSRATE
- ld c, $b
-.asm_5446
+ ld de, wLinkEnemyTrainerName
+ ld c, 11
+.copyEnemyNameLoop
ld a, [hli]
- cp $fe
- jr z, .asm_5446
+ cp SERIAL_NO_DATA_BYTE
+ jr z, .copyEnemyNameLoop
ld [de], a
inc de
dec c
- jr nz, .asm_5446
- ld de, wEnemyPartyCount ; wEnemyPartyCount
- ld bc, $194
-.asm_5456
+ jr nz, .copyEnemyNameLoop
+ ld de, wEnemyPartyCount
+ ld bc, W_TRAINERHEADERPTR - wEnemyPartyCount
+.copyEnemyPartyLoop
ld a, [hli]
- cp $fe
- jr z, .asm_5456
+ cp SERIAL_NO_DATA_BYTE
+ jr z, .copyEnemyPartyLoop
ld [de], a
inc de
dec bc
ld a, b
or c
- jr nz, .asm_5456
- ld de, wTileMapBackup
+ jr nz, .copyEnemyPartyLoop
+ ld de, wSerialPartyMonsPatchList
ld hl, wPartyMons
- ld c, $2
-.asm_546a
+ ld c, 2 ; patch list has 2 parts
+.unpatchPartyMonsLoop
ld a, [de]
inc de
and a
- jr z, .asm_546a
- cp $fd
- jr z, .asm_546a
- cp $fe
- jr z, .asm_546a
- cp $ff
- jr z, .asm_5489
+ jr z, .unpatchPartyMonsLoop
+ cp SERIAL_PREAMBLE_BYTE
+ jr z, .unpatchPartyMonsLoop
+ cp SERIAL_NO_DATA_BYTE
+ jr z, .unpatchPartyMonsLoop
+ cp SERIAL_PATCH_LIST_PART_TERMINATOR
+ jr z, .finishedPartyMonsPatchListPart
push hl
push bc
ld b, 0
dec a
ld c, a
add hl, bc
- ld a, $fe
+ ld a, SERIAL_NO_DATA_BYTE
ld [hl], a
pop bc
pop hl
- jr .asm_546a
-.asm_5489
- ld hl, wPartyMons + $fc ; wd267
- dec c
- jr nz, .asm_546a
- ld de, wTileMapBackup + 200
+ jr .unpatchPartyMonsLoop
+.finishedPartyMonsPatchListPart
+ ld hl, wPartyMons + (SERIAL_PREAMBLE_BYTE - 1)
+ dec c ; is there another part?
+ jr nz, .unpatchPartyMonsLoop
+ ld de, wSerialEnemyMonsPatchList
ld hl, wEnemyMons
- ld c, $2
-.asm_5497
+ ld c, 2 ; patch list has 2 parts
+.unpatchEnemyMonsLoop
ld a, [de]
inc de
and a
- jr z, .asm_5497
- cp $fd
- jr z, .asm_5497
- cp $fe
- jr z, .asm_5497
- cp $ff
- jr z, .asm_54b6
+ jr z, .unpatchEnemyMonsLoop
+ cp SERIAL_PREAMBLE_BYTE
+ jr z, .unpatchEnemyMonsLoop
+ cp SERIAL_NO_DATA_BYTE
+ jr z, .unpatchEnemyMonsLoop
+ cp SERIAL_PATCH_LIST_PART_TERMINATOR
+ jr z, .finishedEnemyMonsPatchListPart
push hl
push bc
- ld b, $0
+ ld b, 0
dec a
ld c, a
add hl, bc
- ld a, $fe
+ ld a, SERIAL_NO_DATA_BYTE
ld [hl], a
pop bc
pop hl
- jr .asm_5497
-.asm_54b6
- ld hl, wEnemyMons + $fc
+ jr .unpatchEnemyMonsLoop
+.finishedEnemyMonsPatchListPart
+ ld hl, wEnemyMons + (SERIAL_PREAMBLE_BYTE - 1)
dec c
- jr nz, .asm_5497
- ld a, $ac
+ jr nz, .unpatchEnemyMonsLoop
+ ld a, wEnemyMonOT % $100
ld [wcf8d], a
- ld a, $d9
+ ld a, wEnemyMonOT / $100
ld [wcf8e], a
xor a
- ld [wcc38], a
+ ld [wTradeCenterPointerTableIndex], a
ld a, $ff
call PlaySound
- ld a, [$ffaa]
- cp $2
- ld c, $42
- call z, DelayFrames
- ld a, [W_ISLINKBATTLE] ; W_ISLINKBATTLE
- cp $3
- ld a, $32
- ld [W_ISLINKBATTLE], a ; W_ISLINKBATTLE
+ ld a, [hSerialConnectionStatus]
+ cp USING_INTERNAL_CLOCK
+ ld c, 66
+ call z, DelayFrames ; delay if using internal clock
+ ld a, [wLinkState]
+ cp LINK_STATE_START_BATTLE
+ ld a, LINK_STATE_TRADING
+ ld [wLinkState], a
jr nz, .asm_5506
- ld a, $4
- ld [W_ISLINKBATTLE], a ; W_ISLINKBATTLE
+ ld a, LINK_STATE_BATTLING
+ ld [wLinkState], a
ld a, SONY1 + $c8
- ld [W_CUROPPONENT], a ; wd059
+ ld [W_CUROPPONENT], a
call ClearScreen
call Delay3
- ld hl, W_OPTIONS ; W_OPTIONS
+ ld hl, W_OPTIONS
res 7, [hl]
predef InitOpponent
predef HealParty
- jp Func_577d
+ jp ReturnToCableClubRoom
.asm_5506
ld c, BANK(Music_GameCorner)
ld a, MUSIC_GAME_CORNER
call PlayMusic
- jr Func_551c
+ jr CallCurrentTradeCenterFunction
PleaseWaitString: ; 550f (1:550f)
db "PLEASE WAIT!@"
-Func_551c:
- ld hl, PointerTable_5a5b ; $5a5b
- ld b, $0
- ld a, [wcc38]
+CallCurrentTradeCenterFunction:
+ ld hl, TradeCenterPointerTable
+ ld b, 0
+ ld a, [wTradeCenterPointerTableIndex]
cp $ff
jp z, LoadTitlescreenGraphics
add a
@@ -300,10 +309,10 @@ Func_551c:
TradeCenter_SelectMon:
call ClearScreen
call LoadTrainerInfoTextBoxTiles
- call Func_57f2
- call Func_57a2
+ call TradeCenter_DrawPartyLists
+ call TradeCenter_DrawCancelBox
xor a
- ld hl, wcc3d
+ ld hl, wSerialSyncAndExchangeNybbleReceiveData
ld [hli], a
ld [hli], a
ld [hli], a
@@ -313,51 +322,53 @@ TradeCenter_SelectMon:
ld [wLastMenuItem], a
ld [wMenuJoypadPollCount], a
inc a
- ld [wcc42], a
- jp .asm_55dc
-.asm_5557
+ ld [wSerialExchangeNybbleSendData], a
+ jp .playerMonMenu
+.enemyMonMenu
xor a
ld [wcc37], a
inc a
- ld [wcc49], a
- ld a, $a1
+ ld [wWhichTradeMonSelectionMenu], a
+ ld a, D_DOWN | D_LEFT | A_BUTTON
ld [wMenuWatchedKeys], a
ld a, [wEnemyPartyCount]
ld [wMaxMenuItem], a
- ld a, $9
+ ld a, 9
ld [wTopMenuItemY], a
- ld a, $1
+ ld a, 1
ld [wTopMenuItemX], a
-.asm_5574
+.enemyMonMenu_HandleInput
ld hl, $fff6
set 1, [hl]
call HandleMenuInput
ld hl, $fff6
res 1, [hl]
and a
- jp z, .asm_565b
- bit 0, a
- jr z, .asm_55b0 ; 0x5587 $27
+ jp z, .getNewInput
+ bit 0, a ; A button pressed?
+ jr z, .enemyMonMenu_ANotPressed
+; if A button pressed
ld a, [wMaxMenuItem]
ld c, a
ld a, [wCurrentMenuItem]
cp c
- jr c, .asm_559a ; 0x5591 $7
+ jr c, .displayEnemyMonStats
ld a, [wMaxMenuItem]
dec a
ld [wCurrentMenuItem], a
-.asm_559a
+.displayEnemyMonStats
ld a, $1
ld [wd11b], a
callab Func_39bd5
ld hl, wEnemyMons
- call Func_57d6
- jp .asm_565b
-.asm_55b0
- bit 5, a
- jr z, .asm_55d4 ; 0x55b2 $20
- xor a
- ld [wcc49], a
+ call TradeCenter_DisplayStats
+ jp .getNewInput
+.enemyMonMenu_ANotPressed
+ bit 5, a ; Left pressed?
+ jr z, .enemyMonMenu_LeftNotPressed
+; if Left pressed, switch back to the player mon menu
+ xor a ; player mon menu
+ ld [wWhichTradeMonSelectionMenu], a
ld a, [wMenuCursorLocation]
ld l, a
ld a, [wMenuCursorLocation + 1]
@@ -369,51 +380,53 @@ TradeCenter_SelectMon:
ld a, [wPartyCount]
dec a
cp b
- jr nc, .asm_55dc ; 0x55cd $d
+ jr nc, .playerMonMenu
ld [wCurrentMenuItem], a
- jr .asm_55dc ; 0x55d2 $8
-.asm_55d4
- bit 7, a
- jp z, .asm_565b
- jp .asm_572f
-.asm_55dc
- xor a
- ld [wcc49], a
+ jr .playerMonMenu
+.enemyMonMenu_LeftNotPressed
+ bit 7, a ; Down pressed?
+ jp z, .getNewInput
+ jp .selectedCancelMenuItem ; jump if Down pressed
+.playerMonMenu
+ xor a ; player mon menu
+ ld [wWhichTradeMonSelectionMenu], a
ld [wcc37], a
- ld a, $91
+ ld a, D_DOWN | D_RIGHT | A_BUTTON
ld [wMenuWatchedKeys], a
ld a, [wPartyCount]
ld [wMaxMenuItem], a
- ld a, $1
+ ld a, 1
ld [wTopMenuItemY], a
- ld a, $1
+ ld a, 1
ld [wTopMenuItemX], a
- ld hl, wTileMap + $15
+ hlCoord 1, 1
ld bc, $0601
call ClearScreenArea
-.asm_5601
+.playerMonMenu_HandleInput
ld hl, $fff6
set 1, [hl]
call HandleMenuInput
ld hl, $fff6
res 1, [hl]
- and a
- jr nz, .asm_5614 ; 0x560f $3
- jp .asm_565b
-.asm_5614
- bit 0, a
- jr z, .asm_562e ; 0x5616 $16
- jp .asm_5665
+ and a ; was anything pressed?
+ jr nz, .playerMonMenu_SomethingPressed
+ jp .getNewInput
+.playerMonMenu_SomethingPressed
+ bit 0, a ; A button pressed?
+ jr z, .playerMonMenu_ANotPressed
+ jp .chosePlayerMon ; jump if A button pressed
+; unreachable code
ld a, $4
ld [wd11b], a
callab Func_39bd5
- call Func_57d6
- jp .asm_565b
-.asm_562e
- bit 4, a
- jr z, .asm_5654 ; 0x5630 $22
- ld a, $1
- ld [wcc49], a
+ call TradeCenter_DisplayStats
+ jp .getNewInput
+.playerMonMenu_ANotPressed
+ bit 4, a ; Right pressed?
+ jr z, .playerMonMenu_RightNotPressed
+; if Right pressed, switch to the enemy mon menu
+ ld a, $1 ; enemy mon menu
+ ld [wWhichTradeMonSelectionMenu], a
ld a, [wMenuCursorLocation]
ld l, a
ld a, [wMenuCursorLocation + 1]
@@ -425,36 +438,37 @@ TradeCenter_SelectMon:
ld a, [wEnemyPartyCount]
dec a
cp b
- jr nc, .asm_5651 ; 0x564c $3
+ jr nc, .notPastLastEnemyMon
+; when switching to the enemy mon menu, if the menu selection would be past the last enemy mon, select the last enemy mon
ld [wCurrentMenuItem], a
-.asm_5651
- jp .asm_5557
-.asm_5654
- bit 7, a
- jr z, .asm_565b ; 0x5656 $3
- jp .asm_572f
-.asm_565b
- ld a, [wcc49]
+.notPastLastEnemyMon
+ jp .enemyMonMenu
+.playerMonMenu_RightNotPressed
+ bit 7, a ; Down pressed?
+ jr z, .getNewInput
+ jp .selectedCancelMenuItem ; jump if Down pressed
+.getNewInput
+ ld a, [wWhichTradeMonSelectionMenu]
and a
- jp z, .asm_5601
- jp .asm_5574
-.asm_5665
+ jp z, .playerMonMenu_HandleInput
+ jp .enemyMonMenu_HandleInput
+.chosePlayerMon
call SaveScreenTilesToBuffer1
call PlaceUnfilledArrowMenuCursor
ld a, [wMaxMenuItem]
ld c, a
ld a, [wCurrentMenuItem]
cp c
- jr c, .asm_5679 ; 0x5673 $4
+ jr c, .displayStatsTradeMenu
ld a, [wMaxMenuItem]
dec a
-.asm_5679
+.displayStatsTradeMenu
push af
- ld hl, wTileMap + $118
- ld b, $2
- ld c, $12
- call Func_5ab3
- ld hl, wTileMap + $142
+ hlCoord 0, 14
+ ld b, 2
+ ld c, 18
+ call CableClub_TextBoxBorder
+ hlCoord 2, 16
ld de, .statsTrade
call PlaceString
xor a
@@ -462,105 +476,107 @@ TradeCenter_SelectMon:
ld [wLastMenuItem], a
ld [wMenuJoypadPollCount], a
ld [wMaxMenuItem], a
- ld a, $10
+ ld a, 16
ld [wTopMenuItemY], a
-.asm_569f
- ld a, $7f
- ld [wTileMap + $14b], a
- ld a, $13
+.selectStatsMenuItem
+ ld a, " "
+ Coorda 11, 16
+ ld a, D_RIGHT | B_BUTTON | A_BUTTON
ld [wMenuWatchedKeys], a
- ld a, $1
+ ld a, 1
ld [wTopMenuItemX], a
call HandleMenuInput
- bit 4, a
- jr nz, .asm_56c3 ; 0x56b3 $e
- bit 1, a
- jr z, .asm_56df ; 0x56b7 $26
-.asm_56b9
+ bit 4, a ; Right pressed?
+ jr nz, .selectTradeMenuItem
+ bit 1, a ; B button pressed?
+ jr z, .displayPlayerMonStats
+.cancelPlayerMonChoice
pop af
ld [wCurrentMenuItem], a
call LoadScreenTilesFromBuffer1
- jp .asm_55dc
-.asm_56c3
- ld a, $7f
- ld [wTileMap + $141], a
- ld a, $23
+ jp .playerMonMenu
+.selectTradeMenuItem
+ ld a, " "
+ Coorda 1, 16
+ ld a, D_LEFT | B_BUTTON | A_BUTTON
ld [wMenuWatchedKeys], a
- ld a, $b
+ ld a, 11
ld [wTopMenuItemX], a
call HandleMenuInput
- bit 5, a
- jr nz, .asm_569f ; 0x56d7 $c6
- bit 1, a
- jr nz, .asm_56b9 ; 0x56db $dc
- jr .asm_56f9 ; 0x56dd $1a
-.asm_56df
+ bit 5, a ; Left pressed?
+ jr nz, .selectStatsMenuItem
+ bit 1, a ; B button pressed?
+ jr nz, .cancelPlayerMonChoice
+ jr .choseTrade
+.displayPlayerMonStats
pop af
ld [wCurrentMenuItem], a
ld a, $4
ld [wd11b], a
callab Func_39bd5
- call Func_57d6
+ call TradeCenter_DisplayStats
call LoadScreenTilesFromBuffer1
- jp .asm_55dc
-.asm_56f9
+ jp .playerMonMenu
+.choseTrade
call PlaceUnfilledArrowMenuCursor
pop af
ld [wCurrentMenuItem], a
- ld [wWhichTrade], a
- ld [wcc42], a
- call Func_226e
- ld a, [wcc3d]
+ ld [wTradingWhichPlayerMon], a
+ ld [wSerialExchangeNybbleSendData], a
+ call Serial_PrintWaitingTextAndSyncAndExchangeByte
+ ld a, [wSerialSyncAndExchangeNybbleReceiveData]
cp $f
- jp z, Func_551c
- ld [wTrainerEngageDistance], a
- call Func_57c7
- ld a, $1
- ld [wcc38], a
- jp Func_551c
+ jp z, CallCurrentTradeCenterFunction ; go back to the beginning of the trade selection menu if the other person cancelled
+ ld [wTradingWhichEnemyMon], a
+ call TradeCenter_PlaceSelectedEnemyMonMenuCursor
+ ld a, $1 ; TradeCenter_Trade
+ ld [wTradeCenterPointerTableIndex], a
+ jp CallCurrentTradeCenterFunction
.statsTrade
db "STATS TRADE@"
-.asm_572f
+.selectedCancelMenuItem
ld a, [wCurrentMenuItem]
ld b, a
ld a, [wMaxMenuItem]
cp b
- jp nz, .asm_565b
+ jp nz, .getNewInput
ld a, [wMenuCursorLocation]
ld l, a
ld a, [wMenuCursorLocation + 1]
ld h, a
- ld a, $7f
+ ld a, " "
ld [hl], a
-.asm_5745
- ld a, $ed
- ld [wTileMap + $141], a
-.asm_574a
+.cancelMenuItem_Loop
+ ld a, $ed ; filled arrow cursor
+ Coorda 1, 16
+.cancelMenuItem_JoypadLoop
call JoypadLowSensitivity
- ld a, [hJoy5]
- and a
- jr z, .asm_574a ; 0x5750 $f8
- bit 0, a
- jr nz, .asm_5769 ; 0x5754 $13
- bit 6, a
- jr z, .asm_574a ; 0x5758 $f0
- ld a, $7f
- ld [wTileMap + $141], a
+ ld a, [$ffb5]
+ and a ; pressed anything?
+ jr z, .cancelMenuItem_JoypadLoop
+ bit 0, a ; A button pressed?
+ jr nz, .cancelMenuItem_APressed
+ bit 6, a ; Up pressed?
+ jr z, .cancelMenuItem_JoypadLoop
+; if Up pressed
+ ld a, " "
+ Coorda 1, 16
ld a, [wPartyCount]
dec a
ld [wCurrentMenuItem], a
- jp .asm_55dc
-.asm_5769
- ld a, $ec
- ld [wTileMap + $141], a
+ jp .playerMonMenu
+.cancelMenuItem_APressed
+ ld a, $ec ; unfilled arrow cursor
+ Coorda 1, 16
ld a, $f
- ld [wcc42], a
- call Func_226e
- ld a, [wcc3d]
- cp $f
- jr nz, .asm_5745 ; 0x577b $c8
+ ld [wSerialExchangeNybbleSendData], a
+ call Serial_PrintWaitingTextAndSyncAndExchangeByte
+ ld a, [wSerialSyncAndExchangeNybbleReceiveData]
+ cp $f ; did the other person choose Cancel too?
+ jr nz, .cancelMenuItem_Loop
+ ; fall through
-Func_577d: ; 577d (1:577d)
+ReturnToCableClubRoom: ; 577d (1:577d)
call GBPalWhiteOutWithDelay3
ld hl, wcfc4
ld a, [hl]
@@ -579,64 +595,65 @@ Func_577d: ; 577d (1:577d)
call GBFadeInFromWhite
ret
-Func_57a2:
- ld hl, wTileMap + $137
+TradeCenter_DrawCancelBox:
+ hlCoord 11, 15
ld a, $7e
- ld bc, $0031
+ ld bc, 2 * 20 + 9
call FillMemory
- ld hl, wTileMap + $12c
- ld b, $1
- ld c, $9
- call Func_5ab3
- ld hl, wTileMap + $142
+ hlCoord 0, 15
+ ld b, 1
+ ld c, 9
+ call CableClub_TextBoxBorder
+ hlCoord 2, 16
ld de, CancelTextString
jp PlaceString
CancelTextString:
db "CANCEL@"
-Func_57c7:
- ld a, [wcc3d]
- ld hl, wTileMap + $b5
- ld bc, $0014
+TradeCenter_PlaceSelectedEnemyMonMenuCursor:
+ ld a, [wSerialSyncAndExchangeNybbleReceiveData]
+ hlCoord 1, 9
+ ld bc, 20
call AddNTimes
- ld [hl], $ec
+ ld [hl], $ec ; cursor
ret
-Func_57d6:
+TradeCenter_DisplayStats:
ld a, [wCurrentMenuItem]
ld [wWhichPokemon], a
predef StatusScreen
predef StatusScreen2
call GBPalNormal
call LoadTrainerInfoTextBoxTiles
- call Func_57f2
- jp Func_57a2
+ call TradeCenter_DrawPartyLists
+ jp TradeCenter_DrawCancelBox
-Func_57f2:
- ld hl, wTileMap
- ld b, $6
- ld c, $12
- call Func_5ab3
- ld hl, wTileMap + $a0
- ld b, $6
- ld c, $12
- call Func_5ab3
- ld hl, wTileMap + $5
+TradeCenter_DrawPartyLists:
+ hlCoord 0, 0
+ ld b, 6
+ ld c, 18
+ call CableClub_TextBoxBorder
+ hlCoord 0, 8
+ ld b, 6
+ ld c, 18
+ call CableClub_TextBoxBorder
+ hlCoord 5, 0
ld de, wPlayerName
call PlaceString
- ld hl, wTileMap + $a5
- ld de, W_GRASSRATE
+ hlCoord 5, 8
+ ld de, wLinkEnemyTrainerName
call PlaceString
- ld hl, wTileMap + $16
+ hlCoord 2, 1
ld de, wPartySpecies
- call Func_5827
- ld hl, wTileMap + $b6
+ call TradeCenter_PrintPartyListNames
+ hlCoord 2, 9
ld de, wEnemyPartyMons
+ ; fall through
-Func_5827:
+TradeCenter_PrintPartyListNames:
ld c, $0
-.asm_5829
+.loop
ld a, [de]
cp $ff
ret z
@@ -653,144 +670,146 @@ Func_5827:
pop de
inc de
pop hl
- ld bc, $0014
+ ld bc, 20
add hl, bc
pop bc
inc c
- jr .asm_5829 ; 0x5847 $e0
+ jr .loop
TradeCenter_Trade:
- ld c, $64
+ ld c, 100
call DelayFrames
xor a
- ld [wcc43], a
- ld [wcc3e], a
+ ld [wSerialExchangeNybbleSendData + 1], a ; unnecessary
+ ld [wSerialExchangeNybbleReceiveData], a
ld [wcc37], a
ld [wMenuJoypadPollCount], a
- ld hl, wTileMap + $f0
- ld b, $4
- ld c, $12
- call Func_5ab3
- ld a, [wWhichTrade]
+ hlCoord 0, 12
+ ld b, 4
+ ld c, 18
+ call CableClub_TextBoxBorder
+ ld a, [wTradingWhichPlayerMon]
ld hl, wPartySpecies
ld c, a
- ld b, $0
+ ld b, 0
add hl, bc
ld a, [hl]
ld [wd11e], a
call GetMonName
ld hl, wcd6d
- ld de, wTrainerFacingDirection
- ld bc, $000b
+ ld de, wNameOfPlayerMonToBeTraded
+ ld bc, 11
call CopyData
- ld a, [wTrainerEngageDistance]
+ ld a, [wTradingWhichEnemyMon]
ld hl, wEnemyPartyMons
ld c, a
- ld b, $0
+ ld b, 0
add hl, bc
ld a, [hl]
ld [wd11e], a
call GetMonName
ld hl, WillBeTradedText
- ld bc, wTileMap + $119
+ bcCoord 1, 14
call TextCommandProcessor
call SaveScreenTilesToBuffer1
- ld hl, wTileMap + $96
+ hlCoord 10, 7
ld bc, $080b
- ld a, $5
- ld [wd12c], a
+ ld a, TRADE_CANCEL_MENU
+ ld [wTwoOptionMenuID], a
ld a, $14
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
call LoadScreenTilesFromBuffer1
ld a, [wCurrentMenuItem]
and a
- jr z, .asm_58d9 ; 0x58b9 $1e
+ jr z, .tradeConfirmed
+; if trade cancelled
ld a, $1
- ld [wcc42], a
- ld hl, wTileMap + $f0
- ld b, $4
- ld c, $12
- call Func_5ab3
- ld hl, wTileMap + $119
+ ld [wSerialExchangeNybbleSendData], a
+ hlCoord 0, 12
+ ld b, 4
+ ld c, 18
+ call CableClub_TextBoxBorder
+ hlCoord 1, 14
ld de, TradeCanceled
call PlaceString
- call Func_226e
- jp Func_5a18
-.asm_58d9
+ call Serial_PrintWaitingTextAndSyncAndExchangeByte
+ jp .tradeCancelled
+.tradeConfirmed
ld a, $2
- ld [wcc42], a
- call Func_226e
- ld a, [wcc3d]
- dec a
- jr nz, .asm_58fd ; 0x58e5 $16
- ld hl, wTileMap + $f0
- ld b, $4
- ld c, $12
- call Func_5ab3
- ld hl, wTileMap + $119
+ ld [wSerialExchangeNybbleSendData], a
+ call Serial_PrintWaitingTextAndSyncAndExchangeByte
+ ld a, [wSerialSyncAndExchangeNybbleReceiveData]
+ dec a ; did the other person cancel?
+ jr nz, .doTrade
+; if the other person cancelled
+ hlCoord 0, 12
+ ld b, 4
+ ld c, 18
+ call CableClub_TextBoxBorder
+ hlCoord 1, 14
ld de, TradeCanceled
call PlaceString
- jp Func_5a18
-.asm_58fd
- ld a, [wWhichTrade]
- ld hl, wPartyMonOT ; OT names of player
+ jp .tradeCancelled
+.doTrade
+ ld a, [wTradingWhichPlayerMon]
+ ld hl, wPartyMonOT
call SkipFixedLengthTextEntries
- ld de, wTrainerScreenX
- ld bc, $000b
+ ld de, wTradedPlayerMonOT
+ ld bc, 11
call CopyData
ld hl, wPartyMon1Species
- ld a, [wWhichTrade]
- ld bc, $002c
+ ld a, [wTradingWhichPlayerMon]
+ ld bc, wPartyMon2 - wPartyMon1
call AddNTimes
- ld bc, $000c
+ ld bc, wPartyMon1OTID - wPartyMon1
add hl, bc
ld a, [hli]
- ld [wcd4c], a
+ ld [wTradedPlayerMonOTID], a
ld a, [hl]
- ld [wcd4d], a
- ld a, [wTrainerEngageDistance]
- ld hl, wEnemyMonOT ; OT names of other player
+ ld [wTradedPlayerMonOTID + 1], a
+ ld a, [wTradingWhichEnemyMon]
+ ld hl, wEnemyMonOT
call SkipFixedLengthTextEntries
- ld de, wcd4e
- ld bc, $000b
+ ld de, wTradedEnemyMonOT
+ ld bc, 11
call CopyData
ld hl, wEnemyMons
- ld a, [wTrainerEngageDistance]
- ld bc, $002c
+ ld a, [wTradingWhichEnemyMon]
+ ld bc, wEnemyMon2 - wEnemyMon1
call AddNTimes
- ld bc, $000c
+ ld bc, wEnemyMon1OTID - wEnemyMon1
add hl, bc
ld a, [hli]
- ld [wcd59], a
+ ld [wTradedEnemyMonOTID], a
ld a, [hl]
- ld [wcd5a], a
- ld a, [wWhichTrade]
+ ld [wTradedEnemyMonOTID + 1], a
+ ld a, [wTradingWhichPlayerMon]
ld [wWhichPokemon], a
ld hl, wPartySpecies
- ld b, $0
+ ld b, 0
ld c, a
add hl, bc
ld a, [hl]
- ld [wWhichTrade], a
+ ld [wTradedPlayerMonSpecies], a
xor a
ld [wcf95], a
call RemovePokemon
- ld a, [wTrainerEngageDistance]
+ ld a, [wTradingWhichEnemyMon]
ld c, a
ld [wWhichPokemon], a
ld hl, wEnemyPartyMons
- ld d, $0
+ ld d, 0
ld e, a
add hl, de
ld a, [hl]
ld [wcf91], a
ld hl, wEnemyMons
ld a, c
- ld bc, $002c
+ ld bc, wEnemyMon2 - wEnemyMon1
call AddNTimes
ld de, wcf98
- ld bc, $002c
+ ld bc, wEnemyMon2 - wEnemyMon1
call CopyData
call AddEnemyMonToPlayerParty
ld a, [wPartyCount]
@@ -798,13 +817,13 @@ TradeCenter_Trade:
ld [wWhichPokemon], a
ld a, $1
ld [wccd4], a
- ld a, [wTrainerEngageDistance]
+ ld a, [wTradingWhichEnemyMon]
ld hl, wEnemyPartyMons
- ld b, $0
+ ld b, 0
ld c, a
add hl, bc
ld a, [hl]
- ld [wTrainerEngageDistance], a
+ ld [wTradedEnemyMonSpecies], a
ld a, $a
ld [wMusicHeaderPointer], a
ld a, $2
@@ -812,46 +831,45 @@ TradeCenter_Trade:
ld a, MUSIC_SAFARI_ZONE
ld [wc0ee], a
call PlaySound
- ld c, $64
+ ld c, 100
call DelayFrames
call ClearScreen
call LoadHpBarAndStatusTilePatterns
xor a
ld [wcc5b], a
- ld a, [$ffaa]
- cp $1
- jr z, .asm_59d9 ; 0x59d0 $7
+ ld a, [hSerialConnectionStatus]
+ cp USING_EXTERNAL_CLOCK
+ jr z, .usingExternalClock
predef Func_410e2
- jr .asm_59de ; 0x59d7 $5
-.asm_59d9
+ jr .tradeCompleted
+.usingExternalClock
predef Func_410f3
-.asm_59de
+.tradeCompleted
callab TryEvolvingMon
call ClearScreen
call LoadTrainerInfoTextBoxTiles
- call Func_226e
- ld c, $28
+ call Serial_PrintWaitingTextAndSyncAndExchangeByte
+ ld c, 40
call DelayFrames
- ld hl, wTileMap + $f0
- ld b, $4
- ld c, $12
- call Func_5ab3
- ld hl, wTileMap + $119
+ hlCoord 0, 12
+ ld b, 4
+ ld c, 18
+ call CableClub_TextBoxBorder
+ hlCoord 1, 14
ld de, TradeCompleted
call PlaceString
predef SaveSAVtoSRAM2
- ld c, $32
+ ld c, 50
call DelayFrames
xor a
- ld [wcc38], a
- jp Func_5345
-
-Func_5a18:
- ld c, $64
+ ld [wTradeCenterPointerTableIndex], a
+ jp CableClub_DoBattleOrTradeAgain
+.tradeCancelled
+ ld c, 100
call DelayFrames
- xor a
- ld [wcc38], a
- jp Func_551c
+ xor a ; TradeCenter_SelectMon
+ ld [wTradeCenterPointerTableIndex], a
+ jp CallCurrentTradeCenterFunction
WillBeTradedText: ; 5a24 (1:5a24)
TX_FAR _WillBeTradedText
@@ -864,22 +882,22 @@ TradeCanceled:
db "Too bad! The trade"
next "was canceled!@"
-PointerTable_5a5b: ; 5a5b (1:5a5b)
+TradeCenterPointerTable: ; 5a5b (1:5a5b)
dw TradeCenter_SelectMon
dw TradeCenter_Trade
-Func_5a5f: ; 5a5f (1:5a5f)
- ld a, [W_ISLINKBATTLE] ; W_ISLINKBATTLE
- cp $2
- jr z, .asm_5a75
- cp $3
- jr z, .asm_5a75
- cp $5
+CableClub_Run: ; 5a5f (1:5a5f)
+ ld a, [wLinkState]
+ cp LINK_STATE_START_TRADE
+ jr z, .doBattleOrTrade
+ cp LINK_STATE_START_BATTLE
+ jr z, .doBattleOrTrade
+ cp LINK_STATE_RESET ; this is never used
ret nz
- predef Func_5aaf
+ predef EmptyFunc3
jp Init
-.asm_5a75
- call Func_5317
+.doBattleOrTrade
+ call CableClub_DoBattleOrTrade
ld hl, Club_GFX
ld a, h
ld [W_TILESETGFXPTR + 1], a
@@ -893,10 +911,10 @@ Func_5a5f: ; 5a5f (1:5a5f)
ld a, l
ld [W_TILESETCOLLISIONPTR], a
xor a
- ld [W_GRASSRATE], a ; W_GRASSRATE
- inc a
- ld [W_ISLINKBATTLE], a ; W_ISLINKBATTLE
- ld [hJoy5], a
+ ld [W_GRASSRATE], a
+ inc a ; LINK_STATE_IN_CABLE_CLUB
+ ld [wLinkState], a
+ ld [$ffb5], a
ld a, $a
ld [wMusicHeaderPointer], a
ld a, BANK(Music_Celadon)
@@ -905,43 +923,46 @@ Func_5a5f: ; 5a5f (1:5a5f)
ld [wc0ee], a
jp PlaySound
-Func_5aaf: ; 5aaf (1:5aaf)
+EmptyFunc3: ; 5aaf (1:5aaf)
ret
-Func_5ab0:
+Diploma_TextBoxBorder: ; 5ab0 (1:5ab0)
call GetPredefRegisters
-Func_5ab3: ; 5ab3 (1:5ab3)
+; b = height
+; c = width
+CableClub_TextBoxBorder: ; 5ab3 (1:5ab3)
push hl
- ld a, $78
+ ld a, $78 ; border upper left corner tile
ld [hli], a
- inc a
- call Func_5ae0
- inc a
+ inc a ; border top horizontal line tile
+ call CableClub_DrawHorizontalLine
+ inc a ; border upper right corner tile
ld [hl], a
pop hl
- ld de, $14
+ ld de, 20
add hl, de
-.asm_5ac2
+.loop
push hl
- ld a, $7b
+ ld a, $7b ; border left vertical line tile
ld [hli], a
- ld a, $7f
- call Func_5ae0
- ld [hl], $77
+ ld a, " "
+ call CableClub_DrawHorizontalLine
+ ld [hl], $77 ; border right vertical line tile
pop hl
- ld de, $14
+ ld de, 20
add hl, de
dec b
- jr nz, .asm_5ac2
- ld a, $7c
+ jr nz, .loop
+ ld a, $7c ; border lower left corner tile
ld [hli], a
- ld a, $76
- call Func_5ae0
- ld [hl], $7d
+ ld a, $76 ; border bottom horizontal line tile
+ call CableClub_DrawHorizontalLine
+ ld [hl], $7d ; border lower right corner tile
ret
-Func_5ae0: ; 5ae0 (1:5ae0)
+; c = width
+CableClub_DrawHorizontalLine: ; 5ae0 (1:5ae0)
ld d, c
.asm_5ae1
ld [hli], a
diff --git a/engine/clear_save.asm b/engine/clear_save.asm
index 5ef0d475..8fde1f0c 100755
--- a/engine/clear_save.asm
+++ b/engine/clear_save.asm
@@ -7,10 +7,10 @@ Func_1c98a: ; 1c98a (7:498a)
call PrintText
hlCoord 14, 7
ld bc, $80f
- ld a, $7
- ld [wd12c], a
+ ld a, NO_YES_MENU
+ ld [wTwoOptionMenuID], a
ld a, $14
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
ld a, [wCurrentMenuItem] ; wCurrentMenuItem
and a
diff --git a/engine/evolve_trade.asm b/engine/evolve_trade.asm
index 7fbd4607..ec230677 100755
--- a/engine/evolve_trade.asm
+++ b/engine/evolve_trade.asm
@@ -17,7 +17,7 @@ EvolveTradeMon: ; 17d7d (5:7d7d)
; This was fixed in Yellow.
- ld a, [wTradeMonNick]
+ ld a, [wInGameTradeReceiveMonName]
; GRAVELER
cp "G"
@@ -26,7 +26,7 @@ EvolveTradeMon: ; 17d7d (5:7d7d)
; "SPECTRE" (HAUNTER)
cp "S"
ret nz
- ld a, [wTradeMonNick + 1]
+ ld a, [wInGameTradeReceiveMonName + 1]
cp "P"
ret nz
@@ -36,9 +36,9 @@ EvolveTradeMon: ; 17d7d (5:7d7d)
ld [wWhichPokemon], a ; wWhichPokemon
ld a, $1
ld [wccd4], a
- ld a, $32
- ld [W_ISLINKBATTLE], a ; W_ISLINKBATTLE
+ ld a, LINK_STATE_TRADING
+ ld [wLinkState], a
callab TryEvolvingMon
- xor a
- ld [W_ISLINKBATTLE], a ; W_ISLINKBATTLE
+ xor a ; LINK_STATE_NONE
+ ld [wLinkState], a
jp PlayDefaultMusic
diff --git a/engine/evos_moves.asm b/engine/evos_moves.asm
index 3a7dda43..2c504104 100755
--- a/engine/evos_moves.asm
+++ b/engine/evos_moves.asm
@@ -70,9 +70,9 @@ Evolution_PartyMonLoop: ; loop over party mons
cp EV_TRADE
jr z, .checkTradeEvo
; not trade evolution
- ld a, [W_ISLINKBATTLE]
- cp $32 ; in a trade?
- jr z, Evolution_PartyMonLoop ; if so, go the next mon
+ ld a, [wLinkState]
+ cp LINK_STATE_TRADING
+ jr z, Evolution_PartyMonLoop ; if trading, go the next mon
ld a, b
cp EV_ITEM
jr z, .checkItemEvo
@@ -83,9 +83,9 @@ Evolution_PartyMonLoop: ; loop over party mons
cp EV_LEVEL
jr z, .checkLevel
.checkTradeEvo
- ld a, [W_ISLINKBATTLE]
- cp $32 ; in a trade?
- jp nz, .nextEvoEntry1 ; if not, go to the next evolution entry
+ ld a, [wLinkState]
+ cp LINK_STATE_TRADING
+ jp nz, .nextEvoEntry1 ; if not trading, go to the next evolution entry
ld a, [hli] ; level requirement
ld b, a
ld a, [wcfb9]
@@ -246,8 +246,8 @@ Evolution_PartyMonLoop: ; loop over party mons
pop hl
pop af
ld [hTilesetType], a
- ld a, [W_ISLINKBATTLE]
- cp $32
+ ld a, [wLinkState]
+ cp LINK_STATE_TRADING
ret z
ld a, [W_ISINBATTLE]
and a
@@ -312,9 +312,9 @@ IsEvolvingText: ; 3af4d (e:6f4d)
db "@"
Evolution_ReloadTilesetTilePatterns: ; 3af52 (e:6f52)
- ld a, [W_ISLINKBATTLE] ; W_ISLINKBATTLE
- cp $32 ; in a trade?
- ret z ; if so, return
+ ld a, [wLinkState]
+ cp LINK_STATE_TRADING
+ ret z
jp ReloadTilesetTilePatterns
LearnMoveFromLevelUp: ; 3af5b (e:6f5b)
diff --git a/engine/game_corner_slots.asm b/engine/game_corner_slots.asm
index 0ab74927..52f61daf 100755
--- a/engine/game_corner_slots.asm
+++ b/engine/game_corner_slots.asm
@@ -10,7 +10,7 @@ StartSlotMachine: ; 37e2d (d:7e2d)
ld a, [wTrainerSpriteOffset]
and a
ret z
- ld a, [wcd05]
+ ld a, [wUnknownSlotVar]
ld b, a
ld a, [wTrainerFacingDirection]
inc a
diff --git a/engine/hall_of_fame.asm b/engine/hall_of_fame.asm
index 4b7e66db..80acfeeb 100755
--- a/engine/hall_of_fame.asm
+++ b/engine/hall_of_fame.asm
@@ -97,9 +97,9 @@ HallOfFameText: ; 7026b (1c:426b)
Func_70278: ; 70278 (1c:4278)
call ClearScreen
ld a, $d0
- ld [$ffaf], a
+ ld [hSCY], a
ld a, $c0
- ld [$ffae], a
+ ld [hSCX], a
ld a, [wWhichTrade] ; wWhichTrade
ld [wcf91], a
ld [wd0b5], a
@@ -132,16 +132,16 @@ Func_70278: ; 70278 (1c:4278)
.asm_702c7
call .asm_702d5
xor a
- ld [$ffaf], a
+ ld [hSCY], a
ld c, a
call Func_7036d
ld d, $0
ld e, $fc
.asm_702d5
call DelayFrame
- ld a, [$ffae]
+ ld a, [hSCX]
add e
- ld [$ffae], a
+ ld [hSCX], a
cp d
jr nz, .asm_702d5
ret
@@ -200,7 +200,7 @@ Func_7033e: ; 7033e (1c:433e)
Func_7036d: ; 7036d (1c:436d)
ld b, $0
hlCoord 12, 5
- predef_jump Func_79dda
+ predef_jump CopyTileIDsFromList
Func_70377: ; 70377 (1c:4377)
ld hl, wd747
diff --git a/engine/hidden_object_functions17.asm b/engine/hidden_object_functions17.asm
index d966b720..e0e38a2a 100755
--- a/engine/hidden_object_functions17.asm
+++ b/engine/hidden_object_functions17.asm
@@ -67,7 +67,7 @@ DisplayMonFrontSpriteInBox: ; 5dbd9 (17:5bd9)
ld [hWY], a
call SaveScreenTilesToBuffer1
ld a, $11
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
call UpdateSprites
ld a, [wcf91]
diff --git a/engine/in_game_trades.asm b/engine/in_game_trades.asm
index 7464edb3..f308a8e6 100755
--- a/engine/in_game_trades.asm
+++ b/engine/in_game_trades.asm
@@ -1,4 +1,4 @@
-Predef54: ; 71ad9 (1c:5ad9)
+DoInGameTradeDialogue: ; 71ad9 (1c:5ad9)
; trigger the trade offer/action specified by wWhichTrade
call SaveScreenTilesToBuffer2
ld hl,TradeMons
@@ -8,15 +8,15 @@ Predef54: ; 71ad9 (1c:5ad9)
sub b
sub b
ld c,a
- ld b,$0
+ ld b,0
add hl,bc
ld a,[hli]
- ld [wcd0f],a
+ ld [wInGameTradeGiveMonSpecies],a
ld a,[hli]
- ld [wcd34],a
+ ld [wInGameTradeReceiveMonSpecies],a
ld a,[hli]
push af
- ld de,wcd29
+ ld de,wInGameTradeMonNick
ld bc,$000b
call CopyData
pop af
@@ -26,16 +26,16 @@ Predef54: ; 71ad9 (1c:5ad9)
add hl,hl
add hl,de
ld a,[hli]
- ld [wcd10],a
+ ld [wInGameTradeTextPointerTablePointer],a
ld a,[hl]
- ld [wcd11],a
- ld a,[wcd0f]
- ld de,wcd13
- call Func_71b6a
- ld a,[wcd34]
- ld de,wPlayerMonAccuracyMod
- call Func_71b6a
- ld hl,wd737
+ ld [wInGameTradeTextPointerTablePointer + 1],a
+ ld a,[wInGameTradeGiveMonSpecies]
+ ld de,wInGameTradeGiveMonName
+ call InGameTrade_GetMonName
+ ld a,[wInGameTradeReceiveMonSpecies]
+ ld de,wInGameTradeReceiveMonName
+ call InGameTrade_GetMonName
+ ld hl,wCompletedInGameTradeFlags
ld a,[wWhichTrade]
ld c,a
ld b,$2
@@ -43,28 +43,29 @@ Predef54: ; 71ad9 (1c:5ad9)
ld a,c
and a
ld a,$4
- ld [wcd12],a
- jr nz,.asm_99bca ; 0x71b36 $20
+ ld [wInGameTradeTextPointerTableIndex],a
+ jr nz,.printText
+; if the trade hasn't been done yet
xor a
- ld [wcd12],a
- call .asm_99bca
+ ld [wInGameTradeTextPointerTableIndex],a
+ call .printText
ld a,$1
- ld [wcd12],a
+ ld [wInGameTradeTextPointerTableIndex],a
call YesNoChoice
ld a,[wCurrentMenuItem]
and a
- jr nz,.asm_99bca ; 0x71b4b $b
- call Func_71c07
- jr c,.asm_99bca ; 0x71b50 $6
+ jr nz,.printText
+ call InGameTrade_DoTrade
+ jr c,.printText
ld hl, TradedForText
call PrintText
-.asm_99bca ; 0x71b58
- ld hl,wcd12
- ld a,[hld]
+.printText
+ ld hl,wInGameTradeTextPointerTableIndex
+ ld a,[hld] ; wInGameTradeTextPointerTableIndex
ld e,a
- ld d,$0
- ld a,[hld]
- ld l,[hl]
+ ld d,0
+ ld a,[hld] ; wInGameTradeTextPointerTablePointer + 1
+ ld l,[hl] ; wInGameTradeTextPointerTablePointer
ld h,a
add hl,de
add hl,de
@@ -73,7 +74,8 @@ Predef54: ; 71ad9 (1c:5ad9)
ld l,a
jp PrintText
-Func_71b6a: ; 71b6a (1c:5b6a)
+; copies name of species a to hl
+InGameTrade_GetMonName: ; 71b6a (1c:5b6a)
push de
ld [wd11e],a
call GetMonName
@@ -84,30 +86,30 @@ Func_71b6a: ; 71b6a (1c:5b6a)
INCLUDE "data/trades.asm"
-Func_71c07: ; 71c07 (1c:5c07)
+InGameTrade_DoTrade: ; 71c07 (1c:5c07)
xor a
ld [wd07d],a
dec a
ld [wUpdateSpritesEnabled],a
call DisplayPartyMenu
push af
- call Func_71ca2
+ call InGameTrade_RestoreScreen
pop af
ld a,$1
- jp c,.asm_c4bc2
- ld a,[wcd0f]
+ jp c,.tradeFailed ; jump if the player didn't select a pokemon
+ ld a,[wInGameTradeGiveMonSpecies]
ld b,a
ld a,[wcf91]
cp b
ld a,$2
- jr nz,.asm_c4bc2 ; 0x71c26 $75
+ jr nz,.tradeFailed ; jump if the selected mon's species is not the required one
ld a,[wWhichPokemon]
ld hl,wPartyMon1Level
ld bc,$002c
call AddNTimes
ld a,[hl]
ld [W_CURENEMYLVL],a
- ld hl,wd737
+ ld hl,wCompletedInGameTradeFlags
ld a,[wWhichTrade]
ld c,a
ld b,$1
@@ -119,13 +121,13 @@ Func_71c07: ; 71c07 (1c:5c07)
ld a,[W_CURENEMYLVL]
push af
call LoadHpBarAndStatusTilePatterns
- call Func_71cc1
+ call InGameTrade_PrepareTradeData
predef Func_410e2
pop af
ld [W_CURENEMYLVL],a
pop af
ld [wWhichPokemon],a
- ld a,[wcd34]
+ ld a,[wInGameTradeReceiveMonSpecies]
ld [wcf91],a
xor a
ld [wcc49],a
@@ -134,64 +136,64 @@ Func_71c07: ; 71c07 (1c:5c07)
ld a,$80
ld [wcc49],a
call AddPartyMon
- call Func_71d19
+ call InGameTrade_CopyDataToReceivedMon
callab EvolveTradeMon
call ClearScreen
- call Func_71ca2
+ call InGameTrade_RestoreScreen
callba RedrawMapView
and a
ld a,$3
- jr .asm_ee803 ; 0x71c9b $1
-.asm_c4bc2 ; 0x71c9d
+ jr .tradeSucceeded
+.tradeFailed
scf
-.asm_ee803 ; 0x71c9e
- ld [wcd12],a
+.tradeSucceeded
+ ld [wInGameTradeTextPointerTableIndex],a
ret
-Func_71ca2: ; 71ca2 (1c:5ca2)
+InGameTrade_RestoreScreen: ; 71ca2 (1c:5ca2)
call GBPalWhiteOutWithDelay3
call RestoreScreenTilesAndReloadTilePatterns
call ReloadTilesetTilePatterns
call LoadScreenTilesFromBuffer2
call Delay3
call LoadGBPal
- ld c, $a
+ ld c, 10
call DelayFrames
ld b, BANK(LoadWildData)
ld hl, LoadWildData
jp Bankswitch
-Func_71cc1: ; 71cc1 (1c:5cc1)
- ld hl, wWhichTrade ; wWhichTrade
- ld a, [wcd0f]
- ld [hli], a
- ld a, [wcd34]
- ld [hl], a
- ld hl, wPartyMonOT ; wd273
+InGameTrade_PrepareTradeData: ; 71cc1 (1c:5cc1)
+ ld hl, wTradedPlayerMonSpecies
+ ld a, [wInGameTradeGiveMonSpecies]
+ ld [hli], a ; wTradedPlayerMonSpecies
+ ld a, [wInGameTradeReceiveMonSpecies]
+ ld [hl], a ; wTradedEnemyMonSpecies
+ ld hl, wPartyMonOT
ld bc, $b
- ld a, [wWhichPokemon] ; wWhichPokemon
+ ld a, [wWhichPokemon]
call AddNTimes
- ld de, wTrainerScreenX
+ ld de, wTradedPlayerMonOT
ld bc, $b
- call Func_71d11
- ld hl, String_71d59 ; $5d59
+ call InGameTrade_CopyData
+ ld hl, InGameTrade_TrainerString
ld de, wcd4e
- call Func_71d11
- ld de, W_GRASSRATE ; W_GRASSRATE
- call Func_71d11
- ld hl, wPartyMon1OTID ; wPartyMon1OTID
- ld bc, $2c
- ld a, [wWhichPokemon] ; wWhichPokemon
+ call InGameTrade_CopyData
+ ld de, W_GRASSRATE
+ call InGameTrade_CopyData
+ ld hl, wPartyMon1OTID
+ ld bc, wPartyMon2 - wPartyMon1
+ ld a, [wWhichPokemon]
call AddNTimes
- ld de, wcd4c
+ ld de, wTradedPlayerMonOTID
ld bc, $2
- call Func_71d11
+ call InGameTrade_CopyData
call Random
ld hl, hRandomAdd
- ld de, wcd59
+ ld de, wTradedEnemyMonOTID
jp CopyData
-Func_71d11: ; 71d11 (1c:5d11)
+InGameTrade_CopyData: ; 71d11 (1c:5d11)
push hl
push bc
call CopyData
@@ -199,35 +201,37 @@ Func_71d11: ; 71d11 (1c:5d11)
pop hl
ret
-Func_71d19: ; 71d19 (1c:5d19)
- ld hl, wPartyMonNicks ; wPartyMonNicks
+InGameTrade_CopyDataToReceivedMon: ; 71d19 (1c:5d19)
+ ld hl, wPartyMonNicks
ld bc, $b
- call Func_71d4f
- ld hl, wcd29
+ call InGameTrade_GetReceivedMonPointer
+ ld hl, wInGameTradeMonNick
ld bc, $b
call CopyData
- ld hl, wPartyMonOT ; wd273
+ ld hl, wPartyMonOT
ld bc, $b
- call Func_71d4f
- ld hl, String_71d59 ; $5d59
+ call InGameTrade_GetReceivedMonPointer
+ ld hl, InGameTrade_TrainerString
ld bc, $b
call CopyData
- ld hl, wPartyMon1OTID ; wPartyMon1OTID
- ld bc, $2c
- call Func_71d4f
- ld hl, wcd59
+ ld hl, wPartyMon1OTID
+ ld bc, wPartyMon2 - wPartyMon1
+ call InGameTrade_GetReceivedMonPointer
+ ld hl, wTradedEnemyMonOTID
ld bc, $2
jp CopyData
-Func_71d4f: ; 71d4f (1c:5d4f)
- ld a, [wPartyCount] ; wPartyCount
+; the received mon's index is (partyCount - 1),
+; so this adds bc to hl (partyCount - 1) times and moves the result to de
+InGameTrade_GetReceivedMonPointer: ; 71d4f (1c:5d4f)
+ ld a, [wPartyCount]
dec a
call AddNTimes
ld e, l
ld d, h
ret
-String_71d59: ; 71d59 (1c:5d59)
+InGameTrade_TrainerString: ; 71d59 (1c:5d59)
; "TRAINER@@@@@@@@@@"
db $5d, "@@@@@@@@@@"
diff --git a/engine/intro.asm b/engine/intro.asm
index ace43beb..7c0464d3 100755
--- a/engine/intro.asm
+++ b/engine/intro.asm
@@ -7,7 +7,7 @@ PlayIntro: ; 41682 (10:5682)
call PlayIntroScene
call GBFadeOutToWhite
xor a
- ld [$ffae], a
+ ld [hSCX], a
ld [H_AUTOBGTRANSFERENABLED], a
call ClearSprites
call DelayFrame
@@ -21,7 +21,7 @@ PlayIntroScene: ; 4169d (10:569d)
ld [rOBP0], a
ld [rOBP1], a
xor a
- ld [$ffae], a
+ ld [hSCX], a
ld b, $3
call Func_4183f
ld a, 0
@@ -229,7 +229,7 @@ Func_4180e: ; 4180e (10:580e)
jr z, .asm_4181d
cp $1
jr z, .asm_4182d
- ld a, [$ffae]
+ ld a, [hSCX]
dec a
dec a
jr .asm_41831
@@ -243,11 +243,11 @@ Func_4180e: ; 4180e (10:580e)
call Func_417ae
pop de
.asm_4182d
- ld a, [$ffae]
+ ld a, [hSCX]
inc a
inc a
.asm_41831
- ld [$ffae], a
+ ld [hSCX], a
push de
ld c, $2
call CheckForUserInterruption
@@ -260,9 +260,9 @@ Func_4180e: ; 4180e (10:580e)
Func_4183f: ; 4183f (10:583f)
hlCoord 13, 7
-Func_41842: ; 41842 (10:5842)
+CopyTileIDsFromList_ZeroBaseTileID: ; 41842 (10:5842)
ld c, $0
- predef_jump Func_79dda
+ predef_jump CopyTileIDsFromList
Func_41849: ; 41849 (10:5849)
predef Func_79869
diff --git a/engine/items/items.asm b/engine/items/items.asm
index 029c659b..d8b7f9e3 100755
--- a/engine/items/items.asm
+++ b/engine/items/items.asm
@@ -2098,7 +2098,7 @@ ItemUseTMHM: ; e479 (3:6479)
hlCoord 14, 7
ld bc,$080f
ld a,$14
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID ; yes/no menu
ld a,[wCurrentMenuItem]
and a
@@ -2489,7 +2489,7 @@ TossItem_: ; e6f1 (3:66f1)
hlCoord 14, 7
ld bc,$080f
ld a,$14
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID ; yes/no menu
ld a,[wd12e]
cp a,2
diff --git a/engine/learn_move.asm b/engine/learn_move.asm
index bbfb41a3..5dab5748 100755
--- a/engine/learn_move.asm
+++ b/engine/learn_move.asm
@@ -79,7 +79,7 @@ AbandonLearning: ; 6eda (1:6eda)
hlCoord 14, 7
ld bc, $80f
ld a, $14
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
ld a, [wCurrentMenuItem] ; wCurrentMenuItem
and a
@@ -102,7 +102,7 @@ TryingToLearn: ; 6f07 (1:6f07)
hlCoord 14, 7
ld bc, $80f
ld a, $14
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
pop hl
ld a, [wCurrentMenuItem] ; wCurrentMenuItem
diff --git a/engine/menu/bills_pc.asm b/engine/menu/bills_pc.asm
index 891ef6e8..a26c5aed 100644
--- a/engine/menu/bills_pc.asm
+++ b/engine/menu/bills_pc.asm
@@ -508,48 +508,48 @@ MonWasReleasedText: ; 0x21820
TX_FAR _MonWasReleasedText
db "@"
-PrintJustAMomentText1:: ; 5824 (8:5825)
- ld a, [$ffaa]
- cp $1
+CableClubLeftGameboy:: ; 5824 (8:5825)
+ ld a, [hSerialConnectionStatus]
+ cp USING_EXTERNAL_CLOCK
ret z
- ld a, [wSpriteStateData1 + 9]
- cp $c
+ ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction
+ cp SPRITE_FACING_RIGHT
ret nz
ld a, [W_CURMAP]
cp BATTLE_CENTER
- ld a, $2
+ ld a, LINK_STATE_START_TRADE
jr z, .asm_2183a
- inc a
+ inc a ; LINK_STATE_START_BATTLE
.asm_2183a
- ld [W_ISLINKBATTLE], a
+ ld [wLinkState], a
call EnableAutoTextBoxDrawing
- ld a, $22
+ ld a, $22 ; JustAMomentText
jp PrintPredefTextID
-PrintJustAMomentText2:: ; 5845 (8:5845)
- ld a, [$ffaa]
- cp $2
+CableClubRightGameboy:: ; 5845 (8:5845)
+ ld a, [hSerialConnectionStatus]
+ cp USING_INTERNAL_CLOCK
ret z
- ld a, [wSpriteStateData1 + 9]
- cp $8
+ ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction
+ cp SPRITE_FACING_LEFT
ret nz
ld a, [W_CURMAP]
cp BATTLE_CENTER
- ld a, $2
+ ld a, LINK_STATE_START_TRADE
jr z, .asm_2185a
- inc a
+ inc a ; LINK_STATE_START_BATTLE
.asm_2185a
- ld [W_ISLINKBATTLE], a
+ ld [wLinkState], a
call EnableAutoTextBoxDrawing
- ld a, $22
+ ld a, $22 ; JustAMomentText
jp PrintPredefTextID
JustAMomentText:: ; 21865 (8:5865)
TX_FAR _JustAMomentText
db "@"
- ld a, [wSpriteStateData1 + 9]
- cp $4
+ ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction
+ cp SPRITE_FACING_UP
ret nz
call EnableAutoTextBoxDrawing
ld a, $23
diff --git a/engine/menu/diploma.asm b/engine/menu/diploma.asm
index 95b2a87d..1624ed70 100755
--- a/engine/menu/diploma.asm
+++ b/engine/menu/diploma.asm
@@ -14,7 +14,7 @@ DisplayDiploma: ; 566e2 (15:66e2)
call FarCopyData2
ld hl, wTileMap
ld bc, $1012
- predef Func_5ab0
+ predef Diploma_TextBoxBorder
ld hl, DiplomaTextPointersAndCoords ; $6784
ld c, $5
.asm_56715
diff --git a/engine/menu/main_menu.asm b/engine/menu/main_menu.asm
index c6052f03..756c7755 100755
--- a/engine/menu/main_menu.asm
+++ b/engine/menu/main_menu.asm
@@ -14,8 +14,8 @@ MainMenu: ; 5af2 (1:5af2)
.next0
ld c,20
call DelayFrames
- xor a
- ld [W_ISLINKBATTLE],a
+ xor a ; LINK_STATE_NONE
+ ld [wLinkState],a
ld hl,wcc2b
ld [hli],a
ld [hli],a
@@ -133,7 +133,7 @@ LinkMenu: ; 5c0a (1:5c0a)
ld [wd358], a
ld hl, wd72e
set 6, [hl]
- ld hl, TextTerminator_6b20 ; $6b20
+ ld hl, TextTerminator_6b20
call PrintText
call SaveScreenTilesToBuffer1
ld hl, WhereWouldYouLikeText
@@ -149,7 +149,7 @@ LinkMenu: ; 5c0a (1:5c0a)
xor a
ld [wcd37], a
ld [wd72d], a
- ld hl, wTopMenuItemY ; wTopMenuItemY
+ ld hl, wTopMenuItemY
ld a, $7
ld [hli], a
ld a, $6
@@ -163,97 +163,101 @@ LinkMenu: ; 5c0a (1:5c0a)
ld [hli], a
xor a
ld [hl], a
-.asm_5c52
+.waitForInputLoop
call HandleMenuInput
- and $3
+ and A_BUTTON | B_BUTTON
add a
add a
ld b, a
- ld a, [wCurrentMenuItem] ; wCurrentMenuItem
+ ld a, [wCurrentMenuItem]
add b
add $d0
- ld [wcc42], a
- ld [wcc43], a
-.asm_5c66
- call Func_2247
- ld a, [wcc3d]
+ ld [wLinkMenuSelectionSendBuffer], a
+ ld [wLinkMenuSelectionSendBuffer + 1], a
+.exchangeMenuSelectionLoop
+ call Serial_ExchangeLinkMenuSelection
+ ld a, [wLinkMenuSelectionReceiveBuffer]
ld b, a
and $f0
cp $d0
jr z, .asm_5c7d
- ld a, [wcc3e]
+ ld a, [wLinkMenuSelectionReceiveBuffer + 1]
ld b, a
and $f0
cp $d0
- jr nz, .asm_5c66
+ jr nz, .exchangeMenuSelectionLoop
.asm_5c7d
ld a, b
- and $c
- jr nz, .asm_5c8b
- ld a, [wcc42]
- and $c
- jr z, .asm_5c52
- jr .asm_5ca1
-.asm_5c8b
- ld a, [wcc42]
- and $c
- jr z, .asm_5c98
- ld a, [$ffaa]
- cp $2
- jr z, .asm_5ca1
-.asm_5c98
+ and $c ; did the enemy press A or B?
+ jr nz, .enemyPressedAOrB
+; the enemy didn't press A or B
+ ld a, [wLinkMenuSelectionSendBuffer]
+ and $c ; did the player press A or B?
+ jr z, .waitForInputLoop ; if neither the player nor the enemy pressed A or B, try again
+ jr .doneChoosingMenuSelection ; if the player pressed A or B but the enemy didn't, use the player's selection
+.enemyPressedAOrB
+ ld a, [wLinkMenuSelectionSendBuffer]
+ and $c ; did the player press A or B?
+ jr z, .useEnemyMenuSelection ; if the enemy pressed A or B but the player didn't, use the enemy's selection
+; the enemy and the player both pressed A or B
+; The gameboy that is clocking the connection wins.
+ ld a, [hSerialConnectionStatus]
+ cp USING_INTERNAL_CLOCK
+ jr z, .doneChoosingMenuSelection
+.useEnemyMenuSelection
ld a, b
- ld [wcc42], a
+ ld [wLinkMenuSelectionSendBuffer], a
and $3
ld [wCurrentMenuItem], a ; wCurrentMenuItem
-.asm_5ca1
- ld a, [$ffaa]
- cp $2
- jr nz, .asm_5cb1
+.doneChoosingMenuSelection
+ ld a, [hSerialConnectionStatus]
+ cp USING_INTERNAL_CLOCK
+ jr nz, .skipStartingTransfer
call DelayFrame
call DelayFrame
- ld a, $81
- ld [$ff02], a
-.asm_5cb1
+ ld a, START_TRANSFER_INTERNAL_CLOCK
+ ld [rSC], a
+.skipStartingTransfer
ld b, $7f
ld c, $7f
ld d, $ec
- ld a, [wcc42]
- and $8
- jr nz, .asm_5ccc
- ld a, [wCurrentMenuItem] ; wCurrentMenuItem
+ ld a, [wLinkMenuSelectionSendBuffer]
+ and (B_BUTTON << 2) ; was B button pressed?
+ jr nz, .updateCursorPosition
+; A button was pressed
+ ld a, [wCurrentMenuItem]
cp $2
- jr z, .asm_5ccc
+ jr z, .updateCursorPosition
ld c, d
ld d, b
dec a
- jr z, .asm_5ccc
+ jr z, .updateCursorPosition
ld b, c
ld c, d
-.asm_5ccc
+.updateCursorPosition
ld a, b
Coorda 6, 7
ld a, c
Coorda 6, 9
ld a, d
Coorda 6, 11
- ld c, $28
+ ld c, 40
call DelayFrames
call LoadScreenTilesFromBuffer1
- ld a, [wcc42]
- and $8
- jr nz, .asm_5d2d
- ld a, [wCurrentMenuItem] ; wCurrentMenuItem
+ ld a, [wLinkMenuSelectionSendBuffer]
+ and (B_BUTTON << 2) ; was B button pressed?
+ jr nz, .choseCancel ; cancel if B pressed
+ ld a, [wCurrentMenuItem]
cp $2
- jr z, .asm_5d2d
+ jr z, .choseCancel
xor a
- ld [wWalkBikeSurfState], a
- ld a, [wCurrentMenuItem] ; wCurrentMenuItem
+ ld [wWalkBikeSurfState], a ; start walking
+ ld a, [wCurrentMenuItem]
and a
ld a, TRADE_CENTER
- jr nz, .asm_5cfc
+ jr nz, .next
ld a, BATTLE_CENTER
-.asm_5cfc
+.next
ld [wd72d], a
ld hl, PleaseWaitText
call PrintText
@@ -261,23 +265,23 @@ LinkMenu: ; 5c0a (1:5c0a)
call DelayFrames
ld hl, wd732
res 1, [hl]
- ld a, [W_ANIMATIONID] ; W_ANIMATIONID
+ ld a, [W_ANIMATIONID]
ld [wDestinationMap], a
call SpecialWarpIn
ld c, $14
call DelayFrames
xor a
- ld [wMenuJoypadPollCount], a ; wMenuJoypadPollCount
- ld [wcc42], a
- inc a
- ld [W_ISLINKBATTLE], a ; W_ISLINKBATTLE
+ ld [wMenuJoypadPollCount], a
+ ld [wSerialExchangeNybbleSendData], a
+ inc a ; LINK_STATE_IN_CABLE_CLUB
+ ld [wLinkState], a
ld [wcc47], a
jr SpecialEnterMap
-.asm_5d2d
+.choseCancel
xor a
- ld [wMenuJoypadPollCount], a ; wMenuJoypadPollCount
+ ld [wMenuJoypadPollCount], a
call Delay3
- call Func_72d7
+ call CloseLinkConnection
ld hl, LinkCanceledText
call PrintText
ld hl, wd72e
diff --git a/engine/menu/naming_screen.asm b/engine/menu/naming_screen.asm
index b7db452a..5d338628 100755
--- a/engine/menu/naming_screen.asm
+++ b/engine/menu/naming_screen.asm
@@ -16,7 +16,7 @@ AskName: ; 64eb (1:64eb)
hlCoord 14, 7
ld bc, $80f
ld a, $14
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
pop hl
ld a, [wCurrentMenuItem] ; wCurrentMenuItem
diff --git a/engine/menu/start_sub_menus.asm b/engine/menu/start_sub_menus.asm
index c6373e76..cdd93875 100755
--- a/engine/menu/start_sub_menus.asm
+++ b/engine/menu/start_sub_menus.asm
@@ -31,7 +31,7 @@ StartMenu_Pokemon: ; 130a9 (4:70a9)
.chosePokemon
call SaveScreenTilesToBuffer1 ; save screen
ld a,$04
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID ; display pokemon menu options
ld hl,wWhichTrade
ld bc,$020c ; max menu item ID, top menu item Y
@@ -300,13 +300,13 @@ ItemMenuLoop: ; 132fc (4:72fc)
call GoPAL_SET_CF1C
StartMenu_Item: ; 13302 (4:7302)
- ld a,[W_ISLINKBATTLE]
- dec a
- jr nz,.notInLinkBattle
+ ld a,[wLinkState]
+ dec a ; is the player in the Colosseum or Trade Centre?
+ jr nz,.notInCableClubRoom
ld hl,CannotUseItemsHereText
call PrintText
jr .exitMenu
-.notInLinkBattle
+.notInCableClubRoom
ld bc,wNumBagItems
ld hl,wcf8b
ld a,c
@@ -342,7 +342,7 @@ StartMenu_Item: ; 13302 (4:7302)
jp z,.useOrTossItem
.notBicycle1
ld a,$06 ; use/toss menu
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID
ld hl,wTopMenuItemY
ld a,11
diff --git a/engine/menu/vending_machine.asm b/engine/menu/vending_machine.asm
index c2968e2f..1eba782b 100755
--- a/engine/menu/vending_machine.asm
+++ b/engine/menu/vending_machine.asm
@@ -2,7 +2,7 @@ VendingMachineMenu: ; 74ee0 (1d:4ee0)
ld hl, VendingMachineText1
call PrintText
ld a, $13
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
xor a
ld [wCurrentMenuItem], a ; wCurrentMenuItem
@@ -70,7 +70,7 @@ VendingMachineMenu: ; 74ee0 (1d:4ee0)
ld c, $3
predef SubBCDPredef
ld a, $13
- ld [wd125], a
+ ld [wTextBoxID], a
jp DisplayTextBoxID
.BagFull
ld hl, VendingMachineText6
diff --git a/engine/mon_party_sprites.asm b/engine/mon_party_sprites.asm
index 5fa5c3bc..52bd0fd4 100755
--- a/engine/mon_party_sprites.asm
+++ b/engine/mon_party_sprites.asm
@@ -382,7 +382,7 @@ GetPartyMonSpriteID: ; 718e9 (1c:58e9)
ld c, a
dec a
srl a
- ld hl, MonPartyData ; $590d
+ ld hl, MonPartyData
ld e, a
ld d, $0
add hl, de
diff --git a/engine/overworld/cable_club_npc.asm b/engine/overworld/cable_club_npc.asm
index d071eee5..bdab41a6 100755
--- a/engine/overworld/cable_club_npc.asm
+++ b/engine/overworld/cable_club_npc.asm
@@ -1,51 +1,51 @@
CableClubNPC: ; 71c5 (1:71c5)
- ld hl, CableClubNPCText1
+ ld hl, CableClubNPCWelcomeText
call PrintText
ld a, [wd74b]
- bit 5, a
- jp nz, Func_71e1
+ bit 5, a ; received pokedex?
+ jp nz, .receivedPokedex
+; if the player hasn't received the pokedex
ld c, $3c
call DelayFrames
- ld hl, CableClubNPCText6
+ ld hl, CableClubNPCMakingPreparationsText
call PrintText
jp Func_7298
-
-Func_71e1: ; 71e1 (1:71e1)
+.receivedPokedex
ld a, $1
ld [wMenuJoypadPollCount], a
- ld a, $5a
- ld [wcc47], a
-.asm_71eb
- ld a, [$ffaa]
- cp $2
- jr z, .asm_721a ; 0x71ef $29
- cp $1
- jr z, .asm_721a ; 0x71f3 $25
- ld a, $ff
- ld [$ffaa], a
- ld a, $2
+ ld a, 90
+ ld [wLinkTimeoutCounter], a
+.establishConnectionLoop
+ ld a, [hSerialConnectionStatus]
+ cp USING_INTERNAL_CLOCK
+ jr z, .establishedConnection
+ cp USING_EXTERNAL_CLOCK
+ jr z, .establishedConnection
+ ld a, CONNECTION_NOT_ESTABLISHED
+ ld [hSerialConnectionStatus], a
+ ld a, ESTABLISH_CONNECTION_WITH_EXTERNAL_CLOCK
ld [rSB], a
xor a
- ld [$ffad], a
- ld a, $80
- ld [$ff02], a
- ld a, [wcc47]
+ ld [hSerialReceiveData], a
+ ld a, START_TRANSFER_EXTERNAL_CLOCK
+ ld [rSC], a
+ ld a, [wLinkTimeoutCounter]
dec a
- ld [wcc47], a
- jr z, .asm_7287 ; 0x720b $7a
- ld a, $1
+ ld [wLinkTimeoutCounter], a
+ jr z, .failedToEstablishConnection
+ ld a, ESTABLISH_CONNECTION_WITH_INTERNAL_CLOCK
ld [rSB], a
- ld a, $81
- ld [$ff02], a
+ ld a, START_TRANSFER_INTERNAL_CLOCK
+ ld [rSC], a
call DelayFrame
- jr .asm_71eb ; 0x7218 $d1
-.asm_721a
- call Func_22ed
+ jr .establishConnectionLoop
+.establishedConnection
+ call Serial_SendZeroByte
call DelayFrame
- call Func_22ed
- ld c, $32
+ call Serial_SendZeroByte
+ ld c, 50
call DelayFrames
- ld hl, CableClubNPCText2
+ ld hl, CableClubNPCPleaseApplyHereHaveToSaveText
call PrintText
xor a
ld [wMenuJoypadPollCount], a
@@ -54,22 +54,22 @@ Func_71e1: ; 71e1 (1:71e1)
ld [wMenuJoypadPollCount], a
ld a, [wCurrentMenuItem]
and a
- jr nz, .asm_728f ; 0x723e $4f
+ jr nz, .choseNo
callab SaveSAVtoSRAM
call WaitForSoundToFinish
ld a, (SFX_02_5d - SFX_Headers_02) / 3
call PlaySoundWaitForCurrent
- ld hl, CableClubNPCText3
+ ld hl, CableClubNPCPleaseWaitText
call PrintText
- ld hl, wcc47
+ ld hl, wUnknownSerialCounter
ld a, $3
ld [hli], a
xor a
ld [hl], a
- ld [$ffa9], a
- ld [wcc42], a
- call Func_227f
- ld hl, wcc47
+ ld [hSerialReceivedNewData], a
+ ld [wSerialExchangeNybbleSendData], a
+ call Serial_SyncAndExchangeNybble
+ ld hl, wUnknownSerialCounter
ld a, [hli]
inc a
jr nz, Func_72a8 ; 0x726b $3b
@@ -79,26 +79,26 @@ Func_71e1: ; 71e1 (1:71e1)
ld b, $a
.asm_7273
call DelayFrame
- call Func_22ed
+ call Serial_SendZeroByte
dec b
jr nz, .asm_7273 ; 0x727a $f7
- call Func_72d7
- ld hl, CableClubNPCText4
+ call CloseLinkConnection
+ ld hl, CableClubNPCLinkClosedBecauseOfInactivityText
call PrintText
jr Func_7298 ; 0x7285 $11
-.asm_7287
- ld hl, CableClubNPCText7
+.failedToEstablishConnection
+ ld hl, CableClubNPCAreaReservedFor2FriendsLinkedByCableText
call PrintText
jr Func_7298 ; 0x728d $9
-.asm_728f
- call Func_72d7
- ld hl, CableClubNPCText5
+.choseNo
+ call CloseLinkConnection
+ ld hl, CableClubNPCPleaseComeAgainText
call PrintText
; fall through
Func_7298: ; 7298 (1:7298)
xor a
- ld hl, wcc47
+ ld hl, wUnknownSerialCounter
ld [hli], a
ld [hl], a
ld hl, wd72e
@@ -115,42 +115,42 @@ Func_72a8: ; 72a8 (1:72a8)
ld b, BANK(LinkMenu)
jp Bankswitch
-CableClubNPCText7: ; 72b3 (1:72b3)
- TX_FAR _CableClubNPCText7
+CableClubNPCAreaReservedFor2FriendsLinkedByCableText: ; 72b3 (1:72b3)
+ TX_FAR _CableClubNPCAreaReservedFor2FriendsLinkedByCableText
db "@"
-CableClubNPCText1: ; 72b8 (1:72b8)
- TX_FAR _CableClubNPCText1
+CableClubNPCWelcomeText: ; 72b8 (1:72b8)
+ TX_FAR _CableClubNPCWelcomeText
db "@"
-CableClubNPCText2: ; 72bd (1:72bd)
- TX_FAR _CableClubNPCText2
+CableClubNPCPleaseApplyHereHaveToSaveText: ; 72bd (1:72bd)
+ TX_FAR _CableClubNPCPleaseApplyHereHaveToSaveText
db "@"
-CableClubNPCText3: ; 72c2 (1:72c2)
- TX_FAR _CableClubNPCText3
+CableClubNPCPleaseWaitText: ; 72c2 (1:72c2)
+ TX_FAR _CableClubNPCPleaseWaitText
db $a, "@"
-CableClubNPCText4: ; 72c8 (1:72c8)
- TX_FAR _CableClubNPCText4
+CableClubNPCLinkClosedBecauseOfInactivityText: ; 72c8 (1:72c8)
+ TX_FAR _CableClubNPCLinkClosedBecauseOfInactivityText
db "@"
-CableClubNPCText5: ; 72cd (1:72cd)
- TX_FAR _CableClubNPCText5
+CableClubNPCPleaseComeAgainText: ; 72cd (1:72cd)
+ TX_FAR _CableClubNPCPleaseComeAgainText
db "@"
-CableClubNPCText6: ; 72d2 (1:72d2)
- TX_FAR _CableClubNPCText6
+CableClubNPCMakingPreparationsText: ; 72d2 (1:72d2)
+ TX_FAR _CableClubNPCMakingPreparationsText
db "@"
-Func_72d7: ; 72d7 (1:72d7)
+CloseLinkConnection: ; 72d7 (1:72d7)
call Delay3
- ld a, $ff
- ld [$ffaa], a
- ld a, $2
+ ld a, CONNECTION_NOT_ESTABLISHED
+ ld [hSerialConnectionStatus], a
+ ld a, ESTABLISH_CONNECTION_WITH_EXTERNAL_CLOCK
ld [rSB], a
xor a
- ld [$ffad], a
- ld a, $80
- ld [$ff02], a
+ ld [hSerialReceiveData], a
+ ld a, START_TRANSFER_EXTERNAL_CLOCK
+ ld [rSC], a
ret
diff --git a/engine/overworld/elevator.asm b/engine/overworld/elevator.asm
index c2191b91..3a23d410 100755
--- a/engine/overworld/elevator.asm
+++ b/engine/overworld/elevator.asm
@@ -6,7 +6,7 @@ ShakeElevator: ; 7bf15 (1e:7f15)
call Delay3
ld a, $ff
call PlaySound
- ld a, [$ffaf]
+ ld a, [hSCY]
ld d, a
ld e, $1
; number of times to play collision sfx
@@ -16,7 +16,7 @@ ShakeElevator: ; 7bf15 (1e:7f15)
xor $fe
ld e, a
add d
- ld [$ffaf], a
+ ld [hSCY], a
push bc
ld c, BANK(SFX_02_5b)
ld a, (SFX_02_5b - SFX_Headers_02) / 3
@@ -27,7 +27,7 @@ ShakeElevator: ; 7bf15 (1e:7f15)
dec b
jr nz, .asm_7bf30
ld a, d
- ld [$ffaf], a
+ ld [hSCY], a
ld a, $ff
call PlaySound
ld c, BANK(SFX_02_5f)
diff --git a/engine/overworld/pokemart.asm b/engine/overworld/pokemart.asm
index a27f6b0a..644c155b 100755
--- a/engine/overworld/pokemart.asm
+++ b/engine/overworld/pokemart.asm
@@ -12,10 +12,10 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
inc a
ld [wcf93],a
ld a,$13
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID ; draw money text box
ld a,$15
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID ; do buy/sell/quit menu
ld hl,wd128 ; pointer to this pokemart's inventory
ld a,[hli]
@@ -46,7 +46,7 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
.sellMenuLoop
call LoadScreenTilesFromBuffer1 ; restore saved screen
ld a,$13
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID ; draw money text box
ld hl,wNumBagItems
ld a,l
@@ -80,7 +80,7 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
hlCoord 14, 7
ld bc,$080f
ld a,$14
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID ; yes/no menu
ld a,[wd12e]
cp a,$02
@@ -120,7 +120,7 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
.buyMenuLoop
call LoadScreenTilesFromBuffer1 ; restore saved screen
ld a,$13
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID ; draw money text box
ld hl,wStringBuffer2 + 11
ld a,l
@@ -151,7 +151,7 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
hlCoord 14, 7
ld bc,$080f
ld a,$14
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID ; yes/no menu
ld a,[wd12e]
cp a,$02
@@ -181,7 +181,7 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
.returnToMainPokemartMenu
call LoadScreenTilesFromBuffer1
ld a,$13
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID ; draw money text box
ld hl,PokemartAnythingElseText
call PrintText
diff --git a/engine/predefs.asm b/engine/predefs.asm
index b21ff884..8a98bd3d 100755
--- a/engine/predefs.asm
+++ b/engine/predefs.asm
@@ -91,17 +91,17 @@ PredefPointers:: ; 4fe79 (13:7e79)
add_predef Func_48125
add_predef UpdateHPBar
add_predef HPBarLength
- add_predef Func_5ab0
+ add_predef Diploma_TextBoxBorder
add_predef Func_3ed02
add_predef ShowPokedexMenu
add_predef EvolutionAfterBattle
add_predef SaveSAVtoSRAM0
add_predef InitOpponent
- add_predef Func_5a5f
+ add_predef CableClub_Run
add_predef DrawBadges
add_predef Func_410f3
add_predef BattleTransition
- add_predef Func_79dda
+ add_predef CopyTileIDsFromList
add_predef PlayIntro
add_predef Func_79869
add_predef FlashScreen
@@ -129,14 +129,14 @@ PredefPointers:: ; 4fe79 (13:7e79)
add_predef LoadTownMap_Nest
add_predef Func_27d6b
add_predef EmotionBubble; 4C player exclamation
- add_predef Func_5aaf; return immediately
+ add_predef EmptyFunc3; return immediately
add_predef AskName
add_predef PewterGuys
add_predef SaveSAVtoSRAM2
add_predef LoadSAVCheckSum2
add_predef LoadSAV
add_predef SaveSAVtoSRAM1
- add_predef Predef54 ; 54 initiate trade
+ add_predef DoInGameTradeDialogue ; 54 initiate trade
add_predef HallOfFamePC
add_predef DisplayDexRating
dbw $1E, _LeaveMapAnim ; wrong bank
diff --git a/engine/save.asm b/engine/save.asm
index e6b1bd94..7b1db4c7 100755
--- a/engine/save.asm
+++ b/engine/save.asm
@@ -175,7 +175,7 @@ SaveSAVConfirm: ; 73768 (1c:7768)
hlCoord 0, 7
ld bc,$0801 ;arrow's coordinates |b = Y|c = X|
ld a,$14 ;one line shifting ($28 = 2 lines)
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID ;handle Yes/No KeyPress
ld a,[wCurrentMenuItem]
ret
diff --git a/engine/slot_machine.asm b/engine/slot_machine.asm
index a8b978f8..2444155c 100755
--- a/engine/slot_machine.asm
+++ b/engine/slot_machine.asm
@@ -135,10 +135,10 @@ MainSlotMachineLoop: ; 37395 (d:7395)
call PrintText
ld hl, wTileMap + $fe
ld bc, $0d0f
- xor a
- ld [wd12c], a
+ xor a ; YES_NO_MENU
+ ld [wTwoOptionMenuID], a
ld a, $14
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
ld a, [wCurrentMenuItem]
and a
diff --git a/engine/titlescreen.asm b/engine/titlescreen.asm
index e13b7da6..5e8a15d5 100755
--- a/engine/titlescreen.asm
+++ b/engine/titlescreen.asm
@@ -27,9 +27,9 @@ LoadTitlescreenGraphics: ; 42dd (1:42dd)
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
xor a
ld [hTilesetType], a
- ld [$ffae], a
+ ld [hSCX], a
ld a, $40
- ld [$ffaf], a
+ ld [hSCY], a
ld a, $90
ld [hWY], a
call ClearScreen
diff --git a/engine/trade.asm b/engine/trade.asm
index 4a8f865a..5afca809 100755
--- a/engine/trade.asm
+++ b/engine/trade.asm
@@ -1,29 +1,29 @@
Func_410e2: ; 410e2 (10:50e2)
- ld a, [wWhichTrade] ; wWhichTrade
+ ld a, [wTradedPlayerMonSpecies]
ld [wcd5e], a
- ld a, [wTrainerEngageDistance]
+ ld a, [wTradedEnemyMonSpecies]
ld [wcd5f], a
- ld de, PointerIDs_41138 ; $5138
+ ld de, PointerIDs_41138
jr Func_41102
Func_410f3: ; 410f3 (10:50f3)
- ld a, [wTrainerEngageDistance]
+ ld a, [wTradedEnemyMonSpecies]
ld [wcd5e], a
ld a, [wTrainerSpriteOffset]
ld [wcd5f], a
ld de, PointerIDs_41149
Func_41102: ; 41102 (10:5102)
- ld a, [W_OPTIONS] ; W_OPTIONS
+ ld a, [W_OPTIONS]
push af
- ld a, [$ffaf]
+ ld a, [hSCY]
push af
- ld a, [$ffae]
+ ld a, [hSCX]
push af
xor a
- ld [W_OPTIONS], a ; W_OPTIONS
- ld [$ffaf], a
- ld [$ffae], a
+ ld [W_OPTIONS], a
+ ld [hSCY], a
+ ld [hSCX], a
push de
.asm_41115
pop de
@@ -32,7 +32,7 @@ Func_41102: ; 41102 (10:5102)
jr z, .asm_4112d
inc de
push de
- ld hl, PointerTable_4115f ; $515f
+ ld hl, PointerTable_4115f
add a
ld c, a
ld b, $0
@@ -40,16 +40,16 @@ Func_41102: ; 41102 (10:5102)
ld a, [hli]
ld h, [hl]
ld l, a
- ld de, .asm_41115 ; $5115
+ ld de, .asm_41115
push de
jp [hl]
.asm_4112d
pop af
- ld [$ffae], a
+ ld [hSCX], a
pop af
- ld [$ffaf], a
+ ld [hSCY], a
pop af
- ld [W_OPTIONS], a ; W_OPTIONS
+ ld [W_OPTIONS], a
ret
; these bytes refer to the $00th through $10th pointer of PointerTable_4115f
@@ -61,13 +61,13 @@ PointerIDs_41149: ; 41149 (10:5149)
PointerTable_4115f: ; 4115f (10:515f)
dw LoadTradingGFXAndMonNames
- dw Func_41245
- dw Func_41298
- dw Func_412d2
- dw Func_41336
+ dw Trade_ShowPlayerMon
+ dw Trade_DrawOpenEndOfLinkCable
+ dw Trade_AnimateBallEnteringLinkCable
+ dw Trade_ShowEnemyMon
dw Func_41376
dw Func_413c6
- dw Func_41181
+ dw Trade_Delay100
dw Func_415c8
dw PrintTradeWentToText
dw PrintTradeForSendsText
@@ -76,46 +76,46 @@ PointerTable_4115f: ; 4115f (10:515f)
dw PrintTradeWillTradeText
dw Func_4123b
dw Func_415df
- dw Func_41217
+ dw Trade_SwapNames
-Func_41181: ; 41181 (10:5181)
- ld c, $64
+Trade_Delay100: ; 41181 (10:5181)
+ ld c, 100
jp DelayFrames
-Func_41186: ; 41186 (10:5186)
+Trade_CopyTileMapToVRAM: ; 41186 (10:5186)
ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
call Delay3
xor a
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
ret
-Delay50: ; 41191 (10:5191)
- ld c, $50
+Trade_Delay80: ; 41191 (10:5191)
+ ld c, 80
jp DelayFrames
-Func_41196: ; 41196 (10:5196)
+Trade_ClearTileMap: ; 41196 (10:5196)
ld hl, wTileMap
- ld bc, $168
- ld a, $7f
+ ld bc, 20 * 18
+ ld a, " "
jp FillMemory
LoadTradingGFXAndMonNames: ; 411a1 (10:51a1)
- call Func_41196
+ call Trade_ClearTileMap
call DisableLCD
- ld hl, TradingAnimationGraphics ; $69be
+ ld hl, TradingAnimationGraphics
ld de, vChars2 + $310
ld bc, $310
ld a, BANK(TradingAnimationGraphics)
call FarCopyData2
- ld hl, TradingAnimationGraphics2 ; $6cce
+ ld hl, TradingAnimationGraphics2
ld de, vSprites + $7c0
ld bc, $40
ld a, BANK(TradingAnimationGraphics2)
call FarCopyData2
ld hl, vBGMap0
ld bc, $800
- ld a, $7f
+ ld a, " "
call FillMemory
call ClearSprites
ld a, $ff
@@ -128,40 +128,40 @@ LoadTradingGFXAndMonNames: ; 411a1 (10:51a1)
jr z, .asm_411e5
ld a, $f0
.asm_411e5
- ld [rOBP0], a ; $ff48
+ ld [rOBP0], a
call EnableLCD
xor a
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
- ld a, [wWhichTrade] ; wWhichTrade
+ ld [H_AUTOBGTRANSFERENABLED], a
+ ld a, [wTradedPlayerMonSpecies]
ld [wd11e], a
call GetMonName
ld hl, wcd6d
ld de, wcf4b
ld bc, $b
call CopyData
- ld a, [wTrainerEngageDistance]
+ ld a, [wTradedEnemyMonSpecies]
ld [wd11e], a
jp GetMonName
Func_4120b: ; 4120b (10:520b)
- ld a, $d0
- ld [rOBP1], a ; $ff49
+ ld a, %11010000
+ ld [rOBP1], a
ld b, BANK(Func_7176c)
ld hl, Func_7176c
jp Bankswitch
-Func_41217: ; 41217 (10:5217)
+Trade_SwapNames: ; 41217 (10:5217)
ld hl, wPlayerName
- ld de, wHPBarMaxHP
- ld bc, $000b
+ ld de, wBuffer
+ ld bc, 11
call CopyData
- ld hl, W_GRASSRATE
+ ld hl, wLinkEnemyTrainerName
ld de, wPlayerName
- ld bc, $000b
+ ld bc, 11
call CopyData
- ld hl, wHPBarMaxHP
- ld de, W_GRASSRATE
- ld bc, $000b
+ ld hl, wBuffer
+ ld de, wLinkEnemyTrainerName
+ ld bc, 11
jp CopyData
Func_4123b: ; 4123b (10:523b)
@@ -171,90 +171,90 @@ Func_4123b: ; 4123b (10:523b)
res 6, [hl]
ret
-Func_41245: ; 41245 (10:5245)
- ld a, $ab
- ld [rLCDC], a ; $ff40
+Trade_ShowPlayerMon: ; 41245 (10:5245)
+ ld a, %10101011
+ ld [rLCDC], a
ld a, $50
ld [hWY], a
ld a, $86
- ld [rWX], a ; $ff4b
- ld [$ffae], a
+ ld [rWX], a
+ ld [hSCX], a
xor a
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
hlCoord 4, 0
- ld b, $6
- ld c, $a
+ ld b, 6
+ ld c, 10
call TextBoxBorder
- call Func_42769
+ call Trade_PrintPlayerMonInfoText
ld b, $98
call CopyScreenTileBufferToVRAM
call ClearScreen
- ld a, [wWhichTrade] ; wWhichTrade
- call Func_415a4
+ ld a, [wTradedPlayerMonSpecies]
+ call Trade_LoadMonSprite
ld a, $7e
-.asm_41273
+.slideScreenLoop
push af
call DelayFrame
pop af
- ld [rWX], a ; $ff4b
- ld [$ffae], a
+ ld [rWX], a
+ ld [hSCX], a
dec a
dec a
and a
- jr nz, .asm_41273
- call Delay50
- ld a, ANIM_AD
- call Func_41676
- ld a, ANIM_AA
- call Func_41676
- ld a, [wWhichTrade] ; wWhichTrade
+ jr nz, .slideScreenLoop
+ call Trade_Delay80
+ ld a, TRADE_BALL_POOF_ANIM
+ call Trade_ShowAnimation
+ ld a, TRADE_BALL_DROP_ANIM
+ call Trade_ShowAnimation
+ ld a, [wTradedPlayerMonSpecies]
call PlayCry
xor a
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
ret
-Func_41298: ; 41298 (10:5298)
- call Func_41196
+Trade_DrawOpenEndOfLinkCable: ; 41298 (10:5298)
+ call Trade_ClearTileMap
ld b, $98
call CopyScreenTileBufferToVRAM
ld b, $8
call GoPAL_SET
ld hl, vBGMap1 + $8c
- call Func_414ae
+ call Trade_RedrawRows4And5
ld a, $a0
- ld [$ffae], a
+ ld [hSCX], a
call DelayFrame
- ld a, $8b
- ld [rLCDC], a ; $ff40
+ ld a, %10001011
+ ld [rLCDC], a
hlCoord 6, 2
- ld b, $7
- call Func_41842
- call Func_41186
+ ld b, $7 ; open end of link cable tile ID list index
+ call CopyTileIDsFromList_ZeroBaseTileID
+ call Trade_CopyTileMapToVRAM
ld a, (SFX_02_3d - SFX_Headers_02) / 3
call PlaySound
- ld c, $14
-.asm_412c8
- ld a, [$ffae]
- add $4
- ld [$ffae], a
+ ld c, 20
+.loop
+ ld a, [hSCX]
+ add 4
+ ld [hSCX], a
dec c
- jr nz, .asm_412c8
+ jr nz, .loop
ret
-Func_412d2: ; 412d2 (10:52d2)
- ld a, ANIM_AB
- call Func_41676
+Trade_AnimateBallEnteringLinkCable: ; 412d2 (10:52d2)
+ ld a, TRADE_BALL_SHAKE_ANIM
+ call Trade_ShowAnimation
ld c, 10
call DelayFrames
- ld a, $e4
- ld [rOBP0], a ; $ff48
+ ld a, %11100100
+ ld [rOBP0], a
xor a
ld [wd09f], a
ld bc, $2060
-.asm_412e7
+.moveBallInsideLinkCableLoop
push bc
xor a
- ld de, UnknownOAM_4132e ; $532e
+ ld de, Trade_BallInsideLinkCableOAM
call WriteOAMBlock
ld a, [wd09f]
xor $1
@@ -263,58 +263,58 @@ Func_412d2: ; 412d2 (10:52d2)
ld hl, wOAMBuffer + $02
ld de, $4
ld c, e
-.asm_41300
+.cycleSpriteFramesLoop
ld [hl], a
add hl, de
dec c
- jr nz, .asm_41300
+ jr nz, .cycleSpriteFramesLoop
call Delay3
pop bc
ld a, c
add $4
ld c, a
cp $a0
- jr nc, .asm_41318
+ jr nc, .ballSpriteReachedEdgeOfScreen
ld a, (SFX_02_3c - SFX_Headers_02) / 3
call PlaySound
- jr .asm_412e7
-.asm_41318
+ jr .moveBallInsideLinkCableLoop
+.ballSpriteReachedEdgeOfScreen
call ClearSprites
ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
call ClearScreen
ld b, $98
call CopyScreenTileBufferToVRAM
call Delay3
xor a
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
ret
-UnknownOAM_4132e: ; 4132e (10:532e)
+Trade_BallInsideLinkCableOAM: ; 4132e (10:532e)
db $7E,$00,$7E,$20
db $7E,$40,$7E,$60
-Func_41336: ; 41336 (10:5336)
- ld a, ANIM_AC
- call Func_41676
+Trade_ShowEnemyMon: ; 41336 (10:5336)
+ ld a, TRADE_BALL_TILT_ANIM
+ call Trade_ShowAnimation
call Func_415c8
hlCoord 4, 10
- ld b, $6
- ld c, $a
+ ld b, 6
+ ld c, 10
call TextBoxBorder
- call Func_427a7
- call Func_41186
+ call Trade_PrintEnemyMonInfoText
+ call Trade_CopyTileMapToVRAM
ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
- ld a, [wTrainerEngageDistance]
- call Func_415a4
- ld a, ANIM_AD
- call Func_41676
+ ld [H_AUTOBGTRANSFERENABLED], a
+ ld a, [wTradedEnemyMonSpecies]
+ call Trade_LoadMonSprite
+ ld a, TRADE_BALL_POOF_ANIM
+ call Trade_ShowAnimation
ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
- ld a, [wTrainerEngageDistance]
+ ld [H_AUTOBGTRANSFERENABLED], a
+ ld a, [wTradedEnemyMonSpecies]
call PlayCry
- call Func_41181
+ call Trade_Delay100
hlCoord 4, 10
ld bc, $80c
call ClearScreenArea
@@ -325,23 +325,23 @@ Func_41376: ; 41376 (10:5376)
ld a, $1
ld [wd08a], a
ld a, $e4
- ld [rOBP0], a ; $ff48
+ ld [rOBP0], a
ld a, $54
- ld [W_BASECOORDX], a ; wd081
+ ld [W_BASECOORDX], a
ld a, $1c
- ld [W_BASECOORDY], a ; wd082
+ ld [W_BASECOORDY], a
ld a, [wcd5e]
ld [wcd5d], a
call Func_41505
call Func_4142d
- call Func_41186
+ call Trade_CopyTileMapToVRAM
call Func_4149f
ld hl, vBGMap1 + $8c
- call Func_414ae
+ call Trade_RedrawRows4And5
ld b, $6
call Func_414c5
ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
call Func_4149f
ld b, $4
call Func_414c5
@@ -349,7 +349,7 @@ Func_41376: ; 41376 (10:5376)
ld b, $6
call Func_414c5
xor a
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
call Func_41525
jp ClearSprites
@@ -358,22 +358,22 @@ Func_413c6: ; 413c6 (10:53c6)
xor a
ld [wd08a], a
ld a, $64
- ld [W_BASECOORDX], a ; wd081
+ ld [W_BASECOORDX], a
ld a, $44
- ld [W_BASECOORDY], a ; wd082
+ ld [W_BASECOORDY], a
ld a, [wcd5f]
ld [wcd5d], a
call Func_41505
call Func_4145c
- call Func_41186
+ call Trade_CopyTileMapToVRAM
call Func_4149f
ld hl, vBGMap1 + $94
- call Func_414ae
+ call Trade_RedrawRows4And5
call Func_41525
ld b, $6
call Func_414c5
ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
call Func_4149f
ld b, $4
call Func_414c5
@@ -381,27 +381,27 @@ Func_413c6: ; 413c6 (10:53c6)
ld b, $6
call Func_414c5
xor a
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
jp ClearSprites
Func_41411: ; 41411 (10:5411)
ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
call ClearScreen
xor a
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
call Func_4120b
call DelayFrame
- ld a, $ab
- ld [rLCDC], a ; $ff40
+ ld a, %10101011
+ ld [rLCDC], a
xor a
- ld [$ffae], a
+ ld [hSCX], a
ld a, $90
ld [hWY], a
ret
Func_4142d: ; 4142d (10:542d)
- call Func_41196
+ call Trade_ClearTileMap
hlCoord 11, 4
ld a, $5d
ld [hli], a
@@ -413,18 +413,18 @@ Func_4142d: ; 4142d (10:542d)
jr nz, .asm_4143a
hlCoord 5, 3
ld b, $6
- call Func_41842
+ call CopyTileIDsFromList_ZeroBaseTileID
hlCoord 4, 12
- ld b, $2
- ld c, $7
+ ld b, 2
+ ld c, 7
call TextBoxBorder
hlCoord 5, 14
- ld de, wPlayerName ; wd158
+ ld de, wPlayerName
call PlaceString
jp DelayFrame
Func_4145c: ; 4145c (10:545c)
- call Func_41196
+ call Trade_ClearTileMap
hlCoord 0, 4
ld a, $5e
ld c, $e
@@ -451,18 +451,18 @@ Func_4145c: ; 4145c (10:545c)
ld [hl], a
hlCoord 7, 8
ld b, $6
- call Func_41842
+ call CopyTileIDsFromList_ZeroBaseTileID
hlCoord 6, 0
ld b, $2
ld c, $7
call TextBoxBorder
hlCoord 7, 2
- ld de, W_GRASSRATE ; W_GRASSRATE
+ ld de, wLinkEnemyTrainerName
call PlaceString
jp DelayFrame
Func_4149f: ; 4149f (10:549f)
- call Func_41196
+ call Trade_ClearTileMap
hlCoord 0, 4
ld a, $5e
ld c, $14
@@ -472,7 +472,7 @@ Func_4149f: ; 4149f (10:549f)
jr nz, .asm_414a9
ret
-Func_414ae: ; 414ae (10:54ae)
+Trade_RedrawRows4And5: ; 414ae (10:54ae)
push hl
hlCoord 0, 4
call CopyToScreenEdgeTiles
@@ -480,10 +480,10 @@ Func_414ae: ; 414ae (10:54ae)
ld a, h
ld [H_SCREENEDGEREDRAWADDR + 1], a
ld a, l
- ld [H_SCREENEDGEREDRAWADDR], a ; $ffd1
- ld a, $2
- ld [H_SCREENEDGEREDRAW], a ; $ffd0
- ld c, $a
+ ld [H_SCREENEDGEREDRAWADDR], a
+ ld a, REDRAWROW
+ ld [H_SCREENEDGEREDRAW], a
+ ld c, 10
jp DelayFrames
Func_414c5: ; 414c5 (10:54c5)
@@ -494,14 +494,14 @@ Func_414c5: ; 414c5 (10:54c5)
ld a, e
dec a
jr z, .asm_414d5
- ld a, [$ffae]
+ ld a, [hSCX]
sub $2
jr .asm_414d9
.asm_414d5
- ld a, [$ffae]
+ ld a, [hSCX]
add $2
.asm_414d9
- ld [$ffae], a
+ ld [hSCX], a
call DelayFrame
dec d
jr nz, .asm_414cb
@@ -514,9 +514,9 @@ Func_414e8: ; 414e8 (10:54e8)
push de
push bc
push hl
- ld a, [rBGP] ; $ff47
+ ld a, [rBGP]
xor $3c
- ld [rBGP], a ; $ff47
+ ld [rBGP], a
ld hl, wOAMBuffer + $02
ld de, $4
ld c, $14
@@ -540,10 +540,10 @@ Func_41510: ; 41510 (10:5510)
ld hl, wOAMBuffer
ld c, $14
.asm_41515
- ld a, [W_BASECOORDY] ; wd082
+ ld a, [W_BASECOORDY]
add [hl]
ld [hli], a
- ld a, [W_BASECOORDX] ; wd081
+ ld a, [W_BASECOORDX]
add [hl]
ld [hli], a
inc hl
@@ -566,9 +566,9 @@ Func_41525: ; 41525 (10:5525)
ld bc, $fc00
.asm_4153f
ld a, b
- ld [W_BASECOORDX], a ; wd081
+ ld [W_BASECOORDX], a
ld a, c
- ld [W_BASECOORDY], a ; wd082
+ ld [W_BASECOORDY], a
ld d, $4
.asm_41549
call Func_41510
@@ -580,7 +580,7 @@ Func_41525: ; 41525 (10:5525)
ret
Func_41558: ; 41558 (10:5558)
- ld hl, OAMPointers_41574 ; $5574
+ ld hl, OAMPointers_41574
ld c, $4
xor a
.asm_4155e
@@ -630,58 +630,59 @@ UnknownOAM_4159c: ; 4159c (10:559c)
db $3B,$70,$3A,$70
db $39,$70,$38,$70
-Func_415a4: ; 415a4 (10:55a4)
+; a = species
+Trade_LoadMonSprite: ; 415a4 (10:55a4)
ld [wcf91], a
ld [wd0b5], a
ld [wcf1d], a
ld b, $b
ld c, $0
call GoPAL_SET
- ld a, [H_AUTOBGTRANSFERENABLED] ; $ffba
+ ld a, [H_AUTOBGTRANSFERENABLED]
xor $1
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
call GetMonHeader
hlCoord 7, 2
call LoadFlippedFrontSpriteByMonIndex
- ld c, $a
+ ld c, 10
jp DelayFrames
Func_415c8: ; 415c8 (10:55c8)
ld a, $1
- ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld [H_AUTOBGTRANSFERENABLED], a
call ClearScreen
- ld a, $e3
- ld [rLCDC], a ; $ff40
+ ld a, %11100011
+ ld [rLCDC], a
ld a, $7
- ld [rWX], a ; $ff4b
+ ld [rWX], a
xor a
ld [hWY], a
ld a, $90
- ld [$ffae], a
+ ld [hSCX], a
ret
Func_415df: ; 415df (10:55df)
- ld c, $32
+ ld c, 50
call DelayFrames
-.asm_415e4
+.loop
call DelayFrame
- ld a, [rWX] ; $ff4b
+ ld a, [rWX]
inc a
inc a
- ld [rWX], a ; $ff4b
+ ld [rWX], a
cp $a1
- jr nz, .asm_415e4
- call Func_41196
- ld c, $a
+ jr nz, .loop
+ call Trade_ClearTileMap
+ ld c, 10
call DelayFrames
ld a, $7
- ld [rWX], a ; $ff4b
+ ld [rWX], a
ret
PrintTradeWentToText: ; 415fe (10:55fe)
ld hl, TradeWentToText
call PrintText
- ld c, $c8
+ ld c, 200
call DelayFrames
jp Func_415df
@@ -692,10 +693,10 @@ TradeWentToText: ; 4160c (10:560c)
PrintTradeForSendsText: ; 41611 (10:5611)
ld hl, TradeForText
call PrintText
- call Delay50
+ call Trade_Delay80
ld hl, TradeSendsText
call PrintText
- jp Delay50
+ jp Trade_Delay80
TradeForText: ; 41623 (10:5623)
TX_FAR _TradeForText
@@ -708,10 +709,10 @@ TradeSendsText: ; 41628 (10:5628)
PrintTradeFarewellText: ; 4162d (10:562d)
ld hl, TradeWavesFarewellText
call PrintText
- call Delay50
+ call Trade_Delay80
ld hl, TradeTransferredText
call PrintText
- call Delay50
+ call Trade_Delay80
jp Func_415df
TradeWavesFarewellText: ; 41642 (10:5642)
@@ -725,7 +726,7 @@ TradeTransferredText: ; 41647 (10:5647)
PrintTradeTakeCareText: ; 4164c (10:564c)
ld hl, TradeTakeCareText
call PrintText
- jp Delay50
+ jp Trade_Delay80
TradeTakeCareText: ; 41655 (10:5655)
TX_FAR _TradeTakeCareText
@@ -734,10 +735,10 @@ TradeTakeCareText: ; 41655 (10:5655)
PrintTradeWillTradeText: ; 4165a (10:565a)
ld hl, TradeWillTradeText
call PrintText
- call Delay50
+ call Trade_Delay80
ld hl, TradeforText
call PrintText
- jp Delay50
+ jp Trade_Delay80
TradeWillTradeText: ; 4166c (10:566c)
TX_FAR _TradeWillTradeText
@@ -747,8 +748,8 @@ TradeforText: ; 41671 (10:5671)
TX_FAR _TradeforText
db "@"
-Func_41676: ; 41676 (10:5676)
- ld [W_ANIMATIONID], a ; W_ANIMATIONID
+Trade_ShowAnimation: ; 41676 (10:5676)
+ ld [W_ANIMATIONID], a
xor a
ld [wcc5b], a
predef_jump MoveAnimation
diff --git a/engine/trade2.asm b/engine/trade2.asm
index b13a18b6..da199e77 100755
--- a/engine/trade2.asm
+++ b/engine/trade2.asm
@@ -1,8 +1,8 @@
-Func_42769: ; 42769 (10:6769)
+Trade_PrintPlayerMonInfoText: ; 42769 (10:6769)
hlCoord 5, 0
- ld de,OTString67E5
+ ld de,Trade_MonInfoText
call PlaceString
- ld a,[wWhichTrade]
+ ld a,[wTradedPlayerMonSpecies]
ld [wd11e],a
predef IndexToPokedex
hlCoord 9, 0
@@ -13,18 +13,18 @@ Func_42769: ; 42769 (10:6769)
ld de,wcf4b
call PlaceString
hlCoord 8, 4
- ld de,wTrainerScreenX
+ ld de,wTradedPlayerMonOT
call PlaceString
hlCoord 8, 6
- ld de,wcd4c
+ ld de,wTradedPlayerMonOTID
ld bc,$8205
jp PrintNumber
-Func_427a7: ; 427a7 (10:67a7)
+Trade_PrintEnemyMonInfoText: ; 427a7 (10:67a7)
hlCoord 5, 10
- ld de,OTString67E5
+ ld de,Trade_MonInfoText
call PlaceString
- ld a,[wTrainerEngageDistance]
+ ld a,[wTradedEnemyMonSpecies]
ld [wd11e],a
predef IndexToPokedex
hlCoord 9, 10
@@ -35,14 +35,14 @@ Func_427a7: ; 427a7 (10:67a7)
ld de,wcd6d
call PlaceString
hlCoord 8, 14
- ld de,wcd4e
+ ld de,wTradedEnemyMonOT
call PlaceString
hlCoord 8, 16
- ld de,wcd59
+ ld de,wTradedEnemyMonOTID
ld bc,$8205
jp PrintNumber
-OTString67E5: ; 427e5 (10:67e5)
+Trade_MonInfoText: ; 427e5 (10:67e5)
db "──",$74,$F2,$4E
db $4E
db "OT/",$4E
diff --git a/extras b/extras
-Subproject a87f66964cc602ff5575efebf27c388ef03fa94
+Subproject 698b0fc7e63d3dadf07247015e230bce145cc50
diff --git a/home.asm b/home.asm
index 3f6cbd34..20ea8550 100644
--- a/home.asm
+++ b/home.asm
@@ -1326,7 +1326,7 @@ AddAmountSoldToMoney:: ; 2b9e (0:2b9e)
ld c,3 ; length of money in bytes
predef AddBCDPredef ; add total price to money
ld a,$13
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID ; redraw money text box
ld a, (SFX_02_5a - SFX_Headers_02) / 3
call PlaySoundWaitForCurrent ; play sound
@@ -1399,7 +1399,7 @@ DisplayListMenuID:: ; 2be6 (0:2be6)
ld a,[hl]
ld [wd12a],a ; [wd12a] = number of list entries
ld a,$0d ; list menu text box ID
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID ; draw the menu text box
call UpdateSprites ; disable sprites behind the text box
; the code up to .skipMovingSprites appears to be useless
@@ -2136,7 +2136,7 @@ IsKeyItem:: ; 30d9 (0:30d9)
; function to draw various text boxes
; INPUT:
-; [wd125] = text box ID
+; [wTextBoxID] = text box ID
DisplayTextBoxID:: ; 30e8 (0:30e8)
ld a,[H_LOADEDROMBANK]
push af
@@ -2898,7 +2898,7 @@ GetSpriteMovementByte2Pointer:: ; 3558 (0:3558)
GetTrainerInformation:: ; 3566 (0:3566)
call GetTrainerName
- ld a, [W_ISLINKBATTLE] ; W_ISLINKBATTLE
+ ld a, [wLinkState]
and a
jr nz, .linkBattle
ld a, Bank(TrainerPicAndMoneyPointers)
@@ -2997,34 +2997,34 @@ YesNoChoice:: ; 35ec (0:35ec)
Func_35f4:: ; 35f4 (0:35f4)
ld a, $14
- ld [wd125], a
+ ld [wTextBoxID], a
call InitYesNoTextBoxParameters
jp DisplayTextBoxID
InitYesNoTextBoxParameters:: ; 35ff (0:35ff)
- xor a
- ld [wd12c], a
+ xor a ; YES_NO_MENU
+ ld [wTwoOptionMenuID], a
hlCoord 14, 7
ld bc, $80f
ret
YesNoChoicePokeCenter:: ; 360a (0:360a)
call SaveScreenTilesToBuffer1
- ld a, $6
- ld [wd12c], a
+ ld a, HEAL_CANCEL_MENU
+ ld [wTwoOptionMenuID], a
hlCoord 11, 6
ld bc, $80c
jr DisplayYesNoChoice
Func_361a:: ; 361a (0:361a)
call SaveScreenTilesToBuffer1
- ld a, $3
- ld [wd12c], a
+ ld a, WIDE_YES_NO_MENU
+ ld [wTwoOptionMenuID], a
hlCoord 12, 7
ld bc, $080d
DisplayYesNoChoice:: ; 3628 (0:3628)
ld a, $14
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
jp LoadScreenTilesFromBuffer1
@@ -3467,7 +3467,7 @@ WaitForTextScrollButtonPress:: ; 3865 (0:3865)
call HandleDownArrowBlinkTiming
pop hl
call JoypadLowSensitivity
- predef Func_5a5f
+ predef CableClub_Run
ld a, [hJoy5]
and A_BUTTON | B_BUTTON
jr z, .loop
@@ -3479,8 +3479,8 @@ WaitForTextScrollButtonPress:: ; 3865 (0:3865)
; (unless in link battle) waits for A or B being pressed and outputs the scrolling sound effect
ManualTextScroll:: ; 3898 (0:3898)
- ld a, [W_ISLINKBATTLE]
- cp $4
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
jr z, .inLinkBattle
call WaitForTextScrollButtonPress
ld a, (SFX_02_40 - SFX_Headers_02) / 3
@@ -4194,7 +4194,7 @@ PrintText:: ; 3c49 (0:3c49)
; Print text hl at (1, 14).
push hl
ld a,1
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID
call UpdateSprites
call Delay3
diff --git a/home/init.asm b/home/init.asm
index e4c24001..cc89ad34 100644
--- a/home/init.asm
+++ b/home/init.asm
@@ -26,7 +26,7 @@ rLCDC_DEFAULT EQU %11100011
ld [$ff43], a
ld [$ff42], a
ld [rSB], a
- ld [$ff02], a
+ ld [rSC], a
ld [$ff4b], a
ld [$ff4a], a
ld [$ff06], a
@@ -67,8 +67,8 @@ rLCDC_DEFAULT EQU %11100011
xor a
ld [hTilesetType], a
ld [$ff41], a
- ld [$ffae], a
- ld [$ffaf], a
+ ld [hSCX], a
+ ld [hSCY], a
ld [$ff0f], a
ld a, 1 << VBLANK + 1 << TIMER + 1 << SERIAL
ld [rIE], a
@@ -79,8 +79,8 @@ rLCDC_DEFAULT EQU %11100011
ld a, 7
ld [rWX], a
- ld a, $ff
- ld [$ffaa], a
+ ld a, CONNECTION_NOT_ESTABLISHED
+ ld [hSerialConnectionStatus], a
ld h, vBGMap0 / $100
call ClearBgMap
diff --git a/home/overworld.asm b/home/overworld.asm
index 50791184..c5c180c7 100644
--- a/home/overworld.asm
+++ b/home/overworld.asm
@@ -1609,12 +1609,12 @@ AdvancePlayerSprite:: ; 0d27 (0:0d27)
ld c,a
sla b
sla c
- ld a,[$ffaf]
+ ld a,[hSCY]
add b
- ld [$ffaf],a ; update background scroll Y
- ld a,[$ffae]
+ ld [hSCY],a ; update background scroll Y
+ ld a,[hSCX]
add c
- ld [$ffae],a ; update background scroll X
+ ld [hSCX],a ; update background scroll X
; shift all the sprites in the direction opposite of the player's motion
; so that the player appears to move relative to them
ld hl,wSpriteStateData1 + $14
@@ -2310,8 +2310,8 @@ LoadMapData:: ; 1241 (0:1241)
ld [wMapViewVRAMPointer + 1],a
xor a
ld [wMapViewVRAMPointer],a
- ld [$ffaf],a
- ld [$ffae],a
+ ld [hSCY],a
+ ld [hSCX],a
ld [wWalkCounter],a
ld [wd119],a
ld [wWalkBikeSurfStateCopy],a
diff --git a/home/serial.asm b/home/serial.asm
index 02eb3534..fa3d4c8a 100644
--- a/home/serial.asm
+++ b/home/serial.asm
@@ -1,304 +1,313 @@
-Serial:: ; 2125 (0:2125)
- push af
- push bc
- push de
- push hl
- ld a, [$ffaa]
- inc a
- jr z, .asm_2142
- ld a, [$ff01]
- ld [$ffad], a
- ld a, [$ffac]
- ld [$ff01], a
- ld a, [$ffaa]
- cp $2
- jr z, .asm_2162
- ld a, $80
- ld [$ff02], a
- jr .asm_2162
-.asm_2142
- ld a, [$ff01]
- ld [$ffad], a
- ld [$ffaa], a
- cp $2
- jr z, .asm_215f
- xor a
- ld [$ff01], a
- ld a, $3
- ld [rDIV], a ; $ff04
-.asm_2153
- ld a, [rDIV] ; $ff04
- bit 7, a
- jr nz, .asm_2153
- ld a, $80
- ld [$ff02], a
- jr .asm_2162
-.asm_215f
- xor a
- ld [$ff01], a
-.asm_2162
- ld a, $1
- ld [$ffa9], a
- ld a, $fe
- ld [$ffac], a
- pop hl
- pop de
- pop bc
- pop af
- reti
-
-Func_216f:: ; 216f (0:216f)
- ld a, $1
- ld [$ffab], a
-.asm_2173
- ld a, [hl]
- ld [$ffac], a
- call Func_219a
- push bc
- ld b, a
- inc hl
- ld a, $30
-.asm_217e
- dec a
- jr nz, .asm_217e
- ld a, [$ffab]
- and a
- ld a, b
- pop bc
- jr z, .asm_2192
- dec hl
- cp $fd
- jr nz, .asm_2173
- xor a
- ld [$ffab], a
- jr .asm_2173
-.asm_2192
- ld [de], a
- inc de
- dec bc
- ld a, b
- or c
- jr nz, .asm_2173
- ret
-
-Func_219a:: ; 219a (0:219a)
- xor a
- ld [$ffa9], a
- ld a, [$ffaa]
- cp $2
- jr nz, .asm_21a7
- ld a, $81
- ld [$ff02], a
-.asm_21a7
- ld a, [$ffa9]
- and a
- jr nz, .asm_21f1
- ld a, [$ffaa]
- cp $1
- jr nz, .asm_21cc
- call Func_2237
- jr z, .asm_21cc
- call Func_2231
- push hl
- ld hl, wcc48
- inc [hl]
- jr nz, .asm_21c3
- dec hl
- inc [hl]
-.asm_21c3
- pop hl
- call Func_2237
- jr nz, .asm_21a7
- jp Func_223f
-.asm_21cc
- ld a, [rIE] ; $ffff
- and $f
- cp $8
- jr nz, .asm_21a7
- ld a, [W_NUMHITS] ; wd074
- dec a
- ld [W_NUMHITS], a ; wd074
- jr nz, .asm_21a7
- ld a, [wd075]
- dec a
- ld [wd075], a
- jr nz, .asm_21a7
- ld a, [$ffaa]
- cp $1
- jr z, .asm_21f1
- ld a, $ff
-.asm_21ee
- dec a
- jr nz, .asm_21ee
-.asm_21f1
- xor a
- ld [$ffa9], a
- ld a, [rIE] ; $ffff
- and $f
- sub $8
- jr nz, .asm_2204
- ld [W_NUMHITS], a ; wd074
- ld a, $50
- ld [wd075], a
-.asm_2204
- ld a, [$ffad]
- cp $fe
- ret nz
- call Func_2237
- jr z, .asm_221f
- push hl
- ld hl, wcc48
- ld a, [hl]
- dec a
- ld [hld], a
- inc a
- jr nz, .asm_2219
- dec [hl]
-.asm_2219
- pop hl
- call Func_2237
- jr z, Func_223f
-.asm_221f
- ld a, [rIE] ; $ffff
- and $f
- cp $8
- ld a, $fe
- ret z
- ld a, [hl]
- ld [$ffac], a
- call DelayFrame
- jp Func_219a
-
-Func_2231:: ; 2231 (0:2231)
- ld a, $f
-.asm_2233
- dec a
- jr nz, .asm_2233
- ret
-
-Func_2237:: ; 2237 (0:2237)
- push hl
- ld hl, wcc47
- ld a, [hli]
- or [hl]
- pop hl
- ret
-
-Func_223f:: ; 223f (0:223f)
- dec a
- ld [wcc47], a
- ld [wcc48], a
- ret
-
-Func_2247:: ; 2247 (0:2247)
- ld hl, wcc42
- ld de, wcc3d
- ld c, $2
- ld a, $1
- ld [$ffab], a
-.asm_2253
- call DelayFrame
- ld a, [hl]
- ld [$ffac], a
- call Func_219a
- ld b, a
- inc hl
- ld a, [$ffab]
- and a
- ld a, $0
- ld [$ffab], a
- jr nz, .asm_2253
- ld a, b
- ld [de], a
- inc de
- dec c
- jr nz, .asm_2253
- ret
-
-Func_226e:: ; 226e (0:226e)
- call SaveScreenTilesToBuffer1
- callab PrintWaitingText
- call Func_227f
- jp LoadScreenTilesFromBuffer1
-
-Func_227f:: ; 227f (0:227f)
- ld a, $ff
- ld [wcc3e], a
-.asm_2284
- call Func_22c3
- call DelayFrame
- call Func_2237
- jr z, .asm_22a0
- push hl
- ld hl, wcc48
- dec [hl]
- jr nz, .asm_229f
- dec hl
- dec [hl]
- jr nz, .asm_229f
- pop hl
- xor a
- jp Func_223f
-.asm_229f
- pop hl
-.asm_22a0
- ld a, [wcc3e]
- inc a
- jr z, .asm_2284
- ld b, $a
-.asm_22a8
- call DelayFrame
- call Func_22c3
- dec b
- jr nz, .asm_22a8
- ld b, $a
-.asm_22b3
- call DelayFrame
- call Func_22ed
- dec b
- jr nz, .asm_22b3
- ld a, [wcc3e]
- ld [wcc3d], a
- ret
-
-Func_22c3:: ; 22c3 (0:22c3)
- call asm_22d7
- ld a, [wcc42]
- add $60
- ld [$ffac], a
- ld a, [$ffaa]
- cp $2
- jr nz, asm_22d7
- ld a, $81
- ld [$ff02], a
-asm_22d7:: ; 22d7 (0:22d7)
- ld a, [$ffad]
- ld [wcc3d], a
- and $f0
- cp $60
- ret nz
- xor a
- ld [$ffad], a
- ld a, [wcc3d]
- and $f
- ld [wcc3e], a
- ret
-
-Func_22ed:: ; 22ed (0:22ed)
- xor a
- ld [$ffac], a
- ld a, [$ffaa]
- cp $2
- ret nz
- ld a, $81
- ld [$ff02], a
- ret
-
-Func_22fa:: ; 22fa (0:22fa)
- ld a, $2
- ld [$ff01], a
- xor a
- ld [$ffad], a
- ld a, $80
- ld [$ff02], a
- ret
+Serial:: ; 2125 (0:2125)
+ push af
+ push bc
+ push de
+ push hl
+ ld a, [hSerialConnectionStatus]
+ inc a
+ jr z, .connectionNotYetEstablished
+ ld a, [rSB]
+ ld [hSerialReceiveData], a
+ ld a, [hSerialSendData]
+ ld [rSB], a
+ ld a, [hSerialConnectionStatus]
+ cp USING_INTERNAL_CLOCK
+ jr z, .done
+; using external clock
+ ld a, START_TRANSFER_EXTERNAL_CLOCK
+ ld [rSC], a
+ jr .done
+.connectionNotYetEstablished
+ ld a, [rSB]
+ ld [hSerialReceiveData], a
+ ld [hSerialConnectionStatus], a
+ cp USING_INTERNAL_CLOCK
+ jr z, .usingInternalClock
+; using external clock
+ xor a
+ ld [rSB], a
+ ld a, $3
+ ld [rDIV], a
+.waitLoop
+ ld a, [rDIV]
+ bit 7, a
+ jr nz, .waitLoop
+ ld a, START_TRANSFER_EXTERNAL_CLOCK
+ ld [rSC], a
+ jr .done
+.usingInternalClock
+ xor a
+ ld [rSB], a
+.done
+ ld a, $1
+ ld [hSerialReceivedNewData], a
+ ld a, SERIAL_NO_DATA_BYTE
+ ld [hSerialSendData], a
+ pop hl
+ pop de
+ pop bc
+ pop af
+ reti
+
+; hl = send data
+; de = receive data
+; bc = length of data
+Serial_ExchangeBytes:: ; 216f (0:216f)
+ ld a, 1
+ ld [hSerialIgnoringInitialData], a
+.loop
+ ld a, [hl]
+ ld [hSerialSendData], a
+ call Serial_ExchangeByte
+ push bc
+ ld b, a
+ inc hl
+ ld a, 48
+.waitLoop
+ dec a
+ jr nz, .waitLoop
+ ld a, [hSerialIgnoringInitialData]
+ and a
+ ld a, b
+ pop bc
+ jr z, .storeReceivedByte
+ dec hl
+ cp SERIAL_PREAMBLE_BYTE
+ jr nz, .loop
+ xor a
+ ld [hSerialIgnoringInitialData], a
+ jr .loop
+.storeReceivedByte
+ ld [de], a
+ inc de
+ dec bc
+ ld a, b
+ or c
+ jr nz, .loop
+ ret
+
+Serial_ExchangeByte:: ; 219a (0:219a)
+ xor a
+ ld [hSerialReceivedNewData], a
+ ld a, [hSerialConnectionStatus]
+ cp USING_INTERNAL_CLOCK
+ jr nz, .asm_21a7
+ ld a, START_TRANSFER_INTERNAL_CLOCK
+ ld [rSC], a
+.asm_21a7
+ ld a, [hSerialReceivedNewData]
+ and a
+ jr nz, .asm_21f1
+ ld a, [hSerialConnectionStatus]
+ cp USING_EXTERNAL_CLOCK
+ jr nz, .asm_21cc
+ call IsUnknownCounterZero
+ jr z, .asm_21cc
+ call WaitLoop_15Iterations
+ push hl
+ ld hl, wUnknownSerialCounter + 1
+ inc [hl]
+ jr nz, .asm_21c3
+ dec hl
+ inc [hl]
+.asm_21c3
+ pop hl
+ call IsUnknownCounterZero
+ jr nz, .asm_21a7
+ jp SetUnknownCounterToFFFF
+.asm_21cc
+ ld a, [rIE]
+ and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
+ cp (1 << SERIAL)
+ jr nz, .asm_21a7
+ ld a, [wUnknownSerialCounter2]
+ dec a
+ ld [wUnknownSerialCounter2], a
+ jr nz, .asm_21a7
+ ld a, [wUnknownSerialCounter2 + 1]
+ dec a
+ ld [wUnknownSerialCounter2 + 1], a
+ jr nz, .asm_21a7
+ ld a, [hSerialConnectionStatus]
+ cp USING_EXTERNAL_CLOCK
+ jr z, .asm_21f1
+ ld a, 255
+.waitLoop
+ dec a
+ jr nz, .waitLoop
+.asm_21f1
+ xor a
+ ld [hSerialReceivedNewData], a
+ ld a, [rIE]
+ and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
+ sub (1 << SERIAL)
+ jr nz, .asm_2204
+ ld [wUnknownSerialCounter2], a
+ ld a, $50
+ ld [wUnknownSerialCounter2 + 1], a
+.asm_2204
+ ld a, [hSerialReceiveData]
+ cp SERIAL_NO_DATA_BYTE
+ ret nz
+ call IsUnknownCounterZero
+ jr z, .asm_221f
+ push hl
+ ld hl, wUnknownSerialCounter + 1
+ ld a, [hl]
+ dec a
+ ld [hld], a
+ inc a
+ jr nz, .asm_2219
+ dec [hl]
+.asm_2219
+ pop hl
+ call IsUnknownCounterZero
+ jr z, SetUnknownCounterToFFFF
+.asm_221f
+ ld a, [rIE]
+ and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
+ cp (1 << SERIAL)
+ ld a, SERIAL_NO_DATA_BYTE
+ ret z
+ ld a, [hl]
+ ld [hSerialSendData], a
+ call DelayFrame
+ jp Serial_ExchangeByte
+
+WaitLoop_15Iterations:: ; 2231 (0:2231)
+ ld a, 15
+.waitLoop
+ dec a
+ jr nz, .waitLoop
+ ret
+
+IsUnknownCounterZero:: ; 2237 (0:2237)
+ push hl
+ ld hl, wUnknownSerialCounter
+ ld a, [hli]
+ or [hl]
+ pop hl
+ ret
+
+; a is always 0 when this is called
+SetUnknownCounterToFFFF:: ; 223f (0:223f)
+ dec a
+ ld [wUnknownSerialCounter], a
+ ld [wUnknownSerialCounter + 1], a
+ ret
+
+; This is used to exchange the button press and selected menu item on the link menu.
+; The data is sent thrice and read twice to increase reliability.
+Serial_ExchangeLinkMenuSelection:: ; 2247 (0:2247)
+ ld hl, wLinkMenuSelectionSendBuffer
+ ld de, wLinkMenuSelectionReceiveBuffer
+ ld c, 2 ; number of bytes to save
+ ld a, 1
+ ld [hSerialIgnoringInitialData], a
+.loop
+ call DelayFrame
+ ld a, [hl]
+ ld [hSerialSendData], a
+ call Serial_ExchangeByte
+ ld b, a
+ inc hl
+ ld a, [hSerialIgnoringInitialData]
+ and a
+ ld a, 0
+ ld [hSerialIgnoringInitialData], a
+ jr nz, .loop
+ ld a, b
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .loop
+ ret
+
+Serial_PrintWaitingTextAndSyncAndExchangeByte:: ; 226e (0:226e)
+ call SaveScreenTilesToBuffer1
+ callab PrintWaitingText
+ call Serial_SyncAndExchangeNybble
+ jp LoadScreenTilesFromBuffer1
+
+Serial_SyncAndExchangeNybble:: ; 227f (0:227f)
+ ld a, $ff
+ ld [wSerialExchangeNybbleReceiveData], a
+.loop1
+ call Serial_ExchangeNybble
+ call DelayFrame
+ call IsUnknownCounterZero
+ jr z, .next1
+ push hl
+ ld hl, wUnknownSerialCounter + 1
+ dec [hl]
+ jr nz, .next2
+ dec hl
+ dec [hl]
+ jr nz, .next2
+ pop hl
+ xor a
+ jp SetUnknownCounterToFFFF
+.next2
+ pop hl
+.next1
+ ld a, [wSerialExchangeNybbleReceiveData]
+ inc a
+ jr z, .loop1
+ ld b, 10
+.loop2
+ call DelayFrame
+ call Serial_ExchangeNybble
+ dec b
+ jr nz, .loop2
+ ld b, 10
+.loop3
+ call DelayFrame
+ call Serial_SendZeroByte
+ dec b
+ jr nz, .loop3
+ ld a, [wSerialExchangeNybbleReceiveData]
+ ld [wSerialSyncAndExchangeNybbleReceiveData], a
+ ret
+
+; exchange one byte with value of $f or less
+Serial_ExchangeNybble:: ; 22c3 (0:22c3)
+ call .doExchange
+ ld a, [wSerialExchangeNybbleSendData]
+ add $60
+ ld [hSerialSendData], a
+ ld a, [hSerialConnectionStatus]
+ cp USING_INTERNAL_CLOCK
+ jr nz, .doExchange
+ ld a, START_TRANSFER_INTERNAL_CLOCK
+ ld [rSC], a
+.doExchange
+ ld a, [hSerialReceiveData]
+ ld [wSerialExchangeNybbleTempReceiveData], a
+ and $f0
+ cp $60
+ ret nz
+ xor a
+ ld [hSerialReceiveData], a
+ ld a, [wSerialExchangeNybbleTempReceiveData]
+ and $f
+ ld [wSerialExchangeNybbleReceiveData], a
+ ret
+
+Serial_SendZeroByte:: ; 22ed (0:22ed)
+ xor a
+ ld [hSerialSendData], a
+ ld a, [hSerialConnectionStatus]
+ cp USING_INTERNAL_CLOCK
+ ret nz
+ ld a, START_TRANSFER_INTERNAL_CLOCK
+ ld [rSC], a
+ ret
+
+Serial_TryEstablishingExternallyClockedConnection:: ; 22fa (0:22fa)
+ ld a, ESTABLISH_CONNECTION_WITH_EXTERNAL_CLOCK
+ ld [rSB], a
+ xor a
+ ld [hSerialReceiveData], a
+ ld a, START_TRANSFER_EXTERNAL_CLOCK
+ ld [rSC], a
+ ret \ No newline at end of file
diff --git a/home/text.asm b/home/text.asm
index aed89c33..362347cc 100644
--- a/home/text.asm
+++ b/home/text.asm
@@ -265,8 +265,8 @@ Char5F:: ; 1a91 (0:1a91)
ret
Char58:: ; 1a95 (0:1a95)
- ld a,[W_ISLINKBATTLE]
- cp 4
+ ld a,[wLinkState]
+ cp LINK_STATE_BATTLING
jp z,Next1AA2
ld a,$EE
Coorda 18, 16
@@ -506,8 +506,8 @@ TextCommand05:: ; 1bc5 (0:1bc5)
; 06
; (no arguments)
TextCommand06:: ; 1bcc (0:1bcc)
- ld a,[W_ISLINKBATTLE]
- cp a,$04
+ ld a,[wLinkState]
+ cp a,LINK_STATE_BATTLING
jp z,TextCommand0D
ld a,$ee ; down arrow
Coorda 18, 16 ; place down arrow in lower right corner of dialogue text box
diff --git a/hram.asm b/hram.asm
index 644315ec..dfe14d66 100644
--- a/hram.asm
+++ b/hram.asm
@@ -10,6 +10,8 @@ hSoftReset EQU $FF8A
; presses the reset sequence (A+B+SEL+START).
; Soft reset when 0 is reached.
+hBaseTileID EQU $FF8B
+
; counters for blinking down arrow
H_DOWNARROWBLINKCNT1 EQU $FF8B
H_DOWNARROWBLINKCNT2 EQU $FF8C
@@ -38,6 +40,19 @@ H_NUMTOPRINT EQU $FF96 ; 3 bytes
H_POWEROFTEN EQU $FF99 ; 3 bytes
H_SAVEDNUMTOPRINT EQU $FF9C ; 3 bytes
+hSerialReceivedNewData EQU $FFA9
+
+; $01 = using external clock
+; $02 = using internal clock
+; $ff = establishing connection
+hSerialConnectionStatus EQU $FFAA
+
+hSerialIgnoringInitialData EQU $FFAB
+
+hSerialSendData EQU $FFAC
+
+hSerialReceiveData EQU $FFAD
+
; these values are copied to SCX, SCY, and WY during V-blank
hSCX EQU $FFAE
hSCY EQU $FFAF
diff --git a/main.asm b/main.asm
index 400c6806..dc8b8fa0 100755
--- a/main.asm
+++ b/main.asm
@@ -167,7 +167,7 @@ PrintWaitingText:
call TextBoxBorder
jr .asm_4c1a
.asm_4c17
- call Func_5ab3
+ call CableClub_TextBoxBorder
.asm_4c1a
hlCoord 4, 11
ld de, WaitingText
@@ -633,8 +633,8 @@ LoadSpecialWarpData: ; 62ff (1:62ff)
cp BATTLE_CENTER
jr nz, .notBattleCenter
ld hl, BattleCenterSpec1
- ld a, [$ffaa]
- cp $2
+ ld a, [hSerialConnectionStatus]
+ cp USING_INTERNAL_CLOCK ; which gameboy is clocking determines who is on the left and who is on the right
jr z, .copyWarpData
ld hl, BattleCenterSpec2
jr .copyWarpData
@@ -642,8 +642,8 @@ LoadSpecialWarpData: ; 62ff (1:62ff)
cp TRADE_CENTER
jr nz, .notTradeCenter
ld hl, TradeCenterSpec1
- ld a, [$ffaa]
- cp $2
+ ld a, [hSerialConnectionStatus]
+ cp USING_INTERNAL_CLOCK
jr z, .copyWarpData
ld hl, TradeCenterSpec2
jr .copyWarpData
@@ -798,7 +798,7 @@ SubtractAmountPaidFromMoney_: ; 6b21 (1:6b21)
ld c,3 ; length of money in bytes
predef SubBCDPredef ; subtract total price from money
ld a,$13
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID ; redraw money text box
and a
ret
@@ -1164,12 +1164,10 @@ PrintStartMenuItem: ; 71bb (1:71bb)
INCLUDE "engine/overworld/cable_club_npc.asm"
; function to draw various text boxes
-; INPUT:
-; [wd125] = text box ID
DisplayTextBoxID_: ; 72ea (1:72ea)
- ld a,[wd125] ; a = text box ID
+ ld a,[wTextBoxID]
cp a,$14
- jp z,DisplayYesNoTextBox
+ jp z,DisplayTwoOptionMenu
ld c,a
ld hl,TextBoxFunctionTable
ld de,3
@@ -1437,7 +1435,7 @@ Func_74ba: ; 74ba (1:74ba)
ld hl, wd730
set 6, [hl]
ld a, $f
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
hlCoord 13, 1
ld b, $1
@@ -1456,12 +1454,12 @@ CurrencyString: ; 74e2 (1:74e2)
Func_74ea: ; 74ea (1:74ea)
ld a, [wd730]
- set 6, a
+ set 6, a ; no printing delay
ld [wd730], a
xor a
ld [wd12d], a
ld a, $e
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
ld a, $3
ld [wMenuWatchedKeys], a ; wMenuWatchedKeys
@@ -1476,7 +1474,7 @@ Func_74ea: ; 74ea (1:74ea)
ld [wLastMenuItem], a ; wLastMenuItem
ld [wcc37], a
ld a, [wd730]
- res 6, a
+ res 6, a ; turn on the printing delay
ld [wd730], a
call HandleMenuInput
call PlaceUnfilledArrowMenuCursor
@@ -1505,46 +1503,50 @@ Func_74ea: ; 74ea (1:74ea)
scf
ret
-DisplayYesNoTextBox: ; 7559 (1:7559)
+; displays a menu with two options to choose from
+; b = Y of upper left corner of text region
+; c = X of upper left corner of text region
+; hl = address where the text box border should be drawn
+DisplayTwoOptionMenu: ; 7559 (1:7559)
push hl
ld a, [wd730]
- set 6, a
+ set 6, a ; no printing delay
ld [wd730], a
xor a
ld [wd12d], a
ld [wd12e], a
- ld a, $3
- ld [wMenuWatchedKeys], a ; wMenuWatchedKeys
+ ld a, A_BUTTON | B_BUTTON
+ ld [wMenuWatchedKeys], a
ld a, $1
- ld [wMaxMenuItem], a ; wMaxMenuItem
+ ld [wMaxMenuItem], a
ld a, b
- ld [wTopMenuItemY], a ; wTopMenuItemY
+ ld [wTopMenuItemY], a
ld a, c
- ld [wTopMenuItemX], a ; wTopMenuItemX
+ ld [wTopMenuItemX], a
xor a
- ld [wLastMenuItem], a ; wLastMenuItem
+ ld [wLastMenuItem], a
ld [wcc37], a
push hl
- ld hl, wd12c
- bit 7, [hl]
+ ld hl, wTwoOptionMenuID
+ bit 7, [hl] ; select second menu item by default?
res 7, [hl]
- jr z, .asm_758d
+ jr z, .storeCurrentMenuItem
inc a
-.asm_758d
- ld [wCurrentMenuItem], a ; wCurrentMenuItem
+.storeCurrentMenuItem
+ ld [wCurrentMenuItem], a
pop hl
push hl
push hl
- call Func_763e
- ld a, [wd12c]
- ld hl, MenuStrings ; $7671
+ call TwoOptionMenu_SaveScreenTiles
+ ld a, [wTwoOptionMenuID]
+ ld hl, TwoOptionMenuStrings
ld e, a
ld d, $0
ld a, $5
-.loop
+.menuStringLoop
add hl, de
dec a
- jr nz, .loop
+ jr nz, .menuStringLoop
ld a, [hli]
ld c, a
ld a, [hli]
@@ -1553,22 +1555,22 @@ DisplayYesNoTextBox: ; 7559 (1:7559)
ld d, h
pop hl
push de
- ld a, [wd12c]
- cp $5
- jr nz, .asm_75b9
- call Func_5ab3
- jr .asm_75bc
-.asm_75b9
+ ld a, [wTwoOptionMenuID]
+ cp TRADE_CANCEL_MENU
+ jr nz, .notTradeCancelMenu
+ call CableClub_TextBoxBorder
+ jr .afterTextBoxBorder
+.notTradeCancelMenu
call TextBoxBorder
-.asm_75bc
+.afterTextBoxBorder
call UpdateSprites
pop hl
ld a, [hli]
- and a
- ld bc, $16
- jr z, .asm_75ca
- ld bc, $2a
-.asm_75ca
+ and a ; put blank line before first menu item?
+ ld bc, 20 + 2
+ jr z, .noBlankLine
+ ld bc, 2 * 20 + 2
+.noBlankLine
ld a, [hli]
ld e, a
ld a, [hli]
@@ -1577,61 +1579,69 @@ DisplayYesNoTextBox: ; 7559 (1:7559)
add hl, bc
call PlaceString
ld hl, wd730
- res 6, [hl]
- ld a, [wd12c]
- cp $7
- jr nz, .asm_7603
+ res 6, [hl] ; turn on the printing delay
+ ld a, [wTwoOptionMenuID]
+ cp NO_YES_MENU
+ jr nz, .notNoYesMenu
+; No/Yes menu
+; this menu type ignores the B button
+; it only seems to be used when confirming the deletion of a save file
xor a
- ld [wd12c], a
+ ld [wTwoOptionMenuID], a
ld a, [wFlags_0xcd60]
push af
push hl
ld hl, wFlags_0xcd60
bit 5, [hl]
- set 5, [hl]
+ set 5, [hl] ; don't play sound when A or B is pressed in menu
pop hl
-.asm_75f0
+.noYesMenuInputLoop
call HandleMenuInput
- bit 1, a
- jr nz, .asm_75f0
+ bit 1, a ; A button pressed?
+ jr nz, .noYesMenuInputLoop ; try again if A was not pressed
pop af
pop hl
ld [wFlags_0xcd60], a
ld a, (SFX_02_40 - SFX_Headers_02) / 3
call PlaySound
- jr .asm_760f
-.asm_7603
+ jr .pressedAButton
+.notNoYesMenu
xor a
- ld [wd12c], a
+ ld [wTwoOptionMenuID], a
call HandleMenuInput
pop hl
- bit 1, a
- jr nz, .asm_7627
-.asm_760f
- ld a, [wCurrentMenuItem] ; wCurrentMenuItem
+ bit 1, a ; A button pressed?
+ jr nz, .choseSecondMenuItem ; automatically choose the second option if B is pressed
+.pressedAButton
+ ld a, [wCurrentMenuItem]
ld [wd12d], a
and a
- jr nz, .asm_7627
+ jr nz, .choseSecondMenuItem
+; chose first menu item
ld a, $1
ld [wd12e], a
- ld c, $f
+ ld c, 15
call DelayFrames
- call Func_7656
+ call TwoOptionMenu_RestoreScreenTiles
and a
ret
-.asm_7627
+.choseSecondMenuItem
ld a, $1
- ld [wCurrentMenuItem], a ; wCurrentMenuItem
+ ld [wCurrentMenuItem], a
ld [wd12d], a
ld a, $2
ld [wd12e], a
- ld c, $f
+ ld c, 15
call DelayFrames
- call Func_7656
+ call TwoOptionMenu_RestoreScreenTiles
scf
ret
-Func_763e: ; 763e (1:763e)
+; Some of the wider/taller two option menus will not have the screen areas
+; they cover be fully saved/restored by the two functions below.
+; The bottom and right edges of the menu may remain after the function returns.
+
+TwoOptionMenu_SaveScreenTiles: ; 763e (1:763e)
ld de, wHPBarMaxHP
ld bc, $506
.asm_7644
@@ -1641,7 +1651,7 @@ Func_763e: ; 763e (1:763e)
dec c
jr nz, .asm_7644
push bc
- ld bc, $e
+ ld bc, 14
add hl, bc
pop bc
ld c, $6
@@ -1649,7 +1659,7 @@ Func_763e: ; 763e (1:763e)
jr nz, .asm_7644
ret
-Func_7656: ; 7656 (1:7656)
+TwoOptionMenu_RestoreScreenTiles: ; 7656 (1:7656)
ld de, wHPBarMaxHP
ld bc, $506
.asm_765c
@@ -1668,7 +1678,12 @@ Func_7656: ; 7656 (1:7656)
call UpdateSprites
ret
-MenuStrings: ; 7671 (1:7671)
+; Format:
+; 00: byte width
+; 01: byte height
+; 02: byte put blank line before first menu item
+; 03: word text pointer
+TwoOptionMenuStrings: ; 7671 (1:7671)
db 4,3,0
dw .YesNoMenu
db 6,3,0
diff --git a/scripts/celadongamecorner.asm b/scripts/celadongamecorner.asm
index 3e7b994e..91d6742d 100755
--- a/scripts/celadongamecorner.asm
+++ b/scripts/celadongamecorner.asm
@@ -20,7 +20,7 @@ CeladonGameCornerScript_48bcf: ; 48bcf (12:4bcf)
srl a
srl a
srl a
- ld [wcd05], a
+ ld [wUnknownSlotVar], a
ret
CeladonGameCornerScript_48bec: ; 48bec (12:4bec)
diff --git a/scripts/celadonpokecenter.asm b/scripts/celadonpokecenter.asm
index e7bfd1d2..1b8d3a1b 100755
--- a/scripts/celadonpokecenter.asm
+++ b/scripts/celadonpokecenter.asm
@@ -1,5 +1,5 @@
CeladonPokecenterScript: ; 488b8 (12:48b8)
- call Func_22fa
+ call Serial_TryEstablishingExternallyClockedConnection
jp EnableAutoTextBoxDrawing
CeladonPokecenterTextPointers: ; 488be (12:48be)
diff --git a/scripts/ceruleanhouse1.asm b/scripts/ceruleanhouse1.asm
index ffc8656e..4b6a240a 100755
--- a/scripts/ceruleanhouse1.asm
+++ b/scripts/ceruleanhouse1.asm
@@ -13,5 +13,5 @@ CeruleanHouse1Text2: ; 1d702 (7:5702)
db $08 ; asm
ld a, $6
ld [wWhichTrade], a
- predef Predef54
+ predef DoInGameTradeDialogue
jp TextScriptEnd
diff --git a/scripts/ceruleanpokecenter.asm b/scripts/ceruleanpokecenter.asm
index b6f88b41..5d888317 100755
--- a/scripts/ceruleanpokecenter.asm
+++ b/scripts/ceruleanpokecenter.asm
@@ -1,5 +1,5 @@
CeruleanPokecenterScript: ; 5c645 (17:4645)
- call Func_22fa
+ call Serial_TryEstablishingExternallyClockedConnection
jp EnableAutoTextBoxDrawing
CeruleanPokecenterTextPointers: ; 5c64b (17:464b)
diff --git a/scripts/cinnabarpokecenter.asm b/scripts/cinnabarpokecenter.asm
index a2a41592..abae9d8d 100755
--- a/scripts/cinnabarpokecenter.asm
+++ b/scripts/cinnabarpokecenter.asm
@@ -1,5 +1,5 @@
CinnabarPokecenterScript: ; 75e2c (1d:5e2c)
- call Func_22fa
+ call Serial_TryEstablishingExternallyClockedConnection
jp EnableAutoTextBoxDrawing
CinnabarPokecenterTextPointers: ; 75e32 (1d:5e32)
diff --git a/scripts/daycarem.asm b/scripts/daycarem.asm
index 3190ba0a..1830d2c0 100755
--- a/scripts/daycarem.asm
+++ b/scripts/daycarem.asm
@@ -129,7 +129,7 @@ DayCareMScript_562e1: ; 562e1 (15:62e1)
ld hl, DayCareMText_56428
call PrintText
ld a, $13
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
call YesNoChoice
ld hl, DayCareMText_56437
@@ -159,7 +159,7 @@ DayCareMScript_562e1: ; 562e1 (15:62e1)
ld a, (SFX_02_5a - SFX_Headers_02) / 3
call PlaySoundWaitForCurrent
ld a, $13
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
ld hl, DayCareMText_5644f
call PrintText
diff --git a/scripts/fuchsiapokecenter.asm b/scripts/fuchsiapokecenter.asm
index 621a483f..26f88844 100755
--- a/scripts/fuchsiapokecenter.asm
+++ b/scripts/fuchsiapokecenter.asm
@@ -1,5 +1,5 @@
FuchsiaPokecenterScript: ; 75063 (1d:5063)
- call Func_22fa
+ call Serial_TryEstablishingExternallyClockedConnection
jp EnableAutoTextBoxDrawing
FuchsiaPokecenterTextPointers: ; 75069 (1d:5069)
diff --git a/scripts/indigoplateaulobby.asm b/scripts/indigoplateaulobby.asm
index 96221c97..1b09a61d 100755
--- a/scripts/indigoplateaulobby.asm
+++ b/scripts/indigoplateaulobby.asm
@@ -1,5 +1,5 @@
IndigoPlateauLobbyScript: ; 19c5b (6:5c5b)
- call Func_22fa
+ call Serial_TryEstablishingExternallyClockedConnection
call EnableAutoTextBoxDrawing
ld hl, wd126
bit 6, [hl]
diff --git a/scripts/lab2.asm b/scripts/lab2.asm
index 583ef4e4..9839a563 100755
--- a/scripts/lab2.asm
+++ b/scripts/lab2.asm
@@ -21,5 +21,5 @@ Lab2Text3: ; 75c37 (1d:5c37)
ld a, $8
ld [wWhichTrade], a
asm_78552: ; 75c3d (1d:5c3d)
- predef Predef54
+ predef DoInGameTradeDialogue
jp TextScriptEnd
diff --git a/scripts/lab4.asm b/scripts/lab4.asm
index 924a6637..1e818676 100755
--- a/scripts/lab4.asm
+++ b/scripts/lab4.asm
@@ -108,7 +108,7 @@ Lab4Text2: ; 75dda (1d:5dda)
db $08 ; asm
ld a, $3
ld [wWhichTrade], a
- predef Predef54
+ predef DoInGameTradeDialogue
jp TextScriptEnd
LoadFossilItemAndMonNameBank1D: ; 75de8 (1d:5de8)
diff --git a/scripts/lavenderpokecenter.asm b/scripts/lavenderpokecenter.asm
index 31a50aef..452cc8a4 100755
--- a/scripts/lavenderpokecenter.asm
+++ b/scripts/lavenderpokecenter.asm
@@ -1,5 +1,5 @@
LavenderPokecenterScript: ; 5c8da (17:48da)
- call Func_22fa
+ call Serial_TryEstablishingExternallyClockedConnection
jp EnableAutoTextBoxDrawing
LavenderPokecenterTextPointers: ; 5c8e0 (17:48e0)
diff --git a/scripts/mtmoonpokecenter.asm b/scripts/mtmoonpokecenter.asm
index 94054561..bfe9add8 100755
--- a/scripts/mtmoonpokecenter.asm
+++ b/scripts/mtmoonpokecenter.asm
@@ -1,5 +1,5 @@
MtMoonPokecenterScript: ; 492cf (12:52cf)
- call Func_22fa
+ call Serial_TryEstablishingExternallyClockedConnection
jp EnableAutoTextBoxDrawing
MtMoonPokecenterTextPointers: ; 492d5 (12:52d5)
@@ -29,7 +29,7 @@ MtMoonPokecenterText4: ; 492ec (12:52ec)
ld hl, MtMoonPokecenterText_4935c
call PrintText
ld a, $13
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
call YesNoChoice
ld a, [wCurrentMenuItem]
@@ -57,7 +57,7 @@ MtMoonPokecenterText4: ; 492ec (12:52ec)
ld c, $3
predef SubBCDPredef
ld a, $13
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
ld hl, wd7c6
set 7, [hl]
diff --git a/scripts/museum1f.asm b/scripts/museum1f.asm
index cbb3bb67..cd2b3c29 100755
--- a/scripts/museum1f.asm
+++ b/scripts/museum1f.asm
@@ -70,7 +70,7 @@ Museum1FText1: ; 5c135 (17:4135)
jp asm_d1145
.asm_3ded4
ld a, $13
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
xor a
ld [hJoyHeld], a
@@ -105,7 +105,7 @@ Museum1FText1: ; 5c135 (17:4135)
ld c, $3
predef SubBCDPredef
ld a, $13
- ld [wd125], a
+ ld [wTextBoxID], a
call DisplayTextBoxID
ld a, (SFX_02_5a - SFX_Headers_02) / 3
call PlaySoundWaitForCurrent
diff --git a/scripts/pewterpokecenter.asm b/scripts/pewterpokecenter.asm
index 2f4fd7af..1f3cabe0 100755
--- a/scripts/pewterpokecenter.asm
+++ b/scripts/pewterpokecenter.asm
@@ -1,5 +1,5 @@
PewterPokecenterScript: ; 5c587 (17:4587)
- call Func_22fa
+ call Serial_TryEstablishingExternallyClockedConnection
jp EnableAutoTextBoxDrawing
PewterPokecenterTextPointers: ; 5c58d (17:458d)
diff --git a/scripts/rocktunnelpokecenter.asm b/scripts/rocktunnelpokecenter.asm
index 62336edc..5e822bca 100755
--- a/scripts/rocktunnelpokecenter.asm
+++ b/scripts/rocktunnelpokecenter.asm
@@ -1,5 +1,5 @@
RockTunnelPokecenterScript: ; 493ba (12:53ba)
- call Func_22fa
+ call Serial_TryEstablishingExternallyClockedConnection
jp EnableAutoTextBoxDrawing
RockTunnelPokecenterTextPointers: ; 493c0 (12:53c0)
diff --git a/scripts/route11gateupstairs.asm b/scripts/route11gateupstairs.asm
index 8b756681..d8740986 100755
--- a/scripts/route11gateupstairs.asm
+++ b/scripts/route11gateupstairs.asm
@@ -11,7 +11,7 @@ Route11GateUpstairsText1: ; 4945f (12:545f)
db $08 ; asm
xor a
ld [wWhichTrade], a
- predef Predef54
+ predef DoInGameTradeDialogue
asm_49469: ; 49469 (12:5469)
jp TextScriptEnd
diff --git a/scripts/route18gateupstairs.asm b/scripts/route18gateupstairs.asm
index 7ef0461d..aaa1b34e 100755
--- a/scripts/route18gateupstairs.asm
+++ b/scripts/route18gateupstairs.asm
@@ -10,7 +10,7 @@ Route18GateUpstairsText1: ; 4997e (12:597e)
db $08 ; asm
ld a, $5
ld [wWhichTrade], a
- predef Predef54
+ predef DoInGameTradeDialogue
jp TextScriptEnd
Route18GateUpstairsText2: ; 4998c (12:598c)
diff --git a/scripts/route2house.asm b/scripts/route2house.asm
index e9b30b07..ba13605b 100755
--- a/scripts/route2house.asm
+++ b/scripts/route2house.asm
@@ -13,5 +13,5 @@ Route2HouseText2: ; 1def9 (7:5ef9)
db $08 ; asm
ld a, $1
ld [wWhichTrade], a
- predef Predef54
+ predef DoInGameTradeDialogue
jp TextScriptEnd
diff --git a/scripts/safarizoneentrance-yellow.asm b/scripts/safarizoneentrance-yellow.asm
index 1f1b6c23..c4343095 100644
--- a/scripts/safarizoneentrance-yellow.asm
+++ b/scripts/safarizoneentrance-yellow.asm
@@ -2,7 +2,7 @@
ld hl,.ForJust500Text
call PrintText
ld a,$13
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID
call YesNoChoice
ld a,[wCurrentMenuItem]
@@ -49,7 +49,7 @@
call $3736
call $373e
ld a,$13
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID
ld hl,.MakePaymentText
call PrintText
diff --git a/scripts/safarizoneentrance.asm b/scripts/safarizoneentrance.asm
index e5653ff1..294dcf58 100755
--- a/scripts/safarizoneentrance.asm
+++ b/scripts/safarizoneentrance.asm
@@ -148,7 +148,7 @@ SafariZoneEntranceTextPointers: ; 752b9 (1d:52b9)
TX_FAR SafariZoneEntranceText_9e6e4 ; 0x9e6e4
db $8
ld a, $13
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID
call YesNoChoice
ld a,[wCurrentMenuItem]
@@ -178,7 +178,7 @@ SafariZoneEntranceTextPointers: ; 752b9 (1d:52b9)
ld c,3
predef SubBCDPredef
ld a,$13
- ld [wd125],a
+ ld [wTextBoxID],a
call DisplayTextBoxID
ld hl,.MakePaymentText
call PrintText
diff --git a/scripts/saffronpokecenter.asm b/scripts/saffronpokecenter.asm
index 7f3a656a..8f569a8e 100755
--- a/scripts/saffronpokecenter.asm
+++ b/scripts/saffronpokecenter.asm
@@ -1,5 +1,5 @@
SaffronPokecenterScript: ; 5d535 (17:5535)
- call Func_22fa
+ call Serial_TryEstablishingExternallyClockedConnection
jp EnableAutoTextBoxDrawing
SaffronPokecenterTextPointers: ; 5d53b (17:553b)
diff --git a/scripts/undergroundpathentranceroute5.asm b/scripts/undergroundpathentranceroute5.asm
index dc1748f2..03f1c35d 100755
--- a/scripts/undergroundpathentranceroute5.asm
+++ b/scripts/undergroundpathentranceroute5.asm
@@ -13,6 +13,6 @@ UndergroundPathEntranceRoute5Text1: ; 5d6b2 (17:56b2)
db $08 ; asm
ld a, $9
ld [wWhichTrade], a
- predef Predef54
+ predef DoInGameTradeDialogue
ld hl, UndergroundPathEntranceRoute5_5d6af
ret
diff --git a/scripts/vermilionhouse3.asm b/scripts/vermilionhouse3.asm
index af9d2430..08e2e395 100755
--- a/scripts/vermilionhouse3.asm
+++ b/scripts/vermilionhouse3.asm
@@ -8,5 +8,5 @@ VermilionHouse3Text1: ; 19c17 (6:5c17)
db $08 ; asm
ld a, $4
ld [wWhichTrade], a
- predef Predef54
+ predef DoInGameTradeDialogue
jp TextScriptEnd
diff --git a/scripts/vermilionpokecenter.asm b/scripts/vermilionpokecenter.asm
index 00d139f5..6e85b3e3 100755
--- a/scripts/vermilionpokecenter.asm
+++ b/scripts/vermilionpokecenter.asm
@@ -1,5 +1,5 @@
VermilionPokecenterScript: ; 5c98f (17:498f)
- call Func_22fa
+ call Serial_TryEstablishingExternallyClockedConnection
jp EnableAutoTextBoxDrawing
VermilionPokecenterTextPointers: ; 5c995 (17:4995)
diff --git a/scripts/viridianpokecenter.asm b/scripts/viridianpokecenter.asm
index 08371ce3..ae5e32c8 100755
--- a/scripts/viridianpokecenter.asm
+++ b/scripts/viridianpokecenter.asm
@@ -1,5 +1,5 @@
ViridianPokeCenterScript: ; 4425d (11:425d)
- call Func_22fa
+ call Serial_TryEstablishingExternallyClockedConnection
jp EnableAutoTextBoxDrawing
ViridianPokecenterTextPointers: ; 44263 (11:4263)
diff --git a/text.asm b/text.asm
index 1e4e1c49..7eac7b5a 100644
--- a/text.asm
+++ b/text.asm
@@ -1231,7 +1231,7 @@ _NoMovesLeftText:: ; 89892 (22:5892)
_MultiHitText:: ; 898aa (22:58aa)
text "Hit the enemy"
line "@"
- TX_NUM W_NUMHITS,1,1
+ TX_NUM wPlayerNumHits,1,1
text " times!"
prompt
@@ -1450,7 +1450,7 @@ _MirrorMoveFailedText:: ; 89b96 (22:5b96)
_HitXTimesText:: ; 89baf (22:5baf)
text "Hit @"
- TX_NUM wcd05, 1, 1
+ TX_NUM wEnemyNumHits, 1, 1
text " times!"
prompt
@@ -1973,7 +1973,7 @@ _HisNameIsText:: ; 8a64a (22:664a)
prompt
_WillBeTradedText:: ; 8a677 (22:6677)
- TX_RAM wTrainerFacingDirection
+ TX_RAM wNameOfPlayerMonToBeTraded
text " and"
line "@"
TX_RAM wcd6d
@@ -2787,19 +2787,19 @@ _PokemonCenterFarewellText:: ; a2910 (28:6910)
line "you again!"
done
-_CableClubNPCText7:: ; a292b (28:692b)
+_CableClubNPCAreaReservedFor2FriendsLinkedByCableText:: ; a292b (28:692b)
text "This area is"
line "reserved for 2"
cont "friends who are"
cont "linked by cable."
done
-_CableClubNPCText1:: ; a2969 (28:6969)
+_CableClubNPCWelcomeText:: ; a2969 (28:6969)
text "Welcome to the"
line "Cable Club!"
done
-_CableClubNPCText2:: ; a2985 (28:6985)
+_CableClubNPCPleaseApplyHereHaveToSaveText:: ; a2985 (28:6985)
text "Please apply here."
para "Before opening"
@@ -2807,10 +2807,10 @@ _CableClubNPCText2:: ; a2985 (28:6985)
cont "to save the game."
done
-_CableClubNPCText3:: ; a29cc (28:69cc)
+_CableClubNPCPleaseWaitText:: ; a29cc (28:69cc)
text "Please wait.@@"
-_CableClubNPCText4:: ; a29db (28:69db)
+_CableClubNPCLinkClosedBecauseOfInactivityText:: ; a29db (28:69db)
text "The link has been"
line "closed because of"
cont "inactivity."
@@ -2823,11 +2823,11 @@ _CableClubNPCText4:: ; a29db (28:69db)
SECTION "Text 10", ROMX, BANK[TEXT_10]
-_CableClubNPCText5:: ; a4000 (29:4000)
+_CableClubNPCPleaseComeAgainText:: ; a4000 (29:4000)
text "Please come again!"
done
-_CableClubNPCText6:: ; a4014 (29:4014)
+_CableClubNPCMakingPreparationsText:: ; a4014 (29:4014)
text "We're making"
line "preparations."
cont "Please wait."
@@ -3229,21 +3229,21 @@ _ConnectCableText:: ; a809a (2a:409a)
_TradedForText:: ; a80bc (2a:40bc)
text $52, " traded"
line "@"
- TX_RAM wcd13
+ TX_RAM wInGameTradeGiveMonName
text " for"
cont "@"
- TX_RAM wPlayerMonAccuracyMod
+ TX_RAM wInGameTradeReceiveMonName
text "!@@"
_WannaTrade1Text:: ; a80d8 (2a:40d8)
text "I'm looking for"
line "@"
- TX_RAM wcd13
+ TX_RAM wInGameTradeGiveMonName
text "! Wanna"
para "trade one for"
line "@"
- TX_RAM wPlayerMonAccuracyMod
+ TX_RAM wInGameTradeReceiveMonName
text "? "
done
@@ -3255,7 +3255,7 @@ _NoTrade1Text:: ; a810b (2a:410b)
_WrongMon1Text:: ; a811d (2a:411d)
text "What? That's not"
line "@"
- TX_RAM wcd13
+ TX_RAM wInGameTradeGiveMonName
text "!"
para "If you get one,"
@@ -3269,7 +3269,7 @@ _Thanks1Text:: ; a8155 (2a:4155)
_AfterTrade1Text:: ; a8162 (2a:4162)
text "Isn't my old"
line "@"
- TX_RAM wPlayerMonAccuracyMod
+ TX_RAM wInGameTradeReceiveMonName
text " great?"
done
@@ -3278,10 +3278,10 @@ _WannaTrade2Text:: ; a817c (2a:417c)
line "you want to trade"
para "your @"
- TX_RAM wcd13
+ TX_RAM wInGameTradeGiveMonName
db $0
line "for @"
- TX_RAM wPlayerMonAccuracyMod
+ TX_RAM wInGameTradeReceiveMonName
text "?"
done
@@ -3293,7 +3293,7 @@ _NoTrade2Text:: ; a81b5 (2a:41b5)
_WrongMon2Text:: ; a81d3 (2a:41d3)
text "Hmmm? This isn't"
line "@"
- TX_RAM wcd13
+ TX_RAM wInGameTradeGiveMonName
text "."
para "Think of me when"
@@ -3313,7 +3313,7 @@ IF DEF(_YELLOW)
cont "magnificent!"
ELSE
text "The @"
- TX_RAM wcd13
+ TX_RAM wInGameTradeGiveMonName
text " you"
line "traded to me"
@@ -3324,12 +3324,12 @@ ENDC
_WannaTrade3Text:: ; a8240 (2a:4240)
text "Hi! Do you have"
line "@"
- TX_RAM wcd13
+ TX_RAM wInGameTradeGiveMonName
text "?"
para "Want to trade it"
line "for @"
- TX_RAM wPlayerMonAccuracyMod
+ TX_RAM wInGameTradeReceiveMonName
text "?"
done
@@ -3340,7 +3340,7 @@ _NoTrade3Text:: ; a8274 (2a:4274)
_WrongMon3Text:: ; a8284 (2a:4284)
text "...This is no"
line "@"
- TX_RAM wcd13
+ TX_RAM wInGameTradeGiveMonName
text "."
para "If you get one,"
@@ -3358,11 +3358,11 @@ ENDC
_AfterTrade3Text:: ; a82c9 (2a:42c9)
text "How is my old"
line "@"
- TX_RAM wPlayerMonAccuracyMod
+ TX_RAM wInGameTradeReceiveMonName
text "?"
para "My @"
- TX_RAM wcd13
+ TX_RAM wInGameTradeGiveMonName
text " is"
line "doing great!"
done
diff --git a/wram.asm b/wram.asm
index 6a7e2763..d0bc78ae 100755
--- a/wram.asm
+++ b/wram.asm
@@ -183,12 +183,21 @@ wTileMap:: ; c3a0
; buffer for tiles that are visible on screen (20 columns by 18 rows)
ds 20 * 18
+wSerialPartyMonsPatchList:: ; c508
+; list of indexes to patch with SERIAL_NO_DATA_BYTE after transfer
+
wTileMapBackup:: ; c508
; buffer for temporarily saving and restoring current screen's tiles
; (e.g. if menus are drawn on top)
- ds 20 * 18
+; ds 20 * 18
+
+ ds 200
- ds 120
+wSerialEnemyMonsPatchList:: ; c5d0
+; list of indexes to patch with SERIAL_NO_DATA_BYTE after transfer
+ ds 200
+
+ ds 80
wTempPic::
wOverworldMap:: ; c6e8
@@ -257,7 +266,12 @@ wListScrollOffset:: ; cc36
ds 1
wcc37:: ds 1
-wcc38:: ds 2
+
+wTradeCenterPointerTableIndex:: ; cc38
+ ds 1
+
+ ds 1
+
wcc3a:: ds 1
wcc3b:: ds 1
@@ -265,12 +279,46 @@ wDoNotWaitForButtonPressAfterDisplayingText:: ; cc3c
; if non-zero, skip waiting for a button press after displaying text in DisplayTextID
ds 1
+wSerialSyncAndExchangeNybbleReceiveData:: ; cc3d
+; the final received nybble is stored here by Serial_SyncAndExchangeNybble
+
+wSerialExchangeNybbleTempReceiveData:: ; cc3d
+; temporary nybble used by Serial_ExchangeNybble
+
+wLinkMenuSelectionReceiveBuffer:: ; cc3d
+; two byte buffer
+; the received menu selection is stored twice
+
wcc3d:: ds 1
-wcc3e:: ds 4
-wcc42:: ds 1
-wcc43:: ds 4
+
+wSerialExchangeNybbleReceiveData:: ; cc3e
+; the final received nybble is stored here by Serial_ExchangeNybble
+ ds 1
+
+ ds 3
+
+wSerialExchangeNybbleSendData:: ; cc42
+; this nybble is sent when using Serial_SyncAndExchangeNybble or Serial_ExchangeNybble
+
+wLinkMenuSelectionSendBuffer:: ; cc42
+; two byte buffer
+; the menu selection byte is stored twice before sending
+
+ ds 5
+
+wLinkTimeoutCounter:: ; cc47
+; 1 byte
+
+wUnknownSerialCounter:: ; cc47
+; 2 bytes
+
wcc47:: ds 1
wcc48:: ds 1
+
+wWhichTradeMonSelectionMenu:: ; cc49
+; $00 = player mons
+; $01 = enemy mons
+
wcc49:: ds 1
wMenuWrappingEnabled:: ; cc4a
@@ -348,7 +396,7 @@ wPlayerSelectedMove:: ; ccdc
wEnemySelectedMove:: ; ccdd
ds 1
-wLinkBattleRNCount:: ; ccde
+wLinkBattleRandomNumberListIndex:: ; ccde
ds 1
wAICount:: ; ccdf
@@ -391,24 +439,32 @@ wPartyFoughtCurrentEnemyFlags::
wccf6:: ds 1
wccf7:: ds 14
-wcd05:: ds 1
-wcd06:: ds 9
-wPlayerMonUnmodifiedLevel:: ; cd0f
- ds 0
-wcd0f:: ; overload, used in in-game trade code
+wUnknownSlotVar:: ; cd05
+
+wEnemyNumHits:: ; cd05
+; number of hits by enemy in attacks like Double Slap, etc.
+
+wEnemyBideAccumulatedDamage:: ; cd05
+; the amount of damage accumulated by the enemy while biding (2 bytes)
+
+ds 10
+
+wInGameTradeGiveMonSpecies:: ; cd0f
+
+wPlayerMonUnmodifiedLevel:: ; cd0f
ds 1
+
+wInGameTradeTextPointerTablePointer:: ; cd10
+
wPlayerMonUnmodifiedMaxHP:: ; cd10
- ds 0
-wcd10:: ; overload, used in in-game trade code
- ds 1
-wcd11:: ; overload, used in in-game trade code
- ds 1
+ ds 2
+
+wInGameTradeTextPointerTableIndex:: ; cd12
+
wPlayerMonUnmodifiedAttack:: ; cd12
- ds 0
-wcd12:: ; overload, used in in-game trade code
ds 1
-wcd13:: ; overload, used in in-game trade code (to store name string)
+wInGameTradeGiveMonName:: ; cd13
ds 1
wPlayerMonUnmodifiedDefense:: ; cd14
ds 2
@@ -430,6 +486,9 @@ wPlayerMonSpeedMod:: ; cd1c
ds 1
wPlayerMonSpecialMod:: ; cd1d
ds 1
+
+wInGameTradeReceiveMonName:: ; cd1e
+
wPlayerMonAccuracyMod:: ; cd1e
ds 1
wPlayerMonEvasionMod:: ; cd1f
@@ -445,8 +504,10 @@ wEnemyMonUnmodifiedAttack:: ; cd26
ds 2
wEnemyMonUnmodifiedDefense:: ; cd28
ds 1
-wcd29:: ; overload, used in in-game trade code
+
+wInGameTradeMonNick:: ; cd29
ds 1
+
wEnemyMonUnmodifiedSpeed:: ; cd2a
ds 2
wEnemyMonUnmodifiedSpecial:: ; cd2c
@@ -475,7 +536,10 @@ wEnemyMonAccuracyMod:: ; cd32
wEnemyMonEvasionMod:: ; cd33
ds 1
-wcd34:: ds 3
+wInGameTradeReceiveMonSpecies::
+ ds 1
+
+ ds 2
wNPCMovementDirections2Index:: ; cd37
@@ -501,6 +565,10 @@ wOverrideSimulatedJoypadStatesMask:: ; cd3b
ds 1
+wTradedPlayerMonSpecies:: ; cd3d
+
+wTradingWhichPlayerMon:: ; cd3d
+
wChangeBoxSavedMapTextPointer:: ; cd3d
wFlyAnimUsingCoordList:: ; cd3d
@@ -520,6 +588,10 @@ wWhichTrade:: ; cd3d
wTrainerSpriteOffset:: ; cd3d
ds 1
+wTradedEnemyMonSpecies:: ; cd3e
+
+wTradingWhichEnemyMon:: ; cd3e
+
wFlyAnimCounter:: ; cd3e
wPlayerSpinInPlaceAnimFrameDelayDelta:: ; cd3e
@@ -531,6 +603,8 @@ wHiddenObjectFunctionRomBank:: ; cd3e
wTrainerEngageDistance:: ; cd3e
ds 1
+wNameOfPlayerMonToBeTraded:: ; cd3f
+
wFlyAnimBirdSpriteImageIndex:: ; cd3f
wPlayerSpinInPlaceAnimFrameDelayEndValue:: ; cd3f
@@ -550,7 +624,9 @@ wHiddenObjectY:: ; cd40
wTrainerScreenY:: ; cd40
ds 1
-wHiddenObjectX:: ; cd40
+wTradedPlayerMonOT:: ; cd41
+
+wHiddenObjectX:: ; cd41
wTrainerScreenX:: ; cd41
ds 1
@@ -565,13 +641,21 @@ wcd48:: ds 1
wcd49:: ds 1
wcd4a:: ds 1
wcd4b:: ds 1
+
+wTradedPlayerMonOTID:: ; cd4c
+
wcd4c:: ds 1
wcd4d:: ds 1
+
+wTradedEnemyMonOT:: ; cd4e
+
wcd4e:: ds 1
wcd4f:: ds 1
wcd50:: ds 9
-wcd59:: ds 1
-wcd5a:: ds 1
+
+wTradedEnemyMonOTID:: ; cd59
+ ds 2
+
wcd5b:: ds 1
wcd5c:: ds 1
wcd5d:: ds 1
@@ -581,6 +665,7 @@ wcd5f:: ds 1
wFlags_0xcd60:: ; cd60
; bit 0: is player engaged by trainer (to avoid being engaged by multiple trainers simultaneously)
; bit 1: boulder dust animation (from using Strength) pending
+; bit 5: don't play sound when A or B is pressed in menu
; bit 6: tried pushing against boulder once (you need to push twice before it will move)
ds 1
@@ -599,6 +684,9 @@ wcd72:: ds 5
wcd77:: ds 1
wcd78:: ds 9
+wSerialOtherGameboyRandomNumberListBlock:: ; cd81
+; buffer for transferring the random number list generated by the other gameboy
+
wTileMapBackup2:: ; cd81
; second buffer for temporarily saving and restoring current screen's tiles (e.g. if menus are drawn on top)
ds 20 * 18
@@ -960,11 +1048,16 @@ W_ENEMYDISABLEDMOVE:: ; d072
ds 1
-W_NUMHITS:: ; d074
-; number of hits in attacks like Doubleslap, etc.
- ds 1
+wPlayerNumHits:: ; d074
+; number of hits by player in attacks like Double Slap, etc.
+
+wPlayerBideAccumulatedDamage:: ; d074
+; the amount of damage accumulated by the player while biding (2 bytes)
+
+wUnknownSerialCounter2:: ; d075
+; 2 bytes
-wd075:: ds 3
+ds 4
wEscapedFromBattle::
; non-zero when an item or move that allows escape from battle was used
@@ -1205,7 +1298,10 @@ wNumRunAttempts::
wd121:: ds 1
wd122:: ds 2
wd124:: ds 1
-wd125:: ds 1
+
+wTextBoxID:: ; d125
+ ds 1
+
wd126:: ds 1
W_CURENEMYLVL:: ; d127
@@ -1215,10 +1311,10 @@ wd128:: ds 1
wd129:: ds 1
wd12a:: ds 1
-W_ISLINKBATTLE:: ; d12b
+wLinkState:: ; d12b
ds 1
-wd12c:: ds 1
+wTwoOptionMenuID:: ds 1
wd12d:: ds 1
wd12e:: ds 1
wd12f:: ds 1
@@ -1250,10 +1346,20 @@ W_PRIZE3:: ; d13f
ds 1
+wSerialRandomNumberListBlock:: ; d141
+; the first 7 bytes are the preamble
+
wd141:: ds 2
wd143:: ds 2
wd145:: ds 3
-wd148:: ds 10
+
+wLinkBattleRandomNumberList:: ; d148
+; shared list of 9 random numbers, indexed by wLinkBattleRandomNumberListIndex
+ ds 10
+
+wSerialPlayerDataBlock:: ; d152
+; the first 6 bytes are the preamble
+
wd152:: ds 1
wd153:: ds 3
wd156:: ds 1
@@ -1886,7 +1992,11 @@ wd736:: ; d736
; bit 6: jumping down a ledge
ds 1
-wd737:: ds 4
+wCompletedInGameTradeFlags:: ; d737
+ ds 2
+
+ ds 2
+
wd73b:: ds 1
wd73c:: ds 3
@@ -1902,7 +2012,16 @@ wd743:: ds 1
wd744:: ds 3
wd747:: ds 3
wd74a:: ds 1
-wd74b:: ds 1
+
+wd74b:: ; d74b
+; bit 0: Prof. Oak has lead the player to the north end of his lab
+; bit 1: Prof. Oak has asked the player to choose a pokemon
+; bit 2: the player and the rival have received their pokemon
+; bit 3: the player has battled the rival in Oak's lab
+; bit 4: Prof. Oak has given the player 5 pokeballs
+; bit 5: received pokedex
+ ds 1
+
wd74c:: ds 2
wd74e:: ds 3
wd751:: ds 1
@@ -2028,6 +2147,9 @@ wd880:: ds 1
wd881:: ds 1
wd882:: ds 5
+wLinkEnemyTrainerName:: ; d887
+; linked game's trainer name
+
W_GRASSRATE:: ; d887
ds 1