Disassemble duel engine

This commit is contained in:
ElectroDeoxys
2024-03-22 19:25:04 +00:00
parent e71450fa2a
commit 662e18b17a
46 changed files with 9787 additions and 1421 deletions
+2
View File
@@ -1,3 +1,4 @@
INCLUDE "constants/animation_constants.asm"
INCLUDE "constants/attack_animation_constants.asm"
INCLUDE "constants/card_constants.asm"
INCLUDE "constants/card_data_constants.asm"
@@ -29,5 +30,6 @@ INCLUDE "constants/text_constants.asm"
INCLUDE "constants/tilemap_constants.asm"
INCLUDE "constants/tileset_constants.asm"
INCLUDE "constants/var_constants.asm"
INCLUDE "constants/npc_constants.asm"
INCLUDE "constants/charmaps.asm"
+107
View File
@@ -0,0 +1,107 @@
const_def
; Normal animations
const DUEL_ANIM_NONE ; $00
const DUEL_ANIM_GLOW ; $01
const DUEL_ANIM_PARALYSIS ; $02
const DUEL_ANIM_SLEEP ; $03
const DUEL_ANIM_CONFUSION ; $04
const DUEL_ANIM_POISON ; $05
const DUEL_ANIM_SINGLE_HIT ; $06
const DUEL_ANIM_HIT ; $07
const DUEL_ANIM_BIG_HIT ; $08
const DUEL_ANIM_SHOW_DAMAGE ; $09
const DUEL_ANIM_THUNDER_SHOCK ; $0a
const DUEL_ANIM_LIGHTNING ; $0b
const DUEL_ANIM_BORDER_SPARK ; $0c
const DUEL_ANIM_BIG_LIGHTNING ; $0d
const DUEL_ANIM_SMALL_FLAME ; $0e
const DUEL_ANIM_BIG_FLAME ; $0f
const DUEL_ANIM_FIRE_SPIN ; $10
const DUEL_ANIM_DIVE_BOMB ; $11
const DUEL_ANIM_WATER_JETS ; $12
const DUEL_ANIM_WATER_GUN ; $13
const DUEL_ANIM_WHIRLPOOL ; $14
const DUEL_ANIM_HYDRO_PUMP ; $15
const DUEL_ANIM_BLIZZARD ; $16
const DUEL_ANIM_PSYCHIC ; $17
const DUEL_ANIM_LEER ; $18
const DUEL_ANIM_BEAM ; $19
const DUEL_ANIM_HYPER_BEAM ; $1a
const DUEL_ANIM_ROCK_THROW ; $1b
const DUEL_ANIM_STONE_BARRAGE ; $1c
const DUEL_ANIM_PUNCH ; $1d
const DUEL_ANIM_THUNDERPUNCH ; $1e
const DUEL_ANIM_FIRE_PUNCH ; $1f
const DUEL_ANIM_STRETCH_KICK ; $20
const DUEL_ANIM_SLASH ; $21
const DUEL_ANIM_WHIP ; $22
const DUEL_ANIM_SONICBOOM ; $23
const DUEL_ANIM_FURY_SWIPES ; $24
const DUEL_ANIM_DRILL ; $25
const DUEL_ANIM_POT_SMASH ; $26
const DUEL_ANIM_BONEMERANG ; $27
const DUEL_ANIM_SEISMIC_TOSS ; $28
const DUEL_ANIM_NEEDLES ; $29
const DUEL_ANIM_WHITE_GAS ; $2a
const DUEL_ANIM_POWDER ; $2b
const DUEL_ANIM_GOO ; $2c
const DUEL_ANIM_BUBBLES ; $2d
const DUEL_ANIM_STRING_SHOT ; $2e
const DUEL_ANIM_BOYFRIENDS ; $2f
const DUEL_ANIM_LURE ; $30
const DUEL_ANIM_TOXIC ; $31
const DUEL_ANIM_CONFUSE_RAY ; $32
const DUEL_ANIM_SING ; $33
const DUEL_ANIM_SUPERSONIC ; $34
const DUEL_ANIM_PETAL_DANCE ; $35
const DUEL_ANIM_PROTECT ; $36
const DUEL_ANIM_BARRIER ; $37
const DUEL_ANIM_SPEED ; $38
const DUEL_ANIM_WHIRLWIND ; $39
const DUEL_ANIM_CRY ; $3a
const DUEL_ANIM_QUESTION_MARK ; $3b
const DUEL_ANIM_SELFDESTRUCT ; $3c
const DUEL_ANIM_BIG_SELFDESTRUCT_1 ; $3d
const DUEL_ANIM_HEAL ; $3e
const DUEL_ANIM_DRAIN ; $3f
const DUEL_ANIM_DARK_GAS ; $40
const DUEL_ANIM_BIG_SELFDESTRUCT_2 ; $41
const DUEL_ANIM_UNUSED_42 ; $42
const DUEL_ANIM_UNUSED_43 ; $43
const DUEL_ANIM_BENCH_THUNDER ; $44
const DUEL_ANIM_QUICKFREEZE ; $45
const DUEL_ANIM_BENCH_GLOW ; $46
const DUEL_ANIM_FIREGIVER_START ; $47
const DUEL_ANIM_UNUSED_48 ; $48
const DUEL_ANIM_HEALING_WIND ; $49
const DUEL_ANIM_BENCH_WHIRLWIND ; $4a
const DUEL_ANIM_EXPAND ; $4b
const DUEL_ANIM_CAT_PUNCH ; $4c
const DUEL_ANIM_THUNDER_WAVE ; $4d
const DUEL_ANIM_FIREGIVER_PLAYER ; $4e
const DUEL_ANIM_FIREGIVER_OPP ; $4f
const DUEL_ANIM_UNUSED_50 ; $50
const DUEL_ANIM_PLAYER_SHUFFLE ; $51
const DUEL_ANIM_OPP_SHUFFLE ; $52
const DUEL_ANIM_BOTH_SHUFFLE ; $53
const DUEL_ANIM_UNUSED_54 ; $54
const DUEL_ANIM_BOTH_DRAW ; $55
const DUEL_ANIM_PLAYER_DRAW ; $56
const DUEL_ANIM_OPP_DRAW ; $57
const DUEL_ANIM_COIN_SPIN ; $58
const DUEL_ANIM_COIN_TOSS1 ; $59
const DUEL_ANIM_COIN_TOSS2 ; $5a
const DUEL_ANIM_COIN_TAILS ; $5b
const DUEL_ANIM_COIN_HEADS ; $5c
const DUEL_ANIM_DUEL_WIN ; $5d
const DUEL_ANIM_DUEL_LOSS ; $5e
const DUEL_ANIM_DUEL_DRAW ; $5f
const DUEL_ANIM_UNUSED_60 ; $60
DEF NUM_REGULAR_DUEL_ANIMS EQU const_value
; Animation duel screen constants (see wDuelAnimationScreen)
const_def
const DUEL_ANIM_SCREEN_MAIN_SCENE
const DUEL_ANIM_SCREEN_PLAYER_PLAY_AREA
const DUEL_ANIM_SCREEN_OPP_PLAY_AREA
+3 -3
View File
@@ -1,6 +1,6 @@
MACRO deck_const
IF const_value >= 3
DEF \1_ID EQU const_value - 3
IF const_value >= 2
DEF \1_ID EQU const_value - 2
ENDC
const \1
ENDM
@@ -8,7 +8,7 @@ ENDM
; Both *_DECK and *_DECK_ID constants are defined here.
; *_DECK constants are to be used with LoadDeck and related routines.
; *_DECK_ID constants are specific to be loaded into wOpponentDeckID.
; Always, *_DECK_ID = *_DECK - 3. UNKNOWN_POISON_STORM_DECK_ID,
; Always, *_DECK_ID = *_DECK - 2. UNKNOWN_POISON_STORM_DECK_ID,
; GB1_STRANGE_PSYSHOCK_DECK_ID and UNKNOWN_SAMS_PRACTICE_DECK_ID do not exist.
const_def
deck_const UNKNOWN_POISON_STORM_DECK ; $00
+96 -73
View File
@@ -1,5 +1,6 @@
DEF MAX_BENCH_POKEMON EQU 5
DEF MAX_PLAY_AREA_POKEMON EQU 6 ; arena + bench
DEF MAX_SMALL_BENCH_PLAY_AREA_POKEMON EQU 4 ; arena + bench
DEF MAX_HP EQU 120
DEF HP_BAR_LENGTH EQU MAX_HP / 10
@@ -25,67 +26,68 @@ DEF DUEL_WIN EQU $0
DEF DUEL_LOSS EQU $1
; wPlayerDuelVariables or wOpponentDuelVariables constants
DEF DUELVARS_CARD_LOCATIONS EQU $00 ; EQUS "LOW(wPlayerCardLocations)" ; 00
DEF DUELVARS_CARD_LOCATIONS EQUS "LOW(wPlayerCardLocations)" ; 00
DEF DUELVARS_PRIZE_CARDS EQUS "LOW(wPlayerPrizeCards)" ; 3c
DEF DUELVARS_HAND EQU $42 ; EQUS "LOW(wPlayerHand)" ; 42
DEF DUELVARS_DECK_CARDS EQU $7e ; EQUS "LOW(wPlayerDeckCards)" ; 7e
DEF DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK EQU $ba ; EQUS "LOW(wPlayerNumberOfCardsNotInDeck)" ; ba
DEF DUELVARS_ARENA_CARD EQU $bb ; EQUS "LOW(wPlayerArenaCard)" ; bb
DEF DUELVARS_HAND EQUS "LOW(wPlayerHand)" ; 42
DEF DUELVARS_DECK_CARDS EQUS "LOW(wPlayerDeckCards)" ; 7e
DEF DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK EQUS "LOW(wPlayerNumberOfCardsNotInDeck)" ; ba
DEF DUELVARS_ARENA_CARD EQUS "LOW(wPlayerArenaCard)" ; bb
DEF DUELVARS_BENCH EQUS "LOW(wPlayerBench)" ; bc
DEF DUELVARS_ARENA_CARD_FLAGS EQU $c2 ; EQUS "LOW(wPlayerArenaCardFlags)" ; c2
DEF DUELVARS_ARENA_CARD_HP EQU $c8 ; EQUS "LOW(wPlayerArenaCardHP)" ; c8
DEF DUELVARS_ARENA_CARD_FLAGS EQUS "LOW(wPlayerArenaCardFlags)" ; c2
DEF DUELVARS_ARENA_CARD_HP EQUS "LOW(wPlayerArenaCardHP)" ; c8
DEF DUELVARS_BENCH1_CARD_HP EQUS "LOW(wPlayerBench1CardHP)" ; c9
DEF DUELVARS_BENCH2_CARD_HP EQUS "LOW(wPlayerBench2CardHP)" ; ca
DEF DUELVARS_BENCH3_CARD_HP EQUS "LOW(wPlayerBench3CardHP)" ; cb
DEF DUELVARS_BENCH4_CARD_HP EQUS "LOW(wPlayerBench4CardHP)" ; cc
DEF DUELVARS_BENCH5_CARD_HP EQUS "LOW(wPlayerBench5CardHP)" ; cd
DEF DUELVARS_ARENA_CARD_STAGE EQU $ce ; EQUS "LOW(wPlayerArenaCardStage)" ; ce
DEF DUELVARS_ARENA_CARD_STAGE EQUS "LOW(wPlayerArenaCardStage)" ; ce
DEF DUELVARS_BENCH1_CARD_STAGE EQUS "LOW(wPlayerBench1CardStage)" ; cf
DEF DUELVARS_BENCH2_CARD_STAGE EQUS "LOW(wPlayerBench2CardStage)" ; d0
DEF DUELVARS_BENCH3_CARD_STAGE EQUS "LOW(wPlayerBench3CardStage)" ; d1
DEF DUELVARS_BENCH4_CARD_STAGE EQUS "LOW(wPlayerBench4CardStage)" ; d2
DEF DUELVARS_BENCH5_CARD_STAGE EQUS "LOW(wPlayerBench5CardStage)" ; d3
DEF DUELVARS_ARENA_CARD_CHANGED_TYPE EQU $d4 ; EQUS "LOW(wPlayerArenaCardChangedType)" ; d4
DEF DUELVARS_ARENA_CARD_CHANGED_TYPE EQUS "LOW(wPlayerArenaCardChangedType)" ; d4
DEF DUELVARS_BENCH1_CARD_CHANGED_COLOR EQUS "LOW(wPlayerBench1CardChangedType)" ; d5
DEF DUELVARS_BENCH2_CARD_CHANGED_COLOR EQUS "LOW(wPlayerBench2CardChangedType)" ; d6
DEF DUELVARS_BENCH3_CARD_CHANGED_COLOR EQUS "LOW(wPlayerBench3CardChangedType)" ; d7
DEF DUELVARS_BENCH4_CARD_CHANGED_COLOR EQUS "LOW(wPlayerBench4CardChangedType)" ; d8
DEF DUELVARS_BENCH5_CARD_CHANGED_COLOR EQUS "LOW(wPlayerBench5CardChangedType)" ; d9
DEF DUELVARS_ARENA_CARD_ATTACHED_DEFENDER EQU $da ; EQUS "LOW(wPlayerArenaCardAttachedDefender)" ; da
DEF DUELVARS_ARENA_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerArenaCardAttachedDefender)" ; da
DEF DUELVARS_BENCH1_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerBench1CardAttachedDefender)" ; db
DEF DUELVARS_BENCH2_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerBench2CardAttachedDefender)" ; dc
DEF DUELVARS_BENCH3_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerBench3CardAttachedDefender)" ; dd
DEF DUELVARS_BENCH4_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerBench4CardAttachedDefender)" ; de
DEF DUELVARS_BENCH5_CARD_ATTACHED_DEFENDER EQUS "LOW(wPlayerBench5CardAttachedDefender)" ; df
DEF DUELVARS_ARENA_CARD_ATTACHED_PLUSPOWER EQU $e0 ; EQUS "LOW(wPlayerArenaCardAttachedPluspower)" ; e0
DEF DUELVARS_ARENA_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerArenaCardAttachedPluspower)" ; e0
DEF DUELVARS_BENCH1_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerBench1CardAttachedPluspower)" ; e1
DEF DUELVARS_BENCH2_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerBench2CardAttachedPluspower)" ; e2
DEF DUELVARS_BENCH3_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerBench3CardAttachedPluspower)" ; e3
DEF DUELVARS_BENCH4_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerBench4CardAttachedPluspower)" ; e4
DEF DUELVARS_BENCH5_CARD_ATTACHED_PLUSPOWER EQUS "LOW(wPlayerBench5CardAttachedPluspower)" ; e5
DEF DUELVARS_ARENA_CARD_FOOD_COUNTERS EQU $e6 ; EQUS "LOW(wPlayerArenaCardFoodCounters)" ; e6
DEF DUELVARS_BENCH1_CARD_FOOD_COUNTERS EQU $e7 ; EQUS "LOW(wPlayerBench1FoodCounters)" ; e7
DEF DUELVARS_BENCH2_CARD_FOOD_COUNTERS EQU $e8 ; EQUS "LOW(wPlayerBench2FoodCounters)" ; e8
DEF DUELVARS_BENCH3_CARD_FOOD_COUNTERS EQU $e9 ; EQUS "LOW(wPlayerBench3FoodCounters)" ; e9
DEF DUELVARS_BENCH4_CARD_FOOD_COUNTERS EQU $ea ; EQUS "LOW(wPlayerBench4FoodCounters)" ; ea
DEF DUELVARS_BENCH5_CARD_FOOD_COUNTERS EQU $eb ; EQUS "LOW(wPlayerBench5FoodCounters)" ; eb
DEF DUELVARS_ARENA_CARD_STATUS EQU $ec ; EQUS "LOW(wPlayerArenaCardStatus)" ; f0
DEF DUELVARS_ARENA_CARD_SUBSTATUS1 EQU $ed ; EQUS "LOW(wPlayerArenaCardSubstatus1)" ; e7
DEF DUELVARS_ARENA_CARD_SUBSTATUS2 EQU $ee ; EQUS "LOW(wPlayerArenaCardSubstatus2)" ; e8
DEF DUELVARS_ARENA_CARD_CHANGED_WEAKNESS EQU $ef ; EQUS "LOW(wPlayerArenaCardChangedWeakness)" ; e9
DEF DUELVARS_ARENA_CARD_CHANGED_RESISTANCE EQU $f0 ; EQUS "LOW(wPlayerArenaCardChangedResistance)" ; ea
DEF DUELVARS_ARENA_CARD_SUBSTATUS3 EQU $f1 ; EQUS "LOW(wPlayerArenaCardSubstatus3)" ; eb
DEF DUELVARS_PRIZES EQU $f2 ; EQUS "LOW(wPlayerPrizes)" ; ec
DEF DUELVARS_NUMBER_OF_CARDS_IN_DISCARD_PILE EQU $f3 ; EQUS "LOW(wPlayerNumberOfCardsInDiscardPile)" ; ed
DEF DUELVARS_NUMBER_OF_CARDS_IN_HAND EQU $f4 ; EQUS "LOW(wPlayerNumberOfCardsInHand)" ; ee
DEF DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA EQU $f5 ; EQUS "LOW(wPlayerNumberOfPokemonInPlayArea)" ; ef
DEF DUELVARS_DUELIST_TYPE EQU $f6 ; EQUS "LOW(wPlayerDuelistType)" ; f1
DEF DUELVARS_ARENA_CARD_DISABLED_ATTACK_INDEX EQU $f7 ; EQUS "LOW(wPlayerArenaCardDisabledAttackIndex)" ; f2
DEF DUELVARS_ARENA_CARD_LAST_TURN_DAMAGE EQUS "LOW(wPlayerArenaCardLastTurnDamage)" ; f3
DEF DUELVARS_ARENA_CARD_LAST_TURN_STATUS EQUS "LOW(wPlayerArenaCardLastTurnStatus)" ; f5
DEF DUELVARS_ARENA_CARD_LAST_TURN_SUBSTATUS2 EQUS "LOW(wPlayerArenaCardLastTurnSubstatus2)" ; f6
DEF DUELVARS_ARENA_CARD_LAST_TURN_CHANGE_WEAK EQUS "LOW(wPlayerArenaCardLastTurnChangeWeak)" ; f7
DEF DUELVARS_ARENA_CARD_LAST_TURN_EFFECT EQUS "LOW(wPlayerArenaCardLastTurnEffect)" ; f8
DEF DUELVARS_ARENA_CARD_FOOD_COUNTERS EQUS "LOW(wPlayerArenaCardFoodCounters)" ; e6
DEF DUELVARS_BENCH1_CARD_FOOD_COUNTERS EQUS "LOW(wPlayerBench1FoodCounters)" ; e7
DEF DUELVARS_BENCH2_CARD_FOOD_COUNTERS EQUS "LOW(wPlayerBench2FoodCounters)" ; e8
DEF DUELVARS_BENCH3_CARD_FOOD_COUNTERS EQUS "LOW(wPlayerBench3FoodCounters)" ; e9
DEF DUELVARS_BENCH4_CARD_FOOD_COUNTERS EQUS "LOW(wPlayerBench4FoodCounters)" ; ea
DEF DUELVARS_BENCH5_CARD_FOOD_COUNTERS EQUS "LOW(wPlayerBench5FoodCounters)" ; eb
DEF DUELVARS_ARENA_CARD_STATUS EQUS "LOW(wPlayerArenaCardStatus)" ; ec
DEF DUELVARS_ARENA_CARD_SUBSTATUS1 EQUS "LOW(wPlayerArenaCardSubstatus1)" ; ed
DEF DUELVARS_ARENA_CARD_SUBSTATUS2 EQUS "LOW(wPlayerArenaCardSubstatus2)" ; ee
DEF DUELVARS_ARENA_CARD_CHANGED_WEAKNESS EQUS "LOW(wPlayerArenaCardChangedWeakness)" ; ef
DEF DUELVARS_ARENA_CARD_CHANGED_RESISTANCE EQUS "LOW(wPlayerArenaCardChangedResistance)" ; f0
DEF DUELVARS_ARENA_CARD_SUBSTATUS3 EQUS "LOW(wPlayerArenaCardSubstatus3)" ; f1
DEF DUELVARS_PRIZES EQUS "LOW(wPlayerPrizes)" ; f2
DEF DUELVARS_NUMBER_OF_CARDS_IN_DISCARD_PILE EQUS "LOW(wPlayerNumberOfCardsInDiscardPile)" ; f3
DEF DUELVARS_NUMBER_OF_CARDS_IN_HAND EQUS "LOW(wPlayerNumberOfCardsInHand)" ; f4
DEF DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA EQUS "LOW(wPlayerNumberOfPokemonInPlayArea)" ; f5
DEF DUELVARS_DUELIST_TYPE EQUS "LOW(wPlayerDuelistType)" ; f6
DEF DUELVARS_ARENA_CARD_DISABLED_ATTACK_INDEX EQUS "LOW(wPlayerArenaCardDisabledAttackIndex)" ; f7
DEF DUELVARS_ARENA_CARD_LAST_TURN_DAMAGE EQUS "LOW(wPlayerArenaCardLastTurnDamage)" ; f8
DEF DUELVARS_ARENA_CARD_LAST_TURN_STATUS EQUS "LOW(wPlayerArenaCardLastTurnStatus)" ; fa
DEF DUELVARS_ARENA_CARD_LAST_TURN_SUBSTATUS2 EQUS "LOW(wPlayerArenaCardLastTurnSubstatus2)" ; fb
DEF DUELVARS_ARENA_CARD_LAST_TURN_CHANGE_WEAK EQUS "LOW(wPlayerArenaCardLastTurnChangeWeak)" ; fc
DEF DUELVARS_ARENA_CARD_LAST_TURN_EFFECT EQUS "LOW(wPlayerArenaCardLastTurnEffect)" ; fd
DEF DUELVARS_UNK_FE EQUS "LOW(wPlayerUnkfe)" ; fe
; card location constants (DUELVARS_CARD_LOCATIONS)
DEF CARD_LOCATION_DECK EQU $00
@@ -140,41 +142,56 @@ DEF DBLPSN_DAMAGE EQU 20
; substatus conditions (DUELVARS_ARENA_CARD_SUBSTATUS*)
; SUBSTATUS1 are checked on a defending Pokemon
DEF SUBSTATUS1_AGILITY EQU $0c
DEF SUBSTATUS1_FLY EQU $0d
DEF SUBSTATUS1_HARDEN EQU $0e
DEF SUBSTATUS1_NO_DAMAGE_STIFFEN EQU $0f
DEF SUBSTATUS1_NO_DAMAGE_10 EQU $10
DEF SUBSTATUS1_NO_DAMAGE_11 EQU $11
DEF SUBSTATUS1_REDUCE_BY_20 EQU $13
DEF SUBSTATUS1_BARRIER EQU $14
DEF SUBSTATUS1_HALVE_DAMAGE EQU $15
DEF SUBSTATUS1_DESTINY_BOND EQU $16
DEF SUBSTATUS1_NO_DAMAGE_17 EQU $17
DEF SUBSTATUS1_NEXT_TURN_DOUBLE_DAMAGE EQU $19
DEF SUBSTATUS1_REDUCE_BY_10 EQU $1e
DEF SUBSTATUS1_UNK_0D EQU $0d
DEF SUBSTATUS1_AGILITY EQU $11
DEF SUBSTATUS1_FLY EQU $12
DEF SUBSTATUS1_HARDEN EQU $13
DEF SUBSTATUS1_NO_DAMAGE_STIFFEN EQU $14
DEF SUBSTATUS1_NO_DAMAGE_10 EQU $15
DEF SUBSTATUS1_NO_DAMAGE_11 EQU $16
DEF SUBSTATUS1_REDUCE_BY_20 EQU $18
DEF SUBSTATUS1_BARRIER EQU $19
DEF SUBSTATUS1_HALVE_DAMAGE EQU $1a
DEF SUBSTATUS1_DESTINY_BOND EQU $1b
DEF SUBSTATUS1_NO_DAMAGE_17 EQU $1c
DEF SUBSTATUS1_NEXT_TURN_DOUBLE_DAMAGE EQU $1e
DEF SUBSTATUS1_REDUCE_BY_10 EQU $23
DEF SUBSTATUS1_HIDE EQU $2a
DEF SUBSTATUS1_USED_DRILL_DIVE EQU $30
; SUBSTATUS2 are checked on an attacking Pokemon
DEF SUBSTATUS2_SMOKESCREEN EQU $01
DEF SUBSTATUS2_SAND_ATTACK EQU $02
DEF SUBSTATUS2_REDUCE_BY_20 EQU $03
DEF SUBSTATUS2_AMNESIA EQU $04
DEF SUBSTATUS2_TAIL_WAG EQU $05
DEF SUBSTATUS2_LEER EQU $06
DEF SUBSTATUS2_POUNCE EQU $07
DEF SUBSTATUS2_CONVERSION2 EQU $08
DEF SUBSTATUS2_UNABLE_RETREAT EQU $09
DEF SUBSTATUS2_BONE_ATTACK EQU $0b
DEF SUBSTATUS2_GROWL EQU $12
DEF SUBSTATUS2_SMOKESCREEN EQU $01
DEF SUBSTATUS2_SAND_ATTACK EQU $02
DEF SUBSTATUS2_REDUCE_BY_20 EQU $03
DEF SUBSTATUS2_AMNESIA EQU $04
DEF SUBSTATUS2_TAIL_WAG EQU $05
DEF SUBSTATUS2_LEER EQU $06
DEF SUBSTATUS2_POUNCE EQU $07
DEF SUBSTATUS2_CONVERSION2 EQU $08
DEF SUBSTATUS2_ACID EQU $09
DEF SUBSTATUS2_BONE_ATTACK EQU $0b
DEF SUBSTATUS2_ROCK_SEAL EQU $0e
DEF SUBSTATUS2_DISABLE EQU $0f
DEF SUBSTATUS2_GROWL EQU $17
DEF SUBSTATUS3_THIS_TURN_DOUBLE_DAMAGE EQU 0
DEF SUBSTATUS3_HEADACHE EQU 1
DEF SUBSTATUS3_THIS_TURN_DOUBLE_DAMAGE_F EQU 0
DEF SUBSTATUS3_HEADACHE_F EQU 2
DEF SUBSTATUS3_SPOOKIFY_F EQU 3
DEF SUBSTATUS3_UNK_4_F EQU 4
DEF SUBSTATUS3_UNK_5_F EQU 5
DEF SUBSTATUS3_UNK_6_F EQU 6
DEF SUBSTATUS3_PERPLEX_F EQU 7
; DUELVARS_ARENA_CARD_FLAGS constants
DEF PLAY_AREA_FLAG_UNK_1_F EQU 1
DEF PLAY_AREA_FLAG_UNK_2_F EQU 2
DEF PLAY_AREA_FLAG_UNK_3_F EQU 3
DEF AFFECTED_BY_STARE_F EQU 4
DEF USED_PKMN_POWER_THIS_TURN_F EQU 5
DEF USED_LEEK_SLAP_THIS_DUEL_F EQU 6
DEF CAN_EVOLVE_THIS_TURN_F EQU 7
DEF AFFECTED_BY_STARE EQU 1 << AFFECTED_BY_STARE_F
DEF USED_PKMN_POWER_THIS_TURN EQU 1 << USED_PKMN_POWER_THIS_TURN_F
DEF USED_LEEK_SLAP_THIS_DUEL EQU 1 << USED_LEEK_SLAP_THIS_DUEL_F
DEF CAN_EVOLVE_THIS_TURN EQU 1 << CAN_EVOLVE_THIS_TURN_F
@@ -243,12 +260,18 @@ DEF NO_DAMAGE_OR_EFFECT_NSHIELD EQU $05
const OPPACTION_USE_METRONOME_ATTACK ; $15
const OPPACTION_6B15 ; $16
const OPPACTION_DUEL_MAIN_SCENE ; $17
const OPPACTION_UNK_18 ; $18
const OPPACTION_UNK_19 ; $19
const OPPACTION_UNK_1A ; $1a
const OPPACTION_UNK_1B ; $1b
const OPPACTION_UNK_1C ; $1c
DEF NUM_OPP_ACTIONS EQU const_value
; constants for PracticeDuelActionTable entries
const_def 1
const PRACTICEDUEL_DRAW_SEVEN_CARDS
const PRACTICEDUEL_PLAY_GOLDEEN
const PRACTICEDUEL_PUT_STARYU_IN_BENCH
const PRACTICEDUEL_PLAY_DIGLETT
const PRACTICEDUEL_PUT_NIDORANM_IN_BENCH
const PRACTICEDUEL_VERIFY_INITIAL_PLAY
const PRACTICEDUEL_DONE_PUTTING_ON_BENCH
const PRACTICEDUEL_PRINT_TURN_INSTRUCTIONS
@@ -281,14 +304,14 @@ DEF PRIZES_6 EQU $06
; special rule constants, stored in wSpecialRule
const_def
const NO_RULES ; $0
const CHLOROPHYLL ; $1
const THUNDER_CHARGE ; $2
const FLAME_ARMOR ; $3
const SMALL_BENCH ; $4
const RUNNING_WATER ; $5
const EARTH_POWER ; $6
const LOW_RESISTANCE ; $7
const ENERGY_RETURN ; $8
const TOUGH_ESCAPE ; $9
const BLACK_HOLE ; $a
const NO_SPECIAL_RULE ; $0
const CHLOROPHYLL ; $1
const THUNDER_CHARGE ; $2
const FLAME_ARMOR ; $3
const SMALL_BENCH ; $4
const RUNNING_WATER ; $5
const EARTH_POWER ; $6
const LOW_RESISTANCE ; $7
const ENERGY_RETURN ; $8
const TOUGH_ESCAPE ; $9
const BLACK_HOLE ; $a
@@ -10,6 +10,12 @@ DEF CARDPAGE_ENERGY_2 EQU $0a
DEF CARDPAGE_TRAINER_1 EQU $0d
DEF CARDPAGE_TRAINER_2 EQU $0e
; wAttackPageNumber constants
DEF ATTACKPAGE_ATTACK1_1 EQU $00
DEF ATTACKPAGE_ATTACK1_2 EQU $01
DEF ATTACKPAGE_ATTACK2_1 EQU $02
DEF ATTACKPAGE_ATTACK2_2 EQU $03
; wCardPageType constants
DEF CARDPAGETYPE_NOT_PLAY_AREA EQU $00
DEF CARDPAGETYPE_PLAY_AREA EQU $01
@@ -18,3 +24,29 @@ DEF CARDPAGETYPE_PLAY_AREA EQU $01
DEF HEADER_TRAINER EQU $00
DEF HEADER_ENERGY EQU $01
DEF HEADER_POKEMON EQU $02
; Box message id's
const_def
const BOXMSG_PLAYERS_TURN
const BOXMSG_OPPONENTS_TURN
const BOXMSG_BETWEEN_TURNS
const BOXMSG_DECISION
const BOXMSG_BENCH_POKEMON
const BOXMSG_ARENA_POKEMON
const BOXMSG_COIN_TOSS
; wDuelDisplayedScreen constants
DEF DUEL_MAIN_SCENE EQU $01
DEF PLAY_AREA_CARD_LIST EQU $02
DEF UNKNOWN_SCREEN_4 EQU $04 ; used for some animations
DEF UNKNOWN_SCREEN_5 EQU $05 ; used for some animations
DEF COIN_TOSS EQU $06
DEF DRAW_CARDS EQU $07
DEF LARGE_CARD_PICTURE EQU $08
DEF SHUFFLE_DECK EQU $09
DEF CHECK_PLAY_AREA EQU $0a
; wCardListItemSelectionMenuType constants
;NONE EQU $00
DEF PLAY_CHECK EQU $01
DEF SELECT_CHECK EQU $02
+98
View File
@@ -0,0 +1,98 @@
const_def
const NPC_MARK ; $00
const NPC_MINT ; $01
const NPC_MARK_LINK ; $02
const NPC_MINT_LINK ; $03
const NPC_RONALD ; $04
const NPC_SAM ; $05
const NPC_AARON ; $06
const NPC_ISHIHARA ; $07
const NPC_IMAKUNI_BLACK ; $08
const NPC_IMAKUNI_RED ; $09
const NPC_ISAAC ; $0a
const NPC_JENNIFER ; $0b
const NPC_NICHOLAS ; $0c
const NPC_BRANDON ; $0d
const NPC_MURRAY ; $0e
const NPC_STEPHANIE ; $0f
const NPC_DANIEL ; $10
const NPC_ROBERT ; $11
const NPC_GENE ; $12
const NPC_MATTHEW ; $13
const NPC_RYAN ; $14
const NPC_ANDREW ; $15
const NPC_MITCH ; $16
const NPC_MICHAEL ; $17
const NPC_CHRIS ; $18
const NPC_JESSICA ; $19
const NPC_NIKKI ; $1a
const NPC_BRITTANY ; $1b
const NPC_KRISTIN ; $1c
const NPC_HEATHER ; $1d
const NPC_RICK ; $1e
const NPC_JOSEPH ; $1f
const NPC_DAVID ; $20
const NPC_ERIK ; $21
const NPC_AMY ; $22
const NPC_JOSHUA ; $23
const NPC_SARA ; $24
const NPC_AMANDA ; $25
const NPC_KEN ; $26
const NPC_JOHN ; $27
const NPC_ADAM ; $28
const NPC_JONATHAN ; $29
const NPC_COURTNEY ; $2a
const NPC_STEVE ; $2b
const NPC_JACK ; $2c
const NPC_ROD ; $2d
const NPC_EIJI ; $2e
const NPC_MAGICIAN ; $2f
const NPC_YUI ; $30
const NPC_TOSHIRON ; $31
const NPC_PIERROT ; $32
const NPC_ANNA ; $33
const NPC_DEE ; $34
const NPC_MASQUERADE ; $35
const NPC_PAWN ; $36
const NPC_KNIGHT ; $37
const NPC_BISHOP ; $38
const NPC_ROOK ; $39
const NPC_QUEEN ; $3a
const NPC_GR_1 ; $3b
const NPC_GR_2 ; $3c
const NPC_GR_3 ; $3d
const NPC_GR_4 ; $3e
const NPC_MIDORI ; $3f
const NPC_YUUTA ; $40
const NPC_MIYUKI ; $41
const NPC_MORINO ; $42
const NPC_RENNA ; $43
const NPC_ICHIKAWA ; $44
const NPC_CATHERINE ; $45
const NPC_TAP ; $46
const NPC_JES ; $47
const NPC_YUKI ; $48
const NPC_SHOKO ; $49
const NPC_HIDERO ; $4a
const NPC_MIYAJIMA ; $4b
const NPC_SENTA ; $4c
const NPC_AIRA ; $4d
const NPC_KANOKO ; $4e
const NPC_GODA ; $4f
const NPC_GRACE ; $50
const NPC_KAMIYA ; $51
const NPC_MIWA ; $52
const NPC_KEVIN ; $53
const NPC_YOSUKE ; $54
const NPC_RYOKO ; $55
const NPC_MAMI ; $56
const NPC_NISHIJIMA ; $57
const NPC_ISHII ; $58
const NPC_SAMEJIMA ; $59
const NPC_KANZAKI ; $5a
const NPC_RUI ; $5b
const NPC_BIRURITCHI ; $5c
const NPC_GR_X ; $5d
const NPC_TOBI_CHAN ; $5e
const NPC_DR_MASON ; $5f
DEF NUM_NPC_IDS EQU const_value
+96 -96
View File
@@ -1,100 +1,100 @@
const_def
const PORTRAIT_00 ; $00
const PORTRAIT_01 ; $01
const PORTRAIT_02 ; $02
const PORTRAIT_03 ; $03
const PORTRAIT_04 ; $04
const PORTRAIT_05 ; $05
const PORTRAIT_06 ; $06
const PORTRAIT_07 ; $07
const PORTRAIT_08 ; $08
const PORTRAIT_09 ; $09
const PORTRAIT_0A ; $0a
const PORTRAIT_0B ; $0b
const PORTRAIT_0C ; $0c
const PORTRAIT_0D ; $0d
const PORTRAIT_0E ; $0e
const PORTRAIT_0F ; $0f
const PORTRAIT_10 ; $10
const PORTRAIT_11 ; $11
const PORTRAIT_12 ; $12
const PORTRAIT_13 ; $13
const PORTRAIT_14 ; $14
const PORTRAIT_15 ; $15
const PORTRAIT_16 ; $16
const PORTRAIT_17 ; $17
const PORTRAIT_18 ; $18
const PORTRAIT_19 ; $19
const PORTRAIT_1A ; $1a
const PORTRAIT_1B ; $1b
const PORTRAIT_1C ; $1c
const PORTRAIT_1D ; $1d
const PORTRAIT_1E ; $1e
const PORTRAIT_1F ; $1f
const PORTRAIT_20 ; $20
const PORTRAIT_21 ; $21
const PORTRAIT_22 ; $22
const PORTRAIT_23 ; $23
const PORTRAIT_24 ; $24
const PORTRAIT_25 ; $25
const PORTRAIT_26 ; $26
const PORTRAIT_27 ; $27
const PORTRAIT_28 ; $28
const PORTRAIT_29 ; $29
const PORTRAIT_2A ; $2a
const PORTRAIT_2B ; $2b
const PORTRAIT_2C ; $2c
const PORTRAIT_2D ; $2d
const PORTRAIT_2E ; $2e
const PORTRAIT_2F ; $2f
const PORTRAIT_30 ; $30
const PORTRAIT_31 ; $31
const PORTRAIT_32 ; $32
const PORTRAIT_33 ; $33
const PORTRAIT_34 ; $34
const PORTRAIT_35 ; $35
const PORTRAIT_36 ; $36
const PORTRAIT_37 ; $37
const PORTRAIT_38 ; $38
const PORTRAIT_39 ; $39
const PORTRAIT_3A ; $3a
const PORTRAIT_3B ; $3b
const PORTRAIT_3C ; $3c
const PORTRAIT_3D ; $3d
const PORTRAIT_3E ; $3e
const PORTRAIT_3F ; $3f
const PORTRAIT_40 ; $40
const PORTRAIT_41 ; $41
const PORTRAIT_42 ; $42
const PORTRAIT_43 ; $43
const PORTRAIT_44 ; $44
const PORTRAIT_45 ; $45
const PORTRAIT_46 ; $46
const PORTRAIT_47 ; $47
const PORTRAIT_48 ; $48
const PORTRAIT_49 ; $49
const PORTRAIT_4A ; $4a
const PORTRAIT_4B ; $4b
const PORTRAIT_4C ; $4c
const PORTRAIT_4D ; $4d
const PORTRAIT_4E ; $4e
const PORTRAIT_4F ; $4f
const PORTRAIT_50 ; $50
const PORTRAIT_51 ; $51
const PORTRAIT_52 ; $52
const PORTRAIT_53 ; $53
const PORTRAIT_54 ; $54
const PORTRAIT_55 ; $55
const PORTRAIT_56 ; $56
const PORTRAIT_57 ; $57
const PORTRAIT_58 ; $58
const PORTRAIT_59 ; $59
const PORTRAIT_5A ; $5a
const PORTRAIT_5B ; $5b
const PORTRAIT_5C ; $5c
const PORTRAIT_5D ; $5d
const PORTRAIT_5E ; $5e
const PORTRAIT_5F ; $5f
const PORTRAIT_MARK ; $00
const PORTRAIT_MINT ; $01
const PORTRAIT_MARK_LINK ; $02
const PORTRAIT_MINT_LINK ; $03
const PORTRAIT_RONALD ; $04
const PORTRAIT_SAM ; $05
const PORTRAIT_AARON ; $06
const PORTRAIT_ISHIHARA ; $07
const PORTRAIT_ISAAC ; $08
const PORTRAIT_JENNIFER ; $09
const PORTRAIT_NICHOLAS ; $0a
const PORTRAIT_BRANDON ; $0b
const PORTRAIT_MURRAY ; $0c
const PORTRAIT_STEPHANIE ; $0d
const PORTRAIT_DANIEL ; $0e
const PORTRAIT_ROBERT ; $0f
const PORTRAIT_GENE ; $10
const PORTRAIT_MATTHEW ; $11
const PORTRAIT_RYAN ; $12
const PORTRAIT_ANDREW ; $13
const PORTRAIT_MITCH ; $14
const PORTRAIT_MICHAEL ; $15
const PORTRAIT_CHRIS ; $16
const PORTRAIT_JESSICA ; $17
const PORTRAIT_NIKKI ; $18
const PORTRAIT_BRITTANY ; $19
const PORTRAIT_KRISTIN ; $1a
const PORTRAIT_HEATHER ; $1b
const PORTRAIT_RICK ; $1c
const PORTRAIT_JOSEPH ; $1d
const PORTRAIT_DAVID ; $1e
const PORTRAIT_ERIK ; $1f
const PORTRAIT_AMY ; $20
const PORTRAIT_JOSHUA ; $21
const PORTRAIT_SARA ; $22
const PORTRAIT_AMANDA ; $23
const PORTRAIT_KEN ; $24
const PORTRAIT_JOHN ; $25
const PORTRAIT_ADAM ; $26
const PORTRAIT_JONATHAN ; $27
const PORTRAIT_COURTNEY ; $28
const PORTRAIT_STEVE ; $29
const PORTRAIT_JACK ; $2a
const PORTRAIT_ROD ; $2b
const PORTRAIT_EIJI ; $2c
const PORTRAIT_MAGICIAN ; $2d
const PORTRAIT_YUI ; $2e
const PORTRAIT_TOSHIRON ; $2f
const PORTRAIT_PIERROT ; $30
const PORTRAIT_ANNA ; $31
const PORTRAIT_DEE ; $32
const PORTRAIT_MASQUERADE ; $33
const PORTRAIT_PAWN ; $34
const PORTRAIT_KNIGHT ; $35
const PORTRAIT_BISHOP ; $36
const PORTRAIT_ROOK ; $37
const PORTRAIT_QUEEN ; $38
const PORTRAIT_GR_1 ; $39
const PORTRAIT_GR_2 ; $3a
const PORTRAIT_GR_3 ; $3b
const PORTRAIT_GR_4 ; $3c
const PORTRAIT_MIDORI ; $3d
const PORTRAIT_YUUTA ; $3e
const PORTRAIT_MIYUKI ; $3f
const PORTRAIT_MORINO ; $40
const PORTRAIT_RENNA ; $41
const PORTRAIT_ICHIKAWA ; $42
const PORTRAIT_CATHERINE ; $43
const PORTRAIT_TAP ; $44
const PORTRAIT_JES ; $45
const PORTRAIT_YUKI ; $46
const PORTRAIT_SHOKO ; $47
const PORTRAIT_HIDERO ; $48
const PORTRAIT_MIYAJIMA ; $49
const PORTRAIT_SENTA ; $4a
const PORTRAIT_AIRA ; $4b
const PORTRAIT_KANOKO ; $4c
const PORTRAIT_GODA ; $4d
const PORTRAIT_GRACE ; $4e
const PORTRAIT_KAMIYA ; $4f
const PORTRAIT_MIWA ; $50
const PORTRAIT_KEVIN ; $51
const PORTRAIT_YOSUKE ; $52
const PORTRAIT_RYOKO ; $53
const PORTRAIT_MAMI ; $54
const PORTRAIT_NISHIJIMA ; $55
const PORTRAIT_ISHII ; $56
const PORTRAIT_SAMEJIMA ; $57
const PORTRAIT_KANZAKI ; $58
const PORTRAIT_RUI ; $59
const PORTRAIT_BIRURITCHI ; $5a
const PORTRAIT_GR_X ; $5b
const PORTRAIT_TOBI_CHAN ; $5c
const PORTRAIT_DR_MASON ; $5d
const PORTRAIT_IMAKUNI_BLACK ; $5e
const PORTRAIT_IMAKUNI_RED ; $5f
; each portrait has 3 variants
const_def
+1 -1
View File
@@ -59,6 +59,6 @@
const VAR_39 ; $39
const VAR_3A ; $3a
const VAR_3B ; $3b
const VAR_3C ; $3c
const VAR_NPC_DECK_ID ; $3c
const VAR_3D ; $3d
const VAR_3E ; $3e
+13 -13
View File
@@ -19,10 +19,10 @@ Credits:
credits_wait 20
credits_draw_box 0, 0, 20, 18
credits_show_portrait $07, 2, 6, PORTRAITVARIANT_NORMAL
credits_show_portrait NPC_ISHIHARA, 2, 6, PORTRAITVARIANT_NORMAL
credits_fade_in CREDITS_FADE_BACKGROUND, $0a
credits_wait 60
credits_show_portrait $07, 2, 6, PORTRAITVARIANT_HAPPY
credits_show_portrait NPC_ISHIHARA, 2, 6, PORTRAITVARIANT_HAPPY
credits_print_header 7, 2, 2, Text07aa
credits_print_text 10, 6, Text07ab
credits_fade_in CREDITS_FADE_HEADER_TEXT, $05
@@ -33,10 +33,10 @@ Credits:
credits_wait 20
credits_draw_box 0, 0, 20, 18
credits_show_portrait $06, 2, 6, PORTRAITVARIANT_NORMAL
credits_show_portrait NPC_AARON, 2, 6, PORTRAITVARIANT_NORMAL
credits_fade_in CREDITS_FADE_BACKGROUND, $0a
credits_wait 60
credits_show_portrait $06, 2, 6, PORTRAITVARIANT_HAPPY
credits_show_portrait NPC_AARON, 2, 6, PORTRAITVARIANT_HAPPY
credits_print_header 7, 2, 2, Text07ac
credits_print_text 10, 8, Text07ad
credits_fade_in CREDITS_FADE_HEADER_TEXT, $05
@@ -47,10 +47,10 @@ Credits:
credits_wait 20
credits_draw_box 0, 0, 20, 18
credits_show_portrait $51, 2, 6, PORTRAITVARIANT_NORMAL
credits_show_portrait NPC_KAMIYA, 2, 6, PORTRAITVARIANT_NORMAL
credits_fade_in CREDITS_FADE_BACKGROUND, $0a
credits_wait 60
credits_show_portrait $51, 2, 6, PORTRAITVARIANT_HAPPY
credits_show_portrait NPC_KAMIYA, 2, 6, PORTRAITVARIANT_HAPPY
credits_print_header 4, 2, 2, Text07ae
credits_print_text 10, 8, Text07af
credits_fade_in CREDITS_FADE_HEADER_TEXT, $05
@@ -61,10 +61,10 @@ Credits:
credits_wait 20
credits_draw_box 0, 0, 20, 18
credits_show_portrait $46, 2, 6, PORTRAITVARIANT_HAPPY
credits_show_portrait NPC_TAP, 2, 6, PORTRAITVARIANT_HAPPY
credits_fade_in CREDITS_FADE_BACKGROUND, $0a
credits_wait 60
credits_show_portrait $46, 2, 6, PORTRAITVARIANT_HAPPY
credits_show_portrait NPC_TAP, 2, 6, PORTRAITVARIANT_HAPPY
credits_print_header 5, 2, 2, Text07b0
credits_print_text 10, 8, Text07b1
credits_fade_in CREDITS_FADE_HEADER_TEXT, $05
@@ -75,7 +75,7 @@ Credits:
credits_wait 20
credits_draw_box 0, 0, 20, 18
credits_show_portrait $5e, 2, 6, PORTRAITVARIANT_NORMAL
credits_show_portrait NPC_TOBI_CHAN, 2, 6, PORTRAITVARIANT_NORMAL
credits_fade_in CREDITS_FADE_BACKGROUND, $0a
credits_wait 60
credits_print_header 5, 2, 2, Text07b2
@@ -215,7 +215,7 @@ Credits:
credits_wait 20
credits_draw_box 0, 0, 20, 18
credits_show_portrait $26, 2, 6, PORTRAITVARIANT_NORMAL
credits_show_portrait NPC_KEN, 2, 6, PORTRAITVARIANT_NORMAL
credits_fade_in CREDITS_FADE_BACKGROUND, $0a
credits_wait 60
credits_print_header 10, 2, 2, Text07c5
@@ -229,7 +229,7 @@ Credits:
credits_draw_box 2, 6, 6, 6
credits_draw_box 10, 6, 10, 6
credits_show_portrait $5f, 2, 6, PORTRAITVARIANT_HAPPY
credits_show_portrait NPC_DR_MASON, 2, 6, PORTRAITVARIANT_HAPPY
credits_fade_in CREDITS_FADE_BACKGROUND, $0a
credits_wait 60
credits_print_text 10, 8, Text07c7
@@ -242,7 +242,7 @@ Credits:
credits_draw_box 2, 6, 6, 6
credits_draw_box 10, 6, 10, 6
credits_show_portrait $0e, 2, 6, PORTRAITVARIANT_NORMAL
credits_show_portrait NPC_MURRAY, 2, 6, PORTRAITVARIANT_NORMAL
credits_fade_in CREDITS_FADE_BACKGROUND, $0a
credits_wait 60
credits_print_text 10, 8, Text07c8
@@ -332,7 +332,7 @@ Credits:
credits_wait 20
credits_draw_box 0, 0, 20, 18
credits_show_portrait $09, 2, 6, PORTRAITVARIANT_SAD
credits_show_portrait NPC_IMAKUNI_RED, 2, 6, PORTRAITVARIANT_SAD
credits_fade_in CREDITS_FADE_BACKGROUND, $0a
credits_wait 60
credits_print_header 12, 2, 2, Text07d0
+53
View File
@@ -0,0 +1,53 @@
PracticeDuelTextPointerTable:
dw PracticeDuelText_Turn1
dw PracticeDuelText_Turn2
dw PracticeDuelText_Turn3
dw PracticeDuelText_Turn4
dw PracticeDuelText_Turn5
dw PracticeDuelText_Turn6
MACRO practicetext
db \1 ; Y coord to place the point-by-point instruction
tx \2 ; Dr. Mason's instruction
tx \3 ; static point-by-point instruction
ENDM
PracticeDuelText_Turn1:
practicetext 2, Text0502, Text04ff
practicetext 5, Text0503, Text0500
practicetext 8, Text0504, Text0501
db $00
PracticeDuelText_Turn2:
practicetext 2, Text050a, Text0508
practicetext 5, Text050b, Text0509
db $00
PracticeDuelText_Turn3:
practicetext 2, Text050f, Text050c
practicetext 5, Text0510, Text050d
practicetext 8, Text0511, Text050e
db $00
PracticeDuelText_Turn4:
practicetext 2, Text0515, Text0512
practicetext 5, Text0516, Text0513
practicetext 8, Text0517, Text0514
db $00
PracticeDuelText_Turn5:
practicetext 2, Text0520, Text051d
practicetext 5, Text0521, Text051e
practicetext 8, Text0522, Text051f
db $00
PracticeDuelText_Turn6:
practicetext 2, Text0526, Text0523
practicetext 5, Text0527, Text0524
practicetext 8, Text0528, Text0525
db $00
PracticeDuelText_SamTurn4:
practicetext 2, Text051a, Text0518
practicetext 6, Text051b, Text0519
db $00
+6197 -49
View File
File diff suppressed because it is too large Load Diff
+130 -1
View File
@@ -1,3 +1,132 @@
SECTION "Bank 2@43b3", ROMX[$43b3], BANK[$2]
Func_82b6:
ld a, [wCheckMenuPlayAreaWhichDuelist]
ld b, a
ld a, [wCheckMenuPlayAreaWhichLayout]
cp b
jr nz, .not_equal
ld hl, PrizeCardsCoordinateData_YourOrOppPlayArea.player
call DrawPlayArea_PrizeCards
ret
.not_equal
ld hl, PrizeCardsCoordinateData_YourOrOppPlayArea.opponent
call DrawPlayArea_PrizeCards
ret
; 0x83cb
SECTION "Bank 2@4587", ROMX[$4587], BANK[$2]
; draws prize cards depending on the turn
; loaded in wCheckMenuPlayAreaWhichDuelist
; input:
; hl = pointer to coordinates
DrawPlayArea_PrizeCards:
push hl
call GetDuelInitialPrizesUpperBitsSet
ld a, [wCheckMenuPlayAreaWhichDuelist]
ld h, a
ld l, DUELVARS_PRIZES
ld a, [hl]
pop hl
ld b, 0
push af
; loop each prize card
.loop
inc b
ld a, [wDuelInitialPrizes]
inc a
cp b
jr z, .done
pop af
srl a ; right shift prize cards left
push af
jr c, .not_taken
ld a, $e0 ; tile byte for empty slot
jr .draw
.not_taken
ld a, [wcc07]
or a
jr z, .asm_85b2
ld a, $f9
jr .draw
.asm_85b2
ld a, $dc ; tile byte for card
.draw
ld e, [hl]
inc hl
ld d, [hl]
inc hl
push hl
push bc
lb hl, $01, $02 ; card tile gfx
lb bc, 2, 2 ; rectangle size
call FillRectangle
ld a, [wConsole]
cp CONSOLE_CGB
jr nz, .not_cgb
ld a, $03 ; blue colour
lb bc, 2, 2
lb hl, 0, 0
call BankswitchVRAM1
call FillRectangle
call BankswitchVRAM0
.not_cgb
pop bc
pop hl
jr .loop
.done
pop af
ret
PrizeCardsCoordinateData_YourOrOppPlayArea:
; x and y coordinates for player prize cards
.player
db 2, 1
db 2, 3
db 4, 1
db 4, 3
db 6, 1
db 6, 3
; x and y coordinates for opponent prize cards
.opponent
db 9, 17
db 9, 15
db 7, 17
db 7, 15
db 5, 17
db 5, 15
SECTION "Bank 2@4629", ROMX[$4629], BANK[$2]
; calculates bits set up to the number of initial prizes, with upper 2 bits set, i.e:
; 6 prizes: a = %11111111
; 4 prizes: a = %11001111
; 3 prizes: a = %11000111
; 2 prizes: a = %11000011
GetDuelInitialPrizesUpperBitsSet:
ld a, [wDuelInitialPrizes]
ld b, $01
.loop
or a
jr z, .done
sla b
dec a
jr .loop
.done
dec b
ld a, b
or %11000000
ld [wDuelInitialPrizesUpperBitsSet], a
ret
; 0x863e
SECTION "Bank 2@4acb", ROMX[$4acb], BANK[$2]
LoadMenuCursorTile:
@@ -84,7 +213,7 @@ HandleMultiDirectionalMenu:
.make_bitmask_done
; check if the moved cursor refers to an existing item.
ld a, [wd0c4]
ld a, [wDuelInitialPrizesUpperBitsSet]
and b
jr nz, .sfx
ld a, [wd0d0]
+8 -8
View File
@@ -103,12 +103,12 @@ StartMenu_ContinueFromDiary:
call DoFrame
ld a, $0e
call Func_3154
ld a, VAR_3C
ld a, VAR_NPC_DECK_ID
call GetVarValue
ld [wcc16], a
ld [wNPCDuelDeckID], a
ld a, VAR_3D
call GetVarValue
ld [wdd03], a
ld [wDuelStartTheme], a
call Func_3087
scf
ret
@@ -876,11 +876,11 @@ Func_d299::
call Func_3154
ret
.asm_d357
ld a, [wcc16]
ld a, [wNPCDuelDeckID]
ld c, a
ld a, VAR_3C
ld a, VAR_NPC_DECK_ID
call SetVarValue
ld a, [wdd03]
ld a, [wDuelStartTheme]
ld c, a
ld a, VAR_3D
call SetVarValue
@@ -899,7 +899,7 @@ Func_d299::
call Func_e9a7
ld a, EVENT_F0
call ZeroOutEventValue
farcall $11, $4943
farcall PlayCurrentSong
ld a, $09
ld [wd582], a
xor a
@@ -1877,7 +1877,7 @@ GeneralVarMasks:
db $28, %11111111 ; VAR_39
db $29, %00000111 ; VAR_3A
db $2a, %11111111 ; VAR_3B
db $2b, %11111111 ; VAR_3C
db $2b, %11111111 ; VAR_NPC_DECK_ID
db $2c, %11111111 ; VAR_3D
db $33, %11111111 ; VAR_3E
+13 -5
View File
@@ -1635,6 +1635,12 @@ SetSpriteAnimAnimation::
ret
; 0x10cd9
SECTION "Bank 4@4cfe", ROMX[$4cfe], BANK[$4]
Func_10cfe:
ret
; 0x10cff
SECTION "Bank 4@4d17", ROMX[$4d17], BANK[$4]
Func_10d17:
@@ -1642,7 +1648,7 @@ Func_10d17:
push bc
push hl
sla b
sla b
sla b ; *4
inc hl
ld a, [hl] ; SPRITEANIMSTRUCT_1
and $fb
@@ -1681,6 +1687,7 @@ GetOWObjectSpriteAnimFlags::
SECTION "Bank 4@4d77", ROMX[$4d77], BANK[$4]
; a = OW_* constant
LoadOWObjectInMap::
push af
push bc
@@ -2253,6 +2260,7 @@ DrawWideTextBox_PrintTextWithYesOrNoMenu:
SECTION "Bank 4@507c", ROMX[$507c], BANK[$4]
; hl = text ID
Func_1107c:
push af
push bc
@@ -4598,10 +4606,10 @@ ShowProloguePortraitAndText:
ret
.Func_13bdf:
ld a, $3b
ld a, NPC_GR_1
lb bc, 7, 3
ld e, PORTRAITVARIANT_NORMAL
call Func_3ab2
call DrawNPCPortrait
ret
.PrintText:
@@ -4834,14 +4842,14 @@ PlayerGenderSelection:
.LoadPortraitsAndMenuParams:
; male portrait
ld a, PORTRAIT_00
ld a, PORTRAIT_MARK
ld b, 0
ld c, PORTRAITVARIANT_NORMAL
lb de, 2, 4
farcall DrawPortrait
; female portrait
ld a, PORTRAIT_01
ld a, PORTRAIT_MINT
ld b, 1
ld c, PORTRAITVARIANT_NORMAL
lb de, 12, 4
+131
View File
@@ -0,0 +1,131 @@
DeckAIPointerTable::
dw $41d6 ; UNKNOWN_SAMS_PRACTICE_DECK_ID
dw $4180 ; PLAYER_PRACTICE_DECK_ID
dw $4180 ; STARTER_DECK_ID
dw $4180 ; SWEAT_ANTI_GR1_DECK_ID
dw $4180 ; GIVE_IN_ANTI_GR2_DECK_ID
dw $4180 ; VENGEFUL_ANTI_GR3_DECK_ID
dw $4180 ; UNFORGIVING_ANTI_GR4_DECK_ID
dw $4180 ; SAMS_PRACTICE_DECK_ID
dw $4180 ; AARON_PRACTICE_DECK1_ID
dw $423f ; AARONS_STEP1_DECK_ID
dw $4180 ; AARON_PRACTICE_DECK2_ID
dw $4274 ; AARONS_STEP2_DECK_ID
dw $4180 ; AARON_PRACTICE_DECK3_ID
dw $42a9 ; AARONS_STEP3_DECK_ID
dw $4180 ; BRICK_WALK_DECK_ID
dw $4180 ; BENCH_TRAP_DECK_ID
dw $42e4 ; SKY_SPARK_DECK_ID
dw $4376 ; ELECTRIC_SELFDESTRUCT_DECK_ID
dw $4180 ; OVERFLOW_DECK_ID
dw $4180 ; TRIPLE_ZAPDOS_DECK_ID
dw $4180 ; I_LOVE_PIKACHU_DECK_ID
dw $4180 ; TEN_THOUSAND_VOLTS_DECK_ID
dw $41ab ; HAND_OVER_GR_DECK_ID
dw $4408 ; PSYCHIC_ELITE_DECK_ID
dw $4180 ; PSYCHOKINESIS_DECK_ID
dw $4180 ; PHANTOM_DECK_ID
dw $44aa ; PUPPET_MASTER_DECK_ID
dw $4532 ; EVEN3_YEARS_ON_A_ROCK_DECK_ID
dw $4180 ; ROLLING_STONE_DECK_ID
dw $4180 ; GREAT_EARTHQUAKE_DECK_ID
dw $4180 ; AWESOME_FOSSIL_DECK_ID
dw $45b4 ; RAGING_BILLOW_OF_FISTS_DECK_ID
dw $4180 ; YOU_CAN_DO_IT_MACHOP_DECK_ID
dw $4180 ; NEW_MACHOKE_DECK_ID
dw $41ab ; SKILLED_WARRIOR_DECK_ID
dw $4180 ; I_LOVE_TO_FIGHT_DECK_ID
dw $464c ; MAX_ENERGY_DECK_ID
dw $4180 ; REMAINING_GREEN_DECK_ID
dw $4180 ; POISON_CURSE_DECK_ID
dw $4180 ; GLITTERING_SCALES_DECK_ID
dw $4180 ; STEADY_INCREASE_DECK_ID
dw $46d4 ; DARK_SCIENCE_DECK_ID
dw $4180 ; NATURAL_SCIENCE_DECK_ID
dw $4180 ; POISONOUS_SWAMP_DECK_ID
dw $4180 ; GATHERING_NIDORAN_DECK_ID
dw $475d ; RAIN_DANCE_CONFUSION_DECK_ID
dw $4180 ; CONSERVING_WATER_DECK_ID
dw $4180 ; ENERGY_REMOVAL_DECK_ID
dw $47e5 ; SPLASHING_ABOUT_DECK_ID
dw $4843 ; BEACH_DECK_ID
dw $489d ; GO_ARCANINE_DECK_ID
dw $4180 ; FLAME_FESTIVAL_DECK_ID
dw $4180 ; IMMORTAL_FLAME_DECK_ID
dw $4180 ; ELECTRIC_CURRENT_SHOCK_DECK_ID
dw $4946 ; GREAT_ROCKET4_DECK_ID
dw $49ec ; GREAT_ROCKET1_DECK_ID
dw $4a95 ; GREAT_ROCKET2_DECK_ID
dw $4b56 ; GREAT_ROCKET3_DECK_ID
dw $4bfa ; GRAND_FIRE_DECK_ID
dw $4ca6 ; LEGENDARY_FOSSIL_DECK_ID
dw $4d2b ; WATER_LEGEND_DECK_ID
dw $4dc2 ; GREAT_DRAGON_DECK_ID
dw $4180 ; BUG_COLLECTING_DECK_ID
dw $4180 ; DEMONIC_FOREST_DECK_ID
dw $4180 ; STICKY_POISON_GAS_DECK_ID
dw $4e6c ; MAD_PETALS_DECK_ID
dw $4f02 ; DANGEROUS_BENCH_DECK_ID
dw $4180 ; CHAIN_LIGHTNING_BY_PIKACHU_DECK_ID
dw $4180 ; THIS_IS_THE_POWER_OF_ELECTRICITY_DECK_ID
dw $4f6c ; QUICK_ATTACK_DECK_ID
dw $4ffa ; COMPLETE_COMBUSTION_DECK_ID
dw $4180 ; FIREBALL_DECK_ID
dw $4180 ; EEVEE_SHOWDOWN_DECK_ID
dw $5057 ; GAZE_UPON_THE_POWER_OF_FIRE_DECK_ID
dw $4180 ; WHIRLPOOL_SHOWER_DECK_ID
dw $4180 ; PARALYZED_PARALYZED_DECK_ID
dw $4180 ; BENCH_CALL_DECK_ID
dw $50df ; WATER_STREAM_DECK_ID
dw $4180 ; ROCK_BLAST_DECK_ID
dw $4180 ; FULL_STRENGTH_DECK_ID
dw $515d ; RUNNING_WILD_DECK_ID
dw $4180 ; DIRECT_HIT_DECK_ID
dw $4180 ; SUPERDESTRUCTIVE_POWER_DECK_ID
dw $4180 ; BAD_DREAM_DECK_ID
dw $4180 ; POKEMON_POWER_DECK_ID
dw $51e4 ; SPIRITED_AWAY_DECK_ID
dw $5262 ; SNORLAX_GUARD_DECK_ID
dw $52d8 ; EYE_OF_THE_STORM_DECK_ID
dw $5368 ; SUDDEN_GROWTH_DECK_ID
dw $53fb ; VERY_RARE_CARD_DECK_ID
dw $5478 ; BAD_GUYS_DECK_ID
dw $5506 ; POISON_MIST_DECK_ID
dw $558c ; ULTRA_REMOVAL_DECK_ID
dw $5600 ; PSYCHIC_BATTLE_DECK_ID
dw $567c ; STOP_LIFE_DECK_ID
dw $5713 ; SCORCHER_DECK_ID
dw $57a7 ; TSUNAMI_STARTER_DECK_ID
dw $583b ; SMASH_TO_MINCEMEAT_DECK_ID
dw $4180 ; TEST_YOUR_LUCK_DECK_ID
dw $4180 ; PROTOHISTORIC_DECK_ID
dw $58d5 ; TEXTURE_TUNER7_DECK_ID
dw $596a ; COLORLESS_ENERGY_DECK_ID
dw $5a0e ; POWERFUL_POKEMON_DECK_ID
dw $4180 ; WEIRD_DECK_ID
dw $4180 ; STRANGE_DECK_ID
dw $4180 ; RONALDS_UNCOOL_DECK_ID
dw $4180 ; RONALDS_GRX_DECK_ID
dw $4180 ; RONALDS_POWER_DECK_ID
dw $5a8c ; RONALDS_PSYCHIC_DECK_ID
dw $5b1c ; RONALDS_ULTRA_DECK_ID
dw $5b98 ; EVERYBODYS_FRIEND_DECK_ID
dw $5c17 ; IMMORTAL_POKEMON_DECK_ID
dw $5cbb ; TORRENTIAL_FLOOD_DECK_ID
dw $5d46 ; TRAINER_IMPRISON_DECK_ID
dw $5dd7 ; BLAZING_FLAME_DECK_ID
dw $5e54 ; DAMAGE_CHAOS_DECK_ID
dw $5ee4 ; BIG_THUNDER_DECK_ID
dw $5f57 ; POWER_OF_DARKNESS_DECK_ID
dw $5fe1 ; POISON_STORM_DECK_ID
dw $4180
dw $4180
dw $40f4
dw $4102
dw $4102
dw $4129
dw $412d
dw $4131
dw $4135
dw $4139
; 0x14102
+28 -16
View File
@@ -3,6 +3,14 @@ SECTION "Bank 6@46a6", ROMX[$46a6], BANK[$6]
INCLUDE "engine/glossary.asm"
; 0x1897e
SECTION "Bank 6@4a14", ROMX[$4a14], BANK[$6]
Func_18a14::
xor a
ld [wd0d3], a
ret
; 0x18a19
SECTION "Bank 6@5657", ROMX[$5657], BANK[$6]
; if carry flag is set, only delays
@@ -618,10 +626,10 @@ InitSaveData:
or b
jr nz, .loop_collection
ld hl, sSavedDuel
ld hl, sCurrentDuel
xor a
ld [hli], a
ld [hli], a ; sSavedDuelChecksum
ld [hli], a ; sCurrentDuelChecksum
ld [hl], a
; clears Card Pop! names
@@ -643,21 +651,21 @@ InitSaveData:
; saved configuration options
ld a, 2
ld [sPrinterContrastLevel], a
ld a, $2
ld a, 2
ld [sTextSpeed], a
ld [wTextSpeed], a
; miscellaneous data
xor a
ld [s0a007], a
ld [s0a009], a
ld [sSkipDelayAllowed], a
ld [s0a004], a
ld [sTotalCardPopsDone], a
ld [sClearedGame], a
ld hl, s0a020
ld [hli], a
ld hl, sTotalDuelCounter
ld [hli], a
ld [hli], a
ld [hli], a ; sLinkDuelCounter
ld [hli], a
farcall Func_8f10
@@ -669,7 +677,7 @@ InitSaveData:
push de
push bc
push hl
ld [wcc16], a
ld [wNPCDuelDeckID], a
call LoadDeck
jr c, .done
call .LoadDeckName
@@ -698,7 +706,7 @@ InitSaveData:
ret
.LoadDeckName:
ld a, [wcc16]
ld a, [wNPCDuelDeckID]
sub 3
farcall LoadDeckIDData
ld hl, wOpponentDeckName
@@ -1035,9 +1043,9 @@ DoCardPop:
; hl = text ID
Func_19d24:
farcall Func_24158
farcall _DisplayCardDetailScreen
call ResumeSong
bank1call Func_4278
bank1call SetupDuel
call DisableLCD
bank1call OpenCardPage_FromHand
ret
@@ -1473,7 +1481,7 @@ FillCardPopSummary:
ld de, wCardPopSummary
call CopyWordFromHLToDE
call EnableSRAM
ld hl, s0a020
ld hl, sTotalDuelCounter
call CopyWordFromHLToDE
call DisableSRAM
call GetAmountOfCardsOwned
@@ -1550,7 +1558,7 @@ ViewCardPopRecords:
ret
.init_list
bank1call Func_4278
bank1call SetupDuel
call .DrawSlashAndTopLineSeparator
ld hl, .MenuParams
ld a, [wCurMenuItem]
@@ -1629,12 +1637,12 @@ ViewCardPopRecords:
ld a, [wCardPopRecordName + $d]
ld e, a
ld d, $00
ld hl, .portraits
ld hl, .DuelistIDs
add hl, de
ld a, [hl]
ld e, PORTRAITVARIANT_NORMAL
lb bc, 1, 2
call Func_3ab2
call DrawNPCPortrait
call EnableLCD
.loop_record_page_input
@@ -1710,8 +1718,12 @@ ViewCardPopRecords:
textitem 1, 15, Text026c
db $ff ; end
.portraits
db $00, $01, $04, $08, $09
.DuelistIDs
db NPC_MARK
db NPC_MINT
db NPC_RONALD
db NPC_IMAKUNI_BLACK
db NPC_IMAKUNI_RED
.DrawSlashAndTopLineSeparator:
lb bc, 17, 1
+353 -115
View File
@@ -157,18 +157,19 @@ Func_1c0ec::
farcall GetEventValue
jr nz, .female
; male
ld a, $00
ld a, NPC_MARK
jr .asm_1c0fd
.female
ld a, $01
ld a, NPC_MINT
.asm_1c0fd
pop hl
pop de
pop bc
ret
; converts a into PORTRAIT_* constant
Func_1c101::
; converts NPC_* in a
; into PORTRAIT_* constant
GetDuelistPortrait::
push bc
push hl
ld c, a
@@ -181,126 +182,126 @@ Func_1c101::
ret
.PortraitIDs
db PORTRAIT_00 ; $00
db PORTRAIT_01 ; $01
db PORTRAIT_02 ; $02
db PORTRAIT_03 ; $03
db PORTRAIT_04 ; $04
db PORTRAIT_05 ; $05
db PORTRAIT_06 ; $06
db PORTRAIT_07 ; $07
db PORTRAIT_5E ; $08
db PORTRAIT_5F ; $09
db PORTRAIT_08 ; $0a
db PORTRAIT_09 ; $0b
db PORTRAIT_0A ; $0c
db PORTRAIT_0B ; $0d
db PORTRAIT_0C ; $0e
db PORTRAIT_0D ; $0f
db PORTRAIT_0E ; $10
db PORTRAIT_0F ; $11
db PORTRAIT_10 ; $12
db PORTRAIT_11 ; $13
db PORTRAIT_12 ; $14
db PORTRAIT_13 ; $15
db PORTRAIT_14 ; $16
db PORTRAIT_15 ; $17
db PORTRAIT_16 ; $18
db PORTRAIT_17 ; $19
db PORTRAIT_18 ; $1a
db PORTRAIT_19 ; $1b
db PORTRAIT_1A ; $1c
db PORTRAIT_1B ; $1d
db PORTRAIT_1C ; $1e
db PORTRAIT_1D ; $1f
db PORTRAIT_1E ; $20
db PORTRAIT_1F ; $21
db PORTRAIT_20 ; $22
db PORTRAIT_21 ; $23
db PORTRAIT_22 ; $24
db PORTRAIT_23 ; $25
db PORTRAIT_24 ; $26
db PORTRAIT_25 ; $27
db PORTRAIT_26 ; $28
db PORTRAIT_27 ; $29
db PORTRAIT_28 ; $2a
db PORTRAIT_29 ; $2b
db PORTRAIT_2A ; $2c
db PORTRAIT_2B ; $2d
db PORTRAIT_2C ; $2e
db PORTRAIT_2D ; $2f
db PORTRAIT_2E ; $30
db PORTRAIT_2F ; $31
db PORTRAIT_30 ; $32
db PORTRAIT_31 ; $33
db PORTRAIT_32 ; $34
db PORTRAIT_33 ; $35
db PORTRAIT_34 ; $36
db PORTRAIT_35 ; $37
db PORTRAIT_36 ; $38
db PORTRAIT_37 ; $39
db PORTRAIT_38 ; $3a
db PORTRAIT_39 ; $3b
db PORTRAIT_3A ; $3c
db PORTRAIT_3B ; $3d
db PORTRAIT_3C ; $3e
db PORTRAIT_3D ; $3f
db PORTRAIT_3E ; $40
db PORTRAIT_3F ; $41
db PORTRAIT_40 ; $42
db PORTRAIT_41 ; $43
db PORTRAIT_42 ; $44
db PORTRAIT_43 ; $45
db PORTRAIT_44 ; $46
db PORTRAIT_45 ; $47
db PORTRAIT_46 ; $48
db PORTRAIT_47 ; $49
db PORTRAIT_48 ; $4a
db PORTRAIT_49 ; $4b
db PORTRAIT_4A ; $4c
db PORTRAIT_4B ; $4d
db PORTRAIT_4C ; $4e
db PORTRAIT_4D ; $4f
db PORTRAIT_4E ; $50
db PORTRAIT_4F ; $51
db PORTRAIT_50 ; $52
db PORTRAIT_51 ; $53
db PORTRAIT_52 ; $54
db PORTRAIT_53 ; $55
db PORTRAIT_54 ; $56
db PORTRAIT_55 ; $57
db PORTRAIT_56 ; $58
db PORTRAIT_57 ; $59
db PORTRAIT_58 ; $5a
db PORTRAIT_59 ; $5b
db PORTRAIT_5A ; $5c
db PORTRAIT_5B ; $5d
db PORTRAIT_5C ; $5e
db PORTRAIT_5D ; $5f
db PORTRAIT_MARK ; NPC_MARK
db PORTRAIT_MINT ; NPC_MINT
db PORTRAIT_MARK_LINK ; NPC_MARK_LINK
db PORTRAIT_MINT_LINK ; NPC_MINT_LINK
db PORTRAIT_RONALD ; NPC_RONALD
db PORTRAIT_SAM ; NPC_SAM
db PORTRAIT_AARON ; NPC_AARON
db PORTRAIT_ISHIHARA ; NPC_ISHIHARA
db PORTRAIT_IMAKUNI_BLACK ; NPC_IMAKUNI_BLACK
db PORTRAIT_IMAKUNI_RED ; NPC_IMAKUNI_RED
db PORTRAIT_ISAAC ; NPC_ISAAC
db PORTRAIT_JENNIFER ; NPC_JENNIFER
db PORTRAIT_NICHOLAS ; NPC_NICHOLAS
db PORTRAIT_BRANDON ; NPC_BRANDON
db PORTRAIT_MURRAY ; NPC_MURRAY
db PORTRAIT_STEPHANIE ; NPC_STEPHANIE
db PORTRAIT_DANIEL ; NPC_DANIEL
db PORTRAIT_ROBERT ; NPC_ROBERT
db PORTRAIT_GENE ; NPC_GENE
db PORTRAIT_MATTHEW ; NPC_MATTHEW
db PORTRAIT_RYAN ; NPC_RYAN
db PORTRAIT_ANDREW ; NPC_ANDREW
db PORTRAIT_MITCH ; NPC_MITCH
db PORTRAIT_MICHAEL ; NPC_MICHAEL
db PORTRAIT_CHRIS ; NPC_CHRIS
db PORTRAIT_JESSICA ; NPC_JESSICA
db PORTRAIT_NIKKI ; NPC_NIKKI
db PORTRAIT_BRITTANY ; NPC_BRITTANY
db PORTRAIT_KRISTIN ; NPC_KRISTIN
db PORTRAIT_HEATHER ; NPC_HEATHER
db PORTRAIT_RICK ; NPC_RICK
db PORTRAIT_JOSEPH ; NPC_JOSEPH
db PORTRAIT_DAVID ; NPC_DAVID
db PORTRAIT_ERIK ; NPC_ERIK
db PORTRAIT_AMY ; NPC_AMY
db PORTRAIT_JOSHUA ; NPC_JOSHUA
db PORTRAIT_SARA ; NPC_SARA
db PORTRAIT_AMANDA ; NPC_AMANDA
db PORTRAIT_KEN ; NPC_KEN
db PORTRAIT_JOHN ; NPC_JOHN
db PORTRAIT_ADAM ; NPC_ADAM
db PORTRAIT_JONATHAN ; NPC_JONATHAN
db PORTRAIT_COURTNEY ; NPC_COURTNEY
db PORTRAIT_STEVE ; NPC_STEVE
db PORTRAIT_JACK ; NPC_JACK
db PORTRAIT_ROD ; NPC_ROD
db PORTRAIT_EIJI ; NPC_EIJI
db PORTRAIT_MAGICIAN ; NPC_MAGICIAN
db PORTRAIT_YUI ; NPC_YUI
db PORTRAIT_TOSHIRON ; NPC_TOSHIRON
db PORTRAIT_PIERROT ; NPC_PIERROT
db PORTRAIT_ANNA ; NPC_ANNA
db PORTRAIT_DEE ; NPC_DEE
db PORTRAIT_MASQUERADE ; NPC_MASQUERADE
db PORTRAIT_PAWN ; NPC_PAWN
db PORTRAIT_KNIGHT ; NPC_KNIGHT
db PORTRAIT_BISHOP ; NPC_BISHOP
db PORTRAIT_ROOK ; NPC_ROOK
db PORTRAIT_QUEEN ; NPC_QUEEN
db PORTRAIT_GR_1 ; NPC_GR_1
db PORTRAIT_GR_2 ; NPC_GR_2
db PORTRAIT_GR_3 ; NPC_GR_3
db PORTRAIT_GR_4 ; NPC_GR_4
db PORTRAIT_MIDORI ; NPC_MIDORI
db PORTRAIT_YUUTA ; NPC_YUUTA
db PORTRAIT_MIYUKI ; NPC_MIYUKI
db PORTRAIT_MORINO ; NPC_MORINO
db PORTRAIT_RENNA ; NPC_RENNA
db PORTRAIT_ICHIKAWA ; NPC_ICHIKAWA
db PORTRAIT_CATHERINE ; NPC_CATHERINE
db PORTRAIT_TAP ; NPC_TAP
db PORTRAIT_JES ; NPC_JES
db PORTRAIT_YUKI ; NPC_YUKI
db PORTRAIT_SHOKO ; NPC_SHOKO
db PORTRAIT_HIDERO ; NPC_HIDERO
db PORTRAIT_MIYAJIMA ; NPC_MIYAJIMA
db PORTRAIT_SENTA ; NPC_SENTA
db PORTRAIT_AIRA ; NPC_AIRA
db PORTRAIT_KANOKO ; NPC_KANOKO
db PORTRAIT_GODA ; NPC_GODA
db PORTRAIT_GRACE ; NPC_GRACE
db PORTRAIT_KAMIYA ; NPC_KAMIYA
db PORTRAIT_MIWA ; NPC_MIWA
db PORTRAIT_KEVIN ; NPC_KEVIN
db PORTRAIT_YOSUKE ; NPC_YOSUKE
db PORTRAIT_RYOKO ; NPC_RYOKO
db PORTRAIT_MAMI ; NPC_MAMI
db PORTRAIT_NISHIJIMA ; NPC_NISHIJIMA
db PORTRAIT_ISHII ; NPC_ISHII
db PORTRAIT_SAMEJIMA ; NPC_SAMEJIMA
db PORTRAIT_KANZAKI ; NPC_KANZAKI
db PORTRAIT_RUI ; NPC_RUI
db PORTRAIT_BIRURITCHI ; NPC_BIRURITCHI
db PORTRAIT_GR_X ; NPC_GR_X
db PORTRAIT_TOBI_CHAN ; NPC_TOBI_CHAN
db PORTRAIT_DR_MASON ; NPC_DR_MASON
; 0x1c116
SECTION "Bank 7@4395", ROMX[$4395], BANK[$7]
Func_1c395:
LoadSavedOptions:
call EnableSRAM
call Func_1c3a8
call Func_1c3b9
call Func_1c3c7
call Func_1c3ce
call .LoadTextSpeed
call .LoadDuelAnimation
call .LoadCoinTossAnimation
call .LoadTextFrameColor
call DisableSRAM
ret
Func_1c3a8:
.LoadTextSpeed:
ld a, [sTextSpeed]
ld [wTextSpeed], a
call Func_1c448
ld b, a
ld a, $04
ld a, 4
sub b
ld [wd9d5], a
ret
Func_1c3b9:
.LoadDuelAnimation:
ld a, [s0a007]
ld [wd9d3], a
srl a
@@ -308,12 +309,12 @@ Func_1c3b9:
ld [wdc0f], a
ret
Func_1c3c7:
.LoadCoinTossAnimation:
ld a, [s0a00b]
ld [wd9d4], a
ret
Func_1c3ce:
.LoadTextFrameColor:
ld a, [sTextBoxFrameColor]
ld [wTextBoxFrameColor], a
ret
@@ -350,7 +351,7 @@ Func_1c3f9:
ld hl, .data
add hl, bc
ld a, [hl]
ld [s0a009], a
ld [sSkipDelayAllowed], a
ret
.data
@@ -1655,7 +1656,7 @@ ShowStartMenu:
add 0
lb bc, 13, 1
ld e, PORTRAITVARIANT_NORMAL
call Func_3ab2
call DrawNPCPortrait
; print player's name
farcall LoadPlayerName
@@ -2178,11 +2179,11 @@ Func_1d475:
farcall Func_111f0
call Func_1c425
call Func_1c3d5
call Func_1c395
call LoadSavedOptions
ret
.Read:
call Func_1c395
call LoadSavedOptions
ld a, $01
farcall Func_108c9
ret
@@ -2293,7 +2294,7 @@ Func_1dfb9::
ld [wdce2], a
ld [wdc59], a
ld [wdce8], a
ld [wdce5], a
ld [wDuelAnimLocationParam], a
ld [wdcf0], a
ld [wdc57], a
ld a, $ff
@@ -2319,6 +2320,243 @@ Func_1e419:
ret
; 0x1e420
SECTION "Bank 7@65a2", ROMX[$65a2], BANK[$7]
; returns carry if player lost
Func_1e5a2::
push bc
push de
push hl
ld a, EVENT_F0
farcall GetEventValue
jr nz, .from_sram
call .RunDuel
jr .check_result
.from_sram
call RunDuelFromSRAM
.check_result
scf
ccf
ld a, [wDuelResult]
and a
jr z, .won
scf ; lost
.won
pop hl
pop de
pop bc
ret
.RunDuel:
farcall Func_1022a
call Func_1e73a
ld a, EVENT_EB
farcall GetEventValue
jr nz, .start_duel
call Func_1e60c
ld a, [wSpecialRule]
and a
jr z, .start_duel
call ShowSpecialRuleDescription
.start_duel
bank1call StartDuel_VSAIOpp
farcall Func_10252
ret
; 0x1e5e5
SECTION "Bank 7@65f8", ROMX[$65f8], BANK[$7]
RunDuelFromSRAM:
farcall Func_10cfe
farcall Func_1109f
farcall Func_1022a
bank1call StartDuelFromSRAM
farcall Func_10252
ret
Func_1e60c:
push af
push bc
push de
push hl
farcall ClearSpriteAnimsAndSetInitialGraphicsConfiguration
; show opponent portrait
ld a, [wOpponentNPCID]
lb bc, 7, 3
ld e, PORTRAITVARIANT_NORMAL
call DrawNPCPortrait
farcall SetFrameFuncAndFadeFromWhite
; play duel start theme
ld a, [wDuelStartTheme]
push af
ld a, a ; wow
call Func_3d09
pop af
; print duelist intro text
ld a, [wOpponentName + 0]
ld [wTxRam2 + 0], a
ld a, [wOpponentName + 1]
ld [wTxRam2 + 1], a
ld a, [wOpponentDeckName + 0]
ld [wTxRam2_b + 0], a
ld a, [wOpponentDeckName + 1]
ld [wTxRam2_b + 1], a
ld a, [wcd0f]
dec a
add a ; *2
ld c, a
ld b, $00
ld hl, .DuelistIntroTextIDs
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
farcall Func_1107c
call WaitForSongToFinish
call WaitForWideTextBoxInput
farcall FadeToWhiteAndUnsetFrameFunc
pop hl
pop de
pop bc
pop af
ret
.DuelistIntroTextIDs
tx Text0651
tx Text0652
tx Text0653
tx Text0654
tx Text0655
tx Text0656
tx Text0657
tx Text0658
tx Text0659
tx Text065a
tx Text065b
tx Text065c
tx Text065d
tx Text065e
tx Text065f
tx Text0660
tx Text0661
tx Text0662
tx Text0663
tx Text0664
tx Text0665
tx Text0666
tx Text0667
tx Text0668
tx Text0669
tx Text066a
tx Text066b
tx Text066c
tx Text066d
tx Text066e
tx Text066f
tx Text0670
tx Text0671
tx Text0672
tx Text0673
tx Text0674
tx Text0675
tx Text0676
tx Text0677
tx Text0678
ShowSpecialRuleDescription:
push af
push bc
push de
push hl
farcall ClearSpriteAnimsAndSetInitialGraphicsConfiguration
call .DrawScreen
farcall SetFrameFuncAndFadeFromWhite
call WaitForWideTextBoxInput
farcall FadeToWhiteAndUnsetFrameFunc
pop hl
pop de
pop bc
pop af
ret
.DrawScreen:
ld a, [wSpecialRule]
add a
add a
ld c, a ; *4
ld b, $00
ld hl, .TitleAndDescriptionTextIDs
add hl, bc
; draws scene with text box drawn around
lb de, 0, 0
lb bc, 20, 6
call DrawRegularTextBoxVRAM0
ld a, SCENE_SPECIAL_RULES
lb bc, 5, 1
call LoadScene
; print title
push hl
ld a, [hli]
ld h, [hl]
ld l, a
lb de, 3, 4
call Func_35af
pop hl
; print description
inc hl
inc hl
lb de, 0, 6
lb bc, 20, 12
call DrawRegularTextBoxVRAM0
ld a, [hli]
ld h, [hl]
ld l, a
lb de, 1, 8
call Func_35af
ret
.TitleAndDescriptionTextIDs:
; title, description
dw NULL, NULL ; NO_SPECIAL_RULE
tx Text063b, Text063c ; CHLOROPHYLL
tx Text063d, Text063e ; THUNDER_CHARGE
tx Text063f, Text0640 ; FLAME_ARMOR
tx Text0641, Text0642 ; SMALL_BENCH
tx Text0643, Text0644 ; RUNNING_WATER
tx Text0645, Text0646 ; EARTH_POWER
tx Text0647, Text0648 ; LOW_RESISTANCE
tx Text0649, Text064a ; ENERGY_RETURN
tx Text064b, Text064c ; TOUGH_ESCAPE
tx Text064d, Text064e ; BLACK_HOLE
; 0x1e73a
SECTION "Bank 7@673a", ROMX[$673a], BANK[$7]
Func_1e73a:
push af
push bc
push de
push hl
ld a, [wNPCDuelDeckID]
push af
farcall LoadDeckIDData
pop af
ld [wNPCDuelDeckID], a
pop hl
pop de
pop bc
pop af
ret
; 0x1e74f
SECTION "Bank 7@6767", ROMX[$6767], BANK[$7]
Func_1e767:
+1759 -776
View File
File diff suppressed because it is too large Load Diff
+6 -1
View File
@@ -490,7 +490,12 @@ PlayAfterCurrentSong:
ld [wdd04], a
call PlaySong
ret
; 0x44943
PlayCurrentSong:
ld a, [wCurMusic]
call PlaySong
ret
; 0x4494a
SECTION "Bank 11@4954", ROMX[$4954], BANK[$11]
+1 -1
View File
@@ -831,7 +831,7 @@ _LoadOWObject:
ld [hli], a ; OWOBJSTRUCT_4
ld [hli], a ; OWOBJSTRUCT_5
ld [hli], a ; OWOBJSTRUCT_6
ld [hl], a ; OWOBJSTRUCT_7
ld [hl], a ;
pop hl
pop de
pop bc
+96 -96
View File
@@ -305,99 +305,99 @@ Data_13005b::
dw OWSPRITE_STRONGHOLD_PLATFORM ; OW_STRONGHOLD_PLATFORM
Portraits:
dw TILESET_MARK_PORTRAIT, PALETTE_078, TILEMAP_0D3, TILEMAP_0D3, TILEMAP_0D3 ; PORTRAIT_00
dw TILESET_MINT_PORTRAIT, PALETTE_079, TILEMAP_0D4, TILEMAP_0D4, TILEMAP_0D4 ; PORTRAIT_01
dw TILESET_MARK_LINK_PORTRAIT, PALETTE_07A, TILEMAP_0D5, TILEMAP_0D5, TILEMAP_0D5 ; PORTRAIT_02
dw TILESET_MINT_LINK_PORTRAIT, PALETTE_07B, TILEMAP_0D6, TILEMAP_0D6, TILEMAP_0D6 ; PORTRAIT_03
dw TILESET_RONALD_PORTRAIT, PALETTE_07C, TILEMAP_0D7, TILEMAP_0D8, TILEMAP_0D9 ; PORTRAIT_04
dw TILESET_SAM_PORTRAIT, PALETTE_07D, TILEMAP_0DA, TILEMAP_0DB, TILEMAP_0DC ; PORTRAIT_05
dw TILESET_AARON_PORTRAIT, PALETTE_07E, TILEMAP_0DD, TILEMAP_0DE, TILEMAP_0DF ; PORTRAIT_06
dw TILESET_ISHIHARA_PORTRAIT, PALETTE_07F, TILEMAP_0E0, TILEMAP_0E1, TILEMAP_0E2 ; PORTRAIT_07
dw TILESET_ISAAC_PORTRAIT, PALETTE_082, TILEMAP_0E9, TILEMAP_0EA, TILEMAP_0EB ; PORTRAIT_08
dw TILESET_JENNIFER_PORTRAIT, PALETTE_083, TILEMAP_0EC, TILEMAP_0ED, TILEMAP_0EE ; PORTRAIT_09
dw TILESET_NICHOLAS_PORTRAIT, PALETTE_084, TILEMAP_0EF, TILEMAP_0F0, TILEMAP_0F1 ; PORTRAIT_0A
dw TILESET_BRANDON_PORTRAIT, PALETTE_085, TILEMAP_0F2, TILEMAP_0F3, TILEMAP_0F4 ; PORTRAIT_0B
dw TILESET_MURRAY_PORTRAIT, PALETTE_086, TILEMAP_0F5, TILEMAP_0F6, TILEMAP_0F7 ; PORTRAIT_0C
dw TILESET_STEPHANIE_PORTRAIT, PALETTE_087, TILEMAP_0F8, TILEMAP_0F9, TILEMAP_0FA ; PORTRAIT_0D
dw TILESET_DANIEL_PORTRAIT, PALETTE_088, TILEMAP_0FB, TILEMAP_0FC, TILEMAP_0FD ; PORTRAIT_0E
dw TILESET_ROBERT_PORTRAIT, PALETTE_089, TILEMAP_0FE, TILEMAP_0FF, TILEMAP_100 ; PORTRAIT_0F
dw TILESET_GENE_PORTRAIT, PALETTE_08A, TILEMAP_101, TILEMAP_102, TILEMAP_103 ; PORTRAIT_10
dw TILESET_MATTHEW_PORTRAIT, PALETTE_08B, TILEMAP_104, TILEMAP_105, TILEMAP_106 ; PORTRAIT_11
dw TILESET_RYAN_PORTRAIT, PALETTE_08C, TILEMAP_107, TILEMAP_108, TILEMAP_109 ; PORTRAIT_12
dw TILESET_ANDREW_PORTRAIT, PALETTE_08D, TILEMAP_10A, TILEMAP_10B, TILEMAP_10C ; PORTRAIT_13
dw TILESET_MITCH_PORTRAIT, PALETTE_08E, TILEMAP_10D, TILEMAP_10E, TILEMAP_10F ; PORTRAIT_14
dw TILESET_MICHAEL_PORTRAIT, PALETTE_08F, TILEMAP_110, TILEMAP_111, TILEMAP_112 ; PORTRAIT_15
dw TILESET_CHRIS_PORTRAIT, PALETTE_090, TILEMAP_113, TILEMAP_114, TILEMAP_115 ; PORTRAIT_16
dw TILESET_JESSICA_PORTRAIT, PALETTE_091, TILEMAP_116, TILEMAP_117, TILEMAP_118 ; PORTRAIT_17
dw TILESET_NIKKI_PORTRAIT, PALETTE_092, TILEMAP_119, TILEMAP_11A, TILEMAP_11B ; PORTRAIT_18
dw TILESET_BRITTANY_PORTRAIT, PALETTE_093, TILEMAP_11C, TILEMAP_11D, TILEMAP_11E ; PORTRAIT_19
dw TILESET_KRISTIN_PORTRAIT, PALETTE_094, TILEMAP_11F, TILEMAP_120, TILEMAP_121 ; PORTRAIT_1A
dw TILESET_HEATHER_PORTRAIT, PALETTE_095, TILEMAP_122, TILEMAP_123, TILEMAP_124 ; PORTRAIT_1B
dw TILESET_RICK_PORTRAIT, PALETTE_096, TILEMAP_125, TILEMAP_126, TILEMAP_127 ; PORTRAIT_1C
dw TILESET_JOSEPH_PORTRAIT, PALETTE_097, TILEMAP_128, TILEMAP_129, TILEMAP_12A ; PORTRAIT_1D
dw TILESET_DAVID_PORTRAIT, PALETTE_098, TILEMAP_12B, TILEMAP_12C, TILEMAP_12D ; PORTRAIT_1E
dw TILESET_ERIK_PORTRAIT, PALETTE_099, TILEMAP_12E, TILEMAP_12F, TILEMAP_130 ; PORTRAIT_1F
dw TILESET_AMY_PORTRAIT, PALETTE_09A, TILEMAP_131, TILEMAP_132, TILEMAP_133 ; PORTRAIT_20
dw TILESET_JOSHUA_PORTRAIT, PALETTE_09B, TILEMAP_134, TILEMAP_135, TILEMAP_136 ; PORTRAIT_21
dw TILESET_SARA_PORTRAIT, PALETTE_09C, TILEMAP_137, TILEMAP_138, TILEMAP_139 ; PORTRAIT_22
dw TILESET_AMANDA_PORTRAIT, PALETTE_09D, TILEMAP_13A, TILEMAP_13B, TILEMAP_13C ; PORTRAIT_23
dw TILESET_KEN_PORTRAIT, PALETTE_09E, TILEMAP_13D, TILEMAP_13E, TILEMAP_13F ; PORTRAIT_24
dw TILESET_JOHN_PORTRAIT, PALETTE_09F, TILEMAP_140, TILEMAP_141, TILEMAP_142 ; PORTRAIT_25
dw TILESET_ADAM_PORTRAIT, PALETTE_0A0, TILEMAP_143, TILEMAP_144, TILEMAP_145 ; PORTRAIT_26
dw TILESET_JONATHAN_PORTRAIT, PALETTE_0A1, TILEMAP_146, TILEMAP_147, TILEMAP_148 ; PORTRAIT_27
dw TILESET_COURTNEY_PORTRAIT, PALETTE_0A2, TILEMAP_149, TILEMAP_14A, TILEMAP_14B ; PORTRAIT_28
dw TILESET_STEVE_PORTRAIT, PALETTE_0A3, TILEMAP_14C, TILEMAP_14D, TILEMAP_14E ; PORTRAIT_29
dw TILESET_JACK_PORTRAIT, PALETTE_0A4, TILEMAP_14F, TILEMAP_150, TILEMAP_151 ; PORTRAIT_2A
dw TILESET_ROD_PORTRAIT, PALETTE_0A5, TILEMAP_152, TILEMAP_153, TILEMAP_154 ; PORTRAIT_2B
dw TILESET_EIJI_PORTRAIT, PALETTE_0A6, TILEMAP_155, TILEMAP_156, TILEMAP_157 ; PORTRAIT_2C
dw TILESET_MAGICIAN_PORTRAIT, PALETTE_0A7, TILEMAP_158, TILEMAP_159, TILEMAP_15A ; PORTRAIT_2D
dw TILESET_YUI_PORTRAIT, PALETTE_0A8, TILEMAP_15B, TILEMAP_15C, TILEMAP_15D ; PORTRAIT_2E
dw TILESET_TOSHIRON_PORTRAIT, PALETTE_0A9, TILEMAP_15E, TILEMAP_15F, TILEMAP_160 ; PORTRAIT_2F
dw TILESET_PIERROT_PORTRAIT, PALETTE_0AA, TILEMAP_161, TILEMAP_162, TILEMAP_163 ; PORTRAIT_30
dw TILESET_ANNA_PORTRAIT, PALETTE_0AB, TILEMAP_164, TILEMAP_165, TILEMAP_166 ; PORTRAIT_31
dw TILESET_DEE_PORTRAIT, PALETTE_0AC, TILEMAP_167, TILEMAP_168, TILEMAP_169 ; PORTRAIT_32
dw TILESET_MASQUERADE_PORTRAIT, PALETTE_0AD, TILEMAP_16A, TILEMAP_16B, TILEMAP_16C ; PORTRAIT_33
dw TILESET_PAWN_PORTRAIT, PALETTE_0AE, TILEMAP_16D, TILEMAP_16E, TILEMAP_16F ; PORTRAIT_34
dw TILESET_KNIGHT_PORTRAIT, PALETTE_0AF, TILEMAP_170, TILEMAP_171, TILEMAP_172 ; PORTRAIT_35
dw TILESET_BISHOP_PORTRAIT, PALETTE_0B0, TILEMAP_173, TILEMAP_174, TILEMAP_175 ; PORTRAIT_36
dw TILESET_ROOK_PORTRAIT, PALETTE_0B1, TILEMAP_176, TILEMAP_177, TILEMAP_178 ; PORTRAIT_37
dw TILESET_QUEEN_PORTRAIT, PALETTE_0B2, TILEMAP_179, TILEMAP_17A, TILEMAP_17B ; PORTRAIT_38
dw TILESET_GR_1_PORTRAIT, PALETTE_0B3, TILEMAP_17C, TILEMAP_17D, TILEMAP_17E ; PORTRAIT_39
dw TILESET_GR_2_PORTRAIT, PALETTE_0B4, TILEMAP_17F, TILEMAP_180, TILEMAP_181 ; PORTRAIT_3A
dw TILESET_GR_3_PORTRAIT, PALETTE_0B5, TILEMAP_182, TILEMAP_183, TILEMAP_184 ; PORTRAIT_3B
dw TILESET_GR_4_PORTRAIT, PALETTE_0B6, TILEMAP_185, TILEMAP_186, TILEMAP_187 ; PORTRAIT_3C
dw TILESET_MIDORI_PORTRAIT, PALETTE_0B7, TILEMAP_188, TILEMAP_189, TILEMAP_18A ; PORTRAIT_3D
dw TILESET_YUUTA_PORTRAIT, PALETTE_0B8, TILEMAP_18B, TILEMAP_18C, TILEMAP_18D ; PORTRAIT_3E
dw TILESET_MIYUKI_PORTRAIT, PALETTE_0B9, TILEMAP_18E, TILEMAP_18F, TILEMAP_190 ; PORTRAIT_3F
dw TILESET_MORINO_PORTRAIT, PALETTE_0BA, TILEMAP_191, TILEMAP_192, TILEMAP_193 ; PORTRAIT_40
dw TILESET_RENNA_PORTRAIT, PALETTE_0BB, TILEMAP_194, TILEMAP_195, TILEMAP_196 ; PORTRAIT_41
dw TILESET_ICHIKAWA_PORTRAIT, PALETTE_0BC, TILEMAP_197, TILEMAP_198, TILEMAP_199 ; PORTRAIT_42
dw TILESET_CATHERINE_PORTRAIT, PALETTE_0BD, TILEMAP_19A, TILEMAP_19B, TILEMAP_19C ; PORTRAIT_43
dw TILESET_TAP_PORTRAIT, PALETTE_0BE, TILEMAP_19D, TILEMAP_19E, TILEMAP_19F ; PORTRAIT_44
dw TILESET_JES_PORTRAIT, PALETTE_0BF, TILEMAP_1A0, TILEMAP_1A1, TILEMAP_1A2 ; PORTRAIT_45
dw TILESET_YUKI_PORTRAIT, PALETTE_0C0, TILEMAP_1A3, TILEMAP_1A4, TILEMAP_1A5 ; PORTRAIT_46
dw TILESET_SHOKO_PORTRAIT, PALETTE_0C1, TILEMAP_1A6, TILEMAP_1A7, TILEMAP_1A8 ; PORTRAIT_47
dw TILESET_HIDERO_PORTRAIT, PALETTE_0C2, TILEMAP_1A9, TILEMAP_1AA, TILEMAP_1AB ; PORTRAIT_48
dw TILESET_MIYAJIMA_PORTRAIT, PALETTE_0C3, TILEMAP_1AC, TILEMAP_1AD, TILEMAP_1AE ; PORTRAIT_49
dw TILESET_SENTA_PORTRAIT, PALETTE_0C4, TILEMAP_1AF, TILEMAP_1B0, TILEMAP_1B1 ; PORTRAIT_4A
dw TILESET_AIRA_PORTRAIT, PALETTE_0C5, TILEMAP_1B2, TILEMAP_1B3, TILEMAP_1B4 ; PORTRAIT_4B
dw TILESET_KANOKO_PORTRAIT, PALETTE_0C6, TILEMAP_1B5, TILEMAP_1B6, TILEMAP_1B7 ; PORTRAIT_4C
dw TILESET_GODA_PORTRAIT, PALETTE_0C7, TILEMAP_1B8, TILEMAP_1B9, TILEMAP_1BA ; PORTRAIT_4D
dw TILESET_GRACE_PORTRAIT, PALETTE_0C8, TILEMAP_1BB, TILEMAP_1BC, TILEMAP_1BD ; PORTRAIT_4E
dw TILESET_KAMIYA_PORTRAIT, PALETTE_0C9, TILEMAP_1BE, TILEMAP_1BF, TILEMAP_1C0 ; PORTRAIT_4F
dw TILESET_MIWA_PORTRAIT, PALETTE_0CA, TILEMAP_1C1, TILEMAP_1C2, TILEMAP_1C3 ; PORTRAIT_50
dw TILESET_KEVIN_PORTRAIT, PALETTE_0CB, TILEMAP_1C4, TILEMAP_1C5, TILEMAP_1C6 ; PORTRAIT_51
dw TILESET_YOSUKE_PORTRAIT, PALETTE_0CC, TILEMAP_1C7, TILEMAP_1C8, TILEMAP_1C9 ; PORTRAIT_52
dw TILESET_RYOKO_PORTRAIT, PALETTE_0CD, TILEMAP_1CA, TILEMAP_1CB, TILEMAP_1CC ; PORTRAIT_53
dw TILESET_MAMI_PORTRAIT, PALETTE_0CE, TILEMAP_1CD, TILEMAP_1CE, TILEMAP_1CF ; PORTRAIT_54
dw TILESET_NISHIJIMA_PORTRAIT, PALETTE_0CF, TILEMAP_1D0, TILEMAP_1D1, TILEMAP_1D2 ; PORTRAIT_55
dw TILESET_ISHII_PORTRAIT, PALETTE_0D0, TILEMAP_1D3, TILEMAP_1D4, TILEMAP_1D5 ; PORTRAIT_56
dw TILESET_SAMEJIMA_PORTRAIT, PALETTE_0D1, TILEMAP_1D6, TILEMAP_1D7, TILEMAP_1D8 ; PORTRAIT_57
dw TILESET_KANZAKI_PORTRAIT, PALETTE_0D2, TILEMAP_1D9, TILEMAP_1DA, TILEMAP_1DB ; PORTRAIT_58
dw TILESET_RUI_PORTRAIT, PALETTE_0D3, TILEMAP_1DC, TILEMAP_1DD, TILEMAP_1DE ; PORTRAIT_59
dw TILESET_BIRURITCHI_PORTRAIT, PALETTE_0D4, TILEMAP_1DF, TILEMAP_1E0, TILEMAP_1E1 ; PORTRAIT_5A
dw TILESET_GR_X_PORTRAIT, PALETTE_0D5, TILEMAP_1E2, TILEMAP_1E3, TILEMAP_1E4 ; PORTRAIT_5B
dw TILESET_TOBI_CHAN_PORTRAIT, PALETTE_0D6, TILEMAP_1E5, TILEMAP_1E6, TILEMAP_1E7 ; PORTRAIT_5C
dw TILESET_DR_MASON_PORTRAIT, PALETTE_0D7, TILEMAP_1E8, TILEMAP_1E9, TILEMAP_1EA ; PORTRAIT_5D
dw TILESET_IMAKUNI_BLACK_PORTRAIT, PALETTE_080, TILEMAP_0E3, TILEMAP_0E4, TILEMAP_0E5 ; PORTRAIT_5E
dw TILESET_IMAKUNI_RED_PORTRAIT, PALETTE_081, TILEMAP_0E6, TILEMAP_0E7, TILEMAP_0E8 ; PORTRAIT_5F
dw TILESET_MARK_PORTRAIT, PALETTE_078, TILEMAP_0D3, TILEMAP_0D3, TILEMAP_0D3 ; PORTRAIT_MARK
dw TILESET_MINT_PORTRAIT, PALETTE_079, TILEMAP_0D4, TILEMAP_0D4, TILEMAP_0D4 ; PORTRAIT_MINT
dw TILESET_MARK_LINK_PORTRAIT, PALETTE_07A, TILEMAP_0D5, TILEMAP_0D5, TILEMAP_0D5 ; PORTRAIT_MARK_LINK
dw TILESET_MINT_LINK_PORTRAIT, PALETTE_07B, TILEMAP_0D6, TILEMAP_0D6, TILEMAP_0D6 ; PORTRAIT_MINT_LINK
dw TILESET_RONALD_PORTRAIT, PALETTE_07C, TILEMAP_0D7, TILEMAP_0D8, TILEMAP_0D9 ; PORTRAIT_RONALD
dw TILESET_SAM_PORTRAIT, PALETTE_07D, TILEMAP_0DA, TILEMAP_0DB, TILEMAP_0DC ; PORTRAIT_SAM
dw TILESET_AARON_PORTRAIT, PALETTE_07E, TILEMAP_0DD, TILEMAP_0DE, TILEMAP_0DF ; PORTRAIT_AARON
dw TILESET_ISHIHARA_PORTRAIT, PALETTE_07F, TILEMAP_0E0, TILEMAP_0E1, TILEMAP_0E2 ; PORTRAIT_ISHIHARA
dw TILESET_ISAAC_PORTRAIT, PALETTE_082, TILEMAP_0E9, TILEMAP_0EA, TILEMAP_0EB ; PORTRAIT_ISAAC
dw TILESET_JENNIFER_PORTRAIT, PALETTE_083, TILEMAP_0EC, TILEMAP_0ED, TILEMAP_0EE ; PORTRAIT_JENNIFER
dw TILESET_NICHOLAS_PORTRAIT, PALETTE_084, TILEMAP_0EF, TILEMAP_0F0, TILEMAP_0F1 ; PORTRAIT_NICHOLAS
dw TILESET_BRANDON_PORTRAIT, PALETTE_085, TILEMAP_0F2, TILEMAP_0F3, TILEMAP_0F4 ; PORTRAIT_BRANDON
dw TILESET_MURRAY_PORTRAIT, PALETTE_086, TILEMAP_0F5, TILEMAP_0F6, TILEMAP_0F7 ; PORTRAIT_MURRAY
dw TILESET_STEPHANIE_PORTRAIT, PALETTE_087, TILEMAP_0F8, TILEMAP_0F9, TILEMAP_0FA ; PORTRAIT_STEPHANIE
dw TILESET_DANIEL_PORTRAIT, PALETTE_088, TILEMAP_0FB, TILEMAP_0FC, TILEMAP_0FD ; PORTRAIT_DANIEL
dw TILESET_ROBERT_PORTRAIT, PALETTE_089, TILEMAP_0FE, TILEMAP_0FF, TILEMAP_100 ; PORTRAIT_ROBERT
dw TILESET_GENE_PORTRAIT, PALETTE_08A, TILEMAP_101, TILEMAP_102, TILEMAP_103 ; PORTRAIT_GENE
dw TILESET_MATTHEW_PORTRAIT, PALETTE_08B, TILEMAP_104, TILEMAP_105, TILEMAP_106 ; PORTRAIT_MATTHEW
dw TILESET_RYAN_PORTRAIT, PALETTE_08C, TILEMAP_107, TILEMAP_108, TILEMAP_109 ; PORTRAIT_RYAN
dw TILESET_ANDREW_PORTRAIT, PALETTE_08D, TILEMAP_10A, TILEMAP_10B, TILEMAP_10C ; PORTRAIT_ANDREW
dw TILESET_MITCH_PORTRAIT, PALETTE_08E, TILEMAP_10D, TILEMAP_10E, TILEMAP_10F ; PORTRAIT_MITCH
dw TILESET_MICHAEL_PORTRAIT, PALETTE_08F, TILEMAP_110, TILEMAP_111, TILEMAP_112 ; PORTRAIT_MICHAEL
dw TILESET_CHRIS_PORTRAIT, PALETTE_090, TILEMAP_113, TILEMAP_114, TILEMAP_115 ; PORTRAIT_CHRIS
dw TILESET_JESSICA_PORTRAIT, PALETTE_091, TILEMAP_116, TILEMAP_117, TILEMAP_118 ; PORTRAIT_JESSICA
dw TILESET_NIKKI_PORTRAIT, PALETTE_092, TILEMAP_119, TILEMAP_11A, TILEMAP_11B ; PORTRAIT_NIKKI
dw TILESET_BRITTANY_PORTRAIT, PALETTE_093, TILEMAP_11C, TILEMAP_11D, TILEMAP_11E ; PORTRAIT_BRITTANY
dw TILESET_KRISTIN_PORTRAIT, PALETTE_094, TILEMAP_11F, TILEMAP_120, TILEMAP_121 ; PORTRAIT_KRISTIN
dw TILESET_HEATHER_PORTRAIT, PALETTE_095, TILEMAP_122, TILEMAP_123, TILEMAP_124 ; PORTRAIT_HEATHER
dw TILESET_RICK_PORTRAIT, PALETTE_096, TILEMAP_125, TILEMAP_126, TILEMAP_127 ; PORTRAIT_RICK
dw TILESET_JOSEPH_PORTRAIT, PALETTE_097, TILEMAP_128, TILEMAP_129, TILEMAP_12A ; PORTRAIT_JOSEPH
dw TILESET_DAVID_PORTRAIT, PALETTE_098, TILEMAP_12B, TILEMAP_12C, TILEMAP_12D ; PORTRAIT_DAVID
dw TILESET_ERIK_PORTRAIT, PALETTE_099, TILEMAP_12E, TILEMAP_12F, TILEMAP_130 ; PORTRAIT_ERIK
dw TILESET_AMY_PORTRAIT, PALETTE_09A, TILEMAP_131, TILEMAP_132, TILEMAP_133 ; PORTRAIT_AMY
dw TILESET_JOSHUA_PORTRAIT, PALETTE_09B, TILEMAP_134, TILEMAP_135, TILEMAP_136 ; PORTRAIT_JOSHUA
dw TILESET_SARA_PORTRAIT, PALETTE_09C, TILEMAP_137, TILEMAP_138, TILEMAP_139 ; PORTRAIT_SARA
dw TILESET_AMANDA_PORTRAIT, PALETTE_09D, TILEMAP_13A, TILEMAP_13B, TILEMAP_13C ; PORTRAIT_AMANDA
dw TILESET_KEN_PORTRAIT, PALETTE_09E, TILEMAP_13D, TILEMAP_13E, TILEMAP_13F ; PORTRAIT_KEN
dw TILESET_JOHN_PORTRAIT, PALETTE_09F, TILEMAP_140, TILEMAP_141, TILEMAP_142 ; PORTRAIT_JOHN
dw TILESET_ADAM_PORTRAIT, PALETTE_0A0, TILEMAP_143, TILEMAP_144, TILEMAP_145 ; PORTRAIT_ADAM
dw TILESET_JONATHAN_PORTRAIT, PALETTE_0A1, TILEMAP_146, TILEMAP_147, TILEMAP_148 ; PORTRAIT_JONATHAN
dw TILESET_COURTNEY_PORTRAIT, PALETTE_0A2, TILEMAP_149, TILEMAP_14A, TILEMAP_14B ; PORTRAIT_COURTNEY
dw TILESET_STEVE_PORTRAIT, PALETTE_0A3, TILEMAP_14C, TILEMAP_14D, TILEMAP_14E ; PORTRAIT_STEVE
dw TILESET_JACK_PORTRAIT, PALETTE_0A4, TILEMAP_14F, TILEMAP_150, TILEMAP_151 ; PORTRAIT_JACK
dw TILESET_ROD_PORTRAIT, PALETTE_0A5, TILEMAP_152, TILEMAP_153, TILEMAP_154 ; PORTRAIT_ROD
dw TILESET_EIJI_PORTRAIT, PALETTE_0A6, TILEMAP_155, TILEMAP_156, TILEMAP_157 ; PORTRAIT_EIJI
dw TILESET_MAGICIAN_PORTRAIT, PALETTE_0A7, TILEMAP_158, TILEMAP_159, TILEMAP_15A ; PORTRAIT_MAGICIAN
dw TILESET_YUI_PORTRAIT, PALETTE_0A8, TILEMAP_15B, TILEMAP_15C, TILEMAP_15D ; PORTRAIT_YUI
dw TILESET_TOSHIRON_PORTRAIT, PALETTE_0A9, TILEMAP_15E, TILEMAP_15F, TILEMAP_160 ; PORTRAIT_TOSHIRON
dw TILESET_PIERROT_PORTRAIT, PALETTE_0AA, TILEMAP_161, TILEMAP_162, TILEMAP_163 ; PORTRAIT_PIERROT
dw TILESET_ANNA_PORTRAIT, PALETTE_0AB, TILEMAP_164, TILEMAP_165, TILEMAP_166 ; PORTRAIT_ANNA
dw TILESET_DEE_PORTRAIT, PALETTE_0AC, TILEMAP_167, TILEMAP_168, TILEMAP_169 ; PORTRAIT_DEE
dw TILESET_MASQUERADE_PORTRAIT, PALETTE_0AD, TILEMAP_16A, TILEMAP_16B, TILEMAP_16C ; PORTRAIT_MASQUERADE
dw TILESET_PAWN_PORTRAIT, PALETTE_0AE, TILEMAP_16D, TILEMAP_16E, TILEMAP_16F ; PORTRAIT_PAWN
dw TILESET_KNIGHT_PORTRAIT, PALETTE_0AF, TILEMAP_170, TILEMAP_171, TILEMAP_172 ; PORTRAIT_KNIGHT
dw TILESET_BISHOP_PORTRAIT, PALETTE_0B0, TILEMAP_173, TILEMAP_174, TILEMAP_175 ; PORTRAIT_BISHOP
dw TILESET_ROOK_PORTRAIT, PALETTE_0B1, TILEMAP_176, TILEMAP_177, TILEMAP_178 ; PORTRAIT_ROOK
dw TILESET_QUEEN_PORTRAIT, PALETTE_0B2, TILEMAP_179, TILEMAP_17A, TILEMAP_17B ; PORTRAIT_QUEEN
dw TILESET_GR_1_PORTRAIT, PALETTE_0B3, TILEMAP_17C, TILEMAP_17D, TILEMAP_17E ; PORTRAIT_GR_1
dw TILESET_GR_2_PORTRAIT, PALETTE_0B4, TILEMAP_17F, TILEMAP_180, TILEMAP_181 ; PORTRAIT_GR_2
dw TILESET_GR_3_PORTRAIT, PALETTE_0B5, TILEMAP_182, TILEMAP_183, TILEMAP_184 ; PORTRAIT_GR_3
dw TILESET_GR_4_PORTRAIT, PALETTE_0B6, TILEMAP_185, TILEMAP_186, TILEMAP_187 ; PORTRAIT_GR_4
dw TILESET_MIDORI_PORTRAIT, PALETTE_0B7, TILEMAP_188, TILEMAP_189, TILEMAP_18A ; PORTRAIT_MIDORI
dw TILESET_YUUTA_PORTRAIT, PALETTE_0B8, TILEMAP_18B, TILEMAP_18C, TILEMAP_18D ; PORTRAIT_YUUTA
dw TILESET_MIYUKI_PORTRAIT, PALETTE_0B9, TILEMAP_18E, TILEMAP_18F, TILEMAP_190 ; PORTRAIT_MIYUKI
dw TILESET_MORINO_PORTRAIT, PALETTE_0BA, TILEMAP_191, TILEMAP_192, TILEMAP_193 ; PORTRAIT_MORINO
dw TILESET_RENNA_PORTRAIT, PALETTE_0BB, TILEMAP_194, TILEMAP_195, TILEMAP_196 ; PORTRAIT_RENNA
dw TILESET_ICHIKAWA_PORTRAIT, PALETTE_0BC, TILEMAP_197, TILEMAP_198, TILEMAP_199 ; PORTRAIT_ICHIKAWA
dw TILESET_CATHERINE_PORTRAIT, PALETTE_0BD, TILEMAP_19A, TILEMAP_19B, TILEMAP_19C ; PORTRAIT_CATHERINE
dw TILESET_TAP_PORTRAIT, PALETTE_0BE, TILEMAP_19D, TILEMAP_19E, TILEMAP_19F ; PORTRAIT_TAP
dw TILESET_JES_PORTRAIT, PALETTE_0BF, TILEMAP_1A0, TILEMAP_1A1, TILEMAP_1A2 ; PORTRAIT_JES
dw TILESET_YUKI_PORTRAIT, PALETTE_0C0, TILEMAP_1A3, TILEMAP_1A4, TILEMAP_1A5 ; PORTRAIT_YUKI
dw TILESET_SHOKO_PORTRAIT, PALETTE_0C1, TILEMAP_1A6, TILEMAP_1A7, TILEMAP_1A8 ; PORTRAIT_SHOKO
dw TILESET_HIDERO_PORTRAIT, PALETTE_0C2, TILEMAP_1A9, TILEMAP_1AA, TILEMAP_1AB ; PORTRAIT_HIDERO
dw TILESET_MIYAJIMA_PORTRAIT, PALETTE_0C3, TILEMAP_1AC, TILEMAP_1AD, TILEMAP_1AE ; PORTRAIT_MIYAJIMA
dw TILESET_SENTA_PORTRAIT, PALETTE_0C4, TILEMAP_1AF, TILEMAP_1B0, TILEMAP_1B1 ; PORTRAIT_SENTA
dw TILESET_AIRA_PORTRAIT, PALETTE_0C5, TILEMAP_1B2, TILEMAP_1B3, TILEMAP_1B4 ; PORTRAIT_AIRA
dw TILESET_KANOKO_PORTRAIT, PALETTE_0C6, TILEMAP_1B5, TILEMAP_1B6, TILEMAP_1B7 ; PORTRAIT_KANOKO
dw TILESET_GODA_PORTRAIT, PALETTE_0C7, TILEMAP_1B8, TILEMAP_1B9, TILEMAP_1BA ; PORTRAIT_GODA
dw TILESET_GRACE_PORTRAIT, PALETTE_0C8, TILEMAP_1BB, TILEMAP_1BC, TILEMAP_1BD ; PORTRAIT_GRACE
dw TILESET_KAMIYA_PORTRAIT, PALETTE_0C9, TILEMAP_1BE, TILEMAP_1BF, TILEMAP_1C0 ; PORTRAIT_KAMIYA
dw TILESET_MIWA_PORTRAIT, PALETTE_0CA, TILEMAP_1C1, TILEMAP_1C2, TILEMAP_1C3 ; PORTRAIT_MIWA
dw TILESET_KEVIN_PORTRAIT, PALETTE_0CB, TILEMAP_1C4, TILEMAP_1C5, TILEMAP_1C6 ; PORTRAIT_KEVIN
dw TILESET_YOSUKE_PORTRAIT, PALETTE_0CC, TILEMAP_1C7, TILEMAP_1C8, TILEMAP_1C9 ; PORTRAIT_YOSUKE
dw TILESET_RYOKO_PORTRAIT, PALETTE_0CD, TILEMAP_1CA, TILEMAP_1CB, TILEMAP_1CC ; PORTRAIT_RYOKO
dw TILESET_MAMI_PORTRAIT, PALETTE_0CE, TILEMAP_1CD, TILEMAP_1CE, TILEMAP_1CF ; PORTRAIT_MAMI
dw TILESET_NISHIJIMA_PORTRAIT, PALETTE_0CF, TILEMAP_1D0, TILEMAP_1D1, TILEMAP_1D2 ; PORTRAIT_NISHIJIMA
dw TILESET_ISHII_PORTRAIT, PALETTE_0D0, TILEMAP_1D3, TILEMAP_1D4, TILEMAP_1D5 ; PORTRAIT_ISHII
dw TILESET_SAMEJIMA_PORTRAIT, PALETTE_0D1, TILEMAP_1D6, TILEMAP_1D7, TILEMAP_1D8 ; PORTRAIT_SAMEJIMA
dw TILESET_KANZAKI_PORTRAIT, PALETTE_0D2, TILEMAP_1D9, TILEMAP_1DA, TILEMAP_1DB ; PORTRAIT_KANZAKI
dw TILESET_RUI_PORTRAIT, PALETTE_0D3, TILEMAP_1DC, TILEMAP_1DD, TILEMAP_1DE ; PORTRAIT_RUI
dw TILESET_BIRURITCHI_PORTRAIT, PALETTE_0D4, TILEMAP_1DF, TILEMAP_1E0, TILEMAP_1E1 ; PORTRAIT_BIRURITCHI
dw TILESET_GR_X_PORTRAIT, PALETTE_0D5, TILEMAP_1E2, TILEMAP_1E3, TILEMAP_1E4 ; PORTRAIT_GR_X
dw TILESET_TOBI_CHAN_PORTRAIT, PALETTE_0D6, TILEMAP_1E5, TILEMAP_1E6, TILEMAP_1E7 ; PORTRAIT_TOBI_CHAN
dw TILESET_DR_MASON_PORTRAIT, PALETTE_0D7, TILEMAP_1E8, TILEMAP_1E9, TILEMAP_1EA ; PORTRAIT_DR_MASON
dw TILESET_IMAKUNI_BLACK_PORTRAIT, PALETTE_080, TILEMAP_0E3, TILEMAP_0E4, TILEMAP_0E5 ; PORTRAIT_IMAKUNI_BLACK
dw TILESET_IMAKUNI_RED_PORTRAIT, PALETTE_081, TILEMAP_0E6, TILEMAP_0E7, TILEMAP_0E8 ; PORTRAIT_IMAKUNI_RED
+1 -1
View File
@@ -226,7 +226,7 @@ CreditsCmd_ShowPortrait:
ld a, [wCreditsCmdArg5]
ld e, a
ld a, [wCreditsCmdArg1]
call Func_3ab2
call DrawNPCPortrait
ret
CreditsCmd_PrintHeader:
+2 -2
View File
@@ -7,8 +7,8 @@ GameLoop::
call EnableSRAM
ld a, [sTextSpeed]
ld [wTextSpeed], a
ld a, [s0a009]
ld [wcd08], a
ld a, [sSkipDelayAllowed]
ld [wSkipDelayAllowed], a
call DisableSRAM
ld a, DECK_SIZE
ld [wDeckSize], a
+9 -9
View File
@@ -1,7 +1,7 @@
; loads opponent deck at wOpponentDeckID to wOpponentDeck, and initializes wPlayerDuelistType.
; on a duel against Sam, also loads PRACTICE_PLAYER_DECK to wPlayerDeck.
; also, sets wRNG1 and wRNGCounter to $20 and wRNG2 to 0.
LoadOpponentDeck:
LoadOpponentDeck::
xor a
ld [wIsPracticeDuel], a
ld [wcd17], a
@@ -36,7 +36,7 @@ LoadOpponentDeck:
call SwapTurn
ld a, e
add $02
call $2e85 ; LoadDeck
call LoadDeck
call SwapTurn
ld hl, wRNG1
ld a, $20
@@ -48,7 +48,7 @@ LoadOpponentDeck:
ld a, [wOpponentDeckID]
inc a
inc a ; convert from *_DECK_ID constant read from wOpponentDeckID to *_DECK constant
call $2e85 ; LoadDeck
call LoadDeck
ld a, [wOpponentDeckID]
cp $7a ; DECKS_END
jr c, .valid_deck
@@ -63,11 +63,11 @@ LoadOpponentDeck:
ld [hl], a
ret
AIDoAction_Turn:
AIDoAction_Turn::
ld a, AIACTION_DO_TURN
jr AIDoAction
AIDoAction_StartDuel:
AIDoAction_StartDuel::
ld a, AIACTION_START_DUEL
jr AIDoAction
@@ -77,17 +77,17 @@ AIDoAction_ForcedSwitch:
ldh [hTempPlayAreaLocation_ff9d], a
ret
AIDoAction_KOSwitch:
AIDoAction_KOSwitch::
ld a, AIACTION_KO_SWITCH
call AIDoAction
ldh [hTemp_ffa0], a
ret
AIDoAction_TakePrize:
AIDoAction_TakePrize::
ld a, AIACTION_TAKE_PRIZE
jr AIDoAction
AIDoAction_06:
AIDoAction_06::
ld a, AIACTION_06
jr AIDoAction
@@ -133,7 +133,7 @@ AIDoAction:
; load bank for Opponent Deck pointer table
ldh a, [hBankROM]
push af
ld a, $05 ; BANK(DeckAIPointerTable)
ld a, BANK(DeckAIPointerTable)
call BankswitchROM
; load hl with the corresponding pointer
+7 -4
View File
@@ -217,16 +217,19 @@ GetCardAlbumProgress::
call DisableSRAM
ret
Func_1bca:
; frame function during Link Opponent's turn
; if opponent makes a decision, jump directly
; to the address in wLinkOpponentTurnReturnAddress
LinkOpponentTurnFrameFunction::
ld a, [wSerialFlags]
or a
jr nz, .asm_1bd4
jr nz, .return
call Func_0e32
ret nc
.asm_1bd4
.return
ld a, $09
call BankswitchROM
ld hl, wcd1a
ld hl, wLinkOpponentTurnReturnAddress
ld a, [hli]
ld h, [hl]
ld l, a
+1 -1
View File
@@ -101,7 +101,7 @@ GetCardType::
pop hl
ret
Func_2d3f:
Func_2d3f::
push hl
push de
call GetCardPointer
+1 -1
View File
@@ -16,7 +16,7 @@ TossCoinATimes:
; text at de is printed in a text box during the coin toss.
; returns: - carry, and 1 in a and in wCoinTossNumHeads if heads
; - nc, and 0 in a and in wCoinTossNumHeads if tails
TossCoin:
TossCoin::
push hl
ld hl, wCoinTossScreenTextID
ld [hl], e
+71 -69
View File
@@ -72,7 +72,7 @@ CountPrizes::
; draw a card from the turn holder's deck, saving its location as CARD_LOCATION_JUST_DRAWN.
; returns carry if deck is empty, nc if a card was successfully drawn.
; AddCardToHand is meant to be called next (unless this function returned carry).
DrawCardFromDeck:
DrawCardFromDeck::
push hl
ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
get_turn_duelist_var
@@ -153,7 +153,7 @@ SearchCardInDeckAndAddToHand:
; adds a card to the turn holder's hand and increments the number of cards in the hand
; the card is identified by register a, which contains the deck index (0-59) of the card
AddCardToHand:
AddCardToHand::
push af
push hl
push de
@@ -218,7 +218,7 @@ RemoveCardFromHand:
pop af
ret
Func_0ffa:
Func_0ffa::
push bc
push de
ld c, a
@@ -239,7 +239,7 @@ Func_0ffa:
; moves a card to the turn holder's discard pile, as long as it is in the hand
; the card is identified by register a, which contains the deck index (0-59) of the card
MoveHandCardToDiscardPile:
MoveHandCardToDiscardPile::
call CheckDeckIndexRange
get_turn_duelist_var
ld a, [hl]
@@ -251,7 +251,7 @@ MoveHandCardToDiscardPile:
; fallthrough
; puts the turn holder's card with the deck index (0-59) given in a into the discard pile
PutCardInDiscardPile:
PutCardInDiscardPile::
push af
push hl
push de
@@ -273,7 +273,7 @@ PutCardInDiscardPile:
; search a card in the turn holder's discard pile, extract it, and set its location to
; CARD_LOCATION_JUST_DRAWN. AddCardToHand is meant to be called next.
; the card is identified by register a, which contains the deck index (0-59) of the card
MoveDiscardPileCardToHand:
MoveDiscardPileCardToHand::
push hl
push de
push bc
@@ -365,7 +365,7 @@ CreateDeckCardList:
; if a == 0: search in CARD_LOCATION_ARENA
; if a != 0: search in CARD_LOCATION_BENCH_[A]
; return carry if no energy cards were found
CreateArenaOrBenchEnergyCardList:
CreateArenaOrBenchEnergyCardList::
or CARD_LOCATION_PLAY_AREA
ld c, a
ld b, $00
@@ -402,7 +402,7 @@ CreateArenaOrBenchEnergyCardList:
; fill wDuelTempList with the turn holder's hand cards (their 0-59 deck indexes)
; return carry if the turn holder has no cards in hand
; and outputs in a number of cards.
CreateHandCardList:
CreateHandCardList::
call FindLastCardInHand
inc b
jr .skip_card
@@ -433,7 +433,7 @@ CreateHandCardList:
; b = turn holder's number of cards in hand (DUELVARS_NUMBER_OF_CARDS_IN_HAND)
; hl = pointer to turn holder's last (newest) card in DUELVARS_HAND
; de = wDuelTempList
FindLastCardInHand:
FindLastCardInHand::
ldh a, [hWhoseTurn]
ld h, a
ld l, DUELVARS_NUMBER_OF_CARDS_IN_HAND
@@ -448,7 +448,7 @@ FindLastCardInHand:
; input:
; a = how many cards to shuffle
; hl = DUELVARS_DECK_CARDS + [DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK]
ShuffleCards:
ShuffleCards::
cp 1
ret c ; return if less than 2 cards in deck
push hl
@@ -546,7 +546,7 @@ RemoveCardFromDuelTempList::
ret
; return the number of cards in wDuelTempList in a
CountCardsInDuelTempList:
CountCardsInDuelTempList::
push hl
push bc
ld hl, wDuelTempList
@@ -585,10 +585,10 @@ LoadCardDataToBuffer1_FromDeckIndex::
push bc
push af
call GetCardIDFromDeckIndex
call $2d0a ; LoadCardDataToBuffer1_FromCardID
call LoadCardDataToBuffer1_FromCardID
pop af
ld hl, wLoadedCard1
farcall $9, $4e25 ; ConvertSpecialTrainerCardToPokemon
farcall ConvertSpecialTrainerCardToPokemon
pop bc
pop de
pop hl
@@ -604,7 +604,7 @@ LoadCardDataToBuffer2_FromDeckIndex::
call LoadCardDataToBuffer2_FromCardID
pop af
ld hl, wLoadedCard2
farcall $9, $4e25 ; ConvertSpecialTrainerCardToPokemon
farcall ConvertSpecialTrainerCardToPokemon
pop bc
pop de
pop hl
@@ -613,7 +613,7 @@ LoadCardDataToBuffer2_FromDeckIndex::
; evolve a turn holder's Pokemon card in the play area slot determined by hTempPlayAreaLocation_ff9d
; into another turn holder's Pokemon card identifier by its deck index (0-59) in hTempCardIndex_ff98.
; return nc if evolution was successful.
EvolvePokemonCardIfPossible:
EvolvePokemonCardIfPossible::
; first make sure the attempted evolution is viable
ldh a, [hTempCardIndex_ff98]
ld d, a
@@ -678,7 +678,7 @@ EvolvePokemonCard:
; e is the play area location offset (PLAY_AREA_*) of the Pokemon trying to evolve.
; d is the deck index (0-59) of the Pokemon card that was selected to be the evolution target.
; return carry if can't evolve, plus nz if the reason for it is the card was played this turn.
CheckIfCanEvolveInto:
CheckIfCanEvolveInto::
push de
ld a, e
add DUELVARS_ARENA_CARD
@@ -749,7 +749,7 @@ CheckIfCanEvolveInto_BasicToStage2:
ld e, [hl]
inc hl
ld d, [hl]
call $2cbb ; LoadCardDataToBuffer1_FromName
call LoadCardDataToBuffer1_FromName
ld hl, wLoadedCard2Name
ld de, wLoadedCard1PreEvoName
ld a, [de]
@@ -770,7 +770,7 @@ CheckIfCanEvolveInto_BasicToStage2:
; clear the status, all substatuses, and temporary duelvars of the turn holder's
; arena Pokemon. called when sending a new Pokemon into the arena.
; does not reset Headache, since it targets a player rather than a Pokemon.
ClearAllStatusConditions:
ClearAllStatusConditions::
push hl
ldh a, [hWhoseTurn]
ld h, a
@@ -804,13 +804,13 @@ ClearAllStatusConditions:
; input:
; a = deck index of the card
; return carry if there is no room for more Pokemon
PutHandPokemonCardInPlayArea:
PutHandPokemonCardInPlayArea::
push af
call CheckDeckIndexRange
ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
get_turn_duelist_var
push hl
ld hl, wcc01 ; max play area pokemon ?
ld hl, wMaxNumPlayAreaPokemon ; max play area pokemon ?
cp [hl]
pop hl
jr nc, .already_max_pkmn_in_play
@@ -874,7 +874,7 @@ PutHandPokemonCardInPlayArea:
; e = play area location offset (PLAY_AREA_*)
; returns:
; a = CARD_LOCATION_PLAY_AREA + e
PutHandCardInPlayArea:
PutHandCardInPlayArea::
call RemoveCardFromHand
get_turn_duelist_var
ld a, e
@@ -882,7 +882,7 @@ PutHandCardInPlayArea:
ld [hl], a
ret
Func_12fc:
Func_12fc::
ld a, [wSpecialRule]
cp ENERGY_RETURN
jr nz, MovePlayAreaCardToDiscardPile
@@ -921,7 +921,7 @@ Func_12fc:
; move the Pokemon card of the turn holder in the
; PLAY_AREA_* location given in e to the discard pile
MovePlayAreaCardToDiscardPile:
MovePlayAreaCardToDiscardPile::
call EmptyPlayAreaSlot
ld l, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
dec [hl]
@@ -969,7 +969,7 @@ EmptyPlayAreaSlot:
ret
; shift play area Pokemon of both players to the first available play area (arena + benchx) slots
ShiftAllPokemonToFirstPlayAreaSlots:
ShiftAllPokemonToFirstPlayAreaSlots::
call ShiftTurnPokemonToFirstPlayAreaSlots
call SwapTurn
call ShiftTurnPokemonToFirstPlayAreaSlots
@@ -998,7 +998,7 @@ ShiftTurnPokemonToFirstPlayAreaSlots:
; data of the turn holder's Pokemon card in play area e.
; reset the status and all substatuses of the arena Pokemon before swapping.
; e is the play area location offset of the bench Pokemon (PLAY_AREA_*).
SwapArenaWithBenchPokemon:
SwapArenaWithBenchPokemon::
push de
call ClearAllStatusConditions
ld d, PLAY_AREA_ARENA
@@ -1009,7 +1009,7 @@ SwapArenaWithBenchPokemon:
; swap the data of the turn holder's Pokemon card in play area d with the
; data of the turn holder's Pokemon card in play area e.
; d and e are play area location offsets (PLAY_AREA_*).
SwapPlayAreaPokemon:
SwapPlayAreaPokemon::
push bc
push de
push hl
@@ -1225,7 +1225,7 @@ CopyAttackDataAndDamage_FromCardID:
ld a, d
ldh [hTempCardIndex_ff9f], a
pop de
call $2d0a ; LoadCardDataToBuffer1_FromCardID
call LoadCardDataToBuffer1_FromCardID
pop de
jr CopyAttackDataAndDamage
@@ -1234,7 +1234,7 @@ CopyAttackDataAndDamage_FromCardID:
; - Attack1 (if e == 0) or Attack2 (if e == 1) data into wLoadedAttack
; - Also from that attack, its Damage field into wDamage
; finally, clears wNoDamageOrEffect and wDealtDamage
CopyAttackDataAndDamage_FromDeckIndex:
CopyAttackDataAndDamage_FromDeckIndex::
ld a, e
ld [wSelectedAttack], a
ld a, d
@@ -1276,7 +1276,7 @@ Func_14e5:
get_turn_duelist_var
ldh [hTempCardIndex_ff9f], a
call Func_14f1
call Func_1500
call ClearTwoTurnDuelVars
ret
Func_14f1:
@@ -1288,7 +1288,9 @@ Func_14f1:
call SwapTurn
ret
Func_1500:
; zeroes temp variables that only last between each two-player turn.
; this is called when a Pokemon card is played or when an attack is used
ClearTwoTurnDuelVars::
xor a
ld [wccec], a
ld [wEffectFunctionsFeedbackIndex], a
@@ -1306,14 +1308,14 @@ Func_1500:
ld [hli], a
ld [hli], a
ld [hl], a
bank1call $6b13 ; Func_6b13
ld a, $ed
bank1call ClearNonTurnTemporaryDuelvars_CopyStatus
ld a, DUELVARS_ARENA_CARD_SUBSTATUS1
call GetNonTurnDuelistVariable
ld [wcd0b], a
ret
; Use an attack (from DuelMenu_Attack) or a Pokemon Power (from DuelMenu_PkmnPower)
UseAttackOrPokemonPower:
UseAttackOrPokemonPower::
ld a, [wSelectedAttack]
ld [wPlayerAttackingAttackIndex], a
ldh a, [hTempCardIndex_ff9f]
@@ -1329,10 +1331,10 @@ UseAttackOrPokemonPower:
ldh [hTempPlayAreaLocation_ff9d], a
call Func_14e5
ld a, EFFECTCMDTYPE_INITIAL_EFFECT_1
call $2e33 ; TryExecuteEffectCommandFunction
call TryExecuteEffectCommandFunction
jp c, DrawWideTextBox_WaitForInput_ReturnCarry
farcall $9, $4375 ; Func_24375
call $27fa ; WaitForWideTextBoxInput
call WaitForWideTextBoxInput
call SendAttackDataToLinkOpponent
bank1call $784a ; HandleSandAttackOrSmokescreenSubstatus ?
jp c, ClearNonTurnTemporaryDuelvars_ResetCarry
@@ -1343,7 +1345,7 @@ UseAttackOrPokemonPower:
call ExchangeRNG
.asm_1580
ld a, EFFECTCMDTYPE_INITIAL_EFFECT_2
call $2e33 ; TryExecuteEffectCommandFunction
call TryExecuteEffectCommandFunction
jr nc, .asm_159b
ld a, [wcd16]
or a
@@ -1357,9 +1359,9 @@ UseAttackOrPokemonPower:
ret
.asm_159b
ld a, EFFECTCMDTYPE_DISCARD_ENERGY
call $2e33 ; TryExecuteEffectCommandFunction
call TryExecuteEffectCommandFunction
ld a, EFFECTCMDTYPE_REQUIRE_SELECTION
call $2e33 ; TryExecuteEffectCommandFunction
call TryExecuteEffectCommandFunction
ld a, OPPACTION_ATTACK_ANIM_AND_DAMAGE
call SetOppAction_SerialSendDuelData
; fallthrough
@@ -1367,7 +1369,7 @@ UseAttackOrPokemonPower:
PlayAttackAnimation_DealAttackDamage:
call Func_14f1
bank1call $6e68 ; Func_6e68
farcall $6, $4a14 ; Func_18a14
farcall Func_18a14
ld a, [wLoadedAttackCategory]
and RESIDUAL
jr nz, .deal_damage
@@ -1378,7 +1380,7 @@ PlayAttackAnimation_DealAttackDamage:
xor a
ldh [hTempPlayAreaLocation_ff9d], a
ld a, EFFECTCMDTYPE_BEFORE_DAMAGE
call $2e33 ; TryExecuteEffectCommandFunction
call TryExecuteEffectCommandFunction
call ApplyDamageModifiers_DamageToTarget
call Func_189d
ld a, e
@@ -1409,7 +1411,7 @@ PlayAttackAnimation_DealAttackDamage:
jr Func_17fb
Func_17ed:
call $27f7 ; DrawWideTextBox_WaitForInput
call DrawWideTextBox_WaitForInput
xor a
ld hl, wDamage
ld [hli], a
@@ -1426,7 +1428,7 @@ Func_17fb:
push hl
push de
ld a, EFFECTCMDTYPE_AFTER_DAMAGE
call $2e33 ; TryExecuteEffectCommandFunction
call TryExecuteEffectCommandFunction
pop de
pop hl
ld [hl], d
@@ -1443,7 +1445,7 @@ Func_17fb:
ret
DrawWideTextBox_WaitForInput_ReturnCarry:
call $27f7 ; DrawWideTextBox_WaitForInput
call DrawWideTextBox_WaitForInput
; fallthrough
ReturnCarry:
@@ -1466,9 +1468,9 @@ HandleConfusionDamageToSelf:
bank1call $4cd7 ; DrawDuelMainScene
pop hl
push hl
call $2cb2 ; Func_2cb2
call LoadTxRam3
ld hl, $50 ; DamageToSelfDueToConfusionText
call $27a5 ; DrawWideTextBox_PrintText
call DrawWideTextBox_PrintText
ld a, ATK_ANIM_CONFUSION_HIT
ld [wLoadedAttackAnimation], a
pop hl
@@ -1482,10 +1484,10 @@ HandleConfusionDamageToSelf:
; use Pokemon Power
UsePokemonPower:
call Func_1500
farcall $6, $4a14 ; Func_18a14
call ClearTwoTurnDuelVars
farcall Func_18a14
ld a, EFFECTCMDTYPE_INITIAL_EFFECT_2
call $2e33 ; TryExecuteEffectCommandFunction
call TryExecuteEffectCommandFunction
jr c, DrawWideTextBox_WaitForInput_ReturnCarry
ld a, [wcd0d]
or a
@@ -1494,7 +1496,7 @@ UsePokemonPower:
call SetOppAction_SerialSendDuelData
.asm_1687
ld a, EFFECTCMDTYPE_REQUIRE_SELECTION
call $2e33 ; TryExecuteEffectCommandFunction
call TryExecuteEffectCommandFunction
jr c, ReturnCarry
ld a, OPPACTION_USE_PKMN_POWER
call SetOppAction_SerialSendDuelData
@@ -1502,7 +1504,7 @@ UsePokemonPower:
ld a, OPPACTION_EXECUTE_PKMN_POWER_EFFECT
call SetOppAction_SerialSendDuelData
ld a, EFFECTCMDTYPE_BEFORE_DAMAGE
call $2e33 ; TryExecuteEffectCommandFunction
call TryExecuteEffectCommandFunction
ld a, OPPACTION_DUEL_MAIN_SCENE
call SetOppAction_SerialSendDuelData
ret
@@ -1578,7 +1580,7 @@ Func_189d:
push hl
bank1call $4cd7 ; DrawDuelMainScene
pop hl
call $27a5 ; DrawWideTextBox_PrintText
call DrawWideTextBox_PrintText
ld a, DUELVARS_ARENA_CARD_SUBSTATUS2
call GetNonTurnDuelistVariable
ld [hl], $0
@@ -1598,7 +1600,7 @@ CheckSelfConfusionDamage:
ret
.confused
ld de, $117 ; ConfusionCheckDamageText
call $2ebb ; TossCoin
call TossCoin
jr c, .no_confusion_damage
ld a, 1
ld [wGotHeadsFromConfusionCheck], a
@@ -1629,7 +1631,7 @@ DealConfusionDamageToSelf:
ld [wNoDamageOrEffect], a
ld a, $01
ld [wIsDamageToSelf], a
farcall $6, $4a14 ; Func_18a14
farcall Func_18a14
ld hl, wTempNonTurnDuelistCardID
ld e, [hl]
inc hl
@@ -1741,7 +1743,7 @@ ApplyDamageModifiers_DamageToTarget:
ret
; convert a color to its equivalent WR_* (weakness/resistance) value
TranslateColorToWR:
TranslateColorToWR::
push hl
add LOW(InvertedPowersOf2)
ld l, a
@@ -1843,7 +1845,7 @@ ApplyAttachedDefender:
; hl: address to subtract HP from
; de: how much HP to subtract (damage to deal)
; returns carry if the HP does not become 0 as a result
SubtractHP:
SubtractHP::
push hl
push de
ld a, [hl]
@@ -1866,7 +1868,7 @@ SubtractHP:
; given a play area location offset in a, check if the turn holder's Pokemon card in
; that location has no HP left, and, if so, print that it was knocked out.
PrintPlayAreaCardKnockedOutIfNoHP:
PrintPlayAreaCardKnockedOutIfNoHP::
ld c, a
add DUELVARS_ARENA_CARD_HP
get_turn_duelist_var
@@ -1895,7 +1897,7 @@ PrintPlayAreaCardKnockedOutIfNoHP:
scf
ret
PrintKnockedOutIfHLZero:
PrintKnockedOutIfHLZero::
ld a, [hl] ; this is supposed to point to a remaining HP value after some form of damage calculation
or a
ret nz
@@ -1908,14 +1910,14 @@ PrintKnockedOut:
ld e, [hl]
inc hl
ld d, [hl]
call $2d0a ; LoadCardDataToBuffer1_FromCardID
call LoadCardDataToBuffer1_FromCardID
ld hl, wLoadedCard1Name
ld a, [hli]
ld h, [hl]
ld l, a
call $2ca9 ; LoadTxRam2
call LoadTxRam2
ld hl, $84 ; WasKnockedOutText
call $27a5 ; DrawWideTextBox_PrintText
call DrawWideTextBox_PrintText
ld a, 40
.wait_frames
call DoFrame
@@ -1938,7 +1940,7 @@ DealDamageToPlayAreaPokemon_RegularAnim:
; shows the defending player's play area screen when dealing the damage
; instead of the main duel interface.
; plays animation that is loaded in wLoadedAttackAnimation.
DealDamageToPlayAreaPokemon:
DealDamageToPlayAreaPokemon::
xor a
ld [wNoDamageOrEffect], a
ld a, b
@@ -2045,7 +2047,7 @@ Func_1bb4:
xor a
ldh [hTempPlayAreaLocation_ff9d], a
call Func_19e1
call $27fa ; WaitForWideTextBoxInput
call WaitForWideTextBoxInput
call ExchangeRNG
ret
@@ -2059,12 +2061,12 @@ Func_19e1:
jr z, .no_effect_from_status
call Func_19fd
ld hl, $1a1 ; WasUnsuccessfulText
call $27a5 ; DrawWideTextBox_PrintText
call DrawWideTextBox_PrintText
scf
ret
.no_effect_from_status
bank1call $66d0 ; PrintThereWasNoEffectFromStatusText
call $27a5 ; DrawWideTextBox_PrintText
call DrawWideTextBox_PrintText
scf
ret
@@ -2074,11 +2076,11 @@ Func_19fd:
get_turn_duelist_var
call LoadCardDataToBuffer1_FromDeckIndex
ld a, 18
call $26da ; CopyCardNameAndLevel
call CopyCardNameAndLevel
; zero wTxRam2 so that the name & level text just loaded to wDefaultText is printed
ld [hl], $0
ld hl, $0000
call $2ca9 ; LoadTxRam2
call LoadTxRam2
ld hl, wLoadedAttackName
ld de, $cdd8 ; wTxRam2_b
ld a, [hli]
@@ -2092,11 +2094,11 @@ Func_1a1e:
bank1call $6b05 ; ClearNonTurnTemporaryDuelvars
call Func_19fd
ld hl, $1a2
jp $27f7 ; DrawWideTextBox_WaitForInput
jp DrawWideTextBox_WaitForInput
; return in a the retreat cost of the turn holder's arena or bench Pokemon
; given the PLAY_AREA_* value in hTempPlayAreaLocation_ff9d
GetPlayAreaCardRetreatCost:
GetPlayAreaCardRetreatCost::
ldh a, [hTempPlayAreaLocation_ff9d]
add DUELVARS_ARENA_CARD
get_turn_duelist_var
@@ -2197,7 +2199,7 @@ CopyPlayerName::
; if text ID at wOpponentName is non-0, copy it from there
; else, if text at wc500 is non-0, copy if from there
; else, copy Player2Text
CopyOpponentName:
CopyOpponentName::
ld hl, wOpponentName
ld a, [hli]
or [hl]
+5 -5
View File
@@ -1,4 +1,4 @@
OpenDuelCheckMenu:
OpenDuelCheckMenu::
ldh a, [hBankROM]
push af
ld a, $02 ; BANK(_OpenDuelCheckMenu)
@@ -8,7 +8,7 @@ OpenDuelCheckMenu:
call BankswitchROM
ret
OpenInPlayAreaScreen_FromSelectButton:
OpenInPlayAreaScreen_FromSelectButton::
ldh a, [hBankROM]
push af
ld a, $06 ; BANK(OpenInPlayAreaScreen)
@@ -27,7 +27,7 @@ OpenInPlayAreaScreen_FromSelectButton:
; similar to DrawYourOrOppPlayArea (bank 2) except it also draws a wide text box.
; this is because bank 2's DrawYourOrOppPlayArea is supposed to come from the Check Menu,
; so the text box is always already there.
DrawYourOrOppPlayAreaScreen_Bank0:
DrawYourOrOppPlayAreaScreen_Bank0::
ld a, h
ld [wCheckMenuPlayAreaWhichDuelist], a
ld a, l
@@ -76,7 +76,7 @@ DrawAIPeekScreen:
ret
; a = number of prize cards for player to select to take
SelectPrizeCards:
SelectPrizeCards::
ld [wNumberOfPrizeCardsToSelect], a
ldh a, [hBankROM]
push af
@@ -87,7 +87,7 @@ SelectPrizeCards:
call BankswitchROM
ret
DrawPlayAreaToPlacePrizeCards:
DrawPlayAreaToPlacePrizeCards::
ldh a, [hBankROM]
push af
ld a, $02 ; BANK(_DrawPlayAreaToPlacePrizeCards)
+2 -2
View File
@@ -3,7 +3,7 @@
; input:
; a = command type to check
; [wLoadedAttackEffectCommands] = pointer to list of commands of current attack or trainer card
TryExecuteEffectCommandFunction:
TryExecuteEffectCommandFunction::
push af
; grab pointer to command list from wLoadedAttackEffectCommands
ld hl, wLoadedAttackEffectCommands
@@ -38,7 +38,7 @@ TryExecuteEffectCommandFunction:
; a = command type to check
; hl = list of commands of current attack or trainer card
; return nc if command type matching a is found, carry otherwise
CheckMatchingCommand:
CheckMatchingCommand::
ld c, a
ld a, l
or h
+1 -1
View File
@@ -56,7 +56,7 @@ SetNextElementOfList_Common:
inc de
jr SetListToNextPosition
SetNextElementOfList2:
SetNextElementOfList2::
push hl
push de
ld hl, wListPointer2
+1 -1
View File
@@ -1,5 +1,5 @@
; returns a *= 10
ATimes10:
ATimes10::
push de
ld e, a
add a
+1 -1
View File
@@ -1049,7 +1049,7 @@ HandleYesOrNoMenu::
PrintYesOrNoItems::
call AdjustCoordinatesForBGScroll
ld hl, $30 ; YesOrNoText
call $29d8 ; InitTextPrinting_ProcessTextFromID
call InitTextPrinting_ProcessTextFromID
ret
BuildVersion::
+9 -9
View File
@@ -331,7 +331,7 @@ SerialRecvByte:
ret
; exchange c bytes. send bytes at hl and store received bytes in de
SerialExchangeBytes:
SerialExchangeBytes::
ld b, c
.asm_e64
ld a, b
@@ -493,13 +493,13 @@ Func_0f05:
; load the number at wSerialFlags (error code?) to TxRam3, print
; TransmissionErrorText, exit the duel, and reset serial registers.
DuelTransmissionError:
DuelTransmissionError::
ld a, [wSerialFlags]
ld l, a
ld h, 0
call $2cb2 ; LoadTxRam3
call LoadTxRam3
ld hl, $0057 ; TransmissionErrorText
call $27f7 ; DrawWideTextBox_WaitForInput
call DrawWideTextBox_WaitForInput
ld a, -1
ld [wDuelResult], a
ld hl, wDuelReturnAddress
@@ -513,7 +513,7 @@ DuelTransmissionError:
ret
; exchange RNG during a link duel between both games
ExchangeRNG:
ExchangeRNG::
ld a, [wDuelType]
cp DUELTYPE_LINK
jr z, .link_duel
@@ -542,7 +542,7 @@ ExchangeRNG:
; finally exchange RNG data.
; the receiving side will use this data to read the OPPACTION_* value in
; [hOppActionTableIndex] and match it by calling the corresponding OppAction* function
SetOppAction_SerialSendDuelData:
SetOppAction_SerialSendDuelData::
push hl
push bc
ldh [hOppActionTableIndex], a
@@ -561,7 +561,7 @@ SetOppAction_SerialSendDuelData:
; receive 18 bytes of data from wSerialRecvBuf and store them into hOppActionTableIndex,
; hTempCardIndex_ff9f, hTemp_ffa0, and hTempPlayAreaLocation_ffa1,
; and hTempRetreatCostCards. also exchange RNG data.
SerialRecvDuelData:
SerialRecvDuelData::
push hl
push bc
ld hl, hOppActionTableIndex
@@ -574,7 +574,7 @@ SerialRecvDuelData:
; serial send 8 bytes at f, a, l, h, e, d, c, b
; only during a duel against a link opponent
SerialSend8Bytes:
SerialSend8Bytes::
push hl
push af
ld a, [wDuelType]
@@ -624,7 +624,7 @@ SerialSend8Bytes:
ret
; serial recv 8 bytes to f, a, l, h, e, d, c, b
SerialRecv8Bytes:
SerialRecv8Bytes::
ld hl, wTempSerialBuf
ld bc, 8
push hl
+1 -1
View File
@@ -34,7 +34,7 @@ DECoordToBGMap0Address:
ret
; Apply SCX and SCY correction to xy coordinates at de
AdjustCoordinatesForBGScroll:
AdjustCoordinatesForBGScroll::
push af
ldh a, [hSCX]
rra
+1 -1
View File
@@ -197,7 +197,7 @@ Func_212f::
ld de, sGfxBuffer1 + $30 tiles
ld b, $8
call CopyFontsOrDuelGraphicsTiles
call $2684 ; GetCardSymbolData
call GetCardSymbolData
sub $d0
ld l, a
ld h, $00
+2 -2
View File
@@ -25,9 +25,9 @@ TimerHandler:
set IN_TIMER, [hl]
ldh a, [hBankROM]
push af
ld a, $77 ; BANK(SoundTimerHandler)
ld a, BANK(SoundTimerHandler)
call BankswitchROM
call $4003 ; SoundTimerHandler
call SoundTimerHandler
pop af
call BankswitchROM
; clear in-timer flag
+24 -13
View File
@@ -87,12 +87,13 @@ Func_30b7::
Func_30d6::
ld a, $02
ld [wd54c], a
farcall $7, $65a2
jr c, .asm_30e8
farcall Func_1e5a2
jr c, .lost
; won
ld a, EVENT_F1
farcall MaxOutEventValue
ret
.asm_30e8
.lost
ld a, EVENT_F1
farcall ZeroOutEventValue
ret
@@ -1931,18 +1932,20 @@ DrawPlayerPortrait::
pop af
ret
; a = NPC_* constant
; bc = coordinates
; e = PORTRAITVARIANT_* constant
Func_3ab2::
DrawNPCPortrait::
push af
push bc
push de
push hl
cp $04
cp NPC_MINT_LINK + 1
jr nc, .ok
; Mark and Mint don't have portrait variants
ld e, PORTRAITVARIANT_NORMAL
.ok
farcall Func_1c101
farcall GetDuelistPortrait
ld h, e
ld d, b
ld e, c
@@ -2228,14 +2231,15 @@ Func_3c2e::
pop af
ret
Func_3c3c::
; PlayDefaultSong in TCG1
StubbedPlayDefaultSong::
ret
Func_3c3d::
farcall $7, $5ef1
ret
Func_3c42::
ResetAnimationQueue::
push af
call FinishQueuedAnimations
farcall Func_1dfb9
@@ -2260,7 +2264,12 @@ FinishQueuedAnimations::
pop af
ret
Func_3c70::
; plays duel animation
; the animations are loaded to a buffer
; and played in order, so they can be stacked
; input:
; - a = animation index
PlayDuelAnimation::
ld [$dce2], a
call Func_3c77
ret
@@ -2274,7 +2283,9 @@ Func_3c77::
call BankswitchROM
ret
Func_3c86::
; return nc if wActiveScreenAnim, wd4c0, and wAnimationQueue[] are all equal to $ff
; nc means no animation is playing (or animation(s) has/have ended)
CheckAnyAnimationPlaying::
farcall $7, $6420
scf
ret nz
@@ -2400,13 +2411,13 @@ Func_3d3a::
call SetVolume
ret
Func_3d3e::
WaitForSongToFinish::
push af
.asm_3d3f
.wait
call DoFrame
call AssertSongFinished
or a
jr nz, .asm_3d3f
jr nz, .wait
pop af
ret
+9 -1
View File
@@ -86,7 +86,15 @@ hTempCardIndex_ff9f:: ; ffa1
hTemp_ffa0:: ; ffa2
ds $1
ds $10
; a PLAY_AREA_* constant (0: arena card, 1-5: bench card)
hTempPlayAreaLocation_ffa1:: ; ffa3
ds $1
; $ff-terminated list of cards to be discarded upon retreat
hTempRetreatCostCards:: ; ffa4
ds $6
ds $9
; hffa8 through hffbb belong to the text engine
hffa8:: ; ffb3
+4 -2
View File
@@ -40,6 +40,8 @@ ROMX $03
"Bank 3"
ROMX $04
"Bank 4"
ROMX $05
"Bank 5"
ROMX $06
"Bank 6"
ROMX $07
@@ -225,8 +227,8 @@ WRAM0
"WRAM0 Serial Transfer"
org $cbda
"WRAM0 Duels 2"
org $cc29
"WRAM0 Duels 2@cc29"
org $cc21
"WRAM0 Duels 2@cc21"
org $cd5b
"WRAM0 2"
WRAMX 1
+1 -1
View File
@@ -84,7 +84,7 @@ MACRO credits_show_set
db $00, $00
ENDM
; \1 = ID
; \1 = NPC_* constant
; \2 = x
; \3 = y
; \4 = portrait variant
+3
View File
@@ -54,7 +54,10 @@ MACRO textpointer
ENDM
MACRO tx
REPT _NARG
dw \1_
SHIFT
ENDR
ENDM
MACRO gfx_ptr
+131
View File
@@ -85,6 +85,137 @@ MACRO deck_struct
\1Cards:: ds DECK_COMPRESSED_SIZE
ENDM
MACRO duel_vars
ASSERT (LOW(@) == 0), "must be aligned to $100"
; 60-byte array that indicates where each of the 60 cards is.
; $00 - deck
; $01 - hand
; $02 - discard pile
; $08 - prize
; $10 - arena (active pokemon or a card attached to it)
; $1X - bench (where X is bench position from 1 to 5)
\1CardLocations:: ds DECK_SIZE
; deck indexes of the up to 6 cards placed as prizes
\1PrizeCards:: ds $6
; deck indexes of the cards that are in the duelist's hand
\1Hand:: ds DECK_SIZE
; 60-byte array that maps each card to its position in the deck or anywhere else
; This array is initialized to 00, 01, 02, ..., 59, until deck is shuffled.
; Cards in the discard pile go first, cards still in the deck go last, and others go in-between.
\1DeckCards:: ds DECK_SIZE
; Stores x = (60 - deck remaining cards).
; The first x cards in the \1DeckCards array are no longer in the drawable deck this duel.
; The top card of the duelist's deck is at \1DeckCards + [\1NumberOfCardsNotInDeck].
\1NumberOfCardsNotInDeck:: ds $1
; Deck index of the card that is in duelist's side of the field
; -1 indicates no pokemon
\1ArenaCard:: ds $1
; Deck indexes of the cards that are in duelist's bench, plus an $ff (-1) terminator
; -1 indicates no pokemon
\1Bench:: ds MAX_BENCH_POKEMON + 1
\1ArenaCardFlags:: ds $1
ds $5
\1ArenaCardHP:: ds $1
\1Bench1CardHP:: ds $1
\1Bench2CardHP:: ds $1
\1Bench3CardHP:: ds $1
\1Bench4CardHP:: ds $1
\1Bench5CardHP:: ds $1
\1ArenaCardStage:: ds $1
\1Bench1CardStage:: ds $1
\1Bench2CardStage:: ds $1
\1Bench3CardStage:: ds $1
\1Bench4CardStage:: ds $1
\1Bench5CardStage:: ds $1
; changed type from Venomoth's Shift Pokemon Power
; if bit 7 == 1, then bits 0-3 override the Pokemon's actual color
\1ArenaCardChangedType:: ds $1
\1Bench1CardChangedType:: ds $1
\1Bench2CardChangedType:: ds $1
\1Bench3CardChangedType:: ds $1
\1Bench4CardChangedType:: ds $1
\1Bench5CardChangedType:: ds $1
\1ArenaCardAttachedDefender:: ds $1
\1Bench1CardAttachedDefender:: ds $1
\1Bench2CardAttachedDefender:: ds $1
\1Bench3CardAttachedDefender:: ds $1
\1Bench4CardAttachedDefender:: ds $1
\1Bench5CardAttachedDefender:: ds $1
\1ArenaCardAttachedPluspower:: ds $1
\1Bench1CardAttachedPluspower:: ds $1
\1Bench2CardAttachedPluspower:: ds $1
\1Bench3CardAttachedPluspower:: ds $1
\1Bench4CardAttachedPluspower:: ds $1
\1Bench5CardAttachedPluspower:: ds $1
\1ArenaCardFoodCounters:: ds $1
\1Bench1FoodCounters:: ds $1
\1Bench2FoodCounters:: ds $1
\1Bench3FoodCounters:: ds $1
\1Bench4FoodCounters:: ds $1
\1Bench5FoodCounters:: ds $1
\1ArenaCardStatus:: ds $1
\1ArenaCardSubstatus1:: ds $1
\1ArenaCardSubstatus2:: ds $1
; changed weakness from Conversion 1
\1ArenaCardChangedWeakness:: ds $1
; changed resistance from Conversion 2
\1ArenaCardChangedResistance:: ds $1
\1ArenaCardSubstatus3:: ds $1
; each bit represents a prize that this duelist can draw (1 = not drawn ; 0 = drawn)
\1Prizes:: ds $1
\1NumberOfCardsInDiscardPile:: ds $1
\1NumberOfCardsInHand:: ds $1
; Pokemon cards in arena + bench
\1NumberOfPokemonInPlayArea:: ds $1
; $00 - player
; $01 - link
; other - AI controlled
\1DuelistType:: ds $1
; if under the effects of amnesia, which attack (0 or 1) can't be used
\1ArenaCardDisabledAttackIndex:: ds $1
; damage taken the last time the opponent attacked (0 if no damage)
\1ArenaCardLastTurnDamage:: ds $2
; status condition received the last time the opponent attacked (0 if none)
\1ArenaCardLastTurnStatus:: ds $1
; substatus2 that the opponent card got last turn
\1ArenaCardLastTurnSubstatus2:: ds $1
; indicates color of weakness that was changed
; for this card last turn
\1ArenaCardLastTurnChangeWeak:: ds $1
; stores an effect that was used on the Arena card last turn.
; see LAST_TURN_EFFECT_* constants.
\1ArenaCardLastTurnEffect:: ds $1
\1Unkfe:: ds $2
ENDM
MACRO sprite_anim_struct
\1Unk0:: ds 1
\1Unk1:: ds 1
+3
View File
@@ -19,6 +19,9 @@ INCLUDE "engine/bank04.asm"
SECTION "Scenes", ROMX[$6eb9], BANK[$4]
INCLUDE "engine/scenes.asm"
SECTION "Bank 5", ROMX
INCLUDE "engine/bank05.asm"
SECTION "Bank 6", ROMX
INCLUDE "engine/bank06.asm"
+11 -6
View File
@@ -18,9 +18,10 @@ sTextSpeed:: ; a006
s0a007:: ; a007
ds $1
s0a008:: ; a008
ds $1
s0a009:: ; a009
sSkipDelayAllowed:: ; a009
ds $1
sClearedGame:: ; a00a
@@ -37,8 +38,12 @@ sTextBoxFrameColor:: ; a00c
sPlayerName:: ; a010
ds NAME_BUFFER_LENGTH
s0a020:: ; a020
ds $4
sTotalDuelCounter:: ; a020
ds $2
; number of link battles the player has played
sLinkDuelCounter:: ; a022
ds $2
ds $dc
@@ -84,11 +89,11 @@ sCardAndDeckSaveDataEnd::
; saved data of the current duel, including a two-byte checksum
; see SaveDuelDataToDE
sSavedDuel:: ; bb00
sCurrentDuel:: ; bb00
ds $1
sSavedDuelChecksum:: ; bb01
sCurrentDuelChecksum:: ; bb01
ds $3
sSavedDuelData:: ; bb04
sCurrentDuelData:: ; bb04
ds $352
SECTION "SRAM1", SRAM
+263 -34
View File
@@ -50,13 +50,8 @@ SECTION "WRAM0 Duels 1", WRAM0
UNION
wPlayerDuelVariables:: ; c200
ds $100
wOpponentDuelVariables:: ; c300
ds $100
wPlayerDuelVariables:: duel_vars wPlayer ; c200
wOpponentDuelVariables:: duel_vars wOpponent ; c300
NEXTU
@@ -352,6 +347,9 @@ wSerialRecvBuf:: ; cb9f
wSerialEnd:: ; cbbf
; In a duel, the main menu current or last selected menu item
; From 0 to 5: Hand, Attack, Check, Pkmn Power, Retreat, Done
wCurrentDuelMenuItem:: ; cbbf
ds $1
; When we're viewing a card's information, the page we are currently at.
@@ -362,6 +360,10 @@ wSerialEnd:: ; cbbf
wCardPageNumber:: ; cbc0
ds $1
; how many selectable items are in a play area screen. used to set wNumMenuItems
; in order to navigate through a play area screen. this becomes the number of bench
; Pokemon cards if wExcludeArenaPokemon is 1, and that number plus 1 if it's 0.
wNumPlayAreaItems:: ; cbc1
ds $1
; selects a PLAY_AREA_* slot in order to display information related to it. used by functions
@@ -380,22 +382,90 @@ wCurPlayAreaY:: ; cbc3
; current Y coordinate where some play area information is being printed at. used by functions
; such as PrintPlayAreaCardLocation, PrintPlayAreaCardInformation and PrintPlayAreaCardHeader
wHUDEnergyAndHPBarsY:: ; cbc3
wPracticeDuelTextY:: ; cbc3
ds $1
ds $6
; selected bench slot (1-5, that is, a PLAY_AREA_BENCH_* constant)
wBenchSelectedPokemon:: ; cbc4
ds $1
; used by CheckIfEnoughEnergiesToRetreat and DisplayRetreatScreen
wEnergyCardsRequiredToRetreat:: ; cbc5
ds $1
wNumRetreatEnergiesSelected:: ; cbc6
ds $1
ds $1
; when you're in a duel submenu like the cards in your hand and you press A,
; the following two addresses keep track of which item was selected by the cursor
wSelectedDuelSubMenuItem:: ; cbc8
ds $1
ds $1
; CARDPAGETYPE_PLAY_AREA or CARDPAGETYPE_NOT_PLAY_AREA
; some of the elements displayed in a card page change depending on which value
wCardPageType:: ; cbca
ds $1
ds $5
; when processing or displaying the play area Pokemon cards of a duelist,
; whether to account for only the benched Pokemon ($01) or also the arena Pokemon ($00).
wExcludeArenaPokemon:: ; cbcb
ds $1
wPlayAreaScreenLoaded:: ; cbcc
ds $1
; determines what to do when player presses the Select button
; while viewing the Play Area:
; - if $0 or $2: no action
; - if $1: menu is accessible where player can examine Hand or other screens
; $2 is reserved for Func_4597
wPlayAreaSelectAction:: ; cbcd
ds $1
; low byte of the address of the next slot in the hTempRetreatCostCards array to be used
wTempRetreatCostCardsPos:: ; cbce
ds $1
; in a card list, which keys (among START and A_BUTTON) do not open the item selection
; menu when a card is selected, directly "submitting" the selected card instead.
wNoItemSelectionMenuKeys:: ; cbcf
ds $1
; when viewing a card page, which keys (among B_BUTTON, D_UP, and D_DOWN) will exit the page,
; either to go back to the previous menu or list, or to load the card page of the card above/below it
wCardPageExitKeys:: ; cbd0
ds $1
; used to store function pointer for printing card order
; in card list reordering screen.
wPrintSortNumberInCardListPtr:: ; cbd1
ds $2
; in the hand or discard pile card screen, id of the text printed in the bottom-left box
wCardListInfoBoxText:: ; cbd3
ds $2
; in the hand or discard pile card screen, id of the text printed as the header title
wCardListHeaderText:: ; cbd5
ds $2
; when selecting an item of a list of cards which type of menu shows up.
; PLAY_CHECK, SELECT_CHECK, or $00 for none.
wCardListItemSelectionMenuType:: ; cbd7
ds $1
; flag indicating whether a list of cards should be sorted by ID
wSortCardListByID:: ; cbd8
ds $1
wAttachedEnergyMenuPlayAreaLocation:: ; cbd9
ds $1
SECTION "WRAM0 Duels 2", WRAM0
wOppRNG1:: ; cbda
@@ -408,43 +478,122 @@ wOppRNG1:: ; cbda
wDuelReturnAddress:: ; cbdd
ds $2
ds $3
; if non-zero, duel menu input is not checked
wDebugSkipDuelMenuInput:: ; cbdf
ds $1
ds $2
; temporarily stores 8 bytes for serial send/recv.
; used by SerialSend8Bytes and SerialRecv8Bytes
wTempSerialBuf:: ; cbe2
ds $8
ds $13
wcbfd:: ; cbfd
ds $1
wcbeb:: ; cbeb
ds $1
wAttachedEnergyMenuDenominator:: ; cbec
ds $1
wAttachedEnergyMenuNumerator:: ; cbed
ds $1
; text ID to show in the Attached Energy screen
wAttachedEnergyMenuTextID:: ; cbee
ds $2
; used by TurnDuelistTakePrizes to store the remaining Prizes, so that if more than that
; amount would be taken, only the remaining amount is taken
wTempNumRemainingPrizeCards:: ; cbf0
ds $1
; if FALSE, player is placing initial arena pokemon
; if TRUE, player is placing initial bench pokemon
wPlacingInitialBenchPokemon:: ; cbf1
ds $1
; during a practice duel, identifies an entry of PracticeDuelActionTable
wPracticeDuelAction:: ; cbf2
ds $1
wDuelMainSceneSelectHotkeyAction:: ; cbf3
ds $1
wPracticeDuelTurn:: ; cbf4
ds $1
wcbf5:: ; cbf5
ds $1
ds $6
; used when opening the card page of an attack when attacking,
; serving as an index for AttackPageDisplayPointerTable.
; see ATTACKPAGE_* constants
wAttackPageNumber:: ; cbfc
ds $1
; the value of hWhoseTurn gets loaded here at the beginning of each duelist's turn.
; more reliable than hWhoseTurn, as hWhoseTurn may change temporarily in order to handle status
; conditions or other events of the non-turn duelist. used mostly between turns (to check which
; duelist's turn just finished), or to restore the value of hWhoseTurn at some point.
wWhoseTurn:: ; cbfd
ds $1
; number of turns taken by both players
wDuelTurns:: ; cbfe
ds $1
; used to signal that the current duel has finished, not to be mistaken with wDuelResult
; 0 = no one has won duel yet
; 1 = player whose turn it is has won the duel
; 2 = player whose turn it is has lost the duel
; 3 = duel ended in a draw (start sudden death match)
wDuelFinished:: ; cbff
ds $1
; current duel is a [wDuelInitialPrizes]-prize match
wDuelInitialPrizes:: ; cc00
ds $1
wcc01:: ; cc01
; maximum number of Pokémon in Play Area
; normally it's 6, but when dueling with the
; Small Bench rule, it's reduced to 4
wMaxNumPlayAreaPokemon:: ; cc01
ds $1
; a DUELTYPE_* constant. note that for a practice duel, wIsPracticeDuel must also be set to $1
wDuelType:: ; cc02
ds $1
ds $3
wcc03:: ; cc03
ds $1
wAlreadyPlayedEnergy:: ; cc04
ds $1
; set to 1 if the confusion check coin toss in AttemptRetreat is heads
wGotHeadsFromConfusionCheckDuringRetreat:: ; cc05
ds $1
wGoopGasAttackActive:: ; cc06
ds $1
ds $2
wcc07:: ; cc07
ds $1
; DUELIST_TYPE_* of the turn holder
wDuelistType:: ; cc08
ds $1
; this holds the current opponent's deck minus 2 (that is, a *_DECK_ID constant),
; in order to account for the two unused pointers at the beginning of DeckPointers.
wOpponentDeckID:: ; cc09
ds $1
wcc0f:: ; cc0a
ds $1
; index (0-1) of the attack or Pokemon Power being used by the player's arena card
@@ -470,7 +619,7 @@ wSpecialRule:: ; cc10
ds $1
wcc12:: ; cc12
wOpponentNPCID:: ; cc12
ds $1
; text id of the opponent's name
@@ -480,16 +629,29 @@ wOpponentName:: ; cc13
wcc15:: ; cc15
ds $1
wcc16:: ; cc16
wNPCDuelDeckID:: ; cc16
ds $1
wcc17:: ; cc17
; song played during a duel
wDuelTheme:: ; cc17
ds $1
wcc18:: ; cc18
ds $1
SECTION "WRAM0 Duels 2@cc29", WRAM0
wcc19:: ; cc19
ds $1
wcc1a:: ; cc1a
ds $1
wcc1b:: ; cc1b
ds $1
SECTION "WRAM0 Duels 2@cc21", WRAM0
wAttackEnergyCost:: ; cc21
ds NUM_TYPES
; holds the energies attached to a given pokemon card. 1 byte for each of the
; 8 energy types (includes the unused one that shares byte with the colorless energy)
@@ -535,7 +697,15 @@ wTempTurnDuelistCardID:: ; ccd4
wTempNonTurnDuelistCardID:: ; ccd6
ds $2
ds $3
wccd8:: ; ccd8
ds $1
wccd9:: ; ccd9
ds $1
; the status condition of the defending Pokemon is loaded here after an attack
wccc5:: ; ccda
ds $1
; *_ATTACK constants for selected attack
; 0 for the first attack (or PKMN Power)
@@ -573,7 +743,11 @@ wEffectFunctionsFeedback:: ; cce3
wIsDamageToSelf:: ; ccfb
ds $1
ds $2
wccfc:: ; ccfc
ds $1
wDuelFinishParam:: ; cce8
ds $1
wOpponentDeckName:: ; ccfe
ds $2
@@ -614,9 +788,12 @@ wNoEffectFromWhichStatus:: ; cd06
wDeckSize:: ; cd07
ds $1
wcd08:: ; cd08
; when non-0, allows the player to skip some delays during a duel by pressing B.
; value read from sSkipDelayAllowed. probably only used for debugging.
wSkipDelayAllowed:: ; cd08
ds $1
wcd09:: ; cd09
ds $1
wcd0a:: ; cd0a
@@ -640,18 +817,42 @@ wcd0f:: ; cd0f
wcd10:: ; cd10
ds $4
ds $2
wcd14:: ; cd14
ds $1
wcd15:: ; cd15
ds $1
wcd16:: ; cd16
ds $1
wcd17:: ; cd17
ds $3
wcd1a:: ; cd1a
ds $1
ds $9
wcd18:: ; cd18
ds $1
; when non-0, AIMakeDecision doesn't wait 60 frames and print DuelistIsThinkingText
wSkipDuelistIsThinkingDelay:: ; cd19
ds $1
; return address for when the Link Opponent has
; made a decision on his turn, so that the duel continues
wLinkOpponentTurnReturnAddress:: ; cd1a
ds $2
wNumCardsTryingToDraw:: ; cd1c
ds $1
; number of cards being drawn in order to animate the number of cards in
; the hand and in the deck in the draw card screen
wNumCardsBeingDrawn:: ; cd1d
ds $1
wOpponentTurnEnded:: ; cd1e
ds $1
ds $5
wDeckDiagnosisTextIDsPtr:: ; cd24
ds $2
@@ -817,7 +1018,11 @@ wTextMaxLength:: ; cd75
wUppercaseHalfWidthLetters:: ; cd76
ds $1
ds $2
wcd77:: ; cd77
ds $1
wcd78:: ; cd78
ds $1
; During a duel, this is always $b after the first attack.
; $b is the bank where the functions associated to card or effect commands are.
@@ -931,6 +1136,7 @@ wSerialDataPtr:: ; cdf6
wTempCardID_ce08:: ; ce08
ds $2
wce0a:: ; ce0a
ds $2
wce0c:: ; ce0c
@@ -1164,6 +1370,9 @@ wd0c1:: ; d0c1
wTransitionTablePtr:: ; d0c2
ds $2
; same as wDuelInitialPrizes but with upper 2 bits set
wDuelInitialPrizesUpperBitsSet:: ; d0c4
wd0c4:: ; d0c4
ds $1
@@ -1191,7 +1400,10 @@ wGlossaryMenu:: ; d0d1
wd0d2:: ; d0d2
ds $1
ds $6
wd0d3:: ; d0d3
ds $1
ds $5
; buffer to store data that will be sent/received through IR
wIRDataBuffer:: ; d0d9
@@ -2241,11 +2453,28 @@ wdc60:: ; dc60
wdce2:: ; dce2
ds $1
ds $2
wdce5:: ; dce5
; used to know what coordinate offsets to use to place animations
; for use in GetAnimCoordsAndFlags
; DUEL_ANIM_SCREEN_MAIN_SCENE = main scene
; DUEL_ANIM_SCREEN_PLAYER_PLAY_AREA = Player's Play Area screen
; DUEL_ANIM_SCREEN_OPP_PLAY_AREA = Opponent's Play Area screen
wDuelAnimationScreen:: ; dce3
ds $1
; which side to play animation
; uses PLAYER_TURN and OPPONENT_TURN constants
wDuelAnimDuelistSide:: ; dce4
ds $1
; used in GetAnimCoordsAndFlags to determine
; what coordinates to draw the animation in.
; e.g. used to know what Play Area card
; to draw a hit animation in the Play Area screen.
wDuelAnimLocationParam:: ; dce5
ds $1
; damage value to display with animation
wDuelAnimDamage:: ; dce6
ds $2
wdce8:: ; dce8
@@ -2268,7 +2497,7 @@ SECTION "WRAM1@dd02", WRAMX
wDuelResult:: ; dd02
ds $1
wdd03:: ; dd03
wDuelStartTheme:: ; dd03
ds $1
wdd04:: ; dd04