ports some TG beartrap code over and reworks beartraps + security traps#11670
ports some TG beartrap code over and reworks beartraps + security traps#11670SirNightKnight wants to merge 13 commits into
Conversation
Test merge deployment history:Test Merge Deployed @ 05/22/2026 01:21:24 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: d8e7124 Test Merge Updated @ 05/22/2026 17:51:24 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 90f4537 Test Merge Updated @ 05/22/2026 19:07:11 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 90f4537 Test Merge Updated @ 05/22/2026 19:31:46 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 8caeb66 Test Merge Updated @ 05/23/2026 05:09:35 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 98176e5 Test Merge Updated @ 05/23/2026 18:01:47 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 98176e5 Test Merge Updated @ 05/23/2026 18:11:08 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 98176e5 Test Merge Updated @ 05/23/2026 19:41:16 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 4531c91 Test Merge Updated @ 05/23/2026 22:04:38 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: d7208e8 Test Merge Updated @ 05/24/2026 15:33:05 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 1a98021 Test Merge Updated @ 05/25/2026 15:26:09 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 1fed1f7 Test Merge Updated @ 05/25/2026 19:41:23 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 1fed1f7 Test Merge Updated @ 05/26/2026 02:04:15 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 1fed1f7 Test Merge Updated @ 05/26/2026 02:20:14 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: c4e1510 Test Merge Updated @ 05/26/2026 17:42:59 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 4b8bbd7 Test Merge Updated @ 05/26/2026 23:11:26 +00:00:Server InstanceMonkestation Merged ByCheffieGithub RevisionOrigin: 236c8b0 Test Merge Updated @ 05/27/2026 19:26:24 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: f92a358 Test Merge Updated @ 05/28/2026 00:29:30 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 4da5bf9 Test Merge Updated @ 05/28/2026 01:00:10 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 4da5bf9 Test Merge Updated @ 05/28/2026 03:54:58 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 99d8b28 Test Merge Updated @ 05/28/2026 04:16:35 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 57f74a2 Test Merge Updated @ 05/28/2026 17:04:13 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: b2815de Test Merge Updated @ 05/28/2026 18:04:45 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 4f12377 Test Merge Updated @ 05/28/2026 21:24:03 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 4f12377 Test Merge Updated @ 05/28/2026 21:54:09 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 4f12377 Test Merge Updated @ 05/28/2026 22:12:15 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: d1d7784 Test Merge Updated @ 05/28/2026 22:51:50 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 965f539 Test Merge Updated @ 05/28/2026 23:33:26 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 965f539 Test Merge Updated @ 05/29/2026 01:52:06 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: b10c7a1 Test Merge Updated @ 05/29/2026 06:22:33 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 0fc48f0 Test Merge Updated @ 05/29/2026 06:33:53 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 0fc48f0 Test Merge Updated @ 05/30/2026 03:50:03 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 4eb74ca Test Merge Updated @ 05/30/2026 04:18:45 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: a2ed753 Test Merge Updated @ 05/30/2026 04:26:32 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: a690160 Test Merge Updated @ 05/30/2026 15:48:20 +00:00:Server InstanceMonkestation Merged ByCheffieGithub RevisionOrigin: e0f23ca Test Merge Updated @ 05/30/2026 18:45:39 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: c38ad3c Test Merge Updated @ 05/30/2026 18:49:07 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: fa81ea5 Test Merge Updated @ 05/30/2026 19:55:38 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: fa81ea5 Test Merge Updated @ 05/30/2026 20:28:48 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 94217c0 Test Merge Updated @ 05/30/2026 21:38:04 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 94217c0 Test Merge Updated @ 05/31/2026 03:02:16 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: be3cc20 Test Merge Updated @ 05/31/2026 06:45:43 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 2bc126c Test Merge Updated @ 05/31/2026 06:57:56 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 5dc4f29 Test Merge Updated @ 05/31/2026 07:28:51 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 50b3915 Test Merge Updated @ 05/31/2026 19:50:59 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 005a558 Test Merge Updated @ 05/31/2026 20:28:03 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 005a558 Test Merge Updated @ 05/31/2026 22:16:17 +00:00:Server InstanceMonkestation Merged Bysirnightknight RevisionOrigin: 005a558 |
|
trying to make the security traps hard to spam out so im open to suggestions on that. could lock it behind cargo |
|
If this makes clumsy make them more dangerous then Slasher is gonna get an indirect nerf because they have clumsy(for some weird reason). |
<!-- 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 title <!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! --> ## Why It's Good For The Game in #11670 i made bear traps have a chance to snap on you if you're clumsy and slashers uses bear traps sooo.... <!-- Argue for the merits of your changes and how they benefit the game, especially if they are controversial and/or far reaching. If you can't actually explain WHY what you are doing will improve the game, then it probably isn't good for the game in the first place. --> ## 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. --> :cl: balance: slashers are no longer clumsy, instead they can't use guns. /:cl: <!-- Both :cl:'s are required for the changelog to work! You can put your name to the right of the first :cl: 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. --> ## Pre-Merge Checklist <!-- Don't bother filling these in while creating your Pull Request, just click the checkboxes after the Pull Request is opened and you are redirected to the page. --> - [ ] You tested this on a local server. - [ ] This code did not runtime during testing. - [ ] You documented all of your changes. <!-- Neither the compiler nor workflow checks are perfect at detecting runtimes and errors. It is important to test your code/feature/fix locally. -->
| var/is_expert = FALSE | ||
| if(user.mind?.get_skill_level(/datum/skill/cleaning) >= SKILL_LEVEL_MASTER) | ||
| is_expert = TRUE | ||
| if(!is_expert) | ||
| if(!do_after(user, 3 SECONDS, src)) | ||
| user.balloon_alert(user, "interrupted!") | ||
| return |
There was a problem hiding this comment.
| var/is_expert = FALSE | |
| if(user.mind?.get_skill_level(/datum/skill/cleaning) >= SKILL_LEVEL_MASTER) | |
| is_expert = TRUE | |
| if(!is_expert) | |
| if(!do_after(user, 3 SECONDS, src)) | |
| user.balloon_alert(user, "interrupted!") | |
| return | |
| var/is_expert = user.mind?.get_skill_level(/datum/skill/cleaning) >= SKILL_LEVEL_MASTER | |
| if(!is_expert && !do_after(user, 3 SECONDS, src)) | |
| user.balloon_alert(user, "interrupted!") | |
| return |
| var/is_expert = FALSE | ||
| if(user.mind?.get_skill_level(/datum/skill/cleaning) >= SKILL_LEVEL_MASTER) | ||
| is_expert = TRUE | ||
| if(!is_expert) | ||
| if(!do_after(user, 5 SECONDS, src)) | ||
| user.balloon_alert(user, "interrupted!") | ||
| return |
There was a problem hiding this comment.
| var/is_expert = FALSE | |
| if(user.mind?.get_skill_level(/datum/skill/cleaning) >= SKILL_LEVEL_MASTER) | |
| is_expert = TRUE | |
| if(!is_expert) | |
| if(!do_after(user, 5 SECONDS, src)) | |
| user.balloon_alert(user, "interrupted!") | |
| return | |
| var/is_expert = user.mind?.get_skill_level(/datum/skill/cleaning) >= SKILL_LEVEL_MASTER | |
| if(!is_expert && !do_after(user, 3 SECONDS, src)) | |
| user.balloon_alert(user, "interrupted!") | |
| return |
|
|
||
| set_arm(FALSE, user, FALSE) | ||
|
|
||
|
|
| return ..() | ||
|
|
||
| /// Extra checks for if the trap should close on the victim. Used by subtypes mostly. | ||
| /obj/item/restraints/legcuffs/beartrap/proc/is_valid_salad(mob/living/carbon/victim) |
There was a problem hiding this comment.
| /obj/item/restraints/legcuffs/beartrap/proc/is_valid_salad(mob/living/carbon/victim) | |
| /obj/item/restraints/legcuffs/beartrap/proc/can_close_on(mob/living/carbon/victim) |
| desc = "A rubber padded trap used to catch criminals non-lethally. Relies on security record data to function." | ||
| id = "security_trap" | ||
| build_type = PROTOLATHE | AWAY_LATHE | ||
| materials = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT, /datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/plasma =SMALL_MATERIAL_AMOUNT*5, /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5, /datum/material/gold =SMALL_MATERIAL_AMOUNT*5) |
There was a problem hiding this comment.
| materials = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT, /datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/plasma =SMALL_MATERIAL_AMOUNT*5, /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5, /datum/material/gold =SMALL_MATERIAL_AMOUNT*5) | |
| materials = list( | |
| /datum/material/plastic = SHEET_MATERIAL_AMOUNT, | |
| /datum/material/iron = SHEET_MATERIAL_AMOUNT, | |
| /datum/material/plasma =SMALL_MATERIAL_AMOUNT*5, | |
| /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5, | |
| /datum/material/silver =SMALL_MATERIAL_AMOUNT*5, | |
| /datum/material/gold =SMALL_MATERIAL_AMOUNT*5, | |
| ) |
| do_sparks(rand(1,3), FALSE, src) | ||
| if(!ismob(loc)) | ||
| do_sparks(1, TRUE, src) | ||
| qdel(src) | ||
| if(isturf(loc)) | ||
| close_trap() | ||
| visible_message(span_warning("\The [src] overloads!")) |
There was a problem hiding this comment.
| do_sparks(rand(1,3), FALSE, src) | |
| if(!ismob(loc)) | |
| do_sparks(1, TRUE, src) | |
| qdel(src) | |
| if(isturf(loc)) | |
| close_trap() | |
| visible_message(span_warning("\The [src] overloads!")) | |
| do_sparks(rand(1, 3), FALSE, src) | |
| visible_message(span_warning("\The [src] overloads!")) | |
| if(!isturf(loc)) | |
| do_sparks(1, TRUE, src) | |
| qdel(src) | |
| return | |
| close_trap() |
About The Pull Request
ports: tgstation/tgstation#95267
broad bear trap changes
barbed bear traps
security trap
THOSE WHO HAVE LEARNED THE WAYS OF CLEAN HAVE MASTERED THE ART OF BEAR TRAPS
Why It's Good For The Game
makes bear traps a bit more interesting and gives security another non-lethal option to detain criminals.
Changelog
🆑 timothymtorres, SirNightKnight
balance: balance: Beartraps are now much more lethal and can cause wounds. Space OSHA has also issued a warning that any clumsy people should avoid handling them after repeated mishaps.
balance: beartraps have a chance to be set off by items and projectiles if they are forceful enough.
balance: beartraps take time to arm and disarm. beartraps must be disarmed before being picked up.
balance: adds security traps. non-lethal bear traps that work off security records.
balance: barbed bear traps have a 30 second breakout time like other bear traps.
spellcheck: correctly gendered bear traps to be non-plural.
fix: bear traps respect armor.
/:cl:
Pre-Merge Checklist