ref: 6fb2cd66133896bdb1e8f04ec2278a99627edea6
parent: f2888a2d751a8a71e6d9aa8caa96e60680a83b1f
author: yenatch <[email protected]>
date: Fri Jul 19 21:25:41 EDT 2013
no more incbins in bank 25
--- a/main.asm
+++ b/main.asm
@@ -101,9 +101,10 @@
ld a, [VramState]
bit 0, a ; obj update
ret z
-
-; update palettes
- callab TimeOfDayPals
+; 47e
+
+TimeOfDayPals: ; 47e
+ callab _TimeOfDayPals
ret
; 485
@@ -2130,8 +2131,10 @@
ret
; 17ff
+
INCBIN "baserom.gbc", $17ff, $185d - $17ff
+
GetTileType: ; 185d
; checks the properties of a tile
; input: a = tile id
@@ -2155,8 +2158,10 @@
ret
; 1875
+
INCBIN "baserom.gbc", $1875, $18a0 - $1875
+
CheckCounterTile: ; 18a0
cp $90
ret z
@@ -2164,7 +2169,12 @@
ret
; 18a6
-INCBIN "baserom.gbc", $18a6, $18ac - $18a6
+CheckPitTile: ; 18a6
+ cp $60
+ ret z
+ cp $68
+ ret
+; 18ac
CheckIceTile: ; 18ac
cp $23
@@ -3090,9 +3100,15 @@
; 0x2c1c
-INCBIN "baserom.gbc", $2c1c, $2c5b - $2c1c
+INCBIN "baserom.gbc", $2c1c, $2c57 - $2c1c
+GetMapEventBank: ; 2c57
+ ld a, [MapEventBank]
+ ret
+; 2c5b
+
+
GetAnyMapBlockdataBank: ; 2c5b
; Return the blockdata bank for group b map c.
push hl
@@ -4580,7 +4596,7 @@
ld [$d040], a
.asm_367e
- call $2c57
+ call GetMapEventBank
ld [EngineBuffer1], a
ld a, [$ffe0]
call GetMapObject
@@ -6481,7 +6497,7 @@
INCBIN "baserom.gbc", $c000, $29
SpecialsPointers: ; 0xc029
- dbw $25, $7c28
+ dbw BANK(Function97c28), Function97c28
dbw $0a, $5ce8
dbw $0a, $5d11
dbw $0a, $5d92
@@ -17009,7 +17025,7 @@
INCBIN "baserom.gbc", $8c000, $8c011 - $8c000
-TimeOfDayPals: ; 8c011
+_TimeOfDayPals: ; 8c011
; return carry if pals are changed
; forced pals?
@@ -18347,23 +18363,199 @@
INCLUDE "maps/second_map_headers.asm"
-INCBIN "baserom.gbc", $966b0, $96795 - $966b0
+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
+ ld a, $4
+ ld hl, $53e5
+ rst FarCall
+ call $092f
+ ; fallthrough
+; 9673e
+
+
+Function9673e: ; 9673e
+ xor a
+ ld [$d453], a
+ ld [$d454], a
+ call Function968d1
+ ld a, $5
+ ld hl, $5363
+ rst FarCall
+ 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
-; 9679d
.pointers
dw Function967a1
dw Function967ae
+; 967a1
Function967a1: ; 967a1
call PlayerEvents
- call $66cb
+ call Function966cb
callba ScriptEvents
ret
; 967ae
@@ -18373,12 +18565,95 @@
; 967af
-INCBIN "baserom.gbc", $967af, $9681f - $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
+ ld a, $1
+ ld hl, $576a
+ rst FarCall
+ ld a, $3
+ ld hl, $5497
+ rst FarCall
+ call Function96812
+ ret
+; 967e1
+
+Function967e1: ; 967e1
+ ld a, $1
+ ld hl, $5920
+ rst FarCall
+ ld a, $3
+ ld hl, $54d2
+ rst FarCall
+ ld a, $2e
+ ld hl, $4098
+ rst FarCall
+ 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
+ ld a, $2
+ ld hl, $41ca
+ rst FarCall
+
+ ret
+; 9681f
+
+
PlayerEvents: ; 9681f
-; Reset carry.
xor a
ld a, [ScriptRunning]
@@ -18385,7 +18660,7 @@
and a
ret nz
- call $68e4
+ call Function968e4
call CheckTrainerBattle3
jr c, .asm_96848
@@ -18393,13 +18668,13 @@
call CheckTileEvent
jr c, .asm_96848
- call $7c30
+ call Function97c30
jr c, .asm_96848
- call $68ec
+ call Function968ec
jr c, .asm_96848
- call $693a
+ call Function9693a
jr c, .asm_96848
call OWPlayerInput
@@ -18411,13 +18686,11 @@
.asm_96848
push af
- ld a, $25
- ld hl, $6c56
- rst FarCall
+ callba Function96c56
pop af
ld [ScriptRunning], a
- call $6beb
+ call Function96beb
ld a, [ScriptRunning]
cp 4
jr z, .asm_96865
@@ -18451,7 +18724,7 @@
CheckTileEvent: ; 96874
; Check for warps, tile triggers or wild battles.
- call $670c
+ call Function9670c
jr z, .asm_96886
ld a, $41
@@ -18463,7 +18736,7 @@
jr c, .asm_968aa
.asm_96886
- call $6712
+ call Function96712
jr z, .asm_96890
call $2ad4
@@ -18470,19 +18743,18 @@
jr c, .asm_968ba
.asm_96890
- call $6718
+ call Function96718
jr z, .asm_96899
- call $6b79
+ call CountStep
ret c
.asm_96899
- call $671e
+ call Function9671e
jr z, .asm_968a4
- call $7cc0
+ call Function97cc0
ret c
-
jr .asm_968a4
.asm_968a4
@@ -18496,7 +18768,7 @@
.asm_968aa
ld a, [StandingTile]
- call $18a6
+ call CheckPitTile
jr nz, .asm_968b6
ld a, 6
scf
@@ -18512,15 +18784,144 @@
ld a, [hli]
ld h, [hl]
ld l, a
- call $2c57
+ call GetMapEventBank
call PushScriptPointer
ret
; 968c7
-INCBIN "baserom.gbc", $968c7, $96974 - $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 $2f3e
+ ret
+; 968ec
+
+Function968ec: ; 968ec
+ ld a, [$dc07]
+ and a
+ jr z, .asm_96938
+
+ ld c, a
+ call $211b
+ 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 GetMapEventBank
+ call GetFarHalfword
+ call GetMapEventBank
+ call PushScriptPointer
+
+ 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 PushScriptPointer
+ 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
+ ld a, $4
+ ld hl, $54a4
+ rst FarCall
+ jr c, .asm_96966
+ xor a
+ ret
+
+.asm_96951
+ ld a, $4
+ ld hl, $5452
+ rst FarCall
+ ld a, $4
+ ld hl, $54e7
+ rst FarCall
+ ld a, $24
+ ld hl, $4074
+ rst FarCall
+ ret c
+
+.asm_96964
+ xor a
+ ret
+
+.asm_96966
+ ld a, $4
+ ld hl, $75f8
+ call PushScriptPointer
+ scf
+ ret
+; 96970
+
+Function96970: ; 96970
+ ld a, 8
+ scf
+ ret
+; 96974
+
+
OWPlayerInput: ; 96974
call PlayerMovement
@@ -18559,7 +18960,7 @@
ret c
call TryReadSign
ret c
- call $7c5f
+ call Function97c5f
ret c
xor a
ret
@@ -18632,7 +19033,7 @@
ld a, [hli]
ld h, [hl]
ld l, a
- call $2c57
+ call GetMapEventBank
call PushScriptPointer
; ld a, -1
ret
@@ -18644,7 +19045,7 @@
ld a, [hli]
ld h, [hl]
ld l, a
- call $2c57
+ call GetMapEventBank
ld de, EngineBuffer1
ld bc, 2
call FarCopyBytes
@@ -18722,7 +19123,7 @@
ld a, [PlayerDirection]
and %1100
cp b
- jp nz, $6ad6
+ jp nz, .dontread
.read
call PlayTalkObject
@@ -18730,7 +19131,7 @@
ld a, [hli]
ld h, [hl]
ld l, a
- call $2c57
+ call GetMapEventBank
call PushScriptPointer
scf
ret
@@ -18737,9 +19138,9 @@
.itemifset
call CheckSignFlag
- jp nz, $6ad6
+ jp nz, .dontread
call PlayTalkObject
- call $2c57
+ call GetMapEventBank
ld de, EngineBuffer1
ld bc, 3
call FarCopyBytes
@@ -18752,7 +19153,7 @@
.asm_96aa2
call CheckSignFlag
jr nz, .dontread
- call $2c57
+ call GetMapEventBank
ld de, EngineBuffer1
ld bc, 3
call FarCopyBytes
@@ -18773,9 +19174,9 @@
pop hl
inc hl
inc hl
- call $2c57
+ call GetMapEventBank
call GetFarHalfword
- call $2c57
+ call GetMapEventBank
call PushScriptPointer
scf
ret
@@ -18792,7 +19193,7 @@
ld h, [hl]
ld l, a
push hl
- call $2c57
+ call GetMapEventBank
call GetFarHalfword
ld e, l
ld d, h
@@ -18832,7 +19233,7 @@
; 96b10
.seven ; 96b10
- call $68d7 ; empty
+ call Function968d7 ; empty
xor a
ld c, a
ret
@@ -18932,9 +19333,190 @@
; 96b79
-INCBIN "baserom.gbc", $96b79, $96c5e - $96b79
+CountStep: ; 96b79
+ ld a, [InLinkBattle]
+ and a
+ jr nz, .asm_96bc9
+ ld a, $24
+ ld hl, $4136
+ rst FarCall
+ jr c, .asm_96bcb
+ call Function96bd7
+ jr c, .asm_96bcb
+
+ ld hl, PoisonStepCount
+ inc [hl]
+ ld hl, StepCount
+ inc [hl]
+ jr nz, .asm_96b9c
+
+ ld a, $1
+ ld hl, $725a
+ rst FarCall
+
+.asm_96b9c
+ ld a, [StepCount]
+ cp $80
+ jr nz, .asm_96bab
+
+ ld a, $5
+ ld hl, $6f3e
+ rst FarCall
+ jr nz, .asm_96bcf
+
+.asm_96bab
+ ld a, $1
+ ld hl, $7282
+ rst FarCall
+
+ ld hl, PoisonStepCount
+ ld a, [hl]
+ cp 4
+ jr c, .asm_96bc3
+ ld [hl], 0
+
+ ld a, $14
+ ld hl, $45da
+ rst FarCall
+ 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 PushScriptPointer
+ 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 $2f, $6675 ; BANK(UnknownScript_0xbe675), UnknownScript_0xbe675
+ dbw $2f, $666a ; BANK(UnknownScript_0xbe66a), UnknownScript_0xbe66a
+ dbw $04, $62ce ; BANK(UnknownScript_0x122ce), UnknownScript_0x122ce
+ dbw BANK(UnknownScript_0x96c4d), UnknownScript_0x96c4d
+ dbw BANK(UnknownScript_0x96c34), UnknownScript_0x96c34
+ dbw BANK(FallIntoMapScript), FallIntoMapScript
+ dbw $04, $64c8 ; 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
+
+
+Function96c56: ; 96c56
+ push af
+ ld a, 1
+ ld [ScriptMode], a
+ pop af
+ ret
+; 96c5e
+
+
ScriptEvents: ; 96c5e
call StartScript
.loop
@@ -19002,7 +19584,657 @@
INCLUDE "engine/scripting.asm"
-INCBIN "baserom.gbc", $97c20, $97f7e - $97c20
+Function97c20: ; 97c20
+ ld a, [.byte]
+ ld [ScriptVar], a
+ ret
+
+.byte
+ db 0
+; 97c28
+
+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 PushScriptPointer
+ 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
+ ld a, $4
+ ld hl, $765b
+ rst FarCall
+ jr c, .asm_97cb9
+ call $1894
+ jr nz, .asm_97c7b
+ ld a, $3
+ ld hl, $5186
+ rst FarCall
+ jr .asm_97cb9
+
+.asm_97c7b
+ ld a, [EngineBuffer1]
+ call CheckWhirlpoolTile
+ jr nz, .asm_97c8b
+ ld a, $3
+ ld hl, $4e3e
+ rst FarCall
+ jr .asm_97cb9
+
+.asm_97c8b
+ ld a, [EngineBuffer1]
+ call CheckWaterfallTile
+ jr nz, .asm_97c9b
+ ld a, $3
+ ld hl, $4b56
+ rst FarCall
+ jr .asm_97cb9
+
+.asm_97c9b
+ ld a, [EngineBuffer1]
+ call $189a
+ jr nz, .asm_97cad
+ ld a, $3
+ ld hl, $4ec9
+ rst FarCall
+ jr c, .asm_97cb9
+ jr .asm_97cb7
+
+.asm_97cad
+ callba CheckSurfOW
+ jr nc, .asm_97cb7
+ jr .asm_97cb9
+
+.asm_97cb7
+ xor a
+ ret
+
+.asm_97cb9
+ call PlayClickSFX
+ ld a, $ff
+ scf
+ ret
+; 97cc0
+
+Function97cc0: ; 97cc0
+ call Function968c7
+ jr c, .asm_97ce2
+ call Function97cfd
+ jr nc, .asm_97ce2
+ ld hl, StatusFlags2
+ bit 2, [hl]
+ jr nz, .asm_97cdb
+ ld a, $a
+ ld hl, $60e7
+ rst FarCall
+ 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(UnknownScript_0x97cf9)
+ ld hl, UnknownScript_0x97cf9
+ jr .asm_97cf4
+
+.asm_97ced
+ ld a, $4
+ ld hl, $75eb
+ jr .asm_97cf4
+
+.asm_97cf4
+ call PushScriptPointer
+ scf
+ ret
+; 97cf9
+
+UnknownScript_0x97cf9: ; 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
+ ld a, $5
+ ld hl, $49dd
+ rst FarCall
+ 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
+ ld a, $a
+ ld hl, $61df
+ rst FarCall
+ ret
+; 97d31
+
+Function97d31: ; 97d31
+.asm_97d31
+ call RNG
+ cp 100 << 1
+ jr nc, .asm_97d31
+ srl a
+ ld hl, Table97d87
+ ld de, 4
+.asm_97d40
+ sub [hl]
+ jr c, .asm_97d46
+ add hl, de
+ jr .asm_97d40
+
+.asm_97d46
+ inc hl
+ ld a, [hli]
+ ld [$d22e], a
+ ld a, [hli]
+ ld d, a
+ ld a, [hl]
+ sub d
+ jr nz, .asm_97d54
+ ld a, d
+ jr .asm_97d5f
+
+.asm_97d54
+ ld c, a
+ inc c
+ call RNG
+ ld a, [hRandomAdd]
+ call SimpleDivide
+ add d
+
+.asm_97d5f
+ ld [CurPartyLevel], a
+ xor a
+ ret
+; 97d64
+
+Function97d64: ; 97d64
+ ld a, [StandingTile]
+ call $188e
+ ld b, $66
+ jr z, .asm_97d70
+ ld b, $33
+
+.asm_97d70
+ ld a, $a
+ ld hl, $6124
+ rst FarCall
+ ld a, $a
+ ld hl, $6138
+ rst FarCall
+ call RNG
+ ld a, [hRandomAdd]
+ cp b
+ ret c
+ ld a, 1
+ and a
+ ret
+; 97d87
+
+Table97d87: ; 97d87
+ db 20, $0a, $07, $12
+ db 20, $0d, $07, $12
+ db 10, $0b, $09, $12
+ db 10, $0e, $09, $12
+ db 5, $0c, $0c, $0f
+ db 5, $0f, $0c, $0f
+ db 10, $30, $0a, $10
+ db 10, $2e, $0a, $11
+ db 5, $7b, $0d, $0e
+ db 5, $7f, $0d, $0e
+ db -1, $31, $1e, $28
+; 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 $2d05
+ 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 $2f3e
+ ret
+; 97ebc
+
+Function97ebc: ; 97ebc
+ call Function97ea3
+ dw Function97ec3
+ dw Function97ecd
+; 97ec3
+
+Function97ec3: ; 97ec3
+ ld a, [$ffd0]
+ 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, [$ffd0]
+ sub [hl]
+ ld [$ffd0], a
+ ret
+
+.asm_97ee4
+ ld hl, $0002
+ add hl, bc
+ ld a, [$ffd0]
+ add [hl]
+ ld [$ffd0], a
+ ret
+
+.asm_97eee
+ ld hl, $0004
+ add hl, bc
+ ld a, [hl]
+ ld [$ffd0], 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 $3567
+ 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
+
SECTION "bank26",DATA,BANK[$26]