summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/data/map_scripts.asm34
-rw-r--r--src/engine/bank03.asm309
-rw-r--r--src/engine/bank04.asm4
-rw-r--r--src/macros/scripts.asm4
-rw-r--r--tools/script_extractor.py53
5 files changed, 346 insertions, 58 deletions
diff --git a/src/data/map_scripts.asm b/src/data/map_scripts.asm
index ae4e355..ec8c292 100644
--- a/src/data/map_scripts.asm
+++ b/src/data/map_scripts.asm
@@ -57,8 +57,8 @@ MapScripts: ; 1162a (4:562a)
dw $0000
dw $0000
dw $0000
- dw $6809
- dw $67f6
+ dw LoadClubEntrance
+ dw ClubEntranceAfterDuel
dw $0000
dw $0000
@@ -87,8 +87,8 @@ MapScripts: ; 1162a (4:562a)
dw $0000
dw $0000
dw $0000
- dw $6809
- dw $67f6
+ dw LoadClubEntrance
+ dw ClubEntranceAfterDuel
dw $0000
dw $0000
@@ -117,8 +117,8 @@ MapScripts: ; 1162a (4:562a)
dw $0000
dw $0000
dw $0000
- dw $6809
- dw $67f6
+ dw LoadClubEntrance
+ dw ClubEntranceAfterDuel
dw $0000
dw $0000
@@ -147,8 +147,8 @@ MapScripts: ; 1162a (4:562a)
dw $0000
dw $0000
dw $0000
- dw $6809
- dw $67f6
+ dw LoadClubEntrance
+ dw ClubEntranceAfterDuel
dw $0000
dw $0000
@@ -177,8 +177,8 @@ MapScripts: ; 1162a (4:562a)
dw $0000
dw $0000
dw $0000
- dw $6809
- dw $6525
+ dw LoadClubEntrance
+ dw GrassClubEntranceAfterDuel
dw $0000
dw $0000
@@ -188,7 +188,7 @@ MapScripts: ; 1162a (4:562a)
dw $7d4b
dw $0000
dw $0000
- dw $65c4
+ dw GrassClubLobbyAfterDuel
dw $0000
dw $0000
@@ -207,8 +207,8 @@ MapScripts: ; 1162a (4:562a)
dw $0000
dw $0000
dw $0000
- dw $6809
- dw $67f6
+ dw LoadClubEntrance
+ dw ClubEntranceAfterDuel
dw $0000
dw $0000
@@ -237,8 +237,8 @@ MapScripts: ; 1162a (4:562a)
dw $0000
dw $0000
dw $0000
- dw $6809
- dw $67f6
+ dw LoadClubEntrance
+ dw ClubEntranceAfterDuel
dw $0000
dw $0000
@@ -267,8 +267,8 @@ MapScripts: ; 1162a (4:562a)
dw $0000
dw $0000
dw $0000
- dw $6809
- dw $67f6
+ dw LoadClubEntrance
+ dw ClubEntranceAfterDuel
dw $0000
dw $0000
diff --git a/src/engine/bank03.asm b/src/engine/bank03.asm
index 1f1fbc5..6149c08 100644
--- a/src/engine/bank03.asm
+++ b/src/engine/bank03.asm
@@ -1631,7 +1631,7 @@ EventFlagMods: ; cb37 (3:4b37)
flag_def EVENT_FLAG_39, $0c, %00000001
flag_def EVENT_FLAG_3A, $0d, %10000000
flag_def EVENT_FLAG_3B, $0d, %01000000
- flag_def EVENT_FLAG_3C, $0d, %00100000
+ flag_def FLAG_BEAT_BRITTANY, $0d, %00100000
flag_def EVENT_FLAG_3D, $0d, %00010000
flag_def EVENT_FLAG_3E, $0d, %00001110
flag_def EVENT_FLAG_3F, $0e, %11100000
@@ -1852,8 +1852,10 @@ Func_ccdc: ; ccdc (3:4cdc)
Func_cce4: ; cce4 (3:4ce4)
ld a, $1
ld [wDefaultYesOrNo], a
+; fallthrough
-; Asks the player a question then jumps if they answer yes
+; Asks the player a question then jumps if they answer yes. Seem to be able to
+; take a text of 0000 to overwrite last with (yes no) prompt at the bottom
OWScript_AskQuestionJump: ; cce9 (3:4ce9)
ld l, c
ld h, b
@@ -2202,17 +2204,18 @@ Func_cf2d: ; cf2d (3:4f2d)
jr nc, asm_cf1f
jr asm_cf19
-Func_cf3f: ; cf3f (3:4f3f)
+; Gives the first arg as a card. If that's 0 pulls from wd697
+OWScript_GiveCard: ; cf3f (3:4f3f)
ld a, c
or a
- jr nz, .asm_cf46
+ jr nz, .giveCard
ld a, [wd697]
-.asm_cf46
+.giveCard
call AddCardToCollection
jp IncreaseOWScriptPointerBy2
-Func_cf4c: ; cf4c (3:4f4c)
+OWScript_TakeCard: ; cf4c (3:4f4c)
ld a, c
call RemoveCardFromCollection
jp IncreaseOWScriptPointerBy2
@@ -3590,7 +3593,12 @@ OWJump_TalkToAmyAgain: ; e356 (3:6356)
run_script OWScript_EndScriptCloseText
; 0xe369
- INCROM $e369, $e52c
+ INCROM $e369, $e525
+
+GrassClubEntranceAfterDuel: ; e525 (3:6525)
+ ld hl, GrassClubEntranceAfterDuelTable
+ call FindEndOfBattleScript
+ ret
FindEndOfBattleScript: ; e52c (3:652c)
ld c, $0
@@ -3623,12 +3631,30 @@ FindEndOfBattleScript: ; e52c (3:652c)
jp Func_c926
; 0xe553
- INCROM $e553, $e5c4
+GrassClubEntranceAfterDuelTable: ; e553 (3:6553)
+ db MICHAEL
+ db MICHAEL
+ dw $6597
+ dw $65ab
+
+ db RONALD2
+ db RONALD2
+ dw OWSequence_BeatFirstRonaldFight
+ dw OWSequence_LostToFirstRonaldFight
+
+ db RONALD3
+ db RONALD3
+ dw OWSequence_BeatSecondRonaldFight
+ dw OWSequence_LostToSecondRonaldFight
+ db $00
+
+ INCROM $e566, $e5c4
-GrassClubLobbyAfterDuel: ; e5c4 (3:65cb)
+GrassClubLobbyAfterDuel: ; e5c4 (3:65c4)
ld hl, .after_duel_table
call FindEndOfBattleScript
ret
+
.after_duel_table
db BRITTANY
db BRITTANY
@@ -3677,17 +3703,17 @@ OWSequence_BeatBrittany: ; e5ee (3:65ee)
tx Text06e6
tx Text06e7
run_script OWScript_MaxOutFlagValue
- db EVENT_FLAG_3C
+ db FLAG_BEAT_BRITTANY
run_script OWScript_JumpIfFlagNotLessThan
db EVENT_FLAG_35
db $02
- dw .ows_e617
+ dw .finishSequence
run_script OWScript_JumpIfFlagZero2
db EVENT_FLAG_3A
- dw .ows_e617
+ dw .finishSequence
run_script OWScript_JumpIfFlagZero2
db EVENT_FLAG_3B
- dw .ows_e617
+ dw .finishSequence
run_script OWScript_SetFlagValue
db EVENT_FLAG_35
db $01
@@ -3695,7 +3721,7 @@ OWSequence_BeatBrittany: ; e5ee (3:65ee)
db EVENT_FLAG_1E
run_script OWScript_PrintTextString
tx Text06e8
-.ows_e617
+.finishSequence
run_script OWScript_EndScriptCloseText
OWSequence_LostToBrittany: ; e618 (3:6618)
@@ -3704,7 +3730,260 @@ OWSequence_LostToBrittany: ; e618 (3:6618)
tx Text06e9
; 0xe61c
- INCROM $e61c, $f580
+ INCROM $e61c, $e7f6
+
+ClubEntranceAfterDuel: ; e7f6 (3:67f6)
+ ld hl, .after_duel_table
+ jp FindEndOfBattleScript
+
+.after_duel_table
+ db RONALD2
+ db RONALD2
+ dw OWSequence_BeatFirstRonaldFight
+ dw OWSequence_LostToFirstRonaldFight
+
+ db RONALD3
+ db RONALD3
+ dw OWSequence_BeatSecondRonaldFight
+ dw OWSequence_LostToSecondRonaldFight
+ db $00
+
+LoadClubEntrance: ; e809 (3:6809)
+ call TryFirstRonaldFight
+ call TrySecondRonaldFight
+ call TryFirstRonaldEncounter
+ ret
+
+TryFirstRonaldEncounter: ; e813 (3:6813)
+ ld a, RONALD1
+ ld [wd3ab], a
+ call Func_39c3
+ ret c
+ ld bc, OWSequence_FirstRonaldEncounter
+ jp Func_c926
+
+TryFirstRonaldFight: ; e822 (3:6822)
+ ld a, RONALD2
+ ld [$d3ab], a
+ call Func_39c3
+ ret c
+ call Func_ca69
+ ld c, h
+ or a
+ ret nz
+ ld bc, OWSequence_FirstRonaldFight
+ jp Func_c926
+
+TrySecondRonaldFight: ; e837 (3:6837)
+ ld a, RONALD3
+ ld [$d3ab], a
+ call Func_39c3
+ ret c
+ call Func_ca69
+ ld c, l
+ or a
+ ret nz
+ ld bc, OWSequenceSecondRonaldFight
+ jp Func_c926
+; 0xe84c
+
+ INCROM $e84c, $e862
+
+OWSequence_FirstRonaldEncounter: ; e862 (3:6862)
+ start_script
+ run_script OWScript_MaxOutFlagValue
+ db $4b
+ run_script Func_ce4a
+ db $94
+ db $68
+ run_script Func_d135
+ db $00
+ run_script OWScript_PrintTextString
+ tx Text0645
+ run_script OWScript_CloseTextBox
+ run_script OWScript_MovePlayer
+ db $00
+ db $01
+ run_script OWScript_MovePlayer
+ db $00
+ db $01
+ run_script OWScript_PrintTextString
+ tx Text0646
+ run_script Func_cce4
+ dw 0000
+ dw .ows_e882
+ run_script OWScript_PrintTextString
+ tx Text0647
+ run_script OWScript_Jump
+ dw .ows_e885
+
+.ows_e882
+ run_script OWScript_PrintTextString
+ tx Text0648
+.ows_e885
+ run_script OWScript_PrintTextString
+ tx Text0649
+ run_script OWScript_CloseTextBox
+ run_script Func_d055
+ db $03
+ run_script OWScript_MovePlayer
+ db $01
+ db $04
+ run_script Func_ce4a
+ db $94
+ db $68
+ run_script Func_cdcb
+ run_script Func_d41d
+ run_script OWScript_EndScriptCloseText
+; 0xe894
+
+ INCROM $e894, $e8c0
+
+OWSequence_FirstRonaldFight: ; e8c0 (3:68c0)
+ start_script
+ run_script Func_ce4a
+ db $05
+ db $69
+ run_script OWScript_DoFrames
+ db $3c
+ run_script Func_ce4a
+ db $0d
+ db $69
+ run_script OWScript_PrintTextString
+ tx Text064a
+ run_script Func_d0f2
+ db $08
+ db $02
+ dw $68d6
+ run_script Func_d055
+ db $03
+ run_script OWScript_MovePlayer
+ db $03
+ db $01
+ run_script Func_d055
+ db $02
+ run_script OWScript_MovePlayer
+ db $02
+ db $01
+ run_script OWScript_MovePlayer
+ db $02
+ db $01
+ run_script OWScript_PrintTextString
+ tx Text064b
+ run_script OWScript_SetFlagValue
+ db $4c
+ db $01
+ run_script OWScript_StartBattle
+ db PRIZES_6
+ db IM_RONALD_DECK_ID
+ db MUSIC_RONALD
+ run_script OWScript_EndScriptCloseText
+
+OWSequence_BeatFirstRonaldFight: ; e8e9 (3:68e9)
+ start_script
+ run_script OWScript_PrintTextString
+ tx Text064c
+ run_script OWScript_GiveCard
+ db JIGGLYPUFF1
+ run_script Func_cee2
+ db JIGGLYPUFF1
+ run_script OWScript_PrintTextString
+ tx Text064d
+ run_script OWScript_Jump
+ dw OWJump_FinishedFirstRonaldFight
+
+OWSequence_LostToFirstRonaldFight: ; e8f7 (3:68f7)
+ start_script
+ run_script OWScript_PrintTextString
+ tx Text064e
+
+OWJump_FinishedFirstRonaldFight
+ run_script OWScript_SetFlagValue
+ db EVENT_FLAG_4C
+ db $02
+ run_script OWScript_CloseTextBox
+ run_script Func_ce4a
+ db $0f
+ db $69
+ run_script Func_cdcb
+ run_script Func_d41d
+ run_script OWScript_EndScriptCloseText
+; 0xe905
+
+ INCROM $e905, $e91e
+
+OWSequenceSecondRonaldFight: ; e91e (3:691e)
+ start_script
+ run_script Func_ce4a
+ db $05
+ db $69
+ run_script OWScript_DoFrames
+ db $3c
+ run_script Func_ce4a
+ db $0d
+ db $69
+ run_script OWScript_PrintTextString
+ tx Text064f
+ run_script Func_d0f2
+ db $08
+ db $02
+ dw $6934
+ run_script Func_d055
+ db $03
+ run_script OWScript_MovePlayer
+ db $03
+ db $01
+ run_script Func_d055
+ db $02
+ run_script OWScript_MovePlayer
+ db $02
+ db $01
+ run_script OWScript_MovePlayer
+ db $02
+ db $01
+ run_script OWScript_PrintTextString
+ tx Text0650
+ run_script OWScript_SetFlagValue
+ db $4d
+ db $01
+ run_script OWScript_StartBattle
+ db PRIZES_6
+ db POWERFUL_RONALD_DECK_ID
+ db MUSIC_RONALD
+ run_script OWScript_EndScriptCloseText
+
+OWSequence_BeatSecondRonaldFight: ; e947 (3:6947)
+ start_script
+ run_script OWScript_PrintTextString
+ tx Text0651
+ run_script OWScript_GiveCard
+ db SUPER_ENERGY_RETRIEVAL
+ run_script Func_cee2
+ db SUPER_ENERGY_RETRIEVAL
+ run_script OWScript_PrintTextString
+ tx Text0652
+ run_script OWScript_Jump
+ dw OWJump_FinishedSecondRonaldFight
+
+OWSequence_LostToSecondRonaldFight: ; e955 (3:6955)
+ start_script
+ run_script OWScript_PrintTextString
+ tx Text0653
+
+OWJump_FinishedSecondRonaldFight ; e959 (3:6959)
+ run_script OWScript_SetFlagValue
+ db $4d
+ db $02
+ run_script OWScript_CloseTextBox
+ run_script Func_ce4a
+ db $0f
+ db $69
+ run_script Func_cdcb
+ run_script Func_d41d
+ run_script OWScript_EndScriptCloseText
+; 0xe963
+
+ INCROM $e963, $f580
Func_f580: ; f580 (3:7580)
call Func_ca69
diff --git a/src/engine/bank04.asm b/src/engine/bank04.asm
index 0c91398..e127f70 100644
--- a/src/engine/bank04.asm
+++ b/src/engine/bank04.asm
@@ -984,8 +984,8 @@ OverworldScriptTable: ; 1217b (4:617b)
dw OWScript_GiveBoosterPacks
dw Func_cf0c
dw Func_cf12
- dw Func_cf3f
- dw Func_cf4c
+ dw OWScript_GiveCard
+ dw OWScript_TakeCard
dw Func_cf53
dw Func_cf7b
dw Func_cf2d
diff --git a/src/macros/scripts.asm b/src/macros/scripts.asm
index 2bf40e4..1f36cba 100644
--- a/src/macros/scripts.asm
+++ b/src/macros/scripts.asm
@@ -29,8 +29,8 @@ ENDM
const OWScript_GiveBoosterPacks_index ; $0c
const Func_cf0c_index ; $0d
const Func_cf12_index ; $0e
- const Func_cf3f_index ; $0f
- const Func_cf4c_index ; $10
+ const OWScript_GiveCard_index ; $0f
+ const OWScript_TakeCard_index ; $10
const Func_cf53_index ; $11
const Func_cf7b_index ; $12
const Func_cf2d_index ; $13
diff --git a/tools/script_extractor.py b/tools/script_extractor.py
index ce8764c..e588bc1 100644
--- a/tools/script_extractor.py
+++ b/tools/script_extractor.py
@@ -1,9 +1,18 @@
#!/usr/bin/env python3
-
+###############################################################################
+###### Use: python3 tools/script_extractor --noauto --error location ######
+###### --noauto turns off automatic script parsing (enter to continue) ######
+###### --error stops execution if an error occurs ######
+###### location can be local to bank or global. This program assumes ######
+###### every script is in bank 3, which seems to be the case. ######
+###### ######
+###### Script list is a work in progress. The following arguments are ######
+###### accepted and accounted for. ######
+###### b - byte w - word j - jump (within script) t - text (tx) ######
+###### q - Used when the script's arguments have not been determined yet ######
+###############################################################################
import argparse
-# - (Possibly) add new type of word that looks for matches in the sym file
-# - add new one for event flag
def decodeLine(scriptList, game_data, loc, ignore_broken, branchList):
currLine = scriptList[game_data[loc]]
ret = "\trun_script " + currLine[0] + "\n"
@@ -34,27 +43,27 @@ def decodeLine(scriptList, game_data, loc, ignore_broken, branchList):
else:
print("UNACCEPTED CHARACTER: " + c)
return (loc, ret, quit)
-
-def main2(): # temp
- with open("tcg.gbc", "rb") as file:
- game_data = file.read()
- loc = 0xcb37
- start = 0x36
- end = 0x76 # inclusive
- for i in range(start,end+1):
- print("\tflag_def EVENT_FLAG_" + format(i,"02X") + ","+(" "*11)+"$"\
- + format(game_data[loc+2*i],"02x") + ", %" + format(game_data[loc+2*i + 1],"08b"))
- print("; " + format(loc + 2*(end+1),"02x"))
def main():
scriptList = createList()
+ branchList = []
+
+ parser = argparse.ArgumentParser(description='Pokemon TCG Script Extractor')
+ parser.add_argument('--noauto', action='store_true', help='turns off automatic script parsing')
+ parser.add_argument('--error', action='store_true', help='stops execution if an error occurs')
+ parser.add_argument('location', help='location to extract from. May be local to bank or global.')
+ args = parser.parse_args()
+ loc = int(args.location,0)
+ if loc > 0x7fff:
+ # Must be a global location
+ loc -= 0x8000
+ branchList.append(loc)
with open("tcg.gbc", "rb") as file:
game_data = file.read()
auto = True
end = False
ignore_broken = True
- branchList = [0x65ee] # all are bank 3 offsets
while (len(branchList) > 0):
loc = branchList.pop(0) + 0x8000
printScript(game_data, loc, auto, end, ignore_broken, scriptList, branchList)
@@ -94,14 +103,14 @@ def createList(): # this is a func just so all this can go at the bottom
("OWScript_PrintVariableText", "tt", False),
("Func_cda8", "bbbb", False),
("OWScript_PrintTextCloseBox", "t", True),
- ("Func_cdcb", "bb", False),
+ ("Func_cdcb", "", False),
("Func_ce26", "bb", False),
("OWScript_CloseTextBox", "", False),
("OWScript_GiveBoosterPacks", "bbb", False),
("Func_cf0c", "bbb", False), # more complex behavior too (jumping)
("Func_cf12", "bbb", False),
- ("Func_cf3f", "b", False),
- ("Func_cf4c", "b", False),
+ ("OWScript_GiveCard", "b", False),
+ ("OWScript_TakeCard", "b", False),
("Func_cf53", "w", False), # more complex behavior too (jumping)
("Func_cf7b", "", False),
("Func_cf2d", "bbbb", False), # more complex behavior too (jumping + ??)
@@ -112,7 +121,7 @@ def createList(): # this is a func just so all this can go at the bottom
("Func_d025", "w", False), # possibly only jumps, still needs args
("Func_d032", "w", False), # see above
("Func_d03f", "", False),
- ("OWScript_Jump", "w", True), # jumps to d
+ ("OWScript_Jump", "j", True), # jumps to d
("Func_d04f", "", False),
("Func_d055", "b", False),
("OWScript_MovePlayer", "bb", False),
@@ -128,7 +137,7 @@ def createList(): # this is a func just so all this can go at the bottom
("Func_ceba", "q", False),
("Func_d103", "q", False),
("Func_d125", "b", False),
- ("Func_d135", "q", False),
+ ("Func_d135", "b", False),
("Func_d16b", "q", False),
("Func_cd4f", "q", False),
("Func_cd94", "q", False),
@@ -161,10 +170,10 @@ def createList(): # this is a func just so all this can go at the bottom
("Func_d416", "q", False),
("Func_d423", "q", False),
("Func_d429", "q", False),
- ("Func_d41d", "q", False),
+ ("Func_d41d", "", False),
("Func_d42f", "q", False),
("Func_d435", "b", False),
- ("Func_cce4", "q", False),
+ ("Func_cce4", "tj", False),
("Func_d2f6", "q", False),
("Func_d317", "q", False),
("Func_d43d", "q", False),