12/21 modernizations from TG live (#103)
* sync (#3) * shuttle auto call * Merge /vore into /master (#39) * progress * Compile errors fixed No idea if it's test worthy tho as conflicts with race overhaul and narky removal. * Update admins.txt * efforts continue Fuck grab code, seriously * grab code is cancer * Execute the Narkism Do not hesitate. Show no mercy. * holy shit grab code is awful * have I bitched about grab code My bitching, let me show you it * código de agarre es una mierda No really it is * yeah I don't even know anymore. * Lolnope. Fuck grab code * I'm not even sure what to fix anymore * Self eating is not an acceptable fate * Taste the void, son. * My code doesn't pass it's own sanity check. Maybe it's a sign of things to come. * uncommented and notes * It Works and I Don't Know Why (#38) * shuttle auto call * it works and I don't know why * Subsystem 12/21 Most Recent TG subsystem folder * globalvars 12/21 Tossed out the flavor_misc and parallax files * Onclick 12/21 as well as .dme updates * _defines 12/21 ommited old _MC.dm * _HELPERS 12/21 Preserved snowflake placement of furry sprites * _defeines/genetics reapplied narkism holdover for snowflake races. * Oops forgot mutant colors * modules porting 12/21 + Sounds/icons Admin, Client and most of mob life files ommitted * enviroment file * Admin optimizations ahelp log system kept * Mob ports 12/21 Flavor text preserved * datums ported 12/21 * Game ported 12/21 * batch of duplicate fixes/dogborg work Dogborgs need to be modernized to refractored borg standards. * moar fixes * Maps and futher compile fixes
This commit is contained in:
@@ -14,7 +14,7 @@ AI MODULES
|
||||
desc = "An AI Module for programming laws to an AI."
|
||||
flags = CONDUCT
|
||||
force = 5
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
@@ -301,7 +301,7 @@ AI MODULES
|
||||
var/subject = "human being"
|
||||
|
||||
/obj/item/weapon/aiModule/core/full/asimov/attack_self(var/mob/user as mob)
|
||||
var/targName = stripped_input(user, "Please enter a new subject that asimov is concerned with.", "Asimov to who?", subject, MAX_MESSAGE_LEN)
|
||||
var/targName = stripped_input(user, "Please enter a new subject that asimov is concerned with.", "Asimov to whom?", subject, MAX_MESSAGE_LEN)
|
||||
if(!targName)
|
||||
return
|
||||
subject = targName
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
|
||||
|
||||
|
||||
/*
|
||||
CONTAINS:
|
||||
@@ -17,10 +17,12 @@ RCD
|
||||
throwforce = 10
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
materials = list(MAT_METAL=100000)
|
||||
origin_tech = "engineering=4;materials=2"
|
||||
req_access_txt = "11"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/datum/effect_system/spark_spread/spark_system
|
||||
var/matter = 0
|
||||
var/max_matter = 160
|
||||
@@ -28,6 +30,8 @@ RCD
|
||||
var/mode = 1
|
||||
var/canRturf = 0
|
||||
var/airlock_type = /obj/machinery/door/airlock
|
||||
var/window_type = /obj/structure/window/fulltile
|
||||
|
||||
var/advanced_airlock_setting = 1 //Set to 1 if you want more paintjobs available
|
||||
var/sheetmultiplier = 4 //Controls the amount of matter added for each glass/metal sheet, triple for plasteel
|
||||
var/plasteelmultiplier = 3 //Plasteel is worth 3 times more than glass or metal
|
||||
@@ -40,8 +44,11 @@ RCD
|
||||
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
|
||||
@@ -55,16 +62,37 @@ RCD
|
||||
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/no_ammo_message = "<span class='warning'>The \'Low Ammo\' light on \
|
||||
the RCD blinks yellow.</span>"
|
||||
|
||||
/obj/item/weapon/rcd/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] sets the RCD to 'Wall' and points it down \his throat! It looks like \he's trying to commit suicide..</span>")
|
||||
user.visible_message("<span class='suicide'>[user] sets the RCD to 'Wall' and points it down [user.p_their()] throat! It looks like [user.p_theyre()] trying to commit suicide..</span>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/rcd/verb/toggle_window_type()
|
||||
set name = "Toggle Window Type"
|
||||
set category = "Object"
|
||||
set src in usr // What does this do?
|
||||
|
||||
var window_type_name
|
||||
|
||||
if (window_type == /obj/structure/window/fulltile)
|
||||
window_type = /obj/structure/window/reinforced/fulltile
|
||||
window_type_name = "reinforced glass"
|
||||
else
|
||||
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>"
|
||||
|
||||
/obj/item/weapon/rcd/verb/change_airlock_access()
|
||||
set name = "Change Airlock Access"
|
||||
set category = "Object"
|
||||
@@ -151,6 +179,7 @@ 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")
|
||||
@@ -179,6 +208,7 @@ 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
|
||||
|
||||
@@ -210,6 +240,7 @@ 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)
|
||||
@@ -221,10 +252,10 @@ RCD
|
||||
qdel(spark_system)
|
||||
spark_system = null
|
||||
rcd_list -= src
|
||||
return ..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(isrobot(user)) //Make sure cyborgs can't load their RCDs
|
||||
if(iscyborg(user)) //Make sure cyborgs can't load their RCDs
|
||||
return
|
||||
var/loaded = 0
|
||||
if(istype(W, /obj/item/weapon/rcd_ammo))
|
||||
@@ -294,14 +325,14 @@ RCD
|
||||
|
||||
/obj/item/weapon/rcd/afterattack(atom/A, mob/user, proximity)
|
||||
if(!proximity) return 0
|
||||
if(istype(A,/area/shuttle)||istype(A,/turf/open/space/transit))
|
||||
if(istype(A,/turf/open/space/transit))
|
||||
return 0
|
||||
if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock) || istype(A, /obj/structure/grille) || istype(A, /obj/structure/window)))
|
||||
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(istype(A, /turf/open/space))
|
||||
if(isspaceturf(A))
|
||||
var/turf/open/space/S = A
|
||||
if(useResource(floorcost, user))
|
||||
user << "<span class='notice'>You start building floor...</span>"
|
||||
@@ -310,20 +341,36 @@ RCD
|
||||
return 1
|
||||
return 0
|
||||
|
||||
if(istype(A, /turf/open/floor))
|
||||
if(isfloorturf(A))
|
||||
var/turf/open/floor/F = A
|
||||
if(checkResource(wallcost, user))
|
||||
user << "<span class='notice'>You start building 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(istype(A, /turf/open/floor))
|
||||
if(isfloorturf(A))
|
||||
if(checkResource(airlockcost, user))
|
||||
var/door_check = 1
|
||||
for(var/obj/machinery/door/D in A)
|
||||
@@ -363,12 +410,12 @@ RCD
|
||||
return 0
|
||||
|
||||
if(3)
|
||||
if(istype(A, /turf/closed/wall))
|
||||
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 wall...</span>"
|
||||
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
|
||||
@@ -377,7 +424,7 @@ RCD
|
||||
return 1
|
||||
return 0
|
||||
|
||||
if(istype(A, /turf/open/floor))
|
||||
if(isfloorturf(A))
|
||||
var/turf/open/floor/F = A
|
||||
if(istype(F, /turf/open/floor/engine) && !canRturf)
|
||||
return 0
|
||||
@@ -427,15 +474,28 @@ RCD
|
||||
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(istype(A, /turf/open/floor))
|
||||
if(isfloorturf(A))
|
||||
if(checkResource(grillecost, user))
|
||||
for(var/obj/structure/grille/GRILLE in A)
|
||||
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)
|
||||
@@ -444,14 +504,24 @@ RCD
|
||||
return 0
|
||||
return 0
|
||||
if(istype(A, /obj/structure/grille))
|
||||
if(checkResource(windowcost, user))
|
||||
user << "<span class='notice'>You start building a window...</span>"
|
||||
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(windowcost, user)) return 0
|
||||
if(!useResource(cost, user)) return 0
|
||||
activate()
|
||||
var/obj/structure/window/WD = new/obj/structure/window/fulltile(A.loc)
|
||||
var /obj/structure/window/WD = new window_type(A.loc)
|
||||
WD.anchored = 1
|
||||
return 1
|
||||
return 0
|
||||
@@ -463,13 +533,18 @@ RCD
|
||||
|
||||
/obj/item/weapon/rcd/proc/useResource(amount, mob/user)
|
||||
if(matter < amount)
|
||||
if(user)
|
||||
user << no_ammo_message
|
||||
return 0
|
||||
matter -= amount
|
||||
desc = "An RCD. It currently holds [matter]/[max_matter] matter-units."
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/rcd/proc/checkResource(amount, mob/user)
|
||||
return matter >= amount
|
||||
. = matter >= amount
|
||||
if(!. && user)
|
||||
user << no_ammo_message
|
||||
return .
|
||||
|
||||
/obj/item/weapon/rcd/proc/detonate_pulse()
|
||||
audible_message("<span class='danger'><b>[src] begins to vibrate and \
|
||||
@@ -483,27 +558,38 @@ RCD
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/weapon/rcd/borg/useResource(amount, mob/user)
|
||||
if(!isrobot(user))
|
||||
return 0
|
||||
var/mob/living/silicon/robot/borgy = user
|
||||
if(!borgy.cell)
|
||||
return 0
|
||||
return borgy.cell.use(amount * 72) //borgs get 1.3x the use of their RCDs
|
||||
|
||||
/obj/item/weapon/rcd/borg/checkResource(amount, mob/user)
|
||||
if(!isrobot(user))
|
||||
return 0
|
||||
var/mob/living/silicon/robot/borgy = user
|
||||
if(!borgy.cell)
|
||||
return 0
|
||||
return borgy.cell.charge >= (amount * 72)
|
||||
|
||||
/obj/item/weapon/rcd/borg/New()
|
||||
..()
|
||||
no_ammo_message = "<span class='warning'>Insufficient charge.</span>"
|
||||
desc = "A device used to rapidly build walls and floors."
|
||||
canRturf = 1
|
||||
|
||||
/obj/item/weapon/rcd/borg/useResource(amount, mob/user)
|
||||
if(!iscyborg(user))
|
||||
return 0
|
||||
var/mob/living/silicon/robot/borgy = user
|
||||
if(!borgy.cell)
|
||||
if(user)
|
||||
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
|
||||
return .
|
||||
|
||||
/obj/item/weapon/rcd/borg/checkResource(amount, mob/user)
|
||||
if(!iscyborg(user))
|
||||
return 0
|
||||
var/mob/living/silicon/robot/borgy = user
|
||||
if(!borgy.cell)
|
||||
if(user)
|
||||
user << no_ammo_message
|
||||
return 0
|
||||
. = borgy.cell.charge >= (amount * 72)
|
||||
if(!. && user)
|
||||
user << no_ammo_message
|
||||
return .
|
||||
|
||||
/obj/item/weapon/rcd/loaded
|
||||
matter = 160
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
|
||||
|
||||
|
||||
/*
|
||||
CONTAINS:
|
||||
@@ -130,9 +130,11 @@ var/global/list/RPD_recipes=list(
|
||||
throwforce = 10
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
materials = list(MAT_METAL=75000, MAT_GLASS=37500)
|
||||
origin_tech = "engineering=4;materials=2"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/datum/effect_system/spark_spread/spark_system
|
||||
var/working = 0
|
||||
var/p_type = PIPE_SIMPLE
|
||||
@@ -167,7 +169,7 @@ var/global/list/RPD_recipes=list(
|
||||
show_menu(user)
|
||||
|
||||
/obj/item/weapon/pipe_dispenser/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] points the end of the RPD down \his throat and presses a button! It looks like \he's trying to commit suicide...</span>")
|
||||
user.visible_message("<span class='suicide'>[user] points the end of the RPD down [user.p_their()] throat and presses a button! It looks like [user.p_theyre()] trying to commit suicide...</span>")
|
||||
playsound(get_turf(user), 'sound/machines/click.ogg', 50, 1)
|
||||
playsound(get_turf(user), 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
return(BRUTELOSS)
|
||||
@@ -540,9 +542,8 @@ var/global/list/RPD_recipes=list(
|
||||
return 0
|
||||
var/obj/machinery/atmospherics/pipe/P = A
|
||||
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
|
||||
P.color = paint_colors[paint_color]
|
||||
P.add_atom_colour(paint_colors[paint_color], FIXED_COLOUR_PRIORITY)
|
||||
P.pipe_color = paint_colors[paint_color]
|
||||
P.stored.color = paint_colors[paint_color]
|
||||
user.visible_message("<span class='notice'>[user] paints \the [P] [paint_color].</span>","<span class='notice'>You paint \the [P] [paint_color].</span>")
|
||||
//P.update_icon()
|
||||
P.update_node_icon()
|
||||
@@ -562,7 +563,7 @@ var/global/list/RPD_recipes=list(
|
||||
user << "<span class='warning'>The [src]'s error light flickers! Perhaps you need to only use it on pipes and pipe meters?</span>"
|
||||
return 0
|
||||
if(ATMOS_MODE)
|
||||
if(!(istype(A, /turf)))
|
||||
if(!isturf(A))
|
||||
user << "<span class='warning'>The [src]'s error light flickers!</span>"
|
||||
return 0
|
||||
user << "<span class='notice'>You start building pipes...</span>"
|
||||
@@ -577,7 +578,7 @@ var/global/list/RPD_recipes=list(
|
||||
return 0
|
||||
|
||||
if(METER_MODE)
|
||||
if(!(istype(A, /turf)))
|
||||
if(!isturf(A))
|
||||
user << "<span class='warning'>The [src]'s error light flickers!</span>"
|
||||
return 0
|
||||
user << "<span class='notice'>You start building meter...</span>"
|
||||
|
||||
@@ -12,65 +12,63 @@ RSF
|
||||
density = 0
|
||||
anchored = 0
|
||||
flags = NOBLUDGEON
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
|
||||
var/matter = 0
|
||||
var/mode = 1
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/weapon/rsf/New()
|
||||
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
|
||||
return
|
||||
/obj/item/weapon/rsf/examine(mob/user)
|
||||
..()
|
||||
user << "<span class='notice'>It currently holds [matter]/30 fabrication-units.</span>"
|
||||
|
||||
/obj/item/weapon/rsf/cyborg
|
||||
matter = 30
|
||||
|
||||
/obj/item/weapon/rsf/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/rcd_ammo))
|
||||
if ((matter + 10) > 30)
|
||||
if((matter + 10) > 30)
|
||||
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."
|
||||
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/rsf/attack_self(mob/user)
|
||||
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
|
||||
if (mode == 1)
|
||||
mode = 2
|
||||
user << "Changed dispensing mode to 'Drinking Glass'"
|
||||
return
|
||||
if (mode == 2)
|
||||
mode = 3
|
||||
user << "Changed dispensing mode to 'Paper'"
|
||||
return
|
||||
if (mode == 3)
|
||||
mode = 4
|
||||
user << "Changed dispensing mode to 'Pen'"
|
||||
return
|
||||
if (mode == 4)
|
||||
mode = 5
|
||||
user << "Changed dispensing mode to 'Dice Pack'"
|
||||
return
|
||||
if (mode == 5)
|
||||
mode = 6
|
||||
user << "Changed dispensing mode to 'Cigarette'"
|
||||
return
|
||||
if (mode == 6)
|
||||
mode = 1
|
||||
user << "Changed dispensing mode to 'Dosh'"
|
||||
return
|
||||
switch(mode)
|
||||
if(1)
|
||||
mode = 2
|
||||
user << "Changed dispensing mode to 'Drinking Glass'"
|
||||
if(2)
|
||||
mode = 3
|
||||
user << "Changed dispensing mode to 'Paper'"
|
||||
if(3)
|
||||
mode = 4
|
||||
user << "Changed dispensing mode to 'Pen'"
|
||||
if(4)
|
||||
mode = 5
|
||||
user << "Changed dispensing mode to 'Dice Pack'"
|
||||
if(5)
|
||||
mode = 6
|
||||
user << "Changed dispensing mode to 'Cigarette'"
|
||||
if(6)
|
||||
mode = 1
|
||||
user << "Changed dispensing mode to 'Dosh'"
|
||||
// Change mode
|
||||
|
||||
/obj/item/weapon/rsf/afterattack(atom/A, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if (!(istype(A, /obj/structure/table) || istype(A, /turf/open/floor)))
|
||||
if (!(istype(A, /obj/structure/table) || isfloorturf(A)))
|
||||
return
|
||||
|
||||
if(matter < 1)
|
||||
user << "<span class='warning'>\The [src] doesn't have enough matter left.</span>"
|
||||
return
|
||||
if(isrobot(user))
|
||||
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>"
|
||||
@@ -105,13 +103,12 @@ RSF
|
||||
use_matter(10, user)
|
||||
|
||||
/obj/item/weapon/rsf/proc/use_matter(charge, mob/user)
|
||||
if (isrobot(user))
|
||||
if (iscyborg(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
R.cell.charge -= charge
|
||||
else
|
||||
matter--
|
||||
user << "The RSF now holds [matter]/30 fabrication-units."
|
||||
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
|
||||
|
||||
/obj/item/weapon/cookiesynth
|
||||
name = "Cookie Synthesizer"
|
||||
@@ -123,10 +120,11 @@ RSF
|
||||
var/cooldown = 0
|
||||
var/cooldowndelay = 10
|
||||
var/emagged = 0
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/weapon/cookiesynth/New()
|
||||
desc = "A self recharging cookie fabricator. It currently holds [matter]/10 cookie-units."
|
||||
/obj/item/weapon/cookiesynth/examine(mob/user)
|
||||
..()
|
||||
user << "<span class='notice'>It currently holds [matter]/10 cookie-units.</span>"
|
||||
|
||||
/obj/item/weapon/cookiesynth/attackby()
|
||||
return
|
||||
@@ -141,7 +139,7 @@ RSF
|
||||
|
||||
/obj/item/weapon/cookiesynth/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot/P = null
|
||||
if(isrobot(user))
|
||||
if(iscyborg(user))
|
||||
P = user
|
||||
if(emagged&&!toxin)
|
||||
toxin = 1
|
||||
@@ -154,7 +152,7 @@ RSF
|
||||
user << "Cookie Synthesizer Reset"
|
||||
|
||||
/obj/item/weapon/cookiesynth/process()
|
||||
if (matter < 10)
|
||||
if(matter < 10)
|
||||
matter++
|
||||
|
||||
/obj/item/weapon/cookiesynth/afterattack(atom/A, mob/user, proximity)
|
||||
@@ -162,12 +160,12 @@ RSF
|
||||
return
|
||||
if(!proximity)
|
||||
return
|
||||
if (!(istype(A, /obj/structure/table) || istype(A, /turf/open/floor)))
|
||||
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>"
|
||||
return
|
||||
if(isrobot(user))
|
||||
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>"
|
||||
@@ -178,10 +176,9 @@ RSF
|
||||
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)
|
||||
if (isrobot(user))
|
||||
if (iscyborg(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
R.cell.charge -= 100
|
||||
else
|
||||
matter--
|
||||
desc = "A self recharging cookie fabricator. It currently holds [matter]/10 cookie-units."
|
||||
cooldown = world.time + cooldowndelay
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "paint sprayer"
|
||||
item_state = "paint sprayer"
|
||||
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
materials = list(MAT_METAL=50, MAT_GLASS=50)
|
||||
origin_tech = "engineering=2"
|
||||
@@ -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 \the [name]!</span>"
|
||||
user << "<span class='notice'>There is no toner cartridge installed in [src]!</span>"
|
||||
return 0
|
||||
else if(ink.charges < 1)
|
||||
user << "<span class='notice'>\The [name] is out of ink!</span>"
|
||||
user << "<span class='notice'>[src] is out of ink!</span>"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
@@ -46,7 +46,7 @@
|
||||
var/obj/item/organ/lungs/L = user.getorganslot("lungs")
|
||||
|
||||
if(can_use(user) && L)
|
||||
user.visible_message("<span class='suicide'>[user] is inhaling toner from \the [name]! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is inhaling toner from [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
use(user)
|
||||
|
||||
// Once you've inhaled the toner, you throw up your lungs
|
||||
@@ -55,7 +55,7 @@
|
||||
// Find out if there is an open turf in front of us,
|
||||
// and if not, pick the turf we are standing on.
|
||||
var/turf/T = get_step(get_turf(src), user.dir)
|
||||
if(!istype(T, /turf/open))
|
||||
if(!isopenturf(T))
|
||||
T = get_turf(src)
|
||||
|
||||
// they managed to lose their lungs between then and
|
||||
@@ -79,13 +79,13 @@
|
||||
|
||||
return (TOXLOSS|OXYLOSS)
|
||||
else if(can_use(user) && !L)
|
||||
user.visible_message("<span class='suicide'>[user] is spraying toner on \himself from \the [name]! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is spraying toner on [user.p_them()]self from [src]! It looks like [user.p_theyre()] trying to commit suicide.</span>")
|
||||
user.reagents.add_reagent("colorful_reagent", 1)
|
||||
user.reagents.reaction(user, TOUCH, 1)
|
||||
return TOXLOSS
|
||||
|
||||
else
|
||||
user.visible_message("<span class='suicide'>[user] is trying to inhale toner from \the [name]! It might be a suicide attempt if \the [name] had any toner.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is trying to inhale toner from [src]! It might be a suicide attempt if [src] had any toner.</span>")
|
||||
return SHAME
|
||||
|
||||
|
||||
@@ -107,12 +107,12 @@
|
||||
/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'>\the [name] already contains \a [ink].</span>"
|
||||
user << "<span class='notice'>[src] already contains \a [ink].</span>"
|
||||
return
|
||||
if(!user.unEquip(W))
|
||||
return
|
||||
W.loc = src
|
||||
user << "<span class='notice'>You install \the [W] into \the [name].</span>"
|
||||
user << "<span class='notice'>You install [W] into [src].</span>"
|
||||
ink = W
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
else
|
||||
@@ -123,5 +123,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 \the [ink] from \the [name].</span>"
|
||||
user << "<span class='notice'>You remove [ink] from [src].</span>"
|
||||
ink = null
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
name = "card"
|
||||
desc = "Does card things."
|
||||
icon = 'icons/obj/card.dmi'
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
var/list/files = list()
|
||||
|
||||
@@ -77,6 +77,8 @@
|
||||
icon_state = "id"
|
||||
item_state = "card-id"
|
||||
slot_flags = SLOT_ID
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100)
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
var/mining_points = 0 //For redeeming at mining equipment vendors
|
||||
var/list/access = list()
|
||||
var/registered_name = null // The name registered_name on the card
|
||||
@@ -131,6 +133,7 @@ update_label("John Doe", "Clowny")
|
||||
name = "agent card"
|
||||
access = list(access_maint_tunnels, access_syndicate)
|
||||
origin_tech = "syndicate=1"
|
||||
var/anyone = FALSE //Can anyone forge the ID or just syndicate?
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/New()
|
||||
..()
|
||||
@@ -145,13 +148,13 @@ update_label("John Doe", "Clowny")
|
||||
if(istype(O, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/I = O
|
||||
src.access |= I.access
|
||||
if(istype(user, /mob/living) && user.mind)
|
||||
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>"
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/attack_self(mob/user)
|
||||
if(istype(user, /mob/living) && user.mind)
|
||||
if(user.mind.special_role)
|
||||
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
|
||||
@@ -170,6 +173,9 @@ update_label("John Doe", "Clowny")
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/anyone
|
||||
anyone = TRUE
|
||||
|
||||
/obj/item/weapon/card/id/syndicate_command
|
||||
name = "syndicate ID card"
|
||||
desc = "An ID straight from the Syndicate."
|
||||
@@ -276,3 +282,17 @@ update_label("John Doe", "Clowny")
|
||||
/obj/item/weapon/card/id/mining
|
||||
name = "mining ID"
|
||||
access = list(access_mining, access_mining_station, access_mineral_storeroom)
|
||||
|
||||
/obj/item/weapon/card/id/away
|
||||
name = "a perfectly generic identification card"
|
||||
desc = "A perfectly generic identification card. Looks like it could use some flavor."
|
||||
access = list(access_away_general)
|
||||
|
||||
/obj/item/weapon/card/id/away/hotel
|
||||
name = "Staff ID"
|
||||
desc = "A staff ID used to access the hotel's doors."
|
||||
access = list(access_away_general, access_away_maint)
|
||||
|
||||
/obj/item/weapon/card/id/away/hotel/securty
|
||||
name = "Officer ID"
|
||||
access = list(access_away_general, access_away_maint, access_away_sec)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
icon = 'icons/obj/chronos.dmi'
|
||||
icon_state = "chronobackpack"
|
||||
item_state = "backpack"
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = SLOT_BACK
|
||||
slowdown = 1
|
||||
actions_types = list(/datum/action/item_action/equip_unequip_TED_Gun)
|
||||
@@ -45,7 +45,7 @@
|
||||
icon = 'icons/obj/chronos.dmi'
|
||||
icon_state = "chronogun"
|
||||
item_state = "chronogun"
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
flags = NODROP | DROPDEL
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/chrono_beam)
|
||||
can_charge = 0
|
||||
@@ -121,12 +121,11 @@
|
||||
name = "eradication beam"
|
||||
icon_state = "chronobolt"
|
||||
range = CHRONO_BEAM_RANGE
|
||||
color = null
|
||||
nodamage = 1
|
||||
var/obj/item/weapon/gun/energy/chrono_gun/gun = null
|
||||
|
||||
/obj/item/projectile/energy/chrono_beam/fire()
|
||||
gun = firer.get_active_hand()
|
||||
gun = firer.get_active_held_item()
|
||||
if(istype(gun))
|
||||
return ..()
|
||||
else
|
||||
@@ -152,7 +151,6 @@
|
||||
icon_state = "chronofield"
|
||||
density = 0
|
||||
anchored = 1
|
||||
unacidable = 1
|
||||
blend_mode = BLEND_MULTIPLY
|
||||
var/mob/living/captured = null
|
||||
var/obj/item/weapon/gun/energy/chrono_gun/gun = null
|
||||
@@ -255,7 +253,7 @@
|
||||
/obj/effect/chrono_field/ex_act()
|
||||
return
|
||||
|
||||
/obj/effect/chrono_field/blob_act(obj/effect/blob/B)
|
||||
/obj/effect/chrono_field/blob_act(obj/structure/blob/B)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -20,28 +20,26 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
desc = "A simple match stick, used for lighting fine smokables."
|
||||
icon = 'icons/obj/cigarettes.dmi'
|
||||
icon_state = "match_unlit"
|
||||
var/lit = 0
|
||||
var/lit = FALSE
|
||||
var/burnt = FALSE
|
||||
var/smoketime = 5
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
origin_tech = "materials=1"
|
||||
heat = 1000
|
||||
|
||||
/obj/item/weapon/match/process()
|
||||
var/turf/location = get_turf(src)
|
||||
smoketime--
|
||||
if(smoketime < 1)
|
||||
matchburnout()
|
||||
return
|
||||
if(location)
|
||||
location.hotspot_expose(700, 5)
|
||||
return
|
||||
else
|
||||
open_flame(heat)
|
||||
|
||||
/obj/item/weapon/match/fire_act()
|
||||
/obj/item/weapon/match/fire_act(exposed_temperature, exposed_volume)
|
||||
matchignite()
|
||||
|
||||
/obj/item/weapon/match/proc/matchignite()
|
||||
if(lit == 0)
|
||||
lit = 1
|
||||
if(!lit && !burnt)
|
||||
lit = TRUE
|
||||
icon_state = "match_lit"
|
||||
damtype = "fire"
|
||||
force = 3
|
||||
@@ -52,32 +50,32 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
attack_verb = list("burnt","singed")
|
||||
START_PROCESSING(SSobj, src)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/match/proc/matchburnout()
|
||||
if(lit == 1)
|
||||
lit = -1
|
||||
if(lit)
|
||||
lit = FALSE
|
||||
burnt = TRUE
|
||||
damtype = "brute"
|
||||
force = initial(force)
|
||||
icon_state = "match_burnt"
|
||||
item_state = "cigoff"
|
||||
name = "burnt match"
|
||||
desc = "A match. This one has seen better days."
|
||||
attack_verb = null
|
||||
attack_verb = list("flicked")
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/match/dropped(mob/user)
|
||||
matchburnout()
|
||||
return ..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/match/attack(mob/living/carbon/M, mob/living/carbon/user)
|
||||
if(!isliving(M))
|
||||
return
|
||||
if(M.IgniteMob())
|
||||
if(lit && M.IgniteMob())
|
||||
message_admins("[key_name_admin(user)] set [key_name_admin(M)] on fire")
|
||||
log_game("[key_name(user)] set [key_name(M)] on fire")
|
||||
var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M,user)
|
||||
if(lit && cig && user.a_intent == "help")
|
||||
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>"
|
||||
if(M == user)
|
||||
@@ -87,12 +85,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/proc/help_light_cig(mob/living/carbon/M, mob/living/carbon/user)
|
||||
if(!iscarbon(M))
|
||||
return
|
||||
if(istype(M.wear_mask, /obj/item/clothing/mask/cigarette))
|
||||
var/obj/item/clothing/mask/cigarette/cig = M.wear_mask
|
||||
return cig
|
||||
/obj/item/proc/help_light_cig(mob/living/M)
|
||||
var/mask_item = M.get_item_by_slot(slot_wear_mask)
|
||||
if(istype(mask_item, /obj/item/clothing/mask/cigarette))
|
||||
return mask_item
|
||||
|
||||
/obj/item/weapon/match/is_hot()
|
||||
return lit * heat
|
||||
@@ -106,7 +102,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
icon_state = "cigoff"
|
||||
throw_speed = 0.5
|
||||
item_state = "cigoff"
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
body_parts_covered = null
|
||||
var/lit = 0
|
||||
var/icon_on = "cigon" //Note - these are in masks.dmi not in cigarette.dmi
|
||||
@@ -118,12 +114,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
heat = 1000
|
||||
|
||||
/obj/item/clothing/mask/cigarette/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is huffing the [src.name] as quickly as they can! It looks like \he's trying to give \himself cancer.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is huffing [src] as quickly as [user.p_they()] can! It looks like [user.p_theyre()] trying to give [user.p_them()]self cancer.</span>")
|
||||
return (TOXLOSS|OXYLOSS)
|
||||
|
||||
/obj/item/clothing/mask/cigarette/New()
|
||||
..()
|
||||
create_reagents(chem_volume) // making the cigarette a chemical holder with a maximum volume of 15
|
||||
create_reagents(chem_volume)
|
||||
reagents.set_reacting(FALSE) // so it doesn't react until you light it
|
||||
reagents.add_reagent("nicotine", 15)
|
||||
|
||||
@@ -134,8 +130,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
. = ..()
|
||||
|
||||
/obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(!lit && smoketime > 0 && W.is_hot())
|
||||
var/lighting_text = is_lighter(W,user)
|
||||
if(!lit && smoketime > 0)
|
||||
var/lighting_text = W.ignition_effect(src, user)
|
||||
if(lighting_text)
|
||||
light(lighting_text)
|
||||
else
|
||||
@@ -154,29 +150,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
else
|
||||
user << "<span class='notice'>[src] is full.</span>"
|
||||
|
||||
/obj/item/clothing/mask/cigarette/proc/is_lighter(obj/item/O, mob/user)
|
||||
var/lighting_text = null
|
||||
if(istype(O, /obj/item/weapon/weldingtool))
|
||||
lighting_text = "<span class='notice'>[user] casually lights the [name] with [O], what a badass.</span>"
|
||||
else if(istype(O, /obj/item/weapon/lighter/greyscale)) // we have to check for this first -- zippo lighters are default
|
||||
lighting_text = "<span class='notice'>After some fiddling, [user] manages to light their [name] with [O].</span>"
|
||||
else if(istype(O, /obj/item/weapon/lighter))
|
||||
lighting_text = "<span class='rose'>With a single flick of their wrist, [user] smoothly lights their [name] with [O]. Damn they're cool.</span>"
|
||||
else if(istype(O, /obj/item/weapon/melee/energy))
|
||||
var/in_mouth = ""
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
if(C.wear_mask == src)
|
||||
in_mouth = ", barely missing their nose"
|
||||
lighting_text = "<span class='warning'>[user] swings their \
|
||||
[O][in_mouth]. They light their [name] in the process.</span>"
|
||||
else if(istype(O, /obj/item/device/assembly/igniter))
|
||||
lighting_text = "<span class='notice'>[user] fiddles with [O], and manages to light their [name].</span>"
|
||||
else if(istype(O, /obj/item/device/flashlight/flare))
|
||||
lighting_text = "<span class='notice'>[user] lights their [name] with [O] like a real badass.</span>"
|
||||
else if(O.is_hot())
|
||||
lighting_text = "<span class='notice'>[user] lights their [name] with [O].</span>"
|
||||
return lighting_text
|
||||
|
||||
/obj/item/clothing/mask/cigarette/proc/light(flavor_text = null)
|
||||
if(lit)
|
||||
@@ -188,7 +161,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
hitsound = 'sound/items/welder.ogg'
|
||||
damtype = "fire"
|
||||
force = 4
|
||||
update_brightness()
|
||||
if(reagents.get_reagent_amount("plasma")) // the plasma explodes when exposed to fire
|
||||
var/datum/effect_system/reagents_explosion/e = new()
|
||||
e.set_up(round(reagents.get_reagent_amount("plasma") / 2.5, 1), get_turf(src), 0, 0)
|
||||
@@ -221,14 +193,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.update_inv_wear_mask()
|
||||
M.update_inv_l_hand()
|
||||
M.update_inv_r_hand()
|
||||
M.update_inv_hands()
|
||||
|
||||
/obj/item/clothing/mask/cigarette/proc/update_brightness()
|
||||
if(lit)
|
||||
set_light(1)
|
||||
else
|
||||
set_light(0)
|
||||
|
||||
/obj/item/clothing/mask/cigarette/proc/handle_reagents()
|
||||
if(reagents.total_volume)
|
||||
@@ -251,8 +217,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
smoketime--
|
||||
if(smoketime < 1)
|
||||
new type_butt(location)
|
||||
lit = 0
|
||||
update_brightness()
|
||||
if(ismob(loc))
|
||||
M << "<span class='notice'>Your [name] goes out.</span>"
|
||||
M.unEquip(src, 1) //un-equip it so the overlays can update //Force the un-equip so the overlays update
|
||||
@@ -263,19 +227,18 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
handle_reagents()
|
||||
|
||||
/obj/item/clothing/mask/cigarette/attack_self(mob/user)
|
||||
if(lit == 1)
|
||||
if(lit)
|
||||
user.visible_message("<span class='notice'>[user] calmly drops and treads on \the [src], putting it out instantly.</span>")
|
||||
new type_butt(user.loc)
|
||||
new /obj/effect/decal/cleanable/ash(user.loc)
|
||||
update_brightness()
|
||||
qdel(src)
|
||||
return ..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/clothing/mask/cigarette/attack(mob/living/carbon/M, mob/living/carbon/user)
|
||||
if(!istype(M))
|
||||
return ..()
|
||||
var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M,user)
|
||||
if(lit && cig && user.a_intent == "help")
|
||||
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>"
|
||||
if(M == user)
|
||||
@@ -285,7 +248,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/mask/cigarette/fire_act()
|
||||
/obj/item/clothing/mask/cigarette/fire_act(exposed_temperature, exposed_volume)
|
||||
light()
|
||||
|
||||
/obj/item/clothing/mask/cigarette/is_hot()
|
||||
@@ -312,7 +275,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
..()
|
||||
reagents.add_reagent("mushroomhallucinogen", 50)
|
||||
light()
|
||||
//for(var/mob/M in player_list) M << 'sound/misc/Smoke_Weed_Everyday.ogg'
|
||||
|
||||
|
||||
/obj/item/weapon/cigbutt/roach
|
||||
@@ -365,7 +327,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
desc = "A manky old cigarette butt."
|
||||
icon = 'icons/obj/clothing/masks.dmi'
|
||||
icon_state = "cigbutt"
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throwforce = 0
|
||||
|
||||
/obj/item/weapon/cigbutt/cigarbutt
|
||||
@@ -416,7 +378,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
open_flame()
|
||||
if(reagents && reagents.total_volume) // check if it has any reagents at all
|
||||
handle_reagents()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/clothing/mask/cigarette/pipe/attackby(obj/item/O, mob/user, params)
|
||||
@@ -436,7 +397,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
else
|
||||
user << "<span class='warning'>It is already packed!</span>"
|
||||
else
|
||||
var/lighting_text = is_lighter(O,user)
|
||||
var/lighting_text = O.ignition_effect(src,user)
|
||||
if(lighting_text)
|
||||
if(smoketime > 0)
|
||||
light(lighting_text)
|
||||
@@ -482,11 +443,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
icon = 'icons/obj/cigarettes.dmi'
|
||||
icon_state = "zippo"
|
||||
item_state = "zippo"
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
var/lit = 0
|
||||
heat = 1500
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/item/weapon/lighter/greyscale
|
||||
name = "cheap lighter"
|
||||
@@ -494,15 +456,23 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
icon_state = "lighter"
|
||||
|
||||
/obj/item/weapon/lighter/greyscale/New()
|
||||
..()
|
||||
var/image/I = image(icon,"lighter-overlay")
|
||||
I.color = color2hex(randomColor(1))
|
||||
var/newcolor = color2hex(randomColor(1))
|
||||
add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
|
||||
add_overlay(I)
|
||||
|
||||
/obj/item/weapon/lighter/greyscale/ignition_effect(atom/A, mob/user)
|
||||
. = "<span class='notice'>After some fiddling, [user] manages to light [A] with [src].</span>"
|
||||
|
||||
/obj/item/weapon/lighter/ignition_effect(atom/A, mob/user)
|
||||
. = "<span class='rose'>With a single flick of their wrist, [user] smoothly lights [A] with [src]. Damn [user.p_theyre()] cool.</span>"
|
||||
|
||||
/obj/item/weapon/lighter/update_icon()
|
||||
icon_state = lit ? "[icon_state]_on" : "[initial(icon_state)]"
|
||||
|
||||
/obj/item/weapon/lighter/attack_self(mob/living/user)
|
||||
if(user.r_hand == src || user.l_hand == src)
|
||||
if(user.is_holding(src))
|
||||
if(!lit)
|
||||
lit = 1
|
||||
update_icon()
|
||||
@@ -513,14 +483,24 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
if(!istype(src, /obj/item/weapon/lighter/greyscale))
|
||||
user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.", "<span class='notice'>Without even breaking stride, you flip open and lights [src] in one smooth movement.</span>")
|
||||
else
|
||||
if(prob(75))
|
||||
var/prot = FALSE
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
if(istype(H) && H.gloves)
|
||||
var/obj/item/clothing/gloves/G = H.gloves
|
||||
if(G.max_heat_protection_temperature)
|
||||
prot = (G.max_heat_protection_temperature > 360)
|
||||
else
|
||||
prot = TRUE
|
||||
|
||||
if(prot || prob(75))
|
||||
user.visible_message("After a few attempts, [user] manages to light [src].", "<span class='notice'>After a few attempts, you manage to light [src].</span>")
|
||||
else
|
||||
var/hitzone = user.r_hand == src ? "r_hand" : "l_hand"
|
||||
var/hitzone = user.held_index_to_dir(user.active_hand_index) == "r" ? "r_hand" : "l_hand"
|
||||
user.apply_damage(5, BURN, hitzone)
|
||||
user.visible_message("<span class='warning'>After a few attempts, [user] manages to light [src] - they however burn their finger in the process.</span>", "<span class='warning'>You burn yourself while lighting the lighter!</span>")
|
||||
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>")
|
||||
|
||||
set_light(1)
|
||||
user.AddLuminosity(1)
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
lit = 0
|
||||
@@ -529,38 +509,47 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
force = 0
|
||||
attack_verb = null //human_defense.dm takes care of it
|
||||
if(!istype(src, /obj/item/weapon/lighter/greyscale))
|
||||
user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing. Wow.", "<span class='notice'>You quietly shut off [src] without even looking at what you're doing. Wow.</span>")
|
||||
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].")
|
||||
set_light(0)
|
||||
user.AddLuminosity(-1)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
else
|
||||
return ..()
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/lighter/attack(mob/living/carbon/M, mob/living/carbon/user)
|
||||
if(lit && M.IgniteMob())
|
||||
message_admins("[key_name_admin(user)] set [key_name_admin(M)] on fire")
|
||||
log_game("[key_name(user)] set [key_name(M)] on fire")
|
||||
var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M,user)
|
||||
if(lit && cig && user.a_intent == "help")
|
||||
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>"
|
||||
if(M == user)
|
||||
cig.attackby(src, user)
|
||||
else
|
||||
if(!istype(src, /obj/item/weapon/lighter/greyscale))
|
||||
cig.light("<span class='rose'>[user] whips the [name] out and holds it for [M]. Their arm is as steady as the unflickering flame they light \the [cig] with.</span>")
|
||||
cig.light("<span class='rose'>[user] whips the [name] out and holds it for [M]. [user.p_their(TRUE)] arm is as steady as the unflickering flame they light \the [cig] with.</span>")
|
||||
else
|
||||
cig.light("<span class='notice'>[user] holds the [name] out for [M], and lights the [cig.name].</span>")
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/lighter/process()
|
||||
var/turf/location = get_turf(src)
|
||||
if(location)
|
||||
location.hotspot_expose(700, 5)
|
||||
return
|
||||
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
|
||||
@@ -573,7 +562,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
desc = "A thin piece of paper used to make fine smokeables."
|
||||
icon = 'icons/obj/cigarettes.dmi'
|
||||
icon_state = "cig_paper"
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
/obj/item/weapon/rollingpaper/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity)
|
||||
@@ -595,3 +584,177 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
user << "<span class='warning'>You need to dry this first!</span>"
|
||||
else
|
||||
..()
|
||||
|
||||
///////////////
|
||||
//VAPE NATION//
|
||||
///////////////
|
||||
/obj/item/clothing/mask/vape
|
||||
name = "E-Cigarette"
|
||||
desc = "A classy and highly sophisticated electronic cigarette, for classy and dignified gentlemen. A warning label reads \"Warning: Do not fill with flammable materials.\""//<<< i'd vape to that.
|
||||
icon = 'icons/obj/clothing/masks.dmi'
|
||||
icon_state = null
|
||||
item_state = null
|
||||
var/chem_volume = 100
|
||||
var/vapetime = 0 //this so it won't puff out clouds every tick
|
||||
var/screw = 0 // kinky
|
||||
var/super = 0 //for the fattest vapes dude.
|
||||
var/emagged = 0 //LET THE GRIEF BEGIN
|
||||
|
||||
/obj/item/clothing/mask/vape/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is puffin hard on dat vape, [user.p_they()] trying to join the vape life on a whole notha plane!")//it doesn't give you cancer, it is cancer
|
||||
return (TOXLOSS|OXYLOSS)
|
||||
|
||||
|
||||
/obj/item/clothing/mask/vape/New(loc, var/param_color = null)
|
||||
..()
|
||||
create_reagents(chem_volume)
|
||||
reagents.set_reacting(FALSE) // so it doesn't react until you light it
|
||||
reagents.add_reagent("nicotine", 50)
|
||||
if(!icon_state)
|
||||
if(!param_color)
|
||||
param_color = pick("red","blue","black","white","green","purple","yellow","orange")
|
||||
icon_state = "[param_color]_vape"
|
||||
item_state = "[param_color]_vape"
|
||||
|
||||
/obj/item/clothing/mask/vape/attackby(obj/item/O, mob/user, params)
|
||||
if(istype(O, /obj/item/weapon/reagent_containers) && (O.flags & OPENCONTAINER))
|
||||
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>"
|
||||
else
|
||||
user << "<span class='warning'>The [O] is empty!</span>"
|
||||
else
|
||||
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>"
|
||||
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>"
|
||||
cut_overlays()
|
||||
|
||||
if(istype(O, /obj/item/device/multitool))
|
||||
if(screw && !emagged)//also kinky
|
||||
if(!super)
|
||||
cut_overlays()
|
||||
super = 1
|
||||
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>"
|
||||
add_overlay(image(icon, "vapeopen_low"))
|
||||
|
||||
if(screw && emagged)
|
||||
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.
|
||||
if(screw)
|
||||
if(!emagged)
|
||||
cut_overlays()
|
||||
emagged = 1
|
||||
super = 0
|
||||
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>"
|
||||
else
|
||||
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>"
|
||||
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>"
|
||||
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>"
|
||||
|
||||
/obj/item/clothing/mask/vape/dropped(mob/user)
|
||||
var/mob/living/carbon/C = user
|
||||
if(C.get_item_by_slot(slot_wear_mask) == src)
|
||||
reagents.set_reacting(FALSE)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/clothing/mask/vape/proc/hand_reagents()//had to rename to avoid duplicate error
|
||||
if(reagents.total_volume)
|
||||
if(iscarbon(loc))
|
||||
var/mob/living/carbon/C = loc
|
||||
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.get_reagent_amount("welding_fuel"))
|
||||
//HOT STUFF
|
||||
C.fire_stacks = 2
|
||||
C.IgniteMob()
|
||||
|
||||
if(reagents.get_reagent_amount("plasma")) // the plasma explodes when exposed to fire
|
||||
var/datum/effect_system/reagents_explosion/e = new()
|
||||
e.set_up(round(reagents.get_reagent_amount("plasma") / 2.5, 1), get_turf(src), 0, 0)
|
||||
e.start()
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.unEquip(src, 1)
|
||||
qdel(src)
|
||||
return
|
||||
reagents.remove_any(REAGENTS_METABOLISM)
|
||||
|
||||
/obj/item/clothing/mask/vape/process()
|
||||
var/mob/living/M = loc
|
||||
|
||||
if(isliving(loc))
|
||||
M.IgniteMob()
|
||||
|
||||
vapetime++
|
||||
|
||||
if(!reagents.total_volume)
|
||||
if(ismob(loc))
|
||||
M << "<span class='notice'>The [name] is empty!</span>"
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
//it's reusable so it won't unequip when empty
|
||||
return
|
||||
//open flame removed because vapes are a closed system, they wont light anything on fire
|
||||
|
||||
if(super && vapetime > 3)//Time to start puffing those fat vapes, yo.
|
||||
var/datum/effect_system/smoke_spread/chem/s = new
|
||||
s.set_up(reagents, 1, loc, silent=TRUE)
|
||||
s.start()
|
||||
vapetime = 0
|
||||
|
||||
if(emagged && vapetime > 3)
|
||||
var/datum/effect_system/smoke_spread/chem/s = new
|
||||
s.set_up(reagents, 4, loc, silent=TRUE)
|
||||
s.start()
|
||||
vapetime = 0
|
||||
if(prob(5))//small chance for the vape to break and deal damage if it's emagged
|
||||
playsound(get_turf(src), 'sound/effects/pop_expl.ogg', 50, 0)
|
||||
M.apply_damage(20, BURN, "head")
|
||||
M.unEquip(src, 1)
|
||||
M.Weaken(15, 1, 0)
|
||||
qdel(src)
|
||||
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>"
|
||||
|
||||
if(reagents && reagents.total_volume)
|
||||
hand_reagents()
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "soap"
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
flags = NOBLUDGEON
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
/obj/item/weapon/soap/suicide_act(mob/user)
|
||||
user.say(";FFFFFFFFFFFFFFFFUUUUUUUDGE!!")
|
||||
user.visible_message("<span class='suicide'>[user] lifts the [src.name] to their mouth and gnaws on it furiously, producing a thick froth! They'll never get that BB gun now!")
|
||||
user.visible_message("<span class='suicide'>[user] lifts [src] to their mouth and gnaws on it furiously, producing a thick froth! [user.p_they(TRUE)]'ll never get that BB gun now!")
|
||||
PoolOrNew(/obj/effect/particle_effect/foam, loc)
|
||||
return (TOXLOSS)
|
||||
|
||||
@@ -65,20 +65,24 @@
|
||||
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
|
||||
user.visible_message("<span class='warning'>\the [user] washes \the [target]'s mouth out with [src.name]!</span>", "<span class='notice'>You wash \the [target]'s mouth out with [src.name]!</span>") //washes mouth out with soap sounds better than 'the soap' here
|
||||
H.lip_style = null //removes lipstick
|
||||
H.update_body()
|
||||
return
|
||||
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>"
|
||||
target.color = initial(target.color)
|
||||
target.set_opacity(initial(target.opacity))
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
target.SetOpacity(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>"
|
||||
var/obj/effect/decal/cleanable/C = locate() in target
|
||||
qdel(C)
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
target.clean_blood()
|
||||
target.wash_cream()
|
||||
return
|
||||
@@ -97,7 +101,7 @@
|
||||
item_state = "bike_horn"
|
||||
throwforce = 0
|
||||
hitsound = null //To prevent tap.ogg playing, as the item lacks of force
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
attack_verb = list("HONKED")
|
||||
@@ -106,7 +110,7 @@
|
||||
var/cooldowntime = 20
|
||||
|
||||
/obj/item/weapon/bikehorn/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] solemnly points the horn at \his temple! It looks like \he's trying to commit suicide..</span>")
|
||||
user.visible_message("<span class='suicide'>[user] solemnly points the horn at [user.p_their()] temple! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
playsound(src.loc, honksound, 50, 1)
|
||||
return (BRUTELOSS)
|
||||
|
||||
@@ -139,7 +143,7 @@
|
||||
|
||||
/obj/item/weapon/bikehorn/golden
|
||||
name = "golden bike horn"
|
||||
desc = "Golden? Clearly, its made with bananium! Honk!"
|
||||
desc = "Golden? Clearly, it's made with bananium! Honk!"
|
||||
icon_state = "gold_horn"
|
||||
item_state = "gold_horn"
|
||||
|
||||
@@ -155,8 +159,14 @@
|
||||
if (!spam_flag)
|
||||
var/turf/T = get_turf(src)
|
||||
for(M in ohearers(7, T))
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if((istype(H.ears, /obj/item/clothing/ears/earmuffs)) || H.ear_deaf)
|
||||
continue
|
||||
M.emote("flip")
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/canned_laughter
|
||||
name = "Canned Laughter"
|
||||
desc = "Just looking at this makes you want to giggle."
|
||||
icon_state = "laughter"
|
||||
list_reagents = list("laughter" = 50)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "A generic brand of lipstick."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "lipstick"
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/colour = "red"
|
||||
var/open = 0
|
||||
|
||||
@@ -27,10 +27,12 @@
|
||||
name = "lipstick"
|
||||
|
||||
/obj/item/weapon/lipstick/random/New()
|
||||
..()
|
||||
colour = pick("red","purple","lime","black","green","blue","white")
|
||||
name = "[colour] lipstick"
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/lipstick/attack_self(mob/user)
|
||||
cut_overlays()
|
||||
user << "<span class='notice'>You twist \the [src] [open ? "closed" : "open"].</span>"
|
||||
@@ -106,7 +108,7 @@
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "razor"
|
||||
flags = CONDUCT
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
|
||||
/obj/item/weapon/razor/proc/shave(mob/living/carbon/human/H, location = "mouth")
|
||||
@@ -124,7 +126,7 @@
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/location = user.zone_selected
|
||||
if(location == "mouth")
|
||||
if(!(FACEHAIR in H.dna.species.specflags))
|
||||
if(!(FACEHAIR in H.dna.species.species_traits))
|
||||
user << "<span class='warning'>There is no facial hair to shave!</span>"
|
||||
return
|
||||
if(!get_location_accessible(H, location))
|
||||
@@ -152,7 +154,7 @@
|
||||
shave(H, location)
|
||||
|
||||
else if(location == "head")
|
||||
if(!(HAIR in H.dna.species.specflags))
|
||||
if(!(HAIR in H.dna.species.species_traits))
|
||||
user << "<span class='warning'>There is no hair to shave!</span>"
|
||||
return
|
||||
if(!get_location_accessible(H, location))
|
||||
|
||||
@@ -9,12 +9,12 @@
|
||||
icon_state = "gavelhammer"
|
||||
force = 5
|
||||
throwforce = 6
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
attack_verb = list("bashed", "battered", "judged", "whacked")
|
||||
burn_state = FLAMMABLE
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/weapon/gavelhammer/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] has sentenced \himself to death with the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] has sentenced [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1)
|
||||
return (BRUTELOSS)
|
||||
|
||||
@@ -25,13 +25,13 @@
|
||||
icon_state = "gavelblock"
|
||||
force = 2
|
||||
throwforce = 2
|
||||
w_class = 1
|
||||
burn_state = FLAMMABLE
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/weapon/gavelblock/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/gavelhammer))
|
||||
playsound(loc, 'sound/items/gavel.ogg', 100, 1)
|
||||
user.visible_message("<span class='warning'>[user] strikes \the [src] with \the [I].</span>")
|
||||
user.visible_message("<span class='warning'>[user] strikes [src] with [I].</span>")
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
else
|
||||
return ..()
|
||||
@@ -8,9 +8,10 @@
|
||||
slot_flags = SLOT_BACK
|
||||
force = 5
|
||||
throwforce = 6
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
origin_tech = "biotech=4"
|
||||
actions_types = list(/datum/action/item_action/toggle_paddles)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50)
|
||||
|
||||
var/on = 0 //if the paddles are equipped (1) or on the defib (0)
|
||||
var/safety = 1 //if you can zap people with the defibs on harm mode
|
||||
@@ -94,20 +95,10 @@
|
||||
var/mob/M = src.loc
|
||||
if(istype(over_object, /obj/screen/inventory/hand))
|
||||
var/obj/screen/inventory/hand/H = over_object
|
||||
if(!M.unEquip(src))
|
||||
return
|
||||
M.put_in_hand(src, H.held_index)
|
||||
|
||||
switch(H.slot_id)
|
||||
if(slot_r_hand)
|
||||
if(M.r_hand)
|
||||
return
|
||||
if(!M.unEquip(src))
|
||||
return
|
||||
M.put_in_r_hand(src)
|
||||
if(slot_l_hand)
|
||||
if(M.l_hand)
|
||||
return
|
||||
if(!M.unEquip(src))
|
||||
return
|
||||
M.put_in_l_hand(src)
|
||||
|
||||
/obj/item/weapon/defibrillator/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(W == paddles)
|
||||
@@ -197,11 +188,10 @@
|
||||
if(slot == user.getBackSlot())
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/defibrillator/proc/remove_paddles(mob/user)
|
||||
var/mob/living/carbon/human/M = user
|
||||
if(paddles in get_both_hands(M))
|
||||
/obj/item/weapon/defibrillator/proc/remove_paddles(mob/user) //this fox the bug with the paddles when other player stole you the defib when you have the paddles equiped
|
||||
if(ismob(paddles.loc))
|
||||
var/mob/M = paddles.loc
|
||||
M.unEquip(paddles,1)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/defibrillator/Destroy()
|
||||
@@ -241,7 +231,7 @@
|
||||
desc = "A belt-equipped defibrillator that can be rapidly deployed."
|
||||
icon_state = "defibcompact"
|
||||
item_state = "defibcompact"
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "biotech=5"
|
||||
|
||||
@@ -286,7 +276,7 @@
|
||||
item_state = "defibpaddles"
|
||||
force = 0
|
||||
throwforce = 6
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
flags = NODROP
|
||||
|
||||
var/revivecost = 1000
|
||||
@@ -316,7 +306,6 @@
|
||||
loc = defib
|
||||
busy = 0
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/update_icon()
|
||||
icon_state = "defibpaddles[wielded]"
|
||||
@@ -325,7 +314,7 @@
|
||||
icon_state = "defibpaddles[wielded]_cooldown"
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/suicide_act(mob/user)
|
||||
user.visible_message("<span class='danger'>[user] is putting the live paddles on \his chest! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='danger'>[user] is putting the live paddles on [user.p_their()] chest! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
if(req_defib)
|
||||
defib.deductcharge(revivecost)
|
||||
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
|
||||
@@ -335,7 +324,7 @@
|
||||
if(!req_defib)
|
||||
return ..()
|
||||
if(user)
|
||||
var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_hand()
|
||||
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>"
|
||||
@@ -355,7 +344,7 @@
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/attack(mob/M, mob/user)
|
||||
var/halfwaycritdeath = (config.health_threshold_crit + config.health_threshold_dead) / 2
|
||||
var/halfwaycritdeath = (HEALTH_THRESHOLD_CRIT + HEALTH_THRESHOLD_DEAD) / 2
|
||||
|
||||
if(busy)
|
||||
return
|
||||
@@ -364,7 +353,7 @@
|
||||
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
|
||||
return
|
||||
if(!wielded)
|
||||
if(isrobot(user))
|
||||
if(iscyborg(user))
|
||||
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>"
|
||||
@@ -383,7 +372,7 @@
|
||||
return
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
if(user.a_intent == "disarm")
|
||||
if(user.a_intent == INTENT_DISARM)
|
||||
if(req_defib && defib.safety)
|
||||
return
|
||||
if(!req_defib && !combat)
|
||||
@@ -412,7 +401,7 @@
|
||||
user << "<span class='warning'>You need to target your patient's \
|
||||
chest with [src]!</span>"
|
||||
return
|
||||
if(user.a_intent == "harm")
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
if(req_defib && defib.safety)
|
||||
return
|
||||
if(!req_defib && !combat)
|
||||
@@ -556,17 +545,41 @@
|
||||
H.heart_attack = 0
|
||||
user.visible_message("<span class='notice'>[req_defib ? "[defib]" : "[src]"] pings: Patient's heart is now beating again.</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
|
||||
|
||||
else if (!H.getorgan(/obj/item/organ/heart))
|
||||
user.visible_message("<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Patient's heart is missing. Operation aborted.</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
|
||||
|
||||
else
|
||||
user.visible_message("<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Patient is not in a valid state. Operation aborted.</span>")
|
||||
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
|
||||
busy = 0
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/syndicate
|
||||
name = "syndicate defibrillator paddles"
|
||||
desc = "A pair of paddles used to revive deceased operatives. It possesses both the ability to penetrate armor and to deliver powerful shocks offensively."
|
||||
combat = 1
|
||||
/obj/item/weapon/twohanded/shockpaddles/cyborg
|
||||
name = "cyborg defibrillator paddles"
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "defibpaddles0"
|
||||
item_state = "defibpaddles0"
|
||||
req_defib = 0
|
||||
req_defib = FALSE
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/cyborg/attack(mob/M, mob/user)
|
||||
if(iscyborg(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.emagged)
|
||||
combat = TRUE
|
||||
else
|
||||
combat = FALSE
|
||||
else
|
||||
combat = FALSE
|
||||
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/syndicate
|
||||
name = "syndicate defibrillator paddles"
|
||||
desc = "A pair of paddles used to revive deceased operatives. It possesses both the ability to penetrate armor and to deliver powerful shocks offensively."
|
||||
combat = TRUE
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "defibpaddles0"
|
||||
item_state = "defibpaddles0"
|
||||
req_defib = FALSE
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dice/New()
|
||||
..()
|
||||
var/special_die = pick("1","2","fudge","00","100")
|
||||
var/special_die = pick("1","2","fudge","space","00","8bd20","4dd6","100")
|
||||
if(special_die == "1")
|
||||
new /obj/item/weapon/dice/d1(src)
|
||||
if(special_die == "2")
|
||||
@@ -15,12 +15,18 @@
|
||||
new /obj/item/weapon/dice/d6(src)
|
||||
if(special_die == "fudge")
|
||||
new /obj/item/weapon/dice/fudge(src)
|
||||
if(special_die == "space")
|
||||
new /obj/item/weapon/dice/d6/space(src)
|
||||
new /obj/item/weapon/dice/d8(src)
|
||||
new /obj/item/weapon/dice/d10(src)
|
||||
if(special_die == "00")
|
||||
new /obj/item/weapon/dice/d00(src)
|
||||
new /obj/item/weapon/dice/d12(src)
|
||||
new /obj/item/weapon/dice/d20(src)
|
||||
if(special_die == "8bd20")
|
||||
new /obj/item/weapon/dice/eightbd20(src)
|
||||
if(special_die == "4dd6")
|
||||
new /obj/item/weapon/dice/fourdd6(src)
|
||||
if(special_die == "100")
|
||||
new /obj/item/weapon/dice/d100(src)
|
||||
|
||||
@@ -29,14 +35,17 @@
|
||||
desc = "A die with six sides. Basic and servicable."
|
||||
icon = 'icons/obj/dice.dmi'
|
||||
icon_state = "d6"
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/sides = 6
|
||||
var/result = null
|
||||
var/list/special_faces = list() //entries should match up to sides var if used
|
||||
var/can_be_rigged = TRUE
|
||||
var/rigged = FALSE
|
||||
|
||||
/obj/item/weapon/dice/New()
|
||||
result = rand(1, sides)
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dice/d1
|
||||
name = "d1"
|
||||
@@ -59,6 +68,16 @@
|
||||
/obj/item/weapon/dice/d6
|
||||
name = "d6"
|
||||
|
||||
/obj/item/weapon/dice/d6/space
|
||||
name = "space cube"
|
||||
desc = "A die with six sides. 6 TIMES 255 TIMES 255 TILE TOTAL EXISTENCE, SQUARE YOUR MIND OF EDUCATED STUPID: 2 DOES NOT EXIST."
|
||||
icon_state = "spaced6"
|
||||
|
||||
/obj/item/weapon/dice/d6/space/New()
|
||||
..()
|
||||
if(prob(10))
|
||||
name = "spess cube"
|
||||
|
||||
/obj/item/weapon/dice/fudge
|
||||
name = "fudge die"
|
||||
desc = "A die with six sides but only three results. Is this a plus or a minus? Your mind is drawing a blank..."
|
||||
@@ -105,16 +124,39 @@
|
||||
/obj/item/weapon/dice/d100/update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/dice/eightbd20
|
||||
name = "strange d20"
|
||||
desc = "A weird die with raised text printed on the faces. Everything's white on white so reading it is a struggle. What poor design!"
|
||||
icon_state = "8bd20"
|
||||
sides = 20
|
||||
special_faces = list("It is certain","It is decidedly so","Without a doubt","Yes, definitely","You may rely on it","As I see it, yes","Most likely","Outlook good","Yes","Signs point to yes","Reply hazy try again","Ask again later","Better not tell you now","Cannot predict now","Concentrate and ask again","Don't count on it","My reply is no","My sources say no","Outlook not so good","Very doubtful")
|
||||
|
||||
/obj/item/weapon/dice/eightbd20/update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/dice/fourdd6
|
||||
name = "4d d6"
|
||||
desc = "A die that exists in four dimensional space. Properly interpreting them can only be properly done with the help of a mathematician, a physicist, and a priest."
|
||||
icon_state = "4dd6"
|
||||
sides = 48
|
||||
special_faces = list("Cube-Side: 1-1","Cube-Side: 1-2","Cube-Side: 1-3","Cube-Side: 1-4","Cube-Side: 1-5","Cube-Side: 1-6","Cube-Side: 2-1","Cube-Side: 2-2","Cube-Side: 2-3","Cube-Side: 2-4","Cube-Side: 2-5","Cube-Side: 2-6","Cube-Side: 3-1","Cube-Side: 3-2","Cube-Side: 3-3","Cube-Side: 3-4","Cube-Side: 3-5","Cube-Side: 3-6","Cube-Side: 4-1","Cube-Side: 4-2","Cube-Side: 4-3","Cube-Side: 4-4","Cube-Side: 4-5","Cube-Side: 4-6","Cube-Side: 5-1","Cube-Side: 5-2","Cube-Side: 5-3","Cube-Side: 5-4","Cube-Side: 5-5","Cube-Side: 5-6","Cube-Side: 6-1","Cube-Side: 6-2","Cube-Side: 6-3","Cube-Side: 6-4","Cube-Side: 6-5","Cube-Side: 6-6","Cube-Side: 7-1","Cube-Side: 7-2","Cube-Side: 7-3","Cube-Side: 7-4","Cube-Side: 7-5","Cube-Side: 7-6","Cube-Side: 8-1","Cube-Side: 8-2","Cube-Side: 8-3","Cube-Side: 8-4","Cube-Side: 8-5","Cube-Side: 8-6")
|
||||
|
||||
/obj/item/weapon/dice/fourdd6/update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/dice/attack_self(mob/user)
|
||||
diceroll(user)
|
||||
|
||||
/obj/item/weapon/dice/throw_at(atom/target, range, speed, mob/user, spin=1)
|
||||
/obj/item/weapon/dice/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0)
|
||||
if(!..())
|
||||
return
|
||||
diceroll(user)
|
||||
diceroll(thrower)
|
||||
|
||||
/obj/item/weapon/dice/proc/diceroll(mob/user)
|
||||
result = rand(1, sides)
|
||||
if(rigged && result != rigged)
|
||||
if(prob(Clamp(1/(sides - 1) * 100, 25, 80)))
|
||||
result = rigged
|
||||
var/fake_result = rand(1, sides)//Daredevil isn't as good as he used to be
|
||||
var/comment = ""
|
||||
if(sides == 20 && result == 20)
|
||||
@@ -135,7 +177,7 @@
|
||||
|
||||
/obj/item/weapon/dice/d4/Crossed(mob/living/carbon/human/H)
|
||||
if(istype(H) && !H.shoes)
|
||||
if(PIERCEIMMUNE in H.dna.species.specflags)
|
||||
if(PIERCEIMMUNE in H.dna.species.species_traits)
|
||||
return 0
|
||||
H << "<span class='userdanger'>You step on the D4!</span>"
|
||||
H.apply_damage(4,BRUTE,(pick("l_leg", "r_leg")))
|
||||
@@ -143,4 +185,9 @@
|
||||
|
||||
/obj/item/weapon/dice/update_icon()
|
||||
cut_overlays()
|
||||
add_overlay("[src.icon_state][src.result]")
|
||||
add_overlay("[src.icon_state][src.result]")
|
||||
|
||||
/obj/item/weapon/dice/microwave_act(obj/machinery/microwave/M)
|
||||
if(can_be_rigged)
|
||||
rigged = result
|
||||
..(M)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "dnainjector"
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
origin_tech = "biotech=1"
|
||||
|
||||
var/damage_coeff = 1
|
||||
@@ -143,7 +143,7 @@
|
||||
|
||||
/obj/item/weapon/dnainjector/dwarf
|
||||
name = "\improper DNA injector (Dwarfism)"
|
||||
desc = "Its a small world after all."
|
||||
desc = "It's a small world after all."
|
||||
add_mutations_static = list(DWARFISM)
|
||||
|
||||
/obj/item/weapon/dnainjector/clumsymut
|
||||
@@ -152,7 +152,7 @@
|
||||
add_mutations_static = list(CLOWNMUT)
|
||||
|
||||
/obj/item/weapon/dnainjector/anticlumsy
|
||||
name = "\improper DNA injector (Anti-Clumy)"
|
||||
name = "\improper DNA injector (Anti-Clumsy)"
|
||||
desc = "Apply this for Security Clown."
|
||||
remove_mutations_static = list(CLOWNMUT)
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
|
||||
/obj/item/weapon/dnainjector/tourmut
|
||||
name = "\improper DNA injector (Tour.)"
|
||||
desc = "Gives you a nasty case off tourrets."
|
||||
desc = "Gives you a nasty case of Tourette's."
|
||||
add_mutations_static = list(TOURETTES)
|
||||
|
||||
/obj/item/weapon/dnainjector/stuttmut
|
||||
@@ -193,7 +193,7 @@
|
||||
|
||||
/obj/item/weapon/dnainjector/antiblind
|
||||
name = "\improper DNA injector (Anti-Blind)"
|
||||
desc = "ITS A MIRACLE!!!"
|
||||
desc = "IT'S A MIRACLE!!!"
|
||||
remove_mutations_static = list(BLINDMUT)
|
||||
|
||||
/obj/item/weapon/dnainjector/antitele
|
||||
@@ -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 \he's dead.</span>"
|
||||
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]"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
icon_state = "plastic-explosive0"
|
||||
item_state = "plasticx"
|
||||
flags = NOBLUDGEON
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
origin_tech = "syndicate=1"
|
||||
var/timer = 10
|
||||
var/open_panel = 0
|
||||
@@ -26,7 +26,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/c4/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] activates the [src.name] and holds it above \his head! It looks like \he's going out with a bang!</span>")
|
||||
user.visible_message("<span class='suicide'>[user] activates the [src.name] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!</span>")
|
||||
var/message_say = "FOR NO RAISIN!"
|
||||
if(user.mind)
|
||||
if(user.mind.special_role)
|
||||
@@ -43,8 +43,8 @@
|
||||
message_say = "[uppertext(user.mind.gang_datum.name)] RULES!"
|
||||
user.say(message_say)
|
||||
target = user
|
||||
message_admins("[key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) suicided with [src.name] at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
||||
message_admins("[key_name(user)] suicided with [src.name] at ([x],[y],[z])")
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [name] at [ADMIN_COORDJMP(src)]",0,1)
|
||||
message_admins("[key_name(user)] suicided with [name] at ([x],[y],[z])")
|
||||
sleep(10)
|
||||
explode(get_turf(user))
|
||||
user.gib(1, 1)
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
/obj/item/weapon/c4/attack_self(mob/user)
|
||||
var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num
|
||||
if(user.get_active_hand() == src)
|
||||
if(user.get_active_held_item() == src)
|
||||
newtime = Clamp(newtime, 10, 60000)
|
||||
timer = newtime
|
||||
user << "Timer set for [timer] seconds."
|
||||
@@ -87,8 +87,10 @@
|
||||
src.target = AM
|
||||
loc = null
|
||||
|
||||
message_admins("[key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[target.x];Y=[target.y];Z=[target.z]'>JMP</a>) with [timer] second fuse",0,1)
|
||||
log_game("[key_name(user)] planted [src.name] on [target.name] at ([target.x],[target.y],[target.z]) with [timer] second fuse")
|
||||
var/message = "[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_COORDJMP(target)] with [timer] second fuse"
|
||||
bombers += message
|
||||
message_admins(message,0,1)
|
||||
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>"
|
||||
|
||||
@@ -7,13 +7,14 @@
|
||||
hitsound = 'sound/weapons/smash.ogg'
|
||||
flags = CONDUCT
|
||||
throwforce = 10
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
throw_speed = 2
|
||||
throw_range = 7
|
||||
force = 10
|
||||
materials = list(MAT_METAL=90)
|
||||
attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
|
||||
dog_fashion = /datum/dog_fashion/back
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/max_water = 50
|
||||
var/last_use = 1
|
||||
var/safety = 1
|
||||
@@ -30,7 +31,7 @@
|
||||
hitsound = null //it is much lighter, after all.
|
||||
flags = null //doesn't CONDUCT
|
||||
throwforce = 2
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
force = 3
|
||||
materials = list()
|
||||
max_water = 30
|
||||
@@ -50,11 +51,8 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/extinguisher/attack(mob/M, mob/user)
|
||||
if(user.a_intent == "help")
|
||||
// If we're in help intent, don't bash anyone with the
|
||||
// extinguisher
|
||||
user.visible_message("[user] targets [M] with \the [src]", "<span class='info'>You target [M] with \the [src].</span>")
|
||||
return 0
|
||||
if(user.a_intent == INTENT_HELP && !safety) //If we're on help intent and going to spray people, don't bash them.
|
||||
return FALSE
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -97,7 +95,7 @@
|
||||
usr << "<span class='warning'>\The [src] is empty!</span>"
|
||||
return
|
||||
|
||||
if (world.time < src.last_use + 20)
|
||||
if (world.time < src.last_use + 12)
|
||||
return
|
||||
|
||||
src.last_use = world.time
|
||||
@@ -172,9 +170,8 @@
|
||||
reagents.clear_reagents()
|
||||
|
||||
var/turf/T = get_turf(loc)
|
||||
if(istype(T, /turf/open))
|
||||
if(isopenturf(T))
|
||||
var/turf/open/theturf = T
|
||||
theturf.MakeSlippery(min_wet_time = 10, wet_time_to_add = 5)
|
||||
|
||||
user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "<span class='info'>You quietly empty out \the [src] using its release valve.</span>")
|
||||
return
|
||||
|
||||
@@ -9,9 +9,10 @@
|
||||
throwforce = 10
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
materials = list(MAT_METAL=500)
|
||||
origin_tech = "combat=1;plasmatech=2;engineering=2"
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/status = 0
|
||||
var/throw_amount = 100
|
||||
var/lit = 0 //on or off
|
||||
@@ -39,7 +40,7 @@
|
||||
var/turf/location = loc
|
||||
if(istype(location, /mob/))
|
||||
var/mob/M = location
|
||||
if(M.l_hand == src || M.r_hand == src)
|
||||
if(M.is_holding(src))
|
||||
location = M.loc
|
||||
if(isturf(location)) //start a fire if possible
|
||||
location.hotspot_expose(700, 2)
|
||||
@@ -62,7 +63,7 @@
|
||||
/obj/item/weapon/flamethrower/afterattack(atom/target, mob/user, flag)
|
||||
if(flag) return // too close
|
||||
// Make sure our user is still holding us
|
||||
if(user && user.get_active_hand() == src)
|
||||
if(user && user.get_active_held_item() == src)
|
||||
var/turf/target_turf = get_turf(target)
|
||||
if(target_turf)
|
||||
var/turflist = getline(user, target_turf)
|
||||
@@ -188,7 +189,7 @@
|
||||
for(var/turf/T in turflist)
|
||||
if(T == previousturf)
|
||||
continue //so we don't burn the tile we be standin on
|
||||
if(!T.CanAtmosPass(previousturf))
|
||||
if(!T.atmos_adjacent_turfs || !T.atmos_adjacent_turfs[previousturf])
|
||||
break
|
||||
ignite_turf(T)
|
||||
sleep(1)
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "giftdeliverypackage3"
|
||||
item_state = "gift1"
|
||||
burn_state = FLAMMABLE
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/weapon/a_gift/New()
|
||||
..()
|
||||
@@ -22,7 +22,7 @@
|
||||
icon_state = "giftdeliverypackage[rand(1,5)]"
|
||||
|
||||
/obj/item/weapon/a_gift/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] peeks inside the [src.name] and cries \himself to death! It looks like they were on the naughty list...</span>")
|
||||
user.visible_message("<span class='suicide'>[user] peeks inside [src] and cries [user.p_them()]self to death! It looks like [user.p_they()] [user.p_were()] on the naughty list...</span>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/a_gift/attack_self(mob/M)
|
||||
@@ -57,7 +57,7 @@
|
||||
/obj/item/device/instrument/violin,
|
||||
/obj/item/device/instrument/guitar,
|
||||
/obj/item/weapon/storage/belt/utility/full,
|
||||
/obj/item/clothing/tie/horrible,
|
||||
/obj/item/clothing/neck/tie/horrible,
|
||||
/obj/item/clothing/suit/jacket/leather,
|
||||
/obj/item/clothing/suit/jacket/leather/overcoat,
|
||||
/obj/item/clothing/suit/poncho,
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
desc = "A custom made grenade."
|
||||
icon_state = "chemg"
|
||||
item_state = "flashbang"
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
force = 2
|
||||
var/stage = EMPTY
|
||||
var/list/beakers = list()
|
||||
@@ -21,7 +21,7 @@
|
||||
/obj/item/weapon/grenade/chem_grenade/New()
|
||||
create_reagents(1000)
|
||||
stage_change() // If no argument is set, it will change the stage to the current stage, useful for stock grenades that start READY.
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/examine(mob/user)
|
||||
display_timer = (stage == READY && !nadeassembly) //show/hide the timer based on assembly state
|
||||
@@ -54,7 +54,7 @@
|
||||
if(beakers.len)
|
||||
stage_change(READY)
|
||||
user << "<span class='notice'>You lock the [initial(name)] assembly.</span>"
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 25, -3)
|
||||
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>"
|
||||
else if(stage == READY && !nadeassembly)
|
||||
|
||||
@@ -126,3 +126,10 @@
|
||||
/obj/item/weapon/grenade/clusterbuster/clf3
|
||||
name = "WELCOME TO HELL"
|
||||
payload = /obj/item/weapon/grenade/chem_grenade/clf3
|
||||
|
||||
|
||||
//random clusterbuster spawner
|
||||
/obj/item/weapon/grenade/clusterbuster/random/New()
|
||||
var/real_type = pick(subtypesof(/obj/item/weapon/grenade/clusterbuster))
|
||||
new real_type(loc)
|
||||
qdel(src)
|
||||
|
||||
@@ -12,18 +12,16 @@
|
||||
for(var/mob/living/M in get_hearers_in_view(7, flashbang_turf))
|
||||
bang(get_turf(M), M)
|
||||
|
||||
for(var/obj/effect/blob/B in get_hear(8,flashbang_turf)) //Blob damage here
|
||||
var/damage = round(40/(get_dist(B,get_turf(src))+1))
|
||||
B.take_damage(damage, BURN)
|
||||
for(var/obj/structure/blob/B in get_hear(8,flashbang_turf)) //Blob damage here
|
||||
var/distance = get_dist(B, get_turf(src))
|
||||
var/damage = round(100/(distance*distance)+1)
|
||||
B.take_damage(damage, BURN, "energy")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grenade/flashbang/proc/bang(turf/T , mob/living/M)
|
||||
M.show_message("<span class='warning'>BANG</span>", 2)
|
||||
playsound(loc, 'sound/weapons/flashbang.ogg', 100, 1)
|
||||
|
||||
//Checking for protection
|
||||
var/ear_safety = M.check_ear_prot()
|
||||
var/distance = max(1,get_dist(src,T))
|
||||
var/distance = max(0,get_dist(get_turf(src),T))
|
||||
|
||||
//Flash
|
||||
if(M.weakeyes)
|
||||
@@ -32,25 +30,14 @@
|
||||
M.Weaken(15) //hella stunned
|
||||
M.Stun(15)
|
||||
M.adjust_eye_damage(8)
|
||||
|
||||
if(M.flash_eyes(affect_silicon = 1))
|
||||
M.Stun(max(10/distance, 3))
|
||||
M.Weaken(max(10/distance, 3))
|
||||
|
||||
else if(M.flash_act(affect_silicon = 1))
|
||||
M.Stun(max(10/max(1,distance), 3))
|
||||
M.Weaken(max(10/max(1,distance), 3))
|
||||
//Bang
|
||||
if((loc == M) || loc == M.loc)//Holding on person or being exactly where lies is significantly more dangerous and voids protection
|
||||
if(!distance || loc == M || loc == M.loc) //Stop allahu akbarring rooms with this.
|
||||
M.Stun(10)
|
||||
M.Weaken(10)
|
||||
if(!ear_safety)
|
||||
M << sound('sound/weapons/flash_ring.ogg',0,1,0,100)
|
||||
M.Stun(max(10/distance, 3))
|
||||
M.Weaken(max(10/distance, 3))
|
||||
M.setEarDamage(M.ear_damage + rand(0, 5), max(M.ear_deaf,15))
|
||||
if (M.ear_damage >= 15)
|
||||
M << "<span class='warning'>Your ears start to ring badly!</span>"
|
||||
if(prob(M.ear_damage - 10 + 5))
|
||||
M << "<span class='warning'>You can't hear anything!</span>"
|
||||
M.disabilities |= DEAF
|
||||
else
|
||||
if (M.ear_damage >= 5)
|
||||
M << "<span class='warning'>Your ears start to ring!</span>"
|
||||
M.soundbang_act(1, 10, 10, 15)
|
||||
|
||||
else
|
||||
M.soundbang_act(1, max(10/max(1,distance), 3), rand(0, 5))
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/obj/item/weapon/grenade/iedcasing
|
||||
name = "improvised firebomb"
|
||||
desc = "A weak, improvised incendiary device."
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "improvised_grenade"
|
||||
item_state = "flashbang"
|
||||
@@ -34,9 +34,12 @@
|
||||
var/obj/item/weapon/reagent_containers/food/drinks/soda_cans/can = locate() in contents
|
||||
if(can)
|
||||
var/muh_layer = can.layer
|
||||
var/muh_plane = can.plane
|
||||
can.layer = FLOAT_LAYER
|
||||
can.plane = FLOAT_PLANE
|
||||
underlays += can
|
||||
can.layer = muh_layer
|
||||
can.plane = muh_plane
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing/attack_self(mob/user) //
|
||||
@@ -50,8 +53,8 @@
|
||||
var/turf/bombturf = get_turf(src)
|
||||
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]).")
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)].")
|
||||
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].")
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.throw_mode_on()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/weapon/grenade
|
||||
name = "grenade"
|
||||
desc = "It has an adjustable timer."
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "grenade"
|
||||
item_state = "flashbang"
|
||||
@@ -9,15 +9,18 @@
|
||||
throw_range = 7
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 5
|
||||
resistance_flags = FLAMMABLE
|
||||
obj_integrity = 40
|
||||
max_integrity = 40
|
||||
var/active = 0
|
||||
var/det_time = 50
|
||||
var/display_timer = 1
|
||||
|
||||
/obj/item/weapon/grenade/burn()
|
||||
prime()
|
||||
..()
|
||||
/obj/item/weapon/grenade/deconstruct(disassembled = TRUE)
|
||||
if(!disassembled)
|
||||
prime()
|
||||
if(!qdeleted(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grenade/proc/clown_check(mob/living/carbon/human/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
@@ -52,8 +55,10 @@
|
||||
add_fingerprint(user)
|
||||
var/turf/bombturf = get_turf(src)
|
||||
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]).")
|
||||
var/message = "[ADMIN_LOOKUPFLW(user)]) has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)]"
|
||||
bombers += message
|
||||
message_admins(message)
|
||||
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].")
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.throw_mode_on()
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
update_icon()
|
||||
return
|
||||
if(nadeassembly && istype(I, /obj/item/weapon/wirecutters))
|
||||
playsound(src, 'sound/items/Wirecutter.ogg', 20, 1)
|
||||
playsound(src, I.usesound, 20, 1)
|
||||
nadeassembly.loc = get_turf(src)
|
||||
nadeassembly.master = null
|
||||
nadeassembly = null
|
||||
@@ -60,7 +60,7 @@
|
||||
nadeassembly.attack_self(user)
|
||||
return
|
||||
var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num
|
||||
if(user.get_active_hand() == src)
|
||||
if(user.get_active_held_item() == src)
|
||||
newtime = Clamp(newtime, 10, 60000)
|
||||
det_time = newtime
|
||||
user << "Timer set for [det_time] seconds."
|
||||
@@ -78,8 +78,8 @@
|
||||
src.target = AM
|
||||
loc = null
|
||||
|
||||
message_admins("[key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[target.x];Y=[target.y];Z=[target.z]'>JMP</a>) with [det_time] second fuse",0,1)
|
||||
log_game("[key_name(user)] planted [src.name] on [target.name] at ([target.x],[target.y],[target.z]) with [det_time] second fuse")
|
||||
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)
|
||||
@@ -87,9 +87,9 @@
|
||||
addtimer(src, "prime", det_time*10)
|
||||
|
||||
/obj/item/weapon/grenade/plastic/suicide_act(mob/user)
|
||||
message_admins("[key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) suicided with [src.name] at ([user.x],[user.y],[user.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)",0,1)
|
||||
message_admins("[key_name(user)] suicided with [src.name] at ([user.x],[user.y],[user.z])")
|
||||
user.visible_message("<span class='suicide'>[user] activates the [src.name] and holds it above \his head! It looks like \he's going out with a bang!</span>")
|
||||
message_admins("[key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) suicided with [src] at ([user.x],[user.y],[user.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)",0,1)
|
||||
message_admins("[key_name(user)] suicided with [src] at ([user.x],[user.y],[user.z])")
|
||||
user.visible_message("<span class='suicide'>[user] activates the [src] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!</span>")
|
||||
var/message_say = "FOR NO RAISIN!"
|
||||
if(user.mind)
|
||||
if(user.mind.special_role)
|
||||
@@ -105,10 +105,9 @@
|
||||
else if(user.mind.gang_datum)
|
||||
message_say = "[uppertext(user.mind.gang_datum.name)] RULES!"
|
||||
user.say(message_say)
|
||||
target = user
|
||||
sleep(10)
|
||||
prime()
|
||||
user.gib(no_brain = 1)
|
||||
explosion(user,0,2,0) //Cheap explosion imitation because putting prime() here causes runtimes
|
||||
user.gib(1, 1)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grenade/plastic/update_icon()
|
||||
if(nadeassembly)
|
||||
@@ -122,7 +121,7 @@
|
||||
|
||||
/obj/item/weapon/grenade/plastic/c4
|
||||
name = "C4"
|
||||
desc = "Used to put holes in specific areas without too much extra hole. A saboteurs favourite."
|
||||
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
|
||||
@@ -147,7 +146,7 @@
|
||||
|
||||
/obj/item/weapon/grenade/plastic/x4
|
||||
name = "X4"
|
||||
desc = "A specialized shaped high explosive breaching charge. Designed to be safer for the user, and less so, for the wall."
|
||||
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"
|
||||
@@ -162,9 +161,9 @@
|
||||
else
|
||||
location = get_turf(src)
|
||||
if(location)
|
||||
if(istype(loc, /obj/item/weapon/twohanded/spear))
|
||||
if(istype(loc, /obj/item/weapon/twohanded/spear) || !target)
|
||||
explosion(location, 0, 2, 3)
|
||||
else if(target.density)
|
||||
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)
|
||||
|
||||
@@ -20,13 +20,12 @@
|
||||
/obj/item/weapon/grenade/smokebomb/prime()
|
||||
update_mob()
|
||||
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
smoke.set_up(4, usr.loc)
|
||||
smoke.set_up(4, src)
|
||||
smoke.start()
|
||||
|
||||
|
||||
for(var/obj/effect/blob/B in view(8,src))
|
||||
for(var/obj/structure/blob/B in view(8,src))
|
||||
var/damage = round(30/(get_dist(B,src)+1))
|
||||
B.health -= damage
|
||||
B.update_icon()
|
||||
B.take_damage(damage, BURN, "melee", 0)
|
||||
sleep(80)
|
||||
qdel(src)
|
||||
|
||||
@@ -15,23 +15,17 @@
|
||||
var/turf/T = get_turf(src)
|
||||
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
|
||||
for(var/mob/living/carbon/C in viewers(T, null))
|
||||
C.flash_eyes()
|
||||
C.flash_act()
|
||||
|
||||
for(var/i=1, i<=deliveryamt, i++)
|
||||
var/atom/movable/x = new spawner_type
|
||||
x.loc = T
|
||||
if(prob(50))
|
||||
for(var/j = 1, j <= rand(1, 3), j++)
|
||||
step(x, pick(NORTH,SOUTH,EAST,WEST))
|
||||
|
||||
// Spawn some hostile syndicate critters
|
||||
// Spawn some hostile syndicate critters and spread them out
|
||||
spawn_and_random_walk(spawner_type, T, deliveryamt, walk_chance=50, admin_spawn=admin_spawned)
|
||||
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grenade/spawnergrenade/manhacks
|
||||
name = "viscerator delivery grenade"
|
||||
spawner_type = /mob/living/simple_animal/hostile/viscerator
|
||||
deliveryamt = 5
|
||||
deliveryamt = 10
|
||||
origin_tech = "materials=3;magnets=4;syndicate=3"
|
||||
|
||||
/obj/item/weapon/grenade/spawnergrenade/spesscarp
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
item_state = "flashbang"
|
||||
origin_tech = "materials=3;magnets=4;syndicate=3"
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/syndieminibomb/prime()
|
||||
update_mob()
|
||||
explosion(src.loc,1,2,4,flame_range = 2)
|
||||
@@ -28,25 +29,25 @@
|
||||
icon_state = "frag"
|
||||
|
||||
/obj/item/weapon/grenade/gluon
|
||||
desc = "An advanced grenade that releases a harmful stream of gluons inducing radiation in those nearby. These gluon streams will also make victims feel exhausted, and induce shivering. This extreme coldness will also likely wet any nearby floors."
|
||||
name = "gluon frag grenade"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "bluefrag"
|
||||
item_state = "flashbang"
|
||||
var/freeze_range = 4
|
||||
var/rad_damage = 35
|
||||
var/stamina_damage = 30
|
||||
desc = "An advanced grenade that releases a harmful stream of gluons inducing radiation in those nearby. These gluon streams will also make victims feel exhausted, and induce shivering. This extreme coldness will also likely wet any nearby floors."
|
||||
name = "gluon frag grenade"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "bluefrag"
|
||||
item_state = "flashbang"
|
||||
var/freeze_range = 4
|
||||
var/rad_damage = 35
|
||||
var/stamina_damage = 30
|
||||
|
||||
/obj/item/weapon/grenade/gluon/prime()
|
||||
update_mob()
|
||||
playsound(loc, 'sound/effects/EMPulse.ogg', 50, 1)
|
||||
radiation_pulse(loc,freeze_range,freeze_range+1,rad_damage)
|
||||
for(var/turf/T in view(freeze_range,loc))
|
||||
if(istype(T,/turf/open/floor))
|
||||
var/turf/open/floor/F = T
|
||||
F.wet = TURF_WET_PERMAFROST
|
||||
addtimer(F, "MakeDry", rand(3000, 3100), 0, TURF_WET_PERMAFROST)
|
||||
for(var/mob/living/carbon/L in T)
|
||||
L.adjustStaminaLoss(stamina_damage)
|
||||
L.bodytemperature -= 230
|
||||
qdel(src)
|
||||
update_mob()
|
||||
playsound(loc, 'sound/effects/EMPulse.ogg', 50, 1)
|
||||
radiation_pulse(loc,freeze_range,freeze_range+1,rad_damage)
|
||||
for(var/turf/T in view(freeze_range,loc))
|
||||
if(isfloorturf(T))
|
||||
var/turf/open/floor/F = T
|
||||
F.wet = TURF_WET_PERMAFROST
|
||||
addtimer(F, "MakeDry", rand(3000, 3100), TIMER_NORMAL, TURF_WET_PERMAFROST)
|
||||
for(var/mob/living/carbon/L in T)
|
||||
L.adjustStaminaLoss(stamina_damage)
|
||||
L.bodytemperature -= 230
|
||||
qdel(src)
|
||||
|
||||
@@ -12,12 +12,13 @@
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 0
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
materials = list(MAT_METAL=500)
|
||||
origin_tech = "engineering=3;combat=3"
|
||||
breakouttime = 600 //Deciseconds = 60s = 1 minute
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50)
|
||||
var/cuffsound = 'sound/weapons/handcuffs.ogg'
|
||||
var/trashtype = null //for disposable cuffs
|
||||
|
||||
@@ -30,12 +31,12 @@
|
||||
return
|
||||
|
||||
if(!C.handcuffed)
|
||||
if(C.get_num_arms() >= 2)
|
||||
if(C.get_num_arms() >= 2 || C.get_arm_ignore())
|
||||
C.visible_message("<span class='danger'>[user] is trying to put [src.name] on [C]!</span>", \
|
||||
"<span class='userdanger'>[user] is trying to put [src.name] on [C]!</span>")
|
||||
|
||||
playsound(loc, cuffsound, 30, 1, -2)
|
||||
if(do_mob(user, C, 30) && C.get_num_arms() >= 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>"
|
||||
if(istype(src, /obj/item/weapon/restraints/handcuffs/cable))
|
||||
@@ -168,11 +169,13 @@
|
||||
return
|
||||
else if(istype(I, /obj/item/stack/sheet/metal))
|
||||
var/obj/item/stack/sheet/metal/M = I
|
||||
if(M.amount < 6)
|
||||
if(M.get_amount() < 6)
|
||||
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>"
|
||||
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)
|
||||
@@ -184,7 +187,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg/attack(mob/living/carbon/C, mob/user)
|
||||
if(isrobot(user))
|
||||
if(iscyborg(user))
|
||||
if(!C.handcuffed)
|
||||
playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
|
||||
C.visible_message("<span class='danger'>[user] is trying to put zipties on [C]!</span>", \
|
||||
@@ -225,7 +228,7 @@
|
||||
icon_state = "handcuff"
|
||||
flags = CONDUCT
|
||||
throwforce = 0
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
origin_tech = "engineering=3;combat=3"
|
||||
slowdown = 7
|
||||
breakouttime = 300 //Deciseconds = 30s = 0.5 minute
|
||||
@@ -245,7 +248,7 @@
|
||||
icon_state = "[initial(icon_state)][armed]"
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is sticking \his head in the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is sticking [user.p_their()] head in the [src.name]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
|
||||
return (BRUTELOSS)
|
||||
|
||||
@@ -274,8 +277,10 @@
|
||||
feedback_add_details("handcuffs","B") //Yes, I know they're legcuffs. Don't change this, no need for an extra variable. The "B" is used to tell them apart.
|
||||
else if(isanimal(L))
|
||||
var/mob/living/simple_animal/SA = L
|
||||
if(!SA.flying && SA.mob_size > MOB_SIZE_TINY)
|
||||
if(SA.mob_size > MOB_SIZE_TINY)
|
||||
snap = 1
|
||||
if(L.movement_type & FLYING)
|
||||
snap = 0
|
||||
if(snap)
|
||||
armed = 0
|
||||
icon_state = "[initial(icon_state)][armed]"
|
||||
@@ -318,6 +323,11 @@
|
||||
origin_tech = "engineering=3;combat=1"
|
||||
var/weaken = 0
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/bola/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0)
|
||||
if(!..())
|
||||
return
|
||||
playsound(src.loc,'sound/weapons/bolathrow.ogg', 75, 1)
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/bola/throw_impact(atom/hit_atom)
|
||||
if(..() || !iscarbon(hit_atom))//if it gets caught or the target can't be cuffed,
|
||||
return//abort
|
||||
@@ -344,7 +354,7 @@
|
||||
desc = "A specialized hard-light bola designed to ensnare fleeing criminals and aid in arrests."
|
||||
icon_state = "ebola"
|
||||
hitsound = 'sound/weapons/taserhit.ogg'
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
breakouttime = 60
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/bola/energy/throw_impact(atom/hit_atom)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "signmaker"
|
||||
item_state = "electronic"
|
||||
force = 0
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
@@ -14,7 +14,7 @@
|
||||
var/list/signs = list()
|
||||
var/max_signs = 10
|
||||
var/creation_time = 0 //time to create a holosign in deciseconds.
|
||||
var/holosign_type = /obj/effect/overlay/holograph/wetsign
|
||||
var/holosign_type = /obj/structure/holosign/wetsign
|
||||
var/holocreator_busy = 0 //to prevent placing multiple holo barriers at once
|
||||
|
||||
/obj/item/weapon/holosign_creator/afterattack(atom/target, mob/user, flag)
|
||||
@@ -22,7 +22,7 @@
|
||||
if(!check_allowed_items(target, 1))
|
||||
return
|
||||
var/turf/T = get_turf(target)
|
||||
var/obj/effect/overlay/holograph/H = locate(holosign_type) in T
|
||||
var/obj/structure/holosign/H = locate(holosign_type) in T
|
||||
if(H)
|
||||
user << "<span class='notice'>You use [src] to deactivate [H].</span>"
|
||||
qdel(H)
|
||||
@@ -62,7 +62,7 @@
|
||||
name = "security holobarrier projector"
|
||||
desc = "A holographic projector that creates holographic security barriers."
|
||||
icon_state = "signmaker_sec"
|
||||
holosign_type = /obj/effect/overlay/holograph/barrier
|
||||
holosign_type = /obj/structure/holosign/barrier
|
||||
creation_time = 30
|
||||
max_signs = 6
|
||||
|
||||
@@ -70,25 +70,25 @@
|
||||
name = "engineering holobarrier projector"
|
||||
desc = "A holographic projector that creates holographic engineering barriers."
|
||||
icon_state = "signmaker_engi"
|
||||
holosign_type = /obj/effect/overlay/holograph/barrier/engineering
|
||||
holosign_type = /obj/structure/holosign/barrier/engineering
|
||||
creation_time = 30
|
||||
max_signs = 6
|
||||
|
||||
/obj/item/weapon/holosign_creator/cyborg
|
||||
name = "Energy Barrier Projector"
|
||||
desc = "A holographic projector that creates fragile energy fields"
|
||||
creation_time = 5
|
||||
creation_time = 15
|
||||
max_signs = 9
|
||||
holosign_type = /obj/effect/overlay/holograph/barrier/cyborg
|
||||
holosign_type = /obj/structure/holosign/barrier/cyborg
|
||||
var/shock = 0
|
||||
|
||||
/obj/item/weapon/holosign_creator/cyborg/attack_self(mob/user)
|
||||
if(isrobot(user))
|
||||
if(iscyborg(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
|
||||
if(shock)
|
||||
user <<"<span class='notice'>You clear all active holograms, and reset your projector to normal.</span>"
|
||||
holosign_type = /obj/effect/overlay/holograph/barrier/cyborg
|
||||
holosign_type = /obj/structure/holosign/barrier/cyborg
|
||||
creation_time = 5
|
||||
if(signs.len)
|
||||
for(var/H in signs)
|
||||
@@ -97,7 +97,7 @@
|
||||
return
|
||||
else if(R.emagged&&!shock)
|
||||
user <<"<span class='warning'>You clear all active holograms, and overload your energy projector!</span>"
|
||||
holosign_type = /obj/effect/overlay/holograph/barrier/cyborg/hacked
|
||||
holosign_type = /obj/structure/holosign/barrier/cyborg/hacked
|
||||
creation_time = 30
|
||||
if(signs.len)
|
||||
for(var/H in signs)
|
||||
@@ -114,147 +114,3 @@
|
||||
qdel(H)
|
||||
user << "<span class='notice'>You clear all active holograms.</span>"
|
||||
|
||||
/obj/effect/overlay/holograph
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
anchored = 1
|
||||
var/holo_integrity = 1
|
||||
var/obj/item/weapon/holosign_creator/projector
|
||||
|
||||
/obj/effect/overlay/holograph/New(loc, source_projector)
|
||||
if(source_projector)
|
||||
projector = source_projector
|
||||
projector.signs += src
|
||||
..()
|
||||
|
||||
/obj/effect/overlay/holograph/Destroy()
|
||||
if(projector)
|
||||
projector.signs -= src
|
||||
projector = null
|
||||
return ..()
|
||||
|
||||
/obj/effect/overlay/holograph/attacked_by(obj/item/I, mob/user)
|
||||
..()
|
||||
take_damage(I.force * 0.5, I.damtype)
|
||||
|
||||
/obj/effect/overlay/holograph/blob_act(obj/effect/blob/B)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/overlay/holograph/attack_animal(mob/living/simple_animal/M)
|
||||
if(!M.melee_damage_upper)
|
||||
return
|
||||
attack_generic(5, M)
|
||||
|
||||
/obj/effect/overlay/holograph/attack_alien(mob/living/carbon/alien/A)
|
||||
attack_generic(5, A)
|
||||
|
||||
/obj/effect/overlay/holograph/attack_hand(mob/living/user)
|
||||
attack_generic(1, user)
|
||||
|
||||
/obj/effect/overlay/holograph/mech_melee_attack(obj/mecha/M)
|
||||
M.do_attack_animation(src)
|
||||
playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1)
|
||||
visible_message("<span class='danger'>[M.name] has hit [src].</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/overlay/holograph/attack_slime(mob/living/simple_animal/slime/S)
|
||||
if(S.is_adult)
|
||||
attack_generic(5, S)
|
||||
else
|
||||
attack_generic(2, S)
|
||||
|
||||
/obj/effect/overlay/holograph/proc/attack_generic(damage_amount, mob/user)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.do_attack_animation(src)
|
||||
user.visible_message("<span class='danger'>[user] hits [src].</span>", \
|
||||
"<span class='danger'>You hit [src].</span>" )
|
||||
take_damage(damage_amount)
|
||||
|
||||
/obj/effect/overlay/holograph/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1)
|
||||
switch(damage_type)
|
||||
if(BRUTE)
|
||||
if(damage && sound_effect)
|
||||
playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1)
|
||||
if(BURN)
|
||||
if(damage && sound_effect)
|
||||
playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1)
|
||||
else
|
||||
return
|
||||
holo_integrity -= damage
|
||||
if(holo_integrity <= 0)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/overlay/holograph/hitby(atom/movable/AM)
|
||||
..()
|
||||
var/tforce = 1
|
||||
if(ismob(AM))
|
||||
tforce = 5
|
||||
else if(isobj(AM))
|
||||
var/obj/item/I = AM
|
||||
tforce = max(1, I.throwforce * 0.2)
|
||||
take_damage(tforce)
|
||||
|
||||
/obj/effect/overlay/holograph/bullet_act(obj/item/projectile/P)
|
||||
. = ..()
|
||||
take_damage(P.damage * 0.5, P.damage_type)
|
||||
|
||||
/obj/effect/overlay/holograph/wetsign
|
||||
name = "wet floor sign"
|
||||
desc = "The words flicker as if they mean nothing."
|
||||
icon_state = "holosign"
|
||||
|
||||
/obj/effect/overlay/holograph/barrier
|
||||
name = "holo barrier"
|
||||
desc = "A short holographic barrier which can only be passed by walking."
|
||||
icon_state = "holosign_sec"
|
||||
pass_flags = LETPASSTHROW
|
||||
density = 1
|
||||
holo_integrity = 4
|
||||
|
||||
/obj/effect/overlay/holograph/barrier/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(!density)
|
||||
return 1
|
||||
if(air_group || (height==0))
|
||||
return 1
|
||||
if(mover.pass_flags & (PASSGLASS|PASSTABLE|PASSGRILLE))
|
||||
return 1
|
||||
if(iscarbon(mover))
|
||||
var/mob/living/carbon/C = mover
|
||||
if(C.m_intent == "walk")
|
||||
return 1
|
||||
|
||||
/obj/effect/overlay/holograph/barrier/engineering
|
||||
icon_state = "holosign_engi"
|
||||
|
||||
/obj/effect/overlay/holograph/barrier/cyborg
|
||||
name = "Energy Field"
|
||||
desc = "A fragile energy field that blocks movement"
|
||||
density = 1
|
||||
holo_integrity = 1
|
||||
|
||||
/obj/effect/overlay/holograph/barrier/CanPass()
|
||||
return 0
|
||||
|
||||
/obj/effect/overlay/holograph/barrier/cyborg/hacked
|
||||
name = "Charged Energy Field"
|
||||
desc = "A powerful energy field that blocks movement. Energy arcs off it"
|
||||
holo_integrity = 3
|
||||
var/shockcd = 0
|
||||
|
||||
/obj/effect/overlay/holograph/barrier/cyborg/hacked/proc/cooldown()
|
||||
shockcd = FALSE
|
||||
|
||||
/obj/effect/overlay/holograph/barrier/cyborg/hacked/attack_hand(mob/living/user)
|
||||
if(!shockcd)
|
||||
if(ismob(user))
|
||||
var/mob/living/M = user
|
||||
M.electrocute_act(15,"Energy Barrier", safety=1)
|
||||
shockcd = TRUE
|
||||
addtimer(src, "cooldown", 10)
|
||||
|
||||
/obj/effect/overlay/holograph/barrier/cyborg/hacked/Bumped(atom/user)
|
||||
if(!shockcd)
|
||||
if(ismob(user))
|
||||
var/mob/living/M = user
|
||||
M.electrocute_act(15,"Energy Barrier", safety=1)
|
||||
shockcd = TRUE
|
||||
addtimer(src, "cooldown", 10)
|
||||
|
||||
@@ -7,36 +7,45 @@
|
||||
throw_speed = 3
|
||||
throw_range = 4
|
||||
throwforce = 10
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/reskinned = FALSE
|
||||
|
||||
/obj/item/weapon/nullrod/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is killing \himself with \the [src.name]! It looks like \he's trying to get closer to god!</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is killing [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to get closer to god!</span>")
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/obj/item/weapon/nullrod/attack_self(mob/user)
|
||||
if(reskinned)
|
||||
return
|
||||
if(user.mind && (user.mind.assigned_role == "Chaplain"))
|
||||
if(user.mind && (user.mind.isholy))
|
||||
reskin_holy_weapon(user)
|
||||
|
||||
/obj/item/weapon/nullrod/proc/reskin_holy_weapon(mob/M)
|
||||
var/list/holy_weapons_list = typesof(/obj/item/weapon/nullrod)
|
||||
var/list/display_names = list()
|
||||
for(var/V in holy_weapons_list)
|
||||
var/atom/A = V
|
||||
display_names += initial(A.name)
|
||||
var/obj/item/weapon/nullrod/holy_weapon
|
||||
|
||||
var/choice = input(M,"What theme would you like for your holy weapon?","Holy Weapon Theme") as null|anything in display_names
|
||||
if(!src || !choice || M.stat || !in_range(M, src) || M.restrained() || !M.canmove || reskinned)
|
||||
return
|
||||
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>"
|
||||
else
|
||||
var/list/holy_weapons_list = typesof(/obj/item/weapon/nullrod)
|
||||
var/list/display_names = list()
|
||||
for(var/V in holy_weapons_list)
|
||||
var/atom/A = V
|
||||
display_names += initial(A.name)
|
||||
|
||||
var/index = display_names.Find(choice)
|
||||
var/A = holy_weapons_list[index]
|
||||
var/choice = input(M,"What theme would you like for your holy weapon?","Holy Weapon Theme") as null|anything in display_names
|
||||
if(!src || !choice || M.stat || !in_range(M, src) || M.restrained() || !M.canmove || reskinned)
|
||||
return
|
||||
|
||||
var/obj/item/weapon/nullrod/holy_weapon = new A
|
||||
var/index = display_names.Find(choice)
|
||||
var/A = holy_weapons_list[index]
|
||||
|
||||
holy_weapon = new A
|
||||
|
||||
SSreligion.holy_weapon = holy_weapon.type
|
||||
|
||||
feedback_set_details("chaplain_weapon","[choice]")
|
||||
|
||||
feedback_set_details("chaplain_weapon","[choice]")
|
||||
|
||||
if(holy_weapon)
|
||||
holy_weapon.reskinned = TRUE
|
||||
@@ -50,7 +59,7 @@
|
||||
name = "god hand"
|
||||
desc = "This hand of yours glows with an awesome power!"
|
||||
flags = ABSTRACT | NODROP | DROPDEL
|
||||
w_class = 5
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
damtype = BURN
|
||||
attack_verb = list("punched", "cross countered", "pummeled")
|
||||
@@ -60,7 +69,7 @@
|
||||
item_state = "godstaff-red"
|
||||
name = "red holy staff"
|
||||
desc = "It has a mysterious, protective aura."
|
||||
w_class = 5
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
force = 5
|
||||
slot_flags = SLOT_BACK
|
||||
block_chance = 50
|
||||
@@ -82,7 +91,7 @@
|
||||
item_state = "claymore"
|
||||
name = "holy claymore"
|
||||
desc = "A weapon fit for a crusade!"
|
||||
w_class = 5
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
slot_flags = SLOT_BACK|SLOT_BELT
|
||||
block_chance = 30
|
||||
sharpness = IS_SHARP
|
||||
@@ -127,11 +136,15 @@
|
||||
|
||||
/obj/item/weapon/nullrod/claymore/multiverse
|
||||
name = "extradimensional blade"
|
||||
desc = "Once the harbringer of a interdimensional war, now a dormant souvenir. Still sharp though."
|
||||
desc = "Once the harbinger of an interdimensional war, its sharpness fluctuates wildly."
|
||||
icon_state = "multiverse"
|
||||
item_state = "multiverse"
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
/obj/item/weapon/nullrod/claymore/multiverse/attack(mob/living/carbon/M, mob/living/carbon/user)
|
||||
force = rand(1, 30)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/nullrod/claymore/saber
|
||||
name = "light energy sword"
|
||||
hitsound = 'sound/weapons/blade1.ogg'
|
||||
@@ -164,11 +177,11 @@
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
/obj/item/weapon/nullrod/scythe
|
||||
icon_state = "scythe0"
|
||||
item_state = "scythe0"
|
||||
icon_state = "scythe1"
|
||||
item_state = "scythe1"
|
||||
name = "reaper scythe"
|
||||
desc = "Ask not for whom the bell tolls..."
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
armour_penetration = 35
|
||||
slot_flags = SLOT_BACK
|
||||
sharpness = IS_SHARP
|
||||
@@ -180,7 +193,16 @@
|
||||
name = "high frequency blade"
|
||||
desc = "Bad references are the DNA of the soul."
|
||||
attack_verb = list("chopped", "sliced", "cut", "zandatsu'd")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
|
||||
|
||||
/obj/item/weapon/nullrod/scythe/spellblade
|
||||
icon_state = "spellblade"
|
||||
item_state = "spellblade"
|
||||
icon = 'icons/obj/guns/magic.dmi'
|
||||
name = "dormant spellblade"
|
||||
desc = "The blade grants the wielder nearly limitless power...if they can figure out how to turn it on, that is."
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
|
||||
/obj/item/weapon/nullrod/scythe/talking
|
||||
icon_state = "talking_sword"
|
||||
@@ -188,7 +210,7 @@
|
||||
name = "possessed blade"
|
||||
desc = "When the station falls into chaos, it's nice to have a friend by your side."
|
||||
attack_verb = list("chopped", "sliced", "cut")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
var/possessed = FALSE
|
||||
|
||||
/obj/item/weapon/nullrod/scythe/talking/attack_self(mob/living/user)
|
||||
@@ -229,9 +251,9 @@
|
||||
icon_state = "hammeron"
|
||||
item_state = "hammeron"
|
||||
name = "relic war hammer"
|
||||
desc = "This war hammer cost the chaplain fourty thousand space dollars."
|
||||
desc = "This war hammer cost the chaplain forty thousand space dollars."
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 5
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
attack_verb = list("smashed", "bashed", "hammered", "crunched")
|
||||
|
||||
/obj/item/weapon/nullrod/chainsaw
|
||||
@@ -239,7 +261,7 @@
|
||||
desc = "Good? Bad? You're the guy with the chainsaw hand."
|
||||
icon_state = "chainsaw_on"
|
||||
item_state = "mounted_chainsaw"
|
||||
w_class = 5
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
flags = NODROP | ABSTRACT
|
||||
sharpness = IS_SHARP
|
||||
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
|
||||
@@ -262,10 +284,11 @@
|
||||
item_state = "chain"
|
||||
slot_flags = SLOT_BELT
|
||||
attack_verb = list("whipped", "lashed")
|
||||
hitsound = 'sound/weapons/chainhit.ogg'
|
||||
|
||||
/obj/item/weapon/nullrod/fedora
|
||||
name = "atheist's fedora"
|
||||
desc = "The brim of the hat is as sharp as your wit. Throwing it at someone would hurt almost as much as disproving the existence of God."
|
||||
desc = "The brim of the hat is as sharp as your wit. The edge would hurt almost as much as disproving the existence of God."
|
||||
icon_state = "fedora"
|
||||
item_state = "fedora"
|
||||
slot_flags = SLOT_HEAD
|
||||
@@ -273,7 +296,9 @@
|
||||
force = 0
|
||||
throw_speed = 4
|
||||
throw_range = 7
|
||||
throwforce = 20
|
||||
throwforce = 30
|
||||
sharpness = IS_SHARP
|
||||
attack_verb = list("enlightened", "redpilled")
|
||||
|
||||
/obj/item/weapon/nullrod/armblade
|
||||
name = "dark blessing"
|
||||
@@ -281,12 +306,12 @@
|
||||
icon_state = "arm_blade"
|
||||
item_state = "arm_blade"
|
||||
flags = ABSTRACT | NODROP
|
||||
w_class = 5
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
sharpness = IS_SHARP
|
||||
|
||||
/obj/item/weapon/nullrod/carp
|
||||
name = "carp-sie plushie"
|
||||
desc = "An adorable stuffed toy that resembles the god of all carp. The teeth look pretty sharp. Activate it to recieve the blessing of Carp-Sie."
|
||||
desc = "An adorable stuffed toy that resembles the god of all carp. The teeth look pretty sharp. Activate it to receive the blessing of Carp-Sie."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "carpplushie"
|
||||
item_state = "carp_plushie"
|
||||
@@ -297,17 +322,15 @@
|
||||
|
||||
/obj/item/weapon/nullrod/carp/attack_self(mob/living/user)
|
||||
if(used_blessing)
|
||||
return
|
||||
if(user.mind && (user.mind.assigned_role != "Chaplain"))
|
||||
return
|
||||
user << "You are blessed by Carp-Sie. Wild space carp will no longer attack you."
|
||||
user.faction |= "carp"
|
||||
used_blessing = TRUE
|
||||
else if(user.mind && (user.mind.isholy))
|
||||
user << "You are blessed by Carp-Sie. Wild space carp will no longer attack you."
|
||||
user.faction |= "carp"
|
||||
used_blessing = TRUE
|
||||
|
||||
/obj/item/weapon/nullrod/claymore/bostaff //May as well make it a "claymore" and inherit the blocking
|
||||
name = "monk's staff"
|
||||
desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, now used to harass the clown."
|
||||
w_class = 4
|
||||
desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, it is now used to harass the clown."
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
force = 15
|
||||
block_chance = 40
|
||||
slot_flags = SLOT_BACK
|
||||
@@ -322,7 +345,7 @@
|
||||
icon_state = "crysknife"
|
||||
item_state = "crysknife"
|
||||
name = "arrhythmic knife"
|
||||
w_class = 5
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
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
|
||||
@@ -333,7 +356,7 @@
|
||||
/obj/item/weapon/nullrod/pitchfork
|
||||
icon_state = "pitchfork0"
|
||||
name = "unholy pitchfork"
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
desc = "Holding this makes you look absolutely devilish."
|
||||
attack_verb = list("poked", "impaled", "pierced", "jabbed")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
@@ -349,3 +372,4 @@
|
||||
|
||||
/obj/item/weapon/nullrod/tribal_knife/process()
|
||||
slowdown = rand(-2, 2)
|
||||
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
actions_types = list(/datum/action/item_action/hands_free/activate)
|
||||
var/activated = 1 //1 for implant types that can be activated, 0 for ones that are "always on" like mindshield implants
|
||||
var/implanted = null
|
||||
var/mob/living/imp_in = null
|
||||
var/mob/living/carbon/imp_in = null
|
||||
item_color = "b"
|
||||
var/allow_multiple = 0
|
||||
var/uses = -1
|
||||
flags = DROPDEL
|
||||
|
||||
|
||||
/obj/item/weapon/implant/proc/trigger(emote, mob/source)
|
||||
/obj/item/weapon/implant/proc/trigger(emote, mob/living/carbon/source)
|
||||
return
|
||||
|
||||
/obj/item/weapon/implant/proc/activate()
|
||||
@@ -27,27 +27,30 @@
|
||||
//return 1 if the implant injects
|
||||
//return -1 if the implant fails to inject
|
||||
//return 0 if there is no room for implant
|
||||
/obj/item/weapon/implant/proc/implant(var/mob/source, var/mob/user)
|
||||
var/obj/item/weapon/implant/imp_e = locate(src.type) in source
|
||||
if(!allow_multiple && imp_e && imp_e != src)
|
||||
if(imp_e.uses < initial(imp_e.uses)*2)
|
||||
if(uses == -1)
|
||||
imp_e.uses = -1
|
||||
else
|
||||
imp_e.uses = min(imp_e.uses + uses, initial(imp_e.uses)*2)
|
||||
qdel(src)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
/obj/item/weapon/implant/proc/implant(mob/living/carbon/source, mob/user, silent = 0)
|
||||
for(var/X in source.implants)
|
||||
if(istype(X, type))
|
||||
var/obj/item/weapon/implant/imp_e = X
|
||||
if(!allow_multiple)
|
||||
if(imp_e.uses < initial(imp_e.uses)*2)
|
||||
if(uses == -1)
|
||||
imp_e.uses = -1
|
||||
else
|
||||
imp_e.uses = min(imp_e.uses + uses, initial(imp_e.uses)*2)
|
||||
qdel(src)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
src.loc = source
|
||||
imp_in = source
|
||||
source.implants += src
|
||||
implanted = 1
|
||||
if(activated)
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.Grant(source)
|
||||
if(istype(source, /mob/living/carbon/human))
|
||||
if(ishuman(source))
|
||||
var/mob/living/carbon/human/H = source
|
||||
H.sec_hud_set_implants()
|
||||
|
||||
@@ -56,14 +59,15 @@
|
||||
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/implant/proc/removed(var/mob/source)
|
||||
/obj/item/weapon/implant/proc/removed(mob/living/carbon/source, silent = 0, special = 0)
|
||||
src.loc = null
|
||||
imp_in = null
|
||||
implanted = 0
|
||||
source.implants -= src
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.Grant(source)
|
||||
if(istype(source, /mob/living/carbon/human))
|
||||
if(ishuman(source))
|
||||
var/mob/living/carbon/human/H = source
|
||||
H.sec_hud_set_implants()
|
||||
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
|
||||
/obj/item/weapon/implant/abductor
|
||||
name = "recall implant"
|
||||
desc = "Returns you to the mothership."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "implant"
|
||||
activated = 1
|
||||
origin_tech = "materials=2;biotech=7;magnets=4;bluespace=4;abductor=5"
|
||||
var/obj/machinery/abductor/pad/home
|
||||
var/cooldown = 30
|
||||
|
||||
/obj/item/weapon/implant/abductor/activate()
|
||||
if(cooldown == initial(cooldown))
|
||||
home.Retrieve(imp_in,1)
|
||||
cooldown = 0
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
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))
|
||||
cooldown++
|
||||
if(cooldown == initial(cooldown))
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/implant/abductor/implant(var/mob/source, var/mob/user)
|
||||
if(..())
|
||||
var/obj/machinery/abductor/console/console
|
||||
if(ishuman(source))
|
||||
var/mob/living/carbon/human/H = source
|
||||
if(H.dna.species.id == "abductor")
|
||||
var/datum/species/abductor/S = H.dna.species
|
||||
console = get_team_console(S.team)
|
||||
home = console.pad
|
||||
|
||||
if(!home)
|
||||
console = get_team_console(pick(1, 2, 3, 4))
|
||||
home = console.pad
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/implant/abductor/proc/get_team_console(var/team)
|
||||
var/obj/machinery/abductor/console/console
|
||||
for(var/obj/machinery/abductor/console/c in machines)
|
||||
if(c.team == team)
|
||||
console = c
|
||||
break
|
||||
return console
|
||||
@@ -24,11 +24,11 @@
|
||||
/obj/item/weapon/implant/chem/New()
|
||||
..()
|
||||
create_reagents(50)
|
||||
tracked_implants += src
|
||||
tracked_chem_implants += src
|
||||
|
||||
/obj/item/weapon/implant/chem/Destroy()
|
||||
..()
|
||||
tracked_implants -= src
|
||||
tracked_chem_implants -= src
|
||||
|
||||
|
||||
|
||||
@@ -62,7 +62,8 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/implantcase/chem/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(imp)
|
||||
imp.attackby(W, user, params)
|
||||
else
|
||||
if(istype(W,/obj/item/weapon/reagent_containers/syringe) && imp)
|
||||
W.afterattack(imp, user, params)
|
||||
return TRUE
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
//Exile implants will allow you to use the station gate, but not return home.
|
||||
//This will allow security to exile badguys/for badguys to exile their kill targets
|
||||
|
||||
/obj/item/weapon/implant/exile
|
||||
name = "exile implant"
|
||||
desc = "Prevents you from returning from away missions"
|
||||
origin_tech = "materials=2;biotech=3;magnets=2;bluespace=3"
|
||||
activated = 0
|
||||
|
||||
/obj/item/weapon/implant/exile/get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Nanotrasen Employee Exile Implant<BR>
|
||||
<b>Implant Details:</b> The onboard gateway system has been modified to reject entry by individuals containing this implant<BR>"}
|
||||
return dat
|
||||
|
||||
|
||||
/obj/item/weapon/implanter/exile
|
||||
name = "implanter (exile)"
|
||||
|
||||
/obj/item/weapon/implanter/exile/New()
|
||||
imp = new /obj/item/weapon/implant/exile( src )
|
||||
..()
|
||||
|
||||
/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)
|
||||
..()
|
||||
@@ -45,15 +45,16 @@
|
||||
return
|
||||
timed_explosion()
|
||||
|
||||
/obj/item/weapon/implant/explosive/implant(mob/source)
|
||||
var/obj/item/weapon/implant/explosive/imp_e = locate(src.type) in source
|
||||
if(imp_e && imp_e != src)
|
||||
imp_e.heavy += heavy
|
||||
imp_e.medium += medium
|
||||
imp_e.weak += weak
|
||||
imp_e.delay += delay
|
||||
qdel(src)
|
||||
return 1
|
||||
/obj/item/weapon/implant/explosive/implant(mob/living/carbon/source)
|
||||
for(var/X in source.implants)
|
||||
if(istype(X, type))
|
||||
var/obj/item/weapon/implant/explosive/imp_e = X
|
||||
imp_e.heavy += heavy
|
||||
imp_e.medium += medium
|
||||
imp_e.weak += weak
|
||||
imp_e.delay += delay
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -85,17 +86,20 @@
|
||||
heavy = 4
|
||||
delay = 70
|
||||
|
||||
/obj/item/weapon/implant/explosive/macro/implant(mob/source)
|
||||
var/obj/item/weapon/implant/explosive/imp_e = locate(src.type) in source
|
||||
if(imp_e && imp_e != src)
|
||||
return 0
|
||||
imp_e = locate(/obj/item/weapon/implant/explosive) in source
|
||||
if(imp_e && imp_e != src)
|
||||
heavy += imp_e.heavy
|
||||
medium += imp_e.medium
|
||||
weak += imp_e.weak
|
||||
delay += imp_e.delay
|
||||
qdel(imp_e)
|
||||
/obj/item/weapon/implant/explosive/macro/implant(mob/living/carbon/source)
|
||||
for(var/X in source.implants)
|
||||
if(istype(X, type))
|
||||
return 0
|
||||
|
||||
for(var/Y in source.implants)
|
||||
if(istype(Y, /obj/item/weapon/implant/explosive))
|
||||
var/obj/item/weapon/implant/explosive/imp_e = Y
|
||||
heavy += imp_e.heavy
|
||||
medium += imp_e.medium
|
||||
weak += imp_e.weak
|
||||
delay += imp_e.delay
|
||||
qdel(imp_e)
|
||||
break
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
|
||||
/obj/item/weapon/implant/gang
|
||||
name = "gang implant"
|
||||
desc = "Makes you a gangster or such."
|
||||
activated = 0
|
||||
origin_tech = "materials=2;biotech=4;programming=4;syndicate=3"
|
||||
var/datum/gang/gang
|
||||
|
||||
/obj/item/weapon/implant/gang/New(loc,var/setgang)
|
||||
..()
|
||||
gang = setgang
|
||||
|
||||
/obj/item/weapon/implant/gang/get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Criminal brainwash implant<BR>
|
||||
<b>Life:</b> A few seconds after injection.<BR>
|
||||
<b>Important Notes:</b> Illegal<BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b><BR>
|
||||
<b>Function:</b> Contains a small pod of nanobots that change the host's brain to be loyal to a certain organization.<BR>
|
||||
<b>Special Features:</b> This device will also emit a small EMP pulse, destroying any other implants within the host's brain.<BR>
|
||||
<b>Integrity:</b> Implant's EMP function will destroy itself in the process."}
|
||||
return dat
|
||||
|
||||
/obj/item/weapon/implant/gang/implant(mob/living/carbon/target, mob/user, silent = 0)
|
||||
if(..())
|
||||
for(var/obj/item/weapon/implant/I in target.implants)
|
||||
if(I != src)
|
||||
qdel(I)
|
||||
|
||||
if(!target.mind || target.stat == DEAD)
|
||||
return 0
|
||||
|
||||
var/success
|
||||
if(target.mind in ticker.mode.get_gangsters())
|
||||
if(ticker.mode.remove_gangster(target.mind,0,1))
|
||||
success = 1 //Was not a gang boss, convert as usual
|
||||
else
|
||||
success = 1
|
||||
|
||||
if(ishuman(target))
|
||||
if(!success)
|
||||
target.visible_message("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel the influence of your enemies try to invade your mind!</span>")
|
||||
|
||||
qdel(src)
|
||||
return -1
|
||||
|
||||
/obj/item/weapon/implanter/gang
|
||||
name = "implanter (gang)"
|
||||
|
||||
/obj/item/weapon/implanter/gang/New(loc, gang)
|
||||
if(!gang)
|
||||
qdel(src)
|
||||
return
|
||||
imp = new /obj/item/weapon/implant/gang(src,gang)
|
||||
..()
|
||||
@@ -17,36 +17,38 @@
|
||||
return dat
|
||||
|
||||
|
||||
/obj/item/weapon/implant/mindshield/implant(mob/target)
|
||||
/obj/item/weapon/implant/mindshield/implant(mob/living/carbon/target, mob/user, silent = 0)
|
||||
if(..())
|
||||
if((target.mind in (ticker.mode.head_revolutionaries | ticker.mode.get_gang_bosses())))
|
||||
target.visible_message("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>")
|
||||
if(!silent)
|
||||
target.visible_message("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>")
|
||||
removed(target, 1)
|
||||
qdel(src)
|
||||
return -1
|
||||
if(target.mind in ticker.mode.get_gangsters())
|
||||
ticker.mode.remove_gangster(target.mind)
|
||||
target.visible_message("<span class='warning'>[src] was destroyed in the process!</span>", "<span class='notice'>You feel a sense of peace and security. You are now protected from brainwashing.</span>")
|
||||
if(!silent)
|
||||
target.visible_message("<span class='warning'>[src] was destroyed in the process!</span>", "<span class='notice'>You feel a sense of peace and security. You are now protected from brainwashing.</span>")
|
||||
removed(target, 1)
|
||||
qdel(src)
|
||||
return -1
|
||||
if(target.mind in ticker.mode.revolutionaries)
|
||||
ticker.mode.remove_revolutionary(target.mind)
|
||||
if((target.mind in ticker.mode.cult) || (target.mind in ticker.mode.blue_deity_prophets|ticker.mode.red_deity_prophets|ticker.mode.red_deity_followers|ticker.mode.blue_deity_followers))
|
||||
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>"
|
||||
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>"
|
||||
else
|
||||
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, var/silent = 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>"
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/obj/item/weapon/implanter/mindshield
|
||||
name = "implanter (mindshield)"
|
||||
|
||||
|
||||
@@ -61,3 +61,22 @@
|
||||
empulse(imp_in, 3, 5)
|
||||
if(!uses)
|
||||
qdel(src)
|
||||
|
||||
|
||||
//Health Tracker Implant
|
||||
|
||||
/obj/item/weapon/implant/health
|
||||
name = "health implant"
|
||||
activated = 0
|
||||
var/healthstring = ""
|
||||
|
||||
/obj/item/weapon/implant/health/proc/sensehealth()
|
||||
if (!implanted)
|
||||
return "ERROR"
|
||||
else
|
||||
if(isliving(implanted))
|
||||
var/mob/living/L = implanted
|
||||
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
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/weapon/storage/internal/implant
|
||||
name = "bluespace pocket"
|
||||
max_w_class = 3
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
max_combined_w_class = 6
|
||||
cant_hold = list(/obj/item/weapon/disk/nuclear)
|
||||
silent = 1
|
||||
@@ -21,25 +21,27 @@
|
||||
/obj/item/weapon/implant/storage/activate()
|
||||
storage.MouseDrop(imp_in)
|
||||
|
||||
/obj/item/weapon/implant/storage/removed(source)
|
||||
/obj/item/weapon/implant/storage/removed(source, silent = 0, special = 0)
|
||||
if(..())
|
||||
storage.close_all()
|
||||
for(var/obj/item/I in storage)
|
||||
storage.remove_from_storage(I, get_turf(source))
|
||||
if(!special)
|
||||
storage.close_all()
|
||||
for(var/obj/item/I in storage)
|
||||
storage.remove_from_storage(I, get_turf(source))
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/implant/storage/implant(mob/source)
|
||||
var/obj/item/weapon/implant/storage/imp_e = locate(src.type) in source
|
||||
if(imp_e)
|
||||
imp_e.storage.storage_slots += storage.storage_slots
|
||||
imp_e.storage.max_combined_w_class += storage.max_combined_w_class
|
||||
imp_e.storage.contents += storage.contents
|
||||
/obj/item/weapon/implant/storage/implant(mob/living/carbon/source, mob/user, silent = 0)
|
||||
for(var/X in source.implants)
|
||||
if(istype(X, type))
|
||||
var/obj/item/weapon/implant/storage/imp_e = X
|
||||
imp_e.storage.storage_slots += storage.storage_slots
|
||||
imp_e.storage.max_combined_w_class += storage.max_combined_w_class
|
||||
imp_e.storage.contents += storage.contents
|
||||
|
||||
storage.close_all()
|
||||
storage.show_to(source)
|
||||
storage.close_all()
|
||||
storage.show_to(source)
|
||||
|
||||
qdel(src)
|
||||
return 1
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
item_state = "implantcase"
|
||||
throw_speed = 2
|
||||
throw_range = 5
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
origin_tech = "materials=1;biotech=2"
|
||||
materials = list(MAT_GLASS=500)
|
||||
var/obj/item/weapon/implant/imp = null
|
||||
@@ -26,7 +26,7 @@
|
||||
/obj/item/weapon/implantcase/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/pen))
|
||||
var/t = stripped_input(user, "What would you like the label to be?", name, null)
|
||||
if(user.get_active_hand() != W)
|
||||
if(user.get_active_held_item() != W)
|
||||
return
|
||||
if(!in_range(src, user) && loc != user)
|
||||
return
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
|
||||
|
||||
|
||||
/obj/machinery/implantchair
|
||||
name = "mindshield implanter"
|
||||
@@ -7,141 +7,184 @@
|
||||
icon_state = "implantchair"
|
||||
density = 1
|
||||
opacity = 0
|
||||
anchored = 1
|
||||
anchored = TRUE
|
||||
|
||||
var/ready = 1
|
||||
var/malfunction = 0
|
||||
var/list/obj/item/weapon/implant/mindshield/implant_list = list()
|
||||
var/ready = TRUE
|
||||
var/replenishing = FALSE
|
||||
|
||||
var/ready_implants = 5
|
||||
var/max_implants = 5
|
||||
var/injection_cooldown = 600
|
||||
var/replenish_cooldown = 6000
|
||||
var/replenishing = 0
|
||||
var/injecting = 0
|
||||
|
||||
/obj/machinery/implantchair/proc
|
||||
go_out()
|
||||
put_mob(mob/living/carbon/M)
|
||||
implant(var/mob/M)
|
||||
add_implants()
|
||||
|
||||
var/implant_type = /obj/item/weapon/implant/mindshield
|
||||
var/auto_inject = FALSE
|
||||
var/auto_replenish = TRUE
|
||||
var/special = FALSE
|
||||
var/special_name = "special function"
|
||||
|
||||
/obj/machinery/implantchair/New()
|
||||
..()
|
||||
add_implants()
|
||||
open_machine()
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/implantchair/attack_hand(mob/user)
|
||||
user.set_machine(src)
|
||||
var/health_text = ""
|
||||
if(src.occupant)
|
||||
if(src.occupant.health <= -100)
|
||||
health_text = "<FONT color=red>Dead</FONT>"
|
||||
else if(src.occupant.health < 0)
|
||||
health_text = "<FONT color=red>[round(src.occupant.health,0.1)]</FONT>"
|
||||
else
|
||||
health_text = "[round(src.occupant.health,0.1)]"
|
||||
/obj/machinery/implantchair/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = notcontained_state)
|
||||
|
||||
var/dat ="<B>Implanter Status</B><BR>"
|
||||
|
||||
dat +="<B>Current occupant:</B> [src.occupant ? "<BR>Name: [src.occupant]<BR>Health: [health_text]<BR>" : "<FONT color=red>None</FONT>"]<BR>"
|
||||
dat += "<B>Implants:</B> [src.implant_list.len ? "[implant_list.len]" : "<A href='?src=\ref[src];replenish=1'>Replenish</A>"]<BR>"
|
||||
if(src.occupant)
|
||||
dat += "[src.ready ? "<A href='?src=\ref[src];implant=1'>Implant</A>" : "Recharging"]<BR>"
|
||||
user.set_machine(src)
|
||||
user << browse(dat, "window=implant")
|
||||
onclose(user, "implant")
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "implantchair", name, 375, 280, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
|
||||
/obj/machinery/implantchair/Topic(href, href_list)
|
||||
/obj/machinery/implantchair/ui_data()
|
||||
var/list/data = list()
|
||||
data["occupied"] = occupant ? 1 : 0
|
||||
data["open"] = state_open
|
||||
|
||||
data["occupant"] = list()
|
||||
if(occupant)
|
||||
data["occupant"]["name"] = occupant.name
|
||||
data["occupant"]["stat"] = occupant.stat
|
||||
|
||||
data["special_name"] = special ? special_name : null
|
||||
data["ready_implants"] = ready_implants
|
||||
data["ready"] = ready
|
||||
data["replenishing"] = replenishing
|
||||
|
||||
return data
|
||||
|
||||
/obj/machinery/implantchair/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
if(href_list["implant"])
|
||||
if(src.occupant)
|
||||
injecting = 1
|
||||
go_out()
|
||||
ready = 0
|
||||
spawn(injection_cooldown)
|
||||
ready = 1
|
||||
switch(action)
|
||||
if("door")
|
||||
if(state_open)
|
||||
close_machine()
|
||||
else
|
||||
open_machine()
|
||||
. = TRUE
|
||||
if("implant")
|
||||
implant(occupant,usr)
|
||||
. = TRUE
|
||||
|
||||
if(href_list["replenish"])
|
||||
ready = 0
|
||||
spawn(replenish_cooldown)
|
||||
add_implants()
|
||||
ready = 1
|
||||
|
||||
updateUsrDialog()
|
||||
|
||||
|
||||
/obj/machinery/implantchair/go_out(mob/M)
|
||||
if(!occupant)
|
||||
/obj/machinery/implantchair/proc/implant(mob/living/carbon/M,mob/user)
|
||||
if (!istype(M))
|
||||
return
|
||||
if(M == occupant) // so that the guy inside can't eject himself -Agouri
|
||||
if(!ready_implants || !ready)
|
||||
return
|
||||
occupant.loc = loc
|
||||
occupant.reset_perspective(null)
|
||||
if(injecting)
|
||||
implant(src.occupant)
|
||||
injecting = 0
|
||||
occupant = null
|
||||
icon_state = "implantchair"
|
||||
return
|
||||
if(implant_action(M,user))
|
||||
ready_implants--
|
||||
if(!replenishing && auto_replenish)
|
||||
replenishing = TRUE
|
||||
addtimer(src,"replenish",replenish_cooldown)
|
||||
if(injection_cooldown > 0)
|
||||
ready = FALSE
|
||||
addtimer(src,"set_ready",injection_cooldown)
|
||||
else
|
||||
playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 25, 1)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/implantchair/proc/implant_action(mob/living/carbon/M)
|
||||
var/obj/item/weapon/implant/I = new implant_type
|
||||
if(I.implant(M))
|
||||
visible_message("<span class='warning'>[M] has been implanted by the [name].</span>")
|
||||
return 1
|
||||
|
||||
/obj/machinery/implantchair/put_mob(mob/living/carbon/M)
|
||||
if(!iscarbon(M))
|
||||
usr << "<span class='warning'>The [src.name] cannot hold this!</span>"
|
||||
/obj/machinery/implantchair/update_icon()
|
||||
icon_state = initial(icon_state)
|
||||
if(state_open)
|
||||
icon_state += "_open"
|
||||
if(occupant)
|
||||
icon_state += "_occupied"
|
||||
if(ready)
|
||||
add_overlay("ready")
|
||||
else
|
||||
cut_overlays()
|
||||
|
||||
/obj/machinery/implantchair/proc/replenish()
|
||||
if(ready_implants < max_implants)
|
||||
ready_implants++
|
||||
if(ready_implants < max_implants)
|
||||
addtimer(src,"replenish",replenish_cooldown)
|
||||
else
|
||||
replenishing = FALSE
|
||||
|
||||
/obj/machinery/implantchair/proc/set_ready()
|
||||
ready = TRUE
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/implantchair/container_resist(mob/living/user)
|
||||
if(state_open)
|
||||
return
|
||||
if(src.occupant)
|
||||
usr << "<span class='warning'>The [src.name] is already occupied!</span>"
|
||||
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>"
|
||||
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>"
|
||||
open_machine()
|
||||
|
||||
/obj/machinery/implantchair/relaymove(mob/user)
|
||||
container_resist(user)
|
||||
|
||||
/obj/machinery/implantchair/MouseDrop_T(mob/target, mob/user)
|
||||
if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser())
|
||||
return
|
||||
M.stop_pulling()
|
||||
M.loc = src
|
||||
M.reset_perspective(src)
|
||||
src.occupant = M
|
||||
src.add_fingerprint(usr)
|
||||
icon_state = "implantchair_on"
|
||||
close_machine(target)
|
||||
|
||||
/obj/machinery/implantchair/close_machine(mob/user)
|
||||
if((isnull(user) || istype(user)) && state_open)
|
||||
..(user)
|
||||
if(auto_inject && ready && ready_implants > 0)
|
||||
implant(user,null)
|
||||
|
||||
/obj/machinery/implantchair/genepurge
|
||||
name = "Genetic purifier"
|
||||
desc = "Used to purge human genome of foreign influences"
|
||||
special = TRUE
|
||||
special_name = "Purge genome"
|
||||
injection_cooldown = 0
|
||||
replenish_cooldown = 300
|
||||
|
||||
/obj/machinery/implantchair/genepurge/implant_action(mob/living/carbon/human/H,mob/user)
|
||||
if(!istype(H))
|
||||
return 0
|
||||
H.set_species(/datum/species/human, 1)//lizards go home
|
||||
purrbation_remove(H)//remove cats
|
||||
H.dna.remove_all_mutations()//hulks out
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/implantchair/implant(mob/M)
|
||||
if (!istype(M, /mob/living/carbon))
|
||||
return
|
||||
if(!implant_list.len)
|
||||
return
|
||||
for(var/obj/item/weapon/implant/mindshield/imp in implant_list)
|
||||
if(!imp)
|
||||
continue
|
||||
if(istype(imp, /obj/item/weapon/implant/mindshield))
|
||||
M.visible_message("<span class='warning'>[M] has been implanted by the [src.name].</span>")
|
||||
/obj/machinery/implantchair/brainwash
|
||||
name = "Neural Imprinter"
|
||||
desc = "Used to <s>indoctrinate</s> rehabilitate hardened recidivists."
|
||||
special_name = "Imprint"
|
||||
injection_cooldown = 3000
|
||||
auto_inject = FALSE
|
||||
auto_replenish = FALSE
|
||||
special = TRUE
|
||||
var/objective = "Obey the law. Praise Nanotrasen."
|
||||
var/custom = FALSE
|
||||
|
||||
if(imp.implant(M))
|
||||
implant_list -= imp
|
||||
break
|
||||
return
|
||||
/obj/machinery/implantchair/brainwash/implant_action(mob/living/carbon/C,mob/user)
|
||||
if(!istype(C) || !C.mind)
|
||||
return 0
|
||||
if(custom)
|
||||
if(!user || !user.Adjacent(src))
|
||||
return 0
|
||||
objective = stripped_input(usr,"What order do you want to imprint on [C]?","Enter the order","",120)
|
||||
message_admins("[key_name_admin(user)] set brainwash machine objective to '[objective]'.")
|
||||
log_game("[key_name_admin(user)] set brainwash machine objective to '[objective]'.")
|
||||
var/datum/objective/custom_objective = new/datum/objective(objective)
|
||||
custom_objective.owner = C.mind
|
||||
C.mind.objectives += custom_objective
|
||||
C.mind.announce_objectives()
|
||||
message_admins("[key_name_admin(user)] brainwashed [key_name_admin(C)] with objective '[objective]'.")
|
||||
log_game("[key_name_admin(user)] brainwashed [key_name_admin(C)] with objective '[objective]'.")
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/implantchair/add_implants()
|
||||
for(var/i=0, i<src.max_implants, i++)
|
||||
var/obj/item/weapon/implant/mindshield/I = new /obj/item/weapon/implant/mindshield(src)
|
||||
implant_list += I
|
||||
return
|
||||
|
||||
/obj/machinery/implantchair/verb/get_out()
|
||||
set name = "Eject occupant"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
if(usr.stat != 0)
|
||||
return
|
||||
src.go_out(usr)
|
||||
add_fingerprint(usr)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/implantchair/verb/move_inside()
|
||||
set name = "Move Inside"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
if(usr.stat != 0 || stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
put_mob(usr)
|
||||
return
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
item_state = "syringe_0"
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
origin_tech = "materials=2;biotech=3"
|
||||
materials = list(MAT_METAL=600, MAT_GLASS=200)
|
||||
var/obj/item/weapon/implant/imp = null
|
||||
@@ -42,7 +42,7 @@
|
||||
/obj/item/weapon/implanter/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/pen))
|
||||
var/t = stripped_input(user, "What would you like the label to be?", name, null)
|
||||
if(user.get_active_hand() != W)
|
||||
if(user.get_active_held_item() != W)
|
||||
return
|
||||
if(!in_range(src, user) && loc != user)
|
||||
return
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
item_state = "electronic"
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/obj/item/weapon/implantcase/case = null
|
||||
var/broadcasting = null
|
||||
var/listening = 1
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/implantpad/attack_hand(mob/user)
|
||||
if(case && (user.l_hand == src || user.r_hand == src))
|
||||
if(case && user.is_holding(src))
|
||||
user.put_in_active_hand(case)
|
||||
|
||||
case.add_fingerprint(user)
|
||||
@@ -62,7 +62,7 @@
|
||||
..()
|
||||
if(usr.stat)
|
||||
return
|
||||
if((usr.contents.Find(src)) || ((in_range(src, usr) && istype(loc, /turf))))
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)))
|
||||
usr.set_machine(src)
|
||||
|
||||
if(istype(loc, /mob))
|
||||
|
||||
@@ -10,12 +10,13 @@
|
||||
hidden_uplink.telecrystals = 10
|
||||
..()
|
||||
|
||||
/obj/item/weapon/implant/uplink/implant(mob/user)
|
||||
var/obj/item/weapon/implant/imp_e = locate(src.type) in user
|
||||
if(imp_e && imp_e != src)
|
||||
imp_e.hidden_uplink.telecrystals += hidden_uplink.telecrystals
|
||||
qdel(src)
|
||||
return 1
|
||||
/obj/item/weapon/implant/uplink/implant(mob/living/carbon/source, mob/user, silent = 0)
|
||||
for(var/X in source.implants)
|
||||
if(istype(X, type))
|
||||
var/obj/item/weapon/implant/imp_e = X
|
||||
imp_e.hidden_uplink.telecrystals += hidden_uplink.telecrystals
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
if(..())
|
||||
hidden_uplink.owner = "[user.key]"
|
||||
@@ -28,7 +29,18 @@
|
||||
|
||||
/obj/item/weapon/implanter/uplink
|
||||
name = "implanter (uplink)"
|
||||
persistence_replacement = /obj/item/weapon/implanter/weakuplink
|
||||
|
||||
/obj/item/weapon/implanter/uplink/New()
|
||||
imp = new /obj/item/weapon/implant/uplink(src)
|
||||
..()
|
||||
/obj/item/weapon/implanter/weakuplink
|
||||
name = "implanter (uplink)"
|
||||
|
||||
/obj/item/weapon/implanter/weakuplink/New()
|
||||
imp = new /obj/item/weapon/implant/uplink/weak(src)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/implant/uplink/weak/New()
|
||||
..()
|
||||
hidden_uplink.telecrystals = 5
|
||||
@@ -17,7 +17,7 @@
|
||||
desc = "Pointy."
|
||||
icon_state = "fork"
|
||||
force = 5
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
@@ -25,6 +25,7 @@
|
||||
flags = CONDUCT
|
||||
attack_verb = list("attacked", "stabbed", "poked")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30)
|
||||
var/datum/reagent/forkload //used to eat omelette
|
||||
|
||||
/obj/item/weapon/kitchen/fork/attack(mob/living/carbon/M, mob/living/carbon/user)
|
||||
@@ -55,7 +56,7 @@
|
||||
desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come."
|
||||
flags = CONDUCT
|
||||
force = 10
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throwforce = 10
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
throw_speed = 3
|
||||
@@ -63,6 +64,7 @@
|
||||
materials = list(MAT_METAL=12000)
|
||||
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
sharpness = IS_SHARP_ACCURATE
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50)
|
||||
|
||||
/obj/item/weapon/kitchen/knife/attack(mob/living/carbon/M, mob/living/carbon/user)
|
||||
if(user.zone_selected == "eyes")
|
||||
@@ -73,9 +75,9 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/kitchen/knife/suicide_act(mob/user)
|
||||
user.visible_message(pick("<span class='suicide'>[user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>"))
|
||||
user.visible_message(pick("<span class='suicide'>[user] is slitting [user.p_their()] wrists with the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is slitting [user.p_their()] throat with the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is slitting [user.p_their()] stomach open with the [src.name]! It looks like [user.p_theyre()] trying to commit seppuku.</span>"))
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/kitchen/knife/ritual
|
||||
@@ -83,7 +85,7 @@
|
||||
desc = "The unearthly energies that once powered this blade are now dormant."
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "render"
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/weapon/kitchen/knife/butcher
|
||||
name = "butcher's cleaver"
|
||||
@@ -94,7 +96,7 @@
|
||||
throwforce = 10
|
||||
materials = list(MAT_METAL=18000)
|
||||
attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/weapon/kitchen/knife/combat
|
||||
name = "combat knife"
|
||||
@@ -121,6 +123,7 @@
|
||||
desc = "A sharpened bone. The bare mimimum in survival."
|
||||
force = 15
|
||||
throwforce = 15
|
||||
materials = list()
|
||||
|
||||
/obj/item/weapon/kitchen/knife/combat/cyborg
|
||||
name = "cyborg knife"
|
||||
@@ -139,6 +142,7 @@
|
||||
materials = list()
|
||||
origin_tech = "biotech=3;combat=2"
|
||||
attack_verb = list("shanked", "shivved")
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
|
||||
|
||||
/obj/item/weapon/kitchen/rollingpin
|
||||
name = "rolling pin"
|
||||
@@ -148,7 +152,7 @@
|
||||
throwforce = 5
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
|
||||
|
||||
/* Trays moved to /obj/item/weapon/storage/bag */
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
<li>Open the control panel</li>
|
||||
<li>Set the speed to 2</li>
|
||||
<li>Start firing at the singularity generator</li>
|
||||
<li><font color='red'><b>When the singularity reaches a large enough size so it starts moving on it's own set the speed down to 0, but don't shut it off</b></font></li>
|
||||
<li><font color='red'><b>When the singularity reaches a large enough size so it starts moving on its own set the speed down to 0, but don't shut it off</b></font></li>
|
||||
<li>Remember to wear a radiation suit when working with this machine... we did tell you that at the start, right?</li>
|
||||
</ol>
|
||||
|
||||
@@ -338,7 +338,7 @@
|
||||
<li>RUNTIME ERROR - The machine's onboard C4T-P processor has encountered a critical error, causing it to produce a cat from.. somewhere.
|
||||
Produces the message: The E.X.P.E.R.I-MENTOR encounters a run-time error!</li>
|
||||
|
||||
<li>B100DG0D.EXE - The machine has encountered an unknown subroutine, which has been injected into it's runtime. It upgrades the held item!
|
||||
<li>B100DG0D.EXE - The machine has encountered an unknown subroutine, which has been injected into its runtime. It upgrades the held item!
|
||||
Produces the message: The E.X.P.E.R.I-MENTOR improves the banana, drawing the life essence of those nearby!</li>
|
||||
|
||||
<li>POWERSINK - The machine's PSU has tripped the charging mechanism! It consumes massive amounts of power!
|
||||
@@ -350,8 +350,8 @@
|
||||
|
||||
<h2>POKE:</h2>
|
||||
<ol>
|
||||
<li>WILD ARMS - The machine's gryoscopic processors malfunction, causing it to lash out at nearby people with it's arms.
|
||||
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions and destroys the banana, lashing it's arms out at nearby people!</li>
|
||||
<li>WILD ARMS - The machine's gryoscopic processors malfunction, causing it to lash out at nearby people with its arms.
|
||||
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions and destroys the banana, lashing its arms out at nearby people!</li>
|
||||
|
||||
<li>MISTYPE - The machine's interface has been garbled, and it switches to OBLITERATE.
|
||||
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions!</li>
|
||||
@@ -390,7 +390,7 @@
|
||||
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, melting the banana and leaking hot air!</li>
|
||||
|
||||
<li>EMERGENCY VENT - The machine's temperature gauge has malfunctioned, resulting in it attempting to cool the area around it, but instead, dumping a cloud of steam.
|
||||
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, activating it's emergency coolant systems!</li>
|
||||
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, activating its emergency coolant systems!</li>
|
||||
</ol>
|
||||
<h2>COLD:</h2>
|
||||
<ol>
|
||||
|
||||
@@ -4,13 +4,16 @@
|
||||
var/throwforce_on = 20
|
||||
var/icon_state_on = "axe1"
|
||||
var/list/attack_verb_on = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
w_class = 2
|
||||
var/w_class_on = 4
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/w_class_on = WEIGHT_CLASS_BULKY
|
||||
heat = 3500
|
||||
obj_integrity = 200
|
||||
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
|
||||
|
||||
/obj/item/weapon/melee/energy/suicide_act(mob/user)
|
||||
user.visible_message(pick("<span class='suicide'>[user] is slitting \his stomach open with [src]! It looks like \he's trying to commit seppuku.</span>", \
|
||||
"<span class='suicide'>[user] is falling on [src]! It looks like \he's trying to commit suicide.</span>"))
|
||||
user.visible_message("<span class='suicide'>[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku!</span>")
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/obj/item/weapon/melee/energy/add_blood(list/blood_dna)
|
||||
@@ -30,8 +33,8 @@
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
w_class = 3
|
||||
w_class_on = 5
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
w_class_on = WEIGHT_CLASS_HUGE
|
||||
flags = CONDUCT
|
||||
armour_penetration = 100
|
||||
origin_tech = "combat=4;magnets=3"
|
||||
@@ -39,7 +42,7 @@
|
||||
attack_verb_on = list()
|
||||
|
||||
/obj/item/weapon/melee/energy/axe/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] swings the [src.name] towards \his head! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] swings [src] towards [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/obj/item/weapon/melee/energy/sword
|
||||
@@ -63,6 +66,16 @@
|
||||
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)
|
||||
open_flame()
|
||||
else
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
|
||||
if(active)
|
||||
return ..()
|
||||
@@ -71,7 +84,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>"
|
||||
user.take_organ_damage(5,5)
|
||||
user.take_bodypart_damage(5,5)
|
||||
active = !active
|
||||
if (active)
|
||||
force = force_on
|
||||
@@ -87,6 +100,7 @@
|
||||
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>"
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
force = initial(force)
|
||||
throwforce = initial(throwforce)
|
||||
@@ -98,11 +112,26 @@
|
||||
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>"
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/weapon/melee/energy/is_hot()
|
||||
return active * heat
|
||||
|
||||
/obj/item/weapon/melee/energy/ignition_effect(atom/A, mob/user)
|
||||
if(!active)
|
||||
return ""
|
||||
|
||||
var/in_mouth = ""
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
if(C.wear_mask == src)
|
||||
in_mouth = ", barely missing their nose"
|
||||
. = "<span class='warning'>[user] swings their \
|
||||
[src][in_mouth]. They light [A] in the process.</span>"
|
||||
playsound(loc, hitsound, get_clamped_volume(), 1, -1)
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/cyborg
|
||||
var/hitcost = 50
|
||||
|
||||
@@ -128,7 +157,7 @@
|
||||
icon_state_on = "esaw_1"
|
||||
hitcost = 75 //Costs more than a standard cyborg esword
|
||||
item_color = null
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
sharpness = IS_SHARP
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/cyborg/saw/New()
|
||||
@@ -176,33 +205,12 @@
|
||||
|
||||
if(active)
|
||||
icon_state = "swordrainbow"
|
||||
// Updating overlays, copied from welder code.
|
||||
// I tried calling attack_self twice, which looked cool, except it somehow didn't update the overlays!!
|
||||
if(user.r_hand == src)
|
||||
user.update_inv_r_hand(0)
|
||||
else if(user.l_hand == src)
|
||||
user.update_inv_l_hand(0)
|
||||
user.update_inv_hands()
|
||||
else
|
||||
user << "<span class='warning'>It's already fabulous!</span>"
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/twohanded/attackby(obj/item/weapon/W, mob/living/user, params)
|
||||
if(istype(W, /obj/item/weapon/melee/energy/sword/saber))
|
||||
switch(alert(user, "You feel like the sword might be a bit more dangerous to yourself than to others if you do this.", "Combine?", "Proceed", "Abort"))
|
||||
if("Abort" || !in_range(src, user) || !src || !W || user.incapacitated())
|
||||
return
|
||||
user << "<span class='notice'>You attach the energy sword to the double \
|
||||
bladed energy sword, making a single triple-bladed weapon! \
|
||||
You're a genius!</span>"
|
||||
var/obj/item/weapon/trisword/newSaber = new(user.loc)
|
||||
user.unEquip(W)
|
||||
user.unEquip(src)
|
||||
qdel(W)
|
||||
qdel(src)
|
||||
user.put_in_hands(newSaber)
|
||||
return
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/pirate
|
||||
name = "energy cutlass"
|
||||
desc = "Arrrr matey."
|
||||
@@ -222,8 +230,9 @@
|
||||
throwforce = 1//Throwing or dropping the item deletes it.
|
||||
throw_speed = 3
|
||||
throw_range = 1
|
||||
w_class = 4//So you can't hide it in your pocket or some such.
|
||||
w_class = WEIGHT_CLASS_BULKY//So you can't hide it in your pocket or some such.
|
||||
var/datum/effect_system/spark_spread/spark_system
|
||||
sharpness = IS_SHARP
|
||||
|
||||
//Most of the other special functions are handled in their own files. aka special snowflake code so kewl
|
||||
/obj/item/weapon/melee/energy/blade/New()
|
||||
@@ -233,71 +242,12 @@
|
||||
|
||||
/obj/item/weapon/melee/energy/blade/dropped()
|
||||
..()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/melee/energy/blade/attack_self(mob/user)
|
||||
return
|
||||
|
||||
/* Triple Esword! [joke weapon] */
|
||||
/obj/item/weapon/trisword
|
||||
name = "triple-bladed energy sword"
|
||||
desc = "Wow, an energy sword with THREE blades! This must be a REALLY good weapon."
|
||||
force = 3
|
||||
throwforce = 5
|
||||
w_class = 2
|
||||
icon_state = "trisaber_off"
|
||||
item_state = "sword0"
|
||||
var/progress = 0
|
||||
var/on = 0
|
||||
|
||||
/obj/item/weapon/trisword/attack_self(mob/living/carbon/user)
|
||||
if(on || progress > 5)
|
||||
return
|
||||
if(progress == 0)
|
||||
user << "<span class='notice'>You extend the... Hey, wait a second, how do you turn this thing on?</span>"
|
||||
progress = 1
|
||||
return
|
||||
if(progress == 1)
|
||||
user << "<span class='notice'>No, seriously, what the fuck? Does this thing even have a button on it?</span>"
|
||||
progress = 2
|
||||
return
|
||||
if(progress == 2)
|
||||
user << "<span class='danger'>Okay, you're getting sick of this. You mash random panels on [src], trying to find a way to activate it.</span>"
|
||||
progress = 3
|
||||
return
|
||||
if(progress == 3)
|
||||
user << "<span class='danger'>God dammit, how the fuck do you turn this shit on?</span>"
|
||||
progress = 4
|
||||
return
|
||||
if(progress == 4)
|
||||
user << "<span class='notice'>You find what feels like a button on [src]! Now you just need to press it.</span>"
|
||||
progress = 5
|
||||
return
|
||||
if(progress == 5)
|
||||
user << "<span class='userdanger'>The third blade on [src] extends straight into your gut! God fucking dammit.</span>"
|
||||
playsound(user, 'sound/weapons/saberon.ogg', 35, 1)
|
||||
playsound(user, 'sound/weapons/blade1.ogg', 35, 1)
|
||||
on = 1
|
||||
icon_state = "trisaber"
|
||||
if(!remove_item_from_storage(user))
|
||||
user.unEquip(src)
|
||||
user.adjustBruteLoss(110)
|
||||
|
||||
/obj/item/weapon/trisword/dropped()
|
||||
..()
|
||||
if(!on)
|
||||
progress = 0
|
||||
|
||||
/obj/item/weapon/trisword/attack_hand(mob/living/carbon/user)
|
||||
if(on)
|
||||
user << "<span class='userdanger'>You try to pick up [src], but accidentally grab one of the blades, and quickly drop the whole thing out of pain.</span>"
|
||||
user.adjustBruteLoss(15)
|
||||
playsound(user, 'sound/weapons/blade1.ogg', 35, 1)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/trisword/attack_tk(mob/living/carbon/user)
|
||||
user << "<span class='danger'>You try to comprehend \the [src].</span>"
|
||||
user << "<span class='userdanger'>Your head hurts.</span>"
|
||||
user.adjustBrainLoss(50)
|
||||
user.confused += 15
|
||||
/obj/item/weapon/melee/energy/blade/hardlight
|
||||
name = "hardlight blade"
|
||||
desc = "An extremely sharp blade made out of hard light. Packs quite a punch."
|
||||
icon_state = "lightblade"
|
||||
item_state = "lightblade"
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
/obj/item/weapon/melee
|
||||
needs_permit = 1
|
||||
|
||||
/obj/item/weapon/melee/proc/check_martial_counter(mob/living/carbon/human/target, mob/living/carbon/human/user)
|
||||
if(target.check_block())
|
||||
target.visible_message("<span class='danger'>[target.name] blocks [src] and twists [user]'s arm behind their back!</span>",
|
||||
"<span class='userdanger'>You block the attack!</span>")
|
||||
user.Stun(2)
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/item/weapon/melee/chainofcommand
|
||||
name = "chain of command"
|
||||
desc = "A tool used by great men to placate the frothing masses."
|
||||
@@ -10,17 +18,50 @@
|
||||
slot_flags = SLOT_BELT
|
||||
force = 10
|
||||
throwforce = 7
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
origin_tech = "combat=5"
|
||||
attack_verb = list("flogged", "whipped", "lashed", "disciplined")
|
||||
hitsound = 'sound/weapons/slash.ogg' //pls replace
|
||||
hitsound = 'sound/weapons/chainhit.ogg'
|
||||
materials = list(MAT_METAL = 1000)
|
||||
|
||||
/obj/item/weapon/melee/chainofcommand/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
return (OXYLOSS)
|
||||
user.visible_message("<span class='suicide'>[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (OXYLOSS)
|
||||
|
||||
/obj/item/weapon/melee/synthetic_arm_blade
|
||||
name = "synthetic arm blade"
|
||||
desc = "A grotesque blade that on closer inspection seems made of synthentic flesh, it still feels like it would hurt very badly as a weapon."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "arm_blade"
|
||||
item_state = "arm_blade"
|
||||
origin_tech = "combat=5,biotech=5"
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
force = 15
|
||||
throwforce = 10
|
||||
sharpness = IS_SHARP
|
||||
|
||||
/obj/item/weapon/melee/sabre
|
||||
name = "officer's sabre"
|
||||
desc = "An elegant weapon, its monomolecular edge is capable of cutting through flesh and bone with ease."
|
||||
icon_state = "sabre"
|
||||
item_state = "sabre"
|
||||
flags = CONDUCT
|
||||
unique_rename = 1
|
||||
force = 15
|
||||
throwforce = 10
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
block_chance = 50
|
||||
armour_penetration = 75
|
||||
sharpness = IS_SHARP
|
||||
origin_tech = "combat=5"
|
||||
attack_verb = list("slashed", "cut")
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
materials = list(MAT_METAL = 1000)
|
||||
|
||||
/obj/item/weapon/melee/sabre/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type)
|
||||
if(attack_type == PROJECTILE_ATTACK)
|
||||
final_block_chance = 0 //Don't bring a sword to a gunfight
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/melee/classic_baton
|
||||
name = "police baton"
|
||||
@@ -30,7 +71,7 @@
|
||||
item_state = "classic_baton"
|
||||
slot_flags = SLOT_BELT
|
||||
force = 12 //9 hit crit
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
var/cooldown = 0
|
||||
var/on = 1
|
||||
|
||||
@@ -46,17 +87,17 @@
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.apply_damage(2*force, BRUTE, "head")
|
||||
else
|
||||
user.take_organ_damage(2*force)
|
||||
user.take_bodypart_damage(2*force)
|
||||
return
|
||||
if(isrobot(target))
|
||||
if(iscyborg(target))
|
||||
..()
|
||||
return
|
||||
if(!isliving(target))
|
||||
return
|
||||
if (user.a_intent == "harm")
|
||||
if (user.a_intent == INTENT_HARM)
|
||||
if(!..())
|
||||
return
|
||||
if(!isrobot(target))
|
||||
if(!iscyborg(target))
|
||||
return
|
||||
else
|
||||
if(cooldown <= world.time)
|
||||
@@ -64,12 +105,14 @@
|
||||
var/mob/living/carbon/human/H = target
|
||||
if (H.check_shields(0, "[user]'s [name]", src, MELEE_ATTACK))
|
||||
return
|
||||
if(check_martial_counter(H, user))
|
||||
return
|
||||
playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1)
|
||||
target.Weaken(3)
|
||||
add_logs(user, target, "stunned", src)
|
||||
src.add_fingerprint(user)
|
||||
target.visible_message("<span class ='danger'>[user] has knocked down [target] with \the [src]!</span>", \
|
||||
"<span class ='userdanger'>[user] has knocked down [target] with \the [src]!</span>")
|
||||
target.visible_message("<span class ='danger'>[user] has knocked down [target] with [src]!</span>", \
|
||||
"<span class ='userdanger'>[user] has knocked down [target] with [src]!</span>")
|
||||
if(!iscarbon(user))
|
||||
target.LAssailant = null
|
||||
else
|
||||
@@ -83,7 +126,7 @@
|
||||
icon_state = "telebaton_0"
|
||||
item_state = null
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
needs_permit = 0
|
||||
force = 0
|
||||
on = 0
|
||||
@@ -92,7 +135,7 @@
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/obj/item/organ/brain/B = H.getorgan(/obj/item/organ/brain)
|
||||
|
||||
user.visible_message("<span class='suicide'>[user] stuffs the [src] up their nose and presses the 'extend' button! It looks like they're trying to clear their mind.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] stuffs [src] up [user.p_their()] nose and presses the 'extend' button! It looks like [user.p_theyre()] trying to clear their mind.</span>")
|
||||
if(!on)
|
||||
src.attack_self(user)
|
||||
else
|
||||
@@ -103,7 +146,7 @@
|
||||
if (B && !qdeleted(B))
|
||||
H.internal_organs -= B
|
||||
qdel(B)
|
||||
gibs(H.loc, H.viruses, H.dna)
|
||||
new /obj/effect/gibspawner/generic(H.loc, H.viruses, H.dna)
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/melee/classic_baton/telescopic/attack_self(mob/user)
|
||||
@@ -112,7 +155,7 @@
|
||||
user << "<span class ='warning'>You extend the baton.</span>"
|
||||
icon_state = "telebaton_1"
|
||||
item_state = "nullrod"
|
||||
w_class = 4 //doesnt fit in backpack when its on for balance
|
||||
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
|
||||
@@ -120,7 +163,7 @@
|
||||
icon_state = "telebaton_0"
|
||||
item_state = null //no sprite for concealment even when in hand
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
force = 0 //not so robust now
|
||||
attack_verb = list("hit", "poked")
|
||||
|
||||
@@ -134,7 +177,7 @@
|
||||
icon_state = "supermatter_sword"
|
||||
item_state = "supermatter_sword"
|
||||
slot_flags = null
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
force = 0.001
|
||||
armour_penetration = 1000
|
||||
var/obj/machinery/power/supermatter_shard/shard
|
||||
@@ -145,7 +188,7 @@
|
||||
..()
|
||||
shard = new /obj/machinery/power/supermatter_shard(src)
|
||||
START_PROCESSING(SSobj, src)
|
||||
visible_message("<span class='warning'>\The [src] appears, balanced ever so perfectly on its hilt. This isn't ominous at all.</span>")
|
||||
visible_message("<span class='warning'>[src] appears, balanced ever so perfectly on its hilt. This isn't ominous at all.</span>")
|
||||
|
||||
/obj/item/weapon/melee/supermatter_sword/process()
|
||||
if(balanced || throwing || ismob(src.loc) || isnull(src.loc))
|
||||
@@ -156,7 +199,7 @@
|
||||
consume_everything(target)
|
||||
else
|
||||
var/turf/T = get_turf(src)
|
||||
if(!istype(T,/turf/open/space))
|
||||
if(!isspaceturf(T))
|
||||
consume_turf(T)
|
||||
|
||||
/obj/item/weapon/melee/supermatter_sword/afterattack(target, mob/user, proximity_flag)
|
||||
@@ -179,22 +222,22 @@
|
||||
balanced = 0
|
||||
|
||||
/obj/item/weapon/melee/supermatter_sword/ex_act(severity, target)
|
||||
visible_message("<span class='danger'>\The blast wave smacks into \the [src] and rapidly flashes to ash.</span>",\
|
||||
visible_message("<span class='danger'>The blast wave smacks into [src] and rapidly flashes to ash.</span>",\
|
||||
"<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>")
|
||||
consume_everything()
|
||||
|
||||
/obj/item/weapon/melee/supermatter_sword/acid_act()
|
||||
visible_message("<span class='danger'>\The acid smacks into \the [src] and rapidly flashes to ash.</span>",\
|
||||
visible_message("<span class='danger'>The acid smacks into [src] and rapidly flashes to ash.</span>",\
|
||||
"<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>")
|
||||
consume_everything()
|
||||
|
||||
/obj/item/weapon/melee/supermatter_sword/bullet_act(obj/item/projectile/P)
|
||||
visible_message("<span class='danger'>[P] smacks into \the [src] and rapidly flashes to ash.</span>",\
|
||||
visible_message("<span class='danger'>[P] smacks into [src] and rapidly flashes to ash.</span>",\
|
||||
"<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>")
|
||||
consume_everything()
|
||||
|
||||
/obj/item/weapon/melee/supermatter_sword/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] touches the [src]'s blade. It looks like they're tired of waiting for the radiation to kill them!</span>")
|
||||
user.visible_message("<span class='suicide'>[user] touches [src]'s blade. It looks like [user.p_theyre()] tired of waiting for the radiation to kill [user.p_them()]!</span>")
|
||||
user.drop_item()
|
||||
shard.Bumped(user)
|
||||
|
||||
@@ -210,11 +253,29 @@
|
||||
if(istype(T, T.baseturf))
|
||||
return //Can't void the void, baby!
|
||||
playsound(T, 'sound/effects/supermatter.ogg', 50, 1)
|
||||
T.visible_message("<span class='danger'>\The [T] smacks into \the [src] and rapidly flashes to ash.</span>",\
|
||||
T.visible_message("<span class='danger'>[T] smacks into [src] and rapidly flashes to ash.</span>",\
|
||||
"<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>")
|
||||
shard.Consume()
|
||||
T.ChangeTurf(T.baseturf)
|
||||
T.CalculateAdjacentTurfs()
|
||||
|
||||
/obj/item/weapon/melee/supermatter_sword/add_blood(list/blood_dna)
|
||||
return 0
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/melee/curator_whip
|
||||
name = "curator's whip"
|
||||
desc = "Somewhat eccentric and outdated, it still stings like hell to be hit by."
|
||||
icon_state = "whip"
|
||||
item_state = "chain"
|
||||
slot_flags = SLOT_BELT
|
||||
force = 15
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
attack_verb = list("flogged", "whipped", "lashed", "disciplined")
|
||||
hitsound = 'sound/weapons/chainhit.ogg'
|
||||
|
||||
/obj/item/weapon/melee/curator_whip/afterattack(target, mob/user, proximity_flag)
|
||||
if(ishuman(target) && proximity_flag)
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.drop_all_held_items()
|
||||
H.visible_message("<span class='danger'>[user] disarms [H]!</span>", "<span class='userdanger'>[user] disarmed you!</span>")
|
||||
..()
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
throwforce = 3
|
||||
throw_speed = 2
|
||||
throw_range = 5
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
attack_verb = list("warned", "cautioned", "smashed")
|
||||
|
||||
/obj/item/weapon/skub
|
||||
@@ -15,5 +15,5 @@
|
||||
name = "skub"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "skub"
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
attack_verb = list("skubbed")
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
#define is_cleanable(A) (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/rune))
|
||||
|
||||
/obj/item/weapon/mop
|
||||
desc = "The world of janitalia wouldn't be complete without a mop."
|
||||
name = "mop"
|
||||
@@ -9,9 +7,9 @@
|
||||
throwforce = 5
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
attack_verb = list("mopped", "bashed", "bludgeoned", "whacked")
|
||||
burn_state = FLAMMABLE
|
||||
resistance_flags = FLAMMABLE
|
||||
var/mopping = 0
|
||||
var/mopcount = 0
|
||||
var/mopcap = 5
|
||||
@@ -22,13 +20,13 @@
|
||||
create_reagents(mopcap)
|
||||
|
||||
|
||||
obj/item/weapon/mop/proc/clean(turf/A)
|
||||
/obj/item/weapon/mop/proc/clean(turf/A)
|
||||
if(reagents.has_reagent("water", 1) || reagents.has_reagent("holywater", 1) || reagents.has_reagent("vodka", 1) || reagents.has_reagent("cleaner", 1))
|
||||
A.clean_blood()
|
||||
for(var/obj/effect/O in A)
|
||||
if(is_cleanable(O))
|
||||
qdel(O)
|
||||
if(istype(A, /turf/closed))
|
||||
if(isclosedturf(A))
|
||||
var/turf/closed/C = A
|
||||
C.thermite = 0
|
||||
reagents.reaction(A, TOUCH, 10) //Needed for proper floor wetting.
|
||||
@@ -42,16 +40,14 @@ obj/item/weapon/mop/proc/clean(turf/A)
|
||||
user << "<span class='warning'>Your mop is dry!</span>"
|
||||
return
|
||||
|
||||
var/turf/turf = A
|
||||
if(is_cleanable(A))
|
||||
turf = A.loc
|
||||
var/turf/T = get_turf(A)
|
||||
|
||||
if(istype(turf))
|
||||
user.visible_message("[user] begins to clean \the [turf] with [src].", "<span class='notice'>You begin to clean \the [turf] with [src]...</span>")
|
||||
if(T)
|
||||
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 = turf))
|
||||
if(do_after(user, src.mopspeed, target = T))
|
||||
user << "<span class='notice'>You finish mopping.</span>"
|
||||
clean(turf)
|
||||
clean(T)
|
||||
|
||||
|
||||
/obj/effect/attackby(obj/item/I, mob/user, params)
|
||||
@@ -72,7 +68,7 @@ obj/item/weapon/mop/proc/clean(turf/A)
|
||||
return
|
||||
|
||||
/obj/item/weapon/mop/advanced
|
||||
desc = "The most advanced tool in a custodian's arsenal. Just think of all the viscera you will clean up with this!"
|
||||
desc = "The most advanced tool in a custodian's arsenal, complete with a condenser for self-wetting! Just think of all the viscera you will clean up with this!"
|
||||
name = "advanced mop"
|
||||
mopcap = 10
|
||||
icon_state = "advmop"
|
||||
@@ -82,3 +78,33 @@ obj/item/weapon/mop/proc/clean(turf/A)
|
||||
throwforce = 8
|
||||
throw_range = 4
|
||||
mopspeed = 20
|
||||
var/refill_enabled = TRUE //Self-refill toggle for when a janitor decides to mop with something other than water.
|
||||
var/refill_rate = 1 //Rate per process() tick mop refills itself
|
||||
var/refill_reagent = "water" //Determins what reagent to use for refilling, just in case someone wanted to make a HOLY MOP OF PURGING
|
||||
|
||||
/obj/item/weapon/mop/advanced/New()
|
||||
..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/mop/advanced/attack_self(mob/user)
|
||||
refill_enabled = !refill_enabled
|
||||
if(refill_enabled)
|
||||
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>"
|
||||
playsound(user, 'sound/machines/click.ogg', 30, 1)
|
||||
|
||||
/obj/item/weapon/mop/advanced/process()
|
||||
|
||||
if(reagents.total_volume < mopcap)
|
||||
reagents.add_reagent(refill_reagent, refill_rate)
|
||||
|
||||
/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>"
|
||||
|
||||
/obj/item/weapon/mop/advanced/Destroy()
|
||||
if(refill_enabled)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
@@ -9,9 +9,10 @@
|
||||
icon_state = "paint_neutral"
|
||||
item_color = "FFFFFF"
|
||||
item_state = "paintcan"
|
||||
w_class = 3
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 5
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
resistance_flags = FLAMMABLE
|
||||
obj_integrity = 100
|
||||
max_integrity = 100
|
||||
var/paintleft = 10
|
||||
|
||||
/obj/item/weapon/paint/red
|
||||
@@ -57,7 +58,7 @@
|
||||
|
||||
/obj/item/weapon/paint/anycolor/attack_self(mob/user)
|
||||
var/t1 = input(user, "Please select a color:", "Locking Computer", null) in list( "red", "blue", "green", "yellow", "violet", "black", "white")
|
||||
if ((user.get_active_hand() != src || user.stat || user.restrained()))
|
||||
if ((user.get_active_held_item() != src || user.stat || user.restrained()))
|
||||
return
|
||||
switch(t1)
|
||||
if("red")
|
||||
@@ -83,9 +84,10 @@
|
||||
if(paintleft <= 0)
|
||||
icon_state = "paint_empty"
|
||||
return
|
||||
if(!istype(target) || istype(target, /turf/open/space))
|
||||
if(!istype(target) || isspaceturf(target))
|
||||
return
|
||||
target.color = "#" + item_color
|
||||
var/newcolor = "#" + item_color
|
||||
target.add_atom_colour(newcolor, WASHABLE_COLOUR_PRIORITY)
|
||||
|
||||
/obj/item/weapon/paint/paint_remover
|
||||
gender = PLURAL
|
||||
@@ -96,4 +98,4 @@
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(target) && target.color != initial(target.color))
|
||||
target.color = initial(target.color)
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/weapon/pneumatic_cannon
|
||||
name = "pneumatic cannon"
|
||||
desc = "A gas-powered cannon that can fire any object loaded into it."
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
force = 8 //Very heavy
|
||||
attack_verb = list("bludgeoned", "smashed", "beaten")
|
||||
icon = 'icons/obj/pneumaticCannon.dmi'
|
||||
@@ -9,6 +9,7 @@
|
||||
item_state = "bulldog"
|
||||
lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/guns_righthand.dmi'
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 60, acid = 50)
|
||||
var/maxWeightClass = 20 //The max weight of items that can fit into the cannon
|
||||
var/loadedWeightClass = 0 //The weight of items currently in the cannon
|
||||
var/obj/item/weapon/tank/internals/tank = null //The gas tank that is drawn from to fire things
|
||||
@@ -70,7 +71,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/pneumatic_cannon/afterattack(atom/target, mob/living/carbon/human/user, flag, params)
|
||||
if(flag && user.a_intent == "harm") //melee attack
|
||||
if(flag && user.a_intent == INTENT_HARM) //melee attack
|
||||
return
|
||||
if(!istype(user))
|
||||
return
|
||||
@@ -119,7 +120,7 @@
|
||||
name = "improvised pneumatic cannon"
|
||||
desc = "A gas-powered, object-firing cannon made out of common parts."
|
||||
force = 5
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
maxWeightClass = 7
|
||||
gasPerThrow = 5
|
||||
|
||||
|
||||
@@ -5,11 +5,13 @@
|
||||
item_state = "powerfist"
|
||||
flags = CONDUCT
|
||||
attack_verb = list("whacked", "fisted", "power-punched")
|
||||
force = 12
|
||||
force = 20
|
||||
throwforce = 10
|
||||
throw_range = 7
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
origin_tech = "combat=5;powerstorage=3;syndicate=3"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 40)
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/click_delay = 1.5
|
||||
var/fisto_setting = 1
|
||||
var/gasperfist = 3
|
||||
@@ -41,7 +43,7 @@
|
||||
fisto_setting = 3
|
||||
if(3)
|
||||
fisto_setting = 1
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(loc, W.usesound, 50, 1)
|
||||
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)
|
||||
@@ -79,7 +81,7 @@
|
||||
target.apply_damage(force * fisto_setting, BRUTE)
|
||||
target.visible_message("<span class='danger'>[user]'s powerfist lets out a loud hiss as they punch [target.name]!</span>", \
|
||||
"<span class='userdanger'>You cry out in pain as [user]'s punch flings you backwards!</span>")
|
||||
PoolOrNew(/obj/effect/kinetic_blast, target.loc)
|
||||
PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, target.loc)
|
||||
playsound(loc, 'sound/weapons/resonator_blast.ogg', 50, 1)
|
||||
playsound(loc, 'sound/weapons/genhit2.ogg', 50, 1)
|
||||
|
||||
@@ -91,4 +93,4 @@
|
||||
|
||||
user.changeNext_move(CLICK_CD_MELEE * click_delay)
|
||||
|
||||
return
|
||||
return
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "scroll"
|
||||
var/uses = 4
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
item_state = "paper"
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
origin_tech = "bluespace=6"
|
||||
burn_state = FLAMMABLE
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/weapon/teleportation_scroll/apprentice
|
||||
name = "lesser scroll of teleportation"
|
||||
@@ -37,10 +37,10 @@
|
||||
if (!ishuman(usr))
|
||||
return 1
|
||||
var/mob/living/carbon/human/H = usr
|
||||
if ((H == src.loc || (in_range(src, H) && istype(src.loc, /turf))))
|
||||
if(H.is_holding(src))
|
||||
H.set_machine(src)
|
||||
if (href_list["spell_teleport"])
|
||||
if (src.uses >= 1)
|
||||
if(uses)
|
||||
teleportscroll(H)
|
||||
if(H)
|
||||
attack_self(H)
|
||||
@@ -50,52 +50,28 @@
|
||||
|
||||
var/A
|
||||
|
||||
A = input(user, "Area to jump to", "BOOYEA", A) in teleportlocs|null
|
||||
if(!A)
|
||||
A = input(user, "Area to jump to", "BOOYEA", A) as null|anything in teleportlocs
|
||||
if(!src || qdeleted(src) || !user || !user.is_holding(src) || user.incapacitated() || !A || !uses)
|
||||
return
|
||||
var/area/thearea = teleportlocs[A]
|
||||
|
||||
if (!user || user.stat || user.restrained() || uses <= 0)
|
||||
return
|
||||
if(!((user == loc || (in_range(src, user) && istype(src.loc, /turf)))))
|
||||
return
|
||||
|
||||
var/datum/effect_system/smoke_spread/smoke = new
|
||||
smoke.set_up(2, user.loc)
|
||||
smoke.attach(user)
|
||||
smoke.start()
|
||||
var/list/L = list()
|
||||
for(var/turf/T in get_area_turfs(thearea.type))
|
||||
if(!T.density)
|
||||
var/clear = 1
|
||||
for(var/obj/O in T)
|
||||
if(O.density)
|
||||
clear = 0
|
||||
break
|
||||
if(clear)
|
||||
L+=T
|
||||
if(!is_blocked_turf(T))
|
||||
L += T
|
||||
|
||||
if(!L.len)
|
||||
user <<"The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry."
|
||||
user << "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry."
|
||||
return
|
||||
|
||||
if(user && user.buckled)
|
||||
user.buckled.unbuckle_mob(user, force=1)
|
||||
|
||||
var/list/tempL = L.Copy()
|
||||
var/attempt = null
|
||||
var/success = 0
|
||||
while(tempL.len)
|
||||
attempt = pick(tempL)
|
||||
user.Move(attempt)
|
||||
if(get_turf(user) == attempt)
|
||||
success = 1
|
||||
break
|
||||
else
|
||||
tempL.Remove(attempt)
|
||||
|
||||
if(!success)
|
||||
user.loc = pick(L)
|
||||
user.forceMove(pick(L))
|
||||
|
||||
smoke.start()
|
||||
src.uses -= 1
|
||||
uses--
|
||||
|
||||
@@ -36,8 +36,7 @@
|
||||
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>")
|
||||
if(!requires_sharpness)
|
||||
I.sharpness = IS_SHARP_ACCURATE
|
||||
I.sharpness = IS_SHARP_ACCURATE
|
||||
I.force = Clamp(I.force + increment, 0, max)
|
||||
I.throwforce = Clamp(I.throwforce + increment, 0, max)
|
||||
I.name = "[prefix] [I.name]"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/weapon/shield
|
||||
name = "shield"
|
||||
block_chance = 50
|
||||
armor = list(melee = 50, bullet = 50, laser = 50, energy = 0, bomb = 30, bio = 0, rad = 0, fire = 80, acid = 70)
|
||||
|
||||
/obj/item/weapon/shield/riot
|
||||
name = "riot shield"
|
||||
@@ -12,7 +13,7 @@
|
||||
throwforce = 5
|
||||
throw_speed = 2
|
||||
throw_range = 3
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
materials = list(MAT_GLASS=7500, MAT_METAL=1000)
|
||||
origin_tech = "materials=3;combat=4"
|
||||
attack_verb = list("shoved", "bashed")
|
||||
@@ -31,6 +32,8 @@
|
||||
/obj/item/weapon/shield/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type)
|
||||
if(attack_type == THROWN_PROJECTILE_ATTACK)
|
||||
final_block_chance += 30
|
||||
if(attack_type == LEAP_ATTACK)
|
||||
final_block_chance = 100
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/shield/riot/roman
|
||||
@@ -46,7 +49,7 @@
|
||||
item_state = "buckler"
|
||||
materials = list()
|
||||
origin_tech = "materials=1;combat=3;biotech=2"
|
||||
burn_state = FLAMMABLE
|
||||
resistance_flags = FLAMMABLE
|
||||
block_chance = 30
|
||||
|
||||
/obj/item/weapon/shield/energy
|
||||
@@ -58,7 +61,7 @@
|
||||
throwforce = 3
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
origin_tech = "materials=4;magnets=5;syndicate=6"
|
||||
attack_verb = list("shoved", "bashed")
|
||||
var/active = 0
|
||||
@@ -72,7 +75,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>"
|
||||
user.take_organ_damage(5)
|
||||
user.take_bodypart_damage(5)
|
||||
active = !active
|
||||
icon_state = "eshield[active]"
|
||||
|
||||
@@ -80,14 +83,14 @@
|
||||
force = 10
|
||||
throwforce = 8
|
||||
throw_speed = 2
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
playsound(user, 'sound/weapons/saberon.ogg', 35, 1)
|
||||
user << "<span class='notice'>[src] is now active.</span>"
|
||||
else
|
||||
force = 3
|
||||
throwforce = 3
|
||||
throw_speed = 3
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
playsound(user, 'sound/weapons/saberoff.ogg', 35, 1)
|
||||
user << "<span class='notice'>[src] can now be concealed.</span>"
|
||||
add_fingerprint(user)
|
||||
@@ -103,7 +106,7 @@
|
||||
throwforce = 3
|
||||
throw_speed = 3
|
||||
throw_range = 4
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
var/active = 0
|
||||
|
||||
/obj/item/weapon/shield/riot/tele/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
|
||||
@@ -120,14 +123,14 @@
|
||||
force = 8
|
||||
throwforce = 5
|
||||
throw_speed = 2
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = SLOT_BACK
|
||||
user << "<span class='notice'>You extend \the [src].</span>"
|
||||
else
|
||||
force = 3
|
||||
throwforce = 3
|
||||
throw_speed = 3
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
slot_flags = null
|
||||
user << "<span class='notice'>[src] can now be concealed.</span>"
|
||||
add_fingerprint(user)
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
name = "blank picket sign"
|
||||
desc = "It's blank"
|
||||
force = 5
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
attack_verb = list("bashed","smacked")
|
||||
burn_state = FLAMMABLE
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
var/label = ""
|
||||
var/last_wave = 0
|
||||
|
||||
@@ -9,9 +9,11 @@
|
||||
force_wielded = 20
|
||||
throwforce = 15
|
||||
throw_range = 1
|
||||
w_class = 5
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
var/charged = 5
|
||||
origin_tech = "combat=4;bluespace=4;plasmatech=7"
|
||||
armor = list(melee = 50, bullet = 50, laser = 50, energy = 0, bomb = 50, bio = 0, rad = 0, fire = 100, acid = 100)
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
|
||||
/obj/item/weapon/twohanded/singularityhammer/New()
|
||||
..()
|
||||
@@ -33,12 +35,14 @@
|
||||
/obj/item/weapon/twohanded/singularityhammer/proc/vortex(turf/pull, mob/wielder)
|
||||
for(var/atom/X in orange(5,pull))
|
||||
if(istype(X, /atom/movable))
|
||||
if(X == wielder) continue
|
||||
if((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human)))
|
||||
step_towards(X,pull)
|
||||
step_towards(X,pull)
|
||||
step_towards(X,pull)
|
||||
else if(istype(X,/mob/living/carbon/human))
|
||||
var/atom/movable/A = X
|
||||
if(A == wielder)
|
||||
continue
|
||||
if(A && !A.anchored && !ishuman(X))
|
||||
step_towards(A,pull)
|
||||
step_towards(A,pull)
|
||||
step_towards(A,pull)
|
||||
else if(ishuman(X))
|
||||
var/mob/living/carbon/human/H = X
|
||||
if(istype(H.shoes,/obj/item/clothing/shoes/magboots))
|
||||
var/obj/item/clothing/shoes/magboots/M = H.shoes
|
||||
@@ -57,7 +61,7 @@
|
||||
charged = 0
|
||||
if(istype(A, /mob/living/))
|
||||
var/mob/living/Z = A
|
||||
Z.take_organ_damage(20,0)
|
||||
Z.take_bodypart_damage(20,0)
|
||||
playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
|
||||
var/turf/target = get_turf(A)
|
||||
vortex(target,user)
|
||||
@@ -73,7 +77,7 @@
|
||||
force_wielded = 25
|
||||
throwforce = 30
|
||||
throw_range = 7
|
||||
w_class = 5
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
//var/charged = 5
|
||||
origin_tech = "combat=4;powerstorage=7"
|
||||
|
||||
@@ -99,7 +103,7 @@
|
||||
|
||||
/obj/item/weapon/twohanded/mjollnir/throw_impact(atom/target)
|
||||
. = ..()
|
||||
if(istype(target, /mob/living))
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
L.Stun(3)
|
||||
shock(L)
|
||||
|
||||
@@ -14,17 +14,14 @@
|
||||
desc = "You wear this on your back and put items into it."
|
||||
icon_state = "backpack"
|
||||
item_state = "backpack"
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = SLOT_BACK //ERROOOOO
|
||||
max_w_class = 3
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
max_combined_w_class = 21
|
||||
storage_slots = 21
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 20
|
||||
|
||||
/obj/item/weapon/storage/backpack/attackby(obj/item/weapon/W, mob/user, params)
|
||||
playsound(src.loc, "rustle", 50, 1, -5)
|
||||
return ..()
|
||||
resistance_flags = 0
|
||||
obj_integrity = 300
|
||||
max_integrity = 300
|
||||
|
||||
/*
|
||||
* Backpack Types
|
||||
@@ -35,14 +32,16 @@
|
||||
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"
|
||||
max_w_class = 6
|
||||
max_w_class = WEIGHT_CLASS_GIGANTIC
|
||||
max_combined_w_class = 35
|
||||
burn_state = FIRE_PROOF
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/pshoom = 'sound/items/PSHOOM.ogg'
|
||||
var/alt_sound = 'sound/items/PSHOOM_2.ogg'
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 60, acid = 50)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/backpack/holding/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is jumping into [src]! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is jumping into [src]! It looks like [user.p_theyre()] trying to commit suicide.</span>")
|
||||
user.drop_item()
|
||||
user.Stun(5)
|
||||
sleep(20)
|
||||
@@ -58,7 +57,7 @@
|
||||
playsound(src, alt_sound, 40, 1)
|
||||
else
|
||||
playsound(src, pshoom, 40, 1)
|
||||
user.Beam(dest_object,icon_state="rped_upgrade",icon='icons/effects/effects.dmi',time=5)
|
||||
user.Beam(dest_object,icon_state="rped_upgrade",time=5)
|
||||
return 1
|
||||
user << "The [src.name] buzzes."
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
@@ -92,12 +91,12 @@
|
||||
desc = "Space Santa uses this to deliver toys to all the nice children in space in Christmas! Wow, it's pretty big!"
|
||||
icon_state = "giftbag0"
|
||||
item_state = "giftbag"
|
||||
w_class = 4
|
||||
max_w_class = 3
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
max_combined_w_class = 60
|
||||
|
||||
/obj/item/weapon/storage/backpack/santabag/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] places the [src.name] over their head and pulls it tight! It looks like they aren't in the Christmas spirit...</span>")
|
||||
user.visible_message("<span class='suicide'>[user] places [src] over their head and pulls it tight! It looks like they aren't in the Christmas spirit...</span>")
|
||||
return (OXYLOSS)
|
||||
|
||||
/obj/item/weapon/storage/backpack/cultpack
|
||||
@@ -141,14 +140,14 @@
|
||||
desc = "It's a special backpack made exclusively for Nanotrasen officers."
|
||||
icon_state = "captainpack"
|
||||
item_state = "captainpack"
|
||||
burn_state = FIRE_PROOF
|
||||
resistance_flags = 0
|
||||
|
||||
/obj/item/weapon/storage/backpack/industrial
|
||||
name = "industrial backpack"
|
||||
desc = "It's a tough backpack for the daily grind of station life."
|
||||
icon_state = "engiepack"
|
||||
item_state = "engiepack"
|
||||
burn_state = FIRE_PROOF
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/item/weapon/storage/backpack/botany
|
||||
name = "botany backpack"
|
||||
@@ -173,7 +172,7 @@
|
||||
desc = "A specially designed backpack. It's fire resistant and smells vaguely of plasma."
|
||||
icon_state = "toxpack"
|
||||
item_state = "toxpack"
|
||||
burn_state = FIRE_PROOF
|
||||
resistance_flags = 0
|
||||
|
||||
/obj/item/weapon/storage/backpack/virology
|
||||
name = "virology backpack"
|
||||
@@ -187,93 +186,94 @@
|
||||
*/
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel
|
||||
name = "leather satchel"
|
||||
desc = "It's a very fancy satchel made with fine leather."
|
||||
icon_state = "satchel"
|
||||
burn_state = FIRE_PROOF
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel/withwallet/New()
|
||||
..()
|
||||
new /obj/item/weapon/storage/wallet/random( src )
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_norm
|
||||
name = "satchel"
|
||||
desc = "A trendy looking satchel."
|
||||
icon_state = "satchel-norm"
|
||||
species_exception = list(/datum/species/angel) //satchels can be equipped since they are on the side, not back
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_eng
|
||||
/obj/item/weapon/storage/backpack/satchel/leather
|
||||
name = "leather satchel"
|
||||
desc = "It's a very fancy satchel made with fine leather."
|
||||
icon_state = "satchel"
|
||||
resistance_flags = 0
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel/leather/withwallet/New()
|
||||
..()
|
||||
new /obj/item/weapon/storage/wallet/random( src )
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel/eng
|
||||
name = "industrial satchel"
|
||||
desc = "A tough satchel with extra pockets."
|
||||
icon_state = "satchel-eng"
|
||||
item_state = "engiepack"
|
||||
burn_state = FIRE_PROOF
|
||||
resistance_flags = 0
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_med
|
||||
/obj/item/weapon/storage/backpack/satchel/med
|
||||
name = "medical satchel"
|
||||
desc = "A sterile satchel used in medical departments."
|
||||
icon_state = "satchel-med"
|
||||
item_state = "medicalpack"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_vir
|
||||
/obj/item/weapon/storage/backpack/satchel/vir
|
||||
name = "virologist satchel"
|
||||
desc = "A sterile satchel with virologist colours."
|
||||
icon_state = "satchel-vir"
|
||||
item_state = "satchel-vir"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_chem
|
||||
/obj/item/weapon/storage/backpack/satchel/chem
|
||||
name = "chemist satchel"
|
||||
desc = "A sterile satchel with chemist colours."
|
||||
icon_state = "satchel-chem"
|
||||
item_state = "satchel-chem"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_gen
|
||||
/obj/item/weapon/storage/backpack/satchel/gen
|
||||
name = "geneticist satchel"
|
||||
desc = "A sterile satchel with geneticist colours."
|
||||
icon_state = "satchel-gen"
|
||||
item_state = "satchel-gen"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_tox
|
||||
/obj/item/weapon/storage/backpack/satchel/tox
|
||||
name = "scientist satchel"
|
||||
desc = "Useful for holding research materials."
|
||||
icon_state = "satchel-tox"
|
||||
item_state = "satchel-tox"
|
||||
burn_state = FIRE_PROOF
|
||||
resistance_flags = 0
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_hyd
|
||||
/obj/item/weapon/storage/backpack/satchel/hyd
|
||||
name = "botanist satchel"
|
||||
desc = "A satchel made of all natural fibers."
|
||||
icon_state = "satchel-hyd"
|
||||
item_state = "satchel-hyd"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_sec
|
||||
/obj/item/weapon/storage/backpack/satchel/sec
|
||||
name = "security satchel"
|
||||
desc = "A robust satchel for security related needs."
|
||||
icon_state = "satchel-sec"
|
||||
item_state = "securitypack"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_explorer
|
||||
/obj/item/weapon/storage/backpack/satchel/explorer
|
||||
name = "explorer satchel"
|
||||
desc = "A robust satchel for stashing your loot."
|
||||
icon_state = "satchel-explorer"
|
||||
item_state = "securitypack"
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_cap
|
||||
/obj/item/weapon/storage/backpack/satchel/cap
|
||||
name = "captain's satchel"
|
||||
desc = "An exclusive satchel for Nanotrasen officers."
|
||||
icon_state = "satchel-cap"
|
||||
item_state = "captainpack"
|
||||
burn_state = FIRE_PROOF
|
||||
resistance_flags = 0
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_flat
|
||||
/obj/item/weapon/storage/backpack/satchel/flat
|
||||
name = "smuggler's satchel"
|
||||
desc = "A very slim satchel that can easily fit into tight spaces."
|
||||
icon_state = "satchel-flat"
|
||||
w_class = 3 //Can fit in backpacks itself.
|
||||
w_class = WEIGHT_CLASS_NORMAL //Can fit in backpacks itself.
|
||||
max_combined_w_class = 15
|
||||
level = 1
|
||||
cant_hold = list(/obj/item/weapon/storage/backpack/satchel_flat) //muh recursive backpacks
|
||||
cant_hold = list(/obj/item/weapon/storage/backpack/satchel/flat) //muh recursive backpacks
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_flat/hide(var/intact)
|
||||
/obj/item/weapon/storage/backpack/satchel/flat/hide(var/intact)
|
||||
if(intact)
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
anchored = 1 //otherwise you can start pulling, cover it, and drag around an invisible backpack.
|
||||
@@ -283,10 +283,36 @@
|
||||
anchored = 0
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel_flat/New()
|
||||
/obj/item/weapon/storage/backpack/satchel/flat/New()
|
||||
..()
|
||||
new /obj/item/stack/tile/plasteel(src)
|
||||
PoolOrNew(/obj/item/stack/tile/plasteel, src)
|
||||
new /obj/item/weapon/crowbar(src)
|
||||
SSpersistence.new_secret_satchels += src
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel/flat/Destroy()
|
||||
SSpersistence.new_secret_satchels -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel/flat/secret
|
||||
var/list/reward_one_of_these = list() //Intended for map editing
|
||||
var/list/reward_all_of_these = list() //use paths!
|
||||
var/revealed = 0
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel/flat/secret/New()
|
||||
..()
|
||||
|
||||
if(isfloorturf(loc) && !istype(loc,/turf/open/floor/plating/))
|
||||
hide(1)
|
||||
|
||||
/obj/item/weapon/storage/backpack/satchel/flat/secret/hide(intact)
|
||||
..()
|
||||
if(!intact && !revealed)
|
||||
if(reward_one_of_these.len > 0)
|
||||
var/reward = pick(reward_one_of_these)
|
||||
new reward(src)
|
||||
for(var/R in reward_all_of_these)
|
||||
new R(src)
|
||||
revealed = 1
|
||||
|
||||
/obj/item/weapon/storage/backpack/dufflebag
|
||||
name = "dufflebag"
|
||||
@@ -301,7 +327,7 @@
|
||||
desc = "A large dufflebag for holding extra captainly goods."
|
||||
icon_state = "duffle-captain"
|
||||
item_state = "duffle-captain"
|
||||
burn_state = FIRE_PROOF
|
||||
resistance_flags = 0
|
||||
|
||||
/obj/item/weapon/storage/backpack/dufflebag/med
|
||||
name = "medical dufflebag"
|
||||
@@ -320,14 +346,14 @@
|
||||
desc = "A large dufflebag for holding extra tools and supplies."
|
||||
icon_state = "duffle-eng"
|
||||
item_state = "duffle-eng"
|
||||
burn_state = FIRE_PROOF
|
||||
resistance_flags = 0
|
||||
|
||||
/obj/item/weapon/storage/backpack/dufflebag/drone
|
||||
name = "drone dufflebag"
|
||||
desc = "A large dufflebag for holding tools and hats."
|
||||
icon_state = "duffle-drone"
|
||||
item_state = "duffle-drone"
|
||||
burn_state = FIRE_PROOF
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/item/weapon/storage/backpack/dufflebag/drone/New()
|
||||
..()
|
||||
@@ -355,7 +381,7 @@
|
||||
name = "suspicious looking dufflebag"
|
||||
desc = "A large dufflebag for holding extra tactical supplies."
|
||||
icon_state = "duffle-syndie"
|
||||
item_state = "duffle-syndiemed"
|
||||
item_state = "duffle-syndie"
|
||||
origin_tech = "syndicate=1"
|
||||
silent = 1
|
||||
slowdown = 0
|
||||
@@ -424,7 +450,7 @@
|
||||
contents = list()
|
||||
new /obj/item/ammo_box/magazine/smgm45(src)
|
||||
new /obj/item/ammo_box/magazine/smgm45(src)
|
||||
new /obj/item/weapon/gun/projectile/automatic/c20r(src)
|
||||
new /obj/item/weapon/gun/ballistic/automatic/c20r(src)
|
||||
new /obj/item/weapon/suppressor/specialoffer(src)
|
||||
return
|
||||
|
||||
@@ -435,7 +461,7 @@
|
||||
..()
|
||||
contents = list()
|
||||
new /obj/item/ammo_box/magazine/m12g(src)
|
||||
new /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog(src)
|
||||
new /obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog(src)
|
||||
new /obj/item/ammo_box/magazine/m12g/buckshot(src)
|
||||
new /obj/item/clothing/glasses/thermal/syndi(src)
|
||||
return
|
||||
@@ -448,7 +474,7 @@
|
||||
contents = list()
|
||||
new /obj/item/clothing/shoes/magboots/syndie(src)
|
||||
new /obj/item/weapon/storage/firstaid/tactical(src)
|
||||
new /obj/item/weapon/gun/projectile/automatic/l6_saw/toy(src)
|
||||
new /obj/item/weapon/gun/ballistic/automatic/l6_saw/toy(src)
|
||||
new /obj/item/ammo_box/foambox/riot(src)
|
||||
return
|
||||
|
||||
@@ -460,7 +486,7 @@
|
||||
contents = list()
|
||||
new /obj/item/clothing/shoes/magboots/syndie(src)
|
||||
new /obj/item/weapon/storage/firstaid/tactical(src)
|
||||
new /obj/item/weapon/gun/projectile/automatic/l6_saw/toy(src)
|
||||
new /obj/item/weapon/gun/ballistic/automatic/l6_saw/toy(src)
|
||||
new /obj/item/ammo_box/foambox/riot(src)
|
||||
return
|
||||
|
||||
@@ -473,7 +499,7 @@
|
||||
new /obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror(src)
|
||||
new /obj/item/weapon/storage/box/syndie_kit/chemical(src)
|
||||
new /obj/item/weapon/gun/syringe/syndicate(src)
|
||||
new /obj/item/weapon/gun/projectile/automatic/c20r/toy(src)
|
||||
new /obj/item/weapon/gun/ballistic/automatic/c20r/toy(src)
|
||||
new /obj/item/weapon/storage/box/syringes(src)
|
||||
new /obj/item/ammo_box/foambox/riot(src)
|
||||
new /obj/item/weapon/grenade/chem_grenade/bioterrorfoam(src)
|
||||
@@ -500,7 +526,7 @@
|
||||
new /obj/item/clothing/under/syndicate/soviet(src)
|
||||
new /obj/item/weapon/watertank/operator(src)
|
||||
new /obj/item/clothing/suit/space/hardsuit/syndi/elite(src)
|
||||
new /obj/item/weapon/gun/projectile/automatic/pistol/APS(src)
|
||||
new /obj/item/weapon/gun/ballistic/automatic/pistol/APS(src)
|
||||
new /obj/item/ammo_box/magazine/pistolm9mm(src)
|
||||
new /obj/item/ammo_box/magazine/pistolm9mm(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/badminka(src)
|
||||
|
||||
@@ -33,15 +33,15 @@
|
||||
icon_state = "trashbag"
|
||||
item_state = "trashbag"
|
||||
|
||||
w_class = 4
|
||||
max_w_class = 2
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
max_w_class = WEIGHT_CLASS_SMALL
|
||||
max_combined_w_class = 30
|
||||
storage_slots = 30
|
||||
can_hold = list() // any
|
||||
cant_hold = list(/obj/item/weapon/disk/nuclear)
|
||||
|
||||
/obj/item/weapon/storage/bag/trash/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] puts the [src.name] over their head and starts chomping at the insides! Disgusting!</span>")
|
||||
user.visible_message("<span class='suicide'>[user] puts [src] over [user.p_their()] head and starts chomping at the insides! Disgusting!</span>")
|
||||
playsound(loc, 'sound/items/eatfood.ogg', 50, 1, -1)
|
||||
return (TOXLOSS)
|
||||
|
||||
@@ -83,10 +83,10 @@
|
||||
icon_state = "satchel"
|
||||
origin_tech = "engineering=2"
|
||||
slot_flags = SLOT_BELT | SLOT_POCKET
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
storage_slots = 50
|
||||
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class
|
||||
max_w_class = 3
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
can_hold = list(/obj/item/weapon/ore)
|
||||
|
||||
/obj/item/weapon/storage/bag/ore/cyborg
|
||||
@@ -108,18 +108,12 @@
|
||||
name = "plant bag"
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
icon_state = "plantbag"
|
||||
storage_slots = 50; //the number of plant pieces it can carry.
|
||||
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class
|
||||
max_w_class = 3
|
||||
w_class = 1
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown)
|
||||
burn_state = FLAMMABLE
|
||||
|
||||
/obj/item/weapon/storage/bag/plants/holding // Now botany can crash the server too
|
||||
name = "plant bag of holding"
|
||||
icon_state = "plantbag_holding"
|
||||
storage_slots = INFINITY
|
||||
max_combined_w_class = INFINITY
|
||||
storage_slots = 100; //the number of plant pieces it can carry.
|
||||
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)
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
////////
|
||||
|
||||
@@ -153,7 +147,7 @@
|
||||
icon_state = "sheetsnatcher"
|
||||
|
||||
var/capacity = 300; //the number of sheets it can carry.
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
allow_quick_empty = 1 // this function is superceded
|
||||
|
||||
@@ -297,10 +291,10 @@
|
||||
display_contents_with_number = 0 //This would look really stupid otherwise
|
||||
storage_slots = 7
|
||||
max_combined_w_class = 21
|
||||
max_w_class = 3
|
||||
w_class = 4 //Bigger than a book because physics
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
w_class = WEIGHT_CLASS_BULKY //Bigger than a book because physics
|
||||
can_hold = list(/obj/item/weapon/book, /obj/item/weapon/storage/book, /obj/item/weapon/spellbook)
|
||||
burn_state = FLAMMABLE
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/*
|
||||
* Trays - Agouri
|
||||
@@ -314,7 +308,7 @@
|
||||
throwforce = 10
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
flags = CONDUCT
|
||||
materials = list(MAT_METAL=3000)
|
||||
preposition = "on"
|
||||
@@ -367,10 +361,10 @@
|
||||
desc = "A bag for storing pills, patches, and bottles."
|
||||
storage_slots = 50
|
||||
max_combined_w_class = 200
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
preposition = "in"
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/pill, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle)
|
||||
burn_state = FLAMMABLE
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/*
|
||||
* Biowaste bag (mostly for xenobiologists)
|
||||
@@ -383,7 +377,7 @@
|
||||
desc = "A bag for the safe transportation and disposal of biowaste and other biological materials."
|
||||
storage_slots = 25
|
||||
max_combined_w_class = 200
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
preposition = "in"
|
||||
can_hold = list(/obj/item/slime_extract, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/blood, /obj/item/weapon/reagent_containers/hypospray/medipen, /obj/item/trash/deadmouse)
|
||||
burn_state = FLAMMABLE
|
||||
can_hold = list(/obj/item/slime_extract, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/blood, /obj/item/weapon/reagent_containers/hypospray/medipen, /obj/item/trash/deadmouse, /obj/item/weapon/reagent_containers/food/snacks/monkeycube)
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
item_state = "utility"
|
||||
slot_flags = SLOT_BELT
|
||||
attack_verb = list("whipped", "lashed", "disciplined")
|
||||
obj_integrity = 300
|
||||
max_integrity = 300
|
||||
|
||||
/obj/item/weapon/storage/belt/update_icon()
|
||||
cut_overlays()
|
||||
@@ -31,7 +33,7 @@
|
||||
/obj/item/device/analyzer,
|
||||
/obj/item/weapon/extinguisher/mini,
|
||||
/obj/item/device/radio,
|
||||
/obj/item/clothing/gloves/
|
||||
/obj/item/clothing/gloves
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/utility/chief
|
||||
@@ -48,8 +50,10 @@
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/stack/cable_coil(src,30,pick("red","yellow","orange"))
|
||||
new /obj/item/weapon/extinguisher/mini(src)
|
||||
new /obj/item/device/analyzer(src)
|
||||
//much roomier now that we've managed to remove two tools
|
||||
|
||||
|
||||
/obj/item/weapon/storage/belt/utility/full/New()
|
||||
..()
|
||||
new /obj/item/weapon/screwdriver(src)
|
||||
@@ -78,7 +82,7 @@
|
||||
desc = "Can hold various medical equipment."
|
||||
icon_state = "medicalbelt"
|
||||
item_state = "medical"
|
||||
max_w_class = 4
|
||||
max_w_class = WEIGHT_CLASS_BULKY
|
||||
can_hold = list(
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/weapon/dnainjector,
|
||||
@@ -110,7 +114,7 @@
|
||||
/obj/item/weapon/cautery,
|
||||
/obj/item/weapon/hemostat,
|
||||
/obj/item/device/geiger_counter,
|
||||
/obj/item/clothing/tie/stethoscope,
|
||||
/obj/item/clothing/neck/stethoscope,
|
||||
/obj/item/weapon/stamp,
|
||||
/obj/item/clothing/glasses,
|
||||
/obj/item/weapon/wrench/medical,
|
||||
@@ -128,7 +132,7 @@
|
||||
icon_state = "securitybelt"
|
||||
item_state = "security"//Could likely use a better one.
|
||||
storage_slots = 5
|
||||
max_w_class = 3 //Because the baton wouldn't fit otherwise. - Neerti
|
||||
max_w_class = WEIGHT_CLASS_NORMAL //Because the baton wouldn't fit otherwise. - Neerti
|
||||
can_hold = list(
|
||||
/obj/item/weapon/melee/baton,
|
||||
/obj/item/weapon/melee/classic_baton,
|
||||
@@ -156,6 +160,7 @@
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
new /obj/item/device/assembly/flash/handheld(src)
|
||||
new /obj/item/weapon/melee/baton/loaded(src)
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/storage/belt/mining
|
||||
@@ -164,8 +169,8 @@
|
||||
icon_state = "explorer1"
|
||||
item_state = "explorer1"
|
||||
storage_slots = 6
|
||||
w_class = 4
|
||||
max_w_class = 4 //Pickaxes are big.
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
max_w_class = WEIGHT_CLASS_BULKY //Pickaxes are big.
|
||||
max_combined_w_class = 20 //Not an issue with this whitelist, probably.
|
||||
can_hold = list(
|
||||
/obj/item/weapon/crowbar,
|
||||
@@ -201,7 +206,8 @@
|
||||
/obj/item/weapon/reagent_containers/food/drinks,
|
||||
/obj/item/organ/hivelord_core,
|
||||
/obj/item/device/wormhole_jaunter,
|
||||
/obj/item/device/t_scanner/motionTracker
|
||||
/obj/item/weapon/storage/bag/plants,
|
||||
|
||||
)
|
||||
|
||||
|
||||
@@ -250,7 +256,25 @@
|
||||
desc = "A syndicate belt designed to be used by boarding parties. Its style is modeled after the hardsuits they wear."
|
||||
icon_state = "militarybelt"
|
||||
item_state = "military"
|
||||
max_w_class = 2
|
||||
max_w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
/obj/item/weapon/storage/belt/military/abductor
|
||||
name = "agent belt"
|
||||
desc = "A belt used by abductor agents."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "belt"
|
||||
item_state = "security"
|
||||
|
||||
/obj/item/weapon/storage/belt/military/abductor/full/New()
|
||||
..()
|
||||
new /obj/item/weapon/screwdriver/abductor(src)
|
||||
new /obj/item/weapon/wrench/abductor(src)
|
||||
new /obj/item/weapon/weldingtool/abductor(src)
|
||||
new /obj/item/weapon/crowbar/abductor(src)
|
||||
new /obj/item/weapon/wirecutters/abductor(src)
|
||||
new /obj/item/device/multitool/abductor(src)
|
||||
new /obj/item/stack/cable_coil(src,30,"white")
|
||||
|
||||
|
||||
/obj/item/weapon/storage/belt/military/army
|
||||
name = "army belt"
|
||||
@@ -270,7 +294,7 @@
|
||||
desc = "A belt for holding grenades."
|
||||
icon_state = "grenadebeltnew"
|
||||
item_state = "security"
|
||||
max_w_class = 4
|
||||
max_w_class = WEIGHT_CLASS_BULKY
|
||||
storage_slots = 30
|
||||
can_hold = list(
|
||||
/obj/item/weapon/grenade,
|
||||
@@ -340,7 +364,7 @@
|
||||
icon_state = "janibelt"
|
||||
item_state = "janibelt"
|
||||
storage_slots = 6
|
||||
max_w_class = 4 // Set to this so the light replacer can fit.
|
||||
max_w_class = WEIGHT_CLASS_BULKY // Set to this so the light replacer can fit.
|
||||
can_hold = list(
|
||||
/obj/item/weapon/grenade/chem_grenade,
|
||||
/obj/item/device/lightreplacer,
|
||||
@@ -349,7 +373,7 @@
|
||||
/obj/item/weapon/soap,
|
||||
/obj/item/weapon/holosign_creator,
|
||||
/obj/item/key/janitor,
|
||||
/obj/item/clothing/gloves/
|
||||
/obj/item/clothing/gloves
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/bandolier
|
||||
@@ -368,10 +392,10 @@
|
||||
icon_state = "holster"
|
||||
item_state = "holster"
|
||||
storage_slots = 3
|
||||
max_w_class = 3
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
can_hold = list(
|
||||
/obj/item/weapon/gun/projectile/automatic/pistol,
|
||||
/obj/item/weapon/gun/projectile/revolver,
|
||||
/obj/item/weapon/gun/ballistic/automatic/pistol,
|
||||
/obj/item/weapon/gun/ballistic/revolver,
|
||||
/obj/item/ammo_box,
|
||||
)
|
||||
alternate_worn_layer = UNDER_SUIT_LAYER
|
||||
@@ -382,7 +406,7 @@
|
||||
icon_state = "fannypack_leather"
|
||||
item_state = "fannypack_leather"
|
||||
storage_slots = 3
|
||||
max_w_class = 2
|
||||
max_w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
/obj/item/weapon/storage/belt/fannypack/black
|
||||
name = "black fannypack"
|
||||
@@ -433,3 +457,49 @@
|
||||
name = "yellow fannypack"
|
||||
icon_state = "fannypack_yellow"
|
||||
item_state = "fannypack_yellow"
|
||||
|
||||
/obj/item/weapon/storage/belt/sabre
|
||||
name = "sabre sheath"
|
||||
desc = "An ornate sheath designed to hold an officer's blade."
|
||||
icon_state = "sheath"
|
||||
item_state = "sheath"
|
||||
storage_slots = 1
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
max_w_class = WEIGHT_CLASS_BULKY
|
||||
can_hold = list(
|
||||
/obj/item/weapon/melee/sabre
|
||||
)
|
||||
|
||||
/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>"
|
||||
|
||||
/obj/item/weapon/storage/belt/sabre/AltClick(mob/user)
|
||||
if(!ishuman(user) || !user.canUseTopic(src, be_close=TRUE))
|
||||
return
|
||||
if(contents.len)
|
||||
var/obj/item/I = contents[1]
|
||||
user.visible_message("[user] takes [I] out of [src].", "<span class='notice'>You take [I] out of [src].</span>",\
|
||||
)
|
||||
user.put_in_hands(I)
|
||||
update_icon()
|
||||
else
|
||||
user << "[src] is empty."
|
||||
|
||||
/obj/item/weapon/storage/belt/sabre/update_icon()
|
||||
icon_state = "sheath"
|
||||
item_state = "sheath"
|
||||
if(contents.len)
|
||||
icon_state += "-sabre"
|
||||
item_state += "-sabre"
|
||||
if(loc && isliving(loc))
|
||||
var/mob/living/L = loc
|
||||
L.regenerate_icons()
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/storage/belt/sabre/New()
|
||||
..()
|
||||
new /obj/item/weapon/melee/sabre(src)
|
||||
update_icon()
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
icon_state ="book"
|
||||
throw_speed = 2
|
||||
throw_range = 5
|
||||
w_class = 3
|
||||
burn_state = FLAMMABLE
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
resistance_flags = FLAMMABLE
|
||||
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>"
|
||||
@@ -20,7 +20,7 @@
|
||||
var/deity_name = "Christ"
|
||||
|
||||
/obj/item/weapon/storage/book/bible/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is offering \himself to [src.deity_name]! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is offering [user.p_them()]self to [deity_name]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/storage/book/bible/booze
|
||||
@@ -50,7 +50,7 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible", "
|
||||
/obj/item/weapon/storage/book/bible/attack_self(mob/living/carbon/human/H)
|
||||
if(!istype(H))
|
||||
return
|
||||
if(ticker && !ticker.Bible_icon_state && H.job == "Chaplain")
|
||||
if(!SSreligion.Bible_icon_state && H.job == "Chaplain")
|
||||
//Open bible selection
|
||||
var/dat = "<html><head><title>Pick Bible Style</title></head><body><center><h2>Pick a bible style</h2></center><table>"
|
||||
|
||||
@@ -95,7 +95,7 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible", "
|
||||
T.setDir(10)
|
||||
|
||||
/obj/item/weapon/storage/book/bible/Topic(href, href_list)
|
||||
if(href_list["seticon"] && ticker && !ticker.Bible_icon_state)
|
||||
if(href_list["seticon"] && ticker && !SSreligion.Bible_icon_state)
|
||||
var/iconi = text2num(href_list["seticon"])
|
||||
|
||||
var/biblename = biblenames[iconi]
|
||||
@@ -107,27 +107,39 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible", "
|
||||
//Set biblespecific chapels
|
||||
setupbiblespecifics(B, usr)
|
||||
|
||||
if(ticker)
|
||||
ticker.Bible_icon_state = B.icon_state
|
||||
ticker.Bible_item_state = B.item_state
|
||||
|
||||
SSreligion.Bible_icon_state = B.icon_state
|
||||
SSreligion.Bible_item_state = B.item_state
|
||||
feedback_set_details("religion_book","[biblename]")
|
||||
|
||||
usr << browse(null, "window=editicon") // Close window
|
||||
|
||||
/obj/item/weapon/storage/book/bible/proc/bless(mob/living/carbon/M)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/heal_amt = 10
|
||||
for(var/obj/item/bodypart/affecting in H.bodyparts)
|
||||
if(affecting.status == ORGAN_ORGANIC) //No Bible can heal a robotic arm!
|
||||
if(affecting.heal_damage(heal_amt, heal_amt, 0))
|
||||
H.update_damage_overlays(0)
|
||||
return
|
||||
/obj/item/weapon/storage/book/bible/proc/bless(mob/living/carbon/human/H, mob/living/user)
|
||||
for(var/X in H.bodyparts)
|
||||
var/obj/item/bodypart/BP = X
|
||||
if(BP.status == BODYPART_ROBOTIC)
|
||||
user << "<span class='warning'>[src.deity_name] refuses to heal this metallic taint!</span>"
|
||||
return 0
|
||||
|
||||
var/heal_amt = 10
|
||||
var/list/hurt_limbs = H.get_damaged_bodyparts(1, 1)
|
||||
|
||||
if(hurt_limbs.len)
|
||||
for(var/X in hurt_limbs)
|
||||
var/obj/item/bodypart/affecting = X
|
||||
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>"
|
||||
playsound(src.loc, "punch", 25, 1, -1)
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/storage/book/bible/attack(mob/living/M, mob/living/carbon/human/user)
|
||||
|
||||
var/chaplain = 0
|
||||
if(user.mind && (user.mind.assigned_role == "Chaplain"))
|
||||
if(user.mind && (user.mind.isholy))
|
||||
chaplain = 1
|
||||
|
||||
|
||||
@@ -137,61 +149,50 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible", "
|
||||
return
|
||||
if(!chaplain)
|
||||
user << "<span class='danger'>The book sizzles in your hands.</span>"
|
||||
user.take_organ_damage(0,10)
|
||||
user.take_bodypart_damage(0,10)
|
||||
return
|
||||
|
||||
if (user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='danger'>The [src] slips out of your hand and hits your head.</span>"
|
||||
user.take_organ_damage(10)
|
||||
user << "<span class='danger'>[src] slips out of your hand and hits your head.</span>"
|
||||
user.take_bodypart_damage(10)
|
||||
user.Paralyse(20)
|
||||
return
|
||||
|
||||
if (M.stat !=2)
|
||||
if(M.mind && (M.mind.assigned_role == "Chaplain"))
|
||||
var/smack = 1
|
||||
|
||||
if (M.stat != DEAD)
|
||||
if(chaplain && user == M)
|
||||
user << "<span class='warning'>You can't heal yourself!</span>"
|
||||
return
|
||||
if ((istype(M, /mob/living/carbon/human) && prob(60)))
|
||||
bless(M)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/message_halt = 0
|
||||
for(var/obj/item/bodypart/affecting in H.bodyparts)
|
||||
if(affecting.status == ORGAN_ORGANIC)
|
||||
if(message_halt == 0)
|
||||
M.visible_message("<span class='notice'>[user] heals [M] with the power of [src.deity_name]!</span>")
|
||||
M << "<span class='boldnotice'>May the power of [src.deity_name] compel you to be healed!</span>"
|
||||
playsound(src.loc, "punch", 25, 1, -1)
|
||||
message_halt = 1
|
||||
else
|
||||
user << "<span class='warning'>[src.deity_name] refuses to heal this metallic taint!</span>"
|
||||
return
|
||||
|
||||
if(ishuman(M) && prob(60) && bless(M, user))
|
||||
smack = 0
|
||||
else if(iscarbon(M))
|
||||
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>"
|
||||
|
||||
|
||||
|
||||
else
|
||||
if(ishuman(M) && !istype(M:head, /obj/item/clothing/head/helmet))
|
||||
M.adjustBrainLoss(10)
|
||||
M << "<span class='danger'>You feel dumber.</span>"
|
||||
if(smack)
|
||||
M.visible_message("<span class='danger'>[user] beats [M] over the head with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] beats [M] over the head with [src]!</span>")
|
||||
playsound(src.loc, "punch", 25, 1, -1)
|
||||
add_logs(user, M, "attacked", src)
|
||||
|
||||
else if(M.stat == 2)
|
||||
else
|
||||
M.visible_message("<span class='danger'>[user] smacks [M]'s lifeless corpse with [src].</span>")
|
||||
playsound(src.loc, "punch", 25, 1, -1)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/storage/book/bible/afterattack(atom/A, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if (istype(A, /turf/open/floor))
|
||||
if(isfloorturf(A))
|
||||
user << "<span class='notice'>You hit the floor with the bible.</span>"
|
||||
if(user.mind && (user.mind.assigned_role == "Chaplain"))
|
||||
if(user.mind && (user.mind.isholy))
|
||||
for(var/obj/effect/rune/R in orange(2,user))
|
||||
R.invisibility = 0
|
||||
if(user.mind && (user.mind.assigned_role == "Chaplain"))
|
||||
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>"
|
||||
var/water2holy = A.reagents.get_reagent_amount("water")
|
||||
@@ -202,7 +203,3 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible", "
|
||||
var/unholy2clean = A.reagents.get_reagent_amount("unholywater")
|
||||
A.reagents.del_reagent("unholywater")
|
||||
A.reagents.add_reagent("holywater",unholy2clean)
|
||||
|
||||
/obj/item/weapon/storage/book/bible/attackby(obj/item/weapon/W, mob/user, params)
|
||||
playsound(src.loc, "rustle", 50, 1, -5)
|
||||
return ..()
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
* Handcuff, mousetrap, and pillbottle boxes,
|
||||
* Snap-pops and matchboxes,
|
||||
* Replacement light boxes.
|
||||
* Action Figure Boxes
|
||||
* Various paper bags.
|
||||
*
|
||||
* For syndicate call-ins see uplink_kits.dm
|
||||
@@ -25,102 +26,9 @@
|
||||
desc = "It's just an ordinary box."
|
||||
icon_state = "box"
|
||||
item_state = "syringe_kit"
|
||||
burn_state = FLAMMABLE
|
||||
resistance_flags = FLAMMABLE
|
||||
var/foldable = /obj/item/stack/sheet/cardboard
|
||||
var/obj/item/device/boobytrap/trap = null
|
||||
|
||||
/obj/item/weapon/storage/box/examine(mob/user)
|
||||
..()
|
||||
|
||||
if(trap && in_range(user, src))
|
||||
user << "<span class='warning'>Something seems to be wired to the inside of the box!</span>"
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/attackby(obj/item/C, mob/user, params)
|
||||
|
||||
if(!istype(C, /obj/item/device/boobytrap) && trap && !istype(C, /obj/item/weapon/wirecutters))
|
||||
visible_message("<span class='warning'>[src] blows up in a spray of deadly shrapnel!</span>")
|
||||
trap.loc = get_turf(src)
|
||||
trap.blow()
|
||||
trap = null
|
||||
for(var/mob/living/carbon/human/H in orange(2,src))
|
||||
H.Paralyse(8)
|
||||
H.adjust_fire_stacks(1)
|
||||
H.IgniteMob()
|
||||
qdel(src)
|
||||
|
||||
if(istype(C, /obj/item/device/boobytrap))
|
||||
if(trap)
|
||||
user << "<span class='warning'>There's already a booby trap hooked up to this box!</span>"
|
||||
return
|
||||
user << "<span class='warning'>You apply [C]. Next time someone opens the box, it will explode.</span>"
|
||||
C.loc = src
|
||||
trap = C
|
||||
qdel(C)
|
||||
user.drop_item()
|
||||
|
||||
if(istype(C, /obj/item/weapon/wirecutters) && trap)
|
||||
user << "<span class='notice'>You begin attempting to disarm the booby trap...</span>"
|
||||
visible_message("<span class='warning'>[user] begins attempting to disarm the booby trap.</span>")
|
||||
if(do_after(user, 80, target = src))
|
||||
if(prob(75))
|
||||
user << "<span class='notice'>You disarm the booby trap, destroying it in the process.</span>"
|
||||
visible_message("<span class='notice'>[user] disarms the booby trap!</span>")
|
||||
trap = null
|
||||
|
||||
else
|
||||
user << "<span class='warning'>You accidentally bump the sensor and set off the booby trap!</span>"
|
||||
visible_message("<span class='warning'>[user] fails to disarm the booby trap!</span>")
|
||||
visible_message("<span class='warning'>[src] blows up in a spray of deadly shrapnel!</span>")
|
||||
trap.loc = get_turf(src)
|
||||
trap.blow()
|
||||
trap = null
|
||||
for(var/mob/living/carbon/human/H in orange(2,src))
|
||||
H.Paralyse(8)
|
||||
H.adjust_fire_stacks(1)
|
||||
H.IgniteMob()
|
||||
qdel(src)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/storage/box/MouseDrop(atom/over_object)
|
||||
if(iscarbon(usr) || isdrone(usr))
|
||||
var/mob/M = usr
|
||||
|
||||
if(!over_object)
|
||||
return
|
||||
|
||||
if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
|
||||
return
|
||||
|
||||
if(over_object == M && Adjacent(M))
|
||||
if(trap)
|
||||
visible_message("<span class='warning'>[src] blows up in a spray of deadly shrapnel!</span>")
|
||||
trap.loc = get_turf(src)
|
||||
trap.blow()
|
||||
trap = null
|
||||
for(var/mob/living/carbon/human/H in orange(2,src))
|
||||
H.Paralyse(8)
|
||||
H.adjust_fire_stacks(1)
|
||||
H.IgniteMob()
|
||||
qdel(src)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/storage/box/attack_hand(mob/user)
|
||||
..()
|
||||
|
||||
if(trap)
|
||||
visible_message("<span class='warning'>[src] blows up in a spray of deadly shrapnel!</span>")
|
||||
trap.loc = get_turf(src)
|
||||
trap.blow()
|
||||
trap = null
|
||||
for(var/mob/living/carbon/human/H in orange(2,src))
|
||||
H.Paralyse(8)
|
||||
H.adjust_fire_stacks(1)
|
||||
H.IgniteMob()
|
||||
qdel(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/storage/box/attack_self(mob/user)
|
||||
..()
|
||||
@@ -140,8 +48,7 @@
|
||||
var/obj/item/I = new foldable(get_turf(src))
|
||||
user.drop_item()
|
||||
user.put_in_hands(I)
|
||||
user.update_inv_l_hand()
|
||||
user.update_inv_r_hand()
|
||||
user.update_inv_hands()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/storage/box/attackby(obj/item/W, mob/user, params)
|
||||
@@ -163,7 +70,7 @@
|
||||
|
||||
/obj/item/weapon/storage/box/survival_mining/New()
|
||||
..()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/clothing/mask/gas/explorer(src)
|
||||
new /obj/item/weapon/tank/internals/emergency_oxygen/engi(src)
|
||||
new /obj/item/weapon/crowbar/red(src)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
|
||||
@@ -220,7 +127,6 @@
|
||||
/obj/item/weapon/storage/box/syringes
|
||||
name = "box of syringes"
|
||||
desc = "A box full of syringes."
|
||||
desc = "A biohazard alert warning is printed on the box"
|
||||
icon_state = "syringe"
|
||||
|
||||
/obj/item/weapon/storage/box/syringes/New()
|
||||
@@ -259,7 +165,7 @@
|
||||
|
||||
/obj/item/weapon/storage/box/injectors
|
||||
name = "box of DNA injectors"
|
||||
desc = "This box contains injectors it seems."
|
||||
desc = "This box contains injectors, it seems."
|
||||
|
||||
/obj/item/weapon/storage/box/injectors/New()
|
||||
..()
|
||||
@@ -290,7 +196,7 @@
|
||||
|
||||
/obj/item/weapon/storage/box/wall_flash
|
||||
name = "wall-mounted flash kit"
|
||||
desc = "This box contains everything neccesary to build a wall-mounted flash. <B>WARNING: Flashes can cause serious eye damage, protective eyewear is required.</B>"
|
||||
desc = "This box contains everything necessary to build a wall-mounted flash. <B>WARNING: Flashes can cause serious eye damage, protective eyewear is required.</B>"
|
||||
icon_state = "flashbang"
|
||||
|
||||
/obj/item/weapon/storage/box/wall_flash/New()
|
||||
@@ -436,18 +342,6 @@
|
||||
for(var/i = 1; i <= 5; i++)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/permits
|
||||
name = "box of construction permits"
|
||||
desc = "A box for containing construction permits, used to officially declare built rooms as additions to the station."
|
||||
icon_state = "id"
|
||||
|
||||
/obj/item/weapon/storage/box/permits/New() //There's only a few, so blueprints are still useful beyond setting every room's name to PRIMARY FART STORAGE
|
||||
..()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/areaeditor/permit(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/ids
|
||||
name = "box of spare IDs"
|
||||
desc = "Has so many empty IDs."
|
||||
@@ -595,7 +489,7 @@
|
||||
icon_state = "matchbox"
|
||||
item_state = "zippo"
|
||||
storage_slots = 10
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
slot_flags = SLOT_BELT
|
||||
can_hold = list(/obj/item/weapon/match)
|
||||
|
||||
@@ -657,7 +551,7 @@
|
||||
|
||||
/obj/item/weapon/storage/box/metalfoam
|
||||
name = "box of metal foam grenades"
|
||||
desc = "To be used to rapidly seal hull breaches"
|
||||
desc = "To be used to rapidly seal hull breaches."
|
||||
icon_state = "flashbang"
|
||||
|
||||
/obj/item/weapon/storage/box/metalfoam/New()
|
||||
@@ -672,7 +566,7 @@
|
||||
foldable = null
|
||||
|
||||
/obj/item/weapon/storage/box/hug/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] clamps the box of hugs on \his jugular! Guess it wasn't such a hugbox after all..</span>")
|
||||
user.visible_message("<span class='suicide'>[user] clamps the box of hugs on [user.p_their()] jugular! Guess it wasn't such a hugbox after all..</span>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/storage/box/hug/attack_self(mob/user)
|
||||
@@ -729,6 +623,18 @@
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/actionfigure
|
||||
name = "box of action figures"
|
||||
desc = "The latest set of collectable action figures."
|
||||
icon_state = "box"
|
||||
|
||||
/obj/item/weapon/storage/box/actionfigure/New()
|
||||
..()
|
||||
for(var/i in 1 to 4)
|
||||
var/randomFigure = pick(subtypesof(/obj/item/toy/figure))
|
||||
new randomFigure(src)
|
||||
|
||||
#define NODESIGN "None"
|
||||
#define NANOTRASEN "NanotrasenStandard"
|
||||
#define SYNDI "SyndiSnacks"
|
||||
@@ -740,7 +646,7 @@
|
||||
desc = "A sack neatly crafted out of paper."
|
||||
icon_state = "paperbag_None"
|
||||
item_state = "paperbag_None"
|
||||
burn_state = FLAMMABLE
|
||||
resistance_flags = FLAMMABLE
|
||||
foldable = null
|
||||
var/design = NODESIGN
|
||||
|
||||
@@ -809,38 +715,31 @@
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/wildcard/New()
|
||||
..()
|
||||
for(var/i in 1 to 6)
|
||||
//Pick common ingredients
|
||||
for(var/i in 1 to 7)
|
||||
var/randomFood = pick(/obj/item/weapon/reagent_containers/food/snacks/grown/chili,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/carrot,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/potato,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/apple,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/carrot,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/potato,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/potato/sweet,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/apple,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/cherries,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/cherries,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/banana,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/corn)
|
||||
new randomFood(src)
|
||||
//Pick one random rare ingredient
|
||||
var/randomRareFood = pick(/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/corn,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle)
|
||||
new randomRareFood(src)
|
||||
new randomFood(src)
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/fiesta
|
||||
item_state = "fiesta"
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/fiesta/New()
|
||||
..()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/tortilla(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/tortilla(src)
|
||||
for(var/i in 1 to 2)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/corn(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/chili(src)
|
||||
|
||||
@@ -851,32 +750,80 @@
|
||||
..()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/faggot(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/faggot(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/bottle/wine(src)
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/vegetarian
|
||||
item_state = "vegetarian"
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/vegetarian/New()
|
||||
..()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src)
|
||||
for(var/i in 1 to 2)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/potato(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/apple(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/corn(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src)
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/american
|
||||
item_state = "american"
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/american/New()
|
||||
..()
|
||||
for(var/i in 1 to 2)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/potato(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/corn(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/faggot(src)
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/fruity
|
||||
item_state = "fruity"
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/fruity/New()
|
||||
..()
|
||||
for(var/i in 1 to 2)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/apple(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lemon(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lime(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/watermelon(src)
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/sweets
|
||||
item_state = "sweets"
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/sweets/New()
|
||||
..()
|
||||
for(var/i in 1 to 2)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/cherries(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/apple(src)
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/delights
|
||||
item_state = "delights"
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/delights/New()
|
||||
..()
|
||||
for(var/i in 1 to 2)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/potato/sweet(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/bluecherries(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/vanillapod(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/berries(src)
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/grains
|
||||
item_state = "grains"
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/grains/New()
|
||||
..()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(src)
|
||||
new /obj/item/weapon/reagent_containers/food/condiment/sugar(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/cherries(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/icecream(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/oat(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/wheat(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod(src)
|
||||
new /obj/item/weapon/reagent_containers/honeycomb(src)
|
||||
new /obj/item/seeds/poppy(src)
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/carnivore
|
||||
item_state = "carnivore"
|
||||
@@ -885,22 +832,22 @@
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/spider(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/spidereggs(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/carpmeat(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/slime(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/faggot(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/faggot(src)
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/exotic
|
||||
item_state = "exotic"
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/exotic/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/food/condiment/soysauce(src)
|
||||
for(var/i in 1 to 2)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/soydope(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/carpmeat(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/grown/chili(src)
|
||||
|
||||
/obj/item/weapon/storage/box/ingredients/New()
|
||||
..()
|
||||
@@ -930,14 +877,3 @@
|
||||
new /obj/item/weapon/circuitboard/machine/destructive_analyzer(src)
|
||||
new /obj/item/weapon/circuitboard/machine/circuit_imprinter(src)
|
||||
new /obj/item/weapon/circuitboard/computer/rdconsole(src)
|
||||
|
||||
/obj/item/weapon/storage/box/medipens/utility1
|
||||
name = "survival value kit"
|
||||
desc = "A box with several survival medipens for the economical miner."
|
||||
icon_state = "syringe"
|
||||
|
||||
/obj/item/weapon/storage/box/medipens/utility1/New()
|
||||
..()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/medipen/survival(src)
|
||||
|
||||
|
||||
@@ -7,12 +7,13 @@
|
||||
hitsound = "swing_hit"
|
||||
throw_speed = 2
|
||||
throw_range = 4
|
||||
w_class = 4
|
||||
max_w_class = 3
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
max_combined_w_class = 21
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 20
|
||||
resistance_flags = FLAMMABLE
|
||||
obj_integrity = 150
|
||||
max_integrity = 150
|
||||
var/folder_path = /obj/item/weapon/folder //this is the path of the folder that gets spawned in New()
|
||||
|
||||
/obj/item/weapon/storage/briefcase/New()
|
||||
@@ -38,17 +39,18 @@
|
||||
hitsound = "swing_hit"
|
||||
throw_speed = 2
|
||||
throw_range = 4
|
||||
w_class = 4
|
||||
max_w_class = 3
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
max_combined_w_class = 21
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 20
|
||||
resistance_flags = FLAMMABLE
|
||||
obj_integrity = 150
|
||||
max_integrity = 150
|
||||
|
||||
/obj/item/weapon/storage/briefcase/sniperbundle/New()
|
||||
..()
|
||||
new /obj/item/weapon/gun/projectile/automatic/sniper_rifle/syndicate(src)
|
||||
new /obj/item/clothing/tie/red(src)
|
||||
new /obj/item/weapon/gun/ballistic/automatic/sniper_rifle/syndicate(src)
|
||||
new /obj/item/clothing/neck/tie/red(src)
|
||||
new /obj/item/clothing/under/syndicate/sniper(src)
|
||||
new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src)
|
||||
new /obj/item/ammo_box/magazine/sniper_rounds/haemorrhage(src)
|
||||
|
||||
@@ -17,9 +17,10 @@
|
||||
icon = 'icons/obj/food/containers.dmi'
|
||||
icon_state = "donutbox6"
|
||||
name = "donut box"
|
||||
burn_state = FLAMMABLE
|
||||
resistance_flags = FLAMMABLE
|
||||
var/icon_type = "donut"
|
||||
var/spawn_type = null
|
||||
var/fancy_open = FALSE
|
||||
|
||||
/obj/item/weapon/storage/fancy/New()
|
||||
..()
|
||||
@@ -27,16 +28,37 @@
|
||||
new spawn_type(src)
|
||||
|
||||
/obj/item/weapon/storage/fancy/update_icon(itemremoved = 0)
|
||||
var/total_contents = src.contents.len - itemremoved
|
||||
src.icon_state = "[src.icon_type]box[total_contents]"
|
||||
return
|
||||
if(fancy_open)
|
||||
var/total_contents = src.contents.len - itemremoved
|
||||
icon_state = "[icon_type]box[total_contents]"
|
||||
else
|
||||
icon_state = "[icon_type]box"
|
||||
|
||||
/obj/item/weapon/storage/fancy/examine(mob/user)
|
||||
..()
|
||||
if(contents.len == 1)
|
||||
user << "There is one [src.icon_type] left."
|
||||
else
|
||||
user << "There are [contents.len <= 0 ? "no" : "[src.contents.len]"] [src.icon_type]s left."
|
||||
if(fancy_open)
|
||||
if(contents.len == 1)
|
||||
user << "There is one [src.icon_type] left."
|
||||
else
|
||||
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
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/storage/fancy/content_can_dump(atom/dest_object, mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
fancy_open = TRUE
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/storage/fancy/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/user)
|
||||
fancy_open = TRUE
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/storage/fancy/remove_from_storage(obj/item/W, atom/new_location, burn = 0)
|
||||
fancy_open = TRUE
|
||||
return ..()
|
||||
|
||||
/*
|
||||
* Donut Box
|
||||
@@ -50,6 +72,7 @@
|
||||
storage_slots = 6
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut)
|
||||
spawn_type = /obj/item/weapon/reagent_containers/food/snacks/donut
|
||||
fancy_open = TRUE
|
||||
|
||||
/*
|
||||
* Egg Box
|
||||
@@ -79,6 +102,10 @@
|
||||
throwforce = 2
|
||||
slot_flags = SLOT_BELT
|
||||
spawn_type = /obj/item/candle
|
||||
fancy_open = TRUE
|
||||
|
||||
/obj/item/weapon/storage/fancy/candle_box/attack_self(mob_user)
|
||||
return
|
||||
|
||||
////////////
|
||||
//CIG PACK//
|
||||
@@ -89,7 +116,7 @@
|
||||
icon = 'icons/obj/cigarettes.dmi'
|
||||
icon_state = "cig"
|
||||
item_state = "cigpacket"
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throwforce = 0
|
||||
slot_flags = SLOT_BELT
|
||||
storage_slots = 6
|
||||
@@ -105,21 +132,39 @@
|
||||
cig.desc = "\An [name] brand [cig.name]."
|
||||
name = "\improper [name] packet"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/AltClick(mob/user)
|
||||
if(user.get_active_held_item())
|
||||
return
|
||||
for(var/obj/item/weapon/lighter/lighter in src)
|
||||
remove_from_storage(lighter, user.loc)
|
||||
user.put_in_active_hand(lighter)
|
||||
break
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/update_icon()
|
||||
cut_overlays()
|
||||
icon_state = initial(icon_state)
|
||||
if(!contents.len)
|
||||
icon_state += "_empty"
|
||||
if(fancy_open || !contents.len)
|
||||
cut_overlays()
|
||||
if(!contents.len)
|
||||
icon_state = "[initial(icon_state)]_empty"
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
add_overlay("[icon_state]_open")
|
||||
var/i = contents.len
|
||||
for(var/C in contents)
|
||||
if(istype(C, /obj/item/weapon/lighter/greyscale))
|
||||
add_overlay(image(icon = src.icon, icon_state = "lighter_in", pixel_x = 1 * (i -1)))
|
||||
else if(istype(C, /obj/item/weapon/lighter))
|
||||
add_overlay(image(icon = src.icon, icon_state = "zippo_in", pixel_x = 1 * (i -1)))
|
||||
else
|
||||
add_overlay(image(icon = src.icon, icon_state = "cigarette", pixel_x = 1 * (i -1)))
|
||||
i--
|
||||
else
|
||||
add_overlay("[icon_state]_open")
|
||||
for(var/c = contents.len, c >= 1, c--)
|
||||
add_overlay(image(icon = src.icon, icon_state = "cigarette", pixel_x = 1 * (c -1)))
|
||||
return
|
||||
cut_overlays()
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/remove_from_storage(obj/item/W, atom/new_location)
|
||||
if(istype(W,/obj/item/clothing/mask/cigarette))
|
||||
if(reagents)
|
||||
reagents.trans_to(W,(reagents.total_volume/contents.len))
|
||||
fancy_open = TRUE
|
||||
..()
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
@@ -202,7 +247,7 @@
|
||||
/obj/item/weapon/storage/fancy/rollingpapers
|
||||
name = "rolling paper pack"
|
||||
desc = "A pack of NanoTrasen brand rolling papers."
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
icon = 'icons/obj/cigarettes.dmi'
|
||||
icon_state = "cig_paper_pack"
|
||||
storage_slots = 10
|
||||
@@ -214,7 +259,6 @@
|
||||
cut_overlays()
|
||||
if(!contents.len)
|
||||
add_overlay("[icon_state]_empty")
|
||||
return
|
||||
|
||||
/////////////
|
||||
//CIGAR BOX//
|
||||
@@ -225,18 +269,21 @@
|
||||
desc = "A case of premium cigars. Very expensive."
|
||||
icon = 'icons/obj/cigarettes.dmi'
|
||||
icon_state = "cigarcase"
|
||||
w_class = 3
|
||||
storage_slots = 7
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
storage_slots = 5
|
||||
can_hold = list(/obj/item/clothing/mask/cigarette/cigar)
|
||||
icon_type = "premium cigar"
|
||||
spawn_type = /obj/item/clothing/mask/cigarette/cigar
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/cigars/update_icon()
|
||||
cut_overlays()
|
||||
add_overlay("[icon_state]_open")
|
||||
for(var/c = contents.len, c >= 1, c--)
|
||||
add_overlay(image(icon = src.icon, icon_state = icon_type, pixel_x = 4 * (c -1)))
|
||||
return
|
||||
if(fancy_open)
|
||||
cut_overlays()
|
||||
add_overlay("[icon_state]_open")
|
||||
for(var/c = contents.len, c >= 1, c--)
|
||||
add_overlay(image(icon = src.icon, icon_state = icon_type, pixel_x = 4 * (c -1)))
|
||||
else
|
||||
cut_overlays()
|
||||
icon_state = "cigarcase"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/cigars/cohiba
|
||||
name = "\improper cohiba robusto cigar case"
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
name = "combat medical kit"
|
||||
desc = "I hope you've got insurance."
|
||||
icon_state = "bezerk"
|
||||
max_w_class = 3
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/weapon/storage/firstaid/tactical/New()
|
||||
..()
|
||||
@@ -127,7 +127,7 @@
|
||||
icon_state = "pill_canister"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
item_state = "contsolid"
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice)
|
||||
allow_quick_gather = 1
|
||||
use_to_pickup = 1
|
||||
@@ -142,11 +142,7 @@
|
||||
var/obj/screen/inventory/hand/H = over_object
|
||||
if(!M.unEquip(src))
|
||||
return
|
||||
switch(H.slot_id)
|
||||
if(slot_r_hand)
|
||||
M.put_in_r_hand(src)
|
||||
if(slot_l_hand)
|
||||
M.put_in_l_hand(src)
|
||||
M.put_in_hand(src,H.held_index)
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
if(over_object == usr && in_range(src, usr) || usr.contents.Find(src))
|
||||
|
||||
@@ -1,42 +1,75 @@
|
||||
/obj/item/weapon/storage/internal
|
||||
storage_slots = 2
|
||||
max_w_class = 2
|
||||
max_combined_w_class = 4
|
||||
w_class = 4
|
||||
var/priority = 1
|
||||
max_w_class = WEIGHT_CLASS_SMALL
|
||||
max_combined_w_class = 50 // Limited by slots, not combined weight class
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
rustle_jimmies = FALSE
|
||||
|
||||
/*obj/item/weapon/storage/internal/pocket/New()
|
||||
/obj/item/weapon/storage/internal/ClickAccessible(mob/user, depth=1)
|
||||
if(loc)
|
||||
return loc.ClickAccessible(user, depth)
|
||||
|
||||
/obj/item/weapon/storage/internal/Adjacent(A)
|
||||
if(loc)
|
||||
return loc.Adjacent(A)
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket
|
||||
var/priority = TRUE
|
||||
// TRUE if opens when clicked, like a backpack.
|
||||
// FALSE if opens only when dragged on mob's icon (hidden pocket)
|
||||
var/quickdraw = FALSE
|
||||
// TRUE if you can quickdraw items from it with alt-click.
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket/New()
|
||||
..()
|
||||
if(loc) name = loc.name
|
||||
if(loc)
|
||||
name = loc.name
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/user)
|
||||
. = ..()
|
||||
if(. && silent && !prevent_warning)
|
||||
if(quickdraw)
|
||||
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]."
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket/big
|
||||
max_w_class = 3
|
||||
max_combined_w_class = 6
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket/small
|
||||
storage_slots = 1
|
||||
max_combined_w_class = 2
|
||||
priority = 0
|
||||
priority = FALSE
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket/tiny
|
||||
storage_slots = 1
|
||||
max_w_class = 1
|
||||
max_combined_w_class = 1
|
||||
priority = 0
|
||||
max_w_class = WEIGHT_CLASS_TINY
|
||||
priority = FALSE
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket/shoes
|
||||
can_hold = list(
|
||||
/obj/item/weapon/kitchen/knife, /obj/item/weapon/switchblade, /obj/item/weapon/pen,
|
||||
/obj/item/weapon/scalpel, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/dnainjector,
|
||||
/obj/item/weapon/reagent_containers/hypospray/medipen, /obj/item/weapon/reagent_containers/dropper,
|
||||
/obj/item/weapon/implanter, /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool/mini,
|
||||
/obj/item/device/firing_pin
|
||||
)
|
||||
//can hold both regular pens and energy daggers. made for your every-day tactical librarians/murderers.
|
||||
priority = FALSE
|
||||
quickdraw = TRUE
|
||||
silent = TRUE
|
||||
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket/shoes/clown
|
||||
can_hold = list(
|
||||
/obj/item/weapon/kitchen/knife, /obj/item/weapon/switchblade, /obj/item/weapon/pen,
|
||||
/obj/item/weapon/scalpel, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/dnainjector,
|
||||
/obj/item/weapon/reagent_containers/hypospray/medipen, /obj/item/weapon/reagent_containers/dropper,
|
||||
/obj/item/weapon/implanter, /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool/mini,
|
||||
/obj/item/device/firing_pin, /obj/item/weapon/bikehorn)
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket/small/detective
|
||||
priority = 1
|
||||
priority = TRUE // so the detectives would discover pockets in their hats
|
||||
|
||||
/obj/item/weapon/storage/internal/pocket/small/detective/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/flask/det(src)
|
||||
|
||||
|
||||
proc/isstorage(var/atom/A)
|
||||
if(istype(A, /obj/item/weapon/storage))
|
||||
return 1
|
||||
|
||||
if(istype(A, /obj/item/clothing))
|
||||
var/obj/item/clothing/C = A
|
||||
if(C.pockets) return 1*/
|
||||
@@ -1,12 +1,12 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
|
||||
|
||||
|
||||
/obj/item/weapon/storage/lockbox
|
||||
name = "lockbox"
|
||||
desc = "A locked box."
|
||||
icon_state = "lockbox+l"
|
||||
item_state = "syringe_kit"
|
||||
w_class = 4
|
||||
max_w_class = 3
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
max_combined_w_class = 14 //The sum of the w_classes of all the items in this storage item.
|
||||
storage_slots = 4
|
||||
req_access = list(access_armory)
|
||||
@@ -101,9 +101,9 @@
|
||||
desc = "A locked box used to store medals of honor."
|
||||
icon_state = "medalbox+l"
|
||||
item_state = "syringe_kit"
|
||||
w_class = 3
|
||||
max_w_class = 2
|
||||
storage_slots = 6
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
max_w_class = WEIGHT_CLASS_SMALL
|
||||
storage_slots = 10
|
||||
req_access = list(access_captain)
|
||||
icon_locked = "medalbox+l"
|
||||
icon_closed = "medalbox"
|
||||
@@ -116,3 +116,6 @@
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/clothing/tie/medal/conduct(src)
|
||||
new /obj/item/clothing/tie/medal/gold/captain(src)
|
||||
new /obj/item/clothing/tie/medal/silver/security(src)
|
||||
new /obj/item/clothing/tie/medal/nobel_science(src)
|
||||
new /obj/item/clothing/tie/medal/gold/heroism(src)
|
||||
|
||||
@@ -21,10 +21,9 @@
|
||||
var/l_set = 0
|
||||
var/l_setshort = 0
|
||||
var/l_hacking = 0
|
||||
var/emagged = 0
|
||||
var/open = 0
|
||||
w_class = 3
|
||||
max_w_class = 2
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
max_w_class = WEIGHT_CLASS_SMALL
|
||||
max_combined_w_class = 14
|
||||
|
||||
/obj/item/weapon/storage/secure/examine(mob/user)
|
||||
@@ -34,15 +33,15 @@
|
||||
/obj/item/weapon/storage/secure/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(locked)
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
if (do_after(user, 20/W.toolspeed, target = src))
|
||||
if (do_after(user, 20*W.toolspeed, target = src))
|
||||
src.open =! src.open
|
||||
user.show_message("<span class='notice'>You [open ? "open" : "close"] the service panel.</span>", 1)
|
||||
return
|
||||
if ((istype(W, /obj/item/device/multitool)) && (src.open == 1)&& (!src.l_hacking))
|
||||
user.show_message("<span class='danger'>Now attempting to reset internal memory, please hold.</span>", 1)
|
||||
src.l_hacking = 1
|
||||
if (do_after(usr, 100/W.toolspeed, target = src))
|
||||
if (prob(40))
|
||||
if (do_after(usr, 100*W.toolspeed, target = src))
|
||||
if (prob(33))
|
||||
src.l_setshort = 1
|
||||
src.l_set = 0
|
||||
user.show_message("<span class='danger'>Internal memory reset. Please give it a few seconds to reinitialize.</span>", 1)
|
||||
@@ -62,17 +61,6 @@
|
||||
// -> storage/attackby() what with handle insertion, etc
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/storage/secure/emag_act(mob/user)
|
||||
if(locked)
|
||||
if(!emagged)
|
||||
emagged = 1
|
||||
src.add_overlay(image('icons/obj/storage.dmi', icon_sparking))
|
||||
sleep(6)
|
||||
src.overlays = null
|
||||
add_overlay(image('icons/obj/storage.dmi', icon_locking))
|
||||
locked = 0
|
||||
user << "<span class='notice'>You short out the lock on [src].</span>"
|
||||
|
||||
/obj/item/weapon/storage/secure/MouseDrop(over_object, src_location, over_location)
|
||||
if (locked)
|
||||
src.add_fingerprint(usr)
|
||||
@@ -84,10 +72,8 @@
|
||||
user.set_machine(src)
|
||||
var/dat = text("<TT><B>[]</B><BR>\n\nLock Status: []",src, (src.locked ? "LOCKED" : "UNLOCKED"))
|
||||
var/message = "Code"
|
||||
if ((src.l_set == 0) && (!src.emagged) && (!src.l_setshort))
|
||||
if ((src.l_set == 0) && (!src.l_setshort))
|
||||
dat += text("<p>\n<b>5-DIGIT PASSCODE NOT SET.<br>ENTER NEW PASSCODE.</b>")
|
||||
if (src.emagged)
|
||||
dat += text("<p>\n<font color=red><b>LOCKING SYSTEM ERROR - 1701</b></font>")
|
||||
if (src.l_setshort)
|
||||
dat += text("<p>\n<font color=red><b>ALERT: MEMORY SYSTEM ERROR - 6040 201</b></font>")
|
||||
message = text("[]", src.code)
|
||||
@@ -105,7 +91,7 @@
|
||||
if ((src.l_set == 0) && (length(src.code) == 5) && (!src.l_setshort) && (src.code != "ERROR"))
|
||||
src.l_code = src.code
|
||||
src.l_set = 1
|
||||
else if ((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1))
|
||||
else if ((src.code == src.l_code) && (src.l_set == 1))
|
||||
src.locked = 0
|
||||
src.overlays = null
|
||||
add_overlay(image('icons/obj/storage.dmi', icon_opened))
|
||||
@@ -113,13 +99,13 @@
|
||||
else
|
||||
src.code = "ERROR"
|
||||
else
|
||||
if ((href_list["type"] == "R") && (src.emagged == 0) && (!src.l_setshort))
|
||||
if ((href_list["type"] == "R") && (!src.l_setshort))
|
||||
src.locked = 1
|
||||
src.overlays = null
|
||||
src.code = null
|
||||
src.close(usr)
|
||||
else
|
||||
src.code += text("[]", href_list["type"])
|
||||
src.code += text("[]", sanitize_text(href_list["type"]))
|
||||
if (length(src.code) > 5)
|
||||
src.code = "ERROR"
|
||||
src.add_fingerprint(usr)
|
||||
@@ -154,8 +140,8 @@
|
||||
hitsound = "swing_hit"
|
||||
throw_speed = 2
|
||||
throw_range = 4
|
||||
w_class = 4
|
||||
max_w_class = 3
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
max_combined_w_class = 21
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
|
||||
|
||||
@@ -167,19 +153,9 @@
|
||||
/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>"
|
||||
else if ((src.loc == user) && (!src.locked))
|
||||
playsound(src.loc, "rustle", 50, 1, -5)
|
||||
if (user.s_active)
|
||||
user.s_active.close(user) //Close and re-open
|
||||
src.show_to(user)
|
||||
add_fingerprint(user)
|
||||
else
|
||||
..()
|
||||
for(var/mob/M in range(1))
|
||||
if (M.s_active == src)
|
||||
src.close(M)
|
||||
src.orient2hud(user)
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
//Syndie variant of Secure Briefcase. Contains space cash, slightly more robust.
|
||||
/obj/item/weapon/storage/secure/briefcase/syndie
|
||||
@@ -203,7 +179,7 @@
|
||||
icon_locking = "safeb"
|
||||
icon_sparking = "safespark"
|
||||
force = 8
|
||||
w_class = 8
|
||||
w_class = WEIGHT_CLASS_GIGANTIC
|
||||
max_w_class = 8
|
||||
anchored = 1
|
||||
density = 0
|
||||
@@ -219,4 +195,4 @@
|
||||
|
||||
/obj/item/weapon/storage/secure/safe/HoS/New()
|
||||
..()
|
||||
//new /obj/item/weapon/storage/lockbox/clusterbang(src) This item is currently broken... and probably shouldnt exist to begin with (even though it's cool)
|
||||
//new /obj/item/weapon/storage/lockbox/clusterbang(src) This item is currently broken... and probably shouldnt exist to begin with (even though it's cool)
|
||||
|
||||
@@ -8,12 +8,12 @@
|
||||
/obj/item/weapon/storage
|
||||
name = "storage"
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
var/silent = 0 // No message on putting items in
|
||||
var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else)
|
||||
var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set)
|
||||
var/list/is_seeing = new/list() //List of mobs which are currently seeing the contents of this item's storage
|
||||
var/max_w_class = 2 //Max size of objects that this object can store (in effect only if can_hold isn't set)
|
||||
var/max_w_class = WEIGHT_CLASS_SMALL //Max size of objects that this object can store (in effect only if can_hold isn't set)
|
||||
var/max_combined_w_class = 14 //The sum of the w_classes of all the items in this storage item.
|
||||
var/storage_slots = 7 //The number of storage slots in this container.
|
||||
var/obj/screen/storage/boxes = null
|
||||
@@ -24,10 +24,11 @@
|
||||
var/allow_quick_gather //Set this variable to allow the object to have the 'toggle mode' verb, which quickly collects all items from a tile.
|
||||
var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile, 2 = pick all of a type
|
||||
var/preposition = "in" // You put things 'in' a bag, but trays need 'on'.
|
||||
var/rustle_jimmies = TRUE //Play the rustle sound on insertion
|
||||
|
||||
|
||||
/obj/item/weapon/storage/MouseDrop(atom/over_object)
|
||||
if(iscarbon(usr) || isdrone(usr)) //all the check for item manipulation are in other places, you can safely open any storages as anything and its not buggy, i checked
|
||||
if(ismob(usr)) //all the check for item manipulation are in other places, you can safely open any storages as anything and its not buggy, i checked
|
||||
var/mob/M = usr
|
||||
|
||||
if(!over_object)
|
||||
@@ -36,8 +37,9 @@
|
||||
if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
|
||||
return
|
||||
|
||||
if(over_object == M && Adjacent(M)) // this must come before the screen objects only block
|
||||
orient2hud(M) // dunno why it wasn't before
|
||||
// this must come before the screen objects only block, dunno why it wasn't before
|
||||
if(over_object == M && (src.ClickAccessible(M, depth=STORAGE_VIEW_DEPTH) || Adjacent(M)))
|
||||
orient2hud(M)
|
||||
if(M.s_active)
|
||||
M.s_active.close(M)
|
||||
show_to(M)
|
||||
@@ -57,14 +59,21 @@
|
||||
var/obj/screen/inventory/hand/H = over_object
|
||||
if(!M.unEquip(src))
|
||||
return
|
||||
switch(H.slot_id)
|
||||
if(slot_r_hand)
|
||||
M.put_in_r_hand(src)
|
||||
if(slot_l_hand)
|
||||
M.put_in_l_hand(src)
|
||||
M.put_in_hand(src,H.held_index)
|
||||
|
||||
add_fingerprint(usr)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/MouseDrop_T(atom/movable/O, mob/user)
|
||||
if(istype(O, /obj/item))
|
||||
var/obj/item/I = O
|
||||
if(iscarbon(user) || isdrone(user))
|
||||
var/mob/living/L = user
|
||||
if(!L.incapacitated() && I == L.get_active_held_item())
|
||||
if(can_be_inserted(I, 0))
|
||||
handle_item_insertion(I, 0 , L)
|
||||
|
||||
|
||||
//Check if this storage can dump the items
|
||||
/obj/item/weapon/storage/proc/content_can_dump(atom/dest_object, mob/user)
|
||||
if(Adjacent(user) && dest_object.Adjacent(user))
|
||||
@@ -80,7 +89,7 @@
|
||||
if(I.on_found(user))
|
||||
return
|
||||
if(can_be_inserted(I,0,user))
|
||||
src_object.remove_from_storage(I, src)
|
||||
handle_item_insertion(I, TRUE, user)
|
||||
orient2hud(user)
|
||||
src_object.orient2hud(user)
|
||||
if(user.s_active) //refresh the HUD to show the transfered contents
|
||||
@@ -113,7 +122,7 @@
|
||||
is_seeing |= user
|
||||
|
||||
|
||||
/obj/item/weapon/storage/throw_at(atom/target, range, speed, mob/thrower, spin)
|
||||
/obj/item/weapon/storage/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0)
|
||||
close_all()
|
||||
return ..()
|
||||
|
||||
@@ -158,6 +167,7 @@
|
||||
for(var/obj/O in contents)
|
||||
O.screen_loc = "[cx],[cy]"
|
||||
O.layer = ABOVE_HUD_LAYER
|
||||
O.plane = ABOVE_HUD_PLANE
|
||||
cx++
|
||||
if(cx > mx)
|
||||
cx = tx
|
||||
@@ -177,6 +187,7 @@
|
||||
ND.sample_object.screen_loc = "[cx]:16,[cy]:16"
|
||||
ND.sample_object.maptext = "<font color='white'>[(ND.number > 1)? "[ND.number]" : ""]</font>"
|
||||
ND.sample_object.layer = ABOVE_HUD_LAYER
|
||||
ND.sample_object.plane = ABOVE_HUD_PLANE
|
||||
cx++
|
||||
if(cx > (4+cols))
|
||||
cx = 4
|
||||
@@ -187,6 +198,7 @@
|
||||
O.screen_loc = "[cx]:16,[cy]:16"
|
||||
O.maptext = ""
|
||||
O.layer = ABOVE_HUD_LAYER
|
||||
O.plane = ABOVE_HUD_PLANE
|
||||
cx++
|
||||
if(cx > (4+cols))
|
||||
cx = 4
|
||||
@@ -205,7 +217,7 @@
|
||||
number = 1
|
||||
|
||||
|
||||
//This proc determins the size of the inventory to be displayed. Please touch it only if you know what you're doing.
|
||||
//This proc determines the size of the inventory to be displayed. Please touch it only if you know what you're doing.
|
||||
/obj/item/weapon/storage/proc/orient2hud(mob/user)
|
||||
var/adjusted_contents = contents.len
|
||||
|
||||
@@ -308,8 +320,15 @@
|
||||
if(usr)
|
||||
if(usr.client && usr.s_active != src)
|
||||
usr.client.screen -= W
|
||||
if(usr.observers && usr.observers.len)
|
||||
for(var/M in usr.observers)
|
||||
var/mob/dead/observe = M
|
||||
if(observe.client && observe.s_active != src)
|
||||
observe.client.screen -= W
|
||||
|
||||
add_fingerprint(usr)
|
||||
if(rustle_jimmies)
|
||||
playsound(src.loc, "rustle", 50, 1, -5)
|
||||
|
||||
if(!prevent_warning)
|
||||
for(var/mob/M in viewers(usr, null))
|
||||
@@ -329,7 +348,7 @@
|
||||
|
||||
|
||||
//Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target
|
||||
/obj/item/weapon/storage/proc/remove_from_storage(obj/item/W, atom/new_location, burn = 0)
|
||||
/obj/item/weapon/storage/proc/remove_from_storage(obj/item/W, atom/new_location)
|
||||
if(!istype(W))
|
||||
return 0
|
||||
|
||||
@@ -345,37 +364,43 @@
|
||||
var/mob/M = loc
|
||||
W.dropped(M)
|
||||
W.layer = initial(W.layer)
|
||||
W.plane = initial(W.plane)
|
||||
W.loc = new_location
|
||||
|
||||
if(usr)
|
||||
orient2hud(usr)
|
||||
if(usr.s_active)
|
||||
usr.s_active.show_to(usr)
|
||||
for(var/mob/M in can_see_contents())
|
||||
orient2hud(M)
|
||||
show_to(M)
|
||||
|
||||
if(W.maptext)
|
||||
W.maptext = ""
|
||||
W.on_exit_storage(src)
|
||||
update_icon()
|
||||
W.mouse_opacity = initial(W.mouse_opacity)
|
||||
if(burn)
|
||||
W.fire_act()
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/weapon/storage/empty_object_contents(burn, src.loc)
|
||||
for(var/obj/item/Item in contents)
|
||||
remove_from_storage(Item, src.loc, burn)
|
||||
/obj/item/weapon/storage/deconstruct(disassembled = TRUE)
|
||||
var/drop_loc = loc
|
||||
if(ismob(loc))
|
||||
drop_loc = get_turf(src)
|
||||
for(var/obj/item/I in contents)
|
||||
remove_from_storage(I, drop_loc)
|
||||
qdel(src)
|
||||
|
||||
//This proc is called when you want to place an item into the storage item.
|
||||
/obj/item/weapon/storage/attackby(obj/item/W, mob/user, params)
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/hand_labeler))
|
||||
var/obj/item/weapon/hand_labeler/labeler = W
|
||||
if(labeler.mode)
|
||||
return 0
|
||||
. = 1 //no afterattack
|
||||
if(isrobot(user))
|
||||
if(iscyborg(user))
|
||||
return //Robots can't interact with storage items.
|
||||
|
||||
if(!can_be_inserted(W, 0 , user))
|
||||
return
|
||||
if(!istype(W, /obj/item/device/boobytrap))
|
||||
handle_item_insertion(W, 0 , user)
|
||||
|
||||
handle_item_insertion(W, 0 , user)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/attack_hand(mob/user)
|
||||
@@ -388,11 +413,11 @@
|
||||
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.l_store == src && !H.get_active_hand()) //Prevents opening if it's in a pocket.
|
||||
if(H.l_store == src && !H.get_active_held_item()) //Prevents opening if it's in a pocket.
|
||||
H.put_in_hands(src)
|
||||
H.l_store = null
|
||||
return
|
||||
if(H.r_store == src && !H.get_active_hand())
|
||||
if(H.r_store == src && !H.get_active_held_item())
|
||||
H.put_in_hands(src)
|
||||
H.r_store = null
|
||||
return
|
||||
@@ -465,10 +490,12 @@
|
||||
boxes.icon_state = "block"
|
||||
boxes.screen_loc = "7,7 to 10,8"
|
||||
boxes.layer = HUD_LAYER
|
||||
boxes.plane = HUD_PLANE
|
||||
closer = new /obj/screen/close()
|
||||
closer.master = src
|
||||
closer.icon_state = "backpack_close"
|
||||
closer.layer = ABOVE_HUD_LAYER
|
||||
closer.plane = ABOVE_HUD_PLANE
|
||||
orient2hud()
|
||||
|
||||
|
||||
@@ -483,7 +510,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/storage/emp_act(severity)
|
||||
if(!istype(loc, /mob/living))
|
||||
if(!isliving(loc))
|
||||
for(var/obj/O in contents)
|
||||
O.emp_act(severity)
|
||||
..()
|
||||
@@ -491,7 +518,7 @@
|
||||
|
||||
/obj/item/weapon/storage/attack_self(mob/user)
|
||||
//Clicking on itself will empty it, if it has the verb to do that.
|
||||
if(user.get_active_hand() == src)
|
||||
if(user.get_active_held_item() == src)
|
||||
if(verbs.Find(/obj/item/weapon/storage/verb/quick_empty))
|
||||
quick_empty()
|
||||
|
||||
@@ -499,3 +526,8 @@
|
||||
if(A in contents)
|
||||
usr = null
|
||||
remove_from_storage(A, loc)
|
||||
|
||||
/obj/item/weapon/storage/contents_explosion(severity, target)
|
||||
for(var/atom/A in contents)
|
||||
A.ex_act(severity, target)
|
||||
CHECK_TICK
|
||||
|
||||
@@ -4,18 +4,18 @@
|
||||
icon_state = "red"
|
||||
item_state = "toolbox_red"
|
||||
flags = CONDUCT
|
||||
force = 10
|
||||
throwforce = 10
|
||||
force = 12
|
||||
throwforce = 12
|
||||
throw_speed = 2
|
||||
throw_range = 7
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
materials = list(MAT_METAL = 500)
|
||||
origin_tech = "combat=1;engineering=1"
|
||||
attack_verb = list("robusted")
|
||||
hitsound = 'sound/weapons/smash.ogg'
|
||||
|
||||
/obj/item/weapon/storage/toolbox/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] robusts \himself with [src]! It looks like \he's trying to commit suicide..</span>")
|
||||
user.visible_message("<span class='suicide'>[user] robusts [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/storage/toolbox/emergency
|
||||
@@ -55,17 +55,17 @@
|
||||
|
||||
/obj/item/weapon/storage/toolbox/electrical/New()
|
||||
..()
|
||||
var/color = pick("red","yellow","green","blue","pink","orange","cyan","white")
|
||||
var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white")
|
||||
new /obj/item/weapon/screwdriver(src)
|
||||
new /obj/item/weapon/wirecutters(src)
|
||||
new /obj/item/device/t_scanner(src)
|
||||
new /obj/item/weapon/crowbar(src)
|
||||
new /obj/item/stack/cable_coil(src,30,color)
|
||||
new /obj/item/stack/cable_coil(src,30,color)
|
||||
new /obj/item/stack/cable_coil(src,30,pickedcolor)
|
||||
new /obj/item/stack/cable_coil(src,30,pickedcolor)
|
||||
if(prob(5))
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
else
|
||||
new /obj/item/stack/cable_coil(src,30,color)
|
||||
new /obj/item/stack/cable_coil(src,30,pickedcolor)
|
||||
|
||||
/obj/item/weapon/storage/toolbox/syndicate
|
||||
name = "suspicious looking toolbox"
|
||||
@@ -93,12 +93,12 @@
|
||||
|
||||
/obj/item/weapon/storage/toolbox/drone/New()
|
||||
..()
|
||||
var/color = pick("red","yellow","green","blue","pink","orange","cyan","white")
|
||||
var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white")
|
||||
new /obj/item/weapon/screwdriver(src)
|
||||
new /obj/item/weapon/wrench(src)
|
||||
new /obj/item/weapon/weldingtool(src)
|
||||
new /obj/item/weapon/crowbar(src)
|
||||
new /obj/item/stack/cable_coil(src,30,color)
|
||||
new /obj/item/stack/cable_coil(src,30,pickedcolor)
|
||||
new /obj/item/weapon/wirecutters(src)
|
||||
new /obj/item/device/multitool(src)
|
||||
|
||||
@@ -106,8 +106,8 @@
|
||||
name = "brass box"
|
||||
desc = "A huge brass box with several indentations in its surface."
|
||||
icon_state = "brassbox"
|
||||
w_class = 5
|
||||
max_w_class = 3
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
max_combined_w_class = 28
|
||||
storage_slots = 28
|
||||
slowdown = 1
|
||||
|
||||
@@ -1,21 +1,24 @@
|
||||
/obj/item/weapon/storage/box/syndicate/
|
||||
/obj/item/weapon/storage/box/syndicate
|
||||
|
||||
/obj/item/weapon/storage/box/syndicate/New()
|
||||
..()
|
||||
switch (pickweight(list("bloodyspai" = 3, "stealth" = 3, "bond" = 1, "screwed" = 3, "sabotage" = 3, "guns" = 1, "murder" = 2, "implant" = 2, "hacker" = 2, "lordsingulo" = 2, "darklord" = 1)))
|
||||
if("bloodyspai")
|
||||
new /obj/item/clothing/under/chameleon(src)
|
||||
new /obj/item/clothing/mask/chameleon(src)
|
||||
new /obj/item/weapon/card/id/syndicate(src)
|
||||
new /obj/item/clothing/shoes/chameleon(src)
|
||||
new /obj/item/device/camera_bug(src)
|
||||
new /obj/item/device/multitool/ai_detect(src)
|
||||
new /obj/item/device/encryptionkey/syndicate(src)
|
||||
new /obj/item/weapon/reagent_containers/syringe/mulligan(src)
|
||||
new /obj/item/weapon/switchblade(src)
|
||||
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)))
|
||||
if("bloodyspai") // 27 tc now this is more right
|
||||
new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set
|
||||
new /obj/item/clothing/mask/chameleon(src) // Goes with above
|
||||
new /obj/item/weapon/card/id/syndicate(src) // 2 tc
|
||||
new /obj/item/clothing/shoes/chameleon(src) // 2 tc
|
||||
new /obj/item/device/camera_bug(src) // 1 tc
|
||||
new /obj/item/device/multitool/ai_detect(src) // 1 tc
|
||||
new /obj/item/device/encryptionkey/syndicate(src) // 2 tc
|
||||
new /obj/item/weapon/reagent_containers/syringe/mulligan(src) // 4 tc
|
||||
new /obj/item/weapon/switchblade(src) //I'll count this as 2 tc
|
||||
new /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate (src) // 2 tc this shit heals
|
||||
new /obj/item/device/flashlight/emp(src) // 2 tc
|
||||
new /obj/item/device/chameleon(src) // 7 tc
|
||||
return
|
||||
|
||||
if("stealth")
|
||||
if("stealth") // 31 tc
|
||||
new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow(src)
|
||||
new /obj/item/weapon/pen/sleepy(src)
|
||||
new /obj/item/device/healthanalyzer/rad_laser(src)
|
||||
@@ -24,8 +27,8 @@
|
||||
new /obj/item/clothing/glasses/thermal/syndi(src)
|
||||
return
|
||||
|
||||
if("bond")
|
||||
new /obj/item/weapon/gun/projectile/automatic/pistol(src)
|
||||
if("bond") // 29 tc
|
||||
new /obj/item/weapon/gun/ballistic/automatic/pistol(src)
|
||||
new /obj/item/weapon/suppressor(src)
|
||||
new /obj/item/ammo_box/magazine/m10mm(src)
|
||||
new /obj/item/ammo_box/magazine/m10mm(src)
|
||||
@@ -35,7 +38,7 @@
|
||||
|
||||
return
|
||||
|
||||
if("screwed")
|
||||
if("screwed") // 29 tc
|
||||
new /obj/item/device/sbeacondrop/bomb(src)
|
||||
new /obj/item/weapon/grenade/syndieminibomb(src)
|
||||
new /obj/item/device/sbeacondrop/powersink(src)
|
||||
@@ -44,8 +47,9 @@
|
||||
new /obj/item/device/encryptionkey/syndicate(src)
|
||||
return
|
||||
|
||||
if("guns")
|
||||
new /obj/item/weapon/gun/projectile/revolver(src)
|
||||
if("guns") // 28 tc now
|
||||
new /obj/item/weapon/gun/ballistic/revolver(src)
|
||||
new /obj/item/ammo_box/a357(src)
|
||||
new /obj/item/ammo_box/a357(src)
|
||||
new /obj/item/weapon/card/emag(src)
|
||||
new /obj/item/weapon/grenade/plastic/c4(src)
|
||||
@@ -54,14 +58,16 @@
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
||||
return
|
||||
|
||||
if("murder")
|
||||
if("murder") // 28 tc now
|
||||
new /obj/item/weapon/melee/energy/sword/saber(src)
|
||||
new /obj/item/clothing/glasses/thermal/syndi(src)
|
||||
new /obj/item/weapon/card/emag(src)
|
||||
new /obj/item/clothing/shoes/chameleon(src)
|
||||
new /obj/item/device/encryptionkey/syndicate(src)
|
||||
new /obj/item/weapon/grenade/syndieminibomb(src)
|
||||
return
|
||||
|
||||
if("implant")
|
||||
if("implant") // 55+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it?
|
||||
new /obj/item/weapon/implanter/freedom(src)
|
||||
new /obj/item/weapon/implanter/uplink(src)
|
||||
new /obj/item/weapon/implanter/emp(src)
|
||||
@@ -70,7 +76,7 @@
|
||||
new /obj/item/weapon/implanter/storage(src)
|
||||
return
|
||||
|
||||
if("hacker")
|
||||
if("hacker") // 26 tc
|
||||
new /obj/item/weapon/aiModule/syndicate(src)
|
||||
new /obj/item/weapon/card/emag(src)
|
||||
new /obj/item/device/encryptionkey/binary(src)
|
||||
@@ -78,14 +84,14 @@
|
||||
new /obj/item/device/multitool/ai_detect(src)
|
||||
return
|
||||
|
||||
if("lordsingulo")
|
||||
if("lordsingulo") // 24 tc
|
||||
new /obj/item/device/sbeacondrop(src)
|
||||
new /obj/item/clothing/suit/space/syndicate/black/red(src)
|
||||
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
|
||||
new /obj/item/weapon/card/emag(src)
|
||||
return
|
||||
|
||||
if("sabotage")
|
||||
if("sabotage") // 26 tc now
|
||||
new /obj/item/weapon/grenade/plastic/c4 (src)
|
||||
new /obj/item/weapon/grenade/plastic/c4 (src)
|
||||
new /obj/item/device/doorCharge(src)
|
||||
@@ -93,15 +99,52 @@
|
||||
new /obj/item/device/camera_bug(src)
|
||||
new /obj/item/device/sbeacondrop/powersink(src)
|
||||
new /obj/item/weapon/cartridge/syndicate(src)
|
||||
new /obj/item/weapon/storage/toolbox/syndicate(src) //To actually get to those places
|
||||
new /obj/item/pizzabox/bomb
|
||||
|
||||
if("darklord")
|
||||
if("darklord") //20 tc + tk + summon item close enough for now
|
||||
new /obj/item/weapon/melee/energy/sword/saber(src)
|
||||
new /obj/item/weapon/melee/energy/sword/saber(src)
|
||||
new /obj/item/weapon/dnainjector/telemut/darkbundle(src)
|
||||
new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
|
||||
new /obj/item/weapon/card/id/syndicate(src)
|
||||
new /obj/item/clothing/shoes/chameleon(src) //because slipping while being a dark lord sucks
|
||||
new /obj/item/weapon/spellbook/oneuse/summonitem(src)
|
||||
return
|
||||
|
||||
if("sniper") //This shit is unique so can't really balance it around tc, also no silencer because getting killed without ANY indicator on what killed you sucks
|
||||
new /obj/item/weapon/gun/ballistic/automatic/sniper_rifle(src) // 12 tc
|
||||
new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src)
|
||||
new /obj/item/clothing/glasses/thermal/syndi(src)
|
||||
new /obj/item/clothing/gloves/color/latex/nitrile(src)
|
||||
new /obj/item/clothing/mask/gas/clown_hat(src)
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
||||
return
|
||||
|
||||
if("metaops") // 30 tc
|
||||
new /obj/item/clothing/suit/space/hardsuit/syndi(src) // 8 tc
|
||||
new /obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog/unrestricted(src) // 8 tc
|
||||
new /obj/item/weapon/implanter/explosive(src) // 2 tc
|
||||
new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc
|
||||
new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc
|
||||
new /obj/item/weapon/grenade/plastic/c4 (src) // 1 tc
|
||||
new /obj/item/weapon/grenade/plastic/c4 (src) // 1 tc
|
||||
new /obj/item/weapon/card/emag(src) // 6 tc
|
||||
return
|
||||
|
||||
if("ninja") // 33 tc worth
|
||||
new /obj/item/weapon/katana(src) // Unique , hard to tell how much tc this is worth. 8 tc?
|
||||
new /obj/item/weapon/implanter/adrenalin(src) // 8 tc
|
||||
new /obj/item/weapon/throwing_star(src) // ~5 tc for all 6
|
||||
new /obj/item/weapon/throwing_star(src)
|
||||
new /obj/item/weapon/throwing_star(src)
|
||||
new /obj/item/weapon/throwing_star(src)
|
||||
new /obj/item/weapon/throwing_star(src)
|
||||
new /obj/item/weapon/throwing_star(src)
|
||||
new /obj/item/weapon/storage/belt/military/assault(src) // 3 tc
|
||||
new /obj/item/weapon/card/id/syndicate(src) // 2 tc
|
||||
new /obj/item/device/chameleon(src) // 7 tc
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit
|
||||
name = "box"
|
||||
desc = "A sleek, sturdy box."
|
||||
@@ -119,7 +162,6 @@
|
||||
|
||||
/*/obj/item/weapon/storage/box/syndie_kit/imp_compress
|
||||
name = "Compressed Matter Implant (with injector)"
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_compress/New()
|
||||
new /obj/item/weapon/implanter/compressed(src)
|
||||
..()
|
||||
@@ -186,7 +228,7 @@
|
||||
/obj/item/weapon/storage/box/syndie_kit/space
|
||||
name = "boxed space suit and helmet"
|
||||
can_hold = list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate)
|
||||
max_w_class = 3
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/space/New()
|
||||
..()
|
||||
@@ -283,8 +325,3 @@
|
||||
for(var/i in 1 to 3)
|
||||
new/obj/item/cardboard_cutout/adaptive(src)
|
||||
new/obj/item/toy/crayon/rainbow(src)
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/thermite/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/spray/thermite(src)
|
||||
new /obj/item/weapon/lighter(src)
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
desc = "It can hold a few small and personal things."
|
||||
storage_slots = 4
|
||||
icon_state = "wallet"
|
||||
w_class = 2
|
||||
burn_state = FLAMMABLE
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
resistance_flags = FLAMMABLE
|
||||
can_hold = list(
|
||||
/obj/item/stack/spacecash,
|
||||
/obj/item/weapon/card,
|
||||
|
||||
@@ -6,16 +6,19 @@
|
||||
slot_flags = SLOT_BELT
|
||||
force = 10
|
||||
throwforce = 7
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
origin_tech = "combat=2"
|
||||
attack_verb = list("beaten")
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 50, bio = 0, rad = 0, fire = 80, acid = 80)
|
||||
|
||||
var/stunforce = 7
|
||||
var/status = 0
|
||||
var/obj/item/weapon/stock_parts/cell/high/bcell = null
|
||||
var/hitcost = 1000
|
||||
var/throw_hit_chance = 35
|
||||
|
||||
/obj/item/weapon/melee/baton/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is putting the live [name] in [user.p_their()] mouth! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (FIRELOSS)
|
||||
|
||||
/obj/item/weapon/melee/baton/New()
|
||||
@@ -23,6 +26,12 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/melee/baton/throw_impact(atom/hit_atom)
|
||||
..()
|
||||
//Only mob/living types have stun handling
|
||||
if(status && prob(throw_hit_chance) && isliving(hit_atom))
|
||||
baton_stun(hit_atom)
|
||||
|
||||
/obj/item/weapon/melee/baton/loaded/New() //this one starts with a cell pre-installed.
|
||||
..()
|
||||
bcell = new(src)
|
||||
@@ -30,14 +39,14 @@
|
||||
|
||||
/obj/item/weapon/melee/baton/proc/deductcharge(chrgdeductamt)
|
||||
if(bcell)
|
||||
//Note this value returned is significant, as it will determine
|
||||
//if a stun is applied or not
|
||||
. = bcell.use(chrgdeductamt)
|
||||
if(bcell.charge >= hitcost) // If after the deduction the baton doesn't have enough charge for a stun hit it turns off.
|
||||
return
|
||||
if(status)
|
||||
status = 0
|
||||
update_icon()
|
||||
playsound(loc, "sparks", 75, 1, -1)
|
||||
return 0
|
||||
if(status && bcell.charge < hitcost)
|
||||
//we're below minimum, turn off
|
||||
status = 0
|
||||
update_icon()
|
||||
playsound(loc, "sparks", 75, 1, -1)
|
||||
|
||||
|
||||
/obj/item/weapon/melee/baton/update_icon()
|
||||
@@ -104,25 +113,27 @@
|
||||
deductcharge(hitcost)
|
||||
return
|
||||
|
||||
if(isrobot(M))
|
||||
if(iscyborg(M))
|
||||
..()
|
||||
return
|
||||
if(!isliving(M))
|
||||
return
|
||||
|
||||
var/mob/living/L = M
|
||||
|
||||
if(user.a_intent != "harm")
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/L = M
|
||||
if(check_martial_counter(L, user))
|
||||
return
|
||||
|
||||
if(user.a_intent != INTENT_HARM)
|
||||
if(status)
|
||||
if(baton_stun(L, user))
|
||||
user.do_attack_animation(L)
|
||||
if(baton_stun(M, user))
|
||||
user.do_attack_animation(M)
|
||||
return
|
||||
else
|
||||
L.visible_message("<span class='warning'>[user] has prodded [L] with [src]. Luckily it was off.</span>", \
|
||||
M.visible_message("<span class='warning'>[user] has prodded [M] with [src]. Luckily it was off.</span>", \
|
||||
"<span class='warning'>[user] has prodded you with [src]. Luckily it was off</span>")
|
||||
else
|
||||
if(status)
|
||||
baton_stun(L, user)
|
||||
baton_stun(M, user)
|
||||
..()
|
||||
|
||||
|
||||
@@ -132,7 +143,7 @@
|
||||
if(H.check_shields(0, "[user]'s [name]", src, MELEE_ATTACK)) //No message; check_shields() handles that
|
||||
playsound(L, 'sound/weapons/Genhit.ogg', 50, 1)
|
||||
return 0
|
||||
if(isrobot(loc))
|
||||
if(iscyborg(loc))
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
if(!R || !R.cell || !R.cell.use(hitcost))
|
||||
return 0
|
||||
@@ -140,22 +151,23 @@
|
||||
if(!deductcharge(hitcost))
|
||||
return 0
|
||||
|
||||
user.lastattacked = L
|
||||
L.lastattacker = user
|
||||
|
||||
L.Stun(stunforce)
|
||||
L.Weaken(stunforce)
|
||||
L.apply_effect(STUTTER, stunforce)
|
||||
if(user)
|
||||
user.lastattacked = L
|
||||
L.lastattacker = user
|
||||
L.visible_message("<span class='danger'>[user] has stunned [L] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] has stunned you with [src]!</span>")
|
||||
add_logs(user, L, "stunned")
|
||||
|
||||
L.visible_message("<span class='danger'>[user] has stunned [L] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] has stunned you with [src]!</span>")
|
||||
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
H.forcesay(hit_appends)
|
||||
|
||||
add_logs(user, L, "stunned")
|
||||
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/melee/baton/emp_act(severity)
|
||||
@@ -168,11 +180,13 @@
|
||||
desc = "An improvised stun baton."
|
||||
icon_state = "stunprod_nocell"
|
||||
item_state = "prod"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
force = 3
|
||||
throwforce = 5
|
||||
stunforce = 5
|
||||
hitcost = 2500
|
||||
slot_flags = null
|
||||
hitcost = 2000
|
||||
throw_hit_chance = 10
|
||||
slot_flags = SLOT_BACK
|
||||
var/obj/item/device/assembly/igniter/sparkler = 0
|
||||
|
||||
/obj/item/weapon/melee/baton/cattleprod/New()
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution."
|
||||
icon_state = "jetpack"
|
||||
item_state = "jetpack"
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
distribute_pressure = ONE_ATMOSPHERE * O2STANDARD
|
||||
actions_types = list(/datum/action/item_action/set_internals, /datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization)
|
||||
var/gas_type = "o2"
|
||||
@@ -13,16 +13,17 @@
|
||||
|
||||
/obj/item/weapon/tank/jetpack/New()
|
||||
..()
|
||||
air_contents.assert_gas(gas_type)
|
||||
air_contents.gases[gas_type][MOLES] = (6 * ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C)
|
||||
if(gas_type)
|
||||
air_contents.assert_gas(gas_type)
|
||||
air_contents.gases[gas_type][MOLES] = (6 * ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C)
|
||||
|
||||
ion_trail = new
|
||||
ion_trail.set_up(src)
|
||||
|
||||
/obj/item/weapon/tank/jetpack/ui_action_click(mob/user, actiontype)
|
||||
if(actiontype == /datum/action/item_action/toggle_jetpack)
|
||||
/obj/item/weapon/tank/jetpack/ui_action_click(mob/user, action)
|
||||
if(istype(action, /datum/action/item_action/toggle_jetpack))
|
||||
cycle(user)
|
||||
else if(actiontype == /datum/action/item_action/jetpack_stabilization)
|
||||
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>"
|
||||
@@ -73,6 +74,15 @@
|
||||
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/tank/jetpack/suicide_act(mob/user)
|
||||
if (istype(user,/mob/living/carbon/human/))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.forcesay("WHAT THE FUCK IS CARBON DIOXIDE?")
|
||||
H.visible_message("<span class='suicide'>[user] is suffocating [user.p_them()]self with [src]! It looks like [user.p_they()] didn't read what that jetpack says!</span>")
|
||||
return (OXYLOSS)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/tank/jetpack/void
|
||||
name = "void jetpack (oxygen)"
|
||||
desc = "It works well in a void."
|
||||
@@ -92,15 +102,16 @@
|
||||
item_state = "jetpack-mini"
|
||||
volume = 40
|
||||
throw_range = 7
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/weapon/tank/jetpack/oxygen/captain
|
||||
name = "\improper Captain's jetpack"
|
||||
desc = "A compact, lightweight jetpack containing a high amount of compressed oxygen."
|
||||
icon_state = "jetpack-captain"
|
||||
item_state = "jetpack-captain"
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
volume = 90
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //steal objective items are hard to destroy.
|
||||
|
||||
/obj/item/weapon/tank/jetpack/carbondioxide
|
||||
name = "jetpack (carbon dioxide)"
|
||||
@@ -110,20 +121,34 @@
|
||||
distribute_pressure = 0
|
||||
gas_type = "co2"
|
||||
|
||||
|
||||
/obj/item/weapon/tank/jetpack/suit
|
||||
name = "suit inbuilt jetpack"
|
||||
desc = "A device that will use your internals tank as a gas source for propulsion."
|
||||
icon_state = "jetpack-void"
|
||||
item_state = "jetpack-void"
|
||||
name = "hardsuit jetpack upgrade"
|
||||
desc = "A modular, compact set of thrusters designed to integrate with a hardsuit. It is fueled by a tank inserted into the suit's storage compartment."
|
||||
origin_tech = "materials=4;magnets=4;engineering=5"
|
||||
icon_state = "jetpack-upgrade"
|
||||
item_state = "jetpack-black"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
actions_types = list(/datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization)
|
||||
volume = 1
|
||||
slot_flags = null
|
||||
gas_type = null
|
||||
var/datum/gas_mixture/temp_air_contents
|
||||
var/obj/item/weapon/tank/internals/tank = null
|
||||
|
||||
/obj/item/weapon/tank/jetpack/suit/New()
|
||||
..()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
air_contents = null
|
||||
temp_air_contents = air_contents
|
||||
|
||||
/obj/item/weapon/tank/jetpack/suit/attack_self()
|
||||
return
|
||||
|
||||
/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>"
|
||||
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>"
|
||||
@@ -131,7 +156,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/tank/jetpack/suit/turn_on()
|
||||
if(!ishuman(loc.loc))
|
||||
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc))
|
||||
return
|
||||
var/mob/living/carbon/human/H = loc.loc
|
||||
tank = H.s_store
|
||||
@@ -141,12 +166,12 @@
|
||||
|
||||
/obj/item/weapon/tank/jetpack/suit/turn_off()
|
||||
tank = null
|
||||
air_contents = null
|
||||
air_contents = temp_air_contents
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/tank/jetpack/suit/process()
|
||||
if(!ishuman(loc.loc))
|
||||
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc))
|
||||
turn_off()
|
||||
return
|
||||
var/mob/living/carbon/human/H = loc.loc
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
icon_state = "emergency"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
force = 4
|
||||
distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE
|
||||
volume = 3 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
throw_speed = 1
|
||||
throw_range = 4
|
||||
actions_types = list(/datum/action/item_action/set_internals)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0, fire = 80, acid = 30)
|
||||
var/datum/gas_mixture/air_contents = null
|
||||
var/distribute_pressure = ONE_ATMOSPHERE
|
||||
var/integrity = 3
|
||||
@@ -60,7 +61,7 @@
|
||||
qdel(air_contents)
|
||||
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/tank/examine(mob/user)
|
||||
var/obj/icon = src
|
||||
@@ -91,20 +92,29 @@
|
||||
|
||||
user << "<span class='notice'>It feels [descriptive].</span>"
|
||||
|
||||
/obj/item/weapon/tank/blob_act(obj/effect/blob/B)
|
||||
if(prob(50))
|
||||
var/turf/location = src.loc
|
||||
if (!( istype(location, /turf) ))
|
||||
/obj/item/weapon/tank/blob_act(obj/structure/blob/B)
|
||||
if(B && B.loc == loc)
|
||||
var/turf/location = get_turf(src)
|
||||
if(!location)
|
||||
qdel(src)
|
||||
|
||||
if(src.air_contents)
|
||||
if(air_contents)
|
||||
location.assume_air(air_contents)
|
||||
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/tank/deconstruct(disassembled = TRUE)
|
||||
if(!disassembled)
|
||||
var/turf/T = get_turf(src)
|
||||
if(T)
|
||||
T.assume_air(air_contents)
|
||||
air_update_turf()
|
||||
playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/tank/suicide_act(mob/user)
|
||||
var/mob/living/carbon/human/H = user
|
||||
user.visible_message("<span class='suicide'>[user] is putting the [src]'s valve to their lips! I don't think they're gonna stop!</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is putting [src]'s valve to [user.p_their()] lips! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
playsound(loc, 'sound/effects/spray.ogg', 10, 1, -3)
|
||||
if (H && !qdeleted(H))
|
||||
for(var/obj/item/W in H)
|
||||
@@ -114,7 +124,7 @@
|
||||
H.hair_style = "Bald"
|
||||
H.update_hair()
|
||||
H.bleed_rate = 5
|
||||
gibs(H.loc, H.viruses, H.dna)
|
||||
new /obj/effect/gibspawner/generic(H.loc, H.viruses, H.dna)
|
||||
H.adjustBruteLoss(1000) //to make the body super-bloody
|
||||
|
||||
return (BRUTELOSS)
|
||||
@@ -127,7 +137,7 @@
|
||||
else if(istype(W, /obj/item/device/assembly_holder))
|
||||
bomb_assemble(W,user)
|
||||
else
|
||||
return ..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = hands_state)
|
||||
|
||||
@@ -5,10 +5,14 @@
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
icon_state = "waterbackpack"
|
||||
item_state = "waterbackpack"
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = SLOT_BACK
|
||||
slowdown = 1
|
||||
actions_types = list(/datum/action/item_action/toggle_mister)
|
||||
obj_integrity = 200
|
||||
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/obj/item/weapon/noz
|
||||
var/on = 0
|
||||
@@ -83,19 +87,10 @@
|
||||
var/mob/M = src.loc
|
||||
if(istype(M) && istype(over_object, /obj/screen/inventory/hand))
|
||||
var/obj/screen/inventory/hand/H = over_object
|
||||
switch(H.slot_id)
|
||||
if(slot_r_hand)
|
||||
if(M.r_hand)
|
||||
return
|
||||
if(!M.unEquip(src))
|
||||
return
|
||||
M.put_in_r_hand(src)
|
||||
if(slot_l_hand)
|
||||
if(M.l_hand)
|
||||
return
|
||||
if(!M.unEquip(src))
|
||||
return
|
||||
M.put_in_l_hand(src)
|
||||
if(!M.unEquip(src))
|
||||
return
|
||||
M.put_in_hand(src, H.held_index)
|
||||
|
||||
|
||||
/obj/item/weapon/watertank/attackby(obj/item/W, mob/user, params)
|
||||
if(W == noz)
|
||||
@@ -114,7 +109,7 @@
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
icon_state = "mister"
|
||||
item_state = "mister"
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
amount_per_transfer_from_this = 50
|
||||
possible_transfer_amounts = list(25,50,100)
|
||||
volume = 500
|
||||
@@ -223,7 +218,7 @@
|
||||
power = 8
|
||||
precision = 1
|
||||
cooling_power = 5
|
||||
w_class = 5
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
flags = NODROP //Necessary to ensure that the nozzle and tank never seperate
|
||||
var/obj/item/weapon/watertank/tank
|
||||
var/nozzle_mode = 0
|
||||
@@ -231,12 +226,13 @@
|
||||
var/nanofrost_cooldown = 0
|
||||
|
||||
/obj/item/weapon/extinguisher/mini/nozzle/New(parent_tank)
|
||||
..()
|
||||
if(check_tank_exists(parent_tank, src))
|
||||
tank = parent_tank
|
||||
reagents = tank.reagents
|
||||
max_water = tank.volume
|
||||
loc = tank
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/extinguisher/mini/nozzle/Move()
|
||||
..()
|
||||
@@ -300,7 +296,7 @@
|
||||
nanofrost_cooldown = 0
|
||||
return
|
||||
if(nozzle_mode == METAL_FOAM)
|
||||
if(!Adj|| !istype(target, /turf))
|
||||
if(!Adj|| !isturf(target))
|
||||
return
|
||||
if(metal_synthesis_cooldown < 5)
|
||||
var/obj/effect/particle_effect/foam/metal/F = PoolOrNew(/obj/effect/particle_effect/foam/metal, get_turf(target))
|
||||
@@ -325,7 +321,7 @@
|
||||
S.set_up(2, src.loc, blasting=1)
|
||||
S.start()
|
||||
var/obj/effect/decal/cleanable/flour/F = new /obj/effect/decal/cleanable/flour(src.loc)
|
||||
F.color = "#B2FFFF"
|
||||
F.add_atom_colour("#B2FFFF", FIXED_COLOUR_PRIORITY)
|
||||
F.name = "nanofrost residue"
|
||||
F.desc = "Residue left behind from a nanofrost detonation. Perhaps there was a fire here?"
|
||||
playsound(src,'sound/effects/bamf.ogg',100,1)
|
||||
@@ -341,7 +337,7 @@
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
icon_state = "waterbackpackatmos"
|
||||
item_state = "waterbackpackatmos"
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = SLOT_BACK
|
||||
slowdown = 1
|
||||
actions_types = list(/datum/action/item_action/activate_injector)
|
||||
@@ -424,7 +420,7 @@
|
||||
loc << "<span class='notice'>[src] turns off.</span>"
|
||||
|
||||
/obj/item/weapon/reagent_containers/chemtank/process()
|
||||
if(!istype(loc,/mob/living/carbon/human))
|
||||
if(!ishuman(loc))
|
||||
turn_off()
|
||||
return
|
||||
if(!reagents.total_volume)
|
||||
@@ -452,7 +448,7 @@
|
||||
desc = "A New Russian backpack spray for systematic cleansing of carbon lifeforms."
|
||||
icon_state = "waterbackpackjani"
|
||||
item_state = "waterbackpackjani"
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
volume = 2000
|
||||
slowdown = 0
|
||||
|
||||
@@ -472,7 +468,7 @@
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
icon_state = "misterjani"
|
||||
item_state = "misterjani"
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
amount_per_transfer_from_this = 100
|
||||
possible_transfer_amounts = list(75,100,150)
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
var/broadcasting = null
|
||||
var/listening = 1
|
||||
flags = CONDUCT
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
item_state = "electronic"
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
@@ -51,7 +51,7 @@ Frequency:
|
||||
if(!current_location||current_location.z==2)//If turf was not found or they're on z level 2.
|
||||
usr << "The [src] is malfunctioning."
|
||||
return
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||
if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)))
|
||||
usr.set_machine(src)
|
||||
if (href_list["refresh"])
|
||||
src.temp = "<B>Persistent Signal Locator</B><HR>"
|
||||
@@ -60,7 +60,7 @@ Frequency:
|
||||
if (sr)
|
||||
src.temp += "<B>Located Beacons:</B><BR>"
|
||||
|
||||
for(var/obj/item/device/radio/beacon/W in world)
|
||||
for(var/obj/item/device/radio/beacon/W in teleportbeacons)
|
||||
if (W.frequency == src.frequency)
|
||||
var/turf/tr = get_turf(W)
|
||||
if (tr.z == sr.z && tr)
|
||||
@@ -129,17 +129,19 @@ Frequency:
|
||||
icon_state = "hand_tele"
|
||||
item_state = "electronic"
|
||||
throwforce = 0
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
materials = list(MAT_METAL=10000)
|
||||
origin_tech = "magnets=3;bluespace=4"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 30, bio = 0, rad = 0, fire = 100, acid = 100)
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
var/active_portals = 0
|
||||
|
||||
/obj/item/weapon/hand_tele/attack_self(mob/user)
|
||||
var/turf/current_location = get_turf(user)//What turf is the user on?
|
||||
var/area/current_area = current_location.loc
|
||||
if(!current_location||current_area.noteleport||current_location.z>=7 || !istype(user.loc, /turf))//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
|
||||
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>"
|
||||
return
|
||||
var/list/L = list( )
|
||||
@@ -164,8 +166,8 @@ Frequency:
|
||||
turfs += T
|
||||
if(turfs.len)
|
||||
L["None (Dangerous)"] = pick(turfs)
|
||||
var/t1 = input(user, "Please select a teleporter to lock in on.", "Hand Teleporter") in L
|
||||
if (user.get_active_hand() != src || user.incapacitated())
|
||||
var/t1 = input(user, "Please select a teleporter to lock in on.", "Hand Teleporter") as null|anything in L
|
||||
if (!t1 || user.get_active_held_item() != src || user.incapacitated())
|
||||
return
|
||||
if(active_portals >= 3)
|
||||
user.show_message("<span class='notice'>\The [src] is recharging!</span>")
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
/obj/item/weapon/melee/baton/cattleprod/teleprod
|
||||
name = "teleprod"
|
||||
desc = "A prod with a bluespace crystal on the end. The crystal doesn't look too fun to touch."
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
icon_state = "teleprod_nocell"
|
||||
item_state = "teleprod"
|
||||
origin_tech = "combat=2;bluespace=4;materials=3"
|
||||
slot_flags = null
|
||||
|
||||
/obj/item/weapon/melee/baton/cattleprod/teleprod/attack(mob/living/carbon/M, mob/living/carbon/user)//handles making things teleport when hit
|
||||
..()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
|
||||
|
||||
|
||||
/* Tools!
|
||||
* Note: Multitools are /obj/item/device
|
||||
@@ -23,29 +23,38 @@
|
||||
slot_flags = SLOT_BELT
|
||||
force = 5
|
||||
throwforce = 7
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
usesound = 'sound/items/Ratchet.ogg'
|
||||
materials = list(MAT_METAL=150)
|
||||
origin_tech = "materials=1;engineering=1"
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
|
||||
toolspeed = 1
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30)
|
||||
|
||||
/obj/item/weapon/wrench/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is beating \himself to death with the [src]! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is beating [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1)
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/wrench/cyborg
|
||||
name = "automatic wrench"
|
||||
desc = "An advanced robotic wrench. Can be found in construction cyborgs."
|
||||
icon = 'icons/obj/items_cyborg.dmi'
|
||||
toolspeed = 2
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/wrench/brass
|
||||
name = "brass wrench"
|
||||
desc = "A brass wrench. It's faintly warm to the touch."
|
||||
icon_state = "wrench_brass"
|
||||
toolspeed = 2
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/wrench/abductor
|
||||
name = "alien wrench"
|
||||
desc = "A polarized wrench. It causes anything placed between the jaws to turn."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "wrench"
|
||||
usesound = 'sound/effects/EMPulse.ogg'
|
||||
toolspeed = 0.1
|
||||
origin_tech = "materials=5;engineering=5;abductor=3"
|
||||
|
||||
/obj/item/weapon/wrench/power
|
||||
name = "Hand Drill"
|
||||
@@ -58,21 +67,20 @@
|
||||
force = 8 //might or might not be too high, subject to change
|
||||
throwforce = 8
|
||||
attack_verb = list("drilled", "screwed", "jabbed")
|
||||
toolspeed = 4
|
||||
toolspeed = 0.25
|
||||
|
||||
/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 the [src].</span>"
|
||||
user << "<span class='notice'>You attach the screw driver bit to [src].</span>"
|
||||
user.unEquip(src)
|
||||
user.put_in_active_hand(s_drill)
|
||||
qdel(src)
|
||||
|
||||
obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is pressing the [src] against \his head, it looks like he's trying to drill \his head off")
|
||||
/obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is pressing [src] against [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!")
|
||||
return (BRUTELOSS)
|
||||
|
||||
|
||||
/obj/item/weapon/wrench/medical
|
||||
name = "medical wrench"
|
||||
desc = "A medical wrench with common(medical?) uses. Can be found in your hand."
|
||||
@@ -83,7 +91,7 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
attack_verb = list("wrenched", "medicaled", "tapped", "jabbed", "whacked")
|
||||
|
||||
/obj/item/weapon/wrench/medical/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is praying to the medical wrench to take \his soul. It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is praying to the medical wrench to take [user.p_their()] soul. It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
// TODO Make them glow with the power of the M E D I C A L W R E N C H
|
||||
// during their ascension
|
||||
|
||||
@@ -122,7 +130,7 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 5
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throwforce = 5
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
@@ -131,10 +139,10 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
usesound = 'sound/items/Screwdriver.ogg'
|
||||
toolspeed = 1
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30)
|
||||
|
||||
/obj/item/weapon/screwdriver/suicide_act(mob/user)
|
||||
user.visible_message(pick("<span class='suicide'>[user] is stabbing the [src] into \his temple! It looks like \he's trying to commit suicide.</span>", \
|
||||
"<span class='suicide'>[user] is stabbing the [src] into \his heart! It looks like \he's trying to commit suicide.</span>"))
|
||||
user.visible_message("<span class='suicide'>[user] is stabbing [src] into [user.p_their()] [pick("temple", "heart")]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/screwdriver/New(loc, var/param_color = null)
|
||||
@@ -161,7 +169,15 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
name = "brass screwdriver"
|
||||
desc = "A screwdriver made of brass. The handle feels freezing cold."
|
||||
icon_state = "screwdriver_brass"
|
||||
toolspeed = 2
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/screwdriver/abductor
|
||||
name = "alien screwdriver"
|
||||
desc = "An ultrasonic screwdriver."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "screwdriver"
|
||||
usesound = 'sound/items/PSHOOM.ogg'
|
||||
toolspeed = 0.1
|
||||
|
||||
/obj/item/weapon/screwdriver/power
|
||||
name = "Hand Drill"
|
||||
@@ -177,16 +193,16 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
attack_verb = list("drilled", "screwed", "jabbed","whacked")
|
||||
hitsound = 'sound/items/drill_hit.ogg'
|
||||
usesound = 'sound/items/drill_use.ogg'
|
||||
toolspeed = 4
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/screwdriver/power/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is putting the [src] up to \his temple, it looks like they're trying to commit suicide</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is putting [src] to [user.p_their()] temple. It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/screwdriver/power/attack_self(mob/user)
|
||||
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 the [src].</span>"
|
||||
user << "<span class='notice'>You attach the bolt driver bit to [src].</span>"
|
||||
user.unEquip(src)
|
||||
user.put_in_active_hand(b_drill)
|
||||
qdel(src)
|
||||
@@ -194,10 +210,8 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
/obj/item/weapon/screwdriver/cyborg
|
||||
name = "powered screwdriver"
|
||||
desc = "An electrical screwdriver, designed to be both precise and quick."
|
||||
icon = 'icons/obj/items_cyborg.dmi'
|
||||
icon_state = "screwdriver_cyborg"
|
||||
usesound = 'sound/items/drill_use.ogg'
|
||||
toolspeed = 2
|
||||
toolspeed = 0.5
|
||||
|
||||
/*
|
||||
* Wirecutters
|
||||
@@ -212,13 +226,13 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
force = 6
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
materials = list(MAT_METAL=80)
|
||||
origin_tech = "materials=1;engineering=1"
|
||||
attack_verb = list("pinched", "nipped")
|
||||
hitsound = 'sound/items/Wirecutter.ogg'
|
||||
usesound = 'sound/items/Wirecutter.ogg'
|
||||
toolspeed = 1
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30)
|
||||
|
||||
/obj/item/weapon/wirecutters/New(loc, var/param_color = null)
|
||||
..()
|
||||
@@ -240,53 +254,57 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/wirecutters/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is cutting at \his arteries with the [src]! It looks like \he's trying to commit suicide.</span>")
|
||||
playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1, -1)
|
||||
user.visible_message("<span class='suicide'>[user] is cutting at [user.p_their()] arteries with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
playsound(loc, usesound, 50, 1, -1)
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/wirecutters/brass
|
||||
name = "brass wirecutters"
|
||||
desc = "A pair of wirecutters made of brass. The handle feels freezing cold to the touch."
|
||||
icon_state = "cutters_brass"
|
||||
toolspeed = 2
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/wirecutters/abductor
|
||||
name = "alien wirecutters"
|
||||
desc = "Extremely sharp wirecutters, made out of a silvery-green metal."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "cutters"
|
||||
toolspeed = 0.1
|
||||
origin_tech = "materials=5;engineering=4;abductor=3"
|
||||
|
||||
/obj/item/weapon/wirecutters/cyborg
|
||||
name = "wirecutters"
|
||||
desc = "This cuts wires."
|
||||
icon = 'icons/obj/items_cyborg.dmi'
|
||||
icon_state = "cutters_cyborg"
|
||||
toolspeed = 2
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/wirecutters/power
|
||||
name = "Jaws of Life"
|
||||
desc = "A set of jaws of life, the magic of science has managed to fit it down into a device small enough to fit in a tool belt. It's fitted with a cutting head"
|
||||
desc = "A set of jaws of life, the magic of science has managed to fit it down into a device small enough to fit in a tool belt. It's fitted with a cutting head."
|
||||
icon_state = "jaws_cutter"
|
||||
item_state = "jawsoflife"
|
||||
origin_tech = "materials=2;engineering=2"
|
||||
materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25)
|
||||
usesound = 'sound/items/jaws_cut.ogg'
|
||||
toolspeed = 4
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/wirecutters/power/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is the [src] around \his neck, it looks like \he's trying to rip \his head off!</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is wrapping \the [src] around [user.p_their()] neck. It looks like [user.p_theyre()] trying to rip [user.p_their()] head off!</span>")
|
||||
playsound(loc, 'sound/items/jaws_cut.ogg', 50, 1, -1)
|
||||
var/mob/living/carbon/C = user
|
||||
var/obj/item/bodypart/BP = C.get_bodypart("head")
|
||||
if(BP)
|
||||
BP.drop_limb()// <- i have no idea why this works, but it does
|
||||
playsound(loc,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1)
|
||||
else
|
||||
user.visible_message("<span class='suicide'>[user] doesn't have a head to cutt off, but dies anyway.</span>")
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
var/obj/item/bodypart/BP = C.get_bodypart("head")
|
||||
if(BP)
|
||||
BP.drop_limb()
|
||||
playsound(loc,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1)
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/wirecutters/power/attack_self(mob/user)
|
||||
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 the [src].</span>"
|
||||
user << "<span class='notice'>You attach the pry jaws to [src].</span>"
|
||||
user.unEquip(src)
|
||||
user.put_in_active_hand(pryjaws)
|
||||
qdel(src)
|
||||
|
||||
/*
|
||||
* Welding Tool
|
||||
*/
|
||||
@@ -306,7 +324,9 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
var/deac_sound = 'sound/items/WelderDeactivate.ogg'
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30)
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
materials = list(MAT_METAL=70, MAT_GLASS=30)
|
||||
origin_tech = "engineering=1;plasmatech=1"
|
||||
@@ -326,6 +346,7 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/weldingtool/proc/update_torch()
|
||||
cut_overlays()
|
||||
if(welding)
|
||||
@@ -334,6 +355,7 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
else
|
||||
item_state = "[initial(item_state)]"
|
||||
|
||||
|
||||
/obj/item/weapon/weldingtool/update_icon()
|
||||
if(change_icons)
|
||||
var/ratio = get_fuel() / max_fuel
|
||||
@@ -345,39 +367,6 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
update_torch()
|
||||
return
|
||||
|
||||
/obj/item/weapon/weldingtool/examine(mob/user)
|
||||
..()
|
||||
user << "It contains [get_fuel()] unit\s of fuel out of [max_fuel]."
|
||||
|
||||
/obj/item/weapon/weldingtool/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] welds \his every orifice closed! It looks like \he's trying to commit suicide..</span>")
|
||||
return (FIRELOSS)
|
||||
|
||||
|
||||
/obj/item/weapon/weldingtool/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
flamethrower_screwdriver(I, user)
|
||||
else if(istype(I, /obj/item/stack/rods))
|
||||
flamethrower_rods(I, user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/weldingtool/attack(mob/living/carbon/human/H, mob/user)
|
||||
if(!istype(H))
|
||||
return ..()
|
||||
|
||||
var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected))
|
||||
|
||||
if(affecting && affecting.status == ORGAN_ROBOTIC && user.a_intent != "harm")
|
||||
if(src.remove_fuel(1))
|
||||
playsound(loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] starts to fix some of the dents on [H]'s [affecting.name].</span>", "<span class='notice'>You start fixing some of the dents on [H]'s [affecting.name].</span>")
|
||||
if(!do_mob(user, H, 50))
|
||||
return
|
||||
item_heal_robotic(H, user, 5, 0)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/weldingtool/process()
|
||||
switch(welding)
|
||||
@@ -396,11 +385,41 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
remove_fuel(1)
|
||||
update_icon()
|
||||
|
||||
|
||||
//This is to start fires. process() is only called if the welder is on.
|
||||
open_flame()
|
||||
|
||||
|
||||
/obj/item/weapon/weldingtool/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] welds [user.p_their()] every orifice closed! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (FIRELOSS)
|
||||
|
||||
|
||||
/obj/item/weapon/weldingtool/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
flamethrower_screwdriver(I, user)
|
||||
else if(istype(I, /obj/item/stack/rods))
|
||||
flamethrower_rods(I, user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/weldingtool/attack(mob/living/carbon/human/H, mob/user)
|
||||
if(!istype(H))
|
||||
return ..()
|
||||
|
||||
var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected))
|
||||
|
||||
if(affecting && affecting.status == BODYPART_ROBOTIC && user.a_intent != INTENT_HARM)
|
||||
if(src.remove_fuel(1))
|
||||
playsound(loc, usesound, 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] starts to fix some of the dents on [H]'s [affecting.name].</span>", "<span class='notice'>You start fixing some of the dents on [H]'s [affecting.name].</span>")
|
||||
if(!do_mob(user, H, 50))
|
||||
return
|
||||
item_heal_robotic(H, user, 5, 0)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/weldingtool/afterattack(atom/O, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
|
||||
@@ -408,6 +427,8 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
remove_fuel(1)
|
||||
var/turf/location = get_turf(user)
|
||||
location.hotspot_expose(700, 50, 1)
|
||||
if(get_fuel() <= 0)
|
||||
user.AddLuminosity(-light_intensity)
|
||||
|
||||
if(isliving(O))
|
||||
var/mob/living/L = O
|
||||
@@ -415,10 +436,15 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
message_admins("[key_name_admin(user)] set [key_name_admin(L)] on fire")
|
||||
log_game("[key_name(user)] set [key_name(L)] on fire")
|
||||
|
||||
|
||||
/obj/item/weapon/weldingtool/attack_self(mob/user)
|
||||
toggle(user)
|
||||
switched_on(user)
|
||||
if(welding)
|
||||
SetLuminosity(0)
|
||||
user.AddLuminosity(light_intensity)
|
||||
update_icon()
|
||||
|
||||
|
||||
//Returns the amount of fuel in the welder
|
||||
/obj/item/weapon/weldingtool/proc/get_fuel()
|
||||
return reagents.get_reagent_amount("welding_fuel")
|
||||
@@ -432,36 +458,29 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
reagents.remove_reagent("welding_fuel", amount)
|
||||
check_fuel()
|
||||
if(M)
|
||||
M.flash_eyes(light_intensity)
|
||||
return 1
|
||||
M.flash_act(light_intensity)
|
||||
return TRUE
|
||||
else
|
||||
if(M)
|
||||
M << "<span class='warning'>You need more welding fuel to complete this task!</span>"
|
||||
return 0
|
||||
|
||||
|
||||
//Returns whether or not the welding tool is currently on.
|
||||
/obj/item/weapon/weldingtool/proc/isOn()
|
||||
return welding
|
||||
return FALSE
|
||||
|
||||
|
||||
//Turns off the welder if there is no more fuel (does this really need to be its own proc?)
|
||||
/obj/item/weapon/weldingtool/proc/check_fuel(mob/user)
|
||||
if(get_fuel() <= 0 && welding)
|
||||
toggle(user, 1)
|
||||
switched_on(user)
|
||||
update_icon()
|
||||
//mob icon update
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.update_inv_r_hand(0)
|
||||
M.update_inv_l_hand(0)
|
||||
M.update_inv_hands(0)
|
||||
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
//Toggles the welder off and on
|
||||
/obj/item/weapon/weldingtool/proc/toggle(mob/user, message = 0)
|
||||
//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>"
|
||||
return
|
||||
@@ -477,21 +496,54 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
user << "<span class='warning'>You need more fuel!</span>"
|
||||
welding = 0
|
||||
switched_off(user)
|
||||
else
|
||||
if(!message)
|
||||
user << "<span class='notice'>You switch [src] off.</span>"
|
||||
playsound(loc, deac_sound, 50, 1)
|
||||
else
|
||||
user << "<span class='warning'>[src] shuts off!</span>"
|
||||
force = 3
|
||||
damtype = "brute"
|
||||
hitsound = "swing_hit"
|
||||
update_icon()
|
||||
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)
|
||||
|
||||
force = 3
|
||||
damtype = "brute"
|
||||
hitsound = "swing_hit"
|
||||
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]."
|
||||
|
||||
/obj/item/weapon/weldingtool/is_hot()
|
||||
return welding * heat
|
||||
|
||||
//Returns whether or not the welding tool is currently on.
|
||||
/obj/item/weapon/weldingtool/proc/isOn()
|
||||
return welding
|
||||
|
||||
|
||||
/obj/item/weapon/weldingtool/proc/flamethrower_screwdriver(obj/item/I, mob/user)
|
||||
if(welding)
|
||||
user << "<span class='warning'>Turn it off first!</span>"
|
||||
@@ -517,7 +569,12 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
user.put_in_hands(F)
|
||||
else
|
||||
user << "<span class='warning'>You need one rod to start building a flamethrower!</span>"
|
||||
return
|
||||
|
||||
/obj/item/weapon/weldingtool/ignition_effect(atom/A, mob/user)
|
||||
if(welding && remove_fuel(1, user))
|
||||
. = "<span class='notice'>[user] casually lights [A] with [src], what a badass.</span>"
|
||||
else
|
||||
. = ""
|
||||
|
||||
/obj/item/weapon/weldingtool/largetank
|
||||
name = "industrial welding tool"
|
||||
@@ -530,9 +587,7 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
/obj/item/weapon/weldingtool/largetank/cyborg
|
||||
name = "integrated welding tool"
|
||||
desc = "An advanced welder designed to be used in robotic systems."
|
||||
icon = 'icons/obj/items_cyborg.dmi'
|
||||
icon_state = "indwelder"
|
||||
toolspeed = 2
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/weldingtool/largetank/flamethrower_screwdriver()
|
||||
return
|
||||
@@ -543,13 +598,27 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
desc = "A miniature welder used during emergencies."
|
||||
icon_state = "miniwelder"
|
||||
max_fuel = 10
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
materials = list(MAT_METAL=30, MAT_GLASS=10)
|
||||
change_icons = 0
|
||||
|
||||
/obj/item/weapon/weldingtool/mini/flamethrower_screwdriver()
|
||||
return
|
||||
|
||||
/obj/item/weapon/weldingtool/abductor
|
||||
name = "alien welding tool"
|
||||
desc = "An alien welding tool. Whatever fuel it uses, it never runs out."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "welder"
|
||||
toolspeed = 0.1
|
||||
light_intensity = 0
|
||||
change_icons = 0
|
||||
origin_tech = "plasmatech=5;engineering=5;abductor=3"
|
||||
|
||||
/obj/item/weapon/weldingtool/abductor/process()
|
||||
if(get_fuel() <= max_fuel)
|
||||
reagents.add_reagent("welding_fuel", 1)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/weldingtool/hugetank
|
||||
name = "upgraded industrial welding tool"
|
||||
@@ -559,7 +628,6 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
max_fuel = 80
|
||||
materials = list(MAT_METAL=70, MAT_GLASS=120)
|
||||
origin_tech = "engineering=3;plasmatech=2"
|
||||
w_class = 3
|
||||
|
||||
/obj/item/weapon/weldingtool/experimental
|
||||
name = "experimental welding tool"
|
||||
@@ -573,7 +641,8 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
change_icons = 0
|
||||
can_off_process = 1
|
||||
light_intensity = 1
|
||||
toolspeed = 2
|
||||
toolspeed = 0.5
|
||||
var/nextrefueltick = 0
|
||||
|
||||
/obj/item/weapon/weldingtool/experimental/brass
|
||||
name = "brass welding tool"
|
||||
@@ -582,20 +651,11 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
item_state = "brasswelder"
|
||||
|
||||
|
||||
//Proc to make the experimental welder generate fuel, optimized as fuck -Sieve
|
||||
//i don't think this is actually used, yaaaaay -Pete
|
||||
/obj/item/weapon/weldingtool/experimental/proc/fuel_gen()
|
||||
if(!welding && !last_gen)
|
||||
last_gen = 1
|
||||
reagents.add_reagent("welding_fuel",1)
|
||||
spawn(10)
|
||||
last_gen = 0
|
||||
|
||||
/obj/item/weapon/weldingtool/experimental/process()
|
||||
..()
|
||||
if(reagents.total_volume < max_fuel)
|
||||
fuel_gen()
|
||||
|
||||
if(get_fuel() < max_fuel && nextrefueltick < world.time)
|
||||
nextrefueltick = world.time + 10
|
||||
reagents.add_reagent("welding_fuel", 1)
|
||||
|
||||
|
||||
/*
|
||||
@@ -612,14 +672,15 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
slot_flags = SLOT_BELT
|
||||
force = 5
|
||||
throwforce = 7
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
materials = list(MAT_METAL=50)
|
||||
origin_tech = "engineering=1;combat=1"
|
||||
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
|
||||
toolspeed = 1
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30)
|
||||
|
||||
/obj/item/weapon/crowbar/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is beating \himself to death with the [src]! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is beating [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1)
|
||||
return (BRUTELOSS)
|
||||
|
||||
@@ -631,27 +692,35 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
name = "brass crowbar"
|
||||
desc = "A brass crowbar. It feels faintly warm to the touch."
|
||||
icon_state = "crowbar_brass"
|
||||
toolspeed = 2
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/crowbar/abductor
|
||||
name = "alien crowbar"
|
||||
desc = "A hard-light crowbar. It appears to pry by itself, without any effort required."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
usesound = 'sound/weapons/sonic_jackhammer.ogg'
|
||||
icon_state = "crowbar"
|
||||
toolspeed = 0.1
|
||||
origin_tech = "combat=4;engineering=4;abductor=3"
|
||||
|
||||
/obj/item/weapon/crowbar/large
|
||||
name = "crowbar"
|
||||
desc = "It's a big crowbar. It doesn't fit in your pockets, because it's big."
|
||||
force = 12
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
throw_speed = 3
|
||||
throw_range = 3
|
||||
materials = list(MAT_METAL=70)
|
||||
icon_state = "crowbar_large"
|
||||
item_state = "crowbar"
|
||||
toolspeed = 2
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/crowbar/cyborg
|
||||
name = "hydraulic crowbar"
|
||||
desc = "A hydraulic prying tool, compact but powerful. Designed to replace crowbar in construction cyborgs."
|
||||
icon = 'icons/obj/items_cyborg.dmi'
|
||||
usesound = 'sound/items/jaws_pry.ogg'
|
||||
force = 10
|
||||
toolspeed = 2
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/crowbar/power
|
||||
name = "Jaws of Life"
|
||||
@@ -662,17 +731,17 @@ obj/item/weapon/wrench/power/suicide_act(mob/user)
|
||||
origin_tech = "materials=2;engineering=2"
|
||||
usesound = 'sound/items/jaws_pry.ogg'
|
||||
force = 15
|
||||
toolspeed = 4
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/crowbar/power/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is putting his head in the [src], it looks like \he's trying to commit suicide!</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is putting [user.p_their()] head in [src], it looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
playsound(loc, 'sound/items/jaws_pry.ogg', 50, 1, -1)
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/crowbar/power/attack_self(mob/user)
|
||||
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 the [src].</span>"
|
||||
user << "<span class='notice'>You attach the cutting jaws to [src].</span>"
|
||||
user.unEquip(src)
|
||||
user.put_in_active_hand(cutjaws)
|
||||
qdel(src)
|
||||
qdel(src)
|
||||
|
||||
@@ -41,15 +41,15 @@
|
||||
else //something wrong
|
||||
name = "[initial(name)]"
|
||||
update_icon()
|
||||
if(isrobot(user))
|
||||
if(iscyborg(user))
|
||||
user << "<span class='notice'>You free up your module.</span>"
|
||||
else if(istype(src, /obj/item/weapon/twohanded/required))
|
||||
user << "<span class='notice'>You drop \the [name].</span>"
|
||||
user << "<span class='notice'>You drop [src].</span>"
|
||||
else
|
||||
user << "<span class='notice'>You are now carrying the [name] with one hand.</span>"
|
||||
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_hand()
|
||||
var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_held_item()
|
||||
if(O && istype(O))
|
||||
O.unwield()
|
||||
return
|
||||
@@ -57,10 +57,10 @@
|
||||
/obj/item/weapon/twohanded/proc/wield(mob/living/carbon/user)
|
||||
if(wielded)
|
||||
return
|
||||
if(istype(user,/mob/living/carbon/monkey) )
|
||||
if(ismonkey(user))
|
||||
user << "<span class='warning'>It's too heavy for you to wield fully.</span>"
|
||||
return
|
||||
if(user.get_inactive_hand())
|
||||
if(user.get_inactive_held_item())
|
||||
user << "<span class='warning'>You need your other hand to be empty!</span>"
|
||||
return
|
||||
if(user.get_num_arms() < 2)
|
||||
@@ -71,15 +71,15 @@
|
||||
force = force_wielded
|
||||
name = "[name] (Wielded)"
|
||||
update_icon()
|
||||
if(isrobot(user))
|
||||
user << "<span class='notice'>You dedicate your module to [name].</span>"
|
||||
if(iscyborg(user))
|
||||
user << "<span class='notice'>You dedicate your module to [src].</span>"
|
||||
else
|
||||
user << "<span class='notice'>You grab the [name] with both hands.</span>"
|
||||
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~
|
||||
O.name = "[name] - offhand"
|
||||
O.desc = "Your second grip on the [name]"
|
||||
O.desc = "Your second grip on [src]."
|
||||
user.put_in_inactive_hand(O)
|
||||
return
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
..()
|
||||
//handles unwielding a twohanded weapon when dropped as well as clearing up the offhand
|
||||
if(user)
|
||||
var/obj/item/weapon/twohanded/O = user.get_inactive_hand()
|
||||
var/obj/item/weapon/twohanded/O = user.get_inactive_held_item()
|
||||
if(istype(O))
|
||||
O.unwield(user)
|
||||
return unwield(user)
|
||||
@@ -103,16 +103,22 @@
|
||||
wield(user)
|
||||
|
||||
/obj/item/weapon/twohanded/equip_to_best_slot(mob/M)
|
||||
if(..())
|
||||
unwield(M)
|
||||
return
|
||||
if(..())
|
||||
unwield(M)
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/equipped(mob/user, slot)
|
||||
..()
|
||||
if(!user.is_holding(src) && wielded)
|
||||
unwield(user)
|
||||
|
||||
///////////OFFHAND///////////////
|
||||
/obj/item/weapon/twohanded/offhand
|
||||
name = "offhand"
|
||||
icon_state = "offhand"
|
||||
w_class = 5
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
flags = ABSTRACT
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
|
||||
/obj/item/weapon/twohanded/offhand/unwield()
|
||||
qdel(src)
|
||||
@@ -123,23 +129,23 @@
|
||||
///////////Two hand required objects///////////////
|
||||
//This is for objects that require two hands to even pick up
|
||||
/obj/item/weapon/twohanded/required/
|
||||
w_class = 5
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
|
||||
/obj/item/weapon/twohanded/required/attack_self()
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/required/mob_can_equip(mob/M, slot)
|
||||
/obj/item/weapon/twohanded/required/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0)
|
||||
if(wielded && !slot_flags)
|
||||
M << "<span class='warning'>\The [src] is too cumbersome to carry with anything but your hands!</span>"
|
||||
M << "<span class='warning'>[src] is too cumbersome to carry with anything but your hands!</span>"
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/twohanded/required/attack_hand(mob/user)//Can't even pick it up without both hands empty
|
||||
var/obj/item/weapon/twohanded/required/H = user.get_inactive_hand()
|
||||
var/obj/item/weapon/twohanded/required/H = user.get_inactive_held_item()
|
||||
if(get_dist(src,user) > 1)
|
||||
return 0
|
||||
if(H != null)
|
||||
user << "<span class='notice'>\The [src] is too cumbersome to carry in one hand!</span>"
|
||||
user << "<span class='notice'>[src] is too cumbersome to carry in one hand!</span>"
|
||||
return
|
||||
if(src.loc != user)
|
||||
wield(user)
|
||||
@@ -147,14 +153,11 @@
|
||||
|
||||
/obj/item/weapon/twohanded/required/equipped(mob/user, slot)
|
||||
..()
|
||||
if(slot == slot_l_hand || slot == slot_r_hand)
|
||||
if(slot == slot_hands)
|
||||
wield(user)
|
||||
else
|
||||
unwield(user)
|
||||
|
||||
|
||||
/obj/item/weapon/twohanded/
|
||||
|
||||
/*
|
||||
* Fireaxe
|
||||
*/
|
||||
@@ -164,31 +167,36 @@
|
||||
desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?"
|
||||
force = 5
|
||||
throwforce = 15
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = SLOT_BACK
|
||||
force_unwielded = 5
|
||||
force_wielded = 24 // Was 18, Buffed - RobRichards/RR
|
||||
force_wielded = 24
|
||||
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
sharpness = IS_SHARP
|
||||
obj_integrity = 200
|
||||
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
|
||||
|
||||
/obj/item/weapon/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons.
|
||||
icon_state = "fireaxe[wielded]"
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/fireaxe/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] axes \himself from head to toe! It looks like \he's trying to commit suicide..</span>")
|
||||
user.visible_message("<span class='suicide'>[user] axes [user.p_them()]self from head to toe! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/twohanded/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
/obj/item/weapon/twohanded/fireaxe/afterattack(atom/A, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(wielded) //destroys windows and grilles in one hit
|
||||
if(istype(A,/obj/structure/window))
|
||||
var/obj/structure/window/W = A
|
||||
W.shatter()
|
||||
W.take_damage(200, BRUTE, "melee", 0)
|
||||
else if(istype(A,/obj/structure/grille))
|
||||
var/obj/structure/grille/G = A
|
||||
G.take_damage(16)
|
||||
G.take_damage(40, BRUTE, "melee", 0)
|
||||
|
||||
|
||||
/*
|
||||
@@ -202,8 +210,8 @@
|
||||
throwforce = 5
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
w_class = 2
|
||||
var/w_class_on = 4
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/w_class_on = WEIGHT_CLASS_BULKY
|
||||
force_unwielded = 3
|
||||
force_wielded = 34
|
||||
wieldsound = 'sound/weapons/saberon.ogg'
|
||||
@@ -214,18 +222,26 @@
|
||||
item_color = "green"
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
block_chance = 75
|
||||
obj_integrity = 200
|
||||
max_integrity = 200
|
||||
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
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/New()
|
||||
..()
|
||||
item_color = pick("red", "blue", "green", "purple")
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/update_icon()
|
||||
if(wielded)
|
||||
icon_state = "dualsaber[item_color][wielded]"
|
||||
else
|
||||
icon_state = "dualsaber0"
|
||||
clean_blood()//blood overlays get weird otherwise, because the sprite changes.
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/attack(mob/target, mob/living/carbon/human/user)
|
||||
if(user.has_dna())
|
||||
@@ -238,17 +254,19 @@
|
||||
impale(user)
|
||||
return
|
||||
if((wielded) && prob(50))
|
||||
spawn(0)
|
||||
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2))
|
||||
user.setDir(i)
|
||||
if(i == 8)
|
||||
user.emote("flip")
|
||||
sleep(1)
|
||||
addtimer(src, "jedi_spin", 0, TIMER_UNIQUE, 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))
|
||||
user.setDir(i)
|
||||
if(i == 8)
|
||||
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 \the [src].</span>"
|
||||
user << "<span class='warning'>You twirl around a bit before losing your balance and impaling yourself on [src].</span>"
|
||||
if (force_wielded)
|
||||
user.take_organ_damage(20,25)
|
||||
user.take_bodypart_damage(20,25)
|
||||
else
|
||||
user.adjustStaminaLoss(25)
|
||||
|
||||
@@ -257,7 +275,7 @@
|
||||
return ..()
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/attack_hulk(mob/living/carbon/human/user) //In case thats just so happens that it is still activated on the groud, prevents hulk from picking it up
|
||||
/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>"
|
||||
return 1
|
||||
@@ -271,17 +289,40 @@
|
||||
w_class = w_class_on
|
||||
..()
|
||||
hitsound = 'sound/weapons/blade1.ogg'
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/unwield() //Specific unwield () to switch hitsounds.
|
||||
sharpness = initial(sharpness)
|
||||
w_class = initial(w_class)
|
||||
..()
|
||||
hitsound = "swing_hit"
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/process()
|
||||
if(wielded)
|
||||
open_flame()
|
||||
else
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/IsReflect()
|
||||
if(wielded)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/ignition_effect(atom/A, mob/user)
|
||||
// same as /obj/item/weapon/melee/energy, mostly
|
||||
if(!wielded)
|
||||
return ""
|
||||
var/in_mouth = ""
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
if(C.wear_mask == src)
|
||||
in_mouth = ", barely missing their nose"
|
||||
. = "<span class='warning'>[user] swings [user.p_their()] [src][in_mouth]. [user.p_they()] light[user.p_s()] [A] in the process.</span>"
|
||||
playsound(loc, hitsound, get_clamped_volume(), 1, -1)
|
||||
add_fingerprint(user)
|
||||
// Light your candles while spinning around the room
|
||||
addtimer(src, "jedi_spin", 0, TIMER_UNIQUE, user)
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/green/New()
|
||||
item_color = "green"
|
||||
|
||||
@@ -306,7 +347,7 @@
|
||||
name = "spear"
|
||||
desc = "A haphazardly-constructed yet still deadly weapon of ancient design."
|
||||
force = 10
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = SLOT_BACK
|
||||
force_unwielded = 10
|
||||
force_wielded = 18
|
||||
@@ -318,6 +359,9 @@
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
|
||||
sharpness = IS_SHARP
|
||||
obj_integrity = 200
|
||||
max_integrity = 200
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30)
|
||||
var/obj/item/weapon/grenade/explosive = null
|
||||
var/war_cry = "AAAAARGH!!!"
|
||||
|
||||
@@ -330,7 +374,7 @@
|
||||
/obj/item/weapon/twohanded/spear/afterattack(atom/movable/AM, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(AM, /turf/open)) //So you can actually melee with it
|
||||
if(isopenturf(AM)) //So you can actually melee with it
|
||||
return
|
||||
if(explosive && wielded)
|
||||
user.say("[war_cry]")
|
||||
@@ -376,7 +420,8 @@
|
||||
icon_state = "chainsaw_off"
|
||||
flags = CONDUCT
|
||||
force = 13
|
||||
w_class = 5
|
||||
var/force_on = 21
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
throwforce = 13
|
||||
throw_speed = 2
|
||||
throw_range = 4
|
||||
@@ -390,9 +435,9 @@
|
||||
|
||||
/obj/item/weapon/twohanded/required/chainsaw/attack_self(mob/user)
|
||||
on = !on
|
||||
user << "As you pull the starting cord dangling from \the [src], [on ? "it begins to whirr." : "the chain stops moving."]"
|
||||
force = on ? 21 : 13
|
||||
throwforce = on ? 21 : 13
|
||||
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"]"
|
||||
|
||||
if(hitsound == "swing_hit")
|
||||
@@ -400,9 +445,8 @@
|
||||
else
|
||||
hitsound = "swing_hit"
|
||||
|
||||
if(src == user.get_active_hand()) //update inhands
|
||||
user.update_inv_l_hand()
|
||||
user.update_inv_r_hand()
|
||||
if(src == user.get_active_held_item()) //update inhands
|
||||
user.update_inv_hands()
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
@@ -411,11 +455,18 @@
|
||||
if(wielded)
|
||||
. = ..()
|
||||
|
||||
|
||||
/obj/item/weapon/twohanded/required/chainsaw/doomslayer
|
||||
name = "OOOH BABY"
|
||||
name = "THE GREAT COMMUNICATOR"
|
||||
desc = "<span class='warning'>VRRRRRRR!!!</span>"
|
||||
armour_penetration = 100
|
||||
force_on = 30
|
||||
|
||||
/obj/item/weapon/twohanded/required/chainsaw/doomslayer/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type)
|
||||
if(attack_type == PROJECTILE_ATTACK)
|
||||
owner.visible_message("<span class='danger'>Ranged attacks just make [owner] angrier!</span>")
|
||||
playsound(src, pick("sound/weapons/bulletflyby.ogg","sound/weapons/bulletflyby2.ogg","sound/weapons/bulletflyby3.ogg"), 75, 1)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//GREY TIDE
|
||||
/obj/item/weapon/twohanded/spear/grey_tide
|
||||
@@ -433,7 +484,7 @@
|
||||
if(!proximity)
|
||||
return
|
||||
user.faction |= "greytide(\ref[user])"
|
||||
if(istype(AM, /mob/living))
|
||||
if(isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
if(istype (L, /mob/living/simple_animal/hostile/illusion))
|
||||
return
|
||||
@@ -449,12 +500,16 @@
|
||||
desc = "A simple tool used for moving hay."
|
||||
force = 7
|
||||
throwforce = 15
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
force_unwielded = 7
|
||||
force_wielded = 15
|
||||
attack_verb = list("attacked", "impaled", "pierced")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
sharpness = IS_SHARP
|
||||
obj_integrity = 200
|
||||
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
|
||||
|
||||
/obj/item/weapon/twohanded/pitchfork/demonic
|
||||
name = "demonic pitchfork"
|
||||
@@ -480,15 +535,15 @@
|
||||
icon_state = "pitchfork[wielded]"
|
||||
|
||||
/obj/item/weapon/twohanded/pitchfork/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] impales \himself in \his abdomen with [src]! It looks like \he's trying to commit suicide..</span>")
|
||||
user.visible_message("<span class='suicide'>[user] impales [user.p_them()]self in [user.p_their()] abdomen with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/twohanded/pitchfork/demonic/pickup(mob/user)
|
||||
if(istype(user, /mob/living))
|
||||
if(isliving(user))
|
||||
var/mob/living/U = user
|
||||
if(U.mind && (!U.mind.devilinfo || (U.mind.soulOwner == U.mind))) //Burn hands unless they are a devil or have sold their soul
|
||||
if(U.mind && !U.mind.devilinfo && (U.mind.soulOwner == U.mind)) //Burn hands unless they are a devil or have sold their soul
|
||||
U.visible_message("<span class='warning'>As [U] picks [src] up, [U]'s arms briefly catch fire.</span>", \
|
||||
"<span class='warning'>\"As you pick up the [src] your arms ignite, reminding you of all your past sins.\"</span>")
|
||||
"<span class='warning'>\"As you pick up [src] your arms ignite, reminding you of all your past sins.\"</span>")
|
||||
if(ishuman(U))
|
||||
var/mob/living/carbon/human/H = U
|
||||
H.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm"))
|
||||
@@ -496,8 +551,8 @@
|
||||
U.adjustFireLoss(rand(force/2,force))
|
||||
|
||||
/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'>The [src] burns in your hands.</span>"
|
||||
if(user.mind && !user.mind.devilinfo && (user.mind.soulOwner != user.mind))
|
||||
user << "<span class ='warning'>[src] burns in your hands.</span>"
|
||||
user.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm"))
|
||||
..()
|
||||
|
||||
@@ -515,7 +570,7 @@
|
||||
throw_speed = 4
|
||||
sharpness = IS_SHARP
|
||||
attack_verb = list("cut", "sliced", "diced")
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = SLOT_BACK
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
|
||||
@@ -556,7 +611,7 @@
|
||||
name = "bone spear"
|
||||
desc = "A haphazardly-constructed yet still deadly weapon. The pinnacle of modern technology."
|
||||
force = 11
|
||||
w_class = 4
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = SLOT_BACK
|
||||
force_unwielded = 11
|
||||
force_wielded = 20 //I have no idea how to balance
|
||||
@@ -569,4 +624,56 @@
|
||||
sharpness = IS_SHARP
|
||||
|
||||
/obj/item/weapon/twohanded/bonespear/update_icon()
|
||||
icon_state = "bone_spear[wielded]"
|
||||
icon_state = "bone_spear[wielded]"
|
||||
|
||||
/*
|
||||
* Sky Bulge (Gae Bolg, tradtional dragoon lance from many FF games.)
|
||||
*/
|
||||
/obj/item/weapon/twohanded/skybulge //Copy+paste job from bonespear because no explosions.
|
||||
icon_state = "sky_bulge0"
|
||||
name = "Sky Bulge"
|
||||
desc = "A legendary stick with a very pointy tip. Looks to be used for throwing. And jumping. Can be stubborn if you throw too much." //TODO: Be funnier.
|
||||
force = 10 //This thing aint for robusting.
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = SLOT_BACK
|
||||
force_unwielded = 10
|
||||
force_wielded = 18 //Same as regular spear. This is a utility weapon.
|
||||
throwforce = 24 //And that utility is throwing. 24 so it takes 5 hits instead of 4.
|
||||
throw_speed = 4
|
||||
embedded_impact_pain_multiplier = 0 //If you somehow embed this, it's not going to hurt.
|
||||
armour_penetration = 15 //Same as Bone Spear
|
||||
embed_chance = 0 //Would ruin the whole theme of the thing.
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored", "lanced") //Added lanced for flavour.
|
||||
sharpness = IS_SHARP
|
||||
var/maxdist = 16
|
||||
var/throw_cooldown = 0 //Should equate to half a second. Not supposed to be varedited.
|
||||
|
||||
/obj/item/weapon/twohanded/skybulge/update_icon()
|
||||
icon_state = "sky_bulge[wielded]"
|
||||
|
||||
/obj/item/weapon/twohanded/skybulge/throw_at() //Throw cooldown and offhand-proofing.
|
||||
if(throw_cooldown > world.time)
|
||||
var/mob/user = thrownby
|
||||
user.put_in_hands(src)
|
||||
return
|
||||
unwield(src)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/twohanded/skybulge/throw_impact(atom/target) //Praise be the ratvar spear for showing me how to use this proc.
|
||||
var/turf/turfhit = get_turf(target)
|
||||
var/mob/user = thrownby
|
||||
var/turf/source = get_turf(thrownby)
|
||||
|
||||
if(source.z == ZLEVEL_STATION && get_dist(turfhit, source) < maxdist || source.z != ZLEVEL_STATION)
|
||||
..()
|
||||
if(do_after_mob(user, src, 5, uninterruptible = 1, progress = 0))
|
||||
if(qdeleted(src))
|
||||
return
|
||||
var/turf/landing = get_turf(src)
|
||||
if (loc != landing)
|
||||
return
|
||||
user.forceMove(landing)
|
||||
throw_cooldown = world.time + 5 //Half a second between throws.
|
||||
user.put_in_hands(src)
|
||||
playsound(src, 'sound/weapons/laser2.ogg', 20, 1)
|
||||
@@ -10,8 +10,8 @@
|
||||
throwforce = 10
|
||||
throw_speed = 1
|
||||
throw_range = 7
|
||||
w_class = 4
|
||||
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 70, acid = 30)
|
||||
var/charges = list(0, 0, 0) //how many restocking "charges" the refill has for standard/contraband/coin products
|
||||
var/init_charges = list(0, 0, 0)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
/obj/item/weapon/vending_refill/examine(mob/user)
|
||||
..()
|
||||
if(charges[1] > 0)
|
||||
user << "It can restock [charges[1]] item(s)."
|
||||
user << "It can restock [charges[1]+charges[2]+charges[3]] item(s)."
|
||||
else
|
||||
user << "It's empty!"
|
||||
|
||||
@@ -57,17 +57,17 @@
|
||||
/obj/item/weapon/vending_refill/cigarette
|
||||
machine_name = "ShadyCigs Deluxe"
|
||||
icon_state = "refill_smoke"
|
||||
charges = list(12, 1, 2)// of 36 standard, 3 contraband, 6 premium
|
||||
init_charges = list(12, 1, 2)
|
||||
charges = list(12, 3, 2)// of 36 standard, 9 contraband, 6 premium
|
||||
init_charges = list(12, 3, 2)
|
||||
|
||||
/obj/item/weapon/vending_refill/autodrobe
|
||||
machine_name = "AutoDrobe"
|
||||
icon_state = "refill_costume"
|
||||
charges = list(27, 2, 3)// of 75 standard, 6 contraband, 9 premium
|
||||
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(31, 2, 4)// of 87 standard, 6 contraband, 10 premium(?)
|
||||
init_charges = list(31, 2, 4)
|
||||
charges = list(31, 4, 4)// of 101 standard, 12 contraband, 10 premium(?)
|
||||
init_charges = list(31, 4, 4)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
/obj/item/weapon
|
||||
|
||||
/obj/item/weapon/banhammer
|
||||
desc = "A banhammer"
|
||||
name = "banhammer"
|
||||
@@ -5,13 +7,17 @@
|
||||
icon_state = "toyhammer"
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 0
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
attack_verb = list("banned")
|
||||
obj_integrity = 200
|
||||
max_integrity = 200
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 70)
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/item/weapon/banhammer/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is hitting \himself with the [src.name]! It looks like \he's trying to ban \himself from life.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is hitting [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to ban [user.p_them()]self from life.</span>")
|
||||
return (BRUTELOSS|FIRELOSS|TOXLOSS|OXYLOSS)
|
||||
|
||||
/obj/item/weapon/banhammer/attack(mob/M, mob/user)
|
||||
@@ -27,13 +33,14 @@
|
||||
slot_flags = SLOT_BELT
|
||||
force = 2
|
||||
throwforce = 1
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
/obj/item/weapon/sord/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is trying to impale \himself with \the [name]! It might be a suicide attempt if it weren't so shitty.</span>", "<span class='suicide'>You try to impale yourself with \the [name], but it's USELESS...</span>")
|
||||
return(SHAME)
|
||||
user.visible_message("<span class='suicide'>[user] is trying to impale [user.p_them()]self with [src]! It might be a suicide attempt if it weren't so shitty.</span>", \
|
||||
"<span class='suicide'>You try to impale yourself with [src], but it's USELESS...</span>")
|
||||
return SHAME
|
||||
|
||||
/obj/item/weapon/claymore
|
||||
name = "claymore"
|
||||
@@ -45,15 +52,131 @@
|
||||
slot_flags = SLOT_BELT | SLOT_BACK
|
||||
force = 40
|
||||
throwforce = 10
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
block_chance = 50
|
||||
sharpness = IS_SHARP
|
||||
obj_integrity = 200
|
||||
max_integrity = 200
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/item/weapon/claymore/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is falling on [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return(BRUTELOSS)
|
||||
|
||||
var/highlander_claymores = 0
|
||||
/obj/item/weapon/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS
|
||||
desc = "<b><i>THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!</i></b>\nActivate it in your hand to point to the nearest victim."
|
||||
flags = CONDUCT | NODROP
|
||||
slot_flags = null
|
||||
block_chance = 0 //RNG WON'T HELP YOU NOW, PANSY
|
||||
attack_verb = list("brutalized", "eviscerated", "disemboweled", "hacked", "carved", "cleaved") //ONLY THE MOST VISCERAL ATTACK VERBS
|
||||
var/notches = 0 //HOW MANY PEOPLE HAVE BEEN SLAIN WITH THIS BLADE
|
||||
var/obj/item/weapon/disk/nuclear/nuke_disk //OUR STORED NUKE DISK
|
||||
|
||||
/obj/item/weapon/claymore/highlander/New()
|
||||
..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
highlander_claymores++
|
||||
|
||||
/obj/item/weapon/claymore/highlander/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
highlander_claymores--
|
||||
if(nuke_disk)
|
||||
nuke_disk.forceMove(get_turf(src))
|
||||
nuke_disk.visible_message("<span class='warning'>The nuke disk is vulnerable!</span>")
|
||||
nuke_disk = null
|
||||
return ..()
|
||||
|
||||
/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>"
|
||||
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!")
|
||||
|
||||
/obj/item/weapon/claymore/highlander/dropped(mob/living/user)
|
||||
qdel(src) //If this ever happens, it's because you lost an arm
|
||||
|
||||
/obj/item/weapon/claymore/highlander/examine(mob/user)
|
||||
..()
|
||||
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>"
|
||||
|
||||
/obj/item/weapon/claymore/highlander/attack(mob/living/target, mob/living/user)
|
||||
. = ..()
|
||||
if(target && target.stat == DEAD && target.mind && target.mind.special_role == "highlander")
|
||||
user.fully_heal() //STEAL THE LIFE OF OUR FALLEN FOES
|
||||
add_notch(user)
|
||||
target.visible_message("<span class='warning'>[target] crumbles to dust beneath [user]'s blows!</span>", "<span class='userdanger'>As you fall, your body crumbles to dust!</span>")
|
||||
target.dust()
|
||||
|
||||
/obj/item/weapon/claymore/highlander/attack_self(mob/living/user)
|
||||
var/closest_victim
|
||||
var/closest_distance = 255
|
||||
for(var/mob/living/carbon/human/H in player_list - user)
|
||||
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>"
|
||||
return
|
||||
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?
|
||||
|
||||
/obj/item/weapon/claymore/highlander/proc/add_notch(mob/living/user) //DYNAMIC CLAYMORE PROGRESSION SYSTEM - THIS IS THE FUTURE
|
||||
notches++
|
||||
force++
|
||||
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>"
|
||||
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>"
|
||||
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>"
|
||||
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>"
|
||||
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>"
|
||||
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>"
|
||||
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>"
|
||||
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>"
|
||||
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>"
|
||||
new_name = "gore-stained claymore"
|
||||
add_atom_colour(rgb(255, 95, 95), ADMIN_COLOUR_PRIORITY)
|
||||
if(10)
|
||||
user.visible_message("<span class='warning'>[user]'s eyes light up with a vengeful fire!</span>", \
|
||||
"<span class='userdanger'>YOU FEEL THE POWER OF VALHALLA FLOWING THROUGH YOU! <i>THERE CAN BE ONLY ONE!!!</i></span>")
|
||||
user.update_icons()
|
||||
new_name = "GORE-DRENCHED CLAYMORE OF [pick("THE WHIMSICAL SLAUGHTER", "A THOUSAND SLAUGHTERED CATTLE", "GLORY AND VALHALLA", "ANNIHILATION", "OBLITERATION")]"
|
||||
icon_state = "claymore_valhalla"
|
||||
item_state = "cultblade"
|
||||
remove_atom_colour(ADMIN_COLOUR_PRIORITY)
|
||||
|
||||
name = new_name
|
||||
playsound(user, 'sound/items/Screwdriver2.ogg', 50, 1)
|
||||
|
||||
/obj/item/weapon/katana
|
||||
name = "katana"
|
||||
desc = "Woefully underpowered in D20"
|
||||
@@ -63,17 +186,21 @@
|
||||
slot_flags = SLOT_BELT | SLOT_BACK
|
||||
force = 40
|
||||
throwforce = 10
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
block_chance = 50
|
||||
sharpness = IS_SHARP
|
||||
obj_integrity = 200
|
||||
max_integrity = 200
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/item/weapon/katana/cursed
|
||||
slot_flags = null
|
||||
|
||||
/obj/item/weapon/katana/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is slitting [user.p_their()] stomach open with [src]! It looks like [user.p_theyre()] trying to commit seppuku!</span>")
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/wirerod
|
||||
@@ -84,7 +211,7 @@
|
||||
flags = CONDUCT
|
||||
force = 9
|
||||
throwforce = 10
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
materials = list(MAT_METAL=1150, MAT_GLASS=75)
|
||||
attack_verb = list("hit", "bludgeoned", "whacked", "bonked")
|
||||
|
||||
@@ -125,11 +252,12 @@
|
||||
throwforce = 20 //This is never used on mobs since this has a 100% embed chance.
|
||||
throw_speed = 4
|
||||
embedded_pain_multiplier = 4
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
embed_chance = 100
|
||||
embedded_fall_chance = 0 //Hahaha!
|
||||
sharpness = IS_SHARP
|
||||
materials = list(MAT_METAL=500, MAT_GLASS=500)
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
|
||||
/obj/item/weapon/switchblade
|
||||
@@ -138,7 +266,7 @@
|
||||
desc = "A sharp, concealable, spring-loaded knife."
|
||||
flags = CONDUCT
|
||||
force = 3
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throwforce = 5
|
||||
throw_speed = 3
|
||||
throw_range = 6
|
||||
@@ -146,6 +274,7 @@
|
||||
origin_tech = "engineering=3;combat=2"
|
||||
hitsound = 'sound/weapons/Genhit.ogg'
|
||||
attack_verb = list("stubbed", "poked")
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/extended = 0
|
||||
|
||||
/obj/item/weapon/switchblade/attack_self(mob/user)
|
||||
@@ -153,7 +282,7 @@
|
||||
playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1)
|
||||
if(extended)
|
||||
force = 20
|
||||
w_class = 3
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
throwforce = 23
|
||||
icon_state = "switchblade_ext"
|
||||
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
@@ -161,7 +290,7 @@
|
||||
sharpness = IS_SHARP
|
||||
else
|
||||
force = 3
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throwforce = 5
|
||||
icon_state = "switchblade"
|
||||
attack_verb = list("stubbed", "poked")
|
||||
@@ -169,7 +298,7 @@
|
||||
sharpness = IS_BLUNT
|
||||
|
||||
/obj/item/weapon/switchblade/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is slitting \his own throat with the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is slitting [user.p_their()] own throat with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/phone
|
||||
@@ -181,15 +310,15 @@
|
||||
throwforce = 2
|
||||
throw_speed = 3
|
||||
throw_range = 4
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
attack_verb = list("called", "rang")
|
||||
hitsound = 'sound/weapons/ring.ogg'
|
||||
|
||||
/obj/item/weapon/phone/suicide_act(mob/user)
|
||||
if(locate(/obj/structure/chair/stool) in user.loc)
|
||||
user.visible_message("<span class='suicide'>[user] begins to tie a noose with the [src.name]'s cord! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] begins to tie a noose with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
else
|
||||
user.visible_message("<span class='suicide'>[user] is strangling \himself with the [src.name]'s cord! It looks like \he's trying to commit suicide.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is strangling [user.p_them()]self with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return(OXYLOSS)
|
||||
|
||||
/obj/item/weapon/cane
|
||||
@@ -200,7 +329,7 @@
|
||||
item_state = "stick"
|
||||
force = 5
|
||||
throwforce = 5
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
materials = list(MAT_METAL=50)
|
||||
attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed")
|
||||
|
||||
@@ -213,17 +342,17 @@
|
||||
throwforce = 5
|
||||
throw_speed = 2
|
||||
throw_range = 5
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
armour_penetration = 100
|
||||
attack_verb = list("bludgeoned", "whacked", "disciplined")
|
||||
burn_state = FLAMMABLE
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/weapon/staff/broom
|
||||
name = "broom"
|
||||
desc = "Used for sweeping, and flying into the night while cackling. Black cat not included."
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "broom"
|
||||
burn_state = FLAMMABLE
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/weapon/staff/stick
|
||||
name = "stick"
|
||||
@@ -235,7 +364,7 @@
|
||||
throwforce = 5
|
||||
throw_speed = 2
|
||||
throw_range = 5
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
/obj/item/weapon/ectoplasm
|
||||
name = "ectoplasm"
|
||||
@@ -245,7 +374,7 @@
|
||||
icon_state = "ectoplasm"
|
||||
|
||||
/obj/item/weapon/ectoplasm/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is inhaling the [src.name]! It looks like \he's trying to visit the astral plane.</span>")
|
||||
user.visible_message("<span class='suicide'>[user] is inhaling [src]! It looks like [user.p_theyre()] trying to visit the astral plane.</span>")
|
||||
return (OXYLOSS)
|
||||
|
||||
/obj/item/weapon/mounted_chainsaw
|
||||
@@ -254,7 +383,7 @@
|
||||
icon_state = "chainsaw_on"
|
||||
item_state = "mounted_chainsaw"
|
||||
flags = NODROP | ABSTRACT
|
||||
w_class = 5.0
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
force = 21
|
||||
throwforce = 0
|
||||
throw_range = 0
|
||||
@@ -268,6 +397,17 @@
|
||||
new /obj/item/weapon/twohanded/required/chainsaw(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/statuebust
|
||||
name = "bust"
|
||||
desc = "A priceless ancient marble bust, the kind that belongs in a museum." //or you can hit people with it
|
||||
icon = 'icons/obj/statue.dmi'
|
||||
icon_state = "bust"
|
||||
force = 15
|
||||
throwforce = 10
|
||||
throw_speed = 5
|
||||
throw_range = 2
|
||||
attack_verb = list("busted")
|
||||
|
||||
/obj/item/weapon/tailclub
|
||||
name = "tail club"
|
||||
desc = "For the beating to death of lizards with their own tails."
|
||||
@@ -292,9 +432,107 @@
|
||||
item_state = "skateboard"
|
||||
force = 12
|
||||
throwforce = 4
|
||||
w_class = 5.0
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
attack_verb = list("smacked", "whacked", "slammed", "smashed")
|
||||
|
||||
/obj/item/weapon/melee/skateboard/attack_self(mob/user)
|
||||
new /obj/vehicle/scooter/skateboard(get_turf(user))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/melee/baseball_bat
|
||||
name = "baseball bat"
|
||||
desc = "There ain't a skull in the league that can withstand a swatter."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "baseball_bat"
|
||||
item_state = "baseball_bat"
|
||||
force = 10
|
||||
throwforce = 12
|
||||
attack_verb = list("beat", "smacked")
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
var/homerun_ready = 0
|
||||
var/homerun_able = 0
|
||||
|
||||
/obj/item/weapon/melee/baseball_bat/homerun
|
||||
name = "home run bat"
|
||||
desc = "This thing looks dangerous... Dangerously good at baseball, that is."
|
||||
homerun_able = 1
|
||||
|
||||
/obj/item/weapon/melee/baseball_bat/attack_self(mob/user)
|
||||
if(!homerun_able)
|
||||
..()
|
||||
return
|
||||
if(homerun_ready)
|
||||
user << "<span class='notice'>You're already ready to do a home run!</span>"
|
||||
..()
|
||||
return
|
||||
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>"
|
||||
homerun_ready = 1
|
||||
..()
|
||||
|
||||
/obj/item/weapon/melee/baseball_bat/attack(mob/living/target, mob/living/user)
|
||||
. = ..()
|
||||
var/atom/throw_target = get_edge_target_turf(target, user.dir)
|
||||
if(homerun_ready)
|
||||
user.visible_message("<span class='userdanger'>It's a home run!</span>")
|
||||
target.throw_at(throw_target, rand(8,10), 14, user)
|
||||
target.ex_act(2)
|
||||
playsound(get_turf(src), 'sound/weapons/HOMERUN.ogg', 100, 1)
|
||||
homerun_ready = 0
|
||||
return
|
||||
else if(!target.anchored)
|
||||
target.throw_at(throw_target, rand(1,2), 7, user)
|
||||
|
||||
/obj/item/weapon/melee/baseball_bat/ablative
|
||||
name = "metal baseball bat"
|
||||
desc = "This bat is made of highly reflective, highly armored material."
|
||||
icon_state = "baseball_bat_metal"
|
||||
item_state = "baseball_bat_metal"
|
||||
force = 12
|
||||
throwforce = 15
|
||||
|
||||
/obj/item/weapon/melee/baseball_bat/ablative/IsReflect()//some day this will reflect thrown items instead of lasers
|
||||
var/picksound = rand(1,2)
|
||||
var/turf = get_turf(src)
|
||||
if(picksound == 1)
|
||||
playsound(turf, 'sound/weapons/effects/batreflect1.ogg', 50, 1)
|
||||
if(picksound == 2)
|
||||
playsound(turf, 'sound/weapons/effects/batreflect2.ogg', 50, 1)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/melee/flyswatter
|
||||
name = "Flyswatter"
|
||||
desc = "Useful for killing insects of all sizes."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "flyswatter"
|
||||
item_state = "flyswatter"
|
||||
force = 1
|
||||
throwforce = 1
|
||||
attack_verb = list("swatted", "smacked")
|
||||
hitsound = 'sound/effects/snap.ogg'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
//Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc.
|
||||
var/list/strong_against
|
||||
|
||||
/obj/item/weapon/melee/flyswatter/New()
|
||||
..()
|
||||
strong_against = typecacheof(list(
|
||||
/mob/living/simple_animal/hostile/poison/bees/,
|
||||
/mob/living/simple_animal/butterfly,
|
||||
/mob/living/simple_animal/cockroach,
|
||||
/obj/item/queen_bee
|
||||
))
|
||||
|
||||
|
||||
/obj/item/weapon/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(proximity_flag)
|
||||
if(is_type_in_typecache(target, strong_against))
|
||||
new /obj/effect/decal/cleanable/deadcockroach(get_turf(target))
|
||||
user << "<span class='warning'>You easily splat the [target].</span>"
|
||||
if(istype(target, /mob/living/))
|
||||
var/mob/living/bug = target
|
||||
bug.death(1)
|
||||
else
|
||||
qdel(target)
|
||||
|
||||
Reference in New Issue
Block a user