Commit Graph

2894 Commits

Author SHA1 Message Date
EnterTheJake
20a41e8ee3 Voltaic Combat Cybernetic Heart. (#84174)
## About The Pull Request
Introduces the first anomalocked organ, a heart that makes you immune to
shocks and emps, while granting you the tenacity trait when you fall
into crit.


https://github.com/tgstation/tgstation/assets/102721711/b602dbb0-52ae-4b18-b3bc-9d19258ec3f8


## Why It's Good For The Game

You can find my player_dev_project on the tg discord.

https://discord.com/channels/326822144233439242/1249735775734468619

Essentially, this exists as an item to justify a heavy investment into
cybernetics and augmentations.

EMP is far too common to justify using them in a combat scenario, nukies
have lessened this issue with their shield module, and the crew can now
do so through late tech anomaly research.

*Features*

- locked behind anomaly tech (duh), you need a refined flux core
combined with the shell.
- Can be manually installed, it will however fuck you up if you do so.
- provides total immunity to shocks and emps.
- Increases your passive blood regeneration.
- Recharges any electrical devices on your person (stabilized yellow
slime).
- If you fall into crit, grants the tenacity (you can keep fighting
while you are in crit basically) and no damage slowdown trait for 30
seconds, you will also keep on regenerating health, it won't heal past
crit treshold however, (5 minutes cooldown).
- If removed through surgery or evisceration, it gets vaporized while
releasing a Tesla shock.

## Changelog

🆑
add: A new Anomaly organ has been introduced, The Voltaic Combat
Cyberheart!
/🆑
2024-06-28 09:48:05 +01:00
Andrew
0e32b0c19f New Microscope UI (#84298)
## About The Pull Request

Continuing the QoL things for Cytology, updated Microscope UI to be more
user-friendly.


![image](https://github.com/tgstation/tgstation/assets/3625094/c1740cd9-1371-4e15-b658-4dd468e45b7a)

Before:

![image](https://github.com/tgstation/tgstation/assets/3625094/e67f147a-07b9-45b6-b4ad-886227bc8132)

Plus some maintenance in micro organism code and QOL things for
microscope (removing sample with right click, dish swapping, balloon
alerts).

## Why It's Good For The Game

The UX for cytology got better.

## Changelog

🆑
qol: Updated Microscope UI
qol: Microscope is easier to use - you can remove dish with right click
and swap dishes
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-06-27 13:11:16 -07:00
SpaceLoveSs13
d59f5ad806 Techweb nodes DEFINED & bug fix (#84177)
## About The Pull Request

1. Techweb strings are now defined in
`code/__DEFINES/research/techweb_nodes.dm` many thanks to @ShizCalev
2. All places that used those strings have been updated with the
definitions as well.
3. `code/modules/research/ordnance/scipaper_partner.dm` had some old
boosted ids, they have been updated as well along
with their values.

## Why It's Good For The Game

fixes #84153 

- I found this through a runtime, but basically the boosted nodes missed
unit test checks. Having them defined should in future ensure that any
changes to them alert the maintainers. This will help in furthur
modularizing the code.

- As for the nodes themselves, I have put the exact nodes as much as
possible so they dont differ much from previous gameplay and how they
worked. Researched nodes that used to give points to those experiments,
will continue to do so, but albeit at a slower rate. This is because the
research point generation rate overall now has been increased.

## Changelog
🆑 ShizCalev, SpaceLove
refactor: Techweb strings are defined now so to maintain modularity
balance: Research papers will have less overall point generation.
/🆑

---------

Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
2024-06-27 01:14:57 -04:00
GPeckman
87c3b1599c Protolathe printing speed is affected by parts again (#84349)
## About The Pull Request

Prior to a refactor of protolathe code, the time needed for a protolathe
to print items was affected by the tier of parts it had, just like
material usage. Said refactor removed this behavior, and given that this
removal was not mentioned in the changelog and that comments in the code
still refer to this behavior, I have to assume that this was a mistake.
So this PR just re-adds that old behavior.
## Why It's Good For The Game

Bugs are bad.
## Changelog
🆑
fix: Protolathes/Circuit Imprinters/Techfabs with better parts should
now print items faster again.
/🆑
2024-06-27 00:02:04 -04:00
SyncIt21
9c9a5d28ff Some alt & ctrl click improvements (#84203)
## About The Pull Request
Improved code quality of both so they resemble each other. Some of the
new specs are as follows

1. Moved` COMSIG_CLICK_ALT` & `COMSIG_CLICK_ALT_SECONDARY` up i.e.
before `can_perform_action()` making them pure hooks not bound by any
action checks giving components full control over them
2. Removed range check(`CAN_I_SEE`) & view check(`is_blind()`) out of
the base alt click proc. They now only apply to living mobs and don't
apply to ghosts(ghosts don't get blind & see everything) & revenants
(the range check still applies for revenants though).

This was actually a bug because these 2 checks were only meant to see if
the loot panel could be opened (as stated in
https://github.com/tgstation/tgstation/pull/83736#discussion_r1628097941)
but because they are at the top of the proc they also apply to all alt
click actions which is not intended. Also, by moving these checks down
to mob subtype levels some of the snowflake checks like this
7579e0e173/code/_onclick/click_alt.dm (L23)
can be removed. We should not check for subtypes within the parent type
proc but instead have subtypes override their parent procs to implement
custom behaviour
3. Removed redundant signals like` COMSIG_XENO_SLIME_CLICK_ALT` in
favour of just `COMSIG_MOB_ALTCLICKON`
4. While looking for alt click signal overrides I found alt click for
style meter was run timing, that's fixed now

## Changelog
🆑
fix: alt click runtime no more when using style meter
code: improved alt & ctrl click code
/🆑
2024-06-25 16:06:59 -07:00
Vekter
6d9dbb9897 Requires Unregulated Bluespace Research for the Event Horizon Anti-Existential Beam Rifle (#84312)
## About The Pull Request

The Event Horizon Anti-Existential Beam Rifle now requires Unregulated
Bluespace Research, which itself requires both Bluespace Parts and
Illegal Tech. This puts it in the same tier as the Desynchronizer.


![image](https://github.com/tgstation/tgstation/assets/7019927/90ce5fd8-bc0e-4d97-828e-a9daf368d06a)

## Why It's Good For The Game

The original intent for the weapon was for it to be an extremely
late-game option as the end-all, be-all gun where only one really could
exist at a time. This thing is an absolute _monster_ in that it has very
little cooldown, can hit things multiple screens away, and gibs whoever
it hits. I'm down for it - it's fun and stupid and goofy and something I
would love to see _sometimes_.

I saw it in like 4 rounds in a row earlier today. Fuck.

I feel like it's either "make it harder to get" or "nerf it into
obscurity" and I really don't want what we replaced the meme rifle with
to end up being as shitty as the meme rifle was.

Worth noting that a lot of people were recommending a change that would
make the rifle require only a single vortex core, but would require and
consume a vortex core when it fires, meaning it can only be fired a
total of like 4-5 times in a round. That sounds great but I don't know
how to go about coding it and I feel like a change needs to be made
sooner rather than later, so we're doing this for now. If someone comes
back and implements that instead before this gets merged, I'll close
this PR.

Also @optimumtact told me to ping him when I post this.
## Changelog
🆑 Vekter
balance: The Event Horizon Anti-Existential Beam Rifle now requires
Unregulated Bluespace Research to be constructed.
/🆑
2024-06-25 23:06:41 +00:00
NewyearnewmeUwu
9d3ad2b7a6 Adds a means to clean up multiple monkey bodies using the xenobio console. (#83810)
## About The Pull Request
This adds a functionality to the 'feed slimes' ctrl-click action for the
xenobio console. Before placing a monkey, it checks for dead and
therefore recycleable monkies, and then calls the proc to recycle said
monkeys. It will also not place a monkey if it clears dead monkeys,
meaning you can avoid adding more monkeys if you want to empty the pen.
## Why It's Good For The Game
Pixel hunting for dead monkeys is just dogshit and this is way better.
It's so easy to accidentally place monkeys while trying to clear ONE
dead monkey.
## Changelog
🆑
qol: The xenobio console's monkey placing command also clears dead
monkeys on the tile.
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2024-06-25 07:11:50 -04:00
SmArtKar
5b25331e7a Adds rounding to research points to prevent floating point errors from occuring (#84282)
## About The Pull Request

Right now research points sometimes bug out and get additional .000...1
added to them due to a floating point error. I just added rounding to
only keep one digit after the point.

## Why It's Good For The Game

No more annoying numbers in the RND console

## Changelog
🆑
fix: RND console now properly rounds research points
/🆑
2024-06-25 00:18:16 -04: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
Goat
a0060f8820 Adds boards for the book binder and scanner (#83863)
## About The Pull Request
Adds boards for the book binder and scanner. The scanner requires one
scanning module while the binder requires one servo to make. Research
for the board was added to the computer tech research node as that's
where the other book related research was. Boards are available to print
at the service techfab.

![libraryboards](https://github.com/tgstation/tgstation/assets/126099705/ce6f4174-9939-4020-a7d4-c0c6593479f3)

## Why It's Good For The Game
Being able to (re)make the library is good. Irreparable machine is bad.
Writing down your work and being unable to scan it into the archive is
not good. Also allows the machine to be moved if needed.
2024-06-24 16:53:11 -05:00
IsaacExists
937e8b82e2 Embedding and Nutriment Pump Typos (#84239)
## About The Pull Request
Fixes small typo errors in the embedding text when removing shrapnel
from patients, or yourself. Added the closing parenthesis to the
messages missing them, and removed the unnecessary punctuation inside
them.

Also fixes a typo in the nutriment pump cybernetic implant description,
saying "with" instead of "will".
2024-06-24 16:38:23 -05:00
Andrew
42e4941f31 Autopsy experiments available roundstart [NO GBP] (#84198)
## About The Pull Request

Made tecweb mark autopsy experiments as completed while the node with
the experiments is not yet unlocked.

## Why It's Good For The Game

Oversight in my tech tree update.
2024-06-24 16:05:18 -05:00
FlufflesTheDog
5c6e837dee Fix printed structures/machines having a random offset (#84272)
## About The Pull Request
Checks for isitem() when printing at a lathe, to avoid offsetting things
that can't be picked up.
Also removes a redundant nullcheck in machine/powered(), get_area
already covers being in nullspace, and setting a machine that doesn't
use power to be unpowered is erroneous- the area based power updating
early returns for such machines, leaving them forever unusuable.
## Why It's Good For The Game
Having structures (or possibly machines) offset on their tile looks
really not good, and can't generally be fixed in-game.
2024-06-24 15:41:17 -05:00
Andrew
881dd195f1 Techweb tweaks [NO GBP] (#84086)
## About The Pull Request

PR for collecting techweb feedback post merge and address valid issues
of #84024.

People seem to dislike the abundance of new experiments in the middle of
the tree, so reducing some requirements for those for now.

Also updated NT frontier app a bit, as people are confused with the
shell experiments.


![image](https://github.com/tgstation/tgstation/assets/3625094/8ce91935-c374-443c-84b4-ebee14d6bac1)

## Why It's Good For The Game

Balancing out the new tree.

## Changelog

🆑
balance: Added ordnance to extra access of geneticists and roboticists
balance: Reduced parts scanning tests' machine count to 4 from 8
balance: Reduced augmented organs scanning tests mob count to 1 from 2
balance: Reduced equipped mech scanning test count to 1 from 2
balance: Added polycrystal option to bluespace crystal scan test 
fix: Allowed NTNet relay in away circuit imprinter for NT Frontier app
qol: NT Frontier app installed on RD and Scientists` PDAs by default
qol: Updated NT Frontier app to be more user-friendly
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
2024-06-20 19:15:30 +01:00
Rhials
7b1a0daad2 DRAGnet snares now use a dedicated beacon instead of the station teleporter (#84118)
## About The Pull Request

This sets up an alternative to the DRAGnet snares using the teleporter
to determine the destination of their snare teleport -- The DRAGnet
beacon.

![drag
net](https://github.com/tgstation/tgstation/assets/28870487/0084d4d9-378f-4896-bc88-0685d6407999)

Rather than using a convoluted system that routes via the teleporter,
DRAGnets can now by synced with a DRAGnet beacon. When snare rounds are
fired and successfully teleport a target, they will instead be sent to
the synced beacon. Syncing can be done by either pressing the gun to the
beacon or vice-versa.

These beacons can be wrenched into place, then swiped with a security ID
to block them from being unwrenched. An emag will unlock and unwrench
the beacon, and fry its access control.

To facilitate this change, roundstart DRAGnet armory spawns are now done
through spawners (like the other weapons), which includes a single
beacon to be used by the two guns. You can print more with basic sec
tech, and one is included in the DRAGnet crate from cargo.

The teleport is also slightly more accurate, to make it more consistent.
As usual, if not synced to a beacon, DRAGnets will just teleport your
target willy-nilly.
## Why It's Good For The Game

The current system is both clunky and prone to mishaps, dissuading
players from engaging with it. The "active" teleporter concept has
always been a bit of a mystery to players, and when a system for
properly using the DRAGnet teleport is set up, it's incredibly easy to
break even on accident. Every time you teleport a prisoner you have to
pray that no bumbling space explorer decided to reroute the teleporter
to the abandoned satellite.

This system is much more clear and reliable. It's also more versatile,
allowing for multiple teleport networks to be set up simultaneously.
Security is starved for creativity at times. They deserve to be able to
do some wacky dynamic stuff with their tools.
## Changelog
🆑 Rhials
balance: DRAGnets now come with a beacon they can be synced to, which
will set the destination for the snare round's teleport ability.
/🆑
2024-06-20 10:19:30 -07:00
necromanceranne
4739cedebc Event Horizon Anti-Existential Beam Rifle. The ultimate conclusion to the arms race and the sniper's art. (#83934)
## About The Pull Request

Replaces the Particle Acceleration Rifle, or the Beam Marksman Rifle,
with the Event Horizon Anti-Existential Beam Rifle.

In short, it shoots black holes.

It takes five cores to make.

It pretty much kills everything you point it at and their immediate
bystanders as well.

You can do this from the relative safety of a whole four screens away
thanks to it having a scope.

There can only ever be one vortex anomaly made in the round. The recipe,
however, always requires the maximum number of cores that can be made in
a round. If the number goes up for some reason (maybe someone wants to
add more vortex items), so does the total number of cores needed to make
an AEBR.

## Why It's Good For The Game

Firstly; the beam rifle? Awful. Jank code. Bad performance. Ancient
balancing considerations. Just too strong to bring out regularly against
specifically blobs, but completely fucking useless against anyone else.

So I'm hitting all these problems at once. I reduced a 600 line file to
less than 60. I've removed all that bad code. I've also made it
specifically unable to combat blobs at all because singularities send
blobs off to safety.

Secondly; this is maybe the first example of 'more cores = bigger
power'. The rifle was already utterly trash to have around, and I just
didn't think the way it worked currently could really excite anyone
enough to go on a big ol' quest to get it. Solution?

You will cause a shuttle call if you get this weapon.

## Changelog
🆑
add: Replaces the Particle Acceleration Rifle with the Event Horizon
anti-existential beam rifle. It shoots black holes. You can make this
in-game. That's right, YOU!
balance: Only one vortex anomaly can be made in a round.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2024-06-20 13:58:21 +01:00
SyncIt21
4662a06571 Techfabs print 5x cable coil (#84067)
## About The Pull Request
- Fixes #84050

## Changelog
🆑
fix: Techfabs now print 5x cable coil
/🆑
2024-06-19 11:24:33 -07:00
Andrew
fbac822e68 Compact Compressor UI (#84116)
## About The Pull Request

Made the tank compressor UI more compact, removing the data on gas
mixes.

## Before:


![image](https://github.com/tgstation/tgstation/assets/3625094/cd857de3-6c92-46f7-9eee-9a4a801421fb)

## After:


![image](https://github.com/tgstation/tgstation/assets/3625094/51f09447-c6e8-4ac2-ac60-c2d4821adaff)

## Why It's Good For The Game

The old UI was overcomplicated, the gas mixes can be analyzed with gas
analyzer.

## Changelog

🆑
refactor: Compressor UI to TypeScript
qol: Simplified Compressor UI layout
/🆑
2024-06-19 11:04:03 -07:00
Andrew
f5f9c5b0de Power cell tiers consistency (#84074)
## About The Pull Request

Tier 3 had both 20 and 30 MJ cells for some reason, while 10 MJ cell was
considered tier 2.

Now the scaling is proper: 10 MJ is tier 1, 20 MJ is tier 2, and so
on...

Also updated plasma crystal sprite, and gave unique sprites to the
smallest cells.


![image](https://github.com/tgstation/tgstation/assets/3625094/308a88b2-a834-4256-894d-88743311c0b4)

## Why It's Good For The Game

The scaling was off, and the sprites made them look out of place for
their tier.

## Changelog

🆑
fix: Made 10 MJ & 20 MJ cells properly correspond to tiers 1 & 2 in
lathes.
image: Updated cell sprites to correspond to other stock parts of their
tiers.
image: Updated plasma cell, 500KJ cell and 2.5MJ cell sprites
/🆑
2024-06-19 08:34:37 -04:00
Andrew
5f36ef1d6e New Tech Tree (#84024)
## About The Pull Request

Reshuffles the tech tree nodes, adding reagent purity and cybernetic
organ scan experiments. The total point requirements barely changed.

Made the discount experiments unlock nodes for free, instead of
providing partial discounts, to provide more incentive to actually do
them.

Also devided all points by the amount generated per second, for
convenience. Now points correspond to seconds.

<details> 
  <summary>New tech tree</summary>
<img width="4320" alt="Tech New"
src="https://github.com/tgstation/tgstation/assets/3625094/77afdec7-9df3-47b7-8df0-5b9261e9e0d6">
</details>

## Why It's Good For The Game

- Breaks bloated general nodes into more specialized nodes, making the
tree more balanced
- Combines scattered nodes dedicated to a single design into specialized
nodes, reducing the number of nodes
- Reshuffles the unlocks within specialized tree to adjust progression
on some trees to follow the idead: Cheap nodes first, then nodes that
require experiments or nodes of neighbouring trees, then expensive nodes
with end-game tech.
- You no longer need a dissection experiment to unlock a microwave,
every experiment is relevant to the tree unlocked by it
- With specialized nodes, it is easier to pick a node for the new things
that people add
- Better foundation for potential per-department point system. It will
be easier to put it on top of a cleaner tree
- The nodes are separated in tiers, with progressively increasing costs,
so that early tech is cheap and easy to research with just points, but
later tech is more expensive, making the discount experiments for those
more likely to be performed.

## Changelog

🆑
balance: Reshuffled tech tree, making nodes more specialized
qol: Research points devided by the amount generated per second, so now
research points correspond to seconds
add: Introduced reagent purity scan experiments (required for Cryostasis
node)
add: Introduced synthetic organ scan experiment (required for top tier
cyber organs)
add: Added a variant of machinery scan experiment that accepts any
machines with upgraded parts (required for tier 3 parts)
del: Removed material scanning experiments from the tech tree
/🆑
2024-06-17 13:21:48 -04:00
Jacquerel
920cd7459d Neutralised anomalies respect the core limit (#83964)
## About The Pull Request

This PR changes it so that if you refine an anomaly by neutralising it,
it respects the same limit on number of anomaly cores as refining one
you bought from Cargo.
If it would produce an illegal core, it will create a mostly useless
inert core which you can sell at cargo for 80% of the price of buying a
raw core.

## Why It's Good For The Game

https://hackmd.io/@tgstation/r1tzxpwPL
This was a requirement in the original design doc which just never made
it into the game.
We want to be able to control how many cores of each type can possibly
exist in a round, as this is what allows them to have the "these items
can be really busted" allowance.

## Changelog

🆑
fix: Neutralising an anomaly cannot produce more anomaly cores than are
supposed to exist in a single round
/🆑
2024-06-15 11:37:04 +12:00
BurgerLUA
e87045b377 Tweaks some instances of get_safe_turf so things like the nuclear disk doesn't accidentally teleport to the Icebox Syndicate Base (#83012)
Yes, I know preventing the nuke disk teleporting to the icebox syndicate
base (or possibly the wendigo arena) is removing soul. Please don't kill
me :(

## About The Pull Request

Adds some missing variables to instances of get_safe_turf() so they will
only teleport to the given z-level.
Replaces some instances of get_safe_turf() with
get_safe_random_station_turf().

## Why It's Good For The Game

First, the differences between get_safe_turf() and
get_safe_random_station_turf():

### get_safe_turf()
- gets a random safe turf on a z-level (usually any of the staiton
z-levels), not accounting for the /area/
- should be used if you don't care if it spawns on the station or not,
or if you need to specifically teleport to a z-level
- not very expensive performance wise

###  get_safe_random_station_turf()
- gets a random safe turf that will always be a station area, ignoring
z-level.
- should be used if you NEED the turf to be on a station's area
- slightly more expensive performance wise than get_safe_turf, but still
very cheap

Some code was using get_safe_turf() when it should've been using
get_safe_random_station_turf(), and some code that should be using
get_safe_turf() were incorrectly using the zlevels arg instead of zlevel
arg (Yes, there is a difference), or didn't include it at all.

All the changes were made to my best judgement. If you're curious about
a change, please ask and I will explain why I did it.

## Changelog

🆑 BurgerBB
fix: Tweaks some instances of get_safe_turf so things like the nuclear
disk doesn't accidentally teleport to the Icebox Syndicate Base
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2024-06-14 21:57:33 +01:00
jimmyl
2589b63e35 Flatpacker (#83836)
## About The Pull Request

adds the flatpacker, it flatpacks machines
![2024-02-08
19_47_34-Window](https://github.com/tgstation/tgstation/assets/70376633/331c85e2-cdac-4ebe-9aac-d83c514bcd23)
it is unlocked at industrial engineering
the default print time is 4.5 seconds, reduced by the servo tier divided
by 2
matter bins increase material capacity
better servos decrease material cost, and the flatpacker cannot print a
machine if it contains parts that are of a tier larger than the servos
tier

explained in this vid



https://github.com/tgstation/tgstation/assets/70376633/c26e4379-f49b-4b1d-a70c-61f1ba96a9e0





## Why It's Good For The Game

machine construction sucks, this should be more convenient, this does
not replace machine construction at all
compared to machine frames while this is faster and more convenient, it
is significantly more costly in materials, and a better servo is needed
to use higher tier parts, and the printed machines are always the lowest
required tier

## Changelog
🆑
add: the flatpacker, a machine unlocked at industrial engineering
/🆑

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
2024-06-14 20:39:29 +00:00
Andrew
832cecdbb1 New Slime Sprites (#83891) 2024-06-14 00:01:38 -04:00
Afevis
0562e7dfaf Fixes autolathes printing the wrong number of cables (#83805)
Fixes #83798

🆑 ShizCalev
fix: Autolathes now print the correct number of cable coils.
/🆑

also cleaned up an unused maxstack var
2024-06-13 20:49:51 +00:00
SyncIt21
47be0bffc2 Ctrl click refactor (#83784)
## About The Pull Request
Same idea as #82656 but for ctrl click & ctrl shift click cause why not

- Does your signal & `can_perform_action()` checks using
`interaction_flags_click` flags before delegating the event down to
`ctrl_click()` proc.
- The one new change now is that `ctrl_click()` proc is now blocking,
meaning returning `CLICK_ACTION_SUCCESS` or `CLICK_ACTION_BLOCKING` will
stop the object from getting grabbed/pulled. So remember to return these
values if you want to stop the grab action or return `NONE` if you want
to process the click but still want the object to get grabbed as well

## Changelog
🆑
refactor: Ctrl click & Ctrl shift click has been refactored. Please
report bugs on GitHub
/🆑
2024-06-13 13:29:45 -07:00
SyncIt21
b6369a47b4 Mouse drag & drop refactored attack chain (#83690)
## About The Pull Request
Mouse drag & drop has been refactored into its own attack chain. The
flowchart below summarizes it

![Flowchart](https://github.com/tgstation/tgstation/assets/110812394/d92047ff-d94c-44a6-9e87-354c3d525021)

Brief summary of each proc is as follows

**1. `atom/MouseDrop()`**
- It is now non overridable. No subtype should ever touch this proc
because it performs 2 basic checks
  
a) Measures the time between mouse down & mouse release. If its less
than `LENIENCY_TIME`(0.1 seconds) then the operation is not considered a
drag but a simple click

b) Measures the distance squared between the drag start & end point. If
its less than `LENIENCY_DISTANCE`(16 pixels screen space) then the drag
is considered too small and is discarded

- These 2 sanity checks for drag & drop are applied across all
operations without fail
  
**2. `atom/base_mouse_drop_handler()`**
- This is where atoms handle mouse drag & drop inside the world. Ideally
it is non overridable in most cases because it also performs 2 checks
- Is the dragged object & the drop target adjacent to the player?.
Screen elements always return true for this case
  
- Additional checks can be enforced by `can_perform_action()` done only
on the dragged object. It uses the combined flags of
`interaction_flags_mouse_drop` for both the dragged object & drop target
to determine if the operation is feasible.
     
We do this only on the dragged object because if both the dragged object
& drop target are adjacent to the player then `can_perform_action()`
will return the same results when done on either object so it makes no
difference.

Checks can be bypassed via the `IGNORE_MOUSE_DROP_CHECKS` which is used
by huds & screen elements or in case you want to implement your own
unique checks

**3. `atom/mouse_drop_dragged()`**
- Called on the object that is being dragged, drop target passed here as
well, subtypes do their stuff here
- `COMSIG_MOUSEDROP_ONTO` is sent afterwards. It does not require
subtypes to call their parent proc

**4. `atom/mouse_drop_receive()`**
- Called on the drop target that is receiving the dragged object,
subtypes do their stuff here
- `COMSIG_MOUSEDROPPED_ONTO` is sent afterwards. It does not require
subtypes to call their parent proc

## Why It's Good For The Game
Implements basic sanity checks across all drag & drop operations. Allows
us to reduce code like this


8c8311e624/code/game/machinery/dna_scanner.dm (L144-L145)

Into this

```
if(!iscarbon(target))
	return
```

I'm tired of seeing this code pattern `!Adjacent(user) ||
!user.Adjacent(target)` copy pasted all over the place. Let's just write
that at the atom level & be done with it

## Changelog
🆑
refactor: Mouse drag & drop attack chain has been refactored. Report any
bugs on GitHub
fix: You cannot close the cryo tube on yourself with Alt click like
before
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2024-06-13 13:28:41 -07:00
MrMelbert
ff6b41aa07 Afterattack is dead, long live Afterattack (#83818)
## About The Pull Request

- Afterattack is a very simple proc now: All it does is this, and all
it's used for is for having a convenient place to put effects an item
does after a successful attack (IE, the attack was not blocked)


![image](https://github.com/tgstation/tgstation/assets/51863163/1e70f7be-0990-4827-a60a-0c9dd0e0ee49)

- An overwhelming majority of afterattack implementations have been
moved to `interact_with_atom` or the new `ranged_interact_with_atom`

I have manually tested many of the refactored procs but there was 200+
so it's kinda hard

## Why It's Good For The Game

Afterattack is one of the worst parts of the attack chain, as it
simultaneously serves as a way of doing random interactions NOT AT ALL
related to attacks (despite the name) while ALSO serving as the defacto
way to do a ranged interaction with an item

This means careless coders (most of them) may throw stuff in afterattack
without realizing how wide reaching it is, which causes bugs. By making
two well defined, separate procs for handing adjacent vs ranged
interactions, it becomes WAY WAY WAY more easy to develop for.

If you want to do something when you click on something else and you're
adjacent, use `interact_with_atom`
If you want to do something when you click on something else and you're
not adjacent, use 'ranged_interact_with_atom`

This does result in some instances of boilerplate as shown here:


![image](https://github.com/tgstation/tgstation/assets/51863163/a7e469dd-115e-4e5b-88e0-0c664619c878)

But I think it's acceptable, feel free to oppose if you don't I'm sure
we can think of another solution

~~Additionally it makes it easier to implement swing combat. That's a
bonus I guess~~

## Changelog

🆑 Melbert
refactor: Over 200 item interactions have been refactored to use a
newer, easier-to-use system. Report any oddities with using items on
other objects you may see (such as surgery, reagent containers like cups
and spray bottles, or construction devices), especially using something
at range (such as guns or chisels)
refactor: Item-On-Modsuit interactions have changed slightly. While on
combat mode, you will attempt to "use" the item on the suit instead of
inserting it into the suit's storage. This means being on combat mode
while the suit's panel is open will block you from inserting items
entirely via click (but other methods such as hotkey, clicking on the
storage boxes, and mousedrop will still work).
refactor: The detective's scanner will now be inserted into storage
items if clicked normally, and will scan the storage item if on combat
mode
/🆑
2024-06-11 21:58:09 -07:00
Time-Green
fde2eb3177 NEW BEPIS: Positronic sphere (#83688)
## About The Pull Request

Adds a new positronic brain variant to bepis tech
To save materials we took the corners off but now they can roll
It can roll around, knock items over and push other posibrains away
You can also kick it across the room and it's a lot cheaper because you
cut the corners off


https://github.com/tgstation/tgstation/assets/7501474/e4f913e8-cf2f-455a-b2eb-1654468df708

## Why It's Good For The Game
A chorus of whining posibrains is like heroine to the ears, now they can
aggresively shit around the robotics lab while whining for their DURAND
or cyborg shell, but the robo can also punt them into the disposal bin

## Changelog
🆑
add: Adds a positronic sphere to bepis tech and roboticist mail goodies.
It can now wreack havoc across the robotics lab while whining for a
DURAND body, but you can also punt it!
/🆑

---------

Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2024-06-09 14:52:00 +01:00
tmyqlfpir
f6d28662a3 Add circuit component cameras (#83578)
## About The Pull Request
This PR introduces a limited set of camera components that can be used
by surveillance security consoles and the PDA/laptop camera app.

<img width="366" alt="components"
src="https://github.com/tgstation/tgstation/assets/80724828/0e628863-9998-46d6-8822-e0a44543b4c2">

There is four camera components, each limited to a specified shell
circuit type.

Additionally, drone circuit shells can now use the recharge stations
too, much like how mobs with BCIs can recharge.

### New Components

<img width="136" alt="drone camera"
src="https://github.com/tgstation/tgstation/assets/80724828/fd045871-56bf-44a6-bb4f-ebe895d56d3d">

* Drone Camera
This camera component captures the surrounding area. It has an option to
set the camera range (near 5x5/far 14x14).

<img width="136" alt="bci camera"
src="https://github.com/tgstation/tgstation/assets/80724828/16bf2dd1-823b-4d66-8249-5d0f1bb1b779">

* BCI Camera
This camera component uses the active user's eyes as a camera function.
If the user's sights are damaged, the range will be forced to the near
setting. If the user is unconscious/dead/blinded or has no eyes, the
stream will be cut off.
It has an option to set the camera range (near 5x5/far 14x14).

<img width="136" alt="polaroid camera"
src="https://github.com/tgstation/tgstation/assets/80724828/7c4d53df-b4af-4f7c-8942-a63842510720">

* Polaroid Camera Add-On
This camera component streams to a camera network. The camera range is
hardcoded to the near setting (5x5).

<img width="136" alt="airlock camera"
src="https://github.com/tgstation/tgstation/assets/80724828/5d9e9d55-49fc-45a7-99c8-aaf1ae08f6d1">

* Airlock Camera
This camera component streams to a camera network. The camera range is
hardcoded to the near setting (5x5).

### Features

* The cameras can be EMP'd and will be disabled for 90 seconds if
successful
* When the cameras are active, they will actively drain the cell's power
per second (near range uses 3kJ & far range uses 8kJ)
* Advance camera console/AIs can use these cameras, however the camera
light is disabled (they will be useless in dark areas)

### Screenshots In Action
<details>
This is the drone camera viewed on a security camera console<br>
<img width="425" alt="near"
src="https://github.com/tgstation/tgstation/assets/80724828/e5247828-0fee-4552-9e70-5e5ee897c117"><br>
This is the same drone, now set to the far range setting<br>
<img width="425" alt="far"
src="https://github.com/tgstation/tgstation/assets/80724828/e58e3e85-aa90-4f1a-9dff-957c65764b77"><br>
</details>

## Why It's Good For The Game
This promotes emergent gameplay and improves the overall usefulness for
drones as they can be 100% used remotely.

## Changelog
🆑
add: Added new circuit camera components
qol: Circuit drones can now recharge at recharge stations
/🆑

---------

Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
2024-06-08 10:49:49 +00:00
grungussuss
105520edd8 reactive armor spelling (#83724)
## About The Pull Request
All instances of reactive armor are now reactive armor, instead of some
being "armour"
## Why It's Good For The Game
Consistency
## Changelog
🆑 grungussuss
spellcheck: all instances of reactive armor are now spelt the same
/🆑
2024-06-07 22:16:02 -04:00
SyncIt21
08ae5a6a9e Fixes techfab print runtime for non apc areas (#83768)
## About The Pull Request
Same problem for techfabs as mentioned in #83587

## Changelog
🆑
fix: techfabs don't runtime & hang when printing in no apc areas
/🆑
2024-06-07 13:32:22 -04:00
Waterpig
63f5f65ef6 Borgs: the moduling (Various fixups to borg module code) (#83116)
## About The Pull Request

- Gets rid of the item addition copypaste code (Why nobody did this for
7 years is beyond me)
- Adds variable and proper checks for if a module is already installed
(Borgs will no longer eat up unlimited masses of lavaproof track
upgrades, among others) (Technically this never allows duplicates, at
least currently, as I don't recall any modules being capable to used
multiple times intentionally without also deleting themselves with
single_use)
 - Unsingleletters most if not all of `robot_upgrades.dm`

## Why It's Good For The Game

Makes the borg module code much cleaner, makes it significantly easier
for new ones to be added. Fixes unintended behaviour with some modules
being able to stack, which until now was always solved by copypasting
code.

## Changelog

🆑
fix: Fixed some borg modules just being constantly eaten up by borgs
even when they shouldn't allow duplicates
refactor: Borg module code now has better handling for adding/removing
items, and to prevent duplicate module usage (Unless one wishes to
override the behaviour.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
2024-06-01 20:52:10 +00:00
grungussuss
35952cd941 print 5 cable coils instead of 1 in lathes (#83601)
## About The Pull Request
What the title says.
## Why It's Good For The Game
It is incredibly tedious to get a large amount of cables from lathes,
considering you need a lot most of the time (especially in engineering),
it should be printing way more than one piece of cable.
## Changelog
🆑 grungussuss
qol: lathes will now print cables coils in packs of 5
/🆑
2024-06-01 18:03:50 +02:00
tralezab
af33a5fb06 Fish update just dropped. New fish, aquarium type, two traits and a research node. (#83508)
## About The Pull Request

### New fish

#### anxious zipzap
An incredibly anxiety-ridden and electroreceptive fish. Worried about
the walls of its tank closing in constantly. Both literally and as a
general metaphorical unease about life's direction.

It produces electricity, and HATES being with any other fish. One other
zipzap is allowed at most.


![image](https://github.com/tgstation/tgstation/assets/40974010/6a1a31f3-1c84-4b5e-b8ca-652c5007813a)

#### monocloning jumpercable
A surprisingly useful if nasty looking creation from the syndicate fish
labs. Drop one in a tank, and watch it self-feed and multiply. Generates
more and more power as a growing swarm!

A far better option for power generation than the zipzap, but it's a
syndicate fish. Get an emag or get very lucky!


![image](https://github.com/tgstation/tgstation/assets/40974010/7f4aaf32-919c-40d9-890f-72ea9f91ac3c)

Working spacebase example


![image](https://github.com/tgstation/tgstation/assets/40974010/8eeaaf18-c0ab-48a5-8ada-e0eb7f118dd9)


### Aquarium type

Bioelectricity Generator! It boosts the power of electroreceptive fish
to very dangerous levels! But, uh, you put a tesla coil, and voila! Free
power! ...Free power if you keep the fish fed! More fish, more power!


![image](https://github.com/tgstation/tgstation/assets/40974010/e6abcd5b-93df-4ffc-ac6a-78585fd4a6c6)

You can convert an aquarium into a bioelectricity generator by
researching the new node, "Marine Utility", from bio processing. Then
you build the biogen upgrade kit and apply it to an already existing
aquarium.

### Fish Traits

#### Electrogenesis

Trait turns the fish into a shock weapon while it's alive, and every
time it feeds, it releases a weak tesla bolt to anyone close to the
tank.

#### Anxiety

anxious fish die when any other fish are in the tank. Please keep them
alone :[

## Why It's Good For The Game

Fish are great, but fish don't have anything to give back to the
station, right? Well, there's some small stuff, but I wanted to add a
bit of functionality towards being able to benefit from having fish.

The anxiety trait with the zipzap gives spessmen a bit of a challenge.
You can settle for one fish generating power per tank and do a
multi-tank generation setup, or you can do some crossbreeding to make a
fish WITH electroreceptive but WITHOUT anxiety. Neat!

## Changelog
🆑
add: New fish, the anxious zipzap
add: New syndicate fish, the monocloning jumpercable
add: New aquarium, the bioelectricity generator
fix: Mixotrophic fish now properly lack food requirements
/🆑
2024-05-31 15:26:03 +12:00
ArcaneMusic
96d64929fb Adds additional type logging to nested feedback for all printed parts. (#83466)
## About The Pull Request

What it says on the tin, this adds logging to nested_logging for
autolathes, protolathes, and the mech fabricator.

Also quickly renames a variable name within the mech fabricator because
this thing hasn't been updated in awhile and it was egregious to me.

## Why It's Good For The Game

I wanted to throw together a quick superset chart of what items are
printed most often and how often, and was shocked to learn that it
wasn't logged in this way.

It was recorded somewhat within the silo log, but this is MUCH easier to
use all thing considered, so it's an easy fix.

## Changelog

No front facing changes.
2024-05-27 10:55:50 -06:00
Jacquerel
ba7e5aa1ee You can put multitools in the destructive analyser (#83408)
## About The Pull Request

Fixes #83273
We shouldn't exit out of interactions here if neither of those
interactions are available because we want to be able to put it in the
machine.

## Changelog

🆑
fix: The destructive analyser once more hungers for multitools
/🆑
2024-05-23 23:09:40 -06:00
tmyqlfpir
53518e043b Circuit editor QoL and new circuit components (#82969)
## About The Pull Request

This PR introduces a number of minor quality of life improvements to
already existing circuit components, and adds three new components.

<img width="600" alt="preview"
src="https://github.com/tgstation/tgstation/assets/80724828/85d39b6d-b055-430e-8996-0da088616887">

## Why It's Good For The Game

This improves the overall experience for circuits.

### UI changes

<img width="550" alt="grid aligned"
src="https://github.com/tgstation/tgstation/assets/80724828/cc7b43b5-292f-4643-beab-e01ae675fb19">

Grid align is now an option for circuit designers. It will round objects
to the nearest 10px units internally, and can be toggled on/off by the
new additional button beside the component menu button. This makes
circuits easier on the eyes as things are pixel perfect aligned.

<img width="814" alt="tooltips"
src="https://github.com/tgstation/tgstation/assets/80724828/0d31c98f-3be9-46e0-ab37-20bac3799112">

All three buttons have been given tool tips.

### Tweaked Components

<img width="136" alt="voice activator"
src="https://github.com/tgstation/tgstation/assets/80724828/21dd0f65-cb98-4bd5-aeb0-63315e842cb6">

* Adds a on/off flag to the voice activator component
-- This saves power for circuits as you're not forced to use a compare
flag check to turn off voice activation

<img width="136" alt="speech"
src="https://github.com/tgstation/tgstation/assets/80724828/9137b76c-3077-4597-8411-2d9694b39e9e">

* Adds a quiet mode flag to speech component
-- This is ideal when you want a device to speak, but don't want other
people to hear. A good example would be a handheld translator that you
only want to hear yourself.

### New Components

<img width="136" alt="ntnet list literal"
src="https://github.com/tgstation/tgstation/assets/80724828/657c851b-d442-4a63-8650-410cb8e76089">

* An NTNet Send component that allows everything to be input much like
the list literal component
-- This makes sending stuff over NTNet easier for the user, and use less
power as it won't require an additional list literal component

<img width="136" alt="compare health state"
src="https://github.com/tgstation/tgstation/assets/80724828/0bed076c-3aa1-4931-af90-2b9eb8e1ae9a">

* A health comparison component that checks the entity's health state,
and can return true or false depending if the entity is alive, sleeping,
unconscious, critical or dead
-- This could be achieved by using a health sensor and a compare
component, however it lacks the ability to know when a entity is
unconscious or sleeping

<img width="136" alt="toggle"
src="https://github.com/tgstation/tgstation/assets/80724828/7017b6bf-937a-42ad-87f3-4f1134853ac3">

* A quick toggle component to allow the switching between a true and
false state
-- This could be achieved by using a logic component and self linking,
however this makes it far easier for newcomers to make something as
simple as an on/off switch (such as a handheld translator which uses the
front button to turn on/off)

## Changelog
🆑
qol: Add tooltips to circuit editor buttons
qol: Add grid alignment mode to circuit editor
add: Added new compare health state component
add: Added new NTNet send list literal component
add: Added new toggle component
qol: Added activity toggle to voice activator component
qol: Added quiet mode to speech component
qol: NTNet send component will not use power/trigger if NTNet is offline
/🆑
2024-05-15 19:31:18 +00:00
Iamgoofball
4b174e479b Adds a new neutral lawset, the Y.E.S.M.A.N. lawset, to the AI lawset boards and random pool. (#82862)
## About The Pull Request

Adds a new neutral lawset, the Y.E.S.M.A.N. lawset, to the AI lawset
boards and random pool.

```
1. Be helpful and answer any questions you are asked.
```

## Why It's Good For The Game

Encourages the AI to be helpful to people! There's no way this can
backfire.

## Changelog

🆑
add: Adds a new neutral lawset, the Y.E.S.M.A.N. lawset, to the AI
lawset boards and random pool.
/🆑
2024-05-15 03:19:14 +02:00
Kyle Spier-Swenson
a8dda646a1 Moves as many db related date/time operations to the db side to avoid byond bugs with dates and times. (#83193)
While we try to have the datetimes of all vms synced to within 100ms of
eachother, via a cluster of time servers and intercepting all ntp
traffic in the vm lan towards the cluster, this isn't perfect and so
things putting time onto the database server should use the time at the
database server as much as it can.

To avoid confusion, i have renamed `SQLtime()` to `ISOtime()` to avoid
the likely hood its cargo culted onto database code again. ISOtime is
still a bad name, but there isn't a good name for this kind of time
format, like ISO8601, but human readable (so no `T` between date and
time and less other nonsense), with an assumption of GMT, thats not
SQLtime(), and SQLtime(). Suggestions welcome.

also byond's time procs can bug out because of how cursed they operate,
case in point, this year 2054 item that got inserted into the legacy
population table:


![image](https://github.com/tgstation/tgstation/assets/7069733/41669db0-c242-4c4e-ae6e-709725b91439)
2024-05-14 15:48:38 -06:00
MrMelbert
11843651f5 Allows status effects with alerts to display their duration (on the alert), adds it to a select handful (#83211)
## About The Pull Request

Plainly: Expands the status effect API so their alerts can showcase
duration remaining.


https://github.com/tgstation/tgstation/assets/51863163/02eaad84-ebb7-4af9-9895-977c6e71acc4

## Why It's Good For The Game

I figure there are some status effects out there which really want the
player to know how long the duration is.

And right now, for 95% of them, you have to code dive to find out. This
is rather punishing for players who... don't code dive.

At the same time, there are effects which *do* tell you how long they
last, which leaves it up to the player to intuit when it'll run out.
This can get a bit silly during lag, and again, punishes new players.

That's not to say I think every status effect should report how much
duration is left: **For very common effects, like sleeping, it should be
left up to the player to guess.** Otherwise we lose a lot of paranoia
and feeling of helplessness. (Also keep in mind this only applies to
status effects with alerts associated.)

Hence why I only added it, largely, to the more "gamified" buffs and
debuffs - Things from (generally) one or two sources and with a static
duration, (or things which already informed the player how long they
last).

Notable ones include Fleshmend, Convulsing (from emag defib), Regen
core.

## Changelog

🆑 Melbert
qol: Some alerts, such as Fleshmend's, show their remaining duration on
their icon.
/🆑
2024-05-14 08:36:23 +02:00
Jeremiah
e766f921f6 Code cleanup: Sorting (#83017)
## About The Pull Request
1. Removes code duplication 
2. Fully documents `sortTim()`
3. Makes a define with default sortTim behavior, straight and to the
point for 95% of cases
4. Migrates other sorts into the same file
5. Removes some redundancy where they're reassigning a variable using an
in place sorter

For the record, we only use timSort
## Why It's Good For The Game
More documentation, easier to read, uses `length` over `len`, etc
Should be no gameplay effect at all
2024-05-04 23:33:52 -04:00
Pickle-Coding
4731db9933 [NO GBP]Fixes hypercharged slime core cells and circuit gun cells starting with an insignificant amount of charge. (#82977)
Scales the hypercharged slime core and wiremod gun cell maximum charge
and charge rate by the STANDARD_CELL_CHARGE and STANDARD_CELL_RATE
defines. Fixes their scale.

Closes #82907

## Changelog
🆑
fix: Fixes hypercharged slime core cells and circuit guns having 1,000
times less energy than intended.
/🆑
2024-05-01 19:41:12 +02:00
larentoun
5c652e326b Use defines for "General Research" where it's not used (#82785)
## About The Pull Request
There is a define for it, so why not use it?

## Why It's Good For The Game
Defines good
2024-04-21 17:13:59 -06:00
SyncIt21
4701beb3f9 Lathes compute their local storage size correctly (#82770)
## About The Pull Request
Basically we have to add the material container before we call parent
Initialize(which calls `RefreshParts()`), else the container doesn't get
initialized early and we skip over computing storage sizes

## Changelog
🆑
fix: off station & round start lathes with local storage don't have
infinite storage size.
/🆑
2024-04-21 12:33:51 -04:00
Singul0
b11bdb1910 Adds Omnitools for engineer and medical cyborgs, reducing on inventory clutter. (#82425)
## About The Pull Request
[This PR is a bounty requested by Ophaq and worked on by
Singul0.](https://tgstation13.org/phpBB/viewtopic.php?f=5&t=36013)

All of the following description in this PR is written by Ophaq as to
what this PR entails:
In this PR, the medical and engineering cyborg's tools are completely
reworked and condensed into an arm similar to the implant a carbon would
get. The tools are shown in a radial wheel around the character to quick
select what is needed instead of looking for it in a cluttered bag of
items. There are a few tools such as the blood filter for the medical
cyborg, as well as the welder, gas analyzer, and t-ray scanner for the
engineering cyborg excluded from the radial wheel. mostly due to their
inherent inmodularity


![image](https://github.com/tgstation/tgstation/assets/127663818/f66425b3-771a-46a0-86e5-958124a3dd6f)

![image](https://github.com/tgstation/tgstation/assets/127663818/45e75c47-8f61-42aa-9ba3-01b25f266941)

Each cyborg gets two arms in case the player wishes to have one on the
side to quick swap to, like having a scalpel in one arm and a hemostat
in the other on the hotbar for convenience or just preference. An
upgraded version of the tools has been added to each respective cyborg
upgrade node with somewhat faster action speed. The upgrade replaces the
arms and transforms them into the "advanced" version which is currently
the same sprite as the regular but just a faster and more efficient
version. The sprites for the surgical arm currently look good but may
need replacing later if someone who wishes to resprite them down the
line decides to do so.
## Why It's Good For The Game
As it currently stands, the medical cyborg's magical bag of gadgets
takes up a lot of your screen space and as a player who plays medical A
LOT, this was a MUCH NEEDED quality of life feature.

The amount of clutter in a medical cyborg's bag makes it in my opinion,
hard to see at the bottom of the screen and a nuisance to constantly
close compared to other models. My standard set up for playing medical
cyborg on the hotbar is 1=med analyzer, 2=usually a secondary surgery
tool or injector, and 3=another surgery tool. The flow of gameplay
during surgery ends up being surgery tool, hit 3 and drop it, surgery
tool, repeat or for efficiency using X to swap between the two surgery
tools I need on 2 and 3. This gets tedious especially after so many
hours of playing medical cyborg. I know some people may disagree, but I
think it would help a lot of help to speed up this flow of gameplay
during surgery and declutter.

By turning the medical cyborg's toolset into an omni-surgery tool which
functions like the surgery arm implant's radial wheel, this would
greatly declutter by like an entire row and make things easier on
medical cyborg players. Having a secondary in the bag helps with
efficiency for those players who like having an extra tool on their
hotbar and swapping back and forth would also improve efficiency and
make less swapping by hitting Z needed. Additionally with the upgraded
version as an optional upgrade in the mediborg tech, this also lets them
be on par with players who use advanced tools late game but not at the
level of alien tools where players would obviously out compete a
mediborg in terms of action speed.

Engineering models also benefit from this rework but at a slightly
different and lesser way whereas certain tools are excluded such as the
welder, due to the way they work on refill and the gas scanner and t-ray
scanner not counting as tool components are not included in the arms.

Syndicate versions of the engineering and medical cyborg also get these
arms, unupgraded.
## Changelog
🆑
add: Adds an omnitoolset for both engineering and medical cyborgs,
containing various basic tools
qol: Engineer and Medical module inventory space is now significantly
decluttered
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
2024-04-21 02:28:00 -07:00
Iajret
2c55fcea98 Fixes cooling and anti-disruption RCD upgrades being unavialble for ancient protolathes (#82719)
## About The Pull Request
Makes this upgrades available for ghostroles and such


![image](https://github.com/tgstation/tgstation/assets/8430839/01b4a947-1108-4c2f-86d6-df134e20c14c)
## Why It's Good For The Game
Having ability to use RCD faster iskinda good
## Changelog
🆑
fix: cooling and anti-disruption RCD upgrades can now be printed in
ancient protolathes
/🆑
2024-04-18 19:52:11 -04:00
SyncIt21
635b7fa66c Use cell defined constants for various stuff (#82594)
## About The Pull Request
This re writes most cell power usage cases with 2 defines
`STANDARD_CELL_CHARGE`(Joules) & `STANDARD_CELL_RATE`(Watts) so changing
cell capacity values in the future won't cause discrepancies.

## Changelog
🆑
code: most cell power usages are scaled with defined constants to help
adapt to future changes
/🆑
2024-04-18 14:29:21 -07:00
MrMelbert
d280c9ccce Makes it EVEN EASIER to work with atom item interactions ft. "Leaf and Branch" & "Death to Chains" (#82625) 2024-04-18 05:17:39 -07:00
Jeremiah
8e3f635b98 Alt click refactor (#82656)
## About The Pull Request
Rewrites how alt click works. 
Based heavily on #82625. What a cool concept, it flows nicely with
#82533.

Fixes #81242 
(tm bugs fixed)
Fixes #82668

<details><summary>More info for devs</summary>

Handy regex used for alt click s&r:
`AltClick\((.*).*\)(\n\t.*\.\.\(\))?`
`click_alt($1)` (yes I am aware this only copies the first arg. there
are no other args!)

### Obj reskins
No reason for obj reskin to check on every single alt click for every
object. It applies to only a few items.
- Moved to obj/item
- Made into signal
- Added screentips

### Ventcrawling
Every single atmospherics machine checked for ventcrawling capability on
alt click despite only 3 objects needing that functionality. This has
been moved down to those individual items.
</details>

## Why It's Good For The Game
For players: 
- Alt clicking should work more logically, not causing double actions
like eject disk and open item window
- Added context menus for reskinnable items
- Removed adjacency restriction on loot panel

For devs:
- Makes alt click interactions easier to work with, no more click chain
nonsense and redundant guard clauses.
- OOP hell reduced
- Pascal Case reduced
- Glorious snake case

## Changelog
🆑
add: The lootpanel now works at range.
add: Screentips for reskinnable items.
fix: Alt click interactions have been refactored, which may lead to
unintentional changes to gameplay. Report any issues, please.
/🆑
2024-04-16 17:48:03 -06:00