Users browsing this thread: 1 Guest(s)
Multiple use "Morph" Commands

#1
Posts: 676
Threads: 44
Thanks Received: 26
Thanks Given: 21
Joined: Jan 2015
Reputation: 11
Status
Zombie
Scrolling through C2, and glancing at some of the morph notes got me thinking.

I know it's possible to have one command show up in a list based on the sprite/character its given to (that part DID work with possess, despite needing a little adjustment for the faster button pushers out there).

So... Why not multiple "Morph" commands? Yes, they'd still use the same timer (not worth the work or resources of multiple morph timers), but if the rate of burn was decreased, or nulled entirely in alternative uses... There would be several "IF then branch"s to do BUT...

I think it might be possible to have a guest actor of say... Cecil, from FF4, "Morph" and "revert" to DK Cecil, without removing Terra's Morph in the process... 

I've played with commands, not really morph to much admittedly, while mildly complicated in coding... I think it could work. Which would allow a semi permanent "guest" character to have useful (well, "Neat" at least) battle commands without a magic list.

Could do similar with Kain and Holy Dragoon Kain, but the difference between them is kinda mild as far as non-magic related commands go. 

Jump to "X-Jump" (dragon horn type) ? 

Regardless, does anyone know why it absolutely can't be poked?


The only true wisdom is knowing you know nothing.
  Find
Quote  

#2
Posts: 377
Threads: 34
Thanks Received: 10
Thanks Given: 7
Joined: Dec 2018
Reputation: 18
Status
Moog
The game takes a few RAM shortcuts because it's coded with the assumption that only one character will be able to attempt such a command.  In the case of morph, there is a ram value that specifies the party slot who used the command first as the 'morph' actor, which prevents anybody else from morphing until that RAM value is clear.  You're also going to run into some trouble with the timer, since again the game isn't set up to run more than one.  If you bypass that first check for somebody already being morphed, then the second character to morph in battle will be morphed permanently until they queue a revert command.

So if you want to do this, you might just want to scrap the timer altogether and make morphing permanent, but with some penalty attached instead (say... taking double magic damage instead of half while morphed).

The last hurdle you need to address is the graphic change imposed by the morph status.
Code:
C1/2F99:    BDC02E      LDA $2EC0,X        [Current Status for graphics]
C1/2F9C:    2908        AND #$08        [Check if morphed?]
C1/2F9E:    F015        BEQ $2FB5
C1/2FA0:    B96C7B      LDA $7B6C,Y        (load character sprite ID)
C1/2FA3:    C912        CMP #$12        (check if it's morphed Terra)
C1/2FA5:    F03F        BEQ $2FE6        (branch if so)
C1/2FA7:    A912        LDA #$12        (load morphed Terra sprite ID)
C1/2FA9:    996C7B      STA $7B6C,Y        (and save it as this character's graphic)
C1/2FAC:    205731      JSR $3157
C1/2FAF:    7B          TDC
C1/2FB0:    99707B      STA $7B70,Y
C1/2FB3:    8031        BRA $2FE6
The way this is programmed, it checks if the character's appearance is Morph Terra and changes it if not.  To make this work for multiple characters, you'll need to come up with a way to store or check their unmorphed character graphics.
Code:
C1/2FD1:    B96C7B      LDA $7B6C,Y        (load character sprite ID ?)
C1/2FD4:    DDAE2E      CMP $2EAE,X        (compare to battle sprite ID)
C1/2FD7:    F00D        BEQ $2FE6        (branch if both the same)
C1/2FD9:    BDAE2E      LDA $2EAE,X        (load battle sprite ID)
C1/2FDC:    996C7B      STA $7B6C,Y        (store as character sprite ID)
This is the 'character graphics refresh if not morphed or imp' that comes after, so you'd need to do something like load the battle sprite ID, compare it against the unmorphed character graphic ID, and then decide which morphed ID to use based on the result of that comparison.
  Find
Quote  

#3
Posts: 676
Threads: 44
Thanks Received: 26
Thanks Given: 21
Joined: Jan 2015
Reputation: 11
Status
Zombie
Bleh, I did forget it was treated, basically, as a status effect. Means more checks through normal code than ideal.

Placing a 4 byte call to subroutine in place of /2F9C - /2F9F would be easy enough, then multiple similar checks vs sprite IDs of the involved characters. Something similar for every other checking case as well.

At least that's what I had in mind. Similar code, repeated with different values for each case. Several lines of code, in several locations, but nothing overly complicated. Much beyond 1 MAYBE 2 extra cases of Morph would be pushing it though.

As for the timer, I kinda hoped to just not decrease it for the other cases. Possibly tweaking the other character to increase it as Terra does. If Terra used the entire timer, the other would be disabled for a few battles but... Passable, kinda. Ignoring it entirely probably would be better overall.

The other side of it, which I have never even thought of let alone seen, is the effects/bonuses of being "morphed", (or where its handled).

An entirely new command that swaps the sprite MIGHT be easier, with a conditional attack command dependant on the sprite (checked) at the command menu... Never tried that so not sure if easier or even more of a headache.

Considering it just took 3 days to write the entirety of Locke's scenario's event code (since it was COMPLETELY over written at some point previously) and I'm just now getting to fix replaced sprites in Doma Castle,

It'll be a minute before I get to this one. Just as I was saying, just seems like a way to fill a battle menu for a guest without a magic menu. Would take advantage of multiple full sprite sheets too, if practical.


The only true wisdom is knowing you know nothing.
  Find
Quote  

#4
Posts: 96
Threads: 5
Thanks Received: 0
Thanks Given: 0
Joined: Jun 2022
Reputation: 0
Status
None
This sounds amazing catone, hope u can work some way of doing it.
  Find
Quote  



Forum Jump:

Users browsing this thread: 1 Guest(s)


Theme by Madsiur2017Custom Graphics by JamesWhite