fiendsoftheelements / ff1randomizer Goto Github PK
View Code? Open in Web Editor NEWA randomizer for Final Fantasy 1 on the NES.
Home Page: http://finalfantasyrandomizer.com
License: GNU General Public License v3.0
A randomizer for Final Fantasy 1 on the NES.
Home Page: http://finalfantasyrandomizer.com
License: GNU General Public License v3.0
Three options:
Steps:
In last night's second race, Corneria weapon shop.
Apparently, in the original game, confused enemies cast the FIRE spell on each other. Now, they cast whatever spell gets shuffled there. This doesn't affect the game much, it's more amusing than anything, but it probably ought to be fixed.
Seed 610646C1_qfLfAQKCoo, Zelly reports Early Ordeals didn't work.
Flags will become tri-state. This requires a significant rewrite to the flag parsing code, the JS side of which will be more painful.
Fixing these things will just make the game a little easier or faster to play.
Reference: http://www.gamefaqs.com/nes/522595-final-fantasy/faqs/57009
The following would be not shuffled, but scaled by a random exponential factor:
One option I'd like to have is to allow the randomizer to patch several bugs in the original game.
Reference (search for SEC9): http://www.gamefaqs.com/nes/522595-final-fantasy/faqs/57009
Lots of magic bugs:
I have encountered a bug where moving spells around is also affecting the spells used by the various spellcasting items.
In the case I encountered, the Heal Staff is attempting to cast MUTE.
Here's a video showing the issue:
https://www.dropbox.com/s/kkpkfw6nosklvcw/FF1RandoBug.mp4?dl=0
Version 1.4.9
Seed D7EBEF66
Flags r%%%AQoeoo
The Issue: At one point early in the run I bought a stack of 10 TENTs (using "buy 10"). When I went in my inventory to use one a bit later, I only had 1, and it never went away. I used that single TENT about 30 times over the course of my run.
FF1 Randomizer 0.5.2 Seed 1BC49D5A Flags TSmLB5050 CROWN in Phantom's room. Thankfully we all had a mage.
I would like to see both the step counter and the encounter table shuffled and/or randomized as options. As things currently stand, there is an inherent advantage in racing the randomizer for people who know how to manipulate the step counter and get the fights that they want. I know some people have used the encounter table to avoid certain dangerous fights, and, though I haven't gotten to that point yet, there's a good chance I will soon. I'd like to just play the game without knowing exactly what's coming myself, to avoid having to follow every detail, so I'd prefer that the encounter tables and step counter just be shuffled or randomized in some fashion, at least as an option.
Randomizer Version 1.0.3
Flags D9B7DBB2_Kx4oBoo
(Note this happens no matter the seed, that just happens to be the one on my copy/paste to show flags)
While trying to generate seeds with the above flags, the program will fail to generate and stop responding.
Upon further testing, this happens unless ALL THREE of the "enemy" shuffle options (scripts, skills/spells, status attacks) are on.
Haven't had this issue with earlier versions. Might just be me but making an issue just in case.
OS: Windows 10 Pro v1703 build 15063.786
Can't launch "FF1Randomizer.exe" from "FF1Randomizer.zip" from release v1.6.1 (c81893f) on the releases page. Defender flags it as a virus, prevents launching it, and shortly after automatically deletes it.
v1.6 also has this problem.
v1.5 prompts me to install the .NET runtime and isn't deleted by Defender outright. Possible this issue is related to the new DLL linking you're using?
Seed/Flags: 0722D7A5 / r%%%Awbboo
I generated 5 seeds using these flags, all have the same problem. Upon hitting level 2 or 3, the Experience needed to level up is set to near max. I guess there is an underflow error when gaining too much XP relative to current level, possibly if you skip 1 or more levels worth of XP from a single fight? The screenshot attached is after fighting the first 5 Imp fight outside Coneria, gaining the level, then checking the Status screen.
Thank you!
I got a Ribbon from a chest in Earth Cave B2 and it went into my first character's weapon inventory despite my armor not being full. This is a 1.5.1 game that I started right before 1.5.2 was released.
When prices are scaled, the amount of gold in each gold chest is scaled, but the text doesn't change. The text is well packed, so it's difficult to change because it could move lots of other text. We need a comprehensive text packing system to fix this.
Pick out a list of items that can have random spell effects added. Figure out names for the spell effects.
Reported by sylverfyre on Discord, investigate.
Randomly choose (and prevent the player from changing) some or all party members.
The most basic version of this feature would just let the user select a number of party members to be chosen randomly, 0 - 4.
The most advanced version would let the user choose which classes are allowed in each slot, and whether or not that slot is randomized. This would let the user, for example, disallow Black Belts in the party, or maybe only allow them in one slot at most. Or you could set the first two slots as fighting classes and the last two as mages, but have them randomly chosen. Or any number of other combinations.
If the TAIL ends up in ToFR, it is impossible to class change. The only way out is with the WARP or EXIT spell, both of which require a class change.
Also, the player may not even have a WW/BW in the party, so if something like the CROWN or ADAMANT end up in ToFR, it can really screw up the game.
Final Fantasy is VERY flexible with their encounter rates; the rates are determined on EACH FLOOR OF EACH DUNGEON!
Here is the code that takes the encounter rate and reduces it by 2/3. If you want to, you can modify it to have it randomized via your sliding scale or whichever you prefer. I don't suggest outright reducing the encounter rate like I did here;(I got resistance like it was nobody's business! :) ) I'm only providing this code as a reference.
// These are for all dungeons. The "9, 10, 11, and 12" are for the Chaos Shrine, the last number is for the last floor of the Floating Castle
for (int lnI = 0x2cc11; lnI <= 0x2cc11 + 0x3d; lnI++)
romData[lnI] = (byte)((romData[lnI] == 8 || romData[lnI] == 9 || romData[lnI] == 10) ? 3 : (romData[lnI] == 11 || romData[lnI] == 12) ? 4 : romData[lnI] == 1 ? 1 : 8);
romData[0x3c50e] = 0x03; // Modified encounter rate for the overworld
romData[0x3c516] = 0x01; // Modified encounter rate for the sea
Feel free to implement as much or as little of these as you want. :) The field text window should open a lot faster and the transitions should be almost instantaneous as well as the below.
I'm not sure if all of these are documented properly, so please let me know if you have any questions.
`private void button4_Click(object sender, EventArgs e)
{
if (!loadRom())
return;
// Double walking speed
romData[0x3d088] = 0x02;
romData[0x3d6f7] = romData[0x3d6f8] = romData[0x3d6f9] = 0xea;
romData[0x3d71c] = romData[0x3d71d] = romData[0x3d71e] = 0xea;
romData[0x3d956] = 0x60;
romData[0x3d8e6] = romData[0x3d8e7] = romData[0x3d8e8] = 0xea;
romData[0x3d630] = 0x08;
romData[0x3d6a9] = 0x08;
// Battle speedups
romData[0x31e2d] = 0x01;
romData[0x31e92] = 0x01;
romData[0x31e5c] = 0x01;
// Inn fade in/out
romData[0x3ffa3] = romData[0x3ffa4] = romData[0x3ffa5] = 0xea;
romData[0x3ffb8] = romData[0x3ffb9] = romData[0x3ffba] = 0xea;
// Speed up character resort
romData[0x399b7] = romData[0x399b8] = romData[0x399b9] = 0xea;
romData[0x3795b] = romData[0x3795c] = romData[0x3795d] = 0xea;
romData[0x37966] = romData[0x37967] = romData[0x37968] = 0xea;
romData[0x37973] = romData[0x37974] = romData[0x37975] = 0xea;
romData[0x379a9] = romData[0x379aa] = romData[0x379ab] = 0xea;
romData[0x379b4] = romData[0x379b5] = romData[0x379b6] = 0xea;
romData[0x379c1] = romData[0x379c2] = romData[0x379c3] = 0xea;
romData[0x379fc] = romData[0x379fd] = romData[0x379fe] = 0xea;
romData[0x35aa5] = romData[0x35aa6] = romData[0x35aa7] = romData[0x35aa8] =
romData[0x35aa9] = romData[0x35aaa] = romData[0x35aab] = romData[0x35aac] =
romData[0x35aad] = romData[0x35aae] = romData[0x35aaf] = romData[0x35ab0] =
romData[0x35ab1] = romData[0x35ab2] = romData[0x35ab3] = romData[0x35ab4] =
romData[0x35ab5] = romData[0x35ab6] = romData[0x35ab7] = romData[0x35ab8] = 0xfb;
romData[0x33e6d] = romData[0x33e6e] = romData[0x33e6f] = 0xea;
romData[0x317a9] = romData[0x317aa] = romData[0x317ab] = 0xea;
romData[0x3f47b] = romData[0x3f47c] = romData[0x3f47d] = 0xea;
//romData[0x33dba] = 0x01;
//romData[0x33cdd] = 0x01;
//romData[0x33fea] = 0x00;
//romData[0x3f45a] = 0x01;
//romData[0x33fc7] = 0x00;
saveRom();
}`
Caught this one, watching Darkwing_Duck_sda
https://clips.twitch.tv/PowerfulHelpfulSquidOpieOP
Watched czardia playing last night, and he got a max-evade CHAOS with lots of HP. Hit him with lots of low-level NUKE and FADE spells, was missing all day with FASTed Knight+Masmune and Master, could not defeat him between casts of CUR4 despite racking up over 5000 damage.
I like some enemies having sky-high evade, even if it's super inconvenient, like AIR (unrunnable). But it does break the game if it happens to CHAOS along with really high HP. Should probably clamp enemy agility slightly lower than 255.
Is it possible to add a check that will ensure SOFT potions are available somewhere in the south half of the map? I was just part of a race where I lost 45 minutes (and eventually forfeit) due to lack of SOFT potions and a common enemy in Earth cave having petrify effect on their attacks. In this specific case it was Gargoyles, but it can be an issue even without status attack shuffle due to Coctrice.
Remembering the last cursor position might be the easiest way, ideally just stay on the screen and let the player mash the A button (but we need to keep track of items or spell charges remaining).
I'm not actually certain about the intented behavior for changing Spell Permissions, but I didn't expect it to behave the way it did. In a seed with unshuffled magic shops and unrestricted magic (TSmLp), spell permissions were being granted to classes based on the position of the spell in the shop.
E.G. The White Magic shop in Melmond (L5).
Original Spells in order: CUR3 LIFE HRM3 HEL2
Shuffled Spells in order: PURE HRM3 FOG HEL2
So for my Red Mage, PURE was learnable unpromoted as CUR3 would have been, and HRM3 was learned as a Red Wizard as LIFE would have been. Neither RM or RW could ever learn FOG or HEL2, as RW cannot originally learn HRM3 or HEL2.
Further examples of spells I'd never expect the Red Mage to learn, but did: CUR4, HRM4, NUKE, BANE.
I wrote down every spell's permissions from the seed for white and red mage and wizard.
https://docs.google.com/spreadsheets/d/1L4UVlVzio__3q4GD9s6615ArbEkiOHkVFdl0lp8wVoE/
Save this in settings so you don't have to load the ROM every time.
This feature makes treasure hunting a bit more like later FF games, where instead of map tiles being trapped, the treasure chests are trapped instead.
This line from the readme should be updated: "Speaking of classes, the TAIL can be anywhere -- including the Temple of Fiends Revisited." Also, you have a line about permissions being a potential future change, which should probably be removed and replaced with a section on permissions.
Side question: when early canoe becomes possible, will this allow the ruby to be in any of the places accessible by canoe?
The instructions don't give any insight how to tie this with an emulator.
I have Jnes 1.0 and can't target the zip from this repo since there isn't a .rom file. What am I missing?
Windows Defender is claiming that FF1Randomizer.exe contains Trojan:Win32/Spursint.F!cl, which is probably a bad thing.
Ideally we'd like to hash parts of the ROM, but not all of it (to allow people to use fun graphics patches like FF Valkyries, FF3j tilesets, etc.). Then based on the hash, we can display a series of sprites on the title screen that are easily recognizable and verifiable on stream. This is not bulletproof, but it helps ensure the integrity of the ROM.
Similar to triangle hunt in ALttPR. The randomizer should generate some number of orb shards and place them in random treasure chests. When a player collects enough shards (where "enough" is possibly less than all of them), they win the game.
The original game has a bug where the eighth spell in each level cannot be cast outside of battle. Since none of the eighth spells in the original game can be used outside of battle anyway, it didn't matter, but if WARP gets shuffled to the eighth spot (only a black spell can end up there), it doesn't work.
I couldn't find the crown, so I couldn't find the key -> cube -> rattail -> etc. I looked everywhere that I could think of. Seed 3C4D6E25, flags TSMLpAROFoo
Thanks for looking into this!
On seed C4adf723_q%%%AQeNoo I had pirates with Blaze, Squint, Sleep. It was a bit much. Any way to tune the pirates to ensure seeds have reasonable pirates? I have a mageless party, and so I've been slowly grinding to upper 20s to deal with it.
Sometimes the randomizer gets stuck adding items to shops, if most shops are full and the remaining ones all have a certain item already. Shops.cs line 115.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.