Friedrich Hanisch's Dev Log
DONE
- The last few days I added saving game states to 666 Coins, just to see if it works. There are some problems left, but overall this is very useful when the levels get larger. I actually added quicksave and -loading, but I don't really want to have that, because this is still a roguelite with permadeath. So instead the saving will only be done when the player quits the level, so they can continue later. And maybe there will be a secondary game save for when they snatch the Unholy Crown.
DONE
- For Pry I took the revamped settings system (for options like field of view, mouse sensitivity, etc.) from 666 Coins and improved it even further. I had to change it because the system was intertwined too much with the UI and localisation was initialised after the settings - leading to errors with the different sliders' and toggles' labels. Now the settings are based on
ScriptableObject
s, and scripts can subscribe to any changes, making it all much more dynamic.
DONE
- I did some small improvements for 666 Coins, like adding a slider to change the head tilt (when moving sideways), as some people got motion sickness apparently, or adding a context on-screen help hint when hovering some interactable. I think I only want to change one or two small things before we evaluate a commercial version of the game.
DONE
- bloed is now version 0.7.3 - the biggest change is that joists also can now be created inside a prefab. I encountered several problems with prefabs, so quite some work went into things nobody will probably notice.
https://ratking.itch.io/bloed/devlog/326799/bloed-v073
- With a small change I optimized 666 Coins a bit further: Unity's sound system is really primitive overall, so I had to write a small manager for the looped sounds which would play even if the listener (aka the player) is far away. I noticed that mostly when I dropped some items and their “thud” sound wouldn't play because of their low priority - too many audio clips playing at the same time does that. Of course there is a reason this happened; Unity doesn't check if the looped sounds are actually audible because they could be, if their spatial settings are set to lower than 1, or if their
rolloffMode
is set to logarithmic
. Strange enough I remember doing such things for TRI already, one would think Unity does at least some small optimizations where it's possible.
DONE
- I worked a bit on bloed, as I mostly wanted to solve a problem that appeared when one would place two opposing slopes next to each other, and those slopes would have a Noise setting higher than 0. Turns out I cannot solve this, at least not with how the bloxels currently work. (The reason is that I don't create vertices where they would be needed for such cases.) Oh well, very disappointing. At least I could fix the Joister's snapping functionality and also add some color settings. There are several small things on my list though before I upload another version.
DONE
- Once again I streamed a bit of the development of 666 Coins. This time I made the Unholy Crown, the thing you need to steal, an item instead of loot, so it takes some space in the inventory. Also, very important for atmosphere and immersion, being inside of water makes the correct sounds now. Last but not least I replaced all the calls of Unity's own
Random
class with an instance of System.Random
, so we can have seeds - very useful testing and performance optimization.
DONE
- For Patou I am currently trying to think of a better approach regarding the player's input and actions. Instead of just checking things with Boolean variables, I now added states that would define which actions are currently possible and how the different keys will be interpreted. We'll see if that's sensible. Next up is trying to be able to ride the dog.
DONE
- We noticed that 666 Coins has horrible performance on weaker GPUs - and indeed, it has 10K draw calls on average. Not very good for such a small game. I tried two solutions for dynamic occlusion culling, but the first isn't working, and the second isn't really satisfying. Instead we had a lot of success with just reducing the far clip plane (as we have some fog in the game anyway, it was a no-brainer), and I noticed the lanterns' spot lights produced a ton of draw calls, probably because of having shadows. Even if they're outside the far clip plane. So there's a lot of optimization potential.
DONE
- I submitted 666 Coins to the 7dfps jam on itch.io - even though I don't think it's finished. But it is playable, and I had a very nice and intense playthrough. Today I mostly did a bit of polishing, added an apple as a health provider, and made the start menu more useful. Hopefully we will extend this a bit. But even if not, I'm proud of the achievement and did some cool things that I can incorporate in Pry probably.
https://itch.io/jam/7dfps-2021/rate/1315178
DONE
- For the 7dfps project, now semi-finally named 666 Coins, I added a compass - and enemies can hear the player now. They definitely got more dangerous instantly. I had to rewrite nearly all the AI logic for that, but in my opinion it was worth it, especially as I can now extend it easily. For example, it would be cool to have a tool that can distract enemies or even lure them away. I don't think we can submit a real version of 666 Coins to the 7dfps, but still, it's playable and is a good base for a “real game”.
SEEN
DONE
- Today I won a battle against Blender, in some sense. For quite some time I had big problems getting my animations (not based on Rigify, but custom bones with constraints to some Empty objects) to play in Unity. After finding out I have to bake all my animations in the Pose mode, and also be very careful what settings to set in the FBX exporter, it still didn't work. Well, at least I thought so - only after a few hours I noticed that the animation would work in the Scene view, but not in the model's animation preview. Damn. In any case, the 7dfps project has an animated character now, and I can finally do other things.
https://answers.unity.com/questions/213414/how-do-you-bake-constraints-into-a-blender-armatur
SEEN
DONE
- Good news: Patou got funding approval by the MDM. Well, at least for 60% of the sum we wanted. Better than nothing, though.
- The 7dfps project's moving enemy is working now, mostly. They walk aimlessly around and attack the player on sight - by running towards them and teleporting them to some random location! Of course there are still some edge cases to cover (for example, the player can be teleported onto the ceiling of the “dungeon”...). I want to create a 3D model for it next, and of course add sounds. Then it should be mostly finished.
- I fixed an oversight in **Terrobot X'**s code editor - comments and strings would not honor any tabulator key input. I wish I could invest a bit more time into the project, especially as wixette updated the ISB plugin in the way I wanted, and it should be usable for me now as a sandbox programming environment. Maybe I should do a very basic next-steps plan for it.
https://github.com/wixette/isb/issues/28#issuecomment-986408636
SEEN
DONE
- Unity's navigation system is quite sub-optimal, but there actually is an improved version on Github. Why this is still there only, after five years, and the Unity editor itself comes with the lame bake-only solution, is beyond me. In any case I even tried the preview version called “NavMesh Building Components”, and after quite some hassle I got it installed. Just - it doesn't install everything. Important components just aren't there, and I suspected different assemblies, but it seems that wasn't it. Instead I reverted back to the Github version, even though it's not updated anymore and stuck for a year now; it might be a problem that I still use Unity 2020.3, but who knows - you don't get actual information about this. Ugh, Unity. In any case, I can now create nav meshes during runtime of the 7dfps project, and even update them so open and closed doors get recognized. So, on to some moving AI agents.
https://docs.unity3d.com/Packages/com.unity.ai.navigation@1.0/manual/index.html
https://github.com/Unity-Technologies/NavMeshComponents
https://forum.unity.com/threads/navigation-ai-experimental-cant-find-navmeshsurface.1168856/
- I was finally annoyed enough by the fact that pressing
F
in Pry and the 7dfps project during play-testing it in the editor would zoom in and out constantly, and searched in the forums if someone solved this before. Indeed, I wasn't the only one. I took the best solution (Windows-only, though), and extended it so it would only deactivate all the shortcuts of Unity when the Game window is focused.
https://forum.unity.com/threads/unwanted-editor-hotkeys-in-game-mode.182073/page-2#post-7717177
SEEN
- UPBGE is a game engine for Blender. Might be worth a look, even though it uses Python - unfortunately the documentation isn't finished, and I'm really not a fan of that.
https://upbge.org/
- I watched a video about the level design of It Takes Two, and it was pretty interesting. While I'm on the fence if I like the game or not, I can't say it isn't well made.
https://www.youtube.com/watch?v=QbMF1nCiIkQ
DONE
- During a productive meeting with voxel we assessed the current state of the 7dfps project (still no real title) and also defined the features we want to do for the next milestone. We now reached the MVP as I added quite a few sounds for the player, the enemy and the loot items. I used oceanaudio mostly for this, and it is nice, but absolutely underpowered - having several tracks and being able to combine them is such an essential feature for me. So I checked some other audio software and in the end came back to Audacity, as most other software has a price tag and/or is not really suitable. But as Audacity is still a bit sketchy, I will use the fork Tenacity instead. There are no releases yet, but the nightly build works fine so far.
https://www.ocenaudio.com/
https://tenacityaudio.org/
DONE
- Uploaded v0.7.2 of bloed - the tools window was stealing keyboard input, hopefully this release fixes this problem.
https://ratking.itch.io/bloed/devlog/320944/bloed-v072
- I reactivated the
Health
component in the 7dfps project, and now the player can die! Even from falling!
DONE
- For today's game dev stream I extended the 7dfps project by adding doors and collectible loot, after I created a simple security cam enemy yesterday. An interesting problem arose when I made the doors unclosable as soon as something was in the way - be it the player or an item. I used a trigger for that. But when the player collects the item that is in the way, it wouldn't “exit” the trigger, the event doesn't fire. Apparently,
Rigidbody.detectCollisions
is the solution to that (which of course only works when there is a Rigidbody
). Setting it to false
actually also calls the OnTriggerExit()
method - something which Destroy()
and Collision.enabled = false;
surprisingly don't.
https://www.twitch.tv/ratkingslair
https://forum.unity.com/threads/fix-ontriggerexit-will-now-be-called-for-disabled-gameobjects-colliders.657205/
- Another “interesting” problem was creating new terrain tiles, which I currently evaluate for Patou, mostly because I don't want to have a gigantic terrain right from the start, so I want several smaller terrains. And then this: Unity is stupid when it comes to test their own things, thus terrains don't allow digging holes when one uses them out of the box; instead I had to move them 100 units down, and use “Set Height” to set the height to 100 of the first terrain (so it's back at 0 level). Which works - but extending the terrain now with new neighbour tiles only creates them with 100 unit steep slopes. To get around this, I copied Unity's terrain tool code (namely the
FillHeightmapUsingNeighbors()
method) and changed it a bit so it would recreate the heightmap based on the absolute origin. Which is pretty dangerous, because there is no undo, and it changes the assets directly... always remember to use your version control!
https://github.com/Unity-Technologies/UnityCsReference/blob/2020.3/Modules/TerrainEditor/PaintTools/CreateTerrainTool.cs
- I tested bloed on Unity 2021.2.4f1 today - and it almost works out of the box. Apparently there is a problem though with the GUI inside the scene getting key input when it shouldn't. I will look into this soon enough.
DONE
- For the 7dfps project I'm currently evaluating AI solutions, and I think I will just try to use SUS as much as possible. It feels powerful enough to create some interesting behaviour, but still not too complicated. In the last few days I also added things like being able to collect items (a bouncy test box for now), and the light gem for the player.
- I streamed a bit of Terrobot X's development. Right now it's becoming some kind of “fantasy console”, so there was enough stuff to show for the stream; I mostly just added input and line drawing functions, so I could emulate a simple platformer and a simple Pong thing.
- Some fog was added to Patou - namely “Volumetric Fog and Mist” by Kronnect, mostly because it supports “fog of war” out of the box. After having a lot of problems with it in my own scene I wrote in their support forum - and yes, the problems were on their side. Thankfully a fix came not much later.
- bloed had a very interesting bug - playing the game in the editor would attach all the meshes to the currently opened prefab. Of course it was a bug in my level code - but it's a bit strange how Unity wouldn't spit out errors when in-game code would change a prefab. Yes, there is a warning beforehand, but only in a very vague way.
- Two days ago I also gave Pry a little update: she does auto-crouch when a ceiling too low if in front of her. It feels pretty smooth!
DONE
- As voxel uses bloed quite a lot more than I ever did apparently, he finds enough bugs for another update. I set the version number to 0.7.1 because in the end it's an extension of the previous release, which was all about bug fixes too. This release fixes transparency issues, and a lot of problems when new textures are added to the project.
https://ratking.itch.io/bloed/devlog/318755/bloed-v071
DONE
- I uploaded some bug fixes for bloed, which means it's now v0.7 - removing and recreating prefabs' meshes works now, and UV sets get serialized correctly. Oh, and there was some issue with rotating textures, which sometimes was just ignored by the TEXER.
https://ratking.itch.io/bloed/devlog/318010/bloed-v07
DONE
- For Terrobot X's code editor I wanted to have more control over when Unity's UI system is actually allowed to take over the keyboard (to switch between controls and activate them), so I had to set the selected game object manually. Stuff like that. While I didn't need the link below, it might become useful later on.
https://www.gamedeveloper.com/design/stupid-unity-ui-navigation-tricks
SEEN
DONE
- Apparently there are more bugs in bloed than I thought. While I fixed some glaring issues with the
Helpers
methods in combination with prefabs, I noticed that the TEXER still has problems with setting different UV sets, or rather with saving them. I might fix that bug this year even...
DONE
- I'm pretty happy that I could finish my Adventure Kajam entry, The Last Dream. (Zauberwald is the name of the “engine” for it.) In the end the story is much shorter than I wanted, but that's a good thing because it actually is enough already for a challenging game. Of course tester feedback is needed, as I am sure some things are not obvious at all, and so it will be a bit of a frustrating experience. In any case, the game does what I wanted it to do - motivate me to create this tool (for further use later on), and a story.
https://alakajam.com/adventure-kajam/1212/the-last-dream/
https://ratrogue.itch.io/last-dream
DONE
- I extracted Pry's character controller for the 7dfps project. It's missing quite a few things now, even though I had to copy a lot of files. The main difference though is that instead of Rewired the extracted version uses Unity's new input system. It's mostly working okay and is flexible, but it annoys me how cumbersome it is to implement a simple “hold”/”pressed” behaviour for some input.
PLAN
- voxel and I plan to participate in the 7dfps, and already wrote down a concept for a randomised stealth game. Let's see if it works out this time! (I would love to see something like Eldritch more focused on stealth.)
https://itch.io/jam/7dfps-2021
DONE
- First steps were done towards Patou reacting to other things (sensing them etc) in the world. For now he just stands still at an object that is marked “danger”; later on this could be used like this for example: There is a murder of crows guarding a place, and the child won't be able to get past them. Only thanks to Patou's constant barking in the direction of the crows they will fly away. When he stops barking, they come back. So for a while, the child might have to do things alone.
- I uploaded version 80 of Pry, just to have a feeling of progress. I am not sure what to do next for it, the AI most likely needs an overhaul, and I could use SUS for that, but that would be some major rework probably. In any case, one could make a real prototype now with the things that are already implemented.
SEEN
DONE
- Improving, but not really progressing, some projects: Patou's Simple Utility System (SUS) got better debug display (considerations now can have identifiers), Pry now leans her body with a SphereCast check so she can't look through the wall anymore when climbing a ladder, and Zauberwald has a better, desaturated colour scheme now, and a visual hint for when you can drag a window.
SEEN
DONE
- So for Patou I could combine SUS with PandaBT now as I wished, and also added some simple debug display. It's not super convenient because one has to find out which consideration is which, but other than that it should help with development.
- I worked a bit on Pry's leaning, so the player can also lean forward (by pressing both Q and E at the same time). It's cool, but has a major bug - when climbing a ladder it allows you to look through walls. Disabling leaning while climbing ladders would be the easiest solution, but that's a bit lame. So I will try to think of an alternative.
SEEN
DONE
- I created an extremely simple system of utility theory “AI”, for Patou and reusable for other projects. I call it SUS. Combining it with PandaBT is possible, but this is very awkward, as there is no way to change a tree during runtime without overhead. So either I write my own behaviour tree system too, or choose another plugin. There are several free solutions, but PandaBT is just so nice to use and debug. And it seems the developer is back from the dead and plans to update it.
https://github.com/luis-l/BonsaiBehaviourTree
https://github.com/Yecats/UnityBehaviorTreeVisualizer
PLAN
- I don't think I will submit anything (playable) to the Adventure Kajam. While I'm happy with the state of the Zauberwald “engine”, and while I'm not that bad with coming up with a potential story, actually writing down this story, and creating puzzles, takes quite a while. Too long for the time that is left, and I am not motivated enough, unfortunately.
DONE
- I replaced some
Time.unscaledDeltaTime
with Time.smoothDeltaTime
in my code of Pry, and it definitely helped with a smoother camera. Let's hope it doesn't break anything, as this is not working with a time scale of zero anymore.
PLAN
- Again, after so many times, I'm back to thinking about how to do the AI for our games. This is for both Patou and Pry, and while the two game concepts are vastly different in their requirements - Patou has only one single character who doesn't try to fight you, while Pry will feature several NPCs in pursuit of the player - I think there are a lot of intersections in functionality. Maybe it means I just have to modularize some parts. In any case, right now I want to get back to utility theory - at least for the decision making process of a game agent. Because this is the part that annoys me the most with the current AI of Pry's enemies, even though they mostly behave how they should. Still, my solution of mixing some state machine into their behaviour trees was never a good solution.
DONE
- Terrobot X, although now a side side side project, got a small update - the code editor (still the only piece actually existing of the “game”) now has automatic scrolling when the user moves the caret. It had its pitfalls, thanks to the dynamic nature of the content of the scroll rect, but for now it works. The second thing today was line numbers. I can finally think about the actual game, maybe.
PLAN
- Right now, each room in Zauberwald has its own scripting engine. This way each engine can have subroutines with the same name, called
RoomEnterFirstTime
, CombineThings
, etc. I might change this though, because room-based actions can potentially overwrite general actions (e.g., combining an object with another one could have a different effect in room X than in other rooms), and with the current solution I get annoying boilerplate code. For example, I have to set a Boolean value called CallGeneralAction
to false
every time something in the specialized subroutine happens.
DONE
- Patou now catches a ball thrown by the player. Well, it's not really Patou, but a red-tinted clone of the player character. Anyway, sooner or later I will have to think of a good, extendable system for Patou's AI states.
DONE
- While I still might choose A* Pathfinding Project Pro (God, that name) later on, right now I think Unity's own navigation mesh system is fine for what we want in Patou. We don't even have enemies in the game, just one single character following the player. The off-mesh links just work out of the box, more or less, and the fact it's all part of Unity makes it easy to use, in contrast to A*PPP.
- In Zauberwald, the Rooms' windows can now be dragged around freely. (That reads a bit strange, without context.) It sounds simple, but as soon as you have the different configurations for anchor, pivot, scale, etc. of a UI element to consider, it becomes a nightmare if you want to prevent windows from getting dragged out of view. In any case, using
RectTransform.GetWorldCorners()
for retrieving the actual size and position of the windows was the solution, at least in this case.
And I went a bit further and added support for pictures. They have to be in the Resources folder, and get added by name, for now. The tricky part was making them resize to the layout correctly. In combination with the stretching RectTransforms, it's very complicated. Instead I just set “Preserve aspect” to true and make the Images extremely wide or high. Hacky, but works for now.
https://docs.unity3d.com/ScriptReference/RectTransform.GetWorldCorners.html
DONE
- I planned to support more than one window per room in Zauberwald, but after a while of tinkering it didn't really seem to be a worthwhile feature. So I ditched and vastly simplified some logic. There's also a configurable limit of items on the floor for each room now. Overall the project is on a good way, the biggest hurdle right now is getting images to work - and the story as my actual entry for the Kajam. My current idea involves social media, inspiration, and cyberspace.
DONE
- A lot of things happened for Zauberwald, and one could now make a little story with it. It features a functional inventory (more or less), switching between rooms and interaction with things - examining, using, combining. Some work went into polish, like fading text out and in as soon as it changes via script. Rooms each have their own Small Basic interpreter instance. I really should think of a short story idea now.
DONE
- After tweaking it for some time I think I will stick with the “Fundamentals” character controller for Patou (or rather: the child) for now. I also imported PandaBT again, because after researching other AI solutions for the dog behaviour I think most of it would be too bloated for a single NPC “just” following a player. Plus I really like PandaBT's scripting language approach instead of the node trees that often can get too big, and a mess.
Though I still think I will keep an eye on SGOAP, for Pry's enemies. But I will probably never be content with how the enemy AI works in this game anyway ...
https://assetstore.unity.com/packages/tools/ai/sgoap-ai-solution-167167
SEEN
DONE
- Zauberwald now has multiple pages - and dragging of individual words. Looks interesting so far, hopefully it translates to a somewhat good game.
PLAN
- For Zauberwald I had the idea to let the user move the text by letters instead of scrolling. It looks far worse than I thought, so I got rid of the algorithm. I still don't like the idea of scrolling though. My next plan is to support multiple pages instead; very crude, but effective.
DONE
- For some time I noticed that some enemies don't hear anything in Pry - seems like a bug introduced after version 71. Turns out it was a simple, but hard to see copy & paste error; I once read in an analysis that those happen extremely often, so yeah, I can confirm that.
- I improved the support for the tabulator key in Terrobot X's code editor. Lines can be indented and so on. At this pace though I don't think this will ever become a full game. Nonetheless, I always wanted a more robust code editor for my code-based games...
SEEN
DONE
- I dug out Zauberwald, the text adventure I wanted to create with my brothers, for the current Alakajam Kajam (theme is “adventure”). Basically I did a reevaluation of how I want the text interaction to work, and for now I'm confident the approach I used in CitApp and now Terrobot X is probably the sanest way. (Which means using “text chips” for each word, instead of a whole text block.) More or less. There was a bit of parsing to be done, but now I can slowly create actual gameplay, maybe.
- The options in Pry are mostly working now. Who thought that Colorful, an ancient Unity plugin for some post effects, is still working, and the best way to change brightness and contrast directly? Of course this is all rudimentary, so other options will be added later on. If ever.
- Undo and redo were added to Terrobot X's code editor. Another case where I reused code, this time from bloed. The implementation in Terrobot was still tricky, because my approach of changing the text dynamically made me think around two corners, and even change some stuff. For example, for deleting a character via backspace or the delete key I now select the character and then delete the selection. This was necessary because there were a lot of edge cases with line breaks.
DONE
- I copied a lot of code and UI from Behind Stars and Under Hills over to Pry, because I wanted to add a start menu. I also copied the debugging menu (for quick
noclip
stuff and so on - not a console) and the settings menu, although none of the options (brightness, etc.) are working yet. But at least Behind Stars wasn't a total loss this way.
DONE
- I did a bit of work on Terrobot X's code editor - who'd known adding support for the tabulator key as an afterthought would be a bad idea?
SEEN
DONE
- I tried to fix a small bug in Pry: Enemies that got knocked out would sometimes die just by falling over. The problem was their low pain tolerance (which is there for them being killed by attacks instantly when they're not in “search player” mode), so just hitting the floor or even colliding with their own bones would instantly kill them. It's actually a hard problem to solve, as there are so many contradicting rules - in the end it's a lot of tweaking of different values, instead of one hard solution.
SEEN
DONE
- I did some small things for Pry. It always annoyed me how jerky the movement is when climbing through a 1.5m high window (because it's smaller than the player, but they still fit through). With my current solution of automatically letting the player crouch when they climb through the window it should be smoother now. The same with hiding under tables - it won't work against the physics engine anymore. (Mostly.)
PLAN
- Things I'd like to see in Terrobot X's code editor soon-ish: better support for the tabulator key, copy & paste, (smooth?) scrollbars or at least pages, maybe even support for several carets. Overall I will have to rework the lexer for text coloring based on the syntax though. Sooner or later.
SEEN
DONE
- Finally back on vacation, and already working on a lot of stuff: Terrobot X's code editor now has text selection (of course this is a minor feature, but important nonetheless), and we do more and more planning for Patou (especially the story).
SEEN
- Finally watched noclip's documentary about Prey - the Arkane Prey from 2017, that is. It's actually a good game, especially because it is a lot of game. But I must say that I also understand why it didn't sell that well. Especially when it comes to the “uniqueness of the story”. Maybe it's just lacking zeitgeist.
https://www.youtube.com/watch?v=kXLxaKrcFZ0
SEEN
DONE
- I worked on Terrobot X's code editor a bit. I have no idea how sensible parsing actually works, but on the other hand it's not the most important thing to get the syntax coloring right. I just hope for a smoother experience than working with Unity's inbuilt text input boxes. Some things I do to make it easier for myself: a) only allow mono-spaced fonts; b) don't have text-wrapping, instead do overflow for lines (and let scrollbars handle the rest); c) concentrate on Small Basic as the language to be used with this editor, so don't get too fancy with the parsing.
SEEN
DONE
- I changed a small thing in Terrobot's web version - instead of using the F keys
F1
to F5
, users should use Alt+1
to Alt+5
instead in order to quick-execute their little programs. I totally forgot that F1
, F3
and F5
already have standard functionality in web browsers and thus are unusable with a WebGL game ...
- Afterwards I started with the extended version of Terrobot, calling it Terrobot X for now. First - and probably final task, when I give up - will be a functional code editor based on UGUI. Which is not much fun to make, but necessary. Only if I really finish this thing, the actual game will be planned more thoroughly.
PLAN
- I will think about extending or rather making a full game out of Terrobot. The main problem is the “IDE” inside the game - Unity's input text boxes are just not up for the task. So I would have to write something completely different, maybe something with text element blocks like in CitApp. In any case I just like the idea of controlling robots remotely on some alien planet's surface. It has a lot of potential. The question is if I want to go into the direction of some kind of exploration/adventure game, or a Zachtronic-like with discrete tasks to do. I'm leaning to the former, with maybe the latter as little missions in-between. (Current project description: “The Witness, but with remote controlled robots.”)
DONE
- I uploaded version 70 (getting rid of those x.y.z version numbers) of Pry, with (hopefully) improved ladder climbing, locks and contextual key prompts. The ladders were the main work today, with adding the possibility to leave the ladder without using any buttons (you have to stand on the floor for that), and adding some colliders that make sense, especially when it comes to the top part of the ladder.
SEEN
- There will be a “Frankenjam” - a game jam happening in Franconia, starting November 5th. While I could travel to Nuremberg for this, it's also online. Not sure if I have time/motivation for taking part though.
https://frankengamejam.de/
DONE
- The Halle-Spielt App now features timed tasks! Which are just a simple timer with a cancel button; and they're used for tasks for the players where there is no real way to prove/disprove if they actually did it. So it mostly relies on the honour system, which is totally okay for the scope of the app.
- I updated bloed too. It now has “composite textures”, which means I can have grass blocks which are dirt on the bottom and the sides, but grass on the top. This was possible before, but only via extra side data, which consumes memory. Now there's a way to automate it.
- Last but not least I further improved the locks in Pry. This mostly boils down to the fact that the naming of the keys/locks is a level-wide thing now, as there are 15 keys maximum anyway per mission. Now I can be (somewhat) sure the naming of “key 13” is consistent with “lock 13”.
DONE
- I was always a bit unhappy with how the ladders work in Pry, so I changed them to be used like in Filcher - by pressing the “use” button to actually climb them. I'm unsure if it's the better system, but for now I find it more stable and logical with how the rest of the game works. A bit of work is still needed for this, then I will upload a new version.
DONE
- I tried to port Terrobot to WebGL, but unfortunately it only worked partially. Apart from the constant spawning of a message about how the post-processing stack only works correctly with fullscreen cameras, the scripting part does not work because apparently some code from the Small Basic interpreter gets stripped away. The error message is
MissingMethodException: Default constructor not found for type ISB.Lib.BuiltIn
. This is a problem for a different time, but it seems to be about Addressables?
https://forum.unity.com/threads/addressables-and-code-stripping-il2cpp.700883/
Last post might be a solution:
https://forum.arongranberg.com/t/unity-2019-1-3-default-constructor-not-found-for-type-pathfinding-gridgraph/6769/8
Update: Yep, after adding this Preserve
attribute to the BuiltIn
class of ISB, the WebGL build seems to be fine. I submitted an issue on the ISB's git repository, maybe it helps the developer.
- Before I forget it again - as usual the standard settings for Unity web builds don't work out of the box; the project won't finish loading. I had to disable compression (
Compression Fallback
) as the simplest solution for this.
https://forum.unity.com/threads/uncaught-referenceerror-unityframework-is-not-defined-at-htmlscriptelement-script-onload-webgl.803967/page-2
- To get back a bit to Pry dev, I visualized door locks. The plan is to make it more clear that a key needs to be used, but of course the underlying problem isn't solved yet: How does the player know they have to actually take the key in their hands and “combine” it with the locked door? I think it's mostly a tutorial thing, but on the other hand I know that the system is maybe a bit alienating to some users. (Even though Deus Ex, Thief and now Filcher require a similar thing from the player.)
In any case, to make it even more complicated, I added some interfaces to allow different charge times - for doors that are “more difficult” to lockpick.
PLAN
- I might participate in the HaxeJam (starting October 17th), because I like the language and ecosystem, and even the community a bit. I'd probably use either Heaps or Kha, or even Armory3D, but with no plan right now what game concept actually. Depends on the theme.
https://itch.io/jam/haxejam-2021
DONE
DONE
- I participated in the 13th instalment of Alakajam (the theme was Robots) this weekend - and actually submitted something. Even though for the longest time it looked like I wouldn't; and really, the game isn't what I wanted it to be. But it is functional, and shows potential. Which is why I actually finished it up. Terrobot is a programming game/puzzle/dungeon crawler. For the programming part - in order to move the terrobot around - the player has to write small scripts with Small Basic. I decided on Small Basic when I found wixette's interpreter for this programming language by Microsoft, especially as the interpreter is usable in Unity. It's far from perfect - for example, there is no handling of syntax errors, the interpreter returns nothing - but it works most of the time. I had to modify the interpreter though, in order to allow asynchronous stepping through the code.
Terrobot is also the first game that uses bloed, my very own level design tool. Not the grandest premiere, but a premiere nonetheless.
https://github.com/wixette/isb
https://smallbasic-publicwebsite.azurewebsites.net/
https://alakajam.com/13th-alakajam/1167/terrobot/
https://ratrogue.itch.io/terrobot
SEEN
SEEN
DONE
- The Patou puzzle-prototype is finished for now as the deadline for the application for the federal state funding is today. I think it can work in third-person view, but if not then a change to some aerial view wouldn't be too bad either. Right now the puzzle is just about sliding some boxes along other boxes to a goal, or build a bridge. The potential is big enough to add more interesting and compelling elements though.
https://www.youtube.com/watch?v=GwzPFX14Mn0 (top secret!)
SEEN
- I watched - over the course of a few weeks - an Unreal 4 tutorial which basically teaches how to navigate the editor, how materials work and can be manipulated, a tiny bit of Blueprint, and mostly how to create a landscape with Megascans. Overall I didn't really get warm with Unreal through this course, mostly because I am very overwhelmed by the amount of options.
https://www.youtube.com/watch?v=_a6kcSP8R1Y
- Robert Yang's “Quake Renaissance” articles for Rock Paper Shotgun were quite nice. I am playing through the game currently and even though some stuff didn't age well, I would say it's better than Quake 2 overall. So Yang's article helped me to understand the game and the culture around it, which is kind of valuable when you're a game developer.
https://www.blog.radiator.debacle.us/2021/08/quake-renaissance-for-rock-paper-shotgun.html
SEEN
- A few “Simplest AI Tricks”, although of varying quality. I like the idea of using breadcrumbs spawned by players to teach AI enemies where and how to wall-run. Bonus trick from the comments: “make the bad guys run away sometimes, not necessarily for a discernible reason. It worked for Clyde in Pac-Man, it worked for the Grunts in Halo, it sometimes leads players into a worse situation and seems really tactically clever... just make them run away and/or hide a bit sometimes.”
https://www.youtube.com/watch?v=iVBCBcEANBc
DONE
- I semi-solved a bug that was annoying me for weeks or longer in Pry (even though we don't really work on the project anymore). When an enemy ran to the player and attacked them, often the enemy would slide quite a bit before coming to a halt. Turns out that the acceleration setting of the
RichAI
component was the culprit. Increasing it to a high value like 10,000
helped, but caused another problem - such a quick acceleration would look janky in other situations. So I had to add some logic to set the acceleration to this high value when stopping, but easing back to the original value over a short timeframe. It feels a bit dirty, but I guess things like this aren't really solvable without a hack.
DONE
- I did several smaller things for the Halle-Spielt App, mostly graphical improvements and UI work. I also added a rudimentary main menu. Due to health problems in the family I can't do much currently, but I hope my productivity increases soon.
SEEN
- Watched a talk by Aubrey Serr about Radically Non-Linear Leveldesign. Nothing really new for me - I guess reading/watching stuff about Thief levels (and trying to make our own Thief-like) already gave enough insights.
https://www.youtube.com/watch?v=CTBor4rhnQs
DONE
- One of the “mini games” for the Halle-Spielt App is finding a spot on the map by actually walking there - of course with the help of GPS. For that I define the latitude/longitude coordinates of the cache and also a radius (in meters) which indicates where it could be, so you're not totally blind trying to find it. What I found interesting is that the formulas for converting lat/long into meters have the magic number
111,111
in them.
DONE
- I'm currently working on a small puzzle prototype for our maybe-next game project Patou. It has a lot of premises it has to fulfill, so I am very limited in what the puzzles will actually look like. First, it has to work in third-person view, second the puzzles shouldn't get too complex and third the dog character in the game has to be able to play an integral part of each puzzle.
DONE
- The Halle-Spielt App now has a beginning and an end. Which means the story creator can add some kind of introductory text, and also one for when the story is finished. On the negative side I noticed that the update for the QR-code scan plugin doesn't work anymore, at least for me.
SEEN
- Watched a short introduction to Unity's new UI Toolkit (or whatever it is called now). It's basically CSS and a bit of the old IMGUI. I don't like how the developer apparently doesn't get direct references to the elements, so they have to resort to getting elements by string, ugh.
https://www.youtube.com/watch?v=6zR3uvLVzc4
- Noclip did a pretty good Thief documentation, with a lot of interviews and some material even I didn't know. The gist is: great game design ideas, and crunch is cool if you do it voluntarily. Hm. Other than that I'm sad Doug Church wasn't interviewed.
https://www.youtube.com/watch?v=8ZmcbShMFNY
SEEN
- A short video about parasitic (game) design. I didn't know a word for it, so it was interesting to me. Parasitic design basically are game mechanics that wouldn't change the game if they were removed. I guess one could compare this to a character in a book, who serves no real purpose in order to advance the story.
https://www.youtube.com/watch?v=xwHJqXKwRKM
- LÖVR could be interesting for experimenting with VR without trying to make a full project. It's basically LÖVE, but 3D and for VR.
https://lovr.org/
- Lots of tutorials for level building. Seems to be Unreal-only.
https://worldofleveldesign.com/
- Some neat things in this Blender video about character creation. The character is ugly though.
https://www.youtube.com/watch?v=hXd4KEqrYEE
SEEN
DONE
- I added a QR code scanner plugin to the Halle-Spielt App. I used it years ago already with a jam game (“Die Stimmung kippt”), and it's still working, so I'm thankful for that. I still have to add a lot of convenience things - what happens if the user aborts the scanning, etc. - but the most important step is done: actually calling the right functions. The game still has no logic on what happens if you do the right or wrong thing though, other than maybe give you points. Maybe it's not necessary to add an actual lose state, as the game should be super easy.
PLAN
- I currently have a few project( idea)s that I would like to work on, but somehow don't have the time or the motivation (mostly both) to actually do it. Some of these are:
- Pry: I work on it from time to time on the side, because I always wanted to do my own Thief-like. Current task though would be to work over the AI, and it's not easy.
- Zauberwald 3D: a text-adventure my brothers and I wanted to create, and while there is no real incentive to actually work on this, it's still in the back of my head.
- Archeology game: a game idea that I had during an Alakajam, but it wasn't feasible to do it back then. I still like the idea though, and I might get back to it someday.
- Stealth gridder: I wrote about this a lot already, and the current state is a good basis for building an actual game on it; but somehow I lost motivation to go further, and I have to find out why.
- Fantasy platformer: this is just a stupid idea that might be fun - a game based on my brother's puppet series. Could be co-op even. If I'd wanted to do it alone, it would be very low-poly, and short.
- Coding game: something like CHIPCODE, but embedded in a 3D world and with a story.
- A game that uses LEDs. I liked working on my little electronics projects, and I think I could pull off something more complicated. Maybe combine it with the Orba, and/or my old RGB gamepads.
- Zoo game: a mobile game for the local zoo. This could actually be a module for the Halle-Spielt App, so here's a higher chance for one of these projects to become realised.
- Vestbank: a VR game inspired by the C64 game Westbank; basically just a very simple shooter, but you have to take care not to shoot innocent people.
- Create stuff with my cheap 3D printer, like a simple 3D puzzle.
- A standalone version of the dialog editor I created for Behind Stars and Under Hills.
- Tech I would like to find time to dive into: Flax, Unreal, maybe Roblox. More Python. More Blender. Urgh, so much to learn and see and do. And not enough brain power to pull through.
SEEN
DONE
- The Halle-Spielt App now saves (and loads) the game state, which is important for this kind of game, so I implemented it “early”. Next up: some kind of high-score. This is for actually adding some kind of reward/punishment to the mini games.
- I drew a picture, on A4, with pencil. It's for the “CD cover” of the soundtrack of my brother's puppet show. It was fun, and as usual I vow to draw more. What's missing mostly is having some kind of theme or task, otherwise I just don't do it.
SEEN
DONE
- Working with longitudes and latitudes for the Halle Spielt App is a bit dry, and testing the stuff is hard, because I'd have to go outside for that... But at least three different quiz types are added now, although they don't do anything yet. Next up is saving (and loading) the game's state, especially for the stations. This way I can reuse it ingame when re-visiting a station later.
DONE
- Doing small things for Pry, treating it like a hobby project. As such I only add/change small things, for example it's now impossible to use the bow while climbing a ladder. Tiny additions to the statistics screen at the end. Shooting an unconscious enemy kills them. Things like that. What I really should tackle though is improving the AI.
PLAN
- I should add more stuff to Alternative Artefacts, but somehow I feel drained. It's not very rewarding to extend it if nobody writes stories for it.
SEEN
SEEN
DONE
- Even though Pry is “on ice” for the time being, I changed some of the input functionality in the project, because somehow I feel I can do at least that. I'm still interested in this becoming a full game, so I'm still at least a tiny bit committed. In any case, instead of
RMB
for manipulating hovered items (like objects on the ground, picking them up), it's now the key F
. This leaves RMB
free for alternative usage of the item in hand; like cancelling a bow attack, or parrying with the sword. The question remaining is: how will gamepads handle this?
SEEN
- Our Machinery now was released as Early Access, and with a price (pretty cheap, for indies). I might want to try to make my usual box puzzle game with it in order to evaluate this game engine.
https://ourmachinery.com/
SEEN
DONE
- I'm doing some boilerplate stuff for Halle Spielt App currently, like implementing popup dialog windows and things like that, and it makes me aware that I should make this reusable because I already did these things for the last three contract jobs now.
DONE
- For the Halle Spielt App, a new side project that is already funded, I looked into how to implement getting GPS coordinates using Unity on an Android phone. We already did this with our Global Game Jam entry from 2019, Wehheim, but back then I used Mapbox, so a lot of stuff was already done for me. After a bit of research - and doing the wrong thing for half a day - it actually wasn't much code to get it working; now I can receive the current GPS coordinates.
DONE
- Out of nostalgia, and maybe for Spielgefährten, I installed Ultima 7 from my floppy disks (around 30 years old now) on DOSBox. The installer didn't continue at first, but I found out I had to reset the disk caching, by using
Ctrl+F4
. No idea why, but it worked that way.
- I used Blender a bit today to create a 3D model for an art object by my brother Ludwig. It's not finished yet though.
SEEN
- A redditor wrote down their experiences when they tried to hire artists. Nice read.
https://www.reddit.com/r/gamedev/comments/oa7dtj/
- Watched a video about hard vs. soft worldbuilding, a topic that currently interests me because of project Pry. I found it insightful, and might change my thinking regarding story creation a bit.
https://www.youtube.com/watch?v=gcyrrTud3x4
- I read this tutorial for ceramic, a 2D engine for haxe. It works a bit like Kha, as it creates a full self-contained installation of all needed libraries. Which is something I'm not a fan of, but I guess it has its advantages. Anyway, what I've seen in the little tutorial project is nice enough and easy to understand, so I might use it for a project, at least for a 2D jam game.
https://jeremyfa.com/getting-started-with-ceramic/
DONE
- I extended Pry's revamped interaction component so it also supports “infinite continuous interaction” now. This is useful for stuff like turning wheels, charging stations, maybe some fun throwaway interactions.
DONE
- There are now items that can have texts in Pry. So the player can either right-click the object and get the same read interface as with the signs, or they can keep the right mouse button pressed and thus collect it. For this I had to do some heavy changes on how interactable things work, but it was all for the better. Consumables will benefit from this too (either eat it at once, or collect it). I think Prey (2017) has the same system, so I was inspired by that.
SEEN
DONE
- To counteract the effect of lifeless (unconscious) enemies dying too quickly when the Pry player throws them around, I gave them a simple auto heal effect. Not very realistic, but it makes it harder to kill enemies accidentally, while they still suffer death from falling great heights.
SEEN
DONE
- Some strange problems arose with a custom editor in Unity, where deleting a sub asset wouldn't actually remove it, and I have no idea why. As a workaround hack I added extra checks and anytime the custom editor notices that there are some invisible sub assets, it tries to remove them. Ugh.
- Currently I'm trying to make unconscious enemies (knocked out by Pry) vulnerable to damage. This is somewhat complicated in the case of fall damage, as there doesn't seem a good simple way to measure how much certain collision events should hurt. I guess it's a matter of trying around. In any case my current approach kind of works, but makes it clear I need to generalise it a bit more - this would even be beneficial in order to add vulnerability based on different body parts. Head shots would be possible then.
DONE
- After adding the tutorial signs to Pry's playground test level, I now try to make enemies who were knocked out by the player more meaningful. It's especially important that they die when you hit them with an arrow, or push them into an abyss because of the impact. Easier said than done. Anyway, the reading interface works well and we can even add pictures to the texts. The usual localisation code is utilised as well.
SEEN
- Noticed that I can't select UI elements anymore in my Scene view... apparently because Gizmos were not active! The hell!
https://answers.unity.com/questions/1653266/
- Remember, when using
TMPro.TextMeshProUGUI
in a Vertical Layout Group
, use a Content Size Fitter
with Vertical Fit
set to Preferred Size
!
DONE
- Currently working on an interface to read stuff for Pry. Because it's about time we add some text messages, and hint at some story!
- I wrote a design document for our next demo level. While it was a bit tedious, we should probably do something like that for every single mission in the game.
SEEN
- Finished watching a tutorial video about modelling and sculpting a stylized head/bust in Blender. It actually taught me some new techniques, especially the stuff with remeshing, so it was pretty interesting.
https://www.youtube.com/watch?v=KsDe1V9Dl-0
SEEN
DONE
- Pry now has a zoom tool that can be used to decrease the field of view of the camera, thus giving the illusion of a zoomed in view. Very handy for thieves and spies! Of course, this is very rudimentary for now, with placeholder optics and so on, but it works quite well so far.
DONE
- While it's nothing special in itself, Pry now displays the current version in the top right corner, and if it's different from the version on the server, it will show that too. What's noteworthy about this? I updated my StoneBuilder script so I can automatically upload the most current version (as a text file) to the server without me having to do manual steps.
SEEN
- Saw the documentary about Axiom Verge. Pretty crazy that the guy did all the stuff for the game, even the music. Got pretty sad about what happened to his son (who was born after the release).
https://www.youtube.com/watch?v=mWgmPkR1wwU
DONE
- I did some more work on the ladder in Pry, as the playground demo made it clear that automatic climbing isn't the way to go. Because if you just want to peek over the edge (as there is a guard patrolling), you climb up into full light instead. So now I removed the automatic climbing, which makes leaving the ladder a bit more complex - which means I have to get back to it sooner or later.
SEEN
- This tutorial explains how to get rid of strange rotation and scaling when you export a Blender model to FBX and import it into Unity. Basically, uncheck
Use Space Transform
when exporting (available since Blender 2.91) and check Bake Axis Conversion
in the importer options (since Unity 2020.1).
https://polynook.com/tutorial/how-to-export-models-from-blender-to-unity/
DONE
- I will call Guarden from now on Pry, even though that's not the final name either - but it might be the name of the protagonist. It fits more than “Guarden” anyway.
So I improved the hacking device a bit - it got some fun effects (all rudimentary for now) - and battery. The battery can be charged at a special station. We'll see if this is a good idea, but overall I'm all for limiting tools so the players have to be more tactical.
https://ratrogue.tumblr.com/post/653683352261509120/
- We gave an interview in our office today, for Halle Spielt. One of our better efforts to (re)present Rat King, I must say.
SEEN
- Read this article about The Art of Lighting Game Environments. It uses Unity's HD Render Pipeline, but can be applied to other software and render pipelines. Overall I didn't learn much new, but it's nice to see the HDRP is actually using the same stuff as before.
https://cgcookie.com/articles/art-of-lighting-game-environments
DONE
DONE
- Added some finishing touches and fixed a few bugs, and now Guarden's playground demo is ready to get sent to testers. There are not a lot of them yet, but I wouldn't want to have too many eyes on the game for now anyway. I know about pretty much all of the obvious problems it has. Still, it would be cool to see if there are people actually interested in a Thief-like.
DONE
- Guarden finally doesn't rely on hard-coded missions/quests anymore - instead I programmed ScriptableObjects that do the very same job, but can be created for each level individually; maybe even for different difficulties.
DONE
- I set up an itch.io page for Guarden, so we can distribute it to testers when the time comes. The name of the page is, for now, “Pry - Steel and Stone”, because “Guarden” wasn't fitting anymore for months now. Of course building the game to an
.exe
made some bugs prominent, so first I had to fix those. After that comes the polish face for the playground - which basically means that I will distribute loot and other items, and define the mission better.
DONE
- I wondered quite a bit why, in Guarden, thrown objects would jitter so much when I move the player/camera at the same time. Seems I forgot to change the
Rigidbody
's Interpolate
value. The internet says the value should be Interpolate
, but so far the jitter really got removed only with Extrapolate
.
- For a bit more “juiciness” I also added some small camera roll when the player moves left or right. I think it looks awesome, but it might be annoying for some.
SEEN
DONE
- I'm currently working on some kind of dynamic help system for Guarden. It mostly consists of signals that the different components can broadcast. E.g. the sword, when pulled out, just broadcasts a signal
INPUT_BUTTON_ADD
with the values LMB
and Attack
. Of course, this has to get improved later, to accommodate gamepads and rebindable controls.
DONE
- I removed the Collab integration of Guarden, because honestly it annoyed us more often than it should. Instead I tried to export the repository because I wanted to use the data for a GitHub repository of Guarden. Unfortunately it wasn't usable for us, but thankfully a full development history isn't that important to me for now. This might change later. In any case I am trying out the GitHub for Unity plugin, even though the reviews on the Asset Store are far from positive. But as we don't use most of the functionality it might be a boon nonetheless. In any case I need to look into GLFS (Git Large Files Storage) sooner than later.
https://unity.github.com/
- Among some small changes the crouching in Guarden is now a toggle. It will probably be an option later on, when we have a menu for that.
SEEN
- The 52nd entry of Jackson Dunstan's series “C++ For C# Programmers” is a list of best practices in C++, and it really was interesting to read. Especially with my extremely rusty C++ knowledge.
https://www.jacksondunstan.com/articles/7139
DONE
- I could make the ragdolls in Guarden much more stable now. One reason they always behaved like goo was that I put the ragdoll colliders into a physics layer that doesn't collide with itself. Another very helpful thing was just using PuppetMaster, a plugin by the FinalIK developer. PuppetMaster is actually pretty powerful for dynamic ragdoll functionality, and a bit of an overkill for our project. But for now it works much better than before, and maybe we will use some of the other features of PuppetMaster.
https://assetstore.unity.com/packages/tools/physics/puppetmaster-48977
DONE
- Apart from doing smaller things for Guarden, like adding support for methods with an integer parameter to the Hacking attribute, or increasing the senses (view distance, angle, etc) of AI agents that are suspecting or follow a target, I again tried to improve the stability of ragdolls the player throws back into the world after picking them up. Apparently I am not the only one with this problem, and it seems one culprit at least are the joints that have to get reset somehow, otherwise they have old and now invalid values in all the wrong places.
https://forum.unity.com/threads/cleanly-resetting-a-ragdoll.202510/
https://forum.unity.com/threads/resetting-ragdoll.247435/
DONE
- The player can now grab stuff and move it around in Guarden. This isn't as sophisticated as it was in TRI, as the physicality of the system back then is not needed or wanted; instead a much simpler system akin to Thief was implemented. Right now it only works for bodies of enemies, but it would be no problem to extend it to crates and similar stuff. It still needs some kind of collider check though. And the bodies behave very strangely; I gave them a special “throw pose”, but the main problem is the fragility of the ragdolls.
DONE
- As Guarden's enemies notice corpses of other enemies when walking around, it would be bad if the player wasn't able to carry dead bodies around. Now they can do that. There are problems with the ragdolls though, which are not that important for now.
DONE
- My brother is getting another trailer from me, for one of his exhibitions. This time I'm not doing it in a video composition program (I mostly use Hitfilm Express), but in Unity, because he wanted it to look like a cracktro. A nice idea, and scripting this instead of animating it feels more natural. Most elements are done for now, but here and there will be corrections to the timing.
http://www.kunstvereinkohlenhof.de/matrix/ludwig-hanisch-malerei-installation
DONE
- It's probably a quite brittle system, but guards in Guarden can now “remember” corpses lying around - so they won't get alerted by them forever anymore. It's actually not really bad if they do, but in the end the game should at some point return to a “safe state” because otherwise it feels unfair.
DONE
- I added some rudimentary path-finding code to my gridder. It's not used yet for anything. The important part is that AI agents should determine if they can use doors or not, even if they're currently closed.
SEEN
DONE
- I did an overhaul of how the new AI agents in Guarden look at things. It's not finished yet (as usual), but the gist is that I removed “rotating body/head at a target” from the agent's move module and made it an integral part of the agent class. Unfortunately there are still some problems, and not everything is absolutely clear. I especially dislike how I coupled the rotation behaviour to the current state, and I will most likely change this.
SEEN
- Interesting way to see Unity's internal editor functions: “Create an asmdef and call it
Assembly-CSharp-Editor-testable
.” (The functions are internal because they are not documented, because they can change anytime.)
https://twitter.com/sh4na/status/1374446599435214850
PLAN
SEEN
- Had a look at C# 8.0's new features, and while some of them are interesting, I am not sure I will use them in the near future. Especially as Unity does not allow all of them.
https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8
- I'm still pondering about switching Guarden from the built-in render pipeline to the Universal RP, but of course the fact it's only forward rendering (which means: it's not possible to have a lot of dynamic lights at the same time) is the main reason we won't do it. As there is a deferred renderer in the works, this might change. But then again I skimmed over this (fairly old) article about Forward+, comparing it to Forward and Deferred, telling me that we should wait for Unity to get to that one. And who knows how long this will take.
https://www.3dgep.com/forward-plus/
DONE
- As Jana wished for an enemy who can look from above, from some kind of balcony or so, and attack the player as soon as they see them, I worked on that. It's really frustrating what a can of worms that is, even though Guarden's new AI mostly works. But there will always be strange and unsolvable edge cases.
PLAN
- Someday I really want to release a gridder, so I had a look at my old TODO list of the last iteration of it. Seems doors were very important to me, so I outlined how to implement them. Making them interactable for the player is the easiest part; it becomes more interesting when enemies should be able to use them too. So there should be connections between the way points that have information if they can be enabled by doing an extra step.
DONE
- Guarden's enemies can now switch to far-range weapons if their enemy (i.e. the player) is too far away. Not perfect yet, but it's working. Main problem is the fact that they switch weapons instantly without any animation, so this looks a bit strange.
DONE
- I kind of solved the new, modular AI's problem with the alarm buttons. AI agents of Guarden can tell other agents “facts”, which are just single strings for now, but with a time constraint. It's definitely not the most robust system, but somehow I feel that a little “wonky” AI can create funnier/unexpected moments, and that's probably more important anyway.
- I fixed a tiny bug in bloed that prevented it from working with Bakery - as I added a
NotEditable
hide flag to each chunk, the lightmapper didn't find the objects. So I removed this hide flag. It's still not enough to warrant an update of the editor on itch.io, especially as less than 20 people actually purchased it.
- As I actually wanted to do a game this weekend (but didn't), I opened my old gridder project and fixed a bug with the player being able to climb sideways. At least this won't annoy me now. (The actual plan for the weekend was a very simple game with only a single level and a single enemy.)
PLAN
- With a free weekend to come, I wonder what I should do. I have several projects still open that I'd like to pursue, but most of them are not really weekend material. Like, one idea would be recreating my dialog editor (for Behind Stars) as a standalone tool, maybe using Dear ImGui, and its C# wrapper.
https://github.com/ocornut/imgui
https://github.com/mellinoe/ImGui.NET
SEEN
DONE
- While we're fleshing out the story of Guarden, I still work on the AI from time to time (which will be the case for, probably, forever). Now the AI agents can activate alarm buttons if they feel there's danger. The problem though: they all run to the button at the same time; so I need some kind of blackboard for enemy groups where they can add infos, like “agent X is going to activate this alarm”.
SEEN
- Interesting tool for curve fitting. Not sure yet for what I'd need it, but looks useful of course.
https://mycurvefit.com/
SEEN
- Interestingly enough Unity Tech wants to add support for Enlighten's real-time global illumination to URP in the later versions of Unity. After they said they would remove Enlighten completely from Unity 2021 and beyond. It's really bad how much they're behind with their own tech so they can't deprecate stuff as planned.
https://forum.unity.com/threads/update-on-global-illumination-2021.1067015/
DONE
- Today I tested Bakery's settings and generated lightmaps, in combination with the Universal Render Pipeline of Unity. This works so far, although I still miss the real-time global illumination of Enlighten. Anyway, things got strange when I changed the forward renderer of URP to the experimental deferred - suddenly everything became grey. I guess this needs quite more time before it's actually usable.
SEEN
- Watched another Blender video, this time about one hundred add-ons. I'm not sure why I watch these videos, but they are kind of entertaining, and in the end it's a good idea to know what the software actually can do.
https://www.youtube.com/watch?v=n9nWAuKat60
DONE
- While fixing a few bugs with the “new” AI in Guarden, I noticed a big problem with how the enemies react when getting suspicious because of some sound. There are a lot of cases where they would walk stupidly in exactly the wrong direction, because, of course, they are suspecting and don't have a clear target. There's also a problem with pathfinding, but this is just an amplifier. I will try to find ways to solve this later, when we actually build stuff.
In the end the problem might solve itself when I make the detection angle and radius more dynamic. (For example increasing the sense radius when suspecting a sound.)
- Furthermore we worked more on the new story/plot, and it's actually the first time since the inception of Guarden as our new project that I am quite content with the direction our story ideas are going.
DONE
- Had a problem today in my C# code where something that became
null
wasn't recognized as null
. Of course this was because of Unity's Objects being able to be destroyed but still not null
internally. So I have to check thing == null || thing.Equals(null)
on my interface
s from now on.
https://answers.unity.com/questions/586144/destroyed-monobehaviour-not-comparing-to-null.html
- The “new AI” of Guarden is done now, as in: it's now a complete copy of the old functionality, just spread out over several classes instead of just one. Next step is to put the modular design to a test and extend it with interesting things like: pushing alarm buttons when a threat is near; detecting (and reacting to) dead bodies of friends; attacking foes that are not the player. And so on.
DONE
- More work on the “new” AI of Guarden (which is still only a re-implementation of the current behaviour) - it now can potentially sense multiple targets. Choosing the “best” one is not really implemented yet, but that is only a matter of time, and when we need it. I also could make attacking the player more general by just playing the animation and letting animation events do the rest.
DONE
- Just to see if we can use it for Guarden maybe, I tested Unity's Universal Render Pipeline - with deferred rendering. Deferred rendering is still experimental, not officially supported, but what I saw did work at least. (I had to update to Unity 2021 for that, because it didn't work in Unity 2020 LTS.) The amount of draw calls is pretty high though, even higher than with the old in-built render pipeline, so I am not sure if a change will be a good idea. Only actual performance tests will tell the truth.
SEEN
DONE
- Still working on Guarden's AI - and this will go on for another month is my guess. I am back and forth on how to distinguish between a “suspecting” state, and the actual “sensing something and following it”.
- We also discussed the story of the game a bit; while this is also a big construction site for the foreseeable future, at least we're very happy with its current direction.
DONE
- During Easter I mostly worked on Guarden's AI, as planned for a long time. The current state of the new code is “barely working” and “extremely unfinished”, but at least I could separate some of the original code so there won't be a monolithic
Enemy
class anymore, but a GameAgent
that can have several components responsible for animation, movement, etc. Hopefully I can keep this up till the end.
SEEN
- I watched a video about optimizing physics performance in Unity. It actually contained stuff I didn't know before, especially things they added in recent Unity versions. For example, you can change the solver iterations per
Rigidbody
. The raycast command API is interesting too, although the last time I tried it it didn't fit my use case unfortunately.
https://www.youtube.com/watch?v=pTz3LMQpvfA
SEEN
- I read the two PowerPoint presentations by Randy Smith, namely "Design Fundamentals of Stealth Gameplay in the Thief Series" and "Level Building For Stealth Gameplay". They still hold up. Later that day I also read "How To Help Your Players Stop Saving All The Time", even though it's probably not that applicable to Guarden - a highly interesting read nonetheless.
A day later, I read “Practical Techniques for Implementing Emergent Gameplay”, and while Guarden already follows some of the proposed techniques, it was still a good read.
http://www.roningamedeveloper.com/Materials.html
SEEN
- While Guarden still uses the legacy render pipeline, which is very outdated nowadays, I saw that there are efforts to bring deferred rendering to the Universal Render Pipeline. Which would be awesome, because “infinite amounts of lights” is what the game needs the most. Hopefully it's coming soon enough.
https://forum.unity.com/threads/urp-deferred.931872/
DONE
- I wrote a blog post about bloed; which is pretty much the pinnacle of my PR efforts for this tool.
https://ratking.de/blog/2021/03/26/bloed/
- Enemies in Guarden now have foot steps. At first I tried to use animation events for this, but as I blend idle, walk and run animations, this wasn't feasible. In the end I now check the
Y
position of each foot and if it's below the start position, it checks the floor's properties and the correct sound is played. Works well enough so far.
DONE
- As enemies in Guarden got startled by their own actions (namely: closing doors) because of the sounds, I added some kind of “ownership” to incidents like this. So now they can distinguish between sounds caused by the player and sounds caused by anything else, which removes the problem. I put the info of by whom it was caused, and when, into a class
SignalInfo
, and this is probably not good for performance (because it needs to get garbage collected at some point). Changing it to a struct
might be bad too though, because the info gets copied for each receiver. Ugh, decisions...
- Finally added a few missing projects to my website.
https://fholio.de
PLAN
- I am still working on that “perfect” behaviour tree for our Guarden NPCs. It's pretty much an AI agent from Thief so far, but I'm okay with that, because those were fun to play with.
SEEN
PLAN
- For Guarden I need to make the AI of the enemies more robust, especially as I'm coming up with things I'd like to add, and of course with a growing list of things that are broken or don't work in specific cases. I still want to use behaviour trees, and I'm slowly accepting that I still have to use “states” with them. Maybe I should just rename them to something else, like “condition”, so if the enemy notices the player, they get into the “attack” condition. No change actually, just in name. In any case I am filling a document with how I want the behaviour tree to look like, and it's not a big difference to what it is currently, but here and there I see room for improvement.
- Mozilla Hubs is really nice for a different kind of chatting, so we want to do a Rat King hub someday.
https://hubs.mozilla.com/
SEEN
- Finally read an article on The Digital Antiquarian, about System Shock 1. A great game, ahead of its time, as they say.
https://www.filfre.net/2021/03/system-shock/
- Finished reading a book about - writing books. Not that I really want to be an author, but I toyed with the idea of writing something from time to time. I know I should be much more active to actually do it. I have that problem a lot with other creative things too, like drawing or composing music - I am interested in them, but I don't have the energy to master these things.
DONE
- An interestingly complex problem in Guarden currently is picking/hovering items that are attached to enemies. As the enemies have a bounding box (a capsule actually), the item has to “float” a bit detached from them, because otherwise the hover raycast will pick the enemy, not the item. I tried various things to solve this differently, but I actually didn't find anything that would work correctly in all cases.
DONE
- I improved the sound “hearing” of the enemies in Guarden, by giving each sound an “importance” factor, so the suspicion of an enemy raises slower for certain sounds than for others. Fixed one or two bugs with my
SoundType
class on the way. (I should commit them to my jam base code.)
- For Jana I printed a little box for her nose piercings, but unfortunately the lid doesn't fit. Back to Blender, I guess.
DONE
- Tried to fix some really nasty bugs with my Guarden propagation code, which was bad in a lot of places, but mostly in the pathfinding section. Had to resort back to this A* tutorial that is still one of my most beloved tutorials I ever read.
http://csis.pace.edu/~benjamin/teaching/cs627/webfiles/Astar.pdf
- Writing down a plan for a talk we will give in two days. As usual it's about personal games.
DONE
- Found out why the 3D printer didn't connect via to my PC, and also found out how to solve it. So, the solution is to search for
wch.cn ports 3.5.2019.1
, download this driver and install it manually. I think the main problem is that I suppress driver installation on my laptop (because of certain problems with stupid microphone drivers that get downloaded and installed automatically).
- I uploaded bloed on itch.io. I won't do much promotion for it, probably.
https://ratking.itch.io/bloed
SEEN
DONE
- Finally I did what I wanted to do for weeks now, I made a video for bloed. Of course everything that can go wrong went wrong (sound problems, my stuttering, screen too bright, bugs, etc), but I am not in the mood to fix the errors or do it again, so there it is. Maybe in the future I'll try another video. Tomorrow: releasing version 0.5 on itch.io and listening to the crickets.
SEEN
DONE
- I added footstep sounds to the player in Guarden, which made me realize the AI sensing and propagation needs more work. Mostly because enemies hear the player too well, as there is no info of how “suspicious” a sound actually is. Walking on metal should have a suspicion factor of 0.8 I guess, wood maybe 0.5 and carpet should be at 0. Something like that. That means I need more data, either via
ScriptableObject
s, or maybe a database.
DONE
- I'm working on a system for sound propagation in Guarden. With my naive approach I can define rooms (with one or more points), and connect them via portals (usually doors). For now this works well enough, although in the future I want to be able to define the “penetrability” of a portal, and also implement some A* algorithm for the propagation; otherwise it is not “realistic” enough. The main problem with my approach so far is that it isn't automated - every room has to be prepared by the designer, and things can go wrong in that case...
SEEN
DONE
- As an experiment I changed the parry button of Guarden - it is now the same as the sprint button. When the player is standing still (more or less), has the sword equipped, then they would parry on the press of the button. Otherwise they increase the movement speed. This is just so I can change the parry button to drop/throw, which I find much nicer.
I also finally started with making the hacking device a bit more useful, but there's still a long way to go. In any case every hackable thing can have more than one function to hack, and it will be displayed in the device instantly. Using the device will now make the player stop - they can't move as long as they hack. I don't like this solution much, but it's the most real-time one I found so far.
DONE
- I started my entry for the current Alakajam (theme is “Ancient Ruins”), because during my self-imposed computer-free time during the whole Saturday I actually got a good idea for it. But I do it relaxed, because I am sure I won't finish, and the vision of the game is grander than a jam game, even though it is fairly straightforward. I like the game idea enough to try it later on again.
PLAN
- A semi-regular development update in a voice channel inside our Discord server could be fun. Just to get more comfortable with sharing stuff, and talking about it. We don't have a big audience, so it would be really for the practice, not anything else.
SEEN
DONE
- I extracted the code for throwing items from Behind Stars and pasted it into Guarden. Amazingly it mostly works, though a few bugs remain. And there is the problem of re-using the blocking/parrying key for dropping/throwing items. So blocking probably has to go, because there are not much free buttons on the gamepad left, and it really is only used for the sword. We don't even know if we will have melee weapons at all...
DONE
- I extended the existing inventory UI for Guarden, so you have more than just the 8 quickbar slots, but also a full inventory when pressing
Tab
. You can also swap items between slots. A lot of work to be done, still.
SEEN
DONE
- The hacking is rudimentarily implemented in Guarden - you can click on something and it changes maybe - but now I found out that
UnityEvent
s can be generic too and have up to four arguments, which is nice. Using it in the Inspector has to be done with care though, because you can still (accidentally) select the method with the parameter to be defined by the user.
https://docs.unity3d.com/Manual/UnityEvents.html
- One of the things that annoyed me with bloed is the fact that the prefab workflow is bad because of a bug with Unity (the physics scene gets missing in the prefab view). It means I have to save the asset after every click, and this drags down performance a lot. So I thought I could use this piece of code I found in the forums (by chance) - basically Unity's own editor-only ray-cast functionality for
MeshFilter
s (instead of Collider
s), which means I don't have to use Physics at all. After some tweaking I got it working, and it actually improves performance a lot. At first I forgot that my bloxel textures can have noise that will move the geometry around quite a bit. I chose to not use shaders for this so the physicality is better, and the noise can have more impact. That meant I cannot use the drawn meshes for the picking, as it can lead to wrong positions, so I had to resort back to the specifically generated colliders - which is a bit sad, because I hoped I can get rid of those too.
DONE
- It's now possible to knock out enemies in Guarden, via the standard tool “fists”. They also die instantly when they get hit by a weapon if they're not alarmed. This is all rudimentary; but when I thought about making this another generalized system I noticed that this will be too much of a hassle. For now it works well enough, and is still somewhat extensible.
Ladder functionality is still in the works, too. Because of all the edge cases it will need a lot of time and thinking, and I procrastinate too much while trying to do it.
- I published a blog post about our jobs as tutors at our former university.
https://ratking.de/blog/2021/02/17/play-your-self/
- Recorded a video for bloed, version 0.5. It is probably the worst video I could do, but I just don't feel like putting more work into it. As already stated, I don't expect anyone finding this tool useful enough, and I also actually don't want to answer support questions (much). Though an FAQ (if there are any questions) will happen probably.
DONE
- I started working on the ladder functionality of Guarden, and it frightens me a bit. Mostly because it will make the player's character controller even more verbose and complex. So the first step actually was to have a look at it again, just to see if I could improve the readability a bit. In any case, being able to crouch, climb, jump, swim,... it makes a character controller very heavy indeed. I have no idea how to break this down into cuter code chunks.
PLAN
- Something I've never done for our first-person games would be having ladders, so this is something I want to implement in Guarden soon.
DONE
- I updated the actual bloed project. Next: some promo material probably, for the itch.io page.
SEEN
- The next 7DRL Challenge is happening soon! Maybe I'll participate, if I have an idea for it. It should be short, but in the end it could be the first game for my ray-caster...
https://itch.io/jam/7drl-challenge-2021
DONE
- I updated bloed's documentation for the upcoming version 0.5. Next step is updating the actual bloed repo, and then making a video.
DONE
- After, again, fiddling around with Unity's serialization system I can now define “dynamic variables” for each prefab, scene object or
ScriptableObject
in Guarden and even merge those variables. Albeit powerful, the system I wrote is very shoddy. In any case it seems to work, as long as I don't want object references. If the need should ever arise (especially for referencing prefabs), I will have to rewrite it a bit.
Anyway, I can now easily define some dynamic variables for an item type, and overwrite them via a game object instance.
DONE
- The inventory system of Guarden shouldn't be the most complex one, but of course it has its own pitfalls, as does every system that needs to be more or less “foolproof”. So I worked on it a bit this weekend, adding more to the item types, and so on. What dawned on me is how the controls could work. Everything that has to be combined with objects in the world, like keys with doors, can be taken into the hand. Keys would work like weapons this way. So you use it like a sword (left mouse click), and if a door is near, it (maybe) unlocks its lock. With a right click you can open the door then. This means,
LMB
is “using the item in your hand”, RMB
is “using the object in the world”. I am not sure yet how consumables will be consumed then, but that will probably be just the key F
. (Or vice-versa, with RMB
for consumables and F
for doors/chests/collectables/etc.) Consumables are items that don't need to be actively put in the hand because they are not combinable with specific world objects in the same sense as keys. This includes health potions, food, bombs, traps.
PLAN
- Hopefully I can finally release bloed next week on itch.io. I don't expect that anybody will actually download and use it, but it will be a milestone for me. It might also pressure me into doing updates. In any case I want to use bloed for my still planned stealth gridder. But before I can release bloed I still have to do the following things: a) test it with Unity 2020; b) update the documentation; c) create screenshots; d) make a video explaining the tool a bit; e) copy the bloxels code from my Demon Thief project to the actual bloed project f) update the test level (it's broken now, because of the changes below); g) decide for a price, if any. Afterwards, h) write a blog entry.
- For Guarden we have some kind of wishlist floating around in our heads, things we'd like to see in the game. This list includes: ladders for the player to use, AI enemies that alarm other enemies, sounds that get propagated through the rooms, a lot of ways to open doors in the game - codes, keys, secret levers... But for now I am mostly “stuck” at mundane things like deciding what kind of inventory we will have. We also have to do a lot more for the story/plot. In any case, for the sound Steam Audio might be something I should have a look at.
https://valvesoftware.github.io/steam-audio/doc/phonon_unity.html
SEEN
DONE
- We do another weekly live-stream, this one each Friday, where we play stealth games. This is meant as research for our own upcoming stealth game Guarden. So far we did six episodes.
https://www.youtube.com/playlist?list=PLH7V8wJHcWSC8psIQLcunasOCMtmuRxaJ
- Overall I did not do enough for Guarden the last few days, because of other stuff going on, stuff that doesn't actually take time, but is a bit pressing on the mental side. Hopefully karma will balance things out a bit, and soon.
- I did the “last” point on my checklist of things I wanted to do for bloed before releasing it - “optimizing” the extra data for bloxel sides. It now uses a list of integers instead of a dictionary of a side data structure. This probably won't save much in the long run, but it just feels nicer, especially as dictionaries are not serialized anyway.
SEEN
- A friend made me aware of a book from 1995 called “Amazing 3-D Games Adventure”, where the author Larry Myers describes how he created a ray-caster engine. This engine was ACK-3D. Which was highly interesting to me, because ACK-3D is the basis (or precursor) of the ACKNEX engine, which I bought and used a lot as a teenager. Ah, fond memories. So I researched a bit and found this fun article about fixing bugs in code decades old.
http://blarg.ca/2019/10/20/amazing-3-d-games-adventure-set/
DONE
- The ray-caster is far from finished, but as the deadline was only minutes away I uploaded it. Instead of a game it's a sandbox for now where people can edit the only level it has. It is not possible to save it though. The full Sunday was dedicated to adding a working ingame editor (via zui). That means you can walk around and change the level in first-person. I actually didn't have time to offer all the features “rc-test” supports - individual wall textures are not possible to edit for now. The current state will be confusing for users anyway.
I am interested in taking the ray-caster further and maybe create some jam games with it. Hopefully I don't forget about it. Best of all though: finally I have some time for other things.
https://alakajam.com/9th-kajam/1045/rc-test/
DONE
- As this is the last day I have for my ray-caster, I thought I'd try to add portals, because this should be fairly easy with ray-casting (more or less). As the first step I replace differ, a fine collision library for haxe, with my own code, because differ does not support collision with line segments, only with polygons and circles.
DONE
- It's always “fun” to find out what tiny thing is causing problems next. This time it's the fact that Unity does not have a diff tool on its own for the Collab stuff, and all of the third-party tools recommended come with problems on their own. Some of them have to be paid, others (TortoiseSVN) install more stuff than needed, WinMerge doesn't get recognized. But at least I found a forum post that explains how you can add WinMerge as a custom tool, so I'll try that next.
https://forum.unity.com/threads/bug-invalid-command-line-using-collaborate-and-winmerge.603064/
- The “ZwölfElf” room game, a collaboration between our students, is finally playable on itch.io.
https://mmvr.itch.io/der-12-11
SEEN
DONE
- After downloading Visual Studio, which was around 10gb, and some unforeseen problems with images and divide-by-zeroes, I finally created a working windows build of the ray-caster. The colours are all wrong, but other than that this means I could create a level editor for it without having to use a third-party tool or another framework. The question is if I will have the motivation and time for that.
- For Guarden I delved into my character controller code (which is basically what was created for Behind Stars) and tried to add duck climbing. It's a bit of a bigger hassle than I thought, mostly to get it working with higher ledges.
SEEN
DONE
- I fixed the usage of the doors a bit, originally created for Demon Thief, now for Guarden. Of course doors are a big hassle in games, so I know this is not the end of it, but for now they are usable enough; I just need to implement the usage of keys.
- Optimised the ray-caster a tiny bit. I rendered the top/bottom walls behind other top/bottom walls even when there was a centre wall in front of them, this is now fixed. I also had an idea for the actual gameplay, but I think it's too much work for the rest of the week.
DONE
- Users of bloed (if there will be any some day) are now able to change the chunks' size from
8
to any value between 4
and 64
. It's not really tested, but it should work.
- Although I am still not sure how a release (for the game jam) of the ray-caster will look like, I added bottom walls too.
https://twitter.com/RatKingsLair/status/1353411491765096454
DONE
- I added top walls to my ray-caster, but my heart isn't really in it anymore. I guess I will continue to work on it from time to time, but for the game jam it won't be a game release, more of a tech demo.
SEEN
DONE
- I prepared the repository (residing on Unity Collab only for now, github will most likely follow) of our current game project so Jana can use it too and add test levels. This happened before already, but now we upgraded the Unity version and actually use almost everything from Demon Thief. I also created documentation for all things related to the project and the scenes' hierarchy, so hopefully there will be less problems.
For now the code name of the project is still Guarden, even though we do not actually use the “Gardening game + Thief” idea anymore. It still will be a Thief-like, but with a “Berlinpunk” setting. My fear a bit is that it will remind of NEON STRUCT a lot, but then again that one is sci-fi.
- To make bloed's bloxels a bit more general I removed all references regarding sounds in the bloxels. Users should define their own reactions (sounds when walked on, when hit, etc.) via tags and template variables.
SEEN
- Another day, another student's project; this time Unity, but with the Universal Render Pipeline. I didn't know, but apparently the URP comes with its own special post effects. It was also “interesting” to learn that shadows on terrains don't work if the
Shadow Cascades
are set to 0
instead of 2
or 4
. (It's a bug, who'd have guessed.)
SEEN
- Saw the inners of a student's Unreal project. Blueprint was pretty intimidating. I guess if we ever get around trying out Unreal, I will directly go to C++, because I don't see the benefit of Blueprint and its bad overview and even worse sense of structure. Unfortunately - I definitely like node-based scripting, but here I just don't feel the positive side.
PLAN
- Now that I potentially know how to implement collision for the ray-caster, I am not sure what to do next for it. I know I need some kind of level format and editor to actually make meaningful content for it. But mostly this is an experiment for me anyway, and I like the infinity stuff already, so I should concentrate on that, maybe just making levels that are nice to look at.
DONE
- For our new game project I basically took what I did for Demon Thief and upgraded it to Unity 2020.1, and tried a few different assets. While I kept returning to PandaBT after trying NodeCanvas once again (very briefly - it will always feel much too bloated now), I will have to use Aura2 instead of HxVolumetricLighting, because the latter one is now officially deprecated. Too bad, I really liked the visual result of it. What I also want to change is to use FinalIK instead of LookAnimator - not because LookAnimator is bad, quite the opposite, but because I want to have a certain limit for the amount of third-party assets we'll use. Having one asset (FinalIK) that does a lot of different things will always be better than one specialized asset; even though FinalIK's LookAtIK and AimIK are definitely more difficult to use so far. But FinalIK also integrates with PuppetMaster (because it's the same developer), something I plan to use for the ragdolls from now on.
https://assetstore.unity.com/packages/tools/physics/puppetmaster-48977
- Seems like the bug with UVs getting strange got me again in bloed. I now removed the functionality to update UVs only (instead of the full mesh), even though this degrades performance a bit in certain cases. Unity strikes again!
DONE
- After following a very bad tutorial and going nowhere, I chose the lazier path and added differ to my ray-caster for collision and resolution. It works quite well with the walls so far even though it could probably be optimized by supporting a grid-based world map. Collision with sprites will be next. After that I will have to think of either a simple level editor, or at least a readable and powerful level format.
https://snowkit.github.io/differ/
DONE
- I semi-solved my problem with the sprites not being drawn by just adding all the neighbour tiles to the list of things to draw. This is “semi” only because I didn't test it yet.
DONE
- I added sprites to my ray-caster by following the aforementioned tutorial, and I'm still working on them so that they can be seen in “infinity”. This mostly works already (even though with bad performance), but there are edge cases where sprites don't get drawn even though they should. The reason is that I collect all tiles with sprites on them during rendering the walls; which means that hidden tiles will not draw their sprites even though they might be visible (as they can have free positions on them).
DONE
- Because of the half-baked way prefabs work in scripts, I removed the ability in bloed to edit prefab instances. Users are prompted to either to unpack the instance, or open the prefab editor. Editing the prefab is insanely slow because of a bug in Unity with marking the prefab scene dirty - it removes the physics scene somehow - so I have to save the prefab asset on every change.
DONE
- I followed the tutorial further and now my ray-casting project has floors and ceilings. Next is either sprites, or collision. Probably both.
SEEN
DONE
- Got very frustrated today, because the prefab workflow with bloed is a never-ending story without a happy ending. After a lot of hair-pulling today I decided to change my approach, with probably as much work as it was before, but maybe a bit less error-prone.
- We did another live-stream today where we played and analysed a stealth game, because that's what our next game's genre will be.
DONE
- Working with prefabs in conjunction with bloed now has much less problems, but it's very slow and will probably break if the user does anything fancy. Still, it's better than before. I had to do some nasty hacks because there is a very strange bug with marking the prefab scene dirty and physics.
- I wrote a blog post about my questionnaire from a few weeks ago.
https://ratking.de/blog/2021/01/05/a-questionnaire/
SEEN
DONE
- By removing a chunk of code (and degrading the performance a bit in the process), I did another step towards usable prefabs with bloed. A big problem currently arises when the user unpacks a
Bloxel
prefab, which doesn't recreate the meshes for now.
- After a bit of tinkering - there is no event for unpacking a prefab instance - I can now make the meshes of a
BloxelLevel
unique as soon as it becomes not connected to a prefab anymore. The same happens when the prefab gets deleted from the project.
DONE
- I am currently trying to make bloed compatible with Unity's prefabs, and it's just hell. There doesn't seem to be an easy way to accomplish this.