Been a long while since an update has hit the public branch.
KoboldKare has been a project that has been in constant turmoil as I learn more and more about game development.
I realized at some point that I was using my technical ability as a crutch to avoid doing art.
Instead of just spending an hour or two making some fun clouds, I'd overengineer the problem into oblivion trying to make "technically correct" clouds via raytracing and tearing into the render pipeline to get what I want.
Many of the changes for this build is me replacing awful, overengineered, and slow solutions with some basic VFX and game-design.
I'd say I've gotten KoboldKare 90% to where my vision is. I still have lots to do, but now I actually can see the finish line. I plan to get KoboldKare to 1.0 within 5 weeks from this post.
That's enough of me rambling about my thoughts, HERES THE PATCH NOTES:
Penetration tech refactor. This change is large enough that I wrote all of the details on the official KoboldKare website as a technical article. You can check it out here. In general, I'm no longer flubbing the math on penetrations, and the shaders I use are more optimized.
Ray-traced clouds were replaced with standard VFX work. Drastically reducing rendering cost.
Fluid visuals overhaul, replaced the expensive and touchy fluid simulation with some standard VFX.
Eclipse, and the concept of night has been completely eliminated. No more worrying about nighttime, or being outside. With the introduction of other mechanics, it was largely unnecessary to keep.
Plants simply grow after 30 seconds of being watered, energy can be restored on kobolds by resting on the bed, quests are received as soon as they arrive, stores restocks over time. Etc!
Three new kobolds stats: Energy, Belly capacity, and Metabolization capacity.
Kobolds now have energy bars, they consume energy to do the vast majority of their tasks. Tuck them in bed to get it back! Soon there will be ways to increase or regenerate energy...
Belly capacity is limited, don't overfill them. Use the toilet to empty their belly if they're too full. Soon there will be ways to increase this limitation.
Metabolization capacity is limited, kobolds can only metabolize so much fluid before they max out! There is currently no way to increase this limitation, except for breeding of course.
Introduction of Kobold traits and breeding! Kobolds now track a set of traits that are passed onto their offspring, this includes traits that have modified via juices! Offspring also spawn with an empty metabolization bar-- meaning you can repeat the modifications to begin breeds of kobolds with specific traits! You can guess the relations by just looking at the colors.
The ability for players to change themselves in game has been drastically limited, you can no longer equip dildos, you cannot customize yourself real-time via the options menu, and you are subject to the same metabolization limitations as any other kobolds. However...
Added a consciousness swapping machine, for the low low price of losing your original vessel, you can embody one of the Kobolds on the farm that suits you better.
Buckets and several other containers are now drinkable. Simply use them to drink some of their contents.
New item and reagent: Mushroom. It poisons your kobolds! Shrinking all their stats and making them pale. Careful with this one!
New machines are found on the farm. The Grinder, Milking Table, Breeding Mounts, Kobold Press, Consciousness Swapper, and Egg Laying machines are all usables that cost various resources to use.
All animation stations are now usable just like Machines are, the bottoming kobold will always go first.
Kobold AI will now "use" things you set them near, careful with setting them near buckets of expensive fluids!
Networking is now ownership based, when a client "owns" an object, they are fully responsible for relaying its state to other players. This means when you own an object, there will be zero lag for interacting with it.
Included a security feature where jumping will force ownership back to yourself, so you can prevent other players from grabbing or interacting with you.
Ragdolls are now fully networked, tossing players, pinning them, and doing various things with them are now sent through the network as a "playback", and everyone will see the same thing!
Ragdoll refactor, all ragdolls use ConfigurableJoints instead of CharacterJoints in order to simulate muscle tension. This leads to ragdolls crumpling less and looking more natural.
Precision grabber refactor!
This has taken a long time to figure out. Ragdolls in Unity are special and cannot actually be affected by angular velocity sets like other Rigidbodies. I learned I must use constraints instead!
Now always ragdolls kobolds, respects player colors, can properly rotate ragdoll limbs, and is visible to all players holding shift.
Making kobolds and objects pose exactly the way you want has never been easier. You can see above that a green player has posed this kobold to sit near the table and wave.
You can also now unpin individual pins by aiming at them and tapping Q, holding Q will unpin all active pins.
Farm plot is now a discrete grid of plantable terrain. Unlock new grid tiles with explosives.
Holding the rotate key (R by default) now takes direct control of the hips. This even works on animation stations, but not during ragdoll.
Mousewheel now gives analogue control of crouch height, use this in combination with hip control to very precisely do things with your lower body.
You now recieve mail, they come as objectives from the mysterious Dragon Patron. The objectives are currently a TODO, but you can complete them and earn stars which unlock parts of the city!
New dick stubbiness customization. Dicks can be stubby and thick, or long and thin, by up to 50% in either direction!
Body proportions have been temporarily disabled as I learn how to integrate them with inheritable traits in a fun way.
Jiggle physics refactor, all jiggle physics in the game has been replaced by a much more physically accurate and stable system.
Money is now a consumable physics item. Money is now also tracked per-kobold, collaborate with your fellow kobolds!
Terrain is now static and no longer generated on the fly. This leads to much faster load times.
Since there's no more dynamic day cycle, reflection probes are now also static. This should lead to less hitching while playing the game.
Decals now use a dilation technique to hide seams. It still isn't perfect, but it no longer relies on Conservative Rasterization which simply wasn't supported on lots of platforms, and looked really bad in other situations.
Alternative graphics APIs have been disabled. DirectX, Metal, and Vulkan are now the only supported graphics APIs. This was too difficult to maintain as a solo developer, and may come back after the game is more complete.
The Overall Graphics option has been reduced to "High", and "Low", this is to reduce the number of variants needed to compile the game. It still takes a ridiculous amount of time to compile, but I managed to get it down to around 20 minutes.
I probably missed a ton of changes. Oh well!
There's still a lot of greyboxing, temporary effects, and barely realized mechanics. Though I've played it with a few friends and its an absolute blast! I'm hoping to clean it up over the course of the next few weeks.
Got an update to share, it has broken lots of things. I'll try to list changes the best I can below:
With the new build system, game versions are now displayed on the main menu as the build number and git commit hash. This might be changed to be more digestible later, but for now it's a very easy way for users to check which version of the game they got!
Plants get wet!
Many new contracts to buy at the construction store.
Day-night cycle has been completely replaced with an eclipse! This has a number of benefits involving compile times (from 3 days -> a few hours) and shader size. Though will probably take some time to fully integrate.
Resource folder has been completely replaced, this helps with loading times and memory usage.
Flynn the Flamingo is back in the casino. Though they don't have much to say about it right now.
Pachinko has been added to the Casino, rewards are currently temporary.
Casino now has a new music track composed by 1029Chris.
Waterfalls have been added to the game, to help direct players to where water can be found!
New purchasable alarm clock that extends how long days are.
Simplified networking, most objects have much simpler networking routines which should lead to more consistent views on all clients. There's still a few more kinks to work out, but it's much more stable and less prone to getting you kicked from spammed RPC calls.
Saving and loading is back, it's probably still very broken, but it piggybacks on the new networking routines which should lead to both becoming more stable over time as bugs are fixed.
Caterer who comes to take your baked goods! (If only we had any!!)
Fixed bug where the house door falling through the map would delete the whole house.
Complete fluids overhaul (again, sorry!!). This time they're a HUGE MESS and I love it. I'm getting much closer to what I imagined fluids would be like in KoboldKare. There's still more bugs with it, though it should be pretty fun still.
A UI polish pass, it needs more work, but things should be looking a bit more consistent.
The game no longer closes immediately when you hit QUIT in-game, it now brings you to the main menu.
This took a long longer than I expected, though this is the first build that has zero paid assets in it!
Despite the majority of the work being spent ripping out paid assets, there's still quite a few changes that I'd love to share:
Steam Audio: Instead of messing with my home-grown reverb system, KoboldKare now uses Steam Audio for some awesome realtime audio reflections and reverb. This does take a decent amount of CPU, and can be easily disabled in the Audio options menu.
Raymarched goop: All fluids now use an analytical raymarching algorithm to really make things goopy and sloppy, it still needs an optimization pass and can be disabled by setting Goop Quality to 0 under the Graphics Options.
Custom Terrain system: KoboldKare uses a custom brush-based terrain that fully supports very dense grass and even decals! Paint the whole world and make a huge mess!
New stores: A hardware store, a gardening store, and a construction building enter the city. All with functioning stock to buy!
Item rework: No more "egg boxes", you work straight with eggs now. Flasks have been replaced by more thematically appropriate gardening tools, and there's a dedicated item for milking kobolds now. New models for all seeds!
You can change an NPC kobold's inventory by simply throwing equipment at them!
Penetration refactor: This is definitely not the last rework, but now penetrators can enter any hole (oral), go all-the-way-through, has proper oviposition, tentacles, and is generally faster and more stable. Definitely makes everything rubbery and stretchy though, hope yall like it!
Multiplayer now has text chat! Press enter to yip and yap with other players.
Better controller support: Menus are now traversable and browsable with just a gamepad, and keybinding hints in-game switch to gamepad equivalents to help with learning the controls.
Added buckets, they function as a lower-level watering can, but also are great for storing lots of fluids.
Physics-based animations are no longer flimsy, because ragdoll limbs actually have rotation forces now. Definitely needs a bit more dialing in though.
Decals no longer create seams on models if your graphics card supports Conservative Rasterization.
Added an onahole to ZanyZtuff, you can finally jerk other kobolds off, or share it with them!
Player Preference rework: There was a series of bugs that was caused by the old json player preference system. All user options will be reset and stored in the registry now for simplicity. On the bright side options are super clean and easy to work with as a developer!
Jiggle physics fixes, they work at any framerate, and no longer flip out when trying to "catch up" during hitches.
Temporarily disabled kobold imposters, try not to make too many meanwhile please!!
New map: after testing the large scale map, I've come to the conclusion that it wasn't working out! It scoped the project up majorly without much of an upside. The map is now smaller and easier to work with, it's lacking polish currently but as the project goes on the areas will be small but packed with tons of detail and purpose.
Lighting adjustments, more ambient light, better use of ACES, and a new Brightness graphics slider for those who have different kinds of monitors.
With all that out of the way, I've had some realizations on where I want KoboldKare to go. For the next couple months I'm going to focus on two things: Scoping down and simplifying. Systems are getting very complex, bugs are really difficult to fix, and systems are noodly and far-reaching. The game being open-source is pointless if the systems are impossible to penetrate. (hah)
I'm confident that I can get KoboldKare to be a clean, simple, and fun game-- though for now you'll have to deal with the current buggy mess! Sorry!!
Thanks to the some of the many hands that work on KoboldKare: Zarniwoop 1029Chris Gruff Kious Dr. 0range Solphyx Firgof Jack Black Cat Studios And Kasiir for their amazing screenshots in this update.
This is a really tiny patch log, though I wanted to get it out of the way as the next month comes around.
Fixed dicks from cumming out their own balls (whoops!)
I smartened up the serialization of photon prefabs, and accidentally broke plants from spawning fruit. This has been fixed!
Some equipment stacks now (tail bags, bracelets, and tail collars). This might be temporary as I figure out how the equipment UI is going to work.
Saving is finally back! It's probably a bit buggy still, though it's reusing photon's cached events. If saving is broken, then so is joining a multiplayer game! This is a big step in the game, as the saving system is entirely generic. I shouldn't have to update/touch it again and it should work up until the game is complete (as all the work goes into making sure photon can fast-forward the game's state for multiplayer).
You can start a multiplayer game from a save. Though it might act a bit funny if the save is from a multiplayer game. Connecting players won't know to repossess their kobolds and they'll get copied as they join.
Big audio rework, uses physmaterial to lookup sounds to play. There's hard/soft/footstep/scrape sound databases that depend on which object hits what. There's around 40 new sound effects, smash stuff together, step on stuff, ragdoll! There's going to be some tweaks on it to get it dialed in. Sex animations play far too many ragdoll sounds at the moment.
Finally an update is here! This update focused on equipment systems, delivering content more deliberately, and code cleanup/refactoring in preparation for open-source.
Here's the change log:
Terrain and grass was vastly optimized, terrain details no longer render in reflection probes or Mirrors. This was an improvement of 30ms during reflection probe updates. And slight performance increase on mirrors. Terrain will have some mismatching layers while we clean up some of these broad optimizations.
Jigglebones and softbody physics now run on a partial fixed timestep, should keep them looking consistent at low framerates.
Graphics memory footprint reduced by around 400mb by deleting unnecessary shaders.
Decal system rework and optimization, I had an epiphany when I realized GPU's automatically solve memory fragmentation problems. Don't optimize when you don't have to! Now it's stupid simple and stupid fast to decal basically everything in the game. (Except terrain, terrain is impossible to decal due to how hardcoded they are into Unity...)
Added a seed extractor! It barely works, but it serves its purpose well enough as I focus on some other aspects.
Added seeds and plant types for every type of fruit, most of them are stand-ins, though they work! I bet you can figure out where you get the seeds.
Items now have big indicators that help you find them in grass or in trees, finding fruit has never been easier!
Reduced the scale of lots of the farm so it's a little more sane, it's probably going to take a few more passes to get the scale of things dialed in.
Physics animations now use derivatives of the animation curves to figure out their velocities. They're much more sharply animated now-- though the hands still flop around. This'll probably be tweaked for quite a bit more until I get happy with it.
Fixed GenericInflatables from being unable to translate or rotate jiggleboned bodies (balls now properly drop when they get bigger).
This is a big one: Kobolds can now have equipment, and they have equipment slots. All dildos are now equippable dicks.
Customization options from the main menu has been pared down, customization is now primarily a gameplay and loot feature. If options have been removed that you wanted, you'll have to find the corresponding customization feature within gameplay.
4 new kobold dildos, all being equipment that can just be plopped on by any Kobold that tries to "use" them.
Construction hardhat, and nipple piercings as equipment. Currently cosmetic, though it opens the path to lots of other kinds of cosmetic customization!
All equipment can be found as loot by exploring the world for chests. Keep an eye out for them!
Penetrators' shader has been upgraded to do some bezier curve adjustments to make them look malleable, and to correct for misalignment. This also allowed for physics constraints to be loosened, it looks and feels pretty good. Though probably will be iterated on continually as I learn more about it.
Networking refactor: It's only half way done, but I realized I probably shouldn't be over-optimizing things by writing custom events and managing the cache myself. Most of everything has been converted back into basic Pun observables and RPC calls. Player configuration is now done through Pun's PlayerCustomProperties feature. The few things that haven't been refactored are still pretty unstable. (Animation stations, and attachables like flasks). Over the next couple days it should get better and better as I get more familiar.
And that's it for now! Something to keep note of is that generated kobolds also have the pared down generation, and they have no way to equip different equipment currently. This will be fixed very soon, but for now you'll have to live with just being able to customize your playable kobold.
Unity upgrade from the 2019 LTS to the 2020 LTS! This comes with a variety of benefits.
Screen-space Ambient Occlusion is back, enabled by default in the Graphics Settings.
Dynamic Bones asset has been replaced completely. This new in-house jiggle bone system has trouble with completely inverting bones sometimes. Though allows for squash and stretch!
VertExmotion asset has been replaced completely. The new in-house softbody physics is simpler and more efficient.
DoozyUI asset has been completely replaced, this includes icons, button click sounds, animations, and other things. UI is much more static now, though still works!
Amplify Imposters was completely replaced by simple hand-made imposters. They have much less fidelity, but they can be open-sourced!
Map has been replaced with another work in progress by Firgof! This one uses Unity's built-in terrain which we're still getting used to. Things might be unoptimized for a while as we figure things out. Make sure your computer meets the recommended specs on the store page!
Player movement rework, now it's proper source b-hopping! Channel your phoon to go fast. A speedometer was included to help me debug it, and it'll stick around for a short time.
Complete ragdoll physics rework. I spent a lot of time flipping random switches on the black-box that is Unity's physics system. I learned a good number of things, and ragdoll physics have been improved immeasurably!
With the new improved ragdoll physics, animations are now physics driven! There's a bit of tweaking left to do, but in general any physics mishaps can be fixed by (or caused by) a proactive player!
Players with dicks now only get marginal slowdown from bumping into their own.
Feet now IK to the ground, it can look really goofy sometimes, but in general grounds kobold in the world.
Shadows no longer have seams in them, at the cost of having a bit more shadow acne. This was important with the number of structures that were affected by the shadow normal bias.
Dicks have staged flaccidity now, going from packed -> floppy -> erect. All done with generic monobehaviours. New dicks can have much more complex configurations!
Flared Equine was replaced with one done by the lovely uniform_vixen on Twitter.
I know I say this every other patch, but penetration physics were reworked yet again. Re-thought from the ground up, it includes fun stuff like solving things in an orbit, and does some cheating to purposefully stabilize most configurations. (This also had to be done to support non-centered penetrative shapes.)
Some VFX cleanup: splashes, goop, strands, and fluids were all touched up on.
Optimized a number of scripts, realized a lot of scripts that don't need to run very often should NOT run on FixedUpdate-- this leads to vicious cycles of trying to catch up on lost time by over-running expensive code.
Added VSync, and target frame rate options under Graphics.
Freecam now hides the UI.
We're still not quite at being able to open-source the game, but we're certainly a lot closer!
Here's the patch notes for all the changes in February:
Kobolds can face directions during an animation, it's really bad for NPCs but players can nod and look places while playing animations.
Fixed a large number of memory leaks. (Derivatives no longer uses Linq, strands allocate all memory needed up front, reusing physics collisions, no longer pass array copies for grabs, adjusted how components are searched for usables.)
NPC kobolds no longer have hover-hands, hover hands are still networked for players.
Complete reworking of inflatable systems, every kobold body part is driven from internal reagent containers.
Dicks use this same inflatable system to get hard.
Dicks actually source their cum from balls now (they cheat a tiny bit to at least get something out each time they pulse).
Balls can get bigger based on how much pineapple was consumed.
Balls and boobs both regenerate their reagents each night.
More network syncing. (fruit no longer gets stuck, all use events are cached and played back properly on first join.)
Added the new pawnshop, it's a full underground area with some stuff to buy! It has yet to have a progression system.
Debris was added to the farm plot, gotta clear it in order to make room for new plants!
Really big bombs can be purchased from the pawnshop.
Some networking fixes so certain reagent combos no longer cause infinite explosions.
There is now a 15% chance for it to rain each day.
Added a low quality cloud option (just some 2d clouds) so that they can thicken when it rains.
Ragdolls are actually synced now, this can cause them to slide around a bit but in general they're synced.
Finally actually included the ErrorScene, a blank scene that loads when you get disconnected or when you try to join/create a multiplayer game from an offline mode.
More props and map geometry is possible to cover in decals now. Paint the world!
Kobolds can now spawn with hemipenes.
The script that handles body proportions was optimized! Spawning 30 kobolds no longer freezes the game for 40+ seconds.
Dildos can grow by spraying them with eggplant juice or growth reagent.
Dialogue with NPCs has been disabled temporarily as it gets reworked.
Here's the patchnotes for all the changes in January:
Got clouds working again, they only enable if you're using DirectX, Metal, or Vulkan. Since OpenGL seems to have a race condition on the rendering causing some tearing.
Wrote a custom constraint for the precision grabber so that it doesn't mess up as much. Now things are less physically accurate, but things actually move and rotate consistently now.
Animations! A first pass of animations were added that can be initiated by pressing Use on Kobolds near a valid location. There's still lots of problems with it determining which kobold fits which animation best (or if they fit whatsoever), but in general it works and is really fun if you don't mind kobolds doing strange things.
Penetrator physics were adjusted to work with the animation system better. Penetratees now cheat to just be in the "right" spot. Makes characters look really gooey and flexible, but I think it's worth it to keep penetrations looking valid each frame.
Completely threw Unity's Animation Rigging package in the garbage. It didn't scale with character's limbs and was generally very expensive to turn on and off. Replaced it with a from-scratch IK system that knows how to deal with characters of random proportions and sizes. This is only used during Animations, and probably still needs a bit of tweaking.
Big optimization pass, after seeing a user with a KoboldKare executable needing 13 GB of memory; I spent a long time hunting down and squashing unnecessary memory allocations. This not only makes KoboldKare take less memory to run, but also prevents the Garbage Collector from kicking in as often. Game is much smoother and faster now! In general the game went from allocating 10kb PER FRAME to only allocating 40 bytes or so each frame. Slight framerate improvement too (less GC allocations means less ms spent on allocating).
Goopy strands were optimized, and in the process I found out they were deleting themselves too early, they now stretch until they snap, then properly fade out after snapping before self-destructing.
Kobolds now spawn with a random amount of fat.
Player kobolds can now adjust their ball size and chubbiness within the multiplayer options.
Finally, I've modularized how inflatable kobold parts work-- and made them entirely dependant on reagent containers. This comes with a variety of benefits:
Kobold's now have more containers: Belly, breasts, balls, subcutaneous, and penetrators.
Each container has a set of listeners that drive different aspects of the Kobold. For example a Kobold getting hard would require them to pump fluid into it. The listener will see this and drive the proper blendshapes and activate the correct monobehaviors with a slick animation curve. A Kobold digesting ice cream might turn it into fat and store it in the subcutaneous container, a listener will see the fat and drive some fattening blendshapes and adjust softbody physics.
These inflation listeners are unhooked from the metabolization timestep, so they can react instantly to changes that the player makes. This means spraying water at a kobold would instantly have an effect on their belly, rather than waiting the 1-2 seconds for the metabolization tick.
Kobolds are now just a set of penetrators, penetratees, and reagent containers grouped into categories. This can lead to kobolds with multiple sets of penetrators, unique reactions to certain chems, and opens the door to make it easy to add all sorts of other kinds of creatures.
There's a few things that are totally broken while I fix up interactions to work with these new modular systems. Just try to keep flasks away from breasts while I try to fix it over the next couple days!