Dev log: New Full Unlock
Saturday, December 27, 2025
On my blog in the past I have liked to write what are... sort of journals of my development of different projects. Like one I particularly liked, despite an obnoxious encounter... was my Star Ocean canoe compatibility patch. For that I had to learn and grow my related skills, so in the end it felt quite rewarding to achieve a working patch.
Working on CaVE has stalled into just maintenance. It doesn't scratch certain itches for creating new things. DisplayEx has been kind of the same. Occasionally there has been a new feature to add to it, but that's uncommon.
I have been searching for a new mod idea to work on, for quite awhile. Mainly, I would like a new Level 2 mod to replace DisplayEx+, so that I can merge the functionality of that into the normal DisplayEx. I want something special for those who go above and beyond to support the project, but the Theme functionality... just should be part of the main mod.
I finally got around to working on a mod recently. One inspired by cucholix. He created a mod that has functionality similar to the Full Unlock, but does not need to be updated. At least, not often... or yet. He shared it with me, and... in my opinion it has just been luck that it has not needed to be updated yet. For me to release such a thing... I would want to eliminate luck as much as can.
I worked on my own version before, but it got a little unwieldy. Trying to auto track version changes and such. I wanted to make mine compatible with all version of the app. v1.0-v5.1 (current at the time of writing this). I COULD do that... But its a huge chore, and as I've realized... for little gain/point.
So recently I decided to eliminate broad compatibility from the project idea, and focus on just future proofing it more than cucholix's original. Once focused as such... I achieved that goal soon enough. I have a code based Full Unlock that is compatible with v2.4+, and is comfortably/significantly more future proof. Meaning, I don't have to update Full Unlock patches EVERY. SINGLE. UPDATE...
But... once I achieved that... that alone did not feel like it was enough. To outward appearances... it offered no more than the patches offered, or cucholix's mod. So no one would really care.
I then started thinking about what more I could do with it, and I landed on one idea. Something... that was part of the Full Unlock... for a single version. In a way at least.
That would be SNES Classic SFROM support.
SNES Classic sfrom's are very different. When you try to use one on the NSO/Classics app, the game just wont boot. NSO SNES v1.0 DID have SNESClassic sfrom support, but it was removed in v1.1. In v1.0, the Full Unlock then made a modification to that code to improve the SFROM support over what it would be otherwise.
My mod now would fully restore SFROM support, and have that little change too!
After a few days of work... I got it done! SNESClassic SFROM booting on NSO again! To me, a awesome feat! But... realistically... to the average user? Meh...
Yea. My mod has improved functionality over the ips patches and cucholix's mod at this point... But not functionality anyone really cares about. All it does is help people who accidentally select the wrong option when exporting in SFROM Tool. I would even suggest people to try and used the Switch format over the SNESC format. Its just better with more options. There's no benefit to SNESC sfroms... outside of some ease with sfrom you may have already. In fact, SNESC sfroms have something that Switch sfrom and canoe does not. PCM audio support. If your SNESC sfrom has PCM audio patching... it will have garbled game music on the Switch.
So... A cool feature to me, but... not a very big or important one to anyone else. Back to the drawing board...
I pondered "what next?" for a bit, factoring in my C++ skills (lacking... I'm a C# coder... and apparently LUA now too). I had to find an idea that was a step up enough to be fun and interesting, while not being so far above that its out of reach... What could I do?
I wrestled with it for a bit, and landed on something bold. Doing something... that... Nintendon't. Solving one of canoes biggest flaws as a emulator for mod users...
ExHiROM support.
Could... I actually... hack in such support? Getting games like Tales of Phantasia, and ROM hacks like Trials of Mana and Crimson Echoes/Flames of Eternity... working?
This would be a big leap. Understanding the inner working of the SNES and its memory map... is not for the feint of heart. It's something thats always seemed beyond me. But... something about it seemed like I could do it... with a bit of persistence...
Helping me was the fact that... I already identified the ROM mapping functions in the code. So I know where to look. But understanding those functions with my C++ skills... is a bit much. So... I decided to leverage AI as a sort of guide or teacher.
Well, I'll be honest. At first, I made the mistake of relying on AI WAY TOO MUCH. Basically, it was the lead programmer, and I was just a test grunt. And... that dynamic got me NOWHERE! At best, that time maybe helped get me more familiar and comfortable with C++ again. But the code was absolutely terrible, and hard for me to follow. Take it from me. AI is useful for code development. But not as the main programmer. It should only be used as an assistant! It should only be used to do repetitive/boring tasks. Or as a feedback person to help work through ideas. Yes, it can code things on its own. But it breaks down after that when it comes to refinement.
Anyway. With me being fed up with the AI running things in circles, I put my foot down and started working on the problem in my own way. Diving into the code myself to better understand it. And... Almost instantly... I had progress!
To my shock... Crimson Echoes was running and displayed on my screen!
I actually did it?
Well... Only it worked at first. ToP and Trials did not. But soon after I got Trials working too. THAT was more significant. Being honest... ToP and either Crimson Echoes or Flames of Eternity (or both) got ExLoROM conversion patches made for them by sluffy. So they could work... just as I recall, there was a few issues. But Trials of Mana? Never got such a patch. So this was new territory.
That was nice and all... But why wasn't ToP working still? Why only ROM hacks? Well, I couldn't spend long on that before I needed to put the project aside for a bit and work on a CaVE/DisplayEx update.
But the whole time the ExHiROM mapping feature was on my mind. Finally... a couple days after finishing the CaVE/DisplayEx updates, I was coming at the issue from several angles when I realized something with my improved understanding of the code and emu layout. I made a mistake with a couple lines. Put simply... There were holes in the ROM data as far as the emu was concerned. I just needed to fill in 2 lines and...
Tales of Phantasia is working! As a proper ExHiROM!
I think thats it now. Enough to call that feature a success, and... for the mod to be seen as meaningful. So... now what?
While it seems like it could be done now. It is not. Why is because, earlier on in development of this overall mod, I realized that using real hardware was too much of a PITA to the process. I needed to be able to use Yuzu or another emu on windows again. It just makes testing SO MUCH faster. But... Yuzu stopped working with the NSO/Classics apps several versions ago. And EVERY single other emu option that exists now to replace Yuzu... is an utter piece of crap. At least as far as these apps are concerned. They just dont work either.
So I had to develop a test enviroment that I could use, with Yuzu. And for that... I decided that using v1.0 of the SNES app was the way to code. Develop there, and port the result to the modern (v5.1) version later.
From there, after a bit of work and clean up, I have it now working on v5.1!
But staring at the code... I just didn't like it. Too messy and confusing. Hard to update. And later on, after I have not working on the project for a bit... it would be EVEN MORE confusing for me to pick back up!
I needed to restructure the code to be both easier to read, and easily adjustable. I needed it to all use an array of struct objects that defined addresses for each version of the app, so that the mod can support the best of both worlds. Yes. I wanted to bring back the idea of supporting all versions from v1.0-v5.1+.
It took a few days, but I got it restructured! It looks a ton better now. And... I have logged addressed in all versions of the West and Eastern apps. So it hard hard coded support for v1.0-v5.1 for both apps!
Just because Im using hard coded direct address support now, does not mean dynamic scanning is gone. Its still there as a fall back. If the loaded app isnt detected as a known version, its assumed to be a new version, and starts its scans for the addresses of the hacks around where they were in the previous one. Highly likely to work... but not perfect. Ideally, I will still update the mod regularly as the app is updated. Hard coding in the new addresses. But I wont need to rush it.
So... Signature Check Skip, SNES Classic SFROM Support, and ExHiROM support. Is it done?
No. I soon was made aware of another ExHiROM. A hack called Return of the Dark Sorcerer. A whopping 8MB ROM! This was notable, since the only ExHiROMs I knew of were 6MB (48Mb). Technically, the ExHiROM format can support up to... almost.... 64Mb. But my mod did not. The last couple banks map weirdly, and I didn't understand the documentation available well enough at the time. So this was a game that... did boot, but was unstable.
When I had time, I thought over the problem ahead, came up with a solution and... there. Done. Was not that hard after all. At least, not with my current knowledge! Last banks mapped correctly, and now... as far as I can see... Return of the Dark Sorcerer works fine!
But... I still don't want to consider the mod done. I have other ideas. And one seemed very feesable to add. I tried polling my Discord channel about the desire for it, but got little or mixed results.
But... I decided to work on it anyway. I feel its a standard emu feature, and if I can support it... why not?
The feature is "Soft Patching". A term for, applying a IPS patch to a ROM, non-permanently, at runtime. I remember the feature in ZSNES. I used it a lot there. For this? Im not sure exactly how useful people would find it. But I want to add the feature!
I worked on that for a couple days, and... its done! There were hiccups. When applying a patch, you have to compensate for if the patch expands the size of the ROM or not. My first iteration did not, but I was well aware of that limitation. One step at a time... The ROM expansion support too a bit more effort, but even then... was mostly hampered by false negatives from choosing a bad game to test with.
Actually, in hindsight, it was not a bad game for the reason I thought. But once I realized what I thought was the reason, I got it figured out and ROM expansion was working fine. It actually felt... kind of too easy. Like I was missing something.
It wasn't until a couple days later that I thought of something, and did some tests. I soon found out that the REAL culprit that hamper the feature development for time was... Idiotic ROM hack devs... not setting the header correctly after creating their hack.
Sadly, few do. And in particular for canoe, the byte for romSize in the header needs to be set. This is something that SFROM Tool automatically does in secret, just to fix what those ROM hack devs left broken.
But my Soft Patching code was not! So I needed it to. After translating some code over from SFROM Tool (C#) to this mod (C++), it was now working! I didn't realize it, but this was why it was unfinished before. It did not support most IPS patches, since... as I said. Most ROM hack devs are lazy and do not update the headers, since most emus expect ROM hack devs to be lazy and not do that. But now the feature does support "most" IPS patches. I only say "most" because I could very well still be forgetting something...
But moving on... There was another feature I tried to add with Soft Patching before I got the header thing resolved. The idea is... To allow users to hold the R trigger button while loading a game that has a IPS patch, and have it skip patching the game. Meaning, load game without the button pressed? Patch loads. Hold R when loading the game? The unpatched game loads.
This feature tripped me up for a couple days, but I got it figured out in the end too. Not a separate feature. But improving the Soft Patching feature... for sure!
...
This was where I decided to leave the mod for now. Package it up, then spend the next bit of time thinking about how I wanted to release it. It was always my intention to release it to supporters. That's a given. But how?
After pondering it... I saw this as a chance to solve 2 issues at the same time. For a long time, there was no way for people to gain access to DisplayEx+. I wanted its features in the normal version, but would need to replace it with something as the intent behind the exclusive access remained. It was a gift to show appreciation to those who supported my projects the most. I was never able to come up with a replacement. Any idea would seem both too out of reach, and like something that shouldn't be so exclusive...
After mulling things over, I asked those community members who I made the mod for, if they would be fine with me releasing it to a wider audience. They were VERY supportive of the idea! So... I had a choice on how to proceed. Merge that functionality into the normal version and release the new mod for Patrons/Level 1 access members... or try something else. Add a new tier to Patreon, and add both mods to it.
At face value, I dislike the idea of people donating $10 a month (the next logical step up for a new tier). But I realized... It's not like most people sub annually. Most do for one month here and there as they can. I never expected that, but soon realized I was fine with that. The entire point of Patreon was about feeling appreciated for my work, and that was conveyed either way. But as thats how most sub... suddenly $10 doesn't seem as bad. No one HAS TO have either of these mods. They are just extras. If you want them and don't mind the sub price, cool. If not... fine. No loss to you. Same as the $5 tier. People that don't want to sub for any price are not missing out on a thing, because none of it was EVER intended for them. For them... The project died several years ago. It only came back, specifically for supporters. Supporters are who I make CaVE for now. Because supporters were so generous, and I felt they were getting so little... THAT is why I made DisplayEx. Directly for supporters, to give them more value in supporting me and the project. It would not exist if this project was still being made for "everyone". Similarly, DisplayEx+ and this new mod are the same. They were never going to be for "everyone". And those who support are not the entitled losers that killed the project. So they wouldn't have a issue with a new tier, and would likely understand completely.
So that was my plan. DisplayEx+ and this new mod for a new tier. I could even rename the Patreon tiers... Level 1 and Level 2, to directly correlate to those who have access from the other path. It would simplify things, clear things up, and everyone would be happy!
Later... I could always restructure the tiers, or the features of the mods if I want. The Level 2 tier is just a trial, just as the original tier was. If no one supported at that level... fine. I could consider condensing it down to the single tier.
But for this new mod... There was a need to consider "everyone". I don't want to manage the IPS patches anymore at all. To do so is stupid. This new mod can replace that, even if I have to strip out features. Which... is what I did. It also helped me decide on a name. Just continue calling it Full Unlock, and call the full featured one for supporters "Full Unlock+". After thinking about it... Just putting the sig check patching in the public version was too little. The SNES Classic SFROM support made sense to include in that version too! Its only real valid use is as a catch to reduce issues among users. Something that's best for everyone. So the normal version would have Static/Dynamic sig patching and SNESC SFROM support, and the Plus version would have ExHiROM support and soft patching... as well as future features. Seems fine.
That was my plan. I built the 2 versions of the new mod, tested them, and prepared for Christmas day! It was going to be great to announce this finally!
Or... so I thought...
Christmas came, I release it, and felt relief, excitement, and happiness... for a little while. All of like... 1 hour...
Within an hour... one of the dregs of the internet showed up. A butt-hurt little troll that saw the news and felt "What? I want that! I deserve that simply for existing! Whaaa!". This little Grinch of a human came into my Discord channel, and within just a couple minutes of joining... was complaining about... well, everything about how I released these mods.
It... really soured the occasion I had been looking forward to for the past month... But he was easily dealt with. Banned. The troll did not want to be a part of the community. He just wanted to feel 3 feet tall and 2 inches long for a brief moment by attacking me and getting some distorted sense of being in the spotlight.
I moved on, went to sleep, and woke up the for the real Christmas day.
I cooked dinner, and relaxed when I could, enjoying my time as I pleased, now having the mod done and out for now. How did I enjoy my time? Well... I like puzzle solving... So... I just continued to work on a reverse engineering aspect of the mod. Something I had been working on, but was finally getting close to figuring out.
And at about the same time as I figured it out... What happened? Another grinch spoke up. One that was around for a couple weeks... But came close to crossing the line, but never quite all-the-way. More or less, he had the same un-solicited gripes as the other guy. He wanted it all, now, easy and for nothing. But as thats not how the project is made... He was butt-hurt.
I banned one guy on Christmas... That was enough. I rarely ban people. Not counting spammers... maybe one person every 1-3 years. I just server wide muted him, and asked him to leave. He clearly didn't want to be a civil member of the community. He just wanted to stir up trouble like the last guy. Like the last guy, he did so within minutes of joining the server, showing that doing so was on his mind for joining in the first place.
I tried to enjoy the rest of my day and move on.
The next day I woke up to... Oh... Great. The first poop goblin subbed to my Patreon, downloaded the mods/files, and instantly canceled... then leaked them online in... probably the most pathetic, childish way possible.
I dealt with that as well as I could, and tried to move on. Its annoying. Drool dispensers like him fancy themselves as heroes, fighting for the little guy. They are fueled by the online back pats of entitled leeches like them. In reality... they are not. They are villains, pure and simple. They are thieves, and only hurt the community rather than help it. Proof? The public release side of CaVE would be my focus still... without people like them. There is no denying that.
I wish that was the end of it... But the deranged tongue chewer even made a sock puppet discord account, just to gloat and poorly justify his actions with his delusional ramblings... right into getting swatted with a instant reban.
So... thats my dev log of this new project...
Didn't end like you expected right? Me either...
In the past, I might announce that I was quitting or something. But no. Despite what such people think... Everyone is not aligned with their warped thinking. Is the new Level 2 tier a mistake? Maybe. Does it warrant attacking me for it? No. Does coming into someones house, slapping them in the face, and getting kicked out make you a hero for stealing their car and doing donuts on their lawn while inviting a bunch of like minded people to ride shotgun and defecate all over the interior? No... Clearly not...
I KNOW who I make my projects for now. Their appreciation and respect is all I need! I feel it. Even without words. To share even a tiny piece of your hard earned money, is message enough to me. Want a bit of proof? I have never spent a dime of the money. I will, some day, sure. But it's not why I do this stuff. I would have remained perfectly happy making these projects for everyone, or just discord members... if I could. I just have a issue with people who act entitled to my work. That kind of mentality boggles my mind! Its this weird contrast of... respecting the worth of my work, but not my effort and making it. Like I was born into this world as a slave, required to make projects for them.
I think I need to try and take a step back for a bit. Not quitting. Just... My effort this past month did not end at the point I was aiming for. I was robbed of my victory moment at the end of that marathon. I'm pretty sure that, in time, the voices of the REAL fans of my projects will win out, as the voices of people like these... will fade away.
Thank you to all supporters of my projects! You are VERY appreciated, and keep me coming back and wanting to work on new ideas!



0 comments:
Post a Comment