aboutsummaryrefslogtreecommitdiffstats
path: root/engine/overworld/missable_objects.asm
diff options
context:
space:
mode:
authorRangi <35663410+Rangi42@users.noreply.github.com>2026-01-07 22:05:20 -0500
committerGitHub <noreply@github.com>2026-01-07 22:05:20 -0500
commitfe1e76466b293c83e6cd3a7d4639fb3c49da26ad (patch)
treeaba22f9f595e09024b902c08ddfdac67ee0e85f3 /engine/overworld/missable_objects.asm
parentUpdate RGBDS to 1.0.1 (although 1.0.0 still works) (diff)
downloadpokeyellow-fe1e76466b293c83e6cd3a7d4639fb3c49da26ad.tar.gz
pokeyellow-fe1e76466b293c83e6cd3a7d4639fb3c49da26ad.tar.xz
pokeyellow-fe1e76466b293c83e6cd3a7d4639fb3c49da26ad.zip
Use macros to enforce "missable/hide/show object" constraints, and rename them to "toggleable objects" (#557)
Diffstat (limited to 'engine/overworld/missable_objects.asm')
-rw-r--r--engine/overworld/missable_objects.asm212
1 files changed, 0 insertions, 212 deletions
diff --git a/engine/overworld/missable_objects.asm b/engine/overworld/missable_objects.asm
deleted file mode 100644
index 8ea79980..00000000
--- a/engine/overworld/missable_objects.asm
+++ /dev/null
@@ -1,212 +0,0 @@
-MarkTownVisitedAndLoadMissableObjects::
- ld a, [wCurMap]
- cp FIRST_ROUTE_MAP
- 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]
- ld l, a
- push hl
- ld de, MissableObjects ; calculate difference between out pointer and the base pointer
- ld a, l
- sub e
- jr nc, .noCarry
- dec h
-.noCarry
- ld l, a
- ld a, h
- sub d
- ld h, a
- ld a, h
- ldh [hDividend], a
- ld a, l
- ldh [hDividend+1], a
- xor a
- ldh [hDividend+2], a
- ldh [hDividend+3], a
- ld a, $3
- ldh [hDivisor], 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
- ldh a, [hDividend+3]
- ld c, a ; store global offset in c
- ld de, wMissableObjectList
- pop hl
-.writeMissableObjectsListLoop
- ld a, [hli]
- cp -1
- 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, -1
- ld [de], a ; write sentinel
- ret
-
-InitializeMissableObjectsFlags:
- ld hl, wMissableObjectFlags
- ld bc, wMissableObjectFlagsEnd - wMissableObjectFlags
- xor a
- call FillMemory ; clear missable objects flags
- ld hl, MissableObjects
- xor a
- ld [wMissableObjectCounter], a
-.missableObjectsLoop
- ld a, [hli]
- cp -1 ; 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:
- ldh a, [hCurrentSpriteOffset]
- swap a
- ld b, a
- ld hl, wMissableObjectList
-.loop
- ld a, [hli]
- cp -1
- 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
- ldh [hIsHiddenMissableObject], 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 FLAG_TEST
- 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