So, for the last few days on production, Space Ruin generation has refused to work. Why is this? It's because in #67107 (cfc2330528), we repathed `/area/space` to `/area/misc/space` (lol i should have paid attention to that) without updating everything in code to match. I couldn't seem to get `/area/misc/space` to properly work somehow (this could have also been something I was doing wrong), but I worked it back to just making everything vanilla `/area/space` and all of those unwanted behaviors should be squashed out. Let's get the game working again.
I manually audited all 4,710 instances of airlocks across all maps for upper casing
You'll never guess what I found.
UPDATE: We now have a grep to check for mistitled airlocks, and it's in this PR!
* [DRAFT] Reformats Access IDs for accessibility and futureproofing
* replaced all the old defines and IDs everywhere
* replaced ID integers with strings, cleaned up a couple tram helpers
* replaces req_access_txt with req_access and fixes a few of my mistakes
Co-authored-by: san7890 <the@san7890.com>
* organizing flora file and icon states, & flags
Changes the typepath for a lot of flora, and adds new paths depending on the amount of icon states the flora had, for better modularization on mappers. Also adds flags to the flora depending on what type it was, instead of 3 bools
* Getting ready to attempt to modularize flora
Moving most vars and procs from ash flora into the normal flora type path, as a general preparation to add more here
* Weighted products & Region Messages
Rewrites flora code so a flora's produced items can be initialized with a weighted list. Also has some improvements, relating to item stacks.
Adds an option via variables to separate 3 messages into 3 possible regions, or the old method where the message changes when the value is exactly the same as the low or high harvest value
* organizing + documentation on procs
* Documentation, Organization & Modularization
(DOMing) yeah, I dom
Gives variables for tools that can harvest flora, a blacklist of them, and modularizes variables a bit.
Retypes the stump to be a subtype of a tree, which just deletes after being harvested
* Adds the ability to uproot flora with a shovel
* added eswords to the list of things that can cut
* ausbush junk
* code review appreciation + changing drag_slowdown
* more code review appreciation
* kirbyplants ComponentInitialize() -> Initialize()
* forgot glob.
* Repaths `/obj/item/clothing/mask/animal/rat` to make more sense
It was used as the parent for a lot of other small animal masks simply
because of its flags and a single proc, so i repathed it to
`/obj/item/cltohing/mask/animal/small/...` to make more sense
* adds an updatepaths
* fixes the got damned maps
- All tablets who previously had apps in a cartridge now has them built-into their tablet instead. This means it costs space for it.
- Rebalances the sizes of several apps to help them fit on Command tablets (Cargo ordering costed 20!!)
- Removes tablet cartridges, they've been reworked into a regular old portable disk (the same you use for toxins/borgs)
- Removes Signaller (the module required to run the signaller app) from tablets (likely will remove more in the future)
- Refactors the health/chem scanning app to not be as bad
- Dehardcodes detomatix resistance
- Ability to send PDA's to all is now tied to your access rather than a cartridge
- Moves 'eject disk' button to the very top of the UI
* Add mapping helpers for signs, make names snakecase
* Update maps
* Couple of lost signs in the elephant graveyard
Co-authored-by: tattle <article.disaster@gmail.com>
* Removes all thermal ballast piping from our maps
* Removes co2 recirculation from our maps, no reason to have it if ballast isn't a thing
* Removes all behavior that's linked to ballast
I don't think ballast is something that's useful to keep around, since
it functions to make cooling things harder for what amounts to no real
reason.
We still have space as an infinite source of cold, it's pointless to
gate it.
Anyway, this commit.
I'm removing all uses of two ports, cooling, efficency, work skipping, and
safeties.
This means dropping quite a lot of behavior.
There's no emag effect currently for instance, because it renabled some
previously buggy behavior that was caused by ballast, which I'm nuking.
Also doing away with metal h2, because even though I like the idea, it
has no purpose as of now.
Removing ballast has made a lot of the logic and checks that were done
in process_atmos pointless, so they can go too.
I'm keeping the barebones behavior of how power consumption works,
because I like it.
Efficency is going because it was almost always like 80% without
ballast, and I didn't think it was something worth having.
Cooling as a concept can go interestingly enough, because there's no
difference between heating and cooling, just the temperature we're
targeting.
I think that's about it? I'm also removing failure states, because they
too were linked to ballast
Oh, and I'm removing the redundant icon states and gags entries, since
well, they aren't used anymore. Also removed some from the js file
Canister tiers were first introduced by me when canister fusion was still a thing. Now they have become only a nuisance and tedium since the main reason they were added is gone. current limits are higher than old t1 but lower than old t2
I've now added an option in the UI to every canister to become shielded and consume the APC power so that its contents won't be able to destroy it, the higher the temperature and pressure inside, the higher the draw (it should peak around 25 kW)
Canisters now have a cell that can hold the shielding in areas without power for a time, can be upgraded, removed, replaced
Increases players (old and especially new) quality of life, removes tedium and follows the oranges will of canisters should draw power to contain high heat and pressure
remove canister tier, you still need to build a frame and use iron on it but nothing more.
canisters now have a toggle for shielding that will start to consume power if the temperature and pressure go over the labeled one (current limits are higher than old t1 but lower than old t2). Peak draw should be around 25 kW with fusion Canisters have an internal cell that allows it to hold shielding in areas without power for a time, powercells can be upgraded, removed, replaced.
shield sprite by @SnoopCooper
* Nuke Ops Ordnance Lab usability fixes
Nuclear Ops Ordnance lab now has an air alarm; a console for the burn chamber and corresponding sensor; a burn chamber without starting gasses; a scrubber to empty tanks; one RPD to rearrange pipes as needed; four Tier-2 Lasers to make the freezers properly usable for bombmaking; two Tier-2 Canisters to receive hot gasses from the burn chamber without immediately rupturing; a waste pipe for the freezers to so they can vent their heat; and 2 more O2 canisters so they can make a usable amount of tritium. Removed N2 and N2O, which are only used in exotic gas production. Replaced two walls with floors to make room for the air alarm and burn chamber console.
* Requested Updates from Maptainer to Syndicate Ordnance Lab
Stray machines deleted in Xenobio... and the bathroom...?
Turfs under passive vents adjusted. It looks like it gets about 25% cooling efficiency, but I'm sure the Flukies will manage.
Lights tweaked to tubes. Much less moody, but much better visibility.
Injector fixed on consultation in Discord; improper subtype replaced with proper subtype, easy money.
Camera is blind because of the tinted windows; I don't want to change those without the original mapper's go-ahead, but we can see what we can do if it's a meaningful problem.
Air alarm swapped to the unlocked subtype.
* Syndie Ordnance Final(?) tuning
Turns freezers for easier canister access and to keep the waste pipes from being visible under the window. Re-adds corner wall to unsquare the room and bring the air alarm closer to the monitor. Adjusts lights and decals accordingly.
Converts PDA functions and applications over to modular tablets and devices, namely the messaging function. HREF data code is quite honestly clunky and difficult to work with, as I've definitely experienced whilst working on this. By moving from this system over the easier to read (and frankly, easier to add to) TGUI system, you get cleaner looking and more user friendly UIs and a greater degree of standardization amongst other UIs.
Co-authored-by: Seth Scherer <supernovaa41@gmx.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
Attention Recruit: Welcome to Firebase Balthazord
Here you will lean how to:
-Kill corpo scum
-Kill corpo scum
-Kill corpo scu-
This has been on my docket for months. Ever since gave the Holding Facility a much needed facelift. I have been eyeballing the nukie base, waiting for that stroke of inspiration to hit me. It finally did. Gone are the aging walls of the old encampment. Nukies finally have what well-funded corpo-terrorists always dream of- a home.
It's more than a Home. This is a sweeping rework that is part of a series of reworks to revisit old locations and not only bring them up to date with our current asset roster, but to make them properly belong within the game world. The Nuke-Ops base may ultimately be a tiny chunk of the overall SS13 experience, but I'll be damned if it isn't a defining one. It's also a location that has the capacity to do one thing that I have always wanted to do. Purchase Property. You heard me right, you get to buy rooms now. The newly expanded Nuke-Ops base features, with @Mothblocks blessing, further expansions that you can purchase from your local Syndicate Uplink. Spend your TC, expand your capabilities, and utilize your expertise in order to create
the most mind-boggling disky heists there are.
Possible expansions to your terrorism suite include:
-Ordinance Lab
-Bio-Terrorism Lab
-Chemical Manufacturing Plant
Definite expansions to your Nuke-Ops Firebase include:
-Crew Bunks
-Lab Wing
-War Table
-Upgraded "Disembarkment" Bay"
About The Pull Request
Hey there,
#65038 was quite good for newscasters, but since it merged bounty boards and newscasters in the same /obj/ and replaced all instances of either, you would end up with stuff like this:
Yes, those are all on the same direction. So, I manually reviewed every single newscaster appearance across all of our maps that have newscasters and ensured that the placement/duplication was sane. I also noticed that some maps had built stuff to account stuff for the old shape of the old newscasters, so that was rearranged as seen.
Why It's Good For The Game
image
Newscaster (singular) is good. Newscasters (plural) is iffy at best.
Also, some of the new newscasters were buried under posters. Who knows how long they've been under there. I've updated them to what I felt would make the most sense from a mapping standpoint.
Changelog
cl
fix: Nanotrasen realized how much they were spending on newscasters that got buried under posters and the like, so the corporation decided to stock the crew with juuuuust enough. They have saved a lot of money from this venture, and the economy will promptly begin to skyrocket to new heights.
/cl
* Prevents potentially infinite length books from being written and stored. I'm not sure if this is an actual issue, but I have a funny feeling it may become one someday
* Moves the paper defines to their own file
* It's become clear to me that I am stupid
* git add --all
* Makes book info into a datum to allow for easy passing around
* Converts the library scanner to tgui, lays the groundwork for tgui visitor consoles
* Makes the db request for book info sort
Adds the frontend for the visitor's console
Adds a hash to prevent duplicate db requests
Adds a prams changed var to help facilitate a better search button
Makes the page number code accept text as input
* Makes the ui index at 1 even tho we index at 0 internally
* Begins the conversion process for the library console.
Changes the library console to override the visitor, to utalize for the archive access portion of the ui
Makes scanner into a weakref, I'm coming for you handheld scanner
Renames some vars to make things clearer
* Converts the remaining refs of the old console typepath over, adds a circuit board for consoles because pain
* Changes how bookshelves load in books
Instead of loading them in lazyally, we load them during init
This lets us track what books are stored in which areas
Somewhat jutting off of this, adds map config for designating something as "part of the library"
This will be useful later
* Renames the random poster, adds a spritesheet for bibles. Both will be useful in a moment
* Ok. This is a bit of a mess.
Converts the library console to tgui.
This comes with a few minor behavior changes:
You can now select what type of poster you want to print, instead of just printing a random one
It's now possible to heed the console's emag warning
The console's inventory page will fill at roundstart with the books in your area/if you're in a library, any
areas designated as "library like" in the map config
You can see what type of bible the chaplin has selected?
"Fixes":
You can no longer just dump books into the scanner forever
Implementation details:
Any input that makes a db request will now A: freeze up any other db inputs until it's finished, and B: Start a
1 second timer before any new db requests can be made
Of note, I'm handling html encoding in a very targeted way.
All book_data datums need to have html encoded values. get_title/author/content exist so a defaulting and tgui
appropriate version can be loaded in. This somewhat matches with the trusted var on set_title, it exists to
prevent double html encoding.
While we're here
Input/DB (Book data should be html encoded)
Inside book datum (Book data should be html encoded)
Sending to tgui (Book data should be decoded during extraction with the get_() procs)
Sending anywhere else (Book data should be html encoded, otherwise it's an xss vuln)
Uhhhh tgui stuff?
I'm using a custom theme for emag visuals, I'll get into that more later
The visitor and book management console share the same data/act pipeline, which is why they're parented/subtyped
They also share a page selection component, which is why the visitor's console imports it.
Uhhhhh
Oh right, fuck.
Ok so the page selection component is kinda cursed, the left and right controls are fine
But I'm trying to get a << < [page/max] > >> setup going, and that means resetting the center input past change
so the default value can be used
This ends up being slightly hacky. I'm sorry.
Oh also, I implemented a custom tab setup for this ui. I have no idea why it was literally like 5 months ago.
I think it looks pretty nice, but if you want me to nuke it I can. Sorry for any headache around this.
More tgui stuff next
* Scanner/visitor cleanup, some other odds and ends
* Adds in a dark red and black theme for library computers to be triggered by an emag.
Things of note: I'm overriding some lists that get passed into buttons and one other thing using set, since the
list is alreadt generated by that step in the process? I think?
I've added dimness control to the dimmer component, since well, it was dimming already dark uis.
I also made and added a rather large background svg. I've got no experience with this sort of thing, and all the
compression methods I found for this ended up being busts. I know this isn't acceptable as an end product, but I
don't know how to get it there.
Somewhat on that note, this ui might not be worth the size for the amount of use it gets. I'm fine with nuking
it if that's the case, I bring this up because I have a very poor understanding of the logistics of something
like this, so I have a feeling I've fucked up somewhere
* Forgot these, just a scss file for library computers, barely used but I think it's worthwhile
* Missed this eariler. As a part of the uploading tab, I'm displaying the contents of books. I'm loading in that
context as raw html so paper -> book books look close to right. Means I need more html tags then our current
sanitize provides. I don't think any of these will cause issues, and there's also a good chance I'm missing
some. Will come up with a list later
* Updates the rest of the maps to use the new management typepath
* Fixes the default bible name being Default Bible Name, I am sorry
* Turns out I had the scaling wrong for bible names, lead to weird stacking because the bible icon doesn't scale, so I lowered its sizing
* Yeets unneeded exports (Thank you jlsnow)
Haha wouldn't it be funny if I didn't know how components worked
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
* Resets the maps to master
* Fixes oversights from merge commit, changes maps
* Removes needless Flex's from the scanner
* Gives the library console the ability to parse markdown. Expands the list of acceptable html elements a bit
* Adds audio cues for printing and inserting/removing from the scanner, makes the scanner nicer to use in general
* Uses a compressed version of the background. It's still huge, but smaller at least
* Adds the printing audio to the book binder
* Cleans up tram
* curse you tram
* AHHHHHHHH
* MY LIFE IS TRUE PAIN
* Adds a path conversion statement to make people's lives easier
* Apply's style's suggestions
thx style
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
* Compresses the background svg
* Further js cleanup
* We no longer render markdown in the ui, since any source of markdown is converted to html anyway
* More ui changes
Makes the tab/main screen logic use Flex rather then manuel offsets
Makes modals better fit the size of their contents
Readjusts the width of some inputs
Properly uses the header prop for a table
Makes the buttons in the upload panel look nicer
Restructures the print tab a bit
* Increase a modal's size
* Fixes computers with no keyboard overlay showing their screen even when the power is out
* Moves some data and logic onto the library subsystem. Kyler's review
Fixes harddels held by the library scanner. Makes the scanner's buffer
actually do something
* Makes book icon randomization a proc rather then just copypasta'd code
* Removes the kilo library edit, the soul was removed
* Damn you san (Fixes mapconflicts)
* Pain
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
Alsonce scrubbers only wake up if something they can filter is on the tile an existing bug where scrubbers dont filter very small but non garbage collectable amounts of a gas becomes a big issue, as in without changing scrubbing rates you can breathe once on a tile with a scrubber set to scrub co2 and that co2 wont go away barring any other factors and the scrubber wont go to sleep. so now with the idea of rohesie and permission of lemon i changed how scrubbers removed small molar amounts of gas from their turf. now scrubbers will look through 100% of the turfs air mix for filtering, but will only remove up to
gas moles * (scrubber volume / turf volume) * (gas moles / total filterable moles) moles from each filterable gas in the turfs mix unless that amount is less than either MOLAR_ACCURACY * 100 or the number of moles of that filterable gas, in which case all of the moles of that gas are subtracted from the mix. this is to make it easier for the scrubber to remove very small amounts of gas with filters without changing how fast they scrub large amounts of gas, thus making scrubbers able to go to sleep faster only after a gas has been reduced to near zero
scrubbers are the biggest proportion of SSair's machine processing cost which is a non trivial amount of SSair's total cost. now they will only do most of their work if they can actually scrub anything on the tile which is a minority of the time.
This PR moves the in-game Newscaster over to TGUI, which is one the most bothersome html to tgui projects on the codebase being that it's gone untouched for like... over 4 years now after the introduction of tgui. Newscasters are widely used in-game by players wanting to be deranged whistleblowers, noir detectives, and journalists. They're flavorful, fun, and we still use an html window to make them run so it looks like it's from 2003.
About The Pull Request
Alternative to #65354
Ok so like, there was a lot of not floor types on /floor. They didn't actually want any of their parent type's functionality, except maybe reacting to breaking (which was easy to move down) and some other minor stuff.
Part of what we don't want them to have is "plateable" logic.
I should not be able to put floor tiles on the snow and be fine. It's dumb.
Instead, I've moved all non floor types down to a new type, called /misc.
It holds very little logic. Mostly allowing pipes and wires and preventing blob stuff.
It also supports lattice based construction, which is one of the major changes here. I think it makes more sense, and it fixes an assumption in shuttle code that assumed you couldn't place "a new tile" by just hitting some snow with a floor tile.
Oh and lattices don't smooth with asteroid tiles anymore, this looks nicer I think.
Moving on to commits, and minor changes
Changes clf3 to try and burn any turfs it's exposed to, instead of just floors
Moves break_tile down to the turf definition, alongside burn_tile
If you're in basic buildmode and click on anything that's not handled in a targeted way, you just build plating
FUNCTION CHANGE: you can't use cult pylons to convert misc tiles over anymore
Generalizes building floors on top of something into two helper procs on /turf/open, reducing copypasta
Adds a new turf flag, IS_SOLID, that describes if a turf is tangible or not.
Uses this alongside a carpet and open check to replace plating and floor checks in carpet code. This does mean that non iron tiles can be carpeted, but I think that's fine
Moves the /floor update_icon -> update_visuals call to /open
This change is horrificly old, dating back to 8e112f6 but that commit describes nothing about why it was done. Choosing to believe it was a newfriend mistake. Uncomfortable nuking it though, because of just how old it is. Moving down instead
Create a buildable "misc" type off open, moves /dirt onto it
Basically, we want a type we can use to make something support
construction, since that can be a messy bit of logic. Also enough
structure to set things up sanely.
I'm planning on moving most misc turfs onto it, if only because
constructing on a dirt tile with rods should be possible, and the same
applies to most things
Murders captain planet, disentangles /turf/open/floor/grass/snow/basalt
Adds a diggable component that applies the behavior of "digging"
something out from a turf.
Uses it to free the above pain typepath into something a bit more
sensible
The typepaths that aren't actually used by floor tiles are moved onto
/misc
The others are given names that better describe them, and kept in
fancy_floor
Oh and snowshoes don't work on basalt anymore, sorry
Snowed over platings now actually have broken/burned icon states, fixing black holes to nowhere
Misc turfs no longer smooth as floors, so lattices will ignore them
Placing a lattice will no longer scrape the tile it's on
Ok this is a really old one.
I believe this logic is a holdover from kor's baseturf pr
(97990c9)
It used to be that turfs didn't have a concept of "beneath" and instead
just decided what should be under them by induction. This logic of "if
it's being latticed scapeaway to space" made sense then, but has since
been somewhat distorted
We do want to scape away on lattice spawn sometimes, mostly when we're
being destroyed, but not always. We especially don't want to scape away
if someone is just placing a rod, that's dumb.
Adds a path updating script for this change
I've done my best to find all the errors this repathing will pull out, but I may have missed some. I'm sorry.
Why It's Good For The Game
Very old code made better, more consistent turfs for lavaland and icebox, better visuals, minor fix to snowed plating, demon banishment in lattice placement, fixes the icebox mining shuttle not being repairable
Changelog
cl
add: Rather then being tileable with just floor tiles, lavaland turfs, asteroid and snow (among other things) now support lattice -> floor tile construction
fix: Because of the above, you can now properly fix the icebox mining shuttle
refactor: Non floor turfs are no longer typed as floor. This may break things, please yell at me if it does
/cl
* Four Corners, Red Rover: An Exploration in Decaled Trends
You there! What exactly is wrong with this photograph?!
You don't need to tell me, I've boxed it out. There's four individual corners for the decalling. This is weird. You may be asking: Why don't they use the "full tile" turf decals? Let me demonstrate.
Look at the difference between the one at left and the one in the middle. The turf decal totally smothers the nice contrast lines afforded to use by the base turf, causing it to have smooth, clammy exterior. This is probably why no mapper ever uses the full turf decal, much to the chagrin of people who stare at how big the size of this repo is.
Now, what's that on the right? Why, it's the new sprite (and pathing I made) to help counter-act this issue! This perfectly lines up with the contrast lines of the base turf, allowing us to have a non-flattened visualization, while not having four fucking turf decals a turf load upon initialization. How epic!
I've also added "contrasted" variants of the "half" and "anticorner" turf decals for future use. I probably won't go through and update this in this PR, but the opportunity remains available.
I may or not map this change across all the maps. We shall see.
* neutral corners
we love vsc
* no wait
i forgot a bunch of potential edgecases so we'll have to go back. yellow should be fine but neutral, dark, blue, and green should get a second look over
* recheck
found some stuff, probably missed out on others. let us commence forth
* MISTAKE
nearly a fucko bwoingo
* final pass
it compiles and i've had enough, someone else can probably figure it out from this point onwards
* #65230 goated my timbs
now we wait for linters to fail
* YOU DIDN'T SAY THAT THE FIRST TIME
LINTERS AAFAFAFF
* Building changes
* map changes
* constructs + missed subtypes
* clarify these var names
* fix path
* pls run
* generalized it a bit
* can't run that on initialize
About The Super Hyper Ultra Ultimate Deluxe Perfect Amazing Shining Mob Spawn Refactor
The Super Hyper Ultra Ultimate Deluxe Perfect Amazing Shining Mob Spawn Refactor is my attempt to clean up the file structure, the code, and the type tree for mob spawns.
Splits mob spawn types into corpses (dead spawns) and ghost roles (living spawns you can possess). The vars that didn't make sense for corpses and vice versa for ghost roles are now appropriately there
Because of above, there are no longer the fucking "death, roundstart, and instant" vars. thank god
Removes a lot of single or very few used vars, whose properties can be applied on special().
All Mob Spawns are given fitting folders instead of just being stuck in a single ghost roles file. Corpses are in the corpse folder, Ghost Roles are in the ghost role folder. Only exception are drones which should stay near their respective homes
Just generally cleaner all around you know
spider structures file renamed to spiderwebs now that spider eggs are gone
Why Super Hyper Ultra Ultimate Deluxe Perfect Amazing Shining Mob Spawn Refactor Is Good For The Game
The Super Hyper Ultra Ultimate Deluxe Perfect Amazing Shining Mob Spawn Refactor cleans up so many terrible cases and uses
Changelog For The Super Hyper Ultra Ultimate Deluxe Perfect Amazing Shining Mob Spawn Refactor
cl armhulen
refactor: Mob spawns are refactored, no more assortment of "random, instant, and roundstart" vars on every mob spawn type
refactor: if there are some minimal differences in how mob spawners feel, that's why!
/cl
This PR will completely remove the brain traumas component of being abducted. in its place, there will be a round start limb grower machine to make up for it. All upgrade disks for the machine come in the above locker and I was even nice enough to include 50 units of synthflesh! Wow!
* Repath wall reagent dispensers
This changes /obj/structure/reagent_dispensers/{virusfood,peppertank}
to be subpaths of /obj/structure/reagent_dispensers/wall.
The WALLITEMS test now checks for all wall mounted reagent dispensers,
instead of just peppertank specifically.
> git ls-files '*.dmm' | xargs -d\\n sed -i 's@/obj/structure/reagent_dispensers/peppertank@/obj/structure/reagent_dispensers/wall/peppertank@g'
> git ls-files '*.dmm' | xargs -d\\n sed -i 's@/obj/structure/reagent_dispensers/virusfood@/obj/structure/reagent_dispensers/wall/virusfood@g'
About The Pull Request
Wall items mostly use the direction from the floor to the wall in the named mapping helper. Wall items mostly use the direction from the wall to the floor for the internal dir variable.
This leads to a headache when it comes to working out what conflicts with what, and what needs placing where.
Wall frames provided a member, inverse, which specified whether or not to invert the direction of the item when looking for conflicts. It was also used to specify whether to look for conflicts outside of the wall (cameras and lights appear external to the wall) or inside the wall (most wall items). This flag was set for Intercoms, APCs, and Lights. Since APCs and Lights expect a floor-to-wall direction, and Intercoms expect a wall-to-floor direction, this means that APCs and Lights were getting the correct direction, and Intercoms were getting the wrong direction.
Some implications of this setup were:
You could build an APC on top of another wall item, provided there was nothing external attached to the wall and the area didn't have an APC.
You could stack Intercoms indefinitely on top of the same wall, provided you weren't in a one-tile wide corridor with something on the opposite wall.
Or both! Here's twenty Intercoms placed on the wall, and a freshly placed APC frame after placing all Intercoms and deconstructing the old APC:
endless-stack-of-intercoms
Not everything used this inverse variable to adjust to the correct direction. For example, /obj/machinery/defibrillator_mount just used a negative pixel_offset to be visually placed in the correct direction, even though the internal direction was wrong, and never set! This also let you stack an indefinite number of defib mounts on the same wall, provided it wasn't a northern wall... except you could do this to northern walls too, since defibs weren't considered a wall item for the purposes of checking collisions at all!
Ultimately, every constructable interior wall item either used this inverse variable to adjust to the correct placement, set a negative pixel_offset variable to have its offset adjusted to the correct placement, or overrode New or Initialize to run its own checks and assignment to pixel_x and pixel_y!
Inventory: Table of various paths, related paths, and the adjustments they used
Unfortunately, untangling /obj/structure/sign is going to be another major headache, and this has already exploded in scope enough already, so we can't get rid of the get_turf_pixel call just yet. This also doesn't fix problems with the special 2x1 /obj/structure/sign/barsign.
Some non-wall items have been made to use the new MAPPING_DIRECTIONAL_HELPERS as part of the directional cleanup.
tl;dr: All wall mounted items and some directional objects now use the same direction that they were labelled as. More consistent directional types everywhere.
Why It's Good For The Game
fml
Changelog
cl
refactor: Wall mounted and directional objects have undergone major internal simplification. Please report anything unusual!
fix: You can no longer stack an indefinite amount of Intercoms on the same wall.
fix: Defibrillator Mounts, Bluespace Gas Vendors, Turret Controlers, and Ticket Machines are now considered wall items.
fix: Wall mounted items on top of the wall now consistently check against other items on top of the wall, and items coming out of the wall now consistently check against other items coming out of the wall.
fix: The various directional pixel offsets within an APC, Fire Extinguisher Cabinet, Intercom, or Newscaster have been made consistent with each other.
fix: The pixel offsets of Intercoms, Fire Alarms, Fire Extinguisher Cabinets, Flashers, and Newscasters have been made consistent between roundstart and constructed instances.
fix: Constructed Turret Controls will no longer oddly overhang the wall they were placed on.
qol: Defibrillator mounts now better indicate which side of the wall they are on.
fix: Some instances where there were multiple identical lights on the same tile have been fixed to only have one.
/cl
## About The Pull Request
You could place catwalk_floors on each other ad infinitum because they were a plating subtype. This changes them to a floor, and sets their intact = false so that wires wont be hidden by undertile/proc/hide. Fixes#62105 .
Also fixes a smaller issue where "remove cover first!" wasn't being outputted to the user when they tried crowbarring a catwalk floor.
Thanks to arm for his help with this!
## Why It's Good For The Game
Fixes #62105
Changes our game to support widescreen titles, i'm working with the headmins to add these titles to the config as well.
Also:
title screen walls can no longer be examined
title screen itself can still be examined so admins can change it for the memes
Basically makes the code less dumb, took a long time. I worked hard to make sure there were no unintended effects (minus the fact you can no longer get spoons from the experimentor). No player-facing effects
I thought it looked weird that all cultist and combat knives were subtypes of the kitchen knives
major cleanup of modules/atmospherics folder and all related files, still many missing
-cleanup of procs name
-cleanup of vars name
-documentation of some of the procs
-minor changes to some for() logic (no in game changes just early continue or as anything checks)
No in game changes, only code and docs
This adds dedicated areas for places that have APCs. It also adds an APC
to the ferry Administrative Office, as it seems unusual to only have one
in Administrative Storage, which has distinct (ACCESS_CENT_CAPTAIN!)
access requirements.
APCs are still responsible for multiple centcom areas elsewhere, as it
seems a bit wasteful to have them everywhere. But this should keep things
coherent if anything happens on CentCom where access distinctions
(or at least, captain tier access!) matters.
Names of the new `/area`s are taken from the names on the airlocks that
lead to them.
First off, I am aware of the Feature Freeze for this month. This PR was initially started in #60401 about a month ago to break the changes into smaller PRs. The end result for this PR is a poor man's attempt at roguelike procedural generation. Enjoy!
Link to the README for how the new spawner system works.
Added the following new random mapping spawners:
pen, crayon, stamp, paper, pamphlet, briefcase, folder, wardrobe closet, wardrobe closet colored, backpack, narcotics, permabrig_weapon, permabrig_gear, prison, material, carpet, ornament, generic decoration, statue, showcase, paint, tool, tool_advanced, tool_rare, material_cheap, material, material_rare, toolbox, flashlight, canister, tank, vending_restock, atmospherics_portable, tracking_beacon, musical_instrument, gambling, coin, money_small, money, money_large, drugs, dice, cigarette_pack, cigarette, cigar, wallet_lighter, lighter, wallet_storage, deck, toy, toy_figure, booze, snack, condiment, cups, minor_healing, injector, surgery_tool, surgery_tool_advanced, surgery_tool_rare, firstaid_rare, firstaid, patient_stretcher, medical supplies, crate, crate_abandoned, girder, grille, lattice, spare_parts, table_or_rack, table, table_fancy, tank_holder, crate_empty, crate_loot, closet_private, closet_hallway, closet_empty, closet_maintencne, chair, chair_maintence, chair_flipped, chair_comfy, barricade, data_disk, graffiti, mopbucket, caution_sign, bucket, soap, box, bin, janitor_supplies, soup, salad, dinner
Removed deprecated wizard trap, vault, and armory spawners.