

Small hotfix for a renamed method.
PlayerLauncher erroring out due to PlayerControllerB.DropAllHeldItemsAndSync() being renamed to PlayerControllerB.DropAllHeldItemsAndSyncNonexact().PlayerSensor.Updated for v80!
Constant ScreenShakeType to ShakeEffect.HazardReplacer use the new IndoorMapHazard type.SpecificDoorway patches for now (have not tested it alongside the new DunGen version).A couple small fixes before updating game version.
SpecificDoorway, similar to the ones that can be set for a Tile.
Doorway) tags a SpecificDoorway should or should not be able to connect to.PlayerAttachable when called from an item, due to the server not having ownership of it.Added a couple niche scripts, reworked and overhauled various components, fixed several issues.
RendererGroup, for components that inherit from Renderer.
Renderer's shadows, as well as changing their shadow casting mode.PlayerAttachableGroup, for components that inherit from PlayerAttachable.
ComponentGroup.ConnectedRope to disable itself when not being looked at.PlayerTracker to tilt in relation to the player's camera, if set to rotate with the player.onHiveSpawned callback to HiveSpawner, for when the hive itself is spawned and fully synced with clients.ShotgunSensor and SpraySensor to scale angle tolerance required to trigger the sensor depending on distance away from it.ApparatusEvent for when emergency lights are turned on and off, after FacilityMeltdown begins its meltdown sequence.PlayerAttachable:
attachDisabled field with a function that enables/disables attaching, so it'll actually show up in event callbacks.attachDisabled.triggerOnce field simply disable attaching, so it can be reenabled if so desired.AttachPlayerLocal(), while attaching locally.MovementSensor and its inheriting scripts:
MovementSensor trigger immediately as the action is about to be performed, instead of a frame or two later.ShotgunSensor and SpraySensor to scale angle tolerance required to trigger the sensor depending on distance away from it.ShotgunSensor being able to be triggered while paused, or with the Shotgun on cooldown.ShotgunSensor and SpraySensor (onShotPerformed and onSprayPerformed, respectively), since onMovementDetected now acts the same for both.AnimationVelocity:
Animator, in case the desired animation was already playing.Animator.NetworkedAlert and its inheriting scripts:
AlertNotification and AlertToast potentially causing some issues due to not resetting their respective trigger parameter.SaneReverbTrigger and SpecificDoorway copy the configuration of their respective parent components, to easily replace them.Fish parent summoned fish to the objects that define their location instead, if parentToSelf is enabled.ScrapSpawner and EnemySpawner not being able to spawn items and enemies registered through LethalLib.ItemKickable items not being... kickable.ItemWhackable not respecting variant index number, if updated at a later point.InteractLockable not showing the timer when unlocking a door with a custom tooltip.Added a niche event, did a couple small additions and small fixes.
RenderEvent, which invokes an event callback when a Renderer becomes visible or invisible.
OnBecameVisible and OnBecameInvisible calls so it might not fully work as expected, particularly with a LODGroup in the mix.RigidbodyGroup:
Rigidbody.Rigidbody.ComponentGroup scripts internally, too.attachDisabled field to PlayerAttachable, which can be toggled to effectively disable PlayerAttachable-inheriting scripts.
PlayerAttachable disables itself without a player attached and reenables itself when a player attaches, so turning off the script doesn't actually work to prevent players from attaching.ItemGrabbable and EventfulApparatus invoke onCollect event when spawned inside the ship (for lobby reloads and/or late joins).ItemDiscardable items not being despawned in some circumstances, with despawnOnDiscard enabled.
ExplodeEffect erroring out when damaging other players.SunScreen only actually working when used by interiors.Added a few more alert scripts and an event, did several other small tweaks and fixes.
README to actually include 50+ previously unlisted ones were added, along with a short description of their intended usage.PlayerTracker, which can follow players and rotate multiple objects to point towards it at configurable speeds.ApparatusEvent, which simply invokes an event callback when an Apparatus is pulled by a player.AlertToast, which can display a toast message to players (e.g. dropship items missed alert).AlertNotification, which can display a notification message to players (e.g. new creature data alert).AlertSignal, which can display a signal translator message to players that can go over the vanilla letter cap.AlertDialogue inherit from the more abstract NetworkedAlert, just like the other alerts.NetworkedHittable and ItemWhackable's weapon hitID fields a dropdown selection instead of a number value.PlayerOuchie's player body ragdoll field a dropdown selection instead of a number value.PlayerSeater not resetting player animation state after sitting down (again).ScrapSpawner, for some backwards compatibility.Berunah (from Wesley's Moons).
Camera.Added various scripts and features, fixed a couple issues, removed some deprecated/legacy stuff.
ContentConditional, for doing stuff that depends on certain modded content existing, or a specific plugin being found.PlayerWeightEvent, which periodically checks a player's weight to determine if it should trigger or not.ShakeEffect, which just triggers a screen shake effect for the local client.
PlayerSensor at some point.VehicleSensor, for checking if the Cruiser is inside, entering and/or exiting a region.
ReverbTriggerAdjuster, to tweak certain AudioReverbTriggers not normally accessible from the moon scene.
AudioReverbTriggers present in the ship scene (SampleSceneRelay).SyncedSpawn activation time, to trigger scripts right before SpawnSyncedObjects begin their spawning.onConditionalFail to BaseConditional-inheriting scripts, which is called whenever the match in question fails.GiftSpawner, which can be used to replace the gift's texture when spawned.
ScrapSpawner's moon scrap spawns field to add the scraps instead of completely overriding the weights.ScrapSpawner's onSpawnPerformed to be called only until after the scrap item has finished being initialized and synced.BaseConditional-inheriting scripts to no longer stop after the first match, to continue applying other overrides.
OutOfBoundsAdjuster to not exit early after finding a kill trigger, in case the current moon has multiple for whatever reason.DungeonStoryLog to EventfulStoryLog, for it is no longer limited to just interiors.IWeightedScript-inheriting scripts when manually adding or modifying weights.ScriptableEvents with the same GUID not actually referring to the same instance.MoonConditional not matching moons properly due to a string-related issue.TwinApparatus shutting off power for good after only one being pulled.ScrapSpawner's onSpawnPerformed callback only being called for the host.ScrapSensor's onRegionEntered and onRegionExited callbacks only working for the host (probably).ActivationTime field for the scripts that had it.AudioGroup script.PlatformUnstable script, since its functionality can be recreated using other, more abstract scripts.Some small optimizations and tweaks.
ConnectedRope no longer allocate GC every frame...WaitFor yield statements in Coroutines.HiveSpawner still being able to be struck by lightning despite being deactivated.Bunch of script reworks, some rather niche additions, a couple fixes.
ScriptableNetworkPrefab, for registering one or several network prefabs from the editor.
PrefabSpawner for moons without manually registering prefabs.ComponentGroup, for scripts that perform bulk actions with several components.
AudioGroup that inherits from ComponentGroup, and deprecated the current one.RigidbodyGroup, for applying force to several Rigidbodies at the same time.RandomVector, which just produces a random Vector within a set range and passes it onto an event to do stuff with on demand.NetworkedSpawner scripts to define what to spawn in favor of just item/enemy/prefab names.
EnemySpawner to spawn a single specific enemy.
AudioSource components from playing audio after being spawned, to help a bit with potential missing sound issues.
NetworkedSpawner for when the player has performed a hit using a Shovel or Knife specifically.ConnectedRope.InteractPurchasable's interactable state.IWeightedScript to add one or several weight entries to an already-initialized list of weights.IWeightedScript-inheriting scripts to add and remove weights.WeatherConditional handling of WeatherTweaks' combined and progressing weathers a lot.
ScrapSensor to double check the item's spawned.
Abaddon (from Nightmare Moons), for it has been fixed.Added a new script, did a couple networking-related hotfixes.
AlertDialogue, for sending dialogue messages to the player.
PlayerAttachable not detaching clients properly over the network.
Netcode patching step from plugin initialization.Updated for v73 and above; reworked ScriptableEvent, added a couple new scripts and some small features.
v73, including Unity and NetcodePatcher versions.
v72 and below, and downgrading to an older release is required to play on prior versions of the game.Rpc attribute.ConnectedRope, for attaching a LineRenderer to several different points.
SetLineRendererPoints, but for more than two points.ScriptableEvent and ScriptableEventListener.
PlayerHinderer.
resetOnToggle field for DelayedEvent, to determine whether the timer should reset when the script is disabled, or if it should be paused until re-enabled.EventfulApparatus.Abaddon (from Nightmare Moons).
NavMeshObstacle.Actually updated CHANGELOG this time...
CHANGELOG for v0.4.5.Added a new script, a couple new features, refactored some activation-related stuff.
PlayerElectrode, for handling the draining of a player's chargeable items.
PlayerHinderer.
PlayerHinderer features are needed.`HazardSensor to deactivate (via Terminal code) any found hazards.IActivationScript interface.
AnimationVelocity, AudioGroup, BaseConditional (and its inheriting scripts), DetectRegion (and its inheriting scripts), MaterialSwapper, NetworkedSpawner (and its inheriting scripts), ScrapTeleporter, ToggleEvent, and WeightedEvent.Added a new sensor, did some other small things, fixed Doorway stuff (again).
ShotgunSensor, for detecting if the object is shot at by a player using a Shotgun.
SpraySensor, so it also doesn't hook into any actual ShotgunItem code.IEventfulItem for reacting to being placed on a DepositItemsDesk.ItemGrabbable, but it's not fully done yet.SpecificDoorway not working properly, but actually this time...PlatformGravity that wasn't doing anything, since PlayerPhysicsRegions are not NetworkBehaviours.Readded a small fix I undid by accident.
PlayerSeater erroring out for clients other than the player sitting down.Added a new spawner, fixed a couple things.
GiftSpawner, for spawning (rigged) vanilla presents.
PlayerSeater breaking player sitting under certain circumstances.
SA_stopAnimation trigger.SpecificDoorway not actually working properly...Added a few comments and tooltips, fixed some incompatibilities and minor bugs, did a bit of refactoring and tweaking.
PlayerAttachable.
PlayerSeater.
PlatformGrabbable) to reposition them.ScrapSpawner and EnemySpawner spawning items and enemies added through DawnLib.
MovementSensor), it'll throw a warning and disable the script instead of spamming errors.
SpraySensor and FearInducer a floating point number instead of an integer.ScrapSensor when a scrap item entered (or was created inside) the region before being spawned.WeatherConditional compatibility with the latest CrowdControl versions.SpecificDoorway incompatibility with Loadstone.
specificDoorwayActive is toggled to not depend on PauseBetweenRooms being greater than zero.ToggleEvent not syncing properly between clients.Added a couple new spawners, several useful fields and methods, some small fixes; also did some internal refactoring for a few scripts.
EnemySpawner, to spawn any number of specified enemies on demand.HiveSpawner, for spawning Circuit Bees at specific locations.
EnemyAnnihilator, to queue up the killing of any given enemies.
EnemySpawner's onSpawnPerformed callback to add enemies to the list, as well as EnemySensor's enemy filters to kill specific enemies that enter a region.EventfulApparatus to toggle pretty much every step of the Apparatus pulling sequence (e.g. playing particle effects, flickering lights, waking up Old Birds).
NetworkedSpawner to include every AINode (inside and/or outside) in the list of spawn locations.
EnemySensor for setting a given enemy's NavMeshAgent speed to 0 for one second, to semi-reliably handle any pathfinding changes for fast-moving enemies (e.g. disabling a NavMeshObstacle or OffMeshLink).
OffMeshLink they may be traveling through right as they are stopped.EnemyHinderer script at some point.AudioSource in an AudioGroup, as well as a field to automatically 'initialize' them all (Play() followed by Pause()).AttachPlayer() function to PlayerAttachable, instead of only having AttachPlayerLocal() available for manual attaching.NetworkedSpawner-inheriting scripts to use NetworkLists to sync spawned object properties with all clients, instead of periodically checking if they have spawned for the local client.ISeededScript interface and implemented it on all scripts that use randomization.ToggleEvent and added networking to it, to properly sync toggling across clients.HourEvent to subscribe to TimeOfDay's onHourChanged event, instead of only checking the time after being enabled.ExplodeEffect throwing errors if used while in orbit, due to a null check I forgor.OutOfBoundsAdjuster not adjusting the kill floor on moons that deviate from a vanilla hierarchy a bit.ItemWhackable items being able to be pocketed, if scrolling during the swinging animation.InteractPurchasable, as it can be handled better via PrefabSpawner.AudioSource and Animator stuff from PlatformGrabbable, as it can be handled better through other means.ContentTag-related fields in ScrapSpawner.
Small fix for NetworkedHittable, added LayerMask fields to a couple scripts.
NetworkedHittable objects erroring out when hit by a non-player.SpraySensor and FearInducer, which determine the layers that should block the player's line of sight.Couple small improvements and fixes.
ISeededScript interface, for scripts that need randomization using the current map seed.
ScrapSpawner at the moment, still thinking about a few things with its implementation.ScrapSpawner's respectSingleItemDay field actually work, and made its seededRandom field affect a couple things I missed.ItemKickable and ItemThrowable that correspond with the Soccer ball and Stun grenade curves, respectively.ItemTargetable's fall curve override be reset upon being picked up, so items don't act weird when normally dropped.AABB check of the local player for PlayerSensor, if the onlyAffectsLocalPlayer field is enabled.
AABB checks for all players at some point, instead of overlap stuff.DetectRegion scripts sometimes 'remembering' objects that had been previously found, but are no longer present.Did a couple changes, I think...
SpraySensor, for detecting if the object is being sprayed with Spray Paint, Weed Killer, or any other item that uses or inherits SprayPaintItem.
SprayPaintItem code, so it should be compatible with anything that modifies it (e.g. BetterSprayPaint).FearInducer, which increases a player's fear level and plays the fear effect when looked at.
ItemDiscardable, for items that drop themselves from the player's inventory.
EventfulApparatus, a LungProp-inheriting object with a bunch of events similar to ItemGrabbable.
TwinApparatus now inherits from EventfulApparatus.MultiAnimationEvent, which is similar to PlayAudioAnimationEvent but without a few features that can be done in a better way with other components (e.g. with NetworkedSource), and with a list of event callbacks to execute instead of the single OnAnimationEvent.AudioGroup, which checks objects and their children for any AudioSource, and allows some basic audio functions to be run on all sources at once.CeilingAdjuster, which just raises whichever object it's attached to to the highest point in the dungeon + a specified additional offset.DungeonConditional, for doing stuff whenever specific interiors generate.PlayerLauncher, so it smoothly ramps up towards the applied force instead of immediately applying it.
PlayerLauncher, but it can be turned back on!PlatformGrabbable, to smoothly move the player towards the center of the platform, instead of teleporting them to it.
IEventfulItem interface, which includes every event available in ItemGrabbable.
ItemWhackable) require using items that implement the IEventfulItem interface.ItemGrabbable and EventfulApparatus implement IEventfulItem, so they're both compatible with all modular item scripts!ItemTargetable, which represents items that follow a trajectory towards a set destination.
ItemKickable and ItemThrowable now both inherit from it, and thus share some common functionality.ItemKickable and ItemThrowable had some revisions done to their trajectory logic, too.IWeightedScript interface, which includes a bunch of default method implementations to handle weighted randomization.
WeightedEvent and ScrapSpawner now implement said interface.IPooledObject interface.
PooledObject contains Unity-related object pooling stuff, and AttachedEffect inherits from it.ScrapSpawner a bit (using the IWeightedScript interface):
ScrapSpawner to allow it to use the current moon's spawn weights, instead of specifying a list.
ItemAudible fields to NetworkedSource, and improved its networking a bit.
NetworkedSource now has functionality to, for instance, alert nearby enemies or play sounds over the walkie.MaterialSwapper able to do a set amount of swaps per activation, instead of doing all of them at once.
EnemySensor.
GrabbableObject attaching to AttachedEffect.
AttachedEffect generic type to Collider, and made it detach upon disabling.PlayerSeater, to be able to use the sofa and electric chair sitting animations, too.MovementSensor events.PlayerHinderer.PlayerHinderer.onLogCollected event callback to DungeonStoryLog.DetectRegion scripts take (lossy) scale into account when performing searches.InteractClimbable's specialCharacterAnimation field automatically disable itself, if twoHandedItemAllowed is enabled.
WallBreaker script into ConnectorMerger, which can now be used to disable either connector, or both.PlayerSensor player search counting players twice.ExplodeEffect explosion spawning a fair distance away from where it was actually supposed to.
spawnExplosionEffect field not actually doing anything.BaseConditional scripts not applying on dungeon completion.PrefabSpawner not working without the spawner itself being spawned.
NetworkedHittable not actually serializing hitID and the player who hit when sending hit information to other clients.SunScreen script.
detachTimer field for PlayerAttachable not actually starting when manually attaching the player (instead of with attachOnEnter).Did some pretty substantial refactoring; added and fixed a couple things, too.
ExplodeEffect:
ExplodeEffect able to target any object that implements the IHittable interface.IHittable curves to ExplodeEffect, to deal specific damage to non-player targets.damageRange and killRange with damageBounds and killBounds, for visualization purposes.PlayerHinderer, to control how deep the player actually sinks before dying.OutOfBoundsAdjuster, which just moves the current moon's OutOfBoundsTrigger to the lowest point in the dungeon + a specified additional offset.
DetectRegion actually take region rotation into account when performing searches.PlayerAttachable.UnityObject stuff, fixing some rare NullReferenceException errors.NetworkObjectReferences to NetworkBehaviourReferences when networking stuff, thus skipping a step.Reworked PlayerLauncher a bit, fixed WeatherRegistry compatibility.
PlayerLauncher now uses a list of forces to apply to the player, to combine multiple sources of rotation (e.g. where the launcher is facing + where the player's looking towards).PlayerHinderer, but it's not quite working just yet...WeatherConditional compatibility with WeatherRegistry, I forgor to actually apply my patch for it...Added player callbacks to NetworkedHittable, fixed some stuff with WeightedEvent.
NetworkedHittable about the player that performed the hit, as well as some separate hit event callbacks with said player given as an invoke parameter.WeightedEvent rolls should now actually roll when initiated by clients.Added DamageHittable and ToggleEvent, fixed some stuff with scrap-related scripts.
DamageHittable is a NetworkedHittable with health, it's got a list of conditions with event callbacks that are invoked when its health falls to or below specified numbers.ToggleEvent is just a behaviour with event callbacks for OnEnable() and OnDisable()... there ain't much more to it, I just needed it for something.ScrapSpawner should actually sync scrap position now, I forgor to add it...ScrapTeleporter now uses a seeded Random instance, takes teleport area colliders' center point into account, and should properly set item rotations if set to activate on scrap spawn (as it was supposed to have been doing).Added some compatibility for PizzaTowerEscapeMusic.
TwinApparatus will no longer trigger escape music.Initial release!