mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-11-14 00:56:40 +13:00
move event macros to separate file
This commit is contained in:
parent
fd2b4b6c74
commit
cbcdb2ec2a
|
|
@ -31,3 +31,4 @@ INCLUDE "constants/music_constants.asm"
|
||||||
INCLUDE "constants/tilesets.asm"
|
INCLUDE "constants/tilesets.asm"
|
||||||
INCLUDE "constants/starter_mons.asm"
|
INCLUDE "constants/starter_mons.asm"
|
||||||
INCLUDE "constants/event_constants.asm"
|
INCLUDE "constants/event_constants.asm"
|
||||||
|
INCLUDE "constants/event_macros.asm"
|
||||||
|
|
|
||||||
425
constants/event_macros.asm
Executable file
425
constants/event_macros.asm
Executable file
|
|
@ -0,0 +1,425 @@
|
||||||
|
;\1 = event index
|
||||||
|
;\2 = return result in carry instead of zero flag
|
||||||
|
CheckEvent: MACRO
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
ld a, [wEventFlags + event_byte]
|
||||||
|
|
||||||
|
IF _NARG > 1
|
||||||
|
IF ((\1) % 8) == 7
|
||||||
|
add a
|
||||||
|
ELSE
|
||||||
|
REPT ((\1) % 8) + 1
|
||||||
|
rrca
|
||||||
|
ENDR
|
||||||
|
ENDC
|
||||||
|
ELSE
|
||||||
|
bit (\1) % 8, a
|
||||||
|
ENDC
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
CheckEventReuseA: MACRO
|
||||||
|
IF event_byte != ((\1) / 8)
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
ld a, [wEventFlags + event_byte]
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
bit (\1) % 8, a
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = reg
|
||||||
|
;\2 = event index
|
||||||
|
;\3 = event index this event is relative to (optional, this is needed when there is a fixed flag address)
|
||||||
|
EventFlagBit: MACRO
|
||||||
|
IF _NARG > 2
|
||||||
|
ld \1, ((\3) % 8) + ((\2) - (\3))
|
||||||
|
ELSE
|
||||||
|
ld \1, (\2) % 8
|
||||||
|
ENDC
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = reg
|
||||||
|
;\2 = event index
|
||||||
|
EventFlagAddress: MACRO
|
||||||
|
event_byte = ((\2) / 8)
|
||||||
|
ld \1, wEventFlags + event_byte
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
CheckEventHL: MACRO
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
ld hl, wEventFlags + event_byte
|
||||||
|
bit (\1) % 8, [hl]
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
CheckEventReuseHL: MACRO
|
||||||
|
IF event_byte != ((\1) / 8)
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
ld hl, wEventFlags + event_byte
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
bit (\1) % 8, [hl]
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
; dangerous, only use when HL is guaranteed to be the desired value
|
||||||
|
;\1 = event index
|
||||||
|
CheckEventForceReuseHL: MACRO
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
bit (\1) % 8, [hl]
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
;\2 = event index of the last event used before the branch
|
||||||
|
CheckEventAfterBranchReuseHL: MACRO
|
||||||
|
event_byte = ((\2) / 8)
|
||||||
|
IF event_byte != ((\1) / 8)
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
ld hl, wEventFlags + event_byte
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
bit (\1) % 8, [hl]
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
CheckAndSetEvent: MACRO
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
ld hl, wEventFlags + event_byte
|
||||||
|
bit (\1) % 8, [hl]
|
||||||
|
set (\1) % 8, [hl]
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
CheckAndResetEvent: MACRO
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
ld hl, wEventFlags + event_byte
|
||||||
|
bit (\1) % 8, [hl]
|
||||||
|
res (\1) % 8, [hl]
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
CheckAndSetEventA: MACRO
|
||||||
|
ld a, [wEventFlags + ((\1) / 8)]
|
||||||
|
bit (\1) % 8, a
|
||||||
|
set (\1) % 8, a
|
||||||
|
ld [wEventFlags + ((\1) / 8)], a
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
CheckAndResetEventA: MACRO
|
||||||
|
ld a, [wEventFlags + ((\1) / 8)]
|
||||||
|
bit (\1) % 8, a
|
||||||
|
res (\1) % 8, a
|
||||||
|
ld [wEventFlags + ((\1) / 8)], a
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
SetEvent: MACRO
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
ld hl, wEventFlags + event_byte
|
||||||
|
set (\1) % 8, [hl]
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
SetEventReuseHL: MACRO
|
||||||
|
IF event_byte != ((\1) / 8)
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
ld hl, wEventFlags + event_byte
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
set (\1) % 8, [hl]
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
;\2 = event index of the last event used before the branch
|
||||||
|
SetEventAfterBranchReuseHL: MACRO
|
||||||
|
event_byte = ((\2) / 8)
|
||||||
|
IF event_byte != ((\1) / 8)
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
ld hl, wEventFlags + event_byte
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
set (\1) % 8, [hl]
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
; dangerous, only use when HL is guaranteed to be the desired value
|
||||||
|
;\1 = event index
|
||||||
|
SetEventForceReuseHL: MACRO
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
set (\1) % 8, [hl]
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
;\2 = event index
|
||||||
|
;\3 = event index (optional)
|
||||||
|
SetEvents: MACRO
|
||||||
|
SetEvent \1
|
||||||
|
SetEventReuseHL \2
|
||||||
|
|
||||||
|
IF _NARG > 2
|
||||||
|
SetEventReuseHL \3
|
||||||
|
ENDC
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
ResetEvent: MACRO
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
ld hl, wEventFlags + event_byte
|
||||||
|
res (\1) % 8, [hl]
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
ResetEventReuseHL: MACRO
|
||||||
|
IF event_byte != ((\1) / 8)
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
ld hl, wEventFlags + event_byte
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
res (\1) % 8, [hl]
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
;\2 = event index of the last event used before the branch
|
||||||
|
ResetEventAfterBranchReuseHL: MACRO
|
||||||
|
event_byte = ((\2) / 8)
|
||||||
|
IF event_byte != ((\1) / 8)
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
ld hl, wEventFlags + event_byte
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
res (\1) % 8, [hl]
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
; dangerous, only use when HL is guaranteed to be the desired value
|
||||||
|
;\1 = event index
|
||||||
|
ResetEventForceReuseHL: MACRO
|
||||||
|
event_byte = ((\1) / 8)
|
||||||
|
res (\1) % 8, [hl]
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
;\2 = event index
|
||||||
|
;\3 = event index (optional)
|
||||||
|
ResetEvents: MACRO
|
||||||
|
ResetEvent \1
|
||||||
|
ResetEventReuseHL \2
|
||||||
|
|
||||||
|
IF _NARG > 2
|
||||||
|
ResetEventReuseHL \3
|
||||||
|
ENDC
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
;\2 = number of bytes away from the base address (optional, for matching the ROM)
|
||||||
|
dbEventFlagBit: MACRO
|
||||||
|
IF _NARG > 1
|
||||||
|
db ((\1) % 8) + ((\2) * 8)
|
||||||
|
ELSE
|
||||||
|
db ((\1) % 8)
|
||||||
|
ENDC
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = event index
|
||||||
|
;\2 = number of bytes away from the base address (optional, for matching the ROM)
|
||||||
|
dwEventFlagAddress: MACRO
|
||||||
|
IF _NARG > 1
|
||||||
|
dw wEventFlags + ((\1) / 8) - (\2)
|
||||||
|
ELSE
|
||||||
|
dw wEventFlags + ((\1) / 8)
|
||||||
|
ENDC
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = start
|
||||||
|
;\2 = end
|
||||||
|
SetEventRange: MACRO
|
||||||
|
event_start_byte = ((\1) / 8)
|
||||||
|
event_end_byte = ((\2) / 8)
|
||||||
|
|
||||||
|
IF event_end_byte < event_start_byte
|
||||||
|
FAIL "Incorrect argument order in SetEventRange."
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
IF event_start_byte == event_end_byte
|
||||||
|
ld a, [wEventFlags + event_start_byte]
|
||||||
|
or (1 << (((\2) % 8) + 1)) - (1 << ((\1) % 8))
|
||||||
|
ld [wEventFlags + event_start_byte], a
|
||||||
|
ELSE
|
||||||
|
event_fill_start = event_start_byte + 1
|
||||||
|
event_fill_count = event_end_byte - event_start_byte - 1
|
||||||
|
|
||||||
|
IF ((\1) % 8) == 0
|
||||||
|
event_fill_start = event_fill_start + -1
|
||||||
|
event_fill_count = event_fill_count + 1
|
||||||
|
ELSE
|
||||||
|
ld a, [wEventFlags + event_start_byte]
|
||||||
|
or $ff - ((1 << ((\1) % 8)) - 1)
|
||||||
|
ld [wEventFlags + event_start_byte], a
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
IF ((\2) % 8) == 7
|
||||||
|
event_fill_count = event_fill_count + 1
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
IF event_fill_count == 1
|
||||||
|
ld hl, wEventFlags + event_fill_start
|
||||||
|
ld [hl], $ff
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
IF event_fill_count > 1
|
||||||
|
ld a, $ff
|
||||||
|
ld hl, wEventFlags + event_fill_start
|
||||||
|
|
||||||
|
REPT event_fill_count + -1
|
||||||
|
ld [hli], a
|
||||||
|
ENDR
|
||||||
|
|
||||||
|
ld [hl], a
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
IF ((\2) % 8) == 0
|
||||||
|
ld hl, wEventFlags + event_end_byte
|
||||||
|
set 0, [hl]
|
||||||
|
ELSE
|
||||||
|
IF ((\2) % 8) != 7
|
||||||
|
ld a, [wEventFlags + event_end_byte]
|
||||||
|
or (1 << (((\2) % 8) + 1)) - 1
|
||||||
|
ld [wEventFlags + event_end_byte], a
|
||||||
|
ENDC
|
||||||
|
ENDC
|
||||||
|
ENDC
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
;\1 = start
|
||||||
|
;\2 = end
|
||||||
|
;\3 = assume a is 0 if present
|
||||||
|
ResetEventRange: MACRO
|
||||||
|
event_start_byte = ((\1) / 8)
|
||||||
|
event_end_byte = ((\2) / 8)
|
||||||
|
|
||||||
|
IF event_end_byte < event_start_byte
|
||||||
|
FAIL "Incorrect argument order in ResetEventRange."
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
IF event_start_byte == event_end_byte
|
||||||
|
ld a, [wEventFlags + event_start_byte]
|
||||||
|
and ~((1 << (((\2) % 8) + 1)) - (1 << ((\1) % 8))) & $ff
|
||||||
|
ld [wEventFlags + event_start_byte], a
|
||||||
|
ELSE
|
||||||
|
event_fill_start = event_start_byte + 1
|
||||||
|
event_fill_count = event_end_byte - event_start_byte - 1
|
||||||
|
|
||||||
|
IF ((\1) % 8) == 0
|
||||||
|
event_fill_start = event_fill_start + -1
|
||||||
|
event_fill_count = event_fill_count + 1
|
||||||
|
ELSE
|
||||||
|
ld a, [wEventFlags + event_start_byte]
|
||||||
|
and ~($ff - ((1 << ((\1) % 8)) - 1)) & $ff
|
||||||
|
ld [wEventFlags + event_start_byte], a
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
IF ((\2) % 8) == 7
|
||||||
|
event_fill_count = event_fill_count + 1
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
IF event_fill_count == 1
|
||||||
|
ld hl, wEventFlags + event_fill_start
|
||||||
|
ld [hl], 0
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
IF event_fill_count > 1
|
||||||
|
ld hl, wEventFlags + event_fill_start
|
||||||
|
|
||||||
|
; force xor a if we just to wrote to it above
|
||||||
|
IF (_NARG < 3) || (((\1) % 8) != 0)
|
||||||
|
xor a
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
REPT event_fill_count + -1
|
||||||
|
ld [hli], a
|
||||||
|
ENDR
|
||||||
|
|
||||||
|
ld [hl], a
|
||||||
|
ENDC
|
||||||
|
|
||||||
|
IF ((\2) % 8) == 0
|
||||||
|
ld hl, wEventFlags + event_end_byte
|
||||||
|
res 0, [hl]
|
||||||
|
ELSE
|
||||||
|
IF ((\2) % 8) != 7
|
||||||
|
ld a, [wEventFlags + event_end_byte]
|
||||||
|
and ~((1 << (((\2) % 8) + 1)) - 1) & $ff
|
||||||
|
ld [wEventFlags + event_end_byte], a
|
||||||
|
ENDC
|
||||||
|
ENDC
|
||||||
|
ENDC
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
; returns whether both events are set in Z flag
|
||||||
|
;\1 = event index 1
|
||||||
|
;\2 = event index 2
|
||||||
|
CheckBothEventsSet: MACRO
|
||||||
|
IF ((\1) / 8) == ((\2) / 8)
|
||||||
|
ld a, [wEventFlags + ((\1) / 8)]
|
||||||
|
and (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
||||||
|
cp (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
||||||
|
ELSE
|
||||||
|
; This case doesn't happen in the original ROM.
|
||||||
|
IF ((\1) % 8) == ((\2) % 8)
|
||||||
|
push hl
|
||||||
|
ld a, [wEventFlags + ((\1) / 8)]
|
||||||
|
ld hl, wEventFlags + ((\2) / 8)
|
||||||
|
and [hl]
|
||||||
|
cpl
|
||||||
|
bit ((\1) % 8), a
|
||||||
|
pop hl
|
||||||
|
ELSE
|
||||||
|
push bc
|
||||||
|
ld a, [wEventFlags + ((\1) / 8)]
|
||||||
|
and (1 << ((\1) % 8))
|
||||||
|
ld b, a
|
||||||
|
ld a, [wEventFlags + ((\2) / 8)]
|
||||||
|
and (1 << ((\2) % 8))
|
||||||
|
or b
|
||||||
|
cp (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
||||||
|
pop bc
|
||||||
|
ENDC
|
||||||
|
ENDC
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
; returns the complement of whether either event is set in Z flag
|
||||||
|
;\1 = event index 1
|
||||||
|
;\2 = event index 2
|
||||||
|
CheckEitherEventSet: MACRO
|
||||||
|
IF ((\1) / 8) == ((\2) / 8)
|
||||||
|
ld a, [wEventFlags + ((\1) / 8)]
|
||||||
|
and (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
||||||
|
ELSE
|
||||||
|
; This case doesn't happen in the original ROM.
|
||||||
|
IF ((\1) % 8) == ((\2) % 8)
|
||||||
|
push hl
|
||||||
|
ld a, [wEventFlags + ((\1) / 8)]
|
||||||
|
ld hl, wEventFlags + ((\2) / 8)
|
||||||
|
or [hl]
|
||||||
|
bit ((\1) % 8), a
|
||||||
|
pop hl
|
||||||
|
ELSE
|
||||||
|
push bc
|
||||||
|
ld a, [wEventFlags + ((\1) / 8)]
|
||||||
|
and (1 << ((\1) % 8))
|
||||||
|
ld b, a
|
||||||
|
ld a, [wEventFlags + ((\2) / 8)]
|
||||||
|
and (1 << ((\2) % 8))
|
||||||
|
or b
|
||||||
|
pop bc
|
||||||
|
ENDC
|
||||||
|
ENDC
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
; for handling fixed event bits when events are inserted/removed
|
||||||
|
;\1 = event index
|
||||||
|
;\2 = fixed flag bit
|
||||||
|
AdjustEventBit: MACRO
|
||||||
|
IF ((\1) % 8) != (\2)
|
||||||
|
add ((\1) % 8) - (\2)
|
||||||
|
ENDC
|
||||||
|
ENDM
|
||||||
426
macros.asm
426
macros.asm
|
|
@ -79,432 +79,6 @@ bcd3: MACRO
|
||||||
coins equs "bcd2"
|
coins equs "bcd2"
|
||||||
money equs "bcd3"
|
money equs "bcd3"
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
;\2 = return result in carry instead of zero flag
|
|
||||||
CheckEvent: MACRO
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
ld a, [wEventFlags + event_byte]
|
|
||||||
|
|
||||||
IF _NARG > 1
|
|
||||||
IF ((\1) % 8) == 7
|
|
||||||
add a
|
|
||||||
ELSE
|
|
||||||
REPT ((\1) % 8) + 1
|
|
||||||
rrca
|
|
||||||
ENDR
|
|
||||||
ENDC
|
|
||||||
ELSE
|
|
||||||
bit (\1) % 8, a
|
|
||||||
ENDC
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
CheckEventReuseA: MACRO
|
|
||||||
IF event_byte != ((\1) / 8)
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
ld a, [wEventFlags + event_byte]
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
bit (\1) % 8, a
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = reg
|
|
||||||
;\2 = event index
|
|
||||||
;\3 = event index this event is relative to (optional, this is needed when there is a fixed flag address)
|
|
||||||
EventFlagBit: MACRO
|
|
||||||
IF _NARG > 2
|
|
||||||
ld \1, ((\3) % 8) + ((\2) - (\3))
|
|
||||||
ELSE
|
|
||||||
ld \1, (\2) % 8
|
|
||||||
ENDC
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = reg
|
|
||||||
;\2 = event index
|
|
||||||
EventFlagAddress: MACRO
|
|
||||||
event_byte = ((\2) / 8)
|
|
||||||
ld \1, wEventFlags + event_byte
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
CheckEventHL: MACRO
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
ld hl, wEventFlags + event_byte
|
|
||||||
bit (\1) % 8, [hl]
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
CheckEventReuseHL: MACRO
|
|
||||||
IF event_byte != ((\1) / 8)
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
ld hl, wEventFlags + event_byte
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
bit (\1) % 8, [hl]
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
; dangerous, only use when HL is guaranteed to be the desired value
|
|
||||||
;\1 = event index
|
|
||||||
CheckEventForceReuseHL: MACRO
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
bit (\1) % 8, [hl]
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
;\2 = event index of the last event used before the branch
|
|
||||||
CheckEventAfterBranchReuseHL: MACRO
|
|
||||||
event_byte = ((\2) / 8)
|
|
||||||
IF event_byte != ((\1) / 8)
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
ld hl, wEventFlags + event_byte
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
bit (\1) % 8, [hl]
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
CheckAndSetEvent: MACRO
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
ld hl, wEventFlags + event_byte
|
|
||||||
bit (\1) % 8, [hl]
|
|
||||||
set (\1) % 8, [hl]
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
CheckAndResetEvent: MACRO
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
ld hl, wEventFlags + event_byte
|
|
||||||
bit (\1) % 8, [hl]
|
|
||||||
res (\1) % 8, [hl]
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
CheckAndSetEventA: MACRO
|
|
||||||
ld a, [wEventFlags + ((\1) / 8)]
|
|
||||||
bit (\1) % 8, a
|
|
||||||
set (\1) % 8, a
|
|
||||||
ld [wEventFlags + ((\1) / 8)], a
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
CheckAndResetEventA: MACRO
|
|
||||||
ld a, [wEventFlags + ((\1) / 8)]
|
|
||||||
bit (\1) % 8, a
|
|
||||||
res (\1) % 8, a
|
|
||||||
ld [wEventFlags + ((\1) / 8)], a
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
SetEvent: MACRO
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
ld hl, wEventFlags + event_byte
|
|
||||||
set (\1) % 8, [hl]
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
SetEventReuseHL: MACRO
|
|
||||||
IF event_byte != ((\1) / 8)
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
ld hl, wEventFlags + event_byte
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
set (\1) % 8, [hl]
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
;\2 = event index of the last event used before the branch
|
|
||||||
SetEventAfterBranchReuseHL: MACRO
|
|
||||||
event_byte = ((\2) / 8)
|
|
||||||
IF event_byte != ((\1) / 8)
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
ld hl, wEventFlags + event_byte
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
set (\1) % 8, [hl]
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
; dangerous, only use when HL is guaranteed to be the desired value
|
|
||||||
;\1 = event index
|
|
||||||
SetEventForceReuseHL: MACRO
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
set (\1) % 8, [hl]
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
;\2 = event index
|
|
||||||
;\3 = event index (optional)
|
|
||||||
SetEvents: MACRO
|
|
||||||
SetEvent \1
|
|
||||||
SetEventReuseHL \2
|
|
||||||
|
|
||||||
IF _NARG > 2
|
|
||||||
SetEventReuseHL \3
|
|
||||||
ENDC
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
ResetEvent: MACRO
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
ld hl, wEventFlags + event_byte
|
|
||||||
res (\1) % 8, [hl]
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
ResetEventReuseHL: MACRO
|
|
||||||
IF event_byte != ((\1) / 8)
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
ld hl, wEventFlags + event_byte
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
res (\1) % 8, [hl]
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
;\2 = event index of the last event used before the branch
|
|
||||||
ResetEventAfterBranchReuseHL: MACRO
|
|
||||||
event_byte = ((\2) / 8)
|
|
||||||
IF event_byte != ((\1) / 8)
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
ld hl, wEventFlags + event_byte
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
res (\1) % 8, [hl]
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
; dangerous, only use when HL is guaranteed to be the desired value
|
|
||||||
;\1 = event index
|
|
||||||
ResetEventForceReuseHL: MACRO
|
|
||||||
event_byte = ((\1) / 8)
|
|
||||||
res (\1) % 8, [hl]
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
;\2 = event index
|
|
||||||
;\3 = event index (optional)
|
|
||||||
ResetEvents: MACRO
|
|
||||||
ResetEvent \1
|
|
||||||
ResetEventReuseHL \2
|
|
||||||
|
|
||||||
IF _NARG > 2
|
|
||||||
ResetEventReuseHL \3
|
|
||||||
ENDC
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
;\2 = number of bytes away from the base address (optional, for matching the ROM)
|
|
||||||
dbEventFlagBit: MACRO
|
|
||||||
IF _NARG > 1
|
|
||||||
db ((\1) % 8) + ((\2) * 8)
|
|
||||||
ELSE
|
|
||||||
db ((\1) % 8)
|
|
||||||
ENDC
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = event index
|
|
||||||
;\2 = number of bytes away from the base address (optional, for matching the ROM)
|
|
||||||
dwEventFlagAddress: MACRO
|
|
||||||
IF _NARG > 1
|
|
||||||
dw wEventFlags + ((\1) / 8) - (\2)
|
|
||||||
ELSE
|
|
||||||
dw wEventFlags + ((\1) / 8)
|
|
||||||
ENDC
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = start
|
|
||||||
;\2 = end
|
|
||||||
SetEventRange: MACRO
|
|
||||||
event_start_byte = ((\1) / 8)
|
|
||||||
event_end_byte = ((\2) / 8)
|
|
||||||
|
|
||||||
IF event_end_byte < event_start_byte
|
|
||||||
FAIL "Incorrect argument order in SetEventRange."
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
IF event_start_byte == event_end_byte
|
|
||||||
ld a, [wEventFlags + event_start_byte]
|
|
||||||
or (1 << (((\2) % 8) + 1)) - (1 << ((\1) % 8))
|
|
||||||
ld [wEventFlags + event_start_byte], a
|
|
||||||
ELSE
|
|
||||||
event_fill_start = event_start_byte + 1
|
|
||||||
event_fill_count = event_end_byte - event_start_byte - 1
|
|
||||||
|
|
||||||
IF ((\1) % 8) == 0
|
|
||||||
event_fill_start = -1 + event_fill_start
|
|
||||||
event_fill_count = 1 + event_fill_count
|
|
||||||
ELSE
|
|
||||||
ld a, [wEventFlags + event_start_byte]
|
|
||||||
or $ff - ((1 << ((\1) % 8)) - 1)
|
|
||||||
ld [wEventFlags + event_start_byte], a
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
IF ((\2) % 8) == 7
|
|
||||||
event_fill_count = 1 + event_fill_count
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
IF event_fill_count == 1
|
|
||||||
ld hl, wEventFlags + event_fill_start
|
|
||||||
ld [hl], $ff
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
IF event_fill_count > 1
|
|
||||||
ld a, $ff
|
|
||||||
ld hl, wEventFlags + event_fill_start
|
|
||||||
|
|
||||||
REPT -1 + event_fill_count
|
|
||||||
ld [hli], a
|
|
||||||
ENDR
|
|
||||||
|
|
||||||
ld [hl], a
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
IF ((\2) % 8) == 0
|
|
||||||
ld hl, wEventFlags + event_end_byte
|
|
||||||
set 0, [hl]
|
|
||||||
ELSE
|
|
||||||
IF ((\2) % 8) != 7
|
|
||||||
ld a, [wEventFlags + event_end_byte]
|
|
||||||
or (1 << (((\2) % 8) + 1)) - 1
|
|
||||||
ld [wEventFlags + event_end_byte], a
|
|
||||||
ENDC
|
|
||||||
ENDC
|
|
||||||
ENDC
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = start
|
|
||||||
;\2 = end
|
|
||||||
;\3 = assume a is 0 if present
|
|
||||||
ResetEventRange: MACRO
|
|
||||||
event_start_byte = ((\1) / 8)
|
|
||||||
event_end_byte = ((\2) / 8)
|
|
||||||
|
|
||||||
IF event_end_byte < event_start_byte
|
|
||||||
FAIL "Incorrect argument order in ResetEventRange."
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
IF event_start_byte == event_end_byte
|
|
||||||
ld a, [wEventFlags + event_start_byte]
|
|
||||||
and ~((1 << (((\2) % 8) + 1)) - (1 << ((\1) % 8))) & $ff
|
|
||||||
ld [wEventFlags + event_start_byte], a
|
|
||||||
ELSE
|
|
||||||
event_fill_start = event_start_byte + 1
|
|
||||||
event_fill_count = event_end_byte - event_start_byte - 1
|
|
||||||
|
|
||||||
IF ((\1) % 8) == 0
|
|
||||||
event_fill_start = -1 + event_fill_start
|
|
||||||
event_fill_count = 1 + event_fill_count
|
|
||||||
ELSE
|
|
||||||
ld a, [wEventFlags + event_start_byte]
|
|
||||||
and ~($ff - ((1 << ((\1) % 8)) - 1)) & $ff
|
|
||||||
ld [wEventFlags + event_start_byte], a
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
IF ((\2) % 8) == 7
|
|
||||||
event_fill_count = 1 + event_fill_count
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
IF event_fill_count == 1
|
|
||||||
ld hl, wEventFlags + event_fill_start
|
|
||||||
ld [hl], 0
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
IF event_fill_count > 1
|
|
||||||
ld hl, wEventFlags + event_fill_start
|
|
||||||
|
|
||||||
; force xor a if we just to wrote to it above
|
|
||||||
IF (_NARG < 3) || (((\1) % 8) != 0)
|
|
||||||
xor a
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
REPT -1 + event_fill_count
|
|
||||||
ld [hli], a
|
|
||||||
ENDR
|
|
||||||
|
|
||||||
ld [hl], a
|
|
||||||
ENDC
|
|
||||||
|
|
||||||
IF ((\2) % 8) == 0
|
|
||||||
ld hl, wEventFlags + event_end_byte
|
|
||||||
res 0, [hl]
|
|
||||||
ELSE
|
|
||||||
IF ((\2) % 8) != 7
|
|
||||||
ld a, [wEventFlags + event_end_byte]
|
|
||||||
and ~((1 << (((\2) % 8) + 1)) - 1) & $ff
|
|
||||||
ld [wEventFlags + event_end_byte], a
|
|
||||||
ENDC
|
|
||||||
ENDC
|
|
||||||
ENDC
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
; returns whether both events are set in Z flag
|
|
||||||
;\1 = event index 1
|
|
||||||
;\2 = event index 2
|
|
||||||
CheckBothEventsSet: MACRO
|
|
||||||
IF ((\1) / 8) == ((\2) / 8)
|
|
||||||
ld a, [wEventFlags + ((\1) / 8)]
|
|
||||||
and (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
|
||||||
cp (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
|
||||||
ELSE
|
|
||||||
; This case doesn't happen in the original ROM.
|
|
||||||
IF ((\1) % 8) == ((\2) % 8)
|
|
||||||
push hl
|
|
||||||
ld a, [wEventFlags + ((\1) / 8)]
|
|
||||||
ld hl, wEventFlags + ((\2) / 8)
|
|
||||||
and [hl]
|
|
||||||
cpl
|
|
||||||
bit ((\1) % 8), a
|
|
||||||
pop hl
|
|
||||||
ELSE
|
|
||||||
push bc
|
|
||||||
ld a, [wEventFlags + ((\1) / 8)]
|
|
||||||
and (1 << ((\1) % 8))
|
|
||||||
ld b, a
|
|
||||||
ld a, [wEventFlags + ((\2) / 8)]
|
|
||||||
and (1 << ((\2) % 8))
|
|
||||||
or b
|
|
||||||
cp (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
|
||||||
pop bc
|
|
||||||
ENDC
|
|
||||||
ENDC
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
; returns the complement of whether either event is set in Z flag
|
|
||||||
;\1 = event index 1
|
|
||||||
;\2 = event index 2
|
|
||||||
CheckEitherEventSet: MACRO
|
|
||||||
IF ((\1) / 8) == ((\2) / 8)
|
|
||||||
ld a, [wEventFlags + ((\1) / 8)]
|
|
||||||
and (1 << ((\1) % 8)) | (1 << ((\2) % 8))
|
|
||||||
ELSE
|
|
||||||
; This case doesn't happen in the original ROM.
|
|
||||||
IF ((\1) % 8) == ((\2) % 8)
|
|
||||||
push hl
|
|
||||||
ld a, [wEventFlags + ((\1) / 8)]
|
|
||||||
ld hl, wEventFlags + ((\2) / 8)
|
|
||||||
or [hl]
|
|
||||||
bit ((\1) % 8), a
|
|
||||||
pop hl
|
|
||||||
ELSE
|
|
||||||
push bc
|
|
||||||
ld a, [wEventFlags + ((\1) / 8)]
|
|
||||||
and (1 << ((\1) % 8))
|
|
||||||
ld b, a
|
|
||||||
ld a, [wEventFlags + ((\2) / 8)]
|
|
||||||
and (1 << ((\2) % 8))
|
|
||||||
or b
|
|
||||||
pop bc
|
|
||||||
ENDC
|
|
||||||
ENDC
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
; for handling fixed event bits when events are inserted/removed
|
|
||||||
;\1 = event index
|
|
||||||
;\2 = fixed flag bit
|
|
||||||
AdjustEventBit: MACRO
|
|
||||||
IF ((\1) % 8) != (\2)
|
|
||||||
add ((\1) % 8) - (\2)
|
|
||||||
ENDC
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
;\1 = r
|
;\1 = r
|
||||||
;\2 = X
|
;\2 = X
|
||||||
;\3 = Y
|
;\3 = Y
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue