mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-09-17 02:40:50 +12:00
Use macros for bit arrays
This commit is contained in:
parent
715496bf35
commit
346ce9454a
|
@ -3,7 +3,7 @@
|
||||||
; - ItemNames (see data/items/names.asm)
|
; - ItemNames (see data/items/names.asm)
|
||||||
; - ItemPrices (see data/items/prices.asm)
|
; - ItemPrices (see data/items/prices.asm)
|
||||||
; - TechnicalMachinePrices (see data/items/tm_prices.asm)
|
; - TechnicalMachinePrices (see data/items/tm_prices.asm)
|
||||||
; - KeyItemBitfield (see data/items/key_items.asm)
|
; - KeyItemFlags (see data/items/key_items.asm)
|
||||||
; - ItemUsePtrTable (see engine/items/item_effects.asm)
|
; - ItemUsePtrTable (see engine/items/item_effects.asm)
|
||||||
const_def
|
const_def
|
||||||
const NO_ITEM ; $00
|
const NO_ITEM ; $00
|
||||||
|
|
|
@ -1,105 +1,86 @@
|
||||||
key_item_bits: MACRO
|
KeyItemFlags:
|
||||||
_bit = 0
|
bit_array KeyItemFlags
|
||||||
_byte = 0
|
dbit FALSE ; MASTER_BALL
|
||||||
REPT _NARG
|
dbit FALSE ; ULTRA_BALL
|
||||||
_byte = _byte | ((\1) << _bit)
|
dbit FALSE ; GREAT_BALL
|
||||||
_bit = _bit + 1
|
dbit FALSE ; POKE_BALL
|
||||||
IF _bit == 8
|
dbit TRUE ; TOWN_MAP
|
||||||
db _byte
|
dbit TRUE ; BICYCLE
|
||||||
_byte = 0
|
dbit TRUE ; SURFBOARD
|
||||||
_bit = 0
|
dbit TRUE ; SAFARI_BALL
|
||||||
ENDC
|
dbit TRUE ; POKEDEX
|
||||||
SHIFT
|
dbit FALSE ; MOON_STONE
|
||||||
ENDR
|
dbit FALSE ; ANTIDOTE
|
||||||
IF _bit > 0
|
dbit FALSE ; BURN_HEAL
|
||||||
db _byte
|
dbit FALSE ; ICE_HEAL
|
||||||
ENDC
|
dbit FALSE ; AWAKENING
|
||||||
ENDM
|
dbit FALSE ; PARLYZ_HEAL
|
||||||
|
dbit FALSE ; FULL_RESTORE
|
||||||
KeyItemBitfield:
|
dbit FALSE ; MAX_POTION
|
||||||
table_width 1, KeyItemBitfield
|
dbit FALSE ; HYPER_POTION
|
||||||
key_item_bits \
|
dbit FALSE ; SUPER_POTION
|
||||||
FALSE, \ ; MASTER_BALL
|
dbit FALSE ; POTION
|
||||||
FALSE, \ ; ULTRA_BALL
|
dbit TRUE ; BOULDERBADGE
|
||||||
FALSE, \ ; GREAT_BALL
|
dbit TRUE ; CASCADEBADGE
|
||||||
FALSE, \ ; POKE_BALL
|
dbit TRUE ; THUNDERBADGE
|
||||||
TRUE, \ ; TOWN_MAP
|
dbit TRUE ; RAINBOWBADGE
|
||||||
TRUE, \ ; BICYCLE
|
dbit TRUE ; SOULBADGE
|
||||||
TRUE, \ ; SURFBOARD
|
dbit TRUE ; MARSHBADGE
|
||||||
TRUE, \ ; SAFARI_BALL
|
dbit TRUE ; VOLCANOBADGE
|
||||||
TRUE, \ ; POKEDEX
|
dbit TRUE ; EARTHBADGE
|
||||||
FALSE, \ ; MOON_STONE
|
dbit FALSE ; ESCAPE_ROPE
|
||||||
FALSE, \ ; ANTIDOTE
|
dbit FALSE ; REPEL
|
||||||
FALSE, \ ; BURN_HEAL
|
dbit TRUE ; OLD_AMBER
|
||||||
FALSE, \ ; ICE_HEAL
|
dbit FALSE ; FIRE_STONE
|
||||||
FALSE, \ ; AWAKENING
|
dbit FALSE ; THUNDER_STONE
|
||||||
FALSE, \ ; PARLYZ_HEAL
|
dbit FALSE ; WATER_STONE
|
||||||
FALSE, \ ; FULL_RESTORE
|
dbit FALSE ; HP_UP
|
||||||
FALSE, \ ; MAX_POTION
|
dbit FALSE ; PROTEIN
|
||||||
FALSE, \ ; HYPER_POTION
|
dbit FALSE ; IRON
|
||||||
FALSE, \ ; SUPER_POTION
|
dbit FALSE ; CARBOS
|
||||||
FALSE, \ ; POTION
|
dbit FALSE ; CALCIUM
|
||||||
TRUE, \ ; BOULDERBADGE
|
dbit FALSE ; RARE_CANDY
|
||||||
TRUE, \ ; CASCADEBADGE
|
dbit TRUE ; DOME_FOSSIL
|
||||||
TRUE, \ ; THUNDERBADGE
|
dbit TRUE ; HELIX_FOSSIL
|
||||||
TRUE, \ ; RAINBOWBADGE
|
dbit TRUE ; SECRET_KEY
|
||||||
TRUE, \ ; SOULBADGE
|
dbit TRUE ; UNUSED_ITEM
|
||||||
TRUE, \ ; MARSHBADGE
|
dbit TRUE ; BIKE_VOUCHER
|
||||||
TRUE, \ ; VOLCANOBADGE
|
dbit FALSE ; X_ACCURACY
|
||||||
TRUE, \ ; EARTHBADGE
|
dbit FALSE ; LEAF_STONE
|
||||||
FALSE, \ ; ESCAPE_ROPE
|
dbit TRUE ; CARD_KEY
|
||||||
FALSE, \ ; REPEL
|
dbit FALSE ; NUGGET
|
||||||
TRUE, \ ; OLD_AMBER
|
dbit FALSE ; PP_UP_2
|
||||||
FALSE, \ ; FIRE_STONE
|
dbit FALSE ; POKE_DOLL
|
||||||
FALSE, \ ; THUNDER_STONE
|
dbit FALSE ; FULL_HEAL
|
||||||
FALSE, \ ; WATER_STONE
|
dbit FALSE ; REVIVE
|
||||||
FALSE, \ ; HP_UP
|
dbit FALSE ; MAX_REVIVE
|
||||||
FALSE, \ ; PROTEIN
|
dbit FALSE ; GUARD_SPEC
|
||||||
FALSE, \ ; IRON
|
dbit FALSE ; SUPER_REPEL
|
||||||
FALSE, \ ; CARBOS
|
dbit FALSE ; MAX_REPEL
|
||||||
FALSE, \ ; CALCIUM
|
dbit FALSE ; DIRE_HIT
|
||||||
FALSE, \ ; RARE_CANDY
|
dbit FALSE ; COIN
|
||||||
TRUE, \ ; DOME_FOSSIL
|
dbit FALSE ; FRESH_WATER
|
||||||
TRUE, \ ; HELIX_FOSSIL
|
dbit FALSE ; SODA_POP
|
||||||
TRUE, \ ; SECRET_KEY
|
dbit FALSE ; LEMONADE
|
||||||
TRUE, \ ; UNUSED_ITEM
|
dbit TRUE ; S_S_TICKET
|
||||||
TRUE, \ ; BIKE_VOUCHER
|
dbit TRUE ; GOLD_TEETH
|
||||||
FALSE, \ ; X_ACCURACY
|
dbit FALSE ; X_ATTACK
|
||||||
FALSE, \ ; LEAF_STONE
|
dbit FALSE ; X_DEFEND
|
||||||
TRUE, \ ; CARD_KEY
|
dbit FALSE ; X_SPEED
|
||||||
FALSE, \ ; NUGGET
|
dbit FALSE ; X_SPECIAL
|
||||||
FALSE, \ ; PP_UP_2
|
dbit TRUE ; COIN_CASE
|
||||||
FALSE, \ ; POKE_DOLL
|
dbit TRUE ; OAKS_PARCEL
|
||||||
FALSE, \ ; FULL_HEAL
|
dbit TRUE ; ITEMFINDER
|
||||||
FALSE, \ ; REVIVE
|
dbit TRUE ; SILPH_SCOPE
|
||||||
FALSE, \ ; MAX_REVIVE
|
dbit TRUE ; POKE_FLUTE
|
||||||
FALSE, \ ; GUARD_SPEC
|
dbit TRUE ; LIFT_KEY
|
||||||
FALSE, \ ; SUPER_REPEL
|
dbit FALSE ; EXP_ALL
|
||||||
FALSE, \ ; MAX_REPEL
|
dbit TRUE ; OLD_ROD
|
||||||
FALSE, \ ; DIRE_HIT
|
dbit TRUE ; GOOD_ROD
|
||||||
FALSE, \ ; COIN
|
dbit TRUE ; SUPER_ROD
|
||||||
FALSE, \ ; FRESH_WATER
|
dbit FALSE ; PP_UP
|
||||||
FALSE, \ ; SODA_POP
|
dbit FALSE ; ETHER
|
||||||
FALSE, \ ; LEMONADE
|
dbit FALSE ; MAX_ETHER
|
||||||
TRUE, \ ; S_S_TICKET
|
dbit FALSE ; ELIXER
|
||||||
TRUE, \ ; GOLD_TEETH
|
dbit FALSE ; MAX_ELIXER
|
||||||
FALSE, \ ; X_ATTACK
|
end_bit_array NUM_ITEMS
|
||||||
FALSE, \ ; X_DEFEND
|
|
||||||
FALSE, \ ; X_SPEED
|
|
||||||
FALSE, \ ; X_SPECIAL
|
|
||||||
TRUE, \ ; COIN_CASE
|
|
||||||
TRUE, \ ; OAKS_PARCEL
|
|
||||||
TRUE, \ ; ITEMFINDER
|
|
||||||
TRUE, \ ; SILPH_SCOPE
|
|
||||||
TRUE, \ ; POKE_FLUTE
|
|
||||||
TRUE, \ ; LIFT_KEY
|
|
||||||
FALSE, \ ; EXP_ALL
|
|
||||||
TRUE, \ ; OLD_ROD
|
|
||||||
TRUE, \ ; GOOD_ROD
|
|
||||||
TRUE, \ ; SUPER_ROD
|
|
||||||
FALSE, \ ; PP_UP
|
|
||||||
FALSE, \ ; ETHER
|
|
||||||
FALSE, \ ; MAX_ETHER
|
|
||||||
FALSE, \ ; ELIXER
|
|
||||||
FALSE ; MAX_ELIXER
|
|
||||||
assert_table_length (NUM_ITEMS + 7) / 8
|
|
||||||
|
|
|
@ -2614,9 +2614,10 @@ IsKeyItem_::
|
||||||
jr nc, .checkIfItemIsHM
|
jr nc, .checkIfItemIsHM
|
||||||
; if the item is not an HM or TM
|
; if the item is not an HM or TM
|
||||||
push af
|
push af
|
||||||
ld hl, KeyItemBitfield
|
ld hl, KeyItemFlags
|
||||||
ld de, wBuffer
|
ld de, wBuffer
|
||||||
ld bc, 15 ; only 11 bytes are actually used
|
ld bc, 15 ; only 11 bytes are actually used
|
||||||
|
assert 15 >= (NUM_ITEMS + 7) / 8
|
||||||
call CopyData
|
call CopyData
|
||||||
pop af
|
pop af
|
||||||
dec a
|
dec a
|
||||||
|
|
|
@ -73,6 +73,41 @@ x = (x + 1) / 2
|
||||||
ENDC
|
ENDC
|
||||||
ENDM
|
ENDM
|
||||||
|
|
||||||
|
bit_array: MACRO
|
||||||
|
CURRENT_BIT_ARRAY_VALUE = 0
|
||||||
|
CURRENT_BIT_ARRAY_LENGTH = 0
|
||||||
|
IF _NARG == 1
|
||||||
|
REDEF CURRENT_BIT_ARRAY_START EQUS "\1"
|
||||||
|
ELSE
|
||||||
|
REDEF CURRENT_BIT_ARRAY_START EQUS "._bit_array\@"
|
||||||
|
{CURRENT_BIT_ARRAY_START}:
|
||||||
|
ENDC
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
dbit: MACRO
|
||||||
|
ASSERT (\1) == 0 || (\1) == 1, "bits must be 0 or 1"
|
||||||
|
CURRENT_BIT_ARRAY_VALUE = CURRENT_BIT_ARRAY_VALUE | ((\1) << (CURRENT_BIT_ARRAY_LENGTH % 8))
|
||||||
|
CURRENT_BIT_ARRAY_LENGTH = CURRENT_BIT_ARRAY_LENGTH + 1
|
||||||
|
IF CURRENT_BIT_ARRAY_LENGTH % 8 == 0
|
||||||
|
db CURRENT_BIT_ARRAY_VALUE
|
||||||
|
CURRENT_BIT_ARRAY_VALUE = 0
|
||||||
|
ENDC
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
end_bit_array: MACRO
|
||||||
|
IF CURRENT_BIT_ARRAY_LENGTH % 8
|
||||||
|
db CURRENT_BIT_ARRAY_VALUE
|
||||||
|
ENDC
|
||||||
|
IF _NARG == 1
|
||||||
|
x = \1
|
||||||
|
ASSERT x == CURRENT_BIT_ARRAY_LENGTH, \
|
||||||
|
"{CURRENT_BIT_ARRAY_START}: expected {d:x} bits, got {d:CURRENT_BIT_ARRAY_LENGTH}"
|
||||||
|
x = (x + 7) / 8
|
||||||
|
ASSERT x == @ - {CURRENT_BIT_ARRAY_START}, \
|
||||||
|
"{CURRENT_BIT_ARRAY_START}: expected {d:x} bytes"
|
||||||
|
ENDC
|
||||||
|
ENDM
|
||||||
|
|
||||||
def_grass_wildmons: MACRO
|
def_grass_wildmons: MACRO
|
||||||
;\1: encounter rate
|
;\1: encounter rate
|
||||||
CURRENT_GRASS_WILDMONS_RATE = \1
|
CURRENT_GRASS_WILDMONS_RATE = \1
|
||||||
|
|
Loading…
Reference in a new issue