conflicts

This commit is contained in:
MMMiracles
2020-01-05 09:32:12 -05:00
198 changed files with 4581 additions and 910 deletions
-2
View File
@@ -73,7 +73,6 @@
buckled_mobs |= M
M.update_mobility()
M.throw_alert("buckled", /obj/screen/alert/restrained/buckled)
M.set_glide_size(glide_size)
post_buckle_mob(M)
SEND_SIGNAL(src, COMSIG_MOVABLE_BUCKLE, M, force)
@@ -93,7 +92,6 @@
buckled_mob.anchored = initial(buckled_mob.anchored)
buckled_mob.update_mobility()
buckled_mob.clear_alert("buckled")
buckled_mob.set_glide_size(DELAY_TO_GLIDE_SIZE(buckled_mob.total_multiplicative_slowdown()))
buckled_mobs -= buckled_mob
SEND_SIGNAL(src, COMSIG_MOVABLE_UNBUCKLE, buckled_mob, force)
@@ -224,3 +224,10 @@
icon = 'icons/effects/confetti_and_decor.dmi'
icon_state = "confetti"
mouse_opacity = MOUSE_OPACITY_TRANSPARENT //the confetti itself might be annoying enough
/obj/effect/decal/cleanable/plastic
name = "plastic shreds"
desc = "Bits of torn, broken, worthless plastic."
icon = 'icons/obj/objects.dmi'
icon_state = "shards"
color = "#c6f4ff"
@@ -56,6 +56,15 @@
/obj/effect/turf_decal/trimline/white/end
icon_state = "trimline_end"
/obj/effect/turf_decal/trimline/white/arrow_cw
icon_state = "trimline_arrow_cw"
/obj/effect/turf_decal/trimline/white/arrow_ccw
icon_state = "trimline_arrow_ccw"
/obj/effect/turf_decal/trimline/white/warning
icon_state = "trimline_warn"
/obj/effect/turf_decal/trimline/white/filled
icon_state = "trimline_box_fill"
@@ -68,6 +77,21 @@
/obj/effect/turf_decal/trimline/white/filled/end
icon_state = "trimline_end_fill"
/obj/effect/turf_decal/trimline/white/filled/arrow_cw
icon_state = "trimline_arrow_cw_fill"
/obj/effect/turf_decal/trimline/white/filled/arrow_ccw
icon_state = "trimline_arrow_ccw_fill"
/obj/effect/turf_decal/trimline/white/filled/warning
icon_state = "trimline_warn_fill"
/obj/effect/turf_decal/trimline/white/filled/shrink_cw
icon_state = "trimline_shrink_cw"
/obj/effect/turf_decal/trimline/white/filled/shrink_ccw
icon_state = "trimline_shrink_ccw"
/obj/effect/turf_decal/trimline/red
color = "#DE3A3A"
@@ -80,6 +104,15 @@
/obj/effect/turf_decal/trimline/red/end
icon_state = "trimline_end"
/obj/effect/turf_decal/trimline/red/arrow_cw
icon_state = "trimline_arrow_cw"
/obj/effect/turf_decal/trimline/red/arrow_ccw
icon_state = "trimline_arrow_ccw"
/obj/effect/turf_decal/trimline/red/warning
icon_state = "trimline_warn"
/obj/effect/turf_decal/trimline/red/filled
icon_state = "trimline_box_fill"
@@ -92,6 +125,21 @@
/obj/effect/turf_decal/trimline/red/filled/end
icon_state = "trimline_end_fill"
/obj/effect/turf_decal/trimline/red/filled/arrow_cw
icon_state = "trimline_arrow_cw_fill"
/obj/effect/turf_decal/trimline/red/filled/arrow_ccw
icon_state = "trimline_arrow_ccw_fill"
/obj/effect/turf_decal/trimline/red/filled/warning
icon_state = "trimline_warn_fill"
/obj/effect/turf_decal/trimline/red/filled/shrink_cw
icon_state = "trimline_shrink_cw"
/obj/effect/turf_decal/trimline/red/filled/shrink_ccw
icon_state = "trimline_shrink_ccw"
/obj/effect/turf_decal/trimline/green
color = "#9FED58"
@@ -104,6 +152,15 @@
/obj/effect/turf_decal/trimline/green/end
icon_state = "trimline_end"
/obj/effect/turf_decal/trimline/green/arrow_cw
icon_state = "trimline_arrow_cw"
/obj/effect/turf_decal/trimline/green/arrow_ccw
icon_state = "trimline_arrow_ccw"
/obj/effect/turf_decal/trimline/green/warning
icon_state = "trimline_warn"
/obj/effect/turf_decal/trimline/green/filled
icon_state = "trimline_box_fill"
@@ -116,6 +173,21 @@
/obj/effect/turf_decal/trimline/green/filled/end
icon_state = "trimline_end_fill"
/obj/effect/turf_decal/trimline/green/filled/arrow_cw
icon_state = "trimline_arrow_cw_fill"
/obj/effect/turf_decal/trimline/green/filled/arrow_ccw
icon_state = "trimline_arrow_ccw_fill"
/obj/effect/turf_decal/trimline/green/filled/warning
icon_state = "trimline_warn_fill"
/obj/effect/turf_decal/trimline/green/filled/shrink_cw
icon_state = "trimline_shrink_cw"
/obj/effect/turf_decal/trimline/green/filled/shrink_ccw
icon_state = "trimline_shrink_ccw"
/obj/effect/turf_decal/trimline/blue
color = "#52B4E9"
@@ -128,6 +200,15 @@
/obj/effect/turf_decal/trimline/blue/end
icon_state = "trimline_end"
/obj/effect/turf_decal/trimline/blue/arrow_cw
icon_state = "trimline_arrow_cw"
/obj/effect/turf_decal/trimline/blue/arrow_ccw
icon_state = "trimline_arrow_ccw"
/obj/effect/turf_decal/trimline/blue/warning
icon_state = "trimline_warn"
/obj/effect/turf_decal/trimline/blue/filled
icon_state = "trimline_box_fill"
@@ -140,6 +221,21 @@
/obj/effect/turf_decal/trimline/blue/filled/end
icon_state = "trimline_end_fill"
/obj/effect/turf_decal/trimline/blue/filled/arrow_cw
icon_state = "trimline_arrow_cw_fill"
/obj/effect/turf_decal/trimline/blue/filled/arrow_ccw
icon_state = "trimline_arrow_ccw_fill"
/obj/effect/turf_decal/trimline/blue/filled/warning
icon_state = "trimline_warn_fill"
/obj/effect/turf_decal/trimline/blue/filled/shrink_cw
icon_state = "trimline_shrink_cw"
/obj/effect/turf_decal/trimline/blue/filled/shrink_ccw
icon_state = "trimline_shrink_ccw"
/obj/effect/turf_decal/trimline/yellow
color = "#EFB341"
@@ -152,6 +248,15 @@
/obj/effect/turf_decal/trimline/yellow/end
icon_state = "trimline_end"
/obj/effect/turf_decal/trimline/yellow/arrow_cw
icon_state = "trimline_arrow_cw"
/obj/effect/turf_decal/trimline/yellow/arrow_ccw
icon_state = "trimline_arrow_ccw"
/obj/effect/turf_decal/trimline/yellow/warning
icon_state = "trimline_warn"
/obj/effect/turf_decal/trimline/yellow/filled
icon_state = "trimline_box_fill"
@@ -164,6 +269,21 @@
/obj/effect/turf_decal/trimline/yellow/filled/end
icon_state = "trimline_end_fill"
/obj/effect/turf_decal/trimline/yellow/filled/arrow_cw
icon_state = "trimline_arrow_cw_fill"
/obj/effect/turf_decal/trimline/yellow/filled/arrow_ccw
icon_state = "trimline_arrow_ccw_fill"
/obj/effect/turf_decal/trimline/yellow/filled/warning
icon_state = "trimline_warn_fill"
/obj/effect/turf_decal/trimline/yellow/filled/shrink_cw
icon_state = "trimline_shrink_cw"
/obj/effect/turf_decal/trimline/yellow/filled/shrink_ccw
icon_state = "trimline_shrink_ccw"
/obj/effect/turf_decal/trimline/purple
color = "#D381C9"
@@ -176,6 +296,15 @@
/obj/effect/turf_decal/trimline/purple/end
icon_state = "trimline_end"
/obj/effect/turf_decal/trimline/purple/arrow_cw
icon_state = "trimline_arrow_cw"
/obj/effect/turf_decal/trimline/purple/arrow_ccw
icon_state = "trimline_arrow_ccw"
/obj/effect/turf_decal/trimline/purple/warning
icon_state = "trimline_warn"
/obj/effect/turf_decal/trimline/purple/filled
icon_state = "trimline_box_fill"
@@ -188,6 +317,21 @@
/obj/effect/turf_decal/trimline/purple/filled/end
icon_state = "trimline_end_fill"
/obj/effect/turf_decal/trimline/purple/filled/arrow_cw
icon_state = "trimline_arrow_cw_fill"
/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw
icon_state = "trimline_arrow_ccw_fill"
/obj/effect/turf_decal/trimline/purple/filled/warning
icon_state = "trimline_warn_fill"
/obj/effect/turf_decal/trimline/purple/filled/shrink_cw
icon_state = "trimline_shrink_cw"
/obj/effect/turf_decal/trimline/purple/filled/shrink_ccw
icon_state = "trimline_shrink_ccw"
/obj/effect/turf_decal/trimline/brown
color = "#A46106"
@@ -200,6 +344,15 @@
/obj/effect/turf_decal/trimline/brown/end
icon_state = "trimline_end"
/obj/effect/turf_decal/trimline/brown/arrow_cw
icon_state = "trimline_arrow_cw"
/obj/effect/turf_decal/trimline/brown/arrow_ccw
icon_state = "trimline_arrow_ccw"
/obj/effect/turf_decal/trimline/brown/warning
icon_state = "trimline_warn"
/obj/effect/turf_decal/trimline/brown/filled
icon_state = "trimline_box_fill"
@@ -212,6 +365,21 @@
/obj/effect/turf_decal/trimline/brown/filled/end
icon_state = "trimline_end_fill"
/obj/effect/turf_decal/trimline/brown/filled/arrow_cw
icon_state = "trimline_arrow_cw_fill"
/obj/effect/turf_decal/trimline/brown/filled/arrow_ccw
icon_state = "trimline_arrow_ccw_fill"
/obj/effect/turf_decal/trimline/brown/filled/warning
icon_state = "trimline_warn_fill"
/obj/effect/turf_decal/trimline/brown/filled/shrink_cw
icon_state = "trimline_shrink_cw"
/obj/effect/turf_decal/trimline/brown/filled/shrink_ccw
icon_state = "trimline_shrink_ccw"
/obj/effect/turf_decal/trimline/neutral
color = "#D4D4D4"
alpha = 50
@@ -225,6 +393,15 @@
/obj/effect/turf_decal/trimline/neutral/end
icon_state = "trimline_end"
/obj/effect/turf_decal/trimline/neutral/arrow_cw
icon_state = "trimline_arrow_cw"
/obj/effect/turf_decal/trimline/neutral/arrow_ccw
icon_state = "trimline_arrow_ccw"
/obj/effect/turf_decal/trimline/neutral/warning
icon_state = "trimline_warn"
/obj/effect/turf_decal/trimline/neutral/filled
icon_state = "trimline_box_fill"
@@ -236,3 +413,18 @@
/obj/effect/turf_decal/trimline/neutral/filled/end
icon_state = "trimline_end_fill"
/obj/effect/turf_decal/trimline/neutral/filled/arrow_cw
icon_state = "trimline_arrow_cw_fill"
/obj/effect/turf_decal/trimline/neutral/filled/arrow_ccw
icon_state = "trimline_arrow_ccw_fill"
/obj/effect/turf_decal/trimline/neutral/filled/warning
icon_state = "trimline_warn_fill"
/obj/effect/turf_decal/trimline/neutral/filled/shrink_cw
icon_state = "trimline_shrink_cw"
/obj/effect/turf_decal/trimline/neutral/filled/shrink_ccw
icon_state = "trimline_shrink_ccw"
@@ -714,7 +714,8 @@
/obj/item/circuitboard/machine/medical_kiosk/multitool_act(mob/living/user)
. = ..()
var/new_cost = input("Set a new cost for using this medical kiosk.","New cost", custom_cost) as num|null
if(new_cost == null && (src.loc == user))
if(!new_cost || (loc != user))
to_chat(user, "<span class='warning'>You must hold the circuitboard to change its cost!</span>")
return
custom_cost = CLAMP(round(new_cost, 1), 10, 1000)
to_chat(user, "<span class='notice'>The cost is now set to [custom_cost].</span>")
@@ -883,7 +884,8 @@
/obj/item/circuitboard/machine/public_nanite_chamber/multitool_act(mob/living/user)
. = ..()
var/new_cloud = input("Set the public nanite chamber's Cloud ID (1-100).", "Cloud ID", cloud_id) as num|null
if(new_cloud && (src.loc == user))
if(!new_cloud || (loc != user))
to_chat(user, "<span class='warning'>You must hold the circuitboard to change its Cloud ID!</span>")
return
cloud_id = CLAMP(round(new_cloud, 1), 1, 100)
+8 -8
View File
@@ -605,10 +605,10 @@ GLOBAL_LIST_EMPTY(PDAs)
U << browse(null, "window=pda")
return
/obj/item/pda/proc/remove_id()
if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
/obj/item/pda/proc/remove_id(mob/user)
if(issilicon(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
do_remove_id(usr)
do_remove_id(user)
/obj/item/pda/proc/do_remove_id(mob/user)
@@ -743,13 +743,13 @@ GLOBAL_LIST_EMPTY(PDAs)
/obj/item/pda/proc/create_message(mob/living/U, obj/item/pda/P)
send_message(U,list(P))
/obj/item/pda/AltClick()
/obj/item/pda/AltClick(mob/user)
..()
if(id)
remove_id()
remove_id(user)
else
remove_pen()
remove_pen(user)
/obj/item/pda/CtrlClick(mob/user)
..()
@@ -776,7 +776,7 @@ GLOBAL_LIST_EMPTY(PDAs)
set src in usr
if(id)
remove_id()
remove_id(usr)
else
to_chat(usr, "<span class='warning'>This PDA does not have an ID in it!</span>")
@@ -837,7 +837,7 @@ GLOBAL_LIST_EMPTY(PDAs)
/obj/item/pda/proc/id_check(mob/user, obj/item/card/id/I)
if(!I)
if(id && (src in user.contents))
remove_id()
remove_id(user)
return TRUE
else
var/obj/item/card/id/C = user.get_active_held_item()
+11 -3
View File
@@ -13,15 +13,20 @@
/obj/item/stack/circuit_stack/attack_hand(mob/user)
var/mob/living/carbon/human/H = user
if(!user.get_inactive_held_item() == src)
if(user.get_inactive_held_item() != src)
return ..()
else
if(zero_amount())
return
chosen_circuit = input("What type of circuit would you like to remove?", "Choose a Circuit Type", chosen_circuit) in list("airlock","firelock","fire alarm","air alarm","APC")
chosen_circuit = input("What type of circuit would you like to remove?", "Choose a Circuit Type", chosen_circuit) in list("airlock","firelock","fire alarm","air alarm","APC","cancel")
if(zero_amount())
return
if(loc != user)
return
switch(chosen_circuit)
if("cancel")
to_chat(user, "<span class='notice'>You wisely avoid putting your hands anywhere near [src].</span>")
return
if("airlock")
circuit_type = /obj/item/electronics/airlock
if("firelock")
@@ -41,12 +46,15 @@
use(1)
if(!amount)
to_chat(user, "<span class='notice'>You navigate the sharp edges of circuitry and remove the last board.</span>")
return
else
to_chat(user, "<span class='notice'>You navigate the sharp edges of circuitry and remove a single board from [src]</span>")
return
else
H.apply_damage(15, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
to_chat(user, "<span class='warning'>You give yourself a wicked cut on [src]'s many sharp corners and edges!</span>")
..()
return
return
/obj/item/stack/circuit_stack/full
amount = 8
+63 -44
View File
@@ -95,16 +95,47 @@
// except it actually ASKS THE DEAD (wooooo)
/obj/item/toy/eightball/haunted
shake_time = 150
cooldown_time = 1800
shake_time = 30 SECONDS
cooldown_time = 3 MINUTES
flags_1 = HEAR_1
var/last_message
var/selected_message
var/list/votes
//these kind of store the same thing but one is easier to work with.
var/list/votes = list()
var/list/voted = list()
var/static/list/haunted_answers = list(
"yes" = list(
"It is certain",
"It is decidedly so",
"Without a doubt",
"Yes definitely",
"You may rely on it",
"As I see it, yes",
"Most likely",
"Outlook good",
"Yes",
"Signs point to yes"
),
"maybe" = list(
"Reply hazy try again",
"Ask again later",
"Better not tell you now",
"Cannot predict now",
"Concentrate and ask again"
),
"no" = list(
"Don't count on it",
"My reply is no",
"My sources say no",
"Outlook not so good",
"Very doubtful"
)
)
/obj/item/toy/eightball/haunted/Initialize(mapload)
. = ..()
votes = list()
for (var/answer in haunted_answers)
votes[answer] = 0
GLOB.poi_list |= src
/obj/item/toy/eightball/haunted/Destroy()
@@ -137,38 +168,31 @@
if(isobserver(usr))
interact(usr)
/obj/item/toy/eightball/haunted/proc/get_vote_tallies()
var/list/answers = list()
for(var/ckey in votes)
var/selected = votes[ckey]
if(selected in answers)
answers[selected]++
else
answers[selected] = 1
return answers
/obj/item/toy/eightball/haunted/get_answer()
if(!votes.len)
return pick(possible_answers)
var/top_amount = 0
var/top_vote
var/list/tallied_votes = get_vote_tallies()
for(var/vote in votes)
var/amount_of_votes = length(votes[vote])
if(amount_of_votes > top_amount)
top_vote = vote
top_amount = amount_of_votes
//If one option actually has votes and there's a tie, pick between them 50/50
else if(top_amount && amount_of_votes == top_amount && prob(50))
top_vote = vote
top_amount = amount_of_votes
// I miss python sorting, then I wouldn't have to muck about with
// all this
var/most_popular_answer
var/most_amount = 0
// yes, if there is a tie, there is an arbitary decision
// but we never said the spirit world was fair
for(var/A in tallied_votes)
var/amount = tallied_votes[A]
if(amount > most_amount)
most_popular_answer = A
if(isnull(top_vote))
top_vote = pick(votes)
return most_popular_answer
for(var/vote in votes)
votes[vote] = 0
/obj/item/toy/eightball/haunted/ui_interact(mob/user, ui_key="main", datum/tgui/ui=null, force_open=0, datum/tgui/master_ui=null, datum/ui_state/state = GLOB.observer_state)
voted.Cut()
return top_vote
/obj/item/toy/eightball/haunted/ui_interact(mob/user, ui_key="main", datum/tgui/ui=null, force_open=0, datum/tgui/master_ui=null, datum/ui_state/state = GLOB.always_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
@@ -179,21 +203,13 @@
var/list/data = list()
data["shaking"] = shaking
data["question"] = selected_message
var/list/tallied_votes = get_vote_tallies()
data["answers"] = list()
for(var/pa in possible_answers)
for(var/pa in haunted_answers)
var/list/L = list()
L["answer"] = pa
var/amount = 0
if(pa in tallied_votes)
amount = tallied_votes[pa]
L["amount"] = amount
var/selected = FALSE
if(votes[user.ckey] == pa)
selected = TRUE
L["selected"] = selected
L["amount"] = votes[pa]
L["selected"] = voted[user.ckey]
data["answers"] += list(L)
return data
@@ -206,8 +222,11 @@
switch(action)
if("vote")
var/selected_answer = params["answer"]
if(!(selected_answer in possible_answers))
if(!(selected_answer in haunted_answers))
return
if(user.ckey in voted)
return
else
votes[user.ckey] = selected_answer
votes[selected_answer] += 1
voted[user.ckey] = selected_answer
. = TRUE
@@ -331,8 +331,8 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
return TRUE
/obj/item/shard/Crossed(mob/living/L)
if(istype(L) && has_gravity(loc))
playsound(loc, 'sound/effects/glass_step.ogg', HAS_TRAIT(L, TRAIT_LIGHT_STEP) ? 30 : 50, TRUE)
if(istype(L) && !(L.is_flying() || L.is_floating() || L.buckled))
playsound(src, 'sound/effects/glass_step.ogg', HAS_TRAIT(L, TRAIT_LIGHT_STEP) ? 30 : 50, TRUE)
return ..()
/obj/item/shard/plasma
+9
View File
@@ -1202,6 +1202,15 @@
)
generate_items_inside(items_inside,src)
/obj/item/storage/box/plastic
name = "plastic box"
desc = "It's a solid, plastic shell box."
icon_state = "plasticbox"
foldable = null
illustration = "writing"
custom_materials = list(/datum/material/plastic = 1000) //You lose most if recycled.
/obj/item/storage/box/fireworks
name = "box of fireworks"
desc = "Contains an assortment of fireworks."
@@ -0,0 +1,52 @@
/obj/item/storage/cans
name = "can ring"
desc = "Holds up to six drink cans, and select bottles."
icon = 'icons/obj/storage.dmi'
icon_state = "canholder"
item_state = "cola"
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
custom_materials = list(/datum/material/plastic = 1200)
max_integrity = 500
/obj/item/storage/cans/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] begins popping open a final cold one with the boys! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return BRUTELOSS
/obj/item/storage/cans/update_icon()
var/icon_status = 0
icon_status = contents.len
icon_state = "[initial(icon_state)][icon_status]"
/obj/item/storage/cans/Initialize()
. = ..()
update_icon()
/obj/item/storage/cans/ComponentInitialize()
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_w_class = WEIGHT_CLASS_SMALL
STR.max_combined_w_class = 12
STR.max_items = 6
STR.set_holdable(list(
/obj/item/reagent_containers/food/drinks/soda_cans,
/obj/item/reagent_containers/food/drinks/beer,
/obj/item/reagent_containers/food/drinks/ale,
/obj/item/reagent_containers/food/drinks/waterbottle
))
/obj/item/storage/cans/sixsoda
name = "soda bottle ring"
desc = "Holds six soda cans. Remember to recycle when you're done!"
/obj/item/storage/cans/sixsoda/PopulateContents()
for(var/i in 1 to 6)
new /obj/item/reagent_containers/food/drinks/soda_cans/cola(src)
/obj/item/storage/cans/sixbeer
name = "beer bottle ring"
desc = "Holds six beer bottles. Remember to recycle when you're done!"
/obj/item/storage/cans/sixbeer/PopulateContents()
for(var/i in 1 to 6)
new /obj/item/reagent_containers/food/drinks/beer(src)
+75
View File
@@ -0,0 +1,75 @@
/obj/machinery/pinpointer_dispenser
name = "wayfinding pinpointer dispenser"
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "ticketmachine"
desc = "Having trouble finding your way? This machine dispenses pinpointers that point to common locations."
density = FALSE
layer = HIGH_OBJ_LAYER
var/list/obj/item/pinpointer/wayfinding/pinpointers = list()
var/spawn_cooldown = 1200 //deciseconds per person to spawn another pinpointer
/obj/machinery/pinpointer_dispenser/attack_hand(mob/living/carbon/user)
if(world.time < pinpointers[user.real_name])
var/secsleft = (pinpointers[user.real_name] - world.time) / 10
to_chat(user, "<span class='warning'>You need to wait [secsleft/60 > 1 ? "[round(secsleft/60)] minute\s" : "[round(secsleft)] second\s"].</span>")
return
to_chat(user, "<span class='notice'>You take a pinpointer from [src].</span>")
var/obj/item/pinpointer/wayfinding/P = new /obj/item/pinpointer/wayfinding(get_turf(src))
user.put_in_hands(P)
P.owner = user.real_name
pinpointers[user.real_name] = world.time + spawn_cooldown
/obj/item/pinpointer/wayfinding //For new players or new stations to help players find their way around
name = "wayfinding pinpointer"
desc = "A handheld tracking device that points to useful places."
icon_state = "pinpointer_crew"
var/owner = null
var/list/beacons = list()
/obj/item/pinpointer/wayfinding/attack_self(mob/living/user)
if(active)
toggle_on()
to_chat(user, "<span class='notice'>You deactivate your pinpointer.</span>")
return
if (!owner)
owner = user.real_name
if(beacons.len)
beacons.Cut()
for(var/obj/machinery/navbeacon/B in GLOB.wayfindingbeacons)
beacons[B.codes["wayfinding"]] = B
if(!beacons.len)
to_chat(user, "<span class='notice'>Your pinpointer fails to detect a signal.</span>")
return
var/A = input(user, "", "Pinpoint") in sortNames(beacons)
if(!A || QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated())
return
target = beacons[A]
toggle_on()
to_chat(user, "<span class='notice'>You activate your pinpointer.</span>")
/obj/item/pinpointer/wayfinding/examine(mob/user)
. = ..()
var/msg = "Its tracking indicator reads "
if(target)
var/obj/machinery/navbeacon/wayfinding/B = target
msg += "\"[B.codes["wayfinding"]]\"."
else
msg = "Its tracking indicator is blank."
if(owner)
msg += " It belongs to [owner]."
. += msg
/obj/item/pinpointer/wayfinding/scan_for_target()
if(!target) //target can be set to null from above code, or elsewhere
active = FALSE
/obj/machinery/navbeacon/wayfinding
wayfinding = TRUE
+1 -1
View File
@@ -39,7 +39,7 @@
structureclimber.visible_message("<span class='warning'>[structureclimber] has been knocked off [src].", "You're knocked off [src]!", "You see [structureclimber] get knocked off [src].</span>")
/obj/structure/ui_act(action, params)
..()
. = ..()
add_fingerprint(usr)
/obj/structure/MouseDrop_T(atom/movable/O, mob/user)
@@ -464,6 +464,7 @@
to_chat(Mob, "<span class='warning'>The chair begins to pop and crack, you're too heavy!</span>")
if(do_after(Mob, 60, 1, Mob, 0))
Mob.visible_message("<span class='notice'>The plastic chair snaps under [Mob]'s weight!</span>")
new /obj/effect/decal/cleanable/plastic(loc)
qdel(src)
/obj/item/chair/plastic
+10
View File
@@ -354,6 +354,15 @@
light_color = "#2cb2e8"
light_range = 3
/obj/item/twohanded/required/kirbyplants/fullysynthetic
name = "plastic potted plant"
desc = "A fake, cheap looking, plastic tree. Perfect for people who kill every plant they touch."
icon_state = "plant-26"
custom_materials = (list(/datum/material/plastic = 8000))
/obj/item/twohanded/required/kirbyplants/fullysynthetic/Initialize()
. = ..()
icon_state = "plant-[rand(26, 29)]"
//a rock is flora according to where the icon file is
//and now these defines
@@ -438,3 +447,4 @@
/obj/structure/flora/rock/pile/largejungle/Initialize()
. = ..()
icon_state = "[initial(icon_state)][rand(1,3)]"
+14
View File
@@ -260,3 +260,17 @@
name = "clockwork golem scrap"
desc = "A pile of scrap metal. It seems damaged beyond repair."
icon_state = "clockgolem_dead"
/obj/structure/fluff/hedge
name = "hedge"
desc = "A large bushy hedge."
icon = 'icons/obj/smooth_structures/hedge.dmi'
icon_state = "hedge"
smooth = SMOOTH_TRUE
canSmoothWith = list(/obj/structure/fluff/hedge, /obj/structure/fluff/hedge/opaque)
density = TRUE
anchored = TRUE
deconstructible = FALSE
/obj/structure/fluff/hedge/opaque //useful for mazes and such
opacity = 1
+1 -1
View File
@@ -82,7 +82,7 @@
. = ..()
if(!.)
return
if(!shock(user, 70))
if(!shock(user, 70) && !QDELETED(src)) //Last hit still shocks but shouldn't deal damage to the grille
take_damage(rand(5,10), BRUTE, "melee", 1)
/obj/structure/grille/attack_paw(mob/user)