Skip to content

Commit 471587d

Browse files
Merge pull request NebulaSS13#4803 from MistakeNot4892/devupdate
Dev update from staging
2 parents ead9e47 + 36e2640 commit 471587d

File tree

27 files changed

+351
-268
lines changed

27 files changed

+351
-268
lines changed

code/__defines/species.dm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#define SPECIES_FLAG_NO_BLOCK BITFLAG(6) // Unable to block or defend itself from attackers.
99
#define SPECIES_FLAG_NEED_DIRECT_ABSORB BITFLAG(7) // This species can only have their DNA taken by direct absorption.
1010
#define SPECIES_FLAG_LOW_GRAV_ADAPTED BITFLAG(8) // This species is used to lower than standard gravity, affecting stamina in high-grav
11+
#define SPECIES_FLAG_ABSORB_ELECTRICITY BITFLAG(9) // This species can absorb electricity; snowflake flag for old slime people.
1112

1213
// Species spawn flags
1314
#define SPECIES_IS_WHITELISTED BITFLAG(0) // Must be whitelisted to play.

code/_onclick/click.dm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,10 +282,10 @@
282282
return A.CtrlClick(src)
283283

284284
/atom/proc/CtrlClick(var/mob/user)
285-
if(loc == user)
285+
if(get_recursive_loc_of_type(/mob) == user)
286286
var/decl/interaction_handler/handler = get_quick_interaction_handler(user)
287287
if(handler)
288-
var/using_item = user.get_active_held_item() || user.get_usable_hand_slot_organ()
288+
var/using_item = user.get_active_held_item()
289289
if(handler.is_possible(src, user, using_item))
290290
return handler.invoked(src, user, using_item)
291291
return FALSE

code/datums/extensions/holster/holster.dm

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@
111111
to_chat(user, "It is empty.")
112112

113113
/datum/extension/holster/proc/check_holster()
114-
if(holstered.loc != storage)
114+
if(holstered.loc != storage.holder)
115115
clear_holster()
116116

117117
/atom/proc/holster_verb(var/holster_name in get_holsters())
@@ -154,4 +154,63 @@
154154
else
155155
for(var/i = 1 to holster_accessories.len)
156156
var/holster_name = "[accessory_name] [i]"
157-
.[holster_name] = get_extension(holster_accessories[i], /datum/extension/holster)
157+
.[holster_name] = get_extension(holster_accessories[i], /datum/extension/holster)
158+
159+
// Basic unholster for an item at the top level.
160+
/decl/interaction_handler/unholster
161+
name = "Unholster"
162+
163+
/decl/interaction_handler/unholster/is_possible(atom/target, mob/user, obj/item/prop)
164+
. = ..() && !prop
165+
if(.)
166+
var/datum/extension/holster/holster = get_extension(target, /datum/extension/holster)
167+
return !!holster?.holstered
168+
169+
/decl/interaction_handler/unholster/invoked(atom/target, mob/user, obj/item/prop)
170+
var/datum/extension/holster/holster = get_extension(target, /datum/extension/holster)
171+
return holster?.unholster(user, avoid_intent = TRUE)
172+
173+
// Interaction procs for getting this interaction for basic items.
174+
/obj/item/get_quick_interaction_handler(mob/user)
175+
if(!(. = ..()))
176+
var/datum/extension/holster/holster = get_extension(src, /datum/extension/holster)
177+
if(holster?.holstered)
178+
return GET_DECL(/decl/interaction_handler/unholster)
179+
180+
// More complex version of the above that iterates clothing accessories.
181+
/decl/interaction_handler/unholster_accessory
182+
name = "Unholster From Accessory"
183+
expected_target_type = /obj/item/clothing
184+
185+
/decl/interaction_handler/unholster_accessory/is_possible(atom/target, mob/user, obj/item/prop)
186+
. = ..() && !prop
187+
if(.)
188+
var/obj/item/clothing/clothes = target
189+
for(var/obj/item/thing in clothes.accessories)
190+
var/datum/extension/holster/holster = get_extension(thing, /datum/extension/holster)
191+
if(holster?.holstered)
192+
return TRUE
193+
return FALSE
194+
195+
/decl/interaction_handler/unholster_accessory/invoked(atom/target, mob/user, obj/item/prop)
196+
var/obj/item/clothing/clothes = target
197+
for(var/obj/item/thing in clothes.accessories)
198+
var/datum/extension/holster/holster = get_extension(thing, /datum/extension/holster)
199+
if(holster?.unholster(user, avoid_intent = TRUE))
200+
return TRUE
201+
return FALSE
202+
203+
// Interaction procs for getting this interaction for clothing accessories.
204+
/obj/item/clothing/get_alt_interactions(mob/user)
205+
. = ..()
206+
for(var/obj/item/thing in accessories)
207+
var/datum/extension/holster/holster = get_extension(thing, /datum/extension/holster)
208+
if(holster?.holstered)
209+
LAZYADD(., GET_DECL(/decl/interaction_handler/unholster_accessory))
210+
211+
/obj/item/clothing/get_quick_interaction_handler(mob/user)
212+
if(!(. = ..()))
213+
for(var/obj/item/thing in accessories)
214+
var/datum/extension/holster/holster = get_extension(thing, /datum/extension/holster)
215+
if(holster?.holstered)
216+
return GET_DECL(/decl/interaction_handler/unholster_accessory)

code/datums/wires/smes.dm

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -9,68 +9,68 @@
99
new /datum/wire_description(SMES_WIRE_FAILSAFES, "This wire appears to connect to a failsafe mechanism.")
1010
)
1111

12-
var/global/const/SMES_WIRE_RCON = 1 // Remote control (AI and consoles), cut to disable
13-
var/global/const/SMES_WIRE_INPUT = 2 // Input wire, cut to disable input, pulse to disable for 60s
14-
var/global/const/SMES_WIRE_OUTPUT = 4 // Output wire, cut to disable output, pulse to disable for 60s
15-
var/global/const/SMES_WIRE_GROUNDING = 8 // Cut to quickly discharge causing sparks, pulse to only create few sparks
16-
var/global/const/SMES_WIRE_FAILSAFES = 16 // Cut to disable failsafes, mend to reenable
17-
18-
19-
/datum/wires/smes/CanUse(var/mob/living/L)
20-
var/obj/machinery/power/smes/buildable/S = holder
21-
if(!S.grounding && S.powernet && S.powernet.avail)
22-
electrocute_mob(L, S.powernet, S, S.safeties_enabled? 0.1 : 1)
23-
if(S.panel_open)
24-
return 1
25-
return 0
12+
/// Remote control (AI and consoles), cut to disable
13+
var/global/const/SMES_WIRE_RCON = BITFLAG(0)
14+
/// Input wire, cut to disable input, pulse to disable for 60s
15+
var/global/const/SMES_WIRE_INPUT = BITFLAG(1)
16+
/// Output wire, cut to disable output, pulse to disable for 60s
17+
var/global/const/SMES_WIRE_OUTPUT = BITFLAG(2)
18+
/// Cut to quickly discharge causing sparks, pulse to only create few sparks
19+
var/global/const/SMES_WIRE_GROUNDING = BITFLAG(3)
20+
/// Cut to disable failsafes, mend to reenable
21+
var/global/const/SMES_WIRE_FAILSAFES = BITFLAG(4)
2622

23+
/datum/wires/smes/CanUse(var/mob/living/user)
24+
var/obj/machinery/power/smes/buildable/storage = holder
25+
if(!storage.grounding && storage.powernet && storage.powernet.avail)
26+
electrocute_mob(user, storage.powernet, storage, (storage.safeties_enabled? 0.1 : 1))
27+
return storage.panel_open
2728

2829
/datum/wires/smes/GetInteractWindow(mob/user)
29-
var/obj/machinery/power/smes/buildable/S = holder
30+
var/obj/machinery/power/smes/buildable/storage = holder
3031
. += ..()
31-
. += "The green light is [(S.input_cut || S.input_pulsed || S.output_cut || S.output_pulsed) ? "off" : "on"]<br>"
32-
. += "The red light is [(S.safeties_enabled || S.grounding) ? "off" : "blinking"]<br>"
33-
. += "The blue light is [S.RCon ? "on" : "off"]"
34-
32+
. += "The green light is [(storage.input_cut || storage.input_pulsed || storage.output_cut || storage.output_pulsed) ? "off" : "on"]<br>"
33+
. += "The red light is [(storage.safeties_enabled || storage.grounding) ? "off" : "blinking"]<br>"
34+
. += "The blue light is [storage.RCon ? "on" : "off"]"
3535

3636
/datum/wires/smes/UpdateCut(var/index, var/mended)
37-
var/obj/machinery/power/smes/buildable/S = holder
37+
var/obj/machinery/power/smes/buildable/storage = holder
3838
switch(index)
3939
if(SMES_WIRE_RCON)
40-
S.RCon = mended
40+
storage.RCon = mended
4141
if(SMES_WIRE_INPUT)
42-
S.input_cut = !mended
42+
storage.input_cut = !mended
4343
if(SMES_WIRE_OUTPUT)
44-
S.output_cut = !mended
44+
storage.output_cut = !mended
4545
if(SMES_WIRE_GROUNDING)
46-
S.grounding = mended
46+
storage.grounding = mended
4747
if(SMES_WIRE_FAILSAFES)
48-
S.safeties_enabled = mended
48+
storage.safeties_enabled = mended
4949

5050
/datum/wires/smes/proc/reset_rcon()
51-
var/obj/machinery/power/smes/buildable/S = holder
52-
if(S)
53-
S.RCon = TRUE
51+
var/obj/machinery/power/smes/buildable/storage = holder
52+
if(storage)
53+
storage.RCon = TRUE
5454

5555
/datum/wires/smes/proc/reset_safeties()
56-
var/obj/machinery/power/smes/buildable/S = holder
57-
if(S)
58-
S.safeties_enabled = TRUE
56+
var/obj/machinery/power/smes/buildable/storage = holder
57+
if(storage)
58+
storage.safeties_enabled = TRUE
5959

6060
/datum/wires/smes/UpdatePulsed(var/index)
61-
var/obj/machinery/power/smes/buildable/S = holder
61+
var/obj/machinery/power/smes/buildable/storage = holder
6262
switch(index)
6363
if(SMES_WIRE_RCON)
64-
if(S.RCon)
65-
S.RCon = 0
64+
if(storage.RCon)
65+
storage.RCon = 0
6666
addtimer(CALLBACK(src, PROC_REF(reset_rcon)), 1 SECOND)
6767
if(SMES_WIRE_INPUT)
68-
S.toggle_input()
68+
storage.toggle_input()
6969
if(SMES_WIRE_OUTPUT)
70-
S.toggle_output()
70+
storage.toggle_output()
7171
if(SMES_WIRE_GROUNDING)
72-
S.grounding = 0
72+
storage.grounding = 0
7373
if(SMES_WIRE_FAILSAFES)
74-
if(S.safeties_enabled)
75-
S.safeties_enabled = 0
74+
if(storage.safeties_enabled)
75+
storage.safeties_enabled = 0
7676
addtimer(CALLBACK(src, PROC_REF(reset_safeties)), 1 SECOND)

code/game/objects/items/weapons/material/shards.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@
9696
playsound(src.loc, 'sound/effects/glass_step.ogg', 50, 1) // not sure how to handle metal shards with sounds
9797

9898
var/decl/species/walker_species = victim.get_species()
99-
if(walker_species && (walker_species.get_shock_vulnerability(victim) < 0.5 || (walker_species.species_flags & (SPECIES_FLAG_NO_EMBED|SPECIES_FLAG_NO_MINOR_CUT)))) //Thick skin.
99+
if(walker_species?.species_flags & (SPECIES_FLAG_NO_EMBED|SPECIES_FLAG_NO_MINOR_CUT)) //Thick skin.
100100
return
101101

102102
var/obj/item/shoes = victim.get_equipped_item(slot_shoes_str)

code/game/objects/items/weapons/storage/belt.dm

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
. = ..()
2525
if(overlay_flags & BELT_OVERLAY_ITEMS)
2626
var/list/cur_overlays
27-
for(var/obj/item/I in contents)
28-
if(I.use_single_icon)
29-
LAZYADD(cur_overlays, I.get_on_belt_overlay())
27+
for(var/obj/item/thing in contents)
28+
if(thing.use_single_icon)
29+
LAZYADD(cur_overlays, thing.get_on_belt_overlay())
3030
else
31-
LAZYADD(cur_overlays, overlay_image('icons/obj/clothing/obj_belt_overlays.dmi', I.icon_state))
31+
LAZYADD(cur_overlays, overlay_image('icons/obj/clothing/obj_belt_overlays.dmi', thing.icon_state))
3232

3333
if(LAZYLEN(cur_overlays))
3434
add_overlay(cur_overlays)
@@ -37,8 +37,8 @@
3737
/obj/item/belt/get_mob_overlay(mob/user_mob, slot, bodypart, use_fallback_if_icon_missing = TRUE, skip_adjustment = FALSE)
3838
var/image/ret = ..()
3939
if(ret && slot == slot_belt_str && length(contents))
40-
for(var/obj/item/I in contents)
41-
var/image/new_overlay = I.get_mob_overlay(user_mob, slot, bodypart, use_fallback_if_icon_missing, TRUE)
40+
for(var/obj/item/thing in contents)
41+
var/image/new_overlay = thing.get_mob_overlay(user_mob, slot, bodypart, use_fallback_if_icon_missing, TRUE)
4242
if(new_overlay)
4343
ret.overlays += new_overlay
4444
return ret
@@ -57,13 +57,6 @@
5757
. = ..()
5858
set_extension(src, /datum/extension/holster, storage, sound_in, sound_out, can_holster)
5959

60-
/obj/item/belt/holster/get_stored_inventory()
61-
. = ..()
62-
if(length(.))
63-
var/datum/extension/holster/holster = get_extension(src, /datum/extension/holster)
64-
if(holster.holstered)
65-
. -= holster.holstered
66-
6760
/obj/item/belt/holster/attackby(obj/item/used_item, mob/user)
6861
var/datum/extension/holster/holster = get_extension(src, /datum/extension/holster)
6962
if(holster?.holster(used_item, user))
@@ -73,27 +66,27 @@
7366
/obj/item/belt/holster/attack_hand(mob/user)
7467
if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE))
7568
return ..()
76-
var/datum/extension/holster/H = get_extension(src, /datum/extension/holster)
77-
if(H.unholster(user))
69+
var/datum/extension/holster/holster = get_extension(src, /datum/extension/holster)
70+
if(holster?.unholster(user))
7871
return TRUE
7972
return ..()
8073

8174
/obj/item/belt/holster/examine(mob/user)
8275
. = ..()
83-
var/datum/extension/holster/H = get_extension(src, /datum/extension/holster)
84-
H.examine_holster(user)
76+
var/datum/extension/holster/holster = get_extension(src, /datum/extension/holster)
77+
holster.examine_holster(user)
8578

8679
/obj/item/belt/holster/on_update_icon()
8780
. = ..()
88-
var/datum/extension/holster/H = get_extension(src, /datum/extension/holster)
81+
var/datum/extension/holster/holster = get_extension(src, /datum/extension/holster)
8982
if(overlay_flags)
9083
var/list/cur_overlays
91-
for(var/obj/item/I in contents)
92-
if(I == H.holstered)
84+
for(var/obj/item/thing in contents)
85+
if(thing == holster.holstered)
9386
if(overlay_flags & BELT_OVERLAY_HOLSTER)
94-
LAZYADD(cur_overlays, overlay_image('icons/obj/clothing/obj_belt_overlays.dmi', I.icon_state))
87+
LAZYADD(cur_overlays, overlay_image('icons/obj/clothing/obj_belt_overlays.dmi', thing.icon_state))
9588
else if(overlay_flags & BELT_OVERLAY_ITEMS)
96-
LAZYADD(cur_overlays, overlay_image('icons/obj/clothing/obj_belt_overlays.dmi', I.icon_state))
89+
LAZYADD(cur_overlays, overlay_image('icons/obj/clothing/obj_belt_overlays.dmi', thing.icon_state))
9790

9891
if(LAZYLEN(cur_overlays))
9992
add_overlay(cur_overlays)

code/game/objects/structures/grille.dm

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@
8585
add_overlay(I)
8686

8787
/obj/structure/grille/Bumped(atom/user)
88-
if(ismob(user)) shock(user, 70)
88+
if(ismob(user))
89+
shock(user, 70)
8990

9091
/obj/structure/grille/attack_hand(mob/user)
9192

@@ -227,25 +228,23 @@
227228
// returns 1 if shocked, 0 otherwise
228229
/obj/structure/grille/proc/shock(mob/user, prb)
229230
if(!anchored || destroyed) // anchored/destroyed grilles are never connected
230-
return 0
231+
return FALSE
231232
if(!(material.conductive))
232-
return 0
233+
return FALSE
233234
if(!prob(prb))
234-
return 0
235+
return FALSE
235236
if(!in_range(src, user))//To prevent TK and exosuit users from getting shocked
236-
return 0
237-
var/turf/T = get_turf(src)
238-
var/obj/structure/cable/C = T.get_cable_node()
239-
if(C)
240-
if(electrocute_mob(user, C, src))
241-
if(C.powernet)
242-
C.powernet.trigger_warning()
243-
spark_at(src, cardinal_only = TRUE)
244-
if(HAS_STATUS(user, STAT_STUN))
245-
return 1
246-
else
247-
return 0
248-
return 0
237+
return FALSE
238+
var/turf/my_turf = get_turf(src)
239+
var/obj/structure/cable/cable = my_turf.get_cable_node()
240+
if(!cable)
241+
return FALSE
242+
if(!electrocute_mob(user, cable, src))
243+
return FALSE
244+
if(cable.powernet)
245+
cable.powernet.trigger_warning()
246+
spark_at(src, cardinal_only = TRUE)
247+
return !!HAS_STATUS(user, STAT_STUN)
249248

250249
/obj/structure/grille/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
251250
if(!destroyed)

code/game/turfs/turf_fluids.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@
110110
create_reagents(FLUID_MAX_DEPTH)
111111
return ..()
112112

113-
/turf/add_to_reagents(reagent_type, amount, data, safety = FALSE, defer_update = FALSE, phase)
113+
/turf/add_to_reagents(reagent_type, amount, data, safety = FALSE, defer_update = FALSE, phase = null)
114114
if(!reagents)
115115
create_reagents(FLUID_MAX_DEPTH)
116116
return ..()

code/modules/clothing/_clothing.dm

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -302,12 +302,12 @@
302302
update_clothing_icon()
303303

304304
/obj/item/clothing/get_examine_name()
305-
var/list/ensemble = list(name)
305+
var/list/ensemble = list(..())
306306
for(var/obj/item/clothing/accessory in accessories)
307307
if(accessory.accessory_visibility == ACCESSORY_VISIBILITY_ENSEMBLE)
308-
LAZYADD(ensemble, accessory.get_examine_name())
309-
if(length(ensemble) <= 1)
310-
return ..()
308+
ensemble += accessory.get_examine_name()
309+
if(length(ensemble) == 1) // don't worry about it being empty, we always have a minimum of one
310+
return ensemble[1]
311311
return english_list(ensemble, summarize = TRUE)
312312

313313
/obj/item/clothing/get_examine_line()

0 commit comments

Comments
 (0)