Updates master-files styling (#9770)

* Updates master-files styling

* Update modular_skyrat/master_files/code/modules/reagents/withdrawal/generic_addictions.dm

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>

* Update modular_skyrat/master_files/code/modules/reagents/withdrawal/generic_addictions.dm

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>

* Update generic_addictions.dm

* span macro

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
This commit is contained in:
Tom
2021-12-01 16:54:11 +00:00
committed by GitHub
co-authored by GoldenAlpharex
parent 3aaf086166
commit fb7d278424
40 changed files with 466 additions and 475 deletions
@@ -1,4 +1,4 @@
GLOBAL_LIST_INIT(generic_ambience,list(
GLOBAL_LIST_INIT(generic_ambience, list(
'modular_skyrat/master_files/sound/ambience/ambigen1.ogg', 'modular_skyrat/master_files/sound/ambience/ambigen2.ogg',
'modular_skyrat/master_files/sound/ambience/ambigen3.ogg', 'modular_skyrat/master_files/sound/ambience/ambigen4.ogg',
'modular_skyrat/master_files/sound/ambience/ambigen5.ogg', 'modular_skyrat/master_files/sound/ambience/ambigen6.ogg',
@@ -61,29 +61,29 @@ SUBSYSTEM_DEF(statpanels)
if(target.stat_tab == "Tickets")
var/list/ahelp_tickets = GLOB.ahelp_tickets.stat_entry()
target << output("[url_encode(json_encode(ahelp_tickets))];", "statbrowser:update_tickets")
var/datum/interview_manager/m = GLOB.interviews
var/datum/interview_manager/interview_manager = GLOB.interviews
// get open interview count
var/dc = 0
for (var/ckey in m.open_interviews)
var/datum/interview/I = m.open_interviews[ckey]
if (I && !I.owner)
for (var/ckey in interview_manager.open_interviews)
var/datum/interview/current_interview = interview_manager.open_interviews[ckey]
if (current_interview && !current_interview.owner)
dc++
var/stat_string = "([m.open_interviews.len - dc] online / [dc] disconnected)"
var/stat_string = "([interview_manager.open_interviews.len - dc] online / [dc] disconnected)"
// Prepare each queued interview
var/list/queued = list()
for (var/datum/interview/I in m.interview_queue)
for (var/datum/interview/current_interview in interview_manager.interview_queue)
queued += list(list(
"ref" = REF(I),
"status" = "\[[I.pos_in_queue]\]: [I.owner_ckey][!I.owner ? " (DC)": ""] \[INT-[I.id]\]"
"ref" = REF(current_interview),
"status" = "\[[current_interview.pos_in_queue]\]: [current_interview.owner_ckey][!current_interview.owner ? " (DC)": ""] \[INT-[current_interview.id]\]"
))
var/list/data = list(
"status" = list(
"Active:" = "[m.open_interviews.len] [stat_string]",
"Queued:" = "[m.interview_queue.len]",
"Closed:" = "[m.closed_interviews.len]"),
"Active:" = "[interview_manager.open_interviews.len] [stat_string]",
"Queued:" = "[interview_manager.interview_queue.len]",
"Closed:" = "[interview_manager.closed_interviews.len]"),
"interviews" = queued
)
@@ -96,14 +96,14 @@ SUBSYSTEM_DEF(statpanels)
sdql2A[++sdql2A.len] = list("", "Access Global SDQL2 List", REF(GLOB.sdql2_vv_statobj))
var/list/sdql2B = list()
for(var/i in GLOB.sdql2_queries)
var/datum/sdql2_query/Q = i
sdql2B = Q.generate_stat()
var/datum/sdql2_query/current_query = i
sdql2B = current_query.generate_stat()
sdql2A += sdql2B
target << output(url_encode(json_encode(sdql2A)), "statbrowser:update_sdql2")
if(target.mob)
var/mob/M = target.mob
if((target.stat_tab in target.spell_tabs) || !length(target.spell_tabs) && (length(M.mob_spell_list) || length(M.mind?.spell_list)))
var/list/proc_holders = M.get_proc_holders()
var/mob/checked_mob = target.mob
if((target.stat_tab in target.spell_tabs) || !length(target.spell_tabs) && (length(checked_mob.mob_spell_list) || length(checked_mob.mind?.spell_list)))
var/list/proc_holders = checked_mob.get_proc_holders()
target.spell_tabs.Cut()
for(var/phl in proc_holders)
var/list/proc_holder_list = phl
@@ -112,12 +112,12 @@ SUBSYSTEM_DEF(statpanels)
if(length(proc_holders))
proc_holders_encoded = url_encode(json_encode(proc_holders))
target << output("[url_encode(json_encode(target.spell_tabs))];[proc_holders_encoded]", "statbrowser:update_spells")
if(M?.listed_turf)
var/mob/target_mob = M
if(checked_mob?.listed_turf)
var/mob/target_mob = checked_mob
if(!target_mob.TurfAdjacent(target_mob.listed_turf))
target << output("", "statbrowser:remove_listedturf")
target_mob.listed_turf = null
else if(target.stat_tab == M?.listed_turf.name || !(M?.listed_turf.name in target.panel_tabs))
else if(target.stat_tab == checked_mob?.listed_turf.name || !(checked_mob?.listed_turf.name in target.panel_tabs))
var/list/overrides = list()
var/list/turfitems = list()
for(var/img in target.images)
@@ -125,7 +125,7 @@ SUBSYSTEM_DEF(statpanels)
if(!target_image.loc || target_image.loc.loc != target_mob.listed_turf || !target_image.override)
continue
overrides += target_image.loc
turfitems[++turfitems.len] = list("[target_mob.listed_turf]", REF(target_mob.listed_turf), icon2html(target_mob.listed_turf, target, sourceonly=TRUE))
turfitems[++turfitems.len] = list("[target_mob.listed_turf]", REF(target_mob.listed_turf), icon2html(target_mob.listed_turf, target, sourceonly = TRUE))
for(var/tc in target_mob.listed_turf)
var/atom/movable/turf_content = tc
if(turf_content.mouse_opacity == MOUSE_OPACITY_TRANSPARENT)
@@ -141,9 +141,9 @@ SUBSYSTEM_DEF(statpanels)
cached_images += REF(turf_content)
turf_content.RegisterSignal(turf_content, COMSIG_PARENT_QDELETING, /atom/.proc/remove_from_cache) // we reset cache if anything in it gets deleted
if(ismob(turf_content) || length(turf_content.overlays) > 2)
turfitems[++turfitems.len] = list("[turf_content.name]", REF(turf_content), costly_icon2html(turf_content, target, sourceonly=TRUE))
turfitems[++turfitems.len] = list("[turf_content.name]", REF(turf_content), costly_icon2html(turf_content, target, sourceonly = TRUE))
else
turfitems[++turfitems.len] = list("[turf_content.name]", REF(turf_content), icon2html(turf_content, target, sourceonly=TRUE))
turfitems[++turfitems.len] = list("[turf_content.name]", REF(turf_content), icon2html(turf_content, target, sourceonly = TRUE))
else
turfitems[++turfitems.len] = list("[turf_content.name]", REF(turf_content))
else
@@ -161,7 +161,7 @@ SUBSYSTEM_DEF(statpanels)
list("World Time:", "[world.time]"),
list("Globals:", GLOB.stat_entry(), "\ref[GLOB]"),
list("[config]:", config.stat_entry(), "\ref[config]"),
list("Byond:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%)) (Internal Tick Usage: [round(MAPTICK_LAST_INTERNAL_TICK_USAGE,0.1)]%)"),
list("Byond:", "(FPS:[world.fps]) (TickCount:[world.time / world.tick_lag]) (TickDrift:[round(Master.tickdrift, 1)]([round((Master.tickdrift / (world.time / world.tick_lag)) * 100, 0.1)]%)) (Internal Tick Usage: [round(MAPTICK_LAST_INTERNAL_TICK_USAGE, 0.1)]%)"),
list("Master Controller:", Master.stat_entry(), "\ref[Master]"),
list("Failsafe Controller:", Failsafe.stat_entry(), "\ref[Failsafe]"),
list("","")
@@ -53,11 +53,11 @@
stop_autofiring() //Let's stop shooting to avoid issues.
return
var/obj/item/gun/G = parent
var/obj/item/gun/parent_gun = parent
if(iscarbon(user))
var/mob/living/carbon/shooter = user
if(shooter.is_holding(parent) && G.fire_select == SELECT_FULLY_AUTOMATIC)
if(shooter.is_holding(parent) && parent_gun.fire_select == SELECT_FULLY_AUTOMATIC)
autofire_on(shooter.client)
else
autofire_off()
@@ -37,32 +37,32 @@
/datum/id_trim/syndicom/skyrat/assault/masteratarms
assignment = "Master At Arms"
trim_state = "trim_masteratarms"
access = list(ACCESS_SYNDICATE,ACCESS_ROBOTICS,ACCESS_SYNDICATE_LEADER)
access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
/datum/id_trim/syndicom/skyrat/assault/brigofficer
assignment = "Brig Officer"
trim_state = "trim_brigofficer"
access = list(ACCESS_SYNDICATE,ACCESS_ROBOTICS,ACCESS_SYNDICATE_LEADER)
access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
/datum/id_trim/syndicom/skyrat/assault/chiefmasteratarms
assignment = "Chief Master At Arms"
trim_state = "trim_chiefmasteratarms"
access = list(ACCESS_SYNDICATE,ACCESS_ROBOTICS,ACCESS_SYNDICATE_LEADER)
access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
/datum/id_trim/syndicom/skyrat/assault/chiefresearchofficer
assignment = "Chief Research Officer"
trim_state = "trim_chiefresearchofficer"
access = list(ACCESS_SYNDICATE,ACCESS_ROBOTICS,ACCESS_SYNDICATE_LEADER)
access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
/datum/id_trim/syndicom/skyrat/assault/chiefengineeringofficer
assignment = "Chief Engineering Officer"
trim_state = "trim_chiefengineeringofficer"
access = list(ACCESS_ENGINE_EQUIP,ACCESS_SYNDICATE,ACCESS_ROBOTICS,ACCESS_SYNDICATE_LEADER)
access = list(ACCESS_ENGINE_EQUIP, ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
/datum/id_trim/syndicom/skyrat/assault/stationadmiral
assignment = "Station Admiral"
trim_state = "trim_stationadmiral"
access = list(ACCESS_ENGINE_EQUIP,ACCESS_SYNDICATE,ACCESS_ROBOTICS,ACCESS_SYNDICATE_LEADER)
access = list(ACCESS_ENGINE_EQUIP, ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
///Interdyne
@@ -77,7 +77,7 @@
/datum/id_trim/syndicom/skyrat/interdyne/deckofficer
assignment = "Deck Officer"
trim_state = "trim_deckofficer"
access = list(ACCESS_SYNDICATE,ACCESS_ROBOTICS,ACCESS_SYNDICATE_LEADER)
access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
///Misc
@@ -3,22 +3,22 @@
id = MARTIALART_CQC_PLUS
block_chance = 85
/datum/martial_art/cqc/plus/on_projectile_hit(mob/living/A, obj/projectile/P, def_zone)
/datum/martial_art/cqc/plus/on_projectile_hit(mob/living/hit_mob, obj/projectile/fired_projectile, def_zone)
. = ..()
if(A.incapacitated(FALSE, TRUE)) //NO STUN
if(hit_mob.incapacitated(FALSE, TRUE)) //NO STUN
return BULLET_ACT_HIT
if(!(A.mobility_flags & MOBILITY_USE)) //NO UNABLE TO USE
if(!(hit_mob.mobility_flags & MOBILITY_USE)) //NO UNABLE TO USE
return BULLET_ACT_HIT
var/datum/dna/dna = A.has_dna()
var/datum/dna/dna = hit_mob.has_dna()
if(dna?.check_mutation(HULK)) //NO HULK
return BULLET_ACT_HIT
if(!isturf(A.loc)) //NO MOTHERFLIPPIN MECHS!
if(!isturf(hit_mob.loc)) //NO MOTHERFLIPPIN MECHS!
return BULLET_ACT_HIT
if(A.throw_mode)
A.visible_message(span_danger("[A] effortlessly swats the projectile aside! They can block bullets with their bare hands!"), span_userdanger("You deflect the projectile!"))
playsound(get_turf(A), pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE)
P.firer = A
P.set_angle(rand(0, 360))//SHING
if(hit_mob.throw_mode)
hit_mob.visible_message(span_danger("[hit_mob] effortlessly swats the projectile aside! They can block bullets with their bare hands!"), span_userdanger("You deflect the projectile!"))
playsound(get_turf(hit_mob), pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE)
fired_projectile.firer = hit_mob
fired_projectile.set_angle(rand(0, 360))//SHING
return BULLET_ACT_FORCE_PIERCE
return BULLET_ACT_HIT
@@ -8,7 +8,7 @@
/obj/effect/proc_holder/spell/self/chameleon_skin_activate/cast(list/targets, mob/user = usr)
. = ..()
if(HAS_TRAIT(user,TRAIT_CHAMELEON_SKIN))
if(HAS_TRAIT(user, TRAIT_CHAMELEON_SKIN))
chameleon_skin_deactivate(user)
return
@@ -16,7 +16,7 @@
to_chat(user, "The pigmentation of your skin shifts and starts to take on the colors of your surroundings.")
/obj/effect/proc_holder/spell/self/chameleon_skin_activate/proc/chameleon_skin_deactivate(mob/user = usr)
if(!HAS_TRAIT_FROM(user,TRAIT_CHAMELEON_SKIN, GENETIC_MUTATION))
if(!HAS_TRAIT_FROM(user, TRAIT_CHAMELEON_SKIN, GENETIC_MUTATION))
return
REMOVE_TRAIT(user, TRAIT_CHAMELEON_SKIN, GENETIC_MUTATION)
@@ -70,8 +70,8 @@
name = "Mute"
desc = "Due to some accident, medical condition, or simply by choice, you are completely unable to speak."
value = -2 //HALP MAINTS
gain_text = "<span class='danger'>You find yourself unable to speak!</span>"
lose_text = "<span class='notice'>You feel a growing strength in your vocal chords.</span>"
gain_text = span_danger("You find yourself unable to speak!")
lose_text = span_notice("You feel a growing strength in your vocal chords.")
medical_record_text = "Functionally mute, patient is unable to use their voice in any capacity."
/datum/quirk/mute/add()
@@ -88,7 +88,7 @@
..()
icon_state = "joker"
/obj/item/paper/joker/AltClick(mob/living/carbon/user, obj/item/I)
/obj/item/paper/joker/AltClick(mob/living/carbon/user, obj/item/card)
if(flipped)
info = initial(info)
flipped = FALSE
@@ -20,7 +20,7 @@
return TRUE
return FALSE
/obj/machinery/door/firedoor/try_to_crowbar(obj/item/I, mob/user)
/obj/machinery/door/firedoor/try_to_crowbar(obj/item/used_object, mob/user)
if(welded || operating)
to_chat(user, span_warning("[src] refuses to budge!"))
return
@@ -7,7 +7,7 @@
worn_icon_state = "painter"
w_class = WEIGHT_CLASS_SMALL
custom_materials = list(/datum/material/iron=50, /datum/material/glass=50)
custom_materials = list(/datum/material/iron = 50, /datum/material/glass = 50)
flags_1 = CONDUCT_1
item_flags = NOBLUDGEON
@@ -71,9 +71,9 @@
return TRUE
/obj/item/airlock_painter/suicide_act(mob/user)
var/obj/item/organ/lungs/L = user.getorganslot(ORGAN_SLOT_LUNGS)
var/obj/item/organ/lungs/mob_lungs = user.getorganslot(ORGAN_SLOT_LUNGS)
if(can_use(user) && L)
if(can_use(user) && mob_lungs)
user.visible_message(span_suicide("[user] is inhaling toner from [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
use(user)
@@ -82,31 +82,31 @@
// Find out if there is an open turf in front of us,
// and if not, pick the turf we are standing on.
var/turf/T = get_step(get_turf(src), user.dir)
if(!isopenturf(T))
T = get_turf(src)
var/turf/target_turf = get_step(get_turf(src), user.dir)
if(!isopenturf(target_turf))
target_turf = get_turf(src)
// they managed to lose their lungs between then and
// now. Good job.
if(!L)
if(!mob_lungs)
return OXYLOSS
L.Remove(user)
mob_lungs.Remove(user)
// make some colorful reagent, and apply it to the lungs
L.create_reagents(10)
L.reagents.add_reagent(/datum/reagent/colorful_reagent, 10)
L.reagents.expose(L, TOUCH, 1)
mob_lungs.create_reagents(10)
mob_lungs.reagents.add_reagent(/datum/reagent/colorful_reagent, 10)
mob_lungs.reagents.expose(mob_lungs, TOUCH, 1)
// TODO maybe add some colorful vomit?
user.visible_message(span_suicide("[user] vomits out [user.p_their()] [L]!"))
user.visible_message(span_suicide("[user] vomits out [user.p_their()] [mob_lungs]!"))
playsound(user.loc, 'sound/effects/splat.ogg', 50, TRUE)
L.forceMove(T)
mob_lungs.forceMove(target_turf)
return (TOXLOSS|OXYLOSS)
else if(can_use(user) && !L)
else if(can_use(user) && !mob_lungs)
user.visible_message(span_suicide("[user] is spraying toner on [user.p_them()]self from [src]! It looks like [user.p_theyre()] trying to commit suicide."))
user.reagents.add_reagent(/datum/reagent/colorful_reagent, 1)
user.reagents.expose(user, TOUCH, 1)
@@ -122,32 +122,32 @@
icon = 'icons/obj/objects.dmi'
icon_state = "decal_sprayer"
inhand_icon_state = "decalsprayer"
custom_materials = list(/datum/material/iron=50, /datum/material/glass=50)
custom_materials = list(/datum/material/iron = 50, /datum/material/glass = 50)
var/stored_dir = 2
var/stored_color = ""
var/stored_decal = "warningline"
var/stored_decal_total = "warningline"
var/color_list = list("","red","white")
var/dir_list = list(1,2,4,8)
var/decal_list = list(list("Warning Line","warningline"),
list("Warning Line Corner","warninglinecorner"),
list("Caution Label","caution"),
list("Directional Arrows","arrows"),
list("Stand Clear Label","stand_clear"),
list("Box","box"),
list("Box Corner","box_corners"),
list("Delivery Marker","delivery"),
list("Warning Box","warn_full"))
var/color_list = list("", "red", "white")
var/dir_list = list(1, 2, 4, 8)
var/decal_list = list(list("Warning Line", "warningline"),
list("Warning Line Corner", "warninglinecorner"),
list("Caution Label", "caution"),
list("Directional Arrows", "arrows"),
list("Stand Clear Label", "stand_clear"),
list("Box", "box"),
list("Box Corner", "box_corners"),
list("Delivery Marker", "delivery"),
list("Warning Box", "warn_full"))
cell_override = /obj/item/stock_parts/cell/upgraded/plus
/obj/item/airlock_painter/decal/afterattack(atom/target, mob/user, proximity)
. = ..()
var/turf/open/floor/F = target
var/turf/open/floor/target_floor = target
if(!proximity)
to_chat(user, span_notice("You need to get closer!"))
return
if(use_paint(user) && isturf(F))
F.AddElement(/datum/element/decal, 'icons/turf/decals.dmi', stored_decal_total, stored_dir, null, null, alpha, color, null, CLEAN_TYPE_PAINT, null)
if(use_paint(user) && isturf(target_floor))
target_floor.AddElement(/datum/element/decal, 'icons/turf/decals.dmi', stored_decal_total, stored_dir, null, null, alpha, color, null, CLEAN_TYPE_PAINT, null)
/obj/item/airlock_painter/decal/AltClick(mob/user)
. = ..()
@@ -190,7 +190,7 @@
))
return data
/obj/item/airlock_painter/decal/ui_act(action,list/params)
/obj/item/airlock_painter/decal/ui_act(action, list/params)
. = ..()
if(.)
return
@@ -18,19 +18,19 @@
var/mob/living/carbon/human/human_target = target
var/static/list/dye_options = list(DYE_OPTION_HAIR_COLOR, DYE_OPTION_GRADIENT)
var/gradient_or_hair = tgui_alert(user, "What would you like to do?", "Hair Dye Spray", dye_options, autofocus=TRUE)
var/gradient_or_hair = tgui_alert(user, "What would you like to do?", "Hair Dye Spray", dye_options, autofocus = TRUE)
if(!gradient_or_hair || !user.canUseTopic(src, BE_CLOSE, NO_DEXTERITY, FALSE))
return
var/dying_themselves = target == user
if(gradient_or_hair == DYE_OPTION_HAIR_COLOR)
var/new_color = input(usr, "Choose a hair color:", "Character Preference","#"+human_target.hair_color) as color|null
var/new_color = input(usr, "Choose a hair color:", "Character Preference", "#" + human_target.hair_color) as color|null
if(!new_color || !user.canUseTopic(src, BE_CLOSE, NO_DEXTERITY, FALSE))
return
human_target.visible_message(span_notice("[user] starts applying hair dye to [dying_themselves ? "their own" : "[human_target]'s"] hair..."), span_notice("[dying_themselves ? "You start" : "[user] starts"] applying hair dye to [dying_themselves ? "your own" : "your"] hair..."), ignored_mobs=user)
human_target.visible_message(span_notice("[user] starts applying hair dye to [dying_themselves ? "their own" : "[human_target]'s"] hair..."), span_notice("[dying_themselves ? "You start" : "[user] starts"] applying hair dye to [dying_themselves ? "your own" : "your"] hair..."), ignored_mobs = user)
if(!dying_themselves)
to_chat(user, "You start applying hair dye to [human_target]'s hair...")
if(!do_after(usr, 3 SECONDS, target))
@@ -51,7 +51,7 @@
if(!new_grad_color || !user.canUseTopic(src, BE_CLOSE, NO_DEXTERITY, FALSE))
return
human_target.visible_message(span_notice("[user] starts applying hair dye to [dying_themselves ? "their own" : "[human_target]'s"] hair..."), span_notice("[dying_themselves ? "You start" : "[user] starts"] applying hair dye to [dying_themselves ? "your own" : "your"] hair..."), ignored_mobs=user)
human_target.visible_message(span_notice("[user] starts applying hair dye to [dying_themselves ? "their own" : "[human_target]'s"] hair..."), span_notice("[dying_themselves ? "You start" : "[user] starts"] applying hair dye to [dying_themselves ? "your own" : "your"] hair..."), ignored_mobs = user)
if(!dying_themselves)
to_chat(user, "You start applying hair dye to [human_target]'s hair...")
if(!do_after(usr, 3 SECONDS, target))
@@ -62,7 +62,7 @@
human_target.grad_style[gradient_key] = new_grad_style
human_target.grad_color[gradient_key] = sanitize_hexcolor(new_grad_color)
playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 5)
human_target.visible_message(span_notice("[user] finishes applying hair dye to [dying_themselves ? "their own" : "[human_target]'s"] hair, changing its color!"), span_notice("[dying_themselves ? "You finish" : "[user] finishes"] applying hair dye to [dying_themselves ? "your own" : "your"] hair, changing its color!"), ignored_mobs=user)
human_target.visible_message(span_notice("[user] finishes applying hair dye to [dying_themselves ? "their own" : "[human_target]'s"] hair, changing its color!"), span_notice("[dying_themselves ? "You finish" : "[user] finishes"] applying hair dye to [dying_themselves ? "your own" : "your"] hair, changing its color!"), ignored_mobs = user)
if(!dying_themselves)
to_chat(user, "You finish applying hair dye to [human_target]'s hair, changing its color!")
human_target.update_hair()
@@ -21,9 +21,9 @@
/obj/item/hhmirror/fullmagic/New()
if(!choosable_races.len)
for(var/speciestype in subtypesof(/datum/species))
var/datum/species/S = new speciestype()
if(!(S.id in races_blacklist))
choosable_races += S.id
var/datum/species/iterated_species = new speciestype()
if(!(iterated_species.id in races_blacklist))
choosable_races += iterated_species.id
..()
/obj/item/hhmirror/fullmagic/attack_self(mob/user)
@@ -32,111 +32,111 @@
return
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
var/mob/living/carbon/human/human_user = user
var/choice = input(user, "Something to change?", "Magical Grooming") as null|anything in list("name", "race", "gender", "hair", "eyes")
switch(choice)
if("name")
var/newname = reject_bad_name(stripped_input(H, "Who are we again?", "Name change", H.name, MAX_NAME_LEN))
var/newname = reject_bad_name(stripped_input(human_user, "Who are we again?", "Name change", human_user.name, MAX_NAME_LEN))
if(!newname)
return
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
H.real_name = newname
H.name = newname
if(H.dna)
H.dna.real_name = newname
if(H.mind)
H.mind.name = newname
human_user.real_name = newname
human_user.name = newname
if(human_user.dna)
human_user.dna.real_name = newname
if(human_user.mind)
human_user.mind.name = newname
if("race")
var/newrace
var/racechoice = input(H, "What are we again?", "Race change") as null|anything in choosable_races
var/racechoice = input(human_user, "What are we again?", "Race change") as null|anything in choosable_races
newrace = GLOB.species_list[racechoice]
if(!newrace)
return
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
H.set_species(newrace, icon_update=0)
human_user.set_species(newrace, icon_update = 0)
if(H.dna.species.use_skintones)
if(human_user.dna.species.use_skintones)
var/new_s_tone = input(user, "Choose your skin tone:", "Race change") as null|anything in GLOB.skin_tones
if(new_s_tone)
H.skin_tone = new_s_tone
H.dna.update_ui_block(DNA_SKIN_TONE_BLOCK)
human_user.skin_tone = new_s_tone
human_user.dna.update_ui_block(DNA_SKIN_TONE_BLOCK)
if(MUTCOLORS in H.dna.species.species_traits)
var/new_mutantcolor = input(user, "Choose your skin color:", "Race change",H.dna.features["mcolor"]) as color|null
if(MUTCOLORS in human_user.dna.species.species_traits)
var/new_mutantcolor = input(user, "Choose your skin color:", "Race change", human_user.dna.features["mcolor"]) as color|null
if(new_mutantcolor)
var/temp_hsv = RGBtoHSV(new_mutantcolor)
if(ReadHSV(temp_hsv)[3] >= ReadHSV("#7F7F7F")[3]) // mutantcolors must be bright
H.dna.features["mcolor"] = sanitize_hexcolor(new_mutantcolor)
human_user.dna.features["mcolor"] = sanitize_hexcolor(new_mutantcolor)
else
to_chat(H, span_notice("Invalid color. Your color is not bright enough."))
to_chat(human_user, span_notice("Invalid color. Your color is not bright enough."))
H.update_body()
H.update_hair()
H.update_body_parts()
H.update_mutations_overlay() // no hulk lizard
human_user.update_body()
human_user.update_hair()
human_user.update_body_parts()
human_user.update_mutations_overlay() // no hulk lizard
if("gender")
if(!(H.gender in list("male", "female"))) //blame the patriarchy
if(!(human_user.gender in list("male", "female"))) //blame the patriarchy
return
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if(H.gender == "male")
if(alert(H, "Become a Witch?", "Confirmation", "Yes", "No") == "Yes")
H.gender = "female"
to_chat(H, span_notice("Man, you feel like a woman!"))
if(human_user.gender == "male")
if(alert(human_user, "Become a Witch?", "Confirmation", "Yes", "No") == "Yes")
human_user.gender = "female"
to_chat(human_user, span_notice("Man, you feel like a woman!"))
else
return
else
if(alert(H, "Become a Warlock?", "Confirmation", "Yes", "No") == "Yes")
H.gender = "male"
to_chat(H, span_notice("Whoa man, you feel like a man!"))
if(alert(human_user, "Become a Warlock?", "Confirmation", "Yes", "No") == "Yes")
human_user.gender = "male"
to_chat(human_user, span_notice("Whoa man, you feel like a man!"))
else
return
H.dna.update_ui_block(DNA_GENDER_BLOCK)
H.update_body()
H.update_mutations_overlay() //(hulk male/female)
human_user.dna.update_ui_block(DNA_GENDER_BLOCK)
human_user.update_body()
human_user.update_mutations_overlay() //(hulk male/female)
if("hair")
var/hairchoice = tgui_alert(H, "Hair style or hair color?", "Change Hair", list("Style", "Color"))
var/hairchoice = tgui_alert(human_user, "Hair style or hair color?", "Change Hair", list("Style", "Color"))
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if(hairchoice == "Style") //So you just want to use a mirror then?
..()
else
var/new_hair_color = input(H, "Choose your hair color", "Hair Color",H.hair_color) as color|null
var/new_hair_color = input(human_user, "Choose your hair color", "Hair Color", human_user.hair_color) as color|null
if(new_hair_color)
H.hair_color = sanitize_hexcolor(new_hair_color)
H.dna.update_ui_block(DNA_HAIR_COLOR_BLOCK)
if(H.gender == "male")
var/new_face_color = input(H, "Choose your facial hair color", "Hair Color",H.facial_hair_color) as color|null
human_user.hair_color = sanitize_hexcolor(new_hair_color)
human_user.dna.update_ui_block(DNA_HAIR_COLOR_BLOCK)
if(human_user.gender == "male")
var/new_face_color = input(human_user, "Choose your facial hair color", "Hair Color", human_user.facial_hair_color) as color|null
if(new_face_color)
H.facial_hair_color = sanitize_hexcolor(new_face_color)
H.dna.update_ui_block(DNA_FACIAL_HAIR_COLOR_BLOCK)
H.update_hair()
human_user.facial_hair_color = sanitize_hexcolor(new_face_color)
human_user.dna.update_ui_block(DNA_FACIAL_HAIR_COLOR_BLOCK)
human_user.update_hair()
if(BODY_ZONE_PRECISE_EYES)
var/new_eye_color = input(H, "Choose your eye color", "Eye Color",H.eye_color) as color|null
var/new_eye_color = input(human_user, "Choose your eye color", "Eye Color", human_user.eye_color) as color|null
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if(new_eye_color)
var/n_color = sanitize_hexcolor(new_eye_color)
var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES)
var/obj/item/organ/eyes/eyes = human_user.getorganslot(ORGAN_SLOT_EYES)
if(eyes)
eyes.eye_color = n_color
H.eye_color = n_color
H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
H.dna.species.handle_body()
human_user.eye_color = n_color
human_user.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
human_user.dna.species.handle_body()
/obj/item/hhmirror/wracemagic
name = "Raceless Handheld Magic Mirror"
@@ -152,77 +152,77 @@
if(!ishuman(user))
return
if(!charges == 0) // Later, should also have a lock
var/mob/living/carbon/human/H = user
var/mob/living/carbon/human/human_user = user
var/choice = input(user, "Something to change?", "Magical Grooming") as null|anything in list("name", "gender", "hair", "eyes")
switch(choice)
if("name")
var/newname = reject_bad_name(stripped_input(H, "Who are we again?", "Name change", H.name, MAX_NAME_LEN))
var/newname = reject_bad_name(stripped_input(human_user, "Who are we again?", "Name change", human_user.name, MAX_NAME_LEN))
if(!newname)
return
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
H.real_name = newname
H.name = newname
if(H.dna)
H.dna.real_name = newname
if(H.mind)
H.mind.name = newname
human_user.real_name = newname
human_user.name = newname
if(human_user.dna)
human_user.dna.real_name = newname
if(human_user.mind)
human_user.mind.name = newname
if("gender")
if(!(H.gender in list("male", "female"))) //blame the patriarchy
if(!(human_user.gender in list("male", "female"))) //blame the patriarchy
return
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if(H.gender == "male")
if(alert(H, "Become a Witch?", "Confirmation", "Yes", "No") == "Yes")
H.gender = "female"
to_chat(H, span_notice("Man, you feel like a woman!"))
if(human_user.gender == "male")
if(alert(human_user, "Become a Witch?", "Confirmation", "Yes", "No") == "Yes")
human_user.gender = "female"
to_chat(human_user, span_notice("Man, you feel like a woman!"))
else
return
else
if(alert(H, "Become a Warlock?", "Confirmation", "Yes", "No") == "Yes")
H.gender = "male"
to_chat(H, span_notice("Whoa man, you feel like a man!"))
if(alert(human_user, "Become a Warlock?", "Confirmation", "Yes", "No") == "Yes")
human_user.gender = "male"
to_chat(human_user, span_notice("Whoa man, you feel like a man!"))
else
return
H.dna.update_ui_block(DNA_GENDER_BLOCK)
H.update_body()
H.update_mutations_overlay() //(hulk male/female)
human_user.dna.update_ui_block(DNA_GENDER_BLOCK)
human_user.update_body()
human_user.update_mutations_overlay() //(hulk male/female)
if("hair")
var/hairchoice = tgui_alert(H, "Hair style or hair color?", "Change Hair", list("Style", "Color"))
var/hairchoice = tgui_alert(human_user, "Hair style or hair color?", "Change Hair", list("Style", "Color"))
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if(hairchoice == "Style") //So you just want to use a mirror then?
..()
else
var/new_hair_color = input(H, "Choose your hair color", "Hair Color",H.hair_color) as color|null
var/new_hair_color = input(human_user, "Choose your hair color", "Hair Color", human_user.hair_color) as color|null
if(new_hair_color)
H.hair_color = sanitize_hexcolor(new_hair_color)
H.dna.update_ui_block(DNA_HAIR_COLOR_BLOCK)
if(H.gender == "male")
var/new_face_color = input(H, "Choose your facial hair color", "Hair Color",H.facial_hair_color) as color|null
human_user.hair_color = sanitize_hexcolor(new_hair_color)
human_user.dna.update_ui_block(DNA_HAIR_COLOR_BLOCK)
if(human_user.gender == "male")
var/new_face_color = input(human_user, "Choose your facial hair color", "Hair Color", human_user.facial_hair_color) as color|null
if(new_face_color)
H.facial_hair_color = sanitize_hexcolor(new_face_color)
H.dna.update_ui_block(DNA_FACIAL_HAIR_COLOR_BLOCK)
H.update_hair()
human_user.facial_hair_color = sanitize_hexcolor(new_face_color)
human_user.dna.update_ui_block(DNA_FACIAL_HAIR_COLOR_BLOCK)
human_user.update_hair()
if(BODY_ZONE_PRECISE_EYES)
var/new_eye_color = input(H, "Choose your eye color", "Eye Color",H.eye_color) as color|null
var/new_eye_color = input(human_user, "Choose your eye color", "Eye Color", human_user.eye_color) as color|null
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if(new_eye_color)
var/n_color = sanitize_hexcolor(new_eye_color)
var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES)
var/obj/item/organ/eyes/eyes = human_user.getorganslot(ORGAN_SLOT_EYES)
if(eyes)
eyes.eye_color = n_color
H.eye_color = n_color
H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
H.dna.species.handle_body()
human_user.eye_color = n_color
human_user.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
human_user.dna.species.handle_body()
charges--
if(charges == 0)
qdel(src)
@@ -145,7 +145,7 @@
if(GLOB.deity)
deity_name = GLOB.deity
/obj/item/nullrod/rosary/attack(mob/living/M, mob/living/user, params)
/obj/item/nullrod/rosary/attack(mob/living/target, mob/living/user, params)
if(!user.mind || user.mind.assigned_role != "Chaplain")
to_chat(user, span_notice("You are not close enough with [deity_name] to use [src]."))
return
@@ -155,17 +155,17 @@
to_chat(user, span_notice("You are already using [src]."))
return
user.visible_message(span_info("[user] kneels[M == user ? null : " next to [M]"] and begins to utter a prayer to [deity_name]."), \
span_info("You kneel[M == user ? null : " next to [M]"] and begin a prayer to [deity_name]."))
user.visible_message(span_info("[user] kneels[target == user ? null : " next to [target]"] and begins to utter a prayer to [deity_name]."), \
span_info("You kneel[target == user ? null : " next to [target]"] and begin a prayer to [deity_name]."))
praying = TRUE
if(do_after(user, 20, target = M))
M.reagents?.add_reagent(/datum/reagent/water/holywater, 5)
to_chat(M, span_notice("[user]'s prayer to [deity_name] has eased your pain!"))
M.adjustToxLoss(-5, TRUE, TRUE)
M.adjustOxyLoss(-5)
M.adjustBruteLoss(-5)
M.adjustFireLoss(-5)
if(do_after(user, 20, target = target))
target.reagents?.add_reagent(/datum/reagent/water/holywater, 5)
to_chat(target, span_notice("[user]'s prayer to [deity_name] has eased your pain!"))
target.adjustToxLoss(-5, TRUE, TRUE)
target.adjustOxyLoss(-5)
target.adjustBruteLoss(-5)
target.adjustFireLoss(-5)
praying = FALSE
else
to_chat(user, span_notice("Your prayer to [deity_name] was interrupted."))
@@ -49,16 +49,16 @@
..()
icon_state = "[lit ? "sauna_oven_on" : initial(icon_state)]"
/obj/structure/sauna_oven/attackby(obj/item/T, mob/user)
if(T.tool_behaviour == TOOL_WRENCH)
/obj/structure/sauna_oven/attackby(obj/item/used_item, mob/user)
if(used_item.tool_behaviour == TOOL_WRENCH)
to_chat(user, span_notice("You begin to deconstruct [src]."))
if(T.use_tool(src, user, 60, volume=50))
if(used_item.use_tool(src, user, 60, volume = 50))
to_chat(user, span_notice("You successfully deconstructed [src]."))
new /obj/item/stack/sheet/mineral/wood(get_turf(src), 30)
qdel(src)
else if(istype(T, /obj/item/reagent_containers))
var/obj/item/reagent_containers/reagent_container = T
else if(istype(used_item, /obj/item/reagent_containers))
var/obj/item/reagent_containers/reagent_container = used_item
if(!reagent_container.is_open_container())
return ..()
if(reagent_container.reagents.has_reagent(/datum/reagent/water))
@@ -70,29 +70,29 @@
else
to_chat(user, span_warning("There's no water in [reagent_container]"))
else if(istype(T, /obj/item/stack/sheet/mineral/wood))
var/obj/item/stack/sheet/mineral/wood/wood = T
else if(istype(used_item, /obj/item/stack/sheet/mineral/wood))
var/obj/item/stack/sheet/mineral/wood/wood = used_item
if(fuel_amount > SAUNA_MAXIMUM_FUEL)
to_chat(user, span_warning("You can't fit any more of [T] in [src]!"))
to_chat(user, span_warning("You can't fit any more of [used_item] in [src]!"))
return
fuel_amount += SAUNA_LOG_FUEL * wood.amount
wood.use(wood.amount)
user.visible_message(span_notice("[user] tosses some \
wood into [src]."), span_notice("You add \
some fuel to [src]."))
else if(istype(T, /obj/item/paper_bin))
var/obj/item/paper_bin/paper_bin = T
user.visible_message(span_notice("[user] throws [T] into \
[src]."), span_notice("You add [T] to [src].\
else if(istype(used_item, /obj/item/paper_bin))
var/obj/item/paper_bin/paper_bin = used_item
user.visible_message(span_notice("[user] throws [used_item] into \
[src]."), span_notice("You add [used_item] to [src].\
"))
fuel_amount += SAUNA_PAPER_FUEL * paper_bin.total_paper
qdel(paper_bin)
else if(istype(T, /obj/item/paper))
user.visible_message(span_notice("[user] throws [T] into \
[src]."), span_notice("You throw [T] into [src].\
else if(istype(used_item, /obj/item/paper))
user.visible_message(span_notice("[user] throws [used_item] into \
[src]."), span_notice("You throw [used_item] into [src].\
"))
fuel_amount += SAUNA_PAPER_FUEL
qdel(T)
qdel(used_item)
return ..()
/obj/structure/sauna_oven/process()
@@ -35,32 +35,32 @@
/obj/structure/trash_pile/proc/do_search(mob/user)
if(contents.len) //There's something hidden
var/atom/A = contents[contents.len] //Get the most recent hidden thing
if(istype(A, /mob/living))
var/mob/living/M = A
to_chat(user,span_notice("You found someone in the trash!"))
eject_mob(M)
else if (istype(A, /obj/item))
var/obj/item/I = A
to_chat(user,span_notice("You found something!"))
I.forceMove(src.loc)
var/atom/hidden_atom = contents[contents.len] //Get the most recent hidden thing
if(istype(hidden_atom, /mob/living))
var/mob/living/hidden_mob = hidden_atom
to_chat(user, span_notice("You found someone in the trash!"))
eject_mob(hidden_mob)
else if (istype(hidden_atom, /obj/item))
var/obj/item/hidden_item = hidden_atom
to_chat(user, span_notice("You found something!"))
hidden_item.forceMove(src.loc)
else
//You already searched this one bruh
if(user.ckey in searchedby)
to_chat(user,span_warning("There's nothing else for you in \the [src]!"))
to_chat(user, span_warning("There's nothing else for you in \the [src]!"))
//You found an item!
else
produce_alpha_item()
to_chat(user,span_notice("You found something!"))
to_chat(user, span_notice("You found something!"))
searchedby += user.ckey
/obj/structure/trash_pile/attack_hand(mob/user)
//Human mob
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.visible_message("[user] searches through \the [src].",span_notice("You search through \the [src]."))
var/mob/living/carbon/human/human_user = user
human_user.visible_message("[user] searches through \the [src].", span_notice("You search through \the [src]."))
//Do the searching
if(do_after(user,rand(4 SECONDS,6 SECONDS),target=src))
if(do_after(user, rand(4 SECONDS, 6 SECONDS), target = src))
if(src.loc) //Let's check if the pile still exists
do_search(user)
else
@@ -71,28 +71,28 @@
var/lootspawn = pick_weight(GLOB.maintenance_loot)
while(islist(lootspawn))
lootspawn = pick_weight(lootspawn)
var/obj/item/I = new lootspawn(get_turf(src))
return I
var/obj/item/hidden_item = new lootspawn(get_turf(src))
return hidden_item
/obj/structure/trash_pile/MouseDrop_T(atom/movable/O, mob/user)
if(user == O && iscarbon(O))
var/mob/living/L = O
if(L.mobility_flags & MOBILITY_MOVE)
/obj/structure/trash_pile/MouseDrop_T(atom/movable/dropped_atom, mob/user)
if(user == dropped_atom && iscarbon(dropped_atom))
var/mob/living/dropped_mob = dropped_atom
if(dropped_mob.mobility_flags & MOBILITY_MOVE)
dive_in_pile(user)
return
. = ..()
/obj/structure/trash_pile/proc/eject_mob(var/mob/living/M)
M.forceMove(src.loc)
to_chat(M,span_warning("You've been found!"))
playsound(M.loc, 'sound/machines/chime.ogg', 50, FALSE, -5)
M.do_alert_animation(M)
/obj/structure/trash_pile/proc/eject_mob(var/mob/living/hidden_mob)
hidden_mob.forceMove(src.loc)
to_chat(hidden_mob, span_warning("You've been found!"))
playsound(hidden_mob.loc, 'sound/machines/chime.ogg', 50, FALSE, -5)
hidden_mob.do_alert_animation(hidden_mob)
/obj/structure/trash_pile/proc/do_dive(mob/user)
if(contents.len)
for(var/mob/M in contents)
to_chat(user,span_warning("There's someone in the trash already!"))
eject_mob(M)
for(var/mob/hidden_mob in contents)
to_chat(user, span_warning("There's someone in the trash already!"))
eject_mob(hidden_mob)
return FALSE
return TRUE
@@ -106,33 +106,33 @@
if(do_mob(user, user, adjusted_dive_time))
if(src.loc) //Checking if structure has been destroyed
if(do_dive(user))
to_chat(user,span_notice("You hide in the trashpile."))
to_chat(user, span_notice("You hide in the trashpile."))
user.forceMove(src)
/obj/structure/trash_pile/proc/can_hide_item(obj/item/I)
/obj/structure/trash_pile/proc/can_hide_item(obj/item/hidden_item)
if(contents.len > 10)
return FALSE
return TRUE
/obj/structure/trash_pile/attackby(obj/item/I, mob/living/user, params)
/obj/structure/trash_pile/attackby(obj/item/hidden_item, mob/living/user, params)
if(!user.combat_mode)
if(can_hide_item(I))
to_chat(user,span_notice("You begin to stealthily hide [I] in the [src]."))
if(can_hide_item(hidden_item))
to_chat(user, span_notice("You begin to stealthily hide [hidden_item] in the [src]."))
if(do_mob(user, user, hide_item_time))
if(src.loc)
if(user.transferItemToLoc(I, src))
to_chat(user,span_notice("You hide [I] in the trash."))
if(user.transferItemToLoc(hidden_item, src))
to_chat(user, span_notice("You hide [hidden_item] in the trash."))
else
to_chat(user, span_warning("\The [I] is stuck to your hand, you cannot put it in the trash!"))
to_chat(user, span_warning("\The [hidden_item] is stuck to your hand, you cannot put it in the trash!"))
else
to_chat(user,span_warning("The [src] is way too full to fit [I]."))
to_chat(user, span_warning("The [src] is way too full to fit [hidden_item]."))
return
. = ..()
/obj/structure/trash_pile/Destroy()
for(var/atom/movable/AM in src)
AM.forceMove(src.loc)
for(var/atom/movable/pile_contents in src)
pile_contents.forceMove(src.loc)
return ..()
/obj/structure/trash_pile/container_resist_act(mob/user)
@@ -2,8 +2,8 @@ GLOBAL_VAR_INIT(dchat_allowed, TRUE)
/datum/admins/proc/toggledchat()
set category = "Server"
set desc="Toggle dis bitch"
set name="Toggle Dead Chat"
set desc = "Toggle dis bitch"
set name = "Toggle Dead Chat"
toggle_dchat()
log_admin("[key_name(usr)] toggled dead chat.")
message_admins("[key_name_admin(usr)] toggled dead chat.")
@@ -1,9 +1,9 @@
/proc/KillEveryoneOnZLevel(level)
if(!level)
return
for(var/mob/living/M in GLOB.mob_living_list)
if(M.loc.z == level)
M.flash_act(100, TRUE, TRUE)
to_chat(M, span_userdanger("You feel your skin prickle with heat as you're ripped atom from atom in the raging inferno of a nuclear blast. Your last thought is 'Oh fuck.'"))
M.emote("scream")
M.gib()
for(var/mob/living/iterated_mob in GLOB.mob_living_list)
if(iterated_mob.loc.z == level)
iterated_mob.flash_act(100, TRUE, TRUE)
to_chat(iterated_mob, span_userdanger("You feel your skin prickle with heat as you're ripped atom from atom in the raging inferno of a nuclear blast. Your last thought is 'Oh fuck.'"))
iterated_mob.emote("scream")
iterated_mob.gib()
@@ -184,13 +184,13 @@
playsound(src, 'modular_skyrat/master_files/sound/blackmesa/headcrab/headbite.ogg', 100)
human_to_dunk.death(FALSE)
/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/proc/zombify(mob/living/carbon/human/H)
/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/proc/zombify(mob/living/carbon/human/zombified_human)
if(is_zombie)
return FALSE
is_zombie = TRUE
if(H.wear_suit)
var/obj/item/clothing/suit/armor/A = H.wear_suit
maxHealth += A.armor.melee //That zombie's got armor, I want armor!
if(zombified_human.wear_suit)
var/obj/item/clothing/suit/armor/zombie_suit = zombified_human.wear_suit
maxHealth += zombie_suit.armor.melee //That zombie's got armor, I want armor!
maxHealth += 40
health = maxHealth
name = "zombie"
@@ -202,12 +202,12 @@
environment_smash = ENVIRONMENT_SMASH_STRUCTURES
movement_type = GROUND
icon_state = ""
H.hairstyle = null
H.update_hair()
H.forceMove(src)
oldguy = H
zombified_human.hairstyle = null
zombified_human.update_hair()
zombified_human.forceMove(src)
oldguy = zombified_human
update_appearance()
visible_message(span_warning("The corpse of [H.name] suddenly rises!"))
visible_message(span_warning("The corpse of [zombified_human.name] suddenly rises!"))
charger = FALSE
return TRUE
@@ -534,9 +534,9 @@
id = /obj/item/card/id
id_trim = /datum/id_trim/science_team
/datum/outfit/science_team/post_equip(mob/living/carbon/human/H, visualsOnly)
/datum/outfit/science_team/post_equip(mob/living/carbon/human/equipped_human, visualsOnly)
. = ..()
H.faction |= FACTION_BLACKMESA
equipped_human.faction |= FACTION_BLACKMESA
/datum/id_trim/science_team
assignment = "Science Team Scientist"
@@ -564,9 +564,9 @@
id = /obj/item/card/id
id_trim = /datum/id_trim/security_guard
/datum/outfit/security_guard/post_equip(mob/living/carbon/human/H, visualsOnly)
/datum/outfit/security_guard/post_equip(mob/living/carbon/human/equipped_human, visualsOnly)
. = ..()
H.faction |= FACTION_BLACKMESA
equipped_human.faction |= FACTION_BLACKMESA
/datum/id_trim/security_guard
assignment = "Security Guard"
@@ -599,14 +599,14 @@
id = /obj/item/card/id
id_trim = /datum/id_trim/hecu
/datum/outfit/hecu/post_equip(mob/living/carbon/human/H, visualsOnly)
/datum/outfit/hecu/post_equip(mob/living/carbon/human/equipped_human, visualsOnly)
. = ..()
H.faction |= FACTION_XEN
H.hairstyle = "Crewcut"
H.hair_color = COLOR_ALMOST_BLACK
H.facial_hairstyle = "Shaved"
H.facial_hair_color = COLOR_ALMOST_BLACK
H.update_hair()
equipped_human.faction |= FACTION_XEN
equipped_human.hairstyle = "Crewcut"
equipped_human.hair_color = COLOR_ALMOST_BLACK
equipped_human.facial_hairstyle = "Shaved"
equipped_human.facial_hair_color = COLOR_ALMOST_BLACK
equipped_human.update_hair()
/datum/id_trim/hecu
assignment = "HECU Soldier"
@@ -1,19 +1,19 @@
/datum/buildmode_mode/offercontrol
key = "offercontrol"
/datum/buildmode_mode/offercontrol/show_help(client/c)
to_chat(c, span_notice("***********************************************************\n\
/datum/buildmode_mode/offercontrol/show_help(client/target_client)
to_chat(target_client, span_notice("***********************************************************\n\
Left Mouse Button on mob/living = Offer control to ghosts.\n\
***********************************************************"))
/datum/buildmode_mode/offercontrol/handle_click(client/c, params, object)
/datum/buildmode_mode/offercontrol/handle_click(client/target_client, params, object)
if(!ismob(object))
return
var/mob/living/mob_to_offer = object
if(mob_to_offer.key)
var/response = tgui_alert(c, "This mob already has a ckey attached, continue?", "Mob already posessed!", list("Continue", "Cancel"))
var/response = tgui_alert(target_client, "This mob already has a ckey attached, continue?", "Mob already posessed!", list("Continue", "Cancel"))
if(response != "Continue")
return
@@ -170,7 +170,7 @@
var/leverage = 0
if(current_aug)
leverage += current_aug.cost
if((quirk_points+leverage)>= target_aug.cost)
if((quirk_points + leverage)>= target_aug.cost)
return TRUE
else
return FALSE
@@ -6,8 +6,8 @@
var/list/to_insert = list()
if(!GLOB.all_languages.len)
for(var/L in subtypesof(/datum/language))
var/datum/language/language = L
for(var/iterated_language in subtypesof(/datum/language))
var/datum/language/language = iterated_language
if(!initial(language.key))
continue
@@ -19,7 +19,7 @@
for (var/language_name in GLOB.all_languages)
var/datum/language/language = GLOB.language_datum_instances[language_name]
var/icon/language_icon = icon(language.icon, icon_state=language.icon_state)
var/icon/language_icon = icon(language.icon, icon_state = language.icon_state)
to_insert[sanitize_css_class_name(language.name)] = language_icon
for (var/spritesheet_key in to_insert)
@@ -16,7 +16,7 @@
layer = "ADJ"
else
layer = "BEHIND"
final_icon = icon(sprite_accessory.icon,"m_[key]_[sprite_accessory.icon_state]_[layer]", direction)
final_icon = icon(sprite_accessory.icon, "m_[key]_[sprite_accessory.icon_state]_[layer]", direction)
else
final_icon = icon('icons/mob/human_parts_greyscale.dmi', "lizard_chest_m", direction)
@@ -8,9 +8,9 @@
savedslowdown = slowdown
/datum/action/chameleon_slowdown/Trigger()
var/obj/item/clothing/T = target
var/slow = T.slowdown
T.slowdown = savedslowdown
var/obj/item/clothing/target_clothing = target
var/slow = target_clothing.slowdown
target_clothing.slowdown = savedslowdown
savedslowdown = slow
owner.update_equipment_speed_mods()
@@ -25,35 +25,35 @@
/datum/action/item_action/chameleon/change/update_item(obj/item/picked_item)
. = ..()
if(istype(target, /obj/item/clothing/))
var/obj/item/clothing/T = target
var/obj/item/clothing/P = picked_item
T.mutant_variants = initial(P.mutant_variants)
T.worn_icon_digi = initial(P.worn_icon_digi)
T.worn_icon_taur_snake = initial(P.worn_icon_taur_snake)
T.worn_icon_taur_paw = initial(P.worn_icon_taur_paw)
T.worn_icon_taur_hoof = initial(P.worn_icon_taur_hoof)
T.worn_icon_muzzled = initial(P.worn_icon_muzzled)
T.flags_inv = initial(P.flags_inv)
T.visor_flags_cover = initial(P.visor_flags_cover)
T.dynamic_hair_suffix = initial(P.dynamic_hair_suffix)
T.dynamic_fhair_suffix = initial(P.dynamic_fhair_suffix)
T.slowdown = 0
// var/slow = initial(P.slowdown) /// DISABLED UNTIL YOU CAN MAKE THIS WORK WITH THE BROKEN CHAMELEON CLOTHES!!!
var/obj/item/clothing/target_clothing = target
var/obj/item/clothing/picked_clothing = picked_item
target_clothing.mutant_variants = initial(picked_clothing.mutant_variants)
target_clothing.worn_icon_digi = initial(picked_clothing.worn_icon_digi)
target_clothing.worn_icon_taur_snake = initial(picked_clothing.worn_icon_taur_snake)
target_clothing.worn_icon_taur_paw = initial(picked_clothing.worn_icon_taur_paw)
target_clothing.worn_icon_taur_hoof = initial(picked_clothing.worn_icon_taur_hoof)
target_clothing.worn_icon_muzzled = initial(picked_clothing.worn_icon_muzzled)
target_clothing.flags_inv = initial(picked_clothing.flags_inv)
target_clothing.visor_flags_cover = initial(picked_clothing.visor_flags_cover)
target_clothing.dynamic_hair_suffix = initial(picked_clothing.dynamic_hair_suffix)
target_clothing.dynamic_fhair_suffix = initial(picked_clothing.dynamic_fhair_suffix)
target_clothing.slowdown = 0
// var/slow = initial(picked_clothing.slowdown) /// DISABLED UNTIL YOU CAN MAKE THIS WORK WITH THE BROKEN CHAMELEON CLOTHES!!!
// if(slow)
// slowtoggle = new(T, slow)
// slowtoggle = new(target_clothing, slow)
// slowtoggle.Grant(owner)
// slowtoggle.target = T
// slowtoggle.target = target_clothing
// else if(slowtoggle)
// qdel(slowtoggle)
/datum/action/item_action/chameleon/change/Grant(mob/M)
/datum/action/item_action/chameleon/change/Grant(mob/target_mob)
. = ..()
if(M && (M == owner))
if(target_mob && (target_mob == owner))
if(slowtoggle)
slowtoggle?.Grant(M)
slowtoggle?.Grant(target_mob)
/datum/action/item_action/chameleon/change/Remove(mob/M)
/datum/action/item_action/chameleon/change/Remove(mob/target_mob)
. = ..()
if(M && (M == owner))
if(target_mob && (target_mob == owner))
if(slowtoggle)
slowtoggle?.Remove(M)
slowtoggle?.Remove(target_mob)
@@ -4,14 +4,14 @@
icon_state = "monkeymind"
inhand_icon_state = "monkeymind"
strip_delay = 100
armor = list(MELEE = 5, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 25, BIO = 0, FIRE = 50, ACID = 50, WOUND = 0)
armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 0, FIRE = 50, ACID = 50, WOUND = 0)
var/mob/living/carbon/human/magnification = null ///if the helmet is on a valid target (just works like a normal helmet if not (cargo please stop))
var/polling = FALSE///if the helmet is currently polling for targets (special code for removal)
var/light_colors = 1 ///which icon state color this is (red, blue, yellow)
/obj/item/clothing/head/helmet/monkey_sentience/Initialize()
. = ..()
light_colors = rand(1,3)
light_colors = rand(1, 3)
update_appearance()
/obj/item/clothing/head/helmet/monkey_sentience/examine(mob/user)
@@ -36,7 +36,7 @@
if(!ismonkey(user) || user.ckey)
var/mob/living/something = user
to_chat(something, span_boldnotice("You feel a stabbing pain in the back of your head for a moment."))
something.apply_damage(5,BRUTE,BODY_ZONE_HEAD,FALSE,FALSE,FALSE) //notably: no damage resist (it's in your helmet), no damage spread (it's in your helmet)
something.apply_damage(5, BRUTE, BODY_ZONE_HEAD, FALSE, FALSE, FALSE) //notably: no damage resist (it's in your helmet), no damage spread (it's in your helmet)
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
return
if(!(GLOB.ghost_role_flags & GHOSTROLE_STATION_SENTIENCE))
@@ -89,11 +89,11 @@
to_chat(magnification, span_userdanger("You feel your flicker of sentience ripped away from you, as everything becomes dim..."))
magnification.ghostize(FALSE)
if(prob(10))
switch(rand(1,4))
switch(rand(1, 4))
if(1) //blood rage
magnification.ai_controller.blackboard[BB_MONKEY_AGGRESSIVE] = TRUE
if(2) //brain death
magnification.apply_damage(500,BRAIN,BODY_ZONE_HEAD,FALSE,FALSE,FALSE)
magnification.apply_damage(500, BRAIN, BODY_ZONE_HEAD, FALSE, FALSE, FALSE)
if(3) //primal gene (gorilla)
magnification.gorillize()
if(4) //genetic mass susceptibility (gib)
@@ -22,10 +22,10 @@
skillchips = list(/obj/item/skillchip/disk_verifier)
backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\
/obj/item/storage/firstaid/regular=1,\
/obj/item/flashlight=1,\
/obj/item/storage/box/handcuffs=1)
backpack_contents = list(/obj/item/storage/box/survival/engineer = 1,\
/obj/item/storage/firstaid/regular = 1,\
/obj/item/flashlight = 1,\
/obj/item/storage/box/handcuffs = 1)
/datum/outfit/centcom/asset_protection/post_equip(mob/living/carbon/human/person, visualsOnly = FALSE)
if(visualsOnly)
@@ -22,7 +22,7 @@
if(turfs.len) //Pick a turf to spawn at if we can
var/turf/spawning_turf = pick(turfs)
new /datum/spacevine_controller(spawning_turf, list(pick(subtypesof(/datum/spacevine_mutation))), rand(10,100), rand(1,6), src) //spawn a controller at turf with randomized stats and a single random mutation
new /datum/spacevine_controller(spawning_turf, list(pick(subtypesof(/datum/spacevine_mutation))), rand(10, 100), rand(1, 6), src) //spawn a controller at turf with randomized stats and a single random mutation
new /mob/living/simple_animal/hostile/venus_human_trap(spawning_turf)
new /mob/living/simple_animal/hostile/venus_human_trap(spawning_turf)
@@ -55,13 +55,13 @@
/datum/spacevine_mutation/proc/on_death(obj/structure/spacevine/vine_object)
return
/datum/spacevine_mutation/proc/on_hit(obj/structure/spacevine/vine_object, mob/hitter, obj/item/I, expected_damage)
/datum/spacevine_mutation/proc/on_hit(obj/structure/spacevine/vine_object, mob/hitter, obj/item/item_used, expected_damage)
. = expected_damage
/datum/spacevine_mutation/proc/on_cross(obj/structure/spacevine/vine_object, mob/crosser)
return
/datum/spacevine_mutation/proc/on_chem(obj/structure/spacevine/vine_object, datum/reagent/R)
/datum/spacevine_mutation/proc/on_chem(obj/structure/spacevine/vine_object, datum/reagent/reagent_applied)
return
/datum/spacevine_mutation/proc/on_eat(obj/structure/spacevine/vine_object, mob/living/eater)
@@ -76,7 +76,7 @@
/datum/spacevine_mutation/proc/on_explosion(severity, target, obj/structure/spacevine/vine_object)
return
/datum/spacevine_mutation/aggressive_spread/proc/aggrospread_act(obj/structure/spacevine/S, mob/living/M)
/datum/spacevine_mutation/aggressive_spread/proc/aggrospread_act(obj/structure/spacevine/spreading_vine, mob/living/buckled_mob)
return
// Creates light
@@ -124,7 +124,7 @@
. = 1
QDEL_IN(vine_object, 5)
/datum/spacevine_mutation/explosive/on_death(obj/structure/spacevine/vine_object, mob/hitter, obj/item/I)
/datum/spacevine_mutation/explosive/on_death(obj/structure/spacevine/vine_object, mob/hitter, obj/item/hitting_item)
explosion(vine_object, light_impact_range = severity, adminlog = FALSE)
@@ -188,20 +188,20 @@
var/armor = hit_carbon.run_armor_check(limb, MELEE, null, null) //armor = the armor value of that randomly chosen bodypart. Nulls to not print a message, because it would still print on pierce.
var/datum/spacevine_mutation/thorns/has_thorns = locate() in attacking_vine.mutations //Searches for the thorns mutation in the "mutations"-list inside obj/structure/spacevine, and defines T if it finds it.
if(has_thorns && (prob(40))) //If we found the thorns mutation there is now a chance to get stung instead of lashed or smashed.
hit_carbon.apply_damage(50, BRUTE, def_zone = limb, wound_bonus = rand(-20,10), sharpness = SHARP_POINTY) //This one gets a bit lower damage because it ignores armor.
hit_carbon.apply_damage(50, BRUTE, def_zone = limb, wound_bonus = rand(-20, 10), sharpness = SHARP_POINTY) //This one gets a bit lower damage because it ignores armor.
hit_carbon.Stun(1 SECONDS) //Stopped in place for a moment.
playsound(hit_mob, 'sound/weapons/pierce.ogg', 50, TRUE, -1)
hit_mob.visible_message(span_danger("[hit_mob] is nailed by a sharp thorn!"), span_userdanger("You are nailed by a sharp thorn!"))
log_combat(attacking_vine, hit_mob, "aggressively pierced") //"Aggressively" for easy ctrl+F'ing in the attack logs.
else
if(prob(80))
hit_carbon.apply_damage(60, BRUTE, def_zone = limb, blocked = armor, wound_bonus = rand(-20,10), sharpness = SHARP_EDGED)
hit_carbon.apply_damage(60, BRUTE, def_zone = limb, blocked = armor, wound_bonus = rand(-20, 10), sharpness = SHARP_EDGED)
hit_carbon.Knockdown(2 SECONDS)
playsound(hit_mob, 'sound/weapons/whip.ogg', 50, TRUE, -1)
hit_mob.visible_message(span_danger("[hit_mob] is lacerated by an outburst of vines!"), span_userdanger("You are lacerated by an outburst of vines!"))
log_combat(attacking_vine, hit_mob, "aggressively lacerated")
else
hit_carbon.apply_damage(60, BRUTE, def_zone = limb, blocked = armor, wound_bonus = rand(-20,10), sharpness = NONE)
hit_carbon.apply_damage(60, BRUTE, def_zone = limb, blocked = armor, wound_bonus = rand(-20, 10), sharpness = NONE)
hit_carbon.Knockdown(3 SECONDS)
var/atom/throw_target = get_edge_target_turf(hit_carbon, get_dir(attacking_vine, get_step_away(hit_carbon, attacking_vine)))
hit_carbon.throw_at(throw_target, 3, 6)
@@ -306,7 +306,7 @@
living_crosser.adjustBruteLoss(5)
to_chat(living_crosser, span_alert("You cut yourself on the thorny vines."))
/datum/spacevine_mutation/thorns/on_hit(obj/structure/spacevine/vine_object, mob/living/hitter, obj/item/I, expected_damage)
/datum/spacevine_mutation/thorns/on_hit(obj/structure/spacevine/vine_object, mob/living/hitter, obj/item/hitting_item, expected_damage)
if(prob(severity) && istype(hitter) && !isvineimmune(hitter))
var/mob/living/attacking_mob = hitter
attacking_mob.adjustBruteLoss(5)
@@ -340,7 +340,7 @@
severity = 10
/datum/spacevine_mutation/flowering/on_grow(obj/structure/spacevine/vine_object)
if(vine_object.energy == 2 && prob(severity) && !locate(/obj/structure/alien/resin/flower_bud) in range(5,vine_object))
if(vine_object.energy == 2 && prob(severity) && !locate(/obj/structure/alien/resin/flower_bud) in range(5, vine_object))
new/obj/structure/alien/resin/flower_bud(get_turf(vine_object))
/datum/spacevine_mutation/flowering/on_cross(obj/structure/spacevine/vine_object, mob/living/crosser)
@@ -371,7 +371,7 @@
severity = 2
quality = NEGATIVE
/datum/spacevine_mutation/meleereflecting/on_hit(obj/structure/spacevine/vine_object, mob/hitter, obj/item/I, expected_damage)
/datum/spacevine_mutation/meleereflecting/on_hit(obj/structure/spacevine/vine_object, mob/hitter, obj/item/hitting_item, expected_damage)
if(isliving(hitter))
var/mob/living/attacking_mob = hitter
if(isvineimmune(attacking_mob))
@@ -420,7 +420,7 @@
severity = 3
quality = NEGATIVE
/datum/spacevine_mutation/electrify/on_hit(obj/structure/spacevine/vine_object, mob/hitter, obj/item/I, expected_damage)
/datum/spacevine_mutation/electrify/on_hit(obj/structure/spacevine/vine_object, mob/hitter, obj/item/hitting_item, expected_damage)
if(isliving(hitter))
var/mob/living/living_hitter = hitter
if(isvineimmune(living_hitter))
@@ -612,7 +612,7 @@
mutations = list()
set_opacity(0)
if(has_buckled_mobs())
unbuckle_all_mobs(force=1)
unbuckle_all_mobs(force = 1)
return ..()
@@ -681,7 +681,7 @@
/obj/structure/spacevine/attack_paw(mob/living/user, list/modifiers)
for(var/datum/spacevine_mutation/vine_mutation in mutations)
vine_mutation.on_hit(src, user)
user_unbuckle_mob(user,user)
user_unbuckle_mob(user, user)
/obj/structure/spacevine/attack_alien(mob/living/user, list/modifiers)
eat(user)
@@ -828,7 +828,7 @@
/// Finds a target tile to spread to. If checks pass it will spread to it and also proc on_spread on target.
/obj/structure/spacevine/proc/spread()
var/direction = pick(GLOB.cardinals)
var/turf/stepturf = get_step(src,direction)
var/turf/stepturf = get_step(src, direction)
var/datum/spacevine_mutation/domesticated/domesticated = locate() in mutations
if(!domesticated)
for(var/obj/machinery/door/target_door in stepturf.contents)
@@ -856,7 +856,7 @@
return
for(var/datum/spacevine_mutation/vine_mutation in mutations)
vine_mutation.on_spread(src, target_turf) //Only do the on_spread proc if it actually spreads.
target_turf = get_step(src,target_dir) //in case turf changes, to make sure no runtimes happen
target_turf = get_step(src, target_dir) //in case turf changes, to make sure no runtimes happen
master.spawn_spacevine_piece(target_turf, src)
/obj/structure/spacevine/ex_act(severity, target)
@@ -10,9 +10,9 @@
mannequin.underwear_visibility = NONE
if(preview_job) //SKYRAT EDIT CHANGE
// Silicons only need a very basic preview since there is no customization for them.
if (istype(preview_job,/datum/job/ai))
if (istype(preview_job, /datum/job/ai))
return image('icons/mob/ai.dmi', icon_state = resolve_ai_icon(read_preference(/datum/preference/choiced/ai_core_display)), dir = SOUTH)
if (istype(preview_job,/datum/job/cyborg))
if (istype(preview_job, /datum/job/cyborg))
return image('icons/mob/robots.dmi', icon_state = "robot", dir = SOUTH)
mannequin.job = preview_job.title
mannequin.equip_outfit_and_loadout(preview_job.outfit, src, TRUE)
@@ -1,4 +1,4 @@
/mob/living/carbon/human/ZImpactDamage(turf/T, levels)
/mob/living/carbon/human/ZImpactDamage(turf/target_turf, levels)
if(stat != CONSCIOUS) // you're not The One
return ..()
// Cat-people always land on their feet
@@ -10,13 +10,13 @@
Stun(0.5 SECONDS) // You can't move and you can't use items
//Nailed it!
visible_message(span_notice("[src] lands elegantly on [p_their()] feet!"),
span_warning("You fall [levels > 1 ? "[levels] levels" : "one level"] into [T], perfecting the landing!"))
span_warning("You fall [levels > 1 ? "[levels] levels" : "one level"] into [target_turf], perfecting the landing!"))
return
var/obj/item/organ/external/wings/gliders = getorgan(/obj/item/organ/external/wings)
if((HAS_TRAIT(src, TRAIT_FREERUNNING) && levels < 2) || gliders?.can_soften_fall()) // the power of parkour or wings allows falling short distances unscathed
visible_message(span_danger("[src] makes a hard landing on [T] but remains unharmed from the fall."), \
span_userdanger("You brace for the fall. You make a hard landing on [T] but remain unharmed."))
visible_message(span_danger("[src] makes a hard landing on [target_turf] but remains unharmed from the fall."), \
span_userdanger("You brace for the fall. You make a hard landing on [target_turf] but remain unharmed."))
Knockdown(levels * 40)
return
return ..()
@@ -7,13 +7,13 @@
mouse_opacity = 0
/mob/living/proc/flick_emote_popup_on_mob(state, time)
var/obj/effect/overlay/emote_popup/I = new
I.icon_state = state
vis_contents += I
animate(I, alpha = 255, time = 5, easing = BOUNCE_EASING, pixel_y = 10)
addtimer(CALLBACK(src, .proc/remove_emote_popup_on_mob, I), time)
var/obj/effect/overlay/emote_popup/emote_overlay = new
emote_overlay.icon_state = state
vis_contents += emote_overlay
animate(emote_overlay, alpha = 255, time = 5, easing = BOUNCE_EASING, pixel_y = 10)
addtimer(CALLBACK(src, .proc/remove_emote_popup_on_mob, emote_overlay), time)
/mob/living/proc/remove_emote_popup_on_mob(obj/effect/overlay/emote_popup/I)
vis_contents -= I
qdel(I)
/mob/living/proc/remove_emote_popup_on_mob(obj/effect/overlay/emote_popup/emote_overlay)
vis_contents -= emote_overlay
qdel(emote_overlay)
return
@@ -71,8 +71,8 @@
EN.blackboard[BB_DOG_HARASS_TARGET] = WEAKREF(target)
EN.current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/harass)
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/on_attackby(datum/source, obj/item/I, mob/living/target)
if(I.force && I.damtype != STAMINA && health > 0)
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/on_attackby(datum/source, obj/item/used_item, mob/living/target)
if(used_item.force && used_item.damtype != STAMINA && health > 0)
shootAt(target)
var/datum/ai_controller/dog/EN = ai_controller
if(health <= 30 && !(WEAKREF(target) in EN.blackboard[BB_DOG_FRIENDS]))
@@ -82,9 +82,9 @@
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/on_hitby(datum/source, atom/movable/AM)
if(istype(AM, /obj/item))
var/obj/item/I = AM
var/mob/thrown_by = I.thrownby?.resolve()
if(I.throwforce >= 5 && ishuman(thrown_by) && health > 0)
var/obj/item/used_item = AM
var/mob/thrown_by = used_item.thrownby?.resolve()
if(used_item.throwforce >= 5 && ishuman(thrown_by) && health > 0)
var/mob/living/carbon/human/target = thrown_by
var/datum/ai_controller/dog/EN = ai_controller
if(!(WEAKREF(target) in EN.blackboard[BB_DOG_FRIENDS]))
@@ -111,32 +111,32 @@
return BULLET_ACT_HIT
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/shootAt(atom/movable/target)
var/turf/T = get_turf(src)
var/turf/U = get_turf(target)
if(!T || !U)
var/turf/source_turf = get_turf(src)
var/turf/target_turf = get_turf(target)
if(!source_turf || !target_turf)
return
var/obj/projectile/beam/laser = new /obj/projectile/beam(loc)
laser.icon = 'icons/effects/genetics.dmi'
laser.icon_state = "eyelasers"
playsound(loc, 'sound/weapons/taser.ogg', 75, 1)
laser.preparePixelProjectile(target, T)
laser.preparePixelProjectile(target, source_turf)
laser.firer = src
laser.fired_from = src
laser.fire()
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/shootToyAt(atom/movable/target)
var/turf/T = get_turf(src)
var/turf/U = get_turf(target)
if(!T || !U)
var/turf/source_turf = get_turf(src)
var/turf/target_turf = get_turf(target)
if(!source_turf || !target_turf)
return
var/obj/projectile/bullet/reusable/foam_dart/FD = new /obj/projectile/bullet/reusable/foam_dart(loc)
FD.icon = 'icons/obj/guns/toy.dmi'
FD.icon_state = "foamdart_proj"
var/obj/projectile/bullet/reusable/foam_dart/fired_dart = new /obj/projectile/bullet/reusable/foam_dart(loc)
fired_dart.icon = 'icons/obj/guns/toy.dmi'
fired_dart.icon_state = "foamdart_proj"
playsound(loc, 'sound/items/syringeproj.ogg', 75, 1)
FD.preparePixelProjectile(target, T)
FD.firer = src
FD.fired_from = src
FD.fire()
fired_dart.preparePixelProjectile(target, source_turf)
fired_dart.firer = src
fired_dart.fired_from = src
fired_dart.fire()
/mob/living/simple_animal/pet/dog/corgi/borgi/Life(seconds, times_fired)
..()
@@ -7,7 +7,7 @@
icon_dead = "poppypossum_dead"
maxHealth = 30
health = 30
speak = list("Hiss!","HISS!","Hissss?")
speak = list("Hiss!", "HISS!", "Hissss?")
speak_emote = list("hisses")
emote_hear = list("hisses.")
emote_see = list("runs in a circle.", "shakes.")
@@ -80,7 +80,7 @@
loot = list(/obj/effect/gibspawner/human)
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 7.5
faction = list("hostile","cultist")
faction = list("hostile", "cultist")
status_flags = CANPUSH
del_on_death = 1
rapid_melee = 2
@@ -197,7 +197,7 @@
turns_per_move = 5
mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
sentience_type = SENTIENCE_HUMANOID
faction = list("hostile","cultist")
faction = list("hostile", "cultist")
footstep_type = FOOTSTEP_MOB_SHOE
weather_immunities = list(TRAIT_LAVA_IMMUNE, TRAIT_ASHSTORM_IMMUNE)
minbodytemp = 0
@@ -591,7 +591,7 @@
atmos_requirements = list("min_oxy" = 10, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxbodytemp = 1500
faction = list("hostile","vines","plants")
faction = list("hostile", "vines", "plants")
pressure_resistance = 200
gold_core_spawnable = HOSTILE_SPAWN
@@ -23,22 +23,13 @@
/mob/living/simple_animal/hostile/zombie/proc/setup_visuals()
var/picked_job = pick(possible_jobs)
var/datum/job/J = SSjob.GetJob(picked_job)
var/datum/outfit/O
if(J.outfit)
O = new J.outfit
var/datum/job/zombie_job = SSjob.GetJob(picked_job)
var/datum/outfit/zombie_outfit
if(zombie_job.outfit)
zombie_outfit = new zombie_job.outfit
//They have claws now.
O.r_hand = null
O.l_hand = null
/*
var/icon/P = get_flat_human_icon_skyrat("zombie_[picked_job]", J, /datum/species/zombie/infectious, SPECIES_ZOMBIE_HALLOWEEN, outfit_override = O)
icon = P
if(!no_corpse)
corpse = new(src)
corpse.outfit = O
corpse.mob_species = /datum/species/zombie
corpse.mob_name = name
*/
zombie_outfit.r_hand = null
zombie_outfit.l_hand = null
/mob/living/simple_animal/hostile/zombie/cheesezombie
name = "Cheese Zombie"
@@ -133,11 +133,11 @@
underbarrel.afterattack(target, user, flag, params)
return SECONDARY_ATTACK_CONTINUE_CHAIN
/obj/item/gun/ballistic/automatic/m90/attackby(obj/item/A, mob/user, params)
if(istype(A, /obj/item/ammo_casing))
if(istype(A, underbarrel.magazine.ammo_type))
/obj/item/gun/ballistic/automatic/m90/attackby(obj/item/attacking_item, mob/user, params)
if(istype(attacking_item, /obj/item/ammo_casing))
if(istype(attacking_item, underbarrel.magazine.ammo_type))
underbarrel.attack_self(user)
underbarrel.attackby(A, user, params)
underbarrel.attackby(attacking_item, user, params)
else
..()
@@ -250,8 +250,8 @@
return
..()
/obj/item/gun/ballistic/automatic/l6_saw/attackby(obj/item/A, mob/user, params)
if(!cover_open && istype(A, mag_type))
/obj/item/gun/ballistic/automatic/l6_saw/attackby(obj/item/attacking_item, mob/user, params)
if(!cover_open && istype(attacking_item, mag_type))
to_chat(user, span_warning("[src]'s dust cover prevents a magazine from being fit."))
return
..()
@@ -11,7 +11,7 @@
worn_icon_state = "gun"
flags_1 = CONDUCT_1
slot_flags = ITEM_SLOT_BELT
custom_materials = list(/datum/material/iron=2000)
custom_materials = list(/datum/material/iron = 2000)
w_class = WEIGHT_CLASS_NORMAL
throwforce = 5
throw_speed = 3
@@ -158,17 +158,17 @@
QDEL_NULL(firemode_action)
. = ..()
/obj/item/gun/handle_atom_del(atom/A)
if(A == pin)
/obj/item/gun/handle_atom_del(atom/gun_atom)
if(gun_atom == pin)
pin = null
if(A == chambered)
if(gun_atom == chambered)
chambered = null
update_appearance()
if(A == bayonet)
if(gun_atom == bayonet)
clear_bayonet()
if(A == gun_light)
if(gun_atom == gun_light)
clear_gunlight()
if(A == suppressed)
if(gun_atom == suppressed)
clear_suppressor()
. = ..()
@@ -292,15 +292,15 @@
/obj/item/gun/emp_act(severity)
. = ..()
if(!(. & EMP_PROTECT_CONTENTS))
for(var/obj/O in contents)
O.emp_act(severity)
for(var/obj/iterated_object in contents)
iterated_object.emp_act(severity)
/obj/item/gun/attack_secondary(mob/living/victim, mob/living/user, params)
if(user.GetComponent(/datum/component/gunpoint))
to_chat(user, span_warning("You are already holding someone up!"))
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
if(user == victim)
to_chat(user,span_warning("You can't hold yourself up!"))
to_chat(user, span_warning("You can't hold yourself up!"))
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
user.AddComponent(/datum/component/gunpoint, victim, src)
@@ -323,15 +323,15 @@
if(target == user && user.zone_selected != BODY_ZONE_PRECISE_MOUTH) //so we can't shoot ourselves (unless mouth selected)
return
if(iscarbon(target))
var/mob/living/carbon/C = target
for(var/i in C.all_wounds)
var/datum/wound/W = i
if(W.try_treating(src, user))
var/mob/living/carbon/carbon_target = target
for(var/i in carbon_target.all_wounds)
var/datum/wound/target_wound = i
if(target_wound.try_treating(src, user))
return // another coward cured!
if(istype(user))//Check if the user can use the gun, if the user isn't alive(turrets) assume it can.
var/mob/living/L = user
if(!can_trigger_gun(L))
var/mob/living/living_user = user
if(!can_trigger_gun(living_user))
return
if(flag)
if(user.zone_selected == BODY_ZONE_PRECISE_MOUTH)
@@ -353,14 +353,14 @@
var/bonus_spread = 0
var/loop_counter = 0
if(ishuman(user) && user.combat_mode)
var/mob/living/carbon/human/H = user
for(var/obj/item/gun/G in H.held_items)
if(G == src || G.weapon_weight >= WEAPON_MEDIUM)
var/mob/living/carbon/human/human_user = user
for(var/obj/item/gun/held_gun in human_user.held_items)
if(held_gun == src || held_gun.weapon_weight >= WEAPON_MEDIUM)
continue
else if(G.can_trigger_gun(user))
else if(held_gun.can_trigger_gun(user))
bonus_spread += dual_wield_spread
loop_counter++
addtimer(CALLBACK(G, /obj/item/gun.proc/process_fire, target, user, TRUE, params, null, bonus_spread), loop_counter)
addtimer(CALLBACK(held_gun, /obj/item/gun.proc/process_fire, target, user, TRUE, params, null, bonus_spread), loop_counter)
return process_fire(target, user, TRUE, params, null, bonus_spread)
@@ -416,7 +416,7 @@
/obj/item/gun/proc/recharge_newshot()
return
/obj/item/gun/proc/process_burst(mob/living/user, atom/target, message = TRUE, params=null, zone_override = "", sprd = 0, randomized_gun_spread = 0, randomized_bonus_spread = 0, rand_spr = 0, iteration = 0)
/obj/item/gun/proc/process_burst(mob/living/user, atom/target, message = TRUE, params = null, zone_override = "", sprd = 0, randomized_gun_spread = 0, randomized_bonus_spread = 0, rand_spr = 0, iteration = 0)
if(!user || !firing_burst)
firing_burst = FALSE
return FALSE
@@ -433,8 +433,8 @@
sprd = round((rand(0, 1) - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread))
else //Smart spread
sprd = round((((rand_spr/burst_size) * iteration) - (0.5 + (rand_spr * 0.25))) * (randomized_gun_spread + randomized_bonus_spread))
before_firing(target,user)
if(!chambered.fire_casing(target, user, params, ,suppressed, zone_override, sprd, src))
before_firing(target, user)
if(!chambered.fire_casing(target, user, params, , suppressed, zone_override, sprd, src))
shoot_with_empty_chamber(user)
firing_burst = FALSE
return FALSE
@@ -475,7 +475,7 @@
base_bonus_spread += 10
if(spread)
randomized_gun_spread = rand(0,spread)
randomized_gun_spread = rand(0, spread)
var/randomized_bonus_spread = rand(base_bonus_spread, bonus_spread)
if(burst_size > 1)
@@ -489,7 +489,7 @@
to_chat(user, span_warning("[src] is lethally chambered! You don't want to risk harming anyone..."))
return
sprd = round((rand(0, 1) - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread))
before_firing(target,user)
before_firing(target, user)
if(!chambered.fire_casing(target, user, params, , suppressed, zone_override, sprd, src))
shoot_with_empty_chamber(user)
return
@@ -517,52 +517,52 @@
/obj/item/gun/proc/reset_semicd()
semicd = FALSE
/obj/item/gun/attack(mob/M, mob/living/user)
/obj/item/gun/attack(mob/target, mob/living/user)
if(user.combat_mode) //Flogging
if(bayonet)
M.attackby(bayonet, user)
target.attackby(bayonet, user)
return
else
return ..()
return
/obj/item/gun/attack_atom(obj/O, mob/living/user, params)
/obj/item/gun/attack_atom(obj/target, mob/living/user, params)
if(user.combat_mode)
if(bayonet)
O.attackby(bayonet, user)
target.attackby(bayonet, user)
return
return ..()
/obj/item/gun/attackby(obj/item/I, mob/living/user, params)
/obj/item/gun/attackby(obj/item/attacking_item, mob/living/user, params)
if(user.combat_mode)
return ..()
else if(istype(I, /obj/item/flashlight/seclite))
else if(istype(attacking_item, /obj/item/flashlight/seclite))
if(!can_flashlight)
return ..()
var/obj/item/flashlight/seclite/S = I
var/obj/item/flashlight/seclite/attaching_seclite = attacking_item
if(!gun_light)
if(!user.transferItemToLoc(I, src))
if(!user.transferItemToLoc(attacking_item, src))
return
to_chat(user, span_notice("You click [S] into place on [src]."))
set_gun_light(S)
to_chat(user, span_notice("You click [attaching_seclite] into place on [src]."))
set_gun_light(attaching_seclite)
update_gunlight()
alight = new(src)
if(loc == user)
alight.Grant(user)
else if(istype(I, /obj/item/knife))
var/obj/item/knife/K = I
if(!can_bayonet || !K.bayonet || bayonet) //ensure the gun has an attachment point available, and that the knife is compatible with it.
else if(istype(attacking_item, /obj/item/knife))
var/obj/item/knife/attaching_knife = attacking_item
if(!can_bayonet || !attaching_knife.bayonet || bayonet) //ensure the gun has an attachment point available, and that the knife is compatible with it.
return ..()
if(!user.transferItemToLoc(I, src))
if(!user.transferItemToLoc(attacking_item, src))
return
to_chat(user, span_notice("You attach [K] to [src]'s bayonet lug."))
bayonet = K
to_chat(user, span_notice("You attach [attaching_knife] to [src]'s bayonet lug."))
bayonet = attaching_knife
update_appearance()
else
return ..()
/obj/item/gun/screwdriver_act(mob/living/user, obj/item/I)
/obj/item/gun/screwdriver_act(mob/living/user, obj/item/tool)
. = ..()
if(.)
return
@@ -573,56 +573,56 @@
var/obj/item/item_to_remove = input(user, "Select an attachment to remove", "Attachment Removal") as null|obj in sort_names(possible_items)
if(!item_to_remove || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
return remove_gun_attachment(user, I, item_to_remove)
return remove_gun_attachment(user, tool, item_to_remove)
else if(gun_light && can_flashlight) //if it has a gun_light and can_flashlight is false, the flashlight is permanently attached.
return remove_gun_attachment(user, I, gun_light, "unscrewed")
return remove_gun_attachment(user, tool, gun_light, "unscrewed")
else if(bayonet && can_bayonet) //if it has a bayonet, and the bayonet can be removed
return remove_gun_attachment(user, I, bayonet, "unfix")
return remove_gun_attachment(user, tool, bayonet, "unfix")
else if(pin && user.is_holding(src))
user.visible_message(span_warning("[user] attempts to remove [pin] from [src] with [I]."),
user.visible_message(span_warning("[user] attempts to remove [pin] from [src] with [tool]."),
span_notice("You attempt to remove [pin] from [src]. (It will take [DisplayTimeText(FIRING_PIN_REMOVAL_DELAY)].)"), null, 3)
if(I.use_tool(src, user, FIRING_PIN_REMOVAL_DELAY, volume = 50))
if(tool.use_tool(src, user, FIRING_PIN_REMOVAL_DELAY, volume = 50))
if(!pin) //check to see if the pin is still there, or we can spam messages by clicking multiple times during the tool delay
return
user.visible_message(span_notice("[pin] is pried out of [src] by [user], destroying the pin in the process."),
span_warning("You pry [pin] out with [I], destroying the pin in the process."), null, 3)
span_warning("You pry [pin] out with [tool], destroying the pin in the process."), null, 3)
QDEL_NULL(pin)
return TRUE
/obj/item/gun/welder_act(mob/living/user, obj/item/I)
/obj/item/gun/welder_act(mob/living/user, obj/item/tool)
. = ..()
if(.)
return
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if(pin && user.is_holding(src))
user.visible_message(span_warning("[user] attempts to remove [pin] from [src] with [I]."),
user.visible_message(span_warning("[user] attempts to remove [pin] from [src] with [tool]."),
span_notice("You attempt to remove [pin] from [src]. (It will take [DisplayTimeText(FIRING_PIN_REMOVAL_DELAY)].)"), null, 3)
if(I.use_tool(src, user, FIRING_PIN_REMOVAL_DELAY, 5, volume = 50))
if(tool.use_tool(src, user, FIRING_PIN_REMOVAL_DELAY, 5, volume = 50))
if(!pin) //check to see if the pin is still there, or we can spam messages by clicking multiple times during the tool delay
return
user.visible_message(span_notice("[pin] is spliced out of [src] by [user], melting part of the pin in the process."),
span_warning("You splice [pin] out of [src] with [I], melting part of the pin in the process."), null, 3)
span_warning("You splice [pin] out of [src] with [tool], melting part of the pin in the process."), null, 3)
QDEL_NULL(pin)
return TRUE
/obj/item/gun/wirecutter_act(mob/living/user, obj/item/I)
/obj/item/gun/wirecutter_act(mob/living/user, obj/item/tool)
. = ..()
if(.)
return
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if(pin && user.is_holding(src))
user.visible_message(span_warning("[user] attempts to remove [pin] from [src] with [I]."),
user.visible_message(span_warning("[user] attempts to remove [pin] from [src] with [tool]."),
span_notice("You attempt to remove [pin] from [src]. (It will take [DisplayTimeText(FIRING_PIN_REMOVAL_DELAY)].)"), null, 3)
if(I.use_tool(src, user, FIRING_PIN_REMOVAL_DELAY, volume = 50))
if(tool.use_tool(src, user, FIRING_PIN_REMOVAL_DELAY, volume = 50))
if(!pin) //check to see if the pin is still there, or we can spam messages by clicking multiple times during the tool delay
return
user.visible_message(span_notice("[pin] is ripped out of [src] by [user], mangling the pin in the process."),
span_warning("You rip [pin] out of [src] with [I], mangling the pin in the process."), null, 3)
span_warning("You rip [pin] out of [src] with [tool], mangling the pin in the process."), null, 3)
QDEL_NULL(pin)
return TRUE
@@ -792,7 +792,7 @@
pin = new /obj/item/firing_pin
//Happens before the actual projectile creation
/obj/item/gun/proc/before_firing(atom/target,mob/user)
/obj/item/gun/proc/before_firing(atom/target, mob/user)
return
/////////////
@@ -819,8 +819,8 @@
if(!. && gun)
gun.zoom(owner, owner.dir, FALSE)
/datum/action/toggle_scope_zoom/Remove(mob/living/L)
gun.zoom(L, L.dir, FALSE)
/datum/action/toggle_scope_zoom/Remove(mob/living/user)
gun.zoom(user, user.dir, FALSE)
..()
/obj/item/gun/proc/rotate(atom/thing, old_dir, new_dir)
@@ -828,7 +828,7 @@
if(ismob(thing))
var/mob/lad = thing
lad.client.view_size.zoomOut(zoom_out_amt, zoom_amt, new_dir)
lad.client?.view_size.zoomOut(zoom_out_amt, zoom_amt, new_dir)
/obj/item/gun/proc/zoom(mob/living/user, direc, forced_zoom)
if(!user || !user.client)
@@ -841,10 +841,10 @@
if(zoomed)
RegisterSignal(user, COMSIG_ATOM_DIR_CHANGE, .proc/rotate)
user.client.view_size.zoomOut(zoom_out_amt, zoom_amt, direc)
user.client?.view_size.zoomOut(zoom_out_amt, zoom_amt, direc)
else
UnregisterSignal(user, COMSIG_ATOM_DIR_CHANGE)
user.client.view_size.zoomIn()
user.client?.view_size.zoomIn()
return zoomed
//Proc, so that gun accessories/scopes/etc. can easily add zooming.
@@ -7,22 +7,22 @@
severe_withdrawal_moodlet = /datum/mood_event/nicotine_withdrawal_severe
/datum/addiction/nicotine/proc/trigger_random_side_effect(mob/living/carbon/affected_carbon, delta_time, strength)
switch(rand(1,10))
switch(rand(1, 10))
if(1 to 3)
if(!HAS_TRAIT(affected_carbon, TRAIT_NOHUNGER))
affected_carbon.adjust_nutrition(-delta_time*10*strength)
affected_carbon.adjust_nutrition(-delta_time * 10 * strength)
if(3 to 5)
affected_carbon.emote("cough")
if(5 to 7)
to_chat(affected_carbon, span_warning("Your head hurts."))
affected_carbon.adjustStaminaLoss(4*strength)
affected_carbon.adjustStaminaLoss(4 * strength)
if(8)
if(strength>=2)
if(strength >= 2)
to_chat(affected_carbon, span_warning("You feel a little dizzy."))
affected_carbon.Dizzy(3*strength)
affected_carbon.Dizzy(3 * strength)
if(8 to 10)
to_chat(affected_carbon, span_warning("You feel tired."))
affected_carbon.adjustStaminaLoss(6*strength)
affected_carbon.adjustStaminaLoss(6 * strength)
/datum/addiction/nicotine/withdrawal_enters_stage_1(mob/living/carbon/affected_carbon, delta_time)
. = ..()
@@ -39,9 +39,9 @@
/datum/addiction/nicotine/withdrawal_stage_2_process(mob/living/carbon/affected_carbon, delta_time)
. = ..()
if(DT_PROB(3, delta_time))
trigger_random_side_effect(affected_carbon,delta_time,1)
trigger_random_side_effect(affected_carbon, delta_time, 1)
/datum/addiction/nicotine/withdrawal_stage_3_process(mob/living/carbon/affected_carbon, delta_time)
. = ..()
if(DT_PROB(5, delta_time))
trigger_random_side_effect(affected_carbon,delta_time,2)
trigger_random_side_effect(affected_carbon, delta_time, 2)
@@ -4,7 +4,7 @@
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 600)
build_path = /obj/item/storage/belt/medbandolier
category = list("initial","Organic Materials")
category = list("initial", "Organic Materials")
/datum/design/biomeat
name = "Meat Product"
@@ -12,4 +12,4 @@
build_type = BIOGENERATOR
materials = list(/datum/material/biomass= 125) //Monkey Cube is more efficient, but this is easier on the chef.
build_path = /obj/item/food/meat/slab/meatproduct
category = list("initial","Food")
category = list("initial", "Food")
@@ -9,39 +9,39 @@
var/sound_range = 20
//call the shuttle to destination S
/obj/docking_port/mobile/proc/request(obj/docking_port/stationary/S, forced = FALSE)
if(!check_dock(S) && !forced)
//call the shuttle to destination target_dock
/obj/docking_port/mobile/proc/request(obj/docking_port/stationary/target_dock, forced = FALSE)
if(!check_dock(target_dock) && !forced)
testing("check_dock failed on request for [src]")
return
if(forced)
admin_forced = TRUE
if(mode == SHUTTLE_IGNITING && destination == S)
if(mode == SHUTTLE_IGNITING && destination == target_dock)
return
switch(mode)
if(SHUTTLE_CALL)
if(!can_be_called_in_transit) //SKYRAT EDIT ADDITION
return
if(S == destination)
if(target_dock == destination)
if(timeLeft(1) < callTime * engine_coeff)
setTimer(callTime * engine_coeff)
else
destination = S
destination = target_dock
setTimer(callTime * engine_coeff)
if(SHUTTLE_RECALL)
if(!can_be_called_in_transit) //SKYRAT EDIT ADDITION
return
if(S == destination)
if(target_dock == destination)
setTimer(callTime * engine_coeff - timeLeft(1))
else
destination = S
destination = target_dock
setTimer(callTime * engine_coeff)
mode = SHUTTLE_CALL
if(SHUTTLE_IDLE, SHUTTLE_IGNITING)
destination = S
destination = target_dock
mode = SHUTTLE_IGNITING
bolt_all_doors()
play_engine_sound(src, TRUE) //SKYRAT EDIT ADDITION
@@ -50,8 +50,8 @@
/obj/docking_port/mobile/proc/bolt_all_doors() //Expensive procs :(
var/list/turfs = return_ordered_turfs(x, y, z, dir)
for(var/i in 1 to turfs.len)
var/turf/T = turfs[i]
for(var/obj/machinery/door/airlock/airlock_door in T)
var/turf/checked_turf = turfs[i]
for(var/obj/machinery/door/airlock/airlock_door in checked_turf)
if(airlock_door.external)
airlock_door.close(force_crush = TRUE)
airlock_door.bolt()
@@ -59,20 +59,20 @@
/obj/docking_port/mobile/proc/unbolt_all_doors()
var/list/turfs = return_ordered_turfs(x, y, z, dir)
for(var/i in 1 to turfs.len)
var/turf/T = turfs[i]
for(var/obj/machinery/door/airlock/airlock_door in T)
var/turf/checked_turf = turfs[i]
for(var/obj/machinery/door/airlock/airlock_door in checked_turf)
if(airlock_door.external)
airlock_door.unbolt()
/obj/docking_port/mobile/proc/play_engine_sound(atom/distant_source, takeoff)
if(distant_source)
for(var/mob/M in range(sound_range, distant_source))
if(M && M.client)
var/dist = get_dist(M.loc, distant_source.loc)
var/vol = clamp(50-((dist-7)*5), 10, 50) //Every tile decreases sound volume by 5
for(var/mob/hearing_mob in range(sound_range, distant_source))
if(hearing_mob?.client)
var/dist = get_dist(hearing_mob.loc, distant_source.loc)
var/vol = clamp(50 - ((dist - 7) * 5), 10, 50) //Every tile decreases sound volume by 5
if(takeoff)
if(M.client.prefs.toggles & SOUND_SHIP_AMBIENCE)
M.playsound_local(distant_source, takeoff_sound, vol)
if(hearing_mob.client?.prefs?.toggles & SOUND_SHIP_AMBIENCE)
hearing_mob.playsound_local(distant_source, takeoff_sound, vol)
else
if(M.client.prefs.toggles & SOUND_SHIP_AMBIENCE)
M.playsound_local(distant_source, landing_sound, vol)
if(hearing_mob.client?.prefs?.toggles & SOUND_SHIP_AMBIENCE)
hearing_mob.playsound_local(distant_source, landing_sound, vol)
@@ -318,7 +318,7 @@
/datum/uplink_item/loadout_skyrat
category = "Loadout"
surplus = 0
cant_discount = TRUE //I honestly don't think discount is worth it for those things, sorry.
cant_discount = TRUE // I honestly don't think discount is worth it for those things, sorry.
/datum/uplink_item/loadout_skyrat/recon
name = "Reconnaisance bundle"
@@ -9,11 +9,11 @@
. = ..()
if (QDELETED(src))
return
var/datum/component/riding/E = LoadComponent(/datum/component/riding)
var/datum/component/riding/riding_component = LoadComponent(/datum/component/riding)
if(snow_typecache[loc.type])
E.vehicle_move_delay = 1
riding_component.vehicle_move_delay = 1
else
E.vehicle_move_delay = 2
riding_component.vehicle_move_delay = 2
/obj/vehicle/ridden/atv/snowmobile/snowcurity
name = "security snowmobile"