shithub: pokecrystal

Download patch

ref: 3684296583bacac39a521b3c815a5680b5530c08
parent: 52bcd78290ecc185df83e524044e34bfb3e7b58b
author: Rangi <[email protected]>
date: Tue Mar 16 13:53:42 EDT 2021

Revise some constant definitions

--- a/audio/notes.asm
+++ b/audio/notes.asm
@@ -1,4 +1,5 @@
 FrequencyTable:
+	table_width 2, FrequencyTable
 	dw 0     ; __
 	dw $f82c ; C_
 	dw $f89d ; C#
@@ -12,6 +13,7 @@
 	dw $fb58 ; A_
 	dw $fb9b ; A#
 	dw $fbda ; B_
+	assert_table_length NUM_NOTES + 1
 	dw $fc16 ; C_
 	dw $fc4e ; C#
 	dw $fc83 ; D_
@@ -24,3 +26,4 @@
 	dw $fdac ; A_
 	dw $fdcd ; A#
 	dw $fded ; B_
+	assert_table_length NUM_NOTES * 2 + 1
--- a/constants/audio_constants.asm
+++ b/constants/audio_constants.asm
@@ -13,6 +13,7 @@
 	const A_ ; a
 	const A# ; b
 	const B_ ; c
+NUM_NOTES EQU const_value - 1
 
 ; channel
 ; ChannelPointers indexes (see audio/engine.asm)
--- a/constants/battle_constants.asm
+++ b/constants/battle_constants.asm
@@ -41,15 +41,15 @@
 NUM_LEVEL_STATS EQU const_value
 
 ; move struct members (see data/moves/moves.asm)
-	const_def
-	const MOVE_ANIM   ; 0
-	const MOVE_EFFECT ; 1
-	const MOVE_POWER  ; 2
-	const MOVE_TYPE   ; 3
-	const MOVE_ACC    ; 4
-	const MOVE_PP     ; 5
-	const MOVE_CHANCE ; 6
-MOVE_LENGTH EQU const_value
+rsreset
+MOVE_ANIM   rb ; 0
+MOVE_EFFECT rb ; 1
+MOVE_POWER  rb ; 2
+MOVE_TYPE   rb ; 3
+MOVE_ACC    rb ; 4
+MOVE_PP     rb ; 5
+MOVE_CHANCE rb ; 6
+MOVE_LENGTH EQU _RS
 
 ; stat constants
 ; indexes for:
@@ -97,7 +97,7 @@
 	const BATTLETYPE_CELEBI
 	const BATTLETYPE_SUICUNE
 
-; BattleVarPairs indexes (see home/battle.asm)
+; BattleVarPairs indexes (see home/battle_vars.asm)
 	const_def
 	const BATTLE_VARS_SUBSTATUS1
 	const BATTLE_VARS_SUBSTATUS2
@@ -122,7 +122,7 @@
 	const BATTLE_VARS_LAST_MOVE_OPP
 NUM_BATTLE_VARS EQU const_value
 
-; BattleVarLocations indexes (see home/battle.asm)
+; BattleVarLocations indexes (see home/battle_vars.asm)
 	const_def
 	const PLAYER_SUBSTATUS_1
 	const ENEMY_SUBSTATUS_1
--- a/constants/gfx_constants.asm
+++ b/constants/gfx_constants.asm
@@ -28,7 +28,7 @@
 HP_BAR_LENGTH_PX  EQU HP_BAR_LENGTH  * TILE_WIDTH ; pixels
 EXP_BAR_LENGTH_PX EQU EXP_BAR_LENGTH * TILE_WIDTH ; pixels
 
-; GetHPPal return values (see home.asm)
+; GetHPPal return values (see home/tilemap.asm)
 HP_GREEN  EQU 0
 HP_YELLOW EQU 1
 HP_RED    EQU 2
--- a/constants/hardware_constants.asm
+++ b/constants/hardware_constants.asm
@@ -1,5 +1,6 @@
-; Graciously aped from:
-; http://nocash.emubase.de/pandocs.htm
+; Graciously derived from:
+; https://gbdev.io/pandocs/
+; https://github.com/gbdev/hardware.inc
 ; http://gameboy.mongenel.com/dmg/asmmemmap.html
 
 ; memory map
--- a/constants/landmark_constants.asm
+++ b/constants/landmark_constants.asm
@@ -1,7 +1,7 @@
 ; Landmarks indexes (see data/maps/landmarks.asm)
 	const_def
-; Johto landmarks
 	const LANDMARK_SPECIAL           ; 00
+; Johto landmarks
 	const LANDMARK_NEW_BARK_TOWN     ; 01
 	const LANDMARK_ROUTE_29          ; 02
 	const LANDMARK_CHERRYGROVE_CITY  ; 03
--- a/constants/map_data_constants.asm
+++ b/constants/map_data_constants.asm
@@ -18,6 +18,7 @@
 MAP_LENGTH EQU _RS
 
 ; map environments (wEnvironment)
+; EnvironmentColorsPointers indexes (see data/maps/environment_colors.asm)
 	const_def 1
 	const TOWN
 	const ROUTE
@@ -26,6 +27,7 @@
 	const ENVIRONMENT_5
 	const GATE
 	const DUNGEON
+NUM_ENVIRONMENTS EQU const_value - 1
 
 ; map palettes (wEnvironment)
 	const_def
--- a/constants/map_setup_constants.asm
+++ b/constants/map_setup_constants.asm
@@ -13,6 +13,7 @@
 	const MAPSETUP_SUBMENU    ; fa
 	const MAPSETUP_BADWARP    ; fb
 	const MAPSETUP_FLY        ; fc
+NUM_MAPSETUP_SCRIPTS EQU const_value - $f1
 
 ; callback types
 	const_def 1
--- a/constants/music_constants.asm
+++ b/constants/music_constants.asm
@@ -1,7 +1,6 @@
 ; song ids
 ; Music indexes (see audio/music_pointers.asm)
 	const_def
-
 	const MUSIC_NONE                         ; 00
 	const MUSIC_TITLE                        ; 01
 	const MUSIC_ROUTE_1                      ; 02
@@ -95,7 +94,6 @@
 	const MUSIC_LAKE_OF_RAGE_ROCKET_RADIO    ; 5a
 	const MUSIC_PRINTER                      ; 5b
 	const MUSIC_POST_CREDITS                 ; 5c
-
 ; new to Crystal
 	const MUSIC_CLAIR                        ; 5d
 	const MUSIC_MOBILE_ADAPTER_MENU          ; 5e
--- a/constants/npc_trade_constants.asm
+++ b/constants/npc_trade_constants.asm
@@ -1,4 +1,4 @@
-	; npctrade struct members (see data/events/npc_trades.asm)
+; npctrade struct members (see data/events/npc_trades.asm)
 rsreset
 NPCTRADE_DIALOG  rb
 NPCTRADE_GIVEMON rb
--- a/constants/phone_constants.asm
+++ b/constants/phone_constants.asm
@@ -55,20 +55,18 @@
 SPECIALCALL_SIZE EQU 6
 
 ; phone struct members
-	const_def
-	const PHONE_CONTACT_TRAINER_CLASS
-	const PHONE_CONTACT_TRAINER_NUMBER
-	const PHONE_CONTACT_MAP_GROUP
-	const PHONE_CONTACT_MAP_NUMBER
-	const PHONE_CONTACT_SCRIPT1_TIME
-	const PHONE_CONTACT_SCRIPT1_BANK
-	const PHONE_CONTACT_SCRIPT1_ADDR
-	const_skip ; high PHONE_CONTACT_SCRIPT1_ADDR byte
-	const PHONE_CONTACT_SCRIPT2_TIME
-	const PHONE_CONTACT_SCRIPT2_BANK
-	const PHONE_CONTACT_SCRIPT2_ADDR
-	const_skip ; high PHONE_CONTACT_SCRIPT2_ADDR byte
-PHONE_CONTACT_SIZE EQU const_value
+rsreset
+PHONE_CONTACT_TRAINER_CLASS  rb
+PHONE_CONTACT_TRAINER_NUMBER rb
+PHONE_CONTACT_MAP_GROUP      rb
+PHONE_CONTACT_MAP_NUMBER     rb
+PHONE_CONTACT_SCRIPT1_TIME   rb
+PHONE_CONTACT_SCRIPT1_BANK   rb
+PHONE_CONTACT_SCRIPT1_ADDR   rw
+PHONE_CONTACT_SCRIPT2_TIME   rb
+PHONE_CONTACT_SCRIPT2_BANK   rb
+PHONE_CONTACT_SCRIPT2_ADDR   rw
+PHONE_CONTACT_SIZE EQU _RS
 
 ; maximum number of pokegear contacts
 CONTACT_LIST_SIZE EQU 10
--- a/constants/radio_constants.asm
+++ b/constants/radio_constants.asm
@@ -96,7 +96,7 @@
 	const POKEDEX_SHOW_8         ; 57
 NUM_RADIO_SEGMENTS EQU const_value
 
-; PlayRadio.StationPointers indexes (see engine/pokegear/pokegear.asm)
+; PlayRadioStationPointers indexes (see engine/pokegear/pokegear.asm)
 	const_def
 	const MAPRADIO_POKEMON_CHANNEL
 	const MAPRADIO_OAKS_POKEMON_TALK
@@ -107,6 +107,7 @@
 	const MAPRADIO_PLACES_PEOPLE
 	const MAPRADIO_LETS_ALL_SING
 	const MAPRADIO_ROCKET
+NUM_MAP_RADIO_STATIONS EQU const_value
 
 ; These tables in engine/pokegear/radio.asm are all sized to a power of 2
 ; so there's no need for a rejection sampling loop
--- a/constants/scgb_constants.asm
+++ b/constants/scgb_constants.asm
@@ -1,4 +1,5 @@
-; GetSGBLayout arguments (see engine/gfx/cgb_layouts.asm and engine/gfx/sgb_layouts.asm)
+; CGBLayoutJumptable indexes (see engine/gfx/cgb_layouts.asm)
+; SGBLayoutJumptable indexes (see engine/gfx/sgb_layouts.asm)
 	const_def
 	const SCGB_BATTLE_GRAYSCALE
 	const SCGB_BATTLE_COLORS
@@ -31,6 +32,7 @@
 	const SCGB_TRAINER_OR_MON_FRONTPIC_PALS
 	const SCGB_MYSTERY_GIFT
 	const SCGB_1E
+NUM_SCGB_LAYOUTS EQU const_value
 
 SCGB_PARTY_MENU_HP_BARS EQU $fc
 SCGB_DEFAULT EQU $ff
--- a/constants/script_constants.asm
+++ b/constants/script_constants.asm
@@ -1,4 +1,4 @@
-; person constants
+; object constants
 PLAYER      EQU  0
 LAST_TALKED EQU -2
 
--- a/constants/sfx_constants.asm
+++ b/constants/sfx_constants.asm
@@ -1,6 +1,5 @@
 ; SFX indexes (see audio/sfx_pointers.asm)
 	const_def
-
 	const SFX_DEX_FANFARE_50_79           ; 00
 	const SFX_ITEM                        ; 01
 	const SFX_CAUGHT_MON                  ; 02
@@ -189,7 +188,6 @@
 	const SFX_TRAIN_ARRIVED               ; b9
 	const SFX_STOP_SLOT                   ; ba
 	const SFX_2_BOOPS                     ; bb
-
 ; new to Crystal
 	const SFX_GLASS_TING                  ; bc
 	const SFX_GLASS_TING_2                ; bd
@@ -210,5 +208,4 @@
 	const SFX_TWO_PC_BEEPS                ; cc
 	const SFX_4_NOTE_DITTY                ; cd
 	const SFX_TWINKLE                     ; ce
-
 NUM_SFX EQU const_value
--- a/constants/sprite_data_constants.asm
+++ b/constants/sprite_data_constants.asm
@@ -1,12 +1,11 @@
-; overworld_sprite struct members (see data/sprites.asm)
-	const_def
-	const SPRITEDATA_ADDR    ; 0
-	const_skip ; high SPRITEDATA_ADDR byte
-	const SPRITEDATA_SIZE    ; 2
-	const SPRITEDATA_BANK    ; 3
-	const SPRITEDATA_TYPE    ; 4
-	const SPRITEDATA_PALETTE ; 5
-NUM_SPRITEDATA_FIELDS EQU const_value
+; overworld_sprite struct members (see data/sprites/sprites.asm)
+rsreset
+SPRITEDATA_ADDR    rw ; 0
+SPRITEDATA_SIZE    rb ; 2
+SPRITEDATA_BANK    rb ; 3
+SPRITEDATA_TYPE    rb ; 4
+SPRITEDATA_PALETTE rb ; 5
+NUM_SPRITEDATA_FIELDS EQU _RS
 
 ; sprite types
 	const_def 1
--- a/constants/text_constants.asm
+++ b/constants/text_constants.asm
@@ -1,10 +1,10 @@
 ; name lengths
-NAME_LENGTH          EQU 11
-PLAYER_NAME_LENGTH   EQU 8
-BOX_NAME_LENGTH      EQU 9
-MON_NAME_LENGTH      EQU 11
-MOVE_NAME_LENGTH     EQU 13
-ITEM_NAME_LENGTH     EQU 13
+NAME_LENGTH        EQU 11
+PLAYER_NAME_LENGTH EQU 8
+BOX_NAME_LENGTH    EQU 9
+MON_NAME_LENGTH    EQU 11
+MOVE_NAME_LENGTH   EQU 13
+ITEM_NAME_LENGTH   EQU 13
 TRAINER_CLASS_NAME_LENGTH EQU 13
 NAME_LENGTH_JAPANESE EQU 6
 
@@ -30,6 +30,9 @@
 TEXTBOX_Y      EQU SCREEN_HEIGHT - TEXTBOX_HEIGHT
 TEXTBOX_INNERY EQU TEXTBOX_Y + 2
 
+; see gfx/frames/*.png
+TEXTBOX_FRAME_TILES EQU 6
+
 ; PrintNum bit flags
 	const_def 5
 	const PRINTNUM_MONEY_F        ; 5
@@ -37,9 +40,9 @@
 	const PRINTNUM_LEADINGZEROS_F ; 7
 
 ; PrintNum arguments (see engine/math/print_num.asm)
-PRINTNUM_MONEY          EQU 1 << PRINTNUM_MONEY_F
-PRINTNUM_LEFTALIGN      EQU 1 << PRINTNUM_LEFTALIGN_F
-PRINTNUM_LEADINGZEROS   EQU 1 << PRINTNUM_LEADINGZEROS_F
+PRINTNUM_MONEY        EQU 1 << PRINTNUM_MONEY_F
+PRINTNUM_LEFTALIGN    EQU 1 << PRINTNUM_LEFTALIGN_F
+PRINTNUM_LEADINGZEROS EQU 1 << PRINTNUM_LEADINGZEROS_F
 
 ; character sets (see charmap.asm)
 FIRST_REGULAR_TEXT_CHAR EQU $60
--- a/constants/trainer_data_constants.asm
+++ b/constants/trainer_data_constants.asm
@@ -1,13 +1,11 @@
 ; TrainerClassAttributes struct members (see data/trainers/attributes.asm)
-	const_def
-	const TRNATTR_ITEM1           ; 0
-	const TRNATTR_ITEM2           ; 1
-	const TRNATTR_BASEMONEY       ; 2
-	const TRNATTR_AI_MOVE_WEIGHTS ; 3
-	const_skip ; high TRNATTR_AI_MOVE_WEIGHTS byte
-	const TRNATTR_AI_ITEM_SWITCH  ; 5
-	const_skip ; high TRNATTR_AI_ITEM_SWITCH byte
-NUM_TRAINER_ATTRIBUTES EQU const_value
+rsreset
+TRNATTR_ITEM1           rb ; 0
+TRNATTR_ITEM2           rb ; 1
+TRNATTR_BASEMONEY       rb ; 2
+TRNATTR_AI_MOVE_WEIGHTS rw ; 3
+TRNATTR_AI_ITEM_SWITCH  rw ; 5
+NUM_TRAINER_ATTRIBUTES EQU _RS
 
 ; TRNATTR_AI_MOVE_WEIGHTS bit flags (wEnemyTrainerAIFlags)
 ; AIScoringPointers indexes (see engine/battle/ai/move.asm)
--- a/data/maps/environment_colors.asm
+++ b/data/maps/environment_colors.asm
@@ -1,5 +1,6 @@
 EnvironmentColorsPointers:
 ; entries correspond to environment constants (see constants/map_data_constants.asm)
+	table_width 2, EnvironmentColorsPointers
 	dw .OutdoorColors ; unused
 	dw .OutdoorColors ; TOWN
 	dw .OutdoorColors ; ROUTE
@@ -8,6 +9,7 @@
 	dw .Env5Colors    ; ENVIRONMENT_5
 	dw .IndoorColors  ; GATE
 	dw .DungeonColors ; DUNGEON
+	assert_table_length NUM_ENVIRONMENTS + 1
 
 ; Valid indices: $00 - $29 (see gfx/tilesets/bg_tiles.pal)
 .OutdoorColors:
--- a/data/maps/setup_scripts.asm
+++ b/data/maps/setup_scripts.asm
@@ -1,5 +1,6 @@
 MapSetupScripts:
 ; entries correspond to MAPSETUP_* constants (see constants/map_setup_constants.asm)
+	table_width 2, MapSetupScripts
 	dw MapSetupScript_Warp
 	dw MapSetupScript_Continue
 	dw MapSetupScript_ReloadMap
@@ -12,6 +13,7 @@
 	dw MapSetupScript_Submenu
 	dw MapSetupScript_BadWarp
 	dw MapSetupScript_Fly
+	assert_table_length NUM_MAPSETUP_SCRIPTS
 
 ; valid commands are listed in MapSetupCommands (see data/maps/setup_script_pointers.asm)
 mapsetup: MACRO
--- a/engine/gfx/cgb_layouts.asm
+++ b/engine/gfx/cgb_layouts.asm
@@ -17,7 +17,7 @@
 	ld l, a
 	ld h, 0
 	add hl, hl
-	ld de, .Jumptable
+	ld de, CGBLayoutJumptable
 	add hl, de
 	ld a, [hli]
 	ld h, [hl]
@@ -28,7 +28,8 @@
 .done:
 	ret
 
-.Jumptable:
+CGBLayoutJumptable:
+	table_width 2, CGBLayoutJumptable
 	dw _CGB_BattleGrayscale
 	dw _CGB_BattleColors
 	dw _CGB_PokegearPals
@@ -60,6 +61,7 @@
 	dw _CGB_TrainerOrMonFrontpicPals
 	dw _CGB_MysteryGift
 	dw _CGB_Unused1E
+	assert_table_length NUM_SCGB_LAYOUTS
 
 _CGB_BattleGrayscale:
 	ld hl, PalPacket_BattleGrayscale + 1
--- a/engine/gfx/load_font.asm
+++ b/engine/gfx/load_font.asm
@@ -74,13 +74,13 @@
 LoadFrame:
 	ld a, [wTextboxFrame]
 	maskbits NUM_FRAMES
-	ld bc, 6 * LEN_1BPP_TILE
+	ld bc, TEXTBOX_FRAME_TILES * LEN_1BPP_TILE
 	ld hl, Frames
 	call AddNTimes
 	ld d, h
 	ld e, l
 	ld hl, vTiles2 tile "┌" ; $79
-	lb bc, BANK(Frames), 6 ; "┌" to "┘"
+	lb bc, BANK(Frames), TEXTBOX_FRAME_TILES ; "┌" to "┘"
 	call Get1bppViaHDMA
 	ld hl, vTiles2 tile " " ; $7f
 	ld de, TextboxSpaceGFX
--- a/engine/gfx/sgb_layouts.asm
+++ b/engine/gfx/sgb_layouts.asm
@@ -12,7 +12,7 @@
 	ld l, a
 	ld h, 0
 	add hl, hl
-	ld de, .Jumptable
+	ld de, SGBLayoutJumptable
 	add hl, de
 	ld a, [hli]
 	ld h, [hl]
@@ -21,7 +21,8 @@
 	push de
 	jp hl
 
-.Jumptable:
+SGBLayoutJumptable:
+	table_width 2, SGBLayoutJumptable
 	dw .SGB_BattleGrayscale
 	dw .SGB_BattleColors
 	dw .SGB_PokegearPals
@@ -53,6 +54,7 @@
 	dw .SGB_TrainerOrMonFrontpicPals
 	dw .SGB_MysteryGift
 	dw .SGB_Unused1E
+	assert_table_length NUM_SCGB_LAYOUTS
 
 .SGB_BattleGrayscale:
 	ld hl, PalPacket_BattleGrayscale
--- a/engine/pokegear/pokegear.asm
+++ b/engine/pokegear/pokegear.asm
@@ -1956,7 +1956,7 @@
 .PlayStation:
 	ld a, ENTER_MAP_MUSIC
 	ld [wPokegearRadioMusicPlaying], a
-	ld hl, .StationPointers
+	ld hl, PlayRadioStationPointers
 	ld d, 0
 	add hl, de
 	add hl, de
@@ -1983,9 +1983,10 @@
 	call WaitBGMap
 	ret
 
-.StationPointers:
+PlayRadioStationPointers:
 ; entries correspond to MAPRADIO_* constants
-	dw .OakOrPnP
+	table_width 2, PlayRadioStationPointers
+	dw LoadStation_PokemonChannel
 	dw LoadStation_OaksPokemonTalk
 	dw LoadStation_PokedexShow
 	dw LoadStation_PokemonMusic
@@ -1994,8 +1995,9 @@
 	dw LoadStation_PlacesAndPeople
 	dw LoadStation_LetsAllSing
 	dw LoadStation_RocketRadio
+	assert_table_length NUM_MAP_RADIO_STATIONS
 
-.OakOrPnP:
+LoadStation_PokemonChannel:
 	call IsInJohto
 	and a
 	jr nz, .kanto
@@ -2005,7 +2007,7 @@
 	jp z, LoadStation_PokedexShow
 	jp LoadStation_OaksPokemonTalk
 
-.kanto
+.kanto:
 	jp LoadStation_PlacesAndPeople
 
 PokegearMap:
--- a/gfx/font.asm
+++ b/gfx/font.asm
@@ -61,5 +61,4 @@
 FontsExtra2_UpArrowGFX:
 INCBIN "gfx/font/up_arrow.2bpp"
 
-Footprints:
 INCLUDE "gfx/footprints.asm"
--- a/gfx/footprints.asm
+++ b/gfx/footprints.asm
@@ -7,8 +7,8 @@
 footprint_top    EQUS "0,                 2 * LEN_1BPP_TILE"
 footprint_bottom EQUS "2 * LEN_1BPP_TILE, 2 * LEN_1BPP_TILE"
 
+Footprints:
 ; Entries correspond to Pokémon species, two apiece, 8 tops then 8 bottoms
-
 	table_width LEN_1BPP_TILE * 4, Footprints
 
 ; 001-008 top halves
--- a/home/battle_vars.asm
+++ b/home/battle_vars.asm
@@ -1,5 +1,4 @@
 GetBattleVar::
-; Preserves hl.
 	push hl
 	call GetBattleVarAddr
 	pop hl
@@ -8,7 +7,6 @@
 GetBattleVarAddr::
 ; Get variable from pair a, depending on whose turn it is.
 ; There are 21 variable pairs.
-
 	push bc
 
 	ld hl, BattleVarPairs