Users browsing this thread: 1 Guest(s)
"Valor" in FF6?

#1
Posts: 1,261
Threads: 250
Thanks Received: 11
Thanks Given: 7
Joined: Jun 2009
Status
Traitor
Valor (or Bravery) was a spell in many of the Final Fantasy games that would enable the user to double his or her damage. It began with FF6 Advance and has been used in most of it's chronological predecessors.
Would this ability be hard to implement? It's wanted more than ever because we can all exceed 9999 damage. Smile
  Find
Quote  

#2
Posts: 3,966
Threads: 279
Thanks Received: 234
Thanks Given: 56
Joined: Oct 2011
Reputation: 65
Status
Tissue-aware
Well the only way I see how it could be made is that you would have to create a new status or replace an existing one. If it was from a piece of equipment, you could modify the damage algorithm in consequence but since it is a spell you need to know if it has been cast one the character or not. If the character has the valor status, you double the damage by adding a branching to the damage algorithm. It's a bit the same idea when received damages are cut in half if morphed:

Code:
C2/0D17: B9 F9 3E     LDA $3EF9,Y
C2/0D1A: 89 08        BIT #$08
C2/0D1C: F0 04        BEQ $0D22   (Branch if not morph)
C2/0D1E: 46 F1        LSR $F1
C2/0D20: 66 F0        ROR $F0     (Cut damage in half)

The current character status are loaded from here. This would be where you check to see if the character has the valor status:

Code:
$3EE4 : Status byte 1
$3EE5 : Status byte 2
$3EF8 : Status byte 3
$3EF9 : Status byte 4


The status set by an attack are store in $11AA to $11AD. There is no room for an additional status:

Code:
$11AA : Status set by attack 1 (Bit 0 = Blind, 1 = Zombie, 2 = Poison, 3 = M-Tek,
                                    4 = Invisible, 5 = Imp, 6 = Stone, 7 = Death)
$11AB : Status set by attack 2 (Bit 0 = Count, 1 = Weak, 2 = Image, 3 = Mute,
                                    4 = Berserk, 5 = Confuse, 6 = Seizure, 7 = Sleep)
$11AC : Status set by attack 3 (Bit 0 = Dance, 1 = Regen, 2 = Slow, 3 = Haste,
                                    4 = Stop, 5 = Shell, 6 = Safe, 7 = Wall)
$11AD : Status set by attack 4 (Bit 0 = Rage, 1 = Freeze, 2 = Life 3, 3 = Morph,
                                    4 = Spell, 5 = Hide, 6 = Dog Block, 7 = Float)

You could possibly add another status byte if you find safe and empty room in the RAM, but that would mean an insane amount of modification for the main reason that a status goes from
spell status ---> current status ---> status to set ---> permanent (or temporary) status ---> field status (if applicable).

In each of these step the data is stored in a new 4 bytes and in each case those 4 bytes are next to each other. This is why the easiest solution is to modify an existing status, with everything that comes with that, such has modifying every place where the old status was checked and adding a check to the damage routine for your new status.
  Find
Quote  

#3
Posts: 1,261
Threads: 250
Thanks Received: 11
Thanks Given: 7
Joined: Jun 2009
Status
Traitor
Sounds like it's way out of my hands. Tongue
  Find
Quote  

#4
Posts: 290
Threads: 3
Thanks Received: 40
Thanks Given: 1
Joined: Apr 2012
Reputation: 9
Status
None
It shouldn't be too difficult to implement this if you're replacing an existing status.

Creating a new one is quite a bit more involved, but there is free space in the RAM if you don't care about portability to FF6j. $1CF8 - $1D27 (47 bytes) are used for the bushido names in the Japanese version, but they're not used in the US version. Then it's just a matter of adding your own checks in the proper places. It would probably be similar to the blind status in that it's really only checked for in one place.


GET A SILK BAG FROM THE GRAVEYARD DUCK TO LIVE LONGER.

Brave New World
  Find
Quote  

#5
Posts: 341
Threads: 12
Thanks Received: 0
Thanks Given: 2
Joined: Sep 2010
Reputation: 5
Status
None
You could just remove all the references to the Berserk code that check to see "If Berserked, then use the Berserk AI functions". Berserk already increases physical damage as a status.
Quote  

#6
Posts: 3,966
Threads: 279
Thanks Received: 234
Thanks Given: 56
Joined: Oct 2011
Reputation: 65
Status
Tissue-aware
(05-10-2012, 04:11 AM)DjinnAndTonic Wrote: You could just remove all the references to the Berserk code that check to see "If Berserked, then use the Berserk AI functions". Berserk already increases physical damage as a status.

It'S a good choice for the replacement but you would still need to modify berserk because valor isn't suppose to last all battle, unless I'm mistaken. And isn't there some commands that can't be selected (by AI) while berserked? I'm not sure... I think berserk also has an incidence on Lore learning. This would have to be confirmed.
  Find
Quote  

#7
Posts: 341
Threads: 12
Thanks Received: 0
Thanks Given: 2
Joined: Sep 2010
Reputation: 5
Status
None
Yes, there's a lot of AI mess tied into Berserk, but the documentation on that is pretty good. It'd be simple enough to go through the doc and just remove the AI restriction references to Berserk.
Quote  



Forum Jump:

Users browsing this thread: 1 Guest(s)


Theme by Madsiur2017Custom Graphics by JamesWhite