A multi-level project for Amnesia using the HPL engine. Download and play it now!

Want to skip to the good stuff? Download Amontillado here!

Role: Level Designer, Technical Designer, Gameplay Programmer

Tools: HPL Level Editor, Visual Studio, Notepad++, Google Docs, Google Draw

Team Size: Myself

Here’s a page keeping track of my progress making this mod. It’s split up into the planning stage with all of the documentation up front, and the milestones I’ve defined for myself. I’ll go into further details in each of the sections: what I was trying to do, whether or not I accomplished it, and what I learned. You can click here to see my proposal, as well as my documentation for Level 1, Level 2, and Level 3.

Planning and Proposal:

After my last level design project, I thought it would be nice to go in a different direction. Not only did I want to make something in a different engine, I wanted to try designing for a different style of play. I quickly settled on Amnesia: The Dark Descent and its HPL2 engine, as I had recently become a fan of horror games.

I wasn’t very interested in Amnesia custom stories at first, given that most I had seen were quite cheesy. However, I came across a mod called The Trapdoor, which was based off of a British claymation children’s show. Not only was the mod excellent, it fascinated me how it was used to adapt something into a gameplay scenario. I was inspired to do something similar; I wanted something I was familiar with, but basic and short enough to prevent having to write an expansive narrative. I eventually decided on The Cask of Amontillado, a short story by Edgar Allen Poe.

I immediately realized that I couldn’t make a mod of the actual story; the whole time, Fortunato is accompanied by Montressor, and I certainly didn’t want to script the AI for being accompanied by someone. Besides, there weren’t any art assets in Amnesia that I could use, and it didn’t make sense to recreate the story with random monster encounters tacked on. Instead, I decided to make a sort of epilogue; a friend of Fortunato breaks into Montressor’s estate in order to find him, but is captured and must escape. While down there, the friend encounters a mutilated and delirious Fortunato, and must escape the vast dungeons beneath the manor. With this, I could minimize interactions with other people, and also fit the narrative in Amnesia’s gameplay in a way that made sense.

My goal for this project was to have a published mod at the end of the process, focusing on applying level design practices to horror gameplay. I planned on having three levels, which I thought was quite a bit of work, but achievable in the fifteen weeks I had. After presenting my proposal, my professor said he liked the idea, but was concerned with the scope, and suggested reducing the project to two levels. I was also concerned, but resolved to push myself to get the core of the idea implemented, and came up with some strategies later on in order to reduce the scope.

Milestone 1: Level Blockouts

I decided to follow the outline used in my last project, and started with blocking out the space. I quickly realized that I was going to be behind, though this is mainly because of the scale of the areas I wanted to make. Following the rough outlines on my document, the spaces felt way too large. I later scaled down quite a few areas, especially in the first level, to make them feel more in line with what I wanted. This ate into some of my time for Milestone 2, though there were a couple of days where I devoted myself to finishing it.

Level1Milestone1Side

Fig 1: A screenshot of the first level blockout at Milestone 1. A lot of the too-large areas had yet to be reduced.

Milestone 2: Lighting and Partial Scripting

With the blockout done, I could start implementing gameplay and lighting for navigation. Since I was starting to get my feet wet with AngelScript, the language used for Amnesia, I figured I would start simple: setting up trigger areas, enabling and disabling lights, and getting items to trigger events when picked up. This was around when I started to realize how strange Amnesia’s design is; the player loses a resource called sanity while staying in the dark, and as such the levels needed to be generally dark. However, without a lot of ambient light, the point lights used to lead the player really stuck out. I wanted to keep the levels generally dark, but I didn’t want walking through the level to be a simple connect-the-dots affair. This came across when I asked my professor to play through the levels, as he could barely find his way around. It was apparent that I needed to strike a fine balance between navigation and keeping the darkness threatening.

AmontilladoSewer1

Fig 2: A screenshot from Level 2

I was able to get most of Level 1’s gameplay finalized, and some of Level 2. For Milestone 2, our professor actually had my classmates and I critique each others’ games. I was worried about what my friend would say about Amontillado’s current state, but he was actually very positive. Among the things mentioned, he said he appreciated the lighting revisions, and could now feel the intent of the first level, saying “it has the flow”. This got me really excited, and I decided to tackle the more ambitious coding for the next milestone.

Milestone 3: Finished Scripting and Partial Prop and Sound Passes

This is where I really started to lag, as I ran into some frustrations with AngelScript. Some of the things the code needs to work are so extremely specific that I often had to give up and return to them later. For example, I had great difficulty getting a door to swing open for a day or so. Eventually, I found the solution to be embarrassingly simple, as I just needed to rename the object from “StudyDoor” to “StudyDoor_1”. I lost another day trying to figure out why my custom notes and text wouldn’t load in the game, only to find out I had to launch the whole project through the Custom Story menu, as opposed to launching a single level. And, as it turns out, the line “AddPlayerBodyForce (0, 0, 2000, false);” doesn’t work, but if you remove the spaces so that it reads “AddPlayerBodyForce(0,0,2000, false);”, it does!

Another thing I had completely overlooked was scripting the AI. Since I was used to Hammer, I figured that just dragging and dropping path nodes and letting the enemy do their thing was all I had to worry about. Turns out, not so! The monsters in Amnesia need to be told which nodes to walk between, and if they aren’t actively doing anything, they’ll actually just disappear. It wasn’t particularly hard to figure out, but it involved time to implement, and I was already behind schedule.

Milestone 4: Finished Props and Sound, Start Full Conversion Process

It started to hit me around this point how large my areas truly were; a lot of them still felt empty, even with the props I had put in them. It didn’t help that I started running into issues with the Full Conversion transition. My first level had used assets that I imported from Amnesia: A Machine For Pigs, but when I changed the file paths in the map, it would go back to the folder where they were originally. I got to a point where I could read in the assets from the new locations, but if I reopened the map in the level editor, they would all be deleted. Re-adding everything every time I wanted to make an edit sounded arduous to me, so I left everything alone for the last month or so.

I also took some time at this point to record some dialogue and import some music I wanted to use. Though I’m quite critical of my performance, my professor and classmates seemed to enjoy it. As for the music, I wanted to use some selections from Krzysztof Penderecki, a composer whose work I’ve admired for quite some time. His freeform compositions always seem disturbing, and are so perfect for horror that they’ve been used in classic films of the genre, including The Shining and The Exorcist.

Milestone 5: Mod Fully Complete 

At the eleventh hour, HPL’s level editor started giving me issues; I couldn’t make any changes to entities and static objects in my levels, but could still add and alter lights and triggers for some reason. Presenting things to my professor, I was less than happy with the results, but he really seemed to like it. He mentioned going through similar feelings with his work, about only being able to see the faults. I was tired from a week of finals, and frustrated with the tools breaking down, so I decided to take a break from it.

After a couple of days, I decided I would spend an extra week polishing things before releasing the project. This was helpful, since it gave me time to fix some bugs I had, as well as rerecord and improve the mix of some sound assets. Even given some minor tweaks and a week of distance, I feel a lot better about the project now. I don’t think this will be my only project in HPL, either…

Postmortem

This is what I emailed to my professor. I can’t really think of what to add, since everything is still applicable.

———————

What Went Right:
1. Scope. I had some doubts near the beginning of the project if I was going to be able to deliver three levels by the end of the semester (I know you did too!). However, I felt like I wanted to take on something more ambitious, and was pretty determined to create what I promised. It ended up being a bit beyond my comfort zone, which is pretty much what I wanted, since I was constantly working on it to keep up with my milestones.
2. Learning New Tools. HPL is a different engine than the ones I had been using before (Unity, Source, DromEd), and I wanted to be able to show that I can pick up and learn different toolsets. HPL was fairly intuitive for the most part, and blocking out and prototyping levels was fairly easy to accomplish. I feel really comfortable in this engine now, and I’m going to suggest to my senior team that we use it.
3. Playtesting And Iteration. I didn’t really get any player feedback on my projects last semester, which ended up in some pretty obvious oversights on my part (did I mention my Level Design professor managed to skip past half of my final?). I really focused on that this time, and got some very useful feedback early on, especially when you saw it in class. It was also very gratifying to see players start to have the experience I intended, which allowed me to further hone what I was aiming for.
What Went Not Quite Right:
1. Scripting Bugs. This was probably the thing that stalled me the longest. HPL uses a fairly uncommon programming language called AngelScript, which has its own particular bugs (not wanting spaces between variables, needing to add “_1” to object names in order to move them). For the most part I was able to work on other things while trying to figure them out, but I feel like I wasted a lot of time being blocked by extremely dumb errors.
2. Insufficient Planning. As you saw, my proposal wasn’t the most fleshed-out document. I had wanted to keep certain aspects secret, so as to not spoil the scares, but I quickly realized that my professor should probably know what the hell I’m doing. There were also certain things that I needed to get in that I hadn’t considered in my schedule, most notably implementing enemy AI. This took away some time from things towards the end of the semester, like prop and sound passes, which I’m a bit less enthused about.
3. Importing Assets And Full Conversion. As I mentioned, I wanted my project to have its own launcher, which required me to reassign file paths for certain assets that I had either created or imported from a different game. Unfortunately, the Level Editor didn’t like this, and decided to erase what I had imported. I was able to recover what I had, but ended up in a place where I couldn’t reopen my first level, which also impacted the prop and sound passes on that map. In the future, I’m going to start my projects as standalone mods in order to avoid this headache.
Overall, I think I’ll be happy with what I accomplished… eventually. Right now, I’m exhausted and am focusing on all of the shortcomings of my project.
———————
Advertisements