øAslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&action=profile;u=278;area=showposts;start=780e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/indexe58c-2.htmlslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&action=profile;area=showposts;u=278e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/indexe58c-2.html.zxÏåg^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ0P.hOKtext/htmlISO-8859-1gzip@øÕhÿÿÿÿÿÿÿÿTue, 10 Mar 2020 19:25:27 GMT0ó°° ®0®P®€§²ð®Ïåg^ÿÿÿÿÿÿÿÿª(h 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

781
Ho-ly-crap. It works!
My TNL code is off slightly, and that needs to be fixed before I can put patch out, but it's not crashing!
I had to learn how to do some things I've never done before (change direct page and data bank registers) but the mechanics of it all are working exactly as planned.
It's cool, I can load a character, then send them to the shadow, then cheat their experience up to 98967F (9,999,999) then reload the character and actually watch the game level them up to 99! That was the most outside the box part of the plan, and was the part I was SURE would go wrong.
Can't wait to share this with you guys!

782
Chillyfeez's Run/ATB Show/Character Switch Hack (Will remove if asked.)

You mean if chillyfeez asks? Because my patches are there to be used - I'm thrilled if you want them to be part of your project!

Hope to test it out sometime soon!

783
Final Fantasy IV Research & Development / Re: The Drawing Board
« on: July 28, 2014, 12:50:12 PM »
doesn't Yang tend to reach 9999 around lv 70 anyway? Maybe I'm wrong, but I know I leveled him way up once, and I remember he far surpassed the rest of the party's HP. I thought he reached max, but maybe not.

784
OK, I have a first draft of the loading code written. Loading from initial stats works like a charm. Loading from the shadow needs testing and debugging - probably a lot. Depending on how much time I get over the next few days - and how extensive my inevitable mistakes were - I'd say I'll have this thing up and running by the end of the week.

785
It uses those bytes, in a way that is compatible with Ff4kster (I'm using it as I go, as I usually do  :happy: ).
Every character's load and save byte reads as a shadow slot that is a multiple of 05. So for loading, they read 80, 85, 8A, 8F, 94, &c. For saving they read 00, 05, 0A, 0F, 14, &c.
If there is no shadow data in that slot, the loading code will instead use the actor ID to load initial stats. Ff4kster seems entirely cool with all of this. It just reads the load and save bytes as "shadow slot 0, shadow slot 5, shadow slot 10, &c." The user can't set those, but the editor won't change them either.

786
So I'm getting close to where I can start planning how the loading routine will work - after how quickly all the rest of this went, that's kind of disappointing to say, but what can ya do?

The way it's going to work is this:
There will only be 14 actors - DkC, Kain, CRy, Tellah, Ed, Rosa, Yang, Pal, Por, PC, Cid, TRy, Edge, FuSoYa - but there will be room for Golbez and Anna if anyone ever figures out how to make them fully functional. That is to say, there is no Kain 2, Tellah 2, etc.
When an event instructs the game to load an actor, the game will first look into the Shadow to see if the character is being stored there (every character has his or her own slot). If there is no shadow data for that actor, then the game will run the initial stat loading routine (which will be essentially unchanged).
If there IS relevant Shadow data, then the game will load that, then will load the five character-dependent stat bytes (ID, job, crit%, crit bonus, steal evade) from a custom table. Then the game will run the level-up routine, since exp is stored in the shadow but level gains are not performed there.
 :edit: Rydia will be the exception to the process. Teen Rydia will load only from the Shadow (has no initial stats), but will have a unique entry in the five-byte table. Child Rydia will load either from intial stats or the shadow, like any other character would, but it would only be wise to load one or the other at a time. If Teen Rydia is in the party, and Child Rydia is added, then Child Rydia will load from initial stats (because Teen's load would have cleared the shadow). In that case, if Teen is removed from the party, her stats wouldbe stored in teh shadow. If Child was removed from the party after that (but before Teen was loaded back in), then Child's (presumably lower) stats would overwrite Teen's shadowed stats... does that make sense?
That should work. Although TNLs don't work exactly as I thought, I don't think, so I might have to throw in some extra calculations. I keep saying I'll cross that bridge when I come to it...

787
Final Fantasy IV Research & Development / Re: The Drawing Board
« on: July 26, 2014, 04:50:57 PM »
I probably wouldn't notice. I think strength really only makes a difference inasmuch as it affects attack multiplier, which it only does every [insert number I don't know] points. So I say, "meh" about starting at 10 instead of 13, but does anybody else want to weigh in on this one?

788
Final Fantasy IV Research & Development / Re: The Drawing Board
« on: July 26, 2014, 01:17:24 PM »
Sorry, I can't fully wrap my mind around all this right now, because I'm also trying to accomplish the shadow party mod...
I've been operating the past 24 hours under the (false) assumption that TNLs had their own table, when in fact they are included in the level up data table... so... is the plan also to figure out an algorithm for stat bonuses?

789
Final Fantasy IV Research & Development / Re: The Drawing Board
« on: July 26, 2014, 09:07:42 AM »
Yeah, when I was developing my Monster Levelup patch, Assassin popped in and pointed me to the multiplication and division registers, though what you've posted here is a much clearer explanation of how to use them.
The good news is, it doesn't really matter whether you know how they work. They just kinda... do.
Now, you're by far the most gifted mathematical mind among us, so you tell me: is it possible to express the largest TNL value in the game as itself * 100(dec, or something at least close enough to 100, perhaps 128) yet still no more than three bytes long? Since the math registers aren't equipped to handle decimals or values over three bytes, this would be the only way I can think of to represent two decimal places. Alternatively, if that's not possible, can you think of a reliable algorithm for taking your starting TNL, splitting it up temporarily, performing the necessary functions, then combining the results back to get your final product?
Like... let's say TNL starts at (arbitrarily) 5D473F; then AND 000003 and store the result somewhere; then pull back your 5D473F and AND FFFFFC; then divide by 4; then perform all necessary functions on both (5D473C/4) and on 000003; then combine the results to get the final TNL.
Anyway, that's just a thought. What I'm saying is, if you can come up with an algorithm that doesn't require decimals (but working with values *100 is ok) and never requires representing values in more than three bytes (therefore never anything higher than 16,777,215), then I think I can assemble the code to perform it.

790
Final Fantasy IV Research & Development / Re: The Drawing Board
« on: July 25, 2014, 11:26:54 PM »
Hey, LordGarmonde, long time. I was just wondering the other day to myself if we'd ever hear from you again.

So this is cool stuff, but the three decimal places might be problematic. In the Monsters Level Up as You Do hack I developed, I did in essence employ decimals, but the way I did it was by multiplying everything by 255 (shifting a single byte to the left by one full byte in 16-bit mode), then dividing back by 255 when the calculations were done. This worked fine for numbers that are only one byte long, but TNL values are often at least two bytes and sometimes three. I'm not sure I'd be capable of implementing the formula.

791
I'm guessing that child Rydia #2 started from original stats, since the original programming of the game only has a "child Rydia" who loads initial stats (and likewise only has a "teen Rydia" who loads shadow stats), but of course they use the same spell sets.

For me, FFIIUS was the first game I ever *loved*. Back in the early days of console gaming, my favorite games were always the ones that encouraged me to play for hours, days, weeks, &c. I guess Zelda and Zelda II were always my favorite, though I spent quite a while on Dragon Warrior, too. But when I played FFII (I never even had FFI as a kid), it was like a revolution and I was instantly hooked.
In the late 90s I played quite a bit of FFVI with Game Genie - loved giving Celes Shock instead of crappy Runic - but was always disappointed with how much fewer codes like that were available for FFIV. I dabbled in cosmetic hacks for NES ROMs, but doing that kind of stuff with SNES seemed out of reach. I didn't discover that it had become possible until about 2011, with Euclid's Link to the Past hack, at which point I almost instantly decided that this was something I NEEDED to learn how to do with FFVI.

Anyway, yeah, that was a tangent... I've planned out what needs to change in the EXP awarding and level-up routines. About to implement the changes and then test it out. Barring any unforeseen disasters, that will leave only the character loading processes (again, the biggest part of all of this, with the most things that might go wrong)!

792
Well... 13, with a maximum of 15 if someone ever successfully got both Golbez and Anna working. A character will either be counted in the shadow or in the main party, or not at all (if they haven't joined yet). Never in both places. Also this hack will assume child Rydia and Teen Rydia ARE the same person, so they share shadow data (though you will be able to go back to child Rydia but keep her stats).

793
Right.

I can't really think of a better way to go about it. The way I see it, the options are:
1) Divide by active party, award to all of active party and shadow
2) Divide by active party, award to active party only
3) Divide by active party plus shadow, award to active party and shadow

It's simply not a reasonable expectation to divide by active party, then award to active party, then divide again by shadow, then award to shadow. That's too much of a deviation from how the game normally awards EXP.

Anyway, it's in there now (option 3), and it's working as intended. The whole divisor change is a jump to a separate, entirely custom line of code. To avoid it would only require changing three bytes (13/FF5F-13/FF61). Once the whole patch is done, I can release a patch in tandem that allows the user to bypass that entirely, effectively giving you the choice of divisor accounting for shadow party or not.

794
Well, long story short, this is where the EXP divisor comes from:
Code: [Select]
$13/FF5F A6 AB       LDX $AB    [$00:00AB]   A:0082 X:0000 ;load # active party into X
$13/FF61 DA          PHX                     A:0082 X:0002 ;store for use as EXP divisor
I don't know how 00AB becomes the counter for active party members, but it doesn't really matter.
Here's what I'm gonna do:
After this value is loaded into X, I'm going to have the game look into each shadow party slot. If it shows there is a character being stored there, it will increase X by one.
So, EXP will be divided by all active (living and not stone) party members plus all characters stored in the shadow, then awarded to each of those characters.
I don't want to skip the exp award for the shadow party entirely, because think about when Rydia rejoins. If she's level 15 and she comes in to save a near death Cecil and crew, she'll do little good. She of all characters needs to be gaining experience while in the shadow.
So, anyway, that's the plan.

795
That occurred to me too, Pinkpuff, but I had intended on ignoring it and hoping nobody else noticed  :blush:
The part of the code I need to change might not be anywhere near the part that assesses the total exp and divides it by active party members, so I don't know how easy or difficult that may be to find. Once found, I don't know how easy it will be to manipulate.
My guess is, the original program probably looks at the data at 7E:405F in RAM - this is a series of 01s and 00s, one per character slot including shadow, that the game looks at in order to determine who GETS experience. Trouble is, I don't know how feasible it is to extend this by eleven bytes to begin with, then once expanded if possible, how feasible it is to make this edited range the new EXP divisor.
Obviously now that you've mentioned it I'll be looking into it, but I just don't wanna make any promises yet that I can do anything about it.