mirror of
https://github.com/thornAvery/kep-hack.git
synced 2026-02-06 15:45:24 +13:00
split code out of main.asm
This commit is contained in:
parent
10289bf7dd
commit
bf67f7174d
22 changed files with 2671 additions and 2675 deletions
215
engine/overworld/missable_objects.asm
Normal file
215
engine/overworld/missable_objects.asm
Normal file
|
|
@ -0,0 +1,215 @@
|
|||
MarkTownVisitedAndLoadMissableObjects:
|
||||
ld a, [wCurMap]
|
||||
cp ROUTE_1
|
||||
jr nc, .notInTown
|
||||
ld c, a
|
||||
ld b, FLAG_SET
|
||||
ld hl, wTownVisitedFlag ; mark town as visited (for flying)
|
||||
predef FlagActionPredef
|
||||
.notInTown
|
||||
ld hl, MapHSPointers
|
||||
ld a, [wCurMap]
|
||||
ld b, $0
|
||||
ld c, a
|
||||
add hl, bc
|
||||
add hl, bc
|
||||
ld a, [hli] ; load missable objects pointer in hl
|
||||
ld h, [hl]
|
||||
; fall through
|
||||
|
||||
LoadMissableObjects:
|
||||
ld l, a
|
||||
push hl
|
||||
ld de, MapHS00 ; calculate difference between out pointer and the base pointer
|
||||
ld a, l
|
||||
sub e
|
||||
jr nc, .asm_f13c
|
||||
dec h
|
||||
.asm_f13c
|
||||
ld l, a
|
||||
ld a, h
|
||||
sub d
|
||||
ld h, a
|
||||
ld a, h
|
||||
ld [H_DIVIDEND], a
|
||||
ld a, l
|
||||
ld [H_DIVIDEND+1], a
|
||||
xor a
|
||||
ld [H_DIVIDEND+2], a
|
||||
ld [H_DIVIDEND+3], a
|
||||
ld a, $3
|
||||
ld [H_DIVISOR], a
|
||||
ld b, $2
|
||||
call Divide ; divide difference by 3, resulting in the global offset (number of missable items before ours)
|
||||
ld a, [wCurMap]
|
||||
ld b, a
|
||||
ld a, [H_DIVIDEND+3]
|
||||
ld c, a ; store global offset in c
|
||||
ld de, wMissableObjectList
|
||||
pop hl
|
||||
.writeMissableObjectsListLoop
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
jr z, .done ; end of list
|
||||
cp b
|
||||
jr nz, .done ; not for current map anymore
|
||||
ld a, [hli]
|
||||
inc hl
|
||||
ld [de], a ; write (map-local) sprite ID
|
||||
inc de
|
||||
ld a, c
|
||||
inc c
|
||||
ld [de], a ; write (global) missable object index
|
||||
inc de
|
||||
jr .writeMissableObjectsListLoop
|
||||
.done
|
||||
ld a, $ff
|
||||
ld [de], a ; write sentinel
|
||||
ret
|
||||
|
||||
InitializeMissableObjectsFlags:
|
||||
ld hl, wMissableObjectFlags
|
||||
ld bc, wMissableObjectFlagsEnd - wMissableObjectFlags
|
||||
xor a
|
||||
call FillMemory ; clear missable objects flags
|
||||
ld hl, MapHS00
|
||||
xor a
|
||||
ld [wMissableObjectCounter], a
|
||||
.missableObjectsLoop
|
||||
ld a, [hli]
|
||||
cp $ff ; end of list
|
||||
ret z
|
||||
push hl
|
||||
inc hl
|
||||
ld a, [hl]
|
||||
cp Hide
|
||||
jr nz, .skip
|
||||
ld hl, wMissableObjectFlags
|
||||
ld a, [wMissableObjectCounter]
|
||||
ld c, a
|
||||
ld b, FLAG_SET
|
||||
call MissableObjectFlagAction ; set flag if Item is hidden
|
||||
.skip
|
||||
ld hl, wMissableObjectCounter
|
||||
inc [hl]
|
||||
pop hl
|
||||
inc hl
|
||||
inc hl
|
||||
jr .missableObjectsLoop
|
||||
|
||||
; tests if current sprite is a missable object that is hidden/has been removed
|
||||
IsObjectHidden:
|
||||
ld a, [H_CURRENTSPRITEOFFSET]
|
||||
swap a
|
||||
ld b, a
|
||||
ld hl, wMissableObjectList
|
||||
.loop
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
jr z, .notHidden ; not missable -> not hidden
|
||||
cp b
|
||||
ld a, [hli]
|
||||
jr nz, .loop
|
||||
ld c, a
|
||||
ld b, FLAG_TEST
|
||||
ld hl, wMissableObjectFlags
|
||||
call MissableObjectFlagAction
|
||||
ld a, c
|
||||
and a
|
||||
jr nz, .hidden
|
||||
.notHidden
|
||||
xor a
|
||||
.hidden
|
||||
ld [$ffe5], a
|
||||
ret
|
||||
|
||||
; adds missable object (items, leg. pokemon, etc.) to the map
|
||||
; [wMissableObjectIndex]: index of the missable object to be added (global index)
|
||||
ShowObject:
|
||||
ShowObject2:
|
||||
ld hl, wMissableObjectFlags
|
||||
ld a, [wMissableObjectIndex]
|
||||
ld c, a
|
||||
ld b, FLAG_RESET
|
||||
call MissableObjectFlagAction ; reset "removed" flag
|
||||
jp UpdateSprites
|
||||
|
||||
; removes missable object (items, leg. pokemon, etc.) from the map
|
||||
; [wMissableObjectIndex]: index of the missable object to be removed (global index)
|
||||
HideObject:
|
||||
ld hl, wMissableObjectFlags
|
||||
ld a, [wMissableObjectIndex]
|
||||
ld c, a
|
||||
ld b, FLAG_SET
|
||||
call MissableObjectFlagAction ; set "removed" flag
|
||||
jp UpdateSprites
|
||||
|
||||
MissableObjectFlagAction:
|
||||
; identical to FlagAction
|
||||
|
||||
push hl
|
||||
push de
|
||||
push bc
|
||||
|
||||
; bit
|
||||
ld a, c
|
||||
ld d, a
|
||||
and 7
|
||||
ld e, a
|
||||
|
||||
; byte
|
||||
ld a, d
|
||||
srl a
|
||||
srl a
|
||||
srl a
|
||||
add l
|
||||
ld l, a
|
||||
jr nc, .ok
|
||||
inc h
|
||||
.ok
|
||||
|
||||
; d = 1 << e (bitmask)
|
||||
inc e
|
||||
ld d, 1
|
||||
.shift
|
||||
dec e
|
||||
jr z, .shifted
|
||||
sla d
|
||||
jr .shift
|
||||
.shifted
|
||||
|
||||
ld a, b
|
||||
and a
|
||||
jr z, .reset
|
||||
cp 2
|
||||
jr z, .read
|
||||
|
||||
.set
|
||||
ld a, [hl]
|
||||
ld b, a
|
||||
ld a, d
|
||||
or b
|
||||
ld [hl], a
|
||||
jr .done
|
||||
|
||||
.reset
|
||||
ld a, [hl]
|
||||
ld b, a
|
||||
ld a, d
|
||||
xor $ff
|
||||
and b
|
||||
ld [hl], a
|
||||
jr .done
|
||||
|
||||
.read
|
||||
ld a, [hl]
|
||||
ld b, a
|
||||
ld a, d
|
||||
and b
|
||||
|
||||
.done
|
||||
pop bc
|
||||
pop de
|
||||
pop hl
|
||||
ld c, a
|
||||
ret
|
||||
Loading…
Add table
Add a link
Reference in a new issue