mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 06:29:23 +01:00
conflicts
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)]"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user