# data for checkSetAnimalSavePoint: # source room, animal room, saved y, saved x. 04//animalSavePointTable: | db $c2,$c2,$18,$68 ; spool swamp cave db $29,$2a,$38,$18 ; goron mountain east cave db $8e,$8e,$58,$88 ; cave outside d2 db $87,$86,$48,$68 ; cave north of d1 db $28,$2a,$38,$18 ; goron mountain main db $0f,$2f,$18,$68 ; spring banana cave db $1f,$2f,$18,$68 ; cave below spring banana cave db $9a,$9a,$38,$48 ; rosa portal db $8d,$8d,$38,$38 ; d2 entrance db $ff # if entering certain warps blocked by snow piles, mushrooms, or bushes, set # the animal companion to appear right outside the entrance instead of where # you left them. 04//checkSetAnimalSavePoint: | push bc push de ld a,(wActiveRoom) ld b,a ld a,(wRememberedCompanionRoom) ld c,a ld e,$02 ld hl,animalSavePointTable call searchDoubleKey jr nc,@done ld de,wRememberedCompanionY ldi a,(hl) ld (de),a inc de ld a,(hl) ld (de),a @done: pop de pop bc ld a,(wWarpDestRoom) ret 04/461e/: call checkSetAnimalSavePoint # vanilla game doesn't save non-natzu animal positions when it thinks you # won't need them anymore. stop that. 05/45c9/: jr $28 # do this so that animals don't immediately stop walking onscreen when called # on a bridge, namely the one to/from d1. 05//animalEntryIgnoreBridges: | call $44aa ; _specialObjectGetRelativeTileWithDirectionTable or a ret z cp $1a ret z cp $1b ret 05/493b/: | call animalEntryIgnoreBridges nop 05/71ea/: | call animalEntryIgnoreBridges nop # this is called to make moosh unrideable on mt cucco in the case of not # having flute in a moosh seed. 05//checkFlute: | ld a,TREASURE_FLUTE jp checkTreasureObtained 05/776b/: call checkFlute 05/7a65/: call checkFlute # animals called by flute normally veto any nonzero collision value for the # purposes of entering a screen, but this allows double-wide bridges (1a and # 1b) as well. this specifically fixes the problem of not being able to call # an animal on the d1 screen, or on the bridge to the screen to the right. # the vertical collision check isn't modified, since bridges only run # horizontally. 09//checkFluteCollisions: | ld b,$01 ld a,(hl) cp $1a jr z,@firstTileMatched cp $1b jr z,@firstTileMatched or a ret nz @firstTileMatched: ld a,l add a,b ld l,a ld a,(hl) cp $1a jr z,@secondTileMatched cp $1b jr z,@secondTileMatched or a @secondTileMatched: ld a,l ret nz call convertShortToLongPosition xor a ret 09/4d9a/: call checkFluteCollisions 09/4dad/: call checkFluteCollisions # some of the ricky code here doesn't matter since ricky's flute isn't # currently randomized (6cefde1), but it can stay in case things change. # check flute icon instead of animal region for dimitri events: # spawning dimitri + kids in sunken 09/4e4b/: | ld a,($c6af) cp $02 09/6f07/: | ld a,($c6af) cp $02 09/737d/: | ld a,($c6af) cp $02 # trying to leave sunken w/ dimitri 09/6f34/: | ld a,($c6af) cp $02 # check flute icon instead of animal region for ricky events: # spawn ricky in pen 09/4e76/: | ld a,(wFluteIcon) cp $01 # say goodbye when reaching spool 09/6ccc/: | ld a,(wFluteIcon) cp $01 # prevent subrosian dancing from giving dimitri's flute. 09/5e37/: or $20 # stop ricky from giving his flute. 09/6e6c/: ret 0b/6b77/: | db jumpifmemoryeq dw wAnimalRegion db $7f # prevent holodrum plain from changing the animal region when entered. 09/6f79/: jr $08 # remove the moosh and dimitri events in spool swamp. 11/6572/: db $ff 11/68d4/: db $ff # add proper treasure entries for each flute, like ages has. 15//fluteTreasureData: | db $0a,$0b,$38,$3c db $0a,$0c,$39,$3d db $0a,$0d,$3a,$3e 15/5161/: | db $80 dw fluteTreasureData db $00