How It’s Made: Nongon Edition

Someone asked me about the tech and stuff I’m using to make Nongon, so Imma write a thing about the tech and stuff I’m using to make Nongon.

World Generation

The world generation is fairly simple, and most people could probably work it out pretty quick. I make a bunch of preset platforms in Blender. Some of the platforms are constructed out of a bunch of pieces that I make in Blender put together in-engine, and some I make in Blender are directly dropped into Unity. Each of these platforms are given a ‘weight’ that the actual world builder uses to place them.

The actual generation script begins by creating a grid of points. The Y positions of the points are then moved up or down based on perlin noise. At each point the generation ‘randomly’ picks a platform to base, accounting for the given weights. For example the towers are weighted low, and so appear less often. It then finds the ‘middle’ platform and replaces it with the starting platform, the Cathedral. THEN it looks at all of the nongon spawn points, which are points in most of the platforms, and picks 4, completely randomly to spawn nongons at.

For the final step it picks a random color palette I created and changes all of the colors in the environment to that match the colors defined in the palette.

Assets

The most important thing to note is my fairly extensive use of, and reliance on assets from the Unity Asset Store. The most important assets I’m using are Ultimate FPS and acParkour.

Ultimate FPS I’m using for the basic player locomotion. It’s a little overkill, since I’m using the most basic features of the asset, but there are a lot of nice features for more advanced FPS games. The downside of using UFPS is that it is almost a complete FPS engine for Unity, so things get confusing when you start to do some things with UFPS that it wasn’t designed for.

acParkour is the 2nd, and more crucial part of Nongon’s player locomotion. It includes the ledge climbing and wall running in the game. There’s some things about acParkour that I really like, but also a few things about I don’t like. Pros: Lots of sliders and customization for control, and fairly well documented code. Cons: Some things are kinda broken (at least in the version I’m using), and some things don’t have quite the amount of customization I would like. I’ve spent a fair amount of my time digging through acPArkour’s code to change/fix how it handles tags, and even some of it’s its rotational functions because there was weird stuff not working how I wanted. For example, when ledge grabbing, acParkour clamps your left/right look rotation to a 50 degree angle in front of you. Problems arose at certain angles when your camera rotation would go over 360 degrees. Once the rotation passes 360 it rolls it back over to 0 degrees, but 0 would sometimes be outside the clamped 50 degree look rotation, and so you could look to the right, get to 360 degrees, get spun back around to as far left as you were allowed, and keep looking right forever. This was dumb and proved hard to correct, so I made the player be able to look freely to the left and right without clamping the rotation. That’s all I’m gonna say about that.

I’m also using Rewired. This has proved critical in the behind the scenes handling of input management and using multiple controller types. I would highly recommend this asset for anyone interested in making a game using inputs from any type of gamepad, flight stick, or what-have-you.

On the post-processing side of things I’m using a handful of effects made by Keijiro Takahashi. He’s got all sorts of crazy stuff besides just image effects, including cool particle systems and MIDI controller integration things.

That’s about it, at least as a high level description. That all kinda scatter-brained, but if anyone is more interested in a more specifics about how I did something, drop it in the comments and I’ll probably do a little write-up about it. I’m away from my computer, so I apologize for not putting any screenshots or images in this.

Thanks for reading,

-ya boi Meat Pud (that’s my name now.)