Files
Leland KembleandGitHub af8dc77f81 Adds very large tripwires that trip mechs (#96895)
## About The Pull Request

<img width="194" height="63" alt="image"
src="https://github.com/user-attachments/assets/8b81ede5-3ac1-427c-b580-f75a4b05fae5"
/>

Tripwires, for mechs. A very sturdy cable hung over a space 2-5 tiles
wide, that mechs will trip over if they aren't paying attention.


https://github.com/user-attachments/assets/eb77ac44-73ad-43f7-aa48-3008aedc79e0

It also hurts people it falls on in pretty much the same way as a
vending machine. (it's using `fall_and_crush()`)


https://github.com/user-attachments/assets/97fccb33-d479-4170-8601-07a5b32fe740

To humans, the tripwire blocks movement unless you carefully step over
it(walk) or crawl under it. All beings suffer no issue walking across
the tripwire the long way.

The tripwire is created from wiring together two tripwire poles with a
tripwire cable item. The poles are created from iron rods and iron, the
cable is created from just cable. The wiring takes 3 seconds * how far
the posts are to complete, to a maximum of 12 seconds.

They take significantly increased (10x) damage from any sharp object,
and can be cut in a few seconds using wirecutters. They otherwise have a
`max_integrity` of 500, so a powerful demolition tool(like a mech's
fists or a drill) or a sharp object are fairly necessary to take them
down in a combat-reasonable amount of time.

The tripping has four effects - the damage to the being that the mech
fell on, the paralyzing of that being, damage to the mech pilot's head,
and the time it takes for the mech to get back up. All four of these
numbers are based off of the mech's max health divided by 5, or
`damage_value`.

`damage_value` is applied directly as damage to whoever it falls on.
That person is paralyzed for `damage_value` / 10 seconds.
The pilot of the falling mech recieves `damage_value` / 5 to their head,
with a significant wound bonus. Wear a helmet.
The mech itself recieves `damage_value` * 0.15 seconds of immobility(can
still attack, but can't rotate). (`damage_value` / 10 * 1.5)
What these numbers mean on common exosuits:
- odysseus - mob under hit for 24 damage & 2.4 seconds, pilot hit for ~5
damage, immobile for 3.6 seconds
- ripley - mob under hit for 40 damage & 4 seconds, pilot hit for 8
damage, immobile for 6 seconds
- gygax - mob under hit for 50 damage & 5 seconds, pilot hit for 10
damage, immobile for 7.5 seconds
- durand - mob under hit for 80 damage & 8 seconds, pilot hit for 16
damage, immobile for 12 seconds
- marauder - mob under hit for 100 damage & 10 seconds, pilot hit for 20
damage, immobile for 15 seconds

All of these stun times are large enough to where if there were multiple
people with good weapons around, they could most certainly kill you
before you stand back up. So, don't trip.

Finally, obviously, the clarke is immune. Who'd have thunk.

## Why It's Good For The Game

First, let's all thank the ideas guy. The ideas guy for today is
[dubblywumps](https://discord.com/channels/699727870846697493/705679956021215264/1523883105276919969).
Thank you, dubblywumps. Good idea.

So, what's the point of it? It's an effective area denial tool and
fortification specifically effective against mechs. You can set them up
in the hallways in a reasonable length of time, and it'll at the very
least slow a rampaging mech down, as while they're not strong enough to
handle more than a few punches from a mech, they're strong enough to
handle a few. Falling over as a mech is obviously extremely punishing,
so unless they can take a delay to destroy the wire(or a long delay to
destroy the wire at range), or get around it by tearing through
walls(also a delay), they have to abide by your preferred positioning.
No other tool exists that can truly force a delay in a mech's movement
besides actual walls & windows, which delay humans far more
significantly.

It is not remotely practical in a directly offensive sense, with even
the shortest 2-tile barricades taking too long to set up to do so before
you've been clobbered and perforated. It is practical in an indirectly
offensive sense, to force a fight to continue and prevent the worst part
about fighting a mech: when it walks away. This requires forethought or
teamwork, though. It is also practical in a defensive sense, in
combination with normal barricades to block projectiles you could
reasonably hold a mech off for a while or even potentially force a
stalemate using ranged weapons.

They're very, very cheap materials-wise, but the expense in their
creation is in the time to set them up in a good location. Because they
also slow down people, people won't be setting scores of them up in the
middle of the halls. And if they did, wirecutters take them down faster
than they can be put up.

You may be balking about the immobility time applied to the mech. The
numbers mean that in order to destroy the mech while it lays on the
ground, you must deal a flat 33 + armor damage per second for the
duration of the stun. This is an unreasonable task for one person with a
good crew melee weapon, a reasonable task for two, and an easy task for
three. I think that two people being able to beat you to death after you
failed to take heed of the not-at-all-hidden anti-mech weapon is
reasonable. This is also assuming you have no support team or second
mech, which would be perfectly capable of defending you during your
stun.

## Changelog
🆑

add: Added craftable anti-mech tripwires. A mech that foolishly steps on
one will fall down and be immobilized temporarily. Don't let it fall on
you!

/🆑
2026-07-16 22:07:35 +01:00

187 lines
5.4 KiB
Plaintext

/datum/crafting_recipe/paperframes
name = "Paper Frames"
time = 1 SECONDS
reqs = list(
/obj/item/stack/sheet/mineral/wood = 5,
/obj/item/paper = 20,
)
result = /obj/item/stack/sheet/paperframes
result_amount = 5
category = CAT_STRUCTURE
requirements_mats_blacklist = list(/obj/item/stack/sheet/mineral/wood)
/datum/crafting_recipe/rib
name = "Colossal Rib"
reqs = list(
/obj/item/stack/sheet/bone = 10,
/datum/reagent/fuel/oil = 5,
)
result = /obj/structure/statue/bone/rib
category = CAT_STRUCTURE
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED
/datum/crafting_recipe/skull
name = "Skull Carving"
reqs = list(
/obj/item/stack/sheet/bone = 6,
/datum/reagent/fuel/oil = 5,
)
result = /obj/structure/statue/bone/skull
category = CAT_STRUCTURE
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED
/datum/crafting_recipe/halfskull
name = "Cracked Skull Carving"
reqs = list(
/obj/item/stack/sheet/bone = 3,
/datum/reagent/fuel/oil = 5,
)
result = /obj/structure/statue/bone/skull/half
category = CAT_STRUCTURE
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED
/datum/crafting_recipe/firecabinet
name = "Fire Axe Cabinet"
result = /obj/item/wallframe/fireaxecabinet
time = 8 SECONDS
reqs = list(
/obj/item/stack/sheet/plasteel = 5,
/obj/item/stack/sheet/glass = 5,
/obj/item/stack/cable_coil = 10,
)
category = CAT_STRUCTURE
/datum/crafting_recipe/mechcabinet
name = "Mech Removal Cabinet"
result = /obj/item/wallframe/fireaxecabinet/mechremoval
time = 8 SECONDS
reqs = list(
/obj/item/stack/sheet/plasteel = 5,
/obj/item/stack/sheet/glass = 5,
/obj/item/stack/cable_coil = 10,
)
category = CAT_STRUCTURE
/datum/crafting_recipe/manucrate
name = "Manufacturing Storage Unit"
result = /obj/machinery/power/manufacturing/storagebox
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WELDER)
time = 6 SECONDS
reqs = list(
/obj/item/stack/sheet/iron = 10,
)
category = CAT_STRUCTURE
crafting_flags = CRAFT_CHECK_DENSITY
/datum/crafting_recipe/adam_pedestal
name = "Adamantine Pedestal"
result = /obj/item/adamantine_pedestal
reqs = list(
/obj/item/stack/sheet/mineral/adamantine = 20,
)
time = 120 SECONDS
category = CAT_STRUCTURE
/datum/crafting_recipe/sm_small
name = "Small Supermatter Crystal"
result = /obj/machinery/power/supermatter_crystal/small
reqs = list(
/obj/item/gun/magic/wand/shrink = 1,
/obj/item/adamantine_pedestal = 1,
)
machinery = list(
/obj/machinery/power/supermatter_crystal = CRAFTING_MACHINERY_CONSUME,
)
time = 120 SECONDS
category = CAT_STRUCTURE
/datum/crafting_recipe/elder_atmosian_statue
name = "Elder Atmosian Statue"
result = /obj/structure/statue/elder_atmosian
time = 6 SECONDS
reqs = list(
/obj/item/stack/sheet/mineral/metal_hydrogen = 20,
/obj/item/stack/sheet/mineral/zaukerite = 15,
/obj/item/stack/sheet/iron = 30,
)
category = CAT_STRUCTURE
/datum/crafting_recipe/secure_safe
name = "Secure safe"
result = /obj/item/wallframe/secure_safe
reqs = list(
/obj/item/stack/sheet/plasteel = 10,
/obj/item/stack/sheet/mineral/titanium = 5,
/obj/item/stack/cable_coil = 5,
/obj/item/stack/rods = 5,
/obj/item/wallframe/button = 1,
)
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_DRILL)
time = 30 SECONDS
removed_mats = list(
/datum/material/alloy/plasteel = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.55,
/datum/material/titanium = SHEET_MATERIAL_AMOUNT,
/datum/material/glass = SHEET_MATERIAL_AMOUNT,
)
category = CAT_STRUCTURE
/datum/crafting_recipe/vault
name = "Vault"
result = /obj/structure/safe/open
reqs = list(
/obj/item/stack/sheet/mineral/metal_hydrogen = 20,
/obj/item/stack/sheet/mineral/plastitanium = 10,
/obj/item/stack/cable_coil = 5,
/obj/item/stack/rods = 5,
/obj/item/wallframe/secure_safe = 1,
)
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_DRILL)
time = 90 SECONDS
removed_mats = list(
/datum/material/metalhydrogen = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/alloy/plastitanium = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/alloy/plasteel = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5,
/datum/material/titanium = SHEET_MATERIAL_AMOUNT,
/datum/material/glass = SHEET_MATERIAL_AMOUNT,
)
category = CAT_STRUCTURE
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND
/datum/crafting_recipe/vault_floor
name = "Floor Vault"
result = /obj/structure/safe/floor/open
reqs = list(
/obj/item/stack/sheet/mineral/metal_hydrogen = 20,
/obj/item/stack/sheet/mineral/plastitanium = 10,
/obj/item/stack/cable_coil = 5,
/obj/item/stack/rods = 5,
)
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_DRILL)
time = 90 SECONDS
category = CAT_STRUCTURE
removed_mats = list(
/datum/material/metalhydrogen = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/alloy/plastitanium = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/iron = SHEET_MATERIAL_AMOUNT,
/datum/material/glass = SHEET_MATERIAL_AMOUNT,
)
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND
/datum/crafting_recipe/tripwire_post
name = "Tripwire Post"
result = /obj/structure/tripwire/post
reqs = list(
/obj/item/stack/rods = 3,
/obj/item/stack/sheet/iron = 5,
)
tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER)
time = 5 SECONDS
category = CAT_STRUCTURE
removed_mats = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3,
)
crafting_flags = CRAFT_ON_SOLID_GROUND