Espers teaching Stat gains - Printable Version +- FF6 Hacking (https://www.ff6hacking.com/forums) +-- Forum: Discussion Forums (https://www.ff6hacking.com/forums/forum-5.html) +--- Forum: Magitek Research Facility (https://www.ff6hacking.com/forums/forum-9.html) +--- Thread: Espers teaching Stat gains (/thread-4046.html) |
Espers teaching Stat gains - Morendo - 09-09-2020 Hi again everyone! I've got a live one for you here. Been staring at it for a couple of days, but my coding level is too low to get there. I know just enough about hacking this game to dive headfirst into the wrong thing for a few hours and get nowhere. Lol. I'm working on a hack in which I'd like Espers to do something new. Instead of teaching magic, I'd like for them to permanently increase a given stat, i.e. Ramuh teaches Stamina+1....x10, Stamina+3....x2, etc. No magic. Just stat gains. Everything else about the process can stay the same: Growth rate, AP gain from battles, etc. Physically increasing the stat shouldn't be too difficult. Espers already give you stat boosts at level-up (at C26198, with pointers from C2614E). I can hijack that code to do all of the math for me. The issue is getting the game to recognize this new set of instructions. How can I accomplish this? First, I looked at C2 in the code where we progress towards learning spells taught by Espers (C2602A-C2606C), but nothing there looked particularly useful. Then, I looked at the Esper data, but they just have one byte of info for each spell slot corresponding to the spell index. I thought about creating my own index of stat gains similar to the spell index where 00 would be Stamina+1 instead of Fire, etc. and this seems promising, but how can I get the game to recognize that list as the target? I can't find any pointers that associate Espers with spells. I tell ya, it's tricky! Any suggestions? All help is appreciated. RE: Espers teaching Stat gains - Turbotastic - 09-17-2020 (09-09-2020, 04:28 PM)Morendo Wrote: Hi again everyone! I've got a live one for you here. Been staring at it for a couple of days, but my coding level is too low to get there. I know just enough about hacking this game to dive headfirst into the wrong thing for a few hours and get nowhere. Lol. I'm surprised no one has replied to this thread until now. Unfortunately, you won't be able to hijack the existing code in order to do what you seek. Stat gains are limited to one at a time and although they can stack, the code is designed to increase one attribute per character upon levelling up. By contrast the varying nested subroutines concerning learning a spell are designed to work with the spell index to first skip a spell if it is learned, then mark a spell as just learned and to mark the spell as unhidden/accessible. There is no mechanism for learning a spell over and over again, so the subroutine you would eventually create would have to be completely new. Creating your own stat gain index is an interesting work around but you would have to reconfigure every single loop concerning learning magic from Espers to account for that index. At the bare minimum you would have to replace the called subroutine at C2/6020. That still doesn't address certain problems such as how to apply gains of multiple types. Thinking about this made my head hurt. That's probably because I'm at too low of a coding level myself to explain. RE: Espers teaching Stat gains - Morendo - 09-25-2020 Cool! I was hoping somebody would respond. Thanks! I think what might be happening is that I know just barely enough about romhacking this game to misunderstand everything about romhacking this game. LOL. Quote:Stat gains are limited to one at a time and although they can stack, the code is designed to increase one attribute per character upon levelling up. By contrast the varying nested subroutines concerning learning a spell are designed to work with the spell index to first skip a spell if it is learned, then mark a spell as just learned and to mark the spell as unhidden/accessible. There is no mechanism for learning a spell over and over again, so the subroutine you would eventually create would have to be completely new. Oh, I didn't have any interest in increasing an attribute multiple times or learning the attribute over and over again. It would work exactly the same as learning spells. Once you've gotten Shiva's "Speed+2...x4" or whatever the skill is to 100%, that's it. It's at 100%. You'd get Speed+2 permanently, but it wouldn't start over. Regardless, you're still totally right that I'd need to build a new subroutine. The tantalizing part is that so much of the existing code is already doing what I want! The only part I'm looking to change is the result. If I better understood the moment the code says: "Alright. They got to 100%. Go flick the on/off switch in the RAM to make that spell available", I could potentially intercept it and push it to a new subroutine that goes to the stat gain formula instead. At the moment, I don't understand how to do that. I mean, aren't the percentage points just a value stored in the RAM that's counting to 100? How "tied-in" is that number to the spell index? To put it in FF terms, my coding level is also "too weak to be worthwhile". I suppose I'm not doing a great job of explaining my confusion. Quote:Creating your own stat gain index is an interesting work around but you would have to reconfigure every single loop concerning learning magic from Espers to account for that index. This was my idea for a second option if the above "intercept the moment of spell learning" was functionally impossible or just straight-up dumb. We know the Espers have spell index values in the Esper data at $D86E00. I thought maybe creating a new index for stat gains (a ton of additional work) might be a good Plan B. RE: Espers teaching Stat gains - Morendo - 11-12-2020 I think I might be making some headway on how I might be able to do this. Here's what I've got. I'll try and explain it as best I can. I'm still new to this, and I probably misunderstand and misexplain a lot! In the vanilla game, Ramuh looks like this: Ramuh Bolt x10 Bolt2 x2 Poison x5 At level up ... Stamina +1 In my romhack, I plan to make Ramuh look like this: Ramuh Vigor+1 x10 Speed+2 x2 Stam+1 x5 No level-up bonus - Everything else is vanilla. - Right now, each character has RAM assigned to which spells they've learned. ($1A6E-$1CF4 Spells Known (12 characters, 54 spells each, 1 byte per spell) - My romhack will only use 24 spells. The other 30 spots in RAM can be devoted exclusively to these skill-ups. - This way I need to touch as little code as possible from the vanilla game. You fight monsters. Monsters give Magic Point(s). They calculate the exact same way. They save to the exact same RAM. Everything is the same. - I set Ramuh to teach Slow x10 instead of Bolt x10. Easy. FFusME can do that with no trouble. - Slow is spell index 25. - When you learn a "spell" from an Esper (which will now actually be our skill-up), it checks to see if the spell you've learned reaches 100% ($C2604B). I can add a subroutine here. (see below) - All I need this subroutine to do is to turn my spell index (25) into a value between $00 and $10. (Incidentally, the correct value for Vigor+1 is $09. You can see this here: https://www.ff6hacking.com/wiki/doku.php?id=ff3:ff3us:doc:asm:fmt:espers) - Why a number between $00 and $10? Because I can run a number between $00 and $10 through the Level-Up bonus subroutine at $C260C2. The vanilla game already knows what to do once I give it the correct value. - So now I just need to turn the number 25 into $09. - I... don't know how to do this... Moreover, if I plan on turning all spell indexes from 25-54 into these skill-ups, it would be more complex than just turning 25 into $09. I'd need 25, 26, 27 to turn into $09; 28, 29, 30 to turn into $0A, etc. This way Ramuh could teach Vigor+1, and Shiva could teach a *different* Vigor+1. Using spell index 25 on both Espers would just cause both Espers to teach the same bonus. I suppose it would look something like this: Code: C2604B: BEQ C2606C ;branch if no learn rate, i.e. no spell to learn - This first part is vanilla code Sorry about the formatting. My typing got eaten somehow. Also, there might be more to it after the bonus is calculated. I honestly haven't gotten that far just in case the first part doesn't work. Am I crazy? Misinformed? Misunderstanding how life works? Not explaining it well? Please let me know! Any help would be appreciated. RE: Espers teaching Stat gains - Everything - 11-12-2020 If I understand correctly, I think you can do this with a lookup table. Put your spell index in the accumulator, subtract $25 then transfer to x and load from the lookup table. Your lookup table will be an array of bytes, one for each skill-up value. You can put the table anywhere that you have free space. Code: ; turn $25 into $09, etc. Alternatively, if the conversion from spell index to skill-up id is a simple mathematical function (i.e. skill-up = 9 + (spell - $25) * 3) you could write an algorithm to convert it. This might save a few bytes but it won't be as flexible. RE: Espers teaching Stat gains - Bropedio - 12-10-2020 Hey, not sure if this would help, but I wrote this code to replace the vanilla stat-gain routine to make it easier to update and work with. It fits in the same space, and may have room for a large lookup table, if you want. What you might do is replace the spell IDs in the esper learning data with bytes that represent the exact stat gains you want to give. The hard part is dynamically generating the boost text inside the esper menu. I do have some code that does this, but it might be tricky to implement it in a different context. Let me know if you'd like it. Code: hirom |