itolib
[v73] Wondrous gizmos and gadgets for the restless mind.
| Date uploaded | a week ago |
| Version | 0.6.1 |
| Download link | pacoito-itolib-0.6.1.zip |
| Downloads | 18633 |
| Dependency string | pacoito-itolib-0.6.1 |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2304pacoito-LethalLevelLoaderUpdated
A Custom API to support the manual and dynamic integration of all forms of custom content in Lethal Company. (v73 Compatible)
Preferred version: 1.5.1README
itolib
Wondrous gizmos and gadgets for the restless mind.
A collection of wacky scripts I've written for projects I'm involved in, most prominently Bozoros and PlayZone.
Everything's kept fairly abstract so it can be generally applied for many use cases. Feel free to add this to your project to play around with, if anything catches your eye!
-
NOTE: Expect a few breaking changes here and there (at least while everything is being polished), should you choose to add this as a dependency.
-
NOTE 2: This is not intended to be a JLL replacement, though there are a couple overlapping features. It should be fine to use both in the same project without issues, but I'd still recommend opting for JLL's implementations for a more tried and tested approach.
Features (but here's the yapper)
A proper write-up and documentation for all components and their intended usage is planned, but here's a quick rundown of some of the more interesting ones:
- PlayerAttachable: An abstract effect or concept that continually affects a player (attach), and eventually stops (detach).
- PlatformGrabbable: Physically attaches a player and makes them 'grab' on to a 'platform', making the player's position match said platform's until either a certain action stops being held (e.g.
Jump), or they are detached through some other means. Used for Bozoros' balloon rides and PlayZone's slides. - PlayerLauncher: Launches any player who attaches, with heavily customizable trajectory parameters, and some additional optional features like fall damage prevention (until detached) and camera/player model tilting. Used for Bozoros' banana peels and PlayZone's trampolines.
- MovementSensor: Checks if the attached player performs a specific movement action (e.g.
Jump,Move,Crouch), and invokes an event callback if so. A cooldown can be applied so as to not trigger continuously, which can even be used for things like fake custom footstep sound effects. Used for PlayZone's ball pit movement effects. - PlayerHinderer: Slows down any player who attaches in a similar way to the vanilla spider web, up until the moment they detach. Has a field to allow the player to jump while hindered, even without stamina. Used for PlayZone's ball pit.
- PlayerSeater: Makes any player who attaches enter the Cruiser sitting animation until detaching, without reparenting the player or having to use an
InteractTrigger. Used for PlayZone's slides.
- PlatformGrabbable: Physically attaches a player and makes them 'grab' on to a 'platform', making the player's position match said platform's until either a certain action stops being held (e.g.
- DetectRegion: An abstract region within which to detect or perform (non-allocating) searches for overlapping
Colliderinstances belonging to objects of a certain type.- PlayerSensor: Detects any players inside, entering, and/or exiting the region, with some additional event callbacks specifically filtering players that are alive.
- EnemySensor: Detects any enemies inside, entering and/or exiting the region, with some additional filtering for whitelisting specific enemies, as well as requiring a certain amount of them before triggering events.
- ScrapSensor: Detects any scrap inside, entering and/or exiting the region, with some additional functions for causing them to drop to the ground, or disable its
MeshRendererand/orColliderinstances. - HazardSensor: Detects any objects in the
MapHazardslayer inside the region, with an additional function to despawn found hazards. - ExplodeEffect: Implementation of vanilla's
Landmine.SpawnExplosionusingDetectRegion, which performs non-allocating searches inside aCollider(instead of a radius), contains some additional customizability for explosion properties, and has an adjustable collision mask to define which layers should count as 'cover' from the explosion. - ConnectorMerger: Detects any instances of itself within the region, disables one of them and (optionally) moves the remaining one to the center. Has a priority system so certain connectors are preferred from others.
- ItemGrabbable: A
GrabbableObjectbut with a bunch of event callbacks that can mimic an inheriting class (e.g.SoccerBallProp) without actually inheriting it, sacrificing polymorphism for modularity. All these components can be mixed and matched to create items with multiple properties (e.g.ItemKickable+ItemThrowableto make a throwable soccer ball).- ItemAudible: Mimics
NoisemakerProp, with pretty much the same properties save for a few additional ones. - ItemKickable: Mimics
SoccerBallProp, with some added customizability for kick trajectory parameters, event callbacks, and an adjustable collision mask for objects it can land on top of. - ItemThrowable: Mimics
StunGrenadeItem, with some added customizability for throw trajectory parameters, event callbacks, and an adjustable collision mask for objects it can land on top of. - ItemWearable: Mimics
BeltBagItem's wearable properties, specifically 'attaching' to either the player's head, belt, or a custom bone when pocketed. - ItemWhackable: Mimics
Shovel, with added customizability for its properties (e.g. hit cooldown or hit speed), event callbacks for every stage of the 'whacking' process, and adjustable collision masks for hittable objects, with the added bonus of not allocating GC on every swing.
- ItemAudible: Mimics
- Interactables: Components that inherit from
InteractTriggerto fulfill various purposes.- InteractClimbable: An
InteractTriggerfor a ladder with adjustable climbing speed. - InteractLockable: A
DoorLockimplementation that allows custom tooltips that don't get overwritten when using a key. Doesn't inherit fromInteractTriggerbut is used alongside them for locked doors. - InteractPurchasable: An
InteractTriggerthat can spawn a prefab or run an event, but for a fee. - InteractSeatable: An
InteractTriggerthat acts like a Cruiser seat, but requiring a specific button press to get back up.- NOTE: Can be replaced with
PlayerSeaterfor functionally the same effect, without the vanilla bug where two players get softlocked if they sit down at the same time.
- NOTE: Can be replaced with
- InteractTalkable: An
InteractTriggerthat can transmit a player's voice over the Walkie while held; though only for one-way communication.
- InteractClimbable: An
- Events:
- DelayedEvent: An event that gets invoked after a given interval, either continuously or only once (until re-enabled).
- WeightedEvent: Invokes an event (or several) from a specified list, each with its own weighted chance of being picked.
- ScriptableEventListener: Can be used in combination with a
ScriptableEventto create an arbitrary 'global' event. This event can be raised from within any other event callback, to trigger something to happen on another, completely detached object.
There's a bunch more scripts that are very niche, require further explanation to employ, or are in need of some refactoring (as they're a bit old now). If you're curious about any of them and/or have any questions regarding usage of a particular script, I've kept my commit messages fairly lengthy when adding new scripts, but also feel free to ping me in the Lethal Company Modding Discord server. Feedback, suggestions, and bug reports are also welcome!
Credits
- The LC Modding Community — For support, ideas, encouragement, and just good vibes in general.
- LethalMatt — For Bozoros, my all-time favorite moon (
I am not biased at all...), but also for coming up with wacky concepts for PlayZone that necessitated additional scripting functionality, which was then added to this library. - IAmBatby — For LethalLevelLoader, the backbone for a significant chunk of custom content for this game. A couple scripts in here also require it or make use of its features.
- PF1MIL — For Early Access™ testing of various scripts, suggesting additions and improvements, and just generally waiting patiently for this library to release.
- You! —

CHANGELOG
Changelog
[v0.6.1]
Some small optimizations and tweaks.
- Made
ConnectedRopeno longer allocate GC every frame... - Removed some tag comparisons that weren't really needed.
- Added caching for the various
WaitForyield statements inCoroutines. - Fixed original hives replaced by
HiveSpawnerstill being able to be struck by lightning despite being deactivated. - Made required components auto-assign the component in question to its relevant field (though there's not that many).
- Updated a few internal project dependencies.
[v0.6.0]
Bunch of script reworks, some rather niche additions, a couple fixes.
- Added
ScriptableNetworkPrefab, for registering one or several network prefabs from the editor.- Allows usage of
PrefabSpawnerfor moons without manually registering prefabs. - A bit impractical to use at the moment, though...
- Allows usage of
- Added abstract
ComponentGroup, for scripts that perform bulk actions with several components.- Made a separate
AudioGroupthat inherits fromComponentGroup, and deprecated the current one. - Added
RigidbodyGroup, for applying force to severalRigidbodiesat the same time.
- Made a separate
- Added
RandomVector, which just produces a randomVectorwithin a set range and passes it onto an event to do stuff with on demand. - Deprecated usage of blank references in
NetworkedSpawnerscripts to define what to spawn in favor of just item/enemy/prefab names.- Avoids potential issues with blank references being deleted by LethalLevelLoader after being replaced (as it's intended to), and I was already doing name comparisons to begin with.
- Blank references in spawners will still work but will be removed at some point in the future.
- Added separate field for
EnemySpawnerto spawn a single specific enemy.- Will override any set weighted enemy spawns, but allows switching the enemy to spawn through a method.
- Added option to immediately stop any spawned scrap's
AudioSourcecomponents from playing audio after being spawned, to help a bit with potential missing sound issues.- Looking at you, Dine scraps...
- Added separate event callbacks to
NetworkedSpawnerfor when the player has performed a hit using aShovelorKnifespecifically. - Added methods for attaching a player or any transform to the start or end of a
ConnectedRope. - Added method to set
InteractPurchasable's interactable state. - Internal tweaks to weighted scripts.
- Added (default) function to
IWeightedScriptto add one or several weight entries to an already-initialized list of weights. - Added functions to the
IWeightedScript-inheriting scripts to add and remove weights.
- Added (default) function to
- Improved
WeatherConditionalhandling of WeatherTweaks' combined and progressing weathers a lot.- Notably now allows matching combined/progressing weathers with custom names, such as ones added through Custom Weathers Toolkit.
- Added an extra check to
ScrapSensorto double check the item's spawned.- Should fix PlayZone compatibility with some BrutalCompanyMinusExtraReborn modifiers.
- Removed temporary hotfix for
Abaddon(from Nightmare Moons), for it has been fixed.
[v0.5.1]
Added a new script, did a couple networking-related hotfixes.
- Added
AlertDialogue, for sending dialogue messages to the player.- Uses the 'ship leaving early' UI to display messages.
- Has a few customization options like sound effect override and (optional) delay between letters.
- Several dialogue entries can be specified to display several messages, in sequence.
- Fixed
PlayerAttachablenot detaching clients properly over the network.- Also fixed some possible weirdness with despawning.
- Removed
Netcodepatching step from plugin initialization.
[v0.5.0]
Updated for v73 and above; reworked ScriptableEvent, added a couple new scripts and some small features.
- Updated library dependencies for
v73, includingUnityandNetcodePatcherversions.- NOTE: This release is not backwards-compatible with
v72and below, and downgrading to an older release is required to play on prior versions of the game.
- NOTE: This release is not backwards-compatible with
- Made a few internal networking tweaks and improvements using the new
Rpcattribute. - Added
ConnectedRope, for attaching aLineRendererto several different points.- Similar to the game's
SetLineRendererPoints, but for more than two points.
- Similar to the game's
- Reworked
ScriptableEventandScriptableEventListener.- Now uses a key system instead of a direct reference, and can thus handle being included in multiple bundles.
- Added comments and tooltips to both of them.
- Added periodic stamina draining to
PlayerHinderer.- Drain speed can be adjusted, as well as whether to take carry weight into account or not.
- Added
resetOnTogglefield forDelayedEvent, to determine whether the timer should reset when the script is disabled, or if it should be paused until re-enabled. - Added a missing null check to
EventfulApparatus. - Added a small hotfix for
Abaddon(from Nightmare Moons).- Fixed error spam due to a missing
NavMeshObstacle. - Temporary fix since the moon cannot be updated at the moment.
- Fixed error spam due to a missing
- Added Fish.
[v0.4.6]
Actually updated CHANGELOG this time...
- I forgor to update the
CHANGELOGforv0.4.5.
[v0.4.5]
Added a new script, a couple new features, refactored some activation-related stuff.
- Added
PlayerElectrode, for handling the draining of a player's chargeable items.- Held and/or pocketed items can be periodically drained (like active Flashlights), or manually drained by a percentage amount.
- Added drunkness (TZP) effect to
PlayerHinderer.- Speed of the effect being applied to the player is configurable, and can be set to a high amount to immediately max out the effect.
- Also added a separate field to disable slowing the player down, in case only the other
PlayerHindererfeatures are needed.`
- Added a function to
HazardSensorto deactivate (via Terminal code) any found hazards. - Reworked all scripts that activate at a specified time to use the
IActivationScriptinterface.- This includes
AnimationVelocity,AudioGroup,BaseConditional(and its inheriting scripts),DetectRegion(and its inheriting scripts),MaterialSwapper,NetworkedSpawner(and its inheriting scripts),ScrapTeleporter,ToggleEvent, andWeightedEvent. - Should be backwards-compatible, but re-serializing any prefabs that use them (by saving the prefab) is recommended.
- This includes
- Corrected some comments and tooltips here and there.
[v0.4.4]
Added a new sensor, did some other small things, fixed Doorway stuff (again).
- Added
ShotgunSensor, for detecting if the object is shot at by a player using a Shotgun.- Works by using the same principles as
SpraySensor, so it also doesn't hook into any actualShotgunItemcode. - Will likely add compatibility with modded ranged weapons at some point, too.
- Works by using the same principles as
- Added event callback to
IEventfulItemfor reacting to being placed on aDepositItemsDesk. - Added a few comments and tooltips to
ItemGrabbable, but it's not fully done yet. - Fixed
SpecificDoorwaynot working properly, but actually this time... - Removed some networking stuff from
PlatformGravitythat wasn't doing anything, sincePlayerPhysicsRegionsare notNetworkBehaviours.
[v0.4.3]
Readded a small fix I undid by accident.
- Fixed
PlayerSeatererroring out for clients other than the player sitting down.
[v0.4.2]
Added a new spawner, fixed a couple things.
- Added
GiftSpawner, for spawning (rigged) vanilla presents.- Item inside the gift can be randomly selected from a weighted list.
- Minimum and maximum scrap values for the item inside the gift can be overridden.
- Gift opening audio and poof particle can be overridden, too!
- Fixed
PlayerSeaterbreaking player sitting under certain circumstances.- Now actually checking if the player is in a special animation before setting the
SA_stopAnimationtrigger.
- Now actually checking if the player is in a special animation before setting the
- Fixed
SpecificDoorwaynot actually working properly...
[v0.4.1]
Added a few comments and tooltips, fixed some incompatibilities and minor bugs, did a bit of refactoring and tweaking.
- Added comments and tooltips for all types that inherit
PlayerAttachable.- Also corrected some erroneous and/or outdated tooltips.
- Added some fields to configure camera clamping for
PlayerSeater.- Players are also now teleported to the intended seat position, instead of relying on other means (e.g.
PlatformGrabbable) to reposition them. - Tooltips for items are now properly hidden when hiding a player's held item, too.
- Players are also now teleported to the intended seat position, instead of relying on other means (e.g.
- Added (basic) support for
ScrapSpawnerandEnemySpawnerspawning items and enemies added through DawnLib.- Only does a name comparison, will likely add namespace searching and tag matching at some point in the near future.
- Made it so if a player action is not found for whatever reason (e.g. for
MovementSensor), it'll throw a warning and disable the script instead of spamming errors.- Also maybe fixed not being able to find the player action in the first place, though I haven't been able to reproduce this issue so I can't confirm.
- Made range parameter for
SpraySensorandFearInducera floating point number instead of an integer. - Fixed error thrown in
ScrapSensorwhen a scrap item entered (or was created inside) the region before being spawned. - Fixed
WeatherConditionalcompatibility with the latest CrowdControl versions. - Fixed
SpecificDoorwayincompatibility with Loadstone.- Changed how
specificDoorwayActiveis toggled to not depend onPauseBetweenRoomsbeing greater than zero.
- Changed how
- Fixed
ToggleEventnot syncing properly between clients.
[v0.4.0]
Added a couple new spawners, several useful fields and methods, some small fixes; also did some internal refactoring for a few scripts.
- Added
EnemySpawner, to spawn any number of specified enemies on demand. - Added
HiveSpawner, for spawning Circuit Bees at specific locations.- Has fields to override the scrap item that bees consider to be their hive, modify the scan nodes for both the bees and hive, and scale hive scrap value depending on its distance from the ship.
- Added
EnemyAnnihilator, to queue up the killing of any given enemies.- Intended for 'temporary' enemies that despawn after a certain amount of time, but can also simply be used for general enemy killing.
- Can employ
EnemySpawner'sonSpawnPerformedcallback to add enemies to the list, as well asEnemySensor's enemy filters to kill specific enemies that enter a region.
- Added fields to
EventfulApparatusto toggle pretty much every step of the Apparatus pulling sequence (e.g. playing particle effects, flickering lights, waking up Old Birds).- Has fields for toggling triggering FacilityMeltdown and PizzaTowerEscapeMusic, too.
- Added some fields to
NetworkedSpawnerto include everyAINode(inside and/or outside) in the list of spawn locations.- Also added a field to include the children of any specified spawn locations as well.
- Added function to
EnemySensorfor setting a given enemy'sNavMeshAgentspeed to 0 for one second, to semi-reliably handle any pathfinding changes for fast-moving enemies (e.g. disabling aNavMeshObstacleorOffMeshLink).- Warps the enemy to the beginning of any
OffMeshLinkthey may be traveling through right as they are stopped. - Will probably end up being moved to its own dedicated
EnemyHindererscript at some point.
- Warps the enemy to the beginning of any
- Added function to sync playback time for every
AudioSourcein anAudioGroup, as well as a field to automatically 'initialize' them all (Play()followed byPause()). - Added a networked
AttachPlayer()function toPlayerAttachable, instead of only havingAttachPlayerLocal()available for manual attaching. - Rewrote
NetworkedSpawner-inheriting scripts to useNetworkListsto sync spawned object properties with all clients, instead of periodically checking if they have spawned for the local client. - Improved
ISeededScriptinterface and implemented it on all scripts that use randomization. - Reworked
ToggleEventand added networking to it, to properly sync toggling across clients. - Reworked
HourEventto subscribe toTimeOfDay'sonHourChangedevent, instead of only checking the time after being enabled. - Fixed
ExplodeEffectthrowing errors if used while in orbit, due to a null check I forgor. - Fixed
OutOfBoundsAdjusternot adjusting the kill floor on moons that deviate from a vanilla hierarchy a bit. - Fixed two-handed
ItemWhackableitems being able to be pocketed, if scrolling during the swinging animation. - Removed prefab spawning stuff in
InteractPurchasable, as it can be handled better viaPrefabSpawner. - Removed
AudioSourceandAnimatorstuff fromPlatformGrabbable, as it can be handled better through other means. - Removed (unused)
ContentTag-related fields inScrapSpawner.- Will likely re-add tag spawning at some point, but it's been unused since the addition of weighted scrap spawning.
[v0.3.2]
Small fix for NetworkedHittable, added LayerMask fields to a couple scripts.
- Fixed
NetworkedHittableobjects erroring out when hit by a non-player. - Added a LayerMask field to both
SpraySensorandFearInducer, which determine the layers that should block the player's line of sight.
[v0.3.1]
Couple small improvements and fixes.
- Added
ISeededScriptinterface, for scripts that need randomization using the current map seed.- Only used for
ScrapSpawnerat the moment, still thinking about a few things with its implementation.
- Only used for
- Made
ScrapSpawner'srespectSingleItemDayfield actually work, and made itsseededRandomfield affect a couple things I missed. - Added default curves for
ItemKickableandItemThrowablethat correspond with theSoccer ballandStun grenadecurves, respectively. - Made
ItemTargetable's fall curve override be reset upon being picked up, so items don't act weird when normally dropped. - Switched to using an
AABBcheck of the local player forPlayerSensor, if theonlyAffectsLocalPlayerfield is enabled.- Most likely will end up switching to
AABBchecks for all players at some point, instead of overlap stuff.
- Most likely will end up switching to
- Fixed
DetectRegionscripts sometimes 'remembering' objects that had been previously found, but are no longer present.
[v0.3.0]
Did a couple changes, I think...
- Added
SpraySensor, for detecting if the object is being sprayed with Spray Paint, Weed Killer, or any other item that uses or inheritsSprayPaintItem.- Multiple spray 'treshholds' can be defined, each with event callbacks, to have stuff happen depending on the number of times sprayed (e.g. to have something happen after 3 sprays specifically).
- Does not actually hook into any
SprayPaintItemcode, so it should be compatible with anything that modifies it (e.g. BetterSprayPaint).
- Added
FearInducer, which increases a player's fear level and plays the fear effect when looked at.- Has some customizability for things like range, angle, and amount of fear to instill upon the player depending on how close they are.
- Disables itself after triggering once, but can be re-enabled to give the player another spook.
- Added
ItemDiscardable, for items that drop themselves from the player's inventory.- Has a function to cause the item to drop itself from the player's inventory (even while pocketed), as well as a despawn timer after getting discarded.
- Added
EventfulApparatus, aLungProp-inheriting object with a bunch of events similar toItemGrabbable.- (PlayZone)
TwinApparatusnow inherits fromEventfulApparatus.
- (PlayZone)
- Added
MultiAnimationEvent, which is similar toPlayAudioAnimationEventbut without a few features that can be done in a better way with other components (e.g. withNetworkedSource), and with a list of event callbacks to execute instead of the singleOnAnimationEvent. - Added
AudioGroup, which checks objects and their children for anyAudioSource, and allows some basic audio functions to be run on all sources at once. - Added
CeilingAdjuster, which just raises whichever object it's attached to to the highest point in the dungeon + a specified additional offset. - Added
DungeonConditional, for doing stuff whenever specific interiors generate. - Added lerping to
PlayerLauncher, so it smoothly ramps up towards the applied force instead of immediately applying it.- Ramping speed is adjustable, and it comes with a new detach condition for once the force is fully applied.
- Also fixed the unintended rocket jump whenever players jump right before touching the
PlayerLauncher, but it can be turned back on!
- Added lerping to
PlatformGrabbable, to smoothly move the player towards the center of the platform, instead of teleporting them to it.- Not teleporting instantly means the player will be slightly behind the intended position, but this grabbing speed can be adjusted.
- Added
IEventfulIteminterface, which includes every event available inItemGrabbable.- Made all modular item scripts (e.g.
ItemWhackable) require using items that implement theIEventfulIteminterface. - Made
ItemGrabbableandEventfulApparatusimplementIEventfulItem, so they're both compatible with all modular item scripts!
- Made all modular item scripts (e.g.
- Added abstract
ItemTargetable, which represents items that follow a trajectory towards a set destination.ItemKickableandItemThrowablenow both inherit from it, and thus share some common functionality.- Both
ItemKickableandItemThrowablehad some revisions done to their trajectory logic, too.
- Added
IWeightedScriptinterface, which includes a bunch of default method implementations to handle weighted randomization.WeightedEventandScrapSpawnernow implement said interface.
- Added generics to the
IPooledObjectinterface.- Now the abstract
PooledObjectcontains Unity-related object pooling stuff, andAttachedEffectinherits from it. - It also now actually supports creating a given number of instances to have ready from the start.
- Now the abstract
- Overhauled
ScrapSpawnera bit (using theIWeightedScriptinterface):- Added a weighted list of items to spawn, instead of just a single item.
- Blank references (even for modded items!) should be working correctly, too.
- Added field to
ScrapSpawnerto allow it to use the current moon's spawn weights, instead of specifying a list.- Overrides any items set in the weighted list.
- Added a minimum and maximum set amount of items to spawn, instead of simply spawning one at every defined location.
- Added able to spawn scrap at a random location within specified area bounds, instead of only at set points.
- Made spawned scrap actually count towards the current round's total scrap value amount.
- Added a weighted list of items to spawn, instead of just a single item.
- Added pretty much all
ItemAudiblefields toNetworkedSource, and improved its networking a bit.NetworkedSourcenow has functionality to, for instance, alert nearby enemies or play sounds over the walkie.
- Made
MaterialSwapperable to do a set amount of swaps per activation, instead of doing all of them at once.- Allows for 'cycling' through various material states by only doing a certain number at a time.
- Improved enemy filtering for
EnemySensor.- Added callback events for individual filters, as well as enemy blacklisting.
- Added
GrabbableObjectattaching toAttachedEffect.- Switched
AttachedEffectgeneric type toCollider, and made it detach upon disabling.
- Switched
- Added a sitting animation field to
PlayerSeater, to be able to use the sofa and electric chair sitting animations, too. - Added a stamina requirement field for triggering
MovementSensorevents. - Added a player stamina draining function to
PlayerHinderer. - Added field to mute quicksand sinking sounds for
PlayerHinderer. - Added a networked
onLogCollectedevent callback toDungeonStoryLog. - Made
DetectRegionscripts take (lossy) scale into account when performing searches. - Made
InteractClimbable'sspecialCharacterAnimationfield automatically disable itself, iftwoHandedItemAllowedis enabled.- Allows players to climb with two-handed items.
- Merged
WallBreakerscript intoConnectorMerger, which can now be used to disable either connector, or both. - Fixed
PlayerSensorplayer search counting players twice. - Fixed
ExplodeEffectexplosion spawning a fair distance away from where it was actually supposed to.- Also fixed its
spawnExplosionEffectfield not actually doing anything.
- Also fixed its
- Fixed all
BaseConditionalscripts not applying on dungeon completion. - Fixed
PrefabSpawnernot working without the spawner itself being spawned.- But who spawns the spawner?
- Fixed
NetworkedHittablenot actually serializinghitIDand the player who hit when sending hit information to other clients. - Fixed sun not actually being hidden by the
SunScreenscript.- Switching spectating camera also no longer toggles the sun, but I don't think it was even working in the first place...
- Fixed
detachTimerfield forPlayerAttachablenot actually starting when manually attaching the player (instead of withattachOnEnter).
[v0.2.0]
Did some pretty substantial refactoring; added and fixed a couple things, too.
- Added some stuff to
ExplodeEffect:- Made
ExplodeEffectable to target any object that implements theIHittableinterface. - Added separate enemy and
IHittablecurves toExplodeEffect, to deal specific damage to non-player targets. - Replaced
damageRangeandkillRangewithdamageBoundsandkillBounds, for visualization purposes.
- Made
- Added player sinking curve overriding to
PlayerHinderer, to control how deep the player actually sinks before dying. - Added
OutOfBoundsAdjuster, which just moves the current moon'sOutOfBoundsTriggerto the lowest point in the dungeon + a specified additional offset.- Intended for more vertically-oriented dungeons.
- Made
DetectRegionactually take region rotation into account when performing searches. - Did a lot of refactoring under the hood, based on IAmBatby's suggestions and feedback!
- Made scripts with update loops disable themselves when not in use, the most important one being
PlayerAttachable. - Removed all uses of null propagation on
UnityObjectstuff, fixing some rareNullReferenceExceptionerrors. - Switched from using
NetworkObjectReferencestoNetworkBehaviourReferenceswhen networking stuff, thus skipping a step. - Some other miscellaneous tweaks and fixes here and there.
- Made scripts with update loops disable themselves when not in use, the most important one being
[v0.1.4]
Reworked PlayerLauncher a bit, fixed WeatherRegistry compatibility.
PlayerLaunchernow 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).- Added some drowning/quicksand-related stuff to
PlayerHinderer, but it's not quite working just yet... - Fixed
WeatherConditionalcompatibility with WeatherRegistry, I forgor to actually apply my patch for it...
[v0.1.3]
Added player callbacks to NetworkedHittable, fixed some stuff with WeightedEvent.
- Added information to
NetworkedHittableabout the player that performed the hit, as well as some separate hit event callbacks with said player given as an invoke parameter. WeightedEventrolls should now actually roll when initiated by clients.
[v0.1.2]
Added DamageHittable and ToggleEvent, fixed some stuff with scrap-related scripts.
DamageHittableis aNetworkedHittablewith health, it's got a list of conditions with event callbacks that are invoked when its health falls to or below specified numbers.ToggleEventis just a behaviour with event callbacks forOnEnable()andOnDisable()... there ain't much more to it, I just needed it for something.ScrapSpawnershould actually sync scrap position now, I forgor to add it...ScrapTeleporternow uses a seededRandominstance, 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).
[0.1.1]
Added some compatibility for PizzaTowerEscapeMusic.
- Pulling only one
TwinApparatuswill no longer trigger escape music.
[0.1.0]
Initial release!