Skip to content

Randomizer for Gameboy game The Final Fantasy Legend (1989)

License

Notifications You must be signed in to change notification settings

eclipseyy/FFLRandomizer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FFLRandomizer

Randomizer for Gameboy game The Final Fantasy Legend (1989).

Familiarity with the vanilla game is highly recommended.

Windows binary here: https://github.com/eclipseyy/FFLRandomizer/raw/main/randomize_ffl.zip Tested on Windows 10. On Windows 7, this binary doesn't seem to work. Instead you should install Python 3.8 (or above? not tested), clone this repo or download as zip, and run python.exe randomize_ffl.py.

Written in Python 3.8 on Windows. I haven't tested other platforms. There isn't anything Windows-specific in there - pathlib is used for paths, etc - so it might work. Could have endianness issues. The Windows binary was created using pyinstaller.

Running the randomizer

Copy the ips patch to the same directory as your FFL ROM. The patch is Tower Reversed's latest patch. It's automatically applied before randomization. I recommend letting this happen (which is the default) but you can disable it if you want.

You have to supply the path to the FFL rom and the path to the monster CSV. You can edit the monster CSV first if you want. You can optionally supply the seed value to use for the randomization. The randomizer generates one new rom file per run.

Non-interactive mode: randomize_ffl rompath monstercsvpath seed [options]
Recommended options: randomize_ffl rompath monstercsvpath seed ffl2 ffl2path harder_encounters worldmaps dungeonmaps towermaps
You can specify multiple options, separated by spaces. Some combinations of options might unbalance the game.
For a tougher challenge, the harder_encounters option populates encounters with higher level monsters. Meat transformations and gold combat rewards are adjusted to compensate. harder_encounters is equivalent to transformation_level -1 encounter_level 1 monster_gold -1 gold_table_multiplier 0.7.
Gameplay should hopefully be reasonably balanced between seeds. Let me know if you find a very difficult or very easy seed. The difficulty might not be even within a particular randomized rom, but that's part of the fun; however, please let me know if you come across something ridiculous. Item costs should be fair; if you find items which seem very cheap or expensive, let me know.
If you want to cheat and see what's in a randomized rom, use Tower Reversed's fledermaus utility (link in Thanks section below).

Switch Meaning
nomutantabilities Disables randomization of mutant learnable abilities
noarmor Disables randomization of armor items
nocombatitems Disables randomization of combat items such as weapons and spells
nocharacteritems Disables assigning appropriate items to guild humans and mutants
noenemyitems Disables assigning appropriate items to enemies such as ASIGARU and KARATEKA
noshops Disables randomizing equipment shop contents
nochests Disables randomizing chest contents
nomonsters Disables randomizing monsters by picking them from the CSV file
noencounters Disables randomizing which monsters appear in encounters
noguildmonsters Disables randomizing which monsters appear for selection in guilds
nohptable Disables randomizing the HP table used by monsters and guild characters
nomutantrace Disables randomizing the mutant race (see below)
nomeat Disables randomizing meat transformation table
nopatch Disables applying the patch (IPS file) before randomization
notower Disables randomizing connections between rooms in the tower
nodungeons Disables randomizing connections between exits in certain dungeons and caves
noskyscraper Disables randomizing connections between exits in the skyscraper
transformation_level x Sets the monster level offset for meat transformation randomization
encounter_level x Sets the monster level offset for encounter randomization
monster_gold x Sets the gold table offset for combat rewards
gold_table_multiplier x Sets multiplier for values in the gold table
harder_encounters equivalent to transformation_level -1 encounter_level 1 monster_gold -1 gold_table_multiplier 0.7
nosmallpics Disables randomization of small pictures
ffl2 ffl2rompath Sets path to FFL2 ROM, currently used only for randomization of small pictures
worldmaps Enables randomization of world maps (currently Continent and Ocean)
dungeonmaps Enables randomization of certain dungeon maps (more to come)
towermaps Enables randomization of tower room maps and connections between rooms

When mutant race randomization is enabled (which is the default), MUTANT will be renamed to S-MUT, A-MUT or D-MUT depending on which attribute is learned most quickly.
When tower randomization is enabled (which is the default), you will likely visit the floors out of numerical order.
I recommend enabling map randomization (worldmaps, dungeonmaps and towermaps). The switches are disabled by default as the process takes a long time.

Combat items

Randomized items have their properties encoded into their names.

RNC is RUNE type, DEF is DEFEND, RD is both RUNIC and DEFEND, and RVG counters. FSK, ISK, ESK and PSK grant "special body" with a single element, the same as BURNING or P-SKIN.

Armor example: (armor symbol)5ODMG - armor that gives 5 D points and resistance equivalent to ODAMAGE. Numbers are the defense increase. OICE etc are resistances. S, A, M and SA are attribute increases.

Sword example: (sword symbol)A5RNC - agility-based weapon with power 5 and the ability to reflect magic. S, M and A give the damage type: S for Strength (HAMMER, LONG, AXE etc); M for Mana (P-KNIFE, P-SWORD); A for Agility (RAPIER, SABER etc). The number is the weapon strength. CRL, OGR, DGN, SUN deal critical hits to single classes, CLS to all four classes. FLM, ICE, ELC deal elemental hits, KNG hits all elements.

Bow example: B100RVG - bow with 100 power and the ability to counter.

Gun example: (gun symbol)50RNC

Whip example: W45RVG

Ordnance example: O75RNC

Spells: (spellbook symbol)FIRA8 - fire-elemental spell with power 8 that targets all enemies
FIR, ICE, ELC, FOG, QUK and FRC target one enemy group. Each has a single element, except FRC, which has no element.
FIRA, TRND, ELCA, ACID, QUKA and FLAR target all enemies.

Thanks

Infinite thanks: https://towerreversed.neocities.org/, the "fledermaus" utility in particular.

Contact: [email protected]. PLEASE email me with your feedback, suggestions, etc! I haven't spent a lot of time playtesting it, so all feedback is super valuable.

Version history

v0.016 - edited interactive prompt text a bit
v0.015 - separate switch for tower maps. Bug fix
v0.014 - randomly generate maps for remaining tower rooms. Bug fixes
v0.013 - bug fixes
v0.012 - randomly generate maps up to World of Ocean - disabled by default, as the process takes a long time
v0.011 - bug fix
v0.010 - randomize small pictures, optionally copying them from FFL2 ROM. Randomly generate the World of Continent map
v0.009 - prompt for harder encounters option in interactive mode
v0.008 - harder_encounters option. Tweak monster CSV a bit.
v0.007 - randomize dungeon and skyscraper exits
v0.006 - randomize connections between rooms in the tower. Tweaks, bug fixes.
v0.005 - options. Randomize shops and chests multiple times to find the lowest number of unused items in the game. Bug fixes, tweaks and improvements.
v0.004 - bug fix
v0.003 - randomization of other combat items. Bug fixes and balancing tweaks. Undid transforming into non-monster enemies as in practice it's usually unwanted.
v0.002 - added armor and melee weapon randomization. Greatly improved meat transformation (thanks Tower Reversed). Monsters eating meat now sometimes transform into non-monsters! Automatically apply TR Tweaks patch. Many tweaks.
v0.001 - initial

About

Randomizer for Gameboy game The Final Fantasy Legend (1989)

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages