Happy Final Conflict Hacking Eve, everyone! That's the holiday we celebrate today, right?
Anyway, same deal as last release, it should be compatible with the english translation patch but I tested little, so be careful, and read the other notes in the website page for other minor issues.
you've heard of drawing two right hands on the character by mistake, now get ready for
ROM hacking two right hands on the character! after making multiple notes on how that would be a likely mistake and i should pay attention at this point!
also, fun thing. darksol here is enormous, so naturally he isn't a regular map sprite like the other characters. his body is drawn as part of the map tiles, and then his hands and head, which act as separate enemies, have sprites on top of it.
for the hands, this allows for the cool effect once you defeat them. the sprite disappears, leaving only the tiles behind, which are already drawn in this brown/dead way from the beginning.
the head however? there's nothing like that, the tiles and the sprite are basically identical, save for the glowing eyes and a stray pixel in the eyebrow that might be a mistake. which means I can probably save a lot of ROM space by just. erasing the whole head aside for four (4) eye pixels
Behold, a playable release after 2 years of deranged rambling on this blog!
In theory this should be compatible with the English translation patch because i made sure there's no overlap between the areas each patch changes in the base ROM. In practice however I tested it for like, 30 minutes today so don't be shocked if something goes wrong. I just really wanted some version of this out since now I gotta tackle 150+ boring enemies sprites and it will take a while. Do let me know if you have any issues, please.
Status Update On The Final Conflict Sprite Hack, alternatively titled, The Thrilling Saga of Promoted Julia, or even, Claire, Give Fucking Context To The Dumb Shit You've Been Posting Already
don't worry besties, i keep the world's most ridiculous hacking notes for this stuff, and i'd really like to share some of them now. Ever wanted to know how messy a Game Gear ROM can be? Ever wanted to read a mad scientist's ramblings about it? come on a journey with me.
(note that i'm not gonna explain much of the technical stuff for now, i'd love to document everything about this game eventually but that's a big task, tonight is for funsies only. so just stare at these bytes like they're eldritch abonimations for now because frankly, they are)
Anyway it all began more than a year ago, when I started digging data on this game. I started with palettes because those are kinda easy to understand, and i honestly don't recall how i got to the map sprites from there, but i did, and thus registered it was in my mad scientist ramblings.
and on that beautiful note, i kinda put aside this project for a whole year, until going back somewhere around last october to try to make a script to imitate the game's compression and thus finally be able to insert sprites. As you might know, it took a christmas miracle to finish it. And because I was and am still afraid of how many extra bytes my battle sprites are gonna take, i shifted my attention to map sprites first, since those were obviously going to be much simpler. *ominous silence* I mean, I already had all these addresses above, right? I'd just have to replace them all, and then go find Julia.
and yeah! that's the last post I made about it on New Year's Eve, I had fun, I bragged about the compression working well only to regret my hubris later because it very much ISN'T, we're desperate for extra space in this land, I championed centaur rights only to again regret my hubris because they're currently the only ones with no promotion sprite, I'M SORRY OKAY i'm trying to fix it we're really lacking bytes in this land
but anyway, it was still going great. Not like the centaurs change much after promotion anyway, the art was still an improvement, and thus I filled the whole memory block. Everyone was there. Except Julia.
It feels clear to me that the devs just ran into the same problem, ran out of space right at the last character. Still sucks that they didn't place her at the next block, but hey, whatever, I easily coded a sprite ripper now that I knew how to deal with the compression, she couldn't be that far, right?
of course she was i'm making a post about it
(note: "hooded" mishaela was me misremembering things. i meant this simpler sprite of her, as opposed to the one with a visible face that shows up for most of the game. The fact that this one is the one stored in a coherent way makes me think it was the first one they made, and only later they decided to give her a better face as someone who was gonna have so many scenes)
this is the mess I was looking at, and here's the full sprite for comparison. I have nothing else to add, I understand having separate eye tiles for the animation and I accept that some stuff just got thrown in the end of unrelated block to use the space. But the chair tiles??? no idea what's up with those. For all I know the entire image is just spread around like this.
I haven't looked though, because I had other priorities at the time.
to summarize the next ten billion annotations, this block had a bunch of out of order pointers for every spell effect in the game, including some blank pointers god knows why. Because my script for ripping stuff is amateurish and jank as fuck, i also couldn't tell how many tiles exactly each image has, so this took a lot of trial and error.
There were way smarter ways to find Julia btw, and i'll get to them soon. Still, do i regret this? Of course not. I was gonna want to scrub the whole ROM for unused data one way or another, and knowing all these addresses paves the way for a lot of future changes should I decide to make them. It's pretty nice to know this much about the game. Now, do I regret doing all of this in a single sitting, in a single sunday, ten or so hours of looking non-stop at some garbage bytes?
yeah
i have a few regrets, yeah
remember kids, sometimes it's good to step away from your complicated project a bit.
Anyway, the smarter way of doing this that I mentioned earlier is to use a goddamn debugger to track where the game is reading stuff from, especially since I already knew where the function that reads and decompresses images is located. I'm not very experienced with using the debugger, and even so it wasn't too hard to find it. The pointer led to block $38000. If you're keeping track of these numbers, you might realize this is before the place I started, not after. Despite that starting block.. really looking like a starting block. You know, with all the first characters. Why is there stuff before it? The likely answer is that things got messy the more stuff the devs had to put in, but I also like the answer that they just hated my guts personally.
Anyway! I put my little scripts to the test. Attempted to rip all the offset in the block. First ones did not work, and are likely not even graphics, because again, this is a mess. The 23th came out broken, and eventually I figured out it was a tileset for Galam Castle, see I told you there was a reason I was messing with maps all of a sudden. The reason was, a tileset can be in the middle of the characters. Actually, I have already found way two tilesets, both in the middle of unrelated stuff. I have yet to see a block consisting of mostly tilesets. They're just, around.
Who cares though. After this tileset, finally the clouds parted. There it was. The joy of my life, the light of my eyes.
i was so stressed between searching for Julia and dreading the upcoming task of redrawing 50 or so enemies that I don't care much for, that it completely slipped my mind that eventually I would get to redraw Adam for this game. I legit screamed his name when I saw him, absolute joyful moment, you had to be there.
So yeah, stole Julia's thunder a little, sorry woman. She was there though, very last character on the block, after a bunch of NPCs. Not wanting to mess up this far, I was a bit more careful than I was with the previous block, taking the time to count how many bytes I would need before inserting stuff.
the byte economy is harsh and unforgiving.
anyway, it was always obvious that i would have to learn how to reallocate sprites to other blocks, but this made it clear that i would have to start looking into that like, now. And I would have to find a block with enough space to receive new stuff too, which was looking unlikely with how many things were shoved around in all of them. I tried to save space on this block by messing around with the castle tileset first though.
I saved a total of 50 bytes.
Yeah.
Without much idea on what to do, I just went looking for Mishaela's sprite since it was one of the few missing at that point. Hilariously, she's all alone in a certain block that contains no other graphical data as far as I can tell. It's just her there. I really don't understand why they gave her two sprites, and I would guess it wasn't a very organized decision.
And that's when it hit me, like, yeah, society really has no use for two Mishaelas. It wouldn't hurt much if I reassigned her to use a single sprite, and used this space for Julia instead, right?
So uh, Mishaela's sprites are 557 bytes.
You see Julia's sprites above? Sum up all their sizes together.
The byte economy is harsh and unforgiving.
Small setback though, I could reallocate one of NPCs in her place, as some of them had compressed better.
And that was it, I found the table that points each character to their respective memory block and index, I tested it by bullying Max because of course, and then I assigned the thief NPCs to Mishaela's address. See it all makes sense in context.
And at long last, several weeks after doing the whole rest of the team, I could finally see the final force member.
the starting gang is done, you have no idea how happy i am to see Sonette here. As I said before her sprites were the first ones I made, and the moment I realized I could fit even her hair decorations despite the sprite size was the moment I really fell in love with this project