mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-06-05 14:17:12 +01:00
ed94de4ddf7edad8694badefc577392e0f762bf5
2101 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
8c1e35e1c0 |
Refactors mind language holders into non-existent, fixes new languages being deleted on species swap + tests (#76612)
## About The Pull Request This PR refactors mind language holders into non-existence As a result, `update_atom_languages` is no longer necessary Mind-bound languages are transferred via `/mind/proc/transfer_to` Species changing no longer deletes and re-creates the mob's language holder, allowing them to keep any languages they have. Species languages are sourced from `LANGUAGE_SPECIES` now, meaning they are removed when they change species. If the mob is not a human with a species datum, these are effectively just atom level languages. Makes a bunch of unit tests to ensure language transfer over certain events works as intended ## Why It's Good For The Game Mobs with minds having two independent language holders results in a good few bugs, and simply doesn't make sense when we have sources (`LANGUAGE_MIND`). Instead of tracking two language holders, we can simply use sources better and only track one. This means that the language holder you start with is your language holder, period. It doesn't get deleted or re-instantiated or whatever. ## Changelog 🆑 Melbert refactor: Refactored language holders, making species changes not delete all of your known languages /🆑 |
||
|
|
4c99fb2ebb |
Coroner additions and tweaks (#76534)
## About The Pull Request Serrated bone shovels can be created with any kind of shovel now, not just a spade (???) Serrated bone shovels can be used in place of circular saw in most surgeries. Added a duller (still deadly) variant of the serrated bone shovel as coroner mail. Autopsy scanners now act as advanced health analyzers on dead and seemingly-dead people. Increased the force, throwforce, and wound bonus of inert ritual knives and scythes. Coroner gloves can quickly apply medicine like nitrile gloves. ## Why It's Good For The Game > Serrated bone shovels can be created with any kind of shovel now, not just a spade (???) Weird ass bug. > Serrated bone shovels can be used in place of circular saw in most surgeries. It's serrated, it's cool, it's rare, it has a fast toolspeed. > Added a duller (still deadly) variant of the serrated bone shovel as coroner mail. Very thematic for the coroner, should probably also be a heirloom item but whatevs. Weaker so there's still a reason to seek out the OG. > Autopsy scanners now act as advanced health analyzers on dead and seemingly-dead people. Scanning corpses is pretty important during surgery - it tells you how much blood they have, organ damage, diseases... these things don't appear in the surgical computer readout, which means the coroner has to go out of his cave to pick up a boring light blue meatbag wound scanner. This also incentivizes coroners to do their job by giving them something cool that only works on dead bodies. > Increased the force, throwforce, and wound bonus of inert ritual knives and scythes. These two options in the MortiDrobe are pretty frickin' badass, especially with how SICK the Coroner looks with them, double especially in combat.  However, there's the large issue that as actual weapons they're really, really weak. Not enough damage, when I use them in combat I both feel badass but also get a nagging feeling in the back of my mind that I'm intentionally gimping myself, and with only 10 damage I can *really* feel it. I find it unfair that these are objectively worse than a welding tool or even a Butcher's Cleaver when they're a lot more involved to find, and scarce besides. These arguments apply equally to the Wizard's ritual knife, and the scythe. Additionally on the scythe, the crew really needs more good ghetto weaponry that isn't the boring same ol' of baseball bats, spears, cleavers... and making scythes useful is a great way to help bridge that gap. They deal a satisfying amount of damage now, with the clear downside, of course, being that they're bulky and hard to lug around. > Coroner gloves can quickly apply medicine like nitrile gloves. 'Fast medicine' doesn't just cover sutures, it also covers medical gel. Specifically, sterilizer gel. I find it annoying that the Coroner is encouraged to give up his drip for the boring life-saver nitrile gloves, because the difference in applying time really does make a difference - it makes gel applying go from annoying to smooth, which is important considering the whole purpose of sterilizer gel is to make surgeries go faster. The Coroner has surgery and thus medical locker access to begin with, so this isn't a balance problem, (and nitrile gloves are found by the dozen anyways) especially with how rare the coroner gloves are. ## Changelog 🆑 fix: Serrated bone shovels can be created with any kind of shovel now, not just a spade (???) add: Serrated bone shovels can be used in place of circular saw in most surgeries. add: Added a duller (still deadly) variant of the serrated bone shovel as coroner mail. add: Autopsy scanners now act as advanced health analyzers on dead and seemingly-dead people. add: Increased the force, throwforce, and wound bonus of inert ritual knives and scythes. add: Coroner gloves can quickly apply medicine like nitrile gloves. /🆑 |
||
|
|
fba8beec1d |
cursed katana shard no longer called "dark spoon shard" (#76605)
## About The Pull Request https://github.com/tgstation/tgstation/pull/75948 changed the name of the cursed shard and made the katana version a subtype...without changing the name or desc of the shard ## Why It's Good For The Game the dark shard from tendril loot will no longer have a stupid name and tell you you're not supposed to have it ## Changelog 🆑 fix: The cursed katana shard you can get from tendril loot no longer falsely tells you you're not supposed to have it /🆑 |
||
|
|
d4cdd6b63e |
Replaces lava and chasm's "safeties" and ignoring turf slowdown on catwalks with traits and a new element. (#76376)
## About The Pull Request This adds a new element for movables that grants turfs they're in traits, changes lava and the chasm component to check for traits instead, ditto for turf slowdown. It also implements another trait that prevents wet floor from slipping people, as well as some other changes (feel free to opine on them really): - Tables and conveyor belts now stop turf slowdown, much like catwalks, as I imagine people walking on them are not really touching the floor. (I'd include protection against lava too... until they melt, but that'd mean finding a way to have these objects burn in the first place, and lava code is still stupid despite a years old refactor I did) - Tables also stop slippery turfs from slipping (bananas, soaps etc. still apply). I wish there were a way to make some objects slippery by coating them in water vapor or splashing water/lube, but that's outside the scope of this PR. - Fixed an edge case in which a mob standing on a lava turf would be left permanently visually on fire if the lava is changed to another kind of turf. - Removed unused code from stone tiles. I'm going to include these traits in that global list for admin-added traits... tomorrow perhaps. 💤 ## Why It's Good For The Game Replacing some hard-coded mechanics with easier to use traits and an element, which I also need for the submerge element PR. ## Changelog 🆑 refactor: Replaced hardcoded "safeties" for lava, chasms and ignoring turf slowdowns on catwalks with traits. balance: much like catwalks, tables and conveyors also disable turf slowdowns. balance: slippery turfs won't slip you when walking on a table. fix: Fixed an edge case in which a mob standing on a lava turf would be left visually but permanently on fire if the lava is changed to another kind of turf. /🆑 |
||
|
|
eac3c9d91c |
Emergency Relief Capsule (#76457)
## About The Pull Request Getting back into coding by making some soul PRs. Adds a new kind of bluespace capsule which replaces the default one when the "budget pods" station trait runs, and is available from the vendor for a (marginal) discount.   The Nanotrasen Emergency Relief Capsule provides a port in the storm for people with an urgent need, and very little else. ## Why It's Good For The Game This one is mostly just kind of funny I'll be honest. I guess it uuuuuuuh provides a kind of pod with no GPS signal if you really want to go off the grid? But anything I write here is secondary to the point of "someone suggested it on the forums and I liked it". ## Changelog 🆑 add: Budget cuts can sometimes effect the station's supply of Emergency Bluespace Shelters. /🆑 |
||
|
|
8c2c72b0ed |
Duiffel Spotfix (#76442)
## About The Pull Request Gives duffelbags their proper slot count They inherited this from backpacks, but I sorta just forgot about that [Creates "levels" of locked objects, uses that to make locked duffels work](https://github.com/tgstation/tgstation/pull/76442/commits/c613c00f62fa3ff03bb33737d24da9acbf2050e3) [c613c00](https://github.com/tgstation/tgstation/pull/76442/commits/c613c00f62fa3ff03bb33737d24da9acbf2050e3) Turns locked into something that holds defines, this makes life a lot easier. Requires a lot of boilerplate because of how many uses of these procs there are and all the passthrough and shit. Adds a few outfit subtypes to avoid this class of failure in future. Renames the args in a few but not all touched procs, one thing at a time Closes #76407 Closes #76430 Had the lock check in the wrong place Closes #76441 GOD I HATE TK SO MUCH Wrote half the pr without glasses so if it's weird gimme some grace yeah? ## Changelog 🆑 fix: Fixes some fuck with duffelbags, them not holding enough + issues with spawning gear in them (job shit and all) /🆑 |
||
|
|
d27203f2f9 |
Fixes the ORM not correcty granting mining points if adding ore by hand (#76447)
## About The Pull Request This was an oversight from back when material datums were redone. Ideally you should still be dumping your ore on the floor so the ORM can slurp it up, but if for some reason you just want to add it by hand, this works fine. ## Why It's Good For The Game Consistency good. Fixes #76409 ## Changelog 🆑 Vekter fix: Fixed the ORM not granting mining points if you added ore by hand instead of dumping it on the floor. /🆑 |
||
|
|
2600f23ebb |
Coroner Update: Pickle-Eating Morbid Weirdo Obsessed with Death and Perfectionism (#76318)
This PR introduces a whole bunch of Coroner and Morbid related content. Firstly, Morbid is now a mind trait, and specifically, coroners start with it. Coroners also have a liver trait that allows them to heal toxins (very slowly) from eating pickles and drinking pickle juice. They also can...drink formaldehyde. I guess. Dissections is thirsty work. Coroners gain a whole set of special tools specifically for use in any surgeries marked as interests of the Morbid. This is determined by the ``surgery_flag`` called ``SURGERY_MORBID_CURIOSITY``. Currently, these surgeries are included; dissections, autospies, revival surgery, plastic surgery, organ/feature manipulations, amputations To fit the theme, TRAIT_MORBID also applies the reduction to eye snatchers. While using their special tools, and the surgery is a morbid curiosity, the coroner/anyone who is morbid gains a 30% speed boost! This stacks with the dissection speed boost. Otherwise, the tools are just regular tools with a special name (though the scalpel is better at killing undead, because, you know, you're watching over the dead). The coroner's special medkit, which is the only one you can get in a round, can fit their autopsy scanners and tools. Anything that comes standard with their kit can go back into it. Anyone who is morbid can safely retrieve the secrets of the elephant graveyard. The serrated shovel, notably, is a much better tool and notably better at killing organics, but not inorganics (like the dead). (Gives roboticists secure morgue access during skeleton crew pop totals) |
||
|
|
82cf9ea499 |
Removes shitty "status" variable on organs, makes them use organ_flags instead (#76350)
## About The Pull Request Title. ## Why It's Good For The Game Seriously this shit pisses me off, why are ORGAN_SYNTHETIC and ORGAN_ROBOTIC two different things? ## Changelog not applicable unless i fucked up --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> |
||
|
|
68a5a6f46c |
You can now revive dead fishes, bees and mice with a lazarus injector (#76252)
## About The Pull Request This PR introduces a signal sent to the target when a lazarus injector is being used on them, hence read the title. EDIT: I've forgotten to add that Tom no longer counts toward the mice population cap now, being unique. ## Why It's Good For The Game Being items rather than simple/basic mobs, dead mice (without a mind datum), bees and fishes cannot be revived by the lazarus injector. While I agree that spending one for this may be an egregious waste of mining points, it's still fleshing out the feature a bit. ## Changelog 🆑 add: You can now revive dead fishes, bees and (mindless) mice with a lazarus injector. balance: Tom, the mouse, no longer counts toward the mice population cap. /🆑 |
||
|
|
32f7f1d26d |
Bubble gum crate looks correct (#76222)
## About The Pull Request Fixes #76216 Bubble gum crate now refers to the correct icon via `base_icon_state` so the crate actually looks correct ## Changelog 🆑 fix: bubble gum crate actually looks correct /🆑 |
||
|
|
64eae49042 |
Replaces the Reaper Scythe with the Vorpal Scythe (also the Morbid trait) (#75948)
adds the Vorpal Scythe, a special chaplain null rod variant, replacing the Reaper Scythe, a not so special null rod variant. When you choose the vorpal scythe, it comes as a shard that you implant into your arm, similar to a cursed katana. Once implanted, you can draw it at any time like an arm implant. However, sheathing it again presents some problems. (Also, implanting the organ gives you ``TRAIT_MORBID``, which I'll explain in a bit) The Vorpal Scythe has 10 force, one of the weakest null rod variants for force that isn't a joke null rod. However, it has exceptional armor pen and also has 2 tiles of reach. So quite unique. It also has a special beheading ability when you right-click someone. This borrows some code from amputation shears, functioning pretty similarly, except with a few additional ways to speed up the action and restrictions. (It takes 15 seconds baseline to behead someone standing and conscious, and speeds up or slows down based on factors such as incapacitation and whether or not our scythe is already empowered) When you successfully behead someone with a mind, the vorpal scythe gains 20 force and can be safely stowed and drawn for 2 minutes. Performing more death knells like this will reset the timer. If it has not performed its 'death knell', or you haven't hit a living mob, then it will cause severe damage to you if you ever try and stow it (or its forced back into your arm). Just hitting a mob with the scythe will sate it for 4 minutes. Unless it is a non-player monkey. Horrible things. Just hitting mobs does not reset the timer on empowerment. What this means is that the chaplain may be more hesitant to simply draw their weapon on people. It also means that potentially, the chaplain will not always have magic immunity, since they may end up stowing the weapon away and be reluctant to draw it on a whim without either taking damage for sheathing it without hitting something, or dealing with having one less hand up until they can. While empowerment only happens when you behead mobs with a mind, beheading monkeyhumans and other mindless humans subtypes causes their heads to become haunted! It's mostly harmless and largely just SpOoKy. We don't want heads with actual players in them to go floating off to space. (Does not work on monkey heads for sanity reasons) When you have the Morbid trait, you think creepy stuff is cool and hate saving peoples lives. You get a mood boost from graverobbing, autopsies, dissections, amputations (including beheadings with the scythe and amputations with the shears) and revival surgery. However, you get a mood penalty when you tend wounds on the living, as well as a hefty penalty when you perform CPR or defibrillate someone. I was thinking Victor Frankenstein when I was choosing which actions had an associated moodlet, so anything that I might have missed would be appreciated. You also count as potentially cool with regards to haunted objects. Ghosts think you're neat. (Revenants probably will still kill you if they had the chance) |
||
|
|
8a2e6f0eb8 |
Autolathe, protolathe, mech fab and comp printer now use defines for matter bins values. Also some production ui do. (#76020)
Changed hardcoded matter bins values to use defined `SHEET_MATERIAL_AMOUNT` for following stuff: autolathe, protolathe, mech fabricator and component printer. `Material Access Bar` and `MaterialIcon` used for protolathes, circuit printers and etc. now also use defined `SHEET_MATERIAL_AMOUNT`, via static ui data, to prevent same issues in future. Also changed some notes in /// parts just because why not. |
||
|
|
c0e46fabf7 |
Standardize Welder Fuel Usage (#76021)
Remove welder fuel usage from all actions except attacking and leaving it on most welder tasks require a minimum of 1u of fuel, some longer tasks require a minimum of 2 or 3u welders now drain 1u every 5 seconds they're active ## About The Pull Request Prior to this PR welder fuel usage was random, a lot of tasks didn't use any welder fuel and welders were basically near infinite so long as you didn't use them for combat, it took 26 seconds of activity to drain 1u of fuel, that means an emergency welder alone could run for 5 minutes straight before needing a refuel After this PR all welders will drain 1u every 5 seconds instead of every 26 seconds, but welding objects won't require extra fuel anymore, making the fuel usage much more consistent. resolves #55018 ## Why It's Good For The Game Actually makes fuel tanks useful and relevant without making it obnoxious to do repetitive quick tasks like turn rods into plates, there's actually a reason to upgrade off the emergency welder now since it lasts 50 seconds rather than 5 minutes ## Changelog 🆑 qol: Welders now have a more consistent fuel usage /🆑 |
||
|
|
830d2e50b4 |
Fixes some stupid airlock sleeps (#75961)
## About The Pull Request [A common problem with explosions is an overabundance of sleeping](https://github.com/tgstation/tgstation/commit/6499077a09469ff401c224c0510bc184c663b118) In an attempt to solve this issue, let's not continue to sleep and do work in door closing if the door is already deleted (This is caused by firelocks activating due to other adjacent objects deleting, triggering an atmos update, and closing the firelocks before they get bombed. I don't have a elegant way of resolving that core problem, so let's just minimize the impact) [Nukes a stupid sleep loop in airlock code](https://github.com/tgstation/tgstation/commit/5b16360520526d6f5aa3b511049456b74f33f430) When an airlock was depowered, it would enter a sleep loop, decrementing its delay by 1 second every well, one second, so long as it had the right wires flipped This is very stupid Instead, let's use signals off wire changes and a combo of timer and remaining time var to do this with JUST a timer Most of the changes here are just swapping over wires to a setter to make signal registration work\ ## Why It's Good For The Game Less sleeping around explosions means less dropped ticks after a bomb goes off. Good just in general Also this excises dumb boomer code and adds some hooks for other devs to use (we should use wires more man) |
||
|
|
d48f8c53f7 |
Fix crusher harddel (#76096)
## About The Pull Request Fixes #60047 ## Why It's Good For The Game Hard del and bricking things are bad. Guess it's still an issue that burning tropheys are a thing but Shrug ## Changelog 🆑 Melbert fix: Fixed hard delete with Kinetic Crusher causing the projectile function to brick /🆑 |
||
|
|
142164187d |
Fixes coin values (#76066)
## About The Pull Request This brings coins values back from being severely undervalued after #75437. Coins are supposed to be made of and worth 400 units of mats, but the numbers weren't updated and so they were made of significantly less than that. ## Why It's Good For The Game Brings coins back to what they're supposed to be worth. ## Changelog 🆑 fix: After destroying unfathomable quantities of excess coins, their value is back to what it's supposed to be! /🆑 |
||
|
|
43f1a52223 |
Removes some boilerplate from transforming component (#75998)
## About The Pull Request Removes some boilerplate from transforming component, uses traits in a similar way to the two-handed component Also fixes #74955 (If it's still broken?) ## Why It's Good For The Game Makes it a bit cleaner to work with. Cause I wanna do something with this in the future maybe. ## Changelog 🆑 Melbert fix: Fixed e-cutlasses and bananium swords having invisible inhands code: Removed boilerplate from transforming component /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
b5975bd915 |
Unit tests now catch decals in walls/space (#75189)
## About The Pull Request Unit tests will now fail if there's a decal in a wall or open space turf. Open space turf could be limiting to mappers but I don't think it makes sense for decals (like dirt, glass shards, etc) to be floating around in space in the exact same spot. If there's a decal you want to put in space, decals have a ``turf_loc_check`` var that will bypass this. **Important note: This is not changing existing behavior. Decals already delete themselves when they spawn in these incorrect locations, we're just avoiding them from spawning in the first place.** ### Changes I made - Ash flora are now lava immune, rivers spawn after flora does, so I decided that it would be easiest (and more flavorful) to have them be lava-immune rather than to not have them spawn at all. - Decals can now be spawned in non-turf locations. This is currently done by mail, which can give you bones as part of the mail. Currently it will just delete itself instead. - Trading Card button is now on the same tile as their display, which now uses an offset. Before it would spawn it on the tile next to it, which could be a wall in some instances. - Mirrors now have floating movement type. They ARE floating since they're attached to the wall, and it prevents them from burning up due to lava in the Pride ruin. - I also added a broken mirror subtype because I thought the icon_state check was terrible. - Bubblegum called ``DestroySurroundings`` several times on the same thing, I hopefully fixed some of that. Their charge ability also registered ``COMSIG_MOB_STATCHANGE`` despite ``/datum/action`` doing it by default, so I fixed that too. ## Why It's Good For The Game Decals in walls is already a bad idea, but currently all it does is delete it on Initialize. It would be better if we ensured they wouldn't spawn in the first place. ## Changelog 🆑 fix: Lava will no longer burn 6 of the mirrors in pride ruin fix: Lava will no longer burn plants that spawn in them. /🆑 |
||
|
|
dd02a05453 |
Fixes a 6 years old typo in the H.E.C.K helmet (#75939)
## About The Pull Request muh desoulfication ## Why It's Good For The Game ## Changelog 🆑 spellcheck: the H.E.C.K helmet is now typo-free /🆑 |
||
|
|
c88d6b2666 |
Replaces antag softsuits with alternatives and balances some gun loot in space ruins (#75762)
Next part of my pass on space loot. This touches a few of the higher powered ones I found with the help of Donglesplonge. The main goal here was to replace a few significantly powerful items with less powerful or harder to carry variants while retaining most of their value as well as removing a few blatant antag-only items. The affected ruins and what was changed: Caravan Ambush - Replaced a mini energy gun with a survival knife. There's apparently a chameleon kit here but I'm actually okay with these staying - their relative impact on the round is low and they can be used for creative drip reasons by crewmembers. Old Infiltrator - Replaced the black-and-red softsuit with the Contractor suit. It's in one of the suit storage units, which you'll need a crowbar to open up. Waystation - Removed a magazine from the WT-550 Autorifle crate. There's still a Syndicate combat medkit and a set of night-vision goggles here but they're behind multiple pod turrets. I want to get input on how hard these are to get, but it seems relatively difficult, and I'm okay with "a better medkit and night visions" as space loot. You outright can't get the M1911 in antag stuff (as far as I can tell) so it stays. The Faceoff - Replacing the syndie spacesuit/gear in the mining lockers up north with unique Syndicate variants of the mining gear. Thanks to necromanceranne for the sprites. |
||
|
|
88b898dffd |
Stops shields getting broken by pillows and disablers. (#75759)
## About The Pull Request See the title. Doing so by adding a new arg for damage type to `check_shields()` and `hit_reaction()`. The other way would had involved a couple istype checks for item or projectile damage type, but this is a longer term solution and can tackle more than just that. ## Why It's Good For The Game Fixes #74876. ## Changelog 🆑 fix: Stops shields getting broken by pillows and disablers. /🆑 |
||
|
|
099c804c52 |
Self-used fulton extraction packs autostoring in any back storage (#75763)
## About The Pull Request when fultoning yourself, adjusts the fulton autobag check from "is there a backpack on this guy" to "can we try shoving stuff into their back-slot item's atom storage" not sure if this is qol, fix, or god forbid balance but let's go with the maybe least offensive option first ...if it was an oversight can i legally flag this as a fix? closes #75327 ## Why It's Good For The Game makes the autobagging feature work for other back-mounted storage options. like MODs.  ## Changelog 🆑 qol: Fulton extraction packs (when used on yourself) now automatically shove themselves into any back-mounted storage, like MODsuit storage modules. /🆑 Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com> |
||
|
|
2922d36500 |
Refactors for material container, ammo box & recycler (#75422)
**1. Material Container Refactors** a. `/datum/component/material_container/proc/insert_item()` - Will now do stack spliting i.e. it will consume as many sheets from a stack as possible and leave out the rest, It was moved from a player interaction feature in `user_insert()` to this low level allowing many things to take advantage of it - Will now delete the item for you if it could salvage any materials from it, you don't have to do it explicitly anymore if insertion was successfull (i.e. this proc returns an non zero value) If you inserted a stack and not all of it's sheets were inserted from the above point then you still have to check it explicitly - Will now invoke `after_insert` if any materials were salvaged b. `datum/component/material_container/proc/user_insert() ` - Will now split the stack by the requested amount making precise insertion work again & Fixes #72288 - will now consume all contents inside of the object reccursively, this means items like ammo boxes will no longer have to adjust their custom materials based on how much ammo they contain because `user_insert()` will loop through all its contents and salvage the metal of every bullet inside the box contents so this means https://github.com/tgstation/tgstation/blob/9686971c76fb6300939c9c191c635d2a852a143c/code/modules/projectiles/boxes_magazines/_box_magazine.dm#L206 has been removed. **The Problem with this proc** take `/obj/item/ammo_box/foambox/riot` for example. it has 40 darts each having 1125 worth of iron, this proc will add the total iron of all the bullets to the box custom material so the box custom materials would become `5000(base iron of box. see the definition of /obj/item/ammo_box/foambox/riot) + 45000(40 bullets each having 1125 worth of iron) = 50000 iron` What happens when you throw this ammo box in an recycler? The recycler will recycle this box(Now 50000 worth of iron) AND the iron of each of it's 40 bullets thus yielding `50000(iron from box because of update_custom_materials()) + 45000(40 bullets each having 1125 worth of iron) = 95000 iron` ` because of this single proc we got `95000 - 50000 = 45000 extra iron` from thin air **The Solution?** Remove this proc and set a constant custom material value for the ammo box(it's now 5000 computed see code) AND allow the material container to loop through every bullet in the box and salvage iron from them. This would yield `5000(base iron of box. see the definition of /obj/item/ammo_box/foambox/riot) + 45000(40 bullets each having 1125 worth of iron) = 50000 iron` From both box & bullets combined and not just from the box alone Fixes #43570 Fixes #57548 This also allows you to do cool stuff like fill your bag with iron, glass, whatever and dump them in the autolathe/ore silo by attacking the machine with your bag rather than pulling out & inserting each item individually so hey convinience **2. Recycler patches** - Recycler will stop consuming items when it runs out of power mid recycling(which can happen if it recycles a large amount of items). It used to previously run through the list of items without breaking so even when power was lost, it still did it's job - Recycler will now Properly recycle all the contents inside an atom. **The Problem** Say we have 2 Items - Backpack - Glass sheet inside Backpack If we process the items in the following order while deleting each item that is processed first "Backpack" then "Glass Sheet" then when "Backpack" is fully recycled and "Deleted" since the "Glass Sheet" is inside the "Backpack" it get's deleted as well, so when we actually try to recycle the "Glass Sheet" next, nothing happens because it was deleted when we deleted the "Backpack". **The Solution** Recycle the items in the reverse order first recycle the "Glass Sheet" delete it & then the "Back Pack" so we don't deal with deleted items. So you should see more materials come out when you put stuff inside storage mediums & throw them in the recycler - Recycler will consume only half the power when it's deleting items that can't be recycled(no material was salvaged). just for convinience |
||
|
|
e38882179f |
Fixes mind traits (Curator, Miner, Clown) (#75593)
## About The Pull Request Tower of Babel (Curator), Naive (Clown), and Storm detector (Shaft Miner), are all traits that are given to your mind upon taking these jobs. However, we have been checking the body for these traits, not the mind. This meant that Shaft miners werent alerted of ice storms, Clowns didnt have their unique examine text, and Curators were affected by Tower of Babel. This fixes all those issues. Naive and Tower of Babel realistically should only be on the mind, so I changed all instances to check the mind. Storm detection is something you can get through analyzers, so I left it as a check for both your body and mind traits. Clown's Naive:  Tower of Babel:  ## Why It's Good For The Game Fixes several bugs for 3 jobs all at once. I don't see any issue reports on any of these, but they existed. ## Changelog 🆑 fix: Shaft Miners are now alerted of Icemoon storms, Clowns are naive, and Curators are immune to the Tower of Babel again. /🆑 |
||
|
|
6e5ae1cc24 |
Fixing a few minor maintenance hindrances. (#75594)
## About The Pull Request See the title and relative issue reports mentioned in the section below. ## Why It's Good For The Game Closes #75461, closes #75462, closes #75467. ## Changelog 🆑 fix: Capturing CTF control points no longer requires the active hand to be empty. /🆑 |
||
|
|
fbec9c14e9 |
JSON Logging Take Two (#73604)
## About The Pull Request Converts all logging, excluding perf and investigate, to json. I focused on making the system as easy to use and as easy to add new categories as possible. Due to issues related to logging to world at global creation logger is now a byond real, which is created directly before Master Log categories support versioning, secret flagging, and sub-category filtering. Although all of this is entirely optional for coders. If you ever want to add a new category and use it, all you need to do is make the barebones category datum and the define. I've kept existing procs such as log_game, and simply turned them into a wrapper for Logger.Log(xxx, ...) ## Why It's Good For The Game Makes processing and filtering logs much easier in the future, while only minimally downgrading log crawling experience. I am also working on a log viewer frontend for admin usage however that will take a little bit longer to finish up. Also makes special logging and data tracking much easier thanks to a data list processing implementation and handling ## Changelog 🆑 server: All logs are now formatted in json, excluding perf and investigations /🆑 --------- Signed-off-by: GitHub <noreply@github.com> Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com> Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com> Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com> |
||
|
|
54523c8e37 |
Makes fire blossoms glowy. (#75392)
## About The Pull Request They have bioluminescence trait as endershrooms, but don't glow like endershrooms. That's how it looks when grown:  And it has a weaker light when it's harvested:  ## Why It's Good For The Game It's cool. ## Changelog 🆑 add: Fire Blossoms are now glowy. /🆑 |
||
|
|
a4822c165b |
Now blocking is more noticeable! New blocking and parrying sounds (#74998)
## About The Pull Request Now whenever an attack is blocked, the sound will play and deflection with the item now plays sound too: https://github.com/tgstation/tgstation/assets/42353186/1a0cc5b7-f2af-4d72-88d7-57cc11f5baa3 The parry.ogg was updated to a better-sounding one https://github.com/tgstation/tgstation/assets/42353186/5ffc53d8-0b3c-4e6b-9256-b7b9735918bc Every item now has a "block_sound" that can be set, it determines what sound is played when you block an attack with it. Cult items no longer have their own way of fuckery to play parry sounds, now they use this system as well. Now shield bash sound is 80% smaller after cutting out all of its noise and silence. ## Why It's Good For The Game Adds feedback on whether the attack was blocked or not, signalling both to the attacker and defender that it didn't go through even if the animation played, which is a great QoL. Same with the deflection sound (although deflection is still pretty visible, the sound would not hurt) New sounds add more flavour to the weapons, especially the energy sword, giving it even more badassery. Cutting down the noise from the shield bash sound has made it better to listen and saved some kilobytes of information. And making every item use the universal system for blocking sounds, removing cultist items' own code for playing parrying sounds. ## Changelog 🆑 DrDiasyl aka DrTuxedo#0931 qol: Now blocking an attack will play a sound and display a spark effect, giving back feedback sound: parry.ogg was updated to a better-sounding version sound: shieldbash.ogg no longer has noise and unnecessary silence sound: New block_shield.ogg and block_blade.ogg for shields and energy swords code: Cultists items no longer have their own code for playing parrying sounds /🆑 --------- Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> |
||
|
|
bf880f553a |
Makes industrial gold and regenerative gold spawn random coins. Also adds chococoin to coin spawner. (#75199)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. --> <!-- You can view Contributing.MD for a detailed description of the pull request process. --> ## About The Pull Request So they just had list from 6 coins and not random picking of coins, so now its random. It will also spawn chococoin because it's a coin too. But won't spawn `coin/gold/debug` because it's debug and eldritch coin because comxy asked about it. Added chococoin to `/obj/effect/spawner/random/entertainment/coin` and holdables list of wallet. <!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! --> ## Why It's Good For The Game Random is funny. <!-- Argue for the merits of your changes and how they benefit the game, especially if they are controversial and/or far reaching. If you can't actually explain WHY what you are doing will improve the game, then it probably isn't good for the game in the first place. --> ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and 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: Indusrial Gold and Regenerative Gold extracts now spawn random coins and not just list of 6 coins. But no mythril as it has miserable chance to have summoning effect which have even more miserable chance to spawn something dangerous and not just mice. add: Chococoin now has a chance to spawn wherever the coins are used to spawn (wallets, greed ruins, deltastation bar) /🆑 <!-- 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. --> --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> |
||
|
|
2068ea9ab5 |
Crate, Closet Refactors & Access Secured Stuff (#74754)
## About The Pull Request This PR is actually 2 parts, one that fixes runtimes with crates & the other that allows secured closets to be crafted along with a secured suit storage unit **Crate Fixes** Fixes #74708 The problem starts here https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/crates.dm#L31-L34 Not only does this if condition look ugly but it's highly error prone because one single call to `update_appearance()` can cause this to fail, and sure enough if you look at the parent `Initialize()` proc it calls just that https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/closets.dm#L81-L88 Since we know the appearance is guaranteed to be changed in some way before the if condition gets executed let's check what the final state of the crate would be before this if check https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/crates.dm#L54-L56 We see that the final icon state depends on the variable `opened` so if we want to place/spawn a crate that is opened at round start we have to ensure that `opened = TRUE` so the `if(icon_state == "[initial(icon_state)]open")` succeeds and does its job correctly. Sadly we did dum shit like this ``` /obj/structure/closet/crate{ icon_state = "crateopen" } ``` throughout the entire code base, we thought backwards and were only concerned in making the closet look open rather than setting its correct variables to actually say that it is opened. because none of these crates actually set `opened = TRUE` the final icon state becomes just "crate" NOT "crateopen" therefore the if condition fails and we add the component https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/crates.dm#L36-L37 with the wrong parameters, so when closing the closet after_close() removes the component with the wrong arguments https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/crates.dm#L81-L84 that is does not unregister the signals and readds the component i.e. re-registers the signals causing runtime. The solution just do this ``` /obj/structure/closet/crate/open[mapping helper] ``` To clearly state that you want the closet to be open, that way you don't have to memorize the icon_state for each different type of crate, it's consistent across all crates & you don't get runtimes. And that's exactly what i did everywhere Another issue that is fixed is "Houdini crates" i.e. crates which are open & appear empty but when you close & reopen them magical loot appears, Go ahead walk upto to cargo and find any empty crate that is open and do this Fixes #69779 https://user-images.githubusercontent.com/110812394/232234489-0193acde-22c8-4c19-af89-e897f3c23d53.mp4 You will be surprised, This is seriously harmful to players because they can just walk by a crate that appears to be open & empty only to realize later that it had some awesome loot. Just mean The reason this happens is because of the Late Initialization inside closets https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/closets.dm#L85-L86 What late initialization does is suck up all stuff on its turf https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/closets.dm#L97-L100 In theory this is supposed to work perfectly, if the closet is closed move everything on the turf into the closet and so when the player opens it, they all pop back out. But what happens if the closet is opened before ` LateInitialize()` is called? This breaking behaviour is caused by object spawners https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/effects/spawners/random/structure.dm#L94-L100 And maint crates https://github.com/tgstation/tgstation/blob/f1178342084bf89897a46f6ce9dc849233bed21b/code/game/objects/structures/crates_lockers/crates.dm#L141-L143 These 2 spawners open up the crate based on random probability before ` LateInitialize()` is called on the crate and so what happens is the crate is first opened and then stuff on the turf is sucked in causing an open but empty crate to appear. The solution is simple just check again in ` LateInitialize()` if our crate is still closed before we proceed.That's fixed now too **Code Refactors** 1. Introduced 2 new signals COMSIG_CLOSET_PRE/POST CLOSE which are the counter parts for the open signals. hook into them if you ever need to do stuff before & after closing the closet while return BLOCK_CLOSE for COMSIG_CLOSET_PRE_CLOSE if you want to block closing the closet for some reason 2. 2 new procs `before_open()` & `before_close()` which are the counter parts for `after_open()` & `after_close()`. If you need to write checks and do actions before opening the closet or before closing the closet override these procs & not the `open()` & `close()` procs directly **Secured Craftables** This is just a reopened version of #74115 after i accidently merged another branch without resolving the conflicts first so i'll just repaste everything here, since crates & closets are related might as well do all in one 1. **Access secured closets** - **What about them?** **1. Existing System** If you wanted to create a access secured closet with the existing system its an 4 step process - First construct a normal closet - Weld it shut so you can install the airlock electronics - Install the electronics [4 seconds] - Unweld This is a 4 step process which takes time & requires a welding tool **2. New system** Combine the 4 steps into 1 by crafting the secure closet directly  - **Bonus Features** **1. Card reader** The card reader acts as an interface between the airlock electronics & the player. Usually if you want to change access on a locker you have to - Weld the closet shut - Screw driver out the electronics - Change the settings - Install it back - Unweld With a card reader there is no need of a welder & screwdriver. You can change the access of the locker while its operational **How do i install the card reader?** 1. Weld the closet shut 3. Insert card reader with hand 4. To remove the card reader use crowbar or just deconstruct the whole closet with a welding tool 5. Unweld closet **How to change its access?** This will overwrite the settings on your airlock electronics. To do this 1. make sure the closet is first unlocked. This is important so that no random person who doesn't have access to the closet can change its access while its locked. It would be like giving the privilege of changing your current password without first confirming if you know the old password 2. attack/swipe the closet with your PDA. Make sure your ID card is inside the PDA for this to work. You can also just use your ID card directly without a PDA 3. You will get 3 options to decide the new access levels  They work as follows - **Personal**: As the name implies only you can access this locker and no one else. Make sure to have your ID on you at all times cause if you loose it then no one can open it - **Departmental**: This copies the access levels of your ID and will allow people having those exact same access levels. Say you want to create a closet accessible to only miners. Then have an miner choose this option and now only miners can open this closet. If the Hop sets custom access on your ID then only people with those specific access levels can open this closet - **None**: No access, free for all just like a normal closet **Security:** After you have set the access level it is important to lock the access panel with a "multi-tool", so no one else can change it. Unlock the panel again with the "multi-tool" to set the new access type **2. Give your own name & description** To rename the closet or change its description you must first make the closet access type as personel i.e. make it yours, then use an pen to complete the job. You cannot change names of departmental or no access closets because that's vandelism **3. Custom Paint Job** Use airlock painter. Not intuitive but does the job.  **4. Personal closets** Round start personal closets can have their access overridden by a new ID when in it's unlocked state. This is useful if the last person has no use for the closet & someone else wants to use it. - **Why its good for the game?** 1. Having your own personal closet with your own name & description gives you more privacy & security for your belongings so people don't steal your stuff. Personal access is more secure because it requires you to have the physical ID card you used to set this access and not an ID which has the same access levels as your previous ID 2. Make secure closets faster without an welding tool & screw driver 3. Bug fix where electronics could be screwed out from round start secured closets countless times spawning a new airlock electronic each time 2. **Access secured freezers** - **What about them?** The craftable freezer from #73942 has been modified to support secure access. These can be deconstructed with welders just as before  - **How does it work?** The access stuff works exactly the same as secure closets described above. You can rename & change description with pen just like the above described secure closets. No paint job for this. Install card reader with the same steps described above. - **Why it's good for the game?** 1. Make access secured freezers faster without a welder and screwdriver 2. Your own personally named & locked freezer for storing dead bodies is always a good thing 4. **Access secured suit storage unit** - **What about them?** Suit storage units now require airlock electronics for construction. The access levels you set on it will be used to decide 1. If a player can unlock the unit 2. If the player can open the unit after unlocking 3. If the player can disinfect whatever is inside By default all round start suit storage units have free access - **Install card reader** Provides the same functionality as secured closets described above. To install it 1. Open its panel with a screw driver 2. Add a card reader to it with hand 3. Close the panel When you deconstruct the machine the card reader pops back out - **Why it's good for the game?** 1. Having your own access protected and named suit storage unit so random people don't steal your mod suits? Who wouldn't want that.? Provides security for department storage units. 2. If you have the unit locked then you cannot deconstruct the machine with a crowbar providing additional security 3. Fixes #70552 , random people can't open/unlock the suit storage unit without access. You can set personal access to make sure only you can access the unit ## Changelog 🆑 add: Access secured closets. Personal closets can have their access overwritten by an new id in it's unlocked state add: Access secured freezers. add: Access secured suit storage units. fix: Suit storage unit not having access restrictions. fix: airlock electronics not properly getting removed after screwing them out from round start lockers fix: round spawned open crates run timing when closed fix: open crates hiding stuff in plain sight fix: open closets/crates sucking up contents during late initialize causing them appear empty & open /🆑 --------- Co-authored-by: Tim <timothymtorres@gmail.com> |
||
|
|
1a918a2e14 |
Golem Rework (#74197)
This PR implements this design document: https://hackmd.io/@Y6uzGFDGSXKRaWDNicSiEg/BkRr176st Put briefly, this will remove every existing golem subtype and consolidate golems into a single species with cool new sprites. NOT implemented from that PR is the ability to eat Telecrystals, I couldn't come up with an appropriate visual that can stack with the existing ones, but that should be a reasonably trivial add for a future artist & developer. New Golems have a food-based mechanic where their hunger decays pretty quickly and can only be replenished by eating minerals. They start moving slower as they get hungrier, until eventually they become completely immobilised and need to be rescued. Eating different kinds of minerals will visually change your sprite and give you a special effect in a similar way to old golems, but temporary. While transformed, you can't eat any other kind of mineral which would transform you (but can still consume glass). To see the full list of effects, look at the hackmd above. In service of these sprites working I have refactored the `species/offset_features` feature by killing it and delegating that responsibility to limbs instead. Rather than applying an offset to items due to your species, it is due to your weird head or arms. This makes overall more sense to me, but it inflates the code changes in this PR somewhat. It doesn't make a lot of sense to atomise unfortunately because that code also seemed to be entirely unused until I tried to use it in this PR, so you wouldn't be able to tell if my changes broke anything. I might make a downstream sad by doing this. All of the actual numbers in this PR are made up and only loosely tested, it will need some testmerges to gather feedback about whether it sucks or not. Other relevant changes: I reworked how bioscrambling works based off bodypart bodytypes, to automatically exclude golem limbs in either direction. There's really no way to have those work on humans or vice versa. Organs still fly though. |
||
|
|
dde5785f82 |
Request Console refactor (#75067)
## About The Pull Request This PR changes the request consoles in the folowing ways: - The request console's had some very old UI, so I decided to convert it to tgUI. - Cleans up and changes various variable names. Also removes a historical comment (desouls the file) - Sending an announcement now has a cooldown of 30 seconds like the message console priority announcement - Audio feedback on successful and erroneous message give a little audio feedback - Reply is now Quick Reply, which you do in a popup I have half a mind to remove the long material list from the ORM, as some people told me I should, but for now it stays. <details> <summary>Screenshots of the new UI</summary>    </details> I originally planned to add mapping helpers, but decided to delay it until a future PR. ## Why It's Good For The Game TgUI is good and powerful. ## Changelog 🆑 refactor: converts the request console to tgui /🆑 |
||
|
|
e40461972c |
Flora (like trees, rocks and etc.) now drops materials when destroyed. (#75070)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. --> <!-- You can view Contributing.MD for a detailed description of the pull request process. --> ## About The Pull Request I find it strange that you don't get anything if you just break tree or rock with brute force. So you will now get something but with 0.6 multiplier. I chose 0.6 multiplier so using tools are still preferable, but you still get amount of recourses you can do something with. <!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! --> ## Why It's Good For The Game You can gather some materials if you have no tools besides the toolbox. <!-- Argue for the merits of your changes and how they benefit the game, especially if they are controversial and/or far reaching. If you can't actually explain WHY what you are doing will improve the game, then it probably isn't good for the game in the first place. --> ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and 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. --> 🆑 qol: Trees, rocks, grass and etc. now drop materials when destroyed. /🆑 <!-- 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. --> --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> |
||
|
|
9635b3957a |
Hierophant club appearance updates properly; works if summoned into hand. (#75116)
## About The Pull Request Fixed a pair of bugs with the hierophant club. First, the appearance of the club would not update properly to display whether or not the beacon is attached. The icon state was only ever updated when the blink action was used, rather than when the beacon was actually manipulated. It now updates at sensible times. Second, the blink action was granted when the hierophant club was _picked up,_ rather than equipped into hand. This meant that if the club was placed in your hand by any means other than picking up (most relevantly, by casting Instant Summons, something miners can reasonably get their hands on), the blink action would not work unless you drop it and pick it up again. It now uses the `equipped()` proc to do this correctly. ## Why It's Good For The Game Visual feedback is useful to know whether or not you have a beacon deployed - since the UI button doesn't change at all to tell you this information. The summoning bug is minor, but could cause problems for miners who have acquired both the club and Instant Summons - the bug could ruin a perfectly good getaway plan. ## Changelog 🆑 fix: The hierophant club's sprite updates when it should fix: The hierophant club grants the blink action when summoned into hand /🆑 |
||
|
|
1b5c0489a4 |
ex_act() will work on basic mobs again (lol) + Unit Test (#74953)
basically ex_act's implementation on basic mobs would call parent and then react to it's value, this is presumably to do the first check about space vine mutations and whatever. the problem is that the `/mob/living` implementation would itself also call parent, and that would always return null because `/atom/proc/ex_act` doesn't have a set return value. So, this simply would _always_ early return, with ex_act presumably *never* working on basic mobs for at least four months now. I decided to then change up the return values for pretty much all implementations of `ex_act()` since there was no rhyme or reason to returning null/FALSE/TRUE, and documenting why it's like that. Just to make sure I wasn't breaking anything doing this (at least on base implementations), I wrote a unit test for all of the three major physical types in game (objs, mobs, turfs) because i am a paranoid fuckar. we should be good to go now though. ## Why It's Good For The Game i noticed this because placing c4's on sargeant araneus wouldn't actually damage it whatsoever. now it actually does the stated 30 damage, but araneus has like 250 health so it doesn't actually matter in the long run. whatever at least it does the damn 30 now. also adds a unit test for this specific case as well as a range of other cases to ensure this stuff doesn't silently break in this way anymore |
||
|
|
f2fd69a49a |
Minerals have been refactored so costs and minerals in items are now in terms of mineral defines. (#75052)
Ladies, Gentlemen, Gamers. You're probably wondering why I've called you all here (through the automatic reviewer request system). So, mineral balance! Mineral balance is less a balance and more of a nervous white dude juggling spinning plates on a high-wire on his first day. The fact it hasn't failed after going on this long is a miracle in and of itself. This PR does not change mineral balance. What this does is moves over every individual cost, both in crafting recipes attached to an object over to a define based system. We have 3 defines: `sheet_material_amount=2000` . Stock standard mineral sheet. This being our central mineral unit, this is used for all costs 2000+. `half_sheet_material_amount=1000` . Same as above, but using iron rods as our inbetween for costs of 1000-1999. `small_material_amount=100` . This hits 1-999. This covers... a startlingly large amount of the codebase. It's feast or famine out here in terms of mineral costs as a result, items are either sheets upon sheets, or some fraction of small mats. Shout out to riot darts for being the worst material cost in the game. I will not elaborate. Regardless, this has no functional change, but it sets the groundwork for making future changes to material costs much, MUCH easier, and moves over to a single, standardized set of units to help enforce coding standards on new items, and will bring up lots of uncomfortable balance questions down the line. For now though, this serves as some rough boundaries on how items costs are related, and will make adjusting these values easier going forward. Except for foam darts. I did round up foam darts. Adjusting mineral balance on the macro scale will be as simple as changing the aforementioned mineral defines, where the alternative is a rats nest of magic number defines. ~~No seriously, 11.25 iron for a foam dart are you kidding me what is the POINT WHY NOT JUST MAKE IT 11~~ Items individual numbers have not been adjusted yet, but we can standardize how the conversation can be held and actually GET SOMEWHERE on material balance as opposed to throwing our hands up or ignoring it for another 10 years. |
||
|
|
61a034bcd9 |
Service Borger Upri- Kitchen Upgrades (#74938)
## About The Pull Request I decided that Service Borgs had been left in the dust for too long, and that since they're named 'Service' cyborgs and not 'Bar' cyborgs I'd give them upgrades to let them assist in the kitchen. To do this I've made 4 upgrades. First up, rolling table dock, to provide mobile service. Nothing worse than offering someone a drink in a hallway and having to drag them to the nearest table or having to drop it on the floor. That's poor service. Secondly there's a condiment synthesizer, which can produce solid condiments like flour, cornmeal, salt, coco powder, etc. Thirdly a kitchen toolset, a knife that can switch to a rolling pin. The blade dulls when not used for cooking. Fourthly, A service apparatus, which can pick up food, oven trays, soup pots, plates, bowls and paper. The upgrades are locked behind a new techweb node, Cyborg Upgrades: Service. This node is locked behind the same nodes as the janitorial cyborg upgrade node. And outside the upgrades, I've also given the cyborg a rag so it can finally clean it's glasses and tables. I've also given it a money bag, to store the profits. This gives cyborgs an opportunity to save up for getting on the deluxe shuttle. Or giving people a new target to hold up and shake down for their hard earned money. Please don't law 2 them into giving you their lunch money. Or do. I've also enabled the RSF to print a few more things. Plates, bowls, plastic cutlery and paper cups. I've also enabled borgs to open and close the oven. Alas, they still can't pick up food or the oven trays from the oven, since the oven is sticky in a manner. I've also added a little bit more to the borgshaker, and moved sugar from the borgshaker to the condiment synthesizer. And not only the borgshaker, but the emagged shaker too. The emagged shaker has been given blood and carpotoxin. And you may ask 'Why those two ingredients?' Both can be used like fernet, both for nice things, and harmful things, staying in line with fernet. Blood can be used to mix drinks or be used for food, or for disease, since the borg or anyone with access to milk and water can easily produce virus food. Meanwhile carpotoxin is well, a rather weak toxin but can also be used to make imitation carpmeat. This'l give more reason to also consider the borg for emagging, or giving illegal tech, instead of just speedlining for the nearest engineering borg or medical borg.  The Condiment Synthesizer uses the same UI as the medical hypo, due to it's ingredient list being low in comparison to the shaker  I've been trying to figure out how to get an item to allow the borg to open the cooking menu when used inhand/inmodule. But I can't figure that one out, sadly. Nor how to let the Service Apparatus pick up trays from the oven. So for now, service borgs will have to settle for simply assisting in the kitchen. ## Why It's Good For The Game Allows Service Cyborgs the tools to help in the kitchen, and elsewhere too. ## Changelog 🆑 add: Damp rag and Money bag to service borg add: Service borg upgrades, with accompanying tech web node add: Sprites for kitchen toolset, and service apparatus balance: The RSF can print a few more things, paper cups, seaweed sheets, plates, bowls, plastic cutlery and standard decks of cards. balance: Sugar moved from borgshaker to condiment synthesizer. Berry juice, cherry jelly and vinegar added to borgshaker. balance: Both shaker and synthesizer can also be adjusted to give 1 unit at time, so it goes 5, 10, 20 then 1, and back around. balance: Adds blood and Carpotoxin to the emagged borgshaker. fix: Money bag was missing a description, it now has one. /🆑 |
||
|
|
722f1c7f90 |
Golems can now redeem points from their ORM (#75083)
Golems can now redeem points from their ORM. There's a check for bank job, so only the blank ID cards golems get will work. Miners theoretically can use one of the cards to get points themselves, but then they need to carry that card around and get all points through it, because their starting ID cannot claim it. |
||
|
|
ba24aa3404 |
Ore silo will put machines off its level on hold, instead of disconnecting (#74990)
## About The Pull Request There's a problem where people would try to rebuild a whiteship and use an Ore Silo for it. However, it would automatically unlink everything when moving, because it's checking for z level as soon as it changes z level itself, before the Ore silo has 'moved' as well. ~~To fix this, I'm now only disconnecting ore silos when a shuttle moves. This mostly does the same as before, but technically you can sync an unwrenchable connected machine and bring it to space with you (without using a shuttle) to stay connected, but I don't see this as a problem, and my original point of the PR was to prevent Lavaland ORMs.~~ I decided against this, instead I've made it so machines that aren't on a valid level (either both on the same z level or both on the station level) will be considered 'on-hold', much like if the QM has set it to hold through the silo directly. This means that machines no longer disconnect from the Ore silo on moving, they just can't access the materials in it. This affects gameplay in 2 ways: 1. You no longer need to resync when you bring the machine back 2. It won't unsync itself every time you move station z-level with its silo (such as on a whiteship). I also made disconnecting from an ore silo actually remove them from the ore silo's list of connected machines. ## Why It's Good For The Game Closes https://github.com/tgstation/tgstation/issues/69863 ## Changelog 🆑 balance: Machines (such as ORM and Techfabs) will no longer unsync from Ore silos when it moves Z-level, instead it will prevent materials from being used, as if it was on hold. /🆑 |
||
|
|
5965a156c0 |
You can now move dirt (#75028)
## About The Pull Request Changed the recipe for dirt piles from 3 sandstone bricks to 3 sand. And made the dirt pile drop these 3 sand on deconstruction instead of just disappearing.  Also fixed hydrotrays resetting their water and nutriments on construction. ## Why It's Good For The Game You could accidentally click on the wrong mouse button and loose your dirt pile instead of uprooting a plant. And it didn't make sense why you would need to turn sand into bricks before making a pile out of it. ## Changelog 🆑 qol: Dirt pile is crafted from sand instead of sandstone and drops it on deconstruction fix: You can't have free water and nutriments by rebuilding hydrotray /🆑 |
||
|
|
0d4ec59197 |
Miner Style Points 2: Style on Everyone (#74690)
## About The Pull Request A re-open of https://github.com/tgstation/tgstation/pull/66326 with Fikou's permission Adds the style meter, it can be bought from the mining vendor for 1500 points, it is an attachment to your glasses. The style meter creates a display on your hud, with your recent actions, like attacking enemies, killing them, mining ore etc. Actions like spinning or flipping increase your score multiplier, making you get more points. Your style meter affects how much ore you get from mining rocks. By default with the meter, you get 20% less ore, but at the highest, you can get 1.2x the ore from mining. In addition, on B-tier or above, you can "hotswap" items, by attacking an item in your backpack with one in your hand (should it fit and all that). Also features a leaderboard for highest style point count! New streamable: https://streamable.com/eewi6l The following are sources of points: - Killing things - Killing big things - Killing small things - Punching things - Melee'ing things - Mining rocks and ores - Having matrix traps detonate - Hit, defuse, and detonate gibtonite - Detonate crusher marks - Scan geysers - Parry projectiles (others or your own) Oh, right. While wearing the style meter, you're able to parry any lavaland-based projectile by clicking on it or the tile it is on, which reflects it back in a 7 degree arc, making it 20% faster and 15% more damaging. Usually not very easy. Maybe-plan in the future for some syndicate variant of this (with bullet parrying and appropriate style sources, etc.), but not for this PR Thanks to Arcane, multitooling the style meter will make it play some sounds on rank-up.  https://streamable.com/nheaky Parrying in action ## Why It's Good For The Game Makes miners bring more ore in a fun way. ## Changelog 🆑 Fikou, Zonespace, Arcane for voicing add: The mining vendor now has a style meter. This meter gauges your style points and uses them to improve your ore yield. /🆑 --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> |
||
|
|
71ef04efa0 |
Fire Proof Goliath Cloak (#74954)
## About The Pull Request Right so, I was trying to imagine why goliath cloak isn't fire proof when goliaths can quite literally bathe in lava. So I decided it must be an oversight. So now they're fireproof.  ## Why It's Good For The Game Fireproof mob leather is actually fireproof ## Changelog 🆑 fix: fixed an oversight - Made Goliath Cloak and Goliath Cloak Hood fireproof. And Goliath hide. /🆑 |
||
|
|
a8457b91f3 |
Fixes silo logging + add log file based logging to silo (#74806)
## About The Pull Request Fixes deposit logs not working for the silo because they passed in the mats argument in the wrong format. Also adds log file based logging to the silo with a new log file: silo.log. This log should contain every deposit and withdraw action performed on the silo and from which machine and location inluding material amounts. ## Why It's Good For The Game Fixes broken ingame logs + adds better external logs for potential stat tracking. ## Changelog 🆑 Gamer025 fix: Ingame ore silo logs should now log deposit actions correctly config: New config for silo logs /🆑 |
||
|
|
1125b5a55b |
Let there be (held) light! Adds directional flashlight sprites, and many new inhand icons for various light objects (#74482)
## About The Pull Request <details> <summary>Directional flashlights are here!</summary>  </details> <details> <summary>Has this ever bothered you? The light cone overlay is directional, but not the flashlight itself</summary>  </details> Me too, so I went and made directional sprites for all of the flashlights that have directional lights. These flashlights change their direction when dropped or thrown to match the user doing the dropping. <details> <summary>Shown here</summary>  </details> ### But wait, there's more! --- I also added a number of on/off inhand sprites for _most_ of the holdable existing light sources in the game (sorry, making a tiny banana lamp will have to wait for another time). <details> <summary>Noteworthy ones: animated candles! and flares too</summary>   </details> --- ### Other things You can now light candles with another candle. Why was this not possible?  <details> <summary>More sprite makeovers/additions here</summary> Desk lamp:  The iconic green lamp gets a makeover:  _The_ flashlight:  Syndicate lantern:  Flashdark:  Lantern:  Wisp lantern (both a new inhand and icon sprite):  Seclight:  </details> ## Why It's Good For The Game Better visuals for the game. Handheld lighting objects are probably some of the more commonly used items, and so having sprites that accurately represent them in game is a nice touch. Also did some code refactoring, cleanup/slight optimization tweaks while I was in the flashlight file. Notably candles were needlessly calling update_appearance every process tick. Now they will only do that if they actually need an update (if their wax level changes). ## Changelog 🆑 fix: candles can now be used to light other candles, cigarettes, and anything else that needs lighting in a pinch. fix: flashlights that have directional lights now have directional sprites to match fix: candles can now be snuffed again imageadd: adds new inhand sprites for most flashlights in the game, including animated flares and candles refactor: cleaned up flashlight.dm's unnecessary bits and made some slight improvements /🆑 |
||
|
|
ac5236a251 |
Refactors sheet crafting to better support directional construction (#74572)
## About The Pull Request https://github.com/tgstation/tgstation/blob/0426f7ddbaa91439c7278189101f5db9c7f2ed95/code/game/objects/items/stacks/stack.dm#L449 Ok, but can we not? This PR refactors sheet crafting to generalize all the cases that were previously locked behind grille/window type checks and such. In their stead there are bitflags that can be set to achieve certain behaviors. All the behavior from before should be preserved, but now it can be extended to other items. E.g. if you want a railing that can be crafted underneath directional windows, or an item that behaves like a grille does--it's just a matter of setting the right obj_flags for it now. This makes it very simple and painless to add new recipes that use directional crafting! It's all modular now. <details><summary>Details</summary> --- ### What I've done: -Eliminated all the type checks, instead it will now be handled by object flags and recipe vars, making for a much more configurable system. -Added two new obj_flags: `BLOCKS_CONSTRUCTION_DIR` and `IGNORE_DENSITY`. -Additionally, I renamed the existing flag `NO_BUILD` to `BLOCKS_CONSTRUCTION`. -Changes the proc `valid_window_location` to `valid_build_direction`, and makes it work for things other than windows. -Removed a deprecated `window_checks` var from the stack_recipe datum. -Added three more vars to the stack_recipe datum: `check_direction` and `check_density`, `is_fulltile` -Decoupled `on_solid_ground` from the object density check. Now you can set those separately, allowing you to make recipes that forbid/allow building things over other things while in space. --- ### What the new flags do: `BLOCKS_CONSTRUCTION` works as before---prevents objects from being built on the object. I felt that the previous name was not descriptive enough, you should know exactly what it does just from looking at the name. _example: dna scanner_ `BLOCKS_CONSTRUCTION_DIR` -- setting this on an object will prevent objects from being built on it when their directions are the same. _example: directional windows, windoors, railings_ `IGNORE_DENSITY` -- setting this on an object will cause its density to be ignored when performing the construction density check. This could have other potential uses as well in the future. _example: grilles, directional windows, tables_ These three flags cover all the bases for the types of items that are currently craftable, so there is no more need for any type checking or weird snowflake window checks. Simply set the appropriate flag and it'll work as you would expect. --- ### What the recipe vars do: `check_direction` tells the recipe to check if there's something in that direction with the `BLOCKS_CONSTRUCTION_DIR` flag set. `check_density` tells the recipe to run the density check when set. This is true by default. There are very few items in the game that currently have this set to false--namely grilles. Setting this to false will make it so that the object can be constructed regardless of what is in that tile (unless `one_per_turf` is also set, which will make it so that you can't craft the same thing twice in the same turf). `is_fulltile` is used for fulltile windows, but it doesn't necessarily have to be--you can give this to any recipe and it will adopt the same properties as that of the fulltile window. Basically they have a special case where they shouldn't be able to be built over directional constructions, where normally things would be able to be. Setting this makes check_direction true as well. --- ### In summary: Sheet crafting still works just as it did before. But the backend of it has gotten a glow up and will be able to more easily support new behaviors. </details> ## Why It's Good For The Game This makes the crafting system much more flexible to add recipes to, and will prevent bad code practices of stacking more conditionals down the line whenever someone wants to add an item that behaves like grilles or directional windows in how they are constructed. It had to be done. Those window checks were a mess. ## Changelog 🆑 qol: added fifty stack versions of remaining glass sheet stacks for ease of debugging refactor: refactored sheet crafting to better support directional constructions that aren't windows /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
4b28abfd4d |
Adjustable Goliath Cloaks (#74709)
## About The Pull Request I've enabled goliath cloaks to be alt clicked to adjust it to neck slot instead of over clothing slot. While adjusted to neck slot, it has no armor values for balance purposes, while in over clothing slot, it has the same armor values as usual. The hood has the same values as usual, as it still inhabits the same slot as usual.    ## Why It's Good For The Game It enables a cloak to function like a cloak. It gives people the option to use it not for armor, but for fashion. ## Changelog 🆑 add: Goliath cloak can be worn as a cloak that doesn't provide any armor benefits /🆑 |
||
|
|
b1716732b0 |
The North Star Expeditionary Vessel - A Second Wind (#74371)
## About The Pull Request A new map for TGstation, in the works! It has 4 fucking Z levels, a massive expansive maintenance with unique designs, and some unique code features in the works. To Do: - [x] Update the Map to Modern TG - [x] Local Tests - [x] Work on Map Optimizations - [x] Run Live Tests Fikou has greatly helped with creating an important flavour aspect of this map, Trek Uniforms on anyone who joins! See the forum thread for more. This includes the framework for innate station traits, station traits loaded as long as it's in a map's json Here's the forum dev thread there are screenshots there. https://tgstation13.org/phpBB/viewtopic.php?p=657252#p657252 ### Mapping March Ckey to receive rewards: Cheshify ## Why It's Good For The Game So, this is the North Star. An effort taking multiple mappers and of 9~ months of hard work. This map was not initially designed for TGstation, but always designed for TGstation code. The process of retooling the map for TGstation was an absolute joy and I feel like the map definitely has it's niche as a massive and unique experience for it's players. I adore this map, it's gorgeous, has a unique aesthetic, and a number of very funny interactions with multi-Z. The PR comes packed with unique mechanics for future mappers (innate station traits!), a number of map-fitting shuttles, and a fun spacefaring uniform gimmick for the crew. **This is my second attempt at bringing this map into rotation. It was initially closed due to concerns about maptick and performance, as I wasn't willing to push for a map to be added to the repository if it didn't function to my own standards. I've been informed by a number of coders far better than I that optimizations are arriving and enroute, so I think it's time to dust her off and set sail for another journey.** **Quick Disclaimer: Due to some design decisions disagreed upon by the headcoder team and myself, the map will not be featuring unique roundstart uniforms, and despite my design intentions, the innate station trait features will be shelved for now.** ## Changelog 🆑 Cheshify, Fikou, Blue-Berry, Zytolg, InfiniteGalaxies, Striders, Sylphet, Riggle, Soal, Andry, Crit, Deranging, and Pumpkin0. add: Nanotrasen's Newest Exploratory Vessel is now available! Meet the North Star! add: More landmines, and a landmine random spawner. add: energy barriers now have a regenerative subtype, fit for permanent installations. code: Raised the number of possible level render to 4, check your preferences if needed to be reduced. /🆑 --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> |
||
|
|
0800509b2b |
New Crate Visuals (#74636)
## About The Pull Request Adds several new crate visuals. Adds a new lid overlay for several crates. Re-names and re-designs bubblegum chest.   ## Why It's Good For The Game New crate visuals and lids not magically disappearing is cool. ## Changelog 🆑 add: New Lids for several crates. imageadd: Several new Crate Visuals. /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
4c48966ff8 |
Renames delta time to be a more obvious name (#74654)
This tracks the seconds per tick of a subsystem, however note that it is not completely accurate, as subsystems can be delayed, however it's useful to have this number as a multiplier or ratio, so that if in future someone changes the subsystem wait time code correctly adjusts how fast it applies effects regexes used git grep --files-with-matches --name-only 'DT_PROB' | xargs -l sed -i 's/DT_PROB/SPT_PROB/g' git grep --files-with-matches --name-only 'delta_time' | xargs -l sed -i 's/delta_time/seconds_per_tick/g' |