github linkedin email rss

Untold Evils

Back in high school, a classmate named Stephen and I started passing the time in our introduction to programming class by creating our very own role-playing game dubbed Untold Evils. Since neither of us were artists or had any idea how graphics worked in Pascal, we did the whole thing in glorious ASCII art. By the end of the semester, we had a character walking around a map and turn-based battle encounters. Sadly, none of of this work escaped the Alan C. Pope lab.

The opening screens to our remake of Untold Evils. Very important everybody knows about the power of Java.

Coincidentally, both Stephen and I ended up attending Georgia Tech. At the end of 2003 and feeling empowered with our more refined programming skills, we teamed up with a couple new friends and decided to remake Untold Evils. This time we had much greater ambitions! There would be a story, art, music, graphics, and gameplay all reminiscent of our favorite role-playing games growing up. To deliver, we would develop a game engine which not only played Untold Evils, but allowed anybody to create their very own role-playing game with minimal programming experience. Assuredly, the start of a role-playing game dynasty!

The main character, Call, walking around the waterfront of the first demo scene of the game. If you look carefully, you can see the detailed touch of the water moving!

We released a couple of demos of early builds showing potential, but we never quite made the dream happen. After a year of on-the-side work on the game, we would officially call it quits[1]. We still knocked out quite a bit of the fundamentals of a game, and below are some of my favorite parts:

Real art!

The pixel art sprite sheet for our main character named Call.

For the first time working on a game, we had a real artist. Amanda created a whole set of concept and in game art, and she really nailed the old school pixel aesthetic. The perceived quality of a game really goes up ten notches when the art looks amazing!

Classic midi music

Theme accompanying the opening titles.
Keeps you pumped up while in battle.

To this day, I still get psyched listening to the on-point midi music composed by Stephen. Just the music alone makes me want to take on the project all over again 😜. You can really see yourself locked in a classic turn based battle while getting ready to fire off your latest round of magic missiles.

Multi-game launcher

The game selection screen before launching into Untold Evils.

We wanted to not only create Untold Evils, but a game creator which let anybody make their own role-laying game using our game engine. In this vein, I built a game launcher which would let you browse, download, and run any game compatible with our game engine and posted to our site. A classic example of focusing on all the wrong things but still learning a lot along the way. Sadly, we only ever had the privilege to feature Untold Evils in the launcher.

A fully scripted game

Opening scene of the demo showing off some of the features available to a game creator. Everything here, such as the map, camera movement, and dialog, is scripted and external to game code.

When creating a game with a lot of scripted content, such as in a role-playing game, you quickly realize the shortcomings of mixing the game logic with the engine logic. And since we wanted anybody to be able to create a game using our engine without needing Java, we would need a more accessible language for game creators. A scripting language was born.

// Part of the script behind the opening scene in the GIF above 
trigger(
    key = welcomeCutscene
    timesOccurs = 1
    conditions[
        checkFlagsTrue(initComplete);]
    actions[
        enableCutscene(true);
        setCameraPosition(0,12);
        startDefaultDialog(null, /<newline> <newline> Welcome to the world of <color-255,255,0> Untold Evils! </color>);
        panCamera(45, 12);
        wait(3000);
        startDialog(generalCommand);
        wait(2000);
        panCamera(guard 1);
        startDialog(guardsBlocking);
        panCamera(call);
        startDialog(heroIntro);
        enableCutscene(false);
        setCameraLock(call);]
)

I had absolutely no prior experience creating a language. Out of a combination of ignorance and thrill-seeking, I also did not even think to use a language which already existed such as Python or Lua. Thus, I created what would certainly be considered a mess by anybody other than me at the time. None the less, the entire Untold Evils game, from opening title sequences to gameplay, was built entirely in script and outside the purview of Java code. By the time Untold Evils development wrapped, the theoretical game creator had 52 script functions at their disposable to turn their role-playing imagination into gaming reality.

Footnotes

[1] I end up posting a lot of stupid embarrassing stuff on the Internet. At the wise age of 20 and still optimistic about Untold Evils, I created a post on a forum titled “programmer’s dedication (or lack there of)” in which I earnestly questioned why programmers tend to abandon their projects. And I quote, “I see projects that get started, build fancy webpages, advertise to get attention, and some even look promising, but after a month or so the project looked like it has just disappeared with nothing but an outdated news section”. Seven months later, Untold Evils, fancy webpage and all, would cease development.[/f]


Back to fun things