NokiMo
quinnk
quinnk

patreon


An Outcry. 2021 Update #2: Making RPGs Antiquatedly


Hello! :>

At the request of Tooth (thank you!), we're looking under the hood to check An Outcry's old, dusty engine today.

Those not in the know: I am talking about RPG Maker 2003.

What!?

Yes, I know. Few people have heard good things about games made in RPG Maker, and fewer people still know any from nowadays that are getting made in a specific instance of that engine that has passed legal voting age. The general impression folks get is one of obsolescence and limitation.

And that impression is correct! :)

However, consider:

1. I am a writer first, a game developer second. If I had had to learn how to properly code before I could put this game on its feet, its moment would have long passed by the time I could have even started. It is, furthermore, a game too big in scope to learn coding with.

2. As a writer, I personally appreciate constraint. Constraint has helped me put my first stories on their feet; it has made it possible for me to remain focused and playful in what I do by flirting with both the liberties and edges of the limitations that I put on myself.

A big proponent of constrained writing and constrained art is the french association of writers called Oulipo, which contained two of my favourite writers, Georges Perec and Italo Calvino.

Warning. Warning. Old men. (© Archives Pontigny-Cerisy)

Yes, I know, using dusty old french people as an example here is a weird move, but that's what I'm about! And I legitimately feel a thrill in trying to work around this engine's idiosyncrasies.  But, of course, it needs to be said:

3. Better the devil I know. Those of you who have been here since the beginning know that this Patreon used to be for OFF's third English translation.- I have experience with RM2003, and I know its tricks.

So, what's working in RPG Maker 2003 like?

Oh, it's hell!

...hella fun, that is!

What you see above is our game's debug room. It was first made by Emceeprophit, then expanded upon by my script-helper Parsely.

The two rooms stand for the game's two routes respectively. Characters are stand-ins for teleports to specific, oft-tested scenes (some of them were, again, censored out).

RPG Maker 2003 does not allow for actual, typed-out scripts; Instead, its programming is done with a button-based event scripting engine.

Each square you see up there is an event. It can be a trigger to be interacted with, touched, or just execute code in the background or automatically.

Here's how that looks under the hood:

A "script".

This is an observational memory-scene from route A. It's an Action Button event, so you have to click on it to engage it. As for all these line started by "@>", those are inserted by right-clicking and bringing up the following Event Command menu:

Its event command list is very hard to navigate and extremely antiquated.

It's a bit of a hassle, but you get used to it fast.

Most of what you see up there isn't all that advanced yet, though- If I am to  talk about event scripting, I need to bring some war stories to the table. Gather round.

What were some tough nuts you've had to crack?

Haha! A few.

1. CAR HELL

You all may remember that scene in Outcry wherein the cars pas by as the Unnamed looks on from the sidewalk, right?

That scene used to be so terribly jank that it almost cost Outcry its place on the Haunted PS1 demo disc.

It jittered, it jerked, it was incredibly busted and used code that was entirely too long and complex for it to be able to work smoothly.

Well! Thankfully, I found a solution.

On the RPGMaker.net forums, there was a topic that taught you how to have RM2003 calculate the position of an image in such a manner that it would always be on the same position on the map. I thought that I could use this script to implement an enormous car animation (made by Kyra) that would make the Vienna City Belt feel as busy as it is in real life.

Only issue was:


 That code was 20+ lines long. RM2003 can't process that fast enough for smooth image displayal.

In the same thread, somebody had simplified and streamlined the code- HOWEVER, that person had written their instructions in Portuguese.

So I just reverse-engineered it.

That's all that's left of this giant wall of text! 

What you see up there is most likely the single most important event script in An Outcry.

Without it, this:

Would NOT look like this, in-game:

Tilesets this complicated and big are generally impossible in RM2003.

Back to car hell, and leading over into another technique that proved extremely important to the future of the game's development-

The animation itself is, due to picture-file size constraints in the engine (the highest you can get is 480x640), basically hard-coded, like so:

It shows a frame, waits a millisecond to frame-buffer, erases the picture, rinse, repeat.

There are typically more elegant ways to to this sort of thing, however:

2. BIG ANIMATIONS WITH MANY FRAMES

At one point of the game that you haven't seen yet, there is a live ticker on-screen that scrolls by text.

This kind of thing is remarkably difficult to do elegantly in RM2003. And... two days ago, I found out how to do it.

Tucked away in the "Show Picture" command is an option to display a picture as a spritesheet! Most people never have need to use this functionality.

I ended up having to, though.

Basically, it's possible to create an animation from a large-scale image (within 480x640 constraints of course) that will play according to the whims of a variable! It's grand.

The sheet in question.

This technique has already proved vital, when it was time to create and display some of the Unnamed's more imposing enemies. ;>

Last, but definitely not least:

3. LIFT WOES

It is surprisingly hard to code a convincing-looking, animated elevator that retains cabin-permanence in RPG Maker 2003. In the course of development, 3 people tried - the latest of them myself.

I ended up creating a variable that would keep track of which floor the elevator cabin is on, and display graphics accordingly.

What you see in the upper left corner is a "dummy". Every so often, it becomes necessary to replace the unnamed with a dummy version of themself so that the illusion of consistency-of-character isn't shattered (from a coding-perspective, there are instances in An Outcry where the unnamed turns into other things, or an exact, but different copy of themself. True horror).

This one is still buggy though. It's a windmill I've yet to best.

Are we wrapping up?

Almost!

Before you go, I need to show you the screenshot of the day! Just for fun, I programmed a Sound Test Menu in An Outcry. I have a lot of nostalgia for those things from the SNES and GBA-era, so it was important to me that it were part of the game.

Here's the code,

and here:

Is a screenshot! (art by Oscar)

Thanks for reading all of this, woaw!

Hope you'll have an excellent day, and thank you! :>

-Quinn




Related Creators