End of Jam Post, Unity Asset blurbs
AHAD Jam Version. It is a start, and it is alive.
This post will be sort of a post-mortem and a review of the kits that I bashed together all at once. I have thoughts and little desire to organize them, so hopefully you all can find something in here to take away.
I'm not too happy with the total lack of intended features, and I doubt the game is much fun to play. But I am happy that the code runs and there is a sort of game happening on the screen. It's a nice base to continue from.
I had a lot of fun during the week, trying out new Unity tools that I had previously bought but had not used.
Several very killer time saving assets let me get this far as a solo developer with just a couple late night jam sessions between work. The credits of the game lists them, but of course the credits there are not clickable links. So I wanted to share each here with my thoughts and promote them.
Easy Character Movement
for player and enemy agent moving around
https://assetstore.unity.com/packages/templates/systems/easy-character-movement-57985
I needed FPS controls fast, and this little kit proved pretty fast to implement. I pretty much dropped the prefab into the game and then fiddled a bit with the settings till you get the one in my jam control scheme. It was nice not having to code the movement from scratch and deal with all that mess.
I had some issues during the jam with finding how to stop the movement during combat, it was not that intuitive to interact with the kit through code. What ended up in the jam code was a mix of the built in stuff, some heavy knowledge of rigidbody.teleport() unity functions, and some calls to the kit's own pause and other mechanics. The code for the jam is not clean, nor probably the intended way to use the movement. But it got the job done quickly and feels pretty nice.
I do recommend this kit, though be warned it has been written without much thought to being asleep at the start of the scene. Doing so prevents its own scripts from connecting on startup, causing all sorts of issues. Having used it, I would recommend either spawning the player through Instantiate() OR just always keeping them active in your game scene. If your project is just a more traditional platforming game, or first person shooter/mover, this kit is a big starting point. The code is pretty well written once you take the time to learn how it is structured.
Poly Dungeon Set
for dungeon models
https://assetstore.unity.com/packages/3d/environments/dungeons/poly-dungeon-set-183376
Did what it said on the tin, get me dungeon tiles to work with. The prefabs were scaled to 4x4 blocks of dungeon; but the stairs were not really setup to match the scale of the rest of the props. Nothing a little resizing couldn't fix.
The texturing and low poly work is good and makes a good prop to muck about with lighting or bump map intensity to get what you want.
My biggest gripes were the mesh colliders, back faces on walls even meant for one side viewing, and the fact the floor tiles are made of tons of smaller primitive "single tile" props. This was killing performance with draw calls. If I was building a more standard dungeon game, I could bake all those props together once the level was built to solve this. But that doesn't work well in procedural props.
I ended up fixing most of the performance by changing the collision boxes to my own box collider solutions instead of using the mesh models.
This is an ok kit for prototyping, but I will be most likely replacing it with something better performing in future versions. It saved me some time in jam mode, but personally I would have been better off spending the extra modeling time if this was a real project.
To be fair however, keep in mind I hardly used any of the barrels, doorways, or lighting that it also shipped with. I've seen some other games using these to pretty nice success. So don't let me stop you.
Speaking of performance issues:
Easy Mesh Combiner
for saving my draw calls
One import of this asset, and in about 5 min of skimming the video on the store page I had that pesky floor tile clump reduced to a single mesh.
I appreciate that it keeps the original meshes in the scene by default, just disabled and as a child of the new prop. It needs those to "go back". So when I deleted the original floor tiles the reverting was now warning me going back was not possible. No big deal and makes a lot of sense.
Not much more to say on this one, it is a tool that will probably keep saving my draw calls from level or kit bashing design pretty much forever. Totally get this one, worth every penny.
Quirky Series Animals
for enemy graphics
To be honest here, on paper before the jam these were not the "Hero" graphics I had in mind.
The kit is nicely sorted by pack, which means they tend to be sorted by theme too. The prefabs are very nicely setup with standardized animators and preset capsule colliders so you can just drop and GO. I instantly loved using them.
The best part for me was the STANDARD animation names. All of them can "Sit" or "EYES_CRY" or whatever by just telling the Animators to Play() the animation name. I can't praise the setup of this kit enough! The prefabs also come in LOD or as separated LOD levels, so for example if you need hundreds on screen, you can just drag the AnimalName_LOD3 prefab out, instead of the base animal, and you are good. This saved so much time when it came to animating them dying or battle posing, as the same code commands can run them all.
Admittedly, they look really funny, and some like the Orca being told to "Sit" when entering my combat turn very silly looking. He's trying his best. And that is still way better than other kits I've tried where they end up with unique animation names everywhere.
It's a bit pricey to buy the ultimate pack, I believe I saved up and waited for a flash sale. It is coming up in the latest Unity flash sale, tomorrow from the date of this post. These little critters are adorable for prototyping!
Simple Fantasy UI
for icons and some interface graphics
https://assetstore.unity.com/packages/2d/gui/icons/simple-fantasy-ui-140925
I use this kit a LOT in prototyping. It's not the shiniest thing on the market, but you get a lot of bang for your buck, so to speak. I used it extensively for the menus to get rid of the boring Unity White UI. (I missed the start button and a few others, I stopped being able to see they needed replacing, lol.)
This kit is pretty nice. My two gripes are the names of icons don't always use the word I would think of when searching, I suspect this is just because of cultural differences.
The other gripe is that while the coins, health bars, and resource icons are really shiny, all the UI icons are flat shaded. This can look a little odd in a final product if you use a mix of both styles.
Still, when it's like 8 USD it's been well worth it just to make the UI have a fantasy feel without the effort of drawing stuff. Sure, other packs might have a ton more stuff, but they also are not cheap like this one. In the end, I just want my UI skins to be quick to import and fun/fast to use, two tasks this one excels at.
Map Graph
generating dungeon floors using graph logic
https://assetstore.unity.com/packages/tools/utilities/map-graph-177023
This is one you will either love or hate, depending on how you are about graphs vs "full control over your own generation code".
I immediately loved this tool for one single feature: When a graph is open in editor, and you run it, you can SEE the exact images that are happening in each node along the way. This lets you iterate on, for example, how many enemy spots should there be added to the dungeon. In a visual, quick, button mashing way, as opposed to a test and play over and over method.
You can also, as demonstrated by my game, call this generation at runtime. It is very fast, and easy to figure out if you crashed/broke it. The graph has LOTS of helpful error checking to help you learn what you did wrong. (In my case it was always forgetting to feed a node a requested input.) The manual has been part of my life for 2 days, and the extensive tutorials got me up and running in like an hour, with a reasonable understanding of what I could tweak or add to the flow from there.
As an example of flexibility: You may notice I have a map image for every floor. This is literally just an output Texture2D from the graph being fed onto a Raw Image UI with some code listening for when the graph event calls "finished generation". Details on listening for that call can be found here in the tutorials for coders: https://mapgraph.insanescatterbrain.com/manual/output_parameters.html
I barely scratched the surface of this tool, and will be making use of it in future projects for sure. Since the primary approach is to use image searching filters, math based algorithms, or drawing random dots, it is very flexible. For example, even if you did not want this tool to spit out the prefabs for you, you could just grab a Texture2D of whatever data you wanted and write your own generation on the outputs!
Self Development
I also lost a couple of evenings to some pretty miserable bug hunting in my own code along the way. Off the top of my head, a few:
- The battle system would trigger and crash because no enemies were added to the enemy team, leaving no valid target to look at.
- For a good 2 days, the player object had to be manually placed into the dungeon using the unity editor to playtest. The spawning code was clashing with the movement plugin I had imported near the start of development.
- I had a horrific fatal freeze where using the exit would trigger the generator code immediately in the physics loop. This meant the generator would try to run in between Update() cycles. Now, normally this would still be ok, not great, but not fatal. So I didn't understand why it would crash.
Oh, but wait! The generator tries to delete the exit as it is part of the old dungeon floor. The exit has our collider, and critically, also has the code that is calling the generator. So now the exit is trying to call and destroy itself (indirectly through the entire generator script), and meanwhile Unity notices the generator changing physics objects by deleting stuff, so Unity recalculates the physics collisions, potentially triggering the entire stack again, for every block we ever remove from the level, yikes!)
This took me an embarrassingly long time to realize, full of locking up Unity Editor and using task manager to kill it. Hey, it's a jam, I'm under pressure and even going back a few versions to build the exit from a working version just crashes it again.
Finally, I figure this out over a meal break, and revert the code again. This time, I make the exit trigger just flip a Boolean value on the player (who is not destroyed on generation). And in the player update, if this boolean is ever true, the game considers that "the exit has been reached". The critical difference: the player script will only check this value during Update(), which we know happens only once per frame and more importantly is not called if the physics change.
And that is why my exit stairway works.
Conclusion
I had a real work situation during this week that gave me a random amount of time instead of reliably the whole week. I have to remember to be kind to myself. I am pretty proud of how far I got, especially with all the new tool chains and kits to learn along the way. While I am almost certain the ratings will be not great, I consider my game a successful #7DRL challenge.
I look forward to expanding and adding more to it. In my books, that is a win.
Go check out my entry, and more importantly, check out all the other awesome stuff from the jam here (you might have to wait for the timer first.)
Files
Get (JAM Version) AHAD: Adventuring Heros of the Alternate Dimensions
(JAM Version) AHAD: Adventuring Heros of the Alternate Dimensions
A Generated First Person Role Playing Experience.
Status | Prototype |
Author | Gawain (DarkGriffin) |
Genre | Role Playing |
Languages | English |
Leave a comment
Log in with itch.io to leave a comment.