* Transfer orbiters to changeling headslugs at birth (#60062)
This improves the observer experience.
* Transfer orbiters to changeling headslugs at birth
Co-authored-by: Wayland-Smithy <64715958+Wayland-Smithy@users.noreply.github.com>
* Makes mutant bodyparts and mutcolors into editable genetic traits (plus a whole shitload of otherwise out of scope code improvements because I just HAD to touch old code)
* Mirror
* genetically-editable mutant bodyparts and colors - skyrat edition
Co-authored-by: Funce <funce.973@gmail.com>
* Drastic Lag Mitigation Subsystem: SSlag_switch (#59717)
Requested by oranges and inspired by the upcoming event. A new subsyetem, non-processing (for now), aimed at providing some toggle switches that can be flipped as a last ditch effort to save some CPU cycles by sacrificing some non-critical mechanics. Below you can see each individual toggle.
Screenshot of the admin panel:
image
Surely there are more opportunities for toggles I missed, but adding new ones is not very difficult at all.
Why It's Good For The Game
Better performance during extreme pop, I hope.
Changelog
cl
code: Introduces the Lag Switch subsystem for when a smoother experience is worth trading a few bells and whistles for. Performance enhancement measures can be togged by admins with the Show Lag Switches admin verb or enabled automatically at a pop amount set via config.
config: Added a new config var: number/auto_lag_switch_pop
* Drastic Lag Mitigation Subsystem: SSlag_switch
* mirrored the changes to the modular file
Co-authored-by: Wayland-Smithy <64715958+Wayland-Smithy@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
* Rework C4 suicide phrases to be on the antagonist datum; add more phrases (#60029)
Fun fact. Did you know the C4 has special suicideverb phrases for most antagonists? That is, most antagonists. This adds a bunch in because someone noticed Heretic didn't have one special, and I noted quite a few minor antagonists didn't either.
The suicide cry phrases are now on the antag datum instead of in the if/else chain.
* C4 suicide phrases, but it's on the datum now
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Make the light eater a mining tool (#59985)
what the title says, light eater can now pick rocks
ive had a lot of rounds as admin on kilo/tram where i have to give them this so they arent stuck in gay baby jail forever
* makes the light eater a mining tool
Co-authored-by: Fikou <piotrbryla@onet.pl>
* Removes reference to intents from Martial Arts instructions (#59921)
In CQC, Plasma Fist, Sleeping Carp and Wrestling instructions verb:
Harm -> Punch
Disarm -> Shove
Also removed reference to intents from the changeling's tentacle grab, changing it to neutral/combat stance.
* Removes reference to intents from Martial Arts instructions
Co-authored-by: dragomagol <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Makes it so changeling legs copy digitigrade/normal, try number 2 (#59832)
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Makes it so changeling legs copy digitigrade/normal, try number 2
Co-authored-by: Seris02 <49109742+Seris02@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Changes how weather sends sound to players, reduces sound loop overtime (#59284)
* Converts looping sounds from a list of play locations to just the one
* Updates all uses of looping sounds to match the new arg
* Adds an area based sound manager that hooks into looping sounds to drive the actual audio. I'll be using this to redo how weather effects handle sound
* Some structrual stuff to make everything else smoother
Timers now properly return the time left for client based timers
Weather sends global signals when it starts/stops
Looping sounds now use their timerid var for all their sound related timers, not just the main loop
* This is the painful part
Adds an area sound manager component, it handles the logic of moving into new areas potentially creating new
sound loops. We do some extra work to prevent stacking sound loops.
Adds an ash storm listener element that adds a tailored area sound manager to clients on the lavaland z level.
It's removed on logout.
Adds the ash_storm_sounds assoc list, a reference to this is passed into area sound managers, and it's modified
in a manner that doesn't break the reference in ash_storm (This is what I hate)
* Hooks ash storm listener into cliented mobs and possessed objects
* Documents the odd ref stuff, adds an ignore start var to looping sounds, fixes some errors and lint issues
* Applies kyler's review
banging
Co-authored-by: Kylerace <kylerlumpkin1@ gmail.com>
* Cleans up some var names, reduces the amount of looping we do in some areas
* Makes the code compile, redoes the movement listener to be more general
* fuck
* We don't need to detach on del if we're just removing signals on detach
* Should? work
* if(direct) memes
Co-authored-by: Kylerace <kylerlumpkin1@ gmail.com>
* Changes how weather sends sound to players, reduces sound loop overtime
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Kylerace <kylerlumpkin1@ gmail.com>
* Fix hand teleporter and other portals looping forever (#59894)
Makes portals use Bumped() instead of COMSIG_ATOM_ENTERED for detecting atoms crossing the event horizon.
Removes unused and potential loop causing forceMove argument from do_teleport()
* Fix hand teleporter and other portals looping forever
Co-authored-by: Wayland-Smithy <64715958+Wayland-Smithy@users.noreply.github.com>
* Cyborg Cult Sacrifice Fix (#59675)
This PR fixes cyborgs' interactions with Cult's offer rune. Before this PR, the game would attempt to sacrifice the cyborg and put its mind into a soulstone by handing it over to a method that was incapable of doing so, thus creating an empty soulstone and permanently removing the cyborg from the round as a result. Now, attempting to offer a cyborg on an offer rune provides the first activator with an option of any construct to turn the cyborg into, and turns them into that when chosen, similar to how twisted construct operates but without the wait time.
Also moves cult construct list into global vars, renames THEME_CULT into THEME_FAKE_CULT and adds a real THEME_CULT for actual cult constructs, and added another proc to handle the class switching.
* Cyborg Cult Sacrifice Fix
Co-authored-by: RandomGamer123 <31096837+RandomGamer123@users.noreply.github.com>
* Fix missing SIGNAL_HANDLER (#59826)
Adds SIGNAL_HANDLER to everywhere that didn't have it that was picked up by dm-lua, which is now ready enough to catch these.
* Fix missing SIGNAL_HANDLER
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Modifies right click logic so that it is not the same priority as modifier keys. (#59656)
Strips out the existing right click code - Due to the myriad of ways right clicking has been implemented, dedicated signals and procs for right clicking without modifiers are fundamentally incompatible with our system of primary and secondary attacks.
Adds additional signals to attacking code. These signals allow atoms to cancel the attack chain early on secondary attacks, or override the standard procs and not send signals to prevent any undesired behaviour from signal handlers.
Items that used RightClick procs have been converted to attack_hand_secondary.
The slaughter demon, having its own set of snowflake code as poor OOP principles have been applied in UnarmedAttack() procs with lacking calls to parent procs and arbitrary redefinition of behaviour, checks for a right click in its own UnarmedAttack() and performs a bodyslam off that.
Storage components now hijack the secondary attackby stage via signals to handle their opening and closing shortcuts on right click. When you right click a storage component equipped item with an object in your active hand, the object has an opportunity to perform its logic in pre secondary attack code and cancel the attack chain. If it does not cancel the attack chain in pre-attack, then the storage component takes over for attackby and, if possible, opens the relevant inventory and ends the attack chain.
The forensic scanner is a proof-of-concept of this working in action. With its scan logic moved from afterattack code to pre attack code for right clicking, right clicking with the scanner will now perform a scan where previously one was impossible. Left clicking still does what it always does - Scans at the very end of the attack chain.
The logic still isn't perfect - For example, you still can't attack containers in melee even in combat mode (you'll either open them or put your weapon into them regardless of which option you choose) - But this is a better setup overall which allows for items to at least override this behaviour in pre-attack if needed.
* Modifies right click logic so that it is not the same priority as modifier keys.
* a
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Ghoul Moodlet + Max HP fix (#59682)
Adds ghoul moodlet.
Fixes a undocumented issue with ghouls dying and being revived with 25/50 max health.
* Ghoul Moodlet + Max HP fix
Co-authored-by: eeSPee <robotdevilinside@gmail.com>
* Fixes heretic books created by the ritual coming with free charges. (#59761)
Creates a new subtype of the Codex Cicatrix spawned by the ritual, that doesn't have any charges.
At the moment, you get a free point each time you make a new one.
* Fixes heretic books created by the ritual coming with free charges.
Co-authored-by: SpaceVampire <46720418+SpaceVampire@users.noreply.github.com>
* Makes turfs persist their signals, uses this to optimize connect_loc (#59608)
* Makes turfs persist signals
* Splits connect_loc up into two elements, one for stuff that wishes to connect on behalf of something, and one for stuff that just wants to connect normally. Connecting on behalf of someone has a significant amount of overhead, so let's do this to keep things clear
* Converts all uses of connect_loc over to the new patterns
* Adds some comments, actually makes turfs persist signals
* There's no need to detach connect loc anymore, since all it does is unregister signals. Unregisters a signal from formorly decal'd turfs, and makes the changeturf signal persistance stuff actually work
* bro fuck documentation
* Changes from a var to a proc, prevents admemems and idiots
* Extra detail on why we do the copy post qdel
* Makes turfs persist their signals, uses this to optimize connect_loc
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Adds set_density()
Fixes one instance of a duplicate density assignment on an object.
Comments two hacky usages of density which will have to forgo using the setter for now.
Lets us append code to the event of density changing.
Pretty sure this is leading up to some multitile object thing -Lemon
Co-authored-by: Rohesie <rohesie@gmail.com>
* Fixes nuke ops lobby meta exploit(#59716)
This pr fixes#56332 (Being able to meta nukie spawn. There was a linked solution which amounted to telling the equip to not make noise, but this code is pain)
Nuke ops leaders are given their paper during the memorize_code proc.
Nuke ops are moved to spawn after memorize_code is called.
So: nuke ops leaders got their paper before they were moved to the nuke ops spawn - allowing anyone to hear it that's nearby the spawn box.
This PR just moves the memorize_code call to after nuke ops are moved to their spawn, so it prevents the lobby from hearing the sound of the paper.
* Fixes nuke ops lobby meta exploit
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* During unit tests, does extra verification on text based overlays (#59553)
This makes it so during unit tests, adding a text based overlay to something will runtime if the icon does not have an icon state matching that text. I would do this during normal compiles as well but getting the icon states from an icon is surprisingly expensive.
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@ users.noreply.github.com>
* During unit tests, does extra verification on text based overlays
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@ users.noreply.github.com>
* AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
* Ads
* dddd
* a
* a
* a
* Update uniform_digi.dmi
* Update uniform_digi.dmi
* Update uniform_digi.dmi
* Some random new potted plants!
* a
* Update flora.dm
* a
* fixes
* a
* a
* e
* nuke pinpointer's process proc has some god damn code standards (#59579)
* nuke pinpointer's process proc has some god damn code standards
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* Makes obj_integrity only updated through procs (#59474)
Having things updating integrity directly is just going to cause more problems down the line as more elements and components depend on being notified of integrity changes. It's an easy mistake to make so making it private should deal with the problem.
get_integrity() might be useful in the future but is mainly a side effect of making obj_integrity private as that also disallows reads.
* Makes obj_integrity private and only updated through procs
* Mirror!
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
Co-authored-by: Funce <funce.973@gmail.com>
* use SIGNAL_HANDLER REEEEEE (#59242)
makes as many procs as i can find use the SIGNAL_HANDLER define which i assumed they all already did
* USE SIGNAL_HANDLER REEEEEE
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
* Slaughter demons use right-click to Slam rather than CtrlShiftClick (#59225)
Moves the slam function of slaughter demons to right-click rather than have it use Ctrl+shift+click.
* Slaughter demons use right-click to Slam rather than CtrlShiftClick
Co-authored-by: SgtHunk <68669754+SgtHunk@users.noreply.github.com>
* fixes traps not adding connect_loc in base type (#59196)
* fixes traps not adding connect_loc in base type
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>