Users browsing this thread: 1 Guest(s)
Casting Spells Taught by Espers - RESOLVED!

#1
Posts: 89
Threads: 11
Thanks Received: 3
Thanks Given: 1
Joined: Dec 2015
Reputation: 3
Status
Debrave
I have reached my wit's end and humbly beg for a second pair of eyes.  But first, a lengthy prologue!

One of my major pet peeves about how Final Fantasy VI handled magic was that you had to wait  until the spell was learned 100% in order to cast it. Why not just let the spell be cast as long as the Esper was equipped, but also gain progress towards learning the spell?  That way, when it was fully learned, the Esper could be de-equipped but the spell would remain in the menu.

Years later FFIX and FFTA used the same ability learning system, except it was tied to equipment. I wanted this tweak for the Final Fantasy VI spell-learning system as well. However, I suspected that this would be impossible to accomplish, since no one had done this before. Furthermore, despite being at the periphery of ROM hacking for ages, I had no clue as to even what the framework was to making this change, let alone how to begin. In my ignorance, I assumed it just simply was as impossible as, say, having 5 characters in a party.

As I saw hack after hack being released, I slowly dipped my toe into the pool of modding, still thoroughtly confused. I didn't want to go the route of HatZen08's patch, which made magic usable only when the Esper was equipped and disabled the learning system. Through testing, I was able to get magic to appear in the menu without being learned, so this clearly was doable.  But how?

I decided to focus on C2 first, since I would rather get this feature working in battle rather than outside of battle. I worked at it, and I got precisely half the problem solved. I was able to figure out how to stop blanking out spells whether or not an Esper was equipped. Below is the new (albeit terrible) code for that part:

Code:
C2/55A3: EA              NOP
C2/55A4: EA              NOP
C2/55A5: EA              NOP
C2/55A6: EA              NOP
Code:
C2/5708: 4C 69 64        JMP $6469 ; Jump to the new code
C2/570B: EA
C2/570C: EA
C2/570D: EA
Code:
C2/6469: B1 F0           LDA ($F0),Y ; Loads the value of the spell learned
C2/646B: 1A              INC         ; Repositioned INC as it always happens
                                      in original code
C2/646C: F0 04           BEQ $6472   ; A will be 0 if the spell is known and if so,
                                      branch to the "blank out" code
C2/646E: A5 F7           LDA $F7     ; Gets the Esper ID from F7 register into A to
                                      check for Esper presence
C2/6470: 30 04           BMI $6576   ; Minus flag is set if no Esper equipped.
C2/6472: 7A              PLY         ; Pulls Y from the stack like the orginal code
C2/6473: 4C 16 57        JMP $5716   ; Jumps to the code for allowed spells
C2/6476: 7A              PLY         ; Pulls Y from the stack like the original code
C2/6473: 4C 0E 57        JMP $570E   ; Jumps to the code to blank out spell usage


Yes, I know I'm going to have to make changes to properly blank out spells for Lores and other adjusments, but this does work!

The problem? Trying to get only the spells an Esper teaches to show up in the menu for that character.

I thought I could simply modify the code existing for learning a spell and use it for a basis of comparing ether it was learned or not. I finally came up with this result.

Code:
C2/6469: B1 F0           LDA ($F0),Y     ;  Same as above
C2/646B: 1A              INC             ;  Same
C2/646C: F0 22           BEQ $6490       ;  Branch changes due to extra code
C2/646E: A5 F7           LDA $F7         ;  Same as above
C2/6470: 30 18           BEQ $648A       ;  Branch changes due to extra code
C2/6472: DA              PHX             ;  Pushes X to the stack
C2/6473: 5A              PHY             ;  Pushes Y to the stack
C2/6474: 20 93 62        JSR $6293       ;  Multiplication subroutine to point X to the
                                           correct value
C2/6477: A0 05 00        LDY #$0005      ;  Sets Y to 5 to begin the loop
C2/647A: 7B              TDC             ;  Clear A
C2/647B: BF 01 6E D8     LDA $D86E00,X   ;  Load the spell that is taught
C2/647F: D3 01           CMP ($01,s),y   ;  Compare to the Y value on the stack
C2/6481: F0 0B           BEQ $648E       ;  If the value is the same, break to regular
                                           spell availability code
C2/6483: E8              INX             ;  Push X up, once
C2/6484: E8              INX             ;  Push X up since the "space" between spells
                                           on an Esper is 2
C2/6485: 88              DEY             ;  Decrement to advance iteration of the loop
C2/6486: D0 F3           BNE $647B       ;  Branch to compare line if Y != 0
C2/6488: FA              PLX             ;  Loop is over, pull X from stack
C2/6489: 7A              PLY             ;  Loop is over, pull Y from the stack
C2/648A: 7A              PLY             ;  Do again to get previously stacked Y just
                                           like the original code
C2/648B: 4C 0E 57        JMP $570E       ;  Branch to "blank out" code
C2/648E: FA              PLX             ;  Loop is over, pull X from stack
C2/648F: 7A              PLY             ;  Loop is over, pull Y from the stack
C2/6490: 7A              PLY             ;  Do again to get previously stacked Y just
                                           like the original code
C2/6491: 4C 16 57        JMP $5716       ;  Branch to the code for allowed spells  

Of course, when I play the game and get a random encounter with an Esper equipped, the screen goes blank..and the battle never loads. Without an Esper equipped, battle loads normally, and I can isolate the problem to my "comparison" code, but I can't figure out what I'm doing wrong.

I've tried inserting breakpoints, but can't figure out where everything goes haywire, as the loops seem to be completing as intended.

What am I doing wrong?
  Find
Quote  

#2
Posts: 763
Threads: 83
Thanks Received: 55
Thanks Given: 7
Joined: Apr 2015
Reputation: 22
Status
Obliviscence
(04-05-2017, 12:56 PM)Turbotastic Wrote: I have reached my wit's end and humbly beg for a second pair of eyes.  But first, a lengthy prologue!

One of my major pet peeves about how Final Fantasy VI handled magic was that you had to wait  until the spell was learned 100% in order to cast it. Why not just let the spell be cast as long as the Esper was equipped, but also gain progress towards learning the spell?  That way, when it was fully learned, the Esper could be de-equipped but the spell would remain in the menu.

Years later FFIX and FFTA used the same ability learning system, except it was tied to equipment. I wanted this tweak for the Final Fantasy VI spell-learning system as well. However, I suspected that this would be impossible to accomplish, since no one had done this before. Furthermore, despite being at the periphery of ROM hacking for ages, I had no clue as to even what the framework was to making this change, let alone how to begin. In my ignorance, I assumed it just simply was as impossible as, say, having characters in a party.

As I saw hack after hack being released, I slowly dipped my toe into the pool of modding, still thoroughtly confused. I didn't want to go the route of HatZen08's patch, which only made magic usable as long as the Esper was equipped and disabled the learnning system. Through testing, I was able to get magic to appear in the menu without being learned, so this clearly was doable.  But how?

I decided to focus on C2 first, since I would rather get is feature working in battle rather than outside of battle. I worked at it, and I got precisely half the problem solved. I was able to figure out how to stop blanking out spells whether or not an Esper was equipped. Below is the new (albeit terrible) code for that part:

Ok, let's take a look.


(04-05-2017, 12:56 PM)Turbotastic Wrote:
Code:
C2/55A3: EA              NOP
C2/55A4: EA              NOP
C2/55A5: EA              NOP
C2/55A6: EA              NOP

This sets all spells as potentially known by at least someone. While not game-breaking, this will make it so your list doesn't condense, meaning you will sometimes have large gaps in between spells. Also, i think this will give Gogo all magic during battle, which won't translate to outside of battle... i *think* anyway.


(04-05-2017, 12:56 PM)Turbotastic Wrote:
Code:
C2/5708: 4C 69 64        JMP $6469 ; Jump to the new code
C2/570B: EA
C2/570C: EA
C2/570D: EA

Code:
C2/6469: B1 F0           LDA ($F0),Y ; Loads the value of the spell learned
C2/646B: 1A              INC         ; Repositioned INC as it always happens
                                      in original code
C2/646C: F0 04           BEQ $6472   ; A will be 0 if the spell is known and if so,
                                      branch to the "blank out" code
C2/646E: A5 F7           LDA $F7     ; Gets the Esper ID from F7 register into A to
                                      check for Esper presence
C2/6470: 30 04           BMI $6576   ; Minus flag is set if no Esper equipped.
C2/6472: 7A              PLY         ; Pulls Y from the stack like the orginal code
C2/6473: 4C 16 57        JMP $5716   ; Jumps to the code for allowed spells
C2/6476: 7A              PLY         ; Pulls Y from the stack like the original code
C2/6473: 4C 0E 57        JMP $570E   ; Jumps to the code to blank out spell usage

Ok, tracking with you so far.

(04-05-2017, 12:56 PM)Turbotastic Wrote:
Code:
C2/6469: B1 F0           LDA ($F0),Y     ;  Same as above
C2/646B: 1A              INC             ;  Same
C2/646C: F0 22           BEQ $6490       ;  Branch changes due to extra code
C2/646E: A5 F7           LDA $F7         ;  Same as above
C2/6470: 30 18           BEQ $648A       ;  Branch changes due to extra code
C2/6472: DA              PHX             ;  Pushes X to the stack
C2/6473: 5A              PHY             ;  Pushes Y to the stack
C2/6474: 20 93 62        JSR $6293       ;  Multiplication subroutine to point X to the
                                           correct value
C2/6477: A0 05 00        LDY #$0005      ;  Sets Y to 5 to begin the loop
C2/647A: 7B              TDC             ;  Clear A
C2/647B: BF 01 6E D8     LDA $D86E00,X   ;  Load the spell that is taught
C2/647F: D3 01           CMP ($01,s),y   ;  Compare to the Y value on the stack
C2/6481: F0 0B           BEQ $648E       ;  If the value is the same, break to regular
                                           spell availability code
C2/6483: E8              INX             ;  Push X up, once
C2/6484: E8              INX             ;  Push X up since the "space" between spells
                                           on an Esper is 2
C2/6485: 88              DEY             ;  Decrement to advance iteration of the loop
C2/6486: D0 F3           BNE $647B       ;  Branch to compare line if Y != 0
C2/6488: FA              PLX             ;  Loop is over, pull X from stack
C2/6489: 7A              PLY             ;  Loop is over, pull Y from the stack
C2/648A: 7A              PLY             ;  Do again to get previously stacked Y just
                                           like the original code
C2/648B: 4C 0E 57        JMP $570E       ;  Branch to "blank out" code
C2/648E: FA              PLX             ;  Loop is over, pull X from stack
C2/648F: 7A              PLY             ;  Loop is over, pull Y from the stack
C2/6490: 7A              PLY             ;  Do again to get previously stacked Y just
                                           like the original code
C2/6491: 4C 16 57        JMP $5716       ;  Branch to the code for allowed spells  

Of course, when I play the game and get a random encounter with an Esper equipped, the screen goes blank..and the battle never loads. Without an Esper equipped, battle loads normally, and I can isolate the problem to my "comparison" code, but I can't figure out what I'm doing wrong.

I've tried inserting breakpoints, but can't figure out where everything goes haywire, as the loops seem to be completing as intended.

What am I doing wrong?

The only thing that jumps out at me here is the order you return items from the stack, you have a Y already there, then you push X then Y.... so when you are recalling the values from the stack they should be Y,X,Y. you currently have X,Y,Y which means you are exiting with the wrong X value.

At a glance, everything else seems to check out.

Happy Hacking!
  Find
Quote  
[-] The following 1 user says Thank You to B-Run for this post:
  • Turbotastic (04-06-2017)

#3
Posts: 89
Threads: 11
Thanks Received: 3
Thanks Given: 1
Joined: Dec 2015
Reputation: 3
Status
Debrave
Thank you so much for the second pair of eyes. I appreciate all of this free help. I'm going to have to credit you as a co-author if I ever get this done

(04-05-2017, 09:39 PM)B-Run Wrote:
(04-05-2017, 12:56 PM)Turbotastic Wrote:
Code:
C2/55A3: EA              NOP
C2/55A4: EA              NOP
C2/55A5: EA              NOP
C2/55A6: EA              NOP

This sets all spells as potentially known by at least someone. While not game-breaking, this will make it so your list doesn't condense, meaning you will sometimes have large gaps in between spells. Also, i think this will give Gogo all magic during battle, which won't translate to outside of battle... i *think* anyway.



True, but I am still at the "see if I can get this to work phase." My hope is to make the added code (or a modified version) a subroutine, as it would have to be called for both loops (since the first loop would exclude the spells by default. However, I wanted to see if I could get it to work with no restrictions first.

The only thing I won't like is that Gogo will still get the benefit of using spells that aren't fully learned by other characters. Since Gogo can mimic everything, though, there's no reason to restrict him aside from balance.

(04-05-2017, 09:39 PM)B-Run Wrote: The only thing that jumps out at me here is the order you return items from the stack, you have a Y already there, then you push X then Y.... so when you are recalling the values from the stack they should be Y,X,Y. you currently have X,Y,Y which means you are exiting with the wrong X value.

At a glance, everything else seems to check out.

Happy Hacking!

Believe it or not this was the key to solving everything.

There was another BIG mistake I made, but by fixing the stack issue, the breakpoints I added returned more sensical, if unexpected, values.  From there I was able to realize I used the wrong CMP. I should have used the C3, not D3, and I corrected it with this line.

Code:
C2/647F: C3 01           CMP ($01,s)


Thank you so much! I wouldn't have gotten this far without you.
  Find
Quote  

#4
Posts: 3,970
Threads: 279
Thanks Received: 236
Thanks Given: 58
Joined: Oct 2011
Reputation: 65
Status
Tissue-aware
(04-13-2017, 12:07 AM)Turbotastic Wrote: From there I was able to realize I used the wrong CMP. I should have used the C3, not D3, and I corrected it with this line.

You should use an assembler. Not only it is easier to use than remembering opcodes values, such an error cannot happen. You also don't have to rewrite large portions of code each time you forgot something or make a change. There's a maximum of 5 basic and easy things (such as the org instruction or what is a label) for a regular use you have to learn that are not related to actual SNES Hex coding, after that it's basically writing code like it is exactly in the disassembly.
  Find
Quote  

#5
Posts: 281
Threads: 18
Thanks Received: 13
Thanks Given: 8
Joined: Mar 2014
Reputation: 8
Status
None
I agree that an assembler is infinitely more practical, but it's still useful learning to read and write a bit of raw hex when you're starting out. Being able to recognize and read code in hex is really convenient.

I like to think you earn the use of tools by understanding how they save you time and frustration. Smile
  Find
Quote  

#6
Posts: 763
Threads: 83
Thanks Received: 55
Thanks Given: 7
Joined: Apr 2015
Reputation: 22
Status
Obliviscence
(04-13-2017, 12:07 AM)Turbotastic Wrote: Thank you so much for the second pair of eyes. I appreciate all of this free help.

Anytime.

(04-13-2017, 12:07 AM)Turbotastic Wrote: The only thing I won't like is that Gogo will still get the benefit of using spells that aren't fully learned by other characters. Since Gogo can mimic everything, though, there's no reason to restrict him aside from balance.

This won't only give him the spells not fully learned... it will give him ALL spells, whether you have aquired the esper for them or not. Or whether anyone on your team knows it at any percent or not. He basically comes as a Magic God. You will want to fix this, if for no other reason than that in menus Gogo will still only get cumulative magic. But that'll be another whole can of worms for your patch when you get to menu magic.

(04-13-2017, 04:20 AM)seibaby Wrote: I like to think you earn the use of tools by understanding how they save you time and frustration. Smile

This.
  Find
Quote  

#7
Posts: 89
Threads: 11
Thanks Received: 3
Thanks Given: 1
Joined: Dec 2015
Reputation: 3
Status
Debrave
No, I'm not bumping this for no reason or to ask for help. Instead I would like to give an update. I finally got this to work in battle.

What took so long, aside from the fact that I hadn't been working on it consistently? The fact that I did not truly understand the code.

I presumed that once I was able to get the game to recognize when an Esper was equipped and to react accordingly, I could simply copy and paste from the code I had already generated. After all, if the second loop could be trained to remove spells, I thought it would be trivial to get the first loop to do the same.

I was completely wrong.

It was only after spending a considerable amount of time did I realize it was not possible to copy and paste completely from my modified code because my modified code was for a 16-bit X and Y.  By contrast, the original loop that sets all the spells known by all characters uses an 8-bit X and Y. Yes, assassin tried to explain the difference between the magic building loops in battle, but I did not fully grasp the implications.

(04-13-2017, 06:50 AM)B-Run Wrote:
(04-13-2017, 12:07 AM)Turbotastic Wrote: The only thing I won't like is that Gogo will still get the benefit of using spells that aren't fully learned by other characters. Since Gogo can mimic everything, though, there's no reason to restrict him aside from balance.

This won't only give him the spells not fully learned... it will give him ALL spells, whether you have aquired the esper for them or not. Or whether anyone on your team knows it at any percent or not. He basically comes as a Magic God. You will want to fix this, if for no other reason than that in menus Gogo will still only get cumulative magic. But that'll be another whole can of worms for your patch when you get to menu magic.

Indeed. I was aware I was only 1/4 of the way there, but I thought I had conquered the hardest 1/4, so I was looking ahead to where I am now. I needed to disable the first restriction loop to see if this could be done at all. At the time, I was presuming that I could simply use the same exact lines for the first loop as I was working my way backwards.  I was working from the least amount of restrictions then seeing if I could then slowly increase them.

  1. See if I could enable spells a character does not know by interrupting the reduction process 
  2. See if I could get spells to show based on whether an Esper was equipped
  3. See if I could restrict the spells that show when equipped
Since I did this for the per-character loop, I thought the process would be identical for the "spells known by any character" loop. The problem is I didn't understand the context of the code for the initial loop to realize why I couldn't.

Now, for posterity sake, I am going to post the code I came up with below. Yes, it is ugly, redundant, and inefficient. Yes, I authorize anyone to make improvements. I claim no ownership and want no credit; B-Run did most of the work for me in this thread, and everyone else helped so much that this is the community's work. Thank you all.

Here is the changed code:


Code:
C255A3:         4C9464                 JMP $6494  ; Jump to new code
C255A6:         EA                     NOP        ; Blank out existing code remnant


Code:
C25708:        4C6964            JMP $6469  ; Jump to new code
C2570B:        EA            NOP        ; Blank out existing code remnant
C2570C:        EA            NOP        ; Blank out existing code remnant
C2570D:        EA            NOP        ; Blank out existing code remnant


Code:
C26469:        B1F0            LDA ($F0),y
C2646B:        1A            INC a
C2646C:        F022            BEQ $6490
C2646E:        A5F7            LDA $F7
C26470:        3018            BMI $648A
C26472:        DA            PHX
C26473:        5A            PHY
C26474:        209362            JSR $6293
C26477:        A00500            LDY #$0005
C2647A:        7B            TDC
C2647B:        BF016ED8        LDA $D86E01,x
C2647F:        C301            CMP $01,s
C26481:        F00B            BEQ $648E
C26483:        E8            INX
C26484:        E8            INX
C26485:        88            DEY
C26486:        D0F3            BNE $647B
C26488:        7A            PLY
C26489:        FA            PLX
C2648A:        7A            PLY
C2648B:        4C0E57            JMP $570E
C2648E:        7A            PLY
C2648F:        FA            PLX
C26490:        7A            PLY
C26491:        4C1657            JMP $5716

Code:
C26494:        C9FF            CMP #$FF       ; Original comparison, just displaced
C26496:        D003            BNE $649B      ; If the spell is not known, skip over the next instrucion
C26498:        4CA755            JMP $55A7      ; If the spell is known, go back to the normal code
C2649B:        C210            REP #$10       ; SUPER IMPORTANT You HAVE to change to 16-Bit X and Y here
C2649D:        5A            PHY            ; Push Y to the stack, because you need Y to load the comparison
C2649E:        BC1030            LDY $3010,x    ; Offset to character info block
C264A1:        B91E16            LDA $161E,y    ; Get equipped Esper
C264A4:        3025            BMI $64CB      ; Value is minus if no equipped Esper
C264A6:        7A            PLY            ; Pull Y from the stack, you need to put X there first and you're going to need
C264A7:        DA            PHX            ; Push X to the stack. You're going to need the original value
C264A8:        5A            PHY            ; Push Y to the stack so it's on top        
C264A9:        209362            JSR $6293      ; Multiplication subroutine so X points to the right location
C264AC:        A00500            LDY #$0005     ; Set up for a 5-iteration loop since each Esper can have 5 spells
C264AF:        7B            TDC            ; Clear A
C264B0:        BF016ED8        LDA $D86E01,x  ; Look up the spell taught by the equipped Esper
C264B4:        C301            CMP $01,s      ; Compare the index with the
C264B6:        F00C            BEQ $64C4      ; If they're the same, break the loop and
C264B8:        E8            INX            ; If they're not the same, decement X
C264B9:        E8            INX            ; Lower X again since the spells are two apart
C264BA:        88            DEY            ; Time to remove one from the loop
C264BB:        D0F3            BNE $64B0      ; As long as Y is not zero, there's still another chance
C264BD:        7A            PLY            ; If you got here, it means the spell's not taught, get Y from the stack
C264BE:        FA            PLX            ; Get X from the stack
C264BF:        E210            SEP #$10       ; SUPER IMPORTANT because unlike the other loop, X and Y are 8-Bit
C264C1:        4CAB55            JMP $55AB      ; Nope, the spell is not learned, jump back up to the code
C264C4:        7A            PLY            ; If you got here, the spell is there, so get Y from the stack
C264C5:        FA            PLX            ; Get X from the stack
C264C6:        E210            SEP #$10       ; SUPER IMPORTANT because unlike the other loop, X and Y are 8-Bit
C264C8:        4CA755            JMP $55A7      ; Jump to "Yes, the spell is known" code
C264CB:        7A            PLY            ; Pull Y from the stack since there was no Esper
C264CC:        E210            SEP #$10       ; SUPER IMPORTANT because unlike the other loop, X and Y are 8-Bit
C264CE:        4CAB55            JMP $55AB      ; No, spell is not known, jump back to loop.

To anyone getting any ideas of incorporating this code in a patch (and it's not patch-ready, especially since it only affects in-battle magic), note that this uses the C2 free space, so keep this in mind when checking for patch compatibility.

And now I've reached the other can of worms at C3 and menu magic...oh my...where are these spells even being PULLED from?

At last, my mindless rant is done.
  Find
Quote  
[-] The following 2 users say Thank You to Turbotastic for this post:
  • Robo Jesus (03-25-2018), seibaby (08-09-2017)

#8
Posts: 281
Threads: 18
Thanks Received: 13
Thanks Given: 8
Joined: Mar 2014
Reputation: 8
Status
None
It's pretty cool of you to tackle this, it's something I've meant to look into for a while. I'm sure you're learning a lot. Smile

One thing to note, balance-wise, assuming you intend to use the same kind of system in the menu code... if Espers grant spells upon equip, you really have unlimited access to every spell out of battle upon receiving an Esper. It's not a bad thing in itself, but switching Espers around just to use their spells isn't fun. FFTA didn't run into this issue because you automatically healed between battles. With this in mind, I think it would be best to just straight up enable all spells from an Esper (in the menu, not in battle) as soon as you acquire it, and not bother with checking for which Esper is equipped at all.

A different way of doing it would be to enable casting of spells directly from the Esper menu. You can already point the hand pointer to spells there (to see their descriptions), might as well make them castable by selecting them from there.
  Find
Quote  
[-] The following 1 user says Thank You to seibaby for this post:
  • Turbotastic (08-10-2017)

#9
Posts: 89
Threads: 11
Thanks Received: 3
Thanks Given: 1
Joined: Dec 2015
Reputation: 3
Status
Debrave
Thanks for the support. I have learned a lot. I might not be able to make grand coding changes, but I can at least understand most of the threads involving battle modification around here now. I understand WHAT people are talking about and why the solutions provided work or don't work.  I don't know enough to help, but I can at least follow along (and now I understand the significance of B-Run's patch...which I'll definitely have to incorporate to another project).

Just to be clear, I'm working on having the spells an Esper teaches usable while that Esper is equipped, but not usable otherwise until fully learned. Unlike other modifications, I want to retain the ability to learn magic. Yeah, you might get the immediate gratification of casting Ultima upon eqiuipping Ragnarok instead of fighting 10 Cactrots (or once I'm done, casting Life 2 when you equip Phoenix outside of battle), but you can still use the "honor system" and just wait until everything is fully learned if you want. This is just one little tweak I've always wanted since childhood.

That being said your ideas would make a unique approach, although something like that may be beyond my current skill level. All I'm doing is hacking the menus to make the game believe the spells should available and not blot them out. Given it's taken a considerable amount of time to get to this point, I'm not sure if I'll be alive to do what you ask if I started today. Someone else will beat me to it.

If I were a skilled enough coder, I could see this feature being used in conjunction with existing mods out there. It still gives the incentive to grind (full mastery) without necessitating the work. If a player wants to max out everyone learning every spell, that player still has to fight a good deal of battles, but if a player wants to prioritze having a certain skillset vs taking the time to learn it in full, I believe allowing the choice.

Before I get carried away, I have to put in work of my own to break the code, and I think I figured out my plan of action. To find the time to do it is another matter.
  Find
Quote  

#10
Posts: 281
Threads: 18
Thanks Received: 13
Thanks Given: 8
Joined: Mar 2014
Reputation: 8
Status
None
(08-10-2017, 07:02 PM)Turbotastic Wrote: Just to be clear, I'm working on having the spells an Esper teaches usable while that Esper is equipped, but not usable otherwise until fully learned. Unlike other modifications, I want to retain the ability to learn magic. Yeah, you might get the immediate gratification of casting Ultina upon eqiuipping Ragnarok instead of fighting 10 Cactrots (or once I'm done, casting Life 2 when you equip Phoenix outside of battle), but you can still use the "honor system" and just wait until everything is fully learned if you want. This is just one little tweak I've always wanted since childhood.

I understand the goal of your mod and it's something I've always wanted, too. It makes sense to be able to use new spells immediately when acquiring a new Esper. In case I was being unclear, I was just pointing out that, with this mod, there is no real limitation once you're out of battle. You can just swap Espers around to use any spell you like, and the only hindrance is the tediousness of navigating menus. I was merely suggesting that false limitation was removed - i.e. when generating a character's spell list in the field menu, don't bother checking if an Esper is equipped, just check if it is acquired.

(08-10-2017, 07:02 PM)Turbotastic Wrote: That being said your ideas would make a unique approach, although something like that may be beyond my current skill level. All I'm doing is hacking the menus to make the game believe the spells should available and not blot them out. Given it's taken a considerable amount of time to get to this point, I'm not sure if I'll be alive to do what you ask if I started today. Someone else will beat me to it.

This comment is what led me to believe you may have misinterpreted my suggestion, which is not new or unique, just a small Quality of Life improvement for your mod.

I believe with the menu hacking experience you have now, making the spells in the Esper menu clickable, to call the "cast spell" routine, should be quite doable. You can check other menu functions to see how they handle listening for controller input ("is A being pressed? - if so branch").
  Find
Quote  
[-] The following 1 user says Thank You to seibaby for this post:
  • Turbotastic (08-28-2017)



Forum Jump:

Users browsing this thread: 1 Guest(s)


Theme by Madsiur2017Custom Graphics by JamesWhite