Psychopomp Remake

Psychopomp Remake

VinnNo.0's picture


So, there's not a whole lot to show that will impress anyone but I've been remaking the psychopomp in the unreal engine. Most of the work so far has been on the engine itself, because it has limited 2d support and is bloated with a lot of things that wouldn't be useful for a 2d game. I've given other engines consideration, and despite warnings of using unreal for 2d, it's open source and has a massive list of platform options, so it seemed like the best choice.

SO! What I've done with Unreal 4 is fork the engine to my liking and added some neato features!

Firstly (and most importantly), I created a svg rendering system! It started off pretty basic but has grown into a pretty unique system. It reads the svg paths and applies them to a mesh geometry (purely height and width, no thickness) that is updated via the frame system provided by as3. So, most things being rendered are pure math expressions, instead of shuffling images. I plan to expand on this even more to provide some aesthetics down the road. For example, It can read as3 bones right now, but later it might be cool to have the bones with a limited range of motion and maybe have the psychopomp bend his knees on a tween when landing after a long fall or something.

Particle Classes! UE4 has a really powerful and lightweight particle system already in place but it's a bit much for what I want from it. That and there doesn't seem to be a way for particles to run code individually, and certainly they can't execute blueprints individually(which is probably not a good idea anyway?). In GMS, the particles I made for the pychopomp were all objects, running code to interact with the enviroment (EG a passing shot would knock them out of the way, they bounce off of the characters etc).  This system is still very basic and needs a good deal of work but has a functional frame and has negligible performance hits.

Json Maps. I have a parser for generating collision geometry made from Tiled maps. UE4 has a built-in tile system and a tilemap system but JEEZ is it problematic. In all fairness, it has a bright yellow eye catcher that reads "EXPIRIMENTAL" when you use it, and from what I can tell from the UE4 community, it will probably never leave the expirimental phase. With the json parser, I can get information of single tiles, the layer it's on (determined from Tiled), add a tile to or remove a tile from the json data with an argument of which layer. In it's current form, it's still pretty basic but I don't need a whole lot and I'll be making the entire game on 64x64x64 tiles/collision blocks.

Gamemaker functions! Despite all of the negative things I've said about GMS, I actually love the engine. I'm just pointing out the limits and problems I have with it when I talk poorly of it. It has an amazing workflow and I can quickly get a functional prototype up and running. So, I decided to make those functions in UE4. Obviously, I don't have everything, but the ones I use frequently and that UE4 doesn't have, I recreated and with blueprint functionality. Direction, speed, lengthdir, component_angle(formally image_angle), alarm(with a capless array, where gm has a limited amount of alarms), path_start(using splines) etc. I also included some of the scripts I made for the psychopomp like face_player(0..1) as native functions.

A custom character class. UE4 comes with a character class that works very well for a lot of purposes, but it's a bit bloated for what I need. I based this new class off of the basic object I used as a parent object for both enemies and the main character in the jam version, which makes use of the recreated gamemaker functions. From this class, there is three additional child classes: enemy, generic(for collectibles, npcs, keys or anything that might need movement), and player.


So, now I'm at the point (FINALLY) where I can actually start making the game! While I've barely made any progress on that front, I've taken into acount the feedback I've gotten from the jam:

I have a dynamic camera that provides a much larger visual range than the jam version and gives a little bit extra view by zooming out when jumping or dashing. Hopefully it's not disorienting @.@

The controls can be altered to any button on any connected device that UE4 can read (which seems like everything), though there's no UI yet. Its in a debug state so it's just alt + current button + new button.

There's a dedicated run button, so you can move slow when you need to be careful or just take off for a quick get away, instead of waiting for the longer speed buildup in the jam version.

Knockback no longer applies when you're already in the hit state, allowing you to reposition yourself better, even if it means passing through an enemy. Handy for dealing with enemies in cramped spots.

An enemy in the hit state no longer causes damage on contact, allowing you to pass through to a better position, if need be.

Enemy respawing is volume based so it's much less of a pain to backtrack.

I've made a checkpoint system to save everything( instance variables, instance positions, instance mesh frame etc) in the volume the player is currently in.

I'm also happy to report that what little I have so far will run on a $40 android phone! So, if I can keep this up, other platform builds should be a breeze.

Anyway, here's a sneak peek at some of the basic character functionality and the new visual aesthetics! Thanks for reading!