Commit Graph

2894 Commits

Author SHA1 Message Date
Fikou
c535784dcf connects floodlights to powernet on init (#93671)
## About The Pull Request
why is copilot automatically writing my webedit commits bro

## Why It's Good For The Game
Not a pain in the ass for Mappers

## Changelog
🆑
code: mapped in floodlights connect to powernet immediately  
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-11-04 01:51:01 +01:00
SyncIt21
5a31b00b2f [NO GBP]Fixes some wall mounted items & Flaky poster sign CI Failures (#93606) 2025-10-26 06:43:06 +11:00
SyncIt21
9740c687de General maintenance for wall mounts (#93534)
## 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
/🆑
2025-10-23 17:26:19 +02:00
SyncIt21
b454cb13ba 2 Portable SMES Fixes (#93553)
## About The Pull Request
- Fixes #93550
- Closes #93549

## Changelog
🆑
fix: You can deconstruct a smes power bank
fix: portable smes UI updates & closes correctly when unanchored from
the connector
/🆑

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-10-23 00:44:58 +02:00
SmArtKar
db5cb34c96 Fixes jumpsuit sensor repair runtimes (#93555)
## About The Pull Request

Cable was passed as the user

## Changelog
🆑
fix: Fixed jumpsuit sensor repair runtimes
/🆑
2025-10-22 18:41:06 -04:00
JoJe3003
3836e13c7d Fix infinite capacity power cell/battery use() method return values (#93544)
## About The Pull Request
Infinite capacity power cells and megacells were returning TRUE (which
evaluates to 1) instead of the actual amount used in their use()
methods. This caused bugs when large electrical loads were applied, as
the power system expected the actual amount consumed to be returned for
proper power accounting. Without this fix, the infinite capacity
megacell would not work properly on the main power grid of the station
as the load would be too big, and it would choke the power grid.

This is the use() method.
```C
/// Use power from the cell.
/// Args:
/// - used: Amount of power in joules to use.
/// - force: If true, uses the remaining power from the cell if there isn't enough power to supply the demand.
/// Returns: The power used from the cell in joules.
/obj/item/stock_parts/power_store/use(used, force = FALSE)
    var/power_used = min(used, charge)     // Calculate how much power we can actually provide
    if(rigged && power_used > 0)
        explode()
        return 0                           // Cell exploded, no power provided
    if(!force && charge < used)
        return 0                           // Not enough charge and force=FALSE, no power provided
    charge -= power_used                   // Reduce the cell's charge by the amount used
    if(!istype(loc, /obj/machinery/power/apc))
        SSblackbox.record_feedback("tally", "cell_used", 1, type)
    return power_used                      // Return the actual amount of power provided
```

It is overridden in battery.dm and cell.dm but the override is
implemented inccorectly. This PR fixes that.

Changes:
- battery.dm: Changed infinite battery use() to return used instead of
TRUE
- cell.dm: Changed infinite cell use() to return used instead of TRUE
## Why It's Good For The Game
Its a bug fix.
## Changelog
🆑

fix: Fixed a bug where infinite capacity power cells and megacells
wouldn't work on large power grids (high loads).

/🆑
2025-10-21 22:15:49 +02:00
JoJe3003
8db74e6cd7 Added infinite equivalent megacell (#93503)
## About The Pull Request
Added an infinite capacity megacell with the same logic as the power
cell equivalent. Both code and sprite is updated.
<img width="32" height="32" alt="icellbig"
src="https://github.com/user-attachments/assets/d80e71ff-4b62-4317-adaa-01dde287960a"
/>
## Why It's Good For The Game
It helps long rounds of debugging when you just want to smack an
infinite capacity megacell into the SMES for infinite power.
## Changelog
🆑
add: New item "Infinite Capacity Megacell added, which can be used for
infinite power in the SMES.
/obj/item/stock_parts/power_store/battery/infinite
/🆑
2025-10-18 23:30:42 +02:00
necromanceranne
3bce974300 Restores the base warp_effect object (#93368)
## About The Pull Request

Was deleted in https://github.com/tgstation/tgstation/pull/92216

Should not have been.

## Why It's Good For The Game

Deleting used assets bad.

## Changelog
🆑
fix: The warp sfx now works properly.
/🆑
2025-10-11 00:15:35 +02:00
Xander3359
03a2780e8d Fix SMES terminal having null cable_layer (#93066)
## About The Pull Request
Fix SMES terminal having null cable_layer
## Why It's Good For The Game
bugfix
## Changelog
🆑
fix: Fix SMES terminal having null cable_layer
/🆑
2025-09-23 17:38:39 +03:00
Leland Kemble
838953ecfa Prevent apcs from showing a blue screen when their screen is not visible (#92998)
## About The Pull Request

Prevents flicker_hacked_icon() from doing anything unless the apc is
closed

## Why It's Good For The Game

fixes this


https://github.com/user-attachments/assets/f066f98e-65a9-4d02-8a4a-ffc51d565218



## Changelog
🆑

fix: Apcs will no longer bluescreen without a screen

/🆑
2025-09-20 04:12:59 +02:00
KingkumaArt
b23b4c0fb0 Buffs the amount EMPs drain cells to be worthwhile (#92902)
Simply put, EMPs now drain cells at hopefully decent rates. Starting at
basic high capacity, a heavy emp (aka a direct ion rifle hit) drains 1/3
of the battery, with each successive tier of cell taking an extra heavy
emp to drain it. At the end, the data looks like this:

- Basic Cell: Instantly drained. Unchanged.
- High Capacity: 3 hits
- Super Capacity: 4 Hits
- Hyper Capacity: 6 Hits
- Bluespace: 8 hits.

Also potatoes take halfed emp damage, because theres not really much
silicon to emp, given its a potato.
## Why It's Good For The Game

As of now, this is the stats to drain a cell with EMPs. (Do note some
stuff just doesnt drain at all and this is for those that do just run
the proc to the cell itself)

- Basic Cell: Instantly drained.
- High Capacity: 10 hits
- Super Capacity: 20 Hits
- Hyper Capacity: 30 Hits
- Bluespace: 40 hits.

The EMP gun on the station can shoot 10 bolts before needing a recharge.
It is *physically impossible* to use the ion to depower something with
an upgraded cell without needing to reload, and even landing 10 direct
hits with the ion to bring down a stock cell is frankly a big ask.
Additionally, using emps as crew or sec runs the risk of you getting
caught in the splash damage and now your modsuit/pda/whatever doesnt
work. Hopefully, this will make the EMP gun actually useful for its
intended purpose of countering silicons/mechs.

## Changelog
🆑 WebcomicArtist
balance: EMPs now drain cells better, starting at 3 emps to drain a
basic cell, up to 8 for bluespace.
/🆑

---------

Co-authored-by: Aki Ito <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com>
2025-09-14 23:32:32 -04:00
Leland Kemble
ab352e85f2 Allows hitting empty light fixures with things on combat mode (#92908)
## About The Pull Request

You previously couldn't actually hit an empty light fixture with
anything, because you'd just stick it in the socket. This lets you hit
it with things on combat mode

## Why It's Good For The Game

Things should be breakable, especially if they're made of juicy wires
and metal

## Changelog
🆑

qol: allows hitting empty light fixtures on combat mode

/🆑
2025-09-10 23:19:02 +02:00
SmArtKar
4ffc1b31a7 Fixes constant runtimes and broken APC processing behavior on emagged APCs (#92757)
## 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
/🆑
2025-09-03 19:38:16 -07:00
Tim
dce0bf9f9a Correct bitwise logic for bitfield checks (#92609)
## 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.
2025-09-01 02:16:22 +00:00
LT3
3ee4c76769 New powernet light flicker (#92567)
## About The Pull Request

Changes light flicker to be an overlay instead of a rapid turning on/off
of the light itself. It acts similar to a brownout and delayed restart
of the light.

The introduction of lights flickering when the powernet is hit by a bomb
is a cool effect, but makes it very apparent the current flicker
method's limitations. Rapid cycling of machinery on/off as fast as 0.5
seconds, spanning over dozens of lights at a time leads to the subsystem
not being able to keep up with the lighting changes. It ultimately
results in just a single broken looking change of lighting

<details>
<summary>Screenshots/Videos</summary>
Before:


https://github.com/user-attachments/assets/8237e72e-1edc-4423-b48b-8dd403ee3111


https://github.com/user-attachments/assets/f3a3d481-61fa-4fd9-b51c-3c1e080e129c

After:


https://github.com/user-attachments/assets/0fa2bbfd-4ca7-422a-8cd1-b6b738addb0f


https://github.com/user-attachments/assets/8b8b10b9-912a-4476-9a11-985f79228500

</details>

## Why It's Good For The Game

The powernet flicker effect looks better (and also now has an electrical
sizzle sound)

## Changelog

🆑 LT3
code: Improved powernet light flickering
/🆑
2025-08-28 16:05:51 -07:00
throwawayuseless
b697439f45 OUGH: fixes improper \improper. (#92581)
ough
## About The Pull Request
diode disk fucky mc wucky
## Why It's Good For The Game
bugg
## Changelog
🆑
fix: Diode Disks are no longer improperly /improper.
/🆑
2025-08-16 19:51:43 +10:00
MrMelbert
844ad39d65 Attackedby differentiates failed attacks from 0 damage attacks (#92564)
## About The Pull Request

Fixes #92558

Currently `attacked_by` does not differentiate an attack that did 0
damage with an attack that failed (due to blocking or whatnot)

See also: This hack I left in

ce958c77c0/code/_onclick/item_attack.dm (L346-L347)

This causes problems because successful attacks can deal 0 damage. See
linked issue.

This PR addresses the issue by having `attacked_by` return `-1`
(`ATTACK_FAILED`) for attacks which entirely do not connect.
-1 was used so consumers can easily check if an attack did 0 damage OR
failed (via checking `<= 0`)

This isn't the preferred fix - I'd prefer if all block checking and zone
targeting was moved to `/item/proc/attack`, but that requires attack
itself be reigned in a bit (cuz it's still a bit of a mess).

## Changelog

🆑 Melbert
fix: Item on-attack effects will trigger as expected when hitting a limb
at damage cap
/🆑
2025-08-15 04:24:18 +02:00
throwawayuseless
2a7921d436 Emitter: The Emitting (#92327)
## About The Pull Request
Adds Diode Disks, installable disks that when fitted into an emitter can
change its function.
* Healing
* Stamina damage, and heals the SM slightly at the cost of internal
energy
* Traitor engi only explosive that damages and supercharges the SM if
used that way. Firerate is halved.
* Incendiary that slightly damages the SM but has lots of energy
* Sanity damaging one that improves SM psi coeff
* Magnetic item attracting one that improves SM mol absorption.
## Why It's Good For The Game
Fun and unique ways for Engi to use excess power or improve their SM
setups. Could also lead to neat engi inventions such as, say, a circuit
device that aims and fires a healing emitter at anyone nearby who is
damaged. Should also incentivize the researching of useful techs, hence
why important medium tier techs are what lock the different disks.
## Changelog
🆑
add: New Diode Disks which allow you to configurate emitters with
special functions.
add: New Engi & CE exclusive traitor item, a diode disk that causes an
emitter to create low radius explosions when it hits things. Note that
this will reduce the fire-rate of your emitter.
/🆑

---------

Co-authored-by: ThrowawayUseless <notarealemail@emailservice.fake>
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
2025-08-13 07:42:53 +10:00
Cameron Lennox
eb669bf0c1 Fixes spam-clicking on Nar'Sie destroying eardrums (#92470)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request
Fixes #92454 by making it so Nar'Sie can't be spam-clicked at the speed
of light to spawn infinite cult shells and blow up your ears.

Instead, clicking on Nar'Sie will now give you an input box asking if
you want to become a harvester or not.

Additionally, cultbanned individuals can no longer interact with her
either.


![dreamseeker_2025-08-07_00-15-01](https://github.com/user-attachments/assets/4bcd9876-eb35-4cf9-a7b3-8c43437b155e)

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game
Nar'Sie no longer escapes into the real world and does grievous bodily
harm to your ears when some joker decides to spam-click her.

Additionally, it feels smoother to click Nar'Sie and be able to
immediately become a harvester, versus clicking Nar'sie and then having
to twiddle your thumbs for 10 seconds waiting for the ghost query to
end.

<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and its effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
fix: Nar'Sie can no longer be spam-clicked as a ghost and destroy ears
via infinite shell creation.
fix: Cult-banned players can no longer interact with Nar'Sie
qol: Interacting with Nar'Sie as a ghost no longer creates a ghost query
and instead allows you to immediately become a harvester after
confirming you wish to become a harvester.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2025-08-11 20:30:04 +02:00
SmArtKar
61946d4d13 Fixes light flickering potentially causing lag (#92503)
## About The Pull Request

Light flickering was forcing itself into async via waitfor but used
sleeps and thus had zero respect for MC consumption. We fix the lag by
- A) making it use stoplag instead of sleep and moving CHECK_TICK to be
per-light instead of per-APC
- B) reducing chance of lights to flicker in a particular room (reducing
the amount of flickers looks weird)
- C) reducing falloff distance to 32 from 64, as latter is half to third
the station on most maps.
2025-08-11 12:33:36 -05:00
necromanceranne
2b0a824132 Changes flux anomalies and gravity anomalies to be a little less horrible to deal with. (#92216)
## About The Pull Request

Flux anomalies, when they detonate, do a minor explosion and emit a wide
EMP pulse. This can cause a lot of damage in its own right, but it won't
syndicate bomb a random section of the station anymore.

Gravity anomalies

A) No longer have the click catching giant image floating above it
anymore.
B) No longer chain hardstuns you if you get too close every time it
ticks. Instead, it knocks you down. You can also avoid this effect by
wearing magboots.
C) Also doesn't throw literally every object in an area around it
straight into you every time it ticks. Instead, it does so only 20% of
the time.

Long range gas analyzers can now scan anomalies.

## Why It's Good For The Game

> Flux 

A really annoying anomaly and one that I think has caused several
shuttle calls in its time. If you don't catch it, it blows up a segment
of the station entirely at random. This thing can almost be as bad as a
vortex in some contexts. A giant EMP can still be pretty destructive,
but it isn't quite at the same level as a giant explosion and I suspect
not shuttle call worthy. The minor explosion will at most trash a room.

> Gravity

I literally do not understand how anyone was supposed to disable these.
I literally gave up years ago even trying to catch them. They're
practically designed to kill you for trying. The click catching warp
effect not only looked kind of lame, but it just straight up stopped you
being able to disable them (mouse opacity doesn't work here and I tried,
it redirects clicks to other tiles for some godawful reason, probably
byond weirdness). You had to spam click a LOT to even try.

On top of that, it just stuns you? It literally just stuns you if you
approach it? And magboots can't help you to avoid that? What the fuck
are you _supposed_ to do to avoid that?

Also it can just instantly kill you if you approach it and it gathered
enough stuff because it will just keep slapping you with every loose
object within a radius around itself? At speed 5 so things that don't
normally embed will embed?

So it mulches you for approaching it, chain hardstuns you for
approaching it, and it deliberately intercepts clicks in a completely
unintuitive fashion even if you do manage to click it. You need to
approach it to stop it. A recipe for disaster. Fuck that.

> Analyzer

It was annoying this wasn't able to do this already!

## Changelog
🆑
balance: Gravity anomalies can be properly clicked. Rather than chain
stunning you, the anomaly will knock you down. You can avoid the
negatives of gravity anomalies by wearing magboots. (Yes, it did not
really protect you until now)
balance: Flux anomalies detonate in a much smaller explosion, but
release a wide EMP as well.
balance: Long range gas analyzers can now scan anomalies.
/🆑
2025-08-07 13:47:35 -04:00
Joshua Kidder
8f3072b95c Fix a broken calculation in /obj/item/stock_parts/power_store/suicide_act() (#92336) 2025-07-30 13:09:37 +02:00
SyncIt21
8717e4f6e8 [NO GBP]Fixes map loaded portable smes breaking (#92271) 2025-07-27 15:48:19 -04:00
SyncIt21
9df1ef6f3e Constructed SMES auto connects to output cable underneath (#92111)
## About The Pull Request
Something i didn't notice in #91587.

From the above PR you can now change the cable layer & connect to
network with a multitool. But without a multitool the SMES is still by
default disconnected from all output after construction.

Now immediately after construction, the SMES will connect to any cable
underneath regardless of its layer

## Changelog
🆑
fix: constructed SMES now auto connects to any output cable underneath
it regardless of its layer
/🆑
2025-07-27 14:15:58 +02:00
harry
be89f131f1 corrects some loop syntax (#92252)
## About The Pull Request
spacemandmm, and byond, did not used to error on using `for init; test,
inc`. spacemandmm now does, and i think it's bad syntax to keep around
anyway

## Why It's Good For The Game
this syntax was mad

## Changelog
no playerfacing changes

Co-authored-by: harryob <55142896+harryob@users.noreply.github.com>
2025-07-23 22:03:09 -06:00
SyncIt21
f57f95aa95 [MDB Ignore] General maintenance for SMES (#91587)
## About The Pull Request
- SMES now directly gives/takes charge to the power cells stored inside
its component parts instead of modifying a `charge` variable whose value
was set from the total charge of its stored cells
- Removed `capacity` var. It's now derived from the total cells
`max_charge`. Even then its value was set to this so manually setting it
was a waste
- Fixes #71918. Because of point 1, this also means if you install
rigged cells in the SMES it now explodes
- Adds examines & screentips for installing terminal & other tool acts
- Smes can be connected to the powernet with a multitool with the panel
open after construction.
- General maintenance for portable smes as well. Repaths it to machine
subtype instead of power cause all it's functionality wasn't used
- Removed a bunch of unused defines, autodoc and shuffled around other
code

## Changelog
🆑
qol: SMES has examines and screentips for various stuff
code: Improved code of SMES in general
fix: smes can be connected to the powernet with a multitool with the
panel open after construction
refactor: SMES now functions consistently with its power cells & the
RPED.
/🆑
2025-07-12 16:21:58 +02:00
Kubisopplay
598686e338 Tweaks to biddler malf (#92039)
## 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.
2025-07-11 18:01:29 -05:00
SyncIt21
2d41569c65 Flatpacker & machine frame enhancements (#91752)
## About The Pull Request

**1. Makes the machine creation process from both efficient.**
The machine frame no longer creates & deletes the machines old component
parts before moving in the new parts. It instead now passes its parts
directly to the circuit boards `apply_default_parts()` meaning the old
parts are never created and the new ones get applied directly. This also
mean it does not have to again call `RefreshParts()` as the machines
`Initialize()` proc will do that for us by default so the performance is
just faster now.
Flatpack box also benefits from this and it will need it as stated below

- Fixes #86514. As the circuit board is passed to the machine's
`Initialize()` proc during reconstruction so it sets it's
`all_products_free` from the board both during mapload & when player
constructed from either machine frame & flatpack

**2. Flatpack enhancements** 
- The flatpack box now passes its stored circuit board into the machine
meaning any changes made like with a screw driver or such are preserved
in the newly created machine rather than the board getting deleted & the
machine creating the default board
- Flatpacker now accept custom component parts that replaces its stored
circuit board default parts. This implements

https://github.com/tgstation/tgstation/pull/91670#issuecomment-2977259973
meaning instead of the vendor created from the flatpacker starting out
empty it now accepts the refill canister and will package both of them
together. Then during deployment that stored canister is stored back in
the vendor meaning instead of starting out empty you get to carry over
all your previous stock

Depends on https://github.com/tgstation/tgstation/pull/91512 because of
named arg conflict. Keep this drafted till that gets merged

## Changelog
🆑
qol: flatpacker now accepts custom component parts(like vendor refill
canister) along with the circuit board so you can carry over your
previous stock during deployment rather than starting out empty
fix: flatpack boxes now passes its stored circuit board into the machine
thus preserving its properties instead of creating a default board in
the machine
fix: vending machines reconstructed on station from circuits loaded off
station(having free products) will continue to sell free products
code: machine construction via flatpacker/machine frame is faster
performance wise
/🆑
2025-07-11 08:58:11 +02:00
Kubisopplay
a6f20468f9 Biddler Malf (#91895)
## 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.
2025-07-04 12:56:22 -05:00
Sealed101
82bf399b81 Prevents solar panel assemblies from being anchored on an occupied tile or on each other (#91613)
## About The Pull Request

Title; should cover any impassable structures like machinery as well as
anchoring multiple assemblies on the same tile - it's already useless
since constructing the solar panel further already checks for other
solar panels on the tile (made that check more robust as well).
Squashed a case where a solar tracker would not assimilate the solar
assembly used for its construction, which would let you get more
assemblies with tracker electronics for nefarious purposes (duplication
is bad okay).
Some maps place solar panels on catwalks instead of fancy solar panel
tiling. For the purposes of a solar panel operation this is sufficient,
since a catwalk can support wiring. However, a solar assembly wasn't
accepting catwalks as a proper tile for anchoring. I see little reason
to disallow catwalks, so I made them work for anchoring assemblies.
Also makes use of balloon alerts for some of the stuff.

## Why It's Good For The Game

Fixes #79220
Consistency good. Duplication bad. Balloon alerts make monkey brain
happy.

## Changelog

🆑
fix: fixed being able to anchor multiple solar panel assemblies on a
single tile (or any dense tile for that matter)
fix: fixed solar trackers not absorbing the assembly upon construction,
leading to assembly duplication
qol: solar assemblies can be wrenched on catwalks
/🆑
2025-06-23 15:52:25 +01:00
Rhials
f6acb2a7e8 [NO GBP] Supermatter-spawned hallucination anomalies don't spawn decoys (#91634) 2025-06-21 03:16:22 +02:00
SmArtKar
57456921a4 Makes vendors created from flatpacks start empty to prevent duping (#91670)
## About The Pull Request

Flatpacks pass an arg into ``on_construction`` which makes vendors wipe
their inventory to prevent duping by repeatedly flatpacking a vendor to
refill its inventory.
Closes #91615

## Changelog
🆑
fix: Flatpacked vendors start empty to prevent duping
/🆑
2025-06-20 20:15:41 +00:00
MrMelbert
ed1657ebbb Explosions severing cable networks cause nearby(ish) connected rooms's lights to flicker. Also reduces cable integrity. (#91263)
## 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
/🆑
2025-06-20 01:57:48 +00:00
SyncIt21
6edc6d616a Removes un-needed calls to RefreshParts() (#91564) 2025-06-19 06:16:56 +02:00
SmArtKar
1e0668802c Planecube Optimizations and Job Security: Part One (#91696)
## About The Pull Request

This is an atomized revival of #82419, with this part containing the
simplest of its features:
- Fixes AO pref refreshing the wrong plane, thus not updating until you
swap bodies
- Removes supermatter's copypasted warp effect
- Culls distortion effects when they're not in use because its a chonky
filter
- Hides the escape menu when its, well, hidden
- Fixes hide_highest_offset not working upon parent's creation (we're so
good at our jobs hell yeah)
- Replaces runechat's AO dropshadow with an outline, because its barely
visible due to low opacity.

## Why It's Good For The Game

Our rendering performance is shit and we need to improve it, and the
first step in this task is optimizing planecube's simplest parts. The
next step is conditional culling, better non-multiz handling and
parallax rework/removal, but all of those need to be atomized as to
prevent the PR from sharing the fate of the original.

## Changelog
🆑
fix: Ambient Occlusion pref should now update immediately upon being
changed, instead of having to swap bodies or waiting for server restart
to get it updated.
code: Slightly improved rendering code/performance just a tiny bit.
/🆑
2025-06-18 21:00:23 -07:00
SyncIt21
9296672b1b APC now either locates/makes the terminal (#91541)
## 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
/🆑
2025-06-11 15:55:19 +00:00
Ghom
14fb86e3e8 Mutation code cleanup, mutations now have sources to avoid concurrency problems. (#91346)
## About The Pull Request
This PR aims to clean or bring up to date portions of code about dna,
the dna console and mutations. This includes taking care of or removing
some of the awful choices like the pratically useless
`datum/mutation/human` pathing, or the class variable, in favor of using
sources to avoid potential issues with extraneous sources of a mutation.

The files changed are over a hundred just because I removed the
`datum/mutation/human` path, but the actual bulk of the code is mainly
shared between the datum/dna.dm, _mutations.dm and dna_console.dm.

## Why It's Good For The Game
Mutation shitcode is hurting my future plans for infusions a little.
Also it's a much needed refactor. Drafted 'till I'm sure it works
without issues.

## Changelog

🆑
refactor: Refactored mutation code backend. Report any issue.
/🆑
2025-06-08 13:57:10 +02:00
Bloop
2bae025bfe Audits wash/cleaning signals + refactors wash() to ensure no needless mob updates occur (#91259)
## About The Pull Request

This has the potential to create a lot of needless mob updates which is
not great. Now should only update a mob's clothing if it was actually
washed.

This PR

1) ensures that all wash() procs return a bitflag.
2) ensures that `wash()` proccalls which result in expensive operations
like icon updates only do so when it is necessary

## Why It's Good For The Game

Updating mob sprites is expensive, and doing it when nothing has been
changed is bad.

## Changelog

Nothing really player facing
2025-06-02 18:54:53 +00:00
John Willard
ca96a9e2cd Ghost settings UI (#91370)
## About The Pull Request

This is part of my ongoing project to remove the Stat panel which you
can read/contribute to here: https://hackmd.io/443_dE5lRWeEAp9bjGcKYw

Replaces the pAI button at the bottom of Ghost's HUD with a new button
for Ghost settings

Default look

![image](https://github.com/user-attachments/assets/7b97287d-5f8b-40a4-b574-98ecaafa8533)

With fun verbs (admin only, the 2 buttons at the top right), No body,
and lag switches on (disables T-Ray and Zooming)

![image](https://github.com/user-attachments/assets/3ee9bb9b-389c-452c-8ff5-fbd0ee677fef)

The ghost icon next to "re-enter body" is the DNR button, which requires
double click.
Extra view is now easier to understand, 0 is "default", anything more is
extra vision you get. Goes to 3 for regular users, 7 for BYOND members.

Removes the "Ghost" tab from the stat panel entirely, this replaces it.

## Why It's Good For The Game

The Ghost tab of the stat panel is filled with barely functional stuff,
like "Jump to Mob" which allows you to jump to "oranges ear" which
teleports you to nullspace, or the 4 different jump to verbs for
different things which is irrelevant from the Orbit menu and the many
improvements it got over the years, and even the Notifications panel,
which seems pretty useful, but because it's delegated to a small button
filled with the rest of these it gets entirely drowned out.
This puts all the important things in front of the user at the click of
a button, meant to be easy to navigate and giving important information
first.

## Changelog

🆑
add: Added a 'Ghost settings' button, taking the spot of the pAI
candidate button and replacing the "Ghost" tab of the Stat panel. This
button contains buttons pertinent to your time as an Observer.
/🆑
2025-05-29 10:21:29 -07:00
MrMelbert
5261efb67f Re-refactors batons / Refactors attack chain force modifiers (#90809)
## About The Pull Request

Melee attack chain now has a list passed along with it,
`attack_modifiers`, which you can stick force modifiers to change the
resulting attack

This is basically a soft implementation of damage packets until a more
definitive pr, but one that only applies to item attack chain, and not
unarmed attacks.

This change was done to facilitate a baton refactor - batons no longer
hack together their own attack chain, and are now integrated straight
into the real attack chain. This refactor itself was done because batons
don't send any attack signals, which has been annoying in the past (for
swing combat).

## Changelog

🆑 Melbert
refactor: Batons have been refactored again. Baton stuns now properly
count as an attack, when before it was a nothing. Report any oddities,
particularly in regards to harmbatonning vs normal batonning.
refactor: The method of adjusting item damage mid-attack has been
refactored - some affected items include the Nullblade and knives.
Report any strange happenings with damage numbers.
refactor: A few objects have been moved to the new interaction chain -
records consoles, mawed crucible, alien weeds and space vines, hedges,
restaurant portals, and some mobs - to name a few.
fix: Spears only deal bonus damage against secure lockers, not all
closet types (including crates)
/🆑
2025-05-19 13:32:12 +10:00
Roxy
85ef652508 Fix cable coil icon breaking with layer hubs (#91151)
## About The Pull Request

The icons for the multilayer and multi z layer cable hubs are in a
separate dmi than the cable coil, so when you tried to switch to either
of them by using cable coil in hand it'd just go invisible. This makes
sure the icon gets changed to the right one if you select those (and
gets switched back when you choose cable coil). It also moves the
setting of `novariants` to be above the `set_cable_color` call because
it's checked in that call and so it needs to be the updated value. This
also adds a check for `novariants` in `update_name` and `update_desc`
because currently the changed name and desc for the cable hubs gets
overwritten by these calls (triggered by `update_appearance` at the end
of `attack_self`)

## Why It's Good For The Game

Bug fix

## Changelog
🆑
fix: fixed cable coil going invisible when you select the two cable hub
options
/🆑
2025-05-16 23:05:02 -07:00
Tim
e698c965b3 Fix map_export admin verb not saving objects properly (#90998)
## 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:


![StrongDMM_209k6PXSaQ](https://github.com/user-attachments/assets/27f0a80b-3cbc-4862-a218-612d52fa0e4f)


![StrongDMM_5PdRfLTZ4l](https://github.com/user-attachments/assets/3bbfd724-4b51-47c5-8cff-02687250fc1e)


![StrongDMM_F4DPOGz5K7](https://github.com/user-attachments/assets/1130ded8-3062-469a-ad4a-d437d89a68da)


![StrongDMM_BIa554dsGv](https://github.com/user-attachments/assets/440d6b38-dbbf-47c0-ad9a-5165504d104e)

## 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.
/🆑
2025-05-16 22:43:09 -07:00
Pickle-Coding
10fbd233f3 Tesla and supermatter zaps can trigger electrolysis reactions. Hypernoblium to antinoblium conversion requires supermatter zaps. (#91048)
## About The Pull Request
Supermatter and tesla zaps can trigger electrolysis reactions.
Hypernoblium to antinoblium conversion requires supermatter zaps above 5
GeV, with 100% efficiency at 9GeV. Antinoblium is generated at 1:1 from
hypernoblium consumed. The requirement for hypernoblium conversion is
also included in the reaction console.
## Why It's Good For The Game
Ordinary electrolysis is a rather boring way to obtain antinoblium,
especially with fire extinguisher cheese. This limits the creation of
antinoblium to more extreme and loud methods. This is mainly intended
for balancing #91016, but seems out of scope to include in that PR. This
also gives room for antinoblium to be balanced as one of the more exotic
gases, and is much more obvious when antinoblium is being created.
## Changelog
🆑
add: Supermatter and tesla zaps can trigger electrolyzer reactions.
balance: Hypernoblium to antinoblium electrolysis requires supermatter
zaps above 5 GeV.
balance: Hypernoblium is converted to antinoblium 1:1 during
electrolysis.

/🆑
2025-05-16 21:34:05 -07:00
necromanceranne
c82686f46f Weapons that cannot fit into turrets also cannot fit into emitters. (#90960)
## About The Pull Request
fixes https://github.com/tgstation/tgstation/issues/90260

Weapons that cannot fit into turrets can not fit into emitters. This
only affects the dueling pistol as of writing.

## Why It's Good For The Game

Sorry everyone, this is TOO fun, we have to turn it around.

## Changelog
🆑
fix: Weapons that cannot fit into turrets also cannot fit into emitters.
/🆑
2025-05-03 13:47:06 +02:00
LT3
607651eed2 Supermatter anomaly fixes/explosion scaled hallucination (#90788)
## About The Pull Request

- Some fixes for the supermatter crystal anomaly generation, ensuring
they spawn outside the chamber windows and adds the outright missing
dimensional anomalies.
- Hallucination duration is calculated based on both distance from the
SM as well as the size of the delam explosion (a modifier of 0.75x for a
small explosion, up to 1.25x for the largest delam explosion)

## Why It's Good For The Game

Bugfixes, improvement on the delam hallucination.

## Changelog

🆑 LT3
fix: Fixed supermatter anomaly generation, hallucination is based on
distance and delam explosion size
/🆑
2025-04-25 15:08:33 +00:00
Ghom
339616ae78 You can now interact with held mobs beside wearing them (feat: "minor" melee attack chain cleanup) (#90080)
## About The Pull Request
People can now pet held mothroaches and pugs if they want to, or use
items on them, hopefully without causing many issues. After all, it only
took about a couple dozen lines of code to make...

...Oh, did the 527 files changed or the 850~ lines added/removed perhaps
catch your eye? Made you wonder if I accidentally pushed the wrong
branch? or skewed something up big time? Well, nuh uh. I just happen to
be fed up with the melee attack chain still using stringized params
instead of an array/list. It was frankly revolting to see how I'd have
had to otherwise call `list2params` for what I'm trying to accomplish
here, and make this PR another tessera to the immense stupidity of our
attack chain procs calling `params2list` over and over and over instead
of just using that one call instance from `ClickOn` as an argument. It's
2025, honey, wake up!

I also tried to replace some of those single letter vars/args but there
are just way too many of them.

## Why It's Good For The Game
Improving old code. And I want to be able to pet mobroaches while
holding them too.

## Changelog

🆑
qol: You can now interact with held mobs in more ways beside wearing
them.
/🆑
2025-04-23 20:18:26 +00:00
LT3
6bf01606d3 Fixes delam hallucinations (#90465)
## About The Pull Request

Fixes the delam hallucination proc to actually calculate based on
distance from the supermatter.

## Why It's Good For The Game

Fixes 2.5 year old bug.

## Changelog

🆑 LT3
fix: Supermatter delamination now applies hallucinations based on
distance
/🆑
2025-04-08 16:41:44 +02:00
John Willard
17503426ee Adds battery matches & gum wrappers (#89871)
## About The Pull Request

Adds bubblegum wrappers, I was originally gonna make it a trash type for
gum but thought it would hide the feature since there's no indication
that they are in a wrapper (and you'd have to eat the entire gum to get
to it, which I don't think you can even do?), so instead bubblegum boxes
have 4 wrappers which each holds 1 piece of gum.
These wrappers can be grinded down for aluminium, or used in a crafting
recipe with a cell of any kind to make a makeshift match, you can ignite
it by using it in your hand (at the cost of minor burn damage).

Fixes the description for matches having 2 periods in them

![image](https://github.com/user-attachments/assets/16b13b64-ca25-4f2f-ba7e-dcaca36f7442)

Icon for the wrapper is a recolored version of ``janitor.dmi``'s floor
sign, while the match itself is the "crappy" cell with a codersprited
stick of gum coiled around it, with a copy paste of the regular match's
fire for the fire.

## Why It's Good For The Game

For years I've thought of how cool it would be to add makeshift
equipment that prisoners could make, this is a pretty harmless addition;
a source of aluminium and matches. Prisoners currently are incredibly
dependent on prison loot spawn, which kinda sucks, and this is also
reliant on prisoner loots, but at the very least it means getting more
use out of the lesser-useful items.
It would be nice to open up new ways to play Prisoner that don't involve
some form of prison breakout.

## Changelog

🆑
add: Bubblegum now comes in wrappers.
add: You can make a match out of a battery and a gum wrapper.
spellcheck: Matches no longer have 2 periods in the description once
used.
/🆑
2025-04-07 19:06:44 +02:00
Waterpig
d3d3a12540 The big fix for pixel_x and pixel_y use cases. (#90124)
## 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](4b77cd487d)
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>
2025-03-28 14:18:45 +00:00
SmArtKar
5cbd454a6a Fixes emergency mode lighting using incorrect light color (#90117)
## About The Pull Request

Duh, should be using a different red color. Also probably shouldn't get
overriden by nightshifts, even though they can't normally be activated
during delta alerts (but can be toggled manually on APCs)

## Changelog
🆑
fix: Fixed emergency mode lighting using incorrect light color
/🆑
2025-03-19 19:39:55 +00:00