News: 11 March 2016 - Forum Rules
Current Moderators - DarkSol, KingMike, MathOnNapkins, Azkadellia, Danke

Author Topic: FF1 MMC5 Disassembly Updates  (Read 101161 times)

Vanya

  • Hero Member
  • *****
  • Posts: 1502
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #420 on: October 31, 2019, 08:13:18 am »
Yeah, no computer yet.
But I got a new job so maybe soon?

I'm just glad you've been able to make so much progress! :3

Runic...
How about having it only trigger when you get hit by a spell and it only negates the spell effect on the character using runic? That should make it less op.

Focus...
The version I was thinking of (and I may not even be remembering the name right) increases the damage of the next spell the user casts. So its basically just a magical version of BuildUp.

Actually, you might want to research 4 Warriors of Light on the final fantasy wiki as there are a plethora of interesting commands in that game.

Roving monster npcs would be cool for a bonus dungeon rather than making such a drastic change to the base game.

Jiggers

  • Sr. Member
  • ****
  • Posts: 274
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #421 on: November 01, 2019, 02:33:03 am »
Would that only counter the first (physical?) attack the BBelt receives, or all attacks until the BBelt's next turn? Given the BBelt's high damage output, countering multiple attacks per turn might be overpowered, but if it's only one attack, what's the incentive to counter vs. attacking normally? Counter might work better as a passive skill with a given chance to activate. If you want an active skill, some sort of non-elemental Chi blast thingy (possibly based on damage received, like a revenge skill?) could work instead.

I was thinking it would be set one turn, and stay active until they're hit. It would reflect the enemy's damage dealt back to them, on top of the black belt's normal damage output. If they start it in one turn, don't get hit, and do a normal attack the next turn, and get hit, it would come out to over 2 normal turns' worth of damage. And I guess the smart way to cheat it would be to try and ditch armour altogether to send that damage back... Really very opposite the Fighter/Knight's main role as party leader.

Runic: Honestly I never knew it did MP regen... Whoopsie. So, hm. I guess how I'd make it work is:
* Only affects the red mage using it.
* When an enemy casts a damage spell: Absorbs 1/4 spell damage as health (no other damage taken), and 1 MP for the spell's level.
* When an enemy casts a status-afflicting spell, and the status affliction is set to occur, 1/2 chance to absorb the spell for no status inflicted, and gain 1 MP for the spell's level. No MP gain on failure. If the status spell failed to cause an affliction in the first place, then gain the 1 MP for "absorbing" it.
* When an enemy casts a curing or good-status spell on themselves and each other, absorbs the FIRST use of the spell. If its a spell that is cast on the group of 9 enemies, then only 8 enemies get the effect.
* Absorbing a curative spell gives 1/2 the spell's curing potency, and the 1 MP.
* Absorbing a good-status spell gives the spell's status to the red mage, and no MP. Example: Enemy casts FAST on itself. Red mage steals it, gets the buff from FAST, and nothing else.
* Does not work on CURE4.
* DOES not work on party member's magic, unless the party member is Confused.

That all seem fair? Not too overpowered?

Focus:
Once I get Int stat working, I guess it could boost Int by a certain amount for, say, 3 turns. 9 Intelligence the first turn, then decremented by 3 each turn, until its back to its original value. Glad I thought ahead and put Intelligence as a backup stat that can be adjusted by magic...

... I'd love to play 4 Warriors of Light, actually...

But what's to make Pray not OP? It sounds like it'd be a small chance to fail, and on success its basically a free HEAL2. Are there any drawbacks besides the chance of failure? Lowered defense, lowered spell potency? I can see it having 4 different things it could do: Scan characters for -- hold on power might go out, posting and editing the rest of my thought in.

Roll a number, if 1, do Free Cure, if 0, do Cure Ailment.

Cure Ailment:
* Scan characters for an ailment. If no ailments, jump ahead to Part 2.
* If someone has an ailment, 1/2 chance to heal it, except if its death. Do nothing on failure.

Free Cure:
* Scan characters for missing HP (smart scan, not random selection that heals the one person at max health.) If no one is hurt, jump ahead to Part 3.
* If someone is hurt, 1/2 chance to do a slightly-lowered-potency Cure. Based on their health, may do Cure 2 instead (more than 75 HP missing or something like that.) Do nothing on failure.

Part 2:
Code reaches here if Cure Ailment failed. Do another random roll. If 1, do Free Heal. If 0, do Free Regen.

Free Heal:
* Roll again. If 1, Casts Heal 1 on the party. No lowering of potency because Heal 1 already sucks. If 0, fail. At level 20, does Heal 2 instead. At level 35, does Heal 3 instead.

Part 3:
Code reaches here if Free Cure failed to find any missing HP.

Free Regen:
* Just pick someone at random and do a 1/2 chance to give them lowest potency regen for 3 turns.
« Last Edit: November 01, 2019, 02:44:46 am by Jiggers »
I know exactly what I'm doing. I just don't know what effect it's going to have.

Vanya

  • Hero Member
  • *****
  • Posts: 1502
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #422 on: November 01, 2019, 01:00:27 pm »
Runic: sounds very fair, but overly complicated and inconsistent in its effects.

The original from FF6 simply negates the next spell that is cast and the user's MP is restored by an amount equal to the spell's MP cost. The effect lasts until a spell is absorbed or a different command is issued. Note that it will absorb ally spells, not just those cast by enemies. And you cannot take any other action while using it.

What makes it op, especially in the context of FF1, is that you can use it to steamroll enemy casters. Moreso if you have multiple characters with runic.

I think it should be as close as possible to the original to start with:

When you use runic, the effect lasts until a spell is absorbed or the start of the user's next turn.

I don't think it should do anything more than give you 1 mp. The main purpose is t to cancel a spell, not generating mp.

To prevent it from being op, the first measure is to note that it should not affect enemy skills. So Chaos should not get steamrolled just cause you have a red mage using runic in the party.

The next thing to consider is multiple runic users. They could potentially stop a whole party of casters. However, if you do that then your party is not attacking or healing. So it sort of self balances due to it's simplicity.

Now if you really want to limit it more, then my previous suggestion should be enough. Just make the runic effect personal. In other words, it only absorbs spells that directly target the user.

This way it doesn't fully interrupt spellcasting and you can kinda more reliably get back MP.

However, how to handle spells that target the whole party?

I suggest that in this case you can either simply negate the effect only on the runic user. Then they can either not gain any MP from it since they only absorb part of a spell, or you can set up counters to tally 1/4 MPs.

On a side note, you might consider having a level requirement for the class skills so that some of the more powerful commands aren't available right away.

Focus: if you want to go with that version of it, then that sounds really good. However, if you use a fixed value, then the skill will eventually be near useless at higher levels. I suggest using 1/2 the user's level, round up.

Pray: I remember it being pretty weak in that it might not work at all.

The original version in FF4 has a 50% chance to cast Cure on the whole party for free. It is a spell effect so the healing is split and it is subject to reflect etc.

To start, FF1 doesn't have the ability to split spells, but it does have the source of that concept in the form of the heal spell.

The simplest thing to do then is make it cast Heal with a 50% chance to fail.

The only problem is that it's less useful as you level up.

Maybe instead of only casting Heal, you can have it do more as you level up.

How about this? The failure rate is based on the user's level. Base rate is 76 - user's level. So at level 1 it only has a 25% chance of working. And at level 50 it has only a 25% chance to fail.

Beyond that, you could add more powerful Heal spells to it.

For example starting at level 16, if it succeeds it has 75% chance to cast Heal, otherwise it casts Heal2.

Then at level 32, when it would normally cast Heal2, it instead has a 75% chance to cast Heal2, otherwise it casts Heal3.

Basically, it would be a three tiered algorithm that does multiple percentile rolls.

How does that sound?

Jiggers

  • Sr. Member
  • ****
  • Posts: 274
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #423 on: November 06, 2019, 04:09:39 pm »
Runic: sounds very fair, but overly complicated and inconsistent in its effects.

Sounds like we're basically on the same page, though? Runic only affects the user for whole-party spells, only works on the first spell cast, then stops for the rest of the turn... I got confusing with the ailment stuff, and HP healing might be making it TOO useful, but... Basically we're thinking the same!

Quote
Focus: if you want to go with that version of it, then that sounds really good. However, if you use a fixed value, then the skill will eventually be near useless at higher levels. I suggest using 1/2 the user's level, round up.

How do you do rounding in ASM anyway...? Just add 1 if bit 0 is set, so its always even?

Quote
How about this? The failure rate is based on the user's level. Base rate is 76 - user's level. So at level 1 it only has a 25% chance of working. And at level 50 it has only a 25% chance to fail.

Oh, that's a good idea!

But again it sounds like we're thinking almost the same things. XD So that's good to know too.

I pushed a big update today--the RAM re-organization. Scan and Cover are live!

Scanning should always work. Cover should only fail if the character doing the covering is dead, stone, asleep, or fails the 50/50 paralysis roll.

...I need to add a check to make sure that if character who does the cover gets confused, they stop covering. Otherwise, they could attack the person they're meant to cover, then cover them, thus attacking themselves... While attacking themselves is something they're set to do if confused, covering while doing it is just silly.

Parry is not live yet!

Also lots of other stuff might be broken. Not all variables were labeled, and I probably haven't caught them all. There was a bug where instead of "tmp" it was still "$10" and it took me hours to figure out the problem. So I guess I'm due for another play through to make sure it all works as intended again.

But I got everything I noticed, so its time to start working on skills again. Yay!

Oh, and I moved the dialogue box up 1 tile so its not covering sprites' heads when you talk to them. The sprites on maps are 3 pixels higher than the tile they're on, so it kind of gives a 3d effect just a little bit, which is why they still poke into the box edges...
I know exactly what I'm doing. I just don't know what effect it's going to have.

Disch

  • Hero Member
  • *****
  • Posts: 2746
  • NES Junkie
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #424 on: November 06, 2019, 04:58:51 pm »
How do you do rounding in ASM anyway...? Just add 1 if bit 0 is set, so its always even?

Code: [Select]
LDA value
LSR A        ; divide by 2   (low bit moves to carry)
ADC #0       ; round up      (carry gets added)

; At this point, A is half the value rounded up

Jiggers

  • Sr. Member
  • ****
  • Posts: 274
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #425 on: November 06, 2019, 06:44:14 pm »
Oh! Hah, that makes sense. Thanks!

So Scanning is crashing after undrawing the box, but I don't know if that's something I changed since trying to make parrying work... I guess its best to wait 'til I fix them both again. Got some funky palette changes with black belts attacking. Its supposed to change their fist colours only, not the menu background and border... grr.

Fixed all that... but winning a battle crashes the game. It seems to be stuck in DrawBattleString or something similar to it, just drawing $FF over everything. Woops.

Edit: Anyone know how to use .dbg files? I tried to follow the instructions https://www.mesen.ca/docs/debugging/debuggerintegration.html here and the example https://forums.nesdev.com/viewtopic.php?f=10&t=11151 here ... but it doesn't seem to contain any label information for Mesen to load up.

Edit 2: Figured out how to make a label file, but the .dbg file still won't add labels to Mesen. The .dbg file has all the labels and everything... just won't import.

Edit 3: One step closer to success! Updated ca64 and ld65 and added in some fixes for the range check errors the new assembler whines about. There's some unused label warnings, I'll deal with those later. Mesen now imports the labels, and I can see them in the list on the debugger, but they don't show in the disassembly view. Like it still shows "JSR $FB84" instead of "JSR WaitForVBlank_L" ... so close though.

This is all updated on the github, too.

Its really going to be a nightmare to track this battle crashing bug down until I can get this sorted out.
« Last Edit: November 09, 2019, 03:28:14 am by Jiggers »
I know exactly what I'm doing. I just don't know what effect it's going to have.

Vanya

  • Hero Member
  • *****
  • Posts: 1502
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #426 on: November 10, 2019, 03:04:36 am »
Sounds like we're basically on the same page, though?

...

But again it sounds like we're thinking almost the same things. XD So that's good to know too.

Indeed! :3

Jiggers

  • Sr. Member
  • ****
  • Posts: 274
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #427 on: November 11, 2019, 08:38:50 pm »
So after getting some help from the NesDev discord, I got labels working in Mesen's debugger! Involved mucking about with the build.bat and cfg files some. Everything still works though!

Before I tackle Pray and Focus next, I still need to hunt down all the bugs from moving zero page ram around and all that... Meanwhile:





I'll fiddle with the colours and the postage stamp outline a bit more, but my friend did the flowery bits so I wanna keep that.

Now why won't .gitignore actually bloody well ignore the files I tell it to... I'm getting tired of unchecking the .dbg and so on...
« Last Edit: November 12, 2019, 12:25:23 am by Jiggers »
I know exactly what I'm doing. I just don't know what effect it's going to have.

daman.tm

  • Jr. Member
  • **
  • Posts: 12
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #428 on: November 12, 2019, 06:17:47 am »
Holy moly those screenshots are SEXY!
good stuff Jiggers!

Vanya

  • Hero Member
  • *****
  • Posts: 1502
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #429 on: November 14, 2019, 01:23:43 am »
Very nice!

Jiggers

  • Sr. Member
  • ****
  • Posts: 274
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #430 on: November 15, 2019, 02:32:19 am »
Thanks!

Focus is mostly done, I haven't tested it. Intelligence still does nothing, so... there's that problem.

Pray is being a little feisty, because I want it to be smart and not just a complete random toss up. So there's all the "making sure someone is hurt/has an ailment" stuff to do, which I need to test out, then have it actually do spell casting without doing spells. So that's probably another flag variable to set up somewhere that works ALMOST like the Confused casting one, but different.

Luckily I have tons of space there since taking the magic data out and loading it into RAM from another bank before battle starts worked nicely.

Someone asked for this a long time ago and so here's a sneak preview of something...

https://soundcloud.com/jiggery-ponkery/ff1-ruined-castle/s-ojSNw Just a basic NES soundfont for midi, no FF instruments.

I kind of want to load Pently into this game, I read it only uses 5 bytes of zero page and like #28 bytes of other stuff... compared to the $50 zero page bytes currently being used, and $23 bytes at $0300... And no noise support. But. Later, Jigs. Later. When everything else is stable...

November 21, 2019, 05:39:39 pm - (Auto Merged - Double Posts are not allowed before 7 days.)
https://cdn.discordapp.com/attachments/352436633955598346/646118638491009034/FF1_Ruined_Castle_-_NES.mp3

Done with that unless I need to lower the volume of the beeping stuff.

Thinking about how I can make 3 palettes for characters without the blue-tinted stone issue FF3 has. Currently the issue would be that any stoned character would turn to the colour of the weapon/magic being used! FF3 uses CHR-ROM, FF1 uses CHR-RAM. So here's the pros and cons of switching now.

Small Map Changes:
Con: 3 less unique NPCs per map. Each player sprite would be stuck with loading 3 other, unusable player characters. Unless each 12 possible character sprites share 3 rows of the same NPCs which is a bit wasteful space-wise.

The 12 possible NPC sprites would have to be grouped up depending on the map, resulting in some possible doubling up, unless they're arranged with thought ahead of time. Not too bad though: Castles, Towns, Dungeons basically. Mix and match 3 different 1k tiles, that's 4 NPCs each.

Sprite loading code would need to be re-written a little bit to account for NPCs using the same sprite graphic (instead of loading the same graphic several times for each sprite that uses it.)

Pro: Animating tiles would be so much easier apparently? Water, torches... Con: Would need to re-do some tile properties so the animated tiles are on the same 1k of tiles.

Overworld Changes:
Pro: Animating tiles again! Water motion! Waterfall motion! Castle flags moving in the wind (when the wind is brought back.) Con: I'd have to do some re-arranging AGAIN, as I already made the CHR for the overworld make much more sense...

Battle/Menu Changes:
Con: So much coding. Swap in appropriate battle background, draw it. Swap in appropriate enemy tiles and stoned character tiles, change menu background palette to grey, draw all that. Swap in text and change the menu colour back for the last third of the screen.

Con: Classes would be restricted to young/adult, maybe? Or else 10 classes total, with the dead pose being replaced by a generic cross or something.

For 10 classes, you'd have 4 rows of standing, 4 rows of crouching, and 4 rows of 2 classes walking/cheering, which gets replaced depending on which character is being animated. Then for cheering at the end, swap some standing/cheering rows back and forth, and same for having them all walking. Which would require a bunch more of doubling up the graphics in the ROM.

For 6 young/adult classes at a time, 4 rows of weapons would be replaced to make all 6 classes have their graphics available for sprites at all times. Then would have to swap the appropriate weapon graphics in and out...

Pro: I'm fairly confident this would allow 3 palettes for character sprites. Everyone wants that! It would free up space for more coloured-background menu tiles, as the black-background ones could be loaded with the stoned characters and drawn along side them. It would also allow for doing stuff with summons without turning the screen off to write in new sprites.

At the moment, the battle cons are making me re-consider thinking about this any more. I know I for one would prefer 12 unique classes in my own game, more than I'd need a new palette. Honestly I'd probably just get rid of the Stone ailment altogether for the extra palette. And tile animations can be done by drawing to CHR-RAM in between frames anyway.

Edit: Yeah, I'm not going to change the way graphics are loaded after all. I'll set up a way to use 3 palettes by changing Stone to Stopped or something.
« Last Edit: November 22, 2019, 06:28:48 pm by Jiggers »
I know exactly what I'm doing. I just don't know what effect it's going to have.

Jiggers

  • Sr. Member
  • ****
  • Posts: 274
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #431 on: November 24, 2019, 03:04:29 am »
Github updated!

Focus and Pray now work, I haven't tested them super thoroughly, but they behave mostly how I expect now.

Pray will not message what its doing... but it will do something useful, when it does something at all. Since you can't Guard and Pray at the same time, a little squiggly praying icon shows up where the Guard shield usually is. The character crouches, so I figured, it should look different from being paralyzed... but it needs to look MORE different. What kind of icon best represents praying??

If praying while Mute, it will just try to cure the Mute ailment, along with any other ailments. Honestly, the AI for this is pretty robust enough, I didn't want to add in ANOTHER round of "what ailment of however many they have should be healed if only one ailment is healed?" so just... heal 'em all except Stone and Death.

What! No Stone?! NO. It's GONE. Its been replaced by Stop! It behaves the exact same way, but now you just freeze! You still turn grey on the main menu... working on that. In fact, a lot of backend stuff is still a little broken with the change of names regarding Soft and the Wakeup Bell. Instead of a Soft, I figured... for the magic, Flow sounded good. Time flowing. So there's a Flowing clock with the clock being the icon for Stop, and then I was like, well, there's a clock now, why have a bell?

With Stone no longer needing to keep the fourth sprite palette static, I was able to set up a third character palette. I gave the Thief some brown hair and dark leathers, the Ninja gets a nice darker outfit instead of his jimjams. While poking around there, I figured out how to give the map sprites more character, and went and fixed some colours there as well. Instead of everyone needing to be pink-skinned, you can now set both colours in lut_MapmanPalettes in Bank 12. I gave the thief a slightly lighter shade of yellow than the battle sprite since he looked weird. The browns don't really compliment each other that much. But the Black Belt and Master look GREAT.

I also went and re-ordered the palette colours a bit, and swapped the sprite bits, so all skin tones are on the right side, just in case I figure out some way to make you able to choose what palette a sprite uses, they'd be less weird...?

What else... Oxyale spring now actually shows the dialogue. I added another colour or two? (maybe just one) to the battle background options. Added another option for the battle message speed and reset it back to almost-vanilla settings. I remembered that while 2 seconds may be a lifetime for most players, there will be people who will appreciate having time to read the battle messages. Learning the language, or just slow readers. SO many games I can't play because of issues like that.  :(

Also made even MORE room in Bank C by moving the magic message LUT into the magic data, since the last byte of each spell was unused. Oh, yes, and there's 16 special Battle Spells - while I can't expand normal spells without a significant re-write of menu mechanics, I CAN make more spells available to be used for items and other neat effects. So the planned Battle Spells are:

Heal, Heal 2, Heal 3 - used by Pray. I will swap them back with Regen soon, so that Regen is special, and Heal can be used in the main menu again.
Counter - so that an item can give you the retaliate-like-a-black-belt thing, and so enemies can use it as well (scary)
Reflect, Reflect 2 - Single target and party-wide Reflect, the way it works in the other games, once I code that in somehow.
Scan - Yeah, everyone wants Red Mage/Wizard to have Runic instead, and until I get to the point where there's so many battle skills that I need to make the Skill submenu return, I'd rather not just ditch Scan entirely! So putting it in a battle item is a good way to keep it around.

What other spell effects can I code in? Get real crazy! Animations are real limited, but what would you like to see outside of the game's usual structure? CONTROLLING ENEMIES???? DOING ENEMY ATTACKS?????



Update on Runic: What a headache ability! But its coming along.

Things get more complicated when Confused magic comes up.
First:
* Requires an equipped weapon to use
* When any spell is being prepared, it checks to see if any character is using Runic, and sets a flag if so
* Does not activate for enemy special attacks, or the Counter battle spell which counts as a special attack in this case

Trying to get the logic to be like this:

Enemy > Single Enemy =  Activate a Runic user at random
Enemy > All Enemies =  Activate a Runic user at random for one hit of the spell, for each Runic user
Enemy > Single Player = Try to activate the target first; if not using Runic, activate another user at random
Enemy > All Players = Runic will only activate when the spell hits a Runic user
Player > Enemy = No activation
Player > All enemies = No activation
Player > Player = No activation
Player > All Players = No activation
Confused Player > Enemy = Activates a Runic user at random (but not if the Runic user is the caster!)
Confused Player > All Enemies = Activates a Runic user at random for one hit of the spell, for each Runic user (but not if the Runic user is the caster!)
Confused Player > Player = Try to activate the target first; if not using Runic, activate another user at random (but not if the Runic user is the caster!)
Confused Player > All Players = Runic will only activate when the spell hits a Runic user (but not if the Runic user is the caster!)

It's a lot of different variables to account for, and going to take a while to get it all right. I don't think this is too complicated, and I don't want to simplify it any more. The idea is tactical usage. The cases for using it while needing to cast your own spells are more important than absorbing the next spell cast by anyone at all in any circumstance, I feel.
« Last Edit: November 24, 2019, 08:47:20 pm by Jiggers »
I know exactly what I'm doing. I just don't know what effect it's going to have.

Vanya

  • Hero Member
  • *****
  • Posts: 1502
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #432 on: November 25, 2019, 01:53:56 am »
Bravo on all the progress!

One thing, tho.
Y U take away my stone?
Is changing everything associated with the stone ailment really worth it to avoid a blue tinted statue?
I guess I just don't like the idea of changing it because now it isn't really stone, nor is it really stop anymore.
And what about the stop spell?
And the churches?
I feel like this is gonna break too much lore in the base game.

It's your project of course, and I'm in no position to protest since I'm unequipped to help find an alternate solution, but this is definitely one change I would undo.

Anyway...

Pray defaulting to ailment removal when you are mute is brilliant!! Love it!

Your runic logic sounds as simple as you can get considering its a 16-bit era idea you're recreating. One thing that came to mind tho, would it be any simpler or easier or beneficial if instead of picking the runic to trigger at random you instead just use the turn order?


Get crazy, huh?

To start with, Control and Blue Magic sound freaking awesome.
They don't really have any classes that they make sense to attach to, but that's fine.

Question, tho.
Are these extra effects tied to single use items or are you thinking at all about items you can equip?
Kinda like the relics in FF6 or the command materia in FF7?

Anyway, getting back to crazy ideas...

Jump, pretty basic, don't remember if this was mentioned before.

Sketch, you already have the enemy graphics loaded so why not?

Tools, I always wished that Edgar's tools weren't just bought, but instead you had to buy or find components that you could combine to make the tool like real engineer. Maybe, you could make it so that the character needs to equip 2 items in their extra slots and if they are compatible they give you the specific tool as a command. Like if you equip a motor and a spiral bit you get the Drill command. Equip the bulb and battery to get the Flash command. And the first time you use the command, you could "use up" the components and gain the actual tool as an item. Is that crazy enough?

Dark Wave from FF4 would be great.

Gird also from FF4 would be be good if it was something more than just a personal protect + shell. Maybe have it work off level?

Throw because ninja.

Coin Toss because samurai.

Sword Spirit / Draw Out from FFTactics. The actual effect would depend on which weapon you have equipped.

If you can get summons working, then Capture as in FF5. This would basically be the same as Sketch except you can keep one and unleash it later on.

Animal Call from FF5. Random helpful creatures tied to the environment.

Geomancy from FF3. Basically the same as animal call but with a different set of effects and a chance to blow yourself up a bit.

Sing could require you to equip an instrument in one of your extra slots and then produces different beneficial effects based on the other item you carry. So lets say you hold a harp and a cure scroll. Then you could use sing to create and sustain a minor regen effect on the whole party.

Dance would be the inverse of sing. You gain it by equipping dance shoes and produces specific attacks depending on the other item yu carry. In this case you hold the dance shoes and an antidote to do a poison attack on the selected enemy.

Terrain is another thing I always wanted to do. In this case I'm referring to the part of Mog's dance skill that actually changes the terrain type you are on. On it's own it isn't much, but if you bring back the command menu, it could be paired with animal call or geomancy and your equipped elemental weapon to give you more control.

That's all for now. I have to get to bed. Zzzzzzzz...

Jiggers

  • Sr. Member
  • ****
  • Posts: 274
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #433 on: November 25, 2019, 06:01:03 pm »
Quote
Question, tho.
Are these extra effects tied to single use items or are you thinking at all about items you can equip?
Kinda like the relics in FF6 or the command materia in FF7?

Equippable items, unlimited use. Though I guess I COULD make a "break after X uses" thing... Have some shops sell wands that can cast a spell a certain number of times...

Quote
Is changing everything associated with the stone ailment really worth it to avoid a blue tinted statue?

Hmmm... yes!
Its not just blue-tinted... FF3 somehow makes a ton more space for graphics. The reason they're blue-tinted is because they use the menu palette and end up being drawn as background tiles. FF1 uses the cursor palette, and sprites. So to get 3 unique character palettes, the 4th would have to change for the weapon and magic sprites... making every stoned character flash pink, green, blue, whatever... 



In the event viewer...

Code: [Select]
FB8E 8 145 Mapper Register Write $5114 $AE
FB98 8 199 Mapper Register Write $5115 $AF
FB8E 9 62 Mapper Register Write $5114 $B4
FB98 9 116 Mapper Register Write $5115 $B5
FB82 151 30 IRQ
FB38 151 87 PPU Register Write $2000 $98
FB3D 151 108 PPU Register Write $2005 $00
FB42 151 129 PPU Register Write $2005 $00 2nd Write
FB45 151 141 Mapper Register Read $5204 $C0
FB8E 151 312 Mapper Register Write $5114 $B6
FB98 152 25 Mapper Register Write $5115 $B7
89B8 152 277 Mapper Register Write $5115 $B8
FB8E 162 29 Mapper Register Write $5114 $B4
FB98 162 83 Mapper Register Write $5115 $B5

Its doing something to use the sprite graphic area as tiles after scanline 151 (where it starts drawing the battles messages)?

If they were able to do this I don't know why they don't also change the background palette as well! That would solve everything!

Anyway, it is easy enough to undo. Changing the weapon and magic palettes to use 3 again would be harder--though you could just set the third palette to grey and make the battle cursor use that instead.

The Stop spell does paralysis, actually... Hm. Break does stone, but that could be viewed as "Time Break" as well. Why would an enemy attack called Poison say "Poison gas" then turn you to stone? FF1 never made sense.

I think all the spells and enemy attacks will need to be re-evaluated... But that's not what I want to do. I'm still in the "giving people tools to do their own thing" stage.

Quote
Sketch, you already have the enemy graphics loaded so why not?

XD A little too crazy, sadly. Can't reverse background tiles, so it'd only draw the enemy facing the players still... I think Throw might be feasible to start with...! Maybe!
I know exactly what I'm doing. I just don't know what effect it's going to have.

Vanya

  • Hero Member
  • *****
  • Posts: 1502
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #434 on: November 26, 2019, 07:43:36 pm »
Hmmm... yes!
Its not just blue-tinted... FF3 somehow makes a ton more space for graphics. The reason they're blue-tinted is because they use the menu palette and end up being drawn as background tiles. FF1 uses the cursor palette, and sprites. So to get 3 unique character palettes, the 4th would have to change for the weapon and magic sprites... making every stoned character flash pink, green, blue, whatever... 



In the event viewer...

Code: [Select]
FB8E 8 145 Mapper Register Write $5114 $AE
FB98 8 199 Mapper Register Write $5115 $AF
FB8E 9 62 Mapper Register Write $5114 $B4
FB98 9 116 Mapper Register Write $5115 $B5
FB82 151 30 IRQ
FB38 151 87 PPU Register Write $2000 $98
FB3D 151 108 PPU Register Write $2005 $00
FB42 151 129 PPU Register Write $2005 $00 2nd Write
FB45 151 141 Mapper Register Read $5204 $C0
FB8E 151 312 Mapper Register Write $5114 $B6
FB98 152 25 Mapper Register Write $5115 $B7
89B8 152 277 Mapper Register Write $5115 $B8
FB8E 162 29 Mapper Register Write $5114 $B4
FB98 162 83 Mapper Register Write $5115 $B5

Its doing something to use the sprite graphic area as tiles after scanline 151 (where it starts drawing the battles messages)?

If they were able to do this I don't know why they don't also change the background palette as well! That would solve everything!

Good news! I have access to a laptop now!
I'm going to have a closer look at all of this in the next couple of days and see what I can come up with.


Anyway, it is easy enough to undo. Changing the weapon and magic palettes to use 3 again would be harder--though you could just set the third palette to grey and make the battle cursor use that instead.

Well, I have every intention of wrangling this thing so we can have 3 player palettes AND a reasonable stone palette. It will be one of my short term goals. I have spoken. (Yeah, been watching a lot of The Mandalorian.)


The Stop spell does paralysis, actually... Hm. Break does stone, but that could be viewed as "Time Break" as well. Why would an enemy attack called Poison say "Poison gas" then turn you to stone? FF1 never made sense.

To be fair, the original game is full of bugs, data entry errors, and just bad translations.
I should point out tho, that the element used by stone is also the one used by every poison effect in the game that bothers having an element at all. That's why a lot of the documentation for the game's mechanics often call it the poison/stone element.


I think all the spells and enemy attacks will need to be re-evaluated... But that's not what I want to do. I'm still in the "giving people tools to do their own thing" stage.

When FF1 was remade they did exactly that.
One of the problems here is that status effects are not treated as separate from other spells.
There are 8 elemental bits. 3 are the basic elements; fire, ice, and lightning.
Death and time effects each use their own elemental bit.
Poison/Stone also have their own bit. (And IIRC this is the same byte used for "earth" elemental spells too.)
That leaves 2 elemental bits for every other status effect in the game.
And the elemental bits is the only way the game evaluates if your character has resistance to the status effects.
This is why FF1 doesn't have the ability for equipment to have specific status protections.

Since we're on this subject, is there enough space to upgrade the status effect system?
Can more bytes be added to handle status resistance and allow spells to use a full 8 bits for elements and another 8 for status effects?

If this were possible it would certainly open up the design space for spells more.


XD A little too crazy, sadly. Can't reverse background tiles, so it'd only draw the enemy facing the players still... I think Throw might be feasible to start with...! Maybe!

I thought tools would have been the craziest one. :P

Jiggers

  • Sr. Member
  • ****
  • Posts: 274
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #435 on: November 26, 2019, 09:39:59 pm »
Tools is complex, but its not impossible. XD

So I just learned that I can do what FF3 does, and try to do the palette change for the menu as well. The issue then is just figuring out how to completely change how sprites are loaded. Instead of having $20 tiles for each character, I might just make it the 6 each one uses at any given time, if there's enough code time to load 'em up in VBlank.

Today's big project has been moving enemy AI data to RAM; loading it up from a different bank and having it available for reference. Came up with a more random way to do spells and special attacks, and there's room for EACH ENEMY, not just 30 or so AI types. So its wild. There's now room for 1 more special attack and 1 more spell per list as well, and it frees up 3 more enemy stat bytes. And I also used the high bits of numhits to act as an extra byte for making some enemies do more than 1 targeted physical attack per turn. So now Kary can do 3, Kraken can do 4, (that might be overkill), and so on. All coded and theoretical until I test it some other day, though.

So you're asking to make 2 elemental bytes basically? So one is...
Fire, Ice, Lightning, Earth, and four others
And one that's:
Confuse, Mute, Sleep, Stun, Darkness, Poison, Stone, Death

The answer is... probably.
btl_attacker_class and btl_attacker_hidden can be combined into one, (high bits, low bits), making more room there...
Same with btl_defender RAM stuff.

Players have at least one byte free in save ram, but honestly I don't think they need a whole byte for hit multiplier--before battle starts, its always 1, unless they're an unarmed BB/Master. So that can be calculated in battle.

Weapons and armour can have more stats added on for sure.

The question is, for spells: Is this for spells that do status ailments ONLY? If so... great. Because then I can use the message byte, since they have their own message code! I really don't want to make things more than 8 or 16 in RAM because its so much easier to read and calculate when its not all offset weird. Duh, they already have the byte set to DO the ailment in the first place... So its just compare Effectivity to Status Resistance.

Yay for the laptop, too!

Update: Added in Status Resist for enemies and player armour. Trying to make sure its getting loaded up right, but getting sleepy. Do I risk making mistakes, or risk forgetting what the hell I'm doing next time I look at it?

Stage 2 will be implementing it into physical and magical attacks.

I went and added weapon ailments, weapon ailment chance, and critrate to things spells can edit, too. Element and category were already there. So there's another thought: Mystic Knight! Spend MP to buff your weapon or something!



« Last Edit: November 27, 2019, 12:11:40 am by Jiggers »
I know exactly what I'm doing. I just don't know what effect it's going to have.

Vanya

  • Hero Member
  • *****
  • Posts: 1502
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #436 on: November 27, 2019, 02:45:35 am »
You're amazing!
And fast, too.

1) Get your rest!

2) Post-its are your friend!

Mystic Knight is a great idea.
I was actually thinking of changing the Red Wizard into Mystic Knight in my personal project.
They always struck me as the natural evolution of the Red Mage.
Hell, in FF Dimensions, the Red Mage actually gets the Sword Magic ability.
Actually, I just looked it up to refresh my memory, and it turns out they get Runic Blade, too.
Here's a thought; all jobs start with one special skill and they gain a second at a certain level.
With 12 jobs in the game that would make 24 unique skills.
Is that doable or too crazy?

Orochi Kusanagi

  • Jr. Member
  • **
  • Posts: 85
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #437 on: November 27, 2019, 04:24:08 pm »
Red Mages in FF11 could also do the en- spells to their weapons which added additional elemental damage on melee attacks. I always felt Mystic was the upgrade to Red as well.

Jiggers

  • Sr. Member
  • ****
  • Posts: 274
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #438 on: November 28, 2019, 11:12:22 pm »
Looks like Red Mage is gonna get lots of love...

https://docs.google.com/document/d/1vXa_OLn408BxQ2GpIRRnGNPRJliOv_YBiP21ARdnhxo/edit?usp=sharing
Don't forget this! If you find any bugs or have specific ideas or requests, add 'em in. Anyone can edit it.

Unlocking more skills at a certain level is doable, but more than 1 per class is going back to the "Skill" submenu in battle. I was trying to avoid that... but at the rate I'm adding things...

I also wanted to make a kind of FF5 menu where you can choose what skills each character can use. Or other little things like... Hide when at critical health. Really customize them without really getting to the job changing thing yet.

I REALLY need to bugtest the stuff I've done but I don't wanna. Instead, I re-did the magic decompression code and freed up lots more Fixed bank space. Like 64 bytes at least, probably a bit more! I'm now extra proud of it.
I know exactly what I'm doing. I just don't know what effect it's going to have.

Vanya

  • Hero Member
  • *****
  • Posts: 1502
    • View Profile
Re: FF1 MMC5 Disassembly Updates
« Reply #439 on: November 29, 2019, 10:21:13 pm »
You mean learning skills from each class?