Skip to content
This repository was archived by the owner on May 5, 2025. It is now read-only.

Commit 09889aa

Browse files
authored
Merge branch 'DopplerShift13:master' into master
2 parents b109149 + 168f8e0 commit 09889aa

File tree

8 files changed

+1422
-1484
lines changed

8 files changed

+1422
-1484
lines changed

_maps/map_files/Mining/Iceland.dmm

Lines changed: 1323 additions & 1474 deletions
Large diffs are not rendered by default.

code/__DEFINES/~doppler_defines/traits.dm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
#define TRAIT_PERMITTED_CYBERNETIC "permitted_cybernetic"
3838
/// No step on glass
3939
#define TRAIT_HARD_SOLES "hard_soles"
40+
/// Can detach cybernetic limbs voluntarily
41+
#define TRAIT_ROBOTIC_LIMBATTACHMENT "robotic_limbattachment"
4042

4143
////
4244
// Jobs

code/game/objects/items/devices/scanners/gas_analyzer.dm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,13 @@
136136
return list("gasmixes" = last_gasmix_data)
137137

138138
/obj/item/analyzer/attack_self(mob/user, modifiers)
139-
if(user.stat != CONSCIOUS || !user.can_read(src) || user.is_blind())
139+
if(user.stat != CONSCIOUS || !user.can_read(src)) //DOPPLER EDIT: Blind People Can Analyze Again
140140
return
141141
atmos_scan(user=user, target=get_turf(src), silent=FALSE)
142142
on_analyze(source=src, target=get_turf(src))
143143

144144
/obj/item/analyzer/attack_self_secondary(mob/user, modifiers)
145-
if(user.stat != CONSCIOUS || !user.can_read(src) || user.is_blind())
145+
if(user.stat != CONSCIOUS || !user.can_read(src)) //DOPPLER EDIT: Blind People Can Analyze Again
146146
return
147147

148148
ui_interact(user)

code/game/objects/items/devices/scanners/health_analyzer.dm

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
return BRUTELOSS
4848

4949
/obj/item/healthanalyzer/attack_self(mob/user)
50-
if(!user.can_read(src) || user.is_blind())
50+
if(!user.can_read(src)) //DOPPLER EDIT: Blind People Can Analyze Again
5151
return
5252

5353
scanmode = (scanmode + 1) % SCANMODE_COUNT
@@ -80,7 +80,7 @@
8080
floor_text += "<span class='alert ml-1'>Subject lacks a brain.</span><br>"
8181
floor_text += "<span class='info ml-1'>Body temperature: [scan_turf?.return_air()?.return_temperature() || "???"]</span><br>"
8282

83-
if(user.can_read(src) && !user.is_blind())
83+
if(!user.can_read(src)) //DOPPLER EDIT: Blind People Can Analyze Again
8484
to_chat(user, examine_block(floor_text))
8585
last_scan_text = floor_text
8686
return
@@ -93,7 +93,7 @@
9393
balloon_alert(user, "analyzing vitals")
9494
playsound(user.loc, 'sound/items/healthanalyzer.ogg', 50)
9595

96-
var/readability_check = user.can_read(src) && !user.is_blind()
96+
var/readability_check = user.can_read(src) //DOPPLER EDIT - Blind People Can Analyze Again
9797
switch (scanmode)
9898
if (SCANMODE_HEALTH)
9999
last_scan_text = healthscan(user, M, mode, advanced, tochat = readability_check)
@@ -106,7 +106,7 @@
106106
/obj/item/healthanalyzer/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers)
107107
if(!isliving(interacting_with))
108108
return NONE
109-
if(user.can_read(src) && !user.is_blind())
109+
if(user.can_read(src)) //DOPPLER EDIT - Blind People can Analyze Again
110110
chemscan(user, interacting_with)
111111
return ITEM_INTERACT_SUCCESS
112112

@@ -626,7 +626,7 @@
626626
/obj/item/healthanalyzer/simple/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
627627
if(!isliving(interacting_with))
628628
return NONE
629-
if(!user.can_read(src) || user.is_blind())
629+
if(!user.can_read(src)) //DOPPLER EDIT - Blind People Can Analyze Again
630630
return ITEM_INTERACT_BLOCKING
631631

632632
add_fingerprint(user)

code/game/objects/items/devices/scanners/slime_scanner.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
/obj/item/slime_scanner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
1717
if(!isliving(interacting_with))
1818
return NONE
19-
if(!user.can_read(src) || user.is_blind())
19+
if(!user.can_read(src)) //DOPPLER EDIT - Blind People Can Analyze Again
2020
return ITEM_INTERACT_BLOCKING
2121
if (!isslime(interacting_with))
2222
to_chat(user, span_warning("This device can only scan slimes!"))

code/modules/surgery/bodyparts/_bodyparts.dm

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -372,10 +372,13 @@
372372

373373
if(ishuman(victim))
374374
var/mob/living/carbon/human/human_victim = victim
375-
if(HAS_TRAIT(victim, TRAIT_LIMBATTACHMENT) || HAS_TRAIT(src, TRAIT_EASY_ATTACH) || HAS_TRAIT(victim, TRAIT_GOLEM_LIMBATTACHMENT)) // DOPPLER EDIT CHANGE - ORIGINAL: if(HAS_TRAIT(victim, TRAIT_LIMBATTACHMENT) || HAS_TRAIT(src, TRAIT_EASY_ATTACH))
376-
// DOPPLER EDIT ADDITION START - golems lol
375+
if(HAS_TRAIT(victim, TRAIT_LIMBATTACHMENT) || HAS_TRAIT(src, TRAIT_EASY_ATTACH) || HAS_TRAIT(victim, TRAIT_GOLEM_LIMBATTACHMENT) || HAS_TRAIT(victim, TRAIT_ROBOTIC_LIMBATTACHMENT)) // DOPPLER EDIT CHANGE - ORIGINAL: if(HAS_TRAIT(victim, TRAIT_LIMBATTACHMENT) || HAS_TRAIT(src, TRAIT_EASY_ATTACH))
376+
// DOPPLER EDIT ADDITION START - golems lol && cybernetic limb mount quirk
377377
if(HAS_TRAIT(victim, TRAIT_GOLEM_LIMBATTACHMENT) && !(bodytype & BODYTYPE_GOLEM)) //if we're trying to attach something that isn't a fuggin rock, end out
378378
return
379+
if (!(HAS_TRAIT(src, TRAIT_EASY_ATTACH)) && !HAS_TRAIT(victim, TRAIT_LIMBATTACHMENT) && HAS_TRAIT(victim, TRAIT_ROBOTIC_LIMBATTACHMENT) && !(bodytype & BODYTYPE_ROBOTIC)) //if we're trying to attach something that's not robotic, end out - but ONLY if we have this quirk
380+
to_chat(user, span_warning("[human_victim]'s body rejects [src]! It can only accept robotic limbs."))
381+
return
379382
// DOPPLER EDIT ADDITION END
380383
if(!human_victim.get_bodypart(body_zone))
381384
user.temporarilyRemoveItemFromInventory(src, TRUE)
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/datum/quirk/robot_limb_detach
2+
name = "Cybernetic Limb Mounts"
3+
desc = "You are able to detach and reattach any installed robotic limbs with very little effort, as long as they're in good condition."
4+
gain_text = span_notice("Internal sensors report limb disengagement protocols are ready and waiting.")
5+
lose_text = span_notice("ERROR: LIMB DISENGAGEMENT PROTOCOLS OFFLINE.")
6+
medical_record_text = "Patient bears quick-attach and release limb joint cybernetics."
7+
value = 0
8+
mob_trait = TRAIT_ROBOTIC_LIMBATTACHMENT
9+
icon = FA_ICON_HANDSHAKE_SIMPLE_SLASH
10+
quirk_flags = QUIRK_HUMAN_ONLY
11+
/// The action we add with this quirk in add(), used for easy deletion later
12+
var/datum/action/cooldown/spell/added_action
13+
14+
/datum/quirk/robot_limb_detach/add(client/client_source)
15+
var/mob/living/carbon/human/human_holder = quirk_holder
16+
var/datum/action/cooldown/spell/robot_self_amputation/limb_action = new /datum/action/cooldown/spell/robot_self_amputation()
17+
limb_action.Grant(human_holder)
18+
added_action = limb_action
19+
20+
/datum/quirk/robot_limb_detach/remove()
21+
QDEL_NULL(added_action)
22+
23+
/datum/action/cooldown/spell/robot_self_amputation
24+
name = "Detach a robotic limb"
25+
desc = "Disengage one of your robotic limbs from your cybernetic mounts. Requires you to not be restrained or otherwise under duress. Will not function on wounded limbs - tend to them first."
26+
button_icon_state = "autotomy"
27+
28+
cooldown_time = 30 SECONDS
29+
spell_requirements = NONE
30+
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_HANDS_BLOCKED | AB_CHECK_INCAPACITATED
31+
32+
/datum/action/cooldown/spell/robot_self_amputation/is_valid_target(atom/cast_on)
33+
return ishuman(cast_on)
34+
35+
/datum/action/cooldown/spell/robot_self_amputation/cast(mob/living/carbon/human/cast_on)
36+
. = ..()
37+
38+
if(HAS_TRAIT(cast_on, TRAIT_NODISMEMBER))
39+
to_chat(cast_on, span_warning("ERROR: LIMB DISENGAGEMENT PROTOCOLS OFFLINE. Seek out a maintenance technician."))
40+
return
41+
42+
var/list/exclusions = list()
43+
exclusions += BODY_ZONE_CHEST
44+
exclusions += BODY_ZONE_HEAD
45+
// if we ever decide to move android's brains into their chest, add this below
46+
/*if (!isandroid(cast_on))
47+
exclusions += BODY_ZONE_HEAD
48+
*/
49+
50+
var/list/robot_parts = list()
51+
for (var/obj/item/bodypart/possible_part as anything in cast_on.bodyparts)
52+
if ((possible_part.bodytype & BODYTYPE_ROBOTIC) && !(possible_part.body_zone in exclusions)) //only robot limbs and only if they're not crucial to our like, ongoing life, you know?
53+
robot_parts += possible_part
54+
55+
if (!length(robot_parts))
56+
to_chat(cast_on, "ERROR: Limb disengagement protocols report no compatible cybernetics currently installed. Seek out a maintenance technician.")
57+
return
58+
59+
var/obj/item/bodypart/limb_to_detach = tgui_input_list(cast_on, "Limb to detach", "Cybernetic Limb Detachment", sort_names(robot_parts))
60+
if (QDELETED(src) || QDELETED(cast_on) || QDELETED(limb_to_detach))
61+
return
62+
63+
if (length(limb_to_detach.wounds) >= 1)
64+
cast_on.balloon_alert(cast_on, "can't detach wounded limbs!")
65+
playsound(cast_on, 'sound/machines/buzz/buzz-sigh.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
66+
return
67+
68+
cast_on.balloon_alert(cast_on, "detaching limb...")
69+
playsound(cast_on, 'sound/items/tools/rped.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
70+
cast_on.visible_message(span_notice("[cast_on] shuffles [cast_on.p_their()] [limb_to_detach.name] forward, actuators hissing and whirring as [cast_on.p_they()] disengage[cast_on.p_s()] the limb from its mount..."))
71+
72+
if(do_after(cast_on, 5 SECONDS))
73+
cast_on.visible_message(span_notice("With a gentle twist, [cast_on] finally prises [cast_on.p_their()] [limb_to_detach.name] free from its socket."))
74+
limb_to_detach.drop_limb()
75+
cast_on.put_in_hands(limb_to_detach)
76+
cast_on.balloon_alert(cast_on, "limb detached!")
77+
if(prob(5))
78+
playsound(cast_on, 'sound/items/champagne_pop.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
79+
else
80+
playsound(cast_on, 'sound/items/deconstruct.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
81+
else
82+
cast_on.balloon_alert(cast_on, "interrupted!")
83+
playsound(cast_on, 'sound/machines/buzz/buzz-sigh.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)

tgstation.dme

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7024,6 +7024,7 @@
70247024
#include "modular_doppler\modular_quirks\breather\nitrogen_breather\nitrogen_breather.dm"
70257025
#include "modular_doppler\modular_quirks\breather\nitrogen_breather\nitrogen_tanks.dm"
70267026
#include "modular_doppler\modular_quirks\breather\water_breather\water_breather.dm"
7027+
#include "modular_doppler\modular_quirks\cybernetic_limb_mounts\cybernetic_limb_mounts.dm"
70277028
#include "modular_doppler\modular_quirks\entombed\code\entombed.dm"
70287029
#include "modular_doppler\modular_quirks\entombed\code\entombed_alt_actions.dm"
70297030
#include "modular_doppler\modular_quirks\entombed\code\entombed_mod.dm"

0 commit comments

Comments
 (0)