øAslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&action=profile;u=278;area=showposts;start=1035e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/index80bd.htmlslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&action=profile;area=showposts;u=278e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/index80bd.html.zx×åg^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ0P.ª#OKtext/htmlISO-8859-1gzip@øÕª#ÿÿÿÿÿÿÿÿTue, 10 Mar 2020 19:25:34 GMT0ó°° ®0®P®€§²ð®Öåg^ÿÿÿÿÿÿÿÿ¥+ª# Show Posts - chillyfeez

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - chillyfeez

1036
If I'm not mistaken, the subroutine that makes the summon orbs appear and makes the party disappear is the same one that subtracts 31 and adds 4D to the current subaction. If I'm right about that, then there would still be significant problems... I think this was all done just so Asura could choose from three different spells. What a waste...

1037
Grimoire - do you mean what happens if you cast 4D imp instead of 31 imp? They never disappear, and the palette will be wrong, too. I haveno clue why, considering the fact that the party's reappearance s coded into that part of the spell...

1038
Hi, LordGarmonde, and welcome. It was only about a year and a half ago that I started posting here. In addition to being a vast storehouse of knowledge on the subject, this is a great place to level-grind ffiv hacking skills by bouncing ideas off of others.

Anyway, this is something I've wondered out loud about before, but haven't actually ever looked into. I don't believe I've ever seen any documentation on changing world map geography, aside of course from actually editing the map (with yousei's or by hand with a hex editor). I'd be interested in seeing what you come up with.

One caveat about the tools you're using: yousei's uses only version 1.0, and FF4Kster is really only fully compatible with v1.1 (specifically, it won't properly modify battle commands and level up data for v1.0, possibly more). Best workaround for this is to make map edits with yousei's, then patch the changes into a 1.1 ROM for use with pretty much any other editing tool.

You might try, by the way: find where in RAM the game loads the current world map data (might be known, I'm not sure), set a breakpoint to one of the tiles that changes with an event, then set and clear the event flag to observe the changes. Hope that helps!

1039
Final Fantasy IV Research & Development / Re: Fun with Summons
« on: November 23, 2013, 03:56:12 PM »
OK, here's the complete disassembly with explanation:

Code: [Select]
$03/DB5F A2 00 00    LDX #$0000              ;Load Character slot 1
$03/DB62 BD 03 20    LDA $2003,x[$7E:2003]   ;Check status byte 1
$03/DB65 10 0F       BPL $0F    [$DB76]      ;If not dead, skip ahead
$03/DB67 29 7F       AND #$7F               
$03/DB69 9D 03 20    STA $2003,x[$7E:2003]   ;Remove Dead status
$03/DB6C BD 07 20    LDA $2007,x[$7E:2007]   
$03/DB6F 18          CLC                     
$03/DB70 7D 02 20    ADC $2002,x[$7E:2002]   
$03/DB73 9D 07 20    STA $2007,x[$7E:2007]   ;Add amount of current level to current HP
$03/DB76 C2 20       REP #$20               
$03/DB78 8A          TXA                     
$03/DB79 18          CLC                     
$03/DB7A 69 80 00    ADC #$0080             
$03/DB7D AA          TAX                     
$03/DB7E E2 20       SEP #$20               
$03/DB80 E0 80 02    CPX #$0280             
$03/DB83 D0 DD       BNE $DD    [$DB62]      ;Perform the previous steps on the remaining four Character slots
$03/DB85 A9 40       LDA #$40               
$03/DB87 8D EB 29    STA $29EB  [$7E:29EB]   ;This loads 40 into that mysterious "bitmask of status ailments set to expire"
$03/DB8A 8D ED 29    STA $29ED  [$7E:29ED]   ;portion of RAM. I don't know exactly what other purposes this area has, but I
$03/DB8D 8D EF 29    STA $29EF  [$7E:29EF]   ;do know that live characters have a 40 in their respective slots here, and
$03/DB90 8D F1 29    STA $29F1  [$7E:29F1]   ;dead ones have a 00. Interestingly enough, without adding 40 here, the
$03/DB93 8D F3 29    STA $29F3  [$7E:29F3]   ;character will come back to life, but will take no turns in battle.
$03/DB96 4C 88 D3    JMP $D388  [$03:D388]   ;Jump to damage determination routine (for target monster(s)).

You'll notice that, at the end, the Phoenix routine simply jumps to the normal damage spell routine (used for fire/ice/lit, etc.). One could, in theory, change this jump to any other spell effect, or could change the element from fire to something else (this is stored in the normal spell elemental data). Of course, doing any of that would alter what we've come to know as Phoenix.

There's also a patch and save attached, for those who want to see the whole thing in action. The patch should be applied to a FF2US v1.1 ROM. It will only turn Odin into Phoenix, so this can be patched in to any hack seamlessly.

I was thinking - story-wise, King Baron could join your party as Phoenix just as sensibly as he could join your party as Odin. After all, he has died and is sort-of coming back to life. I mean, Phoenix is a bird, not a guy, but Leviatan is a sea serpent and Bahamut is a dragon, but they both look like people when you talk to them, so obviously the game's mythology is cool with this idea.

Anyway, have fun!

1040
Final Fantasy IV Research & Development / Re: Fun with Summons
« on: November 22, 2013, 10:22:23 AM »
I wrote some code for a Phoenix summon:
Code: [Select]
A2 00 00 LDX #$0000
BD 03 20 LDA $2003,X
10 0F BPL $0F
29 7F AND #$7F
9D 03 20 STA $2003,X
BD 07 20 LDA $2007,X
18 CLC
7D 02 20 ADC $2002,X
9D 07 20 STA $2007,X
C2 20 REP #$20
8A TXA
18 CLC
69 80 00 ADC #$0080
AA TAX
E2 20 sEP #$20
E0 80 02 CPX #$0280
D0 DD BNE $DD
A9 40 LDA #$40
8D EB 29 STA $29EB
8D ED 29 STA $29ED
8D EF 29 STA $29EF
8D F1 29 STA $29F1
8D F3 29 STA $29F3
4C 88 D3 JMP $D388

The intention is for this to replace Odin, since he sucks and has a unique spell routine. This spell will perform an attack on all monsters and revive all fallen party members with an amount of HP equal to their current level (just a small amount so as not to be too cheap a move). Getting a phoenix image took a while.. had to sort-of copy from FFV, except FFV's summons are 4BPP, so I had to copy a picture from the web and open it in paint.. very complicated, but it works. I'll post some pics and explain the disassembly, later when I have the time.

Maybe a patch, too...

1041
OK, so I just tested Asura for myself and I was clearly mistaken... I'm wondering, any chance she was broken in v1.0 but fixed in v1.1?

As for Salve, though, Still no luck:


I swear I'm not making this up. All I did was take a clean 1.1 ROM, change Salve from Cure1/Cure1/Cure1 to Life/Life/Life and give it to Cecil. And no, it's not just Cecil. Tried it with Kain, too... Maybe try it with a natural magic user?

1042
Yeah... and while we're at it, I don't recall ever seeing Asura's multitarget working in the SNES version of the game... I mean ever. What am I missing that everybody else in the world seems to have been seeing since forever?

1043
I thought so, and I actually tried multi-targeting salve with Life as its effect and it didn't work for me, so I assumed I had misunderstood what you were saying.

1044
Hey - did you guys know that if you force-target only dead party members, multi-targeting life spells works? It's true. For instance, if the characters in slots 1 and 2 are dead, another character casts Life1, and during the "chanting" portion of the cast you manually change the targeting byte ($2054, x) to C0, Life1 will successfully revive both characters.
Now, how to make this work without cheating...

1045
Final Fantasy IV Research & Development / Re: AI Index Reference
« on: November 20, 2013, 10:55:32 AM »
Thank you, very much, for this. This will be extremely useful information.

1046
Final Fantasy IV Research & Development / Re: Whose turn is it?
« on: November 10, 2013, 09:31:08 AM »
Granted I haven't updated my FF4kster since September or so, but the version I have is still compatible. The only thing this does is change a command pointer (the one for the unusable "game crash" command) and adds some code into a place that was previously all "FFs."
I would be concerned about how the patch might affect the version that you release once Grimoire is done breaking down his command editables that he is working on for you presently, since that deals directly with code in the battle commands (though none of what he is posting overlaps with any of the code in my Mime patch).

1047
Final Fantasy IV Research & Development / Re: Whose turn is it?
« on: November 09, 2013, 12:50:56 PM »
OK - Figured it out with a relatively simple fix - the disassembly and patch are updated in the post above.

For those interested, I followed the code from an unsuccessful jump (tried to jump on self for a guaranteed fail) to just outside of Jump's subroutine, then compared the trail with that of Fight and Mime. What I found was that Jump was loading "F8 03" into 7E33C6-33C7 somewhere before the subroutine, and Fight and Mime were not. Fight loads different values there, and Mime was loading nothing. So, I made a failed Mime load the same values a failed Jump does - Bingo! Now the player knows when a command can't be Mimed.

1048
Final Fantasy IV Research & Development / Re: Whose turn is it?
« on: November 08, 2013, 09:31:32 AM »
Will do. Thanks.

... so that didn't work.
 :bah:

I'm gonna try looking into this a bit, but honestly, I don't think it matters enough to spend a whole lot of time on... who would want to mimic crappy commands like Gird and Hide anyway?

1049
Final Fantasy IV Research & Development / Re: Whose turn is it?
« on: November 08, 2013, 12:13:28 AM »
By the way, Grimoire, any thoughts from your research on why "Nothing happened" isn't happening?

1050
Final Fantasy IV Research & Development / Re: Whose turn is it?
« on: November 07, 2013, 11:20:06 PM »
Well, "cleaning the code up" took a long time, and ended up making the code about twice as long - but I believe I accounted for all instances that would make the command screw up.
The patch is attached. Apply to a headered 1.1 FFIIUS ROM (won't work on any others). This will turn the Dummied "makes game crash" command (the one after Peep) into Mime.
The only typically available commands that can't be mimed are Gird, Cover and Hide - Plus Mime itself. All spells (including summons) will Mime perfectly but will cost the appropriate amount of MP (so test on a character with MP). Throw and Item work fine as well (miming item may not expend the item...).
You can only Mime party members - Miming monsters will fail (but you can use my Copy command to copy monsters' attacks).

Here's the disassembly:
Code: [Select]
$03/FEF0 C2 20       REP #$20               
$03/FEF2 A6 A6       LDX $A6    [$00:06A6]   ;Load active character's slot into x
$03/FEF4 E2 20       SEP #$20               
$03/FEF6 AD 51 27    LDA $2751  [$00:2751]   ;Load target's last action used into A
$03/FEF9 C9 0F       CMP #$0F                ;Is it Gird?
$03/FEFB F0 71       BEQ $71    [$FF6E]      ;If so, jump to the end (fail mime)
$03/FEFD C9 13       CMP #$13                ;Is it Cover?
$03/FEFF F0 6D       BEQ $6D    [$FF6E]      ;If so, jump to the end (fail mime)
$03/FF01 C9 09       CMP #$09                ;Is it Hide?
$03/FF03 F0 69       BEQ $69    [$FF6E]      ;If so, jump to the end (fail mime)
$03/FF05 C9 15       CMP #$15                ;Is it Mime?
$03/FF07 F0 65       BEQ $65    [$FF6E]      ;If so, jump to the end (fail mime)
$03/FF09 C9 22       CMP #$22                ;Is it Regen-in-progress?
$03/FF0B D0 04       BNE $04    [$FF11]      ;If not, skip to next check
$03/FF0D A9 19       LDA #$19                ;If so, change to Regen
$03/FF0F 80 1E       BRA $1E    [$FF2F]      ;Then jump past this round of checks
$03/FF11 C9 20       CMP #$20                ;Is it Twincast?
$03/FF13 D0 04       BNE $04    [$FF19]      ;If not, skip to next check
$03/FF15 A9 02       LDA #$02                ;If so, change to Spellcast
$03/FF17 80 16       BRA $16    [$FF2F]      ;Then jump past this round of checks
$03/FF19 C9 1E       CMP #$1E                ;Is it Jump's return?
$03/FF1B D0 04       BNE $04    [$FF21]      ;If not, skip to next check
$03/FF1D A9 06       LDA #$06                ;If so, change to Jump
$03/FF1F 80 0E       BRA $0E    [$FF2F]      ;Then skip past this round of checks
$03/FF21 C9 1F       CMP #$1F                ;Is it Charge's return?
$03/FF23 D0 04       BNE $04    [$FF29]      ;If not, skip to next check
$03/FF25 A9 0D       LDA #$0D                ;If so, change to Charge
$03/FF27 80 06       BRA $06    [$FF2F]      ;Then skip past this round of checks
$03/FF29 C9 1C       CMP #$1C                ;Compare to Show
$03/FF2B 90 02       BCC $02    [$FF2F]      ;If an earlier command, then continue
$03/FF2D 80 3F       BRA $3F    [$FF6E]      ;If Show or later, jump to the end (fail mime)
$03/FF2F 9D 51 20    STA $2051,x[$00:2051]   ;Store A in active character's next action
$03/FF32 AD 52 27    LDA $2752  [$00:2752]   ;Load target's last spell used into A
$03/FF35 C9 4D       CMP #$4D                ;Compare to (uncastable) Imp
$03/FF37 90 17       BCC $17    [$FF50]      ;If an earlier spell, skip past this round of checks
$03/FF39 C9 5A       CMP #$5A                ;Comepare to (uncastable) Asura #1
$03/FF3B B0 05       BCS $05    [$FF42]      ;If yes or higher, skip ahead
$03/FF3D 18          CLC                     
$03/FF3E E9 1B       SBC #$1B               
$03/FF40 80 0E       BRA $0E    [$FF50]      ;If (uncastable) Imp through (uncastable) Leviatan, then switch to the castable version and skip past the rest of these checks
$03/FF42 C9 5D       CMP #$5D                ;Compare to (uncastable) Bahamut
$03/FF44 B0 04       BCS $04    [$FF4A]      ;If yes or higher, skip ahead
$03/FF46 A9 3E       LDA #$3E                ;If (uncastable) Asura #1, 2 or 3, then change to castable Asura
$03/FF48 80 06       BRA $06    [$FF50]      ;Then skip past the rest of these checks
$03/FF4A C9 5E       CMP #$5E                ;Is it higher than (uncastable) Bahamut?
$03/FF4C B0 02       BCS $02    [$FF50]      ;If so, skip ahead
$03/FF4E A9 3F       LDA #$3F                ;If (uncastable) Bahamut, change to castable Bahamut
$03/FF50 9D 52 20    STA $2052,x[$00:2052]   ;Store A in active character's next spell to cast
$03/FF53 AD 53 27    LDA $2753  [$00:2753]   
$03/FF56 9D 53 20    STA $2053,x[$00:2053]   
$03/FF59 AD 54 27    LDA $2754  [$00:2754]   
$03/FF5C 9D 54 20    STA $2054,x[$00:2054]   ;Load target's last target into A, then store A into active character's next target
$03/FF5F A9 03       LDA #$03               
$03/FF61 20 C8 85    JSR $85C8  [$00:85C8]   
$03/FF64 A9 08       LDA #$08               
$03/FF66 9D 06 2A    STA $2A06,x[$00:2B46]   
$03/FF69 EE 0A 39    INC $390A  [$00:390A]   ;Apply the status that makes active character automatically take next action
$03/FF6C 80 0F       BRA $0F    [$FF7D]      ;Then skip ahead 
$03/FF6E A9 00       LDA #$00               
$03/FF70 8D CA 34    STA $34CA  [$00:34CA]   
$03/FF73 A9 F8       LDA #$F8               
$03/FF75 8D C6 33    STA $33C6  [$00:33C6]   
$03/FF78 A9 03       LDA #$03               
$03/FF7A 8D C7 33    STA $33C7  [$00:33C7]   ;Display "Nothing Happened."
$03/FF7D A9 DB       LDA #$DB               
$03/FF7F 8D C4 33    STA $33C4  [$00:33C4]   ;Apply the "Parry" stance
$03/FF82 60          RTS   

Because of the length of the code, I couldn't simply use Grimoire LD's shortened Peep extra space, because it takes up too much space. I discovered, though, that the last ~110 (hex) bytes in the 30000s (LoROM) are free, so that's where the Mime code is.

Oh, by the way, the only change this patch will make is to create Mime - you'll still have to assign the command to a character.

Enjoy!