ref: 23003bd772a2b025ea1972fade00309cc04003a7
parent: 01e10a11b27978c40e0f5fc3334dfd66c1a004a3
author: Bryan Bishop <[email protected]>
date: Wed Feb 27 18:31:12 EST 2013
disassemble scripting engine commands All commands are in scripting.asm, and there's also a small python script that was written to assist with some of the automation.
--- /dev/null
+++ b/extras/disassemble_map_scripts.py
@@ -1,0 +1,151 @@
+# -*- encoding: utf-8 -*-
+"""
+Dump out asm for scripting things in bank $25. This script will modify main.asm
+and insert all scripting commands.
+"""
+
+import crystal
+from gbz80disasm import output_bank_opcodes
+
+rom = crystal.load_rom()
+roml = [ord(x) for x in rom]
+
+script_command_table_address = 0x96cb1
+script_command_count = 170
+
+# a list of addresses for each script command
+command_pointers = [crystal.calculate_pointer_from_bytes_at(script_command_table_address + (id * 2), bank=0x25) for id in range(0, 170)]
+
+# a list of hex addresses for each script command in bank $25
+command_pointers_hex = ["$%.2x" % (x % 0x4000 + 0x4000) for x in command_pointers]
+
+commands = {}
+
+# force data into a more usable form
+for command in crystal.command_classes:
+ name = "Script_" + command.macro_name
+ id = command.id
+ params = {}
+
+ for (id2, param_type) in command.param_types.items():
+ param = {
+ "name": param_type["name"],
+ "type": param_type["class"].__name__,
+ }
+ params[id2] = param
+
+ if id <= 0xa9:
+ commands[id] = {
+ "name": name,
+ "params": params,
+ "address": command_pointers[id],
+ }
+
+avoid = [
+ 0x974b0,
+ 0x974be,
+ 0x9754b,
+ 0x97556,
+ 0x97562,
+ 0x9756e,
+ 0x97540,
+
+ 0x96f8e, # verbosegiveitem2
+]
+
+class DisassembledScriptCommand():
+ """
+ Just a temporary object to store information about a script command's asm.
+ This is used by some of the infrastructure in crystal.py to automatically
+ insert asm into main.asm, rather than having someone do it manually.
+ """
+ dependencies = None
+
+ def __init__(self, label=None, id=None, address=None, params=None):
+ self.id = id
+ self.label = crystal.Label(name=label, address=address, object=self)
+ self.address = address
+ self.params = params
+
+ max_byte_count = 0x4000
+
+ # Some of these scripts need to be truncated before insertion, because
+ # output_bank_opcodes doesn't know anything about stopping if some of
+ # the local labels are not resolved yet.
+
+ # Script_if_equal
+ if address == 0x97540:
+ max_byte_count = 86
+
+ # disassemble and laso get the last address
+ (asm, last_address, last_hl_address, last_a_address, used_3d97) = output_bank_opcodes(address, max_byte_count=max_byte_count, stop_at=command_pointers, include_last_address=False)
+
+ # remove indentation
+ asm = asm.replace("\n\t", "\n")
+ if asm[0] == "\t":
+ asm = asm[1:]
+
+ # remove the last two newlines
+ while asm[-1] == "\n":
+ asm = asm[:-1]
+
+ self.asm = asm
+ self.last_address = last_address
+
+ # make sure this gets dumped into main.asm
+ #if crystal.script_parse_table[self.address] == None and crystal.script_parse_table[self.last_address] == None:
+ crystal.script_parse_table[self.address : self.last_address] = self
+ #else:
+ # print ".. hm, something is already at " + hex(self.address) + " for " + self.label.name
+
+ def to_asm(self):
+ #output += self.label + ": ; " + hex(self.address) + "\n"
+ output = "; script command " + hex(self.id) + "\n"
+ if len(self.params) > 0:
+ output += "; parameters:\n"
+ for (id2, param) in self.params.items():
+ output += "; " + param["name"] + " (" + param["type"] + ")\n"
+ output += "\n"
+ output += self.asm
+ return output
+
+ def get_dependencies(*args, **kwargs):
+ return []
+
+# make instances of DisassembledScriptCommand
+for (id, command) in commands.items():
+ name = command["name"]
+ params = command["params"]
+ address = command["address"]
+
+ script_asm = DisassembledScriptCommand(label=name, id=id, address=address, params=params)
+ #print script_asm.to_asm()
+ #print crystal.to_asm(script_asm, use_asm_rules=True)
+
+class ScriptCommandTable():
+ address = script_command_table_address
+ last_address = script_command_table_address + (2 * 170)
+ dependencies = None
+
+ def __init__(self):
+ self.label = crystal.Label(name="ScriptCommandTable", address=self.address, object=self)
+
+ # make sure this gets dumped into main.asm
+ crystal.script_parse_table[self.address : self.last_address] = self
+
+ def get_dependencies(*args, **kwargs):
+ return []
+
+ def to_asm(self):
+ output = ""
+ for (id, command) in commands.items():
+ output += "dw " + command["name"] + "; " + hex(command["address"]) + "\n"
+ if output[-1] == "\n":
+ output = output[:-1]
+ return output
+script_command_table = ScriptCommandTable()
+#print crystal.to_asm(script_command_table, use_asm_rules=True)
+
+# automatic asm insertion
+asm = crystal.Asm()
+asm.insert_and_dump(limit=500)
--- a/main.asm
+++ b/main.asm
@@ -10305,8 +10305,11 @@
INCLUDE "maps/second_map_headers.asm"
-INCBIN "baserom.gbc",$966b0,$97f7e - $966b0
+INCBIN "baserom.gbc",$966b0,$96cb1 - $966b0
+INCLUDE "scripting.asm"
+
+INCBIN "baserom.gbc",$97c20,$35e
SECTION "bank26",DATA,BANK[$26]
--- /dev/null
+++ b/scripting.asm
@@ -1,0 +1,2930 @@
+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
+
+INCBIN "baserom.gbc",$96e05,$96e17 - $96e05
+
+Script_3callasm: ; 0x96e17
+; script command 0xe
+; parameters:
+; asm (AsmPointerParam)
+
+ call $26d4
+ ld b, a
+ call $26d4
+ ld l, a
+ call $26d4
+ ld h, a
+ ld a, b
+ rst $8
+ ret
+; 0x96e26
+
+Script_special: ; 0x96e26
+; script command 0xf
+; parameters:
+; predefined_script (MultiByteParam)
+
+ call $26d4
+ ld e, a
+ call $26d4
+ ld d, a
+ ld a, $3
+ ld hl, $401b
+ rst $8
+ ret
+; 0x96e35
+
+Script_2ptcallasm: ; 0x96e35
+; script command 0x10
+; parameters:
+; asm (PointerToAsmPointerParam)
+
+ call $26d4
+ ld l, a
+ call $26d4
+ 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, [$d439]
+ ld [$d44e], a
+ call $26d4
+ ld [$d44f], a
+ call $26d4
+ ld [$d450], a
+ ld b, $25
+ ld hl, $6e79
+ jp $759d
+; 0x96e5f
+
+Script_jumptext: ; 0x96e5f
+; script command 0x53
+; parameters:
+; text_pointer (RawTextPointerLabelParam)
+
+ ld a, [$d439]
+ ld [$d44e], a
+ call $26d4
+ ld [$d44f], a
+ call $26d4
+ ld [$d450], a
+ ld b, $25
+ ld hl, $6e7a
+ jp $759d
+; 0x96e79
+
+INCBIN "baserom.gbc",$96e79,$96e81 - $96e79
+
+Script_3jumptext: ; 0x96e81
+; script command 0x52
+; parameters:
+; text_pointer (PointerLabelBeforeBank)
+
+ call $26d4
+ ld [$d44e], a
+ call $26d4
+ ld [$d44f], a
+ call $26d4
+ ld [$d450], a
+ ld b, $25
+ ld hl, $6e7a
+ jp $759d
+; 0x96e9b
+
+Script_2writetext: ; 0x96e9b
+; script command 0x4c
+; parameters:
+; text_pointer (RawTextPointerLabelParam)
+
+ call $26d4
+ ld l, a
+ call $26d4
+ ld h, a
+ ld a, [$d439]
+ ld b, a
+ call $269a
+ ret
+; 0x96eab
+
+Script_3writetext: ; 0x96eab
+; script command 0x4b
+; parameters:
+; text_pointer (PointerLabelBeforeBank)
+
+ call $26d4
+ ld b, a
+ call $26d4
+ ld l, a
+ call $26d4
+ ld h, a
+ call $269a
+ ret
+; 0x96ebb
+
+Script_repeattext: ; 0x96ebb
+; script command 0x4d
+; parameters:
+; byte (SingleByteParam)
+; byte (SingleByteParam)
+
+ call $26d4
+ ld l, a
+ call $26d4
+ 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 $26d4
+ ld l, a
+ call $26d4
+ ld h, a
+ ld de, $1d35
+ ld a, [$d439]
+ 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 $26d4
+ 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, [$d439]
+ 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, [$d439]
+ 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 $26d4
+ 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 $26d4
+ cp $ff
+ jr nz, .asm_96f98 ; 0x96f93 $3
+ ld a, [$c2dd]
+.asm_96f98
+ ld [$d106], a
+ call $26d4
+ 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 $4
+ ld de, $009b
+ jr z, .asm_96ff7 ; 0x96ff2 $3
+ ld de, $0001
+.asm_96ff7
+ call StartSFX
+ call $3c55
+ ret
+; 0x96ffe
+
+INCBIN "baserom.gbc",$96ffe,$97065 - $96ffe
+
+Script_pokemart: ; 0x97065
+; script command 0x94
+; parameters:
+; dialog_id (SingleByteParam)
+; mart_id (MultiByteParam)
+
+ call $26d4
+ ld c, a
+ call $26d4
+ ld e, a
+ call $26d4
+ ld d, a
+ ld a, [$d439]
+ 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 $26d4
+ ld e, a
+ call $26d4
+ ld d, a
+ ld a, [$d439]
+ 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 $26d4
+ ld e, a
+ ld a, $3f
+ ld hl, $4ba8
+ rst $8
+ ret
+; 0x970a4
+
+Script_phonecall: ; 0x970a4
+; script command 0x98
+; parameters:
+; caller_name (RawTextPointerLabelParam)
+
+ call $26d4
+ ld e, a
+ call $26d4
+ ld d, a
+ ld a, [$d439]
+ 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 $26d4
+ 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 $26d4
+ ld a, $2
+.asm_970db
+ ld [$c2dd], a
+ ret
+; 0x970df
+
+Script_describedecoration: ; 0x970df
+; script command 0x9a
+; parameters:
+; byte (SingleByteParam)
+
+ call $26d4
+ ld b, a
+ ld a, $9
+ ld hl, $6f59
+ rst $8
+ ld h, d
+ ld l, e
+ jp $759d
+; 0x970ee
+
+Script_fruittree: ; 0x970ee
+; script command 0x9b
+; parameters:
+; tree_id (SingleByteParam)
+
+ call $26d4
+ ld [$d03e], a
+ ld b, $11
+ ld hl, $4000
+ jp $759d
+; 0x970fc
+
+Script_loadwilddata: ; 0x970fc
+; script command 0xa0
+; parameters:
+; map_group (MapGroupParam)
+; map_id (MapIdParam)
+
+ call $26d4
+ ld c, a
+ call $26d4
+ ld d, a
+ call $26d4
+ ld e, a
+ ld a, $3
+ ld hl, $4403
+ rst $8
+ ret
+; 0x9710f
+
+Script_trainertext: ; 0x9710f
+; script command 0x62
+; parameters:
+; which_text (SingleByteParam)
+
+ call $26d4
+ 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 $759d
+; 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 $26d4
+ 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 $26d4
+ ld [hli], a
+ call $26d4
+ ld [hli], a
+ ld hl, $d049
+ call $26d4
+ ld [hli], a
+ call $26d4
+ 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 $26d4
+ ld e, a
+ call $26d4
+ ld d, a
+ call StartMusic
+ ret
+; 0x971a2
+
+Script_musicfadeout: ; 0x971a2
+; script command 0x81
+; parameters:
+; music (MultiByteParam)
+; fadetime (SingleByteParam)
+
+ call $26d4
+ ld [$c2a9], a
+ call $26d4
+ ld [$c2aa], a
+ call $26d4
+ and $7f
+ ld [$c2a7], a
+ ret
+; 0x971b7
+
+Script_playsound: ; 0x971b7
+; script command 0x85
+; parameters:
+; sound_pointer (MultiByteParam)
+
+ call $26d4
+ ld e, a
+ call $26d4
+ ld d, a
+ call StartSFX
+ ret
+; 0x971c3
+
+Script_waitbutton: ; 0x971c3
+; script command 0x86
+
+ call $3c55
+ 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 $26d4
+ push af
+ call $26d4
+ pop af
+ and a
+ jr nz, .asm_971df ; 0x971da $3
+ ld a, [$c2dd]
+.asm_971df
+ call $37ce
+ ret
+; 0x971e3
+
+INCBIN "baserom.gbc",$971e3,$971ea - $971e3
+
+Script_setlasttalked: ; 0x971ea
+; script command 0x68
+; parameters:
+; person (SingleByteParam)
+
+ call $26d4
+ call $71e3
+ ld [$ffe0], a
+ ret
+; 0x971f3
+
+Script_applymovement: ; 0x971f3
+; script command 0x69
+; parameters:
+; person (SingleByteParam)
+; data (MovementPointerLabelParam)
+
+ call $26d4
+ call $71e3
+ 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 $26d4
+ ld l, a
+ call $26d4
+ ld h, a
+ ld a, [$d439]
+ ld b, a
+ call $26c7
+ ret c
+ ld a, $2
+ ld [$d437], a
+ call $6e11
+ ret
+; 0x97221
+
+INCBIN "baserom.gbc",$97221,$97228 - $97221
+
+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 $26d4
+ call $71e3
+ cp $fe
+ jr c, .asm_97254 ; 0x97250 $2
+ ld a, [$ffe0]
+.asm_97254
+ ld e, a
+ call $26d4
+ call $71e3
+ 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 $26d4
+ call $71e3
+ cp $fe
+ jr nz, .asm_97280 ; 0x9727c $2
+ ld a, [$ffe0]
+.asm_97280
+ ld d, a
+ call $26d4
+ add a
+ add a
+ ld e, a
+ call $728b
+ ret
+; 0x9728b
+
+INCBIN "baserom.gbc",$9728b,$972ce - $9728b
+
+Script_variablesprite: ; 0x972ce
+; script command 0x6d
+; parameters:
+; byte (SingleByteParam)
+; sprite (SingleByteParam)
+
+ call $26d4
+ ld e, a
+ ld d, $0
+ ld hl, $d82e
+ add hl, de
+ call $26d4
+ ld [hl], a
+ ret
+; 0x972dd
+
+Script_appear: ; 0x972dd
+; script command 0x6f
+; parameters:
+; person (SingleByteParam)
+
+ call $26d4
+ call $71e3
+ call $1956
+ ld a, [$ffaf]
+ ld b, $0
+ call $730b
+ ret
+; 0x972ee
+
+Script_disappear: ; 0x972ee
+; script command 0x6e
+; parameters:
+; person (SingleByteParam)
+
+ call $26d4
+ call $71e3
+ 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
+
+INCBIN "baserom.gbc",$9730b,$97325 - $9730b
+
+Script_follow: ; 0x97325
+; script command 0x70
+; parameters:
+; person2 (SingleByteParam)
+; person1 (SingleByteParam)
+
+ call $26d4
+ call $71e3
+ ld b, a
+ call $26d4
+ call $71e3
+ 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 $26d4
+ call $71e3
+ ld b, a
+ call $26d4
+ add $4
+ ld d, a
+ call $26d4
+ 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 $26d4
+ call $71e3
+ 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 $26d4
+ call $71e3
+ ld b, a
+ call $26d4
+ call $71e3
+ ld c, a
+ ld a, $2
+ ld hl, $439e
+ rst $8
+ ret
+; 0x97384
+
+Script_loademote: ; 0x97384
+; script command 0x74
+; parameters:
+; bubble (SingleByteParam)
+
+ call $26d4
+ 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 $26d4
+ ld [$c2dd], a
+ call $26d4
+ call $71e3
+ cp $fe
+ jr z, .asm_973a8 ; 0x973a4 $2
+ ld [$ffe0], a
+.asm_973a8
+ call $26d4
+ 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 $26d4
+ 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 $26d4
+ ld [$d22e], a
+ call $26d4
+ 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 $26d4
+ ld [$d22f], a
+ call $26d4
+ 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 $26d4
+ 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 $759d
+.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 $6e11
+ ret
+; 0x974a2
+
+Script_2call: ; 0x974a2
+; script command 0x0
+; parameters:
+; pointer (ScriptPointerLabelParam)
+
+ ld a, [$d439]
+ ld b, a
+ call $26d4
+ ld e, a
+ call $26d4
+ ld d, a
+ jr Unknown_974cb ; 0x974ae $1b
+; 0x974b0
+
+Script_3call: ; 0x974b0
+; script command 0x1
+; parameters:
+; pointer (ScriptPointerLabelBeforeBank)
+
+ call $26d4
+ ld b, a
+ call $26d4
+ ld e, a
+ call $26d4
+ ld d, a
+ jr Unknown_974cb ; 0x974bc $d
+; 0x974be
+
+Script_2ptcall: ; 0x974be
+; script command 0x2
+; parameters:
+; pointer (PointerLabelToScriptPointer)
+
+ call $26d4
+ ld l, a
+ call $26d4
+ ld h, a
+ ld b, [hl]
+ inc hl
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+
+Unknown_974cb: ; 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, [$d439]
+ ld [hli], a
+ ld a, [$d43a]
+ ld [hli], a
+ ld a, [$d43b]
+ ld [hl], a
+ ld a, b
+ ld [$d439], a
+ ld a, e
+ ld [$d43a], a
+ ld a, d
+ ld [$d43b], a
+ ret
+; 0x974f3
+
+INCBIN "baserom.gbc",$974f3,$974fe - $974f3
+
+Script_2jump: ; 0x974fe
+; script command 0x3
+; parameters:
+; pointer (ScriptPointerLabelParam)
+
+ call $26d4
+ ld l, a
+ call $26d4
+ ld h, a
+ ld a, [$d439]
+ ld b, a
+ jp $759d
+; 0x9750d
+
+Script_3jump: ; 0x9750d
+; script command 0x4
+; parameters:
+; pointer (ScriptPointerLabelBeforeBank)
+
+ call $26d4
+ ld b, a
+ call $26d4
+ ld l, a
+ call $26d4
+ ld h, a
+ jp $759d
+; 0x9751c
+
+Script_2ptjump: ; 0x9751c
+; script command 0x5
+; parameters:
+; pointer (PointerLabelToScriptPointer)
+
+ call $26d4
+ ld l, a
+ call $26d4
+ ld h, a
+ ld b, [hl]
+ inc hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp $759d
+; 0x9752c
+
+Script_iffalse: ; 0x9752c
+; script command 0x8
+; parameters:
+; pointer (ScriptPointerLabelParam)
+
+ ld a, [$c2dd]
+ and a
+ jp nz, $7596
+ jp $74fe
+; 0x97536
+
+Script_iftrue: ; 0x97536
+; script command 0x9
+; parameters:
+; pointer (ScriptPointerLabelParam)
+
+ ld a, [$c2dd]
+ and a
+ jp nz, $74fe
+ jp $7596
+; 0x97540
+
+Script_if_equal: ; 0x97540
+; script command 0x6
+; parameters:
+; byte (SingleByteParam)
+; pointer (ScriptPointerLabelParam)
+
+ call $26d4
+ 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 $26d4
+ 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 $26d4
+ 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 $26d4
+ 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 Unknown_9759d ; 0x97571 $2a
+; 0x97573
+
+Script_callstd: ; 0x97573
+; script command 0xd
+; parameters:
+; predefined_script (MultiByteParam)
+
+ call $757b
+ ld d, h
+ ld e, l
+ jp $74cb
+; 0x9757b
+
+INCBIN "baserom.gbc",$9757b,$97596 - $9757b
+
+Unknown_97596: ; 0x97596
+ call $26d4
+ call $26d4
+ ret
+; 0x9759d
+
+Unknown_9759d: ; 0x9759d
+ ld a, b
+ ld [$d439], a
+ ld a, l
+ ld [$d43a], a
+ ld a, h
+ ld [$d43b], a
+ ret
+; 0x975aa
+
+Script_priorityjump: ; 0x975aa
+; script command 0x8d
+; parameters:
+; pointer (ScriptPointerLabelParam)
+
+ ld a, [$d439]
+ ld [$d44e], a
+ call $26d4
+ ld [$d44f], a
+ call $26d4
+ 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 $26d4
+ ld b, a
+ call $26d4
+ 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 $26d4
+ ld b, a
+ call $26d4
+ ld c, a
+
+Unknown_975fd: ; 0x975fd
+ call $2147
+ ld a, d
+ or e
+ jr z, .asm_97608 ; 0x97602 $4
+ call $26d4
+ ld [de], a
+.asm_97608
+ ret
+; 0x97609
+
+Script_copybytetovar: ; 0x97609
+; script command 0x19
+; parameters:
+; address (RAMAddressParam)
+
+ call $26d4
+ ld l, a
+ call $26d4
+ ld h, a
+ ld a, [hl]
+ ld [$c2dd], a
+ ret
+; 0x97616
+
+Script_copyvartobyte: ; 0x97616
+; script command 0x1a
+; parameters:
+; address (RAMAddressParam)
+
+ call $26d4
+ ld l, a
+ call $26d4
+ ld h, a
+ ld a, [$c2dd]
+ ld [hl], a
+ ret
+; 0x97623
+
+Script_loadvar: ; 0x97623
+; script command 0x1b
+; parameters:
+; address (RAMAddressParam)
+; value (SingleByteParam)
+
+ call $26d4
+ ld l, a
+ call $26d4
+ ld h, a
+ call $26d4
+ ld [hl], a
+ ret
+; 0x97630
+
+Script_writebyte: ; 0x97630
+; script command 0x15
+; parameters:
+; value (SingleByteParam)
+
+ call $26d4
+ ld [$c2dd], a
+ ret
+; 0x97637
+
+Script_addvar: ; 0x97637
+; script command 0x16
+; parameters:
+; value (SingleByteParam)
+
+ call $26d4
+ ld hl, $c2dd
+ add [hl]
+ ld [hl], a
+ ret
+; 0x97640
+
+Script_random: ; 0x97640
+; script command 0x17
+; parameters:
+; input (SingleByteParam)
+
+ call $26d4
+ 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
+
+INCBIN "baserom.gbc",$97673,$9767d - $97673
+
+Script_checkcode: ; 0x9767d
+; script command 0x1c
+; parameters:
+; variable_id (SingleByteParam)
+
+ call $26d4
+ call $769e
+ ld a, [de]
+ ld [$c2dd], a
+ ret
+; 0x97688
+
+Script_writevarcode: ; 0x97688
+; script command 0x1d
+; parameters:
+; variable_id (SingleByteParam)
+
+ call $26d4
+ call $769e
+ ld a, [$c2dd]
+ ld [de], a
+ ret
+; 0x97693
+
+Script_writecode: ; 0x97693
+; script command 0x1e
+; parameters:
+; variable_id (SingleByteParam)
+; value (SingleByteParam)
+
+ call $26d4
+ call $769e
+ call $26d4
+ ld [de], a
+ ret
+; 0x9769e
+
+INCBIN "baserom.gbc",$9769e,$976a6 - $9769e
+
+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 $26d4
+ 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 $26d4
+ 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 $26d4
+ 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 $26d4
+ jr Unknown_976f4 ; 0x97704 $ee
+; 0x97706
+
+Script_trainertotext: ; 0x97706
+; script command 0x43
+; parameters:
+; trainer_id (TrainerGroupParam)
+; trainer_group (TrainerIdParam)
+; memory (SingleByteParam)
+
+ call $26d4
+ ld c, a
+ call $26d4
+ ld b, a
+ ld a, $e
+ ld hl, $594c
+ rst $8
+ jr Unknown_976c0 ; 0x97714 $aa
+; 0x97716
+
+Script_unknown0xa7: ; 0x97716
+; script command 0xa7
+
+ call $26d4
+ ld [$cf61], a
+
+Unknown_9771c: ; 0x9771c
+ call $26d4
+ 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
+
+INCBIN "baserom.gbc",$97771,$9777d - $97771
+
+Script_stringtotext: ; 0x9777d
+; script command 0x44
+; parameters:
+; text_pointer (EncodedTextLabelParam)
+; memory (SingleByteParam)
+
+ call $26d4
+ ld e, a
+ call $26d4
+ ld d, a
+ ld a, [$d439]
+ ld hl, $30d6
+ rst $8
+ ld de, $d086
+ jp $76c0
+; 0x97792
+
+Script_givepokeitem: ; 0x97792
+; script command 0x2f
+; parameters:
+; pointer (PointerParamToItemAndLetter)
+
+ call $26d4
+ ld l, a
+ call $26d4
+ ld h, a
+ ld a, [$d439]
+ call GetFarByte
+ ld b, a
+ push bc
+ inc hl
+ ld bc, $0020
+ ld de, $d002
+ ld a, [$d439]
+ call FarCopyBytes
+ pop bc
+ ld a, $11
+ ld hl, $46cc
+ rst $8
+ ret
+; 0x977b7
+
+Script_checkpokeitem: ; 0x977b7
+; script command 0x30
+; parameters:
+; pointer (PointerParamToItemAndLetter)
+
+ call $26d4
+ ld e, a
+ call $26d4
+ ld d, a
+ ld a, [$d439]
+ 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 $26d4
+ cp $ff
+ jr nz, .asm_977d4 ; 0x977cf $3
+ ld a, [$c2dd]
+.asm_977d4
+ ld [$d106], a
+ call $26d4
+ 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 $26d4
+ ld [$d106], a
+ call $26d4
+ 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 $26d4
+ 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
+
+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
+
+INCBIN "baserom.gbc",$97861,$97881 - $97861
+
+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 $26d4
+ ld [$ffc4], a
+ call $26d4
+ 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 $26d4
+ 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 $26d4
+ 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 $26d4
+ 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 $26d4
+ 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 $26d4
+ 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 $26d4
+ ld [$dc31], a
+ call $26d4
+ 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 $26d4
+ ld [$d108], a
+ call $26d4
+ ld [$d143], a
+ call $26d4
+ ld [$d106], a
+ call $26d4
+ and a
+ ld b, a
+ jr z, .asm_9795d ; 0x97949 $12
+ ld hl, $d43a
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ call $26d4
+ call $26d4
+ call $26d4
+ call $26d4
+.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 $26d4
+ ld [$d108], a
+ call $26d4
+ 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 $26d4
+ ld e, a
+ call $26d4
+ ld d, a
+ ld b, $1
+ call BitTable1Func
+ ret
+; 0x97996
+
+Script_clearbit1: ; 0x97996
+; script command 0x32
+; parameters:
+; bit_number (MultiByteParam)
+
+ call $26d4
+ ld e, a
+ call $26d4
+ ld d, a
+ ld b, $0
+ call BitTable1Func
+ ret
+; 0x979a4
+
+Script_checkbit1: ; 0x979a4
+; script command 0x31
+; parameters:
+; bit_number (MultiByteParam)
+
+ call $26d4
+ ld e, a
+ call $26d4
+ 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 $26d4
+ ld e, a
+ call $26d4
+ ld d, a
+ ld b, $1
+ call $79ee
+ ret
+; 0x979c9
+
+Script_clearbit2: ; 0x979c9
+; script command 0x35
+; parameters:
+; bit_number (MultiByteParam)
+
+ call $26d4
+ ld e, a
+ call $26d4
+ ld d, a
+ ld b, $0
+ call $79ee
+ ret
+; 0x979d7
+
+Script_checkbit2: ; 0x979d7
+; script command 0x34
+; parameters:
+; bit_number (MultiByteParam)
+
+ call $26d4
+ ld e, a
+ call $26d4
+ 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
+
+INCBIN "baserom.gbc",$979ee,$979f5 - $979ee
+
+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 $26d4
+ ld [$d453], a
+ call $26d4
+ 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 $26d4
+ 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 $26d4
+ and a
+ jr z, .asm_97a4a ; 0x97a21 $27
+ ld [$dcb5], a
+ call $26d4
+ ld [$dcb6], a
+ call $26d4
+ ld [$dcb8], a
+ call $26d4
+ ld [$dcb7], a
+ ld a, $ff
+ ld [$d001], a
+ ld a, $f1
+ ld [$ff9f], a
+ ld a, $1
+ call $261b
+ call $6e11
+ ret
+.asm_97a4a
+ call $26d4
+ call $26d4
+ call $26d4
+ ld a, $ff
+ ld [$d001], a
+ ld a, $fb
+ ld [$ff9f], a
+ ld a, $1
+ call $261b
+ call $6e11
+ ret
+; 0x97a65
+
+Script_warpmod: ; 0x97a65
+; script command 0x3a
+; parameters:
+; warp_id (SingleByteParam)
+; map_group (MapGroupParam)
+; map_id (MapIdParam)
+
+ call $26d4
+ ld [$dcac], a
+ call $26d4
+ ld [$dcad], a
+ call $26d4
+ ld [$dcae], a
+ ret
+; 0x97a78
+
+Script_blackoutmod: ; 0x97a78
+; script command 0x3b
+; parameters:
+; map_group (MapGroupParam)
+; map_id (MapIdParam)
+
+ call $26d4
+ ld [$dcb2], a
+ call $26d4
+ 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 $26d4
+ ld e, a
+ call $26d4
+ ld d, a
+ ld a, [$d439]
+ 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 $26d4
+ 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 $26d4
+ ld [$d1a0], a
+ call $26d4
+ ld [$d1a1], a
+ call $26d4
+ ld [$d1a2], a
+ call $24e4
+ call $2879
+ ret
+; 0x97acc
+
+Script_changeblock: ; 0x97acc
+; script command 0x7a
+; parameters:
+; x (SingleByteParam)
+; y (SingleByteParam)
+; block (SingleByteParam)
+
+ call $26d4
+ add $4
+ ld d, a
+ call $26d4
+ add $4
+ ld e, a
+ call $2a66
+ call $26d4
+ 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
+
+INCBIN "baserom.gbc",$97b01,$97b08 - $97b01
+
+Script_newloadmap: ; 0x97b08
+; script command 0x8a
+; parameters:
+; which_method (SingleByteParam)
+
+ call $26d4
+ ld [$ff9f], a
+ ld a, $1
+ call $261b
+ call $6e11
+ 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 $26d4
+ ret
+; 0x97b27
+
+Script_loadbytec1ce: ; 0x97b27
+; script command 0x4a
+; parameters:
+; byte (SingleByteParam)
+
+ call $26d4
+ 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 $26d4
+ push af
+ call $26d4
+ ld l, a
+ call $26d4
+ ld h, a
+ pop af
+ call StartAutoInput
+ ret
+; 0x97b47
+
+Script_pause: ; 0x97b47
+; script command 0x8b
+; parameters:
+; length (DecimalParam)
+
+ call $26d4
+ 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 $26d4
+ and a
+ jr z, .asm_97b65 ; 0x97b60 $3
+ ld [$d44d], a
+.asm_97b65
+ ld a, $3
+ ld [$d437], a
+ call $6e11
+ ret
+; 0x97b6e
+
+Script_ptpriorityjump: ; 0x97b6e
+; script command 0x8f
+; parameters:
+; pointer (ScriptPointerLabelParam)
+
+ call $6e11
+ jp $74fe
+; 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 $6e11
+ 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 $6e11
+ ret
+; 0x97b9a
+
+INCBIN "baserom.gbc",$97b9a,$97bc0 - $97b9a
+
+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 $6e11
+ ret
+; 0x97bd5
+
+Script_halloffame: ; 0x97bd5
+; script command 0xa1
+
+ ld hl, $cfbc
+ res 0, [hl]
+ ld a, $41
+ ld hl, $6078
+ rst $8
+ ld a, $41
+ ld hl, $5ef6
+ rst $8
+ ld a, $21
+ ld hl, $640e
+ rst $8
+ ld hl, $cfbc
+ set 0, [hl]
+ jr Unknown_97bf9 ; 0x97bf1 $6
+; 0x97bf3
+
+Script_credits: ; 0x97bf3
+; script command 0xa2
+
+ ld a, $21
+ ld hl, $6455
+ rst $8
+
+Unknown_97bf9: ; 0x97bf9
+ call $7bc0
+ ld a, $3
+ call $261b
+ call $6e11
+ ret
+; 0x97c05
+
+Script_unknown0xa8: ; 0x97c05
+; script command 0xa8
+; parameters:
+; unknown (SingleByteParam)
+
+ push bc
+ call $26d4
+.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