split more event handling out of main

This commit is contained in:
yenatch 2013-11-23 02:33:53 -05:00
parent 8bb8546497
commit 29afa24f0b
2 changed files with 644 additions and 646 deletions

643
engine/events_2.asm Normal file
View File

@ -0,0 +1,643 @@
; More overworld event handling.
Function97c28: ; 97c28
ld hl, StatusFlags2
res 1, [hl]
res 2, [hl]
ret
; 97c30
Function97c30: ; 97c30
ld a, [$d45c]
and a
ret z
ld hl, $d45e
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [$d45d]
call CallScript
scf
push af
xor a
ld hl, $d45c
ld bc, 8
call ByteFill
pop af
ret
; 97c4f
Function97c4f: ; 97c4f
ld hl, $d45c
ld a, [hl]
and a
ret nz
ld [hl], 1
inc hl
ld [hl], b
inc hl
ld [hl], e
inc hl
ld [hl], d
scf
ret
; 97c5f
Function97c5f: ; 97c5f
call GetFacingTileCoord
ld [EngineBuffer1], a
ld c, a
callba Function1365b
jr c, .asm_97cb9
call CheckCutTreeTile
jr nz, .whirlpool
callba TryCutOW
jr .asm_97cb9
.whirlpool
ld a, [EngineBuffer1]
call CheckWhirlpoolTile
jr nz, .waterfall
callba TryWhirlpoolOW
jr .asm_97cb9
.waterfall
ld a, [EngineBuffer1]
call CheckWaterfallTile
jr nz, .headbutt
callba TryWaterfallOW
jr .asm_97cb9
.headbutt
ld a, [EngineBuffer1]
call CheckHeadbuttTreeTile
jr nz, .surf
callba TryHeadbuttOW
jr c, .asm_97cb9
jr .asm_97cb7
.surf
callba TrySurfOW
jr nc, .asm_97cb7
jr .asm_97cb9
.asm_97cb7
xor a
ret
.asm_97cb9
call PlayClickSFX
ld a, $ff
scf
ret
; 97cc0
Function97cc0: ; 97cc0
; Rock Smash encounter
call Function968c7
jr c, .asm_97ce2
call Function97cfd
jr nc, .asm_97ce2
ld hl, StatusFlags2
bit 2, [hl]
jr nz, .asm_97cdb
callba Function2a0e7
jr nz, .asm_97ce2
jr .asm_97ce6
.asm_97cdb
call Function97d23
jr nc, .asm_97ce2
jr .asm_97ced
.asm_97ce2
ld a, 1
and a
ret
.asm_97ce6
ld a, BANK(RockSmashBattleScript)
ld hl, RockSmashBattleScript
jr .asm_97cf4
.asm_97ced
ld a, BANK(UnknownScript_0x135eb)
ld hl, UnknownScript_0x135eb
jr .asm_97cf4
.asm_97cf4
call CallScript
scf
ret
; 97cf9
RockSmashBattleScript: ; 97cf9
battlecheck
startbattle
returnafterbattle
end
; 97cfd
Function97cfd: ; 97cfd
ld hl, StatusFlags
bit 5, [hl]
jr nz, .asm_97d21
ld a, [$d19a]
cp $4
jr z, .asm_97d17
cp $7
jr z, .asm_97d17
callba Function149dd
jr nc, .asm_97d21
.asm_97d17
ld a, [StandingTile]
call CheckIceTile
jr z, .asm_97d21
scf
ret
.asm_97d21
and a
ret
; 97d23
Function97d23: ; 97d23
call Function97d64
ret nc
call Function97d31
callba Function2a1df
ret
; 97d31
Function97d31: ; 97d31
; Pick a random mon out of ContestMons.
.asm_97d31
call Random
cp 100 << 1
jr nc, .asm_97d31
srl a
ld hl, ContestMons
ld de, 4
.CheckMon
sub [hl]
jr c, .GotMon
add hl, de
jr .CheckMon
.GotMon
inc hl
; Species
ld a, [hli]
ld [$d22e], a
; Min level
ld a, [hli]
ld d, a
; Max level
ld a, [hl]
sub d
jr nz, .RandomLevel
; If min and max are the same.
ld a, d
jr .GotLevel
.RandomLevel
; Get a random level between the min and max.
ld c, a
inc c
call Random
ld a, [hRandomAdd]
call SimpleDivide
add d
.GotLevel
ld [CurPartyLevel], a
xor a
ret
; 97d64
Function97d64: ; 97d64
ld a, [StandingTile]
call Function188e
ld b, $66
jr z, .asm_97d70
ld b, $33
.asm_97d70
callba Function2a124
callba Function2a138
call Random
ld a, [hRandomAdd]
cp b
ret c
ld a, 1
and a
ret
; 97d87
ContestMons: ; 97d87
; %, species, min, max
db 20, CATERPIE, 7, 18
db 20, WEEDLE, 7, 18
db 10, METAPOD, 9, 18
db 10, KAKUNA, 9, 18
db 5, BUTTERFREE, 12, 15
db 5, BEEDRILL, 12, 15
db 10, VENONAT, 10, 16
db 10, PARAS, 10, 17
db 5, SCYTHER, 13, 14
db 5, PINSIR, 13, 14
db -1, VENOMOTH, 30, 40
; 97db3
Function97db3: ; 97db3
nop
nop
; fallthrough
; 97db5
Function97db5: ; 97db5
ld hl, StatusFlags2
bit 4, [hl]
jr z, .asm_97df7
ld a, [PlayerState]
cp $1
jr nz, .asm_97df7
call Function2d05
and a
jr nz, .asm_97df7
ld hl, $dca2
ld a, [hli]
ld d, a
ld e, [hl]
cp $ff
jr nz, .asm_97dd8
ld a, e
cp $ff
jr z, .asm_97ddc
.asm_97dd8
inc de
ld [hl], e
dec hl
ld [hl], d
.asm_97ddc
ld a, d
cp $4
jr c, .asm_97df7
ld a, [$dc31]
and a
jr nz, .asm_97df7
ld a, $6
ld [$dc31], a
xor a
ld [$dc32], a
ld hl, StatusFlags2
res 4, [hl]
scf
ret
.asm_97df7
xor a
ret
; 97df9
Function97df9: ; 97df9
ld hl, $d6de
ld de, $0006
ld c, $4
xor a
.asm_97e02
ld [hl], a
add hl, de
dec c
jr nz, .asm_97e02
ret
; 97e08
Function97e08: ; 97e08
ld hl, $d6de
xor a
.asm_97e0c
ld [hConnectionStripLength], a
ld a, [hl]
and a
jr z, .asm_97e19
push hl
ld b, h
ld c, l
call Function97e79
pop hl
.asm_97e19
ld de, $0006
add hl, de
ld a, [hConnectionStripLength]
inc a
cp $4
jr nz, .asm_97e0c
ret
; 97e25
Function97e25: ; 97e25
ld hl, $d6de
ld bc, 6
call AddNTimes
ld b, h
ld c, l
ret
; 97e31
Function97e31: ; 97e31
push bc
push de
call Function97e45
ld d, h
ld e, l
pop hl
pop bc
ret c
ld a, b
ld bc, $0005
call FarCopyBytes
xor a
ld [hl], a
ret
; 97e45
Function97e45: ; 97e45
ld hl, $d6de
ld de, $0006
ld c, $4
.asm_97e4d
ld a, [hl]
and a
jr z, .asm_97e57
add hl, de
dec c
jr nz, .asm_97e4d
scf
ret
.asm_97e57
ld a, $4
sub c
and a
ret
; 97e5c
Function97e5c: ; 97e5c
ld hl, $d6de
ld de, $0006
ld c, $4
.asm_97e64
ld a, [hl]
cp b
jr z, .asm_97e6e
add hl, de
dec c
jr nz, .asm_97e64
and a
ret
.asm_97e6e
xor a
ld [hl], a
scf
ret
; 97e72
Function97e72: ; 97e72
ld hl, $0000
add hl, bc
ld [hl], 0
ret
; 97e79
Function97e79: ; 97e79
ld hl, $0000
add hl, bc
ld a, [hl]
cp 5
jr c, .asm_97e83
xor a
.asm_97e83
ld e, a
ld d, 0
ld hl, Table97e94
add hl, de
add hl, de
add hl, de
ld a, [hli]
push af
ld a, [hli]
ld h, [hl]
ld l, a
pop af
rst FarCall
ret
; 97e94
Table97e94: ; 97e94
dbw BANK(Function97eb7), Function97eb7
dbw BANK(Function97eb8), Function97eb8
dbw BANK(Function97f42), Function97f42
dbw BANK(Function97ef9), Function97ef9
dbw BANK(Function97ebc), Function97ebc
; 97ea3
Function97ea3: ; 97ea3
ld hl, $0005
add hl, bc
ld a, [hl]
pop hl
rst JumpTable
ret
; 97eab
Function97eab: ; 97eab
ld hl, $0005
add hl, bc
inc [hl]
ret
; 97eb1
Function97eb1: ; 97eb1
ld hl, $0005
add hl, bc
dec [hl]
ret
; 97eb7
Function97eb7: ; 97eb7
ret
; 97eb8
Function97eb8: ; 97eb8
call Function2f3e
ret
; 97ebc
Function97ebc: ; 97ebc
call Function97ea3
dw Function97ec3
dw Function97ecd
; 97ec3
Function97ec3: ; 97ec3
ld a, [hSCY]
ld hl, $0004
add hl, bc
ld [hl], a
call Function97eab
; 97ecd
Function97ecd: ; 97ecd
ld hl, $0001
add hl, bc
ld a, [hl]
dec a
ld [hl], a
jr z, .asm_97eee
and $1
jr z, .asm_97ee4
ld hl, $0002
add hl, bc
ld a, [hSCY]
sub [hl]
ld [hSCY], a
ret
.asm_97ee4
ld hl, $0002
add hl, bc
ld a, [hSCY]
add [hl]
ld [hSCY], a
ret
.asm_97eee
ld hl, $0004
add hl, bc
ld a, [hl]
ld [hSCY], a
call Function97e72
ret
; 97ef9
Function97ef9: ; 97ef9
call Function97ea3
dw Function97f02
dw Function97f0a
dw Function97f1b
; 97f02
Function97f02: ; 97f02
call Function97f38
jr z, Function97f2c
call Function97eab
; 97f0a
Function97f0a: ; 97f0a
call Function97f38
jr z, Function97f2c
call Function97eab
ld hl, $0002
add hl, bc
ld a, [hl]
ld [$d173], a
ret
; 97f1b
Function97f1b: ; 97f1b
call Function97f38
jr z, Function97f2c
call Function97eb1
ld hl, $0003
add hl, bc
ld a, [hl]
ld [$d173], a
ret
; 97f2c
Function97f2c: ; 97f2c
ld a, $7f
ld [$d173], a
ld hl, $0005
add hl, bc
ld [hl], 0
ret
; 97f38
Function97f38: ; 97f38
push bc
ld bc, $d4d6
call GetSpriteDirection
and a
pop bc
ret
; 97f42
Function97f42: ; 97f42
ld de, $d4d6
ld a, $d
.asm_97f47
push af
ld hl, $0000
add hl, de
ld a, [hl]
and a
jr z, .asm_97f71
ld hl, $0003
add hl, de
ld a, [hl]
cp $19
jr nz, .asm_97f71
ld hl, $000e
add hl, de
ld a, [hl]
call CheckPitTile
jr nz, .asm_97f71
ld hl, $0007
add hl, de
ld a, [hl]
cp $ff
jr nz, .asm_97f71
call Function3567
jr c, .asm_97f7c
.asm_97f71
ld hl, $0028
add hl, de
ld d, h
ld e, l
pop af
dec a
jr nz, .asm_97f47
ret
.asm_97f7c
pop af
ret
; 97f7e

647
main.asm
View File

@ -85542,657 +85542,12 @@ INCBIN "baserom.gbc",$93327,$93a31 - $93327
SECTION "bank25",ROMX,BANK[$25]
INCLUDE "maps/map_headers.asm"
INCLUDE "maps/second_map_headers.asm"
INCLUDE "engine/events.asm"
INCLUDE "engine/scripting.asm"
Function97c28: ; 97c28
ld hl, StatusFlags2
res 1, [hl]
res 2, [hl]
ret
; 97c30
Function97c30: ; 97c30
ld a, [$d45c]
and a
ret z
ld hl, $d45e
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [$d45d]
call CallScript
scf
push af
xor a
ld hl, $d45c
ld bc, 8
call ByteFill
pop af
ret
; 97c4f
Function97c4f: ; 97c4f
ld hl, $d45c
ld a, [hl]
and a
ret nz
ld [hl], 1
inc hl
ld [hl], b
inc hl
ld [hl], e
inc hl
ld [hl], d
scf
ret
; 97c5f
Function97c5f: ; 97c5f
call GetFacingTileCoord
ld [EngineBuffer1], a
ld c, a
callba Function1365b
jr c, .asm_97cb9
call CheckCutTreeTile
jr nz, .whirlpool
callba TryCutOW
jr .asm_97cb9
.whirlpool
ld a, [EngineBuffer1]
call CheckWhirlpoolTile
jr nz, .waterfall
callba TryWhirlpoolOW
jr .asm_97cb9
.waterfall
ld a, [EngineBuffer1]
call CheckWaterfallTile
jr nz, .headbutt
callba TryWaterfallOW
jr .asm_97cb9
.headbutt
ld a, [EngineBuffer1]
call CheckHeadbuttTreeTile
jr nz, .surf
callba TryHeadbuttOW
jr c, .asm_97cb9
jr .asm_97cb7
.surf
callba TrySurfOW
jr nc, .asm_97cb7
jr .asm_97cb9
.asm_97cb7
xor a
ret
.asm_97cb9
call PlayClickSFX
ld a, $ff
scf
ret
; 97cc0
Function97cc0: ; 97cc0
; Rock Smash encounter
call Function968c7
jr c, .asm_97ce2
call Function97cfd
jr nc, .asm_97ce2
ld hl, StatusFlags2
bit 2, [hl]
jr nz, .asm_97cdb
callba Function2a0e7
jr nz, .asm_97ce2
jr .asm_97ce6
.asm_97cdb
call Function97d23
jr nc, .asm_97ce2
jr .asm_97ced
.asm_97ce2
ld a, 1
and a
ret
.asm_97ce6
ld a, BANK(RockSmashBattleScript)
ld hl, RockSmashBattleScript
jr .asm_97cf4
.asm_97ced
ld a, BANK(UnknownScript_0x135eb)
ld hl, UnknownScript_0x135eb
jr .asm_97cf4
.asm_97cf4
call CallScript
scf
ret
; 97cf9
RockSmashBattleScript: ; 97cf9
battlecheck
startbattle
returnafterbattle
end
; 97cfd
Function97cfd: ; 97cfd
ld hl, StatusFlags
bit 5, [hl]
jr nz, .asm_97d21
ld a, [$d19a]
cp $4
jr z, .asm_97d17
cp $7
jr z, .asm_97d17
callba Function149dd
jr nc, .asm_97d21
.asm_97d17
ld a, [StandingTile]
call CheckIceTile
jr z, .asm_97d21
scf
ret
.asm_97d21
and a
ret
; 97d23
Function97d23: ; 97d23
call Function97d64
ret nc
call Function97d31
callba Function2a1df
ret
; 97d31
Function97d31: ; 97d31
; Pick a random mon out of ContestMons.
.asm_97d31
call Random
cp 100 << 1
jr nc, .asm_97d31
srl a
ld hl, ContestMons
ld de, 4
.CheckMon
sub [hl]
jr c, .GotMon
add hl, de
jr .CheckMon
.GotMon
inc hl
; Species
ld a, [hli]
ld [$d22e], a
; Min level
ld a, [hli]
ld d, a
; Max level
ld a, [hl]
sub d
jr nz, .RandomLevel
; If min and max are the same.
ld a, d
jr .GotLevel
.RandomLevel
; Get a random level between the min and max.
ld c, a
inc c
call Random
ld a, [hRandomAdd]
call SimpleDivide
add d
.GotLevel
ld [CurPartyLevel], a
xor a
ret
; 97d64
Function97d64: ; 97d64
ld a, [StandingTile]
call Function188e
ld b, $66
jr z, .asm_97d70
ld b, $33
.asm_97d70
callba Function2a124
callba Function2a138
call Random
ld a, [hRandomAdd]
cp b
ret c
ld a, 1
and a
ret
; 97d87
ContestMons: ; 97d87
; %, species, min, max
db 20, CATERPIE, 7, 18
db 20, WEEDLE, 7, 18
db 10, METAPOD, 9, 18
db 10, KAKUNA, 9, 18
db 5, BUTTERFREE, 12, 15
db 5, BEEDRILL, 12, 15
db 10, VENONAT, 10, 16
db 10, PARAS, 10, 17
db 5, SCYTHER, 13, 14
db 5, PINSIR, 13, 14
db -1, VENOMOTH, 30, 40
; 97db3
Function97db3: ; 97db3
nop
nop
; fallthrough
; 97db5
Function97db5: ; 97db5
ld hl, StatusFlags2
bit 4, [hl]
jr z, .asm_97df7
ld a, [PlayerState]
cp $1
jr nz, .asm_97df7
call Function2d05
and a
jr nz, .asm_97df7
ld hl, $dca2
ld a, [hli]
ld d, a
ld e, [hl]
cp $ff
jr nz, .asm_97dd8
ld a, e
cp $ff
jr z, .asm_97ddc
.asm_97dd8
inc de
ld [hl], e
dec hl
ld [hl], d
.asm_97ddc
ld a, d
cp $4
jr c, .asm_97df7
ld a, [$dc31]
and a
jr nz, .asm_97df7
ld a, $6
ld [$dc31], a
xor a
ld [$dc32], a
ld hl, StatusFlags2
res 4, [hl]
scf
ret
.asm_97df7
xor a
ret
; 97df9
Function97df9: ; 97df9
ld hl, $d6de
ld de, $0006
ld c, $4
xor a
.asm_97e02
ld [hl], a
add hl, de
dec c
jr nz, .asm_97e02
ret
; 97e08
Function97e08: ; 97e08
ld hl, $d6de
xor a
.asm_97e0c
ld [hConnectionStripLength], a
ld a, [hl]
and a
jr z, .asm_97e19
push hl
ld b, h
ld c, l
call Function97e79
pop hl
.asm_97e19
ld de, $0006
add hl, de
ld a, [hConnectionStripLength]
inc a
cp $4
jr nz, .asm_97e0c
ret
; 97e25
Function97e25: ; 97e25
ld hl, $d6de
ld bc, 6
call AddNTimes
ld b, h
ld c, l
ret
; 97e31
Function97e31: ; 97e31
push bc
push de
call Function97e45
ld d, h
ld e, l
pop hl
pop bc
ret c
ld a, b
ld bc, $0005
call FarCopyBytes
xor a
ld [hl], a
ret
; 97e45
Function97e45: ; 97e45
ld hl, $d6de
ld de, $0006
ld c, $4
.asm_97e4d
ld a, [hl]
and a
jr z, .asm_97e57
add hl, de
dec c
jr nz, .asm_97e4d
scf
ret
.asm_97e57
ld a, $4
sub c
and a
ret
; 97e5c
Function97e5c: ; 97e5c
ld hl, $d6de
ld de, $0006
ld c, $4
.asm_97e64
ld a, [hl]
cp b
jr z, .asm_97e6e
add hl, de
dec c
jr nz, .asm_97e64
and a
ret
.asm_97e6e
xor a
ld [hl], a
scf
ret
; 97e72
Function97e72: ; 97e72
ld hl, $0000
add hl, bc
ld [hl], 0
ret
; 97e79
Function97e79: ; 97e79
ld hl, $0000
add hl, bc
ld a, [hl]
cp 5
jr c, .asm_97e83
xor a
.asm_97e83
ld e, a
ld d, 0
ld hl, Table97e94
add hl, de
add hl, de
add hl, de
ld a, [hli]
push af
ld a, [hli]
ld h, [hl]
ld l, a
pop af
rst FarCall
ret
; 97e94
Table97e94: ; 97e94
dbw BANK(Function97eb7), Function97eb7
dbw BANK(Function97eb8), Function97eb8
dbw BANK(Function97f42), Function97f42
dbw BANK(Function97ef9), Function97ef9
dbw BANK(Function97ebc), Function97ebc
; 97ea3
Function97ea3: ; 97ea3
ld hl, $0005
add hl, bc
ld a, [hl]
pop hl
rst JumpTable
ret
; 97eab
Function97eab: ; 97eab
ld hl, $0005
add hl, bc
inc [hl]
ret
; 97eb1
Function97eb1: ; 97eb1
ld hl, $0005
add hl, bc
dec [hl]
ret
; 97eb7
Function97eb7: ; 97eb7
ret
; 97eb8
Function97eb8: ; 97eb8
call Function2f3e
ret
; 97ebc
Function97ebc: ; 97ebc
call Function97ea3
dw Function97ec3
dw Function97ecd
; 97ec3
Function97ec3: ; 97ec3
ld a, [hSCY]
ld hl, $0004
add hl, bc
ld [hl], a
call Function97eab
; 97ecd
Function97ecd: ; 97ecd
ld hl, $0001
add hl, bc
ld a, [hl]
dec a
ld [hl], a
jr z, .asm_97eee
and $1
jr z, .asm_97ee4
ld hl, $0002
add hl, bc
ld a, [hSCY]
sub [hl]
ld [hSCY], a
ret
.asm_97ee4
ld hl, $0002
add hl, bc
ld a, [hSCY]
add [hl]
ld [hSCY], a
ret
.asm_97eee
ld hl, $0004
add hl, bc
ld a, [hl]
ld [hSCY], a
call Function97e72
ret
; 97ef9
Function97ef9: ; 97ef9
call Function97ea3
dw Function97f02
dw Function97f0a
dw Function97f1b
; 97f02
Function97f02: ; 97f02
call Function97f38
jr z, Function97f2c
call Function97eab
; 97f0a
Function97f0a: ; 97f0a
call Function97f38
jr z, Function97f2c
call Function97eab
ld hl, $0002
add hl, bc
ld a, [hl]
ld [$d173], a
ret
; 97f1b
Function97f1b: ; 97f1b
call Function97f38
jr z, Function97f2c
call Function97eb1
ld hl, $0003
add hl, bc
ld a, [hl]
ld [$d173], a
ret
; 97f2c
Function97f2c: ; 97f2c
ld a, $7f
ld [$d173], a
ld hl, $0005
add hl, bc
ld [hl], 0
ret
; 97f38
Function97f38: ; 97f38
push bc
ld bc, $d4d6
call GetSpriteDirection
and a
pop bc
ret
; 97f42
Function97f42: ; 97f42
ld de, $d4d6
ld a, $d
.asm_97f47
push af
ld hl, $0000
add hl, de
ld a, [hl]
and a
jr z, .asm_97f71
ld hl, $0003
add hl, de
ld a, [hl]
cp $19
jr nz, .asm_97f71
ld hl, $000e
add hl, de
ld a, [hl]
call CheckPitTile
jr nz, .asm_97f71
ld hl, $0007
add hl, de
ld a, [hl]
cp $ff
jr nz, .asm_97f71
call Function3567
jr c, .asm_97f7c
.asm_97f71
ld hl, $0028
add hl, de
ld d, h
ld e, l
pop af
dec a
jr nz, .asm_97f47
ret
.asm_97f7c
pop af
ret
; 97f7e
INCLUDE "engine/events_2.asm"