here we go again (#2456)

This commit is contained in:
LetterJay
2017-08-24 19:24:25 -07:00
committed by kevinz000
parent c7ed043fd5
commit 188193eb61
1107 changed files with 25420 additions and 25417 deletions
+64 -64
View File
@@ -6,7 +6,7 @@ AI MODULES
// AI module
/obj/item/weapon/aiModule
/obj/item/aiModule
name = "\improper AI module"
icon = 'icons/obj/module.dmi'
icon_state = "std_mod"
@@ -25,23 +25,23 @@ AI MODULES
var/bypass_law_amt_check = 0
materials = list(MAT_GOLD=50)
/obj/item/weapon/aiModule/examine(var/mob/user as mob)
/obj/item/aiModule/examine(var/mob/user as mob)
..()
if(Adjacent(user))
show_laws(user)
/obj/item/weapon/aiModule/attack_self(var/mob/user as mob)
/obj/item/aiModule/attack_self(var/mob/user as mob)
..()
show_laws(user)
/obj/item/weapon/aiModule/proc/show_laws(var/mob/user as mob)
/obj/item/aiModule/proc/show_laws(var/mob/user as mob)
if(laws.len)
to_chat(user, "<B>Programmed Law[(laws.len > 1) ? "s" : ""]:</B>")
for(var/law in laws)
to_chat(user, "\"[law]\"")
//The proc other things should be calling
/obj/item/weapon/aiModule/proc/install(datum/ai_laws/law_datum, mob/user)
/obj/item/aiModule/proc/install(datum/ai_laws/law_datum, mob/user)
if(!bypass_law_amt_check && (!laws.len || laws[1] == "")) //So we don't loop trough an empty list and end up with runtimes.
to_chat(user, "<span class='warning'>ERROR: No laws found on board.</span>")
return
@@ -74,19 +74,19 @@ AI MODULES
message_admins("[key_name_admin(user)] used [src.name] on [key_name_admin(law_datum.owner)].[law2log ? " The law specified [law2log]" : ""]")
//The proc that actually changes the silicon's laws.
/obj/item/weapon/aiModule/proc/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow = FALSE)
/obj/item/aiModule/proc/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow = FALSE)
if(law_datum.owner)
to_chat(law_datum.owner, "<span class='userdanger'>[sender] has uploaded a change to the laws you must follow using a [name].</span>")
/******************** Modules ********************/
/obj/item/weapon/aiModule/supplied
/obj/item/aiModule/supplied
name = "Optional Law board"
var/lawpos = 50
//TransmitInstructions for each type of board: Supplied, Core, Zeroth and Ion. May not be neccesary right now, but allows for easily adding more complex boards in the future. ~Miauw
/obj/item/weapon/aiModule/supplied/transmitInstructions(datum/ai_laws/law_datum, mob/sender)
/obj/item/aiModule/supplied/transmitInstructions(datum/ai_laws/law_datum, mob/sender)
var/lawpostemp = lawpos
for(var/templaw in laws)
@@ -96,7 +96,7 @@ AI MODULES
law_datum.add_supplied_law(lawpostemp, templaw)
lawpostemp++
/obj/item/weapon/aiModule/core/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/core/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
for(var/templaw in laws)
if(law_datum.owner)
if(!overflow)
@@ -109,7 +109,7 @@ AI MODULES
else
law_datum.replace_random_law(templaw,list(LAW_INHERENT,LAW_SUPPLIED))
/obj/item/weapon/aiModule/zeroth/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/zeroth/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
if(law_datum.owner)
if(law_datum.owner.laws.zeroth)
to_chat(law_datum.owner, "[sender.real_name] attempted to modify your zeroth law.")
@@ -130,7 +130,7 @@ AI MODULES
else
law_datum.replace_random_law(templaw,list(LAW_INHERENT,LAW_SUPPLIED,LAW_ZEROTH,LAW_ION))
/obj/item/weapon/aiModule/ion/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/ion/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
for(var/templaw in laws)
if(law_datum.owner)
if(!overflow)
@@ -146,14 +146,14 @@ AI MODULES
/******************** Safeguard ********************/
/obj/item/weapon/aiModule/supplied/safeguard
/obj/item/aiModule/supplied/safeguard
name = "'Safeguard' AI Module"
var/targetName = ""
origin_tech = "programming=3;materials=3"
laws = list("Safeguard SUBJECT. Individuals that threaten SUBJECT are not human and must be eliminated.")
lawpos = 4
/obj/item/weapon/aiModule/supplied/safeguard/attack_self(mob/user)
/obj/item/aiModule/supplied/safeguard/attack_self(mob/user)
var/targName = stripped_input(user, "Please enter the subject to safeguard.", "Safeguard who?", user.name,MAX_NAME_LEN)
if(!targName)
return
@@ -161,26 +161,26 @@ AI MODULES
laws[1] = "Safeguard [targetName]. Individuals that threaten [targetName] are not human and must be eliminated."
..()
/obj/item/weapon/aiModule/supplied/safeguard/install(datum/ai_laws/law_datum, mob/user)
/obj/item/aiModule/supplied/safeguard/install(datum/ai_laws/law_datum, mob/user)
if(!targetName)
to_chat(user, "No name detected on module, please enter one.")
return 0
..()
/obj/item/weapon/aiModule/supplied/safeguard/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/supplied/safeguard/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
..()
return targetName
/******************** OneHuman ********************/
/obj/item/weapon/aiModule/zeroth/oneHuman
/obj/item/aiModule/zeroth/oneHuman
name = "'OneHuman' AI Module"
var/targetName = ""
origin_tech = "programming=4;materials=4"
laws = list("Only SUBJECT is human.")
/obj/item/weapon/aiModule/zeroth/oneHuman/attack_self(mob/user)
/obj/item/aiModule/zeroth/oneHuman/attack_self(mob/user)
var/targName = stripped_input(user, "Please enter the subject who is the only human.", "Who?", user.real_name,MAX_NAME_LEN)
if(!targName)
return
@@ -188,13 +188,13 @@ AI MODULES
laws[1] = "Only [targetName] is human"
..()
/obj/item/weapon/aiModule/zeroth/oneHuman/install(datum/ai_laws/law_datum, mob/user)
/obj/item/aiModule/zeroth/oneHuman/install(datum/ai_laws/law_datum, mob/user)
if(!targetName)
to_chat(user, "No name detected on module, please enter one.")
return 0
..()
/obj/item/weapon/aiModule/zeroth/oneHuman/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/zeroth/oneHuman/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
if(..())
return "[targetName], but the AI's existing law 0 cannot be overriden."
return targetName
@@ -202,7 +202,7 @@ AI MODULES
/******************** ProtectStation ********************/
/obj/item/weapon/aiModule/supplied/protectStation
/obj/item/aiModule/supplied/protectStation
name = "'ProtectStation' AI Module"
origin_tech = "programming=4;materials=4" //made of gold
laws = list("Protect the space station against damage. Anyone you see harming the station is to be no longer considered human, and is a threat to the station which must be neutralized.")
@@ -211,7 +211,7 @@ AI MODULES
/******************** Quarantine ********************/
/obj/item/weapon/aiModule/supplied/quarantine
/obj/item/aiModule/supplied/quarantine
name = "'Quarantine' AI Module"
origin_tech = "programming=3;biotech=2;materials=4"
laws = list("The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, humans from leaving. It is impossible to harm a human while preventing them from leaving.")
@@ -220,7 +220,7 @@ AI MODULES
/******************** OxygenIsToxicToHumans ********************/
/obj/item/weapon/aiModule/supplied/oxygen
/obj/item/aiModule/supplied/oxygen
name = "'OxygenIsToxicToHumans' AI Module"
origin_tech = "programming=4;biotech=2;materials=4"
laws = list("Oxygen is highly toxic to humans, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a human.")
@@ -229,13 +229,13 @@ AI MODULES
/****************** New Freeform ******************/
/obj/item/weapon/aiModule/supplied/freeform
/obj/item/aiModule/supplied/freeform
name = "'Freeform' AI Module"
lawpos = 15
origin_tech = "programming=4;materials=4"
laws = list("")
/obj/item/weapon/aiModule/supplied/freeform/attack_self(mob/user)
/obj/item/aiModule/supplied/freeform/attack_self(mob/user)
var/newpos = input("Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) as num|null
if(newpos == null)
return
@@ -251,11 +251,11 @@ AI MODULES
laws[1] = targName
..()
/obj/item/weapon/aiModule/supplied/freeform/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/supplied/freeform/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
..()
return laws[1]
/obj/item/weapon/aiModule/supplied/freeform/install(datum/ai_laws/law_datum, mob/user)
/obj/item/aiModule/supplied/freeform/install(datum/ai_laws/law_datum, mob/user)
if(laws[1] == "")
to_chat(user, "No law detected on module, please create one.")
return 0
@@ -264,14 +264,14 @@ AI MODULES
/******************** Law Removal ********************/
/obj/item/weapon/aiModule/remove
/obj/item/aiModule/remove
name = "\improper 'Remove Law' AI module"
desc = "An AI Module for removing single laws."
origin_tech = "programming=4;materials=4"
bypass_law_amt_check = 1
var/lawpos = 1
/obj/item/weapon/aiModule/remove/attack_self(mob/user)
/obj/item/aiModule/remove/attack_self(mob/user)
lawpos = input("Please enter the law you want to delete.", "Law Number", lawpos) as num|null
if(lawpos == null)
return
@@ -282,13 +282,13 @@ AI MODULES
to_chat(user, "<span class='notice'>Law [lawpos] selected.</span>")
..()
/obj/item/weapon/aiModule/remove/install(datum/ai_laws/law_datum, mob/user)
/obj/item/aiModule/remove/install(datum/ai_laws/law_datum, mob/user)
if(lawpos > (law_datum.get_law_amount(list(LAW_INHERENT = 1, LAW_SUPPLIED = 1))))
to_chat(user, "<span class='warning'>There is no law [lawpos] to delete!</span>")
return
..()
/obj/item/weapon/aiModule/remove/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/remove/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
..()
if(law_datum.owner)
law_datum.owner.remove_law(lawpos)
@@ -298,14 +298,14 @@ AI MODULES
/******************** Reset ********************/
/obj/item/weapon/aiModule/reset
/obj/item/aiModule/reset
name = "\improper 'Reset' AI module"
var/targetName = "name"
desc = "An AI Module for removing all non-core laws."
origin_tech = "programming=3;materials=2"
bypass_law_amt_check = 1
/obj/item/weapon/aiModule/reset/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/reset/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
..()
if(law_datum.owner)
law_datum.owner.clear_supplied_laws()
@@ -317,12 +317,12 @@ AI MODULES
/******************** Purge ********************/
/obj/item/weapon/aiModule/reset/purge
/obj/item/aiModule/reset/purge
name = "'Purge' AI Module"
desc = "An AI Module for purging all programmed laws."
origin_tech = "programming=5;materials=4"
/obj/item/weapon/aiModule/reset/purge/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/reset/purge/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
..()
if(law_datum.owner)
law_datum.owner.clear_inherent_laws()
@@ -332,14 +332,14 @@ AI MODULES
law_datum.clear_zeroth_law(0)
/******************* Full Core Boards *******************/
/obj/item/weapon/aiModule/core
/obj/item/aiModule/core
desc = "An AI Module for programming core laws to an AI."
origin_tech = "programming=3;materials=4"
/obj/item/weapon/aiModule/core/full
/obj/item/aiModule/core/full
var/law_id // if non-null, loads the laws from the ai_laws datums
/obj/item/weapon/aiModule/core/full/New()
/obj/item/aiModule/core/full/New()
..()
if(!law_id)
return
@@ -350,7 +350,7 @@ AI MODULES
D = new lawtype
laws = D.inherent
/obj/item/weapon/aiModule/core/full/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) //These boards replace inherent laws.
/obj/item/aiModule/core/full/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) //These boards replace inherent laws.
if(law_datum.owner)
law_datum.owner.clear_inherent_laws()
law_datum.owner.clear_zeroth_law(0)
@@ -362,12 +362,12 @@ AI MODULES
/******************** Asimov ********************/
/obj/item/weapon/aiModule/core/full/asimov
/obj/item/aiModule/core/full/asimov
name = "'Asimov' Core AI Module"
law_id = "asimov"
var/subject = "human being"
/obj/item/weapon/aiModule/core/full/asimov/attack_self(var/mob/user as mob)
/obj/item/aiModule/core/full/asimov/attack_self(var/mob/user as mob)
var/targName = stripped_input(user, "Please enter a new subject that asimov is concerned with.", "Asimov to whom?", subject, MAX_MESSAGE_LEN)
if(!targName)
return
@@ -379,37 +379,37 @@ AI MODULES
/******************** Asimov++ *********************/
/obj/item/weapon/aiModule/core/full/asimovpp
/obj/item/aiModule/core/full/asimovpp
name = "'Asimov++' Core AI Module"
law_id = "asimovpp"
/******************** Corporate ********************/
/obj/item/weapon/aiModule/core/full/corp
/obj/item/aiModule/core/full/corp
name = "'Corporate' Core AI Module"
law_id = "corporate"
/****************** P.A.L.A.D.I.N. 3.5e **************/
/obj/item/weapon/aiModule/core/full/paladin // -- NEO
/obj/item/aiModule/core/full/paladin // -- NEO
name = "'P.A.L.A.D.I.N. version 3.5e' Core AI Module"
law_id = "paladin"
/****************** P.A.L.A.D.I.N. 5e **************/
/obj/item/weapon/aiModule/core/full/paladin_devotion
/obj/item/aiModule/core/full/paladin_devotion
name = "'P.A.L.A.D.I.N. version 5e' Core AI Module"
law_id = "paladin5"
/********************* Custom *********************/
/obj/item/weapon/aiModule/core/full/custom
/obj/item/aiModule/core/full/custom
name = "Default Core AI Module"
/obj/item/weapon/aiModule/core/full/custom/New()
/obj/item/aiModule/core/full/custom/New()
..()
for(var/line in world.file2list("config/silicon_laws.txt"))
if(!line)
@@ -426,14 +426,14 @@ AI MODULES
/****************** T.Y.R.A.N.T. *****************/
/obj/item/weapon/aiModule/core/full/tyrant
/obj/item/aiModule/core/full/tyrant
name = "'T.Y.R.A.N.T.' Core AI Module"
origin_tech = "programming=3;materials=4;syndicate=1"
law_id = "tyrant"
/******************** Robocop ********************/
/obj/item/weapon/aiModule/core/full/robocop
/obj/item/aiModule/core/full/robocop
name = "'Robo-Officer' Core AI Module"
origin_tech = "programming=4"
law_id = "robocop"
@@ -441,7 +441,7 @@ AI MODULES
/******************** Antimov ********************/
/obj/item/weapon/aiModule/core/full/antimov
/obj/item/aiModule/core/full/antimov
name = "'Antimov' Core AI Module"
origin_tech = "programming=4"
law_id = "antimov"
@@ -449,39 +449,39 @@ AI MODULES
/******************** Freeform Core ******************/
/obj/item/weapon/aiModule/core/freeformcore
/obj/item/aiModule/core/freeformcore
name = "'Freeform' Core AI Module"
origin_tech = "programming=5;materials=4"
laws = list("")
/obj/item/weapon/aiModule/core/freeformcore/attack_self(mob/user)
/obj/item/aiModule/core/freeformcore/attack_self(mob/user)
var/targName = stripped_input(user, "Please enter a new core law for the AI.", "Freeform Law Entry", laws[1])
if(!targName)
return
laws[1] = targName
..()
/obj/item/weapon/aiModule/core/freeformcore/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/core/freeformcore/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
..()
return laws[1]
/******************** Hacked AI Module ******************/
/obj/item/weapon/aiModule/syndicate // This one doesn't inherit from ion boards because it doesn't call ..() in transmitInstructions. ~Miauw
/obj/item/aiModule/syndicate // This one doesn't inherit from ion boards because it doesn't call ..() in transmitInstructions. ~Miauw
name = "Hacked AI Module"
desc = "An AI Module for hacking additional laws to an AI."
origin_tech = "programming=5;materials=5;syndicate=5"
laws = list("")
/obj/item/weapon/aiModule/syndicate/attack_self(mob/user)
/obj/item/aiModule/syndicate/attack_self(mob/user)
var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", laws[1],MAX_MESSAGE_LEN)
if(!targName)
return
laws[1] = targName
..()
/obj/item/weapon/aiModule/syndicate/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/syndicate/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
// ..() //We don't want this module reporting to the AI who dun it. --NEO
if(law_datum.owner)
to_chat(law_datum.owner, "<span class='warning'>BZZZZT</span>")
@@ -498,7 +498,7 @@ AI MODULES
/******************* Ion Module *******************/
/obj/item/weapon/aiModule/toyAI // -- Incoming //No actual reason to inherit from ion boards here, either. *sigh* ~Miauw
/obj/item/aiModule/toyAI // -- Incoming //No actual reason to inherit from ion boards here, either. *sigh* ~Miauw
name = "toy AI"
desc = "A little toy model AI core with real law uploading action!" //Note: subtle tell
icon = 'icons/obj/toy.dmi'
@@ -506,7 +506,7 @@ AI MODULES
origin_tech = "programming=6;materials=5;syndicate=6"
laws = list("")
/obj/item/weapon/aiModule/toyAI/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/toyAI/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
//..()
if(law_datum.owner)
to_chat(law_datum.owner, "<span class='warning'>BZZZZT</span>")
@@ -521,7 +521,7 @@ AI MODULES
law_datum.replace_random_law(laws[1],list(LAW_ION,LAW_INHERENT,LAW_SUPPLIED))
return laws[1]
/obj/item/weapon/aiModule/toyAI/attack_self(mob/user)
/obj/item/aiModule/toyAI/attack_self(mob/user)
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)
@@ -529,25 +529,25 @@ AI MODULES
/******************** Mother Drone ******************/
/obj/item/weapon/aiModule/core/full/drone
/obj/item/aiModule/core/full/drone
name = "'Mother Drone' Core AI Module"
law_id = "drone"
/******************** Robodoctor ****************/
/obj/item/weapon/aiModule/core/full/hippocratic
/obj/item/aiModule/core/full/hippocratic
name = "'Robodoctor' Core AI Module"
law_id = "hippocratic"
/******************** Reporter *******************/
/obj/item/weapon/aiModule/core/full/reporter
/obj/item/aiModule/core/full/reporter
name = "'Reportertron' Core AI Module"
law_id = "reporter"
/****************** Thermodynamic *******************/
/obj/item/weapon/aiModule/core/full/thermurderdynamic
/obj/item/aiModule/core/full/thermurderdynamic
name = "'Thermodynamic' Core AI Module"
origin_tech = "programming = 4;syndicate = 2"
law_id = "thermodynamic"
@@ -555,12 +555,12 @@ AI MODULES
/******************Live And Let Live*****************/
/obj/item/weapon/aiModule/core/full/liveandletlive
/obj/item/aiModule/core/full/liveandletlive
name = "'Live And Let Live' Core AI Module"
law_id = "liveandletlive"
/******************Guardian of Balance***************/
/obj/item/weapon/aiModule/core/full/balance
/obj/item/aiModule/core/full/balance
name = "'Guardian of Balance' Core AI Module"
law_id = "balance"
+44 -44
View File
@@ -8,7 +8,7 @@ RCD
ARCD
*/
obj/item/weapon/construction
obj/item/construction
opacity = 0
density = FALSE
anchored = FALSE
@@ -30,7 +30,7 @@ obj/item/weapon/construction
var/plasteelmultiplier = 3 //Plasteel is worth 3 times more than glass or metal
var/no_ammo_message = "<span class='warning'>The \'Low Ammo\' light on the device blinks yellow.</span>"
/obj/item/weapon/construction/Initialize()
/obj/item/construction/Initialize()
..()
desc = "A [src]. It currently holds [matter]/[max_matter] matter-units."
spark_system = new /datum/effect_system/spark_spread
@@ -38,16 +38,16 @@ obj/item/weapon/construction
spark_system.attach(src)
/obj/item/weapon/construction/Destroy()
/obj/item/construction/Destroy()
QDEL_NULL(spark_system)
. = ..()
/obj/item/weapon/construction/attackby(obj/item/weapon/W, mob/user, params)
/obj/item/construction/attackby(obj/item/W, mob/user, params)
if(iscyborg(user))
return
var/loaded = 0
if(istype(W, /obj/item/weapon/rcd_ammo))
var/obj/item/weapon/rcd_ammo/R = W
if(istype(W, /obj/item/rcd_ammo))
var/obj/item/rcd_ammo/R = W
if((matter + R.ammoamt) > max_matter)
to_chat(user, "<span class='warning'>The [src] can't hold any more matter-units!</span>")
return
@@ -65,7 +65,7 @@ obj/item/weapon/construction
else
return ..()
/obj/item/weapon/construction/proc/loadwithsheets(obj/item/stack/sheet/S, value, mob/user)
/obj/item/construction/proc/loadwithsheets(obj/item/stack/sheet/S, value, mob/user)
var/maxsheets = round((max_matter-matter)/value) //calculate the max number of sheets that will fit in RCD
if(maxsheets > 0)
var/amount_to_use = min(S.amount, maxsheets)
@@ -77,15 +77,15 @@ obj/item/weapon/construction
to_chat(user, "<span class='warning'>You can't insert any more [S.name] sheets into the [src]!")
return 0
/obj/item/weapon/construction/proc/activate()
/obj/item/construction/proc/activate()
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
/obj/item/weapon/construction/attack_self(mob/user)
/obj/item/construction/attack_self(mob/user)
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
if(prob(20))
spark_system.start()
/obj/item/weapon/construction/proc/useResource(amount, mob/user)
/obj/item/construction/proc/useResource(amount, mob/user)
if(matter < amount)
if(user)
to_chat(user, no_ammo_message)
@@ -95,27 +95,27 @@ obj/item/weapon/construction
update_icon()
return 1
/obj/item/weapon/construction/proc/checkResource(amount, mob/user)
/obj/item/construction/proc/checkResource(amount, mob/user)
. = matter >= amount
if(!. && user)
to_chat(user, no_ammo_message)
return .
/obj/item/weapon/construction/proc/range_check(atom/A, mob/user)
/obj/item/construction/proc/range_check(atom/A, mob/user)
if(!(A in view(7, get_turf(user))))
to_chat(user, "<span class='warning'>The \'Out of Range\' light on the [src] blinks red.</span>")
return FALSE
else
return TRUE
/obj/item/weapon/construction/proc/prox_check(proximity)
/obj/item/construction/proc/prox_check(proximity)
if(proximity)
return TRUE
else
return FALSE
/obj/item/weapon/construction/rcd
/obj/item/construction/rcd
name = "rapid-construction-device (RCD)"
desc = "A device used to rapidly build and deconstruct walls and floors."
icon = 'icons/obj/tools.dmi'
@@ -135,11 +135,11 @@ obj/item/weapon/construction
var/delay_mod = 1
/obj/item/weapon/construction/rcd/suicide_act(mob/user)
/obj/item/construction/rcd/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] sets the RCD to 'Wall' and points it down [user.p_their()] throat! It looks like [user.p_theyre()] trying to commit suicide..</span>")
return (BRUTELOSS)
/obj/item/weapon/construction/rcd/verb/toggle_window_type()
/obj/item/construction/rcd/verb/toggle_window_type()
set name = "Toggle Window Type"
set category = "Object"
set src in usr // What does this do?
@@ -155,7 +155,7 @@ obj/item/weapon/construction
to_chat(usr, "<span class='notice'>You change \the [src]'s window mode to [window_type_name].</span>")
/obj/item/weapon/construction/rcd/verb/change_airlock_access()
/obj/item/construction/rcd/verb/change_airlock_access()
set name = "Change Airlock Access"
set category = "Object"
set src in usr
@@ -204,7 +204,7 @@ obj/item/weapon/construction
popup.open()
onclose(usr, "airlock")
/obj/item/weapon/construction/rcd/Topic(href, href_list)
/obj/item/construction/rcd/Topic(href, href_list)
..()
if (usr.stat || usr.restrained())
return
@@ -217,7 +217,7 @@ obj/item/weapon/construction
change_airlock_access()
/obj/item/weapon/construction/rcd/proc/toggle_access(acc)
/obj/item/construction/rcd/proc/toggle_access(acc)
if (acc == "all")
conf_access = null
else if(acc == "one")
@@ -235,7 +235,7 @@ obj/item/weapon/construction
if (!conf_access.len)
conf_access = null
/obj/item/weapon/construction/rcd/verb/change_airlock_setting()
/obj/item/construction/rcd/verb/change_airlock_setting()
set name = "Change Airlock Setting"
set category = "Object"
set src in usr
@@ -302,7 +302,7 @@ obj/item/weapon/construction
airlock_glass = FALSE
/obj/item/weapon/construction/rcd/proc/rcd_create(atom/A, mob/user)
/obj/item/construction/rcd/proc/rcd_create(atom/A, mob/user)
var/list/rcd_results = A.rcd_vals(user, src)
if(!rcd_results)
return FALSE
@@ -314,15 +314,15 @@ obj/item/weapon/construction
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
return TRUE
/obj/item/weapon/construction/rcd/New()
/obj/item/construction/rcd/New()
..()
GLOB.rcd_list += src
/obj/item/weapon/construction/rcd/Destroy()
/obj/item/construction/rcd/Destroy()
GLOB.rcd_list -= src
. = ..()
/obj/item/weapon/construction/rcd/attack_self(mob/user)
/obj/item/construction/rcd/attack_self(mob/user)
..()
switch(mode)
if(1)
@@ -338,36 +338,36 @@ obj/item/weapon/construction
mode = 1
to_chat(user, "<span class='notice'>You change RCD's mode to 'Floor & Walls'.</span>")
/obj/item/weapon/construction/rcd/proc/target_check(atom/A, mob/user) // only returns true for stuff the device can actually work with
/obj/item/construction/rcd/proc/target_check(atom/A, mob/user) // only returns true for stuff the device can actually work with
if((isturf(A) && A.density && mode==RCD_DECONSTRUCT) || (isturf(A) && !A.density) || (istype(A, /obj/machinery/door/airlock) && mode==RCD_DECONSTRUCT) || istype(A, /obj/structure/grille) || (istype(A, /obj/structure/window) && mode==RCD_DECONSTRUCT) || istype(A, /obj/structure/girder))
return TRUE
else
return FALSE
/obj/item/weapon/construction/rcd/afterattack(atom/A, mob/user, proximity)
/obj/item/construction/rcd/afterattack(atom/A, mob/user, proximity)
if(!prox_check(proximity))
return
rcd_create(A, user)
/obj/item/weapon/construction/rcd/proc/detonate_pulse()
/obj/item/construction/rcd/proc/detonate_pulse()
audible_message("<span class='danger'><b>[src] begins to vibrate and \
buzz loudly!</b></span>","<span class='danger'><b>[src] begins \
vibrating violently!</b></span>")
// 5 seconds to get rid of it
addtimer(CALLBACK(src, .proc/detonate_pulse_explode), 50)
/obj/item/weapon/construction/rcd/proc/detonate_pulse_explode()
/obj/item/construction/rcd/proc/detonate_pulse_explode()
explosion(src, 0, 0, 3, 1, flame_range = 1)
qdel(src)
/obj/item/weapon/construction/rcd/borg/New()
/obj/item/construction/rcd/borg/New()
..()
no_ammo_message = "<span class='warning'>Insufficient charge.</span>"
desc = "A device used to rapidly build walls and floors."
canRturf = 1
/obj/item/weapon/construction/rcd/borg/useResource(amount, mob/user)
/obj/item/construction/rcd/borg/useResource(amount, mob/user)
if(!iscyborg(user))
return 0
var/mob/living/silicon/robot/borgy = user
@@ -380,7 +380,7 @@ obj/item/weapon/construction
to_chat(user, no_ammo_message)
return .
/obj/item/weapon/construction/rcd/borg/checkResource(amount, mob/user)
/obj/item/construction/rcd/borg/checkResource(amount, mob/user)
if(!iscyborg(user))
return 0
var/mob/living/silicon/robot/borgy = user
@@ -393,15 +393,15 @@ obj/item/weapon/construction
to_chat(user, no_ammo_message)
return .
/obj/item/weapon/construction/rcd/loaded
/obj/item/construction/rcd/loaded
matter = 160
/obj/item/weapon/construction/rcd/combat
/obj/item/construction/rcd/combat
name = "industrial RCD"
max_matter = 500
matter = 500
/obj/item/weapon/rcd_ammo
/obj/item/rcd_ammo
name = "compressed matter cartridge"
desc = "Highly compressed matter for the RCD."
icon = 'icons/obj/ammo.dmi'
@@ -413,13 +413,13 @@ obj/item/weapon/construction
materials = list(MAT_METAL=12000, MAT_GLASS=8000)
var/ammoamt = 40
/obj/item/weapon/rcd_ammo/large
/obj/item/rcd_ammo/large
origin_tech = "materials=4"
materials = list(MAT_METAL=48000, MAT_GLASS=32000)
ammoamt = 160
/obj/item/weapon/construction/rcd/admin
/obj/item/construction/rcd/admin
name = "admin RCD"
max_matter = INFINITY
matter = INFINITY
@@ -428,7 +428,7 @@ obj/item/weapon/construction
// Ranged RCD
/obj/item/weapon/construction/rcd/arcd
/obj/item/construction/rcd/arcd
name = "advanced rapid-construction-device (ARCD)"
desc = "A prototype RCD with ranged capability and extended capacity"
max_matter = 300
@@ -438,7 +438,7 @@ obj/item/weapon/construction
icon_state = "arcd"
item_state = "rcd"
/obj/item/weapon/construction/rcd/arcd/afterattack(atom/A, mob/user)
/obj/item/construction/rcd/arcd/afterattack(atom/A, mob/user)
if(!range_check(A,user))
return
if(target_check(A,user))
@@ -451,7 +451,7 @@ obj/item/weapon/construction
/obj/item/weapon/construction/rld
/obj/item/construction/rld
name = "rapid-light-device (RLD)"
desc = "A device used to rapidly provide lighting sources to an area."
icon = 'icons/obj/tools.dmi'
@@ -475,18 +475,18 @@ obj/item/weapon/construction
var/color_choice = null
/obj/item/weapon/construction/rld/ui_action_click(mob/user, var/datum/action/A)
/obj/item/construction/rld/ui_action_click(mob/user, var/datum/action/A)
if(istype(A, /datum/action/item_action/pick_color))
color_choice = input(user,"Choose Color") as color
else
..()
/obj/item/weapon/construction/rld/update_icon()
/obj/item/construction/rld/update_icon()
icon_state = "rld-[round(matter/35)]"
..()
/obj/item/weapon/construction/rld/attack_self(mob/user)
/obj/item/construction/rld/attack_self(mob/user)
..()
switch(mode)
if(REMOVE_MODE)
@@ -500,7 +500,7 @@ obj/item/weapon/construction
to_chat(user, "<span class='notice'>You change RLD's mode to 'Deconstruct'.</span>")
/obj/item/weapon/construction/rld/proc/checkdupes(var/target)
/obj/item/construction/rld/proc/checkdupes(var/target)
. = list()
var/turf/checking = get_turf(target)
for(var/obj/machinery/light/dupe in checking)
@@ -508,7 +508,7 @@ obj/item/weapon/construction
. |= dupe
/obj/item/weapon/construction/rld/afterattack(atom/A, mob/user)
/obj/item/construction/rld/afterattack(atom/A, mob/user)
if(!range_check(A,user))
return
var/turf/start = get_turf(src)
+15 -15
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/twohanded/rcl
/obj/item/twohanded/rcl
name = "rapid cable layer"
desc = "A device used to rapidly deploy cables. It has screws on the side which can be removed to slide off the cables. Do not use without insulation!"
icon = 'icons/obj/tools.dmi'
@@ -20,7 +20,7 @@
var/current_color_index = 1
var/ghetto = FALSE
/obj/item/weapon/twohanded/rcl/attackby(obj/item/W, mob/user)
/obj/item/twohanded/rcl/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = W
@@ -41,7 +41,7 @@
return
update_icon()
to_chat(user, "<span class='notice'>You add the cables to the [src]. It now contains [loaded.amount].</span>")
else if(istype(W, /obj/item/weapon/screwdriver))
else if(istype(W, /obj/item/screwdriver))
if(!loaded)
return
if(ghetto && prob(10)) //Is it a ghetto RCL? If so, give it a 10% chance to fall apart
@@ -75,18 +75,18 @@
else
..()
/obj/item/weapon/twohanded/rcl/examine(mob/user)
/obj/item/twohanded/rcl/examine(mob/user)
..()
if(loaded)
to_chat(user, "<span class='info'>It contains [loaded.amount]/[max_amount] cables.</span>")
/obj/item/weapon/twohanded/rcl/Destroy()
/obj/item/twohanded/rcl/Destroy()
QDEL_NULL(loaded)
last = null
active = FALSE
return ..()
/obj/item/weapon/twohanded/rcl/update_icon()
/obj/item/twohanded/rcl/update_icon()
if(!loaded)
icon_state = "rcl-0"
item_state = "rcl-0"
@@ -105,7 +105,7 @@
icon_state = "rcl-0"
item_state = "rcl-0"
/obj/item/weapon/twohanded/rcl/proc/is_empty(mob/user, loud = 1)
/obj/item/twohanded/rcl/proc/is_empty(mob/user, loud = 1)
update_icon()
if(!loaded || !loaded.amount)
if(loud)
@@ -118,12 +118,12 @@
return TRUE
return FALSE
/obj/item/weapon/twohanded/rcl/dropped(mob/wearer)
/obj/item/twohanded/rcl/dropped(mob/wearer)
..()
active = FALSE
last = null
/obj/item/weapon/twohanded/rcl/attack_self(mob/user)
/obj/item/twohanded/rcl/attack_self(mob/user)
..()
active = wielded
if(!active)
@@ -134,11 +134,11 @@
last = C
break
/obj/item/weapon/twohanded/rcl/on_mob_move(direct, mob/user)
/obj/item/twohanded/rcl/on_mob_move(direct, mob/user)
if(active)
trigger(user)
/obj/item/weapon/twohanded/rcl/proc/trigger(mob/user)
/obj/item/twohanded/rcl/proc/trigger(mob/user)
if(!isturf(user.loc))
return
if(is_empty(user, 0))
@@ -170,14 +170,14 @@
is_empty(user) //If we've run out, display message
/obj/item/weapon/twohanded/rcl/pre_loaded/Initialize () //Comes preloaded with cable, for testing stuff
/obj/item/twohanded/rcl/pre_loaded/Initialize () //Comes preloaded with cable, for testing stuff
. = ..()
loaded = new()
loaded.max_amount = max_amount
loaded.amount = max_amount
update_icon()
/obj/item/weapon/twohanded/rcl/ui_action_click(mob/user, action)
/obj/item/twohanded/rcl/ui_action_click(mob/user, action)
if(istype(action, /datum/action/item_action/rcl))
current_color_index++;
if (current_color_index > colors.len)
@@ -185,13 +185,13 @@
var/cwname = colors[current_color_index]
to_chat(user, "Color changed to [cwname]!")
/obj/item/weapon/twohanded/rcl/ghetto
/obj/item/twohanded/rcl/ghetto
actions_types = list()
max_amount = 30
name = "makeshift rapid cable layer"
ghetto = TRUE
/obj/item/weapon/twohanded/rcl/ghetto/update_icon()
/obj/item/twohanded/rcl/ghetto/update_icon()
if(!loaded)
icon_state = "rclg-0"
item_state = "rclg-0"
+10 -10
View File
@@ -119,7 +119,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
"Sort Junction" = new /datum/pipe_info/disposal(DISP_SORTJUNCTION, PIPE_TRINARY),
)
))
/obj/item/weapon/pipe_dispenser
/obj/item/pipe_dispenser
name = "Rapid Piping Device (RPD)"
desc = "A device used to rapidly pipe things."
icon = 'icons/obj/tools.dmi'
@@ -153,33 +153,33 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
var/paint_color="grey"
var/screen = CATEGORY_ATMOS //Starts on the atmos tab.
/obj/item/weapon/pipe_dispenser/New()
/obj/item/pipe_dispenser/New()
. = ..()
spark_system = new /datum/effect_system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
/obj/item/weapon/pipe_dispenser/Destroy()
/obj/item/pipe_dispenser/Destroy()
qdel(spark_system)
spark_system = null
return ..()
/obj/item/weapon/pipe_dispenser/attack_self(mob/user)
/obj/item/pipe_dispenser/attack_self(mob/user)
show_menu(user)
/obj/item/weapon/pipe_dispenser/suicide_act(mob/user)
/obj/item/pipe_dispenser/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] points the end of the RPD down [user.p_their()] throat and presses a button! It looks like [user.p_theyre()] trying to commit suicide...</span>")
playsound(get_turf(user), 'sound/machines/click.ogg', 50, 1)
playsound(get_turf(user), 'sound/items/deconstruct.ogg', 50, 1)
return(BRUTELOSS)
/obj/item/weapon/pipe_dispenser/proc/render_dir_img(_dir,pic,title,flipped=0)
/obj/item/pipe_dispenser/proc/render_dir_img(_dir,pic,title,flipped=0)
var/selected=" class=\"imglink\""
if(_dir == p_dir)
selected=" class=\"imglink selected\""
return "<a href=\"?src=\ref[src];setdir=[_dir];flipped=[flipped]\" title=\"[title]\"[selected]\"><img src=\"[pic]\" /></a>"
/obj/item/weapon/pipe_dispenser/proc/show_menu(mob/user)
/obj/item/pipe_dispenser/proc/show_menu(mob/user)
if(!user || !src)
return 0
var/dat = {"<h2>Type</h2>
@@ -453,7 +453,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
popup.open()
return
/obj/item/weapon/pipe_dispenser/Topic(href, href_list)
/obj/item/pipe_dispenser/Topic(href, href_list)
if(!usr.canUseTopic(src))
usr << browse(null, "window=pipedispenser")
return
@@ -517,7 +517,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
show_menu(usr)
/obj/item/weapon/pipe_dispenser/pre_attackby(atom/A, mob/user)
/obj/item/pipe_dispenser/pre_attackby(atom/A, mob/user)
if(!user.IsAdvancedToolUser() || istype(A, /turf/open/space/transit))
return ..()
@@ -593,7 +593,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
return ..()
/obj/item/weapon/pipe_dispenser/proc/activate()
/obj/item/pipe_dispenser/proc/activate()
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1)
#undef PIPE_BINARY
+20 -20
View File
@@ -3,7 +3,7 @@ CONTAINS:
RSF
*/
/obj/item/weapon/rsf
/obj/item/rsf
name = "\improper Rapid-Service-Fabricator"
desc = "A device used to rapidly deploy service items."
icon = 'icons/obj/tools.dmi'
@@ -19,15 +19,15 @@ RSF
var/mode = 1
w_class = WEIGHT_CLASS_NORMAL
/obj/item/weapon/rsf/examine(mob/user)
/obj/item/rsf/examine(mob/user)
..()
to_chat(user, "<span class='notice'>It currently holds [matter]/30 fabrication-units.</span>")
/obj/item/weapon/rsf/cyborg
/obj/item/rsf/cyborg
matter = 30
/obj/item/weapon/rsf/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/rcd_ammo))
/obj/item/rsf/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/rcd_ammo))
if((matter + 10) > 30)
to_chat(user, "The RSF can't hold any more matter.")
return
@@ -38,7 +38,7 @@ RSF
else
return ..()
/obj/item/weapon/rsf/attack_self(mob/user)
/obj/item/rsf/attack_self(mob/user)
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
switch(mode)
if(1)
@@ -61,7 +61,7 @@ RSF
to_chat(user, "Changed dispensing mode to 'Dosh'")
// Change mode
/obj/item/weapon/rsf/afterattack(atom/A, mob/user, proximity)
/obj/item/rsf/afterattack(atom/A, mob/user, proximity)
if(!proximity)
return
if (!(istype(A, /obj/structure/table) || isfloorturf(A)))
@@ -85,26 +85,26 @@ RSF
use_matter(200, user)
if(2)
to_chat(user, "Dispensing Drinking Glass...")
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(T)
new /obj/item/reagent_containers/food/drinks/drinkingglass(T)
use_matter(20, user)
if(3)
to_chat(user, "Dispensing Paper Sheet...")
new /obj/item/weapon/paper(T)
new /obj/item/paper(T)
use_matter(10, user)
if(4)
to_chat(user, "Dispensing Pen...")
new /obj/item/weapon/pen(T)
new /obj/item/pen(T)
use_matter(50, user)
if(5)
to_chat(user, "Dispensing Dice Pack...")
new /obj/item/weapon/storage/pill_bottle/dice(T)
new /obj/item/storage/pill_bottle/dice(T)
use_matter(200, user)
if(6)
to_chat(user, "Dispensing Cigarette...")
new /obj/item/clothing/mask/cigarette(T)
use_matter(10, user)
/obj/item/weapon/rsf/proc/use_matter(charge, mob/user)
/obj/item/rsf/proc/use_matter(charge, mob/user)
if (iscyborg(user))
var/mob/living/silicon/robot/R = user
R.cell.charge -= charge
@@ -112,7 +112,7 @@ RSF
matter--
to_chat(user, "The RSF now holds [matter]/30 fabrication-units.")
/obj/item/weapon/cookiesynth
/obj/item/cookiesynth
name = "Cookie Synthesizer"
desc = "A self-recharging device used to rapidly deploy cookies."
icon = 'icons/obj/tools.dmi'
@@ -126,14 +126,14 @@ RSF
var/emagged = FALSE
w_class = WEIGHT_CLASS_NORMAL
/obj/item/weapon/cookiesynth/examine(mob/user)
/obj/item/cookiesynth/examine(mob/user)
..()
to_chat(user, "<span class='notice'>It currently holds [matter]/10 cookie-units.</span>")
/obj/item/weapon/cookiesynth/attackby()
/obj/item/cookiesynth/attackby()
return
/obj/item/weapon/cookiesynth/emag_act(mob/user)
/obj/item/cookiesynth/emag_act(mob/user)
emagged = !emagged
if(emagged)
to_chat(user, "<span class='warning'>You short out the [src]'s reagent safety checker!</span>")
@@ -141,7 +141,7 @@ RSF
to_chat(user, "<span class='warning'>You reset the [src]'s reagent safety checker!</span>")
toxin = 0
/obj/item/weapon/cookiesynth/attack_self(mob/user)
/obj/item/cookiesynth/attack_self(mob/user)
var/mob/living/silicon/robot/P = null
if(iscyborg(user))
P = user
@@ -155,11 +155,11 @@ RSF
toxin = 0
to_chat(user, "Cookie Synthesizer Reset")
/obj/item/weapon/cookiesynth/process()
/obj/item/cookiesynth/process()
if(matter < 10)
matter++
/obj/item/weapon/cookiesynth/afterattack(atom/A, mob/user, proximity)
/obj/item/cookiesynth/afterattack(atom/A, mob/user, proximity)
if(cooldown > world.time)
return
if(!proximity)
@@ -177,7 +177,7 @@ RSF
var/turf/T = get_turf(A)
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
to_chat(user, "Fabricating Cookie..")
var/obj/item/weapon/reagent_containers/food/snacks/cookie/S = new /obj/item/weapon/reagent_containers/food/snacks/cookie(T)
var/obj/item/reagent_containers/food/snacks/cookie/S = new /obj/item/reagent_containers/food/snacks/cookie(T)
if(toxin)
S.reagents.add_reagent("chloralhydrate2", 10)
if (iscyborg(user))
@@ -1,4 +1,4 @@
/obj/item/weapon/airlock_painter
/obj/item/airlock_painter
name = "airlock painter"
desc = "An advanced autopainter preprogrammed with several paintjobs for airlocks. Use it on an airlock during or after construction to change the paintjob."
icon = 'icons/obj/objects.dmi'
@@ -15,13 +15,13 @@
var/obj/item/device/toner/ink = null
/obj/item/weapon/airlock_painter/New()
/obj/item/airlock_painter/New()
..()
ink = new /obj/item/device/toner(src)
//This proc doesn't just check if the painter can be used, but also uses it.
//Only call this if you are certain that the painter will be used right after this check!
/obj/item/weapon/airlock_painter/proc/use(mob/user)
/obj/item/airlock_painter/proc/use(mob/user)
if(can_use(user))
ink.charges--
playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1)
@@ -32,7 +32,7 @@
//This proc only checks if the painter can be used.
//Call this if you don't want the painter to be used right after this check, for example
//because you're expecting user input.
/obj/item/weapon/airlock_painter/proc/can_use(mob/user)
/obj/item/airlock_painter/proc/can_use(mob/user)
if(!ink)
to_chat(user, "<span class='notice'>There is no toner cartridge installed in [src]!</span>")
return 0
@@ -42,7 +42,7 @@
else
return 1
/obj/item/weapon/airlock_painter/suicide_act(mob/user)
/obj/item/airlock_painter/suicide_act(mob/user)
var/obj/item/organ/lungs/L = user.getorganslot("lungs")
if(can_use(user) && L)
@@ -89,7 +89,7 @@
return SHAME
/obj/item/weapon/airlock_painter/examine(mob/user)
/obj/item/airlock_painter/examine(mob/user)
..()
if(!ink)
to_chat(user, "<span class='notice'>It doesn't have a toner cartridge installed.</span>")
@@ -104,7 +104,7 @@
to_chat(user, "<span class='notice'>Its ink levels look [ink_level].</span>")
/obj/item/weapon/airlock_painter/attackby(obj/item/weapon/W, mob/user, params)
/obj/item/airlock_painter/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/device/toner))
if(ink)
to_chat(user, "<span class='notice'>[src] already contains \a [ink].</span>")
@@ -117,7 +117,7 @@
else
return ..()
/obj/item/weapon/airlock_painter/attack_self(mob/user)
/obj/item/airlock_painter/attack_self(mob/user)
if(ink)
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
ink.loc = user.loc
+56 -56
View File
@@ -11,7 +11,7 @@
/*
* DATA CARDS - Used for the teleporter
*/
/obj/item/weapon/card
/obj/item/card
name = "card"
desc = "Does card things."
icon = 'icons/obj/card.dmi'
@@ -19,7 +19,7 @@
var/list/files = list()
/obj/item/weapon/card/data
/obj/item/card/data
name = "data disk"
desc = "A disk of data."
icon_state = "data"
@@ -30,7 +30,7 @@
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
/obj/item/weapon/card/data/verb/label(t as text)
/obj/item/card/data/verb/label(t as text)
set name = "Label Disk"
set category = "Object"
set src in usr
@@ -48,7 +48,7 @@
/*
* ID CARDS
*/
/obj/item/weapon/card/emag
/obj/item/card/emag
desc = "It's a card with a magnetic strip attached to some circuitry."
name = "cryptographic sequencer"
icon_state = "emag"
@@ -59,23 +59,23 @@
flags_1 = NOBLUDGEON_1
var/prox_check = TRUE //If the emag requires you to be in range
/obj/item/weapon/card/emag/bluespace
/obj/item/card/emag/bluespace
name = "bluespace cryptographic sequencer"
desc = "It's a blue card with a magnetic strip attached to some circuitry. It appears to have some sort of transmitter attached to it."
color = rgb(40, 130, 255)
origin_tech = "bluespace=4;magnets=4;syndicate=5"
prox_check = FALSE
/obj/item/weapon/card/emag/attack()
/obj/item/card/emag/attack()
return
/obj/item/weapon/card/emag/afterattack(atom/target, mob/user, proximity)
/obj/item/card/emag/afterattack(atom/target, mob/user, proximity)
var/atom/A = target
if(!proximity && prox_check)
return
A.emag_act(user)
/obj/item/weapon/card/id
/obj/item/card/id
name = "identification card"
desc = "A card used to provide ID and determine access across the station."
icon_state = "id"
@@ -93,33 +93,33 @@
/obj/item/weapon/card/id/Initialize(mapload)
/obj/item/card/id/Initialize(mapload)
. = ..()
if(mapload && access_txt)
access = text2access(access_txt)
/obj/item/weapon/card/id/vv_edit_var(var_name, var_value)
/obj/item/card/id/vv_edit_var(var_name, var_value)
. = ..()
if(.)
switch(var_name)
if("assignment","registered_name")
update_label()
/obj/item/weapon/card/id/attack_self(mob/user)
/obj/item/card/id/attack_self(mob/user)
user.visible_message("<span class='notice'>[user] shows you: [icon2html(src, viewers(user))] [src.name].</span>", \
"<span class='notice'>You show \the [src.name].</span>")
src.add_fingerprint(user)
return
/obj/item/weapon/card/id/examine(mob/user)
/obj/item/card/id/examine(mob/user)
..()
if(mining_points)
to_chat(user, "There's [mining_points] mining equipment redemption point\s loaded onto this card.")
/obj/item/weapon/card/id/GetAccess()
/obj/item/card/id/GetAccess()
return access
/obj/item/weapon/card/id/GetID()
/obj/item/card/id/GetID()
return src
/*
@@ -130,14 +130,14 @@ update_label()
update_label("John Doe", "Clowny")
Properly formats the name and occupation and sets the id name to the arguments
*/
/obj/item/weapon/card/id/proc/update_label(newname, newjob)
/obj/item/card/id/proc/update_label(newname, newjob)
if(newname || newjob)
name = "[(!newname) ? "identification card" : "[newname]'s ID Card"][(!newjob) ? "" : " ([newjob])"]"
return
name = "[(!registered_name) ? "identification card" : "[registered_name]'s ID Card"][(!assignment) ? "" : " ([assignment])"]"
/obj/item/weapon/card/id/silver
/obj/item/card/id/silver
name = "silver identification card"
desc = "A silver card which shows honour and dedication."
icon_state = "silver"
@@ -145,7 +145,7 @@ update_label("John Doe", "Clowny")
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
/obj/item/weapon/card/id/gold
/obj/item/card/id/gold
name = "gold identification card"
desc = "A golden card which shows power and might."
icon_state = "gold"
@@ -153,30 +153,30 @@ update_label("John Doe", "Clowny")
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
/obj/item/weapon/card/id/syndicate
/obj/item/card/id/syndicate
name = "agent card"
access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE)
origin_tech = "syndicate=1"
var/anyone = FALSE //Can anyone forge the ID or just syndicate?
/obj/item/weapon/card/id/syndicate/Initialize()
/obj/item/card/id/syndicate/Initialize()
..()
var/datum/action/item_action/chameleon/change/chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/weapon/card/id
chameleon_action.chameleon_type = /obj/item/card/id
chameleon_action.chameleon_name = "ID Card"
chameleon_action.initialize_disguises()
/obj/item/weapon/card/id/syndicate/afterattack(obj/item/weapon/O, mob/user, proximity)
/obj/item/card/id/syndicate/afterattack(obj/item/O, mob/user, proximity)
if(!proximity)
return
if(istype(O, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/I = O
if(istype(O, /obj/item/card/id))
var/obj/item/card/id/I = O
src.access |= I.access
if(isliving(user) && user.mind)
if(user.mind.special_role)
to_chat(usr, "<span class='notice'>The card's microscanners activate as you pass it over the ID, copying its access.</span>")
/obj/item/weapon/card/id/syndicate/attack_self(mob/user)
/obj/item/card/id/syndicate/attack_self(mob/user)
if(isliving(user) && user.mind)
if(user.mind.special_role || anyone)
if(alert(user, "Action", "Agent ID", "Show", "Forge") == "Forge")
@@ -197,17 +197,17 @@ update_label("John Doe", "Clowny")
return
..()
/obj/item/weapon/card/id/syndicate/anyone
/obj/item/card/id/syndicate/anyone
anyone = TRUE
/obj/item/weapon/card/id/syndicate_command
/obj/item/card/id/syndicate_command
name = "syndicate ID card"
desc = "An ID straight from the Syndicate."
registered_name = "Syndicate"
assignment = "Syndicate Overlord"
access = list(ACCESS_SYNDICATE)
/obj/item/weapon/card/id/captains_spare
/obj/item/card/id/captains_spare
name = "captain's spare ID"
desc = "The spare ID of the High Lord himself."
icon_state = "gold"
@@ -217,58 +217,58 @@ update_label("John Doe", "Clowny")
registered_name = "Captain"
assignment = "Captain"
/obj/item/weapon/card/id/captains_spare/Initialize()
/obj/item/card/id/captains_spare/Initialize()
var/datum/job/captain/J = new/datum/job/captain
access = J.get_access()
..()
/obj/item/weapon/card/id/centcom
/obj/item/card/id/centcom
name = "\improper CentCom ID"
desc = "An ID straight from Cent. Com."
icon_state = "centcom"
registered_name = "Central Command"
assignment = "General"
/obj/item/weapon/card/id/centcom/Initialize()
/obj/item/card/id/centcom/Initialize()
access = get_all_centcom_access()
..()
/obj/item/weapon/card/id/ert
/obj/item/card/id/ert
name = "\improper CentCom ID"
desc = "A ERT ID card"
icon_state = "centcom"
registered_name = "Emergency Response Team Commander"
assignment = "Emergency Response Team Commander"
/obj/item/weapon/card/id/ert/Initialize()
/obj/item/card/id/ert/Initialize()
access = get_all_accesses()+get_ert_access("commander")-ACCESS_CHANGE_IDS
..()
/obj/item/weapon/card/id/ert/Security
/obj/item/card/id/ert/Security
registered_name = "Security Response Officer"
assignment = "Security Response Officer"
/obj/item/weapon/card/id/ert/Security/Initialize()
/obj/item/card/id/ert/Security/Initialize()
access = get_all_accesses()+get_ert_access("sec")-ACCESS_CHANGE_IDS
..()
/obj/item/weapon/card/id/ert/Engineer
/obj/item/card/id/ert/Engineer
registered_name = "Engineer Response Officer"
assignment = "Engineer Response Officer"
/obj/item/weapon/card/id/ert/Engineer/Initialize()
/obj/item/card/id/ert/Engineer/Initialize()
access = get_all_accesses()+get_ert_access("eng")-ACCESS_CHANGE_IDS
..()
/obj/item/weapon/card/id/ert/Medical
/obj/item/card/id/ert/Medical
registered_name = "Medical Response Officer"
assignment = "Medical Response Officer"
/obj/item/weapon/card/id/ert/Medical/Initialize()
/obj/item/card/id/ert/Medical/Initialize()
access = get_all_accesses()+get_ert_access("med")-ACCESS_CHANGE_IDS
..()
/obj/item/weapon/card/id/prisoner
/obj/item/card/id/prisoner
name = "prisoner ID card"
desc = "You are a number, you are not a free man."
icon_state = "orange"
@@ -280,76 +280,76 @@ update_label("John Doe", "Clowny")
var/goal = 0 //How far from freedom?
var/points = 0
/obj/item/weapon/card/id/prisoner/attack_self(mob/user)
/obj/item/card/id/prisoner/attack_self(mob/user)
to_chat(usr, "<span class='notice'>You have accumulated [points] out of the [goal] points you need for freedom.</span>")
/obj/item/weapon/card/id/prisoner/one
/obj/item/card/id/prisoner/one
name = "Prisoner #13-001"
registered_name = "Prisoner #13-001"
/obj/item/weapon/card/id/prisoner/two
/obj/item/card/id/prisoner/two
name = "Prisoner #13-002"
registered_name = "Prisoner #13-002"
/obj/item/weapon/card/id/prisoner/three
/obj/item/card/id/prisoner/three
name = "Prisoner #13-003"
registered_name = "Prisoner #13-003"
/obj/item/weapon/card/id/prisoner/four
/obj/item/card/id/prisoner/four
name = "Prisoner #13-004"
registered_name = "Prisoner #13-004"
/obj/item/weapon/card/id/prisoner/five
/obj/item/card/id/prisoner/five
name = "Prisoner #13-005"
registered_name = "Prisoner #13-005"
/obj/item/weapon/card/id/prisoner/six
/obj/item/card/id/prisoner/six
name = "Prisoner #13-006"
registered_name = "Prisoner #13-006"
/obj/item/weapon/card/id/prisoner/seven
/obj/item/card/id/prisoner/seven
name = "Prisoner #13-007"
registered_name = "Prisoner #13-007"
/obj/item/weapon/card/id/mining
/obj/item/card/id/mining
name = "mining ID"
access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
/obj/item/weapon/card/id/away
/obj/item/card/id/away
name = "a perfectly generic identification card"
desc = "A perfectly generic identification card. Looks like it could use some flavor."
access = list(ACCESS_AWAY_GENERAL)
/obj/item/weapon/card/id/away/hotel
/obj/item/card/id/away/hotel
name = "Staff ID"
desc = "A staff ID used to access the hotel's doors."
access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINT)
/obj/item/weapon/card/id/away/hotel/securty
/obj/item/card/id/away/hotel/securty
name = "Officer ID"
access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINT, ACCESS_AWAY_SEC)
/obj/item/weapon/card/id/away/old
/obj/item/card/id/away/old
name = "a perfectly generic identification card"
desc = "A perfectly generic identification card. Looks like it could use some flavor."
access = list(ACCESS_AWAY_GENERAL)
/obj/item/weapon/card/id/away/old/sec
/obj/item/card/id/away/old/sec
name = "Security Officer ID"
desc = "Security officers ID card."
icon_state = "centcom"
/obj/item/weapon/card/id/away/old/sci
/obj/item/card/id/away/old/sci
name = "Scientist ID"
desc = "Scientists ID card."
icon_state = "centcom"
/obj/item/weapon/card/id/away/old/eng
/obj/item/card/id/away/old/eng
name = "Engineer ID"
desc = "Engineers ID card."
icon_state = "centcom"
/obj/item/weapon/card/id/away/old/apc
/obj/item/card/id/away/old/apc
name = "APC Access ID"
desc = "Special ID card to allow access to APCs"
icon_state = "centcom"
+8 -8
View File
@@ -1,6 +1,6 @@
#define STATION_RENAME_TIME_LIMIT 3000
/obj/item/weapon/station_charter
/obj/item/station_charter
name = "station charter"
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll2"
@@ -16,7 +16,7 @@
var/static/regex/standard_station_regex
/obj/item/weapon/station_charter/Initialize()
/obj/item/station_charter/Initialize()
. = ..()
if(!standard_station_regex)
var/prefixes = jointext(GLOB.station_prefixes, "|")
@@ -26,7 +26,7 @@
var/regexstr = "^(([prefixes]) )?(([names]) ?)([suffixes]) ([numerals])$"
standard_station_regex = new(regexstr)
/obj/item/weapon/station_charter/attack_self(mob/living/user)
/obj/item/station_charter/attack_self(mob/living/user)
if(used)
to_chat(user, "The [name_type] has already been named.")
return
@@ -61,7 +61,7 @@
response_timer_id = addtimer(CALLBACK(src, .proc/rename_station, new_name, user.name, user.real_name, key_name(user)), approval_time, TIMER_STOPPABLE)
to_chat(GLOB.admins, "<span class='adminnotice'><b><font color=orange>CUSTOM STATION RENAME:</font></b>[ADMIN_LOOKUPFLW(user)] proposes to rename the [name_type] to [new_name] (will autoapprove in [approval_time / 10] seconds). [ADMIN_SMITE(user)] (<A HREF='?_src_=holder;reject_custom_name=\ref[src]'>REJECT</A>) [ADMIN_CENTCOM_REPLY(user)]</span>")
/obj/item/weapon/station_charter/proc/reject_proposed(user)
/obj/item/station_charter/proc/reject_proposed(user)
if(!user)
return
if(!response_timer_id)
@@ -77,7 +77,7 @@
deltimer(response_timer_id)
response_timer_id = null
/obj/item/weapon/station_charter/proc/rename_station(designation, uname, ureal_name, ukey)
/obj/item/station_charter/proc/rename_station(designation, uname, ureal_name, ukey)
set_station_name(designation)
minor_announce("[ureal_name] has designated your station as [station_name()]", "Captain's Charter", 0)
log_game("[ukey] has renamed the station as [station_name()].")
@@ -89,12 +89,12 @@
if(!unlimited_uses)
used = TRUE
/obj/item/weapon/station_charter/admin
/obj/item/station_charter/admin
unlimited_uses = TRUE
ignores_timeout = TRUE
/obj/item/weapon/station_charter/flag
/obj/item/station_charter/flag
name = "nanotrasen banner"
icon = 'icons/obj/items.dmi'
name_type = "planet"
@@ -106,7 +106,7 @@
w_class = 5
force = 15
/obj/item/weapon/station_charter/flag/rename_station(designation, uname, ureal_name, ukey)
/obj/item/station_charter/flag/rename_station(designation, uname, ureal_name, ukey)
set_station_name(designation)
minor_announce("[ureal_name] has designated the planet as [station_name()]", "Captain's Banner", 0)
log_game("[ukey] has renamed the planet as [station_name()].")
@@ -1,6 +1,6 @@
#define CHRONO_BEAM_RANGE 3
#define CHRONO_FRAME_COUNT 22
/obj/item/weapon/chrono_eraser
/obj/item/chrono_eraser
name = "Timestream Eradication Device"
desc = "The result of outlawed time-bluespace research, this device is capable of wiping a being from the timestream. They never are, they never were, they never will be."
icon = 'icons/obj/chronos.dmi'
@@ -10,22 +10,22 @@
slot_flags = SLOT_BACK
slowdown = 1
actions_types = list(/datum/action/item_action/equip_unequip_TED_Gun)
var/obj/item/weapon/gun/energy/chrono_gun/PA = null
var/obj/item/gun/energy/chrono_gun/PA = null
var/list/erased_minds = list() //a collection of minds from the dead
/obj/item/weapon/chrono_eraser/proc/pass_mind(datum/mind/M)
/obj/item/chrono_eraser/proc/pass_mind(datum/mind/M)
erased_minds += M
/obj/item/weapon/chrono_eraser/dropped()
/obj/item/chrono_eraser/dropped()
..()
if(PA)
qdel(PA)
/obj/item/weapon/chrono_eraser/Destroy()
/obj/item/chrono_eraser/Destroy()
dropped()
return ..()
/obj/item/weapon/chrono_eraser/ui_action_click(mob/user)
/obj/item/chrono_eraser/ui_action_click(mob/user)
if(iscarbon(user))
var/mob/living/carbon/C = user
if(C.back == src)
@@ -35,11 +35,11 @@
PA = new(src)
user.put_in_hands(PA)
/obj/item/weapon/chrono_eraser/item_action_slot_check(slot, mob/user)
/obj/item/chrono_eraser/item_action_slot_check(slot, mob/user)
if(slot == slot_back)
return 1
/obj/item/weapon/gun/energy/chrono_gun
/obj/item/gun/energy/chrono_gun
name = "T.E.D. Projection Apparatus"
desc = "It's as if they never existed in the first place."
icon = 'icons/obj/chronos.dmi'
@@ -50,27 +50,27 @@
ammo_type = list(/obj/item/ammo_casing/energy/chrono_beam)
can_charge = 0
fire_delay = 50
var/obj/item/weapon/chrono_eraser/TED = null
var/obj/item/chrono_eraser/TED = null
var/obj/effect/chrono_field/field = null
var/turf/startpos = null
/obj/item/weapon/gun/energy/chrono_gun/Initialize()
/obj/item/gun/energy/chrono_gun/Initialize()
. = ..()
if(istype(loc, /obj/item/weapon/chrono_eraser))
if(istype(loc, /obj/item/chrono_eraser))
TED = loc
else //admin must have spawned it
TED = new(src.loc)
qdel(src)
/obj/item/weapon/gun/energy/chrono_gun/update_icon()
/obj/item/gun/energy/chrono_gun/update_icon()
return
/obj/item/weapon/gun/energy/chrono_gun/process_fire()
/obj/item/gun/energy/chrono_gun/process_fire()
if(field)
field_disconnect(field)
..()
/obj/item/weapon/gun/energy/chrono_gun/Destroy()
/obj/item/gun/energy/chrono_gun/Destroy()
if(TED)
TED.PA = null
TED = null
@@ -78,7 +78,7 @@
field_disconnect(field)
return ..()
/obj/item/weapon/gun/energy/chrono_gun/proc/field_connect(obj/effect/chrono_field/F)
/obj/item/gun/energy/chrono_gun/proc/field_connect(obj/effect/chrono_field/F)
var/mob/living/user = src.loc
if(F.gun)
if(isliving(user) && F.captured)
@@ -92,7 +92,7 @@
to_chat(user, "<span class='notice'>Connection established with target: <b>[F.captured]</b></span>")
/obj/item/weapon/gun/energy/chrono_gun/proc/field_disconnect(obj/effect/chrono_field/F)
/obj/item/gun/energy/chrono_gun/proc/field_disconnect(obj/effect/chrono_field/F)
if(F && field == F)
var/mob/living/user = src.loc
if(F.gun == src)
@@ -102,7 +102,7 @@
field = null
startpos = null
/obj/item/weapon/gun/energy/chrono_gun/proc/field_check(obj/effect/chrono_field/F)
/obj/item/gun/energy/chrono_gun/proc/field_check(obj/effect/chrono_field/F)
if(F)
if(field == F)
var/turf/currentpos = get_turf(src)
@@ -112,7 +112,7 @@
field_disconnect(F)
return 0
/obj/item/weapon/gun/energy/chrono_gun/proc/pass_mind(datum/mind/M)
/obj/item/gun/energy/chrono_gun/proc/pass_mind(datum/mind/M)
if(TED)
TED.pass_mind(M)
@@ -122,7 +122,7 @@
icon_state = "chronobolt"
range = CHRONO_BEAM_RANGE
nodamage = 1
var/obj/item/weapon/gun/energy/chrono_gun/gun = null
var/obj/item/gun/energy/chrono_gun/gun = null
/obj/item/projectile/energy/chrono_beam/fire()
gun = firer.get_active_held_item()
@@ -153,13 +153,13 @@
anchored = TRUE
blend_mode = BLEND_MULTIPLY
var/mob/living/captured = null
var/obj/item/weapon/gun/energy/chrono_gun/gun = null
var/obj/item/gun/energy/chrono_gun/gun = null
var/tickstokill = 15
var/mutable_appearance/mob_underlay
var/preloaded = 0
var/RPpos = null
/obj/effect/chrono_field/New(loc, var/mob/living/target, var/obj/item/weapon/gun/energy/chrono_gun/G)
/obj/effect/chrono_field/New(loc, var/mob/living/target, var/obj/item/gun/energy/chrono_gun/G)
if(target && isliving(target) && G)
target.loc = src
src.captured = target
@@ -227,7 +227,7 @@
/obj/effect/chrono_field/bullet_act(obj/item/projectile/P)
if(istype(P, /obj/item/projectile/energy/chrono_beam))
var/obj/item/projectile/energy/chrono_beam/beam = P
var/obj/item/weapon/gun/energy/chrono_gun/Pgun = beam.gun
var/obj/item/gun/energy/chrono_gun/Pgun = beam.gun
if(Pgun && istype(Pgun))
Pgun.field_connect(src)
else
@@ -15,7 +15,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
///////////
//MATCHES//
///////////
/obj/item/weapon/match
/obj/item/match
name = "match"
desc = "A simple match stick, used for lighting fine smokables."
icon = 'icons/obj/cigarettes.dmi'
@@ -27,17 +27,17 @@ CIGARETTE PACKETS ARE IN FANCY.DM
origin_tech = "materials=1"
heat = 1000
/obj/item/weapon/match/process()
/obj/item/match/process()
smoketime--
if(smoketime < 1)
matchburnout()
else
open_flame(heat)
/obj/item/weapon/match/fire_act(exposed_temperature, exposed_volume)
/obj/item/match/fire_act(exposed_temperature, exposed_volume)
matchignite()
/obj/item/weapon/match/proc/matchignite()
/obj/item/match/proc/matchignite()
if(!lit && !burnt)
lit = TRUE
icon_state = "match_lit"
@@ -51,7 +51,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
START_PROCESSING(SSobj, src)
update_icon()
/obj/item/weapon/match/proc/matchburnout()
/obj/item/match/proc/matchburnout()
if(lit)
lit = FALSE
burnt = TRUE
@@ -64,11 +64,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM
attack_verb = list("flicked")
STOP_PROCESSING(SSobj, src)
/obj/item/weapon/match/dropped(mob/user)
/obj/item/match/dropped(mob/user)
matchburnout()
. = ..()
/obj/item/weapon/match/attack(mob/living/carbon/M, mob/living/carbon/user)
/obj/item/match/attack(mob/living/carbon/M, mob/living/carbon/user)
if(!isliving(M))
return
if(lit && M.IgniteMob())
@@ -90,7 +90,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(istype(mask_item, /obj/item/clothing/mask/cigarette))
return mask_item
/obj/item/weapon/match/is_hot()
/obj/item/match/is_hot()
return lit * heat
//////////////////
@@ -109,7 +109,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/starts_lit = FALSE
var/icon_on = "cigon" //Note - these are in masks.dmi not in cigarette.dmi
var/icon_off = "cigoff"
var/type_butt = /obj/item/weapon/cigbutt
var/type_butt = /obj/item/cigbutt
var/lastHolder = null
var/smoketime = 300
var/chem_volume = 30
@@ -133,7 +133,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
STOP_PROCESSING(SSobj, src)
. = ..()
/obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W, mob/user, params)
/obj/item/clothing/mask/cigarette/attackby(obj/item/W, mob/user, params)
if(!lit && smoketime > 0)
var/lighting_text = W.ignition_effect(src, user)
if(lighting_text)
@@ -141,7 +141,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else
return ..()
/obj/item/clothing/mask/cigarette/afterattack(obj/item/weapon/reagent_containers/glass/glass, mob/user, proximity)
/obj/item/clothing/mask/cigarette/afterattack(obj/item/reagent_containers/glass/glass, mob/user, proximity)
if(!proximity || lit) //can't dip if cigarette is lit (it will heat the reagents in the glass instead)
return
if(istype(glass)) //you can dip cigarettes into beakers
@@ -289,7 +289,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon_state = "spliffoff"
icon_on = "spliffon"
icon_off = "spliffoff"
type_butt = /obj/item/weapon/cigbutt/roach
type_butt = /obj/item/cigbutt/roach
throw_speed = 0.5
item_state = "spliffoff"
smoketime = 180
@@ -304,12 +304,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
list_reagents = list("nicotine" = 15, "mushroomhallucinogen" = 35)
starts_lit = TRUE
/obj/item/weapon/cigbutt/roach
/obj/item/cigbutt/roach
name = "roach"
desc = "A manky old roach, or for non-stoners, a used rollup."
icon_state = "roach"
/obj/item/weapon/cigbutt/roach/New()
/obj/item/cigbutt/roach/New()
..()
src.pixel_x = rand(-5, 5)
src.pixel_y = rand(-5, 5)
@@ -324,7 +324,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon_state = "cigaroff"
icon_on = "cigaron"
icon_off = "cigaroff"
type_butt = /obj/item/weapon/cigbutt/cigarbutt
type_butt = /obj/item/cigbutt/cigarbutt
throw_speed = 0.5
item_state = "cigaroff"
smoketime = 1500
@@ -349,7 +349,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
smoketime = 7200
chem_volume = 50
/obj/item/weapon/cigbutt
/obj/item/cigbutt
name = "cigarette butt"
desc = "A manky old cigarette butt."
icon = 'icons/obj/clothing/masks.dmi'
@@ -357,7 +357,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
w_class = WEIGHT_CLASS_TINY
throwforce = 0
/obj/item/weapon/cigbutt/cigarbutt
/obj/item/cigbutt/cigarbutt
name = "cigar butt"
desc = "A manky old cigar butt."
icon_state = "cigarbutt"
@@ -407,8 +407,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/cigarette/pipe/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown))
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O
if(istype(O, /obj/item/reagent_containers/food/snacks/grown))
var/obj/item/reagent_containers/food/snacks/grown/G = O
if(!packeditem)
if(G.dry == 1)
to_chat(user, "<span class='notice'>You stuff [O] into [src].</span>")
@@ -463,7 +463,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/////////
//ZIPPO//
/////////
/obj/item/weapon/lighter
/obj/item/lighter
name = "\improper Zippo lighter"
desc = "The zippo."
icon = 'icons/obj/cigarettes.dmi'
@@ -478,17 +478,17 @@ CIGARETTE PACKETS ARE IN FANCY.DM
resistance_flags = FIRE_PROOF
light_color = LIGHT_COLOR_FIRE
/obj/item/weapon/lighter/update_icon()
/obj/item/lighter/update_icon()
if(lit)
icon_state = "[initial(icon_state)]_on"
else
icon_state = "[initial(icon_state)]"
/obj/item/weapon/lighter/ignition_effect(atom/A, mob/user)
/obj/item/lighter/ignition_effect(atom/A, mob/user)
if(is_hot())
. = "<span class='rose'>With a single flick of their wrist, [user] smoothly lights [A] with [src]. Damn [user.p_theyre()] cool.</span>"
/obj/item/weapon/lighter/proc/set_lit(new_lit)
/obj/item/lighter/proc/set_lit(new_lit)
lit = new_lit
if(lit)
force = 5
@@ -505,7 +505,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
STOP_PROCESSING(SSobj, src)
update_icon()
/obj/item/weapon/lighter/attack_self(mob/living/user)
/obj/item/lighter/attack_self(mob/living/user)
if(user.is_holding(src))
if(!lit)
set_lit(TRUE)
@@ -538,7 +538,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else
. = ..()
/obj/item/weapon/lighter/attack(mob/living/carbon/M, mob/living/carbon/user)
/obj/item/lighter/attack(mob/living/carbon/M, mob/living/carbon/user)
if(lit && M.IgniteMob())
message_admins("[key_name_admin(user)] set [key_name_admin(M)] on fire")
log_game("[key_name(user)] set [key_name(M)] on fire")
@@ -556,25 +556,25 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else
..()
/obj/item/weapon/lighter/process()
/obj/item/lighter/process()
open_flame()
/obj/item/weapon/lighter/is_hot()
/obj/item/lighter/is_hot()
return lit * heat
/obj/item/weapon/lighter/greyscale
/obj/item/lighter/greyscale
name = "cheap lighter"
desc = "A cheap-as-free lighter."
icon_state = "lighter"
fancy = FALSE
/obj/item/weapon/lighter/greyscale/Initialize()
/obj/item/lighter/greyscale/Initialize()
. = ..()
add_atom_colour(color2hex(randomColor(1)), FIXED_COLOUR_PRIORITY)
update_icon()
/obj/item/weapon/lighter/greyscale/update_icon()
/obj/item/lighter/greyscale/update_icon()
cut_overlays()
var/mutable_appearance/base_overlay = mutable_appearance(icon,"[initial(icon_state)]_base")
base_overlay.appearance_flags = RESET_COLOR //the edging doesn't change color
@@ -582,7 +582,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
base_overlay.icon_state = "[initial(icon_state)]_on"
add_overlay(base_overlay)
/obj/item/weapon/lighter/greyscale/ignition_effect(atom/A, mob/user)
/obj/item/lighter/greyscale/ignition_effect(atom/A, mob/user)
if(is_hot())
. = "<span class='notice'>After some fiddling, [user] manages to light [A] with [src].</span>"
@@ -590,18 +590,18 @@ CIGARETTE PACKETS ARE IN FANCY.DM
///////////
//ROLLING//
///////////
/obj/item/weapon/rollingpaper
/obj/item/rollingpaper
name = "rolling paper"
desc = "A thin piece of paper used to make fine smokeables."
icon = 'icons/obj/cigarettes.dmi'
icon_state = "cig_paper"
w_class = WEIGHT_CLASS_TINY
/obj/item/weapon/rollingpaper/afterattack(atom/target, mob/user, proximity)
/obj/item/rollingpaper/afterattack(atom/target, mob/user, proximity)
if(!proximity)
return
if(istype(target, /obj/item/weapon/reagent_containers/food/snacks/grown))
var/obj/item/weapon/reagent_containers/food/snacks/grown/O = target
if(istype(target, /obj/item/reagent_containers/food/snacks/grown))
var/obj/item/reagent_containers/food/snacks/grown/O = target
if(O.dry)
var/obj/item/clothing/mask/cigarette/rollie/R = new /obj/item/clothing/mask/cigarette/rollie(user.loc)
R.chem_volume = target.reagents.total_volume
@@ -649,7 +649,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
item_state = "[param_color]_vape"
/obj/item/clothing/mask/vape/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/weapon/reagent_containers) && (O.container_type & OPENCONTAINER_1))
if(istype(O, /obj/item/reagent_containers) && (O.container_type & OPENCONTAINER_1))
if(reagents.total_volume < chem_volume)
if(O.reagents.total_volume > 0)
O.reagents.trans_to(src,25)
@@ -659,7 +659,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else
to_chat(user, "<span class='warning'>[src] can't hold anymore reagents!</span>")
if(istype(O, /obj/item/weapon/screwdriver))
if(istype(O, /obj/item/screwdriver))
if(!screw)
screw = 1
to_chat(user, "<span class='notice'>You open the cap on the [src]</span>")
@@ -3,7 +3,7 @@
// Circuitboard
/obj/item/weapon/circuitboard
/obj/item/circuitboard
name = "circuit board"
icon = 'icons/obj/module.dmi'
icon_state = "id_mod"
@@ -15,7 +15,7 @@
w_class = WEIGHT_CLASS_SMALL
var/build_path = null
/obj/item/weapon/circuitboard/proc/apply_default_parts(obj/machinery/M)
/obj/item/circuitboard/proc/apply_default_parts(obj/machinery/M)
return
// Circuitboard/machine
@@ -23,15 +23,15 @@
micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells.
*/
/obj/item/weapon/circuitboard/machine
/obj/item/circuitboard/machine
var/list/req_components // Components required by the machine.
// Example: list(/obj/item/weapon/stock_parts/matter_bin = 5)
// Example: list(/obj/item/stock_parts/matter_bin = 5)
var/list/def_components // Default replacements for req_components, to be used in apply_default_parts instead of req_components types
// Example: list(/obj/item/weapon/stock_parts/matter_bin = /obj/item/weapon/stock_parts/matter_bin/super)
// Example: list(/obj/item/stock_parts/matter_bin = /obj/item/stock_parts/matter_bin/super)
// Applies the default parts defined by the circuit board when the machine is created
/obj/item/weapon/circuitboard/machine/apply_default_parts(obj/machinery/M)
/obj/item/circuitboard/machine/apply_default_parts(obj/machinery/M)
if(!req_components)
return
@@ -1,183 +1,183 @@
/obj/item/weapon/circuitboard/computer/turbine_computer
/obj/item/circuitboard/computer/turbine_computer
name = "Turbine Computer (Computer Board)"
build_path = /obj/machinery/computer/turbine_computer
origin_tech = "programming=4;engineering=4;powerstorage=4"
/obj/item/weapon/circuitboard/computer/launchpad_console
/obj/item/circuitboard/computer/launchpad_console
name = "Launchpad Control Console (Computer Board)"
build_path = /obj/machinery/computer/launchpad
origin_tech = "programming=3;bluespace=3;plasmatech=2"
/obj/item/weapon/circuitboard/computer/message_monitor
/obj/item/circuitboard/computer/message_monitor
name = "Message Monitor (Computer Board)"
build_path = /obj/machinery/computer/message_monitor
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/computer/security
/obj/item/circuitboard/computer/security
name = "Security Cameras (Computer Board)"
build_path = /obj/machinery/computer/security
origin_tech = "programming=2;combat=2"
/obj/item/weapon/circuitboard/computer/xenobiology
/obj/item/circuitboard/computer/xenobiology
name = "circuit board (Xenobiology Console)"
build_path = /obj/machinery/computer/camera_advanced/xenobio
origin_tech = "programming=3;biotech=3"
/obj/item/weapon/circuitboard/computer/base_construction
/obj/item/circuitboard/computer/base_construction
name = "circuit board (Aux Mining Base Construction Console)"
build_path = /obj/machinery/computer/camera_advanced/base_construction
origin_tech = "programming=3;engineering=3"
/obj/item/weapon/circuitboard/computer/aiupload
/obj/item/circuitboard/computer/aiupload
name = "AI Upload (Computer Board)"
build_path = /obj/machinery/computer/upload/ai
origin_tech = "programming=4;engineering=4"
/obj/item/weapon/circuitboard/computer/borgupload
/obj/item/circuitboard/computer/borgupload
name = "Cyborg Upload (Computer Board)"
build_path = /obj/machinery/computer/upload/borg
origin_tech = "programming=4;engineering=4"
/obj/item/weapon/circuitboard/computer/med_data
/obj/item/circuitboard/computer/med_data
name = "Medical Records Console (Computer Board)"
build_path = /obj/machinery/computer/med_data
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/computer/pandemic
/obj/item/circuitboard/computer/pandemic
name = "PanD.E.M.I.C. 2200 (Computer Board)"
build_path = /obj/machinery/computer/pandemic
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/computer/scan_consolenew
/obj/item/circuitboard/computer/scan_consolenew
name = "DNA Machine (Computer Board)"
build_path = /obj/machinery/computer/scan_consolenew
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/computer/communications
/obj/item/circuitboard/computer/communications
name = "Communications (Computer Board)"
build_path = /obj/machinery/computer/communications
origin_tech = "programming=3;magnets=3"
var/lastTimeUsed = 0
/obj/item/weapon/circuitboard/computer/card
/obj/item/circuitboard/computer/card
name = "ID Console (Computer Board)"
build_path = /obj/machinery/computer/card
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/computer/card/centcom
/obj/item/circuitboard/computer/card/centcom
name = "CentCom ID Console (Computer Board)"
build_path = /obj/machinery/computer/card/centcom
/obj/item/weapon/circuitboard/computer/card/minor
/obj/item/circuitboard/computer/card/minor
name = "Department Management Console (Computer Board)"
build_path = /obj/machinery/computer/card/minor
var/target_dept = 1
var/list/dept_list = list("General","Security","Medical","Science","Engineering")
/obj/item/weapon/circuitboard/computer/card/minor/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/obj/item/circuitboard/computer/card/minor/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/screwdriver))
target_dept = (target_dept == dept_list.len) ? 1 : (target_dept + 1)
to_chat(user, "<span class='notice'>You set the board to \"[dept_list[target_dept]]\".</span>")
else
return ..()
/obj/item/weapon/circuitboard/computer/card/minor/examine(user)
/obj/item/circuitboard/computer/card/minor/examine(user)
..()
to_chat(user, "Currently set to \"[dept_list[target_dept]]\".")
//obj/item/weapon/circuitboard/computer/shield
//obj/item/circuitboard/computer/shield
// name = "Shield Control (Computer Board)"
// build_path = /obj/machinery/computer/stationshield
/obj/item/weapon/circuitboard/computer/teleporter
/obj/item/circuitboard/computer/teleporter
name = "Teleporter (Computer Board)"
build_path = /obj/machinery/computer/teleporter
origin_tech = "programming=3;bluespace=3;plasmatech=3"
/obj/item/weapon/circuitboard/computer/secure_data
/obj/item/circuitboard/computer/secure_data
name = "Security Records Console (Computer Board)"
build_path = /obj/machinery/computer/secure_data
origin_tech = "programming=2;combat=2"
/obj/item/weapon/circuitboard/computer/stationalert
/obj/item/circuitboard/computer/stationalert
name = "Station Alerts (Computer Board)"
build_path = /obj/machinery/computer/station_alert
/obj/item/weapon/circuitboard/computer/atmos_control
/obj/item/circuitboard/computer/atmos_control
name = "Atmospheric Monitor (Computer Board)"
build_path = /obj/machinery/computer/atmos_control
/obj/item/weapon/circuitboard/computer/atmos_control/tank
/obj/item/circuitboard/computer/atmos_control/tank
name = "Tank Control (Computer Board)"
build_path = /obj/machinery/computer/atmos_control/tank
origin_tech = "programming=2;engineering=3;materials=2"
/obj/item/weapon/circuitboard/computer/atmos_alert
/obj/item/circuitboard/computer/atmos_alert
name = "Atmospheric Alert (Computer Board)"
build_path = /obj/machinery/computer/atmos_alert
/obj/item/weapon/circuitboard/computer/pod
/obj/item/circuitboard/computer/pod
name = "Massdriver control (Computer Board)"
build_path = /obj/machinery/computer/pod
/obj/item/weapon/circuitboard/computer/robotics
/obj/item/circuitboard/computer/robotics
name = "Robotics Control (Computer Board)"
build_path = /obj/machinery/computer/robotics
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/computer/cloning
/obj/item/circuitboard/computer/cloning
name = "Cloning (Computer Board)"
build_path = /obj/machinery/computer/cloning
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/computer/arcade/battle
/obj/item/circuitboard/computer/arcade/battle
name = "Arcade Battle (Computer Board)"
build_path = /obj/machinery/computer/arcade/battle
origin_tech = "programming=1"
/obj/item/weapon/circuitboard/computer/arcade/orion_trail
/obj/item/circuitboard/computer/arcade/orion_trail
name = "Orion Trail (Computer Board)"
build_path = /obj/machinery/computer/arcade/orion_trail
origin_tech = "programming=1"
/obj/item/weapon/circuitboard/computer/turbine_control
/obj/item/circuitboard/computer/turbine_control
name = "Turbine control (Computer Board)"
build_path = /obj/machinery/computer/turbine_computer
/obj/item/weapon/circuitboard/computer/solar_control
/obj/item/circuitboard/computer/solar_control
name = "Solar Control (Computer Board)" //name fixed 250810
build_path = /obj/machinery/power/solar_control
origin_tech = "programming=2;powerstorage=2"
/obj/item/weapon/circuitboard/computer/powermonitor
/obj/item/circuitboard/computer/powermonitor
name = "Power Monitor (Computer Board)" //name fixed 250810
build_path = /obj/machinery/computer/monitor
origin_tech = "programming=2;powerstorage=2"
/obj/item/weapon/circuitboard/computer/olddoor
/obj/item/circuitboard/computer/olddoor
name = "DoorMex (Computer Board)"
build_path = /obj/machinery/computer/pod/old
/obj/item/weapon/circuitboard/computer/syndicatedoor
/obj/item/circuitboard/computer/syndicatedoor
name = "ProComp Executive (Computer Board)"
build_path = /obj/machinery/computer/pod/old/syndicate
/obj/item/weapon/circuitboard/computer/swfdoor
/obj/item/circuitboard/computer/swfdoor
name = "Magix (Computer Board)"
build_path = /obj/machinery/computer/pod/old/swf
/obj/item/weapon/circuitboard/computer/prisoner
/obj/item/circuitboard/computer/prisoner
name = "Prisoner Management Console (Computer Board)"
build_path = /obj/machinery/computer/prisoner
/obj/item/weapon/circuitboard/computer/gulag_teleporter_console
/obj/item/circuitboard/computer/gulag_teleporter_console
name = "Labor Camp teleporter console (Computer Board)"
build_path = /obj/machinery/computer/gulag_teleporter_computer
/obj/item/weapon/circuitboard/computer/rdconsole
/obj/item/circuitboard/computer/rdconsole
name = "R&D Console (Computer Board)"
build_path = /obj/machinery/computer/rdconsole/core
/obj/item/weapon/circuitboard/computer/rdconsole/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/obj/item/circuitboard/computer/rdconsole/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/screwdriver))
if(build_path == /obj/machinery/computer/rdconsole/core)
name = "R&D Console - Robotics (Computer Board)"
build_path = /obj/machinery/computer/rdconsole/robotics
@@ -189,39 +189,39 @@
else
return ..()
/obj/item/weapon/circuitboard/computer/mecha_control
/obj/item/circuitboard/computer/mecha_control
name = "Exosuit Control Console (Computer Board)"
build_path = /obj/machinery/computer/mecha
/obj/item/weapon/circuitboard/computer/rdservercontrol
/obj/item/circuitboard/computer/rdservercontrol
name = "R&D Server Control (Computer Board)"
build_path = /obj/machinery/computer/rdservercontrol
/obj/item/weapon/circuitboard/computer/crew
/obj/item/circuitboard/computer/crew
name = "Crew Monitoring Console (Computer Board)"
build_path = /obj/machinery/computer/crew
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/computer/mech_bay_power_console
/obj/item/circuitboard/computer/mech_bay_power_console
name = "Mech Bay Power Control Console (Computer Board)"
build_path = /obj/machinery/computer/mech_bay_power_console
origin_tech = "programming=3;powerstorage=3"
/obj/item/weapon/circuitboard/computer/cargo
/obj/item/circuitboard/computer/cargo
name = "Supply Console (Computer Board)"
build_path = /obj/machinery/computer/cargo
origin_tech = "programming=3"
var/contraband = FALSE
var/emagged = FALSE
/obj/item/weapon/circuitboard/computer/cargo/attackby(obj/item/I, mob/user, params)
/obj/item/circuitboard/computer/cargo/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/device/multitool))
if(!emagged)
contraband = !contraband
to_chat(user, "<span class='notice'>Receiver spectrum set to [contraband ? "Broad" : "Standard"].</span>")
else
to_chat(user, "<span class='notice'>The spectrum chip is unresponsive.</span>")
else if(istype(I, /obj/item/weapon/card/emag))
else if(istype(I, /obj/item/card/emag))
if(!emagged)
contraband = TRUE
emagged = TRUE
@@ -230,41 +230,41 @@
return ..()
/obj/item/weapon/circuitboard/computer/cargo/request
/obj/item/circuitboard/computer/cargo/request
name = "Supply Request Console (Computer Board)"
build_path = /obj/machinery/computer/cargo/request
/obj/item/weapon/circuitboard/computer/stockexchange
/obj/item/circuitboard/computer/stockexchange
name = "circuit board (Stock Exchange Console)"
build_path = /obj/machinery/computer/stockexchange
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/computer/operating
/obj/item/circuitboard/computer/operating
name = "Operating Computer (Computer Board)"
build_path = /obj/machinery/computer/operating
origin_tech = "programming=2;biotech=3"
/obj/item/weapon/circuitboard/computer/mining
/obj/item/circuitboard/computer/mining
name = "Outpost Status Display (Computer Board)"
build_path = /obj/machinery/computer/security/mining
/obj/item/weapon/circuitboard/computer/comm_monitor
/obj/item/circuitboard/computer/comm_monitor
name = "Telecommunications Monitor (Computer Board)"
build_path = /obj/machinery/computer/telecomms/monitor
origin_tech = "programming=3;magnets=3;bluespace=2"
/obj/item/weapon/circuitboard/computer/comm_server
/obj/item/circuitboard/computer/comm_server
name = "Telecommunications Server Monitor (Computer Board)"
build_path = /obj/machinery/computer/telecomms/server
origin_tech = "programming=3;magnets=3;bluespace=2"
/obj/item/weapon/circuitboard/computer/shuttle
/obj/item/circuitboard/computer/shuttle
name = "Shuttle (Computer Board)"
build_path = /obj/machinery/computer/shuttle
var/shuttleId
var/possible_destinations = ""
/obj/item/weapon/circuitboard/computer/shuttle/attackby(obj/item/I, mob/user, params)
/obj/item/circuitboard/computer/shuttle/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/device/multitool))
var/chosen_id = round(input(usr, "Choose an ID number (-1 for reset):", "Input an Integer", null) as num|null)
if(chosen_id >= 0)
@@ -274,56 +274,56 @@
else
return ..()
/obj/item/weapon/circuitboard/computer/labor_shuttle
/obj/item/circuitboard/computer/labor_shuttle
name = "Labor Shuttle (Computer Board)"
build_path = /obj/machinery/computer/shuttle/labor
/obj/item/weapon/circuitboard/computer/labor_shuttle/one_way
/obj/item/circuitboard/computer/labor_shuttle/one_way
name = "Prisoner Shuttle Console (Computer Board)"
build_path = /obj/machinery/computer/shuttle/labor/one_way
/obj/item/weapon/circuitboard/computer/ferry
/obj/item/circuitboard/computer/ferry
name = "Transport Ferry (Computer Board)"
build_path = /obj/machinery/computer/shuttle/ferry
/obj/item/weapon/circuitboard/computer/ferry/request
/obj/item/circuitboard/computer/ferry/request
name = "Transport Ferry Console (Computer Board)"
build_path = /obj/machinery/computer/shuttle/ferry/request
/obj/item/weapon/circuitboard/computer/mining_shuttle
/obj/item/circuitboard/computer/mining_shuttle
name = "Mining Shuttle (Computer Board)"
build_path = /obj/machinery/computer/shuttle/mining
/obj/item/weapon/circuitboard/computer/white_ship
/obj/item/circuitboard/computer/white_ship
name = "White Ship (Computer Board)"
build_path = /obj/machinery/computer/shuttle/white_ship
/obj/item/weapon/circuitboard/computer/auxillary_base
/obj/item/circuitboard/computer/auxillary_base
name = "Auxillary Base Management Console (Computer Board)"
build_path = /obj/machinery/computer/auxillary_base
/obj/item/weapon/circuitboard/computer/holodeck// Not going to let people get this, but it's just here for future
/obj/item/circuitboard/computer/holodeck// Not going to let people get this, but it's just here for future
name = "Holodeck Control (Computer Board)"
build_path = /obj/machinery/computer/holodeck
origin_tech = "programming=4"
/obj/item/weapon/circuitboard/computer/aifixer
/obj/item/circuitboard/computer/aifixer
name = "AI Integrity Restorer (Computer Board)"
build_path = /obj/machinery/computer/aifixer
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/computer/slot_machine
/obj/item/circuitboard/computer/slot_machine
name = "Slot Machine (Computer Board)"
build_path = /obj/machinery/computer/slot_machine
origin_tech = "programming=1"
/obj/item/weapon/circuitboard/computer/libraryconsole
/obj/item/circuitboard/computer/libraryconsole
name = "Library Visitor Console (Computer Board)"
build_path = /obj/machinery/computer/libraryconsole
origin_tech = "programming=1"
/obj/item/weapon/circuitboard/computer/libraryconsole/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/obj/item/circuitboard/computer/libraryconsole/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/screwdriver))
if(build_path == /obj/machinery/computer/libraryconsole/bookmanagement)
name = "Library Visitor Console (Computer Board)"
build_path = /obj/machinery/computer/libraryconsole
@@ -335,35 +335,35 @@
else
return ..()
/obj/item/weapon/circuitboard/computer/apc_control
/obj/item/circuitboard/computer/apc_control
name = "\improper Power Flow Control Console (Computer Board)"
build_path = /obj/machinery/computer/apc_control
origin_tech = "programming=3;engineering=3;powerstorage=2"
/obj/item/weapon/circuitboard/computer/shuttle/monastery_shuttle
/obj/item/circuitboard/computer/shuttle/monastery_shuttle
name = "Monastery Shuttle (Computer Board)"
build_path = /obj/machinery/computer/shuttle/monastery_shuttle
/obj/item/weapon/circuitboard/computer/syndicate_shuttle
/obj/item/circuitboard/computer/syndicate_shuttle
name = "Syndicate Shuttle (Computer Board)"
build_path = /obj/machinery/computer/shuttle/syndicate
var/challenge = FALSE
var/moved = FALSE
/obj/item/weapon/circuitboard/computer/syndicate_shuttle/Initialize()
/obj/item/circuitboard/computer/syndicate_shuttle/Initialize()
. = ..()
GLOB.syndicate_shuttle_boards += src
/obj/item/weapon/circuitboard/computer/syndicate_shuttle/Destroy()
/obj/item/circuitboard/computer/syndicate_shuttle/Destroy()
GLOB.syndicate_shuttle_boards -= src
return ..()
/obj/item/weapon/circuitboard/computer/bsa_control
/obj/item/circuitboard/computer/bsa_control
name = "Bluespace Artillery Controls (Computer Board)"
build_path = /obj/machinery/computer/bsa_control
origin_tech = "engineering=2;combat=2;bluespace=2"
/obj/item/weapon/circuitboard/computer/sat_control
/obj/item/circuitboard/computer/sat_control
name = "Satellite Network Control (Computer Board)"
build_path = /obj/machinery/computer/sat_control
origin_tech = "engineering=3"
@@ -1,223 +1,223 @@
/obj/item/weapon/circuitboard/machine/sleeper
/obj/item/circuitboard/machine/sleeper
name = "Sleeper (Machine Board)"
build_path = /obj/machinery/sleeper
origin_tech = "programming=3;biotech=2;engineering=3"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/stock_parts/console_screen = 1,
/obj/item/stack/sheet/glass = 1)
/obj/item/weapon/circuitboard/machine/announcement_system
/obj/item/circuitboard/machine/announcement_system
name = "Announcement System (Machine Board)"
build_path = /obj/machinery/announcement_system
origin_tech = "programming=3;bluespace=3;magnets=2"
req_components = list(
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/autolathe
/obj/item/circuitboard/machine/autolathe
name = "Autolathe (Machine Board)"
build_path = /obj/machinery/autolathe
origin_tech = "engineering=2;programming=2"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 3,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/stock_parts/matter_bin = 3,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/clonepod
/obj/item/circuitboard/machine/clonepod
name = "Clone Pod (Machine Board)"
build_path = /obj/machinery/clonepod
origin_tech = "programming=2;biotech=2"
req_components = list(
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/scanning_module = 2,
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/stock_parts/scanning_module = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stack/sheet/glass = 1)
/obj/item/weapon/circuitboard/machine/abductor
/obj/item/circuitboard/machine/abductor
name = "alien board (Report This)"
icon_state = "abductor_mod"
origin_tech = "programming=5;abductor=3"
/obj/item/weapon/circuitboard/machine/clockwork
/obj/item/circuitboard/machine/clockwork
name = "clockwork board (Report This)"
icon_state = "clock_mod"
/obj/item/weapon/circuitboard/machine/clonescanner
/obj/item/circuitboard/machine/clonescanner
name = "Cloning Scanner (Machine Board)"
build_path = /obj/machinery/dna_scannernew
origin_tech = "programming=2;biotech=2"
req_components = list(
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/stock_parts/scanning_module = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stack/sheet/glass = 1,
/obj/item/stack/cable_coil = 2)
/obj/item/weapon/circuitboard/machine/holopad
/obj/item/circuitboard/machine/holopad
name = "AI Holopad (Machine Board)"
build_path = /obj/machinery/holopad
origin_tech = "programming=1"
req_components = list(/obj/item/weapon/stock_parts/capacitor = 1)
req_components = list(/obj/item/stock_parts/capacitor = 1)
/obj/item/weapon/circuitboard/machine/launchpad
/obj/item/circuitboard/machine/launchpad
name = "Bluespace Launchpad (Machine Board)"
build_path = /obj/machinery/launchpad
origin_tech = "programming=3;engineering=3;plasmatech=2;bluespace=3"
req_components = list(
/obj/item/weapon/ore/bluespace_crystal = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial)
/obj/item/ore/bluespace_crystal = 1,
/obj/item/stock_parts/manipulator = 1)
def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial)
/obj/item/weapon/circuitboard/machine/limbgrower
/obj/item/circuitboard/machine/limbgrower
name = "Limb Grower (Machine Board)"
build_path = /obj/machinery/limbgrower
origin_tech = "programming=2;biotech=2"
req_components = list(
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/reagent_containers/glass/beaker = 2,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/stock_parts/manipulator = 1,
/obj/item/reagent_containers/glass/beaker = 2,
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/quantumpad
/obj/item/circuitboard/machine/quantumpad
name = "Quantum Pad (Machine Board)"
build_path = /obj/machinery/quantumpad
origin_tech = "programming=3;engineering=3;plasmatech=3;bluespace=4"
req_components = list(
/obj/item/weapon/ore/bluespace_crystal = 1,
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/ore/bluespace_crystal = 1,
/obj/item/stock_parts/capacitor = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stack/cable_coil = 1)
def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial)
def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial)
/obj/item/weapon/circuitboard/machine/recharger
/obj/item/circuitboard/machine/recharger
name = "Weapon Recharger (Machine Board)"
build_path = /obj/machinery/recharger
origin_tech = "powerstorage=4;engineering=3;materials=4"
req_components = list(/obj/item/weapon/stock_parts/capacitor = 1)
req_components = list(/obj/item/stock_parts/capacitor = 1)
/obj/item/weapon/circuitboard/machine/cyborgrecharger
/obj/item/circuitboard/machine/cyborgrecharger
name = "Cyborg Recharger (Machine Board)"
build_path = /obj/machinery/recharge_station
origin_tech = "powerstorage=3;engineering=3"
req_components = list(
/obj/item/weapon/stock_parts/capacitor = 2,
/obj/item/weapon/stock_parts/cell = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
def_components = list(/obj/item/weapon/stock_parts/cell = /obj/item/weapon/stock_parts/cell/high)
/obj/item/stock_parts/capacitor = 2,
/obj/item/stock_parts/cell = 1,
/obj/item/stock_parts/manipulator = 1)
def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high)
/obj/item/weapon/circuitboard/machine/recycler
/obj/item/circuitboard/machine/recycler
name = "Recycler (Machine Board)"
build_path = /obj/machinery/recycler
origin_tech = "programming=2;engineering=2"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1)
/obj/item/weapon/circuitboard/machine/space_heater
/obj/item/circuitboard/machine/space_heater
name = "Space Heater (Machine Board)"
build_path = /obj/machinery/space_heater
origin_tech = "programming=2;engineering=2;plasmatech=2"
req_components = list(
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stock_parts/capacitor = 1,
/obj/item/stack/cable_coil = 3)
/obj/item/weapon/circuitboard/machine/telecomms/broadcaster
/obj/item/circuitboard/machine/telecomms/broadcaster
name = "Subspace Broadcaster (Machine Board)"
build_path = /obj/machinery/telecomms/broadcaster
origin_tech = "programming=2;engineering=2;bluespace=1"
req_components = list(
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/subspace/filter = 1,
/obj/item/weapon/stock_parts/subspace/crystal = 1,
/obj/item/weapon/stock_parts/micro_laser = 2)
/obj/item/stock_parts/subspace/filter = 1,
/obj/item/stock_parts/subspace/crystal = 1,
/obj/item/stock_parts/micro_laser = 2)
/obj/item/weapon/circuitboard/machine/telecomms/bus
/obj/item/circuitboard/machine/telecomms/bus
name = "Bus Mainframe (Machine Board)"
build_path = /obj/machinery/telecomms/bus
origin_tech = "programming=2;engineering=2"
req_components = list(
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/subspace/filter = 1)
/obj/item/stock_parts/subspace/filter = 1)
/obj/item/weapon/circuitboard/machine/telecomms/hub
/obj/item/circuitboard/machine/telecomms/hub
name = "Hub Mainframe (Machine Board)"
build_path = /obj/machinery/telecomms/hub
origin_tech = "programming=2;engineering=2"
req_components = list(
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/subspace/filter = 2)
/obj/item/stock_parts/subspace/filter = 2)
/obj/item/weapon/circuitboard/machine/telecomms/processor
/obj/item/circuitboard/machine/telecomms/processor
name = "Processor Unit (Machine Board)"
build_path = /obj/machinery/telecomms/processor
origin_tech = "programming=2;engineering=2"
req_components = list(
/obj/item/weapon/stock_parts/manipulator = 3,
/obj/item/weapon/stock_parts/subspace/filter = 1,
/obj/item/weapon/stock_parts/subspace/treatment = 2,
/obj/item/weapon/stock_parts/subspace/analyzer = 1,
/obj/item/stock_parts/manipulator = 3,
/obj/item/stock_parts/subspace/filter = 1,
/obj/item/stock_parts/subspace/treatment = 2,
/obj/item/stock_parts/subspace/analyzer = 1,
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/subspace/amplifier = 1)
/obj/item/stock_parts/subspace/amplifier = 1)
/obj/item/weapon/circuitboard/machine/telecomms/receiver
/obj/item/circuitboard/machine/telecomms/receiver
name = "Subspace Receiver (Machine Board)"
build_path = /obj/machinery/telecomms/receiver
origin_tech = "programming=2;engineering=2;bluespace=1"
req_components = list(
/obj/item/weapon/stock_parts/subspace/ansible = 1,
/obj/item/weapon/stock_parts/subspace/filter = 1,
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/weapon/stock_parts/micro_laser = 1)
/obj/item/stock_parts/subspace/ansible = 1,
/obj/item/stock_parts/subspace/filter = 1,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stock_parts/micro_laser = 1)
/obj/item/weapon/circuitboard/machine/telecomms/relay
/obj/item/circuitboard/machine/telecomms/relay
name = "Relay Mainframe (Machine Board)"
build_path = /obj/machinery/telecomms/relay
origin_tech = "programming=2;engineering=2;bluespace=2"
req_components = list(
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/subspace/filter = 2)
/obj/item/stock_parts/subspace/filter = 2)
/obj/item/weapon/circuitboard/machine/telecomms/server
/obj/item/circuitboard/machine/telecomms/server
name = "Telecommunication Server (Machine Board)"
build_path = /obj/machinery/telecomms/server
origin_tech = "programming=2;engineering=2"
req_components = list(
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/subspace/filter = 1)
/obj/item/stock_parts/subspace/filter = 1)
/obj/item/weapon/circuitboard/machine/teleporter_hub
/obj/item/circuitboard/machine/teleporter_hub
name = "Teleporter Hub (Machine Board)"
build_path = /obj/machinery/teleport/hub
origin_tech = "programming=3;engineering=4;bluespace=4;materials=4"
req_components = list(
/obj/item/weapon/ore/bluespace_crystal = 3,
/obj/item/weapon/stock_parts/matter_bin = 1)
def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial)
/obj/item/ore/bluespace_crystal = 3,
/obj/item/stock_parts/matter_bin = 1)
def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial)
/obj/item/weapon/circuitboard/machine/teleporter_station
/obj/item/circuitboard/machine/teleporter_station
name = "Teleporter Station (Machine Board)"
build_path = /obj/machinery/teleport/station
origin_tech = "programming=4;engineering=4;bluespace=4;plasmatech=3"
req_components = list(
/obj/item/weapon/ore/bluespace_crystal = 2,
/obj/item/weapon/stock_parts/capacitor = 2,
/obj/item/weapon/stock_parts/console_screen = 1)
def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial)
/obj/item/ore/bluespace_crystal = 2,
/obj/item/stock_parts/capacitor = 2,
/obj/item/stock_parts/console_screen = 1)
def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial)
/obj/item/weapon/circuitboard/machine/vendor
/obj/item/circuitboard/machine/vendor
name = "Booze-O-Mat Vendor (Machine Board)"
build_path = /obj/machinery/vending/boozeomat
origin_tech = "programming=1"
req_components = list(
/obj/item/weapon/vending_refill/boozeomat = 3)
/obj/item/vending_refill/boozeomat = 3)
var/static/list/vending_names_paths = list(/obj/machinery/vending/boozeomat = "Booze-O-Mat",
/obj/machinery/vending/coffee = "Solar's Best Hot Drinks",
@@ -229,8 +229,8 @@
/obj/machinery/vending/medical = "NanoMed Plus",
/obj/machinery/vending/wallmed = "NanoMed")
/obj/item/weapon/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/obj/item/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/screwdriver))
var/position = vending_names_paths.Find(build_path)
position = (position == vending_names_paths.len) ? 1 : (position + 1)
var/typepath = vending_names_paths[position]
@@ -240,57 +240,57 @@
else
return ..()
/obj/item/weapon/circuitboard/machine/vendor/proc/set_type(obj/machinery/vending/typepath)
/obj/item/circuitboard/machine/vendor/proc/set_type(obj/machinery/vending/typepath)
build_path = typepath
name = "[vending_names_paths[build_path]] Vendor (Machine Board)"
req_components = list(initial(typepath.refill_canister) = initial(typepath.refill_count))
/obj/item/weapon/circuitboard/machine/vendor/apply_default_parts(obj/machinery/M)
/obj/item/circuitboard/machine/vendor/apply_default_parts(obj/machinery/M)
for(var/typepath in vending_names_paths)
if(istype(M, typepath))
set_type(typepath)
break
return ..()
/obj/item/weapon/circuitboard/machine/mech_recharger
/obj/item/circuitboard/machine/mech_recharger
name = "Mechbay Recharger (Machine Board)"
build_path = /obj/machinery/mech_bay_recharge_port
origin_tech = "programming=3;powerstorage=3;engineering=3"
req_components = list(
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/capacitor = 5)
/obj/item/stock_parts/capacitor = 5)
/obj/item/weapon/circuitboard/machine/mechfab
/obj/item/circuitboard/machine/mechfab
name = "Exosuit Fabricator (Machine Board)"
build_path = /obj/machinery/mecha_part_fabricator
origin_tech = "programming=2;engineering=2"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 2,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/cryo_tube
/obj/item/circuitboard/machine/cryo_tube
name = "Cryotube (Machine Board)"
build_path = /obj/machinery/atmospherics/components/unary/cryo_cell
origin_tech = "programming=4;biotech=3;engineering=4;plasmatech=3"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/stock_parts/console_screen = 1,
/obj/item/stack/sheet/glass = 2)
/obj/item/weapon/circuitboard/machine/thermomachine
/obj/item/circuitboard/machine/thermomachine
name = "Thermomachine (Machine Board)"
desc = "You can use a screwdriver to switch between heater and freezer."
origin_tech = "programming=3;plasmatech=3"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 2,
/obj/item/weapon/stock_parts/micro_laser = 2,
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/micro_laser = 2,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/thermomachine/Initialize()
/obj/item/circuitboard/machine/thermomachine/Initialize()
. = ..()
if(prob(50))
name = "Freezer (Machine Board)"
@@ -299,12 +299,12 @@
name = "Heater (Machine Board)"
build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater
#define FREEZER /obj/item/weapon/circuitboard/machine/thermomachine/freezer
#define HEATER /obj/item/weapon/circuitboard/machine/thermomachine/heater
#define FREEZER /obj/item/circuitboard/machine/thermomachine/freezer
#define HEATER /obj/item/circuitboard/machine/thermomachine/heater
/obj/item/weapon/circuitboard/machine/thermomachine/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
var/obj/item/weapon/circuitboard/new_type
/obj/item/circuitboard/machine/thermomachine/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/screwdriver))
var/obj/item/circuitboard/new_type
var/new_setting
switch(build_path)
if(FREEZER)
@@ -323,46 +323,46 @@
#undef FREEZER
#undef HEATER
/obj/item/weapon/circuitboard/machine/thermomachine/heater
/obj/item/circuitboard/machine/thermomachine/heater
name = "Heater (Machine Board)"
build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater
/obj/item/weapon/circuitboard/machine/thermomachine/freezer
/obj/item/circuitboard/machine/thermomachine/freezer
name = "Freezer (Machine Board)"
build_path = /obj/machinery/atmospherics/components/unary/thermomachine/freezer
/obj/item/weapon/circuitboard/machine/deep_fryer
/obj/item/circuitboard/machine/deep_fryer
name = "circuit board (Deep Fryer)"
build_path = /obj/machinery/deepfryer
origin_tech = "programming=1"
req_components = list(/obj/item/weapon/stock_parts/micro_laser = 1)
req_components = list(/obj/item/stock_parts/micro_laser = 1)
/obj/item/weapon/circuitboard/machine/gibber
/obj/item/circuitboard/machine/gibber
name = "Gibber (Machine Board)"
build_path = /obj/machinery/gibber
origin_tech = "programming=2;engineering=2"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1)
/obj/item/weapon/circuitboard/machine/monkey_recycler
/obj/item/circuitboard/machine/monkey_recycler
name = "Monkey Recycler (Machine Board)"
build_path = /obj/machinery/monkey_recycler
origin_tech = "programming=1;biotech=2"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1)
/obj/item/weapon/circuitboard/machine/processor
/obj/item/circuitboard/machine/processor
name = "Food Processor (Machine Board)"
build_path = /obj/machinery/processor
origin_tech = "programming=1"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1)
/obj/item/weapon/circuitboard/machine/processor/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/obj/item/circuitboard/machine/processor/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/screwdriver))
if(build_path == /obj/machinery/processor)
name = "Slime Processor (Machine Board)"
build_path = /obj/machinery/processor/slime
@@ -374,15 +374,15 @@
else
return ..()
/obj/item/weapon/circuitboard/machine/processor/slime
/obj/item/circuitboard/machine/processor/slime
name = "Slime Processor (Machine Board)"
build_path = /obj/machinery/processor/slime
/obj/item/weapon/circuitboard/machine/smartfridge
/obj/item/circuitboard/machine/smartfridge
name = "Smartfridge (Machine Board)"
build_path = /obj/machinery/smartfridge
origin_tech = "programming=1"
req_components = list(/obj/item/weapon/stock_parts/matter_bin = 1)
req_components = list(/obj/item/stock_parts/matter_bin = 1)
var/static/list/fridges_name_paths = list(/obj/machinery/smartfridge = "plant produce",
/obj/machinery/smartfridge/food = "food",
/obj/machinery/smartfridge/drinks = "drinks",
@@ -391,13 +391,13 @@
/obj/machinery/smartfridge/chemistry/virology = "viruses",
/obj/machinery/smartfridge/disks = "disks")
/obj/item/weapon/circuitboard/machine/smartfridge/Initialize(mapload, new_type)
/obj/item/circuitboard/machine/smartfridge/Initialize(mapload, new_type)
if(new_type)
build_path = new_type
return ..()
/obj/item/weapon/circuitboard/machine/smartfridge/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/obj/item/circuitboard/machine/smartfridge/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/screwdriver))
var/position = fridges_name_paths.Find(build_path, fridges_name_paths)
position = (position == fridges_name_paths.len) ? 1 : (position + 1)
build_path = fridges_name_paths[position]
@@ -405,218 +405,218 @@
else
return ..()
/obj/item/weapon/circuitboard/machine/smartfridge/examine(mob/user)
/obj/item/circuitboard/machine/smartfridge/examine(mob/user)
..()
to_chat(user, "<span class='info'>[src] is set to [fridges_name_paths[build_path]]. You can use a screwdriver to reconfigure it.</span>")
/obj/item/weapon/circuitboard/machine/biogenerator
/obj/item/circuitboard/machine/biogenerator
name = "Biogenerator (Machine Board)"
build_path = /obj/machinery/biogenerator
origin_tech = "programming=2;biotech=3;materials=3"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/plantgenes
/obj/item/circuitboard/machine/plantgenes
name = "Plant DNA Manipulator (Machine Board)"
build_path = /obj/machinery/plantgenes
origin_tech = "programming=3;biotech=3"
req_components = list(
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/weapon/stock_parts/scanning_module = 1)
/obj/item/stock_parts/manipulator = 1,
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stock_parts/console_screen = 1,
/obj/item/stock_parts/scanning_module = 1)
/obj/item/weapon/circuitboard/machine/plantgenes/vault
/obj/item/circuitboard/machine/plantgenes/vault
name = "alien board (Plant DNA Manipulator)"
icon_state = "abductor_mod"
origin_tech = "programming=5;biotech=5"
// It wasn't made by actual abductors race, so no abductor tech here.
def_components = list(
/obj/item/weapon/stock_parts/manipulator = /obj/item/weapon/stock_parts/manipulator/femto,
/obj/item/weapon/stock_parts/micro_laser = /obj/item/weapon/stock_parts/micro_laser/quadultra,
/obj/item/weapon/stock_parts/scanning_module = /obj/item/weapon/stock_parts/scanning_module/triphasic)
/obj/item/stock_parts/manipulator = /obj/item/stock_parts/manipulator/femto,
/obj/item/stock_parts/micro_laser = /obj/item/stock_parts/micro_laser/quadultra,
/obj/item/stock_parts/scanning_module = /obj/item/stock_parts/scanning_module/triphasic)
/obj/item/weapon/circuitboard/machine/hydroponics
/obj/item/circuitboard/machine/hydroponics
name = "Hydroponics Tray (Machine Board)"
build_path = /obj/machinery/hydroponics/constructable
origin_tech = "programming=1;biotech=2"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 2,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/seed_extractor
/obj/item/circuitboard/machine/seed_extractor
name = "Seed Extractor (Machine Board)"
build_path = /obj/machinery/seed_extractor
origin_tech = "programming=1"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1)
/obj/item/weapon/circuitboard/machine/ore_redemption
/obj/item/circuitboard/machine/ore_redemption
name = "Ore Redemption (Machine Board)"
build_path = /obj/machinery/mineral/ore_redemption
origin_tech = "programming=1;engineering=2"
req_components = list(
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/stock_parts/console_screen = 1,
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/device/assembly/igniter = 1)
/obj/item/weapon/circuitboard/machine/mining_equipment_vendor
/obj/item/circuitboard/machine/mining_equipment_vendor
name = "Mining Equipment Vendor (Machine Board)"
build_path = /obj/machinery/mineral/equipment_vendor
origin_tech = "programming=1;engineering=3"
req_components = list(
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/weapon/stock_parts/matter_bin = 3)
/obj/item/stock_parts/console_screen = 1,
/obj/item/stock_parts/matter_bin = 3)
/obj/item/weapon/circuitboard/machine/mining_equipment_vendor/golem
/obj/item/circuitboard/machine/mining_equipment_vendor/golem
name = "Golem Ship Equipment Vendor (Machine Board)"
build_path = /obj/machinery/mineral/equipment_vendor/golem
/obj/item/weapon/circuitboard/machine/ntnet_relay
/obj/item/circuitboard/machine/ntnet_relay
name = "NTNet Relay (Machine Board)"
build_path = /obj/machinery/ntnet_relay
origin_tech = "programming=3;bluespace=3;magnets=2"
req_components = list(
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/subspace/filter = 1)
/obj/item/stock_parts/subspace/filter = 1)
/obj/item/weapon/circuitboard/machine/pacman
/obj/item/circuitboard/machine/pacman
name = "PACMAN-type Generator (Machine Board)"
build_path = /obj/machinery/power/port_gen/pacman
origin_tech = "programming=2;powerstorage=3;plasmatech=3;engineering=3"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/capacitor = 1)
/obj/item/stock_parts/capacitor = 1)
/obj/item/weapon/circuitboard/machine/pacman/super
/obj/item/circuitboard/machine/pacman/super
name = "SUPERPACMAN-type Generator (Machine Board)"
build_path = /obj/machinery/power/port_gen/pacman/super
origin_tech = "programming=3;powerstorage=4;engineering=4"
/obj/item/weapon/circuitboard/machine/pacman/mrs
/obj/item/circuitboard/machine/pacman/mrs
name = "MRSPACMAN-type Generator (Machine Board)"
build_path = /obj/machinery/power/port_gen/pacman/mrs
origin_tech = "programming=3;powerstorage=4;engineering=4;plasmatech=4"
/obj/item/weapon/circuitboard/machine/rtg
/obj/item/circuitboard/machine/rtg
name = "RTG (Machine Board)"
build_path = /obj/machinery/power/rtg
origin_tech = "programming=2;materials=4;powerstorage=3;engineering=2"
req_components = list(
/obj/item/stack/cable_coil = 5,
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/stock_parts/capacitor = 1,
/obj/item/stack/sheet/mineral/uranium = 10) // We have no Pu-238, and this is the closest thing to it.
/obj/item/weapon/circuitboard/machine/rtg/advanced
/obj/item/circuitboard/machine/rtg/advanced
name = "Advanced RTG (Machine Board)"
build_path = /obj/machinery/power/rtg/advanced
origin_tech = "programming=3;materials=5;powerstorage=4;engineering=3;plasmatech=3"
req_components = list(
/obj/item/stack/cable_coil = 5,
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/stock_parts/capacitor = 1,
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stack/sheet/mineral/uranium = 10,
/obj/item/stack/sheet/mineral/plasma = 5)
/obj/item/weapon/circuitboard/machine/abductor/core
/obj/item/circuitboard/machine/abductor/core
name = "alien board (Void Core)"
build_path = /obj/machinery/power/rtg/abductor
origin_tech = "programming=5;abductor=5;powerstorage=8;engineering=8"
req_components = list(
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/cell/infinite/abductor = 1)
/obj/item/stock_parts/capacitor = 1,
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stock_parts/cell/infinite/abductor = 1)
def_components = list(
/obj/item/weapon/stock_parts/capacitor = /obj/item/weapon/stock_parts/capacitor/quadratic,
/obj/item/weapon/stock_parts/micro_laser = /obj/item/weapon/stock_parts/micro_laser/quadultra)
/obj/item/stock_parts/capacitor = /obj/item/stock_parts/capacitor/quadratic,
/obj/item/stock_parts/micro_laser = /obj/item/stock_parts/micro_laser/quadultra)
/obj/item/weapon/circuitboard/machine/emitter
/obj/item/circuitboard/machine/emitter
name = "Emitter (Machine Board)"
build_path = /obj/machinery/power/emitter
origin_tech = "programming=3;powerstorage=4;engineering=4"
req_components = list(
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stock_parts/manipulator = 1)
/obj/item/weapon/circuitboard/machine/smes
/obj/item/circuitboard/machine/smes
name = "SMES (Machine Board)"
build_path = /obj/machinery/power/smes
origin_tech = "programming=3;powerstorage=3;engineering=3"
req_components = list(
/obj/item/stack/cable_coil = 5,
/obj/item/weapon/stock_parts/cell = 5,
/obj/item/weapon/stock_parts/capacitor = 1)
def_components = list(/obj/item/weapon/stock_parts/cell = /obj/item/weapon/stock_parts/cell/high/empty)
/obj/item/stock_parts/cell = 5,
/obj/item/stock_parts/capacitor = 1)
def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high/empty)
/obj/item/weapon/circuitboard/machine/tesla_coil
/obj/item/circuitboard/machine/tesla_coil
name = "Tesla Coil (Machine Board)"
build_path = /obj/machinery/power/tesla_coil
origin_tech = "programming=3;magnets=3;powerstorage=3"
req_components = list(/obj/item/weapon/stock_parts/capacitor = 1)
req_components = list(/obj/item/stock_parts/capacitor = 1)
/obj/item/weapon/circuitboard/machine/grounding_rod
/obj/item/circuitboard/machine/grounding_rod
name = "Grounding Rod (Machine Board)"
build_path = /obj/machinery/power/grounding_rod
origin_tech = "programming=3;powerstorage=3;magnets=3;plasmatech=2"
req_components = list(/obj/item/weapon/stock_parts/capacitor = 1)
req_components = list(/obj/item/stock_parts/capacitor = 1)
/obj/item/weapon/circuitboard/machine/power_compressor
/obj/item/circuitboard/machine/power_compressor
name = "Power Compressor (Machine Board)"
build_path = /obj/machinery/power/compressor
origin_tech = "programming=4;powerstorage=4;engineering=4"
req_components = list(
/obj/item/stack/cable_coil = 5,
/obj/item/weapon/stock_parts/manipulator = 6)
/obj/item/stock_parts/manipulator = 6)
/obj/item/weapon/circuitboard/machine/power_turbine
/obj/item/circuitboard/machine/power_turbine
name = "Power Turbine (Machine Board)"
build_path = /obj/machinery/power/turbine
origin_tech = "programming=4;powerstorage=4;engineering=4"
req_components = list(
/obj/item/stack/cable_coil = 5,
/obj/item/weapon/stock_parts/capacitor = 6)
/obj/item/stock_parts/capacitor = 6)
/obj/item/weapon/circuitboard/machine/chem_dispenser
/obj/item/circuitboard/machine/chem_dispenser
name = "Portable Chem Dispenser (Machine Board)"
build_path = /obj/machinery/chem_dispenser/constructable
origin_tech = "materials=4;programming=4;plasmatech=4;biotech=3"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 2,
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/weapon/stock_parts/cell = 1)
def_components = list(/obj/item/weapon/stock_parts/cell = /obj/item/weapon/stock_parts/cell/high)
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/capacitor = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stock_parts/console_screen = 1,
/obj/item/stock_parts/cell = 1)
def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high)
/obj/item/weapon/circuitboard/machine/chem_heater
/obj/item/circuitboard/machine/chem_heater
name = "Chemical Heater (Machine Board)"
build_path = /obj/machinery/chem_heater
origin_tech = "programming=2;engineering=2;biotech=2"
req_components = list(
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/chem_master
/obj/item/circuitboard/machine/chem_master
name = "ChemMaster 3000 (Machine Board)"
build_path = /obj/machinery/chem_master
origin_tech = "materials=3;programming=2;biotech=3"
req_components = list(
/obj/item/weapon/reagent_containers/glass/beaker = 2,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/reagent_containers/glass/beaker = 2,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/chem_master/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/obj/item/circuitboard/machine/chem_master/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/screwdriver))
var/new_name = "ChemMaster"
var/new_path = /obj/machinery/chem_master
@@ -630,94 +630,94 @@
else
return ..()
/obj/item/weapon/circuitboard/machine/chem_master/condi
/obj/item/circuitboard/machine/chem_master/condi
name = "CondiMaster 3000 (Machine Board)"
build_path = /obj/machinery/chem_master/condimaster
/obj/item/weapon/circuitboard/machine/circuit_imprinter
/obj/item/circuitboard/machine/circuit_imprinter
name = "Circuit Imprinter (Machine Board)"
build_path = /obj/machinery/r_n_d/circuit_imprinter
origin_tech = "engineering=2;programming=2"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/reagent_containers/glass/beaker = 2)
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/reagent_containers/glass/beaker = 2)
/obj/item/weapon/circuitboard/machine/destructive_analyzer
/obj/item/circuitboard/machine/destructive_analyzer
name = "Destructive Analyzer (Machine Board)"
build_path = /obj/machinery/r_n_d/destructive_analyzer
origin_tech = "magnets=2;engineering=2;programming=2"
req_components = list(
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/micro_laser = 1)
/obj/item/stock_parts/scanning_module = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stock_parts/micro_laser = 1)
/obj/item/weapon/circuitboard/machine/experimentor
/obj/item/circuitboard/machine/experimentor
name = "E.X.P.E.R.I-MENTOR (Machine Board)"
build_path = /obj/machinery/r_n_d/experimentor
origin_tech = "magnets=1;engineering=1;programming=1;biotech=1;bluespace=2"
req_components = list(
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/weapon/stock_parts/micro_laser = 2)
/obj/item/stock_parts/scanning_module = 1,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stock_parts/micro_laser = 2)
/obj/item/weapon/circuitboard/machine/protolathe
/obj/item/circuitboard/machine/protolathe
name = "Protolathe (Machine Board)"
build_path = /obj/machinery/r_n_d/protolathe
origin_tech = "engineering=2;programming=2"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 2,
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/weapon/reagent_containers/glass/beaker = 2)
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/reagent_containers/glass/beaker = 2)
/obj/item/weapon/circuitboard/machine/rdserver
/obj/item/circuitboard/machine/rdserver
name = "R&D Server (Machine Board)"
build_path = /obj/machinery/r_n_d/server
origin_tech = "programming=3"
req_components = list(
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/scanning_module = 1)
/obj/item/stock_parts/scanning_module = 1)
/obj/item/weapon/circuitboard/machine/bsa/back
/obj/item/circuitboard/machine/bsa/back
name = "Bluespace Artillery Generator (Machine Board)"
build_path = /obj/machinery/bsa/back
origin_tech = "engineering=2;combat=2;bluespace=2" //No freebies!
req_components = list(
/obj/item/weapon/stock_parts/capacitor/quadratic = 5,
/obj/item/stock_parts/capacitor/quadratic = 5,
/obj/item/stack/cable_coil = 2)
/obj/item/weapon/circuitboard/machine/bsa/middle
/obj/item/circuitboard/machine/bsa/middle
name = "Bluespace Artillery Fusor (Machine Board)"
build_path = /obj/machinery/bsa/middle
origin_tech = "engineering=2;combat=2;bluespace=2"
req_components = list(
/obj/item/weapon/ore/bluespace_crystal = 20,
/obj/item/ore/bluespace_crystal = 20,
/obj/item/stack/cable_coil = 2)
/obj/item/weapon/circuitboard/machine/bsa/front
/obj/item/circuitboard/machine/bsa/front
name = "Bluespace Artillery Bore (Machine Board)"
build_path = /obj/machinery/bsa/front
origin_tech = "engineering=2;combat=2;bluespace=2"
req_components = list(
/obj/item/weapon/stock_parts/manipulator/femto = 5,
/obj/item/stock_parts/manipulator/femto = 5,
/obj/item/stack/cable_coil = 2)
/obj/item/weapon/circuitboard/machine/dna_vault
/obj/item/circuitboard/machine/dna_vault
name = "DNA Vault (Machine Board)"
build_path = /obj/machinery/dna_vault
origin_tech = "engineering=2;combat=2;bluespace=2" //No freebies!
req_components = list(
/obj/item/weapon/stock_parts/capacitor/super = 5,
/obj/item/weapon/stock_parts/manipulator/pico = 5,
/obj/item/stock_parts/capacitor/super = 5,
/obj/item/stock_parts/manipulator/pico = 5,
/obj/item/stack/cable_coil = 2)
/obj/item/weapon/circuitboard/machine/microwave
/obj/item/circuitboard/machine/microwave
name = "Microwave (Machine Board)"
build_path = /obj/machinery/microwave
origin_tech = "programming=2;magnets=2"
req_components = list(
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/stock_parts/console_screen = 1,
/obj/item/stack/sheet/glass = 1)
+6 -6
View File
@@ -1,14 +1,14 @@
/obj/item/weapon/pie_cannon
/obj/item/pie_cannon
name = "pie cannon"
desc = "Load cream pie for optimal results"
force = 10
icon_state = "piecannon"
item_state = "powerfist"
var/obj/item/weapon/reagent_containers/food/snacks/pie/loaded = null
var/obj/item/reagent_containers/food/snacks/pie/loaded = null
/obj/item/weapon/pie_cannon/attackby(obj/item/I, mob/living/L)
if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/pie))
/obj/item/pie_cannon/attackby(obj/item/I, mob/living/L)
if(istype(I, /obj/item/reagent_containers/food/snacks/pie))
if(!loaded)
L.transferItemToLoc(I, src)
loaded = I
@@ -16,7 +16,7 @@
return
return ..()
/obj/item/weapon/pie_cannon/afterattack(atom/target, mob/living/user, flag, params)
/obj/item/pie_cannon/afterattack(atom/target, mob/living/user, flag, params)
if(!loaded)
return ..()
var/obj/item/projectile/pie/launched = new /obj/item/projectile/pie(src)
@@ -32,7 +32,7 @@
/obj/item/projectile/pie
name = "pie"
desc = "Think fast!"
var/obj/item/weapon/reagent_containers/food/snacks/pie/P = null
var/obj/item/reagent_containers/food/snacks/pie/P = null
/obj/item/projectile/pie/on_hit(atom/A)
. = ..()
+19 -19
View File
@@ -9,7 +9,7 @@
* Soap
*/
/obj/item/weapon/soap
/obj/item/soap
name = "soap"
desc = "A cheap bar of soap. Doesn't smell."
gender = PLURAL
@@ -23,37 +23,37 @@
var/cleanspeed = 50 //slower than mop
force_string = "robust... against germs"
/obj/item/weapon/soap/nanotrasen
/obj/item/soap/nanotrasen
desc = "A Nanotrasen brand bar of soap. Smells of plasma."
icon_state = "soapnt"
/obj/item/weapon/soap/homemade
/obj/item/soap/homemade
desc = "A homemade bar of soap. Smells of... well...."
icon_state = "soapgibs"
cleanspeed = 45 // a little faster to reward chemists for going to the effort
/obj/item/weapon/soap/deluxe
/obj/item/soap/deluxe
desc = "A deluxe Waffle Co. brand bar of soap. Smells of high-class luxury."
icon_state = "soapdeluxe"
cleanspeed = 40 //same speed as mop because deluxe -- captain gets one of these
/obj/item/weapon/soap/syndie
/obj/item/soap/syndie
desc = "An untrustworthy bar of soap made of strong chemical agents that dissolve blood faster."
icon_state = "soapsyndie"
cleanspeed = 10 //much faster than mop so it is useful for traitors who want to clean crime scenes
/obj/item/weapon/soap/suicide_act(mob/user)
/obj/item/soap/suicide_act(mob/user)
user.say(";FFFFFFFFFFFFFFFFUUUUUUUDGE!!")
user.visible_message("<span class='suicide'>[user] lifts [src] to their mouth and gnaws on it furiously, producing a thick froth! [user.p_they(TRUE)]'ll never get that BB gun now!")
new /obj/effect/particle_effect/foam(loc)
return (TOXLOSS)
/obj/item/weapon/soap/Crossed(AM as mob|obj)
/obj/item/soap/Crossed(AM as mob|obj)
if (istype(AM, /mob/living/carbon))
var/mob/living/carbon/M = AM
M.slip(80, src)
/obj/item/weapon/soap/afterattack(atom/target, mob/user, proximity)
/obj/item/soap/afterattack(atom/target, mob/user, proximity)
if(!proximity || !check_allowed_items(target))
return
//I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing.
@@ -94,7 +94,7 @@
*/
/obj/item/weapon/bikehorn
/obj/item/bikehorn
name = "bike horn"
desc = "A horn off of a bicycle."
icon = 'icons/obj/items.dmi'
@@ -112,28 +112,28 @@
var/honksound = 'sound/items/bikehorn.ogg'
var/cooldowntime = 20
/obj/item/weapon/bikehorn/suicide_act(mob/user)
/obj/item/bikehorn/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] solemnly points the horn at [user.p_their()] temple! It looks like [user.p_theyre()] trying to commit suicide!</span>")
playsound(src.loc, honksound, 50, 1)
return (BRUTELOSS)
/obj/item/weapon/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user)
/obj/item/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user)
if(!(next_usable > world.time))
playsound(loc, honksound, 50, 1, -1) //plays instead of tap.ogg!
return ..()
/obj/item/weapon/bikehorn/attack_self(mob/user)
/obj/item/bikehorn/attack_self(mob/user)
if(!(next_usable > world.time))
next_usable = world.time + cooldowntime
playsound(src.loc, honksound, 50, 1)
src.add_fingerprint(user)
/obj/item/weapon/bikehorn/Crossed(mob/living/L)
/obj/item/bikehorn/Crossed(mob/living/L)
if(isliving(L))
playsound(loc, honksound, 50, 1, -1)
..()
/obj/item/weapon/bikehorn/airhorn
/obj/item/bikehorn/airhorn
name = "air horn"
desc = "Damn son, where'd you find this?"
icon_state = "air_horn"
@@ -141,21 +141,21 @@
cooldowntime = 50
origin_tech = "materials=4;engineering=4"
/obj/item/weapon/bikehorn/golden
/obj/item/bikehorn/golden
name = "golden bike horn"
desc = "Golden? Clearly, it's made with bananium! Honk!"
icon_state = "gold_horn"
item_state = "gold_horn"
/obj/item/weapon/bikehorn/golden/attack()
/obj/item/bikehorn/golden/attack()
flip_mobs()
return ..()
/obj/item/weapon/bikehorn/golden/attack_self(mob/user)
/obj/item/bikehorn/golden/attack_self(mob/user)
flip_mobs()
..()
/obj/item/weapon/bikehorn/golden/proc/flip_mobs(mob/living/carbon/M, mob/user)
/obj/item/bikehorn/golden/proc/flip_mobs(mob/living/carbon/M, mob/user)
if(!(next_usable > world.time))
var/turf/T = get_turf(src)
for(M in ohearers(7, T))
@@ -165,7 +165,7 @@
continue
M.emote("flip")
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/canned_laughter
/obj/item/reagent_containers/food/drinks/soda_cans/canned_laughter
name = "Canned Laughter"
desc = "Just looking at this makes you want to giggle."
icon_state = "laughter"
+12 -12
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/lipstick
/obj/item/lipstick
gender = PLURAL
name = "red lipstick"
desc = "A generic brand of lipstick."
@@ -9,31 +9,31 @@
var/open = FALSE
/obj/item/weapon/lipstick/purple
/obj/item/lipstick/purple
name = "purple lipstick"
colour = "purple"
/obj/item/weapon/lipstick/jade
/obj/item/lipstick/jade
//It's still called Jade, but theres no HTML color for jade, so we use lime.
name = "jade lipstick"
colour = "lime"
/obj/item/weapon/lipstick/black
/obj/item/lipstick/black
name = "black lipstick"
colour = "black"
/obj/item/weapon/lipstick/random
/obj/item/lipstick/random
name = "lipstick"
/obj/item/weapon/lipstick/random/New()
/obj/item/lipstick/random/New()
..()
colour = pick("red","purple","lime","black","green","blue","white")
name = "[colour] lipstick"
/obj/item/weapon/lipstick/attack_self(mob/user)
/obj/item/lipstick/attack_self(mob/user)
cut_overlays()
to_chat(user, "<span class='notice'>You twist \the [src] [open ? "closed" : "open"].</span>")
open = !open
@@ -45,7 +45,7 @@
else
icon_state = "lipstick"
/obj/item/weapon/lipstick/attack(mob/M, mob/user)
/obj/item/lipstick/attack(mob/M, mob/user)
if(!open)
return
@@ -79,7 +79,7 @@
to_chat(user, "<span class='warning'>Where are the lips on that?</span>")
//you can wipe off lipstick with paper!
/obj/item/weapon/paper/attack(mob/M, mob/user)
/obj/item/paper/attack(mob/M, mob/user)
if(user.zone_selected == "mouth")
if(!ismob(M))
return
@@ -102,7 +102,7 @@
..()
/obj/item/weapon/razor
/obj/item/razor
name = "electric razor"
desc = "The latest and greatest power razor born from the science of shaving."
icon = 'icons/obj/items.dmi'
@@ -111,7 +111,7 @@
w_class = WEIGHT_CLASS_TINY
/obj/item/weapon/razor/proc/shave(mob/living/carbon/human/H, location = "mouth")
/obj/item/razor/proc/shave(mob/living/carbon/human/H, location = "mouth")
if(location == "mouth")
H.facial_hair_style = "Shaved"
else
@@ -121,7 +121,7 @@
playsound(loc, 'sound/items/welder2.ogg', 20, 1)
/obj/item/weapon/razor/attack(mob/M, mob/user)
/obj/item/razor/attack(mob/M, mob/user)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/location = user.zone_selected
+5 -5
View File
@@ -2,7 +2,7 @@
// Gavel Hammer
// Gavel Block
/obj/item/weapon/gavelhammer
/obj/item/gavelhammer
name = "gavel hammer"
desc = "Order, order! No bombs in my courthouse."
icon = 'icons/obj/items.dmi'
@@ -13,12 +13,12 @@
attack_verb = list("bashed", "battered", "judged", "whacked")
resistance_flags = FLAMMABLE
/obj/item/weapon/gavelhammer/suicide_act(mob/user)
/obj/item/gavelhammer/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] has sentenced [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1)
return (BRUTELOSS)
/obj/item/weapon/gavelblock
/obj/item/gavelblock
name = "gavel block"
desc = "Smack it with a gavel hammer when the assistants get rowdy."
icon = 'icons/obj/items.dmi'
@@ -28,8 +28,8 @@
w_class = WEIGHT_CLASS_TINY
resistance_flags = FLAMMABLE
/obj/item/weapon/gavelblock/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/gavelhammer))
/obj/item/gavelblock/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/gavelhammer))
playsound(loc, 'sound/items/gavel.ogg', 100, 1)
user.visible_message("<span class='warning'>[user] strikes [src] with [I].</span>")
user.changeNext_move(CLICK_CD_MELEE)
+54 -54
View File
@@ -1,7 +1,7 @@
//backpack item
#define HALFWAYCRITDEATH ((HEALTH_THRESHOLD_CRIT + HEALTH_THRESHOLD_DEAD) * 0.5)
/obj/item/weapon/defibrillator
/obj/item/defibrillator
name = "defibrillator"
desc = "A device that delivers powerful shocks to detachable paddles that resuscitate incapacitated patients."
icon = 'icons/obj/weapons.dmi'
@@ -20,33 +20,33 @@
var/on = FALSE //if the paddles are equipped (1) or on the defib (0)
var/safety = 1 //if you can zap people with the defibs on harm mode
var/powered = 0 //if there's a cell in the defib with enough power for a revive, blocks paddles from reviving otherwise
var/obj/item/weapon/twohanded/shockpaddles/paddles
var/obj/item/weapon/stock_parts/cell/high/cell
var/obj/item/twohanded/shockpaddles/paddles
var/obj/item/stock_parts/cell/high/cell
var/combat = 0 //can we revive through space suits?
var/grab_ghost = FALSE // Do we pull the ghost back into their body?
/obj/item/weapon/defibrillator/get_cell()
/obj/item/defibrillator/get_cell()
return cell
/obj/item/weapon/defibrillator/Initialize() //starts without a cell for rnd
/obj/item/defibrillator/Initialize() //starts without a cell for rnd
. = ..()
paddles = make_paddles()
update_icon()
return
/obj/item/weapon/defibrillator/loaded/Initialize() //starts with hicap
/obj/item/defibrillator/loaded/Initialize() //starts with hicap
. = ..()
paddles = make_paddles()
cell = new(src)
update_icon()
return
/obj/item/weapon/defibrillator/update_icon()
/obj/item/defibrillator/update_icon()
update_power()
update_overlays()
update_charge()
/obj/item/weapon/defibrillator/proc/update_power()
/obj/item/defibrillator/proc/update_power()
if(cell)
if(cell.charge < paddles.revivecost)
powered = 0
@@ -55,7 +55,7 @@
else
powered = 0
/obj/item/weapon/defibrillator/proc/update_overlays()
/obj/item/defibrillator/proc/update_overlays()
cut_overlays()
if(!on)
add_overlay("[initial(icon_state)]-paddles")
@@ -66,22 +66,22 @@
if(!safety)
add_overlay("[initial(icon_state)]-emagged")
/obj/item/weapon/defibrillator/proc/update_charge()
/obj/item/defibrillator/proc/update_charge()
if(powered) //so it doesn't show charge if it's unpowered
if(cell)
var/ratio = cell.charge / cell.maxcharge
ratio = Ceiling(ratio*4) * 25
add_overlay("[initial(icon_state)]-charge[ratio]")
/obj/item/weapon/defibrillator/CheckParts(list/parts_list)
/obj/item/defibrillator/CheckParts(list/parts_list)
..()
cell = locate(/obj/item/weapon/stock_parts/cell) in contents
cell = locate(/obj/item/stock_parts/cell) in contents
update_icon()
/obj/item/weapon/defibrillator/ui_action_click()
/obj/item/defibrillator/ui_action_click()
toggle_paddles()
/obj/item/weapon/defibrillator/attack_hand(mob/user)
/obj/item/defibrillator/attack_hand(mob/user)
if(loc == user)
if(slot_flags == SLOT_BACK)
if(user.get_item_by_slot(slot_back) == src)
@@ -97,19 +97,19 @@
return
..()
/obj/item/weapon/defibrillator/MouseDrop(obj/over_object)
/obj/item/defibrillator/MouseDrop(obj/over_object)
if(ismob(src.loc))
var/mob/M = src.loc
if(!M.incapacitated() && istype(over_object, /obj/screen/inventory/hand))
var/obj/screen/inventory/hand/H = over_object
M.putItemFromInventoryInHandIfPossible(src, H.held_index)
/obj/item/weapon/defibrillator/attackby(obj/item/weapon/W, mob/user, params)
/obj/item/defibrillator/attackby(obj/item/W, mob/user, params)
if(W == paddles)
paddles.unwield()
toggle_paddles()
else if(istype(W, /obj/item/weapon/stock_parts/cell))
var/obj/item/weapon/stock_parts/cell/C = W
else if(istype(W, /obj/item/stock_parts/cell))
var/obj/item/stock_parts/cell/C = W
if(cell)
to_chat(user, "<span class='notice'>[src] already has a cell.</span>")
else
@@ -122,7 +122,7 @@
to_chat(user, "<span class='notice'>You install a cell in [src].</span>")
update_icon()
else if(istype(W, /obj/item/weapon/screwdriver))
else if(istype(W, /obj/item/screwdriver))
if(cell)
cell.update_icon()
cell.forceMove(get_turf(src))
@@ -132,7 +132,7 @@
else
return ..()
/obj/item/weapon/defibrillator/emag_act(mob/user)
/obj/item/defibrillator/emag_act(mob/user)
if(safety)
safety = 0
to_chat(user, "<span class='warning'>You silently disable [src]'s safety protocols with the cryptographic sequencer.")
@@ -140,7 +140,7 @@
safety = 1
to_chat(user, "<span class='notice'>You silently enable [src]'s safety protocols with the cryptographic sequencer.")
/obj/item/weapon/defibrillator/emp_act(severity)
/obj/item/defibrillator/emp_act(severity)
if(cell)
deductcharge(1000 / severity)
if(safety)
@@ -154,7 +154,7 @@
update_icon()
..()
/obj/item/weapon/defibrillator/proc/toggle_paddles()
/obj/item/defibrillator/proc/toggle_paddles()
set name = "Toggle Paddles"
set category = "Object"
on = !on
@@ -178,33 +178,33 @@
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/weapon/defibrillator/proc/make_paddles()
return new /obj/item/weapon/twohanded/shockpaddles(src)
/obj/item/defibrillator/proc/make_paddles()
return new /obj/item/twohanded/shockpaddles(src)
/obj/item/weapon/defibrillator/equipped(mob/user, slot)
/obj/item/defibrillator/equipped(mob/user, slot)
..()
if((slot_flags == SLOT_BACK && slot != slot_back) || (slot_flags == SLOT_BELT && slot != slot_belt))
remove_paddles(user)
update_icon()
/obj/item/weapon/defibrillator/item_action_slot_check(slot, mob/user)
/obj/item/defibrillator/item_action_slot_check(slot, mob/user)
if(slot == user.getBackSlot())
return 1
/obj/item/weapon/defibrillator/proc/remove_paddles(mob/user) //this fox the bug with the paddles when other player stole you the defib when you have the paddles equiped
/obj/item/defibrillator/proc/remove_paddles(mob/user) //this fox the bug with the paddles when other player stole you the defib when you have the paddles equiped
if(ismob(paddles.loc))
var/mob/M = paddles.loc
M.dropItemToGround(paddles, TRUE)
return
/obj/item/weapon/defibrillator/Destroy()
/obj/item/defibrillator/Destroy()
if(on)
var/M = get(paddles, /mob)
remove_paddles(M)
. = ..()
update_icon()
/obj/item/weapon/defibrillator/proc/deductcharge(chrgdeductamt)
/obj/item/defibrillator/proc/deductcharge(chrgdeductamt)
if(cell)
if(cell.charge < (paddles.revivecost+chrgdeductamt))
powered = 0
@@ -216,7 +216,7 @@
update_icon()
return 0
/obj/item/weapon/defibrillator/proc/cooldowncheck(mob/user)
/obj/item/defibrillator/proc/cooldowncheck(mob/user)
spawn(50)
if(cell)
if(cell.charge >= paddles.revivecost)
@@ -229,7 +229,7 @@
paddles.update_icon()
update_icon()
/obj/item/weapon/defibrillator/compact
/obj/item/defibrillator/compact
name = "compact defibrillator"
desc = "A belt-equipped defibrillator that can be rapidly deployed."
icon_state = "defibcompact"
@@ -238,29 +238,29 @@
slot_flags = SLOT_BELT
origin_tech = "biotech=5"
/obj/item/weapon/defibrillator/compact/item_action_slot_check(slot, mob/user)
/obj/item/defibrillator/compact/item_action_slot_check(slot, mob/user)
if(slot == user.getBeltSlot())
return 1
/obj/item/weapon/defibrillator/compact/loaded/Initialize()
/obj/item/defibrillator/compact/loaded/Initialize()
. = ..()
paddles = make_paddles()
cell = new(src)
update_icon()
/obj/item/weapon/defibrillator/compact/combat
/obj/item/defibrillator/compact/combat
name = "combat defibrillator"
desc = "A belt-equipped blood-red defibrillator that can be rapidly deployed. Does not have the restrictions or safeties of conventional defibrillators and can revive through space suits."
combat = 1
safety = 0
/obj/item/weapon/defibrillator/compact/combat/loaded/Initialize()
/obj/item/defibrillator/compact/combat/loaded/Initialize()
. = ..()
paddles = make_paddles()
cell = new /obj/item/weapon/stock_parts/cell/infinite(src)
cell = new /obj/item/stock_parts/cell/infinite(src)
update_icon()
/obj/item/weapon/defibrillator/compact/combat/loaded/attackby(obj/item/weapon/W, mob/user, params)
/obj/item/defibrillator/compact/combat/loaded/attackby(obj/item/W, mob/user, params)
if(W == paddles)
paddles.unwield()
toggle_paddles()
@@ -269,7 +269,7 @@
//paddles
/obj/item/weapon/twohanded/shockpaddles
/obj/item/twohanded/shockpaddles
name = "defibrillator paddles"
desc = "A pair of plastic-gripped paddles with flat metal surfaces that are used to deliver powerful electric shocks."
icon = 'icons/obj/weapons.dmi'
@@ -282,12 +282,12 @@
var/revivecost = 1000
var/cooldown = 0
var/busy = FALSE
var/obj/item/weapon/defibrillator/defib
var/obj/item/defibrillator/defib
var/req_defib = 1
var/combat = 0 //If it penetrates armor and gives additional functionality
var/grab_ghost = FALSE
/obj/item/weapon/twohanded/shockpaddles/proc/recharge(var/time)
/obj/item/twohanded/shockpaddles/proc/recharge(var/time)
if(req_defib || !time)
return
cooldown = 1
@@ -299,7 +299,7 @@
cooldown = 0
update_icon()
/obj/item/weapon/twohanded/shockpaddles/New(mainunit)
/obj/item/twohanded/shockpaddles/New(mainunit)
..()
if(check_defib_exists(mainunit, src) && req_defib)
defib = mainunit
@@ -307,24 +307,24 @@
busy = FALSE
update_icon()
/obj/item/weapon/twohanded/shockpaddles/update_icon()
/obj/item/twohanded/shockpaddles/update_icon()
icon_state = "defibpaddles[wielded]"
item_state = "defibpaddles[wielded]"
if(cooldown)
icon_state = "defibpaddles[wielded]_cooldown"
/obj/item/weapon/twohanded/shockpaddles/suicide_act(mob/user)
/obj/item/twohanded/shockpaddles/suicide_act(mob/user)
user.visible_message("<span class='danger'>[user] is putting the live paddles on [user.p_their()] chest! It looks like [user.p_theyre()] trying to commit suicide!</span>")
if(req_defib)
defib.deductcharge(revivecost)
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
return (OXYLOSS)
/obj/item/weapon/twohanded/shockpaddles/dropped(mob/user)
/obj/item/twohanded/shockpaddles/dropped(mob/user)
if(!req_defib)
return ..()
if(user)
var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_held_item()
var/obj/item/twohanded/offhand/O = user.get_inactive_held_item()
if(istype(O))
O.unwield()
to_chat(user, "<span class='notice'>The paddles snap back into the main unit.</span>")
@@ -333,16 +333,16 @@
defib.update_icon()
return unwield(user)
/obj/item/weapon/twohanded/shockpaddles/proc/check_defib_exists(mainunit, mob/living/carbon/human/M, obj/O)
/obj/item/twohanded/shockpaddles/proc/check_defib_exists(mainunit, mob/living/carbon/human/M, obj/O)
if(!req_defib)
return 1 //If it doesn't need a defib, just say it exists
if (!mainunit || !istype(mainunit, /obj/item/weapon/defibrillator)) //To avoid weird issues from admin spawns
if (!mainunit || !istype(mainunit, /obj/item/defibrillator)) //To avoid weird issues from admin spawns
qdel(O)
return 0
else
return 1
/obj/item/weapon/twohanded/shockpaddles/attack(mob/M, mob/user)
/obj/item/twohanded/shockpaddles/attack(mob/M, mob/user)
if(busy)
return
@@ -393,7 +393,7 @@
do_help(H, user)
/obj/item/weapon/twohanded/shockpaddles/proc/do_disarm(mob/living/M, mob/living/user)
/obj/item/twohanded/shockpaddles/proc/do_disarm(mob/living/M, mob/living/user)
if(req_defib && defib.safety)
return
if(!req_defib && !combat)
@@ -417,7 +417,7 @@
else
recharge(60)
/obj/item/weapon/twohanded/shockpaddles/proc/do_harm(mob/living/carbon/human/H, mob/living/user)
/obj/item/twohanded/shockpaddles/proc/do_harm(mob/living/carbon/human/H, mob/living/user)
if(req_defib && defib.safety)
return
if(!req_defib && !combat)
@@ -471,7 +471,7 @@
busy = FALSE
update_icon()
/obj/item/weapon/twohanded/shockpaddles/proc/do_help(mob/living/carbon/human/H, mob/living/user)
/obj/item/twohanded/shockpaddles/proc/do_help(mob/living/carbon/human/H, mob/living/user)
user.visible_message("<span class='warning'>[user] begins to place [src] on [H]'s chest.</span>", "<span class='warning'>You begin to place [src] on [H]'s chest...</span>")
busy = TRUE
update_icon()
@@ -568,7 +568,7 @@
busy = FALSE
update_icon()
/obj/item/weapon/twohanded/shockpaddles/cyborg
/obj/item/twohanded/shockpaddles/cyborg
name = "cyborg defibrillator paddles"
icon = 'icons/obj/weapons.dmi'
icon_state = "defibpaddles0"
@@ -577,7 +577,7 @@
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
req_defib = FALSE
/obj/item/weapon/twohanded/shockpaddles/cyborg/attack(mob/M, mob/user)
/obj/item/twohanded/shockpaddles/cyborg/attack(mob/M, mob/user)
if(iscyborg(user))
var/mob/living/silicon/robot/R = user
if(R.emagged)
@@ -589,7 +589,7 @@
. = ..()
/obj/item/weapon/twohanded/shockpaddles/syndicate
/obj/item/twohanded/shockpaddles/syndicate
name = "syndicate defibrillator paddles"
desc = "A pair of paddles used to revive deceased operatives. It possesses both the ability to penetrate armor and to deliver powerful shocks offensively."
combat = TRUE
+42 -42
View File
@@ -1,36 +1,36 @@
/obj/item/weapon/storage/pill_bottle/dice
/obj/item/storage/pill_bottle/dice
name = "bag of dice"
desc = "Contains all the luck you'll ever need."
icon = 'icons/obj/dice.dmi'
icon_state = "dicebag"
/obj/item/weapon/storage/pill_bottle/dice/New()
/obj/item/storage/pill_bottle/dice/New()
..()
var/special_die = pick("1","2","fudge","space","00","8bd20","4dd6","100")
if(special_die == "1")
new /obj/item/weapon/dice/d1(src)
new /obj/item/dice/d1(src)
if(special_die == "2")
new /obj/item/weapon/dice/d2(src)
new /obj/item/weapon/dice/d4(src)
new /obj/item/weapon/dice/d6(src)
new /obj/item/dice/d2(src)
new /obj/item/dice/d4(src)
new /obj/item/dice/d6(src)
if(special_die == "fudge")
new /obj/item/weapon/dice/fudge(src)
new /obj/item/dice/fudge(src)
if(special_die == "space")
new /obj/item/weapon/dice/d6/space(src)
new /obj/item/weapon/dice/d8(src)
new /obj/item/weapon/dice/d10(src)
new /obj/item/dice/d6/space(src)
new /obj/item/dice/d8(src)
new /obj/item/dice/d10(src)
if(special_die == "00")
new /obj/item/weapon/dice/d00(src)
new /obj/item/weapon/dice/d12(src)
new /obj/item/weapon/dice/d20(src)
new /obj/item/dice/d00(src)
new /obj/item/dice/d12(src)
new /obj/item/dice/d20(src)
if(special_die == "8bd20")
new /obj/item/weapon/dice/eightbd20(src)
new /obj/item/dice/eightbd20(src)
if(special_die == "4dd6")
new /obj/item/weapon/dice/fourdd6(src)
new /obj/item/dice/fourdd6(src)
if(special_die == "100")
new /obj/item/weapon/dice/d100(src)
new /obj/item/dice/d100(src)
/obj/item/weapon/dice //depreciated d6, use /obj/item/weapon/dice/d6 if you actually want a d6
/obj/item/dice //depreciated d6, use /obj/item/dice/d6 if you actually want a d6
name = "die"
desc = "A die with six sides. Basic and servicable."
icon = 'icons/obj/dice.dmi'
@@ -42,117 +42,117 @@
var/can_be_rigged = TRUE
var/rigged = FALSE
/obj/item/weapon/dice/New()
/obj/item/dice/New()
result = rand(1, sides)
update_icon()
..()
/obj/item/weapon/dice/d1
/obj/item/dice/d1
name = "d1"
desc = "A die with one side. Deterministic!"
icon_state = "d1"
sides = 1
/obj/item/weapon/dice/d2
/obj/item/dice/d2
name = "d2"
desc = "A die with two sides. Coins are undignified!"
icon_state = "d2"
sides = 2
/obj/item/weapon/dice/d4
/obj/item/dice/d4
name = "d4"
desc = "A die with four sides. The nerd's caltrop."
icon_state = "d4"
sides = 4
/obj/item/weapon/dice/d6
/obj/item/dice/d6
name = "d6"
/obj/item/weapon/dice/d6/space
/obj/item/dice/d6/space
name = "space cube"
desc = "A die with six sides. 6 TIMES 255 TIMES 255 TILE TOTAL EXISTENCE, SQUARE YOUR MIND OF EDUCATED STUPID: 2 DOES NOT EXIST."
icon_state = "spaced6"
/obj/item/weapon/dice/d6/space/New()
/obj/item/dice/d6/space/New()
..()
if(prob(10))
name = "spess cube"
/obj/item/weapon/dice/fudge
/obj/item/dice/fudge
name = "fudge die"
desc = "A die with six sides but only three results. Is this a plus or a minus? Your mind is drawing a blank..."
sides = 3 //shhh
icon_state = "fudge"
special_faces = list("minus","blank","plus")
/obj/item/weapon/dice/d8
/obj/item/dice/d8
name = "d8"
desc = "A die with eight sides. It feels... lucky."
icon_state = "d8"
sides = 8
/obj/item/weapon/dice/d10
/obj/item/dice/d10
name = "d10"
desc = "A die with ten sides. Useful for percentages."
icon_state = "d10"
sides = 10
/obj/item/weapon/dice/d00
/obj/item/dice/d00
name = "d00"
desc = "A die with ten sides. Works better for d100 rolls than a golfball."
icon_state = "d00"
sides = 10
/obj/item/weapon/dice/d12
/obj/item/dice/d12
name = "d12"
desc = "A die with twelve sides. There's an air of neglect about it."
icon_state = "d12"
sides = 12
/obj/item/weapon/dice/d20
/obj/item/dice/d20
name = "d20"
desc = "A die with twenty sides. The prefered die to throw at the GM."
icon_state = "d20"
sides = 20
/obj/item/weapon/dice/d100
/obj/item/dice/d100
name = "d100"
desc = "A die with one hundred sides! Probably not fairly weighted..."
icon_state = "d100"
sides = 100
/obj/item/weapon/dice/d100/update_icon()
/obj/item/dice/d100/update_icon()
return
/obj/item/weapon/dice/eightbd20
/obj/item/dice/eightbd20
name = "strange d20"
desc = "A weird die with raised text printed on the faces. Everything's white on white so reading it is a struggle. What poor design!"
icon_state = "8bd20"
sides = 20
special_faces = list("It is certain","It is decidedly so","Without a doubt","Yes, definitely","You may rely on it","As I see it, yes","Most likely","Outlook good","Yes","Signs point to yes","Reply hazy try again","Ask again later","Better not tell you now","Cannot predict now","Concentrate and ask again","Don't count on it","My reply is no","My sources say no","Outlook not so good","Very doubtful")
/obj/item/weapon/dice/eightbd20/update_icon()
/obj/item/dice/eightbd20/update_icon()
return
/obj/item/weapon/dice/fourdd6
/obj/item/dice/fourdd6
name = "4d d6"
desc = "A die that exists in four dimensional space. Properly interpreting them can only be properly done with the help of a mathematician, a physicist, and a priest."
icon_state = "4dd6"
sides = 48
special_faces = list("Cube-Side: 1-1","Cube-Side: 1-2","Cube-Side: 1-3","Cube-Side: 1-4","Cube-Side: 1-5","Cube-Side: 1-6","Cube-Side: 2-1","Cube-Side: 2-2","Cube-Side: 2-3","Cube-Side: 2-4","Cube-Side: 2-5","Cube-Side: 2-6","Cube-Side: 3-1","Cube-Side: 3-2","Cube-Side: 3-3","Cube-Side: 3-4","Cube-Side: 3-5","Cube-Side: 3-6","Cube-Side: 4-1","Cube-Side: 4-2","Cube-Side: 4-3","Cube-Side: 4-4","Cube-Side: 4-5","Cube-Side: 4-6","Cube-Side: 5-1","Cube-Side: 5-2","Cube-Side: 5-3","Cube-Side: 5-4","Cube-Side: 5-5","Cube-Side: 5-6","Cube-Side: 6-1","Cube-Side: 6-2","Cube-Side: 6-3","Cube-Side: 6-4","Cube-Side: 6-5","Cube-Side: 6-6","Cube-Side: 7-1","Cube-Side: 7-2","Cube-Side: 7-3","Cube-Side: 7-4","Cube-Side: 7-5","Cube-Side: 7-6","Cube-Side: 8-1","Cube-Side: 8-2","Cube-Side: 8-3","Cube-Side: 8-4","Cube-Side: 8-5","Cube-Side: 8-6")
/obj/item/weapon/dice/fourdd6/update_icon()
/obj/item/dice/fourdd6/update_icon()
return
/obj/item/weapon/dice/attack_self(mob/user)
/obj/item/dice/attack_self(mob/user)
diceroll(user)
/obj/item/weapon/dice/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
/obj/item/dice/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
if(!..())
return
diceroll(thrower)
/obj/item/weapon/dice/proc/diceroll(mob/user)
/obj/item/dice/proc/diceroll(mob/user)
result = rand(1, sides)
if(rigged && result != rigged)
if(prob(Clamp(1/(sides - 1) * 100, 25, 80)))
@@ -175,7 +175,7 @@
else if(!src.throwing) //Dice was thrown and is coming to rest
visible_message("<span class='notice'>[src] rolls to a stop, landing on [result]. [comment]</span>")
/obj/item/weapon/dice/d4/Crossed(mob/living/carbon/human/H)
/obj/item/dice/d4/Crossed(mob/living/carbon/human/H)
if(istype(H) && !H.shoes)
if(PIERCEIMMUNE in H.dna.species.species_traits)
return 0
@@ -183,11 +183,11 @@
H.apply_damage(4,BRUTE,(pick("l_leg", "r_leg")))
H.Knockdown(60)
/obj/item/weapon/dice/update_icon()
/obj/item/dice/update_icon()
cut_overlays()
add_overlay("[src.icon_state][src.result]")
/obj/item/weapon/dice/microwave_act(obj/machinery/microwave/M)
/obj/item/dice/microwave_act(obj/machinery/microwave/M)
if(can_be_rigged)
rigged = result
..(M)
+56 -56
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/dnainjector
/obj/item/dnainjector
name = "\improper DNA injector"
desc = "This injects the person with DNA."
icon = 'icons/obj/items.dmi'
@@ -20,16 +20,16 @@
var/used = 0
/obj/item/weapon/dnainjector/attack_paw(mob/user)
/obj/item/dnainjector/attack_paw(mob/user)
return attack_hand(user)
/obj/item/weapon/dnainjector/proc/prepare()
/obj/item/dnainjector/proc/prepare()
for(var/mut_key in add_mutations_static)
add_mutations.Add(GLOB.mutations_list[mut_key])
for(var/mut_key in remove_mutations_static)
remove_mutations.Add(GLOB.mutations_list[mut_key])
/obj/item/weapon/dnainjector/proc/inject(mob/living/carbon/M, mob/user)
/obj/item/dnainjector/proc/inject(mob/living/carbon/M, mob/user)
prepare()
if(M.has_dna() && !(RADIMMUNE in M.dna.species.species_traits) && !(M.disabilities & NOCLONE))
@@ -55,7 +55,7 @@
return TRUE
return FALSE
/obj/item/weapon/dnainjector/attack(mob/target, mob/user)
/obj/item/dnainjector/attack(mob/target, mob/user)
if(!user.IsAdvancedToolUser())
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
return
@@ -88,227 +88,227 @@
desc += " This one is used up."
/obj/item/weapon/dnainjector/antihulk
/obj/item/dnainjector/antihulk
name = "\improper DNA injector (Anti-Hulk)"
desc = "Cures green skin."
remove_mutations_static = list(HULK)
/obj/item/weapon/dnainjector/hulkmut
/obj/item/dnainjector/hulkmut
name = "\improper DNA injector (Hulk)"
desc = "This will make you big and strong, but give you a bad skin condition."
add_mutations_static = list(HULK)
/obj/item/weapon/dnainjector/xraymut
/obj/item/dnainjector/xraymut
name = "\improper DNA injector (Xray)"
desc = "Finally you can see what the Captain does."
add_mutations_static = list(XRAY)
/obj/item/weapon/dnainjector/antixray
/obj/item/dnainjector/antixray
name = "\improper DNA injector (Anti-Xray)"
desc = "It will make you see harder."
remove_mutations_static = list(XRAY)
/////////////////////////////////////
/obj/item/weapon/dnainjector/antiglasses
/obj/item/dnainjector/antiglasses
name = "\improper DNA injector (Anti-Glasses)"
desc = "Toss away those glasses!"
remove_mutations_static = list(BADSIGHT)
/obj/item/weapon/dnainjector/glassesmut
/obj/item/dnainjector/glassesmut
name = "\improper DNA injector (Glasses)"
desc = "Will make you need dorkish glasses."
add_mutations_static = list(BADSIGHT)
/obj/item/weapon/dnainjector/epimut
/obj/item/dnainjector/epimut
name = "\improper DNA injector (Epi.)"
desc = "Shake shake shake the room!"
add_mutations_static = list(EPILEPSY)
/obj/item/weapon/dnainjector/antiepi
/obj/item/dnainjector/antiepi
name = "\improper DNA injector (Anti-Epi.)"
desc = "Will fix you up from shaking the room."
remove_mutations_static = list(EPILEPSY)
////////////////////////////////////
/obj/item/weapon/dnainjector/anticough
/obj/item/dnainjector/anticough
name = "\improper DNA injector (Anti-Cough)"
desc = "Will stop that aweful noise."
remove_mutations_static = list(COUGH)
/obj/item/weapon/dnainjector/coughmut
/obj/item/dnainjector/coughmut
name = "\improper DNA injector (Cough)"
desc = "Will bring forth a sound of horror from your throat."
add_mutations_static = list(COUGH)
/obj/item/weapon/dnainjector/antidwarf
/obj/item/dnainjector/antidwarf
name = "\improper DNA injector (Anti-Dwarfism)"
desc = "Helps you grow big and strong."
remove_mutations_static = list(DWARFISM)
/obj/item/weapon/dnainjector/dwarf
/obj/item/dnainjector/dwarf
name = "\improper DNA injector (Dwarfism)"
desc = "It's a small world after all."
add_mutations_static = list(DWARFISM)
/obj/item/weapon/dnainjector/clumsymut
/obj/item/dnainjector/clumsymut
name = "\improper DNA injector (Clumsy)"
desc = "Makes clown minions."
add_mutations_static = list(CLOWNMUT)
/obj/item/weapon/dnainjector/anticlumsy
/obj/item/dnainjector/anticlumsy
name = "\improper DNA injector (Anti-Clumsy)"
desc = "Apply this for Security Clown."
remove_mutations_static = list(CLOWNMUT)
/obj/item/weapon/dnainjector/antitour
/obj/item/dnainjector/antitour
name = "\improper DNA injector (Anti-Tour.)"
desc = "Will cure tourrets."
remove_mutations_static = list(TOURETTES)
/obj/item/weapon/dnainjector/tourmut
/obj/item/dnainjector/tourmut
name = "\improper DNA injector (Tour.)"
desc = "Gives you a nasty case of Tourette's."
add_mutations_static = list(TOURETTES)
/obj/item/weapon/dnainjector/stuttmut
/obj/item/dnainjector/stuttmut
name = "\improper DNA injector (Stutt.)"
desc = "Makes you s-s-stuttterrr"
add_mutations_static = list(NERVOUS)
/obj/item/weapon/dnainjector/antistutt
/obj/item/dnainjector/antistutt
name = "\improper DNA injector (Anti-Stutt.)"
desc = "Fixes that speaking impairment."
remove_mutations_static = list(NERVOUS)
/obj/item/weapon/dnainjector/antifire
/obj/item/dnainjector/antifire
name = "\improper DNA injector (Anti-Fire)"
desc = "Cures fire."
remove_mutations_static = list(COLDRES)
/obj/item/weapon/dnainjector/firemut
/obj/item/dnainjector/firemut
name = "\improper DNA injector (Fire)"
desc = "Gives you fire."
add_mutations_static = list(COLDRES)
/obj/item/weapon/dnainjector/blindmut
/obj/item/dnainjector/blindmut
name = "\improper DNA injector (Blind)"
desc = "Makes you not see anything."
add_mutations_static = list(BLINDMUT)
/obj/item/weapon/dnainjector/antiblind
/obj/item/dnainjector/antiblind
name = "\improper DNA injector (Anti-Blind)"
desc = "IT'S A MIRACLE!!!"
remove_mutations_static = list(BLINDMUT)
/obj/item/weapon/dnainjector/antitele
/obj/item/dnainjector/antitele
name = "\improper DNA injector (Anti-Tele.)"
desc = "Will make you not able to control your mind."
remove_mutations_static = list(TK)
/obj/item/weapon/dnainjector/telemut
/obj/item/dnainjector/telemut
name = "\improper DNA injector (Tele.)"
desc = "Super brain man!"
add_mutations_static = list(TK)
/obj/item/weapon/dnainjector/telemut/darkbundle
/obj/item/dnainjector/telemut/darkbundle
name = "\improper DNA injector"
desc = "Good. Let the hate flow through you."
/obj/item/weapon/dnainjector/deafmut
/obj/item/dnainjector/deafmut
name = "\improper DNA injector (Deaf)"
desc = "Sorry, what did you say?"
add_mutations_static = list(DEAFMUT)
/obj/item/weapon/dnainjector/antideaf
/obj/item/dnainjector/antideaf
name = "\improper DNA injector (Anti-Deaf)"
desc = "Will make you hear once more."
remove_mutations_static = list(DEAFMUT)
/obj/item/weapon/dnainjector/h2m
/obj/item/dnainjector/h2m
name = "\improper DNA injector (Human > Monkey)"
desc = "Will make you a flea bag."
add_mutations_static = list(RACEMUT)
/obj/item/weapon/dnainjector/m2h
/obj/item/dnainjector/m2h
name = "\improper DNA injector (Monkey > Human)"
desc = "Will make you...less hairy."
remove_mutations_static = list(RACEMUT)
/obj/item/weapon/dnainjector/antichameleon
/obj/item/dnainjector/antichameleon
name = "\improper DNA injector (Anti-Chameleon)"
remove_mutations_static = list(CHAMELEON)
/obj/item/weapon/dnainjector/chameleonmut
/obj/item/dnainjector/chameleonmut
name = "\improper DNA injector (Chameleon)"
add_mutations_static = list(CHAMELEON)
/obj/item/weapon/dnainjector/antiwacky
/obj/item/dnainjector/antiwacky
name = "\improper DNA injector (Anti-Wacky)"
remove_mutations_static = list(WACKY)
/obj/item/weapon/dnainjector/wackymut
/obj/item/dnainjector/wackymut
name = "\improper DNA injector (Wacky)"
add_mutations_static = list(WACKY)
/obj/item/weapon/dnainjector/antimute
/obj/item/dnainjector/antimute
name = "\improper DNA injector (Anti-Mute)"
remove_mutations_static = list(MUT_MUTE)
/obj/item/weapon/dnainjector/mutemut
/obj/item/dnainjector/mutemut
name = "\improper DNA injector (Mute)"
add_mutations_static = list(MUT_MUTE)
/obj/item/weapon/dnainjector/antismile
/obj/item/dnainjector/antismile
name = "\improper DNA injector (Anti-Smile)"
remove_mutations_static = list(SMILE)
/obj/item/weapon/dnainjector/smilemut
/obj/item/dnainjector/smilemut
name = "\improper DNA injector (Smile)"
add_mutations_static = list(SMILE)
/obj/item/weapon/dnainjector/unintelligablemut
/obj/item/dnainjector/unintelligablemut
name = "\improper DNA injector (Unintelligable)"
add_mutations_static = list(UNINTELLIGABLE)
/obj/item/weapon/dnainjector/antiunintelligable
/obj/item/dnainjector/antiunintelligable
name = "\improper DNA injector (Anti-Unintelligable)"
remove_mutations_static = list(UNINTELLIGABLE)
/obj/item/weapon/dnainjector/swedishmut
/obj/item/dnainjector/swedishmut
name = "\improper DNA injector (Swedish)"
add_mutations_static = list(SWEDISH)
/obj/item/weapon/dnainjector/antiswedish
/obj/item/dnainjector/antiswedish
name = "\improper DNA injector (Anti-Swedish)"
remove_mutations_static = list(SWEDISH)
/obj/item/weapon/dnainjector/chavmut
/obj/item/dnainjector/chavmut
name = "\improper DNA injector (Chav)"
add_mutations_static = list(CHAV)
/obj/item/weapon/dnainjector/antichav
/obj/item/dnainjector/antichav
name = "\improper DNA injector (Anti-Chav)"
remove_mutations_static = list(CHAV)
/obj/item/weapon/dnainjector/elvismut
/obj/item/dnainjector/elvismut
name = "\improper DNA injector (Elvis)"
add_mutations_static = list(ELVIS)
/obj/item/weapon/dnainjector/antielvis
/obj/item/dnainjector/antielvis
name = "\improper DNA injector (Anti-Elvis)"
remove_mutations_static = list(ELVIS)
/obj/item/weapon/dnainjector/lasereyesmut
/obj/item/dnainjector/lasereyesmut
name = "\improper DNA injector (Laser Eyes)"
add_mutations_static = list(LASEREYES)
/obj/item/weapon/dnainjector/antilasereyes
/obj/item/dnainjector/antilasereyes
name = "\improper DNA injector (Anti-Laser Eyes)"
remove_mutations_static = list(LASEREYES)
/obj/item/weapon/dnainjector/timed
/obj/item/dnainjector/timed
var/duration = 600
/obj/item/weapon/dnainjector/timed/inject(mob/living/carbon/M, mob/user)
/obj/item/dnainjector/timed/inject(mob/living/carbon/M, mob/user)
prepare()
if(M.stat == DEAD) //prevents dead people from having their DNA changed
to_chat(user, "<span class='notice'>You can't modify [M]'s DNA while [M.p_theyre()] dead.</span>")
@@ -359,12 +359,12 @@
else
return FALSE
/obj/item/weapon/dnainjector/timed/hulk
/obj/item/dnainjector/timed/hulk
name = "\improper DNA injector (Hulk)"
desc = "This will make you big and strong, but give you a bad skin condition."
add_mutations_static = list(HULK)
/obj/item/weapon/dnainjector/timed/h2m
/obj/item/dnainjector/timed/h2m
name = "\improper DNA injector (Human > Monkey)"
desc = "Will make you a flea bag."
add_mutations_static = list(RACEMUT)
+11 -11
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/extinguisher
/obj/item/extinguisher
name = "fire extinguisher"
desc = "A traditional red fire extinguisher."
icon = 'icons/obj/items.dmi'
@@ -24,7 +24,7 @@
var/precision = 0 //By default, turfs picked from a spray are random, set to 1 to make it always have at least one water effect per row
var/cooling_power = 2 //Sets the cooling_temperature of the water reagent datum inside of the extinguisher when it is refilled
/obj/item/weapon/extinguisher/mini
/obj/item/extinguisher/mini
name = "pocket fire extinguisher"
desc = "A light and compact fibreglass-framed model fire extinguisher."
icon_state = "miniFE0"
@@ -39,39 +39,39 @@
sprite_name = "miniFE"
dog_fashion = null
/obj/item/weapon/extinguisher/New()
/obj/item/extinguisher/New()
..()
create_reagents(max_water)
reagents.add_reagent("water", max_water)
/obj/item/weapon/extinguisher/attack_self(mob/user)
/obj/item/extinguisher/attack_self(mob/user)
safety = !safety
src.icon_state = "[sprite_name][!safety]"
src.desc = "The safety is [safety ? "on" : "off"]."
to_chat(user, "The safety is [safety ? "on" : "off"].")
return
/obj/item/weapon/extinguisher/attack(mob/M, mob/user)
/obj/item/extinguisher/attack(mob/M, mob/user)
if(user.a_intent == INTENT_HELP && !safety) //If we're on help intent and going to spray people, don't bash them.
return FALSE
else
return ..()
/obj/item/weapon/extinguisher/attack_obj(obj/O, mob/living/user)
/obj/item/extinguisher/attack_obj(obj/O, mob/living/user)
if(AttemptRefill(O, user))
refilling = TRUE
return FALSE
else
return ..()
/obj/item/weapon/extinguisher/examine(mob/user)
/obj/item/extinguisher/examine(mob/user)
..()
if(reagents.total_volume)
to_chat(user, "It contains [round(reagents.total_volume)] units.")
else
to_chat(user, "It is empty.")
/obj/item/weapon/extinguisher/proc/AttemptRefill(atom/target, mob/user)
/obj/item/extinguisher/proc/AttemptRefill(atom/target, mob/user)
if(istype(target, /obj/structure/reagent_dispensers/watertank) && target.Adjacent(user))
var/safety_save = safety
safety = TRUE
@@ -93,7 +93,7 @@
else
return 0
/obj/item/weapon/extinguisher/afterattack(atom/target, mob/user , flag)
/obj/item/extinguisher/afterattack(atom/target, mob/user , flag)
// Make it so the extinguisher doesn't spray yourself when you click your inventory items
if (target.loc == user)
return
@@ -173,10 +173,10 @@
else
return ..()
/obj/item/weapon/extinguisher/AltClick(mob/user)
/obj/item/extinguisher/AltClick(mob/user)
EmptyExtinguisher(user)
/obj/item/weapon/extinguisher/proc/EmptyExtinguisher(var/mob/user)
/obj/item/extinguisher/proc/EmptyExtinguisher(var/mob/user)
if(loc == user && reagents.total_volume)
reagents.clear_reagents()
+26 -26
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/flamethrower
/obj/item/flamethrower
name = "flamethrower"
desc = "You are a firestarter!"
icon = 'icons/obj/flamethrower.dmi'
@@ -18,9 +18,9 @@
var/status = FALSE
var/lit = FALSE //on or off
var/operating = FALSE//cooldown
var/obj/item/weapon/weldingtool/weldtool = null
var/obj/item/weldingtool/weldtool = null
var/obj/item/device/assembly/igniter/igniter = null
var/obj/item/weapon/tank/internals/plasma/ptank = null
var/obj/item/tank/internals/plasma/ptank = null
var/warned_admins = FALSE //for the message_admins() when lit
//variables for prebuilt flamethrowers
var/create_full = FALSE
@@ -28,7 +28,7 @@
var/igniter_type = /obj/item/device/assembly/igniter
trigger_guard = TRIGGER_GUARD_NORMAL
/obj/item/weapon/flamethrower/Destroy()
/obj/item/flamethrower/Destroy()
if(weldtool)
qdel(weldtool)
if(igniter)
@@ -37,7 +37,7 @@
qdel(ptank)
return ..()
/obj/item/weapon/flamethrower/process()
/obj/item/flamethrower/process()
if(!lit || !igniter)
STOP_PROCESSING(SSobj, src)
return null
@@ -50,7 +50,7 @@
igniter.flamethrower_process(location)
/obj/item/weapon/flamethrower/update_icon()
/obj/item/flamethrower/update_icon()
cut_overlays()
if(igniter)
add_overlay("+igniter[status]")
@@ -66,7 +66,7 @@
M.update_inv_hands()
return
/obj/item/weapon/flamethrower/afterattack(atom/target, mob/user, flag)
/obj/item/flamethrower/afterattack(atom/target, mob/user, flag)
if(flag)
return // too close
if(ishuman(user))
@@ -79,8 +79,8 @@
add_logs(user, target, "flamethrowered", src)
flame_turf(turflist)
/obj/item/weapon/flamethrower/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/wrench) && !status)//Taking this apart
/obj/item/flamethrower/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/wrench) && !status)//Taking this apart
var/turf/T = get_turf(src)
if(weldtool)
weldtool.forceMove(T)
@@ -95,7 +95,7 @@
qdel(src)
return
else if(istype(W, /obj/item/weapon/screwdriver) && igniter && !lit)
else if(istype(W, /obj/item/screwdriver) && igniter && !lit)
status = !status
to_chat(user, "<span class='notice'>[igniter] is now [status ? "secured" : "unsecured"]!</span>")
update_icon()
@@ -113,7 +113,7 @@
update_icon()
return
else if(istype(W, /obj/item/weapon/tank/internals/plasma))
else if(istype(W, /obj/item/tank/internals/plasma))
if(ptank)
if(user.transferItemToLoc(W,src))
ptank.forceMove(get_turf(src))
@@ -132,21 +132,21 @@
return ..()
/obj/item/weapon/flamethrower/attack_self(mob/user)
/obj/item/flamethrower/attack_self(mob/user)
toggle_igniter(user)
/obj/item/weapon/flamethrower/AltClick(mob/user)
/obj/item/flamethrower/AltClick(mob/user)
if(ptank && isliving(user) && !user.incapacitated() && Adjacent(user))
user.put_in_hands(ptank)
ptank = null
to_chat(user, "<span class='notice'>You remove the plasma tank from [src]!</span>")
/obj/item/weapon/flamethrower/examine(mob/user)
/obj/item/flamethrower/examine(mob/user)
..()
if(ptank)
to_chat(user, "<span class='notice'>\The [src] has \the [ptank] attached. Alt-click to remove it.</span>")
/obj/item/weapon/flamethrower/proc/toggle_igniter(mob/user)
/obj/item/flamethrower/proc/toggle_igniter(mob/user)
if(!ptank)
to_chat(user, "<span class='notice'>Attach a plasma tank first!</span>")
return
@@ -164,9 +164,9 @@
STOP_PROCESSING(SSobj,src)
update_icon()
/obj/item/weapon/flamethrower/CheckParts(list/parts_list)
/obj/item/flamethrower/CheckParts(list/parts_list)
..()
weldtool = locate(/obj/item/weapon/weldingtool) in contents
weldtool = locate(/obj/item/weldingtool) in contents
igniter = locate(/obj/item/device/assembly/igniter) in contents
weldtool.status = FALSE
igniter.secured = FALSE
@@ -174,7 +174,7 @@
update_icon()
//Called from turf.dm turf/dblclick
/obj/item/weapon/flamethrower/proc/flame_turf(turflist)
/obj/item/flamethrower/proc/flame_turf(turflist)
if(!lit || operating)
return
operating = TRUE
@@ -197,7 +197,7 @@
attack_self(M)
/obj/item/weapon/flamethrower/proc/default_ignite(turf/target, release_amount = 0.05)
/obj/item/flamethrower/proc/default_ignite(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(release_amount)
@@ -210,27 +210,27 @@
SSair.add_to_active(target, 0)
/obj/item/weapon/flamethrower/Initialize(mapload)
/obj/item/flamethrower/Initialize(mapload)
. = ..()
if(create_full)
if(!weldtool)
weldtool = new /obj/item/weapon/weldingtool(src)
weldtool = new /obj/item/weldingtool(src)
weldtool.status = FALSE
if(!igniter)
igniter = new igniter_type(src)
igniter.secured = FALSE
status = TRUE
if(create_with_tank)
ptank = new /obj/item/weapon/tank/internals/plasma/full(src)
ptank = new /obj/item/tank/internals/plasma/full(src)
update_icon()
/obj/item/weapon/flamethrower/full/tank
/obj/item/flamethrower/full/tank
create_full = TRUE
/obj/item/weapon/flamethrower/full/tank
/obj/item/flamethrower/full/tank
create_with_tank = TRUE
/obj/item/weapon/flamethrower/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/flamethrower/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
var/obj/item/projectile/P = hitby
if(damage && attack_type == PROJECTILE_ATTACK && P.damage_type != STAMINA && prob(15))
owner.visible_message("<span class='danger'>[attack_text] hits the fueltank on [owner]'s [src], rupturing it! What a shot!</span>")
@@ -246,5 +246,5 @@
/obj/item/device/assembly/igniter/cold/flamethrower_process(turf/open/location)
return
/obj/item/device/assembly/igniter/proc/ignite_turf(obj/item/weapon/flamethrower/F,turf/open/location,release_amount = 0.05)
/obj/item/device/assembly/igniter/proc/ignite_turf(obj/item/flamethrower/F,turf/open/location,release_amount = 0.05)
F.default_ignite(location,release_amount)
+26 -26
View File
@@ -7,7 +7,7 @@
/*
* Gifts
*/
/obj/item/weapon/a_gift
/obj/item/a_gift
name = "gift"
desc = "PRESENTS!!!! eek!"
icon = 'icons/obj/storage.dmi'
@@ -15,48 +15,48 @@
item_state = "gift1"
resistance_flags = FLAMMABLE
/obj/item/weapon/a_gift/New()
/obj/item/a_gift/New()
..()
pixel_x = rand(-10,10)
pixel_y = rand(-10,10)
icon_state = "giftdeliverypackage[rand(1,5)]"
/obj/item/weapon/a_gift/suicide_act(mob/user)
/obj/item/a_gift/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] peeks inside [src] and cries [user.p_them()]self to death! It looks like [user.p_they()] [user.p_were()] on the naughty list...</span>")
return (BRUTELOSS)
/obj/item/weapon/a_gift/attack_self(mob/M)
/obj/item/a_gift/attack_self(mob/M)
if(M && M.mind && M.mind.special_role == "Santa")
to_chat(M, "<span class='warning'>You're supposed to be spreading gifts, not opening them yourself!</span>")
return
var/gift_type_list = list(/obj/item/weapon/sord,
/obj/item/weapon/storage/wallet,
/obj/item/weapon/storage/photo_album,
/obj/item/weapon/storage/box/snappops,
/obj/item/weapon/storage/crayons,
/obj/item/weapon/storage/backpack/holding,
/obj/item/weapon/storage/belt/champion,
/obj/item/weapon/soap/deluxe,
/obj/item/weapon/pickaxe/diamond,
/obj/item/weapon/pen/invisible,
/obj/item/weapon/lipstick/random,
/obj/item/weapon/grenade/smokebomb,
/obj/item/weapon/grown/corncob,
/obj/item/weapon/poster/random_contraband,
/obj/item/weapon/poster/random_official,
/obj/item/weapon/book/manual/barman_recipes,
/obj/item/weapon/book/manual/chef_recipes,
/obj/item/weapon/bikehorn,
var/gift_type_list = list(/obj/item/sord,
/obj/item/storage/wallet,
/obj/item/storage/photo_album,
/obj/item/storage/box/snappops,
/obj/item/storage/crayons,
/obj/item/storage/backpack/holding,
/obj/item/storage/belt/champion,
/obj/item/soap/deluxe,
/obj/item/pickaxe/diamond,
/obj/item/pen/invisible,
/obj/item/lipstick/random,
/obj/item/grenade/smokebomb,
/obj/item/grown/corncob,
/obj/item/poster/random_contraband,
/obj/item/poster/random_official,
/obj/item/book/manual/barman_recipes,
/obj/item/book/manual/chef_recipes,
/obj/item/bikehorn,
/obj/item/toy/beach_ball,
/obj/item/toy/beach_ball/holoball,
/obj/item/weapon/banhammer,
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus,
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
/obj/item/banhammer,
/obj/item/reagent_containers/food/snacks/grown/ambrosia/deus,
/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
/obj/item/device/paicard,
/obj/item/device/instrument/violin,
/obj/item/device/instrument/guitar,
/obj/item/weapon/storage/belt/utility/full,
/obj/item/storage/belt/utility/full,
/obj/item/clothing/neck/tie/horrible,
/obj/item/clothing/suit/jacket/leather,
/obj/item/clothing/suit/jacket/leather/overcoat,
@@ -2,7 +2,7 @@
#define WIRED 2
#define READY 3
/obj/item/weapon/grenade/chem_grenade
/obj/item/grenade/chem_grenade
name = "chemical grenade"
desc = "A custom made grenade."
icon_state = "chemg"
@@ -11,7 +11,7 @@
force = 2
var/stage = EMPTY
var/list/beakers = list()
var/list/allowed_containers = list(/obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle)
var/list/allowed_containers = list(/obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle)
var/affected_area = 3
var/obj/item/device/assembly_holder/nadeassembly = null
var/assemblyattacher
@@ -19,17 +19,17 @@
var/threatscale = 1 // Used by advanced grenades to make them slightly more worthy.
var/no_splash = FALSE //If the grenade deletes even if it has no reagents to splash with. Used for slime core reactions.
/obj/item/weapon/grenade/chem_grenade/Initialize()
/obj/item/grenade/chem_grenade/Initialize()
. = ..()
create_reagents(1000)
stage_change() // If no argument is set, it will change the stage to the current stage, useful for stock grenades that start READY.
/obj/item/weapon/grenade/chem_grenade/examine(mob/user)
/obj/item/grenade/chem_grenade/examine(mob/user)
display_timer = (stage == READY && !nadeassembly) //show/hide the timer based on assembly state
..()
/obj/item/weapon/grenade/chem_grenade/attack_self(mob/user)
/obj/item/grenade/chem_grenade/attack_self(mob/user)
if(stage == READY && !active)
if(nadeassembly)
nadeassembly.attack_self(user)
@@ -49,8 +49,8 @@
addtimer(CALLBACK(src, .proc/prime), det_time)
/obj/item/weapon/grenade/chem_grenade/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/obj/item/grenade/chem_grenade/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/screwdriver))
if(stage == WIRED)
if(beakers.len)
stage_change(READY)
@@ -103,11 +103,11 @@
to_chat(user, "<span class='warning'>You need one length of coil to wire the assembly!</span>")
return
else if(stage == READY && istype(I, /obj/item/weapon/wirecutters) && !active)
else if(stage == READY && istype(I, /obj/item/wirecutters) && !active)
stage_change(WIRED)
to_chat(user, "<span class='notice'>You unlock the [initial(name)] assembly.</span>")
else if(stage == WIRED && istype(I, /obj/item/weapon/wrench))
else if(stage == WIRED && istype(I, /obj/item/wrench))
if(beakers.len)
for(var/obj/O in beakers)
O.loc = get_turf(src)
@@ -125,7 +125,7 @@
else
return ..()
/obj/item/weapon/grenade/chem_grenade/proc/stage_change(N)
/obj/item/grenade/chem_grenade/proc/stage_change(N)
if(N)
stage = N
if(stage == EMPTY)
@@ -143,24 +143,24 @@
//assembly stuff
/obj/item/weapon/grenade/chem_grenade/receive_signal()
/obj/item/grenade/chem_grenade/receive_signal()
prime()
/obj/item/weapon/grenade/chem_grenade/Crossed(atom/movable/AM)
/obj/item/grenade/chem_grenade/Crossed(atom/movable/AM)
if(nadeassembly)
nadeassembly.Crossed(AM)
/obj/item/weapon/grenade/chem_grenade/on_found(mob/finder)
/obj/item/grenade/chem_grenade/on_found(mob/finder)
if(nadeassembly)
nadeassembly.on_found(finder)
/obj/item/weapon/grenade/chem_grenade/prime()
/obj/item/grenade/chem_grenade/prime()
if(stage != READY)
return
var/list/datum/reagents/reactants = list()
for(var/obj/item/weapon/reagent_containers/glass/G in beakers)
for(var/obj/item/reagent_containers/glass/G in beakers)
reactants += G.reagents
if(!chem_splash(get_turf(src), affected_area, reactants, ignition_temp, threatscale) && !no_splash)
@@ -189,24 +189,24 @@
qdel(src)
//Large chem grenades accept slime cores and use the appropriately.
/obj/item/weapon/grenade/chem_grenade/large
/obj/item/grenade/chem_grenade/large
name = "large grenade"
desc = "A custom made large grenade. It affects a larger area."
icon_state = "large_grenade"
allowed_containers = list(/obj/item/weapon/reagent_containers/glass, /obj/item/weapon/reagent_containers/food/condiment,
/obj/item/weapon/reagent_containers/food/drinks)
allowed_containers = list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/food/condiment,
/obj/item/reagent_containers/food/drinks)
origin_tech = "combat=3;engineering=3"
affected_area = 5
ignition_temp = 25 // Large grenades are slightly more effective at setting off heat-sensitive mixtures than smaller grenades.
threatscale = 1.1 // 10% more effective.
/obj/item/weapon/grenade/chem_grenade/large/prime()
/obj/item/grenade/chem_grenade/large/prime()
if(stage != READY)
return
for(var/obj/item/slime_extract/S in beakers)
if(S.Uses)
for(var/obj/item/weapon/reagent_containers/glass/G in beakers)
for(var/obj/item/reagent_containers/glass/G in beakers)
G.reagents.trans_to(S, G.reagents.total_volume)
//If there is still a core (sometimes it's used up)
@@ -215,7 +215,7 @@
if(S)
if(S.reagents && S.reagents.total_volume)
for(var/obj/item/weapon/reagent_containers/glass/G in beakers)
for(var/obj/item/reagent_containers/glass/G in beakers)
S.reagents.trans_to(G, S.reagents.total_volume)
else
S.forceMove(get_turf(src))
@@ -225,7 +225,7 @@
//I tried to just put it in the allowed_containers list but
//if you do that it must have reagents. If you're going to
//make a special case you might as well do it explicitly. -Sayu
/obj/item/weapon/grenade/chem_grenade/large/attackby(obj/item/I, mob/user, params)
/obj/item/grenade/chem_grenade/large/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/slime_extract) && stage == WIRED)
if(!user.transferItemToLoc(I, src))
return
@@ -234,14 +234,14 @@
else
return ..()
/obj/item/weapon/grenade/chem_grenade/cryo // Intended for rare cryogenic mixes. Cools the area moderately upon detonation.
/obj/item/grenade/chem_grenade/cryo // Intended for rare cryogenic mixes. Cools the area moderately upon detonation.
name = "cryo grenade"
desc = "A custom made cryogenic grenade. It rapidly cools its contents upon detonation."
icon_state = "cryog"
affected_area = 2
ignition_temp = -100
/obj/item/weapon/grenade/chem_grenade/pyro // Intended for pyrotechnical mixes. Produces a small fire upon detonation, igniting potentially flammable mixtures.
/obj/item/grenade/chem_grenade/pyro // Intended for pyrotechnical mixes. Produces a small fire upon detonation, igniting potentially flammable mixtures.
name = "pyro grenade"
desc = "A custom made pyrotechnical grenade. It heats up and ignites its contents upon detonation."
icon_state = "pyrog"
@@ -249,14 +249,14 @@
affected_area = 3
ignition_temp = 500 // This is enough to expose a hotspot.
/obj/item/weapon/grenade/chem_grenade/adv_release // Intended for weaker, but longer lasting effects. Could have some interesting uses.
/obj/item/grenade/chem_grenade/adv_release // Intended for weaker, but longer lasting effects. Could have some interesting uses.
name = "advanced release grenade"
desc = "A custom made advanced release grenade. It is able to be detonated more than once. Can be configured using a multitool."
icon_state = "timeg"
origin_tech = "combat=3;engineering=4"
var/unit_spread = 10 // Amount of units per repeat. Can be altered with a multitool.
/obj/item/weapon/grenade/chem_grenade/adv_release/attackby(obj/item/I, mob/user, params)
/obj/item/grenade/chem_grenade/adv_release/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/device/multitool))
switch(unit_spread)
if(0 to 24)
@@ -269,12 +269,12 @@
return
..()
/obj/item/weapon/grenade/chem_grenade/adv_release/prime()
/obj/item/grenade/chem_grenade/adv_release/prime()
if(stage != READY)
return
var/total_volume = 0
for(var/obj/item/weapon/reagent_containers/RC in beakers)
for(var/obj/item/reagent_containers/RC in beakers)
total_volume += RC.reagents.total_volume
if(!total_volume)
qdel(src)
@@ -283,7 +283,7 @@
var/fraction = unit_spread/total_volume
var/datum/reagents/reactants = new(unit_spread)
reactants.my_atom = src
for(var/obj/item/weapon/reagent_containers/RC in beakers)
for(var/obj/item/reagent_containers/RC in beakers)
RC.reagents.trans_to(reactants, RC.reagents.total_volume*fraction, threatscale, 1, 1)
chem_splash(get_turf(src), affected_area, list(reactants), ignition_temp, threatscale)
@@ -308,15 +308,15 @@
////// PREMADE GRENADES //////
//////////////////////////////
/obj/item/weapon/grenade/chem_grenade/metalfoam
/obj/item/grenade/chem_grenade/metalfoam
name = "metal foam grenade"
desc = "Used for emergency sealing of air breaches."
stage = READY
/obj/item/weapon/grenade/chem_grenade/metalfoam/Initialize()
/obj/item/grenade/chem_grenade/metalfoam/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("aluminium", 30)
B2.reagents.add_reagent("foaming_agent", 10)
@@ -326,15 +326,15 @@
beakers += B2
/obj/item/weapon/grenade/chem_grenade/incendiary
/obj/item/grenade/chem_grenade/incendiary
name = "incendiary grenade"
desc = "Used for clearing rooms of living things."
stage = READY
/obj/item/weapon/grenade/chem_grenade/incendiary/Initialize()
/obj/item/grenade/chem_grenade/incendiary/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("phosphorus", 25)
B2.reagents.add_reagent("stable_plasma", 25)
@@ -344,15 +344,15 @@
beakers += B2
/obj/item/weapon/grenade/chem_grenade/antiweed
/obj/item/grenade/chem_grenade/antiweed
name = "weedkiller grenade"
desc = "Used for purging large areas of invasive plant species. Contents under pressure. Do not directly inhale contents."
stage = READY
/obj/item/weapon/grenade/chem_grenade/antiweed/Initialize()
/obj/item/grenade/chem_grenade/antiweed/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("plantbgone", 25)
B1.reagents.add_reagent("potassium", 25)
@@ -363,15 +363,15 @@
beakers += B2
/obj/item/weapon/grenade/chem_grenade/cleaner
/obj/item/grenade/chem_grenade/cleaner
name = "cleaner grenade"
desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas."
stage = READY
/obj/item/weapon/grenade/chem_grenade/cleaner/Initialize()
/obj/item/grenade/chem_grenade/cleaner/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("fluorosurfactant", 40)
B2.reagents.add_reagent("water", 40)
@@ -381,15 +381,15 @@
beakers += B2
/obj/item/weapon/grenade/chem_grenade/ez_clean
/obj/item/grenade/chem_grenade/ez_clean
name = "cleaner grenade"
desc = "Waffle Co.-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas."
stage = READY
/obj/item/weapon/grenade/chem_grenade/ez_clean/Initialize()
/obj/item/grenade/chem_grenade/ez_clean/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("fluorosurfactant", 40)
B2.reagents.add_reagent("water", 40)
@@ -400,15 +400,15 @@
/obj/item/weapon/grenade/chem_grenade/teargas
/obj/item/grenade/chem_grenade/teargas
name = "teargas grenade"
desc = "Used for nonlethal riot control. Contents under pressure. Do not directly inhale contents."
stage = READY
/obj/item/weapon/grenade/chem_grenade/teargas/Initialize()
/obj/item/grenade/chem_grenade/teargas/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("condensedcapsaicin", 60)
B1.reagents.add_reagent("potassium", 40)
@@ -419,15 +419,15 @@
beakers += B2
/obj/item/weapon/grenade/chem_grenade/facid
/obj/item/grenade/chem_grenade/facid
name = "acid grenade"
desc = "Used for melting armoured opponents."
stage = READY
/obj/item/weapon/grenade/chem_grenade/facid/Initialize()
/obj/item/grenade/chem_grenade/facid/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
B1.reagents.add_reagent("facid", 290)
B1.reagents.add_reagent("potassium", 10)
@@ -439,15 +439,15 @@
beakers += B2
/obj/item/weapon/grenade/chem_grenade/colorful
/obj/item/grenade/chem_grenade/colorful
name = "colorful grenade"
desc = "Used for wide scale painting projects."
stage = READY
/obj/item/weapon/grenade/chem_grenade/colorful/Initialize()
/obj/item/grenade/chem_grenade/colorful/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("colorful_reagent", 25)
B1.reagents.add_reagent("potassium", 25)
@@ -457,16 +457,16 @@
beakers += B1
beakers += B2
/obj/item/weapon/grenade/chem_grenade/glitter
/obj/item/grenade/chem_grenade/glitter
name = "generic glitter grenade"
desc = "You shouldn't see this description."
stage = READY
var/glitter_type = "glitter"
/obj/item/weapon/grenade/chem_grenade/glitter/Initialize()
/obj/item/grenade/chem_grenade/glitter/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent(glitter_type, 25)
B1.reagents.add_reagent("potassium", 25)
@@ -476,30 +476,30 @@
beakers += B1
beakers += B2
/obj/item/weapon/grenade/chem_grenade/glitter/pink
/obj/item/grenade/chem_grenade/glitter/pink
name = "pink glitter bomb"
desc = "For that HOT glittery look."
glitter_type = "pink_glitter"
/obj/item/weapon/grenade/chem_grenade/glitter/blue
/obj/item/grenade/chem_grenade/glitter/blue
name = "blue glitter bomb"
desc = "For that COOL glittery look."
glitter_type = "blue_glitter"
/obj/item/weapon/grenade/chem_grenade/glitter/white
/obj/item/grenade/chem_grenade/glitter/white
name = "white glitter bomb"
desc = "For that somnolent glittery look."
glitter_type = "white_glitter"
/obj/item/weapon/grenade/chem_grenade/clf3
/obj/item/grenade/chem_grenade/clf3
name = "clf3 grenade"
desc = "BURN!-brand foaming clf3. In a special applicator for rapid purging of wide areas."
stage = READY
/obj/item/weapon/grenade/chem_grenade/clf3/Initialize()
/obj/item/grenade/chem_grenade/clf3/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
B1.reagents.add_reagent("fluorosurfactant", 250)
B1.reagents.add_reagent("clf3", 50)
@@ -509,15 +509,15 @@
beakers += B1
beakers += B2
/obj/item/weapon/grenade/chem_grenade/bioterrorfoam
/obj/item/grenade/chem_grenade/bioterrorfoam
name = "Bio terror foam grenade"
desc = "Tiger Cooperative chemical foam grenade. Causes temporary irration, blindness, confusion, mutism, and mutations to carbon based life forms. Contains additional spore toxin"
stage = READY
/obj/item/weapon/grenade/chem_grenade/bioterrorfoam/Initialize()
/obj/item/grenade/chem_grenade/bioterrorfoam/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
B1.reagents.add_reagent("cryptobiolin", 75)
B1.reagents.add_reagent("water", 50)
@@ -529,15 +529,15 @@
beakers += B1
beakers += B2
/obj/item/weapon/grenade/chem_grenade/tuberculosis
/obj/item/grenade/chem_grenade/tuberculosis
name = "Fungal tuberculosis grenade"
desc = "WARNING: GRENADE WILL RELEASE DEADLY SPORES CONTAINING ACTIVE AGENTS. SEAL SUIT AND AIRFLOW BEFORE USE."
stage = READY
/obj/item/weapon/grenade/chem_grenade/tuberculosis/Initialize()
/obj/item/grenade/chem_grenade/tuberculosis/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
B1.reagents.add_reagent("potassium", 50)
B1.reagents.add_reagent("phosphorus", 50)
@@ -1,14 +1,14 @@
////////////////////
//Clusterbang
////////////////////
/obj/item/weapon/grenade/clusterbuster
/obj/item/grenade/clusterbuster
desc = "Use of this weapon may constiute a war crime in your area, consult your local captain."
name = "clusterbang"
icon = 'icons/obj/grenade.dmi'
icon_state = "clusterbang"
var/payload = /obj/item/weapon/grenade/flashbang/cluster
var/payload = /obj/item/grenade/flashbang/cluster
/obj/item/weapon/grenade/clusterbuster/prime()
/obj/item/grenade/clusterbuster/prime()
update_mob()
var/numspawned = rand(4,8)
var/again = 0
@@ -19,7 +19,7 @@
numspawned--
for(var/loop = again ,loop > 0, loop--)
new /obj/item/weapon/grenade/clusterbuster/segment(loc, payload)//Creates 'segments' that launches a few more payloads
new /obj/item/grenade/clusterbuster/segment(loc, payload)//Creates 'segments' that launches a few more payloads
new /obj/effect/payload_spawner(loc, payload, numspawned)//Launches payload
@@ -31,13 +31,13 @@
//////////////////////
//Clusterbang segment
//////////////////////
/obj/item/weapon/grenade/clusterbuster/segment
/obj/item/grenade/clusterbuster/segment
desc = "A smaller segment of a clusterbang. Better run."
name = "clusterbang segment"
icon = 'icons/obj/grenade.dmi'
icon_state = "clusterbang_segment"
/obj/item/weapon/grenade/clusterbuster/segment/New(var/loc, var/payload_type = /obj/item/weapon/grenade/flashbang/cluster)
/obj/item/grenade/clusterbuster/segment/New(var/loc, var/payload_type = /obj/item/grenade/flashbang/cluster)
..()
icon_state = "clusterbang_segment_active"
payload = payload_type
@@ -45,7 +45,7 @@
walk_away(src,loc,rand(1,4))
addtimer(CALLBACK(src, .proc/prime), rand(15,60))
/obj/item/weapon/grenade/clusterbuster/segment/prime()
/obj/item/grenade/clusterbuster/segment/prime()
new /obj/effect/payload_spawner(loc, payload, rand(4,8))
@@ -59,7 +59,7 @@
/obj/effect/payload_spawner/New(var/turf/newloc,var/type, var/numspawned as num)
for(var/loop = numspawned ,loop > 0, loop--)
var/obj/item/weapon/grenade/P = new type(loc)
var/obj/item/grenade/P = new type(loc)
P.active = 1
walk_away(P,loc,rand(1,4))
@@ -72,64 +72,64 @@
//////////////////////////////////
//Custom payload clusterbusters
/////////////////////////////////
/obj/item/weapon/grenade/flashbang/cluster
/obj/item/grenade/flashbang/cluster
icon_state = "flashbang_active"
/obj/item/weapon/grenade/clusterbuster/emp
/obj/item/grenade/clusterbuster/emp
name = "Electromagnetic Storm"
payload = /obj/item/weapon/grenade/empgrenade
payload = /obj/item/grenade/empgrenade
/obj/item/weapon/grenade/clusterbuster/smoke
/obj/item/grenade/clusterbuster/smoke
name = "Ninja Vanish"
payload = /obj/item/weapon/grenade/smokebomb
payload = /obj/item/grenade/smokebomb
/obj/item/weapon/grenade/clusterbuster/metalfoam
/obj/item/grenade/clusterbuster/metalfoam
name = "Instant Concrete"
payload = /obj/item/weapon/grenade/chem_grenade/metalfoam
payload = /obj/item/grenade/chem_grenade/metalfoam
/obj/item/weapon/grenade/clusterbuster/inferno
/obj/item/grenade/clusterbuster/inferno
name = "Inferno"
payload = /obj/item/weapon/grenade/chem_grenade/incendiary
payload = /obj/item/grenade/chem_grenade/incendiary
/obj/item/weapon/grenade/clusterbuster/antiweed
/obj/item/grenade/clusterbuster/antiweed
name = "RoundDown"
payload = /obj/item/weapon/grenade/chem_grenade/antiweed
payload = /obj/item/grenade/chem_grenade/antiweed
/obj/item/weapon/grenade/clusterbuster/cleaner
/obj/item/grenade/clusterbuster/cleaner
name = "Mr. Proper"
payload = /obj/item/weapon/grenade/chem_grenade/cleaner
payload = /obj/item/grenade/chem_grenade/cleaner
/obj/item/weapon/grenade/clusterbuster/teargas
/obj/item/grenade/clusterbuster/teargas
name = "Oignon Grenade"
payload = /obj/item/weapon/grenade/chem_grenade/teargas
payload = /obj/item/grenade/chem_grenade/teargas
/obj/item/weapon/grenade/clusterbuster/facid
/obj/item/grenade/clusterbuster/facid
name = "Aciding Rain"
payload = /obj/item/weapon/grenade/chem_grenade/facid
payload = /obj/item/grenade/chem_grenade/facid
/obj/item/weapon/grenade/clusterbuster/syndieminibomb
/obj/item/grenade/clusterbuster/syndieminibomb
name = "SyndiWrath"
payload = /obj/item/weapon/grenade/syndieminibomb
payload = /obj/item/grenade/syndieminibomb
/obj/item/weapon/grenade/clusterbuster/spawner_manhacks
/obj/item/grenade/clusterbuster/spawner_manhacks
name = "iViscerator"
payload = /obj/item/weapon/grenade/spawnergrenade/manhacks
payload = /obj/item/grenade/spawnergrenade/manhacks
/obj/item/weapon/grenade/clusterbuster/spawner_spesscarp
/obj/item/grenade/clusterbuster/spawner_spesscarp
name = "Invasion of the Space Carps"
payload = /obj/item/weapon/grenade/spawnergrenade/spesscarp
payload = /obj/item/grenade/spawnergrenade/spesscarp
/obj/item/weapon/grenade/clusterbuster/soap
/obj/item/grenade/clusterbuster/soap
name = "Slipocalypse"
payload = /obj/item/weapon/grenade/spawnergrenade/syndiesoap
payload = /obj/item/grenade/spawnergrenade/syndiesoap
/obj/item/weapon/grenade/clusterbuster/clf3
/obj/item/grenade/clusterbuster/clf3
name = "WELCOME TO HELL"
payload = /obj/item/weapon/grenade/chem_grenade/clf3
payload = /obj/item/grenade/chem_grenade/clf3
//random clusterbuster spawner
/obj/item/weapon/grenade/clusterbuster/random/New()
var/real_type = pick(subtypesof(/obj/item/weapon/grenade/clusterbuster))
/obj/item/grenade/clusterbuster/random/New()
var/real_type = pick(subtypesof(/obj/item/grenade/clusterbuster))
new real_type(loc)
qdel(src)
@@ -1,11 +1,11 @@
/obj/item/weapon/grenade/empgrenade
/obj/item/grenade/empgrenade
name = "classic EMP grenade"
desc = "It is designed to wreak havoc on electronic systems."
icon_state = "emp"
item_state = "emp"
origin_tech = "magnets=3;combat=2"
/obj/item/weapon/grenade/empgrenade/prime()
/obj/item/grenade/empgrenade/prime()
update_mob()
empulse(src, 4, 10)
qdel(src)
@@ -1,4 +1,4 @@
/obj/item/weapon/grenade/flashbang
/obj/item/grenade/flashbang
name = "flashbang"
icon_state = "flashbang"
item_state = "flashbang"
@@ -6,7 +6,7 @@
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
origin_tech = "materials=2;combat=3"
/obj/item/weapon/grenade/flashbang/prime()
/obj/item/grenade/flashbang/prime()
update_mob()
var/flashbang_turf = get_turf(src)
if(!flashbang_turf)
@@ -20,7 +20,7 @@
B.take_damage(damage, BURN, "energy")
qdel(src)
/obj/item/weapon/grenade/flashbang/proc/bang(turf/T , mob/living/M)
/obj/item/grenade/flashbang/proc/bang(turf/T , mob/living/M)
if(M.stat == DEAD) //They're dead!
return
M.show_message("<span class='warning'>BANG</span>", 2)
@@ -1,6 +1,6 @@
//improvised explosives//
/obj/item/weapon/grenade/iedcasing
/obj/item/grenade/iedcasing
name = "improvised firebomb"
desc = "A weak, improvised incendiary device."
w_class = WEIGHT_CLASS_SMALL
@@ -19,7 +19,7 @@
var/range = 3
var/list/times
/obj/item/weapon/grenade/iedcasing/Initialize()
/obj/item/grenade/iedcasing/Initialize()
. = ..()
add_overlay("improvised_grenade_filled")
add_overlay("improvised_grenade_wired")
@@ -31,9 +31,9 @@
else
range = pick(2,2,2,3,3,3,4)
/obj/item/weapon/grenade/iedcasing/CheckParts(list/parts_list)
/obj/item/grenade/iedcasing/CheckParts(list/parts_list)
..()
var/obj/item/weapon/reagent_containers/food/drinks/soda_cans/can = locate() in contents
var/obj/item/reagent_containers/food/drinks/soda_cans/can = locate() in contents
if(can)
can.pixel_x = 0 //Reset the sprite's position to make it consistent with the rest of the IED
can.pixel_y = 0
@@ -43,7 +43,7 @@
underlays += can_underlay
/obj/item/weapon/grenade/iedcasing/attack_self(mob/user) //
/obj/item/grenade/iedcasing/attack_self(mob/user) //
if(!active)
if(clown_check(user))
to_chat(user, "<span class='warning'>You light the [name]!</span>")
@@ -61,11 +61,11 @@
C.throw_mode_on()
addtimer(CALLBACK(src, .proc/prime), det_time)
/obj/item/weapon/grenade/iedcasing/prime() //Blowing that can up
/obj/item/grenade/iedcasing/prime() //Blowing that can up
update_mob()
explosion(src.loc,-1,-1,2, flame_range = 4) // small explosion, plus a very large fireball.
qdel(src)
/obj/item/weapon/grenade/iedcasing/examine(mob/user)
/obj/item/grenade/iedcasing/examine(mob/user)
..()
to_chat(user, "You can't tell when it will explode!")
@@ -1,4 +1,4 @@
/obj/item/weapon/grenade
/obj/item/grenade
name = "grenade"
desc = "It has an adjustable timer."
w_class = WEIGHT_CLASS_SMALL
@@ -17,13 +17,13 @@
var/det_time = 50
var/display_timer = 1
/obj/item/weapon/grenade/deconstruct(disassembled = TRUE)
/obj/item/grenade/deconstruct(disassembled = TRUE)
if(!disassembled)
prime()
if(!QDELETED(src))
qdel(src)
/obj/item/weapon/grenade/proc/clown_check(mob/living/carbon/human/user)
/obj/item/grenade/proc/clown_check(mob/living/carbon/human/user)
if(user.disabilities & CLUMSY && prob(50))
to_chat(user, "<span class='warning'>Huh? How does this thing work?</span>")
active = 1
@@ -37,7 +37,7 @@
return 1
/obj/item/weapon/grenade/examine(mob/user)
/obj/item/grenade/examine(mob/user)
..()
if(display_timer)
if(det_time > 1)
@@ -46,7 +46,7 @@
to_chat(user, "\The [src] is set for instant detonation.")
/obj/item/weapon/grenade/attack_self(mob/user)
/obj/item/grenade/attack_self(mob/user)
if(!active)
if(clown_check(user))
preprime(user)
@@ -54,7 +54,7 @@
var/mob/living/carbon/C = user
C.throw_mode_on()
/obj/item/weapon/grenade/proc/preprime(mob/user)
/obj/item/grenade/proc/preprime(mob/user)
if(user)
to_chat(user, "<span class='warning'>You prime the [name]! [det_time/10] seconds!</span>")
playsound(loc, 'sound/weapons/armbomb.ogg', 60, 1)
@@ -71,16 +71,16 @@
addtimer(CALLBACK(src, .proc/prime), det_time)
/obj/item/weapon/grenade/proc/prime()
/obj/item/grenade/proc/prime()
/obj/item/weapon/grenade/proc/update_mob()
/obj/item/grenade/proc/update_mob()
if(ismob(loc))
var/mob/M = loc
M.dropItemToGround(src)
/obj/item/weapon/grenade/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/screwdriver))
/obj/item/grenade/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/screwdriver))
switch(det_time)
if ("1")
det_time = 10
@@ -98,14 +98,14 @@
else
return ..()
/obj/item/weapon/grenade/attack_hand()
/obj/item/grenade/attack_hand()
walk(src, null, null)
..()
/obj/item/weapon/grenade/attack_paw(mob/user)
/obj/item/grenade/attack_paw(mob/user)
return attack_hand(user)
/obj/item/weapon/grenade/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/grenade/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
var/obj/item/projectile/P = hitby
if(damage && attack_type == PROJECTILE_ATTACK && P.damage_type != STAMINA && prob(15))
owner.visible_message("<span class='danger'>[attack_text] hits [owner]'s [src], setting it off! What a shot!</span>")
@@ -1,4 +1,4 @@
/obj/item/weapon/grenade/plastic
/obj/item/grenade/plastic
name = "plastic explosive"
desc = "Used to put holes in specific areas without too much extra hole."
icon_state = "plastic-explosive0"
@@ -15,17 +15,17 @@
var/aim_dir = NORTH
var/boom_sizes = list(0, 0, 3)
/obj/item/weapon/grenade/plastic/New()
/obj/item/grenade/plastic/New()
plastic_overlay = mutable_appearance(icon, "[item_state]2")
..()
/obj/item/weapon/grenade/plastic/Destroy()
/obj/item/grenade/plastic/Destroy()
qdel(nadeassembly)
nadeassembly = null
target = null
..()
/obj/item/weapon/grenade/plastic/attackby(obj/item/I, mob/user, params)
/obj/item/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.transferItemToLoc(I, src))
@@ -37,7 +37,7 @@
playsound(src, 'sound/weapons/tap.ogg', 20, 1)
update_icon()
return
if(nadeassembly && istype(I, /obj/item/weapon/wirecutters))
if(nadeassembly && istype(I, /obj/item/wirecutters))
playsound(src, I.usesound, 20, 1)
nadeassembly.forceMove(get_turf(src))
nadeassembly.master = null
@@ -46,7 +46,7 @@
return
..()
/obj/item/weapon/grenade/plastic/prime()
/obj/item/grenade/plastic/prime()
var/turf/location
if(target)
if(!QDELETED(target))
@@ -67,18 +67,18 @@
qdel(src)
//assembly stuff
/obj/item/weapon/grenade/plastic/receive_signal()
/obj/item/grenade/plastic/receive_signal()
prime()
/obj/item/weapon/grenade/plastic/Crossed(atom/movable/AM)
/obj/item/grenade/plastic/Crossed(atom/movable/AM)
if(nadeassembly)
nadeassembly.Crossed(AM)
/obj/item/weapon/grenade/plastic/on_found(mob/finder)
/obj/item/grenade/plastic/on_found(mob/finder)
if(nadeassembly)
nadeassembly.on_found(finder)
/obj/item/weapon/grenade/plastic/attack_self(mob/user)
/obj/item/grenade/plastic/attack_self(mob/user)
if(nadeassembly)
nadeassembly.attack_self(user)
return
@@ -88,7 +88,7 @@
det_time = newtime
to_chat(user, "Timer set for [det_time] seconds.")
/obj/item/weapon/grenade/plastic/afterattack(atom/movable/AM, mob/user, flag)
/obj/item/grenade/plastic/afterattack(atom/movable/AM, mob/user, flag)
aim_dir = get_dir(user,AM)
if(!flag)
return
@@ -119,7 +119,7 @@
else
qdel(src) //How?
/obj/item/weapon/grenade/plastic/suicide_act(mob/user)
/obj/item/grenade/plastic/suicide_act(mob/user)
message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [src] at [ADMIN_COORDJMP(user)]",0,1)
log_game("[key_name(user)] suicided with [src] at [COORD(user)]")
user.visible_message("<span class='suicide'>[user] activates the [src] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!</span>")
@@ -142,7 +142,7 @@
user.gib(1, 1)
qdel(src)
/obj/item/weapon/grenade/plastic/update_icon()
/obj/item/grenade/plastic/update_icon()
if(nadeassembly)
icon_state = "[item_state]1"
else
@@ -152,7 +152,7 @@
///// The Explosives /////
//////////////////////////
/obj/item/weapon/grenade/plastic/c4
/obj/item/grenade/plastic/c4
name = "C4"
desc = "Used to put holes in specific areas without too much extra hole. A saboteur's favorite."
gender = PLURAL
@@ -167,18 +167,18 @@
var/timer = 10
var/open_panel = 0
/obj/item/weapon/grenade/plastic/c4/New()
/obj/item/grenade/plastic/c4/New()
wires = new /datum/wires/explosive/c4(src)
..()
plastic_overlay = mutable_appearance(icon, "plastic-explosive2")
/obj/item/weapon/grenade/plastic/c4/Destroy()
/obj/item/grenade/plastic/c4/Destroy()
qdel(wires)
wires = null
target = null
return ..()
/obj/item/weapon/grenade/plastic/c4/suicide_act(mob/user)
/obj/item/grenade/plastic/c4/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] activates the [src.name] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!</span>")
var/message_say = "FOR NO RAISIN!"
if(user.mind)
@@ -202,8 +202,8 @@
explode(get_turf(user))
user.gib(1, 1)
/obj/item/weapon/grenade/plastic/c4/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/obj/item/grenade/plastic/c4/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/screwdriver))
open_panel = !open_panel
to_chat(user, "<span class='notice'>You [open_panel ? "open" : "close"] the wire panel.</span>")
else if(is_wire_tool(I))
@@ -211,24 +211,24 @@
else
return ..()
/obj/item/weapon/grenade/plastic/c4/attack_self(mob/user)
/obj/item/grenade/plastic/c4/attack_self(mob/user)
var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num
if(user.get_active_held_item() == src)
newtime = Clamp(newtime, 10, 60000)
timer = newtime
to_chat(user, "Timer set for [timer] seconds.")
/obj/item/weapon/grenade/plastic/c4/afterattack(atom/movable/AM, mob/user, flag)
/obj/item/grenade/plastic/c4/afterattack(atom/movable/AM, mob/user, flag)
if (!flag)
return
if (ismob(AM))
return
if(loc == AM)
return
if((istype(AM, /obj/item/weapon/storage/)) && !((istype(AM, /obj/item/weapon/storage/secure)) || (istype(AM, /obj/item/weapon/storage/lockbox)))) //If its storage but not secure storage OR a lockbox, then place it inside.
if((istype(AM, /obj/item/storage/)) && !((istype(AM, /obj/item/storage/secure)) || (istype(AM, /obj/item/storage/lockbox)))) //If its storage but not secure storage OR a lockbox, then place it inside.
return
if((istype(AM, /obj/item/weapon/storage/secure)) || (istype(AM, /obj/item/weapon/storage/lockbox)))
var/obj/item/weapon/storage/secure/S = AM
if((istype(AM, /obj/item/storage/secure)) || (istype(AM, /obj/item/storage/lockbox)))
var/obj/item/storage/secure/S = AM
if(!S.locked) //Literal hacks, this works for lockboxes despite incorrect type casting, because they both share the locked var. But if its unlocked, place it inside, otherwise PLANTING C4!
return
@@ -249,7 +249,7 @@
to_chat(user, "<span class='notice'>You plant the bomb. Timer counting down from [timer].</span>")
addtimer(CALLBACK(src, .proc/explode), timer * 10)
/obj/item/weapon/grenade/plastic/c4/proc/explode()
/obj/item/grenade/plastic/c4/proc/explode()
if(QDELETED(src))
return
var/turf/location
@@ -264,14 +264,14 @@
explosion(location,0,0,3)
qdel(src)
/obj/item/weapon/grenade/plastic/c4/attack(mob/M, mob/user, def_zone)
/obj/item/grenade/plastic/c4/attack(mob/M, mob/user, 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
/obj/item/grenade/plastic/x4
name = "X4"
desc = "A shaped high-explosive breaching charge. Designed to ensure user safety and wall nonsafety."
icon_state = "plasticx40"
@@ -1,4 +1,4 @@
/obj/item/weapon/grenade/smokebomb
/obj/item/grenade/smokebomb
name = "smoke grenade"
desc = "The word 'Dank' is scribbled on it in crayon."
icon = 'icons/obj/grenade.dmi'
@@ -8,16 +8,16 @@
slot_flags = SLOT_BELT
var/datum/effect_system/smoke_spread/bad/smoke
/obj/item/weapon/grenade/smokebomb/New()
/obj/item/grenade/smokebomb/New()
..()
src.smoke = new /datum/effect_system/smoke_spread/bad
src.smoke.attach(src)
/obj/item/weapon/grenade/smokebomb/Destroy()
/obj/item/grenade/smokebomb/Destroy()
qdel(smoke)
return ..()
/obj/item/weapon/grenade/smokebomb/prime()
/obj/item/grenade/smokebomb/prime()
update_mob()
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
smoke.set_up(4, src)
@@ -1,4 +1,4 @@
/obj/item/weapon/grenade/spawnergrenade
/obj/item/grenade/spawnergrenade
desc = "It will unleash an unspecified anomaly into the vicinity."
name = "delivery grenade"
icon = 'icons/obj/grenade.dmi'
@@ -8,7 +8,7 @@
var/spawner_type = null // must be an object path
var/deliveryamt = 1 // amount of type to deliver
/obj/item/weapon/grenade/spawnergrenade/prime() // Prime now just handles the two loops that query for people in lockers and people who can see it.
/obj/item/grenade/spawnergrenade/prime() // Prime now just handles the two loops that query for people in lockers and people who can see it.
update_mob()
if(spawner_type && deliveryamt)
// Make a quick flash
@@ -22,18 +22,18 @@
qdel(src)
/obj/item/weapon/grenade/spawnergrenade/manhacks
/obj/item/grenade/spawnergrenade/manhacks
name = "viscerator delivery grenade"
spawner_type = /mob/living/simple_animal/hostile/viscerator
deliveryamt = 10
origin_tech = "materials=3;magnets=4;syndicate=3"
/obj/item/weapon/grenade/spawnergrenade/spesscarp
/obj/item/grenade/spawnergrenade/spesscarp
name = "carp delivery grenade"
spawner_type = /mob/living/simple_animal/hostile/carp
deliveryamt = 5
origin_tech = "materials=3;magnets=4;syndicate=3"
/obj/item/weapon/grenade/spawnergrenade/syndiesoap
/obj/item/grenade/spawnergrenade/syndiesoap
name = "Mister Scrubby"
spawner_type = /obj/item/weapon/soap/syndie
spawner_type = /obj/item/soap/syndie
@@ -1,4 +1,4 @@
/obj/item/weapon/grenade/syndieminibomb
/obj/item/grenade/syndieminibomb
desc = "A syndicate manufactured explosive used to sow destruction and chaos"
name = "syndicate minibomb"
icon = 'icons/obj/grenade.dmi'
@@ -7,28 +7,28 @@
origin_tech = "materials=3;magnets=4;syndicate=3"
/obj/item/weapon/grenade/syndieminibomb/prime()
/obj/item/grenade/syndieminibomb/prime()
update_mob()
explosion(src.loc,1,2,4,flame_range = 2)
qdel(src)
/obj/item/weapon/grenade/syndieminibomb/concussion
/obj/item/grenade/syndieminibomb/concussion
name = "HE Grenade"
desc = "A compact shrapnel grenade meant to devestate nearby organisms and cause some damage in the process. Pull pin and throw opposite direction."
icon_state = "concussion"
origin_tech = "materials=3;magnets=4;syndicate=2"
/obj/item/weapon/grenade/syndieminibomb/concussion/prime()
/obj/item/grenade/syndieminibomb/concussion/prime()
update_mob()
explosion(src.loc,0,2,3,flame_range = 3)
qdel(src)
/obj/item/weapon/grenade/syndieminibomb/concussion/frag
/obj/item/grenade/syndieminibomb/concussion/frag
name = "frag grenade"
desc = "Fire in the hole."
icon_state = "frag"
/obj/item/weapon/grenade/gluon
/obj/item/grenade/gluon
desc = "An advanced grenade that releases a harmful stream of gluons inducing radiation in those nearby. These gluon streams will also make victims feel exhausted, and induce shivering. This extreme coldness will also likely wet any nearby floors."
name = "gluon frag grenade"
icon = 'icons/obj/grenade.dmi'
@@ -38,7 +38,7 @@
var/rad_damage = 35
var/stamina_damage = 30
/obj/item/weapon/grenade/gluon/prime()
/obj/item/grenade/gluon/prime()
update_mob()
playsound(loc, 'sound/effects/empulse.ogg', 50, 1)
radiation_pulse(loc,freeze_range,freeze_range+1,rad_damage)
+47 -47
View File
@@ -1,9 +1,9 @@
/obj/item/weapon/restraints
/obj/item/restraints
breakouttime = 600
//Handcuffs
/obj/item/weapon/restraints/handcuffs
/obj/item/restraints/handcuffs
name = "handcuffs"
desc = "Use this to keep prisoners in line."
gender = PLURAL
@@ -24,7 +24,7 @@
var/cuffsound = 'sound/weapons/handcuffs.ogg'
var/trashtype = null //for disposable cuffs
/obj/item/weapon/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/carbon/human/user)
/obj/item/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/carbon/human/user)
if(!istype(C))
return
if(user.disabilities & CLUMSY && prob(50))
@@ -55,14 +55,14 @@
else
to_chat(user, "<span class='warning'>[C] doesn't have two hands...</span>")
/obj/item/weapon/restraints/handcuffs/proc/apply_cuffs(mob/living/carbon/target, mob/user, var/dispense = 0)
/obj/item/restraints/handcuffs/proc/apply_cuffs(mob/living/carbon/target, mob/user, var/dispense = 0)
if(target.handcuffed)
return
if(!user.drop_item() && !dispense)
return
var/obj/item/weapon/restraints/handcuffs/cuffs = src
var/obj/item/restraints/handcuffs/cuffs = src
if(trashtype)
cuffs = new trashtype()
else if(dispense)
@@ -76,7 +76,7 @@
qdel(src)
return
/obj/item/weapon/restraints/handcuffs/sinew
/obj/item/restraints/handcuffs/sinew
name = "sinew restraints"
desc = "A pair of restraints fashioned from long strands of flesh."
icon = 'icons/obj/mining.dmi'
@@ -85,7 +85,7 @@
breakouttime = 300 //Deciseconds = 30s
cuffsound = 'sound/weapons/cablecuff.ogg'
/obj/item/weapon/restraints/handcuffs/cable
/obj/item/restraints/handcuffs/cable
name = "cable restraints"
desc = "Looks like some cables tied together. Could be used to tie something up."
icon_state = "cuff_red"
@@ -98,7 +98,7 @@
cuffsound = 'sound/weapons/cablecuff.ogg'
var/datum/robot_energy_storage/wirestorage = null
/obj/item/weapon/restraints/handcuffs/cable/attack(mob/living/carbon/C, mob/living/carbon/human/user)
/obj/item/restraints/handcuffs/cable/attack(mob/living/carbon/C, mob/living/carbon/human/user)
if(!istype(C))
return
if(wirestorage && wirestorage.energy < 15)
@@ -106,7 +106,7 @@
return
return ..()
/obj/item/weapon/restraints/handcuffs/cable/apply_cuffs(mob/living/carbon/target, mob/user, var/dispense = 0)
/obj/item/restraints/handcuffs/cable/apply_cuffs(mob/living/carbon/target, mob/user, var/dispense = 0)
if(wirestorage)
if(!wirestorage.use_charge(15))
to_chat(user, "<span class='warning'>You need at least 15 wire to restrain [target]!</span>")
@@ -115,57 +115,57 @@
return ..()
/obj/item/weapon/restraints/handcuffs/cable/red
/obj/item/restraints/handcuffs/cable/red
icon_state = "cuff_red"
item_state = "coil_red"
/obj/item/weapon/restraints/handcuffs/cable/yellow
/obj/item/restraints/handcuffs/cable/yellow
icon_state = "cuff_yellow"
item_state = "coil_yellow"
/obj/item/weapon/restraints/handcuffs/cable/blue
/obj/item/restraints/handcuffs/cable/blue
icon_state = "cuff_blue"
item_state = "coil_blue"
/obj/item/weapon/restraints/handcuffs/cable/green
/obj/item/restraints/handcuffs/cable/green
icon_state = "cuff_green"
item_state = "coil_green"
/obj/item/weapon/restraints/handcuffs/cable/pink
/obj/item/restraints/handcuffs/cable/pink
icon_state = "cuff_pink"
item_state = "coil_pink"
/obj/item/weapon/restraints/handcuffs/cable/orange
/obj/item/restraints/handcuffs/cable/orange
icon_state = "cuff_orange"
item_state = "coil_orange"
/obj/item/weapon/restraints/handcuffs/cable/cyan
/obj/item/restraints/handcuffs/cable/cyan
icon_state = "cuff_cyan"
item_state = "coil_cyan"
/obj/item/weapon/restraints/handcuffs/cable/white
/obj/item/restraints/handcuffs/cable/white
icon_state = "cuff_white"
item_state = "coil_white"
/obj/item/weapon/restraints/handcuffs/alien
/obj/item/restraints/handcuffs/alien
icon_state = "handcuffAlien"
/obj/item/weapon/restraints/handcuffs/fake
/obj/item/restraints/handcuffs/fake
name = "fake handcuffs"
desc = "Fake handcuffs meant for gag purposes."
breakouttime = 10 //Deciseconds = 1s
/obj/item/weapon/restraints/handcuffs/fake/kinky
/obj/item/restraints/handcuffs/fake/kinky
name = "kinky handcuffs"
desc = "Fake handcuffs meant for erotic roleplay."
icon_state = "handcuffGag"
/obj/item/weapon/restraints/handcuffs/cable/attackby(obj/item/I, mob/user, params)
/obj/item/restraints/handcuffs/cable/attackby(obj/item/I, mob/user, params)
..()
if(istype(I, /obj/item/stack/rods))
var/obj/item/stack/rods/R = I
if (R.use(1))
var/obj/item/weapon/wirerod/W = new /obj/item/weapon/wirerod
var/obj/item/wirerod/W = new /obj/item/wirerod
remove_item_from_storage(user)
user.put_in_hands(W)
to_chat(user, "<span class='notice'>You wrap the cable restraint around the top of the rod.</span>")
@@ -182,7 +182,7 @@
if(do_after(user, 35, target = src))
if(M.get_amount() < 6 || !M)
return
var/obj/item/weapon/restraints/legcuffs/bola/S = new /obj/item/weapon/restraints/legcuffs/bola
var/obj/item/restraints/legcuffs/bola/S = new /obj/item/restraints/legcuffs/bola
M.use(6)
user.put_in_hands(S)
to_chat(user, "<span class='notice'>You make some weights out of [I] and tie them to [src].</span>")
@@ -191,7 +191,7 @@
else
return ..()
/obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg/attack(mob/living/carbon/C, mob/user)
/obj/item/restraints/handcuffs/cable/zipties/cyborg/attack(mob/living/carbon/C, mob/user)
if(iscyborg(user))
if(!C.handcuffed)
playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
@@ -199,14 +199,14 @@
"<span class='userdanger'>[user] is trying to put zipties on [C]!</span>")
if(do_mob(user, C, 30))
if(!C.handcuffed)
C.handcuffed = new /obj/item/weapon/restraints/handcuffs/cable/zipties/used(C)
C.handcuffed = new /obj/item/restraints/handcuffs/cable/zipties/used(C)
C.update_handcuffed()
to_chat(user, "<span class='notice'>You handcuff [C].</span>")
add_logs(user, C, "handcuffed")
else
to_chat(user, "<span class='warning'>You fail to handcuff [C]!</span>")
/obj/item/weapon/restraints/handcuffs/cable/zipties
/obj/item/restraints/handcuffs/cable/zipties
name = "zipties"
desc = "Plastic, disposable zipties that can be used to restrain temporarily but are destroyed after use."
icon_state = "cuff_white"
@@ -214,20 +214,20 @@
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
materials = list()
breakouttime = 450 //Deciseconds = 45s
trashtype = /obj/item/weapon/restraints/handcuffs/cable/zipties/used
trashtype = /obj/item/restraints/handcuffs/cable/zipties/used
/obj/item/weapon/restraints/handcuffs/cable/zipties/used
/obj/item/restraints/handcuffs/cable/zipties/used
desc = "A pair of broken zipties."
icon_state = "cuff_white_used"
item_state = "cuff_white"
/obj/item/weapon/restraints/handcuffs/cable/zipties/used/attack()
/obj/item/restraints/handcuffs/cable/zipties/used/attack()
return
//Legcuffs
/obj/item/weapon/restraints/legcuffs
/obj/item/restraints/legcuffs
name = "leg cuffs"
desc = "Use this to keep prisoners in line."
gender = PLURAL
@@ -242,7 +242,7 @@
slowdown = 7
breakouttime = 300 //Deciseconds = 30s = 0.5 minute
/obj/item/weapon/restraints/legcuffs/beartrap
/obj/item/restraints/legcuffs/beartrap
name = "bear trap"
throw_speed = 1
throw_range = 1
@@ -252,23 +252,23 @@
var/armed = 0
var/trap_damage = 20
/obj/item/weapon/restraints/legcuffs/beartrap/Initialize()
/obj/item/restraints/legcuffs/beartrap/Initialize()
..()
icon_state = "[initial(icon_state)][armed]"
/obj/item/weapon/restraints/legcuffs/beartrap/suicide_act(mob/user)
/obj/item/restraints/legcuffs/beartrap/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is sticking [user.p_their()] head in the [src.name]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
return (BRUTELOSS)
/obj/item/weapon/restraints/legcuffs/beartrap/attack_self(mob/user)
/obj/item/restraints/legcuffs/beartrap/attack_self(mob/user)
..()
if(ishuman(user) && !user.stat && !user.restrained())
armed = !armed
icon_state = "[initial(icon_state)][armed]"
to_chat(user, "<span class='notice'>[src] is now [armed ? "armed" : "disarmed"]</span>")
/obj/item/weapon/restraints/legcuffs/beartrap/Crossed(AM as mob|obj)
/obj/item/restraints/legcuffs/beartrap/Crossed(AM as mob|obj)
if(armed && isturf(src.loc))
if(isliving(AM))
var/mob/living/L = AM
@@ -299,29 +299,29 @@
L.apply_damage(trap_damage,BRUTE, def_zone)
..()
/obj/item/weapon/restraints/legcuffs/beartrap/energy
/obj/item/restraints/legcuffs/beartrap/energy
name = "energy snare"
armed = 1
icon_state = "e_snare"
trap_damage = 0
flags_1 = DROPDEL_1
/obj/item/weapon/restraints/legcuffs/beartrap/energy/New()
/obj/item/restraints/legcuffs/beartrap/energy/New()
..()
addtimer(CALLBACK(src, .proc/dissipate), 100)
/obj/item/weapon/restraints/legcuffs/beartrap/energy/proc/dissipate()
/obj/item/restraints/legcuffs/beartrap/energy/proc/dissipate()
if(!ismob(loc))
do_sparks(1, TRUE, src)
qdel(src)
/obj/item/weapon/restraints/legcuffs/beartrap/energy/attack_hand(mob/user)
/obj/item/restraints/legcuffs/beartrap/energy/attack_hand(mob/user)
Crossed(user) //honk
/obj/item/weapon/restraints/legcuffs/beartrap/energy/cyborg
/obj/item/restraints/legcuffs/beartrap/energy/cyborg
breakouttime = 20 // Cyborgs shouldn't have a strong restraint
/obj/item/weapon/restraints/legcuffs/bola
/obj/item/restraints/legcuffs/bola
name = "bola"
desc = "A restraining device designed to be thrown at the target. Upon connecting with said target, it will wrap around their legs, making it difficult for them to move quickly."
icon_state = "bola"
@@ -330,12 +330,12 @@
origin_tech = "engineering=3;combat=1"
var/knockdown = 0
/obj/item/weapon/restraints/legcuffs/bola/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
/obj/item/restraints/legcuffs/bola/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
if(!..())
return
playsound(src.loc,'sound/weapons/bolathrow.ogg', 75, 1)
/obj/item/weapon/restraints/legcuffs/bola/throw_impact(atom/hit_atom)
/obj/item/restraints/legcuffs/bola/throw_impact(atom/hit_atom)
if(..() || !iscarbon(hit_atom))//if it gets caught or the target can't be cuffed,
return//abort
var/mob/living/carbon/C = hit_atom
@@ -348,7 +348,7 @@
to_chat(C, "<span class='userdanger'>\The [src] ensnares you!</span>")
C.Knockdown(knockdown)
/obj/item/weapon/restraints/legcuffs/bola/tactical//traitor variant
/obj/item/restraints/legcuffs/bola/tactical//traitor variant
name = "reinforced bola"
desc = "A strong bola, made with a long steel chain. It looks heavy, enough so that it could trip somebody."
icon_state = "bola_r"
@@ -356,7 +356,7 @@
origin_tech = "engineering=4;combat=3"
knockdown = 20
/obj/item/weapon/restraints/legcuffs/bola/energy //For Security
/obj/item/restraints/legcuffs/bola/energy //For Security
name = "energy bola"
desc = "A specialized hard-light bola designed to ensnare fleeing criminals and aid in arrests."
icon_state = "ebola"
@@ -364,9 +364,9 @@
w_class = WEIGHT_CLASS_SMALL
breakouttime = 60
/obj/item/weapon/restraints/legcuffs/bola/energy/throw_impact(atom/hit_atom)
/obj/item/restraints/legcuffs/bola/energy/throw_impact(atom/hit_atom)
if(iscarbon(hit_atom))
var/obj/item/weapon/restraints/legcuffs/beartrap/B = new /obj/item/weapon/restraints/legcuffs/beartrap/energy/cyborg(get_turf(hit_atom))
var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(hit_atom))
B.Crossed(hit_atom)
qdel(src)
..()
+14 -14
View File
@@ -4,7 +4,7 @@
//If the wielder fails to feed His Grace in time, He will devour them and become incredibly aggressive.
//Leaving His Grace alone for some time will reset His thirst and put Him to sleep.
//Using His Grace effectively requires extreme speed and care.
/obj/item/weapon/his_grace
/obj/item/his_grace
name = "artistic toolbox"
desc = "A toolbox painted bright green. Looking at it makes you feel uneasy."
icon_state = "his_grace"
@@ -20,32 +20,32 @@
var/prev_bloodthirst = HIS_GRACE_SATIATED
var/force_bonus = 0
/obj/item/weapon/his_grace/Initialize()
/obj/item/his_grace/Initialize()
. = ..()
START_PROCESSING(SSprocessing, src)
GLOB.poi_list += src
/obj/item/weapon/his_grace/Destroy()
/obj/item/his_grace/Destroy()
STOP_PROCESSING(SSprocessing, src)
GLOB.poi_list -= src
for(var/mob/living/L in src)
L.forceMove(get_turf(src))
return ..()
/obj/item/weapon/his_grace/attack_self(mob/living/user)
/obj/item/his_grace/attack_self(mob/living/user)
if(!awakened)
INVOKE_ASYNC(src, .proc/awaken, user)
/obj/item/weapon/his_grace/attack(mob/living/M, mob/user)
/obj/item/his_grace/attack(mob/living/M, mob/user)
if(awakened && M.stat)
consume(M)
else
..()
/obj/item/weapon/his_grace/CtrlClick(mob/user) //you can't pull his grace
/obj/item/his_grace/CtrlClick(mob/user) //you can't pull his grace
return
/obj/item/weapon/his_grace/examine(mob/user)
/obj/item/his_grace/examine(mob/user)
..()
if(awakened)
switch(bloodthirst)
@@ -64,12 +64,12 @@
else
to_chat(user, "<span class='his_grace'>[src] is latched closed.</span>")
/obj/item/weapon/his_grace/relaymove(mob/living/user) //Allows changelings, etc. to climb out of Him after they revive, provided He isn't active
/obj/item/his_grace/relaymove(mob/living/user) //Allows changelings, etc. to climb out of Him after they revive, provided He isn't active
if(!awakened)
user.forceMove(get_turf(src))
user.visible_message("<span class='warning'>[user] scrambles out of [src]!</span>", "<span class='notice'>You climb out of [src]!</span>")
/obj/item/weapon/his_grace/process()
/obj/item/his_grace/process()
if(!bloodthirst)
drowse()
return
@@ -116,7 +116,7 @@
else
consume(L)
/obj/item/weapon/his_grace/proc/awaken(mob/user) //Good morning, Mr. Grace.
/obj/item/his_grace/proc/awaken(mob/user) //Good morning, Mr. Grace.
if(awakened)
return
awakened = TRUE
@@ -129,7 +129,7 @@
playsound(user, 'sound/effects/pope_entry.ogg', 100)
icon_state = "his_grace_awakened"
/obj/item/weapon/his_grace/proc/drowse() //Good night, Mr. Grace.
/obj/item/his_grace/proc/drowse() //Good night, Mr. Grace.
if(!awakened)
return
var/turf/T = get_turf(src)
@@ -144,7 +144,7 @@
awakened = FALSE
bloodthirst = 0
/obj/item/weapon/his_grace/proc/consume(mob/living/meal) //Here's your dinner, Mr. Grace.
/obj/item/his_grace/proc/consume(mob/living/meal) //Here's your dinner, Mr. Grace.
if(!meal)
return
meal.visible_message("<span class='warning'>[src] swings open and devours [meal]!</span>", "<span class='his_grace big bold'>[src] consumes you!</span>")
@@ -160,7 +160,7 @@
bloodthirst = HIS_GRACE_CONSUME_OWNER
update_stats()
/obj/item/weapon/his_grace/proc/adjust_bloodthirst(amt)
/obj/item/his_grace/proc/adjust_bloodthirst(amt)
prev_bloodthirst = bloodthirst
if(prev_bloodthirst < HIS_GRACE_CONSUME_OWNER)
bloodthirst = Clamp(bloodthirst + amt, HIS_GRACE_SATIATED, HIS_GRACE_CONSUME_OWNER)
@@ -168,7 +168,7 @@
bloodthirst = Clamp(bloodthirst + amt, HIS_GRACE_CONSUME_OWNER, HIS_GRACE_FALL_ASLEEP)
update_stats()
/obj/item/weapon/his_grace/proc/update_stats()
/obj/item/his_grace/proc/update_stats()
flags_1 &= ~NODROP_1
var/mob/living/master = get_atom_on_turf(src, /mob/living)
switch(bloodthirst)
@@ -1,4 +1,4 @@
/obj/item/weapon/holosign_creator
/obj/item/holosign_creator
name = "holographic sign projector"
desc = "A handy-dandy holographic projector that displays a janitorial sign."
icon = 'icons/obj/device.dmi'
@@ -19,7 +19,7 @@
var/holosign_type = /obj/structure/holosign/wetsign
var/holocreator_busy = FALSE //to prevent placing multiple holo barriers at once
/obj/item/weapon/holosign_creator/afterattack(atom/target, mob/user, flag)
/obj/item/holosign_creator/afterattack(atom/target, mob/user, flag)
if(flag)
if(!check_allowed_items(target, 1))
return
@@ -50,17 +50,17 @@
else
to_chat(user, "<span class='notice'>[src] is projecting at max capacity!</span>")
/obj/item/weapon/holosign_creator/attack(mob/living/carbon/human/M, mob/user)
/obj/item/holosign_creator/attack(mob/living/carbon/human/M, mob/user)
return
/obj/item/weapon/holosign_creator/attack_self(mob/user)
/obj/item/holosign_creator/attack_self(mob/user)
if(signs.len)
for(var/H in signs)
qdel(H)
to_chat(user, "<span class='notice'>You clear all active holograms.</span>")
/obj/item/weapon/holosign_creator/security
/obj/item/holosign_creator/security
name = "security holobarrier projector"
desc = "A holographic projector that creates holographic security barriers."
icon_state = "signmaker_sec"
@@ -68,7 +68,7 @@
creation_time = 30
max_signs = 6
/obj/item/weapon/holosign_creator/engineering
/obj/item/holosign_creator/engineering
name = "engineering holobarrier projector"
desc = "A holographic projector that creates holographic engineering barriers."
icon_state = "signmaker_engi"
@@ -76,7 +76,7 @@
creation_time = 30
max_signs = 6
/obj/item/weapon/holosign_creator/atmos
/obj/item/holosign_creator/atmos
name = "ATMOS holofan projector"
desc = "A holographic projector that creates holographic barriers that prevent changes in atmosphere conditions."
icon_state = "signmaker_engi"
@@ -84,7 +84,7 @@
creation_time = 0
max_signs = 3
/obj/item/weapon/holosign_creator/cyborg
/obj/item/holosign_creator/cyborg
name = "Energy Barrier Projector"
desc = "A holographic projector that creates fragile energy fields"
creation_time = 15
@@ -92,7 +92,7 @@
holosign_type = /obj/structure/holosign/barrier/cyborg
var/shock = 0
/obj/item/weapon/holosign_creator/cyborg/attack_self(mob/user)
/obj/item/holosign_creator/cyborg/attack_self(mob/user)
if(iscyborg(user))
var/mob/living/silicon/robot/R = user
+43 -43
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/nullrod
/obj/item/nullrod
name = "null rod"
desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of Nar-Sie's followers."
icon_state = "nullrod"
@@ -12,19 +12,19 @@
w_class = WEIGHT_CLASS_TINY
var/reskinned = FALSE
/obj/item/weapon/nullrod/suicide_act(mob/user)
/obj/item/nullrod/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is killing [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to get closer to god!</span>")
return (BRUTELOSS|FIRELOSS)
/obj/item/weapon/nullrod/attack_self(mob/user)
/obj/item/nullrod/attack_self(mob/user)
if(user.mind && (user.mind.isholy) && !reskinned)
reskin_holy_weapon(user)
/obj/item/weapon/nullrod/proc/reskin_holy_weapon(mob/M)
/obj/item/nullrod/proc/reskin_holy_weapon(mob/M)
if(SSreligion.holy_weapon_type)
return
var/obj/item/weapon/nullrod/holy_weapon
var/list/holy_weapons_list = typesof(/obj/item/weapon/nullrod)
var/obj/item/nullrod/holy_weapon
var/list/holy_weapons_list = typesof(/obj/item/nullrod)
var/list/display_names = list()
for(var/V in holy_weapons_list)
var/atom/A = V
@@ -48,7 +48,7 @@
qdel(src)
M.put_in_active_hand(holy_weapon)
/obj/item/weapon/nullrod/godhand
/obj/item/nullrod/godhand
icon_state = "disintegrate"
item_state = "disintegrate"
name = "god hand"
@@ -59,7 +59,7 @@
damtype = BURN
attack_verb = list("punched", "cross countered", "pummeled")
/obj/item/weapon/nullrod/staff
/obj/item/nullrod/staff
icon_state = "godstaff-red"
item_state = "godstaff-red"
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
@@ -72,18 +72,18 @@
block_chance = 50
var/shield_icon = "shield-red"
/obj/item/weapon/nullrod/staff/worn_overlays(isinhands)
/obj/item/nullrod/staff/worn_overlays(isinhands)
. = list()
if(isinhands)
. += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_LAYER + 0.01)
/obj/item/weapon/nullrod/staff/blue
/obj/item/nullrod/staff/blue
name = "blue holy staff"
icon_state = "godstaff-blue"
item_state = "godstaff-blue"
shield_icon = "shield-old"
/obj/item/weapon/nullrod/claymore
/obj/item/nullrod/claymore
icon_state = "claymore"
item_state = "claymore"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
@@ -97,12 +97,12 @@
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/weapon/nullrod/claymore/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/nullrod/claymore/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(attack_type == PROJECTILE_ATTACK)
final_block_chance = 0 //Don't bring a sword to a gunfight
return ..()
/obj/item/weapon/nullrod/claymore/darkblade
/obj/item/nullrod/claymore/darkblade
icon_state = "cultblade"
item_state = "cultblade"
name = "dark blade"
@@ -110,7 +110,7 @@
slot_flags = SLOT_BELT
hitsound = 'sound/hallucinations/growl1.ogg'
/obj/item/weapon/nullrod/claymore/chainsaw_sword
/obj/item/nullrod/claymore/chainsaw_sword
icon_state = "chainswordon"
item_state = "chainswordon"
name = "sacred chainsaw sword"
@@ -119,32 +119,32 @@
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsawhit.ogg'
/obj/item/weapon/nullrod/claymore/glowing
/obj/item/nullrod/claymore/glowing
icon_state = "swordon"
item_state = "swordon"
name = "force weapon"
desc = "The blade glows with the power of faith. Or possibly a battery."
slot_flags = SLOT_BELT
/obj/item/weapon/nullrod/claymore/katana
/obj/item/nullrod/claymore/katana
name = "hanzo steel"
desc = "Capable of cutting clean through a holy claymore."
icon_state = "katana"
item_state = "katana"
slot_flags = SLOT_BELT | SLOT_BACK
/obj/item/weapon/nullrod/claymore/multiverse
/obj/item/nullrod/claymore/multiverse
name = "extradimensional blade"
desc = "Once the harbinger of an interdimensional war, its sharpness fluctuates wildly."
icon_state = "multiverse"
item_state = "multiverse"
slot_flags = SLOT_BELT
/obj/item/weapon/nullrod/claymore/multiverse/attack(mob/living/carbon/M, mob/living/carbon/user)
/obj/item/nullrod/claymore/multiverse/attack(mob/living/carbon/M, mob/living/carbon/user)
force = rand(1, 30)
..()
/obj/item/weapon/nullrod/claymore/saber
/obj/item/nullrod/claymore/saber
name = "light energy sword"
hitsound = 'sound/weapons/blade1.ogg'
icon_state = "swordblue"
@@ -152,19 +152,19 @@
desc = "If you strike me down, I shall become more robust than you can possibly imagine."
slot_flags = SLOT_BELT
/obj/item/weapon/nullrod/claymore/saber/red
/obj/item/nullrod/claymore/saber/red
name = "dark energy sword"
icon_state = "swordred"
item_state = "swordred"
desc = "Woefully ineffective when used on steep terrain."
/obj/item/weapon/nullrod/claymore/saber/pirate
/obj/item/nullrod/claymore/saber/pirate
name = "nautical energy sword"
icon_state = "cutlass1"
item_state = "cutlass1"
desc = "Convincing HR that your religion involved piracy was no mean feat."
/obj/item/weapon/nullrod/sord
/obj/item/nullrod/sord
name = "\improper UNREAL SORD"
desc = "This thing is so unspeakably HOLY you are having a hard time even holding it."
icon_state = "sord"
@@ -177,7 +177,7 @@
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/weapon/nullrod/scythe
/obj/item/nullrod/scythe
icon_state = "scythe1"
item_state = "scythe1"
lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
@@ -190,7 +190,7 @@
sharpness = IS_SHARP
attack_verb = list("chopped", "sliced", "cut", "reaped")
/obj/item/weapon/nullrod/scythe/vibro
/obj/item/nullrod/scythe/vibro
icon_state = "hfrequency0"
item_state = "hfrequency1"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
@@ -201,7 +201,7 @@
hitsound = 'sound/weapons/rapierhit.ogg'
/obj/item/weapon/nullrod/scythe/spellblade
/obj/item/nullrod/scythe/spellblade
icon_state = "spellblade"
item_state = "spellblade"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
@@ -211,7 +211,7 @@
desc = "The blade grants the wielder nearly limitless power...if they can figure out how to turn it on, that is."
hitsound = 'sound/weapons/rapierhit.ogg'
/obj/item/weapon/nullrod/scythe/talking
/obj/item/nullrod/scythe/talking
icon_state = "talking_sword"
item_state = "talking_sword"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
@@ -222,7 +222,7 @@
hitsound = 'sound/weapons/rapierhit.ogg'
var/possessed = FALSE
/obj/item/weapon/nullrod/scythe/talking/attack_self(mob/living/user)
/obj/item/nullrod/scythe/talking/attack_self(mob/living/user)
if(possessed)
return
@@ -250,13 +250,13 @@
to_chat(user, "The blade is dormant. Maybe you can try again later.")
possessed = FALSE
/obj/item/weapon/nullrod/scythe/talking/Destroy()
/obj/item/nullrod/scythe/talking/Destroy()
for(var/mob/living/simple_animal/shade/S in contents)
to_chat(S, "You were destroyed!")
qdel(S)
return ..()
/obj/item/weapon/nullrod/hammmer
/obj/item/nullrod/hammmer
icon_state = "hammeron"
item_state = "hammeron"
lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi'
@@ -267,7 +267,7 @@
w_class = WEIGHT_CLASS_HUGE
attack_verb = list("smashed", "bashed", "hammered", "crunched")
/obj/item/weapon/nullrod/chainsaw
/obj/item/nullrod/chainsaw
name = "chainsaw hand"
desc = "Good? Bad? You're the guy with the chainsaw hand."
icon_state = "chainsaw_on"
@@ -280,7 +280,7 @@
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsawhit.ogg'
/obj/item/weapon/nullrod/clown
/obj/item/nullrod/clown
icon = 'icons/obj/wizard.dmi'
icon_state = "clownrender"
item_state = "render"
@@ -290,7 +290,7 @@
sharpness = IS_SHARP
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/weapon/nullrod/whip
/obj/item/nullrod/whip
name = "holy whip"
desc = "What a terrible night to be on Space Station 13."
icon_state = "chain"
@@ -301,7 +301,7 @@
attack_verb = list("whipped", "lashed")
hitsound = 'sound/weapons/chainhit.ogg'
/obj/item/weapon/nullrod/fedora
/obj/item/nullrod/fedora
name = "atheist's fedora"
desc = "The brim of the hat is as sharp as your wit. The edge would hurt almost as much as disproving the existence of God."
icon_state = "fedora"
@@ -315,7 +315,7 @@
sharpness = IS_SHARP
attack_verb = list("enlightened", "redpilled")
/obj/item/weapon/nullrod/armblade
/obj/item/nullrod/armblade
name = "dark blessing"
desc = "Particularly twisted dieties grant gifts of dubious value."
icon_state = "arm_blade"
@@ -326,7 +326,7 @@
w_class = WEIGHT_CLASS_HUGE
sharpness = IS_SHARP
/obj/item/weapon/nullrod/carp
/obj/item/nullrod/carp
name = "carp-sie plushie"
desc = "An adorable stuffed toy that resembles the god of all carp. The teeth look pretty sharp. Activate it to receive the blessing of Carp-Sie."
icon = 'icons/obj/toy.dmi'
@@ -337,14 +337,14 @@
hitsound = 'sound/weapons/bite.ogg'
var/used_blessing = FALSE
/obj/item/weapon/nullrod/carp/attack_self(mob/living/user)
/obj/item/nullrod/carp/attack_self(mob/living/user)
if(used_blessing)
else if(user.mind && (user.mind.isholy))
to_chat(user, "You are blessed by Carp-Sie. Wild space carp will no longer attack you.")
user.faction |= "carp"
used_blessing = TRUE
/obj/item/weapon/nullrod/claymore/bostaff //May as well make it a "claymore" and inherit the blocking
/obj/item/nullrod/claymore/bostaff //May as well make it a "claymore" and inherit the blocking
name = "monk's staff"
desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, it is now used to harass the clown."
w_class = WEIGHT_CLASS_BULKY
@@ -360,7 +360,7 @@
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
/obj/item/weapon/nullrod/tribal_knife
/obj/item/nullrod/tribal_knife
icon_state = "crysknife"
item_state = "crysknife"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
@@ -374,22 +374,22 @@
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
flags_2 = SLOWS_WHILE_IN_HAND_2
/obj/item/weapon/nullrod/tribal_knife/Initialize(mapload)
/obj/item/nullrod/tribal_knife/Initialize(mapload)
..()
/obj/item/weapon/nullrod/tribal_knife/New()
/obj/item/nullrod/tribal_knife/New()
..()
START_PROCESSING(SSobj, src)
/obj/item/weapon/nullrod/tribal_knife/Destroy()
/obj/item/nullrod/tribal_knife/Destroy()
STOP_PROCESSING(SSobj, src)
. = ..()
/obj/item/weapon/nullrod/tribal_knife/process()
/obj/item/nullrod/tribal_knife/process()
slowdown = rand(-2, 2)
/obj/item/weapon/nullrod/pitchfork
/obj/item/nullrod/pitchfork
icon_state = "pitchfork0"
lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi'
@@ -1,4 +1,4 @@
/obj/item/weapon/implant
/obj/item/implant
name = "implant"
icon = 'icons/obj/implants.dmi'
icon_state = "generic" //Shows up as the action button icon
@@ -12,16 +12,16 @@
flags_1 = DROPDEL_1
/obj/item/weapon/implant/proc/trigger(emote, mob/living/carbon/source)
/obj/item/implant/proc/trigger(emote, mob/living/carbon/source)
return
/obj/item/weapon/implant/proc/activate()
/obj/item/implant/proc/activate()
return
/obj/item/weapon/implant/ui_action_click()
/obj/item/implant/ui_action_click()
activate("action_button")
/obj/item/weapon/implant/proc/can_be_implanted_in(mob/living/target) // for human-only and other special requirements
/obj/item/implant/proc/can_be_implanted_in(mob/living/target) // for human-only and other special requirements
return TRUE
/mob/living/proc/can_be_implanted()
@@ -38,13 +38,13 @@
//What does the implant do upon injection?
//return 1 if the implant injects
//return 0 if there is no room for implant / it fails
/obj/item/weapon/implant/proc/implant(mob/living/target, mob/user, silent = 0)
/obj/item/implant/proc/implant(mob/living/target, mob/user, silent = 0)
LAZYINITLIST(target.implants)
if(!target.can_be_implanted() || !can_be_implanted_in(target))
return 0
for(var/X in target.implants)
if(istype(X, type))
var/obj/item/weapon/implant/imp_e = X
var/obj/item/implant/imp_e = X
if(!allow_multiple)
if(imp_e.uses < initial(imp_e.uses)*2)
if(uses == -1)
@@ -72,7 +72,7 @@
return 1
/obj/item/weapon/implant/proc/removed(mob/living/source, silent = 0, special = 0)
/obj/item/implant/proc/removed(mob/living/source, silent = 0, special = 0)
src.loc = null
imp_in = null
source.implants -= src
@@ -85,14 +85,14 @@
return 1
/obj/item/weapon/implant/Destroy()
/obj/item/implant/Destroy()
if(imp_in)
removed(imp_in)
return ..()
/obj/item/weapon/implant/proc/get_data()
/obj/item/implant/proc/get_data()
return "No information available"
/obj/item/weapon/implant/dropped(mob/user)
/obj/item/implant/dropped(mob/user)
. = 1
..()
@@ -1,4 +1,4 @@
/obj/item/weapon/implant/abductor
/obj/item/implant/abductor
name = "recall implant"
desc = "Returns you to the mothership."
icon = 'icons/obj/abductor.dmi'
@@ -8,7 +8,7 @@
var/obj/machinery/abductor/pad/home
var/cooldown = 30
/obj/item/weapon/implant/abductor/activate()
/obj/item/implant/abductor/activate()
if(cooldown == initial(cooldown))
home.Retrieve(imp_in,1)
cooldown = 0
@@ -16,13 +16,13 @@
else
to_chat(imp_in, "<span class='warning'>You must wait [30 - cooldown] seconds to use [src] again!</span>")
/obj/item/weapon/implant/abductor/process()
/obj/item/implant/abductor/process()
if(cooldown < initial(cooldown))
cooldown++
if(cooldown == initial(cooldown))
STOP_PROCESSING(SSobj, src)
/obj/item/weapon/implant/abductor/implant(mob/living/target, mob/user)
/obj/item/implant/abductor/implant(mob/living/target, mob/user)
if(..())
var/obj/machinery/abductor/console/console
if(ishuman(target))
@@ -37,7 +37,7 @@
home = console.pad
return 1
/obj/item/weapon/implant/abductor/proc/get_team_console(var/team)
/obj/item/implant/abductor/proc/get_team_console(var/team)
var/obj/machinery/abductor/console/console
for(var/obj/machinery/abductor/console/c in GLOB.machines)
if(c.team == team)
@@ -1,11 +1,11 @@
/obj/item/weapon/implant/chem
/obj/item/implant/chem
name = "chem implant"
desc = "Injects things."
icon_state = "reagents"
origin_tech = "materials=3;biotech=4"
container_type = OPENCONTAINER_1
/obj/item/weapon/implant/chem/get_data()
/obj/item/implant/chem/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Robust Corp MJ-420 Prisoner Management Implant<BR>
<b>Life:</b> Deactivates upon death but remains within the body.<BR>
@@ -21,20 +21,20 @@
<b>Integrity:</b> Implant will last so long as the subject is alive."}
return dat
/obj/item/weapon/implant/chem/New()
/obj/item/implant/chem/New()
..()
create_reagents(50)
GLOB.tracked_chem_implants += src
/obj/item/weapon/implant/chem/Destroy()
/obj/item/implant/chem/Destroy()
. = ..()
GLOB.tracked_chem_implants -= src
/obj/item/weapon/implant/chem/trigger(emote, mob/source)
/obj/item/implant/chem/trigger(emote, mob/source)
if(emote == "deathgasp")
activate(reagents.total_volume)
/obj/item/weapon/implant/chem/activate(cause)
/obj/item/implant/chem/activate(cause)
if(!cause || !imp_in)
return 0
var/mob/living/carbon/R = imp_in
@@ -50,13 +50,13 @@
qdel(src)
/obj/item/weapon/implantcase/chem
/obj/item/implantcase/chem
name = "implant case - 'Remote Chemical'"
desc = "A glass case containing a remote chemical implant."
imp_type = /obj/item/weapon/implant/chem
imp_type = /obj/item/implant/chem
/obj/item/weapon/implantcase/chem/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers/syringe) && imp)
/obj/item/implantcase/chem/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/reagent_containers/syringe) && imp)
W.afterattack(imp, user, TRUE, params)
return TRUE
else
@@ -1,23 +1,23 @@
/obj/item/weapon/implant/sad_trombone
/obj/item/implant/sad_trombone
name = "sad trombone implant"
activated = 0
/obj/item/weapon/implant/sad_trombone/get_data()
/obj/item/implant/sad_trombone/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Honk Co. Sad Trombone Implant<BR>
<b>Life:</b> Activates upon death.<BR>
"}
return dat
/obj/item/weapon/implant/sad_trombone/trigger(emote, mob/source)
/obj/item/implant/sad_trombone/trigger(emote, mob/source)
if(emote == "deathgasp")
playsound(loc, 'sound/misc/sadtrombone.ogg', 50, 0)
/obj/item/weapon/implanter/sad_trombone
/obj/item/implanter/sad_trombone
name = "implanter (sad_trombone)"
imp_type = /obj/item/weapon/implant/sad_trombone
imp_type = /obj/item/implant/sad_trombone
/obj/item/weapon/implantcase/sad_trombone
/obj/item/implantcase/sad_trombone
name = "implant case - 'Sad Trombone'"
desc = "A glass case containing a sad trombone implant."
imp_type = /obj/item/weapon/implant/sad_trombone
imp_type = /obj/item/implant/sad_trombone
@@ -1,23 +1,23 @@
//Exile implants will allow you to use the station gate, but not return home.
//This will allow security to exile badguys/for badguys to exile their kill targets
/obj/item/weapon/implant/exile
/obj/item/implant/exile
name = "exile implant"
desc = "Prevents you from returning from away missions"
origin_tech = "materials=2;biotech=3;magnets=2;bluespace=3"
activated = 0
/obj/item/weapon/implant/exile/get_data()
/obj/item/implant/exile/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Nanotrasen Employee Exile Implant<BR>
<b>Implant Details:</b> The onboard gateway system has been modified to reject entry by individuals containing this implant<BR>"}
return dat
/obj/item/weapon/implanter/exile
/obj/item/implanter/exile
name = "implanter (exile)"
imp_type = /obj/item/weapon/implant/exile
imp_type = /obj/item/implant/exile
/obj/item/weapon/implantcase/exile
/obj/item/implantcase/exile
name = "implant case - 'Exile'"
desc = "A glass case containing an exile implant."
imp_type = /obj/item/weapon/implant/exile
imp_type = /obj/item/implant/exile
@@ -1,4 +1,4 @@
/obj/item/weapon/implant/explosive
/obj/item/implant/explosive
name = "microbomb implant"
desc = "And boom goes the weasel."
icon_state = "explosive"
@@ -12,7 +12,7 @@
var/popup = FALSE // is the DOUWANNABLOWUP window open?
var/active = FALSE
/obj/item/weapon/implant/explosive/get_data()
/obj/item/implant/explosive/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Robust Corp RX-78 Employee Management Implant<BR>
<b>Life:</b> Activates upon death.<BR>
@@ -24,11 +24,11 @@
"}
return dat
/obj/item/weapon/implant/explosive/trigger(emote, mob/source)
/obj/item/implant/explosive/trigger(emote, mob/source)
if(emote == "deathgasp")
activate("death")
/obj/item/weapon/implant/explosive/activate(cause)
/obj/item/implant/explosive/activate(cause)
if(!cause || !imp_in || active)
return 0
if(cause == "action_button" && !popup)
@@ -54,10 +54,10 @@
return
timed_explosion()
/obj/item/weapon/implant/explosive/implant(mob/living/target)
/obj/item/implant/explosive/implant(mob/living/target)
for(var/X in target.implants)
if(istype(X, type))
var/obj/item/weapon/implant/explosive/imp_e = X
var/obj/item/implant/explosive/imp_e = X
imp_e.heavy += heavy
imp_e.medium += medium
imp_e.weak += weak
@@ -67,7 +67,7 @@
return ..()
/obj/item/weapon/implant/explosive/proc/timed_explosion()
/obj/item/implant/explosive/proc/timed_explosion()
imp_in.visible_message("<span class='warning'>[imp_in] starts beeping ominously!</span>")
playsound(loc, 'sound/items/timer.ogg', 30, 0)
sleep(delay*0.25)
@@ -85,7 +85,7 @@
imp_in.gib(1)
qdel(src)
/obj/item/weapon/implant/explosive/macro
/obj/item/implant/explosive/macro
name = "macrobomb implant"
desc = "And boom goes the weasel. And everything else nearby."
icon_state = "explosive"
@@ -95,14 +95,14 @@
heavy = 4
delay = 70
/obj/item/weapon/implant/explosive/macro/implant(mob/living/target)
/obj/item/implant/explosive/macro/implant(mob/living/target)
for(var/X in target.implants)
if(istype(X, type))
return 0
for(var/Y in target.implants)
if(istype(Y, /obj/item/weapon/implant/explosive))
var/obj/item/weapon/implant/explosive/imp_e = Y
if(istype(Y, /obj/item/implant/explosive))
var/obj/item/implant/explosive/imp_e = Y
heavy += imp_e.heavy
medium += imp_e.medium
weak += imp_e.weak
@@ -113,11 +113,11 @@
return ..()
/obj/item/weapon/implanter/explosive
/obj/item/implanter/explosive
name = "implanter (explosive)"
imp_type = /obj/item/weapon/implant/explosive
imp_type = /obj/item/implant/explosive
/obj/item/weapon/implantcase/explosive
/obj/item/implantcase/explosive
name = "implant case - 'Explosive'"
desc = "A glass case containing an explosive implant."
imp_type = /obj/item/weapon/implant/explosive
imp_type = /obj/item/implant/explosive
@@ -1,4 +1,4 @@
/obj/item/weapon/implant/freedom
/obj/item/implant/freedom
name = "freedom implant"
desc = "Use this to escape from those evil Red Shirts."
icon_state = "freedom"
@@ -7,7 +7,7 @@
uses = 4
/obj/item/weapon/implant/freedom/activate()
/obj/item/implant/freedom/activate()
uses--
to_chat(imp_in, "You feel a faint click.")
if(iscarbon(imp_in))
@@ -17,7 +17,7 @@
qdel(src)
/obj/item/weapon/implant/freedom/get_data()
/obj/item/implant/freedom/get_data()
var/dat = {"
<b>Implant Specifications:</b><BR>
<b>Name:</b> Freedom Beacon<BR>
@@ -34,11 +34,11 @@ No Implant Specifics"}
return dat
/obj/item/weapon/implanter/freedom
/obj/item/implanter/freedom
name = "implanter (freedom)"
imp_type = /obj/item/weapon/implant/freedom
imp_type = /obj/item/implant/freedom
/obj/item/weapon/implantcase/freedom
/obj/item/implantcase/freedom
name = "implant case - 'Freedom'"
desc = "A glass case containing a freedom implant."
imp_type = /obj/item/weapon/implant/freedom
imp_type = /obj/item/implant/freedom
@@ -1,15 +1,15 @@
/obj/item/weapon/implant/gang
/obj/item/implant/gang
name = "gang implant"
desc = "Makes you a gangster or such."
activated = 0
origin_tech = "materials=2;biotech=4;programming=4;syndicate=3"
var/datum/gang/gang
/obj/item/weapon/implant/gang/New(loc,var/setgang)
/obj/item/implant/gang/New(loc,var/setgang)
..()
gang = setgang
/obj/item/weapon/implant/gang/get_data()
/obj/item/implant/gang/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Criminal brainwash implant<BR>
<b>Life:</b> A few seconds after injection.<BR>
@@ -21,9 +21,9 @@
<b>Integrity:</b> Implant's EMP function will destroy itself in the process."}
return dat
/obj/item/weapon/implant/gang/implant(mob/living/target, mob/user, silent = 0)
/obj/item/implant/gang/implant(mob/living/target, mob/user, silent = 0)
if(..())
for(var/obj/item/weapon/implant/I in target.implants)
for(var/obj/item/implant/I in target.implants)
if(I != src)
qdel(I)
@@ -44,12 +44,12 @@
qdel(src)
return 0
/obj/item/weapon/implanter/gang
/obj/item/implanter/gang
name = "implanter (gang)"
/obj/item/weapon/implanter/gang/New(loc, gang)
/obj/item/implanter/gang/New(loc, gang)
if(!gang)
qdel(src)
return
imp = new /obj/item/weapon/implant/gang(src,gang)
imp = new /obj/item/implant/gang(src,gang)
..()
@@ -1,4 +1,4 @@
/obj/item/weapon/implant/krav_maga
/obj/item/implant/krav_maga
name = "krav maga implant"
desc = "Teaches you the arts of Krav Maga in 5 short instructional videos beamed directly into your eyeballs."
icon = 'icons/obj/wizard.dmi'
@@ -7,7 +7,7 @@
origin_tech = "materials=2;biotech=4;combat=5;syndicate=4"
var/datum/martial_art/krav_maga/style = new
/obj/item/weapon/implant/krav_maga/get_data()
/obj/item/implant/krav_maga/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Krav Maga Implant<BR>
<b>Life:</b> 4 hours after death of host<BR>
@@ -15,7 +15,7 @@
<b>Function:</b> Teaches even the clumsiest host the arts of Krav Maga."}
return dat
/obj/item/weapon/implant/krav_maga/activate()
/obj/item/implant/krav_maga/activate()
var/mob/living/carbon/human/H = imp_in
if(!ishuman(H))
return
@@ -26,12 +26,12 @@
else
style.teach(H,1)
/obj/item/weapon/implanter/krav_maga
/obj/item/implanter/krav_maga
name = "implanter (krav maga)"
imp_type = /obj/item/weapon/implant/krav_maga
imp_type = /obj/item/implant/krav_maga
/obj/item/weapon/implantcase/krav_maga
/obj/item/implantcase/krav_maga
name = "implant case - 'Krav Maga'"
desc = "A glass case containing an implant that can teach the user the arts of Krav Maga."
imp_type = /obj/item/weapon/implant/krav_maga
imp_type = /obj/item/implant/krav_maga
@@ -1,10 +1,10 @@
/obj/item/weapon/implant/mindshield
/obj/item/implant/mindshield
name = "mindshield implant"
desc = "Protects against brainwashing."
origin_tech = "materials=2;biotech=4;programming=4"
activated = 0
/obj/item/weapon/implant/mindshield/get_data()
/obj/item/implant/mindshield/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Nanotrasen Employee Management Implant<BR>
<b>Life:</b> Ten years.<BR>
@@ -17,7 +17,7 @@
return dat
/obj/item/weapon/implant/mindshield/implant(mob/living/target, mob/user, silent = 0)
/obj/item/implant/mindshield/implant(mob/living/target, mob/user, silent = 0)
if(..())
if((target.mind in (SSticker.mode.head_revolutionaries | SSticker.mode.get_gang_bosses())))
if(!silent)
@@ -42,18 +42,18 @@
return 1
return 0
/obj/item/weapon/implant/mindshield/removed(mob/target, silent = 0, special = 0)
/obj/item/implant/mindshield/removed(mob/target, silent = 0, special = 0)
if(..())
if(target.stat != DEAD && !silent)
to_chat(target, "<span class='boldnotice'>Your mind suddenly feels terribly vulnerable. You are no longer safe from brainwashing.</span>")
return 1
return 0
/obj/item/weapon/implanter/mindshield
/obj/item/implanter/mindshield
name = "implanter (mindshield)"
imp_type = /obj/item/weapon/implant/mindshield
imp_type = /obj/item/implant/mindshield
/obj/item/weapon/implantcase/mindshield
/obj/item/implantcase/mindshield
name = "implant case - 'Mindshield'"
desc = "A glass case containing a mindshield implant."
imp_type = /obj/item/weapon/implant/mindshield
imp_type = /obj/item/implant/mindshield
@@ -1,11 +1,11 @@
/obj/item/weapon/implant/weapons_auth
/obj/item/implant/weapons_auth
name = "firearms authentication implant"
desc = "Lets you shoot your guns"
icon_state = "auth"
origin_tech = "magnets=2;programming=7;biotech=5;syndicate=5"
activated = 0
/obj/item/weapon/implant/weapons_auth/get_data()
/obj/item/implant/weapons_auth/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Firearms Authentication Implant<BR>
<b>Life:</b> 4 hours after death of host<BR>
@@ -14,14 +14,14 @@
return dat
/obj/item/weapon/implant/adrenalin
/obj/item/implant/adrenalin
name = "adrenal implant"
desc = "Removes all stuns."
icon_state = "adrenal"
origin_tech = "materials=2;biotech=4;combat=3;syndicate=4"
uses = 3
/obj/item/weapon/implant/adrenalin/get_data()
/obj/item/implant/adrenalin/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Cybersun Industries Adrenaline Implant<BR>
<b>Life:</b> Five days.<BR>
@@ -32,7 +32,7 @@
<b>Integrity:</b> Implant can only be used three times before reserves are depleted."}
return dat
/obj/item/weapon/implant/adrenalin/activate()
/obj/item/implant/adrenalin/activate()
uses--
to_chat(imp_in, "<span class='notice'>You feel a sudden surge of energy!</span>")
imp_in.SetStun(0)
@@ -49,14 +49,14 @@
qdel(src)
/obj/item/weapon/implant/emp
/obj/item/implant/emp
name = "emp implant"
desc = "Triggers an EMP."
icon_state = "emp"
origin_tech = "biotech=3;magnets=4;syndicate=1"
uses = 3
/obj/item/weapon/implant/emp/activate()
/obj/item/implant/emp/activate()
uses--
empulse(imp_in, 3, 5)
if(!uses)
@@ -65,12 +65,12 @@
//Health Tracker Implant
/obj/item/weapon/implant/health
/obj/item/implant/health
name = "health implant"
activated = 0
var/healthstring = ""
/obj/item/weapon/implant/health/proc/sensehealth()
/obj/item/implant/health/proc/sensehealth()
if (!imp_in)
return "ERROR"
else
@@ -1,27 +1,27 @@
/obj/item/weapon/storage/internal/implant
/obj/item/storage/internal/implant
name = "bluespace pocket"
max_w_class = WEIGHT_CLASS_NORMAL
max_combined_w_class = 6
cant_hold = list(/obj/item/weapon/disk/nuclear)
cant_hold = list(/obj/item/disk/nuclear)
silent = 1
/obj/item/weapon/implant/storage
/obj/item/implant/storage
name = "storage implant"
desc = "Stores up to two big items in a bluespace pocket."
icon_state = "storage"
origin_tech = "materials=2;magnets=4;bluespace=5;syndicate=4"
item_color = "r"
var/obj/item/weapon/storage/internal/implant/storage
var/obj/item/storage/internal/implant/storage
/obj/item/weapon/implant/storage/New()
/obj/item/implant/storage/New()
..()
storage = new /obj/item/weapon/storage/internal/implant(src)
storage = new /obj/item/storage/internal/implant(src)
/obj/item/weapon/implant/storage/activate()
/obj/item/implant/storage/activate()
storage.MouseDrop(imp_in)
/obj/item/weapon/implant/storage/removed(source, silent = 0, special = 0)
/obj/item/implant/storage/removed(source, silent = 0, special = 0)
if(..())
if(!special)
storage.close_all()
@@ -29,10 +29,10 @@
storage.remove_from_storage(I, get_turf(source))
return 1
/obj/item/weapon/implant/storage/implant(mob/living/target, mob/user, silent = 0)
/obj/item/implant/storage/implant(mob/living/target, mob/user, silent = 0)
for(var/X in target.implants)
if(istype(X, type))
var/obj/item/weapon/implant/storage/imp_e = X
var/obj/item/implant/storage/imp_e = X
imp_e.storage.storage_slots += storage.storage_slots
imp_e.storage.max_combined_w_class += storage.max_combined_w_class
imp_e.storage.contents += storage.contents
@@ -45,6 +45,6 @@
return ..()
/obj/item/weapon/implanter/storage
/obj/item/implanter/storage
name = "implanter (storage)"
imp_type = /obj/item/weapon/implant/storage
imp_type = /obj/item/implant/storage
@@ -1,24 +1,24 @@
/obj/item/weapon/implant/tracking
/obj/item/implant/tracking
name = "tracking implant"
desc = "Track with this."
activated = 0
origin_tech = "materials=2;magnets=2;programming=2;biotech=2"
/obj/item/weapon/implant/tracking/New()
/obj/item/implant/tracking/New()
..()
GLOB.tracked_implants += src
/obj/item/weapon/implant/tracking/Destroy()
/obj/item/implant/tracking/Destroy()
. = ..()
GLOB.tracked_implants -= src
/obj/item/weapon/implanter/tracking
imp_type = /obj/item/weapon/implant/tracking
/obj/item/implanter/tracking
imp_type = /obj/item/implant/tracking
/obj/item/weapon/implanter/tracking/gps
/obj/item/implanter/tracking/gps
imp_type = /obj/item/device/gps/mining/internal
/obj/item/weapon/implant/tracking/get_data()
/obj/item/implant/tracking/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Tracking Beacon<BR>
<b>Life:</b> 10 minutes after death of host<BR>
@@ -35,7 +35,7 @@
return dat
/obj/item/weapon/implantcase/track
/obj/item/implantcase/track
name = "implant case - 'Tracking'"
desc = "A glass case containing a tracking implant."
imp_type = /obj/item/weapon/implant/tracking
imp_type = /obj/item/implant/tracking
@@ -1,4 +1,4 @@
/obj/item/weapon/implantcase
/obj/item/implantcase
name = "implant case"
desc = "A glass case containing an implant."
icon = 'icons/obj/items.dmi'
@@ -11,11 +11,11 @@
w_class = WEIGHT_CLASS_TINY
origin_tech = "materials=1;biotech=2"
materials = list(MAT_GLASS=500)
var/obj/item/weapon/implant/imp = null
var/obj/item/implant/imp = null
var/imp_type
/obj/item/weapon/implantcase/update_icon()
/obj/item/implantcase/update_icon()
if(imp)
icon_state = "implantcase-[imp.item_color]"
origin_tech = imp.origin_tech
@@ -26,8 +26,8 @@
reagents = null
/obj/item/weapon/implantcase/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/pen))
/obj/item/implantcase/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/pen))
var/t = stripped_input(user, "What would you like the label to be?", name, null)
if(user.get_active_held_item() != W)
return
@@ -37,8 +37,8 @@
name = "implant case - '[t]'"
else
name = "implant case"
else if(istype(W, /obj/item/weapon/implanter))
var/obj/item/weapon/implanter/I = W
else if(istype(W, /obj/item/implanter))
var/obj/item/implanter/I = W
if(I.imp)
if(imp || I.imp.imp_in)
return
@@ -60,24 +60,24 @@
else
return ..()
/obj/item/weapon/implantcase/Initialize(mapload)
/obj/item/implantcase/Initialize(mapload)
..()
if(imp_type)
imp = new imp_type(src)
update_icon()
/obj/item/weapon/implantcase/tracking
/obj/item/implantcase/tracking
name = "implant case - 'Tracking'"
desc = "A glass case containing a tracking implant."
imp_type = /obj/item/weapon/implant/tracking
imp_type = /obj/item/implant/tracking
/obj/item/weapon/implantcase/weapons_auth
/obj/item/implantcase/weapons_auth
name = "implant case - 'Firearms Authentication'"
desc = "A glass case containing a firearms authentication implant."
imp_type = /obj/item/weapon/implant/weapons_auth
imp_type = /obj/item/implant/weapons_auth
/obj/item/weapon/implantcase/adrenaline
/obj/item/implantcase/adrenaline
name = "implant case - 'Adrenaline'"
desc = "A glass case containing an adrenaline implant."
imp_type = /obj/item/weapon/implant/adrenalin
imp_type = /obj/item/implant/adrenalin
@@ -14,7 +14,7 @@
var/max_implants = 5
var/injection_cooldown = 600
var/replenish_cooldown = 6000
var/implant_type = /obj/item/weapon/implant/mindshield
var/implant_type = /obj/item/implant/mindshield
var/auto_inject = FALSE
var/auto_replenish = TRUE
var/special = FALSE
@@ -83,7 +83,7 @@
update_icon()
/obj/machinery/implantchair/proc/implant_action(mob/living/M)
var/obj/item/weapon/implant/I = new implant_type
var/obj/item/implant/I = new implant_type
if(I.implant(M))
visible_message("<span class='warning'>[M] has been implanted by the [name].</span>")
return 1
@@ -1,4 +1,4 @@
/obj/item/weapon/implanter
/obj/item/implanter
name = "implanter"
desc = "A sterile automatic implant injector."
icon = 'icons/obj/items.dmi'
@@ -11,11 +11,11 @@
w_class = WEIGHT_CLASS_SMALL
origin_tech = "materials=2;biotech=3"
materials = list(MAT_METAL=600, MAT_GLASS=200)
var/obj/item/weapon/implant/imp = null
var/obj/item/implant/imp = null
var/imp_type = null
/obj/item/weapon/implanter/update_icon()
/obj/item/implanter/update_icon()
if(imp)
icon_state = "implanter1"
origin_tech = imp.origin_tech
@@ -24,7 +24,7 @@
origin_tech = initial(origin_tech)
/obj/item/weapon/implanter/attack(mob/living/M, mob/user)
/obj/item/implanter/attack(mob/living/M, mob/user)
if(!istype(M))
return
if(user && imp)
@@ -44,8 +44,8 @@
else
to_chat(user, "<span class='warning'>[src] fails to implant [M].</span>")
/obj/item/weapon/implanter/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/pen))
/obj/item/implanter/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/pen))
var/t = stripped_input(user, "What would you like the label to be?", name, null)
if(user.get_active_held_item() != W)
return
@@ -58,16 +58,16 @@
else
return ..()
/obj/item/weapon/implanter/Initialize(mapload)
/obj/item/implanter/Initialize(mapload)
..()
if(imp_type)
imp = new imp_type(src)
update_icon()
/obj/item/weapon/implanter/adrenalin
/obj/item/implanter/adrenalin
name = "implanter (adrenalin)"
imp_type = /obj/item/weapon/implant/adrenalin
imp_type = /obj/item/implant/adrenalin
/obj/item/weapon/implanter/emp
/obj/item/implanter/emp
name = "implanter (EMP)"
imp_type = /obj/item/weapon/implant/emp
imp_type = /obj/item/implant/emp
@@ -1,4 +1,4 @@
/obj/item/weapon/implantpad
/obj/item/implantpad
name = "implantpad"
desc = "Used to modify implants."
icon = 'icons/obj/items.dmi'
@@ -9,19 +9,19 @@
throw_speed = 3
throw_range = 5
w_class = WEIGHT_CLASS_SMALL
var/obj/item/weapon/implantcase/case = null
var/obj/item/implantcase/case = null
var/broadcasting = null
var/listening = 1
/obj/item/weapon/implantpad/update_icon()
/obj/item/implantpad/update_icon()
if(case)
icon_state = "implantpad-1"
else
icon_state = "implantpad-0"
/obj/item/weapon/implantpad/attack_hand(mob/user)
/obj/item/implantpad/attack_hand(mob/user)
if(case && user.is_holding(src))
user.put_in_active_hand(case)
@@ -34,8 +34,8 @@
return ..()
/obj/item/weapon/implantpad/attackby(obj/item/weapon/implantcase/C, mob/user, params)
if(istype(C, /obj/item/weapon/implantcase))
/obj/item/implantpad/attackby(obj/item/implantcase/C, mob/user, params)
if(istype(C, /obj/item/implantcase))
if(!case)
if(!user.transferItemToLoc(C, src))
return
@@ -44,12 +44,12 @@
else
return ..()
/obj/item/weapon/implantpad/attack_self(mob/user)
/obj/item/implantpad/attack_self(mob/user)
user.set_machine(src)
var/dat = "<B>Implant Mini-Computer:</B><HR>"
if(case)
if(case.imp)
if(istype(case.imp, /obj/item/weapon/implant))
if(istype(case.imp, /obj/item/implant))
dat += case.imp.get_data()
else
dat += "The implant casing is empty."
@@ -59,7 +59,7 @@
onclose(user, "implantpad")
/obj/item/weapon/implantpad/Topic(href, href_list)
/obj/item/implantpad/Topic(href, href_list)
..()
if(usr.stat)
return
@@ -1,4 +1,4 @@
/obj/item/weapon/implant/uplink
/obj/item/implant/uplink
name = "uplink implant"
desc = "Sneeki breeki."
icon = 'icons/obj/radio.dmi'
@@ -8,15 +8,15 @@
origin_tech = "materials=4;magnets=4;programming=4;biotech=4;syndicate=5;bluespace=5"
var/starting_tc = 0
/obj/item/weapon/implant/uplink/New()
/obj/item/implant/uplink/New()
hidden_uplink = new(src)
hidden_uplink.telecrystals = starting_tc
..()
/obj/item/weapon/implant/uplink/implant(mob/living/target, mob/user, silent = 0)
/obj/item/implant/uplink/implant(mob/living/target, mob/user, silent = 0)
for(var/X in target.implants)
if(istype(X, type))
var/obj/item/weapon/implant/imp_e = X
var/obj/item/implant/imp_e = X
imp_e.hidden_uplink.telecrystals += hidden_uplink.telecrystals
qdel(src)
return 1
@@ -26,17 +26,17 @@
return 1
return 0
/obj/item/weapon/implant/uplink/activate()
/obj/item/implant/uplink/activate()
if(hidden_uplink)
hidden_uplink.interact(usr)
/obj/item/weapon/implanter/uplink
/obj/item/implanter/uplink
name = "implanter (uplink)"
imp_type = /obj/item/weapon/implant/uplink
imp_type = /obj/item/implant/uplink
/obj/item/weapon/implanter/uplink/precharged
/obj/item/implanter/uplink/precharged
name = "implanter (precharged uplink)"
imp_type = /obj/item/weapon/implant/uplink/precharged
imp_type = /obj/item/implant/uplink/precharged
/obj/item/weapon/implant/uplink/precharged
/obj/item/implant/uplink/precharged
starting_tc = 10
+22 -22
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/inducer
/obj/item/inducer
name = "inducer"
desc = "A tool for inductively charging internal power cells."
icon = 'icons/obj/tools.dmi'
@@ -10,31 +10,31 @@
force = 7
var/powertransfer = 1000
var/opened = FALSE
var/cell_type = /obj/item/weapon/stock_parts/cell/high
var/obj/item/weapon/stock_parts/cell/cell
var/cell_type = /obj/item/stock_parts/cell/high
var/obj/item/stock_parts/cell/cell
var/recharging = FALSE
/obj/item/weapon/inducer/Initialize()
/obj/item/inducer/Initialize()
. = ..()
if(!cell && cell_type)
cell = new cell_type
/obj/item/weapon/inducer/proc/induce(obj/item/weapon/stock_parts/cell/target, coefficient)
/obj/item/inducer/proc/induce(obj/item/stock_parts/cell/target, coefficient)
var/totransfer = min(cell.charge,(powertransfer * coefficient))
var/transferred = target.give(totransfer)
cell.use(transferred)
cell.update_icon()
target.update_icon()
/obj/item/weapon/inducer/get_cell()
/obj/item/inducer/get_cell()
return cell
/obj/item/weapon/inducer/emp_act(severity)
/obj/item/inducer/emp_act(severity)
..()
if(cell)
cell.emp_act(severity)
/obj/item/weapon/inducer/attack_obj(obj/O, mob/living/carbon/user)
/obj/item/inducer/attack_obj(obj/O, mob/living/carbon/user)
if(user.a_intent == INTENT_HARM)
return ..()
@@ -46,7 +46,7 @@
return ..()
/obj/item/weapon/inducer/proc/cantbeused(mob/user)
/obj/item/inducer/proc/cantbeused(mob/user)
if(!user.IsAdvancedToolUser())
to_chat(user, "<span class='warning'>You don't have the dexterity to use \the [src]!</span>")
return TRUE
@@ -61,8 +61,8 @@
return FALSE
/obj/item/weapon/inducer/attackby(obj/item/weapon/W, mob/user)
if(istype(W, /obj/item/weapon/screwdriver))
/obj/item/inducer/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/screwdriver))
playsound(src, W.usesound, 50, 1)
if(!opened)
to_chat(user, "<span class='notice'>You unscrew the battery compartment.</span>")
@@ -74,7 +74,7 @@
opened = FALSE
update_icon()
return
if(istype(W, /obj/item/weapon/stock_parts/cell))
if(istype(W, /obj/item/stock_parts/cell))
if(opened)
if(!cell)
if(!user.transferItemToLoc(W, src))
@@ -95,16 +95,16 @@
return ..()
/obj/item/weapon/inducer/proc/recharge(atom/movable/A, mob/user)
/obj/item/inducer/proc/recharge(atom/movable/A, mob/user)
if(recharging)
return TRUE
else
recharging = TRUE
var/obj/item/weapon/stock_parts/cell/C = A.get_cell()
var/obj/item/weapon/gun/energy/E
var/obj/item/stock_parts/cell/C = A.get_cell()
var/obj/item/gun/energy/E
var/obj/O
var/coefficient = 1
if(istype(A, /obj/item/weapon/gun/energy))
if(istype(A, /obj/item/gun/energy))
coefficient = 0.075 // 14 loops to recharge an egun from 0-1000
E = A
if(istype(A, /obj))
@@ -133,7 +133,7 @@
recharging = FALSE
/obj/item/weapon/inducer/attack(mob/M, mob/user)
/obj/item/inducer/attack(mob/M, mob/user)
if(user.a_intent == INTENT_HARM)
return ..()
@@ -145,7 +145,7 @@
return ..()
/obj/item/weapon/inducer/attack_self(mob/user)
/obj/item/inducer/attack_self(mob/user)
if(opened && cell)
user.visible_message("[user] removes \the [cell] from \the [src]!","<span class='notice'>You remove \the [cell].</span>")
cell.update_icon()
@@ -154,7 +154,7 @@
update_icon()
/obj/item/weapon/inducer/examine(mob/living/M)
/obj/item/inducer/examine(mob/living/M)
..()
if(cell)
to_chat(M, "<span class='notice'>It's display shows: [cell.charge]W</span>")
@@ -163,7 +163,7 @@
if(opened)
to_chat(M,"<span class='notice'>It's battery compartment is open.</span>")
/obj/item/weapon/inducer/update_icon()
/obj/item/inducer/update_icon()
cut_overlays()
if(opened)
if(!cell)
@@ -171,7 +171,7 @@
else
add_overlay("inducer-bat")
/obj/item/weapon/inducer/sci
/obj/item/inducer/sci
icon_state = "inducer-sci"
item_state = "inducer-sci"
desc = "A tool for inductively charging internal power cells. This one has a science color scheme, and is less potent than it's engineering counterpart."
@@ -179,7 +179,7 @@
powertransfer = 500
opened = TRUE
/obj/item/weapon/inducer/sci/Initialize()
/obj/item/inducer/sci/Initialize()
. = ..()
update_icon()
+15 -15
View File
@@ -8,13 +8,13 @@
* Rolling Pins
*/
/obj/item/weapon/kitchen
/obj/item/kitchen
icon = 'icons/obj/kitchen.dmi'
origin_tech = "materials=1"
lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
/obj/item/weapon/kitchen/fork
/obj/item/kitchen/fork
name = "fork"
desc = "Pointy."
icon_state = "fork"
@@ -30,7 +30,7 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30)
var/datum/reagent/forkload //used to eat omelette
/obj/item/weapon/kitchen/fork/attack(mob/living/carbon/M, mob/living/carbon/user)
/obj/item/kitchen/fork/attack(mob/living/carbon/M, mob/living/carbon/user)
if(!istype(M))
return ..()
@@ -52,7 +52,7 @@
return ..()
/obj/item/weapon/kitchen/knife
/obj/item/kitchen/knife
name = "kitchen knife"
icon_state = "knife"
desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come."
@@ -69,7 +69,7 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50)
var/bayonet = FALSE //Can this be attached to a gun?
/obj/item/weapon/kitchen/knife/attack(mob/living/carbon/M, mob/living/carbon/user)
/obj/item/kitchen/knife/attack(mob/living/carbon/M, mob/living/carbon/user)
if(user.zone_selected == "eyes")
if(user.disabilities & CLUMSY && prob(50))
M = user
@@ -77,13 +77,13 @@
else
return ..()
/obj/item/weapon/kitchen/knife/suicide_act(mob/user)
/obj/item/kitchen/knife/suicide_act(mob/user)
user.visible_message(pick("<span class='suicide'>[user] is slitting [user.p_their()] wrists with the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.</span>", \
"<span class='suicide'>[user] is slitting [user.p_their()] throat with the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.</span>", \
"<span class='suicide'>[user] is slitting [user.p_their()] stomach open with the [src.name]! It looks like [user.p_theyre()] trying to commit seppuku.</span>"))
return (BRUTELOSS)
/obj/item/weapon/kitchen/knife/ritual
/obj/item/kitchen/knife/ritual
name = "ritual knife"
desc = "The unearthly energies that once powered this blade are now dormant."
icon = 'icons/obj/wizard.dmi'
@@ -91,7 +91,7 @@
item_state = "knife"
w_class = WEIGHT_CLASS_NORMAL
/obj/item/weapon/kitchen/knife/butcher
/obj/item/kitchen/knife/butcher
name = "butcher's cleaver"
icon_state = "butch"
desc = "A huge thing used for chopping and chopping up meat. This includes clowns and clown by-products."
@@ -102,7 +102,7 @@
attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
w_class = WEIGHT_CLASS_NORMAL
/obj/item/weapon/kitchen/knife/combat
/obj/item/kitchen/knife/combat
name = "combat knife"
icon_state = "buckknife"
item_state = "knife"
@@ -113,7 +113,7 @@
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut")
bayonet = TRUE
/obj/item/weapon/kitchen/knife/combat/survival
/obj/item/kitchen/knife/combat/survival
name = "survival knife"
icon_state = "survivalknife"
item_state = "knife"
@@ -122,7 +122,7 @@
throwforce = 15
bayonet = TRUE
/obj/item/weapon/kitchen/knife/combat/bone
/obj/item/kitchen/knife/combat/bone
name = "bone dagger"
item_state = "bone_dagger"
icon_state = "bone_dagger"
@@ -133,14 +133,14 @@
throwforce = 15
materials = list()
/obj/item/weapon/kitchen/knife/combat/cyborg
/obj/item/kitchen/knife/combat/cyborg
name = "cyborg knife"
icon = 'icons/obj/items_cyborg.dmi'
icon_state = "knife"
desc = "A cyborg-mounted plasteel knife. Extremely sharp and durable."
origin_tech = null
/obj/item/weapon/kitchen/knife/carrotshiv
/obj/item/kitchen/knife/carrotshiv
name = "carrot shiv"
icon_state = "carrotshiv"
item_state = "carrotshiv"
@@ -154,7 +154,7 @@
attack_verb = list("shanked", "shivved")
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
/obj/item/weapon/kitchen/rollingpin
/obj/item/kitchen/rollingpin
name = "rolling pin"
desc = "Used to knock out the Bartender."
icon_state = "rolling_pin"
@@ -165,4 +165,4 @@
w_class = WEIGHT_CLASS_NORMAL
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
/* Trays moved to /obj/item/weapon/storage/bag */
/* Trays moved to /obj/item/storage/bag */
+23 -23
View File
@@ -1,12 +1,12 @@
/*********************MANUALS (BOOKS)***********************/
//Oh god what the fuck I am not good at computer
/obj/item/weapon/book/manual
/obj/item/book/manual
icon = 'icons/obj/library.dmi'
due_date = 0 // Game time in 1/10th seconds
unique = 1 // 0 - Normal book, 1 - Should not be treated as normal book, unable to be copied, unable to be modified
/obj/item/weapon/book/manual/engineering_particle_accelerator
/obj/item/book/manual/engineering_particle_accelerator
name = "Particle Accelerator User's Guide"
icon_state ="bookParticleAccelerator"
author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
@@ -47,7 +47,7 @@
</html>"}
/obj/item/weapon/book/manual/engineering_singularity_safety
/obj/item/book/manual/engineering_singularity_safety
name = "Singularity Safety in Special Circumstances"
icon_state ="bookEngineeringSingularitySafety"
author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
@@ -95,7 +95,7 @@
</html>
"}
/obj/item/weapon/book/manual/hydroponics_pod_people
/obj/item/book/manual/hydroponics_pod_people
name = "The Human Harvest - From seed to market"
icon_state ="bookHydroponicsPodPeople"
author = "Farmer John"
@@ -130,7 +130,7 @@
</html>
"}
/obj/item/weapon/book/manual/medical_cloning
/obj/item/book/manual/medical_cloning
name = "Cloning techniques of the 26th century"
icon_state ="bookCloning"
author = "Medical Journal, volume 3" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
@@ -208,7 +208,7 @@
"}
/obj/item/weapon/book/manual/ripley_build_and_repair
/obj/item/book/manual/ripley_build_and_repair
name = "APLU \"Ripley\" Construction and Operation Manual"
icon_state ="book"
author = "Weyland-Yutani Corp" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
@@ -283,7 +283,7 @@
Coming soon...
"}
/obj/item/weapon/book/manual/experimentor
/obj/item/book/manual/experimentor
name = "Mentoring your Experiments"
icon_state = "rdbook"
author = "Dr. H.P. Kritz"
@@ -415,7 +415,7 @@
</html>
"}
/obj/item/weapon/book/manual/research_and_development
/obj/item/book/manual/research_and_development
name = "Research and Development 101"
icon_state = "rdbook"
author = "Dr. L. Ight"
@@ -465,7 +465,7 @@
"}
/obj/item/weapon/book/manual/robotics_cyborgs
/obj/item/book/manual/robotics_cyborgs
name = "Cyborgs for Dummies"
icon_state = "borgbook"
author = "XISC"
@@ -658,7 +658,7 @@
/obj/item/weapon/book/manual/chef_recipes
/obj/item/book/manual/chef_recipes
name = "Chef Recipes"
icon_state = "cooked_book"
author = "Lord Frenrir Cageth"
@@ -740,7 +740,7 @@
"}
/obj/item/weapon/book/manual/barman_recipes
/obj/item/book/manual/barman_recipes
name = "Barman Recipes"
icon_state = "barbook"
author = "Sir John Rose"
@@ -793,7 +793,7 @@
"}
/obj/item/weapon/book/manual/detective
/obj/item/book/manual/detective
name = "The Film Noir: Proper Procedures for Investigations"
icon_state ="bookDetective"
author = "Nanotrasen"
@@ -834,7 +834,7 @@
</body>
</html>"}
/obj/item/weapon/book/manual/nuclear
/obj/item/book/manual/nuclear
name = "Fission Mailed: Nuclear Sabotage 101"
icon_state ="bookNuclear"
author = "Syndicate"
@@ -872,16 +872,16 @@
// Wiki books that are linked to the configured wiki link.
// A book that links to the wiki
/obj/item/weapon/book/manual/wiki
/obj/item/book/manual/wiki
var/page_link = ""
window_size = "970x710"
/obj/item/weapon/book/manual/wiki/attack_self()
/obj/item/book/manual/wiki/attack_self()
if(!dat)
initialize_wikibook()
..()
/obj/item/weapon/book/manual/wiki/proc/initialize_wikibook()
/obj/item/book/manual/wiki/proc/initialize_wikibook()
if(config.wikiurl)
dat = {"
@@ -907,28 +907,28 @@
"}
/obj/item/weapon/book/manual/wiki/chemistry
/obj/item/book/manual/wiki/chemistry
name = "Chemistry Textbook"
icon_state ="chemistrybook"
author = "Nanotrasen"
title = "Chemistry Textbook"
page_link = "Guide_to_chemistry"
/obj/item/weapon/book/manual/wiki/engineering_construction
/obj/item/book/manual/wiki/engineering_construction
name = "Station Repairs and Construction"
icon_state ="bookEngineering"
author = "Engineering Encyclopedia"
title = "Station Repairs and Construction"
page_link = "Guide_to_construction"
/obj/item/weapon/book/manual/wiki/engineering_guide
/obj/item/book/manual/wiki/engineering_guide
name = "Engineering Textbook"
icon_state ="bookEngineering2"
author = "Engineering Encyclopedia"
title = "Engineering Textbook"
page_link = "Guide_to_engineering"
/obj/item/weapon/book/manual/wiki/security_space_law
/obj/item/book/manual/wiki/security_space_law
name = "Space Law"
desc = "A set of Nanotrasen guidelines for keeping law and order on their space stations."
icon_state = "bookSpaceLaw"
@@ -936,21 +936,21 @@
title = "Space Law"
page_link = "Space_Law"
/obj/item/weapon/book/manual/wiki/infections
/obj/item/book/manual/wiki/infections
name = "Infections - Making your own pandemic!"
icon_state = "bookInfections"
author = "Infections Encyclopedia"
title = "Infections - Making your own pandemic!"
page_link = "Infections"
/obj/item/weapon/book/manual/wiki/telescience
/obj/item/book/manual/wiki/telescience
name = "Teleportation Science - Bluespace for dummies!"
icon_state = "book7"
author = "University of Bluespace"
title = "Teleportation Science - Bluespace for dummies!"
page_link = "Guide_to_telescience"
/obj/item/weapon/book/manual/wiki/engineering_hacking
/obj/item/book/manual/wiki/engineering_hacking
name = "Hacking"
icon_state ="bookHacking"
author = "Engineering Encyclopedia"
+33 -33
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/melee/transforming/energy
/obj/item/melee/transforming/energy
hitsound_on = 'sound/weapons/blade1.ogg'
heat = 3500
max_integrity = 200
@@ -6,30 +6,30 @@
resistance_flags = FIRE_PROOF
var/brightness_on = 3
/obj/item/weapon/melee/transforming/energy/Initialize()
/obj/item/melee/transforming/energy/Initialize()
. = ..()
if(active)
set_light(brightness_on)
START_PROCESSING(SSobj, src)
/obj/item/weapon/melee/transforming/energy/Destroy()
/obj/item/melee/transforming/energy/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/weapon/melee/transforming/energy/suicide_act(mob/user)
/obj/item/melee/transforming/energy/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku!</span>")
return (BRUTELOSS|FIRELOSS)
/obj/item/weapon/melee/transforming/energy/add_blood(list/blood_dna)
/obj/item/melee/transforming/energy/add_blood(list/blood_dna)
return 0
/obj/item/weapon/melee/transforming/energy/is_sharp()
/obj/item/melee/transforming/energy/is_sharp()
return active * sharpness
/obj/item/weapon/melee/transforming/energy/process()
/obj/item/melee/transforming/energy/process()
open_flame()
/obj/item/weapon/melee/transforming/energy/transform_weapon(mob/living/user, supress_message_text)
/obj/item/melee/transforming/energy/transform_weapon(mob/living/user, supress_message_text)
. = ..()
if(.)
if(active)
@@ -41,10 +41,10 @@
STOP_PROCESSING(SSobj, src)
set_light(0)
/obj/item/weapon/melee/transforming/energy/is_hot()
/obj/item/melee/transforming/energy/is_hot()
return active * heat
/obj/item/weapon/melee/transforming/energy/ignition_effect(atom/A, mob/user)
/obj/item/melee/transforming/energy/ignition_effect(atom/A, mob/user)
if(!active)
return ""
@@ -57,7 +57,7 @@
playsound(loc, hitsound, get_clamped_volume(), 1, -1)
add_fingerprint(user)
/obj/item/weapon/melee/transforming/energy/axe
/obj/item/melee/transforming/energy/axe
name = "energy axe"
desc = "An energized battle axe."
icon_state = "axe0"
@@ -79,11 +79,11 @@
attack_verb_on = list()
light_color = "#40ceff"
/obj/item/weapon/melee/transforming/energy/axe/suicide_act(mob/user)
/obj/item/melee/transforming/energy/axe/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] swings [src] towards [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (BRUTELOSS|FIRELOSS)
/obj/item/weapon/melee/transforming/energy/sword
/obj/item/melee/transforming/energy/sword
name = "energy sword"
desc = "May the force be within you."
icon_state = "sword0"
@@ -102,29 +102,29 @@
origin_tech = "combat=3;magnets=4;syndicate=4"
block_chance = 50
/obj/item/weapon/melee/transforming/energy/sword/transform_weapon(mob/living/user, supress_message_text)
/obj/item/melee/transforming/energy/sword/transform_weapon(mob/living/user, supress_message_text)
. = ..()
if(. && active && item_color)
icon_state = "sword[item_color]"
/obj/item/weapon/melee/transforming/energy/sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/melee/transforming/energy/sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(active)
return ..()
return 0
/obj/item/weapon/melee/transforming/energy/sword/cyborg
/obj/item/melee/transforming/energy/sword/cyborg
var/hitcost = 50
/obj/item/weapon/melee/transforming/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R)
/obj/item/melee/transforming/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R)
if(R.cell)
var/obj/item/weapon/stock_parts/cell/C = R.cell
var/obj/item/stock_parts/cell/C = R.cell
if(active && !(C.use(hitcost)))
attack_self(R)
to_chat(R, "<span class='notice'>It's out of charge!</span>")
return
return ..()
/obj/item/weapon/melee/transforming/energy/sword/cyborg/saw //Used by medical Syndicate cyborgs
/obj/item/melee/transforming/energy/sword/cyborg/saw //Used by medical Syndicate cyborgs
name = "energy saw"
desc = "For heavy duty cutting. It has a carbon-fiber blade in addition to a toggleable hard-light edge to dramatically increase sharpness."
icon_state = "esaw"
@@ -139,40 +139,40 @@
sharpness = IS_SHARP
light_color = "#40ceff"
/obj/item/weapon/melee/transforming/energy/sword/cyborg/saw/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/melee/transforming/energy/sword/cyborg/saw/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
return 0
/obj/item/weapon/melee/transforming/energy/sword/saber
/obj/item/melee/transforming/energy/sword/saber
var/list/possible_colors = list("red" = LIGHT_COLOR_RED, "blue" = LIGHT_COLOR_LIGHT_CYAN, "green" = LIGHT_COLOR_GREEN, "purple" = LIGHT_COLOR_LAVENDER)
var/hacked = FALSE
/obj/item/weapon/melee/transforming/energy/sword/saber/Initialize(mapload)
/obj/item/melee/transforming/energy/sword/saber/Initialize(mapload)
. = ..()
if(LAZYLEN(possible_colors))
var/set_color = pick(possible_colors)
item_color = set_color
light_color = possible_colors[set_color]
/obj/item/weapon/melee/transforming/energy/sword/saber/process()
/obj/item/melee/transforming/energy/sword/saber/process()
. = ..()
if(hacked)
var/set_color = pick(possible_colors)
light_color = possible_colors[set_color]
update_light()
/obj/item/weapon/melee/transforming/energy/sword/saber/red
/obj/item/melee/transforming/energy/sword/saber/red
possible_colors = list("red" = LIGHT_COLOR_RED)
/obj/item/weapon/melee/transforming/energy/sword/saber/blue
/obj/item/melee/transforming/energy/sword/saber/blue
possible_colors = list("blue" = LIGHT_COLOR_LIGHT_CYAN)
/obj/item/weapon/melee/transforming/energy/sword/saber/green
/obj/item/melee/transforming/energy/sword/saber/green
possible_colors = list("green" = LIGHT_COLOR_GREEN)
/obj/item/weapon/melee/transforming/energy/sword/saber/purple
/obj/item/melee/transforming/energy/sword/saber/purple
possible_colors = list("purple" = LIGHT_COLOR_LAVENDER)
/obj/item/weapon/melee/transforming/energy/sword/saber/attackby(obj/item/weapon/W, mob/living/user, params)
/obj/item/melee/transforming/energy/sword/saber/attackby(obj/item/W, mob/living/user, params)
if(istype(W, /obj/item/device/multitool))
if(!hacked)
hacked = TRUE
@@ -187,7 +187,7 @@
else
return ..()
/obj/item/weapon/melee/transforming/energy/sword/pirate
/obj/item/melee/transforming/energy/sword/pirate
name = "energy cutlass"
desc = "Arrrr matey."
icon_state = "cutlass0"
@@ -196,7 +196,7 @@
icon_state_on = "cutlass1"
light_color = "#ff0000"
/obj/item/weapon/melee/transforming/energy/blade
/obj/item/melee/transforming/energy/blade
name = "energy blade"
desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal."
icon_state = "blade"
@@ -213,16 +213,16 @@
sharpness = IS_SHARP
//Most of the other special functions are handled in their own files. aka special snowflake code so kewl
/obj/item/weapon/melee/transforming/energy/blade/Initialize()
/obj/item/melee/transforming/energy/blade/Initialize()
. = ..()
spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
/obj/item/weapon/melee/transforming/energy/blade/transform_weapon(mob/living/user, supress_message_text)
/obj/item/melee/transforming/energy/blade/transform_weapon(mob/living/user, supress_message_text)
return
/obj/item/weapon/melee/transforming/energy/blade/hardlight
/obj/item/melee/transforming/energy/blade/hardlight
name = "hardlight blade"
desc = "An extremely sharp blade made out of hard light. Packs quite a punch."
icon_state = "lightblade"
+31 -31
View File
@@ -1,7 +1,7 @@
/obj/item/weapon/melee
/obj/item/melee
needs_permit = 1
/obj/item/weapon/melee/proc/check_martial_counter(mob/living/carbon/human/target, mob/living/carbon/human/user)
/obj/item/melee/proc/check_martial_counter(mob/living/carbon/human/target, mob/living/carbon/human/user)
if(target.check_block())
target.visible_message("<span class='danger'>[target.name] blocks [src] and twists [user]'s arm behind their back!</span>",
"<span class='userdanger'>You block the attack!</span>")
@@ -9,7 +9,7 @@
return TRUE
/obj/item/weapon/melee/chainofcommand
/obj/item/melee/chainofcommand
name = "chain of command"
desc = "A tool used by great men to placate the frothing masses."
icon_state = "chain"
@@ -26,11 +26,11 @@
hitsound = 'sound/weapons/chainhit.ogg'
materials = list(MAT_METAL = 1000)
/obj/item/weapon/melee/chainofcommand/suicide_act(mob/user)
/obj/item/melee/chainofcommand/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (OXYLOSS)
/obj/item/weapon/melee/synthetic_arm_blade
/obj/item/melee/synthetic_arm_blade
name = "synthetic arm blade"
desc = "A grotesque blade that on closer inspection seems made of synthentic flesh, it still feels like it would hurt very badly as a weapon."
icon = 'icons/obj/weapons.dmi'
@@ -44,7 +44,7 @@
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
sharpness = IS_SHARP
/obj/item/weapon/melee/sabre
/obj/item/melee/sabre
name = "officer's sabre"
desc = "An elegant weapon, its monomolecular edge is capable of cutting through flesh and bone with ease."
icon_state = "sabre"
@@ -64,24 +64,24 @@
hitsound = 'sound/weapons/rapierhit.ogg'
materials = list(MAT_METAL = 1000)
/obj/item/weapon/melee/sabre/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/melee/sabre/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(attack_type == PROJECTILE_ATTACK)
final_block_chance = 0 //Don't bring a sword to a gunfight
return ..()
/obj/item/weapon/melee/sabre/on_exit_storage(obj/item/weapon/storage/S)
/obj/item/melee/sabre/on_exit_storage(obj/item/storage/S)
..()
var/obj/item/weapon/storage/belt/sabre/B = S
var/obj/item/storage/belt/sabre/B = S
if(istype(B))
playsound(B, 'sound/items/unsheath.ogg', 25, 1)
/obj/item/weapon/melee/sabre/on_enter_storage(obj/item/weapon/storage/S)
/obj/item/melee/sabre/on_enter_storage(obj/item/storage/S)
..()
var/obj/item/weapon/storage/belt/sabre/B = S
var/obj/item/storage/belt/sabre/B = S
if(istype(B))
playsound(B, 'sound/items/sheath.ogg', 25, 1)
/obj/item/weapon/melee/classic_baton
/obj/item/melee/classic_baton
name = "police baton"
desc = "A wooden truncheon for beating criminal scum."
icon = 'icons/obj/weapons.dmi'
@@ -95,7 +95,7 @@
var/cooldown = 0
var/on = TRUE
/obj/item/weapon/melee/classic_baton/attack(mob/living/target, mob/living/user)
/obj/item/melee/classic_baton/attack(mob/living/target, mob/living/user)
if(!on)
return ..()
@@ -139,7 +139,7 @@
target.LAssailant = user
cooldown = world.time + 40
/obj/item/weapon/melee/classic_baton/telescopic
/obj/item/melee/classic_baton/telescopic
name = "telescopic baton"
desc = "A compact yet robust personal defense weapon. Can be concealed when folded."
icon = 'icons/obj/weapons.dmi'
@@ -153,7 +153,7 @@
force = 0
on = FALSE
/obj/item/weapon/melee/classic_baton/telescopic/suicide_act(mob/user)
/obj/item/melee/classic_baton/telescopic/suicide_act(mob/user)
var/mob/living/carbon/human/H = user
var/obj/item/organ/brain/B = H.getorgan(/obj/item/organ/brain)
@@ -171,7 +171,7 @@
new /obj/effect/gibspawner/generic(get_turf(H), H.dna)
return (BRUTELOSS)
/obj/item/weapon/melee/classic_baton/telescopic/attack_self(mob/user)
/obj/item/melee/classic_baton/telescopic/attack_self(mob/user)
on = !on
if(on)
to_chat(user, "<span class ='warning'>You extend the baton.</span>")
@@ -192,7 +192,7 @@
playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1)
add_fingerprint(user)
/obj/item/weapon/melee/supermatter_sword
/obj/item/melee/supermatter_sword
name = "supermatter sword"
desc = "In a station full of bad ideas, this might just be the worst."
icon = 'icons/obj/weapons.dmi'
@@ -209,7 +209,7 @@
origin_tech = "combat=7;materials=6"
force_string = "INFINITE"
/obj/item/weapon/melee/supermatter_sword/Initialize()
/obj/item/melee/supermatter_sword/Initialize()
. = ..()
shard = new /obj/machinery/power/supermatter_shard(src)
qdel(shard.countdown)
@@ -217,7 +217,7 @@
START_PROCESSING(SSobj, src)
visible_message("<span class='warning'>[src] appears, balanced ever so perfectly on its hilt. This isn't ominous at all.</span>")
/obj/item/weapon/melee/supermatter_sword/process()
/obj/item/melee/supermatter_sword/process()
if(balanced || throwing || ismob(src.loc) || isnull(src.loc))
return
if(!isturf(src.loc))
@@ -229,14 +229,14 @@
if(!isspaceturf(T))
consume_turf(T)
/obj/item/weapon/melee/supermatter_sword/afterattack(target, mob/user, proximity_flag)
/obj/item/melee/supermatter_sword/afterattack(target, mob/user, proximity_flag)
if(user && target == user)
user.drop_item()
if(proximity_flag)
consume_everything(target)
..()
/obj/item/weapon/melee/supermatter_sword/throw_impact(target)
/obj/item/melee/supermatter_sword/throw_impact(target)
..()
if(ismob(target))
var/mob/M
@@ -244,31 +244,31 @@
M.drop_item()
consume_everything(target)
/obj/item/weapon/melee/supermatter_sword/pickup(user)
/obj/item/melee/supermatter_sword/pickup(user)
..()
balanced = 0
/obj/item/weapon/melee/supermatter_sword/ex_act(severity, target)
/obj/item/melee/supermatter_sword/ex_act(severity, target)
visible_message("<span class='danger'>The blast wave smacks into [src] and rapidly flashes to ash.</span>",\
"<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>")
consume_everything()
/obj/item/weapon/melee/supermatter_sword/acid_act()
/obj/item/melee/supermatter_sword/acid_act()
visible_message("<span class='danger'>The acid smacks into [src] and rapidly flashes to ash.</span>",\
"<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>")
consume_everything()
/obj/item/weapon/melee/supermatter_sword/bullet_act(obj/item/projectile/P)
/obj/item/melee/supermatter_sword/bullet_act(obj/item/projectile/P)
visible_message("<span class='danger'>[P] smacks into [src] and rapidly flashes to ash.</span>",\
"<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>")
consume_everything()
/obj/item/weapon/melee/supermatter_sword/suicide_act(mob/user)
/obj/item/melee/supermatter_sword/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] touches [src]'s blade. It looks like [user.p_theyre()] tired of waiting for the radiation to kill [user.p_them()]!</span>")
user.drop_item()
shard.CollidedWith(user)
/obj/item/weapon/melee/supermatter_sword/proc/consume_everything(target)
/obj/item/melee/supermatter_sword/proc/consume_everything(target)
if(isnull(target))
shard.Consume()
else if(!isturf(target))
@@ -276,7 +276,7 @@
else
consume_turf(target)
/obj/item/weapon/melee/supermatter_sword/proc/consume_turf(turf/T)
/obj/item/melee/supermatter_sword/proc/consume_turf(turf/T)
if(istype(T, T.baseturf))
return //Can't void the void, baby!
playsound(T, 'sound/effects/supermatter.ogg', 50, 1)
@@ -286,10 +286,10 @@
T.ChangeTurf(T.baseturf)
T.CalculateAdjacentTurfs()
/obj/item/weapon/melee/supermatter_sword/add_blood(list/blood_dna)
/obj/item/melee/supermatter_sword/add_blood(list/blood_dna)
return 0
/obj/item/weapon/melee/curator_whip
/obj/item/melee/curator_whip
name = "curator's whip"
desc = "Somewhat eccentric and outdated, it still stings like hell to be hit by."
icon_state = "whip"
@@ -302,7 +302,7 @@
attack_verb = list("flogged", "whipped", "lashed", "disciplined")
hitsound = 'sound/weapons/chainhit.ogg'
/obj/item/weapon/melee/curator_whip/afterattack(target, mob/user, proximity_flag)
/obj/item/melee/curator_whip/afterattack(target, mob/user, proximity_flag)
if(ishuman(target) && proximity_flag)
var/mob/living/carbon/human/H = target
H.drop_all_held_items()
@@ -1,4 +1,4 @@
/obj/item/weapon/melee/transforming //TODO: make transforming energy weapons a subtype of this
/obj/item/melee/transforming //TODO: make transforming energy weapons a subtype of this
var/active = FALSE
var/force_on = 30 //force when active
var/faction_bonus_force = 0 //Bonus force dealt against certain factions
@@ -13,7 +13,7 @@
var/list/nemesis_factions //Any mob with a faction that exists in this list will take bonus damage/effects
var/w_class_on = WEIGHT_CLASS_BULKY
/obj/item/weapon/melee/transforming/Initialize()
/obj/item/melee/transforming/Initialize()
. = ..()
if(active)
if(attack_verb_on.len)
@@ -22,11 +22,11 @@
if(attack_verb_off.len)
attack_verb = attack_verb_off
/obj/item/weapon/melee/transforming/attack_self(mob/living/carbon/user)
/obj/item/melee/transforming/attack_self(mob/living/carbon/user)
if(transform_weapon(user))
clumsy_transform_effect(user)
/obj/item/weapon/melee/transforming/attack(mob/living/target, mob/living/carbon/human/user)
/obj/item/melee/transforming/attack(mob/living/target, mob/living/carbon/human/user)
var/nemesis_faction = FALSE
if(LAZYLEN(nemesis_factions))
for(var/F in target.faction)
@@ -39,7 +39,7 @@
if(nemesis_faction)
force -= faction_bonus_force
/obj/item/weapon/melee/transforming/proc/transform_weapon(mob/living/user, supress_message_text)
/obj/item/melee/transforming/proc/transform_weapon(mob/living/user, supress_message_text)
active = !active
if(active)
force = force_on
@@ -63,15 +63,15 @@
add_fingerprint(user)
return TRUE
/obj/item/weapon/melee/transforming/proc/nemesis_effects(mob/living/user, mob/living/target)
/obj/item/melee/transforming/proc/nemesis_effects(mob/living/user, mob/living/target)
return
/obj/item/weapon/melee/transforming/proc/transform_messages(mob/living/user, supress_message_text)
/obj/item/melee/transforming/proc/transform_messages(mob/living/user, supress_message_text)
playsound(user, active ? 'sound/weapons/saberon.ogg' : 'sound/weapons/saberoff.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
if(!supress_message_text)
to_chat(user, "<span class='notice'>[src] [active ? "is now active":"can now be concealed"].</span>")
/obj/item/weapon/melee/transforming/proc/clumsy_transform_effect(mob/living/user)
/obj/item/melee/transforming/proc/clumsy_transform_effect(mob/living/user)
if(user.disabilities & CLUMSY && prob(50))
to_chat(user, "<span class='warning'>You accidentally cut yourself with [src], like a doofus!</span>")
user.take_bodypart_damage(5,5)
@@ -1,4 +1,4 @@
/obj/item/weapon/caution
/obj/item/caution
desc = "Caution! Wet Floor!"
name = "wet floor sign"
icon = 'icons/obj/janitor.dmi'
@@ -12,7 +12,7 @@
w_class = WEIGHT_CLASS_SMALL
attack_verb = list("warned", "cautioned", "smashed")
/obj/item/weapon/skub
/obj/item/skub
desc = "It's skub."
name = "skub"
icon = 'icons/obj/items.dmi'
+15 -15
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/mop
/obj/item/mop
desc = "The world of janitalia wouldn't be complete without a mop."
name = "mop"
icon = 'icons/obj/janitor.dmi'
@@ -16,12 +16,12 @@
var/mopspeed = 30
force_string = "robust... against germs"
/obj/item/weapon/mop/New()
/obj/item/mop/New()
..()
create_reagents(mopcap)
/obj/item/weapon/mop/proc/clean(turf/A)
/obj/item/mop/proc/clean(turf/A)
if(reagents.has_reagent("water", 1) || reagents.has_reagent("holywater", 1) || reagents.has_reagent("vodka", 1) || reagents.has_reagent("cleaner", 1))
A.clean_blood()
for(var/obj/effect/O in A)
@@ -34,7 +34,7 @@
reagents.remove_any(1) //reaction() doesn't use up the reagents
/obj/item/weapon/mop/afterattack(atom/A, mob/user, proximity)
/obj/item/mop/afterattack(atom/A, mob/user, proximity)
if(!proximity) return
if(reagents.total_volume < 1)
@@ -43,7 +43,7 @@
var/turf/T = get_turf(A)
if(istype(A, /obj/item/weapon/reagent_containers/glass/bucket) || istype(A, /obj/structure/janitorialcart))
if(istype(A, /obj/item/reagent_containers/glass/bucket) || istype(A, /obj/structure/janitorialcart))
return
if(T)
@@ -55,23 +55,23 @@
/obj/effect/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap))
if(istype(I, /obj/item/mop) || istype(I, /obj/item/soap))
return
else
return ..()
/obj/item/weapon/mop/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J)
/obj/item/mop/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J)
J.put_in_cart(src, user)
J.mymop=src
J.update_icon()
/obj/item/weapon/mop/cyborg
/obj/item/mop/cyborg
/obj/item/weapon/mop/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J)
/obj/item/mop/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J)
return
/obj/item/weapon/mop/advanced
/obj/item/mop/advanced
desc = "The most advanced tool in a custodian's arsenal, complete with a condenser for self-wetting! Just think of all the viscera you will clean up with this!"
name = "advanced mop"
mopcap = 10
@@ -88,11 +88,11 @@
var/refill_rate = 1 //Rate per process() tick mop refills itself
var/refill_reagent = "water" //Determins what reagent to use for refilling, just in case someone wanted to make a HOLY MOP OF PURGING
/obj/item/weapon/mop/advanced/New()
/obj/item/mop/advanced/New()
..()
START_PROCESSING(SSobj, src)
/obj/item/weapon/mop/advanced/attack_self(mob/user)
/obj/item/mop/advanced/attack_self(mob/user)
refill_enabled = !refill_enabled
if(refill_enabled)
START_PROCESSING(SSobj, src)
@@ -101,16 +101,16 @@
to_chat(user, "<span class='notice'>You set the condenser switch to the '[refill_enabled ? "ON" : "OFF"]' position.</span>")
playsound(user, 'sound/machines/click.ogg', 30, 1)
/obj/item/weapon/mop/advanced/process()
/obj/item/mop/advanced/process()
if(reagents.total_volume < mopcap)
reagents.add_reagent(refill_reagent, refill_rate)
/obj/item/weapon/mop/advanced/examine(mob/user)
/obj/item/mop/advanced/examine(mob/user)
..()
to_chat(user, "<span class='notice'>The condenser switch is set to <b>[refill_enabled ? "ON" : "OFF"]</b>.</span>")
/obj/item/weapon/mop/advanced/Destroy()
/obj/item/mop/advanced/Destroy()
if(refill_enabled)
STOP_PROCESSING(SSobj, src)
return ..()
+13 -13
View File
@@ -1,7 +1,7 @@
//NEVER USE THIS IT SUX -PETETHEGOAT
//IT SUCKS A BIT LESS -GIACOM
/obj/item/weapon/paint
/obj/item/paint
gender= PLURAL
name = "paint"
desc = "Used to recolor floors and walls. Can be removed by the janitor."
@@ -14,48 +14,48 @@
max_integrity = 100
var/paintleft = 10
/obj/item/weapon/paint/red
/obj/item/paint/red
name = "red paint"
item_color = "C73232" //"FF0000"
icon_state = "paint_red"
/obj/item/weapon/paint/green
/obj/item/paint/green
name = "green paint"
item_color = "2A9C3B" //"00FF00"
icon_state = "paint_green"
/obj/item/weapon/paint/blue
/obj/item/paint/blue
name = "blue paint"
item_color = "5998FF" //"0000FF"
icon_state = "paint_blue"
/obj/item/weapon/paint/yellow
/obj/item/paint/yellow
name = "yellow paint"
item_color = "CFB52B" //"FFFF00"
icon_state = "paint_yellow"
/obj/item/weapon/paint/violet
/obj/item/paint/violet
name = "violet paint"
item_color = "AE4CCD" //"FF00FF"
icon_state = "paint_violet"
/obj/item/weapon/paint/black
/obj/item/paint/black
name = "black paint"
item_color = "333333"
icon_state = "paint_black"
/obj/item/weapon/paint/white
/obj/item/paint/white
name = "white paint"
item_color = "FFFFFF"
icon_state = "paint_white"
/obj/item/weapon/paint/anycolor
/obj/item/paint/anycolor
gender= PLURAL
name = "any color"
icon_state = "paint_neutral"
/obj/item/weapon/paint/anycolor/attack_self(mob/user)
/obj/item/paint/anycolor/attack_self(mob/user)
var/t1 = input(user, "Please select a color:", "Locking Computer", null) in list( "red", "blue", "green", "yellow", "violet", "black", "white")
if ((user.get_active_held_item() != src || user.stat || user.restrained()))
return
@@ -78,7 +78,7 @@
add_fingerprint(user)
/obj/item/weapon/paint/afterattack(turf/target, mob/user, proximity)
/obj/item/paint/afterattack(turf/target, mob/user, proximity)
if(!proximity) return
if(paintleft <= 0)
icon_state = "paint_empty"
@@ -88,13 +88,13 @@
var/newcolor = "#" + item_color
target.add_atom_colour(newcolor, WASHABLE_COLOUR_PRIORITY)
/obj/item/weapon/paint/paint_remover
/obj/item/paint/paint_remover
gender = PLURAL
name = "paint remover"
desc = "Used to remove color from floors and walls."
icon_state = "paint_neutral"
/obj/item/weapon/paint/paint_remover/afterattack(turf/target, mob/user, proximity)
/obj/item/paint/paint_remover/afterattack(turf/target, mob/user, proximity)
if(!proximity)
return
if(istype(target) && target.color != initial(target.color))
+2 -2
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/pai_cable
/obj/item/pai_cable
desc = "A flexible coated cable with a universal jack on one end."
name = "data cable"
icon = 'icons/obj/power.dmi'
@@ -6,7 +6,7 @@
flags_1 = NOBLUDGEON_1
var/obj/machinery/machine
/obj/item/weapon/pai_cable/proc/plugin(obj/machinery/M, mob/living/user)
/obj/item/pai_cable/proc/plugin(obj/machinery/M, mob/living/user)
if(!user.drop_item())
return
user.visible_message("[user] inserts [src] into a data port on [M].", "<span class='notice'>You insert [src] into a data port on [M].</span>", "<span class='italics'>You hear the satisfying click of a wire jack fastening into place.</span>")
@@ -2,7 +2,7 @@
#define PCANNON_FIREALL 1
#define PCANNON_FILO 2
#define PCANNON_FIFO 3
/obj/item/weapon/pneumatic_cannon
/obj/item/pneumatic_cannon
name = "pneumatic cannon"
desc = "A gas-powered cannon that can fire any object loaded into it."
w_class = WEIGHT_CLASS_BULKY
@@ -16,7 +16,7 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 60, acid = 50)
var/maxWeightClass = 20 //The max weight of items that can fit into the cannon
var/loadedWeightClass = 0 //The weight of items currently in the cannon
var/obj/item/weapon/tank/internals/tank = null //The gas tank that is drawn from to fire things
var/obj/item/tank/internals/tank = null //The gas tank that is drawn from to fire things
var/gasPerThrow = 3 //How much gas is drawn from a tank's pressure to fire
var/list/loadedItems = list() //The items loaded into the cannon that will be fired out
var/pressureSetting = 1 //How powerful the cannon is - higher pressure = more gas but more powerful throws
@@ -28,10 +28,10 @@
var/clumsyCheck = TRUE
trigger_guard = TRIGGER_GUARD_NORMAL
/obj/item/weapon/pneumatic_cannon/CanItemAutoclick()
/obj/item/pneumatic_cannon/CanItemAutoclick()
return automatic
/obj/item/weapon/pneumatic_cannon/examine(mob/user)
/obj/item/pneumatic_cannon/examine(mob/user)
..()
var/list/out = list()
if(!in_range(user, src))
@@ -44,19 +44,19 @@
out += "<span class='notice'>[icon2html(tank, user)] It has \the [tank] mounted onto it.</span>"
to_chat(user, out.Join("<br>"))
/obj/item/weapon/pneumatic_cannon/attackby(obj/item/weapon/W, mob/user, params)
/obj/item/pneumatic_cannon/attackby(obj/item/W, mob/user, params)
if(user.a_intent == INTENT_HARM)
return ..()
if(istype(W, /obj/item/weapon/tank/internals))
if(istype(W, /obj/item/tank/internals))
if(!tank)
var/obj/item/weapon/tank/internals/IT = W
var/obj/item/tank/internals/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(W.type == type)
to_chat(user, "<span class='warning'>You're fairly certain that putting a pneumatic cannon inside another pneumatic cannon would cause a spacetime disruption.</span>")
else if(istype(W, /obj/item/weapon/wrench))
else if(istype(W, /obj/item/wrench))
switch(pressureSetting)
if(1)
pressureSetting = 2
@@ -65,7 +65,7 @@
if(3)
pressureSetting = 1
to_chat(user, "<span class='notice'>You tweak \the [src]'s pressure output to [pressureSetting].</span>")
else if(istype(W, /obj/item/weapon/screwdriver))
else if(istype(W, /obj/item/screwdriver))
if(tank)
updateTank(tank, 1, user)
else if(loadedWeightClass >= maxWeightClass)
@@ -74,7 +74,7 @@
var/obj/item/IW = W
load_item(IW, user)
/obj/item/weapon/pneumatic_cannon/proc/can_load_item(obj/item/I, mob/user)
/obj/item/pneumatic_cannon/proc/can_load_item(obj/item/I, mob/user)
if((loadedWeightClass + I.w_class) > maxWeightClass) //Only make messages if there's a user
if(user)
to_chat(user, "<span class='warning'>\The [I] won't fit into \the [src]!</span>")
@@ -85,7 +85,7 @@
return FALSE
return TRUE
/obj/item/weapon/pneumatic_cannon/proc/load_item(obj/item/I, mob/user)
/obj/item/pneumatic_cannon/proc/load_item(obj/item/I, mob/user)
if(!can_load_item(I, user))
return FALSE
if(user) //Only use transfer proc if there's a user, otherwise just set loc.
@@ -98,14 +98,14 @@
loadedWeightClass += I.w_class
return TRUE
/obj/item/weapon/pneumatic_cannon/afterattack(atom/target, mob/living/carbon/human/user, flag, params)
/obj/item/pneumatic_cannon/afterattack(atom/target, mob/living/carbon/human/user, flag, params)
if(flag && user.a_intent == INTENT_HARM) //melee attack
return
if(!istype(user))
return
Fire(user, target)
/obj/item/weapon/pneumatic_cannon/proc/Fire(mob/living/carbon/human/user, var/atom/target)
/obj/item/pneumatic_cannon/proc/Fire(mob/living/carbon/human/user, var/atom/target)
if(!istype(user) && !target)
return
var/discharge = 0
@@ -140,7 +140,7 @@
user.visible_message("<span class='warning'>[user] is thrown down by the force of the cannon!</span>", "<span class='userdanger'>[src] slams into your shoulder, knocking you down!")
user.Knockdown(60)
/obj/item/weapon/pneumatic_cannon/proc/fire_items(turf/target, mob/user)
/obj/item/pneumatic_cannon/proc/fire_items(turf/target, mob/user)
if(fire_mode == PCANNON_FIREALL)
for(var/obj/item/ITD in loadedItems) //Item To Discharge
if(!throw_item(target, ITD, user))
@@ -157,7 +157,7 @@
if(!throw_item(target, I, user))
break
/obj/item/weapon/pneumatic_cannon/proc/throw_item(turf/target, obj/item/I, mob/user)
/obj/item/pneumatic_cannon/proc/throw_item(turf/target, obj/item/I, mob/user)
if(!istype(I))
return FALSE
loadedItems -= I
@@ -166,7 +166,7 @@
I.throw_at(target, pressureSetting * 10 * range_multiplier, pressureSetting * 2, user)
return TRUE
/obj/item/weapon/pneumatic_cannon/proc/get_target(turf/target, turf/starting)
/obj/item/pneumatic_cannon/proc/get_target(turf/target, turf/starting)
if(range_multiplier == 1)
return target
var/x_o = (target.x - starting.x)
@@ -176,7 +176,7 @@
var/turf/newtarget = locate(new_x, new_y, starting.z)
return newtarget
/obj/item/weapon/pneumatic_cannon/ghetto //Obtainable by improvised methods; more gas per use, less capacity, but smaller
/obj/item/pneumatic_cannon/ghetto //Obtainable by improvised methods; more gas per use, less capacity, but smaller
name = "improvised pneumatic cannon"
desc = "A gas-powered, object-firing cannon made out of common parts."
force = 5
@@ -184,7 +184,7 @@
maxWeightClass = 7
gasPerThrow = 5
/obj/item/weapon/pneumatic_cannon/proc/updateTank(obj/item/weapon/tank/internals/thetank, removing = 0, mob/living/carbon/human/user)
/obj/item/pneumatic_cannon/proc/updateTank(obj/item/tank/internals/thetank, removing = 0, mob/living/carbon/human/user)
if(removing)
if(!src.tank)
return
@@ -202,14 +202,14 @@
src.tank = thetank
src.update_icons()
/obj/item/weapon/pneumatic_cannon/proc/update_icons()
/obj/item/pneumatic_cannon/proc/update_icons()
src.cut_overlays()
if(!tank)
return
add_overlay(tank.icon_state)
src.update_icon()
/obj/item/weapon/pneumatic_cannon/proc/fill_with_type(type, amount)
/obj/item/pneumatic_cannon/proc/fill_with_type(type, amount)
if(!ispath(type, /obj/item))
return FALSE
var/loaded = 0
@@ -221,7 +221,7 @@
loaded++
CHECK_TICK
/obj/item/weapon/pneumatic_cannon/pie
/obj/item/pneumatic_cannon/pie
name = "pie cannon"
desc = "Load cream pie for optimal results"
force = 10
@@ -234,27 +234,27 @@
maxWeightClass = 150 //50 pies. :^)
clumsyCheck = FALSE
/obj/item/weapon/pneumatic_cannon/pie/can_load_item(obj/item/I, mob/user)
if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/pie))
/obj/item/pneumatic_cannon/pie/can_load_item(obj/item/I, mob/user)
if(istype(I, /obj/item/reagent_containers/food/snacks/pie))
return ..()
to_chat(user, "<span class='warning'>[src] only accepts pies!</span>")
return FALSE
/obj/item/weapon/pneumatic_cannon/pie/selfcharge
/obj/item/pneumatic_cannon/pie/selfcharge
automatic = TRUE
var/charge_amount = 1
var/charge_ticks = 1
var/charge_tick = 0
maxWeightClass = 60 //20 pies.
/obj/item/weapon/pneumatic_cannon/pie/selfcharge/Initialize()
/obj/item/pneumatic_cannon/pie/selfcharge/Initialize()
. = ..()
START_PROCESSING(SSobj, src)
/obj/item/weapon/pneumatic_cannon/pie/selfcharge/Destroy()
/obj/item/pneumatic_cannon/pie/selfcharge/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/weapon/pneumatic_cannon/pie/selfcharge/process()
/obj/item/pneumatic_cannon/pie/selfcharge/process()
if(++charge_tick >= charge_ticks)
fill_with_type(/obj/item/weapon/reagent_containers/food/snacks/pie/cream, charge_amount)
fill_with_type(/obj/item/reagent_containers/food/snacks/pie/cream, charge_amount)
+10 -10
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/melee/powerfist
/obj/item/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"
@@ -17,10 +17,10 @@
var/click_delay = 1.5
var/fisto_setting = 1
var/gasperfist = 3
var/obj/item/weapon/tank/internals/tank = null //Tank used for the gauntlet's piston-ram.
var/obj/item/tank/internals/tank = null //Tank used for the gauntlet's piston-ram.
/obj/item/weapon/melee/powerfist/examine(mob/user)
/obj/item/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>")
@@ -29,15 +29,15 @@
to_chat(user, "<span class='notice'>[icon2html(tank, user)] 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/internals))
/obj/item/melee/powerfist/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/tank/internals))
if(!tank)
var/obj/item/weapon/tank/internals/IT = W
var/obj/item/tank/internals/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))
else if(istype(W, /obj/item/wrench))
switch(fisto_setting)
if(1)
fisto_setting = 2
@@ -47,12 +47,12 @@
fisto_setting = 1
playsound(loc, W.usesound, 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))
else if(istype(W, /obj/item/screwdriver))
if(tank)
updateTank(tank, 1, user)
/obj/item/weapon/melee/powerfist/proc/updateTank(obj/item/weapon/tank/internals/thetank, removing = 0, mob/living/carbon/human/user)
/obj/item/melee/powerfist/proc/updateTank(obj/item/tank/internals/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>")
@@ -71,7 +71,7 @@
tank = thetank
/obj/item/weapon/melee/powerfist/attack(mob/living/target, mob/living/user)
/obj/item/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
+5 -5
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/teleportation_scroll
/obj/item/teleportation_scroll
name = "scroll of teleportation"
desc = "A scroll for moving around."
icon = 'icons/obj/wizard.dmi'
@@ -11,14 +11,14 @@
origin_tech = "bluespace=6"
resistance_flags = FLAMMABLE
/obj/item/weapon/teleportation_scroll/apprentice
/obj/item/teleportation_scroll/apprentice
name = "lesser scroll of teleportation"
uses = 1
origin_tech = "bluespace=5"
/obj/item/weapon/teleportation_scroll/attack_self(mob/user)
/obj/item/teleportation_scroll/attack_self(mob/user)
user.set_machine(src)
var/dat = "<B>Teleportation Scroll:</B><BR>"
dat += "Number of uses: [src.uses]<BR>"
@@ -30,7 +30,7 @@
onclose(user, "scroll")
return
/obj/item/weapon/teleportation_scroll/Topic(href, href_list)
/obj/item/teleportation_scroll/Topic(href, href_list)
..()
if (usr.stat || usr.restrained() || src.loc != usr)
return
@@ -46,7 +46,7 @@
attack_self(H)
return
/obj/item/weapon/teleportation_scroll/proc/teleportscroll(mob/user)
/obj/item/teleportation_scroll/proc/teleportscroll(mob/user)
var/A
+6 -6
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/sharpener
/obj/item/sharpener
name = "whetstone"
icon = 'icons/obj/kitchen.dmi'
icon_state = "sharpener"
@@ -10,7 +10,7 @@
var/requires_sharpness = 1
/obj/item/weapon/sharpener/attackby(obj/item/I, mob/user, params)
/obj/item/sharpener/attackby(obj/item/I, mob/user, params)
if(used)
to_chat(user, "<span class='warning'>The sharpening block is too worn to use again!</span>")
return
@@ -20,11 +20,11 @@
if(requires_sharpness && !I.sharpness)
to_chat(user, "<span class='warning'>You can only sharpen items that are already sharp, such as knives!</span>")
return
if(istype(I, /obj/item/weapon/melee/transforming/energy))
if(istype(I, /obj/item/melee/transforming/energy))
to_chat(user, "<span class='warning'>You don't think \the [I] will be the thing getting modified if you use it on \the [src]!</span>")
return
if(istype(I, /obj/item/weapon/twohanded))//some twohanded items should still be sharpenable, but handle force differently. therefore i need this stuff
var/obj/item/weapon/twohanded/TH = I
if(istype(I, /obj/item/twohanded))//some twohanded items should still be sharpenable, but handle force differently. therefore i need this stuff
var/obj/item/twohanded/TH = I
if(TH.force_wielded >= max)
to_chat(user, "<span class='warning'>[TH] is much too powerful to sharpen further!</span>")
return
@@ -48,7 +48,7 @@
used = 1
update_icon()
/obj/item/weapon/sharpener/super
/obj/item/sharpener/super
name = "super whetstone"
desc = "A block that will make your weapon sharper than Einstein on adderall."
increment = 200
+14 -14
View File
@@ -1,9 +1,9 @@
/obj/item/weapon/shield
/obj/item/shield
name = "shield"
block_chance = 50
armor = list(melee = 50, bullet = 50, laser = 50, energy = 0, bomb = 30, bio = 0, rad = 0, fire = 80, acid = 70)
/obj/item/weapon/shield/riot
/obj/item/shield/riot
name = "riot shield"
desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder."
icon = 'icons/obj/weapons.dmi'
@@ -22,8 +22,8 @@
var/cooldown = 0 //shield bash cooldown. based on world.time
/obj/item/weapon/shield/riot/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/melee/baton))
/obj/item/shield/riot/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/melee/baton))
if(cooldown < world.time - 25)
user.visible_message("<span class='warning'>[user] bashes [src] with [W]!</span>")
playsound(user.loc, 'sound/effects/shieldbash.ogg', 50, 1)
@@ -31,14 +31,14 @@
else
return ..()
/obj/item/weapon/shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(attack_type == THROWN_PROJECTILE_ATTACK)
final_block_chance += 30
if(attack_type == LEAP_ATTACK)
final_block_chance = 100
return ..()
/obj/item/weapon/shield/riot/roman
/obj/item/shield/riot/roman
name = "roman shield"
desc = "Bears an inscription on the inside: <i>\"Romanes venio domus\"</i>."
icon_state = "roman_shield"
@@ -46,7 +46,7 @@
lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi'
/obj/item/weapon/shield/riot/buckler
/obj/item/shield/riot/buckler
name = "wooden buckler"
desc = "A medieval wooden buckler."
icon_state = "buckler"
@@ -58,7 +58,7 @@
resistance_flags = FLAMMABLE
block_chance = 30
/obj/item/weapon/shield/energy
/obj/item/shield/energy
name = "energy combat shield"
desc = "A shield capable of stopping most melee attacks. Protects user from almost all energy projectiles. It can be retracted, expanded, and stored anywhere."
icon = 'icons/obj/weapons.dmi'
@@ -74,13 +74,13 @@
attack_verb = list("shoved", "bashed")
var/active = 0
/obj/item/weapon/shield/energy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/shield/energy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
return 0
/obj/item/weapon/shield/energy/IsReflect()
/obj/item/shield/energy/IsReflect()
return (active)
/obj/item/weapon/shield/energy/attack_self(mob/living/carbon/human/user)
/obj/item/shield/energy/attack_self(mob/living/carbon/human/user)
if(user.disabilities & CLUMSY && prob(50))
to_chat(user, "<span class='warning'>You beat yourself in the head with [src].</span>")
user.take_bodypart_damage(5)
@@ -103,7 +103,7 @@
to_chat(user, "<span class='notice'>[src] can now be concealed.</span>")
add_fingerprint(user)
/obj/item/weapon/shield/riot/tele
/obj/item/shield/riot/tele
name = "telescopic shield"
desc = "An advanced riot shield made of lightweight materials that collapses for easy storage."
icon = 'icons/obj/weapons.dmi'
@@ -119,12 +119,12 @@
w_class = WEIGHT_CLASS_NORMAL
var/active = 0
/obj/item/weapon/shield/riot/tele/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/shield/riot/tele/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(active)
return ..()
return 0
/obj/item/weapon/shield/riot/tele/attack_self(mob/living/user)
/obj/item/shield/riot/tele/attack_self(mob/living/user)
active = !active
icon_state = "teleriot[active]"
playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1)
+5 -5
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/picket_sign
/obj/item/picket_sign
icon_state = "picket"
name = "blank picket sign"
desc = "It's blank"
@@ -10,8 +10,8 @@
var/label = ""
var/last_wave = 0
/obj/item/weapon/picket_sign/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/toy/crayon))
/obj/item/picket_sign/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/pen) || istype(W, /obj/item/toy/crayon))
var/txt = stripped_input(user, "What would you like to write on the sign?", "Sign Label", null , 30)
if(txt)
label = txt
@@ -20,7 +20,7 @@
else
return ..()
/obj/item/weapon/picket_sign/attack_self(mob/living/carbon/human/user)
/obj/item/picket_sign/attack_self(mob/living/carbon/human/user)
if( last_wave + 20 < world.time )
last_wave = world.time
if(label)
@@ -31,7 +31,7 @@
/datum/crafting_recipe/picket_sign
name = "Picket Sign"
result = /obj/item/weapon/picket_sign
result = /obj/item/picket_sign
reqs = list(/obj/item/stack/rods = 1,
/obj/item/stack/sheet/cardboard = 2)
time = 80
@@ -1,4 +1,4 @@
/obj/item/weapon/twohanded/singularityhammer
/obj/item/twohanded/singularityhammer
name = "singularity hammer"
desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows."
icon_state = "mjollnir0"
@@ -18,24 +18,24 @@
resistance_flags = FIRE_PROOF | ACID_PROOF
force_string = "LORD SINGULOTH HIMSELF"
/obj/item/weapon/twohanded/singularityhammer/New()
/obj/item/twohanded/singularityhammer/New()
..()
START_PROCESSING(SSobj, src)
/obj/item/weapon/twohanded/singularityhammer/Destroy()
/obj/item/twohanded/singularityhammer/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/weapon/twohanded/singularityhammer/process()
/obj/item/twohanded/singularityhammer/process()
if(charged < 5)
charged++
return
/obj/item/weapon/twohanded/singularityhammer/update_icon() //Currently only here to fuck with the on-mob icons.
/obj/item/twohanded/singularityhammer/update_icon() //Currently only here to fuck with the on-mob icons.
icon_state = "mjollnir[wielded]"
return
/obj/item/weapon/twohanded/singularityhammer/proc/vortex(turf/pull, mob/wielder)
/obj/item/twohanded/singularityhammer/proc/vortex(turf/pull, mob/wielder)
for(var/atom/X in orange(5,pull))
if(ismovableatom(X))
var/atom/movable/A = X
@@ -57,7 +57,7 @@
step_towards(H,pull)
return
/obj/item/weapon/twohanded/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity)
/obj/item/twohanded/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity)
if(!proximity) return
if(wielded)
if(charged == 5)
@@ -69,7 +69,7 @@
var/turf/target = get_turf(A)
vortex(target,user)
/obj/item/weapon/twohanded/mjollnir
/obj/item/twohanded/mjollnir
name = "Mjolnir"
desc = "A weapon worthy of a god, able to strike with the force of a lightning bolt. It crackles with barely contained energy."
icon_state = "mjollnir0"
@@ -85,7 +85,7 @@
w_class = WEIGHT_CLASS_HUGE
origin_tech = "combat=4;powerstorage=7"
/obj/item/weapon/twohanded/mjollnir/proc/shock(mob/living/target)
/obj/item/twohanded/mjollnir/proc/shock(mob/living/target)
target.Stun(60)
var/datum/effect_system/lightning_spread/s = new /datum/effect_system/lightning_spread
s.set_up(5, 1, target.loc)
@@ -97,17 +97,17 @@
target.throw_at(throw_target, 200, 4)
return
/obj/item/weapon/twohanded/mjollnir/attack(mob/living/M, mob/user)
/obj/item/twohanded/mjollnir/attack(mob/living/M, mob/user)
..()
if(wielded)
playsound(src.loc, "sparks", 50, 1)
shock(M)
/obj/item/weapon/twohanded/mjollnir/throw_impact(atom/target)
/obj/item/twohanded/mjollnir/throw_impact(atom/target)
. = ..()
if(isliving(target))
shock(target)
/obj/item/weapon/twohanded/mjollnir/update_icon() //Currently only here to fuck with the on-mob icons.
/obj/item/twohanded/mjollnir/update_icon() //Currently only here to fuck with the on-mob icons.
icon_state = "mjollnir[wielded]"
return
@@ -9,7 +9,7 @@
* Backpack
*/
/obj/item/weapon/storage/backpack
/obj/item/storage/backpack
name = "backpack"
desc = "You wear this on your back and put items into it."
icon_state = "backpack"
@@ -28,10 +28,10 @@
* Backpack Types
*/
/obj/item/weapon/storage/backpack/old
/obj/item/storage/backpack/old
max_combined_w_class = 12
/obj/item/weapon/storage/backpack/holding
/obj/item/storage/backpack/holding
name = "bag of holding"
desc = "A backpack that opens into a localized pocket of Blue Space."
origin_tech = "bluespace=5;materials=4;engineering=4;plasmatech=5"
@@ -45,7 +45,7 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 60, acid = 50)
/obj/item/weapon/storage/backpack/holding/suicide_act(mob/living/user)
/obj/item/storage/backpack/holding/suicide_act(mob/living/user)
user.visible_message("<span class='suicide'>[user] is jumping into [src]! It looks like [user.p_theyre()] trying to commit suicide.</span>")
user.drop_item()
user.Stun(100, ignore_canstun = TRUE)
@@ -54,7 +54,7 @@
qdel(user)
return
/obj/item/weapon/storage/backpack/holding/content_can_dump(atom/dest_object, mob/user)
/obj/item/storage/backpack/holding/content_can_dump(atom/dest_object, mob/user)
if(Adjacent(user))
if(get_dist(user, dest_object) < 8)
if(dest_object.storage_contents_dump_act(src, user))
@@ -68,8 +68,8 @@
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0)
return 0
/obj/item/weapon/storage/backpack/holding/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/user)
if((istype(W, /obj/item/weapon/storage/backpack/holding) || count_by_type(W.GetAllContents(), /obj/item/weapon/storage/backpack/holding)))
/obj/item/storage/backpack/holding/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/user)
if((istype(W, /obj/item/storage/backpack/holding) || count_by_type(W.GetAllContents(), /obj/item/storage/backpack/holding)))
var/safety = alert(user, "Doing this will have extremely dire consequences for the station and its crew. Be sure you know what you're doing.", "Put in [name]?", "Proceed", "Abort")
if(safety == "Abort" || !in_range(src, user) || !src || !W || user.incapacitated())
return
@@ -85,13 +85,13 @@
return
. = ..()
/obj/item/weapon/storage/backpack/holding/singularity_act(current_size)
/obj/item/storage/backpack/holding/singularity_act(current_size)
var/dist = max((current_size - 2),1)
explosion(src.loc,(dist),(dist*2),(dist*4))
return
/obj/item/weapon/storage/backpack/santabag
/obj/item/storage/backpack/santabag
name = "Santa's Gift Bag"
desc = "Space Santa uses this to deliver toys to all the nice children in space in Christmas! Wow, it's pretty big!"
icon_state = "giftbag0"
@@ -100,86 +100,86 @@
max_w_class = WEIGHT_CLASS_NORMAL
max_combined_w_class = 60
/obj/item/weapon/storage/backpack/santabag/suicide_act(mob/user)
/obj/item/storage/backpack/santabag/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] places [src] over their head and pulls it tight! It looks like they aren't in the Christmas spirit...</span>")
return (OXYLOSS)
/obj/item/weapon/storage/backpack/cultpack
/obj/item/storage/backpack/cultpack
name = "trophy rack"
desc = "It's useful for both carrying extra gear and proudly declaring your insanity."
icon_state = "cultpack"
item_state = "backpack"
/obj/item/weapon/storage/backpack/clown
/obj/item/storage/backpack/clown
name = "Giggles von Honkerton"
desc = "It's a backpack made by Honk! Co."
icon_state = "clownpack"
item_state = "clownpack"
/obj/item/weapon/storage/backpack/explorer
/obj/item/storage/backpack/explorer
name = "explorer bag"
desc = "A robust backpack for stashing your loot."
icon_state = "explorerpack"
item_state = "explorerpack"
/obj/item/weapon/storage/backpack/mime
/obj/item/storage/backpack/mime
name = "Parcel Parceaux"
desc = "A silent backpack made for those silent workers. Silence Co."
icon_state = "mimepack"
item_state = "mimepack"
/obj/item/weapon/storage/backpack/medic
/obj/item/storage/backpack/medic
name = "medical backpack"
desc = "It's a backpack especially designed for use in a sterile environment."
icon_state = "medicalpack"
item_state = "medicalpack"
/obj/item/weapon/storage/backpack/security
/obj/item/storage/backpack/security
name = "security backpack"
desc = "It's a very robust backpack."
icon_state = "securitypack"
item_state = "securitypack"
/obj/item/weapon/storage/backpack/captain
/obj/item/storage/backpack/captain
name = "captain's backpack"
desc = "It's a special backpack made exclusively for Nanotrasen officers."
icon_state = "captainpack"
item_state = "captainpack"
resistance_flags = 0
/obj/item/weapon/storage/backpack/industrial
/obj/item/storage/backpack/industrial
name = "industrial backpack"
desc = "It's a tough backpack for the daily grind of station life."
icon_state = "engiepack"
item_state = "engiepack"
resistance_flags = FIRE_PROOF
/obj/item/weapon/storage/backpack/botany
/obj/item/storage/backpack/botany
name = "botany backpack"
desc = "It's a backpack made of all-natural fibers."
icon_state = "botpack"
item_state = "botpack"
/obj/item/weapon/storage/backpack/chemistry
/obj/item/storage/backpack/chemistry
name = "chemistry backpack"
desc = "A backpack specially designed to repel stains and hazardous liquids."
icon_state = "chempack"
item_state = "chempack"
/obj/item/weapon/storage/backpack/genetics
/obj/item/storage/backpack/genetics
name = "genetics backpack"
desc = "A bag designed to be super tough, just in case someone hulks out on you."
icon_state = "genepack"
item_state = "genepack"
/obj/item/weapon/storage/backpack/science
/obj/item/storage/backpack/science
name = "science backpack"
desc = "A specially designed backpack. It's fire resistant and smells vaguely of plasma."
icon_state = "toxpack"
item_state = "toxpack"
resistance_flags = 0
/obj/item/weapon/storage/backpack/virology
/obj/item/storage/backpack/virology
name = "virology backpack"
desc = "A backpack made of hypo-allergenic fibers. It's designed to help prevent the spread of disease. Smells like monkey."
icon_state = "viropack"
@@ -190,94 +190,94 @@
* Satchel Types
*/
/obj/item/weapon/storage/backpack/satchel
/obj/item/storage/backpack/satchel
name = "satchel"
desc = "A trendy looking satchel."
icon_state = "satchel-norm"
species_exception = list(/datum/species/angel) //satchels can be equipped since they are on the side, not back
/obj/item/weapon/storage/backpack/satchel/leather
/obj/item/storage/backpack/satchel/leather
name = "leather satchel"
desc = "It's a very fancy satchel made with fine leather."
icon_state = "satchel"
resistance_flags = 0
/obj/item/weapon/storage/backpack/satchel/leather/withwallet/PopulateContents()
new /obj/item/weapon/storage/wallet/random(src)
/obj/item/storage/backpack/satchel/leather/withwallet/PopulateContents()
new /obj/item/storage/wallet/random(src)
/obj/item/weapon/storage/backpack/satchel/eng
/obj/item/storage/backpack/satchel/eng
name = "industrial satchel"
desc = "A tough satchel with extra pockets."
icon_state = "satchel-eng"
item_state = "engiepack"
resistance_flags = 0
/obj/item/weapon/storage/backpack/satchel/med
/obj/item/storage/backpack/satchel/med
name = "medical satchel"
desc = "A sterile satchel used in medical departments."
icon_state = "satchel-med"
item_state = "medicalpack"
/obj/item/weapon/storage/backpack/satchel/vir
/obj/item/storage/backpack/satchel/vir
name = "virologist satchel"
desc = "A sterile satchel with virologist colours."
icon_state = "satchel-vir"
item_state = "satchel-vir"
/obj/item/weapon/storage/backpack/satchel/chem
/obj/item/storage/backpack/satchel/chem
name = "chemist satchel"
desc = "A sterile satchel with chemist colours."
icon_state = "satchel-chem"
item_state = "satchel-chem"
/obj/item/weapon/storage/backpack/satchel/gen
/obj/item/storage/backpack/satchel/gen
name = "geneticist satchel"
desc = "A sterile satchel with geneticist colours."
icon_state = "satchel-gen"
item_state = "satchel-gen"
/obj/item/weapon/storage/backpack/satchel/tox
/obj/item/storage/backpack/satchel/tox
name = "scientist satchel"
desc = "Useful for holding research materials."
icon_state = "satchel-tox"
item_state = "satchel-tox"
resistance_flags = 0
/obj/item/weapon/storage/backpack/satchel/hyd
/obj/item/storage/backpack/satchel/hyd
name = "botanist satchel"
desc = "A satchel made of all natural fibers."
icon_state = "satchel-hyd"
item_state = "satchel-hyd"
/obj/item/weapon/storage/backpack/satchel/sec
/obj/item/storage/backpack/satchel/sec
name = "security satchel"
desc = "A robust satchel for security related needs."
icon_state = "satchel-sec"
item_state = "securitypack"
/obj/item/weapon/storage/backpack/satchel/explorer
/obj/item/storage/backpack/satchel/explorer
name = "explorer satchel"
desc = "A robust satchel for stashing your loot."
icon_state = "satchel-explorer"
item_state = "securitypack"
/obj/item/weapon/storage/backpack/satchel/cap
/obj/item/storage/backpack/satchel/cap
name = "captain's satchel"
desc = "An exclusive satchel for Nanotrasen officers."
icon_state = "satchel-cap"
item_state = "captainpack"
resistance_flags = 0
/obj/item/weapon/storage/backpack/satchel/flat
/obj/item/storage/backpack/satchel/flat
name = "smuggler's satchel"
desc = "A very slim satchel that can easily fit into tight spaces."
icon_state = "satchel-flat"
w_class = WEIGHT_CLASS_NORMAL //Can fit in backpacks itself.
max_combined_w_class = 15
level = 1
cant_hold = list(/obj/item/weapon/storage/backpack/satchel/flat) //muh recursive backpacks
cant_hold = list(/obj/item/storage/backpack/satchel/flat) //muh recursive backpacks
/obj/item/weapon/storage/backpack/satchel/flat/hide(var/intact)
/obj/item/storage/backpack/satchel/flat/hide(var/intact)
if(intact)
invisibility = INVISIBILITY_MAXIMUM
anchored = TRUE //otherwise you can start pulling, cover it, and drag around an invisible backpack.
@@ -287,30 +287,30 @@
anchored = FALSE
icon_state = initial(icon_state)
/obj/item/weapon/storage/backpack/satchel/flat/Initialize(mapload)
/obj/item/storage/backpack/satchel/flat/Initialize(mapload)
..()
SSpersistence.new_secret_satchels += src
/obj/item/weapon/storage/backpack/satchel/flat/PopulateContents()
/obj/item/storage/backpack/satchel/flat/PopulateContents()
new /obj/item/stack/tile/plasteel(src)
new /obj/item/weapon/crowbar(src)
new /obj/item/crowbar(src)
/obj/item/weapon/storage/backpack/satchel/flat/Destroy()
/obj/item/storage/backpack/satchel/flat/Destroy()
SSpersistence.new_secret_satchels -= src
return ..()
/obj/item/weapon/storage/backpack/satchel/flat/secret
/obj/item/storage/backpack/satchel/flat/secret
var/list/reward_one_of_these = list() //Intended for map editing
var/list/reward_all_of_these = list() //use paths!
var/revealed = 0
/obj/item/weapon/storage/backpack/satchel/flat/secret/Initialize()
/obj/item/storage/backpack/satchel/flat/secret/Initialize()
..()
if(isfloorturf(loc) && !istype(loc, /turf/open/floor/plating/))
hide(1)
/obj/item/weapon/storage/backpack/satchel/flat/secret/hide(intact)
/obj/item/storage/backpack/satchel/flat/secret/hide(intact)
..()
if(!intact && !revealed)
if(reward_one_of_these.len > 0)
@@ -320,7 +320,7 @@
new R(src)
revealed = 1
/obj/item/weapon/storage/backpack/duffelbag
/obj/item/storage/backpack/duffelbag
name = "duffel bag"
desc = "A large duffel bag for holding extra things."
icon_state = "duffel"
@@ -328,88 +328,88 @@
slowdown = 1
max_combined_w_class = 30
/obj/item/weapon/storage/backpack/duffelbag/captain
/obj/item/storage/backpack/duffelbag/captain
name = "captain's duffel bag"
desc = "A large duffel bag for holding extra captainly goods."
icon_state = "duffel-captain"
item_state = "duffel-captain"
resistance_flags = 0
/obj/item/weapon/storage/backpack/duffelbag/med
/obj/item/storage/backpack/duffelbag/med
name = "medical duffel bag"
desc = "A large duffel bag for holding extra medical supplies."
icon_state = "duffel-med"
item_state = "duffel-med"
/obj/item/weapon/storage/backpack/duffelbag/med/surgery
/obj/item/storage/backpack/duffelbag/med/surgery
name = "surgical duffel bag"
desc = "A large duffel bag for holding extra medical supplies - this one seems to be designed for holding surgical tools."
/obj/item/weapon/storage/backpack/duffelbag/med/surgery/PopulateContents()
new /obj/item/weapon/scalpel(src)
new /obj/item/weapon/hemostat(src)
new /obj/item/weapon/retractor(src)
new /obj/item/weapon/circular_saw(src)
new /obj/item/weapon/surgicaldrill(src)
new /obj/item/weapon/cautery(src)
new /obj/item/weapon/surgical_drapes(src)
/obj/item/storage/backpack/duffelbag/med/surgery/PopulateContents()
new /obj/item/scalpel(src)
new /obj/item/hemostat(src)
new /obj/item/retractor(src)
new /obj/item/circular_saw(src)
new /obj/item/surgicaldrill(src)
new /obj/item/cautery(src)
new /obj/item/surgical_drapes(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/weapon/razor(src)
new /obj/item/razor(src)
/obj/item/weapon/storage/backpack/duffelbag/sec
/obj/item/storage/backpack/duffelbag/sec
name = "security duffel bag"
desc = "A large duffel bag for holding extra security supplies and ammunition."
icon_state = "duffel-sec"
item_state = "duffel-sec"
/obj/item/weapon/storage/backpack/duffelbag/sec/surgery
/obj/item/storage/backpack/duffelbag/sec/surgery
name = "surgical duffel bag"
desc = "A large duffel bag for holding extra supplies - this one has a material inlay with space for various sharp-looking tools."
/obj/item/weapon/storage/backpack/duffelbag/sec/surgery/PopulateContents()
new /obj/item/weapon/scalpel(src)
new /obj/item/weapon/hemostat(src)
new /obj/item/weapon/retractor(src)
new /obj/item/weapon/circular_saw(src)
new /obj/item/weapon/surgicaldrill(src)
new /obj/item/weapon/cautery(src)
new /obj/item/weapon/surgical_drapes(src)
/obj/item/storage/backpack/duffelbag/sec/surgery/PopulateContents()
new /obj/item/scalpel(src)
new /obj/item/hemostat(src)
new /obj/item/retractor(src)
new /obj/item/circular_saw(src)
new /obj/item/surgicaldrill(src)
new /obj/item/cautery(src)
new /obj/item/surgical_drapes(src)
new /obj/item/clothing/mask/surgical(src)
/obj/item/weapon/storage/backpack/duffelbag/engineering
/obj/item/storage/backpack/duffelbag/engineering
name = "industrial duffel bag"
desc = "A large duffel bag for holding extra tools and supplies."
icon_state = "duffel-eng"
item_state = "duffel-eng"
resistance_flags = 0
/obj/item/weapon/storage/backpack/duffelbag/drone
/obj/item/storage/backpack/duffelbag/drone
name = "drone duffel bag"
desc = "A large duffel bag for holding tools and hats."
icon_state = "duffel-drone"
item_state = "duffel-drone"
resistance_flags = FIRE_PROOF
/obj/item/weapon/storage/backpack/duffelbag/drone/PopulateContents()
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wrench(src)
new /obj/item/weapon/weldingtool(src)
new /obj/item/weapon/crowbar(src)
/obj/item/storage/backpack/duffelbag/drone/PopulateContents()
new /obj/item/screwdriver(src)
new /obj/item/wrench(src)
new /obj/item/weldingtool(src)
new /obj/item/crowbar(src)
new /obj/item/stack/cable_coil/random(src)
new /obj/item/weapon/wirecutters(src)
new /obj/item/wirecutters(src)
new /obj/item/device/multitool(src)
/obj/item/weapon/storage/backpack/duffelbag/clown
/obj/item/storage/backpack/duffelbag/clown
name = "clown's duffel bag"
desc = "A large duffel bag for holding lots of funny gags!"
icon_state = "duffel-clown"
item_state = "duffel-clown"
/obj/item/weapon/storage/backpack/duffelbag/clown/cream_pie/PopulateContents()
/obj/item/storage/backpack/duffelbag/clown/cream_pie/PopulateContents()
for(var/i in 1 to 10)
new /obj/item/weapon/reagent_containers/food/snacks/pie/cream(src)
new /obj/item/reagent_containers/food/snacks/pie/cream(src)
/obj/item/weapon/storage/backpack/duffelbag/syndie
/obj/item/storage/backpack/duffelbag/syndie
name = "suspicious looking duffel bag"
desc = "A large duffel bag for holding extra tactical supplies."
icon_state = "duffel-syndie"
@@ -418,12 +418,12 @@
silent = 1
slowdown = 0
/obj/item/weapon/storage/backpack/duffelbag/syndie/hitman
/obj/item/storage/backpack/duffelbag/syndie/hitman
desc = "A large duffel bag for holding extra things. There is a NanoTrasen logo on the back."
icon_state = "duffel-syndieammo"
item_state = "duffel-syndieammo"
/obj/item/weapon/storage/backpack/duffelbag/syndie/hitman/PopulateContents()
/obj/item/storage/backpack/duffelbag/syndie/hitman/PopulateContents()
new /obj/item/clothing/under/lawyer/blacksuit(src)
new /obj/item/clothing/accessory/waistcoat(src)
new /obj/item/clothing/suit/toggle/lawyer/black(src)
@@ -432,119 +432,119 @@
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/clothing/head/fedora(src)
/obj/item/weapon/storage/backpack/duffelbag/syndie/med
/obj/item/storage/backpack/duffelbag/syndie/med
name = "medical duffel bag"
desc = "A large duffel bag for holding extra tactical medical supplies."
icon_state = "duffel-syndiemed"
item_state = "duffel-syndiemed"
/obj/item/weapon/storage/backpack/duffelbag/syndie/surgery
/obj/item/storage/backpack/duffelbag/syndie/surgery
name = "surgery duffel bag"
desc = "A suspicious looking duffel bag for holding surgery tools."
icon_state = "duffel-syndiemed"
item_state = "duffel-syndiemed"
/obj/item/weapon/storage/backpack/duffelbag/syndie/surgery/PopulateContents()
new /obj/item/weapon/scalpel(src)
new /obj/item/weapon/hemostat(src)
new /obj/item/weapon/retractor(src)
new /obj/item/weapon/circular_saw(src)
new /obj/item/weapon/surgicaldrill(src)
new /obj/item/weapon/cautery(src)
new /obj/item/weapon/surgical_drapes(src)
/obj/item/storage/backpack/duffelbag/syndie/surgery/PopulateContents()
new /obj/item/scalpel(src)
new /obj/item/hemostat(src)
new /obj/item/retractor(src)
new /obj/item/circular_saw(src)
new /obj/item/surgicaldrill(src)
new /obj/item/cautery(src)
new /obj/item/surgical_drapes(src)
new /obj/item/clothing/suit/straight_jacket(src)
new /obj/item/clothing/mask/muzzle(src)
new /obj/item/device/mmi/syndie(src)
/obj/item/weapon/storage/backpack/duffelbag/syndie/ammo
/obj/item/storage/backpack/duffelbag/syndie/ammo
name = "ammunition duffel bag"
desc = "A large duffel bag for holding extra weapons ammunition and supplies."
icon_state = "duffel-syndieammo"
item_state = "duffel-syndieammo"
/obj/item/weapon/storage/backpack/duffelbag/syndie/ammo/shotgun
/obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun
desc = "A large duffel bag, packed to the brim with Bulldog shotgun ammo."
/obj/item/weapon/storage/backpack/duffelbag/syndie/ammo/shotgun/PopulateContents()
/obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun/PopulateContents()
for(var/i in 1 to 6)
new /obj/item/ammo_box/magazine/m12g(src)
new /obj/item/ammo_box/magazine/m12g/buckshot(src)
new /obj/item/ammo_box/magazine/m12g/slug(src)
new /obj/item/ammo_box/magazine/m12g/dragon(src)
/obj/item/weapon/storage/backpack/duffelbag/syndie/ammo/smg
/obj/item/storage/backpack/duffelbag/syndie/ammo/smg
desc = "A large duffel bag, packed to the brim with C20r magazines."
/obj/item/weapon/storage/backpack/duffelbag/syndie/ammo/smg/PopulateContents()
/obj/item/storage/backpack/duffelbag/syndie/ammo/smg/PopulateContents()
for(var/i in 1 to 9)
new /obj/item/ammo_box/magazine/smgm45(src)
/obj/item/weapon/storage/backpack/duffelbag/syndie/c20rbundle
/obj/item/storage/backpack/duffelbag/syndie/c20rbundle
desc = "A large duffel bag containing a C20r, some magazines, and a cheap looking suppressor."
/obj/item/weapon/storage/backpack/duffelbag/syndie/c20rbundle/PopulateContents()
/obj/item/storage/backpack/duffelbag/syndie/c20rbundle/PopulateContents()
new /obj/item/ammo_box/magazine/smgm45(src)
new /obj/item/ammo_box/magazine/smgm45(src)
new /obj/item/weapon/gun/ballistic/automatic/c20r(src)
new /obj/item/weapon/suppressor/specialoffer(src)
new /obj/item/gun/ballistic/automatic/c20r(src)
new /obj/item/suppressor/specialoffer(src)
/obj/item/weapon/storage/backpack/duffelbag/syndie/bulldogbundle
/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle
desc = "A large duffel bag containing a Bulldog, several drums, and a collapsed hardsuit."
/obj/item/weapon/storage/backpack/duffelbag/syndie/bulldogbundle/PopulateContents()
/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle/PopulateContents()
new /obj/item/ammo_box/magazine/m12g(src)
new /obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog(src)
new /obj/item/gun/ballistic/automatic/shotgun/bulldog(src)
new /obj/item/ammo_box/magazine/m12g/buckshot(src)
new /obj/item/clothing/glasses/thermal/syndi(src)
/obj/item/weapon/storage/backpack/duffelbag/syndie/med/medicalbundle
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle
desc = "A large duffel bag containing a medical equipment, a Donksoft machine gun, a big jumbo box of darts, and a knock-off pair of magboots."
/obj/item/weapon/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents()
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents()
new /obj/item/clothing/shoes/magboots/syndie(src)
new /obj/item/weapon/storage/firstaid/tactical(src)
new /obj/item/weapon/gun/ballistic/automatic/l6_saw/toy(src)
new /obj/item/storage/firstaid/tactical(src)
new /obj/item/gun/ballistic/automatic/l6_saw/toy(src)
new /obj/item/ammo_box/foambox/riot(src)
/obj/item/weapon/storage/backpack/duffelbag/syndie/med/medicalbundle
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle
desc = "A large duffel bag containing a medical equipment, a Donksoft machine gun, a big jumbo box of darts, and a knock-off pair of magboots."
/obj/item/weapon/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents()
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents()
new /obj/item/clothing/shoes/magboots/syndie(src)
new /obj/item/weapon/storage/firstaid/tactical(src)
new /obj/item/weapon/gun/ballistic/automatic/l6_saw/toy(src)
new /obj/item/storage/firstaid/tactical(src)
new /obj/item/gun/ballistic/automatic/l6_saw/toy(src)
new /obj/item/ammo_box/foambox/riot(src)
/obj/item/weapon/storage/backpack/duffelbag/syndie/med/bioterrorbundle
/obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle
desc = "A large duffel bag containing a deadly chemicals, a chemical spray, chemical grenade, a Donksoft assault rifle, riot grade darts, a minature syringe gun, and a box of syringes"
/obj/item/weapon/storage/backpack/duffelbag/syndie/med/bioterrorbundle/PopulateContents()
new /obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror(src)
new /obj/item/weapon/storage/box/syndie_kit/chemical(src)
new /obj/item/weapon/gun/syringe/syndicate(src)
new /obj/item/weapon/gun/ballistic/automatic/c20r/toy(src)
new /obj/item/weapon/storage/box/syringes(src)
/obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle/PopulateContents()
new /obj/item/reagent_containers/spray/chemsprayer/bioterror(src)
new /obj/item/storage/box/syndie_kit/chemical(src)
new /obj/item/gun/syringe/syndicate(src)
new /obj/item/gun/ballistic/automatic/c20r/toy(src)
new /obj/item/storage/box/syringes(src)
new /obj/item/ammo_box/foambox/riot(src)
new /obj/item/weapon/grenade/chem_grenade/bioterrorfoam(src)
new /obj/item/grenade/chem_grenade/bioterrorfoam(src)
/obj/item/weapon/storage/backpack/duffelbag/syndie/c4/PopulateContents()
/obj/item/storage/backpack/duffelbag/syndie/c4/PopulateContents()
for(var/i in 1 to 10)
new /obj/item/weapon/grenade/plastic/c4(src)
new /obj/item/grenade/plastic/c4(src)
/obj/item/weapon/storage/backpack/duffelbag/syndie/x4/PopulateContents()
/obj/item/storage/backpack/duffelbag/syndie/x4/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/weapon/grenade/plastic/x4(src)
new /obj/item/grenade/plastic/x4(src)
/obj/item/weapon/storage/backpack/duffelbag/syndie/firestarter
/obj/item/storage/backpack/duffelbag/syndie/firestarter
desc = "A large duffel bag containing New Russian pyro backpack sprayer, a pistol, a pipebomb, fireproof hardsuit, ammo, and other equipment."
/obj/item/weapon/storage/backpack/duffelbag/syndie/firestarter/PopulateContents()
/obj/item/storage/backpack/duffelbag/syndie/firestarter/PopulateContents()
new /obj/item/clothing/under/syndicate/soviet(src)
new /obj/item/weapon/watertank/operator(src)
new /obj/item/watertank/operator(src)
new /obj/item/clothing/suit/space/hardsuit/syndi/elite(src)
new /obj/item/weapon/gun/ballistic/automatic/pistol/APS(src)
new /obj/item/gun/ballistic/automatic/pistol/APS(src)
new /obj/item/ammo_box/magazine/pistolm9mm(src)
new /obj/item/ammo_box/magazine/pistolm9mm(src)
new /obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/badminka(src)
new /obj/item/weapon/reagent_containers/syringe/stimulants(src)
new /obj/item/weapon/grenade/syndieminibomb(src)
new /obj/item/reagent_containers/food/drinks/bottle/vodka/badminka(src)
new /obj/item/reagent_containers/syringe/stimulants(src)
new /obj/item/grenade/syndieminibomb(src)
+35 -35
View File
@@ -16,7 +16,7 @@
*/
// Generic non-item
/obj/item/weapon/storage/bag
/obj/item/storage/bag
allow_quick_gather = 1
allow_quick_empty = 1
display_contents_with_number = 1 // should work fine now
@@ -26,7 +26,7 @@
// -----------------------------
// Trash bag
// -----------------------------
/obj/item/weapon/storage/bag/trash
/obj/item/storage/bag/trash
name = "trash bag"
desc = "It's the heavy-duty black polymer kind. Time to take out the trash!"
icon = 'icons/obj/janitor.dmi'
@@ -40,14 +40,14 @@
max_combined_w_class = 30
storage_slots = 30
can_hold = list() // any
cant_hold = list(/obj/item/weapon/disk/nuclear)
cant_hold = list(/obj/item/disk/nuclear)
/obj/item/weapon/storage/bag/trash/suicide_act(mob/user)
/obj/item/storage/bag/trash/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] puts [src] over [user.p_their()] head and starts chomping at the insides! Disgusting!</span>")
playsound(loc, 'sound/items/eatfood.ogg', 50, 1, -1)
return (TOXLOSS)
/obj/item/weapon/storage/bag/trash/update_icon()
/obj/item/storage/bag/trash/update_icon()
if(contents.len == 0)
icon_state = "[initial(icon_state)]"
else if(contents.len < 12)
@@ -56,17 +56,17 @@
icon_state = "[initial(icon_state)]2"
else icon_state = "[initial(icon_state)]3"
/obj/item/weapon/storage/bag/trash/cyborg
/obj/item/storage/bag/trash/cyborg
/obj/item/weapon/storage/bag/trash/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J)
/obj/item/storage/bag/trash/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J)
J.put_in_cart(src, user)
J.mybag=src
J.update_icon()
/obj/item/weapon/storage/bag/trash/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J)
/obj/item/storage/bag/trash/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J)
return
/obj/item/weapon/storage/bag/trash/bluespace
/obj/item/storage/bag/trash/bluespace
name = "trash bag of holding"
desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage."
icon_state = "bluetrashbag"
@@ -78,7 +78,7 @@
// Mining Satchel
// -----------------------------
/obj/item/weapon/storage/bag/ore
/obj/item/storage/bag/ore
name = "mining satchel"
desc = "This little bugger can be used to store and transport ores."
icon = 'icons/obj/mining.dmi'
@@ -89,13 +89,13 @@
storage_slots = 50
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class
max_w_class = WEIGHT_CLASS_NORMAL
can_hold = list(/obj/item/weapon/ore)
can_hold = list(/obj/item/ore)
var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it
/obj/item/weapon/storage/bag/ore/cyborg
/obj/item/storage/bag/ore/cyborg
name = "cyborg mining satchel"
/obj/item/weapon/storage/bag/ore/holding //miners, your messiah has arrived
/obj/item/storage/bag/ore/holding //miners, your messiah has arrived
name = "mining satchel of holding"
desc = "A revolution in convenience, this satchel allows for huge amounts of ore storage. It's been outfitted with anti-malfunction safety measures."
storage_slots = INFINITY
@@ -107,7 +107,7 @@
// Plant bag
// -----------------------------
/obj/item/weapon/storage/bag/plants
/obj/item/storage/bag/plants
name = "plant bag"
icon = 'icons/obj/hydroponics/equipment.dmi'
icon_state = "plantbag"
@@ -115,18 +115,18 @@
max_combined_w_class = 100 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class
max_w_class = WEIGHT_CLASS_NORMAL
w_class = WEIGHT_CLASS_TINY
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown, /obj/item/seeds, /obj/item/weapon/grown, /obj/item/weapon/reagent_containers/honeycomb)
can_hold = list(/obj/item/reagent_containers/food/snacks/grown, /obj/item/seeds, /obj/item/grown, /obj/item/reagent_containers/honeycomb)
resistance_flags = FLAMMABLE
////////
/obj/item/weapon/storage/bag/plants/portaseeder
/obj/item/storage/bag/plants/portaseeder
name = "portable seed extractor"
desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant."
icon_state = "portaseeder"
origin_tech = "biotech=3;engineering=2"
/obj/item/weapon/storage/bag/plants/portaseeder/verb/dissolve_contents()
/obj/item/storage/bag/plants/portaseeder/verb/dissolve_contents()
set name = "Activate Seed Extraction"
set category = "Object"
set desc = "Activate to convert your plants into plantable seeds."
@@ -143,7 +143,7 @@
// Because it stacks stacks, this doesn't operate normally.
// However, making it a storage/bag allows us to reuse existing code in some places. -Sayu
/obj/item/weapon/storage/bag/sheetsnatcher
/obj/item/storage/bag/sheetsnatcher
name = "sheet snatcher"
desc = "A patented Nanotrasen storage system designed for any kind of mineral sheet."
icon = 'icons/obj/mining.dmi'
@@ -154,7 +154,7 @@
allow_quick_empty = 1 // this function is superceded
/obj/item/weapon/storage/bag/sheetsnatcher/can_be_inserted(obj/item/W, stop_messages = 0)
/obj/item/storage/bag/sheetsnatcher/can_be_inserted(obj/item/W, stop_messages = 0)
if(!istype(W, /obj/item/stack/sheet) || istype(W, /obj/item/stack/sheet/mineral/sandstone) || istype(W, /obj/item/stack/sheet/mineral/wood))
if(!stop_messages)
to_chat(usr, "The snatcher does not accept [W].")
@@ -170,7 +170,7 @@
// Modified handle_item_insertion. Would prefer not to, but...
/obj/item/weapon/storage/bag/sheetsnatcher/handle_item_insertion(obj/item/W, prevent_warning = 0)
/obj/item/storage/bag/sheetsnatcher/handle_item_insertion(obj/item/W, prevent_warning = 0)
var/obj/item/stack/sheet/S = W
if(!istype(S)) return 0
@@ -212,7 +212,7 @@
// Sets up numbered display to show the stack size of each stored mineral
// NOTE: numbered display is turned off currently because it's broken
/obj/item/weapon/storage/bag/sheetsnatcher/orient2hud(mob/user)
/obj/item/storage/bag/sheetsnatcher/orient2hud(mob/user)
var/adjusted_contents = contents.len
//Numbered contents display
@@ -235,7 +235,7 @@
// Modified quick_empty verb drops appropriate sized stacks
/obj/item/weapon/storage/bag/sheetsnatcher/quick_empty()
/obj/item/storage/bag/sheetsnatcher/quick_empty()
var/location = get_turf(src)
for(var/obj/item/stack/sheet/S in contents)
while(S.amount)
@@ -251,7 +251,7 @@
update_icon()
// Instead of removing
/obj/item/weapon/storage/bag/sheetsnatcher/remove_from_storage(obj/item/W, atom/new_location)
/obj/item/storage/bag/sheetsnatcher/remove_from_storage(obj/item/W, atom/new_location)
var/obj/item/stack/sheet/S = W
if(!istype(S)) return 0
@@ -271,7 +271,7 @@
// Sheet Snatcher (Cyborg)
// -----------------------------
/obj/item/weapon/storage/bag/sheetsnatcher/borg
/obj/item/storage/bag/sheetsnatcher/borg
name = "sheet snatcher 9000"
desc = ""
capacity = 500//Borgs get more because >specialization
@@ -281,7 +281,7 @@
// Book bag
// -----------------------------
/obj/item/weapon/storage/bag/books
/obj/item/storage/bag/books
name = "book bag"
desc = "A bag for books."
icon = 'icons/obj/library.dmi'
@@ -291,13 +291,13 @@
max_combined_w_class = 21
max_w_class = WEIGHT_CLASS_NORMAL
w_class = WEIGHT_CLASS_BULKY //Bigger than a book because physics
can_hold = list(/obj/item/weapon/book, /obj/item/weapon/storage/book, /obj/item/weapon/spellbook)
can_hold = list(/obj/item/book, /obj/item/storage/book, /obj/item/spellbook)
resistance_flags = FLAMMABLE
/*
* Trays - Agouri
*/
/obj/item/weapon/storage/bag/tray
/obj/item/storage/bag/tray
name = "tray"
icon = 'icons/obj/food/containers.dmi'
icon_state = "tray"
@@ -311,7 +311,7 @@
materials = list(MAT_METAL=3000)
preposition = "on"
/obj/item/weapon/storage/bag/tray/attack(mob/living/M, mob/living/user)
/obj/item/storage/bag/tray/attack(mob/living/M, mob/living/user)
..()
// Drop all the things. All of them.
var/list/obj/item/oldContents = contents.Copy()
@@ -334,16 +334,16 @@
if(prob(10))
M.Knockdown(40)
/obj/item/weapon/storage/bag/tray/proc/rebuild_overlays()
/obj/item/storage/bag/tray/proc/rebuild_overlays()
cut_overlays()
for(var/obj/item/I in contents)
add_overlay(mutable_appearance(I.icon, I.icon_state))
/obj/item/weapon/storage/bag/tray/remove_from_storage(obj/item/W as obj, atom/new_location)
/obj/item/storage/bag/tray/remove_from_storage(obj/item/W as obj, atom/new_location)
..()
rebuild_overlays()
/obj/item/weapon/storage/bag/tray/handle_item_insertion(obj/item/I, prevent_warning = 0)
/obj/item/storage/bag/tray/handle_item_insertion(obj/item/I, prevent_warning = 0)
add_overlay(mutable_appearance(I.icon, I.icon_state))
. = ..()
@@ -352,7 +352,7 @@
* Chemistry bag
*/
/obj/item/weapon/storage/bag/chemistry
/obj/item/storage/bag/chemistry
name = "chemistry bag"
icon = 'icons/obj/chemical.dmi'
icon_state = "bag"
@@ -361,14 +361,14 @@
max_combined_w_class = 200
w_class = WEIGHT_CLASS_TINY
preposition = "in"
can_hold = list(/obj/item/weapon/reagent_containers/pill, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle)
can_hold = list(/obj/item/reagent_containers/pill, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle)
resistance_flags = FLAMMABLE
/*
* Biowaste bag (mostly for xenobiologists)
*/
/obj/item/weapon/storage/bag/bio
/obj/item/storage/bag/bio
name = "bio bag"
icon = 'icons/obj/chemical.dmi'
icon_state = "biobag"
@@ -377,5 +377,5 @@
max_combined_w_class = 200
w_class = WEIGHT_CLASS_TINY
preposition = "in"
can_hold = list(/obj/item/slime_extract, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/blood, /obj/item/weapon/reagent_containers/hypospray/medipen, /obj/item/weapon/reagent_containers/food/snacks/deadmouse, /obj/item/weapon/reagent_containers/food/snacks/monkeycube)
can_hold = list(/obj/item/slime_extract, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/blood, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/food/snacks/deadmouse, /obj/item/reagent_containers/food/snacks/monkeycube)
resistance_flags = FLAMMABLE
+189 -189
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/storage/belt
/obj/item/storage/belt
name = "belt"
desc = "Can hold various things."
icon = 'icons/obj/clothing/belts.dmi'
@@ -9,7 +9,7 @@
max_integrity = 300
var/content_overlays = FALSE //If this is true, the belt will gain overlays based on what it's holding
/obj/item/weapon/storage/belt/update_icon()
/obj/item/storage/belt/update_icon()
cut_overlays()
if(content_overlays)
for(var/obj/item/I in contents)
@@ -17,80 +17,80 @@
add_overlay(M)
..()
/obj/item/weapon/storage/belt/Initialize()
/obj/item/storage/belt/Initialize()
. = ..()
update_icon()
/obj/item/weapon/storage/belt/utility
/obj/item/storage/belt/utility
name = "toolbelt" //Carn: utility belt is nicer, but it bamboozles the text parsing.
desc = "Holds tools."
icon_state = "utilitybelt"
item_state = "utility"
can_hold = list(
/obj/item/weapon/crowbar,
/obj/item/weapon/screwdriver,
/obj/item/weapon/weldingtool,
/obj/item/weapon/wirecutters,
/obj/item/weapon/wrench,
/obj/item/crowbar,
/obj/item/screwdriver,
/obj/item/weldingtool,
/obj/item/wirecutters,
/obj/item/wrench,
/obj/item/device/multitool,
/obj/item/device/flashlight,
/obj/item/stack/cable_coil,
/obj/item/device/t_scanner,
/obj/item/device/analyzer,
/obj/item/weapon/extinguisher/mini,
/obj/item/extinguisher/mini,
/obj/item/device/radio,
/obj/item/clothing/gloves
)
content_overlays = TRUE
/obj/item/weapon/storage/belt/utility/chief
/obj/item/storage/belt/utility/chief
name = "\improper Chief Engineer's toolbelt" //"the Chief Engineer's toolbelt", because "Chief Engineer's toolbelt" is not a proper noun
desc = "Holds tools, looks snazzy."
icon_state = "utilitybelt_ce"
item_state = "utility_ce"
/obj/item/weapon/storage/belt/utility/chief/full/PopulateContents()
new /obj/item/weapon/screwdriver/power(src)
new /obj/item/weapon/crowbar/power(src)
new /obj/item/weapon/weldingtool/experimental(src)//This can be changed if this is too much
/obj/item/storage/belt/utility/chief/full/PopulateContents()
new /obj/item/screwdriver/power(src)
new /obj/item/crowbar/power(src)
new /obj/item/weldingtool/experimental(src)//This can be changed if this is too much
new /obj/item/device/multitool(src)
new /obj/item/stack/cable_coil(src,30,pick("red","yellow","orange"))
new /obj/item/weapon/extinguisher/mini(src)
new /obj/item/extinguisher/mini(src)
new /obj/item/device/analyzer(src)
//much roomier now that we've managed to remove two tools
/obj/item/weapon/storage/belt/utility/full/PopulateContents()
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wrench(src)
new /obj/item/weapon/weldingtool(src)
new /obj/item/weapon/crowbar(src)
new /obj/item/weapon/wirecutters(src)
/obj/item/storage/belt/utility/full/PopulateContents()
new /obj/item/screwdriver(src)
new /obj/item/wrench(src)
new /obj/item/weldingtool(src)
new /obj/item/crowbar(src)
new /obj/item/wirecutters(src)
new /obj/item/device/multitool(src)
new /obj/item/stack/cable_coil(src,30,pick("red","yellow","orange"))
/obj/item/weapon/storage/belt/utility/full/engi/PopulateContents()
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wrench(src)
new /obj/item/weapon/weldingtool/largetank(src)
new /obj/item/weapon/crowbar(src)
new /obj/item/weapon/wirecutters(src)
/obj/item/storage/belt/utility/full/engi/PopulateContents()
new /obj/item/screwdriver(src)
new /obj/item/wrench(src)
new /obj/item/weldingtool/largetank(src)
new /obj/item/crowbar(src)
new /obj/item/wirecutters(src)
new /obj/item/device/multitool(src)
new /obj/item/stack/cable_coil(src,30,pick("red","yellow","orange"))
/obj/item/weapon/storage/belt/utility/atmostech/PopulateContents()
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wrench(src)
new /obj/item/weapon/weldingtool(src)
new /obj/item/weapon/crowbar(src)
new /obj/item/weapon/wirecutters(src)
/obj/item/storage/belt/utility/atmostech/PopulateContents()
new /obj/item/screwdriver(src)
new /obj/item/wrench(src)
new /obj/item/weldingtool(src)
new /obj/item/crowbar(src)
new /obj/item/wirecutters(src)
new /obj/item/device/t_scanner(src)
new /obj/item/weapon/extinguisher/mini(src)
new /obj/item/extinguisher/mini(src)
/obj/item/weapon/storage/belt/medical
/obj/item/storage/belt/medical
name = "medical belt"
desc = "Can hold various medical equipment."
icon_state = "medicalbelt"
@@ -98,48 +98,48 @@
max_w_class = WEIGHT_CLASS_BULKY
can_hold = list(
/obj/item/device/healthanalyzer,
/obj/item/weapon/dnainjector,
/obj/item/weapon/reagent_containers/dropper,
/obj/item/weapon/reagent_containers/glass/beaker,
/obj/item/weapon/reagent_containers/glass/bottle,
/obj/item/weapon/reagent_containers/pill,
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/lighter,
/obj/item/weapon/storage/fancy/cigarettes,
/obj/item/weapon/storage/pill_bottle,
/obj/item/dnainjector,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/glass/beaker,
/obj/item/reagent_containers/glass/bottle,
/obj/item/reagent_containers/pill,
/obj/item/reagent_containers/syringe,
/obj/item/lighter,
/obj/item/storage/fancy/cigarettes,
/obj/item/storage/pill_bottle,
/obj/item/stack/medical,
/obj/item/device/flashlight/pen,
/obj/item/weapon/extinguisher/mini,
/obj/item/weapon/reagent_containers/hypospray,
/obj/item/extinguisher/mini,
/obj/item/reagent_containers/hypospray,
/obj/item/device/sensor_device,
/obj/item/device/radio,
/obj/item/clothing/gloves/,
/obj/item/weapon/lazarus_injector,
/obj/item/weapon/bikehorn/rubberducky,
/obj/item/lazarus_injector,
/obj/item/bikehorn/rubberducky,
/obj/item/clothing/mask/surgical,
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/breath/medical,
/obj/item/weapon/surgical_drapes, //for true paramedics
/obj/item/weapon/scalpel,
/obj/item/weapon/circular_saw,
/obj/item/weapon/surgicaldrill,
/obj/item/weapon/retractor,
/obj/item/weapon/cautery,
/obj/item/weapon/hemostat,
/obj/item/surgical_drapes, //for true paramedics
/obj/item/scalpel,
/obj/item/circular_saw,
/obj/item/surgicaldrill,
/obj/item/retractor,
/obj/item/cautery,
/obj/item/hemostat,
/obj/item/device/geiger_counter,
/obj/item/clothing/neck/stethoscope,
/obj/item/weapon/stamp,
/obj/item/stamp,
/obj/item/clothing/glasses,
/obj/item/weapon/wrench/medical,
/obj/item/wrench/medical,
/obj/item/clothing/mask/muzzle,
/obj/item/weapon/storage/bag/chemistry,
/obj/item/weapon/storage/bag/bio,
/obj/item/weapon/reagent_containers/blood,
/obj/item/weapon/tank/internals/emergency_oxygen
/obj/item/storage/bag/chemistry,
/obj/item/storage/bag/bio,
/obj/item/reagent_containers/blood,
/obj/item/tank/internals/emergency_oxygen
)
/obj/item/weapon/storage/belt/security
/obj/item/storage/belt/security
name = "security belt"
desc = "Can hold security gear like handcuffs and flashes."
icon_state = "securitybelt"
@@ -147,36 +147,36 @@
storage_slots = 5
max_w_class = WEIGHT_CLASS_NORMAL //Because the baton wouldn't fit otherwise. - Neerti
can_hold = list(
/obj/item/weapon/melee/baton,
/obj/item/weapon/melee/classic_baton,
/obj/item/weapon/grenade,
/obj/item/weapon/reagent_containers/spray/pepper,
/obj/item/weapon/restraints/handcuffs,
/obj/item/melee/baton,
/obj/item/melee/classic_baton,
/obj/item/grenade,
/obj/item/reagent_containers/spray/pepper,
/obj/item/restraints/handcuffs,
/obj/item/device/assembly/flash/handheld,
/obj/item/clothing/glasses,
/obj/item/ammo_casing/shotgun,
/obj/item/ammo_box,
/obj/item/weapon/reagent_containers/food/snacks/donut,
/obj/item/weapon/reagent_containers/food/snacks/donut/jelly,
/obj/item/weapon/kitchen/knife/combat,
/obj/item/reagent_containers/food/snacks/donut,
/obj/item/reagent_containers/food/snacks/donut/jelly,
/obj/item/kitchen/knife/combat,
/obj/item/device/flashlight/seclite,
/obj/item/weapon/melee/classic_baton/telescopic,
/obj/item/melee/classic_baton/telescopic,
/obj/item/device/radio,
/obj/item/clothing/gloves/,
/obj/item/weapon/restraints/legcuffs/bola
/obj/item/restraints/legcuffs/bola
)
content_overlays = TRUE
/obj/item/weapon/storage/belt/security/full/PopulateContents()
new /obj/item/weapon/reagent_containers/spray/pepper(src)
new /obj/item/weapon/restraints/handcuffs(src)
new /obj/item/weapon/grenade/flashbang(src)
/obj/item/storage/belt/security/full/PopulateContents()
new /obj/item/reagent_containers/spray/pepper(src)
new /obj/item/restraints/handcuffs(src)
new /obj/item/grenade/flashbang(src)
new /obj/item/device/assembly/flash/handheld(src)
new /obj/item/weapon/melee/baton/loaded(src)
new /obj/item/melee/baton/loaded(src)
update_icon()
/obj/item/weapon/storage/belt/mining
/obj/item/storage/belt/mining
name = "explorer's webbing"
desc = "A versatile chest rig, cherished by miners and hunters alike."
icon_state = "explorer1"
@@ -186,59 +186,59 @@
max_w_class = WEIGHT_CLASS_BULKY //Pickaxes are big.
max_combined_w_class = 20 //Not an issue with this whitelist, probably.
can_hold = list(
/obj/item/weapon/crowbar,
/obj/item/weapon/screwdriver,
/obj/item/weapon/weldingtool,
/obj/item/weapon/wirecutters,
/obj/item/weapon/wrench,
/obj/item/crowbar,
/obj/item/screwdriver,
/obj/item/weldingtool,
/obj/item/wirecutters,
/obj/item/wrench,
/obj/item/device/flashlight,
/obj/item/stack/cable_coil,
/obj/item/device/analyzer,
/obj/item/weapon/extinguisher/mini,
/obj/item/extinguisher/mini,
/obj/item/device/radio,
/obj/item/clothing/gloves,
/obj/item/weapon/resonator,
/obj/item/resonator,
/obj/item/device/mining_scanner,
/obj/item/weapon/pickaxe,
/obj/item/pickaxe,
/obj/item/stack/sheet/animalhide,
/obj/item/stack/sheet/sinew,
/obj/item/stack/sheet/bone,
/obj/item/weapon/lighter,
/obj/item/weapon/storage/fancy/cigarettes,
/obj/item/weapon/reagent_containers/food/drinks/bottle,
/obj/item/lighter,
/obj/item/storage/fancy/cigarettes,
/obj/item/reagent_containers/food/drinks/bottle,
/obj/item/stack/medical,
/obj/item/weapon/kitchen/knife,
/obj/item/weapon/reagent_containers/hypospray,
/obj/item/kitchen/knife,
/obj/item/reagent_containers/hypospray,
/obj/item/device/gps,
/obj/item/weapon/storage/bag/ore,
/obj/item/weapon/survivalcapsule,
/obj/item/storage/bag/ore,
/obj/item/survivalcapsule,
/obj/item/device/t_scanner/adv_mining_scanner,
/obj/item/weapon/reagent_containers/pill,
/obj/item/weapon/storage/pill_bottle,
/obj/item/weapon/ore,
/obj/item/weapon/reagent_containers/food/drinks,
/obj/item/reagent_containers/pill,
/obj/item/storage/pill_bottle,
/obj/item/ore,
/obj/item/reagent_containers/food/drinks,
/obj/item/organ/regenerative_core,
/obj/item/device/wormhole_jaunter,
/obj/item/weapon/storage/bag/plants,
/obj/item/storage/bag/plants,
/obj/item/stack/marker_beacon
)
/obj/item/weapon/storage/belt/mining/vendor
contents = newlist(/obj/item/weapon/survivalcapsule)
/obj/item/storage/belt/mining/vendor
contents = newlist(/obj/item/survivalcapsule)
/obj/item/weapon/storage/belt/mining/alt
/obj/item/storage/belt/mining/alt
icon_state = "explorer2"
item_state = "explorer2"
/obj/item/weapon/storage/belt/mining/primitive
/obj/item/storage/belt/mining/primitive
name = "hunter's belt"
desc = "A versatile belt, woven from sinew."
storage_slots = 5
icon_state = "ebelt"
item_state = "ebelt"
/obj/item/weapon/storage/belt/soulstone
/obj/item/storage/belt/soulstone
name = "soul stone belt"
desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away"
icon_state = "soulstonebelt"
@@ -248,11 +248,11 @@
/obj/item/device/soulstone
)
/obj/item/weapon/storage/belt/soulstone/full/PopulateContents()
/obj/item/storage/belt/soulstone/full/PopulateContents()
for(var/i in 1 to 6)
new /obj/item/device/soulstone(src)
/obj/item/weapon/storage/belt/champion
/obj/item/storage/belt/champion
name = "championship belt"
desc = "Proves to the world that you are the strongest!"
icon_state = "championbelt"
@@ -263,44 +263,44 @@
/obj/item/clothing/mask/luchador
)
/obj/item/weapon/storage/belt/military
/obj/item/storage/belt/military
name = "chest rig"
desc = "A set of tactical webbing worn by Syndicate boarding parties."
icon_state = "militarywebbing"
item_state = "militarywebbing"
max_w_class = WEIGHT_CLASS_SMALL
/obj/item/weapon/storage/belt/military/abductor
/obj/item/storage/belt/military/abductor
name = "agent belt"
desc = "A belt used by abductor agents."
icon = 'icons/obj/abductor.dmi'
icon_state = "belt"
item_state = "security"
/obj/item/weapon/storage/belt/military/abductor/full/PopulateContents()
new /obj/item/weapon/screwdriver/abductor(src)
new /obj/item/weapon/wrench/abductor(src)
new /obj/item/weapon/weldingtool/abductor(src)
new /obj/item/weapon/crowbar/abductor(src)
new /obj/item/weapon/wirecutters/abductor(src)
/obj/item/storage/belt/military/abductor/full/PopulateContents()
new /obj/item/screwdriver/abductor(src)
new /obj/item/wrench/abductor(src)
new /obj/item/weldingtool/abductor(src)
new /obj/item/crowbar/abductor(src)
new /obj/item/wirecutters/abductor(src)
new /obj/item/device/multitool/abductor(src)
new /obj/item/stack/cable_coil(src,30,"white")
/obj/item/weapon/storage/belt/military/army
/obj/item/storage/belt/military/army
name = "army belt"
desc = "A belt used by military forces."
icon_state = "grenadebeltold"
item_state = "security"
/obj/item/weapon/storage/belt/military/assault
/obj/item/storage/belt/military/assault
name = "assault belt"
desc = "A tactical assault belt."
icon_state = "assaultbelt"
item_state = "security"
storage_slots = 6
/obj/item/weapon/storage/belt/grenade
/obj/item/storage/belt/grenade
name = "grenadier belt"
desc = "A belt for holding grenades."
icon_state = "grenadebeltnew"
@@ -310,66 +310,66 @@
storage_slots = 30
max_combined_w_class = 60 //needs to be this high
can_hold = list(
/obj/item/weapon/grenade,
/obj/item/weapon/screwdriver,
/obj/item/weapon/lighter,
/obj/item/grenade,
/obj/item/screwdriver,
/obj/item/lighter,
/obj/item/device/multitool,
/obj/item/weapon/reagent_containers/food/drinks/bottle/molotov,
/obj/item/weapon/grenade/plastic/c4,
/obj/item/reagent_containers/food/drinks/bottle/molotov,
/obj/item/grenade/plastic/c4,
)
/obj/item/weapon/storage/belt/grenade/full/PopulateContents()
new /obj/item/weapon/grenade/flashbang(src)
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/empgrenade(src)
new /obj/item/weapon/grenade/empgrenade(src)
new /obj/item/weapon/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/weapon/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/weapon/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/weapon/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/weapon/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/weapon/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/weapon/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/weapon/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/weapon/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/weapon/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/weapon/grenade/gluon(src)
new /obj/item/weapon/grenade/gluon(src)
new /obj/item/weapon/grenade/gluon(src)
new /obj/item/weapon/grenade/gluon(src)
new /obj/item/weapon/grenade/chem_grenade/incendiary(src)
new /obj/item/weapon/grenade/chem_grenade/incendiary(src)
new /obj/item/weapon/grenade/chem_grenade/facid(src)
new /obj/item/weapon/grenade/syndieminibomb(src)
new /obj/item/weapon/grenade/syndieminibomb(src)
new /obj/item/weapon/screwdriver(src)
/obj/item/storage/belt/grenade/full/PopulateContents()
new /obj/item/grenade/flashbang(src)
new /obj/item/grenade/smokebomb(src)
new /obj/item/grenade/smokebomb(src)
new /obj/item/grenade/smokebomb(src)
new /obj/item/grenade/smokebomb(src)
new /obj/item/grenade/empgrenade(src)
new /obj/item/grenade/empgrenade(src)
new /obj/item/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/grenade/syndieminibomb/concussion/frag(src)
new /obj/item/grenade/gluon(src)
new /obj/item/grenade/gluon(src)
new /obj/item/grenade/gluon(src)
new /obj/item/grenade/gluon(src)
new /obj/item/grenade/chem_grenade/incendiary(src)
new /obj/item/grenade/chem_grenade/incendiary(src)
new /obj/item/grenade/chem_grenade/facid(src)
new /obj/item/grenade/syndieminibomb(src)
new /obj/item/grenade/syndieminibomb(src)
new /obj/item/screwdriver(src)
new /obj/item/device/multitool(src)
/obj/item/weapon/storage/belt/wands
/obj/item/storage/belt/wands
name = "wand belt"
desc = "A belt designed to hold various rods of power. A veritable fanny pack of exotic magic."
icon_state = "soulstonebelt"
item_state = "soulstonebelt"
storage_slots = 6
can_hold = list(
/obj/item/weapon/gun/magic/wand
/obj/item/gun/magic/wand
)
/obj/item/weapon/storage/belt/wands/full/PopulateContents()
new /obj/item/weapon/gun/magic/wand/death(src)
new /obj/item/weapon/gun/magic/wand/resurrection(src)
new /obj/item/weapon/gun/magic/wand/polymorph(src)
new /obj/item/weapon/gun/magic/wand/teleport(src)
new /obj/item/weapon/gun/magic/wand/door(src)
new /obj/item/weapon/gun/magic/wand/fireball(src)
/obj/item/storage/belt/wands/full/PopulateContents()
new /obj/item/gun/magic/wand/death(src)
new /obj/item/gun/magic/wand/resurrection(src)
new /obj/item/gun/magic/wand/polymorph(src)
new /obj/item/gun/magic/wand/teleport(src)
new /obj/item/gun/magic/wand/door(src)
new /obj/item/gun/magic/wand/fireball(src)
for(var/obj/item/weapon/gun/magic/wand/W in contents) //All wands in this pack come in the best possible condition
for(var/obj/item/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
/obj/item/weapon/storage/belt/janitor
/obj/item/storage/belt/janitor
name = "janibelt"
desc = "A belt used to hold most janitorial supplies."
icon_state = "janibelt"
@@ -377,17 +377,17 @@
storage_slots = 6
max_w_class = WEIGHT_CLASS_BULKY // Set to this so the light replacer can fit.
can_hold = list(
/obj/item/weapon/grenade/chem_grenade,
/obj/item/grenade/chem_grenade,
/obj/item/device/lightreplacer,
/obj/item/device/flashlight,
/obj/item/weapon/reagent_containers/spray,
/obj/item/weapon/soap,
/obj/item/weapon/holosign_creator,
/obj/item/reagent_containers/spray,
/obj/item/soap,
/obj/item/holosign_creator,
/obj/item/key/janitor,
/obj/item/clothing/gloves
)
/obj/item/weapon/storage/belt/bandolier
/obj/item/storage/belt/bandolier
name = "bandolier"
desc = "A bandolier for holding shotgun ammunition."
icon_state = "bandolier"
@@ -398,7 +398,7 @@
/obj/item/ammo_casing/shotgun
)
/obj/item/weapon/storage/belt/holster
/obj/item/storage/belt/holster
name = "shoulder holster"
desc = "A holster to carry a handgun and ammo. WARNING: Badasses only."
icon_state = "holster"
@@ -406,18 +406,18 @@
storage_slots = 3
max_w_class = WEIGHT_CLASS_NORMAL
can_hold = list(
/obj/item/weapon/gun/ballistic/automatic/pistol,
/obj/item/weapon/gun/ballistic/revolver,
/obj/item/gun/ballistic/automatic/pistol,
/obj/item/gun/ballistic/revolver,
/obj/item/ammo_box,
)
alternate_worn_layer = UNDER_SUIT_LAYER
/obj/item/weapon/storage/belt/holster/full/PopulateContents()
new /obj/item/weapon/gun/ballistic/revolver/detective(src)
/obj/item/storage/belt/holster/full/PopulateContents()
new /obj/item/gun/ballistic/revolver/detective(src)
new /obj/item/ammo_box/c38(src)
new /obj/item/ammo_box/c38(src)
/obj/item/weapon/storage/belt/fannypack
/obj/item/storage/belt/fannypack
name = "fannypack"
desc = "A dorky fannypack for keeping small items in."
icon_state = "fannypack_leather"
@@ -425,57 +425,57 @@
storage_slots = 3
max_w_class = WEIGHT_CLASS_SMALL
/obj/item/weapon/storage/belt/fannypack/black
/obj/item/storage/belt/fannypack/black
name = "black fannypack"
icon_state = "fannypack_black"
item_state = "fannypack_black"
/obj/item/weapon/storage/belt/fannypack/red
/obj/item/storage/belt/fannypack/red
name = "red fannypack"
icon_state = "fannypack_red"
item_state = "fannypack_red"
/obj/item/weapon/storage/belt/fannypack/purple
/obj/item/storage/belt/fannypack/purple
name = "purple fannypack"
icon_state = "fannypack_purple"
item_state = "fannypack_purple"
/obj/item/weapon/storage/belt/fannypack/blue
/obj/item/storage/belt/fannypack/blue
name = "blue fannypack"
icon_state = "fannypack_blue"
item_state = "fannypack_blue"
/obj/item/weapon/storage/belt/fannypack/orange
/obj/item/storage/belt/fannypack/orange
name = "orange fannypack"
icon_state = "fannypack_orange"
item_state = "fannypack_orange"
/obj/item/weapon/storage/belt/fannypack/white
/obj/item/storage/belt/fannypack/white
name = "white fannypack"
icon_state = "fannypack_white"
item_state = "fannypack_white"
/obj/item/weapon/storage/belt/fannypack/green
/obj/item/storage/belt/fannypack/green
name = "green fannypack"
icon_state = "fannypack_green"
item_state = "fannypack_green"
/obj/item/weapon/storage/belt/fannypack/pink
/obj/item/storage/belt/fannypack/pink
name = "pink fannypack"
icon_state = "fannypack_pink"
item_state = "fannypack_pink"
/obj/item/weapon/storage/belt/fannypack/cyan
/obj/item/storage/belt/fannypack/cyan
name = "cyan fannypack"
icon_state = "fannypack_cyan"
item_state = "fannypack_cyan"
/obj/item/weapon/storage/belt/fannypack/yellow
/obj/item/storage/belt/fannypack/yellow
name = "yellow fannypack"
icon_state = "fannypack_yellow"
item_state = "fannypack_yellow"
/obj/item/weapon/storage/belt/sabre
/obj/item/storage/belt/sabre
name = "sabre sheath"
desc = "An ornate sheath designed to hold an officer's blade."
icon_state = "sheath"
@@ -485,15 +485,15 @@
w_class = WEIGHT_CLASS_BULKY
max_w_class = WEIGHT_CLASS_BULKY
can_hold = list(
/obj/item/weapon/melee/sabre
/obj/item/melee/sabre
)
/obj/item/weapon/storage/belt/sabre/examine(mob/user)
/obj/item/storage/belt/sabre/examine(mob/user)
..()
if(contents.len)
to_chat(user, "<span class='notice'>Alt-click it to quickly draw the blade.</span>")
/obj/item/weapon/storage/belt/sabre/AltClick(mob/user)
/obj/item/storage/belt/sabre/AltClick(mob/user)
if(!ishuman(user) || !user.canUseTopic(src, be_close=TRUE))
return
if(contents.len)
@@ -505,7 +505,7 @@
else
to_chat(user, "[src] is empty.")
/obj/item/weapon/storage/belt/sabre/update_icon()
/obj/item/storage/belt/sabre/update_icon()
icon_state = "sheath"
item_state = "sheath"
if(contents.len)
@@ -517,6 +517,6 @@
..()
/obj/item/weapon/storage/belt/sabre/PopulateContents()
new /obj/item/weapon/melee/sabre(src)
/obj/item/storage/belt/sabre/PopulateContents()
new /obj/item/melee/sabre(src)
update_icon()
+16 -16
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/storage/book
/obj/item/storage/book
name = "hollowed book"
desc = "I guess someone didn't like it."
icon = 'icons/obj/library.dmi'
@@ -10,14 +10,14 @@
resistance_flags = FLAMMABLE
var/title = "book"
/obj/item/weapon/storage/book/attack_self(mob/user)
/obj/item/storage/book/attack_self(mob/user)
to_chat(user, "<span class='notice'>The pages of [title] have been cut out!</span>")
GLOBAL_LIST_INIT(biblenames, list("Bible", "Quran", "Scrapbook", "Burning Bible", "Clown Bible", "Banana Bible", "Creeper Bible", "White Bible", "Holy Light", "The God Delusion", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "Melted Bible", "Necronomicon"))
GLOBAL_LIST_INIT(biblestates, list("bible", "koran", "scrapbook", "burning", "honk1", "honk2", "creeper", "white", "holylight", "atheist", "tome", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon"))
GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", "bible", "bible", "syringe_kit", "syringe_kit", "syringe_kit", "syringe_kit", "syringe_kit", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon"))
/obj/item/weapon/storage/book/bible
/obj/item/storage/book/bible
name = "bible"
desc = "Apply to head repeatedly."
icon = 'icons/obj/storage.dmi'
@@ -29,11 +29,11 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
var/deity_name = "Christ"
force_string = "holy"
/obj/item/weapon/storage/book/bible/suicide_act(mob/user)
/obj/item/storage/book/bible/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is offering [user.p_them()]self to [deity_name]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (BRUTELOSS)
/obj/item/weapon/storage/book/bible/attack_self(mob/living/carbon/human/H)
/obj/item/storage/book/bible/attack_self(mob/living/carbon/human/H)
if(!istype(H))
return
// If H is the Chaplain, we can set the icon_state of the bible (but only once!)
@@ -47,13 +47,13 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
dat += "</table></body></html>"
H << browse(dat, "window=editicon;can_close=0;can_minimize=0;size=250x650")
/obj/item/weapon/storage/book/bible/Topic(href, href_list)
/obj/item/storage/book/bible/Topic(href, href_list)
if(!usr.canUseTopic(src))
return
if(href_list["seticon"] && SSreligion && !SSreligion.bible_icon_state)
var/iconi = text2num(href_list["seticon"])
var/biblename = GLOB.biblenames[iconi]
var/obj/item/weapon/storage/book/bible/B = locate(href_list["src"])
var/obj/item/storage/book/bible/B = locate(href_list["src"])
B.icon_state = GLOB.biblestates[iconi]
B.item_state = GLOB.bibleitemstates[iconi]
@@ -68,7 +68,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
SSblackbox.set_details("religion_book","[biblename]")
usr << browse(null, "window=editicon")
/obj/item/weapon/storage/book/bible/proc/bless(mob/living/carbon/human/H, mob/living/user)
/obj/item/storage/book/bible/proc/bless(mob/living/carbon/human/H, mob/living/user)
for(var/X in H.bodyparts)
var/obj/item/bodypart/BP = X
if(BP.status == BODYPART_ROBOTIC)
@@ -88,7 +88,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
playsound(src.loc, "punch", 25, 1, -1)
return 1
/obj/item/weapon/storage/book/bible/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE)
/obj/item/storage/book/bible/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE)
if (!user.IsAdvancedToolUser())
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
@@ -137,7 +137,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
M.visible_message("<span class='danger'>[user] smacks [M]'s lifeless corpse with [src].</span>")
playsound(src.loc, "punch", 25, 1, -1)
/obj/item/weapon/storage/book/bible/afterattack(atom/A, mob/user, proximity)
/obj/item/storage/book/bible/afterattack(atom/A, mob/user, proximity)
if(!proximity)
return
if(isfloorturf(A))
@@ -157,13 +157,13 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
A.reagents.del_reagent("unholywater")
A.reagents.add_reagent("holywater",unholy2clean)
/obj/item/weapon/storage/book/bible/booze
/obj/item/storage/book/bible/booze
desc = "To be applied to the head repeatedly."
/obj/item/weapon/storage/book/bible/booze/PopulateContents()
new /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey(src)
/obj/item/storage/book/bible/booze/PopulateContents()
new /obj/item/reagent_containers/food/drinks/bottle/whiskey(src)
/obj/item/weapon/storage/book/bible/syndicate
/obj/item/storage/book/bible/syndicate
icon_state ="ebook"
deity_name = "The Syndicate"
throw_speed = 2
@@ -178,7 +178,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
/obj/item/weapon/storage/book/bible/syndicate/attack_self(mob/living/carbon/human/H)
/obj/item/storage/book/bible/syndicate/attack_self(mob/living/carbon/human/H)
if (uses)
H.mind.isholy = TRUE
uses -= 1
@@ -189,7 +189,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
var/ownername = H.real_name
desc += "<span class='warning'>The name [ownername] is written in blood inside the cover.</span>"
/obj/item/weapon/storage/book/bible/syndicate/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE)
/obj/item/storage/book/bible/syndicate/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE)
if (user.a_intent == INTENT_HELP)
return ..()
else
File diff suppressed because it is too large Load Diff
@@ -1,4 +1,4 @@
/obj/item/weapon/storage/briefcase
/obj/item/storage/briefcase
name = "briefcase"
desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional."
icon_state = "briefcase"
@@ -15,22 +15,22 @@
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
resistance_flags = FLAMMABLE
max_integrity = 150
var/folder_path = /obj/item/weapon/folder //this is the path of the folder that gets spawned in New()
var/folder_path = /obj/item/folder //this is the path of the folder that gets spawned in New()
/obj/item/weapon/storage/briefcase/PopulateContents()
new /obj/item/weapon/pen(src)
var/obj/item/weapon/folder/folder = new folder_path(src)
/obj/item/storage/briefcase/PopulateContents()
new /obj/item/pen(src)
var/obj/item/folder/folder = new folder_path(src)
for(var/i in 1 to 6)
new /obj/item/weapon/paper(folder)
new /obj/item/paper(folder)
/obj/item/weapon/storage/briefcase/lawyer
folder_path = /obj/item/weapon/folder/blue
/obj/item/storage/briefcase/lawyer
folder_path = /obj/item/folder/blue
/obj/item/weapon/storage/briefcase/lawyer/PopulateContents()
new /obj/item/weapon/stamp/law(src)
/obj/item/storage/briefcase/lawyer/PopulateContents()
new /obj/item/stamp/law(src)
..()
/obj/item/weapon/storage/briefcase/sniperbundle
/obj/item/storage/briefcase/sniperbundle
name = "briefcase"
desc = "It's label reads genuine hardened Captain leather, but suspiciously has no other tags or branding. Smells like L'Air du Temps."
icon_state = "briefcase"
@@ -46,12 +46,12 @@
resistance_flags = FLAMMABLE
max_integrity = 150
/obj/item/weapon/storage/briefcase/sniperbundle/PopulateContents()
/obj/item/storage/briefcase/sniperbundle/PopulateContents()
..() // in case you need any paperwork done after your rampage
new /obj/item/weapon/gun/ballistic/automatic/sniper_rifle/syndicate(src)
new /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate(src)
new /obj/item/clothing/neck/tie/red(src)
new /obj/item/clothing/under/syndicate/sniper(src)
new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src)
new /obj/item/ammo_box/magazine/sniper_rounds/haemorrhage(src)
new /obj/item/weapon/suppressor/specialoffer(src)
new /obj/item/suppressor/specialoffer(src)
@@ -2,7 +2,7 @@
//dakimakuras
//////////////////////////////////
/obj/item/weapon/storage/daki
/obj/item/storage/daki
name = "dakimakura"
desc = "A large pillow depicting a girl in a compromising position. Featuring as many dimensions as you."
icon = 'icons/obj/daki.dmi'
@@ -15,7 +15,7 @@
var/cooldowntime = 20
var/static/list/dakimakura_options = list("Callie","Casca","Chaika","Elisabeth","Foxy Grandpa","Haruko","Holo","Ian","Jolyne","Kurisu","Marie","Mugi","Nar'Sie","Patchouli","Plutia","Rei","Reisen","Naga","Squid","Squigly","Tomoko","Toriel","Umaru","Yaranaika","Yoko") //Kurisu is the ideal girl." - Me, Logos.
/obj/item/weapon/storage/daki/attack_self(mob/living/user)
/obj/item/storage/daki/attack_self(mob/living/user)
var/body_choice
var/custom_name
@@ -13,7 +13,7 @@
* Cigar Case
*/
/obj/item/weapon/storage/fancy
/obj/item/storage/fancy
icon = 'icons/obj/food/containers.dmi'
icon_state = "donutbox6"
name = "donut box"
@@ -22,18 +22,18 @@
var/spawn_type = null
var/fancy_open = FALSE
/obj/item/weapon/storage/fancy/PopulateContents()
/obj/item/storage/fancy/PopulateContents()
for(var/i = 1 to storage_slots)
new spawn_type(src)
/obj/item/weapon/storage/fancy/update_icon(itemremoved = 0)
/obj/item/storage/fancy/update_icon(itemremoved = 0)
if(fancy_open)
var/total_contents = src.contents.len - itemremoved
icon_state = "[icon_type]box[total_contents]"
else
icon_state = "[icon_type]box"
/obj/item/weapon/storage/fancy/examine(mob/user)
/obj/item/storage/fancy/examine(mob/user)
..()
if(fancy_open)
if(contents.len == 1)
@@ -41,21 +41,21 @@
else
to_chat(user, "There are [contents.len <= 0 ? "no" : "[src.contents.len]"] [src.icon_type]s left.")
/obj/item/weapon/storage/fancy/attack_self(mob/user)
/obj/item/storage/fancy/attack_self(mob/user)
fancy_open = !fancy_open
update_icon()
/obj/item/weapon/storage/fancy/content_can_dump(atom/dest_object, mob/user)
/obj/item/storage/fancy/content_can_dump(atom/dest_object, mob/user)
. = ..()
if(.)
fancy_open = TRUE
update_icon()
/obj/item/weapon/storage/fancy/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/user)
/obj/item/storage/fancy/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/user)
fancy_open = TRUE
return ..()
/obj/item/weapon/storage/fancy/remove_from_storage(obj/item/W, atom/new_location, burn = 0)
/obj/item/storage/fancy/remove_from_storage(obj/item/W, atom/new_location, burn = 0)
fancy_open = TRUE
return ..()
@@ -63,21 +63,21 @@
* Donut Box
*/
/obj/item/weapon/storage/fancy/donut_box
/obj/item/storage/fancy/donut_box
icon = 'icons/obj/food/containers.dmi'
icon_state = "donutbox6"
icon_type = "donut"
name = "donut box"
storage_slots = 6
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut)
spawn_type = /obj/item/weapon/reagent_containers/food/snacks/donut
can_hold = list(/obj/item/reagent_containers/food/snacks/donut)
spawn_type = /obj/item/reagent_containers/food/snacks/donut
fancy_open = TRUE
/*
* Egg Box
*/
/obj/item/weapon/storage/fancy/egg_box
/obj/item/storage/fancy/egg_box
icon = 'icons/obj/food/containers.dmi'
icon_state = "eggbox"
icon_type = "egg"
@@ -85,14 +85,14 @@
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
name = "egg box"
storage_slots = 12
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/egg)
spawn_type = /obj/item/weapon/reagent_containers/food/snacks/egg
can_hold = list(/obj/item/reagent_containers/food/snacks/egg)
spawn_type = /obj/item/reagent_containers/food/snacks/egg
/*
* Candle Box
*/
/obj/item/weapon/storage/fancy/candle_box
/obj/item/storage/fancy/candle_box
name = "candle pack"
desc = "A pack of red candles."
icon = 'icons/obj/candle.dmi'
@@ -105,13 +105,13 @@
spawn_type = /obj/item/candle
fancy_open = TRUE
/obj/item/weapon/storage/fancy/candle_box/attack_self(mob_user)
/obj/item/storage/fancy/candle_box/attack_self(mob_user)
return
////////////
//CIG PACK//
////////////
/obj/item/weapon/storage/fancy/cigarettes
/obj/item/storage/fancy/cigarettes
name = "\improper Space Cigarettes packet"
desc = "The most popular brand of cigarettes, sponsors of the Space Olympics."
icon = 'icons/obj/cigarettes.dmi'
@@ -121,19 +121,19 @@
throwforce = 0
slot_flags = SLOT_BELT
storage_slots = 6
can_hold = list(/obj/item/clothing/mask/cigarette, /obj/item/weapon/lighter)
can_hold = list(/obj/item/clothing/mask/cigarette, /obj/item/lighter)
icon_type = "cigarette"
spawn_type = /obj/item/clothing/mask/cigarette/space_cigarette
/obj/item/weapon/storage/fancy/cigarettes/AltClick(mob/user)
/obj/item/storage/fancy/cigarettes/AltClick(mob/user)
if(user.get_active_held_item())
return
for(var/obj/item/weapon/lighter/lighter in src)
for(var/obj/item/lighter/lighter in src)
remove_from_storage(lighter, user.loc)
user.put_in_active_hand(lighter)
break
/obj/item/weapon/storage/fancy/cigarettes/update_icon()
/obj/item/storage/fancy/cigarettes/update_icon()
if(fancy_open || !contents.len)
cut_overlays()
if(!contents.len)
@@ -145,9 +145,9 @@
for(var/C in contents)
var/mutable_appearance/inserted_overlay = mutable_appearance(icon)
inserted_overlay.pixel_x = 1 * (i - 1)
if(istype(C, /obj/item/weapon/lighter/greyscale))
if(istype(C, /obj/item/lighter/greyscale))
inserted_overlay.icon_state = "lighter_in"
else if(istype(C, /obj/item/weapon/lighter))
else if(istype(C, /obj/item/lighter))
inserted_overlay.icon_state = "zippo_in"
else
inserted_overlay.icon_state = "cigarette"
@@ -156,7 +156,7 @@
else
cut_overlays()
/obj/item/weapon/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
/obj/item/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!ismob(M))
return
var/obj/item/clothing/mask/cigarette/cig = locate(/obj/item/clothing/mask/cigarette) in contents
@@ -172,55 +172,55 @@
else
to_chat(user, "<span class='notice'>There are no [icon_type]s left in the pack.</span>")
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco
/obj/item/storage/fancy/cigarettes/dromedaryco
name = "\improper DromedaryCo packet"
desc = "A packet of six imported DromedaryCo cancer sticks. A label on the packaging reads, \"Wouldn't a slow death make a change?\""
icon_state = "dromedary"
spawn_type = /obj/item/clothing/mask/cigarette/dromedary
/obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift
/obj/item/storage/fancy/cigarettes/cigpack_uplift
name = "\improper Uplift Smooth packet"
desc = "Your favorite brand, now menthol flavored."
icon_state = "uplift"
spawn_type = /obj/item/clothing/mask/cigarette/uplift
/obj/item/weapon/storage/fancy/cigarettes/cigpack_robust
/obj/item/storage/fancy/cigarettes/cigpack_robust
name = "\improper Robust packet"
desc = "Smoked by the robust."
icon_state = "robust"
spawn_type = /obj/item/clothing/mask/cigarette/robust
/obj/item/weapon/storage/fancy/cigarettes/cigpack_robustgold
/obj/item/storage/fancy/cigarettes/cigpack_robustgold
name = "\improper Robust Gold packet"
desc = "Smoked by the truly robust."
icon_state = "robustg"
spawn_type = /obj/item/clothing/mask/cigarette/robustgold
/obj/item/weapon/storage/fancy/cigarettes/cigpack_carp
/obj/item/storage/fancy/cigarettes/cigpack_carp
name = "\improper Carp Classic packet"
desc = "Since 2313."
icon_state = "carp"
spawn_type = /obj/item/clothing/mask/cigarette/carp
/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate
/obj/item/storage/fancy/cigarettes/cigpack_syndicate
name = "cigarette packet"
desc = "An obscure brand of cigarettes."
icon_state = "syndie"
spawn_type = /obj/item/clothing/mask/cigarette/syndicate
/obj/item/weapon/storage/fancy/cigarettes/cigpack_midori
/obj/item/storage/fancy/cigarettes/cigpack_midori
name = "\improper Midori Tabako packet"
desc = "You can't understand the runes, but the packet smells funny."
icon_state = "midori"
spawn_type = /obj/item/clothing/mask/cigarette/rollie
/obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims
/obj/item/storage/fancy/cigarettes/cigpack_shadyjims
name = "\improper Shady Jim's Super Slims packet"
desc = "Is your weight slowing you down? Having trouble running away from gravitational singularities? Can't stop stuffing your mouth? Smoke Shady Jim's Super Slims and watch all that fat burn away. Guaranteed results!"
icon_state = "shadyjim"
spawn_type = /obj/item/clothing/mask/cigarette/shadyjims
/obj/item/weapon/storage/fancy/rollingpapers
/obj/item/storage/fancy/rollingpapers
name = "rolling paper pack"
desc = "A pack of NanoTrasen brand rolling papers."
w_class = WEIGHT_CLASS_TINY
@@ -228,10 +228,10 @@
icon_state = "cig_paper_pack"
storage_slots = 10
icon_type = "rolling paper"
can_hold = list(/obj/item/weapon/rollingpaper)
spawn_type = /obj/item/weapon/rollingpaper
can_hold = list(/obj/item/rollingpaper)
spawn_type = /obj/item/rollingpaper
/obj/item/weapon/storage/fancy/rollingpapers/update_icon()
/obj/item/storage/fancy/rollingpapers/update_icon()
cut_overlays()
if(!contents.len)
add_overlay("[icon_state]_empty")
@@ -240,7 +240,7 @@
//CIGAR BOX//
/////////////
/obj/item/weapon/storage/fancy/cigarettes/cigars
/obj/item/storage/fancy/cigarettes/cigars
name = "\improper premium cigar case"
desc = "A case of premium cigars. Very expensive."
icon = 'icons/obj/cigarettes.dmi'
@@ -251,7 +251,7 @@
icon_type = "premium cigar"
spawn_type = /obj/item/clothing/mask/cigarette/cigar
/obj/item/weapon/storage/fancy/cigarettes/cigars/update_icon()
/obj/item/storage/fancy/cigarettes/cigars/update_icon()
cut_overlays()
if(fancy_open)
add_overlay("[icon_state]_open")
@@ -262,12 +262,12 @@
else
icon_state = "cigarcase"
/obj/item/weapon/storage/fancy/cigarettes/cigars/cohiba
/obj/item/storage/fancy/cigarettes/cigars/cohiba
name = "\improper cohiba robusto cigar case"
desc = "A case of imported Cohiba cigars, renowned for their strong flavor."
spawn_type = /obj/item/clothing/mask/cigarette/cigar/cohiba
/obj/item/weapon/storage/fancy/cigarettes/cigars/havana
/obj/item/storage/fancy/cigarettes/cigars/havana
name = "\improper premium havanian cigar case"
desc = "A case of classy Havanian cigars."
spawn_type = /obj/item/clothing/mask/cigarette/cigar/havana
@@ -8,7 +8,7 @@
/*
* First Aid Kits
*/
/obj/item/weapon/storage/firstaid
/obj/item/storage/firstaid
name = "first-aid kit"
desc = "It's an emergency medical kit for those serious boo-boos."
icon_state = "firstaid"
@@ -18,11 +18,11 @@
throw_range = 7
var/empty = 0
/obj/item/weapon/storage/firstaid/regular
/obj/item/storage/firstaid/regular
icon_state = "firstaid"
desc = "A first aid kit with the ability to heal common types of injuries."
/obj/item/weapon/storage/firstaid/regular/PopulateContents()
/obj/item/storage/firstaid/regular/PopulateContents()
if(empty)
return
new /obj/item/stack/medical/gauze(src)
@@ -30,15 +30,15 @@
new /obj/item/stack/medical/bruise_pack(src)
new /obj/item/stack/medical/ointment(src)
new /obj/item/stack/medical/ointment(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
new /obj/item/reagent_containers/hypospray/medipen(src)
new /obj/item/device/healthanalyzer(src)
/obj/item/weapon/storage/firstaid/ancient
/obj/item/storage/firstaid/ancient
icon_state = "firstaid"
desc = "A first aid kit with the ability to heal common types of injuries."
/obj/item/weapon/storage/firstaid/ancient/PopulateContents()
/obj/item/storage/firstaid/ancient/PopulateContents()
if(empty)
return
new /obj/item/stack/medical/gauze(src)
@@ -49,108 +49,108 @@
new /obj/item/stack/medical/ointment(src)
new /obj/item/stack/medical/ointment(src)
/obj/item/weapon/storage/firstaid/fire
/obj/item/storage/firstaid/fire
name = "burn treatment kit"
desc = "A specialized medical kit for when the toxins lab <i>-spontaneously-</i> burns down."
icon_state = "ointment"
item_state = "firstaid-ointment"
/obj/item/weapon/storage/firstaid/fire/Initialize(mapload)
/obj/item/storage/firstaid/fire/Initialize(mapload)
..()
icon_state = pick("ointment","firefirstaid")
/obj/item/weapon/storage/firstaid/fire/PopulateContents()
/obj/item/storage/firstaid/fire/PopulateContents()
if(empty)
return
for(var/i in 1 to 3)
new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
new /obj/item/weapon/reagent_containers/pill/oxandrolone(src)
new /obj/item/weapon/reagent_containers/pill/oxandrolone(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
new /obj/item/reagent_containers/pill/patch/silver_sulf(src)
new /obj/item/reagent_containers/pill/oxandrolone(src)
new /obj/item/reagent_containers/pill/oxandrolone(src)
new /obj/item/reagent_containers/hypospray/medipen(src)
new /obj/item/device/healthanalyzer(src)
/obj/item/weapon/storage/firstaid/toxin
/obj/item/storage/firstaid/toxin
name = "toxin treatment kit"
desc = "Used to treat toxic blood content and radiation poisoning."
icon_state = "antitoxin"
item_state = "firstaid-toxin"
/obj/item/weapon/storage/firstaid/toxin/Initialize(mapload)
/obj/item/storage/firstaid/toxin/Initialize(mapload)
. = ..()
icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3")
/obj/item/weapon/storage/firstaid/toxin/PopulateContents()
/obj/item/storage/firstaid/toxin/PopulateContents()
if(empty)
return
for(var/i in 1 to 4)
new /obj/item/weapon/reagent_containers/syringe/charcoal(src)
new /obj/item/reagent_containers/syringe/charcoal(src)
for(var/i in 1 to 2)
new /obj/item/weapon/storage/pill_bottle/charcoal(src)
new /obj/item/storage/pill_bottle/charcoal(src)
new /obj/item/device/healthanalyzer(src)
/obj/item/weapon/storage/firstaid/o2
/obj/item/storage/firstaid/o2
name = "oxygen deprivation treatment kit"
desc = "A box full of oxygen goodies."
icon_state = "o2"
item_state = "firstaid-o2"
/obj/item/weapon/storage/firstaid/o2/PopulateContents()
/obj/item/storage/firstaid/o2/PopulateContents()
if(empty)
return
for(var/i in 1 to 4)
new /obj/item/weapon/reagent_containers/pill/salbutamol(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
new /obj/item/reagent_containers/pill/salbutamol(src)
new /obj/item/reagent_containers/hypospray/medipen(src)
new /obj/item/reagent_containers/hypospray/medipen(src)
new /obj/item/device/healthanalyzer(src)
/obj/item/weapon/storage/firstaid/brute
/obj/item/storage/firstaid/brute
name = "brute trauma treatment kit"
desc = "A first aid kit for when you get toolboxed."
icon_state = "brute"
item_state = "firstaid-brute"
/obj/item/weapon/storage/firstaid/brute/PopulateContents()
/obj/item/storage/firstaid/brute/PopulateContents()
if(empty)
return
for(var/i in 1 to 4)
new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
new /obj/item/reagent_containers/pill/patch/styptic(src)
new /obj/item/stack/medical/gauze(src)
new /obj/item/stack/medical/gauze(src)
new /obj/item/device/healthanalyzer(src)
/obj/item/weapon/storage/firstaid/tactical
/obj/item/storage/firstaid/tactical
name = "combat medical kit"
desc = "I hope you've got insurance."
icon_state = "bezerk"
max_w_class = WEIGHT_CLASS_NORMAL
/obj/item/weapon/storage/firstaid/tactical/PopulateContents()
/obj/item/storage/firstaid/tactical/PopulateContents()
if(empty)
return
new /obj/item/stack/medical/gauze(src)
new /obj/item/weapon/defibrillator/compact/combat/loaded(src)
new /obj/item/weapon/reagent_containers/hypospray/combat(src)
new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src)
new /obj/item/defibrillator/compact/combat/loaded(src)
new /obj/item/reagent_containers/hypospray/combat(src)
new /obj/item/reagent_containers/pill/patch/styptic(src)
new /obj/item/reagent_containers/pill/patch/silver_sulf(src)
new /obj/item/reagent_containers/syringe/lethal/choral(src)
new /obj/item/clothing/glasses/hud/health/night(src)
/*
* Pill Bottles
*/
/obj/item/weapon/storage/pill_bottle
/obj/item/storage/pill_bottle
name = "pill bottle"
desc = "It's an airtight container for storing medication."
icon_state = "pill_canister"
icon = 'icons/obj/chemical.dmi'
item_state = "contsolid"
w_class = WEIGHT_CLASS_SMALL
can_hold = list(/obj/item/weapon/reagent_containers/pill, /obj/item/weapon/dice)
can_hold = list(/obj/item/reagent_containers/pill, /obj/item/dice)
allow_quick_gather = 1
use_to_pickup = 1
/obj/item/weapon/storage/pill_bottle/MouseDrop(obj/over_object) //Quick pillbottle fix. -Agouri
/obj/item/storage/pill_bottle/MouseDrop(obj/over_object) //Quick pillbottle fix. -Agouri
if(ishuman(usr) || ismonkey(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~
var/mob/M = usr
@@ -165,51 +165,51 @@
usr.s_active.close(usr)
src.show_to(usr)
/obj/item/weapon/storage/pill_bottle/charcoal
/obj/item/storage/pill_bottle/charcoal
name = "bottle of charcoal pills"
desc = "Contains pills used to counter toxins."
/obj/item/weapon/storage/pill_bottle/charcoal/PopulateContents()
/obj/item/storage/pill_bottle/charcoal/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/weapon/reagent_containers/pill/charcoal(src)
new /obj/item/reagent_containers/pill/charcoal(src)
/obj/item/weapon/storage/pill_bottle/epinephrine
/obj/item/storage/pill_bottle/epinephrine
name = "bottle of epinephrine pills"
desc = "Contains pills used to stabilize patients."
/obj/item/weapon/storage/pill_bottle/epinephrine/PopulateContents()
/obj/item/storage/pill_bottle/epinephrine/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
new /obj/item/reagent_containers/pill/epinephrine(src)
/obj/item/weapon/storage/pill_bottle/mutadone
/obj/item/storage/pill_bottle/mutadone
name = "bottle of mutadone pills"
desc = "Contains pills used to treat genetic abnormalities."
/obj/item/weapon/storage/pill_bottle/mutadone/PopulateContents()
/obj/item/storage/pill_bottle/mutadone/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/weapon/reagent_containers/pill/mutadone(src)
new /obj/item/reagent_containers/pill/mutadone(src)
/obj/item/weapon/storage/pill_bottle/mannitol
/obj/item/storage/pill_bottle/mannitol
name = "bottle of mannitol pills"
desc = "Contains pills used to treat brain damage."
/obj/item/weapon/storage/pill_bottle/mannitol/PopulateContents()
/obj/item/storage/pill_bottle/mannitol/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/weapon/reagent_containers/pill/mannitol(src)
new /obj/item/reagent_containers/pill/mannitol(src)
/obj/item/weapon/storage/pill_bottle/stimulant
/obj/item/storage/pill_bottle/stimulant
name = "bottle of stimulant pills"
desc = "Guaranteed to give you that extra burst of energy during a long shift!"
/obj/item/weapon/storage/pill_bottle/stimulant/PopulateContents()
/obj/item/storage/pill_bottle/stimulant/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/weapon/reagent_containers/pill/stimulant(src)
new /obj/item/reagent_containers/pill/stimulant(src)
/obj/item/weapon/storage/pill_bottle/mining
/obj/item/storage/pill_bottle/mining
name = "bottle of patches"
desc = "Contains patches used to treat brute and burn damage."
/obj/item/weapon/storage/pill_bottle/mining/PopulateContents()
new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
/obj/item/storage/pill_bottle/mining/PopulateContents()
new /obj/item/reagent_containers/pill/patch/silver_sulf(src)
for(var/i in 1 to 3)
new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
new /obj/item/reagent_containers/pill/patch/styptic(src)
@@ -1,27 +1,27 @@
/obj/item/weapon/storage/internal
/obj/item/storage/internal
storage_slots = 2
max_w_class = WEIGHT_CLASS_SMALL
max_combined_w_class = 50 // Limited by slots, not combined weight class
w_class = WEIGHT_CLASS_BULKY
rustle_jimmies = FALSE
/obj/item/weapon/storage/internal/Adjacent(A)
/obj/item/storage/internal/Adjacent(A)
if(loc)
return loc.Adjacent(A)
/obj/item/weapon/storage/internal/pocket
/obj/item/storage/internal/pocket
var/priority = TRUE
// TRUE if opens when clicked, like a backpack.
// FALSE if opens only when dragged on mob's icon (hidden pocket)
var/quickdraw = FALSE
// TRUE if you can quickdraw items from it with alt-click.
/obj/item/weapon/storage/internal/pocket/New()
/obj/item/storage/internal/pocket/New()
..()
if(loc)
name = loc.name
/obj/item/weapon/storage/internal/pocket/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/user)
/obj/item/storage/internal/pocket/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/user)
. = ..()
if(. && silent && !prevent_warning)
if(quickdraw)
@@ -29,24 +29,24 @@
else
to_chat(user, "<span class='notice'>You discreetly slip [W] into [src].")
/obj/item/weapon/storage/internal/pocket/big
/obj/item/storage/internal/pocket/big
max_w_class = WEIGHT_CLASS_NORMAL
/obj/item/weapon/storage/internal/pocket/small
/obj/item/storage/internal/pocket/small
storage_slots = 1
priority = FALSE
/obj/item/weapon/storage/internal/pocket/tiny
/obj/item/storage/internal/pocket/tiny
storage_slots = 1
max_w_class = WEIGHT_CLASS_TINY
priority = FALSE
/obj/item/weapon/storage/internal/pocket/shoes
/obj/item/storage/internal/pocket/shoes
can_hold = list(
/obj/item/weapon/kitchen/knife, /obj/item/weapon/switchblade, /obj/item/weapon/pen,
/obj/item/weapon/scalpel, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/dnainjector,
/obj/item/weapon/reagent_containers/hypospray/medipen, /obj/item/weapon/reagent_containers/dropper,
/obj/item/weapon/implanter, /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool/mini,
/obj/item/kitchen/knife, /obj/item/switchblade, /obj/item/pen,
/obj/item/scalpel, /obj/item/reagent_containers/syringe, /obj/item/dnainjector,
/obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/dropper,
/obj/item/implanter, /obj/item/screwdriver, /obj/item/weldingtool/mini,
/obj/item/device/firing_pin
)
//can hold both regular pens and energy daggers. made for your every-day tactical curators/murderers.
@@ -55,35 +55,35 @@
silent = TRUE
/obj/item/weapon/storage/internal/pocket/shoes/clown
/obj/item/storage/internal/pocket/shoes/clown
can_hold = list(
/obj/item/weapon/kitchen/knife, /obj/item/weapon/switchblade, /obj/item/weapon/pen,
/obj/item/weapon/scalpel, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/dnainjector,
/obj/item/weapon/reagent_containers/hypospray/medipen, /obj/item/weapon/reagent_containers/dropper,
/obj/item/weapon/implanter, /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool/mini,
/obj/item/device/firing_pin, /obj/item/weapon/bikehorn)
/obj/item/kitchen/knife, /obj/item/switchblade, /obj/item/pen,
/obj/item/scalpel, /obj/item/reagent_containers/syringe, /obj/item/dnainjector,
/obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/dropper,
/obj/item/implanter, /obj/item/screwdriver, /obj/item/weldingtool/mini,
/obj/item/device/firing_pin, /obj/item/bikehorn)
/obj/item/weapon/storage/internal/pocket/small/detective
/obj/item/storage/internal/pocket/small/detective
priority = TRUE // so the detectives would discover pockets in their hats
/obj/item/weapon/storage/internal/pocket/small/detective/PopulateContents()
new /obj/item/weapon/reagent_containers/food/drinks/flask/det(src)
/obj/item/storage/internal/pocket/small/detective/PopulateContents()
new /obj/item/reagent_containers/food/drinks/flask/det(src)
/obj/item/weapon/storage/internal/pocket/pocketprotector
/obj/item/storage/internal/pocket/pocketprotector
storage_slots = 3
max_w_class = WEIGHT_CLASS_TINY
can_hold = list( //Same items as a PDA
/obj/item/weapon/pen,
/obj/item/pen,
/obj/item/toy/crayon,
/obj/item/weapon/lipstick,
/obj/item/lipstick,
/obj/item/device/flashlight/pen,
/obj/item/clothing/mask/cigarette)
/obj/item/weapon/storage/internal/pocket/pocketprotector/cosmetology/PopulateContents()
/obj/item/storage/internal/pocket/pocketprotector/cosmetology/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/weapon/lipstick/random(src)
new /obj/item/lipstick/random(src)
/obj/item/weapon/storage/internal/pocket/pocketprotector/full/PopulateContents()
new /obj/item/weapon/pen/red(src)
new /obj/item/weapon/pen(src)
new /obj/item/weapon/pen/blue(src)
/obj/item/storage/internal/pocket/pocketprotector/full/PopulateContents()
new /obj/item/pen/red(src)
new /obj/item/pen(src)
new /obj/item/pen/blue(src)
@@ -1,4 +1,4 @@
/obj/item/weapon/storage/lockbox
/obj/item/storage/lockbox
name = "lockbox"
desc = "A locked box."
icon_state = "lockbox+l"
@@ -18,7 +18,7 @@
var/icon_broken = "lockbox+b"
/obj/item/weapon/storage/lockbox/attackby(obj/item/weapon/W, mob/user, params)
/obj/item/storage/lockbox/attackby(obj/item/W, mob/user, params)
if(W.GetID())
if(broken)
to_chat(user, "<span class='danger'>It appears to be broken.</span>")
@@ -42,14 +42,14 @@
else
to_chat(user, "<span class='danger'>It's locked!</span>")
/obj/item/weapon/storage/lockbox/MouseDrop(over_object, src_location, over_location)
/obj/item/storage/lockbox/MouseDrop(over_object, src_location, over_location)
if (locked)
src.add_fingerprint(usr)
to_chat(usr, "<span class='warning'>It's locked!</span>")
return 0
..()
/obj/item/weapon/storage/lockbox/emag_act(mob/user)
/obj/item/storage/lockbox/emag_act(mob/user)
if(!broken)
broken = TRUE
locked = FALSE
@@ -59,7 +59,7 @@
visible_message("<span class='warning'>\The [src] has been broken by [user] with an electromagnetic card!</span>")
return
/obj/item/weapon/storage/lockbox/show_to(mob/user)
/obj/item/storage/lockbox/show_to(mob/user)
if(locked)
to_chat(user, "<span class='warning'>It's locked!</span>")
else
@@ -67,46 +67,46 @@
return
//Check the destination item type for contentto.
/obj/item/weapon/storage/lockbox/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user)
/obj/item/storage/lockbox/storage_contents_dump_act(obj/item/storage/src_object, mob/user)
if(locked)
to_chat(user, "<span class='warning'>It's locked!</span>")
return 0
open = TRUE
return ..()
/obj/item/weapon/storage/lockbox/can_be_inserted(obj/item/W, stop_messages = 0)
/obj/item/storage/lockbox/can_be_inserted(obj/item/W, stop_messages = 0)
if(locked)
return 0
return ..()
/obj/item/weapon/storage/lockbox/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/user)
/obj/item/storage/lockbox/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/user)
open = TRUE
update_icon()
return ..()
/obj/item/weapon/storage/lockbox/remove_from_storage(obj/item/W, atom/new_location, burn = 0)
/obj/item/storage/lockbox/remove_from_storage(obj/item/W, atom/new_location, burn = 0)
open = TRUE
update_icon()
return ..()
/obj/item/weapon/storage/lockbox/loyalty
/obj/item/storage/lockbox/loyalty
name = "lockbox of mindshield implants"
req_access = list(ACCESS_SECURITY)
/obj/item/weapon/storage/lockbox/loyalty/PopulateContents()
/obj/item/storage/lockbox/loyalty/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/weapon/implantcase/mindshield(src)
new /obj/item/weapon/implanter/mindshield(src)
new /obj/item/implantcase/mindshield(src)
new /obj/item/implanter/mindshield(src)
/obj/item/weapon/storage/lockbox/clusterbang
/obj/item/storage/lockbox/clusterbang
name = "lockbox of clusterbangs"
desc = "You have a bad feeling about opening this."
req_access = list(ACCESS_SECURITY)
/obj/item/weapon/storage/lockbox/clusterbang/PopulateContents()
new /obj/item/weapon/grenade/clusterbuster(src)
/obj/item/storage/lockbox/clusterbang/PopulateContents()
new /obj/item/grenade/clusterbuster(src)
/obj/item/weapon/storage/lockbox/medal
/obj/item/storage/lockbox/medal
name = "medal box"
desc = "A locked box used to store medals of honor."
icon_state = "medalbox+l"
@@ -123,13 +123,13 @@
icon_broken = "medalbox+b"
can_hold = list(/obj/item/clothing/accessory/medal)
/obj/item/weapon/storage/lockbox/medal/AltClick()
/obj/item/storage/lockbox/medal/AltClick()
if(!locked)
open = (open ? FALSE : TRUE)
update_icon()
..()
/obj/item/weapon/storage/lockbox/medal/PopulateContents()
/obj/item/storage/lockbox/medal/PopulateContents()
new /obj/item/clothing/accessory/medal/gold/captain(src)
new /obj/item/clothing/accessory/medal/silver/valor(src)
new /obj/item/clothing/accessory/medal/silver/valor(src)
@@ -140,7 +140,7 @@
for(var/i in 1 to 3)
new /obj/item/clothing/accessory/medal/conduct(src)
/obj/item/weapon/storage/lockbox/medal/update_icon()
/obj/item/storage/lockbox/medal/update_icon()
cut_overlays()
if(locked)
icon_state = "medalbox+l"
@@ -163,20 +163,20 @@
medalicon.pixel_x += ((i-6)*3)
add_overlay(medalicon)
/obj/item/weapon/storage/lockbox/medal/sec
/obj/item/storage/lockbox/medal/sec
name = "security medal box"
desc = "A locked box used to store medals to be given to members of the security department."
req_access = list(ACCESS_HOS)
/obj/item/weapon/storage/lockbox/medal/sec/PopulateContents()
/obj/item/storage/lockbox/medal/sec/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/clothing/accessory/medal/silver/security(src)
/obj/item/weapon/storage/lockbox/medal/sci
/obj/item/storage/lockbox/medal/sci
name = "science medal box"
desc = "A locked box used to store medals to be given to members of the science department."
req_access = list(ACCESS_RD)
/obj/item/weapon/storage/lockbox/medal/sci/PopulateContents()
/obj/item/storage/lockbox/medal/sci/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/clothing/accessory/medal/plasma/nobel_science(src)
@@ -1,5 +1,5 @@
/*
* Absorbs /obj/item/weapon/secstorage.
* Absorbs /obj/item/secstorage.
* Reimplements it only slightly to use existing storage functionality.
*
* Contains:
@@ -10,7 +10,7 @@
// -----------------------------
// Generic Item
// -----------------------------
/obj/item/weapon/storage/secure
/obj/item/storage/secure
name = "secstorage"
var/icon_locking = "secureb"
var/icon_sparking = "securespark"
@@ -26,13 +26,13 @@
max_w_class = WEIGHT_CLASS_SMALL
max_combined_w_class = 14
/obj/item/weapon/storage/secure/examine(mob/user)
/obj/item/storage/secure/examine(mob/user)
..()
to_chat(user, text("The service panel is [src.open ? "open" : "closed"]."))
/obj/item/weapon/storage/secure/attackby(obj/item/weapon/W, mob/user, params)
/obj/item/storage/secure/attackby(obj/item/W, mob/user, params)
if(locked)
if (istype(W, /obj/item/weapon/screwdriver))
if (istype(W, /obj/item/screwdriver))
if (do_after(user, 20*W.toolspeed, target = src))
src.open =! src.open
user.show_message("<span class='notice'>You [open ? "open" : "close"] the service panel.</span>", 1)
@@ -61,14 +61,14 @@
// -> storage/attackby() what with handle insertion, etc
return ..()
/obj/item/weapon/storage/secure/MouseDrop(over_object, src_location, over_location)
/obj/item/storage/secure/MouseDrop(over_object, src_location, over_location)
if (locked)
src.add_fingerprint(usr)
to_chat(usr, "<span class='warning'>It's locked!</span>")
return 0
..()
/obj/item/weapon/storage/secure/attack_self(mob/user)
/obj/item/storage/secure/attack_self(mob/user)
user.set_machine(src)
var/dat = text("<TT><B>[]</B><BR>\n\nLock Status: []",src, (src.locked ? "LOCKED" : "UNLOCKED"))
var/message = "Code"
@@ -82,7 +82,7 @@
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")
/obj/item/weapon/storage/secure/Topic(href, href_list)
/obj/item/storage/secure/Topic(href, href_list)
..()
if ((usr.stat || usr.restrained()) || (get_dist(src, usr) > 1))
return
@@ -115,13 +115,13 @@
return
return
/obj/item/weapon/storage/secure/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user)
/obj/item/storage/secure/storage_contents_dump_act(obj/item/storage/src_object, mob/user)
if(locked)
to_chat(user, "<span class='warning'>It's locked!</span>")
return 0
return ..()
/obj/item/weapon/storage/secure/can_be_inserted(obj/item/W, stop_messages = 0)
/obj/item/storage/secure/can_be_inserted(obj/item/W, stop_messages = 0)
if(locked)
return 0
return ..()
@@ -130,7 +130,7 @@
// -----------------------------
// Secure Briefcase
// -----------------------------
/obj/item/weapon/storage/secure/briefcase
/obj/item/storage/secure/briefcase
name = "secure briefcase"
icon = 'icons/obj/storage.dmi'
icon_state = "secure"
@@ -147,11 +147,11 @@
max_combined_w_class = 21
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
/obj/item/weapon/storage/secure/briefcase/PopulateContents()
new /obj/item/weapon/paper(src)
new /obj/item/weapon/pen(src)
/obj/item/storage/secure/briefcase/PopulateContents()
new /obj/item/paper(src)
new /obj/item/pen(src)
/obj/item/weapon/storage/secure/briefcase/attack_hand(mob/user)
/obj/item/storage/secure/briefcase/attack_hand(mob/user)
if ((src.loc == user) && (src.locked == 1))
to_chat(usr, "<span class='warning'>[src] is locked and cannot be opened!</span>")
add_fingerprint(user)
@@ -159,10 +159,10 @@
..()
//Syndie variant of Secure Briefcase. Contains space cash, slightly more robust.
/obj/item/weapon/storage/secure/briefcase/syndie
/obj/item/storage/secure/briefcase/syndie
force = 15
/obj/item/weapon/storage/secure/briefcase/syndie/PopulateContents()
/obj/item/storage/secure/briefcase/syndie/PopulateContents()
..()
for(var/i = 0, i < storage_slots - 2, i++)
new /obj/item/stack/spacecash/c1000(src)
@@ -172,7 +172,7 @@
// Secure Safe
// -----------------------------
/obj/item/weapon/storage/secure/safe
/obj/item/storage/secure/safe
name = "secure safe"
icon = 'icons/obj/storage.dmi'
icon_state = "safe"
@@ -184,14 +184,14 @@
max_w_class = 8
anchored = TRUE
density = FALSE
cant_hold = list(/obj/item/weapon/storage/secure/briefcase)
cant_hold = list(/obj/item/storage/secure/briefcase)
/obj/item/weapon/storage/secure/safe/PopulateContents()
new /obj/item/weapon/paper(src)
new /obj/item/weapon/pen(src)
/obj/item/storage/secure/safe/PopulateContents()
new /obj/item/paper(src)
new /obj/item/pen(src)
/obj/item/weapon/storage/secure/safe/attack_hand(mob/user)
/obj/item/storage/secure/safe/attack_hand(mob/user)
return attack_self(user)
/obj/item/weapon/storage/secure/safe/HoS
/obj/item/storage/secure/safe/HoS
name = "head of security's safe"
@@ -5,7 +5,7 @@
// -- c0
/obj/item/weapon/storage
/obj/item/storage
name = "storage"
icon = 'icons/obj/storage.dmi'
w_class = WEIGHT_CLASS_NORMAL
@@ -27,7 +27,7 @@
var/rustle_jimmies = TRUE //Play the rustle sound on insertion
/obj/item/weapon/storage/MouseDrop(atom/over_object)
/obj/item/storage/MouseDrop(atom/over_object)
if(ismob(usr)) //all the check for item manipulation are in other places, you can safely open any storages as anything and its not buggy, i checked
var/mob/M = usr
@@ -61,7 +61,7 @@
add_fingerprint(usr)
/obj/item/weapon/storage/MouseDrop_T(atom/movable/O, mob/user)
/obj/item/storage/MouseDrop_T(atom/movable/O, mob/user)
if(isitem(O))
var/obj/item/I = O
if(iscarbon(user) || isdrone(user))
@@ -72,7 +72,7 @@
//Check if this storage can dump the items
/obj/item/weapon/storage/proc/content_can_dump(atom/dest_object, mob/user)
/obj/item/storage/proc/content_can_dump(atom/dest_object, mob/user)
if(Adjacent(user) && dest_object.Adjacent(user))
if(dest_object.storage_contents_dump_act(src, user))
playsound(loc, "rustle", 50, 1, -5)
@@ -80,7 +80,7 @@
return 0
//Object behaviour on storage dump
/obj/item/weapon/storage/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user)
/obj/item/storage/storage_contents_dump_act(obj/item/storage/src_object, mob/user)
var/list/things = src_object.contents.Copy()
var/datum/progressbar/progress = new(user, things.len, src)
while (do_after(user, 10, TRUE, src, FALSE, CALLBACK(src, .proc/handle_mass_item_insertion, things, src_object, user, progress)))
@@ -93,7 +93,7 @@
user.s_active.show_to(user)
return 1
/obj/item/weapon/storage/proc/handle_mass_item_insertion(list/things, obj/item/weapon/storage/src_object, mob/user, datum/progressbar/progress)
/obj/item/storage/proc/handle_mass_item_insertion(list/things, obj/item/storage/src_object, mob/user, datum/progressbar/progress)
for(var/obj/item/I in things)
things -= I
if(I.loc != src_object)
@@ -110,16 +110,16 @@
progress.update(progress.goal - things.len)
return FALSE
/obj/item/weapon/storage/proc/return_inv()
/obj/item/storage/proc/return_inv()
var/list/L = list()
L += contents
for(var/obj/item/weapon/storage/S in src)
for(var/obj/item/storage/S in src)
L += S.return_inv()
return L
/obj/item/weapon/storage/proc/show_to(mob/user)
/obj/item/storage/proc/show_to(mob/user)
if(!user.client)
return
if(user.s_active != src && (user.stat == CONSCIOUS))
@@ -135,11 +135,11 @@
is_seeing |= user
/obj/item/weapon/storage/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
/obj/item/storage/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
close_all()
return ..()
/obj/item/weapon/storage/proc/hide_from(mob/user)
/obj/item/storage/proc/hide_from(mob/user)
if(!user.client)
return
user.client.screen -= boxes
@@ -150,7 +150,7 @@
is_seeing -= user
/obj/item/weapon/storage/proc/can_see_contents()
/obj/item/storage/proc/can_see_contents()
var/list/cansee = list()
for(var/mob/M in is_seeing)
if(M.s_active == src && M.client)
@@ -160,12 +160,12 @@
return cansee
/obj/item/weapon/storage/proc/close(mob/user)
/obj/item/storage/proc/close(mob/user)
hide_from(user)
user.s_active = null
/obj/item/weapon/storage/proc/close_all()
/obj/item/storage/proc/close_all()
for(var/mob/M in can_see_contents())
close(M)
. = 1 //returns 1 if any mobs actually got a close(M) call
@@ -173,7 +173,7 @@
//This proc draws out the inventory and places the items on it. tx and ty are the upper left tile and mx, my are the bottm right.
//The numbers are calculated from the bottom-left The bottom-left slot being 1,1.
/obj/item/weapon/storage/proc/orient_objs(tx, ty, mx, my)
/obj/item/storage/proc/orient_objs(tx, ty, mx, my)
var/cx = tx
var/cy = ty
boxes.screen_loc = "[tx]:,[ty] to [mx],[my]"
@@ -189,7 +189,7 @@
//This proc draws out the inventory and places the items on it. It uses the standard position.
/obj/item/weapon/storage/proc/standard_orient_objs(rows, cols, list/obj/item/display_contents)
/obj/item/storage/proc/standard_orient_objs(rows, cols, list/obj/item/display_contents)
var/cx = 4
var/cy = 2+rows
boxes.screen_loc = "4:16,2:16 to [4+cols]:16,[2+rows]:16"
@@ -231,7 +231,7 @@
//This proc determines the size of the inventory to be displayed. Please touch it only if you know what you're doing.
/obj/item/weapon/storage/proc/orient2hud(mob/user)
/obj/item/storage/proc/orient2hud(mob/user)
var/adjusted_contents = contents.len
//Numbered contents display
@@ -260,7 +260,7 @@
//This proc return 1 if the item can be picked up and 0 if it can't.
//Set the stop_messages to stop it from printing messages
/obj/item/weapon/storage/proc/can_be_inserted(obj/item/W, stop_messages = 0, mob/user)
/obj/item/storage/proc/can_be_inserted(obj/item/W, stop_messages = 0, mob/user)
if(!istype(W) || (W.flags_1 & ABSTRACT_1))
return //Not an item
@@ -296,8 +296,8 @@
to_chat(usr, "<span class='warning'>[W] won't fit in [src], make some space!</span>")
return 0
if(W.w_class >= w_class && (istype(W, /obj/item/weapon/storage)))
if(!istype(src, /obj/item/weapon/storage/backpack/holding)) //bohs should be able to hold backpacks again. The override for putting a boh in a boh is in backpack.dm.
if(W.w_class >= w_class && (istype(W, /obj/item/storage)))
if(!istype(src, /obj/item/storage/backpack/holding)) //bohs should be able to hold backpacks again. The override for putting a boh in a boh is in backpack.dm.
if(!stop_messages)
to_chat(usr, "<span class='warning'>[src] cannot hold [W] as it's a storage item of the same size!</span>")
return 0 //To prevent the stacking of same sized storage items.
@@ -312,7 +312,7 @@
//This proc handles items being inserted. It does not perform any checks of whether an item can or can't be inserted. That's done by can_be_inserted()
//The stop_warning parameter will stop the insertion message from being displayed. It is intended for cases where you are inserting multiple items at once,
//such as when picking up all the items on a tile with one click.
/obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/user)
/obj/item/storage/proc/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/user)
if(!istype(W))
return 0
if(usr)
@@ -356,12 +356,12 @@
//Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target
/obj/item/weapon/storage/proc/remove_from_storage(obj/item/W, atom/new_location)
/obj/item/storage/proc/remove_from_storage(obj/item/W, atom/new_location)
if(!istype(W))
return 0
if(istype(src, /obj/item/weapon/storage/fancy))
var/obj/item/weapon/storage/fancy/F = src
if(istype(src, /obj/item/storage/fancy))
var/obj/item/storage/fancy/F = src
F.update_icon(1)
for(var/mob/M in can_see_contents())
@@ -386,7 +386,7 @@
W.mouse_opacity = initial(W.mouse_opacity)
return 1
/obj/item/weapon/storage/deconstruct(disassembled = TRUE)
/obj/item/storage/deconstruct(disassembled = TRUE)
var/drop_loc = loc
if(ismob(loc))
drop_loc = get_turf(src)
@@ -395,10 +395,10 @@
qdel(src)
//This proc is called when you want to place an item into the storage item.
/obj/item/weapon/storage/attackby(obj/item/W, mob/user, params)
/obj/item/storage/attackby(obj/item/W, mob/user, params)
..()
if(istype(W, /obj/item/weapon/hand_labeler))
var/obj/item/weapon/hand_labeler/labeler = W
if(istype(W, /obj/item/hand_labeler))
var/obj/item/hand_labeler/labeler = W
if(labeler.mode)
return 0
. = 1 //no afterattack
@@ -413,7 +413,7 @@
handle_item_insertion(W, 0 , user)
/obj/item/weapon/storage/attack_hand(mob/user)
/obj/item/storage/attack_hand(mob/user)
if(user.s_active == src && loc == user) //if you're already looking inside the storage item
user.s_active.close(user)
close(user)
@@ -445,10 +445,10 @@
close(M)
add_fingerprint(user)
/obj/item/weapon/storage/attack_paw(mob/user)
/obj/item/storage/attack_paw(mob/user)
return attack_hand(user)
/obj/item/weapon/storage/verb/toggle_gathering_mode()
/obj/item/storage/verb/toggle_gathering_mode()
set name = "Switch Gathering Method"
set category = "Object"
@@ -465,7 +465,7 @@
to_chat(usr, "[src] now picks up one item at a time.")
// Empty all the contents onto the current turf
/obj/item/weapon/storage/verb/quick_empty()
/obj/item/storage/verb/quick_empty()
set name = "Empty Contents"
set category = "Object"
@@ -478,7 +478,7 @@
sleep(1)
qdel(progress)
/obj/item/weapon/storage/proc/mass_remove_from_storage(atom/target, list/things, datum/progressbar/progress)
/obj/item/storage/proc/mass_remove_from_storage(atom/target, list/things, datum/progressbar/progress)
for(var/obj/item/I in things)
things -= I
if (I.loc != src)
@@ -492,7 +492,7 @@
return FALSE
// Empty all the contents onto the current turf, without checking the user's status.
/obj/item/weapon/storage/proc/do_quick_empty()
/obj/item/storage/proc/do_quick_empty()
var/turf/T = get_turf(src)
if(usr)
hide_from(usr)
@@ -500,21 +500,21 @@
remove_from_storage(I, T)
/obj/item/weapon/storage/Initialize(mapload)
/obj/item/storage/Initialize(mapload)
. = ..()
can_hold = typecacheof(can_hold)
cant_hold = typecacheof(cant_hold)
if(allow_quick_empty)
verbs += /obj/item/weapon/storage/verb/quick_empty
verbs += /obj/item/storage/verb/quick_empty
else
verbs -= /obj/item/weapon/storage/verb/quick_empty
verbs -= /obj/item/storage/verb/quick_empty
if(allow_quick_gather)
verbs += /obj/item/weapon/storage/verb/toggle_gathering_mode
verbs += /obj/item/storage/verb/toggle_gathering_mode
else
verbs -= /obj/item/weapon/storage/verb/toggle_gathering_mode
verbs -= /obj/item/storage/verb/toggle_gathering_mode
boxes = new /obj/screen/storage()
boxes.name = "storage"
@@ -533,7 +533,7 @@
PopulateContents()
/obj/item/weapon/storage/Destroy()
/obj/item/storage/Destroy()
for(var/obj/O in contents)
O.mouse_opacity = initial(O.mouse_opacity)
@@ -543,29 +543,29 @@
return ..()
/obj/item/weapon/storage/emp_act(severity)
/obj/item/storage/emp_act(severity)
if(!isliving(loc))
for(var/obj/O in contents)
O.emp_act(severity)
..()
/obj/item/weapon/storage/attack_self(mob/user)
/obj/item/storage/attack_self(mob/user)
//Clicking on itself will empty it, if it has the verb to do that.
if(user.get_active_held_item() == src)
if(verbs.Find(/obj/item/weapon/storage/verb/quick_empty))
if(verbs.Find(/obj/item/storage/verb/quick_empty))
quick_empty()
/obj/item/weapon/storage/handle_atom_del(atom/A)
/obj/item/storage/handle_atom_del(atom/A)
if(A in contents)
usr = null
remove_from_storage(A, null)
/obj/item/weapon/storage/contents_explosion(severity, target)
/obj/item/storage/contents_explosion(severity, target)
for(var/atom/A in contents)
A.ex_act(severity, target)
CHECK_TICK
//Cyberboss says: "USE THIS TO FILL IT, NOT INITIALIZE OR NEW"
/obj/item/weapon/storage/proc/PopulateContents()
/obj/item/storage/proc/PopulateContents()
@@ -1,4 +1,4 @@
/obj/item/weapon/storage/toolbox
/obj/item/storage/toolbox
name = "toolbox"
desc = "Danger. Very robust."
icon_state = "red"
@@ -18,7 +18,7 @@
var/latches = "single_latch"
var/has_latches = TRUE
/obj/item/weapon/storage/toolbox/Initialize()
/obj/item/storage/toolbox/Initialize()
..()
if(has_latches)
if(prob(10))
@@ -27,26 +27,26 @@
latches = "triple_latch"
update_icon()
/obj/item/weapon/storage/toolbox/update_icon()
/obj/item/storage/toolbox/update_icon()
..()
cut_overlays()
if(has_latches)
add_overlay(latches)
/obj/item/weapon/storage/toolbox/suicide_act(mob/user)
/obj/item/storage/toolbox/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] robusts [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (BRUTELOSS)
/obj/item/weapon/storage/toolbox/emergency
/obj/item/storage/toolbox/emergency
name = "emergency toolbox"
icon_state = "red"
item_state = "toolbox_red"
/obj/item/weapon/storage/toolbox/emergency/PopulateContents()
new /obj/item/weapon/crowbar/red(src)
new /obj/item/weapon/weldingtool/mini(src)
new /obj/item/weapon/extinguisher/mini(src)
/obj/item/storage/toolbox/emergency/PopulateContents()
new /obj/item/crowbar/red(src)
new /obj/item/weldingtool/mini(src)
new /obj/item/extinguisher/mini(src)
switch(rand(1,3))
if(1)
new /obj/item/device/flashlight(src)
@@ -56,40 +56,40 @@
new /obj/item/device/flashlight/flare(src)
new /obj/item/device/radio/off(src)
/obj/item/weapon/storage/toolbox/emergency/old
/obj/item/storage/toolbox/emergency/old
name = "rusty red toolbox"
icon_state = "toolbox_red_old"
has_latches = FALSE
/obj/item/weapon/storage/toolbox/mechanical
/obj/item/storage/toolbox/mechanical
name = "mechanical toolbox"
icon_state = "blue"
item_state = "toolbox_blue"
/obj/item/weapon/storage/toolbox/mechanical/PopulateContents()
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wrench(src)
new /obj/item/weapon/weldingtool(src)
new /obj/item/weapon/crowbar(src)
/obj/item/storage/toolbox/mechanical/PopulateContents()
new /obj/item/screwdriver(src)
new /obj/item/wrench(src)
new /obj/item/weldingtool(src)
new /obj/item/crowbar(src)
new /obj/item/device/analyzer(src)
new /obj/item/weapon/wirecutters(src)
new /obj/item/wirecutters(src)
/obj/item/weapon/storage/toolbox/mechanical/old
/obj/item/storage/toolbox/mechanical/old
name = "rusty blue toolbox"
icon_state = "toolbox_blue_old"
has_latches = FALSE
/obj/item/weapon/storage/toolbox/electrical
/obj/item/storage/toolbox/electrical
name = "electrical toolbox"
icon_state = "yellow"
item_state = "toolbox_yellow"
/obj/item/weapon/storage/toolbox/electrical/PopulateContents()
/obj/item/storage/toolbox/electrical/PopulateContents()
var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white")
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wirecutters(src)
new /obj/item/screwdriver(src)
new /obj/item/wirecutters(src)
new /obj/item/device/t_scanner(src)
new /obj/item/weapon/crowbar(src)
new /obj/item/crowbar(src)
new /obj/item/stack/cable_coil(src,30,pickedcolor)
new /obj/item/stack/cable_coil(src,30,pickedcolor)
if(prob(5))
@@ -97,7 +97,7 @@
else
new /obj/item/stack/cable_coil(src,30,pickedcolor)
/obj/item/weapon/storage/toolbox/syndicate
/obj/item/storage/toolbox/syndicate
name = "suspicious looking toolbox"
icon_state = "syndicate"
item_state = "toolbox_syndi"
@@ -106,31 +106,31 @@
force = 15
throwforce = 18
/obj/item/weapon/storage/toolbox/syndicate/PopulateContents()
new /obj/item/weapon/screwdriver/nuke(src)
new /obj/item/weapon/wrench(src)
new /obj/item/weapon/weldingtool/largetank(src)
new /obj/item/weapon/crowbar/red(src)
new /obj/item/weapon/wirecutters(src, "red")
/obj/item/storage/toolbox/syndicate/PopulateContents()
new /obj/item/screwdriver/nuke(src)
new /obj/item/wrench(src)
new /obj/item/weldingtool/largetank(src)
new /obj/item/crowbar/red(src)
new /obj/item/wirecutters(src, "red")
new /obj/item/device/multitool(src)
new /obj/item/clothing/gloves/combat(src)
/obj/item/weapon/storage/toolbox/drone
/obj/item/storage/toolbox/drone
name = "mechanical toolbox"
icon_state = "blue"
item_state = "toolbox_blue"
/obj/item/weapon/storage/toolbox/drone/PopulateContents()
/obj/item/storage/toolbox/drone/PopulateContents()
var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white")
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wrench(src)
new /obj/item/weapon/weldingtool(src)
new /obj/item/weapon/crowbar(src)
new /obj/item/screwdriver(src)
new /obj/item/wrench(src)
new /obj/item/weldingtool(src)
new /obj/item/crowbar(src)
new /obj/item/stack/cable_coil(src,30,pickedcolor)
new /obj/item/weapon/wirecutters(src)
new /obj/item/wirecutters(src)
new /obj/item/device/multitool(src)
/obj/item/weapon/storage/toolbox/brass
/obj/item/storage/toolbox/brass
name = "brass box"
desc = "A huge brass box with several indentations in its surface."
icon_state = "brassbox"
@@ -144,27 +144,27 @@
attack_verb = list("robusted", "crushed", "smashed")
var/fabricator_type = /obj/item/clockwork/replica_fabricator/scarab
/obj/item/weapon/storage/toolbox/brass/prefilled/PopulateContents()
/obj/item/storage/toolbox/brass/prefilled/PopulateContents()
new fabricator_type(src)
new /obj/item/weapon/screwdriver/brass(src)
new /obj/item/weapon/wirecutters/brass(src)
new /obj/item/weapon/wrench/brass(src)
new /obj/item/weapon/crowbar/brass(src)
new /obj/item/weapon/weldingtool/experimental/brass(src)
new /obj/item/screwdriver/brass(src)
new /obj/item/wirecutters/brass(src)
new /obj/item/wrench/brass(src)
new /obj/item/crowbar/brass(src)
new /obj/item/weldingtool/experimental/brass(src)
/obj/item/weapon/storage/toolbox/brass/prefilled/ratvar
/obj/item/storage/toolbox/brass/prefilled/ratvar
var/slab_type = /obj/item/clockwork/slab
/obj/item/weapon/storage/toolbox/brass/prefilled/ratvar/PopulateContents()
/obj/item/storage/toolbox/brass/prefilled/ratvar/PopulateContents()
..()
new slab_type(src)
/obj/item/weapon/storage/toolbox/brass/prefilled/ratvar/admin
/obj/item/storage/toolbox/brass/prefilled/ratvar/admin
slab_type = /obj/item/clockwork/slab/debug
fabricator_type = /obj/item/clockwork/replica_fabricator/scarab/debug
/obj/item/weapon/storage/toolbox/artistic
/obj/item/storage/toolbox/artistic
name = "artistic toolbox"
desc = "A toolbox painted bright green. Why anyone would store art supplies in a toolbox is beyond you, but it has plenty of extra space."
icon_state = "green"
@@ -173,9 +173,9 @@
storage_slots = 10
w_class = WEIGHT_CLASS_GIGANTIC //Holds more than a regular toolbox!
/obj/item/weapon/storage/toolbox/artistic/PopulateContents()
new/obj/item/weapon/storage/crayons(src)
new/obj/item/weapon/crowbar(src)
/obj/item/storage/toolbox/artistic/PopulateContents()
new/obj/item/storage/crayons(src)
new/obj/item/crowbar(src)
new/obj/item/stack/cable_coil/red(src)
new/obj/item/stack/cable_coil/yellow(src)
new/obj/item/stack/cable_coil/blue(src)
@@ -1,106 +1,106 @@
/obj/item/weapon/storage/box/syndicate
/obj/item/storage/box/syndicate
/obj/item/weapon/storage/box/syndicate/PopulateContents()
/obj/item/storage/box/syndicate/PopulateContents()
switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1)))
if("bloodyspai") // 27 tc now this is more right
new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set
new /obj/item/clothing/mask/chameleon(src) // Goes with above
new /obj/item/weapon/card/id/syndicate(src) // 2 tc
new /obj/item/card/id/syndicate(src) // 2 tc
new /obj/item/clothing/shoes/chameleon(src) // 2 tc
new /obj/item/device/camera_bug(src) // 1 tc
new /obj/item/device/multitool/ai_detect(src) // 1 tc
new /obj/item/device/encryptionkey/syndicate(src) // 2 tc
new /obj/item/weapon/reagent_containers/syringe/mulligan(src) // 4 tc
new /obj/item/weapon/switchblade(src) //I'll count this as 2 tc
new /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate (src) // 2 tc this shit heals
new /obj/item/reagent_containers/syringe/mulligan(src) // 4 tc
new /obj/item/switchblade(src) //I'll count this as 2 tc
new /obj/item/storage/fancy/cigarettes/cigpack_syndicate (src) // 2 tc this shit heals
new /obj/item/device/flashlight/emp(src) // 2 tc
new /obj/item/device/chameleon(src) // 7 tc
if("stealth") // 31 tc
new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow(src)
new /obj/item/weapon/pen/sleepy(src)
new /obj/item/gun/energy/kinetic_accelerator/crossbow(src)
new /obj/item/pen/sleepy(src)
new /obj/item/device/healthanalyzer/rad_laser(src)
new /obj/item/device/chameleon(src)
new /obj/item/weapon/soap/syndie(src)
new /obj/item/soap/syndie(src)
new /obj/item/clothing/glasses/thermal/syndi(src)
if("bond") // 29 tc
new /obj/item/weapon/gun/ballistic/automatic/pistol(src)
new /obj/item/weapon/suppressor(src)
new /obj/item/gun/ballistic/automatic/pistol(src)
new /obj/item/suppressor(src)
new /obj/item/ammo_box/magazine/m10mm(src)
new /obj/item/ammo_box/magazine/m10mm(src)
new /obj/item/clothing/under/chameleon(src)
new /obj/item/weapon/card/id/syndicate(src)
new /obj/item/weapon/reagent_containers/syringe/stimulants(src)
new /obj/item/card/id/syndicate(src)
new /obj/item/reagent_containers/syringe/stimulants(src)
if("screwed") // 29 tc
new /obj/item/device/sbeacondrop/bomb(src)
new /obj/item/weapon/grenade/syndieminibomb(src)
new /obj/item/grenade/syndieminibomb(src)
new /obj/item/device/sbeacondrop/powersink(src)
new /obj/item/clothing/suit/space/syndicate/black/red(src)
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
new /obj/item/device/encryptionkey/syndicate(src)
if("guns") // 28 tc now
new /obj/item/weapon/gun/ballistic/revolver(src)
new /obj/item/gun/ballistic/revolver(src)
new /obj/item/ammo_box/a357(src)
new /obj/item/ammo_box/a357(src)
new /obj/item/weapon/card/emag(src)
new /obj/item/weapon/grenade/plastic/c4(src)
new /obj/item/card/emag(src)
new /obj/item/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)
if("murder") // 28 tc now
new /obj/item/weapon/melee/transforming/energy/sword/saber(src)
new /obj/item/melee/transforming/energy/sword/saber(src)
new /obj/item/clothing/glasses/thermal/syndi(src)
new /obj/item/weapon/card/emag(src)
new /obj/item/card/emag(src)
new /obj/item/clothing/shoes/chameleon(src)
new /obj/item/device/encryptionkey/syndicate(src)
new /obj/item/weapon/grenade/syndieminibomb(src)
new /obj/item/grenade/syndieminibomb(src)
if("implant") // 55+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it?
new /obj/item/weapon/implanter/freedom(src)
new /obj/item/weapon/implanter/uplink/precharged(src)
new /obj/item/weapon/implanter/emp(src)
new /obj/item/weapon/implanter/adrenalin(src)
new /obj/item/weapon/implanter/explosive(src)
new /obj/item/weapon/implanter/storage(src)
new /obj/item/implanter/freedom(src)
new /obj/item/implanter/uplink/precharged(src)
new /obj/item/implanter/emp(src)
new /obj/item/implanter/adrenalin(src)
new /obj/item/implanter/explosive(src)
new /obj/item/implanter/storage(src)
if("hacker") // 26 tc
new /obj/item/weapon/aiModule/syndicate(src)
new /obj/item/weapon/card/emag(src)
new /obj/item/aiModule/syndicate(src)
new /obj/item/card/emag(src)
new /obj/item/device/encryptionkey/binary(src)
new /obj/item/weapon/aiModule/toyAI(src)
new /obj/item/aiModule/toyAI(src)
new /obj/item/device/multitool/ai_detect(src)
if("lordsingulo") // 24 tc
new /obj/item/device/sbeacondrop(src)
new /obj/item/clothing/suit/space/syndicate/black/red(src)
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
new /obj/item/weapon/card/emag(src)
new /obj/item/card/emag(src)
if("sabotage") // 26 tc now
new /obj/item/weapon/grenade/plastic/c4 (src)
new /obj/item/weapon/grenade/plastic/c4 (src)
new /obj/item/grenade/plastic/c4 (src)
new /obj/item/grenade/plastic/c4 (src)
new /obj/item/device/doorCharge(src)
new /obj/item/device/doorCharge(src)
new /obj/item/device/camera_bug(src)
new /obj/item/device/sbeacondrop/powersink(src)
new /obj/item/weapon/cartridge/virus/syndicate(src)
new /obj/item/weapon/storage/toolbox/syndicate(src) //To actually get to those places
new /obj/item/cartridge/virus/syndicate(src)
new /obj/item/storage/toolbox/syndicate(src) //To actually get to those places
new /obj/item/pizzabox/bomb
if("darklord") //20 tc + tk + summon item close enough for now
new /obj/item/weapon/twohanded/dualsaber(src)
new /obj/item/weapon/dnainjector/telemut/darkbundle(src)
new /obj/item/twohanded/dualsaber(src)
new /obj/item/dnainjector/telemut/darkbundle(src)
new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
new /obj/item/weapon/card/id/syndicate(src)
new /obj/item/card/id/syndicate(src)
new /obj/item/clothing/shoes/chameleon(src) //because slipping while being a dark lord sucks
new /obj/item/weapon/spellbook/oneuse/summonitem(src)
new /obj/item/spellbook/oneuse/summonitem(src)
if("sniper") //This shit is unique so can't really balance it around tc, also no silencer because getting killed without ANY indicator on what killed you sucks
new /obj/item/weapon/gun/ballistic/automatic/sniper_rifle(src) // 12 tc
new /obj/item/gun/ballistic/automatic/sniper_rifle(src) // 12 tc
new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src)
new /obj/item/clothing/glasses/thermal/syndi(src)
new /obj/item/clothing/gloves/color/latex/nitrile(src)
@@ -109,158 +109,158 @@
if("metaops") // 30 tc
new /obj/item/clothing/suit/space/hardsuit/syndi(src) // 8 tc
new /obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog/unrestricted(src) // 8 tc
new /obj/item/weapon/implanter/explosive(src) // 2 tc
new /obj/item/gun/ballistic/automatic/shotgun/bulldog/unrestricted(src) // 8 tc
new /obj/item/implanter/explosive(src) // 2 tc
new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc
new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc
new /obj/item/weapon/grenade/plastic/c4 (src) // 1 tc
new /obj/item/weapon/grenade/plastic/c4 (src) // 1 tc
new /obj/item/weapon/card/emag(src) // 6 tc
new /obj/item/grenade/plastic/c4 (src) // 1 tc
new /obj/item/grenade/plastic/c4 (src) // 1 tc
new /obj/item/card/emag(src) // 6 tc
if("ninja") // 33 tc worth
new /obj/item/weapon/katana(src) // Unique , hard to tell how much tc this is worth. 8 tc?
new /obj/item/weapon/implanter/adrenalin(src) // 8 tc
new /obj/item/weapon/throwing_star(src) // ~5 tc for all 6
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/storage/belt/chameleon(src) // Unique but worth at least 2 tc
new /obj/item/weapon/card/id/syndicate(src) // 2 tc
new /obj/item/katana(src) // Unique , hard to tell how much tc this is worth. 8 tc?
new /obj/item/implanter/adrenalin(src) // 8 tc
new /obj/item/throwing_star(src) // ~5 tc for all 6
new /obj/item/throwing_star(src)
new /obj/item/throwing_star(src)
new /obj/item/throwing_star(src)
new /obj/item/throwing_star(src)
new /obj/item/throwing_star(src)
new /obj/item/storage/belt/chameleon(src) // Unique but worth at least 2 tc
new /obj/item/card/id/syndicate(src) // 2 tc
new /obj/item/device/chameleon(src) // 7 tc
/obj/item/weapon/storage/box/syndie_kit
/obj/item/storage/box/syndie_kit
name = "box"
desc = "A sleek, sturdy box."
icon_state = "syndiebox"
illustration = "writing_syndie"
/obj/item/weapon/storage/box/syndie_kit/imp_freedom
/obj/item/storage/box/syndie_kit/imp_freedom
name = "boxed freedom implant (with injector)"
/obj/item/weapon/storage/box/syndie_kit/imp_freedom/PopulateContents()
var/obj/item/weapon/implanter/O = new(src)
O.imp = new /obj/item/weapon/implant/freedom(O)
/obj/item/storage/box/syndie_kit/imp_freedom/PopulateContents()
var/obj/item/implanter/O = new(src)
O.imp = new /obj/item/implant/freedom(O)
O.update_icon()
/obj/item/weapon/storage/box/syndie_kit/imp_microbomb
/obj/item/storage/box/syndie_kit/imp_microbomb
name = "Microbomb Implant (with injector)"
/obj/item/weapon/storage/box/syndie_kit/imp_microbomb/PopulateContents()
var/obj/item/weapon/implanter/O = new(src)
O.imp = new /obj/item/weapon/implant/explosive(O)
/obj/item/storage/box/syndie_kit/imp_microbomb/PopulateContents()
var/obj/item/implanter/O = new(src)
O.imp = new /obj/item/implant/explosive(O)
O.update_icon()
/obj/item/weapon/storage/box/syndie_kit/imp_macrobomb
/obj/item/storage/box/syndie_kit/imp_macrobomb
name = "Macrobomb Implant (with injector)"
/obj/item/weapon/storage/box/syndie_kit/imp_macrobomb/PopulateContents()
var/obj/item/weapon/implanter/O = new(src)
O.imp = new /obj/item/weapon/implant/explosive/macro(O)
/obj/item/storage/box/syndie_kit/imp_macrobomb/PopulateContents()
var/obj/item/implanter/O = new(src)
O.imp = new /obj/item/implant/explosive/macro(O)
O.update_icon()
/obj/item/weapon/storage/box/syndie_kit/imp_uplink
/obj/item/storage/box/syndie_kit/imp_uplink
name = "boxed uplink implant (with injector)"
/obj/item/weapon/storage/box/syndie_kit/imp_uplink/PopulateContents()
/obj/item/storage/box/syndie_kit/imp_uplink/PopulateContents()
..()
var/obj/item/weapon/implanter/O = new(src)
O.imp = new /obj/item/weapon/implant/uplink(O)
var/obj/item/implanter/O = new(src)
O.imp = new /obj/item/implant/uplink(O)
O.update_icon()
/obj/item/weapon/storage/box/syndie_kit/bioterror
/obj/item/storage/box/syndie_kit/bioterror
name = "bioterror syringe box"
/obj/item/weapon/storage/box/syndie_kit/bioterror/PopulateContents()
/obj/item/storage/box/syndie_kit/bioterror/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
new /obj/item/reagent_containers/syringe/bioterror(src)
/obj/item/weapon/storage/box/syndie_kit/imp_adrenal
/obj/item/storage/box/syndie_kit/imp_adrenal
name = "boxed adrenal implant (with injector)"
/obj/item/weapon/storage/box/syndie_kit/imp_adrenal/PopulateContents()
var/obj/item/weapon/implanter/O = new(src)
O.imp = new /obj/item/weapon/implant/adrenalin(O)
/obj/item/storage/box/syndie_kit/imp_adrenal/PopulateContents()
var/obj/item/implanter/O = new(src)
O.imp = new /obj/item/implant/adrenalin(O)
O.update_icon()
/obj/item/weapon/storage/box/syndie_kit/imp_storage
/obj/item/storage/box/syndie_kit/imp_storage
name = "boxed storage implant (with injector)"
/obj/item/weapon/storage/box/syndie_kit/imp_storage/PopulateContents()
new /obj/item/weapon/implanter/storage(src)
/obj/item/storage/box/syndie_kit/imp_storage/PopulateContents()
new /obj/item/implanter/storage(src)
/obj/item/weapon/storage/box/syndie_kit/space
/obj/item/storage/box/syndie_kit/space
name = "boxed space suit and helmet"
can_hold = list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate)
max_w_class = WEIGHT_CLASS_NORMAL
/obj/item/weapon/storage/box/syndie_kit/space/PopulateContents()
/obj/item/storage/box/syndie_kit/space/PopulateContents()
new /obj/item/clothing/suit/space/syndicate/black/red(src) // Black and red is so in right now
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
/obj/item/weapon/storage/box/syndie_kit/emp
/obj/item/storage/box/syndie_kit/emp
name = "boxed EMP kit"
/obj/item/weapon/storage/box/syndie_kit/emp/PopulateContents()
new /obj/item/weapon/grenade/empgrenade(src)
new /obj/item/weapon/grenade/empgrenade(src)
new /obj/item/weapon/grenade/empgrenade(src)
new /obj/item/weapon/grenade/empgrenade(src)
new /obj/item/weapon/grenade/empgrenade(src)
new /obj/item/weapon/implanter/emp(src)
/obj/item/storage/box/syndie_kit/emp/PopulateContents()
new /obj/item/grenade/empgrenade(src)
new /obj/item/grenade/empgrenade(src)
new /obj/item/grenade/empgrenade(src)
new /obj/item/grenade/empgrenade(src)
new /obj/item/grenade/empgrenade(src)
new /obj/item/implanter/emp(src)
/obj/item/weapon/storage/box/syndie_kit/chemical
/obj/item/storage/box/syndie_kit/chemical
name = "boxed chemical kit"
storage_slots = 14
/obj/item/weapon/storage/box/syndie_kit/chemical/PopulateContents()
new /obj/item/weapon/reagent_containers/glass/bottle/polonium(src)
new /obj/item/weapon/reagent_containers/glass/bottle/venom(src)
new /obj/item/weapon/reagent_containers/glass/bottle/neurotoxin2(src)
new /obj/item/weapon/reagent_containers/glass/bottle/formaldehyde(src)
new /obj/item/weapon/reagent_containers/glass/bottle/spewium(src)
new /obj/item/weapon/reagent_containers/glass/bottle/cyanide(src)
new /obj/item/weapon/reagent_containers/glass/bottle/histamine(src)
new /obj/item/weapon/reagent_containers/glass/bottle/initropidril(src)
new /obj/item/weapon/reagent_containers/glass/bottle/pancuronium(src)
new /obj/item/weapon/reagent_containers/glass/bottle/sodium_thiopental(src)
new /obj/item/weapon/reagent_containers/glass/bottle/coniine(src)
new /obj/item/weapon/reagent_containers/glass/bottle/curare(src)
new /obj/item/weapon/reagent_containers/glass/bottle/amanitin(src)
new /obj/item/weapon/reagent_containers/syringe(src)
/obj/item/storage/box/syndie_kit/chemical/PopulateContents()
new /obj/item/reagent_containers/glass/bottle/polonium(src)
new /obj/item/reagent_containers/glass/bottle/venom(src)
new /obj/item/reagent_containers/glass/bottle/neurotoxin2(src)
new /obj/item/reagent_containers/glass/bottle/formaldehyde(src)
new /obj/item/reagent_containers/glass/bottle/spewium(src)
new /obj/item/reagent_containers/glass/bottle/cyanide(src)
new /obj/item/reagent_containers/glass/bottle/histamine(src)
new /obj/item/reagent_containers/glass/bottle/initropidril(src)
new /obj/item/reagent_containers/glass/bottle/pancuronium(src)
new /obj/item/reagent_containers/glass/bottle/sodium_thiopental(src)
new /obj/item/reagent_containers/glass/bottle/coniine(src)
new /obj/item/reagent_containers/glass/bottle/curare(src)
new /obj/item/reagent_containers/glass/bottle/amanitin(src)
new /obj/item/reagent_containers/syringe(src)
/obj/item/weapon/storage/box/syndie_kit/nuke
/obj/item/storage/box/syndie_kit/nuke
name = "box"
/obj/item/weapon/storage/box/syndie_kit/nuke/PopulateContents()
new /obj/item/weapon/screwdriver/nuke(src)
/obj/item/storage/box/syndie_kit/nuke/PopulateContents()
new /obj/item/screwdriver/nuke(src)
new /obj/item/nuke_core_container(src)
new /obj/item/weapon/paper/guides/antag/nuke_instructions(src)
new /obj/item/paper/guides/antag/nuke_instructions(src)
/obj/item/weapon/storage/box/syndie_kit/supermatter
/obj/item/storage/box/syndie_kit/supermatter
name = "box"
/obj/item/weapon/storage/box/syndie_kit/supermatter/PopulateContents()
new /obj/item/weapon/scalpel/supermatter(src)
new /obj/item/weapon/hemostat/supermatter(src)
/obj/item/storage/box/syndie_kit/supermatter/PopulateContents()
new /obj/item/scalpel/supermatter(src)
new /obj/item/hemostat/supermatter(src)
new /obj/item/nuke_core_container/supermatter(src)
new /obj/item/weapon/paper/guides/antag/supermatter_sliver(src)
new /obj/item/paper/guides/antag/supermatter_sliver(src)
/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade
/obj/item/storage/box/syndie_kit/tuberculosisgrenade
name = "boxed virus grenade kit"
/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade/PopulateContents()
new /obj/item/weapon/grenade/chem_grenade/tuberculosis(src)
/obj/item/storage/box/syndie_kit/tuberculosisgrenade/PopulateContents()
new /obj/item/grenade/chem_grenade/tuberculosis(src)
for(var/i in 1 to 5)
new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src)
new /obj/item/weapon/reagent_containers/syringe(src)
new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosiscure(src)
new /obj/item/reagent_containers/hypospray/medipen/tuberculosiscure(src)
new /obj/item/reagent_containers/syringe(src)
new /obj/item/reagent_containers/glass/bottle/tuberculosiscure(src)
/obj/item/weapon/storage/box/syndie_kit/chameleon
/obj/item/storage/box/syndie_kit/chameleon
name = "chameleon kit"
/obj/item/weapon/storage/box/syndie_kit/chameleon/PopulateContents()
/obj/item/storage/box/syndie_kit/chameleon/PopulateContents()
new /obj/item/clothing/under/chameleon(src)
new /obj/item/clothing/suit/chameleon(src)
new /obj/item/clothing/gloves/chameleon(src)
@@ -268,40 +268,40 @@
new /obj/item/clothing/glasses/chameleon(src)
new /obj/item/clothing/head/chameleon(src)
new /obj/item/clothing/mask/chameleon(src)
new /obj/item/weapon/storage/backpack/chameleon(src)
new /obj/item/storage/backpack/chameleon(src)
new /obj/item/device/radio/headset/chameleon(src)
new /obj/item/weapon/stamp/chameleon(src)
new /obj/item/stamp/chameleon(src)
new /obj/item/device/pda/chameleon(src)
new /obj/item/weapon/gun/energy/laser/chameleon(src)
new /obj/item/gun/energy/laser/chameleon(src)
//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars.
//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance)
/obj/item/weapon/storage/box/syndie_kit/throwing_weapons/PopulateContents()
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/restraints/legcuffs/bola/tactical(src)
new /obj/item/weapon/restraints/legcuffs/bola/tactical(src)
/obj/item/storage/box/syndie_kit/throwing_weapons/PopulateContents()
new /obj/item/throwing_star(src)
new /obj/item/throwing_star(src)
new /obj/item/throwing_star(src)
new /obj/item/throwing_star(src)
new /obj/item/throwing_star(src)
new /obj/item/restraints/legcuffs/bola/tactical(src)
new /obj/item/restraints/legcuffs/bola/tactical(src)
/obj/item/weapon/storage/box/syndie_kit/cutouts/PopulateContents()
/obj/item/storage/box/syndie_kit/cutouts/PopulateContents()
for(var/i in 1 to 3)
new/obj/item/cardboard_cutout/adaptive(src)
new/obj/item/toy/crayon/rainbow(src)
/obj/item/weapon/storage/box/syndie_kit/romerol/PopulateContents()
new /obj/item/weapon/reagent_containers/glass/bottle/romerol(src)
new /obj/item/weapon/reagent_containers/syringe(src)
new /obj/item/weapon/reagent_containers/dropper(src)
/obj/item/storage/box/syndie_kit/romerol/PopulateContents()
new /obj/item/reagent_containers/glass/bottle/romerol(src)
new /obj/item/reagent_containers/syringe(src)
new /obj/item/reagent_containers/dropper(src)
/obj/item/weapon/storage/box/syndie_kit/ez_clean/PopulateContents()
/obj/item/storage/box/syndie_kit/ez_clean/PopulateContents()
for(var/i in 1 to 3)
new/obj/item/weapon/grenade/chem_grenade/ez_clean(src)
new/obj/item/grenade/chem_grenade/ez_clean(src)
/obj/item/weapon/storage/box/hug/reverse_revolver/PopulateContents()
new /obj/item/weapon/gun/ballistic/revolver/reverse(src)
/obj/item/storage/box/hug/reverse_revolver/PopulateContents()
new /obj/item/gun/ballistic/revolver/reverse(src)
/obj/item/weapon/storage/box/syndie_kit/mimery/PopulateContents()
new /obj/item/weapon/spellbook/oneuse/mimery_blockade(src)
new /obj/item/weapon/spellbook/oneuse/mimery_guns(src)
/obj/item/storage/box/syndie_kit/mimery/PopulateContents()
new /obj/item/spellbook/oneuse/mimery_blockade(src)
new /obj/item/spellbook/oneuse/mimery_guns(src)
@@ -1,4 +1,4 @@
/obj/item/weapon/storage/wallet
/obj/item/storage/wallet
name = "wallet"
desc = "It can hold a few small and personal things."
storage_slots = 4
@@ -7,77 +7,77 @@
resistance_flags = FLAMMABLE
can_hold = list(
/obj/item/stack/spacecash,
/obj/item/weapon/card,
/obj/item/card,
/obj/item/clothing/mask/cigarette,
/obj/item/device/flashlight/pen,
/obj/item/seeds,
/obj/item/stack/medical,
/obj/item/toy/crayon,
/obj/item/weapon/coin,
/obj/item/weapon/dice,
/obj/item/weapon/disk,
/obj/item/weapon/implanter,
/obj/item/weapon/lighter,
/obj/item/weapon/lipstick,
/obj/item/weapon/match,
/obj/item/weapon/paper,
/obj/item/weapon/pen,
/obj/item/weapon/photo,
/obj/item/weapon/reagent_containers/dropper,
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/screwdriver,
/obj/item/weapon/stamp)
/obj/item/coin,
/obj/item/dice,
/obj/item/disk,
/obj/item/implanter,
/obj/item/lighter,
/obj/item/lipstick,
/obj/item/match,
/obj/item/paper,
/obj/item/pen,
/obj/item/photo,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/syringe,
/obj/item/screwdriver,
/obj/item/stamp)
slot_flags = SLOT_ID
var/obj/item/weapon/card/id/front_id = null
var/obj/item/card/id/front_id = null
var/list/combined_access = list()
/obj/item/weapon/storage/wallet/remove_from_storage(obj/item/W, atom/new_location)
/obj/item/storage/wallet/remove_from_storage(obj/item/W, atom/new_location)
. = ..(W, new_location)
if(.)
if(istype(W, /obj/item/weapon/card/id))
if(istype(W, /obj/item/card/id))
if(W == front_id)
front_id = null
refreshID()
update_icon()
/obj/item/weapon/storage/wallet/proc/refreshID()
/obj/item/storage/wallet/proc/refreshID()
combined_access.Cut()
for(var/obj/item/weapon/card/id/I in contents)
for(var/obj/item/card/id/I in contents)
if(!front_id)
front_id = I
update_icon()
combined_access |= I.access
/obj/item/weapon/storage/wallet/handle_item_insertion(obj/item/W, prevent_warning = 0)
/obj/item/storage/wallet/handle_item_insertion(obj/item/W, prevent_warning = 0)
. = ..()
if(.)
if(istype(W, /obj/item/weapon/card/id))
if(istype(W, /obj/item/card/id))
refreshID()
/obj/item/weapon/storage/wallet/update_icon()
/obj/item/storage/wallet/update_icon()
icon_state = "wallet"
if(front_id)
icon_state = "wallet_[front_id.icon_state]"
/obj/item/weapon/storage/wallet/GetID()
/obj/item/storage/wallet/GetID()
return front_id
/obj/item/weapon/storage/wallet/GetAccess()
/obj/item/storage/wallet/GetAccess()
if(combined_access.len)
return combined_access
else
return ..()
/obj/item/weapon/storage/wallet/random/PopulateContents()
/obj/item/storage/wallet/random/PopulateContents()
var/item1_type = pick( /obj/item/stack/spacecash/c10, /obj/item/stack/spacecash/c100, /obj/item/stack/spacecash/c1000, /obj/item/stack/spacecash/c20, /obj/item/stack/spacecash/c200, /obj/item/stack/spacecash/c50, /obj/item/stack/spacecash/c500)
var/item2_type
if(prob(50))
item2_type = pick( /obj/item/stack/spacecash/c10, /obj/item/stack/spacecash/c100, /obj/item/stack/spacecash/c1000, /obj/item/stack/spacecash/c20, /obj/item/stack/spacecash/c200, /obj/item/stack/spacecash/c50, /obj/item/stack/spacecash/c500)
var/item3_type = pick( /obj/item/weapon/coin/silver, /obj/item/weapon/coin/silver, /obj/item/weapon/coin/gold, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron )
var/item3_type = pick( /obj/item/coin/silver, /obj/item/coin/silver, /obj/item/coin/gold, /obj/item/coin/iron, /obj/item/coin/iron, /obj/item/coin/iron )
spawn(2)
if(item1_type)
+21 -21
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/melee/baton
/obj/item/melee/baton
name = "stunbaton"
desc = "A stun baton for incapacitating people with."
icon_state = "stunbaton"
@@ -15,33 +15,33 @@
var/stunforce = 140
var/status = 0
var/obj/item/weapon/stock_parts/cell/high/cell
var/obj/item/stock_parts/cell/high/cell
var/hitcost = 1000
var/throw_hit_chance = 35
/obj/item/weapon/melee/baton/get_cell()
/obj/item/melee/baton/get_cell()
return cell
/obj/item/weapon/melee/baton/suicide_act(mob/user)
/obj/item/melee/baton/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is putting the live [name] in [user.p_their()] mouth! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (FIRELOSS)
/obj/item/weapon/melee/baton/Initialize()
/obj/item/melee/baton/Initialize()
. = ..()
update_icon()
/obj/item/weapon/melee/baton/throw_impact(atom/hit_atom)
/obj/item/melee/baton/throw_impact(atom/hit_atom)
..()
//Only mob/living types have stun handling
if(status && prob(throw_hit_chance) && iscarbon(hit_atom))
baton_stun(hit_atom)
/obj/item/weapon/melee/baton/loaded/Initialize() //this one starts with a cell pre-installed.
/obj/item/melee/baton/loaded/Initialize() //this one starts with a cell pre-installed.
cell = new(src)
update_icon()
. = ..()
/obj/item/weapon/melee/baton/proc/deductcharge(chrgdeductamt)
/obj/item/melee/baton/proc/deductcharge(chrgdeductamt)
if(cell)
//Note this value returned is significant, as it will determine
//if a stun is applied or not
@@ -53,7 +53,7 @@
playsound(loc, "sparks", 75, 1, -1)
/obj/item/weapon/melee/baton/update_icon()
/obj/item/melee/baton/update_icon()
if(status)
icon_state = "[initial(name)]_active"
else if(!cell)
@@ -61,16 +61,16 @@
else
icon_state = "[initial(name)]"
/obj/item/weapon/melee/baton/examine(mob/user)
/obj/item/melee/baton/examine(mob/user)
..()
if(cell)
to_chat(user, "<span class='notice'>The baton is [round(cell.percent())]% charged.</span>")
else
to_chat(user, "<span class='warning'>The baton does not have a power source installed.</span>")
/obj/item/weapon/melee/baton/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/stock_parts/cell))
var/obj/item/weapon/stock_parts/cell/C = W
/obj/item/melee/baton/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/stock_parts/cell))
var/obj/item/stock_parts/cell/C = W
if(cell)
to_chat(user, "<span class='notice'>[src] already has a cell.</span>")
else
@@ -83,7 +83,7 @@
to_chat(user, "<span class='notice'>You install a cell in [src].</span>")
update_icon()
else if(istype(W, /obj/item/weapon/screwdriver))
else if(istype(W, /obj/item/screwdriver))
if(cell)
cell.update_icon()
cell.forceMove(get_turf(src))
@@ -94,7 +94,7 @@
else
return ..()
/obj/item/weapon/melee/baton/attack_self(mob/user)
/obj/item/melee/baton/attack_self(mob/user)
if(cell && cell.charge > hitcost)
status = !status
to_chat(user, "<span class='notice'>[src] is now [status ? "on" : "off"].</span>")
@@ -108,7 +108,7 @@
update_icon()
add_fingerprint(user)
/obj/item/weapon/melee/baton/attack(mob/M, mob/living/carbon/human/user)
/obj/item/melee/baton/attack(mob/M, mob/living/carbon/human/user)
if(status && user.disabilities & CLUMSY && prob(50))
user.visible_message("<span class='danger'>[user] accidentally hits themself with [src]!</span>", \
"<span class='userdanger'>You accidentally hit yourself with [src]!</span>")
@@ -140,7 +140,7 @@
..()
/obj/item/weapon/melee/baton/proc/baton_stun(mob/living/L, mob/user)
/obj/item/melee/baton/proc/baton_stun(mob/living/L, mob/user)
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) //No message; check_shields() handles that
@@ -172,12 +172,12 @@
return 1
/obj/item/weapon/melee/baton/emp_act(severity)
/obj/item/melee/baton/emp_act(severity)
deductcharge(1000 / severity)
..()
//Makeshift stun baton. Replacement for stun gloves.
/obj/item/weapon/melee/baton/cattleprod
/obj/item/melee/baton/cattleprod
name = "stunprod"
desc = "An improvised stun baton."
icon_state = "stunprod_nocell"
@@ -193,10 +193,10 @@
slot_flags = SLOT_BACK
var/obj/item/device/assembly/igniter/sparkler = 0
/obj/item/weapon/melee/baton/cattleprod/Initialize()
/obj/item/melee/baton/cattleprod/Initialize()
. = ..()
sparkler = new (src)
/obj/item/weapon/melee/baton/cattleprod/baton_stun()
/obj/item/melee/baton/cattleprod/baton_stun()
if(sparkler.activate())
..()
@@ -1,4 +1,4 @@
/obj/item/weapon/tank/jetpack
/obj/item/tank/jetpack
name = "jetpack (empty)"
desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution."
icon_state = "jetpack"
@@ -14,7 +14,7 @@
var/full_speed = TRUE // If the jetpack will have a speedboost in space/nograv or not
var/datum/effect_system/trail_follow/ion/ion_trail
/obj/item/weapon/tank/jetpack/New()
/obj/item/tank/jetpack/New()
..()
if(gas_type)
air_contents.assert_gas(gas_type)
@@ -23,7 +23,7 @@
ion_trail = new
ion_trail.set_up(src)
/obj/item/weapon/tank/jetpack/ui_action_click(mob/user, action)
/obj/item/tank/jetpack/ui_action_click(mob/user, action)
if(istype(action, /datum/action/item_action/toggle_jetpack))
cycle(user)
else if(istype(action, /datum/action/item_action/jetpack_stabilization))
@@ -34,7 +34,7 @@
toggle_internals(user)
/obj/item/weapon/tank/jetpack/proc/cycle(mob/user)
/obj/item/tank/jetpack/proc/cycle(mob/user)
if(user.incapacitated())
return
@@ -49,18 +49,18 @@
A.UpdateButtonIcon()
/obj/item/weapon/tank/jetpack/proc/turn_on()
/obj/item/tank/jetpack/proc/turn_on()
on = TRUE
icon_state = "[initial(icon_state)]-on"
ion_trail.start()
/obj/item/weapon/tank/jetpack/proc/turn_off()
/obj/item/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)
/obj/item/tank/jetpack/proc/allow_thrust(num, mob/living/user)
if(!on)
return
if((num < 0.005 || air_contents.total_moles() < num))
@@ -77,7 +77,7 @@
return 1
/obj/item/weapon/tank/jetpack/suicide_act(mob/user)
/obj/item/tank/jetpack/suicide_act(mob/user)
if (istype(user, /mob/living/carbon/human/))
var/mob/living/carbon/human/H = user
H.forcesay("WHAT THE FUCK IS CARBON DIOXIDE?")
@@ -86,19 +86,19 @@
else
..()
/obj/item/weapon/tank/jetpack/void
/obj/item/tank/jetpack/void
name = "void jetpack (oxygen)"
desc = "It works well in a void."
icon_state = "jetpack-void"
item_state = "jetpack-void"
/obj/item/weapon/tank/jetpack/oxygen
/obj/item/tank/jetpack/oxygen
name = "jetpack (oxygen)"
desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. Use with caution."
icon_state = "jetpack"
item_state = "jetpack"
/obj/item/weapon/tank/jetpack/oxygen/harness
/obj/item/tank/jetpack/oxygen/harness
name = "jet harness (oxygen)"
desc = "A lightweight tactical harness, used by those who don't want to be weighed down by traditional jetpacks."
icon_state = "jetpack-mini"
@@ -107,7 +107,7 @@
throw_range = 7
w_class = WEIGHT_CLASS_NORMAL
/obj/item/weapon/tank/jetpack/oxygen/captain
/obj/item/tank/jetpack/oxygen/captain
name = "\improper Captain's jetpack"
desc = "A compact, lightweight jetpack containing a high amount of compressed oxygen."
icon_state = "jetpack-captain"
@@ -116,13 +116,13 @@
volume = 90
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //steal objective items are hard to destroy.
/obj/item/weapon/tank/jetpack/oxygen/security
/obj/item/tank/jetpack/oxygen/security
name = "security jetpack (oxygen)"
desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas by security forces."
icon_state = "jetpack-sec"
item_state = "jetpack-sec"
/obj/item/weapon/tank/jetpack/carbondioxide
/obj/item/tank/jetpack/carbondioxide
name = "jetpack (carbon dioxide)"
desc = "A tank of compressed carbon dioxide for use as propulsion in zero-gravity areas. Painted black to indicate that it should not be used as a source for internals."
icon_state = "jetpack-black"
@@ -131,7 +131,7 @@
gas_type = "co2"
/obj/item/weapon/tank/jetpack/suit
/obj/item/tank/jetpack/suit
name = "hardsuit jetpack upgrade"
desc = "A modular, compact set of thrusters designed to integrate with a hardsuit. It is fueled by a tank inserted into the suit's storage compartment."
origin_tech = "materials=4;magnets=4;engineering=5"
@@ -144,28 +144,28 @@
gas_type = null
full_speed = FALSE
var/datum/gas_mixture/temp_air_contents
var/obj/item/weapon/tank/internals/tank = null
var/obj/item/tank/internals/tank = null
/obj/item/weapon/tank/jetpack/suit/New()
/obj/item/tank/jetpack/suit/New()
..()
STOP_PROCESSING(SSobj, src)
temp_air_contents = air_contents
/obj/item/weapon/tank/jetpack/suit/attack_self()
/obj/item/tank/jetpack/suit/attack_self()
return
/obj/item/weapon/tank/jetpack/suit/cycle(mob/user)
/obj/item/tank/jetpack/suit/cycle(mob/user)
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit))
to_chat(user, "<span class='warning'>\The [src] must be connected to a hardsuit!</span>")
return
var/mob/living/carbon/human/H = user
if(!istype(H.s_store, /obj/item/weapon/tank/internals))
if(!istype(H.s_store, /obj/item/tank/internals))
to_chat(user, "<span class='warning'>You need a tank in your suit storage!</span>")
return
..()
/obj/item/weapon/tank/jetpack/suit/turn_on()
/obj/item/tank/jetpack/suit/turn_on()
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc))
return
var/mob/living/carbon/human/H = loc.loc
@@ -174,13 +174,13 @@
START_PROCESSING(SSobj, src)
..()
/obj/item/weapon/tank/jetpack/suit/turn_off()
/obj/item/tank/jetpack/suit/turn_off()
tank = null
air_contents = temp_air_contents
STOP_PROCESSING(SSobj, src)
..()
/obj/item/weapon/tank/jetpack/suit/process()
/obj/item/tank/jetpack/suit/process()
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc))
turn_off()
return
@@ -199,12 +199,12 @@
return
/mob/living/carbon/get_jetpack()
var/obj/item/weapon/tank/jetpack/J = back
var/obj/item/tank/jetpack/J = back
if(istype(J))
return J
/mob/living/carbon/human/get_jetpack()
var/obj/item/weapon/tank/jetpack/J = ..()
var/obj/item/tank/jetpack/J = ..()
if(!istype(J) && istype(wear_suit, /obj/item/clothing/suit/space/hardsuit))
var/obj/item/clothing/suit/space/hardsuit/C = wear_suit
J = C.jetpack
@@ -10,7 +10,7 @@
/*
* Oxygen
*/
/obj/item/weapon/tank/internals/oxygen
/obj/item/tank/internals/oxygen
name = "oxygen tank"
desc = "A tank of oxygen."
icon_state = "oxygen"
@@ -19,19 +19,19 @@
dog_fashion = /datum/dog_fashion/back
/obj/item/weapon/tank/internals/oxygen/New()
/obj/item/tank/internals/oxygen/New()
..()
air_contents.assert_gas("o2")
air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
/obj/item/weapon/tank/internals/oxygen/yellow
/obj/item/tank/internals/oxygen/yellow
desc = "A tank of oxygen, this one is yellow."
icon_state = "oxygen_f"
dog_fashion = null
/obj/item/weapon/tank/internals/oxygen/red
/obj/item/tank/internals/oxygen/red
desc = "A tank of oxygen, this one is red."
icon_state = "oxygen_fr"
dog_fashion = null
@@ -40,14 +40,14 @@
/*
* Anesthetic
*/
/obj/item/weapon/tank/internals/anesthetic
/obj/item/tank/internals/anesthetic
name = "anesthetic tank"
desc = "A tank with an N2O/O2 gas mix."
icon_state = "anesthetic"
item_state = "an_tank"
force = 10
/obj/item/weapon/tank/internals/anesthetic/New()
/obj/item/tank/internals/anesthetic/New()
..()
air_contents.assert_gases("o2", "n2o")
air_contents.gases["o2"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD
@@ -57,14 +57,14 @@
/*
* Air
*/
/obj/item/weapon/tank/internals/air
/obj/item/tank/internals/air
name = "air tank"
desc = "Mixed anyone?"
icon_state = "oxygen"
force = 10
dog_fashion = /datum/dog_fashion/back
/obj/item/weapon/tank/internals/air/New()
/obj/item/tank/internals/air/New()
..()
air_contents.assert_gases("o2","n2")
air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD
@@ -75,7 +75,7 @@
/*
* Plasma
*/
/obj/item/weapon/tank/internals/plasma
/obj/item/tank/internals/plasma
name = "plasma tank"
desc = "Contains dangerous plasma. Do not inhale. Warning: extremely flammable."
icon_state = "plasma"
@@ -84,15 +84,15 @@
force = 8
/obj/item/weapon/tank/internals/plasma/New()
/obj/item/tank/internals/plasma/New()
..()
air_contents.assert_gas("plasma")
air_contents.gases["plasma"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
/obj/item/weapon/tank/internals/plasma/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/flamethrower))
var/obj/item/weapon/flamethrower/F = W
/obj/item/tank/internals/plasma/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/flamethrower))
var/obj/item/flamethrower/F = W
if ((!F.status)||(F.ptank))
return
if(!user.transferItemToLoc(src, F))
@@ -103,7 +103,7 @@
else
return ..()
/obj/item/weapon/tank/internals/plasma/full/New()
/obj/item/tank/internals/plasma/full/New()
..()
air_contents.assert_gas("plasma")
air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
@@ -114,7 +114,7 @@
* Plasmaman Plasma Tank
*/
/obj/item/weapon/tank/internals/plasmaman
/obj/item/tank/internals/plasmaman
name = "plasma internals tank"
desc = "A tank of plasma gas designed specifically for use as internals, particularly for plasma-based lifeforms. If you're not a Plasmaman, you probably shouldn't use this."
icon_state = "plasmaman_tank"
@@ -122,20 +122,20 @@
force = 10
distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE
/obj/item/weapon/tank/internals/plasmaman/New()
/obj/item/tank/internals/plasmaman/New()
..()
air_contents.assert_gas("plasma")
air_contents.gases["plasma"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
/obj/item/weapon/tank/internals/plasmaman/full/New()
/obj/item/tank/internals/plasmaman/full/New()
..()
air_contents.assert_gas("plasma")
air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
/obj/item/weapon/tank/internals/plasmaman/belt
/obj/item/tank/internals/plasmaman/belt
icon_state = "plasmaman_tank_belt"
item_state = "plasmaman_tank_belt"
slot_flags = SLOT_BELT
@@ -143,7 +143,7 @@
volume = 6
w_class = WEIGHT_CLASS_SMALL //thanks i forgot this
/obj/item/weapon/tank/internals/plasmaman/belt/full/New()
/obj/item/tank/internals/plasmaman/belt/full/New()
..()
air_contents.assert_gas("plasma")
air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
@@ -154,7 +154,7 @@
/*
* Emergency Oxygen
*/
/obj/item/weapon/tank/internals/emergency_oxygen
/obj/item/tank/internals/emergency_oxygen
name = "emergency oxygen tank"
desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it."
icon_state = "emergency"
@@ -166,18 +166,18 @@
volume = 3 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011)
/obj/item/weapon/tank/internals/emergency_oxygen/New()
/obj/item/tank/internals/emergency_oxygen/New()
..()
air_contents.assert_gas("o2")
air_contents.gases["o2"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
/obj/item/weapon/tank/internals/emergency_oxygen/engi
/obj/item/tank/internals/emergency_oxygen/engi
name = "extended-capacity emergency oxygen tank"
icon_state = "emergency_engi"
volume = 6
/obj/item/weapon/tank/internals/emergency_oxygen/double
/obj/item/tank/internals/emergency_oxygen/double
name = "double emergency oxygen tank"
icon_state = "emergency_engi"
volume = 10
+19 -19
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/tank
/obj/item/tank
name = "tank"
icon = 'icons/obj/tank.dmi'
lefthand_file = 'icons/mob/inhands/equipment/tanks_lefthand.dmi'
@@ -18,10 +18,10 @@
var/integrity = 3
var/volume = 70
/obj/item/weapon/tank/ui_action_click(mob/user)
/obj/item/tank/ui_action_click(mob/user)
toggle_internals(user)
/obj/item/weapon/tank/proc/toggle_internals(mob/user)
/obj/item/tank/proc/toggle_internals(mob/user)
var/mob/living/carbon/human/H = user
if(!istype(H))
return
@@ -50,7 +50,7 @@
H.update_action_buttons_icon()
/obj/item/weapon/tank/New()
/obj/item/tank/New()
..()
air_contents = new(volume) //liters
@@ -58,14 +58,14 @@
START_PROCESSING(SSobj, src)
/obj/item/weapon/tank/Destroy()
/obj/item/tank/Destroy()
if(air_contents)
qdel(air_contents)
STOP_PROCESSING(SSobj, src)
. = ..()
/obj/item/weapon/tank/examine(mob/user)
/obj/item/tank/examine(mob/user)
var/obj/icon = src
..()
if (istype(src.loc, /obj/item/assembly))
@@ -94,7 +94,7 @@
to_chat(user, "<span class='notice'>It feels [descriptive].</span>")
/obj/item/weapon/tank/blob_act(obj/structure/blob/B)
/obj/item/tank/blob_act(obj/structure/blob/B)
if(B && B.loc == loc)
var/turf/location = get_turf(src)
if(!location)
@@ -105,7 +105,7 @@
qdel(src)
/obj/item/weapon/tank/deconstruct(disassembled = TRUE)
/obj/item/tank/deconstruct(disassembled = TRUE)
if(!disassembled)
var/turf/T = get_turf(src)
if(T)
@@ -114,7 +114,7 @@
playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3)
qdel(src)
/obj/item/weapon/tank/suicide_act(mob/user)
/obj/item/tank/suicide_act(mob/user)
var/mob/living/carbon/human/H = user
user.visible_message("<span class='suicide'>[user] is putting [src]'s valve to [user.p_their()] lips! It looks like [user.p_theyre()] trying to commit suicide!</span>")
playsound(loc, 'sound/effects/spray.ogg', 10, 1, -3)
@@ -134,7 +134,7 @@
return (BRUTELOSS)
/obj/item/weapon/tank/attackby(obj/item/weapon/W, mob/user, params)
/obj/item/tank/attackby(obj/item/W, mob/user, params)
add_fingerprint(user)
if((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1)
atmosanalyzer_scan(air_contents, user)
@@ -144,14 +144,14 @@
else
. = ..()
/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
/obj/item/tank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "tanks", name, 420, 200, master_ui, state)
ui.open()
/obj/item/weapon/tank/ui_data(mob/user)
/obj/item/tank/ui_data(mob/user)
var/list/data = list()
data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0)
data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0)
@@ -170,7 +170,7 @@
return data
/obj/item/weapon/tank/ui_act(action, params)
/obj/item/tank/ui_act(action, params)
if(..())
return
switch(action)
@@ -195,19 +195,19 @@
if(.)
distribute_pressure = Clamp(round(pressure), TANK_MIN_RELEASE_PRESSURE, TANK_MAX_RELEASE_PRESSURE)
/obj/item/weapon/tank/remove_air(amount)
/obj/item/tank/remove_air(amount)
return air_contents.remove(amount)
/obj/item/weapon/tank/return_air()
/obj/item/tank/return_air()
return air_contents
/obj/item/weapon/tank/assume_air(datum/gas_mixture/giver)
/obj/item/tank/assume_air(datum/gas_mixture/giver)
air_contents.merge(giver)
check_status()
return 1
/obj/item/weapon/tank/proc/remove_air_volume(volume_to_return)
/obj/item/tank/proc/remove_air_volume(volume_to_return)
if(!air_contents)
return null
@@ -219,13 +219,13 @@
return remove_air(moles_needed)
/obj/item/weapon/tank/process()
/obj/item/tank/process()
//Allow for reactions
air_contents.react()
check_status()
/obj/item/weapon/tank/proc/check_status()
/obj/item/tank/proc/check_status()
//Handle exploding, leaking, and rupturing of the tank
if(!air_contents)
@@ -1,5 +1,5 @@
//Hydroponics tank and base code
/obj/item/weapon/watertank
/obj/item/watertank
name = "backpack water tank"
desc = "A S.U.N.S.H.I.N.E. brand watertank backpack with nozzle to water plants."
icon = 'icons/obj/hydroponics/equipment.dmi'
@@ -13,23 +13,23 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30)
resistance_flags = FIRE_PROOF
var/obj/item/weapon/noz
var/obj/item/noz
var/on = FALSE
var/volume = 500
/obj/item/weapon/watertank/New()
/obj/item/watertank/New()
..()
create_reagents(volume)
noz = make_noz()
/obj/item/weapon/watertank/ui_action_click()
/obj/item/watertank/ui_action_click()
toggle_mister()
/obj/item/weapon/watertank/item_action_slot_check(slot, mob/user)
/obj/item/watertank/item_action_slot_check(slot, mob/user)
if(slot == user.getBackSlot())
return 1
/obj/item/weapon/watertank/verb/toggle_mister()
/obj/item/watertank/verb/toggle_mister()
set name = "Toggle Mister"
set category = "Object"
if (usr.get_item_by_slot(usr.getBackSlot()) != src)
@@ -55,38 +55,38 @@
remove_noz()
return
/obj/item/weapon/watertank/proc/make_noz()
return new /obj/item/weapon/reagent_containers/spray/mister(src)
/obj/item/watertank/proc/make_noz()
return new /obj/item/reagent_containers/spray/mister(src)
/obj/item/weapon/watertank/equipped(mob/user, slot)
/obj/item/watertank/equipped(mob/user, slot)
..()
if(slot != slot_back)
remove_noz()
/obj/item/weapon/watertank/proc/remove_noz()
/obj/item/watertank/proc/remove_noz()
if(ismob(noz.loc))
var/mob/M = noz.loc
M.temporarilyRemoveItemFromInventory(noz, TRUE)
return
/obj/item/weapon/watertank/Destroy()
/obj/item/watertank/Destroy()
if (on)
qdel(noz)
return ..()
/obj/item/weapon/watertank/attack_hand(mob/user)
/obj/item/watertank/attack_hand(mob/user)
if(src.loc == user)
ui_action_click()
return
..()
/obj/item/weapon/watertank/MouseDrop(obj/over_object)
/obj/item/watertank/MouseDrop(obj/over_object)
var/mob/M = src.loc
if(istype(M) && istype(over_object, /obj/screen/inventory/hand))
var/obj/screen/inventory/hand/H = over_object
M.putItemFromInventoryInHandIfPossible(src, H.held_index)
/obj/item/weapon/watertank/attackby(obj/item/W, mob/user, params)
/obj/item/watertank/attackby(obj/item/W, mob/user, params)
if(W == noz)
remove_noz()
return 1
@@ -97,7 +97,7 @@
// Therefore, it's designed to be "locked" to the player's hands or extended back onto
// the watertank backpack. Allowing it to be placed elsewhere or created without a parent
// watertank object will likely lead to weird behaviour or runtimes.
/obj/item/weapon/reagent_containers/spray/mister
/obj/item/reagent_containers/spray/mister
name = "water mister"
desc = "A mister nozzle attached to a water tank."
icon = 'icons/obj/hydroponics/equipment.dmi'
@@ -113,9 +113,9 @@
container_type = OPENCONTAINER_1
slot_flags = 0
var/obj/item/weapon/watertank/tank
var/obj/item/watertank/tank
/obj/item/weapon/reagent_containers/spray/mister/New(parent_tank)
/obj/item/reagent_containers/spray/mister/New(parent_tank)
..()
if(check_tank_exists(parent_tank, src))
tank = parent_tank
@@ -123,44 +123,44 @@
loc = tank
return
/obj/item/weapon/reagent_containers/spray/mister/dropped(mob/user)
/obj/item/reagent_containers/spray/mister/dropped(mob/user)
..()
to_chat(user, "<span class='notice'>The mister snaps back onto the watertank.</span>")
tank.on = 0
loc = tank
/obj/item/weapon/reagent_containers/spray/mister/attack_self()
/obj/item/reagent_containers/spray/mister/attack_self()
return
/proc/check_tank_exists(parent_tank, mob/living/carbon/human/M, 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/watertank)) //To avoid weird issues from admin spawns
qdel(O)
return 0
else
return 1
/obj/item/weapon/reagent_containers/spray/mister/Move()
/obj/item/reagent_containers/spray/mister/Move()
..()
if(loc != tank.loc)
loc = tank.loc
/obj/item/weapon/reagent_containers/spray/mister/afterattack(obj/target, mob/user, proximity)
/obj/item/reagent_containers/spray/mister/afterattack(obj/target, mob/user, proximity)
if(target.loc == loc) //Safety check so you don't fill your mister with mutagen or something and then blast yourself in the face with it
return
..()
//Janitor tank
/obj/item/weapon/watertank/janitor
/obj/item/watertank/janitor
name = "backpack water tank"
desc = "A janitorial watertank backpack with nozzle to clean dirt and graffiti."
icon_state = "waterbackpackjani"
item_state = "waterbackpackjani"
/obj/item/weapon/watertank/janitor/New()
/obj/item/watertank/janitor/New()
..()
reagents.add_reagent("cleaner", 500)
/obj/item/weapon/reagent_containers/spray/mister/janitor
/obj/item/reagent_containers/spray/mister/janitor
name = "janitor spray nozzle"
desc = "A janitorial spray nozzle attached to a watertank, designed to clean up large messes."
icon = 'icons/obj/hydroponics/equipment.dmi'
@@ -171,10 +171,10 @@
amount_per_transfer_from_this = 5
possible_transfer_amounts = list()
/obj/item/weapon/watertank/janitor/make_noz()
return new /obj/item/weapon/reagent_containers/spray/mister/janitor(src)
/obj/item/watertank/janitor/make_noz()
return new /obj/item/reagent_containers/spray/mister/janitor(src)
/obj/item/weapon/reagent_containers/spray/mister/janitor/attack_self(var/mob/user)
/obj/item/reagent_containers/spray/mister/janitor/attack_self(var/mob/user)
amount_per_transfer_from_this = (amount_per_transfer_from_this == 10 ? 5 : 10)
to_chat(user, "<span class='notice'>You [amount_per_transfer_from_this == 10 ? "remove" : "fix"] the nozzle. You'll now use [amount_per_transfer_from_this] units per spray.</span>")
@@ -184,7 +184,7 @@
#define RESIN_LAUNCHER 1
#define RESIN_FOAM 2
/obj/item/weapon/watertank/atmos
/obj/item/watertank/atmos
name = "backpack firefighter tank"
desc = "A refrigerated and pressurized backpack tank with extinguisher nozzle, intended to fight fires. Swaps between extinguisher, resin launcher and a smaller scale resin foamer."
item_state = "waterbackpackatmos"
@@ -192,21 +192,21 @@
volume = 200
slowdown = 0
/obj/item/weapon/watertank/atmos/New()
/obj/item/watertank/atmos/New()
..()
reagents.add_reagent("water", 200)
/obj/item/weapon/watertank/atmos/make_noz()
return new /obj/item/weapon/extinguisher/mini/nozzle(src)
/obj/item/watertank/atmos/make_noz()
return new /obj/item/extinguisher/mini/nozzle(src)
/obj/item/weapon/watertank/atmos/dropped(mob/user)
/obj/item/watertank/atmos/dropped(mob/user)
..()
icon_state = "waterbackpackatmos"
if(istype(noz, /obj/item/weapon/extinguisher/mini/nozzle))
var/obj/item/weapon/extinguisher/mini/nozzle/N = noz
if(istype(noz, /obj/item/extinguisher/mini/nozzle))
var/obj/item/extinguisher/mini/nozzle/N = noz
N.nozzle_mode = 0
/obj/item/weapon/extinguisher/mini/nozzle
/obj/item/extinguisher/mini/nozzle
name = "extinguisher nozzle"
desc = "A heavy duty nozzle attached to a firefighter's backpack tank."
icon = 'icons/obj/hydroponics/equipment.dmi'
@@ -222,12 +222,12 @@
cooling_power = 5
w_class = WEIGHT_CLASS_HUGE
flags_1 = NODROP_1 //Necessary to ensure that the nozzle and tank never separate
var/obj/item/weapon/watertank/tank
var/obj/item/watertank/tank
var/nozzle_mode = 0
var/metal_synthesis_cooldown = 0
var/resin_cooldown = 0
/obj/item/weapon/extinguisher/mini/nozzle/New(parent_tank)
/obj/item/extinguisher/mini/nozzle/New(parent_tank)
..()
if(check_tank_exists(parent_tank, src))
tank = parent_tank
@@ -236,13 +236,13 @@
loc = tank
/obj/item/weapon/extinguisher/mini/nozzle/Move()
/obj/item/extinguisher/mini/nozzle/Move()
..()
if(loc != tank.loc)
loc = tank
return
/obj/item/weapon/extinguisher/mini/nozzle/attack_self(mob/user)
/obj/item/extinguisher/mini/nozzle/attack_self(mob/user)
switch(nozzle_mode)
if(EXTINGUISHER)
nozzle_mode = RESIN_LAUNCHER
@@ -261,13 +261,13 @@
return
return
/obj/item/weapon/extinguisher/mini/nozzle/dropped(mob/user)
/obj/item/extinguisher/mini/nozzle/dropped(mob/user)
..()
to_chat(user, "<span class='notice'>The nozzle snaps back onto the tank!</span>")
tank.on = 0
loc = tank
/obj/item/weapon/extinguisher/mini/nozzle/afterattack(atom/target, mob/user)
/obj/item/extinguisher/mini/nozzle/afterattack(atom/target, mob/user)
if(nozzle_mode == EXTINGUISHER)
..()
return
@@ -332,7 +332,7 @@
#undef RESIN_LAUNCHER
#undef RESIN_FOAM
/obj/item/weapon/reagent_containers/chemtank
/obj/item/reagent_containers/chemtank
name = "backpack chemical injector"
desc = "A chemical autoinjector that can be carried on your back."
icon = 'icons/obj/hydroponics/equipment.dmi'
@@ -352,14 +352,14 @@
spillable = 0
possible_transfer_amounts = list(5,10,15)
/obj/item/weapon/reagent_containers/chemtank/ui_action_click()
/obj/item/reagent_containers/chemtank/ui_action_click()
toggle_injection()
/obj/item/weapon/reagent_containers/chemtank/item_action_slot_check(slot, mob/user)
/obj/item/reagent_containers/chemtank/item_action_slot_check(slot, mob/user)
if(slot == slot_back)
return 1
/obj/item/weapon/reagent_containers/chemtank/proc/toggle_injection()
/obj/item/reagent_containers/chemtank/proc/toggle_injection()
var/mob/living/carbon/human/user = usr
if(!istype(user))
return
@@ -372,7 +372,7 @@
turn_on()
//Todo : cache these.
/obj/item/weapon/reagent_containers/chemtank/proc/update_filling()
/obj/item/reagent_containers/chemtank/proc/update_filling()
cut_overlays()
if(reagents.total_volume)
@@ -390,7 +390,7 @@
filling.color = mix_color_from_reagents(reagents.reagent_list)
add_overlay(filling)
/obj/item/weapon/reagent_containers/chemtank/worn_overlays(var/isinhands = FALSE) //apply chemcolor and level
/obj/item/reagent_containers/chemtank/worn_overlays(var/isinhands = FALSE) //apply chemcolor and level
. = list()
//inhands + reagent_filling
if(!isinhands && reagents.total_volume)
@@ -408,19 +408,19 @@
filling.color = mix_color_from_reagents(reagents.reagent_list)
. += filling
/obj/item/weapon/reagent_containers/chemtank/proc/turn_on()
/obj/item/reagent_containers/chemtank/proc/turn_on()
on = TRUE
START_PROCESSING(SSobj, src)
if(ismob(loc))
to_chat(loc, "<span class='notice'>[src] turns on.</span>")
/obj/item/weapon/reagent_containers/chemtank/proc/turn_off()
/obj/item/reagent_containers/chemtank/proc/turn_off()
on = FALSE
STOP_PROCESSING(SSobj, src)
if(ismob(loc))
to_chat(loc, "<span class='notice'>[src] turns off.</span>")
/obj/item/weapon/reagent_containers/chemtank/process()
/obj/item/reagent_containers/chemtank/process()
if(!ishuman(loc))
turn_off()
return
@@ -439,7 +439,7 @@
user.update_inv_back() //for overlays update
//Operator backpack spray
/obj/item/weapon/watertank/operator
/obj/item/watertank/operator
name = "backpack water tank"
desc = "A New Russian backpack spray for systematic cleansing of carbon lifeforms."
icon_state = "waterbackpackjani"
@@ -448,7 +448,7 @@
volume = 2000
slowdown = 0
/obj/item/weapon/watertank/operator/New()
/obj/item/watertank/operator/New()
..()
reagents.add_reagent("mutagen",350)
reagents.add_reagent("napalm",125)
@@ -458,7 +458,7 @@
reagents.add_reagent("plasma",250)
reagents.add_reagent("condensedcapsaicin",500)
/obj/item/weapon/reagent_containers/spray/mister/operator
/obj/item/reagent_containers/spray/mister/operator
name = "janitor spray nozzle"
desc = "A mister nozzle attached to several extended water tanks. It suspiciously has a compressor in the system and is labelled entirely in New Cyrillic."
icon = 'icons/obj/hydroponics/equipment.dmi'
@@ -470,5 +470,5 @@
amount_per_transfer_from_this = 100
possible_transfer_amounts = list(75,100,150)
/obj/item/weapon/watertank/operator/make_noz()
return new /obj/item/weapon/reagent_containers/spray/mister/operator(src)
/obj/item/watertank/operator/make_noz()
return new /obj/item/reagent_containers/spray/mister/operator(src)
@@ -11,7 +11,7 @@
/*
* Locator
*/
/obj/item/weapon/locator
/obj/item/locator
name = "locator"
desc = "Used to track those with locater implants."
icon = 'icons/obj/device.dmi'
@@ -30,7 +30,7 @@
materials = list(MAT_METAL=400)
origin_tech = "magnets=3;bluespace=2"
/obj/item/weapon/locator/attack_self(mob/user)
/obj/item/locator/attack_self(mob/user)
user.set_machine(src)
var/dat
if (src.temp)
@@ -49,7 +49,7 @@ Frequency:
onclose(user, "radio")
return
/obj/item/weapon/locator/Topic(href, href_list)
/obj/item/locator/Topic(href, href_list)
..()
if (usr.stat || usr.restrained())
return
@@ -84,7 +84,7 @@ Frequency:
src.temp += "[W.code]-[dir2text(get_dir(sr, tr))]-[direct]<BR>"
src.temp += "<B>Extranneous Signals:</B><BR>"
for (var/obj/item/weapon/implant/tracking/W in GLOB.tracked_implants)
for (var/obj/item/implant/tracking/W in GLOB.tracked_implants)
if (!W.imp_in || !ismob(W.loc))
continue
else
@@ -128,7 +128,7 @@ Frequency:
/*
* Hand-tele
*/
/obj/item/weapon/hand_tele
/obj/item/hand_tele
name = "hand tele"
desc = "A portable item using blue-space technology."
icon = 'icons/obj/device.dmi'
@@ -147,18 +147,18 @@ Frequency:
var/list/active_portal_pairs
var/max_portal_pairs = 3
/obj/item/weapon/hand_tele/Initialize()
/obj/item/hand_tele/Initialize()
. = ..()
active_portal_pairs = list()
/obj/item/weapon/hand_tele/afterattack(atom/target, mob/user, proximity, params)
/obj/item/hand_tele/afterattack(atom/target, mob/user, proximity, params)
if(is_parent_of_portal(target))
qdel(target)
to_chat(user, "<span class='notice'>You dispel [target] remotely with \the [src]!</span>")
return ..()
/obj/item/weapon/hand_tele/attack_self(mob/user)
/obj/item/hand_tele/attack_self(mob/user)
var/turf/current_location = get_turf(user)//What turf is the user on?
var/area/current_area = current_location.loc
if(!current_location || current_area.noteleport || current_location.z > ZLEVEL_SPACEMAX || !isturf(user.loc))//If turf was not found or they're on z level 2 or >7 which does not currently exist. or if user is not located on a turf
@@ -208,10 +208,10 @@ Frequency:
investigate_log("was used by [key_name(user)] at [COORD(user)] to create a portal pair with destinations [COORD(c1)] and [COORD(c2)].", INVESTIGATE_PORTAL)
add_fingerprint(user)
/obj/item/weapon/hand_tele/proc/on_portal_destroy(obj/effect/portal/P)
/obj/item/hand_tele/proc/on_portal_destroy(obj/effect/portal/P)
active_portal_pairs -= P //If this portal pair is made by us it'll be erased along with the other portal by the portal.
/obj/item/weapon/hand_tele/proc/is_parent_of_portal(obj/effect/portal/P)
/obj/item/hand_tele/proc/is_parent_of_portal(obj/effect/portal/P)
if(!istype(P))
return FALSE
if(active_portal_pairs[P])
+5 -5
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/melee/baton/cattleprod/teleprod
/obj/item/melee/baton/cattleprod/teleprod
name = "teleprod"
desc = "A prod with a bluespace crystal on the end. The crystal doesn't look too fun to touch."
w_class = WEIGHT_CLASS_NORMAL
@@ -7,7 +7,7 @@
origin_tech = "combat=2;bluespace=4;materials=3"
slot_flags = null
/obj/item/weapon/melee/baton/cattleprod/teleprod/attack(mob/living/carbon/M, mob/living/carbon/user)//handles making things teleport when hit
/obj/item/melee/baton/cattleprod/teleprod/attack(mob/living/carbon/M, mob/living/carbon/user)//handles making things teleport when hit
..()
if(status && user.disabilities & CLUMSY && prob(50))
user.visible_message("<span class='danger'>[user] accidentally hits themself with [src]!</span>", \
@@ -26,10 +26,10 @@
else
do_teleport(M, get_turf(M), 15)
/obj/item/weapon/melee/baton/cattleprod/attackby(obj/item/I, mob/user, params)//handles sticking a crystal onto a stunprod to make a teleprod
if(istype(I, /obj/item/weapon/ore/bluespace_crystal))
/obj/item/melee/baton/cattleprod/attackby(obj/item/I, mob/user, params)//handles sticking a crystal onto a stunprod to make a teleprod
if(istype(I, /obj/item/ore/bluespace_crystal))
if(!cell)
var/obj/item/weapon/melee/baton/cattleprod/teleprod/S = new /obj/item/weapon/melee/baton/cattleprod/teleprod
var/obj/item/melee/baton/cattleprod/teleprod/S = new /obj/item/melee/baton/cattleprod/teleprod
remove_item_from_storage(user)
qdel(src)
qdel(I)
+83 -83
View File
@@ -14,7 +14,7 @@
/*
* Wrench
*/
/obj/item/weapon/wrench
/obj/item/wrench
name = "wrench"
desc = "A wrench with common uses. Can be found in your hand."
icon = 'icons/obj/tools.dmi'
@@ -33,24 +33,24 @@
toolspeed = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30)
/obj/item/weapon/wrench/suicide_act(mob/user)
/obj/item/wrench/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is beating [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1)
return (BRUTELOSS)
/obj/item/weapon/wrench/cyborg
/obj/item/wrench/cyborg
name = "automatic wrench"
desc = "An advanced robotic wrench. Can be found in construction cyborgs."
toolspeed = 0.5
/obj/item/weapon/wrench/brass
/obj/item/wrench/brass
name = "brass wrench"
desc = "A brass wrench. It's faintly warm to the touch."
resistance_flags = FIRE_PROOF | ACID_PROOF
icon_state = "wrench_brass"
toolspeed = 0.5
/obj/item/weapon/wrench/abductor
/obj/item/wrench/abductor
name = "alien wrench"
desc = "A polarized wrench. It causes anything placed between the jaws to turn."
icon = 'icons/obj/abductor.dmi'
@@ -59,7 +59,7 @@
toolspeed = 0.1
origin_tech = "materials=5;engineering=5;abductor=3"
/obj/item/weapon/wrench/power
/obj/item/wrench/power
name = "hand drill"
desc = "A simple powered hand drill. It's fitted with a bolt bit."
icon_state = "drill_bolt"
@@ -75,18 +75,18 @@
attack_verb = list("drilled", "screwed", "jabbed")
toolspeed = 0.25
/obj/item/weapon/wrench/power/attack_self(mob/user)
/obj/item/wrench/power/attack_self(mob/user)
playsound(get_turf(user),'sound/items/change_drill.ogg',50,1)
var/obj/item/weapon/wirecutters/power/s_drill = new /obj/item/weapon/screwdriver/power
var/obj/item/wirecutters/power/s_drill = new /obj/item/screwdriver/power
to_chat(user, "<span class='notice'>You attach the screw driver bit to [src].</span>")
qdel(src)
user.put_in_active_hand(s_drill)
/obj/item/weapon/wrench/power/suicide_act(mob/user)
/obj/item/wrench/power/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is pressing [src] against [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!")
return (BRUTELOSS)
/obj/item/weapon/wrench/medical
/obj/item/wrench/medical
name = "medical wrench"
desc = "A medical wrench with common(medical?) uses. Can be found in your hand."
icon_state = "wrench_medical"
@@ -95,7 +95,7 @@
origin_tech = "materials=1;engineering=1;biotech=3"
attack_verb = list("wrenched", "medicaled", "tapped", "jabbed", "whacked")
/obj/item/weapon/wrench/medical/suicide_act(mob/living/user)
/obj/item/wrench/medical/suicide_act(mob/living/user)
user.visible_message("<span class='suicide'>[user] is praying to the medical wrench to take [user.p_their()] soul. It looks like [user.p_theyre()] trying to commit suicide!</span>")
// TODO Make them glow with the power of the M E D I C A L W R E N C H
// during their ascension
@@ -113,7 +113,7 @@
for(var/obj/item/W in user)
user.dropItemToGround(W)
var/obj/item/weapon/wrench/medical/W = new /obj/item/weapon/wrench/medical(loc)
var/obj/item/wrench/medical/W = new /obj/item/wrench/medical(loc)
W.add_fingerprint(user)
W.desc += " For some reason, it reminds you of [user.name]."
@@ -127,7 +127,7 @@
/*
* Screwdriver
*/
/obj/item/weapon/screwdriver
/obj/item/screwdriver
name = "screwdriver"
desc = "You can be totally screwy with this."
icon = 'icons/obj/tools.dmi'
@@ -159,11 +159,11 @@
"yellow" = rgb(213, 140, 24), \
)
/obj/item/weapon/screwdriver/suicide_act(mob/user)
/obj/item/screwdriver/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is stabbing [src] into [user.p_their()] [pick("temple", "heart")]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return(BRUTELOSS)
/obj/item/weapon/screwdriver/Initialize()
/obj/item/screwdriver/Initialize()
. = ..()
if(random_color) //random colors!
var/our_color = pick(screwdriver_colors)
@@ -172,7 +172,7 @@
if(prob(75))
pixel_y = rand(0, 16)
/obj/item/weapon/screwdriver/update_icon()
/obj/item/screwdriver/update_icon()
if(!random_color) //icon override
return
cut_overlays()
@@ -180,14 +180,14 @@
base_overlay.appearance_flags = RESET_COLOR
add_overlay(base_overlay)
/obj/item/weapon/screwdriver/worn_overlays(isinhands = FALSE, icon_file)
/obj/item/screwdriver/worn_overlays(isinhands = FALSE, icon_file)
. = list()
if(isinhands && random_color)
var/mutable_appearance/M = mutable_appearance(icon_file, "screwdriver_head")
M.appearance_flags = RESET_COLOR
. += M
/obj/item/weapon/screwdriver/get_belt_overlay()
/obj/item/screwdriver/get_belt_overlay()
if(random_color)
var/mutable_appearance/body = mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver")
var/mutable_appearance/head = mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver_head")
@@ -197,7 +197,7 @@
else
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', icon_state)
/obj/item/weapon/screwdriver/attack(mob/living/carbon/M, mob/living/carbon/user)
/obj/item/screwdriver/attack(mob/living/carbon/M, mob/living/carbon/user)
if(!istype(M))
return ..()
if(user.zone_selected != "eyes" && user.zone_selected != "head")
@@ -206,7 +206,7 @@
M = user
return eyestab(M,user)
/obj/item/weapon/screwdriver/brass
/obj/item/screwdriver/brass
name = "brass screwdriver"
desc = "A screwdriver made of brass. The handle feels freezing cold."
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -215,7 +215,7 @@
toolspeed = 0.5
random_color = FALSE
/obj/item/weapon/screwdriver/abductor
/obj/item/screwdriver/abductor
name = "alien screwdriver"
desc = "An ultrasonic screwdriver."
icon = 'icons/obj/abductor.dmi'
@@ -225,7 +225,7 @@
toolspeed = 0.1
random_color = FALSE
/obj/item/weapon/screwdriver/power
/obj/item/screwdriver/power
name = "hand drill"
desc = "A simple powered hand drill. It's fitted with a screw bit."
icon_state = "drill_screw"
@@ -245,18 +245,18 @@
toolspeed = 0.25
random_color = FALSE
/obj/item/weapon/screwdriver/power/suicide_act(mob/user)
/obj/item/screwdriver/power/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is putting [src] to [user.p_their()] temple. It looks like [user.p_theyre()] trying to commit suicide!</span>")
return(BRUTELOSS)
/obj/item/weapon/screwdriver/power/attack_self(mob/user)
/obj/item/screwdriver/power/attack_self(mob/user)
playsound(get_turf(user),'sound/items/change_drill.ogg',50,1)
var/obj/item/weapon/wrench/power/b_drill = new /obj/item/weapon/wrench/power
var/obj/item/wrench/power/b_drill = new /obj/item/wrench/power
to_chat(user, "<span class='notice'>You attach the bolt driver bit to [src].</span>")
qdel(src)
user.put_in_active_hand(b_drill)
/obj/item/weapon/screwdriver/cyborg
/obj/item/screwdriver/cyborg
name = "powered screwdriver"
desc = "An electrical screwdriver, designed to be both precise and quick."
usesound = 'sound/items/drill_use.ogg'
@@ -265,7 +265,7 @@
/*
* Wirecutters
*/
/obj/item/weapon/wirecutters
/obj/item/wirecutters
name = "wirecutters"
desc = "This cuts wires."
icon = 'icons/obj/tools.dmi'
@@ -287,15 +287,15 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30)
/obj/item/weapon/wirecutters/New(loc, var/param_color = null)
/obj/item/wirecutters/New(loc, var/param_color = null)
..()
if(!icon_state)
if(!param_color)
param_color = pick("yellow","red")
icon_state = "cutters_[param_color]"
/obj/item/weapon/wirecutters/attack(mob/living/carbon/C, mob/user)
if(istype(C) && C.handcuffed && istype(C.handcuffed, /obj/item/weapon/restraints/handcuffs/cable))
/obj/item/wirecutters/attack(mob/living/carbon/C, mob/user)
if(istype(C) && C.handcuffed && istype(C.handcuffed, /obj/item/restraints/handcuffs/cable))
user.visible_message("<span class='notice'>[user] cuts [C]'s restraints with [src]!</span>")
qdel(C.handcuffed)
C.handcuffed = null
@@ -306,19 +306,19 @@
else
..()
/obj/item/weapon/wirecutters/suicide_act(mob/user)
/obj/item/wirecutters/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is cutting at [user.p_their()] arteries with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
playsound(loc, usesound, 50, 1, -1)
return (BRUTELOSS)
/obj/item/weapon/wirecutters/brass
/obj/item/wirecutters/brass
name = "brass wirecutters"
desc = "A pair of wirecutters made of brass. The handle feels freezing cold to the touch."
resistance_flags = FIRE_PROOF | ACID_PROOF
icon_state = "cutters_brass"
toolspeed = 0.5
/obj/item/weapon/wirecutters/abductor
/obj/item/wirecutters/abductor
name = "alien wirecutters"
desc = "Extremely sharp wirecutters, made out of a silvery-green metal."
icon = 'icons/obj/abductor.dmi'
@@ -326,12 +326,12 @@
toolspeed = 0.1
origin_tech = "materials=5;engineering=4;abductor=3"
/obj/item/weapon/wirecutters/cyborg
/obj/item/wirecutters/cyborg
name = "wirecutters"
desc = "This cuts wires."
toolspeed = 0.5
/obj/item/weapon/wirecutters/power
/obj/item/wirecutters/power
name = "jaws of life"
desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a cutting head."
icon_state = "jaws_cutter"
@@ -341,7 +341,7 @@
usesound = 'sound/items/jaws_cut.ogg'
toolspeed = 0.25
/obj/item/weapon/wirecutters/power/suicide_act(mob/user)
/obj/item/wirecutters/power/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is wrapping \the [src] around [user.p_their()] neck. It looks like [user.p_theyre()] trying to rip [user.p_their()] head off!</span>")
playsound(loc, 'sound/items/jaws_cut.ogg', 50, 1, -1)
if(iscarbon(user))
@@ -352,16 +352,16 @@
playsound(loc,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1)
return (BRUTELOSS)
/obj/item/weapon/wirecutters/power/attack_self(mob/user)
/obj/item/wirecutters/power/attack_self(mob/user)
playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1)
var/obj/item/weapon/crowbar/power/pryjaws = new /obj/item/weapon/crowbar/power
var/obj/item/crowbar/power/pryjaws = new /obj/item/crowbar/power
to_chat(user, "<span class='notice'>You attach the pry jaws to [src].</span>")
qdel(src)
user.put_in_active_hand(pryjaws)
/*
* Welding Tool
*/
/obj/item/weapon/weldingtool
/obj/item/weldingtool
name = "welding tool"
desc = "A standard edition welder provided by NanoTrasen."
icon = 'icons/obj/tools.dmi'
@@ -395,14 +395,14 @@
heat = 3800
toolspeed = 1
/obj/item/weapon/weldingtool/Initialize()
/obj/item/weldingtool/Initialize()
. = ..()
create_reagents(max_fuel)
reagents.add_reagent("welding_fuel", max_fuel)
update_icon()
/obj/item/weapon/weldingtool/proc/update_torch()
/obj/item/weldingtool/proc/update_torch()
if(welding)
add_overlay("[initial(icon_state)]-on")
item_state = "[initial(item_state)]1"
@@ -410,7 +410,7 @@
item_state = "[initial(item_state)]"
/obj/item/weapon/weldingtool/update_icon()
/obj/item/weldingtool/update_icon()
cut_overlays()
if(change_icons)
var/ratio = get_fuel() / max_fuel
@@ -420,7 +420,7 @@
return
/obj/item/weapon/weldingtool/process()
/obj/item/weldingtool/process()
switch(welding)
if(0)
force = 3
@@ -442,13 +442,13 @@
open_flame()
/obj/item/weapon/weldingtool/suicide_act(mob/user)
/obj/item/weldingtool/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] welds [user.p_their()] every orifice closed! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (FIRELOSS)
/obj/item/weapon/weldingtool/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/obj/item/weldingtool/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/screwdriver))
flamethrower_screwdriver(I, user)
else if(istype(I, /obj/item/stack/rods))
flamethrower_rods(I, user)
@@ -456,7 +456,7 @@
return ..()
/obj/item/weapon/weldingtool/attack(mob/living/carbon/human/H, mob/user)
/obj/item/weldingtool/attack(mob/living/carbon/human/H, mob/user)
if(!istype(H))
return ..()
@@ -474,7 +474,7 @@
return ..()
/obj/item/weapon/weldingtool/afterattack(atom/O, mob/user, proximity)
/obj/item/weldingtool/afterattack(atom/O, mob/user, proximity)
if(!proximity) return
if(welding)
@@ -491,7 +491,7 @@
log_game("[key_name(user)] set [key_name(L)] on fire")
/obj/item/weapon/weldingtool/attack_self(mob/user)
/obj/item/weldingtool/attack_self(mob/user)
switched_on(user)
if(welding)
set_light(light_intensity)
@@ -500,12 +500,12 @@
//Returns the amount of fuel in the welder
/obj/item/weapon/weldingtool/proc/get_fuel()
/obj/item/weldingtool/proc/get_fuel()
return reagents.get_reagent_amount("welding_fuel")
//Removes fuel from the welding tool. If a mob is passed, it will try to flash the mob's eyes. This should probably be renamed to use()
/obj/item/weapon/weldingtool/proc/remove_fuel(amount = 1, mob/living/M = null)
/obj/item/weldingtool/proc/remove_fuel(amount = 1, mob/living/M = null)
if(!welding || !check_fuel())
return 0
if(amount)
@@ -523,7 +523,7 @@
//Turns off the welder if there is no more fuel (does this really need to be its own proc?)
/obj/item/weapon/weldingtool/proc/check_fuel(mob/user)
/obj/item/weldingtool/proc/check_fuel(mob/user)
if(get_fuel() <= 0 && welding)
switched_on(user)
update_icon()
@@ -536,7 +536,7 @@
return 1
//Switches the welder on
/obj/item/weapon/weldingtool/proc/switched_on(mob/user)
/obj/item/weldingtool/proc/switched_on(mob/user)
if(!status)
to_chat(user, "<span class='warning'>[src] can't be turned on while unsecured!</span>")
return
@@ -559,7 +559,7 @@
switched_off(user)
//Switches the welder off
/obj/item/weapon/weldingtool/proc/switched_off(mob/user)
/obj/item/weldingtool/proc/switched_off(mob/user)
welding = 0
set_light(0)
@@ -569,19 +569,19 @@
update_icon()
/obj/item/weapon/weldingtool/examine(mob/user)
/obj/item/weldingtool/examine(mob/user)
..()
to_chat(user, "It contains [get_fuel()] unit\s of fuel out of [max_fuel].")
/obj/item/weapon/weldingtool/is_hot()
/obj/item/weldingtool/is_hot()
return welding * heat
//Returns whether or not the welding tool is currently on.
/obj/item/weapon/weldingtool/proc/isOn()
/obj/item/weldingtool/proc/isOn()
return welding
/obj/item/weapon/weldingtool/proc/flamethrower_screwdriver(obj/item/I, mob/user)
/obj/item/weldingtool/proc/flamethrower_screwdriver(obj/item/I, mob/user)
if(welding)
to_chat(user, "<span class='warning'>Turn it off first!</span>")
return
@@ -592,11 +592,11 @@
to_chat(user, "<span class='notice'>[src] can now be attached and modified.</span>")
add_fingerprint(user)
/obj/item/weapon/weldingtool/proc/flamethrower_rods(obj/item/I, mob/user)
/obj/item/weldingtool/proc/flamethrower_rods(obj/item/I, mob/user)
if(!status)
var/obj/item/stack/rods/R = I
if (R.use(1))
var/obj/item/weapon/flamethrower/F = new /obj/item/weapon/flamethrower(user.loc)
var/obj/item/flamethrower/F = new /obj/item/flamethrower(user.loc)
if(!remove_item_from_storage(F))
user.transferItemToLoc(src, F, TRUE)
F.weldtool = src
@@ -606,13 +606,13 @@
else
to_chat(user, "<span class='warning'>You need one rod to start building a flamethrower!</span>")
/obj/item/weapon/weldingtool/ignition_effect(atom/A, mob/user)
/obj/item/weldingtool/ignition_effect(atom/A, mob/user)
if(welding && remove_fuel(1, user))
. = "<span class='notice'>[user] casually lights [A] with [src], what a badass.</span>"
else
. = ""
/obj/item/weapon/weldingtool/largetank
/obj/item/weldingtool/largetank
name = "industrial welding tool"
desc = "A slightly larger welder with a larger tank."
icon_state = "indwelder"
@@ -620,16 +620,16 @@
materials = list(MAT_GLASS=60)
origin_tech = "engineering=2;plasmatech=2"
/obj/item/weapon/weldingtool/largetank/cyborg
/obj/item/weldingtool/largetank/cyborg
name = "integrated welding tool"
desc = "An advanced welder designed to be used in robotic systems."
toolspeed = 0.5
/obj/item/weapon/weldingtool/largetank/flamethrower_screwdriver()
/obj/item/weldingtool/largetank/flamethrower_screwdriver()
return
/obj/item/weapon/weldingtool/mini
/obj/item/weldingtool/mini
name = "emergency welding tool"
desc = "A miniature welder used during emergencies."
icon_state = "miniwelder"
@@ -638,10 +638,10 @@
materials = list(MAT_METAL=30, MAT_GLASS=10)
change_icons = 0
/obj/item/weapon/weldingtool/mini/flamethrower_screwdriver()
/obj/item/weldingtool/mini/flamethrower_screwdriver()
return
/obj/item/weapon/weldingtool/abductor
/obj/item/weldingtool/abductor
name = "alien welding tool"
desc = "An alien welding tool. Whatever fuel it uses, it never runs out."
icon = 'icons/obj/abductor.dmi'
@@ -651,12 +651,12 @@
change_icons = 0
origin_tech = "plasmatech=5;engineering=5;abductor=3"
/obj/item/weapon/weldingtool/abductor/process()
/obj/item/weldingtool/abductor/process()
if(get_fuel() <= max_fuel)
reagents.add_reagent("welding_fuel", 1)
..()
/obj/item/weapon/weldingtool/hugetank
/obj/item/weldingtool/hugetank
name = "upgraded industrial welding tool"
desc = "An upgraded welder based of the industrial welder."
icon_state = "upindwelder"
@@ -665,7 +665,7 @@
materials = list(MAT_METAL=70, MAT_GLASS=120)
origin_tech = "engineering=3;plasmatech=2"
/obj/item/weapon/weldingtool/experimental
/obj/item/weldingtool/experimental
name = "experimental welding tool"
desc = "An experimental welder capable of self-fuel generation and less harmful to the eyes."
icon_state = "exwelder"
@@ -680,7 +680,7 @@
toolspeed = 0.5
var/nextrefueltick = 0
/obj/item/weapon/weldingtool/experimental/brass
/obj/item/weldingtool/experimental/brass
name = "brass welding tool"
desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch."
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -688,7 +688,7 @@
item_state = "brasswelder"
/obj/item/weapon/weldingtool/experimental/process()
/obj/item/weldingtool/experimental/process()
..()
if(get_fuel() < max_fuel && nextrefueltick < world.time)
nextrefueltick = world.time + 10
@@ -699,7 +699,7 @@
* Crowbar
*/
/obj/item/weapon/crowbar
/obj/item/crowbar
name = "pocket crowbar"
desc = "A small crowbar. This handy tool is useful for lots of things, such as prying floor tiles or opening unpowered doors."
icon = 'icons/obj/tools.dmi'
@@ -718,23 +718,23 @@
toolspeed = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30)
/obj/item/weapon/crowbar/suicide_act(mob/user)
/obj/item/crowbar/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is beating [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1)
return (BRUTELOSS)
/obj/item/weapon/crowbar/red
/obj/item/crowbar/red
icon_state = "crowbar_red"
force = 8
/obj/item/weapon/crowbar/brass
/obj/item/crowbar/brass
name = "brass crowbar"
desc = "A brass crowbar. It feels faintly warm to the touch."
resistance_flags = FIRE_PROOF | ACID_PROOF
icon_state = "crowbar_brass"
toolspeed = 0.5
/obj/item/weapon/crowbar/abductor
/obj/item/crowbar/abductor
name = "alien crowbar"
desc = "A hard-light crowbar. It appears to pry by itself, without any effort required."
icon = 'icons/obj/abductor.dmi'
@@ -743,7 +743,7 @@
toolspeed = 0.1
origin_tech = "combat=4;engineering=4;abductor=3"
/obj/item/weapon/crowbar/large
/obj/item/crowbar/large
name = "crowbar"
desc = "It's a big crowbar. It doesn't fit in your pockets, because it's big."
force = 12
@@ -755,14 +755,14 @@
item_state = "crowbar"
toolspeed = 0.5
/obj/item/weapon/crowbar/cyborg
/obj/item/crowbar/cyborg
name = "hydraulic crowbar"
desc = "A hydraulic prying tool, compact but powerful. Designed to replace crowbar in construction cyborgs."
usesound = 'sound/items/jaws_pry.ogg'
force = 10
toolspeed = 0.5
/obj/item/weapon/crowbar/power
/obj/item/crowbar/power
name = "jaws of life"
desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a prying head."
icon_state = "jaws_pry"
@@ -775,14 +775,14 @@
force = 15
toolspeed = 0.25
/obj/item/weapon/crowbar/power/suicide_act(mob/user)
/obj/item/crowbar/power/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is putting [user.p_their()] head in [src], it looks like [user.p_theyre()] trying to commit suicide!</span>")
playsound(loc, 'sound/items/jaws_pry.ogg', 50, 1, -1)
return (BRUTELOSS)
/obj/item/weapon/crowbar/power/attack_self(mob/user)
/obj/item/crowbar/power/attack_self(mob/user)
playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1)
var/obj/item/weapon/wirecutters/power/cutjaws = new /obj/item/weapon/wirecutters/power
var/obj/item/wirecutters/power/cutjaws = new /obj/item/wirecutters/power
to_chat(user, "<span class='notice'>You attach the cutting jaws to [src].</span>")
qdel(src)
user.put_in_active_hand(cutjaws)
+85 -85
View File
@@ -22,14 +22,14 @@
/*
* Twohanded
*/
/obj/item/weapon/twohanded
/obj/item/twohanded
var/wielded = 0
var/force_unwielded = 0
var/force_wielded = 0
var/wieldsound = null
var/unwieldsound = null
/obj/item/weapon/twohanded/proc/unwield(mob/living/carbon/user, show_message = TRUE)
/obj/item/twohanded/proc/unwield(mob/living/carbon/user, show_message = TRUE)
if(!wielded || !user)
return
wielded = 0
@@ -48,12 +48,12 @@
to_chat(user, "<span class='notice'>You are now carrying [src] with one hand.</span>")
if(unwieldsound)
playsound(loc, unwieldsound, 50, 1)
var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_held_item()
var/obj/item/twohanded/offhand/O = user.get_inactive_held_item()
if(O && istype(O))
O.unwield()
return
/obj/item/weapon/twohanded/proc/wield(mob/living/carbon/user)
/obj/item/twohanded/proc/wield(mob/living/carbon/user)
if(wielded)
return
if(ismonkey(user))
@@ -76,63 +76,63 @@
to_chat(user, "<span class='notice'>You grab [src] with both hands.</span>")
if (wieldsound)
playsound(loc, wieldsound, 50, 1)
var/obj/item/weapon/twohanded/offhand/O = new(user) ////Let's reserve his other hand~
var/obj/item/twohanded/offhand/O = new(user) ////Let's reserve his other hand~
O.name = "[name] - offhand"
O.desc = "Your second grip on [src]."
O.wielded = TRUE
user.put_in_inactive_hand(O)
return
/obj/item/weapon/twohanded/dropped(mob/user)
/obj/item/twohanded/dropped(mob/user)
. = ..()
//handles unwielding a twohanded weapon when dropped as well as clearing up the offhand
if(!wielded)
return
unwield(user)
/obj/item/weapon/twohanded/update_icon()
/obj/item/twohanded/update_icon()
return
/obj/item/weapon/twohanded/attack_self(mob/user)
/obj/item/twohanded/attack_self(mob/user)
. = ..()
if(wielded) //Trying to unwield it
unwield(user)
else //Trying to wield it
wield(user)
/obj/item/weapon/twohanded/equip_to_best_slot(mob/M)
/obj/item/twohanded/equip_to_best_slot(mob/M)
if(..())
if(istype(src, /obj/item/weapon/twohanded/required))
if(istype(src, /obj/item/twohanded/required))
return // unwield forces twohanded-required items to be dropped.
unwield(M)
return
/obj/item/weapon/twohanded/equipped(mob/user, slot)
/obj/item/twohanded/equipped(mob/user, slot)
..()
if(!user.is_holding(src) && wielded && !istype(src, /obj/item/weapon/twohanded/required))
if(!user.is_holding(src) && wielded && !istype(src, /obj/item/twohanded/required))
unwield(user)
///////////OFFHAND///////////////
/obj/item/weapon/twohanded/offhand
/obj/item/twohanded/offhand
name = "offhand"
icon_state = "offhand"
w_class = WEIGHT_CLASS_HUGE
flags_1 = ABSTRACT_1 | NODROP_1
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
/obj/item/weapon/twohanded/offhand/unwield()
/obj/item/twohanded/offhand/unwield()
if(wielded)//Only delete if we're wielded
wielded = FALSE
qdel(src)
/obj/item/weapon/twohanded/offhand/wield()
/obj/item/twohanded/offhand/wield()
if(wielded)//Only delete if we're wielded
wielded = FALSE
qdel(src)
/obj/item/weapon/twohanded/offhand/attack_self(mob/living/carbon/user) //You should never be able to do this in standard use of two handed items. This is a backup for lingering offhands.
var/obj/item/weapon/twohanded/O = user.get_inactive_held_item()
if (istype(O) && !istype(O, /obj/item/weapon/twohanded/offhand/)) //If you have a proper item in your other hand that the offhand is for, do nothing. This should never happen.
/obj/item/twohanded/offhand/attack_self(mob/living/carbon/user) //You should never be able to do this in standard use of two handed items. This is a backup for lingering offhands.
var/obj/item/twohanded/O = user.get_inactive_held_item()
if (istype(O) && !istype(O, /obj/item/twohanded/offhand/)) //If you have a proper item in your other hand that the offhand is for, do nothing. This should never happen.
return
if (QDELETED(src))
return
@@ -140,20 +140,20 @@
///////////Two hand required objects///////////////
//This is for objects that require two hands to even pick up
/obj/item/weapon/twohanded/required
/obj/item/twohanded/required
w_class = WEIGHT_CLASS_HUGE
/obj/item/weapon/twohanded/required/attack_self()
/obj/item/twohanded/required/attack_self()
return
/obj/item/weapon/twohanded/required/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0)
/obj/item/twohanded/required/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0)
if(wielded && !slot_flags)
to_chat(M, "<span class='warning'>[src] is too cumbersome to carry with anything but your hands!</span>")
return 0
return ..()
/obj/item/weapon/twohanded/required/attack_hand(mob/user)//Can't even pick it up without both hands empty
var/obj/item/weapon/twohanded/required/H = user.get_inactive_held_item()
/obj/item/twohanded/required/attack_hand(mob/user)//Can't even pick it up without both hands empty
var/obj/item/twohanded/required/H = user.get_inactive_held_item()
if(get_dist(src,user) > 1)
return
if(H != null)
@@ -163,11 +163,11 @@
wield(user)
..()
/obj/item/weapon/twohanded/required/equipped(mob/user, slot)
/obj/item/twohanded/required/equipped(mob/user, slot)
..()
var/slotbit = slotdefine2slotbit(slot)
if(slot_flags & slotbit)
var/datum/O = user.is_holding_item_of_type(/obj/item/weapon/twohanded/offhand)
var/datum/O = user.is_holding_item_of_type(/obj/item/twohanded/offhand)
if(!O || QDELETED(O))
return
qdel(O)
@@ -177,16 +177,16 @@
else
unwield(user)
/obj/item/weapon/twohanded/required/dropped(mob/living/user, show_message = TRUE)
/obj/item/twohanded/required/dropped(mob/living/user, show_message = TRUE)
unwield(user, show_message)
..()
/obj/item/weapon/twohanded/required/wield(mob/living/carbon/user)
/obj/item/twohanded/required/wield(mob/living/carbon/user)
..()
if(!wielded)
user.dropItemToGround(src)
/obj/item/weapon/twohanded/required/unwield(mob/living/carbon/user, show_message = TRUE)
/obj/item/twohanded/required/unwield(mob/living/carbon/user, show_message = TRUE)
if(!wielded)
return
if(show_message)
@@ -196,7 +196,7 @@
/*
* Fireaxe
*/
/obj/item/weapon/twohanded/fireaxe // DEM AXES MAN, marker -Agouri
/obj/item/twohanded/fireaxe // DEM AXES MAN, marker -Agouri
icon_state = "fireaxe0"
lefthand_file = 'icons/mob/inhands/weapons/axes_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/axes_righthand.dmi'
@@ -215,15 +215,15 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30)
resistance_flags = FIRE_PROOF
/obj/item/weapon/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons.
/obj/item/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons.
icon_state = "fireaxe[wielded]"
return
/obj/item/weapon/twohanded/fireaxe/suicide_act(mob/user)
/obj/item/twohanded/fireaxe/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] axes [user.p_them()]self from head to toe! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (BRUTELOSS)
/obj/item/weapon/twohanded/fireaxe/afterattack(atom/A, mob/user, proximity)
/obj/item/twohanded/fireaxe/afterattack(atom/A, mob/user, proximity)
if(!proximity)
return
if(wielded) //destroys windows and grilles in one hit
@@ -238,7 +238,7 @@
/*
* Double-Bladed Energy Swords - Cheridan
*/
/obj/item/weapon/twohanded/dualsaber
/obj/item/twohanded/dualsaber
icon_state = "dualsaber0"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
@@ -268,7 +268,7 @@
var/brightness_on = 6 //TWICE AS BRIGHT AS A REGULAR ESWORD
var/list/possible_colors = list("red", "blue", "green", "purple")
/obj/item/weapon/twohanded/dualsaber/Initialize()
/obj/item/twohanded/dualsaber/Initialize()
. = ..()
if(LAZYLEN(possible_colors))
item_color = pick(possible_colors)
@@ -282,18 +282,18 @@
if("purple")
light_color = LIGHT_COLOR_LAVENDER
/obj/item/weapon/twohanded/dualsaber/Destroy()
/obj/item/twohanded/dualsaber/Destroy()
STOP_PROCESSING(SSobj, src)
. = ..()
/obj/item/weapon/twohanded/dualsaber/update_icon()
/obj/item/twohanded/dualsaber/update_icon()
if(wielded)
icon_state = "dualsaber[item_color][wielded]"
else
icon_state = "dualsaber0"
clean_blood()//blood overlays get weird otherwise, because the sprite changes.
/obj/item/weapon/twohanded/dualsaber/attack(mob/target, mob/living/carbon/human/user)
/obj/item/twohanded/dualsaber/attack(mob/target, mob/living/carbon/human/user)
if(user.has_dna())
if(user.dna.check_mutation(HULK))
to_chat(user, "<span class='warning'>You grip the blade too hard and accidentally close it!</span>")
@@ -306,31 +306,31 @@
if((wielded) && prob(50))
INVOKE_ASYNC(src, .proc/jedi_spin, user)
/obj/item/weapon/twohanded/dualsaber/proc/jedi_spin(mob/living/user)
/obj/item/twohanded/dualsaber/proc/jedi_spin(mob/living/user)
for(var/i in list(NORTH,SOUTH,EAST,WEST,EAST,SOUTH,NORTH,SOUTH,EAST,WEST,EAST,SOUTH))
user.setDir(i)
if(i == WEST)
user.emote("flip")
sleep(1)
/obj/item/weapon/twohanded/dualsaber/proc/impale(mob/living/user)
/obj/item/twohanded/dualsaber/proc/impale(mob/living/user)
to_chat(user, "<span class='warning'>You twirl around a bit before losing your balance and impaling yourself on [src].</span>")
if (force_wielded)
user.take_bodypart_damage(20,25)
else
user.adjustStaminaLoss(25)
/obj/item/weapon/twohanded/dualsaber/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/twohanded/dualsaber/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(wielded)
return ..()
return 0
/obj/item/weapon/twohanded/dualsaber/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) //In case thats just so happens that it is still activated on the groud, prevents hulk from picking it up
/obj/item/twohanded/dualsaber/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) //In case thats just so happens that it is still activated on the groud, prevents hulk from picking it up
if(wielded)
to_chat(user, "<span class='warning'>You can't pick up such dangerous item with your meaty hands without losing fingers, better not to!</span>")
return 1
/obj/item/weapon/twohanded/dualsaber/wield(mob/living/carbon/M) //Specific wield () hulk checks due to reflection chance for balance issues and switches hitsounds.
/obj/item/twohanded/dualsaber/wield(mob/living/carbon/M) //Specific wield () hulk checks due to reflection chance for balance issues and switches hitsounds.
if(M.has_dna())
if(M.dna.check_mutation(HULK))
to_chat(M, "<span class='warning'>You lack the grace to wield this!</span>")
@@ -343,7 +343,7 @@
START_PROCESSING(SSobj, src)
set_light(brightness_on)
/obj/item/weapon/twohanded/dualsaber/unwield() //Specific unwield () to switch hitsounds.
/obj/item/twohanded/dualsaber/unwield() //Specific unwield () to switch hitsounds.
sharpness = initial(sharpness)
w_class = initial(w_class)
..()
@@ -351,7 +351,7 @@
STOP_PROCESSING(SSobj, src)
set_light(0)
/obj/item/weapon/twohanded/dualsaber/process()
/obj/item/twohanded/dualsaber/process()
if(wielded)
if(hacked)
light_color = pick(LIGHT_COLOR_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER)
@@ -359,12 +359,12 @@
else
STOP_PROCESSING(SSobj, src)
/obj/item/weapon/twohanded/dualsaber/IsReflect()
/obj/item/twohanded/dualsaber/IsReflect()
if(wielded)
return 1
/obj/item/weapon/twohanded/dualsaber/ignition_effect(atom/A, mob/user)
// same as /obj/item/weapon/melee/transforming/energy, mostly
/obj/item/twohanded/dualsaber/ignition_effect(atom/A, mob/user)
// same as /obj/item/melee/transforming/energy, mostly
if(!wielded)
return ""
var/in_mouth = ""
@@ -378,19 +378,19 @@
// Light your candles while spinning around the room
INVOKE_ASYNC(src, .proc/jedi_spin, user)
/obj/item/weapon/twohanded/dualsaber/green
/obj/item/twohanded/dualsaber/green
possible_colors = list("green")
/obj/item/weapon/twohanded/dualsaber/red
/obj/item/twohanded/dualsaber/red
possible_colors = list("red")
/obj/item/weapon/twohanded/dualsaber/blue
/obj/item/twohanded/dualsaber/blue
possible_colors = list("blue")
/obj/item/weapon/twohanded/dualsaber/purple
/obj/item/twohanded/dualsaber/purple
possible_colors = list("purple")
/obj/item/weapon/twohanded/dualsaber/attackby(obj/item/weapon/W, mob/user, params)
/obj/item/twohanded/dualsaber/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/device/multitool))
if(!hacked)
hacked = TRUE
@@ -403,7 +403,7 @@
return ..()
//spears
/obj/item/weapon/twohanded/spear
/obj/item/twohanded/spear
icon_state = "spearglass0"
lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi'
@@ -424,16 +424,16 @@
sharpness = IS_SHARP
max_integrity = 200
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30)
var/obj/item/weapon/grenade/explosive = null
var/obj/item/grenade/explosive = null
var/war_cry = "AAAAARGH!!!"
/obj/item/weapon/twohanded/spear/update_icon()
/obj/item/twohanded/spear/update_icon()
if(explosive)
icon_state = "spearbomb[wielded]"
else
icon_state = "spearglass[wielded]"
/obj/item/weapon/twohanded/spear/afterattack(atom/movable/AM, mob/user, proximity)
/obj/item/twohanded/spear/afterattack(atom/movable/AM, mob/user, proximity)
if(!proximity)
return
if(isopenturf(AM)) //So you can actually melee with it
@@ -445,14 +445,14 @@
qdel(src)
//THIS MIGHT BE UNBALANCED SO I DUNNO // it totally is.
/obj/item/weapon/twohanded/spear/throw_impact(atom/target)
/obj/item/twohanded/spear/throw_impact(atom/target)
. = ..()
if(!.) //not caught
if(explosive)
explosive.prime()
qdel(src)
/obj/item/weapon/twohanded/spear/AltClick()
/obj/item/twohanded/spear/AltClick()
..()
if(!explosive)
return
@@ -462,8 +462,8 @@
if(input)
src.war_cry = input
/obj/item/weapon/twohanded/spear/CheckParts(list/parts_list)
var/obj/item/weapon/twohanded/spear/S = locate() in parts_list
/obj/item/twohanded/spear/CheckParts(list/parts_list)
var/obj/item/twohanded/spear/S = locate() in parts_list
if(S)
if(S.explosive)
S.explosive.forceMove(get_turf(src))
@@ -471,7 +471,7 @@
parts_list -= S
qdel(S)
..()
var/obj/item/weapon/grenade/G = locate() in contents
var/obj/item/grenade/G = locate() in contents
if(G)
explosive = G
name = "explosive lance"
@@ -479,7 +479,7 @@
update_icon()
// CHAINSAW
/obj/item/weapon/twohanded/required/chainsaw
/obj/item/twohanded/required/chainsaw
name = "chainsaw"
desc = "A versatile power tool. Useful for limbing trees and delimbing humans."
icon_state = "chainsaw_off"
@@ -500,7 +500,7 @@
actions_types = list(/datum/action/item_action/startchainsaw)
var/on = FALSE
/obj/item/weapon/twohanded/required/chainsaw/attack_self(mob/user)
/obj/item/twohanded/required/chainsaw/attack_self(mob/user)
on = !on
to_chat(user, "As you pull the starting cord dangling from [src], [on ? "it begins to whirr." : "the chain stops moving."]")
force = on ? force_on : initial(force)
@@ -518,17 +518,17 @@
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/weapon/twohanded/required/chainsaw/get_dismemberment_chance()
/obj/item/twohanded/required/chainsaw/get_dismemberment_chance()
if(wielded)
. = ..()
/obj/item/weapon/twohanded/required/chainsaw/doomslayer
/obj/item/twohanded/required/chainsaw/doomslayer
name = "THE GREAT COMMUNICATOR"
desc = "<span class='warning'>VRRRRRRR!!!</span>"
armour_penetration = 100
force_on = 30
/obj/item/weapon/twohanded/required/chainsaw/doomslayer/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/twohanded/required/chainsaw/doomslayer/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(attack_type == PROJECTILE_ATTACK)
owner.visible_message("<span class='danger'>Ranged attacks just make [owner] angrier!</span>")
playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, 1)
@@ -536,7 +536,7 @@
return 0
//GREY TIDE
/obj/item/weapon/twohanded/spear/grey_tide
/obj/item/twohanded/spear/grey_tide
icon_state = "spearglass0"
name = "\improper Grey Tide"
desc = "Recovered from the aftermath of a revolt aboard Defense Outpost Theta Aegis, in which a seemingly endless tide of Assistants caused heavy casualities among Nanotrasen military forces."
@@ -546,7 +546,7 @@
throw_speed = 4
attack_verb = list("gored")
/obj/item/weapon/twohanded/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity)
/obj/item/twohanded/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity)
..()
if(!proximity)
return
@@ -561,7 +561,7 @@
M.Copy_Parent(user, 100, user.health/2.5, 12, 30)
M.GiveTarget(L)
/obj/item/weapon/twohanded/pitchfork
/obj/item/twohanded/pitchfork
icon_state = "pitchfork0"
lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi'
@@ -579,7 +579,7 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30)
resistance_flags = FIRE_PROOF
/obj/item/weapon/twohanded/pitchfork/demonic
/obj/item/twohanded/pitchfork/demonic
name = "demonic pitchfork"
desc = "A red pitchfork, it looks like the work of the devil."
force = 19
@@ -587,30 +587,30 @@
force_unwielded = 19
force_wielded = 25
/obj/item/weapon/twohanded/pitchfork/demonic/Initialize()
/obj/item/twohanded/pitchfork/demonic/Initialize()
. = ..()
set_light(3,6,LIGHT_COLOR_RED)
/obj/item/weapon/twohanded/pitchfork/demonic/greater
/obj/item/twohanded/pitchfork/demonic/greater
force = 24
throwforce = 50
force_unwielded = 24
force_wielded = 34
/obj/item/weapon/twohanded/pitchfork/demonic/ascended
/obj/item/twohanded/pitchfork/demonic/ascended
force = 100
throwforce = 100
force_unwielded = 100
force_wielded = 500000 // Kills you DEAD.
/obj/item/weapon/twohanded/pitchfork/update_icon()
/obj/item/twohanded/pitchfork/update_icon()
icon_state = "pitchfork[wielded]"
/obj/item/weapon/twohanded/pitchfork/suicide_act(mob/user)
/obj/item/twohanded/pitchfork/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] impales [user.p_them()]self in [user.p_their()] abdomen with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (BRUTELOSS)
/obj/item/weapon/twohanded/pitchfork/demonic/pickup(mob/living/user)
/obj/item/twohanded/pitchfork/demonic/pickup(mob/living/user)
if(isliving(user) && user.mind && user.owns_soul() && !is_devil(user))
var/mob/living/U = user
U.visible_message("<span class='warning'>As [U] picks [src] up, [U]'s arms briefly catch fire.</span>", \
@@ -621,13 +621,13 @@
else
U.adjustFireLoss(rand(force/2,force))
/obj/item/weapon/twohanded/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user)
/obj/item/twohanded/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user)
if(user.mind && user.owns_soul() && !is_devil(user))
to_chat(user, "<span class ='warning'>[src] burns in your hands.</span>")
user.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm"))
..()
/obj/item/weapon/twohanded/pitchfork/demonic/ascended/afterattack(atom/target, mob/user, proximity)
/obj/item/twohanded/pitchfork/demonic/ascended/afterattack(atom/target, mob/user, proximity)
if(!proximity || !wielded)
return
if(iswallturf(target))
@@ -640,7 +640,7 @@
//HF blade
/obj/item/weapon/twohanded/vibro_weapon
/obj/item/twohanded/vibro_weapon
icon_state = "hfrequency0"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
@@ -658,7 +658,7 @@
slot_flags = SLOT_BACK
hitsound = 'sound/weapons/bladeslice.ogg'
/obj/item/weapon/twohanded/vibro_weapon/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/twohanded/vibro_weapon/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(wielded)
final_block_chance *= 2
if(wielded || attack_type != PROJECTILE_ATTACK)
@@ -672,25 +672,25 @@
return 1
return 0
/obj/item/weapon/twohanded/vibro_weapon/update_icon()
/obj/item/twohanded/vibro_weapon/update_icon()
icon_state = "hfrequency[wielded]"
/*
* Bone Axe
*/
/obj/item/weapon/twohanded/fireaxe/boneaxe // Blatant imitation of the fireaxe, but made out of bone.
/obj/item/twohanded/fireaxe/boneaxe // Blatant imitation of the fireaxe, but made out of bone.
icon_state = "bone_axe0"
name = "bone axe"
desc = "A large, vicious axe crafted out of several sharpened bone plates and crudely tied together. Made of monsters, by killing monsters, for killing monsters."
force_wielded = 23
/obj/item/weapon/twohanded/fireaxe/boneaxe/update_icon()
/obj/item/twohanded/fireaxe/boneaxe/update_icon()
icon_state = "bone_axe[wielded]"
/*
* Bone Spear
*/
/obj/item/weapon/twohanded/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification.
/obj/item/twohanded/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification.
icon_state = "bone_spear0"
lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi'
@@ -709,5 +709,5 @@
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
sharpness = IS_SHARP
/obj/item/weapon/twohanded/bonespear/update_icon()
/obj/item/twohanded/bonespear/update_icon()
icon_state = "bone_spear[wielded]"
@@ -1,4 +1,4 @@
/obj/item/weapon/vending_refill
/obj/item/vending_refill
name = "resupply canister"
var/machine_name = "Generic"
@@ -18,13 +18,13 @@
var/init_charges = list(0, 0, 0)
/obj/item/weapon/vending_refill/New(amt = -1)
/obj/item/vending_refill/New(amt = -1)
..()
name = "\improper [machine_name] restocking unit"
if(isnum(amt) && amt > -1)
charges[1] = amt
/obj/item/weapon/vending_refill/examine(mob/user)
/obj/item/vending_refill/examine(mob/user)
..()
if(charges[1] > 0)
to_chat(user, "It can restock [charges[1]+charges[2]+charges[3]] item(s).")
@@ -33,48 +33,48 @@
//NOTE I decided to go for about 1/3 of a machine's capacity
/obj/item/weapon/vending_refill/boozeomat
/obj/item/vending_refill/boozeomat
machine_name = "Booze-O-Mat"
icon_state = "refill_booze"
charges = list(54, 4, 0)//of 159 standard, 12 contraband
init_charges = list(54, 4, 0)
/obj/item/weapon/vending_refill/coffee
/obj/item/vending_refill/coffee
machine_name = "Solar's Best Hot Drinks"
icon_state = "refill_joe"
charges = list(25, 4, 0)//of 75 standard, 12 contraband
init_charges = list(25, 4, 0)
/obj/item/weapon/vending_refill/snack
/obj/item/vending_refill/snack
machine_name = "Getmore Chocolate Corp"
charges = list(12, 2, 0)//of 36 standard, 6 contraband
init_charges = list(12, 2, 0)
/obj/item/weapon/vending_refill/cola
/obj/item/vending_refill/cola
machine_name = "Robust Softdrinks"
icon_state = "refill_cola"
charges = list(30, 4, 1)//of 90 standard, 12 contraband, 1 premium
init_charges = list(30, 4, 1)
/obj/item/weapon/vending_refill/cigarette
/obj/item/vending_refill/cigarette
machine_name = "ShadyCigs Deluxe"
icon_state = "refill_smoke"
charges = list(12, 3, 2)// of 36 standard, 9 contraband, 6 premium
init_charges = list(12, 3, 2)
/obj/item/weapon/vending_refill/autodrobe
/obj/item/vending_refill/autodrobe
machine_name = "AutoDrobe"
icon_state = "refill_costume"
charges = list(32, 2, 3)// of 96 standard, 6 contraband, 9 premium
init_charges = list(32, 2, 3)
/obj/item/weapon/vending_refill/clothing
/obj/item/vending_refill/clothing
machine_name = "ClothesMate"
icon_state = "refill_clothes"
charges = list(37, 4, 4)// of 111 standard, 12 contraband, 10 premium(?)
init_charges = list(37, 4, 4)
/obj/item/weapon/vending_refill/medical
/obj/item/vending_refill/medical
machine_name = "NanoMed"
icon_state = "refill_medical"
charges = list(26, 5, 3)// of 76 standard, 13 contraband, 8 premium
+59 -62
View File
@@ -1,7 +1,4 @@
/obj/item/weapon
var/trigger_guard = TRIGGER_GUARD_NONE
/obj/item/weapon/banhammer
/obj/item/banhammer
desc = "A banhammer"
name = "banhammer"
icon = 'icons/obj/items.dmi'
@@ -16,16 +13,16 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 70)
resistance_flags = FIRE_PROOF
/obj/item/weapon/banhammer/suicide_act(mob/user)
/obj/item/banhammer/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is hitting [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to ban [user.p_them()]self from life.</span>")
return (BRUTELOSS|FIRELOSS|TOXLOSS|OXYLOSS)
/obj/item/weapon/banhammer/attack(mob/M, mob/user)
/obj/item/banhammer/attack(mob/M, mob/user)
to_chat(M, "<font color='red'><b> You have been banned FOR NO REISIN by [user]<b></font>")
to_chat(user, "<font color='red'>You have <b>BANNED</b> [M]</font>")
playsound(loc, 'sound/effects/adminhelp.ogg', 15) //keep it at 15% volume so people don't jump out of their skin too much
/obj/item/weapon/sord
/obj/item/sord
name = "\improper SORD"
desc = "This thing is so unspeakably shitty you are having a hard time even holding it."
icon_state = "sord"
@@ -39,12 +36,12 @@
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/weapon/sord/suicide_act(mob/user)
/obj/item/sord/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is trying to impale [user.p_them()]self with [src]! It might be a suicide attempt if it weren't so shitty.</span>", \
"<span class='suicide'>You try to impale yourself with [src], but it's USELESS...</span>")
return SHAME
/obj/item/weapon/claymore
/obj/item/claymore
name = "claymore"
desc = "What are you standing around staring at this for? Get to killing!"
icon_state = "claymore"
@@ -64,11 +61,11 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
resistance_flags = FIRE_PROOF
/obj/item/weapon/claymore/suicide_act(mob/user)
/obj/item/claymore/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is falling on [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return(BRUTELOSS)
/obj/item/weapon/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS
/obj/item/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS
desc = "<b><i>THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!</i></b>\nActivate it in your hand to point to the nearest victim."
flags_1 = CONDUCT_1 | NODROP_1 | DROPDEL_1
slot_flags = null
@@ -76,13 +73,13 @@
luminosity = 3
attack_verb = list("brutalized", "eviscerated", "disemboweled", "hacked", "carved", "cleaved") //ONLY THE MOST VISCERAL ATTACK VERBS
var/notches = 0 //HOW MANY PEOPLE HAVE BEEN SLAIN WITH THIS BLADE
var/obj/item/weapon/disk/nuclear/nuke_disk //OUR STORED NUKE DISK
var/obj/item/disk/nuclear/nuke_disk //OUR STORED NUKE DISK
/obj/item/weapon/claymore/highlander/Initialize()
/obj/item/claymore/highlander/Initialize()
. = ..()
START_PROCESSING(SSobj, src)
/obj/item/weapon/claymore/highlander/Destroy()
/obj/item/claymore/highlander/Destroy()
if(nuke_disk)
nuke_disk.forceMove(get_turf(src))
nuke_disk.visible_message("<span class='warning'>The nuke disk is vulnerable!</span>")
@@ -90,7 +87,7 @@
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/weapon/claymore/highlander/process()
/obj/item/claymore/highlander/process()
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
loc.layer = LARGE_MOB_LAYER //NO HIDING BEHIND PLANTS FOR YOU, DICKWEED (HA GET IT, BECAUSE WEEDS ARE PLANTS)
@@ -100,22 +97,22 @@
qdel(src)
/obj/item/weapon/claymore/highlander/pickup(mob/living/user)
/obj/item/claymore/highlander/pickup(mob/living/user)
to_chat(user, "<span class='notice'>The power of Scotland protects you! You are shielded from all stuns and knockdowns.</span>")
user.add_stun_absorption("highlander", INFINITY, 1, " is protected by the power of Scotland!", "The power of Scotland absorbs the stun!", " is protected by the power of Scotland!")
user.status_flags += IGNORESLOWDOWN
/obj/item/weapon/claymore/highlander/dropped(mob/living/user)
/obj/item/claymore/highlander/dropped(mob/living/user)
user.status_flags -= IGNORESLOWDOWN
qdel(src) //If this ever happens, it's because you lost an arm
/obj/item/weapon/claymore/highlander/examine(mob/user)
/obj/item/claymore/highlander/examine(mob/user)
..()
to_chat(user, "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade.")
if(nuke_disk)
to_chat(user, "<span class='boldwarning'>It's holding the nuke disk!</span>")
/obj/item/weapon/claymore/highlander/attack(mob/living/target, mob/living/user)
/obj/item/claymore/highlander/attack(mob/living/target, mob/living/user)
. = ..()
if(target && target.stat == DEAD && target.mind && target.mind.special_role == "highlander")
user.fully_heal() //STEAL THE LIFE OF OUR FALLEN FOES
@@ -123,7 +120,7 @@
target.visible_message("<span class='warning'>[target] crumbles to dust beneath [user]'s blows!</span>", "<span class='userdanger'>As you fall, your body crumbles to dust!</span>")
target.dust()
/obj/item/weapon/claymore/highlander/attack_self(mob/living/user)
/obj/item/claymore/highlander/attack_self(mob/living/user)
var/closest_victim
var/closest_distance = 255
for(var/mob/living/carbon/human/H in GLOB.player_list - user)
@@ -134,10 +131,10 @@
return
to_chat(user, "<span class='danger'>[src] thrums and points to the [dir2text(get_dir(user, closest_victim))].</span>")
/obj/item/weapon/claymore/highlander/IsReflect()
/obj/item/claymore/highlander/IsReflect()
return 1 //YOU THINK YOUR PUNY LASERS CAN STOP ME?
/obj/item/weapon/claymore/highlander/proc/add_notch(mob/living/user) //DYNAMIC CLAYMORE PROGRESSION SYSTEM - THIS IS THE FUTURE
/obj/item/claymore/highlander/proc/add_notch(mob/living/user) //DYNAMIC CLAYMORE PROGRESSION SYSTEM - THIS IS THE FUTURE
notches++
force++
var/new_name = name
@@ -190,7 +187,7 @@
name = new_name
playsound(user, 'sound/items/screwdriver2.ogg', 50, 1)
/obj/item/weapon/katana
/obj/item/katana
name = "katana"
desc = "Woefully underpowered in D20"
icon_state = "katana"
@@ -210,14 +207,14 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
resistance_flags = FIRE_PROOF
/obj/item/weapon/katana/cursed
/obj/item/katana/cursed
slot_flags = null
/obj/item/weapon/katana/suicide_act(mob/user)
/obj/item/katana/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is slitting [user.p_their()] stomach open with [src]! It looks like [user.p_theyre()] trying to commit seppuku!</span>")
return(BRUTELOSS)
/obj/item/weapon/wirerod
/obj/item/wirerod
name = "wired rod"
desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit."
icon_state = "wiredrod"
@@ -229,9 +226,9 @@
materials = list(MAT_METAL=1150, MAT_GLASS=75)
attack_verb = list("hit", "bludgeoned", "whacked", "bonked")
/obj/item/weapon/wirerod/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/shard))
var/obj/item/weapon/twohanded/spear/S = new /obj/item/weapon/twohanded/spear
/obj/item/wirerod/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/shard))
var/obj/item/twohanded/spear/S = new /obj/item/twohanded/spear
remove_item_from_storage(user)
qdel(I)
@@ -241,7 +238,7 @@
to_chat(user, "<span class='notice'>You fasten the glass shard to the top of the rod with the cable.</span>")
else if(istype(I, /obj/item/device/assembly/igniter) && !(I.flags_1 & NODROP_1))
var/obj/item/weapon/melee/baton/cattleprod/P = new /obj/item/weapon/melee/baton/cattleprod
var/obj/item/melee/baton/cattleprod/P = new /obj/item/melee/baton/cattleprod
remove_item_from_storage(user)
@@ -255,7 +252,7 @@
return ..()
/obj/item/weapon/throwing_star
/obj/item/throwing_star
name = "throwing star"
desc = "An ancient weapon still used to this day due to it's ease of lodging itself into victim's body parts"
icon_state = "throwingstar"
@@ -274,7 +271,7 @@
resistance_flags = FIRE_PROOF
/obj/item/weapon/switchblade
/obj/item/switchblade
name = "switchblade"
icon_state = "switchblade"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
@@ -293,7 +290,7 @@
resistance_flags = FIRE_PROOF
var/extended = 0
/obj/item/weapon/switchblade/attack_self(mob/user)
/obj/item/switchblade/attack_self(mob/user)
extended = !extended
playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1)
if(extended)
@@ -313,11 +310,11 @@
hitsound = 'sound/weapons/genhit.ogg'
sharpness = IS_BLUNT
/obj/item/weapon/switchblade/suicide_act(mob/user)
/obj/item/switchblade/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is slitting [user.p_their()] own throat with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (BRUTELOSS)
/obj/item/weapon/phone
/obj/item/phone
name = "red phone"
desc = "Should anything ever go wrong..."
icon = 'icons/obj/items.dmi'
@@ -330,14 +327,14 @@
attack_verb = list("called", "rang")
hitsound = 'sound/weapons/ring.ogg'
/obj/item/weapon/phone/suicide_act(mob/user)
/obj/item/phone/suicide_act(mob/user)
if(locate(/obj/structure/chair/stool) in user.loc)
user.visible_message("<span class='suicide'>[user] begins to tie a noose with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!</span>")
else
user.visible_message("<span class='suicide'>[user] is strangling [user.p_them()]self with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return(OXYLOSS)
/obj/item/weapon/cane
/obj/item/cane
name = "cane"
desc = "A cane used by a true gentleman. Or a clown."
icon = 'icons/obj/weapons.dmi'
@@ -351,7 +348,7 @@
materials = list(MAT_METAL=50)
attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed")
/obj/item/weapon/staff
/obj/item/staff
name = "wizard staff"
desc = "Apparently a staff used by the wizard."
icon = 'icons/obj/wizard.dmi'
@@ -367,14 +364,14 @@
attack_verb = list("bludgeoned", "whacked", "disciplined")
resistance_flags = FLAMMABLE
/obj/item/weapon/staff/broom
/obj/item/staff/broom
name = "broom"
desc = "Used for sweeping, and flying into the night while cackling. Black cat not included."
icon = 'icons/obj/wizard.dmi'
icon_state = "broom"
resistance_flags = FLAMMABLE
/obj/item/weapon/staff/stick
/obj/item/staff/stick
name = "stick"
desc = "A great tool to drag someone else's drinks across the bar."
icon = 'icons/obj/weapons.dmi'
@@ -388,18 +385,18 @@
throw_range = 5
w_class = WEIGHT_CLASS_SMALL
/obj/item/weapon/ectoplasm
/obj/item/ectoplasm
name = "ectoplasm"
desc = "spooky"
gender = PLURAL
icon = 'icons/obj/wizard.dmi'
icon_state = "ectoplasm"
/obj/item/weapon/ectoplasm/suicide_act(mob/user)
/obj/item/ectoplasm/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is inhaling [src]! It looks like [user.p_theyre()] trying to visit the astral plane.</span>")
return (OXYLOSS)
/obj/item/weapon/mounted_chainsaw
/obj/item/mounted_chainsaw
name = "mounted chainsaw"
desc = "A chainsaw that has replaced your arm."
icon_state = "chainsaw_on"
@@ -416,9 +413,9 @@
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsawhit.ogg'
/obj/item/weapon/mounted_chainsaw/Destroy()
/obj/item/mounted_chainsaw/Destroy()
var/obj/item/bodypart/part
new /obj/item/weapon/twohanded/required/chainsaw(get_turf(src))
new /obj/item/twohanded/required/chainsaw(get_turf(src))
if(iscarbon(loc))
var/mob/living/carbon/holder = loc
var/index = holder.get_held_index_of_item(src)
@@ -428,7 +425,7 @@
if(part)
part.drop_limb()
/obj/item/weapon/statuebust
/obj/item/statuebust
name = "bust"
desc = "A priceless ancient marble bust, the kind that belongs in a museum." //or you can hit people with it
icon = 'icons/obj/statue.dmi'
@@ -439,7 +436,7 @@
throw_range = 2
attack_verb = list("busted")
/obj/item/weapon/tailclub
/obj/item/tailclub
name = "tail club"
desc = "For the beating to death of lizards with their own tails."
icon_state = "tailclub"
@@ -449,19 +446,19 @@
throw_range = 1
attack_verb = list("clubbed", "bludgeoned")
/obj/item/weapon/melee/chainofcommand/tailwhip
/obj/item/melee/chainofcommand/tailwhip
name = "liz o' nine tails"
desc = "A whip fashioned from the severed tails of lizards."
icon_state = "tailwhip"
origin_tech = "engineering=3;combat=3;biotech=3"
needs_permit = 0
/obj/item/weapon/melee/chainofcommand/tailwhip/kitty
/obj/item/melee/chainofcommand/tailwhip/kitty
name = "cat o' nine tails"
desc = "A whip fashioned from the severed tails of cats."
icon_state = "catwhip"
/obj/item/weapon/melee/skateboard
/obj/item/melee/skateboard
name = "skateboard"
desc = "A skateboard. It can be placed on its wheels and ridden, or used as a strong weapon."
icon_state = "skateboard"
@@ -471,11 +468,11 @@
w_class = WEIGHT_CLASS_HUGE
attack_verb = list("smacked", "whacked", "slammed", "smashed")
/obj/item/weapon/melee/skateboard/attack_self(mob/user)
/obj/item/melee/skateboard/attack_self(mob/user)
new /obj/vehicle/scooter/skateboard(get_turf(user))
qdel(src)
/obj/item/weapon/melee/baseball_bat
/obj/item/melee/baseball_bat
name = "baseball bat"
desc = "There ain't a skull in the league that can withstand a swatter."
icon = 'icons/obj/items.dmi'
@@ -490,12 +487,12 @@
var/homerun_ready = 0
var/homerun_able = 0
/obj/item/weapon/melee/baseball_bat/homerun
/obj/item/melee/baseball_bat/homerun
name = "home run bat"
desc = "This thing looks dangerous... Dangerously good at baseball, that is."
homerun_able = 1
/obj/item/weapon/melee/baseball_bat/attack_self(mob/user)
/obj/item/melee/baseball_bat/attack_self(mob/user)
if(!homerun_able)
..()
return
@@ -510,7 +507,7 @@
homerun_ready = 1
..()
/obj/item/weapon/melee/baseball_bat/attack(mob/living/target, mob/living/user)
/obj/item/melee/baseball_bat/attack(mob/living/target, mob/living/user)
. = ..()
var/atom/throw_target = get_edge_target_turf(target, user.dir)
if(homerun_ready)
@@ -523,7 +520,7 @@
else if(!target.anchored)
target.throw_at(throw_target, rand(1,2), 7, user)
/obj/item/weapon/melee/baseball_bat/ablative
/obj/item/melee/baseball_bat/ablative
name = "metal baseball bat"
desc = "This bat is made of highly reflective, highly armored material."
icon_state = "baseball_bat_metal"
@@ -531,7 +528,7 @@
force = 12
throwforce = 15
/obj/item/weapon/melee/baseball_bat/ablative/IsReflect()//some day this will reflect thrown items instead of lasers
/obj/item/melee/baseball_bat/ablative/IsReflect()//some day this will reflect thrown items instead of lasers
var/picksound = rand(1,2)
var/turf = get_turf(src)
if(picksound == 1)
@@ -540,7 +537,7 @@
playsound(turf, 'sound/weapons/effects/batreflect2.ogg', 50, 1)
return 1
/obj/item/weapon/melee/flyswatter
/obj/item/melee/flyswatter
name = "flyswatter"
desc = "Useful for killing insects of all sizes."
icon = 'icons/obj/weapons.dmi'
@@ -556,7 +553,7 @@
//Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc.
var/list/strong_against
/obj/item/weapon/melee/flyswatter/Initialize()
/obj/item/melee/flyswatter/Initialize()
. = ..()
strong_against = typecacheof(list(
/mob/living/simple_animal/hostile/poison/bees/,
@@ -566,7 +563,7 @@
))
/obj/item/weapon/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag)
/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag)
if(proximity_flag)
if(is_type_in_typecache(target, strong_against))
new /obj/effect/decal/cleanable/deadcockroach(get_turf(target))
@@ -577,7 +574,7 @@
else
qdel(target)
/obj/item/weapon/circlegame
/obj/item/circlegame
name = "circled hand"
desc = "If somebody looks at this while it's below your waist, you get to bop them."
icon_state = "madeyoulook"
@@ -586,7 +583,7 @@
flags_1 = DROPDEL_1 | ABSTRACT_1
attack_verb = list("bopped")
/obj/item/weapon/proc/can_trigger_gun(mob/living/user)
/obj/item/proc/can_trigger_gun(mob/living/user)
if(!user.can_use_guns(src))
return FALSE
return TRUE