ref: baf50317d355b1dcc65eef10cbf750f8567be340
dir: /engine/events.asm/
INCLUDE "includes.asm" SECTION "Events", ROMX, BANK[EVENTS] OverworldLoop:: ; 966b0 xor a ld [MapStatus], a .loop ld a, [MapStatus] ld hl, .jumps rst JumpTable ld a, [MapStatus] cp 3 ; done jr nz, .loop .done ret .jumps dw StartMap dw EnterMap dw HandleMap dw .done ; 966cb Function966cb: ; 966cb xor a ld [ScriptFlags3], a ret ; 966d0 Function966d0:: ; 966d0 ld a, $ff ld [ScriptFlags3], a ret ; 966d6 Function966d6: ; 966d6 ld hl, ScriptFlags3 bit 5, [hl] ret ; 966dc Function966dc: ; 966dc ld hl, ScriptFlags3 res 2, [hl] ret ; 966e2 Function966e2: ; 966e2 ld hl, ScriptFlags3 res 1, [hl] ret ; 966e8 Function966e8: ; 966e8 ld hl, ScriptFlags3 res 0, [hl] ret ; 966ee Function966ee: ; 966ee ld hl, ScriptFlags3 res 4, [hl] ret ; 966f4 Function966f4: ; 966f4 ld hl, ScriptFlags3 set 2, [hl] ret ; 966fa Function966fa: ; 966fa ld hl, ScriptFlags3 set 1, [hl] ret ; 96700 Function96700: ; 96700 ld hl, ScriptFlags3 set 0, [hl] ret ; 96706 Function96706: ; 96706 ld hl, ScriptFlags3 set 4, [hl] ret ; 9670c Function9670c: ; 9670c ld hl, ScriptFlags3 bit 2, [hl] ret ; 96712 Function96712: ; 96712 ld hl, ScriptFlags3 bit 1, [hl] ret ; 96718 Function96718: ; 96718 ld hl, ScriptFlags3 bit 0, [hl] ret ; 9671e Function9671e: ; 9671e ld hl, ScriptFlags3 bit 4, [hl] ret ; 96724 StartMap: ; 96724 xor a ld [ScriptVar], a xor a ld [ScriptRunning], a ld hl, MapStatus ld bc, $3e call ByteFill callba Function113e5 call ClearJoypad ; fallthrough ; 9673e EnterMap: ; 9673e xor a ld [$d453], a ld [$d454], a call Function968d1 callba RunMapSetupScript call Function966cb ld a, [$ff9f] cp $f7 jr nz, .asm_9675a call Function966d0 .asm_9675a ld a, [$ff9f] cp $f3 jr nz, .asm_96764 xor a ld [PoisonStepCount], a .asm_96764 xor a ld [$ff9f], a ld a, 2 ; HandleMap ld [MapStatus], a ret ; 9676d Function9676d: ; 9676d ld c, 30 call DelayFrames ret ; 96773 HandleMap: ; 96773 call ResetOverworldDelay call Function967c1 callba Function97e08 call MapEvents ; Not immediately entering a connected map will cause problems. ld a, [MapStatus] cp 2 ; HandleMap ret nz call Function967d1 call NextOverworldFrame call Function967e1 call Function967f4 ret ; 96795 MapEvents: ; 96795 ld a, [MapEventStatus] ld hl, .jumps rst JumpTable ret .jumps dw .events dw .no_events ; 967a1 .events ; 967a1 call PlayerEvents call Function966cb callba ScriptEvents ret ; 967ae .no_events ; 967ae ret ; 967af MaxOverworldDelay: ; 967af db 2 ; 967b0 ResetOverworldDelay: ; 967b0 ld a, [MaxOverworldDelay] ld [OverworldDelay], a ret ; 967b7 NextOverworldFrame: ; 967b7 ld a, [OverworldDelay] and a ret z ld c, a call DelayFrames ret ; 967c1 Function967c1: ; 967c1 ld a, [MapEventStatus] cp 1 ; no events ret z call UpdateTime call GetJoypad call TimeOfDayPals ret ; 967d1 Function967d1: ; 967d1 callba Function576a callba Functiond497 call Function96812 ret ; 967e1 Function967e1: ; 967e1 callba Function5920 callba Functiond4d2 callba Functionb8098 ret ; 967f4 Function967f4: ; 967f4 ld a, [$d150] bit 5, a jr z, .asm_96806 bit 6, a jr z, .asm_9680c bit 4, a jr nz, .asm_9680c call Function966d0 .asm_96806 ld a, 0 ; events ld [MapEventStatus], a ret .asm_9680c ld a, 1 ; no events ld [MapEventStatus], a ret ; 96812 Function96812: ; 96812 ld hl, $d150 bit 6, [hl] ret z callba Function81ca ret ; 9681f PlayerEvents: ; 9681f xor a ld a, [ScriptRunning] and a ret nz call Function968e4 call CheckTrainerBattle3 jr c, .asm_96848 call CheckTileEvent jr c, .asm_96848 call Function97c30 jr c, .asm_96848 call Function968ec jr c, .asm_96848 call Function9693a jr c, .asm_96848 call OWPlayerInput jr c, .asm_96848 xor a ret .asm_96848 push af callba Function96c56 pop af ld [ScriptRunning], a call Function96beb ld a, [ScriptRunning] cp 4 jr z, .asm_96865 cp 9 jr z, .asm_96865 xor a ld [$c2da], a .asm_96865 scf ret ; 96867 CheckTrainerBattle3: ; 96867 nop nop call CheckTrainerBattle2 jr nc, .asm_96872 ld a, 1 scf ret .asm_96872 xor a ret ; 96874 CheckTileEvent: ; 96874 ; Check for warps, tile triggers or wild battles. call Function9670c jr z, .asm_96886 callba Function104820 jr c, .asm_968a6 call Function2238 jr c, .asm_968aa .asm_96886 call Function96712 jr z, .asm_96890 call Function2ad4 jr c, .asm_968ba .asm_96890 call Function96718 jr z, .asm_96899 call CountStep ret c .asm_96899 call Function9671e jr z, .asm_968a4 call Function97cc0 ret c jr .asm_968a4 .asm_968a4 xor a ret .asm_968a6 ld a, 4 scf ret .asm_968aa ld a, [StandingTile] call CheckPitTile jr nz, .asm_968b6 ld a, 6 scf ret .asm_968b6 ld a, 5 scf ret .asm_968ba ld hl, MovementAnimation ld a, [hli] ld h, [hl] ld l, a call GetMapScriptHeaderBank call CallScript ret ; 968c7 Function968c7:: ; 968c7 ld hl, $d452 ld a, [hl] and a ret z dec [hl] ret z scf ret ; 968d1 Function968d1: ; 968d1 ld a, 5 ld [$d452], a ret ; 968d7 Function968d7: ; 968d7 ret ; 968d8 Function968d8: ; 968d8 ld a, [$d452] cp 2 ret nc ld a, 2 ld [$d452], a ret ; 968e4 Function968e4: ; 968e4 call Function966d6 ret z call Function2f3e ret ; 968ec Function968ec: ; 968ec ld a, [$dc07] and a jr z, .asm_96938 ld c, a call Function211b cp c jr nc, .asm_96938 ld e, a ld d, 0 ld hl, $dc08 ld a, [hli] ld h, [hl] ld l, a add hl, de add hl, de add hl, de add hl, de call GetMapScriptHeaderBank call GetFarHalfword call GetMapScriptHeaderBank call CallScript ld hl, ScriptFlags res 3, [hl] callba Function96c56 callba ScriptEvents ld hl, ScriptFlags bit 3, [hl] jr z, .asm_96938 ld hl, $d44f ld a, [hli] ld h, [hl] ld l, a ld a, [$d44e] call CallScript scf ret .asm_96938 xor a ret ; 9693a Function9693a: ; 9693a ld a, [InLinkBattle] and a jr nz, .asm_96964 ld hl, StatusFlags2 bit 2, [hl] jr z, .asm_96951 callba Function114a4 jr c, .asm_96966 xor a ret .asm_96951 callba Function11452 callba Function114e7 callba Function90074 ret c .asm_96964 xor a ret .asm_96966 ld a, BANK(UnknownScript_0x135f8) ld hl, UnknownScript_0x135f8 call CallScript scf ret ; 96970 Function96970: ; 96970 ld a, 8 scf ret ; 96974 OWPlayerInput: ; 96974 call PlayerMovement ret c and a jr nz, .NoAction ; Can't perform button actions while sliding on ice. callba Function80404 jr c, .NoAction call CheckAPressOW jr c, .Action call CheckMenuOW jr c, .Action .NoAction xor a ret .Action push af callba Function80422 pop af scf ret ; 96999 CheckAPressOW: ; 96999 ld a, [hJoyPressed] and A_BUTTON ret z call TryObjectEvent ret c call TryReadSign ret c call Function97c5f ret c xor a ret ; 969ac PlayTalkObject: ; 969ac push de ld de, SFX_READ_TEXT_2 call PlaySFX pop de ret ; 969b5 TryObjectEvent: ; 969b5 callba CheckFacingObject jr c, .IsObject xor a ret .IsObject call PlayTalkObject ld a, [hConnectedMapWidth] call Function1ae5 ld hl, $0001 add hl, bc ld a, [hl] ld [$ffe0], a ld a, [$ffe0] call GetMapObject ld hl, $0008 add hl, bc ld a, [hl] and $f ; Bug: If IsInArray returns nc, data at bc will be executed as code. push bc ld de, 3 ld hl, .data_969ee call IsInArray jr nc, .asm_969ec pop bc inc hl ld a, [hli] ld h, [hl] ld l, a jp [hl] .asm_969ec xor a ret .data_969ee dbw 0, .zero dbw 1, .one dbw 2, .two dbw 3, .three dbw 4, .four dbw 5, .five dbw 6, .six db $ff ; 96a04 .zero ; 96a04 ld hl, $000a add hl, bc ld a, [hli] ld h, [hl] ld l, a call GetMapScriptHeaderBank call CallScript ; ld a, -1 ret ; 96a12 .one ; 96a12 ld hl, $000a add hl, bc ld a, [hli] ld h, [hl] ld l, a call GetMapScriptHeaderBank ld de, EngineBuffer1 ld bc, 2 call FarCopyBytes ld a, 3 scf ret ; 96a29 .two ; 96a29 call Function3674 ld a, 2 scf ret ; 96a30 .three ; 96a30 xor a ret ; 96a32 .four ; 96a32 xor a ret ; 96a34 .five ; 96a34 xor a ret ; 96a36 .six ; 96a36 xor a ret ; 96a38 TryReadSign: ; 96a38 call CheckFacingSign jr c, .IsSign xor a ret .IsSign ld a, [MartPointer] ld hl, .signs rst JumpTable ret .signs dw .read dw .up dw .down dw .right dw .left dw .ifset dw .ifnotset dw .itemifset dw .asm_96aa2 ; 96a59 .up ld b, UP << 2 jr .checkdir .down ld b, DOWN << 2 jr .checkdir .right ld b, RIGHT << 2 jr .checkdir .left ld b, LEFT << 2 jr .checkdir .checkdir ld a, [PlayerDirection] and %1100 cp b jp nz, .dontread .read call PlayTalkObject ld hl, $d041 ld a, [hli] ld h, [hl] ld l, a call GetMapScriptHeaderBank call CallScript scf ret .itemifset call CheckSignFlag jp nz, .dontread call PlayTalkObject call GetMapScriptHeaderBank ld de, EngineBuffer1 ld bc, 3 call FarCopyBytes ld a, BANK(UnknownScript_0x13625) ld hl, UnknownScript_0x13625 call CallScript scf ret .asm_96aa2 call CheckSignFlag jr nz, .dontread call GetMapScriptHeaderBank ld de, EngineBuffer1 ld bc, 3 call FarCopyBytes jr .dontread .ifset call CheckSignFlag jr z, .dontread jr .asm_96ac1 .ifnotset call CheckSignFlag jr nz, .dontread .asm_96ac1 push hl call PlayTalkObject pop hl inc hl inc hl call GetMapScriptHeaderBank call GetFarHalfword call GetMapScriptHeaderBank call CallScript scf ret .dontread xor a ret ; 96ad8 CheckSignFlag: ; 96ad8 ld hl, $d041 ld a, [hli] ld h, [hl] ld l, a push hl call GetMapScriptHeaderBank call GetFarHalfword ld e, l ld d, h ld b, $2 call EventFlagAction ld a, c and a pop hl ret ; 96af0 PlayerMovement: ; 96af0 callba DoPlayerMovement ld a, c ld hl, .pointers rst JumpTable ld a, c ret ; 96afd .pointers dw .zero dw .one dw .two dw .three dw .four dw .five dw .six dw .seven .zero .four ; 96b0d xor a ld c, a ret ; 96b10 .seven ; 96b10 call Function968d7 ; empty xor a ld c, a ret ; 96b16 .one ; 96b16 ld a, 5 ld c, a scf ret ; 96b1b .two ; 96b1b ld a, 9 ld c, a scf ret ; 96b20 .three ; 96b20 ; force the player to move in some direction ld a, BANK(UnknownScript_0x1253d) ld hl, UnknownScript_0x1253d call CallScript ; ld a, -1 ld c, a scf ret ; 96b2b .five .six ; 96b2b ld a, -1 ld c, a and a ret ; 96b30 CheckMenuOW: ; 96b30 xor a ld [$ffa0], a ld [$ffa1], a ld a, [hJoyPressed] bit 2, a ; SELECT jr nz, .Select bit 3, a ; START jr z, .NoMenu ld a, BANK(StartMenuScript) ld hl, StartMenuScript call CallScript scf ret .NoMenu xor a ret .Select call PlayTalkObject ld a, BANK(SelectMenuScript) ld hl, SelectMenuScript call CallScript scf ret ; 96b58 StartMenuScript: ; 96b58 3callasm StartMenu 2jump StartMenuCallback ; 96b5f SelectMenuScript: ; 96b5f 3callasm SelectMenu 2jump SelectMenuCallback ; 96b66 StartMenuCallback: SelectMenuCallback: ; 96b66 copybytetovar $ffa0 if_equal $80, .Script if_equal $ff, .Asm end ; 96b72 .Script ; 96b72 2ptjump $d0e8 ; 96b75 .Asm ; 96b75 2ptcallasm $d0e8 end ; 96b79 CountStep: ; 96b79 ld a, [InLinkBattle] and a jr nz, .asm_96bc9 callba Function90136 jr c, .asm_96bcb call Function96bd7 jr c, .asm_96bcb ld hl, PoisonStepCount inc [hl] ld hl, StepCount inc [hl] jr nz, .asm_96b9c callba StepHappiness .asm_96b9c ld a, [StepCount] cp $80 jr nz, .asm_96bab callba Function16f3e jr nz, .asm_96bcf .asm_96bab callba DaycareStep ld hl, PoisonStepCount ld a, [hl] cp 4 jr c, .asm_96bc3 ld [hl], 0 callba Function505da jr c, .asm_96bcb .asm_96bc3 callba Function97db3 .asm_96bc9 xor a ret .asm_96bcb ld a, -1 scf ret .asm_96bcf ld a, 8 scf ret ; 96bd3 Function96bd3: ; 96bd3 ld a, $7 scf ret ; 96bd7 Function96bd7: ; 96bd7 ld a, [$dca1] and a ret z dec a ld [$dca1], a ret nz ld a, BANK(UnknownScript_0x13619) ld hl, UnknownScript_0x13619 call CallScript scf ret ; 96beb Function96beb: ; 96beb ld a, [ScriptRunning] and a ret z cp $ff ret z cp $a ret nc ld c, a ld b, 0 ld hl, ScriptPointers96c0c add hl, bc add hl, bc add hl, bc ld a, [hli] ld [ScriptBank], a ld a, [hli] ld [ScriptPos], a ld a, [hl] ld [ScriptPos + 1], a ret ; 96c0c ScriptPointers96c0c: ; 96c0c dbw BANK(UnknownScript_0x96c2d), UnknownScript_0x96c2d dbw BANK(UnknownScript_0xbe675), UnknownScript_0xbe675 dbw BANK(UnknownScript_0xbe66a), UnknownScript_0xbe66a dbw BANK(UnknownScript_0x122ce), UnknownScript_0x122ce dbw BANK(UnknownScript_0x96c4d), UnknownScript_0x96c4d dbw BANK(UnknownScript_0x96c34), UnknownScript_0x96c34 dbw BANK(FallIntoMapScript), FallIntoMapScript dbw BANK(UnknownScript_0x124c8), UnknownScript_0x124c8 dbw BANK(UnknownScript_0x96c2f), UnknownScript_0x96c2f dbw BANK(UnknownScript_0x96c4f), UnknownScript_0x96c4f dbw BANK(UnknownScript_0x96c2d), UnknownScript_0x96c2d ; 96c2d UnknownScript_0x96c2d: ; 96c2d end ; 96c2e UnknownScript_0x96c2e: ; 96c2e end ; 96c2f UnknownScript_0x96c2f: ; 96c2f 3callasm Function16f5e end ; 96c34 UnknownScript_0x96c34: ; 96c34 warpsound newloadmap $f5 end ; 96c38 FallIntoMapScript: ; 96c38 newloadmap $f6 playsound SFX_KINESIS applymovement $0, MovementData_0x96c48 playsound SFX_STRENGTH 2call UnknownScript_0x96c4a end ; 96c48 MovementData_0x96c48: ; 96c48 skyfall step_end ; 96c4a UnknownScript_0x96c4a: ; 96c4a earthquake 16 end ; 96c4d UnknownScript_0x96c4d: ; 96c4d reloadandreturn $f7 ; 96c4f UnknownScript_0x96c4f: ; 96c4f deactivatefacing $3 3callasm Function96706 end ; 96c56