1,852 Commits over 792 Days - 0.10cph!
- Create a balance tool for livestock economy: spawns herds in free range, compound, small pen, barn, solo 2x2, letting them eat/reproduce at x2 speed for one hour, it gives us information to balance how much scrap should each setup generate
- Fix moms spawning calves behind walls when giving birth, allowed them to escape the pen!
- Create sheep population assets
Merge from new_navmesh_fixes (for the doors)
Add tests for domestication / grudge, fix TC faulty replication because it's a prop
Livestock capture/domestication first pass:
- you gain trust by just hanging around cows, enough trust and you can lead them where you want, even more trust and they come sleep near your TC unprompted
- with enough trust bulls become neutral to you instead of trying to punch you, maxed out trust makes bulls protect you from threats
- not mandatory, you can still coerce a cow into your base by hitting then chasing it in the right direction, or luring a bull that's chasing you, then only build trust once they are captive
- some wild cows are also naive and just follow players for no reason, you can kidnap naive calves and capture their mom for free
- bull army soon possible
- Mothers now defend calves if they are hurt, and don't forget too fast what you did
- Better courtship between bull and cows, more legible to a player (ai commands: addignoreplayer, spawn bull, spawn cow, forcebreed)
- Fix client crash when calf dies because of NRE, it seems every ragdoll other than cow was not setup properly, maybe because of the new ragdoll copy tool? => added a CI test to validate ragdoll assets so that it doesn't happen again
Fix broken livestock tests that always return red because behaviour changed / were non-deterministic and would fail sometimes
FIx no navmesh in underwater labs and parts of underground tunnel
- Prevent child state from re-entering itself from parent transition (common cause of bugs)
- Fix croc never entering onNavmesh state
- Fix pendingStates not working when logIssues is disabled
- Fix livestock fixtures being broken when using new navmesh
- Fix ai.showstate text being on a single line
- Fix kicking not working
- Hook new cow stomp, sheep turns, happy canter
- Calves now do the opposite of old cows, they always move faster (it helps them keep up with their mom despite their smol legs)
- Cows now remember if you attacked them, and don't just get chill towards you instantly after fleeing
- Cows can kick if you run after them too close while they flee
- Baby now spawns laying down, and slowly gets up while the mom looks at it
- Fix bull turning its back to you when you approach it and it's defending a cow, it should just stand its ground
- Fix all cows fleeing when you shoot near them, but the bull keeping grazing as if nothing happened, now he should attack
- Fix cows stopping flee despite the threat still being close
- Fix graze share counting the walk so fullness kept falling
- put the old drink rate back
- let starving animals roam for food
- guard ResetPath on unplaced agents
- Move CoatIndex after the other autosaved syncvars so older livestock saves read the right bytes
- Skip a parent which has a coat the calf prefab has no material for when inheriting, else a stale number wtill be handed down
- Resend the newborn right after its coat is inherited else it change scolour after appearing
- Forget the painted coat in OnDisable rather than OnEnable, pooling runs that after the next occupant has already painted
- Apply the corpse coat from ClientInit alone and drop the syncvar callback that fired before the ragdoll existed
- Compare coat names per index across stages and ragdolls, not just the count
- Move SaveAndRestart in RustTestFixture and SpawnOnNavmesh in AITestFixture and use them from the livestock fixtures
- Reword the InitCoat and save test comments, the isLoadingSave guard only saves a roll the load overwrites anyway
Fix cows only grazing and never resting / idling, or roaming too much
Hook up livestock coats, not yet gene driven, tested networking, saving, corpses, babies
Cherry pick 163070: Fix gen2 AI never updating its position in the brain grid, causing some brain based spatial query to be stale
Add transparent layer to new navmesh bake, unity navmesh parity, else it ignores fences and npcs go through
Reduce minRegionSizeMeters for navmesh to not nuke small regions, fixing "no navmesh on bandit watch towers", need a better fix in the future
Fix scientists going through unopenable doors (new navmesh, the puzzle doors)
Fix gen2 AI never updating its position in the brain grid, causing some brain based spatial query to be stale
- Old cows will go to sleep and die peacefully, instead of player the combat death anim when dying of old age
- Cows get slower as they age, they also stay closer to home
- Cows can lie down just to chill, old cows chill more than normal
- When night falls, cows regroup and sleep together, some cows are early risers and some like to wake up late
- Hook sheep and lamb corpses
- Hook the death anims with forward momentum that are played when animals are killed while they are running
- Fix ai.fillHungerlivestock doing the opposite of what it says
- Fix cows never getting hungry or thirsty after feeding or drinking once, or getting full from one single grazing
- Fix cows being unable to find food after grazing once, because they search radius was smaller than the "overgrazed" marking
- Make cows roam less they seemed more like a pack of wolf than chilling cows
- Add a cooldown to the livestock flee trigger so one hit cannot re-fire it through randomIdle or chargeRun
- Back off strayed-from-mother and strayed-from-herd for 15 s after a failed walk back
- Require a reachable trough or barrel before it wins over grass or shore
- Add RegroupSearchRadius so cows can find a herd further than the stray distance
- Only send a staggered bull into flee when the hold-ground rule says he would run
- Sample two rings and take the nearest spot in the grass and water searches
- Record herd distress only when there is an attacker, and spend it on the first charge
- Back off the mate search when nobody is found or the female is unreachable
- Throttle the shore search after a miss, mirroring the grass search
- Collapse graze and drink into shared consume transition and state classes
- Share one speed ramp helper across follow, consume, mating and return walks
- Add IsHerdMate, IsDependent and a centred FindNearestDependent, and use them everywhere
- Wrap the remaining client-compiled FSM members in #if SERVER
Fix cows not fleeing sometimes, add tests for bull and cows behaviour
Fix super fast acceleration on cows and sheep
Bull can kick and charge, protects the herd and moves between you and them. Can play toreador with the bull like with the croc. Herd sticks together when in danger instead of scattering. Fix cows decelerating instantly.
Generate and connect animation montages, add hurt and death behaviours + anims
Delete duplicates and replace the original animals
Fix boar chasing too fast, fix animals not running away properly when player on foundation
Fix animals clipping with the player
Second part missing from the initial commit
First step to port old animals to new AI system (no behaviour change, it just makes them easier to maintain, we'll do proper behaviour rework in the future)
Improve navmesh doors perf, doors now remember which polys are theirs instead of searching the
navmesh on every open/close
Standardize navmesh door benchmark to follow same conventions as agent path following benchmark
Fix siege towers doors, better behaviour for NPCs when door is slammed on them
Rewrite some navmesh door bug repro test that passed even without its fix
Improve navmesh doors perf
Allow closing and opening door to be taken into account by the navmesh, but without a full rebuild
Fix navmesh generated on divesites, not generated in some doorways, some monument rooms not having navmesh, and scientist corpse colliders on wrong layer
Fix navmesh building on dive sites
Fix navmesh not being present in some rooms behind doors even if scientists can open them (potentially missile sillo and ghostship), the room navmesh a disconnected island because the door was baked into the navmesh, blocking the doorwash, and we prune disconnected navmesh regions
Fix scientist2 corpse not being on the ragdoll layer and thus blocking movement and projectiles