June 17, 2025
Added dynamic app scalability
- Added option to change the phone state cycle key for increased customizability and convenience
- Added close animation for Bunka app
- Bunka app is now synced perfectly with the bunker panel
- Fixed layout issues with refreshing the bunker app sliders
- Moved app animations to the app menus to avoid overloading the phone animator and promote reusable animations for all apps (leading into the next point)
- Bunka app open & close animations have been switched to a general app open & close animation for reusability
- App animator is also completely reusable for all apps
- All apps can currently open, but they all show up as the Bunka app
Worked on updating the rage room with the new assets/features that were added after the first ship. Make sure to watch the attached video to see how the updated rage room looks.
Some new additions include:
- Openable doors (freezer, shelves)
- New models (road, table, freezer, toilet, sink, toilet paper
- Automatic shelving
- Procedural NPC walking
- Interacting with NPCs & NPC menus
- Trade system
- Item dropping
- Pulling out the phone & opening apps
- Lighting
and more!
Once again, please watch the attached video to view everything that was added.
Updating the project JDK multiple times to try and make the app more compatible lol
I might end up changing it back to the original zulu 21, but I need to figure out how to bundle the JDK through launch4j.
I also tried again to fix closing the bat/sh files when running is complete by adding a script within the files themselves. I'm pretty sure it works a lot better this time since it doesn't risk not generating any files due to closing when the EULA is detected. The base command remains the same within both file contents.
Added an option to turn on the server after setup is complete. As of right now, this feature is not available for forge since full forge setup is not supported due to it being wildly different from the other setups. As always, turning on the server is an OPTION, because this application wants to give the user as much control as possible over server setup without requiring them to interact with the bat/run files or any of the complex files involved in setting up a server.
Finally finished my first attempt at adding file closing to the bat/sh files that run initially to create the EULA and start the server. The program closes the run file once it detects the creation of the EULA (which might actually be an issue because it could prevent the creation of files that come after, I will have to test for this). This feature makes it a lot simpler for the user as they don't even have to worry about seeing the bat file lol
Added the client, version, and server/profile name inputs with heavy validation to ensure no weird inputs that cause errors can be given by the user. Profile/server folder name is specifically validated to ensure no names are given that cannot be used in the operating system folder names, including CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, COM0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, LPT0, and the symbols that cannot be used in file names either.
Restarted the project to switch from command arguments to an actual input system through the console as that is much easier for a typical user to deal with. Command arguments can get a little difficult, especially as more arguments are added to customize the server further. An actual user-friendly input system would make this a lot simpler for anyone to understand.
Added a version testing method to validate the inputted version as each client has different supported versions on the website being used to retrieve the JAR files. It sends a request to the URL with the inputted version and if an error code is returned, the version is considered invalid. The user is then asked to input a different version over and over until they select a valid one.
Added input validation to the client & version inputs in the console to ensure the user can't input crazy values or incorrect values that don't make sense for them in their specific case. Created a much better menu for the client choice to make it a lot easier for the user to understand.
Added a networking method for retrieving the server jar file from an online resource. Invalid server jars and incorrect inputs are also handled. The server jar takes the client and version as input (which are retrieved from the user).
A utility that allows users to easily install and configure a Minecraft java server on their computer, which they can then run and have people join.
Began the phone operating system.
- Added home screen app UI
- Bunka app icon is clickable and opens the app
- Bunka app has an open animation
- Time and day counter moved to phone
- Bunka app shows the bunker system sliders and other information from the bunker panel, but does not update yet
- Currently, P cycles between phone states
- Current phone states are: PutAway, TakenOut, ToFace
- Animation logic is set up for all of them
- ToFace phone state is the only one with an actual animation (placeholder) that unlocks the cursor and allows the player to click apps
- PutAway state re-locks the cursor
Added an actual NPC idle animation that plays when you interact with them within range. NPCs turn towards the player when interacted with (this was there before, but it was more makeshift; now it is coded a lot better). Implemented a naming system for NPCs which randomly picks an NPC name based on gender. Implemented an NPC role system that doesn't give actual buffs yet. The ESC key now closes the NPC menu like the other menus.
Moved the task assigning system over to the teaming button. Implemented a fully scalable talking system with dialogue sequences. Dialogue sequence system also works with the team button, allowing a sequence to begin when a task is assigned. Trade and track buttons are not functional currently. Added a close button and open/close animations for the menu.
Fixed project folder hierarchy, fixed a quick transfer error bug by setting the quick transfer inventories in the demo scene, updated the collision matrix to fix the flying bug when grabbing. Added an NPC interaction menu with buttons for teaming, talking, trading, and tracking.
Added strikables, which are very similar to interactables (with the same inspector variables as of now) but get triggered when the player attacks them. This was added for a task that will be added soon called LastMinuteRepairs, where the player has to hammer a certain object to gain the NPCs trust. Since it functions the same way as an interactable, it can require any specific item to be held when struck. In the attached video, the strikable requires a hammer to be held and you can see success printed in the console each time it is hit with the hammer.
Time wasn't tracking on the website until now. I did a lot in this time: attempted to fix an issue where the crosshair would change to grabbable when the player was sprinting because the raycast hit the player, which has a rigidbody. Added a door through a more versatile interactable script called OpenableInteractable, which allows various settings to be enabled, such as requiring the specified items only the first time, all the time, and remaining open by default. Added the hammer and key items and refined the equip, wind up, and wind down animations. These animations will be shown in the attached video. Also added a precaution to prevent the item from automatically going to max grab distance when picked up because this created issues when the item was brought near the ground.
Added support for itemstacks rather than single items for the doomsday dropoff task. Added idle animations to the tools that show up after holding them without attacking or unequipping for a certain duration. The attached video has a clip of one of the idle animations. Simplified the game a lot more; removed the bunker type option as now you have to choose the mountain bunker outside of the city. Redesigned NPC ideas. I will elaborate a lot more on these in later devlogs as this is still being decided.
Added a base task system to support all future tasks that are in line to be added. Added the first task: Doomsday Dropoff. In this task, the NPC (or whoever is assigning the task) requests the player to get a certain item, which has also been made customizable through the item data. Currently, they can only request one item type and one of that item. Created an NPC interactable to simulate the NPC task assigning system. Still thinking about if the alert box should remain a feature or not. I just attached a random video of this NPC failing to ragdoll. Thought it was kinda funny
I wasn't able to create a devlog because the time tracking wasn't working for a while (as a lot of you probably know). Here are some things I did in this time: Moved alert system to be visible again, fixed an error that came up when you spam switch items and attack, added an NPC interactable to get tasks, and added a cooldown system to attacking, which can be different for each tool, and implemented a wind up and wind down system for animations to make the timing of impact when attacking a lot better visually (as shown in the video).
Set a crosshair order, prioritizing grabbing, interacting, grabbables, then the default crosshair. Made grabbed item lose grab if an obstacle gets in the way. Then, I completely redesigned the crosshair designs (to the ones shown in the attached picture) and made the crosshair smaller but still visible. The hotbar now gets hidden after a system repair success.
Removed flying glitch that allowed players to use grabbed objects to infinitely fly. This was done by preventing the player from colliding with the object they are grabbing (as shown in the video). This fix was initially done by preventing jumping on objects that are grabbed, but turns out, there were still ways to fly, so I just removed collisions entirely instead. Changed grabbing to right click to avoid issues between attacking and grabbing. Fixed crowbar equip animation. The crowbar kept disappearing after the equip animation. Added crosshair variations to differentiate between interactables and grabbables (and when the player is actively grabbing something).
I finally got a proper working walk system that can adapt to slopes!!! As seen in the attached video, the ankles don't flip weirdly after taking a step either. This is likely what I'll be using for a while until I decide to torture myself again and improve it for no sensible reason 👍
I tried using the built in Unity foot IK and IK pass settings in the animator. I completely forgot about this feature, but it actually seems quite promising (other than the ankle destruction going on in this clip). This might be the system I end up using since it already looks a lot better than the others.
I got it looking a little bit better, but I think the main issue with this one is the NPC leans too far forward while the legs kinda lag behind. I just wanted to post a devlog to check in on my progress.
I tried to redesign the system AGAIN and ended up with the following video. Still looks very stuttery, like the feet teleport very unrealistically. I guess I'll continue trying different things to fix this problem, but procedural animations in this style seem to all have this same issue. Also, his legs are very spread out and don't really follow the given animation.
Completely redid the procedural walking system (again 👍). I just wasn't happy with the customizability and control I had over the settings. This one is more customizable, but I have to restart the process of finding the perfect settings. The video I'm attaching is my current progress at doing so. I will continue modifying settings to try and achieve a more realistic walk. But honestly, I might end up recoding it again to achieve a different look to the walking because it still looks quite similar to the previous system, which didn't appeal to me that much. I think the main issue here is the walking is wayyyy too fast and slowing it down just makes the animation look really weird.
Messed around a bit more with the procedural walk animation and got something I like slightly more. It's still terrible lol
Added a pretty basic procedural animation walk system after MANY tries. As shown in the video, it looks REALLY terrible right now, but there are a bunch of settings I need to mess around with to fix it up. I will be doing that in the next devlog, but for now the system does technically function. I was also thinking of creating a more ragdolly animation, which is something I have tested and something I might go back to later. This is mostly because the ragdolls would match the funny/humorous nature of this game.
Initially, the inventory quick transfer feature would only work the first time. That is now fixed. This was because the onContentsUpdated event was only being subscribed to in Initialize(), so after the inventory UI was disabled once, the event would never be resubscribed to. Grabbed items are now automatically dropped when they leave the grabbing range & when a menu is opened. Added days to the TimeManager & time HUD. Turned all the important scene objects into prefabs to allow for synced duplicated scenes for easier collaboration since GitHub makes it very difficult to work in one scene together. Crosshair now also gets hidden along with the hotbar when a menu is opened. I still have to consider what to do with grabbed items when the player tabs out as they remain grabbed even when the player lets go of the left mouse button. I also need to consider whether to allow grabbing items when the player is holding another item already.
Revamped the entire grabbing system to fix the rapid oscillations issue and random quick movements that would launch the player off the map. Now, the system has a grab offset feature where you can grab anywhere on the object and it maintains that offset rather than just grabbing the center/pivot of the object. Also fixed a build issue with the hotbar that was importing libraries not available when Unity builds.
Add grabbing system as a secondary option to actually picking up the item and storing it in the backpack/hotbar. You can now left click on any rigidbody object that is non-kinematic to grab it and throw it. This adds a whole extra level to the game for physics-based interactions, especially with NPCs in the future. I finally ended up using a spring damping approach for the grabbing system (to make the grabbed item follow the crosshair with a slight lag). I also added the hammer and key objects to the scene, and they all have idle (with an inspect animation), equip, and attack animations with the custom ranges and forces set.
Completely rewrote the physics item swing effect system, which is still in progress, but makes more sense to me now. The swinging has been renamed to attacking and interactions, as of now, will be done with the actual interaction key, rather than clicking on an interactable with the tool. Each item now has its own force values and attack ranges to add further customization. Moved item animations to the body object (actual mesh) rather than the parent object that is centered at the holding point. This makes it a lot easier to animate the items since the pivot is actually on the item. Only issue is that now the offset is part of the transform, making it easier to lose the default offset when animating. Added post processing too, which will be refined later.
Added intense input validation to the interactable item requirements to prevent developers from enabling a requirement without specifying a valid item or count without noticing. Cleaned up a lot more unused variables and some renaming issues in both comments and general variable naming.
Renamed HeldItemSway script to ItemHolder to make it more generic and fit its function better. Added an idle crowbar animation to prevent using the any state animator node as it caused delays in the animation start. Now these delays are fixed, and the animations feel more seamless. Added item filters to all interactables. The first one allows a required item to be held in the player's hand (selected in the hotbar) to interact with the interactable, with an option to consume the item after interaction. The other allows a list of items to be set that should exist in the backpack as a whole, with the same option to consume the items after interaction. Both of these filters can be used at the same time too. They are designed with developer friendliness in mind in the Unity inspector to only show the required variables if the filters are enabled (using custom editor classes). Still thinking about if the alert box should remain a feature or not.
Found a way to make the hotbar slots in the backpack more clear that it is actually the hotbar (slot numbering that follows hotbar keybinds on each slot, Hotbar header). Also added an environmental effect when the crowbar is swung (physics response), which will likely be updated later to be more accurate. But right now, there is a basic crowbar swing animation which will also get improved later; the current one was used for testing purposes.
Refactored more variable names and custom editor functions to support the new system that allows all items to be held, not just tools. Fixed a bug where swaying continues even when player is standing still in the menu. This issue was partially (mostly) fixed by combining the two files together in a previous devlog, but some issues still remained which are now fixed after a lot of debugging.
Fixed some Unity build issues that used editor packages that Unity can't build with. Fixed some Unity inspector custom editor console errors to clean up console to make debugging easier. Added a hover color change to primary backpack close button. This coding session was mainly focused on cleaning up the project, as will future sessions too (since the project was getting quite messy, making the development process more tedious).
Fixed inventory quick transfer system by moving the scripts to the UI script to allow different UIs of the same inventory to have different quick transfer settings. This is particularly useful for the backpack inventories since they have many UIs, each with different needs (e.g. the primary backpack inventory doesn't require quick transfer capabilities since it is one inventory; the repair inventory, on the other hand, contains a backpack inventory and a repair inventory, which allows it to take advantage of quick transfer).
Added a shift clicking system similar to Minecraft that allows quick transfers from one inventory to another. This, once again, required a recode of some of the parts of the inventory system (which took a huge amount of attempts to get right). However, I'm happy with each and every one of these recodes since it makes the inventory more modular and scalable each time. Now, the inventory quick transfer system is quite scalable, but there is still more opportunity for scalability, which I will likely implement in my next devlog.
Fixed bug that hides hotbar when the actual close button is used on the primary backpack. Fixed a bug that continuously played the re-equip animation on the crowbar every time an item was added to the backpack. Fixed a bug that continuously played the re-equip animation on the crowbar when it was dragged to an invalid slot and sent back to the source slot. These bug fixes required a huge recode of the inventory and inventory UI system as well as code comments/documentation.
Added separate coloring to the hotbar slots in the backpack UI to make it clearer to the player. This was added in a scalable way to ensure it didn't interfere in the modular programming styles used in the many other aspects of the game. Also refactored lots of code and comments to account for the change from only allowing tools to be held to allowing all items to be held.
Partially combined the HeldToolSway script with the PlayerController script since they share a couple common input variables and it just makes sense when looking at class hierarchy. Now, all the sway settings are centered in the PlayerController, which makes more sense. Combined the hotbar and backpack inventories together to allow players to hold any item rather than just tools. This required a very large recode of the inventory system & logic as the hotbar is a huge exception to the general Inventory class that existed previously (since it uses the Backpack inventory but also technically has its own inventory). Now, the hotbar and backpack slots are synced together.
Added hotbar fading when the player opens another menu because, for some menus, the hotbar gets covered, cluttering the player HUD. Also fixed an issue where the item info widget wouldn't disappear when the player stopped hovering over the item. Currently experimenting with different ways to combine the backpack and hotbar such that the player can hold all types of items. Right now, the hotbar is whitelisted only to tool item types, while the backpack is blacklisted to them. I am thinking about implementing it the way Minecraft does it where the inventory shows the hotbar as a separate section.
Moved the show item info widget on hover setting from the slot to the inventory UI itself because I want all the main settings to be located on the inventory for ease of use by any developer who works on this game. I added a little text box that shows up above the hotbar that shows the name of the current tool being held. After an embarrassingly long debugging session, I finally fixed an issue that completely deleted items that were dragged back into the slot they came from. In typical game dev fashion, it was a one line fix 😭
Refactored a ton of code & documentation (comments) to clean up the codebase. Mostly spent this time just reviewing old code and fixing a couple of consistency issues such as inaccuracies in player alerts and comments referencing the wrong object. Had to temporarily disable the alert that is sent when the player tries to pick up an item when their backpack is already full because of how picked up items are dealt with (how they are sent to the player's inventories). Not much actual gameplay has changed this time.
Forgot to mention this in the previous devlog, but I also added a crowbar equip animation which can be seen in the previous devlog's linked video.
Added an idle breathing tool bob that, as the name suggests, represents how the tool would move if a human was holding it while standing (it wouldn't stay completely still, it would bob up and down following a human's breathing). I also made the tool follow the headbob of the player when they move to add realism. After a lot of debugging, I also added an item hover information widget that shows everything you need to know about an item when it is hovered over in certain inventories. Of course, I had to make this highly customizable, so I added settings to determine which inventories should support this hover widget. However, this wasn't the difficult part; constraining the widget inside the screen took a huge amount of time to figure out (like when the player hovers on an item near the corner of the screen, the widget gets cut off by the edges of the screen, creating a visual bug). However, I finally figured it out lol
Added an item sway system with a mouse deadzone to prevent small jitters (which are really annoying to look at when actually playing the game). I'm not really sure if this is the final version I am going to use in the game, but it is a good start.
Implemented a tool holding system linked to the hotbar that is highly scalable. More specifically, each item's grip location can be customized and dynamically used with ease. Planning on adding item sway next to add realism to the items.
Added an inventory filtration system that allows the developer to filter by both specific items and item types. They can also select from an enum to indicate whether the filter is a whitelist or blacklist. This makes it a lot easier to implement bunker repair systems and deal with filtered slots. I also began the hotbar system for holding tools and other items to come in the future. This was very simple to implement because the parent Inventory class was already very versatile/scalable. Added a crossbar model imported from Blender as the first tool (used for testing purposes but will also likely be part of the released game).
The world is on the verge of complete collapse. The nuclear apocalypse is here, and doomsday has been spelled out for the city of Los Montreales. Maintain your bunker, scavenge for resources, and get into strange situations to befriend and save the people of the city before Hour Zero. Doomsdays and dance parties!
This was widely regarded as a great move by everyone.