* Converts A && A.B into A?.B (#54342)
Implements the ?. operator, replacing code like A && A.B with A?.B
BYOND Ref:
When reading A?.B, it's equivalent to A && A.B except that A is only evaluated once, even if it's a complex expression like a proc call.
* Converts all A && A.B into A?.B
Co-authored-by: ZeWaka <zewakagamer@gmail.com>
* Cleans up rat related features and makes Regal Ratking a rare spawn from mouse migration event. (#54191)
* Cleans up rat related features and makes Regal Ratking a rare spawn from mouse migration event.
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
* Enforce preserving parent proc return values across ui_act call stacks (#53964)
All ui_act procs should call parent by default. All procs should preserve the value of the parent proc when it's TRUTHY and pass it down the call stack. No UI should be interactible when its flags or state indicate it should not be, except when explicity overriden by child procs intentionally disregarding parent return values to achieve a specific goal.
* Enforce preserving parent proc return values across ui_act call stacks
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* Gives Public Mining on Icebox an Elevator, and just a TON of lift fixes so they're viable to map with. [MULTI-BEE] [:pslime: in the chat] (#53728)
add: Icebox now has an elevator! I just took the trousers of every shaft miner to batter town, word.
* Gives Public Mining on Icebox an Elevator, and just a TON of lift fixes so they're viable to map with. [MULTI-BEE] [:pslime: in the chat]
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* Fixes oversight with "tactical combat spinning" and flashes (#53823)
Using the spin emote can no longer let you RNG your way out of new flash mechanics.
Mobs have a new flag that is set to when they start spinning and unset when they stop.
Flashes now use this new flag when calcing deviation.
Tactical combat spinning using the spin emote now results in a full deviation flash when it may previously have resulted in a failure or half-deviation flash.
Emotes should either not influence combat at all (spin on floor when both players share the same loc, this was already handled by same-loc code), or negatively influence combat for the emote user (spin in all other circumtances, which is what this PR addresses).
* Fixes oversight with "tactical combat spinning" and flashes
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* Fix flash runtime, improve flash logic (#53784)
image
Flash + Emp = Flash with no user = Runtime.
Additional logic has been put in place to handle this.
I've also robustified the calculate_deviation proc to have explicit returns in every code path and simplified it to only care about the direction the victim is facing compared to the attacker's position.
* Magic numbers are bad because wizards are bad
* Rohesie feex
* Fix flash runtime, improve flash logic
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* Nerfs Flashes [Edge Awards 2020] (#53604)
Flashes now deal stamina damage and micro-stun, they deal higher damage than batons BUT they have a severe disadavntage in form of directionality. Stamina damage and the duration of the micro stun is determined by direction your enemy is facing.
* Nerfs Flashes [Edge Awards 2020]
Co-authored-by: EdgeLordExe <42111655+EdgeLordExe@users.noreply.github.com>
* Process procs now properly utilize deltatime when implementing rates, timers and probabilities (#52981)
* Process procs now properly use deltatime when implementing rates, timers and probabilities
* Review fixes
* Geiger counters cleanup
Made hardsuit geiger code more similar to geiger counter code
Geiger counters are more responsive now
* Moved SS*_DT defines to subsystems.dm
* Rebase fix
* Redefined the SS*_DT defines to use the subsystem wait vars
* Implemented suggested changes by @AnturK
* Commented /datum/proc/process about the deltatime stuff
* Send delta_time as a process parameter instead of the defines
Also DTfied acid_processing
* Dtfied new acid component
* Process procs now properly utilize deltatime when implementing rates, timers and probabilities
Co-authored-by: Donkie <daniel.cf.hultgren@gmail.com>
* Overlay lighting component (#52413)
Sparks no longer lag, projectile beams move super smoothly, same with mobs and whatnot. This also allows for easy expansion into directional lights, field-of-view, wee-woo rotating lights or whatever.
It does have a downside: things right-clicked or checked through the alt+click tab will show the light overlay:
This is a BYOND limitation, very well worth it IMO.
🆑
add: Smooth movable lighting system implemented. Projectiles, sparks, thrown flashlights or moving mobs with lights should be much smoother and less laggy.
balance: Light sources no longer stack in range, though they still do in intensity.
/🆑
* Overlay lighting component
Co-authored-by: Rohesie <rohesie@gmail.com>
* Voice analyzers will no longer accept any message when not recorded (#53033)
* Voice analyzers will no longer accept any message when nothing is recorded
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
* Adds SIGNAL_HANDLER and SIGNAL_HANDLER_DOES_SLEEP to prevent signal callbacks from blocking (#52761)
Adds SIGNAL_HANDLER, a macro that sets SHOULD_NOT_SLEEP(TRUE). This should ideally be required on all new signal callbacks.
Adds BLOCKING_SIGNAL_HANDLER, a macro that does nothing except symbolize "this is an older signal that didn't necessitate a code rewrite". It should not be allowed for new work.
This comes from discussion around #52735, which yields by calling input, and (though it sets the return type beforehand) will not properly return the flag to prevent attack from slapping.
To fix 60% of the yielding cases, WrapAdminProcCall no longer waits for another admin's proc call to finish. I'm not an admin, so I don't know how many behinds this has saved, but if this is problematic for admins I can just make it so that it lets you do it anyway. I'm not sure what the point of this babysitting was anyway.
Requested by @optimumtact.
Changelog
cl
admin: Calling a proc while another admin is calling one will no longer wait for the first to finish. You will simply just have to call it again.
/cl
* Adds SIGNAL_HANDLER and SIGNAL_HANDLER_DOES_SLEEP to prevent signal callbacks from blocking
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
* Tweaks voice analyzers, pulsing a grenade's bomb wire now uses the grenade's timer delay. (#52710)
Makes suicide bombing with voice analyzers harder, while keeping the more fun behavior by adding some tells and delays.
Things attached to a grenade's pulse wire use the grenades timer, rather then just insta booming.
* Tweaks voice analyzers, pulsing a grenade's bomb wire now uses the grenade's timer delay.
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Confusion will no longer continue to confuse after being cured (#52286)
* Confusion will no longer continue to confuse after being cured
* Grammar comment fix
* Move to status effect
* Remove test per request
* Make confusion a status effect, confusion curing now completely neuters the confusion
* set_confusion changes, get_confusion
* Fix confusion going down twice per tick
* Change strength = to proc
* Move procs to status_procs
* Confusion will no longer continue to confuse after being cured
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
* Color standardization, vars moved, and signals (#52574)
Defined all the existing light_color values.
Moved their definitions to colors.dm
Made white the default color. It was so already, but that was very obscured.
Moved the atom light-related variables to the atom definition.
Wrapped changes to variables such as light_color into procs that report the event through signals.
Moved the light_on variable to the atom level, also adding a signal for its changing, to represent toggling lights.
Cleaned up a little bit of code in where new variables were defined before redefinitions.
This is all atomization to reduce changes in #52413
None of this affect gameplay at all, it's all code cleaning and refactoring.
There's more colors to standardize, a search for color = will find lots of targets, and I see little need to have both the LIGHT_COLOR and COLOR patterns, but I don't want to make this PR bigger than it already is.
* Color standardization, vars moved, and signals
Co-authored-by: Rohesie <rohesie@gmail.com>
* Fixed#51574 - Added htmlrendertext and implemented it for the voice analyzer
* Made a htmlrendertext regex static
Co-authored-by: Bobbahbrown <bobbahbrown@gmail.com>
* Made a htmlrendertext regex static again
Co-authored-by: Bobbahbrown <bobbahbrown@gmail.com>
Remake of #50528
About The Pull Request
https://hackmd.io/@tgstation/r1tzxpwPL
Basically that.
Raw anomaly cores
Cargo crates for them (currently 5k credits each, please tell me if this is good I balanced it relative to other crates I have no clue what the current cargo "meta"/power levels are)
Finish the explosive/implosion compressor attackby and implosion procs
Map in the implosion compressor
Map in the roundstart 2 cores each type for science
Current values are set to maxcap at the 8th core, and 4 light radius (1/2/4 explosion required) at the first core. I think this is a bit low but I'm just going off the document.
The implosion compressor consumes the TTV + tanks on an attempted detonation, regardless of success. However, the "bare minimum" of checks are included (it won't let you insert incomplete TTVs. It will however, let you insert TTVs that have no explosive potential (test your bombs like you test your code ;) ), and will not waste the raw core if you fail to make a high enough radius.
Props to @ArcaneMusic for the machine sprite!
Why It's Good For The Game
image
Start of the anomaly core system I guess, gives toxins a use other than doing the quirky 50k maxcap tritium speedrun rush (or was that removed already?).
Yadda yadda allows locking items behind it and another method of getting these other than supermatter overloads (I don't know if that is already gone either by the by).
Changelog
🆑
add: An explosion compressor has been added to science. It makes raw anomaly cores into proper anomaly cores using prepared TTVs of a specific required blast radius.
/🆑
* Renames a few variables. Also reorders fallback order again.
Renames item_state to inhand_icon_state
Renames mob_overlay_icon to worn_icon
Renames mob_overlay_state to worn_icon_state
worn_icon_state/mob_overlay_state now never gets used for inhands.
* Fixes some comments
* Fixes map issue
* Restart lints
* Properly resolves conflicts
* Adds a freezy igniter
* adds to component vendor.
* don't nightcode.
* Back to condenser names.
* Adds to autolathe as well.
* Applies heat to flamethrower_process.
* Refresh
* Review changes
* Undefines properly I think.
About The Pull Request
Extools maptick stuff is in the game. Stolen from BeeStation/BeeStation-Hornet#1119, improves performance. Requires ex-tools on the server, though.
Explosions have been refactored to do the actual exploding in a subsystem.
Credit to goon.
Here's some videos!
Why It's Good For The Game
Basically instant max-caps now.
We can now give more of a tick over to the sending of map updates
Changelog
cl Goonstation Coders, Beestation, Extools devs
refactor: Explosions have been heavily optimized.
/cl
* Splits anomaly cores into separate versions
* Converts the wormhole projector to require a bluespace core.
* Cleaned up a few lines
* Fixed small bug issues
* The gravity gun now requires a grav core. Increased weight of some anomalies.
* Enables high-intensity grav anomaly
* Fixing minor issues
Adds a hypnotic flashbang, disguised as a regular flashbang, to the traitor/nuke op uplink. Pretty much an AoE one-use hypnotic flash, but it doesn't require weakening the targets as long as they can be affected by the sound of the grenade, since it causes minor hallucinations.
Why It's Good For The Game
Effectively this is a non-lethal, non-destructive chaos-making tool. Even without the hypnosis it's a better flashbang; if everything goes right you've got a roomful of followers obeying your orders, but on the other hand something might go wrong, and then Poly is the one with the roomful of followers.
Changelog
🆑
add: Added a hypnotic flashbang to the uplink for 12 TC. It can hypnotize people much like a hypnoflash, and the sound will automatically make victims vulnerable to the trance.
/🆑
AddComponent/AddElement now support named arguments. This requires passing around an argument list instead of using actual proc args which a bit gross but we can blame byond for forcing this.
InheritComponent uses mirrored init arguments instead of an argument list which means no more accessing it via index to get to the same arguments as in init.
As a small bonus I restructured dcs defines to be a bit more manageable. Mainly just splits them into separate files and gives them their own folder.
Trying this again. When *spin-ing as a cyborg, the way mobs are thrown off you depends on your intent. On help intent, they will be thrown a shorter distance from you and will never be damaged or stunned (they will still be knocked down). On harm intent, they will be thrown the current distance and will be damaged and stunned if they hit a wall or another person.
WHAT THIS ACTUALLY CHANGES:
Currently, whether or not *spin-ing will actually hurt/stun someone depends on whether or not the *spin-ing borg is emagged. This PR also reduces the range of the help intent throw, but since the knockdown happens whether or not the thrown mob hits something this is in most circumstances a cosmetic change. So, in summary, if you are a non-emagged borg in help intent the only thing this changes is you will chuck people a slightly shorter distance.
Why It's Good For The Game
This isn't exactly the most important change, but a borg should be able to control their behavior. Having damage/stun from throwing determined solely by emag-ness seems more like a hacky kludge than a legitimate design choice. Also, having the behavior of borg-throwing determined in the code for carbons is messy.
Changelog
🆑
add: The behavior of cyborg's *spin emote now changes with intent; on harm intent, it will throw its passenger farther and damage and stun them if they hit a wall or another person.
/🆑
Added pickup_sound and drop_sound to all componets using the provided sounds, they are not all unique sounds, and share the same sound files, but i think its a nice little addition,
also added these sounds to the mousetrap as it fit nicely.