armips news

I hope you’ve all been enjoying Oriental Blue! There hasn’t been much progress on the other translations this time, but those are far from the only things I work on! In the last six months I’ve spent a lot of time on improving my assembler. I rewrote about half of it, added a few very neat new features, and made it open source on a GitHub repository. If anyone wants to contribute to it, pull requests are welcome. Otherwise you can just check out the latest stuff. It needs Visual Studio 2013 to compile, and the Visual C++ 2013 redistributable to run.

Here are the currently notable changes since the last release:

  • it is now possible to load (non relocateable) PSP ELFs via .loadelf name. This takes care of any address calculations. Many more PSP specific opcodes are also supported, though not at all yet
  • now fully UCS2 compatible. Can read from UTF8 and UTF16LE/BE by detecting the byte order mark. Can be told to interprete a file as Shift-JIS, too. If no BOM is found, it defaults to UTF8
  • the biggest new feature: importing static libraries compiled for PSP or GBA/NDS. armips takes care of relocating it to the current address, resolves external symbols using the user defined labels, and makes all exports visible to the rest of the assembly code. Essentially this allows you to write a lot of your code in C/C++, and then easily link it into the existing game using armips. The usage is .importlib name.
  • new -sym2 format, which adds support for functions that PPSSPP can interprete. .function name to start a function, and .endfunc to end it. .function will implicitly end any previous function.
  • new directives: .function, .endfunction, .stringn, .sjis, .loadelf, .importlib

I’m not sure how long it’ll take to wrap things up for the next proper release, but it will definitely be the biggest update so far.

Oriental Blue Release

obtitle

Admit it! You didn’t think it would happen. But as I’m sure you all know, it’s still summer! At least for most of this week.

Oriental Blue is an RPG that’s part of the popular Tengai series, also known as Far East of Eden to most (see the Readme for details on that). It features non-linear gameplay, an intelligent battle system with a unique magic system, and near endless replayability due to countless minor and major choices that you knowingly or unknowingly make.

The translation project was started on October 16 2008, and was announced to the public on March 15 2009. Tom, who is known for translations such as Dragon Quest Monsters: Caravan Heart and Persona 2: Innocent Sin translated it. It has obviously been a long project, taking much longer than I would have liked or expected. While the translation was finished relatively early on, the hacking dragged on for a long time… other projects were close to release and had to be finished, university took a lot of time away, etc.

We eventually reached a stage where it was ready to be tested on April 9 this year. It’s a massive game, so it was always the plan to have a long and thorough test. I didn’t expect it to be perfect, but as is always the case, the amount of issues that were found was pretty disheartening. A total of 130 issue tickets were opened on our bug tracker, of which 53 were technical issues. A huge thanks goes out to our beta testers for this amazing performance. I especially want to highlight Lord Oddeye, who played the game more thoroughly than anyone else and did his best to try every single possible outcome of all events, and made sure to catch all instances of the ever changing NPC text.

And now, make sure to read the Readme and enjoy the game!

Releasing… armips

As usual, it’s been a while! I apologize for my trademark silence, but as everyone knows, it’s nothing unusual.

The previous armips version was released in 2010, and it was very well received at the time. Over the years, I kept adding small new features to it, and I think it’s a good time to release an update now. The most notable additions are static labels, which act like global labels but can be redefined in every file, and the possibility to make all file paths relative to the file that uses them (as opposed to the working directory). Everything together makes for a decently sized update. This is probably the final armips release.

Here are the changes:

  • added automatic optimizations for several ARM opcodes
  • many bugfixes and internal changes
  • added static labels
  • new directives: .warning, .error, .notice, .relativeinclude, .erroronwarning, .ifarm, .ifthumb
  • quotation marks can now be escaped in strings using \”.

SLPM_870.50_31032013_185553_0592Now that the exciting stuff is out of the way, let’s talk a bit about our translations! One game is often asked for, but it hasn’t been mentioned by me for quite a long time – Xenosaga 1&2. The translation is still progressing, and in fact, late last year, the story text was finished. However, there is still a lot of optional text left. The translation is progressing slowly, but the translator is as dedicated to the task as I am.

The game on the left hasn’t made a lot of progress lately, but hopefully that can change soon. I’ll try to at least upload some new media during the coming months.

Oh, I nearly forgot: We collaborated with Absolute Zero to bring you one of the most influential Tales games of the last decade, which just happened to be finished today – Tales of the Tempest! More about that on their site.

Finally an update

A lot of time has passed since the last update. Unfortunately, not a terrible lot of progress has been made. As it’s often in life, you never seem to have as much time as you’d like to have. And the older you become, the less time you have. But I am still just as dedicated to finish all the projects!

Dragon Quest Monsters 1&2’s battle text has seen a lot of updates. We reverse engineered the format, are in the process of adding new variables for proper grammar, and have rewritten many instances of text scripts for better and more fluent readability. We hope to make the whole battle text as natural as possible, with full support for all three genders and other grammatical structures. We also just recently fixed a bug that troubled us for over a year. When you started a new game, your monster would randomly do anything except what you told it to do. In the end, a single byte was wrong. I guess that’s life.

I said that I would be disappointed if we couldn’t finish it this year… and that is true. But university has sucked up a lot of time, and when I had time after months of studying, I was so burned out that I couldn’t make much progress at all. We will still do our best… but you shouldn’t get your hopes up for this year. I have faith that you appreciate our translation and hacking quality enough to bear with the time it takes to reach the end.

Super Robot Wars F/FF’s translation has also progressed. Around 50% of the FF script is now translated. The other projects also haven’t been forgotten!

And to finish this, here is a little excerpt of japanese coding goodness I found in one of the games. The variable index can have the values 1 or 4. No others, both before and after the code. This is how they did it:

index++;
if (index == 2) index++;
if (index == 3) index++;
if (index > 4) index = 1;

Sometimes it feels like a miracle that some of these games even work at all.