* SM Zap: Fix forked target selection (#62143)
Supermatter forked lightning can now hit targets previously used by a sibling.
The default setup - and anything using two grounding rods - was still entirely safe, as "pass by ref begone" code did allow target reuse in ancestors. Any split could only exclude one grounding rod, and if one branch split again, neither branch's targets would be passed back to the target list of the first split.
The same issue was not present in `proc/tesla_zap`. Probably still shouldn't have two of these, though.
* SM Zap: Fix forked target selection
Co-authored-by: esainane <esainane+github@gmail.com>
* Bullets only directly damage the SM so much (#62079)
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Bullets only directly damage the SM so much
Co-authored-by: Maurukas <66576896+Maurukas@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* The start
* More work
* firing modes
* Now displays ammo type when swapping and examining
* code refactoring
* replaces a bunch of code
* custom medicell text
* Update emitter.dm
* removes some testing stuff that isn't needed anymore
* repaths medicells
* This bothered me
* now uses conversion kit framework from https://github.com/Skyrat-SS13/Skyrat-tg/pull/8506/files instead of crafting
* no more regal rat runtimes, and, cheeeeeeeeeeeese can now be eaten by it (#62032)
* no more regal rat runtimes, and, cheeeeeeeeeeeese can now be eaten by it
Co-authored-by: Seris02 <49109742+Seris02@users.noreply.github.com>
* re-adds the yellow slimecore as an EMP-proof cell (#62013)
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* re-adds the yellow slimecore as an EMP-proof cell
Co-authored-by: Invalid <51190031+InvalidArgument3@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* lower sound level of coils, add a cooldown to avoid overlapping sounds (#62002)
Add a calculation to the coil sound and extrarange so that they are not deafening
Thanks to the discord user @ hawk#1896 for the sound calculations
Less deafening sounds and better feedback to the players (louder zaps mean higher power output)
* lower sound level of coils, add a cooldown to avoid overlapping sounds
Co-authored-by: Ghilker <42839747+Ghilker@users.noreply.github.com>
* Rad collectors gone, tesla coils to generate power (#61917)
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Rad collectors gone, tesla coils to generate power
* replaces rad collectors
Co-authored-by: Ghilker <42839747+Ghilker@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
Co-authored-by: Kat <evesovereign@hotmail.co.uk>
* SM: Prevent unmovable SM variants from moving (#62000)
Previously, a hostile statue could move it by bumping into it. It would
still be dusted, but this left open the possibility of supposedly
immobile engines moving, albeit slowly and expensively.
* SM: Prevent unmovable SM variants from moving, round 2
Co-authored-by: esainane <esainane+github@gmail.com>
* SM: Prevent unmovable SM variants from moving (#61970)
Previously, a hostile statue could move it by bumping into it. It would still be dusted, but this left open the possibility of supposedly immobile engines moving, albeit slowly and expensively.
Hostile Statues have a move_force of 9000, but continued to be able to bump the SM until move_force was varedited to 1999 or below. This means (at least) immovable rods and all megafauna could all bump an "immobile" SM one tile per life.
* SM: Prevent unmovable SM variants from moving
Co-authored-by: esainane <esainane+github@gmail.com>
* Adds SHOULD_NOT_SLEEP to Destroy. Why didn't we do this before. (#61943)
* Adds SHOULD_NOT_SLEEP to Destroy. Why didn't we do this before.
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Fix cable restraint not rendering in crafting menu (#61842)
Fixed the cable restraints not showing up in the radial crafting menu. This was caused by the cable restraint (cuff) icon being moved to the restraint.dmi file - I didn't see this old reference elsewhere in the code. (first TG commit, please let me know if I am missing anything.
* Fix cable restraint not rendering in crafting menu
Co-authored-by: Peter <30943236+PeterMorrison1@users.noreply.github.com>
* Add local APC cache to /area (#61655)
About The Pull Request
for(var/obj/machinery/power/apc/APC in GLOB.apcs_list) in get_apc makes chuck norris shed a tear
Why It's Good For The Game
tears are bad
Changelog
cl
code: /area now retains a local reference to the APC in the area, if any
/cl
* Add local APC cache to /area
Co-authored-by: esainane <esainane+github@gmail.com>
* Fix being shocked while laying cables having a 50% chance to give you two cables instead of one. (#61754)
Title
deconstruct already gives cable
* Fix being shocked while laying cables having a 50% chance to give you two cables instead of one.
Co-authored-by: vincentiusvin <54709710+vincentiusvin@users.noreply.github.com>
* [TM Candidate] Overhauls orbit and POI code to fix part of issue #61508 where players could observe /mob/living/new_player on the lobby.
* E
* Missed merge
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* memories are no longer added if the target isn't aware of them. (#61375)
Fixing an oversight with the memories system. Memories shouldn't be added to people who aren't possibly aware of them.
* memories are no longer added if the target isn't aware of them.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Fixes (somehow) killing nar-sie in the last second not properly clearing the hostile environment (#61116)
Someone forgot to add GLOB.cult_narsie so I think what would happen is, despite narsie being dead, the shuttle wouldn't leave.
Was a non issue because the round ends if nar nar is last minute killed. There is not enough time for the shuttle to even leave.
That said, unimportant failures are still failures, so let's get going
* Fixes (somehow) killing nar-sie in the last second not properly clearing the hostile environment
Co-authored-by: FlamingLily <80451102+FlamingLily@users.noreply.github.com>
* Revert "Revert "[MIRROR] Refactor area and turf lighting (#7775)" (#7902)"
This reverts commit 64c4c52d12.
* This should probably fix it
* I love linters
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* large refactor of machine/power code to cut down on processing time and wasted lists (#60317)
original pr here: #59789 (Closed because he didn't think it was good enough)
came back to this because i realized that
all machines were area sensitive, meaning they had a list with at least a reference to themselves (assuming they arent in the contents of another movable which most arent) for the purposes of handling power differences when their area changes
pipes are machines
there are ~14k machines and ~6k pipes
i made this problem worse with a recent pr by making it a nested list
so i needed to track what machines needed power, and this pr had work already done that could be used for that purpose. now machines that have use_power == NO_POWER_USE do not have this extra memory overhead for no reason
currently every machine that uses power draws that amount from its area from a dynamic channel via auto_use_power() which is called every SSmachines fire(), then in apc/process() the area's dynamic power draw is reset and the power is used. with static power its not calculated then reset every loop, its just taken from the grid. so now machines handle updating their static power usage from their current area (this doesnt touch power machines that require a wire connection). in order to allow this, use_power, idle_power_usage, and active_power_usage have setters to track state correctly and update the static power usage on the machines current area and handle area sensitivity.
also goes through a lot of heavy abusers of SSmachine processing time and tries to make it faster. makes airalarm/process() into a signal handler for COMSIG_TURF_EXPOSE since air alarms only need to process for changes.
Why It's Good For The Game
SSmachines isnt the heaviest hitter in terms of total cpu and certainly not in terms of overtime, but its not a lightweight. it frequently takes > 50ms to complete a run and seems to be in the top 5 or so of subsystem costs looking at some round profilers
also gets rid of a few thousand lists since every pipe no longer has two useless lists each (and any other machines that dont use power)
Love ya kyler
Co-authored-by: Rohesie <rohesie@ gmail.com>
* large refactor of machine/power code to cut down on processing time and wasted lists
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
Co-authored-by: Rohesie <rohesie@ gmail.com>
* small refactor to can_interact() so that borg range is fully respected (#60693)
Its a relatively small refactor that changes the previous machinery "can_interact()" proc that literally did a full override despite half of their checks already existing in not one, but TWO parent procs, so i removed the redundant checks, added callbacks to its parents and then added the cyborg range check on the can_interact_with() itself. in doing so i also moved the interaction range var from silicons only, to mobs as a whole and defaulted it to a single tile, silicons override it to 7 (so pAIs and borgs like before) but then set AI and AI.eye to "null", because i have a check in can_interact that if there is no range set, then the range is effectively unlimited. and i even added code for when AI is carded and their wireless transmission is disabled it sets their range to "0" aka, it has no range to do anything even if it could
this was really complicated for me so despite my extensive testing it probably would be a bad thing if any of you want to test my code yourself to ensure there isnt a bug with this (theres no runtimes ive come across)
note: i did a lot of searching and going through machinery to ensure i caught all the little snowflake overrides and added can_interact() checks to them, but i may have missed one or two things, especially maybe a altclick or ctrlclick somewhere, however i believe i caught most of them
one nice side effect of this refactor is that you can actually set another mobs range to something other than 1 tile and they can interact at range, rather than only silicons getting this ability, an admin could VV a human to have a 3 tile arm reach as a meme if they want
* small refactor to can_interact() so that borg range is fully respected
Co-authored-by: 小月猫 <alina.r.starkova@gmail.com>
* Refactors connect_loc_behalf into a component (#60678)
See title. Also refactors caltrops into a component because they use connect_loc_behalf which requires them to hold the state.
This also fixes COMPONENT_DUPE_SELECTIVE from just outright not working.
connect_loc_behalf doesn't make sense as an element because it tries to hold states. There is also no way to maintain current behaviour and not have the states that it needs.
Due to the fact that it tries to hold states, it means the code itself is a lot more buggy because it's a lot harder to successfully manage these states without runtimes or bugs.
On metastation, there is only 2519 connect_loc_behalf components at roundstart. MrStonedOne has told me that datums take up this much space:
image
If we do the (oversimplified) math, there are only ever 5 variables that'll likely be changed on most connect_loc_behalf components at runtime:
connections,
tracked,
signal_atom,
parent,
signal_procs
This means that on metastation at roundstart, we take up this amount: (24 + 16 * 5) * 2519 = 261.97600 kilobytes
This is not really significant and the benefits of moving this to a component greatly outweighs the memory cost.
(Basically the memory cost is outweighed by the maint cost of tracking down issues with the thing. It's too buggy to be viable longterm basically)
* Update glass.dm
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Del The World: Unit testing for hard deletes (#59612)
Co-authored-by: SteelSlayer <42044220+SteelSlayer@ users.noreply.github.com>
* Del The World: Unit testing for hard deletes
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: SteelSlayer <42044220+SteelSlayer@ users.noreply.github.com>
* Hulks and larvas will now dust when punching the supermatter (#60307)
* Hulks and larvas will now dust when punching the supermatter
Co-authored-by: TheSmallBlue <ilanmori@hotmail.com>
* makes a bunch of lists that use typecacheof() static. doesnt find out why its overtiming at all but what the hell it helps (#60147)
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* makes a bunch of lists that use typecacheof() static. doesnt find out why its overtiming at all but what the hell it helps
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* makes some instances of x^y into x**y because thats what exponents are in dm (#60050)
caught by monster at yogstation13/Yogstation#11703
probably not intended, 2^15 = 13 in dm so dont call this proc more than 13 times sequentially i guess
I have a suspicion that it doesn't matter assuming it gets caught by tick_usage being different but just in case
also fixes two other instances in code shown to me by mso
* makes some instances of x^y into x**y because thats what exponents are in dm
* Update lighting.dm
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>