Commit Graph

590 Commits

Author SHA1 Message Date
Sealed101 1825ea0d78 Storm weather related fixes (#76367)
## About The Pull Request
A bundle of stormy weather-related fixes:
- ash storm visually replenishes dug basalt again; also updates refilled
basalt's light, if it rolled an eligible icon variant
- new proc refill_dug() for asteroid turfs, currently made use of in
weather but be my guest
- I THINK the lowest-light variants are so low they don't show up at all
but I didn't look into the lighting subsystem so /shrug
- `set_basalt_light()` is a global proc. the reason is because we have,
like, an unnecessary amount of basalt turfs that don't call back to each
other. `misc/basalt`, `floor/fakebasalt`, `holofloor/basalt`. bro come
on. should merge them where possible but that's for a separate PR; ALSO
MAKE IT USE THE `diggable` ELEMENT BRO COME ON!!!
- ash storm no longer loops `end()` sounds
- it was calling parent THEN removing the playlist's sounds, which
caused the playlist's ash storm weak sound to be picked again and play
with a hugelarge timer
- snow storm no longer affects mecha pilots
- I find it weird that ash storm immunity is just innate whether the
mech is "sealed" or not (Ripley mk I) but for now, I've made snow storm
immunity behave the same
- _jaunt spells provide weather immunity while the jaunt is active_
- _the caster is supposed to be untouchable by any practical means, it
don't make a lick'a sense to have weather affect them. I gave it a
general weather immunity however, and that also makes jaunts protect
from radiation. methinks it's fair, lmk if that's excessive_

## Why It's Good For The Game
- Fixes #76304
- Fixes #76400
- Refilled basalt tiles that should have light are consistent with
mapped in basalt tiles
- Consistency for mechs; the adjustment might be a balance thing, lmk

## Changelog
🆑
fix: fixed basalt turfs remaining visually dug up when refilled by an
ash storm
fix: fixed ash storm ending sounds looping after the storm is over
fix: mechs are now snow storm immune
fix: jaunt spells protect from weather when jaunting
/🆑
2023-07-01 19:23:19 +01:00
Ghom 0f4be6d9b5 Adds an element for noisy movement (wheelchairs, office chairs, trashcarts etc. etc.) (#76378)
## About The Pull Request
Converts generic, copypasted behavior into an element.

## Why It's Good For The Game
I'd rather not have someone just copypaste the old thing, since there're
a few more things to take into account now than just whether the item
has gravity, and if that ever has to change, we will only have to modify
one line than several.

## Changelog

🆑
fix: Fixed the office chair being silent. My bad.
/🆑
2023-07-01 15:30:09 +01: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 ab98d8a67a [NO GBP] adjust mecha generator consumption values to use SHEET_MATERIAL_AMOUNT (#76143)
i should have adjusted these in my previous PR that was touching this
equipment lol thus the no gbp

also makes the `ui_act()` not use `usr`

if my calculations are correct the consumption rates per tick should be
the same — 5% of a sheet when active and 0.65% when idle

## Why It's Good For The Game
fixes #76132

## Changelog
🆑
fix: fixed mecha generators using way too much fuel due to using the old
values of material units per sheet
/🆑
2023-06-21 12:14:25 -07:00
Helg2 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.
2023-06-21 01:08:51 +00:00
Couls 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
/🆑
2023-06-19 23:01:10 -07:00
GoldenAlpharex b500778c6c Fixes wheelchair making sounds only on conveyor belts (#76121)
## About The Pull Request
That's all it is, really. They went quiet because the logic check was
done backwards.

## Why It's Good For The Game
Wheelchairs making sounds when they're meant to is good.

## Changelog

🆑 GoldenAlpharex
fix: Wheelchairs now make noises when they're meant to again, and don't
make noises on the tram nor on conveyor belts
/🆑
2023-06-18 18:29:54 -06:00
LemonInTheDark ae5a4f955d Pulls apart the vestiges of components still hanging onto signals (#75914)
## About The Pull Request

Signals were initially only usable with component listeners, which while
no longer the case has lead to outdated documentation, names, and a
similar location in code.

This pr pulls the two apart. Partially because mso thinks we should, but
also because they really aren't directly linked anymore, and having them
in this midstate just confuses people.

[Renames comp_lookup to listen_lookup, since that's what it
does](https://github.com/tgstation/tgstation/commit/102b79694fa8eb57ecf7b36032616a9e368ccced)

[Moves signal procs over to their own
file](https://github.com/tgstation/tgstation/commit/33d07d01fd336726b4f6f6f1b61bb0b3f11a00dc)

[Renames the PREQDELETING and QDELETING comsigs to drop the parent bit
since they can hook to more then just comps
now](https://github.com/tgstation/tgstation/commit/335ea4ad081ec63c42cfa05856e582cca833af6e)

[Does something similar to the attackby comsigs (PARENT ->
ATOM)](https://github.com/tgstation/tgstation/commit/210e57051df63f88dac3dd83321236da825aae5e)

[And finally passes over the examine
signals](https://github.com/tgstation/tgstation/commit/65917658fb8a1e7d28ae23c9437a583d646f0302)

## Why It's Good For The Game

Code makes more sense, things are better teased apart, s just good imo

## Changelog
🆑
refactor: Pulled apart the last vestiges of names/docs directly linking
signals to components
/🆑
2023-06-09 06:14:31 +00:00
Ghom 7bc5e03ae5 Late adjustments to my previous move_loop PR. [NO GBP] (#75778)
## About The Pull Request
Lemon guy was a bit too late in reviewing #75732 because it got already
merged by someone else, and I too hadn't managed to make some adjustment
to that PR in time.

This PR applies suggested changes, turns a simple proc into a macro, and
makes it so that also waddling, squeaky shoes and swivel chair sounds
don't running when moved by conveyor belt.

This doesn't stop squeaking from happening when other
conveyor-belt-moved objects or mobs cross its tile. That'd be hacky and
I'm not here to fight sfx-spamming machines.

## Why It's Good For The Game
These are changes that should have been included in #75732 but couldn't.
See that PR for the general idea.

## Changelog

🆑
fix: waddling, squeaky shoes and swivel chair sound effects no longer
run when moved by conveyor belt.
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2023-06-08 17:41:28 -07:00
Sealed101 d9b39ca846 Mecha fixes: plasma generator, internal damage report & repair (#75704)
Cleans up the plasma generator to actually work & make more sense:
* was not accepting any fuel, made that work; will also accept subtypes
of fuel e.g. a mapped-in stack of 5 plasma
* was not displaying the amount of fuel left in mecha stats UI, was
broken in #75052
* plasma pollution was removed a long time ago in #42908, scrubs mention
of that

Also adds some fluff text to the internal damage tracker to the short
circuit entry, as it was lacking a "system nominal" one. Also added a
`to_chat` to fixing navigation internal damage, as it was the only one
with no message for some reason.
2023-06-07 13:56:02 -05:00
Josh 3b9dc83523 Allow admins to enable non-clowns to drive the clown car (#75818)
## About The Pull Request
Allows admin to varedit clown cars to allow non-clowns to be the
drivers. At the moment the current workaround is to assign the clown
role to people who we want to drive it which is a bit weird.

## Why It's Good For The Game
More admin powers = good.

## Changelog
🆑
admin: allow admins to allow non-clowns to drive clown cars
/🆑
2023-06-05 12:14:19 -06:00
Ghom e1344a5ddc Being moved around by conveyor belt or tram no longer plays footsteps and wheelchair sounds. (#75732)
## About The Pull Request
More or less a triviality, currently footstep/wheelchai sounds are
played even when the mob is moved by a conveyor belt, or riding the
tram. This PR puts an end to that.

To clarify, this doesn't stop these sounds from being played if you're
walking/running/rolling along or against a belt, or inside the tram.

But more than that, I made this PR because, afaik, we don't have a good
way to tell if a given movement proc chain was caused by a move loop or
not, and I need one for something I'm working on. This is more of an
implementation and reason for this PR to be made.

Tested, no issue. Waiting for a review, specially from @LemonInTheDark,
since they're the mind behind the movement loop code. Hopefully I'm
right saying what I said.

## Why It's Good For The Game
This fixes a consistency issue (if it can be called such) and the lack
of a simple way to tell if a movable is being moved by a move loop
outside of its own code.

## Changelog

🆑
fix: Being moved around by conveyor belt or tram no longer play
footsteps and wheelchair sounds.
/🆑
2023-05-31 14:29:44 -04:00
ShizCalev 1f5f6dd923 adds two missing mech camera sanity checks (#75405)
```
[00:11:38] Runtime in mecha_ui.dm, line 248: Cannot execute null.update c tag().
 proc name: ui act (/obj/vehicle/sealed/mecha/ui_act)
src.loc: the floor (105,144,2) (/turf/open/floor/iron)
call stack:
(/obj/vehicle/sealed/mecha/working/ripley): ui act("changename", /list (/list), /datum/tgui (/datum/tgui), /datum/ui_state/default (/datum/ui_state/default))
/datum/tgui (/datum/tgui): on act message("changename", /list (/list), /datum/ui_state/default (/datum/ui_state/default))
/datum/callback/verb_callback (/datum/callback/verb_callback): Invoke()
world: push usr((/mob/living/carbon/human), /datum/callback/verb_callback (/datum/callback/verb_callback))
/datum/callback/verb_callback (/datum/callback/verb_callback): InvokeAsync()
```

🆑 ShizCalev
fix: Fixed a minor runtime when renaming mechs that don't have a camera
attached to them.
/🆑
2023-05-13 20:33:36 -04:00
oranges 11ff2d7994 Nerfs MECH RCD's ability to build anywhere within 3 tiles of you (#75330)
you must now be able to see what you're trying to build on

## About The Pull Request
MECH RCD now requires you to actually see the thing you're trying to
build on

## Why It's Good For The Game
It is very powerful to be able to build in places you cant see
## Changelog

🆑 oranges
balance: MECH RCD is no longer magic
/🆑
2023-05-11 10:40:07 -07:00
Thunder12345 154c9ebe82 Stock Part Resprite (#75149)
## About The Pull Request

Resprites stock parts to bring them up to date, changes manipulators to
servo motors as I couldn't make manipulators work well at this scale.


![image](https://user-images.githubusercontent.com/5479091/236561493-b34da588-dee1-405a-8557-d11741ae3f21.png)
(Power cells sold separately)

## Why It's Good For The Game

The old stock parts are dated, in some cased quite ugly, and in the case
of manipulators a ball of assorted pixels. Incidentally removed a couple
of single letter var names.

## Changelog
🆑
image: Stock parts have been resprited.
code: Manipulators have been renamed to servo motors, all related types
have been repathed to match.
/🆑
2023-05-07 23:52:03 -07:00
zxaber 292ac864fe Fixes Mech Charger Console to Recharge Port Sync (#75127)
## About The Pull Request
Found a bug while working on another project, Kapu on the Discord told
me why it was broken. For most maps, this seems to be handled by the
fallback code by chance, where it checks within one more tile away, but
for Tram, that caused the following;

![image](https://user-images.githubusercontent.com/37497534/235795350-4e2326af-37ac-4f29-b195-b286eeafac03.png)

This is a webedit, but only because I didn't want to stop mid-project
and swap branches. It has been tested on local.
## Why It's Good For The Game
Bugfix.
## Changelog
🆑
fix: Mech chargers on Tram (and possibly elsewhere) no longer sync
oddly.
/🆑
2023-05-04 11:56:23 -07:00
ArcaneMusic 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.
2023-05-03 14:44:51 +00:00
ChungusGamer666 b093b12e03 Burning and acid components fixes and improvements (#74803)
## About The Pull Request

Generally cleans up code on both components.
Moves burn proc back to /obj level, I'm not sure why I moved it to /atom
level, it was unnecessary.
Acid component generalized so it can be used on any atom that uses
atom_integrity.
Fixes a bug where objects that stopped burning didn't update their burn
overlay properly due to bad removal logic and leftover code.
Standardizes examine messages on burning items by just slapping an
examine signal registration on the component.
Adds fire particles to items thanks to Lemon's PR:
https://github.com/tgstation/tgstation/pull/74524

## Why It's Good For The Game

Particles look cool

![image](https://user-images.githubusercontent.com/82850673/232605615-6e3bc804-bc68-4f09-8615-5e5946acbc10.png)

![image](https://user-images.githubusercontent.com/82850673/232664951-e0474331-495f-4717-8b0f-a647aedc4d9f.png)

Bugfixes are good
Code improvements are good

## Changelog

🆑
add: Burning items now get (small) smoke particles. Sick.
fix: Burning objects now clear their burning overlay properly.
qol: Examining burning objects will always tell you that they are
burning.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-04-23 17:50:58 -06:00
san7890 43473a4dac Turns Deer into Basic Mob - They Freeze At The Sight of Vehicles (#74784)
## About The Pull Request

deers only show up in the BEPIS but i decided that they would be easy
enough to turn into a basic mob (they were). it was so easy in fact that
i decided to dip my toes into coding AI behavior, and made them freeze
up whenever they see a vehicle. this required a lot of code in a bunch
of places that i was quite unfamiliar with before starting this project,
so do let me know if i glonked up anywhere and i can work on smoothing
it out.
## Why It's Good For The Game

one less simple animal on the list. deers staring at headlights is
pretty cool i think, neato interaction for when you do get them beyond
the joke the bepis makes

i'm also amenable to dropping the whole "deer in headlights" code if you
don't like that for w/e reason- just wanted to make them basic at the
very least
## Changelog
🆑
add: If you ever happen upon a wild deer, try not to ride your fancy
vehicles too close to it as it'll freeze up like a... you know where I'm
going with this.
/🆑

---------

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-04-23 11:31:03 -04:00
NamelessFairy 13d26c9bd7 Fixes being unable to switch modes on the Oingo Boingo Punch-face (#74758)
You couldn't toggle the mode for this since the if statement never
returned true, now it works.
2023-04-16 21:44:34 -05:00
SyncIt21 2cced93441 [NO GBP]Type cast, Var names, UI refactors for RCD stuff (#74660)
## About The Pull Request
Was requested in #74592

- Properly type casts the target into `turf/open/space` for mecha rcd
plating action,
- Removes single variable names throughout
- uses datum/ui component to get user for to_chat() instead of usr

## Changelog
🆑
refactor: correctly type casts the turf into open type for the rcd mecha
plating action
refactor: removes single letter variable names
refactor: uses datum/ui component to get user for to_chat() instead of
usr
/🆑
2023-04-14 19:51:41 -07:00
oranges 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'
2023-04-11 21:31:07 -07:00
SyncIt21 d48dc255d8 Final Patches for RCD related devices. (#74592)
## About The Pull Request
Final closing act for #74527, some more bugs to squash.

1. Fixes broken sprite for rack in RCD UI
![Screenshot
(153)](https://user-images.githubusercontent.com/110812394/230711179-4df6fc5f-6f6c-4680-bb0b-b1caba50152d.png)

2. Fixes #41114 mounted RCD can lay plating on chasm/ any open turf
again

3. Removes unused turf argument inside `try_clean()`, `try_wallmount()`,
& `try_decon()` procs because well it was unused

## Changelog
🆑
refactor: remove unused turf var inside wallmount procs
fix: broken rack sprite inside RCD UI
fix: mounted RCD now lays plating over chasms and open turfs
/🆑
2023-04-11 08:14:24 -07:00
Tim 4397d63a55 Split weapons_and_items.dmi icons into their own categories (#74363)
## About The Pull Request
This sprite file had been a dumping ground for miscellaneous sprites for
the past decade. It's bloated and full of random kinds of icons and even
has a few unused ones. It's time to reorganize them into their own
separate dmi's based on theme.

## Why It's Good For The Game
Better organization and easier access when looking for stuff.

## Changelog
🆑
imageadd: Split all icons in weapons_and_items.dmi to their own
categories
imagedel: Removed some unused icons
/🆑
2023-04-06 08:30:57 +12:00
Helg2 b5ebf5c942 Adds better parts for syndie mechs, some tooltips to mech maintenance mode and some little changes. (#74466)
## About The Pull Request
Kinda resusticates #72442 cause the whole conflict was stupid.
Adds t4 parts for dark gygax, mauler and reticence (for the sake of
shitspawn) and t3 for dark honker.
Formulas of better parts to understand the difference:

https://github.com/tgstation/tgstation/blob/aff9cf1b434c7a95d156ea20108d8b2bc015083d/code/modules/vehicles/mecha/_mecha.dm#L427-L439


Made examine text into span_notices so it's not just plane text.
Also added tooltips for maintenance. Screens to compare:

![image](https://user-images.githubusercontent.com/93882977/229368394-23ca7388-2640-4a82-8134-36a18878b687.png)

![image](https://user-images.githubusercontent.com/93882977/229368398-d4654b56-78e9-4321-80cc-cad31cfabef8.png)


Dark gygax will now spawn without access adding regime.
Tool interactions with mech will now have sounds. (wrench and crowbar)
Removing parts from mech will now put them in your hands, and not just
under the mech.
When inserting parts in mech they won't make some noisy noise, already
forgot which noise it was, but i changed it for some reason, so meh.

Also fixed that you can remove capacitors and scanning mods from mech
without proper maintenance as it works with cell. Closes
https://github.com/tgstation/tgstation/issues/71577
## Why It's Good For The Game
Syndie mechs are still week. Didn't see them in half a year.
## Changelog
🆑
qol: changed mech description to span_notices and just slightly comfier
to use.
qol: added tooltips for mech's maintenance mode.
balance: added t4 parts for mauler and dark gygax. And t3 parts for dark
honker.
fix: fixed that you can remove capacitor and scanmod from mech without
proper maintenance steps. Now you can't
/🆑
2023-04-03 21:16:38 -07:00
Zephyr ecbcef778d Refactors Regenerate Organs, and a few organ helpers (#74219)
## About The Pull Request

Refactors regenerate organs to be slightly more intelligent in handling
organ changes and replacements.
Noteably:
- We don't remove organs that were modified by the owner; such as
changing out your heart for a cybernetic
- We early break out of the for loop if they aren't supposed to have an
organ there and remove it
- We check for the organ already being correct, and just healing it and
continuing if it is

Also changes the names of some of the organ helpers into snake_case
### Mapping March
Ckey to receive rewards: N/A

## Why It's Good For The Game
## Changelog

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-03-26 17:54:36 +01:00
Tom a8b04138ca fixes skateboard kickflip fail message (#74132)
it was the wrong way around and showed the first to everyone around +
the second to yourself

## Changelog
🆑
fix: Failing a kickflip no longer shows the chat messages to the wrong
people.
/🆑
2023-03-21 17:18:25 -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
Kapu1178 4ab46358c0 Optimizes INVOKE_ASYNC by making it a macro and avoiding a proc call (#73264)
## About The Pull Request
This is quite literally the same behavior but faster, and also catches
improper arguments better than the old macro/proc approach.

Credit to Lohikar for writing the macro.
Port of https://github.com/DaedalusDock/daedalusdock/pull/196

Also, `world.ImmediateInvokeAsync()` never set a return value, so
expecting one was never valid behavior.

At MSO's request, the documentation of `spawn(-1)`:

As per the reference, calling `spawn()` with a negative value will
execute the spawned code until a blocking action (such as `sleep()`) is
encountered. Then, it will step outside of the spawned code, and
continue the proc. This is the same behavior as calling a `waitfor =
FALSE` proc. Specifically, under the hood, `spawn(-1)` creates a copy of
the callstack like `sleep()`, incase the spawned code is blocked and
needs to be rescheduled.

As an added bonus, `spawn(-1)` silences SHOULD_NOT_SLEEP errors, whereas
`waitfor = FALSE` does not.

## Why It's Good For The Game

ITS FREE FUCKING CPU TIME

---------

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2023-03-04 19:33:37 -08:00
jimmyl 5321b9a4dc Dont sleep brain mobs when their mech is destroyed (no forever-deaf-mute-whatever brains!) (#73643)
## About The Pull Request

brain mobs dont get slept on destruction

## Why It's Good For The Game

Fixes #72869
Fixes #73624
Fixes #57217

## Changelog
🆑
fix: MMIs/Positrons dont get slept forever when the mech theyre in gets
destroyed
/🆑
2023-02-25 23:46:40 -07:00
MrMelbert f3005a220b Fixes mecha speech indicators never going away (#73617)
## About The Pull Request

Mecha speech indicators mistakenly passed ALL hearers in view to
`flick_overlay_global`, rather than just mobs with clients, so it
runtimed when it meant to disappear.

I also added some client sanity to the associated procs... I'm not sure
if they're needed but it seems like they'd be valuable there?

## Changelog

🆑 Melbert
fix: Mecha speech indicators actually go away
/🆑
2023-02-24 18:12:40 -07:00
Jacquerel 4599842d7c Makes Shake() proc work (#73480)
## About The Pull Request

Fixes #72321
Fixes #70388

The shake proc didn't work and hasn't for ages.
I remember it having worked at some point, but it was quite a long time
ago.
I cannot guarantee that the end result here is the same as it was, the
reason here being that I have no idea how this proc ever worked in the
first place. My limited understanding of the `animate` proc implies that
the previous implementation as written would never have acted as you
would expect it to, but clearly at some time in the past it did work. A
mystery.

As a result of the previous, possibly because the proc never _did_ work
as expected and just did something which looked vaguely correct most of
the time, both the default values and the values people were passing
into this proc were completely ridiculous.
Why would anyone ever want to pixel shift an object with a range of _15_
pixels in all directions? That's half a full tile! And why would you
want it to do this for 25 seconds?
So I also changed the values being passed in, because you really want
pretty small numbers passed into here most of the time.

Here's a video of everything that vibrates:
https://www.youtube.com/watch?v=Q0hoqmaXkKA

The exception is the v8 engine. I left this alone because it seems to
try and start shaking while in your hands, which doesn't work, and I
don't know how to fix that. This has potentially _also_ never worked.

## Why It's Good For The Game

Now you can see intended visual indicators for:
- Lobstrosities charging.
- Beepsky being EMPed.
- The Savannah Ivanov preparing to jump.
- The DNA infuser putting someone through the spin cycle.
- The mystery box admin item I had no previous idea even existed (fun
animations on this one).
- Anything else which wants to use this proc to create vibrating objects
in the future.

## Changelog

🆑
fix: Lobstrosities and Tarantulas will once more vibrate to let you know
they're about to charge at you.
fix: The Savannah Ivanov will once more vibrate to let you know it's
about to jump into the air.
fix: The DNA infuser will now vibrate to let people know that it's busy
blending someone with a dead animal.
/🆑
2023-02-18 14:28:17 -07:00
Tim a1ada2c9ef Refactor, improve, and rename canUseTopic to be can_perform_action (#73434)
This builds on what #69790 did and improved the code even further.
Notable things:
- `Topic()` is a deprecated proc in our codebase (replaced with
Javascript tgui) so it makes sense to rename `canUseTopic` to
`can_perform_action` which is more straightforward in what it does.
- Positional and named arguments have been converted into a easier to
use `action_bitflag`
- The bitflags adds some new checks you can use like: `NEED_GRAVITY |
NEED_LITERACY | NEED_LIGHT` when you want to perform an action.
- Redundant, duplicate, or dead code has been removed.
- Fixes several runtimes where `canUseTopic` was being called without a
proper target (IV drips, gibber, food processor)
- Better documentation for the proc and bitflags with examples
2023-02-16 20:22:14 -05:00
Tim abadb373ab Fix durand shield overlay and light runtimes (#73411)
## About The Pull Request
The Durand shield overlay would not be placed on top when facing south
due to the planes not being set properly. My changes update the planes
whenever the dir gets updated.

There was also a lighting runtime due to using the wrong lighting proc
call that would throw this error:

```
/atom/proc/update_light()
	SHOULD_NOT_SLEEP(TRUE)

	if(light_system != STATIC_LIGHT)
		CRASH("update_light() for [src] with following light_system value: [light_system]")
```

Someone mixed up the lighting code since `set_light()` is meant to be
used by `STATIC_LIGHT` sources. The durand shield lighting source is
`MOVABLE_LIGHT`.

All I needed to do was remove the extra procs since we already have
`set_light_on(chassis.defense_mode)` that controls the `MOVABLE_LIGHT`.
Basically, someone added two different lighting systems to the same
object, so big oof.

## Why It's Good For The Game
Better mech visuals and one less runtime.

<details>
<summary>Before:</summary>


![dreamseeker_yKywMgB7j3](https://user-images.githubusercontent.com/5195984/218541070-277af6c5-facb-48c1-bf73-ef51a1e6b0e2.gif)

</details>

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


![dreamseeker_n94xpvzJyU](https://user-images.githubusercontent.com/5195984/218541159-b37dd33b-a3b3-411d-9704-f9be1efaf6aa.gif)

</details>


## Changelog
🆑
fix: Fix durand shield overlay to appear above the mech when facing
south. Also fixed a lighting runtime when shield would turn on/off.
/🆑
2023-02-15 18:46:03 -07:00
SuperSlayer 793e38e1b6 Buffs mech disabler (#72941)
## About The Pull Request

Mech disabler now is works like a shotgun, shooting 5 weak disabler
beams(15 damage, the normal disabler beam has 30). The energy drain is
increased to 100 from 30. Has a cooldown of 1.5 seconds.

The exact numbers(weapon scatter, damage, amount of projectiles) can be
discussed.

## Why It's Good For The Game

When you are trying to nonlethally deal with someone, a normal security
officer with their roundstart available equipment is more effective then
an expensive lategame mech, due to that fact that it is really slow,
cant use stunbattons and even if you manage somehow to stamcrit a person
with a mech disabler you still need some time to get out in order to
handcuff them. So mech disablers are useless, especially compared with
other mech weapons, like rocket launchers and ballistic guns. This PR
makes the mech disabler not trash, so roboticists would have a wider
choice of useful weapons when making a mech.

## Changelog

🆑
balance: Mech disabler now works as a shotgun, shooting 5 weak disabler
beams at one time.
balance: Mech disabler now uses 100 energy instead of 30, and it's
attack cooldown increased to 1.5 seconds instead of 0.8
/🆑
2023-02-13 22:11:30 -07:00
Zephyr 5b9c41098f Fix underlying armor logic and fix bug with constructed ripleys having zero armor (#73319)
## About The Pull Request

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

Messed up one of the armor procs; it changed the given values but never
carried over existing values.
So you would end up with an armor of that one specific value and nothing
else.

This wasn't actually used anywhere other than mecha, lava burning, and
sentient viruses, so the issue isn't that bad.
It's still an issue however.
## Changelog
🆑
fix: Mechs no longer have zero armor when built.
/🆑
2023-02-13 02:20:52 +00:00
kawoppi 0dc5a18012 adds a pimpin' ride bluespace bag overlay (#73374)
## About The Pull Request
Currently the pimpin' ride displays the normal trash bag overlay when
you put a bluespace trash bag on it. This PR adds a bluespace trash bag
overlay for it.
![bluespace
bags](https://user-images.githubusercontent.com/94711066/218288550-e467bd1a-ff3c-4438-929a-5fb738234b0a.PNG)
I thought this was in the game previously but I'm probably
misremembering since there didn't seem to be an existing sprite for it.
I'm not sure how this sits with the feature freeze since there is a code
change in the PR.
## Why It's Good For The Game
The other janicart has a different overlay for bluespace bags, so it's a
bit odd for the pimpin' ride not to have it.
## Changelog
🆑
imageadd: when equipped with a bluespace trash bag the pimpin' ride
janicart will now display a bluespace trash bag instead of a normal
trash bag
/🆑
2023-02-12 23:08:13 +00:00
John Willard c097f167b1 Completely removes do_mob and do_after_mob (#73117)
## About The Pull Request

This is a remake of #70242

Replaces all instances of ``do_mob`` and ``do_after_mob`` with
``do_after``.

## Why It's Good For The Game

All 3 of these are just copy pastes of eachother but some miss some
features (like do_after not checking for target loc change, which helps
towards fixing https://github.com/tgstation/tgstation/issues/66874
though it doesn't because mechs are setting ``do_after`` on the mob in
the mech) and signals only being used on ``do_after``.

## Changelog

🆑
fix: Mechs should now cancel out of drilling when they move.
/🆑
2023-02-02 21:17:20 +00:00
John Willard cd3e3159ba Checks if a machine has no research before connecting techweb (#72944)
## About The Pull Request

Currently all machines, if the config to not have a techweb link is on,
will set their node to science even if they were meant to be connected
to another (like through subtypes). This fixes that by checking to
ensure they don't have a techweb connected already before giving them a
new one.

Also as a minor fix, RD consoles will now properly add themselves to the
list of accessing RD consoles if they aren't linking to the default.
This list currently does nothing but I can see good uses of it in the
future.

## Why It's Good For The Game

Fixes an error that was found on a downstream, it's a worthwhile fix
that thankfully was caught this early.

## Changelog

Nothing player-facing.
2023-01-29 19:49:30 +08:00
Zephyr ae26e9f2f5 You can see and fix short circuits in mechs again (#72866)
## About The Pull Request

Mechs had the ability to short circuit, but lacked the logic to display
and repair that.
Resolves #72835
## Why It's Good For The Game
## Changelog
🆑
fix: NanoTrasen Engineering has identified and resolved an issue with
MechOS that prevented diagnostics for internal shorting
/🆑

Signed-off-by: GitHub <noreply@github.com>
2023-01-23 11:18:46 +01:00
Jeremiah 872e64fb05 Adds spaces around logical operators (#72603)
## About The Pull Request
Part of a prior PR that was closed (#72562). This version does not add
the check in CI.
## Why It's Good For The Game
The work is already done, so I figured why not.
## Changelog
N/A Nothing player facing

Co-authored-by: Jeremiah Snow <jlsnow301@pm.me>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-01-16 16:56:35 -08:00
SyncIt21 ec5c9dfd10 Stock Part Datumization Complete (#72559)
So i accidently reverted all my commits in #72511 when resolving a merge
conflict So ummm yeah fuck my bad anyway

## About The Pull Request
Finishes what was started in #71693 and completes the
[initiative](https://github.com/tgstation/dev-cycles-initiative/issues/1)

Except for `obj/item/stock_parts/cell` and its subtypes. All machines
now use `datum/stock_part` for its requested components & component
parts

Not sure if i caught every machine & stuff in the game so merge with
caution
## Changelog
🆑
code: datum stock part for every obj stock part
refactor: all machines & dependent experiments to use datum stock parts
/🆑
2023-01-11 07:53:36 -08: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
Andrew 0818d6ae4c Crafting/Cooking menu update (#71779)
## About The Pull Request

Updated crafting menu, adding a lot of new functions and recipes that
were not in the crafting menu before.

<img alt="cult"
src="https://user-images.githubusercontent.com/3625094/206009533-aec3a1dd-cbe5-45eb-8515-1b75fabb65c5.PNG">

<img alt="nH77dLyyGx"
src="https://user-images.githubusercontent.com/3625094/206009786-b6706f70-0599-40bf-b051-8f499de43abd.png">


![image](https://user-images.githubusercontent.com/3625094/206623881-12d8abfc-de5e-458e-a01c-3daac8dbe9bd.png)


https://user-images.githubusercontent.com/3625094/206009841-738e4a03-0660-45b7-8d83-15eeb6501967.mp4

## Why It's Good For The Game

It is easier to use, and it has a lot of recipes that were spread
throughout the game, some of which weren't even on the wiki.
Crafting and cooking now count about 1200 recipes in total, including
conditionally available ones.

## Changelog

🆑
qol: Rewrote the crafting/cooking menu UI
qol: Split crafting and cooking menus in two different menus
qol: Crafting is no longer blocking the entire UI, only the "Make"
buttons are disabled
qol: Added stack crafting recipes to the crafting menu
qol: Added cooking recipes that were absent in the crafting menu before
(tool recipes, machine recipes, reactions)
qol: Added option to search recipes by title
qol: Added option to filter recipes by required materials/ingredients
qol: Added food types to the cooking menu, highlighting diet of your
species (liked, disliked foods)
qol: Added total nutrition value of the result to the cooking menu
qol: Added option to filter cooking recipes by the food type of the
resulting food
qol: Added "Can make" category that lists all currently craftable
recipes throughout all categories
refactor: changed categories and reshuffled some items in them
code: Reagents now have default container to get an icon from the
reagent datum
code: Objects now have `desc_controls` var for OOC information about
mouse controls that are visible on examine, but not in the description
fix: Fixed alignment on many food icons
fix: Fixed missing icon for beef stroganoff
/🆑

Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
2022-12-25 12:27:49 -08: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
Fikou 91f8abe1c3 fixes simple/basic mob damage sounds in some places (#72120)
windows didnt use return values for attack_generic, so they never made
sounds
objects that broke also didnt play sounds because it tried to play the
sound in nullspace i think cuz its broken so its deleted
might also have happened with durand using shield
fixes those
2022-12-22 12:53:19 -06:00
jimmyl 100cb71111 Turned most syndicate mobs (+ viscerators) into basicmobs (#71871)
## About The Pull Request
Turns the syndicate simpleanimals into basicmobs: (+ stormtrooper, +
space variants) Base Mob, Knife syndies, pistol syndies, SMG
syndies,shotgun syndies, viscerators
also changes some instances of the simple_animal path into the basicmob
ones
Removes civillian syndicates which were useless and also completely
unused
Also removes mech pilots:
![2022-12-09
20_02_18-Window](https://user-images.githubusercontent.com/70376633/206777829-2e49e445-3532-4e8e-8e7c-8d9b0a3a14d0.png)

Also,
makes the basic targetting datums health check configurable
basic attack behavior can now fire in bursts


https://user-images.githubusercontent.com/70376633/206766607-cf2e3659-0c5e-4117-9af7-e573e35bdf80.mp4

https://user-images.githubusercontent.com/70376633/206766630-15b4469f-68be-44c7-9394-1f2b6fe07811.mp4

https://user-images.githubusercontent.com/70376633/206766613-69b42457-a03b-449d-a1b8-a5aa556c76e5.mp4

https://user-images.githubusercontent.com/70376633/206766619-5560a178-8d2f-4b22-adf1-22ace6f63a51.mp4

https://user-images.githubusercontent.com/70376633/206766627-e671d064-fd9e-4204-b823-aa2e07f7fc26.mp4

https://user-images.githubusercontent.com/70376633/206766633-108c1574-3554-4bc1-a9ac-8faed0ec4062.mp4
## Why It's Good For The Game

simpleanimal stinks basic mob good
syndicate AI was really bad to begin with so here we are

## Changelog
🆑
code: Turned most syndicate mobs into basicmobs, making their AI better
and (possibly) more deadlier!
del: Removed syndicate mech pilots and syndicate civvies
/🆑

Co-authored-by: kawoppi <94711066+kawoppi@users.noreply.github.com>
2022-12-22 00:47:28 -08:00
ShizCalev ae8ed395e1 Changes the missing food icon test to cover ALL /obj's (#71908)
Might as well cover everyyyyyyyyything. :)

Fixes https://github.com/tgstation/tgstation/issues/71953
Fixes https://github.com/tgstation/tgstation/issues/71983

🆑 ShizCalev
code: We now unit test all /obj's for missing icons. :)
/🆑


todo: Fix the fucked up icons.

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2022-12-13 17:51:40 -08:00
san7890 5f360bbe4c Fixes Duplicate Integrity Message for Mechas (#71884)
This PR is just made to fix duplication of examination texts when you
looked on a mecha, for example if something met a certain threshold, it
would say "It's heavily damaged" twice when you examined it.

This PR just makes a new proc called on examine that's overridden by
subtypes. I did it this way because mechas seemed to have their own
logic/tiering system to determine how busted it was, and I didn't want
to toy with the balance of the calculations should that matter.
2022-12-11 03:38:27 -05:00
tattle 9b1be9ef13 Investigate logs include ckey of source (if applicable) (#71833)
## About The Pull Request
All investigate logs start with [src], which can be any atom. So
sometimes names and items get printed twice. Adds ckeys to the
investigate_logs of living mobs.


![image](https://user-images.githubusercontent.com/66640614/206372340-3c50bc9d-b662-4a4d-b1ec-91c0b4db8a39.png)


## Why It's Good For The Game
Better logging, includes the ckey for living mobs in investigate logs,
and fixes some investigate_death logs that weren't properly attributed
to mobs.

## Changelog

🆑 Tattle
admin: investigate logs include ckey of source (if applicable)
/🆑

Co-authored-by: tattle <article.disaster@gmail.com>
2022-12-11 12:52:50 +13:00