* haunted dungeon
* Initial work
Still needs prefab gen work to make it interesting.
* ime a worm
* weh
* Work
* Slight tweaks
---------
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
- Fix the free node check considering the whole tile and not the poly.
- Clear maps on direction resets.
- More robust arrival checks for pathfinding nodes.
* Prep for DoorRemote Status
* Door Remote Mode Messages
* plural opens and closes
* never trust webedits
---------
Co-authored-by: Plykiya <plykiya@protonmail.com>
Fixes#26211
Admin messages now have separate "seen" and "dismissed" fields. The idea is that an admin should be able to tell whether a user pressed the "dismiss for now" button. Instead of using "seen" as "show this message to players when they join", "dismissed" is now used for this.
Existing notes in the database will automatically be marked as dismissed on migration. A note cannot be dismissed without being seen (enforced via constraint in the database too, aren't I fancy).
As part of this, it has become impossible for a player to play without dismissing the message in some form. Instead of a shitty popup window, the popup is now a fullscreen overlay that blocks clicks behind it, making the game unplayable. Also, if a user somehow has multiple messages they will be combined into one popup.
Also I had enough respect for the codebase to make it look better and clean up the code somewhat. Yippee.
Wire layouts manually navigate the inheritance hierarchy, but the data fields on the prototypes were also automatically inherited already. This meant that inheriting a wire layout prototype and changing nothing would cause the wires to be duplicated unless they were manually modified on top.
Fix is easy: just disable inheritance on the data fields.
Also, integration test for it.
* Replaced uses of Dirty(Component) with Dirty(Uid, Component)
Modified some systems (notably pulling-related) to use uids.
* Missed a few
* Revert changes to pulling
* No
* Merge BreakOnWeightlessMove and BreakOnMove. Provide different theshold for weightless movement.
* Adjust WeightlessMovementThresholds. Put a thing I forgot to put in the doafterargs.
* Make DoAfterArgs only use OnMove to determine whether to check for
movement and MoveThreshold to determine the threshold regardless of
weightlessness. Gave DistanceThreshold a default value which will always
be checked now.
* Fix issue introduced by merge.
* Use interaction system for determining whether a distance is within range
* Fix incorrect doafter args introduced by previous merge.
Forgor to commit these.
* Exorcise ghost.
The execution system should have been deleted when I merged previously.
For a reason I cannot comprehend it came back, but only the execution
system.
* Exorcise ghost Pt. 2
* Allow for movement check to be overriden in zero g and adjust doafter args where needed.
You can now override checking for movement in zero g with the BreakOnWeightlessMove bool. By default it will check.
The following doafters were made to ignore the movement check in zero g:
- Healing yourself with healing items,
- Removing embedded projectiles,
- Using tools like welders and crowbars
* Adjust distance for cuffing/uncuffing to work. Make injections not break on weightless movement.
* Fix evil incorrect and uneeded comments
* Pulling rework
Fixing up the FOUR systems managing pulling, all the shitcode, and also making it nicer ingame.
* More pulling cleanup
* stats
* More cleanup
* First draft
* More pulling
* weh
* Fix puller
* Pulling working
* Fix merge
* Dunked
* Self-merge time
* Fix hotkey
* Fix container changes
* oop
* Fix multi-pulling
* Move alerts cleanup.
* pulling fixes
* Fix SCRAM implant not being usable while in cuffs. Also fix freedom implant from working while dead/crit as a side effect
* Move check up to apply to all actions and do thing I forgor to do before
* Change check into an ActionBlocker check that also checks whether the user is sleeping.
* Make checking for Consciousness the default for actions
Went through and chose what I believe to be sensible defaults for actions that had CheckCanInteract.
* Fix typos my beloved
I had an unbelievable skill issue
* Fix major skill issue
* Spray Paint (Draft)
* paint colors, paints in maints loot, cargo crate of paints.
* fix
* remove paint (sort of)
* moved paintcleaner into own system
* Moved paint to server (had to unfortunately)
* doafter now breaks when moving away.
* cant paint mobstatecomp
* loads of fixes
* fixes
* fixes
* nopaintshadercomp
* fixes
* fix
* use locale for paint remove string
* remove nopaintshadercomponent and use blacklist
* remove enabled.true from visualizer
* paint doafter event.
* add verbs for paint and remove paint and icon for paint verb.
* fixes
* no longer replaces shader when shader exists.
* replace forloop with foreach, check shader before adding and removing.
* paint doafter now separate so no copy paste code
* Entities in sprayed targets item slots are also now correctly sprayed.
* fix
* fix
* fix airlock psray painter now removes painted before painting door.
* spray paints now use openablecomponent.
* fix
* fix damn accesstypes.
* fix
* fix
Oops
In #26217 I re-organized the logic for the calculation. Part of that was moving the logic for GetFeltLowPressure and GetFeltHighPressure to be done before we actually check the hazard thresholds. What I didn't realize is that, with how our pressure protection is set up, these functions can return values so extreme they rebound into the other category.
For example, according to the math, when you're wearing a hardsuit in a low-pressure environment you have "felt" pressure of 1000 kPa. Yeah that's not right.
Now these functions clamp their result to OneAtmosphere, in the appropriate direction (101.3 kPa).
Fixes#26234
* move faction prototype to shared
* move faction exception and member stuff to shared
* fix breaking changes for random stuff
* move pettable friend stuff to shared
* mostly fix
* final fixy
* dragonops
* final fixy II
* use querys and fix warpspeed fish (probably)
* fixer
* Rrrr!
---------
Co-authored-by: deltanedas <@deltanedas:kde.org>
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
The math for our pressure damage (barotrauma) system is directly taken from TG. The constants are the same and the math is almost the same. However there are two errors.
1. Pressure damage started being applied within the WARNING bounds, rather than the HAZARD bounds. This means you started taking low pressure damage at 50 kPa instead of the intended 20 kPa, and also the HUD icon didn't show "danger" like it should even if you were already taking damage.
2. The calculations for high pressure damage were wrong. These are supposed to be linearly scaled, but the function was wrong so the scaling didn't actually work properly (especially when considering the fixed bounds above). This appears to be the case because the function was taken from an incorrect comment in the original source, rather than the real math.
Both of these issues are now fixed to match the TG behavior. Note that this somewhat nerfs pressure damage in non-extreme circumstances. e.g. a room at 40 kPa now gives NO pressure damage, whereas previously it would do full space damage.
The description of the pressure alerts is wrong for "low" severity, but I can't be arsed to fix that right now. Alerts don't have a way to change the description depending on severity...
* Added 18 new bounties + tags, couple of balance tweaks
* Oops, 2 corn tags.
* Fixed another duplicate from merge conflict
* Fixed all arbitrage issues
* Removed metamorphic glass/manly dorf bounty
* Removed manly dorf bounty
* Removed manly dorf bounty
* Removed manly dorf bounty
* Changed hiviz tag, removed commented out bounty
* Removed extra line
* Change HiViz tag
* Removed unused tag
* Removed LaceupShoes, changed HiViz
* Changed flavor text for fruit bounty
* Removed live mouse bounty
* Make radio jammer block suit sensors
* Fix stupid
Use CancellableEventArgs instead of doing what the hell I was doing before.
* Address Reviews.
Change the event from a CancellableEntityEventArgs to a ByRefEvent.
* Throttle people trying to connect to a full server.
To reduce spam/load on the server and connection logs table.
Players are forced to wait 30 seconds after getting denied for "server full", before they can try connecting again.
This code is an absolute nightmare mess. I tried to re-use the existing code for the redial timer but god everything here sucks so much.
Requires https://github.com/space-wizards/RobustToolbox/pull/4487
* Use new NetDisconnectMessage API instead.
* Add admin.bypass_max_players CVar.
Just something to help with debugging the player cap on dev, I don't expect this to ever be disabled on real servers.
* Added new Buy & Sell specific cargo pallets
* Remapped trading outpost with new pallets, tweaked texture
* Removed debug message
* Fixed/Compacted conditional checking to let old pallets still work for backwards compatability
* Update Content.Server/Cargo/Components/CargoPalletComponent.cs
Alright, updating all the references to it.
Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
* Changed textures, changed to enum instead of string for pallet type check
* Few minor code tweaks/formatting fixes
* Missed the prototype change
* Update Content.Server/Cargo/Components/CargoPalletComponent.cs
* Update Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs
---------
Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
* Fix butcherable handling
* ItemSlots for clown shoes
* Return if handled
* Handle if popup
* Whitespace, spoons are metal
* Zero damage plastic utensils, blacklist by metal+melee
* Hmmm truthy
* Plastic knives are knives too, just use that
* Delete unused tag
* Always true if doAfter
* Raw rat meat should be sliceable too
* Fix rounds restarting in the next round
Doesn't fix them restarting in lobby I think but should fix most of it.
* delta india sierra charlie oscar romeo delta
* More solution edit windows
* Fix error when closing euis after round restart
---------
Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com>
* Add logs to things
* Make the message log be saved as msg because I forgor before.
* Log fails when getting an entity that doesn't exist
---------
Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com>
* Security hud shows icon based on criminal record status
* Criminal status now linked to name instead of identity
* parole loc
* Test fix
* review changes
* Check station records instead of storing names on criminal record consoles.
* cleanup
* more cleanup
* review changes
* change outdated comments
* rename
* review changes
* remove event subscription
* replaced event with trycomp
* default value
* refactor ops
* inherit dna and fiber when fish hydrated
* :trollface:
* kid named finger
* :trollface:
* move rehydrating to shared :trollface:
* nobody noticed the popup being missing all this time
* method ops
---------
Co-authored-by: deltanedas <@deltanedas:kde.org>
* Make itemslots more verbose with AME proof of concept.
* Remove unnecessary [DataField] strings and use null coalescing in whitelist checks.
* Change optional popup fields into LocId.
* fix: lobby music volume will be changed on options change without restart (also lobby music not looped anymore)
* refactor: now lobby music is part of ContentAudioSystem. Lobby playlist is used instead of single track. Client now selects next lobby soundtrack after previous finished.
* refactor: incapsulated info on current lobby track in simple record
* refactor: fixed inconsistent naming between song and soundtrack for lobbymusic
* refactor: xml-doc for LobbyPlaylistChangedEvent
* fix: inverted invalid _audio.PlayGlobal check to return only if lobby soundtrack play call failed
---------
Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
* add SubGamemodes comp/sys
* remove RuleChance from thief rule
* use SubGamemodes for adding thief rule instead of adding ThiefRule component to random gamemodes
* clean up thief rule prototype
* add better logging + end rule if it fails to start
* march 1st incident
* preset ops
* the dreaded
---------
Co-authored-by: deltanedas <@deltanedas:kde.org>
* Alert autoremove v0
* Code cleanup and timing
* comment
* Tritium, code compression
* not resolving manually
* reduced lookups, new comp
* fix-fix yes
* use RemCompDeferred, handle OnUnpaused
* missed a todo
* entitysystem resolve
* remove unnecessary component updates
* remove AlertState from comp, move EntityUnpausedEvent actions to AlertStateComponent's Timespan
* Code cleanup
* comments
* combines AutoRemove input into Clear
* minor logic adjustment that does not really change anything but is less ambiguous
* fix(research): Fix `ResearchSystem.Client` `UpdateClientInterface` preconditions.
Fixes a paradox where selecting a research server requires a research server to already be selected.
This would softlock the research client until it is reconstructed.
* style: Discards the discard operator
Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
---------
Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
* fix cryo removed minds of players who entered ghost role
Signed-off-by: c4llv07e <kseandi@gmail.com>
* better way to handle cryo with mind in it
Signed-off-by: c4llv07e <kseandi@gmail.com>
---------
Signed-off-by: c4llv07e <kseandi@gmail.com>
* NPC steering blending
Significantly more stable than using LastSteerDirection and also AntiStuck never got tripped locally when I was running around. I also left future notes for me to cleanup the pathfinder in future.
* Remove index
* Whisper bleed update v3
* missed a few
* Add bleeding message to health analyzer.
* Fix bleed notification not updating.
* Apparently this either doesnt exist
Validate that job and antag prototypes can actually be set in character profiles, rather than just checking if the prototype exists.
Make preferences system just call existing validation code when loading prototype from database, instead of some hacked-together stuff.
Also I made the character profile validation logic take dependencies in via parameter because fuck resolves.
* Implemented contents display for dispenser UI
* Update Content.Client/Chemistry/UI/ReagentDispenserWindow.xaml.cs
Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
* Resolve the netent into a euid first
---------
Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
Turns out this is not what serverid was for... i guess you can find server familys with this so im not gonna remove it. Best we get for server name is the admin logs server name.
* Added logic for ContainerSpawnPoint checks
* Improved with template function
* fixed nullable
* hehe
* hehe T?
* added type check before cast
* another nullable fix
* and another one
* return to old code (found typo)
* Code cleanup
---------
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
* Creat Execution Component and add to sharp items
* Kill Server ExecutionSystem. Create ExecutionSystem in shared. Create ActiveExecution Component.
Transferred the Execution system into shared. Heavily re-wrote the system in order to reduce duplication,
and remove gun code from the system.
The melee weapon modifier which was dependant on swing rate was removed.
The ActiveExecutionComponent was created in order to apply the damage modifier to the shot from a gun execution.
It is added just before the gun fires and removed after an attempt is made.
* Fix bugs
The execution completed text will now only show up if the gun fires.
The client also no longer crashes because I forgot to network the component.
* Remove clumsy text
* Make BaseSword abstract
* Add ExecutionComponent to every weapon
* Fix bug
* Remove execution comp from battery weapons
Currently the gun system does not have a way to alter hitscan damage like it does with projectiles.
* Cleanup
* Revert "Remove clumsy text"
This reverts commit a46da6448d5d179a4e936f9213d5622bedb58a16.
* Actually fix the ExecutionSystem
Everything about the shot goes through the gun system now.
The Damage multiplier is only applied when a projectile impacts the target so people that get in the way don't get hit
with 9 times damage for no reason.
In order to make suicides work I needed to create fake EntityCoordinates because the gun system and the projectile
system do not play well with a projectile that has the same start and end position.
* Make launchers able to execute
* Fix prediction bug
The OnAmmoShotEvent is only raised on the server.
* Readd ability for clowns to accidentally shoot themselves while executing
* Cleanup
* Reset melee cooldown to initial value
* Address reviews fix bug
Addressed reviews on overriding messages.
Now I actually mark doafters as handled.
Return normal cooldown to some meleeweapons I forgot on the previous commit.
* Address Reviews
Remove duplication
* Exorcise codebase
Remove evil null coercion that I was sure I removed a while ago
* Address reviews again
* Remove melee weapon attack logic and rely on the system. Remove gun and
melee checks.
* Make system functional again and cleanup
* Remove code I forgot to remove
* Cleanup
* stalled
* Selectively revert gun penetration
The collision layer check doesn't work and I don't have time to fix it.
* Fixes
---------
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
* please tell me this is empty
* it wasn't empty, fixing that
* This should fix it
* fix for the fix
* address changes
* fix
* Added some comments, hoping that failed test was a fluke.
* Make department / job list sorting consistent.
This makes late join, crew manifest and character profile all apply consistent sorting for jobs and departments.
We use the already-defined weights for departments (so command, then sec, then station specific, then just sort by prototype ID). Jobs also use weight (so heads are always at the top) then prototype ID, then character name (for manifest).
Removed the crewmanifest.ordering CVar as doing it via prototype weight is just easier, and that CVar was already a mess anyways.
* Fix jittery job icons in lists.
They were set to KeepCentered in TextureRect. This has issues because the allocated space is actually an odd number of pixels, so it tries to position the draw at a half pixel offset.
Now, yes, fixing this in TextureRect would make much more sense, but get off my back. (Ok seriously we need better helper functions for doing that in the engine. Don't wanna deal with that right now and I already have this patch made.)
Instead I'm just gonna fix the issue by using VerticalAlignment in all these places instead which ends up doing exactly the same thing YIPPEE.
Also gave a margin next to the icon on the crew manifest. Margins people!
* Fix formatting problem with FullOpened
* Moved to Shared and networked
* Revert "Fix formatting problem with FullOpened"
This reverts commit f8353403da830a4402bdd457bcf24a2432a5f566.
* fix: cryo pod now uses health-analyzer system to update body state in UI
* refactor: use EntityEventRefHandler instead ComponentEventRefHandler in CryoPodComponent subscribe on EntRemovedFromContainerMessage
---------
Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
* Add option for admins to disable bwoink
In a vain attempt to get people to ahelp more, provide the possibility
for admins to not play the bwoink sound if they don't want to scare the
player.
* Add silent indicator to discord relay
* Use string interpolation
* Fix drones
* They dont need a full bloodstream
* Incorrect indentation
* Nuke drones
* Fix ClothingHeadHatCatEars
* Remove last mention of drones
* Implement requested changes
* Remove second shove check.
* Change when popups and sounds are created.
Reduces phantom shoves that feel bad.
* why didn't i think of this i saw it earlier...
* Replaced Is fields with prefix
* remove some dependencies to fix tests???
God bloody christ. There's like three layers of shit here.
So firstly, apparently we were still using Npgsql.EnableLegacyTimestampBehavior. This means that time values (which are stored UTC in the database) were converted to local time when read out. This meant they were passed around as kind Local to clients (instead of UTC in the case of SQLite). That's easy enough to fix just turn off the flag and fix the couple spots we're passing a local DateTime ez.
Oh but it turns out there's a DIFFERENT problem with SQLite: See SQLite we definitely store the DateTimes as UTC, but when Microsoft.Data.Sqlite reads them it reads them as Kind Unspecified instead of Utc.
Why are these so bad? Because the admin notes system passes DateTime instances from EF Core straight to the rest of the game code. And that means it's a PAIN IN THE ASS to run the necessary conversions to fix the DateTime instances. GOD DAMNIT now I have to make a whole new set of "Record" entities so we avoid leaking the EF Core model entities. WAAAAAAA.
Fixes#19897
This is a visualizer somewhat similar to the Generic. It allows configuring appearance info based on specific CVars the user has set. This allows YAML to easily configure alternatives for accessibility CVars like reduced motion.
* Save round information into the replay
* Add round end text too
* This is way better
* Get actual job
* oop
* OK THERE
* Fake line endings to make life easier
* I was told this yaml is legal
* I just realised this will make my life easier
* REVIEWS BABY IM A PROGRAMMER MOMMY
* Live pjb reaction
* Live pjb reaction 2
* Reviews 2
* Dont need this
* Please no more have mercy on my soul
* Oh frick