Jump to content

Beauty of Nature - My Project "Beauty of Nature"


Recommended Posts

Posted (edited)

Sit a moment and listen...

So to start with i'll set the scene. I heard of the Beauty of Nature game jam only 5days before it ended, so realistically I had a 4 day dev cycle. I've played around in game dev a lot as a hobbyist, done a few jams, and have done a tiny bit of professional work so i'm not exactly a super experienced developer but i have learned a LOT about getting a jam game done on a dealine without killing myself. I have never done a jam solo, and I have never completed a game from inception to final build, until now. I knew going in I was going to have to do some crunchy hours simply because I didn't have enough days... another 2 or 3 days and I could have slept like a normal person so don't take my crunch here as an example of good working ethics, it was simply what I had to do and no amount of good planning could have helped here (other than perhaps tapping someoen else to help out).

Day 1
I have my core idea, I assumed most people would go for some form of walking simulator to show off whatever nature pack they were going to use so I wanted to do something a bit different. I had this idea to do a top downish spaceship game where you rescued plants from an intergalactic invasive species (think Starship Troopers bugs or their derivative work Warhammer 40k Tyranids). This fit the theme to me as it would be about saving nature and being an allegory of environmental destruction... deep yo. Because i'm super original I named the ship and the game 'Beauty of Nature' to keep things simple.

In a game jam it's really important to have a game, so being primarily an artist I got straight to making art... NO! I was a good boy and got straight to working on GAME MECHANICS. Day one was all about having the systems I needed to make the game. Player controller, enemy interactions, scoring system. I worked with Game Creator 2 (GC2) which is a high level language because I can't code, it's still beta software so I hit some limitations which i'll talk about in a minute, but for the most part I got everything I wanted done on the first day. The ship could fly, auto target and shoot enemies, you could collect plants and enemies and either score or be penalised. I had no GUI on day one but my background variables all said the right numbers at the right time so I was good to go.

Because I -am- primarily an artist I also build the ship model which is quite basic but does the job... made the logo which is on the ship. The ship has opening doors for when the beam drops out (bet no one notices 😄 ) ... created the cone assets for the UFO beam and got all that working inside the controller.

Day one problems were mostly fighting with the limitations of GC2. Without going into too much detail (you can look it up or ask me if you want to know more) GC2 is a high level language based on triggers and actions... triggers respond to things like input, changing variables, conditions, etc. and actions (and conditions) are sequences of instructions that do the actual work. THe limitation is there are only a limited number of instructions so while the system is fairly broad, if there's no instruction for it (or you can't figure out how to build one out of the available actions), you can't do it (or have to code yourself an instruction or hope someone else has made one and put it on the community hub).

So advertising GC2 aside, let's talk about what I wanted and what I got. I wanted to make a robust physics based ship controller... i've tried before in GC2 and not gotten far but that was a while back and theres more there now so I thought i'd be pretty capable. I got my ship moving F/B and rotating L/R fairly easily. I had some issues with the rotation in local space but rigidbodies amirite ? The first wall I hit was side strafing, just couldn't build it. GC2 can add a force, but only in local Z... so forward or backward. So I had to ditch strafing which would make the game so much better, this is an instruction I will try to write later or convince someone to write for me but I didnt have time to play 3 hours of copypasta, fail till it works development. The second limit I hit, and I REALLY thought I could do this one and REALLY wanted it, was having the ship hover a certain distance above the ground so it'd rise and fall over terrain. Again this was a GC2 limitation due to a lack of vector3 maths (again something ill either work out or get someone to write for me). Both of these are issues I could have used code from the net for but I didnt want to spend more time. The important take away here is... I cant strafe which is no big deal, and I can't match terrain height which means our game surface needs to be fairly flat... bit of a bummer in a nature challenge but we can work with it.

I also dropped MK_glow (best bloom/flare/glare/whatever asset evar!) into the scene and played with some Post Processing and whipped up a quick custom shader with Amplify that exposed a parameter to multiply the emission channel so I could make my ship engines pulse.

Day one ends with me super happy, i was only up till about 2am and I had my core systems ready to be thrown onto a map.

Day 2
Day two was supposed to be maps and graphics day. And it was, mostly, but I slept, a lot 😄 Basically for the course of the jam from here on out my sleep pattern inverted so I was doing a couple hours in the morning, sleeping a bit more then doing sort of 4pm-5am ish days. So day two, I head into world creator 2 (stand alone pro terrain software) and build a world. I knew I wanted an arena style with mountains around the outside so I didnt need to worry about building in any fake walls or having a terrain skybox (the map ended up with 2 i didnt notice until I was back in unity and yes, they're just blank colliders now 😄 ). Earlier I talked about not being able to match the terrain height with my player ship and this is where software like World Creator comes in so handy, I was able to very easily flatten out a particular terrain height then add back a small amount of variation so it wasn't completely flat but wouldn't exceed the ship height. If you play the game and drive around the map you'll find places where the ship nearly gets to the groun and places you're flying high above a cratered landscape... so even without moving your character you can still get a great sense of depth by making the terrain do the work.

As a side note speaking of skyboxes, i TOTALLY FORGOT to change the skybox, it's default unity built in skybox, how embarassing. You barely see it but I know its there and it could also have helped with the lighting.

After making the terrain and exporting a heightmap I headed back into unity and imported it with the unity terrain tools... this is probably where I made the mistake I regretted for the rest of the jam. The map was too big. I wanted a smaller franctic game and this map was just massive, 2km x 2km ... waaaaaay too big. At this point I should have either scaled the map down, or gone back and made a new terrain... but I didnt feel like I had time, and it cost me. Sometimes you can get away with a mistake, and sometimes you can't. I got away with it, but i DID have time, and SHOULD have corrected it. This leads us into...

Working with Gena Pro. The map being so big hindered me here because there was so much world to cover. Also because i had this huge flat area rivers didn't make a ton of sense. In the end I created two rivers that led into my crater areas. My plan was to decorate out these craters as a different biome, perhaps with water in them, and also to build some terrain pieces or use rocks to hide the bottoms of the waterfalls... sadly I didnt have time on day 4 and they stayed plain. Im sure if you angle the camera right on the waterfalls they look awful and just end or clip into the terrain but I never noticed playign it and that's what matters 😄 So I carved out my rivers and added the geno pro river meshes... this process was so easy, Id never used the gena splines before but im really impressed... I took a bit of time to play with all the different built in decorates and I can see how useful some of them would be... like using the extrude decorator to build the great wall of china. If i'd had more time I would have added a bunch opf giger-esque bone formations across the landscape but this wasn't learning time sadly. So i built my two rivers and also added a couple of shallow river-less canyons. The map being so big meant I couldn't do enough in the time I had. I could have spend a few hours at this to cover the map but i didnt have the time.

After being happy with the terrain mesh I added microsplat and threw together a couple of materials in substance sampler (which i a STUPID name and I can never remember it). Putting the materials on went smoothly, some simple procedural height and slope rules and bob's your uncle. Given this was a PW challenge I would have done this in GAIA pro but GC2 requires me to work in unity 2021.2 and I dont own the 2021 gaia pro yet so sadly I couldnt. I also would have probably taken the opportunity to learn Flora but again, I don't have the 2021 G.Pro.

So this brings us to vegetation. Given I was on a giger bend the past week and so style my terrain and such on some biomechanics I knew i'd want to use CVP Artificial Cells plants for my 'dead/alien' vegetation. I had some import issues with it, got some tech support and solved them. At this stage I had The Vegetation Engine (TVE) installed and also Nature Renderer (NR) to handle instancing, but NR doesn't play well with 2021 as i'd learn later. I used Geno Pro to spawn a bunch of trees and rocks around my world to see how they'd look and I was pretty happy. This was where I realised NR wasn't pulling its weight as the framerate went through the floor on zooming out. So we switched out NR for VSP for procedural instancing... and since VSP is also a vegetation placement engine I got rid of the Gena Pro spawned veg as it was just in the way (and again, no Flora for me). I also spent a bunch of time converting CVP Artifical Cells to TVE prebabs and creating imposters, this is another place I could have trimmed the fat by choosing what I wanted and only converting that.

this is around when I did my first test build as we'd been talking about builds on the PW discord and I thought you know what, I've got all my assets in engine, if it's gonna break it'll be broken now... build success, off to the races.

Day two I also wasted a LOT of time building an alien bridge mesh you barely notice playing the game unless you crash into one of the upright ones, spend 2 hours UVing it, watched Shang Chi instead of paying much attention to what I was doing and generally felt rubbish and tired. This is why you need to schedule jams well and not burn too hard... unless you're young enough to take it.

Oh I also did a quick navmesh build to see how long it'd take, wasn't too bad so I ignored this until day 4.

Day three

I started day 3 in a bit of a mood because I hadn't got anywhere near as far as I wanted on day two. I had expected to have my map done with vegetation and everything but i'd wasted too much of the second day.

So catch-up day. I spend a fair bit of day three on vegetation, going back and forth on how big the trees should be, getting the coulours right and playing with settings for performance. In the end I wish i'd tried going with much smaller trees to give a giant forest feel, but because my map was so huge it didnt feel right (as the forest WAS huge 😄 ). I ran into a technical issue where my trees were working in editor but not in build. As I was too busy i left this as a day 4 problem. This is ok, I knew it worked before, and I knew in the worst case scenario i could build a new project and transfer my work so I wasn't too fussed.

I moved my game mechanics into the map scene and tested everything worked, capture plants, kill bugs, all good. I also added the plant spawning code which has a list of 50 spawn points I hand placed around the map and it selects 20 of them, checks to make sure they don't have a plant on them already, and keeps iterating until it's dropped 20 plants. Obviously theres something wrong in this code because you actually have to tell it to generate 22 plants to get 20 (for example) ... but debuggging takes time so I just put a sneaky 'this variable minus 2' in my scoring code... now im a professional game dev ! I also realised driving around just wasn't fun so I added the booster mechanic which made a huge difference... you can still go slow to manouver but you can travel the huge map at a decent speed.

I cant remember which things exactly I did UI wise but I did the main game menu and added some audio (not enough... not enough.... i left audio till day four). Because I was working on the title screen I finally wrote my basic plot outline/explaining how the game fit the theme and dropped it on the title page. The typeface is hard to read but is what it is. While working I also watched the marvel 'What If' series.

I didnt have the mechanics yet but I modelled the Slug (and gave it a single wiggly animation) and the slug hives before going to bed.

Day four

This was my last day and I was feeling ok about things. I knew i'd need to crunch so I let myself sleep a bit so that unlike day two id be effective while awake. The first thing I did was start working on my bug spawning system. This took a while due to various issues with timing and spawning the bugs where they'd pick up the navmesh and unity's baffling inability to access local variables in project space and vice versa... so eventually I built the entire slug and it's basic AI in the map project itself and just made it inactive so i could instantiate and activate copies of it. I played with the navmesh a bunch because i'd decided to make the slug reasonably large (I feel like I could have made them twice as big, but the navmesh would have complained). It was hard to see the bugs from the player perspective so I tried to do a billboard system that put a big arrow over them. After spending about an hour on it I was wasting daylight but luckily im a smart cookie and had given them an emission map so I just dialled up the shiny and boom, glowbugs.

Lots of fiddling with AI, balancing player speed. I decided to up laser shots before recharging to 5. I adjusted bug movement speed many, many times. The AI for them is so basic, it essentially just picks a random spawner and heads for it... if it doesn't find a plant there it picks another random spawner and goes there, repeat. So a bug can literally pick an empty spawner 2k away on the other side of the map and go there 😄 so smart! So eventually I made the bugs pretty fast, they'll either beeline to a plant and nom it, or they'll spend a long time wandering. This is ANOHTER case where the map size screwed me, I had to spawn a lot of slugs and was seriously worried about performance... thankfully both I and the testers have good machines so it wasn't an issue. I also added ap article effect to when the slugs are munching a plant to make it more obvious (its glitchy and doesnt stop when they finish so boo me) and of course, made them able to munch plants after a timer if they're still alive.

I ran (virtually) around my sample library finding audio for like... everything and adding the triggers and actions for all my sounds. Would you believe the main ship thruster noise is a fantasy bubbling mud noise ? 😄 My homeboy Gerald Clark had agreed a few days before to do some music an came in clutch at the last minute so he's to thank for the boppy soundtrack, I can't express how much I love working with him, he just gets me when I say 'I want tropical holiday mixed with doom' and he works FAST.

I still didn't have art for the 'plants' so I headed to the asset store... i'd been eyeing up the manufactura4k alien forest for most of this year and seeing it in someone else's build tipped me over the edge, those mushrooms were very different to the CVP vegetation and it looked like they'd be easy to add emission maps to. I wasn't dissapointed... all the mushies have spots on them so a trip into photoshop, a quick and dirty select by colour and some feathering... a little colour, a little contrasting inner glow and boom, 'good enough' emission maps for all. Back in unity, add the emission maps, create an imposter, and boom... plants done... I played with the size a bunch and settled on making them quite large so they'd be really obvious along with the glow.

You might remember from day three that my plants weren't rendering in builds so I started building a new project in the background as I tried to figure out _why_. I wasted a couple hours here and eventually figured i'd changed some vertex settings in the build and for whatever reason that meant no vegetation ? Wierd... maybe because the veg appears at runtime so the build system thinks it doesnt exist ? Anyway, crisis averted before I wasted another couple hours building a new project and moving stuff. I dont regret starting to build the new project, sure I 'wasted' some time, but better to have a fallback position than just assume you'll fix the problem; especially if you are like me, not technical.. I was basically trying to remember wehat i'd changed and reverting till it worked (or didnt). Having fixed the problem I set everything else back where id had it and boom, build success.

The rest of day four was a whirlwind of GUI and menus and sound. I added the in game pause menu and prettied up the main game GUI a bit. Had some issues getting the timescale to work on pause but it was working in the build... turns out it was #justunitythings and a client restart had the editor respecting mah authority again. Funny story... I _WAS_ going to put in a volume slider but I just didn't have time to learn how to do it. This ended up fortuitous because I tried to add one after the jam and it turns out the GC2 components for interfacing with sliders don't actually work right (bug submitted) ! So that would have been a waste of time. Of course this is one area I could have just used copypasta c# code because it is just an object in a menu so I wouldn't need to interface with any other GC2 system, just the unity sound mixer.

Basically I pushed through, forced myself to get in audio for just about everything that should have audio because that really makes a MASSIVE difference in a game. Imported a typeface to textmeshpro for all my UI elements, etc. I built my submission page on Itch while some stuff was rendering or compiling or something.

Day four was mostly powered by music, some girl power katy perry/avril lavigne/etc... a bunch of Eminem and a LOT of Rage against the Machine.

Finally I did a build with all the elements functioning and gave it a test. I started zipping it up then realised I hadn't hidden the cursor... Then I thought, to hide the cursor im also going to need to do menu logic to turn it on and off... and my brain just shut down. I was just on the verge of that state when you know your eyes are about to go droopy and everything will suck. So being an adult I said 'screw it' and submitted the build and added a couple screenshots to the itch.io page.

Total project backups over 4 days - 10
Started over from a backup - Twice
Always be backing up.

Here's a brief rundown of my 'if i have time' list that DIDN'T get done

  • - add volume sliders
  • - add graphics settings (esp. plant distance)
  • - fix some jank in the LOD transition (esp emission levels) of the mushrooms
  • - make more environmental elements (think giger-esque/alien bone formations) and use them in the craters and to hide the ends of the rivers.
  • - add a 'missile' mechanic to take out the slug hives.
  • - add a timer mechanic (probably ship fuel with pickups) to increase difficulty
  • - add a difficulty system (things like number of plants, slug spawn speed, etc)
  • - billboard markers over the plants, hives and slugs
  • - hide the cursor

And things I would like to look at now the jam is done

  • - make a smaller map
  • - try changing the game perspective to be a bit more top down with smaller vegetation to look like you're flying over a big forest
  • - make some more maps/levels with different environments
  • - add some world change elements (you'll notice if you pay attention in the build that when you collect a plant the forest pops in to fill the space around it... this could for example be animated and have some particles and be super cool)
  • - make some spitter bugs and add a ship health system

That was a long read, and im sure I missed some stuff. If anyone has specific questions about things I missed, or how I did stuff, especially about any of the art, i'm more than happy to answer.

Overall it was a fun jam, Im glad I took the time to do it and im really happy I made what I can call a complete game down to having an icon 😄 Thanks to the PW staff who made it happen, to my fellow entrants, and commiserations to the folk who had last minute problems.

quick edit - particles ... i also wanted to add a bunch of particles for dust/ash and maybe throw in Kronnects dynamic fog (or maybe even volumetric fog)  to do some cool smog or smoke.

Edited by BunnyViking
  • Like 8
Posted

Quick post-mortem update... I just realised I never disabled VSPs built in billboarding which was causing all the crappy pop-in in my build and the imposters wern't functioning correctly because of it... so boo... especially in the 'make it pretty' game jam 😄

 

  • Like 1
Posted

Hehe... the benefits of hindsight. Great learnings 🙂

  • Like 1
  • 2 months later...
Posted

Wow!  Reading this made my head swim!  Kudos to you for pushing through.  Sounds like even with the problems, it was a great learning experience.  I notice you are currently showing as a professional member.  It looked like when you originally posted you were going back and forth with a lot of different tools.  Hopefully next time you can replace a lot of that with the PW pro versions and make the workflow a bit simpler.  Sounds like your list of available tools to play with is about like mine.  My problem is forcing myself to try to not overdo it with too many.  That is one of the things I've always loved about Gaia, then GeNa, and now the pro versions.  Just a couple packages have a lot of punch!

I've also always loved VSP but really want to dig into the Gaia biome features.  Most of my work with Gaia has always been focused around building my stamp packs and basic building terrain so I haven't put a lot of time into learning all the new stuff.  Hopefully I can do that and and learn enough to participate in PWs next game jam.

I also liked reading about your experiences with GC2.  That is one of the many assets of that type that I own and have played around with it.  Mine was just basic character movement and ground vehicle control but overall I like the asset and plan to dig into it further.  Would love to hear about further progress you've had with it and if you were able to eventually work out all of the problems you had during your work on the game jam or if you just ditched it to work on other things.

Sleep issues and problems aside, it sounds like a fun, frustrating, enraging, satisfying learning experience!  lol

  • Tell a friend

    Love Canopy - Procedural Worlds? Tell a friend!
  • Need help?

    We work with some of the biggest brands in global gaming, automotive, technology, and government to create environments, games, simulations, and product launches for desktop, mobile, and VR.

    Our unique expertise and technology enable us to deliver solutions that look and run better at a fraction of the time and cost of a typical project.

    Check out some of our non-NDA work in the Gallery, and then Contact Us to accelerate your next project!

×
×
  • Create New...