diff options
Diffstat (limited to 'engine/events.asm')
-rw-r--r-- | engine/events.asm | 1108 |
1 files changed, 1108 insertions, 0 deletions
diff --git a/engine/events.asm b/engine/events.asm new file mode 100644 index 000000000..569f5b8c9 --- /dev/null +++ b/engine/events.asm @@ -0,0 +1,1108 @@ +Function966b0: ; 966b0 + xor a + ld [$d432], a +.asm_966b4 + ld a, [$d432] + ld hl, .pointers + rst JumpTable + ld a, [$d432] + cp 3 ; done + jr nz, .asm_966b4 +.done + ret + +.pointers + dw Function96724 + dw Function9673e + dw Function96773 + 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 + + +Function96724: ; 96724 + xor a + ld [ScriptVar], a + xor a + ld [ScriptRunning], a + ld hl, $d432 + ld bc, $3e + call ByteFill + callba Function113e5 + call ClearJoypadPublic + ; fallthrough +; 9673e + + +Function9673e: ; 9673e + xor a + ld [$d453], a + ld [$d454], a + call Function968d1 + callba Function15363 + 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 + ld [$d432], a + ret +; 9676d + + +Function9676d: ; 9676d + ld c, 30 + call DelayFrames + ret +; 96773 + + +Function96773: ; 96773 + call ResetOverworldDelay + call Function967c1 + callba Function97e08 + call DoEvents + ld a, [$d432] + cp 2 + ret nz + call Function967d1 + call NextOverworldFrame + call Function967e1 + call Function967f4 + ret +; 96795 + + +DoEvents: ; 96795 + ld a, [$d433] + ld hl, .pointers + rst JumpTable + ret + +.pointers + dw Function967a1 + dw Function967ae +; 967a1 + +Function967a1: ; 967a1 + call PlayerEvents + call Function966cb + callba ScriptEvents + ret +; 967ae + +Function967ae: ; 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, [$d433] + cp 1 + ret z + call UpdateTime + call GetJoypadPublic + 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 + ld [$d433], a + ret + +.asm_9680c + ld a, $1 + ld [$d433], 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, $4 + ld hl, $75f8 + 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, $4 + ld hl, $7625 + 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, $4 + ld hl, $653d + 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 BANK(StartMenu), StartMenu + 2jump StartMenuCallback +; 96b5f + +SelectMenuScript: ; 96b5f + 3callasm BANK(SelectMenu), 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, $4 + ld hl, $7619 + 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 $05, $6f5e + 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 BANK(Function96706), Function96706 + end +; 96c56 + |