Merge remote-tracking branch 'ParadiseSS13/master' into skills_rework

This commit is contained in:
Kyep
2020-09-19 06:39:38 -07:00
534 changed files with 9837 additions and 16102 deletions
+1 -1
View File
@@ -481,7 +481,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
var/more = ""
if(M)
more = " "
msg_admin_attack("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].", 0, 1)
add_attack_logs(M, location, "Caused a chemical smoke reaction containing [contained]. Last associated key is [carry.my_atom.fingerprintslast][more]", ATKLOG_FEW)
log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].")
else
msg_admin_attack("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", 0, 1)
@@ -83,13 +83,13 @@
var/more = ""
if(M)
more = " "
msg_admin_attack("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].", ATKLOG_FEW)
add_attack_logs(M, location, "Caused a chemical smoke reaction containing [contained]. Last associated key is [carry.my_atom.fingerprintslast][more]", ATKLOG_FEW)
log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].")
else
msg_admin_attack("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", ATKLOG_FEW)
msg_admin_attack("A chemical smoke reaction has taken place in ([whereLink])[contained]. No associated key.", ATKLOG_FEW)
log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.")
else
msg_admin_attack("A chemical smoke reaction has taken place in ([whereLink]). No associated key. CODERS: carry.my_atom may be null.", ATKLOG_FEW)
msg_admin_attack("A chemical smoke reaction has taken place in ([whereLink])[contained]. No associated key. CODERS: carry.my_atom may be null.", ATKLOG_FEW)
log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key. CODERS: carry.my_atom may be null.")
-3
View File
@@ -88,9 +88,6 @@
if(!M.simulated || iseffect(M))
. = FALSE
if(M.anchored && ismecha(M))
. = FALSE
/obj/effect/portal/proc/teleport(atom/movable/M)
if(!can_teleport(M))
return FALSE
@@ -6,18 +6,18 @@
var/btemp1 = 1500
var/btemp2 = 1000 // tank temperatures
timer
btype = 2
/obj/effect/spawner/newbomb/timer
btype = 2
syndicate
btemp1 = 150
btemp2 = 20
/obj/effect/spawner/newbomb/timer/syndicate
btemp1 = 150
btemp2 = 20
proximity
btype = 1
/obj/effect/spawner/newbomb/proximity
btype = 1
radio
btype = 0
/obj/effect/spawner/newbomb/radio
btype = 0
/obj/effect/spawner/newbomb/New()
@@ -285,7 +285,7 @@
/obj/item/clothing/gloves/color/yellow/power = 1,
/obj/item/twohanded/chainsaw = 1,
/obj/item/bee_briefcase = 1,
/obj/item/twohanded/energizedfireaxe = 1,
/obj/item/twohanded/fireaxe/energized = 1,
/obj/item/clothing/glasses/thermal = 1,
/obj/item/chameleon = 1,
/obj/item/reagent_containers/hypospray/autoinjector/stimulants = 1,
+1 -1
View File
@@ -42,7 +42,7 @@
/obj/structure/spider/stickyweb/CanPass(atom/movable/mover, turf/target, height=0)
if(height == 0)
return TRUE
if(istype(mover, /mob/living/simple_animal/hostile/poison/giant_spider))
if(istype(mover, /mob/living/simple_animal/hostile/poison/giant_spider) || isterrorspider(mover))
return TRUE
else if(istype(mover, /mob/living))
if(prob(50))
+1 -13
View File
@@ -137,19 +137,7 @@
T.ex_act(3)
CHECK_TICK
//--- THROW ITEMS AROUND ---
/*
if(throw_dist > 0)
var/throw_dir = get_dir(epicenter,T)
for(var/obj/item/I in T)
spawn(0) //Simultaneously not one at a time
if(I && !I.anchored)
var/throw_mult = 0.5 + (0.5 * rand()) // Between 0.5 and 1.0
var/throw_range = round((throw_dist + 1) * throw_mult) // Roughly 50% to 100% of throw_dist
if(throw_range > 0)
var/turf/throw_at = get_ranged_target_turf(I, throw_dir, throw_range)
I.throw_at(throw_at, throw_range, 2, no_spin = 1) //Throw it at 2 speed, this is purely visual anyway; don't spin the thrown items, it's very costly.
*/
var/took = stop_watch(watch)
//You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare
if(GLOB.debug2)
+9 -12
View File
@@ -7,10 +7,10 @@
icon_state = "bodybag_folded"
w_class = WEIGHT_CLASS_SMALL
attack_self(mob/user)
var/obj/structure/closet/body_bag/R = new /obj/structure/closet/body_bag(user.loc)
R.add_fingerprint(user)
qdel(src)
/obj/item/bodybag/attack_self(mob/user)
var/obj/structure/closet/body_bag/R = new /obj/structure/closet/body_bag(user.loc)
R.add_fingerprint(user)
qdel(src)
/obj/structure/closet/body_bag
name = "body bag"
@@ -56,16 +56,13 @@
/obj/structure/closet/body_bag/MouseDrop(over_object, src_location, over_location)
..()
. = ..()
if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src))))
if(!ishuman(usr)) return
if(opened) return 0
if(contents.len) return 0
visible_message("[usr] folds up the [src.name]")
if(!ishuman(usr) || opened || length(contents))
return FALSE
visible_message("[usr] folds up the [name]")
new item_path(get_turf(src))
spawn(0)
qdel(src)
return
qdel(src)
/obj/structure/closet/body_bag/relaymove(mob/user as mob)
if(user.stat)
+1 -1
View File
@@ -4,7 +4,7 @@
icon = 'icons/obj/artifacts.dmi'
icon_state = "changerock"
obj/item/changestone/attack_hand(var/mob/user as mob)
/obj/item/changestone/attack_hand(var/mob/user as mob)
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
if(!H.gloves)
+48 -36
View File
@@ -37,71 +37,83 @@
overlays.Cut()
/obj/item/aicard/attack_self(mob/user)
ui_interact(user)
tgui_interact(user)
/obj/item/aicard/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = GLOB.inventory_state)
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
/obj/item/aicard/tgui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_inventory_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "aicard.tmpl", "[name]", 600, 400, state = state)
ui = new(user, src, ui_key, "AICard", "[name]", 600, 394, master_ui, state)
ui.open()
ui.set_auto_update(1)
/obj/item/aicard/ui_data(mob/user, ui_key = "main", datum/topic_state/state = GLOB.inventory_state)
/obj/item/aicard/tgui_data(mob/user, ui_key = "main", datum/topic_state/state = GLOB.inventory_state)
var/data[0]
var/mob/living/silicon/ai/AI = locate() in src
if(istype(AI))
data["has_ai"] = 1
data["has_ai"] = TRUE
data["name"] = AI.name
data["hardware_integrity"] = ((AI.health + 100) / 2)
data["integrity"] = ((AI.health + 100) / 2)
data["radio"] = !AI.aiRadio.disabledAi
data["wireless"] = !AI.control_disabled
data["operational"] = AI.stat != DEAD
data["flushing"] = flush
var/laws[0]
for(var/datum/ai_law/AL in AI.laws.all_laws())
laws[++laws.len] = list("index" = AL.get_index(), "law" = sanitize(AL.law))
for(var/datum/ai_law/law in AI.laws.all_laws())
if(law in AI.laws.ion_laws) // If we're an ion law, give it an ion index code
laws.Add(ionnum() + ". " + law.law)
else
laws.Add(num2text(law.get_index()) + ". " + law.law)
data["laws"] = laws
data["has_laws"] = laws.len
data["has_laws"] = length(AI.laws.all_laws())
else
data["has_ai"] = FALSE // If this isn't passed to tgui, it won't show there isn't a AI in the card.
return data
/obj/item/aicard/Topic(href, href_list, nowindow, state)
/obj/item/aicard/tgui_act(action, params)
if(..())
return 1
return
var/mob/living/silicon/ai/AI = locate() in src
if(!istype(AI))
return 1
return
var/user = usr
switch(action)
if("wipe")
if(flush) // Don't doublewipe.
to_chat(user, "<span class='warning'>You are already wiping this AI!</span>")
return
var/confirm = alert("Are you sure you want to wipe this card's memory? This cannot be undone once started.", "Confirm Wipe", "Yes", "No")
if(confirm == "Yes" && (tgui_status(user, GLOB.tgui_inventory_state) == STATUS_INTERACTIVE)) // And make doubly sure they want to wipe (three total clicks)
msg_admin_attack("[key_name_admin(user)] wiped [key_name_admin(AI)] with \the [src].", ATKLOG_FEW)
add_attack_logs(user, AI, "Wiped with [src].")
INVOKE_ASYNC(src, .proc/wipe_ai)
if(href_list["wipe"])
var/confirm = alert("Are you sure you want to wipe this card's memory? This cannot be undone once started.", "Confirm Wipe", "Yes", "No")
if(confirm == "Yes" && (CanUseTopic(user, state) == STATUS_INTERACTIVE))
msg_admin_attack("[key_name_admin(user)] wiped [key_name_admin(AI)] with \the [src].", ATKLOG_FEW)
add_attack_logs(user, AI, "Wiped with [src].")
flush = 1
AI.suiciding = 1
to_chat(AI, "Your core files are being wiped!")
while(AI && AI.stat != DEAD)
AI.adjustOxyLoss(2)
sleep(10)
flush = 0
if("radio")
AI.aiRadio.disabledAi = !AI.aiRadio.disabledAi
to_chat(AI, "<span class='warning'>Your Subspace Transceiver has been [AI.aiRadio.disabledAi ? "disabled" : "enabled"]!</span>")
to_chat(user, "<span class='notice'>You [AI.aiRadio.disabledAi ? "disable" : "enable"] the AI's Subspace Transceiver.</span>")
if(href_list["radio"])
AI.aiRadio.disabledAi = text2num(href_list["radio"])
to_chat(AI, "<span class='warning'>Your Subspace Transceiver has been [AI.aiRadio.disabledAi ? "disabled" : "enabled"]!</span>")
to_chat(user, "<span class='notice'>You [AI.aiRadio.disabledAi ? "disable" : "enable"] the AI's Subspace Transceiver.</span>")
if("wireless")
AI.control_disabled = !AI.control_disabled
to_chat(AI, "<span class='warning'>Your wireless interface has been [AI.control_disabled ? "disabled" : "enabled"]!</span>")
to_chat(user, "<span class='notice'>You [AI.control_disabled ? "disable" : "enable"] the AI's wireless interface.</span>")
update_icon()
if(href_list["wireless"])
AI.control_disabled = text2num(href_list["wireless"])
to_chat(AI, "<span class='warning'>Your wireless interface has been [AI.control_disabled ? "disabled" : "enabled"]!</span>")
to_chat(user, "<span class='notice'>You [AI.control_disabled ? "disable" : "enable"] the AI's wireless interface.</span>")
update_icon()
return TRUE
return 1
/obj/item/aicard/proc/wipe_ai()
var/mob/living/silicon/ai/AI = locate() in src
flush = TRUE
AI.suiciding = TRUE
to_chat(AI, "Your core files are being wiped!")
while(AI && AI.stat != DEAD)
AI.adjustOxyLoss(2)
sleep(10)
flush = FALSE
@@ -45,9 +45,6 @@
QDEL_NULL(keyslot2)
return ..()
/obj/item/radio/headset/list_channels(var/mob/user)
return list_secure_channels()
/obj/item/radio/headset/examine(mob/user)
. = ..()
if(in_range(src, user) && radio_desc)
@@ -245,14 +245,7 @@
usesound = 'sound/items/deconstruct.ogg'
/obj/item/radio/intercom/locked
var/locked_frequency
/obj/item/radio/intercom/locked/set_frequency(var/frequency)
if(frequency == locked_frequency)
..(locked_frequency)
/obj/item/radio/intercom/locked/list_channels()
return ""
freqlock = TRUE
/obj/item/radio/intercom/locked/ai_private
name = "\improper AI intercom"
+31 -27
View File
@@ -129,7 +129,10 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
/obj/item/radio/tgui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "Radio", name, 360, 150 + (length(channels) * 20), master_ui, state)
var/list/schannels = list_secure_channels(user)
var/list/ichannels = list_internal_channels(user)
var/calc_height = 150 + (schannels.len * 20) + (ichannels.len * 10)
ui = new(user, src, ui_key, "Radio", name, 400, calc_height, master_ui, state)
ui.open()
/obj/item/radio/tgui_data(mob/user)
@@ -142,9 +145,8 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
data["maxFrequency"] = freerange ? RADIO_HIGH_FREQ : PUBLIC_HIGH_FREQ
data["canReset"] = frequency == initial(frequency) ? FALSE : TRUE
data["freqlock"] = freqlock
data["channels"] = list()
for(var/channel in channels)
data["channels"][channel] = channels[channel] & FREQ_LISTENING
data["schannels"] = list_secure_channels(user)
data["ichannels"] = list_internal_channels(user)
data["has_loudspeaker"] = has_loudspeaker
data["loudspeaker"] = loudspeaker
@@ -173,6 +175,12 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
usr << browse(null, "window=radio")
if(.)
set_frequency(sanitize_frequency(tune, freerange))
if("ichannel") // change primary frequency to an internal channel authorized by access
if(freqlock)
return
var/freq = params["ichannel"]
if(has_channel_access(usr, freq))
set_frequency(text2num(freq))
if("listen")
listening = !listening
if("broadcast")
@@ -198,34 +206,32 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
if(.)
add_fingerprint(usr)
/obj/item/radio/proc/list_channels(var/mob/user)
return list_internal_channels(user)
/obj/item/radio/proc/list_secure_channels(var/mob/user)
var/dat[0]
for(var/ch_name in channels)
var/chan_stat = channels[ch_name]
var/listening = !!(chan_stat & FREQ_LISTENING) != 0
dat.Add(list(list("chan" = ch_name, "display_name" = ch_name, "secure_channel" = 1, "sec_channel_listen" = !listening, "chan_span" = SSradio.frequency_span_class(SSradio.radiochannels[ch_name]))))
/obj/item/radio/proc/list_secure_channels(mob/user)
var/list/dat = list()
for(var/channel in channels)
dat[channel] = channels[channel] & FREQ_LISTENING
return dat
/obj/item/radio/proc/list_internal_channels(var/mob/user)
var/dat[0]
/obj/item/radio/proc/list_internal_channels(mob/user)
var/list/dat = list()
if(freqlock)
return dat
for(var/internal_chan in internal_channels)
var/freqnum = text2num(internal_chan)
var/freqname = get_frequency_name(freqnum)
if(has_channel_access(user, internal_chan))
dat.Add(list(list("chan" = internal_chan, "display_name" = get_frequency_name(text2num(internal_chan)), "chan_span" = SSradio.frequency_span_class(text2num(internal_chan)))))
dat[freqname] = freqnum // unlike secure_channels, this is set to the freq number so Radio.js can use it as an arg
return dat
/obj/item/radio/proc/has_channel_access(var/mob/user, var/freq)
/obj/item/radio/proc/has_channel_access(mob/user, freq)
if(!user)
return 0
return FALSE
if(!(freq in internal_channels))
return 0
return FALSE
if(isrobot(user))
return FALSE // cyborgs and drones are not allowed to remotely re-tune intercomms, etc
return user.has_internal_radio_channel_access(user, internal_channels[freq])
@@ -603,13 +609,14 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
/obj/item/radio/borg
name = "Cyborg Radio"
var/mob/living/silicon/robot/myborg = null // Cyborg which owns this radio. Used for power checks
var/obj/item/encryptionkey/keyslot = null//Borg radios can handle a single encryption key
var/obj/item/encryptionkey/keyslot // Borg radios can handle a single encryption key
icon = 'icons/obj/robot_component.dmi' // Cyborgs radio icons should look like the component.
icon_state = "radio"
has_loudspeaker = TRUE
loudspeaker = FALSE
canhear_range = 0
dog_fashion = null
freqlock = TRUE // don't let cyborgs change the default channel of their internal radio away from common
/obj/item/radio/borg/syndicate
keyslot = new /obj/item/encryptionkey/syndicate/nukeops
@@ -623,9 +630,6 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
myborg = null
return ..()
/obj/item/radio/borg/list_channels(var/mob/user)
return list_secure_channels(user)
/obj/item/radio/borg/syndicate/New()
..()
syndiekey = keyslot
@@ -64,7 +64,7 @@
A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb).
investigate_log("[key_name(user)] attached a [A] to a transfer valve.", INVESTIGATE_BOMB)
msg_admin_attack("[key_name_admin(user)]attached [A] to a transfer valve.", ATKLOG_FEW)
add_attack_logs(user, src, "attached [A] to a transfer valve", ATKLOG_FEW)
log_game("[key_name_admin(user)] attached [A] to a transfer valve.")
attacher = user
SSnanoui.update_uis(src) // update all UIs attached to src
@@ -128,7 +128,7 @@
if((!tank_one || tank_one.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL))
w_class = WEIGHT_CLASS_NORMAL
if("toggle")
toggle_valve()
toggle_valve(usr)
if("device")
if(attached_device)
attached_device.attack_self(usr)
@@ -190,7 +190,7 @@
it explodes properly when it gets a signal (and it does).
*/
/obj/item/transfer_valve/proc/toggle_valve()
/obj/item/transfer_valve/proc/toggle_valve(mob/user)
if(!valve_open && tank_one && tank_two)
valve_open = 1
var/turf/bombturf = get_turf(src)
@@ -207,6 +207,8 @@
investigate_log("Bomb valve opened at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]) with [attached_device ? attached_device : "no device"], attached by [attacher_name]. Last touched by: [key_name(mob)]", INVESTIGATE_BOMB)
message_admins("Bomb valve opened at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a> with [attached_device ? attached_device : "no device"], attached by [attacher_name]. Last touched by: [key_name_admin(mob)]")
log_game("Bomb valve opened at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]) with [attached_device ? attached_device : "no device"], attached by [attacher_name]. Last touched by: [key_name(mob)]")
if(user)
add_attack_logs(user, src, "Bomb valve opened with [attached_device ? attached_device : "no device"], attached by [attacher_name]. Last touched by: [key_name(mob)]", ATKLOG_FEW)
merge_gases()
spawn(20) // In case one tank bursts
for(var/i in 1 to 5)
+2 -2
View File
@@ -242,15 +242,15 @@
to_chat(user, "<span class='notice'>You hide [I] in the [src]. It will detonate some time after the flag is lit on fire.</span>")
var/turf/bombturf = get_turf(src)
var/area/A = get_area(bombturf)
message_admins("[key_name_admin(user)] has hidden [I] in the [src] ready for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
log_game("[key_name(user)] has hidden [I] in the [src] ready for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).")
investigate_log("[key_name(user)] has hidden [I] in the [src] ready for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).", INVESTIGATE_BOMB)
add_attack_logs(user, src, "has hidden [I] ready for detonation in", ATKLOG_MOST)
else if(is_hot(I) && !(resistance_flags & ON_FIRE) && boobytrap && trapper)
var/turf/bombturf = get_turf(src)
var/area/A = get_area(bombturf)
message_admins("[key_name_admin(user)] has lit the [src] trapped with [boobytrap] by [key_name_admin(trapper)] at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
log_game("[key_name_admin(user)] has lit the [src] trapped with [boobytrap] by [key_name_admin(trapper)] at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).")
investigate_log("[key_name_admin(user)] has lit the [src] trapped with [boobytrap] by [key_name_admin(trapper)] at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).", INVESTIGATE_BOMB)
add_attack_logs(user, src, "has lit (booby trapped with [boobytrap]", ATKLOG_FEW)
burn()
else
return ..()
@@ -185,20 +185,18 @@
/obj/item/borg/upgrade/syndicate
name = "safety override module"
desc = "Unlocks the hidden, deadlier functions of a cyborg. Also prevents emag subversion."
desc = "Unlocks the hidden, deadlier functions of a cyborg."
icon_state = "cyborg_upgrade3"
origin_tech = "combat=4;syndicate=1"
origin_tech = "combat=6;materials=6"
require_module = TRUE
/obj/item/borg/upgrade/syndicate/action(mob/living/silicon/robot/R)
if(..())
return
if(R.emagged)
return
if(R.weapons_unlock)
to_chat(R, "<span class='warning'>Internal diagnostic error: incompatible upgrade module detected.</span>")
to_chat(R, "<span class='warning'>Warning: Safety Overide Protocols have be disabled.</span>")
return
R.emagged = 1
R.weapons_unlock = 1
return TRUE
/obj/item/borg/upgrade/lavaproof
@@ -54,7 +54,6 @@ GLOBAL_LIST_INIT(metal_recipes, list(
new /datum/stack_recipe/rods("metal rod", /obj/item/stack/rods, 1, 2, 50),
null,
new /datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("modular console", /obj/machinery/modular_computer/console/buildable/, 10, time = 25, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("machine frame", /obj/machinery/constructable_frame/machine_frame, 5, time = 25, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1),
+30 -29
View File
@@ -214,8 +214,9 @@
/obj/item/twohanded/dualsaber/toy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
return 0
/obj/item/twohanded/dualsaber/toy/IsReflect()//Stops Toy Dualsabers from reflecting energy projectiles
return 0
/obj/item/twohanded/dualsaber/toy/IsReflect()
if(wielded)
return 2
/obj/item/toy/katana
name = "replica katana"
@@ -404,7 +405,7 @@
obj/item/toy/cards
/obj/item/toy/cards
resistance_flags = FLAMMABLE
max_integrity = 50
var/parentdeck = null
@@ -416,14 +417,14 @@ obj/item/toy/cards
var/card_throw_range = 20
var/list/card_attack_verb = list("attacked")
obj/item/toy/cards/New()
/obj/item/toy/cards/New()
..()
obj/item/toy/cards/proc/apply_card_vars(obj/item/toy/cards/newobj, obj/item/toy/cards/sourceobj) // Applies variables for supporting multiple types of card deck
/obj/item/toy/cards/proc/apply_card_vars(obj/item/toy/cards/newobj, obj/item/toy/cards/sourceobj) // Applies variables for supporting multiple types of card deck
if(!istype(sourceobj))
return
obj/item/toy/cards/deck
/obj/item/toy/cards/deck
name = "deck of cards"
desc = "A deck of space-grade playing cards."
icon = 'icons/obj/toy.dmi'
@@ -433,7 +434,7 @@ obj/item/toy/cards/deck
var/cooldown = 0
var/list/cards = list()
obj/item/toy/cards/deck/New()
/obj/item/toy/cards/deck/New()
..()
icon_state = "deck_[deckstyle]_full"
for(var/i in 2 to 10)
@@ -458,7 +459,7 @@ obj/item/toy/cards/deck/New()
cards += "Ace of Clubs"
cards += "Ace of Diamonds"
obj/item/toy/cards/deck/attack_hand(mob/user as mob)
/obj/item/toy/cards/deck/attack_hand(mob/user as mob)
var/choice = null
if(cards.len == 0)
icon_state = "deck_[deckstyle]_empty"
@@ -476,14 +477,14 @@ obj/item/toy/cards/deck/attack_hand(mob/user as mob)
visible_message("<span class='notice'>[user] draws a card from the deck.</span>", "<span class='notice'>You draw a card from the deck.</span>")
update_icon()
obj/item/toy/cards/deck/attack_self(mob/user as mob)
/obj/item/toy/cards/deck/attack_self(mob/user as mob)
if(cooldown < world.time - 50)
cards = shuffle(cards)
playsound(user, 'sound/items/cardshuffle.ogg', 50, 1)
user.visible_message("<span class='notice'>[user] shuffles the deck.</span>", "<span class='notice'>You shuffle the deck.</span>")
cooldown = world.time
obj/item/toy/cards/deck/attackby(obj/item/toy/cards/singlecard/C, mob/living/user, params)
/obj/item/toy/cards/deck/attackby(obj/item/toy/cards/singlecard/C, mob/living/user, params)
..()
if(istype(C))
if(C.parentdeck == src)
@@ -498,7 +499,7 @@ obj/item/toy/cards/deck/attackby(obj/item/toy/cards/singlecard/C, mob/living/use
update_icon()
obj/item/toy/cards/deck/attackby(obj/item/toy/cards/cardhand/C, mob/living/user, params)
/obj/item/toy/cards/deck/attackby(obj/item/toy/cards/cardhand/C, mob/living/user, params)
..()
if(istype(C))
if(C.parentdeck == src)
@@ -512,7 +513,7 @@ obj/item/toy/cards/deck/attackby(obj/item/toy/cards/cardhand/C, mob/living/user,
to_chat(user, "<span class='notice'>You can't mix cards from other decks.</span>")
update_icon()
obj/item/toy/cards/deck/MouseDrop(atom/over_object)
/obj/item/toy/cards/deck/MouseDrop(atom/over_object)
var/mob/M = usr
if(usr.stat || !ishuman(usr) || !usr.canmove || usr.restrained())
return
@@ -536,7 +537,7 @@ obj/item/toy/cards/deck/MouseDrop(atom/over_object)
else
to_chat(usr, "<span class='notice'>You can't reach it from here.</span>")
obj/item/toy/cards/deck/update_icon()
/obj/item/toy/cards/deck/update_icon()
switch(cards.len)
if(0)
icon_state = "deck_[deckstyle]_empty"
@@ -547,7 +548,7 @@ obj/item/toy/cards/deck/update_icon()
else
icon_state = "deck_[deckstyle]_full"
obj/item/toy/cards/cardhand
/obj/item/toy/cards/cardhand
name = "hand of cards"
desc = "A number of cards not in a deck, customarily held in ones hand."
icon = 'icons/obj/toy.dmi'
@@ -557,11 +558,11 @@ obj/item/toy/cards/cardhand
var/choice = null
obj/item/toy/cards/cardhand/attack_self(mob/user as mob)
/obj/item/toy/cards/cardhand/attack_self(mob/user as mob)
user.set_machine(src)
interact(user)
obj/item/toy/cards/cardhand/interact(mob/user)
/obj/item/toy/cards/cardhand/interact(mob/user)
var/dat = "You have:<BR>"
for(var/t in currenthand)
dat += "<A href='?src=[UID()];pick=[t]'>A [t].</A><BR>"
@@ -572,7 +573,7 @@ obj/item/toy/cards/cardhand/interact(mob/user)
popup.open()
obj/item/toy/cards/cardhand/Topic(href, href_list)
/obj/item/toy/cards/cardhand/Topic(href, href_list)
if(..())
return
if(usr.stat || !ishuman(usr) || !usr.canmove)
@@ -606,7 +607,7 @@ obj/item/toy/cards/cardhand/Topic(href, href_list)
qdel(src)
return
obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living/user, params)
/obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living/user, params)
if(istype(C))
if(C.parentdeck == parentdeck)
currenthand += C.cardname
@@ -618,7 +619,7 @@ obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living
else
to_chat(user, "<span class='notice'>You can't mix cards from other decks.</span>")
obj/item/toy/cards/cardhand/apply_card_vars(obj/item/toy/cards/newobj,obj/item/toy/cards/sourceobj)
/obj/item/toy/cards/cardhand/apply_card_vars(obj/item/toy/cards/newobj,obj/item/toy/cards/sourceobj)
..()
newobj.deckstyle = sourceobj.deckstyle
newobj.icon_state = "[deckstyle]_hand2" // Another dumb hack, without this the hand is invisible (or has the default deckstyle) until another card is added.
@@ -631,7 +632,7 @@ obj/item/toy/cards/cardhand/apply_card_vars(obj/item/toy/cards/newobj,obj/item/t
newobj.resistance_flags = sourceobj.resistance_flags
obj/item/toy/cards/singlecard
/obj/item/toy/cards/singlecard
name = "card"
desc = "a card"
icon = 'icons/obj/toy.dmi'
@@ -642,7 +643,7 @@ obj/item/toy/cards/singlecard
pixel_x = -5
obj/item/toy/cards/singlecard/examine(mob/user)
/obj/item/toy/cards/singlecard/examine(mob/user)
. = ..()
if(get_dist(user, src) <= 0)
if(ishuman(user))
@@ -653,7 +654,7 @@ obj/item/toy/cards/singlecard/examine(mob/user)
. += "<span class='notice'>You need to have the card in your hand to check it.</span>"
obj/item/toy/cards/singlecard/verb/Flip()
/obj/item/toy/cards/singlecard/verb/Flip()
set name = "Flip Card"
set category = "Object"
set src in range(1)
@@ -674,7 +675,7 @@ obj/item/toy/cards/singlecard/verb/Flip()
name = "card"
pixel_x = -5
obj/item/toy/cards/singlecard/attackby(obj/item/I, mob/living/user, params)
/obj/item/toy/cards/singlecard/attackby(obj/item/I, mob/living/user, params)
if(istype(I, /obj/item/toy/cards/singlecard/))
var/obj/item/toy/cards/singlecard/C = I
if(C.parentdeck == parentdeck)
@@ -704,7 +705,7 @@ obj/item/toy/cards/singlecard/attackby(obj/item/I, mob/living/user, params)
else
to_chat(user, "<span class='notice'>You can't mix cards from other decks.</span>")
obj/item/toy/cards/cardhand/update_icon()
/obj/item/toy/cards/cardhand/update_icon()
switch(currenthand.len)
if(0 to 1)
return
@@ -718,12 +719,12 @@ obj/item/toy/cards/cardhand/update_icon()
icon_state = "[deckstyle]_hand5"
obj/item/toy/cards/singlecard/attack_self(mob/user)
/obj/item/toy/cards/singlecard/attack_self(mob/user)
if(usr.stat || !ishuman(usr) || !usr.canmove || usr.restrained())
return
Flip()
obj/item/toy/cards/singlecard/apply_card_vars(obj/item/toy/cards/singlecard/newobj,obj/item/toy/cards/sourceobj)
/obj/item/toy/cards/singlecard/apply_card_vars(obj/item/toy/cards/singlecard/newobj,obj/item/toy/cards/sourceobj)
..()
newobj.deckstyle = sourceobj.deckstyle
newobj.icon_state = "singlecard_down_[deckstyle]" // Without this the card is invisible until flipped. It's an ugly hack, but it works.
@@ -745,7 +746,7 @@ obj/item/toy/cards/singlecard/apply_card_vars(obj/item/toy/cards/singlecard/newo
|| Syndicate playing cards, for pretending you're Gambit and playing poker for the nuke disk. ||
*/
obj/item/toy/cards/deck/syndicate
/obj/item/toy/cards/deck/syndicate
name = "suspicious looking deck of cards"
desc = "A deck of space-grade playing cards. They seem unusually rigid."
deckstyle = "syndicate"
@@ -760,10 +761,10 @@ obj/item/toy/cards/deck/syndicate
/*
|| Custom card decks ||
*/
obj/item/toy/cards/deck/black
/obj/item/toy/cards/deck/black
deckstyle = "black"
obj/item/toy/cards/deck/syndicate/black
/obj/item/toy/cards/deck/syndicate/black
deckstyle = "black"
/obj/item/toy/nuke
+8
View File
@@ -59,6 +59,14 @@
/obj/item/trash/fried_vox
name = "Kentucky Fried Vox"
icon_state = "fried_vox_empty"
item_state = "fried_vox_empty"
slot_flags = SLOT_HEAD
dog_fashion = /datum/dog_fashion/head/fried_vox_empty
sprite_sheets = list(
"Skrell" = 'icons/mob/species/skrell/head.dmi',
"Drask" = 'icons/mob/species/drask/head.dmi',
"Kidan" = 'icons/mob/species/kidan/head.dmi'
)
/obj/item/trash/pistachios
name = "Pistachios pack"
@@ -102,6 +102,7 @@
var/rank = null //actual job
var/owner_uid
var/owner_ckey
var/lastlog
var/dorm = 0 // determines if this ID has claimed a dorm already
var/sex
+4
View File
@@ -66,6 +66,10 @@ LIGHTERS ARE IN LIGHTERS.DM
..()
light()
/obj/item/clothing/mask/cigarette/catch_fire()
if(!lit)
light("<span class='warning'>The [name] is lit by the flames!</span>")
/obj/item/clothing/mask/cigarette/welder_act(mob/user, obj/item/I)
. = TRUE
if(I.tool_use_check(user, 0)) //Don't need to flash eyes because you are a badass
+1 -1
View File
@@ -189,8 +189,8 @@
var/turf/bombturf = get_turf(src)
var/area/A = get_area(bombturf)
investigate_log("E20 detonated at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]) with a roll of [result]. Triggered by: [key_name(user)]", INVESTIGATE_BOMB)
message_admins("E20 detonated at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a> with a roll of [result]. Triggered by: [key_name_admin(user)]")
log_game("E20 detonated at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]) with a roll of [result]. Triggered by: [key_name(user)]")
add_attack_logs(user, src, "detonated with a roll of [result]", ATKLOG_FEW)
/obj/item/dice/update_icon()
@@ -106,6 +106,8 @@
src.last_use = world.time
if(reagents.chem_temp > 300 || reagents.chem_temp < 280)
add_attack_logs(user, target, "Sprayed with superheated or cooled fire extinguisher at Temperature [reagents.chem_temp]K")
playsound(src.loc, 'sound/effects/extinguish.ogg', 75, 1, -3)
var/direction = get_dir(src,target)
+9 -4
View File
@@ -1,10 +1,11 @@
obj/item/firework
/obj/item/firework
name = "fireworks"
icon = 'icons/obj/fireworks.dmi'
icon_state = "rocket_0"
var/litzor = 0
var/datum/effect_system/sparkle_spread/S
obj/item/firework/attackby(obj/item/W,mob/user, params)
/obj/item/firework/attackby(obj/item/W,mob/user, params)
if(litzor)
return
if(is_hot(W))
@@ -20,13 +21,13 @@ obj/item/firework/attackby(obj/item/W,mob/user, params)
S.start()
qdel(src)
obj/item/sparkler
/obj/item/sparkler
name = "sparkler"
icon = 'icons/obj/fireworks.dmi'
icon_state = "sparkler_0"
var/litzor = 0
obj/item/sparkler/attackby(obj/item/W,mob/user, params)
/obj/item/sparkler/attackby(obj/item/W,mob/user, params)
if(litzor)
return
if(is_hot(W))
@@ -39,8 +40,12 @@ obj/item/sparkler/attackby(obj/item/W,mob/user, params)
do_sparks(1, 0, loc)
sleep(10)
qdel(src)
// TODO: Refactor this into a proper locker or something
// Or just axe the system. This code is 7 years old
/obj/crate/fireworks
name = "Fireworks!"
/obj/crate/fireworks/New()
new /obj/item/sparkler(src)
new /obj/item/sparkler(src)
@@ -101,9 +101,9 @@
update_icon()
else if(clown_check(user))
// This used to go before the assembly check, but that has absolutely zero to do with priming the damn thing. You could spam the admins with it.
message_admins("[key_name_admin(usr)] has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a> [contained].")
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]) [contained].")
investigate_log("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z])[contained].", INVESTIGATE_BOMB)
add_attack_logs(user, src, "has primed (contained [contained])", ATKLOG_FEW)
to_chat(user, "<span class='warning'>You prime the [name]! [det_time / 10] second\s!</span>")
playsound(user.loc, 'sound/weapons/armbomb.ogg', 60, 1)
active = 1
@@ -120,7 +120,7 @@
owner.visible_message("<span class='danger'>[attack_text] hits [owner]'s [src], setting it off! What a shot!</span>")
var/turf/T = get_turf(src)
log_game("A projectile ([hitby]) detonated a grenade held by [key_name(owner)] at [COORD(T)]")
message_admins("A projectile ([hitby]) detonated a grenade held by [key_name_admin(owner)] at [ADMIN_COORDJMP(T)]")
add_attack_logs(P.firer, owner, "A projectile ([hitby]) detonated a grenade held", ATKLOG_FEW)
prime()
return 1 //It hit the grenade, not them
@@ -149,16 +149,16 @@
if(!O.reagents) continue
if(istype(O,/obj/item/slime_extract))
cores += " [O]"
for(var/reagent in O.reagents.reagent_list)
contained += " [reagent] "
for(var/R in O.reagents.reagent_list)
var/datum/reagent/reagent = R
contained += "[reagent.volume] [reagent], "
if(contained)
if(cores)
contained = "\[[cores];[contained]\]"
contained = "\[[cores]; [contained]\]"
else
contained = "\[[contained]\]"
contained = "\[ [contained]\]"
var/turf/bombturf = get_turf(loc)
var/area/A = bombturf.loc
message_admins("[key_name_admin(usr)] has completed [name] at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a> [contained].")
add_attack_logs(user, src, "has completed with [contained]", ATKLOG_MOST)
log_game("[key_name(usr)] has completed [name] at [bombturf.x], [bombturf.y], [bombturf.z]. [contained]")
else
to_chat(user, "<span class='notice'>You need to add at least one beaker before locking the assembly.</span>")
@@ -48,9 +48,9 @@
var/turf/bombturf = get_turf(src)
var/area/A = get_area(bombturf)
message_admins("[ADMIN_LOOKUPFLW(user)] has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)].")
log_game("[key_name(user)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].")
investigate_log("[key_name(user)] has primed a [name] for detonation at [A.name] [COORD(bombturf)])", INVESTIGATE_BOMB)
add_attack_logs(user, src, "has primed for detonation", ATKLOG_FEW)
if(iscarbon(user))
var/mob/living/carbon/C = user
C.throw_mode_on()
@@ -73,6 +73,7 @@
message_admins("[key_name_admin(usr)] has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>")
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z])")
investigate_log("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z])", INVESTIGATE_BOMB)
add_attack_logs(user, src, "has primed for detonation", ATKLOG_FEW)
if(iscarbon(user))
var/mob/living/carbon/C = user
C.throw_mode_on()
@@ -9,27 +9,27 @@
var/deliveryamt = 1 // amount of type to deliver
spawner_type = /mob/living/simple_animal/hostile/viscerator
prime() // Prime now just handles the two loops that query for people in lockers and people who can see it.
/obj/item/grenade/spawnergrenade/prime() // Prime now just handles the two loops that query for people in lockers and people who can see it.
if(spawner_type && deliveryamt)
// Make a quick flash
var/turf/T = get_turf(src)
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/carbon/C in viewers(T, null))
C.flash_eyes()
if(spawner_type && deliveryamt)
// Make a quick flash
var/turf/T = get_turf(src)
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/carbon/C in viewers(T, null))
C.flash_eyes()
for(var/i=1, i<=deliveryamt, i++)
var/atom/movable/x = new spawner_type
x.admin_spawned = admin_spawned
x.loc = T
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(x, pick(NORTH,SOUTH,EAST,WEST))
for(var/i=1, i<=deliveryamt, i++)
var/atom/movable/x = new spawner_type
x.admin_spawned = admin_spawned
x.loc = T
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(x, pick(NORTH,SOUTH,EAST,WEST))
// Spawn some hostile syndicate critters
// Spawn some hostile syndicate critters
qdel(src)
return
qdel(src)
return
/obj/item/grenade/spawnergrenade/manhacks
name = "manhack delivery grenade"
@@ -25,14 +25,14 @@
return ..()
/obj/item/claymore/highlander/equipped(mob/user, slot)
if(!ishuman(user))
if(!ishuman(user) || !user.mind)
return
var/mob/living/carbon/human/H = user
if(slot == slot_r_hand || slot == slot_l_hand)
if(H.martial_art && H.martial_art != style)
style.teach(H, 1)
if(H.mind.martial_art && H.mind.martial_art != style)
style.teach(H, TRUE)
to_chat(H, "<span class='notice'>THERE CAN ONLY BE ONE!</span>")
else if(H.martial_art && H.martial_art == style)
else if(H.mind.martial_art && H.mind.martial_art == style)
style.remove(H)
var/obj/item/claymore/highlander/sword = H.is_in_hands(/obj/item/claymore/highlander)
if(sword)
@@ -17,12 +17,12 @@
/obj/item/implant/krav_maga/activate()
var/mob/living/carbon/human/H = imp_in
if(!ishuman(H))
if(!ishuman(H) || !H.mind)
return
if(istype(H.martial_art, /datum/martial_art/krav_maga))
if(istype(H.mind.martial_art, /datum/martial_art/krav_maga))
style.remove(H)
else
style.teach(H,1)
style.teach(H, TRUE)
/obj/item/implanter/krav_maga
name = "implanter (krav maga)"
@@ -17,13 +17,6 @@
var/mob/living/carbon/occupant = null
var/injecting = 0
/obj/machinery/implantchair/proc
go_out()
put_mob(mob/living/carbon/M)
implant(var/mob/M)
add_implants()
/obj/machinery/implantchair/New()
..()
add_implants()
@@ -87,7 +80,7 @@
return
/obj/machinery/implantchair/go_out(mob/M)
/obj/machinery/implantchair/proc/go_out(mob/M)
if(!( src.occupant ))
return
if(M == occupant) // so that the guy inside can't eject himself -Agouri
@@ -101,7 +94,7 @@
return
/obj/machinery/implantchair/put_mob(mob/living/carbon/M)
/obj/machinery/implantchair/proc/put_mob(mob/living/carbon/M)
if(!iscarbon(M))
to_chat(usr, "<span class='warning'>The [src.name] cannot hold this!</span>")
return
@@ -116,7 +109,7 @@
return 1
/obj/machinery/implantchair/implant(mob/M)
/obj/machinery/implantchair/proc/implant(mob/M)
if(!istype(M, /mob/living/carbon))
return
if(!implant_list.len) return
@@ -131,7 +124,7 @@
return
/obj/machinery/implantchair/add_implants()
/obj/machinery/implantchair/proc/add_implants()
for(var/i=0, i<src.max_implants, i++)
var/obj/item/implant/mindshield/I = new /obj/item/implant/mindshield(src)
implant_list += I
+7 -10
View File
@@ -42,26 +42,23 @@
create_reagents(5)
/obj/item/kitchen/utensil/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M))
/obj/item/kitchen/utensil/attack(mob/living/carbon/C, mob/living/carbon/user)
if(!istype(C))
return ..()
if(user.a_intent != INTENT_HELP)
if(user.zone_selected == "head" || user.zone_selected == "eyes")
if((CLUMSY in user.mutations) && prob(50))
M = user
return eyestab(M,user)
C = user
return eyestab(C, user)
else
return ..()
if(contents.len)
if(length(contents))
var/obj/item/reagent_containers/food/snacks/toEat = contents[1]
if(istype(toEat))
if(M.eat(toEat, user))
toEat.On_Consume(M, user)
spawn(0)
if(toEat)
qdel(toEat)
if(C.eat(toEat, user))
toEat.On_Consume(C, user)
overlays.Cut()
return
@@ -556,7 +556,7 @@
icon_state = "duffel-clown"
item_state = "duffel-clown"
obj/item/storage/backpack/duffel/blueshield
/obj/item/storage/backpack/duffel/blueshield
name = "blueshield duffelbag"
desc = "A robust duffelbag issued to Nanotrasen's finest."
icon_state = "duffel-blueshield"
@@ -258,6 +258,14 @@
new /obj/item/grenade/flashbang(src)
update_icon()
/obj/item/storage/belt/security/webbing
name = "security webbing"
desc = "Unique and versatile chest rig, can hold security gear."
icon_state = "securitywebbing"
item_state = "securitywebbing"
storage_slots = 6
use_item_overlays = FALSE
/obj/item/storage/belt/soulstone
name = "soul stone belt"
desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away"
@@ -310,6 +318,18 @@
item_state = "utility"
use_item_overlays = 1 // So it will still show tools in it in case sec get lazy and just glance at it.
/obj/item/storage/belt/military/traitor/hacker
/obj/item/storage/belt/military/traitor/hacker/New()
..()
new /obj/item/screwdriver(src, "red")
new /obj/item/wrench(src)
new /obj/item/weldingtool/largetank(src)
new /obj/item/crowbar/red(src)
new /obj/item/wirecutters(src, "red")
new /obj/item/stack/cable_coil(src, 30, COLOR_RED)
update_icon()
/obj/item/storage/belt/grenade
name = "grenadier belt"
desc = "A belt for holding grenades."
+304 -299
View File
@@ -66,14 +66,15 @@
/obj/item/storage/box/survival
icon_state = "box_civ"
New()
..()
contents = list()
new /obj/item/clothing/mask/breath( src )
new /obj/item/tank/emergency_oxygen( src )
new /obj/item/reagent_containers/hypospray/autoinjector( src )
new /obj/item/flashlight/flare/glowstick/emergency( src )
return
/obj/item/storage/box/survival/New()
..()
contents = list()
new /obj/item/clothing/mask/breath( src )
new /obj/item/tank/emergency_oxygen( src )
new /obj/item/reagent_containers/hypospray/autoinjector( src )
new /obj/item/flashlight/flare/glowstick/emergency( src )
return
/obj/item/storage/box/survival_vox
icon_state = "box_vox"
@@ -99,66 +100,69 @@
/obj/item/storage/box/engineer
icon_state = "box_eng"
New()
..()
contents = list()
new /obj/item/clothing/mask/breath( src )
new /obj/item/tank/emergency_oxygen/engi( src )
new /obj/item/reagent_containers/hypospray/autoinjector( src )
new /obj/item/flashlight/flare/glowstick/emergency( src )
return
/obj/item/storage/box/engineer/New()
..()
contents = list()
new /obj/item/clothing/mask/breath( src )
new /obj/item/tank/emergency_oxygen/engi( src )
new /obj/item/reagent_containers/hypospray/autoinjector( src )
new /obj/item/flashlight/flare/glowstick/emergency( src )
return
/obj/item/storage/box/survival_mining
icon_state = "box_min"
New()
..()
contents = list()
new /obj/item/clothing/mask/gas/explorer(src)
new /obj/item/tank/emergency_oxygen/engi(src)
new /obj/item/crowbar/red(src)
new /obj/item/reagent_containers/hypospray/autoinjector(src)
new /obj/item/flashlight/flare/glowstick/emergency(src)
/obj/item/storage/box/survival_mining/New()
..()
contents = list()
new /obj/item/clothing/mask/gas/explorer(src)
new /obj/item/tank/emergency_oxygen/engi(src)
new /obj/item/crowbar/red(src)
new /obj/item/reagent_containers/hypospray/autoinjector(src)
new /obj/item/flashlight/flare/glowstick/emergency(src)
/obj/item/storage/box/survival_syndi
icon_state = "box_syndi"
New()
..()
contents = list()
new /obj/item/clothing/mask/gas/syndicate(src)
new /obj/item/tank/emergency_oxygen/syndi(src)
new /obj/item/reagent_containers/hypospray/autoinjector(src)
new /obj/item/reagent_containers/food/pill/initropidril(src)
new /obj/item/flashlight/flare/glowstick/red(src)
/obj/item/storage/box/survival_syndi/New()
..()
contents = list()
new /obj/item/clothing/mask/gas/syndicate(src)
new /obj/item/tank/emergency_oxygen/syndi(src)
new /obj/item/reagent_containers/hypospray/autoinjector(src)
new /obj/item/reagent_containers/food/pill/initropidril(src)
new /obj/item/flashlight/flare/glowstick/red(src)
/obj/item/storage/box/gloves
name = "box of latex gloves"
desc = "Contains white gloves."
icon_state = "latex"
New()
..()
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
/obj/item/storage/box/gloves/New()
..()
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
/obj/item/storage/box/masks
name = "sterile masks"
desc = "This box contains masks of sterility."
icon_state = "sterile"
New()
..()
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
/obj/item/storage/box/masks/New()
..()
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
/obj/item/storage/box/syringes
@@ -167,29 +171,29 @@
desc = "A biohazard alert warning is printed on the box"
icon_state = "syringe"
New()
..()
new /obj/item/reagent_containers/syringe( src )
new /obj/item/reagent_containers/syringe( src )
new /obj/item/reagent_containers/syringe( src )
new /obj/item/reagent_containers/syringe( src )
new /obj/item/reagent_containers/syringe( src )
new /obj/item/reagent_containers/syringe( src )
new /obj/item/reagent_containers/syringe( src )
/obj/item/storage/box/syringes/New()
..()
new /obj/item/reagent_containers/syringe( src )
new /obj/item/reagent_containers/syringe( src )
new /obj/item/reagent_containers/syringe( src )
new /obj/item/reagent_containers/syringe( src )
new /obj/item/reagent_containers/syringe( src )
new /obj/item/reagent_containers/syringe( src )
new /obj/item/reagent_containers/syringe( src )
/obj/item/storage/box/beakers
name = "beaker box"
icon_state = "beaker"
New()
..()
new /obj/item/reagent_containers/glass/beaker( src )
new /obj/item/reagent_containers/glass/beaker( src )
new /obj/item/reagent_containers/glass/beaker( src )
new /obj/item/reagent_containers/glass/beaker( src )
new /obj/item/reagent_containers/glass/beaker( src )
new /obj/item/reagent_containers/glass/beaker( src )
new /obj/item/reagent_containers/glass/beaker( src )
/obj/item/storage/box/beakers/New()
..()
new /obj/item/reagent_containers/glass/beaker( src )
new /obj/item/reagent_containers/glass/beaker( src )
new /obj/item/reagent_containers/glass/beaker( src )
new /obj/item/reagent_containers/glass/beaker( src )
new /obj/item/reagent_containers/glass/beaker( src )
new /obj/item/reagent_containers/glass/beaker( src )
new /obj/item/reagent_containers/glass/beaker( src )
/obj/item/storage/box/beakers/bluespace
name = "box of bluespace beakers"
@@ -219,14 +223,14 @@
name = "\improper DNA injectors"
desc = "This box contains injectors it seems."
New()
..()
new /obj/item/dnainjector/h2m(src)
new /obj/item/dnainjector/h2m(src)
new /obj/item/dnainjector/h2m(src)
new /obj/item/dnainjector/m2h(src)
new /obj/item/dnainjector/m2h(src)
new /obj/item/dnainjector/m2h(src)
/obj/item/storage/box/injectors/New()
..()
new /obj/item/dnainjector/h2m(src)
new /obj/item/dnainjector/h2m(src)
new /obj/item/dnainjector/h2m(src)
new /obj/item/dnainjector/m2h(src)
new /obj/item/dnainjector/m2h(src)
new /obj/item/dnainjector/m2h(src)
/obj/item/storage/box/slug
name = "Ammunition Box (Slug)"
@@ -304,29 +308,29 @@
desc = "<B>WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use.</B>"
icon_state = "flashbang"
New()
..()
new /obj/item/grenade/flashbang(src)
new /obj/item/grenade/flashbang(src)
new /obj/item/grenade/flashbang(src)
new /obj/item/grenade/flashbang(src)
new /obj/item/grenade/flashbang(src)
new /obj/item/grenade/flashbang(src)
new /obj/item/grenade/flashbang(src)
/obj/item/storage/box/flashbangs/New()
..()
new /obj/item/grenade/flashbang(src)
new /obj/item/grenade/flashbang(src)
new /obj/item/grenade/flashbang(src)
new /obj/item/grenade/flashbang(src)
new /obj/item/grenade/flashbang(src)
new /obj/item/grenade/flashbang(src)
new /obj/item/grenade/flashbang(src)
/obj/item/storage/box/flashes
name = "box of flashbulbs"
desc = "<B>WARNING: Flashes can cause serious eye damage, protective eyewear is required.</B>"
icon_state = "flashbang"
New()
..()
new /obj/item/flash(src)
new /obj/item/flash(src)
new /obj/item/flash(src)
new /obj/item/flash(src)
new /obj/item/flash(src)
new /obj/item/flash(src)
/obj/item/storage/box/flashes/New()
..()
new /obj/item/flash(src)
new /obj/item/flash(src)
new /obj/item/flash(src)
new /obj/item/flash(src)
new /obj/item/flash(src)
new /obj/item/flash(src)
/obj/item/storage/box/teargas
name = "box of tear gas grenades (WARNING)"
@@ -348,13 +352,13 @@
desc = "A box with 5 emp grenades."
icon_state = "flashbang"
New()
..()
new /obj/item/grenade/empgrenade(src)
new /obj/item/grenade/empgrenade(src)
new /obj/item/grenade/empgrenade(src)
new /obj/item/grenade/empgrenade(src)
new /obj/item/grenade/empgrenade(src)
/obj/item/storage/box/emps/New()
..()
new /obj/item/grenade/empgrenade(src)
new /obj/item/grenade/empgrenade(src)
new /obj/item/grenade/empgrenade(src)
new /obj/item/grenade/empgrenade(src)
new /obj/item/grenade/empgrenade(src)
/obj/item/storage/box/trackimp
@@ -362,15 +366,15 @@
desc = "Box full of scum-bag tracking utensils."
icon_state = "implant"
New()
..()
new /obj/item/implantcase/tracking(src)
new /obj/item/implantcase/tracking(src)
new /obj/item/implantcase/tracking(src)
new /obj/item/implantcase/tracking(src)
new /obj/item/implanter(src)
new /obj/item/implantpad(src)
new /obj/item/locator(src)
/obj/item/storage/box/trackimp/New()
..()
new /obj/item/implantcase/tracking(src)
new /obj/item/implantcase/tracking(src)
new /obj/item/implantcase/tracking(src)
new /obj/item/implantcase/tracking(src)
new /obj/item/implanter(src)
new /obj/item/implantpad(src)
new /obj/item/locator(src)
/obj/item/storage/box/minertracker
name = "boxed tracking implant kit"
@@ -391,86 +395,86 @@
desc = "Box of stuff used to implant chemicals."
icon_state = "implant"
New()
..()
new /obj/item/implantcase/chem(src)
new /obj/item/implantcase/chem(src)
new /obj/item/implantcase/chem(src)
new /obj/item/implantcase/chem(src)
new /obj/item/implantcase/chem(src)
new /obj/item/implanter(src)
new /obj/item/implantpad(src)
/obj/item/storage/box/chemimp/New()
..()
new /obj/item/implantcase/chem(src)
new /obj/item/implantcase/chem(src)
new /obj/item/implantcase/chem(src)
new /obj/item/implantcase/chem(src)
new /obj/item/implantcase/chem(src)
new /obj/item/implanter(src)
new /obj/item/implantpad(src)
/obj/item/storage/box/exileimp
name = "boxed exile implant kit"
desc = "Box of exile implants. It has a picture of a clown being booted through the Gateway."
icon_state = "implant"
New()
..()
new /obj/item/implantcase/exile(src)
new /obj/item/implantcase/exile(src)
new /obj/item/implantcase/exile(src)
new /obj/item/implantcase/exile(src)
new /obj/item/implantcase/exile(src)
new /obj/item/implanter(src)
/obj/item/storage/box/exileimp/New()
..()
new /obj/item/implantcase/exile(src)
new /obj/item/implantcase/exile(src)
new /obj/item/implantcase/exile(src)
new /obj/item/implantcase/exile(src)
new /obj/item/implantcase/exile(src)
new /obj/item/implanter(src)
/obj/item/storage/box/deathimp
name = "death alarm implant kit"
desc = "Box of life sign monitoring implants."
icon_state = "implant"
New()
..()
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implanter(src)
/obj/item/storage/box/deathimp/New()
..()
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implanter(src)
/obj/item/storage/box/tapes
name = "Tape Box"
desc = "A box of spare recording tapes"
icon_state = "box"
New()
..()
new /obj/item/tape(src)
new /obj/item/tape(src)
new /obj/item/tape(src)
new /obj/item/tape(src)
new /obj/item/tape(src)
new /obj/item/tape(src)
/obj/item/storage/box/tapes/New()
..()
new /obj/item/tape(src)
new /obj/item/tape(src)
new /obj/item/tape(src)
new /obj/item/tape(src)
new /obj/item/tape(src)
new /obj/item/tape(src)
/obj/item/storage/box/rxglasses
name = "prescription glasses"
desc = "This box contains nerd glasses."
icon_state = "glasses"
New()
..()
new /obj/item/clothing/glasses/regular(src)
new /obj/item/clothing/glasses/regular(src)
new /obj/item/clothing/glasses/regular(src)
new /obj/item/clothing/glasses/regular(src)
new /obj/item/clothing/glasses/regular(src)
new /obj/item/clothing/glasses/regular(src)
new /obj/item/clothing/glasses/regular(src)
/obj/item/storage/box/rxglasses/New()
..()
new /obj/item/clothing/glasses/regular(src)
new /obj/item/clothing/glasses/regular(src)
new /obj/item/clothing/glasses/regular(src)
new /obj/item/clothing/glasses/regular(src)
new /obj/item/clothing/glasses/regular(src)
new /obj/item/clothing/glasses/regular(src)
new /obj/item/clothing/glasses/regular(src)
/obj/item/storage/box/drinkingglasses
name = "box of drinking glasses"
desc = "It has a picture of drinking glasses on it."
New()
..()
new /obj/item/reagent_containers/food/drinks/drinkingglass(src)
new /obj/item/reagent_containers/food/drinks/drinkingglass(src)
new /obj/item/reagent_containers/food/drinks/drinkingglass(src)
new /obj/item/reagent_containers/food/drinks/drinkingglass(src)
new /obj/item/reagent_containers/food/drinks/drinkingglass(src)
new /obj/item/reagent_containers/food/drinks/drinkingglass(src)
/obj/item/storage/box/drinkingglasses/New()
..()
new /obj/item/reagent_containers/food/drinks/drinkingglass(src)
new /obj/item/reagent_containers/food/drinks/drinkingglass(src)
new /obj/item/reagent_containers/food/drinks/drinkingglass(src)
new /obj/item/reagent_containers/food/drinks/drinkingglass(src)
new /obj/item/reagent_containers/food/drinks/drinkingglass(src)
new /obj/item/reagent_containers/food/drinks/drinkingglass(src)
/obj/item/storage/box/cdeathalarm_kit
name = "Death Alarm Kit"
@@ -478,43 +482,42 @@
icon_state = "implant"
item_state = "syringe_kit"
New()
..()
new /obj/item/implanter(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
/obj/item/storage/box/cdeathalarm_kit/New()
..()
new /obj/item/implanter(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
new /obj/item/implantcase/death_alarm(src)
/obj/item/storage/box/condimentbottles
name = "box of condiment bottles"
desc = "It has a large ketchup smear on it."
New()
..()
new /obj/item/reagent_containers/food/condiment(src)
new /obj/item/reagent_containers/food/condiment(src)
new /obj/item/reagent_containers/food/condiment(src)
new /obj/item/reagent_containers/food/condiment(src)
new /obj/item/reagent_containers/food/condiment(src)
new /obj/item/reagent_containers/food/condiment(src)
/obj/item/storage/box/condimentbottles/New()
..()
new /obj/item/reagent_containers/food/condiment(src)
new /obj/item/reagent_containers/food/condiment(src)
new /obj/item/reagent_containers/food/condiment(src)
new /obj/item/reagent_containers/food/condiment(src)
new /obj/item/reagent_containers/food/condiment(src)
new /obj/item/reagent_containers/food/condiment(src)
/obj/item/storage/box/cups
name = "box of paper cups"
desc = "It has pictures of paper cups on the front."
New()
..()
new /obj/item/reagent_containers/food/drinks/sillycup( src )
new /obj/item/reagent_containers/food/drinks/sillycup( src )
new /obj/item/reagent_containers/food/drinks/sillycup( src )
new /obj/item/reagent_containers/food/drinks/sillycup( src )
new /obj/item/reagent_containers/food/drinks/sillycup( src )
new /obj/item/reagent_containers/food/drinks/sillycup( src )
new /obj/item/reagent_containers/food/drinks/sillycup( src )
/obj/item/storage/box/cups/New()
..()
new /obj/item/reagent_containers/food/drinks/sillycup( src )
new /obj/item/reagent_containers/food/drinks/sillycup( src )
new /obj/item/reagent_containers/food/drinks/sillycup( src )
new /obj/item/reagent_containers/food/drinks/sillycup( src )
new /obj/item/reagent_containers/food/drinks/sillycup( src )
new /obj/item/reagent_containers/food/drinks/sillycup( src )
new /obj/item/reagent_containers/food/drinks/sillycup( src )
/obj/item/storage/box/donkpockets
@@ -522,28 +525,28 @@
desc = "<B>Instructions:</B> <I>Heat in microwave. Product will cool if not eaten within seven minutes.</I>"
icon_state = "donk_kit"
New()
..()
new /obj/item/reagent_containers/food/snacks/donkpocket(src)
new /obj/item/reagent_containers/food/snacks/donkpocket(src)
new /obj/item/reagent_containers/food/snacks/donkpocket(src)
new /obj/item/reagent_containers/food/snacks/donkpocket(src)
new /obj/item/reagent_containers/food/snacks/donkpocket(src)
new /obj/item/reagent_containers/food/snacks/donkpocket(src)
/obj/item/storage/box/donkpockets/New()
..()
new /obj/item/reagent_containers/food/snacks/donkpocket(src)
new /obj/item/reagent_containers/food/snacks/donkpocket(src)
new /obj/item/reagent_containers/food/snacks/donkpocket(src)
new /obj/item/reagent_containers/food/snacks/donkpocket(src)
new /obj/item/reagent_containers/food/snacks/donkpocket(src)
new /obj/item/reagent_containers/food/snacks/donkpocket(src)
/obj/item/storage/box/syndidonkpockets
name = "box of donk-pockets"
desc = "This box feels slightly warm"
icon_state = "donk_kit"
New()
..()
new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src)
new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src)
new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src)
new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src)
new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src)
new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src)
/obj/item/storage/box/syndidonkpockets/New()
..()
new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src)
new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src)
new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src)
new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src)
new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src)
new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src)
/obj/item/storage/box/monkeycubes
name = "monkey cube box"
@@ -604,59 +607,59 @@
desc = "Has so many empty IDs."
icon_state = "id"
New()
..()
new /obj/item/card/id(src)
new /obj/item/card/id(src)
new /obj/item/card/id(src)
new /obj/item/card/id(src)
new /obj/item/card/id(src)
new /obj/item/card/id(src)
new /obj/item/card/id(src)
/obj/item/storage/box/ids/New()
..()
new /obj/item/card/id(src)
new /obj/item/card/id(src)
new /obj/item/card/id(src)
new /obj/item/card/id(src)
new /obj/item/card/id(src)
new /obj/item/card/id(src)
new /obj/item/card/id(src)
/obj/item/storage/box/prisoner
name = "prisoner IDs"
desc = "Take away their last shred of dignity, their name."
icon_state = "id"
New()
..()
new /obj/item/card/id/prisoner/one(src)
new /obj/item/card/id/prisoner/two(src)
new /obj/item/card/id/prisoner/three(src)
new /obj/item/card/id/prisoner/four(src)
new /obj/item/card/id/prisoner/five(src)
new /obj/item/card/id/prisoner/six(src)
new /obj/item/card/id/prisoner/seven(src)
/obj/item/storage/box/prisoner/New()
..()
new /obj/item/card/id/prisoner/one(src)
new /obj/item/card/id/prisoner/two(src)
new /obj/item/card/id/prisoner/three(src)
new /obj/item/card/id/prisoner/four(src)
new /obj/item/card/id/prisoner/five(src)
new /obj/item/card/id/prisoner/six(src)
new /obj/item/card/id/prisoner/seven(src)
/obj/item/storage/box/seccarts
name = "spare R.O.B.U.S.T. Cartridges"
desc = "A box full of R.O.B.U.S.T. Cartridges, used by Security."
icon_state = "pda"
New()
..()
new /obj/item/cartridge/security(src)
new /obj/item/cartridge/security(src)
new /obj/item/cartridge/security(src)
new /obj/item/cartridge/security(src)
new /obj/item/cartridge/security(src)
new /obj/item/cartridge/security(src)
new /obj/item/cartridge/security(src)
/obj/item/storage/box/seccarts/New()
..()
new /obj/item/cartridge/security(src)
new /obj/item/cartridge/security(src)
new /obj/item/cartridge/security(src)
new /obj/item/cartridge/security(src)
new /obj/item/cartridge/security(src)
new /obj/item/cartridge/security(src)
new /obj/item/cartridge/security(src)
/obj/item/storage/box/holobadge
name = "holobadge box"
icon_state = "box_badge"
desc = "A box claiming to contain holobadges."
New()
new /obj/item/clothing/accessory/holobadge(src)
new /obj/item/clothing/accessory/holobadge(src)
new /obj/item/clothing/accessory/holobadge(src)
new /obj/item/clothing/accessory/holobadge(src)
new /obj/item/clothing/accessory/holobadge/cord(src)
new /obj/item/clothing/accessory/holobadge/cord(src)
..()
return
/obj/item/storage/box/holobadge/New()
..()
new /obj/item/clothing/accessory/holobadge(src)
new /obj/item/clothing/accessory/holobadge(src)
new /obj/item/clothing/accessory/holobadge(src)
new /obj/item/clothing/accessory/holobadge(src)
new /obj/item/clothing/accessory/holobadge/cord(src)
new /obj/item/clothing/accessory/holobadge/cord(src)
/obj/item/storage/box/evidence
name = "evidence bag box"
@@ -677,50 +680,50 @@
desc = "A box full of handcuffs."
icon_state = "handcuff"
New()
..()
new /obj/item/restraints/handcuffs(src)
new /obj/item/restraints/handcuffs(src)
new /obj/item/restraints/handcuffs(src)
new /obj/item/restraints/handcuffs(src)
new /obj/item/restraints/handcuffs(src)
new /obj/item/restraints/handcuffs(src)
new /obj/item/restraints/handcuffs(src)
/obj/item/storage/box/handcuffs/New()
..()
new /obj/item/restraints/handcuffs(src)
new /obj/item/restraints/handcuffs(src)
new /obj/item/restraints/handcuffs(src)
new /obj/item/restraints/handcuffs(src)
new /obj/item/restraints/handcuffs(src)
new /obj/item/restraints/handcuffs(src)
new /obj/item/restraints/handcuffs(src)
/obj/item/storage/box/zipties
name = "box of spare zipties"
desc = "A box full of zipties."
icon_state = "handcuff"
New()
..()
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
/obj/item/storage/box/zipties/New()
..()
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
/obj/item/storage/box/alienhandcuffs
name = "box of spare handcuffs"
desc = "A box full of handcuffs."
icon_state = "alienboxCuffs"
New()
..()
for(var/i in 1 to 7)
new /obj/item/restraints/handcuffs/alien(src)
/obj/item/storage/box/alienhandcuffs/New()
..()
for(var/i in 1 to 7)
new /obj/item/restraints/handcuffs/alien(src)
/obj/item/storage/box/fakesyndiesuit
name = "boxed space suit and helmet"
desc = "A sleek, sturdy box used to hold replica spacesuits."
icon_state = "box_of_doom"
New()
..()
new /obj/item/clothing/head/syndicatefake(src)
new /obj/item/clothing/suit/syndicatefake(src)
/obj/item/storage/box/fakesyndiesuit/New()
..()
new /obj/item/clothing/head/syndicatefake(src)
new /obj/item/clothing/suit/syndicatefake(src)
/obj/item/storage/box/enforcer_rubber
name = "enforcer pistol kit (rubber)"
@@ -777,28 +780,28 @@
desc = "<B><FONT color='red'>WARNING:</FONT></B> <I>Keep out of reach of children</I>."
icon_state = "mousetraps"
New()
..()
new /obj/item/assembly/mousetrap( src )
new /obj/item/assembly/mousetrap( src )
new /obj/item/assembly/mousetrap( src )
new /obj/item/assembly/mousetrap( src )
new /obj/item/assembly/mousetrap( src )
new /obj/item/assembly/mousetrap( src )
/obj/item/storage/box/mousetraps/New()
..()
new /obj/item/assembly/mousetrap( src )
new /obj/item/assembly/mousetrap( src )
new /obj/item/assembly/mousetrap( src )
new /obj/item/assembly/mousetrap( src )
new /obj/item/assembly/mousetrap( src )
new /obj/item/assembly/mousetrap( src )
/obj/item/storage/box/pillbottles
name = "box of pill bottles"
desc = "It has pictures of pill bottles on its front."
New()
..()
new /obj/item/storage/pill_bottle( src )
new /obj/item/storage/pill_bottle( src )
new /obj/item/storage/pill_bottle( src )
new /obj/item/storage/pill_bottle( src )
new /obj/item/storage/pill_bottle( src )
new /obj/item/storage/pill_bottle( src )
new /obj/item/storage/pill_bottle( src )
/obj/item/storage/box/pillbottles/New()
..()
new /obj/item/storage/pill_bottle( src )
new /obj/item/storage/pill_bottle( src )
new /obj/item/storage/pill_bottle( src )
new /obj/item/storage/pill_bottle( src )
new /obj/item/storage/pill_bottle( src )
new /obj/item/storage/pill_bottle( src )
new /obj/item/storage/pill_bottle( src )
/obj/item/storage/box/patch_packs
name = "box of patch packs"
@@ -836,10 +839,11 @@
icon_state = "spbox"
storage_slots = 8
can_hold = list(/obj/item/toy/snappop)
New()
..()
for(var/i=1; i <= storage_slots; i++)
new /obj/item/toy/snappop(src)
/obj/item/storage/box/snappops/New()
..()
for(var/i=1; i <= storage_slots; i++)
new /obj/item/toy/snappop(src)
/obj/item/storage/box/matches
name = "matchbox"
@@ -868,23 +872,24 @@
name = "box of injectors"
desc = "Contains autoinjectors."
icon_state = "syringe"
New()
..()
for(var/i; i < storage_slots; i++)
new /obj/item/reagent_containers/hypospray/autoinjector(src)
/obj/item/storage/box/autoinjectors/New()
..()
for(var/i; i < storage_slots; i++)
new /obj/item/reagent_containers/hypospray/autoinjector(src)
/obj/item/storage/box/autoinjector/utility
name = "autoinjector kit"
desc = "A box with several utility autoinjectors for the economical miner."
icon_state = "syringe"
New()
..()
new /obj/item/reagent_containers/hypospray/autoinjector/teporone(src)
new /obj/item/reagent_containers/hypospray/autoinjector/teporone(src)
new /obj/item/reagent_containers/hypospray/autoinjector/stimpack(src)
new /obj/item/reagent_containers/hypospray/autoinjector/stimpack(src)
new /obj/item/reagent_containers/hypospray/autoinjector/stimpack(src)
/obj/item/storage/box/autoinjector/utility/New()
..()
new /obj/item/reagent_containers/hypospray/autoinjector/teporone(src)
new /obj/item/reagent_containers/hypospray/autoinjector/teporone(src)
new /obj/item/reagent_containers/hypospray/autoinjector/stimpack(src)
new /obj/item/reagent_containers/hypospray/autoinjector/stimpack(src)
new /obj/item/reagent_containers/hypospray/autoinjector/stimpack(src)
/obj/item/storage/box/lights
name = "replacement bulbs"
@@ -1048,7 +1053,7 @@
/obj/item/storage/box/responseteam/New()
..()
new /obj/item/clothing/mask/breath(src)
new /obj/item/tank/emergency_oxygen/engi(src)
new /obj/item/tank/emergency_oxygen/engi/full(src)
new /obj/item/flashlight/flare(src)
new /obj/item/kitchen/knife/combat(src)
new /obj/item/radio/centcom(src)
@@ -204,11 +204,11 @@
var/obj/item/sample_object
var/number
New(obj/item/sample as obj)
if(!istype(sample))
qdel(src)
sample_object = sample
number = 1
/datum/numbered_display/New(obj/item/sample as obj)
if(!istype(sample))
qdel(src)
sample_object = sample
number = 1
//This proc determins the size of the inventory to be displayed. Please touch it only if you know what you're doing.
/obj/item/storage/proc/orient2hud(mob/user as mob)
@@ -1,7 +1,7 @@
/obj/item/storage/box/syndicate/New()
..()
switch(pickweight(list("bloodyspai" = 1, "thief" = 1, "bond" = 1, "sabotage" = 1, "payday" = 1, "implant" = 1, "hacker" = 1, "darklord" = 1, "professional" = 1)))
if("bloodyspai") // 35TC + one 0TC
if("bloodyspai") // 37TC + one 0TC
new /obj/item/clothing/under/chameleon(src) // 2TC
new /obj/item/clothing/mask/chameleon(src) // 0TC
new /obj/item/card/id/syndicate(src) // 2TC
@@ -14,12 +14,12 @@
new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) // 2TC
new /obj/item/flashlight/emp(src) // 2TC
new /obj/item/clothing/glasses/hud/security/chameleon(src) // 2TC
new /obj/item/chameleon(src) // 8TC
new /obj/item/chameleon(src) // 7TC
return
if("thief") // 40TC
if("thief") // 39TC
new /obj/item/gun/energy/kinetic_accelerator/crossbow(src) // 12TC
new /obj/item/chameleon(src) // 8TC
new /obj/item/chameleon(src) // 7TC
new /obj/item/clothing/glasses/chameleon/thermal(src) // 6TC
new /obj/item/clothing/gloves/color/black/thief(src) // 6TC
new /obj/item/card/id/syndicate(src) // 2TC
@@ -43,7 +43,7 @@
new /obj/item/CQC_manual(src) // 13TC
return
if("sabotage") // 47TC + three 0TC
if("sabotage") // 41TC + two 0TC
new /obj/item/grenade/plastic/c4(src) // 1TC
new /obj/item/grenade/plastic/c4(src) // 1TC
new /obj/item/camera_bug(src) // 1TC
@@ -53,23 +53,23 @@
new /obj/item/card/emag(src) // 6TC
new /obj/item/clothing/gloves/color/yellow(src) // 0TC
new /obj/item/grenade/syndieminibomb(src) // 6TC
new /obj/item/grenade/clusterbuster/n2o(src) // 0TC
new /obj/item/grenade/clusterbuster/n2o(src) // 4TC
new /obj/item/storage/box/syndie_kit/space(src) // 4TC
new /obj/item/encryptionkey/syndicate(src) // 2TC
return
if("payday") // 33TC + four 0TC
if("payday") // 35TC + four 0TC
new /obj/item/gun/projectile/revolver(src) // 13TC
new /obj/item/ammo_box/a357(src) // 3TC
new /obj/item/ammo_box/a357(src) // 3TC
new /obj/item/card/emag(src) // 6TC
new /obj/item/grenade/plastic/c4(src) // 1TC
new /obj/item/jammer(src) // 5TC
new /obj/item/card/id/syndicate(src) // 2TC
new /obj/item/clothing/under/suit_jacket/really_black(src) //0TC
new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src) //0TC
new /obj/item/clothing/gloves/color/latex/nitrile(src) //0 TC
new /obj/item/clothing/mask/gas/clown_hat(src) // 0TC
new /obj/item/thermal_drill(src) // 3TC
new /obj/item/thermal_drill/diamond_drill(src) // 1TC
new /obj/item/encryptionkey/syndicate(src) // 2TC
return
@@ -83,17 +83,20 @@
new /obj/item/encryptionkey/syndicate(src) // 2TC
return
if("hacker") // 30TC + one 0TC
if("hacker") // 37TC + two 0TC
new /obj/item/aiModule/syndicate(src) // 12TC
new /obj/item/card/emag(src) // 6TC
new /obj/item/encryptionkey/syndicate(src) // 2TC
new /obj/item/encryptionkey/binary(src) // 5TC
new /obj/item/aiModule/toyAI(src) // 0TC
new /obj/item/clothing/glasses/chameleon/thermal(src) // 6TC
new /obj/item/storage/belt/military/traitor/hacker(src) // 3TC
new /obj/item/clothing/gloves/combat(src) // 0TC
new /obj/item/multitool/ai_detect(src) // 1TC
new /obj/item/storage/box/syndie_kit/c4 // 4TC
new /obj/item/flashlight/emp(src) // 2TC
return
if("darklord") // 22TC + two 0TC
if("darklord") // 24TC + two 0TC
new /obj/item/melee/energy/sword/saber/red(src) // 8TC
new /obj/item/melee/energy/sword/saber/red(src) // 8TC
new /obj/item/dnainjector/telemut/darkbundle(src) // 0TC
@@ -104,7 +107,7 @@
new /obj/item/encryptionkey/syndicate(src) // 2TC
return
if("professional") // 32 TC + two 0TC
if("professional") // 34TC + two 0TC
new /obj/item/gun/projectile/automatic/sniper_rifle/syndicate/penetrator(src) // 16TC
new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src) // 5TC
new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src) // 3TC
@@ -157,14 +160,14 @@
/obj/item/storage/box/syndie_kit/boolets
name = "Shotgun shells"
New()
..()
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
/obj/item/storage/box/syndie_kit/boolets/New()
..()
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
/obj/item/storage/box/syndie_kit/emp
name = "boxed EMP kit"
@@ -205,26 +208,26 @@
/obj/item/storage/box/syndie_kit/sarin
name = "Sarin Gas Grenades"
New()
..()
new /obj/item/grenade/chem_grenade/saringas(src)
new /obj/item/grenade/chem_grenade/saringas(src)
new /obj/item/grenade/chem_grenade/saringas(src)
new /obj/item/grenade/chem_grenade/saringas(src)
/obj/item/storage/box/syndie_kit/sarin/New()
..()
new /obj/item/grenade/chem_grenade/saringas(src)
new /obj/item/grenade/chem_grenade/saringas(src)
new /obj/item/grenade/chem_grenade/saringas(src)
new /obj/item/grenade/chem_grenade/saringas(src)
/obj/item/storage/box/syndie_kit/bioterror
name = "bioterror syringe box"
New()
..()
new /obj/item/reagent_containers/syringe/bioterror(src)
new /obj/item/reagent_containers/syringe/bioterror(src)
new /obj/item/reagent_containers/syringe/bioterror(src)
new /obj/item/reagent_containers/syringe/bioterror(src)
new /obj/item/reagent_containers/syringe/bioterror(src)
new /obj/item/reagent_containers/syringe/bioterror(src)
new /obj/item/reagent_containers/syringe/bioterror(src)
return
/obj/item/storage/box/syndie_kit/bioterror/New()
..()
new /obj/item/reagent_containers/syringe/bioterror(src)
new /obj/item/reagent_containers/syringe/bioterror(src)
new /obj/item/reagent_containers/syringe/bioterror(src)
new /obj/item/reagent_containers/syringe/bioterror(src)
new /obj/item/reagent_containers/syringe/bioterror(src)
new /obj/item/reagent_containers/syringe/bioterror(src)
new /obj/item/reagent_containers/syringe/bioterror(src)
return
/obj/item/storage/box/syndie_kit/caneshotgun
name = "cane gun kit"
@@ -27,7 +27,7 @@
if(get_dist(user, src) <= 0 && air_contents.oxygen < 10)
. += "<span class='danger'>The meter on [src] indicates you are almost out of air!</span>"
obj/item/tank/oxygen/empty/New()
/obj/item/tank/oxygen/empty/New()
..()
air_contents.oxygen = null
@@ -158,7 +158,7 @@ obj/item/tank/oxygen/empty/New()
. += "<span class='danger'>The meter on [src] indicates you are almost out of air!</span>"
playsound(user, 'sound/effects/alert.ogg', 50, 1)
obj/item/tank/emergency_oxygen/empty/New()
/obj/item/tank/emergency_oxygen/empty/New()
..()
air_contents.oxygen = null
@@ -167,7 +167,12 @@ obj/item/tank/emergency_oxygen/empty/New()
icon_state = "emergency_engi"
volume = 6
obj/item/tank/emergency_oxygen/engi/empty/New()
/obj/item/tank/emergency_oxygen/engi/full/New()
..()
air_contents.oxygen = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
/obj/item/tank/emergency_oxygen/engi/empty/New()
..()
air_contents.oxygen = null
@@ -182,7 +187,7 @@ obj/item/tank/emergency_oxygen/engi/empty/New()
icon_state = "emergency_double"
volume = 10
obj/item/tank/emergency_oxygen/double/empty/New()
/obj/item/tank/emergency_oxygen/double/empty/New()
..()
air_contents.oxygen = null
+36 -51
View File
@@ -209,6 +209,42 @@
/obj/item/twohanded/fireaxe/boneaxe/update_icon()
icon_state = "bone_axe[wielded]"
/obj/item/twohanded/fireaxe/energized
desc = "Someone with a love for fire axes decided to turn this one into a high-powered energy weapon. Seems excessive."
force_wielded = 30
armour_penetration = 20
var/charge = 30
var/max_charge = 30
/obj/item/twohanded/fireaxe/energized/update_icon()
if(wielded)
icon_state = "fireaxe2"
else
icon_state = "fireaxe0"
/obj/item/twohanded/fireaxe/energized/New()
..()
START_PROCESSING(SSobj, src)
/obj/item/twohanded/fireaxe/energized/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/twohanded/fireaxe/energized/process()
charge = min(charge + 1, max_charge)
/obj/item/twohanded/fireaxe/energized/attack(mob/M, mob/user)
. = ..()
if(wielded && charge == max_charge)
if(isliving(M))
charge = 0
playsound(loc, 'sound/magic/lightningbolt.ogg', 5, 1)
user.visible_message("<span class='danger'>[user] slams the charged axe into [M.name] with all [user.p_their()] might!</span>")
do_sparks(1, 1, src)
M.Weaken(4)
var/atom/throw_target = get_edge_target_turf(M, get_dir(src, get_step_away(M, src)))
M.throw_at(throw_target, 5, 1)
/*
* Double-Bladed Energy Swords - Cheridan
*/
@@ -755,57 +791,6 @@
charged = 3
playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
// Energized Fire axe
/obj/item/twohanded/energizedfireaxe
name = "energized fire axe"
desc = "Someone with a love for fire axes decided to turn one into a single-charge energy weapon. Seems excessive."
icon_state = "fireaxe0"
force = 5
throwforce = 15
sharp = TRUE
w_class = WEIGHT_CLASS_HUGE
armour_penetration = 20
slot_flags = SLOT_BACK
force_unwielded = 5
force_wielded = 30
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
var/charged = 1
/obj/item/twohanded/energizedfireaxe/update_icon()
if(wielded)
icon_state = "fireaxe2"
else
icon_state = "fireaxe0"
..()
/obj/item/twohanded/energizedfireaxe/afterattack(atom/A, mob/user, proximity)
if(!proximity)
return
if(wielded)
if(isliving(A))
var/mob/living/Z = A
if(charged)
charged--
Z.take_organ_damage(0, 30)
user.visible_message("<span class='danger'>[user] slams the charged axe into [Z.name] with all [user.p_their()] might!</span>")
playsound(loc, 'sound/magic/lightningbolt.ogg', 5, 1)
do_sparks(1, 1, src)
if(A && wielded && (istype(A, /obj/structure/window) || istype(A, /obj/structure/grille)))
if(istype(A, /obj/structure/window))
var/obj/structure/window/W = A
W.deconstruct(FALSE)
if(prob(4))
charged++
user.visible_message("<span class='notice'>The axe starts to emit an electric buzz!</span>")
else
qdel(A)
if(prob(4))
charged++
user.visible_message("<span class='notice'>The axe starts to emit an electric buzz!</span>")
/obj/item/twohanded/pitchfork
icon_state = "pitchfork0"
name = "pitchfork"
@@ -126,10 +126,6 @@
machine_name = "NanoMed"
icon_state = "refill_medical"
/obj/item/vending_refill/modularpc
machine_name = "Deluxe Silicate Selections"
icon_state = "refill_engi"
/obj/item/vending_refill/hydronutrients
machine_name = "NutriMax"
icon_state = "refill_plant"
+26 -3
View File
@@ -185,6 +185,7 @@
throwforce = 12
attack_verb = list("beat", "smacked")
w_class = WEIGHT_CLASS_HUGE
var/next_throw_time = 0
var/homerun_ready = 0
var/homerun_able = 0
@@ -253,16 +254,38 @@
to_chat(user, "<span class='warning'>You cannot attack in deflect mode!</span>")
return
. = ..()
var/atom/throw_target = get_edge_target_turf(target, user.dir)
if(homerun_ready)
var/atom/throw_target = get_edge_target_turf(target, user.dir)
user.visible_message("<span class='userdanger'>It's a home run!</span>")
target.throw_at(throw_target, rand(8,10), 14, user)
target.ex_act(2)
playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, 1)
homerun_ready = 0
return
else if(!target.anchored)
target.throw_at(throw_target, rand(1,2), 7, user)
if(world.time < next_throw_time)
// Limit the rate of throwing, so you can't spam it.
return
if(!istype(target))
// Should already be /mob/living, but check anyway.
return
if(target.anchored)
// No throwing mobs that are anchored to the floor.
return
if(target.mob_size > MOB_SIZE_HUMAN)
// No throwing things that are physically bigger than you are.
// Covers: blobbernaut, alien empress, ai core, juggernaut, ed209, mulebot, alien/queen/large, carp/megacarp, deathsquid, hostile/tree, megafauna, hostile/asteroid, terror_spider/queen/empress
return
if(!(target.status_flags & CANPUSH))
// No throwing mobs specifically flagged as immune to being pushed.
// Covers: revenant, hostile/blob/*, most borgs, juggernauts, hivebot/tele, spaceworms, shades, bots, alien queens, hostile/syndicate/melee, hostile/asteroid
return
if(target.move_resist > MOVE_RESIST_DEFAULT)
// No throwing mobs that have higher than normal move_resist.
// Covers: revenant, bot/mulebot, hostile/statue, hostile/megafauna, goliath
return
var/atom/throw_target = get_edge_target_turf(target, user.dir)
target.throw_at(throw_target, rand(1, 2), 7, user)
next_throw_time = world.time + 10 SECONDS
/obj/item/melee/baseball_bat/ablative
name = "metal baseball bat"
+2
View File
@@ -51,6 +51,8 @@
take_damage(AM.throwforce, BRUTE, "melee", 1, get_dir(src, AM))
/obj/ex_act(severity)
if(QDELETED(src))
return
if(resistance_flags & INDESTRUCTIBLE)
return
switch(severity)
+41 -37
View File
@@ -30,13 +30,14 @@
desc = "This is a random tool"
icon = 'icons/obj/items.dmi'
icon_state = "welder"
item_to_spawn()
return pick(/obj/item/screwdriver,\
/obj/item/wirecutters,\
/obj/item/weldingtool,\
/obj/item/crowbar,\
/obj/item/wrench,\
/obj/item/flashlight)
/obj/random/tool/item_to_spawn()
return pick(/obj/item/screwdriver,\
/obj/item/wirecutters,\
/obj/item/weldingtool,\
/obj/item/crowbar,\
/obj/item/wrench,\
/obj/item/flashlight)
/obj/random/technology_scanner
@@ -44,10 +45,11 @@
desc = "This is a random technology scanner."
icon = 'icons/obj/device.dmi'
icon_state = "atmos"
item_to_spawn()
return pick(prob(5);/obj/item/t_scanner,\
prob(2);/obj/item/radio/intercom,\
prob(5);/obj/item/analyzer)
/obj/random/technology_scanner/item_to_spawn()
return pick(prob(5);/obj/item/t_scanner,\
prob(2);/obj/item/radio/intercom,\
prob(5);/obj/item/analyzer)
/obj/random/powercell
@@ -55,23 +57,24 @@
desc = "This is a random powercell."
icon = 'icons/obj/power.dmi'
icon_state = "cell"
item_to_spawn()
return pick(prob(10);/obj/item/stock_parts/cell/crap,\
prob(40);/obj/item/stock_parts/cell,\
prob(40);/obj/item/stock_parts/cell/high,\
prob(9);/obj/item/stock_parts/cell/super,\
prob(1);/obj/item/stock_parts/cell/hyper)
/obj/random/powercell/item_to_spawn()
return pick(prob(10);/obj/item/stock_parts/cell/crap,\
prob(40);/obj/item/stock_parts/cell,\
prob(40);/obj/item/stock_parts/cell/high,\
prob(9);/obj/item/stock_parts/cell/super,\
prob(1);/obj/item/stock_parts/cell/hyper)
/obj/random/bomb_supply
name = "Bomb Supply"
desc = "This is a random bomb supply."
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = "signaller"
item_to_spawn()
return pick(/obj/item/assembly/igniter,\
/obj/item/assembly/prox_sensor,\
/obj/item/assembly/signaler)
/obj/random/bomb_supply/item_to_spawn()
return pick(/obj/item/assembly/igniter,\
/obj/item/assembly/prox_sensor,\
/obj/item/assembly/signaler)
/obj/random/toolbox
@@ -79,11 +82,11 @@
desc = "This is a random toolbox."
icon = 'icons/obj/storage.dmi'
icon_state = "red"
item_to_spawn()
return pick(prob(3);/obj/item/storage/toolbox/mechanical,\
prob(2);/obj/item/storage/toolbox/electrical,\
prob(1);/obj/item/storage/toolbox/emergency)
/obj/random/toolbox/item_to_spawn()
return pick(prob(3);/obj/item/storage/toolbox/mechanical,\
prob(2);/obj/item/storage/toolbox/electrical,\
prob(1);/obj/item/storage/toolbox/emergency)
/obj/random/tech_supply
name = "Random Tech Supply"
@@ -91,15 +94,16 @@
icon = 'icons/obj/power.dmi'
icon_state = "cell"
spawn_nothing_percentage = 50
item_to_spawn()
return pick(prob(3);/obj/random/powercell,\
prob(2);/obj/random/technology_scanner,\
prob(1);/obj/item/stack/packageWrap,\
prob(2);/obj/random/bomb_supply,\
prob(1);/obj/item/extinguisher,\
prob(1);/obj/item/clothing/gloves/color/fyellow,\
prob(3);/obj/item/stack/cable_coil,\
prob(2);/obj/random/toolbox,\
prob(2);/obj/item/storage/belt/utility,\
prob(5);/obj/random/tool,\
prob(3);/obj/item/stack/tape_roll)
/obj/random/tech_supply/item_to_spawn()
return pick(prob(3);/obj/random/powercell,\
prob(2);/obj/random/technology_scanner,\
prob(1);/obj/item/stack/packageWrap,\
prob(2);/obj/random/bomb_supply,\
prob(1);/obj/item/extinguisher,\
prob(1);/obj/item/clothing/gloves/color/fyellow,\
prob(3);/obj/item/stack/cable_coil,\
prob(2);/obj/random/toolbox,\
prob(2);/obj/item/storage/belt/utility,\
prob(5);/obj/random/tool,\
prob(3);/obj/item/stack/tape_roll)
@@ -61,89 +61,89 @@
new /obj/item/clothing/mask/gas/syndicate(src)
new /obj/item/clothing/suit/space/hardsuit/syndi/elite/sst(src)
/obj/structure/closet/syndicate/resources/
/obj/structure/closet/syndicate/resources
desc = "An old, dusty locker."
New()
..()
var/common_min = 30 //Minimum amount of minerals in the stack for common minerals
var/common_max = 50 //Maximum amount of HONK in the stack for HONK common minerals
var/rare_min = 5 //Minimum HONK of HONK in the stack HONK HONK rare minerals
var/rare_max = 20 //Maximum HONK HONK HONK in the HONK for HONK rare HONK
/obj/structure/closet/syndicate/resources/New()
..()
var/common_min = 30 //Minimum amount of minerals in the stack for common minerals
var/common_max = 50 //Maximum amount of HONK in the stack for HONK common minerals
var/rare_min = 5 //Minimum HONK of HONK in the stack HONK HONK rare minerals
var/rare_max = 20 //Maximum HONK HONK HONK in the HONK for HONK rare HONK
var/pickednum = rand(1, 50)
var/pickednum = rand(1, 50)
//Sad trombone
if(pickednum == 1)
var/obj/item/paper/P = new /obj/item/paper(src)
P.name = "IOU"
P.info = "Sorry man, we needed the money so we sold your stash. It's ok, we'll double our money for sure this time!"
//Sad trombone
if(pickednum == 1)
var/obj/item/paper/P = new /obj/item/paper(src)
P.name = "IOU"
P.info = "Sorry man, we needed the money so we sold your stash. It's ok, we'll double our money for sure this time!"
//Metal (common ore)
if(pickednum >= 2)
new /obj/item/stack/sheet/metal(src, rand(common_min, common_max))
//Metal (common ore)
if(pickednum >= 2)
new /obj/item/stack/sheet/metal(src, rand(common_min, common_max))
//Glass (common ore)
if(pickednum >= 5)
new /obj/item/stack/sheet/glass(src, rand(common_min, common_max))
//Glass (common ore)
if(pickednum >= 5)
new /obj/item/stack/sheet/glass(src, rand(common_min, common_max))
//Plasteel (common ore) Because it has a million more uses then plasma
if(pickednum >= 10)
new /obj/item/stack/sheet/plasteel(src, rand(common_min, common_max))
//Plasteel (common ore) Because it has a million more uses then plasma
if(pickednum >= 10)
new /obj/item/stack/sheet/plasteel(src, rand(common_min, common_max))
//Plasma (rare ore)
if(pickednum >= 15)
new /obj/item/stack/sheet/mineral/plasma(src, rand(rare_min, rare_max))
//Plasma (rare ore)
if(pickednum >= 15)
new /obj/item/stack/sheet/mineral/plasma(src, rand(rare_min, rare_max))
//Silver (rare ore)
if(pickednum >= 20)
new /obj/item/stack/sheet/mineral/silver(src, rand(rare_min, rare_max))
//Silver (rare ore)
if(pickednum >= 20)
new /obj/item/stack/sheet/mineral/silver(src, rand(rare_min, rare_max))
//Gold (rare ore)
if(pickednum >= 30)
new /obj/item/stack/sheet/mineral/gold(src, rand(rare_min, rare_max))
//Gold (rare ore)
if(pickednum >= 30)
new /obj/item/stack/sheet/mineral/gold(src, rand(rare_min, rare_max))
//Uranium (rare ore)
if(pickednum >= 40)
new /obj/item/stack/sheet/mineral/uranium(src, rand(rare_min, rare_max))
//Uranium (rare ore)
if(pickednum >= 40)
new /obj/item/stack/sheet/mineral/uranium(src, rand(rare_min, rare_max))
//Titanium (rare ore)
if(pickednum >= 40)
new /obj/item/stack/sheet/mineral/titanium(src, rand(rare_min, rare_max))
//Titanium (rare ore)
if(pickednum >= 40)
new /obj/item/stack/sheet/mineral/titanium(src, rand(rare_min, rare_max))
//Plastitanium (rare ore)
if(pickednum >= 40)
new /obj/item/stack/sheet/mineral/plastitanium(src, rand(rare_min, rare_max))
//Plastitanium (rare ore)
if(pickednum >= 40)
new /obj/item/stack/sheet/mineral/plastitanium(src, rand(rare_min, rare_max))
//Diamond (rare HONK)
if(pickednum >= 45)
new /obj/item/stack/sheet/mineral/diamond(src, rand(rare_min, rare_max))
//Diamond (rare HONK)
if(pickednum >= 45)
new /obj/item/stack/sheet/mineral/diamond(src, rand(rare_min, rare_max))
//Jetpack (You hit the jackpot!)
if(pickednum == 50)
new /obj/item/tank/jetpack/carbondioxide(src)
//Jetpack (You hit the jackpot!)
if(pickednum == 50)
new /obj/item/tank/jetpack/carbondioxide(src)
/obj/structure/closet/syndicate/resources/everything
desc = "It's an emergency storage closet for repairs."
New()
..()
var/list/resources = list(
/obj/item/stack/sheet/metal,
/obj/item/stack/sheet/glass,
/obj/item/stack/sheet/mineral/gold,
/obj/item/stack/sheet/mineral/silver,
/obj/item/stack/sheet/mineral/plasma,
/obj/item/stack/sheet/mineral/uranium,
/obj/item/stack/sheet/mineral/diamond,
/obj/item/stack/sheet/mineral/bananium,
/obj/item/stack/sheet/mineral/titanium,
/obj/item/stack/sheet/mineral/plastitanium,
/obj/item/stack/sheet/plasteel,
/obj/item/stack/rods
)
/obj/structure/closet/syndicate/resources/everything/New()
..()
var/list/resources = list(
/obj/item/stack/sheet/metal,
/obj/item/stack/sheet/glass,
/obj/item/stack/sheet/mineral/gold,
/obj/item/stack/sheet/mineral/silver,
/obj/item/stack/sheet/mineral/plasma,
/obj/item/stack/sheet/mineral/uranium,
/obj/item/stack/sheet/mineral/diamond,
/obj/item/stack/sheet/mineral/bananium,
/obj/item/stack/sheet/mineral/titanium,
/obj/item/stack/sheet/mineral/plastitanium,
/obj/item/stack/sheet/plasteel,
/obj/item/stack/rods
)
for(var/i in 1 to 2)
for(var/res in resources)
var/obj/item/stack/R = new res(src)
R.amount = R.max_amount
for(var/i in 1 to 2)
for(var/res in resources)
var/obj/item/stack/R = new res(src)
R.amount = R.max_amount
@@ -187,6 +187,7 @@
if(user)
to_chat(user, "<span class='danger'>The crate's anti-tamper system activates!</span>")
investigate_log("[key_name(user)] has detonated a [src]", INVESTIGATE_BOMB)
add_attack_logs(user, src, "has detonated", ATKLOG_MOST)
for(var/atom/movable/AM in src)
qdel(AM)
explosion(get_turf(src), 0, 1, 5, 5)
@@ -338,24 +339,23 @@
var/target_temp = T0C - 40
var/cooling_power = 40
return_air()
var/datum/gas_mixture/gas = (..())
if(!gas) return null
var/datum/gas_mixture/newgas = new/datum/gas_mixture()
newgas.oxygen = gas.oxygen
newgas.carbon_dioxide = gas.carbon_dioxide
newgas.nitrogen = gas.nitrogen
newgas.toxins = gas.toxins
newgas.volume = gas.volume
newgas.temperature = gas.temperature
if(newgas.temperature <= target_temp) return
if((newgas.temperature - cooling_power) > target_temp)
newgas.temperature -= cooling_power
else
newgas.temperature = target_temp
return newgas
/obj/structure/closet/crate/freezer/return_air()
var/datum/gas_mixture/gas = (..())
if(!gas) return null
var/datum/gas_mixture/newgas = new/datum/gas_mixture()
newgas.oxygen = gas.oxygen
newgas.carbon_dioxide = gas.carbon_dioxide
newgas.nitrogen = gas.nitrogen
newgas.toxins = gas.toxins
newgas.volume = gas.volume
newgas.temperature = gas.temperature
if(newgas.temperature <= target_temp) return
if((newgas.temperature - cooling_power) > target_temp)
newgas.temperature -= cooling_power
else
newgas.temperature = target_temp
return newgas
/obj/structure/closet/crate/can
desc = "A large can, looks like a bin to me."
@@ -496,22 +496,23 @@
/obj/structure/closet/crate/hydroponics/prespawned
//This exists so the prespawned hydro crates spawn with their contents.
New()
..()
new /obj/item/reagent_containers/glass/bucket(src)
new /obj/item/reagent_containers/glass/bucket(src)
new /obj/item/screwdriver(src)
new /obj/item/screwdriver(src)
new /obj/item/wrench(src)
new /obj/item/wrench(src)
new /obj/item/wirecutters(src)
new /obj/item/wirecutters(src)
new /obj/item/shovel/spade(src)
new /obj/item/shovel/spade(src)
new /obj/item/storage/box/beakers(src)
new /obj/item/storage/box/beakers(src)
new /obj/item/hand_labeler(src)
new /obj/item/hand_labeler(src)
// Do I need the definition above? Who knows!
/obj/structure/closet/crate/hydroponics/prespawned/New()
..()
new /obj/item/reagent_containers/glass/bucket(src)
new /obj/item/reagent_containers/glass/bucket(src)
new /obj/item/screwdriver(src)
new /obj/item/screwdriver(src)
new /obj/item/wrench(src)
new /obj/item/wrench(src)
new /obj/item/wirecutters(src)
new /obj/item/wirecutters(src)
new /obj/item/shovel/spade(src)
new /obj/item/shovel/spade(src)
new /obj/item/storage/box/beakers(src)
new /obj/item/storage/box/beakers(src)
new /obj/item/hand_labeler(src)
new /obj/item/hand_labeler(src)
/obj/structure/closet/crate/sci
name = "science crate"
+1 -1
View File
@@ -144,7 +144,7 @@
to_chat(user, "<span class='notice'>You [open ? "close":"open"] [src].</span>")
toggle_lock(user)
obj/structure/displaycase/welder_act(mob/user, obj/item/I)
/obj/structure/displaycase/welder_act(mob/user, obj/item/I)
. = TRUE
if(default_welder_repair(user, I))
broken = FALSE
+1 -1
View File
@@ -67,7 +67,7 @@
. = TRUE
default_unfasten_wrench(user, I, time = 20)
obj/structure/dresser/deconstruct(disassembled = FALSE)
/obj/structure/dresser/deconstruct(disassembled = FALSE)
var/mat_drop = 15
if(disassembled)
mat_drop = 30
@@ -15,7 +15,6 @@
anchored = TRUE
resistance_flags = FIRE_PROOF | LAVA_PROOF
var/gps = null
var/obj/effect/light_emitter/tendril/emitted_light
/obj/structure/spawner/lavaland/goliath
@@ -29,7 +28,6 @@ GLOBAL_LIST_INIT(tendrils, list())
/obj/structure/spawner/lavaland/Initialize(mapload)
. = ..()
emitted_light = new(loc)
gps = new /obj/item/gps/internal(src)
GLOB.tendrils += src
return INITIALIZE_HINT_LATELOAD
@@ -59,7 +57,6 @@ GLOBAL_LIST_INIT(tendrils, list())
SSmedals.SetScore(TENDRIL_CLEAR_SCORE, L.client, 1)
GLOB.tendrils -= src
QDEL_NULL(emitted_light)
QDEL_NULL(gps)
return ..()
/obj/effect/light_emitter/tendril
+22 -25
View File
@@ -11,8 +11,8 @@
anchored = 1
density = 1
attack_hand(mob/user as mob)
to_chat(user, "Civilians: NT is recruiting! Please head SOUTH to the NT Recruitment office to join the station's crew!")
/obj/structure/signpost/attack_hand(mob/user as mob)
to_chat(user, "Civilians: NT is recruiting! Please head SOUTH to the NT Recruitment office to join the station's crew!")
/obj/structure/ninjatele
@@ -23,31 +23,28 @@
anchored = 1
density = 0
attack_hand(mob/user as mob)
if(user.mind.special_role=="Ninja")
switch(alert("Phase Jaunt relay primed, target locked as [station_name()], initiate VOID-shift translocation? (Warning! Internals required!)",,"Yes","No"))
if("Yes")
if(user.z != src.z) return
user.loc.loc.Exited(user)
user.loc = pick(GLOB.carplist) // In the future, possibly make specific NinjaTele landmarks, and give him an option to teleport to North/South/East/West of SS13 instead of just hijacking a carpspawn.
playsound(user.loc, 'sound/effects/phasein.ogg', 25, 1)
playsound(user.loc, 'sound/effects/sparks2.ogg', 50, 1)
new /obj/effect/temp_visual/dir_setting/ninja/phase(get_turf(user), user.dir)
to_chat(user, "<span class='boldnotice'>VOID-Shift</span> translocation successful")
if("No")
to_chat(user, "<span class='danger'>Process aborted!</span>")
/obj/structure/ninjatele/attack_hand(mob/user as mob)
if(user.mind.special_role=="Ninja")
switch(alert("Phase Jaunt relay primed, target locked as [station_name()], initiate VOID-shift translocation? (Warning! Internals required!)",,"Yes","No"))
if("Yes")
if(user.z != src.z)
return
else
to_chat(user, "<span class='danger'>FĆAL RrR</span>: ŧer nt recgnized, c-cntr-r䣧-ç äcked.")
user.loc.loc.Exited(user)
user.loc = pick(GLOB.carplist) // In the future, possibly make specific NinjaTele landmarks, and give him an option to teleport to North/South/East/West of SS13 instead of just hijacking a carpspawn.
playsound(user.loc, 'sound/effects/phasein.ogg', 25, 1)
playsound(user.loc, 'sound/effects/sparks2.ogg', 50, 1)
new /obj/effect/temp_visual/dir_setting/ninja/phase(get_turf(user), user.dir)
to_chat(user, "<span class='boldnotice'>VOID-Shift</span> translocation successful")
if("No")
to_chat(user, "<span class='danger'>Process aborted!</span>")
return
else
to_chat(user, "<span class='danger'>FĆAL RrR</span>: ŧer nt recgnized, c-cntr-r䣧-ç äcked.")
/obj/structure/respawner
name = "\improper Long-Distance Cloning Machine"
+1 -1
View File
@@ -90,7 +90,7 @@
..()
if(climber)
climber.Weaken(2)
climber.visible_message("<span class='warning'>[climber.name] has been knocked off the table", "You've been knocked off the table", "You see [climber.name] get knocked off the table</span>")
climber.visible_message("<span class='warning'>[climber.name] has been knocked off the table", "You've been knocked off the table", "You hear [climber.name] get knocked off the table</span>")
else if(Adjacent(user) && user.pulling && user.pulling.pass_flags & PASSTABLE)
user.Move_Pulled(src)
if(user.pulling.loc == loc)
@@ -26,7 +26,7 @@
return !density
// When destroyed by explosions, properly handle contents.
obj/structure/transit_tube/ex_act(severity)
/obj/structure/transit_tube/ex_act(severity)
switch(severity)
if(1.0)
for(var/atom/movable/AM in contents)
@@ -31,14 +31,14 @@
. = ..()
. += "<span class='notice'>Alt-click to rotate it clockwise.</span>"
obj/structure/windoor_assembly/New(loc, set_dir)
/obj/structure/windoor_assembly/New(loc, set_dir)
..()
if(set_dir)
dir = set_dir
ini_dir = dir
air_update_turf(1)
obj/structure/windoor_assembly/Destroy()
/obj/structure/windoor_assembly/Destroy()
density = FALSE
QDEL_NULL(electronics)
air_update_turf(1)
+1 -1
View File
@@ -666,7 +666,7 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
icon_state = "tinted_window"
opacity = 1
obj/structure/window/full/reinforced/ice
/obj/structure/window/full/reinforced/ice
icon = 'icons/obj/smooth_structures/rice_window.dmi'
icon_state = "ice_window"
max_integrity = 150