A FAMILIAR TALE

afamiliartale.jpg

ABOUT

The second game in our own engine. 14 weeks, half time. After a manageable but quite chaotic first project in our own engine I really felt that things started to click and development went far smoother while making this third person adventure game.

MY CONTRIBUTIONS

It was part of this projects description to implement collision using the physX library. Since our main engine-programmer was busy implementing a node editor, the task fell to me. This really took me out of my comfort zone and I learnt a lot.

unknown (2).png

PHYSX

With PhysX I, with some help from the rest of the group implemented:

  • Heightfields made from Unreal exports

  • Character controller using a capsule collider.

  • Colliders made from 3D-models

PIPELINES

The heightfields in our game were made using an image with grayscale colors. Every pixel representing an area having a certain height. Black being the bottom of the world and white being the top of the world. 

Rotation and scale became the two things that had to be solved. After having different heightfields have different rotation and struggling with it for some time I found that they had been exported from different workstations and had different settings for pivot points and world rotation. After exporting from the same computer the rotation was solved.

MicrosoftTeams-image.png

SCALE

The scale also had to be solved. Exported images showing the heightfield had the right proportions but what was the correct scale? We used a full sized model of the field to find the extremes, i.e. the highest-, lowest-, furthest west- and east points.

 Our first attempts came out squashed or stretched leading me again to look at our pipeline. We found that a scale was applied when the heightfield model was made in Unreal Engine and this had to be applied to the in engine heightfield aswell. After that the heightfield worked. 

REFACTORING

Apart from the PhysX implementation I had some time to refactor our sound system and create some UI elements.

Instead of writing every address of every sound by hand we started using std::filesystem to iterate through sound folders to cache sounds on launch.

I also implemented 3D-sound. Having sound just come from one source worked when we were fighting skeletons in closed off areas in our previous game, Spite: Order of Chaos, but now 3D-sound felt like a must. It really helped finding the feeling of being in a forest.