Jamlytics Jam #1 Participation


Another game jam is over, another somewhat playable game was made. I again used the opportunity to make more of a prototype game in a bigger genre instead of a small puzzle game or whatever is more commonly made during game jams. I always want to make something new and expandable while expanding my Unity knowledge and code snippets. I also only do 3D. My game jam games so far:

  1. I was pretty much a total Unity beginner and made a turn based combat game with elemental attacks that had some combination effects. It was quite particle effects focused.
  2. A platformer. Partially side scrolling, partially top down. The theme was about having different perspectives and limited to 8 specific colors.
  3. A city builder "prototype" with seasons, a few resources and bandit raids. Somewhat barebones but decently playable for such a big genre in such a short time.
  4. A tower defense game limited to two colors, so very artsy.

The theme this time was "A Poor Connection". I mostly care about strategy and action games and since I already had made two strategy games, I made an action game this time. The theme made me think of the player remote controlling a robot and with that it pretty much already had more of a sci fi setting with guns instead of the typical medieval fantasy magic stuff. But a sci fi rifle with various laser firing modes is pretty much the same as magic abilities, so a big overlap. My city builder game already had bandits and defense towers that shot arrows at each other but those were simple target seeking projectiles. In my tower defense game I expanded upon that with actual ballistic bullets and AI that leads their aiming to hit where the target will be if it continuous with the current speed. Here I improved that further with a penetrating multi hit shot and better hit detection for example.

I made a top down shooter in a somewhat open and randomized world. I wanted to make a Zelda or Elder Scrolls style game for decades and used this opportunity to make something in that direction. I made it top down like early Zelda games to hopefully have an easier time with assets, animations, detail level and such and that was a good idea. I ran into various issues like animations being a bit wonky and could partially ignore them because they didn't matter or aren't really noticeable in a top down game. I used both blend trees and animation masking/blending for the first time, quite the difficult area.

Originally I wanted to make a square tile based map generator. A bit inspired by old 2D Zelda games being room or screen based but also a bit inspired by Path of Exile also having a map generator.

When looking at the game world from afar, one can clearly see the four different tile types: Starting tile with the player (no yellow box), tile with no border, tile with one border and tile with two borders. I wanted to make somewhat maze like maps but only made this simple fixed one instead of an actual generator due to a lack of time. The yellow boxes are object spawners that randomly spawn different things like enemies, decorations or mission objectives. The later depending on distance rules.


Issue: Border Vegetation

Inspired by Zelda forest tiles and me wanting to let the game play in a universal environment that could be used in a lot of genres and times, I picked a forest setting with solid borders of big, dense plants. At first I simply used prefabs placed by code but that caused a huge number of batches. I then replaced that by improving an instanced renderer script I had made for my city survival game. Now each plant type in each border rectangle is rendered with one instanced rendering call.


Grass is off in both scenes. Batches went from 1146 to 364. Besides me removing the bad tree model and different randomization, the scenes are identical. FPS aren't much better in this case but in other cases this should make a big difference.

Issue: Grass Rendering

I have barely any images but I had a lot of back and forth between standard Unity terrain grass and the GrassFlow plugin as well as various billboards and more bush like grasses. GrassFlow doesn't work on multiple tiles/objects and didn't work on WebGL so I had to use the more limited standard one but I improved it a lot with a custom shader with wind and randomized colors. Here two images without randomized colors left and with randomized colors per bush on the right which looks much more lively and less flat.


Everything I tried with billboards just looked way worse and the performance wasn't really better. In the end I applied a recently discovered "trick" by making the bushes and the flat ground texture have a very similar color and "noise" level. This makes it look decent even if the grass doesn't cover the entire ground.

Issue: Expensive Light

Just like in my first game jam game I use a lot of particle effects and gave them lights to improve the visuals a lot. But this time even with deferred rendering the performance was quite bad in intense fights. Maybe it's the combination with all that grass, no idea. I found a way to make fake lights with horizontally aligned quads (planes) with "multiply" alpha blending.

  • Top left is the scene without any lights: ~148FPS
  • Bottom left with 16 point lights: 94 FPS (with deferred rendering! Forward+ was actually slightly faster)
  • Bottom right has 64 fake lights: ~146 FPS (statistical noise)
  • Top right is a comparison where I tried to make the fake light look similar to a real light and it very much does. Could be improved with a better fitting base particle texture.

So my light alternative is pretty much free performance wise.


Issue: WebGL Incompatibilities... 

Originally I made both that fake light and the cyan crosshair aiming marker with the Amplify Shader Editor... Both didn't work on WebGL so I threw that shader editor away and did the same in Shader Graph and a "LookAt Constraint" instead of a billboard shader. Also some URP rendering order tricks I learned during my tower defense game.

I shortly tried Forward+ after it somehow had better performance with many lights but the WebGL export was just crashing my browser and GPU driver so back to Deferred... In my platformer game I already had issues with Forward+ not having shadows on WebGL while both normal Forward and Deferred worked just fine.

Unity and bought plugins breaking all the time or only partially working or throwing random errors and warnings is so annoying...

Final Thoughts

General game dev and knowledge wise I made a lot of progress and I'm happy with that. The game is probably not that great and the theme is also not that well integrated. I had ideas for more abilities like a chain lightning strike, an energy shield, maybe a cloaking module, random substats, inventory with different modules to pick and crafting for the "weapon modules" (abilities) and so on but in the end had no time for that. Partially because of those issues I kept running into and also unplanned features like the crosshair aiming marker and semi persistent settings.

Game jams are for me more a motivator to work towards a greater goal. This time the goal was some kind of ARPG which has some overlap with other genres like strategy games. I could just make a 2D puzzle game that fits the theme better but that doesn't really bring me forward. Other jam participants multiple times called my ideas/genres overscoped but they turned into relatively playable prototypes. Sure with flaws and very expandable but decent for ~14 day game jams while also working a normal job.

I improved a lot of code like for that instanced vegetation rendering and made new things like the grass shader with wind and random colors which I can both use in future projects as well as my "greater goal projects".

Files

Operation Alien RIPley.zip Play in browser
50 days ago

Leave a comment

Log in with itch.io to leave a comment.