* Move psychologist immunity from mind to skillchip (#55813)
Skillchips are neat, and this is the sort of "job-specific skill" that can remain job specific, but still gainable in the shift through in-universe means.
The logic behind the skillchip is that the supermatter is psychically sensitive, hence the hallucinations and headaches from looking at it and projecting the "correct mental aura" will help it calm down. But that is lore following mechanics.
Refactors skillchips to be able to automatically apply more than one trait.
* Move psychologist immunity from mind to skillchip
Co-authored-by: coiax <yellowbounder@gmail.com>
* Makes telsas move properly, they were ping ponging around due to how miniballs move, I've made the shocked targets list properly fill, and make the shocked targets list retain some entries to preserve momentum (#55712)
* Makes a few changes to tesla movment
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Fixes borg tiles (#55858)
- Fixes greyscale material floor tiles created from cyborg stacks
- Makes cyborg stacks contain materials
- Prevents a potential bug involving metalgen and stacks
* Fixes borg tiles
Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com>
* Refactors how movetypes are added and removed, No timers this time. (#55444)
* Refactors how movetypes are added and removed, No timers this time.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Fixes BRPED/rigged cell exploit and allows it to booby trap BRPEDs instead (#55447)
BRPEDs can teleport rigged power cells. Through cameras. These rigged power cells will then pretty much immediately explode. This is a tad imbalanced.
Behaviour modified. Attempting to use a BRPED on a machine and having it attempt to swap over a rigged cell will cause the rigged cell to immediately go to maximum charge and explode.
Adds some logging to accompany it.
Why It's Good For The Game
Blowing things up from across the cosmos is bad.
Rigging BRPEDs to be able to explode when some poor sucker uses it to change over a power cell is cool.
* Fixes BRPED/rigged cell exploit and allows it to booby trap BRPEDs instead
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* Deadchat plays everything - A simple way for admins to let deadchat control things. (#55314)
* Deadchat plays things
* Pocket lint
* View those variables
* Arr var
* Arrr save changes and don't code while drunk
* Loog dot exe
* Big ol' changes
* Deadchat plays everything - A simple way for admins to let deadchat control things.
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* Makes the supermatter crystal immune to radiation. Not sure how I missed this (#55710)
* Makes the supermatter crystal immune to radiation
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* WireArt: Fixed and improved (#55622)
Cyborg's pipe cleaner is now using a radial menu for choosing it's colors instead of a clumsy input one.
RCL now properly updates it's pipe cleaner holder's color, so you can actually see the color when using RCL radial menu.
RCL is now able to put cables down on floors seamlessly, as there is no reason to restrict it to just a plating and catwalks anymore due to the fact that pipe cleaner coils no longer function as a power carriers, but are merely visual entities for players to play with.
And lastly, pipe cleaners now use color defines and are setting its color directly instead of having redundant variable do it for them, which was needlessly complicating it.
* WireArt: Fixed and improved
Co-authored-by: Arkatos1 <43862960+Arkatos1@users.noreply.github.com>
* Refactor supermatter proximity effects (#55653)
- Psychologists are no longer mistakenly told they have headaches
when near the supermatter.
- Immunity to supermatter hallucinations is now provided by a new trait
`TRAIT_SUPERMATTER_MADNESS_IMMUNE`, provided by mesons, and being the
Psychologist.
- The ability for Psychologists to cause the supermatter to act slightly
differently (by turning pink, and having a higher minimum healing
temperature) is now a trait, `TRAIT_SUPERMATTER_SOOTHER`, which
currently only Psychologists get.
* Refactor supermatter proximity effects
Co-authored-by: coiax <yellowbounder@gmail.com>
* aaaaa (#55561)
Light fixtures now use different variants of overlays in order to be non-unique and save up on instantiating a TON of overlay objects. Also, fixed the GC for them
* Fixes GC for light fixture overlay, makes the overlay non-unique with extra variants
Co-authored-by: Azarak <azarak10@gmail.com>
* Tweaks lighting, adds preset lights for better mood lighting (#55513)
Tweaks existing lighting and adds some presets for mapping
Current list of presets is as follows:
Main Tube Lights: normal, cold and warm with a subtype each that disables night lighting
Red & blacklight (purple) for tube & small lightbulb
Why It's Good For The Game
Better support for more varied and interesting lighting. I made sure that the new presets are subtle and bright enough to not be distracting or made it harder to see
Changes to currently mapped lighting should be mostly unnoticeable, standard tube lights have a very faint greenish tint typical of fluorescent lights, while small lightbulbs have an orange tint reminiscent of tungsten lightbulbs
For mappers, I would suggest using types that disable nightlighting in work areas while keeping night lighting for hallways and other service/living areas.
Normal lights for hallways, cold lighting for medbay and science, warm lighting for bar, library and dorms, red lights for maintenance, maybe blacklight for server rooms etc.
* Tweaks lighting, adds preset lights for better mood lighting
Co-authored-by: Mickyan <38563876+Mickyan@users.noreply.github.com>
* Make singularity dissipation use delta time (#55612)
About The Pull Request
Converts singularity's dissipation code to use delta time instead of assuming it'll always be the same.
Numbers were based on the previous code given a delta_time of 2.
* Make singularity dissipation use delta time
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
* Refactors Beams to use signals: Revived from 2019 edition! BONUS: Medbeams are also refactored to use signals (#55193)
Huge removal of dead vars, bad timers, and other sloppy jitteriness from beams. They go from checking movement to waiting for a signal.
VARIABLE KILL LIST:
sleep_time: signals baby
finished: signals BAYBEEE
target_oldloc: not only not typecasted as a turf or named as a turf, it was unused. when are we going to use this? the beam starts from the origin!
origin_oldloc: bad name, not typecasted. renamed to originturf
static_beam: how are you an unused variable and still get replaced by signals like really
timing_id: signallllss bbbaaaabbyy
recalculating: you get the drill by now signals baby
base_icon: unused, seemingly replaced by visuals I think
* Refactors Beams to use signals: Revived from 2019 edition! BONUS: Medbeams are also refactored to use signals
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* Nar'Sie is now a point of interest (#55540)
Fixes a regression from the singularity rewrite that made Nar'Sie its own object.
* Nar'Sie is now a point of interest, and can be orbited directly again
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
* eh (#55529)
Fixes the supermatter not collecting unused/untouched gas type generated for percentage checking
* Supermatter gasmix cleanup
Co-authored-by: Ghilker <42839747+Ghilker@users.noreply.github.com>
* Crates and bountes are now defined by crate's value and paygrades. Civilian bounty payout is higher and uncheesable.
* Update shuttles.dm
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Replace direct poi_list manipulation with element (#55416)
Replaces GLOB.poi_list |= src and GLOB.poi_list -= src with an element that handles it directly.
More consistent code, especially when a lot of code couldn't decide how to add/remove (some |=, some -=, some .Remove, etc).
* Replace direct poi_list manipulation with element
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
* Refactors how movetype flags are added and removed and the floating animation (#54963)
I wanted to refactor how movetype flags are added and removed into traits to prevent multiple sources of specific movement types from conflicting one other. I ended up also having to refactor the floating animation loop (the one that bobs up and down) code in the process.
Why It's Good For The Game
A way to avoid conflict from multiple sources of movement types.
This also stops melee attacks, jitteriness and update_transform() from temporarily disabling the floating movetype bitflag altogether until the next life tick.
Tested, but i'm pretty sure improvements could be made.
Changelog
cl
fix: jitteriness, melee attack animations and resting/standing up should no longer momentarily remove the floating movement type.
/cl
* Refactors how movetype flags are added and removed and the floating animation
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Fixes cyborgs in general replenishing stack modules from external sources (#54935)
* Cyborg stack fix
- Makes cyborgs capable of recycling floor tiles again
* Touches up module code
- Makes module code slightly more OOP-compliant
- Speeds up module creation by an imperceptable amount
- Reworks how borg modules handle stacks
* Fixes cyborgs in general replenishing stack modules from external sources
* Update robot_modules.dm
Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Cell chargers now pull from the grid's surplus rather than their room's APC cell (#54989)
About The Pull Request
As the title says.
Creates a new proc, use_power_from_net() that attempts to pull power from the grid (by adding the amount needed to the APC's powernet load), and returns the amount gathered if there was enough surplus to do so. This bypasses the APC's internal cell for power drawn this way.
Changes cell chargers to use this new proc for charging a cell. The charger machine still uses some power from the APC, set to 1% of it's max cell charging rate, for machine-related power costs. I'm not deadset on that number, I just needed to start with something. To be clear, this 1% is to simulate running the cell charger's circuitry; all of the power for the cell it's charging is 1-to-1 coming from the powernet.
This does not subvert the original PR's purpose; cells are still drawing as much power from the grid as they charge with.
Why It's Good For The Game
Fixes cell chargers breaking rooms after the prior cell charger fix. The load is now on the grid, and it being surplus means that it (probably) won't actually powersink anything.
Fixes#54919 by taking a different approach that entirely avoids the issue.
* Cell chargers now pull from the grid's surplus rather than their room's APC cell
Co-authored-by: zxaber <37497534+zxaber@users.noreply.github.com>
* Re-assesses 99% of vending prices through Arconomics to match player resources and round-length. (#54715)
* The Re-pricening
* Rewritten and adjusted for paycheck defines.
* I made the map changes finally.
* And the refills too.
* "OH YEAH REPLACING IT ALL WITH DEFINES AND SCALING IT THE EXCEL DOCUMENT WILL BE EASY, ARCANE!!!"
* And the premium ones too.
* Accidently spoiled a future pr due to dme bleedover
* Re-assesses 99% of vending prices through Arconomics to match player resources and round-length.
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@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>
* 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>
* Converting the EMP protection component into an element. (#54617)
* Converting the EMP protection component into an element.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Increases the broken light spark cooldown 6 folds (#54579)
Whenever you stop to do something, and there's a broken light around, you would notice it spark, and if you stay, it sparks over and over again, becoming less of a nice rare occurance to something more annoying. This was very apparent during a shift yesterday on Manuel, where the entire station had lights broken, but they kept sparking over and over again and it never quite felt like we're in darkness.
* Increases the broken light spark cooldown 6 folds
Co-authored-by: Azarak <azarak10@gmail.com>
* Crystal invasion more rare (#54504)
This PR makes crystal invasion much rarer and confine it between 4500 and 5000 MeV
* Crystal invasion more rare
Co-authored-by: Ghilker <42839747+Ghilker@users.noreply.github.com>
* Standardizes attack chain signal returns and fixes a tk bug (#54475)
The attack chain is a bit of a mess, and the introduction of signals hasn't helped in simplifying it.
In order to take a step into untangling this, I re-ordered the attack signals to no longer be by source type and instead to be grouped more modularly, as they are all members of the attack chain and function similarly. They all share the trait of potentially ending the attack chain via a return, but had several different names for it. I joined it into one.
Additionally, fixed a tk bug reported by @ Timberpoes by adding a signal return check at the base of /mob/proc/RangedAttack
Lastly, removed the async call of /datum/mutation/human/telekinesis/proc/on_ranged_attack, which was added as a lazy patch to appease the linter complaining about a sleep on a signal handler (namely in /obj/singularity/attack_tk). Fixed the problem using timers.
Also cleaned some code here and there.
* Standardizes attack chain signal returns and fixes a tk bug
Co-authored-by: Rohesie <rohesie@gmail.com>