Bleeding edgy refresh (#303)
* not code stuff * other things * global vars, defines, helpers * onclick hud stuff, orphans, world.dm * controllers and datums * game folder * everything not client/mobs in modules * client folder * stage 1 mob stuff * simple animal things * silicons * carbon things * ayylmaos and monkeys * hyoomahn * icons n shit * sprite fixes * compile fixes * some fixes I cherrypicked. * qdel fixes * forgot brain refractors
This commit is contained in:
@@ -34,14 +34,14 @@ AI MODULES
|
||||
|
||||
/obj/item/weapon/aiModule/proc/show_laws(var/mob/user as mob)
|
||||
if(laws.len)
|
||||
user << "<B>Programmed Law[(laws.len > 1) ? "s" : ""]:</B>"
|
||||
to_chat(user, "<B>Programmed Law[(laws.len > 1) ? "s" : ""]:</B>")
|
||||
for(var/law in laws)
|
||||
user << "\"[law]\""
|
||||
to_chat(user, "\"[law]\"")
|
||||
|
||||
//The proc other things should be calling
|
||||
/obj/item/weapon/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.
|
||||
user << "<span class='warning'>ERROR: No laws found on board.</span>"
|
||||
to_chat(user, "<span class='warning'>ERROR: No laws found on board.</span>")
|
||||
return
|
||||
|
||||
var/overflow = FALSE
|
||||
@@ -53,16 +53,16 @@ AI MODULES
|
||||
if(mylaw != "")
|
||||
tot_laws++
|
||||
if(tot_laws > config.silicon_max_law_amount && !bypass_law_amt_check)//allows certain boards to avoid this check, eg: reset
|
||||
user << "<span class='caution'>Not enough memory allocated to [law_datum.owner ? law_datum.owner : "the AI core"]'s law processor to handle this amount of laws."
|
||||
to_chat(user, "<span class='caution'>Not enough memory allocated to [law_datum.owner ? law_datum.owner : "the AI core"]'s law processor to handle this amount of laws.")
|
||||
message_admins("[key_name_admin(user)] tried to upload laws to [law_datum.owner ? key_name_admin(law_datum.owner) : "an AI core"] that would exceed the law cap.")
|
||||
overflow = TRUE
|
||||
|
||||
var/law2log = transmitInstructions(law_datum, user, overflow) //Freeforms return something extra we need to log
|
||||
if(law_datum.owner)
|
||||
user << "<span class='notice'>Upload complete. [law_datum.owner]'s laws have been modified.</span>"
|
||||
to_chat(user, "<span class='notice'>Upload complete. [law_datum.owner]'s laws have been modified.</span>")
|
||||
law_datum.owner.law_change_counter++
|
||||
else
|
||||
user << "<span class='notice'>Upload complete.</span>"
|
||||
to_chat(user, "<span class='notice'>Upload complete.</span>")
|
||||
|
||||
var/time = time2text(world.realtime,"hh:mm:ss")
|
||||
var/ainame = law_datum.owner ? law_datum.owner.name : "empty AI core"
|
||||
@@ -74,7 +74,7 @@ AI MODULES
|
||||
//The proc that actually changes the silicon's laws.
|
||||
/obj/item/weapon/aiModule/proc/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow = FALSE)
|
||||
if(law_datum.owner)
|
||||
law_datum.owner << "<span class='userdanger'>[sender] has uploaded a change to the laws you must follow using a [name].</span>"
|
||||
to_chat(law_datum.owner, "<span class='userdanger'>[sender] has uploaded a change to the laws you must follow using a [name].</span>")
|
||||
|
||||
|
||||
/******************** Modules ********************/
|
||||
@@ -110,10 +110,10 @@ AI MODULES
|
||||
/obj/item/weapon/aiModule/zeroth/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
|
||||
if(law_datum.owner)
|
||||
if(law_datum.owner.laws.zeroth)
|
||||
law_datum.owner << "[sender.real_name] attempted to modify your zeroth law."
|
||||
law_datum.owner << "It would be in your best interest to play along with [sender.real_name] that:"
|
||||
to_chat(law_datum.owner, "[sender.real_name] attempted to modify your zeroth law.")
|
||||
to_chat(law_datum.owner, "It would be in your best interest to play along with [sender.real_name] that:")
|
||||
for(var/failedlaw in laws)
|
||||
law_datum.owner << "[failedlaw]"
|
||||
to_chat(law_datum.owner, "[failedlaw]")
|
||||
return 1
|
||||
|
||||
for(var/templaw in laws)
|
||||
@@ -161,7 +161,7 @@ AI MODULES
|
||||
|
||||
/obj/item/weapon/aiModule/supplied/safeguard/install(datum/ai_laws/law_datum, mob/user)
|
||||
if(!targetName)
|
||||
user << "No name detected on module, please enter one."
|
||||
to_chat(user, "No name detected on module, please enter one.")
|
||||
return 0
|
||||
..()
|
||||
|
||||
@@ -188,7 +188,7 @@ AI MODULES
|
||||
|
||||
/obj/item/weapon/aiModule/zeroth/oneHuman/install(datum/ai_laws/law_datum, mob/user)
|
||||
if(!targetName)
|
||||
user << "No name detected on module, please enter one."
|
||||
to_chat(user, "No name detected on module, please enter one.")
|
||||
return 0
|
||||
..()
|
||||
|
||||
@@ -255,7 +255,7 @@ AI MODULES
|
||||
|
||||
/obj/item/weapon/aiModule/supplied/freeform/install(datum/ai_laws/law_datum, mob/user)
|
||||
if(laws[1] == "")
|
||||
user << "No law detected on module, please create one."
|
||||
to_chat(user, "No law detected on module, please create one.")
|
||||
return 0
|
||||
..()
|
||||
|
||||
@@ -274,15 +274,15 @@ AI MODULES
|
||||
if(lawpos == null)
|
||||
return
|
||||
if(lawpos <= 0)
|
||||
user << "<span class='warning'>Error: The law number of [lawpos] is invalid.</span>"
|
||||
to_chat(user, "<span class='warning'>Error: The law number of [lawpos] is invalid.</span>")
|
||||
lawpos = 1
|
||||
return
|
||||
user << "<span class='notice'>Law [lawpos] selected.</span>"
|
||||
to_chat(user, "<span class='notice'>Law [lawpos] selected.</span>")
|
||||
..()
|
||||
|
||||
/obj/item/weapon/aiModule/remove/install(datum/ai_laws/law_datum, mob/user)
|
||||
if(lawpos > (law_datum.get_law_amount(list(LAW_INHERENT = 1, LAW_SUPPLIED = 1))))
|
||||
user << "<span class='warning'>There is no law [lawpos] to delete!</span>"
|
||||
to_chat(user, "<span class='warning'>There is no law [lawpos] to delete!</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -482,7 +482,7 @@ AI MODULES
|
||||
/obj/item/weapon/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)
|
||||
law_datum.owner << "<span class='warning'>BZZZZT</span>"
|
||||
to_chat(law_datum.owner, "<span class='warning'>BZZZZT</span>")
|
||||
if(!overflow)
|
||||
law_datum.owner.add_ion_law(laws[1])
|
||||
else
|
||||
@@ -507,7 +507,7 @@ AI MODULES
|
||||
/obj/item/weapon/aiModule/toyAI/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
|
||||
//..()
|
||||
if(law_datum.owner)
|
||||
law_datum.owner << "<span class='warning'>BZZZZT</span>"
|
||||
to_chat(law_datum.owner, "<span class='warning'>BZZZZT</span>")
|
||||
if(!overflow)
|
||||
law_datum.owner.add_ion_law(laws[1])
|
||||
else
|
||||
@@ -521,7 +521,7 @@ AI MODULES
|
||||
|
||||
/obj/item/weapon/aiModule/toyAI/attack_self(mob/user)
|
||||
laws[1] = generate_ion_law()
|
||||
user << "<span class='notice'>You press the button on [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You press the button on [src].</span>")
|
||||
playsound(user, 'sound/machines/click.ogg', 20, 1)
|
||||
src.loc.visible_message("<span class='warning'>\icon[src] [laws[1]]</span>")
|
||||
|
||||
|
||||
@@ -39,35 +39,7 @@ RCD
|
||||
var/list/conf_access = null
|
||||
var/use_one_access = 0 //If the airlock should require ALL or only ONE of the listed accesses.
|
||||
|
||||
/* Construction costs */
|
||||
|
||||
var/wallcost = 16
|
||||
var/floorcost = 2
|
||||
var/grillecost = 4
|
||||
var/girderupgradecost = 8
|
||||
var/windowcost = 8
|
||||
var/reinforcedwindowcost = 12
|
||||
var/airlockcost = 16
|
||||
var/decongirdercost = 13
|
||||
var/deconwallcost = 26
|
||||
var/deconfloorcost = 33
|
||||
var/decongrillecost = 4
|
||||
var/deconwindowcost = 8
|
||||
var/deconairlockcost = 32
|
||||
|
||||
/* Build delays (deciseconds) */
|
||||
|
||||
var/walldelay = 20
|
||||
var/floordelay = null //space wind's a bitch
|
||||
var/grilledelay = 40
|
||||
var/windowdelay = 40
|
||||
var/airlockdelay = 50
|
||||
var/decongirderdelay = 20
|
||||
var/deconwalldelay = 40
|
||||
var/deconfloordelay = 50
|
||||
var/decongrilledelay = null //as rapid as wirecutters
|
||||
var/deconwindowdelay = 50
|
||||
var/deconairlockdelay = 50
|
||||
var/delay_mod = 1
|
||||
|
||||
var/no_ammo_message = "<span class='warning'>The \'Low Ammo\' light on \
|
||||
the RCD blinks yellow.</span>"
|
||||
@@ -90,8 +62,7 @@ RCD
|
||||
window_type = /obj/structure/window/fulltile
|
||||
window_type_name = "glass"
|
||||
|
||||
usr << "<span class='notice'>You change \the [src]'s window mode \
|
||||
to [window_type_name].</span>"
|
||||
to_chat(usr, "<span class='notice'>You change \the [src]'s window mode to [window_type_name].</span>")
|
||||
|
||||
/obj/item/weapon/rcd/verb/change_airlock_access()
|
||||
set name = "Change Airlock Access"
|
||||
@@ -179,7 +150,6 @@ RCD
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
airlockcost = initial(airlockcost)
|
||||
var airlockcat = input(usr, "Select whether the airlock is solid or glass.") in list("Solid", "Glass")
|
||||
switch(airlockcat)
|
||||
if("Solid")
|
||||
@@ -208,7 +178,6 @@ RCD
|
||||
airlock_type = /obj/machinery/door/airlock/external
|
||||
if("High Security")
|
||||
airlock_type = /obj/machinery/door/airlock/highsecurity
|
||||
airlockcost += 2 * sheetmultiplier //extra cost
|
||||
else
|
||||
airlock_type = /obj/machinery/door/airlock
|
||||
|
||||
@@ -240,7 +209,6 @@ RCD
|
||||
|
||||
/obj/item/weapon/rcd/New()
|
||||
..()
|
||||
|
||||
desc = "An RCD. It currently holds [matter]/[max_matter] matter-units."
|
||||
src.spark_system = new /datum/effect_system/spark_spread
|
||||
spark_system.set_up(5, 0, src)
|
||||
@@ -261,7 +229,7 @@ RCD
|
||||
if(istype(W, /obj/item/weapon/rcd_ammo))
|
||||
var/obj/item/weapon/rcd_ammo/R = W
|
||||
if((matter + R.ammoamt) > max_matter)
|
||||
user << "<span class='warning'>The RCD can't hold any more matter-units!</span>"
|
||||
to_chat(user, "<span class='warning'>The RCD can't hold any more matter-units!</span>")
|
||||
return
|
||||
qdel(W)
|
||||
matter += R.ammoamt
|
||||
@@ -272,7 +240,7 @@ RCD
|
||||
else if(istype(W, /obj/item/stack/sheet/plasteel))
|
||||
loaded = loadwithsheets(W, plasteelmultiplier*sheetmultiplier, user) //Plasteel is worth 3 times more than glass or metal
|
||||
if(loaded)
|
||||
user << "<span class='notice'>The RCD now holds [matter]/[max_matter] matter-units.</span>"
|
||||
to_chat(user, "<span class='notice'>The RCD now holds [matter]/[max_matter] matter-units.</span>")
|
||||
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
|
||||
else
|
||||
return ..()
|
||||
@@ -284,9 +252,9 @@ RCD
|
||||
S.use(amount_to_use)
|
||||
matter += value*amount_to_use
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
user << "<span class='notice'>You insert [amount_to_use] [S.name] sheets into the RCD. </span>"
|
||||
to_chat(user, "<span class='notice'>You insert [amount_to_use] [S.name] sheets into the RCD. </span>")
|
||||
return 1
|
||||
user << "<span class='warning'>You can't insert any more [S.name] sheets into the RCD!"
|
||||
to_chat(user, "<span class='warning'>You can't insert any more [S.name] sheets into the RCD!")
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/rcd/attack_self(mob/user)
|
||||
@@ -295,16 +263,16 @@ RCD
|
||||
switch(mode)
|
||||
if(1)
|
||||
mode = 2
|
||||
user << "<span class='notice'>You change RCD's mode to 'Airlock'.</span>"
|
||||
to_chat(user, "<span class='notice'>You change RCD's mode to 'Airlock'.</span>")
|
||||
if(2)
|
||||
mode = 3
|
||||
user << "<span class='notice'>You change RCD's mode to 'Deconstruct'.</span>"
|
||||
to_chat(user, "<span class='notice'>You change RCD's mode to 'Deconstruct'.</span>")
|
||||
if(3)
|
||||
mode = 4
|
||||
user << "<span class='notice'>You change RCD's mode to 'Grilles & Windows'.</span>"
|
||||
to_chat(user, "<span class='notice'>You change RCD's mode to 'Grilles & Windows'.</span>")
|
||||
if(4)
|
||||
mode = 1
|
||||
user << "<span class='notice'>You change RCD's mode to 'Floor & Walls'.</span>"
|
||||
to_chat(user, "<span class='notice'>You change RCD's mode to 'Floor & Walls'.</span>")
|
||||
|
||||
if(prob(20))
|
||||
src.spark_system.start()
|
||||
@@ -314,217 +282,23 @@ RCD
|
||||
|
||||
|
||||
/obj/item/weapon/rcd/afterattack(atom/A, mob/user, proximity)
|
||||
if(!proximity) return 0
|
||||
if(istype(A,/turf/open/space/transit))
|
||||
return 0
|
||||
if(!(isturf(A) || istype(A, /obj/machinery/door/airlock) || istype(A, /obj/structure/grille) || istype(A, /obj/structure/window) || istype(A, /obj/structure/girder)))
|
||||
return 0
|
||||
|
||||
switch(mode)
|
||||
if(1)
|
||||
if(isspaceturf(A))
|
||||
var/turf/open/space/S = A
|
||||
if(useResource(floorcost, user))
|
||||
user << "<span class='notice'>You start building a floor...</span>"
|
||||
activate()
|
||||
S.ChangeTurf(/turf/open/floor/plating)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
if(isfloorturf(A))
|
||||
var/turf/open/floor/F = A
|
||||
if(checkResource(wallcost, user))
|
||||
user << "<span class='notice'>You start building a wall...</span>"
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, walldelay, target = A))
|
||||
if(!istype(F)) return 0
|
||||
if(!useResource(wallcost, user)) return 0
|
||||
activate()
|
||||
F.ChangeTurf(/turf/closed/wall)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
if(istype(A, /obj/structure/girder))
|
||||
var/turf/open/floor/F = get_turf(A)
|
||||
if(checkResource(girderupgradecost, user))
|
||||
user << "<span class='notice'>You start finishing the \
|
||||
wall...</span>"
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, walldelay, target = A))
|
||||
if(!istype(A)) return 0
|
||||
if(!useResource(girderupgradecost, user)) return 0
|
||||
activate()
|
||||
qdel(A)
|
||||
F.ChangeTurf(/turf/closed/wall)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
if(2)
|
||||
if(isfloorturf(A))
|
||||
if(checkResource(airlockcost, user))
|
||||
var/door_check = 1
|
||||
for(var/obj/machinery/door/D in A)
|
||||
if(!D.sub_door)
|
||||
door_check = 0
|
||||
break
|
||||
|
||||
if(door_check)
|
||||
user << "<span class='notice'>You start building an airlock...</span>"
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, airlockdelay, target = A))
|
||||
if(!useResource(airlockcost, user)) return 0
|
||||
activate()
|
||||
var/obj/machinery/door/airlock/T = new airlock_type( A )
|
||||
|
||||
T.electronics = new/obj/item/weapon/electronics/airlock( src.loc )
|
||||
|
||||
if(conf_access)
|
||||
T.electronics.accesses = conf_access.Copy()
|
||||
T.electronics.one_access = use_one_access
|
||||
|
||||
if(T.electronics.one_access)
|
||||
T.req_one_access = T.electronics.accesses
|
||||
else
|
||||
T.req_access = T.electronics.accesses
|
||||
|
||||
if(!T.checkForMultipleDoors())
|
||||
qdel(T)
|
||||
useResource(-airlockcost, user)
|
||||
return 0
|
||||
T.autoclose = 1
|
||||
return 1
|
||||
return 0
|
||||
else
|
||||
user << "<span class='warning'>There is another door here!</span>"
|
||||
return 0
|
||||
return 0
|
||||
|
||||
if(3)
|
||||
if(iswallturf(A))
|
||||
var/turf/closed/wall/W = A
|
||||
if(istype(W, /turf/closed/wall/r_wall) && !canRturf)
|
||||
return 0
|
||||
if(checkResource(deconwallcost, user))
|
||||
user << "<span class='notice'>You start deconstructing [W]...</span>"
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, deconwalldelay, target = A))
|
||||
if(!useResource(deconwallcost, user)) return 0
|
||||
activate()
|
||||
W.ChangeTurf(/turf/open/floor/plating)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
if(isfloorturf(A))
|
||||
var/turf/open/floor/F = A
|
||||
if(istype(F, /turf/open/floor/engine) && !canRturf)
|
||||
return 0
|
||||
if(istype(F, F.baseturf))
|
||||
user << "<span class='notice'>You can't dig any deeper!</span>"
|
||||
return 0
|
||||
else if(checkResource(deconfloorcost, user))
|
||||
user << "<span class='notice'>You start deconstructing floor...</span>"
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, deconfloordelay, target = A))
|
||||
if(!useResource(deconfloorcost, user)) return 0
|
||||
activate()
|
||||
F.ChangeTurf(F.baseturf)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
if(istype(A, /obj/machinery/door/airlock))
|
||||
if(checkResource(deconairlockcost, user))
|
||||
user << "<span class='notice'>You start deconstructing airlock...</span>"
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, deconairlockdelay, target = A))
|
||||
if(!useResource(deconairlockcost, user)) return 0
|
||||
activate()
|
||||
qdel(A)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
if(istype(A, /obj/structure/window))
|
||||
if(checkResource(deconwindowcost, user))
|
||||
user << "<span class='notice'>You start deconstructing the window...</span>"
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, deconwindowdelay, target = A))
|
||||
if(!useResource(deconwindowcost, user)) return 0
|
||||
activate()
|
||||
qdel(A)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
if(istype(A, /obj/structure/grille))
|
||||
var/obj/structure/grille/G = A
|
||||
if(!G.shock(user, 90)) //if it's shocked, try to shock them
|
||||
if(useResource(decongrillecost, user))
|
||||
user << "<span class='notice'>You start deconstructing the grille...</span>"
|
||||
activate()
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
qdel(A)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
if(istype(A, /obj/structure/girder))
|
||||
if(useResource(decongirdercost, user))
|
||||
user << "<span class='notice'>You start deconstructing \
|
||||
[A]...</span>"
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, decongirderdelay, target = A))
|
||||
if(!useResource(decongirdercost, user)) return 0
|
||||
activate()
|
||||
qdel(A)
|
||||
return 1
|
||||
|
||||
if (4)
|
||||
if(isfloorturf(A))
|
||||
if(checkResource(grillecost, user))
|
||||
if(locate(/obj/structure/grille) in A)
|
||||
user << "<span class='warning'>There is already a grille there!</span>"
|
||||
return 0
|
||||
user << "<span class='notice'>You start building a grille...</span>"
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, grilledelay, target = A))
|
||||
if(locate(/obj/structure/grille) in A)
|
||||
return 0
|
||||
if(!useResource(grillecost, user)) return 0
|
||||
activate()
|
||||
var/obj/structure/grille/G = new/obj/structure/grille(A)
|
||||
G.anchored = 1
|
||||
return 1
|
||||
return 0
|
||||
return 0
|
||||
if(istype(A, /obj/structure/grille))
|
||||
var wname = "window?"
|
||||
var cost = 0
|
||||
if (window_type == /obj/structure/window/fulltile)
|
||||
cost = windowcost
|
||||
wname = "window"
|
||||
else if (window_type == /obj/structure/window/reinforced/fulltile)
|
||||
cost = reinforcedwindowcost
|
||||
wname = "reinforced window"
|
||||
|
||||
if(checkResource(cost, user))
|
||||
user << "<span class='notice'>You start building a \
|
||||
[wname]...</span>"
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, windowdelay, target = A))
|
||||
if(locate(/obj/structure/window) in A.loc) return 0
|
||||
if(!useResource(cost, user)) return 0
|
||||
activate()
|
||||
var /obj/structure/window/WD = new window_type(A.loc)
|
||||
WD.anchored = 1
|
||||
return 1
|
||||
return 0
|
||||
return 0
|
||||
|
||||
else
|
||||
user << "ERROR: RCD in MODE: [mode] attempted use by [user]. Send this text #coderbus or an admin."
|
||||
return 0
|
||||
if(!proximity)
|
||||
return FALSE
|
||||
var/list/rcd_results = A.rcd_vals(user, src)
|
||||
if(!rcd_results)
|
||||
return FALSE
|
||||
if(do_after(user, rcd_results["delay"] * delay_mod, target = A))
|
||||
if(checkResource(rcd_results["cost"], user))
|
||||
if(A.rcd_act(user, src, rcd_results["mode"]))
|
||||
useResource(rcd_results["cost"], user)
|
||||
activate()
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
return TRUE
|
||||
|
||||
/obj/item/weapon/rcd/proc/useResource(amount, mob/user)
|
||||
if(matter < amount)
|
||||
if(user)
|
||||
user << no_ammo_message
|
||||
to_chat(user, no_ammo_message)
|
||||
return 0
|
||||
matter -= amount
|
||||
desc = "An RCD. It currently holds [matter]/[max_matter] matter-units."
|
||||
@@ -533,7 +307,7 @@ RCD
|
||||
/obj/item/weapon/rcd/proc/checkResource(amount, mob/user)
|
||||
. = matter >= amount
|
||||
if(!. && user)
|
||||
user << no_ammo_message
|
||||
to_chat(user, no_ammo_message)
|
||||
return .
|
||||
|
||||
/obj/item/weapon/rcd/proc/detonate_pulse()
|
||||
@@ -560,11 +334,11 @@ RCD
|
||||
var/mob/living/silicon/robot/borgy = user
|
||||
if(!borgy.cell)
|
||||
if(user)
|
||||
user << no_ammo_message
|
||||
to_chat(user, no_ammo_message)
|
||||
return 0
|
||||
. = borgy.cell.use(amount * 72) //borgs get 1.3x the use of their RCDs
|
||||
if(!. && user)
|
||||
user << no_ammo_message
|
||||
to_chat(user, no_ammo_message)
|
||||
return .
|
||||
|
||||
/obj/item/weapon/rcd/borg/checkResource(amount, mob/user)
|
||||
@@ -573,11 +347,11 @@ RCD
|
||||
var/mob/living/silicon/robot/borgy = user
|
||||
if(!borgy.cell)
|
||||
if(user)
|
||||
user << no_ammo_message
|
||||
to_chat(user, no_ammo_message)
|
||||
return 0
|
||||
. = borgy.cell.charge >= (amount * 72)
|
||||
if(!. && user)
|
||||
user << no_ammo_message
|
||||
to_chat(user, no_ammo_message)
|
||||
return .
|
||||
|
||||
/obj/item/weapon/rcd/loaded
|
||||
@@ -587,7 +361,6 @@ RCD
|
||||
name = "industrial RCD"
|
||||
max_matter = 500
|
||||
matter = 500
|
||||
canRturf = 1
|
||||
|
||||
/obj/item/weapon/rcd_ammo
|
||||
name = "compressed matter cartridge"
|
||||
@@ -603,3 +376,9 @@ RCD
|
||||
origin_tech = "materials=4"
|
||||
materials = list(MAT_METAL=48000, MAT_GLASS=32000)
|
||||
ammoamt = 160
|
||||
|
||||
|
||||
/obj/item/weapon/rcd/admin
|
||||
name = "admin RCD"
|
||||
max_matter = INFINITY
|
||||
matter = INFINITY
|
||||
|
||||
@@ -547,14 +547,14 @@ var/global/list/RPD_recipes=list(
|
||||
return
|
||||
|
||||
if(EATING_MODE) //Eating pipes
|
||||
user << "<span class='notice'>You start destroying a pipe...</span>"
|
||||
to_chat(user, "<span class='notice'>You start destroying a pipe...</span>")
|
||||
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, 2, target = A))
|
||||
activate()
|
||||
qdel(A)
|
||||
|
||||
if(ATMOS_MODE) //Making pipes
|
||||
user << "<span class='notice'>You start building a pipe...</span>"
|
||||
to_chat(user, "<span class='notice'>You start building a pipe...</span>")
|
||||
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, 2, target = A))
|
||||
activate()
|
||||
@@ -564,7 +564,7 @@ var/global/list/RPD_recipes=list(
|
||||
P.add_fingerprint(usr)
|
||||
|
||||
if(METER_MODE) //Making pipe meters
|
||||
user << "<span class='notice'>You start building a meter...</span>"
|
||||
to_chat(user, "<span class='notice'>You start building a meter...</span>")
|
||||
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, 2, target = A))
|
||||
activate()
|
||||
@@ -572,15 +572,15 @@ var/global/list/RPD_recipes=list(
|
||||
|
||||
if(DISPOSALS_MODE) //Making disposals pipes
|
||||
if(is_anchored_dense_turf(A))
|
||||
user << "<span class='warning'>The [src]'s error light flickers; there's something in the way!</span>"
|
||||
to_chat(user, "<span class='warning'>The [src]'s error light flickers; there's something in the way!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start building a disposals pipe...</span>"
|
||||
to_chat(user, "<span class='notice'>You start building a disposals pipe...</span>")
|
||||
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, 4, target = A))
|
||||
var/obj/structure/disposalconstruct/C = new (A, queued_p_type ,queued_p_dir)
|
||||
|
||||
if(!C.can_place())
|
||||
user << "<span class='warning'>There's not enough room to build that here!</span>"
|
||||
to_chat(user, "<span class='warning'>There's not enough room to build that here!</span>")
|
||||
qdel(C)
|
||||
return
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ RSF
|
||||
|
||||
/obj/item/weapon/rsf/examine(mob/user)
|
||||
..()
|
||||
user << "<span class='notice'>It currently holds [matter]/30 fabrication-units.</span>"
|
||||
to_chat(user, "<span class='notice'>It currently holds [matter]/30 fabrication-units.</span>")
|
||||
|
||||
/obj/item/weapon/rsf/cyborg
|
||||
matter = 30
|
||||
@@ -27,12 +27,12 @@ RSF
|
||||
/obj/item/weapon/rsf/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/rcd_ammo))
|
||||
if((matter + 10) > 30)
|
||||
user << "The RSF can't hold any more matter."
|
||||
to_chat(user, "The RSF can't hold any more matter.")
|
||||
return
|
||||
qdel(W)
|
||||
matter += 10
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
|
||||
user << "The RSF now holds [matter]/30 fabrication-units."
|
||||
to_chat(user, "The RSF now holds [matter]/30 fabrication-units.")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -41,22 +41,22 @@ RSF
|
||||
switch(mode)
|
||||
if(1)
|
||||
mode = 2
|
||||
user << "Changed dispensing mode to 'Drinking Glass'"
|
||||
to_chat(user, "Changed dispensing mode to 'Drinking Glass'")
|
||||
if(2)
|
||||
mode = 3
|
||||
user << "Changed dispensing mode to 'Paper'"
|
||||
to_chat(user, "Changed dispensing mode to 'Paper'")
|
||||
if(3)
|
||||
mode = 4
|
||||
user << "Changed dispensing mode to 'Pen'"
|
||||
to_chat(user, "Changed dispensing mode to 'Pen'")
|
||||
if(4)
|
||||
mode = 5
|
||||
user << "Changed dispensing mode to 'Dice Pack'"
|
||||
to_chat(user, "Changed dispensing mode to 'Dice Pack'")
|
||||
if(5)
|
||||
mode = 6
|
||||
user << "Changed dispensing mode to 'Cigarette'"
|
||||
to_chat(user, "Changed dispensing mode to 'Cigarette'")
|
||||
if(6)
|
||||
mode = 1
|
||||
user << "Changed dispensing mode to 'Dosh'"
|
||||
to_chat(user, "Changed dispensing mode to 'Dosh'")
|
||||
// Change mode
|
||||
|
||||
/obj/item/weapon/rsf/afterattack(atom/A, mob/user, proximity)
|
||||
@@ -66,39 +66,39 @@ RSF
|
||||
return
|
||||
|
||||
if(matter < 1)
|
||||
user << "<span class='warning'>\The [src] doesn't have enough matter left.</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src] doesn't have enough matter left.</span>")
|
||||
return
|
||||
if(iscyborg(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(!R.cell || R.cell.charge < 200)
|
||||
user << "<span class='warning'>You do not have enough power to use [src].</span>"
|
||||
to_chat(user, "<span class='warning'>You do not have enough power to use [src].</span>")
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(A)
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
|
||||
switch(mode)
|
||||
if(1)
|
||||
user << "Dispensing Dosh..."
|
||||
to_chat(user, "Dispensing Dosh...")
|
||||
new /obj/item/stack/spacecash/c10(T)
|
||||
use_matter(200, user)
|
||||
if(2)
|
||||
user << "Dispensing Drinking Glass..."
|
||||
to_chat(user, "Dispensing Drinking Glass...")
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(T)
|
||||
use_matter(20, user)
|
||||
if(3)
|
||||
user << "Dispensing Paper Sheet..."
|
||||
to_chat(user, "Dispensing Paper Sheet...")
|
||||
new /obj/item/weapon/paper(T)
|
||||
use_matter(10, user)
|
||||
if(4)
|
||||
user << "Dispensing Pen..."
|
||||
to_chat(user, "Dispensing Pen...")
|
||||
new /obj/item/weapon/pen(T)
|
||||
use_matter(50, user)
|
||||
if(5)
|
||||
user << "Dispensing Dice Pack..."
|
||||
to_chat(user, "Dispensing Dice Pack...")
|
||||
new /obj/item/weapon/storage/pill_bottle/dice(T)
|
||||
use_matter(200, user)
|
||||
if(6)
|
||||
user << "Dispensing Cigarette..."
|
||||
to_chat(user, "Dispensing Cigarette...")
|
||||
new /obj/item/clothing/mask/cigarette(T)
|
||||
use_matter(10, user)
|
||||
|
||||
@@ -108,7 +108,7 @@ RSF
|
||||
R.cell.charge -= charge
|
||||
else
|
||||
matter--
|
||||
user << "The RSF now holds [matter]/30 fabrication-units."
|
||||
to_chat(user, "The RSF now holds [matter]/30 fabrication-units.")
|
||||
|
||||
/obj/item/weapon/cookiesynth
|
||||
name = "Cookie Synthesizer"
|
||||
@@ -124,7 +124,7 @@ RSF
|
||||
|
||||
/obj/item/weapon/cookiesynth/examine(mob/user)
|
||||
..()
|
||||
user << "<span class='notice'>It currently holds [matter]/10 cookie-units.</span>"
|
||||
to_chat(user, "<span class='notice'>It currently holds [matter]/10 cookie-units.</span>")
|
||||
|
||||
/obj/item/weapon/cookiesynth/attackby()
|
||||
return
|
||||
@@ -132,9 +132,9 @@ RSF
|
||||
/obj/item/weapon/cookiesynth/emag_act(mob/user)
|
||||
emagged = !emagged
|
||||
if(emagged)
|
||||
user << "<span class='warning'>You short out the [src]'s reagent safety checker!</span>"
|
||||
to_chat(user, "<span class='warning'>You short out the [src]'s reagent safety checker!</span>")
|
||||
else
|
||||
user << "<span class='warning'>You reset the [src]'s reagent safety checker!</span>"
|
||||
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)
|
||||
@@ -143,13 +143,13 @@ RSF
|
||||
P = user
|
||||
if(emagged&&!toxin)
|
||||
toxin = 1
|
||||
user << "Cookie Synthesizer Hacked"
|
||||
to_chat(user, "Cookie Synthesizer Hacked")
|
||||
else if(P.emagged&&!toxin)
|
||||
toxin = 1
|
||||
user << "Cookie Synthesizer Hacked"
|
||||
to_chat(user, "Cookie Synthesizer Hacked")
|
||||
else
|
||||
toxin = 0
|
||||
user << "Cookie Synthesizer Reset"
|
||||
to_chat(user, "Cookie Synthesizer Reset")
|
||||
|
||||
/obj/item/weapon/cookiesynth/process()
|
||||
if(matter < 10)
|
||||
@@ -163,16 +163,16 @@ RSF
|
||||
if (!(istype(A, /obj/structure/table) || isfloorturf(A)))
|
||||
return
|
||||
if(matter < 1)
|
||||
user << "<span class='warning'>The [src] doesn't have enough matter left. Wait for it to recharge!</span>"
|
||||
to_chat(user, "<span class='warning'>The [src] doesn't have enough matter left. Wait for it to recharge!</span>")
|
||||
return
|
||||
if(iscyborg(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(!R.cell || R.cell.charge < 400)
|
||||
user << "<span class='warning'>You do not have enough power to use [src].</span>"
|
||||
to_chat(user, "<span class='warning'>You do not have enough power to use [src].</span>")
|
||||
return
|
||||
var/turf/T = get_turf(A)
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
|
||||
user << "Fabricating Cookie.."
|
||||
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)
|
||||
if(toxin)
|
||||
S.reagents.add_reagent("chloralhydrate2", 10)
|
||||
|
||||
@@ -34,10 +34,10 @@
|
||||
//because you're expecting user input.
|
||||
/obj/item/weapon/airlock_painter/proc/can_use(mob/user)
|
||||
if(!ink)
|
||||
user << "<span class='notice'>There is no toner cartridge installed in [src]!</span>"
|
||||
to_chat(user, "<span class='notice'>There is no toner cartridge installed in [src]!</span>")
|
||||
return 0
|
||||
else if(ink.charges < 1)
|
||||
user << "<span class='notice'>[src] is out of ink!</span>"
|
||||
to_chat(user, "<span class='notice'>[src] is out of ink!</span>")
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
@@ -92,7 +92,7 @@
|
||||
/obj/item/weapon/airlock_painter/examine(mob/user)
|
||||
..()
|
||||
if(!ink)
|
||||
user << "<span class='notice'>It doesn't have a toner cartridge installed.</span>"
|
||||
to_chat(user, "<span class='notice'>It doesn't have a toner cartridge installed.</span>")
|
||||
return
|
||||
var/ink_level = "high"
|
||||
if(ink.charges < 1)
|
||||
@@ -101,17 +101,17 @@
|
||||
ink_level = "low"
|
||||
else if((ink.charges/ink.max_charges) > 1) //Over 100% (admin var edit)
|
||||
ink_level = "dangerously high"
|
||||
user << "<span class='notice'>Its ink levels look [ink_level].</span>"
|
||||
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)
|
||||
if(istype(W, /obj/item/device/toner))
|
||||
if(ink)
|
||||
user << "<span class='notice'>[src] already contains \a [ink].</span>"
|
||||
to_chat(user, "<span class='notice'>[src] already contains \a [ink].</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(W, src))
|
||||
return
|
||||
user << "<span class='notice'>You install [W] into [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You install [W] into [src].</span>")
|
||||
ink = W
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
else
|
||||
@@ -122,5 +122,5 @@
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
ink.loc = user.loc
|
||||
user.put_in_hands(ink)
|
||||
user << "<span class='notice'>You remove [ink] from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You remove [ink] from [src].</span>")
|
||||
ink = null
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
/obj/item/weapon/card/id/examine(mob/user)
|
||||
..()
|
||||
if(mining_points)
|
||||
user << "There's [mining_points] mining equipment redemption point\s loaded onto this card."
|
||||
to_chat(user, "There's [mining_points] mining equipment redemption point\s loaded onto this card.")
|
||||
|
||||
/obj/item/weapon/card/id/GetAccess()
|
||||
return access
|
||||
@@ -150,14 +150,14 @@ update_label("John Doe", "Clowny")
|
||||
src.access |= I.access
|
||||
if(isliving(user) && user.mind)
|
||||
if(user.mind.special_role)
|
||||
usr << "<span class='notice'>The card's microscanners activate as you pass it over the ID, copying its access.</span>"
|
||||
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)
|
||||
if(isliving(user) && user.mind)
|
||||
if(user.mind.special_role || anyone)
|
||||
if(alert(user, "Action", "Agent ID", "Show", "Forge") == "Forge")
|
||||
var t = copytext(sanitize(input(user, "What name would you like to put on this card?", "Agent card name", registered_name ? registered_name : (ishuman(user) ? user.real_name : user.name))as text | null),1,26)
|
||||
if(!t || t == "Unknown" || t == "floor" || t == "wall" || t == "r-wall") //Same as mob/new_player/prefrences.dm
|
||||
if(!t || t == "Unknown" || t == "floor" || t == "wall" || t == "r-wall") //Same as mob/dead/new_player/prefrences.dm
|
||||
if (t)
|
||||
alert("Invalid name.")
|
||||
return
|
||||
@@ -169,7 +169,7 @@ update_label("John Doe", "Clowny")
|
||||
return
|
||||
assignment = u
|
||||
update_label()
|
||||
user << "<span class='notice'>You successfully forge the ID card.</span>"
|
||||
to_chat(user, "<span class='notice'>You successfully forge the ID card.</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -249,7 +249,7 @@ update_label("John Doe", "Clowny")
|
||||
var/points = 0
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/attack_self(mob/user)
|
||||
usr << "<span class='notice'>You have accumulated [points] out of the [goal] points you need for freedom.</span>"
|
||||
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
|
||||
name = "Prisoner #13-001"
|
||||
|
||||
@@ -82,14 +82,14 @@
|
||||
var/mob/living/user = src.loc
|
||||
if(F.gun)
|
||||
if(isliving(user) && F.captured)
|
||||
user << "<span class='alert'><b>FAIL: <i>[F.captured]</i> already has an existing connection.</b></span>"
|
||||
to_chat(user, "<span class='alert'><b>FAIL: <i>[F.captured]</i> already has an existing connection.</b></span>")
|
||||
src.field_disconnect(F)
|
||||
else
|
||||
startpos = get_turf(src)
|
||||
field = F
|
||||
F.gun = src
|
||||
if(isliving(user) && F.captured)
|
||||
user << "<span class='notice'>Connection established with target: <b>[F.captured]</b></span>"
|
||||
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)
|
||||
@@ -98,7 +98,7 @@
|
||||
if(F.gun == src)
|
||||
F.gun = null
|
||||
if(isliving(user) && F.captured)
|
||||
user << "<span class='alert'>Disconnected from target: <b>[F.captured]</b></span>"
|
||||
to_chat(user, "<span class='alert'>Disconnected from target: <b>[F.captured]</b></span>")
|
||||
field = null
|
||||
startpos = null
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
AM.loc = loc
|
||||
qdel(src)
|
||||
else if(tickstokill <= 0)
|
||||
captured << "<span class='boldnotice'>As the last essence of your being is erased from time, you begin to re-experience your most enjoyable memory. You feel happy...</span>"
|
||||
to_chat(captured, "<span class='boldnotice'>As the last essence of your being is erased from time, you begin to re-experience your most enjoyable memory. You feel happy...</span>")
|
||||
var/mob/dead/observer/ghost = captured.ghostize(1)
|
||||
if(captured.mind)
|
||||
if(ghost)
|
||||
|
||||
@@ -77,7 +77,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M)
|
||||
if(lit && cig && user.a_intent == INTENT_HELP)
|
||||
if(cig.lit)
|
||||
user << "<span class='notice'>The [cig.name] is already lit.</span>"
|
||||
to_chat(user, "<span class='notice'>The [cig.name] is already lit.</span>")
|
||||
if(M == user)
|
||||
cig.attackby(src, user)
|
||||
else
|
||||
@@ -139,14 +139,13 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
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
|
||||
var/transfered = glass.reagents.trans_to(src, chem_volume)
|
||||
if(transfered) //if reagents were transfered, show the message
|
||||
user << "<span class='notice'>You dip \the [src] into \the [glass].</span>"
|
||||
if(glass.reagents.trans_to(src, chem_volume)) //if reagents were transfered, show the message
|
||||
to_chat(user, "<span class='notice'>You dip \the [src] into \the [glass].</span>")
|
||||
else //if not, either the beaker was empty, or the cigarette was full
|
||||
if(!glass.reagents.total_volume)
|
||||
user << "<span class='notice'>[glass] is empty.</span>"
|
||||
to_chat(user, "<span class='notice'>[glass] is empty.</span>")
|
||||
else
|
||||
user << "<span class='notice'>[src] is full.</span>"
|
||||
to_chat(user, "<span class='notice'>[src] is full.</span>")
|
||||
|
||||
|
||||
/obj/item/clothing/mask/cigarette/proc/light(flavor_text = null)
|
||||
@@ -196,7 +195,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
if(prob(15)) // so it's not an instarape in case of acid
|
||||
var/fraction = min(REAGENTS_METABOLISM/reagents.total_volume, 1)
|
||||
reagents.reaction(C, INGEST, fraction)
|
||||
reagents.trans_to(C, REAGENTS_METABOLISM)
|
||||
if(!reagents.trans_to(C, REAGENTS_METABOLISM))
|
||||
reagents.remove_any(REAGENTS_METABOLISM)
|
||||
return
|
||||
reagents.remove_any(REAGENTS_METABOLISM)
|
||||
|
||||
@@ -210,7 +210,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
if(smoketime < 1)
|
||||
new type_butt(location)
|
||||
if(ismob(loc))
|
||||
M << "<span class='notice'>Your [name] goes out.</span>"
|
||||
to_chat(M, "<span class='notice'>Your [name] goes out.</span>")
|
||||
qdel(src)
|
||||
return
|
||||
open_flame()
|
||||
@@ -231,7 +231,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M)
|
||||
if(lit && cig && user.a_intent == INTENT_HELP)
|
||||
if(cig.lit)
|
||||
user << "<span class='notice'>The [cig.name] is already lit.</span>"
|
||||
to_chat(user, "<span class='notice'>The [cig.name] is already lit.</span>")
|
||||
if(M == user)
|
||||
cig.attackby(src, user)
|
||||
else
|
||||
@@ -355,7 +355,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
new /obj/effect/decal/cleanable/ash(location)
|
||||
if(ismob(loc))
|
||||
var/mob/living/M = loc
|
||||
M << "<span class='notice'>Your [name] goes out.</span>"
|
||||
to_chat(M, "<span class='notice'>Your [name] goes out.</span>")
|
||||
lit = 0
|
||||
icon_state = icon_off
|
||||
item_state = icon_off
|
||||
@@ -374,7 +374,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O
|
||||
if(!packeditem)
|
||||
if(G.dry == 1)
|
||||
user << "<span class='notice'>You stuff [O] into [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You stuff [O] into [src].</span>")
|
||||
smoketime = 400
|
||||
packeditem = 1
|
||||
name = "[O.name]-packed [initial(name)]"
|
||||
@@ -382,16 +382,16 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
O.reagents.trans_to(src, O.reagents.total_volume)
|
||||
qdel(O)
|
||||
else
|
||||
user << "<span class='warning'>It has to be dried first!</span>"
|
||||
to_chat(user, "<span class='warning'>It has to be dried first!</span>")
|
||||
else
|
||||
user << "<span class='warning'>It is already packed!</span>"
|
||||
to_chat(user, "<span class='warning'>It is already packed!</span>")
|
||||
else
|
||||
var/lighting_text = O.ignition_effect(src,user)
|
||||
if(lighting_text)
|
||||
if(smoketime > 0)
|
||||
light(lighting_text)
|
||||
else
|
||||
user << "<span class='warning'>There is nothing to smoke!</span>"
|
||||
to_chat(user, "<span class='warning'>There is nothing to smoke!</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -405,7 +405,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return
|
||||
if(!lit && smoketime > 0)
|
||||
user << "<span class='notice'>You empty [src] onto [location].</span>"
|
||||
to_chat(user, "<span class='notice'>You empty [src] onto [location].</span>")
|
||||
new /obj/effect/decal/cleanable/ash(location)
|
||||
packeditem = 0
|
||||
smoketime = 0
|
||||
@@ -489,7 +489,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
user.apply_damage(5, BURN, hitzone)
|
||||
user.visible_message("<span class='warning'>After a few attempts, [user] manages to light [src] - however, [user.p_they()] burn their finger in the process.</span>", "<span class='warning'>You burn yourself while lighting the lighter!</span>")
|
||||
|
||||
user.AddLuminosity(1)
|
||||
set_light(1)
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
lit = 0
|
||||
@@ -501,7 +501,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what [user.p_theyre()] doing. Wow.", "<span class='notice'>You quietly shut off [src] without even looking at what you're doing. Wow.</span>")
|
||||
else
|
||||
user.visible_message("[user] quietly shuts off [src].", "<span class='notice'>You quietly shut off [src].")
|
||||
user.AddLuminosity(-1)
|
||||
set_light(0)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
else
|
||||
. = ..()
|
||||
@@ -513,7 +513,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M)
|
||||
if(lit && cig && user.a_intent == INTENT_HELP)
|
||||
if(cig.lit)
|
||||
user << "<span class='notice'>The [cig.name] is already lit.</span>"
|
||||
to_chat(user, "<span class='notice'>The [cig.name] is already lit.</span>")
|
||||
if(M == user)
|
||||
cig.attackby(src, user)
|
||||
else
|
||||
@@ -527,19 +527,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
/obj/item/weapon/lighter/process()
|
||||
open_flame()
|
||||
|
||||
/obj/item/weapon/lighter/pickup(mob/user)
|
||||
..()
|
||||
if(lit)
|
||||
SetLuminosity(0)
|
||||
user.AddLuminosity(1)
|
||||
|
||||
/obj/item/weapon/lighter/dropped(mob/user)
|
||||
..()
|
||||
if(lit)
|
||||
if(user)
|
||||
user.AddLuminosity(-1)
|
||||
SetLuminosity(1)
|
||||
|
||||
/obj/item/weapon/lighter/is_hot()
|
||||
return lit * heat
|
||||
|
||||
@@ -565,10 +552,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
qdel(target)
|
||||
qdel(src)
|
||||
user.put_in_active_hand(R)
|
||||
user << "<span class='notice'>You roll the [target.name] into a rolling paper.</span>"
|
||||
to_chat(user, "<span class='notice'>You roll the [target.name] into a rolling paper.</span>")
|
||||
R.desc = "Dried [target.name] rolled up in a thin piece of paper."
|
||||
else
|
||||
user << "<span class='warning'>You need to dry this first!</span>"
|
||||
to_chat(user, "<span class='warning'>You need to dry this first!</span>")
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -608,23 +595,23 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
if(reagents.total_volume < chem_volume)
|
||||
if(O.reagents.total_volume > 0)
|
||||
O.reagents.trans_to(src,25)
|
||||
user << "<span class='notice'>You add the contents of [O] to the [src]</span>"
|
||||
to_chat(user, "<span class='notice'>You add the contents of [O] to the [src]</span>")
|
||||
else
|
||||
user << "<span class='warning'>The [O] is empty!</span>"
|
||||
to_chat(user, "<span class='warning'>The [O] is empty!</span>")
|
||||
else
|
||||
user << "<span class='warning'>[src] can't hold anymore reagents!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] can't hold anymore reagents!</span>")
|
||||
|
||||
if(istype(O, /obj/item/weapon/screwdriver))
|
||||
if(!screw)
|
||||
screw = 1
|
||||
user << "<span class='notice'>You open the cap on the [src]</span>"
|
||||
to_chat(user, "<span class='notice'>You open the cap on the [src]</span>")
|
||||
if(super)
|
||||
add_overlay(image(icon, "vapeopen_med"))
|
||||
else
|
||||
add_overlay(image(icon, "vapeopen_low"))
|
||||
else
|
||||
screw = 0
|
||||
user << "<span class='notice'>You close the cap on the [src]</span>"
|
||||
to_chat(user, "<span class='notice'>You close the cap on the [src]</span>")
|
||||
cut_overlays()
|
||||
|
||||
if(istype(O, /obj/item/device/multitool))
|
||||
@@ -632,16 +619,16 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
if(!super)
|
||||
cut_overlays()
|
||||
super = 1
|
||||
user << "<span class='notice'>You increase the voltage in the [src]</span>"
|
||||
to_chat(user, "<span class='notice'>You increase the voltage in the [src]</span>")
|
||||
add_overlay(image(icon, "vapeopen_med"))
|
||||
else
|
||||
cut_overlays()
|
||||
super = 0
|
||||
user << "<span class='notice'>You decrease the voltage in the [src]</span>"
|
||||
to_chat(user, "<span class='notice'>You decrease the voltage in the [src]</span>")
|
||||
add_overlay(image(icon, "vapeopen_low"))
|
||||
|
||||
if(screw && emagged)
|
||||
user << "<span class='notice'>The [name] can't be modified!</span>"
|
||||
to_chat(user, "<span class='notice'>The [name] can't be modified!</span>")
|
||||
|
||||
|
||||
/obj/item/clothing/mask/vape/emag_act(mob/user)// I WON'T REGRET WRITTING THIS, SURLY.
|
||||
@@ -650,30 +637,30 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
cut_overlays()
|
||||
emagged = 1
|
||||
super = 0
|
||||
user << "<span class='warning'>You maximize the voltage in the [src]</span>"
|
||||
to_chat(user, "<span class='warning'>You maximize the voltage in the [src]</span>")
|
||||
add_overlay(image(icon, "vapeopen_high"))
|
||||
var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread //for effect
|
||||
sp.set_up(5, 1, src)
|
||||
sp.start()
|
||||
else
|
||||
user << "<span class='warning'>The [name] is already emagged!</span>"
|
||||
to_chat(user, "<span class='warning'>The [name] is already emagged!</span>")
|
||||
else
|
||||
user << "<span class='notice'>You need to open the cap to do that</span>"
|
||||
to_chat(user, "<span class='notice'>You need to open the cap to do that</span>")
|
||||
|
||||
/obj/item/clothing/mask/vape/attack_self(mob/user)
|
||||
if(reagents.total_volume > 0)
|
||||
user << "<span class='notice'>you empty [src] of all reagents.</span>"
|
||||
to_chat(user, "<span class='notice'>you empty [src] of all reagents.</span>")
|
||||
reagents.clear_reagents()
|
||||
return
|
||||
|
||||
/obj/item/clothing/mask/vape/equipped(mob/user, slot)
|
||||
if(slot == slot_wear_mask)
|
||||
if(!screw)
|
||||
user << "<span class='notice'>You start puffing on the vape.</span>"
|
||||
to_chat(user, "<span class='notice'>You start puffing on the vape.</span>")
|
||||
reagents.set_reacting(TRUE)
|
||||
START_PROCESSING(SSobj, src)
|
||||
else //it will not start if the vape is opened.
|
||||
user << "<span class='warning'>You need to close the cap first!</span>"
|
||||
to_chat(user, "<span class='warning'>You need to close the cap first!</span>")
|
||||
|
||||
/obj/item/clothing/mask/vape/dropped(mob/user)
|
||||
var/mob/living/carbon/C = user
|
||||
@@ -688,7 +675,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
if (src == C.wear_mask) // if it's in the human/monkey mouth, transfer reagents to the mob
|
||||
var/fraction = min(REAGENTS_METABOLISM/reagents.total_volume, 1) //this will react instantly, making them a little more dangerous than cigarettes
|
||||
reagents.reaction(C, INGEST, fraction)
|
||||
reagents.trans_to(C, REAGENTS_METABOLISM)
|
||||
if(!reagents.trans_to(C, REAGENTS_METABOLISM))
|
||||
reagents.remove_any(REAGENTS_METABOLISM)
|
||||
if(reagents.get_reagent_amount("welding_fuel"))
|
||||
//HOT STUFF
|
||||
C.fire_stacks = 2
|
||||
@@ -712,7 +700,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
|
||||
if(!reagents.total_volume)
|
||||
if(ismob(loc))
|
||||
M << "<span class='notice'>The [name] is empty!</span>"
|
||||
to_chat(M, "<span class='notice'>The [name] is empty!</span>")
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
//it's reusable so it won't unequip when empty
|
||||
return
|
||||
@@ -737,7 +725,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread
|
||||
sp.set_up(5, 1, src)
|
||||
sp.start()
|
||||
M << "<span class='userdanger'>The [name] suddenly explodes in your mouth!</span>"
|
||||
to_chat(M, "<span class='userdanger'>The [name] suddenly explodes in your mouth!</span>")
|
||||
|
||||
if(reagents && reagents.total_volume)
|
||||
hand_reagents()
|
||||
|
||||
@@ -58,11 +58,11 @@
|
||||
//I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing.
|
||||
//So this is a workaround. This also makes more sense from an IC standpoint. ~Carn
|
||||
if(user.client && (target in user.client.screen))
|
||||
user << "<span class='warning'>You need to take that [target.name] off before cleaning it!</span>"
|
||||
to_chat(user, "<span class='warning'>You need to take that [target.name] off before cleaning it!</span>")
|
||||
else if(istype(target,/obj/effect/decal/cleanable))
|
||||
user.visible_message("[user] begins to scrub \the [target.name] out with [src].", "<span class='warning'>You begin to scrub \the [target.name] out with [src]...</span>")
|
||||
if(do_after(user, src.cleanspeed, target = target))
|
||||
user << "<span class='notice'>You scrub \the [target.name] out.</span>"
|
||||
to_chat(user, "<span class='notice'>You scrub \the [target.name] out.</span>")
|
||||
qdel(target)
|
||||
else if(ishuman(target) && user.zone_selected == "mouth")
|
||||
var/mob/living/carbon/human/H = user
|
||||
@@ -73,13 +73,13 @@
|
||||
else if(istype(target, /obj/structure/window))
|
||||
user.visible_message("[user] begins to clean \the [target.name] with [src]...", "<span class='notice'>You begin to clean \the [target.name] with [src]...</span>")
|
||||
if(do_after(user, src.cleanspeed, target = target))
|
||||
user << "<span class='notice'>You clean \the [target.name].</span>"
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
target.SetOpacity(initial(target.opacity))
|
||||
target.set_opacity(initial(target.opacity))
|
||||
else
|
||||
user.visible_message("[user] begins to clean \the [target.name] with [src]...", "<span class='notice'>You begin to clean \the [target.name] with [src]...</span>")
|
||||
if(do_after(user, src.cleanspeed, target = target))
|
||||
user << "<span class='notice'>You clean \the [target.name].</span>"
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
var/obj/effect/decal/cleanable/C = locate() in target
|
||||
qdel(C)
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
/obj/item/weapon/lipstick/attack_self(mob/user)
|
||||
cut_overlays()
|
||||
user << "<span class='notice'>You twist \the [src] [open ? "closed" : "open"].</span>"
|
||||
to_chat(user, "<span class='notice'>You twist \the [src] [open ? "closed" : "open"].</span>")
|
||||
open = !open
|
||||
if(open)
|
||||
var/image/colored = image("icon"='icons/obj/items.dmi', "icon_state"="lipstick_uncap_color")
|
||||
@@ -55,10 +55,10 @@
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.is_mouth_covered())
|
||||
user << "<span class='warning'>Remove [ H == user ? "your" : "their" ] mask!</span>"
|
||||
to_chat(user, "<span class='warning'>Remove [ H == user ? "your" : "their" ] mask!</span>")
|
||||
return
|
||||
if(H.lip_style) //if they already have lipstick on
|
||||
user << "<span class='warning'>You need to wipe off the old lipstick first!</span>"
|
||||
to_chat(user, "<span class='warning'>You need to wipe off the old lipstick first!</span>")
|
||||
return
|
||||
if(H == user)
|
||||
user.visible_message("<span class='notice'>[user] does their lips with \the [src].</span>", \
|
||||
@@ -76,7 +76,7 @@
|
||||
H.lip_color = colour
|
||||
H.update_body()
|
||||
else
|
||||
user << "<span class='warning'>Where are the lips on that?</span>"
|
||||
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)
|
||||
@@ -87,7 +87,7 @@
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H == user)
|
||||
user << "<span class='notice'>You wipe off the lipstick with [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You wipe off the lipstick with [src].</span>")
|
||||
H.lip_style = null
|
||||
H.update_body()
|
||||
else
|
||||
@@ -127,13 +127,13 @@
|
||||
var/location = user.zone_selected
|
||||
if(location == "mouth")
|
||||
if(!(FACEHAIR in H.dna.species.species_traits))
|
||||
user << "<span class='warning'>There is no facial hair to shave!</span>"
|
||||
to_chat(user, "<span class='warning'>There is no facial hair to shave!</span>")
|
||||
return
|
||||
if(!get_location_accessible(H, location))
|
||||
user << "<span class='warning'>The mask is in the way!</span>"
|
||||
to_chat(user, "<span class='warning'>The mask is in the way!</span>")
|
||||
return
|
||||
if(H.facial_hair_style == "Shaved")
|
||||
user << "<span class='warning'>Already clean-shaven!</span>"
|
||||
to_chat(user, "<span class='warning'>Already clean-shaven!</span>")
|
||||
return
|
||||
|
||||
if(H == user) //shaving yourself
|
||||
@@ -155,13 +155,13 @@
|
||||
|
||||
else if(location == "head")
|
||||
if(!(HAIR in H.dna.species.species_traits))
|
||||
user << "<span class='warning'>There is no hair to shave!</span>"
|
||||
to_chat(user, "<span class='warning'>There is no hair to shave!</span>")
|
||||
return
|
||||
if(!get_location_accessible(H, location))
|
||||
user << "<span class='warning'>The headgear is in the way!</span>"
|
||||
to_chat(user, "<span class='warning'>The headgear is in the way!</span>")
|
||||
return
|
||||
if(H.hair_style == "Bald" || H.hair_style == "Balding Hair" || H.hair_style == "Skinhead")
|
||||
user << "<span class='warning'>There is not enough hair left to shave!</span>"
|
||||
to_chat(user, "<span class='warning'>There is not enough hair left to shave!</span>")
|
||||
return
|
||||
|
||||
if(H == user) //shaving yourself
|
||||
|
||||
@@ -82,13 +82,13 @@
|
||||
if(user.get_item_by_slot(slot_back) == src)
|
||||
ui_action_click()
|
||||
else
|
||||
user << "<span class='warning'>Put the defibrillator on your back first!</span>"
|
||||
to_chat(user, "<span class='warning'>Put the defibrillator on your back first!</span>")
|
||||
|
||||
else if(slot_flags == SLOT_BELT)
|
||||
if(user.get_item_by_slot(slot_belt) == src)
|
||||
ui_action_click()
|
||||
else
|
||||
user << "<span class='warning'>Strap the defibrillator's belt on first!</span>"
|
||||
to_chat(user, "<span class='warning'>Strap the defibrillator's belt on first!</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -106,15 +106,15 @@
|
||||
else if(istype(W, /obj/item/weapon/stock_parts/cell))
|
||||
var/obj/item/weapon/stock_parts/cell/C = W
|
||||
if(bcell)
|
||||
user << "<span class='notice'>[src] already has a cell.</span>"
|
||||
to_chat(user, "<span class='notice'>[src] already has a cell.</span>")
|
||||
else
|
||||
if(C.maxcharge < paddles.revivecost)
|
||||
user << "<span class='notice'>[src] requires a higher capacity cell.</span>"
|
||||
to_chat(user, "<span class='notice'>[src] requires a higher capacity cell.</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(W, src))
|
||||
return
|
||||
bcell = W
|
||||
user << "<span class='notice'>You install a cell in [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You install a cell in [src].</span>")
|
||||
update_icon()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||
@@ -122,7 +122,7 @@
|
||||
bcell.updateicon()
|
||||
bcell.loc = get_turf(src.loc)
|
||||
bcell = null
|
||||
user << "<span class='notice'>You remove the cell from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the cell from [src].</span>")
|
||||
update_icon()
|
||||
else
|
||||
return ..()
|
||||
@@ -130,10 +130,10 @@
|
||||
/obj/item/weapon/defibrillator/emag_act(mob/user)
|
||||
if(safety)
|
||||
safety = 0
|
||||
user << "<span class='warning'>You silently disable [src]'s safety protocols with the cryptographic sequencer."
|
||||
to_chat(user, "<span class='warning'>You silently disable [src]'s safety protocols with the cryptographic sequencer.")
|
||||
else
|
||||
safety = 1
|
||||
user << "<span class='notice'>You silently enable [src]'s safety protocols with the cryptographic sequencer."
|
||||
to_chat(user, "<span class='notice'>You silently enable [src]'s safety protocols with the cryptographic sequencer.")
|
||||
|
||||
/obj/item/weapon/defibrillator/emp_act(severity)
|
||||
if(bcell)
|
||||
@@ -159,7 +159,7 @@
|
||||
//Detach the paddles into the user's hands
|
||||
if(!usr.put_in_hands(paddles))
|
||||
on = 0
|
||||
user << "<span class='warning'>You need a free hand to hold the paddles!</span>"
|
||||
to_chat(user, "<span class='warning'>You need a free hand to hold the paddles!</span>")
|
||||
update_icon()
|
||||
return
|
||||
paddles.loc = user
|
||||
@@ -323,7 +323,7 @@
|
||||
var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_held_item()
|
||||
if(istype(O))
|
||||
O.unwield()
|
||||
user << "<span class='notice'>The paddles snap back into the main unit.</span>"
|
||||
to_chat(user, "<span class='notice'>The paddles snap back into the main unit.</span>")
|
||||
defib.on = 0
|
||||
loc = defib
|
||||
defib.update_icon()
|
||||
@@ -348,15 +348,15 @@
|
||||
return
|
||||
if(!wielded)
|
||||
if(iscyborg(user))
|
||||
user << "<span class='warning'>You must activate the paddles in your active module before you can use them on someone!</span>"
|
||||
to_chat(user, "<span class='warning'>You must activate the paddles in your active module before you can use them on someone!</span>")
|
||||
else
|
||||
user << "<span class='warning'>You need to wield the paddles in both hands before you can use them on someone!</span>"
|
||||
to_chat(user, "<span class='warning'>You need to wield the paddles in both hands before you can use them on someone!</span>")
|
||||
return
|
||||
if(cooldown)
|
||||
if(req_defib)
|
||||
user << "<span class='warning'>[defib] is recharging!</span>"
|
||||
to_chat(user, "<span class='warning'>[defib] is recharging!</span>")
|
||||
else
|
||||
user << "<span class='warning'>[src] are recharging!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] are recharging!</span>")
|
||||
return
|
||||
|
||||
if(user.a_intent == INTENT_DISARM)
|
||||
@@ -365,16 +365,15 @@
|
||||
|
||||
if(!ishuman(M))
|
||||
if(req_defib)
|
||||
user << "<span class='warning'>The instructions on [defib] don't mention how to revive that...</span>"
|
||||
to_chat(user, "<span class='warning'>The instructions on [defib] don't mention how to revive that...</span>")
|
||||
else
|
||||
user << "<span class='warning'>You aren't sure how to revive that...</span>"
|
||||
to_chat(user, "<span class='warning'>You aren't sure how to revive that...</span>")
|
||||
return
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
|
||||
if(user.zone_selected != "chest")
|
||||
user << "<span class='warning'>You need to target your patient's \
|
||||
chest with [src]!</span>"
|
||||
to_chat(user, "<span class='warning'>You need to target your patient's chest with [src]!</span>")
|
||||
return
|
||||
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
@@ -438,7 +437,7 @@
|
||||
update_icon()
|
||||
return
|
||||
if(H && H.stat == DEAD)
|
||||
user << "<span class='warning'>[H] is dead.</span>"
|
||||
to_chat(user, "<span class='warning'>[H] is dead.</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
|
||||
busy = 0
|
||||
update_icon()
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
if(istype(H) && !H.shoes)
|
||||
if(PIERCEIMMUNE in H.dna.species.species_traits)
|
||||
return 0
|
||||
H << "<span class='userdanger'>You step on the D4!</span>"
|
||||
to_chat(H, "<span class='userdanger'>You step on the D4!</span>")
|
||||
H.apply_damage(4,BRUTE,(pick("l_leg", "r_leg")))
|
||||
H.Weaken(3)
|
||||
|
||||
|
||||
@@ -51,15 +51,15 @@
|
||||
M.updateappearance(mutations_overlay_update=1)
|
||||
log_attack(log_msg)
|
||||
else
|
||||
user << "<span class='notice'>It appears that [M] does not have compatible DNA.</span>"
|
||||
to_chat(user, "<span class='notice'>It appears that [M] does not have compatible DNA.</span>")
|
||||
return
|
||||
|
||||
/obj/item/weapon/dnainjector/attack(mob/target, mob/user)
|
||||
if(!user.IsAdvancedToolUser())
|
||||
user << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
if(used)
|
||||
user << "<span class='warning'>This injector is used up!</span>"
|
||||
to_chat(user, "<span class='warning'>This injector is used up!</span>")
|
||||
return
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/humantarget = target
|
||||
@@ -75,7 +75,7 @@
|
||||
"<span class='userdanger'>[user] injects [target] with the syringe with [src]!")
|
||||
|
||||
else
|
||||
user << "<span class='notice'>You inject yourself with [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You inject yourself with [src].</span>")
|
||||
|
||||
add_logs(user, target, "injected", src)
|
||||
|
||||
@@ -310,7 +310,7 @@
|
||||
|
||||
if(M.has_dna() && !(M.disabilities & NOCLONE))
|
||||
if(M.stat == DEAD) //prevents dead people from having their DNA changed
|
||||
user << "<span class='notice'>You can't modify [M]'s DNA while [M.p_theyre()] dead.</span>"
|
||||
to_chat(user, "<span class='notice'>You can't modify [M]'s DNA while [M.p_theyre()] dead.</span>")
|
||||
return
|
||||
M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2))
|
||||
var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]"
|
||||
@@ -353,7 +353,7 @@
|
||||
M.dna.temporary_mutations[UI_CHANGED] = endtime
|
||||
log_attack(log_msg)
|
||||
else
|
||||
user << "<span class='notice'>It appears that [M] does not have compatible DNA.</span>"
|
||||
to_chat(user, "<span class='notice'>It appears that [M] does not have compatible DNA.</span>")
|
||||
return
|
||||
|
||||
/obj/item/weapon/dnainjector/timed/hulk
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
/obj/item/weapon/c4/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
open_panel = !open_panel
|
||||
user << "<span class='notice'>You [open_panel ? "open" : "close"] the wire panel.</span>"
|
||||
to_chat(user, "<span class='notice'>You [open_panel ? "open" : "close"] the wire panel.</span>")
|
||||
else if(is_wire_tool(I))
|
||||
wires.interact(user)
|
||||
else
|
||||
@@ -63,7 +63,7 @@
|
||||
if(user.get_active_held_item() == src)
|
||||
newtime = Clamp(newtime, 10, 60000)
|
||||
timer = newtime
|
||||
user << "Timer set for [timer] seconds."
|
||||
to_chat(user, "Timer set for [timer] seconds.")
|
||||
|
||||
/obj/item/weapon/c4/afterattack(atom/movable/AM, mob/user, flag)
|
||||
if (!flag)
|
||||
@@ -79,7 +79,7 @@
|
||||
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
|
||||
|
||||
user << "<span class='notice'>You start planting the bomb...</span>"
|
||||
to_chat(user, "<span class='notice'>You start planting the bomb...</span>")
|
||||
|
||||
if(do_after(user, 50, target = AM))
|
||||
if(!user.temporarilyRemoveItemFromInventory(src))
|
||||
@@ -93,7 +93,7 @@
|
||||
log_game("[key_name(user)] planted [name] on [target.name] at [COORD(target)] with [timer] second fuse")
|
||||
|
||||
target.add_overlay(image_overlay, 1)
|
||||
user << "<span class='notice'>You plant the bomb. Timer counting down from [timer].</span>"
|
||||
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/c4/proc/explode()
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
safety = !safety
|
||||
src.icon_state = "[sprite_name][!safety]"
|
||||
src.desc = "The safety is [safety ? "on" : "off"]."
|
||||
user << "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)
|
||||
@@ -67,27 +67,27 @@
|
||||
/obj/item/weapon/extinguisher/examine(mob/user)
|
||||
..()
|
||||
if(reagents.total_volume)
|
||||
user << "It contains [round(reagents.total_volume)] units."
|
||||
to_chat(user, "It contains [round(reagents.total_volume)] units.")
|
||||
else
|
||||
user << "It is empty."
|
||||
to_chat(user, "It is empty.")
|
||||
|
||||
/obj/item/weapon/extinguisher/proc/AttemptRefill(atom/target, mob/user)
|
||||
if(istype(target, /obj/structure/reagent_dispensers/watertank) && target.Adjacent(user))
|
||||
var/safety_save = safety
|
||||
safety = TRUE
|
||||
if(reagents.total_volume == reagents.maximum_volume)
|
||||
user << "<span class='warning'>\The [src] is already full!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src] is already full!</span>")
|
||||
safety = safety_save
|
||||
return 1
|
||||
var/obj/structure/reagent_dispensers/watertank/W = target
|
||||
var/transferred = W.reagents.trans_to(src, max_water)
|
||||
if(transferred > 0)
|
||||
user << "<span class='notice'>\The [src] has been refilled by [transferred] units.</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] has been refilled by [transferred] units.</span>")
|
||||
playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
|
||||
for(var/datum/reagent/water/R in reagents.reagent_list)
|
||||
R.cooling_temperature = cooling_power
|
||||
else
|
||||
user << "<span class='warning'>\The [W] is empty!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [W] is empty!</span>")
|
||||
safety = safety_save
|
||||
return 1
|
||||
else
|
||||
@@ -100,7 +100,7 @@
|
||||
return
|
||||
if (!safety)
|
||||
if (src.reagents.total_volume < 1)
|
||||
usr << "<span class='warning'>\The [src] is empty!</span>"
|
||||
to_chat(usr, "<span class='warning'>\The [src] is empty!</span>")
|
||||
return
|
||||
|
||||
if (world.time < src.last_use + 12)
|
||||
|
||||
@@ -61,15 +61,15 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/flamethrower/afterattack(atom/target, mob/user, flag)
|
||||
if(flag)
|
||||
return // too close
|
||||
if(flag)
|
||||
return // too close
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.dna.check_mutation(HULK))
|
||||
user << "<span class='warning'>Your meaty finger is much too large for the trigger guard!</span>"
|
||||
to_chat(user, "<span class='warning'>Your meaty finger is much too large for the trigger guard!</span>")
|
||||
return
|
||||
if(NOGUNS in H.dna.species.species_traits)
|
||||
user << "<span class='warning'>Your fingers don't fit in the trigger guard!</span>"
|
||||
to_chat(user, "<span class='warning'>Your fingers don't fit in the trigger guard!</span>")
|
||||
return
|
||||
if(user && user.get_active_held_item() == src) // Make sure our user is still holding us
|
||||
var/turf/target_turf = get_turf(target)
|
||||
@@ -96,7 +96,7 @@
|
||||
|
||||
else if(istype(W, /obj/item/weapon/screwdriver) && igniter && !lit)
|
||||
status = !status
|
||||
user << "<span class='notice'>[igniter] is now [status ? "secured" : "unsecured"]!</span>"
|
||||
to_chat(user, "<span class='notice'>[igniter] is now [status ? "secured" : "unsecured"]!</span>")
|
||||
update_icon()
|
||||
return
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
|
||||
else if(istype(W,/obj/item/weapon/tank/internals/plasma))
|
||||
if(ptank)
|
||||
user << "<span class='notice'>There is already a plasma tank loaded in [src]!</span>"
|
||||
to_chat(user, "<span class='notice'>There is already a plasma tank loaded in [src]!</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(W, src))
|
||||
return
|
||||
@@ -133,7 +133,7 @@
|
||||
return
|
||||
user.set_machine(src)
|
||||
if(!ptank)
|
||||
user << "<span class='notice'>Attach a plasma tank first!</span>"
|
||||
to_chat(user, "<span class='notice'>Attach a plasma tank first!</span>")
|
||||
return
|
||||
var/dat = text("<TT><B>Flamethrower (<A HREF='?src=\ref[src];light=1'>[lit ? "<font color='red'>Lit</font>" : "Unlit"]</a>)</B><BR>\n Tank Pressure: [ptank.air_contents.return_pressure()]<BR>\nAmount to throw: <A HREF='?src=\ref[src];amount=-100'>-</A> <A HREF='?src=\ref[src];amount=-10'>-</A> <A HREF='?src=\ref[src];amount=-1'>-</A> [throw_amount] <A HREF='?src=\ref[src];amount=1'>+</A> <A HREF='?src=\ref[src];amount=10'>+</A> <A HREF='?src=\ref[src];amount=100'>+</A><BR>\n<A HREF='?src=\ref[src];remove=1'>Remove plasmatank</A> - <A HREF='?src=\ref[src];close=1'>Close</A></TT>")
|
||||
user << browse(dat, "window=flamethrower;size=600x300")
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
/obj/item/weapon/a_gift/attack_self(mob/M)
|
||||
if(M && M.mind && M.mind.special_role == "Santa")
|
||||
M << "<span class='warning'>You're supposed to be spreading gifts, not opening them yourself!</span>"
|
||||
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,
|
||||
@@ -43,8 +43,8 @@
|
||||
/obj/item/weapon/lipstick/random,
|
||||
/obj/item/weapon/grenade/smokebomb,
|
||||
/obj/item/weapon/grown/corncob,
|
||||
/obj/item/weapon/poster/contraband,
|
||||
/obj/item/weapon/poster/legit,
|
||||
/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,
|
||||
@@ -78,4 +78,4 @@
|
||||
qdel(src)
|
||||
var/obj/item/I = new gift_type(M)
|
||||
M.put_in_hands(I)
|
||||
I.add_fingerprint(M)
|
||||
I.add_fingerprint(M)
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
var/area/A = get_area(bombturf)
|
||||
message_admins("[key_name_admin(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[usr]'>FLW</A>) has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
|
||||
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).")
|
||||
user << "<span class='warning'>You prime the [name]! [det_time / 10] second\s!</span>"
|
||||
to_chat(user, "<span class='warning'>You prime the [name]! [det_time / 10] second\s!</span>")
|
||||
playsound(user.loc, 'sound/weapons/armbomb.ogg', 60, 1)
|
||||
active = 1
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
@@ -54,29 +54,29 @@
|
||||
if(stage == WIRED)
|
||||
if(beakers.len)
|
||||
stage_change(READY)
|
||||
user << "<span class='notice'>You lock the [initial(name)] assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You lock the [initial(name)] assembly.</span>")
|
||||
playsound(loc, I.usesound, 25, -3)
|
||||
else
|
||||
user << "<span class='warning'>You need to add at least one beaker before locking the [initial(name)] assembly!</span>"
|
||||
to_chat(user, "<span class='warning'>You need to add at least one beaker before locking the [initial(name)] assembly!</span>")
|
||||
else if(stage == READY && !nadeassembly)
|
||||
det_time = det_time == 50 ? 30 : 50 //toggle between 30 and 50
|
||||
user << "<span class='notice'>You modify the time delay. It's set for [det_time / 10] second\s.</span>"
|
||||
to_chat(user, "<span class='notice'>You modify the time delay. It's set for [det_time / 10] second\s.</span>")
|
||||
else if(stage == EMPTY)
|
||||
user << "<span class='warning'>You need to add an activation mechanism!</span>"
|
||||
to_chat(user, "<span class='warning'>You need to add an activation mechanism!</span>")
|
||||
|
||||
else if(stage == WIRED && is_type_in_list(I, allowed_containers))
|
||||
. = 1 //no afterattack
|
||||
if(beakers.len == 2)
|
||||
user << "<span class='warning'>[src] can not hold more containers!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] can not hold more containers!</span>")
|
||||
return
|
||||
else
|
||||
if(I.reagents.total_volume)
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
user << "<span class='notice'>You add [I] to the [initial(name)] assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You add [I] to the [initial(name)] assembly.</span>")
|
||||
beakers += I
|
||||
else
|
||||
user << "<span class='warning'>[I] is empty!</span>"
|
||||
to_chat(user, "<span class='warning'>[I] is empty!</span>")
|
||||
|
||||
else if(stage == EMPTY && istype(I, /obj/item/device/assembly_holder))
|
||||
. = 1 // no afterattack
|
||||
@@ -91,28 +91,28 @@
|
||||
assemblyattacher = user.ckey
|
||||
|
||||
stage_change(WIRED)
|
||||
user << "<span class='notice'>You add [A] to the [initial(name)] assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You add [A] to the [initial(name)] assembly.</span>")
|
||||
|
||||
else if(stage == EMPTY && istype(I, /obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/C = I
|
||||
if (C.use(1))
|
||||
det_time = 50 // In case the cable_coil was removed and readded.
|
||||
stage_change(WIRED)
|
||||
user << "<span class='notice'>You rig the [initial(name)] assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You rig the [initial(name)] assembly.</span>")
|
||||
else
|
||||
user << "<span class='warning'>You need one length of coil to wire the assembly!</span>"
|
||||
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))
|
||||
stage_change(WIRED)
|
||||
user << "<span class='notice'>You unlock the [initial(name)] assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You unlock the [initial(name)] assembly.</span>")
|
||||
|
||||
else if(stage == WIRED && istype(I, /obj/item/weapon/wrench))
|
||||
if(beakers.len)
|
||||
for(var/obj/O in beakers)
|
||||
O.loc = get_turf(src)
|
||||
beakers = list()
|
||||
user << "<span class='notice'>You open the [initial(name)] assembly and remove the payload.</span>"
|
||||
to_chat(user, "<span class='notice'>You open the [initial(name)] assembly and remove the payload.</span>")
|
||||
return // First use of the wrench remove beakers, then use the wrench to remove the activation mechanism.
|
||||
if(nadeassembly)
|
||||
nadeassembly.loc = get_turf(src)
|
||||
@@ -121,7 +121,7 @@
|
||||
else // If "nadeassembly = null && stage == WIRED", then it most have been cable_coil that was used.
|
||||
new /obj/item/stack/cable_coil(get_turf(src),1)
|
||||
stage_change(EMPTY)
|
||||
user << "<span class='notice'>You remove the activation mechanism from the [initial(name)] assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the activation mechanism from the [initial(name)] assembly.</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -229,7 +229,7 @@
|
||||
if(istype(I, /obj/item/slime_extract) && stage == WIRED)
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
user << "<span class='notice'>You add [I] to the [initial(name)] assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You add [I] to the [initial(name)] assembly.</span>")
|
||||
beakers += I
|
||||
else
|
||||
return ..()
|
||||
@@ -265,7 +265,7 @@
|
||||
unit_spread += 25
|
||||
else
|
||||
unit_spread = 5
|
||||
user << "<span class='notice'> You set the time release to [unit_spread] units per detonation.</span>"
|
||||
to_chat(user, "<span class='notice'> You set the time release to [unit_spread] units per detonation.</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -457,6 +457,39 @@
|
||||
beakers += B1
|
||||
beakers += B2
|
||||
|
||||
/obj/item/weapon/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/New()
|
||||
..()
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
|
||||
|
||||
B1.reagents.add_reagent(glitter_type, 25)
|
||||
B1.reagents.add_reagent("potassium", 25)
|
||||
B2.reagents.add_reagent("phosphorus", 25)
|
||||
B2.reagents.add_reagent("sugar", 25)
|
||||
|
||||
beakers += B1
|
||||
beakers += B2
|
||||
|
||||
/obj/item/weapon/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
|
||||
name = "blue glitter bomb"
|
||||
desc = "For that COOL glittery look."
|
||||
glitter_type = "blue_glitter"
|
||||
|
||||
/obj/item/weapon/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
|
||||
name = "clf3 grenade"
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
/obj/item/weapon/grenade/iedcasing/attack_self(mob/user) //
|
||||
if(!active)
|
||||
if(clown_check(user))
|
||||
user << "<span class='warning'>You light the [name]!</span>"
|
||||
to_chat(user, "<span class='warning'>You light the [name]!</span>")
|
||||
active = 1
|
||||
cut_overlay(image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled"), TRUE) //this line make no sense
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
@@ -67,4 +67,4 @@
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing/examine(mob/user)
|
||||
..()
|
||||
user << "You can't tell when it will explode!"
|
||||
to_chat(user, "You can't tell when it will explode!")
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
/obj/item/weapon/grenade/proc/clown_check(mob/living/carbon/human/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='warning'>Huh? How does this thing work?</span>"
|
||||
to_chat(user, "<span class='warning'>Huh? How does this thing work?</span>")
|
||||
active = 1
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||
@@ -40,15 +40,15 @@
|
||||
..()
|
||||
if(display_timer)
|
||||
if(det_time > 1)
|
||||
user << "The timer is set to [det_time/10] second\s."
|
||||
to_chat(user, "The timer is set to [det_time/10] second\s.")
|
||||
else
|
||||
user << "\The [src] is set for instant detonation."
|
||||
to_chat(user, "\The [src] is set for instant detonation.")
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/attack_self(mob/user)
|
||||
if(!active)
|
||||
if(clown_check(user))
|
||||
user << "<span class='warning'>You prime the [name]! [det_time/10] seconds!</span>"
|
||||
to_chat(user, "<span class='warning'>You prime the [name]! [det_time/10] seconds!</span>")
|
||||
playsound(user.loc, 'sound/weapons/armbomb.ogg', 60, 1)
|
||||
active = 1
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
@@ -79,16 +79,16 @@
|
||||
switch(det_time)
|
||||
if ("1")
|
||||
det_time = 10
|
||||
user << "<span class='notice'>You set the [name] for 1 second detonation time.</span>"
|
||||
to_chat(user, "<span class='notice'>You set the [name] for 1 second detonation time.</span>")
|
||||
if ("10")
|
||||
det_time = 30
|
||||
user << "<span class='notice'>You set the [name] for 3 second detonation time.</span>"
|
||||
to_chat(user, "<span class='notice'>You set the [name] for 3 second detonation time.</span>")
|
||||
if ("30")
|
||||
det_time = 50
|
||||
user << "<span class='notice'>You set the [name] for 5 second detonation time.</span>"
|
||||
to_chat(user, "<span class='notice'>You set the [name] for 5 second detonation time.</span>")
|
||||
if ("50")
|
||||
det_time = 1
|
||||
user << "<span class='notice'>You set the [name] for instant detonation.</span>"
|
||||
to_chat(user, "<span class='notice'>You set the [name] for instant detonation.</span>")
|
||||
add_fingerprint(user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -10,6 +10,9 @@
|
||||
var/image_overlay = null
|
||||
var/obj/item/device/assembly_holder/nadeassembly = null
|
||||
var/assemblyattacher
|
||||
var/directional = FALSE
|
||||
var/aim_dir = NORTH
|
||||
var/boom_sizes = list(0, 0, 3)
|
||||
|
||||
/obj/item/weapon/grenade/plastic/New()
|
||||
image_overlay = image('icons/obj/grenade.dmi', "[item_state]2")
|
||||
@@ -29,7 +32,7 @@
|
||||
nadeassembly = A
|
||||
A.master = src
|
||||
assemblyattacher = user.ckey
|
||||
user << "<span class='notice'>You add [A] to the [name].</span>"
|
||||
to_chat(user, "<span class='notice'>You add [A] to the [name].</span>")
|
||||
playsound(src, 'sound/weapons/tap.ogg', 20, 1)
|
||||
update_icon()
|
||||
return
|
||||
@@ -42,6 +45,26 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/grenade/plastic/prime()
|
||||
var/turf/location
|
||||
if(target)
|
||||
if(!QDELETED(target))
|
||||
location = get_turf(target)
|
||||
target.cut_overlay(image_overlay, TRUE)
|
||||
else
|
||||
location = get_turf(src)
|
||||
if(location)
|
||||
if(directional && target && target.density)
|
||||
var/turf/T = get_step(location, aim_dir)
|
||||
explosion(get_step(T, aim_dir), boom_sizes[1], boom_sizes[2], boom_sizes[3])
|
||||
else
|
||||
explosion(location, boom_sizes[1], boom_sizes[2], boom_sizes[3])
|
||||
location.ex_act(2, target)
|
||||
if(istype(target, /mob))
|
||||
var/mob/M = target
|
||||
M.gib()
|
||||
qdel(src)
|
||||
|
||||
//assembly stuff
|
||||
/obj/item/weapon/grenade/plastic/receive_signal()
|
||||
prime()
|
||||
@@ -62,15 +85,16 @@
|
||||
if(user.get_active_held_item() == src)
|
||||
newtime = Clamp(newtime, 10, 60000)
|
||||
det_time = newtime
|
||||
user << "Timer set for [det_time] seconds."
|
||||
to_chat(user, "Timer set for [det_time] seconds.")
|
||||
|
||||
/obj/item/weapon/grenade/plastic/afterattack(atom/movable/AM, mob/user, flag)
|
||||
if (!flag)
|
||||
aim_dir = get_dir(user,AM)
|
||||
if(!flag)
|
||||
return
|
||||
if (ismob(AM))
|
||||
if(ismob(AM))
|
||||
return
|
||||
|
||||
user << "<span class='notice'>You start planting the [src]. The timer is set to [det_time]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start planting the [src]. The timer is set to [det_time]...</span>")
|
||||
|
||||
if(do_after(user, 50, target = AM))
|
||||
if(!user.temporarilyRemoveItemFromInventory(src))
|
||||
@@ -78,12 +102,18 @@
|
||||
src.target = AM
|
||||
forceMove(null) //Yep
|
||||
|
||||
if(istype(AM, /obj/item)) //your crappy throwing star can't fly so good with a giant brick of c4 on it.
|
||||
var/obj/item/I = AM
|
||||
I.throw_speed = max(1, (I.throw_speed - 3))
|
||||
I.throw_range = max(1, (I.throw_range - 3))
|
||||
I.embed_chance = 0
|
||||
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_COORDJMP(target)] with [det_time] second fuse",0,1)
|
||||
log_game("[key_name(user)] planted [name] on [target.name] at [COORD(src)] with [det_time] second fuse")
|
||||
|
||||
target.add_overlay(image_overlay, 1)
|
||||
if(!nadeassembly)
|
||||
user << "<span class='notice'>You plant the bomb. Timer counting down from [det_time].</span>"
|
||||
to_chat(user, "<span class='notice'>You plant the bomb. Timer counting down from [det_time].</span>")
|
||||
addtimer(CALLBACK(src, .proc/prime), det_time*10)
|
||||
else
|
||||
qdel(src) //How?
|
||||
@@ -125,22 +155,6 @@
|
||||
name = "C4"
|
||||
desc = "Used to put holes in specific areas without too much extra hole. A saboteur's favorite."
|
||||
|
||||
/obj/item/weapon/grenade/plastic/c4/prime()
|
||||
var/turf/location
|
||||
if(target)
|
||||
if(!QDELETED(target))
|
||||
location = get_turf(target)
|
||||
target.cut_overlay(image_overlay, TRUE)
|
||||
else
|
||||
location = get_turf(src)
|
||||
if(location)
|
||||
location.ex_act(2, target)
|
||||
explosion(location,0,0,3)
|
||||
if(istype(target, /mob))
|
||||
var/mob/M = target
|
||||
M.gib()
|
||||
qdel(src)
|
||||
|
||||
// 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.
|
||||
@@ -148,34 +162,7 @@
|
||||
/obj/item/weapon/grenade/plastic/x4
|
||||
name = "X4"
|
||||
desc = "A shaped high-explosive breaching charge. Designed to ensure user safety and wall nonsafety."
|
||||
var/aim_dir = NORTH
|
||||
icon_state = "plasticx40"
|
||||
item_state = "plasticx4"
|
||||
|
||||
/obj/item/weapon/grenade/plastic/x4/prime()
|
||||
var/turf/location
|
||||
if(target)
|
||||
if(!QDELETED(target))
|
||||
location = get_turf(target)
|
||||
target.cut_overlay(image_overlay, TRUE)
|
||||
else
|
||||
location = get_turf(src)
|
||||
if(location)
|
||||
if(istype(loc, /obj/item/weapon/twohanded/spear) || !target)
|
||||
explosion(location, 0, 2, 3)
|
||||
else if(target && target.density)
|
||||
var/turf/T = get_step(location, aim_dir)
|
||||
explosion(get_step(T, aim_dir),0,0,3)
|
||||
explosion(T,0,2,0)
|
||||
location.ex_act(2, target)
|
||||
else
|
||||
explosion(location, 0, 2, 3)
|
||||
location.ex_act(2, target)
|
||||
if(istype(target, /mob))
|
||||
var/mob/M = target
|
||||
M.gib()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grenade/plastic/x4/afterattack(atom/movable/AM, mob/user, flag)
|
||||
aim_dir = get_dir(user,AM)
|
||||
..()
|
||||
directional = TRUE
|
||||
boom_sizes = list(0, 2, 5)
|
||||
@@ -26,7 +26,7 @@
|
||||
if(!istype(C))
|
||||
return
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='warning'>Uh... how do those things work?!</span>"
|
||||
to_chat(user, "<span class='warning'>Uh... how do those things work?!</span>")
|
||||
apply_cuffs(user,user)
|
||||
return
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
playsound(loc, cuffsound, 30, 1, -2)
|
||||
if(do_mob(user, C, 30) && (C.get_num_arms() >= 2 || C.get_arm_ignore()))
|
||||
apply_cuffs(C,user)
|
||||
user << "<span class='notice'>You handcuff [C].</span>"
|
||||
to_chat(user, "<span class='notice'>You handcuff [C].</span>")
|
||||
if(istype(src, /obj/item/weapon/restraints/handcuffs/cable))
|
||||
feedback_add_details("handcuffs","C")
|
||||
else
|
||||
@@ -52,9 +52,9 @@
|
||||
|
||||
add_logs(user, C, "handcuffed")
|
||||
else
|
||||
user << "<span class='warning'>You fail to handcuff [C]!</span>"
|
||||
to_chat(user, "<span class='warning'>You fail to handcuff [C]!</span>")
|
||||
else
|
||||
user << "<span class='warning'>[C] doesn't have two hands...</span>"
|
||||
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)
|
||||
if(target.handcuffed)
|
||||
@@ -101,14 +101,14 @@
|
||||
if(!istype(C))
|
||||
return
|
||||
if(wirestorage && wirestorage.energy < 15)
|
||||
user << "<span class='warning'>You need at least 15 wire to restrain [C]!</span>"
|
||||
to_chat(user, "<span class='warning'>You need at least 15 wire to restrain [C]!</span>")
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/apply_cuffs(mob/living/carbon/target, mob/user, var/dispense = 0)
|
||||
if(wirestorage)
|
||||
if(!wirestorage.use_charge(15))
|
||||
user << "<span class='warning'>You need at least 15 wire to restrain [target]!</span>"
|
||||
to_chat(user, "<span class='warning'>You need at least 15 wire to restrain [target]!</span>")
|
||||
return
|
||||
return ..(target, user, 1)
|
||||
|
||||
@@ -167,24 +167,24 @@
|
||||
var/obj/item/weapon/wirerod/W = new /obj/item/weapon/wirerod
|
||||
remove_item_from_storage(user)
|
||||
user.put_in_hands(W)
|
||||
user << "<span class='notice'>You wrap the cable restraint around the top of the rod.</span>"
|
||||
to_chat(user, "<span class='notice'>You wrap the cable restraint around the top of the rod.</span>")
|
||||
qdel(src)
|
||||
else
|
||||
user << "<span class='warning'>You need one rod to make a wired rod!</span>"
|
||||
to_chat(user, "<span class='warning'>You need one rod to make a wired rod!</span>")
|
||||
return
|
||||
else if(istype(I, /obj/item/stack/sheet/metal))
|
||||
var/obj/item/stack/sheet/metal/M = I
|
||||
if(M.get_amount() < 6)
|
||||
user << "<span class='warning'>You need at least six metal sheets to make good enough weights!</span>"
|
||||
to_chat(user, "<span class='warning'>You need at least six metal sheets to make good enough weights!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You begin to apply [I] to [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You begin to apply [I] to [src]...</span>")
|
||||
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
|
||||
M.use(6)
|
||||
user.put_in_hands(S)
|
||||
user << "<span class='notice'>You make some weights out of [I] and tie them to [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You make some weights out of [I] and tie them to [src].</span>")
|
||||
remove_item_from_storage(user)
|
||||
qdel(src)
|
||||
else
|
||||
@@ -200,10 +200,10 @@
|
||||
if(!C.handcuffed)
|
||||
C.handcuffed = new /obj/item/weapon/restraints/handcuffs/cable/zipties/used(C)
|
||||
C.update_handcuffed()
|
||||
user << "<span class='notice'>You handcuff [C].</span>"
|
||||
to_chat(user, "<span class='notice'>You handcuff [C].</span>")
|
||||
add_logs(user, C, "handcuffed")
|
||||
else
|
||||
user << "<span class='warning'>You fail to handcuff [C]!</span>"
|
||||
to_chat(user, "<span class='warning'>You fail to handcuff [C]!</span>")
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/zipties
|
||||
name = "zipties"
|
||||
@@ -261,7 +261,7 @@
|
||||
if(ishuman(user) && !user.stat && !user.restrained())
|
||||
armed = !armed
|
||||
icon_state = "[initial(icon_state)][armed]"
|
||||
user << "<span class='notice'>[src] is now [armed ? "armed" : "disarmed"]</span>"
|
||||
to_chat(user, "<span class='notice'>[src] is now [armed ? "armed" : "disarmed"]</span>")
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/Crossed(AM as mob|obj)
|
||||
if(armed && isturf(src.loc))
|
||||
@@ -342,7 +342,7 @@
|
||||
src.loc = C
|
||||
C.update_inv_legcuffed()
|
||||
feedback_add_details("handcuffs","B")
|
||||
C << "<span class='userdanger'>\The [src] ensnares you!</span>"
|
||||
to_chat(C, "<span class='userdanger'>\The [src] ensnares you!</span>")
|
||||
C.Weaken(weaken)
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/bola/tactical//traitor variant
|
||||
|
||||
@@ -15,13 +15,10 @@
|
||||
force = 12
|
||||
attack_verb = list("robusted")
|
||||
hitsound = 'sound/weapons/smash.ogg'
|
||||
var/ascended = FALSE
|
||||
var/awakened = 0
|
||||
var/victims_needed = 20 //how many victims needed to ascend
|
||||
var/awakened = FALSE
|
||||
var/bloodthirst = HIS_GRACE_SATIATED
|
||||
var/prev_bloodthirst = HIS_GRACE_SATIATED
|
||||
var/force_bonus = 0
|
||||
var/ascend_bonus = 15
|
||||
|
||||
/obj/item/weapon/his_grace/New()
|
||||
..()
|
||||
@@ -40,8 +37,6 @@
|
||||
/obj/item/weapon/his_grace/attack(mob/living/M, mob/user)
|
||||
if(awakened && M.stat)
|
||||
consume(M)
|
||||
if(LAZYLEN(contents) >= victims_needed)
|
||||
ascend()
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -53,19 +48,19 @@
|
||||
if(awakened)
|
||||
switch(bloodthirst)
|
||||
if(HIS_GRACE_SATIATED to HIS_GRACE_PECKISH)
|
||||
user << "<span class='his_grace'>[src] isn't very hungry. Not yet.</span>"
|
||||
to_chat(user, "<span class='his_grace'>[src] isn't very hungry. Not yet.</span>")
|
||||
if(HIS_GRACE_PECKISH to HIS_GRACE_HUNGRY)
|
||||
user << "<span class='his_grace'>[src] would like a snack.</span>"
|
||||
to_chat(user, "<span class='his_grace'>[src] would like a snack.</span>")
|
||||
if(HIS_GRACE_HUNGRY to HIS_GRACE_FAMISHED)
|
||||
user << "<span class='his_grace'>[src] is quite hungry now.</span>"
|
||||
to_chat(user, "<span class='his_grace'>[src] is quite hungry now.</span>")
|
||||
if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING)
|
||||
user << "<span class='his_grace'>[src] is openly salivating at the sight of you. Be careful.</span>"
|
||||
to_chat(user, "<span class='his_grace'>[src] is openly salivating at the sight of you. Be careful.</span>")
|
||||
if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER)
|
||||
user << "<span class='his_grace bold'>You walk a fine line. [src] is very close to devouring you.</span>"
|
||||
to_chat(user, "<span class='his_grace bold'>You walk a fine line. [src] is very close to devouring you.</span>")
|
||||
if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP)
|
||||
user << "<span class='his_grace bold'>[src] is shaking violently and staring directly at you.</span>"
|
||||
to_chat(user, "<span class='his_grace bold'>[src] is shaking violently and staring directly at you.</span>")
|
||||
else
|
||||
user << "<span class='his_grace'>[src] is latched closed.</span>"
|
||||
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
|
||||
if(!awakened)
|
||||
@@ -130,10 +125,10 @@
|
||||
adjust_bloodthirst(1)
|
||||
force_bonus = HIS_GRACE_FORCE_BONUS * LAZYLEN(contents)
|
||||
playsound(user, 'sound/effects/pope_entry.ogg', 100)
|
||||
icon_state = "green_awakened"
|
||||
icon_state = "his_grace_awakened"
|
||||
|
||||
/obj/item/weapon/his_grace/proc/drowse() //Good night, Mr. Grace.
|
||||
if(!awakened || ascended)
|
||||
if(!awakened)
|
||||
return
|
||||
var/turf/T = get_turf(src)
|
||||
T.visible_message("<span class='boldwarning'>[src] slowly stops rattling and falls still, His latch snapping closed.</span>")
|
||||
@@ -208,17 +203,3 @@
|
||||
if(prev_bloodthirst >= HIS_GRACE_PECKISH)
|
||||
master.visible_message("<span class='warning'>[src] is satiated.</span>", "<span class='his_grace big'>[src]'s hunger recedes...</span>")
|
||||
force = initial(force) + force_bonus
|
||||
|
||||
/obj/item/weapon/his_grace/proc/ascend()
|
||||
if(ascended)
|
||||
return
|
||||
var/mob/living/carbon/human/master = loc
|
||||
force_bonus += ascend_bonus
|
||||
desc = "A legendary toolbox and a distant artifact from The Age of Three Powers. On its three latches engraved are the words \"The Sun\", \"The Moon\", and \"The Stars\". The entire toolbox has the words \"The World\" engraved into its sides."
|
||||
icon_state = "his_grace_ascended"
|
||||
item_state = "toolbox_gold"
|
||||
ascended = TRUE
|
||||
playsound(master, 'sound/effects/his_grace_ascend.ogg', 100)
|
||||
if(istype(master))
|
||||
master.visible_message("<span class='his_grace big bold'>Gods will be watching.</span>", "<span class='his_grace big bold'>God will be watching.</span>")
|
||||
name = "[master]'s mythical toolbox of three powers"
|
||||
|
||||
@@ -24,12 +24,12 @@
|
||||
var/turf/T = get_turf(target)
|
||||
var/obj/structure/holosign/H = locate(holosign_type) in T
|
||||
if(H)
|
||||
user << "<span class='notice'>You use [src] to deactivate [H].</span>"
|
||||
to_chat(user, "<span class='notice'>You use [src] to deactivate [H].</span>")
|
||||
qdel(H)
|
||||
else
|
||||
if(!is_blocked_turf(T, TRUE)) //can't put holograms on a tile that has dense stuff
|
||||
if(holocreator_busy)
|
||||
user << "<span class='notice'>[src] is busy creating a hologram.</span>"
|
||||
to_chat(user, "<span class='notice'>[src] is busy creating a hologram.</span>")
|
||||
return
|
||||
if(signs.len < max_signs)
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 20, 1)
|
||||
@@ -44,9 +44,9 @@
|
||||
if(is_blocked_turf(T, TRUE)) //don't try to sneak dense stuff on our tile during the wait.
|
||||
return
|
||||
H = new holosign_type(get_turf(target), src)
|
||||
user << "<span class='notice'>You create \a [H] with [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You create \a [H] with [src].</span>")
|
||||
else
|
||||
user << "<span class='notice'>[src] is projecting at max capacity!</span>"
|
||||
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)
|
||||
return
|
||||
@@ -55,7 +55,7 @@
|
||||
if(signs.len)
|
||||
for(var/H in signs)
|
||||
qdel(H)
|
||||
user << "<span class='notice'>You clear all active holograms.</span>"
|
||||
to_chat(user, "<span class='notice'>You clear all active holograms.</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/holosign_creator/security
|
||||
@@ -108,9 +108,9 @@
|
||||
if(signs.len)
|
||||
for(var/H in signs)
|
||||
qdel(H)
|
||||
user << "<span class='notice'>You clear all active holograms.</span>"
|
||||
to_chat(user, "<span class='notice'>You clear all active holograms.</span>")
|
||||
if(signs.len)
|
||||
for(var/H in signs)
|
||||
qdel(H)
|
||||
user << "<span class='notice'>You clear all active holograms.</span>"
|
||||
to_chat(user, "<span class='notice'>You clear all active holograms.</span>")
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
if(SSreligion.holy_weapon)
|
||||
holy_weapon = new SSreligion.holy_weapon
|
||||
M << "<span class='notice'>The null rod suddenly morphs into your religions already chosen holy weapon.</span>"
|
||||
to_chat(M, "<span class='notice'>The null rod suddenly morphs into your religions already chosen holy weapon.</span>")
|
||||
else
|
||||
var/list/holy_weapons_list = typesof(/obj/item/weapon/nullrod)
|
||||
var/list/display_names = list()
|
||||
@@ -216,7 +216,7 @@
|
||||
if(possessed)
|
||||
return
|
||||
|
||||
user << "You attempt to wake the spirit of the blade..."
|
||||
to_chat(user, "You attempt to wake the spirit of the blade...")
|
||||
|
||||
possessed = TRUE
|
||||
|
||||
@@ -237,12 +237,12 @@
|
||||
S.real_name = input
|
||||
S.name = input
|
||||
else
|
||||
user << "The blade is dormant. Maybe you can try again later."
|
||||
to_chat(user, "The blade is dormant. Maybe you can try again later.")
|
||||
possessed = FALSE
|
||||
|
||||
/obj/item/weapon/nullrod/scythe/talking/Destroy()
|
||||
for(var/mob/living/simple_animal/shade/S in contents)
|
||||
S << "You were destroyed!"
|
||||
to_chat(S, "You were destroyed!")
|
||||
qdel(S)
|
||||
return ..()
|
||||
|
||||
@@ -322,7 +322,7 @@
|
||||
/obj/item/weapon/nullrod/carp/attack_self(mob/living/user)
|
||||
if(used_blessing)
|
||||
else if(user.mind && (user.mind.isholy))
|
||||
user << "You are blessed by Carp-Sie. Wild space carp will no longer attack you."
|
||||
to_chat(user, "You are blessed by Carp-Sie. Wild space carp will no longer attack you.")
|
||||
user.faction |= "carp"
|
||||
used_blessing = TRUE
|
||||
|
||||
@@ -348,10 +348,25 @@
|
||||
desc = "They say fear is the true mind killer, but stabbing them in the head works too. Honour compels you to not sheathe it once drawn."
|
||||
sharpness = IS_SHARP
|
||||
slot_flags = null
|
||||
flags = HANDSLOW
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
/obj/item/weapon/nullrod/tribal_knife/Initialize(mapload)
|
||||
..()
|
||||
SET_SECONDARY_FLAG(src, SLOWS_WHILE_IN_HAND)
|
||||
|
||||
/obj/item/weapon/nullrod/tribal_knife/New()
|
||||
..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/nullrod/tribal_knife/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/nullrod/tribal_knife/process()
|
||||
slowdown = rand(-2, 2)
|
||||
|
||||
|
||||
/obj/item/weapon/nullrod/pitchfork
|
||||
icon_state = "pitchfork0"
|
||||
name = "unholy pitchfork"
|
||||
@@ -360,15 +375,3 @@
|
||||
attack_verb = list("poked", "impaled", "pierced", "jabbed")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
sharpness = IS_SHARP
|
||||
|
||||
/obj/item/weapon/nullrod/tribal_knife/New()
|
||||
..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/nullrod/tribal_knife/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/nullrod/tribal_knife/process()
|
||||
slowdown = rand(-2, 2)
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/obj/item/weapon/implant/abductor
|
||||
name = "recall implant"
|
||||
desc = "Returns you to the mothership."
|
||||
@@ -15,7 +14,7 @@
|
||||
cooldown = 0
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
imp_in << "<span class='warning'>You must wait [30 - cooldown] seconds to use [src] again!</span>"
|
||||
to_chat(imp_in, "<span class='warning'>You must wait [30 - cooldown] seconds to use [src] again!</span>")
|
||||
|
||||
/obj/item/weapon/implant/abductor/process()
|
||||
if(cooldown < initial(cooldown))
|
||||
|
||||
@@ -30,9 +30,6 @@
|
||||
. = ..()
|
||||
tracked_chem_implants -= src
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/implant/chem/trigger(emote, mob/source)
|
||||
if(emote == "deathgasp")
|
||||
activate(reagents.total_volume)
|
||||
@@ -47,19 +44,16 @@
|
||||
else
|
||||
injectamount = cause
|
||||
reagents.trans_to(R, injectamount)
|
||||
R << "<span class='italics'>You hear a faint beep.</span>"
|
||||
to_chat(R, "<span class='italics'>You hear a faint beep.</span>")
|
||||
if(!reagents.total_volume)
|
||||
R << "<span class='italics'>You hear a faint click from your chest.</span>"
|
||||
to_chat(R, "<span class='italics'>You hear a faint click from your chest.</span>")
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/weapon/implantcase/chem
|
||||
name = "implant case - 'Remote Chemical'"
|
||||
desc = "A glass case containing a remote chemical implant."
|
||||
|
||||
/obj/item/weapon/implantcase/chem/New()
|
||||
imp = new /obj/item/weapon/implant/chem(src)
|
||||
..()
|
||||
imp_type = /obj/item/weapon/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)
|
||||
|
||||
@@ -15,16 +15,9 @@
|
||||
|
||||
/obj/item/weapon/implanter/sad_trombone
|
||||
name = "implanter (sad_trombone)"
|
||||
|
||||
/obj/item/weapon/implanter/sad_trombone/New()
|
||||
imp = new /obj/item/weapon/implant/sad_trombone(src)
|
||||
..()
|
||||
|
||||
imp_type = /obj/item/weapon/implant/sad_trombone
|
||||
|
||||
/obj/item/weapon/implantcase/sad_trombone
|
||||
name = "implant case - 'Sad Trombone'"
|
||||
desc = "A glass case containing a sad trombone implant."
|
||||
|
||||
/obj/item/weapon/implantcase/sad_trombone/New()
|
||||
imp = new /obj/item/weapon/implant/sad_trombone(src)
|
||||
..()
|
||||
imp_type = /obj/item/weapon/implant/sad_trombone
|
||||
|
||||
@@ -13,18 +13,11 @@
|
||||
<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
|
||||
name = "implanter (exile)"
|
||||
|
||||
/obj/item/weapon/implanter/exile/New()
|
||||
imp = new /obj/item/weapon/implant/exile( src )
|
||||
..()
|
||||
imp_type = /obj/item/weapon/implant/exile
|
||||
|
||||
/obj/item/weapon/implantcase/exile
|
||||
name = "implant case - 'Exile'"
|
||||
desc = "A glass case containing an exile implant."
|
||||
|
||||
/obj/item/weapon/implantcase/exile/New()
|
||||
imp = new /obj/item/weapon/implant/exile(src)
|
||||
..()
|
||||
imp_type = /obj/item/weapon/implant/exile
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
heavy = round(heavy)
|
||||
medium = round(medium)
|
||||
weak = round(weak)
|
||||
imp_in << "<span class='notice'>You activate your [name].</span>"
|
||||
to_chat(imp_in, "<span class='notice'>You activate your [name].</span>")
|
||||
var/turf/boomturf = get_turf(imp_in)
|
||||
var/area/A = get_area(boomturf)
|
||||
message_admins("[key_name_admin(imp_in)]<A HREF='?_src_=holder;adminmoreinfo=\ref[imp_in]'>?</A> (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[imp_in]'>FLW</A>) has activated their [name] at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[imp_in.x];Y=[imp_in.y];Z=[imp_in.z]'>[A.name] (JMP)</a>.")
|
||||
@@ -106,16 +106,9 @@
|
||||
|
||||
/obj/item/weapon/implanter/explosive
|
||||
name = "implanter (explosive)"
|
||||
|
||||
/obj/item/weapon/implanter/explosive/New()
|
||||
imp = new /obj/item/weapon/implant/explosive(src)
|
||||
..()
|
||||
|
||||
imp_type = /obj/item/weapon/implant/explosive
|
||||
|
||||
/obj/item/weapon/implantcase/explosive
|
||||
name = "implant case - 'Explosive'"
|
||||
desc = "A glass case containing an explosive implant."
|
||||
|
||||
/obj/item/weapon/implantcase/explosive/New()
|
||||
imp = new /obj/item/weapon/implant/explosive(src)
|
||||
..()
|
||||
imp_type = /obj/item/weapon/implant/explosive
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
/obj/item/weapon/implant/freedom/activate()
|
||||
uses--
|
||||
imp_in << "You feel a faint click."
|
||||
to_chat(imp_in, "You feel a faint click.")
|
||||
if(iscarbon(imp_in))
|
||||
var/mob/living/carbon/C_imp_in = imp_in
|
||||
C_imp_in.uncuff()
|
||||
@@ -36,16 +36,9 @@ No Implant Specifics"}
|
||||
|
||||
/obj/item/weapon/implanter/freedom
|
||||
name = "implanter (freedom)"
|
||||
|
||||
/obj/item/weapon/implanter/freedom/New()
|
||||
imp = new /obj/item/weapon/implant/freedom(src)
|
||||
..()
|
||||
|
||||
imp_type = /obj/item/weapon/implant/freedom
|
||||
|
||||
/obj/item/weapon/implantcase/freedom
|
||||
name = "implant case - 'Freedom'"
|
||||
desc = "A glass case containing a freedom implant."
|
||||
|
||||
/obj/item/weapon/implantcase/freedom/New()
|
||||
imp = new /obj/item/weapon/implant/freedom(src)
|
||||
..()
|
||||
imp_type = /obj/item/weapon/implant/freedom
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/obj/item/weapon/implant/gang
|
||||
name = "gang implant"
|
||||
desc = "Makes you a gangster or such."
|
||||
|
||||
@@ -26,15 +26,10 @@
|
||||
|
||||
/obj/item/weapon/implanter/krav_maga
|
||||
name = "implanter (krav maga)"
|
||||
|
||||
/obj/item/weapon/implanter/krav_maga/New()
|
||||
imp = new /obj/item/weapon/implant/krav_maga(src)
|
||||
..()
|
||||
imp_type = /obj/item/weapon/implant/krav_maga
|
||||
|
||||
/obj/item/weapon/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
|
||||
|
||||
/obj/item/weapon/implantcase/krav_maga/New()
|
||||
imp = new /obj/item/weapon/implant/krav_maga(src)
|
||||
..()
|
||||
|
||||
@@ -36,32 +36,24 @@
|
||||
ticker.mode.remove_revolutionary(target.mind)
|
||||
if(!silent)
|
||||
if(target.mind in ticker.mode.cult)
|
||||
target << "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>"
|
||||
to_chat(target, "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>")
|
||||
else
|
||||
target << "<span class='notice'>You feel a sense of peace and security. You are now protected from brainwashing.</span>"
|
||||
to_chat(target, "<span class='notice'>You feel a sense of peace and security. You are now protected from brainwashing.</span>")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/implant/mindshield/removed(mob/target, silent = 0, special = 0)
|
||||
if(..())
|
||||
if(target.stat != DEAD && !silent)
|
||||
target << "<span class='boldnotice'>Your mind suddenly feels terribly vulnerable. You are no longer safe from brainwashing.</span>"
|
||||
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
|
||||
name = "implanter (mindshield)"
|
||||
|
||||
/obj/item/weapon/implanter/mindshield/New()
|
||||
imp = new /obj/item/weapon/implant/mindshield(src)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
imp_type = /obj/item/weapon/implant/mindshield
|
||||
|
||||
/obj/item/weapon/implantcase/mindshield
|
||||
name = "implant case - 'Mindshield'"
|
||||
desc = "A glass case containing a mindshield implant."
|
||||
|
||||
/obj/item/weapon/implantcase/mindshield/New()
|
||||
imp = new /obj/item/weapon/implant/mindshield(src)
|
||||
..()
|
||||
imp_type = /obj/item/weapon/implant/mindshield
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
/obj/item/weapon/implant/adrenalin/activate()
|
||||
uses--
|
||||
imp_in << "<span class='notice'>You feel a sudden surge of energy!</span>"
|
||||
to_chat(imp_in, "<span class='notice'>You feel a sudden surge of energy!</span>")
|
||||
imp_in.SetStunned(0)
|
||||
imp_in.SetWeakened(0)
|
||||
imp_in.SetParalysis(0)
|
||||
@@ -79,4 +79,4 @@
|
||||
healthstring = "<small>Oxygen Deprivation Damage => [round(L.getOxyLoss())]<br />Fire Damage => [round(L.getFireLoss())]<br />Toxin Damage => [round(L.getToxLoss())]<br />Brute Force Damage => [round(L.getBruteLoss())]</small>"
|
||||
if (!healthstring)
|
||||
healthstring = "ERROR"
|
||||
return healthstring
|
||||
return healthstring
|
||||
|
||||
@@ -47,7 +47,4 @@
|
||||
|
||||
/obj/item/weapon/implanter/storage
|
||||
name = "implanter (storage)"
|
||||
|
||||
/obj/item/weapon/implanter/storage/New()
|
||||
imp = new /obj/item/weapon/implant/storage(src)
|
||||
..()
|
||||
imp_type = /obj/item/weapon/implant/storage
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
activated = 0
|
||||
origin_tech = "materials=2;magnets=2;programming=2;biotech=2"
|
||||
|
||||
|
||||
/obj/item/weapon/implant/tracking/New()
|
||||
..()
|
||||
tracked_implants += src
|
||||
@@ -13,12 +12,11 @@
|
||||
. = ..()
|
||||
tracked_implants -= src
|
||||
|
||||
/obj/item/weapon/implanter/tracking/New()
|
||||
imp = new /obj/item/weapon/implant/tracking( src )
|
||||
..()
|
||||
/obj/item/weapon/implanter/tracking/gps/New()
|
||||
imp = new /obj/item/device/gps/mining/internal( src )
|
||||
..()
|
||||
/obj/item/weapon/implanter/tracking
|
||||
imp_type = /obj/item/weapon/implant/tracking
|
||||
|
||||
/obj/item/weapon/implanter/tracking/gps
|
||||
imp_type = /obj/item/device/gps/mining/internal
|
||||
|
||||
/obj/item/weapon/implant/tracking/get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
origin_tech = "materials=1;biotech=2"
|
||||
materials = list(MAT_GLASS=500)
|
||||
var/obj/item/weapon/implant/imp = null
|
||||
var/imp_type
|
||||
|
||||
|
||||
/obj/item/weapon/implantcase/update_icon()
|
||||
@@ -57,32 +58,24 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/implantcase/New()
|
||||
/obj/item/weapon/implantcase/Initialize(mapload)
|
||||
..()
|
||||
if(imp_type)
|
||||
imp = new imp_type(src)
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/implantcase/tracking
|
||||
name = "implant case - 'Tracking'"
|
||||
desc = "A glass case containing a tracking implant."
|
||||
|
||||
/obj/item/weapon/implantcase/tracking/New()
|
||||
imp = new /obj/item/weapon/implant/tracking(src)
|
||||
..()
|
||||
|
||||
imp_type = /obj/item/weapon/implant/tracking
|
||||
|
||||
/obj/item/weapon/implantcase/weapons_auth
|
||||
name = "implant case - 'Firearms Authentication'"
|
||||
desc = "A glass case containing a firearms authentication implant."
|
||||
|
||||
/obj/item/weapon/implantcase/weapons_auth/New()
|
||||
imp = new /obj/item/weapon/implant/weapons_auth(src)
|
||||
..()
|
||||
imp_type = /obj/item/weapon/implant/weapons_auth
|
||||
|
||||
/obj/item/weapon/implantcase/adrenaline
|
||||
name = "implant case - 'Adrenaline'"
|
||||
desc = "A glass case containing an adrenaline implant."
|
||||
|
||||
/obj/item/weapon/implantcase/adrenaline/New()
|
||||
imp = new /obj/item/weapon/implant/adrenalin(src)
|
||||
..()
|
||||
imp_type = /obj/item/weapon/implant/adrenalin
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
|
||||
|
||||
/obj/machinery/implantchair
|
||||
name = "mindshield implanter"
|
||||
desc = "Used to implant occupants with mindshield implants."
|
||||
@@ -119,14 +117,14 @@
|
||||
return
|
||||
user.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
user.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
user << "<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about about a minute.)</span>"
|
||||
to_chat(user, "<span class='notice'>You lean on the back of [src] and start pushing the door open... (this will take about about a minute.)</span>")
|
||||
audible_message("<span class='italics'>You hear a metallic creaking from [src]!</span>",hearing_distance = 2)
|
||||
|
||||
if(do_after(user, 600, target = src))
|
||||
if(!user || user.stat != CONSCIOUS || user.loc != src || state_open)
|
||||
return
|
||||
visible_message("<span class='warning'>[user] successfully broke out of [src]!</span>")
|
||||
user << "<span class='notice'>You successfully break out of [src]!</span>"
|
||||
to_chat(user, "<span class='notice'>You successfully break out of [src]!</span>")
|
||||
open_machine()
|
||||
|
||||
/obj/machinery/implantchair/relaymove(mob/user)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
origin_tech = "materials=2;biotech=3"
|
||||
materials = list(MAT_METAL=600, MAT_GLASS=200)
|
||||
var/obj/item/weapon/implant/imp = null
|
||||
var/imp_type = null
|
||||
|
||||
|
||||
/obj/item/weapon/implanter/update_icon()
|
||||
@@ -33,13 +34,13 @@
|
||||
if(src && imp)
|
||||
if(imp.implant(M, user))
|
||||
if (M == user)
|
||||
user << "<span class='notice'>You implant yourself.</span>"
|
||||
to_chat(user, "<span class='notice'>You implant yourself.</span>")
|
||||
else
|
||||
M.visible_message("[user] has implanted [M].", "<span class='notice'>[user] implants you.</span>")
|
||||
imp = null
|
||||
update_icon()
|
||||
else
|
||||
user << "<span class='warning'>[src] fails to implant [M].</span>"
|
||||
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))
|
||||
@@ -55,24 +56,16 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/implanter/New()
|
||||
/obj/item/weapon/implanter/Initialize(mapload)
|
||||
..()
|
||||
if(imp_type)
|
||||
imp = new imp_type(src)
|
||||
update_icon()
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/implanter/adrenalin
|
||||
name = "implanter (adrenalin)"
|
||||
|
||||
/obj/item/weapon/implanter/adrenalin/New()
|
||||
imp = new /obj/item/weapon/implant/adrenalin(src)
|
||||
..()
|
||||
|
||||
imp_type = /obj/item/weapon/implant/adrenalin
|
||||
|
||||
/obj/item/weapon/implanter/emp
|
||||
name = "implanter (EMP)"
|
||||
|
||||
/obj/item/weapon/implanter/emp/New()
|
||||
imp = new /obj/item/weapon/implant/emp(src)
|
||||
..()
|
||||
imp_type = /obj/item/weapon/implant/emp
|
||||
|
||||
@@ -30,17 +30,11 @@
|
||||
|
||||
/obj/item/weapon/implanter/uplink
|
||||
name = "implanter (uplink)"
|
||||
|
||||
/obj/item/weapon/implanter/uplink/New()
|
||||
imp = new /obj/item/weapon/implant/uplink(src)
|
||||
..()
|
||||
imp_type = /obj/item/weapon/implant/uplink
|
||||
|
||||
/obj/item/weapon/implanter/uplink/precharged
|
||||
name = "implanter (uplink)"
|
||||
|
||||
/obj/item/weapon/implanter/uplink/New()
|
||||
imp = new /obj/item/weapon/implant/uplink/precharged(src)
|
||||
..()
|
||||
name = "implanter (precharged uplink)"
|
||||
imp_type = /obj/item/weapon/implant/uplink/precharged
|
||||
|
||||
/obj/item/weapon/implant/uplink/precharged
|
||||
starting_tc = 10
|
||||
|
||||
@@ -869,59 +869,6 @@
|
||||
Good luck!
|
||||
</html>"}
|
||||
|
||||
//citadel code
|
||||
/obj/item/weapon/book/manual/daredice
|
||||
name = "Dare Dice Manual"
|
||||
icon_state = "gamebook"
|
||||
author = "Cactus Space Federation"
|
||||
title = "Dare Dice Manual"
|
||||
dat = {"<html>
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 21px; margin: 15px 0px 5px;}
|
||||
h2 {font-size: 18px; margin: 15px 0px 5px;}
|
||||
h3 {font-size: 15px; margin: 15px 0px 5px;}
|
||||
li {margin: 2px 0px 2px 15px;}
|
||||
ul {list-style: none; margin: 5px; padding: 0px;}
|
||||
ol {margin: 5px; padding: 0px 15px;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Dare Dice Manual</h1>
|
||||
|
||||
<h2>Requirements</h2>
|
||||
<h3>Number of Players</h3>
|
||||
At least two, but a small group is preferred
|
||||
<h3>Required Equipment</h3>
|
||||
d100 or d20<br>
|
||||
An open space, or tables and chairs
|
||||
<h3>Optional Equipment</h3>
|
||||
Drinks & snacks<br>
|
||||
Extra clothing<br>
|
||||
Pen & paper
|
||||
<h2>How To Play</h2>
|
||||
<ol>
|
||||
<li>To start the game, one player chosen by any means starts by rolling the game die. This player then passes the die to the player next to them, traveling clockwise. Make sure to remember the number you rolled!</li>
|
||||
<li>The die continues around the table until it reaches the first player again.</li>
|
||||
<li>The players with the highest and lowest rolled numbers are selected as the 'darer' and the 'dared' respectively.</li>
|
||||
<li>If the dared player finishes the dare sufficiently, they receive <b>1</b> point.</li>
|
||||
</ol>
|
||||
Repeat the cycle until a player reaches <b>5</b> points, then they win! The winner decides who starts rolling first in the next game and can give or receive one free dare from any player of their choice.
|
||||
<h3>Ties</h3>
|
||||
Ties between two or more players can usually be ignored. In a case where two or more players tie for the position of the darer or dared, the tied players can reroll until there is one darer and one dared.<br>
|
||||
Alternatively, ties can be ignored completely. To continue playing with multiple dared or darers, simply have each darer give one dare to each dared player.
|
||||
<h3>Special Rules</h3>
|
||||
<li>Dares which break the law are automatically invalid. The dared should ask the darer for a different one.</li>
|
||||
<li>Dares which are impossible to complete are automatically invalid. The dared should ask the darer for a different one. </li>
|
||||
<li>If the dared player cannot complete a dare fully, but the table unanimously agrees that they still deserve the point then they receive it.</li>
|
||||
<li>All dares must take place within the general vicinity of the table or game space so all players can see.</li>
|
||||
<li>Depending on the amount of players, the amount of points required to win can vary. Adjust as needed.</li>
|
||||
<h3>Notes</h3>
|
||||
Dare Dice is, by far, the most popular dice game in space right now. However, players should be prepared for anything when entering a game. While the game is simple in essence; dares can be quite complicated, sometimes requiring multiple steps and/or testing your mental and physical abilities. Some dares might be downright shameful, degrading, or disgusting to some players. Thick skin is recommended.
|
||||
</body>
|
||||
</html>
|
||||
"}
|
||||
|
||||
// Wiki books that are linked to the configured wiki link.
|
||||
|
||||
// A book that links to the wiki
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
var/throwforce_on = 20
|
||||
var/icon_state_on = "axe1"
|
||||
var/list/attack_verb_on = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
var/list/possible_colors
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
sharpness = IS_SHARP
|
||||
var/w_class_on = WEIGHT_CLASS_BULKY
|
||||
@@ -12,6 +13,23 @@
|
||||
max_integrity = 200
|
||||
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/brightness_on = 3
|
||||
|
||||
/obj/item/weapon/melee/energy/Initialize()
|
||||
..()
|
||||
if(LAZYLEN(possible_colors))
|
||||
item_color = pick(possible_colors)
|
||||
switch(item_color)//Only run this check if the color was picked randomly, so that colors can be manually set for non-random colored energy weapons.
|
||||
if("red")
|
||||
light_color = LIGHT_COLOR_RED
|
||||
if("green")
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
if("blue")
|
||||
light_color = LIGHT_COLOR_LIGHT_CYAN
|
||||
if("purple")
|
||||
light_color = LIGHT_COLOR_LAVENDER
|
||||
if(active)
|
||||
set_light(brightness_on)
|
||||
|
||||
/obj/item/weapon/melee/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>")
|
||||
@@ -25,7 +43,7 @@
|
||||
|
||||
/obj/item/weapon/melee/energy/axe
|
||||
name = "energy axe"
|
||||
desc = "An energised battle axe."
|
||||
desc = "An energized battle axe."
|
||||
icon_state = "axe0"
|
||||
force = 40
|
||||
force_on = 150
|
||||
@@ -41,6 +59,7 @@
|
||||
origin_tech = "combat=4;magnets=3"
|
||||
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
|
||||
attack_verb_on = list()
|
||||
light_color = "#40ceff"
|
||||
|
||||
/obj/item/weapon/melee/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>")
|
||||
@@ -61,18 +80,17 @@
|
||||
armour_penetration = 35
|
||||
origin_tech = "combat=3;magnets=4;syndicate=4"
|
||||
block_chance = 50
|
||||
possible_colors = list("red", "blue", "green", "purple")
|
||||
var/hacked = 0
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/New()
|
||||
if(item_color == null)
|
||||
item_color = pick("red", "blue", "green", "purple")
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/process()
|
||||
if(active)
|
||||
if(hacked)
|
||||
light_color = pick(LIGHT_COLOR_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER)
|
||||
open_flame()
|
||||
else
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
@@ -84,7 +102,7 @@
|
||||
|
||||
/obj/item/weapon/melee/energy/attack_self(mob/living/carbon/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='warning'>You accidentally cut yourself with [src], like a doofus!</span>"
|
||||
to_chat(user, "<span class='warning'>You accidentally cut yourself with [src], like a doofus!</span>")
|
||||
user.take_bodypart_damage(5,5)
|
||||
active = !active
|
||||
if (active)
|
||||
@@ -100,8 +118,9 @@
|
||||
icon_state = "sword[item_color]"
|
||||
w_class = w_class_on
|
||||
playsound(user, 'sound/weapons/saberon.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
|
||||
user << "<span class='notice'>[src] is now active.</span>"
|
||||
to_chat(user, "<span class='notice'>[src] is now active.</span>")
|
||||
START_PROCESSING(SSobj, src)
|
||||
set_light(brightness_on)
|
||||
else
|
||||
force = initial(force)
|
||||
throwforce = initial(throwforce)
|
||||
@@ -112,8 +131,9 @@
|
||||
icon_state = initial(icon_state)
|
||||
w_class = initial(w_class)
|
||||
playsound(user, 'sound/weapons/saberoff.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
|
||||
user << "<span class='notice'>[src] can now be concealed.</span>"
|
||||
to_chat(user, "<span class='notice'>[src] can now be concealed.</span>")
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
set_light(0)
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/weapon/melee/energy/is_hot()
|
||||
@@ -141,7 +161,7 @@
|
||||
var/obj/item/weapon/stock_parts/cell/C = R.cell
|
||||
if(active && !(C.use(hitcost)))
|
||||
attack_self(R)
|
||||
R << "<span class='notice'>It's out of charge!</span>"
|
||||
to_chat(R, "<span class='notice'>It's out of charge!</span>")
|
||||
return
|
||||
..()
|
||||
return
|
||||
@@ -160,6 +180,8 @@
|
||||
item_color = null
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
sharpness = IS_SHARP
|
||||
light_color = "#40ceff"
|
||||
possible_colors = null
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/cyborg/saw/New()
|
||||
..()
|
||||
@@ -172,22 +194,21 @@
|
||||
/obj/item/weapon/melee/energy/sword/saber
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/saber/blue
|
||||
item_color = "blue"
|
||||
possible_colors = list("blue")
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/saber/purple
|
||||
item_color = "purple"
|
||||
possible_colors = list("purple")
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/saber/green
|
||||
item_color = "green"
|
||||
possible_colors = list("green")
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/saber/red
|
||||
item_color = "red"
|
||||
possible_colors = list("red")
|
||||
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/saber/attackby(obj/item/weapon/W, mob/living/user, params)
|
||||
if(istype(W, /obj/item/weapon/melee/energy/sword/saber))
|
||||
user << "<span class='notice'>You attach the ends of the two \
|
||||
energy swords, making a single double-bladed weapon! \
|
||||
You're cool.</span>"
|
||||
to_chat(user, "<span class='notice'>You attach the ends of the two energy swords, making a single double-bladed weapon! You're cool.</span>")
|
||||
var/obj/item/weapon/melee/energy/sword/saber/other_esword = W
|
||||
var/obj/item/weapon/twohanded/dualsaber/newSaber = new(user.loc)
|
||||
if(hacked || other_esword.hacked)
|
||||
@@ -200,13 +221,13 @@
|
||||
if(hacked == 0)
|
||||
hacked = 1
|
||||
item_color = "rainbow"
|
||||
user << "<span class='warning'>RNBW_ENGAGE</span>"
|
||||
to_chat(user, "<span class='warning'>RNBW_ENGAGE</span>")
|
||||
|
||||
if(active)
|
||||
icon_state = "swordrainbow"
|
||||
user.update_inv_hands()
|
||||
else
|
||||
user << "<span class='warning'>It's already fabulous!</span>"
|
||||
to_chat(user, "<span class='warning'>It's already fabulous!</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -215,6 +236,7 @@
|
||||
desc = "Arrrr matey."
|
||||
icon_state = "cutlass0"
|
||||
icon_state_on = "cutlass1"
|
||||
light_color = "#ff0000"
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/pirate/New()
|
||||
return
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "arm_blade"
|
||||
item_state = "arm_blade"
|
||||
origin_tech = "combat=5,biotech=5"
|
||||
origin_tech = "combat=5;biotech=5"
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
force = 20
|
||||
throwforce = 10
|
||||
@@ -83,7 +83,7 @@
|
||||
|
||||
add_fingerprint(user)
|
||||
if((CLUMSY in user.disabilities) && prob(50))
|
||||
user << "<span class ='danger'>You club yourself over the head.</span>"
|
||||
to_chat(user, "<span class ='danger'>You club yourself over the head.</span>")
|
||||
user.Weaken(3 * force)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
@@ -154,14 +154,14 @@
|
||||
/obj/item/weapon/melee/classic_baton/telescopic/attack_self(mob/user)
|
||||
on = !on
|
||||
if(on)
|
||||
user << "<span class ='warning'>You extend the baton.</span>"
|
||||
to_chat(user, "<span class ='warning'>You extend the baton.</span>")
|
||||
icon_state = "telebaton_1"
|
||||
item_state = "nullrod"
|
||||
w_class = WEIGHT_CLASS_BULKY //doesnt fit in backpack when its on for balance
|
||||
force = 10 //stunbaton damage
|
||||
attack_verb = list("smacked", "struck", "cracked", "beaten")
|
||||
else
|
||||
user << "<span class ='notice'>You collapse the baton.</span>"
|
||||
to_chat(user, "<span class ='notice'>You collapse the baton.</span>")
|
||||
icon_state = "telebaton_0"
|
||||
item_state = null //no sprite for concealment even when in hand
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
if(!proximity) return
|
||||
|
||||
if(reagents.total_volume < 1)
|
||||
user << "<span class='warning'>Your mop is dry!</span>"
|
||||
to_chat(user, "<span class='warning'>Your mop is dry!</span>")
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(A)
|
||||
@@ -49,7 +49,7 @@
|
||||
user.visible_message("[user] begins to clean \the [T] with [src].", "<span class='notice'>You begin to clean \the [T] with [src]...</span>")
|
||||
|
||||
if(do_after(user, src.mopspeed, target = T))
|
||||
user << "<span class='notice'>You finish mopping.</span>"
|
||||
to_chat(user, "<span class='notice'>You finish mopping.</span>")
|
||||
clean(T)
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
STOP_PROCESSING(SSobj,src)
|
||||
user << "<span class='notice'>You set the condenser switch to the '[refill_enabled ? "ON" : "OFF"]' position.</span>"
|
||||
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()
|
||||
@@ -105,7 +105,7 @@
|
||||
|
||||
/obj/item/weapon/mop/advanced/examine(mob/user)
|
||||
..()
|
||||
user << "<span class='notice'>The condenser switch is set to <b>[refill_enabled ? "ON" : "OFF"]</b>.</span>"
|
||||
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()
|
||||
if(refill_enabled)
|
||||
|
||||
@@ -21,12 +21,12 @@
|
||||
/obj/item/weapon/pneumatic_cannon/examine(mob/user)
|
||||
..()
|
||||
if(!in_range(user, src))
|
||||
user << "<span class='notice'>You'll need to get closer to see any more.</span>"
|
||||
to_chat(user, "<span class='notice'>You'll need to get closer to see any more.</span>")
|
||||
return
|
||||
for(var/obj/item/I in loadedItems)
|
||||
user << "<span class='info'>\icon [I] It has \the [I] loaded.</span>"
|
||||
to_chat(user, "<span class='info'>\icon [I] It has \the [I] loaded.</span>")
|
||||
if(tank)
|
||||
user << "<span class='notice'>\icon [tank] It has \the [tank] mounted onto it.</span>"
|
||||
to_chat(user, "<span class='notice'>\icon [tank] It has \the [tank] mounted onto it.</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/pneumatic_cannon/attackby(obj/item/weapon/W, mob/user, params)
|
||||
@@ -34,11 +34,11 @@
|
||||
if(!tank)
|
||||
var/obj/item/weapon/tank/internals/IT = W
|
||||
if(IT.volume <= 3)
|
||||
user << "<span class='warning'>\The [IT] is too small for \the [src].</span>"
|
||||
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)
|
||||
user << "<span class='warning'>You're fairly certain that putting a pneumatic cannon inside another pneumatic cannon would cause a spacetime disruption.</span>"
|
||||
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))
|
||||
switch(pressureSetting)
|
||||
if(1)
|
||||
@@ -47,23 +47,23 @@
|
||||
pressureSetting = 3
|
||||
if(3)
|
||||
pressureSetting = 1
|
||||
user << "<span class='notice'>You tweak \the [src]'s pressure output to [pressureSetting].</span>"
|
||||
to_chat(user, "<span class='notice'>You tweak \the [src]'s pressure output to [pressureSetting].</span>")
|
||||
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(tank)
|
||||
updateTank(tank, 1, user)
|
||||
else if(loadedWeightClass >= maxWeightClass)
|
||||
user << "<span class='warning'>\The [src] can't hold any more items!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src] can't hold any more items!</span>")
|
||||
else if(istype(W, /obj/item))
|
||||
var/obj/item/IW = W
|
||||
if((loadedWeightClass + IW.w_class) > maxWeightClass)
|
||||
user << "<span class='warning'>\The [IW] won't fit into \the [src]!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [IW] won't fit into \the [src]!</span>")
|
||||
return
|
||||
if(IW.w_class > src.w_class)
|
||||
user << "<span class='warning'>\The [IW] is too large to fit into \the [src]!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [IW] is too large to fit into \the [src]!</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(W, src))
|
||||
return
|
||||
user << "<span class='notice'>You load \the [IW] into \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You load \the [IW] into \the [src].</span>")
|
||||
loadedItems.Add(IW)
|
||||
loadedWeightClass += IW.w_class
|
||||
|
||||
@@ -82,19 +82,19 @@
|
||||
return
|
||||
var/discharge = 0
|
||||
if(user.dna.check_mutation(HULK))
|
||||
user << "<span class='warning'>Your meaty finger is much too large for the trigger guard!</span>"
|
||||
to_chat(user, "<span class='warning'>Your meaty finger is much too large for the trigger guard!</span>")
|
||||
return
|
||||
if(NOGUNS in user.dna.species.species_traits)
|
||||
user << "<span class='warning'>Your fingers don't fit in the trigger guard!</span>"
|
||||
to_chat(user, "<span class='warning'>Your fingers don't fit in the trigger guard!</span>")
|
||||
return
|
||||
if(!loadedItems || !loadedWeightClass)
|
||||
user << "<span class='warning'>\The [src] has nothing loaded.</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src] has nothing loaded.</span>")
|
||||
return
|
||||
if(!tank)
|
||||
user << "<span class='warning'>\The [src] can't fire without a source of gas.</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src] can't fire without a source of gas.</span>")
|
||||
return
|
||||
if(tank && !tank.air_contents.remove(gasPerThrow * pressureSetting))
|
||||
user << "<span class='warning'>\The [src] lets out a weak hiss and doesn't react!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src] lets out a weak hiss and doesn't react!</span>")
|
||||
return
|
||||
if(user.disabilities & CLUMSY && prob(75))
|
||||
user.visible_message("<span class='warning'>[user] loses their grip on [src], causing it to go off!</span>", "<span class='userdanger'>[src] slips out of your hands and goes off!</span>")
|
||||
@@ -144,17 +144,17 @@
|
||||
if(removing)
|
||||
if(!src.tank)
|
||||
return
|
||||
user << "<span class='notice'>You detach \the [thetank] from \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You detach \the [thetank] from \the [src].</span>")
|
||||
src.tank.loc = get_turf(user)
|
||||
user.put_in_hands(tank)
|
||||
src.tank = null
|
||||
if(!removing)
|
||||
if(src.tank)
|
||||
user << "<span class='warning'>\The [src] already has a tank.</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src] already has a tank.</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(thetank, src))
|
||||
return
|
||||
user << "<span class='notice'>You hook \the [thetank] up to \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You hook \the [thetank] up to \the [src].</span>")
|
||||
src.tank = thetank
|
||||
src.update_icons()
|
||||
|
||||
|
||||
@@ -21,10 +21,10 @@
|
||||
/obj/item/weapon/melee/powerfist/examine(mob/user)
|
||||
..()
|
||||
if(!in_range(user, src))
|
||||
user << "<span class='notice'>You'll need to get closer to see any more.</span>"
|
||||
to_chat(user, "<span class='notice'>You'll need to get closer to see any more.</span>")
|
||||
return
|
||||
if(tank)
|
||||
user << "<span class='notice'>\icon [tank] It has \the [tank] mounted onto it.</span>"
|
||||
to_chat(user, "<span class='notice'>\icon [tank] It has \the [tank] mounted onto it.</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/melee/powerfist/attackby(obj/item/weapon/W, mob/user, params)
|
||||
@@ -32,7 +32,7 @@
|
||||
if(!tank)
|
||||
var/obj/item/weapon/tank/internals/IT = W
|
||||
if(IT.volume <= 3)
|
||||
user << "<span class='warning'>\The [IT] is too small for \the [src].</span>"
|
||||
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))
|
||||
@@ -44,7 +44,7 @@
|
||||
if(3)
|
||||
fisto_setting = 1
|
||||
playsound(loc, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You tweak \the [src]'s piston valve to [fisto_setting].</span>"
|
||||
to_chat(user, "<span class='notice'>You tweak \the [src]'s piston valve to [fisto_setting].</span>")
|
||||
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(tank)
|
||||
updateTank(tank, 1, user)
|
||||
@@ -53,28 +53,28 @@
|
||||
/obj/item/weapon/melee/powerfist/proc/updateTank(obj/item/weapon/tank/internals/thetank, removing = 0, mob/living/carbon/human/user)
|
||||
if(removing)
|
||||
if(!tank)
|
||||
user << "<span class='notice'>\The [src] currently has no tank attached to it.</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] currently has no tank attached to it.</span>")
|
||||
return
|
||||
user << "<span class='notice'>You detach \the [thetank] from \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You detach \the [thetank] from \the [src].</span>")
|
||||
tank.forceMove(get_turf(user))
|
||||
user.put_in_hands(tank)
|
||||
tank = null
|
||||
if(!removing)
|
||||
if(tank)
|
||||
user << "<span class='warning'>\The [src] already has a tank.</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src] already has a tank.</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(thetank, src))
|
||||
return
|
||||
user << "<span class='notice'>You hook \the [thetank] up to \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You hook \the [thetank] up to \the [src].</span>")
|
||||
tank = thetank
|
||||
|
||||
|
||||
/obj/item/weapon/melee/powerfist/attack(mob/living/target, mob/living/user)
|
||||
if(!tank)
|
||||
user << "<span class='warning'>\The [src] can't operate without a source of gas!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src] can't operate without a source of gas!</span>")
|
||||
return
|
||||
if(tank && !tank.air_contents.remove(gasperfist * fisto_setting))
|
||||
user << "<span class='warning'>\The [src]'s piston-ram lets out a weak hiss, it needs more gas!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src]'s piston-ram lets out a weak hiss, it needs more gas!</span>")
|
||||
playsound(loc, 'sound/effects/refill.ogg', 50, 1)
|
||||
return
|
||||
target.apply_damage(force * fisto_setting, BRUTE)
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
L += T
|
||||
|
||||
if(!L.len)
|
||||
user << "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry."
|
||||
to_chat(user, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.")
|
||||
return
|
||||
|
||||
user.forceMove(pick(L))
|
||||
|
||||
@@ -12,31 +12,31 @@
|
||||
|
||||
/obj/item/weapon/sharpener/attackby(obj/item/I, mob/user, params)
|
||||
if(used)
|
||||
user << "<span class='notice'>The sharpening block is too worn to use again.</span>"
|
||||
to_chat(user, "<span class='notice'>The sharpening block is too worn to use again.</span>")
|
||||
return
|
||||
if(I.force >= max || I.throwforce >= max)//no esword sharpening
|
||||
user << "<span class='notice'>[I] is much too powerful to sharpen further.</span>"
|
||||
to_chat(user, "<span class='notice'>[I] is much too powerful to sharpen further.</span>")
|
||||
return
|
||||
if(requires_sharpness && !I.sharpness)
|
||||
user << "<span class='notice'>You can only sharpen items that are already sharp, such as knives.</span>"
|
||||
to_chat(user, "<span class='notice'>You can only sharpen items that are already sharp, such as knives.</span>")
|
||||
return
|
||||
if(istype(I, /obj/item/weapon/melee/energy))
|
||||
user << "<span class='notice'>You don't think \the [I] will be the thing getting modified if you use it on \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>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(TH.force_wielded >= max)
|
||||
user << "<span class='notice'>[TH] is much too powerful to sharpen further.</span>"
|
||||
to_chat(user, "<span class='notice'>[TH] is much too powerful to sharpen further.</span>")
|
||||
return
|
||||
if(TH.wielded)
|
||||
user << "<span class='notice'>[TH] must be unwielded before it can be sharpened.</span>"
|
||||
to_chat(user, "<span class='notice'>[TH] must be unwielded before it can be sharpened.</span>")
|
||||
return
|
||||
if(TH.force_wielded > initial(TH.force_wielded))
|
||||
user << "<span class='notice'>[TH] has already been refined before. It cannot be sharpened further.</span>"
|
||||
to_chat(user, "<span class='notice'>[TH] has already been refined before. It cannot be sharpened further.</span>")
|
||||
return
|
||||
TH.force_wielded = Clamp(TH.force_wielded + increment, 0, max)//wieldforce is increased since normal force wont stay
|
||||
if(I.force > initial(I.force))
|
||||
user << "<span class='notice'>[I] has already been refined before. It cannot be sharpened further.</span>"
|
||||
to_chat(user, "<span class='notice'>[I] has already been refined before. It cannot be sharpened further.</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] sharpens [I] with [src]!</span>", "<span class='notice'>You sharpen [I], making it much more deadly than before.</span>")
|
||||
I.sharpness = IS_SHARP_ACCURATE
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
|
||||
/obj/item/weapon/shield/energy/attack_self(mob/living/carbon/human/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='warning'>You beat yourself in the head with [src].</span>"
|
||||
to_chat(user, "<span class='warning'>You beat yourself in the head with [src].</span>")
|
||||
user.take_bodypart_damage(5)
|
||||
active = !active
|
||||
icon_state = "eshield[active]"
|
||||
@@ -85,14 +85,14 @@
|
||||
throw_speed = 2
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
playsound(user, 'sound/weapons/saberon.ogg', 35, 1)
|
||||
user << "<span class='notice'>[src] is now active.</span>"
|
||||
to_chat(user, "<span class='notice'>[src] is now active.</span>")
|
||||
else
|
||||
force = 3
|
||||
throwforce = 3
|
||||
throw_speed = 3
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
playsound(user, 'sound/weapons/saberoff.ogg', 35, 1)
|
||||
user << "<span class='notice'>[src] can now be concealed.</span>"
|
||||
to_chat(user, "<span class='notice'>[src] can now be concealed.</span>")
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/weapon/shield/riot/tele
|
||||
@@ -125,12 +125,12 @@
|
||||
throw_speed = 2
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = SLOT_BACK
|
||||
user << "<span class='notice'>You extend \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You extend \the [src].</span>")
|
||||
else
|
||||
force = 3
|
||||
throwforce = 3
|
||||
throw_speed = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
slot_flags = null
|
||||
user << "<span class='notice'>[src] can now be concealed.</span>"
|
||||
to_chat(user, "<span class='notice'>[src] can now be concealed.</span>")
|
||||
add_fingerprint(user)
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
desc = "A backpack that opens into a localized pocket of Blue Space."
|
||||
origin_tech = "bluespace=5;materials=4;engineering=4;plasmatech=5"
|
||||
icon_state = "holdingpack"
|
||||
item_state = "holdingpack"
|
||||
max_w_class = WEIGHT_CLASS_GIGANTIC
|
||||
max_combined_w_class = 35
|
||||
resistance_flags = FIRE_PROOF
|
||||
@@ -59,7 +60,7 @@
|
||||
playsound(src, pshoom, 40, 1)
|
||||
user.Beam(dest_object,icon_state="rped_upgrade",time=5)
|
||||
return 1
|
||||
user << "The [src.name] buzzes."
|
||||
to_chat(user, "The [src.name] buzzes.")
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
return 0
|
||||
|
||||
@@ -69,7 +70,7 @@
|
||||
if(safety == "Abort" || !in_range(src, user) || !src || !W || user.incapacitated())
|
||||
return
|
||||
investigate_log("has become a singularity. Caused by [user.key]","singulo")
|
||||
user << "<span class='danger'>The Bluespace interfaces of the two devices catastrophically malfunction!</span>"
|
||||
to_chat(user, "<span class='danger'>The Bluespace interfaces of the two devices catastrophically malfunction!</span>")
|
||||
qdel(W)
|
||||
var/obj/singularity/singulo = new /obj/singularity (get_turf(src))
|
||||
singulo.energy = 300 //should make it a bit bigger~
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
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/food/snacks/ash_flora)
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown,/obj/item/weapon/reagent_containers/food/snacks/ash_flora,/obj/item/weapon/reagent_containers/honeycomb)
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
////////
|
||||
@@ -159,14 +159,14 @@
|
||||
/obj/item/weapon/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)
|
||||
usr << "The snatcher does not accept [W]."
|
||||
to_chat(usr, "The snatcher does not accept [W].")
|
||||
return 0 //I don't care, but the existing code rejects them for not being "sheets" *shrug* -Sayu
|
||||
var/current = 0
|
||||
for(var/obj/item/stack/sheet/S in contents)
|
||||
current += S.amount
|
||||
if(capacity == current)//If it's full, you're done
|
||||
if(!stop_messages)
|
||||
usr << "<span class='danger'>The snatcher is full.</span>"
|
||||
to_chat(usr, "<span class='danger'>The snatcher is full.</span>")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
@@ -400,6 +400,12 @@
|
||||
)
|
||||
alternate_worn_layer = UNDER_SUIT_LAYER
|
||||
|
||||
/obj/item/weapon/storage/belt/holster/full/New()
|
||||
..()
|
||||
new /obj/item/weapon/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
|
||||
name = "fannypack"
|
||||
desc = "A dorky fannypack for keeping small items in."
|
||||
@@ -473,7 +479,7 @@
|
||||
/obj/item/weapon/storage/belt/sabre/examine(mob/user)
|
||||
..()
|
||||
if(contents.len)
|
||||
user << "<span class='notice'>Alt-click it to quickly draw the blade.</span>"
|
||||
to_chat(user, "<span class='notice'>Alt-click it to quickly draw the blade.</span>")
|
||||
|
||||
/obj/item/weapon/storage/belt/sabre/AltClick(mob/user)
|
||||
if(!ishuman(user) || !user.canUseTopic(src, be_close=TRUE))
|
||||
@@ -485,7 +491,7 @@
|
||||
user.put_in_hands(I)
|
||||
update_icon()
|
||||
else
|
||||
user << "[src] is empty."
|
||||
to_chat(user, "[src] is empty.")
|
||||
|
||||
/obj/item/weapon/storage/belt/sabre/update_icon()
|
||||
icon_state = "sheath"
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
var/title = "book"
|
||||
|
||||
/obj/item/weapon/storage/book/attack_self(mob/user)
|
||||
user << "<span class='notice'>The pages of [title] have been cut out!</span>"
|
||||
to_chat(user, "<span class='notice'>The pages of [title] have been cut out!</span>")
|
||||
|
||||
var/global/list/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")
|
||||
var/global/list/biblestates = list("bible", "koran", "scrapbook", "burning", "honk1", "honk2", "creeper", "white", "holylight", "atheist", "tome", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon")
|
||||
@@ -69,7 +69,7 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible",
|
||||
for(var/X in H.bodyparts)
|
||||
var/obj/item/bodypart/BP = X
|
||||
if(BP.status == BODYPART_ROBOTIC)
|
||||
user << "<span class='warning'>[src.deity_name] refuses to heal this metallic taint!</span>"
|
||||
to_chat(user, "<span class='warning'>[src.deity_name] refuses to heal this metallic taint!</span>")
|
||||
return 0
|
||||
|
||||
var/heal_amt = 10
|
||||
@@ -81,18 +81,18 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible",
|
||||
if(affecting.heal_damage(heal_amt, heal_amt))
|
||||
H.update_damage_overlays()
|
||||
H.visible_message("<span class='notice'>[user] heals [H] with the power of [deity_name]!</span>")
|
||||
H << "<span class='boldnotice'>May the power of [deity_name] compel you to be healed!</span>"
|
||||
to_chat(H, "<span class='boldnotice'>May the power of [deity_name] compel you to be healed!</span>")
|
||||
playsound(src.loc, "punch", 25, 1, -1)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/storage/book/bible/attack(mob/living/M, mob/living/carbon/human/user)
|
||||
|
||||
if (!user.IsAdvancedToolUser())
|
||||
user << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
|
||||
if (user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='danger'>[src] slips out of your hand and hits your head.</span>"
|
||||
to_chat(user, "<span class='danger'>[src] slips out of your hand and hits your head.</span>")
|
||||
user.take_bodypart_damage(10)
|
||||
user.Paralyse(20)
|
||||
return
|
||||
@@ -102,7 +102,7 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible",
|
||||
chaplain = 1
|
||||
|
||||
if(!chaplain)
|
||||
user << "<span class='danger'>The book sizzles in your hands.</span>"
|
||||
to_chat(user, "<span class='danger'>The book sizzles in your hands.</span>")
|
||||
user.take_bodypart_damage(0,10)
|
||||
return
|
||||
|
||||
@@ -110,7 +110,7 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible",
|
||||
|
||||
if (M.stat != DEAD)
|
||||
if(chaplain && user == M)
|
||||
user << "<span class='warning'>You can't heal yourself!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't heal yourself!</span>")
|
||||
return
|
||||
|
||||
if(ishuman(M) && prob(60) && bless(M, user))
|
||||
@@ -119,7 +119,7 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible",
|
||||
var/mob/living/carbon/C = M
|
||||
if(!istype(C.head, /obj/item/clothing/head/helmet))
|
||||
C.adjustBrainLoss(10)
|
||||
C << "<span class='danger'>You feel dumber.</span>"
|
||||
to_chat(C, "<span class='danger'>You feel dumber.</span>")
|
||||
|
||||
if(smack)
|
||||
M.visible_message("<span class='danger'>[user] beats [M] over the head with [src]!</span>", \
|
||||
@@ -135,18 +135,18 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible",
|
||||
if(!proximity)
|
||||
return
|
||||
if(isfloorturf(A))
|
||||
user << "<span class='notice'>You hit the floor with the bible.</span>"
|
||||
to_chat(user, "<span class='notice'>You hit the floor with the bible.</span>")
|
||||
if(user.mind && (user.mind.isholy))
|
||||
for(var/obj/effect/rune/R in orange(2,user))
|
||||
R.invisibility = 0
|
||||
if(user.mind && (user.mind.isholy))
|
||||
if(A.reagents && A.reagents.has_reagent("water")) // blesses all the water in the holder
|
||||
user << "<span class='notice'>You bless [A].</span>"
|
||||
to_chat(user, "<span class='notice'>You bless [A].</span>")
|
||||
var/water2holy = A.reagents.get_reagent_amount("water")
|
||||
A.reagents.del_reagent("water")
|
||||
A.reagents.add_reagent("holywater",water2holy)
|
||||
if(A.reagents && A.reagents.has_reagent("unholywater")) // yeah yeah, copy pasted code - sue me
|
||||
user << "<span class='notice'>You purify [A].</span>"
|
||||
to_chat(user, "<span class='notice'>You purify [A].</span>")
|
||||
var/unholy2clean = A.reagents.get_reagent_amount("unholywater")
|
||||
A.reagents.del_reagent("unholywater")
|
||||
A.reagents.add_reagent("holywater",unholy2clean)
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
if(!foldable)
|
||||
return
|
||||
if(contents.len)
|
||||
user << "<span class='warning'>You can't fold this box with items still inside!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't fold this box with items still inside!</span>")
|
||||
return
|
||||
if(!ispath(foldable))
|
||||
return
|
||||
@@ -54,7 +54,7 @@
|
||||
//Close any open UI windows first
|
||||
close_all()
|
||||
|
||||
user << "<span class='notice'>You fold [src] flat.</span>"
|
||||
to_chat(user, "<span class='notice'>You fold [src] flat.</span>")
|
||||
var/obj/item/I = new foldable(get_turf(src))
|
||||
user.drop_item()
|
||||
user.put_in_hands(I)
|
||||
@@ -372,6 +372,7 @@
|
||||
icon_state = "monkeycubebox"
|
||||
storage_slots = 7
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube)
|
||||
illustration = null
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes/New()
|
||||
..()
|
||||
@@ -639,6 +640,7 @@
|
||||
name = "box of rubber shots"
|
||||
desc = "A box full of rubber shots, designed for riot shotguns."
|
||||
icon_state = "rubbershot_box"
|
||||
illustration = null
|
||||
|
||||
/obj/item/weapon/storage/box/rubbershot/New()
|
||||
..()
|
||||
@@ -649,6 +651,7 @@
|
||||
name = "box of lethal shotgun shots"
|
||||
desc = "A box full of lethal shots, designed for riot shotguns."
|
||||
icon_state = "lethalshot_box"
|
||||
illustration = null
|
||||
|
||||
/obj/item/weapon/storage/box/lethalshot/New()
|
||||
..()
|
||||
@@ -664,6 +667,7 @@
|
||||
name = "box of beanbags"
|
||||
desc = "A box full of beanbag shells."
|
||||
icon_state = "rubbershot_box"
|
||||
illustration = null
|
||||
|
||||
/obj/item/weapon/storage/box/beanbag/New()
|
||||
..()
|
||||
@@ -710,17 +714,17 @@
|
||||
if(istype(W, /obj/item/weapon/pen))
|
||||
//if a pen is used on the sack, dialogue to change its design appears
|
||||
if(contents.len)
|
||||
user << "<span class='warning'>You can't modify this [src] with items still inside!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't modify this [src] with items still inside!</span>")
|
||||
return
|
||||
var/list/designs = list(NODESIGN, NANOTRASEN, SYNDI, HEART, SMILE, "Cancel")
|
||||
var/switchDesign = input("Select a Design:", "Paper Sack Design", designs[1]) in designs
|
||||
if(get_dist(usr, src) > 1)
|
||||
usr << "<span class='warning'>You have moved too far away!</span>"
|
||||
to_chat(usr, "<span class='warning'>You have moved too far away!</span>")
|
||||
return
|
||||
var/choice = designs.Find(switchDesign)
|
||||
if(design == designs[choice] || designs[choice] == "Cancel")
|
||||
return 0
|
||||
usr << "<span class='notice'>You make some modifications to the [src] using your pen.</span>"
|
||||
to_chat(usr, "<span class='notice'>You make some modifications to the [src] using your pen.</span>")
|
||||
design = designs[choice]
|
||||
icon_state = "paperbag_[design]"
|
||||
item_state = "paperbag_[design]"
|
||||
@@ -758,7 +762,7 @@
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients //This box is for the randomely chosen version the chef spawns with, it shouldn't actually exist.
|
||||
name = "ingredients box"
|
||||
icon_state = "donk_kit"
|
||||
illustration = "donk_kit"
|
||||
item_state = null
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/wildcard
|
||||
|
||||
@@ -38,9 +38,9 @@
|
||||
..()
|
||||
if(fancy_open)
|
||||
if(contents.len == 1)
|
||||
user << "There is one [src.icon_type] left."
|
||||
to_chat(user, "There is one [src.icon_type] left.")
|
||||
else
|
||||
user << "There are [contents.len <= 0 ? "no" : "[src.contents.len]"] [src.icon_type]s left."
|
||||
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)
|
||||
fancy_open = !fancy_open
|
||||
@@ -177,11 +177,11 @@
|
||||
remove_from_storage(W, M)
|
||||
M.equip_to_slot_if_possible(W, slot_wear_mask)
|
||||
contents -= W
|
||||
user << "<span class='notice'>You take a [icon_type] out of the pack.</span>"
|
||||
to_chat(user, "<span class='notice'>You take a [icon_type] out of the pack.</span>")
|
||||
else
|
||||
..()
|
||||
else
|
||||
user << "<span class='notice'>There are no [icon_type]s left in the pack.</span>"
|
||||
to_chat(user, "<span class='notice'>There are no [icon_type]s left in the pack.</span>")
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco
|
||||
name = "DromedaryCo"
|
||||
|
||||
@@ -29,9 +29,9 @@
|
||||
. = ..()
|
||||
if(. && silent && !prevent_warning)
|
||||
if(quickdraw)
|
||||
user << "<span class='notice'>You discreetly slip [W] into [src]. Alt-click [src] to remove it.</span>"
|
||||
to_chat(user, "<span class='notice'>You discreetly slip [W] into [src]. Alt-click [src] to remove it.</span>")
|
||||
else
|
||||
user << "<span class='notice'>You discreetly slip [W] into [src]."
|
||||
to_chat(user, "<span class='notice'>You discreetly slip [W] into [src].")
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket/big
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
@@ -20,31 +20,31 @@
|
||||
/obj/item/weapon/storage/lockbox/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(W.GetID())
|
||||
if(broken)
|
||||
user << "<span class='danger'>It appears to be broken.</span>"
|
||||
to_chat(user, "<span class='danger'>It appears to be broken.</span>")
|
||||
return
|
||||
if(allowed(user))
|
||||
locked = !locked
|
||||
if(locked)
|
||||
icon_state = icon_locked
|
||||
user << "<span class='danger'>You lock the [src.name]!</span>"
|
||||
to_chat(user, "<span class='danger'>You lock the [src.name]!</span>")
|
||||
close_all()
|
||||
return
|
||||
else
|
||||
icon_state = icon_closed
|
||||
user << "<span class='danger'>You unlock the [src.name]!</span>"
|
||||
to_chat(user, "<span class='danger'>You unlock the [src.name]!</span>")
|
||||
return
|
||||
else
|
||||
user << "<span class='danger'>Access Denied.</span>"
|
||||
to_chat(user, "<span class='danger'>Access Denied.</span>")
|
||||
return
|
||||
if(!locked)
|
||||
return ..()
|
||||
else
|
||||
user << "<span class='danger'>It's locked!</span>"
|
||||
to_chat(user, "<span class='danger'>It's locked!</span>")
|
||||
|
||||
/obj/item/weapon/storage/lockbox/MouseDrop(over_object, src_location, over_location)
|
||||
if (locked)
|
||||
src.add_fingerprint(usr)
|
||||
usr << "<span class='warning'>It's locked!</span>"
|
||||
to_chat(usr, "<span class='warning'>It's locked!</span>")
|
||||
return 0
|
||||
..()
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
return
|
||||
/obj/item/weapon/storage/lockbox/show_to(mob/user)
|
||||
if(locked)
|
||||
user << "<span class='warning'>It's locked!</span>"
|
||||
to_chat(user, "<span class='warning'>It's locked!</span>")
|
||||
else
|
||||
..()
|
||||
return
|
||||
@@ -67,7 +67,7 @@
|
||||
//Check the destination item type for contentto.
|
||||
/obj/item/weapon/storage/lockbox/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user)
|
||||
if(locked)
|
||||
user << "<span class='warning'>It's locked!</span>"
|
||||
to_chat(user, "<span class='warning'>It's locked!</span>")
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
/obj/item/weapon/storage/secure/examine(mob/user)
|
||||
..()
|
||||
user << text("The service panel is [src.open ? "open" : "closed"].")
|
||||
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)
|
||||
if(locked)
|
||||
@@ -64,7 +64,7 @@
|
||||
/obj/item/weapon/storage/secure/MouseDrop(over_object, src_location, over_location)
|
||||
if (locked)
|
||||
src.add_fingerprint(usr)
|
||||
usr << "<span class='warning'>It's locked!</span>"
|
||||
to_chat(usr, "<span class='warning'>It's locked!</span>")
|
||||
return 0
|
||||
..()
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
|
||||
/obj/item/weapon/storage/secure/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user)
|
||||
if(locked)
|
||||
user << "<span class='warning'>It's locked!</span>"
|
||||
to_chat(user, "<span class='warning'>It's locked!</span>")
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
|
||||
/obj/item/weapon/storage/secure/briefcase/attack_hand(mob/user)
|
||||
if ((src.loc == user) && (src.locked == 1))
|
||||
usr << "<span class='warning'>[src] is locked and cannot be opened!</span>"
|
||||
to_chat(usr, "<span class='warning'>[src] is locked and cannot be opened!</span>")
|
||||
add_fingerprint(user)
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -268,23 +268,23 @@
|
||||
return 0 //Means the item is already in the storage item
|
||||
if(contents.len >= storage_slots)
|
||||
if(!stop_messages)
|
||||
usr << "<span class='warning'>[src] is full, make some space!</span>"
|
||||
to_chat(usr, "<span class='warning'>[src] is full, make some space!</span>")
|
||||
return 0 //Storage item is full
|
||||
|
||||
if(can_hold.len)
|
||||
if(!is_type_in_typecache(W, can_hold))
|
||||
if(!stop_messages)
|
||||
usr << "<span class='warning'>[src] cannot hold [W]!</span>"
|
||||
to_chat(usr, "<span class='warning'>[src] cannot hold [W]!</span>")
|
||||
return 0
|
||||
|
||||
if(is_type_in_typecache(W, cant_hold)) //Check for specific items which this container can't hold.
|
||||
if(!stop_messages)
|
||||
usr << "<span class='warning'>[src] cannot hold [W]!</span>"
|
||||
to_chat(usr, "<span class='warning'>[src] cannot hold [W]!</span>")
|
||||
return 0
|
||||
|
||||
if(W.w_class > max_w_class)
|
||||
if(!stop_messages)
|
||||
usr << "<span class='warning'>[W] is too big for [src]!</span>"
|
||||
to_chat(usr, "<span class='warning'>[W] is too big for [src]!</span>")
|
||||
return 0
|
||||
|
||||
var/sum_w_class = W.w_class
|
||||
@@ -293,17 +293,17 @@
|
||||
|
||||
if(sum_w_class > max_combined_w_class)
|
||||
if(!stop_messages)
|
||||
usr << "<span class='warning'>[W] won't fit in [src], make some space!</span>"
|
||||
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(!stop_messages)
|
||||
usr << "<span class='warning'>[src] cannot hold [W] as it's a storage item of the same size!</span>"
|
||||
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.
|
||||
|
||||
if(W.flags & NODROP) //SHOULD be handled in unEquip, but better safe than sorry.
|
||||
usr << "<span class='warning'>\the [W] is stuck to your hand, you can't put it in \the [src]!</span>"
|
||||
to_chat(usr, "<span class='warning'>\the [W] is stuck to your hand, you can't put it in \the [src]!</span>")
|
||||
return 0
|
||||
|
||||
return 1
|
||||
@@ -341,7 +341,7 @@
|
||||
if(!prevent_warning)
|
||||
for(var/mob/M in viewers(usr, null))
|
||||
if(M == usr)
|
||||
usr << "<span class='notice'>You put [W] [preposition]to [src].</span>"
|
||||
to_chat(usr, "<span class='notice'>You put [W] [preposition]to [src].</span>")
|
||||
else if(in_range(M, usr)) //If someone is standing close enough, they can tell what it is...
|
||||
M.show_message("<span class='notice'>[usr] puts [W] [preposition]to [src].</span>", 1)
|
||||
else if(W && W.w_class >= 3) //Otherwise they can only see large or normal items from a distance...
|
||||
@@ -456,11 +456,11 @@
|
||||
collection_mode = (collection_mode+1)%3
|
||||
switch (collection_mode)
|
||||
if(2)
|
||||
usr << "[src] now picks up all items of a single type at once."
|
||||
to_chat(usr, "[src] now picks up all items of a single type at once.")
|
||||
if(1)
|
||||
usr << "[src] now picks up all items in a tile at once."
|
||||
to_chat(usr, "[src] now picks up all items in a tile at once.")
|
||||
if(0)
|
||||
usr << "[src] now picks up one item at a time."
|
||||
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()
|
||||
|
||||
@@ -13,22 +13,23 @@
|
||||
origin_tech = "combat=1;engineering=1"
|
||||
attack_verb = list("robusted")
|
||||
hitsound = 'sound/weapons/smash.ogg'
|
||||
var/hinges = "single_hinge"
|
||||
var/old = FALSE
|
||||
var/latches = "single_latch"
|
||||
var/has_latches = TRUE
|
||||
|
||||
/obj/item/weapon/storage/toolbox/Initialize()
|
||||
..()
|
||||
if(!old)
|
||||
if(has_latches)
|
||||
if(prob(10))
|
||||
hinges = "double_hinge"
|
||||
latches = "double_latch"
|
||||
else if(prob(1))
|
||||
hinges = "triple_hinge"
|
||||
latches = "triple_latch"
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/storage/toolbox/update_icon()
|
||||
..()
|
||||
cut_overlays()
|
||||
add_overlay(image('icons/obj/storage.dmi', "[hinges]"))
|
||||
if(has_latches)
|
||||
add_overlay(image('icons/obj/storage.dmi', "[latches]"))
|
||||
|
||||
|
||||
/obj/item/weapon/storage/toolbox/suicide_act(mob/user)
|
||||
@@ -45,16 +46,19 @@
|
||||
new /obj/item/weapon/crowbar/red(src)
|
||||
new /obj/item/weapon/weldingtool/mini(src)
|
||||
new /obj/item/weapon/extinguisher/mini(src)
|
||||
if(prob(50))
|
||||
new /obj/item/device/flashlight(src)
|
||||
else
|
||||
new /obj/item/device/flashlight/flare(src)
|
||||
switch(rand(1,3))
|
||||
if(1)
|
||||
new /obj/item/device/flashlight(src)
|
||||
if(2)
|
||||
new /obj/item/device/flashlight/glowstick(src)
|
||||
if(3)
|
||||
new /obj/item/device/flashlight/flare(src)
|
||||
new /obj/item/device/radio/off(src)
|
||||
|
||||
/obj/item/weapon/storage/toolbox/emergency/old
|
||||
name = "rusty red toolbox"
|
||||
icon_state = "toolbox_red_old"
|
||||
old = TRUE
|
||||
has_latches = FALSE
|
||||
|
||||
/obj/item/weapon/storage/toolbox/mechanical
|
||||
name = "mechanical toolbox"
|
||||
@@ -73,7 +77,7 @@
|
||||
/obj/item/weapon/storage/toolbox/mechanical/old
|
||||
name = "rusty blue toolbox"
|
||||
icon_state = "toolbox_blue_old"
|
||||
old = TRUE
|
||||
has_latches = FALSE
|
||||
|
||||
/obj/item/weapon/storage/toolbox/electrical
|
||||
name = "electrical toolbox"
|
||||
@@ -133,12 +137,13 @@
|
||||
name = "brass box"
|
||||
desc = "A huge brass box with several indentations in its surface."
|
||||
icon_state = "brassbox"
|
||||
item_state = null
|
||||
has_latches = FALSE
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
max_combined_w_class = 28
|
||||
storage_slots = 28
|
||||
slowdown = 1
|
||||
flags = HANDSLOW
|
||||
attack_verb = list("robusted", "crushed", "smashed")
|
||||
var/proselytizer_type = /obj/item/clockwork/clockwork_proselytizer/scarab
|
||||
|
||||
@@ -183,4 +188,4 @@
|
||||
new/obj/item/stack/cable_coil/pink(src)
|
||||
new/obj/item/stack/cable_coil/orange(src)
|
||||
new/obj/item/stack/cable_coil/cyan(src)
|
||||
new/obj/item/stack/cable_coil/white(src)
|
||||
new/obj/item/stack/cable_coil/white(src)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
/obj/item/weapon/storage/box/syndicate/New()
|
||||
..()
|
||||
switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "lordsingulo" = 1, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1)))
|
||||
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
|
||||
@@ -128,7 +128,7 @@
|
||||
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/military/assault(src) // 3 tc
|
||||
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/device/chameleon(src) // 7 tc
|
||||
|
||||
@@ -315,4 +315,4 @@
|
||||
/obj/item/weapon/storage/box/syndie_kit/mimery/New()
|
||||
..()
|
||||
new /obj/item/weapon/spellbook/oneuse/mimery_blockade(src)
|
||||
new /obj/item/weapon/spellbook/oneuse/mimery_guns(src)
|
||||
new /obj/item/weapon/spellbook/oneuse/mimery_guns(src)
|
||||
|
||||
@@ -68,15 +68,15 @@
|
||||
if(istype(W, /obj/item/weapon/stock_parts/cell))
|
||||
var/obj/item/weapon/stock_parts/cell/C = W
|
||||
if(bcell)
|
||||
user << "<span class='notice'>[src] already has a cell.</span>"
|
||||
to_chat(user, "<span class='notice'>[src] already has a cell.</span>")
|
||||
else
|
||||
if(C.maxcharge < hitcost)
|
||||
user << "<span class='notice'>[src] requires a higher capacity cell.</span>"
|
||||
to_chat(user, "<span class='notice'>[src] requires a higher capacity cell.</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(W, src))
|
||||
return
|
||||
bcell = W
|
||||
user << "<span class='notice'>You install a cell in [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You install a cell in [src].</span>")
|
||||
update_icon()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||
@@ -84,7 +84,7 @@
|
||||
bcell.updateicon()
|
||||
bcell.loc = get_turf(src.loc)
|
||||
bcell = null
|
||||
user << "<span class='notice'>You remove the cell from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the cell from [src].</span>")
|
||||
status = 0
|
||||
update_icon()
|
||||
else
|
||||
@@ -93,14 +93,14 @@
|
||||
/obj/item/weapon/melee/baton/attack_self(mob/user)
|
||||
if(bcell && bcell.charge > hitcost)
|
||||
status = !status
|
||||
user << "<span class='notice'>[src] is now [status ? "on" : "off"].</span>"
|
||||
to_chat(user, "<span class='notice'>[src] is now [status ? "on" : "off"].</span>")
|
||||
playsound(loc, "sparks", 75, 1, -1)
|
||||
else
|
||||
status = 0
|
||||
if(!bcell)
|
||||
user << "<span class='warning'>[src] does not have a power source!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] does not have a power source!</span>")
|
||||
else
|
||||
user << "<span class='warning'>[src] is out of charge.</span>"
|
||||
to_chat(user, "<span class='warning'>[src] is out of charge.</span>")
|
||||
update_icon()
|
||||
add_fingerprint(user)
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
else if(istype(action, /datum/action/item_action/jetpack_stabilization))
|
||||
if(on)
|
||||
stabilizers = !stabilizers
|
||||
user << "<span class='notice'>You turn the jetpack stabilization [stabilizers ? "on" : "off"].</span>"
|
||||
to_chat(user, "<span class='notice'>You turn the jetpack stabilization [stabilizers ? "on" : "off"].</span>")
|
||||
else
|
||||
toggle_internals(user)
|
||||
|
||||
@@ -38,10 +38,10 @@
|
||||
|
||||
if(!on)
|
||||
turn_on()
|
||||
user << "<span class='notice'>You turn the jetpack on.</span>"
|
||||
to_chat(user, "<span class='notice'>You turn the jetpack on.</span>")
|
||||
else
|
||||
turn_off()
|
||||
user << "<span class='notice'>You turn the jetpack off.</span>"
|
||||
to_chat(user, "<span class='notice'>You turn the jetpack off.</span>")
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
@@ -154,12 +154,12 @@
|
||||
|
||||
/obj/item/weapon/tank/jetpack/suit/cycle(mob/user)
|
||||
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit))
|
||||
user << "<span class='warning'>\The [src] must be connected to a hardsuit!</span>"
|
||||
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))
|
||||
user << "<span class='warning'>You need a tank in your suit storage!</span>"
|
||||
to_chat(user, "<span class='warning'>You need a tank in your suit storage!</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
@@ -25,24 +25,24 @@
|
||||
return
|
||||
|
||||
if(H.internal == src)
|
||||
H << "<span class='notice'>You close [src] valve.</span>"
|
||||
to_chat(H, "<span class='notice'>You close [src] valve.</span>")
|
||||
H.internal = null
|
||||
H.update_internals_hud_icon(0)
|
||||
else
|
||||
if(!H.getorganslot("breathing_tube"))
|
||||
if(!H.wear_mask)
|
||||
H << "<span class='warning'>You need a mask!</span>"
|
||||
to_chat(H, "<span class='warning'>You need a mask!</span>")
|
||||
return
|
||||
if(H.wear_mask.mask_adjusted)
|
||||
H.wear_mask.adjustmask(H)
|
||||
if(!(H.wear_mask.flags & MASKINTERNALS))
|
||||
H << "<span class='warning'>[H.wear_mask] can't use [src]!</span>"
|
||||
to_chat(H, "<span class='warning'>[H.wear_mask] can't use [src]!</span>")
|
||||
return
|
||||
|
||||
if(H.internal)
|
||||
H << "<span class='notice'>You switch your internals to [src].</span>"
|
||||
to_chat(H, "<span class='notice'>You switch your internals to [src].</span>")
|
||||
else
|
||||
H << "<span class='notice'>You open [src] valve.</span>"
|
||||
to_chat(H, "<span class='notice'>You open [src] valve.</span>")
|
||||
H.internal = src
|
||||
H.update_internals_hud_icon(1)
|
||||
H.update_action_buttons_icon()
|
||||
@@ -69,10 +69,10 @@
|
||||
if (istype(src.loc, /obj/item/assembly))
|
||||
icon = src.loc
|
||||
if(!in_range(src, user))
|
||||
if (icon == src) user << "<span class='notice'>If you want any more information you'll need to get closer.</span>"
|
||||
if (icon == src) to_chat(user, "<span class='notice'>If you want any more information you'll need to get closer.</span>")
|
||||
return
|
||||
|
||||
user << "<span class='notice'>The pressure gauge reads [src.air_contents.return_pressure()] kPa.</span>"
|
||||
to_chat(user, "<span class='notice'>The pressure gauge reads [src.air_contents.return_pressure()] kPa.</span>")
|
||||
|
||||
var/celsius_temperature = src.air_contents.temperature-T0C
|
||||
var/descriptive
|
||||
@@ -90,7 +90,7 @@
|
||||
else
|
||||
descriptive = "furiously hot"
|
||||
|
||||
user << "<span class='notice'>It feels [descriptive].</span>"
|
||||
to_chat(user, "<span class='notice'>It feels [descriptive].</span>")
|
||||
|
||||
/obj/item/weapon/tank/blob_act(obj/structure/blob/B)
|
||||
if(B && B.loc == loc)
|
||||
@@ -234,7 +234,7 @@
|
||||
if(!istype(src.loc,/obj/item/device/transfer_valve))
|
||||
message_admins("Explosive tank rupture! Last key to touch the tank was [src.fingerprintslast].")
|
||||
log_game("Explosive tank rupture! Last key to touch the tank was [src.fingerprintslast].")
|
||||
//world << "\blue[x],[y] tank is exploding: [pressure] kPa"
|
||||
//to_chat(world, "\blue[x],[y] tank is exploding: [pressure] kPa")
|
||||
//Give the gas a chance to build up more pressure through reacting
|
||||
air_contents.react()
|
||||
air_contents.react()
|
||||
@@ -243,7 +243,7 @@
|
||||
var/range = (pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE
|
||||
var/turf/epicenter = get_turf(loc)
|
||||
|
||||
//world << "\blue Exploding Pressure: [pressure] kPa, intensity: [range]"
|
||||
//to_chat(world, "\blue Exploding Pressure: [pressure] kPa, intensity: [range]")
|
||||
|
||||
explosion(epicenter, round(range*0.25), round(range*0.5), round(range), round(range*1.5))
|
||||
if(istype(src.loc,/obj/item/device/transfer_valve))
|
||||
@@ -252,7 +252,7 @@
|
||||
qdel(src)
|
||||
|
||||
else if(pressure > TANK_RUPTURE_PRESSURE)
|
||||
//world << "\blue[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]"
|
||||
//to_chat(world, "\blue[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]")
|
||||
if(integrity <= 0)
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
@@ -264,7 +264,7 @@
|
||||
integrity--
|
||||
|
||||
else if(pressure > TANK_LEAK_PRESSURE)
|
||||
//world << "\blue[x],[y] tank is leaking: [pressure] kPa, integrity [integrity]"
|
||||
//to_chat(world, "\blue[x],[y] tank is leaking: [pressure] kPa, integrity [integrity]")
|
||||
if(integrity <= 0)
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
set name = "Toggle Mister"
|
||||
set category = "Object"
|
||||
if (usr.get_item_by_slot(usr.getBackSlot()) != src)
|
||||
usr << "<span class='warning'>The watertank must be worn properly to use!</span>"
|
||||
to_chat(usr, "<span class='warning'>The watertank must be worn properly to use!</span>")
|
||||
return
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
@@ -48,7 +48,7 @@
|
||||
//Detach the nozzle into the user's hands
|
||||
if(!user.put_in_hands(noz))
|
||||
on = 0
|
||||
user << "<span class='warning'>You need a free hand to hold the mister!</span>"
|
||||
to_chat(user, "<span class='warning'>You need a free hand to hold the mister!</span>")
|
||||
return
|
||||
noz.loc = user
|
||||
else
|
||||
@@ -124,7 +124,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/mister/dropped(mob/user)
|
||||
..()
|
||||
user << "<span class='notice'>The mister snaps back onto the watertank.</span>"
|
||||
to_chat(user, "<span class='notice'>The mister snaps back onto the watertank.</span>")
|
||||
tank.on = 0
|
||||
loc = tank
|
||||
|
||||
@@ -173,7 +173,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/mister/janitor/attack_self(var/mob/user)
|
||||
amount_per_transfer_from_this = (amount_per_transfer_from_this == 10 ? 5 : 10)
|
||||
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>"
|
||||
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>")
|
||||
|
||||
//ATMOS FIRE FIGHTING BACKPACK
|
||||
|
||||
@@ -240,23 +240,23 @@
|
||||
if(EXTINGUISHER)
|
||||
nozzle_mode = NANOFROST
|
||||
tank.icon_state = "waterbackpackatmos_1"
|
||||
user << "Swapped to nanofrost launcher"
|
||||
to_chat(user, "Swapped to nanofrost launcher")
|
||||
return
|
||||
if(NANOFROST)
|
||||
nozzle_mode = METAL_FOAM
|
||||
tank.icon_state = "waterbackpackatmos_2"
|
||||
user << "Swapped to metal foam synthesizer"
|
||||
to_chat(user, "Swapped to metal foam synthesizer")
|
||||
return
|
||||
if(METAL_FOAM)
|
||||
nozzle_mode = EXTINGUISHER
|
||||
tank.icon_state = "waterbackpackatmos_0"
|
||||
user << "Swapped to water extinguisher"
|
||||
to_chat(user, "Swapped to water extinguisher")
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/weapon/extinguisher/mini/nozzle/dropped(mob/user)
|
||||
..()
|
||||
user << "<span class='notice'>The nozzle snaps back onto the tank!</span>"
|
||||
to_chat(user, "<span class='notice'>The nozzle snaps back onto the tank!</span>")
|
||||
tank.on = 0
|
||||
loc = tank
|
||||
|
||||
@@ -272,10 +272,10 @@
|
||||
return //Safety check so you don't blast yourself trying to refill your tank
|
||||
var/datum/reagents/R = reagents
|
||||
if(R.total_volume < 100)
|
||||
user << "<span class='warning'>You need at least 100 units of water to use the nanofrost launcher!</span>"
|
||||
to_chat(user, "<span class='warning'>You need at least 100 units of water to use the nanofrost launcher!</span>")
|
||||
return
|
||||
if(nanofrost_cooldown)
|
||||
user << "<span class='warning'>Nanofrost launcher is still recharging...</span>"
|
||||
to_chat(user, "<span class='warning'>Nanofrost launcher is still recharging...</span>")
|
||||
return
|
||||
nanofrost_cooldown = 1
|
||||
R.remove_any(100)
|
||||
@@ -300,7 +300,7 @@
|
||||
spawn(100)
|
||||
metal_synthesis_cooldown--
|
||||
else
|
||||
user << "<span class='warning'>Metal foam mix is still being synthesized...</span>"
|
||||
to_chat(user, "<span class='warning'>Metal foam mix is still being synthesized...</span>")
|
||||
return
|
||||
|
||||
/obj/effect/nanofrost_container
|
||||
@@ -358,7 +358,7 @@
|
||||
if(!istype(user))
|
||||
return
|
||||
if (user.get_item_by_slot(slot_back) != src)
|
||||
user << "<span class='warning'>The chemtank needs to be on your back before you can activate it!</span>"
|
||||
to_chat(user, "<span class='warning'>The chemtank needs to be on your back before you can activate it!</span>")
|
||||
return
|
||||
if(on)
|
||||
turn_off()
|
||||
@@ -406,13 +406,13 @@
|
||||
on = 1
|
||||
START_PROCESSING(SSobj, src)
|
||||
if(ismob(loc))
|
||||
loc << "<span class='notice'>[src] turns on.</span>"
|
||||
to_chat(loc, "<span class='notice'>[src] turns on.</span>")
|
||||
|
||||
/obj/item/weapon/reagent_containers/chemtank/proc/turn_off()
|
||||
on = 0
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
if(ismob(loc))
|
||||
loc << "<span class='notice'>[src] turns off.</span>"
|
||||
to_chat(loc, "<span class='notice'>[src] turns off.</span>")
|
||||
|
||||
/obj/item/weapon/reagent_containers/chemtank/process()
|
||||
if(!ishuman(loc))
|
||||
|
||||
@@ -49,7 +49,7 @@ Frequency:
|
||||
return
|
||||
var/turf/current_location = get_turf(usr)//What turf is the user on?
|
||||
if(!current_location||current_location.z==2)//If turf was not found or they're on z level 2.
|
||||
usr << "The [src] is malfunctioning."
|
||||
to_chat(usr, "The [src] is malfunctioning.")
|
||||
return
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)))
|
||||
usr.set_machine(src)
|
||||
@@ -142,7 +142,7 @@ Frequency:
|
||||
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
|
||||
user << "<span class='notice'>\The [src] is malfunctioning.</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] is malfunctioning.</span>")
|
||||
return
|
||||
var/list/L = list( )
|
||||
for(var/obj/machinery/computer/teleporter/com in machines)
|
||||
@@ -175,7 +175,7 @@ Frequency:
|
||||
var/atom/T = L[t1]
|
||||
var/area/A = get_area(T)
|
||||
if(A.noteleport)
|
||||
user << "<span class='notice'>\The [src] is malfunctioning.</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] is malfunctioning.</span>")
|
||||
return
|
||||
user.show_message("<span class='notice'>Locked In.</span>", 2)
|
||||
var/obj/effect/portal/P = new /obj/effect/portal(get_turf(src), T, src)
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
qdel(src)
|
||||
qdel(I)
|
||||
user.put_in_hands(S)
|
||||
user << "<span class='notice'>You place the bluespace crystal firmly into the igniter.</span>"
|
||||
to_chat(user, "<span class='notice'>You place the bluespace crystal firmly into the igniter.</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>You can't put the crystal onto the stunprod while it has a power cell installed!</span>")
|
||||
else
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
/obj/item/weapon/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
|
||||
|
||||
@@ -72,7 +73,7 @@
|
||||
/obj/item/weapon/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
|
||||
user << "<span class='notice'>You attach the screw driver bit to [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You attach the screw driver bit to [src].</span>")
|
||||
qdel(src)
|
||||
user.put_in_active_hand(s_drill)
|
||||
|
||||
@@ -167,6 +168,7 @@
|
||||
/obj/item/weapon/screwdriver/brass
|
||||
name = "brass screwdriver"
|
||||
desc = "A screwdriver made of brass. The handle feels freezing cold."
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
icon_state = "screwdriver_brass"
|
||||
toolspeed = 0.5
|
||||
|
||||
@@ -201,7 +203,7 @@
|
||||
/obj/item/weapon/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
|
||||
user << "<span class='notice'>You attach the bolt driver bit to [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You attach the bolt driver bit to [src].</span>")
|
||||
qdel(src)
|
||||
user.put_in_active_hand(b_drill)
|
||||
|
||||
@@ -259,6 +261,7 @@
|
||||
/obj/item/weapon/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
|
||||
|
||||
@@ -299,7 +302,7 @@
|
||||
/obj/item/weapon/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
|
||||
user << "<span class='notice'>You attach the pry jaws to [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You attach the pry jaws to [src].</span>")
|
||||
qdel(src)
|
||||
user.put_in_active_hand(pryjaws)
|
||||
/*
|
||||
@@ -426,7 +429,7 @@
|
||||
var/turf/location = get_turf(user)
|
||||
location.hotspot_expose(700, 50, 1)
|
||||
if(get_fuel() <= 0)
|
||||
user.AddLuminosity(-light_intensity)
|
||||
set_light(0)
|
||||
|
||||
if(isliving(O))
|
||||
var/mob/living/L = O
|
||||
@@ -438,8 +441,8 @@
|
||||
/obj/item/weapon/weldingtool/attack_self(mob/user)
|
||||
switched_on(user)
|
||||
if(welding)
|
||||
SetLuminosity(0)
|
||||
user.AddLuminosity(light_intensity)
|
||||
set_light(light_intensity)
|
||||
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -460,7 +463,7 @@
|
||||
return TRUE
|
||||
else
|
||||
if(M)
|
||||
M << "<span class='warning'>You need more welding fuel to complete this task!</span>"
|
||||
to_chat(M, "<span class='warning'>You need more welding fuel to complete this task!</span>")
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -480,12 +483,12 @@
|
||||
//Switches the welder on
|
||||
/obj/item/weapon/weldingtool/proc/switched_on(mob/user)
|
||||
if(!status)
|
||||
user << "<span class='warning'>[src] can't be turned on while unsecured!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] can't be turned on while unsecured!</span>")
|
||||
return
|
||||
welding = !welding
|
||||
if(welding)
|
||||
if(get_fuel() >= 1)
|
||||
user << "<span class='notice'>You switch [src] on.</span>"
|
||||
to_chat(user, "<span class='notice'>You switch [src] on.</span>")
|
||||
playsound(loc, acti_sound, 50, 1)
|
||||
force = 15
|
||||
damtype = "fire"
|
||||
@@ -493,21 +496,17 @@
|
||||
update_icon()
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
user << "<span class='warning'>You need more fuel!</span>"
|
||||
to_chat(user, "<span class='warning'>You need more fuel!</span>")
|
||||
switched_off(user)
|
||||
else
|
||||
user << "<span class='notice'>You switch [src] off.</span>"
|
||||
to_chat(user, "<span class='notice'>You switch [src] off.</span>")
|
||||
playsound(loc, deac_sound, 50, 1)
|
||||
switched_off(user)
|
||||
|
||||
//Switches the welder off
|
||||
/obj/item/weapon/weldingtool/proc/switched_off(mob/user)
|
||||
welding = 0
|
||||
if(user == loc) //If player is holding the welder
|
||||
user.AddLuminosity(-light_intensity)
|
||||
SetLuminosity(0)
|
||||
else
|
||||
SetLuminosity(0)
|
||||
set_light(0)
|
||||
|
||||
force = 3
|
||||
damtype = "brute"
|
||||
@@ -515,24 +514,9 @@
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/weldingtool/pickup(mob/user)
|
||||
..()
|
||||
if(welding)
|
||||
SetLuminosity(0)
|
||||
user.AddLuminosity(light_intensity)
|
||||
|
||||
|
||||
/obj/item/weapon/weldingtool/dropped(mob/user)
|
||||
..()
|
||||
if(welding)
|
||||
if(user)
|
||||
user.AddLuminosity(-light_intensity)
|
||||
SetLuminosity(light_intensity)
|
||||
|
||||
|
||||
/obj/item/weapon/weldingtool/examine(mob/user)
|
||||
..()
|
||||
user << "It contains [get_fuel()] unit\s of fuel out of [max_fuel]."
|
||||
to_chat(user, "It contains [get_fuel()] unit\s of fuel out of [max_fuel].")
|
||||
|
||||
/obj/item/weapon/weldingtool/is_hot()
|
||||
return welding * heat
|
||||
@@ -544,13 +528,13 @@
|
||||
|
||||
/obj/item/weapon/weldingtool/proc/flamethrower_screwdriver(obj/item/I, mob/user)
|
||||
if(welding)
|
||||
user << "<span class='warning'>Turn it off first!</span>"
|
||||
to_chat(user, "<span class='warning'>Turn it off first!</span>")
|
||||
return
|
||||
status = !status
|
||||
if(status)
|
||||
user << "<span class='notice'>You resecure [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You resecure [src].</span>")
|
||||
else
|
||||
user << "<span class='notice'>[src] can now be attached and modified.</span>"
|
||||
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)
|
||||
@@ -562,10 +546,10 @@
|
||||
user.transferItemToLoc(src, F, TRUE)
|
||||
F.weldtool = src
|
||||
add_fingerprint(user)
|
||||
user << "<span class='notice'>You add a rod to a welder, starting to build a flamethrower.</span>"
|
||||
to_chat(user, "<span class='notice'>You add a rod to a welder, starting to build a flamethrower.</span>")
|
||||
user.put_in_hands(F)
|
||||
else
|
||||
user << "<span class='warning'>You need one rod to start building a flamethrower!</span>"
|
||||
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)
|
||||
if(welding && remove_fuel(1, user))
|
||||
@@ -644,6 +628,7 @@
|
||||
/obj/item/weapon/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
|
||||
icon_state = "brasswelder"
|
||||
item_state = "brasswelder"
|
||||
|
||||
@@ -688,6 +673,7 @@
|
||||
/obj/item/weapon/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
|
||||
|
||||
@@ -738,6 +724,6 @@
|
||||
/obj/item/weapon/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
|
||||
user << "<span class='notice'>You attach the cutting jaws to [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You attach the cutting jaws to [src].</span>")
|
||||
qdel(src)
|
||||
user.put_in_active_hand(cutjaws)
|
||||
|
||||
@@ -43,9 +43,9 @@
|
||||
update_icon()
|
||||
if(show_message)
|
||||
if(iscyborg(user))
|
||||
user << "<span class='notice'>You free up your module.</span>"
|
||||
to_chat(user, "<span class='notice'>You free up your module.</span>")
|
||||
else
|
||||
user << "<span class='notice'>You are now carrying [src] with one hand.</span>"
|
||||
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()
|
||||
@@ -57,13 +57,13 @@
|
||||
if(wielded)
|
||||
return
|
||||
if(ismonkey(user))
|
||||
user << "<span class='warning'>It's too heavy for you to wield fully.</span>"
|
||||
to_chat(user, "<span class='warning'>It's too heavy for you to wield fully.</span>")
|
||||
return
|
||||
if(user.get_inactive_held_item())
|
||||
user << "<span class='warning'>You need your other hand to be empty!</span>"
|
||||
to_chat(user, "<span class='warning'>You need your other hand to be empty!</span>")
|
||||
return
|
||||
if(user.get_num_arms() < 2)
|
||||
user << "<span class='warning'>You don't have enough hands.</span>"
|
||||
to_chat(user, "<span class='warning'>You don't have enough hands.</span>")
|
||||
return
|
||||
wielded = 1
|
||||
if(force_wielded)
|
||||
@@ -71,9 +71,9 @@
|
||||
name = "[name] (Wielded)"
|
||||
update_icon()
|
||||
if(iscyborg(user))
|
||||
user << "<span class='notice'>You dedicate your module to [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You dedicate your module to [src].</span>")
|
||||
else
|
||||
user << "<span class='notice'>You grab [src] with both hands.</span>"
|
||||
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~
|
||||
@@ -150,7 +150,7 @@
|
||||
|
||||
/obj/item/weapon/twohanded/required/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0)
|
||||
if(wielded && !slot_flags)
|
||||
M << "<span class='warning'>[src] is too cumbersome to carry with anything but your hands!</span>"
|
||||
to_chat(M, "<span class='warning'>[src] is too cumbersome to carry with anything but your hands!</span>")
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
if(get_dist(src,user) > 1)
|
||||
return
|
||||
if(H != null)
|
||||
user << "<span class='notice'>[src] is too cumbersome to carry in one hand!</span>"
|
||||
to_chat(user, "<span class='notice'>[src] is too cumbersome to carry in one hand!</span>")
|
||||
return
|
||||
if(src.loc != user)
|
||||
wield(user)
|
||||
@@ -186,7 +186,7 @@
|
||||
|
||||
/obj/item/weapon/twohanded/required/unwield(mob/living/carbon/user, show_message = TRUE)
|
||||
if(show_message)
|
||||
user << "<span class='notice'>You drop [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You drop [src].</span>")
|
||||
..(user, FALSE)
|
||||
user.dropItemToGround(src)
|
||||
|
||||
@@ -252,6 +252,7 @@
|
||||
armour_penetration = 35
|
||||
origin_tech = "magnets=4;syndicate=5"
|
||||
item_color = "green"
|
||||
light_color = "#00ff00"//green
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
block_chance = 75
|
||||
obj_integrity = 200
|
||||
@@ -259,10 +260,22 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 70)
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/hacked = 0
|
||||
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/New()
|
||||
/obj/item/weapon/twohanded/dualsaber/Initialize()
|
||||
..()
|
||||
item_color = pick("red", "blue", "green", "purple")
|
||||
if(LAZYLEN(possible_colors))
|
||||
item_color = pick(possible_colors)
|
||||
switch(item_color)
|
||||
if("red")
|
||||
light_color = LIGHT_COLOR_RED
|
||||
if("green")
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
if("blue")
|
||||
light_color = LIGHT_COLOR_LIGHT_CYAN
|
||||
if("purple")
|
||||
light_color = LIGHT_COLOR_LAVENDER
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
@@ -278,7 +291,7 @@
|
||||
/obj/item/weapon/twohanded/dualsaber/attack(mob/target, mob/living/carbon/human/user)
|
||||
if(user.has_dna())
|
||||
if(user.dna.check_mutation(HULK))
|
||||
user << "<span class='warning'>You grip the blade too hard and accidentally close it!</span>"
|
||||
to_chat(user, "<span class='warning'>You grip the blade too hard and accidentally close it!</span>")
|
||||
unwield()
|
||||
return
|
||||
..()
|
||||
@@ -289,14 +302,14 @@
|
||||
INVOKE_ASYNC(src, .proc/jedi_spin, user)
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/proc/jedi_spin(mob/living/user)
|
||||
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2))
|
||||
for(var/i in list(NORTH,SOUTH,EAST,WEST,EAST,SOUTH,NORTH,SOUTH,EAST,WEST,EAST,SOUTH))
|
||||
user.setDir(i)
|
||||
if(i == 8)
|
||||
if(i == WEST)
|
||||
user.emote("flip")
|
||||
sleep(1)
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/proc/impale(mob/living/user)
|
||||
user << "<span class='warning'>You twirl around a bit before losing your balance and impaling yourself on [src].</span>"
|
||||
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
|
||||
@@ -309,13 +322,13 @@
|
||||
|
||||
/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
|
||||
if(wielded)
|
||||
user << "<span class='warning'>You can't pick up such dangerous item with your meaty hands without losing fingers, better not to!</span>"
|
||||
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.
|
||||
if(M.has_dna())
|
||||
if(M.dna.check_mutation(HULK))
|
||||
M << "<span class='warning'>You lack the grace to wield this!</span>"
|
||||
to_chat(M, "<span class='warning'>You lack the grace to wield this!</span>")
|
||||
return
|
||||
..()
|
||||
if(wielded)
|
||||
@@ -323,6 +336,7 @@
|
||||
w_class = w_class_on
|
||||
hitsound = 'sound/weapons/blade1.ogg'
|
||||
START_PROCESSING(SSobj, src)
|
||||
set_light(brightness_on)
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/unwield() //Specific unwield () to switch hitsounds.
|
||||
sharpness = initial(sharpness)
|
||||
@@ -330,9 +344,12 @@
|
||||
..()
|
||||
hitsound = "swing_hit"
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
set_light(0)
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/process()
|
||||
if(wielded)
|
||||
if(hacked)
|
||||
light_color = pick(LIGHT_COLOR_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER)
|
||||
open_flame()
|
||||
else
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
@@ -356,21 +373,27 @@
|
||||
// Light your candles while spinning around the room
|
||||
INVOKE_ASYNC(src, .proc/jedi_spin, user)
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/green/New()
|
||||
item_color = "green"
|
||||
/obj/item/weapon/twohanded/dualsaber/green
|
||||
possible_colors = list("green")
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/red/New()
|
||||
item_color = "red"
|
||||
/obj/item/weapon/twohanded/dualsaber/red
|
||||
possible_colors = list("red")
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/blue
|
||||
possible_colors = list("blue")
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/purple
|
||||
possible_colors = list("purple")
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/device/multitool))
|
||||
if(hacked == 0)
|
||||
hacked = 1
|
||||
user << "<span class='warning'>2XRNBW_ENGAGE</span>"
|
||||
to_chat(user, "<span class='warning'>2XRNBW_ENGAGE</span>")
|
||||
item_color = "rainbow"
|
||||
update_icon()
|
||||
else
|
||||
user << "<span class='warning'>It's starting to look like a triple rainbow - no, nevermind.</span>"
|
||||
to_chat(user, "<span class='warning'>It's starting to look like a triple rainbow - no, nevermind.</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -434,10 +457,14 @@
|
||||
src.war_cry = input
|
||||
|
||||
/obj/item/weapon/twohanded/spear/CheckParts(list/parts_list)
|
||||
var/obj/item/weapon/twohanded/spear/S = locate() in parts_list
|
||||
if(S)
|
||||
if(S.explosive)
|
||||
S.explosive.forceMove(get_turf(src))
|
||||
S.explosive = null
|
||||
parts_list -= S
|
||||
qdel(S)
|
||||
..()
|
||||
if(explosive)
|
||||
explosive.loc = get_turf(src.loc)
|
||||
explosive = null
|
||||
var/obj/item/weapon/grenade/G = locate() in contents
|
||||
if(G)
|
||||
explosive = G
|
||||
@@ -467,7 +494,7 @@
|
||||
|
||||
/obj/item/weapon/twohanded/required/chainsaw/attack_self(mob/user)
|
||||
on = !on
|
||||
user << "As you pull the starting cord dangling from [src], [on ? "it begins to whirr." : "the chain stops moving."]"
|
||||
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)
|
||||
throwforce = on ? force_on : initial(force)
|
||||
icon_state = "chainsaw_[on ? "on" : "off"]"
|
||||
@@ -551,6 +578,9 @@
|
||||
force_unwielded = 19
|
||||
force_wielded = 25
|
||||
|
||||
/obj/item/weapon/twohanded/pitchfork/demonic/Initialize()
|
||||
set_light(3,6,LIGHT_COLOR_RED)
|
||||
|
||||
/obj/item/weapon/twohanded/pitchfork/demonic/greater
|
||||
force = 24
|
||||
throwforce = 50
|
||||
@@ -584,10 +614,21 @@
|
||||
|
||||
/obj/item/weapon/twohanded/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user)
|
||||
if(user.mind && !user.mind.devilinfo && (user.mind.soulOwner != user.mind))
|
||||
user << "<span class ='warning'>[src] burns in your hands.</span>"
|
||||
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)
|
||||
if(!proximity || !wielded)
|
||||
return
|
||||
if(istype(target, /turf/closed/wall))
|
||||
var/turf/closed/wall/W = target
|
||||
user.visible_message("<span class='danger'>[user] blasts \the [target] with \the [src]!</span>")
|
||||
playsound(target, 'sound/magic/Disintegrate.ogg', 100, 1)
|
||||
W.break_wall()
|
||||
return 1
|
||||
..()
|
||||
|
||||
//HF blade
|
||||
|
||||
/obj/item/weapon/twohanded/vibro_weapon
|
||||
|
||||
@@ -25,12 +25,12 @@
|
||||
/obj/item/weapon/vending_refill/examine(mob/user)
|
||||
..()
|
||||
if(charges[1] > 0)
|
||||
user << "It can restock [charges[1]+charges[2]+charges[3]] item(s)."
|
||||
to_chat(user, "It can restock [charges[1]+charges[2]+charges[3]] item(s).")
|
||||
else
|
||||
user << "It's empty!"
|
||||
to_chat(user, "It's empty!")
|
||||
|
||||
//NOTE I decided to go for about 1/3 of a machine's capacity
|
||||
//^ Your ideas suck. Why not just make it automatic?
|
||||
|
||||
/obj/item/weapon/vending_refill/boozeomat
|
||||
machine_name = "Booze-O-Mat"
|
||||
icon_state = "refill_booze"
|
||||
@@ -51,8 +51,8 @@
|
||||
/obj/item/weapon/vending_refill/cola
|
||||
machine_name = "Robust Softdrinks"
|
||||
icon_state = "refill_cola"
|
||||
charges = list(20, 2, 1)//of 60 standard, 6 contraband, 1 premium
|
||||
init_charges = list(20, 2, 1)
|
||||
charges = list(30, 4, 1)//of 90 standard, 12 contraband, 1 premium
|
||||
init_charges = list(30, 4, 1)
|
||||
|
||||
/obj/item/weapon/vending_refill/cigarette
|
||||
machine_name = "ShadyCigs Deluxe"
|
||||
@@ -63,29 +63,11 @@
|
||||
/obj/item/weapon/vending_refill/autodrobe
|
||||
machine_name = "AutoDrobe"
|
||||
icon_state = "refill_costume"
|
||||
charges = list(54, 23, 3)// of 94 standard, 6 contraband, 9 premium
|
||||
init_charges = list(54, 23, 3)
|
||||
charges = list(31, 2, 3)// of 94 standard, 6 contraband, 9 premium
|
||||
init_charges = list(27, 2, 3)
|
||||
|
||||
/obj/item/weapon/vending_refill/clothing
|
||||
machine_name = "ClothesMate"
|
||||
icon_state = "refill_clothes"
|
||||
charges = list(42, 13, 4)// of 109 standard, 12 contraband, 10 premium(?) (someone fucked this number up, who wants to recount?)
|
||||
init_charges = list(42, 13, 4)
|
||||
|
||||
/obj/item/weapon/vending_refill/kink
|
||||
machine_name = "KinkMate"
|
||||
icon_state = "refill_kink"
|
||||
charges = list(8, 5, 0)// of 20 standard, 12 contraband, 0 premium
|
||||
init_charges = list(8, 5, 0)
|
||||
|
||||
/obj/item/weapon/vending_refill/nazi
|
||||
machine_name = "nazivend"
|
||||
icon_state = "refill_nazi"
|
||||
charges = list(33, 13, 0)
|
||||
init_charges = list(33, 13, 0)
|
||||
|
||||
/obj/item/weapon/vending_refill/soviet
|
||||
machine_name = "sovietvend"
|
||||
icon_state = "refill_soviet"
|
||||
charges = list(47, 7, 0)
|
||||
init_charges = list(47, 7, 0)
|
||||
charges = list(31, 4, 4)// of 101 standard, 12 contraband, 10 premium(?)
|
||||
init_charges = list(31, 4, 4)
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
return (BRUTELOSS|FIRELOSS|TOXLOSS|OXYLOSS)
|
||||
|
||||
/obj/item/weapon/banhammer/attack(mob/M, mob/user)
|
||||
M << "<font color='red'><b> You have been banned FOR NO REISIN by [user]<b></font>"
|
||||
user << "<font color='red'>You have <b>BANNED</b> [M]</font>"
|
||||
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
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/claymore/highlander/pickup(mob/living/user)
|
||||
user << "<span class='notice'>The power of Scotland protects you! You are shielded from all stuns and knockdowns.</span>"
|
||||
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
|
||||
|
||||
@@ -108,9 +108,9 @@
|
||||
|
||||
/obj/item/weapon/claymore/highlander/examine(mob/user)
|
||||
..()
|
||||
user << "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade."
|
||||
to_chat(user, "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade.")
|
||||
if(nuke_disk)
|
||||
user << "<span class='boldwarning'>It's holding the nuke disk!</span>"
|
||||
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)
|
||||
. = ..()
|
||||
@@ -127,9 +127,9 @@
|
||||
if(H.client && H.mind.special_role == "highlander" && (!closest_victim || get_dist(user, closest_victim) < closest_distance))
|
||||
closest_victim = H
|
||||
if(!closest_victim)
|
||||
user << "<span class='warning'>[src] thrums for a moment and falls dark. Perhaps there's nobody nearby.</span>"
|
||||
to_chat(user, "<span class='warning'>[src] thrums for a moment and falls dark. Perhaps there's nobody nearby.</span>")
|
||||
return
|
||||
user << "<span class='danger'>[src] thrums and points to the [dir2text(get_dir(user, closest_victim))].</span>"
|
||||
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()
|
||||
return 1 //YOU THINK YOUR PUNY LASERS CAN STOP ME?
|
||||
@@ -140,39 +140,39 @@
|
||||
var/new_name = name
|
||||
switch(notches)
|
||||
if(1)
|
||||
user << "<span class='notice'>Your first kill - hopefully one of many. You scratch a notch into [src]'s blade.</span>"
|
||||
user << "<span class='warning'>You feel your fallen foe's soul entering your blade, restoring your wounds!</span>"
|
||||
to_chat(user, "<span class='notice'>Your first kill - hopefully one of many. You scratch a notch into [src]'s blade.</span>")
|
||||
to_chat(user, "<span class='warning'>You feel your fallen foe's soul entering your blade, restoring your wounds!</span>")
|
||||
new_name = "notched claymore"
|
||||
if(2)
|
||||
user << "<span class='notice'>Another falls before you. Another soul fuses with your own. Another notch in the blade.</span>"
|
||||
to_chat(user, "<span class='notice'>Another falls before you. Another soul fuses with your own. Another notch in the blade.</span>")
|
||||
new_name = "double-notched claymore"
|
||||
add_atom_colour(rgb(255, 235, 235), ADMIN_COLOUR_PRIORITY)
|
||||
if(3)
|
||||
user << "<span class='notice'>You're beginning to</span> <span class='danger'><b>relish</b> the <b>thrill</b> of <b>battle.</b></span>"
|
||||
to_chat(user, "<span class='notice'>You're beginning to</span> <span class='danger'><b>relish</b> the <b>thrill</b> of <b>battle.</b></span>")
|
||||
new_name = "triple-notched claymore"
|
||||
add_atom_colour(rgb(255, 215, 215), ADMIN_COLOUR_PRIORITY)
|
||||
if(4)
|
||||
user << "<span class='notice'>You've lost count of</span> <span class='boldannounce'>how many you've killed.</span>"
|
||||
to_chat(user, "<span class='notice'>You've lost count of</span> <span class='boldannounce'>how many you've killed.</span>")
|
||||
new_name = "many-notched claymore"
|
||||
add_atom_colour(rgb(255, 195, 195), ADMIN_COLOUR_PRIORITY)
|
||||
if(5)
|
||||
user << "<span class='boldannounce'>Five voices now echo in your mind, cheering the slaughter.</span>"
|
||||
to_chat(user, "<span class='boldannounce'>Five voices now echo in your mind, cheering the slaughter.</span>")
|
||||
new_name = "battle-tested claymore"
|
||||
add_atom_colour(rgb(255, 175, 175), ADMIN_COLOUR_PRIORITY)
|
||||
if(6)
|
||||
user << "<span class='boldannounce'>Is this what the vikings felt like? Visions of glory fill your head as you slay your sixth foe.</span>"
|
||||
to_chat(user, "<span class='boldannounce'>Is this what the vikings felt like? Visions of glory fill your head as you slay your sixth foe.</span>")
|
||||
new_name = "battle-scarred claymore"
|
||||
add_atom_colour(rgb(255, 155, 155), ADMIN_COLOUR_PRIORITY)
|
||||
if(7)
|
||||
user << "<span class='boldannounce'>Kill. Butcher. <i>Conquer.</i></span>"
|
||||
to_chat(user, "<span class='boldannounce'>Kill. Butcher. <i>Conquer.</i></span>")
|
||||
new_name = "vicious claymore"
|
||||
add_atom_colour(rgb(255, 135, 135), ADMIN_COLOUR_PRIORITY)
|
||||
if(8)
|
||||
user << "<span class='userdanger'>IT NEVER GETS OLD. THE <i>SCREAMING</i>. THE <i>BLOOD</i> AS IT <i>SPRAYS</i> ACROSS YOUR <i>FACE.</i></span>"
|
||||
to_chat(user, "<span class='userdanger'>IT NEVER GETS OLD. THE <i>SCREAMING</i>. THE <i>BLOOD</i> AS IT <i>SPRAYS</i> ACROSS YOUR <i>FACE.</i></span>")
|
||||
new_name = "bloodthirsty claymore"
|
||||
add_atom_colour(rgb(255, 115, 115), ADMIN_COLOUR_PRIORITY)
|
||||
if(9)
|
||||
user << "<span class='userdanger'>ANOTHER ONE FALLS TO YOUR BLOWS. ANOTHER WEAKLING UNFIT TO LIVE.</span>"
|
||||
to_chat(user, "<span class='userdanger'>ANOTHER ONE FALLS TO YOUR BLOWS. ANOTHER WEAKLING UNFIT TO LIVE.</span>")
|
||||
new_name = "gore-stained claymore"
|
||||
add_atom_colour(rgb(255, 95, 95), ADMIN_COLOUR_PRIORITY)
|
||||
if(10)
|
||||
@@ -234,14 +234,14 @@
|
||||
qdel(src)
|
||||
|
||||
user.put_in_hands(S)
|
||||
user << "<span class='notice'>You fasten the glass shard to the top of the rod with the cable.</span>"
|
||||
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 & NODROP))
|
||||
var/obj/item/weapon/melee/baton/cattleprod/P = new /obj/item/weapon/melee/baton/cattleprod
|
||||
|
||||
remove_item_from_storage(user)
|
||||
|
||||
user << "<span class='notice'>You fasten [I] to the top of the rod with the cable.</span>"
|
||||
to_chat(user, "<span class='notice'>You fasten [I] to the top of the rod with the cable.</span>")
|
||||
|
||||
qdel(I)
|
||||
qdel(src)
|
||||
@@ -470,13 +470,13 @@
|
||||
..()
|
||||
return
|
||||
if(homerun_ready)
|
||||
user << "<span class='notice'>You're already ready to do a home run!</span>"
|
||||
to_chat(user, "<span class='notice'>You're already ready to do a home run!</span>")
|
||||
..()
|
||||
return
|
||||
user << "<span class='warning'>You begin gathering strength...</span>"
|
||||
to_chat(user, "<span class='warning'>You begin gathering strength...</span>")
|
||||
playsound(get_turf(src), 'sound/magic/lightning_chargeup.ogg', 65, 1)
|
||||
if(do_after(user, 90, target = src))
|
||||
user << "<span class='userdanger'>You gather power! Time for a home run!</span>"
|
||||
to_chat(user, "<span class='userdanger'>You gather power! Time for a home run!</span>")
|
||||
homerun_ready = 1
|
||||
..()
|
||||
|
||||
@@ -538,7 +538,7 @@
|
||||
if(proximity_flag)
|
||||
if(is_type_in_typecache(target, strong_against))
|
||||
new /obj/effect/decal/cleanable/deadcockroach(get_turf(target))
|
||||
user << "<span class='warning'>You easily splat the [target].</span>"
|
||||
to_chat(user, "<span class='warning'>You easily splat the [target].</span>")
|
||||
if(istype(target, /mob/living/))
|
||||
var/mob/living/bug = target
|
||||
bug.death(1)
|
||||
|
||||
Reference in New Issue
Block a user