mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-29 15:08:34 +01:00
Merge remote-tracking branch 'upstream/master' into kk-spacetraffic
This commit is contained in:
@@ -34,3 +34,5 @@
|
||||
/obj/effect/decal/cleanable/chemcoating/update_icon()
|
||||
..()
|
||||
color = reagents.get_color()
|
||||
cut_overlays()
|
||||
add_janitor_hud_overlay()
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/xeno/update_icon()
|
||||
color = "#FFFFFF"
|
||||
cut_overlays()
|
||||
add_janitor_hud_overlay()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/xeno/up
|
||||
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibup1","xgibup1","xgibup1")
|
||||
@@ -30,4 +32,4 @@
|
||||
random_icon_states = list("xgibmid1", "xgibmid2", "xgibmid3")
|
||||
|
||||
/obj/effect/decal/cleanable/blood/xtracks
|
||||
basecolor = "#05EE05"
|
||||
basecolor = "#05EE05"
|
||||
|
||||
@@ -70,6 +70,8 @@ var/global/list/image/splatter_cache=list()
|
||||
else
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
cut_overlays()
|
||||
add_janitor_hud_overlay()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp)
|
||||
if(perp.is_incorporeal())
|
||||
@@ -112,6 +114,10 @@ var/global/list/image/splatter_cache=list()
|
||||
var/obj/structure/bed/chair/wheelchair/W = perp.buckled
|
||||
W.bloodiness = 4
|
||||
|
||||
if(viruses)
|
||||
for(var/datum/disease/D in viruses)
|
||||
perp.ContractDisease(D)
|
||||
|
||||
amount--
|
||||
|
||||
/obj/effect/decal/cleanable/blood/proc/dry()
|
||||
@@ -124,6 +130,11 @@ var/global/list/image/splatter_cache=list()
|
||||
..()
|
||||
if (amount && istype(user))
|
||||
add_fingerprint(user)
|
||||
|
||||
if(viruses)
|
||||
for(var/datum/disease/D in viruses)
|
||||
user.ContractDisease(D)
|
||||
|
||||
if (user.gloves)
|
||||
return
|
||||
var/taken = rand(1,amount)
|
||||
@@ -183,7 +194,7 @@ var/global/list/image/splatter_cache=list()
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "gibbl5"
|
||||
icon_state = "gib1"
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6")
|
||||
var/fleshcolor = "#FFFFFF"
|
||||
|
||||
@@ -201,6 +212,7 @@ var/global/list/image/splatter_cache=list()
|
||||
icon = blood
|
||||
cut_overlays()
|
||||
add_overlay(giblets)
|
||||
add_janitor_hud_overlay()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/up
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6","gibup1","gibup1","gibup1")
|
||||
@@ -258,4 +270,14 @@ var/global/list/image/splatter_cache=list()
|
||||
viruses.Cut()
|
||||
return ..()
|
||||
|
||||
/obj/effect/decal/cleanable/mucus/Crossed(mob/living/carbon/human/perp)
|
||||
if(viruses)
|
||||
for(var/datum/disease/D in viruses)
|
||||
perp.ContractDisease(D)
|
||||
|
||||
/obj/effect/decal/cleanable/vomit/Crossed(mob/living/carbon/human/perp)
|
||||
if(viruses)
|
||||
for(var/datum/disease/D in viruses)
|
||||
perp.ContractDisease(D)
|
||||
|
||||
#undef DRYING_TIME
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/robot/update_icon()
|
||||
color = "#FFFFFF"
|
||||
cut_overlays()
|
||||
add_janitor_hud_overlay()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like
|
||||
return
|
||||
@@ -49,4 +51,4 @@
|
||||
|
||||
/obj/effect/decal/cleanable/blood/oil/streak
|
||||
random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5")
|
||||
amount = 2
|
||||
amount = 2
|
||||
|
||||
@@ -142,6 +142,7 @@ var/global/list/image/fluidtrack_cache=list()
|
||||
stack[stack_idx]=track
|
||||
add_overlay(I)
|
||||
updatedtracks=0 // Clear our memory of updated tracks.
|
||||
add_janitor_hud_overlay()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/tracks/footprints
|
||||
name = "wet footprints"
|
||||
|
||||
@@ -12,7 +12,6 @@ generic_filth = TRUE means when the decal is saved, it will be switched out for
|
||||
var/generic_filth = FALSE
|
||||
var/age = 0
|
||||
var/list/random_icon_states = list()
|
||||
var/obj/effect/decal/jan_hud/jan_icon = null
|
||||
|
||||
/obj/effect/decal/cleanable/Initialize(var/mapload, var/_age)
|
||||
if(!isnull(_age))
|
||||
@@ -21,12 +20,11 @@ generic_filth = TRUE means when the decal is saved, it will be switched out for
|
||||
src.icon_state = pick(src.random_icon_states)
|
||||
if(!mapload || !CONFIG_GET(flag/persistence_ignore_mapload))
|
||||
SSpersistence.track_value(src, /datum/persistent/filth)
|
||||
jan_icon = new/obj/effect/decal/jan_hud(src.loc)
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/effect/decal/cleanable/Destroy()
|
||||
SSpersistence.forget_value(src, /datum/persistent/filth)
|
||||
QDEL_NULL(jan_icon)
|
||||
. = ..()
|
||||
|
||||
/obj/effect/decal/cleanable/clean_blood(var/ignore = 0)
|
||||
@@ -40,13 +38,25 @@ generic_filth = TRUE means when the decal is saved, it will be switched out for
|
||||
src.icon_state = pick(src.random_icon_states)
|
||||
..()
|
||||
|
||||
/obj/effect/decal/jan_hud
|
||||
plane = PLANE_JANHUD
|
||||
layer = BELOW_MOB_LAYER
|
||||
vis_flags = VIS_HIDE
|
||||
persist_storable = FALSE
|
||||
icon = 'icons/mob/hud.dmi'
|
||||
mouse_opacity = 0
|
||||
|
||||
/obj/effect/decal/jan_hud/Initialize()
|
||||
src.icon_state = "janhud[rand(1,9)]"
|
||||
/obj/effect/decal/cleanable/update_icon()
|
||||
// Overrides should not inheret from this, and instead replace it entirely to match this in some form.
|
||||
// add_janitor_hud_overlay() does not pre-cut overlays, so cut_overlays() must be called first.
|
||||
// This is so it may be used with update_icon() overrides that use overlays, while adding the janitor overlay at the end.
|
||||
cut_overlays()
|
||||
add_janitor_hud_overlay()
|
||||
|
||||
|
||||
/obj/effect/decal/cleanable/proc/add_janitor_hud_overlay()
|
||||
// This was original a seperate object that followed the grime, it got stuck in everything you can imagine!
|
||||
// It also likely doubled the memory use of every cleanable decal on station...
|
||||
var/image/hud = image('icons/mob/hud.dmi', src, "janhud[rand(1,9)]")
|
||||
hud.appearance_flags = (RESET_COLOR|PIXEL_SCALE|KEEP_APART)
|
||||
hud.plane = PLANE_JANHUD
|
||||
hud.layer = BELOW_MOB_LAYER
|
||||
hud.mouse_opacity = 0
|
||||
//HUD VARIANT: Allows the hud to show up with it's normal alpha, even if the 'dirty thing' it's attached to has a low alpha (ex: dirt). If you want to disable it, simply comment out the lines between the 'HUD VARIANT' tag!
|
||||
hud.appearance_flags = RESET_ALPHA
|
||||
hud.alpha = 255
|
||||
//HUD VARIANT end
|
||||
add_overlay(hud)
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
if(ruined)
|
||||
return
|
||||
|
||||
if(tgui_alert(usr, "Do I want to rip the poster from the wall?","You think...",list("Yes","No")) == "Yes")
|
||||
if(tgui_alert(user, "Do I want to rip the poster from the wall?","You think...",list("Yes","No")) == "Yes")
|
||||
|
||||
if(ruined || !user.Adjacent(src))
|
||||
return
|
||||
|
||||
@@ -6,26 +6,39 @@
|
||||
layer = DIRTY_LAYER
|
||||
anchored = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/crayon/New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune")
|
||||
..()
|
||||
loc = location
|
||||
var/art_type
|
||||
var/art_color
|
||||
var/art_shade
|
||||
|
||||
/obj/effect/decal/cleanable/crayon/Initialize(var/ml, main = "#FFFFFF",shade = "#000000",var/type = "rune", new_age = 0)
|
||||
name = type
|
||||
desc = "A [type] drawn in crayon."
|
||||
|
||||
// Persistence vars. Unused here but used downstream. If someone updates the persistance code, it's here.
|
||||
art_type = type
|
||||
art_color = main
|
||||
art_shade = shade
|
||||
|
||||
switch(type)
|
||||
if("rune")
|
||||
type = "rune[rand(1,6)]"
|
||||
if("graffiti")
|
||||
type = pick("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa")
|
||||
|
||||
var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]",2.1)
|
||||
var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]s",2.1)
|
||||
. = ..(ml, new_age) // mapload, age
|
||||
|
||||
mainOverlay.Blend(main,ICON_ADD)
|
||||
shadeOverlay.Blend(shade,ICON_ADD)
|
||||
/obj/effect/decal/cleanable/crayon/update_icon()
|
||||
cut_overlays()
|
||||
var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[art_type]",2.1)
|
||||
var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[art_type]s",2.1)
|
||||
|
||||
add_overlay(mainOverlay)
|
||||
add_overlay(shadeOverlay)
|
||||
if(mainOverlay && shadeOverlay)
|
||||
mainOverlay.Blend(art_color,ICON_ADD)
|
||||
shadeOverlay.Blend(art_shade,ICON_ADD)
|
||||
|
||||
add_hiddenprint(usr)
|
||||
add_overlay(mainOverlay)
|
||||
add_overlay(shadeOverlay)
|
||||
|
||||
add_janitor_hud_overlay()
|
||||
return
|
||||
// CHOMPEdit End
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
if(ruined)
|
||||
return
|
||||
|
||||
if(tgui_alert(usr, "Do I want to rip the poster from the wall?","You think...",list("Yes","No")) == "Yes")
|
||||
if(tgui_alert(user, "Do I want to rip the poster from the wall?","You think...",list("Yes","No")) == "Yes")
|
||||
|
||||
if(ruined || !user.Adjacent(src))
|
||||
return
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
/// An info button that, when clicked, puts some text in the user's chat
|
||||
/obj/effect/abstract/info
|
||||
name = "info"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "info"
|
||||
|
||||
mouse_opacity = MOUSE_OPACITY_OPAQUE
|
||||
|
||||
/// What should the info button display when clicked?
|
||||
var/info_text
|
||||
|
||||
/obj/effect/abstract/info/Initialize(mapload, info_text)
|
||||
. = ..()
|
||||
|
||||
if (!isnull(info_text))
|
||||
src.info_text = info_text
|
||||
|
||||
/obj/effect/abstract/info/Click()
|
||||
. = ..()
|
||||
to_chat(usr, info_text)
|
||||
|
||||
/obj/effect/abstract/info/MouseEntered(location, control, params)
|
||||
. = ..()
|
||||
icon_state = "info_hovered"
|
||||
|
||||
/obj/effect/abstract/info/MouseExited()
|
||||
. = ..()
|
||||
icon_state = initial(icon_state)
|
||||
@@ -13,8 +13,8 @@
|
||||
// Special case to prevent us from being part of a zone during the first air master tick.
|
||||
// We must merge ourselves into a zone on next tick. This will cause a bit of lag on
|
||||
// startup, but it can't really be helped you know?
|
||||
if(air_master && air_master.current_cycle == 0)
|
||||
if(SSair && SSair.current_cycle == 0)
|
||||
spawn(1)
|
||||
air_master.mark_for_update(get_turf(src))
|
||||
SSair.mark_for_update(get_turf(src))
|
||||
return FALSE
|
||||
return is_zone ? FALSE : TRUE // Anything except zones can pass
|
||||
|
||||
@@ -118,7 +118,6 @@
|
||||
to speak with your team, and learn what their plan is for today."))
|
||||
|
||||
R.key = C.key
|
||||
// R.Namepick() // Apparnetly making someone a merc lets them pick a name, so this isn't needed.
|
||||
|
||||
spawn(1)
|
||||
mercs.add_antagonist(R.mind, FALSE, TRUE, FALSE, FALSE, FALSE)
|
||||
|
||||
@@ -251,9 +251,9 @@
|
||||
if (!isturf(NT) || (NT in found) || (NT in pending))
|
||||
continue
|
||||
// We ask ZAS to determine if its airtight. Thats what matters anyway right?
|
||||
if(air_master.air_blocked(T, NT))
|
||||
if(SSair.air_blocked(T, NT))
|
||||
// Okay thats the edge of the room
|
||||
if(get_area_type(NT.loc) == AREA_SPACE && air_master.air_blocked(NT, NT))
|
||||
if(get_area_type(NT.loc) == AREA_SPACE && SSair.air_blocked(NT, NT))
|
||||
found += NT // So we include walls/doors not already in any area
|
||||
continue
|
||||
if (istype(NT, /turf/space))
|
||||
|
||||
@@ -678,9 +678,9 @@
|
||||
if(!visual && forbiddenAreas[NT.loc.type])
|
||||
return ROOM_ERR_FORBIDDEN
|
||||
// We ask ZAS to determine if its airtight. Thats what matters anyway right?
|
||||
if(air_master.air_blocked(T, NT))
|
||||
if(SSair.air_blocked(T, NT))
|
||||
// Okay thats the edge of the room
|
||||
if(get_area_type(NT.loc) == AREA_SPACE && air_master.air_blocked(NT, NT))
|
||||
if(get_area_type(NT.loc) == AREA_SPACE && SSair.air_blocked(NT, NT))
|
||||
found += NT // So we include walls/doors not already in any area
|
||||
continue
|
||||
if (istype(NT, /turf/space))
|
||||
@@ -835,9 +835,9 @@
|
||||
if(!get_new_area_type(NT.loc) == 1) //The contains somewhere that is NOT a buildable area.
|
||||
return 3 //NOT A BUILDABLE AREA
|
||||
|
||||
if(air_master.air_blocked(T, NT)) //Is the room airtight?
|
||||
if(SSair.air_blocked(T, NT)) //Is the room airtight?
|
||||
// Okay thats the edge of the room
|
||||
if(get_new_area_type(NT.loc) == 1 && air_master.air_blocked(NT, NT))
|
||||
if(get_new_area_type(NT.loc) == 1 && SSair.air_blocked(NT, NT))
|
||||
found += NT // So we include walls/doors not already in any area
|
||||
continue
|
||||
if (istype(NT, /turf/space))
|
||||
|
||||
@@ -11,14 +11,14 @@
|
||||
/*var/spawn_chance = rand(1,100)
|
||||
switch(spawn_chance)
|
||||
if(0 to 49)
|
||||
new /obj/random/gun/guarenteed(usr.loc)
|
||||
to_chat(usr, "You got a thing!")
|
||||
new /obj/random/gun/guarenteed(user.loc)
|
||||
to_chat(user, "You got a thing!")
|
||||
if(50 to 99)
|
||||
new /obj/item/bikehorn/rubberducky(usr.loc)
|
||||
new /obj/item/bikehorn(usr.loc)
|
||||
to_chat(usr, "You got two things!")
|
||||
new /obj/item/bikehorn/rubberducky(user.loc)
|
||||
new /obj/item/bikehorn(user.loc)
|
||||
to_chat(user, "You got two things!")
|
||||
if(100)
|
||||
to_chat(usr, "The box contained nothing!")
|
||||
to_chat(user, "The box contained nothing!")
|
||||
return
|
||||
*/
|
||||
var/loot = pick(/obj/effect/landmark/costume,
|
||||
@@ -95,7 +95,7 @@
|
||||
qdel(loot)
|
||||
loot = new_I // swap it
|
||||
//VOREstation edit end
|
||||
new loot(usr.loc)
|
||||
new loot(user.loc)
|
||||
to_chat(user, "You unwrap the package.")
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -59,27 +59,26 @@
|
||||
|
||||
return data
|
||||
|
||||
/obj/item/aicard/tgui_act(action, params)
|
||||
/obj/item/aicard/tgui_act(action, params, datum/tgui/ui)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
if(!carded_ai)
|
||||
return
|
||||
|
||||
var/user = usr
|
||||
switch(action)
|
||||
if("wipe")
|
||||
msg_admin_attack("[key_name_admin(user)] wiped [key_name_admin(AI)] with \the [src].")
|
||||
add_attack_logs(user,carded_ai,"Purged from AI Card")
|
||||
msg_admin_attack("[key_name_admin(ui.user)] wiped [key_name_admin(AI)] with \the [src].")
|
||||
add_attack_logs(ui.user,carded_ai,"Purged from AI Card")
|
||||
INVOKE_ASYNC(src, PROC_REF(wipe_ai))
|
||||
if("radio")
|
||||
carded_ai.aiRadio.disabledAi = !carded_ai.aiRadio.disabledAi
|
||||
to_chat(carded_ai, span_warning("Your Subspace Transceiver has been [carded_ai.aiRadio.disabledAi ? "disabled" : "enabled"]!"))
|
||||
to_chat(user, span_notice("You [carded_ai.aiRadio.disabledAi ? "disable" : "enable"] the AI's Subspace Transceiver."))
|
||||
to_chat(ui.user, span_notice("You [carded_ai.aiRadio.disabledAi ? "disable" : "enable"] the AI's Subspace Transceiver."))
|
||||
if("wireless")
|
||||
carded_ai.control_disabled = !carded_ai.control_disabled
|
||||
to_chat(carded_ai, span_warning("Your wireless interface has been [carded_ai.control_disabled ? "disabled" : "enabled"]!"))
|
||||
to_chat(user, span_notice("You [carded_ai.control_disabled ? "disable" : "enable"] the AI's wireless interface."))
|
||||
to_chat(ui.user, span_notice("You [carded_ai.control_disabled ? "disable" : "enable"] the AI's wireless interface."))
|
||||
if(carded_ai.control_disabled && carded_ai.deployed_shell)
|
||||
carded_ai.disconnect_shell("Disconnecting from remote shell due to [src] wireless access interface being disabled.")
|
||||
update_icon()
|
||||
|
||||
@@ -17,38 +17,38 @@
|
||||
flags |= NOBLUDGEON //So borgs don't spark.
|
||||
|
||||
/obj/item/bodysnatcher/attack(mob/living/M, mob/living/user)
|
||||
usr.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
if(ishuman(M) || issilicon(M)) //Allows body swapping with humans, synths, and pAI's/borgs since they all have a mind.
|
||||
if(usr == M)
|
||||
if(user == M)
|
||||
to_chat(user,span_warning(" A message pops up on the LED display, informing you that you that the mind transfer to yourself was successful... Wait, did that even do anything?"))
|
||||
return
|
||||
|
||||
if(!M.mind) //Do they have a mind?
|
||||
to_chat(usr,span_warning("A warning pops up on the device, informing you that [M] appears braindead."))
|
||||
to_chat(user,span_warning("A warning pops up on the device, informing you that [M] appears braindead."))
|
||||
return
|
||||
|
||||
if(!M.allow_mind_transfer)
|
||||
to_chat(usr,span_danger("The target's mind is too complex to be affected!"))
|
||||
to_chat(user,span_danger("The target's mind is too complex to be affected!"))
|
||||
return
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.resleeve_lock && usr.ckey != H.resleeve_lock)
|
||||
if(H.resleeve_lock && user.ckey != H.resleeve_lock)
|
||||
to_chat(src, span_danger("[H] cannot be impersonated!"))
|
||||
return
|
||||
|
||||
if(M.stat == DEAD) //Are they dead?
|
||||
to_chat(usr,span_warning("A warning pops up on the device, informing you that [M] is dead, and, as such, the mind transfer can not be done."))
|
||||
to_chat(user,span_warning("A warning pops up on the device, informing you that [M] is dead, and, as such, the mind transfer can not be done."))
|
||||
return
|
||||
|
||||
var/choice = tgui_alert(usr,"This will swap your mind with the target's mind. This will result in them controlling your body, and you controlling their body. Continue?","Confirmation",list("Continue","Cancel"))
|
||||
if(choice == "Continue" && usr.get_active_hand() == src && usr.Adjacent(M))
|
||||
var/choice = tgui_alert(user,"This will swap your mind with the target's mind. This will result in them controlling your body, and you controlling their body. Continue?","Confirmation",list("Continue","Cancel"))
|
||||
if(choice == "Continue" && user.get_active_hand() == src && user.Adjacent(M))
|
||||
|
||||
usr.visible_message(span_warning("[usr] pushes the device up their forehead and [M]'s head, the device beginning to let out a series of light beeps!"),span_notice("You begin swap minds with [M]!"))
|
||||
if(do_after(usr,35 SECONDS,M))
|
||||
if(usr.mind && M.mind && M.stat != DEAD && usr.stat != DEAD)
|
||||
log_and_message_admins("[usr.ckey] used a Bodysnatcher to swap bodies with [M.ckey]")
|
||||
to_chat(usr,span_notice("Your minds have been swapped! Have a nice day."))
|
||||
user.visible_message(span_warning("[user] pushes the device up their forehead and [M]'s head, the device beginning to let out a series of light beeps!"),span_notice("You begin swap minds with [M]!"))
|
||||
if(do_after(user,35 SECONDS,M))
|
||||
if(user.mind && M.mind && M.stat != DEAD && user.stat != DEAD)
|
||||
log_and_message_admins("[user.ckey] used a Bodysnatcher to swap bodies with [M.ckey]")
|
||||
to_chat(user,span_notice("Your minds have been swapped! Have a nice day."))
|
||||
var/datum/mind/user_mind = user.mind
|
||||
var/datum/mind/prey_mind = M.mind
|
||||
var/target_ooc_notes = M.ooc_notes
|
||||
@@ -58,8 +58,8 @@
|
||||
var/user_likes = user.ooc_notes_likes
|
||||
var/user_dislikes = user.ooc_notes_dislikes
|
||||
M.ghostize()
|
||||
usr.ghostize()
|
||||
usr.mind = null
|
||||
user.ghostize()
|
||||
user.mind = null
|
||||
M.mind = null
|
||||
user_mind.current = null
|
||||
prey_mind.current = null
|
||||
@@ -73,9 +73,9 @@
|
||||
user.ooc_notes = target_ooc_notes
|
||||
user.ooc_notes_likes = target_likes
|
||||
user.ooc_notes_dislikes = target_dislikes
|
||||
usr.sleeping = 10 //Device knocks out both the user and the target.
|
||||
usr.eye_blurry = 30 //Blurry vision while they both get used to their new body's vision
|
||||
usr.slurring = 50 //And let's also have them slurring while they attempt to get used to using their new body.
|
||||
user.sleeping = 10 //Device knocks out both the user and the target.
|
||||
user.eye_blurry = 30 //Blurry vision while they both get used to their new body's vision
|
||||
user.slurring = 50 //And let's also have them slurring while they attempt to get used to using their new body.
|
||||
if(ishuman(M)) //Let's not have the AI slurring, even though its downright hilarious.
|
||||
M.sleeping = 10
|
||||
M.eye_blurry = 30
|
||||
|
||||
@@ -28,10 +28,10 @@
|
||||
disrupt()
|
||||
..()
|
||||
|
||||
/obj/item/chameleon/attack_self()
|
||||
toggle()
|
||||
/obj/item/chameleon/attack_self(mob/user)
|
||||
toggle(user)
|
||||
|
||||
/obj/item/chameleon/afterattack(atom/target, mob/user , proximity)
|
||||
/obj/item/chameleon/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(!active_dummy)
|
||||
if(istype(target,/obj/item) && !istype(target, /obj/item/disk/nuclear))
|
||||
@@ -42,30 +42,32 @@
|
||||
saved_icon_state = target.icon_state
|
||||
saved_overlays = target.overlays
|
||||
|
||||
/obj/item/chameleon/proc/toggle()
|
||||
/obj/item/chameleon/proc/toggle(mob/user)
|
||||
if(!can_use || !saved_item) return
|
||||
if(active_dummy)
|
||||
eject_all()
|
||||
playsound(src, 'sound/effects/pop.ogg', 100, 1, -6)
|
||||
qdel(active_dummy)
|
||||
active_dummy = null
|
||||
to_chat(usr, span_notice("You deactivate the [src]."))
|
||||
to_chat(user, span_notice("You deactivate the [src]."))
|
||||
var/obj/effect/overlay/T = new /obj/effect/overlay(get_turf(src))
|
||||
T.icon = 'icons/effects/effects.dmi'
|
||||
flick("emppulse",T)
|
||||
spawn(8) qdel(T)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), T), 0.8 SECONDS, TIMER_DELETE_ME)
|
||||
else
|
||||
playsound(src, 'sound/effects/pop.ogg', 100, 1, -6)
|
||||
var/obj/O = new saved_item(src)
|
||||
if(!O) return
|
||||
var/obj/effect/dummy/chameleon/C = new /obj/effect/dummy/chameleon(usr.loc)
|
||||
C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, src)
|
||||
if(istype(user.loc, /obj/item/holder)) // This doesn't go well...
|
||||
return
|
||||
var/obj/effect/dummy/chameleon/C = new /obj/effect/dummy/chameleon(user.loc)
|
||||
C.activate(O, user, saved_icon, saved_icon_state, saved_overlays, src)
|
||||
qdel(O)
|
||||
to_chat(usr, span_notice("You activate the [src]."))
|
||||
to_chat(user, span_notice("You activate the [src]."))
|
||||
var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src))
|
||||
T.icon = 'icons/effects/effects.dmi'
|
||||
flick("emppulse",T)
|
||||
spawn(8) qdel(T)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), T), 0.8 SECONDS, TIMER_DELETE_ME)
|
||||
|
||||
/obj/item/chameleon/proc/disrupt(var/delete_dummy = 1)
|
||||
if(active_dummy)
|
||||
@@ -78,7 +80,10 @@
|
||||
qdel(active_dummy)
|
||||
active_dummy = null
|
||||
can_use = 0
|
||||
spawn(50) can_use = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_use)), 5 SECONDS, TIMER_DELETE_ME)
|
||||
|
||||
/obj/item/chameleon/proc/allow_use()
|
||||
can_use = 1
|
||||
|
||||
/obj/item/chameleon/proc/eject_all()
|
||||
for(var/atom/movable/A in active_dummy)
|
||||
@@ -127,6 +132,9 @@
|
||||
..()
|
||||
master.disrupt()
|
||||
|
||||
/obj/effect/dummy/chameleon/proc/allow_move()
|
||||
can_move = 1
|
||||
|
||||
/obj/effect/dummy/chameleon/relaymove(var/mob/user, direction)
|
||||
if(istype(loc, /turf/space)) return //No magical space movement!
|
||||
|
||||
@@ -134,15 +142,15 @@
|
||||
can_move = 0
|
||||
switch(user.bodytemperature)
|
||||
if(300 to INFINITY)
|
||||
spawn(10) can_move = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_move)), 1 SECOND, TIMER_DELETE_ME)
|
||||
if(295 to 300)
|
||||
spawn(13) can_move = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_move)), 1.3 SECONDS, TIMER_DELETE_ME)
|
||||
if(280 to 295)
|
||||
spawn(16) can_move = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_move)), 1.6 SECONDS, TIMER_DELETE_ME)
|
||||
if(260 to 280)
|
||||
spawn(20) can_move = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_move)), 2 SECONDS, TIMER_DELETE_ME)
|
||||
else
|
||||
spawn(25) can_move = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(allow_move)), 2.5 SECONDS, TIMER_DELETE_ME)
|
||||
step(src, direction)
|
||||
return
|
||||
|
||||
|
||||
@@ -318,11 +318,11 @@
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
add_fingerprint(usr)
|
||||
add_fingerprint(ui.user)
|
||||
. = TRUE
|
||||
switch(action)
|
||||
if("rename")
|
||||
var/new_name = sanitizeSafe(tgui_input_text(usr,"Please enter your name.","Communicator",usr.name) )
|
||||
var/new_name = sanitizeSafe(tgui_input_text(ui.user,"Please enter your name.","Communicator",ui.user.name) )
|
||||
if(new_name)
|
||||
register_device(new_name)
|
||||
|
||||
@@ -341,7 +341,7 @@
|
||||
ringer = !ringer
|
||||
|
||||
if("set_ringer_tone")
|
||||
var/ringtone = tgui_input_text(usr, "Set Ringer Tone", "Ringer")
|
||||
var/ringtone = tgui_input_text(ui.user, "Set Ringer Tone", "Ringer")
|
||||
if(ringtone)
|
||||
ttone = ringtone
|
||||
|
||||
@@ -360,7 +360,7 @@
|
||||
|
||||
if("dial")
|
||||
if(!get_connection_to_tcomms())
|
||||
to_chat(usr, span_danger("Error: Cannot connect to Exonet node."))
|
||||
to_chat(ui.user, span_danger("Error: Cannot connect to Exonet node."))
|
||||
return FALSE
|
||||
var/their_address = params["dial"]
|
||||
exonet.send_message(their_address, "voice")
|
||||
@@ -373,16 +373,16 @@
|
||||
|
||||
if("message")
|
||||
if(!get_connection_to_tcomms())
|
||||
to_chat(usr, span_danger("Error: Cannot connect to Exonet node."))
|
||||
to_chat(ui.user, span_danger("Error: Cannot connect to Exonet node."))
|
||||
return FALSE
|
||||
var/their_address = params["message"]
|
||||
var/text = sanitizeSafe(tgui_input_text(usr,"Enter your message.","Text Message"))
|
||||
var/text = sanitizeSafe(tgui_input_text(ui.user,"Enter your message.","Text Message"))
|
||||
if(text)
|
||||
exonet.send_message(their_address, "text", text)
|
||||
im_list += list(list("address" = exonet.address, "to_address" = their_address, "im" = text))
|
||||
log_pda("(COMM: [src]) sent \"[text]\" to [exonet.get_atom_from_address(their_address)]", usr)
|
||||
log_pda("(COMM: [src]) sent \"[text]\" to [exonet.get_atom_from_address(their_address)]", ui.user)
|
||||
var/obj/item/communicator/comm = exonet.get_atom_from_address(their_address)
|
||||
to_chat(usr, span_notice("[icon2html(src, usr.client)] Sent message to [istype(comm, /obj/item/communicator) ? comm.owner : comm.name], <b>\"[text]\"</b> (<a href='?src=\ref[src];action=Reply;target=\ref[exonet.get_atom_from_address(comm.exonet.address)]'>Reply</a>)"))
|
||||
to_chat(ui.user, span_notice("[icon2html(src, ui.user.client)] Sent message to [istype(comm, /obj/item/communicator) ? comm.owner : comm.name], <b>\"[text]\"</b> (<a href='?src=\ref[src];action=Reply;target=\ref[exonet.get_atom_from_address(comm.exonet.address)]'>Reply</a>)"))
|
||||
for(var/mob/M in player_list)
|
||||
if(M.stat == DEAD && M.client?.prefs?.read_preference(/datum/preference/toggle/ghost_ears))
|
||||
if(istype(M, /mob/new_player) || M.forbid_seeing_deadchat)
|
||||
@@ -395,16 +395,16 @@
|
||||
var/name_to_disconnect = params["disconnect"]
|
||||
for(var/mob/living/voice/V in contents)
|
||||
if(name_to_disconnect == sanitize(V.name))
|
||||
close_connection(usr, V, "[usr] hung up")
|
||||
close_connection(ui.user, V, "[ui.user] hung up")
|
||||
for(var/obj/item/communicator/comm in communicating)
|
||||
if(name_to_disconnect == sanitize(comm.name))
|
||||
close_connection(usr, comm, "[usr] hung up")
|
||||
close_connection(ui.user, comm, "[ui.user] hung up")
|
||||
|
||||
if("startvideo")
|
||||
var/ref_to_video = params["startvideo"]
|
||||
var/obj/item/communicator/comm = locate(ref_to_video)
|
||||
if(comm)
|
||||
connect_video(usr, comm)
|
||||
connect_video(ui.user, comm)
|
||||
|
||||
if("endvideo")
|
||||
if(video_source)
|
||||
@@ -418,15 +418,15 @@
|
||||
|
||||
if("hang_up")
|
||||
for(var/mob/living/voice/V in contents)
|
||||
close_connection(usr, V, "[usr] hung up")
|
||||
close_connection(ui.user, V, "[ui.user] hung up")
|
||||
for(var/obj/item/communicator/comm in communicating)
|
||||
close_connection(usr, comm, "[usr] hung up")
|
||||
close_connection(ui.user, comm, "[ui.user] hung up")
|
||||
|
||||
if("switch_tab")
|
||||
selected_tab = params["switch_tab"]
|
||||
|
||||
if("edit")
|
||||
var/n = tgui_input_text(usr, "Please enter message", name, notehtml, multiline = TRUE, prevent_enter = TRUE)
|
||||
var/n = tgui_input_text(ui.user, "Please enter message", name, notehtml, multiline = TRUE, prevent_enter = TRUE)
|
||||
n = sanitizeSafe(n, extra = 0)
|
||||
if(n)
|
||||
note = html_decode(n)
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
if(!slot_check())
|
||||
to_chat(user, span_warning("You need to equip [src] before taking out [paddles]."))
|
||||
else
|
||||
if(!usr.put_in_hands(paddles)) //Detach the paddles into the user's hands
|
||||
if(!user.put_in_hands(paddles)) //Detach the paddles into the user's hands
|
||||
to_chat(user, span_warning("You need a free hand to hold the paddles!"))
|
||||
update_icon() //success
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
if(!evaluate_ghost_join(user))
|
||||
return ..()
|
||||
|
||||
tgui_alert_async(usr, "Would you like to become [src]? It is bound to [revivedby].", "Become Mob", list("Yes","No"), CALLBACK(src, PROC_REF(reply_ghost_join)), 20 SECONDS)
|
||||
tgui_alert_async(user, "Would you like to become [src]? It is bound to [revivedby].", "Become Mob", list("Yes","No"), CALLBACK(src, PROC_REF(reply_ghost_join)), 20 SECONDS)
|
||||
|
||||
/// A reply to an async alert request was received
|
||||
/mob/living/simple_mob/proc/reply_ghost_join(response)
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
new painting_decal(F, painting_dir, painting_colour)
|
||||
|
||||
/obj/item/floor_painter/attack_self(var/mob/user)
|
||||
var/choice = tgui_alert(usr, "Do you wish to change the decal type, paint direction, or paint colour?", "Modify What?", list("Decal","Direction","Colour","Cancel"))
|
||||
var/choice = tgui_alert(user, "Do you wish to change the decal type, paint direction, or paint colour?", "Modify What?", list("Decal","Direction","Colour","Cancel"))
|
||||
if(choice == "Cancel")
|
||||
return
|
||||
else if(choice == "Decal")
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/obj/item/multitool/hacktool
|
||||
var/is_hacking = 0
|
||||
var/max_known_targets
|
||||
var/hackspeed = 1
|
||||
var/max_level = 4 //what's the max door security_level we can handle?
|
||||
var/hackspeed = 1 //time taken to hack: lower is faster
|
||||
var/max_level = 4 //what's the max door security_level we can handle? default is 1, med/eng/atmos are 1.5, sec/sci are 2, command is 3, vault is 5
|
||||
var/full_override = FALSE //can we override door bolts too? defaults to false for event/safety reasons
|
||||
|
||||
var/in_hack_mode = 0
|
||||
@@ -155,3 +155,16 @@
|
||||
if(!hacktool || !hacktool.in_hack_mode || !(src_object in hacktool.known_targets))
|
||||
return STATUS_CLOSE
|
||||
return ..()
|
||||
|
||||
/obj/item/multitool/hacktool/modified
|
||||
name = "modified multitool"
|
||||
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors. This ones seems a bit larger and heavier than the usual model, for some reason. Maybe it's an older version?"
|
||||
description_info = "You can use this on airlocks or APCs to try to hack them without cutting wires."
|
||||
icon_state = "multitool_modified"
|
||||
|
||||
/obj/item/multitool/hacktool/obvious
|
||||
name = "non-standard multitool"
|
||||
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors. This one doesn't look like the usual model at all!"
|
||||
description_info = "You can use this on airlocks or APCs to try to hack them without cutting wires."
|
||||
icon_state = "multitool_suspicious"
|
||||
in_hack_mode = 1 //start in hackmode
|
||||
|
||||
@@ -134,14 +134,14 @@
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.emagged)
|
||||
src.Emag()
|
||||
to_chat(usr, You short circuit the [src].")
|
||||
to_chat(user, You short circuit the [src].")
|
||||
return
|
||||
*/
|
||||
to_chat(usr, "It has [uses] lights remaining.")
|
||||
var/new_color = input(usr, "Choose a color to set the light to! (Default is [LIGHT_COLOR_INCANDESCENT_TUBE])", "", selected_color) as color|null
|
||||
to_chat(user, "It has [uses] lights remaining.")
|
||||
var/new_color = input(user, "Choose a color to set the light to! (Default is [LIGHT_COLOR_INCANDESCENT_TUBE])", "", selected_color) as color|null
|
||||
if(new_color)
|
||||
selected_color = new_color
|
||||
to_chat(usr, "The light color has been changed.")
|
||||
to_chat(user, "The light color has been changed.")
|
||||
|
||||
/obj/item/lightreplacer/update_icon()
|
||||
icon_state = "lightreplacer[emagged]"
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
return
|
||||
|
||||
/obj/item/closet_painter/attack_self(var/mob/user)
|
||||
var/choice = tgui_alert(usr, "Do you wish to change the regular closet color or the secure closet color?", "Color Selection", list("Regular Closet Colour","Cancel","Secure Closet Colour"))
|
||||
var/choice = tgui_alert(user, "Do you wish to change the regular closet color or the secure closet color?", "Color Selection", list("Regular Closet Colour","Cancel","Secure Closet Colour"))
|
||||
if(choice == "Regular Closet Colour")
|
||||
choose_colour()
|
||||
else if(choice == "Secure Closet Colour")
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
tool_qualities = list(TOOL_MULTITOOL)
|
||||
|
||||
/obj/item/multitool/attack_self(mob/living/user)
|
||||
var/choice = tgui_alert(usr, "What do you want to do with \the [src]?", "Multitool Menu", list("Switch Mode", "Clear Buffers", "Cancel"))
|
||||
var/choice = tgui_alert(user, "What do you want to do with \the [src]?", "Multitool Menu", list("Switch Mode", "Clear Buffers", "Cancel"))
|
||||
switch(choice)
|
||||
if("Clear Buffers")
|
||||
to_chat(user,span_notice("You clear \the [src]'s memory."))
|
||||
|
||||
@@ -61,21 +61,21 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/paicard)
|
||||
if(pai != null) //Have a person in them already?
|
||||
return ..()
|
||||
if(is_damage_critical())
|
||||
to_chat(usr, span_warning("That card is too damaged to activate!"))
|
||||
to_chat(user, span_warning("That card is too damaged to activate!"))
|
||||
return
|
||||
var/time_till_respawn = user.time_till_respawn()
|
||||
if(time_till_respawn == -1) // Special case, never allowed to respawn
|
||||
to_chat(usr, span_warning("Respawning is not allowed!"))
|
||||
to_chat(user, span_warning("Respawning is not allowed!"))
|
||||
else if(time_till_respawn) // Nonzero time to respawn
|
||||
to_chat(usr, span_warning("You can't do that yet! You died too recently. You need to wait another [round(time_till_respawn/10/60, 0.1)] minutes."))
|
||||
to_chat(user, span_warning("You can't do that yet! You died too recently. You need to wait another [round(time_till_respawn/10/60, 0.1)] minutes."))
|
||||
return
|
||||
if(jobban_isbanned(usr, JOB_PAI))
|
||||
to_chat(usr,span_warning("You cannot join a pAI card when you are banned from playing as a pAI."))
|
||||
if(jobban_isbanned(user, JOB_PAI))
|
||||
to_chat(user,span_warning("You cannot join a pAI card when you are banned from playing as a pAI."))
|
||||
return
|
||||
|
||||
for(var/ourkey in paikeys)
|
||||
if(ourkey == user.ckey)
|
||||
to_chat(usr, span_warning("You can't just rejoin any old pAI card!!! Your card still exists."))
|
||||
to_chat(user, span_warning("You can't just rejoin any old pAI card!!! Your card still exists."))
|
||||
return
|
||||
|
||||
var/choice = tgui_alert(user, "You sure you want to inhabit this PAI, or submit yourself to being recruited?", "Confirmation", list("Inhabit", "Recruit", "Cancel"))
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
subspace_transmission = 1
|
||||
canhear_range = 0 // can't hear headsets from very far away
|
||||
slot_flags = SLOT_EARS
|
||||
sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/ears/mob_teshari.dmi')
|
||||
sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/ears/mob_teshari.dmi',
|
||||
SPECIES_WEREBEAST = 'icons/inventory/ears/mob_vr_werebeast.dmi')
|
||||
|
||||
var/translate_binary = 0
|
||||
var/translate_hive = 0
|
||||
@@ -83,254 +84,6 @@
|
||||
/obj/item/radio/headset/tgui_state(mob/user)
|
||||
return GLOB.tgui_inventory_state
|
||||
|
||||
/obj/item/radio/headset/syndicate
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/syndicate
|
||||
|
||||
/obj/item/radio/headset/syndicate/alt
|
||||
icon_state = "syndie_headset"
|
||||
item_state = "headset"
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/syndicate
|
||||
|
||||
/obj/item/radio/headset/raider
|
||||
origin_tech = list(TECH_ILLEGAL = 2)
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/raider
|
||||
|
||||
/obj/item/radio/headset/raider/Initialize()
|
||||
. = ..()
|
||||
set_frequency(RAID_FREQ)
|
||||
|
||||
/obj/item/radio/headset/binary
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
ks1type = /obj/item/encryptionkey/binary
|
||||
|
||||
/obj/item/radio/headset/headset_sec
|
||||
name = "security radio headset"
|
||||
desc = "This is used by your elite security force."
|
||||
icon_state = "sec_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_sec
|
||||
|
||||
/obj/item/radio/headset/headset_sec/alt
|
||||
name = "security bowman headset"
|
||||
desc = "This is used by your elite security force."
|
||||
icon_state = "sec_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_sec
|
||||
|
||||
/obj/item/radio/headset/headset_eng
|
||||
name = "engineering radio headset"
|
||||
desc = "When the engineers wish to chat like girls."
|
||||
icon_state = "eng_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_eng
|
||||
|
||||
/obj/item/radio/headset/headset_eng/alt
|
||||
name = "engineering bowman headset"
|
||||
desc = "When the engineers wish to chat like girls."
|
||||
icon_state = "eng_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_eng
|
||||
|
||||
/obj/item/radio/headset/headset_rob
|
||||
name = "robotics radio headset"
|
||||
desc = "Made specifically for the roboticists who cannot decide between departments."
|
||||
icon_state = "rob_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_rob
|
||||
|
||||
/obj/item/radio/headset/headset_med
|
||||
name = "medical radio headset"
|
||||
desc = "A headset for the trained staff of the medbay."
|
||||
icon_state = "med_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_med
|
||||
|
||||
/obj/item/radio/headset/headset_med/alt
|
||||
name = "medical bowman headset"
|
||||
desc = "A headset for the trained staff of the medbay."
|
||||
icon_state = "med_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_med
|
||||
|
||||
/obj/item/radio/headset/headset_sci
|
||||
name = "science radio headset"
|
||||
desc = "A sciency headset. Like usual."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_sci
|
||||
|
||||
/obj/item/radio/headset/headset_medsci
|
||||
name = "medical research radio headset"
|
||||
desc = "A headset that is a result of the mating between medical and science."
|
||||
icon_state = "med_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_medsci
|
||||
|
||||
/obj/item/radio/headset/headset_com
|
||||
name = "command radio headset"
|
||||
desc = "A headset with a commanding channel."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_com
|
||||
|
||||
/obj/item/radio/headset/headset_com/alt
|
||||
name = "command bowman headset"
|
||||
desc = "A headset with a commanding channel."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_com
|
||||
|
||||
|
||||
/obj/item/radio/headset/heads/captain
|
||||
name = "site manager's headset"
|
||||
desc = "The headset of the boss."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/radio/headset/heads/captain/alt
|
||||
name = "site manager's bowman headset"
|
||||
desc = "The headset of the boss."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/radio/headset/heads/captain/sfr
|
||||
name = "SFR headset"
|
||||
desc = "A headset belonging to a Sif Free Radio DJ. SFR, best tunes in the wilderness."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway.
|
||||
name = "\improper AI subspace transceiver"
|
||||
desc = "Integrated AI radio transceiver."
|
||||
icon = 'icons/obj/robot_component.dmi'
|
||||
icon_state = "radio"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/ai_integrated
|
||||
var/myAi = null // Atlantis: Reference back to the AI which has this radio.
|
||||
var/disabledAi = 0 // Atlantis: Used to manually disable AI's integrated radio via intellicard menu.
|
||||
|
||||
/obj/item/radio/headset/heads/ai_integrated/receive_range(freq, level)
|
||||
if (disabledAi)
|
||||
return -1 //Transciever Disabled.
|
||||
return ..(freq, level, 1)
|
||||
|
||||
/obj/item/radio/headset/heads/rd
|
||||
name = "research director's headset"
|
||||
desc = "Headset of the eccentric-in-chief."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/rd
|
||||
|
||||
/obj/item/radio/headset/heads/rd/alt
|
||||
name = "research director's bowman headset"
|
||||
desc = "Headset of the eccentric-in-chief."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/rd
|
||||
|
||||
/obj/item/radio/headset/heads/hos
|
||||
name = "head of security's headset"
|
||||
desc = "The headset of the hardass who protects your worthless lives."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/heads/hos/alt
|
||||
name = "head of security's bowman headset"
|
||||
desc = "The headset of the hardass who protects your worthless lives."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/heads/ce
|
||||
name = "chief engineer's headset"
|
||||
desc = "The headset of the clown who is in charge of the circus."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/ce
|
||||
|
||||
/obj/item/radio/headset/heads/ce/alt
|
||||
name = "chief engineer's bowman headset"
|
||||
desc = "The headset of the clown who is in charge of the circus."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/ce
|
||||
|
||||
/obj/item/radio/headset/heads/cmo
|
||||
name = "chief medical officer's headset"
|
||||
desc = "The headset of the highly trained medical chief."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/cmo
|
||||
|
||||
/obj/item/radio/headset/heads/cmo/alt
|
||||
name = "chief medical officer's bowman headset"
|
||||
desc = "The headset of the highly trained medical chief."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/cmo
|
||||
|
||||
/obj/item/radio/headset/heads/hop
|
||||
name = "head of personnel's headset"
|
||||
desc = "The headset of the poor fool who will one day be " + JOB_SITE_MANAGER + "."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/hop
|
||||
|
||||
/obj/item/radio/headset/heads/hop/alt
|
||||
name = "head of personnel's bowman headset"
|
||||
desc = "The headset of the poor fool who will one day be " + JOB_SITE_MANAGER + "."
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/hop
|
||||
|
||||
/obj/item/radio/headset/headset_mine
|
||||
name = "mining radio headset"
|
||||
desc = "Headset used by miners. Has inbuilt short-band radio for when comms are down."
|
||||
icon_state = "mine_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/radio/headset/headset_cargo
|
||||
name = "supply radio headset"
|
||||
desc = "A headset used by the QM and their cronies."
|
||||
icon_state = "cargo_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/radio/headset/headset_cargo/alt
|
||||
name = "supply bowman headset"
|
||||
desc = "A bowman headset used by the QM and their cronies."
|
||||
icon_state = "cargo_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/radio/headset/headset_service
|
||||
name = "service radio headset"
|
||||
desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean."
|
||||
icon_state = "srv_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_service
|
||||
|
||||
/obj/item/radio/headset/ert
|
||||
name = "emergency response team radio headset"
|
||||
desc = "The headset of the boss's boss."
|
||||
icon_state = "com_headset"
|
||||
centComm = 1
|
||||
// freerange = 1
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/ert/alt
|
||||
name = "emergency response team bowman headset"
|
||||
desc = "The headset of the boss's boss."
|
||||
icon_state = "com_headset_alt"
|
||||
// freerange = 1
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/omni //Only for the admin intercoms
|
||||
ks2type = /obj/item/encryptionkey/omni
|
||||
|
||||
/obj/item/radio/headset/ia
|
||||
name = "internal affair's headset"
|
||||
desc = "The headset of your worst enemy."
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/mmi_radio
|
||||
name = "brain-integrated radio"
|
||||
desc = "MMIs and synthetic brains are often equipped with these."
|
||||
icon = 'icons/obj/robot_component.dmi'
|
||||
icon_state = "radio"
|
||||
item_state = "headset"
|
||||
var/mmiowner = null
|
||||
var/radio_enabled = 1
|
||||
|
||||
/obj/item/radio/headset/mmi_radio/receive_range(freq, level)
|
||||
if (!radio_enabled || istype(src.loc.loc, /mob/living/silicon) || istype(src.loc.loc, /obj/item/organ/internal))
|
||||
return -1 //Transciever Disabled.
|
||||
return ..(freq, level, 1)
|
||||
|
||||
/obj/item/radio/headset/attackby(obj/item/W as obj, mob/user as mob)
|
||||
// ..()
|
||||
user.set_machine(src)
|
||||
@@ -361,15 +114,15 @@
|
||||
keyslot2 = null
|
||||
|
||||
recalculateChannels()
|
||||
to_chat(user, "You pop out the encryption keys in the headset!")
|
||||
to_chat(user, span_notice("You pop out the encryption keys in the headset!"))
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
|
||||
else
|
||||
to_chat(user, "This headset doesn't have any encryption keys! How useless...")
|
||||
to_chat(user, span_notice("This headset doesn't have any encryption keys! How useless..."))
|
||||
|
||||
if(istype(W, /obj/item/encryptionkey/))
|
||||
if(keyslot1 && keyslot2)
|
||||
to_chat(user, "The headset can't hold another key!")
|
||||
to_chat(user, span_notice("The headset can't hold another key!"))
|
||||
return
|
||||
|
||||
if(!keyslot1)
|
||||
@@ -387,7 +140,6 @@
|
||||
|
||||
return
|
||||
|
||||
|
||||
/obj/item/radio/headset/recalculateChannels(var/setDescription = 0)
|
||||
src.channels = list()
|
||||
src.translate_binary = 0
|
||||
@@ -451,3 +203,436 @@
|
||||
radio_text += ", "
|
||||
|
||||
radio_desc = radio_text
|
||||
|
||||
/obj/item/radio/headset/mob_headset/receive_range(freq, level)
|
||||
if(ismob(src.loc))
|
||||
return ..(freq, level, 1)
|
||||
return -1
|
||||
|
||||
/obj/item/radio/headset/mob_headset/afterattack(var/atom/movable/target, mob/living/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(target,/mob/living/simple_mob))
|
||||
var/mob/living/simple_mob/M = target
|
||||
if(!M.mob_radio)
|
||||
user.drop_item()
|
||||
forceMove(M)
|
||||
M.mob_radio = src
|
||||
return
|
||||
if(M.mob_radio)
|
||||
M.mob_radio.forceMove(M.loc)
|
||||
M.mob_radio = null
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/radio/headset/alt
|
||||
name = "bowman radio headset"
|
||||
desc = "A larger, sturdier radio headset. A bit bulky, but guaranteed to stay on no matter what."
|
||||
icon_state = "headset_alt"
|
||||
|
||||
/obj/item/radio/headset/earbud
|
||||
name = "radio earbud"
|
||||
desc = "A discreet radio earbud and low-profile mic. Simple and unobtrusive."
|
||||
icon_state = "headset_earbud"
|
||||
|
||||
/obj/item/radio/headset/headset_sec
|
||||
name = "security radio headset"
|
||||
icon_state = "sec_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_sec
|
||||
|
||||
/obj/item/radio/headset/alt/headset_sec
|
||||
name = "security bowman headset"
|
||||
icon_state = "sec_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_sec
|
||||
|
||||
/obj/item/radio/headset/earbud/headset_sec
|
||||
name = "security earbud"
|
||||
icon_state = "sec_earbud"
|
||||
ks2type = /obj/item/encryptionkey/headset_sec
|
||||
|
||||
/obj/item/radio/headset/headset_eng
|
||||
name = "engineering radio headset"
|
||||
icon_state = "eng_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_eng
|
||||
|
||||
/obj/item/radio/headset/alt/headset_eng
|
||||
name = "engineering bowman headset"
|
||||
icon_state = "eng_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_eng
|
||||
|
||||
/obj/item/radio/headset/earbud/headset_eng
|
||||
name = "engineering earbud"
|
||||
icon_state = "eng_earbud"
|
||||
ks2type = /obj/item/encryptionkey/headset_eng
|
||||
|
||||
/obj/item/radio/headset/headset_med
|
||||
name = "medical radio headset"
|
||||
icon_state = "med_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_med
|
||||
|
||||
/obj/item/radio/headset/alt/headset_med
|
||||
name = "medical bowman headset"
|
||||
icon_state = "med_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_med
|
||||
|
||||
/obj/item/radio/headset/earbud/headset_med
|
||||
name = "medical earbud"
|
||||
icon_state = "med_earbud"
|
||||
ks2type = /obj/item/encryptionkey/headset_med
|
||||
|
||||
/obj/item/radio/headset/headset_sci
|
||||
name = "science radio headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_sci
|
||||
|
||||
/obj/item/radio/headset/alt/headset_sci
|
||||
name = "science bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_sci
|
||||
|
||||
/obj/item/radio/headset/earbud/headset_sci
|
||||
name = "science earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/headset_sci
|
||||
|
||||
/obj/item/radio/headset/headset_com
|
||||
name = "command radio headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_com
|
||||
|
||||
/obj/item/radio/headset/alt/headset_com
|
||||
name = "command bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_com
|
||||
|
||||
/obj/item/radio/headset/earbud/headset_com
|
||||
name = "command earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/headset_com
|
||||
|
||||
/obj/item/radio/headset/heads/captain
|
||||
name = "site manager's headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/radio/headset/heads/captain/sfr
|
||||
name = "SFR headset"
|
||||
desc = "A headset belonging to a Sif Free Radio DJ. SFR, best tunes in the wilderness."
|
||||
icon_state = "com_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/alt/heads/captain
|
||||
name = "site manager's bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/radio/headset/earbud/heads/captain
|
||||
name = "site manager's earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/radio/headset/heads/rd
|
||||
name = "research director's headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/rd
|
||||
|
||||
/obj/item/radio/headset/alt/heads/rd
|
||||
name = "research director's bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/rd
|
||||
|
||||
/obj/item/radio/headset/earbud/heads/rd
|
||||
name = "research director's earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/heads/rd
|
||||
|
||||
/obj/item/radio/headset/heads/hos
|
||||
name = "head of security's headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/alt/heads/hos
|
||||
name = "head of security's bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/earbud/heads/hos
|
||||
name = "head of security's earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/heads/ce
|
||||
name = "chief engineer's headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/ce
|
||||
|
||||
/obj/item/radio/headset/alt/heads/ce
|
||||
name = "chief engineer's bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/ce
|
||||
|
||||
/obj/item/radio/headset/earbud/heads/ce
|
||||
name = "chief engineer's earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/heads/ce
|
||||
|
||||
/obj/item/radio/headset/heads/cmo
|
||||
name = "chief medical officer's headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/cmo
|
||||
|
||||
/obj/item/radio/headset/alt/heads/cmo
|
||||
name = "chief medical officer's bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/cmo
|
||||
|
||||
/obj/item/radio/headset/earbud/heads/cmo
|
||||
name = "chief medical officer's earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/heads/cmo
|
||||
|
||||
/obj/item/radio/headset/heads/hop
|
||||
name = "head of personnel's headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/hop
|
||||
|
||||
/obj/item/radio/headset/alt/heads/hop
|
||||
name = "head of personnel's bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/hop
|
||||
|
||||
/obj/item/radio/headset/earbud/heads/hop
|
||||
name = "head of personnel's earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/heads/hop
|
||||
|
||||
/obj/item/radio/headset/miner
|
||||
name = "mining radio headset"
|
||||
desc = "Headset used by miners. Has inbuilt short-band radio for when comms are down."
|
||||
icon_state = "mine_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/radio/headset/cargo
|
||||
name = "supply radio headset"
|
||||
icon_state = "cargo_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/radio/headset/alt/cargo
|
||||
name = "supply bowman headset"
|
||||
icon_state = "cargo_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/radio/headset/earbud/cargo
|
||||
name = "supply earbud"
|
||||
icon_state = "cargo_earbud"
|
||||
ks2type = /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/radio/headset/qm
|
||||
name = "qm radio headset"
|
||||
icon_state = "cargo_headset"
|
||||
ks2type = /obj/item/encryptionkey/qm
|
||||
|
||||
/obj/item/radio/headset/alt/qm
|
||||
name = "qm bowman headset"
|
||||
icon_state = "cargo_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/qm
|
||||
|
||||
/obj/item/radio/headset/earbud/qm
|
||||
name = "qm earbud"
|
||||
icon_state = "cargo_earbud"
|
||||
ks2type = /obj/item/encryptionkey/qm
|
||||
|
||||
/obj/item/radio/headset/service
|
||||
name = "service radio headset"
|
||||
icon_state = "srv_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_service
|
||||
|
||||
/obj/item/radio/headset/alt/service
|
||||
name = "service bowman headset"
|
||||
icon_state = "srv_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/headset_service
|
||||
|
||||
/obj/item/radio/headset/earbud/service
|
||||
name = "service earbud"
|
||||
icon_state = "srv_earbud"
|
||||
ks2type = /obj/item/encryptionkey/headset_service
|
||||
|
||||
/obj/item/radio/headset/ert
|
||||
name = "emergency response team radio headset"
|
||||
icon_state = "com_headset"
|
||||
centComm = 1
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/alt/ert
|
||||
name = "emergency response team bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/ia
|
||||
name = "internal affairs headset"
|
||||
icon_state = "com_headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/alt/ia
|
||||
name = "internal affairs bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/earbud/ia
|
||||
name = "internal affairs earbud"
|
||||
icon_state = "com_earbud"
|
||||
ks2type = /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/centcom
|
||||
name = "centcom radio headset"
|
||||
icon_state = "cent_headset"
|
||||
item_state = "headset"
|
||||
centComm = 1
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/alt/centcom
|
||||
name = "centcom bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/nanotrasen
|
||||
name = "\improper NT radio headset"
|
||||
icon_state = "nt_headset"
|
||||
centComm = 1
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/alt/nanotrasen
|
||||
name = "\improper NT bowman headset"
|
||||
icon_state = "nt_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/pathfinder
|
||||
name = "pathfinder's headset"
|
||||
icon_state = "exp_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/pathfinder
|
||||
|
||||
/obj/item/radio/headset/alt/pathfinder
|
||||
name = "pathfinder's bowman headset"
|
||||
icon_state = "exp_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/pilot
|
||||
name = "pilot's headset"
|
||||
icon_state = "pilot_headset"
|
||||
adhoc_fallback = TRUE
|
||||
|
||||
/obj/item/radio/headset/alt/pilot
|
||||
name = "pilot's bowman headset"
|
||||
icon_state = "pilot_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/explorer
|
||||
name = "away team member's headset"
|
||||
icon_state = "exp_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/explorer
|
||||
|
||||
/obj/item/radio/headset/alt/explorer
|
||||
name = "away team's bowman headset"
|
||||
icon_state = "exp_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/sar
|
||||
name = "search and rescue headset"
|
||||
icon_state = "sar_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/sar
|
||||
|
||||
/obj/item/radio/headset/alt/sar
|
||||
name = "search and rescue bowman headset"
|
||||
icon_state = "sar_headset_alt"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/sar
|
||||
|
||||
/obj/item/radio/headset/talon
|
||||
name = "talon headset"
|
||||
adhoc_fallback = TRUE
|
||||
icon_state = "pilot_headset"
|
||||
ks2type = /obj/item/encryptionkey/talon
|
||||
|
||||
/obj/item/radio/headset/alt/talon
|
||||
name = "talon bowman headset"
|
||||
adhoc_fallback = TRUE
|
||||
icon_state = "pilot_headset"
|
||||
ks2type = /obj/item/encryptionkey/talon
|
||||
|
||||
/obj/item/radio/headset/earbud/talon
|
||||
name = "talon earbud"
|
||||
adhoc_fallback = TRUE
|
||||
icon_state = "pilot_headset"
|
||||
ks2type = /obj/item/encryptionkey/talon
|
||||
|
||||
/obj/item/radio/headset/headset_rob
|
||||
name = "robotics radio headset"
|
||||
icon_state = "rob_headset"
|
||||
ks2type = /obj/item/encryptionkey/headset_rob
|
||||
|
||||
// Special Antag/Admin/Event/Other headsets
|
||||
|
||||
/obj/item/radio/headset/syndicate
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
icon_state = "syndie_headset"
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/syndicate
|
||||
|
||||
/obj/item/radio/headset/alt/syndicate
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
icon_state = "syndie_headset_alt"
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/syndicate
|
||||
|
||||
/obj/item/radio/headset/earbud/syndicate
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
icon_state = "syndie_earbud"
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/syndicate
|
||||
|
||||
/obj/item/radio/headset/raider
|
||||
origin_tech = list(TECH_ILLEGAL = 2)
|
||||
icon_state = "syndie_headset"
|
||||
syndie = 1
|
||||
ks1type = /obj/item/encryptionkey/raider
|
||||
|
||||
/obj/item/radio/headset/raider/Initialize()
|
||||
. = ..()
|
||||
set_frequency(RAID_FREQ)
|
||||
|
||||
/obj/item/radio/headset/binary
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
ks1type = /obj/item/encryptionkey/binary
|
||||
|
||||
/obj/item/radio/headset/omni //Only for the admin intercoms
|
||||
ks2type = /obj/item/encryptionkey/omni
|
||||
|
||||
/obj/item/radio/headset/mmi_radio
|
||||
name = "brain-integrated radio"
|
||||
icon = 'icons/obj/robot_component.dmi'
|
||||
icon_state = "radio"
|
||||
item_state = "headset"
|
||||
var/mmiowner = null
|
||||
var/radio_enabled = 1
|
||||
|
||||
/obj/item/radio/headset/mmi_radio/receive_range(freq, level)
|
||||
if (!radio_enabled || istype(src.loc.loc, /mob/living/silicon) || istype(src.loc.loc, /obj/item/organ/internal))
|
||||
return -1 //Transciever Disabled.
|
||||
return ..(freq, level, 1)
|
||||
|
||||
/obj/item/radio/headset/mob_headset //Adminbus headset for simplemob shenanigans.
|
||||
name = "nonhuman radio receiver"
|
||||
desc = "An updated, self-adhesive modular intercom that requires no hands to operate or ears to hold, just stick it on. Takes encryption keys"
|
||||
|
||||
/obj/item/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway.
|
||||
name = "\improper AI subspace transceiver"
|
||||
desc = "Integrated AI radio transceiver."
|
||||
icon = 'icons/obj/robot_component.dmi'
|
||||
icon_state = "radio"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/encryptionkey/heads/ai_integrated
|
||||
var/myAi = null // Atlantis: Reference back to the AI which has this radio.
|
||||
var/disabledAi = 0 // Atlantis: Used to manually disable AI's integrated radio via intellicard menu.
|
||||
|
||||
/obj/item/radio/headset/heads/ai_integrated/receive_range(freq, level)
|
||||
if (disabledAi)
|
||||
return -1 //Transciever Disabled.
|
||||
return ..(freq, level, 1)
|
||||
@@ -1,131 +0,0 @@
|
||||
/obj/item/radio/headset/centcom
|
||||
name = "centcom radio headset"
|
||||
desc = "The headset of the boss's boss."
|
||||
icon_state = "cent_headset"
|
||||
item_state = "headset"
|
||||
centComm = 1
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/centcom/alt
|
||||
name = "centcom bowman headset"
|
||||
icon_state = "com_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/nanotrasen
|
||||
name = "\improper NT radio headset"
|
||||
desc = "The headset of a Nanotrasen corporate employee."
|
||||
icon_state = "nt_headset"
|
||||
centComm = 1
|
||||
ks2type = /obj/item/encryptionkey/ert
|
||||
|
||||
/obj/item/radio/headset/nanotrasen/alt
|
||||
name = "\improper NT bowman headset"
|
||||
icon_state = "nt_headset_alt"
|
||||
|
||||
/obj/item/radio/headset
|
||||
sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/ears/mob_teshari.dmi',
|
||||
SPECIES_WEREBEAST = 'icons/inventory/ears/mob_vr_werebeast.dmi')
|
||||
|
||||
/obj/item/radio/headset/mob_headset //Adminbus headset for simplemob shenanigans.
|
||||
name = "nonhuman radio receiver"
|
||||
desc = "An updated, self-adhesive modular intercom that requires no hands to operate or ears to hold, just stick it on. Takes encryption keys"
|
||||
|
||||
/obj/item/radio/headset/mob_headset/receive_range(freq, level)
|
||||
if(ismob(src.loc))
|
||||
return ..(freq, level, 1)
|
||||
return -1
|
||||
|
||||
/obj/item/radio/headset/mob_headset/afterattack(var/atom/movable/target, mob/living/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(target,/mob/living/simple_mob))
|
||||
var/mob/living/simple_mob/M = target
|
||||
if(!M.mob_radio)
|
||||
user.drop_item()
|
||||
forceMove(M)
|
||||
M.mob_radio = src
|
||||
return
|
||||
if(M.mob_radio)
|
||||
M.mob_radio.forceMove(M.loc)
|
||||
M.mob_radio = null
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/radio/headset/headset_cargo
|
||||
desc = "A headset used by the QM's slaves."
|
||||
|
||||
/obj/item/radio/headset/headset_cargo/alt
|
||||
desc = "A bowman headset used by the QM's slaves."
|
||||
|
||||
/obj/item/radio/headset/headset_qm
|
||||
name = "qm radio headset"
|
||||
desc = "A headset used by the QM."
|
||||
icon_state = "cargo_headset"
|
||||
ks2type = /obj/item/encryptionkey/qm
|
||||
|
||||
/obj/item/radio/headset/headset_qm/alt
|
||||
name = "qm bowman headset"
|
||||
desc = "A bowman headset used by the QM."
|
||||
icon_state = "cargo_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/pathfinder
|
||||
name = "pathfinder's headset"
|
||||
desc = "Headset used by pathfinders for exploring. Access to the explorer and command channels."
|
||||
icon_state = "exp_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/pathfinder
|
||||
|
||||
/obj/item/radio/headset/pathfinder/alt
|
||||
name = "pathfinder's bowman headset"
|
||||
desc = "Bowman headset used by pathfinders for exploring. Access to the explorer and command channels."
|
||||
icon_state = "exp_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/pilot
|
||||
name = "pilot's headset"
|
||||
desc = "A headset used by pilots."
|
||||
icon_state = "pilot_headset"
|
||||
adhoc_fallback = TRUE
|
||||
|
||||
/obj/item/radio/headset/pilot/alt
|
||||
name = "pilot's bowman headset"
|
||||
desc = "A bowman headset used by pilots."
|
||||
icon_state = "pilot_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/explorer
|
||||
name = "away team member's headset"
|
||||
desc = "Headset used by the away team for exploring. Access to the away team channel."
|
||||
icon_state = "exp_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/explorer
|
||||
|
||||
/obj/item/radio/headset/explorer/alt
|
||||
name = "away team's bowman headset"
|
||||
desc = "Bowman headset used by the away team for exploring. Access to the away team channel."
|
||||
icon_state = "exp_headset_alt"
|
||||
|
||||
/obj/item/radio/headset/sar
|
||||
name = "fm radio headset"
|
||||
desc = "A headset for field medics."
|
||||
icon_state = "sar_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/sar
|
||||
|
||||
/obj/item/radio/headset/sar/alt
|
||||
name = "fm radio bowman headset"
|
||||
desc = "A bowman headset for field medics."
|
||||
icon_state = "sar_headset_alt"
|
||||
|
||||
/* //They're all volunteers now.
|
||||
/obj/item/radio/headset/volunteer
|
||||
name = "volunteer's headset"
|
||||
desc = "A headset used by volunteers to expedition teams, has access to the Away Team channel."
|
||||
icon_state = "pilot_headset"
|
||||
adhoc_fallback = TRUE
|
||||
ks2type = /obj/item/encryptionkey/explorer
|
||||
*/
|
||||
|
||||
/obj/item/radio/headset/talon
|
||||
name = "talon headset"
|
||||
desc = "A headset for communication between the crew of the ITV Talon."
|
||||
adhoc_fallback = TRUE
|
||||
icon_state = "pilot_headset"
|
||||
ks2type = /obj/item/encryptionkey/talon
|
||||
@@ -240,7 +240,7 @@ var/global/list/default_medbay_channels = list(
|
||||
return STATUS_CLOSE
|
||||
return ..()
|
||||
|
||||
/obj/item/radio/tgui_act(action, params)
|
||||
/obj/item/radio/tgui_act(action, params, datum/tgui/ui)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
@@ -251,8 +251,8 @@ var/global/list/default_medbay_channels = list(
|
||||
new_frequency = sanitize_frequency(new_frequency)
|
||||
set_frequency(new_frequency)
|
||||
if(hidden_uplink)
|
||||
if(hidden_uplink.check_trigger(usr, frequency, traitor_frequency))
|
||||
usr << browse(null, "window=radio")
|
||||
if(hidden_uplink.check_trigger(ui.user, frequency, traitor_frequency))
|
||||
ui.user << browse(null, "window=radio")
|
||||
. = TRUE
|
||||
if("broadcast")
|
||||
ToggleBroadcast()
|
||||
@@ -269,7 +269,7 @@ var/global/list/default_medbay_channels = list(
|
||||
. = TRUE
|
||||
if("specFreq")
|
||||
var/freq = params["channel"]
|
||||
if(has_channel_access(usr, freq))
|
||||
if(has_channel_access(ui.user, freq))
|
||||
set_frequency(text2num(freq))
|
||||
. = TRUE
|
||||
if("subspace")
|
||||
@@ -277,10 +277,10 @@ var/global/list/default_medbay_channels = list(
|
||||
subspace_transmission = !subspace_transmission
|
||||
if(!subspace_transmission)
|
||||
channels = list()
|
||||
to_chat(usr, span_notice("Subspace Transmission is disabled"))
|
||||
to_chat(ui.user, span_notice("Subspace Transmission is disabled"))
|
||||
else
|
||||
recalculateChannels()
|
||||
to_chat(usr, span_notice("Subspace Transmission is enabled"))
|
||||
to_chat(ui.user, span_notice("Subspace Transmission is enabled"))
|
||||
. = TRUE
|
||||
if("toggleLoudspeaker")
|
||||
if(!subspace_switchable)
|
||||
@@ -288,12 +288,12 @@ var/global/list/default_medbay_channels = list(
|
||||
loudspeaker = !loudspeaker
|
||||
|
||||
if(loudspeaker)
|
||||
to_chat(usr, span_notice("Loadspeaker enabled."))
|
||||
to_chat(ui.user, span_notice("Loadspeaker enabled."))
|
||||
else
|
||||
to_chat(usr, span_notice("Loadspeaker disabled."))
|
||||
to_chat(ui.user, span_notice("Loadspeaker disabled."))
|
||||
. = TRUE
|
||||
|
||||
if(. && iscarbon(usr))
|
||||
if(. && iscarbon(ui.user))
|
||||
playsound(src, "button", 10)
|
||||
|
||||
GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer)
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
if(!slot_check())
|
||||
to_chat(user, span_warning("You need to equip [src] before taking out [handset]."))
|
||||
else
|
||||
if(!usr.put_in_hands(handset)) //Detach the handset into the user's hands
|
||||
if(!user.put_in_hands(handset)) //Detach the handset into the user's hands
|
||||
to_chat(user, span_warning("You need a free hand to hold the handset!"))
|
||||
update_icon() //success
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
if (user.stat)
|
||||
return
|
||||
if (!user.IsAdvancedToolUser())
|
||||
to_chat(usr, span_warning("You don't have the dexterity to do this!"))
|
||||
to_chat(user, span_warning("You don't have the dexterity to do this!"))
|
||||
return
|
||||
|
||||
analyze_gases(src, user)
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
if(D.visibility_flags & HIDDEN_SCANNER)
|
||||
continue
|
||||
else
|
||||
dat += span_bold("Viral Infection") + " - Inform a Virologist or the Chief Medical Officer and administer antiviral chemicals such as Spaceacilin. Limit exposure to other personnel.<br>"
|
||||
dat += span_bold("Viral Infection") + " - Inform a Virologist or the Chief Medical Officer and administer antiviral chemicals such as Spaceacillin. Limit exposure to other personnel.<br>"
|
||||
if(robotparts)
|
||||
dat += span_bold("Robotic body parts") + " - Should not be repaired by medical personnel, refer to robotics if damaged."
|
||||
|
||||
|
||||
@@ -248,7 +248,7 @@
|
||||
else
|
||||
dat += span_warning("Unknown substance[(unknown > 1)?"s":""] found in subject's dermis.")
|
||||
dat += "<br>"
|
||||
if(C.resistances.len)
|
||||
if(LAZYLEN(C.resistances))
|
||||
for (var/datum/disease/virus in C.GetViruses())
|
||||
if(virus.visibility_flags & HIDDEN_SCANNER || virus.visibility_flags & HIDDEN_PANDEMIC)
|
||||
continue
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
|
||||
operating = 1
|
||||
while(selected_camera && Adjacent(user))
|
||||
selected_camera = tgui_input_list(usr, "Select camera to view.", "Camera Choice", cameras)
|
||||
selected_camera = tgui_input_list(user, "Select camera to view.", "Camera Choice", cameras)
|
||||
selected_camera = null
|
||||
operating = 0
|
||||
|
||||
|
||||
@@ -20,13 +20,13 @@
|
||||
|
||||
var/ticket_name = sanitize(tgui_input_text(user, "The Name of the person you are issuing the ticket to.", "Name", max_length = 100))
|
||||
if(length(ticket_name) > 100)
|
||||
tgui_alert_async(usr, "Entered name too long. 100 character limit.","Error")
|
||||
tgui_alert_async(user, "Entered name too long. 100 character limit.","Error")
|
||||
return
|
||||
if(!ticket_name)
|
||||
return
|
||||
var/details = sanitize(tgui_input_text(user, "What is the ticket for? Avoid entering personally identifiable information in this section. This information should not be used to harrass or otherwise make the person feel uncomfortable. (Max length: 200)", "Ticket Details", max_length = 200))
|
||||
if(length(details) > 200)
|
||||
tgui_alert_async(usr, "Entered details too long. 200 character limit.","Error")
|
||||
tgui_alert_async(user, "Entered details too long. 200 character limit.","Error")
|
||||
return
|
||||
if(!details)
|
||||
return
|
||||
@@ -71,13 +71,13 @@
|
||||
|
||||
var/ticket_name = sanitize(tgui_input_text(user, "The Name of the person you are issuing the ticket to.", "Name", max_length = 100))
|
||||
if(length(ticket_name) > 100)
|
||||
tgui_alert_async(usr, "Entered name too long. 100 character limit.","Error")
|
||||
tgui_alert_async(user, "Entered name too long. 100 character limit.","Error")
|
||||
return
|
||||
if(!ticket_name)
|
||||
return
|
||||
var/details = sanitize(tgui_input_text(user, "What is the ticket for? This could be anything like travel to a destination or permission to do something! This is not official and does not override any rules or authorities on the station.", "Ticket Details", max_length = 200))
|
||||
if(length(details) > 200)
|
||||
tgui_alert_async(usr, "Entered details too long. 200 character limit.","Error")
|
||||
tgui_alert_async(user, "Entered details too long. 200 character limit.","Error")
|
||||
return
|
||||
if(!details)
|
||||
return
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
data["valve"] = valve_open
|
||||
return data
|
||||
|
||||
/obj/item/transfer_valve/tgui_act(action, params)
|
||||
/obj/item/transfer_valve/tgui_act(action, params, datum/tgui/ui)
|
||||
if(..())
|
||||
return
|
||||
. = TRUE
|
||||
@@ -99,7 +99,7 @@
|
||||
toggle_valve()
|
||||
if("device")
|
||||
if(attached_device)
|
||||
attached_device.attack_self(usr)
|
||||
attached_device.attack_self(ui.user)
|
||||
if("remove_device")
|
||||
if(attached_device)
|
||||
attached_device.forceMove(get_turf(src))
|
||||
@@ -110,7 +110,7 @@
|
||||
. = FALSE
|
||||
if(.)
|
||||
update_icon()
|
||||
add_fingerprint(usr)
|
||||
add_fingerprint(ui.user)
|
||||
|
||||
/obj/item/transfer_valve/proc/process_activation(var/obj/item/D)
|
||||
if(toggle)
|
||||
|
||||
@@ -412,7 +412,7 @@ GLOBAL_LIST_BOILERPLATE(premade_tele_beacons, /obj/item/perfect_tele_beacon/stat
|
||||
var/mob/living/L = user
|
||||
var/confirm = tgui_alert(user, "You COULD eat the beacon...", "Eat beacon?", list("Eat it!", "No, thanks."))
|
||||
if(confirm == "Eat it!")
|
||||
var/obj/belly/bellychoice = tgui_input_list(usr, "Which belly?","Select A Belly", L.vore_organs)
|
||||
var/obj/belly/bellychoice = tgui_input_list(user, "Which belly?","Select A Belly", L.vore_organs)
|
||||
if(bellychoice)
|
||||
user.visible_message(span_warning("[user] is trying to stuff \the [src] into [user.gender == MALE ? "his" : user.gender == FEMALE ? "her" : "their"] [bellychoice.name]!"),span_notice("You begin putting \the [src] into your [bellychoice.name]!"))
|
||||
if(do_after(user,5 SECONDS,src))
|
||||
|
||||
@@ -197,7 +197,7 @@
|
||||
switch(action)
|
||||
if("buy")
|
||||
var/datum/uplink_item/UI = (locate(params["ref"]) in uplink.items)
|
||||
UI.buy(src, usr)
|
||||
UI.buy(src, ui.user)
|
||||
return TRUE
|
||||
if("lock")
|
||||
toggle()
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
//For bypassing locked /obj/structure/simple_doors
|
||||
|
||||
/obj/item/lockpick
|
||||
name = "set of lockpicks"
|
||||
desc = "A set of picks and tension wrenches, ideal for picking old-style mechanical locks... not that any of those exist on most NT facilities these days. Still, it might be useful elsewhere?"
|
||||
icon = 'icons/obj/lockpicks.dmi'
|
||||
icon_state = "lockpicks"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/pick_type = "simple"
|
||||
var/pick_time = 10 SECONDS
|
||||
var/pick_verb = "pick"
|
||||
|
||||
/obj/item/lockpick/afterattack(atom/A, mob/user)
|
||||
if(!user.IsAdvancedToolUser()) //no lockpicking for monkeys
|
||||
return
|
||||
if(istype(A, /obj/structure/simple_door))
|
||||
var/obj/structure/simple_door/D = A
|
||||
if(!D.locked) //you can pick your nose, but you can't pick an unlocked door
|
||||
to_chat(user, span_notice("\The [D] isn't locked."))
|
||||
return
|
||||
else if(D.lock_type != pick_type) //make sure our types match
|
||||
to_chat(user, span_warning("\The [src] can't pick \the [D]. Another tool might work?"))
|
||||
return
|
||||
else if(!D.can_pick) //make sure we're actually allowed to bypass it at all
|
||||
to_chat(user, span_warning("\The [D] can't be [pick_verb]ed."))
|
||||
return
|
||||
else //finally, we can assume that they do match
|
||||
to_chat(user, span_notice("You start to [pick_verb] the lock on \the [D]..."))
|
||||
playsound(src, D.keysound,100, 1)
|
||||
if(do_after(user, pick_time * D.lock_difficulty))
|
||||
to_chat(user, span_notice("Success!"))
|
||||
D.locked = FALSE
|
||||
else if(istype(A,/mob/living/carbon/human)) //you can pick your friends, and you can pick your nose, but you can't pick your friend's nose
|
||||
var/mob/living/carbon/human/H = A
|
||||
if(user.zone_sel.selecting == BP_HEAD)
|
||||
if(H == user)
|
||||
to_chat(user, span_notice("Your nose isn't locked. If you're feeling stuffy, maybe you should talk to a doctor..?"))
|
||||
else
|
||||
user.visible_message(span_notice("[user] tries to [pick_verb] [H]'s nose with \the [src]! They don't seem to be having much success."),span_notice("You try to [pick_verb] [H]'s nose. It doesn't seem to be working."))
|
||||
return
|
||||
|
||||
/obj/item/lockpick/pick_gun
|
||||
name = "pick gun"
|
||||
desc = "A more sophisticated and automated alternative to traditional lockpicking methods. Contains a dazzling array of tools in a simple-to-use housing: just press the face plate against the lock face and hold the trigger down until it goes click."
|
||||
icon_state = "pick_gun"
|
||||
pick_time = 3 SECONDS
|
||||
|
||||
/obj/item/lockpick/mag_sequencer
|
||||
name = "magnetic sequencer"
|
||||
desc = "A deceptively simple gadget that brute-forces magnetic locks using a small electromagnet. A predecessor to the cryptographic sequencer, a more complicated device that is considered contraband in most jurisdictions. Not that these aren't illegal either, mind you!"
|
||||
icon_state = "mag_sequencer"
|
||||
pick_type = "maglock"
|
||||
pick_time = 5 SECONDS
|
||||
pick_verb = "bypass"
|
||||
@@ -0,0 +1,28 @@
|
||||
/obj/item/petrifier
|
||||
name = "odd button"
|
||||
desc = "A metal device with a single, purple button on it, and a tiny interface."
|
||||
icon = 'icons/obj/machines/petrification.dmi'
|
||||
icon_state = "petrifier"
|
||||
|
||||
var/mob/living/carbon/human/target
|
||||
var/identifier = "statue"
|
||||
var/material = "stone"
|
||||
var/adjective = "hardens"
|
||||
var/tint = "#FFFFFF"
|
||||
var/discard_clothes = TRUE
|
||||
var/able_to_unpetrify = TRUE
|
||||
var/obj/machinery/petrification/linked
|
||||
|
||||
/obj/item/petrifier/Initialize(mapload, var/to_link)
|
||||
. = ..()
|
||||
linked = to_link
|
||||
|
||||
/obj/item/petrifier/attack_self(var/mob/user)
|
||||
. = ..()
|
||||
if (!isturf(user.loc) && user.get_ultimate_mob() != target)
|
||||
to_chat(user, span_warning("The device beeps but does nothing."))
|
||||
return
|
||||
if (linked?.petrify(user, src))
|
||||
visible_message(span_notice("A ray of purple light streams out of \the [src], aimed directly at [target]. Everywhere the light touches on them quickly [adjective] into [material]."))
|
||||
to_chat(user, span_warning("The device fizzles and crumbles into dust."))
|
||||
qdel(src)
|
||||
@@ -225,7 +225,6 @@
|
||||
|
||||
feedback_inc("cyborg_birth",1)
|
||||
callHook("borgify", list(O))
|
||||
O.namepick()
|
||||
|
||||
qdel(src)
|
||||
else
|
||||
@@ -235,7 +234,7 @@
|
||||
var/t = sanitizeSafe(tgui_input_text(user, "Enter new robot name", src.name, src.created_name), MAX_NAME_LEN)
|
||||
if (!t)
|
||||
return
|
||||
if (!in_range(src, usr) && src.loc != usr)
|
||||
if (!in_range(src, user) && src.loc != user)
|
||||
return
|
||||
|
||||
src.created_name = t
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
/obj/item/selectable_item/attack_self(mob/user as mob)
|
||||
tgui_alert(user, {"[preface_string]"}, preface_title)
|
||||
var/chosen_item = tgui_input_list(usr, selection_string, selection_title, item_options)
|
||||
var/chosen_item = tgui_input_list(user, selection_string, selection_title, item_options)
|
||||
chosen_item = item_options[chosen_item]
|
||||
if(!QDELETED(src) && chosen_item)
|
||||
user.drop_item()
|
||||
@@ -45,4 +45,4 @@
|
||||
preface_title = "Gender Chemistry Kit"
|
||||
item_options = list("Androrovir" = /obj/item/reagent_containers/glass/beaker/vial/androrovir,
|
||||
"Gynorovir" = /obj/item/reagent_containers/glass/beaker/vial/gynorovir,
|
||||
"Androgynorovir" = /obj/item/reagent_containers/glass/beaker/vial/androgynorovir)
|
||||
"Androgynorovir" = /obj/item/reagent_containers/glass/beaker/vial/androgynorovir)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
var/obj/item/weldingtool/WT = W.get_welder()
|
||||
if(WT.remove_fuel(0, user))
|
||||
cut_overlays()
|
||||
to_chat(usr, "You slice off [src]'s uneven chunks of aluminum and scorch marks.")
|
||||
to_chat(user, "You slice off [src]'s uneven chunks of aluminum and scorch marks.")
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
var/multiplier = text2num(params["multiplier"])
|
||||
if(!multiplier || (multiplier <= 0)) //href exploit protection
|
||||
return
|
||||
produce_recipe(R, multiplier, usr)
|
||||
produce_recipe(R, multiplier, ui.user)
|
||||
return TRUE
|
||||
|
||||
/obj/item/stack/proc/is_valid_recipe(datum/stack_recipe/R, list/recipe_list)
|
||||
@@ -402,7 +402,7 @@
|
||||
|
||||
/obj/item/stack/attack_hand(mob/user as mob)
|
||||
if (user.get_inactive_hand() == src)
|
||||
var/N = tgui_input_number(usr, "How many stacks of [src] would you like to split off? There are currently [amount].", "Split stacks", 1, amount, 1)
|
||||
var/N = tgui_input_number(user, "How many stacks of [src] would you like to split off? There are currently [amount].", "Split stacks", 1, amount, 1)
|
||||
if(N != round(N))
|
||||
to_chat(user, span_warning("You cannot separate a non-whole number of stacks!"))
|
||||
return
|
||||
@@ -413,8 +413,8 @@
|
||||
src.add_fingerprint(user)
|
||||
F.add_fingerprint(user)
|
||||
spawn(0)
|
||||
if (src && usr.machine==src)
|
||||
src.interact(usr)
|
||||
if (src && user.machine==src)
|
||||
src.interact(user)
|
||||
else
|
||||
..()
|
||||
return
|
||||
@@ -425,10 +425,10 @@
|
||||
src.transfer_to(S)
|
||||
|
||||
spawn(0) //give the stacks a chance to delete themselves if necessary
|
||||
if (S && usr.machine==S)
|
||||
S.interact(usr)
|
||||
if (src && usr.machine==src)
|
||||
src.interact(usr)
|
||||
if (S && user.machine==S)
|
||||
S.interact(user)
|
||||
if (src && user.machine==src)
|
||||
src.interact(user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -53,8 +53,8 @@
|
||||
return
|
||||
|
||||
if(WT.remove_fuel(0,user))
|
||||
new welds_into(usr.loc)
|
||||
usr.update_icon()
|
||||
new welds_into(user.loc)
|
||||
user.update_icon()
|
||||
visible_message(span_notice("\The [src] is shaped by [user.name] with the welding tool."),"You hear welding.")
|
||||
var/obj/item/stack/tile/T = src
|
||||
src = null
|
||||
|
||||
@@ -197,8 +197,8 @@
|
||||
to_chat(user, span_warning("You can't do that right now!"))
|
||||
return
|
||||
|
||||
if(tgui_alert(usr, "Are you sure you want to recolor your blade?", "Confirm Recolor", list("Yes", "No")) == "Yes")
|
||||
var/energy_color_input = input(usr,"","Choose Energy Color",lcolor) as color|null
|
||||
if(tgui_alert(user, "Are you sure you want to recolor your blade?", "Confirm Recolor", list("Yes", "No")) == "Yes")
|
||||
var/energy_color_input = input(user,"","Choose Energy Color",lcolor) as color|null
|
||||
if(energy_color_input)
|
||||
lcolor = sanitize_hexcolor(energy_color_input)
|
||||
update_icon()
|
||||
|
||||
@@ -556,35 +556,6 @@
|
||||
/obj/item/toy/AI/proc/cooldownreset()
|
||||
cooldown = 0
|
||||
|
||||
/*
|
||||
* Hand buzzer
|
||||
*/
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy
|
||||
name = "steel ring"
|
||||
desc = "Torus shaped finger decoration. It has a small piece of metal on the palm-side."
|
||||
icon_state = "seal-signet"
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy/Touch(var/atom/A, var/proximity)
|
||||
if(proximity && istype(usr, /mob/living/carbon/human))
|
||||
|
||||
return zap(usr, A, proximity)
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy/zap(var/mob/living/carbon/human/user, var/atom/movable/target, var/proximity)
|
||||
. = FALSE
|
||||
if(user.a_intent == I_HELP && battery.percent() >= 50)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
|
||||
to_chat(L, span_warning("You feel a powerful shock!"))
|
||||
if(!.)
|
||||
playsound(L, 'sound/effects/sparks7.ogg', 40, 1)
|
||||
L.electrocute_act(battery.percent() * 0, src)
|
||||
return .
|
||||
|
||||
return 0
|
||||
|
||||
/*
|
||||
* Toy cuffs
|
||||
*/
|
||||
@@ -1052,9 +1023,9 @@
|
||||
activate(user)
|
||||
|
||||
/obj/item/toy/desk/MouseDrop(mob/user as mob) // Code from Paper bin, so you can still pick up the deck
|
||||
if((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr))))))
|
||||
if(!istype(usr, /mob/living/simple_mob))
|
||||
if( !usr.get_active_hand() ) //if active hand is empty
|
||||
if((user == usr && (!( user.restrained() ) && (!( user.stat ) && (user.contents.Find(src) || in_range(src, user))))))
|
||||
if(!istype(user, /mob/living/simple_mob))
|
||||
if(!user.get_active_hand()) //if active hand is empty
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
|
||||
|
||||
|
||||
@@ -115,6 +115,12 @@
|
||||
drop_sound = 'sound/items/drop/food.ogg'
|
||||
pickup_sound = 'sound/items/pickup/food.ogg'
|
||||
|
||||
/obj/item/trash/turkeybones
|
||||
name = "turkey bones"
|
||||
icon_state = "turkeybones"
|
||||
drop_sound = 'sound/items/drop/food.ogg'
|
||||
pickup_sound = 'sound/items/pickup/food.ogg'
|
||||
|
||||
/obj/item/trash/pistachios
|
||||
name = "pistachios packet"
|
||||
icon_state = "pistachios_pack"
|
||||
|
||||
@@ -30,51 +30,51 @@ AI MODULES
|
||||
if (istype(AM, /obj/machinery/computer/aiupload))
|
||||
var/obj/machinery/computer/aiupload/comp = AM
|
||||
if(comp.stat & NOPOWER)
|
||||
to_chat(usr, "The upload computer has no power!")
|
||||
to_chat(user, "The upload computer has no power!")
|
||||
return
|
||||
if(comp.stat & BROKEN)
|
||||
to_chat(usr, "The upload computer is broken!")
|
||||
to_chat(user, "The upload computer is broken!")
|
||||
return
|
||||
if (!comp.current)
|
||||
to_chat(usr, "You haven't selected an AI to transmit laws to!")
|
||||
to_chat(user, "You haven't selected an AI to transmit laws to!")
|
||||
return
|
||||
|
||||
if (comp.current.stat == 2 || comp.current.control_disabled == 1)
|
||||
to_chat(usr, "Upload failed. No signal is being detected from the AI.")
|
||||
to_chat(user, "Upload failed. No signal is being detected from the AI.")
|
||||
else if (comp.current.see_in_dark == 0)
|
||||
to_chat(usr, "Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power.")
|
||||
to_chat(user, "Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power.")
|
||||
else
|
||||
src.transmitInstructions(comp.current, usr)
|
||||
src.transmitInstructions(comp.current, user)
|
||||
to_chat(comp.current, "These are your laws now:")
|
||||
comp.current.show_laws()
|
||||
for(var/mob/living/silicon/robot/R in mob_list)
|
||||
if(R.lawupdate && (R.connected_ai == comp.current))
|
||||
to_chat(R, "These are your laws now:")
|
||||
R.show_laws()
|
||||
to_chat(usr, "Upload complete. The AI's laws have been modified.")
|
||||
to_chat(user, "Upload complete. The AI's laws have been modified.")
|
||||
|
||||
|
||||
else if (istype(AM, /obj/machinery/computer/borgupload))
|
||||
var/obj/machinery/computer/borgupload/comp = AM
|
||||
if(comp.stat & NOPOWER)
|
||||
to_chat(usr, "The upload computer has no power!")
|
||||
to_chat(user, "The upload computer has no power!")
|
||||
return
|
||||
if(comp.stat & BROKEN)
|
||||
to_chat(usr, "The upload computer is broken!")
|
||||
to_chat(user, "The upload computer is broken!")
|
||||
return
|
||||
if (!comp.current)
|
||||
to_chat(usr, "You haven't selected a robot to transmit laws to!")
|
||||
to_chat(user, "You haven't selected a robot to transmit laws to!")
|
||||
return
|
||||
|
||||
if (comp.current.stat == 2 || comp.current.emagged)
|
||||
to_chat(usr, "Upload failed. No signal is being detected from the robot.")
|
||||
to_chat(user, "Upload failed. No signal is being detected from the robot.")
|
||||
else if (comp.current.connected_ai)
|
||||
to_chat(usr, "Upload failed. The robot is slaved to an AI.")
|
||||
to_chat(user, "Upload failed. The robot is slaved to an AI.")
|
||||
else
|
||||
src.transmitInstructions(comp.current, usr)
|
||||
src.transmitInstructions(comp.current, user)
|
||||
to_chat(comp.current, "These are your laws now:")
|
||||
comp.current.show_laws()
|
||||
to_chat(usr, "Upload complete. The robot's laws have been modified.")
|
||||
to_chat(user, "Upload complete. The robot's laws have been modified.")
|
||||
|
||||
else if(istype(AM, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = AM
|
||||
@@ -133,13 +133,13 @@ AI MODULES
|
||||
|
||||
/obj/item/aiModule/safeguard/attack_self(var/mob/user as mob)
|
||||
..()
|
||||
var/targName = sanitize(tgui_input_text(usr, "Please enter the name of the person to safeguard.", "Safeguard who?", user.name))
|
||||
var/targName = sanitize(tgui_input_text(user, "Please enter the name of the person to safeguard.", "Safeguard who?", user.name))
|
||||
targetName = targName
|
||||
desc = text("A 'safeguard' AI module: 'Safeguard []. Anyone threatening or attempting to harm [] is no longer to be considered a crew member, and is a threat which must be neutralized.'", targetName, targetName)
|
||||
|
||||
/obj/item/aiModule/safeguard/install(var/obj/machinery/computer/C, var/mob/living/user)
|
||||
if(!targetName)
|
||||
to_chat(usr, "No name detected on module, please enter one.")
|
||||
to_chat(user, "No name detected on module, please enter one.")
|
||||
return 0
|
||||
..()
|
||||
|
||||
@@ -159,13 +159,13 @@ AI MODULES
|
||||
|
||||
/obj/item/aiModule/oneHuman/attack_self(var/mob/user as mob)
|
||||
..()
|
||||
var/targName = sanitize(tgui_input_text(usr, "Please enter the name of the person who is the only crew member.", "Who?", user.real_name))
|
||||
var/targName = sanitize(tgui_input_text(user, "Please enter the name of the person who is the only crew member.", "Who?", user.real_name))
|
||||
targetName = targName
|
||||
desc = text("A 'one crew member' AI module: 'Only [] is a crew member.'", targetName)
|
||||
|
||||
/obj/item/aiModule/oneHuman/install(var/obj/machinery/computer/C, var/mob/living/user)
|
||||
if(!targetName)
|
||||
to_chat(usr, "No name detected on module, please enter one.")
|
||||
to_chat(user, "No name detected on module, please enter one.")
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
@@ -240,11 +240,11 @@ AI MODULES
|
||||
|
||||
/obj/item/aiModule/freeform/attack_self(var/mob/user as mob)
|
||||
..()
|
||||
var/new_lawpos = tgui_input_number(usr, "Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos)
|
||||
var/new_lawpos = tgui_input_number(user, "Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos)
|
||||
if(new_lawpos < MIN_SUPPLIED_LAW_NUMBER) return
|
||||
lawpos = min(new_lawpos, MAX_SUPPLIED_LAW_NUMBER)
|
||||
var/newlaw = ""
|
||||
var/targName = sanitize(tgui_input_text(usr, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw))
|
||||
var/targName = sanitize(tgui_input_text(user, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw))
|
||||
newFreeFormLaw = targName
|
||||
desc = "A 'freeform' AI module: ([lawpos]) '[newFreeFormLaw]'"
|
||||
|
||||
@@ -257,7 +257,7 @@ AI MODULES
|
||||
|
||||
/obj/item/aiModule/freeform/install(var/obj/machinery/computer/C, var/mob/living/user)
|
||||
if(!newFreeFormLaw)
|
||||
to_chat(usr, "No law detected on module, please create one.")
|
||||
to_chat(user, "No law detected on module, please create one.")
|
||||
return 0
|
||||
..()
|
||||
|
||||
@@ -362,7 +362,7 @@ AI MODULES
|
||||
/obj/item/aiModule/freeformcore/attack_self(var/mob/user as mob)
|
||||
..()
|
||||
var/newlaw = ""
|
||||
var/targName = sanitize(tgui_input_text(usr, "Please enter a new core law for the AI.", "Freeform Law Entry", newlaw))
|
||||
var/targName = sanitize(tgui_input_text(user, "Please enter a new core law for the AI.", "Freeform Law Entry", newlaw))
|
||||
newFreeFormLaw = targName
|
||||
desc = "A 'freeform' Core AI module: '[newFreeFormLaw]'"
|
||||
|
||||
@@ -373,7 +373,7 @@ AI MODULES
|
||||
|
||||
/obj/item/aiModule/freeformcore/install(var/obj/machinery/computer/C, var/mob/living/user)
|
||||
if(!newFreeFormLaw)
|
||||
to_chat(usr, "No law detected on module, please create one.")
|
||||
to_chat(user, "No law detected on module, please create one.")
|
||||
return 0
|
||||
..()
|
||||
|
||||
@@ -386,7 +386,7 @@ AI MODULES
|
||||
/obj/item/aiModule/syndicate/attack_self(var/mob/user as mob)
|
||||
..()
|
||||
var/newlaw = ""
|
||||
var/targName = sanitize(tgui_input_text(usr, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw))
|
||||
var/targName = sanitize(tgui_input_text(user, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw))
|
||||
newFreeFormLaw = targName
|
||||
desc = "A hacked AI law module: '[newFreeFormLaw]'"
|
||||
|
||||
@@ -402,7 +402,7 @@ AI MODULES
|
||||
|
||||
/obj/item/aiModule/syndicate/install(var/obj/machinery/computer/C, var/mob/living/user)
|
||||
if(!newFreeFormLaw)
|
||||
to_chat(usr, "No law detected on module, please create one.")
|
||||
to_chat(user, "No law detected on module, please create one.")
|
||||
return 0
|
||||
..()
|
||||
|
||||
|
||||
@@ -112,10 +112,10 @@
|
||||
|
||||
return data
|
||||
|
||||
/obj/item/pipe_dispenser/tgui_act(action, params)
|
||||
/obj/item/pipe_dispenser/tgui_act(action, params, datum/tgui/ui)
|
||||
if(..())
|
||||
return TRUE
|
||||
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
|
||||
if(!ui.user.canmove || ui.user.stat || ui.user.restrained() || !in_range(loc, ui.user))
|
||||
return TRUE
|
||||
var/playeffect = TRUE
|
||||
switch(action)
|
||||
@@ -217,7 +217,7 @@
|
||||
var/obj/item/pipe/P = new pipe_item_type(get_turf(A), path, queued_p_dir)
|
||||
|
||||
P.update()
|
||||
P.add_fingerprint(usr)
|
||||
P.add_fingerprint(user)
|
||||
if(R.paintable)
|
||||
P.color = pipe_colors[paint_color]
|
||||
P.setPipingLayer(queued_piping_layer)
|
||||
@@ -248,7 +248,7 @@
|
||||
|
||||
activate()
|
||||
|
||||
C.add_fingerprint(usr)
|
||||
C.add_fingerprint(user)
|
||||
C.update_icon()
|
||||
if(mode & WRENCH_MODE)
|
||||
do_wrench(C, user)
|
||||
|
||||
@@ -74,14 +74,14 @@
|
||||
to_chat(user, span_warning("Circuit controls are locked."))
|
||||
return
|
||||
var/existing_networks = jointext(network,",")
|
||||
var/input = sanitize(tgui_input_text(usr, "Which networks would you like to connect this camera console circuit to? Separate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Multitool-Circuitboard interface", existing_networks))
|
||||
var/input = sanitize(tgui_input_text(user, "Which networks would you like to connect this camera console circuit to? Separate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Multitool-Circuitboard interface", existing_networks))
|
||||
if(!input)
|
||||
to_chat(usr, "No input found please hang up and try your call again.")
|
||||
to_chat(user, "No input found please hang up and try your call again.")
|
||||
return
|
||||
var/list/tempnetwork = splittext(input, ",")
|
||||
tempnetwork = difflist(tempnetwork,restricted_camera_networks,1)
|
||||
if(tempnetwork.len < 1)
|
||||
to_chat(usr, "No network found please hang up and try your call again.")
|
||||
to_chat(user, "No network found please hang up and try your call again.")
|
||||
return
|
||||
network = tempnetwork
|
||||
return
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
opposite_catastasis = "BROAD"
|
||||
catastasis = "STANDARD"
|
||||
|
||||
switch(tgui_alert(usr, "Current receiver spectrum is set to: [catastasis]","Multitool-Circuitboard interface",list("Switch to [opposite_catastasis]","Cancel")))
|
||||
switch(tgui_alert(user, "Current receiver spectrum is set to: [catastasis]","Multitool-Circuitboard interface",list("Switch to [opposite_catastasis]","Cancel")))
|
||||
if("Switch to STANDARD","Switch to BROAD")
|
||||
src.contraband_enabled = !src.contraband_enabled
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
/obj/item/dnainjector/attack(mob/M as mob, mob/user as mob)
|
||||
if (!istype(M, /mob))
|
||||
return
|
||||
if (!usr.IsAdvancedToolUser())
|
||||
if (!user.IsAdvancedToolUser())
|
||||
return
|
||||
if(inuse)
|
||||
return 0
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/plastique/attack_self(mob/user as mob)
|
||||
var/newtime = tgui_input_number(usr, "Please set the timer.", "Timer", 10, 60000, 10)
|
||||
var/newtime = tgui_input_number(user, "Please set the timer.", "Timer", 10, 60000, 10)
|
||||
if(user.get_active_hand() == src)
|
||||
newtime = CLAMP(newtime, 10, 60000)
|
||||
timer = newtime
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
|
||||
if (!safety)
|
||||
if (src.reagents.total_volume < 1)
|
||||
to_chat(usr, span_notice("\The [src] is empty."))
|
||||
to_chat(user, span_notice("\The [src] is empty."))
|
||||
return
|
||||
|
||||
if (world.time < src.last_use + 20)
|
||||
@@ -136,7 +136,7 @@
|
||||
W.set_color()
|
||||
W.set_up(my_target)
|
||||
|
||||
if((istype(usr.loc, /turf/space)) || (usr.lastarea.get_gravity() == 0))
|
||||
if((istype(user.loc, /turf/space)) || (user.lastarea.get_gravity() == 0))
|
||||
user.inertia_dir = get_dir(target, user)
|
||||
step(user, user.inertia_dir)
|
||||
else
|
||||
|
||||
@@ -11,15 +11,15 @@ THAT STUPID GAME KIT
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/item/game_kit/MouseDrop(mob/user as mob)
|
||||
if (user == usr && !usr.restrained() && !usr.stat && (usr.contents.Find(src) || in_range(src, usr)))
|
||||
if (usr.hand)
|
||||
if (!usr.l_hand)
|
||||
if (user == usr && !user.restrained() && !user.stat && (user.contents.Find(src) || in_range(src, user)))
|
||||
if (user.hand)
|
||||
if (!user.l_hand)
|
||||
spawn (0)
|
||||
src.attack_hand(usr, 1, 1)
|
||||
src.attack_hand(user, 1, 1)
|
||||
else
|
||||
if (!usr.r_hand)
|
||||
if (!user.r_hand)
|
||||
spawn (0)
|
||||
src.attack_hand(usr, 0, 1)
|
||||
src.attack_hand(user, 0, 1)
|
||||
|
||||
/obj/item/game_kit/proc/update()
|
||||
var/dat = text("<CENTER><B>Game Board</B></CENTER><BR><a href='?src=\ref[];mode=hia'>[]</a> <a href='?src=\ref[];mode=remove'>remove</a><HR><table width= 256 border= 0 height= 256 cellspacing= 0 cellpadding= 0 >", src, (src.selected ? text("Selected: []", src.selected) : "Nothing Selected"), src)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
if(detonator)
|
||||
// detonator.loc=src.loc
|
||||
detonator.detached()
|
||||
usr.put_in_hands(detonator)
|
||||
user.put_in_hands(detonator)
|
||||
detonator=null
|
||||
det_time = null
|
||||
stage=0
|
||||
|
||||
@@ -130,11 +130,11 @@
|
||||
if(istype(O, /obj/item/stack/telecrystal))
|
||||
var/obj/item/stack/telecrystal/T = O
|
||||
if(T.get_amount() < 1)
|
||||
to_chat(usr, span_notice("You are not adding enough telecrystals to fuel \the [src]."))
|
||||
to_chat(user, span_notice("You are not adding enough telecrystals to fuel \the [src]."))
|
||||
return
|
||||
uses += T.get_amount()*0.5 //Gives 5 uses per 10 TC
|
||||
uses = CEILING(uses, 1) //Ensures no decimal uses nonsense, rounds up to be nice
|
||||
to_chat(usr, span_notice("You add \the [O] to \the [src]. Increasing the uses of \the [src] to [uses]."))
|
||||
to_chat(user, span_notice("You add \the [O] to \the [src]. Increasing the uses of \the [src] to [uses]."))
|
||||
qdel(O)
|
||||
|
||||
|
||||
@@ -201,13 +201,13 @@
|
||||
if(I)
|
||||
icon = I
|
||||
|
||||
/obj/item/card_fluff/attack_self()
|
||||
/obj/item/card_fluff/attack_self(mob/user)
|
||||
|
||||
var/choice = tgui_input_list(usr, "What element would you like to customize?", "Customize Card", list("Band","Stamp","Reset"))
|
||||
var/choice = tgui_input_list(user, "What element would you like to customize?", "Customize Card", list("Band","Stamp","Reset"))
|
||||
if(!choice) return
|
||||
|
||||
if(choice == "Band")
|
||||
var/bandchoice = tgui_input_list(usr, "Select colour", "Band colour", list("red","orange","green","dark green","medical blue","dark blue","purple","tan","pink","gold","white","black"))
|
||||
var/bandchoice = tgui_input_list(user, "Select colour", "Band colour", list("red","orange","green","dark green","medical blue","dark blue","purple","tan","pink","gold","white","black"))
|
||||
if(!bandchoice) return
|
||||
|
||||
if(bandchoice == "red")
|
||||
@@ -238,7 +238,7 @@
|
||||
update_icon()
|
||||
return
|
||||
else if(choice == "Stamp")
|
||||
var/stampchoice = tgui_input_list(usr, "Select image", "Stamp image", list("ship","cross","big ears","shield","circle-cross","target","smile","frown","peace","exclamation"))
|
||||
var/stampchoice = tgui_input_list(user, "Select image", "Stamp image", list("ship","cross","big ears","shield","circle-cross","target","smile","frown","peace","exclamation"))
|
||||
if(!stampchoice) return
|
||||
|
||||
if(stampchoice == "ship")
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
if(!registered_user && register_user(user))
|
||||
to_chat(user, span_notice("The microscanner marks you as its owner, preventing others from accessing its internals."))
|
||||
if(registered_user == user)
|
||||
switch(tgui_alert(usr, "Would you like to edit the ID, or show it?","Show or Edit?", list("Edit","Show")))
|
||||
switch(tgui_alert(user, "Would you like to edit the ID, or show it?","Show or Edit?", list("Edit","Show")))
|
||||
if(null)
|
||||
return
|
||||
if("Edit")
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
var/t = tgui_input_text(user, "What would you like the label to be?", text("[]", src.name), null, MAX_NAME_LEN)
|
||||
if (user.get_active_hand() != I)
|
||||
return
|
||||
if((!in_range(src, usr) && src.loc != user))
|
||||
if((!in_range(src, user) && src.loc != user))
|
||||
return
|
||||
t = sanitizeSafe(t, MAX_NAME_LEN)
|
||||
if(t)
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
if(container.reagents.total_volume < container.volume)
|
||||
var/container_name = container.name
|
||||
if(rimplant.reagents.trans_to(container, amount = rimplant.transfer_amount))
|
||||
user.visible_message(span_notice("[usr] [pick(rimplant.emote_descriptor)] into \the [container_name]."),
|
||||
user.visible_message(span_notice("[user] [pick(rimplant.emote_descriptor)] into \the [container_name]."),
|
||||
span_notice("You [pick(rimplant.self_emote_descriptor)] some [rimplant.reagent_name] into \the [container_name]."))
|
||||
if(prob(5))
|
||||
src.visible_message(span_notice("[src] [pick(rimplant.random_emote)].")) // M-mlem.
|
||||
|
||||
@@ -16,4 +16,24 @@
|
||||
else
|
||||
M.ClearTransform()
|
||||
M.update_transform()
|
||||
return ..()
|
||||
return ..()
|
||||
|
||||
// Do not ever just leave this laying about, it will go horribly wrong!
|
||||
/obj/item/squishhammer/dark
|
||||
name = "The Dark Short Stacker"
|
||||
desc = "Wield the power of this weapon with responsibility (God knows you won't)."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "dark_hammer"
|
||||
attack_verb = list("stacked")
|
||||
force = 0
|
||||
throwforce = 0
|
||||
|
||||
/obj/item/squishhammer/dark/attack(mob/M as mob, mob/user as mob)
|
||||
..()
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H))
|
||||
for(var/obj/item/organ/external/E in H.organs)
|
||||
E.fracture() // Oof, ouch, owie
|
||||
var/turf/T = M.loc
|
||||
if(isturf(T))
|
||||
new /obj/effect/gibspawner/generic(T)
|
||||
|
||||
@@ -3,7 +3,7 @@ var/global/list/ashtray_cache = list()
|
||||
/obj/item/material/ashtray
|
||||
name = "ashtray"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "blank"
|
||||
icon_state = "ashtray"
|
||||
randpixel = 5
|
||||
force_divisor = 0.1
|
||||
thrown_force_divisor = 0.1
|
||||
@@ -16,6 +16,7 @@ var/global/list/ashtray_cache = list()
|
||||
if(!material)
|
||||
qdel(src)
|
||||
return
|
||||
icon_state = "blank"
|
||||
max_butts = round(material.hardness/5) //This is arbitrary but whatever.
|
||||
randpixel_xy()
|
||||
update_icon()
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
/obj/item/chainsaw/proc/turnOn(mob/user as mob)
|
||||
if(on) return
|
||||
|
||||
visible_message("You start pulling the string on \the [src].", "[usr] starts pulling the string on the [src].")
|
||||
visible_message("You start pulling the string on \the [src].", "[user] starts pulling the string on the [src].")
|
||||
|
||||
if(max_fuel <= 0)
|
||||
if(do_after(user, 15))
|
||||
@@ -38,7 +38,7 @@
|
||||
to_chat(user, "You fumble with the string.")
|
||||
else
|
||||
if(do_after(user, 15))
|
||||
visible_message("You start \the [src] up with a loud grinding!", "[usr] starts \the [src] up with a loud grinding!")
|
||||
visible_message("You start \the [src] up with a loud grinding!", "[user] starts \the [src] up with a loud grinding!")
|
||||
attack_verb = list("shredded", "ripped", "torn")
|
||||
playsound(src, 'sound/weapons/chainsaw_startup.ogg',40,1)
|
||||
force = active_force
|
||||
@@ -91,7 +91,7 @@
|
||||
Hyd.die()
|
||||
if (istype(A, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,A) <= 1)
|
||||
to_chat(user, span_notice("You begin filling the tank on the chainsaw."))
|
||||
if(do_after(usr, 15))
|
||||
if(do_after(user, 15))
|
||||
A.reagents.trans_to_obj(src, max_fuel)
|
||||
playsound(src, 'sound/effects/refill.ogg', 50, 1, -6)
|
||||
to_chat(user, span_notice("Chainsaw succesfully refueled."))
|
||||
|
||||
@@ -66,13 +66,13 @@
|
||||
return 0
|
||||
else
|
||||
to_chat(user, span_notice("You begin to place \the [src.name]."))
|
||||
if(!do_after(usr, 10))
|
||||
if(!do_after(user, 10))
|
||||
return 0
|
||||
var/obj/structure/gravemarker/G = new /obj/structure/gravemarker/(user.loc, src.get_material())
|
||||
to_chat(user, span_notice("You place \the [src.name]."))
|
||||
G.grave_name = grave_name
|
||||
G.epitaph = epitaph
|
||||
G.add_fingerprint(usr)
|
||||
G.add_fingerprint(user)
|
||||
G.dir = user.dir
|
||||
QDEL_NULL(src)
|
||||
return
|
||||
|
||||
@@ -108,12 +108,12 @@
|
||||
if(M == user)
|
||||
if(!M.can_eat(loaded))
|
||||
return
|
||||
M.visible_message(span_bold("\The [user]") + "eats some of [loaded] with \the [src].")
|
||||
M.visible_message(span_bold("\The [user]") + " eats some of [loaded] with \the [src].")
|
||||
else
|
||||
user.visible_message(span_warning("\The [user] begins to feed \the [M]!"))
|
||||
if(!(M.can_force_feed(user, loaded) && do_mob(user, M, 5 SECONDS)))
|
||||
return
|
||||
M.visible_message(span_bold("\The [user]") + "feeds some of [loaded] to \the [M] with \the [src].")
|
||||
M.visible_message(span_bold("\The [user]") + " feeds some of [loaded] to \the [M] with \the [src].")
|
||||
playsound(src,'sound/items/eatfood.ogg', rand(10,40), 1)
|
||||
loaded = null
|
||||
update_icon()
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
to_chat(M, "You should repair [src] first. Try using [kit] on it.")
|
||||
return FALSE
|
||||
M.visible_message("[M] begins to replace parts of [src] with [kit].", "You begin to replace parts of [src] with [kit].")
|
||||
if(do_after(usr, sharpen_time))
|
||||
if(do_after(M, sharpen_time))
|
||||
M.visible_message("[M] has finished replacing parts of [src].", "You finish replacing parts of [src].")
|
||||
src.set_material(material)
|
||||
return TRUE
|
||||
|
||||
@@ -65,8 +65,7 @@
|
||||
var/light_glove_d = rand(2, 4)
|
||||
var/no_glove_d = rand(4, 6)
|
||||
var/list/forbidden_gloves = list(
|
||||
/obj/item/clothing/gloves/sterile,
|
||||
/obj/item/clothing/gloves/knuckledusters
|
||||
/obj/item/clothing/gloves/sterile
|
||||
)
|
||||
|
||||
if(src == user.l_hand)
|
||||
|
||||
@@ -187,8 +187,8 @@
|
||||
to_chat(user, span_warning("You can't do that right now!"))
|
||||
return
|
||||
|
||||
if(tgui_alert(usr, "Are you sure you want to recolor your blade?", "Confirm Recolor", list("Yes", "No")) == "Yes")
|
||||
var/energy_color_input = input(usr,"","Choose Energy Color",lcolor) as color|null
|
||||
if(tgui_alert(user, "Are you sure you want to recolor your blade?", "Confirm Recolor", list("Yes", "No")) == "Yes")
|
||||
var/energy_color_input = input(user,"","Choose Energy Color",lcolor) as color|null
|
||||
if(energy_color_input)
|
||||
lcolor = sanitize_hexcolor(energy_color_input)
|
||||
update_icon()
|
||||
|
||||
@@ -13,4 +13,42 @@
|
||||
sharp = TRUE
|
||||
edge = FALSE
|
||||
attack_verb = list("stabbed", "lunged at", "dextrously struck", "sliced", "lacerated", "impaled", "diced", "charioted")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
|
||||
/obj/item/melee/hammer
|
||||
name = "claw hammer"
|
||||
desc = "A simple claw hammer for hitting things or people with, and the claw part probably does something too."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "claw_hammer"
|
||||
force = 15
|
||||
throwforce = 10
|
||||
w_class = ITEMSIZE_SMALL
|
||||
attack_verb = list("smashed", "swung at", "pummelled", "nailed", "crushed", "bonked", "hammered", "cracked")
|
||||
defend_chance = 0
|
||||
|
||||
/obj/item/melee/hammer/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone, var/attack_modifier)
|
||||
if(istype(target,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(prob(50))
|
||||
var/obj/item/organ/external/affecting = H.get_organ(hit_zone)
|
||||
affecting.fracture()
|
||||
return ..()
|
||||
|
||||
/obj/item/melee/hammer/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
..()
|
||||
if(A)
|
||||
if(istype(A,/obj/structure/window))
|
||||
var/obj/structure/window/W = A
|
||||
if(prob(50))
|
||||
W.visible_message(span_warning("\The [W] shatters under the force of the impact!"))
|
||||
W.shatter()
|
||||
else if(istype(A,/obj/structure/barricade))
|
||||
var/obj/structure/barricade/B = A
|
||||
if(prob(50))
|
||||
B.visible_message(span_warning("\The [B] is broken apart with ease!"))
|
||||
B.dismantle()
|
||||
else if(istype(A,/obj/structure/grille))
|
||||
if(prob(50))
|
||||
A.visible_message(span_warning("\The [A] is smashed open!"))
|
||||
qdel(A)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/obj/item/teleportation_scroll/attack_self(mob/user as mob)
|
||||
if((user.mind && !wizards.is_antagonist(user.mind)))
|
||||
to_chat(usr, span_warning("You stare at the scroll but cannot make sense of the markings!"))
|
||||
to_chat(user, span_warning("You stare at the scroll but cannot make sense of the markings!"))
|
||||
return
|
||||
|
||||
user.set_machine(src)
|
||||
|
||||
@@ -208,8 +208,8 @@
|
||||
if(user.incapacitated() || !istype(user))
|
||||
to_chat(user, span_warning("You can't do that right now!"))
|
||||
return
|
||||
if(tgui_alert(usr, "Are you sure you want to recolor your shield?", "Confirm Recolor", list("Yes", "No")) == "Yes")
|
||||
var/energy_color_input = input(usr,"","Choose Energy Color",lcolor) as color|null
|
||||
if(tgui_alert(user, "Are you sure you want to recolor your shield?", "Confirm Recolor", list("Yes", "No")) == "Yes")
|
||||
var/energy_color_input = input(user,"","Choose Energy Color",lcolor) as color|null
|
||||
if(energy_color_input)
|
||||
lcolor = sanitize_hexcolor(energy_color_input)
|
||||
update_icon()
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
to_chat(user, span_notice("\the [src] is too full to possibly fit anything else inside of it."))
|
||||
return
|
||||
|
||||
if (istype(W, /obj/item/ore))
|
||||
if (istype(W, /obj/item/ore) && !istype(W, /obj/item/ore/slag))
|
||||
var/obj/item/ore/ore = W
|
||||
stored_ore[ore.material]++
|
||||
current_capacity++
|
||||
@@ -178,6 +178,8 @@
|
||||
if(current_pickup >= max_pickup)
|
||||
max_pickup_reached = 1
|
||||
break
|
||||
if(istype(O, /obj/item/ore/slag))
|
||||
continue
|
||||
var/obj/item/ore/ore = O
|
||||
stored_ore[ore.material]++
|
||||
current_capacity++
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
/obj/item/storage/fancy/egg_box/open(mob/user as mob)
|
||||
if(open)
|
||||
return
|
||||
if (isobserver(usr))
|
||||
if (isobserver(user))
|
||||
return
|
||||
open = TRUE
|
||||
update_icon()
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
|
||||
/obj/item/storage/firstaid/surgery
|
||||
can_hold = list(
|
||||
/obj/item/surgical/bone_clamp,
|
||||
/obj/item/surgical/bonesetter,
|
||||
/obj/item/surgical/cautery,
|
||||
/obj/item/surgical/circular_saw,
|
||||
|
||||
@@ -36,7 +36,7 @@ MRE Stuff
|
||||
|
||||
/obj/item/storage/mre/open(mob/user)
|
||||
if(!opened)
|
||||
to_chat(usr, span_notice("You tear open the bag, breaking the vacuum seal."))
|
||||
to_chat(user, span_notice("You tear open the bag, breaking the vacuum seal."))
|
||||
opened = 1
|
||||
update_icon()
|
||||
. = ..()
|
||||
@@ -236,7 +236,7 @@ MRE Stuff
|
||||
|
||||
/obj/item/storage/mrebag/open(mob/user)
|
||||
if(!opened && !isobserver(user))
|
||||
to_chat(usr, span_notice("The pouch heats up as you break the vacuum seal."))
|
||||
to_chat(user, span_notice("The pouch heats up as you break the vacuum seal."))
|
||||
opened = 1
|
||||
update_icon()
|
||||
. = ..()
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
if (istype(W, /obj/item/multitool) && (src.open == 1)&& (!src.l_hacking))
|
||||
user.show_message(span_notice("Now attempting to reset internal memory, please hold."), 1)
|
||||
src.l_hacking = 1
|
||||
if (do_after(usr, 100))
|
||||
if (do_after(user, 100))
|
||||
if (prob(40))
|
||||
src.l_setshort = 1
|
||||
src.l_set = 0
|
||||
@@ -84,7 +84,7 @@
|
||||
if (isliving(user) && Adjacent(user) && (src.locked == 1))
|
||||
to_chat(user, span_warning("[src] is locked and cannot be opened!"))
|
||||
else if (isliving(user) && Adjacent(user) && (!src.locked))
|
||||
src.open(usr)
|
||||
src.open(user)
|
||||
else
|
||||
for(var/mob/M in range(1))
|
||||
if (M.s_active == src)
|
||||
@@ -110,7 +110,7 @@
|
||||
data["l_set"] = l_set
|
||||
return data
|
||||
|
||||
/obj/item/storage/secure/tgui_act(action, params)
|
||||
/obj/item/storage/secure/tgui_act(action, params, datum/tgui/ui)
|
||||
if(..())
|
||||
return TRUE
|
||||
switch (action)
|
||||
@@ -132,12 +132,12 @@
|
||||
src.locked = 1
|
||||
cut_overlays()
|
||||
src.code = null
|
||||
src.close(usr)
|
||||
src.close(ui.user)
|
||||
else
|
||||
src.code += text("[]", digit)
|
||||
if (length(src.code) > 5)
|
||||
src.code = "ERROR"
|
||||
src.add_fingerprint(usr)
|
||||
src.add_fingerprint(ui.user)
|
||||
. = TRUE
|
||||
return
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
if ((src.loc == user) && (src.locked == 1))
|
||||
to_chat(user, span_warning("[src] is locked and cannot be opened!"))
|
||||
else if ((src.loc == user) && (!src.locked))
|
||||
src.open(usr)
|
||||
src.open(user)
|
||||
else
|
||||
..()
|
||||
for(var/mob/M in range(1))
|
||||
|
||||
@@ -787,7 +787,7 @@
|
||||
var/open = 0
|
||||
storage_slots = 1
|
||||
can_hold = list(
|
||||
/obj/item/clothing/gloves/ring,
|
||||
/obj/item/clothing/accessory/ring,
|
||||
/obj/item/coin,
|
||||
/obj/item/clothing/accessory/medal
|
||||
)
|
||||
@@ -801,7 +801,7 @@
|
||||
|
||||
if(contents.len >= 1)
|
||||
var/contained_image = null
|
||||
if(istype(contents[1], /obj/item/clothing/gloves/ring))
|
||||
if(istype(contents[1], /obj/item/clothing/accessory/ring))
|
||||
contained_image = "ring_trinket"
|
||||
else if(istype(contents[1], /obj/item/coin))
|
||||
contained_image = "coin_trinket"
|
||||
|
||||
@@ -141,12 +141,12 @@ var/list/global/tank_gauge_cache = list()
|
||||
|
||||
var/obj/item/assembly_holder/assy = src.proxyassembly.assembly
|
||||
if(assy.a_left && assy.a_right)
|
||||
assy.dropInto(usr.loc)
|
||||
assy.dropInto(user.loc)
|
||||
assy.master = null
|
||||
src.proxyassembly.assembly = null
|
||||
else
|
||||
if(!src.proxyassembly.assembly.a_left)
|
||||
assy.a_right.dropInto(usr.loc)
|
||||
assy.a_right.dropInto(user.loc)
|
||||
assy.a_right.holder = null
|
||||
assy.a_right = null
|
||||
src.proxyassembly.assembly = null
|
||||
@@ -257,7 +257,7 @@ var/list/global/tank_gauge_cache = list()
|
||||
|
||||
return data
|
||||
|
||||
/obj/item/tank/tgui_act(action, params)
|
||||
/obj/item/tank/tgui_act(action, params, datum/tgui/ui)
|
||||
if(..())
|
||||
return TRUE
|
||||
switch(action)
|
||||
@@ -278,10 +278,10 @@ var/list/global/tank_gauge_cache = list()
|
||||
if(.)
|
||||
distribute_pressure = clamp(round(pressure), 0, TANK_MAX_RELEASE_PRESSURE)
|
||||
if("toggle")
|
||||
toggle_valve(usr)
|
||||
toggle_valve(ui.user)
|
||||
. = TRUE
|
||||
|
||||
add_fingerprint(usr)
|
||||
add_fingerprint(ui.user)
|
||||
|
||||
/obj/item/tank/proc/toggle_valve(var/mob/user)
|
||||
if(istype(loc,/mob/living/carbon))
|
||||
|
||||
@@ -330,17 +330,17 @@
|
||||
if(H.nif && H.nif.flag_check(NIF_V_UVFILTER,NIF_FLAGS_VISION)) return //VOREStation Add - NIF
|
||||
switch(safety)
|
||||
if(1)
|
||||
to_chat(usr, span_warning("Your eyes sting a little."))
|
||||
to_chat(user, span_warning("Your eyes sting a little."))
|
||||
E.damage += rand(1, 2)
|
||||
if(E.damage > 12)
|
||||
user.eye_blurry += rand(3,6)
|
||||
if(0)
|
||||
to_chat(usr, span_warning("Your eyes burn."))
|
||||
to_chat(user, span_warning("Your eyes burn."))
|
||||
E.damage += rand(2, 4)
|
||||
if(E.damage > 10)
|
||||
E.damage += rand(4,10)
|
||||
if(-1)
|
||||
to_chat(usr, span_danger("Your thermals intensify the welder's glow. Your eyes itch and burn severely."))
|
||||
to_chat(user, span_danger("Your thermals intensify the welder's glow. Your eyes itch and burn severely."))
|
||||
user.eye_blurry += rand(12,20)
|
||||
E.damage += rand(12, 16)
|
||||
if(safety<2)
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
/obj/item/tool/wirecutters/attack(mob/living/carbon/C as mob, mob/user as mob)
|
||||
if(istype(C) && user.a_intent == I_HELP && (C.handcuffed) && (istype(C.handcuffed, /obj/item/handcuffs/cable)))
|
||||
usr.visible_message("\The [usr] cuts \the [C]'s restraints with \the [src]!",\
|
||||
user.visible_message("\The [user] cuts \the [C]'s restraints with \the [src]!",\
|
||||
"You cut \the [C]'s restraints with \the [src]!",\
|
||||
"You hear cable being cut.")
|
||||
C.handcuffed = null
|
||||
|
||||
@@ -223,8 +223,8 @@
|
||||
|
||||
/obj/random/sfr/item_to_spawn()
|
||||
return pick(prob(25);/obj/item/radio/headset/heads/captain/sfr,
|
||||
prob(25);/obj/item/radio/headset/headset_cargo/alt,
|
||||
prob(25);/obj/item/radio/headset/headset_com/alt,
|
||||
prob(25);/obj/item/radio/headset/alt/cargo,
|
||||
prob(25);/obj/item/radio/headset/alt/headset_com,
|
||||
prob(25);/obj/item/radio/headset)
|
||||
|
||||
// Mining Goodies
|
||||
|
||||
@@ -263,7 +263,7 @@
|
||||
prob(6);/obj/item/material/butterflyblade,
|
||||
prob(6);/obj/item/material/butterflyhandle,
|
||||
prob(2);/obj/item/material/butterfly/switchblade,
|
||||
prob(2);/obj/item/clothing/gloves/knuckledusters,
|
||||
prob(2);/obj/item/clothing/accessory/knuckledusters,
|
||||
prob(1);/obj/item/material/knife/tacknife,
|
||||
prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc,
|
||||
prob(1);/obj/item/beartrap,
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
prob(4);/obj/item/storage/pill_bottle/zoom,
|
||||
prob(4);/obj/item/material/butterfly,
|
||||
prob(2);/obj/item/material/butterfly/switchblade,
|
||||
prob(2);/obj/item/clothing/gloves/knuckledusters,
|
||||
prob(2);/obj/item/clothing/accessory/knuckledusters,
|
||||
prob(2);/obj/item/reagent_containers/syringe/drugs,
|
||||
prob(1);/obj/item/material/knife/tacknife,
|
||||
prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc,
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
if (!can_climb(user))
|
||||
return
|
||||
|
||||
usr.visible_message(span_warning("[user] starts climbing onto \the [src]!"))
|
||||
user.visible_message(span_warning("[user] starts climbing onto \the [src]!"))
|
||||
LAZYDISTINCTADD(climbers, user)
|
||||
|
||||
if(!do_after(user,(issmall(user) ? climb_delay * 0.6 : climb_delay)))
|
||||
@@ -115,10 +115,10 @@
|
||||
LAZYREMOVE(climbers, user)
|
||||
return
|
||||
|
||||
usr.forceMove(climb_to(user))
|
||||
user.forceMove(climb_to(user))
|
||||
|
||||
if (get_turf(user) == get_turf(src))
|
||||
usr.visible_message(span_warning("[user] climbs onto \the [src]!"))
|
||||
user.visible_message(span_warning("[user] climbs onto \the [src]!"))
|
||||
LAZYREMOVE(climbers, user)
|
||||
|
||||
/obj/structure/proc/climb_to(var/mob/living/user)
|
||||
|
||||
@@ -128,14 +128,13 @@
|
||||
. = ..()
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/item/canvas/tgui_act(action, params)
|
||||
/obj/item/canvas/tgui_act(action, params, datum/tgui/ui)
|
||||
. = ..()
|
||||
if(. || finalized)
|
||||
return
|
||||
var/mob/user = usr
|
||||
switch(action)
|
||||
if("paint")
|
||||
var/obj/item/I = user.get_active_hand()
|
||||
var/obj/item/I = ui.user.get_active_hand()
|
||||
var/color = get_paint_tool_color(I)
|
||||
if(!color)
|
||||
return FALSE
|
||||
@@ -148,7 +147,7 @@
|
||||
if("finalize")
|
||||
. = TRUE
|
||||
if(!finalized)
|
||||
finalize(user)
|
||||
finalize(ui.user)
|
||||
|
||||
/obj/item/canvas/proc/finalize(mob/user)
|
||||
finalized = TRUE
|
||||
|
||||
@@ -39,6 +39,23 @@ LINEN BINS
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/bedsheet/verb/turn_around()
|
||||
set name = "Turn Around"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if(!usr || !isturf(usr.loc))
|
||||
return
|
||||
if(usr.stat || usr.restrained())
|
||||
return
|
||||
if(ismouse(usr) || (isobserver(usr) && !CONFIG_GET(flag/ghost_interaction)))
|
||||
return
|
||||
|
||||
if(dir >= 2)
|
||||
src.set_dir(1)
|
||||
else
|
||||
src.set_dir(2)
|
||||
|
||||
/obj/item/bedsheet/blue
|
||||
icon_state = "sheetblue"
|
||||
|
||||
|
||||
@@ -319,7 +319,7 @@
|
||||
return
|
||||
if(W.loc != user) // This should stop mounted modules ending up outside the module.
|
||||
return
|
||||
usr.drop_item()
|
||||
user.drop_item()
|
||||
if(W)
|
||||
W.forceMove(loc)
|
||||
else if(istype(W, /obj/item/packageWrap))
|
||||
@@ -385,7 +385,7 @@
|
||||
/obj/structure/closet/attack_self_tk(mob/user as mob)
|
||||
add_fingerprint(user)
|
||||
if(!toggle())
|
||||
to_chat(usr, span_notice("It won't budge!"))
|
||||
to_chat(user, span_notice("It won't budge!"))
|
||||
|
||||
/obj/structure/closet/verb/verb_toggleopen()
|
||||
set src in oview(1)
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
return
|
||||
if(W.loc != user) // This should stop mounted modules ending up outside the module.
|
||||
return
|
||||
usr.drop_item()
|
||||
user.drop_item()
|
||||
if(W)
|
||||
W.forceMove(src.loc)
|
||||
else
|
||||
|
||||
@@ -23,7 +23,9 @@
|
||||
|
||||
starts_with = list(
|
||||
/obj/item/clothing/head/that = 2,
|
||||
/obj/item/radio/headset/headset_service = 2,
|
||||
/obj/item/radio/headset/service = 2,
|
||||
/obj/item/radio/headset/alt/service = 2,
|
||||
/obj/item/radio/headset/earbud/service = 2,
|
||||
/obj/item/clothing/head/pin/flower,
|
||||
/obj/item/clothing/head/pin/flower/pink,
|
||||
/obj/item/clothing/head/pin/flower/yellow,
|
||||
@@ -51,7 +53,9 @@
|
||||
starts_with = list(
|
||||
/obj/item/clothing/under/sundress,
|
||||
/obj/item/clothing/under/waiter = 2,
|
||||
/obj/item/radio/headset/headset_service = 2,
|
||||
/obj/item/radio/headset/service = 2,
|
||||
/obj/item/radio/headset/alt/service = 2,
|
||||
/obj/item/radio/headset/earbud/service = 2,
|
||||
/obj/item/storage/box/mousetraps = 2,
|
||||
/obj/item/clothing/under/rank/chef,
|
||||
/obj/item/clothing/head/chefhat,
|
||||
@@ -69,7 +73,9 @@
|
||||
starts_with = list(
|
||||
/obj/item/clothing/under/rank/janitor,
|
||||
/obj/item/clothing/under/dress/maid/janitor,
|
||||
/obj/item/radio/headset/headset_service,
|
||||
/obj/item/radio/headset/service,
|
||||
/obj/item/radio/headset/alt/service,
|
||||
/obj/item/radio/headset/earbud/service,
|
||||
/obj/item/cartridge/janitor,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/janitor,
|
||||
/obj/item/clothing/gloves/black,
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
/obj/item/clothing/shoes/boots/winter/explorer,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/radio/headset/explorer,
|
||||
/obj/item/radio/headset/explorer/alt,
|
||||
/obj/item/radio/headset/alt/explorer,
|
||||
/obj/item/cartridge/explorer,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/gps/explorer,
|
||||
@@ -104,7 +104,7 @@
|
||||
/obj/item/clothing/shoes/boots/winter/explorer,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/radio/headset/pathfinder,
|
||||
/obj/item/radio/headset/pathfinder/alt,
|
||||
/obj/item/radio/headset/alt/pathfinder,
|
||||
/obj/item/cartridge/explorer,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/gps/explorer,
|
||||
@@ -153,7 +153,7 @@
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical/sar,
|
||||
/obj/item/clothing/shoes/boots/winter/explorer,
|
||||
/obj/item/radio/headset/sar,
|
||||
/obj/item/radio/headset/sar/alt,
|
||||
/obj/item/radio/headset/alt/sar,
|
||||
/obj/item/cartridge/sar,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/tank/emergency/oxygen/engi,
|
||||
@@ -201,7 +201,7 @@
|
||||
/obj/item/clothing/shoes/black,
|
||||
/obj/item/clothing/gloves/fingerless,
|
||||
/obj/item/radio/headset/pilot,
|
||||
/obj/item/radio/headset/pilot/alt,
|
||||
/obj/item/radio/headset/alt/pilot,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/reagent_containers/food/snacks/liquidfood,
|
||||
/obj/item/reagent_containers/food/snacks/liquidprotein,
|
||||
@@ -211,7 +211,7 @@
|
||||
/obj/item/radio,
|
||||
/obj/item/gps/explorer,
|
||||
/obj/item/gun/energy/gun/protector/pilotgun/locked,
|
||||
/obj/item/clothing/gloves/watch/survival,
|
||||
/obj/item/clothing/accessory/watch/survival,
|
||||
/obj/item/clothing/accessory/storage/webbing/pilot1,
|
||||
/obj/item/clothing/accessory/storage/webbing/pilot2,
|
||||
/obj/item/emergency_beacon
|
||||
|
||||
@@ -11,8 +11,9 @@
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/cargo,
|
||||
/obj/item/clothing/shoes/boots/winter/supply,
|
||||
/obj/item/clothing/shoes/black,
|
||||
/obj/item/radio/headset/headset_cargo,
|
||||
/obj/item/radio/headset/headset_cargo/alt,
|
||||
/obj/item/radio/headset/cargo,
|
||||
/obj/item/radio/headset/alt/cargo,
|
||||
/obj/item/radio/headset/earbud/cargo,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/gloves/fingerless,
|
||||
/obj/item/clothing/head/soft)
|
||||
@@ -37,8 +38,9 @@
|
||||
/obj/item/clothing/under/rank/cargo/jeans,
|
||||
/obj/item/clothing/under/rank/cargo/jeans/female,
|
||||
/obj/item/clothing/shoes/brown,
|
||||
/obj/item/radio/headset/headset_qm, //VOREStation Edit,
|
||||
/obj/item/radio/headset/headset_qm/alt, //VOREStation Edit,
|
||||
/obj/item/radio/headset/qm,
|
||||
/obj/item/radio/headset/alt/qm,
|
||||
/obj/item/radio/headset/earbud/qm,
|
||||
/obj/item/clothing/under/rank/neo_qm,
|
||||
/obj/item/clothing/under/rank/neo_qm_skirt,
|
||||
/obj/item/clothing/under/rank/neo_qm_jacket,
|
||||
@@ -73,7 +75,7 @@
|
||||
closet_appearance = /decl/closet_appearance/secure_closet/mining
|
||||
|
||||
starts_with = list(
|
||||
/obj/item/radio/headset/headset_mine,
|
||||
/obj/item/radio/headset/miner,
|
||||
/obj/item/clothing/under/rank/miner,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/shoes/black,
|
||||
|
||||
@@ -20,7 +20,8 @@
|
||||
/obj/item/clothing/shoes/brown,
|
||||
/obj/item/cartridge/ce,
|
||||
/obj/item/radio/headset/heads/ce,
|
||||
/obj/item/radio/headset/heads/ce/alt,
|
||||
/obj/item/radio/headset/alt/heads/ce,
|
||||
/obj/item/radio/headset/earbud/heads/ce,
|
||||
/obj/item/storage/toolbox/mechanical,
|
||||
/obj/item/clothing/suit/storage/hazardvest,
|
||||
///obj/item/clothing/mask/gas, //VOREStation Removal: Locker bloat, grr. The fancy one below functions as a mask & helmet combined.
|
||||
@@ -92,7 +93,8 @@
|
||||
/obj/item/clothing/accessory/storage/brown_vest,
|
||||
/obj/item/storage/toolbox/mechanical,
|
||||
/obj/item/radio/headset/headset_eng,
|
||||
/obj/item/radio/headset/headset_eng/alt,
|
||||
/obj/item/radio/headset/alt/headset_eng,
|
||||
/obj/item/radio/headset/earbud/headset_eng,
|
||||
/obj/item/clothing/suit/storage/hazardvest,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/glasses/meson,
|
||||
@@ -129,7 +131,8 @@
|
||||
/obj/item/extinguisher/atmo,
|
||||
///obj/item/clamp, //VOREStation Removal: without leaks those are pointless,
|
||||
/obj/item/radio/headset/headset_eng,
|
||||
/obj/item/radio/headset/headset_eng/alt,
|
||||
/obj/item/radio/headset/alt/headset_eng,
|
||||
/obj/item/radio/headset/earbud/headset_eng,
|
||||
/obj/item/clothing/suit/storage/hazardvest/atmos, //VOREStation edit. Eng locker gets regular haz-vest, atmos gets the themed one of their own
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/cartridge/atmos,
|
||||
|
||||
@@ -8,7 +8,9 @@
|
||||
/obj/item/clothing/under/rank/hydroponics,
|
||||
/obj/item/clothing/gloves/botanic_leather,
|
||||
/obj/item/analyzer/plant_analyzer,
|
||||
/obj/item/radio/headset/headset_service,
|
||||
/obj/item/radio/headset/service,
|
||||
/obj/item/radio/headset/alt/service,
|
||||
/obj/item/radio/headset/earbud/service,
|
||||
/obj/item/clothing/head/greenbandana,
|
||||
/obj/item/shovel/spade,
|
||||
/obj/item/material/minihoe,
|
||||
|
||||
@@ -39,7 +39,8 @@
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/cartridge/medical,
|
||||
/obj/item/radio/headset/headset_med,
|
||||
/obj/item/radio/headset/headset_med/alt,
|
||||
/obj/item/radio/headset/alt/headset_med,
|
||||
/obj/item/radio/headset/earbud/headset_med,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical/alt,
|
||||
/obj/item/clothing/shoes/boots/winter/medical,
|
||||
@@ -108,7 +109,9 @@
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/emt,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical/para,
|
||||
/obj/item/clothing/shoes/boots/winter/medical,
|
||||
/obj/item/radio/headset/headset_med/alt,
|
||||
/obj/item/radio/headset/headset_med,
|
||||
/obj/item/radio/headset/alt/headset_med,
|
||||
/obj/item/radio/headset/earbud/headset_med,
|
||||
/obj/item/cartridge/medical,
|
||||
/obj/item/storage/briefcase/inflatable,
|
||||
/obj/item/flashlight,
|
||||
@@ -143,7 +146,8 @@
|
||||
/obj/item/clothing/under/rank/neo_cmo_turtle_skirt,
|
||||
/obj/item/clothing/under/rank/neo_cmo_gorka,
|
||||
/obj/item/radio/headset/heads/cmo,
|
||||
/obj/item/radio/headset/heads/cmo/alt,
|
||||
/obj/item/radio/headset/alt/heads/cmo,
|
||||
/obj/item/radio/headset/earbud/heads/cmo,
|
||||
/obj/item/flash,
|
||||
/obj/item/reagent_containers/hypospray/vial,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical,
|
||||
|
||||
@@ -45,7 +45,8 @@
|
||||
/obj/item/clothing/shoes/laceup/brown,
|
||||
/obj/item/clothing/gloves/sterile/latex,
|
||||
/obj/item/radio/headset/heads/rd,
|
||||
/obj/item/radio/headset/heads/rd/alt,
|
||||
/obj/item/radio/headset/alt/heads/rd,
|
||||
/obj/item/radio/headset/earbud/heads/rd,
|
||||
/obj/item/tank/air,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/flash,
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
/obj/item/cartridge/captain,
|
||||
/obj/item/storage/lockbox/medal,
|
||||
/obj/item/radio/headset/heads/captain,
|
||||
/obj/item/radio/headset/heads/captain/alt,
|
||||
/obj/item/radio/headset/alt/heads/captain,
|
||||
/obj/item/radio/headset/earbud/heads/captain,
|
||||
/obj/item/gun/energy/gun,
|
||||
/obj/item/melee/telebaton,
|
||||
/obj/item/flash,
|
||||
@@ -27,7 +28,8 @@
|
||||
/obj/item/clothing/head/helmet,
|
||||
/obj/item/cartridge/hop,
|
||||
/obj/item/radio/headset/heads/hop,
|
||||
/obj/item/radio/headset/heads/hop/alt,
|
||||
/obj/item/radio/headset/alt/heads/hop,
|
||||
/obj/item/radio/headset/earbud/heads/hop,
|
||||
/obj/item/storage/box/ids = 2,
|
||||
/obj/item/gun/energy/gun/compact,
|
||||
/obj/item/storage/box/commandkeys,
|
||||
@@ -90,7 +92,8 @@
|
||||
/obj/item/clothing/head/helmet/dermal,
|
||||
/obj/item/cartridge/hos,
|
||||
/obj/item/radio/headset/heads/hos,
|
||||
/obj/item/radio/headset/heads/hos/alt,
|
||||
/obj/item/radio/headset/alt/heads/hos,
|
||||
/obj/item/radio/headset/earbud/heads/hos,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/shield/riot,
|
||||
@@ -151,7 +154,8 @@
|
||||
/obj/item/clothing/under/rank/neo_sec_gorka,
|
||||
/obj/item/cartridge/security,
|
||||
/obj/item/radio/headset/headset_sec,
|
||||
/obj/item/radio/headset/headset_sec/alt,
|
||||
/obj/item/radio/headset/alt/headset_sec,
|
||||
/obj/item/radio/headset/earbud/headset_sec,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/clothing/accessory/badge/holo/warden,
|
||||
@@ -189,7 +193,8 @@
|
||||
/obj/item/clothing/head/helmet,
|
||||
/obj/item/cartridge/security,
|
||||
/obj/item/radio/headset/headset_sec,
|
||||
/obj/item/radio/headset/headset_sec/alt,
|
||||
/obj/item/radio/headset/alt/headset_sec,
|
||||
/obj/item/radio/headset/earbud/headset_sec,
|
||||
/obj/item/storage/belt/security,
|
||||
/obj/item/flash,
|
||||
/obj/item/reagent_containers/spray/pepper,
|
||||
@@ -257,7 +262,8 @@
|
||||
/obj/item/storage/belt/detective,
|
||||
/obj/item/storage/box/evidence,
|
||||
/obj/item/radio/headset/headset_sec,
|
||||
/obj/item/radio/headset/headset_sec/alt,
|
||||
/obj/item/radio/headset/alt/headset_sec,
|
||||
/obj/item/radio/headset/earbud/headset_sec,
|
||||
/obj/item/clothing/suit/storage/vest/detective,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/clothing/accessory/holster/armpit,
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
/obj/item/clothing/head/helmet/HoS/hat/blue,
|
||||
/obj/item/clothing/head/helmet/dermal,
|
||||
/obj/item/radio/headset/heads/hos,
|
||||
/obj/item/radio/headset/heads/hos/alt,
|
||||
/obj/item/radio/headset/alt/heads/hos,
|
||||
/obj/item/radio/headset/earbud/heads/hos,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/storage/belt/security,
|
||||
/obj/item/clothing/accessory/holster/waist,
|
||||
@@ -76,7 +77,8 @@
|
||||
/obj/item/clothing/head/helmet,
|
||||
/obj/item/cartridge/security,
|
||||
/obj/item/radio/headset/headset_sec,
|
||||
/obj/item/radio/headset/headset_sec/alt,
|
||||
/obj/item/radio/headset/alt/headset_sec,
|
||||
/obj/item/radio/headset/earbud/headset_sec,
|
||||
/obj/item/storage/belt/security,
|
||||
/obj/item/flash,
|
||||
/obj/item/reagent_containers/spray/pepper,
|
||||
@@ -122,7 +124,8 @@
|
||||
/obj/item/clothing/head/helmet/dermal,
|
||||
/obj/item/cartridge/hos,
|
||||
/obj/item/radio/headset/heads/hos,
|
||||
/obj/item/radio/headset/heads/hos/alt,
|
||||
/obj/item/radio/headset/alt/heads/hos,
|
||||
/obj/item/radio/headset/earbud/heads/hos,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/shield/riot,
|
||||
@@ -169,7 +172,8 @@
|
||||
/obj/item/clothing/head/helmet/warden,
|
||||
/obj/item/cartridge/security,
|
||||
/obj/item/radio/headset/headset_sec,
|
||||
/obj/item/radio/headset/headset_sec/alt,
|
||||
/obj/item/radio/headset/alt/headset_sec,
|
||||
/obj/item/radio/headset/earbud/headset_sec,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/clothing/accessory/badge/holo/warden,
|
||||
@@ -204,7 +208,8 @@
|
||||
/obj/item/cartridge/captain,
|
||||
/obj/item/storage/lockbox/medal,
|
||||
/obj/item/radio/headset/heads/captain,
|
||||
/obj/item/radio/headset/heads/captain/alt,
|
||||
/obj/item/radio/headset/alt/heads/captain,
|
||||
/obj/item/radio/headset/earbud/heads/captain,
|
||||
/obj/item/gunbox/captain,
|
||||
/obj/item/melee/telebaton,
|
||||
/obj/item/flash,
|
||||
|
||||
@@ -34,10 +34,10 @@
|
||||
if (istype(user, /mob/living/silicon/ai)) //Added by Strumpetplaya - AI shouldn't be able to
|
||||
return //activate emergency lockers. This fixes that. (Does this make sense, the AI can't call attack_hand, can it? --Mloc)
|
||||
if(!amount)
|
||||
to_chat(usr, "<spawn class='notice'>It's empty..")
|
||||
to_chat(user, "<spawn class='notice'>It's empty..")
|
||||
return
|
||||
if(amount)
|
||||
to_chat(usr, "<spawn class='notice'>You take out some items from \the [src].")
|
||||
to_chat(user, "<spawn class='notice'>You take out some items from \the [src].")
|
||||
for(var/path in spawnitems)
|
||||
new path(src.loc)
|
||||
amount--
|
||||
@@ -448,4 +448,4 @@
|
||||
|
||||
/obj/structure/closet/walllocker_double/engineering/east
|
||||
pixel_x = 32
|
||||
dir = EAST
|
||||
dir = EAST
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user