shithub: pokecrystal

Download patch

ref: 92e2ed3e610e6a972c6fac08a9dff6bad380b6b9
parent: 943ddf6db0a1adbd2d75583c08b2a29a1d98e1fc
author: yenatch <yenatch@gmail.com>
date: Wed Feb 11 10:09:35 EST 2015

Split out event scripting specials.

--- /dev/null
+++ b/engine/specials.asm
@@ -1,0 +1,642 @@
+
+Special:: ; c01b
+; Run script special de.
+	ld hl, SpecialsPointers
+	add hl, de
+	add hl, de
+	add hl, de
+	ld b, [hl]
+	inc hl
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld a, b
+	rst FarCall
+	ret
+; c029
+
+SpecialsPointers:: ; c029
+	add_special Function97c28
+	add_special Function29ce8
+	add_special Function29d11
+	add_special Function29d92
+	add_special Function29e66
+	add_special Function29e82
+	add_special Function29efa
+	add_special Function29eee
+	add_special Function29c92
+	add_special Function29cf1
+	add_special Function29cfa
+	add_special Function29bfb
+	add_special Function29c7b
+	add_special Function29ec4
+	add_special Function29ed9
+	add_special Function29eaf
+	add_special Function29f47
+	add_special Functionc2f6
+	add_special Functionc309
+	add_special Function1050b9
+	add_special Functionc34a
+	add_special Function4d9e5
+	add_special Function13a12
+	add_special Function13a31
+	add_special Function135db
+	add_special Functionfbb32
+	add_special Functionfbcd2
+	add_special Functionc658
+	add_special Function1559a
+	add_special Functionc2e7
+	add_special Function166d6
+	add_special Function1672a
+	add_special Function16936
+	add_special Function2c547
+	add_special Function16218
+	add_special Function8cc04
+	add_special SpecialNameRival
+	add_special Function90913
+	add_special Functionc2c0
+	add_special Functionc2cd
+	add_special Functionc355
+	add_special Functionc360
+	add_special Functionc373
+	add_special Functionc380
+	add_special Functionc38d
+	add_special Functionc3db
+	add_special Function8c084
+	add_special Function8c092
+	add_special Function8c0b6
+	add_special Function8c079
+	add_special Function8c0ab
+	add_special Functiond91
+	add_special WhiteBGMap
+	add_special UpdateTimePals
+	add_special ClearTileMap
+	add_special Function1ad2
+	add_special Functione4a
+	add_special Functionc230
+	add_special SpecialSeenMon
+	add_special WaitSFX
+	add_special PlayMapMusic
+	add_special RestartMapMusic
+	add_special Function12324
+	add_special Function8379
+	add_special Functionc25a
+	add_special Functionc268
+	add_special Functionc276
+	add_special Functionc284
+	add_special Functionc3ef
+	add_special Function17421
+	add_special Function17440
+	add_special Function139a8
+	add_special Functionc3fc
+	add_special Function26feb
+	add_special Function27043
+	add_special SpecialGiveShuckle
+	add_special SpecialReturnShuckle
+	add_special Function73f7
+	add_special SpecialCheckPokerus
+	add_special Function24b25
+	add_special Function24b4e
+	add_special Function24ae8
+	add_special Function4d87a
+	add_special Functionc434
+	add_special Functionc422
+	add_special Function4d9d3
+	add_special Function88018
+	add_special SpecialNameRater
+	add_special Functionc2da
+	add_special Function718d
+	add_special Function71ac
+	add_special Function2a4ab
+	add_special Function2a51f
+	add_special RandomPhoneMon
+	add_special Function14209
+	add_special Functionfb841
+	add_special SpecialSnorlaxAwake
+	add_special Function7413
+	add_special Function7418
+	add_special Function741d
+	add_special Functionc472
+	add_special ProfOaksPCBoot
+	add_special SpecialGameboyCheck
+	add_special SpecialTrainerHouse
+	add_special Function16dc7
+	add_special InitRoamMons
+	add_special Functionc48f
+	add_special Functionc49f
+	add_special Functionc4ac
+	add_special Function11ac3e
+	add_special Function11b444
+	add_special Function11b5e8
+	add_special Function11b7e5
+	add_special Function11b879
+	add_special Function11b920
+	add_special Function11b93b
+	add_special Function1700b0
+	add_special Function1700ba
+	add_special Function170114
+	add_special Function170215
+	add_special Function1704e1
+	add_special Function17021d
+	add_special Function170b44
+	add_special Function11ba38
+	add_special Function170bd3
+	add_special Function117656
+	add_special Reset
+	add_special Function1011f1
+	add_special Function101220
+	add_special Function101225
+	add_special Function101231
+	add_special Function4925b
+	add_special Function8adef
+	add_special Function11c1ab
+	add_special Function170687
+	add_special Function8ae68
+	add_special Function17d224
+	add_special Function17d2b6
+	add_special Function17d2ce
+	add_special Function17f53d
+	add_special Function103612
+	add_special SpecialHoOhChamber
+	add_special Function102142
+	add_special Function4989a
+	add_special Function49bf9
+	add_special SpecialPokeSeer
+	add_special SpecialBuenasPassword
+	add_special SpecialBuenaPrize
+	add_special SpecialDratini
+	add_special Function11485
+	add_special SpecialBeastsCheck
+	add_special SpecialMonCheck
+	add_special Functionc225
+	add_special Function170bd2
+	add_special Function10366e
+	add_special Function1037eb
+	add_special Function10383c
+	add_special Function1060a2
+	add_special Function14168
+	add_special Function1037c2
+	add_special Function10630f
+	add_special Function103780
+	add_special Function10387b
+	add_special Function4ae12
+	add_special Function1047eb
+	add_special Function4a927
+	add_special Function90a54
+	add_special Function90a88
+	add_special SpecialNone
+; c224
+
+SpecialNone: ; c224
+	ret
+; c225
+
+Functionc225: ; c225
+	ld a, [ScriptVar]
+	ld d, a
+	callba Function57e2
+	ret
+; c230
+
+Functionc230: ; c230
+	ld a, [ScriptVar]
+	dec a
+	call CheckCaughtMon
+	ret nz
+	ld a, [ScriptVar]
+	dec a
+	call SetSeenAndCaughtMon
+	call FadeToMenu
+	ld a, [ScriptVar]
+	ld [wd265], a
+	callba Functionfb877
+	call Function2b4d
+	ret
+; c252
+
+SpecialSeenMon: ; c252
+	ld a, [ScriptVar]
+	dec a
+	call SetSeenMon
+	ret
+; c25a
+
+Functionc25a: ; c25a
+	ld a, [ScriptVar]
+	ld b, a
+	callba Function4dbd2
+	jr z, Functionc298
+	jr Functionc292
+
+Functionc268: ; c268
+	ld a, [ScriptVar]
+	ld b, a
+	callba Function4dbd9
+	jr z, Functionc298
+	jr Functionc292
+
+Functionc276: ; c276
+	ld a, [ScriptVar]
+	ld b, a
+	callba Function4dbe0
+	jr z, Functionc298
+	jr Functionc292
+
+Functionc284: ; c284
+	ld a, [ScriptVar]
+	ld b, a
+	callba Function4dbe6
+	jr z, Functionc298
+	jr Functionc292
+
+Functionc292: ; c292
+	ld a, $1
+	ld [ScriptVar], a
+	ret
+
+Functionc298: ; c298
+	xor a
+	ld [ScriptVar], a
+	ret
+; c29d
+
+SpecialNameRival: ; 0xc29d
+	ld b, $2 ; rival
+	ld de, RivalName
+	callba Function116b7
+	; default to "SILVER"
+	ld hl, RivalName
+	ld de, DefaultRivalName
+	call InitName
+	ret
+; 0xc2b2
+
+DefaultRivalName: ; 0xc2b2
+	db "SILVER@"
+
+SpecialNameRater: ; c2b9
+	callba NameRater
+	ret
+; c2c0
+
+Functionc2c0: ; c2c0
+	call FadeToMenu
+	callba Function9191c
+	call Function2b4d
+	ret
+; c2cd
+
+Functionc2cd: ; c2cd
+	call FadeToMenu
+	callba Function16be4
+	call Function2b4d
+	ret
+; c2da
+
+Functionc2da: ; c2da
+	call FadeToMenu
+	callba Function3f836
+	call Function2b4d
+	ret
+; c2e7
+
+Functionc2e7: ; c2e7
+	xor a
+	ld [ScriptVar], a
+	callba Function156d9
+	ld a, c
+	ld [ScriptVar], a
+	ret
+; c2f6
+
+Functionc2f6: ; c2f6
+	ld a, $0
+	call GetSRAMBank
+	ld a, [$abe2]
+	and a
+	jr z, .asm_c302
+	inc a
+
+.asm_c302
+	ld [ScriptVar], a
+	call CloseSRAM
+	ret
+; c309
+
+Functionc309: ; c309
+	ld a, $0
+	call GetSRAMBank
+	ld a, [$abe2]
+	ld [CurItem], a
+	ld a, $1
+	ld [wd10c], a
+	ld hl, NumItems
+	call ReceiveItem
+	jr nc, .asm_c33d
+	xor a
+	ld [$abe2], a
+	call CloseSRAM
+	ld a, [CurItem]
+	ld [wd265], a
+	call GetItemName
+	ld hl, UnknownText_0xc345
+	call PrintText
+	ld a, $1
+	ld [ScriptVar], a
+	ret
+
+.asm_c33d
+	call CloseSRAM
+	xor a
+	ld [ScriptVar], a
+	ret
+; c345
+
+UnknownText_0xc345: ; 0xc345
+	; received item
+	text_jump UnknownText_0x1bd3be
+	db "@"
+; 0xc34a
+
+Functionc34a: ; c34a
+	callba Function1369d
+	ld a, b
+	ld [ScriptVar], a
+	ret
+; c355
+
+Functionc355: ; c355
+	ld a, [ScriptVar]
+	ld e, a
+	callba Function91a53
+	ret
+; c360
+
+Functionc360: ; c360
+	call FadeToMenu
+	callba Functione1190
+	ld a, [wd0ec]
+	ld [ScriptVar], a
+	call Function2b4d
+	ret
+; c373
+
+Functionc373: ; c373
+	call Functionc3ae
+	ret c
+	ld a, BANK(Function926c7)
+	ld hl, Function926c7
+	call Functionc39a
+	ret
+; c380
+
+Functionc380: ; c380
+	call Functionc3ae
+	ret c
+	ld a, BANK(Functione00ee)
+	ld hl, Functione00ee
+	call Functionc39a
+	ret
+; c38d
+
+Functionc38d: ; c38d
+	call Functionc3ae
+	ret c
+	ld a, BANK(Functione1e5b)
+	ld hl, Functione1e5b
+	call Functionc39a
+	ret
+; c39a
+
+Functionc39a: ; c39a
+	call Function31cf
+	call FadeToMenu
+	ld hl, wd0e8
+	ld a, [hli]
+	push af
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	pop af
+	rst FarCall
+	call Function2b4d
+	ret
+; c3ae
+
+Functionc3ae: ; c3ae
+	ld hl, Coins
+	ld a, [hli]
+	or [hl]
+	jr z, .asm_c3c4
+	ld a, COIN_CASE
+	ld [CurItem], a
+	ld hl, NumItems
+	call CheckItem
+	jr nc, .asm_c3c9
+	and a
+	ret
+
+.asm_c3c4
+	ld hl, UnknownText_0xc3d1
+	jr .asm_c3cc
+
+.asm_c3c9
+	ld hl, UnknownText_0xc3d6
+
+.asm_c3cc
+	call PrintText
+	scf
+	ret
+; c3d1
+
+UnknownText_0xc3d1: ; 0xc3d1
+	; You have no coins.
+	text_jump UnknownText_0x1bd3d7
+	db "@"
+; 0xc3d6
+
+UnknownText_0xc3d6: ; 0xc3d6
+	; You don't have a COIN CASE.
+	text_jump UnknownText_0x1bd3eb
+	db "@"
+; 0xc3db
+
+Functionc3db: ; c3db
+	call WhiteBGMap
+	call Function2879
+	ret
+; c3e2
+
+ScriptReturnCarry: ; c3e2
+	jr c, .carry
+	xor a
+	ld [ScriptVar], a
+	ret
+.carry
+	ld a, 1
+	ld [ScriptVar], a
+	ret
+; c3ef
+
+Functionc3ef: ; c3ef
+	callba Function1150c
+	ld a, [wdc3a]
+	ld [ScriptVar], a
+	ret
+; c3fc
+
+Functionc3fc: ; c3fc
+	ld a, [ScriptVar]
+	ld [wdfce], a
+	ret
+; c403
+
+
+Functionc403:: ; c403
+	ld a, c
+	and a
+	jr nz, .asm_c410
+	ld a, d
+	ld [wdfcc], a
+	ld a, e
+	ld [wdfcd], a
+	ret
+
+.asm_c410
+	ld a, d
+	ld [wdc5a], a
+	ld a, e
+	ld [wdc5b], a
+	ret
+; c419
+
+
+SpecialCheckPokerus: ; c419
+; Check if a monster in your party has Pokerus
+	callba CheckPokerus
+	jp ScriptReturnCarry
+; c422
+
+Functionc422: ; c422
+	callba Function1152b
+	ld hl, wdc9d
+	res 0, [hl]
+	callba Function5d33
+	ret
+; c434
+
+Functionc434: ; c434
+	callba Function11542
+	jp ScriptReturnCarry
+; c43d
+
+SpecialSnorlaxAwake: ; 0xc43d
+; Check if the Poké Flute channel is playing, and if the player is standing
+; next to Snorlax.
+
+; outputs:
+; ScriptVar is 1 if the conditions are met, otherwise 0.
+
+; check background music
+	ld a, [wMapMusic]
+	cp MUSIC_POKE_FLUTE_CHANNEL
+	jr nz, .nope
+
+	ld a, [XCoord]
+	ld b, a
+	ld a, [YCoord]
+	ld c, a
+
+	ld hl, .ProximityCoords
+.loop
+	ld a, [hli]
+	cp $ff
+	jr z, .nope
+	cp b
+	jr nz, .nextcoord
+	ld a, [hli]
+	cp c
+	jr nz, .loop
+
+	ld a, $1
+	jr .done
+
+.nextcoord
+	inc hl
+	jr .loop
+
+.nope
+	xor a
+.done
+	ld [ScriptVar], a
+	ret
+
+.ProximityCoords
+	;   x,  y
+	db 33,  8 ; left
+	db 34, 10 ; below
+	db 35, 10 ; below
+	db 36,  8 ; right
+	db 36,  9 ; right
+	db $ff
+
+
+Functionc472: ; c472
+	ld a, [CurPartySpecies]
+	jp PlayCry
+; c478
+
+
+SpecialGameboyCheck: ; c478
+	ld a, [hCGB]
+	and a
+	jr nz, .cgb
+
+	ld a, [hSGB]
+	and a
+	jr nz, .sgb
+
+.gb
+	xor a
+	jr .done
+.sgb
+	ld a, 1
+	jr .done
+.cgb
+	ld a, 2
+.done
+	ld [ScriptVar], a
+	ret
+
+
+Functionc48f: ; c48f
+	ld a, MUSIC_NONE % $100
+	ld [MusicFadeIDLo], a
+	ld a, MUSIC_NONE / $100
+	ld [MusicFadeIDHi], a
+	ld a, $2
+	ld [MusicFade], a
+	ret
+; c49f
+
+Functionc49f: ; c49f
+	call FadeToMenu
+	callba Function1dd702
+	call Function2b4d
+	ret
+; c4ac
+
+Functionc4ac: ; c4ac
+	call FadeToMenu
+	callba Function84688
+	call Function2b4d
+	ret
+; c4b9
+
+SpecialTrainerHouse: ; 0xc4b9
+	ld a, 0
+	call GetSRAMBank
+	ld a, [$abfd] ; XXX what is this memory location?
+	ld [ScriptVar], a
+	jp CloseSRAM
+
--- a/main.asm
+++ b/main.asm
@@ -4186,646 +4186,7 @@
 ; c01b
 
 
-Special:: ; c01b
-; Run script special de.
-	ld hl, SpecialsPointers
-	add hl, de
-	add hl, de
-	add hl, de
-	ld b, [hl]
-	inc hl
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ld a, b
-	rst FarCall
-	ret
-; c029
-
-SpecialsPointers:: ; c029
-	add_special Function97c28
-	add_special Function29ce8
-	add_special Function29d11
-	add_special Function29d92
-	add_special Function29e66
-	add_special Function29e82
-	add_special Function29efa
-	add_special Function29eee
-	add_special Function29c92
-	add_special Function29cf1
-	add_special Function29cfa
-	add_special Function29bfb
-	add_special Function29c7b
-	add_special Function29ec4
-	add_special Function29ed9
-	add_special Function29eaf
-	add_special Function29f47
-	add_special Functionc2f6
-	add_special Functionc309
-	add_special Function1050b9
-	add_special Functionc34a
-	add_special Function4d9e5
-	add_special Function13a12
-	add_special Function13a31
-	add_special Function135db
-	add_special Functionfbb32
-	add_special Functionfbcd2
-	add_special Functionc658
-	add_special Function1559a
-	add_special Functionc2e7
-	add_special Function166d6
-	add_special Function1672a
-	add_special Function16936
-	add_special Function2c547
-	add_special Function16218
-	add_special Function8cc04
-	add_special SpecialNameRival
-	add_special Function90913
-	add_special Functionc2c0
-	add_special Functionc2cd
-	add_special Functionc355
-	add_special Functionc360
-	add_special Functionc373
-	add_special Functionc380
-	add_special Functionc38d
-	add_special Functionc3db
-	add_special Function8c084
-	add_special Function8c092
-	add_special Function8c0b6
-	add_special Function8c079
-	add_special Function8c0ab
-	add_special Functiond91
-	add_special WhiteBGMap
-	add_special UpdateTimePals
-	add_special ClearTileMap
-	add_special Function1ad2
-	add_special Functione4a
-	add_special Functionc230
-	add_special SpecialSeenMon
-	add_special WaitSFX
-	add_special PlayMapMusic
-	add_special RestartMapMusic
-	add_special Function12324
-	add_special Function8379
-	add_special Functionc25a
-	add_special Functionc268
-	add_special Functionc276
-	add_special Functionc284
-	add_special Functionc3ef
-	add_special Function17421
-	add_special Function17440
-	add_special Function139a8
-	add_special Functionc3fc
-	add_special Function26feb
-	add_special Function27043
-	add_special SpecialGiveShuckle
-	add_special SpecialReturnShuckle
-	add_special Function73f7
-	add_special SpecialCheckPokerus
-	add_special Function24b25
-	add_special Function24b4e
-	add_special Function24ae8
-	add_special Function4d87a
-	add_special Functionc434
-	add_special Functionc422
-	add_special Function4d9d3
-	add_special Function88018
-	add_special SpecialNameRater
-	add_special Functionc2da
-	add_special Function718d
-	add_special Function71ac
-	add_special Function2a4ab
-	add_special Function2a51f
-	add_special RandomPhoneMon
-	add_special Function14209
-	add_special Functionfb841
-	add_special SpecialSnorlaxAwake
-	add_special Function7413
-	add_special Function7418
-	add_special Function741d
-	add_special Functionc472
-	add_special ProfOaksPCBoot
-	add_special SpecialGameboyCheck
-	add_special SpecialTrainerHouse
-	add_special Function16dc7
-	add_special InitRoamMons
-	add_special Functionc48f
-	add_special Functionc49f
-	add_special Functionc4ac
-	add_special Function11ac3e
-	add_special Function11b444
-	add_special Function11b5e8
-	add_special Function11b7e5
-	add_special Function11b879
-	add_special Function11b920
-	add_special Function11b93b
-	add_special Function1700b0
-	add_special Function1700ba
-	add_special Function170114
-	add_special Function170215
-	add_special Function1704e1
-	add_special Function17021d
-	add_special Function170b44
-	add_special Function11ba38
-	add_special Function170bd3
-	add_special Function117656
-	add_special Reset
-	add_special Function1011f1
-	add_special Function101220
-	add_special Function101225
-	add_special Function101231
-	add_special Function4925b
-	add_special Function8adef
-	add_special Function11c1ab
-	add_special Function170687
-	add_special Function8ae68
-	add_special Function17d224
-	add_special Function17d2b6
-	add_special Function17d2ce
-	add_special Function17f53d
-	add_special Function103612
-	add_special SpecialHoOhChamber
-	add_special Function102142
-	add_special Function4989a
-	add_special Function49bf9
-	add_special SpecialPokeSeer
-	add_special SpecialBuenasPassword
-	add_special SpecialBuenaPrize
-	add_special SpecialDratini
-	add_special Function11485
-	add_special SpecialBeastsCheck
-	add_special SpecialMonCheck
-	add_special Functionc225
-	add_special Function170bd2
-	add_special Function10366e
-	add_special Function1037eb
-	add_special Function10383c
-	add_special Function1060a2
-	add_special Function14168
-	add_special Function1037c2
-	add_special Function10630f
-	add_special Function103780
-	add_special Function10387b
-	add_special Function4ae12
-	add_special Function1047eb
-	add_special Function4a927
-	add_special Function90a54
-	add_special Function90a88
-	add_special SpecialNone
-; c224
-
-SpecialNone: ; c224
-	ret
-; c225
-
-Functionc225: ; c225
-	ld a, [ScriptVar]
-	ld d, a
-	callba Function57e2
-	ret
-; c230
-
-Functionc230: ; c230
-	ld a, [ScriptVar]
-	dec a
-	call CheckCaughtMon
-	ret nz
-	ld a, [ScriptVar]
-	dec a
-	call SetSeenAndCaughtMon
-	call FadeToMenu
-	ld a, [ScriptVar]
-	ld [wd265], a
-	callba Functionfb877
-	call Function2b4d
-	ret
-; c252
-
-SpecialSeenMon: ; c252
-	ld a, [ScriptVar]
-	dec a
-	call SetSeenMon
-	ret
-; c25a
-
-Functionc25a: ; c25a
-	ld a, [ScriptVar]
-	ld b, a
-	callba Function4dbd2
-	jr z, Functionc298
-	jr Functionc292
-
-Functionc268: ; c268
-	ld a, [ScriptVar]
-	ld b, a
-	callba Function4dbd9
-	jr z, Functionc298
-	jr Functionc292
-
-Functionc276: ; c276
-	ld a, [ScriptVar]
-	ld b, a
-	callba Function4dbe0
-	jr z, Functionc298
-	jr Functionc292
-
-Functionc284: ; c284
-	ld a, [ScriptVar]
-	ld b, a
-	callba Function4dbe6
-	jr z, Functionc298
-	jr Functionc292
-
-Functionc292: ; c292
-	ld a, $1
-	ld [ScriptVar], a
-	ret
-
-Functionc298: ; c298
-	xor a
-	ld [ScriptVar], a
-	ret
-; c29d
-
-SpecialNameRival: ; 0xc29d
-	ld b, $2 ; rival
-	ld de, RivalName
-	callba Function116b7
-	; default to "SILVER"
-	ld hl, RivalName
-	ld de, DefaultRivalName
-	call InitName
-	ret
-; 0xc2b2
-
-DefaultRivalName: ; 0xc2b2
-	db "SILVER@"
-
-SpecialNameRater: ; c2b9
-	callba NameRater
-	ret
-; c2c0
-
-Functionc2c0: ; c2c0
-	call FadeToMenu
-	callba Function9191c
-	call Function2b4d
-	ret
-; c2cd
-
-Functionc2cd: ; c2cd
-	call FadeToMenu
-	callba Function16be4
-	call Function2b4d
-	ret
-; c2da
-
-Functionc2da: ; c2da
-	call FadeToMenu
-	callba Function3f836
-	call Function2b4d
-	ret
-; c2e7
-
-Functionc2e7: ; c2e7
-	xor a
-	ld [ScriptVar], a
-	callba Function156d9
-	ld a, c
-	ld [ScriptVar], a
-	ret
-; c2f6
-
-Functionc2f6: ; c2f6
-	ld a, $0
-	call GetSRAMBank
-	ld a, [$abe2]
-	and a
-	jr z, .asm_c302
-	inc a
-
-.asm_c302
-	ld [ScriptVar], a
-	call CloseSRAM
-	ret
-; c309
-
-Functionc309: ; c309
-	ld a, $0
-	call GetSRAMBank
-	ld a, [$abe2]
-	ld [CurItem], a
-	ld a, $1
-	ld [wd10c], a
-	ld hl, NumItems
-	call ReceiveItem
-	jr nc, .asm_c33d
-	xor a
-	ld [$abe2], a
-	call CloseSRAM
-	ld a, [CurItem]
-	ld [wd265], a
-	call GetItemName
-	ld hl, UnknownText_0xc345
-	call PrintText
-	ld a, $1
-	ld [ScriptVar], a
-	ret
-
-.asm_c33d
-	call CloseSRAM
-	xor a
-	ld [ScriptVar], a
-	ret
-; c345
-
-UnknownText_0xc345: ; 0xc345
-	; received item
-	text_jump UnknownText_0x1bd3be
-	db "@"
-; 0xc34a
-
-Functionc34a: ; c34a
-	callba Function1369d
-	ld a, b
-	ld [ScriptVar], a
-	ret
-; c355
-
-Functionc355: ; c355
-	ld a, [ScriptVar]
-	ld e, a
-	callba Function91a53
-	ret
-; c360
-
-Functionc360: ; c360
-	call FadeToMenu
-	callba Functione1190
-	ld a, [wd0ec]
-	ld [ScriptVar], a
-	call Function2b4d
-	ret
-; c373
-
-Functionc373: ; c373
-	call Functionc3ae
-	ret c
-	ld a, BANK(Function926c7)
-	ld hl, Function926c7
-	call Functionc39a
-	ret
-; c380
-
-Functionc380: ; c380
-	call Functionc3ae
-	ret c
-	ld a, BANK(Functione00ee)
-	ld hl, Functione00ee
-	call Functionc39a
-	ret
-; c38d
-
-Functionc38d: ; c38d
-	call Functionc3ae
-	ret c
-	ld a, BANK(Functione1e5b)
-	ld hl, Functione1e5b
-	call Functionc39a
-	ret
-; c39a
-
-Functionc39a: ; c39a
-	call Function31cf
-	call FadeToMenu
-	ld hl, wd0e8
-	ld a, [hli]
-	push af
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	pop af
-	rst FarCall
-	call Function2b4d
-	ret
-; c3ae
-
-Functionc3ae: ; c3ae
-	ld hl, Coins
-	ld a, [hli]
-	or [hl]
-	jr z, .asm_c3c4
-	ld a, COIN_CASE
-	ld [CurItem], a
-	ld hl, NumItems
-	call CheckItem
-	jr nc, .asm_c3c9
-	and a
-	ret
-
-.asm_c3c4
-	ld hl, UnknownText_0xc3d1
-	jr .asm_c3cc
-
-.asm_c3c9
-	ld hl, UnknownText_0xc3d6
-
-.asm_c3cc
-	call PrintText
-	scf
-	ret
-; c3d1
-
-UnknownText_0xc3d1: ; 0xc3d1
-	; You have no coins.
-	text_jump UnknownText_0x1bd3d7
-	db "@"
-; 0xc3d6
-
-UnknownText_0xc3d6: ; 0xc3d6
-	; You don't have a COIN CASE.
-	text_jump UnknownText_0x1bd3eb
-	db "@"
-; 0xc3db
-
-Functionc3db: ; c3db
-	call WhiteBGMap
-	call Function2879
-	ret
-; c3e2
-
-ScriptReturnCarry: ; c3e2
-	jr c, .carry
-	xor a
-	ld [ScriptVar], a
-	ret
-.carry
-	ld a, 1
-	ld [ScriptVar], a
-	ret
-; c3ef
-
-Functionc3ef: ; c3ef
-	callba Function1150c
-	ld a, [wdc3a]
-	ld [ScriptVar], a
-	ret
-; c3fc
-
-Functionc3fc: ; c3fc
-	ld a, [ScriptVar]
-	ld [wdfce], a
-	ret
-; c403
-
-
-Functionc403:: ; c403
-	ld a, c
-	and a
-	jr nz, .asm_c410
-	ld a, d
-	ld [wdfcc], a
-	ld a, e
-	ld [wdfcd], a
-	ret
-
-.asm_c410
-	ld a, d
-	ld [wdc5a], a
-	ld a, e
-	ld [wdc5b], a
-	ret
-; c419
-
-
-SpecialCheckPokerus: ; c419
-; Check if a monster in your party has Pokerus
-	callba CheckPokerus
-	jp ScriptReturnCarry
-; c422
-
-Functionc422: ; c422
-	callba Function1152b
-	ld hl, wdc9d
-	res 0, [hl]
-	callba Function5d33
-	ret
-; c434
-
-Functionc434: ; c434
-	callba Function11542
-	jp ScriptReturnCarry
-; c43d
-
-SpecialSnorlaxAwake: ; 0xc43d
-; Check if the Poké Flute channel is playing, and if the player is standing
-; next to Snorlax.
-
-; outputs:
-; ScriptVar is 1 if the conditions are met, otherwise 0.
-
-; check background music
-	ld a, [wMapMusic]
-	cp MUSIC_POKE_FLUTE_CHANNEL
-	jr nz, .nope
-
-	ld a, [XCoord]
-	ld b, a
-	ld a, [YCoord]
-	ld c, a
-
-	ld hl, .ProximityCoords
-.loop
-	ld a, [hli]
-	cp $ff
-	jr z, .nope
-	cp b
-	jr nz, .nextcoord
-	ld a, [hli]
-	cp c
-	jr nz, .loop
-
-	ld a, $1
-	jr .done
-
-.nextcoord
-	inc hl
-	jr .loop
-
-.nope
-	xor a
-.done
-	ld [ScriptVar], a
-	ret
-
-.ProximityCoords
-	;   x,  y
-	db 33,  8 ; left
-	db 34, 10 ; below
-	db 35, 10 ; below
-	db 36,  8 ; right
-	db 36,  9 ; right
-	db $ff
-
-
-Functionc472: ; c472
-	ld a, [CurPartySpecies]
-	jp PlayCry
-; c478
-
-
-SpecialGameboyCheck: ; c478
-	ld a, [hCGB]
-	and a
-	jr nz, .cgb
-
-	ld a, [hSGB]
-	and a
-	jr nz, .sgb
-
-.gb
-	xor a
-	jr .done
-.sgb
-	ld a, 1
-	jr .done
-.cgb
-	ld a, 2
-.done
-	ld [ScriptVar], a
-	ret
-
-
-Functionc48f: ; c48f
-	ld a, MUSIC_NONE % $100
-	ld [MusicFadeIDLo], a
-	ld a, MUSIC_NONE / $100
-	ld [MusicFadeIDHi], a
-	ld a, $2
-	ld [MusicFade], a
-	ret
-; c49f
-
-Functionc49f: ; c49f
-	call FadeToMenu
-	callba Function1dd702
-	call Function2b4d
-	ret
-; c4ac
-
-Functionc4ac: ; c4ac
-	call FadeToMenu
-	callba Function84688
-	call Function2b4d
-	ret
-; c4b9
-
-SpecialTrainerHouse: ; 0xc4b9
-	ld a, 0
-	call GetSRAMBank
-	ld a, [$abfd] ; XXX what is this memory location?
-	ld [ScriptVar], a
-	jp CloseSRAM
+INCLUDE "engine/specials.asm"
 
 
 _PrintNum:: ; c4c7