shithub: pokecrystal

ref: b1e63485d8747ef4946b56a5d0c07c4fdfaf7186
dir: /engine/scripting.asm/

View raw version
; Event scripting commands.


EnableScriptMode:: ; 96c56
	push af
	ld a, SCRIPT_READ
	ld [ScriptMode], a
	pop af
	ret
; 96c5e

ScriptEvents:: ; 96c5e
	call StartScript
.loop
	ld a, [ScriptMode]
	ld hl, .modes
	rst JumpTable
	call CheckScript
	jr nz, .loop
	ret
; 96c6e

.modes ; 96c6e
	dw EndScript
	dw RunScriptCommand
	dw WaitScriptMovement
	dw WaitScript

EndScript: ; 96c76
	call StopScript
	ret
; 96c7a

WaitScript: ; 96c7a
	call StopScript

	ld hl, ScriptDelay
	dec [hl]
	ret nz

	callba Function58b9

	ld a, SCRIPT_READ
	ld [ScriptMode], a
	call StartScript
	ret
; 96c91

WaitScriptMovement: ; 96c91
	call StopScript

	ld hl, VramState
	bit 7, [hl]
	ret nz

	callba Function58b9

	ld a, SCRIPT_READ
	ld [ScriptMode], a
	call StartScript
	ret
; 96ca9

RunScriptCommand: ; 96ca9
	call GetScriptByte
	ld hl, ScriptCommandTable
	rst JumpTable
	ret
; 96cb1


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_greater_than
	dw Script_if_less_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_checkevent
	dw Script_clearevent
	dw Script_setevent
	dw Script_checkflag
	dw Script_clearflag
	dw Script_setflag
	dw Script_wildon
	dw Script_wildoff
	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
IF _CRYSTAL
	dw Script_3jumptext
ENDC
	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_battletowertext
	dw Script_displaylocation
	dw Script_trainerclassname
	dw Script_name
	dw Script_wait
	dw Script_unknown0xa9
; 0x96e05

StartScript: ; 0x96e05
	ld hl, ScriptFlags
	set SCRIPT_RUNNING, [hl]
	ret
; 0x96e0b

CheckScript: ; 0x96e0b
	ld hl, ScriptFlags
	bit SCRIPT_RUNNING, [hl]
	ret
; 0x96e11

StopScript: ; 0x96e11
	ld hl, ScriptFlags
	res SCRIPT_RUNNING, [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 FarCall
	ret
; 0x96e26

Script_special: ; 0x96e26
; script command 0xf
; parameters:
;     predefined_script (MultiByteParam)

	call GetScriptByte
	ld e, a
	call GetScriptByte
	ld d, a
	callba Special
	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 FarCall
	ret
; 0x96e45

Script_jumptextfaceplayer: ; 0x96e45
; script command 0x51
; parameters:
;     text_pointer (RawTextPointerLabelParam)

	ld a, [ScriptBank]
	ld [wd44e], a
	call GetScriptByte
	ld [wd44f], a
	call GetScriptByte
	ld [wd450], a
	ld b, BANK(JumpTextFacePlayerScript)
	ld hl, JumpTextFacePlayerScript
	jp ScriptJump
; 0x96e5f

Script_jumptext: ; 0x96e5f
; script command 0x53
; parameters:
;     text_pointer (RawTextPointerLabelParam)

	ld a, [ScriptBank]
	ld [wd44e], a
	call GetScriptByte
	ld [wd44f], a
	call GetScriptByte
	ld [wd450], a
	ld b, BANK(JumpTextScript)
	ld hl, JumpTextScript
	jp ScriptJump
; 0x96e79

JumpTextFacePlayerScript: ; 0x96e79
	faceplayer
JumpTextScript: ; 0x96e7a
	loadfont
	repeattext -1, -1
	closetext
	loadmovesprites
	end
; 0x96e81


IF _CRYSTAL

Script_3jumptext: ; 0x96e81
; script command 0x52
; parameters:
;     text_pointer (PointerLabelBeforeBank)

	call GetScriptByte
	ld [wd44e], a
	call GetScriptByte
	ld [wd44f], a
	call GetScriptByte
	ld [wd450], a
	ld b, BANK(JumpTextScript)
	ld hl, JumpTextScript
	jp ScriptJump
; 0x96e9b

ENDC


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 MapTextbox
	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 MapTextbox
	ret
; 0x96ebb

Script_repeattext: ; 0x96ebb
; script command 0x4d
; parameters:
;     byte (SingleByteParam)
;     byte (SingleByteParam)

	call GetScriptByte
	ld l, a
	call GetScriptByte
	ld h, a
	cp -1
	jr nz, .done ; 0x96ec5 $11
	ld a, l
	cp -1
	jr nz, .done ; 0x96eca $c
	ld hl, wd44e
	ld a, [hli]
	ld b, a
	ld a, [hli]
	ld h, [hl]
	ld l, a
	call MapTextbox
	ret
.done
	ret
; 0x96ed9

Script_closetext: ; 0x96ed9
; script command 0x54

	jp CloseText
; 0x96edc

Script_keeptextopen: ; 0x96edc
; script command 0x55

	ld a, [hOAMUpdate]
	push af
	ld a, $1
	ld [hOAMUpdate], a
	call WaitBGMap
	call KeepTextOpen
	pop af
	ld [hOAMUpdate], a
	ret
; 0x96eed

Script_yesorno: ; 0x96eed
; script command 0x4e

	call YesNoBox
	ld a, 0
	jr c, .no ; 0x96ef2 $2
	ld a, 1
.no
	ld [ScriptVar], a
	ret
; 0x96efa

Script_loadmenudata: ; 0x96efa
; script command 0x4f
; parameters:
;     data (MenuDataPointerParam)

	call GetScriptByte
	ld l, a
	call GetScriptByte
	ld h, a
	ld de, LoadMenuDataHeader
	ld a, [ScriptBank]
	call Call_a_de
	call UpdateSprites
	ret
; 0x96f0f

Script_writebackup: ; 0x96f0f
; script command 0x50

	call WriteBackup
	call UpdateSprites
	ret
; 0x96f16

Script_pokepic: ; 0x96f16
; script command 0x56
; parameters:
;     pokemon (PokemonParam)

	call GetScriptByte
	and a
	jr nz, .ok
	ld a, [ScriptVar]
.ok
	ld [CurPartySpecies], a
	callba Pokepic
	ret
; 0x96f29

Script_pokepicyesorno: ; 0x96f29
; script command 0x57

	callba PokepicYesOrNo
	ret
; 0x96f30

Script_interpretmenu2: ; 0x96f30
; script command 0x59

	ld a, [ScriptBank]
	ld hl, InterpretMenu2
	rst FarCall
	ld a, [MenuSelection2]
	jr nc, .ok
	xor a
.ok
	ld [ScriptVar], a
	ret
; 0x96f41

Script_interpretmenu: ; 0x96f41
; script command 0x58

	ld a, [ScriptBank]
	ld hl, InterpretMenu
	rst FarCall
	ld a, [wMenuCursorBuffer]
	jr nc, .ok
	xor a
.ok
	ld [ScriptVar], a
	ret
; 0x96f52

Script_battletowertext: ; 0x96f52
; script command 0xa4
; parameters:
;     pointer (PointerLabelBeforeBank)
;     memory (SingleByteParam)

	call SetUpTextBox
	call GetScriptByte
	ld c, a
	callba BattleTowerText
	ret
; 0x96f60

Script_verbosegiveitem: ; 0x96f60
; script command 0x9e
; parameters:
;     item (ItemLabelByte)
;     quantity (DecimalParam)

	call Script_giveitem
	call CurItemName
	ld de, StringBuffer1
	ld a, 1
	call CopyConvertedText
	ld b, BANK(GiveItemScript)
	ld de, GiveItemScript
	jp ScriptCall
; 0x96f76


Function96f76: ; 96f76
	ret
; 96f77

GiveItemScript: ; 96f77
	callasm Function96f76
	writetext ReceivedItemText
	iffalse .Full
	waitbutton
	specialsound
	closetext
	itemnotify
	end

.Full
	keeptextopen
	pocketisfull
	end
; 96f89

ReceivedItemText: ; 96f89
	text_jump UnknownText_0x1c4719
	db "@"
; 96f8e


Script_verbosegiveitem2: ; 0x96f8e
; script command 0x9f
; parameters:
;     item (ItemLabelByte)
;     var (SingleByteParam)

	call GetScriptByte
	cp -1
	jr nz, .ok
	ld a, [ScriptVar]
.ok
	ld [CurItem], a
	call GetScriptByte
	call GetVarAction
	ld a, [de]
	ld [wItemQuantityChangeBuffer], a
	ld hl, NumItems
	call ReceiveItem
	ld a, 1
	jr c, .ok2
	xor a
.ok2
	ld [ScriptVar], a
	call CurItemName
	ld de, StringBuffer1
	ld a, 1
	call CopyConvertedText
	ld b, BANK(GiveItemScript)
	ld de, GiveItemScript
	jp ScriptCall
; 0x96fc6

Script_itemnotify: ; 0x96fc6
; script command 0x45

	call GetPocketName
	call CurItemName
	ld b, BANK(PutItemInPocketText)
	ld hl, PutItemInPocketText
	call MapTextbox
	ret
; 0x96fd5

Script_pocketisfull: ; 0x96fd5
; script command 0x46

	call GetPocketName
	call CurItemName
	ld b, BANK(PocketIsFullText)
	ld hl, PocketIsFullText
	call MapTextbox
	ret
; 0x96fe4

Script_specialsound: ; 0x96fe4
; script command 0x88

	callba CheckItemPocket
	ld a, [wItemAttributeParamBuffer]
	cp TM_HM
	ld de, SFX_GET_TM
	jr z, .play
	ld de, SFX_ITEM
.play
	call PlaySFX
	call WaitSFX
	ret
; 0x96ffe


GetPocketName: ; 96ffe
	callba CheckItemPocket
	ld a, [wItemAttributeParamBuffer]
	dec a
	ld hl, .Pockets
	and 3
	add a
	ld e, a
	ld d, 0
	add hl, de
	ld a, [hli]
	ld d, [hl]
	ld e, a
	ld hl, StringBuffer3
	call CopyName2
	ret

.Pockets
	dw .Item
	dw .Key
	dw .Ball
	dw .TM

.Item
	db "ITEM POCKET@"
.Key
	db "KEY POCKET@"
.Ball
	db "BALL POCKET@"
.TM
	db "TM POCKET@"
; 97051

CurItemName: ; 97051
	ld a, [CurItem]
	ld [wd265], a
	call GetItemName
	ret
; 9705b


PutItemInPocketText: ; 9705b
	text_jump UnknownText_0x1c472c
	db "@"
; 97060

PocketIsFullText: ; 97060
	text_jump UnknownText_0x1c474b
	db "@"
; 97065


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
	callba OpenMartDialog
	ret
; 0x9707c

Script_elevator: ; 0x9707c
; script command 0x95
; parameters:
;     floor_list_pointer (PointerLabelParam)

	xor a
	ld [ScriptVar], a
	call GetScriptByte
	ld e, a
	call GetScriptByte
	ld d, a
	ld a, [ScriptBank]
	ld b, a
	callba Elevator
	ret c
	ld a, $1
	ld [ScriptVar], a
	ret
; 0x97099

Script_trade: ; 0x97099
; script command 0x96
; parameters:
;     trade_id (SingleByteParam)

	call GetScriptByte
	ld e, a
	callba NPCTrade
	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
	callba PhoneCall
	ret
; 0x970b7

Script_hangup: ; 0x970b7
; script command 0x99

	callba HangUp
	ret
; 0x970be

Script_askforphonenumber: ; 0x970be
; script command 0x97
; parameters:
;     number (SingleByteParam)

	call YesNoBox
	jr c, .refused ; 0x970c1 $13
	call GetScriptByte
	ld c, a
	callba AddPhoneNumber
	jr c, .phonefull ; 0x970cd $3
	xor a
	jr .done ; 0x970d0 $9
.phonefull
	ld a, 1
	jr .done ; 0x970d4 $5
.refused
	call GetScriptByte
	ld a, 2
.done
	ld [ScriptVar], a
	ret
; 0x970df

Script_describedecoration: ; 0x970df
; script command 0x9a
; parameters:
;     byte (SingleByteParam)

	call GetScriptByte
	ld b, a
	callba DescribeDecoration
	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:
;     flag (SingleByteParam)
;     map_group (MapGroupParam)
;     map_id (MapIdParam)

	call GetScriptByte
	ld c, a
	call GetScriptByte
	ld d, a
	call GetScriptByte
	ld e, a
	callba LoadWildData
	ret
; 0x9710f

Script_trainertext: ; 0x9710f
; script command 0x62
; parameters:
;     which_text (SingleByteParam)

	call GetScriptByte
	ld c, a
	ld b, 0
	ld hl, WalkingX
rept 2
	add hl, bc
endr
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ld a, [EngineBuffer1]
	ld b, a
	call MapTextbox
	ret
; 0x97125

Script_scripttalkafter: ; 0x97125
; script command 0x65

	ld hl, wd04b
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ld a, [EngineBuffer1]
	ld b, a
	jp ScriptJump
; 0x97132

Script_trainerstatus: ; 0x97132
; script command 0x63
; parameters:
;     action (SingleByteParam)

	xor a
	ld [ScriptVar], a
	ld hl, wd041
	ld e, [hl]
	inc hl
	ld d, [hl]
	call GetScriptByte
	ld b, a
	call EventFlagAction
	ld a, c
	and a
	ret z
	ld a, 1
	ld [ScriptVar], a
	ret
; 0x9714c

Script_winlosstext: ; 0x9714c
; script command 0x64
; parameters:
;     win_text_pointer (TextPointerLabelParam)
;     loss_text_pointer (TextPointerLabelParam)

	ld hl, wWinTextPointer ; d047
	call GetScriptByte
	ld [hli], a
	call GetScriptByte
	ld [hli], a
	ld hl, wLossTextPointer ; d049; this is unnecessary
	call GetScriptByte
	ld [hli], a
	call GetScriptByte
	ld [hli], a
	ret
; 0x97163

Script_talkaftercancel: ; 0x97163
; script command 0x66

	ld a, [wd04d]
	and a
	ret z
	jp Script_end
; 0x9716b

Script_talkaftercheck: ; 0x9716b
; script command 0x67

	ld a, 1
	ld [ScriptVar], a
	ld a, [wd04d]
	and a
	ret nz
	xor a
	ld [ScriptVar], a
	ret
; 0x9717a

Script_playrammusic: ; 0x9717a
; script command 0x80

	ld a, [OtherTrainerClass]
	ld e, a
	callba PlayTrainerEncounterMusic
	ret
; 0x97185

Script_playmapmusic: ; 0x97185
; script command 0x82

	call PlayMapMusic
	ret
; 0x97189

Script_playmusic: ; 0x97189
; script command 0x7f
; parameters:
;     music_pointer (MultiByteParam)

	ld de, MUSIC_NONE
	call PlayMusic
	xor a
	ld [MusicFade], a
	call MaxVolume
	call GetScriptByte
	ld e, a
	call GetScriptByte
	ld d, a
	call PlayMusic
	ret
; 0x971a2

Script_musicfadeout: ; 0x971a2
; script command 0x81
; parameters:
;     music (MultiByteParam)
;     fadetime (SingleByteParam)

	call GetScriptByte
	ld [MusicFadeID], a
	call GetScriptByte
	ld [MusicFadeID + 1], a
	call GetScriptByte
	and $7f
	ld [MusicFade], a
	ret
; 0x971b7

Script_playsound: ; 0x971b7
; script command 0x85
; parameters:
;     sound_pointer (MultiByteParam)

	call GetScriptByte
	ld e, a
	call GetScriptByte
	ld d, a
	call PlaySFX
	ret
; 0x971c3

Script_waitbutton: ; 0x971c3
; script command 0x86

	call WaitSFX
	ret
; 0x971c7

Script_warpsound: ; 0x971c7
; script command 0x87

	callba Function14a07
	call PlaySFX
	ret
; 0x971d1

Script_cry: ; 0x971d1
; script command 0x84
; parameters:
;     cry_id (MultiByteParam)

	call GetScriptByte
	push af
	call GetScriptByte
	pop af
	and a
	jr nz, .ok
	ld a, [ScriptVar]
.ok
	call PlayCry
	ret
; 0x971e3

GetScriptPerson: ; 0x971e3
	and a
	ret z
	cp LAST_TALKED
	ret z
	dec a
	ret
; 0x971ea

Script_setlasttalked: ; 0x971ea
; script command 0x68
; parameters:
;     person (SingleByteParam)

	call GetScriptByte
	call GetScriptPerson
	ld [hLastTalked], a
	ret
; 0x971f3

Script_applymovement: ; 0x971f3
; script command 0x69
; parameters:
;     person (SingleByteParam)
;     data (MovementPointerLabelParam)

	call GetScriptByte
	call GetScriptPerson
	ld c, a
; 971fa

ApplyMovement: ; 971fa
	push bc
	ld a, c
	callba SetFlagsForMovement_1
	pop bc
	push bc
	call SetFlagsForMovement_2
	pop bc
	call GetScriptByte
	ld l, a
	call GetScriptByte
	ld h, a
	ld a, [ScriptBank]
	ld b, a
	call GetMovementData
	ret c
	ld a, SCRIPT_WAIT_MOVEMENT
	ld [ScriptMode], a
	call StopScript
	ret
; 0x97221

SetFlagsForMovement_2: ; 0x97221
	callba _SetFlagsForMovement_2
	ret
; 0x97228

Script_applymovement2: ; 0x97228
; script command 0x6a
; parameters:
;     data (MovementPointerLabelParam)

	ld a, [hLastTalked]
	ld c, a
	jp ApplyMovement
; 0x9722e

Script_faceplayer: ; 0x9722e
; script command 0x6b

	ld a, [hLastTalked]
	and a
	ret z
	ld d, $0
	ld a, [hLastTalked]
	ld e, a
	callba GetRelativeFacing
	ld a, d
rept 2
	add a
endr
	ld e, a
	ld a, [hLastTalked]
	ld d, a
	call ApplyPersonFacing
	ret
; 0x97248

Script_faceperson: ; 0x97248
; script command 0x6c
; parameters:
;     person1 (SingleByteParam)
;     person2 (SingleByteParam)

	call GetScriptByte
	call GetScriptPerson
	cp LAST_TALKED
	jr c, .ok
	ld a, [hLastTalked]
.ok
	ld e, a
	call GetScriptByte
	call GetScriptPerson
	cp LAST_TALKED
	jr nz, .ok2
	ld a, [hLastTalked]
.ok2
	ld d, a
	push de
	callba GetRelativeFacing
	pop bc
	ret c
	ld a, d
rept 2
	add a
endr
	ld e, a
	ld d, c
	call ApplyPersonFacing
	ret
; 0x97274

Script_spriteface: ; 0x97274
; script command 0x76
; parameters:
;     person (SingleByteParam)
;     facing (SingleByteParam)

	call GetScriptByte
	call GetScriptPerson
	cp LAST_TALKED
	jr nz, .ok
	ld a, [hLastTalked]
.ok
	ld d, a
	call GetScriptByte
rept 2
	add a
endr
	ld e, a
	call ApplyPersonFacing
	ret
; 0x9728b

ApplyPersonFacing: ; 0x9728b
	ld a, d
	push de
	call CheckObjectVisibility
	jr c, .not_visible ; 0x97290 $27
	ld hl, OBJECT_SPRITE
	add hl, bc
	ld a, [hl]
	push bc
	call DoesSpriteHaveFacings
	pop bc
	jr c, .not_visible ; STILL_SPRITE
	ld hl, OBJECT_FLAGS1
	add hl, bc
	bit 2, [hl]
	jr nz, .not_visible ; 0x972a4 $13
	pop de
	ld a, e
	call SetSpriteDirection
	ld hl, VramState
	bit 6, [hl]
	jr nz, .text_state ; 0x972b0 $3
	call .DisableTextTiles
.text_state
	call UpdateSprites
	ret

.not_visible
	pop de
	scf
	ret
; 0x972bc

.DisableTextTiles: ; 0x972bc
	call LoadMapPart
	hlcoord 0, 0
	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
.loop
	res 7, [hl]
	inc hl
	dec bc
	ld a, b
	or c
	jr nz, .loop ; 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, VariableSprites
	add hl, de
	call GetScriptByte
	ld [hl], a
	ret
; 0x972dd

Script_appear: ; 0x972dd
; script command 0x6f
; parameters:
;     person (SingleByteParam)

	call GetScriptByte
	call GetScriptPerson
	call _CopyObjectStruct
	ld a, [hMapObjectIndexBuffer]
	ld b, 0 ; clear
	call ApplyEventActionAppearDisappear
	ret
; 0x972ee

Script_disappear: ; 0x972ee
; script command 0x6e
; parameters:
;     person (SingleByteParam)

	call GetScriptByte
	call GetScriptPerson
	cp LAST_TALKED
	jr nz, .ok
	ld a, [hLastTalked]
.ok
	call DeleteObjectStruct
	ld a, [hMapObjectIndexBuffer]
	ld b, 1 ; set
	call ApplyEventActionAppearDisappear
	callba RefreshMapAppearDisappear
	ret
; 0x9730b

ApplyEventActionAppearDisappear: ; 0x9730b
	push bc
	call GetMapObject
	ld hl, MAPOBJECT_EVENT_FLAG
	add hl, bc
	pop bc
	ld e, [hl]
	inc hl
	ld d, [hl]
	ld a, -1
	cp e
	jr nz, .okay ; 0x9731a $5
	cp d
	jr nz, .okay ; 0x9731d $2
	xor a
	ret
.okay
	call EventFlagAction
	ret
; 0x97325

Script_follow: ; 0x97325
; script command 0x70
; parameters:
;     person2 (SingleByteParam)
;     person1 (SingleByteParam)

	call GetScriptByte
	call GetScriptPerson
	ld b, a
	call GetScriptByte
	call GetScriptPerson
	ld c, a
	callba StartFollow
	ret
; 0x9733a

Script_stopfollow: ; 0x9733a
; script command 0x71

	callba StopFollow
	ret
; 0x97341

Script_moveperson: ; 0x97341
; script command 0x72
; parameters:
;     person (SingleByteParam)
;     x (SingleByteParam)
;     y (SingleByteParam)

	call GetScriptByte
	call GetScriptPerson
	ld b, a
	call GetScriptByte
	add 4
	ld d, a
	call GetScriptByte
	add 4
	ld e, a
	callba CopyDECoordsToMapObject
	ret
; 0x9735b

Script_writepersonxy: ; 0x9735b
; script command 0x73
; parameters:
;     person (SingleByteParam)

	call GetScriptByte
	call GetScriptPerson
	cp LAST_TALKED
	jr nz, .ok
	ld a, [hLastTalked]
.ok
	ld b, a
	callba WritePersonXY
	ret
; 0x9736f

Script_follownotexact: ; 0x9736f
; script command 0x77
; parameters:
;     person2 (SingleByteParam)
;     person1 (SingleByteParam)

	call GetScriptByte
	call GetScriptPerson
	ld b, a
	call GetScriptByte
	call GetScriptPerson
	ld c, a
	callba FollowNotExact
	ret
; 0x97384

Script_loademote: ; 0x97384
; script command 0x74
; parameters:
;     bubble (SingleByteParam)

	call GetScriptByte
	cp -1
	jr nz, .not_var_emote ; 0x97389 $3
	ld a, [ScriptVar]
.not_var_emote
	ld c, a
	callba LoadEmote
	ret
; 0x97396

Script_showemote: ; 0x97396
; script command 0x75
; parameters:
;     bubble (SingleByteParam)
;     person (SingleByteParam)
;     time (DecimalParam)

	call GetScriptByte
	ld [ScriptVar], a
	call GetScriptByte
	call GetScriptPerson
	cp LAST_TALKED
	jr z, .ok
	ld [hLastTalked], a
.ok
	call GetScriptByte
	ld [ScriptDelay], a
	ld b, BANK(ShowEmoteScript)
	ld de, ShowEmoteScript
	jp ScriptCall
; 0x973b6

ShowEmoteScript: ; 973b6
	loademote EMOTE_MEM
	applymovement2 .Show
	pause 0
	applymovement2 .Hide
	end

.Show
	show_emote
	show_person
	step_end

.Hide
	hide_emote
	show_person
	step_end
; 973c7


Script_earthquake: ; 0x973c7
; script command 0x78
; parameters:
;     param (DecimalParam)

	ld hl, EarthquakeMovement
	ld de, wd002
	ld bc, EarthquakeMovementEnd - EarthquakeMovement
	call CopyBytes
	call GetScriptByte
	ld [wd003], a
	and (1 << 6) - 1
	ld [wd005], a
	ld b, BANK(.script)
	ld de, .script
	jp ScriptCall
; 0x973e6

.script: ; 973e6
	applymovement PLAYER, wd002
	end
; 973eb

EarthquakeMovement: ; 973eb
	step_shake 16
	step_sleep 16
	step_end
EarthquakeMovementEnd
; 973f0


Script_loadpikachudata: ; 0x973f0
; script command 0x5a

	ld a, PIKACHU
	ld [TempWildMonSpecies], a
	ld a, 5
	ld [CurPartyLevel], a
	ret
; 0x973fb

Script_battlecheck: ; 0x973fb
; script command 0x5b

	xor a
	ld [wd459], a
	ret
; 0x97400

Script_loadtrainerdata: ; 0x97400
; script command 0x5c

	ld a, (1 << 7) | 1
	ld [wd459], a
	ld a, [WalkingDirection]
	ld [OtherTrainerClass], a
	ld a, [FacingDirection]
	ld [OtherTrainerID], a
	ret
; 0x97412

Script_loadpokedata: ; 0x97412
; script command 0x5d
; parameters:
;     pokemon (PokemonParam)
;     level (DecimalParam)

	ld a, (1 << 7)
	ld [wd459], a
	call GetScriptByte
	ld [TempWildMonSpecies], a
	call GetScriptByte
	ld [CurPartyLevel], a
	ret
; 0x97424

Script_loadtrainer: ; 0x97424
; script command 0x5e
; parameters:
;     trainer_group (TrainerGroupParam)
;     trainer_id (TrainerIdParam)

	ld a, (1 << 7) | 1
	ld [wd459], a
	call GetScriptByte
	ld [OtherTrainerClass], a
	call GetScriptByte
	ld [OtherTrainerID], a
	ret
; 0x97436

Script_startbattle: ; 0x97436
; script command 0x5f

	call BufferScreen
	predef StartBattle
	ld a, [wBattleResult]
	and $3f
	ld [ScriptVar], a
	ret
; 0x97447

Script_catchtutorial: ; 0x97447
; script command 0x61
; parameters:
;     byte (SingleByteParam)

	call GetScriptByte
	ld [BattleType], a
	call BufferScreen
	callba CatchTutorial
	jp Script_reloadmap
; 0x97459

Script_returnafterbattle: ; 0x97459
; script command 0x60

	ld hl, wd459
	ld d, [hl]
	ld [hl], $0
	ld a, [wBattleResult]
	and $3f
	cp $1
	jr nz, .notblackedout ; 0x97466 $8
	ld b, BANK(UnknownScript_0x124c1)
	ld hl, UnknownScript_0x124c1
	jp ScriptJump

.notblackedout
	bit 0, d
	jr z, .was_wild ; 0x97472 $8
	callba MomTriesToBuySomething
	jr .done ; 0x9747a $12

.was_wild
	ld a, [wBattleResult]
	bit 7, a
	jr z, .done ; 0x97481 $b
	ld b, BANK(Script_SpecialBillCall)
	ld de, Script_SpecialBillCall
	callba LoadScriptBDE
.done
	jp Script_reloadmap
; 0x97491

Script_reloadmap: ; 0x97491
; script command 0x7b

	xor a
	ld [wd459], a
	ld a, MAPSETUP_RELOADMAP
	ld [hMapEntryMethod], a
	ld a, $1
	call LoadMapStatus
	call StopScript
	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, wd43c
	ld e, [hl]
	inc [hl]
	ld d, $0
	ld hl, wd43d
rept 3
	add hl, de
endr
	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

CallCallback:: ; 0x974f3
	ld a, [ScriptBank]
	or $80
	ld [ScriptBank], a
	jp ScriptCall
; 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, [ScriptVar]
	and a
	jp nz, SkipTwoScriptBytes
	jp Script_2jump
; 0x97536

Script_iftrue: ; 0x97536
; script command 0x9
; parameters:
;     pointer (ScriptPointerLabelParam)

	ld a, [ScriptVar]
	and a
	jp nz, Script_2jump
	jp SkipTwoScriptBytes
; 0x97540

Script_if_equal: ; 0x97540
; script command 0x6
; parameters:
;     byte (SingleByteParam)
;     pointer (ScriptPointerLabelParam)

	call GetScriptByte
	ld hl, ScriptVar
	cp [hl]
	jr z, Script_2jump ; 0x97547 $b5
	jr SkipTwoScriptBytes ; 0x97549 $4b
; 0x9754b

Script_if_not_equal: ; 0x9754b
; script command 0x7
; parameters:
;     byte (SingleByteParam)
;     pointer (ScriptPointerLabelParam)

	call GetScriptByte
	ld hl, ScriptVar
	cp [hl]
	jr nz, Script_2jump ; 0x97552 $aa
	jr SkipTwoScriptBytes ; 0x97554 $40
; 0x97556

Script_if_greater_than: ; 0x97556
; script command 0xa
; parameters:
;     byte (SingleByteParam)
;     pointer (ScriptPointerLabelParam)

	ld a, [ScriptVar]
	ld b, a
	call GetScriptByte
	cp b
	jr c, Script_2jump ; 0x9755e $9e
	jr SkipTwoScriptBytes ; 0x97560 $34
; 0x97562

Script_if_less_than: ; 0x97562
; script command 0xb
; parameters:
;     byte (SingleByteParam)
;     pointer (ScriptPointerLabelParam)

	call GetScriptByte
	ld b, a
	ld a, [ScriptVar]
	cp b
	jr c, Script_2jump ; 0x9756a $92
	jr SkipTwoScriptBytes ; 0x9756c $28
; 0x9756e

Script_jumpstd: ; 0x9756e
; script command 0xc
; parameters:
;     predefined_script (MultiByteParam)

	call StdScript
	jr ScriptJump ; 0x97571 $2a
; 0x97573

Script_callstd: ; 0x97573
; script command 0xd
; parameters:
;     predefined_script (MultiByteParam)

	call StdScript
	ld d, h
	ld e, l
	jp ScriptCall
; 0x9757b

StdScript: ; 0x9757b
	call GetScriptByte
	ld e, a
	call GetScriptByte
	ld d, a
	ld hl, StdScripts
rept 3
	add hl, de
endr
	ld a, BANK(StdScripts)
	call GetFarByte
	ld b, a
	inc hl
	ld a, BANK(StdScripts)
	call GetFarHalfword
	ret
; 0x97596

SkipTwoScriptBytes: ; 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 [wd44e], a
	call GetScriptByte
	ld [wd44f], a
	call GetScriptByte
	ld [wd450], a
	ld hl, ScriptFlags
	set 3, [hl]
	ret
; 0x975c2

Script_checktriggers: ; 0x975c2
; script command 0x13

	call CheckTriggers
	jr z, .asm_975cb ; 0x975c5 $4
	ld [ScriptVar], a
	ret
.asm_975cb
	ld a, $ff
	ld [ScriptVar], 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 GetMapTrigger
	ld a, d
	or e
	jr z, .asm_975e5 ; 0x975de $5
	ld a, [de]
	ld [ScriptVar], a
	ret
.asm_975e5
	ld a, $ff
	ld [ScriptVar], a
	ret
; 0x975eb

Script_dotrigger: ; 0x975eb
; script command 0x14
; parameters:
;     trigger_id (SingleByteParam)

	ld a, [MapGroup]
	ld b, a
	ld a, [MapNumber]
	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 GetMapTrigger
	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 [ScriptVar], a
	ret
; 0x97616

Script_copyvartobyte: ; 0x97616
; script command 0x1a
; parameters:
;     address (RAMAddressParam)

	call GetScriptByte
	ld l, a
	call GetScriptByte
	ld h, a
	ld a, [ScriptVar]
	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 [ScriptVar], a
	ret
; 0x97637

Script_addvar: ; 0x97637
; script command 0x16
; parameters:
;     value (SingleByteParam)

	call GetScriptByte
	ld hl, ScriptVar
	add [hl]
	ld [hl], a
	ret
; 0x97640

Script_random: ; 0x97640
; script command 0x17
; parameters:
;     input (SingleByteParam)

	call GetScriptByte
	ld [ScriptVar], a
	and a
	ret z
	ld c, a
	call Function97673
	and a
	jr z, .asm_9765f ; 0x9764d $10
	ld b, a
	xor a
	sub b
	ld b, a
.asm_97653
	push bc
	call Random
	pop bc
	ld a, [$ffe1]
	cp b
	jr nc, .asm_97653 ; 0x9765b $f6
	jr .asm_97666 ; 0x9765d $7
.asm_9765f
	push bc
	call Random
	pop bc
	ld a, [$ffe1]
.asm_97666
	push af
	ld a, [ScriptVar]
	ld c, a
	pop af
	call SimpleDivide
	ld [ScriptVar], a
	ret
; 0x97673

Function97673: ; 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 GetVarAction
	ld a, [de]
	ld [ScriptVar], a
	ret
; 0x97688

Script_writevarcode: ; 0x97688
; script command 0x1d
; parameters:
;     variable_id (SingleByteParam)

	call GetScriptByte
	call GetVarAction
	ld a, [ScriptVar]
	ld [de], a
	ret
; 0x97693

Script_writecode: ; 0x97693
; script command 0x1e
; parameters:
;     variable_id (SingleByteParam)
;     value (SingleByteParam)

	call GetScriptByte
	call GetVarAction
	call GetScriptByte
	ld [de], a
	ret
; 0x9769e

GetVarAction: ; 0x9769e
	ld c, a
	callba _GetVarAction
	ret
; 0x976a6

Script_checkver: ; 0x976a6
; script command 0x18

	ld a, [Version]
	ld [ScriptVar], a
	ret
; 0x976ad

Version: ; 976ad
	db VERSION
; 976ae

Script_pokenamemem: ; 0x976ae
; script command 0x40
; parameters:
;     pokemon (PokemonParam); leave $0 to draw from script var
;     memory (SingleByteParam)

	call GetScriptByte
	and a
	jr nz, .gotit ; 0x976b2 $3
	ld a, [ScriptVar]
.gotit
	ld [wd265], a
	call GetPokemonName
	ld de, StringBuffer1

ConvertMemToText: ; 0x976c0
	call GetScriptByte
	cp 3
	jr c, .ok
	xor a
.ok

CopyConvertedText: ; 976c8
	ld hl, StringBuffer3
	ld bc, StringBuffer4 - StringBuffer3
	call AddNTimes
	call CopyName2
	ret
; 0x976d5

Script_itemtotext: ; 0x976d5
; script command 0x41
; parameters:
;     item (ItemLabelByte)
;     memory (SingleByteParam)

	call GetScriptByte
	and a
	jr nz, .ok ; 0x976d9 $3
	ld a, [ScriptVar]
.ok
	ld [wd265], a
	call GetItemName
	ld de, StringBuffer1
	jr ConvertMemToText ; 0x976e7 $d7
; 0x976e9

Script_mapnametotext: ; 0x976e9
; script command 0x42
; parameters:
;     memory (SingleByteParam)

	ld a, [MapGroup]
	ld b, a
	ld a, [MapNumber]
	ld c, a
	call GetWorldMapLocation

ConvertLandmarkToText: ; 0x976f4
	ld e, a
	callba GetLandmarkName
	ld de, StringBuffer1
	jp ConvertMemToText
; 0x97701

Script_displaylocation: ; 0x97701
; script command 0xa5
; parameters:
;     id (SingleByteParam)
;     memory (SingleByteParam)

	call GetScriptByte
	jr ConvertLandmarkToText ; 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
	callba GetTrainerName
	jr ConvertMemToText ; 0x97714 $aa
; 0x97716

Script_name: ; 0x97716
; script command 0xa7
; parameters:
;     type (SingleByteParam)
;     id (SingleByteParam)
;     memory (SingleByteParam)

	call GetScriptByte
	ld [wNamedObjectTypeBuffer], a

ContinueToGetName: ; 0x9771c
	call GetScriptByte
	ld [CurSpecies], a
	call GetName
	ld de, StringBuffer1
	jp ConvertMemToText
; 0x9772b

Script_trainerclassname: ; 0x9772b
; script command 0xa6
; parameters:
;     id (SingleByteParam)
;     memory (SingleByteParam)

	ld a, TRAINER_NAME
	ld [wNamedObjectTypeBuffer], a
	jr ContinueToGetName ; 0x97730 $ea
; 0x97732

Script_readmoney: ; 0x97732
; script command 0x3d
; parameters:
;     account (SingleByteParam)
;     memory (SingleByteParam)

	call ResetStringBuffer1
	call GetMoneyAccount
	ld hl, StringBuffer1
	lb bc, PRINTNUM_RIGHTALIGN | 3, 6
	call PrintNum
	ld de, StringBuffer1
	jp ConvertMemToText
; 0x97747

Script_readcoins: ; 0x97747
; script command 0x3e
; parameters:
;     memory (SingleByteParam)

	call ResetStringBuffer1
	ld hl, StringBuffer1
	ld de, Coins
	lb bc, PRINTNUM_RIGHTALIGN | 2, 6
	call PrintNum
	ld de, StringBuffer1
	jp ConvertMemToText
; 0x9775c

Script_RAM2MEM: ; 0x9775c
; script command 0x3f
; parameters:
;     memory (SingleByteParam)

	call ResetStringBuffer1
	ld de, ScriptVar
	ld hl, StringBuffer1
	lb bc, PRINTNUM_RIGHTALIGN | 1, 3
	call PrintNum
	ld de, StringBuffer1
	jp ConvertMemToText
; 0x97771

ResetStringBuffer1: ; 0x97771
	ld hl, StringBuffer1
	ld bc, NAME_LENGTH
	ld a, "@"
	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, CopyName1
	rst FarCall
	ld de, StringBuffer2
	jp ConvertMemToText
; 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, MAIL_MAX_LENGTH
	ld de, wd002
	ld a, [ScriptBank]
	call FarCopyBytes
	pop bc
	callba GivePokeItem
	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
	callba Function44654
	ret
; 0x977ca

Script_giveitem: ; 0x977ca
; script command 0x1f
; parameters:
;     item (ItemLabelByte)
;     quantity (SingleByteParam)

	call GetScriptByte
	cp ITEM_FROM_MEM
	jr nz, .ok ; 0x977cf $3
	ld a, [ScriptVar]
.ok
	ld [CurItem], a
	call GetScriptByte
	ld [wItemQuantityChangeBuffer], a
	ld hl, NumItems
	call ReceiveItem
	jr nc, .full ; 0x977e3 $6
	ld a, $1
	ld [ScriptVar], a
	ret
.full
	xor a
	ld [ScriptVar], a
	ret
; 0x977f0

Script_takeitem: ; 0x977f0
; script command 0x20
; parameters:
;     item (ItemLabelByte)
;     quantity (DecimalParam)

	xor a
	ld [ScriptVar], a
	call GetScriptByte
	ld [CurItem], a
	call GetScriptByte
	ld [wItemQuantityChangeBuffer], a
	ld a, -1
	ld [ItemCountBuffer], a
	ld hl, NumItems
	call TossItem
	ret nc
	ld a, $1
	ld [ScriptVar], a
	ret
; 0x97812

Script_checkitem: ; 0x97812
; script command 0x21
; parameters:
;     item (ItemLabelByte)

	xor a
	ld [ScriptVar], a
	call GetScriptByte
	ld [CurItem], a
	ld hl, NumItems
	call CheckItem
	ret nc
	ld a, 1
	ld [ScriptVar], a
	ret
; 0x97829

Script_givemoney: ; 0x97829
; script command 0x22
; parameters:
;     account (SingleByteParam)
;     money (MoneyByteParam)

	call GetMoneyAccount
	call LoadMoneyAmountToMem
	callba GiveMoney
	ret
; 0x97836

Script_takemoney: ; 0x97836
; script command 0x23
; parameters:
;     account (SingleByteParam)
;     money (MoneyByteParam)

	call GetMoneyAccount
	call LoadMoneyAmountToMem
	callba TakeMoney
	ret
; 0x97843

Script_checkmoney: ; 0x97843
; script command 0x24
; parameters:
;     account (SingleByteParam)
;     money (MoneyByteParam)

	call GetMoneyAccount
	call LoadMoneyAmountToMem
	callba CompareMoney
; 0x9784f

CompareMoneyAction: ; 0x9784f
	jr c, .two
	jr z, .one
	ld a, 0
	jr .done
.one
	ld a, 1
	jr .done
.two
	ld a, 2
.done
	ld [ScriptVar], a
	ret
; 0x97861

GetMoneyAccount: ; 0x97861
	call GetScriptByte
	and a
	ld de, Money
	ret z
	ld de, wMomsMoney
	ret
; 0x9786d

LoadMoneyAmountToMem: ; 0x9786d
	ld bc, hMoneyTemp
	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 LoadCoinAmountToMem
	callba GiveCoins
	ret
; 0x9788b

Script_takecoins: ; 0x9788b
; script command 0x26
; parameters:
;     coins (CoinByteParam)

	call LoadCoinAmountToMem
	callba TakeCoins
	ret
; 0x97895

Script_checkcoins: ; 0x97895
; script command 0x27
; parameters:
;     coins (CoinByteParam)

	call LoadCoinAmountToMem
	callba CheckCoins
	jr CompareMoneyAction
; 978a0

LoadCoinAmountToMem: ; 978a0
	call GetScriptByte
	ld [hMoneyTemp + 1], a
	call GetScriptByte
	ld [hMoneyTemp], a
	ld bc, hMoneyTemp
	ret
; 0x978ae

Script_checktime: ; 0x978ae
; script command 0x2b
; parameters:
;     time (SingleByteParam)

	xor a
	ld [ScriptVar], a
	callba CheckTime
	call GetScriptByte
	and c
	ret z
	ld a, $1
	ld [ScriptVar], a
	ret
; 0x978c3

Script_checkpoke: ; 0x978c3
; script command 0x2c
; parameters:
;     pkmn (PokemonParam)

	xor a
	ld [ScriptVar], a
	call GetScriptByte
	ld hl, PartySpecies
	ld de, 1
	call IsInArray
	ret nc
	ld a, 1
	ld [ScriptVar], a
	ret
; 0x978da

Script_addcellnum: ; 0x978da
; script command 0x28
; parameters:
;     person (SingleByteParam)

	xor a
	ld [ScriptVar], a
	call GetScriptByte
	ld c, a
	callba AddPhoneNumber
	ret nc
	ld a, $1
	ld [ScriptVar], a
	ret
; 0x978ef

Script_delcellnum: ; 0x978ef
; script command 0x29
; parameters:
;     person (SingleByteParam)

	xor a
	ld [ScriptVar], a
	call GetScriptByte
	ld c, a
	callba DelCellNum
	ret nc
	ld a, $1
	ld [ScriptVar], a
	ret
; 0x97904

Script_checkcellnum: ; 0x97904
; script command 0x2a
; parameters:
;     person (SingleByteParam)
; returns false if the cell number is not in your phone

	xor a
	ld [ScriptVar], a
	call GetScriptByte
	ld c, a
	callba CheckCellNum
	ret nc
	ld a, $1
	ld [ScriptVar], a
	ret
; 0x97919

Script_specialphonecall: ; 0x97919
; script command 0x9c
; parameters:
;     call_id (MultiByteParam)

	call GetScriptByte
	ld [wSpecialPhoneCallID], a
	call GetScriptByte
	ld [wSpecialPhoneCallID + 1], a
	ret
; 0x97926

Script_checkphonecall: ; 0x97926
; script command 0x9d
; returns false if no special phone call is stored

	ld a, [wSpecialPhoneCallID]
	and a
	jr z, .ok
	ld a, 1
.ok
	ld [ScriptVar], 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 [CurPartySpecies], a
	call GetScriptByte
	ld [CurPartyLevel], a
	call GetScriptByte
	ld [CurItem], a
	call GetScriptByte
	and a
	ld b, a
	jr z, .ok
	ld hl, ScriptPos
	ld e, [hl]
	inc hl
	ld d, [hl]
	call GetScriptByte
	call GetScriptByte
	call GetScriptByte
	call GetScriptByte
.ok
	callba GivePoke
	ld a, b
	ld [ScriptVar], a
	ret
; 0x97968

Script_giveegg: ; 0x97968
; script command 0x2e
; parameters:
;     pkmn (PokemonParam)
;     level (DecimalParam)
; if no room in the party, return 0 in ScriptVar; else, return 2

	xor a ; PARTYMON
	ld [ScriptVar], a
	ld [MonType], a
	call GetScriptByte
	ld [CurPartySpecies], a
	call GetScriptByte
	ld [CurPartyLevel], a
	callba GiveEgg
	ret nc
	ld a, 2
	ld [ScriptVar], a
	ret
; 0x97988

Script_setevent: ; 0x97988
; script command 0x33
; parameters:
;     bit_number (MultiByteParam)

	call GetScriptByte
	ld e, a
	call GetScriptByte
	ld d, a
	ld b, SET_FLAG
	call EventFlagAction
	ret
; 0x97996

Script_clearevent: ; 0x97996
; script command 0x32
; parameters:
;     bit_number (MultiByteParam)

	call GetScriptByte
	ld e, a
	call GetScriptByte
	ld d, a
	ld b, RESET_FLAG
	call EventFlagAction
	ret
; 0x979a4

Script_checkevent: ; 0x979a4
; script command 0x31
; parameters:
;     bit_number (MultiByteParam)

	call GetScriptByte
	ld e, a
	call GetScriptByte
	ld d, a
	ld b, CHECK_FLAG
	call EventFlagAction
	ld a, c
	and a
	jr z, .false ; 0x979b3 $2
	ld a, 1
.false
	ld [ScriptVar], a
	ret
; 0x979bb

Script_setflag: ; 0x979bb
; script command 0x36
; parameters:
;     bit_number (MultiByteParam)

	call GetScriptByte
	ld e, a
	call GetScriptByte
	ld d, a
	ld b, 1 ; set
	call _EngineFlagAction
	ret
; 0x979c9

Script_clearflag: ; 0x979c9
; script command 0x35
; parameters:
;     bit_number (MultiByteParam)

	call GetScriptByte
	ld e, a
	call GetScriptByte
	ld d, a
	ld b, 0 ; clear
	call _EngineFlagAction
	ret
; 0x979d7

Script_checkflag: ; 0x979d7
; script command 0x34
; parameters:
;     bit_number (MultiByteParam)

	call GetScriptByte
	ld e, a
	call GetScriptByte
	ld d, a
	ld b, 2 ; check
	call _EngineFlagAction
	ld a, c
	and a
	jr z, .false ; 0x979e6 $2
	ld a, 1
.false
	ld [ScriptVar], a
	ret
; 0x979ee

_EngineFlagAction: ; 0x979ee
	callba EngineFlagAction
	ret
; 0x979f5

Script_wildoff: ; 0x979f5
; script command 0x38

	ld hl, StatusFlags
	set 5, [hl]
	ret
; 0x979fb

Script_wildon: ; 0x979fb
; script command 0x37

	ld hl, StatusFlags
	res 5, [hl]
	ret
; 0x97a01

Script_xycompare: ; 0x97a01
; script command 0x39
; parameters:
;     pointer (MultiByteParam)

	call GetScriptByte
	ld [wd453], a
	call GetScriptByte
	ld [wd454], 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, [wPlayerSpriteSetupFlags]
	set 5, a
	or c
	ld [wPlayerSpriteSetupFlags], a
; fall through

Script_warp: ; 0x97a1d
; script command 0x3c
; parameters:
;     map_group (MapGroupParam)
;     map_id (MapIdParam)
;     x (SingleByteParam)
;     y (SingleByteParam)

; This seems to be some sort of error handling case.
	call GetScriptByte
	and a
	jr z, .not_ok ; 0x97a21 $27
	ld [MapGroup], a
	call GetScriptByte
	ld [MapNumber], a
	call GetScriptByte
	ld [XCoord], a
	call GetScriptByte
	ld [YCoord], a
	ld a, -1
	ld [wd001], a
	ld a, MAPSETUP_WARP
	ld [hMapEntryMethod], a
	ld a, 1
	call LoadMapStatus
	call StopScript
	ret
.not_ok
	call GetScriptByte
	call GetScriptByte
	call GetScriptByte
	ld a, -1
	ld [wd001], a
	ld a, MAPSETUP_BADWARP
	ld [hMapEntryMethod], a
	ld a, 1
	call LoadMapStatus
	call StopScript
	ret
; 0x97a65

Script_warpmod: ; 0x97a65
; script command 0x3a
; parameters:
;     warp_id (SingleByteParam)
;     map_group (MapGroupParam)
;     map_id (MapIdParam)

	call GetScriptByte
	ld [wdcac], a
	call GetScriptByte
	ld [BackupMapGroup], a
	call GetScriptByte
	ld [BackupMapNumber], a
	ret
; 0x97a78

Script_blackoutmod: ; 0x97a78
; script command 0x3b
; parameters:
;     map_group (MapGroupParam)
;     map_id (MapIdParam)

	call GetScriptByte
	ld [wdcb2], a
	call GetScriptByte
	ld [wdcb3], a
	ret
; 0x97a85

Script_reloadmapmusic: ; 0x97a85
; script command 0x83

	ld a, 1
	ld [wc2c1], 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
	callba Function97e31
	ret
; 0x97a9e

Script_delcmdqueue: ; 0x97a9e
; script command 0x7e
; parameters:
;     byte (SingleByteParam)

	xor a
	ld [ScriptVar], a
	call GetScriptByte
	ld b, a
	callba Function97e5c
	ret c
	ld a, 1
	ld [ScriptVar], a
	ret
; 0x97ab3

Script_changemap: ; 0x97ab3
; script command 0x79
; parameters:
;     map_data_pointer (MapDataPointerParam)

	call GetScriptByte
	ld [MapBlockDataBank], a
	call GetScriptByte
	ld [MapBlockDataPointer], a
	call GetScriptByte
	ld [MapBlockDataPointer + 1], a
	call ChangeMap
	call BufferScreen
	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 GetBlockLocation
	call GetScriptByte
	ld [hl], a
	call BufferScreen
	ret
; 0x97ae3

Script_reloadmappart:: ; 0x97ae3
; script command 0x7c

	xor a
	ld [hBGMapMode], a
	call Function2173
	call Function2914
	callba Function104061
	call UpdateSprites
	ret
; 0x97af6

Script_warpcheck: ; 0x97af6
; script command 0x8e

	call Function224a
	ret nc
	callba SetAll_ScriptFlags3
	ret
; 0x97b01

Function97b01: ; 0x97b01
	callba SetAll_ScriptFlags3
	ret
; 0x97b08

Script_newloadmap: ; 0x97b08
; script command 0x8a
; parameters:
;     which_method (SingleByteParam)

	call GetScriptByte
	ld [hMapEntryMethod], a
	ld a, 1
	call LoadMapStatus
	call StopScript
	ret
; 0x97b16

Script_reloadandreturn: ; 0x97b16
; script command 0x92

	call Script_newloadmap
	jp Script_end
; 0x97b1c

Script_loadfont: ; 0x97b1c
; script command 0x47

	call LoadFont
	ret
; 0x97b20

Script_refreshscreen: ; 0x97b20
; script command 0x48
; parameters:
;     dummy (SingleByteParam)

	call ResetWindow
	call GetScriptByte
	ret
; 0x97b27

Script_loadbytec1ce: ; 0x97b27
; script command 0x4a
; parameters:
;     byte (SingleByteParam)

	call GetScriptByte
	ld [wc2cf], a
	ret
; 0x97b2e


LoadMoveSpritesScript: ; 97b2e
	loadmovesprites
; 97b2f

Script_loadmovesprites: ; 0x97b2f
; script command 0x49

	call Function2e20
	call LoadMoveSprites
	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, .loop ; 0x97b4b $3
	ld [ScriptDelay], a
.loop
	ld c, 2
	call DelayFrames
	ld hl, ScriptDelay
	dec [hl]
	jr nz, .loop ; 0x97b59 $f5
	ret
; 0x97b5c

Script_deactivatefacing: ; 0x97b5c
; script command 0x8c
; parameters:
;     time (SingleByteParam)

	call GetScriptByte
	and a
	jr z, .no_time ; 0x97b60 $3
	ld [ScriptDelay], a
.no_time
	ld a, SCRIPT_WAIT
	ld [ScriptMode], a
	call StopScript
	ret
; 0x97b6e

Script_ptpriorityjump: ; 0x97b6e
; script command 0x8f
; parameters:
;     pointer (ScriptPointerLabelParam)

	call StopScript
	jp Script_2jump
; 0x97b74

Script_end: ; 0x97b74
; script command 0x91

	call ExitScriptSubroutine
	jr c, .resume
	ret
.resume
	xor a
	ld [ScriptRunning], a
	ld a, SCRIPT_OFF
	ld [ScriptMode], a
	ld hl, ScriptFlags
	res 0, [hl]
	call StopScript
	ret
; 0x97b8c

Script_return: ; 0x97b8c
; script command 0x90

	call ExitScriptSubroutine
	jr c, .dummy
.dummy
	ld hl, ScriptFlags
	res 0, [hl]
	call StopScript
	ret
; 0x97b9a

ExitScriptSubroutine: ; 0x97b9a
; Return carry if there's no parent to return to.

	ld hl, wd43c
	ld a, [hl]
	and a
	jr z, .done ; 0x97b9f $1d
	dec [hl]
	ld e, [hl]
	ld d, $0
	ld hl, wd43d
rept 3
	add hl,de
endr
	ld a, [hli]
	ld b, a
	and " "
	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
.done
	scf
	ret
; 0x97bc0

Script_resetfuncs: ; 0x97bc0
; script command 0x93

	xor a
	ld [wd43c], a
	ld [ScriptRunning], a
	ld a, SCRIPT_OFF
	ld [ScriptMode], a
	ld hl, ScriptFlags
	res 0, [hl]
	call StopScript
	ret
; 0x97bd5

Script_halloffame: ; 0x97bd5
; script command 0xa1

	ld hl, GameTimerPause
	res 0, [hl]
	callba Mobile_HallOfFame
	callba Mobile_HallOfFame2
	callba HallOfFame
	ld hl, GameTimerPause
	set 0, [hl]
	jr DisplayCredits
; 0x97bf3

Script_credits: ; 0x97bf3
; script command 0xa2

	callba RedCredits
	; fallthrough

DisplayCredits:
	call Script_resetfuncs
	ld a, $3
	call LoadMapStatus
	call StopScript
	ret
; 0x97c051

Script_wait: ; 0x97c05
; script command 0xa8
; parameters:
;     unknown (SingleByteParam)

	push bc
	call GetScriptByte
.loop
	push af
	ld c, 6
	call DelayFrames
	pop af
	dec a
	jr nz, .loop ; 0x97c11 $f6
	pop bc
	ret
; 0x97c15

Script_unknown0xa9: ; 0x97c15
; script command 0xa9

	callba Function4cffe
	ld a, c
	ld [ScriptVar], a
	ret
; 0x97c20


Function97c20: ; 97c20 unreferenced
	ld a, [.byte]
	ld [ScriptVar], a
	ret

.byte
	db 0
; 97c28