Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into BookClub

This commit is contained in:
Aurorablade
2016-07-21 23:56:34 -04:00
1490 changed files with 46551 additions and 25064 deletions
+13 -13
View File
@@ -14,7 +14,7 @@ AI MODULES
desc = "An AI Module for transmitting encrypted instructions to the AI."
flags = CONDUCT
force = 5.0
w_class = 2.0
w_class = 2
throwforce = 5.0
throw_speed = 3
throw_range = 15
@@ -23,7 +23,7 @@ AI MODULES
var/datum/ai_laws/laws = null
/obj/item/weapon/aiModule/proc/install(var/obj/machinery/computer/C)
if (istype(C, /obj/machinery/computer/aiupload))
if(istype(C, /obj/machinery/computer/aiupload))
var/obj/machinery/computer/aiupload/comp = C
if(comp.stat & NOPOWER)
to_chat(usr, "<span class='warning'>The upload computer has no power!</span>")
@@ -31,13 +31,13 @@ AI MODULES
if(comp.stat & BROKEN)
to_chat(usr, "<span class='warning'>The upload computer is broken!</span>")
return
if (!comp.current)
if(!comp.current)
to_chat(usr, "<span class='warning'>You haven't selected an AI to transmit laws to!</span>")
return
if (comp.current.stat == DEAD || comp.current.control_disabled == 1)
if(comp.current.stat == DEAD || comp.current.control_disabled == 1)
to_chat(usr, "<span class='warning'>Upload failed. No signal is being detected from the AI.</span>")
else if (comp.current.see_in_dark == 0)
else if(comp.current.see_in_dark == 0)
to_chat(usr, "<span class='warning'>Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power.</span>")
else
src.transmitInstructions(comp.current, usr)
@@ -49,7 +49,7 @@ AI MODULES
R.show_laws()
to_chat(usr, "<span class='notice'>Upload complete. The AI's laws have been modified.</span>")
else if (istype(C, /obj/machinery/computer/borgupload))
else if(istype(C, /obj/machinery/computer/borgupload))
var/obj/machinery/computer/borgupload/comp = C
if(comp.stat & NOPOWER)
to_chat(usr, "<span class='warning'>The upload computer has no power!</span>")
@@ -57,13 +57,13 @@ AI MODULES
if(comp.stat & BROKEN)
to_chat(usr, "<span class='warning'>The upload computer is broken!</span>")
return
if (!comp.current)
if(!comp.current)
to_chat(usr, "<span class='warning'>You haven't selected a robot to transmit laws to!</span>")
return
if (comp.current.stat == DEAD || comp.current.emagged)
if(comp.current.stat == DEAD || comp.current.emagged)
to_chat(usr, "<span class='warning'>Upload failed. No signal is being detected from the robot.</span>")
else if (comp.current.connected_ai)
else if(comp.current.connected_ai)
to_chat(usr, "<span class='warning'>Upload failed. The robot is slaved to an AI.</span>")
else
src.transmitInstructions(comp.current, usr)
@@ -138,7 +138,7 @@ AI MODULES
/obj/item/weapon/aiModule/oneCrewMember/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender)
..()
var/law = "Only [targetName] is crew."
if (!is_special_character(target)) // Makes sure the AI isn't a traitor before changing their law 0. --NeoFite
if(!is_special_character(target)) // Makes sure the AI isn't a traitor before changing their law 0. --NeoFite
to_chat(target, law)
target.set_zeroth_law(law)
lawchanges.Add("The law specified [targetName]")
@@ -236,7 +236,7 @@ AI MODULES
/obj/item/weapon/aiModule/reset/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
log_law_changes(target, sender)
if (!is_special_character(target))
if(!is_special_character(target))
target.set_zeroth_law("")
target.laws.clear_supplied_laws()
target.laws.clear_ion_laws()
@@ -252,7 +252,7 @@ AI MODULES
/obj/item/weapon/aiModule/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
..()
if (!is_special_character(target))
if(!is_special_character(target))
target.set_zeroth_law("")
to_chat(target, "[sender.real_name] attempted to wipe your laws using a purge module.")
target.clear_supplied_laws()
@@ -397,4 +397,4 @@ AI MODULES
laws[1] = generate_ion_law()
to_chat(user, "<span class='notice'>You press the button on [src].</span>")
playsound(user, 'sound/machines/click.ogg', 20, 1)
src.loc.visible_message("<span class='warning'>\icon[src] [laws[1]]</span>")
src.loc.visible_message("<span class='warning'>[bicon(src)] [laws[1]]</span>")
+281 -198
View File
@@ -17,7 +17,7 @@ RCD
throwforce = 10.0
throw_speed = 3
throw_range = 5
w_class = 3.0
w_class = 3
materials = list(MAT_METAL=100000)
origin_tech = "engineering=4;materials=2"
var/datum/effect/system/spark_spread/spark_system
@@ -26,232 +26,315 @@ RCD
var/working = 0
var/mode = 1
var/canRwall = 0
var/menu = 1
var/door_type = /obj/machinery/door/airlock
req_access = list(access_engine)
var/list/door_accesses = list()
var/list/door_accesses_list = list()
var/one_access
var/locked = 1
var/static/list/allowed_door_types = list(/obj/machinery/door/airlock = "Standard",
/obj/machinery/door/airlock/command = "Command", /obj/machinery/door/airlock/security = "Security",
/obj/machinery/door/airlock/engineering = "Engineering", /obj/machinery/door/airlock/medical = "Medical",
/obj/machinery/door/airlock/maintenance = "Maintenance", /obj/machinery/door/airlock/external = "External",
/obj/machinery/door/airlock/glass = "Standard (Glass)", /obj/machinery/door/airlock/freezer = "Freezer",
/obj/machinery/door/airlock/glass_command = "Command (Glass)", /obj/machinery/door/airlock/glass_engineering = "Engineering (Glass)",
/obj/machinery/door/airlock/glass_security = "Security (Glass)", /obj/machinery/door/airlock/glass_medical = "Medical (Glass)",
/obj/machinery/door/airlock/mining = "Mining", /obj/machinery/door/airlock/atmos = "Atmospherics",
/obj/machinery/door/airlock/research = "Research", /obj/machinery/door/airlock/glass_research = "Research (Glass)",
/obj/machinery/door/airlock/glass_mining = "Mining (Glass)", /obj/machinery/door/airlock/glass_atmos = "Atmospherics (Glass)")
New()
/obj/item/weapon/rcd/New()
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
spark_system = new /datum/effect/system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
rcd_list += src
door_accesses_list = list()
for(var/access in get_all_accesses())
door_accesses_list[++door_accesses_list.len] = list("name" = get_access_desc(access), "id" = access, "enabled" = (access in door_accesses))
return
/obj/item/weapon/rcd/Destroy()
qdel(spark_system)
spark_system = null
rcd_list -= src
return ..()
/obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user, params)
..()
if(istype(W, /obj/item/weapon/rcd_ammo))
var/obj/item/weapon/rcd_ammo/R = W
if((matter + R.ammoamt) > max_matter)
to_chat(user, "<span class='notice'>The RCD cant hold any more matter-units.</span>")
return
matter += R.ammoamt
user.drop_item()
qdel(W)
playsound(loc, 'sound/machines/click.ogg', 50, 1)
to_chat(user, "<span class='notice'>The RCD now holds [matter]/[max_matter] matter-units.</span>")
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
src.spark_system = new /datum/effect/system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
rcd_list += src
nanomanager.update_uis(src)
return
Destroy()
qdel(spark_system)
spark_system = null
rcd_list -= src
return ..()
attackby(obj/item/weapon/W, mob/user, params)
..()
if(istype(W, /obj/item/weapon/rcd_ammo))
var/obj/item/weapon/rcd_ammo/R = W
if((matter + R.ammoamt) > max_matter)
to_chat(user, "<span class='notice'>The RCD cant hold any more matter-units.</span>")
return
matter += R.ammoamt
user.drop_item()
qdel(W)
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
to_chat(user, "<span class='notice'>The RCD now holds [matter]/[max_matter] matter-units.</span>")
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
/obj/item/weapon/rcd/attack_self(mob/user)
//Change the mode
ui_interact(user)
/obj/item/weapon/rcd/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = inventory_state)
var/list/data = list()
data["mode"] = mode
data["door_type"] = door_type
data["menu"] = menu
data["matter"] = matter
data["max_matter"] = max_matter
data["one_access"] = one_access
data["locked"] = locked
if(menu == 2)
var/list/door_types_list = list()
for(var/type in allowed_door_types)
door_types_list[++door_types_list.len] = list("name" = allowed_door_types[type], "type" = type)
data["allowed_door_types"] = door_types_list
data["door_accesses"] = door_accesses_list
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
ui = new(user, src, ui_key, "rcd.tmpl", "[name]", 400, 400, state = state)
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
/obj/item/weapon/rcd/Topic(href, href_list, nowindow, state)
if(..())
return 1
if(prob(20))
spark_system.start()
if(href_list["mode"])
mode = text2num(href_list["mode"])
. = 1
if(href_list["door_type"])
var/new_door_type = text2path(href_list["door_type"])
if(!(new_door_type in allowed_door_types))
message_admins("RCD HREF exploit attempted by [key_name(usr, usr.client)]!")
return
door_type = new_door_type
. = 1
if(href_list["menu"])
menu = text2num(href_list["menu"])
. = 1
if(href_list["login"])
if(istype(usr,/mob/living/silicon))
locked = 0
else
var/obj/item/I = usr.get_active_hand()
if(istype(I, /obj/item/device/pda))
var/obj/item/device/pda/pda = I
I = pda.id
var/obj/item/weapon/card/id/ID = I
if(istype(ID) && ID && check_access(ID))
locked = 0
. = 1
if(href_list["logout"])
locked = 1
. = 1
if(href_list["toggle_one_access"] && !locked)
one_access = !one_access
. = 1
if(href_list["toggle_access"] && !locked)
var/href_access = text2num(href_list["toggle_access"])
if(href_access in door_accesses)
door_accesses -= href_access
else
door_accesses += href_access
door_accesses_list = list()
for(var/access in get_all_accesses())
door_accesses_list[++door_accesses_list.len] = list("name" = get_access_desc(access), "id" = access, "enabled" = (access in door_accesses))
. = 1
/obj/item/weapon/rcd/proc/activate()
playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
attack_self(mob/user)
//Change the mode
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
switch(mode)
if(1)
mode = 2
to_chat(user, "<span class='notice'>Changed mode to 'Airlock'</span>")
if(prob(20))
src.spark_system.start()
return
if(2)
mode = 3
to_chat(user, "<span class='notice'>Changed mode to 'Deconstruct'</span>")
if(prob(20))
src.spark_system.start()
return
if(3)
mode = 4
to_chat(user, "<span class='notice'>Changed mode to 'Windows'</span>")
if(prob(20))
src.spark_system.start()
return
if(4)
mode = 1
to_chat(user, "<span class='notice'>Changed mode to 'Floor & Walls'</span>")
if(prob(20))
src.spark_system.start()
return
/obj/item/weapon/rcd/afterattack(atom/A, mob/user, proximity)
if(!proximity) return
if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))
return 0
if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock) || istype(A, /obj/structure/grille) || istype(A, /obj/structure/window)))
return 0
proc/activate()
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
switch(mode)
if(1)
if(istype(A, /turf/space))
if(useResource(1, user))
to_chat(user, "Building Floor...")
activate()
var/turf/AT = A
AT.ChangeTurf(/turf/simulated/floor/plating)
return 1
return 0
if(istype(A, /turf/simulated/floor))
if(checkResource(3, user))
to_chat(user, "Building Wall ...")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 20, target = A))
if(!useResource(3, user)) return 0
activate()
var/turf/AT = A
AT.ChangeTurf(/turf/simulated/wall)
return 1
return 0
afterattack(atom/A, mob/user, proximity)
if(!proximity) return
if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))
return 0
if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock) || istype(A, /obj/structure/grille) || istype(A, /obj/structure/window)))
return 0
if(2)
if(istype(A, /turf/simulated/floor))
if(checkResource(10, user))
to_chat(user, "Building Airlock...")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 50, target = A))
if(!useResource(10, user)) return 0
activate()
var/obj/machinery/door/airlock/T = new door_type(A)
T.autoclose = 1
if(one_access)
T.req_one_access = door_accesses
else
T.req_access = door_accesses
return 1
return 0
return 0
switch(mode)
if(1)
if(istype(A, /turf/space))
if(useResource(1, user))
to_chat(user, "Building Floor...")
if(3)
if(istype(A, /turf/simulated/wall))
if(istype(A, /turf/simulated/wall/r_wall) && !canRwall)
return 0
if(checkResource(5, user))
to_chat(user, "Deconstructing Wall...")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 40, target = A))
if(!useResource(5, user)) return 0
activate()
var/turf/AT = A
AT.ChangeTurf(/turf/simulated/floor/plating)
return 1
return 0
return 0
if(istype(A, /turf/simulated/floor))
if(checkResource(3, user))
to_chat(user, "Building Wall ...")
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 20, target = A))
if(!useResource(3, user)) return 0
activate()
var/turf/AT = A
AT.ChangeTurf(/turf/simulated/wall)
return 1
return 0
if(istype(A, /turf/simulated/floor))
if(checkResource(5, user))
to_chat(user, "Deconstructing Floor...")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 50, target = A))
if(!useResource(5, user)) return 0
activate()
var/turf/AT = A
AT.ChangeTurf(/turf/space)
return 1
return 0
if(2)
if(istype(A, /turf/simulated/floor))
if(checkResource(10, user))
to_chat(user, "Building Airlock...")
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 50, target = A))
if(!useResource(10, user)) return 0
activate()
var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock( A )
T.autoclose = 1
return 1
return 0
return 0
if(3)
if(istype(A, /turf/simulated/wall))
if(istype(A, /turf/simulated/wall/r_wall) && !canRwall)
return 0
if(checkResource(5, user))
to_chat(user, "Deconstructing Wall...")
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 40, target = A))
if(!useResource(5, user)) return 0
activate()
var/turf/AT = A
AT.ChangeTurf(/turf/simulated/floor/plating)
return 1
return 0
if(istype(A, /turf/simulated/floor))
if(checkResource(5, user))
to_chat(user, "Deconstructing Floor...")
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 50, target = A))
if(!useResource(5, user)) return 0
activate()
var/turf/AT = A
AT.ChangeTurf(/turf/space)
return 1
return 0
if(istype(A, /obj/machinery/door/airlock))
if(checkResource(20, user))
to_chat(user, "Deconstructing Airlock...")
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 50, target = A))
if(!useResource(20, user)) return 0
activate()
qdel(A)
return 1
return 0
if(istype(A, /obj/machinery/door/airlock))
if(checkResource(20, user))
to_chat(user, "Deconstructing Airlock...")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 50, target = A))
if(!useResource(20, user)) return 0
activate()
qdel(A)
return 1
return 0
if(istype(A, /obj/structure/window)) // You mean the grille of course, do you?
A = locate(/obj/structure/grille) in A.loc
if(istype(A, /obj/structure/grille))
if(!checkResource(2, user))
return 0
to_chat(user, "Deconstructing window...")
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
if(!do_after(user, 20, target = A))
return 0
if(locate(/obj/structure/window/full/shuttle) in A.contents)
return 0 // Let's not give shuttle-griefers an easy time.
if(!useResource(2, user))
return 0
activate()
var/turf/T1 = get_turf(A)
qdel(A)
A = null
for(var/obj/structure/window/W in T1.contents)
W.disassembled = 1
W.density = 0
qdel(W)
for(var/cdir in cardinal)
var/turf/T2 = get_step(T1, cdir)
if(locate(/obj/structure/window/full/shuttle) in T2.contents)
continue // Shuttle windows? Nah. We don't need extra windows there.
if(!(locate(/obj/structure/grille) in T2.contents))
continue
for(var/obj/structure/window/W in T2.contents)
if(istype(A, /obj/structure/window)) // You mean the grille of course, do you?
A = locate(/obj/structure/grille) in A.loc
if(istype(A, /obj/structure/grille))
if(!checkResource(2, user))
return 0
to_chat(user, "Deconstructing window...")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
if(!do_after(user, 20, target = A))
return 0
if(locate(/obj/structure/window/full/shuttle) in A.contents)
return 0 // Let's not give shuttle-griefers an easy time.
if(!useResource(2, user))
return 0
activate()
var/turf/T1 = get_turf(A)
qdel(A)
A = null
for(var/obj/structure/window/W in T1.contents)
W.disassembled = 1
W.density = 0
qdel(W)
for(var/cdir in cardinal)
var/turf/T2 = get_step(T1, cdir)
if(locate(/obj/structure/window/full/shuttle) in T2.contents)
continue // Shuttle windows? Nah. We don't need extra windows there.
if(!(locate(/obj/structure/grille) in T2.contents))
continue
for(var/obj/structure/window/W in T2.contents)
if(W.dir == turn(cdir, 180))
W.disassembled = 1
W.density = 0
qdel(W)
var/obj/structure/window/reinforced/W = new(T2)
W.dir = turn(cdir, 180)
return 1
return 0
if(4)
if(istype(A, /turf/simulated/floor))
if(locate(/obj/structure/grille) in contents)
return 0 // We already have window
if(!checkResource(2, user))
return 0
to_chat(user, "Constructing window...")
playsound(loc, 'sound/machines/click.ogg', 50, 1)
if(!do_after(user, 20, target = A))
return 0
if(locate(/obj/structure/grille) in A.contents)
return 0 // We already have window
if(!useResource(2, user))
return 0
activate()
new /obj/structure/grille(A)
for(var/obj/structure/window/W in contents)
W.disassembled = 1 // Prevent that annoying glass breaking sound
W.density = 0
qdel(W)
for(var/cdir in cardinal)
var/turf/T = get_step(A, cdir)
if(locate(/obj/structure/grille) in T.contents)
for(var/obj/structure/window/W in T.contents)
if(W.dir == turn(cdir, 180))
W.disassembled = 1
W.density = 0
qdel(W)
var/obj/structure/window/reinforced/W = new(T2)
W.dir = turn(cdir, 180)
return 1
return 0
if(4)
if(istype(A, /turf/simulated/floor))
if(locate(/obj/structure/grille) in contents)
return 0 // We already have window
if(!checkResource(2, user))
return 0
to_chat(user, "Constructing window...")
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
if(!do_after(user, 20, target = A))
return 0
if(locate(/obj/structure/grille) in A.contents)
return 0 // We already have window
if(!useResource(2, user))
return 0
activate()
new /obj/structure/grille(A)
for(var/obj/structure/window/W in contents)
W.disassembled = 1 // Prevent that annoying glass breaking sound
W.density = 0
qdel(W)
for(var/cdir in cardinal)
var/turf/T = get_step(A, cdir)
if(locate(/obj/structure/grille) in T.contents)
for(var/obj/structure/window/W in T.contents)
if(W.dir == turn(cdir, 180))
W.disassembled = 1
W.density = 0
qdel(W)
else // Build a window!
var/obj/structure/window/reinforced/W = new(A)
W.dir = cdir
var/turf/AT = A
AT.ChangeTurf(/turf/simulated/floor/plating) // Platings go under windows.
return 1
else
to_chat(user, "ERROR: RCD in MODE: [mode] attempted use by [user]. Send this text #coderbus or an admin.")
return 0
else // Build a window!
var/obj/structure/window/reinforced/W = new(A)
W.dir = cdir
var/turf/AT = A
AT.ChangeTurf(/turf/simulated/floor/plating) // Platings go under windows.
return 1
else
to_chat(user, "ERROR: RCD in MODE: [mode] attempted use by [user]. Send this text #coderbus or an admin.")
return 0
nanomanager.update_uis(src)
/obj/item/weapon/rcd/proc/useResource(var/amount, var/mob/user)
if(matter < amount)
return 0
matter -= amount
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
nanomanager.update_uis(src)
return 1
/obj/item/weapon/rcd/proc/checkResource(var/amount, var/mob/user)
+46 -46
View File
@@ -13,7 +13,7 @@ RSF
anchored = 0.0
var/matter = 0
var/mode = 1
w_class = 3.0
w_class = 3
/obj/item/weapon/rsf/New()
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
@@ -21,8 +21,8 @@ RSF
/obj/item/weapon/rsf/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
if (istype(W, /obj/item/weapon/rcd_ammo))
if ((matter + 10) > 30)
if(istype(W, /obj/item/weapon/rcd_ammo))
if((matter + 10) > 30)
to_chat(user, "The RSF cant hold any more matter.")
return
qdel(W)
@@ -34,27 +34,27 @@ RSF
/obj/item/weapon/rsf/attack_self(mob/user as mob)
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
if (mode == 1)
if(mode == 1)
mode = 2
to_chat(user, "Changed dispensing mode to 'Drinking Glass'")
return
if (mode == 2)
if(mode == 2)
mode = 3
to_chat(user, "Changed dispensing mode to 'Paper'")
return
if (mode == 3)
if(mode == 3)
mode = 4
to_chat(user, "Changed dispensing mode to 'Pen'")
return
if (mode == 4)
if(mode == 4)
mode = 5
to_chat(user, "Changed dispensing mode to 'Dice Pack'")
return
if (mode == 5)
if(mode == 5)
mode = 6
to_chat(user, "Changed dispensing mode to 'Cigarette'")
return
if (mode == 6)
if(mode == 6)
mode = 1
to_chat(user, "Changed dispensing mode to 'Dosh'")
return
@@ -62,15 +62,15 @@ RSF
/obj/item/weapon/rsf/afterattack(atom/A, mob/user as mob, proximity)
if(!proximity) return
if (!(istype(A, /obj/structure/table) || istype(A, /turf/simulated/floor)))
if(!(istype(A, /obj/structure/table) || istype(A, /turf/simulated/floor)))
return
if (istype(A, /obj/structure/table) && mode == 1)
if (istype(A, /obj/structure/table) && matter >= 1)
if(istype(A, /obj/structure/table) && mode == 1)
if(istype(A, /obj/structure/table) && matter >= 1)
to_chat(user, "Dispensing Dosh...")
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
new /obj/item/weapon/spacecash/c10( A.loc )
if (isrobot(user))
if(isrobot(user))
var/mob/living/silicon/robot/engy = user
engy.cell.charge -= 200 //once money becomes useful, I guess changing this to a high ammount, like 500 units a kick, till then, enjoy dosh!
else
@@ -79,12 +79,12 @@ RSF
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
return
else if (istype(A, /turf/simulated/floor) && mode == 1)
if (istype(A, /turf/simulated/floor) && matter >= 1)
else if(istype(A, /turf/simulated/floor) && mode == 1)
if(istype(A, /turf/simulated/floor) && matter >= 1)
to_chat(user, "Dispensing Dosh...")
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
new /obj/item/weapon/spacecash/c10( A )
if (isrobot(user))
if(isrobot(user))
var/mob/living/silicon/robot/engy = user
engy.cell.charge -= 200 //once money becomes useful, I guess changing this to a high ammount, like 500 units a kick, till then, enjoy dosh!
else
@@ -93,12 +93,12 @@ RSF
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
return
else if (istype(A, /obj/structure/table) && mode == 2)
if (istype(A, /obj/structure/table) && matter >= 1)
else if(istype(A, /obj/structure/table) && mode == 2)
if(istype(A, /obj/structure/table) && matter >= 1)
to_chat(user, "Dispensing Drinking Glass...")
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass( A.loc )
if (isrobot(user))
if(isrobot(user))
var/mob/living/silicon/robot/engy = user
engy.cell.charge -= 50
else
@@ -107,12 +107,12 @@ RSF
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
return
else if (istype(A, /turf/simulated/floor) && mode == 2)
if (istype(A, /turf/simulated/floor) && matter >= 1)
else if(istype(A, /turf/simulated/floor) && mode == 2)
if(istype(A, /turf/simulated/floor) && matter >= 1)
to_chat(user, "Dispensing Drinking Glass...")
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass( A )
if (isrobot(user))
if(isrobot(user))
var/mob/living/silicon/robot/engy = user
engy.cell.charge -= 50
else
@@ -121,12 +121,12 @@ RSF
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
return
else if (istype(A, /obj/structure/table) && mode == 3)
if (istype(A, /obj/structure/table) && matter >= 1)
else if(istype(A, /obj/structure/table) && mode == 3)
if(istype(A, /obj/structure/table) && matter >= 1)
to_chat(user, "Dispensing Paper Sheet...")
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
new /obj/item/weapon/paper( A.loc )
if (isrobot(user))
if(isrobot(user))
var/mob/living/silicon/robot/engy = user
engy.cell.charge -= 10
else
@@ -135,12 +135,12 @@ RSF
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
return
else if (istype(A, /turf/simulated/floor) && mode == 3)
if (istype(A, /turf/simulated/floor) && matter >= 1)
else if(istype(A, /turf/simulated/floor) && mode == 3)
if(istype(A, /turf/simulated/floor) && matter >= 1)
to_chat(user, "Dispensing Paper Sheet...")
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
new /obj/item/weapon/paper( A )
if (isrobot(user))
if(isrobot(user))
var/mob/living/silicon/robot/engy = user
engy.cell.charge -= 10
else
@@ -149,12 +149,12 @@ RSF
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
return
else if (istype(A, /obj/structure/table) && mode == 4)
if (istype(A, /obj/structure/table) && matter >= 1)
else if(istype(A, /obj/structure/table) && mode == 4)
if(istype(A, /obj/structure/table) && matter >= 1)
to_chat(user, "Dispensing Pen...")
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
new /obj/item/weapon/pen( A.loc )
if (isrobot(user))
if(isrobot(user))
var/mob/living/silicon/robot/engy = user
engy.cell.charge -= 50
else
@@ -163,12 +163,12 @@ RSF
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
return
else if (istype(A, /turf/simulated/floor) && mode == 4)
if (istype(A, /turf/simulated/floor) && matter >= 1)
else if(istype(A, /turf/simulated/floor) && mode == 4)
if(istype(A, /turf/simulated/floor) && matter >= 1)
to_chat(user, "Dispensing Pen...")
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
new /obj/item/weapon/pen( A )
if (isrobot(user))
if(isrobot(user))
var/mob/living/silicon/robot/engy = user
engy.cell.charge -= 50
else
@@ -177,12 +177,12 @@ RSF
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
return
else if (istype(A, /obj/structure/table) && mode == 5)
if (istype(A, /obj/structure/table) && matter >= 1)
else if(istype(A, /obj/structure/table) && mode == 5)
if(istype(A, /obj/structure/table) && matter >= 1)
to_chat(user, "Dispensing Dice Pack...")
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
new /obj/item/weapon/storage/pill_bottle/dice( A.loc )
if (isrobot(user))
if(isrobot(user))
var/mob/living/silicon/robot/engy = user
engy.cell.charge -= 200
else
@@ -191,12 +191,12 @@ RSF
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
return
else if (istype(A, /turf/simulated/floor) && mode == 5)
if (istype(A, /turf/simulated/floor) && matter >= 1)
else if(istype(A, /turf/simulated/floor) && mode == 5)
if(istype(A, /turf/simulated/floor) && matter >= 1)
to_chat(user, "Dispensing Dice Pack...")
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
new /obj/item/weapon/storage/pill_bottle/dice( A )
if (isrobot(user))
if(isrobot(user))
var/mob/living/silicon/robot/engy = user
engy.cell.charge -= 200
else
@@ -205,12 +205,12 @@ RSF
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
return
else if (istype(A, /obj/structure/table) && mode == 6)
if (istype(A, /obj/structure/table) && matter >= 1)
else if(istype(A, /obj/structure/table) && mode == 6)
if(istype(A, /obj/structure/table) && matter >= 1)
to_chat(user, "Dispensing Cigarette...")
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
new /obj/item/clothing/mask/cigarette( A.loc )
if (isrobot(user))
if(isrobot(user))
var/mob/living/silicon/robot/engy = user
engy.cell.charge -= 10
else
@@ -219,12 +219,12 @@ RSF
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
return
else if (istype(A, /turf/simulated/floor) && mode == 6)
if (istype(A, /turf/simulated/floor) && matter >= 1)
else if(istype(A, /turf/simulated/floor) && mode == 6)
if(istype(A, /turf/simulated/floor) && matter >= 1)
to_chat(user, "Dispensing Cigarette...")
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
new /obj/item/clothing/mask/cigarette( A )
if (isrobot(user))
if(isrobot(user))
var/mob/living/silicon/robot/engy = user
engy.cell.charge -= 10
else
@@ -14,7 +14,6 @@
throw_range = 5
w_class = 2
w_class_on = 2
flags = NOSHIELD
attack_verb = list("attacked", "slashed", "gored", "sliced", "torn", "ripped", "butchered", "cut")
attack_verb_on = list()
@@ -2,6 +2,7 @@
/obj/item/weapon/bee_briefcase
name = "briefcase"
desc = "This briefcase has easy-release clasps and smells vaguely of honey and blood..."
description_antag = "A briefcase filled with deadly bees, you should inject this with a syringe of your own blood before opening it."
icon = 'icons/obj/storage.dmi'
icon_state = "briefcase"
item_state = "briefcase"
@@ -27,7 +28,6 @@
/obj/item/weapon/bee_briefcase/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/reagent_containers/syringe))
var/obj/item/weapon/reagent_containers/syringe/S = I
if(!bees_left)
to_chat(user, "<span class='warning'>The briefcase is empty, so there is no point in injecting something into it.</span>")
@@ -46,7 +46,6 @@
to_chat(user, "<span class='warning'>The buzzing inside the briefcase swells momentarily, then returns to normal. Guess it was too cramped...</span>")
S.reagents.clear_reagents()
S.update_icon()
else if(istype(I, /obj/item/weapon/plantspray))
var/obj/item/weapon/plantspray/PS = I
user.drop_item(PS)
+47 -46
View File
@@ -15,7 +15,7 @@
name = "card"
desc = "A card."
icon = 'icons/obj/card.dmi'
w_class = 1.0
w_class = 1
var/associated_account_number = 0
var/list/files = list( )
@@ -34,7 +34,7 @@
set category = "Object"
set src in usr
if (t)
if(t)
src.name = text("Data Disk- '[]'", t)
else
src.name = "Data Disk"
@@ -103,8 +103,6 @@
var/sex
var/age
var/photo
var/icon/front
var/icon/side
var/dat
var/stamped = 0
@@ -124,12 +122,12 @@
to_chat(user, "<span class='warning'>It is too far away.</span>")
if(guest_pass)
to_chat(user, "<span class='notice'>There is a guest pass attached to this ID card</span>")
if (world.time < guest_pass.expiration_time)
if(world.time < guest_pass.expiration_time)
to_chat(user, "<span class='notice'>It expires at [worldtime2text(guest_pass.expiration_time)].</span>")
else
to_chat(user, "<span class='warning'>It expired at [worldtime2text(guest_pass.expiration_time)].</span>")
to_chat(user, "<span class='notice'>It grants access to following areas:</span>")
for (var/A in guest_pass.temp_access)
for(var/A in guest_pass.temp_access)
to_chat(user, "<span class='notice'>[get_access_desc(A)].</span>")
to_chat(user, "<span class='notice'>Issuing reason: [guest_pass.reason].</span>")
@@ -137,12 +135,6 @@
var/datum/asset/assets = get_asset_datum(/datum/asset/simple/paper)
assets.send(user)
if(!front)
front = new(photo, dir = SOUTH)
if(!side)
side = new(photo, dir = WEST)
user << browse_rsc(front, "front.png")
user << browse_rsc(side, "side.png")
var/datum/browser/popup = new(user, "idcard", name, 600, 400)
popup.set_content(dat)
popup.set_title_image(usr.browse_rsc_icon(src.icon, src.icon_state))
@@ -150,8 +142,8 @@
return
/obj/item/weapon/card/id/attack_self(mob/user as mob)
user.visible_message("[user] shows you: \icon[src] [src.name]. The assignment on the card: [src.assignment]",\
"You flash your ID card: \icon[src] [src.name]. The assignment on the card: [src.assignment]")
user.visible_message("[user] shows you: [bicon(src)] [src.name]. The assignment on the card: [src.assignment]",\
"You flash your ID card: [bicon(src)] [src.name]. The assignment on the card: [src.assignment]")
if(mining_points)
to_chat(user, "There's [mining_points] mining equipment redemption points loaded onto this card.")
src.add_fingerprint(user)
@@ -170,16 +162,22 @@
dna_hash = H.dna.unique_enzymes
fingerprint_hash = md5(H.dna.uni_identity)
dat = ("<table><tr><td>")
dat += text("Name: []</A><BR>", registered_name)
dat += text("Sex: []</A><BR>\n", sex)
dat += text("Age: []</A><BR>\n", age)
dat += text("Rank: []</A><BR>\n", assignment)
dat += text("Fingerprint: []</A><BR>\n", fingerprint_hash)
dat += text("Blood Type: []<BR>\n", blood_type)
dat += text("DNA Hash: []<BR><BR>\n", dna_hash)
dat +="<td align = center valign = top>Photo:<br><img src=front.png height=80 width=80 border=4> \
<img src=side.png height=80 width=80 border=4></td></tr></table>"
RebuildHTML()
/obj/item/weapon/card/id/proc/RebuildHTML()
var/photo_front = "'data:image/png;base64,[icon2base64(icon(photo, dir = SOUTH))]'"
var/photo_side = "'data:image/png;base64,[icon2base64(icon(photo, dir = WEST))]'"
dat = {"<table><tr><td>
Name: [registered_name]</A><BR>
Sex: [sex]</A><BR>
Age: [age]</A><BR>
Rank: [assignment]</A><BR>
Fingerprint: [fingerprint_hash]</A><BR>
Blood Type: [blood_type]<BR>
DNA Hash: [dna_hash]<BR><BR>
<td align = center valign = top>Photo:<br><img src=[photo_front] height=80 width=80 border=4>
<img src=[photo_side] height=80 width=80 border=4></td></tr></table>"}
/obj/item/weapon/card/id/GetAccess()
if(!guest_pass)
@@ -292,27 +290,22 @@
to_chat(usr, "<span class='notice'>The card's microscanners activate as you pass it over \the [I], copying its access.</span>")
src.access |= I.access //Don't copy access if user isn't an antag -- to prevent metagaming
/obj/item/weapon/card/id/syndicate/proc/fake_id_photo(var/mob/living/carbon/human/H, var/side=0)//get_id_photo wouldn't work correctly
/obj/item/weapon/card/id/syndicate/proc/fake_id_photo(var/mob/living/carbon/human/H)//get_id_photo wouldn't work correctly
if(!istype(H))
return
var/storedDir = H.dir //don't want to lose track of this
var/icon/faked
if(!side)
if(!H.equip_to_slot_if_possible(src, slot_l_store, 0, 1))
to_chat(H, "<span class='warning'>You need to empty your pockets before taking the ID picture.</span>")
return
var/icon/faked = new()
if(!H.equip_to_slot_if_possible(src, slot_l_store, 0, 1))
to_chat(H, "<span class='warning'>You need to empty your pockets before taking the ID picture.</span>")
return
if(side)
H.dir = WEST //ensure the icon is actually the proper direction before copying it
faked = getFlatIcon(H)
H.dir = storedDir //reset the user back to their original direction, not even noticable they changed
H.equip_to_slot_if_possible(src, slot_l_hand, 0, 1)
else
H.dir = SOUTH
faked = getFlatIcon(H)
H.dir = storedDir
H.dir = WEST //ensure the icon is actually the proper direction before copying it
faked.Insert(getFlatIcon(H), dir = WEST)
H.dir = SOUTH
faked.Insert(getFlatIcon(H), dir = SOUTH)
H.dir = storedDir
H.equip_to_slot_if_possible(src, slot_l_hand, 0, 1)
return faked
@@ -349,16 +342,17 @@
src.registered_name = new_name
UpdateName()
to_chat(user, "<span class='notice'>Name changed to [new_name].</span>")
RebuildHTML()
if("Photo")
if(!Adjacent(user))
return
photo = fake_id_photo(user)
var/icon/photoside = fake_id_photo(user,1)
front = new(photo)
side = new(photoside)
if(photo && photoside)
to_chat(user, "<span class='notice'>Photo changed.</span>")
var/icon/newphoto = fake_id_photo(user)
if(!newphoto)
return
photo = newphoto
to_chat(user, "<span class='notice'>Photo changed.</span>")
RebuildHTML()
if("Appearance")
var/list/appearances = list(
@@ -403,6 +397,7 @@
return
src.sex = new_sex
to_chat(user, "<span class='notice'>Sex changed to [new_sex].</span>")
RebuildHTML()
if("Age")
var/new_age = sanitize(stripped_input(user,"What age would you like to put on this card?","Agent Card Age","21", MAX_MESSAGE_LEN))
@@ -410,6 +405,7 @@
return
src.age = new_age
to_chat(user, "<span class='notice'>Age changed to [new_age].</span>")
RebuildHTML()
if("Occupation")
var/new_job = sanitize(stripped_input(user,"What job would you like to put on this card?\nChanging occupation will not grant or remove any access levels.","Agent Card Occupation", "Civilian", MAX_MESSAGE_LEN))
@@ -418,6 +414,7 @@
src.assignment = new_job
to_chat(user, "<span class='notice'>Occupation changed to [new_job].</span>")
UpdateName()
RebuildHTML()
if("Money Account")
var/new_account = input(user,"What money account would you like to link to this card?","Agent Card Account",12345) as num
@@ -438,6 +435,7 @@
return
src.blood_type = new_blood_type
to_chat(user, "<span class='notice'>Blood type changed to [new_blood_type].</span>")
RebuildHTML()
if("DNA Hash")
var/default = "\[UNSET\]"
@@ -451,6 +449,7 @@
return
src.dna_hash = new_dna_hash
to_chat(user, "<span class='notice'>DNA hash changed to [new_dna_hash].</span>")
RebuildHTML()
if("Fingerprint Hash")
var/default = "\[UNSET\]"
@@ -464,6 +463,7 @@
return
src.fingerprint_hash = new_fingerprint_hash
to_chat(user, "<span class='notice'>Fingerprint hash changed to [new_fingerprint_hash].</span>")
RebuildHTML()
if("Reset Card")
name = initial(name)
@@ -480,6 +480,7 @@
registered_user = null
to_chat(user, "<span class='notice'>All information has been deleted from \the [src].</span>")
RebuildHTML()
else
..()
+3 -3
View File
@@ -22,7 +22,7 @@ var/global/list/moneytypes=list(
throwforce = 1.0
throw_speed = 1
throw_range = 2
w_class = 1.0
w_class = 1
var/access = list()
access = access_crate_cash
var/worth = 1 // Per chip
@@ -37,9 +37,9 @@ var/global/list/moneytypes=list(
/obj/item/weapon/spacecash/examine(mob/user)
if(amount>1)
to_chat(user, "\icon[src] This is a stack of [amount] [src]s.")
to_chat(user, "[bicon(src)] This is a stack of [amount] [src]s.")
else
to_chat(user, "\icon[src] This is \a [src]s.")
to_chat(user, "[bicon(src)] This is \a [src]s.")
to_chat(user, "It's worth [worth*amount] credits.")
/obj/item/weapon/spacecash/update_icon()
+1 -1
View File
@@ -7,7 +7,7 @@
throwforce = 3.0
throw_speed = 1
throw_range = 5
w_class = 2.0
w_class = 2
attack_verb = list("warned", "cautioned", "smashed")
proximity_sign
@@ -6,10 +6,10 @@
icon = 'icons/obj/chronos.dmi'
icon_state = "chronobackpack"
item_state = "backpack"
w_class = 4.0
w_class = 4
slot_flags = SLOT_BACK
slowdown = 1
action_button_name = "Equip/Unequip TED Gun"
actions_types = list(/datum/action/item_action/equip_unequip_TED_Gun)
var/obj/item/weapon/gun/energy/chrono_gun/PA = null
var/list/erased_minds = list() //a collection of minds from the dead
@@ -17,6 +17,7 @@
erased_minds += M
/obj/item/weapon/chrono_eraser/dropped()
..()
if(PA)
qdel(PA)
@@ -24,15 +25,19 @@
dropped()
return ..()
/obj/item/weapon/chrono_eraser/ui_action_click()
var/mob/living/carbon/user = src.loc
if(iscarbon(user) && (user.back == src))
if(PA)
qdel(PA)
else
PA = new(src)
user.put_in_hands(PA)
/obj/item/weapon/chrono_eraser/ui_action_click(mob/user)
if(iscarbon(user))
var/mob/living/carbon/C = user
if(C.back == src)
if(PA)
qdel(PA)
else
PA = new(src)
user.put_in_hands(PA)
/obj/item/weapon/chrono_eraser/item_action_slot_check(slot, mob/user)
if(slot == slot_back)
return 1
/obj/item/weapon/gun/energy/chrono_gun
@@ -15,13 +15,13 @@
icon = 'icons/obj/items.dmi'
icon_state = "banana_peel"
item_state = "banana_peel"
w_class = 1.0
w_class = 1
throwforce = 0
throw_speed = 4
throw_range = 20
/obj/item/weapon/bananapeel/Crossed(AM as mob|obj)
if (istype(AM, /mob/living/carbon))
if(istype(AM, /mob/living/carbon))
var/mob/living/carbon/M = AM
M.slip("banana peel", 4, 2)
@@ -29,7 +29,7 @@
* Soap
*/
/obj/item/weapon/soap/Crossed(AM as mob|obj) //EXACTLY the same as bananapeel for now, so it makes sense to put it in the same dm -- Urist
if (istype(AM, /mob/living/carbon))
if(istype(AM, /mob/living/carbon))
var/mob/living/carbon/M = AM
M.slip("soap", 4, 2)
@@ -77,7 +77,7 @@
item_state = "bike_horn"
hitsound = null
throwforce = 3
w_class = 1.0
w_class = 1
throw_speed = 3
throw_range = 15
attack_verb = list("HONKED")
+2 -2
View File
@@ -3,7 +3,7 @@
desc = "A generic brand of lipstick."
icon = 'icons/obj/items.dmi'
icon_state = "lipstick"
w_class = 1.0
w_class = 1
var/colour = "red"
var/open = 0
@@ -86,7 +86,7 @@
icon = 'icons/obj/items.dmi'
icon_state = "razor"
flags = CONDUCT
w_class = 1.0
w_class = 1
/obj/item/weapon/razor/attack(mob/living/carbon/M as mob, mob/user as mob)
if(ishuman(M))
+2 -2
View File
@@ -9,7 +9,7 @@
icon_state = "gavelhammer"
force = 5.0
throwforce = 6.0
w_class = 2.0
w_class = 2
attack_verb = list("bashed", "battered", "judged", "whacked")
/obj/item/weapon/gavelhammer/suicide_act(mob/user)
@@ -24,7 +24,7 @@
icon_state = "gavelblock"
force = 2.0
throwforce = 2.0
w_class = 1.0
w_class = 1
/obj/item/weapon/gavelblock/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/gavelhammer))
+19 -18
View File
@@ -11,7 +11,7 @@
throwforce = 6
w_class = 4
origin_tech = "biotech=4"
action_button_name = "Toggle Paddles"
actions_types = list(/datum/action/item_action/toggle_paddles)
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/back.dmi'
@@ -70,15 +70,12 @@
overlays += "[icon_state]-charge[ratio]"
/obj/item/weapon/defibrillator/CheckParts()
..()
bcell = locate(/obj/item/weapon/stock_parts/cell) in contents
update_icon()
/obj/item/weapon/defibrillator/ui_action_click()
if(usr.get_item_by_slot(slot_back) == src)
toggle_paddles()
else
to_chat(usr, "<span class='warning'>Put the defibrillator on your back first!</span>")
return
toggle_paddles()
/obj/item/weapon/defibrillator/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/stock_parts/cell))
@@ -147,16 +144,23 @@
remove_paddles(user)
update_icon()
return
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/weapon/defibrillator/proc/make_paddles()
return new /obj/item/weapon/twohanded/shockpaddles(src)
/obj/item/weapon/defibrillator/equipped(mob/user, slot)
..()
if(slot != slot_back)
remove_paddles(user)
update_icon()
/obj/item/weapon/defibrillator/item_action_slot_check(slot, mob/user)
if(slot == slot_back)
return 1
/obj/item/weapon/defibrillator/proc/remove_paddles(mob/user)
var/mob/living/carbon/human/M = user
if(paddles in get_both_hands(M))
@@ -210,12 +214,9 @@
slot_flags = SLOT_BELT
origin_tech = "biotech=4"
/obj/item/weapon/defibrillator/compact/ui_action_click()
if(usr.get_item_by_slot(slot_belt) == src)
toggle_paddles()
else
to_chat(usr, "<span class='warning'>Strap the defibrillator's belt on first!</span>")
return
/obj/item/weapon/defibrillator/compact/item_action_slot_check(slot, mob/user)
if(slot == slot_belt)
return 1
/obj/item/weapon/defibrillator/compact/loaded/New()
..()
@@ -284,7 +285,7 @@
/obj/item/weapon/twohanded/shockpaddles/dropped(mob/user as mob)
if(user)
var/obj/item/weapon/twohanded/O = user.get_inactive_hand()
var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_hand()
if(istype(O))
O.unwield()
to_chat(user, "<span class='notice'>The paddles snap back into the main unit.</span>")
@@ -294,7 +295,7 @@
return unwield()
/obj/item/weapon/twohanded/shockpaddles/proc/check_defib_exists(mainunit, var/mob/living/carbon/human/M, var/obj/O)
if (!mainunit || !istype(mainunit, /obj/item/weapon/defibrillator)) //To avoid weird issues from admin spawns
if(!mainunit || !istype(mainunit, /obj/item/weapon/defibrillator)) //To avoid weird issues from admin spawns
M.unEquip(O)
qdel(O)
return 0
@@ -421,7 +422,7 @@
else if(ghost)
user.visible_message("<span class='notice'>[defib] buzzes: Resuscitation failed: Patient's brain is unresponsive. Further attempts may succeed.</span>")
to_chat(ghost, "<span class='ghostalert'>Your heart is being defibrillated. Return to your body if you want to be revived!</span> (Verbs -> Ghost -> Re-enter corpse)")
to_chat(ghost, sound('sound/effects/genetics.ogg'))
ghost << sound('sound/effects/genetics.ogg')
else
user.visible_message("<span class='notice'>[defib] buzzes: Resuscitation failed.</span>")
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
@@ -542,7 +543,7 @@
else if(ghost)
user.visible_message("<span class='notice'>[user] buzzes: Resuscitation failed: Patient's brain is unresponsive. Further attempts may succeed.</span>")
to_chat(ghost, "<span class='ghostalert'>Your heart is being defibrillated. Return to your body if you want to be revived!</span> (Verbs -> Ghost -> Re-enter corpse)")
to_chat(ghost, sound('sound/effects/genetics.ogg'))
ghost << sound('sound/effects/genetics.ogg')
else
user.visible_message("<span class='warning'>[user] buzzes: Resuscitation failed.</span>")
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
@@ -561,4 +562,4 @@
update_icon()
else
to_chat(user, "<span class='notice'>You need to target your patient's chest with [src].</span>")
return
return
@@ -73,12 +73,12 @@
if(!(NOCLONE in M.mutations) && !(H && (H.species.flags & NO_DNA))) // prevents drained people from having their DNA changed
var/prev_ue = M.dna.unique_enzymes
// UI in syringe.
if (buf.types & DNA2_BUF_UI)
if (!block) //isolated block?
if(buf.types & DNA2_BUF_UI)
if(!block) //isolated block?
M.dna.UI = buf.dna.UI.Copy()
M.dna.UpdateUI()
M.UpdateAppearance()
if (buf.types & DNA2_BUF_UE) //unique enzymes? yes
if(buf.types & DNA2_BUF_UE) //unique enzymes? yes
M.real_name = buf.dna.real_name
M.name = buf.dna.real_name
@@ -87,13 +87,13 @@
else
M.dna.SetUIValue(block,src.GetValue())
M.UpdateAppearance()
if (buf.types & DNA2_BUF_SE)
if (!block) //isolated block?
if(buf.types & DNA2_BUF_SE)
if(!block) //isolated block?
M.dna.SE = buf.dna.SE.Copy()
M.dna.UpdateSE()
else
M.dna.SetSEValue(block,src.GetValue())
domutcheck(M, null, block!=null)
domutcheck(M, null, 0)
M.update_mutations()
if(H)
H.sync_organ_dna(assimilate = 0, old_ue = prev_ue)
@@ -110,7 +110,7 @@
if(H.species.flags & NO_DNA)
return 0
if (!user.IsAdvancedToolUser())
if(!user.IsAdvancedToolUser())
return 0
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been injected with [name] by [user.name] ([user.ckey])</font>")
@@ -27,7 +27,7 @@
src.injected(user,user)
else
user.visible_message("\red <b>[user.name] is trying to inject [M.name] with [src]!</b>")
if (do_mob(user,M,30))
if(do_mob(user,M,30))
user.visible_message("\red <b>[user.name] injects [M.name] with [src].</b>")
src.injected(M, user)
else
+195 -86
View File
@@ -1,31 +1,96 @@
/obj/item/weapon/c4
name = "plastic explosives"
/obj/item/weapon/grenade/plastic
name = "plastic explosive"
desc = "Used to put holes in specific areas without too much extra hole."
gender = PLURAL
icon = 'icons/obj/assemblies.dmi'
icon_state = "plastic-explosive0"
item_state = "plasticx"
item_state = "plastic-explosive"
flags = NOBLUDGEON
w_class = 2.0
det_time = 10
display_timer = 0
origin_tech = "syndicate=2"
var/datum/wires/explosive/plastic/wires = null
var/timer = 10
var/atom/target = null
var/open_panel = 0
var/image_overlay = null
var/obj/item/device/assembly_holder/nadeassembly = null
var/assemblyattacher
/obj/item/weapon/c4/New()
wires = new(src)
/obj/item/weapon/grenade/plastic/New()
image_overlay = image('icons/obj/grenade.dmi', "[item_state]2")
..()
/obj/item/weapon/c4/Destroy()
qdel(wires)
wires = null
/obj/item/weapon/grenade/plastic/Destroy()
qdel(nadeassembly)
nadeassembly = null
target = null
return ..()
..()
/obj/item/weapon/c4/suicide_act(var/mob/user)
. = (BRUTELOSS)
to_chat(viewers(user), "<span class='suicide'>[user] activates the C4 and holds it above his head! It looks like \he's going out with a bang!</span>")
/obj/item/weapon/grenade/plastic/attackby(obj/item/I, mob/user, params)
if(!nadeassembly && istype(I, /obj/item/device/assembly_holder))
var/obj/item/device/assembly_holder/A = I
if(!user.unEquip(I))
return ..()
nadeassembly = A
A.master = src
A.loc = src
assemblyattacher = user.ckey
to_chat(user, "<span class='notice'>You add [A] to the [name].</span>")
playsound(src, 'sound/weapons/tap.ogg', 20, 1)
update_icon()
return
if(nadeassembly && istype(I, /obj/item/weapon/wirecutters))
playsound(src, 'sound/items/Wirecutter.ogg', 20, 1)
nadeassembly.loc = get_turf(src)
nadeassembly.master = null
nadeassembly = null
update_icon()
return
..()
//assembly stuff
/obj/item/weapon/grenade/plastic/receive_signal()
prime()
/obj/item/weapon/grenade/plastic/Crossed(atom/movable/AM)
if(nadeassembly)
nadeassembly.Crossed(AM)
/obj/item/weapon/grenade/plastic/on_found(mob/finder)
if(nadeassembly)
nadeassembly.on_found(finder)
/obj/item/weapon/grenade/plastic/attack_self(mob/user)
if(nadeassembly)
nadeassembly.attack_self(user)
return
var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num
if(user.get_active_hand() == src)
newtime = Clamp(newtime, 10, 60000)
det_time = newtime
to_chat(user, "Timer set for [det_time] seconds.")
/obj/item/weapon/grenade/plastic/afterattack(atom/movable/AM, mob/user, flag)
if (!flag)
return
if (istype(AM, /mob/living/carbon))
return
to_chat(user, "<span class='notice'>You start planting the [src]. The timer is set to [det_time]...</span>")
if(do_after(user, 50, target = AM))
if(!user.unEquip(src))
return
src.target = AM
loc = null
message_admins("[key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[target.x];Y=[target.y];Z=[target.z]'>JMP</a>) with [det_time] second fuse",0,1)
log_game("[key_name(user)] planted [name] on [target.name] at ([target.x],[target.y],[target.z]) with [det_time] second fuse")
target.overlays += image_overlay
if(!nadeassembly)
to_chat(user, "<span class='notice'>You plant the bomb. Timer counting down from [det_time].</span>")
addtimer(src, "prime", det_time*10)
/obj/item/weapon/grenade/plastic/suicide_act(mob/user)
message_admins("[key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) suicided with [src.name] at ([user.x],[user.y],[user.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)",0,1)
message_admins("[key_name(user)] suicided with [name] at ([user.x],[user.y],[user.z])")
user.visible_message("<span class='suicide'>[user] activates the [name] and holds it above \his head! It looks like \he's going out with a bang!</span>")
var/message_say = "FOR NO RAISIN!"
if(user.mind)
if(user.mind.special_role)
@@ -44,81 +109,125 @@
message_say = "FOR THE REVOLOUTION!"
else if(role == "death commando" || role == ROLE_ERT)
message_say = "FOR NANOTRASEN!"
user.say(message_say)
target = user
message_admins("[key_name_admin(user)] suicided with [src.name] at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
message_admins("[key_name(user)] suicided with [src.name] at ([x],[y],[z])")
explode(get_turf(user))
return .
sleep(10)
prime()
user.gib()
/obj/item/weapon/c4/attackby(var/obj/item/I, var/mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
open_panel = !open_panel
to_chat(user, "<span class='notice'>You [open_panel ? "open" : "close"] the wire panel.</span>")
else if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler ))
wires.Interact(user)
/obj/item/weapon/grenade/plastic/update_icon()
if(nadeassembly)
icon_state = "[item_state]1"
else
..()
icon_state = "[item_state]0"
/obj/item/weapon/c4/attack_self(mob/user as mob)
var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num|null
if(newtime == null)
return
if(newtime < 10)
newtime = 10
if(newtime > 60000)
newtime = 60000
timer = newtime
to_chat(user, "Timer set for [timer] seconds.")
//////////////////////////
///// The Explosives /////
//////////////////////////
/obj/item/weapon/grenade/plastic/c4
name = "C4"
desc = "Used to put holes in specific areas without too much extra hole. A saboteurs favourite."
/obj/item/weapon/c4/afterattack(atom/target as obj|turf, mob/user as mob, flag)
if (!flag)
return
if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage) || istype(target, /obj/item/clothing/accessory/storage) || istype(target, /obj/item/clothing/under))
return
to_chat(user, "Planting explosives...")
if(do_after(user, 50, target = target) && in_range(user, target))
user.drop_item()
src.target = target
loc = null
if (ismob(target))
add_logs(target, user, "planted [name] on")
user.visible_message("\red [user.name] finished planting an explosive on [target.name]!")
message_admins("[key_name_admin(user)] planted [src.name] on [key_name_admin(target)] with [timer] second fuse",0,1)
log_game("[key_name(user)] planted [src.name] on [key_name(target)] with [timer] second fuse")
else
message_admins("[key_name_admin(user)] planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[target.x];Y=[target.y];Z=[target.z]'>JMP</a>) with [timer] second fuse",0,1)
log_game("[key_name(user)] planted [src.name] on [target.name] at ([target.x],[target.y],[target.z]) with [timer] second fuse")
target.overlays += image('icons/obj/assemblies.dmi', "plastic-explosive2")
to_chat(user, "Bomb has been planted. Timer counting down from [timer].")
spawn(timer*10)
explode(get_turf(target))
/obj/item/weapon/c4/proc/explode(var/location)
if(!target)
target = get_atom_on_turf(src)
if(!target)
target = src
if(location)
explosion(location, -1, -1, 4, 4)
/obj/item/weapon/grenade/plastic/c4/prime()
var/turf/location
if(target)
if (istype(target, /turf/simulated/wall))
var/turf/simulated/wall/W = target
W.dismantle_wall(1)
else
target.ex_act(1)
if (isobj(target))
if (target)
qdel(target)
if(!qdeleted(target))
location = get_turf(target)
target.overlays -= image_overlay
else
location = get_turf(src)
if(location)
location.ex_act(2, target)
explosion(location,0,0,3)
if(istype(target, /mob))
var/mob/M = target
M.gib()
qdel(src)
/obj/item/weapon/c4/attack(mob/M as mob, mob/user as mob, def_zone)
return
// X4 is an upgraded directional variant of c4 which is relatively safe to be standing next to. And much less safe to be standing on the other side of.
// C4 is intended to be used for infiltration, and destroying tech. X4 is intended to be used for heavy breaching and tight spaces.
// Intended to replace C4 for nukeops, and to be a randomdrop in surplus/random traitor purchases.
/obj/item/weapon/grenade/plastic/x4
name = "X4"
desc = "A specialized shaped high explosive breaching charge. Designed to be safer for the user, and less so, for the wall."
var/aim_dir = NORTH
icon_state = "plasticx40"
item_state = "plasticx4"
/obj/item/weapon/grenade/plastic/x4/prime()
var/turf/location
if(target)
if(!qdeleted(target))
location = get_turf(target)
target.overlays -= image_overlay
else
location = get_turf(src)
if(location)
if(target && target.density)
var/turf/T = get_step(location, aim_dir)
explosion(get_step(T, aim_dir),0,0,3)
explosion(T,0,2,0)
location.ex_act(2, target)
else
explosion(location, 0, 2, 3)
location.ex_act(2, target)
if(istype(target, /mob))
var/mob/M = target
M.gib()
qdel(src)
/obj/item/weapon/grenade/plastic/x4/afterattack(atom/movable/AM, mob/user, flag)
aim_dir = get_dir(user,AM)
..()
// Shaped charge
// Same blasting power as C4, but with the same idea as the X4 -- Everyone on one side of the wall is safe.
/obj/item/weapon/grenade/plastic/c4_shaped
name = "C4 (shaped)"
desc = "A brick of C4 shaped to allow more precise breaching."
var/aim_dir = NORTH
/obj/item/weapon/grenade/plastic/c4_shaped/prime()
var/turf/location
if(target)
if(!qdeleted(target))
location = get_turf(target)
target.overlays -= image_overlay
else
location = get_turf(src)
if(location)
if(target && target.density)
var/turf/T = get_step(location, aim_dir)
explosion(get_step(T, aim_dir),0,0,3)
location.ex_act(2, target)
else
explosion(location, 0, 0, 3)
location.ex_act(2, target)
if(istype(target, /mob))
var/mob/M = target
M.gib()
qdel(src)
/obj/item/weapon/grenade/plastic/c4_shaped/afterattack(atom/movable/AM, mob/user, flag)
aim_dir = get_dir(user,AM)
..()
/obj/item/weapon/grenade/plastic/c4_shaped/flash
name = "C4 (flash)"
desc = "A C4 charge with an altered chemical composition, designed to blind and deafen the occupants of a room before breaching."
/obj/item/weapon/grenade/plastic/c4_shaped/flash/prime()
if(target && target.density)
T = get_step(get_turf(target), aim_dir)
else if(target)
T = get_turf(target)
else
T = get_turf(src)
var/obj/item/weapon/grenade/flashbang/CB = new/obj/item/weapon/grenade/flashbang(T)
CB.prime()
..()
@@ -7,7 +7,7 @@
hitsound = 'sound/weapons/smash.ogg'
flags = CONDUCT
throwforce = 10
w_class = 3.0
w_class = 3
throw_speed = 2
throw_range = 7
force = 10
@@ -29,7 +29,7 @@
hitsound = null //it is much lighter, after all.
flags = null //doesn't CONDUCT
throwforce = 2
w_class = 2.0
w_class = 2
force = 3.0
materials = list()
max_water = 30
@@ -37,7 +37,7 @@
/obj/item/weapon/extinguisher/examine(mob/user)
if(..(user, 0))
to_chat(usr, "\icon[src] [src.name] contains:")
to_chat(usr, "[bicon(src)] [src.name] contains:")
if(reagents && reagents.reagent_list.len)
for(var/datum/reagent/R in reagents.reagent_list)
to_chat(user, "\blue [R.volume] units of [R.name]")
@@ -83,12 +83,12 @@
var/Refill = AttemptRefill(target, user)
if(Refill)
return
if (!safety)
if (src.reagents.total_volume < 1)
if(!safety)
if(src.reagents.total_volume < 1)
to_chat(usr, "<span class='danger'>\The [src] is empty.</span>")
return
if (world.time < src.last_use + 20)
if(world.time < src.last_use + 20)
return
src.last_use = world.time
+2 -2
View File
@@ -7,7 +7,7 @@ obj/item/weapon/firework
obj/item/weapon/firework/attackby(obj/item/weapon/W,mob/user, params)
if(litzor)
return
if (istype(W, /obj/item/weapon/weldingtool) && W:welding || istype(W,/obj/item/weapon/lighter) && W:lit)
if(istype(W, /obj/item/weapon/weldingtool) && W:welding || istype(W,/obj/item/weapon/lighter) && W:lit)
for(var/mob/M in viewers(user))
to_chat(M, "[user] lits \the [src]")
litzor = 1
@@ -29,7 +29,7 @@ obj/item/weapon/sparkler
obj/item/weapon/sparkler/attackby(obj/item/weapon/W,mob/user, params)
if(litzor)
return
if (istype(W, /obj/item/weapon/weldingtool) && W:welding || istype(W,/obj/item/weapon/lighter) && W:lit)
if(istype(W, /obj/item/weapon/weldingtool) && W:welding || istype(W,/obj/item/weapon/lighter) && W:lit)
for(var/mob/M in viewers(user))
to_chat(M, "[user] lits \the [src]")
litzor = 1
@@ -11,7 +11,7 @@
throwforce = 10.0
throw_speed = 1
throw_range = 5
w_class = 3.0
w_class = 3
materials = list(MAT_METAL=500)
origin_tech = "combat=1;plasmatech=1"
var/status = 0
@@ -165,6 +165,7 @@
return
/obj/item/weapon/flamethrower/CheckParts()
..()
weldtool = locate(/obj/item/weapon/weldingtool) in contents
igniter = locate(/obj/item/device/assembly/igniter) in contents
update_icon()
@@ -191,10 +192,10 @@
return
/obj/item/weapon/flamethrower/proc/ignite_turf(turf/target)
/obj/item/weapon/flamethrower/proc/ignite_turf(turf/target, release_amount = 0.05)
//TODO: DEFERRED Consider checking to make sure tank pressure is high enough before doing this...
//Transfer 5% of current tank air contents to turf
var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(0.05)
var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(release_amount)
air_transfer.toxins = air_transfer.toxins * 5 // This is me not comprehending the air system. I realize this is retarded and I could probably make it work without fucking it up like this, but there you have it. -- TLE
target.assume_air(air_transfer)
//Burn it based on transfered gas
@@ -218,4 +219,12 @@
/obj/item/weapon/flamethrower/full/tank/New(var/loc)
..()
ptank = new /obj/item/weapon/tank/plasma/full(src)
update_icon()
update_icon()
/obj/item/weapon/flamethrower/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type)
if(ptank && damage && attack_type == PROJECTILE_ATTACK && prob(15))
owner.visible_message("<span class='danger'>[attack_text] hits the fueltank on [owner]'s [src], rupturing it! What a shot!</span>")
var/target_turf = get_turf(owner)
ignite_turf(target_turf, 100)
qdel(ptank)
return 1 //It hit the flamethrower, not them
@@ -39,14 +39,14 @@
return
/obj/effect/spresent/relaymove(mob/user as mob)
if (user.stat)
if(user.stat)
return
to_chat(user, "\blue You cant move.")
/obj/effect/spresent/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
if (!istype(W, /obj/item/weapon/wirecutters))
if(!istype(W, /obj/item/weapon/wirecutters))
to_chat(user, "\blue I need wirecutters for that.")
return
@@ -54,7 +54,7 @@
for(var/mob/M in src) //Should only be one but whatever.
M.loc = src.loc
if (M.client)
if(M.client)
M.client.eye = M.client.mob
M.client.perspective = MOB_PERSPECTIVE
@@ -4,7 +4,7 @@ var/turf/T
/obj/item/weapon/grenade/bananade
name = "bananade"
desc = "A yellow grenade."
w_class = 2.0
w_class = 2
icon = 'icons/obj/grenade.dmi'
icon_state = "banana"
item_state = "flashbang"
@@ -102,6 +102,11 @@
spawn(det_time)
prime()
/obj/item/weapon/grenade/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type)
if(damage && attack_type == PROJECTILE_ATTACK && prob(15))
owner.visible_message("<span class='danger'>[attack_text] hits [owner]'s [src], setting it off! What a shot!</span>")
prime()
return 1 //It hit the grenade, not them
/obj/item/weapon/grenade/chem_grenade/attackby(obj/item/I, mob/user, params)
if(istype(I,/obj/item/weapon/hand_labeler))
@@ -3,7 +3,7 @@
desc = "HONK! brand Bananas. In a special applicator for rapid slipping of wide areas."
icon_state = "banana"
item_state = "flashbang"
w_class = 2.0
w_class = 2
force = 2.0
var/stage = 0
var/state = 0
@@ -55,7 +55,7 @@
icon = 'icons/obj/items.dmi'
icon_state = "banana_peel"
item_state = "banana_peel"
w_class = 1.0
w_class = 1
throwforce = 0
throw_speed = 4
throw_range = 20
@@ -51,13 +51,12 @@
if(!ear_safety)
M.Stun(max(10/distance, 3))
M.Weaken(max(10/distance, 3))
M.ear_damage += rand(0, 5)
M.ear_deaf = max(M.ear_deaf,15)
if (M.ear_damage >= 15)
M.setEarDamage(M.ear_damage + rand(0, 5), max(M.ear_deaf,15))
if(M.ear_damage >= 15)
to_chat(M, "<span class='warning'>Your ears start to ring badly!</span>")
if(prob(M.ear_damage - 10 + 5))
to_chat(M, "<span class='warning'>You can't hear anything!</span>")
M.disabilities |= DEAF
else
if (M.ear_damage >= 5)
if(M.ear_damage >= 5)
to_chat(M, "<span class='warning'>Your ears start to ring!</span>")
@@ -17,7 +17,7 @@
/obj/item/weapon/grenade/iedcasing
name = "improvised explosive assembly"
desc = "An igniter stuffed into an aluminum shell."
w_class = 2.0
w_class = 2
icon = 'icons/obj/grenade.dmi'
icon_state = "improvised_grenade"
item_state = "flashbang"
@@ -67,7 +67,7 @@
/obj/item/weapon/grenade/iedcasing/filled
name = "improvised firebomb"
desc = "A weak, improvised incendiary device."
w_class = 2.0
w_class = 2
icon = 'icons/obj/grenade.dmi'
icon_state = "improvised_grenade"
item_state = "flashbang"
@@ -94,6 +94,7 @@
range = pick(2,2,2,3,3,3,4)
/obj/item/weapon/grenade/iedcasing/CheckParts()
..()
var/obj/item/weapon/reagent_containers/food/drinks/cans/can = locate() in contents
if(can)
underlays += can
@@ -1,7 +1,7 @@
/obj/item/weapon/grenade
name = "grenade"
desc = "A hand held grenade, with an adjustable timer."
w_class = 2.0
w_class = 2
icon = 'icons/obj/grenade.dmi'
icon_state = "grenade"
item_state = "flashbang"
@@ -28,8 +28,8 @@
/*/obj/item/weapon/grenade/afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
if (istype(target, /obj/item/weapon/storage)) return ..() // Trying to put it in a full container
if (istype(target, /obj/item/weapon/gun/grenadelauncher)) return ..()
if(istype(target, /obj/item/weapon/storage)) return ..() // Trying to put it in a full container
if(istype(target, /obj/item/weapon/gun/grenadelauncher)) return ..()
if((user.get_active_hand() == src) && (!active) && (clown_check(user)) && target.loc != src.loc)
to_chat(user, "<span class='warning'>You prime the [name]! [det_time/10] seconds!</span>")
active = 1
@@ -83,16 +83,16 @@
/obj/item/weapon/grenade/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/screwdriver))
switch(det_time)
if ("1")
if("1")
det_time = 10
to_chat(user, "<span class='notice'>You set the [name] for 1 second detonation time.</span>")
if ("10")
if("10")
det_time = 30
to_chat(user, "<span class='notice'>You set the [name] for 3 second detonation time.</span>")
if ("30")
if("30")
det_time = 50
to_chat(user, "<span class='notice'>You set the [name] for 5 second detonation time.</span>")
if ("50")
if("50")
det_time = 1
to_chat(user, "<span class='notice'>You set the [name] for instant detonation.</span>")
add_fingerprint(user)
+16 -2
View File
@@ -7,7 +7,7 @@
flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 5
w_class = 2.0
w_class = 2
throw_speed = 2
throw_range = 5
materials = list(MAT_METAL=500)
@@ -20,10 +20,19 @@
if(!user.IsAdvancedToolUser())
return
if(!istype(C))
return
if(CLUMSY in user.mutations && prob(50))
to_chat(user, "<span class='warning'>Uh... how do those things work?!</span>")
apply_cuffs(user,user)
if(ishuman(C))
var/mob/living/carbon/human/H = C
if(!(H.get_organ("l_hand") || H.get_organ("r_hand")))
to_chat(user, "<span class='warning'>How do you suggest handcuffing someone with no hands?</span>")
return
if(!C.handcuffed)
C.visible_message("<span class='danger'>[user] is trying to put [src.name] on [C]!</span>", \
"<span class='userdanger'>[user] is trying to put [src.name] on [C]!</span>")
@@ -97,7 +106,7 @@
..()
if(istype(I, /obj/item/stack/rods))
var/obj/item/stack/rods/R = I
if (R.use(1))
if(R.use(1))
var/obj/item/weapon/wirerod/W = new /obj/item/weapon/wirerod
if(!remove_item_from_storage(user))
user.unEquip(src)
@@ -117,6 +126,11 @@
/obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg/attack(mob/living/carbon/C, mob/user)
if(isrobot(user))
if(ishuman(C))
var/mob/living/carbon/human/H = C
if(!(H.get_organ("l_hand") || H.get_organ("r_hand")))
to_chat(user, "<span class='warning'>How do you suggest handcuffing someone with no hands?</span>")
return
if(!C.handcuffed)
playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
C.visible_message("<span class='danger'>[user] is trying to put zipties on [C]!</span>", \
@@ -76,9 +76,7 @@
w_class = 5
force = 5
slot_flags = SLOT_BACK
/obj/item/weapon/nullrod/staff/IsShield()
return 1
block_chance = 50
/obj/item/weapon/nullrod/staff/blue
name = "blue holy staff"
@@ -92,16 +90,16 @@
desc = "A weapon fit for a crusade!"
w_class = 4
slot_flags = SLOT_BACK|SLOT_BELT
block_chance = 30
sharp = 1
edge = 1
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/weapon/nullrod/claymore/IsShield()
if(prob(30))
return 1
else
return 0
/obj/item/weapon/nullrod/claymore/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type)
if(attack_type == PROJECTILE_ATTACK)
final_block_chance = 0 //Don't bring a sword to a gunfight
return ..()
/obj/item/weapon/nullrod/claymore/darkblade
icon_state = "cultblade"
@@ -333,6 +331,7 @@
desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, now used to harass the clown."
w_class = 4
force = 15
block_chance = 40
slot_flags = SLOT_BACK
sharp = 0
edge = 0
@@ -342,12 +341,6 @@
icon_state = "bostaff0"
item_state = "bostaff0"
/obj/item/weapon/nullrod/claymore/bostaff/IsShield()
if(prob(40))
return 1
else
return 0
/obj/item/weapon/nullrod/tribal_knife
icon_state = "crysknife"
item_state = "crysknife"
@@ -2,10 +2,10 @@
name = "implant"
icon = 'icons/obj/implants.dmi'
icon_state = "generic" //Shows up as the action button icon
action_button_custom_type = /datum/action/item_action/hands_free
origin_tech = "materials=2;biotech=3;programming=2"
var/activated = 1 //1 for implant types that can be activated, 0 for ones that are "always on" like loyalty implants
actions_types = list(/datum/action/item_action/hands_free/activate)
var/activated = 1 //1 for implant types that can be activated, 0 for ones that are "always on" like mindshield implants
var/implanted = null
var/mob/living/imp_in = null
item_color = "b"
@@ -41,11 +41,13 @@
return 0
if(activated)
action_button_name = "Activate [src.name]"
src.loc = source
imp_in = source
implanted = 1
if(activated)
for(var/X in actions)
var/datum/action/A = X
A.Grant(source)
if(istype(source, /mob/living/carbon/human))
var/mob/living/carbon/human/H = source
H.sec_hud_set_implants()
@@ -60,6 +62,10 @@
imp_in = null
implanted = 0
for(var/X in actions)
var/datum/action/A = X
A.Grant(source)
if(istype(source, /mob/living/carbon/human))
var/mob/living/carbon/human/H = source
H.sec_hud_set_implants()
@@ -76,6 +82,6 @@
return "No information available"
/obj/item/weapon/implant/dropped(mob/user)
..()
. = 1
qdel(src)
return .
@@ -41,7 +41,7 @@
if(!cause || !imp_in) return 0
var/mob/living/carbon/R = imp_in
var/injectamount = null
if (cause == "action_button")
if(cause == "action_button")
injectamount = reagents.total_volume
else
injectamount = cause
@@ -58,4 +58,4 @@
/obj/item/weapon/implantcase/chem/New()
imp = new /obj/item/weapon/implant/chem(src)
..()
..()
@@ -33,7 +33,7 @@
/obj/item/weapon/implant/death_alarm/activate(var/cause)
var/mob/M = imp_in
var/area/t = get_area(M)
switch (cause)
switch(cause)
if("death")
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) )
@@ -43,7 +43,7 @@
a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm")
qdel(a)
qdel(src)
if ("emp")
if("emp")
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
var/name = prob(50) ? t.name : pick(teleportlocs)
a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm")
@@ -68,4 +68,4 @@
if(..())
processing_objects.Remove(src)
return 1
return 0
return 0
@@ -125,4 +125,46 @@
/obj/item/weapon/implanter/explosive_macro/New()
imp = new /obj/item/weapon/implant/explosive/macro(src)
..()
// Dust implant, for CC officers. Prevents gear theft if they die.
/obj/item/weapon/implant/dust
name = "duster implant"
desc = "An alarm which monitors host vital signs, transmitting a radio message and dusting the corpse on death."
/obj/item/weapon/implant/dust/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Ultraviolet Corp XX-13 Security Implant<BR>
<b>Life:</b> Activates upon death.<BR>
<b>Important Notes:</b> Vaporizes organic matter<BR>
<HR>
<b>Implant Details:</b><BR>
<b>Function:</b> Contains a compact, electrically activated heat source that turns its host to ash upon activation, or their death. <BR>
<b>Special Features:</b> Vaporizes<BR>
"}
return dat
/obj/item/weapon/implant/dust/trigger(emote, mob/source)
if(emote == "deathgasp")
activate("death")
/obj/item/weapon/implant/dust/activate(cause)
if(!cause || !imp_in || cause == "emp")
return 0
if(cause == "action_button" && alert(imp_in, "Are you sure you want to activate your dusting implant? This will turn you to ash!", "Dusting Confirmation", "Yes", "No") != "Yes")
return 0
to_chat(imp_in, "<span class='notice'>Your dusting implant activates!</span>")
imp_in.visible_message("<span class = 'warning'>[imp_in] burns up in a flash!</span>")
imp_in.dust()
/obj/item/weapon/implant/dust/emp_act(severity)
return
/obj/item/weapon/implanter/dust
name = "implanter (Dust-on-death)"
/obj/item/weapon/implanter/dust/New()
imp = new /obj/item/weapon/implant/dust(src)
..()
@@ -8,12 +8,13 @@
/obj/item/weapon/implant/freedom/activate()
if(uses == 0) return 0
if(uses != -1) uses--
uses--
to_chat(imp_in, "You feel a faint click.")
if(iscarbon(imp_in))
var/mob/living/carbon/C_imp_in = imp_in
C_imp_in.uncuff()
if(!uses)
qdel(src)
/obj/item/weapon/implant/freedom/get_data()
@@ -1,6 +1,6 @@
/obj/item/weapon/implant/loyalty
name = "loyalty implant"
desc = "Makes you loyal or such."
name = "mindshield implant"
desc = "Stops people messing with your mind."
origin_tech = "materials=2;biotech=4;programming=4"
activated = 0
@@ -8,7 +8,7 @@
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Nanotrasen Employee Management Implant<BR>
<b>Life:</b> Ten years.<BR>
<b>Important Notes:</b> Personnel injected with this device tend to be much more loyal to the company.<BR>
<b>Important Notes:</b> Personnel injected with this device can better resist mental compulsions.<BR>
<HR>
<b>Implant Details:</b><BR>
<b>Function:</b> Contains a small pod of nanobots that manipulate the host's mental functions.<BR>
@@ -29,7 +29,7 @@
if(target.mind in ticker.mode.cult)
to_chat(target, "<span class='warning'>You feel the corporate tendrils of Nanotrasen try to invade your mind!</span>")
else
to_chat(target, "<span class='notice'>You feel a surge of loyalty towards Nanotrasen.</span>")
to_chat(target, "<span class='notice'>Your mind feels hardened - more resistant to brainwashing.</span>")
return 1
return 0
@@ -42,7 +42,7 @@
/obj/item/weapon/implanter/loyalty
name = "implanter (loyalty)"
name = "implanter (mindshield)"
/obj/item/weapon/implanter/loyalty/New()
imp = new /obj/item/weapon/implant/loyalty(src)
@@ -51,8 +51,8 @@
/obj/item/weapon/implantcase/loyalty
name = "implant case - 'Loyalty'"
desc = "A glass case containing a loyalty implant."
name = "implant case - 'mindshield'"
desc = "A glass case containing a mindshield implant."
/obj/item/weapon/implantcase/loyalty/New()
imp = new /obj/item/weapon/implant/loyalty(src)
@@ -33,7 +33,6 @@
return dat
/obj/item/weapon/implant/adrenalin/activate()
if(uses < 1) return 0
uses--
to_chat(imp_in, "<span class='notice'>You feel a sudden surge of energy!</span>")
imp_in.SetStunned(0)
@@ -46,6 +45,8 @@
imp_in.reagents.add_reagent("synaptizine", 10)
imp_in.reagents.add_reagent("omnizine", 10)
imp_in.reagents.add_reagent("stimulative_agent", 10)
if(!uses)
qdel(src)
/obj/item/weapon/implant/emp
@@ -56,9 +57,10 @@
uses = 2
/obj/item/weapon/implant/emp/activate()
if (src.uses < 1) return 0
src.uses--
uses--
empulse(imp_in, 3, 5)
if(!uses)
qdel(src)
/obj/item/weapon/implant/cortical
name = "cortical stack"
@@ -1,8 +1,8 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/obj/machinery/implantchair
name = "loyalty implanter"
desc = "Used to implant occupants with loyalty implants."
name = "mindshield implanter"
desc = "Used to implant occupants with mindshield implants."
icon = 'icons/obj/machines/implantchair.dmi'
icon_state = "implantchair"
density = 1
@@ -94,7 +94,7 @@
return
if(M == occupant) // so that the guy inside can't eject himself -Agouri
return
if (src.occupant.client)
if(src.occupant.client)
src.occupant.client.eye = src.occupant.client.mob
src.occupant.client.perspective = MOB_PERSPECTIVE
src.occupant.loc = src.loc
@@ -125,7 +125,7 @@
/obj/machinery/implantchair/implant(mob/M)
if (!istype(M, /mob/living/carbon))
if(!istype(M, /mob/living/carbon))
return
if(!implant_list.len) return
for(var/obj/item/weapon/implant/loyalty/imp in implant_list)
@@ -32,7 +32,7 @@
if(T && (M == user || do_after(user, 50, target = M)))
if(user && M && (get_turf(M) == T) && src && imp)
if(imp.implant(M, user))
if (M == user)
if(M == user)
to_chat(user, "<span class='notice'>You implant yourself.</span>")
else
M.visible_message("[user] has implanted [M].", "<span class='notice'>[user] implants you.</span>")
@@ -58,8 +58,6 @@
update_icon()
/obj/item/weapon/implanter/adrenalin
name = "implanter (adrenalin)"
@@ -82,3 +80,9 @@
imp = new /obj/item/weapon/implant/traitor(src)
..()
/obj/item/weapon/implanter/death_alarm
name = "implanter (Death Alarm)"
/obj/item/weapon/implanter/death_alarm/New()
imp = new /obj/item/weapon/implant/death_alarm(src)
..()
@@ -55,7 +55,7 @@
set name = "Remove Implant"
set src in usr
if (usr.stat || usr.restrained())
if(usr.stat || usr.restrained())
return
dropcase(usr)
@@ -70,7 +70,7 @@
add_fingerprint(user)
user.set_machine(src)
var/dat = "<B>Implant Mini-Computer:</B><HR>"
if (case)
if(case)
if(case.imp)
if(istype(case.imp, /obj/item/weapon/implant))
dat += "<A href='byond://?src=\ref[src];removecase=1'>Remove Case</A><HR>"
@@ -96,7 +96,7 @@
return 1
var/mob/living/user = usr
if (href_list["tracking_id"])
if(href_list["tracking_id"])
if(case && case.imp)
var/obj/item/weapon/implant/tracking/T = case.imp
T.id += text2num(href_list["tracking_id"])
+5 -5
View File
@@ -18,7 +18,7 @@
*/
/obj/item/weapon/kitchen/utensil
force = 5.0
w_class = 1.0
w_class = 1
throwforce = 0.0
throw_speed = 3
throw_range = 5
@@ -30,7 +30,7 @@
var/max_contents = 1
/obj/item/weapon/kitchen/utensil/New()
if (prob(60))
if(prob(60))
src.pixel_y = rand(0, 4)
create_reagents(5)
@@ -48,7 +48,7 @@
else
return ..()
if (contents.len)
if(contents.len)
var/obj/item/weapon/reagent_containers/food/snacks/toEat = contents[1]
if(istype(toEat))
if(M.eat(toEat, user))
@@ -164,7 +164,7 @@
throwforce = 10.0
throw_speed = 3
throw_range = 7
w_class = 3.0
w_class = 3
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
/* Trays moved to /obj/item/weapon/storage/bag */
@@ -181,7 +181,7 @@
throwforce = 5
throw_speed = 3
throw_range = 3
w_class = 2.0
w_class = 2
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed")
/obj/item/weapon/kitchen/mould/bear
+5 -5
View File
@@ -6,7 +6,7 @@
icon_state = "handcuff"
flags = CONDUCT
throwforce = 0
w_class = 3.0
w_class = 3
origin_tech = "materials=1"
slowdown = 7
breakouttime = 300 //Deciseconds = 30s = 0.5 minute
@@ -169,9 +169,9 @@
H.Stun(2)
H.drop_item(src)
return
if (!thrown_from && usr) //if something hasn't set it already (like a mech does when it launches)
if(!thrown_from && usr) //if something hasn't set it already (like a mech does when it launches)
thrown_from = usr //then the user must have thrown it
if (!istype(thrown_from, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bolas))
if(!istype(thrown_from, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bolas))
playsound(src, throw_sound, 20, 1) //because mechs play the sound anyways
var/turf/target = get_turf(A)
var/atom/movable/adjtarget = new /atom/movable
@@ -179,12 +179,12 @@
var/yadjust = 0
var/scaler = 0 //used to changed the normalised vector to the proper size
scaler = throw_range / max(abs(target.x - src.x), abs(target.y - src.y)) //whichever is larger magnitude is what we normalise to
if (target.x - src.x != 0) //just to avoid fucking with math for no reason
if(target.x - src.x != 0) //just to avoid fucking with math for no reason
xadjust = round((target.x - src.x) * scaler) //normalised vector is now scaled up to throw_range
adjtarget.x = src.x + xadjust //the new target at max range
else
adjtarget.x = src.x
if (target.y - src.y != 0)
if(target.y - src.y != 0)
yadjust = round((target.y - src.y) * scaler)
adjtarget.y = src.y + yadjust
else
+1 -1
View File
@@ -147,7 +147,7 @@
icon_state = "match_unlit"
var/lit = 0
var/smoketime = 5
w_class = 1.0
w_class = 1
origin_tech = "materials=1"
attack_verb = list("burnt", "singed")
+84 -25
View File
@@ -809,7 +809,7 @@
</html>
"}
/obj/item/weapon/book/manual/security_space_law/black
name = "Space Law - Limited Edition"
desc = "A leather-bound, immaculately-written copy of JUSTICE."
@@ -1184,6 +1184,65 @@
</html>
"}
/obj/item/weapon/book/manual/faxes
name = "A Guide to Faxes"
desc = "A NanoTrasen-approved guide to writing faxes"
icon_state = "book6"
author = "NanoTrasen"
title = "A Guide to Faxes"
dat = {"
<html>
<head>
<style>
h1 {font-size: 15px; margin: 15px 0px 5px;}
li {margin: 2px 0px 2px 15px;}
ul {list-style: none; margin: 5px; padding: 0px;}
ol {margin: 5px; padding: 0px 15px;}
</style>
</head>
<body>
<font face="Verdana" color=black>
<h1><a name="Contents">Contents</a></h1>
<ol>
<li><a href="#what">What's a Fax?</a></li>
<li><a href="#when">When to Fax?</a></li>
<li><a href="#how">How to Fax?</a></li>
</ol>
<br><BR>
<h1><a name="what"><U><B>What's a Fax?</B></U></a></h1><BR>
<li>Faxes are your main method of communicating with the NAS Trurl, better known as Central Command.</li>
<li>Faxes allow personnel on the station to maintain open lines of communication with the NAS Trurl, allowing for vital information to flow both ways.</li>
<li>Being written communications, proper grammar, syntax and typography is required, in addition to a signature and, if applicable, a stamp. Failure to sign faxes will lead to an automatic rejection.</li>
<li>We at NanoTrasen provide Fax Machines to every Head of Staff, in addition to the Magistrate, NanoTrasen Representative, and Internal Affairs Agents.</li>
<li>This means that we trust the recipients of these fax machines to only use them in the proper circumstances (see <B>When to Fax?</B>).</li>
<h1><a name="when"><B>When to Fax?</B></a></h1><BR>
<li>While it is up to the discretion of each individual person to decide when to fax Central Command, there are some simple guidelines on when to do this.</li>
<li>Firstly, any situation that can reasonably be solved on-site, <I>should</I> be handled on-site. Knowledge of Standard Operating Procedure is <B>mandatory</B> for everyone with access to a fax machine.</li>
<li>Resolving issues on-site not only leads to more expedient problem-solving, it also frees up company resources and provides valuable work experience for all parties involved.</li>
<li>This means that you should work with the Heads of Staff concerning personnel and workplace issues, and attempt to resolve situations with them. If, for whatever reason, the relevent Head of Staff is not available or receptive, consider speaking with the Captain and/or NanoTrasen Representative.</li>
<li>If, for whatever reason, these issues cannot be solved on-site, either due to incompetence or just plain refusal to cooperate, faxing Central Command becomes a viable option.</li>
<li>Secondly, station status reports should be sent occasionally, but never at the start of the shift. Remember, we assign personnel to the station. We do not need a repeat of what we just signed off on.</li>
<li>Thirdly, staff/departmental evaluations are always welcome, especially in cases of noticeable (in)competence. Just as a brilliant coworker can be rewarded, an incompetent one can be punished.</li>
<li>Fourthly, do not issue faxes asking for sentences. You have an entire Security department and an associated Detective, not to mention on-site Space Law manuals.</li>
<li>Lastly, please pay attention to context. If the station is facing a massive emergency, such as a Class 7-10 Blob Organism, most, if not all, non-relevant faxes will be duly ignored.</li>
<h1><a name="how"><B>How to Fax?</B></a></h1><BR>
<li>Sending a fax is simple. Simply insert your ID into the fax machine, then log in.</li>
<li>Once logged in, insert a piece of paper and select the destination from the provided list. Remember, you can rename your fax from within the fax machine's menu.</li>
<li>You can send faxes to any other fax machine on the station, which can be a very useful tool when you need to issue broad communications to all of the Heads of Staff.</li>
<li>To send a fax to Central Command, simply select the correct destination, and send the fax. Keep in mind, the communication arrays need to recharge after sending a fax to Central Command, so make sure you sent everything you need.</li>
<li>Lastly, paper bundles can also be faxed as a single item, so feel free to bundle up all relevant documentation and send it in at once.</li>
</ol><BR>
</body>
</html>
"}
/obj/item/weapon/book/manual/sop_science
name = "Science Standard Operating Procedures"
desc = "A set of guidelines aiming at the safe conduct of all scientific activities."
@@ -1483,7 +1542,7 @@
<li>Attending Surgeon is to keep the Operating Room in an hygienic condition at all times, <b>again</b>, to prevent infection;</li>
<li>Attending Surgeon is to wash his/her hands between different patients, again, to prevent infection;</li>
<li>Attending Surgeon is to use either Anesthetics or Sedatives (for species that cannot breathe Anesthetics) during Surgical Procedures. Exception is made if the patient requests otherwise;</li>
<li>Attending Surgeon is not to remove any legal Implants (such as Loyalty or Tracking Implants) from the patient, unless requested by Security;</li>
<li>Attending Surgeon is not to remove any legal Implants (such as Mindshield or Tracking Implants) from the patient, unless requested by Security;</li>
<li>If a patient requests that a lost limb be replaced with an organic, rather than mechanical, substitute, said limb must be harvested from a compatible humanized Test Animal (such as Monkeys for Humans, or Farwas for Tajarans). Exception is made if the patient deliberately requests otherwise;</li>
<li>Attending Surgeon is not to bring any of the Surgical Tools outside of their respective Operating Room, and must in fact ensure the Operating Room maintains its proper inventory. This includes ensuring that the Anesthetics Equipment be kept inside the OR</li>
</ol>
@@ -2141,7 +2200,7 @@
<li>Prisoner must then be borged, fired into space via mass driver, cremated, or placed in the morgue with a DNR Notice, at the discretion of the Magistrate, Captain or Head of Security.</li>
</ol>
<br><br>
<h1><a name="elec"><B>Execution: Lethal Injection</B></a></h1><BR>
<ol>
<li>Prisoner must be bucklecuffed to the electric chair or bed.</li>
@@ -2150,7 +2209,7 @@
<li>Prisoner must then be borged, fired into space via mass driver, cremated, or placed in the morgue with a DNR Notice, at the discretion of the Magistrate, Captain or Head of Security.</li>
</ol>
<br><br>
<h1><a name="elec"><B>Execution: Firing Squad</B></a></h1><BR>
<ol>
<li>Prisoner must be brought to the Firing Range.</li>
@@ -2164,7 +2223,7 @@
</html>
"}
/obj/item/weapon/book/manual/sop_general
name = "Standard Operating Procedures"
desc = "A set of guidelines aiming at the safe conduct of all station activities."
@@ -2212,7 +2271,7 @@
<h1><a name="green"><B>Code Green</B></a></h1><BR>
<i>All clear.</i><br>
Default operating level. No immediate or clear threat to the station. All departments may carry out work as normal.
Default operating level. No immediate or clear threat to the station. All departments may carry out work as normal.
This alert level can be set at the Communications Console with a Captain level ID.<br>
<i>All threats to the station have passed. All weapons need to be holstered and privacy laws are once again fully enforced.</i><br>
<br>
@@ -2230,10 +2289,10 @@
Crew:<br>
<ul>
<li>Crew members may freely walk in the hallways</li>
<li>Suit sensors are not mandatory.</li>
<li>Suit sensors are not mandatory.</li>
</ul>
<br><br>
<h1><a name="blue"><B>Code Blue</B></a></h1><BR>
<i>There is a suspected threat.</i><br>
Raised alert level. Suspected threat to the station. Issued by Central Command, the Captain, or a Head of Staff vote. This alert level can be set at the Communications Console with a Captain level ID.<br>
@@ -2255,10 +2314,10 @@
Crew:<br>
<ul>
<li>Employees are recommended to comply with all security requests.</li>
<li>Suit sensors are mandatory, but coordinate positions are not required.</li>
<li>Suit sensors are mandatory, but coordinate positions are not required.</li>
</ul>
<br><br>
<h1><a name="red"><B>Code Red</B></a></h1><BR>
<i>There is a confirmed threat.</i><br>
Maximum alert level. Confirmed threat to the station or severe damage. Issued by Central Command, the Captain, or a Head of Staff vote. This alert level can only be set via the Keycard Authentication Devices in each Heads of Staff office and by swiping two Heads of Staff ID cards simultaneously.<br>
@@ -2279,12 +2338,12 @@
Crew:<br>
<ul>
<li>Suit sensors and coordinate positions are mandatory.</li>
<li>All crew members must remain in their departments.</li>
<li>Employees are required to comply with all security requests.</li>
<li>Emergency Response Team may be authorised. All crew are to comply with their direction.</li>
<li>All crew members must remain in their departments.</li>
<li>Employees are required to comply with all security requests.</li>
<li>Emergency Response Team may be authorised. All crew are to comply with their direction.</li>
</ul>
<br><br>
<h1><a name="gamma"><B>Code Gamma</B></a></h1><BR>
<i>Extremely hostile threat onboard the station.</i><br>
GAMMA Security level has been set by Centcom.<br>
@@ -2306,21 +2365,21 @@
Crew:<br>
<ul>
<li>Employees are required to comply with all security requests.</li>
<li>All civilians are to seek their nearest head for transportation to a safe location.</li>
<li>All civilians are to seek their nearest head for transportation to a safe location.</li>
<li>All personnel are required to defend the station and help security with dealing with the threat. All crew must follow direct orders from Security Personell or Head of Staff.</li>
</ul>
<br><br>
<h1><a name="hiring"><B>Hiring Policies</B></a></h1><BR>
<ul>
<li>Authorisation from the relevant Department Head is required to be hired into a Department. If none exists, the HoP or Captain's authorisation is required.</li>
<li>Promotion to a Department Head requires authorisation from the Captain or Acting Captain.</li>
<li>CentComm Authorisation is required for hiring the following: Blueshield, Security Pod Pilot, Magistrate, Brig Physician, Nanotrasen Representative, Mechanic.</li>
<li>If no Department Head has yet been sent, any promotion to said position is on a temporary basis until one arrives. </li>
<li>All Security personnel are to be loyalty implanted.</li>
<li>All Security personnel are to be mindshield implanted.</li>
</ul>
<br><br>
<h1><a name="firing"><B>Firing Policies</B></a></h1><BR>
<ul>
<li>If a crew is to be dismissed, their ID is to be terminated.</li>
@@ -2329,7 +2388,7 @@
<li>Demotion or Dismissal must have due cause.</li>
</ul>
<br><br>
<h1><a name="causes"><B>Causes for Demotion and Dismissal</B></a></h1><BR>
<ul>
<li>A medium or higher crime may be grounds for dismissal, at the department head's discretion.</li>
@@ -2344,11 +2403,11 @@
<li>Failure or refusal to hand in any items, ID, etc, of their previous job, is to be considered theft.</li>
</ul>
<br><br>
<h1><a name="sit"><B>Situational SoP</B></a></h1><BR>
The following situations have specific SoP. Failure to follow these may result in demotion/dismissal, or detaining by security if failure to follow them presents a significant risk.
<br><br>
<h1><a name="causes"><B>Evacuation</B></a></h1><BR>
<ul>
<li>All personnel are required to assist with evacuation. All crew must be evacuated, regardless of conscious state.</li>
@@ -2359,7 +2418,7 @@
<li>Shortening time to shuttle launch may be authorised if a clear threat to life, limb, or shuttle integrity is present.</li>
</ul>
<br><br>
<h1><a name="viral"><b>Viral Outbreak Procedures</b></a></h1><BR>
<i><b>Definition: </b>A Viral Outbreak is defined as a situation where a Viral Pathogen has infected a significant portion of the crew (>10%)</i>
<ol>
@@ -2376,7 +2435,7 @@
<li>Once the Viral Outbreak is over, all personnel are to return to regular duties.</li>
</ol>
<br><br>
<h1><a name="evac"><B>Evacuation</B></a></h1><BR>
<ul>
<li>Immediate evacuation of all untrained personnel.</li>
@@ -2384,7 +2443,7 @@
<li>Atmospheric Technicians are to remove hazard.</li>
</ul>
<br><br>
<h1><a name="meteor"><B>Meteor Storm</B></a></h1><BR>
<ul>
<li>All crew to move to central parts of the station.</li>
@@ -2392,7 +2451,7 @@
<li>Personel that are doing EVA maintenance should seek shelter immediately.</li>
</ul>
<br><br>
<h1><a name="sing"><B>Singularity Containment Failure</B></a></h1><BR>
<ul>
<li>Observation of Singularity movement.</li>
@@ -19,7 +19,7 @@
to_chat(user, "<span class='warning'>You accidentally cut yourself with [src], like a doofus!</span>")
user.take_organ_damage(5,5)
active = !active
if (active)
if(active)
force = force_on
throwforce = throwforce_on
hitsound = 'sound/weapons/blade1.ogg'
@@ -62,7 +62,8 @@
w_class = 3
w_class_on = 5
hitsound = "swing_hit"
flags = CONDUCT | NOSHIELD
flags = CONDUCT
armour_penetration = 100
origin_tech = "combat=3"
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
attack_verb_on = list()
@@ -82,8 +83,9 @@
throw_speed = 3
throw_range = 5
hitsound = "swing_hit"
flags = NOSHIELD
armour_penetration = 35
origin_tech = "magnets=3;syndicate=4"
block_chance = 50
sharp = 1
edge = 1
var/hacked = 0
@@ -93,9 +95,9 @@
if(item_color == null)
item_color = pick("red", "blue", "green", "purple")
/obj/item/weapon/melee/energy/sword/IsShield()
/obj/item/weapon/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
if(active)
return 1
return ..()
return 0
/obj/item/weapon/melee/energy/sword/cyborg
@@ -131,7 +133,7 @@
..()
item_color = null
/obj/item/weapon/melee/energy/sword/cyborg/saw/IsShield()
/obj/item/weapon/melee/energy/sword/cyborg/saw/hit_reaction()
return 0
/obj/item/weapon/melee/energy/sword/saber
@@ -204,7 +206,7 @@
throw_speed = 3
throw_range = 1
w_class = 4//So you can't hide it in your pocket or some such.
flags = NOSHIELD
armour_penetration = 50
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
var/datum/effect/system/spark_spread/spark_system
@@ -215,6 +217,7 @@
spark_system.attach(src)
/obj/item/weapon/melee/energy/blade/dropped()
..()
qdel(src)
/obj/item/weapon/melee/energy/blade/attack_self(mob/user)
+4 -4
View File
@@ -30,7 +30,7 @@
flags = CONDUCT
force = 5.0
throwforce = 7.0
w_class = 2.0
w_class = 2
materials = list(MAT_METAL=50)
attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed")
@@ -40,7 +40,7 @@
icon = 'icons/obj/items.dmi'
icon_state = "c_tube"
throwforce = 1
w_class = 1.0
w_class = 1
throw_speed = 4
throw_range = 5
@@ -62,7 +62,7 @@
var/data = ""
var/base_url = "http://svn.slurm.us/public/spacestation13/misc/game_kit"
item_state = "sheet-metal"
w_class = 5.0
w_class = 5
*/
/obj/item/weapon/gift
@@ -73,7 +73,7 @@
var/size = 3.0
var/obj/item/gift = null
item_state = "gift"
w_class = 4.0
w_class = 4
/obj/item/weapon/kidanglobe
name = "Kidan homeworld globe"
+13 -4
View File
@@ -9,14 +9,13 @@
throwforce = 5.0
throw_speed = 3
throw_range = 7
w_class = 3.0
w_class = 3
attack_verb = list("mopped", "bashed", "bludgeoned", "whacked")
var/mopping = 0
var/mopcount = 0
var/mopcap = 5
var/mopspeed = 30
/obj/item/weapon/mop/New()
create_reagents(mopcap)
janitorial_equipment += src
@@ -34,7 +33,6 @@
reagents.reaction(A, TOUCH, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly.
reagents.remove_any(1) //reaction() doesn't use up the reagents
/obj/item/weapon/mop/afterattack(atom/A, mob/user, proximity)
if(!proximity) return
@@ -80,4 +78,15 @@
force = 6
throwforce = 8
throw_range = 4
mopspeed = 20
mopspeed = 20
/obj/item/weapon/mop/advanced/cyborg
mopcap = 40
/obj/item/weapon/mop/advanced/cyborg/New()
..()
reagents.add_reagent("water", mopcap)
/obj/item/weapon/mop/advanced/cyborg/examine(mob/user)
..(user)
to_chat(user, "<span class='notice'>The mop's water tank has [round(reagents.get_reagent_amount("water"))] units of water left.</span>")
+3 -3
View File
@@ -9,7 +9,7 @@ var/global/list/cached_icons = list()
icon_state = "paint_neutral"
item_state = "paintcan"
materials = list(MAT_METAL=200)
w_class = 3.0
w_class = 3
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(10,20,30,50,70)
volume = 70
@@ -73,7 +73,7 @@ var/global/list/cached_icons = list()
icon_state = "paint_neutral"
color = "FFFFFF"
item_state = "paintcan"
w_class = 3.0
w_class = 3
/obj/item/weapon/paint/red
name = "Red paint"
@@ -117,7 +117,7 @@ var/global/list/cached_icons = list()
attack_self(mob/user as mob)
var/t1 = input(user, "Please select a color:", "Locking Computer", null) in list( "red", "blue", "green", "yellow", "black", "white")
if ((user.get_active_hand() != src || user.stat || user.restrained()))
if((user.get_active_hand() != src || user.stat || user.restrained()))
return
switch(t1)
if("red")
@@ -24,9 +24,9 @@
return
for(var/obj/item/I in loadedItems)
spawn(0)
to_chat(user, "<span class='info'>\icon [I] It has \the [I] loaded.</span>")
to_chat(user, "<span class='info'>[bicon(I)] It has \the [I] loaded.</span>")
if(tank)
to_chat(user, "<span class='notice'>\icon [tank] It has \the [tank] mounted onto it.</span>")
to_chat(user, "<span class='notice'>[bicon(tank)] It has \the [tank] mounted onto it.</span>")
/obj/item/weapon/pneumatic_cannon/attackby(obj/item/weapon/W, mob/user, params)
@@ -132,7 +132,7 @@
maxWeightClass = 7
gasPerThrow = 5
/datum/table_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but
/datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but
name = "Pneumatic Cannon"
result = /obj/item/weapon/pneumatic_cannon/ghetto
tools = list(/obj/item/weapon/weldingtool,
@@ -139,17 +139,17 @@
/obj/item/weapon/stock_parts/cell/pulse //200 pulse shots
name = "pulse rifle power cell"
maxcharge = 40000
maxcharge = 400000
rating = 3
chargerate = 1500
/obj/item/weapon/stock_parts/cell/pulse/carbine
name = "pulse carbine power cell"
maxcharge = 4000
maxcharge = 40000
/obj/item/weapon/stock_parts/cell/pulse/pistol
name = "pulse pistol power cell"
maxcharge = 1600
maxcharge = 16000
/obj/item/weapon/stock_parts/cell/ninja
name = "spider-clan power cell"
@@ -0,0 +1,100 @@
/obj/item/weapon/melee/powerfist
name = "power-fist"
desc = "A metal gauntlet with a piston-powered ram ontop for that extra 'ompfh' in your punch."
icon_state = "powerfist"
item_state = "powerfist"
flags = CONDUCT
attack_verb = list("whacked", "fisted", "power-punched")
force = 12
throwforce = 10
throw_range = 7
w_class = 3
origin_tech = "combat=5;powerstorage=3;syndicate=3"
var/click_delay = 1.5
var/fisto_setting = 1
var/gasperfist = 3
var/obj/item/weapon/tank/tank = null //Tank used for the gauntlet's piston-ram.
/obj/item/weapon/melee/powerfist/Destroy()
if(tank)
qdel(tank)
tank = null
return ..()
/obj/item/weapon/melee/powerfist/examine(mob/user)
..()
if(!in_range(user, src))
to_chat(user, "<span class='notice'>You'll need to get closer to see any more.</span>")
return
if(tank)
to_chat(user, "<span class='notice'>\icon [tank] It has \the [tank] mounted onto it.</span>")
/obj/item/weapon/melee/powerfist/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/tank))
if(!tank)
var/obj/item/weapon/tank/IT = W
if(IT.volume <= 3)
to_chat(user, "<span class='warning'>\The [IT] is too small for \the [src].</span>")
return
updateTank(W, 0, user)
else if(istype(W, /obj/item/weapon/wrench))
switch(fisto_setting)
if(1)
fisto_setting = 2
if(2)
fisto_setting = 3
if(3)
fisto_setting = 1
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
to_chat(user, "<span class='notice'>You tweak \the [src]'s piston valve to [fisto_setting].</span>")
else if(istype(W, /obj/item/weapon/screwdriver))
if(tank)
updateTank(tank, 1, user)
/obj/item/weapon/melee/powerfist/proc/updateTank(obj/item/weapon/tank/thetank, removing = 0, mob/living/carbon/human/user)
if(removing)
if(!tank)
to_chat(user, "<span class='notice'>\The [src] currently has no tank attached to it.</span>")
return
to_chat(user, "<span class='notice'>You detach \the [thetank] from \the [src].</span>")
tank.forceMove(get_turf(user))
user.put_in_hands(tank)
tank = null
if(!removing)
if(tank)
to_chat(user, "<span class='warning'>\The [src] already has a tank.</span>")
return
if(!user.unEquip(thetank))
return
to_chat(user, "<span class='notice'>You hook \the [thetank] up to \the [src].</span>")
tank = thetank
thetank.forceMove(src)
/obj/item/weapon/melee/powerfist/attack(mob/living/target, mob/living/user)
if(!tank)
to_chat(user, "<span class='warning'>\The [src] can't operate without a source of gas!</span>")
return
if(tank && !tank.air_contents.remove(gasperfist * fisto_setting))
to_chat(user, "<span class='warning'>\The [src]'s piston-ram lets out a weak hiss, it needs more gas!</span>")
playsound(loc, 'sound/effects/refill.ogg', 50, 1)
return
user.do_attack_animation(target)
target.apply_damage(force * fisto_setting, BRUTE)
target.visible_message("<span class='danger'>[user]'s powerfist lets out a loud hiss as they punch [target.name]!</span>", \
"<span class='userdanger'>You cry out in pain as [user]'s punch flings you backwards!</span>")
new/obj/effect/kinetic_blast(target.loc)
playsound(loc, 'sound/weapons/resonator_blast.ogg', 50, 1)
playsound(loc, 'sound/weapons/genhit2.ogg', 50, 1)
var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src)))
spawn(0)
target.throw_at(throw_target, 5 * fisto_setting, 0.2)
add_logs(target, user, "power fisted", src)
user.changeNext_move(CLICK_CD_MELEE * click_delay)
+1 -1
View File
@@ -118,7 +118,7 @@
H.losebreath += 10 //30 Oxy damage over time
H.apply_damage(18, BRUTE, "head", sharp =1, edge =1, used_weapon = "scissors")
var/turf/location = get_turf(H)
if (istype(location, /turf/simulated))
if(istype(location, /turf/simulated))
location.add_blood(H)
H.bloody_hands(H)
H.bloody_body(H)
+7 -7
View File
@@ -4,7 +4,7 @@
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll"
var/uses = 4.0
w_class = 2.0
w_class = 2
item_state = "paper"
throw_speed = 4
throw_range = 20
@@ -29,15 +29,15 @@
/obj/item/weapon/teleportation_scroll/Topic(href, href_list)
..()
if (usr.stat || usr.restrained() || src.loc != usr)
if(usr.stat || usr.restrained() || src.loc != usr)
return
var/mob/living/carbon/human/H = usr
if (!( istype(H, /mob/living/carbon/human)))
if(!( istype(H, /mob/living/carbon/human)))
return 1
if ((usr == src.loc || (in_range(src, usr) && istype(src.loc, /turf))))
if((usr == src.loc || (in_range(src, usr) && istype(src.loc, /turf))))
usr.set_machine(src)
if (href_list["spell_teleport"])
if (src.uses >= 1)
if(href_list["spell_teleport"])
if(src.uses >= 1)
teleportscroll(H)
attack_self(H)
return
@@ -49,7 +49,7 @@
A = input(user, "Area to jump to", "BOOYEA", A) in teleportlocs
var/area/thearea = teleportlocs[A]
if (user.stat || user.restrained())
if(user.stat || user.restrained())
return
if(!((user == loc || (in_range(src, user) && istype(src.loc, /turf)))))
return
+2 -2
View File
@@ -7,7 +7,7 @@
sharp = 1
edge = 1
desc = "Could probably be used as ... a throwing weapon?"
w_class = 1.0
w_class = 1
force = 5.0
throwforce = 10.0
item_state = "shard-glass"
@@ -53,7 +53,7 @@
/obj/item/weapon/shard/Crossed(AM as mob|obj)
if(isliving(AM))
var/mob/living/M = AM
if (M.incorporeal_move || M.flying)//you are incorporal or flying..no shard stepping!
if(M.incorporeal_move || M.flying)//you are incorporal or flying..no shard stepping!
return
to_chat(M, "\red <B>You step on \the [src]!</B>")
playsound(src.loc, 'sound/effects/glass_step.ogg', 50, 1) // not sure how to handle metal shards with sounds
+12 -12
View File
@@ -1,5 +1,6 @@
/obj/item/weapon/shield
name = "shield"
block_chance = 50
/obj/item/weapon/shield/riot
name = "riot shield"
@@ -17,8 +18,10 @@
attack_verb = list("shoved", "bashed")
var/cooldown = 0 //shield bash cooldown. based on world.time
/obj/item/weapon/shield/riot/IsShield()
return 1
/obj/item/weapon/shield/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type)
if(attack_type == THROWN_PROJECTILE_ATTACK)
final_block_chance += 30
return ..()
/obj/item/weapon/shield/riot/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/melee/baton))
@@ -41,12 +44,7 @@
icon_state = "buckler"
item_state = "buckler"
materials = list()
/obj/item/weapon/shield/riot/buckler/IsShield()
if(prob(60))
return 1
else
return 0
block_chance = 30
/obj/item/weapon/shield/energy
name = "energy combat shield"
@@ -62,8 +60,8 @@
attack_verb = list("shoved", "bashed")
var/active = 0
/obj/item/weapon/shield/energy/IsShield()
return (active)
/obj/item/weapon/shield/energy/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
return 0
/obj/item/weapon/shield/energy/IsReflect()
return (active)
@@ -109,8 +107,10 @@
w_class = 3
var/active = 0
/obj/item/weapon/shield/riot/tele/IsShield()
return (active)
/obj/item/weapon/shield/riot/tele/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
if(active)
return ..()
return 0
/obj/item/weapon/shield/riot/tele/attack_self(mob/living/user)
active = !active
+2 -2
View File
@@ -4,7 +4,7 @@
name = "blank picket sign"
desc = "It's blank"
force = 5
w_class = 4.0
w_class = 4
attack_verb = list("bashed","smacked")
var/delayed = 0 //used to do delays
@@ -35,7 +35,7 @@
sleep(8)
delayed = 0
/datum/table_recipe/picket_sign
/datum/crafting_recipe/picket_sign
name = "Picket Sign"
result = /obj/item/weapon/picket_sign
reqs = list(/obj/item/stack/rods = 1,
+2 -2
View File
@@ -4,7 +4,7 @@
gender = PLURAL
icon = 'icons/obj/items.dmi'
icon_state = "soap"
w_class = 1.0
w_class = 1
throwforce = 0
throw_speed = 4
throw_range = 20
@@ -35,7 +35,7 @@
to_chat(user, "<span class='notice'>You 'clean' \the [target.name].</span>")
if(istype(target, /turf/simulated))
new /obj/effect/decal/cleanable/blood/gibs/cleangibs(target)
else if (istype(target,/mob/living/carbon))
else if(istype(target,/mob/living/carbon))
for(var/obj/item/carried_item in target.contents)
if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant.
carried_item.add_blood(target)//Oh yes, there will be blood...
+3 -4
View File
@@ -7,8 +7,8 @@
throwforce = 5.0
throw_speed = 1
throw_range = 5
w_class = 2.0
flags = NOSHIELD
w_class = 2
armour_penetration = 100
attack_verb = list("bludgeoned", "whacked", "disciplined")
/obj/item/weapon/twohanded/staff/broom
@@ -72,5 +72,4 @@
throwforce = 5.0
throw_speed = 1
throw_range = 5
w_class = 2.0
flags = NOSHIELD
w_class = 2
@@ -59,7 +59,7 @@
desc = "What?"
gender = PLURAL
icon = 'icons/obj/stock_parts.dmi'
w_class = 2.0
w_class = 2
var/rating = 1
New()
src.pixel_x = rand(-5.0, 5)
@@ -73,7 +73,7 @@
..()
/obj/item/weapon/storage/toolbox/green/memetic/proc/consume(mob/M)
if (!M)
if(!M)
return
hunger = 0
hunger_message_level = 0
@@ -10,7 +10,7 @@
item_state = "backpack"
lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi'
righthand_file = 'icons/mob/inhands/clothing_righthand.dmi'
w_class = 4.0
w_class = 4
slot_flags = SLOT_BACK //ERROOOOO
max_w_class = 3
max_combined_w_class = 21
@@ -63,13 +63,13 @@
. = ..()
proc/failcheck(mob/user as mob)
if (prob(src.reliability)) return 1 //No failure
if (prob(src.reliability))
if(prob(src.reliability)) return 1 //No failure
if(prob(src.reliability))
to_chat(user, "\red The Bluespace portal resists your attempt to add another item.")//light failure
else
to_chat(user, "\red The Bluespace generator malfunctions!")
for (var/obj/O in src.contents) //it broke, delete what was in it
for(var/obj/O in src.contents) //it broke, delete what was in it
qdel(O)
crit_fail = 1
icon_state = "brokenpack"
@@ -85,7 +85,7 @@
desc = "Space Santa uses this to deliver toys to all the nice children in space on Christmas! Wow, it's pretty big!"
icon_state = "giftbag0"
item_state = "giftbag"
w_class = 4.0
w_class = 4
max_w_class = 3
max_combined_w_class = 400 // can store a ton of shit!
@@ -322,6 +322,25 @@
new /obj/item/clothing/mask/muzzle(src)
new /obj/item/device/mmi/syndie(src)
/obj/item/weapon/storage/backpack/duffel/syndie/surgery_fake //for maint spawns
name = "surgery dufflebag"
desc = "A suspicious looking dufflebag for holding surgery tools."
icon_state = "duffel-syndimed"
item_state = "duffle-syndimed"
/obj/item/weapon/storage/backpack/duffel/syndie/surgery_fake/New()
..()
new /obj/item/weapon/scalpel(src)
new /obj/item/weapon/hemostat(src)
new /obj/item/weapon/retractor(src)
new /obj/item/weapon/cautery(src)
new /obj/item/weapon/bonegel(src)
new /obj/item/weapon/bonesetter(src)
new /obj/item/weapon/FixOVein(src)
if(prob(50))
new /obj/item/weapon/circular_saw(src)
new /obj/item/weapon/surgicaldrill(src)
/obj/item/weapon/storage/backpack/duffel/captain
name = "captain's duffelbag"
desc = "A duffelbag designed to hold large quantities of condoms."
+10 -10
View File
@@ -198,7 +198,7 @@
new /obj/item/seeds/grassseed(O.loc, O)
for(var/mob/M in range(1))
if (M.s_active == src)
if(M.s_active == src)
src.close(M)
@@ -263,7 +263,7 @@
if(!inserted || !S.amount)
usr.unEquip(S)
usr.update_icons() //update our overlays
if (usr.client && usr.s_active != src)
if(usr.client && usr.s_active != src)
usr.client.screen -= S
S.dropped(usr)
if(!S.amount)
@@ -296,7 +296,7 @@
var/row_num = 0
var/col_count = min(7,storage_slots) -1
if (adjusted_contents > 7)
if(adjusted_contents > 7)
row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
src.standard_orient_objs(row_num, col_count, numbered_contents)
return
@@ -389,7 +389,7 @@
throwforce = 10.0
throw_speed = 3
throw_range = 5
w_class = 4.0
w_class = 4
flags = CONDUCT
materials = list(MAT_METAL=3000)
@@ -432,17 +432,17 @@
/obj/item/weapon/storage/bag/tray/cyborg
/obj/item/weapon/storage/bag/tray/cyborg/afterattack(atom/target, mob/user as mob)
if ( isturf(target) || istype(target,/obj/structure/table) )
if( isturf(target) || istype(target,/obj/structure/table) )
var foundtable = istype(target,/obj/structure/table/)
if ( !foundtable ) //it must be a turf!
if( !foundtable ) //it must be a turf!
for(var/obj/structure/table/T in target)
foundtable = 1
break
var turf/dropspot
if ( !foundtable ) // don't unload things onto walls or other silly places.
if( !foundtable ) // don't unload things onto walls or other silly places.
dropspot = user.loc
else if ( isturf(target) ) // they clicked on a turf with a table in it
else if( isturf(target) ) // they clicked on a turf with a table in it
dropspot = target
else // they clicked on a table
dropspot = target.loc
@@ -462,8 +462,8 @@
if(I)
step(I, pick(NORTH,SOUTH,EAST,WEST))
sleep(rand(2,4))
if ( droppedSomething )
if ( foundtable )
if( droppedSomething )
if( foundtable )
user.visible_message("\blue [user] unloads their service tray.")
else
user.visible_message("\blue [user] drops all the items on their tray.")
+23 -12
View File
@@ -26,7 +26,7 @@
if(!istype(over_object, /obj/screen))
return ..()
playsound(src.loc, "rustle", 50, 1, -5)
if (!M.restrained() && !M.stat && can_use())
if(!M.restrained() && !M.stat && can_use())
switch(over_object.name)
if("r_hand")
M.unEquip(src)
@@ -68,10 +68,12 @@
new /obj/item/weapon/crowbar(src)
new /obj/item/weapon/wirecutters(src)
new /obj/item/stack/cable_coil(src,30,pick("red","yellow","orange"))
update_icon()
/obj/item/weapon/storage/belt/utility/full/multitool/New()
..()
new /obj/item/device/multitool(src)
update_icon()
/obj/item/weapon/storage/belt/utility/atmostech/New()
..()
@@ -82,6 +84,7 @@
new /obj/item/weapon/wirecutters(src)
new /obj/item/device/t_scanner(src)
new /obj/item/weapon/extinguisher/mini(src)
update_icon()
@@ -124,6 +127,7 @@
new /obj/item/weapon/reagent_containers/food/pill/salicylic(src)
new /obj/item/weapon/reagent_containers/food/pill/salicylic(src)
new /obj/item/weapon/reagent_containers/food/pill/salicylic(src)
update_icon()
/obj/item/weapon/storage/belt/botany
@@ -183,6 +187,7 @@
/obj/item/weapon/storage/belt/security/sec/New()
..()
new /obj/item/device/flashlight/seclite(src)
update_icon()
/obj/item/weapon/storage/belt/security/response_team/New()
..()
@@ -191,6 +196,7 @@
new /obj/item/device/flash(src)
new /obj/item/weapon/melee/classic_baton/telescopic(src)
new /obj/item/weapon/grenade/flashbang(src)
update_icon()
/obj/item/weapon/storage/belt/soulstone
name = "soul stone belt"
@@ -211,6 +217,7 @@
new /obj/item/device/soulstone(src)
new /obj/item/device/soulstone(src)
new /obj/item/device/soulstone(src)
update_icon()
/obj/item/weapon/storage/belt/champion
@@ -262,6 +269,7 @@
new /obj/item/weapon/soap(src)
new /obj/item/weapon/grenade/chem_grenade/cleaner(src)
new /obj/item/weapon/grenade/chem_grenade/cleaner(src)
update_icon()
/obj/item/weapon/storage/belt/lazarus
name = "trainer's belt"
@@ -314,6 +322,7 @@
new /obj/item/ammo_casing/shotgun/beanbag(src)
new /obj/item/ammo_casing/shotgun/beanbag(src)
new /obj/item/ammo_casing/shotgun/beanbag(src)
update_icon()
/obj/item/weapon/storage/belt/bandolier/update_icon()
..()
@@ -365,6 +374,8 @@
for(var/obj/item/weapon/gun/magic/wand/W in contents) //All wands in this pack come in the best possible condition
W.max_charges = initial(W.max_charges)
W.charges = W.max_charges
update_icon()
/obj/item/weapon/storage/belt/fannypack
name = "fannypack"
@@ -442,13 +453,13 @@
can_hold = list()
proc/failcheck(mob/user as mob)
if (prob(src.reliability)) return 1 //No failure
if (prob(src.reliability))
if(prob(src.reliability)) return 1 //No failure
if(prob(src.reliability))
to_chat(user, "\red The Bluespace portal resists your attempt to add another item.")//light failure
else
to_chat(user, "\red The Bluespace generator malfunctions!")
for (var/obj/O in src.contents) //it broke, delete what was in it
for(var/obj/O in src.contents) //it broke, delete what was in it
qdel(O)
crit_fail = 1
return 0
@@ -518,9 +529,9 @@
// As a last resort, the belt can be used as a plastic explosive with a fixed timer (15 seconds). Naturally, you'll lose all your gear...
// Of course, it could be worse. It could spawn a singularity!
/obj/item/weapon/storage/belt/bluespace/owlman/afterattack(atom/target as obj|turf, mob/user as mob, flag)
if (!flag)
if(!flag)
return
if (istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage) || istype(target, /obj/structure/table) || istype(target, /obj/structure/closet))
if(istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage) || istype(target, /obj/structure/table) || istype(target, /obj/structure/closet))
return
to_chat(user, "Planting explosives...")
user.visible_message("[user.name] is fiddling with their toolbelt.")
@@ -535,8 +546,8 @@
target = target
loc = null
var/location
if (isturf(target)) location = target
if (ismob(target))
if(isturf(target)) location = target
if(ismob(target))
target:attack_log += "\[[time_stamp()]\]<font color='orange'> Had the [name] planted on them by [user.real_name] ([user.ckey])</font>"
user.visible_message("\red [user.name] finished planting an explosive on [target.name]!")
target.overlays += image('icons/obj/assemblies.dmi', "plastic-explosive2")
@@ -546,12 +557,12 @@
if(ismob(target) || isobj(target))
location = target.loc // These things can move
explosion(location, -1, -1, 2, 3)
if (istype(target, /turf/simulated/wall)) target:dismantle_wall(1)
if(istype(target, /turf/simulated/wall)) target:dismantle_wall(1)
else target.ex_act(1)
if (isobj(target))
if (target)
if(isobj(target))
if(target)
qdel(target)
if (src)
if(src)
qdel(src)
*/
@@ -4,7 +4,7 @@
icon_state ="bible"
throw_speed = 1
throw_range = 5
w_class = 3.0
w_class = 3
var/mob/affecting = null
var/deity_name = "Christ"
@@ -52,7 +52,7 @@
else
M.LAssailant = user
if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
if(!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
to_chat(user, "\red You don't have the dexterity to do this!")
return
if(!chaplain)
@@ -60,7 +60,7 @@
user.take_organ_damage(0,10)
return
if ((CLUMSY in user.mutations) && prob(50))
if((CLUMSY in user.mutations) && prob(50))
to_chat(user, "\red The [src] slips out of your hand and hits your head.")
user.take_organ_damage(10)
user.Paralyse(20)
@@ -69,12 +69,12 @@
// if(..() == BLOCKED)
// return
if (M.stat !=2)
if(M.stat !=2)
/*if((M.mind in ticker.mode.cult) && (prob(20)))
to_chat(M, "\red The power of [src.deity_name] clears your mind of heresy!")
to_chat(user, "\red You see how [M]'s eyes become clear, the cult no longer holds control over him!")
ticker.mode.remove_cultist(M.mind)*/
if ((istype(M, /mob/living/carbon/human) && prob(60)))
if((istype(M, /mob/living/carbon/human) && prob(60)))
bless(M)
for(var/mob/O in viewers(M, null))
O.show_message(text("\red <B>[] heals [] with the power of [src.deity_name]!</B>", user, M), 1)
@@ -96,7 +96,7 @@
/obj/item/weapon/storage/bible/afterattack(atom/A, mob/user as mob, proximity)
if(!proximity)
return
if (istype(A, /turf/simulated/floor))
if(istype(A, /turf/simulated/floor))
to_chat(user, "<span class='notice'>You hit the floor with the bible.</span>")
if(user.mind && (user.mind.assigned_role == "Chaplain"))
call(/obj/effect/rune/proc/talismanreveal)(src)
@@ -39,22 +39,29 @@
New()
..()
contents = list()
sleep(1)
new /obj/item/clothing/mask/breath( src )
new /obj/item/weapon/tank/emergency_oxygen( src )
new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src )
return
/obj/item/weapon/storage/box/engineer/
/obj/item/weapon/storage/box/engineer
New()
..()
contents = list()
sleep(1)
new /obj/item/clothing/mask/breath( src )
new /obj/item/weapon/tank/emergency_oxygen/engi( src )
new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src )
return
/obj/item/weapon/storage/box/survival_mining
New()
..()
contents = list()
new /obj/item/clothing/mask/breath(src)
new /obj/item/weapon/tank/emergency_oxygen/engi(src)
new /obj/item/weapon/crowbar/red(src)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector(src)
/obj/item/weapon/storage/box/gloves
name = "box of latex gloves"
desc = "Contains white gloves."
@@ -261,6 +268,19 @@
new /obj/item/weapon/implantcase/death_alarm(src)
new /obj/item/weapon/implanter(src)
/obj/item/weapon/storage/box/tapes
name = "Tape Box"
desc = "A box of spare recording tapes"
icon_state = "box"
New()
..()
new /obj/item/device/tape(src)
new /obj/item/device/tape(src)
new /obj/item/device/tape(src)
new /obj/item/device/tape(src)
new /obj/item/device/tape(src)
new /obj/item/device/tape(src)
/obj/item/weapon/storage/box/rxglasses
name = "prescription glasses"
@@ -603,7 +623,7 @@
icon_state = "syringe"
New()
..()
for (var/i; i < storage_slots; i++)
for(var/i; i < storage_slots; i++)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector(src)
/obj/item/weapon/storage/box/autoinjector/utility
@@ -8,7 +8,7 @@
force = 8.0
throw_speed = 2
throw_range = 4
w_class = 4.0
w_class = 4
max_w_class = 3
max_combined_w_class = 21
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
@@ -115,7 +115,7 @@
desc = "A box of crayons for all your rune drawing needs."
icon = 'icons/obj/crayons.dmi'
icon_state = "crayonbox"
w_class = 2.0
w_class = 2
storage_slots = 6
icon_type = "crayon"
can_hold = list(
@@ -192,7 +192,6 @@
/obj/item/weapon/storage/fancy/cigarettes/update_icon()
icon_state = "[initial(icon_state)][contents.len]"
desc = "There are [contents.len] cig\s left!"
return
/obj/item/weapon/storage/fancy/cigarettes/proc/lace_cigarette(var/obj/item/clothing/mask/cigarette/C as obj)
@@ -355,7 +354,7 @@
var/total_contents = src.contents.len - itemremoved
src.icon_state = "vialbox[total_contents]"
src.overlays.Cut()
if (!broken)
if(!broken)
overlays += image(icon, src, "led[locked]")
if(locked)
overlays += image(icon, src, "cover")
@@ -386,4 +385,4 @@
new /obj/item/weapon/egg_scoop(src)
new /obj/item/weapon/fish_net(src)
new /obj/item/weapon/tank_brush(src)
new /obj/item/weapon/fishfood(src)
new /obj/item/weapon/fishfood(src)
@@ -31,7 +31,7 @@
New()
..()
if (empty) return
if(empty) return
icon_state = pick("ointment","firefirstaid")
@@ -53,7 +53,7 @@
New()
..()
if (empty) return
if(empty) return
new /obj/item/weapon/reagent_containers/food/pill/patch/styptic( src )
new /obj/item/weapon/reagent_containers/food/pill/patch/styptic( src )
new /obj/item/weapon/reagent_containers/food/pill/salicylic( src )
@@ -71,7 +71,7 @@
New()
..()
if (empty) return
if(empty) return
icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3")
@@ -95,7 +95,7 @@
New()
..()
if (empty) return
if(empty) return
new /obj/item/weapon/reagent_containers/food/pill/salbutamol( src )
new /obj/item/weapon/reagent_containers/food/pill/salbutamol( src )
new /obj/item/weapon/reagent_containers/food/pill/salbutamol( src )
@@ -114,7 +114,7 @@
New()
..()
if (empty) return
if(empty) return
icon_state = pick("brute","brute2")
@@ -138,7 +138,7 @@
/obj/item/weapon/storage/firstaid/adv/New()
..()
if (empty) return
if(empty) return
new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src )
new /obj/item/stack/medical/advanced/bruise_pack(src)
new /obj/item/stack/medical/advanced/bruise_pack(src)
@@ -164,7 +164,7 @@
/obj/item/weapon/storage/firstaid/tactical/New()
..()
if (empty) return
if(empty) return
new /obj/item/clothing/accessory/stethoscope( src )
new /obj/item/weapon/defibrillator/compact/combat/loaded(src)
new /obj/item/weapon/reagent_containers/hypospray/combat(src)
@@ -209,7 +209,7 @@
icon_state = "pill_canister"
icon = 'icons/obj/chemical.dmi'
item_state = "contsolid"
w_class = 2.0
w_class = 2
can_hold = list("/obj/item/weapon/reagent_containers/food/pill","/obj/item/weapon/dice","/obj/item/weapon/paper")
allow_quick_gather = 1
use_to_pickup = 1
@@ -223,11 +223,11 @@
base_name = name
/obj/item/weapon/storage/pill_bottle/MouseDrop(obj/over_object as obj) //Quick pillbottle fix. -Agouri
if (ishuman(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~
if(ishuman(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~
var/mob/M = usr
if (!( istype(over_object, /obj/screen) ))
if(!( istype(over_object, /obj/screen) ))
return ..()
if ((!( M.restrained() ) && !( M.stat ) /*&& M.pocket == src*/))
if((!( M.restrained() ) && !( M.stat ) /*&& M.pocket == src*/))
switch(over_object.name)
if("r_hand")
M.unEquip(src)
@@ -238,7 +238,7 @@
src.add_fingerprint(usr)
return
if(over_object == usr && in_range(src, usr) || usr.contents.Find(src))
if (usr.s_active)
if(usr.s_active)
usr.s_active.close(usr)
src.show_to(usr)
return
@@ -30,24 +30,24 @@
//returns 1 if the master item's parent's MouseDrop() should be called, 0 otherwise. It's strange, but no other way of
//doing it without the ability to call another proc's parent, really.
/obj/item/weapon/storage/internal/proc/handle_mousedrop(mob/user as mob, obj/over_object as obj)
if (ishuman(user)) //so monkeys can take off their backpacks -- Urist
if(ishuman(user)) //so monkeys can take off their backpacks -- Urist
if (istype(user.loc,/obj/mecha)) // stops inventory actions in a mech
if(istype(user.loc,/obj/mecha)) // stops inventory actions in a mech
return 0
if(over_object == user && Adjacent(user)) // this must come before the screen objects only block
src.open(user)
return 0
if (!( istype(over_object, /obj/screen) ))
if(!( istype(over_object, /obj/screen) ))
return 1
//makes sure master_item is equipped before putting it in hand, so that we can't drag it into our hand from miles away.
//there's got to be a better way of doing this...
if (!(master_item.loc == user) || (master_item.loc && master_item.loc.loc == user))
if(!(master_item.loc == user) || (master_item.loc && master_item.loc.loc == user))
return 0
if (!( user.restrained() ) && !( user.stat ))
if(!( user.restrained() ) && !( user.stat ))
switch(over_object.name)
if("r_hand")
user.unEquip(master_item)
@@ -76,12 +76,12 @@
return 0
src.add_fingerprint(user)
if (master_item.loc == user)
if(master_item.loc == user)
src.open(user)
return 0
for(var/mob/M in range(1, master_item.loc))
if (M.s_active == src)
if(M.s_active == src)
src.close(M)
return 1
@@ -18,7 +18,7 @@
attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if (istype(W, /obj/item/weapon/card/id))
if(istype(W, /obj/item/weapon/card/id))
if(src.broken)
to_chat(user, "<span class='warning'>It appears to be broken.</span>")
return
@@ -81,7 +81,7 @@
storage_slots = 1
/obj/item/weapon/storage/lockbox/loyalty
name = "Lockbox (Loyalty Implants)"
name = "Lockbox (Mindshield Implants)"
req_access = list(access_security)
New()
@@ -23,7 +23,7 @@
var/l_hacking = 0
var/emagged = 0
var/open = 0
w_class = 3.0
w_class = 3
max_w_class = 2
max_combined_w_class = 14
@@ -33,19 +33,19 @@
attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(locked)
if ((istype(W, /obj/item/weapon/melee/energy/blade)) && (!src.emagged))
if((istype(W, /obj/item/weapon/melee/energy/blade)) && (!src.emagged))
emag_act(user, W)
if (istype(W, /obj/item/weapon/screwdriver))
if (do_after(user, 20, target = src))
if(istype(W, /obj/item/weapon/screwdriver))
if(do_after(user, 20, target = src))
src.open =! src.open
user.show_message(text("\blue You [] the service panel.", (src.open ? "open" : "close")))
return
if ((istype(W, /obj/item/device/multitool)) && (src.open == 1)&& (!src.l_hacking))
if((istype(W, /obj/item/device/multitool)) && (src.open == 1)&& (!src.l_hacking))
user.show_message(text("\red Now attempting to reset internal memory, please hold."), 1)
src.l_hacking = 1
if (do_after(usr, 100, target = src))
if (prob(40))
if(do_after(usr, 100, target = src))
if(prob(40))
src.l_setshort = 1
src.l_set = 0
user.show_message(text("\red Internal memory reset. Please give it a few seconds to reinitialize."), 1)
@@ -85,7 +85,7 @@
MouseDrop(over_object, src_location, over_location)
if (locked)
if(locked)
src.add_fingerprint(usr)
return
..()
@@ -95,28 +95,28 @@
user.set_machine(src)
var/dat = text("<TT><B>[]</B><BR>\n\nLock Status: []",src, (src.locked ? "LOCKED" : "UNLOCKED"))
var/message = "Code"
if ((src.l_set == 0) && (!src.emagged) && (!src.l_setshort))
if((src.l_set == 0) && (!src.emagged) && (!src.l_setshort))
dat += text("<p>\n<b>5-DIGIT PASSCODE NOT SET.<br>ENTER NEW PASSCODE.</b>")
if (src.emagged)
if(src.emagged)
dat += text("<p>\n<font color=red><b>LOCKING SYSTEM ERROR - 1701</b></font>")
if (src.l_setshort)
if(src.l_setshort)
dat += text("<p>\n<font color=red><b>ALERT: MEMORY SYSTEM ERROR - 6040 201</b></font>")
message = text("[]", src.code)
if (!src.locked)
if(!src.locked)
message = "*****"
dat += text("<HR>\n>[]<BR>\n<A href='?src=\ref[];type=1'>1</A>-<A href='?src=\ref[];type=2'>2</A>-<A href='?src=\ref[];type=3'>3</A><BR>\n<A href='?src=\ref[];type=4'>4</A>-<A href='?src=\ref[];type=5'>5</A>-<A href='?src=\ref[];type=6'>6</A><BR>\n<A href='?src=\ref[];type=7'>7</A>-<A href='?src=\ref[];type=8'>8</A>-<A href='?src=\ref[];type=9'>9</A><BR>\n<A href='?src=\ref[];type=R'>R</A>-<A href='?src=\ref[];type=0'>0</A>-<A href='?src=\ref[];type=E'>E</A><BR>\n</TT>", message, src, src, src, src, src, src, src, src, src, src, src, src)
user << browse(dat, "window=caselock;size=300x280")
Topic(href, href_list)
..()
if ((usr.stat || usr.restrained()) || (get_dist(src, usr) > 1))
if((usr.stat || usr.restrained()) || (get_dist(src, usr) > 1))
return
if (href_list["type"])
if (href_list["type"] == "E")
if ((src.l_set == 0) && (length(src.code) == 5) && (!src.l_setshort) && (src.code != "ERROR"))
if(href_list["type"])
if(href_list["type"] == "E")
if((src.l_set == 0) && (length(src.code) == 5) && (!src.l_setshort) && (src.code != "ERROR"))
src.l_code = src.code
src.l_set = 1
else if ((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1))
else if((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1))
src.locked = 0
src.overlays = null
overlays += image('icons/obj/storage.dmi', icon_opened)
@@ -124,18 +124,18 @@
else
src.code = "ERROR"
else
if ((href_list["type"] == "R") && (src.emagged == 0) && (!src.l_setshort))
if((href_list["type"] == "R") && (src.emagged == 0) && (!src.l_setshort))
src.locked = 1
src.overlays = null
src.code = null
src.close(usr)
else
src.code += text("[]", href_list["type"])
if (length(src.code) > 5)
if(length(src.code) > 5)
src.code = "ERROR"
src.add_fingerprint(usr)
for(var/mob/M in viewers(1, src.loc))
if ((M.client && M.machine == src))
if((M.client && M.machine == src))
src.attack_self(M)
return
return
@@ -165,7 +165,7 @@
force = 8.0
throw_speed = 2
throw_range = 4
w_class = 4.0
w_class = 4
max_w_class = 3
max_combined_w_class = 21
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
@@ -176,17 +176,17 @@
new /obj/item/weapon/pen(src)
attack_hand(mob/user as mob)
if ((src.loc == user) && (src.locked == 1))
if((src.loc == user) && (src.locked == 1))
to_chat(usr, "\red [src] is locked and cannot be opened!")
else if ((src.loc == user) && (!src.locked))
else if((src.loc == user) && (!src.locked))
playsound(src.loc, "rustle", 50, 1, -5)
if (user.s_active)
if(user.s_active)
user.s_active.close(user) //Close and re-open
src.show_to(user)
else
..()
for(var/mob/M in range(1))
if (M.s_active == src)
if(M.s_active == src)
src.close(M)
src.orient2hud(user)
src.add_fingerprint(user)
@@ -213,7 +213,7 @@
icon_locking = "safeb"
icon_sparking = "safespark"
force = 8.0
w_class = 5.0
w_class = 5
max_w_class = 8
anchored = 1.0
density = 0
@@ -8,7 +8,7 @@
/obj/item/weapon/storage
name = "storage"
icon = 'icons/obj/storage.dmi'
w_class = 3.0
w_class = 3
var/silent = 0 // No message on putting items in
var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else)
var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set)
@@ -26,10 +26,10 @@
var/use_sound = "rustle" //sound played when used. null for no sound.
/obj/item/weapon/storage/MouseDrop(obj/over_object as obj)
if (ishuman(usr)) //so monkeys can take off their backpacks -- Urist
if(ishuman(usr)) //so monkeys can take off their backpacks -- Urist
var/mob/M = usr
if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
return
if(over_object == M && Adjacent(M)) // this must come before the screen objects only block
@@ -39,12 +39,12 @@
show_to(M)
return
if ((istype(over_object, /obj/structure/table) || istype(over_object, /turf/simulated/floor)) \
if((istype(over_object, /obj/structure/table) || istype(over_object, /turf/simulated/floor)) \
&& contents.len && loc == usr && !usr.stat && !usr.restrained() && usr.canmove && over_object.Adjacent(usr) \
&& !istype(src, /obj/item/weapon/storage/lockbox))
var/turf/T = get_turf(over_object)
if (istype(over_object, /turf/simulated/floor))
if (get_turf(usr) != T)
if(istype(over_object, /turf/simulated/floor))
if(get_turf(usr) != T)
return // Can only empty containers onto the floor under you
if("Yes" != alert(usr,"Empty \the [src] onto \the [T]?","Confirm","Yes","No"))
return
@@ -59,12 +59,12 @@
update_icon() // For content-sensitive icons
return
if (!( istype(over_object, /obj/screen) ))
if(!( istype(over_object, /obj/screen) ))
return ..()
if (!(src.loc == usr) || (src.loc && src.loc.loc == usr))
if(!(src.loc == usr) || (src.loc && src.loc.loc == usr))
return
playsound(src.loc, "rustle", 50, 1, -5)
if (!( M.restrained() ) && !( M.stat ))
if(!( M.restrained() ) && !( M.stat ))
switch(over_object.name)
if("r_hand")
if(!M.unEquip(src))
@@ -77,7 +77,7 @@
src.add_fingerprint(usr)
return
if(over_object == usr && in_range(src, usr) || usr.contents.Find(src))
if (usr.s_active)
if(usr.s_active)
usr.s_active.close(usr)
src.show_to(usr)
return
@@ -94,7 +94,7 @@
L += S.return_inv()
for(var/obj/item/weapon/gift/G in src)
L += G.gift
if (istype(G.gift, /obj/item/weapon/storage))
if(istype(G.gift, /obj/item/weapon/storage))
L += G.gift:return_inv()
for(var/obj/item/weapon/folder/F in src)
L += F.contents
@@ -128,11 +128,11 @@
return
/obj/item/weapon/storage/proc/open(mob/user as mob)
if (src.use_sound)
if(src.use_sound)
playsound(src.loc, src.use_sound, 50, 1, -5)
orient2hud(user)
if (user.s_active)
if(user.s_active)
user.s_active.close(user)
show_to(user)
@@ -153,7 +153,7 @@
O.layer = 20
O.plane = HUD_PLANE
cx++
if (cx > mx)
if(cx > mx)
cx = tx
cy--
src.closer.screen_loc = "[mx+1],[my]"
@@ -173,7 +173,7 @@
ND.sample_object.layer = 20
ND.sample_object.plane = HUD_PLANE
cx++
if (cx > (4+cols))
if(cx > (4+cols))
cx = 4
cy--
else
@@ -184,7 +184,7 @@
O.layer = 20
O.plane = HUD_PLANE
cx++
if (cx > (4+cols))
if(cx > (4+cols))
cx = 4
cy--
src.closer.screen_loc = "[4+cols+1]:16,2:16"
@@ -224,7 +224,7 @@
//var/mob/living/carbon/human/H = user
var/row_num = 0
var/col_count = min(7,storage_slots) -1
if (adjusted_contents > 7)
if(adjusted_contents > 7)
row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
src.standard_orient_objs(row_num, col_count, numbered_contents)
return
@@ -249,7 +249,7 @@
break
if(!ok)
if(!stop_messages)
if (istype(W, /obj/item/weapon/hand_labeler))
if(istype(W, /obj/item/weapon/hand_labeler))
return 0
to_chat(usr, "<span class='notice'>[src] cannot hold [W].</span>")
return 0
@@ -260,7 +260,7 @@
to_chat(usr, "<span class='notice'>[src] cannot hold [W].</span>")
return 0
if (W.w_class > max_w_class)
if(W.w_class > max_w_class)
if(!stop_messages)
to_chat(usr, "<span class='notice'>[W] is too big for this [src].</span>")
return 0
@@ -301,18 +301,18 @@
W.loc = src
W.on_enter_storage(src)
if(usr)
if (usr.client && usr.s_active != src)
if(usr.client && usr.s_active != src)
usr.client.screen -= W
W.dropped(usr)
add_fingerprint(usr)
if(!prevent_warning && !istype(W, /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow))
for(var/mob/M in viewers(usr, null))
if (M == usr)
if(M == usr)
to_chat(usr, "<span class='notice'>You put the [W] into [src].</span>")
else if (M in range(1)) //If someone is standing close enough, they can tell what it is...
else if(M in range(1)) //If someone is standing close enough, they can tell what it is...
M.show_message("<span class='notice'>[usr] puts [W] into [src].</span>")
else if (W && W.w_class >= 3.0) //Otherwise they can only see large or normal items from a distance...
else if(W && W.w_class >= 3.0) //Otherwise they can only see large or normal items from a distance...
M.show_message("<span class='notice'>[usr] puts [W] into [src].</span>")
src.orient2hud(usr)
@@ -331,8 +331,8 @@
F.update_icon(1)
for(var/mob/M in range(1, src.loc))
if (M.s_active == src)
if (M.client)
if(M.s_active == src)
if(M.client)
M.client.screen -= W
if(new_location)
@@ -373,9 +373,6 @@
handle_item_insertion(W)
return 1
/obj/item/weapon/storage/dropped(mob/user as mob)
return
/obj/item/weapon/storage/attack_hand(mob/user as mob)
playsound(src.loc, "rustle", 50, 1, -5)
@@ -392,14 +389,14 @@
return
src.orient2hud(user)
if (src.loc == user)
if (user.s_active)
if(src.loc == user)
if(user.s_active)
user.s_active.close(user)
src.show_to(user)
else
..()
for(var/mob/M in range(1))
if (M.s_active == src)
if(M.s_active == src)
src.close(M)
src.add_fingerprint(user)
return
@@ -409,7 +406,7 @@
set category = "Object"
collection_mode = !collection_mode
switch (collection_mode)
switch(collection_mode)
if(1)
to_chat(usr, "[src] now picks up all items in a tile at once.")
if(0)
@@ -488,19 +485,19 @@
return
//Otherwise we'll try to fold it.
if ( contents.len )
if( contents.len )
return
if ( !ispath(src.foldable) )
if( !ispath(src.foldable) )
return
var/found = 0
// Close any open UI windows first
for(var/mob/M in range(1))
if (M.s_active == src)
if(M.s_active == src)
src.close(M)
if ( M == user )
if( M == user )
found = 1
if ( !found ) // User is too far away
if( !found ) // User is too far away
return
// Now make the cardboard
to_chat(user, "<span class='notice'>You fold [src] flat.</span>")
@@ -514,14 +511,14 @@
var/depth = 0
var/atom/cur_atom = src
while (cur_atom && !(cur_atom in container.contents))
if (isarea(cur_atom))
while(cur_atom && !(cur_atom in container.contents))
if(isarea(cur_atom))
return -1
if (istype(cur_atom.loc, /obj/item/weapon/storage))
if(istype(cur_atom.loc, /obj/item/weapon/storage))
depth++
cur_atom = cur_atom.loc
if (!cur_atom)
if(!cur_atom)
return -1 //inside something with a null loc.
return depth
@@ -532,14 +529,14 @@
var/depth = 0
var/atom/cur_atom = src
while (cur_atom && !isturf(cur_atom))
if (isarea(cur_atom))
while(cur_atom && !isturf(cur_atom))
if(isarea(cur_atom))
return -1
if (istype(cur_atom.loc, /obj/item/weapon/storage))
if(istype(cur_atom.loc, /obj/item/weapon/storage))
depth++
cur_atom = cur_atom.loc
if (!cur_atom)
if(!cur_atom)
return -1 //inside something with a null loc.
return depth
@@ -9,7 +9,7 @@
throwforce = 10.0
throw_speed = 2
throw_range = 7
w_class = 4.0
w_class = 4
materials = list(MAT_METAL = 500)
origin_tech = "combat=1"
attack_verb = list("robusted")
@@ -17,7 +17,7 @@
New()
..()
if (src.type == /obj/item/weapon/storage/toolbox)
if(src.type == /obj/item/weapon/storage/toolbox)
to_chat(world, "BAD: [src] ([src.type]) spawned at [src.x] [src.y] [src.z]")
qdel(src)
@@ -1,7 +1,7 @@
/obj/item/weapon/storage/box/syndicate/
New()
..()
switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "bond" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "implant" = 1, "hacker" = 1, "lordsingulo" = 1, "darklord" = 1)))
switch(pickweight(list("bloodyspai" = 1, "stealth" = 1, "bond" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "implant" = 1, "hacker" = 1, "lordsingulo" = 1, "darklord" = 1)))
if("bloodyspai")
new /obj/item/clothing/under/chameleon(src)
new /obj/item/clothing/mask/gas/voice(src)
@@ -37,7 +37,7 @@
new /obj/item/weapon/gun/projectile/revolver(src)
new /obj/item/ammo_box/a357(src)
new /obj/item/weapon/card/emag(src)
new /obj/item/weapon/c4(src)
new /obj/item/weapon/grenade/plastic/c4(src)
new /obj/item/clothing/gloves/color/latex/nitrile(src)
new /obj/item/clothing/mask/gas/clown_hat(src)
new /obj/item/clothing/under/suit_jacket/really_black(src)
@@ -118,7 +118,16 @@
..()
new /obj/item/clothing/suit/space/rig/syndi/elite(src)
new /obj/item/clothing/head/helmet/space/rig/syndi/elite(src)
return
/obj/item/weapon/storage/box/syndie_kit/shielded_hardsuit
name = "Boxed Shielded Syndicate Hardsuit and Helmet"
can_hold = list("/obj/item/clothing/suit/space/rig/shielded/syndi", "/obj/item/clothing/head/helmet/space/rig/shielded/syndi")
max_w_class = 4
/obj/item/weapon/storage/box/syndie_kit/shielded_hardsuit/New()
..()
new /obj/item/clothing/suit/space/rig/shielded/syndi(src)
new /obj/item/clothing/head/helmet/space/rig/shielded/syndi(src)
/obj/item/weapon/storage/box/syndie_kit/conversion
name = "box (CK)"
+7 -8
View File
@@ -24,6 +24,7 @@
return
/obj/item/weapon/melee/baton/CheckParts()
..()
bcell = locate(/obj/item/weapon/stock_parts/cell) in contents
update_icon()
@@ -132,6 +133,11 @@
/obj/item/weapon/melee/baton/proc/baton_stun(mob/living/L, mob/user)
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(H.check_shields(0, "[user]'s [name]", src, MELEE_ATTACK)) //No message; check_shields() handles that
playsound(L, 'sound/weapons/Genhit.ogg', 50, 1)
return
user.lastattacked = L
L.lastattacker = user
@@ -182,13 +188,6 @@
/obj/item/weapon/melee/baton/loaded/robot
hitcost = 1000
/obj/item/weapon/melee/baton/loaded/ntcane
name = "fancy cane"
desc = "A cane with special engraving on it. It has a strange button on the handle..."
icon_state = "cane_nt"
item_state = "cane_nt"
//Makeshift stun baton. Replacement for stun gloves.
/obj/item/weapon/melee/baton/cattleprod
name = "stunprod"
@@ -207,4 +206,4 @@
else if(!bcell)
icon_state = "stunprod_nocell"
else
icon_state = "stunprod"
icon_state = "stunprod"
@@ -46,11 +46,15 @@
return
if(!isliving(target))
return
if (user.a_intent == I_HARM)
if(user.a_intent == I_HARM)
if(!..()) return
if(!isrobot(target)) return
else
if(cooldown <= 0)
if(ishuman(target))
var/mob/living/carbon/human/H = target
if(H.check_shields(0, "[user]'s [name]", src, MELEE_ATTACK))
return 0
playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1)
target.Weaken(3)
add_logs(target, user, "stunned", object="[src]")
@@ -68,6 +72,13 @@
else
return ..()
/obj/item/weapon/melee/classic_baton/ntcane
name = "fancy cane"
desc = "A cane with special engraving on it. It seems well suited for fending off assailants..."
icon_state = "cane_nt"
item_state = "cane_nt"
needs_permit = 0
//Telescopic baton
/obj/item/weapon/melee/classic_baton/telescopic
name = "telescopic baton"
@@ -10,7 +10,7 @@
var/mob/currentUser = null
var/obj/item/device/radio/origradio = null
flags = CONDUCT | ONBELT
w_class = 2.0
w_class = 2
item_state = "radio"
throw_speed = 4
throw_range = 20
@@ -31,7 +31,7 @@
slot_flags = SLOT_BELT
item_state = "radio"
throwforce = 5
w_class = 2.0
w_class = 2
throw_speed = 4
throw_range = 20
materials = list(MAT_METAL=100)
@@ -96,7 +96,7 @@
*/
/obj/item/weapon/rack_parts/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
if (istype(W, /obj/item/weapon/wrench))
if(istype(W, /obj/item/weapon/wrench))
new /obj/item/stack/sheet/metal(user.loc)
qdel(src)
@@ -4,76 +4,90 @@
name = "Jetpack (Empty)"
desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution."
icon_state = "jetpack"
w_class = 4.0
w_class = 4
item_state = "jetpack"
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
var/datum/effect/system/ion_trail_follow/ion_trail
var/on = 0.0
var/stabilization_on = 0
actions_types = list(/datum/action/item_action/set_internals, /datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization)
var/on = 0
var/stabilizers = 0
var/volume_rate = 500 //Needed for borg jetpack transfer
action_button_name = "Toggle Jetpack"
/obj/item/weapon/tank/jetpack/New()
..()
src.ion_trail = new /datum/effect/system/ion_trail_follow()
src.ion_trail.set_up(src)
return
ion_trail = new /datum/effect/system/ion_trail_follow()
ion_trail.set_up(src)
/obj/item/weapon/tank/jetpack/Destroy()
qdel(ion_trail)
ion_trail = null
return ..()
/obj/item/weapon/tank/jetpack/ui_action_click(mob/user, actiontype)
if(actiontype == /datum/action/item_action/toggle_jetpack)
cycle(user)
else if(actiontype == /datum/action/item_action/jetpack_stabilization)
toggle_stabilization(user)
else
toggle_internals(user)
/obj/item/weapon/tank/jetpack/proc/toggle_stabilization(mob/user)
if(on)
stabilizers = !stabilizers
to_chat(user, "<span class='notice'>You turn [src]'s stabilization [stabilizers ? "on" : "off"].</span>")
/obj/item/weapon/tank/jetpack/examine(mob/user)
if(!..(user, 0))
return
if(air_contents.oxygen < 10)
to_chat(user, text("\red <B>The meter on the [src.name] indicates you are almost out of air!</B>"))
to_chat(user, "<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/weapon/tank/jetpack/verb/toggle_rockets()
set name = "Toggle Jetpack Stabilization"
set category = "Object"
src.stabilization_on = !( src.stabilization_on )
to_chat(usr, "You toggle the stabilization [stabilization_on? "on":"off"].")
return
/obj/item/weapon/tank/jetpack/proc/cycle(mob/user)
if(user.incapacitated())
return
/obj/item/weapon/tank/jetpack/verb/toggle()
set name = "Toggle Jetpack"
set category = "Object"
on = !on
if(on)
icon_state = "[icon_state]-on"
// item_state = "[item_state]-on"
ion_trail.start()
if(!on)
turn_on()
to_chat(user, "<span class='notice'>You turn the jetpack on.</span>")
else
icon_state = initial(icon_state)
// item_state = initial(item_state)
ion_trail.stop()
return
turn_off()
to_chat(user, "<span class='notice'>You turn the jetpack off.</span>")
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/weapon/tank/jetpack/proc/turn_on()
on = TRUE
icon_state = "[initial(icon_state)]-on"
ion_trail.start()
/obj/item/weapon/tank/jetpack/proc/turn_off()
on = FALSE
stabilizers = FALSE
icon_state = initial(icon_state)
ion_trail.stop()
/obj/item/weapon/tank/jetpack/proc/allow_thrust(num, mob/living/user as mob)
if(!(src.on))
if(!on)
return 0
if((num < 0.005 || src.air_contents.total_moles() < num))
src.ion_trail.stop()
if((num < 0.005 || air_contents.total_moles() < num))
turn_off()
return 0
var/datum/gas_mixture/G = src.air_contents.remove(num)
var/allgases = G.carbon_dioxide + G.nitrogen + G.oxygen + G.toxins //fuck trace gases -Pete
if(allgases >= 0.005)
. = 1
qdel(G)
/obj/item/weapon/tank/jetpack/ui_action_click()
toggle()
var/datum/gas_mixture/removed = air_contents.remove(num)
if(removed.total_moles() < 0.005)
turn_off()
return 0
var/turf/T = get_turf(user)
T.assume_air(removed)
return 1
/obj/item/weapon/tank/jetpack/void
name = "Void Jetpack (Oxygen)"
@@ -124,8 +138,8 @@
/obj/item/weapon/tank/jetpack/carbondioxide/New()
..()
src.ion_trail = new /datum/effect/system/ion_trail_follow()
src.ion_trail.set_up(src)
ion_trail = new /datum/effect/system/ion_trail_follow()
ion_trail.set_up(src)
air_contents.carbon_dioxide = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
/obj/item/weapon/tank/jetpack/carbondioxide/examine(mob/user)
@@ -133,35 +147,32 @@
return
if(air_contents.carbon_dioxide < 10)
to_chat(user, text("\red <B>The meter on the [src.name] indicates you are almost out of air!</B>"))
to_chat(user, "<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/weapon/tank/jetpack/rig
name = "jetpack"
var/obj/item/weapon/rig/holder
actions_types = list(/datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization)
/obj/item/weapon/tank/jetpack/rig/examine()
to_chat(usr, "It's a jetpack. If you can see this, report it on the bug tracker.")
return 0
/obj/item/weapon/tank/jetpack/rig/allow_thrust(num, mob/living/user as mob)
if(!(src.on))
if(!on)
return 0
if(!istype(holder) || !holder.air_supply)
return 0
var/obj/item/weapon/tank/pressure_vessel = holder.air_supply
if((num < 0.005 || pressure_vessel.air_contents.total_moles() < num))
src.ion_trail.stop()
var/datum/gas_mixture/removed = holder.air_supply.air_contents.remove(num)
if(removed.total_moles() < 0.005)
turn_off()
return 0
var/datum/gas_mixture/G = pressure_vessel.air_contents.remove(num)
var/turf/T = get_turf(user)
T.assume_air(removed)
var/allgases = G.carbon_dioxide + G.nitrogen + G.oxygen + G.toxins
if(allgases >= 0.005)
. = 1
qdel(G)
return 1
@@ -72,7 +72,7 @@
if(..(user, 0))
if(air_contents.oxygen < 1 && loc==usr)
to_chat(user, "\red <B>The meter on the [src.name] indicates you are almost out of air!</B>")
to_chat(user, sound('sound/effects/alert.ogg'))
user << sound('sound/effects/alert.ogg')
/obj/item/weapon/tank/air/New()
..()
@@ -100,9 +100,9 @@
/obj/item/weapon/tank/plasma/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
if (istype(W, /obj/item/weapon/flamethrower))
if(istype(W, /obj/item/weapon/flamethrower))
var/obj/item/weapon/flamethrower/F = W
if ((!F.status)||(F.ptank)) return
if((!F.status)||(F.ptank)) return
src.master = F
F.ptank = src
user.unEquip(src)
@@ -124,7 +124,7 @@
if(..(user, 0))
if(air_contents.toxins < 0.2 && loc==usr)
to_chat(user, text("\red <B>The meter on the [src.name] indicates you are almost out of plasma!</B>"))
to_chat(user, sound('sound/effects/alert.ogg'))
user << sound('sound/effects/alert.ogg')
/*
* Emergency Oxygen
@@ -135,7 +135,7 @@
icon_state = "emergency"
flags = CONDUCT
slot_flags = SLOT_BELT
w_class = 2.0
w_class = 2
force = 4.0
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
volume = 3 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011)
@@ -151,7 +151,7 @@
if(..(user, 0))
if(air_contents.oxygen < 0.2 && loc==usr)
to_chat(user, text("\red <B>The meter on the [src.name] indicates you are almost out of air!</B>"))
to_chat(user, sound('sound/effects/alert.ogg'))
user << sound('sound/effects/alert.ogg')
/obj/item/weapon/tank/emergency_oxygen/engi
name = "extended-capacity emergency oxygen tank"
+79 -68
View File
@@ -16,6 +16,7 @@
throw_speed = 1
throw_range = 4
actions_types = list(/datum/action/item_action/set_internals)
var/datum/gas_mixture/air_contents = null
var/distribute_pressure = ONE_ATMOSPHERE
var/integrity = 3
@@ -24,9 +25,9 @@
/obj/item/weapon/tank/New()
..()
src.air_contents = new /datum/gas_mixture()
src.air_contents.volume = volume //liters
src.air_contents.temperature = T20C
air_contents = new /datum/gas_mixture()
air_contents.volume = volume //liters
air_contents.temperature = T20C
processing_objects.Add(src)
return
@@ -39,42 +40,78 @@
return ..()
/obj/item/weapon/tank/ui_action_click(mob/user)
toggle_internals(user)
/obj/item/weapon/tank/proc/toggle_internals(mob/user)
var/mob/living/carbon/C = user
if(!istype(C))
return 0
if(C.internal == src)
to_chat(C, "<span class='notice'>You close \the [src] valve.</span>")
C.internal = null
C.update_internals_hud_icon(0)
else
var/can_open_valve = 0
if(C.wear_mask && C.wear_mask.flags & AIRTIGHT)
can_open_valve = 1
else if(ishuman(C))
var/mob/living/carbon/human/H = C
if(H.head && H.head.flags & AIRTIGHT)
can_open_valve = 1
if(can_open_valve)
if(C.internal)
to_chat(C, "<span class='notice'>You switch your internals to [src].</span>")
else
to_chat(C, "<span class='notice'>You open \the [src] valve.</span>")
C.internal = src
C.update_internals_hud_icon(1)
else
to_chat(C, "<span class='notice'>You are not wearing a suitable mask or helmet.</span>")
return 0
C.update_action_buttons_icon()
/obj/item/weapon/tank/examine(mob/user)
var/obj/icon = src
if (istype(src.loc, /obj/item/assembly))
icon = src.loc
if (!in_range(src, user))
if (icon == src)
to_chat(user, "\blue It's \a \icon[icon][src]! If you want any more information you'll need to get closer.")
if(istype(loc, /obj/item/assembly))
icon = loc
if(!in_range(src, user))
if(icon == src)
to_chat(user, "\blue It's \a [bicon(icon)][src]! If you want any more information you'll need to get closer.")
return
var/celsius_temperature = src.air_contents.temperature-T0C
var/celsius_temperature = air_contents.temperature-T0C
var/descriptive
if (celsius_temperature < 20)
if(celsius_temperature < 20)
descriptive = "cold"
else if (celsius_temperature < 40)
else if(celsius_temperature < 40)
descriptive = "room temperature"
else if (celsius_temperature < 80)
else if(celsius_temperature < 80)
descriptive = "lukewarm"
else if (celsius_temperature < 100)
else if(celsius_temperature < 100)
descriptive = "warm"
else if (celsius_temperature < 300)
else if(celsius_temperature < 300)
descriptive = "hot"
else
descriptive = "furiously hot"
to_chat(user, "\blue \The \icon[icon][src] feels [descriptive]")
to_chat(user, "\blue \The [bicon(icon)][src] feels [descriptive]")
return
/obj/item/weapon/tank/blob_act()
if(prob(50))
var/turf/location = src.loc
if (!( istype(location, /turf) ))
var/turf/location = loc
if(!( istype(location, /turf) ))
qdel(src)
if(src.air_contents)
if(air_contents)
location.assume_air(air_contents)
qdel(src)
@@ -82,18 +119,18 @@
/obj/item/weapon/tank/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
src.add_fingerprint(user)
if (istype(src.loc, /obj/item/assembly))
icon = src.loc
add_fingerprint(user)
if(istype(loc, /obj/item/assembly))
icon = loc
if ((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1)
if((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1)
atmosanalyzer_scan(air_contents, user)
if(istype(W, /obj/item/device/assembly_holder))
bomb_assemble(W,user)
/obj/item/weapon/tank/attack_self(mob/user as mob)
if (!(src.air_contents))
if(!(air_contents))
return
ui_interact(user)
@@ -130,7 +167,7 @@
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
if(!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
ui = new(user, src, ui_key, "tanks.tmpl", "Tank", 500, 300)
@@ -142,49 +179,23 @@
ui.set_auto_update(1)
/obj/item/weapon/tank/Topic(href, href_list)
..()
if (usr.stat|| usr.restrained())
return 0
if (src.loc != usr)
return 0
if(..())
return 1
if (href_list["dist_p"])
if (href_list["dist_p"] == "reset")
src.distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE
else if (href_list["dist_p"] == "max")
src.distribute_pressure = TANK_MAX_RELEASE_PRESSURE
if(href_list["dist_p"])
if(href_list["dist_p"] == "reset")
distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE
else if(href_list["dist_p"] == "max")
distribute_pressure = TANK_MAX_RELEASE_PRESSURE
else
var/cp = text2num(href_list["dist_p"])
src.distribute_pressure += cp
src.distribute_pressure = min(max(round(src.distribute_pressure), 0), TANK_MAX_RELEASE_PRESSURE)
if (href_list["stat"])
if(istype(loc,/mob/living/carbon))
var/mob/living/carbon/location = loc
if(location.internal == src)
location.internal = null
location.internals.icon_state = "internal0"
to_chat(usr, "\blue You close the tank release valve.")
if (location.internals)
location.internals.icon_state = "internal0"
else
distribute_pressure += cp
distribute_pressure = min(max(round(distribute_pressure), 0), TANK_MAX_RELEASE_PRESSURE)
var/can_open_valve
if(location.wear_mask && (location.wear_mask.flags & AIRTIGHT))
can_open_valve = 1
else if(istype(location,/mob/living/carbon/human))
var/mob/living/carbon/human/H = location
if(H.head && (H.head.flags & AIRTIGHT))
can_open_valve = 1
if(href_list["stat"])
toggle_internals(usr)
if(can_open_valve)
location.internal = src
to_chat(usr, "\blue You open \the [src] valve.")
if (location.internals)
location.internals.icon_state = "internal1"
else
to_chat(usr, "\blue You need something to connect to \the [src].")
src.add_fingerprint(usr)
add_fingerprint(usr)
return 1
@@ -226,9 +237,9 @@
var/pressure = air_contents.return_pressure()
if(pressure > TANK_FRAGMENT_PRESSURE)
if(!istype(src.loc,/obj/item/device/transfer_valve))
message_admins("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
log_game("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast] at [x], [y], [z]")
if(!istype(loc,/obj/item/device/transfer_valve))
message_admins("Explosive tank rupture! last key to touch the tank was [fingerprintslast] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
log_game("Explosive tank rupture! last key to touch the tank was [fingerprintslast] at [x], [y], [z]")
// to_chat(world, "\blue[x],[y] tank is exploding: [pressure] kPa")
//Give the gas a chance to build up more pressure through reacting
air_contents.react()
@@ -241,8 +252,8 @@
// to_chat(world, "\blue Exploding Pressure: [pressure] kPa, intensity: [range]")
explosion(epicenter, round(range*0.25), round(range*0.5), round(range), round(range*1.5))
if(istype(src.loc,/obj/item/device/transfer_valve))
qdel(src.loc)
if(istype(loc,/obj/item/device/transfer_valve))
qdel(loc)
else
qdel(src)
@@ -253,7 +264,7 @@
if(!T)
return
T.assume_air(air_contents)
playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3)
playsound(loc, 'sound/effects/spray.ogg', 10, 1, -3)
qdel(src)
else
integrity--
@@ -5,10 +5,10 @@
icon = 'icons/obj/watertank.dmi'
icon_state = "waterbackpack"
item_state = "waterbackpack"
w_class = 4.0
w_class = 4
slot_flags = SLOT_BACK
slowdown = 1
action_button_name = "Toggle Mister"
actions_types = list(/datum/action/item_action/toggle_mister)
var/obj/item/weapon/noz
var/on = 0
@@ -22,10 +22,14 @@
/obj/item/weapon/watertank/ui_action_click()
toggle_mister()
/obj/item/weapon/watertank/item_action_slot_check(slot, mob/user)
if(slot == slot_back)
return 1
/obj/item/weapon/watertank/verb/toggle_mister()
set name = "Toggle Mister"
set category = "Object"
if (usr.get_item_by_slot(slot_back) != src)
if(usr.get_item_by_slot(slot_back) != src)
to_chat(usr, "<span class='notice'>The watertank needs to be on your back to use.</span>")
return
if(usr.incapacitated())
@@ -52,7 +56,8 @@
return new /obj/item/weapon/reagent_containers/spray/mister(src)
/obj/item/weapon/watertank/equipped(mob/user, slot)
if (slot != slot_back)
..()
if(slot != slot_back)
remove_noz()
/obj/item/weapon/watertank/proc/remove_noz()
@@ -62,7 +67,7 @@
return
/obj/item/weapon/watertank/Destroy()
if (on)
if(on)
remove_noz()
qdel(noz)
noz = null
@@ -75,8 +80,8 @@
..()
/obj/item/weapon/watertank/MouseDrop(obj/over_object)
if(ishuman(src.loc))
var/mob/living/carbon/human/H = src.loc
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
switch(over_object.name)
if("r_hand")
if(H.r_hand)
@@ -108,7 +113,7 @@
icon = 'icons/obj/watertank.dmi'
icon_state = "mister"
item_state = "mister"
w_class = 4.0
w_class = 4
amount_per_transfer_from_this = 50
possible_transfer_amounts = list(25,50,100)
volume = 500
@@ -125,6 +130,7 @@
return
/obj/item/weapon/reagent_containers/spray/mister/dropped(mob/user as mob)
..()
to_chat(user, "<span class='notice'>The mister snaps back onto the watertank.</span>")
tank.on = 0
loc = tank
@@ -133,7 +139,7 @@
return
/proc/check_tank_exists(parent_tank, var/mob/living/carbon/human/M, var/obj/O)
if (!parent_tank || !istype(parent_tank, /obj/item/weapon/watertank)) //To avoid weird issues from admin spawns
if(!parent_tank || !istype(parent_tank, /obj/item/weapon/watertank)) //To avoid weird issues from admin spawns
M.unEquip(O)
qdel(0)
return 0
@@ -198,6 +204,7 @@
return new /obj/item/weapon/extinguisher/mini/nozzle(src)
/obj/item/weapon/watertank/atmos/dropped(mob/user as mob)
..()
icon_state = "waterbackpackatmos"
if(istype(noz, /obj/item/weapon/extinguisher/mini/nozzle))
var/obj/item/weapon/extinguisher/mini/nozzle/N = noz
@@ -255,6 +262,7 @@
return
/obj/item/weapon/extinguisher/mini/nozzle/dropped(mob/user as mob)
..()
to_chat(user, "<span class='notice'>The nozzle snaps back onto the tank!</span>")
tank.on = 0
loc = tank
@@ -17,7 +17,7 @@
var/broadcasting = null
var/listening = 1.0
flags = CONDUCT
w_class = 2.0
w_class = 2
item_state = "electronic"
throw_speed = 4
throw_range = 20
@@ -27,7 +27,7 @@
/obj/item/weapon/locator/attack_self(mob/user as mob)
add_fingerprint(usr)
var/dat
if (temp)
if(temp)
dat = "[src.temp]<BR><BR><A href='byond://?src=\ref[src];temp=1'>Clear</A>"
else
dat = {"
@@ -52,25 +52,25 @@ Frequency:
to_chat(usr, "<span class='warning'>\The [src] is malfunctioning.</span>")
return 1
if (href_list["refresh"])
if(href_list["refresh"])
temp = "<B>Persistent Signal Locator</B><HR>"
var/turf/sr = get_turf(src)
if (sr)
if(sr)
temp += "<B>Located Beacons:</B><BR>"
for(var/obj/item/device/radio/beacon/W in beacons)
if (W.frequency == frequency && !W.syndicate)
if (W && W.z == z)
if(W.frequency == frequency && !W.syndicate)
if(W && W.z == z)
var/turf/TB = get_turf(W)
temp += "[W.code]: [TB.x], [TB.y], [TB.z]<BR>"
temp += "<B>Located Implants:</B><BR>"
for (var/obj/item/weapon/implant/tracking/T in tracked_implants)
if (!T.implanted || !T.imp_in)
for(var/obj/item/weapon/implant/tracking/T in tracked_implants)
if(!T.implanted || !T.imp_in)
continue
if (T && T.z == z)
if(T && T.z == z)
temp += "[T.id]: [T.imp_in.x], [T.imp_in.y], [T.imp_in.z]<BR>"
temp += "<B>You are at \[[sr.x],[sr.y],[sr.z]\]</B>."
@@ -78,11 +78,11 @@ Frequency:
else
temp += "<B><FONT color='red'>Processing error:</FONT></B> Unable to locate orbital position.<BR>"
else
if (href_list["freq"])
if(href_list["freq"])
frequency += text2num(href_list["freq"])
frequency = sanitize_frequency(frequency)
else
if (href_list["temp"])
if(href_list["temp"])
temp = null
attack_self(usr)
@@ -98,7 +98,7 @@ Frequency:
icon_state = "hand_tele"
item_state = "electronic"
throwforce = 0
w_class = 2.0
w_class = 2
throw_speed = 3
throw_range = 5
materials = list(MAT_METAL=10000)
@@ -123,12 +123,12 @@ Frequency:
if(T.x>world.maxx-8 || T.x<8) continue //putting them at the edge is dumb
if(T.y>world.maxy-8 || T.y<8) continue
A = get_area(T)
if (A.tele_proof == 1) continue // Telescience-proofed areas require a beacon.
if(A.tele_proof == 1) continue // Telescience-proofed areas require a beacon.
turfs += T
if(turfs.len)
L["None (Dangerous)"] = pick(turfs)
var/t1 = input(user, "Please select a teleporter to lock in on.", "Hand Teleporter") as null|anything in L
if (!t1 || (user.get_active_hand() != src || user.stat || user.restrained()))
if(!t1 || (user.get_active_hand() != src || user.stat || user.restrained()))
return
if(active_portals >= 3)
user.show_message("<span class='notice'>\The [src] is recharging!</span>")
+20 -20
View File
@@ -24,7 +24,7 @@
slot_flags = SLOT_BELT
force = 5.0
throwforce = 7.0
w_class = 2.0
w_class = 2
materials = list(MAT_METAL=150)
origin_tech = "materials=1;engineering=1"
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
@@ -41,7 +41,7 @@
flags = CONDUCT
slot_flags = SLOT_BELT
force = 5.0
w_class = 1.0
w_class = 1
throwforce = 5.0
throw_speed = 3
throw_range = 5
@@ -56,29 +56,29 @@
/obj/item/weapon/screwdriver/New()
switch(pick("red","blue","purple","brown","green","cyan","yellow"))
if ("red")
if("red")
icon_state = "screwdriver2"
item_state = "screwdriver"
if ("blue")
if("blue")
icon_state = "screwdriver"
item_state = "screwdriver_blue"
if ("purple")
if("purple")
icon_state = "screwdriver3"
item_state = "screwdriver_purple"
if ("brown")
if("brown")
icon_state = "screwdriver4"
item_state = "screwdriver_brown"
if ("green")
if("green")
icon_state = "screwdriver5"
item_state = "screwdriver_green"
if ("cyan")
if("cyan")
icon_state = "screwdriver6"
item_state = "screwdriver_cyan"
if ("yellow")
if("yellow")
icon_state = "screwdriver7"
item_state = "screwdriver_yellow"
if (prob(75))
if(prob(75))
src.pixel_y = rand(0, 16)
return
@@ -104,7 +104,7 @@
force = 6.0
throw_speed = 3
throw_range = 7
w_class = 2.0
w_class = 2
materials = list(MAT_METAL=80)
origin_tech = "materials=1;engineering=1"
attack_verb = list("pinched", "nipped")
@@ -119,7 +119,7 @@
item_state = "cutters_yellow"
/obj/item/weapon/wirecutters/attack(mob/living/carbon/human/C as mob, mob/user as mob)
if(C.handcuffed)
if(istype(C) && C.handcuffed)
if(istype(C.handcuffed, /obj/item/weapon/restraints/handcuffs/cable))
usr.visible_message("\The [usr] cuts \the [C]'s restraints with \the [src]!",\
"You cut \the [C]'s restraints with \the [src]!",\
@@ -235,7 +235,7 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/S = H.organs_by_name[user.zone_sel.selecting]
if (!S)
if(!S)
return
if(!(S.status & ORGAN_ROBOT) || user.a_intent != I_HELP || S.open == 2)
@@ -243,7 +243,7 @@
if(S.brute_dam)
if(S.brute_dam < ROBOLIMB_SELF_REPAIR_CAP)
if (remove_fuel(0,null))
if(remove_fuel(0,null))
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
S.heal_damage(15,0,0,1)
user.visible_message("<span class='alert'>\The [user] patches some dents on \the [M]'s [S.name] with \the [src].</span>")
@@ -345,7 +345,7 @@
if(!message)
to_chat(user, "<span class='notice'>You switch [src] off.</span>")
else
to_chat(user, "<span class='warning'>[src] shuts off!</span>")
visible_message("<span class='warning'>[src] shuts off!</span>")
force = 3
damtype = "brute"
hitsound = "swing_hit"
@@ -365,7 +365,7 @@
/obj/item/weapon/weldingtool/proc/flamethrower_rods(obj/item/I, mob/user)
if(!status)
var/obj/item/stack/rods/R = I
if (R.use(1))
if(R.use(1))
var/obj/item/weapon/flamethrower/F = new /obj/item/weapon/flamethrower(user.loc)
if(!remove_item_from_storage(F))
user.unEquip(src)
@@ -409,7 +409,7 @@
icon_state = "upindwelder"
item_state = "upindwelder"
max_fuel = 80
w_class = 3.0
w_class = 3
materials = list(MAT_METAL=70, MAT_GLASS=120)
origin_tech = "engineering=3"
@@ -419,7 +419,7 @@
icon_state = "exwelder"
item_state = "exwelder"
max_fuel = 40
w_class = 3.0
w_class = 3
materials = list(MAT_METAL=70, MAT_GLASS=120)
origin_tech = "engineering=4;plasmatech=3"
var/last_gen = 0
@@ -453,7 +453,7 @@
force = 5.0
throwforce = 7.0
item_state = "crowbar"
w_class = 2.0
w_class = 2
materials = list(MAT_METAL=50)
origin_tech = "engineering=1"
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
@@ -479,7 +479,7 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "kit"
flags = CONDUCT
w_class = 2.0
w_class = 2
origin_tech = "combat=2"
var/open = 0
+17 -24
View File
@@ -74,7 +74,7 @@
to_chat(user, "<span class='notice'>You dedicate your module to [name].</span>")
else
to_chat(user, "<span class='notice'>You grab the [name] with both hands.</span>")
if (wieldsound)
if(wieldsound)
playsound(loc, wieldsound, 50, 1)
var/obj/item/weapon/twohanded/offhand/O = new(user) ////Let's reserve his other hand~
O.name = "[name] - offhand"
@@ -90,12 +90,13 @@
return ..()
/obj/item/weapon/twohanded/dropped(mob/user)
..()
//handles unwielding a twohanded weapon when dropped as well as clearing up the offhand
if(user)
var/obj/item/weapon/twohanded/O = user.get_inactive_hand()
if(istype(O))
O.unwield(user)
return unwield(user)
return unwield(user)
/obj/item/weapon/twohanded/update_icon()
return
@@ -109,7 +110,7 @@
///////////OFFHAND///////////////
/obj/item/weapon/twohanded/offhand
w_class = 5.0
w_class = 5
icon_state = "offhand"
name = "offhand"
flags = ABSTRACT
@@ -120,18 +121,10 @@
/obj/item/weapon/twohanded/offhand/wield()
qdel(src)
/obj/item/weapon/twohanded/offhand/IsShield()//if the actual twohanded weapon is a shield, we count as a shield too!
var/mob/user = loc
if(!istype(user)) return 0
var/obj/item/I = user.get_active_hand()
if(I == src) I = user.get_inactive_hand()
if(!I) return 0
return I.IsShield()
///////////Two hand required objects///////////////
//This is for objects that require two hands to even pick up
/obj/item/weapon/twohanded/required/
w_class = 5.0
w_class = 5
/obj/item/weapon/twohanded/required/attack_self()
return
@@ -165,7 +158,7 @@
throwforce = 15
sharp = 1
edge = 1
w_class = 4.0
w_class = 4
slot_flags = SLOT_BACK
force_unwielded = 5
force_wielded = 24
@@ -200,14 +193,15 @@
throwforce = 5.0
throw_speed = 1
throw_range = 5
w_class = 2.0
w_class = 2
force_unwielded = 3
force_wielded = 34
wieldsound = 'sound/weapons/saberon.ogg'
unwieldsound = 'sound/weapons/saberoff.ogg'
flags = NOSHIELD
armour_penetration = 35
origin_tech = "magnets=3;syndicate=4"
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
block_chance = 75
sharp = 1
edge = 1
no_embed = 1 // Like with the single-handed esword, this shouldn't be embedding in people.
@@ -237,11 +231,10 @@
user.dir = i
sleep(1)
/obj/item/weapon/twohanded/dualsaber/IsShield()
/obj/item/weapon/twohanded/dualsaber/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
if(wielded)
return 1
else
return 0
return ..()
return 0
/obj/item/weapon/twohanded/dualsaber/green/New()
blade_color = "green"
@@ -287,14 +280,14 @@
name = "spear"
desc = "A haphazardly-constructed yet still deadly weapon of ancient design."
force = 10
w_class = 4.0
w_class = 4
slot_flags = SLOT_BACK
force_unwielded = 10
force_wielded = 18 // Was 13, Buffed - RR
throwforce = 20
throw_speed = 3
armour_penetration = 10
no_spin_thrown = 1 // Thrown spears that spin look dumb. -Fox
flags = NOSHIELD
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
/obj/item/weapon/twohanded/spear/update_icon()
@@ -364,12 +357,12 @@
throwforce = 15
throw_speed = 1
throw_range = 5
w_class = 4.0 // can't fit in backpacks
w_class = 4 // can't fit in backpacks
force_unwielded = 15 //still pretty robust
force_wielded = 40 //you'll gouge their eye out! Or a limb...maybe even their entire body!
wieldsound = 'sound/weapons/chainsawstart.ogg'
hitsound = null
flags = NOSHIELD
armour_penetration = 35
origin_tech = "materials=6;syndicate=4"
attack_verb = list("sawed", "cut", "hacked", "carved", "cleaved", "butchered", "felled", "timbered")
sharp = 1
@@ -578,7 +571,7 @@
Z.ex_act(2)
charged = 3
playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
else if (istype(A, /obj/structure) || istype(A, /obj/mecha/))
else if(istype(A, /obj/structure) || istype(A, /obj/mecha/))
var/obj/Z = A
Z.ex_act(2)
charged = 3
@@ -10,7 +10,7 @@
throwforce = 10.0
throw_speed = 1
throw_range = 7
w_class = 4.0
w_class = 4
var/charges = 0 //how many restocking "charges" the refill has
+6 -10
View File
@@ -5,7 +5,7 @@
icon_state = "toyhammer"
slot_flags = SLOT_BELT
throwforce = 0
w_class = 1.0
w_class = 1
throw_speed = 7
throw_range = 15
attack_verb = list("banned")
@@ -50,13 +50,11 @@
edge = 1
w_class = 3
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
block_chance = 50
IsShield()
return 1
suicide_act(mob/user)
to_chat(viewers(user), "<span class='suicide'>[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.</span>")
return(BRUTELOSS)
/obj/item/weapon/claymore/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.</span>")
return(BRUTELOSS)
/obj/item/weapon/claymore/ceremonial
name = "ceremonial claymore"
@@ -77,6 +75,7 @@
w_class = 3
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
block_chance = 50
/obj/item/weapon/katana/cursed
slot_flags = null
@@ -85,9 +84,6 @@
user.visible_message("<span class='suicide'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>")
return(BRUTELOSS)
/obj/item/weapon/katana/IsShield()
return 1
/obj/item/weapon/harpoon
name = "harpoon"
sharp = 1
+2 -2
View File
@@ -17,7 +17,7 @@
/obj/item/weapon/wire/proc/update()
if (src.amount > 1)
if(src.amount > 1)
src.icon_state = "spool_wire"
src.desc = text("This is just spool of regular insulated wire. It consists of about [] unit\s of wire.", src.amount)
else
@@ -26,7 +26,7 @@
return
/obj/item/weapon/wire/attack_self(mob/user as mob)
if (src.laying)
if(src.laying)
src.laying = 0
to_chat(user, "\blue You're done laying wire!")
else