Skip to content

Commit 68240f4

Browse files
asilverthornkielbasiagofrajennolanlockeff6wc
committed
Dev updates (#67)
* Update coliseum random to handle percentage * Remove shuffle as -crsr 0 is the same as -cos * Remove deprecated -cor and -crr flags * readd cor and crr flags * Remove removed shuffle options from options * Added as misc. options to have NPC dialog replaced with general game tips. * Adding Auto Life 3 and Auto Dog Block objective results (#36) * Stray Flash mod (#33) * Adding Osteoclave's bugfix (#29) * Adding expensive rods and super balls flags (#27) * Bugfix: Fix weapon special abilities with Capture and Multi-steals only giving 1 item (#25) * Porting Assassin's Capture bugfix * Adding Bropedio's Multi-Steal fix * Adding multi-steal dialog fix * updating flag doc * Small reduction in C1 usage * Fixing bug with -fc that causes escape from battle (and possibly other actions) to crash * Feature: Flashes: Moving flashes to Graphics; Slowing scrolling background during Air Force fight and Baren falls; add minimap high contrast option (#23) * Removing scrolling background during Air Force fight * switching to slowing the bg scroll. Also adding baren falls * Removing baren falls background vibration * Fixing typo in baren falls background palette change for frm * Changing events flashes from no-ops to flash-none to avoid any CPU cycle changes * Moving Remove Flashes flags from misc to graphics, so that they don't affect the seed * Adding -wmhc option to improve visibility of minimap * Making location indicator for wmhc stand out even more * Adding more event flashes to frw * Changing wmhc based on color feedback * Replacing boss death flash removal with flash of monster sprite * switching to Osteoclave's pixel remaster inspired minimap * Feature: Adding flags to improve Sketch/Control (#19) * Adding flag to make Sketch/Control 100% effective against valid targets * fixing minor typo * Refactoring data/sketch_control.py into separate files. Adding better abilities for Sketch & Control. Making Sketch use caster's stats. * Minor change to option logging * Modification to sketch custom command; split into multiple flags; removing control custom commands * Expanding sia to also include control. Separating Controls from Coliseum monster table. * Minor arg desc change * Control uses controller's stats, fix Control bug with Dance moves * Removing ultima from sketch magimaster * Feature: Kielbasiago's Adding flag for giving starting Espers (#18) * add --starting-espers-random flag - this will give you between the selected range of espers from the very start * fix err * Add better esper log * chore: update flag from sespr => stesp * chore: remove commented code * Remove "Random" from "Starting Espers" menu * Update starting_espers MAX to account for logic issues * ws, help updated Co-authored-by: Kiel <95580337+kielbasiago@users.noreply.github.com> * Feature: Kielbasiago's Update ability to shuffle/mix both dragons and statues (#17) * add -bmbs flag: adds statues to shuffle pool * add context for statue ids being in EnemyPacks * set default true ffor backwards compatibility * remove default as no way to turn it off * wip refactor shuffle to "boss location" flags * bug fixes * add boilerplate for adding future checks * chore: no longer appnd dragon locations to flags automatically * chore: add EOL * chore: remove unused ids from EnemyPacks * remove dbugpy code * Clean up enemy_packs.randomize_event_bosses * fix when original bosses with mixed dragon/statues * now exclude statues when not mix from normal encs * add KT bosses to condition checks (#2) Preview: https://youtu.be/wgBJHPq3p6o (Just me clearing KT while playing at 200-400%) Added the following KT boss locations as objective conditions: - Kefka's Tower Ambush - Inferno - Bit 59 - Kefka's Tower Guardian - Guardian - Bit 60 - KT Left Triad Statue - Doom - Bit 61 - KT Mid Triad Statue - Poltergeist - Bit 62 - KT Right Triad Statue - Goddess - Bit 63 Used the following flags to test the five encounters: `-oa 40.1.1.11.59 -ob 40.1.1.11.60 -oc 40.1.1.11.61 -od 40.1.1.11.62 -oe 40.1.1.11.63` * fix initialization of exclude_bosses Co-authored-by: Nolan <10077353+nolanlocke@users.noreply.github.com> Co-authored-by: Kiel <95580337+kielbasiago@users.noreply.github.com> * Feature: Magic MP Randomization (#15) * Adding Ultima 255 MP flag, Adding Franklin's Magic MP Randomization, Fixing display bugs with 3 digit MP, letting Lore MP randomization go to 255 MP * Allowing random esper MP cost to go up to 255 * Switching max to 254 to avoid boundary conditions * making 254 max to avoid issues with MP checks * Moving from c3 to f0 * Adding --starting-level flag (#14) * QoL: Adding Rage Move descriptions to rage menu (#13) * Initial commit of Rage ability names in menu * Adding logic to display Special rage names * Adding logic for Special (0xef) attacks * Rewrite of Rage Description to use custom string table that includes more move details * More details in rage desc; handling special cases * Simplifying rage strings * Feature: Add Remove learnable spells flag + Submenus (#12) * All original remove learnable spells changes * Making Life 3 learnable in permadeath seeds * Fixing bug where Natural Magic users can learn Fire even if excluded * correcting natural magic learning with excluded commands * Fixing seed gen error when there's not enough spells available for randomization * Fixing possibility for long-branches with many submenus * Removing excluded non-S tier items from tiered or scaled chests (#11) * Ensuring that Gau can use Magic in FT (#10) * Feature: Adding random-encounters-chupon flag (#8) * Adding random-encounters-chupon flag * Making Chupon 64 sneeze always target entire party * Feature: Kielbasiago's add --start-junk flag (#7) * add --start-junk flag * Add relics to starting junk Co-authored-by: Kiel <95580337+kielbasiago@users.noreply.github.com> * QoL: Setting default config options to most commonly used values (#6) * adding comments * setting default back to Reset and adding Config 2 relocation for compatibility with DoctorDT tool * Making Party warp to Arvis house following K@N (#4) * Feature: Adding -llr flag to randomize L.x lore levels (#3) * Adding -llr flag to randomize L.x lore levels * Updating lore battle dialogs * QoL: Adding clarification of quantity of objective conditions required (#1) * Adding clarification of quantity of objective conditions required * responding to feedback on objective menu mods * Update version.py v1.1.0 -> v.1.2.0 * Update flags.py Updating to match dev branch * Update spells.py Updated to match dev branch * Feature: Making Top 4 Magitek commands an objective result (#21) * Making Terra's Magitek commands an objective result * Minor changes to address PR comments Co-authored-by: Will Jones <wrjones104@users.noreply.github.com> * Feature: Adding warp-all flag for 0 cost starting Warp (#9) * Adding warp-all flag for 0 cost starting Warp. Refactor ScanAll class to InitialSpells * Adding missed flag to log Co-authored-by: Will Jones <wrjones104@users.noreply.github.com> * Adding -hf flag to hide flags for fun mystery seeds (#2) Co-authored-by: Will Jones <wrjones104@users.noreply.github.com> * Feature: Add movement options, b-dash, sprint shoe options (#16) Co-authored-by: Kiel <95580337+kielbasiago@users.noreply.github.com> * Showing MP in menus if character knows Lore * feature: Add filtering of low value items from shops and chests. flag: -nti --no-trash-items * chore: Add gold and iron armor to trash * fix: when removing trash if item has no sell value asign chest empty. * feat: split trash filtering on shops and chests via -nts and -ntc * fix: place filter trash args to relevant parsers * fix: add new flags to options * feature: trash item price is based on vendor sell price flag * Removing clear of wound bit for coliseum in permadeath * Fixing bug with b-dash in which player can catch up to Vargas, soft-locking the game * Loot (-loot) and Chests-All-MIAB (-cam) First commit, added flags for randomize steals and drops (-loot) and make all chests monster-in-a-boxes (-cam). Note that there's currently no selection on what can be in boxes, you will get bosses. * No Random Encounters (-nre) self-explanatory. All encounter rates = 0. For use with Chests All MiaB and Loot. * bufgix - now no random encounters in dungeons * Add Moogle Curse The Moogle Curse (reskin of Moogle Charm) draws random encounters on the world map, when equipped. It does not work in dungeons. This is a workaround so you can still complete Gau and Gogo checks. The encounter rate is very low to avoid abuse. * Exclude buggy encounters Removes empty and bugged event battle groups from the MIAB encounter pool. (Doesn't currently overwrite them.) * Make each MiaB unique; take over unused event_battle_groups - Changed pad_enemy_packs to only put a single random formation in each one. This would make races fairer. - Expanded the event_battle_groups rewrite to claim those unused in FF6WC. This leaves 54 bosses, 199 single normal enemy formations (for MiaB), and 3 untouched [Zone Eater, Tier 1, Final Kefka]. * fixing small issues, as identified by Franklin and HoxNorf * Add boss% to -chests-all-monsters Now called as -cam <0--100>. The number is the percentage chance for each box to contain a boss (0 = no bosses, 100 = all bosses). * allowing 0 argument -cor * address asilverthorn's comments for PR to WC * Small Aesthetic Additions Palettes Added (10): - Alice-HoxNorf-Touhou - Alphys-LoneRedMage-Undertale - Amy-HoxNorf-Sonic - Frisk-LoneRedMage-Undertale - Gryz-HoxNorf-PS4 - Raja-HoxNorf-PS4 - Reimu (Blue)-HoxNorf-Touhou - Rune-HoxNorf-PS4 - Toriel-LoneRedMage-Undertale - Yuyuko-HoxNorf-Touhou Portraits Added (20): - Alice-HoxNorf-Touhou - Alma-Unknown-FFT - Alphys-LoneRedMage-Undertale - Amy-HoxNorf-Sonic - Cloud-JamesWhite89-FF7 - Fighter-CtrlxZ-FF1 - Frisk-LoneRedMage-Undertale - Gryz-HoxNorf-PS4 - Jessie-JamesWhite89-FF7 - Lenna (White Mage)-JamesWhite89-FF5 - Lenna-JamesWhite89-FF5 - Orlandeau-Unknown-FFT - Porom (Devout)-HoxNorf-FF4 - Raja-HoxNorf-PS4 - Ramza-Unknown-FFT - Reimu (Blue)-HoxNorf-Touhou - Rune-HoxNorf-PS4 - Sarisa-JamesWhite89-FF5 - Toriel-LoneRedMage-Undertale - Yuyuko-HoxNorf-Touhou Sprites Added (9): - Alice-HoxNorf-Touhou - Alphys-LoneRedMage-Undertale - Amy-HoxNorf-Sonic - Frisk-LoneRedMage-Undertale - Gryz-HoxNorf-PS4 - Raja-HoxNorf-PS4 - Rune-HoxNorf-PS4 - Toriel-LoneRedMage-Undertale - Yuyuko-HoxNorf-Touhou * Renamed Pirahna Plant-JamesWhite89-Mario to Piranha Plant-JamesWhite89-Mario * Change -loot to -ssd <random%> Changed the flag -loot to --shuffle-steals-drops <random%>. If random% = 0, the steals and drops table is just shuffled. if random% = 100, this recreates the original -loot. * menu bugfix Fix a problem with the menu description. * Fix menu bug 2 * Sprite Additions and "Restorations" - New Sprites/Palettes (11): Arthur-JamesWhite89-GnG Cait Sith-HoxNorf-FF7 Donkey Kong-Badass-Mario Gilius-JamesWhite89-GoldenAxe Kain (Holy Dragoon)-CtrlxZ-FF4TAY Lugae-Astaroth-FF4 Nitori-HoxNorf-Touhou Sanae-HoxNorf-Touhou Sherlotta-HoxNorf_ScarabEnigma-FFCC Wren-HoxNorf-PS4 X-Badass-Megaman - New Portraits (30): Arthur-JamesWhite89-GnG Banon-Laurel_Gens-FF6PR Cait Sith-HoxNorf-FF7 Celes-Laurel_Gens-FF6PR Cyan-Laurel_Gens-FF6PR Donkey Kong-Badass-Mario Edgar-Laurel_Gens-FF6PR Gau-Laurel_Gens-FF6PR General Leo-Laurel_Gens-FF6PR Gilius-JamesWhite89-GoldenAxe Ghost-Laurel_Gens-FF6PR Gogo-Laurel_Gens-FF6PR Imp-Laurel_Gens-FF6PR Kain (Holy Dragoon)-Unknown-FF4TAY Locke-Laurel_Gens-FF6PR Lugae-HoxNorf-FF4 Mog-Laurel_Gens-FF6PR Nitori-HoxNorf-Touhou Relm-Laurel_Gens-FF6PR Sabin-Laurel_Gens-FF6PR Sanae-HoxNorf-Touhou Setzer-Laurel_Gens-FF6PR Shadow-Laurel_Gens-FF6PR Sherlotta-HoxNorf-FFCC Strago-Laurel_Gens-FF6PR Terra-Laurel_Gens-FF6PR Umaro-Laurel_Gens-FF6PR WedgeVicks-Laurel_Gens-FF6PR Wren-HoxNorf-PS4 X-Unknown-Megaman - "Restored" Sprites/Palettes (32): Antlion-Astaroth-FF4 Atma-Astaroth-FF6 Boy-Zozma-FF6 Cagnazzo-Astaroth-FF4 Celes (Amano)-Astaroth-FF6 Celes (Opera)-Astaroth-FF6 Clyde-PocoLoco-FF6 Cultist-PocoLoco-FF6 Dancer-PocoLoco-FF6 Dark Elf-Astaroth-FF4 Draco-PocoLoco-FF6 Elena-Astaroth-FF7 Figaro Guard-PocoLoco-FF6 Interceptor-JamesWhite89-FF6 Katarin-Zozma-FF6 Link-FEOK-LegendOfZelda LoneWolf-PocoLoco-FF6 Lucca-FEOK-CT Lufia-JamesWhite89-Lufia Maduin-PocoLoco-FF6 Mini-JamesWhite89-FF NarsheGuard-PocoLoco-FF6 Peach-Halkel-SMRPG Rubicante-Astaroth-FF4 Scholar-PocoLoco-FF6 Siegfried-PocoLoco-FF6 Squall (Uniform)-SApprentice-FF8 Squall-PocoLoco-FF8 Tifa-Astaroth-FF7 Ultros-PocoLoco-FF6 Vargas-PocoLoco-FF6 Vincent-FEOK-FF7 - "Restored" Portraits (3): Golbez_TAY-HoxNorf-FF4 Link-JamesWhite89-LegendOfZelda Vincent-Xeblon-FF7 * Removed Duplicate Entries in Python Files * Gave proper credit to the Lufia and Vincent portraits * fix: Trash list update from feedback * fixing duplicate -npctips arg from merging --------- Co-authored-by: Kiel <95580337+kielbasiago@users.noreply.github.com> Co-authored-by: Franklin <franklinjen@gmail.com> Co-authored-by: Nolan <10077353+nolanlocke@users.noreply.github.com> Co-authored-by: FF6 Worlds Collide <115676184+ff6wc@users.noreply.github.com> Co-authored-by: Will Jones <wrjones104@users.noreply.github.com> Co-authored-by: Gerard Noseworthy <gnoseworthy@gmail.com> Co-authored-by: Hans Rinderknecht <hans.rinderknecht@gmail.com> Co-authored-by: HoxNorf <45671870+HoxNorf@users.noreply.github.com>
1 parent 9eddabb commit 68240f4

76 files changed

Lines changed: 66 additions & 10 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

args/chests.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ def parse(parser):
1414
help = "Chest contents randomized by tier. Probability of higher tiers begins low and increases as more chests are opened")
1515
chests_contents.add_argument("-cce", "--chest-contents-empty", action = "store_true",
1616
help = "Chest contents empty")
17+
chests_contents.add_argument("-cam", "--chest-all-monsters", default = None, type = int,
18+
metavar = "PERCENT", choices = range(101),
19+
help="Chest contents all monster-in-a-boxes and given percent bosses")
1720

1821
chests.add_argument("-chrm", "--chest-random-monsters", default = [0, 0], type = int,
1922
nargs = 2, metavar = ("ENEMY", "BOSS"), choices = range(101),
@@ -22,6 +25,12 @@ def parse(parser):
2225
chests.add_argument("-cms", "--chest-monsters-shuffle", action = "store_true",
2326
help = "Monsters-in-a-box shuffled but locations unchanged")
2427

28+
chests.add_argument("-ntc", "--no-trash-chests", action = "store_true",
29+
help="Replace Low Tier Items with gold in chests")
30+
31+
32+
33+
2534
def process(args):
2635
if args.chest_contents_shuffle_random is not None:
2736
args.chest_contents_shuffle_random_percent = args.chest_contents_shuffle_random
@@ -47,6 +56,8 @@ def flags(args):
4756

4857
if args.chest_monsters_shuffle:
4958
flags += " -cms"
59+
if args.no_trash_chests:
60+
flags += " -ntc"
5061

5162
return flags
5263

@@ -62,6 +73,8 @@ def options(args):
6273
contents_value = "Random Scaled"
6374
elif args.chest_contents_empty:
6475
contents_value = "Empty"
76+
elif args.chest_all_monsters:
77+
contents_value = "All MiaB"
6578

6679
result.append(("Contents", contents_value, "contents_value"))
6780
if args.chest_contents_shuffle_random:

args/items.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ def parse(parser):
5757
help="Atma Weapon moved to higher tier and divisor reduced from 64 to 32")
5858

5959

60+
61+
6062
def process(args):
6163
from constants.items import good_items, stronger_items, premium_items
6264
from constants.items import id_name, name_id
@@ -178,6 +180,7 @@ def flags(args):
178180
if args.stronger_atma_weapon:
179181
flags += " -saw"
180182

183+
181184
return flags
182185

183186

args/shops.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ def parse(parser):
5353
shops.add_argument("-snil", "--shops-no-illuminas", action = "store_true",
5454
help = "Illuminas not sold in shops")
5555

56+
shops.add_argument("-nts", "--no-trash-shops", action = "store_true",
57+
help="Omit Low tier items in shops")
58+
5659
def process(args):
5760
if args.shop_inventory_shuffle_random is not None:
5861
args.shop_inventory_shuffle_random_percent = args.shop_inventory_shuffle_random
@@ -106,6 +109,9 @@ def flags(args):
106109
if args.shops_no_illuminas:
107110
flags += " -snil"
108111

112+
if args.no_trash_shops:
113+
flags += " -nts"
114+
109115
return flags
110116

111117
def options(args):

data/coliseum.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@ def shuffle_opponents(self):
3030
for match_index, match in enumerate(self.matches):
3131
match.opponent = opponents[match_index]
3232

33-
def randomize_opponents(self):
33+
def randomize_opponents(self, random_opponent_percent = None):
34+
import random
35+
3436
for match in self.matches:
35-
match.opponent = self.enemies.get_random()
37+
match.opponent = self.enemies.get_random() if random_opponent_percent is not None and (random.random() < random_opponent_percent) else match.opponent
3638

3739
def shuffle_rewards(self):
3840
rewards = []
@@ -44,9 +46,11 @@ def shuffle_rewards(self):
4446
for match_index, match in enumerate(self.matches):
4547
match.reward = rewards[match_index]
4648

47-
def randomize_rewards(self):
49+
def randomize_rewards(self, random_reward_percent = None):
50+
import random
51+
4852
for match in self.matches:
49-
match.reward = self.items.get_random()
53+
match.reward = self.items.get_random() if random_reward_percent is not None and (random.random() < random_reward_percent) else match.reward
5054

5155
def remove_excluded_items(self):
5256
import random
@@ -76,15 +80,17 @@ def randomize_rewards_hidden(self):
7680
self.matches[match_index].reward_hidden = 1
7781

7882
def mod(self):
79-
if self.args.coliseum_opponents_shuffle:
83+
if self.args.coliseum_opponents_random:
84+
self.randomize_opponents(self.args.coliseum_opponents_random / 100.0)
85+
elif self.args.coliseum_opponents_shuffle_random:
8086
self.shuffle_opponents()
81-
elif self.args.coliseum_opponents_random:
82-
self.randomize_opponents()
87+
self.randomize_opponents(self.args.coliseum_opponents_shuffle_random / 100.0)
8388

84-
if self.args.coliseum_rewards_shuffle:
89+
if self.args.coliseum_rewards_random:
90+
self.randomize_rewards(self.args.coliseum_rewards_random / 100.0)
91+
elif self.args.coliseum_rewards_shuffle_random:
8592
self.shuffle_rewards()
86-
elif self.args.coliseum_rewards_random:
87-
self.randomize_rewards()
93+
self.randomize_rewards(self.args.coliseum_rewards_shuffle_random / 100.0)
8894

8995
self.remove_excluded_items()
9096

data/shops.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from constants.items import TRASH_IDS
2+
from data.item import Item
13
from data.shop import Shop
24
from data.structures import DataArray
35

@@ -226,6 +228,8 @@ def remove_excluded_items(self):
226228
exclude.append(self.items.get_id("Exp. Egg"))
227229
if self.args.shops_no_illuminas:
228230
exclude.append(self.items.get_id("Illumina"))
231+
if self.args.no_trash_shops:
232+
exclude.extend(TRASH_IDS)
229233

230234
for shop in self.shops:
231235
for item in exclude:

event/start.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,27 @@ def init_event_bits(self, space):
5959
field.SetBattleEventBit(battle_bit.MAGIC_POINTS_AFTER_BATTLE),
6060
)
6161

62+
def no_random_encounters_mod(self):
63+
# Set all encounter rates to zero
64+
# (normal. no Charm Bangle or Moogle Charm)
65+
# C0/C29F: C000 ("less encounter" frequency ==> looks like "normal encounter")
66+
# C0/C2A1: 6000 ("norm encounter" frequency ==> looks like "less encounter")
67+
# C0/C2A3: 8001 ("more encounter" frequency ==> looks right)
68+
# C0/C2A5: 0000 ("no encounter" frequency ==> looks right)
69+
#
70+
# (Charm Bangle, halves of above numbers)
71+
# C0/C2A7: 6000 ("less encounter" frequency ==> looks like "normal encounter")
72+
# C0/C2A9: 3000 ("norm encounter" frequency ==> looks like "less encounter")
73+
# C0/C2AB: C000 ("more encounter" frequency ==> looks right)
74+
# C0/C2AD: 0000 ("no encounter" frequency ==> looks right)
75+
self.rom.set_bytes(0x0c29f, [0x00 for i in range(64)]) # Set all encounter rates to zero
76+
rate = 0x10 # 1/3 charm bangle
77+
self.rom.set_bytes(0x0c2af, [rate, 0x00, rate, 0x00, rate, 0x00]) # Set World Map - Moogle Charm encounter rates to non-zero
78+
79+
# Rename moogle charm to moogle curse: in data.items
80+
81+
82+
6283
def mod(self):
6384
self.intro_loop_mod()
6485
self.init_characters_mod()
@@ -68,6 +89,9 @@ def mod(self):
6889
self.start_items_mod()
6990
self.start_game_mod()
7091

92+
if self.args.no_random_encounters:
93+
self.no_random_encounters_mod()
94+
7195
# where the game begins after intro/pregame
7296
space = Reserve(0xc9a4f, 0xc9ad4, "setup and start game", field.NOP())
7397
space.write(
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)