shithub: pokecrystal

Download patch

ref: fb931fe616504a8cf141521dec6fc6f7d236bff8
parent: 41dbd3b4a6f43439f691918815f26cfad9c06231
author: yenatch <[email protected]>
date: Mon Jun 17 17:26:33 EDT 2013

move miscellaneous asm into engine/

--- a/bittable2.asm
+++ /dev/null
@@ -1,198 +1,0 @@
-; All locations are in WRAM bank 1.
-
-	; location, bit
-
-	; pokegear
-	dwb $d957, %00000010 ; radio card
-	dwb $d957, %00000001 ; map card
-	dwb $d957, %00000100 ; phone card
-	dwb $d957, %00001000 ; expn card
-	dwb $d957, %10000000 ; on/off
-	
-	;   DaycareMan, %10000000 ; daycare 1 on
-	dwb DaycareMan, %01000000 ; monster 1 and 2 are compatible
-	;   DaycareMan, %00100000 ; egg is ready
-	dwb DaycareMan, %00000001 ; monster 1 in daycare
-	
-	;   DaycareLady, %10000000 = daycare 2 on
-	dwb DaycareLady, %00000001 ; monster 2 in daycare
-	
-	dwb $d854, %00000001 ; mom saving money
-	dwb $d854, %10000000 ; dst
-	
-	dwb $dc39, %00000001
-	
-	dwb $d84c, %00000001 ; pokedex
-	dwb $d84c, %00000010 ; unown dex
-	dwb $d84c, %00001000 ; pokerus
-	dwb $d84c, %00010000 ; rocket signal on ch20
-	dwb $d84c, %01000000 ; credits skip
-	dwb $d84c, %10000000 ; bug contest on
-	dwb $d84d, %00000100 ; bug contest timer
-	dwb $d84d, %00000010 ; rockets in radio tower
-	dwb $d84d, %00000001 ; bike shop call enabled (1024 bike steps reqd)
-	dwb $d84d, %00010000
-	dwb $d84d, %00100000 ; give pokerus; berry -> berry juice when trading?
-	dwb $d84d, %01000000
-	dwb $d84d, %10000000 ; rockets in mahogany
-	
-	dwb $dbf5, %00000001 ; strength active
-	dwb $dbf5, %00000010 ; always on bike (cant surf)
-	dwb $dbf5, %00000100 ; downhill (cycling road)
-	
-	dwb JohtoBadges, %00000001 ; zephyrbadge
-	dwb JohtoBadges, %00000010 ; hivebadge
-	dwb JohtoBadges, %00000100 ; plainbadge
-	dwb JohtoBadges, %00001000 ; fogbadge
-	dwb JohtoBadges, %00010000 ; mineralbadge
-	dwb JohtoBadges, %00100000 ; stormbadge
-	dwb JohtoBadges, %01000000 ; glacierbadge
-	dwb JohtoBadges, %10000000 ; risingbadge
-	
-	dwb KantoBadges, %00000001 ; boulderbadge
-	dwb KantoBadges, %00000010 ; cascadebadge
-	dwb KantoBadges, %00000100 ; thunderbadge
-	dwb KantoBadges, %00001000 ; rainbowbadge
-	dwb KantoBadges, %00010000 ; soulbadge
-	dwb KantoBadges, %00100000 ; marshbadge
-	dwb KantoBadges, %01000000 ; volcanobadge
-	dwb KantoBadges, %10000000 ; earthbadge
-	
-	; unown sets
-	dwb UnlockedUnowns, %00000001 ; 1
-	dwb UnlockedUnowns, %00000010 ; 2
-	dwb UnlockedUnowns, %00000100 ; 3
-	dwb UnlockedUnowns, %00001000 ; 4
-	dwb UnlockedUnowns, %00010000 ; 5
-	dwb UnlockedUnowns, %00100000 ; 6
-	dwb UnlockedUnowns, %01000000 ; 7
-	dwb UnlockedUnowns, %10000000 ; 8
-	
-	; fly
-	dwb FlypointPerms, %00000001 ; your house
-	dwb FlypointPerms, %00000010 ; viridian pokecenter
-	dwb FlypointPerms, %00000100 ; pallet
-	dwb FlypointPerms, %00001000 ; viridian
-	dwb FlypointPerms, %00010000 ; pewter
-	dwb FlypointPerms, %00100000 ; cerulean
-	dwb FlypointPerms, %01000000 ; rock tunnel
-	dwb FlypointPerms, %10000000 ; vermilion
-	dwb FlypointPerms + 1, %00000001 ; lavender
-	dwb FlypointPerms + 1, %00000010 ; saffron
-	dwb FlypointPerms + 1, %00000100 ; celadon
-	dwb FlypointPerms + 1, %00001000 ; fuchsia
-	dwb FlypointPerms + 1, %00010000 ; cinnabar
-	dwb FlypointPerms + 1, %00100000 ; indigo plateau
-	dwb FlypointPerms + 1, %01000000 ; new bark
-	dwb FlypointPerms + 1, %10000000 ; cherrygrove
-	dwb FlypointPerms + 2, %00000001 ; violet
-	dwb FlypointPerms + 2, %00000100 ; azalea
-	dwb FlypointPerms + 2, %00001000 ; cianwood
-	dwb FlypointPerms + 2, %00010000 ; goldenrod
-	dwb FlypointPerms + 2, %00100000 ; olivine
-	dwb FlypointPerms + 2, %01000000 ; ecruteak
-	dwb FlypointPerms + 2, %10000000 ; mahogany
-	dwb FlypointPerms + 3, %00000001 ; lake of rage
-	dwb FlypointPerms + 3, %00000010 ; blackthorn
-	dwb FlypointPerms + 3, %00000100 ; silver cave
-	dwb FlypointPerms + 3, %00010000 ; unused
-	
-	dwb $dc9d, %00000001 ; lucky number show
-	dwb $d84d, %00001000
-	
-	dwb $dc1e, %00000001 ; kurt making balls
-	dwb $dc1e, %00000010
-	dwb $dc1e, %00000100 ; special wilddata?
-	dwb $dc1e, %00001000 ; time capsule (24h wait)
-	dwb $dc1e, %00010000 ; all fruit trees
-	dwb $dc1e, %00100000 ; shuckle given
-	dwb $dc1e, %01000000 ; goldenrod underground merchant closed
-	dwb $dc1e, %10000000 ; fought in trainer hall today
-	
-	dwb $dc1f, %00000001 ; mt moon square clefairy
-	dwb $dc1f, %00000010 ; union cave lapras
-	dwb $dc1f, %00000100 ; goldenrod underground haircut used
-	dwb $dc1f, %00001000 ; goldenrod mall happiness event floor05 person07
-	dwb $dc1f, %00010000 ; tea in blues house
-	dwb $dc1f, %00100000 ; indigo plateau rival fight
-	dwb $dc1f, %01000000
-	dwb $dc1f, %10000000
-	
-	dwb $dc20, %00000001 ; $60
-	dwb $dc20, %00000010 ; goldenrod dept store sale is on
-	
-	dwb $cfbc, %10000000 ; $62
-	
-	dwb PlayerGender, %00000001 ; player is female
-	
-	dwb $dbf3, %00000100 ; have gs ball after kurt examined it
-	
-	; rematches
-	dwb $dc4c, %00000001 ; jack
-	dwb $dc4c, %00000010 ; huey
-	dwb $dc4c, %00000100 ; gaven
-	dwb $dc4c, %00001000 ; beth
-	dwb $dc4c, %00010000 ; jose
-	dwb $dc4c, %00100000 ; reena
-	dwb $dc4c, %01000000 ; joey
-	dwb $dc4c, %10000000 ; wade
-	dwb $dc4d, %00000001 ; ralph
-	dwb $dc4d, %00000010 ; liz
-	dwb $dc4d, %00000100 ; anthony
-	dwb $dc4d, %00001000 ; todd
-	dwb $dc4d, %00010000 ; gina
-	dwb $dc4d, %00100000 ; arnie
-	dwb $dc4d, %01000000 ; alan
-	dwb $dc4d, %10000000 ; dana
-	dwb $dc4e, %00000001 ; chad
-	dwb $dc4e, %00000010 ; tully
-	dwb $dc4e, %00000100 ; brent
-	dwb $dc4e, %00001000 ; tiffany
-	dwb $dc4e, %00010000 ; vance
-	dwb $dc4e, %00100000 ; wilton
-	dwb $dc4e, %01000000 ; parry
-	dwb $dc4e, %10000000 ; erin
-	
-	dwb $dc50, %00000001 ; beverly has nugget
-	dwb $dc50, %00000010 ; jose has star piece
-	dwb $dc50, %00000100 ; wade has item (see bittable1 $032b-e)
-	dwb $dc50, %00001000 ; gina has leaf stone
-	dwb $dc50, %00010000 ; alan has fire stone
-	dwb $dc50, %00100000 ; liz has thunderstone
-	dwb $dc50, %01000000 ; derek has nugget
-	dwb $dc50, %10000000 ; tully has water stone
-	
-	dwb $dc51, %00000001 ; tiffany has pink bow
-	dwb $dc51, %00000010 ; wilton has item (see bittable1 $032f-31)
-	
-	dwb $dc54, %00000001
-	dwb $dc54, %00000010
-	dwb $dc54, %00000100
-	dwb $dc54, %00001000
-	dwb $dc54, %00010000
-	dwb $dc54, %00100000
-	dwb $dc54, %01000000
-	dwb $dc54, %10000000
-	
-	dwb $dc55, %00000001
-	dwb $dc55, %00000010
-	dwb $dc55, %00000100
-	dwb $dc55, %00001000
-	dwb $dc55, %00010000
-	dwb $dc55, %00100000
-	dwb $dc55, %01000000
-	dwb $dc55, %10000000
-	
-	dwb $dc56, %00000001
-	dwb $dc56, %00000010
-	dwb $dc56, %00000100
-	dwb $dc56, %00001000
-	dwb $dc56, %00010000
-	dwb $dc56, %00100000
-	dwb $dc56, %01000000
-	dwb $dc56, %10000000
-	
-	dwb $d45b, %00000100 ; female player has been transformed into male
-	
-	dwb $dc20, %00000100 ; dunsparce swarm
-	dwb $dc20, %00001000 ; yanma swarm
--- a/credits.asm
+++ /dev/null
@@ -1,824 +1,0 @@
-SATOSHI_TAJIRI       EQU 00
-JUNICHI_MASUDA       EQU 01
-TETSUYA_WATANABE     EQU 02
-SHIGEKI_MORIMOTO     EQU 03
-SOUSUKE_TAMADA       EQU 04
-TAKENORI_OOTA        EQU 05
-KEN_SUGIMORI         EQU 06
-MOTOFUMI_FUJIWARA    EQU 07
-ATSUKO_NISHIDA       EQU 08
-MUNEO_SAITO          EQU 09
-SATOSHI_OOTA         EQU 10
-RENA_YOSHIKAWA       EQU 11
-JUN_OKUTANI          EQU 12
-HIRONOBU_YOSHIDA     EQU 13
-ASUKA_IWASHITA       EQU 14
-GO_ICHINOSE          EQU 15
-MORIKAZU_AOKI        EQU 16
-KOHJI_NISHINO        EQU 17
-KENJI_MATSUSHIMA     EQU 18
-TOSHINOBU_MATSUMIYA  EQU 19
-SATORU_IWATA         EQU 20
-NOBUHIRO_SEYA        EQU 21
-KAZUHITO_SEKINE      EQU 22
-TETSUJI_OOTA         EQU 23
-NCL_SUPER_MARIO_CLUB EQU 24
-SARUGAKUCHO          EQU 25
-AKITO_MORI           EQU 26
-TAKAHIRO_HARADA      EQU 27
-TOHRU_HASHIMOTO      EQU 28
-NOBORU_MATSUMOTO     EQU 29
-TAKEHIRO_IZUSHI      EQU 30
-TAKASHI_KAWAGUCHI    EQU 31
-TSUNEKAZU_ISHIHARA   EQU 32
-HIROSHI_YAMAUCHI     EQU 33
-KENJI_SAIKI          EQU 34
-ATSUSHI_TADA         EQU 35
-NAOKO_KAWAKAMI       EQU 36
-HIROYUKI_ZINNAI      EQU 37
-KUNIMI_KAWAMURA      EQU 38
-HISASHI_SOGABE       EQU 39
-KEITA_KAGAYA         EQU 40
-YOSHINORI_MATSUDA    EQU 41
-HITOMI_SATO          EQU 42
-TORU_OSAWA           EQU 43
-TAKAO_OHARA          EQU 44
-YUICHIRO_ITO         EQU 45
-TAKAO_SHIMIZU        EQU 46
-PLANNING             EQU 47
-KEITA_NAKAMURA       EQU 48
-HIROTAKA_UEMURA      EQU 49
-HIROAKI_TAMURA       EQU 50
-NORIAKI_SAKAGUCHI    EQU 51
-MIYUKI_SATO          EQU 52
-GAKUZI_NOMOTO        EQU 53
-AI_MASHIMA           EQU 54
-MIKIHIRO_ISHIKAWA    EQU 55
-HIDEYUKI_HASHIMOTO   EQU 56
-SATOSHI_YAMATO       EQU 57
-SHIGERU_MIYAMOTO     EQU 58
-GAIL_TILDEN          EQU 59
-NOB_OGASAWARA        EQU 60
-SETH_MCMAHILL        EQU 61
-HIROTO_ALEXANDER     EQU 62
-TERESA_LILLYGREN     EQU 63
-THOMAS_HERTZOG       EQU 64
-ERIK_JOHNSON         EQU 65
-HIRO_NAKAMURA        EQU 66
-TERUKI_MURAKAWA      EQU 67
-KAZUYOSHI_OSAWA      EQU 68
-KIMIKO_NAKAMICHI     EQU 69
-END                  EQU 70
-CREDITS_UNKNOWN      EQU 71
-STAFF                EQU 72
-DIRECTOR             EQU 73
-CODIRECTOR           EQU 74
-PROGRAMMERS          EQU 75
-GRAPHICS_DIRECTOR    EQU 76
-MONSTER_DESIGN       EQU 77
-GRAPHICS_DESIGN      EQU 78
-MUSIC                EQU 79
-SOUND_EFFECTS        EQU 80
-GAME_DESIGN          EQU 81
-GAME_SCENARIO        EQU 82
-TOOL_PROGRAMMING     EQU 83
-PARAMETRIC_DESIGN    EQU 84
-SCRIPT_DESIGN        EQU 85
-MAP_DATA_DESIGN      EQU 86
-MAP_DESIGN           EQU 87
-PRODUCT_TESTING      EQU 88
-SPECIAL_THANKS       EQU 89
-PRODUCERS            EQU 90
-EXECUTIVE_PRODUCER   EQU 91
-POKEMON_ANIMATION    EQU 92
-POKEDEX_TEXT         EQU 93
-MOBILE_PRJ_LEADER    EQU 94
-MOBILE_SYSTEM_AD     EQU 95
-MOBILE_STADIUM_DIR   EQU 96
-COORDINATION         EQU 97
-COPYRIGHT            EQU 98
-US_VERSION_STAFF     EQU 99
-US_COORDINATION      EQU 100
-TEXT_TRANSLATION     EQU 101
-PAAD_TESTING         EQU 102
-
-CREDITS_THEEND       EQU $f9
-CREDITS_WAIT2        EQU $fa
-CREDITS_MUSIC        EQU $fb
-CREDITS_CLEAR        EQU $fc
-CREDITS_SCENE        EQU $fd
-CREDITS_WAIT         EQU $fe
-
-
-ParseCredits: ; 1099aa
-	ld hl, $cf63
-	bit 7, [hl]
-	jp nz, .done
-	
-; Wait until the timer has run out to parse the next command.
-	ld hl, CreditsTimer
-	ld a, [hl]
-	and a
-	jr z, .parse
-	
-; One tick has passed.
-	dec [hl]
-	jp .done
-	
-.parse
-; First, let's clear the current text display,
-; starting from line 5.
-	xor a
-	ld [$ffd4], a
-	hlcoord 0, 5
-	ld bc, 20 * 12
-	ld a, " "
-	call ByteFill
-	
-; Then read the script.
-	
-.loop
-	call .get
-	
-; Commands:
-	cp $ff
-	jp z, .end
-	cp CREDITS_WAIT
-	jr z, .wait
-	cp CREDITS_SCENE
-	jr z, .scene
-	cp CREDITS_CLEAR
-	jr z, .clear
-	cp CREDITS_MUSIC
-	jr z, .music
-	cp CREDITS_WAIT2
-	jr z, .wait2
-	cp CREDITS_THEEND
-	jr z, .theend
-	
-; If it's not a command, it's a string identifier.
-	
-	push af
-	ld e, a
-	ld d, 0
-	ld hl, CreditsStrings
-	add hl, de
-	add hl, de
-	ld a, [hli]
-	ld d, [hl]
-	ld e, a
-	pop af
-	
-; Strings spanning multiple lines have special cases.
-	
-	cp COPYRIGHT
-	jr z, .copyright
-	
-	cp STAFF
-	jr c, .staff
-	
-; The rest start from line 6.
-
-	hlcoord 0, 6
-	jr .print
-	
-.copyright
-	hlcoord 2, 6
-	jr .print
-	
-.staff
-	hlcoord 0, 6
-	
-.print
-; Print strings spaced every two lines.
-	call .get
-	ld bc, 20 * 2
-	call AddNTimes
-	call PlaceString
-	jr .loop
-	
-.theend
-; Display "The End" graphic.
-	call $5c11
-	jr .loop
-	
-.scene
-; Update the scene number and corresponding palette.
-	call .get
-	ld [$cf65], a ; scene
-	xor a
-	ld [$cf64], a ; frame
-	call GetCreditsPalette
-	call $32f9 ; update hw pal registers
-	jr .loop
-	
-.clear
-; Clear the banner.
-	ld a, $ff
-	ld [$cf64], a ; frame
-	jr .loop
-	
-.music
-; Play the credits music.
-	ld de, MUSIC_CREDITS
-	push de
-	ld de, MUSIC_NONE
-	call StartMusic
-	call DelayFrame
-	pop de
-	call StartMusic
-	jp .loop
-	
-.wait2
-; Wait for some amount of ticks.
-	call .get
-	ld [CreditsTimer], a
-	jr .done
-	
-.wait
-; Wait for some amount of ticks, and do something else.
-	call .get
-	ld [CreditsTimer], a
-	
-	xor a
-	ld [$ffd5], a
-	ld a, 1
-	ld [$ffd4], a
-	
-.done
-	jp $5951
-	
-.end
-; Stop execution.
-	ld hl, $cf63
-	set 7, [hl]
-	ld a, $20
-	ld [$c2a7], a
-	ld a, $5c
-	ld [$c2a9], a
-	ld a, $00
-	ld [$c2aa], a
-	ret
-
-.get
-; Get byte CreditsPos from CreditsScript
-	push hl
-	push de
-	ld a, [CreditsPos]
-	ld e, a
-	ld a, [CreditsPos+1]
-	ld d, a
-	ld hl, CreditsScript
-	add hl, de
-	
-	inc de
-	ld a, e
-	ld [CreditsPos], a
-	ld a, d
-	ld [CreditsPos+1], a
-	ld a, [hl]
-	pop de
-	pop hl
-	ret
-; 109a95
-
-
-INCBIN "baserom.gbc", $109a95, $109b2c - $109a95
-
-
-GetCreditsPalette: ; 109b2c
-	call .GetPalAddress
-	
-	push hl
-	ld a, 0
-	call .UpdatePals
-	pop hl
-	ret
-	
-.GetPalAddress
-; Each set of palette data is 24 bytes long.
-	ld a, [$cf65] ; scene
-	and 3
-	add a
-	add a ; * 8
-	add a
-	ld e, a
-	ld d, 0
-	ld hl, .CreditsPalettes
-	add hl, de
-	add hl, de ; * 3
-	add hl, de
-	ret
-	
-.UpdatePals
-; Update the first three colors in both palette buffers.
-	
-	push af
-	push hl
-	add $00 ; lo($d000)
-	ld e, a
-	ld a, 0
-	adc $d0 ; hi($d000)
-	ld d, a
-	ld bc, 24
-	call CopyBytes
-	
-	pop hl
-	pop af
-	add $80 ; lo($d080)
-	ld e, a
-	ld a, 0
-	adc $d0 ; hi($d080)
-	ld d, a
-	ld bc, 24
-	call CopyBytes
-	ret
-
-
-.CreditsPalettes
-INCBIN "baserom.gbc",$109b6a,$18 ; pichu.pal
-INCBIN "baserom.gbc",$109b82,$18 ; smoochum.pal
-INCBIN "baserom.gbc",$109b9a,$18 ; ditto.pal
-INCBIN "baserom.gbc",$109bb2,$18 ; igglybuff.pal
-; 109bca
-
-INCBIN "baserom.gbc", $109bca, $109c24 - $109bca
-
-CreditsGFX:
-INCBIN "gfx/credits/border.2bpp"
-INCBIN "gfx/credits/pichu.2bpp"
-INCBIN "gfx/credits/smoochum.2bpp"
-INCBIN "gfx/credits/ditto.2bpp"
-INCBIN "gfx/credits/igglybuff.2bpp"
-
-
-CreditsScript: ; 10acb4
-
-; Clear the banner.
-	db CREDITS_CLEAR
-
-; Pokemon Crystal Version Staff
-	db                STAFF, 01
-	db CREDITS_WAIT, 08
-
-; Play the credits music.
-	db CREDITS_MUSIC
-
-	db CREDITS_WAIT2, 10
-
-	db CREDITS_WAIT, 01
-
-; Update the banner.
-	db CREDITS_SCENE, 00 ; Pichu
-
-	db             DIRECTOR, 01
-	db       SATOSHI_TAJIRI, 02
-	db CREDITS_WAIT, 12
-
-	db           CODIRECTOR, 01
-	db       JUNICHI_MASUDA, 02
-	db CREDITS_WAIT, 12
-
-	db          PROGRAMMERS, 00
-	db       SOUSUKE_TAMADA, 01
-	db       HISASHI_SOGABE, 02
-	db         KEITA_KAGAYA, 03
-	db    YOSHINORI_MATSUDA, 04
-	db CREDITS_WAIT, 12
-
-	db          PROGRAMMERS, 00
-	db     SHIGEKI_MORIMOTO, 01
-	db     TETSUYA_WATANABE, 02
-	db        TAKENORI_OOTA, 03
-	db CREDITS_WAIT, 12
-
-	db    GRAPHICS_DIRECTOR, 01
-	db         KEN_SUGIMORI, 02
-	db CREDITS_WAIT, 12
-
-	db       MONSTER_DESIGN, 00
-	db         KEN_SUGIMORI, 01
-	db    MOTOFUMI_FUJIWARA, 02
-	db     SHIGEKI_MORIMOTO, 03
-	db     HIRONOBU_YOSHIDA, 04
-	db         SATOSHI_OOTA, 05
-	db CREDITS_WAIT, 12
-
-	db       MONSTER_DESIGN, 00
-	db       ATSUKO_NISHIDA, 01
-	db          MUNEO_SAITO, 02
-	db       RENA_YOSHIKAWA, 03
-	db CREDITS_WAIT, 12
-
-	db    POKEMON_ANIMATION, 01
-	db     HIRONOBU_YOSHIDA, 02
-	db          JUN_OKUTANI, 03
-	db CREDITS_WAIT, 12
-
-; Clear the banner.
-	db CREDITS_CLEAR
-
-	db CREDITS_WAIT, 01
-
-; Update the banner.
-	db CREDITS_SCENE, 01 ; Smoochum
-
-	db      GRAPHICS_DESIGN, 00
-	db     HIRONOBU_YOSHIDA, 01
-	db          JUN_OKUTANI, 02
-	db       ASUKA_IWASHITA, 03
-	db     TETSUYA_WATANABE, 04
-	db CREDITS_WAIT, 12
-
-	db                MUSIC, 00
-	db       JUNICHI_MASUDA, 01
-	db        MORIKAZU_AOKI, 02
-	db          GO_ICHINOSE, 03
-	db CREDITS_WAIT, 12
-
-	db        SOUND_EFFECTS, 00
-	db        MORIKAZU_AOKI, 01
-	db       JUNICHI_MASUDA, 02
-	db     TETSUYA_WATANABE, 03
-	db CREDITS_WAIT, 12
-
-	db          GAME_DESIGN, 00
-	db       JUNICHI_MASUDA, 01
-	db     SHIGEKI_MORIMOTO, 02
-	db        KOHJI_NISHINO, 03
-	db CREDITS_WAIT, 12
-
-	db          GAME_DESIGN, 00
-	db         TETSUJI_OOTA, 01
-	db          HITOMI_SATO, 02
-	db     KENJI_MATSUSHIMA, 03
-	db CREDITS_WAIT, 12
-
-	db        GAME_SCENARIO, 00
-	db       JUNICHI_MASUDA, 01
-	db        KOHJI_NISHINO, 02
-	db  TOSHINOBU_MATSUMIYA, 03
-	db     KENJI_MATSUSHIMA, 04
-	db CREDITS_WAIT, 12
-
-	db         POKEDEX_TEXT, 01
-	db  TOSHINOBU_MATSUMIYA, 02
-	db CREDITS_WAIT, 12
-
-	db     TOOL_PROGRAMMING, 01
-	db       SOUSUKE_TAMADA, 02
-	db        TAKENORI_OOTA, 03
-	db CREDITS_WAIT, 12
-
-	db    PARAMETRIC_DESIGN, 01
-	db        KOHJI_NISHINO, 02
-	db CREDITS_WAIT, 12
-
-; Clear the banner.
-	db CREDITS_CLEAR
-
-	db CREDITS_WAIT, 01
-
-; Update the banner.
-	db CREDITS_SCENE, 02 ; Ditto
-
-	db        SCRIPT_DESIGN, 01
-	db         TETSUJI_OOTA, 02
-	db        NOBUHIRO_SEYA, 03
-	db CREDITS_WAIT, 12
-
-	db      MAP_DATA_DESIGN, 01
-	db         TETSUJI_OOTA, 02
-	db      KAZUHITO_SEKINE, 03
-	db CREDITS_WAIT, 12
-
-	db           MAP_DESIGN, 00
-	db         TETSUJI_OOTA, 01
-	db        KOHJI_NISHINO, 02
-	db        NOBUHIRO_SEYA, 03
-	db CREDITS_WAIT, 12
-
-	db         COORDINATION, 01
-	db      HIROYUKI_ZINNAI, 02
-	db CREDITS_WAIT, 12
-
-	db            PRODUCERS, 00
-	db         SATORU_IWATA, 01
-	db       SATOSHI_YAMATO, 02
-	db     SHIGERU_MIYAMOTO, 03
-	db CREDITS_WAIT, 12
-
-	db            PRODUCERS, 01
-	db   TSUNEKAZU_ISHIHARA, 02
-	db CREDITS_WAIT, 12
-
-; Clear the banner.
-	db CREDITS_CLEAR
-
-	db CREDITS_WAIT, 01
-
-; Update the banner.
-	db CREDITS_SCENE, 03 ; Igglybuff
-
-	db     US_VERSION_STAFF, 02
-	db CREDITS_WAIT, 09
-
-	db      US_COORDINATION, 01
-	db          GAIL_TILDEN, 02
-	db        HIRO_NAKAMURA, 03
-	db CREDITS_WAIT, 12
-
-	db      US_COORDINATION, 01
-	db       JUNICHI_MASUDA, 02
-	db        SETH_MCMAHILL, 03
-	db CREDITS_WAIT, 12
-
-	db      US_COORDINATION, 01
-	db     HIROTO_ALEXANDER, 02
-	db     TERESA_LILLYGREN, 03
-	db CREDITS_WAIT, 12
-
-	db     TEXT_TRANSLATION, 01
-	db        NOB_OGASAWARA, 02
-	db CREDITS_WAIT, 12
-
-	db          PROGRAMMERS, 01
-	db      TERUKI_MURAKAWA, 02
-	db      KAZUYOSHI_OSAWA, 03
-	db CREDITS_WAIT, 12
-
-	db         PAAD_TESTING, 01
-	db       THOMAS_HERTZOG, 02
-	db         ERIK_JOHNSON, 03
-	db CREDITS_WAIT, 12
-
-	db      PRODUCT_TESTING, 00
-	db             PLANNING, 01
-	db CREDITS_WAIT, 12
-
-	db      PRODUCT_TESTING, 00
-	db       KEITA_NAKAMURA, 01
-	db      HIROTAKA_UEMURA, 02
-	db       HIROAKI_TAMURA, 03
-	db    NORIAKI_SAKAGUCHI, 04
-	db CREDITS_WAIT, 12
-
-	db      PRODUCT_TESTING, 00
-	db NCL_SUPER_MARIO_CLUB, 01
-	db          KENJI_SAIKI, 02
-	db         ATSUSHI_TADA, 03
-	db          MIYUKI_SATO, 04
-	db CREDITS_WAIT, 12
-
-	db       SPECIAL_THANKS, 00
-	db     KIMIKO_NAKAMICHI, 01
-	db           AKITO_MORI, 02
-	db CREDITS_WAIT, 12
-
-	db       SPECIAL_THANKS, 00
-	db        GAKUZI_NOMOTO, 01
-	db           AI_MASHIMA, 02
-	db      KUNIMI_KAWAMURA, 03
-	db CREDITS_WAIT, 12
-
-	db       SPECIAL_THANKS, 00
-	db    MIKIHIRO_ISHIKAWA, 01
-	db   HIDEYUKI_HASHIMOTO, 02
-	db CREDITS_WAIT, 12
-
-	db   EXECUTIVE_PRODUCER, 01
-	db     HIROSHI_YAMAUCHI, 02
-	db CREDITS_WAIT, 12
-
-	db            COPYRIGHT, 01
-	db CREDITS_WAIT, 09
-
-; Display "The End" graphic.
-	db CREDITS_THEEND
-
-	db CREDITS_WAIT, 20
-
-	db $ff ; end
-; 10ae13
-
-
-CreditsStrings:
-	dw .SatoshiTajiri
-	dw .JunichiMasuda
-	dw .TetsuyaWatanabe
-	dw .ShigekiMorimoto
-	dw .SousukeTamada
-	dw .TakenoriOota
-	dw .KenSugimori
-	dw .MotofumiFujiwara
-	dw .AtsukoNishida
-	dw .MuneoSaito
-	dw .SatoshiOota
-	dw .RenaYoshikawa
-	dw .JunOkutani
-	dw .HironobuYoshida
-	dw .AsukaIwashita
-	dw .GoIchinose
-	dw .MorikazuAoki
-	dw .KohjiNishino
-	dw .KenjiMatsushima
-	dw .ToshinobuMatsumiya
-	dw .SatoruIwata
-	dw .NobuhiroSeya
-	dw .KazuhitoSekine
-	dw .TetsujiOota
-	dw .NclSuperMarioClub
-	dw .Sarugakucho
-	dw .AkitoMori
-	dw .TakahiroHarada
-	dw .TohruHashimoto
-	dw .NoboruMatsumoto
-	dw .TakehiroIzushi
-	dw .TakashiKawaguchi
-	dw .TsunekazuIshihara
-	dw .HiroshiYamauchi
-	dw .KenjiSaiki
-	dw .AtsushiTada
-	dw .NaokoKawakami
-	dw .HiroyukiZinnai
-	dw .KunimiKawamura
-	dw .HisashiSogabe
-	dw .KeitaKagaya
-	dw .YoshinoriMatsuda
-	dw .HitomiSato
-	dw .ToruOsawa
-	dw .TakaoOhara
-	dw .YuichiroIto
-	dw .TakaoShimizu
-	dw .Planning
-	dw .KeitaNakamura
-	dw .HirotakaUemura
-	dw .HiroakiTamura
-	dw .NoriakiSakaguchi
-	dw .MiyukiSato
-	dw .GakuziNomoto
-	dw .AiMashima
-	dw .MikihiroIshikawa
-	dw .HideyukiHashimoto
-	dw .SatoshiYamato
-	dw .ShigeruMiyamoto
-	dw .GailTilden
-	dw .NobOgasawara
-	dw .SethMcMahill
-	dw .HirotoAlexander
-	dw .TeresaLillygren
-	dw .ThomasHertzog
-	dw .ErikJohnson
-	dw .HiroNakamura
-	dw .TerukiMurakawa
-	dw .KazuyoshiOsawa
-	dw .KimikoNakamichi
-	dw .End
-	dw .Unknown
-	dw .Staff
-	dw .Director
-	dw .CoDirector
-	dw .Programmers
-	dw .GraphicsDirector
-	dw .MonsterDesign
-	dw .GraphicsDesign
-	dw .Music
-	dw .SoundEffects
-	dw .GameDesign
-	dw .GameScenario
-	dw .ToolProgramming
-	dw .ParametricDesign
-	dw .ScriptDesign
-	dw .MapDataDesign
-	dw .MapDesign
-	dw .ProductTesting
-	dw .SpecialThanks
-	dw .Producers
-	dw .ExecutiveProducer
-	dw .PokemonAnimation
-	dw .PokedexText
-	dw .MobilePrjLeader
-	dw .MobileSystemAd
-	dw .MobileStadiumDir
-	dw .Coordination
-	dw .Copyright
-	dw .UsVersionStaff
-	dw .UsCoordination
-	dw .TextTranslation
-	dw .PaadTesting
-
-.SatoshiTajiri:       db "   SATOSHI TAJIRI@"         ; "たじり さとし@"
-.JunichiMasuda:       db "   JUNICHI MASUDA@"         ; "ますだ じゅんいち@"
-.TetsuyaWatanabe:     db "  TETSUYA WATANABE@"        ; "わたなべ てつや@"
-.ShigekiMorimoto:     db "  SHIGEKI MORIMOTO@"        ; "もりもと しげき@"
-.SousukeTamada:       db "   SOUSUKE TAMADA@"         ; "たまだ そうすけ@"
-.TakenoriOota:        db "   TAKENORI OOTA@"          ; "おおた たけのり@"
-.KenSugimori:         db "    KEN SUGIMORI@"          ; "すぎもり けん@"
-.MotofumiFujiwara:    db " MOTOFUMI FUJIWARA@"        ; "ふじわら もとふみ@"
-.AtsukoNishida:       db "   ATSUKO NISHIDA@"         ; "にしだ あつこ@"
-.MuneoSaito:          db "    MUNEO SAITO@"           ; "さいとう むねお@"
-.SatoshiOota:         db "    SATOSHI OOTA@"          ; "おおた さとし@"
-.RenaYoshikawa:       db "   RENA YOSHIKAWA@"         ; "よしかわ れな@"
-.JunOkutani:          db "    JUN OKUTANI@"           ; "おくたに じゅん@"
-.HironobuYoshida:     db "  HIRONOBU YOSHIDA@"        ; "よしだ ひろのぶ@"
-.AsukaIwashita:       db "   ASUKA IWASHITA@"         ; "いわした あすか@"
-.GoIchinose:          db "    GO ICHINOSE@"           ; "いちのせ ごう@"
-.MorikazuAoki:        db "   MORIKAZU AOKI@"          ; "あおき もりかず@"
-.KohjiNishino:        db "   KOHJI NISHINO@"          ; "にしの こうじ@"
-.KenjiMatsushima:     db "  KENJI MATSUSHIMA@"        ; "まつしま けんじ@"
-.ToshinobuMatsumiya:  db "TOSHINOBU MATSUMIYA@"       ; "まつみや としのぶ@"
-.SatoruIwata:         db "    SATORU IWATA@"          ; "いわた さとる@"
-.NobuhiroSeya:        db "   NOBUHIRO SEYA@"          ; "せや のぶひろ@"
-.KazuhitoSekine:      db "  KAZUHITO SEKINE@"         ; "せきね かずひと@"
-.TetsujiOota:         db "    TETSUJI OOTA@"          ; "おおた てつじ@"
-.NclSuperMarioClub:   db "NCL SUPER MARIO CLUB@"      ; "スーパーマりォクラブ@"
-.Sarugakucho:         db "    SARUGAKUCHO@"           ; "さるがくちょう@"
-.AkitoMori:           db "     AKITO MORI@"           ; "もり あきと@"
-.TakahiroHarada:      db "  TAKAHIRO HARADA@"         ; "はらだ たかひろ@"
-.TohruHashimoto:      db "  TOHRU HASHIMOTO@"         ; "はしもと とおる@"
-.NoboruMatsumoto:     db "  NOBORU MATSUMOTO@"        ; "まつもと のぼる@"
-.TakehiroIzushi:      db "  TAKEHIRO IZUSHI@"         ; "いずし たけひろ@"
-.TakashiKawaguchi:    db " TAKASHI KAWAGUCHI@"        ; "かわぐち たかし@"
-.TsunekazuIshihara:   db " TSUNEKAZU ISHIHARA@"       ; "いしはら つねかず@"
-.HiroshiYamauchi:     db "  HIROSHI YAMAUCHI@"        ; "やまうち ひろし@"
-.KenjiSaiki:          db "    KENJI SAIKI@"           ; "さいき けんじ@"
-.AtsushiTada:         db "    ATSUSHI TADA@"          ; "ただ あつし@"
-.NaokoKawakami:       db "   NAOKO KAWAKAMI@"         ; "かわかみ なおこ@"
-.HiroyukiZinnai:      db "  HIROYUKI ZINNAI@"         ; "じんない ひろゆき@"
-.KunimiKawamura:      db "  KUNIMI KAWAMURA@"         ; "かわむら くにみ@"
-.HisashiSogabe:       db "   HISASHI SOGABE@"         ; "そがべ ひさし@"
-.KeitaKagaya:         db "    KEITA KAGAYA@"          ; "かがや けいた@"
-.YoshinoriMatsuda:    db " YOSHINORI MATSUDA@"        ; "まつだ よしのり@"
-.HitomiSato:          db "    HITOMI SATO@"           ; "さとう ひとみ@"
-.ToruOsawa:           db "     TORU OSAWA@"           ; "おおさわ とおる@"
-.TakaoOhara:          db "    TAKAO OHARA@"           ; "おおはら たかお@"
-.YuichiroIto:         db "    YUICHIRO ITO@"          ; "いとう ゆういちろう@"
-.TakaoShimizu:        db "   TAKAO SHIMIZU@"          ; "しみず たかお@"
-.Planning:            db " SPECIAL PRODUCTION", $4e
-                      db "      PLANNING", $4e        ; "きかくかいはつぶ@"
-                      db " & DEVELOPMENT DEPT.@"
-.KeitaNakamura:       db "   KEITA NAKAMURA@"         ; "なかむら けいた@"
-.HirotakaUemura:      db "  HIROTAKA UEMURA@"         ; "うえむら ひろたか@"
-.HiroakiTamura:       db "   HIROAKI TAMURA@"         ; "たむら ひろあき@"
-.NoriakiSakaguchi:    db " NORIAKI SAKAGUCHI@"        ; "さかぐち のりあき@"
-.MiyukiSato:          db "    MIYUKI SATO@"           ; "さとう みゆき@"
-.GakuziNomoto:        db "   GAKUZI NOMOTO@"          ; "のもと がくじ@"
-.AiMashima:           db "     AI MASHIMA@"           ; "ましま あい@"
-.MikihiroIshikawa:    db " MIKIHIRO ISHIKAWA@"        ; "いしかわ みきひろ@"
-.HideyukiHashimoto:   db " HIDEYUKI HASHIMOTO@"       ; "はしもと ひでゆき@"
-.SatoshiYamato:       db "   SATOSHI YAMATO@"         ; "やまと さとし@"
-.ShigeruMiyamoto:     db "  SHIGERU MIYAMOTO@"        ; "みやもと しげる@"
-.End:                 db "        END@"               ; "おしまい@"
-.Unknown:             db "      ????????@"            ; "????????@"
-.GailTilden:          db "    GAIL TILDEN@"
-.NobOgasawara:        db "   NOB OGASAWARA@"
-.SethMcMahill:        db "   SETH McMAHILL@"
-.HirotoAlexander:     db "  HIROTO ALEXANDER@"
-.TeresaLillygren:     db "  TERESA LILLYGREN@"
-.ThomasHertzog:       db "   THOMAS HERTZOG@"
-.ErikJohnson:         db "    ERIK JOHNSON@"
-.HiroNakamura:        db "   HIRO NAKAMURA@"
-.TerukiMurakawa:      db "  TERUKI MURAKAWA@"
-.KazuyoshiOsawa:      db "  KAZUYOSHI OSAWA@"
-.KimikoNakamichi:     db "  KIMIKO NAKAMICHI@"
-.Staff:               db "      #MON", $4e            ; "ポケットモンスター", $4e
-                      db "  CRYSTAL VERSION", $4e     ; "  クりスタル バージョン", $4e
-                      db "       STAFF@"              ; "    スタッフ@"
-.Director:            db "      DIRECTOR@"            ; "エグゼクティブ ディレクター@"
-.CoDirector:          db "    CO-DIRECTOR@"           ; "ディレクター@"
-.Programmers:         db "    PROGRAMMERS@"           ; "プログラム@"
-.GraphicsDirector:    db " GRAPHICS DIRECTOR@"        ; "グラフィック ディレクター@"
-.MonsterDesign:       db "   MONSTER DESIGN@"         ; "# デザイン@"
-.GraphicsDesign:      db "  GRAPHICS DESIGN@"         ; "グラフィック デザイン@"
-.Music:               db "       MUSIC@"              ; "おんがく@"
-.SoundEffects:        db "   SOUND EFFECTS@"          ; "サウンド エフ→クト@"
-.GameDesign:          db "    GAME DESIGN@"           ; "ゲームデザイン@"
-.GameScenario:        db "   GAME SCENARIO@"          ; "シナりォ@"
-.ToolProgramming:     db "  TOOL PROGRAMMING@"        ; "ツール プログラム@"
-.ParametricDesign:    db " PARAMETRIC DESIGN@"        ; "パラメーター せってい@"
-.ScriptDesign:        db "   SCRIPT DESIGN@"          ; "スクりプト せってい@"
-.MapDataDesign:       db "  MAP DATA DESIGN@"         ; "マップデータ せってい@"
-.MapDesign:           db "     MAP DESIGN@"           ; "マップ デザイン@"
-.ProductTesting:      db "  PRODUCT TESTING@"         ; "デバッグプレイ@"
-.SpecialThanks:       db "   SPECIAL THANKS@"         ; "スぺシャルサンクス@"
-.Producers:           db "     PRODUCERS@"            ; "プロデューサー@"
-.ExecutiveProducer:   db " EXECUTIVE PRODUCER@"       ; "エグゼクティブ プロデューサー@"
-.PokemonAnimation:    db " #MON ANIMATION@"           ; "# アニメーション@"
-.PokedexText:         db "    #DEX TEXT@"             ; "ずかん テキスト@"
-.MobilePrjLeader:     db " MOBILE PRJ. LEADER@"       ; "モバイルプロジ→クト りーダー@"
-.MobileSystemAd:      db " MOBILE SYSTEM AD.@"        ; "モバイル システムアドバイザー@"
-.MobileStadiumDir:    db "MOBILE STADIUM DIR.@"       ; "モバイルスタジアム ディレクター@"
-.Coordination:        db "    COORDINATION@"          ; "コーディネーター@"
-.UsVersionStaff:      db "  US VERSION STAFF@"
-.UsCoordination:      db "  US COORDINATION@"
-.TextTranslation:     db "  TEXT TRANSLATION@"
-.PaadTesting:         db "    PAAD TESTING@"
-
-.Copyright:
-;  (C) 1  9  9  5 - 2  0  0  1     N  i  n  t  e  n  d  o
-db $60,$61,$62,$63,$64,$65,$66, $67, $68, $69, $6a, $6b, $6c, $4e
-;  (C) 1  9  9  5 - 2  0  0  1    C  r  e  a  t  u  r  e  s      i  n  c .
-db $60,$61,$62,$63,$64,$65,$66, $6d, $6e, $6f, $70, $71, $72,  $7a, $7b, $7c, $4e
-;  (C) 1  9  9  5 - 2  0  0  1  G   A   M   E   F   R   E   A   K     i  n  c .
-db $60,$61,$62,$63,$64,$65,$66, $73, $74, $75, $76, $77, $78, $79,  $7a, $7b, $7c, "@"
-
--- /dev/null
+++ b/engine/bittable2.asm
@@ -1,0 +1,198 @@
+; All locations are in WRAM bank 1.
+
+	; location, bit
+
+	; pokegear
+	dwb $d957, %00000010 ; radio card
+	dwb $d957, %00000001 ; map card
+	dwb $d957, %00000100 ; phone card
+	dwb $d957, %00001000 ; expn card
+	dwb $d957, %10000000 ; on/off
+	
+	;   DaycareMan, %10000000 ; daycare 1 on
+	dwb DaycareMan, %01000000 ; monster 1 and 2 are compatible
+	;   DaycareMan, %00100000 ; egg is ready
+	dwb DaycareMan, %00000001 ; monster 1 in daycare
+	
+	;   DaycareLady, %10000000 = daycare 2 on
+	dwb DaycareLady, %00000001 ; monster 2 in daycare
+	
+	dwb $d854, %00000001 ; mom saving money
+	dwb $d854, %10000000 ; dst
+	
+	dwb $dc39, %00000001
+	
+	dwb $d84c, %00000001 ; pokedex
+	dwb $d84c, %00000010 ; unown dex
+	dwb $d84c, %00001000 ; pokerus
+	dwb $d84c, %00010000 ; rocket signal on ch20
+	dwb $d84c, %01000000 ; credits skip
+	dwb $d84c, %10000000 ; bug contest on
+	dwb $d84d, %00000100 ; bug contest timer
+	dwb $d84d, %00000010 ; rockets in radio tower
+	dwb $d84d, %00000001 ; bike shop call enabled (1024 bike steps reqd)
+	dwb $d84d, %00010000
+	dwb $d84d, %00100000 ; give pokerus; berry -> berry juice when trading?
+	dwb $d84d, %01000000
+	dwb $d84d, %10000000 ; rockets in mahogany
+	
+	dwb $dbf5, %00000001 ; strength active
+	dwb $dbf5, %00000010 ; always on bike (cant surf)
+	dwb $dbf5, %00000100 ; downhill (cycling road)
+	
+	dwb JohtoBadges, %00000001 ; zephyrbadge
+	dwb JohtoBadges, %00000010 ; hivebadge
+	dwb JohtoBadges, %00000100 ; plainbadge
+	dwb JohtoBadges, %00001000 ; fogbadge
+	dwb JohtoBadges, %00010000 ; mineralbadge
+	dwb JohtoBadges, %00100000 ; stormbadge
+	dwb JohtoBadges, %01000000 ; glacierbadge
+	dwb JohtoBadges, %10000000 ; risingbadge
+	
+	dwb KantoBadges, %00000001 ; boulderbadge
+	dwb KantoBadges, %00000010 ; cascadebadge
+	dwb KantoBadges, %00000100 ; thunderbadge
+	dwb KantoBadges, %00001000 ; rainbowbadge
+	dwb KantoBadges, %00010000 ; soulbadge
+	dwb KantoBadges, %00100000 ; marshbadge
+	dwb KantoBadges, %01000000 ; volcanobadge
+	dwb KantoBadges, %10000000 ; earthbadge
+	
+	; unown sets
+	dwb UnlockedUnowns, %00000001 ; 1
+	dwb UnlockedUnowns, %00000010 ; 2
+	dwb UnlockedUnowns, %00000100 ; 3
+	dwb UnlockedUnowns, %00001000 ; 4
+	dwb UnlockedUnowns, %00010000 ; 5
+	dwb UnlockedUnowns, %00100000 ; 6
+	dwb UnlockedUnowns, %01000000 ; 7
+	dwb UnlockedUnowns, %10000000 ; 8
+	
+	; fly
+	dwb FlypointPerms, %00000001 ; your house
+	dwb FlypointPerms, %00000010 ; viridian pokecenter
+	dwb FlypointPerms, %00000100 ; pallet
+	dwb FlypointPerms, %00001000 ; viridian
+	dwb FlypointPerms, %00010000 ; pewter
+	dwb FlypointPerms, %00100000 ; cerulean
+	dwb FlypointPerms, %01000000 ; rock tunnel
+	dwb FlypointPerms, %10000000 ; vermilion
+	dwb FlypointPerms + 1, %00000001 ; lavender
+	dwb FlypointPerms + 1, %00000010 ; saffron
+	dwb FlypointPerms + 1, %00000100 ; celadon
+	dwb FlypointPerms + 1, %00001000 ; fuchsia
+	dwb FlypointPerms + 1, %00010000 ; cinnabar
+	dwb FlypointPerms + 1, %00100000 ; indigo plateau
+	dwb FlypointPerms + 1, %01000000 ; new bark
+	dwb FlypointPerms + 1, %10000000 ; cherrygrove
+	dwb FlypointPerms + 2, %00000001 ; violet
+	dwb FlypointPerms + 2, %00000100 ; azalea
+	dwb FlypointPerms + 2, %00001000 ; cianwood
+	dwb FlypointPerms + 2, %00010000 ; goldenrod
+	dwb FlypointPerms + 2, %00100000 ; olivine
+	dwb FlypointPerms + 2, %01000000 ; ecruteak
+	dwb FlypointPerms + 2, %10000000 ; mahogany
+	dwb FlypointPerms + 3, %00000001 ; lake of rage
+	dwb FlypointPerms + 3, %00000010 ; blackthorn
+	dwb FlypointPerms + 3, %00000100 ; silver cave
+	dwb FlypointPerms + 3, %00010000 ; unused
+	
+	dwb $dc9d, %00000001 ; lucky number show
+	dwb $d84d, %00001000
+	
+	dwb $dc1e, %00000001 ; kurt making balls
+	dwb $dc1e, %00000010
+	dwb $dc1e, %00000100 ; special wilddata?
+	dwb $dc1e, %00001000 ; time capsule (24h wait)
+	dwb $dc1e, %00010000 ; all fruit trees
+	dwb $dc1e, %00100000 ; shuckle given
+	dwb $dc1e, %01000000 ; goldenrod underground merchant closed
+	dwb $dc1e, %10000000 ; fought in trainer hall today
+	
+	dwb $dc1f, %00000001 ; mt moon square clefairy
+	dwb $dc1f, %00000010 ; union cave lapras
+	dwb $dc1f, %00000100 ; goldenrod underground haircut used
+	dwb $dc1f, %00001000 ; goldenrod mall happiness event floor05 person07
+	dwb $dc1f, %00010000 ; tea in blues house
+	dwb $dc1f, %00100000 ; indigo plateau rival fight
+	dwb $dc1f, %01000000
+	dwb $dc1f, %10000000
+	
+	dwb $dc20, %00000001 ; $60
+	dwb $dc20, %00000010 ; goldenrod dept store sale is on
+	
+	dwb $cfbc, %10000000 ; $62
+	
+	dwb PlayerGender, %00000001 ; player is female
+	
+	dwb $dbf3, %00000100 ; have gs ball after kurt examined it
+	
+	; rematches
+	dwb $dc4c, %00000001 ; jack
+	dwb $dc4c, %00000010 ; huey
+	dwb $dc4c, %00000100 ; gaven
+	dwb $dc4c, %00001000 ; beth
+	dwb $dc4c, %00010000 ; jose
+	dwb $dc4c, %00100000 ; reena
+	dwb $dc4c, %01000000 ; joey
+	dwb $dc4c, %10000000 ; wade
+	dwb $dc4d, %00000001 ; ralph
+	dwb $dc4d, %00000010 ; liz
+	dwb $dc4d, %00000100 ; anthony
+	dwb $dc4d, %00001000 ; todd
+	dwb $dc4d, %00010000 ; gina
+	dwb $dc4d, %00100000 ; arnie
+	dwb $dc4d, %01000000 ; alan
+	dwb $dc4d, %10000000 ; dana
+	dwb $dc4e, %00000001 ; chad
+	dwb $dc4e, %00000010 ; tully
+	dwb $dc4e, %00000100 ; brent
+	dwb $dc4e, %00001000 ; tiffany
+	dwb $dc4e, %00010000 ; vance
+	dwb $dc4e, %00100000 ; wilton
+	dwb $dc4e, %01000000 ; parry
+	dwb $dc4e, %10000000 ; erin
+	
+	dwb $dc50, %00000001 ; beverly has nugget
+	dwb $dc50, %00000010 ; jose has star piece
+	dwb $dc50, %00000100 ; wade has item (see bittable1 $032b-e)
+	dwb $dc50, %00001000 ; gina has leaf stone
+	dwb $dc50, %00010000 ; alan has fire stone
+	dwb $dc50, %00100000 ; liz has thunderstone
+	dwb $dc50, %01000000 ; derek has nugget
+	dwb $dc50, %10000000 ; tully has water stone
+	
+	dwb $dc51, %00000001 ; tiffany has pink bow
+	dwb $dc51, %00000010 ; wilton has item (see bittable1 $032f-31)
+	
+	dwb $dc54, %00000001
+	dwb $dc54, %00000010
+	dwb $dc54, %00000100
+	dwb $dc54, %00001000
+	dwb $dc54, %00010000
+	dwb $dc54, %00100000
+	dwb $dc54, %01000000
+	dwb $dc54, %10000000
+	
+	dwb $dc55, %00000001
+	dwb $dc55, %00000010
+	dwb $dc55, %00000100
+	dwb $dc55, %00001000
+	dwb $dc55, %00010000
+	dwb $dc55, %00100000
+	dwb $dc55, %01000000
+	dwb $dc55, %10000000
+	
+	dwb $dc56, %00000001
+	dwb $dc56, %00000010
+	dwb $dc56, %00000100
+	dwb $dc56, %00001000
+	dwb $dc56, %00010000
+	dwb $dc56, %00100000
+	dwb $dc56, %01000000
+	dwb $dc56, %10000000
+	
+	dwb $d45b, %00000100 ; female player has been transformed into male
+	
+	dwb $dc20, %00000100 ; dunsparce swarm
+	dwb $dc20, %00001000 ; yanma swarm
--- /dev/null
+++ b/engine/credits.asm
@@ -1,0 +1,824 @@
+SATOSHI_TAJIRI       EQU 00
+JUNICHI_MASUDA       EQU 01
+TETSUYA_WATANABE     EQU 02
+SHIGEKI_MORIMOTO     EQU 03
+SOUSUKE_TAMADA       EQU 04
+TAKENORI_OOTA        EQU 05
+KEN_SUGIMORI         EQU 06
+MOTOFUMI_FUJIWARA    EQU 07
+ATSUKO_NISHIDA       EQU 08
+MUNEO_SAITO          EQU 09
+SATOSHI_OOTA         EQU 10
+RENA_YOSHIKAWA       EQU 11
+JUN_OKUTANI          EQU 12
+HIRONOBU_YOSHIDA     EQU 13
+ASUKA_IWASHITA       EQU 14
+GO_ICHINOSE          EQU 15
+MORIKAZU_AOKI        EQU 16
+KOHJI_NISHINO        EQU 17
+KENJI_MATSUSHIMA     EQU 18
+TOSHINOBU_MATSUMIYA  EQU 19
+SATORU_IWATA         EQU 20
+NOBUHIRO_SEYA        EQU 21
+KAZUHITO_SEKINE      EQU 22
+TETSUJI_OOTA         EQU 23
+NCL_SUPER_MARIO_CLUB EQU 24
+SARUGAKUCHO          EQU 25
+AKITO_MORI           EQU 26
+TAKAHIRO_HARADA      EQU 27
+TOHRU_HASHIMOTO      EQU 28
+NOBORU_MATSUMOTO     EQU 29
+TAKEHIRO_IZUSHI      EQU 30
+TAKASHI_KAWAGUCHI    EQU 31
+TSUNEKAZU_ISHIHARA   EQU 32
+HIROSHI_YAMAUCHI     EQU 33
+KENJI_SAIKI          EQU 34
+ATSUSHI_TADA         EQU 35
+NAOKO_KAWAKAMI       EQU 36
+HIROYUKI_ZINNAI      EQU 37
+KUNIMI_KAWAMURA      EQU 38
+HISASHI_SOGABE       EQU 39
+KEITA_KAGAYA         EQU 40
+YOSHINORI_MATSUDA    EQU 41
+HITOMI_SATO          EQU 42
+TORU_OSAWA           EQU 43
+TAKAO_OHARA          EQU 44
+YUICHIRO_ITO         EQU 45
+TAKAO_SHIMIZU        EQU 46
+PLANNING             EQU 47
+KEITA_NAKAMURA       EQU 48
+HIROTAKA_UEMURA      EQU 49
+HIROAKI_TAMURA       EQU 50
+NORIAKI_SAKAGUCHI    EQU 51
+MIYUKI_SATO          EQU 52
+GAKUZI_NOMOTO        EQU 53
+AI_MASHIMA           EQU 54
+MIKIHIRO_ISHIKAWA    EQU 55
+HIDEYUKI_HASHIMOTO   EQU 56
+SATOSHI_YAMATO       EQU 57
+SHIGERU_MIYAMOTO     EQU 58
+GAIL_TILDEN          EQU 59
+NOB_OGASAWARA        EQU 60
+SETH_MCMAHILL        EQU 61
+HIROTO_ALEXANDER     EQU 62
+TERESA_LILLYGREN     EQU 63
+THOMAS_HERTZOG       EQU 64
+ERIK_JOHNSON         EQU 65
+HIRO_NAKAMURA        EQU 66
+TERUKI_MURAKAWA      EQU 67
+KAZUYOSHI_OSAWA      EQU 68
+KIMIKO_NAKAMICHI     EQU 69
+END                  EQU 70
+CREDITS_UNKNOWN      EQU 71
+STAFF                EQU 72
+DIRECTOR             EQU 73
+CODIRECTOR           EQU 74
+PROGRAMMERS          EQU 75
+GRAPHICS_DIRECTOR    EQU 76
+MONSTER_DESIGN       EQU 77
+GRAPHICS_DESIGN      EQU 78
+MUSIC                EQU 79
+SOUND_EFFECTS        EQU 80
+GAME_DESIGN          EQU 81
+GAME_SCENARIO        EQU 82
+TOOL_PROGRAMMING     EQU 83
+PARAMETRIC_DESIGN    EQU 84
+SCRIPT_DESIGN        EQU 85
+MAP_DATA_DESIGN      EQU 86
+MAP_DESIGN           EQU 87
+PRODUCT_TESTING      EQU 88
+SPECIAL_THANKS       EQU 89
+PRODUCERS            EQU 90
+EXECUTIVE_PRODUCER   EQU 91
+POKEMON_ANIMATION    EQU 92
+POKEDEX_TEXT         EQU 93
+MOBILE_PRJ_LEADER    EQU 94
+MOBILE_SYSTEM_AD     EQU 95
+MOBILE_STADIUM_DIR   EQU 96
+COORDINATION         EQU 97
+COPYRIGHT            EQU 98
+US_VERSION_STAFF     EQU 99
+US_COORDINATION      EQU 100
+TEXT_TRANSLATION     EQU 101
+PAAD_TESTING         EQU 102
+
+CREDITS_THEEND       EQU $f9
+CREDITS_WAIT2        EQU $fa
+CREDITS_MUSIC        EQU $fb
+CREDITS_CLEAR        EQU $fc
+CREDITS_SCENE        EQU $fd
+CREDITS_WAIT         EQU $fe
+
+
+ParseCredits: ; 1099aa
+	ld hl, $cf63
+	bit 7, [hl]
+	jp nz, .done
+	
+; Wait until the timer has run out to parse the next command.
+	ld hl, CreditsTimer
+	ld a, [hl]
+	and a
+	jr z, .parse
+	
+; One tick has passed.
+	dec [hl]
+	jp .done
+	
+.parse
+; First, let's clear the current text display,
+; starting from line 5.
+	xor a
+	ld [$ffd4], a
+	hlcoord 0, 5
+	ld bc, 20 * 12
+	ld a, " "
+	call ByteFill
+	
+; Then read the script.
+	
+.loop
+	call .get
+	
+; Commands:
+	cp $ff
+	jp z, .end
+	cp CREDITS_WAIT
+	jr z, .wait
+	cp CREDITS_SCENE
+	jr z, .scene
+	cp CREDITS_CLEAR
+	jr z, .clear
+	cp CREDITS_MUSIC
+	jr z, .music
+	cp CREDITS_WAIT2
+	jr z, .wait2
+	cp CREDITS_THEEND
+	jr z, .theend
+	
+; If it's not a command, it's a string identifier.
+	
+	push af
+	ld e, a
+	ld d, 0
+	ld hl, CreditsStrings
+	add hl, de
+	add hl, de
+	ld a, [hli]
+	ld d, [hl]
+	ld e, a
+	pop af
+	
+; Strings spanning multiple lines have special cases.
+	
+	cp COPYRIGHT
+	jr z, .copyright
+	
+	cp STAFF
+	jr c, .staff
+	
+; The rest start from line 6.
+
+	hlcoord 0, 6
+	jr .print
+	
+.copyright
+	hlcoord 2, 6
+	jr .print
+	
+.staff
+	hlcoord 0, 6
+	
+.print
+; Print strings spaced every two lines.
+	call .get
+	ld bc, 20 * 2
+	call AddNTimes
+	call PlaceString
+	jr .loop
+	
+.theend
+; Display "The End" graphic.
+	call $5c11
+	jr .loop
+	
+.scene
+; Update the scene number and corresponding palette.
+	call .get
+	ld [$cf65], a ; scene
+	xor a
+	ld [$cf64], a ; frame
+	call GetCreditsPalette
+	call $32f9 ; update hw pal registers
+	jr .loop
+	
+.clear
+; Clear the banner.
+	ld a, $ff
+	ld [$cf64], a ; frame
+	jr .loop
+	
+.music
+; Play the credits music.
+	ld de, MUSIC_CREDITS
+	push de
+	ld de, MUSIC_NONE
+	call StartMusic
+	call DelayFrame
+	pop de
+	call StartMusic
+	jp .loop
+	
+.wait2
+; Wait for some amount of ticks.
+	call .get
+	ld [CreditsTimer], a
+	jr .done
+	
+.wait
+; Wait for some amount of ticks, and do something else.
+	call .get
+	ld [CreditsTimer], a
+	
+	xor a
+	ld [$ffd5], a
+	ld a, 1
+	ld [$ffd4], a
+	
+.done
+	jp $5951
+	
+.end
+; Stop execution.
+	ld hl, $cf63
+	set 7, [hl]
+	ld a, $20
+	ld [$c2a7], a
+	ld a, $5c
+	ld [$c2a9], a
+	ld a, $00
+	ld [$c2aa], a
+	ret
+
+.get
+; Get byte CreditsPos from CreditsScript
+	push hl
+	push de
+	ld a, [CreditsPos]
+	ld e, a
+	ld a, [CreditsPos+1]
+	ld d, a
+	ld hl, CreditsScript
+	add hl, de
+	
+	inc de
+	ld a, e
+	ld [CreditsPos], a
+	ld a, d
+	ld [CreditsPos+1], a
+	ld a, [hl]
+	pop de
+	pop hl
+	ret
+; 109a95
+
+
+INCBIN "baserom.gbc", $109a95, $109b2c - $109a95
+
+
+GetCreditsPalette: ; 109b2c
+	call .GetPalAddress
+	
+	push hl
+	ld a, 0
+	call .UpdatePals
+	pop hl
+	ret
+	
+.GetPalAddress
+; Each set of palette data is 24 bytes long.
+	ld a, [$cf65] ; scene
+	and 3
+	add a
+	add a ; * 8
+	add a
+	ld e, a
+	ld d, 0
+	ld hl, .CreditsPalettes
+	add hl, de
+	add hl, de ; * 3
+	add hl, de
+	ret
+	
+.UpdatePals
+; Update the first three colors in both palette buffers.
+	
+	push af
+	push hl
+	add $00 ; lo($d000)
+	ld e, a
+	ld a, 0
+	adc $d0 ; hi($d000)
+	ld d, a
+	ld bc, 24
+	call CopyBytes
+	
+	pop hl
+	pop af
+	add $80 ; lo($d080)
+	ld e, a
+	ld a, 0
+	adc $d0 ; hi($d080)
+	ld d, a
+	ld bc, 24
+	call CopyBytes
+	ret
+
+
+.CreditsPalettes
+INCBIN "baserom.gbc",$109b6a,$18 ; pichu.pal
+INCBIN "baserom.gbc",$109b82,$18 ; smoochum.pal
+INCBIN "baserom.gbc",$109b9a,$18 ; ditto.pal
+INCBIN "baserom.gbc",$109bb2,$18 ; igglybuff.pal
+; 109bca
+
+INCBIN "baserom.gbc", $109bca, $109c24 - $109bca
+
+CreditsGFX:
+INCBIN "gfx/credits/border.2bpp"
+INCBIN "gfx/credits/pichu.2bpp"
+INCBIN "gfx/credits/smoochum.2bpp"
+INCBIN "gfx/credits/ditto.2bpp"
+INCBIN "gfx/credits/igglybuff.2bpp"
+
+
+CreditsScript: ; 10acb4
+
+; Clear the banner.
+	db CREDITS_CLEAR
+
+; Pokemon Crystal Version Staff
+	db                STAFF, 01
+	db CREDITS_WAIT, 08
+
+; Play the credits music.
+	db CREDITS_MUSIC
+
+	db CREDITS_WAIT2, 10
+
+	db CREDITS_WAIT, 01
+
+; Update the banner.
+	db CREDITS_SCENE, 00 ; Pichu
+
+	db             DIRECTOR, 01
+	db       SATOSHI_TAJIRI, 02
+	db CREDITS_WAIT, 12
+
+	db           CODIRECTOR, 01
+	db       JUNICHI_MASUDA, 02
+	db CREDITS_WAIT, 12
+
+	db          PROGRAMMERS, 00
+	db       SOUSUKE_TAMADA, 01
+	db       HISASHI_SOGABE, 02
+	db         KEITA_KAGAYA, 03
+	db    YOSHINORI_MATSUDA, 04
+	db CREDITS_WAIT, 12
+
+	db          PROGRAMMERS, 00
+	db     SHIGEKI_MORIMOTO, 01
+	db     TETSUYA_WATANABE, 02
+	db        TAKENORI_OOTA, 03
+	db CREDITS_WAIT, 12
+
+	db    GRAPHICS_DIRECTOR, 01
+	db         KEN_SUGIMORI, 02
+	db CREDITS_WAIT, 12
+
+	db       MONSTER_DESIGN, 00
+	db         KEN_SUGIMORI, 01
+	db    MOTOFUMI_FUJIWARA, 02
+	db     SHIGEKI_MORIMOTO, 03
+	db     HIRONOBU_YOSHIDA, 04
+	db         SATOSHI_OOTA, 05
+	db CREDITS_WAIT, 12
+
+	db       MONSTER_DESIGN, 00
+	db       ATSUKO_NISHIDA, 01
+	db          MUNEO_SAITO, 02
+	db       RENA_YOSHIKAWA, 03
+	db CREDITS_WAIT, 12
+
+	db    POKEMON_ANIMATION, 01
+	db     HIRONOBU_YOSHIDA, 02
+	db          JUN_OKUTANI, 03
+	db CREDITS_WAIT, 12
+
+; Clear the banner.
+	db CREDITS_CLEAR
+
+	db CREDITS_WAIT, 01
+
+; Update the banner.
+	db CREDITS_SCENE, 01 ; Smoochum
+
+	db      GRAPHICS_DESIGN, 00
+	db     HIRONOBU_YOSHIDA, 01
+	db          JUN_OKUTANI, 02
+	db       ASUKA_IWASHITA, 03
+	db     TETSUYA_WATANABE, 04
+	db CREDITS_WAIT, 12
+
+	db                MUSIC, 00
+	db       JUNICHI_MASUDA, 01
+	db        MORIKAZU_AOKI, 02
+	db          GO_ICHINOSE, 03
+	db CREDITS_WAIT, 12
+
+	db        SOUND_EFFECTS, 00
+	db        MORIKAZU_AOKI, 01
+	db       JUNICHI_MASUDA, 02
+	db     TETSUYA_WATANABE, 03
+	db CREDITS_WAIT, 12
+
+	db          GAME_DESIGN, 00
+	db       JUNICHI_MASUDA, 01
+	db     SHIGEKI_MORIMOTO, 02
+	db        KOHJI_NISHINO, 03
+	db CREDITS_WAIT, 12
+
+	db          GAME_DESIGN, 00
+	db         TETSUJI_OOTA, 01
+	db          HITOMI_SATO, 02
+	db     KENJI_MATSUSHIMA, 03
+	db CREDITS_WAIT, 12
+
+	db        GAME_SCENARIO, 00
+	db       JUNICHI_MASUDA, 01
+	db        KOHJI_NISHINO, 02
+	db  TOSHINOBU_MATSUMIYA, 03
+	db     KENJI_MATSUSHIMA, 04
+	db CREDITS_WAIT, 12
+
+	db         POKEDEX_TEXT, 01
+	db  TOSHINOBU_MATSUMIYA, 02
+	db CREDITS_WAIT, 12
+
+	db     TOOL_PROGRAMMING, 01
+	db       SOUSUKE_TAMADA, 02
+	db        TAKENORI_OOTA, 03
+	db CREDITS_WAIT, 12
+
+	db    PARAMETRIC_DESIGN, 01
+	db        KOHJI_NISHINO, 02
+	db CREDITS_WAIT, 12
+
+; Clear the banner.
+	db CREDITS_CLEAR
+
+	db CREDITS_WAIT, 01
+
+; Update the banner.
+	db CREDITS_SCENE, 02 ; Ditto
+
+	db        SCRIPT_DESIGN, 01
+	db         TETSUJI_OOTA, 02
+	db        NOBUHIRO_SEYA, 03
+	db CREDITS_WAIT, 12
+
+	db      MAP_DATA_DESIGN, 01
+	db         TETSUJI_OOTA, 02
+	db      KAZUHITO_SEKINE, 03
+	db CREDITS_WAIT, 12
+
+	db           MAP_DESIGN, 00
+	db         TETSUJI_OOTA, 01
+	db        KOHJI_NISHINO, 02
+	db        NOBUHIRO_SEYA, 03
+	db CREDITS_WAIT, 12
+
+	db         COORDINATION, 01
+	db      HIROYUKI_ZINNAI, 02
+	db CREDITS_WAIT, 12
+
+	db            PRODUCERS, 00
+	db         SATORU_IWATA, 01
+	db       SATOSHI_YAMATO, 02
+	db     SHIGERU_MIYAMOTO, 03
+	db CREDITS_WAIT, 12
+
+	db            PRODUCERS, 01
+	db   TSUNEKAZU_ISHIHARA, 02
+	db CREDITS_WAIT, 12
+
+; Clear the banner.
+	db CREDITS_CLEAR
+
+	db CREDITS_WAIT, 01
+
+; Update the banner.
+	db CREDITS_SCENE, 03 ; Igglybuff
+
+	db     US_VERSION_STAFF, 02
+	db CREDITS_WAIT, 09
+
+	db      US_COORDINATION, 01
+	db          GAIL_TILDEN, 02
+	db        HIRO_NAKAMURA, 03
+	db CREDITS_WAIT, 12
+
+	db      US_COORDINATION, 01
+	db       JUNICHI_MASUDA, 02
+	db        SETH_MCMAHILL, 03
+	db CREDITS_WAIT, 12
+
+	db      US_COORDINATION, 01
+	db     HIROTO_ALEXANDER, 02
+	db     TERESA_LILLYGREN, 03
+	db CREDITS_WAIT, 12
+
+	db     TEXT_TRANSLATION, 01
+	db        NOB_OGASAWARA, 02
+	db CREDITS_WAIT, 12
+
+	db          PROGRAMMERS, 01
+	db      TERUKI_MURAKAWA, 02
+	db      KAZUYOSHI_OSAWA, 03
+	db CREDITS_WAIT, 12
+
+	db         PAAD_TESTING, 01
+	db       THOMAS_HERTZOG, 02
+	db         ERIK_JOHNSON, 03
+	db CREDITS_WAIT, 12
+
+	db      PRODUCT_TESTING, 00
+	db             PLANNING, 01
+	db CREDITS_WAIT, 12
+
+	db      PRODUCT_TESTING, 00
+	db       KEITA_NAKAMURA, 01
+	db      HIROTAKA_UEMURA, 02
+	db       HIROAKI_TAMURA, 03
+	db    NORIAKI_SAKAGUCHI, 04
+	db CREDITS_WAIT, 12
+
+	db      PRODUCT_TESTING, 00
+	db NCL_SUPER_MARIO_CLUB, 01
+	db          KENJI_SAIKI, 02
+	db         ATSUSHI_TADA, 03
+	db          MIYUKI_SATO, 04
+	db CREDITS_WAIT, 12
+
+	db       SPECIAL_THANKS, 00
+	db     KIMIKO_NAKAMICHI, 01
+	db           AKITO_MORI, 02
+	db CREDITS_WAIT, 12
+
+	db       SPECIAL_THANKS, 00
+	db        GAKUZI_NOMOTO, 01
+	db           AI_MASHIMA, 02
+	db      KUNIMI_KAWAMURA, 03
+	db CREDITS_WAIT, 12
+
+	db       SPECIAL_THANKS, 00
+	db    MIKIHIRO_ISHIKAWA, 01
+	db   HIDEYUKI_HASHIMOTO, 02
+	db CREDITS_WAIT, 12
+
+	db   EXECUTIVE_PRODUCER, 01
+	db     HIROSHI_YAMAUCHI, 02
+	db CREDITS_WAIT, 12
+
+	db            COPYRIGHT, 01
+	db CREDITS_WAIT, 09
+
+; Display "The End" graphic.
+	db CREDITS_THEEND
+
+	db CREDITS_WAIT, 20
+
+	db $ff ; end
+; 10ae13
+
+
+CreditsStrings:
+	dw .SatoshiTajiri
+	dw .JunichiMasuda
+	dw .TetsuyaWatanabe
+	dw .ShigekiMorimoto
+	dw .SousukeTamada
+	dw .TakenoriOota
+	dw .KenSugimori
+	dw .MotofumiFujiwara
+	dw .AtsukoNishida
+	dw .MuneoSaito
+	dw .SatoshiOota
+	dw .RenaYoshikawa
+	dw .JunOkutani
+	dw .HironobuYoshida
+	dw .AsukaIwashita
+	dw .GoIchinose
+	dw .MorikazuAoki
+	dw .KohjiNishino
+	dw .KenjiMatsushima
+	dw .ToshinobuMatsumiya
+	dw .SatoruIwata
+	dw .NobuhiroSeya
+	dw .KazuhitoSekine
+	dw .TetsujiOota
+	dw .NclSuperMarioClub
+	dw .Sarugakucho
+	dw .AkitoMori
+	dw .TakahiroHarada
+	dw .TohruHashimoto
+	dw .NoboruMatsumoto
+	dw .TakehiroIzushi
+	dw .TakashiKawaguchi
+	dw .TsunekazuIshihara
+	dw .HiroshiYamauchi
+	dw .KenjiSaiki
+	dw .AtsushiTada
+	dw .NaokoKawakami
+	dw .HiroyukiZinnai
+	dw .KunimiKawamura
+	dw .HisashiSogabe
+	dw .KeitaKagaya
+	dw .YoshinoriMatsuda
+	dw .HitomiSato
+	dw .ToruOsawa
+	dw .TakaoOhara
+	dw .YuichiroIto
+	dw .TakaoShimizu
+	dw .Planning
+	dw .KeitaNakamura
+	dw .HirotakaUemura
+	dw .HiroakiTamura
+	dw .NoriakiSakaguchi
+	dw .MiyukiSato
+	dw .GakuziNomoto
+	dw .AiMashima
+	dw .MikihiroIshikawa
+	dw .HideyukiHashimoto
+	dw .SatoshiYamato
+	dw .ShigeruMiyamoto
+	dw .GailTilden
+	dw .NobOgasawara
+	dw .SethMcMahill
+	dw .HirotoAlexander
+	dw .TeresaLillygren
+	dw .ThomasHertzog
+	dw .ErikJohnson
+	dw .HiroNakamura
+	dw .TerukiMurakawa
+	dw .KazuyoshiOsawa
+	dw .KimikoNakamichi
+	dw .End
+	dw .Unknown
+	dw .Staff
+	dw .Director
+	dw .CoDirector
+	dw .Programmers
+	dw .GraphicsDirector
+	dw .MonsterDesign
+	dw .GraphicsDesign
+	dw .Music
+	dw .SoundEffects
+	dw .GameDesign
+	dw .GameScenario
+	dw .ToolProgramming
+	dw .ParametricDesign
+	dw .ScriptDesign
+	dw .MapDataDesign
+	dw .MapDesign
+	dw .ProductTesting
+	dw .SpecialThanks
+	dw .Producers
+	dw .ExecutiveProducer
+	dw .PokemonAnimation
+	dw .PokedexText
+	dw .MobilePrjLeader
+	dw .MobileSystemAd
+	dw .MobileStadiumDir
+	dw .Coordination
+	dw .Copyright
+	dw .UsVersionStaff
+	dw .UsCoordination
+	dw .TextTranslation
+	dw .PaadTesting
+
+.SatoshiTajiri:       db "   SATOSHI TAJIRI@"         ; "たじり さとし@"
+.JunichiMasuda:       db "   JUNICHI MASUDA@"         ; "ますだ じゅんいち@"
+.TetsuyaWatanabe:     db "  TETSUYA WATANABE@"        ; "わたなべ てつや@"
+.ShigekiMorimoto:     db "  SHIGEKI MORIMOTO@"        ; "もりもと しげき@"
+.SousukeTamada:       db "   SOUSUKE TAMADA@"         ; "たまだ そうすけ@"
+.TakenoriOota:        db "   TAKENORI OOTA@"          ; "おおた たけのり@"
+.KenSugimori:         db "    KEN SUGIMORI@"          ; "すぎもり けん@"
+.MotofumiFujiwara:    db " MOTOFUMI FUJIWARA@"        ; "ふじわら もとふみ@"
+.AtsukoNishida:       db "   ATSUKO NISHIDA@"         ; "にしだ あつこ@"
+.MuneoSaito:          db "    MUNEO SAITO@"           ; "さいとう むねお@"
+.SatoshiOota:         db "    SATOSHI OOTA@"          ; "おおた さとし@"
+.RenaYoshikawa:       db "   RENA YOSHIKAWA@"         ; "よしかわ れな@"
+.JunOkutani:          db "    JUN OKUTANI@"           ; "おくたに じゅん@"
+.HironobuYoshida:     db "  HIRONOBU YOSHIDA@"        ; "よしだ ひろのぶ@"
+.AsukaIwashita:       db "   ASUKA IWASHITA@"         ; "いわした あすか@"
+.GoIchinose:          db "    GO ICHINOSE@"           ; "いちのせ ごう@"
+.MorikazuAoki:        db "   MORIKAZU AOKI@"          ; "あおき もりかず@"
+.KohjiNishino:        db "   KOHJI NISHINO@"          ; "にしの こうじ@"
+.KenjiMatsushima:     db "  KENJI MATSUSHIMA@"        ; "まつしま けんじ@"
+.ToshinobuMatsumiya:  db "TOSHINOBU MATSUMIYA@"       ; "まつみや としのぶ@"
+.SatoruIwata:         db "    SATORU IWATA@"          ; "いわた さとる@"
+.NobuhiroSeya:        db "   NOBUHIRO SEYA@"          ; "せや のぶひろ@"
+.KazuhitoSekine:      db "  KAZUHITO SEKINE@"         ; "せきね かずひと@"
+.TetsujiOota:         db "    TETSUJI OOTA@"          ; "おおた てつじ@"
+.NclSuperMarioClub:   db "NCL SUPER MARIO CLUB@"      ; "スーパーマりォクラブ@"
+.Sarugakucho:         db "    SARUGAKUCHO@"           ; "さるがくちょう@"
+.AkitoMori:           db "     AKITO MORI@"           ; "もり あきと@"
+.TakahiroHarada:      db "  TAKAHIRO HARADA@"         ; "はらだ たかひろ@"
+.TohruHashimoto:      db "  TOHRU HASHIMOTO@"         ; "はしもと とおる@"
+.NoboruMatsumoto:     db "  NOBORU MATSUMOTO@"        ; "まつもと のぼる@"
+.TakehiroIzushi:      db "  TAKEHIRO IZUSHI@"         ; "いずし たけひろ@"
+.TakashiKawaguchi:    db " TAKASHI KAWAGUCHI@"        ; "かわぐち たかし@"
+.TsunekazuIshihara:   db " TSUNEKAZU ISHIHARA@"       ; "いしはら つねかず@"
+.HiroshiYamauchi:     db "  HIROSHI YAMAUCHI@"        ; "やまうち ひろし@"
+.KenjiSaiki:          db "    KENJI SAIKI@"           ; "さいき けんじ@"
+.AtsushiTada:         db "    ATSUSHI TADA@"          ; "ただ あつし@"
+.NaokoKawakami:       db "   NAOKO KAWAKAMI@"         ; "かわかみ なおこ@"
+.HiroyukiZinnai:      db "  HIROYUKI ZINNAI@"         ; "じんない ひろゆき@"
+.KunimiKawamura:      db "  KUNIMI KAWAMURA@"         ; "かわむら くにみ@"
+.HisashiSogabe:       db "   HISASHI SOGABE@"         ; "そがべ ひさし@"
+.KeitaKagaya:         db "    KEITA KAGAYA@"          ; "かがや けいた@"
+.YoshinoriMatsuda:    db " YOSHINORI MATSUDA@"        ; "まつだ よしのり@"
+.HitomiSato:          db "    HITOMI SATO@"           ; "さとう ひとみ@"
+.ToruOsawa:           db "     TORU OSAWA@"           ; "おおさわ とおる@"
+.TakaoOhara:          db "    TAKAO OHARA@"           ; "おおはら たかお@"
+.YuichiroIto:         db "    YUICHIRO ITO@"          ; "いとう ゆういちろう@"
+.TakaoShimizu:        db "   TAKAO SHIMIZU@"          ; "しみず たかお@"
+.Planning:            db " SPECIAL PRODUCTION", $4e
+                      db "      PLANNING", $4e        ; "きかくかいはつぶ@"
+                      db " & DEVELOPMENT DEPT.@"
+.KeitaNakamura:       db "   KEITA NAKAMURA@"         ; "なかむら けいた@"
+.HirotakaUemura:      db "  HIROTAKA UEMURA@"         ; "うえむら ひろたか@"
+.HiroakiTamura:       db "   HIROAKI TAMURA@"         ; "たむら ひろあき@"
+.NoriakiSakaguchi:    db " NORIAKI SAKAGUCHI@"        ; "さかぐち のりあき@"
+.MiyukiSato:          db "    MIYUKI SATO@"           ; "さとう みゆき@"
+.GakuziNomoto:        db "   GAKUZI NOMOTO@"          ; "のもと がくじ@"
+.AiMashima:           db "     AI MASHIMA@"           ; "ましま あい@"
+.MikihiroIshikawa:    db " MIKIHIRO ISHIKAWA@"        ; "いしかわ みきひろ@"
+.HideyukiHashimoto:   db " HIDEYUKI HASHIMOTO@"       ; "はしもと ひでゆき@"
+.SatoshiYamato:       db "   SATOSHI YAMATO@"         ; "やまと さとし@"
+.ShigeruMiyamoto:     db "  SHIGERU MIYAMOTO@"        ; "みやもと しげる@"
+.End:                 db "        END@"               ; "おしまい@"
+.Unknown:             db "      ????????@"            ; "????????@"
+.GailTilden:          db "    GAIL TILDEN@"
+.NobOgasawara:        db "   NOB OGASAWARA@"
+.SethMcMahill:        db "   SETH McMAHILL@"
+.HirotoAlexander:     db "  HIROTO ALEXANDER@"
+.TeresaLillygren:     db "  TERESA LILLYGREN@"
+.ThomasHertzog:       db "   THOMAS HERTZOG@"
+.ErikJohnson:         db "    ERIK JOHNSON@"
+.HiroNakamura:        db "   HIRO NAKAMURA@"
+.TerukiMurakawa:      db "  TERUKI MURAKAWA@"
+.KazuyoshiOsawa:      db "  KAZUYOSHI OSAWA@"
+.KimikoNakamichi:     db "  KIMIKO NAKAMICHI@"
+.Staff:               db "      #MON", $4e            ; "ポケットモンスター", $4e
+                      db "  CRYSTAL VERSION", $4e     ; "  クりスタル バージョン", $4e
+                      db "       STAFF@"              ; "    スタッフ@"
+.Director:            db "      DIRECTOR@"            ; "エグゼクティブ ディレクター@"
+.CoDirector:          db "    CO-DIRECTOR@"           ; "ディレクター@"
+.Programmers:         db "    PROGRAMMERS@"           ; "プログラム@"
+.GraphicsDirector:    db " GRAPHICS DIRECTOR@"        ; "グラフィック ディレクター@"
+.MonsterDesign:       db "   MONSTER DESIGN@"         ; "# デザイン@"
+.GraphicsDesign:      db "  GRAPHICS DESIGN@"         ; "グラフィック デザイン@"
+.Music:               db "       MUSIC@"              ; "おんがく@"
+.SoundEffects:        db "   SOUND EFFECTS@"          ; "サウンド エフ→クト@"
+.GameDesign:          db "    GAME DESIGN@"           ; "ゲームデザイン@"
+.GameScenario:        db "   GAME SCENARIO@"          ; "シナりォ@"
+.ToolProgramming:     db "  TOOL PROGRAMMING@"        ; "ツール プログラム@"
+.ParametricDesign:    db " PARAMETRIC DESIGN@"        ; "パラメーター せってい@"
+.ScriptDesign:        db "   SCRIPT DESIGN@"          ; "スクりプト せってい@"
+.MapDataDesign:       db "  MAP DATA DESIGN@"         ; "マップデータ せってい@"
+.MapDesign:           db "     MAP DESIGN@"           ; "マップ デザイン@"
+.ProductTesting:      db "  PRODUCT TESTING@"         ; "デバッグプレイ@"
+.SpecialThanks:       db "   SPECIAL THANKS@"         ; "スぺシャルサンクス@"
+.Producers:           db "     PRODUCERS@"            ; "プロデューサー@"
+.ExecutiveProducer:   db " EXECUTIVE PRODUCER@"       ; "エグゼクティブ プロデューサー@"
+.PokemonAnimation:    db " #MON ANIMATION@"           ; "# アニメーション@"
+.PokedexText:         db "    #DEX TEXT@"             ; "ずかん テキスト@"
+.MobilePrjLeader:     db " MOBILE PRJ. LEADER@"       ; "モバイルプロジ→クト りーダー@"
+.MobileSystemAd:      db " MOBILE SYSTEM AD.@"        ; "モバイル システムアドバイザー@"
+.MobileStadiumDir:    db "MOBILE STADIUM DIR.@"       ; "モバイルスタジアム ディレクター@"
+.Coordination:        db "    COORDINATION@"          ; "コーディネーター@"
+.UsVersionStaff:      db "  US VERSION STAFF@"
+.UsCoordination:      db "  US COORDINATION@"
+.TextTranslation:     db "  TEXT TRANSLATION@"
+.PaadTesting:         db "    PAAD TESTING@"
+
+.Copyright:
+;  (C) 1  9  9  5 - 2  0  0  1     N  i  n  t  e  n  d  o
+db $60,$61,$62,$63,$64,$65,$66, $67, $68, $69, $6a, $6b, $6c, $4e
+;  (C) 1  9  9  5 - 2  0  0  1    C  r  e  a  t  u  r  e  s      i  n  c .
+db $60,$61,$62,$63,$64,$65,$66, $6d, $6e, $6f, $70, $71, $72,  $7a, $7b, $7c, $4e
+;  (C) 1  9  9  5 - 2  0  0  1  G   A   M   E   F   R   E   A   K     i  n  c .
+db $60,$61,$62,$63,$64,$65,$66, $73, $74, $75, $76, $77, $78, $79,  $7a, $7b, $7c, "@"
+
--- /dev/null
+++ b/engine/joypad.asm
@@ -1,0 +1,275 @@
+JoypadInt: ; 92e
+; Replaced by Joypad, called from VBlank instead of the useless
+; joypad interrupt.
+
+; This is a placeholder in case the interrupt is somehow enabled.
+	reti
+; 92f
+
+ClearJoypadPublic: ; 92f
+	xor a
+; Pressed this frame (delta)
+	ld [hJoyPressed], a
+; Currently pressed
+	ld [hJoyDown], a
+	ret
+; 935
+
+Joypad: ; 935
+; Read the joypad register and translate it to something more
+; workable for use in-game. There are 8 buttons, so we can use
+; one byte to contain all player input.
+
+; Updates:
+
+; hJoypadReleased: released this frame (delta)
+; hJoypadPressed: pressed this frame (delta)
+; hJoypadDown: currently pressed
+; hJoypadSum: pressed so far
+
+; Any of these three bits can be used to disable input.
+	ld a, [$cfbe]
+	and %11010000
+	ret nz
+	
+; If we're saving, input is disabled.
+	ld a, [$c2cd]
+	and a
+	ret nz
+	
+; We can only get four inputs at a time.
+; We take d-pad first for no particular reason.
+	ld a, D_PAD
+	ld [rJOYP], a
+; Read twice to give the request time to take.
+	ld a, [rJOYP]
+	ld a, [rJOYP]
+	
+; The Joypad register output is in the lo nybble (inversed).
+; We make the hi nybble of our new container d-pad input.
+	cpl
+	and $f
+	swap a
+	
+; We'll keep this in b for now.
+	ld b, a
+	
+; Buttons make 8 total inputs (A, B, Select, Start).
+; We can fit this into one byte.
+	ld a, BUTTONS
+	ld [rJOYP], a
+; Wait for input to stabilize.
+	ld a, [rJOYP]
+	ld a, [rJOYP]
+	ld a, [rJOYP]
+	ld a, [rJOYP]
+	ld a, [rJOYP]
+	ld a, [rJOYP]
+; Buttons take the lo nybble.
+	cpl
+	and $f
+	or b
+	ld b, a
+	
+; Reset the joypad register since we're done with it.
+	ld a, $30
+	ld [rJOYP], a
+	
+; To get the delta we xor the last frame's input with the new one.
+	ld a, [hJoypadDown] ; last frame
+	ld e, a
+	xor b
+	ld d, a
+; Released this frame:
+	and e
+	ld [hJoypadReleased], a
+; Pressed this frame:
+	ld a, d
+	and b
+	ld [hJoypadPressed], a
+	
+; Add any new presses to the list of collective presses:
+	ld c, a
+	ld a, [hJoypadSum]
+	or c
+	ld [hJoypadSum], a
+	
+; Currently pressed:
+	ld a, b
+	ld [hJoypadDown], a
+	
+; Now that we have the input, we can do stuff with it.
+
+; For example, soft reset:
+	and BUTTON_A | BUTTON_B | SELECT | START
+	cp  BUTTON_A | BUTTON_B | SELECT | START
+	jp z, $0150 ; reset
+	
+	ret
+; 984
+
+
+GetJoypadPublic: ; 984
+; Update mirror joypad input from hJoypadDown (real input)
+
+; hJoyReleased: released this frame (delta)
+; hJoyPressed: pressed this frame (delta)
+; hJoyDown: currently pressed
+
+; bit 0 A
+;     1 B
+;     2 SELECT
+;     3 START
+;     4 RIGHT
+;     5 LEFT
+;     6 UP
+;     7 DOWN
+
+	push af
+	push hl
+	push de
+	push bc
+	
+; The player input can be automated using an input stream.
+; See more below.
+	ld a, [InputType]
+	cp a, AUTO_INPUT
+	jr z, .auto
+
+; To get deltas, take this and last frame's input.
+	ld a, [hJoypadDown] ; real input
+	ld b, a
+	ld a, [hJoyDown] ; last frame mirror
+	ld e, a
+	
+; Released this frame:
+	xor b
+	ld d, a
+	and e
+	ld [hJoyReleased], a
+	
+; Pressed this frame:
+	ld a, d
+	and b
+	ld [hJoyPressed], a
+	
+; It looks like the collective presses got commented out here.
+	ld c, a
+	
+; Currently pressed:
+	ld a, b
+	ld [hJoyDown], a ; frame input
+	
+.quit
+	pop bc
+	pop de
+	pop hl
+	pop af
+	ret	
+
+.auto
+; Use a predetermined input stream (used in the catching tutorial).
+
+; Stream format: [input][duration]
+; A value of $ff will immediately end the stream.
+
+; Read from the input stream.
+	ld a, [hROMBank]
+	push af
+	ld a, [AutoInputBank]
+	rst Bankswitch
+	
+	ld hl, AutoInputAddress
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	
+; We only update when the input duration has expired.
+	ld a, [AutoInputLength]
+	and a
+	jr z, .updateauto
+	
+; Until then, don't change anything.
+	dec a
+	ld [AutoInputLength], a
+	pop af
+	rst Bankswitch
+	jr .quit
+	
+	
+.updateauto
+; An input of $ff will end the stream.
+	ld a, [hli]
+	cp a, $ff
+	jr z, .stopauto
+	ld b, a
+	
+; A duration of $ff will end the stream indefinitely.
+	ld a, [hli]
+	ld [AutoInputLength], a
+	cp a, $ff
+	jr nz, .next
+	
+; The current input is overwritten.
+	dec hl
+	dec hl
+	ld b, NO_INPUT
+	jr .finishauto
+	
+.next
+; On to the next input...
+	ld a, l
+	ld [AutoInputAddress], a
+	ld a, h
+	ld [AutoInputAddress+1], a
+	jr .finishauto
+	
+.stopauto
+	call StopAutoInput
+	ld b, NO_INPUT
+	
+.finishauto
+	pop af
+	rst Bankswitch
+	ld a, b
+	ld [hJoyPressed], a ; pressed
+	ld [hJoyDown], a ; input
+	jr .quit
+; 9ee
+
+
+StartAutoInput: ; 9ee
+; Start reading automated input stream at a:hl.
+	
+	ld [AutoInputBank], a
+	ld a, l
+	ld [AutoInputAddress], a
+	ld a, h
+	ld [AutoInputAddress+1], a
+; Start reading the stream immediately.
+	xor a
+	ld [AutoInputLength], a
+; Reset input mirrors.
+	xor a
+	ld [hJoyPressed], a ; pressed this frame
+	ld [hJoyReleased], a ; released this frame
+	ld [hJoyDown], a ; currently pressed
+	
+	ld a, AUTO_INPUT
+	ld [InputType], a
+	ret
+; a0a
+
+
+StopAutoInput: ; a0a
+; Clear variables related to automated input.
+	xor a
+	ld [AutoInputBank], a
+	ld [AutoInputAddress], a
+	ld [AutoInputAddress+1], a
+	ld [AutoInputLength], a
+; Back to normal input.
+	ld [InputType], a
+	ret
+; a1b
+
--- /dev/null
+++ b/engine/landmarks.asm
@@ -1,0 +1,539 @@
+GetLandmarkCoords: ; 0x1ca896
+; given a landmark id in e, return the y coord in d, and the x coord in e.
+	push hl
+	ld l, e
+	ld h, $0
+	add hl, hl
+	add hl, hl
+	ld de, Landmarks
+	add hl, de
+	ld a, [hli]
+	ld e, a
+	ld d, [hl]
+	pop hl
+	ret
+
+
+GetLandmarkName: ; 0x1ca8a5
+; given a landmark id in e, copy its name to $d073.
+	push hl
+	push de
+	push bc
+	ld l, e
+	ld h, $0
+	add hl, hl
+	add hl, hl
+	ld de, Landmarks + 2 ; skip the coordinates, we only want the string
+	add hl, de
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld de, $d073
+	ld c, 18
+.loop
+	ld a, [hli]
+	ld [de], a
+	inc de
+	dec c
+	jr nz, .loop
+	pop bc
+	pop de
+	pop hl
+	ret
+
+Landmarks: ; 0x1ca8c3
+;db x coord, y coord
+;dw pointer to name 
+	db 0,0
+	dw SpecialMapString
+
+	db 148,116
+	dw NewBarkString
+
+	db 136,116
+	dw Route29String
+
+	db 108,116
+	dw CherrygroveString
+
+	db 108,96
+	dw Route30String
+
+	db 104,76
+	dw Route31String
+
+	db 92,76
+	dw VioletString
+
+	db 93,74
+	dw SproutString
+
+	db 92,108
+	dw Route32String
+
+	db 84,92
+	dw RuinsString
+
+	db 92,140
+	dw UnionString
+
+	db 90,140
+	dw Route33String
+
+	db 76,140
+	dw AzaleaString
+
+	db 78,138
+	dw WellString
+
+	db 60,136
+	dw IlexString
+
+	db 60,128
+	dw Route34String
+
+	db 60,108
+	dw GoldenrodString
+
+	db 58,108
+	dw RadioTowerString
+
+	db 60,92
+	dw Route35String
+
+	db 60,76
+	dw ParkString
+
+	db 72,76
+	dw Route36String
+
+	db 76,68
+	dw Route37String
+
+	db 76,60
+	dw EcruteakString
+
+	db 78,58
+	dw TinString
+
+	db 74,58
+	dw BurnedTowerString
+
+	db 60,60
+	dw Route38String
+
+	db 44,64
+	dw Route39String
+
+	db 44,76
+	dw OlivineString
+
+	db 46,78
+	dw LighthouseString
+
+	db 36,72
+	dw BattleTowerString
+
+	db 36,80
+	dw Route40String
+
+	db 36,108
+	dw WhirlString
+
+	db 36,116
+	dw Route41String
+
+	db 28,116
+	dw CianwoodString
+
+	db 100,60
+	dw Route42String
+
+	db 92,60
+	dw MortarString
+
+	db 116,60
+	dw MahoganyString
+
+	db 116,52
+	dw Route43String
+
+	db 116,44
+	dw LakeString
+
+	db 128,60
+	dw Route44String
+
+	db 138,54
+	dw PathString
+
+	db 140,60
+	dw BlackthornString
+
+	db 140,52
+	dw DenString
+
+	db 140,80
+	dw Route45String
+
+	db 120,88
+	dw DarkString
+
+	db 132,104
+	dw Route46String
+
+	db 156,84
+	dw SilverCaveString
+
+	db 60,124
+	dw PalletString
+
+	db 60,108
+	dw Route1String
+
+	db 60,92
+	dw ViridianString
+
+	db 60,80
+	dw Route2String
+
+	db 60,68
+	dw PewterString
+
+	db 72,68
+	dw Route3String
+
+	db 84,68
+	dw MoonString
+
+	db 96,68
+	dw Route4String
+
+	db 108,68
+	dw CeruleanString
+
+	db 108,60
+	dw Route24String
+
+	db 116,52
+	dw Route25String
+
+	db 108,76
+	dw Route5String
+
+	db 116,92
+	dw UndergroundString
+
+	db 108,92
+	dw Route6String
+
+	db 108,100
+	dw VermilionString
+
+	db 96,76
+	dw DiglettsCaveString
+
+	db 96,84
+	dw Route7String
+
+	db 124,84
+	dw Route8String
+
+	db 124,68
+	dw Route9String
+
+	db 140,68
+	dw TunnelString
+
+	db 140,72
+	dw Route10String
+
+	db 140,76
+	dw PlantString
+
+	db 140,84
+	dw LavenderString
+
+	db 148,84
+	dw LavTowerString
+
+	db 84,84
+	dw CeladonString
+
+	db 108,84
+	dw SaffronString
+
+	db 124,100
+	dw Route11String
+
+	db 140,96
+	dw Route12String
+
+	db 132,116
+	dw Route13String
+
+	db 124,128
+	dw Route14String
+
+	db 112,132
+	dw Route15String
+
+	db 76,84
+	dw Route16String
+
+	db 76,108
+	dw Route17String
+
+	db 88,132
+	dw Route18String
+
+	db 100,132
+	dw FuchsiaString
+
+	db 100,144
+	dw Route19String
+
+	db 84,148
+	dw Route20String
+
+	db 76,148
+	dw SeafoamString
+
+	db 60,148
+	dw CinnabarString
+
+	db 60,136
+	dw Route21String
+
+	db 44,84
+	dw Route22String
+
+	db 36,68
+	dw RoadString
+
+	db 36,60
+	dw Route23String
+
+	db 36,52
+	dw IndigoString
+
+	db 36,108
+	dw Route26String
+
+	db 28,116
+	dw Route27String
+
+	db 20,116
+	dw FallsString
+
+	db 28,84
+	dw Route28String
+
+	db 148,132
+	dw AquaString
+
+NewBarkString:
+	db "NEW BARK",$1F,"TOWN@"
+CherrygroveString:
+	db "CHERRYGROVE",$1F,"CITY@"
+VioletString:
+	db "VIOLET CITY@"
+AzaleaString:
+	db "AZALEA TOWN@"
+GoldenrodString:
+	db "GOLDENROD",$1F,"CITY@"
+EcruteakString:
+	db "ECRUTEAK",$1F,"CITY@"
+OlivineString:
+	db "OLIVINE",$1F,"CITY@"
+CianwoodString:
+	db "CIANWOOD",$1F,"CITY@"
+MahoganyString:
+	db "MAHOGANY",$1F,"TOWN@"
+BlackthornString:
+	db "BLACKTHORN",$1F,"CITY@"
+LakeString:
+	db "LAKE OF",$1F,"RAGE@"
+SilverCaveString:
+	db "SILVER CAVE@"
+SproutString:
+	db "SPROUT",$1F,"TOWER@"
+RuinsString:
+	db "RUINS",$1F,"OF ALPH@"
+UnionString:
+	db "UNION CAVE@"
+WellString:
+	db "SLOWPOKE",$1F,"WELL@"
+RadioTowerString:
+	db "RADIO TOWER@"
+PlantString:
+	db "POWER PLANT@"
+ParkString:
+	db "NATIONAL",$1F,"PARK@"
+TinString:
+	db "TIN TOWER@"
+LighthouseString:
+	db "LIGHTHOUSE@"
+WhirlString:
+	db "WHIRL",$1F,"ISLANDS@"
+MortarString:
+	db "MT.MORTAR@"
+DenString:
+	db "DRAGON'S",$1F,"DEN@"
+PathString:
+	db "ICE PATH@"
+NotApplicableString:
+	db "N/A@"
+PalletString:
+	db "PALLET TOWN@"
+ViridianString:
+	db "VIRIDIAN",$1F,"CITY@"
+PewterString:
+	db "PEWTER CITY@"
+CeruleanString:
+	db "CERULEAN",$1F,"CITY@"
+LavenderString:
+	db "LAVENDER",$1F,"TOWN@"
+VermilionString:
+	db "VERMILION",$1F,"CITY@"
+CeladonString:
+	db "CELADON",$1F,"CITY@"
+SaffronString:
+	db "SAFFRON",$1F,"CITY@"
+FuchsiaString:
+	db "FUCHSIA",$1F,"CITY@"
+CinnabarString:
+	db "CINNABAR",$1F,"ISLAND@"
+IndigoString:
+	db "INDIGO",$1F,"PLATEAU@"
+RoadString:
+	db "VICTORY",$1F,"ROAD@"
+MoonString:
+	db "MT.MOON@"
+TunnelString:
+	db "ROCK TUNNEL@"
+LavTowerString:
+	db "LAV",$1F,"RADIO TOWER@"
+SilphString:
+	db "SILPH CO.@"
+ZoneString:
+	db "SAFARI ZONE@"
+SeafoamString:
+	db "SEAFOAM",$1F,"ISLANDS@"
+MansionString:
+	db "#MON",$1F,"MANSION@"
+DungeonString:
+	db "CERULEAN",$1F,"CAVE@"
+Route1String:
+	db "ROUTE 1@"
+Route2String:
+	db "ROUTE 2@"
+Route3String:
+	db "ROUTE 3@"
+Route4String:
+	db "ROUTE 4@"
+Route5String:
+	db "ROUTE 5@"
+Route6String:
+	db "ROUTE 6@"
+Route7String:
+	db "ROUTE 7@"
+Route8String:
+	db "ROUTE 8@"
+Route9String:
+	db "ROUTE 9@"
+Route10String:
+	db "ROUTE 10@"
+Route11String:
+	db "ROUTE 11@"
+Route12String:
+	db "ROUTE 12@"
+Route13String:
+	db "ROUTE 13@"
+Route14String:
+	db "ROUTE 14@"
+Route15String:
+	db "ROUTE 15@"
+Route16String:
+	db "ROUTE 16@"
+Route17String:
+	db "ROUTE 17@"
+Route18String:
+	db "ROUTE 18@"
+Route19String:
+	db "ROUTE 19@"
+Route20String:
+	db "ROUTE 20@"
+Route21String:
+	db "ROUTE 21@"
+Route22String:
+	db "ROUTE 22@"
+Route23String:
+	db "ROUTE 23@"
+Route24String:
+	db "ROUTE 24@"
+Route25String:
+	db "ROUTE 25@"
+Route26String:
+	db "ROUTE 26@"
+Route27String:
+	db "ROUTE 27@"
+Route28String:
+	db "ROUTE 28@"
+Route29String:
+	db "ROUTE 29@"
+Route30String:
+	db "ROUTE 30@"
+Route31String:
+	db "ROUTE 31@"
+Route32String:
+	db "ROUTE 32@"
+Route33String:
+	db "ROUTE 33@"
+Route34String:
+	db "ROUTE 34@"
+Route35String:
+	db "ROUTE 35@"
+Route36String:
+	db "ROUTE 36@"
+Route37String:
+	db "ROUTE 37@"
+Route38String:
+	db "ROUTE 38@"
+Route39String:
+	db "ROUTE 39@"
+Route40String:
+	db "ROUTE 40@"
+Route41String:
+	db "ROUTE 41@"
+Route42String:
+	db "ROUTE 42@"
+Route43String:
+	db "ROUTE 43@"
+Route44String:
+	db "ROUTE 44@"
+Route45String:
+	db "ROUTE 45@"
+Route46String:
+	db "ROUTE 46@"
+DarkString:
+	db "DARK CAVE@"
+IlexString:
+	db "ILEX",$1F,"FOREST@"
+BurnedTowerString:
+	db "BURNED",$1F,"TOWER@"
+AquaString:
+	db "FAST SHIP@"
+ViridianForestString:
+	db "VIRIDIAN",$1F,"FOREST@"
+DiglettsCaveString:
+	db "DIGLETT'S",$1F,"CAVE@"
+FallsString:
+	db "TOHJO FALLS@"
+UndergroundString:
+	db "UNDERGROUND@"
+BattleTowerString:
+	db "BATTLE",$1F,"TOWER@"
+SpecialMapString:
+	db "SPECIAL@"
+
--- /dev/null
+++ b/engine/scripting.asm
@@ -1,0 +1,3127 @@
+ScriptCommandTable: ; 0x96cb1
+	dw Script_2call
+	dw Script_3call
+	dw Script_2ptcall
+	dw Script_2jump
+	dw Script_3jump
+	dw Script_2ptjump
+	dw Script_if_equal
+	dw Script_if_not_equal
+	dw Script_iffalse
+	dw Script_iftrue
+	dw Script_if_less_than
+	dw Script_if_greater_than
+	dw Script_jumpstd
+	dw Script_callstd
+	dw Script_3callasm
+	dw Script_special
+	dw Script_2ptcallasm
+	dw Script_checkmaptriggers
+	dw Script_domaptrigger
+	dw Script_checktriggers
+	dw Script_dotrigger
+	dw Script_writebyte
+	dw Script_addvar
+	dw Script_random
+	dw Script_checkver
+	dw Script_copybytetovar
+	dw Script_copyvartobyte
+	dw Script_loadvar
+	dw Script_checkcode
+	dw Script_writevarcode
+	dw Script_writecode
+	dw Script_giveitem
+	dw Script_takeitem
+	dw Script_checkitem
+	dw Script_givemoney
+	dw Script_takemoney
+	dw Script_checkmoney
+	dw Script_givecoins
+	dw Script_takecoins
+	dw Script_checkcoins
+	dw Script_addcellnum
+	dw Script_delcellnum
+	dw Script_checkcellnum
+	dw Script_checktime
+	dw Script_checkpoke
+	dw Script_givepoke
+	dw Script_giveegg
+	dw Script_givepokeitem
+	dw Script_checkpokeitem
+	dw Script_checkbit1
+	dw Script_clearbit1
+	dw Script_setbit1
+	dw Script_checkbit2
+	dw Script_clearbit2
+	dw Script_setbit2
+	dw Script_wildoff
+	dw Script_wildon
+	dw Script_xycompare
+	dw Script_warpmod
+	dw Script_blackoutmod
+	dw Script_warp
+	dw Script_readmoney
+	dw Script_readcoins
+	dw Script_RAM2MEM
+	dw Script_pokenamemem
+	dw Script_itemtotext
+	dw Script_mapnametotext
+	dw Script_trainertotext
+	dw Script_stringtotext
+	dw Script_itemnotify
+	dw Script_pocketisfull
+	dw Script_loadfont
+	dw Script_refreshscreen
+	dw Script_loadmovesprites
+	dw Script_loadbytec1ce
+	dw Script_3writetext
+	dw Script_2writetext
+	dw Script_repeattext
+	dw Script_yesorno
+	dw Script_loadmenudata
+	dw Script_writebackup
+	dw Script_jumptextfaceplayer
+	dw Script_3jumptext
+	dw Script_jumptext
+	dw Script_closetext
+	dw Script_keeptextopen
+	dw Script_pokepic
+	dw Script_pokepicyesorno
+	dw Script_interpretmenu
+	dw Script_interpretmenu2
+	dw Script_loadpikachudata
+	dw Script_battlecheck
+	dw Script_loadtrainerdata
+	dw Script_loadpokedata
+	dw Script_loadtrainer
+	dw Script_startbattle
+	dw Script_returnafterbattle
+	dw Script_catchtutorial
+	dw Script_trainertext
+	dw Script_trainerstatus
+	dw Script_winlosstext
+	dw Script_scripttalkafter
+	dw Script_talkaftercancel
+	dw Script_talkaftercheck
+	dw Script_setlasttalked
+	dw Script_applymovement
+	dw Script_applymovement2
+	dw Script_faceplayer
+	dw Script_faceperson
+	dw Script_variablesprite
+	dw Script_disappear
+	dw Script_appear
+	dw Script_follow
+	dw Script_stopfollow
+	dw Script_moveperson
+	dw Script_writepersonxy
+	dw Script_loademote
+	dw Script_showemote
+	dw Script_spriteface
+	dw Script_follownotexact
+	dw Script_earthquake
+	dw Script_changemap
+	dw Script_changeblock
+	dw Script_reloadmap
+	dw Script_reloadmappart
+	dw Script_writecmdqueue
+	dw Script_delcmdqueue
+	dw Script_playmusic
+	dw Script_playrammusic
+	dw Script_musicfadeout
+	dw Script_playmapmusic
+	dw Script_reloadmapmusic
+	dw Script_cry
+	dw Script_playsound
+	dw Script_waitbutton
+	dw Script_warpsound
+	dw Script_specialsound
+	dw Script_passtoengine
+	dw Script_newloadmap
+	dw Script_pause
+	dw Script_deactivatefacing
+	dw Script_priorityjump
+	dw Script_warpcheck
+	dw Script_ptpriorityjump
+	dw Script_return
+	dw Script_end
+	dw Script_reloadandreturn
+	dw Script_resetfuncs
+	dw Script_pokemart
+	dw Script_elevator
+	dw Script_trade
+	dw Script_askforphonenumber
+	dw Script_phonecall
+	dw Script_hangup
+	dw Script_describedecoration
+	dw Script_fruittree
+	dw Script_specialphonecall
+	dw Script_checkphonecall
+	dw Script_verbosegiveitem
+	dw Script_verbosegiveitem2
+	dw Script_loadwilddata
+	dw Script_halloffame
+	dw Script_credits
+	dw Script_warpfacing
+	dw Script_storetext
+	dw Script_displaylocation
+	dw Script_unknown0xa6
+	dw Script_unknown0xa7
+	dw Script_unknown0xa8
+	dw Script_unknown0xa9
+; 0x96e05
+
+Unknown_0x96e05: ; 0x96e05
+    ld hl, $d434
+    set 2, [hl]
+    ret
+; 0x96e0b
+
+Unknown_0x96e0b: ; 0x96e0b
+    ld hl, $d434
+    bit 2, [hl]
+    ret
+; 0x96e11
+
+Unknown_0x96e11: ; 0x96e11
+    ld hl, $d434
+    res 2, [hl]
+    ret
+; 0x96e17
+
+Script_3callasm: ; 0x96e17
+; script command 0xe
+; parameters:
+;     asm (AsmPointerParam)
+
+	call GetScriptByte
+	ld b, a
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	ld a, b
+	rst $8
+	ret
+; 0x96e26
+
+Script_special: ; 0x96e26
+; script command 0xf
+; parameters:
+;     predefined_script (MultiByteParam)
+
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	ld a, $3
+	ld hl, $401b
+	rst $8
+	ret
+; 0x96e35
+
+Script_2ptcallasm: ; 0x96e35
+; script command 0x10
+; parameters:
+;     asm (PointerToAsmPointerParam)
+
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	ld b, [hl]
+	inc hl
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld a, b
+	rst $8
+	ret
+; 0x96e45
+
+Script_jumptextfaceplayer: ; 0x96e45
+; script command 0x51
+; parameters:
+;     text_pointer (RawTextPointerLabelParam)
+
+	ld a, [ScriptBank]
+	ld [$d44e], a
+	call GetScriptByte
+	ld [$d44f], a
+	call GetScriptByte
+	ld [$d450], a
+	ld b, $25
+	ld hl, $6e79
+	jp ScriptJump
+; 0x96e5f
+
+Script_jumptext: ; 0x96e5f
+; script command 0x53
+; parameters:
+;     text_pointer (RawTextPointerLabelParam)
+
+	ld a, [ScriptBank]
+	ld [$d44e], a
+	call GetScriptByte
+	ld [$d44f], a
+	call GetScriptByte
+	ld [$d450], a
+	ld b, $25
+	ld hl, $6e7a
+	jp ScriptJump
+; 0x96e79
+
+INCBIN "baserom.gbc",$96e79,$96e81 - $96e79
+
+Script_3jumptext: ; 0x96e81
+; script command 0x52
+; parameters:
+;     text_pointer (PointerLabelBeforeBank)
+
+	call GetScriptByte
+	ld [$d44e], a
+	call GetScriptByte
+	ld [$d44f], a
+	call GetScriptByte
+	ld [$d450], a
+	ld b, $25
+	ld hl, $6e7a
+	jp ScriptJump
+; 0x96e9b
+
+Script_2writetext: ; 0x96e9b
+; script command 0x4c
+; parameters:
+;     text_pointer (RawTextPointerLabelParam)
+
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	ld a, [ScriptBank]
+	ld b, a
+	call $269a
+	ret
+; 0x96eab
+
+Script_3writetext: ; 0x96eab
+; script command 0x4b
+; parameters:
+;     text_pointer (PointerLabelBeforeBank)
+
+	call GetScriptByte
+	ld b, a
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	call $269a
+	ret
+; 0x96ebb
+
+Script_repeattext: ; 0x96ebb
+; script command 0x4d
+; parameters:
+;     byte (SingleByteParam)
+;     byte (SingleByteParam)
+
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	cp $ff
+	jr nz, .asm_96ed8 ; 0x96ec5 $11
+	ld a, l
+	cp $ff
+	jr nz, .asm_96ed8 ; 0x96eca $c
+	ld hl, $d44e
+	ld a, [hli]
+	ld b, a
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	call $269a
+	ret
+.asm_96ed8
+	ret
+; 0x96ed9
+
+Script_closetext: ; 0x96ed9
+; script command 0x54
+
+	jp $0a46
+; 0x96edc
+
+Script_keeptextopen: ; 0x96edc
+; script command 0x55
+
+	ld a, [$ffd8]
+	push af
+	ld a, $1
+	ld [$ffd8], a
+	call $31f6
+	call $0aaf
+	pop af
+	ld [$ffd8], a
+	ret
+; 0x96eed
+
+Script_yesorno: ; 0x96eed
+; script command 0x4e
+
+	call $1dcf
+	ld a, $0
+	jr c, .asm_96ef6 ; 0x96ef2 $2
+	ld a, $1
+.asm_96ef6
+	ld [$c2dd], a
+	ret
+; 0x96efa
+
+Script_loadmenudata: ; 0x96efa
+; script command 0x4f
+; parameters:
+;     data (MenuDataPointerParam)
+
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	ld de, $1d35
+	ld a, [ScriptBank]
+	call $26b7
+	call $1ad2
+	ret
+; 0x96f0f
+
+Script_writebackup: ; 0x96f0f
+; script command 0x50
+
+	call $1c17
+	call $1ad2
+	ret
+; 0x96f16
+
+Script_pokepic: ; 0x96f16
+; script command 0x56
+; parameters:
+;     pokemon (PokemonParam)
+
+	call GetScriptByte
+	and a
+	jr nz, .asm_96f1f ; 0x96f1a $3
+	ld a, [$c2dd]
+.asm_96f1f
+	ld [$d108], a
+	ld a, $9
+	ld hl, $44e3
+	rst $8
+	ret
+; 0x96f29
+
+Script_pokepicyesorno: ; 0x96f29
+; script command 0x57
+
+	ld a, $9
+	ld hl, $4528
+	rst $8
+	ret
+; 0x96f30
+
+Script_interpretmenu2: ; 0x96f30
+; script command 0x59
+
+	ld a, [ScriptBank]
+	ld hl, $1d81
+	rst $8
+	ld a, [$cfa9]
+	jr nc, .asm_96f3d ; 0x96f3a $1
+	xor a
+.asm_96f3d
+	ld [$c2dd], a
+	ret
+; 0x96f41
+
+Script_interpretmenu: ; 0x96f41
+; script command 0x58
+
+	ld a, [ScriptBank]
+	ld hl, $202a
+	rst $8
+	ld a, [$cf88]
+	jr nc, .asm_96f4e ; 0x96f4b $1
+	xor a
+.asm_96f4e
+	ld [$c2dd], a
+	ret
+; 0x96f52
+
+Script_storetext: ; 0x96f52
+; script command 0xa4
+; parameters:
+;     pointer (PointerLabelBeforeBank)
+;     memory (SingleByteParam)
+
+	call $106c
+	call GetScriptByte
+	ld c, a
+	ld a, $47
+	ld hl, $4000
+	rst $8
+	ret
+; 0x96f60
+
+Script_verbosegiveitem: ; 0x96f60
+; script command 0x9e
+; parameters:
+;     item (ItemLabelByte)
+;     quantity (DecimalParam)
+
+	call $77ca
+	call $7051
+	ld de, $d073
+	ld a, $1
+	call $76c8
+	ld b, $25
+	ld de, $6f77
+	jp $74cb
+; 0x96f76
+
+INCBIN "baserom.gbc",$96f76,$96f8e - $96f76
+
+Script_verbosegiveitem2: ; 0x96f8e
+; script command 0x9f
+; parameters:
+;     item (ItemLabelByte)
+;     var (SingleByteParam)
+
+	call GetScriptByte
+	cp $ff
+	jr nz, .asm_96f98 ; 0x96f93 $3
+	ld a, [$c2dd]
+.asm_96f98
+	ld [$d106], a
+	call GetScriptByte
+	call $769e
+	ld a, [de]
+	ld [$d10c], a
+	ld hl, $d892
+	call $2f66
+	ld a, $1
+	jr c, .asm_96fb0 ; 0x96fad $1
+	xor a
+.asm_96fb0
+	ld [$c2dd], a
+	call $7051
+	ld de, $d073
+	ld a, $1
+	call $76c8
+	ld b, $25
+	ld de, $6f77
+	jp $74cb
+; 0x96fc6
+
+Script_itemnotify: ; 0x96fc6
+; script command 0x45
+
+	call $6ffe
+	call $7051
+	ld b, $25
+	ld hl, $705b
+	call $269a
+	ret
+; 0x96fd5
+
+Script_pocketisfull: ; 0x96fd5
+; script command 0x46
+
+	call $6ffe
+	call $7051
+	ld b, $25
+	ld hl, $7060
+	call $269a
+	ret
+; 0x96fe4
+
+Script_specialsound: ; 0x96fe4
+; script command 0x88
+
+	ld a, $3
+	ld hl, $543d
+	rst $8
+	ld a, [$d142]
+	cp TM_HM
+	ld de, SFX_GET_TM
+	jr z, .play
+	ld de, SFX_ITEM
+.play
+	call StartSFX
+	call WaitSFX
+	ret
+; 0x96ffe
+
+INCBIN "baserom.gbc",$96ffe,$97065 - $96ffe
+
+Script_pokemart: ; 0x97065
+; script command 0x94
+; parameters:
+;     dialog_id (SingleByteParam)
+;     mart_id (MultiByteParam)
+
+	call GetScriptByte
+	ld c, a
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	ld a, [ScriptBank]
+	ld b, a
+	ld a, $5
+	ld hl, $5a45
+	rst $8
+	ret
+; 0x9707c
+
+Script_elevator: ; 0x9707c
+; script command 0x95
+; parameters:
+;     floor_list_pointer (PointerLabelParam)
+
+	xor a
+	ld [$c2dd], a
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	ld a, [ScriptBank]
+	ld b, a
+	ld a, $4
+	ld hl, $742d
+	rst $8
+	ret c
+	ld a, $1
+	ld [$c2dd], a
+	ret
+; 0x97099
+
+Script_trade: ; 0x97099
+; script command 0x96
+; parameters:
+;     trade_id (SingleByteParam)
+
+	call GetScriptByte
+	ld e, a
+	ld a, $3f
+	ld hl, $4ba8
+	rst $8
+	ret
+; 0x970a4
+
+Script_phonecall: ; 0x970a4
+; script command 0x98
+; parameters:
+;     caller_name (RawTextPointerLabelParam)
+
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	ld a, [ScriptBank]
+	ld b, a
+	ld a, $24
+	ld hl, $429a
+	rst $8
+	ret
+; 0x970b7
+
+Script_hangup: ; 0x970b7
+; script command 0x99
+
+	ld a, $24
+	ld hl, $42eb
+	rst $8
+	ret
+; 0x970be
+
+Script_askforphonenumber: ; 0x970be
+; script command 0x97
+; parameters:
+;     number (SingleByteParam)
+
+	call $1dcf
+	jr c, .asm_970d6 ; 0x970c1 $13
+	call GetScriptByte
+	ld c, a
+	ld a, $24
+	ld hl, $4000
+	rst $8
+	jr c, .asm_970d2 ; 0x970cd $3
+	xor a
+	jr .asm_970db ; 0x970d0 $9
+.asm_970d2
+	ld a, $1
+	jr .asm_970db ; 0x970d4 $5
+.asm_970d6
+	call GetScriptByte
+	ld a, $2
+.asm_970db
+	ld [$c2dd], a
+	ret
+; 0x970df
+
+Script_describedecoration: ; 0x970df
+; script command 0x9a
+; parameters:
+;     byte (SingleByteParam)
+
+	call GetScriptByte
+	ld b, a
+	ld a, $9
+	ld hl, $6f59
+	rst $8
+	ld h, d
+	ld l, e
+	jp ScriptJump
+; 0x970ee
+
+Script_fruittree: ; 0x970ee
+; script command 0x9b
+; parameters:
+;     tree_id (SingleByteParam)
+
+	call GetScriptByte
+	ld [CurFruitTree], a
+	ld b, BANK(FruitTreeScript)
+	ld hl, FruitTreeScript
+	jp ScriptJump
+; 0x970fc
+
+Script_loadwilddata: ; 0x970fc
+; script command 0xa0
+; parameters:
+;     map_group (MapGroupParam)
+;     map_id (MapIdParam)
+
+	call GetScriptByte
+	ld c, a
+	call GetScriptByte
+	ld d, a
+	call GetScriptByte
+	ld e, a
+	ld a, $3
+	ld hl, $4403
+	rst $8
+	ret
+; 0x9710f
+
+Script_trainertext: ; 0x9710f
+; script command 0x62
+; parameters:
+;     which_text (SingleByteParam)
+
+	call GetScriptByte
+	ld c, a
+	ld b, $0
+	ld hl, $d045
+	add hl, bc
+	add hl, bc
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld a, [$d03e]
+	ld b, a
+	call $269a
+	ret
+; 0x97125
+
+Script_scripttalkafter: ; 0x97125
+; script command 0x65
+
+	ld hl, $d04b
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld a, [$d03e]
+	ld b, a
+	jp ScriptJump
+; 0x97132
+
+Script_trainerstatus: ; 0x97132
+; script command 0x63
+; parameters:
+;     action (SingleByteParam)
+
+	xor a
+	ld [$c2dd], a
+	ld hl, $d041
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	call GetScriptByte
+	ld b, a
+	call BitTable1Func
+	ld a, c
+	and a
+	ret z
+	ld a, $1
+	ld [$c2dd], a
+	ret
+; 0x9714c
+
+Script_winlosstext: ; 0x9714c
+; script command 0x64
+; parameters:
+;     win_text_pointer (TextPointerLabelParam)
+;     loss_text_pointer (TextPointerLabelParam)
+
+	ld hl, $d047
+	call GetScriptByte
+	ld [hli], a
+	call GetScriptByte
+	ld [hli], a
+	ld hl, $d049
+	call GetScriptByte
+	ld [hli], a
+	call GetScriptByte
+	ld [hli], a
+	ret
+; 0x97163
+
+Script_talkaftercancel: ; 0x97163
+; script command 0x66
+
+	ld a, [$d04d]
+	and a
+	ret z
+	jp $7b74
+; 0x9716b
+
+Script_talkaftercheck: ; 0x9716b
+; script command 0x67
+
+	ld a, $1
+	ld [$c2dd], a
+	ld a, [$d04d]
+	and a
+	ret nz
+	xor a
+	ld [$c2dd], a
+	ret
+; 0x9717a
+
+Script_playrammusic: ; 0x9717a
+; script command 0x80
+
+	ld a, [$d22f]
+	ld e, a
+	ld a, $3a
+	ld hl, $500a
+	rst $8
+	ret
+; 0x97185
+
+Script_playmapmusic: ; 0x97185
+; script command 0x82
+
+	call $3cdf
+	ret
+; 0x97189
+
+Script_playmusic: ; 0x97189
+; script command 0x7f
+; parameters:
+;     music_pointer (MultiByteParam)
+
+	ld de, $0000
+	call StartMusic
+	xor a
+	ld [$c2a7], a
+	call MaxVolume
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	call StartMusic
+	ret
+; 0x971a2
+
+Script_musicfadeout: ; 0x971a2
+; script command 0x81
+; parameters:
+;     music (MultiByteParam)
+;     fadetime (SingleByteParam)
+
+	call GetScriptByte
+	ld [$c2a9], a
+	call GetScriptByte
+	ld [$c2aa], a
+	call GetScriptByte
+	and $7f
+	ld [$c2a7], a
+	ret
+; 0x971b7
+
+Script_playsound: ; 0x971b7
+; script command 0x85
+; parameters:
+;     sound_pointer (MultiByteParam)
+
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	call StartSFX
+	ret
+; 0x971c3
+
+Script_waitbutton: ; 0x971c3
+; script command 0x86
+
+	call WaitSFX
+	ret
+; 0x971c7
+
+Script_warpsound: ; 0x971c7
+; script command 0x87
+
+	ld a, $5
+	ld hl, $4a07
+	rst $8
+	call StartSFX
+	ret
+; 0x971d1
+
+Script_cry: ; 0x971d1
+; script command 0x84
+; parameters:
+;     cry_id (MultiByteParam)
+
+	call GetScriptByte
+	push af
+	call GetScriptByte
+	pop af
+	and a
+	jr nz, .asm_971df ; 0x971da $3
+	ld a, [$c2dd]
+.asm_971df
+	call $37ce
+	ret
+; 0x971e3
+
+Unknown_0x971e3: ; 0x971e3
+    and a
+    ret z
+    cp $fe
+    ret z
+    dec a
+    ret
+; 0x971ea
+
+Script_setlasttalked: ; 0x971ea
+; script command 0x68
+; parameters:
+;     person (SingleByteParam)
+
+	call GetScriptByte
+	call Unknown_0x971e3
+	ld [$ffe0], a
+	ret
+; 0x971f3
+
+Script_applymovement: ; 0x971f3
+; script command 0x69
+; parameters:
+;     person (SingleByteParam)
+;     data (MovementPointerLabelParam)
+
+	call GetScriptByte
+	call Unknown_0x971e3
+	ld c, a
+	push bc
+	ld a, c
+	ld a, $1
+	ld hl, $585c
+	rst $8
+	pop bc
+	push bc
+	call $7221
+	pop bc
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	ld a, [ScriptBank]
+	ld b, a
+	call $26c7
+	ret c
+	ld a, $2
+	ld [$d437], a
+	call Unknown_0x96e11
+	ret
+; 0x97221
+
+Unknown_0x97221: ; 0x97221
+    ld a, $1
+    ld hl, $5897
+    rst $8
+    ret
+; 0x97228
+
+Script_applymovement2: ; 0x97228
+; script command 0x6a
+; parameters:
+;     data (MovementPointerLabelParam)
+
+	ld a, [$ffe0]
+	ld c, a
+	jp $71fa
+; 0x9722e
+
+Script_faceplayer: ; 0x9722e
+; script command 0x6b
+
+	ld a, [$ffe0]
+	and a
+	ret z
+	ld d, $0
+	ld a, [$ffe0]
+	ld e, a
+	ld a, $2
+	ld hl, $4417
+	rst $8
+	ld a, d
+	add a
+	add a
+	ld e, a
+	ld a, [$ffe0]
+	ld d, a
+	call $728b
+	ret
+; 0x97248
+
+Script_faceperson: ; 0x97248
+; script command 0x6c
+; parameters:
+;     person1 (SingleByteParam)
+;     person2 (SingleByteParam)
+
+	call GetScriptByte
+	call Unknown_0x971e3
+	cp $fe
+	jr c, .asm_97254 ; 0x97250 $2
+	ld a, [$ffe0]
+.asm_97254
+	ld e, a
+	call GetScriptByte
+	call Unknown_0x971e3
+	cp $fe
+	jr nz, .asm_97261 ; 0x9725d $2
+	ld a, [$ffe0]
+.asm_97261
+	ld d, a
+	push de
+	ld a, $2
+	ld hl, $4417
+	rst $8
+	pop bc
+	ret c
+	ld a, d
+	add a
+	add a
+	ld e, a
+	ld d, c
+	call $728b
+	ret
+; 0x97274
+
+Script_spriteface: ; 0x97274
+; script command 0x76
+; parameters:
+;     person (SingleByteParam)
+;     facing (SingleByteParam)
+
+	call GetScriptByte
+	call Unknown_0x971e3
+	cp $fe
+	jr nz, .asm_97280 ; 0x9727c $2
+	ld a, [$ffe0]
+.asm_97280
+	ld d, a
+	call GetScriptByte
+	add a
+	add a
+	ld e, a
+	call $728b
+	ret
+; 0x9728b
+
+Unknown_0x9728b: ; 0x9728b
+    ld a, d
+    push de
+    call $18de
+    jr c, .asm_972b9 ; 0x97290 $27
+    ld hl, $0000
+    add hl, bc
+    ld a, [hl]
+    push bc
+    call $1836
+    pop bc
+    jr c, .asm_972b9 ; 0x9729c $1b
+    ld hl, $0004
+    add hl, bc
+    bit 2, [hl]
+    jr nz, .asm_972b9 ; 0x972a4 $13
+    pop de
+    ld a, e
+    call $1af8
+    ld hl, $d0ed
+    bit 6, [hl]
+    jr nz, .asm_972b5 ; 0x972b0 $3
+    call $72bc
+.asm_972b5
+    call $1ad2
+    ret
+.asm_972b9
+    pop de
+    scf
+    ret
+; 0x972bc
+
+Unknown_0x972bc: ; 0x972bc
+    call $217a
+    ld hl, $c4a0
+    ld bc, $0168
+.asm_972c5
+    res 7, [hl]
+    inc hl
+    dec bc
+    ld a, b
+    or c
+    jr nz, .asm_972c5 ; 0x972cb $f8
+    ret
+; 0x972ce
+
+Script_variablesprite: ; 0x972ce
+; script command 0x6d
+; parameters:
+;     byte (SingleByteParam)
+;     sprite (SingleByteParam)
+
+	call GetScriptByte
+	ld e, a
+	ld d, $0
+	ld hl, $d82e
+	add hl, de
+	call GetScriptByte
+	ld [hl], a
+	ret
+; 0x972dd
+
+Script_appear: ; 0x972dd
+; script command 0x6f
+; parameters:
+;     person (SingleByteParam)
+
+	call GetScriptByte
+	call Unknown_0x971e3
+	call $1956
+	ld a, [$ffaf]
+	ld b, $0
+	call $730b
+	ret
+; 0x972ee
+
+Script_disappear: ; 0x972ee
+; script command 0x6e
+; parameters:
+;     person (SingleByteParam)
+
+	call GetScriptByte
+	call Unknown_0x971e3
+	cp $fe
+	jr nz, .asm_972fa ; 0x972f6 $2
+	ld a, [$ffe0]
+.asm_972fa
+	call $199f
+	ld a, [$ffaf]
+	ld b, $1
+	call $730b
+	ld a, $1
+	ld hl, $5920
+	rst $8
+	ret
+; 0x9730b
+
+Unknown_0x9730b: ; 0x9730b
+    push bc
+    call $18d2
+    ld hl, $000c
+    add hl, bc
+    pop bc
+    ld e, [hl]
+    inc hl
+    ld d, [hl]
+    ld a, $ff
+    cp e
+    jr nz, .asm_97321 ; 0x9731a $5
+    cp d
+    jr nz, .asm_97321 ; 0x9731d $2
+    xor a
+    ret
+.asm_97321
+    call BitTable1Func
+    ret
+; 0x97325
+
+Script_follow: ; 0x97325
+; script command 0x70
+; parameters:
+;     person2 (SingleByteParam)
+;     person1 (SingleByteParam)
+
+	call GetScriptByte
+	call Unknown_0x971e3
+	ld b, a
+	call GetScriptByte
+	call Unknown_0x971e3
+	ld c, a
+	ld a, $1
+	ld hl, $5803
+	rst $8
+	ret
+; 0x9733a
+
+Script_stopfollow: ; 0x9733a
+; script command 0x71
+
+	ld a, $1
+	ld hl, $581f
+	rst $8
+	ret
+; 0x97341
+
+Script_moveperson: ; 0x97341
+; script command 0x72
+; parameters:
+;     person (SingleByteParam)
+;     x (SingleByteParam)
+;     y (SingleByteParam)
+
+	call GetScriptByte
+	call Unknown_0x971e3
+	ld b, a
+	call GetScriptByte
+	add $4
+	ld d, a
+	call GetScriptByte
+	add $4
+	ld e, a
+	ld a, $2
+	ld hl, $407e
+	rst $8
+	ret
+; 0x9735b
+
+Script_writepersonxy: ; 0x9735b
+; script command 0x73
+; parameters:
+;     person (SingleByteParam)
+
+	call GetScriptByte
+	call Unknown_0x971e3
+	cp $fe
+	jr nz, .asm_97367 ; 0x97363 $2
+	ld a, [$ffe0]
+.asm_97367
+	ld b, a
+	ld a, $2
+	ld hl, $40a1
+	rst $8
+	ret
+; 0x9736f
+
+Script_follownotexact: ; 0x9736f
+; script command 0x77
+; parameters:
+;     person2 (SingleByteParam)
+;     person1 (SingleByteParam)
+
+	call GetScriptByte
+	call Unknown_0x971e3
+	ld b, a
+	call GetScriptByte
+	call Unknown_0x971e3
+	ld c, a
+	ld a, $2
+	ld hl, $439e
+	rst $8
+	ret
+; 0x97384
+
+Script_loademote: ; 0x97384
+; script command 0x74
+; parameters:
+;     bubble (SingleByteParam)
+
+	call GetScriptByte
+	cp $ff
+	jr nz, .asm_9738e ; 0x97389 $3
+	ld a, [$c2dd]
+.asm_9738e
+	ld c, a
+	ld a, $5
+	ld hl, $442f
+	rst $8
+	ret
+; 0x97396
+
+Script_showemote: ; 0x97396
+; script command 0x75
+; parameters:
+;     bubble (SingleByteParam)
+;     person (SingleByteParam)
+;     time (DecimalParam)
+
+	call GetScriptByte
+	ld [$c2dd], a
+	call GetScriptByte
+	call Unknown_0x971e3
+	cp $fe
+	jr z, .asm_973a8 ; 0x973a4 $2
+	ld [$ffe0], a
+.asm_973a8
+	call GetScriptByte
+	ld [$d44d], a
+	ld b, $25
+	ld de, $73b6
+	jp $74cb
+; 0x973b6
+
+INCBIN "baserom.gbc",$973b6,$973c7 - $973b6
+
+Script_earthquake: ; 0x973c7
+; script command 0x78
+; parameters:
+;     param (DecimalParam)
+
+	ld hl, $73eb
+	ld de, $d002
+	ld bc, $0005
+	call CopyBytes
+	call GetScriptByte
+	ld [$d003], a
+	and $3f
+	ld [$d005], a
+	ld b, $25
+	ld de, $73e6
+	jp $74cb
+; 0x973e6
+
+INCBIN "baserom.gbc",$973e6,$973f0 - $973e6
+
+Script_loadpikachudata: ; 0x973f0
+; script command 0x5a
+
+	ld a, $19
+	ld [$d22e], a
+	ld a, $5
+	ld [$d143], a
+	ret
+; 0x973fb
+
+Script_battlecheck: ; 0x973fb
+; script command 0x5b
+
+	xor a
+	ld [$d459], a
+	ret
+; 0x97400
+
+Script_loadtrainerdata: ; 0x97400
+; script command 0x5c
+
+	ld a, $81
+	ld [$d459], a
+	ld a, [$d043]
+	ld [$d22f], a
+	ld a, [$d044]
+	ld [$d231], a
+	ret
+; 0x97412
+
+Script_loadpokedata: ; 0x97412
+; script command 0x5d
+; parameters:
+;     pokemon (PokemonParam)
+;     level (DecimalParam)
+
+	ld a, $80
+	ld [$d459], a
+	call GetScriptByte
+	ld [$d22e], a
+	call GetScriptByte
+	ld [$d143], a
+	ret
+; 0x97424
+
+Script_loadtrainer: ; 0x97424
+; script command 0x5e
+; parameters:
+;     trainer_group (TrainerGroupParam)
+;     trainer_id (TrainerIdParam)
+
+	ld a, $81
+	ld [$d459], a
+	call GetScriptByte
+	ld [$d22f], a
+	call GetScriptByte
+	ld [$d231], a
+	ret
+; 0x97436
+
+Script_startbattle: ; 0x97436
+; script command 0x5f
+
+	call $2879
+	ld a, $16
+	call $2d83
+	ld a, [$d0ee]
+	and $3f
+	ld [$c2dd], a
+	ret
+; 0x97447
+
+Script_catchtutorial: ; 0x97447
+; script command 0x61
+; parameters:
+;     byte (SingleByteParam)
+
+	call GetScriptByte
+	ld [$d230], a
+	call $2879
+	ld a, $13
+	ld hl, $6554
+	rst $8
+	jp $7491
+; 0x97459
+
+Script_returnafterbattle: ; 0x97459
+; script command 0x60
+
+	ld hl, $d459
+	ld d, [hl]
+	ld [hl], $0
+	ld a, [$d0ee]
+	and $3f
+	cp $1
+	jr nz, .asm_97470 ; 0x97466 $8
+	ld b, $4
+	ld hl, $64c1
+	jp ScriptJump
+.asm_97470
+	bit 0, d
+	jr z, .asm_9747c ; 0x97472 $8
+	ld a, $3f
+	ld hl, $4fec
+	rst $8
+	jr .asm_9748e ; 0x9747a $12
+.asm_9747c
+	ld a, [$d0ee]
+	bit 7, a
+	jr z, .asm_9748e ; 0x97481 $b
+	ld b, $24
+	ld de, $4255
+	ld a, $25
+	ld hl, $7c4f
+	rst $8
+.asm_9748e
+	jp $7491
+; 0x97491
+
+Script_reloadmap: ; 0x97491
+; script command 0x7b
+
+	xor a
+	ld [$d459], a
+	ld a, $f3
+	ld [$ff9f], a
+	ld a, $1
+	call $261b
+	call Unknown_0x96e11
+	ret
+; 0x974a2
+
+Script_2call: ; 0x974a2
+; script command 0x0
+; parameters:
+;     pointer (ScriptPointerLabelParam)
+
+	ld a, [ScriptBank]
+	ld b, a
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	jr ScriptCall
+; 0x974b0
+
+Script_3call: ; 0x974b0
+; script command 0x1
+; parameters:
+;     pointer (ScriptPointerLabelBeforeBank)
+
+	call GetScriptByte
+	ld b, a
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	jr ScriptCall
+; 0x974be
+
+Script_2ptcall: ; 0x974be
+; script command 0x2
+; parameters:
+;     pointer (PointerLabelToScriptPointer)
+
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	ld b, [hl]
+	inc hl
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	; fallthrough
+
+ScriptCall: ; 0x974cb
+	push de
+	ld hl, $d43c
+	ld e, [hl]
+	inc [hl]
+	ld d, $0
+	ld hl, $d43d
+	add hl, de
+	add hl, de
+	add hl, de
+	pop de
+	ld a, [ScriptBank]
+	ld [hli], a
+	ld a, [ScriptPos]
+	ld [hli], a
+	ld a, [ScriptPos + 1]
+	ld [hl], a
+	ld a, b
+	ld [ScriptBank], a
+	ld a, e
+	ld [ScriptPos], a
+	ld a, d
+	ld [ScriptPos + 1], a
+	ret
+; 0x974f3
+
+Unknown_0x974f3: ; 0x974f3
+    ld a, [ScriptBank]
+    or $80
+    ld [ScriptBank], a
+    jp $74cb
+; 0x974fe
+
+Script_2jump: ; 0x974fe
+; script command 0x3
+; parameters:
+;     pointer (ScriptPointerLabelParam)
+
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	ld a, [ScriptBank]
+	ld b, a
+	jp ScriptJump
+; 0x9750d
+
+Script_3jump: ; 0x9750d
+; script command 0x4
+; parameters:
+;     pointer (ScriptPointerLabelBeforeBank)
+
+	call GetScriptByte
+	ld b, a
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	jp ScriptJump
+; 0x9751c
+
+Script_2ptjump: ; 0x9751c
+; script command 0x5
+; parameters:
+;     pointer (PointerLabelToScriptPointer)
+
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	ld b, [hl]
+	inc hl
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp ScriptJump
+; 0x9752c
+
+Script_iffalse: ; 0x9752c
+; script command 0x8
+; parameters:
+;     pointer (ScriptPointerLabelParam)
+
+	ld a, [$c2dd]
+	and a
+	jp nz, $7596
+	jp Script_2jump
+; 0x97536
+
+Script_iftrue: ; 0x97536
+; script command 0x9
+; parameters:
+;     pointer (ScriptPointerLabelParam)
+
+	ld a, [$c2dd]
+	and a
+	jp nz, Script_2jump
+	jp $7596
+; 0x97540
+
+Script_if_equal: ; 0x97540
+; script command 0x6
+; parameters:
+;     byte (SingleByteParam)
+;     pointer (ScriptPointerLabelParam)
+
+	call GetScriptByte
+	ld hl, $c2dd
+	cp [hl]
+	jr z, Script_2jump ; 0x97547 $b5
+	jr Unknown_97596 ; 0x97549 $4b
+; 0x9754b
+
+Script_if_not_equal: ; 0x9754b
+; script command 0x7
+; parameters:
+;     byte (SingleByteParam)
+;     pointer (ScriptPointerLabelParam)
+
+	call GetScriptByte
+	ld hl, $c2dd
+	cp [hl]
+	jr nz, Script_2jump ; 0x97552 $aa
+	jr Unknown_97596 ; 0x97554 $40
+; 0x97556
+
+Script_if_less_than: ; 0x97556
+; script command 0xa
+; parameters:
+;     byte (SingleByteParam)
+;     pointer (ScriptPointerLabelParam)
+
+	ld a, [$c2dd]
+	ld b, a
+	call GetScriptByte
+	cp b
+	jr c, Script_2jump ; 0x9755e $9e
+	jr Unknown_97596 ; 0x97560 $34
+; 0x97562
+
+Script_if_greater_than: ; 0x97562
+; script command 0xb
+; parameters:
+;     byte (SingleByteParam)
+;     pointer (ScriptPointerLabelParam)
+
+	call GetScriptByte
+	ld b, a
+	ld a, [$c2dd]
+	cp b
+	jr c, Script_2jump ; 0x9756a $92
+	jr Unknown_97596 ; 0x9756c $28
+; 0x9756e
+
+Script_jumpstd: ; 0x9756e
+; script command 0xc
+; parameters:
+;     predefined_script (MultiByteParam)
+
+	call $757b
+	jr ScriptJump ; 0x97571 $2a
+; 0x97573
+
+Script_callstd: ; 0x97573
+; script command 0xd
+; parameters:
+;     predefined_script (MultiByteParam)
+
+	call $757b
+	ld d, h
+	ld e, l
+	jp $74cb
+; 0x9757b
+
+Unknown_0x9757b: ; 0x9757b
+    call GetScriptByte
+    ld e, a
+    call GetScriptByte
+    ld d, a
+    ld hl, $4000
+    add hl, de
+    add hl, de
+    add hl, de
+    ld a, $2f
+    call GetFarByte
+    ld b, a
+    inc hl
+    ld a, $2f
+    call GetFarHalfword
+    ret
+; 0x97596
+
+Unknown_97596: ; 0x97596
+	call GetScriptByte
+	call GetScriptByte
+	ret
+; 0x9759d
+
+ScriptJump: ; 0x9759d
+	ld a, b
+	ld [ScriptBank], a
+	ld a, l
+	ld [ScriptPos], a
+	ld a, h
+	ld [ScriptPos + 1], a
+	ret
+; 0x975aa
+
+Script_priorityjump: ; 0x975aa
+; script command 0x8d
+; parameters:
+;     pointer (ScriptPointerLabelParam)
+
+	ld a, [ScriptBank]
+	ld [$d44e], a
+	call GetScriptByte
+	ld [$d44f], a
+	call GetScriptByte
+	ld [$d450], a
+	ld hl, $d434
+	set 3, [hl]
+	ret
+; 0x975c2
+
+Script_checktriggers: ; 0x975c2
+; script command 0x13
+
+	call $211b
+	jr z, .asm_975cb ; 0x975c5 $4
+	ld [$c2dd], a
+	ret
+.asm_975cb
+	ld a, $ff
+	ld [$c2dd], a
+	ret
+; 0x975d1
+
+Script_checkmaptriggers: ; 0x975d1
+; script command 0x11
+; parameters:
+;     map_group (SingleByteParam)
+;     map_id (SingleByteParam)
+
+	call GetScriptByte
+	ld b, a
+	call GetScriptByte
+	ld c, a
+	call $2147
+	ld a, d
+	or e
+	jr z, .asm_975e5 ; 0x975de $5
+	ld a, [de]
+	ld [$c2dd], a
+	ret
+.asm_975e5
+	ld a, $ff
+	ld [$c2dd], a
+	ret
+; 0x975eb
+
+Script_dotrigger: ; 0x975eb
+; script command 0x14
+; parameters:
+;     trigger_id (SingleByteParam)
+
+	ld a, [$dcb5]
+	ld b, a
+	ld a, [$dcb6]
+	ld c, a
+	jr Unknown_975fd ; 0x975f3 $8
+; 0x975f5
+
+Script_domaptrigger: ; 0x975f5
+; script command 0x12
+; parameters:
+;     map_group (MapGroupParam)
+;     map_id (MapIdParam)
+;     trigger_id (SingleByteParam)
+
+	call GetScriptByte
+	ld b, a
+	call GetScriptByte
+	ld c, a
+	; fallthrough
+
+Unknown_975fd: ; 0x975fd
+	call $2147
+	ld a, d
+	or e
+	jr z, .asm_97608 ; 0x97602 $4
+	call GetScriptByte
+	ld [de], a
+.asm_97608
+	ret
+; 0x97609
+
+Script_copybytetovar: ; 0x97609
+; script command 0x19
+; parameters:
+;     address (RAMAddressParam)
+
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	ld a, [hl]
+	ld [$c2dd], a
+	ret
+; 0x97616
+
+Script_copyvartobyte: ; 0x97616
+; script command 0x1a
+; parameters:
+;     address (RAMAddressParam)
+
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	ld a, [$c2dd]
+	ld [hl], a
+	ret
+; 0x97623
+
+Script_loadvar: ; 0x97623
+; script command 0x1b
+; parameters:
+;     address (RAMAddressParam)
+;     value (SingleByteParam)
+
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	call GetScriptByte
+	ld [hl], a
+	ret
+; 0x97630
+
+Script_writebyte: ; 0x97630
+; script command 0x15
+; parameters:
+;     value (SingleByteParam)
+
+	call GetScriptByte
+	ld [$c2dd], a
+	ret
+; 0x97637
+
+Script_addvar: ; 0x97637
+; script command 0x16
+; parameters:
+;     value (SingleByteParam)
+
+	call GetScriptByte
+	ld hl, $c2dd
+	add [hl]
+	ld [hl], a
+	ret
+; 0x97640
+
+Script_random: ; 0x97640
+; script command 0x17
+; parameters:
+;     input (SingleByteParam)
+
+	call GetScriptByte
+	ld [$c2dd], a
+	and a
+	ret z
+	ld c, a
+	call $7673
+	and a
+	jr z, .asm_9765f ; 0x9764d $10
+	ld b, a
+	xor a
+	sub b
+	ld b, a
+.asm_97653
+	push bc
+	call $2f8c
+	pop bc
+	ld a, [$ffe1]
+	cp b
+	jr nc, .asm_97653 ; 0x9765b $f6
+	jr .asm_97666 ; 0x9765d $7
+.asm_9765f
+	push bc
+	call $2f8c
+	pop bc
+	ld a, [$ffe1]
+.asm_97666
+	push af
+	ld a, [$c2dd]
+	ld c, a
+	pop af
+	call $3110
+	ld [$c2dd], a
+	ret
+; 0x97673
+
+Unknown_0x97673: ; 0x97673
+    xor a
+    ld b, a
+    sub c
+.asm_97676
+    inc b
+    sub c
+    jr nc, .asm_97676 ; 0x97678 $fc
+    dec b
+    add c
+    ret
+; 0x9767d
+
+Script_checkcode: ; 0x9767d
+; script command 0x1c
+; parameters:
+;     variable_id (SingleByteParam)
+
+	call GetScriptByte
+	call $769e
+	ld a, [de]
+	ld [$c2dd], a
+	ret
+; 0x97688
+
+Script_writevarcode: ; 0x97688
+; script command 0x1d
+; parameters:
+;     variable_id (SingleByteParam)
+
+	call GetScriptByte
+	call $769e
+	ld a, [$c2dd]
+	ld [de], a
+	ret
+; 0x97693
+
+Script_writecode: ; 0x97693
+; script command 0x1e
+; parameters:
+;     variable_id (SingleByteParam)
+;     value (SingleByteParam)
+
+	call GetScriptByte
+	call $769e
+	call GetScriptByte
+	ld [de], a
+	ret
+; 0x9769e
+
+Unknown_0x9769e: ; 0x9769e
+    ld c, a
+    ld a, $20
+    ld hl, $4648
+    rst $8
+    ret
+; 0x976a6
+
+Script_checkver: ; 0x976a6
+; script command 0x18
+
+	ld a, [$76ad]
+	ld [$c2dd], a
+	ret
+; 0x976ad
+
+INCBIN "baserom.gbc",$976ad,$976ae - $976ad
+
+Script_pokenamemem: ; 0x976ae
+; script command 0x40
+; parameters:
+;     pokemon (PokemonParam)
+;     memory (SingleByteParam)
+
+	call GetScriptByte
+	and a
+	jr nz, .asm_976b7 ; 0x976b2 $3
+	ld a, [$c2dd]
+.asm_976b7
+	ld [$d265], a
+	call $343b
+	ld de, $d073
+
+Unknown_976c0: ; 0x976c0
+	call GetScriptByte
+	cp $3
+	jr c, .asm_976c8 ; 0x976c5 $1
+	xor a
+.asm_976c8
+	ld hl, $d099
+	ld bc, $0013
+	call AddNTimes
+	call CopyName2
+	ret
+; 0x976d5
+
+Script_itemtotext: ; 0x976d5
+; script command 0x41
+; parameters:
+;     item (ItemLabelByte)
+;     memory (SingleByteParam)
+
+	call GetScriptByte
+	and a
+	jr nz, .asm_976de ; 0x976d9 $3
+	ld a, [$c2dd]
+.asm_976de
+	ld [$d265], a
+	call GetItemName
+	ld de, $d073
+	jr Unknown_976c0 ; 0x976e7 $d7
+; 0x976e9
+
+Script_mapnametotext: ; 0x976e9
+; script command 0x42
+; parameters:
+;     memory (SingleByteParam)
+
+	ld a, [$dcb5]
+	ld b, a
+	ld a, [$dcb6]
+	ld c, a
+	call GetWorldMapLocation
+
+Unknown_976f4: ; 0x976f4
+	ld e, a
+	ld a, $72
+	ld hl, $68a5
+	rst $8
+	ld de, $d073
+	jp $76c0
+; 0x97701
+
+Script_displaylocation: ; 0x97701
+; script command 0xa5
+; parameters:
+;     id (SingleByteParam)
+
+	call GetScriptByte
+	jr Unknown_976f4 ; 0x97704 $ee
+; 0x97706
+
+Script_trainertotext: ; 0x97706
+; script command 0x43
+; parameters:
+;     trainer_id (TrainerGroupParam)
+;     trainer_group (TrainerIdParam)
+;     memory (SingleByteParam)
+
+	call GetScriptByte
+	ld c, a
+	call GetScriptByte
+	ld b, a
+	ld a, $e
+	ld hl, $594c
+	rst $8
+	jr Unknown_976c0 ; 0x97714 $aa
+; 0x97716
+
+Script_unknown0xa7: ; 0x97716
+; script command 0xa7
+
+	call GetScriptByte
+	ld [$cf61], a
+
+Unknown_9771c: ; 0x9771c
+	call GetScriptByte
+	ld [$cf60], a
+	call GetName
+	ld de, $d073
+	jp $76c0
+; 0x9772b
+
+Script_unknown0xa6: ; 0x9772b
+; script command 0xa6
+
+	ld a, $7
+	ld [$cf61], a
+	jr Unknown_9771c ; 0x97730 $ea
+; 0x97732
+
+Script_readmoney: ; 0x97732
+; script command 0x3d
+; parameters:
+;     account (SingleByteParam)
+;     memory (SingleByteParam)
+
+	call $7771
+	call $7861
+	ld hl, $d073
+	ld bc, $4306
+	call $3198
+	ld de, $d073
+	jp $76c0
+; 0x97747
+
+Script_readcoins: ; 0x97747
+; script command 0x3e
+; parameters:
+;     memory (SingleByteParam)
+
+	call $7771
+	ld hl, $d073
+	ld de, $d855
+	ld bc, $4206
+	call $3198
+	ld de, $d073
+	jp $76c0
+; 0x9775c
+
+Script_RAM2MEM: ; 0x9775c
+; script command 0x3f
+; parameters:
+;     memory (SingleByteParam)
+
+	call $7771
+	ld de, $c2dd
+	ld hl, $d073
+	ld bc, $4103
+	call $3198
+	ld de, $d073
+	jp $76c0
+; 0x97771
+
+Unknown_0x97771: ; 0x97771
+    ld hl, $d073
+    ld bc, $000b
+    ld a, $50
+    call ByteFill
+    ret
+; 0x9777d
+
+Script_stringtotext: ; 0x9777d
+; script command 0x44
+; parameters:
+;     text_pointer (EncodedTextLabelParam)
+;     memory (SingleByteParam)
+
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	ld a, [ScriptBank]
+	ld hl, $30d6
+	rst $8
+	ld de, $d086
+	jp $76c0
+; 0x97792
+
+Script_givepokeitem: ; 0x97792
+; script command 0x2f
+; parameters:
+;     pointer (PointerParamToItemAndLetter)
+
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	ld a, [ScriptBank]
+	call GetFarByte
+	ld b, a
+	push bc
+	inc hl
+	ld bc, $0020
+	ld de, $d002
+	ld a, [ScriptBank]
+	call FarCopyBytes
+	pop bc
+	ld a, $11
+	ld hl, $46cc
+	rst $8
+	ret
+; 0x977b7
+
+Script_checkpokeitem: ; 0x977b7
+; script command 0x30
+; parameters:
+;     pointer (PointerParamToItemAndLetter)
+
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	ld a, [ScriptBank]
+	ld b, a
+	ld a, $11
+	ld hl, $4654
+	rst $8
+	ret
+; 0x977ca
+
+Script_giveitem: ; 0x977ca
+; script command 0x1f
+; parameters:
+;     item (ItemLabelByte)
+;     quantity (SingleByteParam)
+
+	call GetScriptByte
+	cp $ff
+	jr nz, .asm_977d4 ; 0x977cf $3
+	ld a, [$c2dd]
+.asm_977d4
+	ld [$d106], a
+	call GetScriptByte
+	ld [$d10c], a
+	ld hl, $d892
+	call $2f66
+	jr nc, .asm_977eb ; 0x977e3 $6
+	ld a, $1
+	ld [$c2dd], a
+	ret
+.asm_977eb
+	xor a
+	ld [$c2dd], a
+	ret
+; 0x977f0
+
+Script_takeitem: ; 0x977f0
+; script command 0x20
+; parameters:
+;     item (ItemLabelByte)
+;     quantity (DecimalParam)
+
+	xor a
+	ld [$c2dd], a
+	call GetScriptByte
+	ld [$d106], a
+	call GetScriptByte
+	ld [$d10c], a
+	ld a, $ff
+	ld [$d107], a
+	ld hl, $d892
+	call $2f53
+	ret nc
+	ld a, $1
+	ld [$c2dd], a
+	ret
+; 0x97812
+
+Script_checkitem: ; 0x97812
+; script command 0x21
+; parameters:
+;     item (ItemLabelByte)
+
+	xor a
+	ld [$c2dd], a
+	call GetScriptByte
+	ld [$d106], a
+	ld hl, $d892
+	call $2f79
+	ret nc
+	ld a, $1
+	ld [$c2dd], a
+	ret
+; 0x97829
+
+Script_givemoney: ; 0x97829
+; script command 0x22
+; parameters:
+;     account (SingleByteParam)
+;     money (MoneyByteParam)
+
+	call $7861
+	call $786d
+	ld a, $5
+	ld hl, $5fd7
+	rst $8
+	ret
+; 0x97836
+
+Script_takemoney: ; 0x97836
+; script command 0x23
+; parameters:
+;     account (SingleByteParam)
+;     money (MoneyByteParam)
+
+	call $7861
+	call $786d
+	ld a, $5
+	ld hl, $5ffa
+	rst $8
+	ret
+; 0x97843
+
+Script_checkmoney: ; 0x97843
+; script command 0x24
+; parameters:
+;     account (SingleByteParam)
+;     money (MoneyByteParam)
+
+	call $7861
+	call $786d
+	ld a, $5
+	ld hl, $600b
+	rst $8
+; 0x9784f
+
+Unknown_9784f: ; 0x9784f
+	jr c, .asm_9785b ; 0x9784f $a
+	jr z, .asm_97857 ; 0x97851 $4
+	ld a, $0
+	jr .asm_9785d ; 0x97855 $6
+.asm_97857
+	ld a, $1
+	jr .asm_9785d ; 0x97859 $2
+.asm_9785b
+	ld a, $2
+.asm_9785d
+	ld [$c2dd], a
+	ret
+; 0x97861
+
+Unknown_0x97861: ; 0x97861
+    call GetScriptByte
+    and a
+    ld de, $d84e
+    ret z
+    ld de, $d851
+    ret
+; 0x9786d
+
+Unknown_0x9786d: ; 0x9786d
+    ld bc, $ffc3
+    push bc
+    call GetScriptByte
+    ld [bc], a
+    inc bc
+    call GetScriptByte
+    ld [bc], a
+    inc bc
+    call GetScriptByte
+    ld [bc], a
+    pop bc
+    ret
+; 0x97881
+
+Script_givecoins: ; 0x97881
+; script command 0x25
+; parameters:
+;     coins (CoinByteParam)
+
+	call $78a0
+	ld a, $5
+	ld hl, $606f
+	rst $8
+	ret
+; 0x9788b
+
+Script_takecoins: ; 0x9788b
+; script command 0x26
+; parameters:
+;     coins (CoinByteParam)
+
+	call $78a0
+	ld a, $5
+	ld hl, $608f
+	rst $8
+	ret
+; 0x97895
+
+Script_checkcoins: ; 0x97895
+; script command 0x27
+; parameters:
+;     coins (CoinByteParam)
+
+	call $78a0
+	ld a, $5
+	ld hl, $60a1
+	rst $8
+	jr Unknown_9784f ; 0x9789e $af
+	call GetScriptByte
+	ld [$ffc4], a
+	call GetScriptByte
+	ld [$ffc3], a
+	ld bc, $ffc3
+	ret
+; 0x978ae
+
+Script_checktime: ; 0x978ae
+; script command 0x2b
+; parameters:
+;     time (SingleByteParam)
+
+	xor a
+	ld [$c2dd], a
+	ld a, $3
+	ld hl, $4000
+	rst $8
+	call GetScriptByte
+	and c
+	ret z
+	ld a, $1
+	ld [$c2dd], a
+	ret
+; 0x978c3
+
+Script_checkpoke: ; 0x978c3
+; script command 0x2c
+; parameters:
+;     pkmn (PokemonParam)
+
+	xor a
+	ld [$c2dd], a
+	call GetScriptByte
+	ld hl, $dcd8
+	ld de, $0001
+	call IsInArray
+	ret nc
+	ld a, $1
+	ld [$c2dd], a
+	ret
+; 0x978da
+
+Script_addcellnum: ; 0x978da
+; script command 0x28
+; parameters:
+;     person (SingleByteParam)
+
+	xor a
+	ld [$c2dd], a
+	call GetScriptByte
+	ld c, a
+	ld a, $24
+	ld hl, $4000
+	rst $8
+	ret nc
+	ld a, $1
+	ld [$c2dd], a
+	ret
+; 0x978ef
+
+Script_delcellnum: ; 0x978ef
+; script command 0x29
+; parameters:
+;     person (SingleByteParam)
+
+	xor a
+	ld [$c2dd], a
+	call GetScriptByte
+	ld c, a
+	ld a, $24
+	ld hl, $400f
+	rst $8
+	ret nc
+	ld a, $1
+	ld [$c2dd], a
+	ret
+; 0x97904
+
+Script_checkcellnum: ; 0x97904
+; script command 0x2a
+; parameters:
+;     person (SingleByteParam)
+
+	xor a
+	ld [$c2dd], a
+	call GetScriptByte
+	ld c, a
+	ld a, $24
+	ld hl, $4019
+	rst $8
+	ret nc
+	ld a, $1
+	ld [$c2dd], a
+	ret
+; 0x97919
+
+Script_specialphonecall: ; 0x97919
+; script command 0x9c
+; parameters:
+;     call_id (MultiByteParam)
+
+	call GetScriptByte
+	ld [$dc31], a
+	call GetScriptByte
+	ld [$dc32], a
+	ret
+; 0x97926
+
+Script_checkphonecall: ; 0x97926
+; script command 0x9d
+
+	ld a, [$dc31]
+	and a
+	jr z, .asm_9792e ; 0x9792a $2
+	ld a, $1
+.asm_9792e
+	ld [$c2dd], a
+	ret
+; 0x97932
+
+Script_givepoke: ; 0x97932
+; script command 0x2d
+; parameters:
+;     pokemon (PokemonParam)
+;     level (DecimalParam)
+;     item (ItemLabelByte)
+;     trainer (DecimalParam)
+;     trainer_name_pointer (MultiByteParam)
+;     pkmn_nickname (MultiByteParam)
+
+	call GetScriptByte
+	ld [$d108], a
+	call GetScriptByte
+	ld [$d143], a
+	call GetScriptByte
+	ld [$d106], a
+	call GetScriptByte
+	and a
+	ld b, a
+	jr z, .asm_9795d ; 0x97949 $12
+	ld hl, ScriptPos
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	call GetScriptByte
+	call GetScriptByte
+	call GetScriptByte
+	call GetScriptByte
+.asm_9795d
+	ld a, $3
+	ld hl, $6277
+	rst $8
+	ld a, b
+	ld [$c2dd], a
+	ret
+; 0x97968
+
+Script_giveegg: ; 0x97968
+; script command 0x2e
+; parameters:
+;     pkmn (PokemonParam)
+;     level (DecimalParam)
+
+	xor a
+	ld [$c2dd], a
+	ld [$cf5f], a
+	call GetScriptByte
+	ld [$d108], a
+	call GetScriptByte
+	ld [$d143], a
+	ld a, $3
+	ld hl, $5f8c
+	rst $8
+	ret nc
+	ld a, $2
+	ld [$c2dd], a
+	ret
+; 0x97988
+
+Script_setbit1: ; 0x97988
+; script command 0x33
+; parameters:
+;     bit_number (MultiByteParam)
+
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	ld b, $1
+	call BitTable1Func
+	ret
+; 0x97996
+
+Script_clearbit1: ; 0x97996
+; script command 0x32
+; parameters:
+;     bit_number (MultiByteParam)
+
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	ld b, $0
+	call BitTable1Func
+	ret
+; 0x979a4
+
+Script_checkbit1: ; 0x979a4
+; script command 0x31
+; parameters:
+;     bit_number (MultiByteParam)
+
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	ld b, $2
+	call BitTable1Func
+	ld a, c
+	and a
+	jr z, .asm_979b7 ; 0x979b3 $2
+	ld a, $1
+.asm_979b7
+	ld [$c2dd], a
+	ret
+; 0x979bb
+
+Script_setbit2: ; 0x979bb
+; script command 0x36
+; parameters:
+;     bit_number (MultiByteParam)
+
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	ld b, $1
+	call $79ee
+	ret
+; 0x979c9
+
+Script_clearbit2: ; 0x979c9
+; script command 0x35
+; parameters:
+;     bit_number (MultiByteParam)
+
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	ld b, $0
+	call $79ee
+	ret
+; 0x979d7
+
+Script_checkbit2: ; 0x979d7
+; script command 0x34
+; parameters:
+;     bit_number (MultiByteParam)
+
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	ld b, $2
+	call $79ee
+	ld a, c
+	and a
+	jr z, .asm_979ea ; 0x979e6 $2
+	ld a, $1
+.asm_979ea
+	ld [$c2dd], a
+	ret
+; 0x979ee
+
+Unknown_0x979ee: ; 0x979ee
+    ld a, $20
+    ld hl, $4430
+    rst $8
+    ret
+; 0x979f5
+
+Script_wildon: ; 0x979f5
+; script command 0x38
+
+	ld hl, $d84c
+	set 5, [hl]
+	ret
+; 0x979fb
+
+Script_wildoff: ; 0x979fb
+; script command 0x37
+
+	ld hl, $d84c
+	res 5, [hl]
+	ret
+; 0x97a01
+
+Script_xycompare: ; 0x97a01
+; script command 0x39
+; parameters:
+;     pointer (MultiByteParam)
+
+	call GetScriptByte
+	ld [$d453], a
+	call GetScriptByte
+	ld [$d454], a
+	ret
+; 0x97a0e
+
+Script_warpfacing: ; 0x97a0e
+; script command 0xa3
+; parameters:
+;     facing (SingleByteParam)
+;     map_group (MapGroupParam)
+;     map_id (MapIdParam)
+;     x (SingleByteParam)
+;     y (SingleByteParam)
+
+	call GetScriptByte
+	and $3
+	ld c, a
+	ld a, [$d45b]
+	set 5, a
+	or c
+	ld [$d45b], a
+; 0x97a1d
+
+Script_warp: ; 0x97a1d
+; script command 0x3c
+; parameters:
+;     map_group (MapGroupParam)
+;     map_id (MapIdParam)
+;     x (SingleByteParam)
+;     y (SingleByteParam)
+
+	call GetScriptByte
+	and a
+	jr z, .asm_97a4a ; 0x97a21 $27
+	ld [$dcb5], a
+	call GetScriptByte
+	ld [$dcb6], a
+	call GetScriptByte
+	ld [$dcb8], a
+	call GetScriptByte
+	ld [$dcb7], a
+	ld a, $ff
+	ld [$d001], a
+	ld a, $f1
+	ld [$ff9f], a
+	ld a, $1
+	call $261b
+	call Unknown_0x96e11
+	ret
+.asm_97a4a
+	call GetScriptByte
+	call GetScriptByte
+	call GetScriptByte
+	ld a, $ff
+	ld [$d001], a
+	ld a, $fb
+	ld [$ff9f], a
+	ld a, $1
+	call $261b
+	call Unknown_0x96e11
+	ret
+; 0x97a65
+
+Script_warpmod: ; 0x97a65
+; script command 0x3a
+; parameters:
+;     warp_id (SingleByteParam)
+;     map_group (MapGroupParam)
+;     map_id (MapIdParam)
+
+	call GetScriptByte
+	ld [$dcac], a
+	call GetScriptByte
+	ld [$dcad], a
+	call GetScriptByte
+	ld [$dcae], a
+	ret
+; 0x97a78
+
+Script_blackoutmod: ; 0x97a78
+; script command 0x3b
+; parameters:
+;     map_group (MapGroupParam)
+;     map_id (MapIdParam)
+
+	call GetScriptByte
+	ld [$dcb2], a
+	call GetScriptByte
+	ld [$dcb3], a
+	ret
+; 0x97a85
+
+Script_reloadmapmusic: ; 0x97a85
+; script command 0x83
+
+	ld a, $1
+	ld [$c2c1], a
+	ret
+; 0x97a8b
+
+Script_writecmdqueue: ; 0x97a8b
+; script command 0x7d
+; parameters:
+;     queue_pointer (MultiByteParam)
+
+	call GetScriptByte
+	ld e, a
+	call GetScriptByte
+	ld d, a
+	ld a, [ScriptBank]
+	ld b, a
+	ld a, $25
+	ld hl, $7e31
+	rst $8
+	ret
+; 0x97a9e
+
+Script_delcmdqueue: ; 0x97a9e
+; script command 0x7e
+; parameters:
+;     byte (SingleByteParam)
+
+	xor a
+	ld [$c2dd], a
+	call GetScriptByte
+	ld b, a
+	ld a, $25
+	ld hl, $7e5c
+	rst $8
+	ret c
+	ld a, $1
+	ld [$c2dd], a
+	ret
+; 0x97ab3
+
+Script_changemap: ; 0x97ab3
+; script command 0x79
+; parameters:
+;     map_data_pointer (MapDataPointerParam)
+
+	call GetScriptByte
+	ld [$d1a0], a
+	call GetScriptByte
+	ld [$d1a1], a
+	call GetScriptByte
+	ld [$d1a2], a
+	call $24e4
+	call $2879
+	ret
+; 0x97acc
+
+Script_changeblock: ; 0x97acc
+; script command 0x7a
+; parameters:
+;     x (SingleByteParam)
+;     y (SingleByteParam)
+;     block (SingleByteParam)
+
+	call GetScriptByte
+	add $4
+	ld d, a
+	call GetScriptByte
+	add $4
+	ld e, a
+	call $2a66
+	call GetScriptByte
+	ld [hl], a
+	call $2879
+	ret
+; 0x97ae3
+
+Script_reloadmappart: ; 0x97ae3
+; script command 0x7c
+
+	xor a
+	ld [$ffd4], a
+	call $2173
+	call $2914
+	ld a, $41
+	ld hl, $4061
+	rst $8
+	call $1ad2
+	ret
+; 0x97af6
+
+Script_warpcheck: ; 0x97af6
+; script command 0x8e
+
+	call $224a
+	ret nc
+	ld a, $25
+	ld hl, $66d0
+	rst $8
+	ret
+; 0x97b01
+
+Unknown_0x97b01: ; 0x97b01
+    ld a, $25
+    ld hl, $66d0
+    rst $8
+    ret
+; 0x97b08
+
+Script_newloadmap: ; 0x97b08
+; script command 0x8a
+; parameters:
+;     which_method (SingleByteParam)
+
+	call GetScriptByte
+	ld [$ff9f], a
+	ld a, $1
+	call $261b
+	call Unknown_0x96e11
+	ret
+; 0x97b16
+
+Script_reloadandreturn: ; 0x97b16
+; script command 0x92
+
+	call $7b08
+	jp $7b74
+; 0x97b1c
+
+Script_loadfont: ; 0x97b1c
+; script command 0x47
+
+	call $2e08
+	ret
+; 0x97b20
+
+Script_refreshscreen: ; 0x97b20
+; script command 0x48
+; parameters:
+;     dummy (SingleByteParam)
+
+	call $2dba
+	call GetScriptByte
+	ret
+; 0x97b27
+
+Script_loadbytec1ce: ; 0x97b27
+; script command 0x4a
+; parameters:
+;     byte (SingleByteParam)
+
+	call GetScriptByte
+	ld [$c2cf], a
+	ret
+; 0x97b2e
+
+INCBIN "baserom.gbc",$97b2e,$97b2f - $97b2e
+
+Script_loadmovesprites: ; 0x97b2f
+; script command 0x49
+
+	call $2e20
+	call $2dcf
+	ret
+; 0x97b36
+
+Script_passtoengine: ; 0x97b36
+; script command 0x89
+; parameters:
+;     data_pointer (PointerLabelBeforeBank)
+
+	call GetScriptByte
+	push af
+	call GetScriptByte
+	ld l, a
+	call GetScriptByte
+	ld h, a
+	pop af
+	call StartAutoInput
+	ret
+; 0x97b47
+
+Script_pause: ; 0x97b47
+; script command 0x8b
+; parameters:
+;     length (DecimalParam)
+
+	call GetScriptByte
+	and a
+	jr z, .asm_97b50 ; 0x97b4b $3
+	ld [$d44d], a
+.asm_97b50
+	ld c, $2
+	call DelayFrames
+	ld hl, $d44d
+	dec [hl]
+	jr nz, .asm_97b50 ; 0x97b59 $f5
+	ret
+; 0x97b5c
+
+Script_deactivatefacing: ; 0x97b5c
+; script command 0x8c
+; parameters:
+;     time (SingleByteParam)
+
+	call GetScriptByte
+	and a
+	jr z, .asm_97b65 ; 0x97b60 $3
+	ld [$d44d], a
+.asm_97b65
+	ld a, $3
+	ld [$d437], a
+	call Unknown_0x96e11
+	ret
+; 0x97b6e
+
+Script_ptpriorityjump: ; 0x97b6e
+; script command 0x8f
+; parameters:
+;     pointer (ScriptPointerLabelParam)
+
+	call Unknown_0x96e11
+	jp Script_2jump
+; 0x97b74
+
+Script_end: ; 0x97b74
+; script command 0x91
+
+	call $7b9a
+	jr c, .asm_97b7a ; 0x97b77 $1
+	ret
+.asm_97b7a
+	xor a
+	ld [$d438], a
+	ld a, $0
+	ld [$d437], a
+	ld hl, $d434
+	res 0, [hl]
+	call Unknown_0x96e11
+	ret
+; 0x97b8c
+
+Script_return: ; 0x97b8c
+; script command 0x90
+
+	call $7b9a
+	jr c, .asm_97b91 ; 0x97b8f $0
+.asm_97b91
+	ld hl, $d434
+	res 0, [hl]
+	call Unknown_0x96e11
+	ret
+; 0x97b9a
+
+Unknown_0x97b9a: ; 0x97b9a
+    ld hl, $d43c
+    ld a, [hl]
+    and a
+    jr z, .asm_97bbe ; 0x97b9f $1d
+    dec [hl]
+    ld e, [hl]
+    ld d, $0
+    ld hl, $d43d
+    add hl, de
+    add hl, de
+    add hl, de
+    ld a, [hli]
+    ld b, a
+    and $7f
+    ld [ScriptBank], a
+    ld a, [hli]
+    ld e, a
+    ld [ScriptPos], a
+    ld a, [hl]
+    ld d, a
+    ld [ScriptPos + 1], a
+    and a
+    ret
+.asm_97bbe
+    scf
+    ret
+; 0x97bc0
+
+Script_resetfuncs: ; 0x97bc0
+; script command 0x93
+
+	xor a
+	ld [$d43c], a
+	ld [$d438], a
+	ld a, $0
+	ld [$d437], a
+	ld hl, $d434
+	res 0, [hl]
+	call Unknown_0x96e11
+	ret
+; 0x97bd5
+
+Script_halloffame: ; 0x97bd5
+; script command 0xa1
+
+	ld hl, $cfbc
+	res 0, [hl]
+	ld a, BANK(HallOfFame1)
+	ld hl, HallOfFame1
+	rst $8
+	ld a, BANK(HallOfFame2)
+	ld hl, HallOfFame2
+	rst $8
+	ld a, BANK(HallOfFame3)
+	ld hl, HallOfFame3
+	rst $8
+	ld hl, $cfbc
+	set 0, [hl]
+	jr DisplayCredits
+; 0x97bf3
+
+Script_credits: ; 0x97bf3
+; script command 0xa2
+
+	ld a, $21
+	ld hl, $6455
+	rst $8
+	; fallthrough
+DisplayCredits:
+	call $7bc0
+	ld a, $3
+	call $261b
+	call Unknown_0x96e11
+	ret
+; 0x97c05
+
+Script_unknown0xa8: ; 0x97c05
+; script command 0xa8
+; parameters:
+;     unknown (SingleByteParam)
+
+	push bc
+	call GetScriptByte
+.asm_97c09
+	push af
+	ld c, $6
+	call DelayFrames
+	pop af
+	dec a
+	jr nz, .asm_97c09 ; 0x97c11 $f6
+	pop bc
+	ret
+; 0x97c15
+
+Script_unknown0xa9: ; 0x97c15
+; script command 0xa9
+
+	ld a, $13
+	ld hl, $4ffe
+	rst $8
+	ld a, c
+	ld [$c2dd], a
+	ret
+; 0x97c20
--- /dev/null
+++ b/engine/vblank.asm
@@ -1,0 +1,539 @@
+; VBlank is the interrupt responsible for updating VRAM.
+
+; In Pokemon Crystal, VBlank has been hijacked to act as the
+; main loop. After time-sensitive graphics operations have been
+; performed, joypad input and sound functions are executed.
+
+; This prevents the display and audio output from lagging.
+
+	push af
+	push bc
+	push de
+	push hl
+	
+; get vblank type
+	ld a, [$ff9e]
+	and $7
+	
+; get fn pointer
+	ld e, a
+	ld d, $0
+	ld hl, .VBlanks
+	add hl, de
+	add hl, de
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	
+; down to business
+	call JpHl
+	
+; since this is called once per frame
+	call GameTimer
+	
+	pop hl
+	pop de
+	pop bc
+	pop af
+	reti
+; 2a1
+
+.VBlanks ; 2a1
+	dw VBlank0 ; 0
+	dw VBlank1 ; 1
+	dw VBlank2 ; 2
+	dw VBlank3 ; 3
+	dw VBlank4 ; 4
+	dw VBlank5 ; 5
+	dw VBlank6 ; 6
+	dw VBlank0 ; 7
+; 2b1
+
+
+VBlank0: ; 2b1
+; normal operation
+
+; rng
+; scx, scy, wy, wx
+; bg map buffer
+; palettes
+; dma transfer
+; bg map
+; tiles
+; oam
+; joypad
+; sound
+
+; inc frame counter
+	ld hl, $ff9b
+	inc [hl]
+	
+; advance rng
+	ld a, [rDIV]
+	ld b, a
+	ld a, [$ffe1]
+	adc b
+	ld [$ffe1], a
+	
+	ld a, [rDIV]
+	ld b, a
+	ld a, [$ffe2]
+	sbc b
+	ld [$ffe2], a
+	
+; save bank
+	ld a, [$ff9d] ; current bank
+	ld [$ff8a], a
+	
+; scroll x
+	ld a, [$ffcf]
+	ld [rSCX], a
+; scroll y
+	ld a, [$ffd0]
+	ld [rSCY], a
+; window y
+	ld a, [$ffd2]
+	ld [rWY], a
+; window x + 7
+	ld a, [$ffd1]
+	ld [rWX], a
+	
+; some time management is in order
+; only have time for one of these during vblank
+	
+; bg map buffer has priority
+	call UpdateBGMapBuffer
+	jr c, .doneframeaction
+	
+; then pals
+	call UpdatePalsIfCGB
+	jr c, .doneframeaction
+	
+; dma transfer
+	call DMATransfer
+	jr c, .doneframeaction
+	
+; bg map
+	call UpdateBGMap
+	
+; these have their own timing checks
+	call SafeLoadTiles
+	call SafeLoadTiles2
+	call SafeTileAnimation
+	
+.doneframeaction
+; oam update off?
+	ld a, [$ffd8]
+	and a
+	jr nz, .vblankoccurred
+	
+; update oam by dma transfer
+	call hPushOAM
+;	403f:
+;		ld a, $c4
+;		ld [rDMA], a
+;		ld a, $28
+;	.loop
+;		dec a
+;		jr nz, .loop
+;		ret
+
+
+; vblank-sensitive operations are done
+	
+.vblankoccurred
+; tell other fns vblank happened
+	xor a
+	ld [VBlankOccurred], a
+	
+; dec $cfb1 until 0
+	ld a, [$cfb1]
+	and a
+	jr z, .textdelay
+	dec a
+	ld [$cfb1], a
+	
+.textdelay
+; dec text delay counter until 0
+	ld a, [TextDelayFrames]
+	and a
+	jr z, .joypad
+	dec a
+	ld [TextDelayFrames], a
+	
+.joypad
+	call Joypad
+	
+; update sound
+	ld a, BANK(UpdateSound)
+	rst Bankswitch ; bankswitch
+	call UpdateSound
+	ld a, [$ff8a]
+	rst Bankswitch ; restore bank
+	
+; 
+	ld a, [$ff98]
+	ld [$ffe3], a
+	
+	ret
+; 325
+
+
+VBlank2: ; 325
+; sound only
+
+; save bank
+	ld a, [$ff9d]
+	ld [$ff8a], a
+	
+; update sound
+	ld a, BANK(UpdateSound)
+	rst Bankswitch ; bankswitch
+	call UpdateSound
+	
+; restore bank
+	ld a, [$ff8a]
+	rst Bankswitch
+	
+; tell other fns vblank happened
+	xor a
+	ld [VBlankOccurred], a
+	ret
+; 337
+
+
+VBlank1: ; 337
+; scx, scy
+; palettes
+; bg map
+; tiles
+; oam
+; sound / lcd stat
+
+; save bank
+	ld a, [$ff9d]
+	ld [$ff8a], a
+	
+; scroll x
+	ld a, [$ffcf]
+	ld [rSCX], a
+	
+; scroll y
+	ld a, [$ffd0]
+	ld [rSCY], a
+	
+; time-sensitive fns
+	call UpdatePals
+	jr c, .vblankoccurred
+	
+; these have their own timing checks
+	call UpdateBGMap
+	call LoadTiles
+; update oam by dma transfer
+	call hPushOAM
+;	403f:
+;		ld a, $c4
+;		ld [rDMA], a
+;		ld a, $28
+;	.loop
+;		dec a
+;		jr nz, .loop
+;		ret
+	
+.vblankoccurred
+; tell other fns vblank happened
+	xor a
+	ld [VBlankOccurred], a
+	
+; get requested ints
+	ld a, [rIF]
+	ld b, a
+; discard requested ints
+	xor a
+	ld [rIF], a
+; enable lcd stat
+	ld a, %10 ; lcd stat
+	ld [rIE], a
+; rerequest serial int if applicable (still disabled)
+; request lcd stat
+	ld a, b
+	and %1000 ; serial
+	or %10 ; lcd stat
+	ld [rIF], a
+	
+	ei
+; update sound
+	ld a, BANK(UpdateSound)
+	rst Bankswitch ; bankswitch
+	call UpdateSound
+; restore bank
+	ld a, [$ff8a]
+	rst Bankswitch
+	di
+	
+; get requested ints
+	ld a, [rIF]
+	ld b, a
+; discard requested ints
+	xor a
+	ld [rIF], a
+; enable ints besides joypad
+	ld a, %1111 ; serial timer lcdstat vblank
+	ld [rIE], a
+; rerequest ints
+	ld a, b
+	ld [rIF], a
+	ret
+; 37f
+
+
+UpdatePals: ; 37f
+; update pals for either dmg or cgb
+
+; check cgb
+	ld a, [$ffe6]
+	and a
+	jp nz, UpdateCGBPals
+	
+; update gb pals
+	ld a, [$cfc7]
+	ld [rBGP], a
+	
+	ld a, [$cfc8]
+	ld [rOBP0], a
+	
+	ld a, [$cfc9]
+	ld [rOBP1], a
+	
+	and a
+	ret
+; 396
+
+
+VBlank3: ; 396
+; scx, scy
+; palettes
+; bg map
+; tiles
+; oam
+; sound / lcd stat
+
+; save bank
+	ld a, [$ff9d]
+	ld [$ff8a], a
+	
+; scroll x
+	ld a, [$ffcf]
+	ld [rSCX], a
+; scroll y
+	ld a, [$ffd0]
+	ld [rSCY], a
+	
+; any pals to update?
+	ld a, [$ffe5]
+	and a
+	call nz, ForceUpdateCGBPals
+	jr c, .vblankoccurred
+; else
+	call UpdateBGMap
+	call LoadTiles
+	
+; update oam by dma transfer
+	call hPushOAM
+;	403f:
+;		ld a, $c4 ; Sprites / $100
+;		ld [rDMA], a
+;		ld a, $28
+;	.loop
+;		dec a
+;		jr nz, .loop
+;		ret
+	
+.vblankoccurred
+; tell other fns vblank happened
+	xor a
+	ld [VBlankOccurred], a
+	
+; save int flag
+	ld a, [rIF]
+	push af
+; reset ints
+	xor a
+	ld [rIF], a
+; force lcdstat int during sound update
+	ld a, %10 ; lcd stat
+	ld [rIE], a
+	ld [rIF], a
+	
+	ei
+; update sound
+	ld a, BANK(UpdateSound)
+	rst Bankswitch ; bankswitch
+	call UpdateSound
+; restore bank
+	ld a, [$ff8a]
+	rst Bankswitch
+	di
+	
+; request lcdstat
+	ld a, [rIF]
+	ld b, a
+; and any other ints
+	pop af
+	or b
+	ld b, a
+; reset ints
+	xor a
+	ld [rIF], a
+; enable ints besides joypad
+	ld a, %1111 ; serial timer lcdstat vblank
+	ld [rIE], a
+; request ints
+	ld a, b
+	ld [rIF], a
+	ret
+; 3df
+
+
+VBlank4: ; 3df
+; bg map
+; tiles
+; oam
+; joypad
+; serial
+; sound
+
+; save bank
+	ld a, [$ff9d]
+	ld [$ff8a], a
+	
+	call UpdateBGMap
+	call SafeLoadTiles
+	
+; update oam by dma transfer
+	call hPushOAM
+;	403f:
+;		ld a, $c4
+;		ld [rDMA], a
+;		ld a, $28
+;	.loop
+;		dec a
+;		jr nz, .loop
+;		ret
+	
+; update joypad
+	call Joypad
+	
+; tell other fns vblank happened
+	xor a
+	ld [VBlankOccurred], a
+	
+; handshake
+	call AskSerial
+	
+; update sound
+	ld a, BANK(UpdateSound)
+	rst Bankswitch ; bankswitch
+	call UpdateSound
+; restore bank
+	ld a, [$ff8a]
+	rst Bankswitch
+	ret
+; 400
+
+
+VBlank5: ; 400
+; scx
+; palettes
+; bg map
+; tiles
+; joypad
+; 
+
+; save bank
+	ld a, [$ff9d]
+	ld [$ff8a], a
+	
+; scroll x
+	ld a, [$ffcf]
+	ld [rSCX], a
+	
+; if we can update pals, skip this part
+	call UpdatePalsIfCGB
+	jr c, .vblankoccurred
+	
+	call UpdateBGMap
+	call SafeLoadTiles
+	
+.vblankoccurred
+; tell other fns vblank happened
+	xor a
+	ld [VBlankOccurred], a
+	
+; joypad
+	call Joypad
+	
+; discard requested ints
+	xor a
+	ld [rIF], a
+; enable lcd stat
+	ld a, %10 ; lcd stat
+	ld [rIE], a
+; request lcd stat
+	ld [rIF], a
+	
+	ei
+; update sound
+	ld a, BANK(UpdateSound)
+	rst Bankswitch ; bankswitch
+	call UpdateSound
+; restore bank
+	ld a, [$ff8a]
+	rst Bankswitch
+	di
+	
+; discard requested ints
+	xor a
+	ld [rIF], a
+; enable ints besides joypad
+	ld a, %1111 ; serial timer lcdstat vblank
+	ld [rIE], a
+	ret
+; 436
+
+
+VBlank6: ; 436
+; palettes
+; tiles
+; dma transfer
+; sound
+
+; save bank
+	ld a, [$ff9d]
+	ld [$ff8a], a
+	
+; inc frame counter
+	ld hl, $ff9b
+	inc [hl]
+	
+	call UpdateCGBPals
+	jr c, .vblankoccurred
+	
+	call SafeLoadTiles
+	call SafeLoadTiles2
+	call DMATransfer
+	
+.vblankoccurred
+; tell other fns vblank happened
+	xor a
+	ld [VBlankOccurred], a
+	
+; update sound
+	ld a, BANK(UpdateSound)
+	rst Bankswitch ; bankswitch
+	call UpdateSound
+; restore bank
+	ld a, [$ff8a]
+	rst Bankswitch
+	ret
+; 45a
--- a/joypad.asm
+++ /dev/null
@@ -1,275 +1,0 @@
-JoypadInt: ; 92e
-; Replaced by Joypad, called from VBlank instead of the useless
-; joypad interrupt.
-
-; This is a placeholder in case the interrupt is somehow enabled.
-	reti
-; 92f
-
-ClearJoypadPublic: ; 92f
-	xor a
-; Pressed this frame (delta)
-	ld [hJoyPressed], a
-; Currently pressed
-	ld [hJoyDown], a
-	ret
-; 935
-
-Joypad: ; 935
-; Read the joypad register and translate it to something more
-; workable for use in-game. There are 8 buttons, so we can use
-; one byte to contain all player input.
-
-; Updates:
-
-; hJoypadReleased: released this frame (delta)
-; hJoypadPressed: pressed this frame (delta)
-; hJoypadDown: currently pressed
-; hJoypadSum: pressed so far
-
-; Any of these three bits can be used to disable input.
-	ld a, [$cfbe]
-	and %11010000
-	ret nz
-	
-; If we're saving, input is disabled.
-	ld a, [$c2cd]
-	and a
-	ret nz
-	
-; We can only get four inputs at a time.
-; We take d-pad first for no particular reason.
-	ld a, D_PAD
-	ld [rJOYP], a
-; Read twice to give the request time to take.
-	ld a, [rJOYP]
-	ld a, [rJOYP]
-	
-; The Joypad register output is in the lo nybble (inversed).
-; We make the hi nybble of our new container d-pad input.
-	cpl
-	and $f
-	swap a
-	
-; We'll keep this in b for now.
-	ld b, a
-	
-; Buttons make 8 total inputs (A, B, Select, Start).
-; We can fit this into one byte.
-	ld a, BUTTONS
-	ld [rJOYP], a
-; Wait for input to stabilize.
-	ld a, [rJOYP]
-	ld a, [rJOYP]
-	ld a, [rJOYP]
-	ld a, [rJOYP]
-	ld a, [rJOYP]
-	ld a, [rJOYP]
-; Buttons take the lo nybble.
-	cpl
-	and $f
-	or b
-	ld b, a
-	
-; Reset the joypad register since we're done with it.
-	ld a, $30
-	ld [rJOYP], a
-	
-; To get the delta we xor the last frame's input with the new one.
-	ld a, [hJoypadDown] ; last frame
-	ld e, a
-	xor b
-	ld d, a
-; Released this frame:
-	and e
-	ld [hJoypadReleased], a
-; Pressed this frame:
-	ld a, d
-	and b
-	ld [hJoypadPressed], a
-	
-; Add any new presses to the list of collective presses:
-	ld c, a
-	ld a, [hJoypadSum]
-	or c
-	ld [hJoypadSum], a
-	
-; Currently pressed:
-	ld a, b
-	ld [hJoypadDown], a
-	
-; Now that we have the input, we can do stuff with it.
-
-; For example, soft reset:
-	and BUTTON_A | BUTTON_B | SELECT | START
-	cp  BUTTON_A | BUTTON_B | SELECT | START
-	jp z, $0150 ; reset
-	
-	ret
-; 984
-
-
-GetJoypadPublic: ; 984
-; Update mirror joypad input from hJoypadDown (real input)
-
-; hJoyReleased: released this frame (delta)
-; hJoyPressed: pressed this frame (delta)
-; hJoyDown: currently pressed
-
-; bit 0 A
-;     1 B
-;     2 SELECT
-;     3 START
-;     4 RIGHT
-;     5 LEFT
-;     6 UP
-;     7 DOWN
-
-	push af
-	push hl
-	push de
-	push bc
-	
-; The player input can be automated using an input stream.
-; See more below.
-	ld a, [InputType]
-	cp a, AUTO_INPUT
-	jr z, .auto
-
-; To get deltas, take this and last frame's input.
-	ld a, [hJoypadDown] ; real input
-	ld b, a
-	ld a, [hJoyDown] ; last frame mirror
-	ld e, a
-	
-; Released this frame:
-	xor b
-	ld d, a
-	and e
-	ld [hJoyReleased], a
-	
-; Pressed this frame:
-	ld a, d
-	and b
-	ld [hJoyPressed], a
-	
-; It looks like the collective presses got commented out here.
-	ld c, a
-	
-; Currently pressed:
-	ld a, b
-	ld [hJoyDown], a ; frame input
-	
-.quit
-	pop bc
-	pop de
-	pop hl
-	pop af
-	ret	
-
-.auto
-; Use a predetermined input stream (used in the catching tutorial).
-
-; Stream format: [input][duration]
-; A value of $ff will immediately end the stream.
-
-; Read from the input stream.
-	ld a, [hROMBank]
-	push af
-	ld a, [AutoInputBank]
-	rst Bankswitch
-	
-	ld hl, AutoInputAddress
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	
-; We only update when the input duration has expired.
-	ld a, [AutoInputLength]
-	and a
-	jr z, .updateauto
-	
-; Until then, don't change anything.
-	dec a
-	ld [AutoInputLength], a
-	pop af
-	rst Bankswitch
-	jr .quit
-	
-	
-.updateauto
-; An input of $ff will end the stream.
-	ld a, [hli]
-	cp a, $ff
-	jr z, .stopauto
-	ld b, a
-	
-; A duration of $ff will end the stream indefinitely.
-	ld a, [hli]
-	ld [AutoInputLength], a
-	cp a, $ff
-	jr nz, .next
-	
-; The current input is overwritten.
-	dec hl
-	dec hl
-	ld b, NO_INPUT
-	jr .finishauto
-	
-.next
-; On to the next input...
-	ld a, l
-	ld [AutoInputAddress], a
-	ld a, h
-	ld [AutoInputAddress+1], a
-	jr .finishauto
-	
-.stopauto
-	call StopAutoInput
-	ld b, NO_INPUT
-	
-.finishauto
-	pop af
-	rst Bankswitch
-	ld a, b
-	ld [hJoyPressed], a ; pressed
-	ld [hJoyDown], a ; input
-	jr .quit
-; 9ee
-
-
-StartAutoInput: ; 9ee
-; Start reading automated input stream at a:hl.
-	
-	ld [AutoInputBank], a
-	ld a, l
-	ld [AutoInputAddress], a
-	ld a, h
-	ld [AutoInputAddress+1], a
-; Start reading the stream immediately.
-	xor a
-	ld [AutoInputLength], a
-; Reset input mirrors.
-	xor a
-	ld [hJoyPressed], a ; pressed this frame
-	ld [hJoyReleased], a ; released this frame
-	ld [hJoyDown], a ; currently pressed
-	
-	ld a, AUTO_INPUT
-	ld [InputType], a
-	ret
-; a0a
-
-
-StopAutoInput: ; a0a
-; Clear variables related to automated input.
-	xor a
-	ld [AutoInputBank], a
-	ld [AutoInputAddress], a
-	ld [AutoInputAddress+1], a
-	ld [AutoInputLength], a
-; Back to normal input.
-	ld [InputType], a
-	ret
-; a1b
-
--- a/landmarks.asm
+++ /dev/null
@@ -1,539 +1,0 @@
-GetLandmarkCoords: ; 0x1ca896
-; given a landmark id in e, return the y coord in d, and the x coord in e.
-	push hl
-	ld l, e
-	ld h, $0
-	add hl, hl
-	add hl, hl
-	ld de, Landmarks
-	add hl, de
-	ld a, [hli]
-	ld e, a
-	ld d, [hl]
-	pop hl
-	ret
-
-
-GetLandmarkName: ; 0x1ca8a5
-; given a landmark id in e, copy its name to $d073.
-	push hl
-	push de
-	push bc
-	ld l, e
-	ld h, $0
-	add hl, hl
-	add hl, hl
-	ld de, Landmarks + 2 ; skip the coordinates, we only want the string
-	add hl, de
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ld de, $d073
-	ld c, 18
-.loop
-	ld a, [hli]
-	ld [de], a
-	inc de
-	dec c
-	jr nz, .loop
-	pop bc
-	pop de
-	pop hl
-	ret
-
-Landmarks: ; 0x1ca8c3
-;db x coord, y coord
-;dw pointer to name 
-	db 0,0
-	dw SpecialMapString
-
-	db 148,116
-	dw NewBarkString
-
-	db 136,116
-	dw Route29String
-
-	db 108,116
-	dw CherrygroveString
-
-	db 108,96
-	dw Route30String
-
-	db 104,76
-	dw Route31String
-
-	db 92,76
-	dw VioletString
-
-	db 93,74
-	dw SproutString
-
-	db 92,108
-	dw Route32String
-
-	db 84,92
-	dw RuinsString
-
-	db 92,140
-	dw UnionString
-
-	db 90,140
-	dw Route33String
-
-	db 76,140
-	dw AzaleaString
-
-	db 78,138
-	dw WellString
-
-	db 60,136
-	dw IlexString
-
-	db 60,128
-	dw Route34String
-
-	db 60,108
-	dw GoldenrodString
-
-	db 58,108
-	dw RadioTowerString
-
-	db 60,92
-	dw Route35String
-
-	db 60,76
-	dw ParkString
-
-	db 72,76
-	dw Route36String
-
-	db 76,68
-	dw Route37String
-
-	db 76,60
-	dw EcruteakString
-
-	db 78,58
-	dw TinString
-
-	db 74,58
-	dw BurnedTowerString
-
-	db 60,60
-	dw Route38String
-
-	db 44,64
-	dw Route39String
-
-	db 44,76
-	dw OlivineString
-
-	db 46,78
-	dw LighthouseString
-
-	db 36,72
-	dw BattleTowerString
-
-	db 36,80
-	dw Route40String
-
-	db 36,108
-	dw WhirlString
-
-	db 36,116
-	dw Route41String
-
-	db 28,116
-	dw CianwoodString
-
-	db 100,60
-	dw Route42String
-
-	db 92,60
-	dw MortarString
-
-	db 116,60
-	dw MahoganyString
-
-	db 116,52
-	dw Route43String
-
-	db 116,44
-	dw LakeString
-
-	db 128,60
-	dw Route44String
-
-	db 138,54
-	dw PathString
-
-	db 140,60
-	dw BlackthornString
-
-	db 140,52
-	dw DenString
-
-	db 140,80
-	dw Route45String
-
-	db 120,88
-	dw DarkString
-
-	db 132,104
-	dw Route46String
-
-	db 156,84
-	dw SilverCaveString
-
-	db 60,124
-	dw PalletString
-
-	db 60,108
-	dw Route1String
-
-	db 60,92
-	dw ViridianString
-
-	db 60,80
-	dw Route2String
-
-	db 60,68
-	dw PewterString
-
-	db 72,68
-	dw Route3String
-
-	db 84,68
-	dw MoonString
-
-	db 96,68
-	dw Route4String
-
-	db 108,68
-	dw CeruleanString
-
-	db 108,60
-	dw Route24String
-
-	db 116,52
-	dw Route25String
-
-	db 108,76
-	dw Route5String
-
-	db 116,92
-	dw UndergroundString
-
-	db 108,92
-	dw Route6String
-
-	db 108,100
-	dw VermilionString
-
-	db 96,76
-	dw DiglettsCaveString
-
-	db 96,84
-	dw Route7String
-
-	db 124,84
-	dw Route8String
-
-	db 124,68
-	dw Route9String
-
-	db 140,68
-	dw TunnelString
-
-	db 140,72
-	dw Route10String
-
-	db 140,76
-	dw PlantString
-
-	db 140,84
-	dw LavenderString
-
-	db 148,84
-	dw LavTowerString
-
-	db 84,84
-	dw CeladonString
-
-	db 108,84
-	dw SaffronString
-
-	db 124,100
-	dw Route11String
-
-	db 140,96
-	dw Route12String
-
-	db 132,116
-	dw Route13String
-
-	db 124,128
-	dw Route14String
-
-	db 112,132
-	dw Route15String
-
-	db 76,84
-	dw Route16String
-
-	db 76,108
-	dw Route17String
-
-	db 88,132
-	dw Route18String
-
-	db 100,132
-	dw FuchsiaString
-
-	db 100,144
-	dw Route19String
-
-	db 84,148
-	dw Route20String
-
-	db 76,148
-	dw SeafoamString
-
-	db 60,148
-	dw CinnabarString
-
-	db 60,136
-	dw Route21String
-
-	db 44,84
-	dw Route22String
-
-	db 36,68
-	dw RoadString
-
-	db 36,60
-	dw Route23String
-
-	db 36,52
-	dw IndigoString
-
-	db 36,108
-	dw Route26String
-
-	db 28,116
-	dw Route27String
-
-	db 20,116
-	dw FallsString
-
-	db 28,84
-	dw Route28String
-
-	db 148,132
-	dw AquaString
-
-NewBarkString:
-	db "NEW BARK",$1F,"TOWN@"
-CherrygroveString:
-	db "CHERRYGROVE",$1F,"CITY@"
-VioletString:
-	db "VIOLET CITY@"
-AzaleaString:
-	db "AZALEA TOWN@"
-GoldenrodString:
-	db "GOLDENROD",$1F,"CITY@"
-EcruteakString:
-	db "ECRUTEAK",$1F,"CITY@"
-OlivineString:
-	db "OLIVINE",$1F,"CITY@"
-CianwoodString:
-	db "CIANWOOD",$1F,"CITY@"
-MahoganyString:
-	db "MAHOGANY",$1F,"TOWN@"
-BlackthornString:
-	db "BLACKTHORN",$1F,"CITY@"
-LakeString:
-	db "LAKE OF",$1F,"RAGE@"
-SilverCaveString:
-	db "SILVER CAVE@"
-SproutString:
-	db "SPROUT",$1F,"TOWER@"
-RuinsString:
-	db "RUINS",$1F,"OF ALPH@"
-UnionString:
-	db "UNION CAVE@"
-WellString:
-	db "SLOWPOKE",$1F,"WELL@"
-RadioTowerString:
-	db "RADIO TOWER@"
-PlantString:
-	db "POWER PLANT@"
-ParkString:
-	db "NATIONAL",$1F,"PARK@"
-TinString:
-	db "TIN TOWER@"
-LighthouseString:
-	db "LIGHTHOUSE@"
-WhirlString:
-	db "WHIRL",$1F,"ISLANDS@"
-MortarString:
-	db "MT.MORTAR@"
-DenString:
-	db "DRAGON'S",$1F,"DEN@"
-PathString:
-	db "ICE PATH@"
-NotApplicableString:
-	db "N/A@"
-PalletString:
-	db "PALLET TOWN@"
-ViridianString:
-	db "VIRIDIAN",$1F,"CITY@"
-PewterString:
-	db "PEWTER CITY@"
-CeruleanString:
-	db "CERULEAN",$1F,"CITY@"
-LavenderString:
-	db "LAVENDER",$1F,"TOWN@"
-VermilionString:
-	db "VERMILION",$1F,"CITY@"
-CeladonString:
-	db "CELADON",$1F,"CITY@"
-SaffronString:
-	db "SAFFRON",$1F,"CITY@"
-FuchsiaString:
-	db "FUCHSIA",$1F,"CITY@"
-CinnabarString:
-	db "CINNABAR",$1F,"ISLAND@"
-IndigoString:
-	db "INDIGO",$1F,"PLATEAU@"
-RoadString:
-	db "VICTORY",$1F,"ROAD@"
-MoonString:
-	db "MT.MOON@"
-TunnelString:
-	db "ROCK TUNNEL@"
-LavTowerString:
-	db "LAV",$1F,"RADIO TOWER@"
-SilphString:
-	db "SILPH CO.@"
-ZoneString:
-	db "SAFARI ZONE@"
-SeafoamString:
-	db "SEAFOAM",$1F,"ISLANDS@"
-MansionString:
-	db "#MON",$1F,"MANSION@"
-DungeonString:
-	db "CERULEAN",$1F,"CAVE@"
-Route1String:
-	db "ROUTE 1@"
-Route2String:
-	db "ROUTE 2@"
-Route3String:
-	db "ROUTE 3@"
-Route4String:
-	db "ROUTE 4@"
-Route5String:
-	db "ROUTE 5@"
-Route6String:
-	db "ROUTE 6@"
-Route7String:
-	db "ROUTE 7@"
-Route8String:
-	db "ROUTE 8@"
-Route9String:
-	db "ROUTE 9@"
-Route10String:
-	db "ROUTE 10@"
-Route11String:
-	db "ROUTE 11@"
-Route12String:
-	db "ROUTE 12@"
-Route13String:
-	db "ROUTE 13@"
-Route14String:
-	db "ROUTE 14@"
-Route15String:
-	db "ROUTE 15@"
-Route16String:
-	db "ROUTE 16@"
-Route17String:
-	db "ROUTE 17@"
-Route18String:
-	db "ROUTE 18@"
-Route19String:
-	db "ROUTE 19@"
-Route20String:
-	db "ROUTE 20@"
-Route21String:
-	db "ROUTE 21@"
-Route22String:
-	db "ROUTE 22@"
-Route23String:
-	db "ROUTE 23@"
-Route24String:
-	db "ROUTE 24@"
-Route25String:
-	db "ROUTE 25@"
-Route26String:
-	db "ROUTE 26@"
-Route27String:
-	db "ROUTE 27@"
-Route28String:
-	db "ROUTE 28@"
-Route29String:
-	db "ROUTE 29@"
-Route30String:
-	db "ROUTE 30@"
-Route31String:
-	db "ROUTE 31@"
-Route32String:
-	db "ROUTE 32@"
-Route33String:
-	db "ROUTE 33@"
-Route34String:
-	db "ROUTE 34@"
-Route35String:
-	db "ROUTE 35@"
-Route36String:
-	db "ROUTE 36@"
-Route37String:
-	db "ROUTE 37@"
-Route38String:
-	db "ROUTE 38@"
-Route39String:
-	db "ROUTE 39@"
-Route40String:
-	db "ROUTE 40@"
-Route41String:
-	db "ROUTE 41@"
-Route42String:
-	db "ROUTE 42@"
-Route43String:
-	db "ROUTE 43@"
-Route44String:
-	db "ROUTE 44@"
-Route45String:
-	db "ROUTE 45@"
-Route46String:
-	db "ROUTE 46@"
-DarkString:
-	db "DARK CAVE@"
-IlexString:
-	db "ILEX",$1F,"FOREST@"
-BurnedTowerString:
-	db "BURNED",$1F,"TOWER@"
-AquaString:
-	db "FAST SHIP@"
-ViridianForestString:
-	db "VIRIDIAN",$1F,"FOREST@"
-DiglettsCaveString:
-	db "DIGLETT'S",$1F,"CAVE@"
-FallsString:
-	db "TOHJO FALLS@"
-UndergroundString:
-	db "UNDERGROUND@"
-BattleTowerString:
-	db "BATTLE",$1F,"TOWER@"
-SpecialMapString:
-	db "SPECIAL@"
-
--- a/main.asm
+++ b/main.asm
@@ -60,7 +60,7 @@
 
 
 VBlank: ; 283
-INCLUDE "vblank.asm"
+INCLUDE "engine/vblank.asm"
 
 
 DelayFrame: ; 45a
@@ -437,7 +437,7 @@
 INCBIN "baserom.gbc", $6c4, $92e - $6c4
 
 
-INCLUDE "joypad.asm"
+INCLUDE "engine/joypad.asm"
 
 
 INCBIN "baserom.gbc", $a1b, $b40 - $a1b
@@ -12984,7 +12984,7 @@
 
 
 BitTable2: ; 80462
-INCLUDE "bittable2.asm"
+INCLUDE "engine/bittable2.asm"
 ; 80648
 
 
@@ -14938,7 +14938,7 @@
 
 INCBIN "baserom.gbc", $966b0, $96cb1 - $966b0
 
-INCLUDE "scripting.asm"
+INCLUDE "engine/scripting.asm"
 
 INCBIN "baserom.gbc", $97c20, $35e
 
@@ -19353,7 +19353,7 @@
 INCBIN "baserom.gbc", $10983f, $1099aa - $10983f
 
 ; Credits
-INCLUDE "credits.asm"
+INCLUDE "engine/credits.asm"
 
 
 SECTION "bank43",DATA,BANK[$43]
@@ -21354,7 +21354,7 @@
 INCLUDE "battle/move_names.asm"
 
 
-INCLUDE "landmarks.asm"
+INCLUDE "engine/landmarks.asm"
 
 
 RegionCheck: ; 0x1caea1
--- a/scripting.asm
+++ /dev/null
@@ -1,3127 +1,0 @@
-ScriptCommandTable: ; 0x96cb1
-	dw Script_2call
-	dw Script_3call
-	dw Script_2ptcall
-	dw Script_2jump
-	dw Script_3jump
-	dw Script_2ptjump
-	dw Script_if_equal
-	dw Script_if_not_equal
-	dw Script_iffalse
-	dw Script_iftrue
-	dw Script_if_less_than
-	dw Script_if_greater_than
-	dw Script_jumpstd
-	dw Script_callstd
-	dw Script_3callasm
-	dw Script_special
-	dw Script_2ptcallasm
-	dw Script_checkmaptriggers
-	dw Script_domaptrigger
-	dw Script_checktriggers
-	dw Script_dotrigger
-	dw Script_writebyte
-	dw Script_addvar
-	dw Script_random
-	dw Script_checkver
-	dw Script_copybytetovar
-	dw Script_copyvartobyte
-	dw Script_loadvar
-	dw Script_checkcode
-	dw Script_writevarcode
-	dw Script_writecode
-	dw Script_giveitem
-	dw Script_takeitem
-	dw Script_checkitem
-	dw Script_givemoney
-	dw Script_takemoney
-	dw Script_checkmoney
-	dw Script_givecoins
-	dw Script_takecoins
-	dw Script_checkcoins
-	dw Script_addcellnum
-	dw Script_delcellnum
-	dw Script_checkcellnum
-	dw Script_checktime
-	dw Script_checkpoke
-	dw Script_givepoke
-	dw Script_giveegg
-	dw Script_givepokeitem
-	dw Script_checkpokeitem
-	dw Script_checkbit1
-	dw Script_clearbit1
-	dw Script_setbit1
-	dw Script_checkbit2
-	dw Script_clearbit2
-	dw Script_setbit2
-	dw Script_wildoff
-	dw Script_wildon
-	dw Script_xycompare
-	dw Script_warpmod
-	dw Script_blackoutmod
-	dw Script_warp
-	dw Script_readmoney
-	dw Script_readcoins
-	dw Script_RAM2MEM
-	dw Script_pokenamemem
-	dw Script_itemtotext
-	dw Script_mapnametotext
-	dw Script_trainertotext
-	dw Script_stringtotext
-	dw Script_itemnotify
-	dw Script_pocketisfull
-	dw Script_loadfont
-	dw Script_refreshscreen
-	dw Script_loadmovesprites
-	dw Script_loadbytec1ce
-	dw Script_3writetext
-	dw Script_2writetext
-	dw Script_repeattext
-	dw Script_yesorno
-	dw Script_loadmenudata
-	dw Script_writebackup
-	dw Script_jumptextfaceplayer
-	dw Script_3jumptext
-	dw Script_jumptext
-	dw Script_closetext
-	dw Script_keeptextopen
-	dw Script_pokepic
-	dw Script_pokepicyesorno
-	dw Script_interpretmenu
-	dw Script_interpretmenu2
-	dw Script_loadpikachudata
-	dw Script_battlecheck
-	dw Script_loadtrainerdata
-	dw Script_loadpokedata
-	dw Script_loadtrainer
-	dw Script_startbattle
-	dw Script_returnafterbattle
-	dw Script_catchtutorial
-	dw Script_trainertext
-	dw Script_trainerstatus
-	dw Script_winlosstext
-	dw Script_scripttalkafter
-	dw Script_talkaftercancel
-	dw Script_talkaftercheck
-	dw Script_setlasttalked
-	dw Script_applymovement
-	dw Script_applymovement2
-	dw Script_faceplayer
-	dw Script_faceperson
-	dw Script_variablesprite
-	dw Script_disappear
-	dw Script_appear
-	dw Script_follow
-	dw Script_stopfollow
-	dw Script_moveperson
-	dw Script_writepersonxy
-	dw Script_loademote
-	dw Script_showemote
-	dw Script_spriteface
-	dw Script_follownotexact
-	dw Script_earthquake
-	dw Script_changemap
-	dw Script_changeblock
-	dw Script_reloadmap
-	dw Script_reloadmappart
-	dw Script_writecmdqueue
-	dw Script_delcmdqueue
-	dw Script_playmusic
-	dw Script_playrammusic
-	dw Script_musicfadeout
-	dw Script_playmapmusic
-	dw Script_reloadmapmusic
-	dw Script_cry
-	dw Script_playsound
-	dw Script_waitbutton
-	dw Script_warpsound
-	dw Script_specialsound
-	dw Script_passtoengine
-	dw Script_newloadmap
-	dw Script_pause
-	dw Script_deactivatefacing
-	dw Script_priorityjump
-	dw Script_warpcheck
-	dw Script_ptpriorityjump
-	dw Script_return
-	dw Script_end
-	dw Script_reloadandreturn
-	dw Script_resetfuncs
-	dw Script_pokemart
-	dw Script_elevator
-	dw Script_trade
-	dw Script_askforphonenumber
-	dw Script_phonecall
-	dw Script_hangup
-	dw Script_describedecoration
-	dw Script_fruittree
-	dw Script_specialphonecall
-	dw Script_checkphonecall
-	dw Script_verbosegiveitem
-	dw Script_verbosegiveitem2
-	dw Script_loadwilddata
-	dw Script_halloffame
-	dw Script_credits
-	dw Script_warpfacing
-	dw Script_storetext
-	dw Script_displaylocation
-	dw Script_unknown0xa6
-	dw Script_unknown0xa7
-	dw Script_unknown0xa8
-	dw Script_unknown0xa9
-; 0x96e05
-
-Unknown_0x96e05: ; 0x96e05
-    ld hl, $d434
-    set 2, [hl]
-    ret
-; 0x96e0b
-
-Unknown_0x96e0b: ; 0x96e0b
-    ld hl, $d434
-    bit 2, [hl]
-    ret
-; 0x96e11
-
-Unknown_0x96e11: ; 0x96e11
-    ld hl, $d434
-    res 2, [hl]
-    ret
-; 0x96e17
-
-Script_3callasm: ; 0x96e17
-; script command 0xe
-; parameters:
-;     asm (AsmPointerParam)
-
-	call GetScriptByte
-	ld b, a
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	ld a, b
-	rst $8
-	ret
-; 0x96e26
-
-Script_special: ; 0x96e26
-; script command 0xf
-; parameters:
-;     predefined_script (MultiByteParam)
-
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	ld a, $3
-	ld hl, $401b
-	rst $8
-	ret
-; 0x96e35
-
-Script_2ptcallasm: ; 0x96e35
-; script command 0x10
-; parameters:
-;     asm (PointerToAsmPointerParam)
-
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	ld b, [hl]
-	inc hl
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ld a, b
-	rst $8
-	ret
-; 0x96e45
-
-Script_jumptextfaceplayer: ; 0x96e45
-; script command 0x51
-; parameters:
-;     text_pointer (RawTextPointerLabelParam)
-
-	ld a, [ScriptBank]
-	ld [$d44e], a
-	call GetScriptByte
-	ld [$d44f], a
-	call GetScriptByte
-	ld [$d450], a
-	ld b, $25
-	ld hl, $6e79
-	jp ScriptJump
-; 0x96e5f
-
-Script_jumptext: ; 0x96e5f
-; script command 0x53
-; parameters:
-;     text_pointer (RawTextPointerLabelParam)
-
-	ld a, [ScriptBank]
-	ld [$d44e], a
-	call GetScriptByte
-	ld [$d44f], a
-	call GetScriptByte
-	ld [$d450], a
-	ld b, $25
-	ld hl, $6e7a
-	jp ScriptJump
-; 0x96e79
-
-INCBIN "baserom.gbc",$96e79,$96e81 - $96e79
-
-Script_3jumptext: ; 0x96e81
-; script command 0x52
-; parameters:
-;     text_pointer (PointerLabelBeforeBank)
-
-	call GetScriptByte
-	ld [$d44e], a
-	call GetScriptByte
-	ld [$d44f], a
-	call GetScriptByte
-	ld [$d450], a
-	ld b, $25
-	ld hl, $6e7a
-	jp ScriptJump
-; 0x96e9b
-
-Script_2writetext: ; 0x96e9b
-; script command 0x4c
-; parameters:
-;     text_pointer (RawTextPointerLabelParam)
-
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	ld a, [ScriptBank]
-	ld b, a
-	call $269a
-	ret
-; 0x96eab
-
-Script_3writetext: ; 0x96eab
-; script command 0x4b
-; parameters:
-;     text_pointer (PointerLabelBeforeBank)
-
-	call GetScriptByte
-	ld b, a
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	call $269a
-	ret
-; 0x96ebb
-
-Script_repeattext: ; 0x96ebb
-; script command 0x4d
-; parameters:
-;     byte (SingleByteParam)
-;     byte (SingleByteParam)
-
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	cp $ff
-	jr nz, .asm_96ed8 ; 0x96ec5 $11
-	ld a, l
-	cp $ff
-	jr nz, .asm_96ed8 ; 0x96eca $c
-	ld hl, $d44e
-	ld a, [hli]
-	ld b, a
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	call $269a
-	ret
-.asm_96ed8
-	ret
-; 0x96ed9
-
-Script_closetext: ; 0x96ed9
-; script command 0x54
-
-	jp $0a46
-; 0x96edc
-
-Script_keeptextopen: ; 0x96edc
-; script command 0x55
-
-	ld a, [$ffd8]
-	push af
-	ld a, $1
-	ld [$ffd8], a
-	call $31f6
-	call $0aaf
-	pop af
-	ld [$ffd8], a
-	ret
-; 0x96eed
-
-Script_yesorno: ; 0x96eed
-; script command 0x4e
-
-	call $1dcf
-	ld a, $0
-	jr c, .asm_96ef6 ; 0x96ef2 $2
-	ld a, $1
-.asm_96ef6
-	ld [$c2dd], a
-	ret
-; 0x96efa
-
-Script_loadmenudata: ; 0x96efa
-; script command 0x4f
-; parameters:
-;     data (MenuDataPointerParam)
-
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	ld de, $1d35
-	ld a, [ScriptBank]
-	call $26b7
-	call $1ad2
-	ret
-; 0x96f0f
-
-Script_writebackup: ; 0x96f0f
-; script command 0x50
-
-	call $1c17
-	call $1ad2
-	ret
-; 0x96f16
-
-Script_pokepic: ; 0x96f16
-; script command 0x56
-; parameters:
-;     pokemon (PokemonParam)
-
-	call GetScriptByte
-	and a
-	jr nz, .asm_96f1f ; 0x96f1a $3
-	ld a, [$c2dd]
-.asm_96f1f
-	ld [$d108], a
-	ld a, $9
-	ld hl, $44e3
-	rst $8
-	ret
-; 0x96f29
-
-Script_pokepicyesorno: ; 0x96f29
-; script command 0x57
-
-	ld a, $9
-	ld hl, $4528
-	rst $8
-	ret
-; 0x96f30
-
-Script_interpretmenu2: ; 0x96f30
-; script command 0x59
-
-	ld a, [ScriptBank]
-	ld hl, $1d81
-	rst $8
-	ld a, [$cfa9]
-	jr nc, .asm_96f3d ; 0x96f3a $1
-	xor a
-.asm_96f3d
-	ld [$c2dd], a
-	ret
-; 0x96f41
-
-Script_interpretmenu: ; 0x96f41
-; script command 0x58
-
-	ld a, [ScriptBank]
-	ld hl, $202a
-	rst $8
-	ld a, [$cf88]
-	jr nc, .asm_96f4e ; 0x96f4b $1
-	xor a
-.asm_96f4e
-	ld [$c2dd], a
-	ret
-; 0x96f52
-
-Script_storetext: ; 0x96f52
-; script command 0xa4
-; parameters:
-;     pointer (PointerLabelBeforeBank)
-;     memory (SingleByteParam)
-
-	call $106c
-	call GetScriptByte
-	ld c, a
-	ld a, $47
-	ld hl, $4000
-	rst $8
-	ret
-; 0x96f60
-
-Script_verbosegiveitem: ; 0x96f60
-; script command 0x9e
-; parameters:
-;     item (ItemLabelByte)
-;     quantity (DecimalParam)
-
-	call $77ca
-	call $7051
-	ld de, $d073
-	ld a, $1
-	call $76c8
-	ld b, $25
-	ld de, $6f77
-	jp $74cb
-; 0x96f76
-
-INCBIN "baserom.gbc",$96f76,$96f8e - $96f76
-
-Script_verbosegiveitem2: ; 0x96f8e
-; script command 0x9f
-; parameters:
-;     item (ItemLabelByte)
-;     var (SingleByteParam)
-
-	call GetScriptByte
-	cp $ff
-	jr nz, .asm_96f98 ; 0x96f93 $3
-	ld a, [$c2dd]
-.asm_96f98
-	ld [$d106], a
-	call GetScriptByte
-	call $769e
-	ld a, [de]
-	ld [$d10c], a
-	ld hl, $d892
-	call $2f66
-	ld a, $1
-	jr c, .asm_96fb0 ; 0x96fad $1
-	xor a
-.asm_96fb0
-	ld [$c2dd], a
-	call $7051
-	ld de, $d073
-	ld a, $1
-	call $76c8
-	ld b, $25
-	ld de, $6f77
-	jp $74cb
-; 0x96fc6
-
-Script_itemnotify: ; 0x96fc6
-; script command 0x45
-
-	call $6ffe
-	call $7051
-	ld b, $25
-	ld hl, $705b
-	call $269a
-	ret
-; 0x96fd5
-
-Script_pocketisfull: ; 0x96fd5
-; script command 0x46
-
-	call $6ffe
-	call $7051
-	ld b, $25
-	ld hl, $7060
-	call $269a
-	ret
-; 0x96fe4
-
-Script_specialsound: ; 0x96fe4
-; script command 0x88
-
-	ld a, $3
-	ld hl, $543d
-	rst $8
-	ld a, [$d142]
-	cp TM_HM
-	ld de, SFX_GET_TM
-	jr z, .play
-	ld de, SFX_ITEM
-.play
-	call StartSFX
-	call WaitSFX
-	ret
-; 0x96ffe
-
-INCBIN "baserom.gbc",$96ffe,$97065 - $96ffe
-
-Script_pokemart: ; 0x97065
-; script command 0x94
-; parameters:
-;     dialog_id (SingleByteParam)
-;     mart_id (MultiByteParam)
-
-	call GetScriptByte
-	ld c, a
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	ld a, [ScriptBank]
-	ld b, a
-	ld a, $5
-	ld hl, $5a45
-	rst $8
-	ret
-; 0x9707c
-
-Script_elevator: ; 0x9707c
-; script command 0x95
-; parameters:
-;     floor_list_pointer (PointerLabelParam)
-
-	xor a
-	ld [$c2dd], a
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	ld a, [ScriptBank]
-	ld b, a
-	ld a, $4
-	ld hl, $742d
-	rst $8
-	ret c
-	ld a, $1
-	ld [$c2dd], a
-	ret
-; 0x97099
-
-Script_trade: ; 0x97099
-; script command 0x96
-; parameters:
-;     trade_id (SingleByteParam)
-
-	call GetScriptByte
-	ld e, a
-	ld a, $3f
-	ld hl, $4ba8
-	rst $8
-	ret
-; 0x970a4
-
-Script_phonecall: ; 0x970a4
-; script command 0x98
-; parameters:
-;     caller_name (RawTextPointerLabelParam)
-
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	ld a, [ScriptBank]
-	ld b, a
-	ld a, $24
-	ld hl, $429a
-	rst $8
-	ret
-; 0x970b7
-
-Script_hangup: ; 0x970b7
-; script command 0x99
-
-	ld a, $24
-	ld hl, $42eb
-	rst $8
-	ret
-; 0x970be
-
-Script_askforphonenumber: ; 0x970be
-; script command 0x97
-; parameters:
-;     number (SingleByteParam)
-
-	call $1dcf
-	jr c, .asm_970d6 ; 0x970c1 $13
-	call GetScriptByte
-	ld c, a
-	ld a, $24
-	ld hl, $4000
-	rst $8
-	jr c, .asm_970d2 ; 0x970cd $3
-	xor a
-	jr .asm_970db ; 0x970d0 $9
-.asm_970d2
-	ld a, $1
-	jr .asm_970db ; 0x970d4 $5
-.asm_970d6
-	call GetScriptByte
-	ld a, $2
-.asm_970db
-	ld [$c2dd], a
-	ret
-; 0x970df
-
-Script_describedecoration: ; 0x970df
-; script command 0x9a
-; parameters:
-;     byte (SingleByteParam)
-
-	call GetScriptByte
-	ld b, a
-	ld a, $9
-	ld hl, $6f59
-	rst $8
-	ld h, d
-	ld l, e
-	jp ScriptJump
-; 0x970ee
-
-Script_fruittree: ; 0x970ee
-; script command 0x9b
-; parameters:
-;     tree_id (SingleByteParam)
-
-	call GetScriptByte
-	ld [CurFruitTree], a
-	ld b, BANK(FruitTreeScript)
-	ld hl, FruitTreeScript
-	jp ScriptJump
-; 0x970fc
-
-Script_loadwilddata: ; 0x970fc
-; script command 0xa0
-; parameters:
-;     map_group (MapGroupParam)
-;     map_id (MapIdParam)
-
-	call GetScriptByte
-	ld c, a
-	call GetScriptByte
-	ld d, a
-	call GetScriptByte
-	ld e, a
-	ld a, $3
-	ld hl, $4403
-	rst $8
-	ret
-; 0x9710f
-
-Script_trainertext: ; 0x9710f
-; script command 0x62
-; parameters:
-;     which_text (SingleByteParam)
-
-	call GetScriptByte
-	ld c, a
-	ld b, $0
-	ld hl, $d045
-	add hl, bc
-	add hl, bc
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ld a, [$d03e]
-	ld b, a
-	call $269a
-	ret
-; 0x97125
-
-Script_scripttalkafter: ; 0x97125
-; script command 0x65
-
-	ld hl, $d04b
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ld a, [$d03e]
-	ld b, a
-	jp ScriptJump
-; 0x97132
-
-Script_trainerstatus: ; 0x97132
-; script command 0x63
-; parameters:
-;     action (SingleByteParam)
-
-	xor a
-	ld [$c2dd], a
-	ld hl, $d041
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	call GetScriptByte
-	ld b, a
-	call BitTable1Func
-	ld a, c
-	and a
-	ret z
-	ld a, $1
-	ld [$c2dd], a
-	ret
-; 0x9714c
-
-Script_winlosstext: ; 0x9714c
-; script command 0x64
-; parameters:
-;     win_text_pointer (TextPointerLabelParam)
-;     loss_text_pointer (TextPointerLabelParam)
-
-	ld hl, $d047
-	call GetScriptByte
-	ld [hli], a
-	call GetScriptByte
-	ld [hli], a
-	ld hl, $d049
-	call GetScriptByte
-	ld [hli], a
-	call GetScriptByte
-	ld [hli], a
-	ret
-; 0x97163
-
-Script_talkaftercancel: ; 0x97163
-; script command 0x66
-
-	ld a, [$d04d]
-	and a
-	ret z
-	jp $7b74
-; 0x9716b
-
-Script_talkaftercheck: ; 0x9716b
-; script command 0x67
-
-	ld a, $1
-	ld [$c2dd], a
-	ld a, [$d04d]
-	and a
-	ret nz
-	xor a
-	ld [$c2dd], a
-	ret
-; 0x9717a
-
-Script_playrammusic: ; 0x9717a
-; script command 0x80
-
-	ld a, [$d22f]
-	ld e, a
-	ld a, $3a
-	ld hl, $500a
-	rst $8
-	ret
-; 0x97185
-
-Script_playmapmusic: ; 0x97185
-; script command 0x82
-
-	call $3cdf
-	ret
-; 0x97189
-
-Script_playmusic: ; 0x97189
-; script command 0x7f
-; parameters:
-;     music_pointer (MultiByteParam)
-
-	ld de, $0000
-	call StartMusic
-	xor a
-	ld [$c2a7], a
-	call MaxVolume
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	call StartMusic
-	ret
-; 0x971a2
-
-Script_musicfadeout: ; 0x971a2
-; script command 0x81
-; parameters:
-;     music (MultiByteParam)
-;     fadetime (SingleByteParam)
-
-	call GetScriptByte
-	ld [$c2a9], a
-	call GetScriptByte
-	ld [$c2aa], a
-	call GetScriptByte
-	and $7f
-	ld [$c2a7], a
-	ret
-; 0x971b7
-
-Script_playsound: ; 0x971b7
-; script command 0x85
-; parameters:
-;     sound_pointer (MultiByteParam)
-
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	call StartSFX
-	ret
-; 0x971c3
-
-Script_waitbutton: ; 0x971c3
-; script command 0x86
-
-	call WaitSFX
-	ret
-; 0x971c7
-
-Script_warpsound: ; 0x971c7
-; script command 0x87
-
-	ld a, $5
-	ld hl, $4a07
-	rst $8
-	call StartSFX
-	ret
-; 0x971d1
-
-Script_cry: ; 0x971d1
-; script command 0x84
-; parameters:
-;     cry_id (MultiByteParam)
-
-	call GetScriptByte
-	push af
-	call GetScriptByte
-	pop af
-	and a
-	jr nz, .asm_971df ; 0x971da $3
-	ld a, [$c2dd]
-.asm_971df
-	call $37ce
-	ret
-; 0x971e3
-
-Unknown_0x971e3: ; 0x971e3
-    and a
-    ret z
-    cp $fe
-    ret z
-    dec a
-    ret
-; 0x971ea
-
-Script_setlasttalked: ; 0x971ea
-; script command 0x68
-; parameters:
-;     person (SingleByteParam)
-
-	call GetScriptByte
-	call Unknown_0x971e3
-	ld [$ffe0], a
-	ret
-; 0x971f3
-
-Script_applymovement: ; 0x971f3
-; script command 0x69
-; parameters:
-;     person (SingleByteParam)
-;     data (MovementPointerLabelParam)
-
-	call GetScriptByte
-	call Unknown_0x971e3
-	ld c, a
-	push bc
-	ld a, c
-	ld a, $1
-	ld hl, $585c
-	rst $8
-	pop bc
-	push bc
-	call $7221
-	pop bc
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	ld a, [ScriptBank]
-	ld b, a
-	call $26c7
-	ret c
-	ld a, $2
-	ld [$d437], a
-	call Unknown_0x96e11
-	ret
-; 0x97221
-
-Unknown_0x97221: ; 0x97221
-    ld a, $1
-    ld hl, $5897
-    rst $8
-    ret
-; 0x97228
-
-Script_applymovement2: ; 0x97228
-; script command 0x6a
-; parameters:
-;     data (MovementPointerLabelParam)
-
-	ld a, [$ffe0]
-	ld c, a
-	jp $71fa
-; 0x9722e
-
-Script_faceplayer: ; 0x9722e
-; script command 0x6b
-
-	ld a, [$ffe0]
-	and a
-	ret z
-	ld d, $0
-	ld a, [$ffe0]
-	ld e, a
-	ld a, $2
-	ld hl, $4417
-	rst $8
-	ld a, d
-	add a
-	add a
-	ld e, a
-	ld a, [$ffe0]
-	ld d, a
-	call $728b
-	ret
-; 0x97248
-
-Script_faceperson: ; 0x97248
-; script command 0x6c
-; parameters:
-;     person1 (SingleByteParam)
-;     person2 (SingleByteParam)
-
-	call GetScriptByte
-	call Unknown_0x971e3
-	cp $fe
-	jr c, .asm_97254 ; 0x97250 $2
-	ld a, [$ffe0]
-.asm_97254
-	ld e, a
-	call GetScriptByte
-	call Unknown_0x971e3
-	cp $fe
-	jr nz, .asm_97261 ; 0x9725d $2
-	ld a, [$ffe0]
-.asm_97261
-	ld d, a
-	push de
-	ld a, $2
-	ld hl, $4417
-	rst $8
-	pop bc
-	ret c
-	ld a, d
-	add a
-	add a
-	ld e, a
-	ld d, c
-	call $728b
-	ret
-; 0x97274
-
-Script_spriteface: ; 0x97274
-; script command 0x76
-; parameters:
-;     person (SingleByteParam)
-;     facing (SingleByteParam)
-
-	call GetScriptByte
-	call Unknown_0x971e3
-	cp $fe
-	jr nz, .asm_97280 ; 0x9727c $2
-	ld a, [$ffe0]
-.asm_97280
-	ld d, a
-	call GetScriptByte
-	add a
-	add a
-	ld e, a
-	call $728b
-	ret
-; 0x9728b
-
-Unknown_0x9728b: ; 0x9728b
-    ld a, d
-    push de
-    call $18de
-    jr c, .asm_972b9 ; 0x97290 $27
-    ld hl, $0000
-    add hl, bc
-    ld a, [hl]
-    push bc
-    call $1836
-    pop bc
-    jr c, .asm_972b9 ; 0x9729c $1b
-    ld hl, $0004
-    add hl, bc
-    bit 2, [hl]
-    jr nz, .asm_972b9 ; 0x972a4 $13
-    pop de
-    ld a, e
-    call $1af8
-    ld hl, $d0ed
-    bit 6, [hl]
-    jr nz, .asm_972b5 ; 0x972b0 $3
-    call $72bc
-.asm_972b5
-    call $1ad2
-    ret
-.asm_972b9
-    pop de
-    scf
-    ret
-; 0x972bc
-
-Unknown_0x972bc: ; 0x972bc
-    call $217a
-    ld hl, $c4a0
-    ld bc, $0168
-.asm_972c5
-    res 7, [hl]
-    inc hl
-    dec bc
-    ld a, b
-    or c
-    jr nz, .asm_972c5 ; 0x972cb $f8
-    ret
-; 0x972ce
-
-Script_variablesprite: ; 0x972ce
-; script command 0x6d
-; parameters:
-;     byte (SingleByteParam)
-;     sprite (SingleByteParam)
-
-	call GetScriptByte
-	ld e, a
-	ld d, $0
-	ld hl, $d82e
-	add hl, de
-	call GetScriptByte
-	ld [hl], a
-	ret
-; 0x972dd
-
-Script_appear: ; 0x972dd
-; script command 0x6f
-; parameters:
-;     person (SingleByteParam)
-
-	call GetScriptByte
-	call Unknown_0x971e3
-	call $1956
-	ld a, [$ffaf]
-	ld b, $0
-	call $730b
-	ret
-; 0x972ee
-
-Script_disappear: ; 0x972ee
-; script command 0x6e
-; parameters:
-;     person (SingleByteParam)
-
-	call GetScriptByte
-	call Unknown_0x971e3
-	cp $fe
-	jr nz, .asm_972fa ; 0x972f6 $2
-	ld a, [$ffe0]
-.asm_972fa
-	call $199f
-	ld a, [$ffaf]
-	ld b, $1
-	call $730b
-	ld a, $1
-	ld hl, $5920
-	rst $8
-	ret
-; 0x9730b
-
-Unknown_0x9730b: ; 0x9730b
-    push bc
-    call $18d2
-    ld hl, $000c
-    add hl, bc
-    pop bc
-    ld e, [hl]
-    inc hl
-    ld d, [hl]
-    ld a, $ff
-    cp e
-    jr nz, .asm_97321 ; 0x9731a $5
-    cp d
-    jr nz, .asm_97321 ; 0x9731d $2
-    xor a
-    ret
-.asm_97321
-    call BitTable1Func
-    ret
-; 0x97325
-
-Script_follow: ; 0x97325
-; script command 0x70
-; parameters:
-;     person2 (SingleByteParam)
-;     person1 (SingleByteParam)
-
-	call GetScriptByte
-	call Unknown_0x971e3
-	ld b, a
-	call GetScriptByte
-	call Unknown_0x971e3
-	ld c, a
-	ld a, $1
-	ld hl, $5803
-	rst $8
-	ret
-; 0x9733a
-
-Script_stopfollow: ; 0x9733a
-; script command 0x71
-
-	ld a, $1
-	ld hl, $581f
-	rst $8
-	ret
-; 0x97341
-
-Script_moveperson: ; 0x97341
-; script command 0x72
-; parameters:
-;     person (SingleByteParam)
-;     x (SingleByteParam)
-;     y (SingleByteParam)
-
-	call GetScriptByte
-	call Unknown_0x971e3
-	ld b, a
-	call GetScriptByte
-	add $4
-	ld d, a
-	call GetScriptByte
-	add $4
-	ld e, a
-	ld a, $2
-	ld hl, $407e
-	rst $8
-	ret
-; 0x9735b
-
-Script_writepersonxy: ; 0x9735b
-; script command 0x73
-; parameters:
-;     person (SingleByteParam)
-
-	call GetScriptByte
-	call Unknown_0x971e3
-	cp $fe
-	jr nz, .asm_97367 ; 0x97363 $2
-	ld a, [$ffe0]
-.asm_97367
-	ld b, a
-	ld a, $2
-	ld hl, $40a1
-	rst $8
-	ret
-; 0x9736f
-
-Script_follownotexact: ; 0x9736f
-; script command 0x77
-; parameters:
-;     person2 (SingleByteParam)
-;     person1 (SingleByteParam)
-
-	call GetScriptByte
-	call Unknown_0x971e3
-	ld b, a
-	call GetScriptByte
-	call Unknown_0x971e3
-	ld c, a
-	ld a, $2
-	ld hl, $439e
-	rst $8
-	ret
-; 0x97384
-
-Script_loademote: ; 0x97384
-; script command 0x74
-; parameters:
-;     bubble (SingleByteParam)
-
-	call GetScriptByte
-	cp $ff
-	jr nz, .asm_9738e ; 0x97389 $3
-	ld a, [$c2dd]
-.asm_9738e
-	ld c, a
-	ld a, $5
-	ld hl, $442f
-	rst $8
-	ret
-; 0x97396
-
-Script_showemote: ; 0x97396
-; script command 0x75
-; parameters:
-;     bubble (SingleByteParam)
-;     person (SingleByteParam)
-;     time (DecimalParam)
-
-	call GetScriptByte
-	ld [$c2dd], a
-	call GetScriptByte
-	call Unknown_0x971e3
-	cp $fe
-	jr z, .asm_973a8 ; 0x973a4 $2
-	ld [$ffe0], a
-.asm_973a8
-	call GetScriptByte
-	ld [$d44d], a
-	ld b, $25
-	ld de, $73b6
-	jp $74cb
-; 0x973b6
-
-INCBIN "baserom.gbc",$973b6,$973c7 - $973b6
-
-Script_earthquake: ; 0x973c7
-; script command 0x78
-; parameters:
-;     param (DecimalParam)
-
-	ld hl, $73eb
-	ld de, $d002
-	ld bc, $0005
-	call CopyBytes
-	call GetScriptByte
-	ld [$d003], a
-	and $3f
-	ld [$d005], a
-	ld b, $25
-	ld de, $73e6
-	jp $74cb
-; 0x973e6
-
-INCBIN "baserom.gbc",$973e6,$973f0 - $973e6
-
-Script_loadpikachudata: ; 0x973f0
-; script command 0x5a
-
-	ld a, $19
-	ld [$d22e], a
-	ld a, $5
-	ld [$d143], a
-	ret
-; 0x973fb
-
-Script_battlecheck: ; 0x973fb
-; script command 0x5b
-
-	xor a
-	ld [$d459], a
-	ret
-; 0x97400
-
-Script_loadtrainerdata: ; 0x97400
-; script command 0x5c
-
-	ld a, $81
-	ld [$d459], a
-	ld a, [$d043]
-	ld [$d22f], a
-	ld a, [$d044]
-	ld [$d231], a
-	ret
-; 0x97412
-
-Script_loadpokedata: ; 0x97412
-; script command 0x5d
-; parameters:
-;     pokemon (PokemonParam)
-;     level (DecimalParam)
-
-	ld a, $80
-	ld [$d459], a
-	call GetScriptByte
-	ld [$d22e], a
-	call GetScriptByte
-	ld [$d143], a
-	ret
-; 0x97424
-
-Script_loadtrainer: ; 0x97424
-; script command 0x5e
-; parameters:
-;     trainer_group (TrainerGroupParam)
-;     trainer_id (TrainerIdParam)
-
-	ld a, $81
-	ld [$d459], a
-	call GetScriptByte
-	ld [$d22f], a
-	call GetScriptByte
-	ld [$d231], a
-	ret
-; 0x97436
-
-Script_startbattle: ; 0x97436
-; script command 0x5f
-
-	call $2879
-	ld a, $16
-	call $2d83
-	ld a, [$d0ee]
-	and $3f
-	ld [$c2dd], a
-	ret
-; 0x97447
-
-Script_catchtutorial: ; 0x97447
-; script command 0x61
-; parameters:
-;     byte (SingleByteParam)
-
-	call GetScriptByte
-	ld [$d230], a
-	call $2879
-	ld a, $13
-	ld hl, $6554
-	rst $8
-	jp $7491
-; 0x97459
-
-Script_returnafterbattle: ; 0x97459
-; script command 0x60
-
-	ld hl, $d459
-	ld d, [hl]
-	ld [hl], $0
-	ld a, [$d0ee]
-	and $3f
-	cp $1
-	jr nz, .asm_97470 ; 0x97466 $8
-	ld b, $4
-	ld hl, $64c1
-	jp ScriptJump
-.asm_97470
-	bit 0, d
-	jr z, .asm_9747c ; 0x97472 $8
-	ld a, $3f
-	ld hl, $4fec
-	rst $8
-	jr .asm_9748e ; 0x9747a $12
-.asm_9747c
-	ld a, [$d0ee]
-	bit 7, a
-	jr z, .asm_9748e ; 0x97481 $b
-	ld b, $24
-	ld de, $4255
-	ld a, $25
-	ld hl, $7c4f
-	rst $8
-.asm_9748e
-	jp $7491
-; 0x97491
-
-Script_reloadmap: ; 0x97491
-; script command 0x7b
-
-	xor a
-	ld [$d459], a
-	ld a, $f3
-	ld [$ff9f], a
-	ld a, $1
-	call $261b
-	call Unknown_0x96e11
-	ret
-; 0x974a2
-
-Script_2call: ; 0x974a2
-; script command 0x0
-; parameters:
-;     pointer (ScriptPointerLabelParam)
-
-	ld a, [ScriptBank]
-	ld b, a
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	jr ScriptCall
-; 0x974b0
-
-Script_3call: ; 0x974b0
-; script command 0x1
-; parameters:
-;     pointer (ScriptPointerLabelBeforeBank)
-
-	call GetScriptByte
-	ld b, a
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	jr ScriptCall
-; 0x974be
-
-Script_2ptcall: ; 0x974be
-; script command 0x2
-; parameters:
-;     pointer (PointerLabelToScriptPointer)
-
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	ld b, [hl]
-	inc hl
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	; fallthrough
-
-ScriptCall: ; 0x974cb
-	push de
-	ld hl, $d43c
-	ld e, [hl]
-	inc [hl]
-	ld d, $0
-	ld hl, $d43d
-	add hl, de
-	add hl, de
-	add hl, de
-	pop de
-	ld a, [ScriptBank]
-	ld [hli], a
-	ld a, [ScriptPos]
-	ld [hli], a
-	ld a, [ScriptPos + 1]
-	ld [hl], a
-	ld a, b
-	ld [ScriptBank], a
-	ld a, e
-	ld [ScriptPos], a
-	ld a, d
-	ld [ScriptPos + 1], a
-	ret
-; 0x974f3
-
-Unknown_0x974f3: ; 0x974f3
-    ld a, [ScriptBank]
-    or $80
-    ld [ScriptBank], a
-    jp $74cb
-; 0x974fe
-
-Script_2jump: ; 0x974fe
-; script command 0x3
-; parameters:
-;     pointer (ScriptPointerLabelParam)
-
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	ld a, [ScriptBank]
-	ld b, a
-	jp ScriptJump
-; 0x9750d
-
-Script_3jump: ; 0x9750d
-; script command 0x4
-; parameters:
-;     pointer (ScriptPointerLabelBeforeBank)
-
-	call GetScriptByte
-	ld b, a
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	jp ScriptJump
-; 0x9751c
-
-Script_2ptjump: ; 0x9751c
-; script command 0x5
-; parameters:
-;     pointer (PointerLabelToScriptPointer)
-
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	ld b, [hl]
-	inc hl
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp ScriptJump
-; 0x9752c
-
-Script_iffalse: ; 0x9752c
-; script command 0x8
-; parameters:
-;     pointer (ScriptPointerLabelParam)
-
-	ld a, [$c2dd]
-	and a
-	jp nz, $7596
-	jp Script_2jump
-; 0x97536
-
-Script_iftrue: ; 0x97536
-; script command 0x9
-; parameters:
-;     pointer (ScriptPointerLabelParam)
-
-	ld a, [$c2dd]
-	and a
-	jp nz, Script_2jump
-	jp $7596
-; 0x97540
-
-Script_if_equal: ; 0x97540
-; script command 0x6
-; parameters:
-;     byte (SingleByteParam)
-;     pointer (ScriptPointerLabelParam)
-
-	call GetScriptByte
-	ld hl, $c2dd
-	cp [hl]
-	jr z, Script_2jump ; 0x97547 $b5
-	jr Unknown_97596 ; 0x97549 $4b
-; 0x9754b
-
-Script_if_not_equal: ; 0x9754b
-; script command 0x7
-; parameters:
-;     byte (SingleByteParam)
-;     pointer (ScriptPointerLabelParam)
-
-	call GetScriptByte
-	ld hl, $c2dd
-	cp [hl]
-	jr nz, Script_2jump ; 0x97552 $aa
-	jr Unknown_97596 ; 0x97554 $40
-; 0x97556
-
-Script_if_less_than: ; 0x97556
-; script command 0xa
-; parameters:
-;     byte (SingleByteParam)
-;     pointer (ScriptPointerLabelParam)
-
-	ld a, [$c2dd]
-	ld b, a
-	call GetScriptByte
-	cp b
-	jr c, Script_2jump ; 0x9755e $9e
-	jr Unknown_97596 ; 0x97560 $34
-; 0x97562
-
-Script_if_greater_than: ; 0x97562
-; script command 0xb
-; parameters:
-;     byte (SingleByteParam)
-;     pointer (ScriptPointerLabelParam)
-
-	call GetScriptByte
-	ld b, a
-	ld a, [$c2dd]
-	cp b
-	jr c, Script_2jump ; 0x9756a $92
-	jr Unknown_97596 ; 0x9756c $28
-; 0x9756e
-
-Script_jumpstd: ; 0x9756e
-; script command 0xc
-; parameters:
-;     predefined_script (MultiByteParam)
-
-	call $757b
-	jr ScriptJump ; 0x97571 $2a
-; 0x97573
-
-Script_callstd: ; 0x97573
-; script command 0xd
-; parameters:
-;     predefined_script (MultiByteParam)
-
-	call $757b
-	ld d, h
-	ld e, l
-	jp $74cb
-; 0x9757b
-
-Unknown_0x9757b: ; 0x9757b
-    call GetScriptByte
-    ld e, a
-    call GetScriptByte
-    ld d, a
-    ld hl, $4000
-    add hl, de
-    add hl, de
-    add hl, de
-    ld a, $2f
-    call GetFarByte
-    ld b, a
-    inc hl
-    ld a, $2f
-    call GetFarHalfword
-    ret
-; 0x97596
-
-Unknown_97596: ; 0x97596
-	call GetScriptByte
-	call GetScriptByte
-	ret
-; 0x9759d
-
-ScriptJump: ; 0x9759d
-	ld a, b
-	ld [ScriptBank], a
-	ld a, l
-	ld [ScriptPos], a
-	ld a, h
-	ld [ScriptPos + 1], a
-	ret
-; 0x975aa
-
-Script_priorityjump: ; 0x975aa
-; script command 0x8d
-; parameters:
-;     pointer (ScriptPointerLabelParam)
-
-	ld a, [ScriptBank]
-	ld [$d44e], a
-	call GetScriptByte
-	ld [$d44f], a
-	call GetScriptByte
-	ld [$d450], a
-	ld hl, $d434
-	set 3, [hl]
-	ret
-; 0x975c2
-
-Script_checktriggers: ; 0x975c2
-; script command 0x13
-
-	call $211b
-	jr z, .asm_975cb ; 0x975c5 $4
-	ld [$c2dd], a
-	ret
-.asm_975cb
-	ld a, $ff
-	ld [$c2dd], a
-	ret
-; 0x975d1
-
-Script_checkmaptriggers: ; 0x975d1
-; script command 0x11
-; parameters:
-;     map_group (SingleByteParam)
-;     map_id (SingleByteParam)
-
-	call GetScriptByte
-	ld b, a
-	call GetScriptByte
-	ld c, a
-	call $2147
-	ld a, d
-	or e
-	jr z, .asm_975e5 ; 0x975de $5
-	ld a, [de]
-	ld [$c2dd], a
-	ret
-.asm_975e5
-	ld a, $ff
-	ld [$c2dd], a
-	ret
-; 0x975eb
-
-Script_dotrigger: ; 0x975eb
-; script command 0x14
-; parameters:
-;     trigger_id (SingleByteParam)
-
-	ld a, [$dcb5]
-	ld b, a
-	ld a, [$dcb6]
-	ld c, a
-	jr Unknown_975fd ; 0x975f3 $8
-; 0x975f5
-
-Script_domaptrigger: ; 0x975f5
-; script command 0x12
-; parameters:
-;     map_group (MapGroupParam)
-;     map_id (MapIdParam)
-;     trigger_id (SingleByteParam)
-
-	call GetScriptByte
-	ld b, a
-	call GetScriptByte
-	ld c, a
-	; fallthrough
-
-Unknown_975fd: ; 0x975fd
-	call $2147
-	ld a, d
-	or e
-	jr z, .asm_97608 ; 0x97602 $4
-	call GetScriptByte
-	ld [de], a
-.asm_97608
-	ret
-; 0x97609
-
-Script_copybytetovar: ; 0x97609
-; script command 0x19
-; parameters:
-;     address (RAMAddressParam)
-
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	ld a, [hl]
-	ld [$c2dd], a
-	ret
-; 0x97616
-
-Script_copyvartobyte: ; 0x97616
-; script command 0x1a
-; parameters:
-;     address (RAMAddressParam)
-
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	ld a, [$c2dd]
-	ld [hl], a
-	ret
-; 0x97623
-
-Script_loadvar: ; 0x97623
-; script command 0x1b
-; parameters:
-;     address (RAMAddressParam)
-;     value (SingleByteParam)
-
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	call GetScriptByte
-	ld [hl], a
-	ret
-; 0x97630
-
-Script_writebyte: ; 0x97630
-; script command 0x15
-; parameters:
-;     value (SingleByteParam)
-
-	call GetScriptByte
-	ld [$c2dd], a
-	ret
-; 0x97637
-
-Script_addvar: ; 0x97637
-; script command 0x16
-; parameters:
-;     value (SingleByteParam)
-
-	call GetScriptByte
-	ld hl, $c2dd
-	add [hl]
-	ld [hl], a
-	ret
-; 0x97640
-
-Script_random: ; 0x97640
-; script command 0x17
-; parameters:
-;     input (SingleByteParam)
-
-	call GetScriptByte
-	ld [$c2dd], a
-	and a
-	ret z
-	ld c, a
-	call $7673
-	and a
-	jr z, .asm_9765f ; 0x9764d $10
-	ld b, a
-	xor a
-	sub b
-	ld b, a
-.asm_97653
-	push bc
-	call $2f8c
-	pop bc
-	ld a, [$ffe1]
-	cp b
-	jr nc, .asm_97653 ; 0x9765b $f6
-	jr .asm_97666 ; 0x9765d $7
-.asm_9765f
-	push bc
-	call $2f8c
-	pop bc
-	ld a, [$ffe1]
-.asm_97666
-	push af
-	ld a, [$c2dd]
-	ld c, a
-	pop af
-	call $3110
-	ld [$c2dd], a
-	ret
-; 0x97673
-
-Unknown_0x97673: ; 0x97673
-    xor a
-    ld b, a
-    sub c
-.asm_97676
-    inc b
-    sub c
-    jr nc, .asm_97676 ; 0x97678 $fc
-    dec b
-    add c
-    ret
-; 0x9767d
-
-Script_checkcode: ; 0x9767d
-; script command 0x1c
-; parameters:
-;     variable_id (SingleByteParam)
-
-	call GetScriptByte
-	call $769e
-	ld a, [de]
-	ld [$c2dd], a
-	ret
-; 0x97688
-
-Script_writevarcode: ; 0x97688
-; script command 0x1d
-; parameters:
-;     variable_id (SingleByteParam)
-
-	call GetScriptByte
-	call $769e
-	ld a, [$c2dd]
-	ld [de], a
-	ret
-; 0x97693
-
-Script_writecode: ; 0x97693
-; script command 0x1e
-; parameters:
-;     variable_id (SingleByteParam)
-;     value (SingleByteParam)
-
-	call GetScriptByte
-	call $769e
-	call GetScriptByte
-	ld [de], a
-	ret
-; 0x9769e
-
-Unknown_0x9769e: ; 0x9769e
-    ld c, a
-    ld a, $20
-    ld hl, $4648
-    rst $8
-    ret
-; 0x976a6
-
-Script_checkver: ; 0x976a6
-; script command 0x18
-
-	ld a, [$76ad]
-	ld [$c2dd], a
-	ret
-; 0x976ad
-
-INCBIN "baserom.gbc",$976ad,$976ae - $976ad
-
-Script_pokenamemem: ; 0x976ae
-; script command 0x40
-; parameters:
-;     pokemon (PokemonParam)
-;     memory (SingleByteParam)
-
-	call GetScriptByte
-	and a
-	jr nz, .asm_976b7 ; 0x976b2 $3
-	ld a, [$c2dd]
-.asm_976b7
-	ld [$d265], a
-	call $343b
-	ld de, $d073
-
-Unknown_976c0: ; 0x976c0
-	call GetScriptByte
-	cp $3
-	jr c, .asm_976c8 ; 0x976c5 $1
-	xor a
-.asm_976c8
-	ld hl, $d099
-	ld bc, $0013
-	call AddNTimes
-	call CopyName2
-	ret
-; 0x976d5
-
-Script_itemtotext: ; 0x976d5
-; script command 0x41
-; parameters:
-;     item (ItemLabelByte)
-;     memory (SingleByteParam)
-
-	call GetScriptByte
-	and a
-	jr nz, .asm_976de ; 0x976d9 $3
-	ld a, [$c2dd]
-.asm_976de
-	ld [$d265], a
-	call GetItemName
-	ld de, $d073
-	jr Unknown_976c0 ; 0x976e7 $d7
-; 0x976e9
-
-Script_mapnametotext: ; 0x976e9
-; script command 0x42
-; parameters:
-;     memory (SingleByteParam)
-
-	ld a, [$dcb5]
-	ld b, a
-	ld a, [$dcb6]
-	ld c, a
-	call GetWorldMapLocation
-
-Unknown_976f4: ; 0x976f4
-	ld e, a
-	ld a, $72
-	ld hl, $68a5
-	rst $8
-	ld de, $d073
-	jp $76c0
-; 0x97701
-
-Script_displaylocation: ; 0x97701
-; script command 0xa5
-; parameters:
-;     id (SingleByteParam)
-
-	call GetScriptByte
-	jr Unknown_976f4 ; 0x97704 $ee
-; 0x97706
-
-Script_trainertotext: ; 0x97706
-; script command 0x43
-; parameters:
-;     trainer_id (TrainerGroupParam)
-;     trainer_group (TrainerIdParam)
-;     memory (SingleByteParam)
-
-	call GetScriptByte
-	ld c, a
-	call GetScriptByte
-	ld b, a
-	ld a, $e
-	ld hl, $594c
-	rst $8
-	jr Unknown_976c0 ; 0x97714 $aa
-; 0x97716
-
-Script_unknown0xa7: ; 0x97716
-; script command 0xa7
-
-	call GetScriptByte
-	ld [$cf61], a
-
-Unknown_9771c: ; 0x9771c
-	call GetScriptByte
-	ld [$cf60], a
-	call GetName
-	ld de, $d073
-	jp $76c0
-; 0x9772b
-
-Script_unknown0xa6: ; 0x9772b
-; script command 0xa6
-
-	ld a, $7
-	ld [$cf61], a
-	jr Unknown_9771c ; 0x97730 $ea
-; 0x97732
-
-Script_readmoney: ; 0x97732
-; script command 0x3d
-; parameters:
-;     account (SingleByteParam)
-;     memory (SingleByteParam)
-
-	call $7771
-	call $7861
-	ld hl, $d073
-	ld bc, $4306
-	call $3198
-	ld de, $d073
-	jp $76c0
-; 0x97747
-
-Script_readcoins: ; 0x97747
-; script command 0x3e
-; parameters:
-;     memory (SingleByteParam)
-
-	call $7771
-	ld hl, $d073
-	ld de, $d855
-	ld bc, $4206
-	call $3198
-	ld de, $d073
-	jp $76c0
-; 0x9775c
-
-Script_RAM2MEM: ; 0x9775c
-; script command 0x3f
-; parameters:
-;     memory (SingleByteParam)
-
-	call $7771
-	ld de, $c2dd
-	ld hl, $d073
-	ld bc, $4103
-	call $3198
-	ld de, $d073
-	jp $76c0
-; 0x97771
-
-Unknown_0x97771: ; 0x97771
-    ld hl, $d073
-    ld bc, $000b
-    ld a, $50
-    call ByteFill
-    ret
-; 0x9777d
-
-Script_stringtotext: ; 0x9777d
-; script command 0x44
-; parameters:
-;     text_pointer (EncodedTextLabelParam)
-;     memory (SingleByteParam)
-
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	ld a, [ScriptBank]
-	ld hl, $30d6
-	rst $8
-	ld de, $d086
-	jp $76c0
-; 0x97792
-
-Script_givepokeitem: ; 0x97792
-; script command 0x2f
-; parameters:
-;     pointer (PointerParamToItemAndLetter)
-
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	ld a, [ScriptBank]
-	call GetFarByte
-	ld b, a
-	push bc
-	inc hl
-	ld bc, $0020
-	ld de, $d002
-	ld a, [ScriptBank]
-	call FarCopyBytes
-	pop bc
-	ld a, $11
-	ld hl, $46cc
-	rst $8
-	ret
-; 0x977b7
-
-Script_checkpokeitem: ; 0x977b7
-; script command 0x30
-; parameters:
-;     pointer (PointerParamToItemAndLetter)
-
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	ld a, [ScriptBank]
-	ld b, a
-	ld a, $11
-	ld hl, $4654
-	rst $8
-	ret
-; 0x977ca
-
-Script_giveitem: ; 0x977ca
-; script command 0x1f
-; parameters:
-;     item (ItemLabelByte)
-;     quantity (SingleByteParam)
-
-	call GetScriptByte
-	cp $ff
-	jr nz, .asm_977d4 ; 0x977cf $3
-	ld a, [$c2dd]
-.asm_977d4
-	ld [$d106], a
-	call GetScriptByte
-	ld [$d10c], a
-	ld hl, $d892
-	call $2f66
-	jr nc, .asm_977eb ; 0x977e3 $6
-	ld a, $1
-	ld [$c2dd], a
-	ret
-.asm_977eb
-	xor a
-	ld [$c2dd], a
-	ret
-; 0x977f0
-
-Script_takeitem: ; 0x977f0
-; script command 0x20
-; parameters:
-;     item (ItemLabelByte)
-;     quantity (DecimalParam)
-
-	xor a
-	ld [$c2dd], a
-	call GetScriptByte
-	ld [$d106], a
-	call GetScriptByte
-	ld [$d10c], a
-	ld a, $ff
-	ld [$d107], a
-	ld hl, $d892
-	call $2f53
-	ret nc
-	ld a, $1
-	ld [$c2dd], a
-	ret
-; 0x97812
-
-Script_checkitem: ; 0x97812
-; script command 0x21
-; parameters:
-;     item (ItemLabelByte)
-
-	xor a
-	ld [$c2dd], a
-	call GetScriptByte
-	ld [$d106], a
-	ld hl, $d892
-	call $2f79
-	ret nc
-	ld a, $1
-	ld [$c2dd], a
-	ret
-; 0x97829
-
-Script_givemoney: ; 0x97829
-; script command 0x22
-; parameters:
-;     account (SingleByteParam)
-;     money (MoneyByteParam)
-
-	call $7861
-	call $786d
-	ld a, $5
-	ld hl, $5fd7
-	rst $8
-	ret
-; 0x97836
-
-Script_takemoney: ; 0x97836
-; script command 0x23
-; parameters:
-;     account (SingleByteParam)
-;     money (MoneyByteParam)
-
-	call $7861
-	call $786d
-	ld a, $5
-	ld hl, $5ffa
-	rst $8
-	ret
-; 0x97843
-
-Script_checkmoney: ; 0x97843
-; script command 0x24
-; parameters:
-;     account (SingleByteParam)
-;     money (MoneyByteParam)
-
-	call $7861
-	call $786d
-	ld a, $5
-	ld hl, $600b
-	rst $8
-; 0x9784f
-
-Unknown_9784f: ; 0x9784f
-	jr c, .asm_9785b ; 0x9784f $a
-	jr z, .asm_97857 ; 0x97851 $4
-	ld a, $0
-	jr .asm_9785d ; 0x97855 $6
-.asm_97857
-	ld a, $1
-	jr .asm_9785d ; 0x97859 $2
-.asm_9785b
-	ld a, $2
-.asm_9785d
-	ld [$c2dd], a
-	ret
-; 0x97861
-
-Unknown_0x97861: ; 0x97861
-    call GetScriptByte
-    and a
-    ld de, $d84e
-    ret z
-    ld de, $d851
-    ret
-; 0x9786d
-
-Unknown_0x9786d: ; 0x9786d
-    ld bc, $ffc3
-    push bc
-    call GetScriptByte
-    ld [bc], a
-    inc bc
-    call GetScriptByte
-    ld [bc], a
-    inc bc
-    call GetScriptByte
-    ld [bc], a
-    pop bc
-    ret
-; 0x97881
-
-Script_givecoins: ; 0x97881
-; script command 0x25
-; parameters:
-;     coins (CoinByteParam)
-
-	call $78a0
-	ld a, $5
-	ld hl, $606f
-	rst $8
-	ret
-; 0x9788b
-
-Script_takecoins: ; 0x9788b
-; script command 0x26
-; parameters:
-;     coins (CoinByteParam)
-
-	call $78a0
-	ld a, $5
-	ld hl, $608f
-	rst $8
-	ret
-; 0x97895
-
-Script_checkcoins: ; 0x97895
-; script command 0x27
-; parameters:
-;     coins (CoinByteParam)
-
-	call $78a0
-	ld a, $5
-	ld hl, $60a1
-	rst $8
-	jr Unknown_9784f ; 0x9789e $af
-	call GetScriptByte
-	ld [$ffc4], a
-	call GetScriptByte
-	ld [$ffc3], a
-	ld bc, $ffc3
-	ret
-; 0x978ae
-
-Script_checktime: ; 0x978ae
-; script command 0x2b
-; parameters:
-;     time (SingleByteParam)
-
-	xor a
-	ld [$c2dd], a
-	ld a, $3
-	ld hl, $4000
-	rst $8
-	call GetScriptByte
-	and c
-	ret z
-	ld a, $1
-	ld [$c2dd], a
-	ret
-; 0x978c3
-
-Script_checkpoke: ; 0x978c3
-; script command 0x2c
-; parameters:
-;     pkmn (PokemonParam)
-
-	xor a
-	ld [$c2dd], a
-	call GetScriptByte
-	ld hl, $dcd8
-	ld de, $0001
-	call IsInArray
-	ret nc
-	ld a, $1
-	ld [$c2dd], a
-	ret
-; 0x978da
-
-Script_addcellnum: ; 0x978da
-; script command 0x28
-; parameters:
-;     person (SingleByteParam)
-
-	xor a
-	ld [$c2dd], a
-	call GetScriptByte
-	ld c, a
-	ld a, $24
-	ld hl, $4000
-	rst $8
-	ret nc
-	ld a, $1
-	ld [$c2dd], a
-	ret
-; 0x978ef
-
-Script_delcellnum: ; 0x978ef
-; script command 0x29
-; parameters:
-;     person (SingleByteParam)
-
-	xor a
-	ld [$c2dd], a
-	call GetScriptByte
-	ld c, a
-	ld a, $24
-	ld hl, $400f
-	rst $8
-	ret nc
-	ld a, $1
-	ld [$c2dd], a
-	ret
-; 0x97904
-
-Script_checkcellnum: ; 0x97904
-; script command 0x2a
-; parameters:
-;     person (SingleByteParam)
-
-	xor a
-	ld [$c2dd], a
-	call GetScriptByte
-	ld c, a
-	ld a, $24
-	ld hl, $4019
-	rst $8
-	ret nc
-	ld a, $1
-	ld [$c2dd], a
-	ret
-; 0x97919
-
-Script_specialphonecall: ; 0x97919
-; script command 0x9c
-; parameters:
-;     call_id (MultiByteParam)
-
-	call GetScriptByte
-	ld [$dc31], a
-	call GetScriptByte
-	ld [$dc32], a
-	ret
-; 0x97926
-
-Script_checkphonecall: ; 0x97926
-; script command 0x9d
-
-	ld a, [$dc31]
-	and a
-	jr z, .asm_9792e ; 0x9792a $2
-	ld a, $1
-.asm_9792e
-	ld [$c2dd], a
-	ret
-; 0x97932
-
-Script_givepoke: ; 0x97932
-; script command 0x2d
-; parameters:
-;     pokemon (PokemonParam)
-;     level (DecimalParam)
-;     item (ItemLabelByte)
-;     trainer (DecimalParam)
-;     trainer_name_pointer (MultiByteParam)
-;     pkmn_nickname (MultiByteParam)
-
-	call GetScriptByte
-	ld [$d108], a
-	call GetScriptByte
-	ld [$d143], a
-	call GetScriptByte
-	ld [$d106], a
-	call GetScriptByte
-	and a
-	ld b, a
-	jr z, .asm_9795d ; 0x97949 $12
-	ld hl, ScriptPos
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	call GetScriptByte
-	call GetScriptByte
-	call GetScriptByte
-	call GetScriptByte
-.asm_9795d
-	ld a, $3
-	ld hl, $6277
-	rst $8
-	ld a, b
-	ld [$c2dd], a
-	ret
-; 0x97968
-
-Script_giveegg: ; 0x97968
-; script command 0x2e
-; parameters:
-;     pkmn (PokemonParam)
-;     level (DecimalParam)
-
-	xor a
-	ld [$c2dd], a
-	ld [$cf5f], a
-	call GetScriptByte
-	ld [$d108], a
-	call GetScriptByte
-	ld [$d143], a
-	ld a, $3
-	ld hl, $5f8c
-	rst $8
-	ret nc
-	ld a, $2
-	ld [$c2dd], a
-	ret
-; 0x97988
-
-Script_setbit1: ; 0x97988
-; script command 0x33
-; parameters:
-;     bit_number (MultiByteParam)
-
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	ld b, $1
-	call BitTable1Func
-	ret
-; 0x97996
-
-Script_clearbit1: ; 0x97996
-; script command 0x32
-; parameters:
-;     bit_number (MultiByteParam)
-
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	ld b, $0
-	call BitTable1Func
-	ret
-; 0x979a4
-
-Script_checkbit1: ; 0x979a4
-; script command 0x31
-; parameters:
-;     bit_number (MultiByteParam)
-
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	ld b, $2
-	call BitTable1Func
-	ld a, c
-	and a
-	jr z, .asm_979b7 ; 0x979b3 $2
-	ld a, $1
-.asm_979b7
-	ld [$c2dd], a
-	ret
-; 0x979bb
-
-Script_setbit2: ; 0x979bb
-; script command 0x36
-; parameters:
-;     bit_number (MultiByteParam)
-
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	ld b, $1
-	call $79ee
-	ret
-; 0x979c9
-
-Script_clearbit2: ; 0x979c9
-; script command 0x35
-; parameters:
-;     bit_number (MultiByteParam)
-
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	ld b, $0
-	call $79ee
-	ret
-; 0x979d7
-
-Script_checkbit2: ; 0x979d7
-; script command 0x34
-; parameters:
-;     bit_number (MultiByteParam)
-
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	ld b, $2
-	call $79ee
-	ld a, c
-	and a
-	jr z, .asm_979ea ; 0x979e6 $2
-	ld a, $1
-.asm_979ea
-	ld [$c2dd], a
-	ret
-; 0x979ee
-
-Unknown_0x979ee: ; 0x979ee
-    ld a, $20
-    ld hl, $4430
-    rst $8
-    ret
-; 0x979f5
-
-Script_wildon: ; 0x979f5
-; script command 0x38
-
-	ld hl, $d84c
-	set 5, [hl]
-	ret
-; 0x979fb
-
-Script_wildoff: ; 0x979fb
-; script command 0x37
-
-	ld hl, $d84c
-	res 5, [hl]
-	ret
-; 0x97a01
-
-Script_xycompare: ; 0x97a01
-; script command 0x39
-; parameters:
-;     pointer (MultiByteParam)
-
-	call GetScriptByte
-	ld [$d453], a
-	call GetScriptByte
-	ld [$d454], a
-	ret
-; 0x97a0e
-
-Script_warpfacing: ; 0x97a0e
-; script command 0xa3
-; parameters:
-;     facing (SingleByteParam)
-;     map_group (MapGroupParam)
-;     map_id (MapIdParam)
-;     x (SingleByteParam)
-;     y (SingleByteParam)
-
-	call GetScriptByte
-	and $3
-	ld c, a
-	ld a, [$d45b]
-	set 5, a
-	or c
-	ld [$d45b], a
-; 0x97a1d
-
-Script_warp: ; 0x97a1d
-; script command 0x3c
-; parameters:
-;     map_group (MapGroupParam)
-;     map_id (MapIdParam)
-;     x (SingleByteParam)
-;     y (SingleByteParam)
-
-	call GetScriptByte
-	and a
-	jr z, .asm_97a4a ; 0x97a21 $27
-	ld [$dcb5], a
-	call GetScriptByte
-	ld [$dcb6], a
-	call GetScriptByte
-	ld [$dcb8], a
-	call GetScriptByte
-	ld [$dcb7], a
-	ld a, $ff
-	ld [$d001], a
-	ld a, $f1
-	ld [$ff9f], a
-	ld a, $1
-	call $261b
-	call Unknown_0x96e11
-	ret
-.asm_97a4a
-	call GetScriptByte
-	call GetScriptByte
-	call GetScriptByte
-	ld a, $ff
-	ld [$d001], a
-	ld a, $fb
-	ld [$ff9f], a
-	ld a, $1
-	call $261b
-	call Unknown_0x96e11
-	ret
-; 0x97a65
-
-Script_warpmod: ; 0x97a65
-; script command 0x3a
-; parameters:
-;     warp_id (SingleByteParam)
-;     map_group (MapGroupParam)
-;     map_id (MapIdParam)
-
-	call GetScriptByte
-	ld [$dcac], a
-	call GetScriptByte
-	ld [$dcad], a
-	call GetScriptByte
-	ld [$dcae], a
-	ret
-; 0x97a78
-
-Script_blackoutmod: ; 0x97a78
-; script command 0x3b
-; parameters:
-;     map_group (MapGroupParam)
-;     map_id (MapIdParam)
-
-	call GetScriptByte
-	ld [$dcb2], a
-	call GetScriptByte
-	ld [$dcb3], a
-	ret
-; 0x97a85
-
-Script_reloadmapmusic: ; 0x97a85
-; script command 0x83
-
-	ld a, $1
-	ld [$c2c1], a
-	ret
-; 0x97a8b
-
-Script_writecmdqueue: ; 0x97a8b
-; script command 0x7d
-; parameters:
-;     queue_pointer (MultiByteParam)
-
-	call GetScriptByte
-	ld e, a
-	call GetScriptByte
-	ld d, a
-	ld a, [ScriptBank]
-	ld b, a
-	ld a, $25
-	ld hl, $7e31
-	rst $8
-	ret
-; 0x97a9e
-
-Script_delcmdqueue: ; 0x97a9e
-; script command 0x7e
-; parameters:
-;     byte (SingleByteParam)
-
-	xor a
-	ld [$c2dd], a
-	call GetScriptByte
-	ld b, a
-	ld a, $25
-	ld hl, $7e5c
-	rst $8
-	ret c
-	ld a, $1
-	ld [$c2dd], a
-	ret
-; 0x97ab3
-
-Script_changemap: ; 0x97ab3
-; script command 0x79
-; parameters:
-;     map_data_pointer (MapDataPointerParam)
-
-	call GetScriptByte
-	ld [$d1a0], a
-	call GetScriptByte
-	ld [$d1a1], a
-	call GetScriptByte
-	ld [$d1a2], a
-	call $24e4
-	call $2879
-	ret
-; 0x97acc
-
-Script_changeblock: ; 0x97acc
-; script command 0x7a
-; parameters:
-;     x (SingleByteParam)
-;     y (SingleByteParam)
-;     block (SingleByteParam)
-
-	call GetScriptByte
-	add $4
-	ld d, a
-	call GetScriptByte
-	add $4
-	ld e, a
-	call $2a66
-	call GetScriptByte
-	ld [hl], a
-	call $2879
-	ret
-; 0x97ae3
-
-Script_reloadmappart: ; 0x97ae3
-; script command 0x7c
-
-	xor a
-	ld [$ffd4], a
-	call $2173
-	call $2914
-	ld a, $41
-	ld hl, $4061
-	rst $8
-	call $1ad2
-	ret
-; 0x97af6
-
-Script_warpcheck: ; 0x97af6
-; script command 0x8e
-
-	call $224a
-	ret nc
-	ld a, $25
-	ld hl, $66d0
-	rst $8
-	ret
-; 0x97b01
-
-Unknown_0x97b01: ; 0x97b01
-    ld a, $25
-    ld hl, $66d0
-    rst $8
-    ret
-; 0x97b08
-
-Script_newloadmap: ; 0x97b08
-; script command 0x8a
-; parameters:
-;     which_method (SingleByteParam)
-
-	call GetScriptByte
-	ld [$ff9f], a
-	ld a, $1
-	call $261b
-	call Unknown_0x96e11
-	ret
-; 0x97b16
-
-Script_reloadandreturn: ; 0x97b16
-; script command 0x92
-
-	call $7b08
-	jp $7b74
-; 0x97b1c
-
-Script_loadfont: ; 0x97b1c
-; script command 0x47
-
-	call $2e08
-	ret
-; 0x97b20
-
-Script_refreshscreen: ; 0x97b20
-; script command 0x48
-; parameters:
-;     dummy (SingleByteParam)
-
-	call $2dba
-	call GetScriptByte
-	ret
-; 0x97b27
-
-Script_loadbytec1ce: ; 0x97b27
-; script command 0x4a
-; parameters:
-;     byte (SingleByteParam)
-
-	call GetScriptByte
-	ld [$c2cf], a
-	ret
-; 0x97b2e
-
-INCBIN "baserom.gbc",$97b2e,$97b2f - $97b2e
-
-Script_loadmovesprites: ; 0x97b2f
-; script command 0x49
-
-	call $2e20
-	call $2dcf
-	ret
-; 0x97b36
-
-Script_passtoengine: ; 0x97b36
-; script command 0x89
-; parameters:
-;     data_pointer (PointerLabelBeforeBank)
-
-	call GetScriptByte
-	push af
-	call GetScriptByte
-	ld l, a
-	call GetScriptByte
-	ld h, a
-	pop af
-	call StartAutoInput
-	ret
-; 0x97b47
-
-Script_pause: ; 0x97b47
-; script command 0x8b
-; parameters:
-;     length (DecimalParam)
-
-	call GetScriptByte
-	and a
-	jr z, .asm_97b50 ; 0x97b4b $3
-	ld [$d44d], a
-.asm_97b50
-	ld c, $2
-	call DelayFrames
-	ld hl, $d44d
-	dec [hl]
-	jr nz, .asm_97b50 ; 0x97b59 $f5
-	ret
-; 0x97b5c
-
-Script_deactivatefacing: ; 0x97b5c
-; script command 0x8c
-; parameters:
-;     time (SingleByteParam)
-
-	call GetScriptByte
-	and a
-	jr z, .asm_97b65 ; 0x97b60 $3
-	ld [$d44d], a
-.asm_97b65
-	ld a, $3
-	ld [$d437], a
-	call Unknown_0x96e11
-	ret
-; 0x97b6e
-
-Script_ptpriorityjump: ; 0x97b6e
-; script command 0x8f
-; parameters:
-;     pointer (ScriptPointerLabelParam)
-
-	call Unknown_0x96e11
-	jp Script_2jump
-; 0x97b74
-
-Script_end: ; 0x97b74
-; script command 0x91
-
-	call $7b9a
-	jr c, .asm_97b7a ; 0x97b77 $1
-	ret
-.asm_97b7a
-	xor a
-	ld [$d438], a
-	ld a, $0
-	ld [$d437], a
-	ld hl, $d434
-	res 0, [hl]
-	call Unknown_0x96e11
-	ret
-; 0x97b8c
-
-Script_return: ; 0x97b8c
-; script command 0x90
-
-	call $7b9a
-	jr c, .asm_97b91 ; 0x97b8f $0
-.asm_97b91
-	ld hl, $d434
-	res 0, [hl]
-	call Unknown_0x96e11
-	ret
-; 0x97b9a
-
-Unknown_0x97b9a: ; 0x97b9a
-    ld hl, $d43c
-    ld a, [hl]
-    and a
-    jr z, .asm_97bbe ; 0x97b9f $1d
-    dec [hl]
-    ld e, [hl]
-    ld d, $0
-    ld hl, $d43d
-    add hl, de
-    add hl, de
-    add hl, de
-    ld a, [hli]
-    ld b, a
-    and $7f
-    ld [ScriptBank], a
-    ld a, [hli]
-    ld e, a
-    ld [ScriptPos], a
-    ld a, [hl]
-    ld d, a
-    ld [ScriptPos + 1], a
-    and a
-    ret
-.asm_97bbe
-    scf
-    ret
-; 0x97bc0
-
-Script_resetfuncs: ; 0x97bc0
-; script command 0x93
-
-	xor a
-	ld [$d43c], a
-	ld [$d438], a
-	ld a, $0
-	ld [$d437], a
-	ld hl, $d434
-	res 0, [hl]
-	call Unknown_0x96e11
-	ret
-; 0x97bd5
-
-Script_halloffame: ; 0x97bd5
-; script command 0xa1
-
-	ld hl, $cfbc
-	res 0, [hl]
-	ld a, BANK(HallOfFame1)
-	ld hl, HallOfFame1
-	rst $8
-	ld a, BANK(HallOfFame2)
-	ld hl, HallOfFame2
-	rst $8
-	ld a, BANK(HallOfFame3)
-	ld hl, HallOfFame3
-	rst $8
-	ld hl, $cfbc
-	set 0, [hl]
-	jr DisplayCredits
-; 0x97bf3
-
-Script_credits: ; 0x97bf3
-; script command 0xa2
-
-	ld a, $21
-	ld hl, $6455
-	rst $8
-	; fallthrough
-DisplayCredits:
-	call $7bc0
-	ld a, $3
-	call $261b
-	call Unknown_0x96e11
-	ret
-; 0x97c05
-
-Script_unknown0xa8: ; 0x97c05
-; script command 0xa8
-; parameters:
-;     unknown (SingleByteParam)
-
-	push bc
-	call GetScriptByte
-.asm_97c09
-	push af
-	ld c, $6
-	call DelayFrames
-	pop af
-	dec a
-	jr nz, .asm_97c09 ; 0x97c11 $f6
-	pop bc
-	ret
-; 0x97c15
-
-Script_unknown0xa9: ; 0x97c15
-; script command 0xa9
-
-	ld a, $13
-	ld hl, $4ffe
-	rst $8
-	ld a, c
-	ld [$c2dd], a
-	ret
-; 0x97c20
--- a/vblank.asm
+++ /dev/null
@@ -1,539 +1,0 @@
-; VBlank is the interrupt responsible for updating VRAM.
-
-; In Pokemon Crystal, VBlank has been hijacked to act as the
-; main loop. After time-sensitive graphics operations have been
-; performed, joypad input and sound functions are executed.
-
-; This prevents the display and audio output from lagging.
-
-	push af
-	push bc
-	push de
-	push hl
-	
-; get vblank type
-	ld a, [$ff9e]
-	and $7
-	
-; get fn pointer
-	ld e, a
-	ld d, $0
-	ld hl, .VBlanks
-	add hl, de
-	add hl, de
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	
-; down to business
-	call JpHl
-	
-; since this is called once per frame
-	call GameTimer
-	
-	pop hl
-	pop de
-	pop bc
-	pop af
-	reti
-; 2a1
-
-.VBlanks ; 2a1
-	dw VBlank0 ; 0
-	dw VBlank1 ; 1
-	dw VBlank2 ; 2
-	dw VBlank3 ; 3
-	dw VBlank4 ; 4
-	dw VBlank5 ; 5
-	dw VBlank6 ; 6
-	dw VBlank0 ; 7
-; 2b1
-
-
-VBlank0: ; 2b1
-; normal operation
-
-; rng
-; scx, scy, wy, wx
-; bg map buffer
-; palettes
-; dma transfer
-; bg map
-; tiles
-; oam
-; joypad
-; sound
-
-; inc frame counter
-	ld hl, $ff9b
-	inc [hl]
-	
-; advance rng
-	ld a, [rDIV]
-	ld b, a
-	ld a, [$ffe1]
-	adc b
-	ld [$ffe1], a
-	
-	ld a, [rDIV]
-	ld b, a
-	ld a, [$ffe2]
-	sbc b
-	ld [$ffe2], a
-	
-; save bank
-	ld a, [$ff9d] ; current bank
-	ld [$ff8a], a
-	
-; scroll x
-	ld a, [$ffcf]
-	ld [rSCX], a
-; scroll y
-	ld a, [$ffd0]
-	ld [rSCY], a
-; window y
-	ld a, [$ffd2]
-	ld [rWY], a
-; window x + 7
-	ld a, [$ffd1]
-	ld [rWX], a
-	
-; some time management is in order
-; only have time for one of these during vblank
-	
-; bg map buffer has priority
-	call UpdateBGMapBuffer
-	jr c, .doneframeaction
-	
-; then pals
-	call UpdatePalsIfCGB
-	jr c, .doneframeaction
-	
-; dma transfer
-	call DMATransfer
-	jr c, .doneframeaction
-	
-; bg map
-	call UpdateBGMap
-	
-; these have their own timing checks
-	call SafeLoadTiles
-	call SafeLoadTiles2
-	call SafeTileAnimation
-	
-.doneframeaction
-; oam update off?
-	ld a, [$ffd8]
-	and a
-	jr nz, .vblankoccurred
-	
-; update oam by dma transfer
-	call hPushOAM
-;	403f:
-;		ld a, $c4
-;		ld [rDMA], a
-;		ld a, $28
-;	.loop
-;		dec a
-;		jr nz, .loop
-;		ret
-
-
-; vblank-sensitive operations are done
-	
-.vblankoccurred
-; tell other fns vblank happened
-	xor a
-	ld [VBlankOccurred], a
-	
-; dec $cfb1 until 0
-	ld a, [$cfb1]
-	and a
-	jr z, .textdelay
-	dec a
-	ld [$cfb1], a
-	
-.textdelay
-; dec text delay counter until 0
-	ld a, [TextDelayFrames]
-	and a
-	jr z, .joypad
-	dec a
-	ld [TextDelayFrames], a
-	
-.joypad
-	call Joypad
-	
-; update sound
-	ld a, BANK(UpdateSound)
-	rst Bankswitch ; bankswitch
-	call UpdateSound
-	ld a, [$ff8a]
-	rst Bankswitch ; restore bank
-	
-; 
-	ld a, [$ff98]
-	ld [$ffe3], a
-	
-	ret
-; 325
-
-
-VBlank2: ; 325
-; sound only
-
-; save bank
-	ld a, [$ff9d]
-	ld [$ff8a], a
-	
-; update sound
-	ld a, BANK(UpdateSound)
-	rst Bankswitch ; bankswitch
-	call UpdateSound
-	
-; restore bank
-	ld a, [$ff8a]
-	rst Bankswitch
-	
-; tell other fns vblank happened
-	xor a
-	ld [VBlankOccurred], a
-	ret
-; 337
-
-
-VBlank1: ; 337
-; scx, scy
-; palettes
-; bg map
-; tiles
-; oam
-; sound / lcd stat
-
-; save bank
-	ld a, [$ff9d]
-	ld [$ff8a], a
-	
-; scroll x
-	ld a, [$ffcf]
-	ld [rSCX], a
-	
-; scroll y
-	ld a, [$ffd0]
-	ld [rSCY], a
-	
-; time-sensitive fns
-	call UpdatePals
-	jr c, .vblankoccurred
-	
-; these have their own timing checks
-	call UpdateBGMap
-	call LoadTiles
-; update oam by dma transfer
-	call hPushOAM
-;	403f:
-;		ld a, $c4
-;		ld [rDMA], a
-;		ld a, $28
-;	.loop
-;		dec a
-;		jr nz, .loop
-;		ret
-	
-.vblankoccurred
-; tell other fns vblank happened
-	xor a
-	ld [VBlankOccurred], a
-	
-; get requested ints
-	ld a, [rIF]
-	ld b, a
-; discard requested ints
-	xor a
-	ld [rIF], a
-; enable lcd stat
-	ld a, %10 ; lcd stat
-	ld [rIE], a
-; rerequest serial int if applicable (still disabled)
-; request lcd stat
-	ld a, b
-	and %1000 ; serial
-	or %10 ; lcd stat
-	ld [rIF], a
-	
-	ei
-; update sound
-	ld a, BANK(UpdateSound)
-	rst Bankswitch ; bankswitch
-	call UpdateSound
-; restore bank
-	ld a, [$ff8a]
-	rst Bankswitch
-	di
-	
-; get requested ints
-	ld a, [rIF]
-	ld b, a
-; discard requested ints
-	xor a
-	ld [rIF], a
-; enable ints besides joypad
-	ld a, %1111 ; serial timer lcdstat vblank
-	ld [rIE], a
-; rerequest ints
-	ld a, b
-	ld [rIF], a
-	ret
-; 37f
-
-
-UpdatePals: ; 37f
-; update pals for either dmg or cgb
-
-; check cgb
-	ld a, [$ffe6]
-	and a
-	jp nz, UpdateCGBPals
-	
-; update gb pals
-	ld a, [$cfc7]
-	ld [rBGP], a
-	
-	ld a, [$cfc8]
-	ld [rOBP0], a
-	
-	ld a, [$cfc9]
-	ld [rOBP1], a
-	
-	and a
-	ret
-; 396
-
-
-VBlank3: ; 396
-; scx, scy
-; palettes
-; bg map
-; tiles
-; oam
-; sound / lcd stat
-
-; save bank
-	ld a, [$ff9d]
-	ld [$ff8a], a
-	
-; scroll x
-	ld a, [$ffcf]
-	ld [rSCX], a
-; scroll y
-	ld a, [$ffd0]
-	ld [rSCY], a
-	
-; any pals to update?
-	ld a, [$ffe5]
-	and a
-	call nz, ForceUpdateCGBPals
-	jr c, .vblankoccurred
-; else
-	call UpdateBGMap
-	call LoadTiles
-	
-; update oam by dma transfer
-	call hPushOAM
-;	403f:
-;		ld a, $c4 ; Sprites / $100
-;		ld [rDMA], a
-;		ld a, $28
-;	.loop
-;		dec a
-;		jr nz, .loop
-;		ret
-	
-.vblankoccurred
-; tell other fns vblank happened
-	xor a
-	ld [VBlankOccurred], a
-	
-; save int flag
-	ld a, [rIF]
-	push af
-; reset ints
-	xor a
-	ld [rIF], a
-; force lcdstat int during sound update
-	ld a, %10 ; lcd stat
-	ld [rIE], a
-	ld [rIF], a
-	
-	ei
-; update sound
-	ld a, BANK(UpdateSound)
-	rst Bankswitch ; bankswitch
-	call UpdateSound
-; restore bank
-	ld a, [$ff8a]
-	rst Bankswitch
-	di
-	
-; request lcdstat
-	ld a, [rIF]
-	ld b, a
-; and any other ints
-	pop af
-	or b
-	ld b, a
-; reset ints
-	xor a
-	ld [rIF], a
-; enable ints besides joypad
-	ld a, %1111 ; serial timer lcdstat vblank
-	ld [rIE], a
-; request ints
-	ld a, b
-	ld [rIF], a
-	ret
-; 3df
-
-
-VBlank4: ; 3df
-; bg map
-; tiles
-; oam
-; joypad
-; serial
-; sound
-
-; save bank
-	ld a, [$ff9d]
-	ld [$ff8a], a
-	
-	call UpdateBGMap
-	call SafeLoadTiles
-	
-; update oam by dma transfer
-	call hPushOAM
-;	403f:
-;		ld a, $c4
-;		ld [rDMA], a
-;		ld a, $28
-;	.loop
-;		dec a
-;		jr nz, .loop
-;		ret
-	
-; update joypad
-	call Joypad
-	
-; tell other fns vblank happened
-	xor a
-	ld [VBlankOccurred], a
-	
-; handshake
-	call AskSerial
-	
-; update sound
-	ld a, BANK(UpdateSound)
-	rst Bankswitch ; bankswitch
-	call UpdateSound
-; restore bank
-	ld a, [$ff8a]
-	rst Bankswitch
-	ret
-; 400
-
-
-VBlank5: ; 400
-; scx
-; palettes
-; bg map
-; tiles
-; joypad
-; 
-
-; save bank
-	ld a, [$ff9d]
-	ld [$ff8a], a
-	
-; scroll x
-	ld a, [$ffcf]
-	ld [rSCX], a
-	
-; if we can update pals, skip this part
-	call UpdatePalsIfCGB
-	jr c, .vblankoccurred
-	
-	call UpdateBGMap
-	call SafeLoadTiles
-	
-.vblankoccurred
-; tell other fns vblank happened
-	xor a
-	ld [VBlankOccurred], a
-	
-; joypad
-	call Joypad
-	
-; discard requested ints
-	xor a
-	ld [rIF], a
-; enable lcd stat
-	ld a, %10 ; lcd stat
-	ld [rIE], a
-; request lcd stat
-	ld [rIF], a
-	
-	ei
-; update sound
-	ld a, BANK(UpdateSound)
-	rst Bankswitch ; bankswitch
-	call UpdateSound
-; restore bank
-	ld a, [$ff8a]
-	rst Bankswitch
-	di
-	
-; discard requested ints
-	xor a
-	ld [rIF], a
-; enable ints besides joypad
-	ld a, %1111 ; serial timer lcdstat vblank
-	ld [rIE], a
-	ret
-; 436
-
-
-VBlank6: ; 436
-; palettes
-; tiles
-; dma transfer
-; sound
-
-; save bank
-	ld a, [$ff9d]
-	ld [$ff8a], a
-	
-; inc frame counter
-	ld hl, $ff9b
-	inc [hl]
-	
-	call UpdateCGBPals
-	jr c, .vblankoccurred
-	
-	call SafeLoadTiles
-	call SafeLoadTiles2
-	call DMATransfer
-	
-.vblankoccurred
-; tell other fns vblank happened
-	xor a
-	ld [VBlankOccurred], a
-	
-; update sound
-	ld a, BANK(UpdateSound)
-	rst Bankswitch ; bankswitch
-	call UpdateSound
-; restore bank
-	ld a, [$ff8a]
-	rst Bankswitch
-	ret
-; 45a