News:

11 March 2016 - Forum Rules

Main Menu

Final Fantasy II Restored

Started by redmagejoe, December 10, 2019, 03:09:14 AM

Previous topic - Next topic

abw

Quote from: Vanya on June 20, 2020, 02:09:53 AM
It might be useful to see how the latter games handle per-emptive and surprise attack messaging.
I'm pretty sure they all match up with FF1 and not 2 & 3.
Quote from: redmagejoe on June 20, 2020, 02:11:56 AM
I know for a fact that 4, 5, 6, and 7, as well as remakes of 2, tell you that it's a preemptive strike the moment the battle initiates.
Given that I-III are the only purely turn-based entries in the series (as far as I recall, anyway), I'm not sure that comparing II with IV+ really makes sense here - assuming you wanted to, how would waiting to display the pre-emptive strike notice even work in the ATB system?

Quote from: redmagejoe on June 20, 2020, 02:11:56 AM
I'd go with series convention over our speculated developer intention here, frankly, especially since it makes no sense without applying some really tortured logic. "Preemptive strike" would only make sense if your team knew they had the jump on the enemy before they decided their actions. Its current behavior is more like "You rolled a 20! Get a free turn!"
It's more like a DEX check, but yeah, it's almost as though FF was inspired by D&D :P. Anyway, it's only the timing that we'd be changing, not the base mechanic. As for an explanation... your party is wandering along, sees some monsters, decides what to do, and then springs into action. Whether your party gets a free turn or not is decided by whether the monsters also saw your party and decided on their own actions (which your party might not be able to determine beforehand, especially for non-humanoid monsters), or if they didn't, on how quickly they react to surprises (which your party probably won't be able to determine beforehand either). I'd argue that makes FFII/III more realistic than FFI, which seems to require your party consistently coming across monsters that are so obviously incapacitated that your party always has time to act before the monsters know what hit them, e.g. if the monsters are sleeping soundly or something.

As a player of the game, it's definitely more advantageous to receive the notice before entering commands, and I'm fine with changing the timing in Restored, but from a technical perspective, the original behaviour doesn't really look like a bug, so I don't think this change belongs in the Bug Fix only patch.

Jiggers

Something to consider: FF1 checks the "strike first" flag during run attempts. If its set, running is 100% guaranteed. So if FF2 does the same, I would argue that not showing it until after the first round of commands is very bug LIKE, in that its not letting the player make an informed decision.

Quotewhich seems to require your party consistently coming across monsters that are so obviously incapacitated that your party always has time to act before the monsters know what hit them, e.g. if the monsters are sleeping soundly or something.

Also how I picture it; and I just loved the idea of coming across sleeping enemies so much I just went and added in a 50/50 chance for enemies non-resistant to the sleep ailment to be found asleep at the start of preemptive strikes in my FF1 project. XD
I know exactly what I'm doing. I just don't know what effect it's going to have.

I wrote some NES music! Its a legal ROM file. - I got a Ko-Fi page too.

redmagejoe

#422
At the end of the day, the best we can do is speculate, which is why I leave it to abw's discretion. I don't think there's any harm in changing it, and I imagine anyone who wants to use Bug Fix as a base for their own romhacks may end up trying to change that on their own, so that's why I'm inclined in that direction. Ultimately though, it's not game-breaking and is simply a minor annoyance to leave it as it is.

Rabite890

#423
I'd really prefer getting the notification before picking commands. It directly impacts how I plan the battle. Do I use MP to prevent going to a second round? Use weaker spells to build them up in the surprise round then finish them off next round? Or do I just kill them with all physical attacks in the next round and conserve some MP?

abw

Quote from: Jiggers on June 20, 2020, 03:38:52 PM
Something to consider: FF1 checks the "strike first" flag during run attempts. If its set, running is 100% guaranteed. So if FF2 does the same, I would argue that not showing it until after the first round of commands is very bug LIKE, in that its not letting the player make an informed decision.
FF2 does not do that (it's one of the things I missed from FF1), but it sounds like a great addition for Restored!

Quote from: Rabite890 on June 20, 2020, 06:29:22 PM
I'd really prefer getting the notification before picking commands.
Yup, I agree, and if that's what you're looking for, the Restored patch will have you covered ;) .

Time for some more updates - we have now reached 75 separate bug fixes!

Bug Fix + Restored:

       
  • FIXED: When a character is killed, their battle command and target do not always get not cleared, which means that if the character gets revived before their turn comes up (even in a later round!), they will still try to execute their original battle command.
  • FIXED: KO'd entities do not have their ailment bits reset, causing them to revive with any previously inflicted status ailments.
  • NEW + AVOIDED: Dead characters can recover from temporary ailments.
  • FIXED: Characters' battle poses and status lines frequently do not reflect their current condition (e.g. newly updated statuses take display priority over more severe existing statuses, character-initiated drain effects and suicides do not update that character's pose to KO/critical/OK, etc.).
  • FIXED: Monsters that are killed by Poison/Venom have their current HP set to 0 and KO ailment bit set, but are not actually removed from battle; they remain valid targets (you can even cast Life on them to bring them back!) and need to be attacked again in order to remove them from battle.
  • NEW + FIXED: If Poison/Venom damage drops an entity into critical HP, their critical HP flag is not set; in the case of characters, this can result in an incorrect battle pose after the ailment is removed.
  • FIXED: The code for printing "しょうひMP" (MP Cost) in the battle magic menu doesn't set the memory address used to hold the menu window width before adding the string to the CHR buffer.
Restored:

       
  • FIXED: Notify the player about pre-emptive attacks before letting them choosing battle commands.
I also noticed a new graphical bug:

       
  • Killing a large monster (e.g. a Fire Gigas) while Leon is dead results in Leon's feet being temporarily cut off.
We've got a few options for dealing with some of the next bugs on the list, and I wanted to solicit some feedback. For the issue where damage values over 999 prevent the " DMG" text from being displayed:

OptionSample 1-digit damageSample 4-digit damageWorks for
Change the message text from 4-tile " DMG" to 3-tile "DMG" and adjust the conditional display logic to check for 10000+ damage instead of 1000+"1DMG   ""1234DMG"EN only?
Switch the message ID from the 4-tile " DMG" to the 2-tile "HP", write a space between the number and the text, and adjust the conditional display logic to check for 10000+ damage instead of 1000+"1 HP   ""1234 HP"EN/JP/probably others
Switch the message ID from the 4-tile " DMG" to the 2-tile "HP" and remove the conditional display logic"1HP    ""1234HP "EN/JP/probably others
Switch the message ID from the 4-tile " DMG" to the 2-tile "HP", right-align the text, and remove the conditional display logic"1     HP""1234 HP"EN/JP/probably others
Expand the message window from 7 tiles to 8 and adjust the conditional display logic to check for 10000+ damage instead of 1000+"1 DMG   ""1234 DMG"EN/JP/probably others

I've been looking at the issues we knew about surrounding characters rejoining the party, namely a) if a character rejoins at 0 HP, they do not have their KO bit set and are considered to be alive and b) the character is forced into the back row when they rejoin, and have noticed several more problems:

       
  • Characters that leave the party are sometimes set to the back row, so we'll have to update that code to only remove them from the party and not also change their row.
  • Characters are always set to the back row when they rejoin, so if your top 3 characters are also in the back row at that point, you can bypass the normal restriction on having at least 1 character in the front row and gain full-party immunity to physical attacks (except from your own archers).
  • However, if your entire party is in the back row, entering a battle results in a soft lock if any monster chooses to physically attack since the game gets stuck in an infinite loop of trying to target a living front row character when there are no front row characters.
  • If all front row characters are killed in battle, all back row characters are moved to the front row, but when you revive the dead front row character, your other characters are not returned to the back row.
  • If Firion is killed during a battle while each of your characters is displayed on the map (e.g. the story battle against a Queen Lamia), your party's avatar switches to the next living party member, leading to the same party member appearing twice on the map.
  • If your party's avatar is your 4th character when your 4th character departs, your avatar is not immediately updated.
  • When Leila departs (this probably also applies to all other departures not triggered by talking to some NPC), if the rest of the party is in the back row and dead, Firion is pushed to the front row and his KO status is cleared, which leaves him alive with 0 HP.
If anybody has a save state just before Josef or Gordon (both times) leaves and can find any other gaps that need to be filled, let me know.

With that in mind, the first few options for dealing with characters rejoining at 0 HP that came to mind were:

       
  • Preserve all of their persistent ailments
  • Preserve all of their persistent ailments other than KO
  • Continue clearing all of their persistent ailments but set their KO flag if their current HP is 0
  • Continue clearing all of their persistent ailments but set their current HP to 1 if it's 0
  • Alternately, since the character appears to have spent some of their time away from your party curing their persistent ailments, maybe we can also assume they took a nap at some point and should rejoin at full HP/MP?
Given the issues with having your entire party KO or at 0 HP, I'm strongly leaning toward the last two options, ensuring that your new character is both alive and has more than 0 HP. Gordon was just lounging around the throne room and Leila had set out to storm Fynn castle all by herself, so I think it kind of makes sense for them to be fully rested when they rejoin your party.

Once we've got that sorted out, there's a handy routine in the fixed bank that we can call to ensure somebody is in the front row, so that part should be easy. The annoying part is that there are two duplicate sections of code that need to be modified in bank 3 and bank E, so I'm tempted to consolidate those into a single block, which will require consuming some space in the fixed bank, something I've successfully managed to avoid so far.

Cyneprepou4uk

Man, this game is swarming with bugs, what the hell the developers were thinking  >:D

Vanya

QuoteExpand the message window from 7 tiles to 8 and adjust the conditional display logic to check for 10000+ damage instead of 1000+   "1 DMG   "   "1234 DMG"   EN/JP/probably others

This one.

redmagejoe

#427
Quote
Switch the message ID from the 4-tile " DMG" to the 2-tile "HP", write a space between the number and the text, and adjust the conditional display logic to check for 10000+ damage instead of 1000+

I strongly suggest this one. Final Fantasy I uses HP instead of DMG in its damage readouts, so at the very least it conforms to the previous entry, while also fixing our little issue.

Quote
Alternately, since the character appears to have spent some of their time away from your party curing their persistent ailments, maybe we can also assume they took a nap at some point and should rejoin at full HP/MP?

I see no reason not to take this route. All your characters that rejoin you for the most part join you fresh out of a "home base" and have no reason, canon or technically, I can think of not to have a full cure on them. It's more than likely just laziness/oversight in not adjusting their battle stats in memory. I can't imagine a good argument could be made for why we shouldn't simply heal up our revolving fourth character slot.

Grimoire LD

QuoteIf all front row characters are killed in battle, all back row characters are moved to the front row, but when you revive the dead front row character, your other characters are not returned to the back row.

I don't think this one is a glitch, as it is still in the PSP remake of the game. I think it is an intended consequence of the row system.

Quote from: Cyneprepou4uk on June 22, 2020, 05:31:33 AM
Man, this game is swarming with bugs, what the hell the developers were thinking  >:D

I'm beginning to think that Nasir Gebelli didn't really understand some of the concepts he was asked to work on in this title or he personally didn't like Kawazu, I am reminded of the "Ultima" story and the excuse he gave as to why it was broken. It sounded like a student trying to convince their teacher why they didn't need to put more effort into their project.

I would love to hear his excuses on the myriad of bugs that are in FFII.

This is a herculean feat that you're all doing here. I never realized how much of a mess the original FFII was, outside of its core mechanics being a bit... basic. Thankfully Kawazu innovated on that idea largely with his SaGa series.

abw

Quote from: Cyneprepou4uk on June 22, 2020, 05:31:33 AM
Man, this game is swarming with bugs, what the hell the developers were thinking  >:D
Seriously :P. At least here you have to try pretty hard (or at least be in a very unusual/unlikely situation) in order to achieve a soft lock, not like certain much more recent games I could name...

Quote from: Vanya on June 22, 2020, 11:43:28 AM
This one.
I'm partial to that one myself since it meshes well with expanding spell names to 5 tiles or showing the number of spell successes, but redmagejoe pointed out earlier that a downside is obscuring part of the HP display.

Quote from: redmagejoe on June 22, 2020, 01:03:56 PM
I strongly suggest this one. Final Fantasy I uses HP instead of DMG in its damage readouts, so at the very least it conforms to the previous entry, while also fixing our little issue.
I think you mean the other way around? FF1 definitely uses 3-tile "DMG", so its damage display looks like "1DMG    ". I'm willing to assume that the overwhelming majority of languages have some standard 2-tile translation for "HP", so this option is also a contender.

Quote from: redmagejoe on June 22, 2020, 01:03:56 PM
I can't imagine a good argument could be made for why we shouldn't simply heal up our revolving fourth character slot.
Rejoining at full HP/MP sounds good to me!

Quote from: Grimoire LD on June 22, 2020, 01:39:53 PM
I don't think this one is a glitch, as it is still in the PSP remake of the game. I think it is an intended consequence of the row system.
Yeah, that one's more of an oddity than an actual bug, just something I noticed while playing around.

Quote from: Grimoire LD on June 22, 2020, 01:39:53 PM
I'm beginning to think that Nasir Gebelli didn't really understand some of the concepts he was asked to work on in this title or he personally didn't like Kawazu, I am reminded of the "Ultima" story and the excuse he gave as to why it was broken. It sounded like a student trying to convince their teacher why they didn't need to put more effort into their project.

I would love to hear his excuses on the myriad of bugs that are in FFII.

This is a herculean feat that you're all doing here. I never realized how much of a mess the original FFII was, outside of its core mechanics being a bit... basic. Thankfully Kawazu innovated on that idea largely with his SaGa series.
The majority of things we've fixed, especially early in this project, have been the result of missing caps/overflow/underflow or minor technical errors; most of them are fairly low severity. It would be interesting to know more about their development process at the time - I get the sense that the code is a mixture of hand-written and machine-generated, so there's a chance there may have been a finicky compiler involved somewhere. In any case, it's not like this is FFXIV or anything :P.

redmagejoe

#430
The text must have been changed for Final Fantasy Restored then, as that's the version I"m using, and it definitely says "# HP" for its damage boxes.




https://youtu.be/vwuO-XZ9cVA?t=653

So this musical cue should probably be moved up one scroll... It is indeed inappropriate and I think fires early, so going to add this to bugs list.

abw

Quote from: redmagejoe on June 22, 2020, 10:05:32 PM
https://youtu.be/vwuO-XZ9cVA?t=653

So this musical cue should probably be moved up one scroll... It is indeed inappropriate and I think fires early, so going to add this to bugs list.
The original Japanese version (and Demi's English translation) uses only one screen for that text, so the music plays right on time there. This seems like more of an issue with the Chaos Rush translation. The easiest thing to do would be to change the text to fit on one screen, but if you want to try changing the timing of the music, you'll need to separate the code for checking whether the Pendant can be added to the party's inventory (which determines what message to display) from the code for actually adding the Pendant to the party's inventory (adding any key item to the party inventory triggers the key item music); currently they're done at the same time starting at $0E:$A100.

redmagejoe

Ah, I'll make note to update the translation then to address that.

Russ1Z

Been following with interest, and wondering if a couple of other bugs have been noted for any work.

1. The "G.Soul" (or Green Soul) monster has apparently-buggy stats and behavior (ie only 6 HPs, does nothing but cast Cure on the party, etc).

2. The "Cuirass"-type armors (Copper, Silver, Ruby, Gold, and Diamond) usually have the same Defense values as their heavier counterparts at each point of the game (Bronze, Mithril, Golden, etc), but have much lower Evade penalties, while at the same time costing Less. I can't help but think this was an oversight in possibly multiple ways. In FFI, the "Bracelet" armors sacrificed Defense for Evasion, and generally cost more.

These might be more "Rebalanced" issues rather than "Restored", but just want to throw them out there anyway.

Thanks for all the hard work on this project!

Grimoire LD

As far as I know, Russ. None of those have ever been seen as a glitch by the developers. Green Souls in the PSP do exactly what you said. The difference between the Cuirasses? and Armor is availability. It seems that the Armor is available a decent amount of time before the Cuirasses are in several cases.

abw

Yeah, "Rebalanced" is a whole other can of worms :P. One fun/evil thing to do there would be to give Green Souls insane physical attack power so that when they run out of MP and are forced to attack they start slaughtering you instead of healing you >:D.

Update time!

Bug Fix + Restored:

  • FIXED: Damage values over 999 prevent the "ダメージ" (" DMG") text from being displayed. I ended up switching to the "HP" text, tweaking the conditional display logic a bit, and keeping the window right-aligned; the damage display will now look like "   1 HP"/"  12 HP"/" 123 HP"/"1234 HP"/"12345HP" (take THAT, pesky Ogre Mage :P). If we do end up expanding the window width, switching the message ID back to " DMG" is easy.
  • FIXED: Preserve a character's row when they leave and rejoin the party.
  • FIXED: If a character rejoins at 0 HP, they do not have their KO bit set and are considered to be alive.
  • FIXED: If your top 3 characters are in the back row when your 4th character is swapped for a back row character, you can bypass the normal restriction on having at least 1 character in the front row.
  • AVOIDED: If your entire party is in the back row, entering a battle results in a soft lock if any monster chooses to physically attack since the game gets stuck in an infinite loop of trying to target a living front row character when there are no front row characters.
  • NEW + FIXED: If your first 3 characters are all Toads, you are prevented from proceeding through NPC interactions that trigger the loss of your 4th character. Presumably this was to avoid an automatic game over due to your entire party being KO/Stone/Toad, but since we changed the game over condition to not check for Toad, updating the NPC condition to also not check for Toad makes sense.
  • FIXED: When Leila departs (this probably also applies to all other departures not triggered by talking to some NPC), if the rest of the party is in the back row and KO/Stone/Toad, Firion is revived with 0 HP and then pushed to the front row.
  • FIXED: When calculating successes in combat, if the actor is affected by Toad or Mini, the target always gets 0 successes too.

Restored:

  • FIXED: Preserve dead characters' row at the end of a battle.

And a couple of new things:

  • When opening the row menu with at least one character in the back row, there's a 1 frame glitch where characters are displayed in the front row; similarly, when the rest of your party is in the back row and you try to also put your top character in the back row, the character is shown in the back row for 1 frame before being moved back to the front row.
  • Monsters should probably not be killed by being Mini, since Mini is only a temporary ailment.

I forgot to mention this earlier, but I also reverted the minor optimization to the Japanese battle message diacritic display code that was in the same area as the battle message DTE code in the Chaos Rush translation, so we should be back to patch order not mattering.

redmagejoe

I think the mini behavior is fine, as it was maintained in the remakes. I have updated the first post with fixes and that other bug you mentioned.

Leviathan Mist

#437
I'm going to start a playthrough of the current version today, and post any updates here. I'll be using the current patch as of 6/27/20 and my additional INT-penalty rebalancing patch with it. Let me know if there's anything I should know before I begin. I have not decided whether or not I will stream it yet, I may stream parts of it. I should also ask, does the rebalanced patch need to be applied to a base Japanese ROM or one with a translation patch already applied?

Noside

Quote from: Leviathan Mist on June 27, 2020, 02:03:07 PM
I'm going to start a playthrough of the current version today, and post any updates here. I'll be using the current patch as of 6/27/20 and my additional INT-penalty rebalancing patch with it. Let me know if there's anything I should know before I begin. I have not decided whether or not I will stream it yet, I may stream parts of it. I should also ask, does the rebalanced patch need to be applied to a base Japanese ROM or one with a translation patch already applied?
Excuse me, is there a way I can get those patches too? I would like to play it that way as well. :)

redmagejoe

Quote from: Leviathan Mist on June 27, 2020, 02:03:07 PM
I should also ask, does the rebalanced patch need to be applied to a base Japanese ROM or one with a translation patch already applied?

The Restored version should go on top of a base JP ROM, though I think abw said he addressed that. Just to be safe though, I'd apply the translation patch after, since I haven't uploaded the updated version yet which doesn't touch code.