* fixes the flags of some shocks (#54906)
## About The Pull Request
The shocks from the shock touch mutation now ignore insulated gloves, because you're touching your victim's body, not giving them a handshake.
The shocks from punching charged energy fields (special holosigns from emagged cyborgs) now DON'T ignore insulated gloves, because you're literally punching them with your hand.
The shocks from running into charged energy fields now DON'T ignore insulated gloves, to be consistent with things like electrified doors.
The shocks from the on_mob_life() effect of liquid electricity now ignore insulated gloves, like the shocks from the on_mob_life() effect of teslium do (thanks for pointing this out, Angustmeta!).
## Why It's Good For The Game
Logical sense and consistency in what forms of protection shocks check for are good things, I think.
* fixes the flags of some shocks
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
* Fixes Space Ninja Comms Console Hack Not Working on Occasion (#54921)
* Fixes Space Ninja Comms Console Hack Not Working on Occasion
Co-authored-by: IndieanaJones <47086570+IndieanaJones@users.noreply.github.com>
* Old Medibot should now heal things besides brute (#54907)
Old medibot had a heal_threshold of 0, so all the heal_threshold checks will always evaluate to TRUE, so the medbots always get stuck in brute healing.
* Old Medibot should now heal things besides brute
Co-authored-by: prodirus <44090982+prodirus@users.noreply.github.com>
* Pies are now refactored for new foods. (#54751)
Moves over pies to the newfood typepaths, as well as the few select pie slices.
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@ users.noreply.github.com>
* Pies are now refactored for new foods.
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@ users.noreply.github.com>
* Fixing cult turf overlays not showing under transparent tiles. (#54782)
vis_contents always render the turf above other atoms of the same layer
* Fixing cult turf overlays not showing under transparent tiles.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Refactored 'IsAdvancedToolUser' into a macro plus relative trait. Tweaked 'can_hold_items'. (#54665)
The PR aims to allow advanced tool users to be defined by traits rather than a hardcoded proc.
Also necessary for the CanUseTopic refactor I'm working on, which will be PRed separately for atomization purposes.
This PR also fixes an inconsistency with can_hold_items (since monkeys can actually hold items).
* Refactored 'IsAdvancedToolUser' into a macro plus relative trait. Tweaked 'can_hold_items'.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Beauty component improvements. Two new fantasy component prefixes (#54622)
Title. Changed the component backend code slightly to allow a single component to hold the total score instead of spawning new components. This should fix cases, such as material stacks without the MATERIAL_NO_EFFECTS flag, where multiple set_costum_materials calls can be made and new beauty components spawned.
* Beauty component improvements. Two new fantasy component prefixes
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* fixes a compile error in reference tracking verbs caused by an improper versioning change (#54877)
* Makes the old reftracking option compile!
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Fixes a few bugs with greyscale stacks. (#54858)
Fixes greyscale floor tiles merging regardless of their materials.
Fixes greyscale floor tiles voiding materials when splitting the stack.
Fixes greyscale floor tile stacks being created with no mats_per_unit and only enough custom materials for a single unit.
Fixes greyscale tile flooring being created with the wrong amount of materials.
Fixes greyscale tile flooring not producing floor tiles/producing floor tiles with 0 units.
* Fixes a few bugs with greyscale stacks.
Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com>
* Cell chargers now respect the law of conservation of energy. (#54886)
## About The Pull Request
Hopefully I can make this PR as knowledge filled as possible, so sit down and buckle up, because we're about to talk about POWER USE.
So, machines use power. The station uses power. Without power, key, critical aspects of the game don't function, and keeping the station's lifeblood pumped with electricity is the primary goal of the engineering department. Cool. So there's currently 2 methods of "power use" that machines can use, that is, through the passive use of power (Assigned by the `idle_power_usage` and `active_power_usage` variables), or through the `use_power()` proc. What's interesting, is that neither proc actually draws directly from the cell of the APC, which is sort of assumed by a proc called `use_power()`, after all. Where the passive power draw aspect of an APC is done automatically as machines are processed, and then applied to the APC seperately, taking power per cycle, use_power just applies a temporary blip of power usage to one of the APC's power tracks (Equipment, Lighting, or Enviroment). One would assume then that this temporary power drain would apply for long enough that it would apply the intended cost to the cell, and then turn off.
But I'm making this PR, right?
So the most egregious issue this brings is in terms of the cell recharger. If you place a power cell into a cell recharger, the recharger calls use_power every processing tick in order to reduce the APC cell by an equivalent amount to what the cell is intending to gain in charge. After all, you're just moving the charge from the APC to the power cell, plus the processing charge required by the cell_charger. However, lets look a bit closer at how use_power actually works. For this example we'll use a default, unupgraded cell recharger attempting to put it's default 250 watts into an empty bluespace cell.
Because power is heavily linked to the area that the machinery is placed in, we snag the area, determine the power channel, and call a use power proc on the area. The area use power proc simply adds that 250 watts, or rather joules into the equipment power channel of the APC, a part of power usage. All of this is parroted over to the APC's processing side, where the actual cost to the power cell is calcualted as follows:
`var/cellused = min(cell.charge, GLOB.CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell
cell.use(cellused)`
So that number, the 250 joules of power we're calling to the cell, is actually being multiplied by a global cellrate, which is applied to every power drain on the station, actually charging the APC cell a total of 0.5 kj.
Based on some rumentary math and some experimentation, I filled a full bluespace power cell with 40Mj of power using 351 Kj of power from a standard, stock APC cell with no other drain except the 5 joules of power draw from the cell recharger.
So: What does this mean?
- Power draw is completely fucking busted (We knew this).
- Using two power cells, an APC, and an inducer, you can create infinite energy, anywhere, at zero cost to the station.
- We really need to make cell recharging a direct power draw.
Thankfully, that last one actually fits the portfolio of being a fix!
This adds a new proc to machines called `directly_use_power`. It does what it says on the tin, directly charges the APC for instances where power is going 1-1 from a power cell to another cell, in order to prevent infinite energy exploits.
## Why It's Good For The Game
Power is all kinds of unbalanced. Attempting to enforce the concept that a single unit of power is equal to itself is probably a good step in the right direction and in all likelyhood appears to have been the original intent with cell chargers in the first place.
I'm self-aware enough to see that this has ramifications beyond just fixing an issue within the cell charger alone, so if maintainers want to close this until december that's perfectly fine, but this is one of those things that could really easily snap basic station balance in twain.
* Cell chargers now respect the law of conservation of energy.
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
* Fixes mob_holders not going into storage (#54837)
#53305 made it so clothing objects without an icon_state on initialize were given ABSTRACT flags.
unfortunately for mob_holder objs, they gained their icon after that step of initialization.
this PR just moves the parent call to after the icon_state is updated, preventing them from incorrectly gaining the abstract flag.
Fixes#53872
* Fixes mob_holders not going into storage
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* radial menus ignore the anchor's alpha, color and transform now. (#54870)
* radial menus ignore the anchor's alpha, color and transform now.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Cleans up a mistake with baseturfs, prevents ref oddness (#54888)
When there's only one baseturf, we expect it to be stored not as a list, but as a single item.
I failed to support this in my string lists pr, which caused a few related issues.
Fixes#54880 , alt of #54883
* Makse baseturfs work as expected
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Performance Logging no longer produces broken csv files (#54894)
Also better file names so it's easier to mass scrape them.
* Performance Logging no longer produces broken csv files
Co-authored-by: Rob Bailey <actioninja@gmail.com>
* Fixing armsy del ref issue and invincibility (#54879)
On the second iteration of the for/var loop found on `Initialize()` the `front` variable of the second link of the armsy worm (the one just before the head) is set to `null` because `next` is also `null`. That said, the second link will fail to soft delete because it's still referenced in the `back` variable of the first link since the `front.back = null` line on `Destroy()` can't reached.
Also the code was formulated in a byzantine way.
* Fixing armsy del ref issue and invincibility
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Removes duplicate flyperson organ assignments (#54897)
mutantliver and mutantstomach were set twice for the flyperson race; this is no longer the case.
Also, I moved the place where mutanttongue is set for the flyperson race down to where the other mutant organ variables are set for them.
* removes duplicate flyperson organ assignments
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
* Makes /obj/machinery/door/airlock/do_animate non blocking (#54899)
Vehicles driving into a door runs the following code:
```
/obj/vehicle/Bump(atom/A)
. = ..()
if(emulate_door_bumps)
if(istype(A, /obj/machinery/door))
var/obj/machinery/door/conditionalwall = A
for(var/m in occupants)
conditionalwall.bumpopen(m)
```
This seems fine, but `do_animate` (called by `bumpopen`) sleeps for 0.6 seconds if the access was denied. This means that this code looped over every occupant, and waited 0.6 seconds if the user didn't have access. This is notably problematic for clown cars, which have God knows how many occupants in them at a time.
This PR makes `do_animate` non blocking so that this problem does not occur.
Another possible solution is to make the `bumpopen` call invoked asynchronously, but I prefer this solution unless there is some performance loss with it since we don't seem to like sleep anyway.
* Makes /obj/machinery/door/airlock/do_animate non blocking, fixing clown car access woes
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
* Borgs synced to an AI using Doomsday will have their lights force-set to red and enabled to at least level 1 (#54677)
* Borgs synced to an AI using Doomsday will have their lights force-set to red and enabled to at least level 1
Co-authored-by: zxaber <37497534+zxaber@users.noreply.github.com>
* Fix royal alien pixel offset, change getter to variable (#54706)
Fixed a bug where royal aliens would have their base pixel offset applied twice, making them off-center (https://i.imgur.com/BtspaM0.png)
Changed the mob/living procs get_standard_pixel_x_offset() and get_standard_pixel_y_offset() to variables (body_position_pixel_x_offset and body_position_pixel_y_offset), to match the contribution guidelines.
Also corrected a few random things that weren't using base pixels but should have been.
* Fix royal alien pixel offset, change getter to variable
* Update pixel_shift.dm
Co-authored-by: Yenwodyah <yenwodyah@gmail.com>
Co-authored-by: Azarak <azarak10@gmail.com>
* Fixed inconsistencies with the extradimensional blade nullrod. (#54868)
* Fixed inconsistencies with the extradimensional blade nullrod.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Construction icon states for multiz disposals and another peeve. (#54861)
Title. Also added handle_atom_del to disposal machines/pipes in the case the stored construction part is somehow deleted.
* Construction icon states for multiz disposals and another peeve.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Luminescent eyes no longer toggle back on with movement. Colour switching keeps light on. (#54873)
* Luminescent eyes no longer toggle back on with movement. Colour switching keeps light on.
Co-authored-by: prodirus <44090982+prodirus@users.noreply.github.com>
* Fix erroneous logging of config errors for str_list configuration type (#54676)
Fixed issue brought up by @ Cyberboss wherein the new ``str_list`` config type doesn't properly return true after setting the values and as a result has an erroneous error pop up in the config error log.
* Fix erroneous logging of config errors for str_list configuration type
Co-authored-by: Bobbahbrown <bobbahbrown@gmail.com>
* The clown PDA now has in-built comedy detection for when something happens to the clown and plays a fitting sound. (#54695)
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@ users.noreply.github.com>
* The clown PDA now has in-built comedy detection for when something happens to the clown and plays a fitting sound.
Co-authored-by: Qustinnus <Floydje123@hotmail.com>
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@ users.noreply.github.com>
* Mob stays vertical while in cryo (#54800)
Currently, mobs in cryo will turn horizontal in the cryotube when they fall unconscious. This should stop that.
* Mob stays vertical while in cryo
Co-authored-by: prodirus <44090982+prodirus@users.noreply.github.com>
* Webedit about an old baseturfs line that was not removed. (#54860)
A line that modifies baseturfs was left in with its replacement, this cleans it up
* Webedit about an old baseturfs line that was not removed.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* fix#54855 (#54857)
Fix disappearing baseturfs
Bugs is bad
(Lemon: Dumb mistake with length of one baseturfs, this fixes it and prevents random space tiles spawning with proper crowbar use)
* fix#54855
Co-authored-by: Dennok <Deneles@yandex.ru>
* performance logging (#54809)
Dumps a bunch of perf info to a csv every 10 seconds.
Currently this info is only stored in blackbox where it's effectively useless.
csv is a very easy to parse format and is natively supported by a lot of data analysis tools
* performance logging
Co-authored-by: Rob Bailey <actioninja@gmail.com>
* Handful of minor text fixes#54774
Space Dragons used a visible_message when the user renamed themselves, and touch spells messaged the wrong person about disappearing when destroyed. This PR fixes those two issues.
Edit: Also fixes an extra space in bodies slamming into bodies and admin edited shuttle timers showing the wrong value (setting the timer to 30 seconds would show 3 seconds, 300 would show 30, etc)
* Handful of minor text fixes
Co-authored-by: Rohesie <rohesie@gmail.com>
* Blast doors and shutters no longer open when bumpopen() is called (#54851)
Overrides the `bumpopen()` proc on pod doors to do nothing. This proc was unreachable normally, because the `Bumped()` proc is also overridden. However, my recent fix for mechs being unable to open airlocks was to have the mech call `bumpopen()` on the door with the pilot as the mob, since this proc is what handles door permissions anyway. Since pod doors cannot be `Bumped()`, they have no permissions set, and so mechs could open all shutters and blast doors. This fixes that.
* Blast doors and shutters no longer open when bumpopen() is called
Co-authored-by: zxaber <37497534+zxaber@users.noreply.github.com>
* Easier Medipen Identification, Medipen Box (#54698)
* Medipen Differences
Adds a box for medipens, and gives each of the "common" pens a new look.
* Adds medipen box to craftables.
* Lighter first aid pen.
* Easier Medipen Identification, Medipen Box
Co-authored-by: Winter Flare <7543955+Owai-Seek@users.noreply.github.com>