This commit is contained in:
obskyr
2018-07-07 03:49:57 +02:00
21 changed files with 2676 additions and 2652 deletions
+23
View File
@@ -0,0 +1,23 @@
# Auto detect text files and perform LF normalization
* text eol=lf
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.asm text
*.sh text
*.c text
*.py text
*.MD text
*.h text
*.txt text
*.inc text
# Denote all files that are truly binary and should not be modified.
*.png binary
*.lz binary
*.2bpp binary
*.1bpp binary
*.bin binary
*.blk binary
*.pic binary
+129 -129
View File
@@ -1,129 +1,129 @@
; item_attributes struct members (see data/items/attributes.asm)
const_def
const ITEMATTR_PRICE
const ITEMATTR_PRICE_HI
const ITEMATTR_EFFECT
const ITEMATTR_PARAM
const ITEMATTR_PERMISSIONS
const ITEMATTR_POCKET
const ITEMATTR_HELP
ITEMATTR_STRUCT_LENGTH EQU const_value
; item types
const_def 1
const ITEM ; 1
const KEY_ITEM ; 2
const BALL ; 3
const TM_HM ; 4
; item menu types
; UseItem.dw indexes (see engine/items/pack.asm)
; UseRegisteredItem.SwitchTo indexes (see engine/overworld/select_menu.asm)
ITEMMENU_NOUSE EQU 0
ITEMMENU_CURRENT EQU 4
ITEMMENU_PARTY EQU 5
ITEMMENU_CLOSE EQU 6
; item actions
CANT_SELECT_F EQU 6
CANT_TOSS_F EQU 7
NO_LIMITS EQU 0
CANT_SELECT EQU 1 << CANT_SELECT_F
CANT_TOSS EQU 1 << CANT_TOSS_F
; pack pockets
const_def
const ITEM_POCKET ; 0
const BALL_POCKET ; 1
const KEY_ITEM_POCKET ; 2
const TM_HM_POCKET ; 3
NUM_POCKETS EQU const_value
MAX_ITEMS EQU 20
MAX_KEY_ITEMS EQU 20
MAX_PC_ITEMS EQU 50
; held item effects
const_def
const HELD_NONE
const HELD_BERRY
const HELD_2
const HELD_LEFTOVERS
const HELD_4
const HELD_5
const HELD_RESTORE_PP
const HELD_RESTORE_ALL_PP
const HELD_CLEANSE_TAG
const_def 10
const HELD_HEAL_POISON
const HELD_HEAL_FREEZE
const HELD_HEAL_BURN
const HELD_HEAL_SLEEP
const HELD_HEAL_PARALYZE
const HELD_HEAL_STATUS
const HELD_HEAL_CONFUSION
const_def 20
const HELD_PREVENT_POISON
const HELD_PREVENT_BURN
const HELD_PREVENT_FREEZE
const HELD_PREVENT_SLEEP
const HELD_PREVENT_PARALYZE
const HELD_PREVENT_CONFUSE
const_def 30
const HELD_30
const HELD_ATTACK_UP
const HELD_DEFENSE_UP
const HELD_SPEED_UP
const HELD_SP_ATTACK_UP
const HELD_SP_DEFENSE_UP
const HELD_ACCURACY_UP
const HELD_EVASION_UP
const HELD_38
const_def 40
const HELD_40
const HELD_41
const HELD_METAL_POWDER
const HELD_43
const HELD_44
const HELD_45
const HELD_46
const HELD_47
const HELD_48
const_def 50
const HELD_NORMAL_BOOST
const HELD_FIGHTING_BOOST
const HELD_FLYING_BOOST
const HELD_POISON_BOOST
const HELD_GROUND_BOOST
const HELD_ROCK_BOOST
const HELD_BUG_BOOST
const HELD_GHOST_BOOST
const HELD_FIRE_BOOST
const HELD_WATER_BOOST
const HELD_GRASS_BOOST
const HELD_ELECTRIC_BOOST
const HELD_PSYCHIC_BOOST
const HELD_ICE_BOOST
const HELD_DRAGON_BOOST
const HELD_DARK_BOOST
const HELD_STEEL_BOOST
const_def 70
const HELD_CATCH_CHANCE
const HELD_71
const HELD_ESCAPE
const HELD_CRITICAL_UP
const HELD_QUICK_CLAW
const HELD_FLINCH
const HELD_AMULET_COIN
const HELD_BRIGHTPOWDER
const HELD_78
const HELD_FOCUS_BAND
; item_attributes struct members (see data/items/attributes.asm)
const_def
const ITEMATTR_PRICE
const ITEMATTR_PRICE_HI
const ITEMATTR_EFFECT
const ITEMATTR_PARAM
const ITEMATTR_PERMISSIONS
const ITEMATTR_POCKET
const ITEMATTR_HELP
ITEMATTR_STRUCT_LENGTH EQU const_value
; item types
const_def 1
const ITEM ; 1
const KEY_ITEM ; 2
const BALL ; 3
const TM_HM ; 4
; item menu types
; UseItem.dw indexes (see engine/items/pack.asm)
; UseRegisteredItem.SwitchTo indexes (see engine/overworld/select_menu.asm)
ITEMMENU_NOUSE EQU 0
ITEMMENU_CURRENT EQU 4
ITEMMENU_PARTY EQU 5
ITEMMENU_CLOSE EQU 6
; item actions
CANT_SELECT_F EQU 6
CANT_TOSS_F EQU 7
NO_LIMITS EQU 0
CANT_SELECT EQU 1 << CANT_SELECT_F
CANT_TOSS EQU 1 << CANT_TOSS_F
; pack pockets
const_def
const ITEM_POCKET ; 0
const BALL_POCKET ; 1
const KEY_ITEM_POCKET ; 2
const TM_HM_POCKET ; 3
NUM_POCKETS EQU const_value
MAX_ITEMS EQU 20
MAX_KEY_ITEMS EQU 20
MAX_PC_ITEMS EQU 50
; held item effects
const_def
const HELD_NONE
const HELD_BERRY
const HELD_2
const HELD_LEFTOVERS
const HELD_4
const HELD_5
const HELD_RESTORE_PP
const HELD_RESTORE_ALL_PP
const HELD_CLEANSE_TAG
const_def 10
const HELD_HEAL_POISON
const HELD_HEAL_FREEZE
const HELD_HEAL_BURN
const HELD_HEAL_SLEEP
const HELD_HEAL_PARALYZE
const HELD_HEAL_STATUS
const HELD_HEAL_CONFUSION
const_def 20
const HELD_PREVENT_POISON
const HELD_PREVENT_BURN
const HELD_PREVENT_FREEZE
const HELD_PREVENT_SLEEP
const HELD_PREVENT_PARALYZE
const HELD_PREVENT_CONFUSE
const_def 30
const HELD_30
const HELD_ATTACK_UP
const HELD_DEFENSE_UP
const HELD_SPEED_UP
const HELD_SP_ATTACK_UP
const HELD_SP_DEFENSE_UP
const HELD_ACCURACY_UP
const HELD_EVASION_UP
const HELD_38
const_def 40
const HELD_40
const HELD_41
const HELD_METAL_POWDER
const HELD_43
const HELD_44
const HELD_45
const HELD_46
const HELD_47
const HELD_48
const_def 50
const HELD_NORMAL_BOOST
const HELD_FIGHTING_BOOST
const HELD_FLYING_BOOST
const HELD_POISON_BOOST
const HELD_GROUND_BOOST
const HELD_ROCK_BOOST
const HELD_BUG_BOOST
const HELD_GHOST_BOOST
const HELD_FIRE_BOOST
const HELD_WATER_BOOST
const HELD_GRASS_BOOST
const HELD_ELECTRIC_BOOST
const HELD_PSYCHIC_BOOST
const HELD_ICE_BOOST
const HELD_DRAGON_BOOST
const HELD_DARK_BOOST
const HELD_STEEL_BOOST
const_def 70
const HELD_CATCH_CHANCE
const HELD_71
const HELD_ESCAPE
const HELD_CRITICAL_UP
const HELD_QUICK_CLAW
const HELD_FLINCH
const HELD_AMULET_COIN
const HELD_BRIGHTPOWDER
const HELD_78
const HELD_FOCUS_BAND
Executable → Regular
+44 -44
View File
@@ -1,44 +1,44 @@
const_def
const FACE_DOWN ; $00
const FACE_UP ; $01
const FACE_LEFT ; $02
const FACE_RIGHT ; $03
const SLOW_STEP_DOWN ; $04
const SLOW_STEP_UP ; $05
const SLOW_STEP_LEFT ; $06
const SLOW_STEP_RIGHT ; $07
const STEP_DOWN ; $08
const STEP_UP ; $09
const STEP_LEFT ; $0a
const STEP_RIGHT ; $0b
const FAST_STEP_DOWN ; $0c
const FAST_STEP_UP ; $0d
const FAST_STEP_LEFT ; $0e
const FAST_STEP_RIGHT ; $0f
const FAST_STEP_DOWN2 ; $10
const FAST_STEP_UP2 ; $11
const FAST_STEP_LEFT2 ; $12
const FAST_STEP_RIGHT2 ; $13
const SLOW_JUMP_DOWN ; $14
const SLOW_JUMP_UP ; $15
const SLOW_JUMP_LEFT ; $16
const SLOW_JUMP_RIGHT ; $17
const JUMP_DOWN ; $18
const JUMP_UP ; $19
const JUMP_LEFT ; $1a
const JUMP_RIGHT ; $1b
const FAST_JUMP_DOWN ; $1c
const FAST_JUMP_UP ; $1d
const FAST_JUMP_LEFT ; $1e
const FAST_JUMP_RIGHT ; $1f
const FAST_JUMP_DOWN2 ; $20
const FAST_JUMP_UP2 ; $21
const FAST_JUMP_LEFT2 ; $22
const FAST_JUMP_RIGHT2 ; $23
const MOVEMENT_24 ; $24
const MOVEMENT_25 ; $25
const MOVEMENT_26 ; $26
const MOVEMENT_27 ; $27
const MOVEMENT_28 ; $28
const MOVEMENT_29 ; $29
const NO_MOVEMENT ; $2a
const_def
const FACE_DOWN ; $00
const FACE_UP ; $01
const FACE_LEFT ; $02
const FACE_RIGHT ; $03
const SLOW_STEP_DOWN ; $04
const SLOW_STEP_UP ; $05
const SLOW_STEP_LEFT ; $06
const SLOW_STEP_RIGHT ; $07
const STEP_DOWN ; $08
const STEP_UP ; $09
const STEP_LEFT ; $0a
const STEP_RIGHT ; $0b
const FAST_STEP_DOWN ; $0c
const FAST_STEP_UP ; $0d
const FAST_STEP_LEFT ; $0e
const FAST_STEP_RIGHT ; $0f
const FAST_STEP_DOWN2 ; $10
const FAST_STEP_UP2 ; $11
const FAST_STEP_LEFT2 ; $12
const FAST_STEP_RIGHT2 ; $13
const SLOW_JUMP_DOWN ; $14
const SLOW_JUMP_UP ; $15
const SLOW_JUMP_LEFT ; $16
const SLOW_JUMP_RIGHT ; $17
const JUMP_DOWN ; $18
const JUMP_UP ; $19
const JUMP_LEFT ; $1a
const JUMP_RIGHT ; $1b
const FAST_JUMP_DOWN ; $1c
const FAST_JUMP_UP ; $1d
const FAST_JUMP_LEFT ; $1e
const FAST_JUMP_RIGHT ; $1f
const FAST_JUMP_DOWN2 ; $20
const FAST_JUMP_UP2 ; $21
const FAST_JUMP_LEFT2 ; $22
const FAST_JUMP_RIGHT2 ; $23
const MOVEMENT_24 ; $24
const MOVEMENT_25 ; $25
const MOVEMENT_26 ; $26
const MOVEMENT_27 ; $27
const MOVEMENT_28 ; $28
const MOVEMENT_29 ; $29
const NO_MOVEMENT ; $2a
+1 -1
View File
@@ -1,2 +1,2 @@
; Name Lists
; Name Lists
ITEM_NAME EQU 4
+18 -18
View File
@@ -1,18 +1,18 @@
; Script IDs
const_def
const SCRIPT_ID_00 ; 00
const SCRIPT_ID_01 ; 01
const SCRIPT_ID_02 ; 02
const SCRIPT_ID_03 ; 03
const SCRIPT_ID_04 ; 04
const SCRIPT_ID_05 ; 05
; Flags
SCRIPT_FINISHED_F EQU 7
; Masks/Return Values
SCRIPT_FINISHED_MASK EQU 1 << SCRIPT_FINISHED_F
SCRIPT_SUCCESS EQU $f
SCRIPT_FAIL EQU 0
; Script IDs
const_def
const SCRIPT_ID_00 ; 00
const SCRIPT_ID_01 ; 01
const SCRIPT_ID_02 ; 02
const SCRIPT_ID_03 ; 03
const SCRIPT_ID_04 ; 04
const SCRIPT_ID_05 ; 05
; Flags
SCRIPT_FINISHED_F EQU 7
; Masks/Return Values
SCRIPT_FINISHED_MASK EQU 1 << SCRIPT_FINISHED_F
SCRIPT_SUCCESS EQU $f
SCRIPT_FAIL EQU 0
+69 -69
View File
@@ -1,69 +1,69 @@
INCLUDE "constants.asm"
SECTION "Collision Type Table", ROMX[$4664], BANK[$03]
CollisionTypeTable: ; 03:4664
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $00
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $04
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $08
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $0C
db NEVER_SOLID, NEVER_SOLID, SOMETIMES_SOLID, NEVER_SOLID ; $10
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $14
db NEVER_SOLID, NEVER_SOLID, SOMETIMES_SOLID, NEVER_SOLID ; $18
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $1C
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $20
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, ALWAYS_SOLID ; $24
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $28
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, ALWAYS_SOLID ; $30
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $34
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $38
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $3C
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $40
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $44
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $48
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $4C
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $50
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $54
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $58
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $5C
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $60
db NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID, NEVER_SOLID ; $64
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $68
db NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID, NEVER_SOLID ; $6C
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $70
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $74
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $78
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $7C
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $80
db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $84
db ALWAYS_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $88
db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $8C
db ALWAYS_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $90
db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $94
db ALWAYS_SOLID, ALWAYS_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $98
db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $9C
db ALWAYS_SOLID, ALWAYS_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $A0
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $A4
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $A8
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $AC
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B0
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B4
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B8
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $BC
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C0
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C4
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C8
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $CC
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D0
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D4
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D8
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $DC
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E0
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E4
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E8
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $EC
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F0
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F4
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F8
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $FC
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $100
INCLUDE "constants.asm"
SECTION "Collision Type Table", ROMX[$4664], BANK[$03]
CollisionTypeTable: ; 03:4664
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $00
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $04
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $08
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $0C
db NEVER_SOLID, NEVER_SOLID, SOMETIMES_SOLID, NEVER_SOLID ; $10
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $14
db NEVER_SOLID, NEVER_SOLID, SOMETIMES_SOLID, NEVER_SOLID ; $18
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $1C
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $20
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, ALWAYS_SOLID ; $24
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $28
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, ALWAYS_SOLID ; $30
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $34
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $38
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $3C
db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $40
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $44
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $48
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $4C
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $50
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $54
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $58
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $5C
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $60
db NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID, NEVER_SOLID ; $64
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $68
db NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID, NEVER_SOLID ; $6C
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $70
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $74
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $78
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $7C
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $80
db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $84
db ALWAYS_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $88
db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $8C
db ALWAYS_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $90
db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $94
db ALWAYS_SOLID, ALWAYS_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $98
db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $9C
db ALWAYS_SOLID, ALWAYS_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $A0
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $A4
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $A8
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $AC
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B0
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B4
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B8
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $BC
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C0
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C4
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C8
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $CC
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D0
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D4
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D8
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $DC
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E0
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E4
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E8
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $EC
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F0
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F4
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F8
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $FC
db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $100
+113 -113
View File
@@ -1,113 +1,113 @@
INCLUDE "constants.asm"
SECTION "Type Matchups", ROMX[$506D], BANK[$0D]
TypeMatchups: ; 3506d
; attacker, defender, *=
db TYPE_NORMAL, TYPE_ROCK, NOT_VERY_EFFECTIVE
db TYPE_NORMAL, TYPE_DARK, SUPER_EFFECTIVE
db TYPE_FIRE, TYPE_FIRE, NOT_VERY_EFFECTIVE
db TYPE_FIRE, TYPE_WATER, NOT_VERY_EFFECTIVE
db TYPE_FIRE, TYPE_GRASS, SUPER_EFFECTIVE
db TYPE_FIRE, TYPE_ICE, SUPER_EFFECTIVE
db TYPE_FIRE, TYPE_BUG, SUPER_EFFECTIVE
db TYPE_FIRE, TYPE_ROCK, NOT_VERY_EFFECTIVE
db TYPE_FIRE, TYPE_DRAGON, NOT_VERY_EFFECTIVE
db TYPE_WATER, TYPE_FIRE, SUPER_EFFECTIVE
db TYPE_WATER, TYPE_WATER, NOT_VERY_EFFECTIVE
db TYPE_WATER, TYPE_ELECTRIC, NOT_VERY_EFFECTIVE
db TYPE_WATER, TYPE_GRASS, NOT_VERY_EFFECTIVE
db TYPE_WATER, TYPE_GROUND, SUPER_EFFECTIVE
db TYPE_WATER, TYPE_ROCK, SUPER_EFFECTIVE
db TYPE_WATER, TYPE_DRAGON, NOT_VERY_EFFECTIVE
db TYPE_WATER, TYPE_METAL, SUPER_EFFECTIVE
db TYPE_ELECTRIC, TYPE_WATER, SUPER_EFFECTIVE
db TYPE_ELECTRIC, TYPE_ELECTRIC, NOT_VERY_EFFECTIVE
db TYPE_ELECTRIC, TYPE_GRASS, NOT_VERY_EFFECTIVE
db TYPE_ELECTRIC, TYPE_GROUND, NO_EFFECT
db TYPE_ELECTRIC, TYPE_FLYING, SUPER_EFFECTIVE
db TYPE_ELECTRIC, TYPE_DRAGON, NOT_VERY_EFFECTIVE
db TYPE_ELECTRIC, TYPE_METAL, SUPER_EFFECTIVE
db TYPE_GRASS, TYPE_FIRE, NOT_VERY_EFFECTIVE
db TYPE_GRASS, TYPE_WATER, SUPER_EFFECTIVE
db TYPE_GRASS, TYPE_GRASS, NOT_VERY_EFFECTIVE
db TYPE_GRASS, TYPE_POISON, NOT_VERY_EFFECTIVE
db TYPE_GRASS, TYPE_GROUND, SUPER_EFFECTIVE
db TYPE_GRASS, TYPE_FLYING, NOT_VERY_EFFECTIVE
db TYPE_GRASS, TYPE_BUG, NOT_VERY_EFFECTIVE
db TYPE_GRASS, TYPE_ROCK, SUPER_EFFECTIVE
db TYPE_GRASS, TYPE_DRAGON, NOT_VERY_EFFECTIVE
db TYPE_ICE, TYPE_FIRE, NOT_VERY_EFFECTIVE
db TYPE_ICE, TYPE_WATER, NOT_VERY_EFFECTIVE
db TYPE_ICE, TYPE_GRASS, SUPER_EFFECTIVE
db TYPE_ICE, TYPE_ICE, NOT_VERY_EFFECTIVE
db TYPE_ICE, TYPE_GROUND, SUPER_EFFECTIVE
db TYPE_ICE, TYPE_FLYING, SUPER_EFFECTIVE
db TYPE_ICE, TYPE_DRAGON, SUPER_EFFECTIVE
db TYPE_FIGHTING, TYPE_NORMAL, SUPER_EFFECTIVE
db TYPE_FIGHTING, TYPE_ICE, SUPER_EFFECTIVE
db TYPE_FIGHTING, TYPE_POISON, NOT_VERY_EFFECTIVE
db TYPE_FIGHTING, TYPE_FLYING, NOT_VERY_EFFECTIVE
db TYPE_FIGHTING, TYPE_PSYCHIC, NOT_VERY_EFFECTIVE
db TYPE_FIGHTING, TYPE_BUG, NOT_VERY_EFFECTIVE
db TYPE_FIGHTING, TYPE_ROCK, SUPER_EFFECTIVE
db TYPE_FIGHTING, TYPE_GHOST, NO_EFFECT
db TYPE_FIGHTING, TYPE_METAL, NOT_VERY_EFFECTIVE
db TYPE_POISON, TYPE_GRASS, SUPER_EFFECTIVE
db TYPE_POISON, TYPE_POISON, NOT_VERY_EFFECTIVE
db TYPE_POISON, TYPE_GROUND, NOT_VERY_EFFECTIVE
db TYPE_POISON, TYPE_BUG, SUPER_EFFECTIVE
db TYPE_POISON, TYPE_ROCK, NOT_VERY_EFFECTIVE
db TYPE_POISON, TYPE_GHOST, NOT_VERY_EFFECTIVE
db TYPE_POISON, TYPE_METAL, NOT_VERY_EFFECTIVE
db TYPE_GROUND, TYPE_FIRE, SUPER_EFFECTIVE
db TYPE_GROUND, TYPE_ELECTRIC, SUPER_EFFECTIVE
db TYPE_GROUND, TYPE_GRASS, NOT_VERY_EFFECTIVE
db TYPE_GROUND, TYPE_POISON, SUPER_EFFECTIVE
db TYPE_GROUND, TYPE_FLYING, NO_EFFECT
db TYPE_GROUND, TYPE_BUG, NOT_VERY_EFFECTIVE
db TYPE_GROUND, TYPE_ROCK, SUPER_EFFECTIVE
db TYPE_FLYING, TYPE_ELECTRIC, NOT_VERY_EFFECTIVE
db TYPE_FLYING, TYPE_GRASS, SUPER_EFFECTIVE
db TYPE_FLYING, TYPE_FIGHTING, SUPER_EFFECTIVE
db TYPE_FLYING, TYPE_BUG, SUPER_EFFECTIVE
db TYPE_FLYING, TYPE_ROCK, NOT_VERY_EFFECTIVE
db TYPE_PSYCHIC, TYPE_FIGHTING, SUPER_EFFECTIVE
db TYPE_PSYCHIC, TYPE_POISON, SUPER_EFFECTIVE
db TYPE_PSYCHIC, TYPE_PSYCHIC, NOT_VERY_EFFECTIVE
db TYPE_PSYCHIC, TYPE_DARK, NOT_VERY_EFFECTIVE
db TYPE_BUG, TYPE_FIRE, NOT_VERY_EFFECTIVE
db TYPE_BUG, TYPE_GRASS, SUPER_EFFECTIVE
db TYPE_BUG, TYPE_FIGHTING, NOT_VERY_EFFECTIVE
db TYPE_BUG, TYPE_POISON, SUPER_EFFECTIVE
db TYPE_BUG, TYPE_FLYING, NOT_VERY_EFFECTIVE
db TYPE_BUG, TYPE_PSYCHIC, SUPER_EFFECTIVE
db TYPE_BUG, TYPE_GHOST, NOT_VERY_EFFECTIVE
db TYPE_BUG, TYPE_DARK, SUPER_EFFECTIVE
db TYPE_ROCK, TYPE_FIRE, SUPER_EFFECTIVE
db TYPE_ROCK, TYPE_ICE, SUPER_EFFECTIVE
db TYPE_ROCK, TYPE_FIGHTING, NOT_VERY_EFFECTIVE
db TYPE_ROCK, TYPE_GROUND, NOT_VERY_EFFECTIVE
db TYPE_ROCK, TYPE_FLYING, SUPER_EFFECTIVE
db TYPE_ROCK, TYPE_BUG, SUPER_EFFECTIVE
db TYPE_ROCK, TYPE_METAL, NOT_VERY_EFFECTIVE
db TYPE_GHOST, TYPE_NORMAL, NO_EFFECT
db TYPE_GHOST, TYPE_PSYCHIC, SUPER_EFFECTIVE
db TYPE_GHOST, TYPE_DARK, NOT_VERY_EFFECTIVE
db TYPE_DRAGON, TYPE_DRAGON, SUPER_EFFECTIVE
db TYPE_DARK, TYPE_NORMAL, NOT_VERY_EFFECTIVE
db TYPE_DARK, TYPE_PSYCHIC, SUPER_EFFECTIVE
db TYPE_DARK, TYPE_GHOST, SUPER_EFFECTIVE
db TYPE_DARK, TYPE_DARK, SUPER_EFFECTIVE
db TYPE_METAL, TYPE_WATER, NOT_VERY_EFFECTIVE
db TYPE_METAL, TYPE_ELECTRIC, NOT_VERY_EFFECTIVE
db TYPE_METAL, TYPE_ROCK, SUPER_EFFECTIVE
db TYPE_METAL, TYPE_METAL, NO_EFFECT
db -2 ; end (with Foresight)
; Foresight removes Ghost's immunity to Normal
db TYPE_NORMAL, TYPE_GHOST, NO_EFFECT
db -1 ; end
; 3519b
INCLUDE "constants.asm"
SECTION "Type Matchups", ROMX[$506D], BANK[$0D]
TypeMatchups: ; 3506d
; attacker, defender, *=
db TYPE_NORMAL, TYPE_ROCK, NOT_VERY_EFFECTIVE
db TYPE_NORMAL, TYPE_DARK, SUPER_EFFECTIVE
db TYPE_FIRE, TYPE_FIRE, NOT_VERY_EFFECTIVE
db TYPE_FIRE, TYPE_WATER, NOT_VERY_EFFECTIVE
db TYPE_FIRE, TYPE_GRASS, SUPER_EFFECTIVE
db TYPE_FIRE, TYPE_ICE, SUPER_EFFECTIVE
db TYPE_FIRE, TYPE_BUG, SUPER_EFFECTIVE
db TYPE_FIRE, TYPE_ROCK, NOT_VERY_EFFECTIVE
db TYPE_FIRE, TYPE_DRAGON, NOT_VERY_EFFECTIVE
db TYPE_WATER, TYPE_FIRE, SUPER_EFFECTIVE
db TYPE_WATER, TYPE_WATER, NOT_VERY_EFFECTIVE
db TYPE_WATER, TYPE_ELECTRIC, NOT_VERY_EFFECTIVE
db TYPE_WATER, TYPE_GRASS, NOT_VERY_EFFECTIVE
db TYPE_WATER, TYPE_GROUND, SUPER_EFFECTIVE
db TYPE_WATER, TYPE_ROCK, SUPER_EFFECTIVE
db TYPE_WATER, TYPE_DRAGON, NOT_VERY_EFFECTIVE
db TYPE_WATER, TYPE_METAL, SUPER_EFFECTIVE
db TYPE_ELECTRIC, TYPE_WATER, SUPER_EFFECTIVE
db TYPE_ELECTRIC, TYPE_ELECTRIC, NOT_VERY_EFFECTIVE
db TYPE_ELECTRIC, TYPE_GRASS, NOT_VERY_EFFECTIVE
db TYPE_ELECTRIC, TYPE_GROUND, NO_EFFECT
db TYPE_ELECTRIC, TYPE_FLYING, SUPER_EFFECTIVE
db TYPE_ELECTRIC, TYPE_DRAGON, NOT_VERY_EFFECTIVE
db TYPE_ELECTRIC, TYPE_METAL, SUPER_EFFECTIVE
db TYPE_GRASS, TYPE_FIRE, NOT_VERY_EFFECTIVE
db TYPE_GRASS, TYPE_WATER, SUPER_EFFECTIVE
db TYPE_GRASS, TYPE_GRASS, NOT_VERY_EFFECTIVE
db TYPE_GRASS, TYPE_POISON, NOT_VERY_EFFECTIVE
db TYPE_GRASS, TYPE_GROUND, SUPER_EFFECTIVE
db TYPE_GRASS, TYPE_FLYING, NOT_VERY_EFFECTIVE
db TYPE_GRASS, TYPE_BUG, NOT_VERY_EFFECTIVE
db TYPE_GRASS, TYPE_ROCK, SUPER_EFFECTIVE
db TYPE_GRASS, TYPE_DRAGON, NOT_VERY_EFFECTIVE
db TYPE_ICE, TYPE_FIRE, NOT_VERY_EFFECTIVE
db TYPE_ICE, TYPE_WATER, NOT_VERY_EFFECTIVE
db TYPE_ICE, TYPE_GRASS, SUPER_EFFECTIVE
db TYPE_ICE, TYPE_ICE, NOT_VERY_EFFECTIVE
db TYPE_ICE, TYPE_GROUND, SUPER_EFFECTIVE
db TYPE_ICE, TYPE_FLYING, SUPER_EFFECTIVE
db TYPE_ICE, TYPE_DRAGON, SUPER_EFFECTIVE
db TYPE_FIGHTING, TYPE_NORMAL, SUPER_EFFECTIVE
db TYPE_FIGHTING, TYPE_ICE, SUPER_EFFECTIVE
db TYPE_FIGHTING, TYPE_POISON, NOT_VERY_EFFECTIVE
db TYPE_FIGHTING, TYPE_FLYING, NOT_VERY_EFFECTIVE
db TYPE_FIGHTING, TYPE_PSYCHIC, NOT_VERY_EFFECTIVE
db TYPE_FIGHTING, TYPE_BUG, NOT_VERY_EFFECTIVE
db TYPE_FIGHTING, TYPE_ROCK, SUPER_EFFECTIVE
db TYPE_FIGHTING, TYPE_GHOST, NO_EFFECT
db TYPE_FIGHTING, TYPE_METAL, NOT_VERY_EFFECTIVE
db TYPE_POISON, TYPE_GRASS, SUPER_EFFECTIVE
db TYPE_POISON, TYPE_POISON, NOT_VERY_EFFECTIVE
db TYPE_POISON, TYPE_GROUND, NOT_VERY_EFFECTIVE
db TYPE_POISON, TYPE_BUG, SUPER_EFFECTIVE
db TYPE_POISON, TYPE_ROCK, NOT_VERY_EFFECTIVE
db TYPE_POISON, TYPE_GHOST, NOT_VERY_EFFECTIVE
db TYPE_POISON, TYPE_METAL, NOT_VERY_EFFECTIVE
db TYPE_GROUND, TYPE_FIRE, SUPER_EFFECTIVE
db TYPE_GROUND, TYPE_ELECTRIC, SUPER_EFFECTIVE
db TYPE_GROUND, TYPE_GRASS, NOT_VERY_EFFECTIVE
db TYPE_GROUND, TYPE_POISON, SUPER_EFFECTIVE
db TYPE_GROUND, TYPE_FLYING, NO_EFFECT
db TYPE_GROUND, TYPE_BUG, NOT_VERY_EFFECTIVE
db TYPE_GROUND, TYPE_ROCK, SUPER_EFFECTIVE
db TYPE_FLYING, TYPE_ELECTRIC, NOT_VERY_EFFECTIVE
db TYPE_FLYING, TYPE_GRASS, SUPER_EFFECTIVE
db TYPE_FLYING, TYPE_FIGHTING, SUPER_EFFECTIVE
db TYPE_FLYING, TYPE_BUG, SUPER_EFFECTIVE
db TYPE_FLYING, TYPE_ROCK, NOT_VERY_EFFECTIVE
db TYPE_PSYCHIC, TYPE_FIGHTING, SUPER_EFFECTIVE
db TYPE_PSYCHIC, TYPE_POISON, SUPER_EFFECTIVE
db TYPE_PSYCHIC, TYPE_PSYCHIC, NOT_VERY_EFFECTIVE
db TYPE_PSYCHIC, TYPE_DARK, NOT_VERY_EFFECTIVE
db TYPE_BUG, TYPE_FIRE, NOT_VERY_EFFECTIVE
db TYPE_BUG, TYPE_GRASS, SUPER_EFFECTIVE
db TYPE_BUG, TYPE_FIGHTING, NOT_VERY_EFFECTIVE
db TYPE_BUG, TYPE_POISON, SUPER_EFFECTIVE
db TYPE_BUG, TYPE_FLYING, NOT_VERY_EFFECTIVE
db TYPE_BUG, TYPE_PSYCHIC, SUPER_EFFECTIVE
db TYPE_BUG, TYPE_GHOST, NOT_VERY_EFFECTIVE
db TYPE_BUG, TYPE_DARK, SUPER_EFFECTIVE
db TYPE_ROCK, TYPE_FIRE, SUPER_EFFECTIVE
db TYPE_ROCK, TYPE_ICE, SUPER_EFFECTIVE
db TYPE_ROCK, TYPE_FIGHTING, NOT_VERY_EFFECTIVE
db TYPE_ROCK, TYPE_GROUND, NOT_VERY_EFFECTIVE
db TYPE_ROCK, TYPE_FLYING, SUPER_EFFECTIVE
db TYPE_ROCK, TYPE_BUG, SUPER_EFFECTIVE
db TYPE_ROCK, TYPE_METAL, NOT_VERY_EFFECTIVE
db TYPE_GHOST, TYPE_NORMAL, NO_EFFECT
db TYPE_GHOST, TYPE_PSYCHIC, SUPER_EFFECTIVE
db TYPE_GHOST, TYPE_DARK, NOT_VERY_EFFECTIVE
db TYPE_DRAGON, TYPE_DRAGON, SUPER_EFFECTIVE
db TYPE_DARK, TYPE_NORMAL, NOT_VERY_EFFECTIVE
db TYPE_DARK, TYPE_PSYCHIC, SUPER_EFFECTIVE
db TYPE_DARK, TYPE_GHOST, SUPER_EFFECTIVE
db TYPE_DARK, TYPE_DARK, SUPER_EFFECTIVE
db TYPE_METAL, TYPE_WATER, NOT_VERY_EFFECTIVE
db TYPE_METAL, TYPE_ELECTRIC, NOT_VERY_EFFECTIVE
db TYPE_METAL, TYPE_ROCK, SUPER_EFFECTIVE
db TYPE_METAL, TYPE_METAL, NO_EFFECT
db -2 ; end (with Foresight)
; Foresight removes Ghost's immunity to Normal
db TYPE_NORMAL, TYPE_GHOST, NO_EFFECT
db -1 ; end
; 3519b
+55 -55
View File
@@ -1,55 +1,55 @@
INCLUDE "constants.asm"
SECTION "BCD", ROMX[$4de3], BANK[$03]
AddBCD: ; 03:4de3
and a
ld b, c
.add
ld a, [de]
adc [hl]
daa
ld [de], a
dec de
dec hl
dec c
jr nz, .add
jr nc, .done
ld a, $99
inc de
.fill
ld [de], a
inc de
dec b
jr nz, .fill
.done
ret
SubBCD: ; 03:4df9
and a
ld b, c
.sub
ld a, [de]
sbc [hl]
daa
ld [de], a
dec de
dec hl
dec c
jr nz, .sub
jr nc, .done
ld a, 0
inc de
.fill
ld [de], a
inc de
dec b
jr nz, .fill
scf
.done
ret
INCLUDE "constants.asm"
SECTION "BCD", ROMX[$4de3], BANK[$03]
AddBCD: ; 03:4de3
and a
ld b, c
.add
ld a, [de]
adc [hl]
daa
ld [de], a
dec de
dec hl
dec c
jr nz, .add
jr nc, .done
ld a, $99
inc de
.fill
ld [de], a
inc de
dec b
jr nz, .fill
.done
ret
SubBCD: ; 03:4df9
and a
ld b, c
.sub
ld a, [de]
sbc [hl]
daa
ld [de], a
dec de
dec hl
dec c
jr nz, .sub
jr nc, .done
ld a, 0
inc de
.fill
ld [de], a
inc de
dec b
jr nz, .fill
scf
.done
ret
File diff suppressed because it is too large Load Diff
+723 -723
View File
File diff suppressed because it is too large Load Diff
+79 -79
View File
@@ -1,79 +1,79 @@
INCLUDE "constants.asm"
SECTION "ApplyPPUp", ROMX[$78f6], BANK[$03]
ApplyPPUp: ; 03:78f6
ld a, MON_MOVES
call GetPartyParamLocation
push hl
ld de, wStringBuffer1
predef FillPP
pop hl
ld c, MON_PP - MON_MOVES
ld b, 0
add hl, bc
ld de, wStringBuffer1 + 1
ld b, 0
.loop
inc b
ld a, b
cp NUM_MOVES + 1
ret z
ld a, [wce37]
dec a
jr nz, .use
ld a, [wMenuCursorY]
inc a
cp b
jr nz, .skip
.use
ld a, [hl]
and PP_UP_MASK
call nz, ComputeMaxPP
.skip
inc hl
inc de
jr .loop
ComputeMaxPP: ; 03:792B
push bc
; Divide the base PP by 5.
ld a, [de]
ldh [hDividend + 3], a
xor a
ldh [hDividend], a
ldh [hDividend + 1], a
ldh [hDividend + 2], a
ld a, 5
ldh [hDivisor], a
ld b, 4
call Divide
; Get the number of PP, which are bits 6 and 7 of the PP value stored in RAM.
ld a, [hl]
ld b, a
swap a
and $f
srl a
srl a
ld c, a
.loop
; Normally, a move with 40 PP would have 64 PP with three PP Ups.
; Since this would overflow into bit 6, we prevent that from happening
; by decreasing the extra amount of PP each PP Up provides, resulting
; in a maximum of 61.
ldh a, [hQuotient + 2]
cp $8
jr c, .okay
ld a, $7
.okay
add b
ld b, a
ld a, [wce37]
dec a
jr z, .no_pp_up
dec c
jr nz, .loop
.no_pp_up
ld [hl], b
pop bc
ret
INCLUDE "constants.asm"
SECTION "ApplyPPUp", ROMX[$78f6], BANK[$03]
ApplyPPUp: ; 03:78f6
ld a, MON_MOVES
call GetPartyParamLocation
push hl
ld de, wStringBuffer1
predef FillPP
pop hl
ld c, MON_PP - MON_MOVES
ld b, 0
add hl, bc
ld de, wStringBuffer1 + 1
ld b, 0
.loop
inc b
ld a, b
cp NUM_MOVES + 1
ret z
ld a, [wce37]
dec a
jr nz, .use
ld a, [wMenuCursorY]
inc a
cp b
jr nz, .skip
.use
ld a, [hl]
and PP_UP_MASK
call nz, ComputeMaxPP
.skip
inc hl
inc de
jr .loop
ComputeMaxPP: ; 03:792B
push bc
; Divide the base PP by 5.
ld a, [de]
ldh [hDividend + 3], a
xor a
ldh [hDividend], a
ldh [hDividend + 1], a
ldh [hDividend + 2], a
ld a, 5
ldh [hDivisor], a
ld b, 4
call Divide
; Get the number of PP, which are bits 6 and 7 of the PP value stored in RAM.
ld a, [hl]
ld b, a
swap a
and $f
srl a
srl a
ld c, a
.loop
; Normally, a move with 40 PP would have 64 PP with three PP Ups.
; Since this would overflow into bit 6, we prevent that from happening
; by decreasing the extra amount of PP each PP Up provides, resulting
; in a maximum of 61.
ldh a, [hQuotient + 2]
cp $8
jr c, .okay
ld a, $7
.okay
add b
ld b, a
ld a, [wce37]
dec a
jr z, .no_pp_up
dec c
jr nz, .loop
.no_pp_up
ld [hl], b
pop bc
ret
+157 -157
View File
@@ -1,157 +1,157 @@
INCLUDE "constants.asm"
SECTION "GetSpritesNextTile", ROMX[$774a], BANK[$01]
; Get the tile that the sprite will walk onto next
GetSpritesNextTile: ; 01:774a
ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
push bc
call GetCoordTile
pop bc
ret
; Sets carry flag if the object (bc) next tile is a collision
_IsObjectCollisionTileSolid: ; 01:775a
call GetSpritesNextTile
ld e, a
ld d, 0
ld hl, CollisionTypeTable
add hl, de
ld a, BANK(CollisionTypeTable)
call GetFarByte
and ALWAYS_SOLID ; also covers SOMETIMES_SOLID
ret z
scf
ret
SECTION "_CheckObjectCollision", ROMX[$77dd], BANK[$01]
; returns the carry flag if a sprite is at coords d, e
; will not collide with sprite index stored in hEventCollisionException
_CheckObjectCollision: ; 01:77dd
ld bc, wObjectStructs
xor a
.loop
ldh [hObjectStructIndexBuffer], a
ld hl, OBJECT_SPRITE
add hl, bc
ld a, [hl]
and a
jr z, .next
ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
cp d
jr nz, .check_last_position
ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, [hl]
cp e
jr nz, .check_last_position
ldh a, [hEventCollisionException]
ld l, a
ldh a, [hObjectStructIndexBuffer]
cp l
jr nz, .collision
.check_last_position
ld hl, OBJECT_MAP_X
add hl, bc
ld a, [hl]
cp d
jr nz, .next
ld hl, OBJECT_MAP_Y
add hl, bc
ld a, [hl]
cp e
jr nz, .next
ldh a, [hEventCollisionException]
ld l, a
ldh a, [hObjectStructIndexBuffer]
cp l
jr nz, .collision
.next
ld hl, OBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
ldh a, [hObjectStructIndexBuffer]
inc a
cp NUM_OBJECT_STRUCTS
jr nz, .loop
and a
ret
.collision
scf
ret
SECTION "_CheckPlayerObjectCollision", ROMX[$7894], BANK[$01]
; Sets the carry flag if the player will collide with another sprite's current or next position
_CheckPlayerObjectCollision: ; 01:7894
ld a, [wPlayerNextMapX]
ld d, a
ld a, [wPlayerNextMapY]
ld e, a
ld bc, wObjectStructs
xor a
.loop
ldh [hObjectStructIndexBuffer], a
ld hl, OBJECT_SPRITE
add hl, bc
ld a, [hl]
and a
jr z, .next
ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, [hl]
cp e
jr nz, .check_last_position
ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
cp d
jr nz, .check_last_position
; skip the player sprite
ldh a, [hObjectStructIndexBuffer]
cp PLAYER_OBJECT_INDEX
jr z, .next
jr .collision
.check_last_position
ld hl, OBJECT_MAP_Y
add hl, bc
ld a, [hl]
cp e
jr nz, .next
ld hl, OBJECT_MAP_X
add hl, bc
ld a, [hl]
cp d
jr nz, .next
jr .collision
.next
ld hl, OBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
ldh a, [hObjectStructIndexBuffer]
inc a
cp NUM_OBJECT_STRUCTS
jr nz, .loop
xor a
ret
.collision
scf
ret
INCLUDE "constants.asm"
SECTION "GetSpritesNextTile", ROMX[$774a], BANK[$01]
; Get the tile that the sprite will walk onto next
GetSpritesNextTile: ; 01:774a
ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
push bc
call GetCoordTile
pop bc
ret
; Sets carry flag if the object (bc) next tile is a collision
_IsObjectCollisionTileSolid: ; 01:775a
call GetSpritesNextTile
ld e, a
ld d, 0
ld hl, CollisionTypeTable
add hl, de
ld a, BANK(CollisionTypeTable)
call GetFarByte
and ALWAYS_SOLID ; also covers SOMETIMES_SOLID
ret z
scf
ret
SECTION "_CheckObjectCollision", ROMX[$77dd], BANK[$01]
; returns the carry flag if a sprite is at coords d, e
; will not collide with sprite index stored in hEventCollisionException
_CheckObjectCollision: ; 01:77dd
ld bc, wObjectStructs
xor a
.loop
ldh [hObjectStructIndexBuffer], a
ld hl, OBJECT_SPRITE
add hl, bc
ld a, [hl]
and a
jr z, .next
ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
cp d
jr nz, .check_last_position
ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, [hl]
cp e
jr nz, .check_last_position
ldh a, [hEventCollisionException]
ld l, a
ldh a, [hObjectStructIndexBuffer]
cp l
jr nz, .collision
.check_last_position
ld hl, OBJECT_MAP_X
add hl, bc
ld a, [hl]
cp d
jr nz, .next
ld hl, OBJECT_MAP_Y
add hl, bc
ld a, [hl]
cp e
jr nz, .next
ldh a, [hEventCollisionException]
ld l, a
ldh a, [hObjectStructIndexBuffer]
cp l
jr nz, .collision
.next
ld hl, OBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
ldh a, [hObjectStructIndexBuffer]
inc a
cp NUM_OBJECT_STRUCTS
jr nz, .loop
and a
ret
.collision
scf
ret
SECTION "_CheckPlayerObjectCollision", ROMX[$7894], BANK[$01]
; Sets the carry flag if the player will collide with another sprite's current or next position
_CheckPlayerObjectCollision: ; 01:7894
ld a, [wPlayerNextMapX]
ld d, a
ld a, [wPlayerNextMapY]
ld e, a
ld bc, wObjectStructs
xor a
.loop
ldh [hObjectStructIndexBuffer], a
ld hl, OBJECT_SPRITE
add hl, bc
ld a, [hl]
and a
jr z, .next
ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, [hl]
cp e
jr nz, .check_last_position
ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
cp d
jr nz, .check_last_position
; skip the player sprite
ldh a, [hObjectStructIndexBuffer]
cp PLAYER_OBJECT_INDEX
jr z, .next
jr .collision
.check_last_position
ld hl, OBJECT_MAP_Y
add hl, bc
ld a, [hl]
cp e
jr nz, .next
ld hl, OBJECT_MAP_X
add hl, bc
ld a, [hl]
cp d
jr nz, .next
jr .collision
.next
ld hl, OBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
ldh a, [hObjectStructIndexBuffer]
inc a
cp NUM_OBJECT_STRUCTS
jr nz, .loop
xor a
ret
.collision
scf
ret
+59 -59
View File
@@ -1,59 +1,59 @@
INCLUDE "constants.asm"
SECTION "LoadSpawnPoint", ROMX[$4791], BANK[$03]
LoadSpawnPoint: ; 03:4791
; loads the spawn point in wDefaultSpawnPoint
push hl
push de
ld a, [wDefaultSpawnPoint]
and a
jr z, .skip
dec a
ld l, a
ld h, 0
add hl, hl
add hl, hl
ld de, SpawnPoints
add hl, de
ld a, [hli]
ld [wMapGroup], a
ld a, [hli]
ld [wMapId], a
ld a, [hli]
ld [wXCoord], a
ld a, [hli]
ld [wYCoord], a
.skip
pop de
pop hl
ret
IsSpawnPoint: ; 03:47b6
; Checks if the map loaded in de is a spawn point.
; Returns carry if it's a spawn point.
ld hl, SpawnPoints
ld c, 1
.loop
ld a, [hl]
cp SPAWN_N_A
jr z, .fail
cp d
jr nz, .next
inc hl
ld a, [hld]
cp e
jr z, .succeed
.next
push bc
ld bc, SPAWN_POINT_SIZE
add hl, bc
pop bc
inc c
jr .loop
.fail
and a
ret
.succeed
scf
ret
INCLUDE "constants.asm"
SECTION "LoadSpawnPoint", ROMX[$4791], BANK[$03]
LoadSpawnPoint: ; 03:4791
; loads the spawn point in wDefaultSpawnPoint
push hl
push de
ld a, [wDefaultSpawnPoint]
and a
jr z, .skip
dec a
ld l, a
ld h, 0
add hl, hl
add hl, hl
ld de, SpawnPoints
add hl, de
ld a, [hli]
ld [wMapGroup], a
ld a, [hli]
ld [wMapId], a
ld a, [hli]
ld [wXCoord], a
ld a, [hli]
ld [wYCoord], a
.skip
pop de
pop hl
ret
IsSpawnPoint: ; 03:47b6
; Checks if the map loaded in de is a spawn point.
; Returns carry if it's a spawn point.
ld hl, SpawnPoints
ld c, 1
.loop
ld a, [hl]
cp SPAWN_N_A
jr z, .fail
cp d
jr nz, .next
inc hl
ld a, [hld]
cp e
jr z, .succeed
.next
push bc
ld bc, SPAWN_POINT_SIZE
add hl, bc
pop bc
inc c
jr .loop
.fail
and a
ret
.succeed
scf
ret
+358 -358
View File
@@ -1,358 +1,358 @@
INCLUDE "constants.asm"
SECTION "HealParty", ROMX[$4d6f], BANK[$03]
HealParty: ; 03:4d6f
ld hl, wPartySpecies
ld de, wPartyMons
.party_loop
ld a, [hli]
cp -1
jr z, .party_done
push hl
push de
; Clear the status
ld hl, MON_STATUS
add hl, de
xor a
ld [hli], a
ld [hl], a
; Reset the PP
ld hl, MON_MOVES
add hl, de
ld b, NUM_MOVES
.move_loop
push hl
push bc
ld a, [hl]
and a
jr z, .next_move
dec a
push hl
ld hl, Moves
ld bc, MOVE_DATA_SIZE
call AddNTimes
ld a, BANK(Moves)
call GetFarByte
pop hl
ld bc, MON_PP - MON_MOVES
add hl, bc
ld b, a
ld a, [hl]
and PP_UP_MASK
add b
ld [hl], a
.next_move
pop bc
pop hl
inc hl
dec b
jr nz, .move_loop
; Reset the HP
pop de
push de
ld hl, MON_MAXHP
add hl, de
ld b, h
ld c, l
dec bc
dec bc
ld a, [hli]
ld [bc], a
inc bc
ld a, [hl]
ld [bc], a
pop de
pop hl
push hl
ld hl, PARTYMON_STRUCT_LENGTH
add hl, de
ld d, h
ld e, l
pop hl
jr .party_loop
.party_done
xor a
ld [wWhichPokemon], a
ld [wce37], a
ld a, [wPartyCount]
ld b, a
.pp_up
push bc
call ApplyPPUp
pop bc
ld hl, wWhichPokemon
inc [hl]
dec b
jr nz, .pp_up
ret
SECTION "HP Bar", ROMX[$4e3c], BANK[$03]
ComputeHPBarPixels: ; 03:4e3c
push hl
xor a
ldh [hMultiplicand], a
ld a, b
ldh [hMultiplicand + 1], a
ld a, c
ldh [hMultiplicand + 2], a
ld a, HP_BAR_LENGTH_PX
ldh [hMultiplier], a
call Multiply
; We need de to be under 256 because hDivisor is only 1 byte.
ld a, d
and a
jr z, .divide
; divide de and hProduct by 4
srl d
rr e
srl d
rr e
ldh a, [hProduct + 2]
ld b, a
ldh a, [hProduct + 3]
srl b
rr a
srl b
rr a
ldh [hDividend + 3], a
ld a, b
ldh [hDividend + 2], a
.divide
ld a, e
ldh [hDivisor], a
ld b, 4
call Divide
ldh a, [hQuotient + 2]
ld e, a
pop hl
and a
ret nz
ld e, 1
ret
UpdateHPBar: ; 03:4e7c
ld a, [wHPBarOldHP]
ld c, a
ld a, [wHPBarOldHP + 1]
ld b, a
ld a, [wHPBarNewHP]
ld e, a
ld a, [wHPBarNewHP + 1]
ld d, a
push de
push bc
call UpdateHPBar_CalcHPDifference
ld a, e
ld [wHPBarHPDifference + 1], a
ld a, d
ld [wHPBarHPDifference], a
pop bc
pop de
call UpdateHPBar_CompareNewHPToOldHP
ret z
ld a, -1
jr c, .hp_decrease
ld a, 1
.hp_decrease
ld [wHPBarDelta], a
ld a, [wHPBarNewHP]
ld e, a
ld a, [wHPBarNewHP + 1]
ld d, a
.animate_hp_bar_loop
push de
ld a, [wHPBarOldHP]
ld c, a
ld a, [wHPBarOldHP + 1]
ld b, a
call UpdateHPBar_CompareNewHPToOldHP
jr z, .animate_hp_bar_done
jr nc, .hp_increase
;hp_decrease
dec bc
ld a, c
ld [wHPBarNewHP], a
ld a, b
ld [wHPBarNewHP + 1], a
call UpdateHPBar_CalcOldNewHPBarPixels
ld a, e
sub d
jr .apply
.hp_increase
inc bc
ld a, c
ld [wHPBarNewHP], a
ld a, b
ld [wHPBarNewHP + 1], a
call UpdateHPBar_CalcOldNewHPBarPixels
ld a, d
sub e
.apply
call UpdateHPBar_PrintHPNumber
and a
jr z, .no_pixel_difference
call UpdateHPBar_AnimateHPBar
.no_pixel_difference
ld a, [wHPBarNewHP]
ld [wHPBarOldHP], a
ld a, [wHPBarNewHP + 1]
ld [wHPBarOldHP + 1], a
pop de
jr .animate_hp_bar_loop
.animate_hp_bar_done
pop de
ld a, e
ld [wHPBarOldHP], a
ld a, d
ld [wHPBarOldHP + 1], a
or e
jr z, .mon_fainted
call UpdateHPBar_CalcOldNewHPBarPixels
ld d, e
.mon_fainted
call UpdateHPBar_PrintHPNumber
ld a, 1
call UpdateHPBar_AnimateHPBar
jp WaitBGMap
; animates the HP bar going up or down for (a) ticks (two waiting frames each)
; stops prematurely if bar is filled up
; e: current health (in pixels) to start with
UpdateHPBar_AnimateHPBar: ; 03:4F11
push hl
.bar_animation_loop
push af
push de
ld d, HP_BAR_LENGTH
ld a, [wHPBarType]
and BATTLE_HP_BAR
ld b, a
call DrawBattleHPBar
ld c, 2
call DelayFrames
pop de
ld a, [wHPBarDelta]
add e
cp HP_BAR_LENGTH_PX + 1
jr nc, .bar_filled_up
ld e, a
pop af
dec a
jr nz, .bar_animation_loop
pop hl
ret
.bar_filled_up
pop af
pop hl
ret
; compares old HP and new HP and sets c and z flags accordingly
UpdateHPBar_CompareNewHPToOldHP: ; 03:4F37
ld a, d
sub b
ret nz
ld a, e
sub c
ret
; calcs HP difference between bc and de (into de)
UpdateHPBar_CalcHPDifference: ; 03:4F3D
ld a, d
sub b
jr c, .old_hp_greater
jr z, .test_lower_byte
.new_hp_greater
ld a, e
sub c
ld e, a
ld a, d
sbc b
ld d, a
ret
.old_hp_greater
ld a, c
sub e
ld e, a
ld a, b
sbc d
ld d, a
ret
.test_lower_byte
ld a, e
sub c
jr c, .old_hp_greater
jr nz, .new_hp_greater
ld de, 0
ret
UpdateHPBar_PrintHPNumber: ; 03:4F5B
push af
push de
ld a, [wHPBarType]
and a
jr z, .done
ld a, [wHPBarOldHP]
ld [wHPBarTempHP + 1], a
ld a, [wHPBarOldHP + 1]
ld [wHPBarTempHP], a
push hl
ld de, SCREEN_WIDTH + 1
add hl, de
push hl
ld a, " "
ld [hli], a
ld [hli], a
ld [hli], a
pop hl
ld de, wHPBarTempHP
lb bc, 2, 3
call PrintNumber
call DelayFrame
pop hl
.done
pop de
pop af
ret
; calcs number of HP bar pixels for old and new HP value
; d: new pixels
; e: old pixels
UpdateHPBar_CalcOldNewHPBarPixels: ; 03:4F8B
push hl
ld hl, wHPBarMaxHP
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hli]
ld h, [hl]
ld l, a
push hl
push de
call ComputeHPBarPixels
ld a, e
pop de
pop bc
push af
call ComputeHPBarPixels
pop af
ld d, e
ld e, a
pop hl
ret
INCLUDE "constants.asm"
SECTION "HealParty", ROMX[$4d6f], BANK[$03]
HealParty: ; 03:4d6f
ld hl, wPartySpecies
ld de, wPartyMons
.party_loop
ld a, [hli]
cp -1
jr z, .party_done
push hl
push de
; Clear the status
ld hl, MON_STATUS
add hl, de
xor a
ld [hli], a
ld [hl], a
; Reset the PP
ld hl, MON_MOVES
add hl, de
ld b, NUM_MOVES
.move_loop
push hl
push bc
ld a, [hl]
and a
jr z, .next_move
dec a
push hl
ld hl, Moves
ld bc, MOVE_DATA_SIZE
call AddNTimes
ld a, BANK(Moves)
call GetFarByte
pop hl
ld bc, MON_PP - MON_MOVES
add hl, bc
ld b, a
ld a, [hl]
and PP_UP_MASK
add b
ld [hl], a
.next_move
pop bc
pop hl
inc hl
dec b
jr nz, .move_loop
; Reset the HP
pop de
push de
ld hl, MON_MAXHP
add hl, de
ld b, h
ld c, l
dec bc
dec bc
ld a, [hli]
ld [bc], a
inc bc
ld a, [hl]
ld [bc], a
pop de
pop hl
push hl
ld hl, PARTYMON_STRUCT_LENGTH
add hl, de
ld d, h
ld e, l
pop hl
jr .party_loop
.party_done
xor a
ld [wWhichPokemon], a
ld [wce37], a
ld a, [wPartyCount]
ld b, a
.pp_up
push bc
call ApplyPPUp
pop bc
ld hl, wWhichPokemon
inc [hl]
dec b
jr nz, .pp_up
ret
SECTION "HP Bar", ROMX[$4e3c], BANK[$03]
ComputeHPBarPixels: ; 03:4e3c
push hl
xor a
ldh [hMultiplicand], a
ld a, b
ldh [hMultiplicand + 1], a
ld a, c
ldh [hMultiplicand + 2], a
ld a, HP_BAR_LENGTH_PX
ldh [hMultiplier], a
call Multiply
; We need de to be under 256 because hDivisor is only 1 byte.
ld a, d
and a
jr z, .divide
; divide de and hProduct by 4
srl d
rr e
srl d
rr e
ldh a, [hProduct + 2]
ld b, a
ldh a, [hProduct + 3]
srl b
rr a
srl b
rr a
ldh [hDividend + 3], a
ld a, b
ldh [hDividend + 2], a
.divide
ld a, e
ldh [hDivisor], a
ld b, 4
call Divide
ldh a, [hQuotient + 2]
ld e, a
pop hl
and a
ret nz
ld e, 1
ret
UpdateHPBar: ; 03:4e7c
ld a, [wHPBarOldHP]
ld c, a
ld a, [wHPBarOldHP + 1]
ld b, a
ld a, [wHPBarNewHP]
ld e, a
ld a, [wHPBarNewHP + 1]
ld d, a
push de
push bc
call UpdateHPBar_CalcHPDifference
ld a, e
ld [wHPBarHPDifference + 1], a
ld a, d
ld [wHPBarHPDifference], a
pop bc
pop de
call UpdateHPBar_CompareNewHPToOldHP
ret z
ld a, -1
jr c, .hp_decrease
ld a, 1
.hp_decrease
ld [wHPBarDelta], a
ld a, [wHPBarNewHP]
ld e, a
ld a, [wHPBarNewHP + 1]
ld d, a
.animate_hp_bar_loop
push de
ld a, [wHPBarOldHP]
ld c, a
ld a, [wHPBarOldHP + 1]
ld b, a
call UpdateHPBar_CompareNewHPToOldHP
jr z, .animate_hp_bar_done
jr nc, .hp_increase
;hp_decrease
dec bc
ld a, c
ld [wHPBarNewHP], a
ld a, b
ld [wHPBarNewHP + 1], a
call UpdateHPBar_CalcOldNewHPBarPixels
ld a, e
sub d
jr .apply
.hp_increase
inc bc
ld a, c
ld [wHPBarNewHP], a
ld a, b
ld [wHPBarNewHP + 1], a
call UpdateHPBar_CalcOldNewHPBarPixels
ld a, d
sub e
.apply
call UpdateHPBar_PrintHPNumber
and a
jr z, .no_pixel_difference
call UpdateHPBar_AnimateHPBar
.no_pixel_difference
ld a, [wHPBarNewHP]
ld [wHPBarOldHP], a
ld a, [wHPBarNewHP + 1]
ld [wHPBarOldHP + 1], a
pop de
jr .animate_hp_bar_loop
.animate_hp_bar_done
pop de
ld a, e
ld [wHPBarOldHP], a
ld a, d
ld [wHPBarOldHP + 1], a
or e
jr z, .mon_fainted
call UpdateHPBar_CalcOldNewHPBarPixels
ld d, e
.mon_fainted
call UpdateHPBar_PrintHPNumber
ld a, 1
call UpdateHPBar_AnimateHPBar
jp WaitBGMap
; animates the HP bar going up or down for (a) ticks (two waiting frames each)
; stops prematurely if bar is filled up
; e: current health (in pixels) to start with
UpdateHPBar_AnimateHPBar: ; 03:4F11
push hl
.bar_animation_loop
push af
push de
ld d, HP_BAR_LENGTH
ld a, [wHPBarType]
and BATTLE_HP_BAR
ld b, a
call DrawBattleHPBar
ld c, 2
call DelayFrames
pop de
ld a, [wHPBarDelta]
add e
cp HP_BAR_LENGTH_PX + 1
jr nc, .bar_filled_up
ld e, a
pop af
dec a
jr nz, .bar_animation_loop
pop hl
ret
.bar_filled_up
pop af
pop hl
ret
; compares old HP and new HP and sets c and z flags accordingly
UpdateHPBar_CompareNewHPToOldHP: ; 03:4F37
ld a, d
sub b
ret nz
ld a, e
sub c
ret
; calcs HP difference between bc and de (into de)
UpdateHPBar_CalcHPDifference: ; 03:4F3D
ld a, d
sub b
jr c, .old_hp_greater
jr z, .test_lower_byte
.new_hp_greater
ld a, e
sub c
ld e, a
ld a, d
sbc b
ld d, a
ret
.old_hp_greater
ld a, c
sub e
ld e, a
ld a, b
sbc d
ld d, a
ret
.test_lower_byte
ld a, e
sub c
jr c, .old_hp_greater
jr nz, .new_hp_greater
ld de, 0
ret
UpdateHPBar_PrintHPNumber: ; 03:4F5B
push af
push de
ld a, [wHPBarType]
and a
jr z, .done
ld a, [wHPBarOldHP]
ld [wHPBarTempHP + 1], a
ld a, [wHPBarOldHP + 1]
ld [wHPBarTempHP], a
push hl
ld de, SCREEN_WIDTH + 1
add hl, de
push hl
ld a, " "
ld [hli], a
ld [hli], a
ld [hli], a
pop hl
ld de, wHPBarTempHP
lb bc, 2, 3
call PrintNumber
call DelayFrame
pop hl
.done
pop de
pop af
ret
; calcs number of HP bar pixels for old and new HP value
; d: new pixels
; e: old pixels
UpdateHPBar_CalcOldNewHPBarPixels: ; 03:4F8B
push hl
ld hl, wHPBarMaxHP
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
ld a, [hli]
ld h, [hl]
ld l, a
push hl
push de
call ComputeHPBarPixels
ld a, e
pop de
pop bc
push af
call ComputeHPBarPixels
pop af
ld d, e
ld e, a
pop hl
ret
+71 -71
View File
@@ -1,72 +1,72 @@
SECTION "SmallFarFlagAction", ROMX[$4d33], BANK[$03]
SmallFarFlagAction: ; 03:4d33
; Perform action b on bit c in flag array hl.
; If checking a flag, check flag array d:hl unless d is 0.
; For longer flag arrays, see FlagAction.
push hl
push bc
; Divide by 8 to get the byte we want.
push bc
srl c
srl c
srl c
ld b, 0
add hl, bc
pop bc
; Which bit we want from the byte
ld a, c
and 7
ld c, a
; Shift left until we can mask the bit
ld a, 1
jr z, .shifted
.shift
add a
dec c
jr nz, .shift
.shifted
ld c, a
; What are we doing to this flag?
dec b
jr z, .set ; 1
dec b
jr z, .check ; 2
.reset
ld a, c
cpl
and [hl]
ld [hl], a
jr .done
.set
ld a, [hl]
or c
ld [hl], a
jr .done
.check
ld a, d
cp 0
jr nz, .farcheck
ld a, [hl]
and c
jr .done
.farcheck
call GetFarByte
and c
.done
pop bc
pop hl
ld c, a
SECTION "SmallFarFlagAction", ROMX[$4d33], BANK[$03]
SmallFarFlagAction: ; 03:4d33
; Perform action b on bit c in flag array hl.
; If checking a flag, check flag array d:hl unless d is 0.
; For longer flag arrays, see FlagAction.
push hl
push bc
; Divide by 8 to get the byte we want.
push bc
srl c
srl c
srl c
ld b, 0
add hl, bc
pop bc
; Which bit we want from the byte
ld a, c
and 7
ld c, a
; Shift left until we can mask the bit
ld a, 1
jr z, .shifted
.shift
add a
dec c
jr nz, .shift
.shifted
ld c, a
; What are we doing to this flag?
dec b
jr z, .set ; 1
dec b
jr z, .check ; 2
.reset
ld a, c
cpl
and [hl]
ld [hl], a
jr .done
.set
ld a, [hl]
or c
ld [hl], a
jr .done
.check
ld a, d
cp 0
jr nz, .farcheck
ld a, [hl]
and c
jr .done
.farcheck
call GetFarByte
and c
.done
pop bc
pop hl
ld c, a
ret
+55 -55
View File
@@ -1,55 +1,55 @@
AnnonPicPtrs::
AnnonPicPtrsFront::
dw AnnonAPicFront
AnnonPicPtrsBack::
dw AnnonAPicBack
dw AnnonBPicFront
dw AnnonBPicBack
dw AnnonCPicFront
dw AnnonCPicBack
dw AnnonDPicFront
dw AnnonDPicBack
dw AnnonEPicFront
dw AnnonEPicBack
dw AnnonFPicFront
dw AnnonFPicBack
dw AnnonGPicFront
dw AnnonGPicBack
dw AnnonHPicFront
dw AnnonHPicBack
dw AnnonIPicFront
dw AnnonIPicBack
dw AnnonJPicFront
dw AnnonJPicBack
dw AnnonKPicFront
dw AnnonKPicBack
dw AnnonLPicFront
dw AnnonLPicBack
dw AnnonMPicFront
dw AnnonMPicBack
dw AnnonNPicFront
dw AnnonNPicBack
dw AnnonOPicFront
dw AnnonOPicBack
dw AnnonPPicFront
dw AnnonPPicBack
dw AnnonQPicFront
dw AnnonQPicBack
dw AnnonRPicFront
dw AnnonRPicBack
dw AnnonSPicFront
dw AnnonSPicBack
dw AnnonTPicFront
dw AnnonTPicBack
dw AnnonUPicFront
dw AnnonUPicBack
dw AnnonVPicFront
dw AnnonVPicBack
dw AnnonWPicFront
dw AnnonWPicBack
dw AnnonXPicFront
dw AnnonXPicBack
dw AnnonYPicFront
dw AnnonYPicBack
dw AnnonZPicFront
dw AnnonYPicBack ; typo in original list
AnnonPicPtrs::
AnnonPicPtrsFront::
dw AnnonAPicFront
AnnonPicPtrsBack::
dw AnnonAPicBack
dw AnnonBPicFront
dw AnnonBPicBack
dw AnnonCPicFront
dw AnnonCPicBack
dw AnnonDPicFront
dw AnnonDPicBack
dw AnnonEPicFront
dw AnnonEPicBack
dw AnnonFPicFront
dw AnnonFPicBack
dw AnnonGPicFront
dw AnnonGPicBack
dw AnnonHPicFront
dw AnnonHPicBack
dw AnnonIPicFront
dw AnnonIPicBack
dw AnnonJPicFront
dw AnnonJPicBack
dw AnnonKPicFront
dw AnnonKPicBack
dw AnnonLPicFront
dw AnnonLPicBack
dw AnnonMPicFront
dw AnnonMPicBack
dw AnnonNPicFront
dw AnnonNPicBack
dw AnnonOPicFront
dw AnnonOPicBack
dw AnnonPPicFront
dw AnnonPPicBack
dw AnnonQPicFront
dw AnnonQPicBack
dw AnnonRPicFront
dw AnnonRPicBack
dw AnnonSPicFront
dw AnnonSPicBack
dw AnnonTPicFront
dw AnnonTPicBack
dw AnnonUPicFront
dw AnnonUPicBack
dw AnnonVPicFront
dw AnnonVPicBack
dw AnnonWPicFront
dw AnnonWPicBack
dw AnnonXPicFront
dw AnnonXPicBack
dw AnnonYPicFront
dw AnnonYPicBack
dw AnnonZPicFront
dw AnnonYPicBack ; typo in original list
+53 -53
View File
@@ -1,53 +1,53 @@
AnnonPics::
AnnonAPicFront:: INCBIN "gfx/pokemon/annon_a/front.pic" ; 0x07cdd2--0x07ce57
AnnonAPicBack:: INCBIN "gfx/pokemon/annon_a/back.pic" ; 0x07ce57--0x07ced0
AnnonBPicFront:: INCBIN "gfx/pokemon/annon_b/front.pic" ; 0x07ced0--0x07cf64
AnnonBPicBack:: INCBIN "gfx/pokemon/annon_b/back.pic" ; 0x07cf64--0x07cfed
AnnonCPicFront:: INCBIN "gfx/pokemon/annon_c/front.pic" ; 0x07cfed--0x07d0a1
AnnonCPicBack:: INCBIN "gfx/pokemon/annon_c/back.pic" ; 0x07d0a1--0x07d147
AnnonDPicFront:: INCBIN "gfx/pokemon/annon_d/front.pic" ; 0x07d147--0x07d1ec
AnnonDPicBack:: INCBIN "gfx/pokemon/annon_d/back.pic" ; 0x07d1ec--0x07d285
AnnonEPicFront:: INCBIN "gfx/pokemon/annon_e/front.pic" ; 0x07d285--0x07d30e
AnnonEPicBack:: INCBIN "gfx/pokemon/annon_e/back.pic" ; 0x07d30e--0x07d38b
AnnonFPicFront:: INCBIN "gfx/pokemon/annon_f/front.pic" ; 0x07d38b--0x07d425
AnnonFPicBack:: INCBIN "gfx/pokemon/annon_f/back.pic" ; 0x07d425--0x07d4ae
AnnonGPicFront:: INCBIN "gfx/pokemon/annon_g/front.pic" ; 0x07d4ae--0x07d53f
AnnonGPicBack:: INCBIN "gfx/pokemon/annon_g/back.pic" ; 0x07d53f--0x07d5c4
AnnonHPicFront:: INCBIN "gfx/pokemon/annon_h/front.pic" ; 0x07d5c4--0x07d693
AnnonHPicBack:: INCBIN "gfx/pokemon/annon_h/back.pic" ; 0x07d693--0x07d757
AnnonIPicFront:: INCBIN "gfx/pokemon/annon_i/front.pic" ; 0x07d757--0x07d7c0
AnnonIPicBack:: INCBIN "gfx/pokemon/annon_i/back.pic" ; 0x07d7c0--0x07d81f
AnnonJPicFront:: INCBIN "gfx/pokemon/annon_j/front.pic" ; 0x07d81f--0x07d89b
AnnonJPicBack:: INCBIN "gfx/pokemon/annon_j/back.pic" ; 0x07d89b--0x07d909
AnnonKPicFront:: INCBIN "gfx/pokemon/annon_k/front.pic" ; 0x07d909--0x07d98d
AnnonKPicBack:: INCBIN "gfx/pokemon/annon_k/back.pic" ; 0x07d98d--0x07da06
AnnonLPicFront:: INCBIN "gfx/pokemon/annon_l/front.pic" ; 0x07da06--0x07da7a
AnnonLPicBack:: INCBIN "gfx/pokemon/annon_l/back.pic" ; 0x07da7a--0x07dade
AnnonMPicFront:: INCBIN "gfx/pokemon/annon_m/front.pic" ; 0x07dade--0x07dba1
AnnonMPicBack:: INCBIN "gfx/pokemon/annon_m/back.pic" ; 0x07dba1--0x07dc57
AnnonNPicFront:: INCBIN "gfx/pokemon/annon_n/front.pic" ; 0x07dc57--0x07dcf4
AnnonNPicBack:: INCBIN "gfx/pokemon/annon_n/back.pic" ; 0x07dcf4--0x07dd8b
AnnonOPicFront:: INCBIN "gfx/pokemon/annon_o/front.pic" ; 0x07dd8b--0x07de55
AnnonOPicBack:: INCBIN "gfx/pokemon/annon_o/back.pic" ; 0x07de55--0x07df15
AnnonPPicFront:: INCBIN "gfx/pokemon/annon_p/front.pic" ; 0x07df15--0x07df7d
AnnonPPicBack:: INCBIN "gfx/pokemon/annon_p/back.pic" ; 0x07df7d--0x07dfd6
AnnonQPicFront:: INCBIN "gfx/pokemon/annon_q/front.pic" ; 0x07dfd6--0x07e03d
AnnonQPicBack:: INCBIN "gfx/pokemon/annon_q/back.pic" ; 0x07e03d--0x07e099
AnnonRPicFront:: INCBIN "gfx/pokemon/annon_r/front.pic" ; 0x07e099--0x07e0ff
AnnonRPicBack:: INCBIN "gfx/pokemon/annon_r/back.pic" ; 0x07e0ff--0x07e159
AnnonSPicFront:: INCBIN "gfx/pokemon/annon_s/front.pic" ; 0x07e159--0x07e1f0
AnnonSPicBack:: INCBIN "gfx/pokemon/annon_s/back.pic" ; 0x07e1f0--0x07e27a
AnnonTPicFront:: INCBIN "gfx/pokemon/annon_t/front.pic" ; 0x07e27a--0x07e2e8
AnnonTPicBack:: INCBIN "gfx/pokemon/annon_t/back.pic" ; 0x07e2e8--0x07e348
AnnonUPicFront:: INCBIN "gfx/pokemon/annon_u/front.pic" ; 0x07e348--0x07e3e7
AnnonUPicBack:: INCBIN "gfx/pokemon/annon_u/back.pic" ; 0x07e3e7--0x07e47a
AnnonVPicFront:: INCBIN "gfx/pokemon/annon_v/front.pic" ; 0x07e47a--0x07e50a
AnnonVPicBack:: INCBIN "gfx/pokemon/annon_v/back.pic" ; 0x07e50a--0x07e589
AnnonWPicFront:: INCBIN "gfx/pokemon/annon_w/front.pic" ; 0x07e589--0x07e60d
AnnonWPicBack:: INCBIN "gfx/pokemon/annon_w/back.pic" ; 0x07e60d--0x07e681
AnnonXPicFront:: INCBIN "gfx/pokemon/annon_x/front.pic" ; 0x07e681--0x07e705
AnnonXPicBack:: INCBIN "gfx/pokemon/annon_x/back.pic" ; 0x07e705--0x07e77b
AnnonYPicFront:: INCBIN "gfx/pokemon/annon_y/front.pic" ; 0x07e77b--0x07e801
AnnonYPicBack:: INCBIN "gfx/pokemon/annon_y/back.pic" ; 0x07e801--0x07e87c
AnnonZPicFront:: INCBIN "gfx/pokemon/annon_z/front.pic" ; 0x07e87c--0x07e8fa
AnnonZPicBack:: INCBIN "gfx/pokemon/annon_z/back.pic" ; 0x07e8fa--0x07e96a
AnnonPics::
AnnonAPicFront:: INCBIN "gfx/pokemon/annon_a/front.pic" ; 0x07cdd2--0x07ce57
AnnonAPicBack:: INCBIN "gfx/pokemon/annon_a/back.pic" ; 0x07ce57--0x07ced0
AnnonBPicFront:: INCBIN "gfx/pokemon/annon_b/front.pic" ; 0x07ced0--0x07cf64
AnnonBPicBack:: INCBIN "gfx/pokemon/annon_b/back.pic" ; 0x07cf64--0x07cfed
AnnonCPicFront:: INCBIN "gfx/pokemon/annon_c/front.pic" ; 0x07cfed--0x07d0a1
AnnonCPicBack:: INCBIN "gfx/pokemon/annon_c/back.pic" ; 0x07d0a1--0x07d147
AnnonDPicFront:: INCBIN "gfx/pokemon/annon_d/front.pic" ; 0x07d147--0x07d1ec
AnnonDPicBack:: INCBIN "gfx/pokemon/annon_d/back.pic" ; 0x07d1ec--0x07d285
AnnonEPicFront:: INCBIN "gfx/pokemon/annon_e/front.pic" ; 0x07d285--0x07d30e
AnnonEPicBack:: INCBIN "gfx/pokemon/annon_e/back.pic" ; 0x07d30e--0x07d38b
AnnonFPicFront:: INCBIN "gfx/pokemon/annon_f/front.pic" ; 0x07d38b--0x07d425
AnnonFPicBack:: INCBIN "gfx/pokemon/annon_f/back.pic" ; 0x07d425--0x07d4ae
AnnonGPicFront:: INCBIN "gfx/pokemon/annon_g/front.pic" ; 0x07d4ae--0x07d53f
AnnonGPicBack:: INCBIN "gfx/pokemon/annon_g/back.pic" ; 0x07d53f--0x07d5c4
AnnonHPicFront:: INCBIN "gfx/pokemon/annon_h/front.pic" ; 0x07d5c4--0x07d693
AnnonHPicBack:: INCBIN "gfx/pokemon/annon_h/back.pic" ; 0x07d693--0x07d757
AnnonIPicFront:: INCBIN "gfx/pokemon/annon_i/front.pic" ; 0x07d757--0x07d7c0
AnnonIPicBack:: INCBIN "gfx/pokemon/annon_i/back.pic" ; 0x07d7c0--0x07d81f
AnnonJPicFront:: INCBIN "gfx/pokemon/annon_j/front.pic" ; 0x07d81f--0x07d89b
AnnonJPicBack:: INCBIN "gfx/pokemon/annon_j/back.pic" ; 0x07d89b--0x07d909
AnnonKPicFront:: INCBIN "gfx/pokemon/annon_k/front.pic" ; 0x07d909--0x07d98d
AnnonKPicBack:: INCBIN "gfx/pokemon/annon_k/back.pic" ; 0x07d98d--0x07da06
AnnonLPicFront:: INCBIN "gfx/pokemon/annon_l/front.pic" ; 0x07da06--0x07da7a
AnnonLPicBack:: INCBIN "gfx/pokemon/annon_l/back.pic" ; 0x07da7a--0x07dade
AnnonMPicFront:: INCBIN "gfx/pokemon/annon_m/front.pic" ; 0x07dade--0x07dba1
AnnonMPicBack:: INCBIN "gfx/pokemon/annon_m/back.pic" ; 0x07dba1--0x07dc57
AnnonNPicFront:: INCBIN "gfx/pokemon/annon_n/front.pic" ; 0x07dc57--0x07dcf4
AnnonNPicBack:: INCBIN "gfx/pokemon/annon_n/back.pic" ; 0x07dcf4--0x07dd8b
AnnonOPicFront:: INCBIN "gfx/pokemon/annon_o/front.pic" ; 0x07dd8b--0x07de55
AnnonOPicBack:: INCBIN "gfx/pokemon/annon_o/back.pic" ; 0x07de55--0x07df15
AnnonPPicFront:: INCBIN "gfx/pokemon/annon_p/front.pic" ; 0x07df15--0x07df7d
AnnonPPicBack:: INCBIN "gfx/pokemon/annon_p/back.pic" ; 0x07df7d--0x07dfd6
AnnonQPicFront:: INCBIN "gfx/pokemon/annon_q/front.pic" ; 0x07dfd6--0x07e03d
AnnonQPicBack:: INCBIN "gfx/pokemon/annon_q/back.pic" ; 0x07e03d--0x07e099
AnnonRPicFront:: INCBIN "gfx/pokemon/annon_r/front.pic" ; 0x07e099--0x07e0ff
AnnonRPicBack:: INCBIN "gfx/pokemon/annon_r/back.pic" ; 0x07e0ff--0x07e159
AnnonSPicFront:: INCBIN "gfx/pokemon/annon_s/front.pic" ; 0x07e159--0x07e1f0
AnnonSPicBack:: INCBIN "gfx/pokemon/annon_s/back.pic" ; 0x07e1f0--0x07e27a
AnnonTPicFront:: INCBIN "gfx/pokemon/annon_t/front.pic" ; 0x07e27a--0x07e2e8
AnnonTPicBack:: INCBIN "gfx/pokemon/annon_t/back.pic" ; 0x07e2e8--0x07e348
AnnonUPicFront:: INCBIN "gfx/pokemon/annon_u/front.pic" ; 0x07e348--0x07e3e7
AnnonUPicBack:: INCBIN "gfx/pokemon/annon_u/back.pic" ; 0x07e3e7--0x07e47a
AnnonVPicFront:: INCBIN "gfx/pokemon/annon_v/front.pic" ; 0x07e47a--0x07e50a
AnnonVPicBack:: INCBIN "gfx/pokemon/annon_v/back.pic" ; 0x07e50a--0x07e589
AnnonWPicFront:: INCBIN "gfx/pokemon/annon_w/front.pic" ; 0x07e589--0x07e60d
AnnonWPicBack:: INCBIN "gfx/pokemon/annon_w/back.pic" ; 0x07e60d--0x07e681
AnnonXPicFront:: INCBIN "gfx/pokemon/annon_x/front.pic" ; 0x07e681--0x07e705
AnnonXPicBack:: INCBIN "gfx/pokemon/annon_x/back.pic" ; 0x07e705--0x07e77b
AnnonYPicFront:: INCBIN "gfx/pokemon/annon_y/front.pic" ; 0x07e77b--0x07e801
AnnonYPicBack:: INCBIN "gfx/pokemon/annon_y/back.pic" ; 0x07e801--0x07e87c
AnnonZPicFront:: INCBIN "gfx/pokemon/annon_z/front.pic" ; 0x07e87c--0x07e8fa
AnnonZPicBack:: INCBIN "gfx/pokemon/annon_z/back.pic" ; 0x07e8fa--0x07e96a
+69 -69
View File
@@ -1,69 +1,69 @@
INCLUDE "constants.asm"
if DEBUG
SECTION "TossItem", ROM0[$3243]
else
SECTION "TossItem", ROM0[$3207]
endc
TossItem: ; 00:3243
ldh a, [hROMBank]
push af
ld a, BANK(_TossItem)
call Bankswitch
push hl
push de
push bc
call _TossItem
pop bc
pop de
pop hl
pop af
call Bankswitch
ret
ReceiveItem:: ; 3259
; function to add an item (in varying quantities) to the player's bag or PC box
; INPUT:
; HL = address of inventory (either wNumBagItems or wNumBoxItems)
; [wCurItem] = item ID
; [wItemQuantity] = item quantity
; sets carry flag if successful, unsets carry flag if unsuccessful
push bc
ldh a, [hROMBank]
push af
ld a, BANK(_ReceiveItem)
call Bankswitch
push hl
push de
call _ReceiveItem
pop de
pop hl
pop bc
ld a, b
call Bankswitch
pop bc
ret
if DEBUG
SECTION "GiveItem", ROM0[$366C]
else
SECTION "GiveItem", ROM0[$3630]
endc
GiveItem::
; Give player quantity c of item b,
; and copy the item's name to wcf4b.
; Return carry on success.
ld a, b
ld [wNamedObjectIndexBuffer], a
ld [wCurItem], a
ld a, c
ld [wItemQuantity], a
ld hl, wNumBagItems
call ReceiveItem
ret nc
call GetItemName
call CopyStringToStringBuffer2
scf
ret
INCLUDE "constants.asm"
if DEBUG
SECTION "TossItem", ROM0[$3243]
else
SECTION "TossItem", ROM0[$3207]
endc
TossItem: ; 00:3243
ldh a, [hROMBank]
push af
ld a, BANK(_TossItem)
call Bankswitch
push hl
push de
push bc
call _TossItem
pop bc
pop de
pop hl
pop af
call Bankswitch
ret
ReceiveItem:: ; 3259
; function to add an item (in varying quantities) to the player's bag or PC box
; INPUT:
; HL = address of inventory (either wNumBagItems or wNumBoxItems)
; [wCurItem] = item ID
; [wItemQuantity] = item quantity
; sets carry flag if successful, unsets carry flag if unsuccessful
push bc
ldh a, [hROMBank]
push af
ld a, BANK(_ReceiveItem)
call Bankswitch
push hl
push de
call _ReceiveItem
pop de
pop hl
pop bc
ld a, b
call Bankswitch
pop bc
ret
if DEBUG
SECTION "GiveItem", ROM0[$366C]
else
SECTION "GiveItem", ROM0[$3630]
endc
GiveItem::
; Give player quantity c of item b,
; and copy the item's name to wcf4b.
; Return carry on success.
ld a, b
ld [wNamedObjectIndexBuffer], a
ld [wCurItem], a
ld a, c
ld [wItemQuantity], a
ld hl, wNumBagItems
call ReceiveItem
ret nc
call GetItemName
call CopyStringToStringBuffer2
scf
ret
+27 -27
View File
@@ -1,27 +1,27 @@
INCLUDE "constants.asm"
SECTION "FindItemInTable", ROM0[$35F8]
; find value a from table hl with row length de
; returns carry and row index b if successful
FindItemInTable: ; 00:35F8
ld b, 0
ld c, a
.loop
ld a, [hl]
cp -1
jr z, .fail
cp c
jr z, .success
inc b
add hl, de
jr .loop
.fail
and a
ret
.success
scf
ret
INCLUDE "constants.asm"
SECTION "FindItemInTable", ROM0[$35F8]
; find value a from table hl with row length de
; returns carry and row index b if successful
FindItemInTable: ; 00:35F8
ld b, 0
ld c, a
.loop
ld a, [hl]
cp -1
jr z, .fail
cp c
jr z, .success
inc b
add hl, de
jr .loop
.fail
and a
ret
.success
scf
ret
+17 -17
View File
@@ -1,17 +1,17 @@
queue_ab: MACRO
ld hl, \1
ldh a, [hROMBank]
call QueueScript
ENDM
queue_ba: MACRO
ldh a, [hROMBank]
ld hl, \1
call QueueScript
ENDM
far_queue: MACRO
ld hl, \1
ld a, BANK(\1)
call QueueScript
ENDM
queue_ab: MACRO
ld hl, \1
ldh a, [hROMBank]
call QueueScript
ENDM
queue_ba: MACRO
ldh a, [hROMBank]
ld hl, \1
call QueueScript
ENDM
far_queue: MACRO
ld hl, \1
ld a, BANK(\1)
call QueueScript
ENDM
+14 -14
View File
@@ -1,14 +1,14 @@
init_script_table: MACRO
script_id = 0
ENDM
add_script: MACRO
dw \1
\1ScriptID = script_id
script_id = script_id + 1
ENDM
set_script: MACRO
ld a, \1ScriptID
ld [wFieldMoveScriptID], a
ENDM
init_script_table: MACRO
script_id = 0
ENDM
add_script: MACRO
dw \1
\1ScriptID = script_id
script_id = script_id + 1
ENDM
set_script: MACRO
ld a, \1ScriptID
ld [wFieldMoveScriptID], a
ENDM