diff options
| author | Rangi <35663410+Rangi42@users.noreply.github.com> | 2026-01-07 22:05:20 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-07 22:05:20 -0500 |
| commit | fe1e76466b293c83e6cd3a7d4639fb3c49da26ad (patch) | |
| tree | aba22f9f595e09024b902c08ddfdac67ee0e85f3 /engine/overworld/missable_objects.asm | |
| parent | Update RGBDS to 1.0.1 (although 1.0.0 still works) (diff) | |
| download | pokeyellow-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.asm | 212 |
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 |
