Commit Graph

63 Commits

Author SHA1 Message Date
Alexis 21b4095dfd [MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026

fixes https://github.com/Bubberstation/Bubberstation/issues/5549

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: rageguy505 <54517726+rageguy505@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Aliceee2ch <160794176+Aliceee2ch@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: Maxipat <108554989+Maxipat112@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com>
Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com>
Co-authored-by: loganuk <fakeemail123@aol.com>
Co-authored-by: Leland Kemble <70413276+lelandkemble@users.noreply.github.com>
Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: siliconOpossum <138069572+siliconOpossum@users.noreply.github.com>
Co-authored-by: Isratosh <Isratosh@hotmail.com>
Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com>
Co-authored-by: Neocloudy <88008002+Neocloudy@users.noreply.github.com>
Co-authored-by: Alexander V. <volas@ya.ru>
Co-authored-by: ElGitificador <168473461+ElGitificador@users.noreply.github.com>
Co-authored-by: Twaticus <46540570+Twaticus@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Layzu666 <121319428+Layzu666@users.noreply.github.com>
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com>
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: John F. Kennedy <54908920+MacaroniCritter@users.noreply.github.com>
Co-authored-by: Cursor <102828457+theselfish@users.noreply.github.com>
Co-authored-by: Josh <josh.adam.powell@gmail.com>
Co-authored-by: Josh Powell <josh.powell@softwire.com>
Co-authored-by: Yobrocharlie <Charliemiller5617@gmail.com>
Co-authored-by: Hardly3D <66234359+Hardly3D@users.noreply.github.com>
Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com>
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
2026-05-16 00:56:00 +02:00
arbuzik456 ac41c111f6 Mech equipment buttons DLC (#93664)
## About The Pull Request

Adds equipment action buttons for cargo module and fire extinguisher

YOU can access YOUR mech cargo module without using mech UI screen

simply press left click to unload first item OR right click to select
item to unload(comes in dat radial menu thing)
<img width="300" height="259" alt="riplaey"
src="https://github.com/user-attachments/assets/4469bfb9-ec64-4e71-b774-4b5e8aa964ce"
/>
also works for fatty if ANYONE cares about him
<img width="272" height="234" alt="fatty"
src="https://github.com/user-attachments/assets/ff6cf41a-ab7a-48fa-b490-8ce98448b647"
/>

My baby boy fire extinguisher mech module was untouched by original mech
action buttons PR so i had to do him right

left click to spluff, right click to refill

Also made so fire extinguisher now goes on all mechs because its more
usefull in combat scenario than for firefighting (3x3 slips??? yes
please!!!)

## Why It's Good For The Game

more action buttons bloat on screen less use of clanky UI

## Changelog
🆑
add: Added UI buttons for mech cargo module, left click to dispose first
item in the list and right click to select an item to drop.
add: Added UI button for mech fire extinguisher, left click to splash
and right click to refill.
balance: Mech fire extinguisher module now goes on any mech, combat
slips with a press of a button!
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-11-01 13:37:42 +01:00
SmArtKar a0464ce370 Fixes blood drunk miner's dash and some mecha actions not working (#92772)
## About The Pull Request

#92354 missed a few uses of Trigger, so blood drunk was missing the
clicker arg and some mecha actions didn't account for the change.

## Changelog
🆑
fix: Fixed blood drunk miner's dash and some mecha actions not working
/🆑
2025-09-04 22:59:34 -04:00
Arturlang 0bc42d6940 Fixes the issue of usr pointing to admins by making Trigger pass down clicker (#92354)
## About The Pull Request
Fixes the issue of usr pointing to admins by making Trigger pass down
clicker, as usr is fucky and can be passed down by other unrelated
procs. Fun.
Added the clicker arg to all usages of Trigger as well
Also changes isobserver check in antagonist ui_act code that prevents
observers from clicking UI's instead to check if the ui.user is
owner.current
## Why It's Good For The Game
Fixes admins giving heretic to people opening the heretic UI for the
admin instead
2025-08-05 22:58:40 -05:00
Fikou 92cf3871a8 Makes mech removal crowbar remove mech sleeper patients (#92281) 2025-07-26 07:26:09 +02:00
MrMelbert 7ba7629968 Literally just slows the Paddy down by 2.5x (#91463)
## About The Pull Request

Paddy slow_pressure_step_in from 2 -> 5
Paddy fast_pressure_step_in from 1.5 -> 3

This makes them decently slower than a human, unless they can tag them
with disabler shots first.

## Why It's Good For The Game

I think It's deeply, deeply unhealthy that we give security a tool at
round start that's faster and more oppressive than a security officer.

Antagonists essentially have to plan their entire round around the fact
that they will be run down the moment they pop their head out.

It's incredibly punishing to antags that try to focus on stealth,
because you generally won't have the tools to combat it, and running is
not an option. If your plan falls through, it's over

It's incredibly punishing to antags that don't have access to an EMP,
because it outpaces you if you fight, and it outpaces you if you flight.
If you get tagged, it's over

It's even punishing to antags that DO have an emp or a mech counter - a
traitor has to dedicate 5% of their TC on buying an EMP implant, a
wizard will have to dedicate 20% of their spell points to disable tech,
a heretic isn't allowed to pick anything but rust

And if you don't want to buy an EMP, well, we made EMPs harder to make a
few years back in #73081

TL;DR this thing's speed makes it too oppressive as a roundstart tool,
forcing all antags to play around it, and it's not very fun. Slowing it
down aims to refocus it from "a tool which is capable of running down
literally every antag, including Dragons and Xenos" to "a tool security
can use to lock down an area, such as during a riot"

(Yes other mechas are faster, but they're not available roundstart and
robotics is useless half the time, so they're considerably less
problematic)

## Changelog

🆑 Melbert
balance: Paddy is 2.5x slower
/🆑
2025-06-07 11:07:06 -06:00
necromanceranne 5a3d6881ec Completely strips silicon control options out of open cage mechs (except mech domination). Adds flags to handle granular control restrictions and beacon limitations. (#91118)
## About The Pull Request

Open cabin mechs cannot be piloted by silicon pilots. MMI's, uploaded
AI's, positronics or AI control beacons. The mechs can still be tracker
beaconed. It can also be dominated via the malfunctioning AI power.

Adds some flags to help flag which mechs can or cannot be beaconed, or
which are silicon compatible.

## Why It's Good For The Game

I'm not going to lie. I do feel a bit pressured on this change in
particular. This is somewhat meant to be an intended feature.

But I think the cats out of the bag on open cabin mechs and the ways to
circumvent their downsides. And the more I think about it, the more I
come to realize that I frankly haven't had many, if any, good
interactions with a posibrain/MMI mech army. So making that more
efficient is...a problem.

Using a silicon-based pilot can help you evade the potential
consequences of being a flesh and bone pilot inside of a steel mesh
cabin and being shot repeatedly. So you may as well, in those instances,
treat it as a sealed cabin mech. And these mechs are surprisingly pretty
strong statistically. Especially the Paddy with its ability to equip
actual lethal weaponry.

They're cheap, can be mass produced, come out early, and durable. The
only limitation is pilots, and if you're printing positronics and get
ghosts for those positronics, you can usually just keep producing more.

From a purely objective standpoint, there isn't much reason to not push
out posi-paddys over any other mech. Rather than settle for a perfect
answer, let's at least require some human pilots in these mechs so that
their supposed downside is more of an Achilles heel.

## Changelog
🆑
balance: Caged mechs cannot accept silicon pilots. AI uploaded pilots,
AI control beacons, MMIs or positronics. Malfunctioning AIs can still
dominate these mechs.
code: Allows for a higher degree of granularity for what mechs can and
cannot accept by including additoinal mecha flags to block beacon type
installations, pilot uploads and so on.
/🆑
2025-06-01 13:07:21 -07:00
MrMelbert 541c352a74 Mecha cargo holds no longer shove themselves inside themselves when being deleted (#90626) 2025-04-16 09:38:53 +02:00
ArcaneMusic fbbddbb012 Revises and adds several new bounties for assistants, roboticists, and medical doctors. (#89772)
## About The Pull Request

This pull request makes several balance adjustments to older bounties,
primarily for the roboticist and assistant. Additionally, this adds a
new type of medical doctor bounty as well.

### Bounty Modifications:

**Assistant**: Toolbox bounty
The toolbox bounty now requests 1 toolbox instead of 6. However, the
toolbox bounty now requires a fully packed mechanical toolbox worth of
contents. That means any toolbox, containing a screwdriver, wrench,
welding tool, crowbar, analyzer, and wire cutters. When shipped,
non-toolbox contents are dropped.

Why It's Good For The Game (**WIGFTG**):
This bounty follows bad design principles, being a bounty that can be
solved entirely from a lathe. For any of these cases, we want to either
replace them or recontexualize them into an activity that forces players
to either learn more about the mechanics in and around that area as a
form of played tutorial, give them a toe-dip into the mechanics required
to complete the activity, or perform an activity that makes the station
better for having completed it.

For the toolbox bounty, this goes all in on teaching players about the
full set of toolbox equipment, instead of just needing one printable
item, it takes them through the full autolathe menu and gives them
plausible deniability for getting a full set of tools.

**Assistant:** Potted Plants.
The potted plant bounty now requires 3 potted plants as opposed to 8.
Most stations are going to be completely devoid of potted plants after
collecting 8 of these, where lowering the quantity to 3 allows for a
larger amount of competition for this type of bounty. This also
disallows using plastic potted plants from being used in the bounty as a
trade off, as real potted plants are available through other means.

**WIGFTG**: Removes a lathe-solved bounty, and adjusts the quantity to
compensate for the fact that previously you would loot the entire
station of all of it's potted plants in order to complete this bounty
one time.

**Assistant:** Action Figures -> Toys
Action figures and their general availability widely varies by maps. At
best, you can snag one per office on (I think) delta, and at worse
you'll need to fish them out of arcade machines across the station.
Considering how often new toys are added to the vending machine, this
can be a very raw deal where you might be spending 10s of minutes just
for maybe one or two action figures. Instead, it feels like a wider and
better solution is to just make this touch the whole toys category.

WIGFTG: For the toys bounty, it's far too scarce to complete regularly,
but instead now it gives makes players interact with the arcade machine
wholistically, which in turn requires players to have to play an arcade
machine just enough that they're likely to gains a level in the gamer
skill, and serve as a primer to interact with how skills interact with
the round at large. Granted, it's the gamer skill, so it's not the end
of the world if players are getting skill increases here as opposed to
other skills that may have more of an effect on the round at large.

**Assistant:** Pens.
Fuck this bounty. I have removed it. 

**WIGFTG**:
Allow me to elaborate.
So the pens bounty requires 10 pens. However, it requires specifically
`/obj/item/pen`, no subtypes. `/obj/item/pen` is not printable. It is
not found at quantities that make it easy to specifically complete. You
cannot use red pens. Or fountain pens. Or blue pens. Or Crayons. Just
standard black pens that spawn in your PDA and on paper bins. And you
need 10. There is **A** printable pen, however,
`/obj/item/pen/red/security`, which is however printable from
autolathes, leading many players and myself to think that this is
another easy printable bounty. But EVEN THEN, even if those pens WERE
ACCEPTABLE, having to manually carry 10 tiny objects to complete a
bounty worth not even 200 credits to the bounty holder? This just sucks.
It's Bleem. Get it outta here.


**Robotics**: All current mech bounties (MK 2 Ripley, Clarke, Odysseus,
Gygax, and Durand)
Robotics bounties have been reworked. Now, mecha bounties require that a
new mecha of that type be built, and that a holodiagnostic scan be
completed of the mech. This can be done once-per mech, which will print
out a holodiagnostic sheet onto the floor. This sheet is what is turned
in for the bounty. As a result, the value of these bounties have been
roughly halved. For those looking to collect the rest of the previous
value, all 5 of these mechs can now be sold on the cargo shuttle for the
remaining value of the old bounties.

**WIGFTG**: The biggest hurdle for roboticists when it comes to economy
is twofold: Roboticist need resources far more than most other jobs in
the game. No metal means no cyborgs, or mechs, or cool equipment for
robotics. But, if a roboticist needs credits, they have to trade away a
new mech in exchange for some of the largest credit pool bounties in the
game. If they can't spend those credits, or can't receive anything using
those credits, that's effort wasted.

There's a tremendous amount of uncertainty when it comes to robotics
being able to meaningfully interact with the credit economy as it
currently stands, or being able to leverage the credit economy to solve
any of their issues. If the player really does just want to sell their
mech for credits, this also provides them with a method of doing so that
will still reward them even further if they feel they truly do not need
it. Side note, the cargo loader mech "old bess" has the trait provided
by generating a diagnostic already, preventing them from just scanning
that for an easy minute 1 bounty.

Ultimately, having to sell a mech for credits as opposed to getting to
use it is not *fun*. Getting to get paid for doing your job, and getting
the benefits of something you'll have spend a reasonable amount of time
and the station's resources on is *fun*. It's a better pay off. It's why
we're here.


![image](https://github.com/user-attachments/assets/d372a338-14dc-49a3-8279-4cb379c13c10)


**Medical:** Crew Scan Bounties.
Medical staff are now given the chance to perform routine medical scan
bounties. These require a medical doctor to scan another crew member who
is above 90% health, and then print the reports to submit. Some
stipulations:
* The report cannot be of the bounty holder.
* A scanned crewmate must be scanned above 90% heath. 
* When the report is printed, the target is given a trait for 5 minutes,
`TRAIT_RECENTLY_TREATED`, which disqualifies them being the target of a
submitted medical report. This is to encourage the doctor to check up on
several members of the crew when submitting this bounty.

**WIGFTG**:
Medical bounties are in an awkward place, honestly. They are possible to
become purely printable bounties using either advanced organs, or
through the organ grower. However, both of these outcomes are research
locked, and will require a more through look down the line, don't get me
wrong. In the meantime, this falls squarely under that area of "getting
medical doctor bounties to be more closely aligned with doing what
they're already supposed to be doing".

I also floated the idea of making medical bounties pick a random
crewmate for a check-up as opposed to a few different members of the
crew from anyone. I might follow up on that at a later date, but this PR
was already getting a bit overloaded.


![image](https://github.com/user-attachments/assets/63ab2a4f-1eab-410b-9b37-c9299199191b)


### Some other things tacked on here:
I swear I'll be fast.

The `/obj/item/paper/medical_report` created is a new subtype of paper
as opposed to the old type that was used by health analyzers, which
holds the last scanned mob as a weakref as opposed to just creating a
snowflaked paper as we were doing before.

The bounty pad, when it generates it's list of bounties, now works
slightly differently so that there's no chance of getting a list of
three "random" bounties that are all exactly the same thing, called in a
new proc, `generate_bounty_list()`.

I've added a new debug item, called the `/obj/item/bounty_voucher`. This
item allows you to use it in-hand and it gives the activating player a
new bounty from a list of all possible bounties. This makes my life,
just specifically just me and nobody else, easier when testing bounties.

As mentioned above, the mecha UI required adding a new button to it in
order to create holoscans. It's fairly innocuous if I do say so myself,
but I can make further tweaks if it's an issue.

## Why It's Good For The Game

I've sprinkled a good bit of this in above, but in general, bounties
needed some more TLC to make sure they align with their place as a
tertiary source of making money in the game. I've talked about this
before in some now-ancient design documents, but in summary, there's
three forms of credit sources in the game:

* Primary sources: This is regular payroll, earned by playing the game
when the economy SS fires. In theory, this is how much money you can
spend without needing to think about making a purchase most of the time.
* Secondary sources: This is from sources like tourist bots. Ignore the
design decisions they inhabit, they're gameplay loops that allow you to
make additional credits while still performing the functions of your job
for the station, which in tourist bot's case, is making food and drinks
and serving people, making up for any costs incurred by their presence.
* Tertiary sources: This is bounties. These are activities that exist as
a fallback from the secondary sources, where you may not be performing
the duties of your job in order to get credits, should they be more
critical as a resource than the service you provide to the station as a
result.

...Everyone has been fairly clear that doing bounties is not very good.
If you're playing medical doctor and want a shiny medical doctor thing,
you would hope that the majority of your time is spent still playing
medical doctor, or scientist, or whatever. However, of all the jobs that
have fairly sub-par bounties, the one job that I've heard time and again
that I actually got *right* was surprisingly, security officer. Their
sets of bounties, (Which aren't just looting the locker room mind
you...) between the contraband bounty and the n-spect scanner bounties,
actually encourages players to basically do tasks that are already part
of their job obligations, without needing to run to the nearest lathe or
to _steal 8 boar tusks that drop from the barrens_. The bounties are
basically, "Go on patrol to this area", "look for suspicious items on
the station", etc.

In effect, those are *secondary credit sources*. Which is fantastic! It
gave me the idea to revisit a few of these job bounties to try and make
them a bit less exhausting to have to deal with, and as usual I got a
bit distracted and the scope got a bit too big and now it's march. God
damnit.

But yeah if this goes well, I'd love to see about adjust a few of the
bounty methodologies to be in-line with the changes I've implemented
here. More bounties that encourage players to be doing what they're
already doing, bounties that encourage players to learn more about the
game when it comes to assistant bounties or that encourage them to get a
toe-dip report on mechanics that they may not be introduced to yet, and
get rid of some of the CBT bounties that nobody in their god damn mind
wants to do.

## Changelog

🆑
add: New Medical bounty! Scan crewmates who have been healed or
currently have a clean bill of health, and ship the medical report to
prove that you're not accidently letting them die on your watch. Most of
the time.
balance: Assistant bounties for toolboxes now only require 1, but the
toolbox must be fully stocked like standard mechanical toolboxes.
balance: Potted plant bounties no longer accept plastic plants. They
only require 3 plants now, however.
balance: The action figure bounty now only requires toys instead.
del: Removed the pens bounty.
balance: The robotics mech bounty now requires a diagnostic scan of a
newly completed mech as opposed to sending the whole mech itself.
Diagnostic scans can now be generated by riding in a mech and completing
the action from the UI menu. Mech bounties are worth about half as much.
add: Mechs can be sold on the cargo shuttle for the remaining half of
the value from previous mech bounties.
fix: You can now no longer roll duplicates of the same bounties when
generating a new bounty from the civilian bounty console.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2025-04-05 16:53:02 +02:00
necromanceranne 4f2ff57090 The Big Bess ripley now uses the correct sprite while piloted by an AI. (#89148) 2025-01-21 19:21:22 +01:00
Y0SH1M4S73R 7fe8f29fdb Corpses with clients in them can no longer perform mech actions (#88959)
## About The Pull Request

Turns out most mech actions only cared about the person attempting to
use them being inside the mech, without checking for things such as the
mob being alive. This fixes that, but required a slight refactoring to
the `ui_status` proc of mechs to account for the three fundamentally
different types of mobs that can pilot a mech.

## Why It's Good For The Game

Fixes #88933

## Changelog

🆑
fix: Corpses at the pilot seat of mechs can no longer toggle the lights,
safeties, cabin sealing, strafing, overclocking, or durand shields, nor
can they rename the mech or configure its equipment.
/🆑
2025-01-14 15:50:03 +01:00
SmArtKar 0d1ccc2273 Fixes a potential harddel in Ripley code (#88101)
## About The Pull Request

Ejector didn't clean its ref in parent ripley before deleting itself
which could cause harddels if it didn't delete fast enough (as seen
during round 243009)

## Changelog
🆑
fix: Fixed a potential harddel in Ripley code
/🆑
2024-11-23 13:33:47 +01:00
EnterTheJake 15247f28f1 Arcmines The Clarke Exosuit + Tech node changes. (#87936)
## About The Pull Request

The Clarke Exosuit has received several adjustments to make it worth
using in the Arcmining era.

- Clarke no longer requires gold bars to be built.

- HP bumped from 200 to 250, melee armor bumped from 20 to 40.

- Clarke Ore storage module can now collect boulders and smelt them
internally.

- Exo mining scanners can now be used in proximity to a vent to start
the wave defense event.

- Mech Pkas now do more damage  and have the AOE upgrade preinstalled.

- Mech drills are now a utility module rather than a weapon.

- New Internal module unique to the Clarke, It's a rusty sleeper that
can be used to recover dead miners, but lacks the ability to inject
chems

- Fixed Mech sleepers not granting life support.

- Plasma cutters and Bluespace satchels tech nodes are no longer locked
behind experiments, but they are now discounted by them.

## Why It's Good For The Game

Ever since the inception of Arcmining, the Clarke Exosuit has fallen
from being niche to straight up irrelevant.

The Clarke sits in this weird spot, where, while not being roundstart
available, it is an effectively worse fit than your regular Shaft Miner
in all aspects of the job.

This PR aims to address this by making The Clarke able to be built even
if the miners are absent or haven't secured a haul, while making it
actually capable of interacting with the new elements introduced by
Arcmining.

**Arcmining Clarke and Improved Combat functionality**

The Mech mining scanner can now be used to trigger the vent wave
defense, The internal storage module can now collect boulders and
internally smelt them within the Clarke.

Video Demonstration: https://www.youtube.com/watch?v=gtsNK5JbI3o

The Clarke is now a more capable fighter on Lavaland, being a bit
beefier overall.

The mech Pka was also in dire need of some love. It being unable to be
upgraded made it frankly underwhelming at dealing with Vent defences.

I was considering just having PkA upgrades applicable to the mech itself
but ultimately decided against it in fear of having it become a problem
on the station.

Instead, I just went for a flat damage increase and have the AOE upgrade
come preinstalled to better deal with legion swarms.

Lastly The drill modules have been reworked to be utility modules
instead of weapons.

Frankly these shouldn't be weapons, they are nowhere near as valuable as
the cutter or the PKA and can't be used at all on moving targets due to
the long cost time.

**New Clarke Exclusive Internal Module: Mining Sleeper**


![image](https://github.com/user-attachments/assets/bf807ec7-57e0-4caf-a2ac-bbd70ccc44c0)


Just a bit of extra functionality to aid miners that have tragically
fallen, this sleeper is effectively a worse version of the Odysseus, it
can stabilize patients but cannot inject chems, I also fixed an issue
where Mech sleepers were not putting patients on life support like
regular sleepers do.

**Tech Node Changes**

This is not something super related to the Clarke in and on itself, but
I figured I might push my luck and try these anyway.

There is just no good reason as to why satchels and cutters should be
hard locked behind gas shells.

These experiments are fairly trivial, but have a huge impact on lowpop
as they usually force people to break into ordinance or the teleporter
room just so miners could get their basic tools.

The shells still exist but now grant a discount instead of hardlocking
tech, so there's still an incentive to do them.

ROCK AND STONE!

## Changelog

🆑
add: New internal sleeper module for the Clarke.
balance: Clarke Integrity has been bumped from 200 to 250 HP, melee
armor bumped from 20 to 40.
balance: Exo mining module can now be used to scan vents and begin the
wave defense event.
balance: The Clarke Ore Storage Module can now collect boulders and
internally smelt them.
balance: Mech Pka is now bundled within the Clarke tech node, it now
does more damage and comes with the AOE upgrade preinstalled.
balance: Exo mining drills are now a utility module rather than a
weapon.
balance: Applied Bluespace Research and Controlled Plasma tech nodes are
no longer hardlocked behind surveys, they instead favor from a discount
if they are completed.
fix: Fixes Exo Mech modules not granting life support to housed
patients.
/🆑

---------

Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-11-17 13:51:18 +00:00
grungussuss 58501dce77 Reorganizes the sound folder (#86726)
## About The Pull Request

<details>

- renamed ai folder to announcer

-- announcer --
- moved vox_fem to announcer
- moved approachingTG to announcer

- separated the ambience folder into ambience and instrumental
-- ambience --

- created holy folder moved all related sounds there
- created engineering folder and moved all related sounds there
- created security folder and moved ambidet there
- created general folder and moved ambigen there
- created icemoon folder and moved all icebox-related ambience there
- created medical folder and moved all medbay-related ambi there
- created ruin folder and moves all ruins ambi there
- created beach folder and moved seag and shore there
- created lavaland folder and moved related ambi there
- created aurora_caelus folder and placed its ambi there
- created misc folder and moved the rest of the files that don't have a
specific category into it

-- instrumental --

- moved traitor folder here
- created lobby_music folder and placed our songs there (title0 not used
anywhere? - server-side modification?)

-- items --

- moved secdeath to hailer
- moved surgery to handling

-- effects --

- moved chemistry into effects
- moved hallucinations into effects
- moved health into effects
- moved magic into effects

-- vehicles --

- moved mecha into vehicles


created mobs folder

-- mobs --

- moved creatures folder into mobs
- moved voice into mobs

renamed creatures to non-humanoids
renamed voice to humanoids

-- non-humanoids--

created cyborg folder
created hiss folder
moved harmalarm.ogg to cyborg

-- humanoids --




-- misc --

moved ghostwhisper to misc
moved insane_low_laugh to misc

I give up trying to document this.

</details>

- [X] ambience
- [x] announcer
- [x] effects
- [X] instrumental
- [x] items
- [x] machines
- [x] misc 
- [X] mobs
- [X] runtime
- [X] vehicles

- [ ] attributions

## Why It's Good For The Game

This folder is so disorganized that it's vomit inducing, will make it
easier to find and add new sounds, providng a minor structure to the
sound folder.

## Changelog
🆑 grungussuss
refactor: the sound folder in the source code has been reorganized,
please report any oddities with sounds playing or not playing
server: lobby music has been repathed to sound/music/lobby_music
/🆑
2024-09-23 22:24:50 -07:00
Ghom 83e1a58529 [NO GBP] Fixing Clarke's ore box the proper way (#85954)
## About The Pull Request
#85924 did it in a bad way, but I was too hasty and merged it anyway, so
it's on my shoulders to rectify that.

## Why It's Good For The Game
Code guidelines compliance.

## Changelog
N/A
2024-08-21 15:28:02 +01:00
John Willard 1880003270 Reworks silicon/ai access checking & fixes some ui_act's (#84964)
## About The Pull Request

Currently to check for Silicon access, we do:
``if is silicon or is admin ghost or has unlimited silicon privileges or
has machine remote in hand``
What has unlimited silicon privileges? Bots, Drones, and admin ghosts.
To check for AI access, it just checks for AI instead of silicon, and
doesnt check for unlimited silicon privileges.

This was kinda silly, so I thought I should make this a little easier to
understand.
Now all silicon/ai traits come from ``AI_ACCESS_TRAIT`` or
``SILICON_ACCESS_TRAIT``. I made a single exception to keep Admin ghost,
since now instead of being a var on the client, we moved it to using the
same trait but giving it to the client instead, but since we have to
keep parity with previous functionality (admins can spawn in and not
have this on, it only works while as a ghost), I kept previous checks as
well.

No more type checks, removes a silly var on the mob level and another on
the client.

Now while I was doing this, I found a lot of tgui's ``ui_act`` still
uses ``usr`` and the wrong args, so I fixed those wherever I saw them,
and used a mass replace for the args.

Other changes:

- machinery's ``ui_act`` from
https://github.com/tgstation/tgstation/pull/81250 had ``isAI`` replaced
with ``HAS_AI_ACCESS``, this has been reverted. Machine wands and admin
ghosts no longer get kicked off things not on cameras. This was my
fault, I overlooked this when adding Human AI.
- Human AI's wand gives AI control as long as it's in your hand, you can
swap to your offhand. I hope this doesn't end up going horribly,
otherwise I'll revert this part. It should let human AIs not have their
UI closed on them when swapping to eat food or use their door wand or
whatnot.
- Bots previously had special checks to scan reagents and be
unobservant, I replaced this with giving them the trait. I also fixed an
instance of unobservant not being used, so now statues don't affect the
basic creature, whatever that is.

## Why It's Good For The Game

This is an easier to understand way of handling silicon access and makes
these mobs more consistent between eachother.
Other than what I've mentioned above, this should have no impact on
gameplay itself.

## Changelog

🆑
fix: Statues don't count as eyes to creatures.
fix: Human AIs and Admin ghosts no longer get kicked off of machines
that aren't on cameranets.
/🆑
2024-08-19 10:43:45 +00:00
TwistedCicrularConvexLens 886d1aecbb Fixes Clarke ore box breaking upon collecting boulders (#85924)
## About The Pull Request

Ever since Clarkes could pick up boulders they've been broken if you
ever collected one. The UI would break and all your precious minerals
would be trapped inside the Clarke, only being obtainable if you broke
the Clarke itself.

This also updates the Clarke Storage to differentiate by ore name rather
than icon, as otherwise the lower quality boulders would be mixed with
normal boulders with no way to differentiate them in the UI.


## Why It's Good For The Game

Fixes https://github.com/tgstation/tgstation/issues/84364
Before:
<details>
  <summary>Before</summary> 


https://github.com/user-attachments/assets/f90daf35-733a-42bd-8af5-7e6712f09fba

</details>
<details>
<summary>After</summary> 


https://github.com/user-attachments/assets/4510803c-6dee-403e-a051-966a8a66c17c



</details>


## Changelog

🆑 TwistedSilicon
fix: Clarkes will no longer become unable to dump ores upon picking a
boulder up. Mine away.
/🆑
2024-08-18 15:36:14 +02:00
Watermelon914 0db2a23faf Adds a new power storage type: The Megacell. Drastically reduces power cell consumption/storage. [MDB Ignore] (#84079)
## About The Pull Request
As the title says. A standard power cell now only stores 10 KJ and
drains power similar to how it did before the refactor to all power
appliances.

The new standard megacell stock part stores 1 MJ (what cells store right
now). APCs and SMESs have had their power cells replaced with these
megacell stock parts instead. Megacells can only be used in APCs and
SMESs. It shouldn't be possible to use megacells in any typical
appliance.

This shouldn't change anything about how much 'use' you can get out of a
power cell in regular practice. Most should operate the same and you
should still get the same amount of shots out of a laser gun, and we can
look at expanding what can be switched over to megacells, e.g. if we
want mechs to require significantly more power than a typical appliance.

Thanks to Meyhazah for the megacell icon sprites.

## Why It's Good For The Game
Power cell consumption is way too high ever since the power appliance
refactor that converted most things to be in joules. It's a bit
ridiculous for most of our machinery to drain the station's power supply
this early on.

The reason it's like this is because regular appliances (laser guns,
borgs, lights) all have a cell type that is identical to the APC/SMES
cell type. And it means that if we want to provide an easy way to charge
these appliances without making it easy to charge APCs/SMESs through a
power bug exploit, we need to introduce a new cell type to differentiate
between what supplies power and regular appliances that use power. This
is primarily what the megacell stock part does.

This moves us back to what it was originally like before the power
refactor, where recharging power cells wouldn't drain an exorbitant
amount of energy. However, it maintains the goal of the original
refactor which was to prevent people from cheesing power generation to
produce an infinite amount of power, as the power that APCs and SMESs
operate at is drastically different from the power that a regular
appliance uses.

## Changelog
🆑 Watermelon, Mayhazah
balance: Drastically reduces the power consumption and max charge of
power cells
balance: Added a new stock part called the battery, used primarily in
the construction of APCs and SMESs.
add: Suiciding with a cell/battery will shock you and potentially dust
you/shock the people around you if the charge is great enough.
/🆑

---------

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com>
2024-06-25 00:32:19 +00:00
Jacquerel 0850748efa Large monsters break out of the Paddy very quickly (#83406)
## About The Pull Request

Fixes #83292 by making mobs larger than Humans break out of the mech
jail cell 10x faster than humans.
Also I made the error output into balloon alerts.

## Why It's Good For The Game

This is a security mech designed for interacting with crew; it doesn't
_need_ the ability to arrest alien queens or space dragons and we didn't
really design any of these antagonists with the idea that you can stuff
them inside a mech that looks smaller than they are.

Resultingly; now they don't stay stuck in it for very long if you are
not paying attention.

## Changelog

🆑
balance: Mobs significantly larger than humans, such as Space Dragons
and Xenomorph Queens, breakout of being arrested by a mech significantly
faster.
/🆑
2024-05-27 12:12:24 -07:00
Pickle-Coding 22f5ab3cc8 Cargo ripley starts at full charge. (#83287)
## About The Pull Request
Cargo ripley starts at 100% charge instead of 25% charge.
## Why It's Good For The Game
Because charging a cell actually requires a significant amount of energy
now, the roundstart ripley starting almost uncharged causes quite a
significant roundstart load since it's next to the recharger. This makes
it start fully charged so the roundstart power rush is less extreme.
## Changelog
🆑
balance: Cargo ripley's cell starts fully charged.
/🆑
2024-05-19 22:01:48 -07:00
Jeremiah 1443ef79d3 Replaces a number of deciseconds into SECONDS (#82436)
## About The Pull Request
Using these search regexes:

Number ending in 0:
`do_after\((\w+), (\d+)0,`
Replace:
`do_after($1, $2 SECONDS,`

Single digit number:
`do_after\((\w+), [1-9],`
replace:
`do_after($1, 0.$2 SECONDS,`

Double:
`do_after\((\w+), (\d)([1-9]),`
Replace:
`do_after($1, $2.$3 SECONDS,`

## Why It's Good For The Game
Code readability
2024-04-04 18:56:08 -06:00
zxaber 46eb5bb38a Fixes open-air mechs (Ripley, Paddy) not pushing projectile damage to the pilot (#80844)
## About The Pull Request
Moves parent call for mech bullet_act() to after the enclosed and
occupant check, so that the rest of the proc has a chance to send the
damage to the pilot
## Why It's Good For The Game
Bugfix.
## Changelog
🆑
fix: Ripley MK-Is and Paddys now correctly make incoming projectiles hit
the pilot again.
/🆑
2024-01-09 14:09:22 -05:00
Andrew 999a3aa5dc Slight overclock nerf [NO GBP] (#79625)
## About The Pull Request

Thanks to @moocowswag 's gimmick I learned that overclock can be set to
cycle without overheating when you use an assembly with timer. So
essentially it's a free movespeed buff with no downsides.

Now the mech gains additional heat depending on it's movedelay, the
faster - the shorter the overclock duration. And the gain is no longer
equal the cooling speed, so you can't set it to cycle and forget.

## Why It's Good For The Game

It was an oversight, Ripley and Clarke too strong, while being low tier
mechs.

## Changelog

🆑
balance: Mech overclock coefficient is down to 1.25 from the default 1.5
for Ripley and Clarke.
balance: Mech overclock heating now scales with movespeed, higher speed
- faster overheat.
/🆑
2023-11-13 00:55:50 +01:00
zxaber 91af16bcbf Adds Paddy, the Security Mech (#79376)
## About The Pull Request
- Adds a new combat mech, Paddy. Paddy is a modified Ripley MK-I,
intended for use by the station's security force. Like the MK-I, the
Paddy features an open-air cockpit design (and thus does not protect
from ranged weapons), but maintains the speed of the base unit.
Constructing a Paddy is similar to constructing a MK-II, though the kit
requires combat-mech level research. Sprites by
[DrDiasyl](https://github.com/DrDiasyl)
-- The paddy has an internal cargo bay capable of holding up to four
individuals (loaded with a hydraulic claw). If the pilot exits the
Paddy, any loaded individuals are likewise ejected. Individuals can
attempt to resist their way out of the mech, but it requires the mech to
be stationary for 45 seconds. If they do this, all individuals in the
holding cell are ejected.

- Adds a new mech equipment piece, the hydraulic claw. Similar to a
clamp, this Paddy-exclusive item can load mobs into the Paddy's cargo
bay. Humanoid mobs are handcuffed upon loading. The hydraulic claw is
unlocked on the same tech node as the Paddy.

- Adds a round-start Paddy, carrying one peacekeeper disabler and one
hydraulic claw, to each security area on all maps. Round-start Paddys
are also pre-locked with security access. Security now has access to a
mech charger, and a small bay for it all. Map edits were done by
[Maurukas](https://github.com/Maurukas).

- Also did some minor cleanup of various mech-related code. Ripley mech
cargo is no longer stored in the mech, but within the "ejector" object.
This doesn't have any player-facing changes, but it is easier to
organize behind the scenes. additionally, if Ripleys are destroyed now,
they drop their stored objects rather than deleting them.

## Why It's Good For The Game
Playing lone security is probably one of the least fun aspects of the
game. Arresting any assistant is inevitably setting yourself up against
the tide as a whole; You try to stun any one person and they crawl out
of the woodworks to get in your way, drag off the arrestee, and probably
try to steal your gear.

The Paddy is set up to be functional against low-threat targets, but not
particularly good against anything with purpose. The round-start Paddy
carries the disabler equipment, as well as the law claw, to detain
individuals in a *somewhat* safe manner. Being that you're inside an
exosuit, you're immune to shovespam that plagues the halls, and you
don't risk dropping important gear quite as easily.

However, The open canopy gives you no protection at all from ranged
attacks, nor from atmos hazards. Being that you're in an exosuit, you
cannot use other items or equipment. The AI will have trouble finding
you to open a door, due to your name not jumping their camera to your
location.
## Changelog
🆑 Zxaber, DrDiasyl, Maurukas
add: A new security-focused combat mech, the Paddy, has been added,
intended to be particularly helpful for lone sec officers. You will find
one in the Security main office, and a replacement can be built with
late-game mech research.
fix: Ripley MK-I and MK-II mechs no longer qdel their stored items when
destroyed.
/🆑

![image](https://github.com/tgstation/tgstation/assets/37497534/72e6890d-82be-44dd-9b09-e4c75a9bfd4a)

---------

Co-authored-by: Vire <66576896+Maurukas@users.noreply.github.com>
2023-11-09 00:45:10 +00:00
Andrew 7e1f5e609e Overclock safety setting for Gygax (#79101)
![SVYgXCYIFN](https://github.com/tgstation/tgstation/assets/3625094/fffe3763-fae5-4449-a47e-7fc564e96853)

## About The Pull Request

Since people started using OC on all mechs by attaching a signaller to
the wire, I figured that Gygax should have at least something special,
except the 2x overclock modifier for dark gygax and the UI button for
overclock.

Now Gygax type mechs have an option to automatically disable overclock
when the mech is overheated. As Gygax was designed to use overclock,
other mechs lack this component and there is no wire for this.

## Why It's Good For The Game

Special overclock behavior for Gygax.

## Changelog

🆑
add: Gygax type mechs now have an option to disable overclock when
overheated.
fix: Fixed overclocking having no effect on Ripley.
/🆑
2023-10-21 13:38:29 -04:00
Andrew 2d34c7433a New Mech UI and equipment refactor (#77221)
![bWJlVIDO53](https://github.com/tgstation/tgstation/assets/3625094/d75030b5-59e9-43f6-96b4-1b7564caceef)

## About The Pull Request

Made a new UI and refactored some mech code in the process.

Fixes #66048
Fixes #77051
Fixes #65958 ??? if it was broken
Fixes #73051 - see details below
Fixes other undocumented things, see changelog.

## Why It's Good For The Game

The UI was too bulky and Mechs were too complex for no reason. 
Now they follow some general rules shared between other SS13 machinery,
and there is less magic happening under the hood.

## Detailed Changes

### New Mech UI, Air Tank and Radio as separate modules

Previous UI for comparison:

<img alt="9SScrXAOjy"
src="https://github.com/tgstation/tgstation/assets/3625094/904e3d07-e7d7-4d3a-a062-93e0e35b4b66">

Previously mechs came with radio pre-installed and air canisters
magically pre-filled with air even when you build one in fab.
Radio and Air Tanks are now both utility modules that are optional to
install. Gas RCS thrusters still require Air Tank module to operate.

This made the Mechs more barebones when built, giving you only the basic
functionality.

<img alt="5SDMlXTJxv"
src="https://github.com/tgstation/tgstation/assets/3625094/b9364230-49ac-416b-aa70-e851fbf2050e">

To compensate this change, all mechs got two extra utility module slots.

All other modules got new UI. And ore box now shows the list of ores
inside.

<img alt="SRX5FjvsHA"
src="https://github.com/tgstation/tgstation/assets/3625094/cbe2e98d-1cd4-4667-8dae-2f9227b4b265">

### Mounted Radio

Works as a normal radio, but with subspace transmission. Available from
the basic mech research node and can be printed in fab.

### Cabin Sealing

To compensate for the lack of air tank by default, mechs with enclosed
cabin (e.g. all except Ripley) got an ability to toggle cabin exposure
to the outside air. Exiting the mech makes cabin air automatically
exposed.

When you seal the cabin, it traps some of the outside air inside the
cabin and you can breathe with this air to perform a short space trips.
But the oxygen will run out quickly and CO2 will build up.

Sealing the cabin in space will make the cabin filled with vacuum, and
it will stay there until you return to air environment and unseal the
cabin, letting the breathable air to enter. There are temperature and
pressure sensors that turn yellow/red when the corresponding warning
thresholds are reached.

You could also use personal internals in combination with cabin sealing
for long space travels, so Air Tank is completely optional now and
mostly needed when you need RCS thruster.

### RCS thrusters

They are now available earlier in tech tree and consume reasonable
amount of air (5 times more than human jetpacks), and they don't work
without Mounted Air Tank, unless it's an Ion thruster variant.

### Mounted Air Tank

Available from the basic mech research node and can be printed in fab.
Built model comes empty, and syndicate mechs come with one full of
oxygen.

<img alt="GrFDrH5Hwe"
src="https://github.com/tgstation/tgstation/assets/3625094/b677b705-bda0-4c8c-96c7-d32bf7bf9f28">

Can be switched to pressurize or not pressurize the cabin. Releases gas
only when the cabin is sealed shut. Starts releasing automatically, but
can be toggled to not release if you want to use it just as a portable
canister.

Cabin pressure can now be configured in the module UI instead of
Maintenance UI.

Can be attached to a pipe network when the mech is parked above a
connection port.

Comes with a pump that works similarly to the portable pump. It lets you
vent the air tank contents outside, or suck air from the room to fill
the air tank. Intended to provide an ability to fill the air tank
without the need to bother with pipes.

Also has gas sensors that display gas mix data of the tank and the cabin
(when sealed).

### Stock part changes

All mechs now require a servo motor and they reduce mech movement power
consumption instead of scanning module.

Scanning modules are optional for mech operation (still required to
build) and the lack of one disables the following UI elements:

- Display of mech integrity (you can still see the alerts or examine the
mech to get rough idea)
- Display of mech status on internal damage (and you can't repair what
you can't diagnose)

The rating of scanning module doesn't have any effect as of now.

Cargo mech comes without it roundstart.

<img alt="2vDtt99oqb"
src="https://github.com/tgstation/tgstation/assets/3625094/147144ca-824e-4501-acf5-6ee104f309e7">

Capacitors now also reduce light power usage and raise the overclocking
temperature thresholds (see below).

### Maintenance

Maintenance UI removed, and its logic migrated to other places.

Access modification now managed inside the mech, and anyone who can
control the mech, can adjust the access in the same way as they can set
DNA key.

To open the maintenance panel you just need a screwdriver. It is instant
when the mech is empty and it has a 5 second delay when there is an
occupant to avoid in-combat hacking and part removal. It will alert the
occupant that someone is trying to tinker with their mech.


![image](https://github.com/tgstation/tgstation/assets/3625094/1abfca3c-8ba9-44b0-913c-c209564b91fd)

Once the panel is open, you can see the part ratings:


![image](https://github.com/tgstation/tgstation/assets/3625094/404f95bb-9f74-4e5b-a975-5ab6f74bdfa9)

With open panel you can hack the mech wires (roboticists can now see
them):

<img alt="mj205G2qDa"
src="https://github.com/tgstation/tgstation/assets/3625094/44cea0d1-44b4-4b50-b1d3-a97c0056bab3">

There are wires for:
- Enabling/Disabling ID and DNA locks
- Toggling mech lights
- Toggling mech circuits malfunction (battery drain, sparks) 
- Toggling mech equipment malfunction (to repair after EMP or cause
EMP-like effect, disarming mech)
- 3 dud wires that do nothing

The hacker may be shocked if the mech power cell allows.

When the panel is open and the user has access to the mech, they can
remove parts with a crowbar:

<img alt="jR40gyTWtJ"
src="https://github.com/tgstation/tgstation/assets/3625094/b573f5b9-b8ea-412e-b3e0-c872e01e0c23">

Hitting the mech with an ID from outside now toggles the ID Lock on/off
if the ID has sufficient access.

### Power consumption and overclocking

Rebalanced mech power consumption. T4 parts were not working in
Syndicate Mechs, as their effect was not calculated until you manipulate
parts manually. Constructed mechs with t1 parts even had their energy
drain reduced with upgrade to t1.

Now all mechs apply their base step power usage correctly don't ignore
the stock parts.

Servo tier now reduces base power consumption by 0% at t1, 50% at t2,
33% at t3 and 25% at t4
Capacitor tier now reduces base power consumption of mele attacks,
phasing and light by the same amounts.

Gygax leg actuators overload replaced with mech overclocking. Any mech
can be overclocked by hacking wires, but only Gygax has a button for
toggling it from the Cabin.

Now there is an overclock coefficient. 1.5 for Gygax and other mechs, 2
for Dark Gygax.

When overclocked, mechs moves N times faster, but consumes N times more
power.


![image](https://github.com/tgstation/tgstation/assets/3625094/01e285fd-6fd6-4558-8277-2ed3abf474d8)

While overclocked, mech heats up every second, regardless of movement,
and starts receiving internal and integrity damage after a certain
temperature threshold. The chance is 0% at the threshold, and 100% at
thresholds * 2. The roll happens every tick. Capacitor upgrades this
threshold, letting you overclock safely for longer periods.


![image](https://github.com/tgstation/tgstation/assets/3625094/80d90cea-0d20-4054-9369-a47deb6f52f2)

When you stop overclock, the temperature goes back down.

### Other changes and fixes

Concealed weapon bay now doesn't show up when you examine the mech, so
it's actually concealed now.

New radio module can properly change its frequency, as it didn't work
for previous radio.

Launcher type weapons were ignoring cooldowns and power usage, so you
could spam explosive banana peals, while they should have a 2 second
cooldown:
<img alt="q5GjUsHwGr"
src="https://github.com/tgstation/tgstation/assets/3625094/d102725d-e9e1-4588-9d6c-b9e38b7a6535">

Now this is fixed and all launcher type weapons properly use power and
have their cooldowns working.
And now they have the kickback effect working (when it pushes you in the
opposite direction in zero gravity on throw).

Thermoregulator now heats/cools considering heat capacity instead of
adding/reducing flat 10 degrees. So you can heat up cabin air quicker if
the pressure is low.

There were some other sloppy mistakes in mech code, like some functions
returning too early, blocking other functionality unintentionally. Fixed
these and made some other minor changes and improvements.

## Changelog

🆑
refactor: Refactored Mech UI
refactor: Refactored mech radio into a utility module, adding extra slot
to all mechs
refactor: Refactored mech air tank into a utility module with an air
pump, adding extra slot to all mechs
refactor: Refactored mech cabin air - there is now a button to seal or
unseal cabin to make it airtight or exchanging gases with the
environment
refactor: Removed mech maintenance UI Access is set in mech UI, and
parts are ejected with a crowbar
add: Mech now has wires and can be hacked
qol: Roboticists now can see MOD suit and mech wires
add: Mechs now require servo motor stock part and it affects movement
power usage instead of scanning module
add: Scanning module absence doesnt block mech movement and hides some
UI data instead. Big Bess starts without one.
qol: Hitting mech with ID card now toggles ID lock on/off if the card
has required access
fix: Fixed concealed weapon bay not being concealed on mech examine
fix: Fixed mech radio not changing frequency
fix: Fixed mech launcher type weapons ignoring specified cooldown
fix: Fixed mech launcher type weapons not using specified power amount
fix: Fixed mech temperature regulator ignoring gas heat capacity
fix: Fixed mech stopping processing other things while not heating
internal air
fix: Fixed mech being able to leave transit tube in transit
fix: Fixed mech internal damage flags working incorrectly
fix: Fixed Gygax leg overloading being useless
fix: Fixed mechs ignoring their stock parts on creation. Syndicate mechs
now stronger against lasers and consume less energy on move. Upgrading
from tier 1 to tier 2 doesn't make mech consume MORE energy than before
the upgrade.
balance: Rebalanced mech energy drain with part upgrades. Base energy
drain reduced by 50%, 33%, 25% with upgrades and applies to movement
(Servo rating), phasing, punching, light (Capacitor rating).
balance: Hydraulic clamp now can force open airlocks
balance: Made mech RCS pack consume reasonable amount of gas
code: Fixed some other minor bugs and made some minor changes in the
mech code
/🆑

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Sealed101 <cool.bullseye@yandex.ru>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-08-15 18:02:28 +01:00
necromanceranne a18872b6ee Restores some mechs being able to pivot step (move and turn in the same keypress) and diagonal movement (#77345)
<!-- 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

Most mechs couldn't move diagonally. This restores that for all but the
Clarke (which is a vehicle on treads)

The Clarke and Odysseus once again have pivot step, lost during the
refactor for unknown reasons. It was literally just right there, it was
an easy fix. Clarkes once again move like a tank!

## Why It's Good For The Game

So the way that mech movement works, by blocking diagonal movement, what
instead happens is that the mech eats the move command and goes on
movement cooldown. By pressing two buttons rather than one, you come to
a full stop and no longer can move. I cannot think of a more hostile
player-facing feature than this. It utterly gutted the usability of
mechs for no real apparent benefit. As such, I'm just removing it on all
but the most relevant mech, the Clarke. This should make it much more
approachable to pilot mechs and not feel like the game is malfunctioning
half the time.

Clarkes and Odysseus mechs had a really cool feature. They turned and
moved in the same button press. This made them very nimble mechs and fun
to utilize. They lost this feature in the refactor for, once again, not
much apparent reason since this was literally a line change to restore.

## 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. -->

🆑
fix: Restores a lost feature, Clarkes and Odysseus mechs once again can
pivot on a dime and step in the same button press.
qol: Mechs universally have diagonal movement as to avoid unresponsive
movement, as block diagonal movement was having unintended side effects
and was actually intended for pivot step mechs.
/🆑

<!-- 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. -->
2023-08-05 14:41:44 +02:00
ChungusGamer666 9940fb62e6 Destroys /obj/vehicle/sealed/mecha/working with a W80 nuclear warhead (#76296)
## About The Pull Request

Title.

Also, fixes https://github.com/tgstation/tgstation/issues/75568 at the
request of @TheVekter

## Why It's Good For The Game

This subtype only exists to append ore box behavior and is clearly a
relic of pre-2020 mechcode.
Keeping it around will only make it harder in the future to add new
mechs with ore box support.

## Changelog

🆑
fix: Clarke ore box now has a less confusing dump contents button.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-06-27 21:10:23 -06:00
Sealed101 2933888136 Mech safety toggle has an action button now (#73779)
## About The Pull Request
Adds and action button for toggling mech equipment safeties. Also
clarifies the message about safeties that the AIs get when possessing a
mech to account for the new button.

## Why It's Good For The Game
Closes #38178 - the only way to toggle safeties without middle-click
right now is through the mech stats UI, which is quite cumbersome.
Adding an action button seems to be an alright solution, as it's always
available and much easier to access.

## Changelog
🆑
qol: mechs have an action button on the HUD for toggling equipment
safeties
/🆑
2023-03-14 16:21:07 -06:00
Zephyr 6a0c884410 [no gbp] removes all duplicate armor datums (#72354)
## About The Pull Request
closes #72348 
Title
## Why It's Good For The Game

My bad
## Changelog
Heres the script I used this time if you want to
```cs
var baseDir = Environment.CurrentDirectory;

var allFiles = Directory.EnumerateFiles($@"{baseDir}\code", "*.dm", SearchOption.AllDirectories).ToList();
var known = new Dictionary<string, List<KeyValuePair<string, int>>>();

foreach (var file in allFiles)
{
	var fileLines = File.ReadAllLines(file);
	for (var i = 0; i < fileLines.Length; i++)
	{
		var line = fileLines[i];
		if (line.StartsWith("/datum/armor/"))
		{
			var armorName = line.Replace("/datum/armor/", "").Trim();
			if (!known.ContainsKey(armorName))
				known[armorName] = new List<KeyValuePair<string, int>>();
			var knownList = known[armorName];
			knownList.Add(new KeyValuePair<string, int>(file, i));
		}
	}
}

Console.WriteLine($"There are {known.Sum(d => d.Value.Count)} duplicate armor datums.");

var duplicates = new Dictionary<string, List<int>>();
foreach (var (_, entries) in known)
{
	var actuals = entries.Skip(1).ToList();
	foreach (var actual in actuals)
	{
		if (!duplicates.ContainsKey(actual.Key))
			duplicates[actual.Key] = new List<int>();
		duplicates[actual.Key].Add(actual.Value);
	}
}

Console.WriteLine($"There are {duplicates.Count} files to update.");

foreach (var (file, idxes) in duplicates)
{
	var fileContents = File.ReadAllLines(file).ToList();
	foreach (var idx in idxes.OrderByDescending(i => i))
	{
		string line;
		do
		{
			line = fileContents[idx];
			fileContents.RemoveAt(idx);
		}
		while (!String.IsNullOrWhiteSpace(line));
	}
	File.WriteAllLines(file, fileContents);
}
```
2022-12-30 03:43:36 -05:00
Zephyr 72add64520 Refactors armor into dedicated subtypes (#71986)
## About The Pull Request

See title.
## Why It's Good For The Game

Code is cleaner, and more readable/intuitive
Technically closes
https://github.com/tgstation/dev-cycles-initiative/issues/8
## Changelog
🆑
refactor: armor, from the ground up basically
/🆑

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2022-12-23 16:21:22 -08:00
MrMelbert 329921639a Rewrites how action buttons icons are generated, makes them layer nicer. Allows observers to see a mob's action buttons. (#71339)
## About The Pull Request

- Rewrites how action button icons are generated.
- Prior, generated an action button icon was fairly simplistic and
didn't allow for many changes. Someone recently added the option for
overlays to be generated over action buttons, but the framework was very
weak.
- Now, action button icon generation is split across multiple procs,
like atom icon updates.
      - The background of action buttons are underlays
- The actual icon of the action button is the icon and icon state of the
action button movable
- The rim / border of the button is an overlay, layered overtop the
button.

- Allows observers to see what action buttons a mob has. They even
update in real time! And no, the observers cannot click on them.

## Why It's Good For The Game

- Runechat text of action buttons are no longer hidden behind the actual
icon. This was very ugly with cooldown actions, as the cooldown text was
hidden behind a lot of spell icons.
- Cuts down on a lot of icon duplication. 
- Gives much finer control over action button icons
- Saves a bit of processing from generating full action button icons
when not necessary. Not implemented in many places, but is in some.


![image](https://user-images.githubusercontent.com/51863163/202816617-342e87e6-2cc6-488e-9af2-4b2053dc3dc6.png)


![image](https://user-images.githubusercontent.com/51863163/202816604-da8d4821-0e2b-45af-b289-7442367f98ce.png)

## Changelog

🆑 Melbert
add: Observers can now see what action buttons an observed mob has. No,
you can't click them. And no it doesn't show EVERY action.
refactor: Refactored how action button icons are generated. Some actions
will now use a colored border when active instead of just turning green.
Cooldown text will also appear on the top layer of actions too. If you
see any funky lookin' icons (namely their borders), let me know.
refactor: Bluespace Golem's teleport action is now a cooldown action.
fix: Construct actions go to the middle of the screen like expected. 
/🆑
2022-12-03 19:01:08 -08:00
AnturK 84f69359a0 More horrible 515 proc compatibility. (#71333)
So i left over some basic `/whatever/proc/format` uses in the original
PR this fixes it.

Notable exceptions to the rule:
- Paths in add_verb/remove_verb, we need full path instead of a name
there to access verb metadata so we can't use proc ref macros there.
- regex.Replace, found out that it does not accept call by name. Instead
i added new REGEX_REPLACE_HANDLER so we can at least try to mark these.

There's still leftover global procs that do not use GLOBAL_PROC_REF but
they functionally equivalent so that's for later.

I don't see any reasonable way to grep for this. But if you got any
ideas please share.
2022-11-22 07:55:43 +00:00
ShizCalev 9dab26371c Throws a bunch of parenthesis around to ensure dear Aunt Sally is always properly excused. (#71281)
Similar vein to #37116

This is supposed to be standard, yet here we are.

SHOULDN'T change anything, but there's likely something out there that's
bound to behave different because of it.


These were done manually, regex to find things that MIGHT need to be
corrected;
`^#define.+\+((?!\)).)*$`
`^#define.+-((?!\)).)*$`
`^#define.+\*((?!\)).)*$`
`^#define.+\/((?!\)).)*$` (yeah that's a lot of stuff.)
`^#define.+%((?!\)).)*$`
`^#define.+SECONDS((?!\)).)*$`
`^#define.+MINUTES((?!\)).)*$`
2022-11-21 20:53:06 -08:00
AnturK 4d6a8bc537 515 Compatibility (#71161)
Makes the code compatible with 515.1594+

Few simple changes and one very painful one.
Let's start with the easy:
* puts call behind `LIBCALL` define, so call_ext is properly used in 515
* Adds `NAMEOF_STATIC(_,X)` macro for nameof in static definitions since
src is now invalid there.
* Fixes tgui and devserver. From 515 onward the tmp3333{procid} cache
directory is not appened to base path in browser controls so we don't
check for it in base js and put the dev server dummy window file in
actual directory not the byond root.
* Renames the few things that had /final/ in typepath to ultimate since
final is a new keyword

And the very painful change:
`.proc/whatever` format is no longer valid, so we're replacing it with
new nameof() function. All this wrapped in three new macros.
`PROC_REF(X)`,`TYPE_PROC_REF(TYPE,X)`,`GLOBAL_PROC_REF(X)`. Global is
not actually necessary but if we get nameof that does not allow globals
it would be nice validation.
This is pretty unwieldy but there's no real alternative.
If you notice anything weird in the commits let me know because majority
was done with regex replace.

@tgstation/commit-access Since the .proc/stuff is pretty big change.

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2022-11-15 03:50:11 +00:00
MrMelbert b7eace2fad Adds Cargorilla (#67003)
* Adds cargorilla

* working cargorilla

* Tweaks to control + jobs and stuff

* Sleep

* Probably don't leave in debug

* el sanity

* el change them to use globals, el refactor

* Does this fix it?

* Ah, okay

* el copypaste

* el mapload vars

* ready to ship
2022-06-01 19:41:46 -04:00
TiviPlus 1512ea7759 Mechs now use equipment flags to check if they can attach (#65813)
* Mechs now use equipment flags to check if they can attach

* Apply suggestions from code review

Co-authored-by: Tim <timothymtorres@gmail.com>

* Fixes suggestion code

Co-authored-by: TiviPlus <572233640+TiviPlus@users.noreply.com>
Co-authored-by: Tim <timothymtorres@gmail.com>
2022-05-08 09:40:56 -07:00
TiviPlus 722d8c646d Remove selectable var on mech equipment, again (#65969) 2022-04-06 20:39:18 -05:00
LemonInTheDark 50689f89a4 Action button refactor/rework: Enhanced Dragging (#65180)
About The Pull Request

I noticed a lot of strange and un-intuitive behavior in action buttons, and got stung by the bloat bug. Damn it hug #58027
I'll do my best to explain what I've changed and why, might get a bit long.
If you want a better idea, read the commits. Most of em are pretty solid, if long.

Whelp. Here we go.
How do action buttons currently work

All action buttons are draggable, to any place on the screen. They're held in an actions list on the player's mob.
Their location in this list determines their position on the top of the screen. If one is dragged away from the top, its position in the list is "saved". This looks really bad.
If two buttons are dragged over each other, their positions swap. (inside the actions list too)
If a button is shift clicked, it is brought back to the position it started at.
If the action collapse button that you likely just mentally edit out is alt clicked, it resets the position of all action buttons on the screen.
If an action is ctrl clicked, it is "locked". This prevents any future position changes, and also enables a saving feature. With this saving feature, locked button positions persist between rounds. So your first o2 canister will always start where you saved it, etc.
Actions and buttons are a one to one link. While there is functionality to share action buttons between two players, this means showing the same object to both. So one player can move a button on another's screen. Horrendous.
This also makes code that modifies properties of the screen object itself very clunky.
Why is this bad

A: None knew pretty much any of this information. It is actually documented, just in a horribly formatted screen tip on the collapse button, you know the one we all mentally delete from the hud.
B: None of this is intuitive. Dragging buttons makes the hud look much worse, and you get no feedback that you even can drag them. Depressing
C: We use actions to make new options clear to the player. This means players can have a lot of action buttons on the hud. This gets cluttery
D: The collapse button is useless. It lets you clear your screen if someone like me fucks up and gives you 2000 actions, but outside of that it just hides all information from you. You never want to see none of your action buttons, just a filtered list of them.
E: On a technical level, they're quite messy, and not fully functionally complete. This is depressing.
What I've done

Assuming the above to be true, how do we fix them?
Well first I'm going to go over everything I changed, including links to major commits. I'll then describe the finished product, and why I made the decisions I did.

Oh and I've moved some of the more niche or technical discussion to dropdowns. Hopefully this makes finding the major functional changes easier

Adds helper procs for turning screen_loc strings into more manageable arrays. This doesn't fully support all of the screen_loc spec, but it's enough for what I'm doing. (f54865f)

Uses these helper procs to improve existing code (6273b93)

Fixes an issue with tooltip code itself. If you tried to hold down a mouse button while dragging onto a tooltip enabled object, it would silently fail. The js made assumptions about the order args came in, which broke when buttons were held down (e0e42f6)

Adds a signal linked to /client/Click(). Surprised we didn't have this before honestly (c491a4a)

Makes /client/MouseDrag() return parent. If we don't do this, any overrides of MouseDrag will never actually be called (2190b2a)
Refactors how action buttons work under the hood (53ccce2)
Basically, rather then generating one button per action, we generate one button per viewer

Starts to change button behavior, more cleanup

Changes the mouse cursor when an action button is dragged. Hopefully
this makes moving things feel less like an accident, and makes you doing
it more clear

Removes the moved and locked vars. This will be more relevant later, but
for now:

Moved exists as a sort of budget "We've been dragged" variable. We can
handle this more cleanly, and the movable type doesn't care about it

Locked is a very old variable that is also not something that the
movable type "owns". It's more an action button thing that's been moved
down.
It exists so an action can be locked in place, and in that locking, be
treated as a "saved location"
(21e20fc)

Because I've nuked move, we don't need to directly set our button's
position. We can use the default_button_position var instead. This is
quite handy.

Please ignore position_action, I will explain that later
(83e265e)

Removes the buttons locked pref

It was another obscure part of action buttons, basically do buttons
start "locked" or not. See previous discussion of locked
(b58b1bd)

Major rework starts here

Alright. Sorry for this, this is where me not commiting regularly starts
to suck. I'll do my best though.

Rather then figuring out an action button's position via a combination
of the moved and ordered vars, we use a separate location var to store
one of a few defines. This makes life later much easier.

Adds tooltip support for dragging action buttons. The way the tooltip
just froze in place when dragging really bugged me, and lead to some
nasty visual artifacts.
This is a bit messy because the drag procs are horrible, but it's
workable

Dropping a button on another button will no longer swap their positions
Behavior instead depends on the target button.

If it's a part of a group (A concept I will explain later) the dragged
button is simply inserted before it in the group's list.

If it's floating on the general hud, we instead position the dragged
button to its right. There's extra logic here to ensure buttons will
never overflow the screen, but I'll get into that later.

Alright. That's most of the refactoring. Time for the larger behavior
changes.

Adds a button palette. This is a separate dropdown that renders
underneath buttons.

image

The idea is to allow for a conceptual separation between "important"
buttons and the ones that end up cluttering the screen.

You can click on the dropdown to open it, then any later clicks that
don't involve actions in some way will autoclose it.

My goal is to come up with an alternative for the action button that
just acted as a way to hide all buttons on screen. Not convinced it saw
much use.

As a side effect of removing that, I've moved its tooltip stuff to the
palette. I've properly formatted it, so hopefully it's easier to read
then the jumble that we used to have.

(You can alt click the palette button to reset all button positions)

Oh and the palette can scroll, since as you'll see later it has a
limited size.
image

Moving on from that, I've added what amounts to action landing buttons.
These allow buttons to rejoin groups, or be positioned at the end of a
line of buttons.
image

They've got a 32x32 hitbox, and only show up when dragging. Hopefully
this makes the system more clear just by dragging an action.

Oh and I've changed how button position updating works. The old system
of calling update_action_buttons on mob every time an action button
changes position is gone, mostly because I've setup more robust
grouping. Will discuss when I get to huds

(0d1e93f)
Adds the backbone behind action button position changes (94133bd)

Moves hud defines to the global folder, safer this way (7260117)

Adds color changing to the palette button, giving some heads up for buttons being inserted into the palette automatically
image
image
Ensures a landing button is always shown, even if it needs to break the
max row rule
Makes palettes auto contract if they have no buttons inside them
Prevents palettes from being opened if they have no buttons inside them
(f9417f3)
How it looks
2022-02-26.02-30-10.mp4
Why It's Good For The Game

Players have more control over the clutter on their screen.
Buttons are available, but not in the way,
Since any player move of a button saves it, any lack of clarity in the way buttons work will be forced out by buttons not just resetting when a new game starts.
We don't overlap any existing screen elements, unless the upper button list gets really long.
The code is much less crummy (I think, may have made it worse it's hard for me to judge my own work)

If it ends up not being as usable as I'd like, I'll rip out the existing changes and just implement the qol and backend stuff. I think it's worth doing though.
Changelog

cl
add: Expanded heavily on action buttons
add: Adds an action button dropdown that sits just under the normal list in the top left. You can drag new buttons onto it to insert them. Click on it to show its contents, do what you want to do, then click again anywhere to contract it. Alt click it to reset all button positions
add: Action buttons will now remember their position between rounds. So if you really like your flashlight right next to your player for some reason, we support that now
add: When you start to drag an action button, docking ports will appear in places that it can be inserted into. (Outside of just floating somewhere on your screen of course)
del: Removed action button locking, and the associated preference. I'm reasonably sure literally none uses this, but if you do hit me up
qol: Dragging an action button will now give you an outline of its size around your cursor
fix: You can no longer cause the screen to expand by putting an action button on the edge of widescreen, and then resizing to standard.
refactor: Refactors action and button code significantly. lots of little things.
/cl
2022-04-01 09:40:20 +13:00
TiviPlus 10395a8074 Reworks & TGUIs mecha equipment (#65375)
TLDR
Mech UI now TGUI: https://streamable.com/ahjydy
Mechs now use "slots" for equipment
They can only mount 2 guns(left and right arm, left and right click to use)
Tesla & Concealed bay is removed
Removed mech damage deflection

Full list of changes
Note: weapons in this section refer to all click-using equipment such as guns/hydraulic clamp/etc

Hackmd: https://hackmd.io/lgr-LetfSKyHzPP0zQUXPA
Tesla has been removed (Tesla gives you effectively infinite power on station and off station(where the design direction for mechs is intended) they are useless)
Concealed mech bay has been removed (Concealed mecha bay relied on selection for visibility so it doent make sense to exist when all equips are "selected", the code was bad (instead of flag or something you just used locate() everywhere)
Honker no longer has snowflake UI (I'm sorry but if I have to make a third UI for this im going to go insane)
Mechs now mount 2 arm weapons, and certain amount of "utility", "armor" and "power" module types
The two arm weapons do not share a cooldown anymore UNLESS they are identical weapons
left click to shoot left weapon right click for right weapon, this will shoot the weapon unless you click next to you with a ranged weapon it will then try to melee (This also applies to attaching the weapon to the mech)
It is no longer possible to deflect or have multipliers for damage from innate or armor sources, armor will now just apply a direct armor change
Since plasma generator needed to be selected to use you now need to click on the power generator with a stack of plasma to refill it
Internal damage:
The mech no longer needs to be low health to take internal damage
Internal damage now no longer has several convoluted ways to fix each different type and is now a timed action performed in the UI
Weapons no longer have an RNG chance to be damaged or immediately deleted by damage
Weapons will now take damage aimed at the right and left arms respectively, this can be repaired using the new UI. NOTE: this is intended to be implemented as weapon/module disabling but I left it out of this PR to try resemble some shortness
Both internal and equipment damage have minimum thresholds of damage required in a hit before they attempt to check whether the mech should take internal or equipment damage, teh threshold is lower for equipment damage
You can no longer reload weapons using energy

Demo Video
https://streamable.com/ahjydy
2022-03-28 23:46:26 +01:00
TiviPlus fbe88da912 mech equipment fix/cleanup (#64921)
mech equipment topic calls parent
autodoc
equip_ready renamed to activated as it is more fitting
removed salvagable as it was with one exception just doing what detachable did anyway
removed some stuff like src.vars
2022-03-12 02:18:24 -08:00
TiviPlus 7ee5ed97de Move most mecha actions to their respective mech files (#64918) 2022-02-18 23:31:18 -06:00
Fikou f169aa5f7d Buffs the Clarke Mech (#63809)
* buffs the clarke mech

* better cooldown

* FUCK

* weed smoke
2022-01-09 11:56:35 -08:00
Mothblocks 0f3c4e51f7 Modernizing Radiation -- TL;DR: Radiation is now a status effect healed by tox healing, and contamination is removed (#62265)
Implements the Modernizing radiation design document ( https://hackmd.io/@tgstation/rJNIyeBHt ) and replaces the current radiation sources with the new system, as well as replacing/removing a bunch of old consumers of radiation that either had no reason to exist, or could be replaced by something else.

Diverges from the doc in that items radiation don't go up like explained. I was going to, but items get irradiated so easily that it just feels pretty lame. Items still get irradiated, but it's mostly just so that radiation sources look cooler (wow, lots of stuff around going green), and for things like the geiger counter.

Instead of the complicated radiation_wave system, radiation now just checks everything between the radiation source and the potential target, losing power along the way based on the radiation insulation of whats in between. If this reaches too low a point (specified by radiation_pulse consumers), then the radiation will not pass. Otherwise, will roll a chance to irradiate. Uranium structures allow a delay before irradiating, so stay away!
2021-11-01 04:20:39 -03:00
LemonInTheDark e663308b0d Adds SHOULD_NOT_SLEEP to Destroy. Why didn't we do this before. (#61943) 2021-10-09 04:29:33 -07:00
tralezab 6c01cc2c01 every case of initialize that should have mapload, does (#61623)
## About The Pull Request

stop forgetting to include mapload, if you don't include it then every single subtype past it by default doesn't include it

for example, `obj/item` didn't include mapload so every single item by default didn't fill in mapload

![](https://media.discordapp.net/attachments/823293417186000909/875122648605147146/image0.gif)

## Regex used:

procs without args, not even regex

`/Initialize()`

procs with args
`\/Initialize\((?!mapload)((.)*\w)?`

cleanup of things i didn't want to mapload:
`\/datum\/(.)*\/Initialize\(mapload`
2021-09-24 17:56:50 -04:00
tralezab a8d7b45d2a Ban posibrains and mmis from savannah ivanov (#59772)
Savannah Ivanov cannot have mmis or posibrains in them.

Now I know that sounds BAD... but I originally intended to do this as it removes a huge trust element and bypasses recruiting people for cooperation. I simply uuuh genuinely forgot to include this, so sorry for the DRAMA.

I was considering blocking the AI too, but AIs are actually more likely to be turned against you than fellow crewmembers

Co-authored-by: coiax <yellowbounder@gmail.com>
2021-07-04 09:50:18 +01:00
Rohesie e03cd1aada Refactors move procs to support multitle objects (#59658)
Enter(), Entered(), Exit() and Exited() all passed the old loc forward, but everything except a single a case cared about the direction of the movement more than about the specific source.
Since moving multi-tile objects will have multiple sources of movement but a single direction, this change makes it easier to track their movement.

Cleaned up a lot of code around and made proc inputs compatible.

I'll add opacity support for multi-tile objects in a different PR after this is merged, as this has grown large enough and I don't want to compromise the reviewability.

Tested this locally and as expected it didn't impair movement nor produced any runtimes.
2021-06-20 14:55:37 -07:00
Watermelon914 375a20e49b Refactors most spans into span procs (#59645)
Converts most spans into span procs. Mostly used regex for this and sorted out any compile time errors afterwards so there could be some bugs.
Was initially going to do defines, but ninja said to make it into a proc, and if there's any overhead, they can easily be changed to defines.

Makes it easier to control the formatting and prevents typos when creating spans as it'll runtime if you misspell instead of silently failing.
Reduces the code you need to write when writing spans, as you don't need to close the span as that's automatically handled by the proc.

(Note from Lemon: This should be converted to defines once we update the minimum version to 514. Didn't do it now because byond pain and such)
2021-06-14 13:03:53 -07:00
Emmett Gaines 43c5dc8bfa Makes obj_integrity only updated through procs (#59474)
Having things updating integrity directly is just going to cause more problems down the line as more elements and components depend on being notified of integrity changes. It's an easy mistake to make so making it private should deal with the problem.

get_integrity() might be useful in the future but is mainly a side effect of making obj_integrity private as that also disallows reads.
2021-06-04 11:48:05 -03:00