Heroes of Noresskia – 2019 7DRL Finished!

Managed to complete my 15th 7DRL Challenge Entry, PLAY IT NOW!

noreskia8

Heroes of Noresskia is a setting for AutoDM 0.1, both things were produced during the 7 days time window (although I actually missed 3 days of dev due to the happenings of real life and work). This year I used Phaser again, with a somewhat modified version of the ES6 webpack template. The complete source code is here.

I will start with AutoDM since that’s the justification for my entry. I wanted to create a program that simulated the work of a Game Master / Dungeon Master on a pen and paper RPG session (and no, that’s not what all computer RPGs do). It all came from the research I made for my talk at Roguelike Celebration 2018 and the short article I published afterward. I knew in advance the 7 days timeframe was a bit short, but I believed I could at least do a proof of concept.

The rationale behind it was: Rogue’s intent was to simulate a Dungeon Master able to create Dungeon Dive campaigns, what if I try to create a program that can generate and run Epic Quest campaigns? these two are known as the “simplest” types of campaigns/adventures since the objective is pretty straightforward, and players know what to expect, they are the easier for the Game Master to run.

Of course, there is a lot of terminology on RPGs and none of it could be considered official. I did some research on Day 1 (including this pretty good post) and was really starting to despair since the solution to this seemed too complex and hard to scale down into a first iteration. Seriously, just taking a look at that website and reading two articles is enough for you to want to give up any pretensions of making a program able to do a tiny bit of what a good GM can do.

In any case, for the context of this, an Epic Quest type of campaign is that where the party has to travel the land finding clues to incrementally work towards an epic goal such as saving the world by destroying an arch-villain or finding/destroying an artifact, or a similar cool sounding task. All while surviving battles on the road, and becoming stronger to fight stronger monsters. Check this nicely worded article for more info on Epic Quests.

I have had a very shallow RPG playing experience, and I have never done GM’ing, so I just took what I knew from these sessions along with my research, and used that as a foundation.

The initial idea was to simulate the GM process by generating some key points of the campaign and then reacting to the player actions to build the intermediate steps or tweak the outstanding milestones. However, I ran into issues to implement that as an algorithm and had to settle in the end with generating the complete plotline from the onset.

The first thing the player does is setting up his character; since we are emulating a role-playing session, you don’t really have a lot of control over the other members of your party, but for yours, you can set the name, gender, picture, and re-roll for stats.

noreskia6

After this, you will be greeted with an introduction giving you some context of what is going on. As I mentioned, the campaigns that the program can generate have a certain structure that is hard to miss, but it can still generate some variation and get the player in the mood provided he wants to put some effort into it.

noreskia1 The world is modeled as a collection of nodes, one for each location, connected by roads. The party moves by selecting the location to travel to, based on the available connections. In the main game screen, you see the game map centered in your location, the status of your party and the locations you can travel to.

I initially intended to provide towns view using Watabou’s Toy Town, but had to cut that part.

noreskia3

The campaigns are generated as a linear sequence divided into episodes, the player has to travel the land looking for clues to get the artifacts that are needed to defeat the boss of each episode.

These clues are obtained from people in the different locations of the world, where the engine generates some dialog including an anecdote and the clue itself. Once you’ve gathered all the required items you will face the episode boss (or the final boss if you are in the last episode).

I think part of the charm of the game is these dialogs. The generative space is pretty limited now, and although they work well enough for a proof of concept, using something like Tracery (and a very good design) would probably yield more believable results.

noreskia2

Of course, moving around the map has dangers, there is a chance that you might be ambushed by monsters and have to fight your way thru. The combat system is pretty simple, with each character having attack and defense stats, and damage is calculated as a 2 * roll of ATK – roll of DEF. If damage is > 0 it is deduced from the HP. I didn’t manage to implement any magic system or special skills, time was just not enough.

What monsters appear and what their level is, is however based on your party’s experience level. You level up as a party by getting XP, and all your stats increase.

noreskia5

But seriously, the combat system was not the focus of my entry. I had to put it there to add some friction to the exploration aspect, but my intent was to have it get on the way of the player as less as possible. (In the end, the original 7DRL version has an issue where the players never recover their HP unless they level up, thus making it extremely hard to win).

I actually envisioned other dangers for the exploration, such as running out of supplies, but since I didn’t manage to implement an inventory and stores system, it didn’t make it.

So, the structure of the project had the AutoDM program simulating the GM, but in order to be able to create a campaign, a GM needs a setting to work with. Heroes of Noresskia is a classic Medieval Fantasy setting, I still haven’t delved into the details of it, since that was not necessary for this project. It’s basically what you would expect for a classic Dungeons an Dragons world: medieval cities connected by roads and ships, people with swords and bows, monsters roaming the countryside.

I should, however, note the tools and assets I used to build it even if it was not the development focus of the project, since it’s what it’s more visible and also it served as a proof of what the AutoDM engine can do (and could potentially do if expanded).

First off is the actual world map, after searching around for a bit for map generators, I stuck with Azgaar’s Fantasy Map Generator. It can create worlds that are big enough, detailed and more importantly, it generates towns and the connections between them.

noreskia7

While there are generators out there that do a better job at the physical terrain and others that go in-deep into generating town descriptions and population, this one provided the level of detail I needed to make something similar to a Pen and Paper RPG campaign. Unfortunately, I didn’t manage to map all the locations (Actually Kram helped me map a portion of the map, and that’s what ended up being released in the 7DRL), and the zoom level used in the game was a bit too low, would have been better to zoom in closer and show more detail.

noreskia9

Then, of course, another critical aspect of the setting were the illustrations for the characters and the monsters. I went thru both Unity and Unreal’s asset stores looking for what I needed but wasn’t really happy with the sets I found (see 1, 2, 3). The main problem I had was, well, these are icons, so even if they were presented on a high resolution, it was hard to incorporate them into the layout I had in mind.

I finally went back to OpenGameArt.org and checked back into some assets I had dismissed initially because I thought they were too photorealistic, but on closer inspection, they were perfect for what I needed. They ended up having some interesting backstory, they were created as part of a Kickstarter campaign for the FLARE project  (Free/Libre Action Roleplaying Engine) but with the intent of them being useable “[…] in a great many free/libre media projects, from other video and computer games of different varieties, to print board games and rpgs, to modules and adventure scenarios or for use in other media.“. Well, I’m glad I found a good use for them! you can also back the artist’s Patreon to support this great work.

flarePortraits

Some other open assets that were used:

 

And that’s it! please play the game and let me know what you think 🙂

 

 

Haunted Mansion – 2018 7DRL – Day 7, Finished!

Another year, another 7DRL. 14 of them now. Play it now here!

You are a Real State agent who visits an old abandoned mansion to assess its market value and put it on sale, but when you are inside, checking some of its ancient artifacts, you pass out and wake up in a room…. what surprises await for you in the mansion? Every time you play there will be a new adventure!

Credits

  • Design, Code and Integration by Santiago Zapata
  • Game Art by Giovanny Ramirez
  • Cutscenes by Bombillo Amarillo
  • Ambient Music and Sound Effects by Ashton Morris

I was only able to fit less than 2 hours on the final day (!). During the day I precompiled the list of things to be done in my head, to make the most of out the limited time I knew I would have. Here’s what I did during that final push:

  • Integrate the walking animation for the main character (!)
  • Add ambient music
  • Add doors opening SFX
  • Add intro sequence
  • Add endgame image and logic control.
  • Add losing condition (time limit, 20 minutes)
  • Fix issue with conflicting camera fades
  • Add instructions

As you can see, all of it was polishing, no new game content but I think it was worth it to provide a better end product.

hauntedMansionScr

I’m happy with the results this time. Following are the things I wish I could have included:

  • Slightly more elaborate puzzles: I wasn’t aiming for very complex puzzles, but hoped for more than just keys + doors.
  • Descriptions for objects in the mansion, including tying them to the (generated) history of the inhabitants.
  • More furniture and room types: Especially the beds, bathtubs, toilets and dining tables. I got some of them from Giovanny late on Sunday but it was too late to include.
  • A real mansion layout generator: A higher level generator which could decide the room types and positioning based on a general mansion pattern. (Sadly, right now rooms types are just randomly chosen).
  • Footsteps SFX: Time was running out and I couldn’t figure out a 5 minutes solution for this so had to leave it out.
  • Rooms of variable size with scrolling: Will probably require some tweaking to the engine since som many things are tied to the fixed size (had to do it because of the jam constraints)
  • Animations of the character walking up and down and a better walking animation.

On the other hand, this is a list of things I was very happy to achieve:

  • Setting the mood of the game, with the in-game art and the color palettes, as well as the awesome ambient track and SFXs and the intro scenes.
  • The engine for mansion exploration including item management (sadly couldn’t exploit it more)
  • The mansion layout generator, and tying it the engine which included transforming the 2D map into a logic structure.
  • The room generator which managed to create somewhat believable mansion rooms (and was pretty polished)

So far, only a couple bugs have been reported (and none of them seems to be a extreme blocker) which is good:

  • Sometimes you can escape the boundaries of reality and walk thru the background of the room
  • In some contexts, the game runs too slow. (Still trying to find out the causes)

I consider this is a complete game (go ahead and try to escape the mansion!), however I believe there’s potential to continue working on it. Here are some ideas I’m thinking on working on besides the ones already mentioned above (I’ll likely write a longer post about it in the future):

  • Multiple stories mansion: Stairways, balconies, towers.
  • Multiple ways to die.
  • Separate look and use commands.
  • NPCs lying around giving you info and driving the plot.
  • Scary moments!
  • Hidden rooms.
  • More!

Time invested: 30:31

mansionTime

Haunted Mansion – 2018 7DRL – Day 6

Getting close to a playable game, at least now you can roam the mansion and your advance will be restricted by locked doors for which you have to find a key. With some more efort we will have a basic game.

Coded the transformation of dungeon rooms into mansion rooms, effectively integrating the random layout generator into the engine.

Modified the Dungeon builder to generate sections separated by locked doors, and placing keys for the player to find, ensuring it’s solvable.

Splitting the mansion into sections, while not “realistic”, makes for a more interesting scenario given the time limitations. (Else there may be places worthless to explore, and determining the winning condition would be harder)

Screen Shot 2018-03-10 at 2.45.11 PM

While on a boring adults’ assembly, started thinking on the theming of the rooms, based on the list of objects at hand. Ended up with some room type definitions

Screen Shot 2018-03-10 at 10.50.20 PM

Used this to select the floor and wall types for rooms (as well as persisting the color selection).

Started integrating the content into the rooms, starting with some floor and wall decoration.

Screen Shot 2018-03-10 at 10.42.21 PM

To Do

  • Continue integrating different room types
  • Add character art and walking animation
  • Win and Lose conditions

Screen Shot 2018-03-10 at 10.56.11 PM

Haunted Mansion – 2018 7DRL Day 5 – No Code

I couldn’t afford to code on the game today. 😦

However, on the art side, Ashton sent a cool sounding ambient track as well as a pack of eerie SFX.

And we also had advancement from Giovanny who created 40 different objects to populate the mansion.

I also contacted some old friends who made the art of Ancient Shadows, and they agreed I could use some of it on this project, I’m thinking on using them for a kind of intro sequence.

Finally, even tho I couldn’t code, I thought a lot on the theme and general structure for the game as well as the main character. Here’s the first draft, a summary of what the game is about:

You are a boring Real State agent who visits this old abandoned mansion to assess its market value and put it on sale, but when you are inside it, checking some of its ancient artifacts, you pass out and wake up in a room. You find out you are trapped inside the mansion and begin looking for a way out, but as you do that you discover a monster is about to invade our world and the only way to stop it is by invoking an ancient ritual, whose details are scattered all around the mansion.

Of course, there’s only two days left, and I’m super tired… I’ll likely fail.

Haunted Mansion – 2018 7DRL Day 4 – Procedural at last

<insert complaint about being too busy here>

At long last was finally able to start working on the procedural aspects of the game. After a false start trying to come up with a generator that created the rooms layout directly, I decided to do a two steps process where I first generate a general layout and then I can go through each room and transform it to the format required for the engine.

I took Ananias’ dungeon generator as a base, removed a LOT of things on it, and tweaked it for the purposes of this game (super narrow rooms with 8 specific possible exits and no corridors at all.

Screen Shot 2018-03-08 at 9.34.27 PM
Prototype 7×3 room with possible exits marked as asterisks.

It took some effort but finally got some good results. Next step involves mapping this to room data, including translating the vertical rooms to the horizontal format.

 

Screen Shot 2018-03-08 at 9.26.45 PM
Room boundaries marked as #, Doors as + signs, starting room is in the middle on the top

 

I still need to add the locks / unlocks to it (i.e, pairs of keys and locked doors, or some other kinds of more creative obstacles). But I’ll first integrate this basic map into the engine so the player can roam the mansion.

Already thinking in the best way to cut the scope to provide a finished product while it still being interesting and not just an alternate format for a plain exploration game with lots of backtracking.

Things on the ToDo:

  • Integrate mansion layout generator with the engine
  • Character art and walking animation
  • Better Inspect stage objects (Description)
  • Layout generator including keys and doors
  • Mansion history generator

Time counter

Screen Shot 2018-03-08 at 9.56.37 PM

Haunted Mansion – 2018 7DRL Day 3

Didn’t manage to do much today. Especially missed the mark for doing the first version of the procedural generator :/

Added identification of objects via UUID to prevent them from being generated multiple times once picked, this also allowed me to implement the “Drop” command.

Unlocked doors are now also kept status so you can drop your key to lighten your load.

Finally, I got the first batch of art from Giovanny for the walls, doors, and floors. I  did an initial integration (still with random hues for walls and floors) and looks pretty good.

Screen Shot 2018-03-07 at 10.27.10 PM

Time Invested so far: 12:00

Haunted Mansion – 2018 7DRL Day 2

Another crazy day at work and adulting… but this is the 7DRL, there are no excuses.

  • Room Collisions have been implemented, instead of checking point inside trapezoid, I just put some invisible blocks as boundaries.

Screen Shot 2018-03-05 at 11.29.00 PM

  • Added objects in the level with collisions and depth ordering
  • Doors now have to be “used” in order to navigate, and you can potentially use other objects in the world too.
  • Fade effect when using doors
  • Picking up items, simple 9 slots inventory with an “active” item you can change with tab
  • Paint walls and floors in the level with random colors
  • Using keys to open doors

Screen Shot 2018-03-06 at 7.03.21 PM

Giovanny continues working on the art part, mainly focusing on more floor and wall types, as well as some initial objects.

Captura 1Captura 7Captura 3

TODO

Base engine

  • Drop items
  • Persist door status
  • Better Inspect stage objects (Description)
  • Character animations

Procgen 1

  • Layout generator including keys and doors
  • Mansion history generator

Time Invested so far: 9:00