Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
9f75313
add -bmbs flag: adds statues to shuffle pool
nolanlocke Jan 17, 2022
a0518cd
add context for statue ids being in EnemyPacks
nolanlocke Jan 17, 2022
c46f27e
set default true ffor backwards compatibility
nolanlocke Jan 19, 2022
937a9fb
remove default as no way to turn it off
nolanlocke Jan 19, 2022
35fa1de
Merge branch 'main' into feature/mix-bosses-statues
kielbasiago Feb 27, 2022
31a42fd
wip refactor shuffle to "boss location" flags
kielbasiago Apr 9, 2022
a833caa
bug fixes
kielbasiago Apr 16, 2022
aaeba39
add boilerplate for adding future checks
kielbasiago Apr 16, 2022
d91cea4
chore: no longer appnd dragon locations to flags automatically
kielbasiago Apr 16, 2022
953a3be
chore: add EOL
kielbasiago Apr 16, 2022
81bd325
chore: remove unused ids from EnemyPacks
kielbasiago Apr 16, 2022
f4f363a
remove dbugpy code
kielbasiago Apr 16, 2022
63809e4
Clean up enemy_packs.randomize_event_bosses
kielbasiago Apr 17, 2022
134012e
fix when original bosses with mixed dragon/statues
kielbasiago Apr 17, 2022
cd4e48c
now exclude statues when not mix from normal encs
kielbasiago Apr 17, 2022
89a6157
add KT bosses to condition checks (#2)
kielbasiago May 27, 2022
297efda
Add "kt gauntlet" in replace of skip (temp)
kielbasiago May 29, 2022
9782abe
invoke location fight instead of actual fight
kielbasiago May 29, 2022
ad9674e
Disable boss music during fights
kielbasiago May 30, 2022
97cd93f
disable victory music for all but last gauntlet
kielbasiago May 30, 2022
29ffc32
re-order fights
kielbasiago May 30, 2022
45ff4d8
reorder doom/polty
kielbasiago May 30, 2022
6c57689
make music flow better
kielbasiago May 30, 2022
535e10c
Finish adding cutscenes 1/2/5
kielbasiago May 31, 2022
f2d2a76
organizing cutscene src
kielbasiago May 31, 2022
698b531
General code cleanup, add sfx
kielbasiago Jun 1, 2022
62649f0
lookin clean
kielbasiago Jun 1, 2022
04d6d85
Add some missing animations
kielbasiago Jun 1, 2022
42fceaf
Add sonts constant, fix polty camera
kielbasiago Jun 1, 2022
a037154
polty cutscene cleanup
kielbasiago Jun 1, 2022
3e04bdd
add pause during guardian (lazy)
kielbasiago Jun 1, 2022
e5113da
Move gauntlet code to F0
kielbasiago Jun 2, 2022
bcaaadc
remove animations a12-a15
kielbasiago Jun 2, 2022
4e9871b
Move gauntlet to F0, big cleanup.
kielbasiago Jun 3, 2022
4079b04
final for now
kielbasiago Jun 5, 2022
7aa43e3
add "add_save_point" method to maps.py
kielbasiago Oct 18, 2022
b3243be
add save poitns to end level
kielbasiago Oct 18, 2022
ecef00e
add kt gauntlet result, dialog rework
kielbasiago Oct 20, 2022
65dc845
fix dialog/kt event
kielbasiago Oct 20, 2022
d291ec4
remove weird custom functionality (Save points, deleting exits)
kielbasiago Oct 20, 2022
977cba2
fix result type
kielbasiago Oct 21, 2022
1c80db4
attempt to add field command to loot chest
kielbasiago Oct 21, 2022
ac1da8a
set more clear example of bug
kielbasiago Oct 21, 2022
6ce2f94
fix CollectChest
kielbasiago Oct 21, 2022
74cf9bf
add all attempts/flavors
kielbasiago Oct 22, 2022
6a37c72
cleanup
kielbasiago Oct 22, 2022
e01ca33
bye exliri
kielbasiago Oct 22, 2022
15ee206
undo debug
kielbasiago Oct 22, 2022
acfe3b6
cleanup
kielbasiago Oct 22, 2022
dee469f
move npc to airship, move all code to custom.py
kielbasiago Oct 22, 2022
39484d0
undo narshe_wob changes
kielbasiago Oct 22, 2022
5a3825c
more undoing
kielbasiago Oct 22, 2022
9a16253
only show airship npcs in debug mode
kielbasiago Oct 22, 2022
b9ade9a
It is working! THANK YOU LENOPHIS!
kielbasiago Oct 22, 2022
5cadbfe
Update event/airship.py
kielbasiago Oct 22, 2022
b7333e6
Merge branch 'chest-loot' into gauntlet
kielbasiago Oct 22, 2022
1c34d0c
add complete kt gauntlet quest
kielbasiago Oct 22, 2022
a5b3e1e
add redundant teasure wrapup
kielbasiago Oct 24, 2022
c912272
feature: Add BranchIfTrasureCollected
kielbasiago Oct 30, 2022
ff7d436
comment out disabling victory/battle music for KT
kielbasiago Nov 2, 2022
b43de2d
fix debug chest collect function
kielbasiago Nov 3, 2022
216cda4
Add back guardian/inferno fade, but only when gauntlet not in progress
kielbasiago Oct 27, 2022
e53949b
cleanup events. Only issue is guardian as a slight fade in
kielbasiago Nov 5, 2022
c30c6e7
Fix gauntlet music and objective interactions
kielbasiago Nov 7, 2022
c33c918
Fix sprite layer on party 3 after they're done with stairs
kielbasiago Nov 7, 2022
0b9fcf8
Feature: change gauntlet character inits for position bug
kielbasiago Nov 10, 2022
78a31ae
fix water
kielbasiago Dec 3, 2022
e4a6bac
Cleanup map_property to restart water
kielbasiago Dec 3, 2022
d20d137
actually fix map_property
kielbasiago Dec 4, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 42 additions & 5 deletions args/bosses.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
from data.bosses import BossLocations


DEFAULT_DRAGON_PROTOCOL = BossLocations.SHUFFLE
DEFAULT_STATUE_PROTOCOL = BossLocations.MIX
def name():
return "Bosses"

Expand All @@ -9,8 +14,17 @@ def parse(parser):
help = "Boss battles shuffled")
bosses_battles.add_argument("-bbr", "--boss-battles-random", action = "store_true",
help = "Boss battles randomized")
bosses.add_argument("-bmbd", "--mix-bosses-dragons", action = "store_true",

dragons = bosses.add_mutually_exclusive_group()
dragons.add_argument("-drloc", "--dragon-boss-location", default = DEFAULT_DRAGON_PROTOCOL, type = str.lower, choices = BossLocations.ALL,
help = "Decides which locations the eight dragon encounters can be fought")
dragons.add_argument("-bmbd", "--mix-bosses-dragons", action = "store_true",
help = "Shuffle/randomize bosses and dragons together")

statues = bosses.add_mutually_exclusive_group()
statues.add_argument("-stloc", "--statue-boss-location", default = DEFAULT_STATUE_PROTOCOL, type = str.lower, choices = BossLocations.ALL,
help = "Decides which locations the three statue encounters can be fought")

bosses.add_argument("-srp3", "--shuffle-random-phunbaba3", action = "store_true",
help = "Apply Shuffle/Random to Phunbaba 3 (otherwise he will only appear in Mobliz WOR)")
bosses.add_argument("-bnds", "--boss-normalize-distort-stats", action = "store_true",
Expand All @@ -21,7 +35,15 @@ def parse(parser):
help = "Undead status removed from bosses")

def process(args):
pass
if args.mix_bosses_dragons:
args.dragon_boss_location = BossLocations.MIX
args.mix_bosses_dragons = None
# if neither shuffling or randomizing bosses, and we try to mix the dragons/statues, simply shuffle them instead
vanilla_locations = not (args.boss_battles_shuffle or args.boss_battles_random)
if vanilla_locations and args.dragon_boss_location == BossLocations.MIX:
args.dragon_boss_location = BossLocations.SHUFFLE
if vanilla_locations and args.statue_boss_location == BossLocations.MIX:
args.statue_boss_location = BossLocations.SHUFFLE

def flags(args):
flags = ""
Expand All @@ -31,8 +53,14 @@ def flags(args):
elif args.boss_battles_random:
flags += " -bbr"

if args.mix_bosses_dragons:
flags += " -bmbd"
if args.dragon_boss_location:
flags += f" -drloc {args.dragon_boss_location}"
elif args.mix_bosses_dragons:
flags += f" -drloc {BossLocations.MIX}"

if args.statue_boss_location:
flags += f" -stloc {args.statue_boss_location}"

if args.shuffle_random_phunbaba3:
flags += " -srp3"
if args.boss_normalize_distort_stats:
Expand All @@ -51,9 +79,18 @@ def options(args):
elif args.boss_battles_random:
boss_battles = "Random"

dragon_battles = DEFAULT_DRAGON_PROTOCOL
if args.dragon_boss_location:
dragon_battles = args.dragon_boss_location.capitalize()

statue_battles = DEFAULT_DRAGON_PROTOCOL
if args.statue_boss_location:
statue_battles = args.statue_boss_location.capitalize()

return [
("Boss Battles", boss_battles),
("Mix Bosses & Dragons", args.mix_bosses_dragons),
("Dragons", dragon_battles),
("Statues", statue_battles),
("Shuffle/Random Phunbaba 3", args.shuffle_random_phunbaba3),
("Normalize & Distort Stats", args.boss_normalize_distort_stats),
("Boss Experience", args.boss_experience),
Expand Down
12 changes: 12 additions & 0 deletions constants/maps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@


id_name = {
0x123 : "Guardian Room", # 291
0x14e : "Poltergeist Room", # 334
0x162 : "Goddess Room", # 354
0x163 : "Doom Room", # 355
0x19a : "Inferno Room", # 410
0x19b : "KT Final Switch Room" # 411
}

name_id = {v: k for k, v in id_name.items()}
9 changes: 9 additions & 0 deletions constants/objectives/condition_bits.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,14 @@
NameBit("Zozo Tower", event_bit.GOT_ZOZO_REWARD),
]

check_bit += [ # Index
NameBit("Kefka's Tower Ambush", event_bit.DEFEATED_INFERNO), # 59
NameBit("Kefka's Tower Guardian", event_bit.DEFEATED_GUARDIAN), # 60
NameBit("KT Left Triad Statue", event_bit.DEFEATED_DOOM), # 61
NameBit("KT Mid Triad Statue", event_bit.DEFEATED_POLTERGEIST), # 62
NameBit("KT Right Triad Statue", event_bit.DEFEATED_GODDESS), # 63
]

quest_bit = [
NameBit("Defeat Sealed Cave Ninja", event_bit.DEFEATED_NINJA_CAVE_TO_SEALED_GATE),
NameBit("Help Injured Lad", event_bit.HELPED_INJURED_LAD),
Expand All @@ -79,6 +87,7 @@
NameBit("Suplex A Train", event_bit.SUPLEXED_TRAIN),
NameBit("Win An Auction", event_bit.WON_AN_AUCTION),
NameBit("Win A Coliseum Match", event_bit.WON_A_COLISEUM_MATCH),
NameBit("Complete the KT Gauntlet", event_bit.COMPLETED_KT_GAUNTLET)
]

boss_bit = []
Expand Down
3 changes: 3 additions & 0 deletions constants/objectives/results.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@
],
}

category_types["Kefka's Tower"] += [ResultType(90, "Unlock KT Gauntlet", "Unlock KT Gauntlet", None)]


categories = list(category_types.keys())

id_type = {}
Expand Down
5 changes: 5 additions & 0 deletions constants/songs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
id_name = {
0x33 : "FierceBattle", # "Battle to the Death" - Atma/Statue battle theme
}

name_id = {v: k for k, v in id_name.items()}
11 changes: 11 additions & 0 deletions constants/sound_effects.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@


id_name = {
0x9a : "Ground Breaking", # 154
0xa6 : "Chest/Switch", # 166
0xa9 : "Umaro Body Slam", # 169
0xb5 : "Landing On Floor", # 181
0xba : "Falling", # 186
}

name_id = {v: k for k, v in id_name.items()}
26 changes: 26 additions & 0 deletions data/bosses.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,25 @@
396 : "Guardian", # defeatable guardian in kefka's tower
401 : "MagiMaster",
}

# These ids are repeated in normal_pack_name as well
# This is intentional as they are used to iterate over ALL bosses for things like objective conditions
statue_pack_name = {
354 : "Doom",
355 : "Goddess",
356 : "Poltrgeist",
}
statue_formation_name = {
468 : "Doom",
469 : "Goddess",
470 : "Poltrgeist",
}
statue_enemy_name = {
295 : "Doom",
296 : "Goddess",
297 : "Poltrgeist",
}

normal_formation_name = {
79 : "Rizopas",
354 : "MagiMaster",
Expand Down Expand Up @@ -255,3 +274,10 @@
enemy_name.update(removed_enemy_name)

name_enemy = {v: k for k, v in enemy_name.items()}

class BossLocations:
MIX = "mix"
ORIGINAL = "original"
SHUFFLE = "shuffle"

ALL = [MIX, ORIGINAL, SHUFFLE]
10 changes: 8 additions & 2 deletions data/dialogs/dialogs.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,10 @@ def read_multi_line_battle_dialogs(self):
self.multi_line_battle_dialogs.append(dialog)

def free(self):
import data.dialogs.free as free
from data.dialogs.free import multi_line_battle_dialogs

self.free_multi_line_battle_dialogs = []
for dialog_id in free.multi_line_battle_dialogs:
for dialog_id in multi_line_battle_dialogs:
self.multi_line_battle_dialogs[dialog_id].text = ""
self.free_multi_line_battle_dialogs.append(dialog_id)

Expand Down Expand Up @@ -179,6 +179,12 @@ def objectives_mod(self):
mlid = self.allocate_multi_line_battle(line1 + "<line>" + line2 + "<wait for key><end>")
self.multi_line_battle_objectives.append(mlid)

def create_dialog(self, text):
from data.dialogs.free import dialogs
id = dialogs.pop()
self.set_text(id, text)
return id

def mod(self):
self.move_battle_messages()
self.objectives_mod()
Expand Down
6 changes: 6 additions & 0 deletions data/dialogs/free.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@

dialogs = []
dialogs += range(515, 528) # kefka assaulting thamasa
dialogs += range(550, 598) # sabin scenario, cyan kefka doma event
dialogs +=range(1767, 1878) # BANQUET

multi_line_battle_dialogs = [
0, # WEDGE:<line>Hey! What's the matter?<wait for key><line>Do you know something we<line>don't……? ...
1, # GIRL:<line>……<wait for key><end>
Expand Down
6 changes: 4 additions & 2 deletions data/enemy_formations.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ class EnemyFormations():
ENEMIES_END = 0xf83bf
ENEMIES_SIZE = 15

PHUNBABA3 = 422
DOOM_GAZE = 463
PHUNBABA3 = bosses.name_formation["Phunbaba 3"]
DOOM_GAZE = bosses.name_formation["Doom Gaze"]
ALL_STATUES = list(bosses.statue_formation_name)
ALL_DRAGONS = list(bosses.dragon_formation_name)
PRESENTER = 433
COLISEUM = 575

Expand Down
Loading