The Skinmancer – Post-Mortem

55643-shot0-1461026991.png

I finally got around to writing our post-mortem. I was super exhausted after this year’s Ludum Dare and couldn’t muster the energy to write. I just wanted to play the cool games you made and forget about ours. My brother also had his wedding the day after LD, which exhausted me even more.

Anyway, here it is … 😀

The Skinmancer was a tough project to do but working on it was also very rewarding. I wanted to take the time to reflect on the Ludum Dare and share some of our design decisions and background with you guys. :)

Great… another platformer…

Well, yes. 😀 We really wanted to make a platformer. We have been avoiding making one because (a) it’s obvious (b) there are so many of them. But we really needed to get that out of our system. :-)

Please consider giving it a try!
http://ludumdare.com/compo/ludum-dare-35/?action=preview&uid=55643

Learning goals going into the jam

Me and my partner came into the Ludum Dare with a few specific learning goals.

  • I wanted to make a Unity game that looked and fealt like a chunky DOS game or even a Game Maker game. Unity is pretty decent for 2D games, but when it comes to pixel art games, it is clearly lacking. The physics doesn’t feel right and objects in general feel very “floaty”. I wanted to write a framework that is both pixel perfect and had the crunchy arcade physics that we all love about Game Maker games.
  • I wanted to make a Unity game that uses only one scene. I think the scene system in Unity is a bit messy when it comes to things like game managers, audio, etc. I wanted the framework to utilize only one scene for the final game. Other scenes are mainly for testing game objects in a sandbox and for creating prefabs or UI elements. Those are not included in the build.
  • I wanted to try a style of music I had never done before. Also music-wise, I wanted to make a song that modulated to a different key for the B section.
  • My partner, who did all the art, wanted to practice his character design and tileset chops. He has been struggling with conveying details on very low-scale pixel art and he wanted to break through that learning barrier.

Combat, Death and Pacifist Run

We purposely did not add any screenshake, big bullets and tons of enemies to mow down. While the game features combat and killing, it isn’t really about that. We wanted to put the focus on exploration and finding your way to the captured family members.

We wanted combat to be hard and rewarding, but also mostly unnecessary. I put a ton of effort into the AI to achieve that goal. It observes the player, mimics the player’s stance, etc. More on that later.

There are not many enemies in The Skinmancer and when you have the ferret form you can even avoid all fights without getting hurt, thus making it possible to do a pacifist run.

Killed enemies just fall over and their bodies lay there and don’t disappear. Enemies can also get hurt by the same environmental hazards as the player (most notably probably one or two of the hunters you encounter after you get the ferret form). I didn’t want to make death a bloody and gory mess.

The combat is obviously inspired from Dark Souls. The player can block, duck and attack. The enemis can do the same, with the exception of the marksmen, who have no shield.

AI

I wanted the enemies to be tough. If you engage them, they really try to hurt and kill you.

The AI is implemented as a FSM. Behavior trees are probably better suited for this type of AI, but I’ve never worked with them and didn’t have the time to learn.

The default state is a simple Patrol state where the character wanders back and forth around the start position.

If the enemy notices the player, it switches to an Observe Enemy state. Noticing is either line-of-sight or hearing. Both are simple raycasts but hearing has a shorter range and only triggers if the player lands on the ground near the enemy. This makes it possible for the player to sneak up on enemies and get a hit in before they have a chance to block.

The Observe Enemy state has two purposes:

  1. Deciding on the best next action to win the battle.
  2. Simulate a reaction delay. The tactic to pursue is chosen instantly, but executed a bit delayed.

The enemy AI can choose between 4 basic tactics: Block, Attack, Gain Distance and Close Distance.

The priorities the AI chooses are different for swordsmen and archers. While swordsmen want to close distance and engage in melee battle, archers try to move to
save distance.

The nice side-effect is that swordsman and archers change their positioning if you jump over them to get the archer first and the swordsman blocks your attacks for him.

The swordsmen prefer to go into blocking first. The blocking state works like this:

If the player ducks for a lower body attack, the swordsman will mirror the player’s stance after another reaction delay. If you don’t attack quickly, the swordsman will block your attack and immediately follow up with a counter-attack.

Sound

Screenshot 2016-04-29 023

A lot of people mentioned the lack of sound and I wanted to adress that.

I did make a bunch of sounds with bfxr, but to be honest, it didn’t fit the mood we were going for at all. In the end I didn’t have the necessary time for more appropriate sound design. I hope the lack of sound in the game doesn’t take away too much from the fun.

Music

I usually like to work with synths, so using sampled instruments was a nice change of pace for me. I started off by going through some of the Kontakt libraries I had and picked a whole bunch of instruments that fit the mood and feel I wanted to go for. For reference I listened to a lot of tribal music and the Hunter x Hunter (1999) OST.

I wanted the music to be rythmically complex so I started with percussion, layering bass drums, claps, snips, until I got a nice rhythm going on.

Next I added the bass line which consists of a choir and a synth pad (ok I snuck one synth in there!).

I got a simple bass line going and then I just jammed on my keyboard using different instruments I picked. When I stumbled upon a phrase I liked, I recorded it, repeating the process a few times until I had a bunch of material to work with. I developed a few variations for the parts I liked and assembled everything into a nice
A section.

I didn’t quantize the notes by a lot because I wanted a more natural and lose feel to the piece.

For the B section I tried modulating to a different key in an altered scale. The B section is a bit sunnier and happier but doesn’t last that long. The contrast when looping back to the A section is quiet dark.

All in all I am pretty pleased with how the background music for the game turned out.

What went good

  • Used Tiled + Tiled2Unity – The native Unity tilmap system is not quiet ready for use in production and Tiled is still the best tilemap editor out there. It was a breeze to use and making the levels outside of Unity and then importing them as prefabs played perfectly into my plans to make the whole game in one scene. If you haven’t tried Tiled2Unity, I highly recommend you check it out.
  • Working component-based – I’m pretty new to Unity and in my previous games I have written a few monolithic classes. My classes in The Skinmancer are also quite big, but I managed to create a nicer architecture for this game. Thanks to breaking everything up into components with specific tasks it is possible to hook the game controls to any game character. Theoretically you could play as a swordsman or bowman. Game objects react to buttons and axis and all the AI does is providing button actions to the game objects. The character controllers are the same otherwise.
KFsPrKb.gif

Regrets

In the end, I only spent about one hour on level design, which is not enough for a Metroidvania-type game.

Funnily, we got very positive comments about the level design. I guess I intuitively made a few good choices based on what I had been thinking about all weekend.

Originally there was to be a third form, the Fish Form, which would have unlocked a whole different forest area and a second keep that could only be entered via underground. The art for all of it is already finished but I couldn’t managed to get it in there.

In hindsight, I should have made the AI more stupid. One of the biggest complaints was that combat was too hard. Had I cut back on trying to make the AI smart and fun to engage, the enemies might have been dumber and not as dangerous, but there would have been all this other content.

But even with the content we did manage to produce, the game had a nice and comfortable length for a jam game.

Please play&rate our game! :)

http://ludumdare.com/compo/ludum-dare-35/?action=preview&uid=55643

Source: ludumdare.com archive

Found a bug?
Tell us on Discord