Commit Graph

1184 Commits

Author SHA1 Message Date
Jacquerel
be2f292253 Gulag boulder mining adjustments (#81971)
## About The Pull Request

This PR does two fairly simple things.
Firstly, it triples the gulag point value of every material except
glass.
Secondly, it allows mining skill increases to effect the speed of
boulder breaking and reduce the stamina "exertion" you take.

I tried this out personally on Lavaland and Icebox and while this is
very much dependent on RNG (and storm timing) this got earning 1000
points purely from mining and smashing boulders down to _about_ ten
minutes of work, which I believe is the rough estimate of how much
effort it was before that. It may skew a bit higher than that if the ash
storm happens at a bad time or the game gives you predominantly iron,
but not a _lot_ higher.

The mining skill = faster smashing thing is... barely perceptible after
ten minutes of mining to be honest but it's saving _some_ time and I
think if it gives you the exp it might as well benefit from it too.

I didn't do anything for _glass_ because you can just pick that up off
the ground in Lavaland and I didn't want to make _that_ the ideal route
to getting your sentence finished.

## Why It's Good For The Game

Since ArcMining was merged, the gulag has changed to a system primarily
about digging up boulders and smashing them with a pickaxe for random
rewards. I think the chain gang thing is pretty flavourful, but the
inability to just target high-value materials (because you could see
them on the mining scanner) and the overall decrease in output has made
it take a lot longer to get a similar amount of points.

People are sending prisoners out to mine for 1000 points of materials
assuming this is about 10 minutes work, when in reality it was more like
30-35 minutes. Longer on Lavaland, where you need to take breaks for ash
storms.

This was not an intentional "nerf" to prisoner miners and should
hopefully bring it back down to somewhere closer to the previous level.

## Changelog

🆑
balance: All materials except glass are now worth more gulag points than
before.
balance: Mining skill decreases the time it takes to break boulders, and
makes it less tiring.
/🆑
2024-03-13 13:21:46 -04:00
LemonInTheDark
ef714c1c34 Overlay Lighting Color/Intensity Pass (#81425)
## About The Pull Request

I was looking at screenshots of the game and realized we had a lot of
light sources that were really... flat.

Medium intensity, not colored at all, cringe.

So I went over all the uses of overlay styled lighting (since I've done
matrix lighting already) and gave them more unique features. Colors that
match the sprite they're used with, intensity to produce vibes, that
sort of thing.

It's kinda impossible to go one by one cause there's a LOT.

I may have gone a bit overboard with a few, I'm messing around with some
things like giving bots colors based off their department, etc. We'll
see how this all turns out.

Oh also I tweaked how the cone of overlay lighting is drawn. It seemed a
bit too present to me so I dropped the alpha down from like 200 to 120
at max (so it's roughly half of the mask's alpha so it's less
overwhelming

## Why It's Good For The Game

Lighting should be impactful, subtle and colorful

<details>
<summary>
Old Lights
</summary>


![dreamseeker_QJ5bFZxd63](https://github.com/tgstation/tgstation/assets/58055496/8ae74a95-32cb-473f-830a-ab4e1073a581)

![dreamseeker_DPVgI8wOoN](https://github.com/tgstation/tgstation/assets/58055496/149095af-a08a-4038-bf18-9e3401327452)

![dreamseeker_pyEmTAb37x](https://github.com/tgstation/tgstation/assets/58055496/6dbb6cf8-2ed7-4bc0-9d19-c64849088a33)

![dreamseeker_aDfvnea6YD](https://github.com/tgstation/tgstation/assets/58055496/4ed983e1-6be3-4513-ba3b-cecde08ccd38)

![dreamseeker_RnkQSwmxmc](https://github.com/tgstation/tgstation/assets/58055496/63e0210e-e1b1-42f0-be64-53d67c43f689)

![dreamseeker_G8NSC3lzAk](https://github.com/tgstation/tgstation/assets/58055496/93001925-904d-4061-8874-1d17bb225a90)

![dreamseeker_yASfxtbHDR](https://github.com/tgstation/tgstation/assets/58055496/ce0ae9ad-9067-44e0-9491-3ef331bbbb84)

![dreamseeker_4ecBbG5urI](https://github.com/tgstation/tgstation/assets/58055496/ce82f471-15c7-40ce-bc08-be4f5dc8a3b7)

![dreamseeker_udYlv8uAce](https://github.com/tgstation/tgstation/assets/58055496/c516a278-852b-44b8-ba7c-1203cea3f845)

![dreamseeker_bc2120Fnmr](https://github.com/tgstation/tgstation/assets/58055496/87a1429a-2329-4dd5-8c7b-ff44f54a08bb)

</details>

<details>
<summary>
New Lights
</summary>


![dreamseeker_0H11TyhGgx](https://github.com/tgstation/tgstation/assets/58055496/75b68a25-055e-488c-af82-b062dbe7413e)

![dreamseeker_2B9AENHsfl](https://github.com/tgstation/tgstation/assets/58055496/b52d441c-6ed3-495b-9ebd-9b0c9f924f30)

![dreamseeker_3vOVRRMTSP](https://github.com/tgstation/tgstation/assets/58055496/b265578f-34cc-4a0a-80ea-3237fb83df33)

![dreamseeker_5bTLup65rx](https://github.com/tgstation/tgstation/assets/58055496/6fcd3dc0-5927-458a-9f77-5582ad57a954)

![dreamseeker_iZzxZv4nfW](https://github.com/tgstation/tgstation/assets/58055496/67c3af13-2305-4130-936b-19ded08ccc4e)

![dreamseeker_Lhe9TSA0Av](https://github.com/tgstation/tgstation/assets/58055496/a5310e58-0ff1-45ac-bb81-b4a0212eb0ce)

![dreamseeker_ngQJUv0tV4](https://github.com/tgstation/tgstation/assets/58055496/c3d7423a-ab32-4401-9ffa-c4c3b7811334)

![dreamseeker_PL0z6sU7by](https://github.com/tgstation/tgstation/assets/58055496/2947d828-3aee-48c2-903f-2bf0db9077d2)

![dreamseeker_xineFZDzPA](https://github.com/tgstation/tgstation/assets/58055496/095ff8b0-51cf-4f7c-a2ee-752d9d7e87bd)

![dreamseeker_zpXxbZZakS](https://github.com/tgstation/tgstation/assets/58055496/c4200d35-a2fa-4c3f-8e88-1fd87f44cd46)

</details>

## Changelog
🆑
add: Tweaked the saturation, color and intensity of a bunch of lights
/🆑
2024-03-09 23:57:19 +00:00
lessthanthree
5e6de2bec2 Medical/improvised gauze icons (#81802)
## About The Pull Request

Adds icons for stacks of medical gauze and improvised gauze, so that
they can be differentiated from stacks of cloth. Currently all 3 look
the same. Medical gauze is blue tinted like the medical tape, improvised
gauze is grey and a smaller size than medical gauze. Both have
attachment clips at the edge of the roll.


![image](https://github.com/tgstation/tgstation/assets/83487515/47bcd42e-7270-498e-aacb-15d5a39fd432)

## Why It's Good For The Game

Easier to tell three different items apart at a glance.

## Changelog

🆑 LT3
image: medical and improvised gauze are visibly different from cloth
/🆑
2024-03-04 13:32:47 +01:00
lessthanthree
760c85ad90 Tram tile/bench fixes (#81798)
## About The Pull Request

- Tram benches can be rebuilt after deconstruction
- Tram tiles build the correct amount inhand
- Tram tiles available in the engineering protolathe with other items
- Tram tiles create the right stack type when pulled up
- Tram tiles have inhand/obj icons for both types

## Changelog

🆑 LT3
fix: Tram floor tiles constructed inhand provides 4 instead of 1
fix: Tram floor tiles provide correct stack item when pulled up
image: Tram floor tiles have their own inhand icons
qol: Tram floor tiles available in the engineering protolathe
fix: You can reconstruct deconstructed tram benches
/🆑
2024-03-04 02:19:49 +01:00
jimmyl
d629b5f3f1 pipebomb (#81529)
## About The Pull Request


![image](https://github.com/tgstation/tgstation/assets/70376633/2c2a8ddf-d210-468b-9403-f7de4fa1fd9b)

removes IEDs, these are its replacement


![image](https://github.com/tgstation/tgstation/assets/70376633/95cc67d7-ed41-481b-9b9d-f31897fdb46d)

this recipe produces a finished pipebomb

you can craft pipes (of the atmos kind) with some metal
then you can make it into a pair of halved pipes with a welder
then you stuff in items for extra effect (optional, only works if it
does something)
then you put in welding fuel OR gunpowder (no other options as of now,
gunpowder is a better explosive)
cable finishes that part
after that, you can attach an unsecured assembly to finish the bomb

also this is the math for the explosion, power is decided by fuel

![image](https://github.com/tgstation/tgstation/assets/70376633/95ac3101-a2af-4bdc-9730-6c9c20195b59)

using it in-hand activates the assembly, using it off-hand allows you to
configure the assembly

## Why It's Good For The Game

IEDs suck and stuff and this would be a better upgrade/replacement
because with assemblies you could make a circuit sentient pipebomb or
gift a pipebomb via cargo or something and gimmicks i guess
## Changelog
🆑
add: Pipebombs
del: Improvised Firebombs
/🆑
2024-02-29 20:33:59 +01:00
MrMelbert
f7a9ca8706 Fixes arcade cabinets being un-hittable (#81620)
## About The Pull Request

What if we put all of our item based interactions in the same function
that attacks are handled? Great idea, I'm sure no one will ever forget
to call parent

Fixes that. 

Also cleans up ticket code. 

Also renames the base type so mappers stop mapping it in. 

## Changelog

🆑 Melbert
fix: You can now take our your anger upon arcade cabinets upon losing
(they can be hit again)
/🆑
2024-02-23 00:02:07 +01:00
Ghom
7e8328c0d2 Cardboard cutouts are now tactical. (#81245)
## About The Pull Request
Basically, this means players holding cardboard cutouts will now assume
their appearance, just like for potted plants. Good for pranking.

I've had to tweak the tactical component and the waddling element a bit
to get them to work as intended while dealing with the multiple sources
of the waddling element.

## Why It's Good For The Game
![](https://media1.tenor.com/m/X1GimXmuByYAAAAd/tom-cruise-doorbell.gif)

## Changelog

🆑
add: Players holding cardboard cutouts will now assume their appearance,
just like for potted plants.
/🆑
2024-02-17 17:17:18 +00:00
Ghom
16009a3ccf [MDB Ignore] Converts random bedsheets to spawners + 3 bedsheets I made long time ago. (#81435) 2024-02-16 01:46:29 -07:00
LemonInTheDark
70651816c2 Fixes complex lights not handling moving well, renames lighting defines (#81423)
## About The Pull Request

[Fixes static lights not
moving](ffef43c05a)

Worked fine when the owner moved, but if the owner was inside something
else, it would try and trigger an update on the PARENT's lights, which
are obviously not us.

[Renames MOVABLE_LIGHT and STATIC_LIGHT to better describe what they
do](de73a63bd4)

People keep trying to change the lighting system of lamps and it makes
me mad.
I choose OVERLAY_LIGHT and COMPLEX_LIGHT here, I couldn't figure out a
better name for turf matrix lighting. Suggestions welcome

## Why It's Good For The Game

Closes #80005
Hopefully improves understanding of lighting at a glance
## Changelog
🆑
fix: Fixes fancy lights not updating their source location when picked
up and moved
/🆑
2024-02-12 20:50:20 +01:00
NeonNik2245
6eb041c6b6 New masks (#81217)
## About The Pull Request
Adds 3 new masks:
* Kitsune mask
* Facescarf
* Rebellion mask
All masks (and facescarf) are recolorable. And also thanks to Kovac for
the scarf sprites
## Why It's Good For The Game
Cool masks for make character style more unique. All are recolourable.

![2024-01-28_12-20-48](https://github.com/tgstation/tgstation/assets/106491639/49b532f7-ccfe-4556-a54f-a4884a9fda77)

## Changelog
🆑
add: 3 new masks for your characters (thanks to Kovac for the scarf
sprites)
/🆑

---------

Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
2024-02-12 00:53:40 +01:00
John Willard
fdcd4d3979 Adds a signal to buying items from the uplink (& fixes TC misinfo) (#81372)
## About The Pull Request

Adds a signal when someone buys an item from the uplink and removes
single-letter vars from the ``spawn_item`` proc, and adds/standardizes
add/removing of telecrystals from uplinks (and admin setting how much TC
they have) to ensure the UI always has the right amount of telecrystals
displayed in it.

## Why It's Good For The Game

There are reasons why someone would want to hook up to a traitor's
uplink and listen to items they purchase to do any special effect
on-purchase, so this adds support to do anything in the future with it.
Also tells players how much TC they actually have without forcing them
to close/reopen the UI every time they insert some TC in it by hand.

## Changelog

🆑
fix: Uplinks now update their UI when you add telecrystals in them, so
you don't need to close and reopen it.
/🆑
2024-02-10 18:57:19 +01:00
LemonInTheDark
18075704e9 Implements rgb2num, uses it to replace all our manual rgb reading. Redoes HSV management (#81182)
## About The Pull Request

[Converts all manual extraction of rbg with rgb2num. It's just
better](ae798eabd5)

[Yanks out old HSV management, replaces it with list
stuff](4997e86051)

There's this old lummy era clunky code that passed HSV as text

We can now cleanly replace it with passing hsv as lists from a rgb2hsv
proc

So let's just do that.

Also, cleans up spraytan code (and ethereal lighting)

## Why It's Good For The Game

Code better
2024-02-01 13:43:50 +01:00
13spacemen
052447cd87 Fixed healing simplemobs with medical stacks + grammar/formatting/user feedback (#80889)
## About The Pull Request
Fixed healing simplemobs with sutures and other stacks

Also made the formatting of the balloon alerts better and added some
extra feedback messages that are clearer than "can't heal X"

After assessing damage for 1 second, if the body part is fully healed
and the user is healing themselves, I made it NOT show another balloon
alert, so as to not overload the user with balloon alerts, its obvious
that its fully healed from the user's own HUD

The simplemob thing is me fixing my own PR, the
grammar/formatting/feedback is new, so not sure about GBP no update, up
to maints

Fixes https://github.com/tgstation/tgstation/issues/80884

## Changelog
🆑
fix: Healing simplemobs with sutures and other stacks works again
spellcheck: Healing mobs with medical stacks like suture and mesh give
better user feedback messages
/🆑
2024-01-11 16:20:58 -05:00
13spacemen
f969814171 Skip healing delay if you can't actually heal (#80698)
## About The Pull Request
If you can't heal a body part with medical stacks [suture, mesh, etc.]
because it's fully healed, or you are using the wrong stack (suture on
burn damage)
It no longer wastes your time doing the healing delay only to say "can't
heal that". It instantly tells you that you can't heal
Also made it say what "that" is, it says "can't heal the leg" now
## Why It's Good For The Game
It's unintuitive and makes no sense that your character wastes time
healing something which is not actually possible to heal
How would you even apply sutures to a burn wound? It's both unrealistic
and unfun gameplay wise
## Changelog
🆑
qol: If you can't heal a body part, you won't get a healing time delay.
No more spending 5 seconds healing a body part only to get a "can't heal
that" message.
/🆑
2024-01-09 13:12:19 -08:00
lessthanthree
80de91088e Fix incorrect carpet reskin options (#80756)
## About The Pull Request

Fixes https://github.com/tgstation/tgstation/issues/80737 where carpet
types with no reskinnable variants showing the default carpet variant.

## Changelog

🆑 LT3
fix: Alternate carpet colors will no longer reskin to normal carpet
/🆑
2024-01-04 18:30:25 +00:00
MrMelbert
787ae445d7 Fix some shenanigans involving interaction order with wound tending (#80225)
## About The Pull Request

Fixes #80223 . See issue for information about the bug.

This PR fixes it by placing wound tending before parent call but after
surgery.

It also fixes it by rewriting a little bit of medical stack item code to
only block interaction chain when actually healing someone - This is not
necessary with the above fix, but it futureproofs things.

## Changelog

🆑 Melbert
fix: When using an item on a mob, you will always attempt to fix wounds
AFTER surgery, BUT BEFORE the item's own interactions. As an example,
this means using a mesh on a mob will attempt to progress surgery first,
then attempt to fix any burn wounds, then heal burn damage.
/🆑
2023-12-10 18:17:21 -07:00
MrMelbert
1e76fd70b4 Attack chain refactoring: Broadening tool_act into item_interact, moving some item interactions to... atom/item_interact / item/interact_with_atom (#79968)
## About The Pull Request

Implements half of this (with some minor changes): 


![image](https://github.com/tgstation/tgstation/assets/51863163/bf5cc4bb-5a1f-42e3-921d-9a57bc6096cc)

The ultimate goal of this is to split our attack chain in two: 
- One for non-combat item interactions
  - Health analyzer scanning
  - using tools on stuff
  - surgery
  - Niche other interactions
- One for combat attacking
  - Item hit thing, item deal damage. 
  - Special effects on attack would go here.  

This PR begins this by broadining tool act into item interact. 

Item interact is a catch-all proc ran at the beginning of attack chain,
before `pre_attack` and such, that handles the first part of the chain.

This allows us to easily catch item interaction and cancel the attack
part of the chain by using deliberate bitflag return values, rather than
`TRUE` / `FALSE`*.

*Because right now, `TRUE` = `cancel attack`, no matter what, which is
unclear to people.

Instead of moving as much as possible to the new proc in this PR, I
started by doing some easy, obvious things. More things can be moved in
the future, or technically they don't even need to move in a lot of
cases.

## Changelog

🆑 Melbert
refactor: Refactored some methods of items interacting with other
objects or mobs, such as surgery and health analzyers. Report if
anything seems wrong
/🆑
2023-12-08 23:50:19 -07:00
MrMelbert
5af1479406 Replaces unused xeno "weed extract" item in abandoned crates with, well, weed (#80157)
## About The Pull Request

Rather than granting you an otherwise-entirely unused "weed extract"
item on a rare 1% roll, an abandoned crate will now give you a random
assortment of cannabis seeds and samples.

## Why It's Good For The Game

Getting an unusable do-nothing item as a reward is kinda lame, this is
at least smokable.

## Changelog

🆑 Melbert
qol: Replaces unused xeno weed extract item in abandoned crates with a
random assortment of cannabis.
/🆑
2023-12-06 19:57:56 -07:00
san7890
7f7688b60a Demotes the "electrical conductivity" flag from flags_1 to obj_flags (#80033)
## About The Pull Request

Code to handle this flag only ever existed on the `/obj` sublevel, so
there's no need for it to be on the `/atom` level `flags_1`. There was
probably a point in time in which mobs or turfs conducted electricity
but there's zero code for it anymore so we truly just live in a society
now.
## Why It's Good For The Game

Frees up a slot on `flags_1` (which is really nice actually), proper
scoping of certain bitflag stuff, etc.
## Changelog
Not relevant to players.

I may have screwed something up, will be doing a few passes on this
myself to ensure all the search and replaces went alright but we should
be good™️
2023-12-01 21:43:46 -05:00
Ben10Omintrix
ce6f2724cd basic cats and mini kitchen helpers (#79800)
## About The Pull Request
this pr transforms cats into basic pets! cats now have some new
behavior. they can carry fish and hunted mice in their mouths to deliver
it to kittens, and kittens will eat them.


![catmouse](https://github.com/tgstation/tgstation/assets/138636438/8f146be4-c7b2-41d3-8301-734be49b5efc)

![catfish](https://github.com/tgstation/tgstation/assets/138636438/f8df54f2-9183-406d-afbd-f90f415f7f3d)

if a kitten sees you holding food, it will point at you and meow loudly
until u give it the food.
becareful when putting male cats near each other, there is a small
chance they get into a heated argument and meow loudly at each other
until one of them flees.
also added a new small cat house for cats. cats will use these homes if
u build one near them (using 5 wood planks)


![cathouse](https://github.com/tgstation/tgstation/assets/138636438/9515a78c-fdfe-461b-bad2-6b497117c694)

Chefs can craft the cake cat and breadcat. these are useful cats because
they can help the chef around in the kitchen. they will turn stoves and
grills off when food is ready, so they dont burn. and the cake cat will
help the chef decorate his donuts

## Why It's Good For The Game
refactors cats into basic mobs and gives them a deeper ai

## Changelog
🆑
refactor: cats are now basic pets. please report any bugs.
add: the cake cat and bread cat can now help the chef around in the
kitchen
/🆑
2023-11-28 21:51:37 -07:00
SyncIt21
9280015f94 GMM can order bluepace crystals again (#79918)
## About The Pull Request
- Fixes #79906
- Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/25190

Bluespace sheets did not have their `material_type` var initialized.
This fixes the issue for GMM and possibly other issues that relies on
this var

## Changelog
🆑
fix: you no longer get an empty crate when ordering bluespace crystals
from the galactic material market.
/🆑
2023-11-28 14:52:57 +01:00
itseasytosee
5dcdb6ca9c Stagger bugfix + pummeling grammar (#79977)
## About The Pull Request
Small bugfix which properly upgrades the difficultly of breaking out of
a passive grab to that of an aggressive grab if staggered and stamina
damaged. Punching someone while grappled gives unique damage text based
on the limb used.
## Why It's Good For The Game
Bugfix. More user feedback.
## Changelog
🆑 itseasytosee
fix: staggered targets now have the correct chance for escaping
grapples.
spellcheck: changed attack verb for punching a grappled target
/🆑
2023-11-28 14:47:10 +01:00
MrMelbert
c1ed62915b Adds UPSIDE_DOWN movetype for negative gravity / makes Atrocinator affected by less things (#79785)
## About The Pull Request

Fixes #79764

I was going to tackle this issue by slamming `TRAIT_NO_SLIP_ALL` on
Atrocinator users and calling it a day, but like, that didn't feel
proper.

So I thought hey, we could just give them the flying movetype, even
though they technically aren't flying it means they're unaffected by
things that flying would make you unaffected by.

Nope, this means the mob technically "negates gravity", so no falling
and no feetsteps.

Let's try floating - this give us feetsteps but no falling upwards. 

So instead of going back to square one, with `TRAIT_NO_SLIP_ALL`, I
decided to go for the more complex route of just adding a movetype.

Hence, move type `UPSIDE_DOWN`. This covers situations where a mob would
be "floating" above the ground, but still walking. ...Negative gravity.

This means overall the Atrociator acts more as you'd expect - you don't
slip on ice, you don't trigger bear traps or mouse traps, you can walk
over railings, unaffected by conveyor belts, etc.

## Why It's Good For The Game

Makes the Atrocinator a lot more consistent with how you'd expect for it
to work.

Admittedly it is a bit niche use of movetypes, but it can possibly be
expanded to more things in the future, who knows? I applied it to mobs
on meat spikes (even though they don't move), just for proof of concept.

## Changelog

🆑 Melbert
fix: Atrocinating mobs will now behave more as you'd expect. Meaning
they don't slip on wet patches, can't trigger bear traps / landmines /
mouse traps, ignore conveyors, and can walk over tables and railings.
fix: Floating mobs are unaffected by conveyor belts, acid (on the
ground), glass tables
fix: Floating mobs won't squish stuff like roaches anymore 
fix: Fixes bear traps triggering on floating / flying mobs 
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-11-20 21:19:13 +00:00
Jeremiah
7a1b1fa9ad Splits placeontop proc (#79702)
## About The Pull Request
I find the proc hard to read honestly. There's no reason we can't split
this into two functions - the secondary functionality is used only once,
in reader.dmm.
## Why It's Good For The Game
Code improvement
Glorious snake case
## Changelog
N/A nothing player facing

---------

Co-authored-by: san7890 <34697715+san7890@users.noreply.github.com>
2023-11-19 04:58:31 +01:00
Ben10Omintrix
7a44f10993 basic gutlunchers and ashwalker ranching (#79508)
## About The Pull Request
this pr transforms gutlunchers into basic mobs and gives them a small
ranch that ashwalkers can manage. gutlunches come in various colors and
sizes! female gutlunches will come in different shades of red and males
will come in shades of blue. the child born will have a mix of his
parent's colors.
![the
farm](https://github.com/tgstation/tgstation/assets/138636438/41fdb1ed-e567-4c8d-bb83-b296f878c862)
female gutlunches can make various healing milk and medicine from its
udder. but it will need to consume ores before it can start making milk,
u can either feed it by hand or u can put ores in the wooden trough and
they will go eat from it whenever they get hungry. feeding it gold or
bluespace ore will improve the healing quality of the milk for a short
while

![trough](https://github.com/tgstation/tgstation/assets/138636438/b9c84d18-fdd8-476b-b779-bdfe49dd7e88)
the male gutlunchers are obedient pets. their stats vary from one
another in speed, attack and health. a male gutlunchers stats will
depend on the stats of his parents, the higher his parent's stats are
the better chances he has at rolling higher stats. so u can selectively
breed them to make sure they have the best stats possible. they will
listen to all ur commands and can mine walls or attack enemies if given
the command. also i wanted the farm to have wood fences so i added them
to the game, they cost 5 wood planks to make



## Why It's Good For The Game
refactors gutlunches into basic mobs. also i turned breeding into a
component so it can be applied to all animals and created a breed
command, pets that have this command and the component will go breed
with a partner u point at.

## Changelog
🆑
refactor: gutlunches have been refactored into basic mobs. please report
any bugs
add: ashwalkers have a small ranch they can manage
fix: wall tearer compnent wont runtime when interacting with mineral
walls
/🆑
2023-11-13 01:20:19 -07:00
necromanceranne
1a9043d797 The Brawlening: Unarmed fighting interactions for shoving, grabbing and nonlethal takedowns (not martial arts) (#79362)
## About The Pull Request

I've tweaked some elements of unarmed fighting to give it additional
interactions between the various components, bridging them into a more
coherent system and focusing more strongly as tool for disabling
opponents nonlethally.

### Shoving

Shoving guarantees that unarmed attacks will land while knocked
off-balance (AKA when slowed by a shove).

Being off-balance means that you can be knocked down from a punch if you
have taken enough brute and stamina damage combined (at least above 40).

Being off-balance makes you vulnerable to grabs while you have a
moderate amount of stamina damage (30 damage), forcing you to have to
resist even passive grabs. This pairs _exceptionally_ well with
tackling.

### Grappling

Grappling someone makes your unarmed attacks penetrate armor based on a
new limb value called ``unarmed_effectiveness``. This is something
shared by kicking.

### Unarmed Attacks in General

``unarmed_effectiveness`` has also taken over the functionality of
``unarmed_stun_threshold``, as well as accuracy calculations. Human
equivalent limbs (pretty much all of them except mushrooms and golems)
have a value of 10.

Now, ``unarmed_effectiveness`` determines how accurately a given limb
makes unarmed attacks. Unarmed attacks have a base inaccuracy of 20%,
with effectiveness acting as a reduction to this value. (so for humans,
that's 20% - 10% before any value changes from brute and stamina
damage). It is also capped at 75% miss chance, just to avoid those weird
instances of two brawling fighters being incapable of finishing each
other off at a certain amount of damage and it being real awkward, like
it does currently.

It also determines the base probability of landing a knockdown punch.
For humans, this is 10%.

For the most part, these two particular changes are roughly equivalent
to the current values, just handled in a way that is more
straightforward to understand from a code perspective.

In addition to the above, human equivalent limbs have higher damage
floors for unarmed attacks. Arms deal 5-10 damage, while legs deal 7-15
damage. In addition, kicks also deal stamina damage, like punches do.

### Minor Mentions

Golems and Mushroom People (who don't even use their limbs for their
unarmed strikes because mushroom people start with a martial art) have
very accurate punches, and their punches penetrate quite a bit of armor
when they are entitled to that. They also have a high knockdown
probability. This is partially because they previously already _had_
these features due to the wonky math at play, but also because this is
their big thing they are good at.

Carp mutation also got a big win out of this as well. If and when you
actually manage to get that to work and matter.

## Why It's Good For The Game

My favorite thing in this game is the robustness of unarmed fighting.
It's the part of the game that actually acknowledges the sandbox and
environmental interaction in a big way. The only problem with the
unarmed combat is that it is a bit disjointed, and often much weaker
than using even the most pathetic weapon you can get your hands on
unless you're using the stun loops available. Those loops get a bit
boring, even if they're mostly all environmental (except for the lucky
neckgrab finish). Giving more options generally means that even when not
in an ideal position, you still have _some_ options.

It also has some internal inconsistencies in design even in the same
proc, like accuracy calculations and knockdowns, as well as weird splits
in damage. So I decided to resolve that.

Now, every part of unarmed fighting has some relevance in the other
parts. Predominantly, it is heavily favoured towards dealing stamina
damage, making unarmed combat very favourable as a nonlethal method of
taking someone down, which is something we currently lack considerably.
While people may still opt to simply beat someone into actual crit
rather than stop at stamina crit, the possibility is actually entirely
available and supported now. No just banking on a lucky neckgrab after a
shove.

Paying attention to damage dealt and thinking intelligently about how
you apply combinations of effects allows even someone on the significant
back foot an opportunity for a comeback if they know what they're doing
against even armed opponents.

Separating accuracy and knockdown effectiveness from damage allows for
more consistent design and readability, but also preventing weirdness
ike tighter damage spreads increasing knockdown probabilities as well as
increasing accuracy without the coder knowing why. This also lets us
make unarmed attacks just that little bit stronger. Since unarmed
attacks require more complicated combinations to work, I think this
won't make them stronger than weapons necessarily, but it will make for
more interesting swung fights.

## Changelog
🆑
add: With the flood of Chi within the Spinward Sector receding, various
masters of The Tunnel Arts, colloquially known as 'Maint-fu Masters',
have started to refine the basics of their martial techniques. New forms
have started to develop within Spacestation 13's hidden maintenance
dojos.
add: Someone shoved off-balance makes them vulnerable to more guaranteed
unarmed strikes, knockdowns from a successful punch, and more difficult
to escape grabs.
add: Grabbing someone (as well as kicking them while they're on the
floor) makes them more vulnerable to taking unarmed attack damage, even
if they have armor.
balance: Unarmed strikes made with human-equivalent limbs have higher
damage floors, meaning you overall do more damage on average while not
increasing the overall damage potential. It's more consistent!
refactor: Significantly changed how punching accuracy and knockdowns are
calculated.
balance: Golem and mushroom limbs are a lot more effective at punching
as a result of these various changes. As they should be.
/🆑
2023-11-08 23:46:51 +00:00
KingkumaArt
ba076e94bc Adds engi improvised weapon - rebar crossbow + Engi Exclusive Tot Shop Variant (#78777)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

![image](https://github.com/KingkumaArt/KingkumaTGSS13/assets/69398298/e4d921a6-9bd6-4eb3-9085-2bfa5df67826)
Engi now has access to a Half Life 2 Inspired rebar crossbow! Made of
rods, wire, and an inducer, it shoots sharpened iron rods at a high
velocity. High damage and good embed chance, but requires you to reload
every shot which requires you to stand still for three seconds to pull
the string back. You can also Use a wrench on it to force it to store
more rods (read: more than one), but risks it exploding and shooting you
instead.

The syndicate variant, avaliable to traitor engis, can fire three rounds
before needing a reload, and features a scope and better armor piercing
ammpo, but costs 10TC. I see it as a sidegrade to the revolver - quieter
and has much more widespread ammuniton, but holds less ammo and doesnt
have the same burst stopping power. And, to those concerned about the
balance of a non-traitor with this item - the AP ammo can only be made
by the traitor who bought it, and anyone else has to use normal ammo.
 
GUN STAT JUNK
Normal one has 60% embed chance and does 40 damage (against unarmored
targetd), but requires you to wait at least 3 seconds not moving to pull
the string back. Good alpha strike but not sustainable in a long fight.
Its akin to a pipegun.

Lacks any AP qualities besides piercing a jumpsuit, because any wound
chance it has is due to a bare skin bonus. Generally not a great weapon
to fight sec with.

Syndie version is generally the above but better. Takes less to pull the
string back, slightly higher damage, better fire rate, etc. Doesnt fare
well against any armor thats equivalent to sec gear or better due to
most having low (relatively) AP and wound chance, but good bare wound
bonus.

STATS TLDR: Its good against unarmored chumps and greyshirts but anyone
in armor that protects against bullets will kick your teeth in.

Also, Ammo is crafted from an iron rod. I wanted to have it just fire
rods as is, but theyre stacked items which you cant define projectiles
or ammo from.

## Why It's Good For The Game

I've always felt engi, for as big of a department as it is, is lacking
in the "fun weapons" area. Sci has mechs and xenobio, med has chem nades
and syringe guns, and cargo has anything the QM will buy - but other
than the flamer and shocked doors, engi doesnt have much. Thats why I
made this pr. it was originally just a traitor item, as they lacked many
traitor items in their shop, but I felt like a worse, bootleg version
would suit them.

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
add: Enginenering rebar crossbows + tot kit
add: Added a bunch of ammos and crafting junk to make the ammo exist
image: added icond for all the above
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-11-08 21:31:59 +00:00
Xackii
2fb91b9443 Sutures now heal a percentage of basic/animal max health instead of a flat amount (#79266)
## About The Pull Request

Changes the amount of HP gained when treating basic and animal mobs. For
today mobs receive treatment equal to the half treatment of the selected
object like sutures heal 5 hp.

Because of this, mobs with a large amount of HP, such as gorillas, spend
one stack of sutures to heal themselves for 1-3% of HP, while mobs with
a small amount of HP, for example 25 HP, will receive treatment equal to
20%.

With this PR, all basic/animal mobs receive the same % of HP equal to
the amount of healing for using one healing object. Like if sutures heal
10 brute damage, it will heal 10% of basic/animal mob HP.

## Why It's Good For The Game

Makes treatment for basic and animal mobs more understandable and less
resource-intensive, like if you heal basic/animal mob with 100 hp or 220
hp you will need the same number of sutures.

## Changelog

🆑
balance: Sutures now heal a percentage of basic/animal max health
instead of a flat amount.
/🆑
2023-10-27 13:19:45 -06:00
MrMelbert
5bf6d09903 Cuts the number of apply_damage copypaste procs from 3(.5) to 1, fixing a few bugs along the way (#79207)
## About The Pull Request

- `apply_damage` is now uniform, handled, in a single place. At the
living level.
- Fixes people being held at gunpoint from being unable to flinch from
taking damage.
- Fixes a few signals (explodable, glass jaw) of apply damage maybe
potentially not having effects if the passed hit zone was a bodypart and
not a def zone.
- Fixes regenerator component always halting regeneration no matter what
damage taken.
- Fixes pressure damage being unaffected by `brute_mod` despite what
documentation claims.
- Signalizes the `check_species_weakness` proc on species. 

## Why It's Good For The Game

The copy+paste of this proc made it awful, awful to maintain or add
features to. And also made it very bug prone.

This just takes a step forward in making sustaining damage a lot more
consistent, not only across all mobs, but across all methods of...
taking damage. Unarmed attacks, hulk, item attacks, etc.

## Changelog

🆑 Melbert
fix: People held at gunpoint can now flinch when being hit. 
fix: Regenerating mobs no longer stop regenerating no matter hit with
what.
fix: Pressure damage is now properly modified by a mob's brute damage
modifier.
fix: Fixes some occasions which some effects (glass jaw, explodable worn
items) won't respond to hits.
refactor: Refactored core code related to mobs sustaining damage. 
/🆑
2023-10-27 18:55:30 +00:00
SyncIt21
3fadfd4a57 Plastic sheet creates 4 tiles via the tiles menu option (#79144)
## About The Pull Request
- Fixes #79127

The argument `max_res_amount` in `/datum/stack_recipe` must be greater
than 1 for the recipe to produce multiple tiles. I made this value the
same as creating iron floor tiles from a stack of iron sheets i.e. 20

## Changelog
🆑
fix: plastic sheet produces 4 tiles via the tiles option without using
the crafting menu
/🆑
2023-10-24 01:43:49 +02:00
carlarctg
3aef9bd905 Added more slapcraft recipes, improved its component, fixed base cowboy hat type (#78854)
## About The Pull Request

Added slapcraft recipes for: Pillow suits, pillow helmets, bone and
sinew tailoring/weaponry, pipeguns, ghetto jetpacks, and pneumatic
cannons.

The base type of cowboy hats no longer looks and is named like a bounty
hunter hat, clarifying the recipe for the heroic laser musket.

Fixed an issue where if a slapcraft recipe required more than one
instance of its 'primary' slapcrafting item, it wouldn't show the
additional instance when examining its recipes.

## Why It's Good For The Game

Idk lol 

## Changelog

🆑
qol: Added slapcraft recipes for: Pillow suits, pillow helmets, bone and
sinew tailoring/weaponry, pipeguns, ghetto jetpacks, and pneumatic
cannons.
code: The base type of cowboy hats no longer looks and is named like a
bounty hunter hat, clarifying the recipe for the heroic laser musket.
They need cowboy hats not bounty hats.
fix: Fixed an issue where if a slapcraft recipe required more than one
instance of its 'primary' slapcrafting item, it wouldn't show the
additional instance when examining its recipes.
/🆑
2023-10-18 13:55:39 +13:00
lessthanthree
7626c3bd6c Tram v6/Transport Subsystem (#78230)
Co-authored-by: Unit0016 <50649185+unit0016@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
2023-10-17 10:52:38 -07:00
MrMelbert
9664d24c13 Refactors UnarmedAttack so we don't have like 4 Unarmed Attack signals, kills two more snowflake species procs (#78991)
## About The Pull Request

- Deletes `spec_unarmedattack`
- Deletes `spec_unarmedattacked`
- Replaces `COMSIG_HUMAN_EARLY_UNARMED_ATTACK` with
`COMSIG_LIVING_EARLY_UNARMED_ATTACK`
- Replaces uses of `COMSIG_HUMAN_MELEE_UNARMED_ATTACK` with
`COMSIG_LIVING_EARLY_UNARMED_ATTACK`
- Fixes(?)(I've never seen this work) / Elementizes Monkey ability to
bite while handcuffed
- Monkey clever `attack paw` / `attack hand` thing is now handled the
same on the human level (via `resolve_unarmed_attack`)

## Why It's Good For The Game

Atomized from swing branch. I was really annoyed with these two signals,
this kinda unifies the behavior between living and human mobs (they were
already quite similar).

One thing of note is that this will make dis-coordinated humans use
`attack_paw` rather than `attack_hand`, so they'll bite people instead
of punching them. I'm not sure if this is what we want, if we wanna
tweak that before then I can by all means.

## Changelog

🆑 Melbert
refactor: Refactored unarmed attacking mechanisms, this means
dis-coordinated humans will now bite people like monkeys (like how
coordinated monkeys punch people like humans?)
refactor: Dis-coordinated humans smashing up machines now use their
hands, rather than their paws
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-10-15 22:25:19 -06:00
lessthanthree
b414387591 Remove tiered canister construction (#78909)
## About The Pull Request

In https://github.com/tgstation/tgstation/pull/66210 we removed canister
tiers, but didn't change the construction code. Currently you still have
to build an unfinished frame with 5 iron, 'upgrade' it to tier 1 with
another 5 iron, then complete it.

This combines it all into a single 10 iron recipe.

## Why It's Good For The Game

Eliminates the extra steps in canister construction, since you can't
upgrade above tier 1 any more anyways.

## Changelog

🆑 LT3
qol: Canisters can now be built in one step, no upgrading required
/🆑
2023-10-12 10:58:07 -06:00
Lamb
0b8f4dc9ce adds boxes of bandages, and bandages to go in them (#78406)
## About The Pull Request
have you ever walked into medbay, picked up a suture, and asked yourself
"how do i know how to stitch myself up?"
do you long for the simplicity of a bandage that can be popped on, no
thought required?
well, look no further! now introducing, the DeForest First Aid Bandage!

![image](https://github.com/tgstation/tgstation/assets/110322848/bb737393-0e2b-4773-a673-ab784a409bed)
each box of bandages holds five each, which are all one time use items.
using one heals up to 25 brute damage from a single part of the body.
boxes of bandages will drain much faster than sutures, and are much less
precise for healing specific increments of damage, but heal more in
exchange. they are also worse at stopping blood loss, but not completely
useless for it.

they can be found in a handful of places:
(some) high value medkits
in paramedic's pockets
some medbay lobbies
some cargo holds
all sec infirmaries
in goodies on the cargo console
maint loot
and nanomeds!

i considered making these replace brute kits, but those are used in a
lot of old references, so it felt a bit passe. so i made a new item that
is a bit more balanced, so they can be mapped in and added to vendors
without much worry.
## Why It's Good For The Game
cute item, heals the people who wouldn't really be going into medbay
anyways, and is fairly flavorful. if it's a bit too strong as is i can
tweak the number, but the goal is to not be powerful enough to outshine
sutures, while still offering somewhat effective healing for rough
housing assistants and antags
## Changelog
🆑
add: adds boxes of bandages, a quick healing item
/🆑
2023-10-01 23:54:46 -06:00
Emmett Gaines
e8d12b29fe Removes all spawn locations of the awakened plush except the bus ruin (#78559)
It's supposed to be a coderbus easter egg, stop putting it elsewhere. I
want it to stay rare enough that it confuses people when it makes it to
the station.

The secure closet had it on the loot table and due to how that's coded
it has to have something replace the slot (or rework the loot spawning
code there) so I put a live bomb in the slot instead.

🆑 ninjanomnom
del: An easter egg plushie that was spawning where it shouldn't has been
brought back home.
add: The secure closet can now spawn live gibtonite, enjoy your free
bomb.
/🆑
2023-09-30 04:31:50 +02:00
nikothedude
2bdadebbad Moves gauze removal signals to gauze destroy, removing weird seep_gauze usages + misc improvements (#78570)
## About The Pull Request

Title. 
## Why It's Good For The Game
Gauze removal was handled by using seep_gauze(9999) instead of just
deleting it, which was really fucking weird??
 
This makes behavior more sensical and modular (you can remove gauze
without using seep_gauze now).
## Changelog
🆑
code: Gauze removal is now handled by the gauze's destroy instead of
seep_gauze
/🆑
2023-09-29 16:45:43 -04:00
carlarctg
8d57758420 Converts slapcrafting into a component (#78450)
## About The Pull Request

Converts slapcrafting into a component!

The component is added on to an ingredient (presumably the main
ingredient) with a list of recipes attached. If you interact an
ingredient (if no ignredients, a tool) with it, you will start crafting
the recipe. If there's multiple, pick between them with a radial menu.

Opening on draft as there's just a liiiiil bit left to do. The actual
wired rod was left for last.

## Why It's Good For The Game

Slapcrafting is simply better and more accessible and less laggy than
menu crafting. By making it a component we can attach it to things in
which it'd make sense to while stopping unintended weirdness that might
arise from this being global.

Additionally the way examine lets you see crafting recipes opens up
visibility for those, which allows new players to learn about them in a
intuitive manner.

## Changelog

🆑
refactor: Turned slapcrafting into a component! You can examine
compatible items to see what recipes they can be used in, and what the
ingredients for them are. For example, spears and the head-on-spear
crafting recipe.
/🆑
2023-09-27 12:38:10 +01:00
SyncIt21
7c24788513 Refactors & patches for grinding & juicing (#78268)
## About The Pull Request

This deals with grinding & juicing in 4 stages

**1. General grinding & juicing**
Nothing player facing, just added some extra null checks to ensure we
use `reagents` and `target_holder` only when they are not null. The
current way it was setup did not check for this

**2. Grinding Stacks**
- Fixes #48387
- Fixes #78180
- Fixes #77878

This changes the way stacks are grinded. Rather than grinding the whole
stack and have reagents wasted from grinding because there isn't enough
space in the beaker we do the reverse.
We calculate how many pieces of cable(or sheets of material) can be
grinded "based" on the available volume inside the `target_holder`(i.e.
beaker for all in 1 grinder, or internal buffer for chemical plumbing
grinder, mortar & pedestal)

**For example**
Say you have a beaker of 100 ml capacity and you have a stack of 50 iron
sheets where each sheet of iron when grinded yields 20 units of iron
reagent. Doing some simple math we should only be able to grind 5 sheets
of iron(20 units of iron per sheet x 5 = 100 ml capacity). This means
the remaining 45 sheets of iron should be left untouched and we should
be able to eject and regrind them in a different beaker if we don't have
the space for it.

This PR does exactly that. It computes how many pieces/sheets can be
grinded based on the available volume for grinding (e.g. based on the
available volume in your beaker for the all in 1 grinder) and grinds
exactly that many pieces, leaving the rest of stack untouched so you can
reuse them

This way you avoid wasting stacks when your beaker doesn't have the
required space to hold its reagents

**3. Plumbing Chemical Grinder**
- Not sure how nobody noticed but the plumbing chemical grinder
completely stopped working because wrong arguments were passed to the
items grind & juice procs

2ddbdca1b7/code/modules/plumbing/plumbers/grinder_chemical.dm (L47)
When it fact it should have been
`I.grind(reagents, usr)`
So yeah the plumbing chemical grinder works again

- Fixes #75429
The plumbing chemical grinder now blocks anything that isn't an
`obj/item` from entering inside it. The `grind` proc is set up to accept
only items anyway so allowing mobs to enter is just a waste of
processing power. That way nobody gets stuck inside,

- Fixes #62822
The chemical grinder now accepts items coming at it from any direction.
if you don't want to throw stuff at it you can manually put stuff in it
with hand. If you try to use a storage item like a bag(plant bag or any
bag) it dumps all its contents in the grinder.

**4. All in 1 Grinder**  
- Fixes #76983
You can now remove the beaker when the blender is unpowered with right
click. The left click does not work when power is off because
`ui_interact()` proc is disabled which was responsible for ejecting the
beaker & its contents. The right click was meant to compensate for this
but it also checked if power was available and it also failed. Now that
check has been removed meaning you can eject the beaker & its contents
via right click

- Fixes #54813 
The delay and shake animation is already handled by the `operate()` proc
but the mix settings would add an additional timer on top of that with a
fixed delay of 50 deciseconds. That timer is adjusted so its reduced
from upgraded parts

## Changelog
🆑
code: added some null checks for general juicing & grinding items
fix: grinding stacks now grinds as many pieces/sheets from the stack as
possible that can fit in a beaker/container without wasting the whole
stack
fix: plumbing chemical grinder now actually works again
fix: the plumbing chemical grinder allows stuff to enter from any
direction but not mobs and also accepts items put inside it via hand
including bags
fix: You can remove the beaker from the all in 1 grinder when power is
off via right click
fix: All in 1 grinder now mixes faster with upgraded parts
refactor: you can no longer walk into a plumbing chemical grinder
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
2023-09-17 08:27:21 +00:00
Zephyr
ccae3b5dd2 Items created from durathread are now 50% more resistant to consuming (#78325)
## About The Pull Request

Title.
This means that a moth can take, on average due to rounding, double the
normal bites from an article of durathread clothing.
2023-09-17 01:28:23 -05:00
nikothedude
009af8c2ce [TEST-MERGE FIRST] Wound refactor number two: Full synthetic support (#78124)
## About The Pull Request

Heavily refactors wounds AGAIN.

The primary thing this PR does is completely change how wounds are
generated and added - while the normal "hit a guy til they bleed" stuff
works about the same, asking for a specific type of wound, say, like how
vending machines try to apply a compound fracture sometimes, isnt going
to work if we ever get any non-organic wounds, which the previous
refactor allowed.

With this PR, however...
* You can now ask for a specific type of wound via
get_corresponding_wound_type(), which takes wound types, a limb, wound
series, etc. and will try to give you a wound fitting those
specifications - but also, a wound that can be applied to a limb.
* This will allow for a vending machine to apply a compound fracture to
a human, but a collapsed superstructure (assuming my synth wounds go in)
to a robot

There are now new "series types" and "wound specific types" that allow
us to designate what series are "mainline" and randomly generatable, and
what are "alternate types" and must be generated manually - you can see
the documentation in wounds.dm.

The behavior of limping and interaction delays has been abstracted to
datum/wound from bone wounds to allow just, general ease of development

Pregen data now allows for series-specific wound penalties. Example: You
could set a burn wound's series wound penalty to 40, which would make
wound progression in the burn category easier - but it would not make it
any easier to get a slashing wound. As it stands wound penalties are for
wounds globally

Scar files are now picked in a "priority" list, where the wound checks
to see if the limb has a biostate before moving down in said list.
Example: Wounds will check for flesh first, if it finds it - it will use
the flesh scar list. Failing that, they then check bone - if it uses
that, it will use the bone scar list. This allows for significantly more
modular scars that dont even need much proc editing when a new wound
type is added

Misc changes: most initial() usage has been replaced by singleton
datums, wound_type is now wound_types and thus wounds can accept
multiple wound types, wounds can now accept multiple tool behaviors for
treatment, wounds now have a picking weight so we can make certain
wounds rarer flatly,

This PR also allows for wounds to override lower severity wounds on
generation, allowing eswords to jump to avulsions - but in spirit of
refactoring, this has been disabled by default (see pregen data's
competition_mode var).
## Why It's Good For The Game

Code quality is good!

Also, all the changes above allow wounds to be a MUCH more modular
system, which is one of its biggest problems right now - everything is
kinda hardcoded and static, making creative work within wounds harder to
do.

## Changelog
🆑
refactor: Refactored wounds yet again
fix: Wounds are now picked from the most severe down again, meaning
eswords can jump to avulsions
fix: Scar descs are now properly applied
/🆑
2023-09-09 19:20:21 -04:00
Lamb
3c0159b143 replaces surgical and coroner duffels with surgery trays and medical carts, resprites razor (#77975)
## About The Pull Request
replaces all instances of surgical duffels with surgery trays, and all
coroner duffels with morgue surgical trays.
they contain about the same items, with surgical trays/carts also having
bone gel and tape, since their list of holdable items is much more
limited.
the surgery tray is a diagetic storage unit that displays any surgery
tool it's holding in a small, almost world-state esque form on top of
it. it can be carried around by dragging it on to yourself, but it will
slow you down like an unzipped duffel would. it can also be deployed by
activating it, and pulled around, but it will roll noisily in the
process.
currently, all tool tiers are supported - from alien, to advanced, to
cruel, to normal.

![image](https://github.com/tgstation/tgstation/assets/110322848/5b31767e-de27-4352-b2bf-89cde06a7b5c)
here you can see just a few of the possible combinations of tools -
default, default morgue, advanced, and alien. but any combination of
these tools should work together somewhat cleanly, as you can see here:

![image](https://github.com/tgstation/tgstation/assets/110322848/12ae3501-44bc-41a5-b4f4-d01c05cc6038)
also adds a medical razor variant, because otherwise they wouldn't fit
with the look of the other tools on the tray, before and after here:

![image](https://github.com/tgstation/tgstation/assets/110322848/c71af9ed-e9bb-40ff-81b8-0395d8afdf5a)
## Why It's Good For The Game
having constantly visible tool storage like this means you don't have to
worry about the one tool you need from the bag being stolen - if it is,
you can see it before an operation starts, and plan around that! it also
gives a little flexibility to mappers - if they'd like a more mobile
cart for their medbay, or if they'd like the somewhat stationary tray.
it also plain looks cool, and isn't quite as clunky as a duffelbag would
be.
## Changelog
🆑
add: adds medical carts and surgery trays
image: gives the surgery razor a unique sprite
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-09-04 00:58:11 +02:00
nikothedude
554edc60e9 [TEST-MERGE FIRST] Allows all limbs to be dismembered and significantly refactors wounds (#77813)
## About The Pull Request
**_THIS PR UPDATES THE SCAR VERSION - ALL EXISTING SCARS WILL BE
WIPED_**

Expands the wound system functionality to support any type of limb at
all.

To do this, wounds have been significantly refactored. For starters,
wounds now use limb biotype instead of wound type for determining what
they can be applied to. They also use singleton instances for most "can
we apply this" checks instead if copy pasted initial().

Wounds now use a "wound series" instead of wound_type for determining
the, well, series. Previously, all WOUND_BLUNT wounds were considered
bone wounds, making it impossible to have multiple WOUND_BLUNT wounds at
once. Now, its based on wound series - bone wounds are of the blunt bone
wound series, and use the typical logic.
One change that results from this is the ability for everything with a
jointed limb to get a dislocation. Yes, this includes things like
prosthetics.

On the note of external and internal biotypes: Exterior are bones,
Interior is flesh. Interior protects exterior from slash until its
mangled, at which point it either exposes exterior to slash or allows
dismemberment if theres no exterior.
Basically - it acts the exact same way, except its not hardcoded, and
its more modular.

A lot, lot more changes were made - I cant name them all, but if youre
interested, you can read up. Wounds have more procs, more
modularization, and less hardcoding.

Sadly, scars have been updated in such a way so that the wound version
must be updated. Scars will be deleted.

## Why It's Good For The Game

As it stands, half the limbs in the game can't be dismembered. This
changes that, allowing every single limb to be dismembered.

The two dismemberment critera are now:

1. If able to get mangled flesh or bone, it can be dismembered once it
gets mangled flesh and bone (or JUST flesh if it only has a internal
biostate, vice vers afor bone if external only)
2. If it cant be dismembered by the above, it will have a chance to
dismember when at or above 80% of its total max damage

Finally, code being better is usually a good thing.

## Changelog
🆑
balance: Prosthetics and slimepeople can now have limbs dismembered
balance: Slimepeople can now receive slash wounds, but cannot bleed
balance: Most limbs can now be dislocated
refactor: Scar backend reworked, scars will be wiped as they update to
the new format
/🆑
2023-08-29 21:00:36 -04:00
FlufflesTheDog
7941c0c26f Makes it easier to place tiles on multi-z holes (#77935)
## About The Pull Request
Adds the "open space click handler" to tile stacks, which makes it so
you don't have to pixel hunt for a turf on the BELOW z level in order to
fix a hole.
This exists on rods and rpds since they're often used to fix holes.
But wasn't added to tiles when they were made to be able to fix holes
directly, without rods.

Additionally, closes #77540 by having the open space click handler loop
up z levels so that it works if you're clicking on items from multiple z
levels away.
## Why It's Good For The Game
The current behavior can be very frustrating to work around, and appears
to not be intended.
## Changelog
🆑
fix: Made it easier to place tiles on multi z level holes 
/🆑
2023-08-28 05:01:03 +02:00
iwishforducks
a2d7005f44 Makes railings easier to construct, while making them easier to destroy. (#77894)
## About The Pull Request

Changes the cost of railings from 6 metal rods to 2 metal rods.
The time to construct has been reduced from 3.6 to 1 second to be
in-line with the grille.
The health of railings has been reduced from 75 to 25.
Armor of railings have been reduced as well by about 30%.

I'm not positive on whether or not it should cost 1 metal rod or 2. I
decided to play it safe and make it 2. If some maintainer is interested
in making it only cost 1 rod then I will gladly do so- but this was my
compromise.

Also changes decaseconds/ticks to seconds in the rod construction code
to make it look better.

## Why It's Good For The Game

Railings look nice and it's an absolute pain in the ass that they cost 6
metal rods.

They're also currently substantially stronger than grilles for whatever
reason. Grilles have 50 health, while railings have 75.
The armor of railings makes this health of 75 to a whopping effective
health of 150.

Railings shouldn't be stronger than full-tile grilles. They should be
fairly flimsy.
They also shouldn't take a wrench AND wirecutters to deconstruct.
Grilles only take wirecutters and we should mirror that.

## Changelog

🆑
balance: Railings now only cost 2 rods and are much easier to construct.
But they can now be destroyed much easier and cut with wirecutters
without unwrenching.
/🆑
2023-08-25 20:35:46 -04:00
YehnBeep
59a95ba984 Makes messenger bags craftable (#77899)
## About The Pull Request

Makes messenger bags craftable using the same recipe as backpacks and
satchels.

## Why It's Good For The Game

Just making the list of craftable containers complete

## Changelog

🆑
qol: Messenger bags can be crafted with 4 cloth.
/🆑
2023-08-24 19:05:18 -06:00
YehnBeep
0552b41f7b Makes satchels craftable + small map fix (#77702)
## About The Pull Request

This makes satchels craftable using the exact same recipe as backpacks.

Also because it seems too small to be worth making a whole separate PR
for (though I can if it'd be preferred), also included is a fix for a
light inside a wall on Delta Station.


![image](https://github.com/tgstation/tgstation/assets/86855173/c72abe7e-6fd4-4fb0-a15a-a5bcf19f41e2)


## Why It's Good For The Game

I think it's a bit of a fashion crime that we can make backpacks but not
satchels.

## Changelog

🆑
qol: Satchels can now be crafted using the same recipe (4 cloth) as
backpacks.
fix: Fixed a light inside a wall on Delta Station.
/🆑
2023-08-21 02:09:21 +02:00
vect0r
ad6b16208c Iron Rods no Longer Say They Take Energy for Cyborgs (#77684)
## About The Pull Request

Removes the "enough energy" description from when borgs look at their
materials

## Why It's Good For The Game

They don't use energy anymore.

## Changelog
🆑 Vect0r
spellcheck: fixed a few typos
/🆑
2023-08-19 01:20:49 +02:00
Helg2
abe4af3fa3 Fixes iron floor tiles instances without /base subtype. (#77669)
## About The Pull Request
Closes https://github.com/tgstation/tgstation/issues/77564.
As it was reskinning into the `/obj/item/stack/tile/iron` it couldn't
merge with the `/obj/item/stack/tile/iron/base` tiles.
## Changelog
🆑
fix: Base iron floor tiles now will be able to stack with other base
iron floor tiles after being reskined to the base subtype.
/🆑
2023-08-17 22:06:26 -04:00
Andrew
2d34c7433a New Mech UI and equipment refactor (#77221)
![bWJlVIDO53](https://github.com/tgstation/tgstation/assets/3625094/d75030b5-59e9-43f6-96b4-1b7564caceef)

## About The Pull Request

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

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

## Why It's Good For The Game

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

## Detailed Changes

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

Previous UI for comparison:

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

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

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

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

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

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

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

### Mounted Radio

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

### Cabin Sealing

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

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

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

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

### RCS thrusters

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

### Mounted Air Tank

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

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

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

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

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

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

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

### Stock part changes

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

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

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

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

Cargo mech comes without it roundstart.

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

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

### Maintenance

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

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

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


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

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


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

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

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

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

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

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

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

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

### Power consumption and overclocking

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

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

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

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

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

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


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

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


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

When you stop overclock, the temperature goes back down.

### Other changes and fixes

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

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

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

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

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

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

## Changelog

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

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Sealed101 <cool.bullseye@yandex.ru>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-08-15 18:02:28 +01:00