* Adds IS_TRAITOR macro (#74293)
## About The Pull Request
i was making another PR and found that we have cultist, heretic, and
nuke op IS macros but not one for traitors
this adds one and then replaces it where applicable, mostly in checks
where a traitor device does something different if you are not a traitor
## Why It's Good For The Game
better for people making traitor only devices to have this macro, as it
is more clear and also cleaner in general i think
## Changelog
🆑
code: adds IS_TRAITOR macro
/🆑
* Adds IS_TRAITOR macro
---------
Co-authored-by: Sol N <116288367+flowercuco@users.noreply.github.com>
* Fixes malf camera upgrade appearing on security camera consoles (#73970)
## About The Pull Request
Wow that was easier than I thought
Malf AI camera upgrade no longer shows up camera consoles.
Advanced Camera consoles probably still show it but those are harder to
get so someone else can fix those
## Why It's Good For The Game
It is admittedly very funny to instantly valid a malf ai but probably
not fun
## Changelog
🆑 Melbert
fix: Malf AI's xray camera upgrade no longer shows on station security
camera consoles
/🆑
* Fixes malf camera upgrade appearing on security camera consoles
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Adds Pinatas that can be purchased by cargo and clown operatives! (#73868)
## About The Pull Request
Pinata's drop various items when struck with a sufficiently powerful
weapon. This PR adds two types, a standard one which can be bought from
cargo which contains various candy items and a syndicate one which
contains both candy items and explosives purchasable by clown
operatives.
The pinata functionality is also a component so admins can turn any
structure/machine/mob into a pinata and customize the "candy" inside
Sprites by @ Mey-Ha-Zah animated versions by me
## Why It's Good For The Game
Adds a cute little celebration themed structure that can be bought by
players to accommodate a celebration based gimmicks or the party trait.
I think the options on things to do as a crew during a celebration are a
bit limited at present with most of the options being making/purchasing
food, activity wise the main example of a celebration item is pin the
tail on the corgi which is a bit uninteresting, the pinata on the other
hand is more cathartic and provides a "reward" in the form of various
candy items for people who participate in smashing it. I also think its
just funny to have clown operative gambling half their TC to try and get
explosives.
## Changelog
🆑 Mey-Ha-Zah & NamelessFairy
add: Added pinata crates to cargo, they contain various candy items. Fun
at parties.
add: Clown operatives can now purchase a weapons grade pinata, this
contains both candy and explosives. Still fun at parties.
admin: Admins can now turn players, mobs and objects into pinata's with
the new pinata component.
/🆑
* Adds Pinatas that can be purchased by cargo and clown operatives!
---------
Co-authored-by: NamelessFairy <40036527+NamelessFairy@users.noreply.github.com>
* Adds a stack_trace for emissives with invalid icon_states, fixes all that appeared roundstart (#73678)
## About The Pull Request
So, this spiraled from one missing icon being fixed to an entire check
for said icons.
Several icon files no longer use error icons because its assumed that
the checks will handle any missing ones, but the checks don't apply to
emissives nor overlays at all. This led to the radsuit having an
emissive but no icon_state for it - a relic of the old radsuit. This was
only noticed because of a downstream with an error icon appearing for
it...
I was curious how many were actually having the same issue, so I made a
small little stack_trace in the mutable_appearance proc.
There were like, 2k. Lots of them were icons named, like, "transparent"
or "blank" too...
I moved that check to the emissives proc because I semi-understand that
system so could actually fix it, and it moved to around fourty
roundstart. Much more achievable.
(The error usually has more info if you click on it, including the item
that caused it. I dunno how to add that to the check itself because of
where it's located, though.)

This fixes all the ones I could find, including...
Nonexistant icons that shouldn't be adding emissives on:
- Empty Barsign
- Radsuit
- Mass Driver Controllers
- Telescreens
- Aux Base Consoles
- PanDEMIC
- Kobayashi computer (holodeck)
- Abductor camera console
- Syndie drop pod
- BSA controller
Entirely missing icons on:
- Pwr Game Vendor (this was just misnamed)
- Generic Soda Vendor
- Engivend
- Security Laptop (proud of this one.,.,)

There are no doubt more of them hidden about, but I don't really know
what I'm doing... If there's a check that'd be better than this, please
review telling me what to change <3
## Why It's Good For The Game
Fixes missing icons, fixes attempts to add icons where we don't need
them, and adds a check to help fix more of the two issues as they occur.
## Changelog
🆑
fix: fixed missing emissives on the Engivend, Pwr-Game Soda, and generic
Soda vendors. Also fixed the seclaptop having no valid screen icon!
fix: fixed a few items trying to apply emissives when they shouldn't.
code: added a stack_trace for emissives with missing icon states.
/🆑
* Adds a stack_trace for emissives with invalid icon_states, fixes all that appeared roundstart
* Update cryopod.dm
---------
Co-authored-by: OrionTheFox <76465278+OrionTheFox@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
* Nightvision Rework (In the name of color) (#73094)
Relies on #72886 for some render relay expansion I use for light_mask
stuff.
Hello bestie! Night vision pissed me off, so I've come to burn this
place to the ground.
Two sections to discuss here. First we'll talk about see_in_dark and why
I hate it, second we'll discuss the lighting plane and how we brighten
it, plus introducing color to the party.
https://www.byond.com/docs/ref/#/mob/var/see_in_dark
See in dark lets us control how far away from us a turf can be before we
hide it/its contents if it's dark (not got luminosity set)
We currently set it semi inconsistently to provide nightvision to mobs.
The trouble is stuff that produces light != stuff that sets luminosity.
The worst case of this can be seen by walking out of escape on icebox,
where you'll see this

Snow draws above the lighting plane, so the snow will intermittently
draw, depending on see_in_dark and the luminosity from tracking lights.
This would in theory be solvable by modifying the area, but the same
problem applies across many things in the codebase.
As things currently stand, to be emissive you NEED to have a light on
your tile. People are bad at this, and honestly it's a bit much to
expect of them. An emissive overlay on a canister shouldn't need an
element or something and a list on turfs to manage it.
This gets worse when you factor in the patterns I'm using to avoid
drawing lights above nothing, which leads to lights that should show,
but are misoffset because their parent pixel offsets.
It's silly. We do it so we can have things like mesons without just
handing out night vision, but even there the effect of just hiding
objects and mobs looks baddddddd when moving. It's always bothered me.
I'll complain about mesons more later, but really just like, they're too
bright as it is.
I'm proposing here that rather then manually hiding stuff based off
distance from the player, we can instead show/hide using just the
lighting plane. This means things like mesons are gonna get dimmer, but
that's fine because they suck.
It does have some side effects, things like view() on mobs won't hide
stuff in darkness, but that's fine because none actually thinks about
view like that, I think.
Oh and I added a case to prevent examining stuff that's in darkness, and
not right next to you when you don't have enough nightvision, to match
the old behavior `see_in_dark` gave us.
Now I'd like to go on a mild tangent about color, please bare with me
You ever walk around with mesons on when there's a fire going, or an
ethereal or firelocks down.
You notice how there isn't really much color to our lights? Doesn't that
suck?
It's because the way we go about brighting lighting is by making
everything on the lighting plane transparent.
This is fine for brightening things, but it ends up looking kinda crummy
in the end and leads to really washed out colors that should be bright.
Playing engineer or miner gets fucking depressing.
The central idea of this pr, that everything else falls out of, is
instead of making the plane more transparent, we can use color matrixes
to make things AT LEAST x bright.
https://www.byond.com/docs/ref/#/{notes}/color-matrix
Brief recap for color matrixes, fully expanded they're a set of 20
different values in a list
Units generally scale 0-1 as multipliers, though since it's
multiplication in order to make an rgb(1,1,1) pixel fullbright you would
need to use 255s.
A "unit matrix" for color looks like this:
```
list(1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1,
0, 0, 0, 0
)
```
The first four rows are how much each r, g, b and a impact r, g, b and
well a.
So a first row of `(1, 0, 0, 0)` means 1 unit of r results in 1 unit of
r. and 0 units of green, blue and alpha, and so on.
A first row of `(0, 1, 0, 0)` would make 1 red component into 1 green
component, and leave red, blue and alpha alone, shifting any red of
whatever it's applied to a green.
Using these we can essentially color transform our world. It's a fun
tool. But there's more.
That last row there doesn't take a variable input like the others.
Instead, it ADDS some fraction of 255 to red, green, blue and alpha.
So a fifth row of `(1, 0, 0, 0)` would make every pixel as red as it
could possibly be.
This is what we're going to exploit here. You see all these values
accept negative multipliers, so we can lower colors down instead of
raising them up!
The key idea is using color matrix filters
https://www.byond.com/docs/ref/#/{notes}/filters/color to chain these
operations together.
Pulling alllll the way back, we want to brighten darkness without
affecting brighter colors.
Lower rgb values are darker, higher ones are brighter. This relationship
isn't really linear because of suffering reasons, but it's good enough
for this.
Let's try chaining some matrixes on the lighting plane, which is bright
where fullbright, and dark where dark.
Take a list like this
```
list(1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1,
-0.2, -0.2, -0.2, 0
)
```
That would darken the lighting a bit, but negative values will get
rounded to 0
A subsequent raising by the same amount
```
list(1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1,
0.2, 0.2, 0.2, 0
)
```
Will essentially threshold our brightness at that value.
This ensures we aren't washing out colors when we make things brighter,
while leaving higher values unaffected since they basically just had a
constant subtracted and then readded.
You may have noticed, we gain access to individual color components
here.
This means not only can we darken and lighten by thresholds, we can
COLOR those thresholds.
```
list(1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1,
0.1, 0.2, 0.1, 0
)
```
Something like the above, if applied with its inverse, would tint the
darkness green.
The delta between the different scalars will determine how vivid the
color is, and the actual value will impact the brightness.
Something that's always bothered me about nightvision is it's just
greyscale for the most part, there isn't any color to it.
There was an old idea of coloring the game plane to match their lenses,
but if you've ever played with the colorblind quirk you know that gets
headachey really fast.
So instead of that, lets color just the darkness that these glasses
produce.
It provides some reminder that you're wearing them, instead of just
being something you forget about while playing, and provides a reason to
use flashlights and such since they can give you a clearer, less tinted
view of things while retaining the ability to look around things.
I've so far applied this pattern to JUST headwear for humans (also those
mining wisps)
I'm planning on furthering it to mobs that use nightvision, but I wanted
to get this up cause I don't wanna pr it the day before the freeze.
Mesons are green, sec night vision is red, thermals orange, etc.
I think the effect this gives is really really nice.
I've tuned most things to work for the station, though mesons works for
lavaland for obvious reasons.
I've tuned things significantly darker then we have them set currently,
since I really hate flat lighting and this system suffers when
interacting with it.
My goal with these is to give you a rough idea of what's around you,
without a good eye for detail.
That's the difference between say, mesons, and night vision. One helps
you see outlines, the other gives you detail and prevents missing
someone in the darkness.
It's hard to balance this precisely because of different colored
backgrounds (looking at you icebox)
More can be done on this front in future but I'm quite happy with things
as of now
I have since expanded to all uses of nightvision, coloring most all of
them.
Along the way I turned some toggleable nightvision into just one level.
Fullbright sucks, and I'd rather just have one "good" value.
I've kept it for a few cases, mostly eyes you rip out of mobs.
Impacted mobs are nightmares, aliens, zombies, revenants, states and
sort of stands.
I've done a pass on all mobs and items that impact nightvision and added
what I thought was the right level of color to them. This includes stuff
like blobs and shuttle control consoles
As with glasses much of this was around reducing vision, though I kept
it stronger here, since many of these mobs rely on it for engaging with
the game
<details>
<summary>
Technical Changes
</summary>
filter transitions.
Found this when testing this pr, seemed silly.
This avoids dumbass overlay lighting lighting up wallmounts.
We switch modes if some turfflags are set, to accomplish the same thing
with more overhead, and support showing things through the darkness.
Also fixes a bug where you'd only get one fullscreen object per mob, so
opening and closing a submap would take it away
Also also fixes the lighting backdrop not actually spanning the screen.
It doesn't actually do anything anymore because of the fullscreen light
we have, but just in case that's unsued.
Needs cleanup in future.
color with a sprite
This is to support the above
We relay this plane to lighting mask so openspace can like, have
lighting
vision goggles and such
Side affect of removing see_in_dark. This logic is a bit weak atm, needs
some work.
It's a dupe of the nightvision action button, and newly redundant since
I've removed all uses of it
trasnparent won't render
These sucked
Also transparent stuff should never render, if it does you'll get white
blobs which suck
</details>
Videos! (Github doesn't like using a summary here I'm sorry)
<details>
Demonstration of ghost lighting, and color
https://user-images.githubusercontent.com/58055496/215693983-99e00f9e-7214-4cf4-a76a-6e669a8a1103.mp4
Engi-glass mesons and walking in maint (Potentially overtuned, yellow is
hard)
https://user-images.githubusercontent.com/58055496/215695978-26e7dc45-28aa-4285-ae95-62ea3d79860f.mp4
Diagnostic nightvision goggles and see_in_dark not hiding emissives
https://user-images.githubusercontent.com/58055496/215692233-115b4094-1099-4393-9e94-db2088d834f3.mp4
Sec nightvision (I just think it looks neat)
https://user-images.githubusercontent.com/58055496/215692269-bc08335e-0223-49c3-9faf-d2d7b22fe2d2.mp4
Medical nightvision goggles and other colors
https://user-images.githubusercontent.com/58055496/215692286-0ba3de6a-b1d5-4aed-a6eb-c32794ea45da.mp4
Miner mesons and mobs hiding in lavaland (This is basically the darkest
possible environment)
https://user-images.githubusercontent.com/58055496/215696327-26958b69-0e1c-4412-9298-4e9e68b3df68.mp4
Thermal goggles and coloring displayed mobs
https://user-images.githubusercontent.com/58055496/215692710-d2b101f3-7922-498c-918c-9b528d181430.mp4
</details>
I think it's pretty, and see_in_dark sucks butt.
<!-- 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 it's 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. -->
🆑
add: The darkness that glasses and hud goggles that impact your
nightvision (think mesons, nightvision goggles, etc) lighten is now
tinted to match the glasses. S pretty IMO, and hopefully it helps with
forgetting you're wearing X.
balance: Nightvision is darker. I think bright looks bad, and things
like mesons do way too much
balance: Mesons (and mobs in general) no longer have a static distance
you can see stuff in the dark. If a tile is lit, you can now see it.
fix: Nightvision no longer dims colored lights, instead simply
thresholding off bits of darkness that are dimmer then some level.
/🆑
* modular edits
* see_in_dark
* [MIRROR] Adds a unit test to detect double stacked lights [MDB IGNORE] (#19564)
* Adds a unit test to detect double stacked lights
* we really need to get that night vision pr done
* lints fixes
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Paxilmaniac <paxilmaniac@gmail.com>
* Update augments_eyes.dm
* Update augments_eyes.dm
* eeee
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: SkyratBot <59378654+SkyratBot@users.noreply.github.com>
Co-authored-by: Paxilmaniac <paxilmaniac@gmail.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
* Records: Clerical expansion (#73022)
A few changes to sec records geared towards making it obvious how and
why someone is wanted.
- You can no longer set someone to arrest via console unless they have a
valid prior.
- Setting players to arrest via HUD creates a crime entry for that
person.
- Priors can be edited by the author and qualified personnel (armory
access).
- Priors can be invalidated by qualified personnel. This redacts the
info from huds and rapsheets.
- Invalidating the last crime sets a player to discharged
- Much like real life, you can no longer outright delete crimes. This
prevents gaming the arrest system by adding/deleting.
- Deleting an individual record in a sec console removes it from the
manifest (@JohnFulpWillard) this was previous behavior
- Purging records in sec requires higher access
Have you ever brought a wanted person into the brig only to find there's
no reasons listed and no one in sec will explain why they're wanted?
🆑
fix: Deleting a sec record removes it from the manifest again
qol: It's now easier to see security notes via HUD.
qol: It's now easier to see why someone is set to arrest.
qol: Crime authors and armory access can edit crimes.
balance: Setting players to arrest requires a valid crime.
balance: Armory access can invalidate priors.
balance: Setting players to arrest via HUD creates a crime for the
suspect.
/🆑
---------
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: san7890 <the@san7890.com>
* Records hotfix [NO GBP] (#73363)
A remake of #73169
Repaths records consoles to their own subtype
Fixes some weirdness with observers logging into sec/med consoles
Fixes security notes not being able to be set etc
Bug fixes and cleaner code
🆑
fix: Security can set notes through consoles again
fix: Observers are now properly logged out of record consoles
/🆑
---------
Co-authored-by: Jeremiah <jlsnow301@pm.me>
* Fixes the map merge conflicts, hopefully.
* Fixes player created security records being unprintable for wanted/missing posters. (#73666)
## About The Pull Request
If a player created a security record during a round and attempted to
print it the printing process would runtime and result in the printer
being unusable.
As a side effect of fixing this I've discovered an annoying bug with
posters with them defaulting to the bottom left corner of a record. So
currently mugshot uploads has been restricted to 32x32 pixels with
approval from @jlsnow301 . Ideally at some point a player exposed photo
cropping system can be implemented to make it easier to create mugshots
using larger photos.
## Why It's Good For The Game
Fixes a bug.
## Changelog
🆑
fix: You can now create wanted/missing posters using player created
security records. Due to a visual bug and usability issue photos above 1
by 1 meters in size will no longer work for mugshots in records.
/🆑
* Fixes ui_data on ntosrecords [NO GBP] (#73670)
## About The Pull Request
Missed this while redoing records, this makes it match what the UI is
expecting
## Why It's Good For The Game
Bug fixes
## Changelog
🆑
fix: Fixes NTOS records program receiving bad medical disability data
/🆑
Co-authored-by: Jeremiah <jlsnow301@pm.me>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Updates all of our maps with the new records computer paths
* Actually I don't know where this came from but I think it'll fix the linters
* Okay now it should work properly, hopefully
* mapas
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Jeremiah <jlsnow301@pm.me>
Co-authored-by: NamelessFairy <40036527+NamelessFairy@users.noreply.github.com>
Co-authored-by: Jolly-66 <70232195+Jolly-66@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
* Thermomachines no longer self-destruct when built on blocked ports (#73580)
## About The Pull Request
Ever felt the utter pain when you make a new thermomachine, hook it up
perfectly and then screwdriver it only for it to immediately become a
pile of iron and components without warning? This PR fixes that.
Instead of doing what it did previously, it unanchors itself and opens
its panel.
Right, almost forgot to mention, failing to wrench down a thermomachine
no longer bonks it with the wrench.
Due to not being allowed to use visual messages for when the port is
blocked, I've added a mob/user variable to all on_construction() procs.
(This allowed me to use balloon messages instead.)
## Why It's Good For The Game
Saves a lot of unnecessary headaches when working with thermomachines.
## Changelog
🆑
fix: Atmosians have finally convinced the thermomachines to not
self-destruct when built on blocked ports.
fix: Failing to wrench down a thermomachine no longer hits it with the
wrench.
/🆑
* Thermomachines no longer self-destruct when built on blocked ports
---------
Co-authored-by: RikuTheKiller <88713943+RikuTheKiller@users.noreply.github.com>
* Medical/Security records now use the max/min age.
* merge conflict
* Refactors crew records (#72725)
I have attempted or otherwise started this project at least 4 times. I
am sick of it being on my calendar. The code needs it. I need it.
- This makes crew records a proper datum rather than assigning
properties record.fields.
- General, medical, and security records are merged.
- Did some slight refactoring here and there for things that looked
obvious.
- Wanted states are now defined (and you can suspect someone through
sechud)
- pAI (unrelated but annoying) had some poorly named exported types that
i made more specific
- Job icons are moved back to the JS side (I wanted to get icons for
initial rank without passing trim)
<details>
<summary>previews</summary>
Editable fields & security console

Medical records

Look and feel of the more current version

</details>
TGUI'd some of the worst UIs in the game.
Creating new records is made much simpler.
Manifest_inject is made readable.
Probably bug fixes
🆑
refactor: Crew records have been refactored.
refactor: Medical records -> TGUI
refactor: Security records -> TGUI
refactor: Warrants console -> TGUI
qol: Players are now alerted when their fines are paid off.
qol: Cleaned up sec hud examination text.
qol: Adding and deleting crimes is easier.
qol: Writing crimes in the console sets players to arrest.
qol: You can now mark someone as a suspect through sec hud.
/🆑
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* I've got something that now actually works
Just got to incorporate the records into what players can actually see.
* Turns out that client has already been transferred after all
* Adds the past records in the TGUI records (they're kinda ugly but it works, so y'know)
* Whoops
* Hate you too sometimes Prettier
* Fixes ghost roles using LITERAL records, which caused problems
* Fixes the leaks caused by ghost roles not getting their name right because of the stupid freaking special() proc
* I hate list operations man they're so stupid
* Fixes the stars on the crew manifest!
---------
Co-authored-by: NamelessFairy <40036527+NamelessFairy@users.noreply.github.com>
Co-authored-by: KathrinBailey <53862927+KathrinBailey@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Console Hack / Unfavourable Events won't run ghost roles which don't have time to do anything
* nya
* Update dynamic_unfavorable_situation.dm
* Update dynamic_unfavorable_situation.dm
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: lessthnthree <three@lessthanthree.dk>
* Refactors lizard fake canned food into real canned food (#73469)
## About The Pull Request
/obj/item/food/canned_jellyfish, /obj/item/food/desert_snails, and
/obj/item/food/larvae are now all /canned subtypes. All this means is
that to eat them, you use them once, and now they drop an empty tin
rubbish item.
## Why It's Good For The Game
Making fake false versions of real types that exist is such a pet peeve
of mine, we recently had a bug from it where the snails would go bad.
But even with that fixed you're just chomping the container of snails
and it's not the same behavior as all the other cans
grumgrugmrg I FIXED IT.
## Changelog
🆑
refactor: Lizard related canned food now acts like canned food
/🆑
* Refactors lizard fake canned food into real canned food
* updates all the modular canned stuff
* desert_
---------
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
Co-authored-by: Paxilmaniac <paxilmaniac@gmail.com>
Crafting light switches, request consoles, telescreens, and ticket machines (#72859)
## About The Pull Request
Breaking down #72371 because it's... unreasonably large.
So this PR adds recipes for light switches, request consoles,
telescreens, and ticket machines. Ticket machine frame by Kryson.
You can't print all of the telescreens, like the head of staff ones, but
the general department ones can be printed in their respective
departments.
## Why It's Good For The Game
Wallening compliance, and more of me on my shit breaking down long
files.
## Changelog
🆑 Tattle, Kryson
qol: light switches, request consoles, telescreens, and ticket machines
can now all be printed from lathes
/🆑
Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: tattle <article.disaster@gmail.com>
* Station monitoring console patches (#73096)
## About The Pull Request
- Distro & Waste loop sensors were only displaying the values of the air
on its turf not the actual pipes they were on, so the values were always
constant. Thats fixed now.
- Created a macro to map chamber id to air sensor to avoid typos. This
also fixed being unable to connect to the waste loop sensor due to a
typo in the word "_sensor".
- When reconnecting to a different chamber other than distro & waste
`atmos_chambers` is not lost when switching so you can once again
connect back to distro & waste. After reconnecting make sure to again
select the chamber from the drop down box cause the ui doesn't update
automatically
https://user-images.githubusercontent.com/110812394/215701505-105eba4d-d5d1-4a09-9ac7-0ab73fee2196.mp4Fixes#73055
## Changelog
🆑
fix: distro & waste sensors not reading values from the actual pipes
they are on
fix: losing distro & waste options from the drop-down box after
connecting to a new sensor.
refactor: all occurrences of _sensor with a macro to avoid typos.
/🆑
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Station monitoring console patches
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
Checks if a machine has no research before connecting techweb (#72944)
## About The Pull Request
Currently all machines, if the config to not have a techweb link is on,
will set their node to science even if they were meant to be connected
to another (like through subtypes). This fixes that by checking to
ensure they don't have a techweb connected already before giving them a
new one.
Also as a minor fix, RD consoles will now properly add themselves to the
list of accessing RD consoles if they aren't linking to the default.
This list currently does nothing but I can see good uses of it in the
future.
## Why It's Good For The Game
Fixes an error that was found on a downstream, it's a worthwhile fix
that thankfully was caught this early.
## Changelog
Nothing player-facing.
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Moves mining points from the ID to the bank account (+credit type shown on order console) (#72726)
## About The Pull Request
Mining points are now stored on the ID's bank accounts instead of the
individual IDs, bringing them on-par with credits. This allows miners to
safely replace their ID and keep their mining points just like they can
for their credits.
I also added the cost type on Produce Consoles, so people using them
will know whether they're using mining points or credits.
Because all IDs have a bank account by default, this won't be a problem
to Golems or the like.
## Why It's Good For The Game
1. It's more clear to the player what type of credit is being used in
the order console
2. Mining points being tied to the ID is no longer needed as all IDs
have a bank account
3. Brings mining points up to the same standard as credits.
## Changelog
🆑
qol: Mining points is now tied to bank accounts instead of individual
IDs, so they transfer over in cases of an ID replacement.
/🆑
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Lowers the price of Kheiral Cuffs to 750 points (#72867)
I've gotten some critique on the cuffs saying that for a tool mostly for
new players who might be more prone to dying in lavaland, they're far
too expensive, and I'd have to agree. For a much lower price you could
easily get far more equipment that instead of just being useful if you
die, would _prevent_ you from dying, and you'd still have points to
spare. Not to mention the fact that they don't always work, as you might
get gibbed by a megafauna or something like that, which would turn off
the cuff.
Taking all of this into account, a far lower price seems fair to me.
Co-authored-by: Wallem <66052067+Wallemations@users.noreply.github.com>
Adds a Burn Medkit to Mining Vendor (#72851)
Adds a burn medkit to the mining vendor. Since burn damage is slightly
harder to deal with on lavaland, I've made it price slightly higher than
the brute medkit.
Co-authored-by: Mey-Ha-Zah <tomboxallghss@gmail.com>
Refactor air alarm TLV and modes. (#72315)
Ditched the lazy initialization thing since the memory gains isn't worth
the increased code complexity.
Ditched the vent bitflag changes, that will come in the future maybe.
Ditched the thermomachine and alarm resubtyping. Will also maybe come in
the future.
Added the operating mode datums so we can reduce the amount of code in
the main air alarm page. The datums lets us write tidier code too.
Scope is much much more limited than the old PR. The diffs are mostly
just me splitting and moving the files around. Things to pay attention
to are:
- `_air_alarm.dm`'s UI procs and things that deals with TLV and modes.
- `air_alarm_variants.dm`'s coldroom and server room numbers
- `air_alarm_thresholds.dm`
- `air_alarm_modes.dm`
Smaller changes on:
- `air_alarm_interact.dm` should be untouched except for one select_mode
call.
- `air_alarm_circuit.dm`'s also untouched except the part that deals
with TLV and modes
- `wires/air_alarm.dm`'s also untouched except for the panic siphon
wire.
<details>
<summary>Images</summary>
<img
src="https://user-images.githubusercontent.com/54709710/209765698-47bd2564-cc6a-4829-9418-97d8814d9f7a.png"/>
<img
src="https://user-images.githubusercontent.com/54709710/209765764-7f59fa2d-66ad-4bc6-8687-a1024898823c.png"/>
<img
src="https://user-images.githubusercontent.com/54709710/210332278-17d286fe-6d78-44f2-ac6f-77deb0dac92e.png"/>
</details>
Cleaner code for the backend, static typing for the frontend, bugfixes.
New UI for the threshold thing.
🆑
qol: made the threshold page of air alarm use colloquial terms instead
of code terms. Added reset and disable buttons.
qol: Air alarm's gas breakdown now displays the moles, percentage, and
partial pressure.
fix: operating mode selection in air alarm will be red if the selected
mode is dangerous.
fix: fixed the area atmosphere alarm button on air alarm not working.
code: told the game that hyper nob isn't dangerous.
refactor: refactored the threshold values and operating mode of air
alarms in the backend. No changes expected except the ones stated above.
/🆑
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: vincentiusvin <54709710+vincentiusvin@users.noreply.github.com>
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Log status display changes (#72762)
## About The Pull Request
Changing the status displays creates an entry in game.log of who did it,
and from where.
## Why It's Good For The Game
Seeing "LOL PENIS" on the status displays with no way to track it gets
old after a while.
## Changelog
🆑 LT3
admin: Changing the station status displays now generates a log entry
/🆑
* Log status display changes
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* miner console ui qol (#72684)
gives the items some icons on the ui display, adds a minus button to
remove an item from ur cart, changes categories into tabs rather than
buttons so u can see what category ur currently on, puts the item
description into a hover so the ui is not cluttered with walls of text
everywhere
* miner console ui qol
Co-authored-by: SMOSMOSMOSMOSMO <95004236+SmoSmoSmoSmok@users.noreply.github.com>
* Remove Mining LTSRBT + Change mining vendor costs to be less ass (#72380)
Removes Mining LTSRBTs
Adds a new cargo_cheaper variable to order consoles to make the tooltips
actually imply that express costs 1x
Mining Vendor cargo delivery now costs 0.65x (and rounded)
Express delivery costs 1x, no cooldown.
Costs displayed in the vendor are now multiplied by 0.65 to make them
show the cheaper price of buying by cargo
Encourage people to not fuck over ghost roles for their gamer mining
vendors
Encourage miners to cooperate with cargo techs (best case) to get their
gear cheaper
Encourage miners to talk to their own stationside department for their
gamer gear cheaper, while making miners
who dont do that, have costlier (normal price) gear
* Update interdyne_mining.dm
* SR maps
Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
* Minor improvements to mining order console
* merge
* Mining orders can no longer error and don't say they charge you (#71676)
- Mining orders now show the amount of mining points spent as the 'Cost'
instead of a flat 240 credits
- Mining orders now no longer have errors (including nothing being in
the crate at all) because they can't be sent back for a full refund.
- Mining orders no longer say they charged you if they haven't.
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Tastyfish <crazychris32@gmail.com>
* Fixes atmos control not detecting Distro & Waste loop (#72287)
## About The Pull Request
Fixes#72243
just had to append `"_sensor"` to its id cause atmos_control console
uses that suffix a lot
## Changelog
🆑
fix: atmos control can detect distro & waste loop sensors
/🆑
Co-authored-by: Fikou <23585223+Fikou@ users.noreply.github.com>
* Fixes atmos control not detecting Distro & Waste loop
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Fikou <23585223+Fikou@ users.noreply.github.com>
* Build your own atmos chambers (#72019)
## About The Pull Request
https://user-images.githubusercontent.com/110812394/208232089-a183fb95-9326-4514-986a-a2b1e21be40c.mp4
**Notes**
- You can print atmos control circuit boards at the circuit printer
after research
- You can only build one sensor for each gas type for in the whole map.
This is because each sensor is assigned a unique chamber id from a fixed
set of constants. Once all those values are used up there will be
duplicates so yeah only sensor per gas type for that round
- Un wrenching or destroying the injector/vent will automatically
disconnect them from the sensor. I forgot to show that in the video
- Destroying the sensor via right click with RPD will also automatically
disconnect everything. It should be obvious but i made it even more
obvious now
## Why It's Good For The Game
From #71232

That and also i heard somewhere in the forum that this was highly
requested
## Changelog
🆑
add: Gas sensors recipe to RPD
code: linking all the stuff via multitool
qol: make your own tank instead of moving around canisters
/🆑
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Build your own atmos chambers
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Adds missing descriptions again (#72013)
Adds descriptions to some base types (such as walls, floors,
machines frames and computer frames) to make the world feel
more alive.
Authored-by: etherware-novice <candy@ notarealaddr.com>
Co-authored-by: OrionTheFox <76465278+OrionTheFox@ users.noreply.github.com>
* Adds missing descriptions again
Co-authored-by: texan-down-under <73374039+etherware-novice@users.noreply.github.com>
Co-authored-by: OrionTheFox <76465278+OrionTheFox@ users.noreply.github.com>
* Fix adding mutations to advanced injectors not working without an occupant (#72122)
## About The Pull Request
You couldnt add mutations to an advanced injector if there was no
occupant inside the scanner
Now you can
## Why It's Good For The Game
Fixes#72099
## Changelog
🆑
fix: You can now add mutations to advanced injectors without having an
occupant inside
/🆑
* Fix adding mutations to advanced injectors not working without an occupant
Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
* Minor plane cube cleanup (#72038)
## About The Pull Request
[Fixes area lighting not working on turf change in multiz
cases](7b92deffbc)
If you modify a area lit turf when using multiz, it'd end up using the
wrong plane for its light, because of stupid shit on my part.
Stupid shit resolved
[Fixes some uses of plane masters that only specified one rather then
all](a59ec96d29)
We almost never only want to show SOME hidden planes.
Should really make a helper for this someday
* Minor plane cube cleanup
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* adds a variable to let computer keyboards render the same icon off as on (#72001)
## About The Pull Request
what the title says
also makes the code better a bit
## Why It's Good For The Game
i need this for my map
## Changelog
doesnt affect players
* adds a variable to let computer keyboards render the same icon off as on
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
* What am I looking at?
* Okay, now limbs and switching to the three other types of synth!
* Hey, it compiles, but *definitely* doesn't work!
* Has a slight chance of working now!
* Actually compiles properly now!
* Nice one, dork
* Fuck limb code.
* And this is the story behind where the last 8 hours of my life went!
* My code will now throw the rattle if you do dumbdumb.
* I'M SORRY, MODULARITY
* Final code, maybe?
* Hmm, yes, today I will leave debug logs in my commits.
* Hmmm, maybe not enable that by default.
* Oh yea, nice one, dork.
* Oh yea, digitigrade exists. Also fixes all known runtimes. Also fixes me forgetting a couple of *very* important things.
* I feel special.
* Small bit of code cleanup!
* Android parts!
* Go away Blueshift compile error!
* E
* More code fixes!
* Synthliz fix
* Haha, shitcode go brrrr
* AAAAAAAAAAAAAAA
* Fix screenshot tests!
* Listen here you little shit-
* idontknowwhythisisbreakingantennasbutyoucankeepthenameiguess
* FUCK
* Turns out some antennas *do* use more than one colour, ugh.
* Nice one, genius.
* Address reviews, and also change IPC antennas to tri_bool instead of toggle- woops!
* Now that I know roughly how sprite accessories work, let's fix this at long last so I can finally get this merged.
* Oh yea, this!
* Oops, nice catch, unit tests!
* Very cool, PDA update
* Yeet!
* Apply suggestions!
* Oops!
* WHY DIDN'T YOU COMMIT
* I'm getting tired of fixing these conflicts.
* Ugh.
* Fix my shitcode, also make erp genitals check less intensive
* FUCK
* I am still suffering
* Fix
* e
* Fucking LEGS
* Fucking GREYSCALE
* REMOVE THIS BEFORE MERGE, DUMBASS
* Nevermind, this is unironically the best way to do it due to how our really weird prefscode works... pain.
* Stupid organic interface code edit
* Formats the name for get_targets (#71749)
## About The Pull Request
This makes the `get_targets` proc `get_format` to remove dumb stuff like
\improper

## Why It's Good For The Game
this breaks circuits since they set target assumes its the strong as is
and not with the wierd stuff infront
## Changelog
🆑
fix: Teleporters work properly now with circuits
/🆑
* Formats the name for get_targets
Co-authored-by: Autisem <36102060+Autisem@users.noreply.github.com>
* Reversed an unintentional change to golem trigger guard prices (#71846)
## About The Pull Request
#71023 raised the price of golem trigger guards from 1700 to 17500, this
was not documented and appears to be an unintentional change.
## Why It's Good For The Game
Golems should realistically be able to afford their own gear and
accidental change bad.
## Changelog
🆑
fix: The golem trigger guard scalping situation has improved and golems
can now once again purchase trigger guards at market rate.
/🆑
* Reversed an unintentional change to golem trigger guard prices
Co-authored-by: NamelessFairy <40036527+NamelessFairy@users.noreply.github.com>
* Atmospheric machineries now interact with each other directly, rather than going through a radio layer -- saves about 0.4s of init time
* updatescript maps
* Merge conflicts
* Tarkon atmos
* tick file
* that file was supposed to be removed
* tarkon cringe
* tarkon tweaks after testing
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
* fixes a regression on mining point cards' reusability (#71725)
## About The Pull Request
Fixes a regression where mining point transfer cards that ran out of
points stopped working despite being made to be reusable.
...Also makes the labels on the button slightly less painful to read, I
think.
## Why It's Good For The Game
there's a reason they're labeled "reusable" in the description

## Changelog
🆑
fix: Mining point cards have slightly more readable buttons now, and
also can be reused even after running out of points.
/🆑
Co-authored-by: Hatterhat <Hatterhat@ users.noreply.github.com>
* fixes a regression on mining point cards' reusability
Co-authored-by: Hatterhat <31829017+Hatterhat@users.noreply.github.com>
Co-authored-by: Hatterhat <Hatterhat@ users.noreply.github.com>