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:
Poojawa
2017-03-21 11:44:10 -05:00
committed by GitHub
parent 099a6c8764
commit f67e9f6d87
1476 changed files with 344416 additions and 40694 deletions
+19 -19
View File
@@ -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>")
+34 -255
View File
@@ -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
+6 -6
View File
@@ -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
+27 -27
View File
@@ -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
+5 -5
View File
@@ -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)
+11 -11
View File
@@ -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
+18 -19
View File
@@ -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()
+1 -1
View File
@@ -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")
+4 -4
View File
@@ -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)
+15 -15
View File
@@ -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
+10 -29
View File
@@ -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>")
+21 -18
View File
@@ -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
+40 -18
View File
@@ -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
+4 -4
View File
@@ -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()
+10 -10
View File
@@ -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)
+1 -1
View File
@@ -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))
+8 -8
View File
@@ -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
+5 -5
View File
@@ -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 -11
View File
@@ -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)
+7 -7
View File
@@ -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
..()
+12 -12
View File
@@ -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)
+1 -1
View File
@@ -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
+24 -38
View File
@@ -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)
+70 -29
View File
@@ -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)
+23 -23
View File
@@ -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)