Bashing Blocks for Progress
I’m happy to say things have been continuing to cruise along at full speed. All projects are very active and very far along. What more could you ask for? Releases you say? Soon my friends… soon.
Glory of Heracles IV
I completed all of the technical work on the project and began play-testing on the real hardware. After play testing quite a few hours, I fixed all issues I was able to discover until I could discover no more! Technically, the project is in great standing and ready for group beta testing. However, the script is lagging behind at this point. Although complete, it really is not ready for prime time. After close review, it needs another edit. I logged numerous issues for our translator to review and he has since reviewed them all. He started another round of partial editing, but didn’t have time to do more. So, we decided to get a dedicated script editor to finish the job.
Currently, the script editor is ready to start editing. Upon completion of this round of script edits, we will finally be ready to start group beta testing! The next update you read here will most likely be that announcement! At this point, I have nothing left that I can to do on Heracles, and have been freed up for other projects!
Tenshi No Uta
After running out of technical work on Heracles, I turned my attention to Tenshi No Uta to keep the momentum going. As a result, Tenshi No Uta has seen tons of progress in the past few months! More so than it’s seen in years! This is thanks to all of the new tools I have been developing the past few years, that are now coming into fruition. I was able to use my NuVWF to convert all of the dialog, battle, and menus to VWF. This game will have a complete conversion just like Heracles IV. Few other projects have ever received such treatment.
I was able to use TextAngel to dump all of the remaining missed text, format the script, and insert the script in it’s entirety! The dialog is all ready for in-game review and editing. With the menus, I have English solutions hacked into place for all of them! This includes inserted English place-holder text until the missing parts of the script are translated. That concludes the bulk of the menu work. Only a finalization pass remains when the final translations have been completed! I have re-enlisted Liana (the original translator) to continue on with the remainder of the translation work. I await these translations so I can begin the finalization pass on the menus!
With this, I’d estimate Tenshi No Uta is now 80-85% complete!
NuVWF is a universal VWF engine/library that I’ve been working on for awhile. Now that I’ve gotten far enough, and have some real world application in both Heracles IV and Tenshi No Uta, I have finally updated the forum topics with some details of the implementation. Feel free to take a look if you have any interest in this endeavor. I plan on trying it out in some additional games when time permits.
I’ve posted the latest update on TextAngel in the forum. Basically, it’s in good shape dumping wise, but in design hell due to lack of a coherent insertion solution. Any ideas would be be appreciated. I’m trying to come up with something that works with the node building approach I’ve built for dumping. You can get an idea from the screenshots on the first page of that topic.
Double Time? No, Triple Time!
Shortly after the last update, I was able to get back to major action! I made sure I was working double time to make up for last quarter’s lack of progress. No! That still wasn’t good enough! I had to make the push of a lifetime to make sure Heracles IV was going to get finished. I had to work triple time! The result was one of the most productive quarters in the past 10 years for TransCorp! Where do I even start? I’ll start with the punchline that all hacking is now complete and all currently known issues have been resolved!
I had a big breakthrough with the many NMI overrun problems that plagued many menus. Recall that the original game already used 110% (it overran already at times) of vblank time in many instances. This meant I could transfer NOTHING at all, let alone what I needed to to make the menus work. It looked like an impossible feat to gain the necessary time back. I’ve spent the entire project with the mantra of making the impossible possible though. Persistence pays off and nothing is impossible. I forged on and continued to study the NMI routine for some way to cut it down so I would have some time to at least do SOMETHING! The solution finally came to me when I studied the usage of the CGRAM and OAM refresh DMA transfers that occurred each frame. With some very careful new NMI management, I could defer these transfers on certain key frames without visibly upsetting the on-screen graphics. Next, I cracked how the game was triggering refreshes of tiles and tilemaps in VRAM for loading areas, overworld etc. Coupled together, I was ultimately able to better distribute tasks across different frames and buy a little bit of time on some lesser action frames. I seized those frames to transfer a few bytes at time to make the menus work! It barely works, but it works nonetheless!
It was especially difficult for two reasons. First, the code needed to manage NMI cuts into the very cycles you’re trying to save by managing it. So, you have to strike a ratio where the cycles you’re saving outweigh the management code enough. Secondly, it was very difficult to decide how and when was safe to defer CGRAM, OAM, tile data, and tilemap refreshes. The NMI routine is called millions of times. It’s called on every frame of every screen for the entire game! Thankfully I was able to leverage some key memory locations to toggle this management when needed with limited side effects. This did not come without a price however. Some things are slower and some compromises were made. I have minimized the observable impact as best as possible. With the conclusion of the above issue, I was able to then finish all 200+ submenus and convert them to use the new 8×8 VWF engine!
On the translation front, Kay spent much time revising and formatting the letters, monster guide, and Plato’s journal. We came up with some great ideas to better fit English text onto those little book pages without it looking too cramped. We did have to do some cutting here to make it all work, but Kay did a great job at cutting words rather than content or meaning. I was closely involved in this process and have new found respect for how difficult it can be to do that effectively. It’s much easier to take the cheap way out and just cut some content to make it fit. I’m sure you will all appreciate the passion and effort Kay has put into his work to not allow that to happen. We spent a great deal of time going through all of the 8×8 text and finalizing items, monsters, equipment, battle text, places, and more.
Now that everything works and the game is fully playable again, we need to continue on with some polishing, editing, and revision. We are basically having a mini in-house beta test between myself and Kay. I do not expect any further major issues. After this phase of polishing, the project should be ready to assemble a team for full beta testing! These are good times folks! It’s all downhill coasting to the finish line from here! I’m anxious to rush the process, but I know we need to have due diligence and proper procedure to make sure the release does itself justice and properly reflects the passion and effort that has gone into it!
ROM hacking? What's that?
Things were moving along so well up to the end of last year. I was even convinced I was actually going to finish some of these long standing projects in the near future. What followed however, was a string of life events that resulted in no ROM hacking whatsoever for months. Deplorable, I know. So, here is a little recap of how time can go by without getting anything done when life throws more bricks in your face.
Soon after the last update, December became very busy with overtime at work, unexpected home repairs, family obligations, future planning, and holiday events. Almost immediately after the new year, I became ill with a nasty infection (or maybe multiple subsequent infections) lasting several weeks. This was easily in the top 3 for the longest and worst illnesses I’ve ever had in my life. Several days after I got better, the northeastern US got assaulted with one of our worst winters ever (which was depressing since last year was also a worst winter ever candidate). Shoveling became a way of life and nearly found a place in my daily life. Even when it wasn’t snowing, the relentless arctic winds typically drifted my driveway and walkways over at rates comparable with actual snow storms. Along all of this, at my job a major new product was being launched for a big industry show. I was critical to making the launch occur and I had to work more sustained long hours than I have ever had to before.
The only enjoyable thing I’ve done in months is play the Last of Us and Heavy Rain on my new PS3. Even that was somewhat painful due to my longstanding elbow issues, go figure. Life was really starting to get depressing. You’ve got to try to see that light at the end of the tunnel though, right? The Earth was still tilting me closer to the sun every day and the winter assault finally ended. The big product launch happened at work, and I have now scaled back a bit on hours. I am currently healthy (or at least at my ‘normal’ level these days). So, I’m hoping things will be able to get back on track in a forward direction soon.
It sure is frustrating when you are determined to get things done and life keeps defeating you over and over preventing you from doing so. I shall not update again until there is progress to report! Boy, those could infamous last words, huh? Let’s hope not! Don’t worry, I have been back on track this week with Heracles IV and some worthy progress will surely manifest itself soon!
Lots of things have been going on at TransCorp since the last update. And I bet you thought we were sitting around doing nothing, well… :P. I’m still working on clearing out the backlog of old overdue tasks, as well as continuing to move forward with current projects. Life has been especially difficult again in recent weeks, but I’ve still been able to keep a good pace going. Work is progressing much better than the past few years and that carrot of work completion is dangling within my sites! First, we’ll look at what’s new with the old projects.
Dual Orb 2, Wozz, Emerald Dragon, OH MY!
This has been a long time coming, but I have blown the dust off of all of the old projects to give them the tender love and care they deserve. All 3 have received new patch updates to take care of some long standing things that needed taking care of. Every now and then, I like to enhance or improve my old releases. I never truly abandon them and they are never truly done. In addition to the new patch content itself, I took this opportunity to also add xdelta patches to the distributions for superior patching to IPS (IPS is still included for cases where it is needed). The new patches are also now licensed under the Creative Commons (CC BY-NC-ND 4.0) Deed in an effort to standardize and legitimize the distribution as much as possible for this type of work.
It was brought to my attention some time ago that there were some issues on some flashcarts with the splash screen intros. This caused all kinda of havoc to figure out. Earlier versions of BSNES indicated no problems, and I had previously tested my translations on real hardware via a copier I had. So, it wasn’t until more recently that I was able to decipher the issues. First, there was a crazy issue with my sound driver. The way I was handling the FLG register, echo registers, and ordering/timing of the two caused varying problems on some hardware from distorted to no sound (even locking the game from starting). After running what seemed like billions of tests, I better understood the timing requirements of the DSP’s FLG, echo registers, and their associated functionality. I Just needed to reorder a few register writes, and add some proper delays and it was golden. Secondly, I have always tried to use a minimal initialization of the main system, but it has always gotten me into trouble. What is the minimal initialization? Well, without a real cart with immediate, direct virgin access to the hardware, it’s hard to say. All other devices (such as copiers and flash carts) influence the initialization process by running their BIOS or boot code first. I thought I had figured out the minimal answer for what I was doing, without owning a means for such access. However, it turned out I was still wrong. So, I abandoned the minimal idea and did it the right way, as I should have done years ago. Live and learn, right? Now, the splash intros are pristinly done and have been tested on a virgin cart just to be doubly sure. As an added bonus, I made the intros skippable! Now it can be properly preserved SNES software throughout the ages.
Dual Orb 2 saw an update that finally translated the monster weaknesses for the scan spell. That was something that was missed years ago. I never got to that in the last release either because it was too difficult of a fix to do years after the fact. This time I had a small breakthrough deciphering some of my ancient work that allowed me to more easily do it. I also fixed a small ‘blipping’ issue present while the 8×16 was printing. That one had annoyed me for years. It was a crazy minor tile mapping issue that I’m sure nobody ever noticed but me. I also addressed a few minor reported inconsistencies that I’ve collected since the last release. Every so often detail oriented players come along whom pay very close attention and find some new things no one else before them did. That’s a great feat all these years later after many, many people have looked at it! Congrats! The least I can do is address such issues as a reward. :)
Wozz had previously never gotten a follow-up patch. So, now it has received a new patch update that fixes all of the reported issues to date. Nothing major here, just the usual assortment of minor mistranslations, consistency fixes, etc. There was a pesky missed battle string from Vangas that has alluded me for years that I finally got. I had just a single screenshot of evidence someone sent long ago. I was never able to see this string myself nor find it via searches. At long last, I found it! It had some extra data bytes mixed in the string which hid it from all my previous searches. I never searched for the right combination. Could this be the string that would give new meaning to Vangas, Wozz, or even my life? The excitement from my conquest quickly turned to disappointment. The translation of the missed string was simply that of a generic battle cry… Boo.. Hiss… Oh well, at least the project is now at a status of no known issues. Since it seems I continue to work on my projects years and years after the fact, perhaps one day I’ll revoke the promise to myself of never touching the 8×8 again and do something nice for it. Never say never! Ha!
Emerald Dragon just got the splash intro hardware fix. There was nothing else that needed addressing. :)
Most of the past few months for Heracles has been spent continuing on with converting the remaining 100 submenus to 8×8 VWF. I have roughly completed all of them now. I say roughly because a handful of them cannot be finalized due to some serious problems. Basically, the conversion has been impossible on a few of these menus. I have been trying to make the impossible possible by utilizing every trick in the book, but I still need to go back to the drawing board on some of them. The biggest issue in this game is the original NMI routine exceeds all available vblank time in many instances. Actually, I believe the original game only works properly by the skin of its teeth because most of the registers written to (illegally) after vblank is over aren’t immediately visible and/or fixed in subsequent frames (with legal writes). What does this all mean? Well, it means there is absolutely NO time at all for me to load ANY tiles whatsoever, let alone the tiles I need for 8×8 VWF.
In some cases, I could wait for less busy frames. In other cases, I made some hacks to trim the original NMI routine with optimizations and throwing out things that wouldn’t have visible consequences. Even with that, there are parts in battle that run 20 scan lines over allowed vblank time EVERY frame. I have not been able to skin off enough time to get near that. Even for the frames where I have some time, I can’t get enough time to transfer any large amounts, which typically rules out pre-rendering much. These menus have no loading screen between them either, so I can’t load it during black screen or forced blank without visible consequence. These are some difficult situations to work out.
If that wasn’t bad enough, the second major problem is lack of available VRAM for tiles. I’ve even tried the painstaking hacks of rearranging where in VRAM tilemaps and tile data go. However, thanks to the heavy usage of HDMA, the game typically uses TWO tile maps and TWO tile address spaces for EACH background as it changes them mid-frame. There’s just not enough VRAM available when you have to do it like that. Even with some serious new management, the game rarely reloads tile data. It loads a bunch of tiles very early and expects it to be untouched even when not used. So, even if you have gobs of free unused tiles on the current screen, if you use them, when a later screen which needs those tiles comes, they aren’t loaded. What am I supposed to do? I can’t sit there and figure out every tile data load in the game and load it myself when it is needed. That’s just maddening!
Other than these handful of menus from hell which have no solution yet, the game would be once again ready for alpha level testing, which I usually do myself before doing a second round of beta level testing with others. So, if I can get these remaining menus working somehow, we will be ready to move into the testing phase at long last! So, let’s keep hoping I can come up with some kind of solution to these problems…