more items (CI)
Food process CI
ammo CI + battery runtime
might be right, CI will tell me :)
:( borg items and fixing stuff I broke
rations_printer_designs
:(
Biogen Parent Type Additions Pt. 1
Biogen Parent Type Additions Pt. 2
## Main Additions and Modifications
This PR adds in a quite a few new things.
### Overview
**WT-550 "Enhancements"** - made available via research. These
modifications retain the full-auto capability of the WT-550 to varying
degrees. Additionally a compressed WT550 magazine is available via
research. It contains 40 weaker bullets compared to the normal
magazine's 20. It is only allowed to contain compressed bullets to avoid
cheesing, and requires bluespace to fabricate. It is designed as a
sustained dps ammunition as opposed to a high dps ammunition
**WT-550-B** - Shoots in bursts with decent recoil and slightly higher
dps.
**WT-550-C** - Shoots slower but has a higher damage and projectile
velocity along with a scope.
**Sawn-off WT-550** - Is smaller but has egregious recoil and spread.
**.38 BR** - A simple but slightly less powerful alternative to the
NT-38 battle rifle. Craftable via a kit obtained from research.
**Stunstaff** - A weapon that is available via crafting and functions as
an alternative to a baton and riot shield. A heroic variant exists
within the code but the recipe can only be learned from a book that
sometimes spawns in the armory contraband closet.
**Advanced Energy SMG** - A hybrid of a disabler SMG, laser carbine, and
advanced energy gun. Does exactly what you think it does. Obtainable via
crafting.
**Stingballer** - A rifle that rapidly shoots stingballs. Direct damage
is lesser than a stingbang. Purchasable from cargo.
**Security Juggernaut Suit** - A heavily armoured suit that severely
cripples your mobility in exchange for very high protection. Crafting
kit is printable from a technode.
**Horizon Beam Rifle** - Damage is now 110 with 35 armor piercing, and a
demo mod of 2. Upon contact with walls, it destroys them like how a
pulse laser does.
### Crafting
WT-550 weapons can all be made with just the gun and the kit.
The sawn-off WT550 can be made by taking a saw to the WT550.
The .38 BR requires an NT-38 battle rifle along with a multitool and a
screwdriver.
The Advanced Energy SMG requires a disabler smg, laser carbine, and an
advanced energy gun.
The Stunstaff requires two security batons, some plasteel and some
cable, along with a welder and wrench.
The Heroic Stunstaff requires some other ingredients.
The Security Juggernaut suit requires a full toolbox of tools as well as
the armor plates, a full coil of cable, a pair of magboots, a swat
helmet, a swat suit, and two seclites.
Stingbangs can be prepared into stingball canisters with a screwdriver
and some wirecutters. Each contains 25 rounds are are used to fill the
stingballer.
### Cargo
**Stingballer** - Armory crate - Contains one stingballer. - 4500
credits.
**Grenade Launcher** - Armory crate - Contains one grenade launcher and
a box of flashbangs. - 15000 credits.
**Kiboko Grenade Launcher** - Armory crate - Contains one Kiboko grenade
launcher. - 7500 credits.
### R&D
The **"Ballisitic Research"** technode has been removed and dragon's
breath shells have been moved to the illegal technology node. The node
remains within the code though if more exotic ammunition is developed
and requires an additional research node for it.
New **"Advanced Ballistics"** technode contains the part kits for the
WT-550 modifications and NT-BR simplification kit and requires Exotic
Ammunition to research.
New **"Advanced Armor"** technode contains the Security Juggernaut
Plates and requires Riot Suppression and Gas Compression to research.
### Code
Adds to the buckling system where if something has TRAIT_NO_BUCKLE, it
cannot be buckled at all.
Adds to the vehicle system where if something has TRAIT_NO_VEHICLE, it
will be flung off the vehicle it attempts to move the vehicle
themselves.
Adds to the chair system where if something has TRAIT_NO_VEHICLE, it
will destroy the chair.
Adds to the movement system where if something has TRAIT_LARGE_CLOTHES,
TRAIT_BULKY_CLOTHES, or TRAIT_HUGE_CLOTHES, it will incur a 3, 4, and 5
move speed multiplier when pulling that thing. If anyone can help me do
this more modular, please reach out, I have no clue how.
Edits the equipment slowdown system to properly apply a special slowdown
that cannot be negated by anything. Requires the TRUE_IMMUTABLE_SLOW
bubber_obj_flag to be present. IMMUTABLE_SLOW is still required for red
potion immunity.
### Other Misc. Changes
The WT-551 has been effectively rendered impossible to get. This
decision stems from the fact that the WT-550 and the WT-551 were
functionally identical when used in-game. Instances of the 551 have been
replaced with the 550.
Skyrat's renaming of /tg/ bullets has been completely removed. Some
descriptions have been kept and altered because they were kinda neat.
.460 Ceres -> .45
.416 Stabilis -> .50 BMG
8mm Usurpator -> 4.6x30mm
.454 Trucidator -> .50 Action Express
.277 Aestus -> .223
## Statistics For New Additions
**Stunstaff**
<img width="32" height="32" alt="image"
src="https://github.com/user-attachments/assets/0e1c2a1a-20ba-47a9-91f1-e63ca11b5e43"
/>
- Two-handed, bulky. Fits on the back and an armor vest.
- 65 stamina damage
- 20 stun armour penetration
- 14 force
- 8 throw force
- 50 block chance
- 20 effective block vs tackles
- 10 effective block vs projectiles
**Heroic Stunstaff**
- 24 stamina damage
- 0.5 second stun
- 4 times the cell charge consumption
- No cooldown between stuns
- 35 stun armor penetration
- 15 force
- 10 throw force
- 75% throw stun chance
- Can be thrown like a boomerang
- 75 block chance
- 30 effective block vs tackles
- 50 effective block vs projectiles
**WT-550-B**
<img width="32" height="32" alt="image"
src="https://github.com/user-attachments/assets/56fea4dd-9b0c-4e06-93a7-b0389f3d32c9"
/>
- Bulky sized, small weapon weight, dual wielding.
- 2 round burst every 0.5 seconds
- 0.25 recoil
- 3 spread
- Can be suppressed
**WT-550-C**
<img width="48" height="32" alt="image"
src="https://github.com/user-attachments/assets/bd80570d-3e70-463d-8b6b-7cefcb1d54e6"
/>
- Bulky sized, heavy weapon weight, no dual wielding.
- Half fire rate of normal WT (0.6 compared to 0.3)
- 1.5x damage multiplier
- 1.5x projectile speed multiplier
- +5 projectile wound bonus
- Can be Suppressed
- Mediocre Scope
**Sawn-off WT-550**
<img width="32" height="32" alt="image"
src="https://github.com/user-attachments/assets/6d786022-2d93-42da-9dcc-fe6dfadbbce1"
/>
- Normal sized, light weapon weight, dual wielding
- 10 spread
- 20 dual wielded spread
- Sawn-off recoil (high)
**Compressed WT-550 magazine**
- 40 capacity
- 12 damage (20 for normal rounds)
**Stingballer**
<img width="32" height="32" alt="image"
src="https://github.com/user-attachments/assets/de30bda5-9e0b-44da-8097-ca9827d3d8c8"
/>
- Bulky sized, normal weapon weight, no dual wielding.
- 8 rounds per second
- 7.5 spread
- 50 round capacity
- 1.5 damage
- 4 stamina damage
- Embed chance at close range
- Bouncy projectile
- Low effective range
**.38 Battle Rifle**
<img width="48" height="32" alt="image"
src="https://github.com/user-attachments/assets/24a9a257-97fe-4313-ba39-93d17230f1b4"
/>
- Overall same statistics as the NT-38 Battle Rifle except for
- 1.0x damage multiplier (compared to 1.2x)
- 1.0x projectile speed multiplier (compared to 1.2x)
- 25.0% faster rate of fire (1.5 compared to 2)
- No degradation mechanics
- No scope
**Advanced Energy SMG**
<img width="32" height="32" alt="image"
src="https://github.com/user-attachments/assets/2671009a-a994-4054-92ff-4db2959501e8"
/>
- Bulky Size, no dual wielding.
- 0.8x damage multiplier (12 on kill, 12 on disable)
- 1.2x projectile speed multiplier
- 40 shots on kill, 40 shots on disable
- Charges about half as fast as the regular advanced energy gun.
- Same fire rate as the disabler SMG
- 2 spread
**Security Juggernaut Suit**
<img width="32" height="32" alt="image"
src="https://github.com/user-attachments/assets/5de0a084-4a07-4d8f-88a3-d9996de41010"
/>
- Built in helmet
- Helmet protects head from flashes, loud noises, impacts and
pepperspray
- Full temperature and pressure protection
- Helmet has powerful flashlight mounted
- Takes 12 seconds to put on, 15 to put on someone else
- Slows you down everywhere
- Slows you down when in-hand
- Slows down someone who's dragging you
- Prevents aggressive grabs against you when worn
- Prevents combat-mode pushing against you when worn
- Prevents shove knockdowns when worn
- Prevents gravity effects when worn
- Prevents buckling when worn
- Cannot be red potion'd.
- Does NOT protect against batons or knockdown.
Current Armor values:
- melee = 80
- bullet = 80
- laser = 70
- energy = 60
- bomb = 100
- bio = 100
- fire = 100
- acid = 100
- wound = 30
## Why It's Good For The Game
This PR adds in quite a few items that fill certain role archetypes
within security while allowing them to still use equipment that security
would already have.
## Proof Of Testing
Testing overall has been completed.
Testing left to do:
- [x] Cargo Orders
## Changelog
🆑
add: Added a bunch of alternative additional weapon and equipment
upgrade options to security, allowing a little bit of difference in the
late-game arsenal or general armament.
add: Adds the WT-550-B and WT-550-C, upgrades to the classic autorifle.
add: The WT550 can now also be sawn-off.
add: Adds the Stingballer, a close range weapon that rapidly shoots
stingballs.
add: Adds the Stunstaff, an aura-farming alternative to the classic
baton and shield.
add: Adds the Advanced Energy SMG, an a modified AEG that gains
rapid-fire capabilites.
add: Adds the Security Juggernaut suit, an impossibly slow suit that
hinders your movement but has some of the best armour you'll ever see.
add: Adds the .38 battle rifle, a simplified NT-38 Battle Rifle. Lacks
the combat improvements, but does not degrade.
balance: The Horizon Beam Rifle's performance has been tweaked. Damage
is now 110, with 35 armor penetration and a demolition mod of 2, as well
as the ability to destroy walls like pulse rifles.
add: The Kiboko and pneumatic grenade launcher can be bought from cargo
now.
del: The WT-551 has be completely removed and replaced with the WT-550
del: Any instances of Skyrat's ammunition naming system have been wiped.
Please report any inconsistencies you may find.
/🆑
---------
Co-authored-by: Cabbage <supredoode@gmail.com>
Co-authored-by: Mathilde <146444134+ibexgoetia@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
## About The Pull Request
I have no idea how to word this so here's a list instead.
1. Fixes#96445 by making it so that instead of healthscan code coming
up with cure text on the spot for viruses, advanced diseases have a
function that can generate cure text so you can use it in things other
than healthscanning.
2. Rewords a single letter var in medical kiosk code
3. As a result of 1, the code for disease state analyzers healthscanning
has been shortened because the cure text generating function only has to
be written once and not twice.
4. Health scans now have a power level instead of just being advanced or
basic. There is a new power level called super, and it's only available
to ghosts. Super scans can see all virus symptoms instead of just 3, and
the current stage of an alien embryo.
5. For some reason a bunch of healthscan code (like stuff from the eye
of god and health scanner mod module) were using 1 instead of
SCANMODE_VERBOSE (a define that equals 1 but is more readable) for the
scanmode. That's no longer the case.
6. A new health scanner, the super health scanner, that replaces the
advanced one in the box of debug tools.
<img width="620" height="223" alt="image"
src="https://github.com/user-attachments/assets/a0c5e56e-cf19-4db2-a2df-b72456123c50"
/>
<img width="73" height="65" alt="image"
src="https://github.com/user-attachments/assets/27f8c81b-4f89-455b-82fa-a0ecf94656cf"
/>
## Why It's Good For The Game
Ghosts should be able to see everything, I think
## Changelog
🆑
qol: Ghosts can see alien embryo stage and all virus symptoms when
health scanning
code: Health scanners now support multiple scan levels
fix: Fixes medical kiosks not being able to identify advanced disease
cures.
/🆑
---------
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Attempts to balance aggressive healing by slightly cutting back on its
incredible constant healing (which is still doable because I don't have
the heart to kill virology uses) and removes immunosilence because we
already have a chem that does that. Sepsisillin pills are mapped into
virology to take its place.
## Why It's Good For The Game
With immunodeficiency, an aggressive healing virus with high severity
becomes incredibly powerful. The combination of chills and fever to buff
severity while they cancel each other out along with a second symptom
like nocturnal regen (because you have the stats for it) makes
aggressive healing too powerful in the right situation but too weak for
everyone else.
Aggressive healing was given high stats under the assumption that they
were necessary to resist natural recovery in hosts that aren't
immunodeficient. That was probably a mistake since it also makes it a
buffer symptom stronger than any other, so its stats are heavily tuned
down.
Immunosilence was removed (because it's just sepsisillin) and
sepsisillin pills were mapped into virology in order to let people
without immunodeficiency be able to better benefit from aggressive
healing. Immunosilence was rather ineffective at its job because it
still let viruses regress to their first stage, which disables your
healing. Sepsisillin can also be used for testing viruses on monkeys.
Pills were added to virology because sepsisillin is a pain to make and
you can also use it to test on monkeys. The whole bottle should last one
person 23 minutes and 20 seconds.
Also I removed the no_self_cure trait that is now unused (it was given
by immunosilence) and changed the description of the aggressive healing
severity threshold to clarify that it starts scaling with any amount of
positive severity, not just after the first point.
## Changelog
🆑
del: Removed ImmunoSilence and its trait
balance: Aggressive healing has much lower stats
fix: fixed a few things
map: Added sepsisillin pills to virology
spellcheck: Clarified the description of aggressive healing
/🆑
---------
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
## About The Pull Request
<img width="194" height="63" alt="image"
src="https://github.com/user-attachments/assets/8b81ede5-3ac1-427c-b580-f75a4b05fae5"
/>
Tripwires, for mechs. A very sturdy cable hung over a space 2-5 tiles
wide, that mechs will trip over if they aren't paying attention.
https://github.com/user-attachments/assets/eb77ac44-73ad-43f7-aa48-3008aedc79e0
It also hurts people it falls on in pretty much the same way as a
vending machine. (it's using `fall_and_crush()`)
https://github.com/user-attachments/assets/97fccb33-d479-4170-8601-07a5b32fe740
To humans, the tripwire blocks movement unless you carefully step over
it(walk) or crawl under it. All beings suffer no issue walking across
the tripwire the long way.
The tripwire is created from wiring together two tripwire poles with a
tripwire cable item. The poles are created from iron rods and iron, the
cable is created from just cable. The wiring takes 3 seconds * how far
the posts are to complete, to a maximum of 12 seconds.
They take significantly increased (10x) damage from any sharp object,
and can be cut in a few seconds using wirecutters. They otherwise have a
`max_integrity` of 500, so a powerful demolition tool(like a mech's
fists or a drill) or a sharp object are fairly necessary to take them
down in a combat-reasonable amount of time.
The tripping has four effects - the damage to the being that the mech
fell on, the paralyzing of that being, damage to the mech pilot's head,
and the time it takes for the mech to get back up. All four of these
numbers are based off of the mech's max health divided by 5, or
`damage_value`.
`damage_value` is applied directly as damage to whoever it falls on.
That person is paralyzed for `damage_value` / 10 seconds.
The pilot of the falling mech recieves `damage_value` / 5 to their head,
with a significant wound bonus. Wear a helmet.
The mech itself recieves `damage_value` * 0.15 seconds of immobility(can
still attack, but can't rotate). (`damage_value` / 10 * 1.5)
What these numbers mean on common exosuits:
- odysseus - mob under hit for 24 damage & 2.4 seconds, pilot hit for ~5
damage, immobile for 3.6 seconds
- ripley - mob under hit for 40 damage & 4 seconds, pilot hit for 8
damage, immobile for 6 seconds
- gygax - mob under hit for 50 damage & 5 seconds, pilot hit for 10
damage, immobile for 7.5 seconds
- durand - mob under hit for 80 damage & 8 seconds, pilot hit for 16
damage, immobile for 12 seconds
- marauder - mob under hit for 100 damage & 10 seconds, pilot hit for 20
damage, immobile for 15 seconds
All of these stun times are large enough to where if there were multiple
people with good weapons around, they could most certainly kill you
before you stand back up. So, don't trip.
Finally, obviously, the clarke is immune. Who'd have thunk.
## Why It's Good For The Game
First, let's all thank the ideas guy. The ideas guy for today is
[dubblywumps](https://discord.com/channels/699727870846697493/705679956021215264/1523883105276919969).
Thank you, dubblywumps. Good idea.
So, what's the point of it? It's an effective area denial tool and
fortification specifically effective against mechs. You can set them up
in the hallways in a reasonable length of time, and it'll at the very
least slow a rampaging mech down, as while they're not strong enough to
handle more than a few punches from a mech, they're strong enough to
handle a few. Falling over as a mech is obviously extremely punishing,
so unless they can take a delay to destroy the wire(or a long delay to
destroy the wire at range), or get around it by tearing through
walls(also a delay), they have to abide by your preferred positioning.
No other tool exists that can truly force a delay in a mech's movement
besides actual walls & windows, which delay humans far more
significantly.
It is not remotely practical in a directly offensive sense, with even
the shortest 2-tile barricades taking too long to set up to do so before
you've been clobbered and perforated. It is practical in an indirectly
offensive sense, to force a fight to continue and prevent the worst part
about fighting a mech: when it walks away. This requires forethought or
teamwork, though. It is also practical in a defensive sense, in
combination with normal barricades to block projectiles you could
reasonably hold a mech off for a while or even potentially force a
stalemate using ranged weapons.
They're very, very cheap materials-wise, but the expense in their
creation is in the time to set them up in a good location. Because they
also slow down people, people won't be setting scores of them up in the
middle of the halls. And if they did, wirecutters take them down faster
than they can be put up.
You may be balking about the immobility time applied to the mech. The
numbers mean that in order to destroy the mech while it lays on the
ground, you must deal a flat 33 + armor damage per second for the
duration of the stun. This is an unreasonable task for one person with a
good crew melee weapon, a reasonable task for two, and an easy task for
three. I think that two people being able to beat you to death after you
failed to take heed of the not-at-all-hidden anti-mech weapon is
reasonable. This is also assuming you have no support team or second
mech, which would be perfectly capable of defending you during your
stun.
## Changelog
🆑
add: Added craftable anti-mech tripwires. A mech that foolishly steps on
one will fall down and be immobilized temporarily. Don't let it fall on
you!
/🆑
## About The Pull Request
The holy whip no longer arbitrarily does 2x damage to vampires
The holy whip is now made out of silver, and thus applies bonus burn
damage when hitting vampires
The damage amount has gone down slightly (36 brute -> 18 brute + 12
burn) but it's slightly offset by the fact that the silver burn damage
is calculated against different armor
Silver itself now does more damage on average (from 5 flat to 4-16 based
on material volume) and is no longer completely blocked by any form of
clothing, instead blocked by wound armor
## Why It's Good For The Game
Tying these hardcoded debuffs to more broad game systems is more
sandboxy, which I think is more fun. It establishes consistent rules
that players can follow without needing niche code knowledge or extra
examine tooltips
Yeah it's a bit weaker in practice... but the balance doesn't really
matter anyways since it's a niche Halloween interaction
## Changelog
🆑 Melbert
balance: "Holy whip" null rod no longer arbitrarily does 2x brute damage
to vampires
balance: "Holy whip" null rod is now made of silver, which does bonus
burn damage to vampires (~1.67x damage now)
balance: Silver material weapons deal more burn damage to vampires on
average now (from 5 flat to 4-16, depending on volume of silver in the
weapon)
balance: Silver material weapons are no longer completely blocked by any
form of clothing, instead now reduced / blocked by wound armor
/🆑
## About The Pull Request
50 files, plus additonal file that was necessary because I slightly
refactored windoor construction. This ended up like three and a half
times larger than most of the other ones, I really wasn't meaning for
that to happen. Maybe its because I more vigorously enforced the empty
line after every return thing. The only way to find out is to read 1700
lines of changes, and I don't feel like doing that again. I pinky
promise it all works, and I've tested every item changed individually.
Changes beyond conversion:
You can't welder down reinforced falsewalls anymore, pretty sure it was
an oversight because they're supposed to be taken down by wirecutters
You can right click to close gun lockers with an empty hand, because
otherwise you can't close the lockers at all if there's a gun in them
Meatspikes no longer runtime on construction due to the old trick of
balloon alert + qdel
Windoor assembly no longer SUCKS DICK!!, it's no longer storing
essentially a boolean in an undocumented number in a string, it no
longer requires a VERB to flip its direction.
on a related note, the creator of the windoor assembly construction
steps has been sent to live on a farm far out in the country
Also, a quick note about how these prs are gonna fuck everything up
until they're all together. There's a lot more places where `attackby()`
is directly called than I would have assumed, and given as those are
being changed to call `item_interaction()` potentially(usually) in a
different pr than the pr in which that atom's `attackby()` is actually
converted, that function's not going to work at all until both are
merged. The good news is that almost every instance this is happening,
it's pure convenience, where the user would have access to both items
anyway and could just manually call the attack chain by clicking them
together. Instances where this is not the case are being skipped over
until they can be packaged together to avoid the issue, but I'm not
bothering to do this on ones where the desync won't make an interaction
actually unusable, because that would require me to turn a 1700 line pr
into a 3500 line pr and I really was aiming for like 500
## Why It's Good For The Game
Ignore the paragraph about how I expect this to create a hostage
situation where the only fix to the bugs I make is to merge my other
prs, and instead think about how cool swing combat would be and how much
you want it
## Changelog
🆑
fix: you now can only use a wirecutter to take down a reinforced
falsewall
fix: meatspikes no longer runtime on construction
fix: you no longer have to use a verb that you can't use to flip windoor
assemblies
qol: you can right click a gun locker to close it
code: 50 files have been moved from attackby() to item_interaction()
/🆑
## About The Pull Request
Moves all inventory slots but handcuffs/legcuffs (as those can be used
by xenos) from ``/carbon`` onto ``/human``, as xenos do not use any of
those inventory slots, only leaving them in use by humans. Their
presence on ``/carbon`` is an artifact of times when monkeys weren't
humans, and some of the slots had to be shared by all carbons.
In some places I've used ``get_item_by_slot`` rather than swapping
checks to ``ishuman`` for simplicity's sake, in some places it might not
be the most optimal solution but in cases like help act any other
solution would require a refactor of the whole (massive) proc.
## Why It's Good For The Game
Cleaner/more sensible code, one step closer to fully datumized
inventories.
## Changelog
🆑
refactor: Moved a lot of human-specific inventory code onto human mobs,
report if inventories break!
/🆑
## About The Pull Request
Thirty files changed, one's not really changed, one's actually just a
copy of a change from a different pr, because for the sake of pipe
cleaners I decided to change the base turf. Probably wasn't a good idea.
This one contains the full set of `/turf/` `attackby()`s(besides those
meant for attacks), converted all at once because the tree of turf
subtypes looks a lot more like a spire than a bush.
Changes beyond conversion:
I added messaging for when you're crowbarring transit tube pods out of
the tubes because I genuinely wasted half an hour trying to figure out
what I'd done wrong in conversion because they don't look any different
so I thought it wasn't working.
If you're reinforcing plating and the plating is reinforced
mid-reinforcement you will no longer waste your plasteel reinforcing the
reinforced plating.
## Why It's Good For The Game
what are we at, ~120? I was expecting this to be a lot more drawn out,
but most of them are really small. I'm gonna have to do a final pass of
calls to `attackby()` once the dust settles, but the end of non-attack
`attackby()`s is just a week away.
## About The Pull Request
Makes more machinery using MAP_SWITCHes so their fancy preview icons
could be displayed in SDMM. MAP_SWITCH takes original icon+icon_state of
machinery as first argument and icon+icon_state (basically a machinery
part because the naming system, like `MAP_SWITCH("computer",
"/obj/machinery/computer/slot_machine")` ) from
icons/obj/fluff/map_previews.dmi
Adds a tool (subsystem) for that need that generates preview icons for
stuff that has overlays. To include them in preview generating you have
to set specific variable to TRUE.
## Why It's Good For The Game
Lets us do this instead of black boring consoles:
(before)
<img width="641" height="575" alt="image"
src="https://github.com/user-attachments/assets/35fc5a19-bc24-4c02-957a-43ddef86e684"
/>
(after)
<img width="641" height="575" alt="image"
src="https://github.com/user-attachments/assets/99310823-747f-4e0a-acf8-60abcc8f2ed1"
/>
## Changelog
🆑
qol: Made machinery with overlays actually be properly displayed in SDMM
editor.
/🆑
## About The Pull Request
On April Fools - or if you're exceptionally (un)lucky - ripping up a
certain poster will reveal a certain other poster underneath.
## Why It's Good For The Game
:clueless:
## Changelog
🆑 Melbert
add: On April Fools, or if you're exceptionally (un)lucky, ripping up a
certain poster will reveal a certain other poster underneath
/🆑
## About The Pull Request
### Summary
This PR changes internal structure of `/datum/gas_mixture`:
`gases[gas_id][MOLES]` refactored into `moles[gas_id]`,
`gases[gas_id][ARCHIVE]` into `moles_archive[gas_id]` and
`gases[gas_id][GAS_META]` into `gas_meta` static variable. This allows
us to use BYOND 516 vector functions for calculating total moles and
heat capacity. Also it simplifies some parts of the code, allowing us to
get rid of macros `ADD_GAS` and `ASSERT_GAS`. According to the profiler
`/turf/open/process_cell` time is reduced by ~20%.
### Details
`gas_mixture.gases` was a nested 2d-list with MOLES, ARCHIVE and
GAS_META for each gas_id. For example, to get gas moles you had to do
`gases[gas_id][MOLES]`. I've changed this structure to be as follows:
`moles[gas_id]` - moles for the gas, `moles_archive[gas_id]` - archived
version of moles, `gas_meta[KEY][gas_id]` - static var with meta
information for the gas.
Since I removed key GAS_META from the gases, `gas_meta` was moved to the
static variable and the order of keys in the array was changed from
`gas_meta[gas_id][META_KEY]' to 'gas_meta[META_KEY][gas_id]`. This was
done to allow using it in vector calculations (for example heat capacity
or fusion power). Static variable access is very fast and it is
considered as accessing a global in the bytecode.
Byond 516 introduced new vector functions: `values_sum`, `values_dot`
and others. These functions are very fast, but operate only on
associative lists. This allows us to change the way we calculate
total_moles and heat_capacity - very hot and heavily used functions.
`total_moles()` became just `values_sum(moles)`, and `heat_capacity` is
just a dot product: `values_dot(moles,
gas_meta[META_GAS_SPECIFIC_HEAT])`.
As a side bonus, since `moles` is just an associative list, you don't
really need old macros `ADD_GAS` and `ASSERT_GAS` - all they did was to
make a copy of a list[3] with default value [0, 0, gas_meta] for
specific gas. Now when you're adding gas you can just use `moles[gas_id]
+= amount` and when you query amount of gas you can just query the key
(for example `moles[/datum/gas/oxygen]`) if the key does not exist, it
returns null and works as 0 for all arithmetic and logic operations. For
example, old code would be `if (!air.gases[/datum/gas/oxygen] ||
air.gases[/datum/gas/oxygen][MOLES] < 1)` and now it is `if
(moles[/datum/gas/oxygen] < 1)`. This simplifies some parts of the code
and also speeds things up.
For the performance comparison I used Tracy profiler. I've done many
different tests, and they all show slightly different numbers, but
overall speedup for `process_cell` is about 20%. (-20% to average time
per call from ). My testing setup was as follows:
Load Icebox, drop 30/60/90 radius bomb in the middle of the bridge, set
code to blue, wait 10 minutes until the round ends.
Also I fixed random seed in the master controller and in the planetary
gas randomization so generated maps are the same between tests.
Althought it's not very realistic, it generates a lot of samples for the
`process_cell` (around ~3.5M per 10 minutes).
Another test I did was a plasmafire in an 8x8 space, on runtime station,
it showed (-24% time on process_cell).
Another test was a emagged holodeck burn test, it showed (-13% time)
As for other functions of gas_mixture: `total_moles`: -50%(2x speedup),
`heat_capacity`: -65%(3x speedup), `share`: -30%, `react`: -20%. Timings
of all those functions is in microseconds range and they are very hot
(call count is in the same order as process_cell)
<details><summary>Some pictures from profiler</summary>
<img width="569" height="642" alt="process_cell"
src="https://github.com/user-attachments/assets/76fa0c27-719d-485d-9bfc-859fef788999"
/>
<img width="572" height="315" alt="image"
src="https://github.com/user-attachments/assets/f68497e9-4db8-4a9c-b43f-ad04e6dc5cac"
/>
<img width="569" height="317" alt="image"
src="https://github.com/user-attachments/assets/d7249e7b-f344-47a6-8b39-1bab0521182d"
/>
<img width="541" height="316" alt="image"
src="https://github.com/user-attachments/assets/1bef71fd-533d-40fa-a85e-7a803ad322f7"
/>
<img width="519" height="409" alt="image"
src="https://github.com/user-attachments/assets/51165289-174e-403d-a09c-787dd9af136a"
/>
<img width="523" height="318" alt="image"
src="https://github.com/user-attachments/assets/fe4b1db0-17d8-47f9-8fd0-e2ecef2ee66a"
/>
</details>
<details><summary>Setting up a profiler</summary>
If you wanna to reproduce my results here is a list of steps
1. download: https://github.com/goonstation/byond-tracy-writer (this one
has offsets for my version 1677)
2. build the dll, drop in the tgstation/ folder
3. download rtracy https://github.com/Dimach/rtracy
4. download Tracy profiler (0.13.1) https://github.com/wolfpld/tracy
5. uncomment `#define USE_BYOND_TRACY` in `_compile_options.dm`
6. build tgstation
7. open dream daemon, run the desired test, after round end dream daemon
closes
8. navigate to tgstation/data/profiler, find the `123412341234.utracy`
file
9. run `rtracty 123412341234.utracy`
10. open tracy-profiler.exe, press Connect, save the profiler data
11. repeat steps 5-10 with another branch, save another profiler data
12. open tracy-profiler, open first data, press compare, open second
data
</details>
## Why It's Good For The Game
## Changelog
🆑
refactor: Atmos refactor & speedup by utilizing BYOND 516 vector
functions
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
I fixed should_not_sleep() locally as it wasn't catching all cases. I
PR'd this but want to do some damage control before its merged so our
linters dont fail on master
This revealed some procs that are sleeping but could run in
SHOULD_NOT_SLEEP procs.
I'll probably keep doing more of these.
## Why It's Good For The Game
prevents procs that shouldnt nap from napping
## Changelog
🆑
fix: Fixed some sleeping procs that could run in procs that arent
allowed to sleep
/🆑
## About The Pull Request
#Nitrogen4Vox
I know we have low amount of vox players but this feels like a
no-brainer change.
Also this updates the emergency nitrogen tank sprite to be consistent
with tg's.
<img width="835" height="458" alt="image"
src="https://github.com/user-attachments/assets/ba14a469-c8eb-4aaa-a806-788b38a7f451"
/>
## Changelog
🆑 Robwo
add: Added emergency n2 tanks to oxygen closets for vox.
/🆑
## About The Pull Request
Now you can print plastic Replica katanas (toy) in Service Fabricator (1
plastic sheet) and hacked autolathe (a little more expensive) similar to
how foam armblades are printed
<img width="672" height="254" alt="dreamseeker_d7k3WfRLXU"
src="https://github.com/user-attachments/assets/172c08ac-310e-42c9-9a37-55e02d956b18"
/>
<img width="639" height="323" alt="dreamseeker_HpcZDqsNfO"
src="https://github.com/user-attachments/assets/bc529702-97af-47d7-995d-745afa0babba"
/>
<img width="670" height="600" alt="Cq7MZBNnYF"
src="https://github.com/user-attachments/assets/1548d6e7-3323-40a4-bf9e-fbb9d2ec9702"
/>
## Why It's Good For The Game
Fake (plastic) armblades have been available for printing for quite some
time now. Adding a printable Replica katana follows the same trend, and
it fits perfectly with the current sheaths.
## Changelog
🆑
add: Now you can print Replica Katana in Service Protolathe and Hacked
AutoLathe
/🆑
## About The Pull Request
This PR adjusts the ethereal stomach equivalent (biological batteries)
such that they provide their charge whenever either they or their mob
owner get hit by a multitool. This is formatted in the exact same way as
seen when multitooling a cable. A tip of the round indicates that this
is possible.
Additionally, health analyzers will show stomach charge as well. While
coding this I made a couple of slight adjustments to the nearby blood
level formatting for spelling and a (sometimes) stray comma. In effect
this makes it go from displaying "Blood level: 100%, 560 cl, <ins>type:
O+</ins>" to "Blood level: 100%, 560 cl <ins>O+</ins>" (with the
underlining being a tooltip).
## Why It's Good For The Game
To my knowledge, there is currently no way to get the exact and
quantified charge of an ethereal. This makes it difficult for anyone
healing an ethereal to definitively tell whether toxins damage is from a
lack/excess of charge or some other source.
Aside from that, it's also just mildly comedic to be able to check the
charge of a living entity in the exact same way as a piece of insulated
copper.
## Changelog
🆑
add: Health analyzers now display ethereal charge.
add: It is also possible to check the charge of an ethereal (or their
stomach equivalent) with a multitool.
/🆑
## About The Pull Request
Fixes bug with material tile having no materials after you pry it and
place it back.
Bug was introduced in #92620, found by bisection. Proc
`/obj/item/stack/apply_material_effects(list/materials)` was
[deleted](https://github.com/tgstation/tgstation/pull/92620/changes#diff-0c7456c96a956e2de9c4962ab9dba27fda208421cc48f9aca97b7cad6dc9ed43L163-L167)
in that PR by mistake or by oversight, so when you pry the tile,
`mats_per_unit` is null.
This PR brings back that proc, fixing the bug.
## Changelog
🆑
fix: Fixes material tiles not having material after prying and placing
back.
/🆑
## About The Pull Request
Allows people to detach a cleaner and vacuum (uses the trash bag) from
janitor borgs. This option uses zero water management and doesn't create
slip tiles.
The module can be locked with alt click.
<img width="342" height="681" alt="image"
src="https://github.com/user-attachments/assets/0fe53f8b-d850-4354-aa70-382ca40dcd37"
/>
<img width="590" height="581" alt="image"
src="https://github.com/user-attachments/assets/70fea653-ad20-479a-8986-fed0e15af4b1"
/>
https://github.com/user-attachments/assets/ff81a214-1bfb-4a33-a660-ccb563e310af
Sounds are from soundsnap and properly licenced.
https://soundsnap.zendesk.com/hc/en-us/articles/115003916431-Legal
## Why It's Good For The Game
I think co-op mechanics are fun. If you manage to get a friend, this is
an option with zero water management. I feel like janitor borgs don't
really have much the way to cooperate with their base mechanics. You can
walk into a department and clean it wordlessly. This gives the option
where you can clean with your friend (or the crime scene you're trying
to scrub)
## Changelog
🆑 StrangeWeirdKitten, Toriate (sprites)
add: Janitor borgs now have a crew operated end that allows their
squishy overlords to do some cleaning themselves.
/🆑
## About The Pull Request
Allows people to detach a cleaner and vacuum (uses the trash bag) from
janitor borgs. This option uses zero water management and doesn't create
slip tiles.
The module can be locked with alt click.
<img width="342" height="681" alt="image"
src="https://github.com/user-attachments/assets/0fe53f8b-d850-4354-aa70-382ca40dcd37"
/>
<img width="590" height="581" alt="image"
src="https://github.com/user-attachments/assets/70fea653-ad20-479a-8986-fed0e15af4b1"
/>
https://github.com/user-attachments/assets/ff81a214-1bfb-4a33-a660-ccb563e310af
Sounds are from soundsnap and properly licenced.
https://soundsnap.zendesk.com/hc/en-us/articles/115003916431-Legal
## Why It's Good For The Game
I think co-op mechanics are fun. If you manage to get a friend, this is
an option with zero water management. I feel like janitor borgs don't
really have much the way to cooperate with their base mechanics. You can
walk into a department and clean it wordlessly. This gives the option
where you can clean with your friend (or the crime scene you're trying
to scrub)
## Changelog
🆑 StrangeWeirdKitten, Toriate (sprites)
add: Janitor borgs now have a crew operated end that allows their
squishy overlords to do some cleaning themselves.
/🆑
## About The Pull Request
Chainsaws are supposed to be able to be used to behead dead people,
however they haven't been able to do this since I did a check wrong in
#94808 and nobody complained about it to me until today, nor posted an
issue report
The bug was that I checked if the head was dismemberable before trying
to cut it off and fell back to just attacking them if it failed
However `can_dismember()` on heads returns false on everything except
zombie heads
Instead I elected to just remove the checks: You can try and cut
anyone's head off for 15 seconds you just might fail (for instance if
they are a golem)
Additionally I made it so that you can only cut people's heads off with
a chainsaw while it's turned on, because that feels like it makes sense
Finally I removed the "put in hands" call after dismembering the head
because... chainsaws take up both of your hands...
## Why It's Good For The Game
Fixes a bug
It's cool to be able to cut peoples' heads of sometimes
## Changelog
🆑
fix: You can cut off the heads of corpses using a chainsaw
balance: You have to turn it on first
/🆑
## About The Pull Request
- Knockdown, Stun, and Paralyze now have a 66% change to trigger glorf
by default (down from 100%)
- Immobilize and Incapacitating now has a 0% chance to trigger glorf
(down from 100%)
- Sleep and Unconscious still has a 100% chance to trigger glorf
- A second roll is made depending on severity of the effect: >6 second
stuns have a 100% chance, >2 second stuns have a 66% chance, <2 second
stuns have a 0% chance
- Disarm knockdowns will always trigger a glorf (they are unaffected by
the aforementioned changes)
- All forms of incapacitation induced glorfing will no longer cause
cigarette choking unless the effect was of >30 second duration
- Modified chance to glorf on punched from 100% if above 9 force to 66%
if above 9 force or 100% if above 12 force
- Fixed a bug where getting glorfed right after you open the chat window
but before you type anything forces the last message to be repeated
- Changed the glorf effects on death to cut off abruptly rather than
append something
<img width="365" height="37" alt="image"
src="https://github.com/user-attachments/assets/85c963f4-72f0-4cf5-b919-e4570bfe159b"
/>
## Why It's Good For The Game
We use microstuns for temporary effects in many places (such as a 0.1
second immobilize on shuttle transition), which is cool and good, but
these microstuns will constantly trigger glorfing (which is mildly
annoying) and cigarette choking (which is literally lethal)
As funny as it is the first time to die to choking on a cigarette
because you smoked while a shuttle moved, it gets tiresome fast
Ultimately my changes here sought to make force say trigger a bit less
consistently, to keep the jokes from being ran into the ground and make
it a bit less unfun to play around
## Changelog
🆑 Melbert
balance: Knockdown, stun, and paralyze now have a 66% chance to
interrupt speech (down from 100%)
balance: Immobilize and Incapacitate now has a 0% chance to trigger
interrupt speech (down from 100%)
balance: Sleep and Unconscious still has a 100% chance to trigger
interrupt speech
balance: Chance to interrupt speech from a stun makes a second roll
based on stun severity: >6 second stuns have a 100% chance, >2 second
stuns have a 66% chance, and <2 second stuns have a 0% chance
balance: Shove knockdown is unaffected by these changes, and always
interrupts speech
balance: Having speech interrupted from stuns no longer causes you to
choke on cigarettes unless the stun effect was high severity (>30
seconds)
balance: Chance of interrupting speech on punch was modified from 100%
at 9 damage to 66% at 9 damage and 100% at 12 damage
fix: When your speech is interrupted from death, it now cuts off
abruptly, rather than appending a generic interrupt indicator
fix: Fixed a bug where you repeat your last said line if your speech is
interrupted after opening your say box, but before typing anything
/🆑
## About The Pull Request
This PR adds a unit test for boulder processing, which follows these
steps:
Spawns 2 boulders, a refinery, and a smelter.
Confirms that the boulder is spawning with materials (we're using a
subtype that should allow for processing through both machines, by
setting it's mats to iron and glass.)
Moves the boulder into the refinery, then the smelter, and at each
machine makes sure that it's able to enter the machine properly.
Calls Process on the machine a set number of times, to ensure that the
boulder should be finished.
Checks to make sure the boulder has lost it's processed material.
And then, after the moving the processes through the second machine,
makes sure that it qdels the boulder without leaving any mysterious
ghost boulders lingering in this mortal coil.
The test also runs twice, once going refinery -> smelter, and again from
smelter -> refinery.
## Why It's Good For The Game
The intent is to futureproof boulder refinery, as well as to help
prevent issues like #96549, though I'm not confident that this PR closes
the listed issue just yet.
This process seems to be somewhat delicate based on the number of times
that it's broken thus far in the past 2 years, and starting to implement
a unit test is the best way to improve it's reliability going forward.
## Changelog
No player facing changes.
---------
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Cleanable decals, such as rubble, trash, glass shards, etc, can no
longer be hit (not interacted with, but just offensively hit) in combat
mode.
Ore vents now more consistently clear rocks around them, and spawn
noticeably less debris.
## Why It's Good For The Game
Suggested under my necropolis tile PR, some larger decals may steal your
clicks in combat which I do not think offers any positive gameplay
value.
Ore vents just spawn too much debris, and as it only has one sprite, it
just looks really bad.
## Changelog
🆑
qol: Ore vents spawn less rubble and are more consistent at excavating
the surrounding area
balance: Cleanable decals can no longer be hit (not cleaned, just hit)
if the user has combat mode on.
/🆑
## About The Pull Request
This PR moves most of the code for using an item to commit suicide from
`human` to `living`, so that anything with hands can use what it is
holding to commit suicide.
This was surprisingly painless, as most `suicide_act` procs were already
written without the assumption that the person killing themselves was a
human even though they couldn't be anything else.
This might occasionally mean that in some cases (like drones) it may
reference anatomy that they don't have (like necks) but I think that's
not a big deal and don't worry about it.
## Why It's Good For The Game
It's funny.
## Changelog
🆑
balance: Anything with hands can now use the things it is holding to
commit suicide
/🆑
## About The Pull Request
None of this code got updated with all the examine changes so it stuck
out
Now it looks proper again
<img width="426" height="351" alt="image"
src="https://github.com/user-attachments/assets/9eaab1bc-7464-49b5-b161-4bde1b1051e4"
/>
## Changelog
🆑 Melbert
fix: Fix false walls being distinguisable via examine
/🆑
## About The Pull Request
<img width="1534" height="357" alt="firefox_fHp7w5Ycwe"
src="https://github.com/user-attachments/assets/eb6c20f5-f7f2-4e17-acdd-36a143a0ec58"
/>
Blood decals have a merging mechanic in the parent call which can result
in queuing it for deletion. So we need an early return here to match the
one in the parent or we will hang refs.
## Why It's Good For The Game
Fixes a hard delete
## Changelog
Not player-facing
## About The Pull Request
20 files converted, that last one's just to make the return value
explicit. The syndicate bomb `attackby()`'s only half converted, because
half of it was actually meant for `attackby()`.
## Why It's Good For The Game
only like, 250 files to go. Slow and steady.
## Changelog
🆑
code: 20 files have been converted from attackby() to item_interaction()
/🆑
## About The Pull Request
So it's possible for a mining mob respawner to be spawned by
`/datum/biome/populate_turfs`, which calls `setup()` on the respawner,
and if the mob being passed is a random spawner, it'll register
`COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON` on the turf to wait for
that random spawner to spawn something. Since this is happening prior to
atom subsystem init, that spawn won't happen until later. Once the atom
subsystem starts Initializing stuff, if the mining respawner gets
Initialized before the random spawner, it'll call `spawn_mob` which, if
it happens to choose the same turf its on, will register
`COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON` again and runtime.
## Why It's Good For The Game
<img width="1388" height="310" alt="image"
src="https://github.com/user-attachments/assets/90bc2030-b8e4-4e1a-92cd-bbd399359684"
/>
## Changelog
N/A
## About The Pull Request
calling this proc by itself SHOULD do literally nothing as all it does
is builds and returns a list of icons
I wonder if this changes anything.
## Changelog
🆑
code: Ensures some code actually updates overlays instead of return a
list of them to nobody
/🆑
## About The Pull Request
So far as I can tell, facehuggers are being instantly obliterated in a
fiery blast in our CI, which causes them to try to become corpseified,
despite having been qdeleted.
<img width="1687" height="701" alt="image"
src="https://github.com/user-attachments/assets/a3cbb490-f377-42de-8f66-f97a9bb4292c"
/>
This PR puts an end to those shenanigans. Also cleans up _some_ of this
file while I'm here, there's a lot of very old code here.
## Why It's Good For The Game
Flaky CI runtimes bad
## Changelog
N/A
## About The Pull Request
In similar fashion to what was done with crafting recipes last year,
this year it's time for techweb designs and printed items to be audited.
This is mostly just about consistency, we've a lot of items that can be
printed by protolathes, autolathes, circuit printers and techfab etc.
However they almost all (except most stacks, mainly) have custom
materials that do not match in one way or another with the materials
used by the design, which is what this PR is for.
"But items printed from lathes etc. already get the mats used to make
them." Yes, they do, however that isn't the case for items of the same
type that were spawned in some other way (cargo shuttle, space/maints
loot, mapped, admins), this create a subtle discrepancy. It isn't a huge
deal (in spite of the size of this PR, ton of designs), but given that I
have done something similar with crafting recipes before, I may as well
give it a second arc of some sort and bring things to completion. And
fix a few possible oversights.
TL;DR consistency and stuff
## Why It's Good For The Game
Consistency, unit test checks to make it harder not to be consistent in
the future. Still has a few TODOs like:
- [x] Fixed newly printed, fully charged RCDs costing less than the RCD
cartridges required to fully charge one. EDIT: I had to tweak the newly
added RDD as well because it suffered from the same fundamental issue.
- [x] Fixed plates being made of iron and yet shattering like ceramic
ones. A new subtype for metallic ones has been made.
## Changelog
🆑
refactor: Refactored a few things with techweb designs (the ones for
autolathes, protolathes, circuit printers, mechfabs etc.) to make sure
that the materials of items that can be made from these designs more
closely match the materials used to make them.
fix: Lizard fries no longer need a plate to be made, like all other
treats that used to require plates in a distant past.
balance: Tweaked the materials cost of RCD, RDD and RCD cartridges.
image: Oven trays now have a more metallic hue.
balance: Plates printed printed from lathes won't shatter like ceramic
ones, in virtue of them being made out of iron instead.
/🆑
## About The Pull Request
21 things.
Additionally, an actual refactor(a real one) of refunding of item-based
spellbook entries, as in the three summons, which hasn't worked for four
years and now does.
Lastly, the holopayment stand IDs can project can now accept payment.
## Why It's Good For The Game
They want you to think this is worth 210 gbp, don't believe the lies
## Changelog
🆑
fix: Wizards can now successfully refund summoning items
fix: Holopayment stands can now take payment
code: 21 things have been moved from attackby() to item_interaction()
/🆑
## About The Pull Request
just macro-izes all the usages of verbs in the codebase as a
pre-requisite to my follow up pr that serializes all the verbs arguments
so we can tgui-ify the command bar, so we can then put it on the
onscreen map.
this also basically does the same as #94487 so can easily be integrated
into the verb queueing stuff... but does not actually do any verb
queueing by itself. basically im just trying to be
https://github.com/tgstation/tgstation/labels/Atomic
## Why It's Good For The Game
it doesn't really do anything by itself but it does let us do more stuff
## Changelog
🆑
code: the backend to all verbs in the game has been played with, please
report any issues to github
/🆑
---------
Co-authored-by: harryob <55142896+harryob@users.noreply.github.com>
## About The Pull Request
`item_interaction()` before `interact_with_atom()`, my bad. Wasn't able
to test this one because hand teleporters weren't working at all at the
time.
## Why It's Good For The Game
fixes#96775
## Changelog
🆑
fix: hand teleporters can now close portals
/🆑
## About The Pull Request
fixes#95859
Due to planecube (?) we now render floor at layer 10.000
that means c4 was way below the floor and wouldnt show up if you
attached it to floro.
I put it on ABOVE_OPEN_TURF_LAYER but there might be a better layer for
it?
## Why It's Good For The Game
bro invisible c4 epic prank (caught in 4K) is over. Its probably for the
best
## Changelog
🆑
fix: C4 no longer renders below floors when placed on floors
/🆑
## About The Pull Request
fixes#94045
## Why It's Good For The Game
bro my hot spring wasnt springing hot
## Changelog
🆑
fix: Hot springs now use correct args for creating smoke
/🆑
## About The Pull Request
People had been noting that it was taking longer to pay off a 1000 point
gulag sentence than expected, because we made some changes to mining and
forgot to update it
So now:
- There are ores in the walls again (iron, plasma, silver, and gold)
- Materials are now worth a variable amount of points (iron = plasma <
silver < gold)
- Boulders mined from the walls pop into a large amount of the kinds of
ores you can mine
- Boulders dragged out of the infinite use "work pit" contain a
guaranteed large amount of iron
The upshot of these changes are:
- You can pull 14 boulders out of the hole for a guaranteed time spent
of about 6 and a half quite boring minutes to guarantee finishing your
sentence (if you know exactly what you are doing and optimise it,
probably a bit longer for many people)
- You can mine the walls for ore at the mercy of RNG, you will _likely_
be done in about 5 minutes of mining if you're an early sentence and
obviously it gets harder the more people have already mined out the ores
I aimed for about 5 and 6 minutes as a target because of a combination
of travel time, the fact that you need to actively do something, and
because of the weather.
Remember that's only 5 or 6 minutes actually doing _mining_ (or...
watching progress bars and repeatedly falling over), doesn't include
variations in skill or luck, being hustled into the teleporter, suiting
up, processing the ores, summoning the shuttle, taking the ores to the
shuttle, and an ash storm if you're unlucky. So all around, probably
adds up to be reasonably close to a 10 minute brig timer.
We all know most people given a 1 point sentence are just going to kill
themselves anyway.
Also I moved some lightbulbs in the mining station work camp area
because you couldn't see some of the important tiles and it was annoying
me
## Why It's Good For The Game
We advise players that 1000 points in the work camp is work about a 10
minute brig sentence and this is basically ban-baiting from our policy
page if it's not actually true
## Changelog
🆑
balance: Adjusted the values of ores from the work camp to make a 1000
point sentence closer to a 10 minute brig timer
map: Moved some lightbulbs around in the work camp so you can see the
bars getting printed
/🆑
<!-- 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. -->
## About The Pull Request
Closes#87571
Callouts now use an override of pointing code rather than an entirely
separate visual, which means that they can trigger pet commands now.
Also, they start off by default.
## Why It's Good For The Game
Callouts are only useful if you're mining with a buddy, so leaving them
off by default is a sensible choice since most of the time that's not
the case.
## Changelog
🆑
qol: Miner callouts are now off by default
fix: Miner callouts can now be used to command pets like regular
pointing
/🆑