## About The Pull Request
Depends on #94064 for the unit test but offers a better method for
finding an atom to mount on
- Finding a mount now takes into consideration the objects pixel x & y
offsets meaning diagonal mounting is now supported. Gives great
flexibility for mappers
- If you don't want to use pixel offsets but default back to using the
objects direction that behaviour is still preserved. Useful if your
object uses directional icon states(lights & cameras for now) AND don't
use offsets
- If no direction could be specified then as the last resort it defaults
back to the objects local turf for mounting
## Changelog
🆑
fix: all mounted objects on tables, fences, windows & walls should fall
of correctly when the atom it is placed on is destroyed
fix: security telescreen now falls off when their mounted wall is
destroyed
fix: defib wall mount falls off when their mounted wall is destroyed
fix: floor lights are mounted to the ground/catwalk/tram floor they are
sitting on meaning destroying it will destroy the light
fix: wall mounted plaques now fall off when their mounted wall is
destroyed
/🆑
## About The Pull Request
The AI core structure now fully integrates item/tool interactions and no
longer uses attackby/take_damage overrides. Construction behaviour has
been isolated into its own file.
All handling relating to the AI core's status when shunted has been
turned into signals. For this reason, helper procs for managing core
link state have been made and integrated into the relevant users (APC
shunting, mech takeover). The AI core no longer references the remote AI
mob.
/obj/structure/ai_core/deactivated has been removed from code since it
had no function after refactoring. There was only a single instance of
it being used in a map, which has been replaced with a var edit.
There may be more things I changed, but I'm h
## About The Pull Request
Depends on #94064 for the unit test but offers a better method for
finding an atom to mount on
- Finding a mount now takes into consideration the objects pixel x & y
offsets meaning diagonal mounting is now supported. Gives great
flexibility for mappers
- If you don't want to use pixel offsets but default back to using the
objects direction that behaviour is still preserved. Useful if your
object uses directional icon states(lights & cameras for now) AND don't
use offsets
- If no direction could be specified then as the last resort it defaults
back to the objects local turf for mounting
## Changelog
🆑
fix: all mounted objects on tables, fences, windows & walls should fall
of correctly when the atom it is placed on is destroyed
fix: security telescreen now falls off when their mounted wall is
destroyed
fix: defib wall mount falls off when their mounted wall is destroyed
fix: floor lights are mounted to the ground/catwalk/tram floor they are
sitting on meaning destroying it will destroy the light
fix: wall mounted plaques now fall off when their mounted wall is
destroyed
/🆑
## About The Pull Request
Macros that are strings do not need to be doing this.
## Why It's Good For The Game
Less improper things to copy paste existing in the codebase
## About The Pull Request
This 1st has to be PR'd so the integration tests can point out all
wallmounts that could not find a support structure to mount on. I then
will do many map edits to align them onto the closest atom
Yes we no longer use wall mount but atom mounted component. All objects
that are mounted on windows/tables & fences now also fall off when
destroyed
It'll probably be a WHILE before I can fix all wall mounts. Long day.
Expect me to misalign many stuff to fix failing CI so make sure to
provide suggestions when possible
Improved wallmount code overall
- Fixes#93793
## Changelog
🆑
fix: fixes all incorrectly maploded wall mounts that aren't actually
hanging on any support structure
fix: objects mounted on tables, windows & fences also fall off now when
destoryed
qol: lights can be mounted on windows
qol: cameras can be mounted on windows
qol: buttons can be mounted on tables
refactor: improved how wall mounts interact with objects as a whole
report bugs on github
/🆑
## About The Pull Request
- Fixes#93392
- Replaces all custom callbacks with call to `deconstruct()`. The
callbacks weren't necessary as it did the same thing as `deconstruct()`
but in an round about way
- Removed duplicate `Initialize()` procs and the params `building` &
`ndir` from all wall mounts. Makes everything cleaner
## Changelog
🆑
fix: wall mounts placed by player now falls off when the wall they are
mounted on is destroyed
code: cleaned up wall mount code
/🆑
## About The Pull Request
Removes Skyrat's convoluted system of delaying lights based on mapload
status, instant flags, etc. Perhaps it was useful years ago, but TG
lighting code is now fine and the wheel doesn't need to be poorly
reinvented.
## Why It's Good For The Game
It's cool that the station lights flicker when things explode, but it
makes me irrationally mad that this useless additional lighting code
adds delay, making the effect show up well after the bomb goes off.
## Changelog
🆑 LT3
code: Removed some Skyrat lighting delay code
/🆑
---------
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
## About The Pull Request
If an APC was emagged it would permanently half-break as it would assume
that it had a malf AI that it needed to add points to, and would not
update its charge states
## Changelog
🆑
fix: Fixed constant runtimes and broken APC processing behavior on
emagged APCs
/🆑
## About The Pull Request
This fixes several bitfield operations that were missing parenthesis
encapsulation. I noticed this problem in:
- #92601
And decided to use regex to search for similar patterns which I came
across in:
- Move loops bypassing the `MOVELOOP_STATUS_RUNNING` status
- Elastic arms mutation bypassing `ABSTRACT` object flags for picking up
objects
- Species radiation bypassing `HEAD_HAIR` hairstyle flags for balding
- Damaged APC board status bypassing `EMAGGED` and `BROKEN` status for
screentips
- Shuttle cleanup code bypassing `MOVE_CONTENTS` for moving old turfs
- Tram crossing signals bypassing `NORTH` and `EAST` direction checks
## Why It's Good For The Game
Code behaves as intended.
## About The Pull Request
Fixes the bugged malf ai descriptions, properly describing which modules
need minimum number of hacked apcs
Adds a processing power limit to discourage just sitting on your ass for
2 hours to stack up infinite points
Increases the power draw of hacked APCs to increase the phantom drain on
powernet brought by malf hacking a lot
## Why It's Good For The Game
Discourages hacking two apcs and waiting for next two hours. Also having
working descriptions is cool.
## About The Pull Request
Fixes the bugged malf ai descriptions, properly describing which modules
need minimum number of hacked apcs
Adds a processing power limit to discourage just sitting on your ass for
2 hours to stack up infinite points
Increases the power draw of hacked APCs to increase the phantom drain on
powernet brought by malf hacking a lot
## Why It's Good For The Game
Discourages hacking two apcs and waiting for next two hours. Also having
working descriptions is cool.
## About The Pull Request
AI now gains its malf points over time, based on the number of APCs
hacked. I also added a simple way to lock malf modules from being bought
if you haven't hacked enough APCs, to avoid cheese with delta or robot
factory.
## Why It's Good For The Game
APCs hacked are a constant risk of being found, and instantly targeted,
yet they give one time bonus, that is fairly small. This incentivises
not using antag powers, and using natural AI tools, which blurs the line
for the crew between malf and subverted AIs, and makes fighting it
easier and more boring. With constant gain from the APCs the risk of
being found is rewarded, and malf that hacks a big amount of APCs and
avoids being found can use its powers fairly liberally, at a cost of
having to manage the detection chance.
## About The Pull Request
AI now gains its malf points over time, based on the number of APCs
hacked. I also added a simple way to lock malf modules from being bought
if you haven't hacked enough APCs, to avoid cheese with delta or robot
factory.
## Why It's Good For The Game
APCs hacked are a constant risk of being found, and instantly targeted,
yet they give one time bonus, that is fairly small. This incentivises
not using antag powers, and using natural AI tools, which blurs the line
for the crew between malf and subverted AIs, and makes fighting it
easier and more boring. With constant gain from the APCs the risk of
being found is rewarded, and malf that hacks a big amount of APCs and
avoids being found can use its powers fairly liberally, at a cost of
having to manage the detection chance.
## About The Pull Request
- If a cable is destroyed by an explosion, all rooms within 64-100 (it's
a probability) tiles AND which are connected to the same powernet as the
split cable will have their lights flicker 1-3 times.
- Also adds a verb for visualizing powernets.
- Reduces cable integrity from 300 to 50.
- Cables have innate 75% bomb armor when under a floor tile.
## Why It's Good For The Game
- A big devastating explosion a few doors down is, usually, not felt at
all outside of the screen shake. This adds a bit more ambience to the
effect - you hear a big explosion, your screen goes wild, and the lights
cut for just a second.
- Verb just makes it easier to trace powernets.
- I found it a little ridiculous that cables have 300 integrity, the
same as most furniture. This ultimately makes them a lot more vulnerable
to stuff like acid and fire.
- To compensate for their drastically reduced integrity, I gave cables a
considerable boost to explosive resistance while concealed under the
floor. This prevents bombs from outright shredding all cables in a 50
mile radius. (Devastating explosions will still one-tap them, but heavy
explosions will on average take two blasts.)
## Changelog
🆑 Melbert
add: If a cable is destroyed by an explosion, all rooms within 64-100
(it's a probability) tiles AND which are connected to the same powernet
as the split cable will have their lights flicker 1-3 times.
balance: Cable integrity has been reduced from 300 to 50
balance: Cables have an innate 75% bomb resistance while under floor
tiles
/🆑
## About The Pull Request
- If a cable is destroyed by an explosion, all rooms within 64-100 (it's
a probability) tiles AND which are connected to the same powernet as the
split cable will have their lights flicker 1-3 times.
- Also adds a verb for visualizing powernets.
- Reduces cable integrity from 300 to 50.
- Cables have innate 75% bomb armor when under a floor tile.
## Why It's Good For The Game
- A big devastating explosion a few doors down is, usually, not felt at
all outside of the screen shake. This adds a bit more ambience to the
effect - you hear a big explosion, your screen goes wild, and the lights
cut for just a second.
- Verb just makes it easier to trace powernets.
- I found it a little ridiculous that cables have 300 integrity, the
same as most furniture. This ultimately makes them a lot more vulnerable
to stuff like acid and fire.
- To compensate for their drastically reduced integrity, I gave cables a
considerable boost to explosive resistance while concealed under the
floor. This prevents bombs from outright shredding all cables in a 50
mile radius. (Devastating explosions will still one-tap them, but heavy
explosions will on average take two blasts.)
## Changelog
🆑 Melbert
add: If a cable is destroyed by an explosion, all rooms within 64-100
(it's a probability) tiles AND which are connected to the same powernet
as the split cable will have their lights flicker 1-3 times.
balance: Cable integrity has been reduced from 300 to 50
balance: Cables have an innate 75% bomb resistance while under floor
tiles
/🆑
## About The Pull Request
During map export both the APC & its terminal are exported. However,
during import that terminal is not attached to the APC because it will
only attempt to create a new one if one is not already present and not
locate an existing terminal and re attach to it.
It now attempts to locate an existing terminal, from a previous map
export so the APC charges again and stuff
## Changelog
🆑
fix: map exported APC's now locate the terminals under them & attach to
it thus enabling charging & stuff
/🆑
## About The Pull Request
During map export both the APC & its terminal are exported. However,
during import that terminal is not attached to the APC because it will
only attempt to create a new one if one is not already present and not
locate an existing terminal and re attach to it.
It now attempts to locate an existing terminal, from a previous map
export so the APC charges again and stuff
## Changelog
🆑
fix: map exported APC's now locate the terminals under them & attach to
it thus enabling charging & stuff
/🆑
## About The Pull Request
When using the `map_export` admin verb the following things are fixed:
- All objects density, anchored, opacity, atom_integrity, and
resistance_flags vars are saved
- Multi-tile objects being spammed on all tiles the sprite reaches
- Dirt decals error icon
- Airlocks error icon and to save welded state
- Dark Wizard Simple Mobs error icon
- Closets to save welded, open, and locked states
- Air alarms to save name
- Air scrubbers/vents to save name and welded states
- APCs to save name, charge, cell, lighting, equipment, and
environmental states
- APCs spawning a duplicated terminal underneath it when one already
exists
- SMES to save charge, input, and output states
- Holodecks to revert any holodeck turfs to the empty turf and skip
saving any hologram items
- Photos and Paintings error icons
- Bloody Footprints error icons
- False Walls error icons
- Docking Ports runtimes because the map template var would change
- Effects (lasers, portals, beams, sparks, etc.) saving when they should
be omitted
I would have loved to get `component_parts` to save for machines and
turf decals, but perhaps that is for another day since it requires
complicated solutions.
Here are some before and after pictures:




## Why It's Good For The Game
Better map saving code.
## Changelog
🆑
fix: Fix `map_export` admin verb not properly saving a massive amount of
objects.
/🆑
## About The Pull Request
When using the `map_export` admin verb the following things are fixed:
- All objects density, anchored, opacity, atom_integrity, and
resistance_flags vars are saved
- Multi-tile objects being spammed on all tiles the sprite reaches
- Dirt decals error icon
- Airlocks error icon and to save welded state
- Dark Wizard Simple Mobs error icon
- Closets to save welded, open, and locked states
- Air alarms to save name
- Air scrubbers/vents to save name and welded states
- APCs to save name, charge, cell, lighting, equipment, and
environmental states
- APCs spawning a duplicated terminal underneath it when one already
exists
- SMES to save charge, input, and output states
- Holodecks to revert any holodeck turfs to the empty turf and skip
saving any hologram items
- Photos and Paintings error icons
- Bloody Footprints error icons
- False Walls error icons
- Docking Ports runtimes because the map template var would change
- Effects (lasers, portals, beams, sparks, etc.) saving when they should
be omitted
I would have loved to get `component_parts` to save for machines and
turf decals, but perhaps that is for another day since it requires
complicated solutions.
Here are some before and after pictures:




## Why It's Good For The Game
Better map saving code.
## Changelog
🆑
fix: Fix `map_export` admin verb not properly saving a massive amount of
objects.
/🆑
## About The Pull Request
516 requires float layered overlays to be using pixel_w and pixel_z
instead of pixel_x and pixel_y respectively, unless we want
visual/layering errors. This makes sense, as w,z are for visual effects
only. Sadly seems we were not entirely consistent in this, and many
things seem to have been using x,y incorrectly.
This hopefully fixes that, and thus also fixes layering issues. Complete
1:1 compatibility not guaranteed.
I did the lazy way suggested to me by SmArtKar to speed it up (Runtiming
inside apply_overlays), and this is still included in the PR to flash
out possible issues in a TM (Plus I will need someone to grep the
runtimes for me after the TM period to make sure nothing was missed).
After this is done I'll remove all these extra checks.
Lints will probably be failing for a bit, got to wait for [this
update](https://github.com/SpaceManiac/SpacemanDMM/commit/4b77cd487d0a7b6a069df20356b701af5b20489d)
to them to make it into release. Or just unlint the lines, though that's
probably gonna produce code debt
## Why It's Good For The Game
Fixes this massive 516 mess, hopefully.
closes#90281
## Changelog
🆑
refactor: Changed many of our use cases for pixel_x and pixel_y
correctly into pixel_w and pixel_z, fixing layering issues in the
process.
/🆑
---------
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: SmArtKar <master.of.bagets@gmail.com>
## About The Pull Request
Change `/obj/item/construction/examine` so that if there's any upgrades
installed it will list their names in the examine text. Also add a
`/datum/bitfield` entry for RCD upgrades for a little debug QOL.
## Why It's Good For The Game
It sucks to accidentally print an upgrade you already have for the RCD.
## Changelog
🆑
qol: The RCD examine text now lists any upgrades it has installed.
/🆑
## About The Pull Request
Change `/obj/item/construction/examine` so that if there's any upgrades
installed it will list their names in the examine text. Also add a
`/datum/bitfield` entry for RCD upgrades for a little debug QOL.
## Why It's Good For The Game
It sucks to accidentally print an upgrade you already have for the RCD.
## Changelog
🆑
qol: The RCD examine text now lists any upgrades it has installed.
/🆑
## About The Pull Request
Man.
### Standardizing Ethereal Defines
The _single_ biggest issue with all of the recent Ethereal prs has been
that, well, none of our Ethereal defines meaningfully tie to each other,
and as shown repeatedly it's _incredibly_ easy to the others when
changing one of them.
To resolve this, we introduce a `STANDARD_ETHEREAL_CHARGE` define that
every single other Ethereal define is scaled around, which itself is
tied to `STANDARD_CELL_CHARGE`.
Now these can be changed without immediately blowing up everything else,
and with awareness that they tie back to something.
As a side to this, we redefine all reagent-based charge recovery to be
relative to `ETHEREAL_DISCHARGE_RATE` rather than an arbitrary power
level, so it's easier to compare them to how quickly an ethereal
discharges.
### Adjusting Ethereal Defines
Previously, we defined `ETHEREAL_DISCHARGE_RATE` as `8e-3 *
STANDARD_CELL_CHARGE` per second, while defining `ETHEREAL_CHARGE_FULL`
as `2 * STANDARD_CELL_CHARGE`.
With some math, we get that we'd `2 / 8e-3 = 250 seconds`, 4 whole
minutes, to go from full charge to none at all.
It only takes half as much to get hungry, and about 3 minutes to start
taking toxin damage from roundstart.
So we slash this by eight, to `1e-3 STANDARD_ETHEREAL_CHARGE`, giving us
a nice 16-17~ minutes until we're hungry, and another 16-17~ until we
are 100% out of charge. This is also closer to the pre-power-rework
discharge rate.
What made this _worse_ was that the Ethereal APC charge define
`ETHEREAL_APC_POWER_GAIN` wasn't updated to match the current
charge/discharge levels, still being at `10 * STANDARD_CELL_CHARGE`,
which due to how it was coded led to it being impossible for Ethereals
to recharge from APCs.
We first and foremost change this to `0.1 * STANDARD_ETHEREAL_CHARGE`,
which is roughly equal to what it was before the most recent change, and
actually falls in line with Ethereal charge levels.
### Refactoring Ethereal Charge Methods
APC and Power Store recharging were both performing some awkward checks,
which led to our primary issues above, where they would refuse to even
attempt to charge if the stomach couldn't handle a full load or the cell
didn't have a full load.
So we rewrite their entire method to instead check how much can be
charged by taking the minimum of the cell charge, stomach used charge,
and charge-per-step.
We do this instead of just discharging it and taking the return value,
as the stomach may not have enough space for the cell's power, and
that'd get wasted.
This rewrite also allows us to address a small list of bugs.
We keep the `to_chat` for power store draining, as it better
communicates that this method is imperfect than a balloon alert would.
# Testing:<br>I spent an extended period of time looking at Ethereals
slowly starve in front of me with a stopwatch in hand.
## Why It's Good For The Game
Fixes#88934.
Fixes#88977.
16-17~ minutes is a _lot_ more bearable than 2-3~ minutes, and more in
line with discharge rates before the power rework.
Having Ethereal charging stuff actually work is nice.
## Changelog
🆑
balance: Ethereal hunger rate has been adjusted to be 1/8th of its
previous rate, now taking roughly 16-17~ minutes to go down from full to
normal or normal to none. Ethereal defines have been standardized to
help keep this sane.
refactor: Ethereal APC and power store draining/charging methods have
been refactored. Please report any issues.
fix: Ethereal APC and power store draining/charging no longer
arbitrarily caps out at slightly below or above the max/min.
fix: Ethereal APC draining/charging no longer runtimes when there is no
cell or it gets removed mid-charge.
fix: Ethereals can no longer continue charging their stomach even if it
gets surgically removed from them mid-charge.
fix: Ethereal power store draining actually updated the charge level
overlay.
qol: Ethereal APC and power store draining displays a balloon alert when
it can't continue for whatever reason.
/🆑
## About The Pull Request
Title; also fixed a runtime in `restore_comp` where no user was provided
to log the message. Also changed some var names and dmdocs the place
## Why It's Good For The Game
Fixes#72868
## Changelog
🆑
fix: fixed APC control console found in CE office only accessing APCs on
its z-level
fix: fixed restoring an emagged APC control console potentially leaving
the console in a forever state of restoring
/🆑
## About The Pull Request
This PR kills the abstract internal and external typepaths for organs,
now replaced by an EXTERNAL_ORGAN flag to distinguish the two kinds.
This PR also fixes fox ears (from #87162, no tail is added) and
mushpeople's caps (they should be red, the screenshot is a tad
outdated).
And yes, you can now use a hair dye spray to recolor body parts like
most tails, podpeople hair, mushpeople caps and cat ears. The process
can be reversed by using the spray again.
## Why It's Good For The Game
Time-Green put some effort during the last few months to untie functions
and mechanics from external/internal organ pathing. Now, all that this
pathing is good for are a few typechecks, easily replaceable with
bitflags.
Also podpeople and mushpeople need a way to recolor their "hair". This
kind of applies to fish tails from the fish infusion, which colors can't
be selected right now. The rest is just there if you ever want to
recolor your lizard tail for some reason.
Proof of testing btw (screenshot taken before mushpeople cap fix, right
side has dyed body parts, moth can't be dyed, they're already fabolous):

## Changelog
🆑
code: Removed internal/external pathing from organs in favor of a bit
flag. Hopefully this shouldn't break anything about organs.
fix: Fixed invisible fox ears.
fix: Fixed mushpeople caps not being colored red by default.
add: You can now dye most tails, podpeople hair, mushpeople caps etc.
with a hair dye spray.
/🆑
## About The Pull Request
Fixes#86985. Also, since the higher numbers of megacells made
overcharging from apcs more frequent, the do_after is twice as quick,
but gives half as much charge. The players still feed at the same speed,
but wont blow past "full" instantly to "overfed".
## Why It's Good For The Game
Etherials can eat from APCs/Voltaic Wine again!
## Changelog
🆑 WebcomicArtist
fix: Un-breaks etherial apc charging and charge from ethereal wine.
/🆑
3591 individual conflicts
Update build.js
Update install_node.sh
Update byond.js
oh my fucking god
hat
slow
huh
holy shit
we all fall down
2 more I missed
2900 individual conflicts
2700 Individual conflicts
replaces yarn file with tg version, bumping us down to 2200-ish
Down to 2000 individual conflicts
140 down
mmm
aaaaaaaaaaaaaaaaaaa
not yt
575
soon
900 individual conflicts
600 individual conflicts, 121 file conflicts
im not okay
160 across 19 files
29 in 4 files
0 conflicts, compiletime fix time
some minor incap stuff
missed ticks
weird dupe definition stuff
missed ticks 2
incap fixes
undefs and pie fix
Radio update and some extra minor stuff
returns a single override
no more dupe definitions, 175 compiletime errors
Unticked file fix
sound and emote stuff
honk and more radio stuff
## About The Pull Request
<details>
- renamed ai folder to announcer
-- announcer --
- moved vox_fem to announcer
- moved approachingTG to announcer
- separated the ambience folder into ambience and instrumental
-- ambience --
- created holy folder moved all related sounds there
- created engineering folder and moved all related sounds there
- created security folder and moved ambidet there
- created general folder and moved ambigen there
- created icemoon folder and moved all icebox-related ambience there
- created medical folder and moved all medbay-related ambi there
- created ruin folder and moves all ruins ambi there
- created beach folder and moved seag and shore there
- created lavaland folder and moved related ambi there
- created aurora_caelus folder and placed its ambi there
- created misc folder and moved the rest of the files that don't have a
specific category into it
-- instrumental --
- moved traitor folder here
- created lobby_music folder and placed our songs there (title0 not used
anywhere? - server-side modification?)
-- items --
- moved secdeath to hailer
- moved surgery to handling
-- effects --
- moved chemistry into effects
- moved hallucinations into effects
- moved health into effects
- moved magic into effects
-- vehicles --
- moved mecha into vehicles
created mobs folder
-- mobs --
- moved creatures folder into mobs
- moved voice into mobs
renamed creatures to non-humanoids
renamed voice to humanoids
-- non-humanoids--
created cyborg folder
created hiss folder
moved harmalarm.ogg to cyborg
-- humanoids --
-- misc --
moved ghostwhisper to misc
moved insane_low_laugh to misc
I give up trying to document this.
</details>
- [X] ambience
- [x] announcer
- [x] effects
- [X] instrumental
- [x] items
- [x] machines
- [x] misc
- [X] mobs
- [X] runtime
- [X] vehicles
- [ ] attributions
## Why It's Good For The Game
This folder is so disorganized that it's vomit inducing, will make it
easier to find and add new sounds, providng a minor structure to the
sound folder.
## Changelog
🆑 grungussuss
refactor: the sound folder in the source code has been reorganized,
please report any oddities with sounds playing or not playing
server: lobby music has been repathed to sound/music/lobby_music
/🆑
## About The Pull Request
Introduces a new MODule in the uplink, makes the user transperent and
grants the ability to siphon light sources to recharge your suit.
Ingame demonstration: https://www.youtube.com/watch?v=bhXNOAMDy4U
## Why It's Good For The Game
I've been playing a ton of Splinter Cell and Intravenous recently and
this random idea popped in my head.
"Wouldn't it be cool if traitors could blend in the darkness to get a
jump on their opponents?"
Also unrelated
"Wouldn't it be cool if tots had a tool to recharge their suit that
didn't involve sitting in a pod for 10 minutes?"
This PR introduces a new module to the uplink, the Wraith.
It comes with a passive and active component.
Passively it works exactly like the crew version of the cloaking module
with just a couple of differences.
1) Doesn't need to be manually activated, if you lose the cloak it's
regained after 5 seconds.
2) Lower stealth alpha value( how trasperent you are basically),
slightly less visible than the crew version, not as good the ninja
module however , I tuned it just enough so that you are more or less
undetectable in the dark.
The active component of the module lets you destroy stationary lights to
recharge your suit power, if used on handheld or borg lights it turns
them off for a minute.
**Why do we need this module when we already have the stealth implant
and the chameleon projector?**
I can think of a few reasons.
1) MODsuits were designed to be customizible, traitor suits range
between 6 to 16 TC, having to invest in a 7-8 TC item after you already
bought a suit is fairly expensive.
2) This MODule would be a better fit for ambushes, as it doesn't have
the *uncloaking* delay of its counterparts.
It is however considerably worse if you get caught, as the cloak is
disrupted on bump or damage.
3) It has better interactions with the sandbox.
Lights can go out for many reasons, maybe it’s just a power outage, or
some assistant broke it, or maybe it was anightmare.
It leaves room for plausible deniability, adding to the paranoia.
It's also not complete invisibility, if you want to stay undetected you
need to lurk in the darkness, you might expand your domain, at the cost
of the crew eventually wising up to your shaeneningans.
Lastly, since the active component of the module uses the same proc of
the saboteur handgun, I've updated the code to be a generic proc rather
than a signal, to make it easier to reuse in the future.
Item desc provided by NecromancerAnne.
Module sprite made by Orcacora.
## Changelog
🆑
add: The Wraith Cloaking Module is now available in the uplink, costs 3
TC.
code: the saboteur handgun now uses a generic proc rather than a signal
/🆑
---------
Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
This fixes a couple of bugs that are still lurking for malf AI,
primarily, and reverts an unintentional balance change I did by making
mech domination cancel the delta activation.
There's a balance change instead; previously mech domination death
killed you (seemingly because of badly formed callstacks assuming you
never had a core or APCs available); I replaced this by causing the AI
to produce a massive EMP centered at their location if their mech gets
destroyed while they're piloting it.
## Why It's Good For The Game
Fixes https://github.com/tgstation/tgstation/issues/86107
Fixes https://github.com/tgstation/tgstation/issues/83753
Undoes unintentional balance change and adds with something that is
still quite debilitating, especially if you're currently under attack as
a malf AI.
## Changelog
🆑 Bisar
balance: AIs piloting mechs no longer die if they hit the supermatter,
nor do they harmlessly snap back to their core. The shock now causes
them to produce a massive EMP.
balance: Undid a balance change I did during the malf AI refactor. The
doomsday countdown will no longer stop if a malf AI dominates a mech.
fix: Fixed a few bugs with AI shunting and AI mech death.
/🆑
## About The Pull Request
this is a revival of #82635 . i got permission from potato to reopen
this, he did almost all the work. i only just solved the conflicts and
fixed all the bugs that were preventing the original from being merged
(but it should be TMed first)
## Why It's Good For The Game
slightly improves the performance of basic mob AI
## Changelog
🆑
LemonInTheDark
refactor: able_to_run and incapacitated have been refactored to be event
based
/🆑
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: ZephyrTFA <matthew@tfaluc.com>
## About The Pull Request
Fixes#85779,
Fixes#86041
APCs use batteries instead of cells now, and overload and power sink APC
drain were made to scale off of cell capacity instead of battery
capacity. Power sinks were not adjusted at all to match the new power
changes.
## Why It's Good For The Game
## Changelog
🆑
fix: Fixed light overloads not draining significant amounts of energy.
fix: Power sinks now drain APCs at a significant rate instead of
glacially slow.
balance: Power sinks are adjusted to not explode within 30 seconds of
the average power output a station produces.
/🆑
## About The Pull Request
Currently to check for Silicon access, we do:
``if is silicon or is admin ghost or has unlimited silicon privileges or
has machine remote in hand``
What has unlimited silicon privileges? Bots, Drones, and admin ghosts.
To check for AI access, it just checks for AI instead of silicon, and
doesnt check for unlimited silicon privileges.
This was kinda silly, so I thought I should make this a little easier to
understand.
Now all silicon/ai traits come from ``AI_ACCESS_TRAIT`` or
``SILICON_ACCESS_TRAIT``. I made a single exception to keep Admin ghost,
since now instead of being a var on the client, we moved it to using the
same trait but giving it to the client instead, but since we have to
keep parity with previous functionality (admins can spawn in and not
have this on, it only works while as a ghost), I kept previous checks as
well.
No more type checks, removes a silly var on the mob level and another on
the client.
Now while I was doing this, I found a lot of tgui's ``ui_act`` still
uses ``usr`` and the wrong args, so I fixed those wherever I saw them,
and used a mass replace for the args.
Other changes:
- machinery's ``ui_act`` from
https://github.com/tgstation/tgstation/pull/81250 had ``isAI`` replaced
with ``HAS_AI_ACCESS``, this has been reverted. Machine wands and admin
ghosts no longer get kicked off things not on cameras. This was my
fault, I overlooked this when adding Human AI.
- Human AI's wand gives AI control as long as it's in your hand, you can
swap to your offhand. I hope this doesn't end up going horribly,
otherwise I'll revert this part. It should let human AIs not have their
UI closed on them when swapping to eat food or use their door wand or
whatnot.
- Bots previously had special checks to scan reagents and be
unobservant, I replaced this with giving them the trait. I also fixed an
instance of unobservant not being used, so now statues don't affect the
basic creature, whatever that is.
## Why It's Good For The Game
This is an easier to understand way of handling silicon access and makes
these mobs more consistent between eachother.
Other than what I've mentioned above, this should have no impact on
gameplay itself.
## Changelog
🆑
fix: Statues don't count as eyes to creatures.
fix: Human AIs and Admin ghosts no longer get kicked off of machines
that aren't on cameranets.
/🆑
Hello everybuddy, your number three rated coder-failure here to clean up
some mess. This PR accomplishes some of the more major structural clean
up changes I wanted to do with /obj/ folder, but decided to wait on
until wallening gets merged, and so, time has come. Several things to
still be done, although I know these cleaning PR's are quite a load, so
will wait for this one to get done with first.
## Why It's Good For The Game
Saner spriters, better sprites, less annoyance. Also deleted a whole
load of redundancy this time around, a lot of sprites which existed
simultaniously in two places now got exit their quantum superposition.