mirror of
https://github.com/pret/pokeyellow.git
synced 2026-04-26 01:31:29 -05:00
Merge branch 'master' of https://github.com/pret/pokered
Some checks failed
CI / build (push) Has been cancelled
Some checks failed
CI / build (push) Has been cancelled
This commit is contained in:
commit
377749ca4e
20
Makefile
20
Makefile
|
|
@ -119,9 +119,6 @@ $(foreach obj, $(pokeyellow_vc_obj), $(eval $(call DEP,$(obj),$(obj:_vc.o=.asm))
|
|||
endif
|
||||
|
||||
|
||||
%.asm: ;
|
||||
|
||||
|
||||
pokeyellow_pad = 0x00
|
||||
pokeyellow_debug_pad = 0xff
|
||||
pokeyellow_vc_pad = 0x00
|
||||
|
|
@ -157,8 +154,6 @@ gfx/surfing_pikachu/surfing_pikachu_3.2bpp: tools/gfx += --trim-whitespace
|
|||
|
||||
### Catch-all graphics rules
|
||||
|
||||
%.png: ;
|
||||
|
||||
%.2bpp: %.png
|
||||
$(RGBGFX) --colors dmg=e4 $(rgbgfx) -o $@ $<
|
||||
$(if $(tools/gfx),\
|
||||
|
|
@ -175,7 +170,18 @@ gfx/surfing_pikachu/surfing_pikachu_3.2bpp: tools/gfx += --trim-whitespace
|
|||
|
||||
### Catch-all audio rules
|
||||
|
||||
%.wav: ;
|
||||
|
||||
%.pcm: %.wav
|
||||
tools/pcm $< $@
|
||||
|
||||
|
||||
### File extensions that are never generated and should be manually created
|
||||
|
||||
%.asm: ;
|
||||
%.inc: ;
|
||||
%.png: ;
|
||||
%.pal: ;
|
||||
%.bin: ;
|
||||
%.blk: ;
|
||||
%.bst: ;
|
||||
%.rle: ;
|
||||
%.wav: ;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ endc
|
|||
; Define the include guard and the current hardware.inc version
|
||||
; (do this after the RGBDS version check since the `def` syntax depends on it)
|
||||
def HARDWARE_INC equ 1
|
||||
def HARDWARE_INC_VERSION equs "5.2.0"
|
||||
def HARDWARE_INC_VERSION equs "5.3.0"
|
||||
|
||||
; Usage: rev_Check_hardware_inc <min_ver>
|
||||
; Examples:
|
||||
|
|
@ -76,6 +76,14 @@ def B_JOYP_RIGHT equ 0 ; 0 = Right is pressed (if reading Control Pad) [ro]
|
|||
def JOYP_LEFT equ 1 << B_JOYP_LEFT
|
||||
def JOYP_RIGHT equ 1 << B_JOYP_RIGHT
|
||||
|
||||
; SGB command packet transfer uses for JOYP bits
|
||||
def B_JOYP_SGB_ONE equ 5 ; 0 = sending 1 bit
|
||||
def B_JOYP_SGB_ZERO equ 4 ; 0 = sending 0 bit
|
||||
def JOYP_SGB_START equ %00_00_0000 ; start SGB packet transfer
|
||||
def JOYP_SGB_ONE equ %00_01_0000 ; send 1 bit
|
||||
def JOYP_SGB_ZERO equ %00_10_0000 ; send 0 bit
|
||||
def JOYP_SGB_FINISH equ %00_11_0000 ; finish SGB packet transfer
|
||||
|
||||
; Combined input byte, with Control Pad in high nybble (conventional order)
|
||||
def B_PAD_DOWN equ 7
|
||||
def B_PAD_UP equ 6
|
||||
|
|
@ -96,7 +104,6 @@ def B_PAD_A equ 0
|
|||
def PAD_B equ 1 << B_PAD_B
|
||||
def PAD_A equ 1 << B_PAD_A
|
||||
|
||||
|
||||
; Combined input byte, with Control Pad in low nybble (swapped order)
|
||||
def B_PAD_SWAP_START equ 7
|
||||
def B_PAD_SWAP_SELECT equ 6
|
||||
|
|
@ -222,7 +229,7 @@ def AUD1ENV_PACE equ %00000_111 ; how long between envelope iterations
|
|||
; (in 64 Hz ticks, ~15.6 ms apart) [r/w]
|
||||
|
||||
; -- AUD1LOW / NR13 ($FF13) ---------------------------------------------------
|
||||
; Audio channel 1 period (low 8 bits) [r/w]
|
||||
; Audio channel 1 period (low 8 bits) [wo]
|
||||
def rAUD1LOW equ $FF13
|
||||
|
||||
; -- AUD1HIGH / NR14 ($FF14) --------------------------------------------------
|
||||
|
|
@ -266,7 +273,7 @@ def AUD2ENV_PACE equ %00000_111 ; how long between envelope iterations
|
|||
; (in 64 Hz ticks, ~15.6 ms apart) [r/w]
|
||||
|
||||
; -- AUD2LOW / NR23 ($FF18) ---------------------------------------------------
|
||||
; Audio channel 2 period (low 8 bits) [r/w]
|
||||
; Audio channel 2 period (low 8 bits) [wo]
|
||||
def rAUD2LOW equ $FF18
|
||||
|
||||
; -- AUD2HIGH / NR24 ($FF19) --------------------------------------------------
|
||||
|
|
@ -304,7 +311,7 @@ def AUD3LEVEL_VOLUME equ %0_11_00000 ; volume level [r/w]
|
|||
def AUD3LEVEL_25 equ %0_11_00000 ; 25%
|
||||
|
||||
; -- AUD3LOW / NR33 ($FF1D) ---------------------------------------------------
|
||||
; Audio channel 3 period (low 8 bits) [r/w]
|
||||
; Audio channel 3 period (low 8 bits) [wo]
|
||||
def rAUD3LOW equ $FF1D
|
||||
|
||||
; -- AUD3HIGH / NR34 ($FF1E) --------------------------------------------------
|
||||
|
|
@ -927,15 +934,18 @@ def TILE_HEIGHT equ 8 ; height of tile in pixels
|
|||
def TILE_SIZE equ 16 ; size of tile in bytes (2 bits/pixel)
|
||||
|
||||
def COLOR_SIZE equ 2 ; size of color in bytes (little-endian BGR555)
|
||||
def B_COLOR_RED equ 0 ; bits 4-0
|
||||
def B_COLOR_GREEN equ 5 ; bits 9-5
|
||||
def B_COLOR_BLUE equ 10 ; bits 14-10
|
||||
def PAL_COLORS equ 4 ; colors per palette
|
||||
def PAL_SIZE equ COLOR_SIZE * PAL_COLORS ; size of palette in bytes
|
||||
|
||||
def COLOR_CH_WIDTH equ 5 ; bits per RGB color channel
|
||||
def COLOR_CH_MAX equ (1 << COLOR_CH_WIDTH) - 1
|
||||
def B_COLOR_RED equ COLOR_CH_WIDTH * 0 ; bits 4-0
|
||||
def B_COLOR_GREEN equ COLOR_CH_WIDTH * 1 ; bits 9-5
|
||||
def B_COLOR_BLUE equ COLOR_CH_WIDTH * 2 ; bits 14-10
|
||||
def COLOR_RED equ %000_11111 ; for the low byte
|
||||
def COLOR_GREEN_LOW equ %111_00000 ; for the low byte
|
||||
def COLOR_GREEN_HIGH equ %0_00000_11 ; for the high byte
|
||||
def COLOR_BLUE equ %0_11111_00 ; for the high byte
|
||||
def PAL_COLORS equ 4 ; colors per palette
|
||||
def PAL_SIZE equ COLOR_SIZE * PAL_COLORS ; size of palette in bytes
|
||||
|
||||
; (DMG only) grayscale shade indexes for BGP, OBP0, and OBP1
|
||||
def SHADE_WHITE equ %00
|
||||
|
|
@ -1032,6 +1042,22 @@ def B_BOOTUP_B_AGB equ 0
|
|||
def BOOTUP_B_CGB equ 0 << B_BOOTUP_B_AGB
|
||||
def BOOTUP_B_AGB equ 1 << B_BOOTUP_B_AGB
|
||||
|
||||
; Register C = CPU qualifier
|
||||
def BOOTUP_C_DMG equ $13
|
||||
def BOOTUP_C_SGB equ $14
|
||||
def BOOTUP_C_CGB equ $00 ; CGB or AGB
|
||||
|
||||
; Register D = color qualifier
|
||||
def BOOTUP_D_MONO equ $00 ; DMG, MGB, SGB, or CGB or AGB in DMG mode
|
||||
def BOOTUP_D_COLOR equ $FF ; CGB or AGB
|
||||
|
||||
; Register E = CPU qualifier (distinguishes DMG variants)
|
||||
def BOOTUP_E_DMG0 equ $C1
|
||||
def BOOTUP_E_DMG equ $C8
|
||||
def BOOTUP_E_SGB equ $00
|
||||
def BOOTUP_E_CGB_DMGMODE equ $08 ; CGB or AGB in DMG mode
|
||||
def BOOTUP_E_CGB equ $56 ; CGB or AGB
|
||||
|
||||
|
||||
;******************************************************************************
|
||||
; Aliases
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
const HYPER_POTION ; $12
|
||||
const SUPER_POTION ; $13
|
||||
const POTION ; $14
|
||||
; badges use item IDs (see scripts/CeruleanBadgeHouse.asm)
|
||||
const BOULDERBADGE ; $15
|
||||
DEF SAFARI_BAIT EQU BOULDERBADGE ; overload
|
||||
const CASCADEBADGE ; $16
|
||||
|
|
@ -94,7 +95,7 @@ DEF SAFARI_ROCK EQU CASCADEBADGE ; overload
|
|||
const MAX_ELIXER ; $53
|
||||
DEF NUM_ITEMS EQU const_value - 1
|
||||
|
||||
; elevator floors use item IDs
|
||||
; elevator floors use item IDs (see scripts/CeladonMartElevator.asm and scripts/SilphCoElevator.asm)
|
||||
const FLOOR_B2F ; $54
|
||||
const FLOOR_B1F ; $55
|
||||
const FLOOR_1F ; $56
|
||||
|
|
|
|||
|
|
@ -10,3 +10,6 @@ DEF TRUE EQU 1
|
|||
|
||||
; input
|
||||
DEF NO_INPUT EQU 0
|
||||
|
||||
; SGB command MLT_REQ can be used to detect SGB hardware
|
||||
DEF JOYP_SGB_MLT_REQ EQU %00000011
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ DEF BIT_NO_PREVIOUS_MAP EQU 7
|
|||
|
||||
; wCurrentBoxNum
|
||||
DEF BIT_HAS_CHANGED_BOXES EQU 7
|
||||
DEF BOX_NUM_MASK EQU %01111111
|
||||
|
||||
; wObtainedBadges, wBeatGymFlags
|
||||
const_def
|
||||
|
|
@ -161,3 +162,6 @@ DEF NUM_BADGES EQU const_value
|
|||
const_def
|
||||
const BIT_PLAYER_LOWER_Y ; 0
|
||||
const BIT_PLAYER_LOWER_X ; 1
|
||||
|
||||
; rLCDC
|
||||
DEF LCDC_DEFAULT EQU LCDC_ON | LCDC_WIN_9C00 | LCDC_WIN_ON | LCDC_BLOCK21 | LCDC_BG_9800 | LCDC_OBJ_8 | LCDC_OBJ_ON | LCDC_BG_ON
|
||||
|
|
|
|||
|
|
@ -1,7 +1,12 @@
|
|||
MACRO npctrade
|
||||
; give mon, get mon, dialog id, nickname
|
||||
db \1, \2, \3
|
||||
dname \4, NAME_LENGTH
|
||||
ENDM
|
||||
|
||||
TradeMons:
|
||||
; entries correspond to TRADE_FOR_* constants
|
||||
table_width 3 + NAME_LENGTH
|
||||
; give mon, get mon, dialog id, nickname
|
||||
; The two instances of TRADE_DIALOGSET_EVOLUTION are a leftover
|
||||
; from the Japanese Blue trades, which used species that evolve.
|
||||
; TRADE_DIALOGSET_EVOLUTION did not refer to evolution in Japanese
|
||||
|
|
@ -9,14 +14,14 @@ TradeMons:
|
|||
; "went and evolved" and also changed the trades to match. English
|
||||
; Red/Blue uses the original JP Red/Green trades but with the JP Blue
|
||||
; post-trade text.
|
||||
db LICKITUNG, DUGTRIO, TRADE_DIALOGSET_CASUAL, "GURIO@@@@@@"
|
||||
db CLEFAIRY, MR_MIME, TRADE_DIALOGSET_CASUAL, "MILES@@@@@@"
|
||||
db BUTTERFREE, BEEDRILL, TRADE_DIALOGSET_HAPPY, "STINGER@@@@" ; unused
|
||||
db KANGASKHAN, MUK, TRADE_DIALOGSET_CASUAL, "STICKY@@@@@"
|
||||
db MEW, MEW, TRADE_DIALOGSET_HAPPY, "BART@@@@@@@" ; unused
|
||||
db TANGELA, PARASECT, TRADE_DIALOGSET_CASUAL, "SPIKE@@@@@@"
|
||||
db PIDGEOT, PIDGEOT, TRADE_DIALOGSET_EVOLUTION, "MARTY@@@@@@" ; unused
|
||||
db GOLDUCK, RHYDON, TRADE_DIALOGSET_EVOLUTION, "BUFFY@@@@@@"
|
||||
db GROWLITHE, DEWGONG, TRADE_DIALOGSET_HAPPY, "CEZANNE@@@@"
|
||||
db CUBONE, MACHOKE, TRADE_DIALOGSET_HAPPY, "RICKY@@@@@@"
|
||||
npctrade LICKITUNG, DUGTRIO, TRADE_DIALOGSET_CASUAL, "GURIO"
|
||||
npctrade CLEFAIRY, MR_MIME, TRADE_DIALOGSET_CASUAL, "MILES"
|
||||
npctrade BUTTERFREE, BEEDRILL, TRADE_DIALOGSET_HAPPY, "STINGER" ; unused
|
||||
npctrade KANGASKHAN, MUK, TRADE_DIALOGSET_CASUAL, "STICKY"
|
||||
npctrade MEW, MEW, TRADE_DIALOGSET_HAPPY, "BART" ; unused
|
||||
npctrade TANGELA, PARASECT, TRADE_DIALOGSET_CASUAL, "SPIKE"
|
||||
npctrade PIDGEOT, PIDGEOT, TRADE_DIALOGSET_EVOLUTION, "MARTY" ; unused
|
||||
npctrade GOLDUCK, RHYDON, TRADE_DIALOGSET_EVOLUTION, "BUFFY"
|
||||
npctrade GROWLITHE, DEWGONG, TRADE_DIALOGSET_HAPPY, "CEZANNE"
|
||||
npctrade CUBONE, MACHOKE, TRADE_DIALOGSET_HAPPY, "RICKY"
|
||||
assert_table_length NUM_NPC_TRADES
|
||||
|
|
|
|||
|
|
@ -256,7 +256,7 @@ MapHSPointers:
|
|||
dw -1 ; end
|
||||
|
||||
NoHS:
|
||||
db $FF, $FF, $FF
|
||||
db -1, -1, -1 ; end
|
||||
|
||||
MissableObjects:
|
||||
; entries correspond to HS_* constants (see constants/hide_show_constants)
|
||||
|
|
@ -578,5 +578,5 @@ BluesHouseHSCopy: ; unreferenced
|
|||
db BLUES_HOUSE, BLUESHOUSE_DAISY1, SHOW
|
||||
db BLUES_HOUSE, BLUESHOUSE_DAISY2, HIDE
|
||||
db BLUES_HOUSE, BLUESHOUSE_TOWN_MAP, SHOW
|
||||
db $FF, $01, SHOW ; end
|
||||
assert_table_length NUM_HS_OBJECTS + 1
|
||||
assert_table_length NUM_HS_OBJECTS
|
||||
db -1, 1, SHOW ; end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
object_const_def
|
||||
const_export ROUTE2_OAKS_AIDE
|
||||
const_export ROUTE2_YOUNGSTER
|
||||
const_export ROUTE2GATE_OAKS_AIDE
|
||||
const_export ROUTE2GATE_YOUNGSTER
|
||||
|
||||
Route2Gate_Object:
|
||||
db $a ; border block
|
||||
|
|
|
|||
|
|
@ -1,193 +1,193 @@
|
|||
MonsterNames::
|
||||
table_width NAME_LENGTH - 1
|
||||
db "RHYDON@@@@"
|
||||
db "KANGASKHAN"
|
||||
db "NIDORAN♂@@"
|
||||
db "CLEFAIRY@@"
|
||||
db "SPEAROW@@@"
|
||||
db "VOLTORB@@@"
|
||||
db "NIDOKING@@"
|
||||
db "SLOWBRO@@@"
|
||||
db "IVYSAUR@@@"
|
||||
db "EXEGGUTOR@"
|
||||
db "LICKITUNG@"
|
||||
db "EXEGGCUTE@"
|
||||
db "GRIMER@@@@"
|
||||
db "GENGAR@@@@"
|
||||
db "NIDORAN♀@@"
|
||||
db "NIDOQUEEN@"
|
||||
db "CUBONE@@@@"
|
||||
db "RHYHORN@@@"
|
||||
db "LAPRAS@@@@"
|
||||
db "ARCANINE@@"
|
||||
db "MEW@@@@@@@"
|
||||
db "GYARADOS@@"
|
||||
db "SHELLDER@@"
|
||||
db "TENTACOOL@"
|
||||
db "GASTLY@@@@"
|
||||
db "SCYTHER@@@"
|
||||
db "STARYU@@@@"
|
||||
db "BLASTOISE@"
|
||||
db "PINSIR@@@@"
|
||||
db "TANGELA@@@"
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "GROWLITHE@"
|
||||
db "ONIX@@@@@@"
|
||||
db "FEAROW@@@@"
|
||||
db "PIDGEY@@@@"
|
||||
db "SLOWPOKE@@"
|
||||
db "KADABRA@@@"
|
||||
db "GRAVELER@@"
|
||||
db "CHANSEY@@@"
|
||||
db "MACHOKE@@@"
|
||||
db "MR.MIME@@@"
|
||||
db "HITMONLEE@"
|
||||
db "HITMONCHAN"
|
||||
db "ARBOK@@@@@"
|
||||
db "PARASECT@@"
|
||||
db "PSYDUCK@@@"
|
||||
db "DROWZEE@@@"
|
||||
db "GOLEM@@@@@"
|
||||
db "MISSINGNO."
|
||||
db "MAGMAR@@@@"
|
||||
db "MISSINGNO."
|
||||
db "ELECTABUZZ"
|
||||
db "MAGNETON@@"
|
||||
db "KOFFING@@@"
|
||||
db "MISSINGNO."
|
||||
db "MANKEY@@@@"
|
||||
db "SEEL@@@@@@"
|
||||
db "DIGLETT@@@"
|
||||
db "TAUROS@@@@"
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "FARFETCH'D"
|
||||
db "VENONAT@@@"
|
||||
db "DRAGONITE@"
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "DODUO@@@@@"
|
||||
db "POLIWAG@@@"
|
||||
db "JYNX@@@@@@"
|
||||
db "MOLTRES@@@"
|
||||
db "ARTICUNO@@"
|
||||
db "ZAPDOS@@@@"
|
||||
db "DITTO@@@@@"
|
||||
db "MEOWTH@@@@"
|
||||
db "KRABBY@@@@"
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "VULPIX@@@@"
|
||||
db "NINETALES@"
|
||||
db "PIKACHU@@@"
|
||||
db "RAICHU@@@@"
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "DRATINI@@@"
|
||||
db "DRAGONAIR@"
|
||||
db "KABUTO@@@@"
|
||||
db "KABUTOPS@@"
|
||||
db "HORSEA@@@@"
|
||||
db "SEADRA@@@@"
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "SANDSHREW@"
|
||||
db "SANDSLASH@"
|
||||
db "OMANYTE@@@"
|
||||
db "OMASTAR@@@"
|
||||
db "JIGGLYPUFF"
|
||||
db "WIGGLYTUFF"
|
||||
db "EEVEE@@@@@"
|
||||
db "FLAREON@@@"
|
||||
db "JOLTEON@@@"
|
||||
db "VAPOREON@@"
|
||||
db "MACHOP@@@@"
|
||||
db "ZUBAT@@@@@"
|
||||
db "EKANS@@@@@"
|
||||
db "PARAS@@@@@"
|
||||
db "POLIWHIRL@"
|
||||
db "POLIWRATH@"
|
||||
db "WEEDLE@@@@"
|
||||
db "KAKUNA@@@@"
|
||||
db "BEEDRILL@@"
|
||||
db "MISSINGNO."
|
||||
db "DODRIO@@@@"
|
||||
db "PRIMEAPE@@"
|
||||
db "DUGTRIO@@@"
|
||||
db "VENOMOTH@@"
|
||||
db "DEWGONG@@@"
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "CATERPIE@@"
|
||||
db "METAPOD@@@"
|
||||
db "BUTTERFREE"
|
||||
db "MACHAMP@@@"
|
||||
db "MISSINGNO."
|
||||
db "GOLDUCK@@@"
|
||||
db "HYPNO@@@@@"
|
||||
db "GOLBAT@@@@"
|
||||
db "MEWTWO@@@@"
|
||||
db "SNORLAX@@@"
|
||||
db "MAGIKARP@@"
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "MUK@@@@@@@"
|
||||
db "MISSINGNO."
|
||||
db "KINGLER@@@"
|
||||
db "CLOYSTER@@"
|
||||
db "MISSINGNO."
|
||||
db "ELECTRODE@"
|
||||
db "CLEFABLE@@"
|
||||
db "WEEZING@@@"
|
||||
db "PERSIAN@@@"
|
||||
db "MAROWAK@@@"
|
||||
db "MISSINGNO."
|
||||
db "HAUNTER@@@"
|
||||
db "ABRA@@@@@@"
|
||||
db "ALAKAZAM@@"
|
||||
db "PIDGEOTTO@"
|
||||
db "PIDGEOT@@@"
|
||||
db "STARMIE@@@"
|
||||
db "BULBASAUR@"
|
||||
db "VENUSAUR@@"
|
||||
db "TENTACRUEL"
|
||||
db "MISSINGNO."
|
||||
db "GOLDEEN@@@"
|
||||
db "SEAKING@@@"
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "PONYTA@@@@"
|
||||
db "RAPIDASH@@"
|
||||
db "RATTATA@@@"
|
||||
db "RATICATE@@"
|
||||
db "NIDORINO@@"
|
||||
db "NIDORINA@@"
|
||||
db "GEODUDE@@@"
|
||||
db "PORYGON@@@"
|
||||
db "AERODACTYL"
|
||||
db "MISSINGNO."
|
||||
db "MAGNEMITE@"
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "CHARMANDER"
|
||||
db "SQUIRTLE@@"
|
||||
db "CHARMELEON"
|
||||
db "WARTORTLE@"
|
||||
db "CHARIZARD@"
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "MISSINGNO."
|
||||
db "ODDISH@@@@"
|
||||
db "GLOOM@@@@@"
|
||||
db "VILEPLUME@"
|
||||
db "BELLSPROUT"
|
||||
db "WEEPINBELL"
|
||||
db "VICTREEBEL"
|
||||
dname "RHYDON"
|
||||
dname "KANGASKHAN"
|
||||
dname "NIDORAN♂"
|
||||
dname "CLEFAIRY"
|
||||
dname "SPEAROW"
|
||||
dname "VOLTORB"
|
||||
dname "NIDOKING"
|
||||
dname "SLOWBRO"
|
||||
dname "IVYSAUR"
|
||||
dname "EXEGGUTOR"
|
||||
dname "LICKITUNG"
|
||||
dname "EXEGGCUTE"
|
||||
dname "GRIMER"
|
||||
dname "GENGAR"
|
||||
dname "NIDORAN♀"
|
||||
dname "NIDOQUEEN"
|
||||
dname "CUBONE"
|
||||
dname "RHYHORN"
|
||||
dname "LAPRAS"
|
||||
dname "ARCANINE"
|
||||
dname "MEW"
|
||||
dname "GYARADOS"
|
||||
dname "SHELLDER"
|
||||
dname "TENTACOOL"
|
||||
dname "GASTLY"
|
||||
dname "SCYTHER"
|
||||
dname "STARYU"
|
||||
dname "BLASTOISE"
|
||||
dname "PINSIR"
|
||||
dname "TANGELA"
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "GROWLITHE"
|
||||
dname "ONIX"
|
||||
dname "FEAROW"
|
||||
dname "PIDGEY"
|
||||
dname "SLOWPOKE"
|
||||
dname "KADABRA"
|
||||
dname "GRAVELER"
|
||||
dname "CHANSEY"
|
||||
dname "MACHOKE"
|
||||
dname "MR.MIME"
|
||||
dname "HITMONLEE"
|
||||
dname "HITMONCHAN"
|
||||
dname "ARBOK"
|
||||
dname "PARASECT"
|
||||
dname "PSYDUCK"
|
||||
dname "DROWZEE"
|
||||
dname "GOLEM"
|
||||
dname "MISSINGNO."
|
||||
dname "MAGMAR"
|
||||
dname "MISSINGNO."
|
||||
dname "ELECTABUZZ"
|
||||
dname "MAGNETON"
|
||||
dname "KOFFING"
|
||||
dname "MISSINGNO."
|
||||
dname "MANKEY"
|
||||
dname "SEEL"
|
||||
dname "DIGLETT"
|
||||
dname "TAUROS"
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "FARFETCH'D"
|
||||
dname "VENONAT"
|
||||
dname "DRAGONITE"
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "DODUO"
|
||||
dname "POLIWAG"
|
||||
dname "JYNX"
|
||||
dname "MOLTRES"
|
||||
dname "ARTICUNO"
|
||||
dname "ZAPDOS"
|
||||
dname "DITTO"
|
||||
dname "MEOWTH"
|
||||
dname "KRABBY"
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "VULPIX"
|
||||
dname "NINETALES"
|
||||
dname "PIKACHU"
|
||||
dname "RAICHU"
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "DRATINI"
|
||||
dname "DRAGONAIR"
|
||||
dname "KABUTO"
|
||||
dname "KABUTOPS"
|
||||
dname "HORSEA"
|
||||
dname "SEADRA"
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "SANDSHREW"
|
||||
dname "SANDSLASH"
|
||||
dname "OMANYTE"
|
||||
dname "OMASTAR"
|
||||
dname "JIGGLYPUFF"
|
||||
dname "WIGGLYTUFF"
|
||||
dname "EEVEE"
|
||||
dname "FLAREON"
|
||||
dname "JOLTEON"
|
||||
dname "VAPOREON"
|
||||
dname "MACHOP"
|
||||
dname "ZUBAT"
|
||||
dname "EKANS"
|
||||
dname "PARAS"
|
||||
dname "POLIWHIRL"
|
||||
dname "POLIWRATH"
|
||||
dname "WEEDLE"
|
||||
dname "KAKUNA"
|
||||
dname "BEEDRILL"
|
||||
dname "MISSINGNO."
|
||||
dname "DODRIO"
|
||||
dname "PRIMEAPE"
|
||||
dname "DUGTRIO"
|
||||
dname "VENOMOTH"
|
||||
dname "DEWGONG"
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "CATERPIE"
|
||||
dname "METAPOD"
|
||||
dname "BUTTERFREE"
|
||||
dname "MACHAMP"
|
||||
dname "MISSINGNO."
|
||||
dname "GOLDUCK"
|
||||
dname "HYPNO"
|
||||
dname "GOLBAT"
|
||||
dname "MEWTWO"
|
||||
dname "SNORLAX"
|
||||
dname "MAGIKARP"
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "MUK"
|
||||
dname "MISSINGNO."
|
||||
dname "KINGLER"
|
||||
dname "CLOYSTER"
|
||||
dname "MISSINGNO."
|
||||
dname "ELECTRODE"
|
||||
dname "CLEFABLE"
|
||||
dname "WEEZING"
|
||||
dname "PERSIAN"
|
||||
dname "MAROWAK"
|
||||
dname "MISSINGNO."
|
||||
dname "HAUNTER"
|
||||
dname "ABRA"
|
||||
dname "ALAKAZAM"
|
||||
dname "PIDGEOTTO"
|
||||
dname "PIDGEOT"
|
||||
dname "STARMIE"
|
||||
dname "BULBASAUR"
|
||||
dname "VENUSAUR"
|
||||
dname "TENTACRUEL"
|
||||
dname "MISSINGNO."
|
||||
dname "GOLDEEN"
|
||||
dname "SEAKING"
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "PONYTA"
|
||||
dname "RAPIDASH"
|
||||
dname "RATTATA"
|
||||
dname "RATICATE"
|
||||
dname "NIDORINO"
|
||||
dname "NIDORINA"
|
||||
dname "GEODUDE"
|
||||
dname "PORYGON"
|
||||
dname "AERODACTYL"
|
||||
dname "MISSINGNO."
|
||||
dname "MAGNEMITE"
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "CHARMANDER"
|
||||
dname "SQUIRTLE"
|
||||
dname "CHARMELEON"
|
||||
dname "WARTORTLE"
|
||||
dname "CHARIZARD"
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "MISSINGNO."
|
||||
dname "ODDISH"
|
||||
dname "GLOOM"
|
||||
dname "VILEPLUME"
|
||||
dname "BELLSPROUT"
|
||||
dname "WEEPINBELL"
|
||||
dname "VICTREEBEL"
|
||||
assert_table_length NUM_POKEMON_INDEXES
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ PredefPointers::
|
|||
add_predef DoubleOrHalveSelectedStats
|
||||
add_predef ShowPokedexMenu
|
||||
add_predef EvolutionAfterBattle
|
||||
add_predef SaveSAVtoSRAM0
|
||||
add_predef SaveMainData
|
||||
add_predef InitOpponent
|
||||
add_predef CableClub_Run
|
||||
add_predef DrawBadges
|
||||
|
|
@ -73,7 +73,7 @@ PredefPointers::
|
|||
add_predef UsedCut
|
||||
add_predef ShowPokedexData
|
||||
add_predef WriteMonMoves
|
||||
add_predef SaveSAV
|
||||
add_predef SaveMenu
|
||||
add_predef LoadSGB
|
||||
add_predef MarkTownVisitedAndLoadMissableObjects
|
||||
add_predef SetPartyMonTypes
|
||||
|
|
@ -90,10 +90,10 @@ PredefPointers::
|
|||
add_predef EmptyFunc ; return immediately
|
||||
add_predef AskName
|
||||
add_predef PewterGuys
|
||||
add_predef SaveSAVtoSRAM2
|
||||
add_predef LoadSAV2
|
||||
add_predef LoadSAV
|
||||
add_predef SaveSAVtoSRAM1
|
||||
add_predef SavePartyAndDexData
|
||||
add_predef LoadPartyAndDexData
|
||||
add_predef TryLoadSaveFile
|
||||
add_predef SaveCurrentBoxData
|
||||
add_predef DoInGameTradeDialogue
|
||||
add_predef HallOfFamePC
|
||||
add_predef DisplayDexRating
|
||||
|
|
|
|||
|
|
@ -1869,7 +1869,8 @@ AnimateRetreatingPlayerMon:
|
|||
call ClearScreenArea
|
||||
ret
|
||||
|
||||
; reads player's current mon's HP into wBattleMonHP
|
||||
; Copies player's current pokemon's current HP and status into the party
|
||||
; struct data so it stays after battle or switching
|
||||
ReadPlayerMonCurHPAndStatus:
|
||||
ld a, [wPlayerMonNumber]
|
||||
ld hl, wPartyMon1HP
|
||||
|
|
@ -3308,30 +3309,30 @@ PlayerCalcMoveDamage:
|
|||
jp c, .moveHitTest ; SetDamageEffects moves (e.g. Seismic Toss and Super Fang) skip damage calculation
|
||||
call CriticalHitTest
|
||||
call HandleCounterMove
|
||||
jr z, handleIfPlayerMoveMissed
|
||||
jr z, HandleIfPlayerMoveMissed
|
||||
call GetDamageVarsForPlayerAttack
|
||||
call CalculateDamage
|
||||
jp z, playerCheckIfFlyOrChargeEffect ; for moves with 0 BP, skip any further damage calculation and, for now, skip MoveHitTest
|
||||
jp z, PlayerCheckIfFlyOrChargeEffect ; for moves with 0 BP, skip any further damage calculation and, for now, skip MoveHitTest
|
||||
; for these moves, accuracy tests will only occur if they are called as part of the effect itself
|
||||
call AdjustDamageForMoveType
|
||||
call RandomizeDamage
|
||||
.moveHitTest
|
||||
call MoveHitTest
|
||||
handleIfPlayerMoveMissed:
|
||||
HandleIfPlayerMoveMissed:
|
||||
ld a, [wMoveMissed]
|
||||
and a
|
||||
jr z, getPlayerAnimationType
|
||||
jr z, GetPlayerAnimationType
|
||||
ld a, [wPlayerMoveEffect]
|
||||
sub EXPLODE_EFFECT
|
||||
jr z, playPlayerMoveAnimation ; don't play any animation if the move missed, unless it was EXPLODE_EFFECT
|
||||
jr playerCheckIfFlyOrChargeEffect
|
||||
getPlayerAnimationType:
|
||||
jr z, PlayPlayerMoveAnimation ; don't play any animation if the move missed, unless it was EXPLODE_EFFECT
|
||||
jr PlayerCheckIfFlyOrChargeEffect
|
||||
GetPlayerAnimationType:
|
||||
ld a, [wPlayerMoveEffect]
|
||||
and a
|
||||
ld a, ANIMATIONTYPE_BLINK_ENEMY_MON_SPRITE ; move has no effect other than dealing damage
|
||||
jr z, playPlayerMoveAnimation
|
||||
jr z, PlayPlayerMoveAnimation
|
||||
ld a, ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_LIGHT ; move has effect
|
||||
playPlayerMoveAnimation:
|
||||
PlayPlayerMoveAnimation:
|
||||
push af
|
||||
ld a, [wPlayerBattleStatus2]
|
||||
bit HAS_SUBSTITUTE_UP, a
|
||||
|
|
@ -3350,7 +3351,7 @@ playPlayerMoveAnimation:
|
|||
ld b, BANK(ReshowSubstituteAnim)
|
||||
call nz, Bankswitch
|
||||
jr MirrorMoveCheck
|
||||
playerCheckIfFlyOrChargeEffect:
|
||||
PlayerCheckIfFlyOrChargeEffect:
|
||||
ld c, 30
|
||||
call DelayFrames
|
||||
ld a, [wPlayerMoveEffect]
|
||||
|
|
@ -3417,7 +3418,7 @@ MirrorMoveCheck:
|
|||
ld a, [wPlayerNumAttacksLeft]
|
||||
dec a
|
||||
ld [wPlayerNumAttacksLeft], a
|
||||
jp nz, getPlayerAnimationType ; for multi-hit moves, apply attack until PlayerNumAttacksLeft hits 0 or the enemy faints.
|
||||
jp nz, GetPlayerAnimationType ; for multi-hit moves, apply attack until PlayerNumAttacksLeft hits 0 or the enemy faints.
|
||||
; damage calculation and accuracy tests only happen for the first hit
|
||||
res ATTACKING_MULTIPLE_TIMES, [hl] ; clear attacking multiple times status when all attacks are over
|
||||
ld hl, MultiHitText
|
||||
|
|
@ -3694,7 +3695,7 @@ CheckPlayerStatusConditions:
|
|||
ld [hl], a
|
||||
ld a, BIDE
|
||||
ld [wPlayerMoveNum], a
|
||||
ld hl, handleIfPlayerMoveMissed ; skip damage calculation, DecrementPP and MoveHitTest
|
||||
ld hl, HandleIfPlayerMoveMissed ; skip damage calculation, DecrementPP and MoveHitTest
|
||||
jp .returnToHL
|
||||
|
||||
.ThrashingAboutCheck
|
||||
|
|
@ -3728,7 +3729,7 @@ CheckPlayerStatusConditions:
|
|||
ld a, [wPlayerNumAttacksLeft]
|
||||
dec a ; did multi-turn move end?
|
||||
ld [wPlayerNumAttacksLeft], a
|
||||
ld hl, getPlayerAnimationType ; if it didn't, skip damage calculation (deal damage equal to last hit),
|
||||
ld hl, GetPlayerAnimationType ; if it didn't, skip damage calculation (deal damage equal to last hit),
|
||||
; DecrementPP and MoveHitTest
|
||||
jp nz, .returnToHL
|
||||
jp .returnToHL
|
||||
|
|
@ -5749,7 +5750,7 @@ RandomizeDamage:
|
|||
.loop
|
||||
call BattleRandom
|
||||
rrca
|
||||
cp 217
|
||||
cp 85 percent + 1
|
||||
jr c, .loop
|
||||
ldh [hMultiplier], a
|
||||
call Multiply ; multiply damage by the random number, which is in the range [217, 255]
|
||||
|
|
@ -5842,7 +5843,7 @@ EnemyCalcMoveDamage:
|
|||
jp c, EnemyMoveHitTest
|
||||
call CriticalHitTest
|
||||
call HandleCounterMove
|
||||
jr z, handleIfEnemyMoveMissed
|
||||
jr z, HandleIfEnemyMoveMissed
|
||||
call SwapPlayerAndEnemyLevels
|
||||
call GetDamageVarsForEnemyAttack
|
||||
call SwapPlayerAndEnemyLevels
|
||||
|
|
@ -5853,13 +5854,13 @@ EnemyCalcMoveDamage:
|
|||
|
||||
EnemyMoveHitTest:
|
||||
call MoveHitTest
|
||||
handleIfEnemyMoveMissed:
|
||||
HandleIfEnemyMoveMissed:
|
||||
ld a, [wMoveMissed]
|
||||
and a
|
||||
jr z, .moveDidNotMiss
|
||||
ld a, [wEnemyMoveEffect]
|
||||
cp EXPLODE_EFFECT
|
||||
jr z, handleExplosionMiss
|
||||
jr z, HandleExplosionMiss
|
||||
jr EnemyCheckIfFlyOrChargeEffect
|
||||
.moveDidNotMiss
|
||||
call SwapPlayerAndEnemyLevels
|
||||
|
|
@ -5868,13 +5869,13 @@ GetEnemyAnimationType:
|
|||
ld a, [wEnemyMoveEffect]
|
||||
and a
|
||||
ld a, ANIMATIONTYPE_SHAKE_SCREEN_VERTICALLY
|
||||
jr z, playEnemyMoveAnimation
|
||||
jr z, PlayEnemyMoveAnimation
|
||||
ld a, ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_HEAVY
|
||||
jr playEnemyMoveAnimation
|
||||
handleExplosionMiss:
|
||||
jr PlayEnemyMoveAnimation
|
||||
HandleExplosionMiss:
|
||||
call SwapPlayerAndEnemyLevels
|
||||
xor a
|
||||
playEnemyMoveAnimation:
|
||||
PlayEnemyMoveAnimation:
|
||||
push af
|
||||
ld a, [wEnemyBattleStatus2]
|
||||
bit HAS_SUBSTITUTE_UP, a ; does mon have a substitute?
|
||||
|
|
@ -6213,7 +6214,7 @@ CheckEnemyStatusConditions:
|
|||
ld a, BIDE
|
||||
ld [wEnemyMoveNum], a
|
||||
call SwapPlayerAndEnemyLevels
|
||||
ld hl, handleIfEnemyMoveMissed ; skip damage calculation, DecrementPP and MoveHitTest
|
||||
ld hl, HandleIfEnemyMoveMissed ; skip damage calculation, DecrementPP and MoveHitTest
|
||||
jp .enemyReturnToHL
|
||||
.checkIfThrashingAbout
|
||||
bit THRASHING_ABOUT, [hl] ; is mon using thrash or petal dance?
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@ _JumpMoveEffect:
|
|||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ld a, [wPlayerMoveEffect]
|
||||
jr z, .next1
|
||||
jr z, .next
|
||||
ld a, [wEnemyMoveEffect]
|
||||
.next1
|
||||
.next
|
||||
dec a ; subtract 1, there is no special effect for 00
|
||||
add a ; x2, 16bit pointers
|
||||
ld hl, MoveEffectPointerTable
|
||||
|
|
@ -716,14 +716,14 @@ UpdateLoweredStatDone:
|
|||
call PrintStatText
|
||||
pop de
|
||||
ld a, [de]
|
||||
cp $44
|
||||
cp ATTACK_DOWN_SIDE_EFFECT ; for all side effects, move animation has already played, skip it
|
||||
jr nc, .ApplyBadgeBoostsAndStatusPenalties
|
||||
call PlayCurrentMoveAnimation2
|
||||
.ApplyBadgeBoostsAndStatusPenalties
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
call nz, ApplyBadgeStatBoosts ; whenever the player uses a stat-down move, badge boosts get reapplied again to every stat,
|
||||
; even to those not affected by the stat-up move (will be boosted further)
|
||||
; even to those not affected by the stat-down move (will be boosted further)
|
||||
ld hl, MonsStatsFellText
|
||||
call PrintText
|
||||
|
||||
|
|
@ -1494,9 +1494,9 @@ CheckTargetSubstitute:
|
|||
ld hl, wEnemyBattleStatus2
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .next1
|
||||
jr z, .next
|
||||
ld hl, wPlayerBattleStatus2
|
||||
.next1
|
||||
.next
|
||||
bit HAS_SUBSTITUTE_UP, [hl]
|
||||
pop hl
|
||||
ret
|
||||
|
|
|
|||
|
|
@ -117,12 +117,12 @@ _InitBattleCommon:
|
|||
call PrintText
|
||||
call SaveScreenTilesToBuffer1
|
||||
call ClearScreen
|
||||
ld a, $98
|
||||
ld a, HIGH(vBGMap0)
|
||||
ldh [hAutoBGTransferDest + 1], a
|
||||
ld a, $1
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
call Delay3
|
||||
ld a, $9c
|
||||
ld a, HIGH(vBGMap1)
|
||||
ldh [hAutoBGTransferDest + 1], a
|
||||
call LoadScreenTilesFromBuffer1
|
||||
hlcoord 9, 7
|
||||
|
|
|
|||
|
|
@ -31,14 +31,14 @@ ReadTrainer:
|
|||
; and hl points to the trainer class.
|
||||
; Our next task is to iterate through the trainers,
|
||||
; decrementing b each time, until we get to the right one.
|
||||
.outer
|
||||
.CheckNextTrainer
|
||||
dec b
|
||||
jr z, .IterateTrainer
|
||||
.inner
|
||||
.SkipTrainer
|
||||
ld a, [hli]
|
||||
and a
|
||||
jr nz, .inner
|
||||
jr .outer
|
||||
jr nz, .SkipTrainer
|
||||
jr .CheckNextTrainer
|
||||
|
||||
; if the first byte of trainer data is FF,
|
||||
; - each pokemon has a specific level
|
||||
|
|
|
|||
|
|
@ -692,22 +692,22 @@ AICheckIfHPBelowFraction:
|
|||
ret
|
||||
|
||||
AIUseXAttack:
|
||||
ld b, $A
|
||||
ld b, ATTACK_UP1_EFFECT
|
||||
ld a, X_ATTACK
|
||||
jr AIIncreaseStat
|
||||
|
||||
AIUseXDefend:
|
||||
ld b, $B
|
||||
ld b, DEFENSE_UP1_EFFECT
|
||||
ld a, X_DEFEND
|
||||
jr AIIncreaseStat
|
||||
|
||||
AIUseXSpeed:
|
||||
ld b, $C
|
||||
ld b, SPEED_UP1_EFFECT
|
||||
ld a, X_SPEED
|
||||
jr AIIncreaseStat
|
||||
|
||||
AIUseXSpecial:
|
||||
ld b, $D
|
||||
ld b, SPECIAL_UP1_EFFECT
|
||||
ld a, X_SPECIAL
|
||||
; fallthrough
|
||||
|
||||
|
|
|
|||
|
|
@ -1568,7 +1568,7 @@ Func_ff295:
|
|||
push af
|
||||
ld a, 1 << BIT_FAST_TEXT_DELAY
|
||||
ld [wLetterPrintingDelayFlags], a
|
||||
callfar SaveSAVtoSRAM
|
||||
callfar SaveGameData
|
||||
pop af
|
||||
ld [wLetterPrintingDelayFlags], a
|
||||
pop de
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ _GivePokemon::
|
|||
callfar SendNewMonToBox
|
||||
ld hl, wStringBuffer
|
||||
ld a, [wCurrentBoxNum]
|
||||
and $7f
|
||||
and BOX_NUM_MASK
|
||||
cp 9
|
||||
jr c, .singleDigitBoxNum
|
||||
sub 9
|
||||
|
|
|
|||
|
|
@ -17,6 +17,15 @@ PrintBenchGuyText:
|
|||
ld b, a
|
||||
ld a, [wSpritePlayerStateData1FacingDirection]
|
||||
cp b
|
||||
|
||||
; bug: an 'inc hl' instruction is needed before looping back. When trying to
|
||||
; talk to a bench guy from above, this Sprite Facing test will fail, and the
|
||||
; next loop iteration will be misaligned within BenchGuyTextPointers table.
|
||||
; As a result, the routine will miss the terminator byte, and continue to
|
||||
; process data beyond the table boundary.
|
||||
; It seems that it will only return after starting to read data from VRAM
|
||||
; (According to Pan Docs, during PPU mode 3, reads return garbage value,
|
||||
; usually $FF).
|
||||
jr nz, .loop ; player isn't facing the bench guy
|
||||
ld a, [hl]
|
||||
jp PrintPredefTextID
|
||||
|
|
|
|||
|
|
@ -259,7 +259,7 @@ InGameTrade_CheckForTradeEvo:
|
|||
jp PlayDefaultMusic
|
||||
|
||||
InGameTrade_TrainerString:
|
||||
db "<TRAINER>@@@@@@@@@@"
|
||||
dname "<TRAINER>", NAME_LENGTH
|
||||
|
||||
InGameTradeTextPointers:
|
||||
; entries correspond to TRADE_DIALOGSET_* constants
|
||||
|
|
|
|||
|
|
@ -2,12 +2,12 @@ CeladonPrizeMenu::
|
|||
ld b, COIN_CASE
|
||||
call IsItemInBag
|
||||
jr nz, .havingCoinCase
|
||||
ld hl, RequireCoinCaseTextPtr
|
||||
ld hl, RequireCoinCaseText
|
||||
jp PrintText
|
||||
.havingCoinCase
|
||||
ld hl, wStatusFlags5
|
||||
set BIT_NO_TEXT_DELAY, [hl]
|
||||
ld hl, ExchangeCoinsForPrizesTextPtr
|
||||
ld hl, ExchangeCoinsForPrizesText
|
||||
call PrintText
|
||||
; the following are the menu settings
|
||||
xor a
|
||||
|
|
@ -27,7 +27,7 @@ CeladonPrizeMenu::
|
|||
call TextBoxBorder
|
||||
call GetPrizeMenuId
|
||||
call UpdateSprites
|
||||
ld hl, WhichPrizeTextPtr
|
||||
ld hl, WhichPrizeText
|
||||
call PrintText
|
||||
call HandleMenuInput ; menu choice handler
|
||||
bit B_PAD_B, a
|
||||
|
|
@ -41,16 +41,16 @@ CeladonPrizeMenu::
|
|||
res BIT_NO_TEXT_DELAY, [hl]
|
||||
ret
|
||||
|
||||
RequireCoinCaseTextPtr:
|
||||
RequireCoinCaseText:
|
||||
text_far _RequireCoinCaseText
|
||||
text_waitbutton
|
||||
text_end
|
||||
|
||||
ExchangeCoinsForPrizesTextPtr:
|
||||
ExchangeCoinsForPrizesText:
|
||||
text_far _ExchangeCoinsForPrizesText
|
||||
text_end
|
||||
|
||||
WhichPrizeTextPtr:
|
||||
WhichPrizeText:
|
||||
text_far _WhichPrizeText
|
||||
text_end
|
||||
|
||||
|
|
|
|||
|
|
@ -491,30 +491,30 @@ _SendSGBPacket:
|
|||
; save B for later use
|
||||
push bc
|
||||
; send RESET signal (P14=LOW, P15=LOW)
|
||||
xor a
|
||||
xor a ; JOYP_SGB_START
|
||||
ldh [rJOYP], a
|
||||
; set P14=HIGH, P15=HIGH
|
||||
ld a, $30
|
||||
ld a, JOYP_SGB_FINISH
|
||||
ldh [rJOYP], a
|
||||
;load length of packets (16 bytes)
|
||||
ld b, $10
|
||||
ld b, 16
|
||||
.nextByte
|
||||
;set bit counter (8 bits per byte)
|
||||
ld e, $08
|
||||
ld e, 8
|
||||
; get next byte in the packet
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
.nextBit0
|
||||
bit 0, d
|
||||
; if 0th bit is not zero set P14=HIGH, P15=LOW (send bit 1)
|
||||
ld a, $10
|
||||
ld a, JOYP_SGB_ONE
|
||||
jr nz, .next0
|
||||
; else (if 0th bit is zero) set P14=LOW, P15=HIGH (send bit 0)
|
||||
ld a, $20
|
||||
ld a, JOYP_SGB_ZERO
|
||||
.next0
|
||||
ldh [rJOYP], a
|
||||
; must set P14=HIGH,P15=HIGH between each "pulse"
|
||||
ld a, $30
|
||||
ld a, JOYP_SGB_FINISH
|
||||
ldh [rJOYP], a
|
||||
; rotation will put next bit in 0th position (so we can always use command
|
||||
; "bit 0, d" to fetch the bit that has to be sent)
|
||||
|
|
@ -524,11 +524,11 @@ _SendSGBPacket:
|
|||
jr nz, .nextBit0
|
||||
dec b
|
||||
jr nz, .nextByte
|
||||
; send bit 1 as a "stop bit" (end of parameter data)
|
||||
ld a, $20
|
||||
; send bit 0 as a "stop bit" (end of parameter data)
|
||||
ld a, JOYP_SGB_ZERO
|
||||
ldh [rJOYP], a
|
||||
; set P14=HIGH,P15=HIGH
|
||||
ld a, $30
|
||||
ld a, JOYP_SGB_FINISH
|
||||
ldh [rJOYP], a
|
||||
; wait for about 70000 cycles
|
||||
call Wait7000
|
||||
|
|
@ -612,20 +612,20 @@ CheckSGB:
|
|||
call SendSGBPacket
|
||||
call Wait7000
|
||||
ldh a, [rJOYP]
|
||||
and $3
|
||||
cp $3
|
||||
and JOYP_SGB_MLT_REQ
|
||||
cp JOYP_SGB_MLT_REQ
|
||||
jr nz, .isSGB
|
||||
ld a, $20
|
||||
ld a, JOYP_SGB_ZERO
|
||||
ldh [rJOYP], a
|
||||
ldh a, [rJOYP]
|
||||
ldh a, [rJOYP]
|
||||
call Wait7000
|
||||
call Wait7000
|
||||
ld a, $30
|
||||
ld a, JOYP_SGB_FINISH
|
||||
ldh [rJOYP], a
|
||||
call Wait7000
|
||||
call Wait7000
|
||||
ld a, $10
|
||||
ld a, JOYP_SGB_ONE
|
||||
ldh [rJOYP], a
|
||||
ldh a, [rJOYP]
|
||||
ldh a, [rJOYP]
|
||||
|
|
@ -635,7 +635,7 @@ CheckSGB:
|
|||
ldh a, [rJOYP]
|
||||
call Wait7000
|
||||
call Wait7000
|
||||
ld a, $30
|
||||
ld a, JOYP_SGB_FINISH
|
||||
ldh [rJOYP], a
|
||||
ldh a, [rJOYP]
|
||||
ldh a, [rJOYP]
|
||||
|
|
@ -643,8 +643,8 @@ CheckSGB:
|
|||
call Wait7000
|
||||
call Wait7000
|
||||
ldh a, [rJOYP]
|
||||
and $3
|
||||
cp $3
|
||||
and JOYP_SGB_MLT_REQ
|
||||
cp JOYP_SGB_MLT_REQ
|
||||
jr nz, .isSGB
|
||||
call SendMltReq1Packet
|
||||
and a
|
||||
|
|
@ -674,15 +674,15 @@ CopyGfxToSuperNintendoVRAM:
|
|||
call CopySGBBorderTiles
|
||||
jr .next
|
||||
.notCopyingTileData
|
||||
ld bc, $1000
|
||||
ld bc, 256 tiles
|
||||
call CopyData
|
||||
.next
|
||||
ld hl, vBGMap0
|
||||
ld de, $c
|
||||
ld de, TILEMAP_WIDTH - SCREEN_WIDTH
|
||||
ld a, $80
|
||||
ld c, $d
|
||||
ld c, (256 + SCREEN_WIDTH - 1) / SCREEN_WIDTH ; enough rows to fit 256 tiles
|
||||
.loop
|
||||
ld b, $14
|
||||
ld b, SCREEN_WIDTH
|
||||
.innerLoop
|
||||
ld [hli], a
|
||||
inc a
|
||||
|
|
@ -691,7 +691,7 @@ CopyGfxToSuperNintendoVRAM:
|
|||
add hl, de
|
||||
dec c
|
||||
jr nz, .loop
|
||||
ld a, $e3
|
||||
ld a, LCDC_DEFAULT
|
||||
ldh [rLCDC], a
|
||||
pop hl
|
||||
call SendSGBPacket
|
||||
|
|
|
|||
|
|
@ -867,7 +867,7 @@ TradeCenter_Trade:
|
|||
hlcoord 1, 14
|
||||
ld de, TradeCompleted
|
||||
call PlaceString
|
||||
predef SaveSAVtoSRAM2
|
||||
predef SavePartyAndDexData ; this allows reset into Pokecenter
|
||||
vc_hook Trade_save_game_end
|
||||
ld c, 50
|
||||
call DelayFrames
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ CableClubNPC::
|
|||
and a
|
||||
jr nz, .choseNo
|
||||
vc_hook Wireless_TryQuickSave_block_input
|
||||
callfar SaveSAVtoSRAM
|
||||
callfar SaveGameData
|
||||
call WaitForSoundToFinish
|
||||
ld a, SFX_SAVE
|
||||
call PlaySoundWaitForCurrent
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ DisplayTextIDInit::
|
|||
add hl, de
|
||||
dec c
|
||||
jr nz, .spriteStandStillLoop
|
||||
ld b, $9c ; window background address
|
||||
ld b, HIGH(vBGMap1)
|
||||
call CopyScreenTileBufferToVRAM ; transfer background in WRAM to VRAM
|
||||
xor a
|
||||
ldh [hWY], a ; put the window on the screen
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ MainMenu:
|
|||
call CheckForPlayerNameInSRAM
|
||||
jr nc, .mainMenuLoop
|
||||
|
||||
predef LoadSAV
|
||||
predef TryLoadSaveFile
|
||||
|
||||
.mainMenuLoop
|
||||
ld c, 20
|
||||
|
|
@ -278,7 +278,7 @@ CheckForPlayerNameInSRAM:
|
|||
ld [rRAMG], a
|
||||
ld a, BMODE_ADVANCED
|
||||
ld [rBMODE], a
|
||||
ASSERT BMODE_ADVANCED == BANK("Save Data")
|
||||
ASSERT BANK(sPlayerName) == BMODE_ADVANCED
|
||||
ld [rRAMB], a
|
||||
ld b, NAME_LENGTH
|
||||
ld hl, sPlayerName
|
||||
|
|
|
|||
|
|
@ -1,16 +1,15 @@
|
|||
LoadSAV:
|
||||
; if carry, write "the file data is destroyed"
|
||||
TryLoadSaveFile:
|
||||
call ClearScreen
|
||||
call LoadFontTilePatterns
|
||||
call LoadTextBoxTilePatterns
|
||||
call LoadSAV0
|
||||
call LoadMainData
|
||||
jr c, .badsum
|
||||
call LoadSAV1
|
||||
call LoadCurrentBoxData
|
||||
jr c, .badsum
|
||||
call LoadSAV2
|
||||
call LoadPartyAndDexData
|
||||
jr c, .badsum
|
||||
ld a, $2 ; good checksum
|
||||
jr .goodsum
|
||||
jr .done
|
||||
.badsum
|
||||
ld hl, wStatusFlags5
|
||||
push hl
|
||||
|
|
@ -22,7 +21,7 @@ LoadSAV:
|
|||
pop hl
|
||||
res BIT_NO_TEXT_DELAY, [hl]
|
||||
ld a, $1 ; bad checksum
|
||||
.goodsum
|
||||
.done
|
||||
ld [wSaveFileStatus], a
|
||||
ret
|
||||
|
||||
|
|
@ -30,7 +29,7 @@ FileDataDestroyedText:
|
|||
text_far _FileDataDestroyedText
|
||||
text_end
|
||||
|
||||
LoadSAV0:
|
||||
LoadMainData:
|
||||
call EnableSRAM
|
||||
ld a, BANK("Save Data")
|
||||
ld [rRAMB], a
|
||||
|
|
@ -39,22 +38,22 @@ LoadSAV0:
|
|||
vc_hook Unknown_save_limit
|
||||
ld hl, sGameData
|
||||
ld bc, sGameDataEnd - sGameData
|
||||
call SAVCheckSum
|
||||
call CalcCheckSum
|
||||
ld c, a
|
||||
ld a, [sMainDataCheckSum]
|
||||
cp c
|
||||
jp z, .checkSumsMatched
|
||||
jp z, .checkSumMatched
|
||||
|
||||
; If the computed checksum didn't match the saved on, try again.
|
||||
ld hl, sGameData
|
||||
ld bc, sGameDataEnd - sGameData
|
||||
call SAVCheckSum
|
||||
call CalcCheckSum
|
||||
ld c, a
|
||||
ld a, [sMainDataCheckSum]
|
||||
cp c
|
||||
jp nz, SAVBadCheckSum
|
||||
jp nz, CheckSumFailed
|
||||
|
||||
.checkSumsMatched
|
||||
.checkSumMatched
|
||||
ld hl, sPlayerName
|
||||
ld de, wPlayerName
|
||||
ld bc, NAME_LENGTH
|
||||
|
|
@ -71,42 +70,45 @@ LoadSAV0:
|
|||
call CopyData
|
||||
ld a, [sTileAnimations]
|
||||
ldh [hTileAnimations], a
|
||||
|
||||
; this part is redundant, LoadCurrentBoxData is always called next
|
||||
ld hl, sCurBoxData
|
||||
ld de, wBoxDataStart
|
||||
ld bc, wBoxDataEnd - wBoxDataStart
|
||||
call CopyData
|
||||
and a
|
||||
jp SAVGoodChecksum
|
||||
|
||||
LoadSAV1:
|
||||
and a
|
||||
jp GoodCheckSum
|
||||
|
||||
LoadCurrentBoxData:
|
||||
call EnableSRAM
|
||||
ld a, BANK("Save Data")
|
||||
ld [rRAMB], a
|
||||
ld hl, sGameData
|
||||
ld bc, sGameDataEnd - sGameData
|
||||
call SAVCheckSum
|
||||
call CalcCheckSum
|
||||
ld c, a
|
||||
ld a, [sMainDataCheckSum]
|
||||
cp c
|
||||
jr nz, SAVBadCheckSum
|
||||
jr nz, CheckSumFailed
|
||||
ld hl, sCurBoxData
|
||||
ld de, wBoxDataStart
|
||||
ld bc, wBoxDataEnd - wBoxDataStart
|
||||
call CopyData
|
||||
and a
|
||||
jp SAVGoodChecksum
|
||||
jp GoodCheckSum
|
||||
|
||||
LoadSAV2:
|
||||
LoadPartyAndDexData:
|
||||
call EnableSRAM
|
||||
ld a, BANK("Save Data")
|
||||
ld [rRAMB], a
|
||||
ld hl, sGameData
|
||||
ld bc, sGameDataEnd - sGameData
|
||||
call SAVCheckSum
|
||||
call CalcCheckSum
|
||||
ld c, a
|
||||
ld a, [sMainDataCheckSum]
|
||||
cp c
|
||||
jp nz, SAVBadCheckSum
|
||||
jp nz, CheckSumFailed
|
||||
ld hl, sPartyData
|
||||
ld de, wPartyDataStart
|
||||
ld bc, wPartyDataEnd - wPartyDataStart
|
||||
|
|
@ -116,27 +118,29 @@ LoadSAV2:
|
|||
ld bc, wPokedexSeenEnd - wPokedexOwned
|
||||
call CopyData
|
||||
and a
|
||||
jp SAVGoodChecksum
|
||||
jp GoodCheckSum
|
||||
|
||||
SAVBadCheckSum:
|
||||
CheckSumFailed:
|
||||
scf
|
||||
; fallthrough
|
||||
|
||||
SAVGoodChecksum:
|
||||
GoodCheckSum:
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
LoadSAVIgnoreBadCheckSum:
|
||||
; unused function that loads save data and ignores bad checksums
|
||||
call LoadSAV0
|
||||
call LoadSAV1
|
||||
jp LoadSAV2
|
||||
TryLoadSaveFileIgnoreChecksum: ; unreferenced
|
||||
; don't update wSaveFileStatus upon success or failure
|
||||
; don't display warning in case of failed checksum
|
||||
call LoadMainData
|
||||
call LoadCurrentBoxData
|
||||
jp LoadPartyAndDexData
|
||||
|
||||
SaveSAV:
|
||||
SaveMenu:
|
||||
farcall PrintSaveScreenText
|
||||
ld c, 10
|
||||
call DelayFrames
|
||||
ld hl, WouldYouLikeToSaveText
|
||||
call SaveSAVConfirm
|
||||
call SaveTheGame_YesOrNo
|
||||
and a ;|0 = Yes|1 = No|
|
||||
ret nz
|
||||
ld c, 10
|
||||
|
|
@ -144,14 +148,14 @@ SaveSAV:
|
|||
ld a, [wSaveFileStatus]
|
||||
cp $1
|
||||
jr z, .save
|
||||
call SAVCheckRandomID
|
||||
call CheckPreviousSaveFile
|
||||
jr z, .save
|
||||
ld hl, OlderFileWillBeErasedText
|
||||
call SaveSAVConfirm
|
||||
call SaveTheGame_YesOrNo
|
||||
and a
|
||||
ret nz
|
||||
.save
|
||||
call SaveSAVtoSRAM
|
||||
call SaveGameData
|
||||
ld hl, SavingText
|
||||
call PrintText
|
||||
ld c, 128
|
||||
|
|
@ -167,13 +171,13 @@ SaveSAV:
|
|||
call DelayFrames
|
||||
ret
|
||||
|
||||
SaveSAVConfirm:
|
||||
SaveTheGame_YesOrNo:
|
||||
call PrintText
|
||||
hlcoord 0, 7
|
||||
lb bc, 8, 1
|
||||
ld a, TWO_OPTION_MENU
|
||||
ld [wTextBoxID], a
|
||||
call DisplayTextBoxID ; yes/no menu
|
||||
call DisplayTextBoxID
|
||||
ld a, [wCurrentMenuItem]
|
||||
ret
|
||||
|
||||
|
|
@ -193,10 +197,11 @@ OlderFileWillBeErasedText:
|
|||
text_far _OlderFileWillBeErasedText
|
||||
text_end
|
||||
|
||||
SaveSAVtoSRAM0:
|
||||
SaveMainData:
|
||||
call EnableSRAM
|
||||
ld a, BANK("Save Data")
|
||||
ld [rRAMB], a
|
||||
|
||||
ld hl, wPlayerName
|
||||
ld de, sPlayerName
|
||||
ld bc, NAME_LENGTH
|
||||
|
|
@ -210,20 +215,22 @@ SaveSAVtoSRAM0:
|
|||
ld bc, wSpriteDataEnd - wSpriteDataStart
|
||||
call CopyData
|
||||
ld hl, wBoxDataStart
|
||||
|
||||
; this part is redundant, SaveCurrentBoxData is always called next
|
||||
ld de, sCurBoxData
|
||||
ld bc, wBoxDataEnd - wBoxDataStart
|
||||
call CopyData
|
||||
ldh a, [hTileAnimations]
|
||||
ld [sTileAnimations], a
|
||||
|
||||
ld hl, sGameData
|
||||
ld bc, sGameDataEnd - sGameData
|
||||
call SAVCheckSum
|
||||
call CalcCheckSum
|
||||
ld [sMainDataCheckSum], a
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
SaveSAVtoSRAM1:
|
||||
; stored pokémon
|
||||
SaveCurrentBoxData:
|
||||
call EnableSRAM
|
||||
ld a, BANK("Save Data")
|
||||
ld [rRAMB], a
|
||||
|
|
@ -233,12 +240,12 @@ SaveSAVtoSRAM1:
|
|||
call CopyData
|
||||
ld hl, sGameData
|
||||
ld bc, sGameDataEnd - sGameData
|
||||
call SAVCheckSum
|
||||
call CalcCheckSum
|
||||
ld [sMainDataCheckSum], a
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
SaveSAVtoSRAM2:
|
||||
SavePartyAndDexData:
|
||||
call EnableSRAM
|
||||
ld a, BANK("Save Data")
|
||||
ld [rRAMB], a
|
||||
|
|
@ -259,19 +266,19 @@ SaveSAVtoSRAM2:
|
|||
ld [de], a
|
||||
ld hl, sGameData
|
||||
ld bc, sGameDataEnd - sGameData
|
||||
call SAVCheckSum
|
||||
call CalcCheckSum
|
||||
ld [sMainDataCheckSum], a
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
SaveSAVtoSRAM::
|
||||
SaveGameData::
|
||||
ld a, $2
|
||||
ld [wSaveFileStatus], a
|
||||
call SaveSAVtoSRAM0
|
||||
call SaveSAVtoSRAM1
|
||||
jp SaveSAVtoSRAM2
|
||||
call SaveMainData
|
||||
call SaveCurrentBoxData
|
||||
jp SavePartyAndDexData
|
||||
|
||||
SAVCheckSum:
|
||||
CalcCheckSum:
|
||||
;Check Sum (result[1 byte] is complemented)
|
||||
ld d, 0
|
||||
.loop
|
||||
|
|
@ -294,7 +301,7 @@ CalcIndividualBoxCheckSums:
|
|||
push bc
|
||||
push de
|
||||
ld bc, wBoxDataEnd - wBoxDataStart
|
||||
call SAVCheckSum
|
||||
call CalcCheckSum
|
||||
pop de
|
||||
ld [de], a
|
||||
inc de
|
||||
|
|
@ -308,7 +315,7 @@ GetBoxSRAMLocation:
|
|||
; out: b = box SRAM bank, hl = pointer to start of box
|
||||
ld hl, BoxSRAMPointerTable
|
||||
ld a, [wCurrentBoxNum]
|
||||
and $7f
|
||||
and BOX_NUM_MASK
|
||||
cp NUM_BOXES / 2
|
||||
ld b, 2
|
||||
jr c, .next
|
||||
|
|
@ -373,7 +380,7 @@ ChangeBox::
|
|||
ld a, [hl]
|
||||
ld [de], a
|
||||
call RestoreMapTextPointer
|
||||
call SaveSAVtoSRAM
|
||||
call SaveGameData
|
||||
ld hl, wChangeBoxSavedMapTextPointer
|
||||
call SetMapTextPointer
|
||||
ret
|
||||
|
|
@ -392,7 +399,7 @@ CopyBoxToOrFromSRAM:
|
|||
call CopyData
|
||||
pop hl
|
||||
|
||||
; mark the memory that the box was copied from as am empty box
|
||||
; mark the source box as an empty box
|
||||
xor a
|
||||
ld [hli], a
|
||||
dec a
|
||||
|
|
@ -400,7 +407,7 @@ CopyBoxToOrFromSRAM:
|
|||
|
||||
ld hl, sBox1 ; sBox7
|
||||
ld bc, sBank2AllBoxesChecksum - sBox1
|
||||
call SAVCheckSum
|
||||
call CalcCheckSum
|
||||
ld [sBank2AllBoxesChecksum], a ; sBank3AllBoxesChecksum
|
||||
call CalcIndividualBoxCheckSums
|
||||
call DisableSRAM
|
||||
|
|
@ -420,7 +427,7 @@ DisplayChangeBoxMenu:
|
|||
xor a
|
||||
ld [wMenuWatchMovingOutOfBounds], a
|
||||
ld a, [wCurrentBoxNum]
|
||||
and $7f
|
||||
and BOX_NUM_MASK
|
||||
ld [wCurrentMenuItem], a
|
||||
ld [wLastMenuItem], a
|
||||
hlcoord 0, 0
|
||||
|
|
@ -439,7 +446,7 @@ DisplayChangeBoxMenu:
|
|||
ld hl, hUILayoutFlags
|
||||
res BIT_SINGLE_SPACED_LINES, [hl]
|
||||
ld a, [wCurrentBoxNum]
|
||||
and $7f
|
||||
and BOX_NUM_MASK
|
||||
cp 9
|
||||
jr c, .singleDigitBoxNum
|
||||
sub 9
|
||||
|
|
@ -458,7 +465,7 @@ DisplayChangeBoxMenu:
|
|||
hlcoord 18, 1
|
||||
ld de, wBoxMonCounts
|
||||
ld bc, SCREEN_WIDTH
|
||||
ld a, $c
|
||||
ld a, NUM_BOXES
|
||||
.loop
|
||||
push af
|
||||
ld a, [de]
|
||||
|
|
@ -525,7 +532,7 @@ EmptySRAMBoxesInBank:
|
|||
call EmptySRAMBox
|
||||
ld hl, sBox1 ; sBox7
|
||||
ld bc, sBank2AllBoxesChecksum - sBox1
|
||||
call SAVCheckSum
|
||||
call CalcCheckSum
|
||||
ld [sBank2AllBoxesChecksum], a ; sBank3AllBoxesChecksum
|
||||
call CalcIndividualBoxCheckSums
|
||||
ret
|
||||
|
|
@ -552,7 +559,7 @@ GetMonCountsForAllBoxes:
|
|||
|
||||
; copy the count for the current box from WRAM
|
||||
ld a, [wCurrentBoxNum]
|
||||
and $7f
|
||||
and BOX_NUM_MASK
|
||||
ld c, a
|
||||
ld b, 0
|
||||
add hl, bc
|
||||
|
|
@ -576,10 +583,10 @@ GetMonCountsForBoxesInBank:
|
|||
ld [hli], a
|
||||
ret
|
||||
|
||||
SAVCheckRandomID:
|
||||
; checks if Sav file is the same by checking player's name 1st letter
|
||||
; and the two random numbers generated at game beginning
|
||||
; (which are stored at wPlayerID)s
|
||||
; check if we're trying to save over a different playthrough
|
||||
; return result in zero flag
|
||||
; z set: a valid save file was found, and saved PlayerID is different from wPlayerID
|
||||
CheckPreviousSaveFile:
|
||||
call EnableSRAM
|
||||
ld a, BANK("Save Data")
|
||||
ld [rRAMB], a
|
||||
|
|
@ -588,11 +595,11 @@ SAVCheckRandomID:
|
|||
jr z, .next
|
||||
ld hl, sGameData
|
||||
ld bc, sGameDataEnd - sGameData
|
||||
call SAVCheckSum
|
||||
call CalcCheckSum
|
||||
ld c, a
|
||||
ld a, [sMainDataCheckSum]
|
||||
cp c
|
||||
jr nz, .next
|
||||
jr nz, .next ; return z set if save data is corrupted
|
||||
ld hl, sMainData + (wPlayerID - wMainDataStart) ; player ID
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
|
|
@ -603,8 +610,9 @@ SAVCheckRandomID:
|
|||
ld a, [wPlayerID + 1]
|
||||
cp h
|
||||
.next
|
||||
ld a, $00
|
||||
ld a, BMODE_SIMPLE
|
||||
ld [rBMODE], a
|
||||
ASSERT RAMG_SRAM_DISABLE == BMODE_SIMPLE
|
||||
ld [rRAMG], a
|
||||
ret
|
||||
|
||||
|
|
@ -651,19 +659,20 @@ HallOfFame_Copy:
|
|||
call DisableSRAM
|
||||
ret
|
||||
|
||||
ClearSAV:
|
||||
; Fill SRAM with $ff, erasing save data. Used by DoClearSaveDialogue
|
||||
ClearAllSRAMBanks:
|
||||
call EnableSRAM
|
||||
ld a, $4
|
||||
.loop
|
||||
dec a
|
||||
push af
|
||||
call PadSRAM_FF
|
||||
call .PadSRAM_FF
|
||||
pop af
|
||||
jr nz, .loop
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
PadSRAM_FF:
|
||||
.PadSRAM_FF
|
||||
ld [rRAMB], a
|
||||
ld hl, STARTOF(SRAM)
|
||||
ld bc, SIZEOF(SRAM)
|
||||
|
|
@ -678,7 +687,8 @@ EnableSRAM:
|
|||
ret
|
||||
|
||||
DisableSRAM:
|
||||
ld a, 0
|
||||
ld a, BMODE_SIMPLE ; preserve flags
|
||||
ld [rBMODE], a
|
||||
ASSERT RAMG_SRAM_DISABLE == BMODE_SIMPLE
|
||||
ld [rRAMG], a
|
||||
ret
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
StartMenu_Pokedex::
|
||||
predef ShowPokedexMenu
|
||||
call LoadScreenTilesFromBuffer2 ; restore saved screen
|
||||
call LoadScreenTilesFromBuffer2
|
||||
call Delay3
|
||||
call LoadGBPal
|
||||
call UpdateSprites
|
||||
|
|
@ -63,7 +63,7 @@ StartMenu_Pokemon::
|
|||
ld [hl], a
|
||||
call HandleMenuInput
|
||||
push af
|
||||
call LoadScreenTilesFromBuffer1 ; restore saved screen
|
||||
call LoadScreenTilesFromBuffer1
|
||||
pop af
|
||||
bit B_PAD_B, a
|
||||
jp nz, .loop
|
||||
|
|
@ -117,7 +117,7 @@ StartMenu_Pokemon::
|
|||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
ld a, [wObtainedBadges] ; badges obtained
|
||||
ld a, [wObtainedBadges]
|
||||
jp hl
|
||||
.outOfBattleMovePointers
|
||||
dw .cut
|
||||
|
|
@ -303,7 +303,7 @@ StartMenu_Pokemon::
|
|||
; writes a blank tile to all possible menu cursor positions on the party menu
|
||||
ErasePartyMenuCursors::
|
||||
hlcoord 0, 1
|
||||
ld bc, 2 * 20 ; menu cursor positions are 2 rows apart
|
||||
ld bc, 2 * SCREEN_WIDTH ; menu cursor positions are 2 rows apart
|
||||
ld a, 6 ; 6 menu cursor positions
|
||||
.loop
|
||||
ld [hl], " "
|
||||
|
|
@ -313,7 +313,7 @@ ErasePartyMenuCursors::
|
|||
ret
|
||||
|
||||
ItemMenuLoop:
|
||||
call LoadScreenTilesFromBuffer2DisableBGTransfer ; restore saved screen
|
||||
call LoadScreenTilesFromBuffer2DisableBGTransfer
|
||||
call RunDefaultPaletteCommand
|
||||
|
||||
StartMenu_Item::
|
||||
|
|
@ -340,7 +340,7 @@ StartMenu_Item::
|
|||
ld [wBagSavedMenuItem], a
|
||||
jr nc, .choseItem
|
||||
.exitMenu
|
||||
call LoadScreenTilesFromBuffer2 ; restore saved screen
|
||||
call LoadScreenTilesFromBuffer2
|
||||
call LoadTextBoxTilePatterns
|
||||
call UpdateSprites
|
||||
jp RedisplayStartMenu
|
||||
|
|
@ -380,7 +380,7 @@ StartMenu_Item::
|
|||
bit B_PAD_B, a
|
||||
jr z, .useOrTossItem
|
||||
jp ItemMenuLoop
|
||||
.useOrTossItem ; if the player made the choice to use or toss the item
|
||||
.useOrTossItem
|
||||
ld a, [wCurItem]
|
||||
ld [wNamedObjectIndex], a
|
||||
call GetItemName
|
||||
|
|
@ -476,14 +476,14 @@ StartMenu_TrainerInfo::
|
|||
xor a
|
||||
ldh [hTileAnimations], a
|
||||
call DrawTrainerInfo
|
||||
predef DrawBadges ; draw badges
|
||||
predef DrawBadges
|
||||
ld b, SET_PAL_TRAINER_CARD
|
||||
call RunPaletteCommand
|
||||
call GBPalNormal
|
||||
call WaitForTextScrollButtonPress ; wait for button press
|
||||
call WaitForTextScrollButtonPress
|
||||
call GBPalWhiteOut
|
||||
call LoadFontTilePatterns
|
||||
call LoadScreenTilesFromBuffer2 ; restore saved screen
|
||||
call LoadScreenTilesFromBuffer2
|
||||
call RunDefaultPaletteCommand
|
||||
call ReloadMapData
|
||||
farcall DrawStartMenu ; XXX what difference does this make?
|
||||
|
|
@ -507,7 +507,7 @@ DrawTrainerInfo:
|
|||
ld de, vChars2 tile $00
|
||||
ld bc, $1c tiles
|
||||
call CopyData
|
||||
ld hl, TrainerInfoTextBoxTileGraphics ; trainer info text box tile patterns
|
||||
ld hl, TrainerInfoTextBoxTileGraphics
|
||||
ld de, vChars2 tile $77
|
||||
ld bc, 8 tiles
|
||||
push bc
|
||||
|
|
@ -517,10 +517,10 @@ DrawTrainerInfo:
|
|||
ld bc, $17 tiles
|
||||
call TrainerInfo_FarCopyData
|
||||
pop bc
|
||||
ld hl, BadgeNumbersTileGraphics ; badge number tile patterns
|
||||
ld hl, BadgeNumbersTileGraphics
|
||||
ld de, vChars1 tile $58
|
||||
call TrainerInfo_FarCopyData
|
||||
ld hl, GymLeaderFaceAndBadgeTileGraphics ; gym leader face and badge tile patterns
|
||||
ld hl, GymLeaderFaceAndBadgeTileGraphics
|
||||
ld de, vChars2 tile $20
|
||||
ld bc, 8 * 8 tiles
|
||||
ld a, BANK(GymLeaderFaceAndBadgeTileGraphics)
|
||||
|
|
@ -573,12 +573,12 @@ DrawTrainerInfo:
|
|||
ld c, 3 | LEADING_ZEROES | LEFT_ALIGN | MONEY_SIGN
|
||||
call PrintBCDNumber
|
||||
hlcoord 9, 6
|
||||
ld de, wPlayTimeHours ; hours
|
||||
ld de, wPlayTimeHours
|
||||
lb bc, LEFT_ALIGN | 1, 3
|
||||
call PrintNumber
|
||||
ld [hl], $d6 ; colon tile ID
|
||||
inc hl
|
||||
ld de, wPlayTimeMinutes ; minutes
|
||||
ld de, wPlayTimeMinutes
|
||||
lb bc, LEADING_ZEROES | 1, 2
|
||||
jp PrintNumber
|
||||
|
||||
|
|
@ -660,8 +660,8 @@ StartMenu_SaveReset::
|
|||
ld a, [wStatusFlags4]
|
||||
bit BIT_LINK_CONNECTED, a
|
||||
jp nz, Init
|
||||
predef SaveSAV ; save the game
|
||||
call LoadScreenTilesFromBuffer2 ; restore saved screen
|
||||
predef SaveMenu
|
||||
call LoadScreenTilesFromBuffer2
|
||||
jp HoldTextDisplayOpen
|
||||
|
||||
StartMenu_Option::
|
||||
|
|
@ -670,7 +670,7 @@ StartMenu_Option::
|
|||
call ClearScreen
|
||||
call UpdateSprites
|
||||
callfar DisplayOptionMenu
|
||||
call LoadScreenTilesFromBuffer2 ; restore saved screen
|
||||
call LoadScreenTilesFromBuffer2
|
||||
call LoadTextBoxTilePatterns
|
||||
call UpdateSprites
|
||||
jp RedisplayStartMenu
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ AnimateHallOfFame:
|
|||
call LoadTextBoxTilePatterns
|
||||
call DisableLCD
|
||||
ld hl, vBGMap0
|
||||
ld bc, $800
|
||||
ld bc, 2 * TILEMAP_AREA
|
||||
ld a, " "
|
||||
call FillMemory
|
||||
call EnableLCD
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ DoClearSaveDialogue:
|
|||
ld a, [wCurrentMenuItem]
|
||||
and a
|
||||
jp z, Init
|
||||
farcall ClearSAV
|
||||
farcall ClearAllSRAMBanks
|
||||
jp Init
|
||||
|
||||
ClearSaveDataText:
|
||||
|
|
|
|||
|
|
@ -240,7 +240,6 @@ ENDC
|
|||
.doClearSaveDialogue
|
||||
farjp DoClearSaveDialogue
|
||||
|
||||
|
||||
TitleScreenCopyTileMapToVRAM:
|
||||
ldh [hAutoBGTransferDest + 1], a
|
||||
jp Delay3
|
||||
|
|
@ -283,7 +282,6 @@ DoTitleScreenFunction:
|
|||
ld l, a
|
||||
jp hl
|
||||
|
||||
|
||||
.Jumptable:
|
||||
dw .Nop
|
||||
dw .BlinkHalf
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@ LoadTradingGFXAndMonNames:
|
|||
ld a, BANK(TradingAnimationGraphics2)
|
||||
call FarCopyData
|
||||
ld hl, vBGMap0
|
||||
ld bc, $800
|
||||
ld bc, 2 * TILEMAP_AREA
|
||||
ld a, " "
|
||||
call FillMemory
|
||||
call ClearSprites
|
||||
|
|
@ -226,7 +226,7 @@ Trade_Cleanup:
|
|||
ret
|
||||
|
||||
Trade_ShowPlayerMon:
|
||||
ld a, %10101011
|
||||
ld a, LCDC_ON | LCDC_WIN_9800 | LCDC_WIN_ON | LCDC_BLOCK21 | LCDC_BG_9C00 | LCDC_OBJ_8 | LCDC_OBJ_ON | LCDC_BG_ON
|
||||
ldh [rLCDC], a
|
||||
ld a, $50
|
||||
ldh [hWY], a
|
||||
|
|
@ -281,7 +281,7 @@ Trade_DrawOpenEndOfLinkCable:
|
|||
ld a, $a0
|
||||
ldh [hSCX], a
|
||||
call DelayFrame
|
||||
ld a, %10001011
|
||||
ld a, LCDC_ON | LCDC_WIN_9800 | LCDC_WIN_OFF | LCDC_BLOCK21 | LCDC_BG_9C00 | LCDC_OBJ_8 | LCDC_OBJ_ON | LCDC_BG_ON
|
||||
ldh [rLCDC], a
|
||||
hlcoord 6, 2
|
||||
ld b, TILEMAP_LINK_CABLE
|
||||
|
|
@ -341,7 +341,7 @@ Trade_AnimateBallEnteringLinkCable:
|
|||
ld a, $1
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
call ClearScreen
|
||||
ld b, $98
|
||||
ld b, HIGH(vBGMap0)
|
||||
call CopyScreenTileBufferToVRAM
|
||||
call Delay3
|
||||
xor a
|
||||
|
|
@ -457,7 +457,7 @@ Trade_InitGameboyTransferGfx:
|
|||
ldh [hAutoBGTransferEnabled], a
|
||||
call Trade_LoadMonPartySpriteGfx
|
||||
call DelayFrame
|
||||
ld a, %10101011
|
||||
ld a, LCDC_ON | LCDC_WIN_9800 | LCDC_WIN_ON | LCDC_BLOCK21 | LCDC_BG_9C00 | LCDC_OBJ_8 | LCDC_OBJ_ON | LCDC_BG_ON
|
||||
ldh [rLCDC], a
|
||||
xor a
|
||||
ldh [hSCX], a
|
||||
|
|
@ -761,7 +761,7 @@ Trade_ShowClearedWindow:
|
|||
ld a, $1
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
call ClearScreen
|
||||
ld a, %11100011
|
||||
ld a, LCDC_DEFAULT
|
||||
ldh [rLCDC], a
|
||||
ld a, $7
|
||||
ldh [rWX], a
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ BillsPCMenu:
|
|||
lb bc, 2, 9
|
||||
call TextBoxBorder
|
||||
ld a, [wCurrentBoxNum]
|
||||
and $7f
|
||||
and BOX_NUM_MASK
|
||||
cp 9
|
||||
jr c, .singleDigitBoxNum
|
||||
; two digit box num
|
||||
|
|
@ -254,7 +254,7 @@ BillsPCDeposit:
|
|||
call WaitForSoundToFinish
|
||||
ld hl, wBoxNumString
|
||||
ld a, [wCurrentBoxNum]
|
||||
and $7f
|
||||
and BOX_NUM_MASK
|
||||
cp 9
|
||||
jr c, .singleDigitBoxNum
|
||||
sub 9
|
||||
|
|
@ -582,6 +582,7 @@ JustAMomentText::
|
|||
text_far _JustAMomentText
|
||||
text_end
|
||||
|
||||
UnusedOpenBillsPC: ; unreferenced
|
||||
ld a, [wSpritePlayerStateData1FacingDirection]
|
||||
cp SPRITE_FACING_UP
|
||||
ret nz
|
||||
|
|
|
|||
|
|
@ -441,7 +441,7 @@ StatusScreen2:
|
|||
ld a, $1
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
call Delay3
|
||||
call WaitForTextScrollButtonPress ; wait for button
|
||||
call WaitForTextScrollButtonPress
|
||||
pop af
|
||||
ldh [hTileAnimations], a
|
||||
ld hl, wStatusFlags2
|
||||
|
|
|
|||
|
|
@ -7,17 +7,6 @@ SoftReset::
|
|||
|
||||
Init::
|
||||
; Program init.
|
||||
|
||||
; * LCD enabled
|
||||
; * Window tile map at $9C00
|
||||
; * Window display enabled
|
||||
; * BG and window tile data at $8800
|
||||
; * BG tile map at $9800
|
||||
; * 8x8 OBJ size
|
||||
; * OBJ display enabled
|
||||
; * BG display enabled
|
||||
DEF LCDC_DEFAULT EQU LCDC_ON | LCDC_WIN_9C00 | LCDC_WIN_ON | LCDC_BLOCK21 | LCDC_BG_9800 | LCDC_OBJ_8 | LCDC_OBJ_ON | LCDC_BG_ON
|
||||
|
||||
di
|
||||
|
||||
xor a
|
||||
|
|
@ -102,7 +91,7 @@ DEF LCDC_DEFAULT EQU LCDC_ON | LCDC_WIN_9C00 | LCDC_WIN_ON | LCDC_BLOCK21 | LCDC
|
|||
ld a, BANK(SFX_Shooting_Star)
|
||||
ld [wAudioROMBank], a
|
||||
ld [wAudioSavedROMBank], a
|
||||
ld a, $9c
|
||||
ld a, HIGH(vBGMap1)
|
||||
ldh [hAutoBGTransferDest + 1], a
|
||||
xor a
|
||||
ldh [hAutoBGTransferDest], a
|
||||
|
|
|
|||
|
|
@ -30,27 +30,25 @@ TextScript_ItemStoragePC::
|
|||
call SaveScreenTilesToBuffer2
|
||||
ld b, BANK(PlayerPC)
|
||||
ld hl, PlayerPC
|
||||
jr bankswitchAndContinue
|
||||
jr BankswitchAndContinue
|
||||
|
||||
TextScript_BillsPC::
|
||||
call SaveScreenTilesToBuffer2
|
||||
ld b, BANK(BillsPC_)
|
||||
ld hl, BillsPC_
|
||||
jr bankswitchAndContinue
|
||||
jr BankswitchAndContinue
|
||||
|
||||
TextScript_GameCornerPrizeMenu::
|
||||
; XXX find a better name for this function
|
||||
; special_F7
|
||||
ld b, BANK(CeladonPrizeMenu)
|
||||
ld hl, CeladonPrizeMenu
|
||||
bankswitchAndContinue::
|
||||
BankswitchAndContinue::
|
||||
call Bankswitch
|
||||
jp HoldTextDisplayOpen ; continue to main text-engine function
|
||||
|
||||
TextScript_PokemonCenterPC::
|
||||
ld b, BANK(ActivatePC)
|
||||
ld hl, ActivatePC
|
||||
jr bankswitchAndContinue
|
||||
jr BankswitchAndContinue
|
||||
|
||||
StartSimulatingJoypadStates::
|
||||
xor a
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ ENDM
|
|||
dict TX_SCRIPT_PRIZE_VENDOR, TextScript_GameCornerPrizeMenu
|
||||
dict2 TX_SCRIPT_CABLE_CLUB_RECEPTIONIST, callfar CableClubNPC
|
||||
|
||||
call PrintText_NoCreatingTextBox ; display the text
|
||||
call PrintText_NoCreatingTextBox
|
||||
ld a, [wDoNotWaitForButtonPressAfterDisplayingText]
|
||||
and a
|
||||
jr nz, HoldTextDisplayOpen
|
||||
|
|
@ -92,7 +92,7 @@ AfterDisplayingTextID::
|
|||
ld a, [wEnteringCableClub]
|
||||
and a
|
||||
jr nz, HoldTextDisplayOpen
|
||||
call WaitForTextScrollButtonPress ; wait for a button press after displaying all the text
|
||||
call WaitForTextScrollButtonPress
|
||||
|
||||
; loop to hold the dialogue box open as long as the player keeps holding down the A button
|
||||
HoldTextDisplayOpen::
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ AutoBgMapTransfer::
|
|||
ld h, a
|
||||
ldh a, [hAutoBGTransferDest]
|
||||
ld l, a
|
||||
ld de, 12 * 32
|
||||
ld de, 12 * TILEMAP_WIDTH
|
||||
add hl, de
|
||||
xor a ; TRANSFERTOP
|
||||
jr .doTransfer
|
||||
|
|
@ -156,7 +156,7 @@ AutoBgMapTransfer::
|
|||
ld h, a
|
||||
ldh a, [hAutoBGTransferDest]
|
||||
ld l, a
|
||||
ld de, 6 * 32
|
||||
ld de, 6 * TILEMAP_WIDTH
|
||||
add hl, de
|
||||
ld a, TRANSFERBOTTOM
|
||||
.doTransfer
|
||||
|
|
|
|||
|
|
@ -27,15 +27,19 @@ MACRO table_width
|
|||
ENDM
|
||||
|
||||
MACRO assert_table_length
|
||||
DEF x = \1
|
||||
ASSERT x * CURRENT_TABLE_WIDTH == @ - {CURRENT_TABLE_START}, \
|
||||
"{CURRENT_TABLE_START}: expected {d:x} entries, each {d:CURRENT_TABLE_WIDTH} bytes"
|
||||
DEF w = \1
|
||||
DEF x = w * CURRENT_TABLE_WIDTH
|
||||
DEF y = @ - {CURRENT_TABLE_START}
|
||||
ASSERT x == y, "{CURRENT_TABLE_START}: expected {d:w} entries, each {d:CURRENT_TABLE_WIDTH} " ++ \
|
||||
"bytes, for {d:x} total; but got {d:y} bytes"
|
||||
ENDM
|
||||
|
||||
MACRO assert_max_table_length
|
||||
DEF x = \1
|
||||
ASSERT x * CURRENT_TABLE_WIDTH >= @ - {CURRENT_TABLE_START}, \
|
||||
"{CURRENT_TABLE_START}: expected a maximum of {d:x} entries, each {d:CURRENT_TABLE_WIDTH} bytes"
|
||||
DEF w = \1
|
||||
DEF x = w * CURRENT_TABLE_WIDTH
|
||||
DEF y = @ - {CURRENT_TABLE_START}
|
||||
ASSERT x >= y, "{CURRENT_TABLE_START}: expected a maximum of {d:w} entries, each " ++ \
|
||||
"{d:CURRENT_TABLE_WIDTH} bytes, for maximum {d:x} total; but got {d:y} bytes"
|
||||
ENDM
|
||||
|
||||
MACRO list_start
|
||||
|
|
@ -134,12 +138,13 @@ MACRO def_grass_wildmons
|
|||
ENDM
|
||||
|
||||
MACRO end_grass_wildmons
|
||||
DEF x = @ - {CURRENT_GRASS_WILDMONS_LABEL}
|
||||
IF CURRENT_GRASS_WILDMONS_RATE == 0
|
||||
ASSERT 1 == @ - {CURRENT_GRASS_WILDMONS_LABEL}, \
|
||||
"def_grass_wildmons {d:CURRENT_GRASS_WILDMONS_RATE}: expected 1 byte"
|
||||
ASSERT 1 == x, \
|
||||
"def_grass_wildmons {d:CURRENT_GRASS_WILDMONS_RATE}: expected 1 byte, got {d:x}"
|
||||
ELSE
|
||||
ASSERT WILDDATA_LENGTH == @ - {CURRENT_GRASS_WILDMONS_LABEL}, \
|
||||
"def_grass_wildmons {d:CURRENT_GRASS_WILDMONS_RATE}: expected {d:WILDDATA_LENGTH} bytes"
|
||||
ASSERT WILDDATA_LENGTH == x, \
|
||||
"def_grass_wildmons {d:CURRENT_GRASS_WILDMONS_RATE}: expected {d:WILDDATA_LENGTH} bytes, got {d:x}"
|
||||
ENDC
|
||||
ENDM
|
||||
|
||||
|
|
@ -152,11 +157,12 @@ MACRO def_water_wildmons
|
|||
ENDM
|
||||
|
||||
MACRO end_water_wildmons
|
||||
DEF x = @ - {CURRENT_WATER_WILDMONS_LABEL}
|
||||
IF CURRENT_WATER_WILDMONS_RATE == 0
|
||||
ASSERT 1 == @ - {CURRENT_WATER_WILDMONS_LABEL}, \
|
||||
"def_water_wildmons {d:CURRENT_WATER_WILDMONS_RATE}: expected 1 byte"
|
||||
ASSERT 1 == x, \
|
||||
"def_water_wildmons {d:CURRENT_WATER_WILDMONS_RATE}: expected 1 byte, got {d:x}"
|
||||
ELSE
|
||||
ASSERT WILDDATA_LENGTH == @ - {CURRENT_WATER_WILDMONS_LABEL}, \
|
||||
"def_water_wildmons {d:CURRENT_WATER_WILDMONS_RATE}: expected {d:WILDDATA_LENGTH} bytes"
|
||||
ASSERT WILDDATA_LENGTH == x, \
|
||||
"def_water_wildmons {d:CURRENT_WATER_WILDMONS_RATE}: expected {d:WILDDATA_LENGTH} bytes, got {d:x}"
|
||||
ENDC
|
||||
ENDM
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ MACRO tmhm
|
|||
ENDR
|
||||
; set bits of bytes
|
||||
REPT _NARG
|
||||
ASSERT FATAL, STRFIND("\1", " ") == -1, "Invalid move: \1"
|
||||
IF DEF(\1_TMNUM)
|
||||
DEF n = (\1_TMNUM - 1) / 8
|
||||
DEF i = (\1_TMNUM - 1) % 8
|
||||
|
|
@ -81,9 +82,21 @@ MACRO dab ; dwb address, bank
|
|||
ENDR
|
||||
ENDM
|
||||
|
||||
MACRO dname
|
||||
IF _NARG == 2
|
||||
DEF n = \2
|
||||
ELSE
|
||||
DEF n = NAME_LENGTH - 1
|
||||
ENDC
|
||||
ASSERT STRFIND(\1, "@") == -1, "String terminator \"@\" in name: \1"
|
||||
ASSERT CHARLEN(\1) <= n, "Name longer than {d:n} characters: \1"
|
||||
db \1
|
||||
ds n - CHARLEN(\1), "@"
|
||||
ENDM
|
||||
|
||||
MACRO sine_table
|
||||
; \1 samples of sin(x) from x=0 to x<0.5 turns (pi radians)
|
||||
for x, \1
|
||||
FOR x, \1
|
||||
dw sin(x * 0.5 / (\1))
|
||||
endr
|
||||
ENDR
|
||||
ENDM
|
||||
|
|
|
|||
|
|
@ -53,8 +53,8 @@ CeruleanBadgeHouseMiddleAgedManText:
|
|||
jp TextScriptEnd
|
||||
|
||||
.BadgeItemList:
|
||||
table_width 1
|
||||
db NUM_BADGES ; #
|
||||
table_width 1
|
||||
db BOULDERBADGE
|
||||
db CASCADEBADGE
|
||||
db THUNDERBADGE
|
||||
|
|
@ -63,8 +63,8 @@ CeruleanBadgeHouseMiddleAgedManText:
|
|||
db MARSHBADGE
|
||||
db VOLCANOBADGE
|
||||
db EARTHBADGE
|
||||
assert_table_length NUM_BADGES
|
||||
db -1 ; end
|
||||
assert_table_length NUM_BADGES + 2
|
||||
|
||||
.Text:
|
||||
text_far _CeruleanBadgeHouseMiddleAgedManText
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ HallOfFameResetEventsAndSaveScript:
|
|||
ld [wHallOfFameCurScript], a
|
||||
ld a, PALLET_TOWN
|
||||
ld [wLastBlackoutMap], a
|
||||
farcall SaveSAVtoSRAM
|
||||
farcall SaveGameData
|
||||
ld b, 5
|
||||
.delayLoop
|
||||
ld c, 600 / 5
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ PewterCityYoungsterShowsPlayerGymScript:
|
|||
call DisplayTextID
|
||||
ld a, $3c
|
||||
ldh [hSpriteScreenYCoord], a
|
||||
ld a, $40
|
||||
ld a, $40 ; BUG: should load $50, using $40 causes sprite misalignment
|
||||
ldh [hSpriteScreenXCoord], a
|
||||
ld a, 22
|
||||
ldh [hSpriteMapYCoord], a
|
||||
|
|
|
|||
|
|
@ -16,30 +16,30 @@ MansionB1FCheckReplaceSwitchDoorBlocks:
|
|||
CheckEvent EVENT_MANSION_SWITCH_ON
|
||||
jr nz, .switchTurnedOn
|
||||
ld a, $e
|
||||
ld bc, $80d
|
||||
lb bc, 8, 13
|
||||
call Mansion2ReplaceBlock
|
||||
ld a, $e
|
||||
ld bc, $b06
|
||||
lb bc, 11, 6
|
||||
call Mansion2ReplaceBlock
|
||||
ld a, $5f
|
||||
ld bc, $304
|
||||
lb bc, 3, 4
|
||||
call Mansion2ReplaceBlock
|
||||
ld a, $54
|
||||
ld bc, $808
|
||||
lb bc, 8, 8
|
||||
call Mansion2ReplaceBlock
|
||||
ret
|
||||
.switchTurnedOn
|
||||
ld a, $2d
|
||||
ld bc, $80d
|
||||
lb bc, 8, 13
|
||||
call Mansion2ReplaceBlock
|
||||
ld a, $5f
|
||||
ld bc, $b06
|
||||
lb bc, 11, 6
|
||||
call Mansion2ReplaceBlock
|
||||
ld a, $e
|
||||
ld bc, $304
|
||||
lb bc, 3, 4
|
||||
call Mansion2ReplaceBlock
|
||||
ld a, $e
|
||||
ld bc, $808
|
||||
lb bc, 8, 8
|
||||
call Mansion2ReplaceBlock
|
||||
ret
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ SeafoamIslandsB4FDefaultScript:
|
|||
ld a, [wCoordIndex]
|
||||
cp $3
|
||||
jr nc, .only1UpInputNeeded
|
||||
ld a, NPC_MOVEMENT_UP
|
||||
ld a, PAD_UP
|
||||
ld [wSimulatedJoypadStatesEnd + 1], a
|
||||
ld a, 2
|
||||
jr .forcePlayerUpFromSurfExit
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ VermilionDockSSAnneLeavesScript:
|
|||
ld [wSpritePlayerStateData1ImageIndex], a
|
||||
ld c, 120
|
||||
call DelayFrames
|
||||
ld b, $9c
|
||||
ld b, HIGH(vBGMap1)
|
||||
call CopyScreenTileBufferToVRAM
|
||||
hlcoord 0, 10
|
||||
ld bc, SCREEN_WIDTH * 6
|
||||
|
|
@ -156,10 +156,10 @@ VermilionDock_EmitSmokePuff:
|
|||
|
||||
VermilionDockOAMBlock:
|
||||
; tile ID, attributes
|
||||
db $fc, $10
|
||||
db $fd, $10
|
||||
db $fe, $10
|
||||
db $ff, $10
|
||||
db $fc, OAM_PAL1
|
||||
db $fd, OAM_PAL1
|
||||
db $fe, OAM_PAL1
|
||||
db $ff, OAM_PAL1
|
||||
|
||||
VermilionDock_SyncScrollWithLY:
|
||||
ld h, d
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user