![]() |
![]() ![]() ![]() ![]() In-Town Graphic Mod Project
![]() Post 1
This project is something I couldn't help but mess with a bit once I'd thought of a few things while pondering world map sprites in comparison with what I already knew about in-town sprites. Anyway, just bear with me...these are notes, and weren't really intended to be part of a post...I've just become so lazy these days that it's easier to post my original notes, with some comments before and after, heh. Here:
Universal difference between sprites - 84
Number of sprites in room - 8009AC1C 00??
Sprite 1
Sprite 2
Coordinates
(X)
80074FB8 ????
80074FBA ????
(Y)
80074FBC ????
80074FBE ????
80074FC0 ????
80074FC2 ????
Time before next blink (?) - 80074FB4 ??00
Rotation - 80074FE4 00??
More Coordinates (?)
(X)
80074FEC ????
(Y)
80074FF2 ????
Another (Y)
80074FF8 ????
Visibility Mod - 80075008 - 000?
0 = Yes
1 = No
Sprite 3
Coordinates
(X)
8007503C ????
8007503E ????
(Y)
80075040 ????
80075042 ????
80075044 ????
80075046 ????
Time before next blink (?) - 80075038 ??00
Rotation - 80075068 00??
More Coordinates (?)
(X)
80075070 ????
(Y)
80075076 ????
Another (Y)
8007507C ????
Sprite 4
--------------------------------------------------------------------------------------------------------------------------------
In-Town Sprite Numbers (seem to be consistent; solved with sprite control mod)
--------------------------------------------------------------------------------------------------------------------------------
0 - Cloud
1 - Tifa
2 - Barret
3 - Red XIII
4 - Blah
5 - Cait Sith
6 - Blah
7 - Cid
"Blah" digits (both of them, and any others discovered) are always either invisible sprites, the character right after them, or some miscellaneous character like an average townsperson. This list, therefore, will not always have the correct digits, but will usually have the correct order of characters within your party. Use it as a possible reference, not as a guide.
What I'm attempting to modify is what graphic is called into memory, per sprite slot, per room. After a little thought, I'm not even sure if this is possible, as what I'll be calling will be from ROM, and a GSPro only accesses the RAM. Assuming it isn't possible, I'll try a different approach to an in-town graphic mod, as I have a few other theories I came to before this most recent idea came to mind.
My original doubt in the possibility of modifying what was called from the memory upon entering a room was quelled when I pondered the room mod hacked by Czar a million and a half years ago (surely you've used the debug room code; this is the room mod with digits - found by RPGod - for the debug room). Before you actually enter a room, but after you've done whatever it takes to initiate the room change (walking through a door, walking into a town from the world map, etc), the memory calls up whatever room it needs to. If you walk into the barn at the Chocobo Farm, it obviously calls up the data for the barn. This can be overridden by simply using the room mod and giving it digits for, say, the first room of Tifa's 7th Heaven (the bar); walking into the barn with this code on would bring you to Tifa's bar. If what room the game is told to call - upon the next room change (or when a save is loaded or a new game is started) - can be modified, it's logical to assume that characters - graphics, more specifically - to be called up could also be modified.
Either each individual slot can be modified upon a call up, or they work in sets. In other words, perhaps I'll eventually be able to put Cloud in a wheelchair in the same room as Cloud with the Buster Sword and the regular Cloud; and perhaps the memory uses graphic sets instead of individual graphics, so that I'll only be able to modify which set of graphics is called up, which would allow for me to use Cloud in the wheelchair, Cloud with the Buster Sword, and the regular Cloud, but only individually, as there is never a point in the game where, in any room, all three of these Clouds is present at the same time. It should be noted that I would also get all of the other graphics from whatever town/event the graphic set value represents.
For example, let's say there was a room in the game, somewhere, that at some point had a Cloud with the Buster Sword, a Sephiroth, a Tifa, a Red XIII, and a female shopkeeper (for variety, heh), and no other graphics. If indeed the memory uses graphic sets, and I chose the value for the graphic set of this room/event (the graphic set for the event that caused the presence of all of those characters, in this room), I would get all of those characters. Any room I went into would have those characters, and no others. So if ol' Seph was graphic 2, then graphic 2 in any room would always be Sephiroth. This could cause problems. If there was a room in the game where there were quite a few sprites (with visible graphics; not empty sprite slots), and each of them needed to be talked to, you'd have to walk around until you found the invisible ones (the ones with no graphics), assuming the memory still acknowledges sprites with no graphics as still having actions and responses, and doesn't instead somehow bundle sprite responses with sprite graphics (as it does on the world map). The memory won't allow for more than one sprite to have the same graphic, so even if I also found individual graphic mods within the available graphics in a room (they would only be able to change to graphics from the graphic set I caused to be called up), I still wouldn't be able to fill the other, empty sprite slots with, say, Sephiroths, because the memory would contradict itself in noting that graphic "blah1" was in sprite slot 1, and graphic "blah1" was in sprite slot 2. At least, that was my original assumption. After all, that's the way the world map works.
I began to think that maybe the memory would allow more than one of the same graphic when I thought of those rooms of the debug room where there are more than one of the same graphic. I can't completely conclude that the same graphic value could be used twice, however, because perhaps in one of those rooms graphic "blah1" is Yuffie's graphic, and so is graphic "blah2", and therefore it's not breaking any of its own laws while still prohibiting the use of the same graphic value twice in the same room. I'm too lazy to ponder all that, so I'll deal with that after I've finished actually hacking a graphic set mod.
But, then again, perhaps the simple answer is the correct one, and each individual graphic to be called up can be modified. This would explain the way you can go into (as far as I can see, using the USO code at inappropriate times) almost any event with any combination of characters, and they still jump out at their designated times, and do what they're supposed to do (or, in the case of characters that aren't supposed to be used in an event, take over the actions of a character that is). Are we to assume that the memory has allocated values for every possible combination of graphics you could ever use? It's possible, but I don't think it's very likely. Therefore, I'll first assume that each individual graphic to be called up can be modified, and if I'm wrong, I'll start over, and assume that the memory uses graphic sets. Anyway, on with it...
It is most likely that, even if they do correspond to the numbers above (way above, thanks to my obese compendium of notes, heh), the values of graphics will not simply be things like "0002" or "0003". Graphic values on the world map were things like "CE02" or "8203"; in-town graphic values are probably similar.
Since I'm trying to modify what's "called up" upon entering a room, I must implement whatever I need to implement before I actually enter the room.
The simplest way of going about all this is to change what character is in a particular slot in my party, before entering a room with an event, or at least a room in which both of my other characters come out. This is important because I'm fairly sure the memory won't naturally call up graphics in rooms/events for characters that aren't going to appear. Simply switching my slot 2 and slot 3 would not work, as the memory doesn't care what order my party is in; it's only concerned with who's in it. So I must either use PHS or the USO code (or anything else that would achieve the same effect) and change the character in one particular slot (and then run searches accordingly).
Another thing to note is the way sprites and graphics work on the world map (and may work in towns). I'm too lazy to go and get actual numbers from somewhere in my notes, so I'll give you an example instead. If sprite "blah1" contains the graphic of Ultimate Weapon, I'll simply call it Ultimate Weapon's sprite, during this example, to simplify things. So, let's say, for example, that the sprite values were arranged as so (now remember I'm inventing all of this, so mathematically it probably won't be sound):
80091234 A634 - Ultimate Weapon
80091234 A754 - Airship
80091234 A874 - Cloud
This, is, basically, how these three are actually arranged. From Cloud, the sprite values go down to the airship, and then to Ultimate, and so on. Now let's say the graphic values (which are at a different address for each sprite slot) were arranged as so:
80092000 4502 - Cloud
80092048 7403 - Airship
80092090 5404 - Ultimate Weapon
Remember that the first two digits of each value here are graphic behavior. The actual graphic mod is just the last two digits. Looking at the above (fictional) sprite control mod and graphic mods, you'll notice something interesting (and if you don't, I'll tell you anyway, heh). While, as I've said, the values of the sprite control mod go down progressively from Cloud, to the airship, to Ultimate Weapon, the graphic values go up from Cloud progressively, in exactly the opposite manner (graphic mod addresses, by the way, are in the same order as values of the sprite control mod) . This may be the way sprites/graphics work in towns; instead of using the list of digits way above, perhaps the inverse should be used as a reference point. I won't know this for sure until I've hacked the code, heh. I'll first assume that things work in regular order, and if that seems to fail, I'll of course try things assuming inverse order. Either way it's something to keep in mind.
Everything I've done so far has just been to build a sort of rough base from which to start. I'll actually do some hacking using these theories probably tomorrow. I am finally out of school for a while. If anyone wants to jump in, be my guest; it'd be great to have another hacker to compare notes with, or even someone doing testing. Ahh, well...
Post 2
I managed to find the addresses that modify what graphic each of your characters (Slot 1, 2, and 3 in the menu) is represented by in town environments. This, unfortunately, only uses the list of characters that the normal character mod uses. As a result, you can have Cloud, Tifa, and Cid in your party, and run around as Red XIII, with Yuffie and Cait Sith popping out during events, but that's about the extent of its abilities. Here:
In-Town Character Graphic Mods
3009D391 000? - 1st
3009D392 000? - 2nd
3009D393 000? - 3rd
0 - Cloud
1 - Barret
2 - Tifa
3 - Aeris
4 - Red XIII
5 - Yuffie
6 - Cait Sith
7 - Vincent
8 - Cid
9 - Young Cloud
A - Sephiroth
B - Invisible
|
20 - Invisible
I'm fairly sure everything after B is nothing, but if anyone wants to check 21 and above, they're welcome to it, heh.
A problem to note is the fact that only Cloud, Tifa, Cid, and Red XIII were ever meant to lead the party, so other character graphics, when used as the graphics of character 1, will not allow room transitions (in other words, you can't change rooms unless you have Cloud, Tifa, Cid, or Red XIII as your main character). At the moment I can't see how this would be fixed if someone went about to try, but I'm open to suggestions.
Another issue is the fact that graphics for most characters haven't been introduced at the beginning of the game, so generally until you've met a character, you can't use it as a graphic, which really sucks. Ahh, well...
Any input?
|
![]() |