Abandon All Hope, Ye Who Enter Here
March 5th, 2015
I couldn’t think of anything I felt like covering this week.
And yes, that includes both the trial for Alicesoft’s DQ clone and SHChara’s “Let’s Make a Mobile Phone Restaurant Game But As a Pornographic VN On PC!” release. It could stand to have a shorter title. I guess I’ll just ramble about some stuff and open up the Bunny Black and Prism Ark forums with lists of the remaining work on the off chance that anybody wants to actually address existing issues. It happened one time with GA and BBA. Apparently my glory days are past though. Doddler’s made big strides lately in PA’s script text (some 7 months or so after I put it on the backburner) and it now displays that correctly, which just leaves… all other text and the entire interface still missing functional tools.
BB1, on the other hand, is my bitch as far as tools go. As I’ve mentioned, though, I don’t particularly like as a game, and even less so after the nightmare that was its interface issues. I think it’d be better to release it once BB2 is approaching a state of ready since that’s a far better game and script and set of characters etc etc, but BB1’s interface was enough of a slog and migraine that I moved onto something else instead (not expecting PA to make its return either) and am now waist deep in that and nearing the point where I really need to start working on another behemoth of an interface so people can start editing it and finding errors needing fixing. I already know at least two or three! If the rest of the interface work for BB1 were complete though, I’d be fine spitting it out there for the world, edited by one person as it is. Perhaps it can be my return to the abandoned April 1st tradition.
   |  |
Let’s go over the thrilling joyride that is the internals of a Softhouse Chara game (at least all the ones I’ve opened up and looked at), and let this be a cautionary tale to anybody else who ever gets the urge to work on one, and keep in mind that this doesn’t count the literally hundreds of different interface panels and buttons. That’s ‘uncomplicated’ (barring the over-designed gem buttons), just tedious. SLC made a relatively solid tool for opening up their vfs archiving format, although I know it does spit out Suzukuri Dragon’s scripts into a fairly unusable format. SHChara games do have some English issues with handling English text though, so I know he did a bunch of internal massaging to make sure they were handling single width characters correctly (both for display and for not expected them to be the size of double width ones for window size formatting and the like), but I prefer just to think about it as magic. It also works pretty well for repacking the archives with one significant exception, but we’ll get to that eventually.
The scripts themselves are actually pretty easy. Within the box file, they’re further separated into additional boxes, grouped in various ways. For example, in BB’s case, all the ‘rest’ events are grouped into the three ‘ie’ (家) boxes, with a few scripts in each box. The ‘hh’ boxes contain the main questlines for the characters, eg hh01 is all of Cass’s events, hh03 is all of Ayaka’s events, etc. The main thing of note is that the ‘zz’ boxes contain all the gallery scripts, and because Japan VNs are often ridiculous like this (see also Duel Savior and Daibanchou), gallery replays are separate from the scenes that they’re replays of, so all that text is duplicated in two places. However, there’s also some command tags in there for… music I think… which are absolute references in the galleries, but relative references in the scenes (I may have that backwards), so no raw copy pasting for you!
All in all though, the scripts are pretty boring and relatively easy to handle, especially compared to the rest. The linebreak character is even just a linebreak (so is ‘|’), so I don’t even need to do any pre/post processing to get it into a format where I can actually eyeball how it’s displayed. The only major thing of note is that they do include some game functions too. For example, the init script contains this behemoth of a line:
\x72 1 “ini01.box” \x72 2 “ini02.box” \x72 3 “ini03.box” \x72 5 “ini05.box” \x72 10 “ini10.box” \x72 11 “ini11.box” \x72 12 “ini12.box” \x72 15 “ini15.box” \x72 16 “ini16.box” \x72 17 “ini17.box” \x72 18 “ini18.box” \x0A\x02\x01\x90 0 \x0A\x02\x00\x0A 1000 \x0A\x02\x00\x14 0 \x0A\x02\x00\x15 0 \xBC 1 0 4 \xBD 0 “Edged Weapons” 1 0 \xBD 0 “Blunt Weapons” 1 0 \xBD 0 “Ranged Weapons” 1 0 \x83\x84\x00 101 0 \x00\x00\x00\x87 101 \x00\x83\x84\x00 1300 0 \x00\x00\x00\x87 1300 \x00\x0A\x12\x00\x00 5 \x1A\x01\x07\x44\x03\x20\x84\x01\x01\x0E :1E9: \x0A\x02\x03\x1C 20 \x18 :1F2:
That defines various initial stats, including cash (1000), skill points (5), and the levels of three default skills. There are a bunch of these type of things all over, controlling various game states for quests or triggers for maps. There are some that I’ve been tempted to mess with because certain quests are… just awful… but the slog of other things robbed my will to go a’tweaking.
Speaking of tweaking and slogs, the obj file. This is basically a catch-all for all the gameplay strings; unit descriptions, mission text, item text, dungeon structure, treasure drops, enemy party formations, skills, so on and so forth. And it is a nightmare in a can. For one, there’s no tool I know of that will correctly repack it. Apparently it’s different. Thankfully, the exe will just load from an obj folder if you put the contents in it, but that’s just a teaser. Those data files are also in a different format than the others, requiring their own tool (by Doddler) to unpack and repack. It also doesn’t help that certain objects, such as units, are saved in the save file itself after being created. So if a unit is originally spawned with a working ability (unique passive skill), they will ALWAYS have a working ability. If it’s broken on spawn, it will never work. Ever. That’s why Darx’s name is untranslated in every screenshot too. Oh, and for some reason, for obj strings, when it reaches the maximum number of characters on a line, it automatically inserts a linebreak. So if the char limit for that field is 16, the string needs to look like: “This is a samplestring that has|text in it.” For it to be properly formatted with a single linebreak between “sample” and “string” and “has” and “text.” If you did something like: “This is a sample|string that has |text in it.”, that would result in two linebreaks between both “sample” and “string”, and “has” and “text”. Thank god I know how to script text processing to handle that stuff automatically. But wait, there’s more!
First, they’re full of massively redundant text. The missions, for example, every single mission is unique. Oh, sure, that “map 40% of the floor” mission for floor X has the same text as the one for floor Y, but that’s just copy and pasted. They’re all defined individually. At first, I saw this as an opportunity to have some fun. That faded with 410 missions and only about 30 unique ones among them. There’s a similar thing with units, only somehow even stupider. Most units come in 2-3 different palette swaps, all with identical descriptions and names. The only difference in the unit file is the ID (different from the name), which is used elsewhere for base stats/level/skills. I imagine they all have the same name because at the same level, they have the same stats, but that makes it confusing as hell when you’re fighting them as enemies because the only visual difference is the palette. That is something that I did tweak, although I’m sure some people will mistakenly hire/replace their own units under the mistaken belief that the ‘higher’ ones are different in any way other than base level.
One particularly insidious and obnoxious part of the obj files is that a lot of the time, but not always, the ID is also used in some way as a displayable string, which means that if you change it, you also need to change all the references to it, no matter where they are, the init script file, some skill definition, the exe, etc. This first came up with elemental types, which needed to be updated in the exe (I’ll get to that shortly), but skill types also fell under this. Another example involves skills. They’re generally split into the ID category and then the name for the usable skill. For Darx, the ID Category is used as the overall skill name, but for all NPC skills, the ID is never displayed anywhere, just the usable skill. Except for healing skills. They share the complete definition for those with Darx, so you need to go through the unit definitions file and update the ID for all monster healing skills to match the ID for Darx’s healing skills. Otherwise, they just never get them.
Speaking of which, another change I made that because I found their implementation incomprehensible was to the way that usable skill works. As you level up Darx’s skills, every now and then, the usable skill associated with that (originally often the same named skill) will occasionally ‘change’ to another one. Except that for every skill except for the top level magical ones, it ‘changed’ to a skill with the exact same name, but a different sound associated with the attack. eg, if you leveled Edged Weapons from 9 to 10, Slash would change to Slash, but it’d play fe001.wav instead of fe000.wav. I… just went ahead and gave them all unique names like the top level magic ones have. It’s something I just find the whole thing completely incomprehensible. There’s even part of the interface saying “THIS IS WHAT THE SKILL WILL CHANGE TO.” Then again, Kamidori had multiple fields in its various status menus that literally did nothing whatsoever, which is a trait that BB shares with it, but this time, I was able to cleanly just erase it. Japanese RPG VN QC has not impressed me.Â
The best of all the obj files, though, is tone. And by best, I mean of course, the worst. Perhaps the stupidest, most incomprehensible part of BB1 is the way it handles treasure drops. Enemies drop locked chests, which you then have to take back and either pay to open at the shop, or you can take a skill and open them yourself, whereupon you’re thrust into what can only be loosely called a minigame where you have to guess what kind of trap the chest has while various party members shout out their guesses. Get it wrong, and it generally blows up in your face and causes a bunch of monetary damage. For the life of me, I cannot fathom any kind of pattern or accuracy to the guesses. You can just save-scum it, but it’s just an incomprehensibly awful piece of ‘game.’ Anyway, the tone file controls their guess text. Each kind of party member has around six different synonyms for “guess” and then ten more possible things to say (there is a bunch of duplication both internally and externally), along with the type of trap, all mashed together into something that may or may not pass for a sentence. It’s…Â a mess of sentence chunks, mostly haphazardly mashed together with mainly hope.
And then there’s the exe. A bunch of important strings are tucked away in the exe, thankfully just sitting out in the open (although in Unicode instead of the usual Shift-JIS). A lot of them are displayable text (battle results, save info, passive skill IDs, elemental types, help popups, etc), which share double duty as IDs as mentioned above. Which means that they need to be updated too or things start breaking. Doddler wrote a bit on manually editing strings in the exe, but thankfully eventually wrote a tool to do that automatically. The only issue is that every string needs to be addressed (eg 0x7518c:Ranged Weapons). And there are another few hundred of these, so… Oh, and if the string is used in more than one place, like elementals or certain popups, then that needs to be specially handled too or it’ll just be updating one pointer. Which one? Who knows!
And that is how a ~6 week script translation turned into a ~3 month quagmire. I have no love lost for BB1 at this point, and still wouldn’t put it in SHChara’s top 5 games, behind at least a couple I’ve only played the demos for, but forewarned is forearmed for BB2 and I’ve prodded at it enough to be confident things are in working order. Like TWINS was to TWAIN, BB2 is the one I really wanted to do anyway, it just felt dumb to start in the middle, and BB1’s script was short enough. How wrong I was about the rest of the interface stuff. Unlike BB1’s fairly unstructured “do random crap on some floor,” it’s actually structured as a real dungeon crawler where you go through dungeons from top to bottom with an actual story driving it the whole way, along with adding a bunch of uberbitch angels as antagonists to be tamed, snarky maids running around, and an actual overall plot (reminiscient in its final span of GA of all things). It still has its own share of problems, especially in the “rape anything enough and it’ll fall in love with you” department, but even above and beyond the stronger cast and better focused story, it does cut out a whole lot of the obnoxious chaff from BB1 in the form of vastly simplifying skills/items into sort of one singular thing, doing away with the chest crap entirely and looks just generally slicker all around… before BB3 goes back and adds a bunch of chaff. I have no idea when I’ll get to it though, but I did mostly enjoy the script parts of BB, even if the rest was a tedious grind.
Or maybe someone will fix Suzukuri Dragon’s tools and I’ll get distracted by that instead.
…Some time after I finish all the other things I’m now drowning in… Oi…Â
Posted in Bunny Black | 9 Comments »
What ever happened to that banner contest?