mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-15 18:06:48 +01:00
Merge remote-tracking branch 'upstream/dev' into sprites
Conflicts: icons/mob/items_lefthand.dmi icons/mob/items_righthand.dmi
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
/obj
|
||||
var/can_buckle = 0
|
||||
var/buckle_movable = 0
|
||||
var/buckle_lying = -1 //bed-like behavior, forces mob.lying = buckle_lying if != -1
|
||||
var/buckle_require_restraints = 0 //require people to be handcuffed before being able to buckle. eg: pipes
|
||||
var/mob/living/buckled_mob = null
|
||||
|
||||
/obj/attack_hand(mob/living/user)
|
||||
. = ..()
|
||||
if(can_buckle && buckled_mob)
|
||||
user_unbuckle_mob(user)
|
||||
|
||||
/obj/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
. = ..()
|
||||
if(can_buckle && istype(M))
|
||||
user_buckle_mob(M, user)
|
||||
|
||||
/obj/Del()
|
||||
unbuckle_mob()
|
||||
return ..()
|
||||
|
||||
/obj/proc/buckle_mob(mob/living/M)
|
||||
if(!can_buckle || !istype(M) || (M.loc != loc) || M.buckled || M.pinned.len || (buckle_require_restraints && !M.restrained()))
|
||||
return 0
|
||||
|
||||
M.buckled = src
|
||||
M.set_dir(dir)
|
||||
M.update_canmove()
|
||||
buckled_mob = M
|
||||
post_buckle_mob(M)
|
||||
return 1
|
||||
|
||||
/obj/proc/unbuckle_mob()
|
||||
if(buckled_mob && buckled_mob.buckled == src)
|
||||
. = buckled_mob
|
||||
buckled_mob.buckled = null
|
||||
buckled_mob.anchored = initial(buckled_mob.anchored)
|
||||
buckled_mob.update_canmove()
|
||||
buckled_mob = null
|
||||
|
||||
post_buckle_mob(.)
|
||||
|
||||
/obj/proc/post_buckle_mob(mob/living/M)
|
||||
return
|
||||
|
||||
/obj/proc/user_buckle_mob(mob/living/M, mob/user)
|
||||
if(!ticker)
|
||||
user << "<span class='warning'>You can't buckle anyone in before the game starts.</span>"
|
||||
if(!user.Adjacent(M) || user.restrained() || user.lying || user.stat || istype(user, /mob/living/silicon/pai))
|
||||
return
|
||||
|
||||
if(istype(M, /mob/living/carbon/slime))
|
||||
user << "<span class='warning'>The [M] is too squishy to buckle in.</span>"
|
||||
return
|
||||
|
||||
add_fingerprint(user)
|
||||
unbuckle_mob()
|
||||
|
||||
if(buckle_mob(M))
|
||||
if(M == user)
|
||||
M.visible_message(\
|
||||
"<span class='notice'>[M.name] buckles themselves to [src].</span>",\
|
||||
"<span class='notice'>You buckle yourself to [src].</span>",\
|
||||
"<span class='notice'>You hear metal clanking.</span>")
|
||||
else
|
||||
M.visible_message(\
|
||||
"<span class='danger'>[M.name] is buckled to [src] by [user.name]!</span>",\
|
||||
"<span class='danger'>You are buckled to [src] by [user.name]!</span>",\
|
||||
"<span class='notice'>You hear metal clanking.</span>")
|
||||
|
||||
/obj/proc/user_unbuckle_mob(mob/user)
|
||||
var/mob/living/M = unbuckle_mob()
|
||||
world << 3
|
||||
if(M)
|
||||
if(M != user)
|
||||
M.visible_message(\
|
||||
"<span class='notice'>[M.name] was unbuckled by [user.name]!</span>",\
|
||||
"<span class='notice'>You were unbuckled from [src] by [user.name].</span>",\
|
||||
"<span class='notice'>You hear metal clanking.</span>")
|
||||
else
|
||||
M.visible_message(\
|
||||
"<span class='notice'>[M.name] unbuckled themselves!</span>",\
|
||||
"<span class='notice'>You unbuckle yourself from [src].</span>",\
|
||||
"<span class='notice'>You hear metal clanking.</span>")
|
||||
add_fingerprint(user)
|
||||
return M
|
||||
@@ -165,7 +165,7 @@
|
||||
continue
|
||||
|
||||
var/offset = 0
|
||||
var/points = round((radius * 2 * PI) / arcLength)
|
||||
var/points = round((radius * 2 * M_PI) / arcLength)
|
||||
var/angle = round(ToDegrees(arcLength / radius), 1)
|
||||
|
||||
if(!IsInteger(radius))
|
||||
|
||||
@@ -233,6 +233,21 @@ steam.start() -- spawns the effect
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/////////////////////////////////////////////
|
||||
// Illumination
|
||||
/////////////////////////////////////////////
|
||||
|
||||
/obj/effect/effect/smoke/illumination
|
||||
name = "illumination"
|
||||
opacity = 0
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "sparks"
|
||||
|
||||
/obj/effect/effect/smoke/illumination/New(var/newloc, var/brightness=15, var/lifetime=10)
|
||||
time_to_live=lifetime
|
||||
..()
|
||||
SetLuminosity(brightness)
|
||||
|
||||
/////////////////////////////////////////////
|
||||
// Bad smoke
|
||||
/////////////////////////////////////////////
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
/obj/effect/expl_particles
|
||||
name = "explosive particles"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "explosion_particle"
|
||||
opacity = 1
|
||||
anchored = 1
|
||||
mouse_opacity = 0
|
||||
|
||||
/obj/effect/expl_particles/New()
|
||||
..()
|
||||
spawn (15)
|
||||
src.loc = null
|
||||
return
|
||||
|
||||
/obj/effect/expl_particles/Move()
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/effect/system/expl_particles
|
||||
var/number = 10
|
||||
var/turf/location
|
||||
var/total_particles = 0
|
||||
|
||||
/datum/effect/system/expl_particles/proc/set_up(n = 10, loca)
|
||||
number = n
|
||||
if(istype(loca, /turf/)) location = loca
|
||||
else location = get_turf(loca)
|
||||
|
||||
/datum/effect/system/expl_particles/proc/start()
|
||||
var/i = 0
|
||||
for(i=0, i<src.number, i++)
|
||||
spawn(0)
|
||||
var/obj/effect/expl_particles/expl = new /obj/effect/expl_particles(src.location)
|
||||
var/direct = pick(alldirs)
|
||||
for(i=0, i<pick(1;25,2;50,3,4;200), i++)
|
||||
sleep(1)
|
||||
step(expl,direct)
|
||||
|
||||
/obj/effect/explosion
|
||||
name = "explosive particles"
|
||||
icon = 'icons/effects/96x96.dmi'
|
||||
icon_state = "explosion"
|
||||
opacity = 1
|
||||
anchored = 1
|
||||
mouse_opacity = 0
|
||||
pixel_x = -32
|
||||
pixel_y = -32
|
||||
|
||||
/obj/effect/explosion/New()
|
||||
..()
|
||||
spawn (10)
|
||||
src.loc = null
|
||||
return
|
||||
|
||||
/datum/effect/system/explosion
|
||||
var/turf/location
|
||||
|
||||
/datum/effect/system/explosion/proc/set_up(loca)
|
||||
if(istype(loca, /turf/)) location = loca
|
||||
else location = get_turf(loca)
|
||||
|
||||
/datum/effect/system/explosion/proc/start()
|
||||
new/obj/effect/explosion( location )
|
||||
var/datum/effect/system/expl_particles/P = new/datum/effect/system/expl_particles()
|
||||
P.set_up(10,location)
|
||||
P.start()
|
||||
spawn(5)
|
||||
var/datum/effect/effect/system/smoke_spread/S = new/datum/effect/effect/system/smoke_spread()
|
||||
S.set_up(5,0,location,null)
|
||||
S.start()
|
||||
@@ -144,7 +144,7 @@
|
||||
/obj/effect/landmark/costume/elpresidente/New()
|
||||
new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
|
||||
new /obj/item/clothing/head/flatcap(src.loc)
|
||||
new /obj/item/clothing/mask/cigarette/cigar/havana(src.loc)
|
||||
new /obj/item/clothing/mask/smokable/cigarette/cigar/havana(src.loc)
|
||||
new /obj/item/clothing/shoes/jackboots(src.loc)
|
||||
del(src)
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
var/burning = null
|
||||
var/hitsound = null
|
||||
var/w_class = 3.0
|
||||
flags = FPRINT | TABLEPASS
|
||||
var/slot_flags = 0 //This is used to determine on which slots an item can fit.
|
||||
pass_flags = PASSTABLE
|
||||
pressure_resistance = 5
|
||||
@@ -142,9 +141,9 @@
|
||||
if(isliving(src.loc))
|
||||
return
|
||||
user.next_move = max(user.next_move+2,world.time + 2)
|
||||
src.pickup(user)
|
||||
add_fingerprint(user)
|
||||
user.put_in_active_hand(src)
|
||||
if(src.loc == user)
|
||||
src.pickup(user)
|
||||
return
|
||||
|
||||
|
||||
@@ -412,9 +411,9 @@
|
||||
H << "<span class='warning'>You need a jumpsuit before you can attach this [name].</span>"
|
||||
return 0
|
||||
var/obj/item/clothing/under/uniform = H.w_uniform
|
||||
if(uniform.hastie)
|
||||
if(uniform.accessories.len && !uniform.can_attach_accessory(src))
|
||||
if (!disable_warning)
|
||||
H << "<span class='warning'>You already have [uniform.hastie] attached to your [uniform].</span>"
|
||||
H << "<span class='warning'>You already have an accessory of this type attached to your [uniform].</span>"
|
||||
return 0
|
||||
if( !(slot_flags & SLOT_TIE) )
|
||||
return 0
|
||||
@@ -638,8 +637,8 @@ For zooming with scope or binoculars. This is called from
|
||||
modules/mob/mob_movement.dm if you move you will be zoomed out
|
||||
modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
*/
|
||||
|
||||
/obj/item/proc/zoom(var/tileoffset = 11,var/viewsize = 12) //tileoffset is client view offset in the direction the user is facing. viewsize is how far out this thing zooms. 7 is normal view
|
||||
//Looking through a scope or binoculars should /not/ improve your periphereal vision. Still, increase viewsize a tiny bit so that sniping isn't as restricted to NSEW
|
||||
/obj/item/proc/zoom(var/tileoffset = 14,var/viewsize = 9) //tileoffset is client view offset in the direction the user is facing. viewsize is how far out this thing zooms. 7 is normal view
|
||||
|
||||
var/devicename
|
||||
|
||||
@@ -686,14 +685,6 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
|
||||
usr.visible_message("[usr] peers through the [zoomdevicename ? "[zoomdevicename] of the [src.name]" : "[src.name]"].")
|
||||
|
||||
/*
|
||||
if(istype(usr,/mob/living/carbon/human/))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
usr.visible_message("[usr] holds [devicename] up to [H.get_visible_gender() == MALE ? "his" : H.get_visible_gender() == FEMALE ? "her" : "their"] eyes.")
|
||||
else
|
||||
usr.visible_message("[usr] holds [devicename] up to its eyes.")
|
||||
*/
|
||||
|
||||
else
|
||||
usr.client.view = world.view
|
||||
if(!usr.hud_used.hud_shown)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
desc = "Used for repairing or building APCs"
|
||||
icon = 'icons/obj/apc_repair.dmi'
|
||||
icon_state = "apc_frame"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
|
||||
/obj/item/apc_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
/obj/item/ashtray
|
||||
icon = 'icons/ashtray.dmi'
|
||||
var/
|
||||
max_butts = 0
|
||||
empty_desc = ""
|
||||
icon_empty = ""
|
||||
icon_half = ""
|
||||
icon_full = ""
|
||||
icon_broken = ""
|
||||
|
||||
/obj/item/ashtray/New()
|
||||
..()
|
||||
src.pixel_y = rand(-5, 5)
|
||||
src.pixel_x = rand(-6, 6)
|
||||
return
|
||||
|
||||
/obj/item/ashtray/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (health < 1)
|
||||
return
|
||||
if (istype(W,/obj/item/weapon/cigbutt) || istype(W,/obj/item/clothing/mask/smokable/cigarette) || istype(W, /obj/item/weapon/flame/match))
|
||||
if (contents.len >= max_butts)
|
||||
user << "This ashtray is full."
|
||||
return
|
||||
user.u_equip(W)
|
||||
W.loc = src
|
||||
|
||||
if (istype(W,/obj/item/clothing/mask/smokable/cigarette))
|
||||
var/obj/item/clothing/mask/smokable/cigarette/cig = W
|
||||
if (cig.lit == 1)
|
||||
src.visible_message("[user] crushes [cig] in [src], putting it out.")
|
||||
processing_objects.Remove(cig)
|
||||
var/obj/item/butt = new cig.type_butt(src)
|
||||
cig.transfer_fingerprints_to(butt)
|
||||
del(cig)
|
||||
W = butt
|
||||
else if (cig.lit == 0)
|
||||
user << "You place [cig] in [src] without even smoking it. Why would you do that?"
|
||||
|
||||
src.visible_message("[user] places [W] in [src].")
|
||||
user.update_inv_l_hand()
|
||||
user.update_inv_r_hand()
|
||||
add_fingerprint(user)
|
||||
if (contents.len == max_butts)
|
||||
icon_state = icon_full
|
||||
desc = empty_desc + " It's stuffed full."
|
||||
else if (contents.len > max_butts/2)
|
||||
icon_state = icon_half
|
||||
desc = empty_desc + " It's half-filled."
|
||||
else
|
||||
health = max(0,health - W.force)
|
||||
user << "You hit [src] with [W]."
|
||||
if (health < 1)
|
||||
die()
|
||||
return
|
||||
|
||||
/obj/item/ashtray/throw_impact(atom/hit_atom)
|
||||
if (health > 0)
|
||||
health = max(0,health - 3)
|
||||
if (health < 1)
|
||||
die()
|
||||
return
|
||||
if (contents.len)
|
||||
src.visible_message("\red [src] slams into [hit_atom] spilling its contents!")
|
||||
for (var/obj/item/clothing/mask/smokable/cigarette/O in contents)
|
||||
O.loc = src.loc
|
||||
icon_state = icon_empty
|
||||
return ..()
|
||||
|
||||
/obj/item/ashtray/proc/die()
|
||||
src.visible_message("\red [src] shatters spilling its contents!")
|
||||
for (var/obj/item/clothing/mask/smokable/cigarette/O in contents)
|
||||
O.loc = src.loc
|
||||
icon_state = icon_broken
|
||||
|
||||
/obj/item/ashtray/plastic
|
||||
name = "plastic ashtray"
|
||||
desc = "Cheap plastic ashtray."
|
||||
icon_state = "ashtray_bl"
|
||||
icon_empty = "ashtray_bl"
|
||||
icon_half = "ashtray_half_bl"
|
||||
icon_full = "ashtray_full_bl"
|
||||
icon_broken = "ashtray_bork_bl"
|
||||
max_butts = 14
|
||||
health = 24.0
|
||||
matter = list("metal" = 30,"glass" = 30)
|
||||
empty_desc = "Cheap plastic ashtray."
|
||||
throwforce = 3.0
|
||||
die()
|
||||
..()
|
||||
name = "pieces of plastic"
|
||||
desc = "Pieces of plastic with ash on them."
|
||||
return
|
||||
|
||||
|
||||
/obj/item/ashtray/bronze
|
||||
name = "bronze ashtray"
|
||||
desc = "Massive bronze ashtray."
|
||||
icon_state = "ashtray_br"
|
||||
icon_empty = "ashtray_br"
|
||||
icon_half = "ashtray_half_br"
|
||||
icon_full = "ashtray_full_br"
|
||||
icon_broken = "ashtray_bork_br"
|
||||
max_butts = 10
|
||||
health = 72.0
|
||||
matter = list("metal" = 80)
|
||||
empty_desc = "Massive bronze ashtray."
|
||||
throwforce = 10.0
|
||||
|
||||
die()
|
||||
..()
|
||||
name = "pieces of bronze"
|
||||
desc = "Pieces of bronze with ash on them."
|
||||
return
|
||||
|
||||
|
||||
/obj/item/ashtray/glass
|
||||
name = "glass ashtray"
|
||||
desc = "Glass ashtray. Looks fragile."
|
||||
icon_state = "ashtray_gl"
|
||||
icon_empty = "ashtray_gl"
|
||||
icon_half = "ashtray_half_gl"
|
||||
icon_full = "ashtray_full_gl"
|
||||
icon_broken = "ashtray_bork_gl"
|
||||
max_butts = 12
|
||||
health = 12.0
|
||||
matter = list("glass" = 60)
|
||||
empty_desc = "Glass ashtray. Looks fragile."
|
||||
throwforce = 6.0
|
||||
|
||||
die()
|
||||
..()
|
||||
name = "shards of glass"
|
||||
desc = "Shards of glass with ash on them."
|
||||
playsound(src, "shatter", 30, 1)
|
||||
return
|
||||
@@ -39,7 +39,7 @@
|
||||
close_sound = 'sound/items/zip.ogg'
|
||||
var/item_path = /obj/item/bodybag
|
||||
density = 0
|
||||
storage_capacity = (mob_size * 2) - 1
|
||||
storage_capacity = (default_mob_size * 2) - 1
|
||||
var/contains_body = 0
|
||||
|
||||
/obj/structure/closet/body_bag/attackby(W as obj, mob/user as mob)
|
||||
@@ -49,7 +49,7 @@
|
||||
return
|
||||
if (!in_range(src, user) && src.loc != user)
|
||||
return
|
||||
t = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
|
||||
t = sanitize(copytext(t,1,MAX_MESSAGE_LEN))
|
||||
if (t)
|
||||
src.name = "body bag - "
|
||||
src.name += t
|
||||
|
||||
@@ -91,7 +91,8 @@
|
||||
/obj/item/toy/crayon/attack(mob/M as mob, mob/user as mob)
|
||||
if(M == user)
|
||||
user << "You take a bite of the crayon and swallow it."
|
||||
// user.nutrition += 5
|
||||
user.nutrition += 1
|
||||
user.reagents.add_reagent("crayon_dust",min(5,uses)/3)
|
||||
if(uses)
|
||||
uses -= 5
|
||||
if(uses <= 0)
|
||||
|
||||
@@ -10,7 +10,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
icon_state = "pda"
|
||||
item_state = "electronic"
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_ID | SLOT_BELT
|
||||
|
||||
//Main variables
|
||||
@@ -537,7 +536,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
// update the ui if it exists, returns null if no ui is passed/found
|
||||
if(ui)
|
||||
ui.load_cached_data(ManifestJSON)
|
||||
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
|
||||
if (!ui)
|
||||
@@ -727,7 +726,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
U << "The PDA softly beeps."
|
||||
ui.close()
|
||||
else
|
||||
t = copytext(sanitize(t), 1, 20)
|
||||
t = sanitize(copytext(t, 1, 20))
|
||||
ttone = t
|
||||
else
|
||||
ui.close()
|
||||
@@ -736,7 +735,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
var/t = input(U, "Please enter new news tone", name, newstone) as text
|
||||
if (in_range(src, U) && loc == U)
|
||||
if (t)
|
||||
t = copytext(sanitize(t), 1, 20)
|
||||
t = sanitize(copytext(t, 1, 20))
|
||||
newstone = t
|
||||
else
|
||||
ui.close()
|
||||
@@ -972,7 +971,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
U.visible_message("<span class='notice'>[U] taps on \his PDA's screen.</span>")
|
||||
U.last_target_click = world.time
|
||||
var/t = input(U, "Please enter message", P.name, null) as text
|
||||
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
|
||||
t = sanitize(copytext(t, 1, MAX_MESSAGE_LEN))
|
||||
t = readd_quotes(t)
|
||||
if (!t || !istype(P))
|
||||
return
|
||||
|
||||
@@ -562,10 +562,10 @@
|
||||
if("alert")
|
||||
post_status("alert", href_list["alert"])
|
||||
if("setmsg1")
|
||||
message1 = reject_bad_text(trim(copytext(sanitize(input("Line 1", "Enter Message Text", message1) as text|null), 1, 40)), 40)
|
||||
message1 = reject_bad_text(trim(sanitize(copytext(input("Line 1", "Enter Message Text", message1) as text|null, 1, 40))), 40)
|
||||
updateSelfDialog()
|
||||
if("setmsg2")
|
||||
message2 = reject_bad_text(trim(copytext(sanitize(input("Line 2", "Enter Message Text", message2) as text|null), 1, 40)), 40)
|
||||
message2 = reject_bad_text(trim(sanitize(copytext(input("Line 2", "Enter Message Text", message2) as text|null, 1, 40))), 40)
|
||||
updateSelfDialog()
|
||||
else
|
||||
post_status(href_list["statdisp"])
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon_state = "aicard" // aicard-full
|
||||
item_state = "electronic"
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
var/flush = null
|
||||
origin_tech = "programming=4;materials=4"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "A pair of binoculars."
|
||||
icon_state = "binoculars"
|
||||
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
force = 5.0
|
||||
w_class = 2.0
|
||||
throwforce = 5.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/device/chameleon
|
||||
name = "chameleon projector"
|
||||
icon_state = "shield0"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
item_state = "electronic"
|
||||
throwforce = 5.0
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
desc = "Used to debug electronic equipment."
|
||||
icon = 'icons/obj/hacktool.dmi'
|
||||
icon_state = "hacktool-g"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
force = 5.0
|
||||
w_class = 2.0
|
||||
throwforce = 5.0
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
w_class = 2.0
|
||||
throw_speed = 4
|
||||
throw_range = 10
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
origin_tech = "magnets=2;combat=1"
|
||||
|
||||
var/times_used = 0 //Number of times it's been used.
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "flashlight"
|
||||
item_state = "flashlight"
|
||||
w_class = 2
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
matter = list("metal" = 50,"glass" = 20)
|
||||
@@ -106,7 +106,7 @@
|
||||
desc = "A pen-sized light, used by medical staff."
|
||||
icon_state = "penlight"
|
||||
item_state = ""
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
brightness_on = 2
|
||||
w_class = 1
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
desc = "A miniature lamp, that might be used by small robots."
|
||||
icon_state = "penlight"
|
||||
item_state = ""
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
brightness_on = 2
|
||||
w_class = 1
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
item_state = "lamp"
|
||||
brightness_on = 5
|
||||
w_class = 4
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
|
||||
on = 1
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
icon_state = "lightreplacer0"
|
||||
item_state = "electronic"
|
||||
|
||||
flags = FPRINT | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "magnets=3;materials=2"
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "megaphone"
|
||||
item_state = "radio"
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
|
||||
var/spamcheck = 0
|
||||
var/emagged = 0
|
||||
@@ -25,7 +25,7 @@
|
||||
user << "\red \The [src] needs to recharge!"
|
||||
return
|
||||
|
||||
var/message = copytext(sanitize(input(user, "Shout a message?", "Megaphone", null) as text),1,MAX_MESSAGE_LEN)
|
||||
var/message = sanitize(copytext(input(user, "Shout a message?", "Megaphone", null) as text,1,MAX_MESSAGE_LEN))
|
||||
if(!message)
|
||||
return
|
||||
message = capitalize(message)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
name = "multitool"
|
||||
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors."
|
||||
icon_state = "multitool"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
force = 5.0
|
||||
w_class = 2.0
|
||||
throwforce = 5.0
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon_state = "pai"
|
||||
item_state = "electronic"
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "programming=2"
|
||||
var/obj/item/device/radio/radio
|
||||
@@ -261,7 +260,7 @@
|
||||
if(2)
|
||||
radio.ToggleReception()
|
||||
if(href_list["setlaws"])
|
||||
var/newlaws = copytext(sanitize(input("Enter any additional directives you would like your pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", "pAI Directive Configuration", pai.pai_laws) as message),1,MAX_MESSAGE_LEN)
|
||||
var/newlaws = sanitize(copytext(input("Enter any additional directives you would like your pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", "pAI Directive Configuration", pai.pai_laws) as message,1,MAX_MESSAGE_LEN))
|
||||
if(newlaws)
|
||||
pai.pai_laws = newlaws
|
||||
pai << "Your supplemental directives have been updated. Your new directives are:"
|
||||
@@ -282,6 +281,8 @@
|
||||
src.overlays.Cut()
|
||||
src.overlays += "pai-off"
|
||||
|
||||
/obj/item/device/paicard
|
||||
var/current_emotion = 1
|
||||
/obj/item/device/paicard/proc/setEmotion(var/emotion)
|
||||
if(pai)
|
||||
src.overlays.Cut()
|
||||
@@ -295,6 +296,7 @@
|
||||
if(7) src.overlays += "pai-sad"
|
||||
if(8) src.overlays += "pai-angry"
|
||||
if(9) src.overlays += "pai-what"
|
||||
current_emotion = emotion
|
||||
|
||||
/obj/item/device/paicard/proc/alertUpdate()
|
||||
var/turf/T = get_turf_or_move(src.loc)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
icon_state = "powersink0"
|
||||
item_state = "electronic"
|
||||
w_class = 4.0
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
throwforce = 5
|
||||
throw_speed = 1
|
||||
throw_range = 2
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "electropack0"
|
||||
item_state = "electropack"
|
||||
frequency = 1449
|
||||
flags = FPRINT | CONDUCT | TABLEPASS
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = 5.0
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
anchored = 1
|
||||
w_class = 4.0
|
||||
canhear_range = 2
|
||||
flags = FPRINT | CONDUCT | TABLEPASS | NOBLOODY
|
||||
flags = CONDUCT | NOBLOODY
|
||||
var/number = 0
|
||||
var/anyai = 1
|
||||
var/mob/living/silicon/ai/ai = list()
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
var/syndie = 0//Holder to see if it's a syndicate encrpyed radio
|
||||
var/maxf = 1499
|
||||
// "Example" = FREQ_LISTENING|FREQ_BROADCASTING
|
||||
flags = FPRINT | CONDUCT | TABLEPASS
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
throw_speed = 2
|
||||
throw_range = 9
|
||||
@@ -115,13 +115,10 @@
|
||||
listening = !listening && !(wires.IsIndexCut(WIRE_RECEIVE) || wires.IsIndexCut(WIRE_SIGNAL))
|
||||
|
||||
/obj/item/device/radio/Topic(href, href_list)
|
||||
//..()
|
||||
if (usr.stat || !on)
|
||||
return
|
||||
|
||||
if (!(issilicon(usr) || (usr.contents.Find(src) || ( in_range(src, usr) && istype(loc, /turf) ))))
|
||||
if(..() || !on)
|
||||
usr << browse(null, "window=radio")
|
||||
return
|
||||
|
||||
usr.set_machine(src)
|
||||
if (href_list["track"])
|
||||
var/mob/target = locate(href_list["track"])
|
||||
@@ -152,17 +149,7 @@
|
||||
else
|
||||
channels[chan_name] |= FREQ_LISTENING
|
||||
|
||||
if (!( master ))
|
||||
if (istype(loc, /mob))
|
||||
interact(loc)
|
||||
else
|
||||
updateDialog()
|
||||
else
|
||||
if (istype(master.loc, /mob))
|
||||
interact(master.loc)
|
||||
else
|
||||
updateDialog()
|
||||
add_fingerprint(usr)
|
||||
interact(usr)
|
||||
|
||||
/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel) //BS12 EDIT
|
||||
var/datum/radio_frequency/connection = null
|
||||
@@ -194,7 +181,7 @@
|
||||
return radio_connection
|
||||
|
||||
// Otherwise, if a channel is specified, look for it.
|
||||
if(channels)
|
||||
if(channels && channels.len > 0)
|
||||
if (message_mode == "department") // Department radio shortcut
|
||||
message_mode = channels[1]
|
||||
|
||||
@@ -506,6 +493,7 @@
|
||||
icon = 'icons/obj/robot_component.dmi' // Cyborgs radio icons should look like the component.
|
||||
icon_state = "radio"
|
||||
canhear_range = 3
|
||||
subspace_transmission = 1
|
||||
|
||||
/obj/item/device/radio/borg/talk_into()
|
||||
. = ..()
|
||||
@@ -594,11 +582,11 @@
|
||||
if (href_list["mode"])
|
||||
if(subspace_transmission != 1)
|
||||
subspace_transmission = 1
|
||||
usr << "Subspace Transmission is disabled"
|
||||
usr << "Subspace Transmission is enabled"
|
||||
else
|
||||
subspace_transmission = 0
|
||||
usr << "Subspace Transmission is enabled"
|
||||
if(subspace_transmission == 1)//Simple as fuck, clears the channel list to prevent talking/listening over them if subspace transmission is disabled
|
||||
usr << "Subspace Transmission is disabled"
|
||||
if(subspace_transmission == 0)//Simple as fuck, clears the channel list to prevent talking/listening over them if subspace transmission is disabled
|
||||
channels = list()
|
||||
else
|
||||
recalculateChannels()
|
||||
@@ -625,10 +613,10 @@
|
||||
<A href='byond://?src=\ref[src];freq=2'>+</A>
|
||||
<A href='byond://?src=\ref[src];freq=10'>+</A><BR>
|
||||
<A href='byond://?src=\ref[src];mode=1'>Toggle Broadcast Mode</A><BR>
|
||||
<A href='byond://?src=\ref[src];shutup=1'>Toggle Loudspeaker</A><BR>
|
||||
Loudspeaker: [shut_up ? "<A href='byond://?src=\ref[src];shutup=0'>Disengaged</A>" : "<A href='byond://?src=\ref[src];shutup=1'>Engaged</A>"]<BR>
|
||||
"}
|
||||
|
||||
if(!subspace_transmission)//Don't even bother if subspace isn't turned on
|
||||
if(subspace_transmission)//Don't even bother if subspace isn't turned on
|
||||
for (var/ch_name in channels)
|
||||
dat+=text_sec_channel(ch_name, channels[ch_name])
|
||||
dat+={"[text_wires()]</TT></body></html>"}
|
||||
|
||||
@@ -13,7 +13,6 @@ REAGENT SCANNER
|
||||
desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
|
||||
icon_state = "t-ray0"
|
||||
var/on = 0
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2
|
||||
item_state = "electronic"
|
||||
@@ -69,7 +68,7 @@ REAGENT SCANNER
|
||||
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
|
||||
icon_state = "health"
|
||||
item_state = "analyzer"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = 2.0
|
||||
@@ -232,7 +231,7 @@ REAGENT SCANNER
|
||||
icon_state = "atmos"
|
||||
item_state = "analyzer"
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
@@ -279,7 +278,7 @@ REAGENT SCANNER
|
||||
icon_state = "spectrometer"
|
||||
item_state = "analyzer"
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | OPENCONTAINER
|
||||
flags = CONDUCT | OPENCONTAINER
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
@@ -353,7 +352,7 @@ REAGENT SCANNER
|
||||
icon_state = "spectrometer"
|
||||
item_state = "analyzer"
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
/obj/item/device/spy_bug
|
||||
name = "bug"
|
||||
desc = "" // Nothing to see here
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "eshield0"
|
||||
item_state = "nothing"
|
||||
layer = TURF_LAYER+0.2
|
||||
|
||||
flags = CONDUCT
|
||||
force = 5.0
|
||||
w_class = 1.0
|
||||
throwforce = 5.0
|
||||
throw_range = 15
|
||||
throw_speed = 3
|
||||
|
||||
origin_tech = "programming=1;engineering=1;syndicate=3"
|
||||
|
||||
var/obj/item/device/radio/spy/radio
|
||||
var/obj/machinery/camera/spy/camera
|
||||
|
||||
/obj/item/device/spy_bug/New()
|
||||
..()
|
||||
radio = new(src)
|
||||
camera = new(src)
|
||||
|
||||
/obj/item/device/spy_bug/examine(mob/user)
|
||||
. = ..(user, 0)
|
||||
if(.)
|
||||
user << "It's a tiny camera, microphone, and transmission device in a happy union."
|
||||
user << "Needs to be both configured and brought in contact with monitor device to be fully functional."
|
||||
|
||||
/obj/item/device/spy_bug/attack_self(mob/user)
|
||||
radio.attack_self(user)
|
||||
|
||||
/obj/item/device/spy_bug/attackby(obj/W as obj, mob/living/user as mob)
|
||||
if(istype(W, /obj/item/device/spy_monitor))
|
||||
var/obj/item/device/spy_monitor/SM = W
|
||||
SM.pair(src, user)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/device/spy_bug/hear_talk(mob/M, var/msg, verb, datum/language/speaking)
|
||||
radio.hear_talk(M, msg, speaking)
|
||||
|
||||
|
||||
/obj/item/device/spy_monitor
|
||||
name = "\improper PDA"
|
||||
desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge."
|
||||
icon = 'icons/obj/pda.dmi'
|
||||
icon_state = "pda"
|
||||
item_state = "electronic"
|
||||
|
||||
w_class = 2.0
|
||||
|
||||
origin_tech = "programming=1;engineering=1;syndicate=3"
|
||||
|
||||
var/operating = 0
|
||||
var/obj/item/device/radio/spy/radio
|
||||
var/obj/machinery/camera/spy/selected_camera
|
||||
var/list/obj/machinery/camera/spy/cameras = new()
|
||||
|
||||
/obj/item/device/spy_monitor/New()
|
||||
radio = new(src)
|
||||
|
||||
/obj/item/device/spy_monitor/examine(mob/user)
|
||||
. = ..(user, 1)
|
||||
if(.)
|
||||
user << "The time '12:00' is blinking in the corner of the screen and \the [src] looks very cheaply made."
|
||||
|
||||
/obj/item/device/spy_monitor/attack_self(mob/user)
|
||||
if(operating)
|
||||
return
|
||||
|
||||
radio.attack_self(user)
|
||||
view_cameras(user)
|
||||
|
||||
/obj/item/device/spy_monitor/attackby(obj/W as obj, mob/living/user as mob)
|
||||
if(istype(W, /obj/item/device/spy_bug))
|
||||
pair(W, user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/device/spy_monitor/proc/pair(var/obj/item/device/spy_bug/SB, var/mob/living/user)
|
||||
if(SB.camera in cameras)
|
||||
user << "<span class='notice'>\The [SB] has been unpaired from \the [src].</span>"
|
||||
cameras -= SB.camera
|
||||
else
|
||||
user << "<span class='notice'>\The [SB] has been paired with \the [src].</span>"
|
||||
cameras += SB.camera
|
||||
|
||||
/obj/item/device/spy_monitor/proc/view_cameras(mob/user)
|
||||
if(!can_use_cam(user))
|
||||
return
|
||||
|
||||
selected_camera = cameras[1]
|
||||
view_camera(user)
|
||||
|
||||
operating = 1
|
||||
while(selected_camera && Adjacent(user))
|
||||
selected_camera = input("Select camera bug to view.") as null|anything in cameras
|
||||
selected_camera = null
|
||||
operating = 0
|
||||
|
||||
/obj/item/device/spy_monitor/proc/view_camera(mob/user)
|
||||
spawn(0)
|
||||
while(selected_camera && Adjacent(user))
|
||||
var/turf/T = get_turf(selected_camera)
|
||||
if(!T || !is_on_same_plane_or_station(T.z, user.z) || !selected_camera.can_use())
|
||||
user.unset_machine()
|
||||
user.reset_view(null)
|
||||
user << "<span class='notice'>[selected_camera] unavailable.</span>"
|
||||
sleep(90)
|
||||
else
|
||||
user.set_machine(selected_camera)
|
||||
user.reset_view(selected_camera)
|
||||
sleep(10)
|
||||
user.unset_machine()
|
||||
user.reset_view(null)
|
||||
|
||||
/obj/item/device/spy_monitor/proc/can_use_cam(mob/user)
|
||||
if(operating)
|
||||
return
|
||||
|
||||
if(!cameras.len)
|
||||
user << "<span class='warning'>No paired cameras detected!</span>"
|
||||
user << "<span class='warning'>Bring a bug in contact with this device to pair the camera.</span>"
|
||||
return
|
||||
|
||||
return 1
|
||||
|
||||
/obj/item/device/spy_monitor/hear_talk(mob/M, var/msg, verb, datum/language/speaking)
|
||||
return radio.hear_talk(M, msg, speaking)
|
||||
|
||||
|
||||
/obj/machinery/camera/spy
|
||||
// These cheap toys are accessible from the mercenary camera console as well
|
||||
network = list("NUKE")
|
||||
|
||||
/obj/machinery/camera/spy/New()
|
||||
..()
|
||||
name = "DV-136ZB #[rand(1000,9999)]"
|
||||
c_tag = name
|
||||
cameranet.removeCamera(src) // Sorry, no AI spying.
|
||||
|
||||
/obj/machinery/camera/spy/check_eye(var/mob/user as mob)
|
||||
return 1
|
||||
|
||||
/obj/item/device/radio/spy
|
||||
listening = 0
|
||||
frequency = 1473
|
||||
broadcasting = 0
|
||||
canhear_range = 1
|
||||
name = "spy device"
|
||||
icon_state = "syn_cypherkey"
|
||||
@@ -7,7 +7,7 @@
|
||||
slot_flags = SLOT_BACK //you can carry it on your back if you want, but it won't do anything unless attached to suit storage
|
||||
|
||||
//copied from tank.dm
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
force = 5.0
|
||||
throwforce = 10.0
|
||||
throw_speed = 1
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/list/storedinfo = new/list()
|
||||
var/list/timestamp = new/list()
|
||||
var/canprint = 1
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
throwforce = 2
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
|
||||
@@ -22,7 +22,7 @@ effective or pretty fucking useless.
|
||||
w_class = 1.0
|
||||
throw_speed = 4
|
||||
throw_range = 10
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
item_state = "electronic"
|
||||
origin_tech = "magnets=3;combat=3;syndicate=3"
|
||||
|
||||
|
||||
@@ -108,6 +108,9 @@ datum/nano_item_lists
|
||||
return pick(random_items)
|
||||
|
||||
/obj/item/device/uplink/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(href_list["buy_item"] == "random")
|
||||
var/datum/uplink_item/UI = chooseRandomItem()
|
||||
href_list["buy_item"] = UI.reference
|
||||
@@ -208,10 +211,10 @@ datum/nano_item_lists
|
||||
// The purchasing code.
|
||||
/obj/item/device/uplink/hidden/Topic(href, href_list)
|
||||
if (usr.stat || usr.restrained())
|
||||
return
|
||||
return 1
|
||||
|
||||
if (!( istype(usr, /mob/living/carbon/human)))
|
||||
return 0
|
||||
return 1
|
||||
var/mob/user = usr
|
||||
var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main")
|
||||
if ((usr.contents.Find(src.loc) || (in_range(src.loc, usr) && istype(src.loc.loc, /turf))))
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "voice0"
|
||||
item_state = "flashbang" //looks exactly like a flash (and nothing like a flashbang)
|
||||
w_class = 1.0
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
|
||||
var/spamcheck = 0
|
||||
var/emagged = 0
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
icon = 'icons/obj/robot_parts.dmi'
|
||||
item_state = "buildpipe"
|
||||
icon_state = "blank"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
var/construction_time = 100
|
||||
var/list/construction_cost = list("metal"=20000,"glass"=5000)
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
usr << "There's no mounting point for the module!"
|
||||
return 0
|
||||
|
||||
var/obj/item/weapon/gun/energy/taser/cyborg/T = locate() in R.module
|
||||
var/obj/item/weapon/gun/energy/taser/mounted/cyborg/T = locate() in R.module
|
||||
if(!T)
|
||||
T = locate() in R.module.contents
|
||||
if(!T)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "Some rods. Can be used for building, or something."
|
||||
singular_name = "metal rod"
|
||||
icon_state = "rods"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
w_class = 3.0
|
||||
force = 9.0
|
||||
throwforce = 15.0
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
throwforce = 5.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
max_amount = 60
|
||||
|
||||
/obj/item/stack/light_w/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
|
||||
@@ -29,7 +29,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
|
||||
null, \
|
||||
new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts, 2), \
|
||||
new/datum/stack_recipe("rack parts", /obj/item/weapon/table_parts/rack), \
|
||||
new/datum/stack_recipe("metal baseball bat", /obj/item/weapon/baseballbat/metal, 10, time = 20, one_per_turf = 0, on_floor = 1), \
|
||||
new/datum/stack_recipe("metal baseball bat", /obj/item/weapon/twohanded/baseballbat/metal, 10, time = 20, one_per_turf = 0, on_floor = 1), \
|
||||
new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1), \
|
||||
null, \
|
||||
new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1), \
|
||||
@@ -82,7 +82,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
|
||||
icon_state = "sheet-metal"
|
||||
matter = list("metal" = 3750)
|
||||
throwforce = 14.0
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
origin_tech = "materials=1"
|
||||
|
||||
/obj/item/stack/sheet/metal/cyborg
|
||||
@@ -91,7 +91,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
|
||||
singular_name = "metal sheet"
|
||||
icon_state = "sheet-metal"
|
||||
throwforce = 14.0
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
stacktype = /obj/item/stack/sheet/metal
|
||||
|
||||
/obj/item/stack/sheet/metal/New(var/loc, var/amount=null)
|
||||
@@ -118,7 +118,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \
|
||||
item_state = "sheet-metal"
|
||||
matter = list("metal" = 7500)
|
||||
throwforce = 15.0
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
origin_tech = "materials=2"
|
||||
|
||||
/obj/item/stack/sheet/plasteel/New(var/loc, var/amount=null)
|
||||
@@ -137,7 +137,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
|
||||
new/datum/stack_recipe("crossbow frame", /obj/item/weapon/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0), \
|
||||
new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("baseball bat", /obj/item/weapon/baseballbat, 10, time = 20, one_per_turf = 0, on_floor = 1) \
|
||||
new/datum/stack_recipe("baseball bat", /obj/item/weapon/twohanded/baseballbat, 10, time = 20, one_per_turf = 0, on_floor = 1) \
|
||||
// new/datum/stack_recipe("apiary", /obj/item/apiary, 10, time = 25, one_per_turf = 0, on_floor = 0)
|
||||
)
|
||||
|
||||
@@ -197,7 +197,6 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
|
||||
desc = "Large sheets of card, like boxes folded flat."
|
||||
singular_name = "cardboard sheet"
|
||||
icon_state = "sheet-card"
|
||||
flags = FPRINT | TABLEPASS
|
||||
origin_tech = "materials=1"
|
||||
|
||||
/obj/item/stack/sheet/cardboard/New(var/loc, var/amount=null)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/obj/item/stack/sheet
|
||||
name = "sheet"
|
||||
flags = FPRINT | TABLEPASS
|
||||
w_class = 3.0
|
||||
force = 5
|
||||
throwforce = 5
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
throwforce = 5.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
max_amount = 60
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed")
|
||||
var/on = 1
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
throwforce = 15.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
max_amount = 60
|
||||
|
||||
/obj/item/stack/tile/plasteel/New(var/loc, var/amount=null)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
throwforce = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
max_amount = 60
|
||||
origin_tech = "biotech=1"
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
throwforce = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
max_amount = 60
|
||||
|
||||
/*
|
||||
@@ -51,5 +51,5 @@
|
||||
throwforce = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
max_amount = 60
|
||||
|
||||
@@ -98,6 +98,18 @@
|
||||
icon_state = "syndballoon"
|
||||
item_state = "syndballoon"
|
||||
w_class = 4.0
|
||||
|
||||
/obj/item/toy/nanotrasenballoon
|
||||
name = "criminal balloon"
|
||||
desc = "Across the balloon the following is printed: \"Man, I love NT soooo much. I use only NanoTrasen products. You have NO idea.\""
|
||||
throwforce = 0
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
force = 0
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "ntballoon"
|
||||
item_state = "ntballoon"
|
||||
w_class = 4.0
|
||||
|
||||
/*
|
||||
* Fake telebeacon
|
||||
@@ -127,8 +139,8 @@
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "revolver"
|
||||
item_state = "gun"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT|SLOT_HOLSTER
|
||||
w_class = 3.0
|
||||
|
||||
matter = list("glass" = 10,"metal" = 10)
|
||||
@@ -183,7 +195,7 @@
|
||||
desc = "There are 7 caps left! Make sure to recyle the box in an autolathe when it gets empty."
|
||||
icon = 'icons/obj/ammo.dmi'
|
||||
icon_state = "357-7"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
w_class = 1.0
|
||||
|
||||
matter = list("metal" = 10,"glass" = 10)
|
||||
@@ -205,7 +217,6 @@
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "crossbow"
|
||||
item_state = "crossbow"
|
||||
flags = FPRINT | TABLEPASS
|
||||
w_class = 2.0
|
||||
attack_verb = list("attacked", "struck", "hit")
|
||||
var/bullets = 5
|
||||
@@ -299,7 +310,6 @@
|
||||
desc = "It's nerf or nothing! Ages 8 and up."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "foamdart"
|
||||
flags = FPRINT | TABLEPASS
|
||||
w_class = 1.0
|
||||
|
||||
/obj/effect/foam_dart_dummy
|
||||
@@ -322,7 +332,7 @@
|
||||
item_state = "sword0"
|
||||
var/active = 0.0
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS | NOSHIELD
|
||||
flags = NOSHIELD
|
||||
attack_verb = list("attacked", "struck", "hit")
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
@@ -354,7 +364,7 @@
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "katana"
|
||||
item_state = "katana"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT | SLOT_BACK
|
||||
force = 5
|
||||
throwforce = 5
|
||||
@@ -382,6 +392,10 @@
|
||||
viewers(user) << "\red <b>[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide.</b>"
|
||||
return (BRUTELOSS|OXYLOSS)
|
||||
|
||||
New()
|
||||
name = "[colourName] crayon"
|
||||
..()
|
||||
|
||||
/*
|
||||
* Snap pops
|
||||
*/
|
||||
@@ -570,7 +584,7 @@
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "katana"
|
||||
item_state = "katana"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT | SLOT_BACK
|
||||
force = 5
|
||||
throwforce = 5
|
||||
@@ -643,6 +657,5 @@
|
||||
desc = "No bother to sink or swim when you can just float!"
|
||||
icon_state = "inflatable"
|
||||
item_state = "inflatable"
|
||||
flags = FPRINT | TABLEPASS
|
||||
icon = 'icons/obj/clothing/belts.dmi'
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
@@ -12,7 +12,7 @@ AI MODULES
|
||||
icon_state = "std_mod"
|
||||
item_state = "electronic"
|
||||
desc = "An AI Module for transmitting encrypted instructions to the AI."
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
force = 5.0
|
||||
w_class = 2.0
|
||||
throwforce = 5.0
|
||||
@@ -261,7 +261,7 @@ AI MODULES
|
||||
if(new_lawpos < 15) return
|
||||
lawpos = min(new_lawpos, 50)
|
||||
var/newlaw = ""
|
||||
var/targName = copytext(sanitize(input(usr, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw)),1,MAX_MESSAGE_LEN)
|
||||
var/targName = sanitize(copytext(input(usr, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw),1,MAX_MESSAGE_LEN))
|
||||
newFreeFormLaw = targName
|
||||
desc = "A 'freeform' AI module: ([lawpos]) '[newFreeFormLaw]'"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
opacity = 0
|
||||
density = 0
|
||||
anchored = 0.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
force = 10.0
|
||||
throwforce = 10.0
|
||||
throw_speed = 1
|
||||
|
||||
@@ -14,7 +14,6 @@ RSF
|
||||
anchored = 0.0
|
||||
var/stored_matter = 30
|
||||
var/mode = 1
|
||||
flags = TABLEPASS
|
||||
w_class = 3.0
|
||||
|
||||
/obj/item/weapon/rsf/examine(mob/user)
|
||||
@@ -100,7 +99,7 @@ RSF
|
||||
product = new /obj/item/weapon/storage/pill_bottle/dice()
|
||||
used_energy = 200
|
||||
if(6)
|
||||
product = new /obj/item/clothing/mask/cigarette()
|
||||
product = new /obj/item/clothing/mask/smokable/cigarette()
|
||||
used_energy = 10
|
||||
|
||||
user << "Dispensing [product ? product : "product"]..."
|
||||
|
||||
@@ -0,0 +1,206 @@
|
||||
|
||||
//moved these here from code/defines/obj/weapon.dm
|
||||
//please preference put stuff where it's easy to find - C
|
||||
|
||||
/obj/item/weapon/autopsy_scanner
|
||||
name = "autopsy scanner"
|
||||
desc = "Extracts information on wounds."
|
||||
icon = 'icons/obj/autopsy_scanner.dmi'
|
||||
icon_state = ""
|
||||
flags = CONDUCT
|
||||
w_class = 2.0
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
var/list/datum/autopsy_data_scanner/wdata = list()
|
||||
var/list/datum/autopsy_data_scanner/chemtraces = list()
|
||||
var/target_name = null
|
||||
var/timeofdeath = null
|
||||
|
||||
/datum/autopsy_data_scanner
|
||||
var/weapon = null // this is the DEFINITE weapon type that was used
|
||||
var/list/organs_scanned = list() // this maps a number of scanned organs to
|
||||
// the wounds to those organs with this data's weapon type
|
||||
var/organ_names = ""
|
||||
|
||||
/datum/autopsy_data
|
||||
var/weapon = null
|
||||
var/pretend_weapon = null
|
||||
var/damage = 0
|
||||
var/hits = 0
|
||||
var/time_inflicted = 0
|
||||
|
||||
proc/copy()
|
||||
var/datum/autopsy_data/W = new()
|
||||
W.weapon = weapon
|
||||
W.pretend_weapon = pretend_weapon
|
||||
W.damage = damage
|
||||
W.hits = hits
|
||||
W.time_inflicted = time_inflicted
|
||||
return W
|
||||
|
||||
/obj/item/weapon/autopsy_scanner/proc/add_data(var/datum/organ/external/O)
|
||||
if(!O.autopsy_data.len && !O.trace_chemicals.len) return
|
||||
|
||||
for(var/V in O.autopsy_data)
|
||||
var/datum/autopsy_data/W = O.autopsy_data[V]
|
||||
|
||||
if(!W.pretend_weapon)
|
||||
/*
|
||||
// the more hits, the more likely it is that we get the right weapon type
|
||||
if(prob(50 + W.hits * 10 + W.damage))
|
||||
*/
|
||||
|
||||
// Buffing this stuff up for now!
|
||||
if(1)
|
||||
W.pretend_weapon = W.weapon
|
||||
else
|
||||
W.pretend_weapon = pick("mechanical toolbox", "wirecutters", "revolver", "crowbar", "fire extinguisher", "tomato soup", "oxygen tank", "emergency oxygen tank", "laser", "bullet")
|
||||
|
||||
|
||||
var/datum/autopsy_data_scanner/D = wdata[V]
|
||||
if(!D)
|
||||
D = new()
|
||||
D.weapon = W.weapon
|
||||
wdata[V] = D
|
||||
|
||||
if(!D.organs_scanned[O.name])
|
||||
if(D.organ_names == "")
|
||||
D.organ_names = O.display_name
|
||||
else
|
||||
D.organ_names += ", [O.display_name]"
|
||||
|
||||
del D.organs_scanned[O.name]
|
||||
D.organs_scanned[O.name] = W.copy()
|
||||
|
||||
for(var/V in O.trace_chemicals)
|
||||
if(O.trace_chemicals[V] > 0 && !chemtraces.Find(V))
|
||||
chemtraces += V
|
||||
|
||||
/obj/item/weapon/autopsy_scanner/verb/print_data()
|
||||
set category = "Object"
|
||||
set src in view(usr, 1)
|
||||
set name = "Print Data"
|
||||
if(usr.stat || !(istype(usr,/mob/living/carbon/human)))
|
||||
usr << "No."
|
||||
return
|
||||
|
||||
var/scan_data = ""
|
||||
|
||||
if(timeofdeath)
|
||||
scan_data += "<b>Time of death:</b> [worldtime2text(timeofdeath)]<br><br>"
|
||||
|
||||
var/n = 1
|
||||
for(var/wdata_idx in wdata)
|
||||
var/datum/autopsy_data_scanner/D = wdata[wdata_idx]
|
||||
var/total_hits = 0
|
||||
var/total_score = 0
|
||||
var/list/weapon_chances = list() // maps weapon names to a score
|
||||
var/age = 0
|
||||
|
||||
for(var/wound_idx in D.organs_scanned)
|
||||
var/datum/autopsy_data/W = D.organs_scanned[wound_idx]
|
||||
total_hits += W.hits
|
||||
|
||||
var/wname = W.pretend_weapon
|
||||
|
||||
if(wname in weapon_chances) weapon_chances[wname] += W.damage
|
||||
else weapon_chances[wname] = max(W.damage, 1)
|
||||
total_score+=W.damage
|
||||
|
||||
|
||||
var/wound_age = W.time_inflicted
|
||||
age = max(age, wound_age)
|
||||
|
||||
var/damage_desc
|
||||
|
||||
var/damaging_weapon = (total_score != 0)
|
||||
|
||||
// total score happens to be the total damage
|
||||
switch(total_score)
|
||||
if(0)
|
||||
damage_desc = "Unknown"
|
||||
if(1 to 5)
|
||||
damage_desc = "<font color='green'>negligible</font>"
|
||||
if(5 to 15)
|
||||
damage_desc = "<font color='green'>light</font>"
|
||||
if(15 to 30)
|
||||
damage_desc = "<font color='orange'>moderate</font>"
|
||||
if(30 to 1000)
|
||||
damage_desc = "<font color='red'>severe</font>"
|
||||
|
||||
if(!total_score) total_score = D.organs_scanned.len
|
||||
|
||||
scan_data += "<b>Weapon #[n]</b><br>"
|
||||
if(damaging_weapon)
|
||||
scan_data += "Severity: [damage_desc]<br>"
|
||||
scan_data += "Hits by weapon: [total_hits]<br>"
|
||||
scan_data += "Approximate time of wound infliction: [worldtime2text(age)]<br>"
|
||||
scan_data += "Affected limbs: [D.organ_names]<br>"
|
||||
scan_data += "Possible weapons:<br>"
|
||||
for(var/weapon_name in weapon_chances)
|
||||
scan_data += "\t[100*weapon_chances[weapon_name]/total_score]% [weapon_name]<br>"
|
||||
|
||||
scan_data += "<br>"
|
||||
|
||||
n++
|
||||
|
||||
if(chemtraces.len)
|
||||
scan_data += "<b>Trace Chemicals: </b><br>"
|
||||
for(var/chemID in chemtraces)
|
||||
scan_data += chemID
|
||||
scan_data += "<br>"
|
||||
|
||||
for(var/mob/O in viewers(usr))
|
||||
O.show_message("\red \the [src] rattles and prints out a sheet of paper.", 1)
|
||||
|
||||
sleep(10)
|
||||
|
||||
var/obj/item/weapon/paper/P = new(usr.loc)
|
||||
P.name = "Autopsy Data ([target_name])"
|
||||
P.info = "<tt>[scan_data]</tt>"
|
||||
P.icon_state = "paper_words"
|
||||
|
||||
if(istype(usr,/mob/living/carbon))
|
||||
// place the item in the usr's hand if possible
|
||||
if(!usr.r_hand)
|
||||
P.loc = usr
|
||||
usr.r_hand = P
|
||||
P.layer = 20
|
||||
else if(!usr.l_hand)
|
||||
P.loc = usr
|
||||
usr.l_hand = P
|
||||
P.layer = 20
|
||||
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
M.update_inv_l_hand()
|
||||
M.update_inv_r_hand()
|
||||
|
||||
/obj/item/weapon/autopsy_scanner/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M))
|
||||
return
|
||||
|
||||
if(!can_operate(M))
|
||||
return
|
||||
|
||||
if(target_name != M.name)
|
||||
target_name = M.name
|
||||
src.wdata = list()
|
||||
src.chemtraces = list()
|
||||
src.timeofdeath = null
|
||||
user << "\red A new patient has been registered.. Purging data for previous patient."
|
||||
|
||||
src.timeofdeath = M.timeofdeath
|
||||
|
||||
var/datum/organ/external/S = M.get_organ(user.zone_sel.selecting)
|
||||
if(!S)
|
||||
usr << "<b>You can't scan this body part.</b>"
|
||||
return
|
||||
if(!S.open)
|
||||
usr << "<b>You have to cut the limb open first!</b>"
|
||||
return
|
||||
for(var/mob/O in viewers(M))
|
||||
O.show_message("\red [user.name] scans the wounds on [M.name]'s [S.display_name] with \the [src.name]", 1)
|
||||
|
||||
src.add_data(S)
|
||||
|
||||
return 1
|
||||
@@ -81,7 +81,7 @@
|
||||
/obj/item/device/taperecorder,
|
||||
/obj/item/device/hailer,
|
||||
/obj/item/device/megaphone,
|
||||
/obj/item/clothing/tie/holobadge,
|
||||
/obj/item/clothing/accessory/holobadge,
|
||||
/obj/structure/closet/crate/secure,
|
||||
/obj/structure/closet/secure_closet,
|
||||
/obj/machinery/librarycomp,
|
||||
@@ -90,7 +90,6 @@
|
||||
/obj/machinery/suspension_gen,
|
||||
/obj/machinery/shield_capacitor,
|
||||
/obj/machinery/shield_gen,
|
||||
/obj/machinery/zero_point_emitter,
|
||||
/obj/machinery/clonepod,
|
||||
/obj/machinery/deployable,
|
||||
/obj/machinery/door_control,
|
||||
@@ -231,7 +230,7 @@
|
||||
return
|
||||
src.registered_name = t
|
||||
|
||||
var u = copytext(sanitize(input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Agent")),1,MAX_MESSAGE_LEN)
|
||||
var u = sanitize(copytext(input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Agent"),1,MAX_MESSAGE_LEN))
|
||||
if(!u)
|
||||
alert("Invalid assignment.")
|
||||
src.registered_name = ""
|
||||
@@ -246,13 +245,13 @@
|
||||
|
||||
switch(alert("Would you like to display the ID, or retitle it?","Choose.","Rename","Show"))
|
||||
if("Rename")
|
||||
var t = copytext(sanitize(input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name)),1,26)
|
||||
var t = sanitize(copytext(input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name),1,26))
|
||||
if(!t || t == "Unknown" || t == "floor" || t == "wall" || t == "r-wall") //Same as mob/new_player/prefrences.dm
|
||||
alert("Invalid name.")
|
||||
return
|
||||
src.registered_name = t
|
||||
|
||||
var u = copytext(sanitize(input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant")),1,MAX_MESSAGE_LEN)
|
||||
var u = sanitize(copytext(input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant"),1,MAX_MESSAGE_LEN))
|
||||
if(!u)
|
||||
alert("Invalid assignment.")
|
||||
return
|
||||
|
||||
@@ -16,6 +16,17 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
/obj/item/weapon/flame
|
||||
var/lit = 0
|
||||
|
||||
/proc/isflamesource(A)
|
||||
if(istype(A, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = A
|
||||
return (WT.isOn())
|
||||
else if(istype(A, /obj/item/weapon/flame))
|
||||
var/obj/item/weapon/flame/F = A
|
||||
return (F.lit)
|
||||
else if(istype(A, /obj/item/device/assembly/igniter))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
///////////
|
||||
//MATCHES//
|
||||
///////////
|
||||
@@ -31,6 +42,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
attack_verb = list("burnt", "singed")
|
||||
|
||||
/obj/item/weapon/flame/match/process()
|
||||
if(isliving(loc))
|
||||
var/mob/living/M = loc
|
||||
M.IgniteMob()
|
||||
var/turf/location = get_turf(src)
|
||||
smoketime--
|
||||
if(smoketime < 1)
|
||||
@@ -58,85 +72,55 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
//////////////////
|
||||
//FINE SMOKABLES//
|
||||
//////////////////
|
||||
/obj/item/clothing/mask/cigarette
|
||||
name = "cigarette"
|
||||
desc = "A roll of tobacco and nicotine."
|
||||
icon_state = "cigoff"
|
||||
throw_speed = 0.5
|
||||
item_state = "cigoff"
|
||||
w_class = 1
|
||||
/obj/item/clothing/mask/smokable
|
||||
name = "smokable item"
|
||||
desc = "You're not sure what this is. You should probably ahelp it."
|
||||
body_parts_covered = 0
|
||||
attack_verb = list("burnt", "singed")
|
||||
var/lit = 0
|
||||
var/icon_on = "cigon" //Note - these are in masks.dmi not in cigarette.dmi
|
||||
var/icon_off = "cigoff"
|
||||
var/type_butt = /obj/item/weapon/cigbutt
|
||||
var/lastHolder = null
|
||||
var/smoketime = 300
|
||||
var/chem_volume = 15
|
||||
body_parts_covered = 0
|
||||
var/icon_on
|
||||
var/icon_off
|
||||
var/type_butt = null
|
||||
var/chem_volume = 0
|
||||
var/smoketime = 0
|
||||
var/matchmes = "USER lights NAME with FLAME"
|
||||
var/lightermes = "USER lights NAME with FLAME"
|
||||
var/zippomes = "USER lights NAME with FLAME"
|
||||
var/weldermes = "USER lights NAME with FLAME"
|
||||
var/ignitermes = "USER lights NAME with FLAME"
|
||||
|
||||
/obj/item/clothing/mask/cigarette/New()
|
||||
/obj/item/clothing/mask/smokable/New()
|
||||
..()
|
||||
flags |= NOREACT // so it doesn't react until you light it
|
||||
create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 15
|
||||
|
||||
/obj/item/clothing/mask/cigarette/Del()
|
||||
/obj/item/clothing/mask/smokable/Del()
|
||||
..()
|
||||
del(reagents)
|
||||
|
||||
/obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.isOn())//Badasses dont get blinded while lighting their cig with a welding tool
|
||||
light("<span class='notice'>[user] casually lights the [name] with [W].</span>")
|
||||
/obj/item/clothing/mask/smokable/process()
|
||||
var/turf/location = get_turf(src)
|
||||
smoketime--
|
||||
if(smoketime < 1)
|
||||
die()
|
||||
return
|
||||
if(location)
|
||||
location.hotspot_expose(700, 5)
|
||||
if(reagents && reagents.total_volume) // check if it has any reagents at all
|
||||
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
|
||||
if(istype(C, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(H.species.flags & IS_SYNTHETIC)
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/flame/lighter/zippo))
|
||||
var/obj/item/weapon/flame/lighter/zippo/Z = W
|
||||
if(Z.lit)
|
||||
light("<span class='rose'>With a flick of their wrist, [user] lights their [name] with their [W].</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/flame/lighter))
|
||||
var/obj/item/weapon/flame/lighter/L = W
|
||||
if(L.lit)
|
||||
light("<span class='notice'>[user] manages to light their [name] with [W].</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/flame/match))
|
||||
var/obj/item/weapon/flame/match/M = W
|
||||
if(M.lit)
|
||||
light("<span class='notice'>[user] lights their [name] with their [W].</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/melee/energy/sword))
|
||||
var/obj/item/weapon/melee/energy/sword/S = W
|
||||
if(S.active)
|
||||
light("<span class='warning'>[user] swings their [W], barely missing their nose. They light their [name] in the process.</span>")
|
||||
|
||||
else if(istype(W, /obj/item/device/assembly/igniter))
|
||||
light("<span class='notice'>[user] fiddles with [W], and manages to light their [name].</span>")
|
||||
|
||||
//can't think of any other way to update the overlays :<
|
||||
user.update_inv_wear_mask(0)
|
||||
user.update_inv_l_hand(0)
|
||||
user.update_inv_r_hand(1)
|
||||
reagents.trans_to(C, REAGENTS_METABOLISM, 0.2) // Most of it is not inhaled... balance reasons.
|
||||
reagents.reaction(C)
|
||||
else // else just remove some of the reagents
|
||||
reagents.remove_any(REAGENTS_METABOLISM)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/clothing/mask/cigarette/afterattack(obj/item/weapon/reagent_containers/glass/glass, mob/user as mob, proximity)
|
||||
..()
|
||||
if(!proximity) return
|
||||
if(istype(glass)) //you can dip cigarettes into beakers
|
||||
var/transfered = glass.reagents.trans_to(src, chem_volume)
|
||||
if(transfered) //if reagents were transfered, show the message
|
||||
user << "<span class='notice'>You dip \the [src] into \the [glass].</span>"
|
||||
else //if not, either the beaker was empty, or the cigarette was full
|
||||
if(!glass.reagents.total_volume)
|
||||
user << "<span class='notice'>[glass] is empty.</span>"
|
||||
else
|
||||
user << "<span class='notice'>[src] is full.</span>"
|
||||
|
||||
|
||||
/obj/item/clothing/mask/cigarette/proc/light(var/flavor_text = "[usr] lights the [name].")
|
||||
/obj/item/clothing/mask/smokable/proc/light(var/flavor_text = "[usr] lights the [name].")
|
||||
if(!src.lit)
|
||||
src.lit = 1
|
||||
damtype = "fire"
|
||||
@@ -156,58 +140,116 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
reagents.handle_reactions()
|
||||
icon_state = icon_on
|
||||
item_state = icon_on
|
||||
if(ismob(loc))
|
||||
var/mob/living/M = loc
|
||||
M.update_inv_wear_mask(0)
|
||||
M.update_inv_l_hand(0)
|
||||
M.update_inv_r_hand(1)
|
||||
var/turf/T = get_turf(src)
|
||||
T.visible_message(flavor_text)
|
||||
processing_objects.Add(src)
|
||||
|
||||
/obj/item/clothing/mask/smokable/proc/die(var/nomessage = 0)
|
||||
var/turf/T = get_turf(src)
|
||||
if (type_butt)
|
||||
var/obj/item/butt = new type_butt(T)
|
||||
transfer_fingerprints_to(butt)
|
||||
if(ismob(loc))
|
||||
var/mob/living/M = loc
|
||||
if (!nomessage)
|
||||
M << "<span class='notice'>Your [name] goes out.</span>"
|
||||
M.u_equip(src) //un-equip it so the overlays can update
|
||||
M.update_inv_wear_mask(0)
|
||||
M.update_inv_l_hand(0)
|
||||
M.update_inv_r_hand(1)
|
||||
processing_objects.Remove(src)
|
||||
del(src)
|
||||
else
|
||||
new /obj/effect/decal/cleanable/ash(T)
|
||||
if(ismob(loc))
|
||||
var/mob/living/M = loc
|
||||
if (!nomessage)
|
||||
M << "<span class='notice'>Your [name] goes out, and you empty the ash.</span>"
|
||||
lit = 0
|
||||
icon_state = icon_off
|
||||
item_state = icon_off
|
||||
M.update_inv_wear_mask(0)
|
||||
M.update_inv_l_hand(0)
|
||||
M.update_inv_r_hand(1)
|
||||
processing_objects.Remove(src)
|
||||
|
||||
/obj/item/clothing/mask/smokable/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(isflamesource(W))
|
||||
var/text = matchmes
|
||||
if(istype(W, /obj/item/weapon/flame/match))
|
||||
text = matchmes
|
||||
else if(istype(W, /obj/item/weapon/flame/lighter/zippo))
|
||||
text = zippomes
|
||||
else if(istype(W, /obj/item/weapon/flame/lighter))
|
||||
text = lightermes
|
||||
else if(istype(W, /obj/item/weapon/weldingtool))
|
||||
text = weldermes
|
||||
else if(istype(W, /obj/item/device/assembly/igniter))
|
||||
text = ignitermes
|
||||
text = replacetext(text, "USER", "[user]")
|
||||
text = replacetext(text, "NAME", "[name]")
|
||||
text = replacetext(text, "FLAME", "[W.name]")
|
||||
light(text)
|
||||
|
||||
/obj/item/clothing/mask/cigarette/process()
|
||||
var/turf/location = get_turf(src)
|
||||
smoketime--
|
||||
if(smoketime < 1)
|
||||
die()
|
||||
return
|
||||
if(location)
|
||||
location.hotspot_expose(700, 5)
|
||||
if(reagents && reagents.total_volume) // check if it has any reagents at all
|
||||
if(iscarbon(loc) && (src == loc:wear_mask)) // if it's in the human/monkey mouth, transfer reagents to the mob
|
||||
if(istype(loc, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(H.species.flags & IS_SYNTHETIC)
|
||||
return
|
||||
var/mob/living/carbon/C = loc
|
||||
/obj/item/clothing/mask/smokable/cigarette
|
||||
name = "cigarette"
|
||||
desc = "A roll of tobacco and nicotine."
|
||||
icon_state = "cigoff"
|
||||
throw_speed = 0.5
|
||||
item_state = "cigoff"
|
||||
w_class = 1
|
||||
attack_verb = list("burnt", "singed")
|
||||
icon_on = "cigon" //Note - these are in masks.dmi not in cigarette.dmi
|
||||
icon_off = "cigoff"
|
||||
type_butt = /obj/item/weapon/cigbutt
|
||||
chem_volume = 15
|
||||
smoketime = 300
|
||||
matchmes = "<span class='notice'>USER lights their NAME with their FLAME.</span>"
|
||||
lightermes = "<span class='notice'>USER manages to light their NAME with FLAME.</span>"
|
||||
zippomes = "<span class='rose'>With a flick of their wrist, USER lights their NAME with their FLAME.</span>"
|
||||
weldermes = "<span class='notice'>USER casually lights the NAME with FLAME.</span>"
|
||||
ignitermes = "<span class='notice'>USER fiddles with FLAME, and manages to light their NAME.</span>"
|
||||
|
||||
/obj/item/clothing/mask/smokable/cigarette/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
|
||||
if(istype(W, /obj/item/weapon/melee/energy/sword))
|
||||
var/obj/item/weapon/melee/energy/sword/S = W
|
||||
if(S.active)
|
||||
light("<span class='warning'>[user] swings their [W], barely missing their nose. They light their [name] in the process.</span>")
|
||||
|
||||
if(prob(15)) // so it's not an instarape in case of acid
|
||||
reagents.reaction(C, INGEST)
|
||||
reagents.trans_to(C, REAGENTS_METABOLISM)
|
||||
else // else just remove some of the reagents
|
||||
reagents.remove_any(REAGENTS_METABOLISM)
|
||||
return
|
||||
|
||||
/obj/item/clothing/mask/smokable/cigarette/afterattack(obj/item/weapon/reagent_containers/glass/glass, mob/user as mob, proximity)
|
||||
..()
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(glass)) //you can dip cigarettes into beakers
|
||||
var/transfered = glass.reagents.trans_to(src, chem_volume)
|
||||
if(transfered) //if reagents were transfered, show the message
|
||||
user << "<span class='notice'>You dip \the [src] into \the [glass].</span>"
|
||||
else //if not, either the beaker was empty, or the cigarette was full
|
||||
if(!glass.reagents.total_volume)
|
||||
user << "<span class='notice'>[glass] is empty.</span>"
|
||||
else
|
||||
user << "<span class='notice'>[src] is full.</span>"
|
||||
|
||||
/obj/item/clothing/mask/cigarette/attack_self(mob/user as mob)
|
||||
/obj/item/clothing/mask/smokable/cigarette/attack_self(mob/user as mob)
|
||||
if(lit == 1)
|
||||
user.visible_message("<span class='notice'>[user] calmly drops and treads on the lit [src], putting it out instantly.</span>")
|
||||
die()
|
||||
die(1)
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/clothing/mask/cigarette/proc/die()
|
||||
var/turf/T = get_turf(src)
|
||||
var/obj/item/butt = new type_butt(T)
|
||||
transfer_fingerprints_to(butt)
|
||||
if(ismob(loc))
|
||||
var/mob/living/M = loc
|
||||
M << "<span class='notice'>Your [name] goes out.</span>"
|
||||
M.u_equip(src) //un-equip it so the overlays can update
|
||||
M.update_inv_wear_mask(0)
|
||||
processing_objects.Remove(src)
|
||||
del(src)
|
||||
|
||||
////////////
|
||||
// CIGARS //
|
||||
////////////
|
||||
/obj/item/clothing/mask/cigarette/cigar
|
||||
/obj/item/clothing/mask/smokable/cigarette/cigar
|
||||
name = "premium cigar"
|
||||
desc = "A brown roll of tobacco and... well, you're not quite sure. This thing's huge!"
|
||||
icon_state = "cigar2off"
|
||||
@@ -218,15 +260,20 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
item_state = "cigaroff"
|
||||
smoketime = 1500
|
||||
chem_volume = 20
|
||||
matchmes = "<span class='notice'>USER lights their NAME with their FLAME.</span>"
|
||||
lightermes = "<span class='notice'>USER manages to offend their NAME by lighting it with FLAME.</span>"
|
||||
zippomes = "<span class='rose'>With a flick of their wrist, USER lights their NAME with their FLAME.</span>"
|
||||
weldermes = "<span class='notice'>USER insults NAME by lighting it with FLAME.</span>"
|
||||
ignitermes = "<span class='notice'>USER fiddles with FLAME, and manages to light their NAME with the power of science.</span>"
|
||||
|
||||
/obj/item/clothing/mask/cigarette/cigar/cohiba
|
||||
/obj/item/clothing/mask/smokable/cigarette/cigar/cohiba
|
||||
name = "\improper Cohiba Robusto cigar"
|
||||
desc = "There's little more you could want from a cigar."
|
||||
icon_state = "cigar2off"
|
||||
icon_on = "cigar2on"
|
||||
icon_off = "cigar2off"
|
||||
|
||||
/obj/item/clothing/mask/cigarette/cigar/havana
|
||||
/obj/item/clothing/mask/smokable/cigarette/cigar/havana
|
||||
name = "premium Havanian cigar"
|
||||
desc = "A cigar fit for only the best of the best."
|
||||
icon_state = "cigar2off"
|
||||
@@ -254,50 +301,33 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
desc = "A manky old cigar butt."
|
||||
icon_state = "cigarbutt"
|
||||
|
||||
|
||||
/obj/item/clothing/mask/cigarette/cigar/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.isOn())
|
||||
light("<span class='notice'>[user] insults [name] by lighting it with [W].</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/flame/lighter/zippo))
|
||||
var/obj/item/weapon/flame/lighter/zippo/Z = W
|
||||
if(Z.lit)
|
||||
light("<span class='rose'>With a flick of their wrist, [user] lights their [name] with their [W].</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/flame/lighter))
|
||||
var/obj/item/weapon/flame/lighter/L = W
|
||||
if(L.lit)
|
||||
light("<span class='notice'>[user] manages to offend their [name] by lighting it with [W].</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/flame/match))
|
||||
var/obj/item/weapon/flame/match/M = W
|
||||
if(M.lit)
|
||||
light("<span class='notice'>[user] lights their [name] with their [W].</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/melee/energy/sword))
|
||||
var/obj/item/weapon/melee/energy/sword/S = W
|
||||
if(S.active)
|
||||
light("<span class='warning'>[user] swings their [W], barely missing their nose. They light their [name] in the process.</span>")
|
||||
|
||||
else if(istype(W, /obj/item/device/assembly/igniter))
|
||||
light("<span class='notice'>[user] fiddles with [W], and manages to light their [name] with the power of science.</span>")
|
||||
/obj/item/clothing/mask/smokable/cigarette/cigar/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
|
||||
/////////////////
|
||||
//SMOKING PIPES//
|
||||
/////////////////
|
||||
/obj/item/clothing/mask/cigarette/pipe
|
||||
/obj/item/clothing/mask/smokable/pipe
|
||||
name = "smoking pipe"
|
||||
desc = "A pipe, for smoking. Probably made of meershaum or something."
|
||||
icon_state = "pipeoff"
|
||||
item_state = "pipeoff"
|
||||
icon_on = "pipeon" //Note - these are in masks.dmi
|
||||
icon_off = "pipeoff"
|
||||
smoketime = 100
|
||||
smoketime = 0
|
||||
chem_volume = 50
|
||||
matchmes = "<span class='notice'>USER lights their NAME with their FLAME.</span>"
|
||||
lightermes = "<span class='notice'>USER manages to light their NAME with FLAME.</span>"
|
||||
zippomes = "<span class='rose'>With much care, USER lights their NAME with their FLAME.</span>"
|
||||
weldermes = "<span class='notice'>USER recklessly lights NAME with FLAME.</span>"
|
||||
ignitermes = "<span class='notice'>USER fiddles with FLAME, and manages to light their NAME with the power of science.</span>"
|
||||
|
||||
/obj/item/clothing/mask/cigarette/pipe/light(var/flavor_text = "[usr] lights the [name].")
|
||||
if(!src.lit)
|
||||
/obj/item/clothing/mask/smokable/pipe/New()
|
||||
..()
|
||||
name = "empty [initial(name)]"
|
||||
|
||||
/obj/item/clothing/mask/smokable/pipe/light(var/flavor_text = "[usr] lights the [name].")
|
||||
if(!src.lit && src.smoketime)
|
||||
src.lit = 1
|
||||
damtype = "fire"
|
||||
icon_state = icon_on
|
||||
@@ -305,72 +335,55 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
var/turf/T = get_turf(src)
|
||||
T.visible_message(flavor_text)
|
||||
processing_objects.Add(src)
|
||||
|
||||
/obj/item/clothing/mask/cigarette/pipe/process()
|
||||
var/turf/location = get_turf(src)
|
||||
smoketime--
|
||||
if(smoketime < 1)
|
||||
new /obj/effect/decal/cleanable/ash(location)
|
||||
if(ismob(loc))
|
||||
var/mob/living/M = loc
|
||||
M << "<span class='notice'>Your [name] goes out, and you empty the ash.</span>"
|
||||
lit = 0
|
||||
icon_state = icon_off
|
||||
item_state = icon_off
|
||||
M.update_inv_wear_mask(0)
|
||||
processing_objects.Remove(src)
|
||||
return
|
||||
if(location)
|
||||
location.hotspot_expose(700, 5)
|
||||
return
|
||||
M.update_inv_l_hand(0)
|
||||
M.update_inv_r_hand(1)
|
||||
|
||||
/obj/item/clothing/mask/cigarette/pipe/attack_self(mob/user as mob) //Refills the pipe. Can be changed to an attackby later, if loose tobacco is added to vendors or something.
|
||||
/obj/item/clothing/mask/smokable/pipe/attack_self(mob/user as mob)
|
||||
if(lit == 1)
|
||||
user.visible_message("<span class='notice'>[user] puts out [src].</span>")
|
||||
user.visible_message("<span class='notice'>[user] puts out [src].</span>", "<span class='notice'>You put out [src].</span>")
|
||||
lit = 0
|
||||
icon_state = icon_off
|
||||
item_state = icon_off
|
||||
processing_objects.Remove(src)
|
||||
else if (smoketime)
|
||||
var/turf/location = get_turf(user)
|
||||
user.visible_message("<span class='notice'>[user] empties out [src].</span>", "<span class='notice'>You empty out [src].</span>")
|
||||
new /obj/effect/decal/cleanable/ash(location)
|
||||
smoketime = 0
|
||||
reagents.clear_reagents()
|
||||
name = "empty [initial(name)]"
|
||||
|
||||
/obj/item/clothing/mask/smokable/pipe/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/melee/energy/sword))
|
||||
return
|
||||
if(smoketime <= 0)
|
||||
user << "<span class='notice'>You refill the pipe with tobacco.</span>"
|
||||
smoketime = initial(smoketime)
|
||||
return
|
||||
|
||||
/obj/item/clothing/mask/cigarette/pipe/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.isOn())//
|
||||
light("<span class='notice'>[user] recklessly lights [name] with [W].</span>")
|
||||
..()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/flame/lighter/zippo))
|
||||
var/obj/item/weapon/flame/lighter/zippo/Z = W
|
||||
if(Z.lit)
|
||||
light("<span class='rose'>With much care, [user] lights their [name] with their [W].</span>")
|
||||
if (istype(W, /obj/item/weapon/reagent_containers/food/snacks))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = W
|
||||
if (!G.dry)
|
||||
user << "<span class='notice'>[G] must be dried before you stuff it into [src].</span>"
|
||||
return
|
||||
if (smoketime)
|
||||
user << "<span class='notice'>[src] is already packed.</span>"
|
||||
return
|
||||
smoketime = 1000
|
||||
if(G.reagents)
|
||||
G.reagents.trans_to(src, G.reagents.total_volume)
|
||||
name = "[G.name]-packed [initial(name)]"
|
||||
del(G)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/flame/lighter))
|
||||
var/obj/item/weapon/flame/lighter/L = W
|
||||
if(L.lit)
|
||||
light("<span class='notice'>[user] manages to light their [name] with [W].</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/flame/match))
|
||||
var/obj/item/weapon/flame/match/M = W
|
||||
if(M.lit)
|
||||
light("<span class='notice'>[user] lights their [name] with their [W].</span>")
|
||||
|
||||
else if(istype(W, /obj/item/device/assembly/igniter))
|
||||
light("<span class='notice'>[user] fiddles with [W], and manages to light their [name] with the power of science.</span>")
|
||||
|
||||
/obj/item/clothing/mask/cigarette/pipe/cobpipe
|
||||
/obj/item/clothing/mask/smokable/pipe/cobpipe
|
||||
name = "corn cob pipe"
|
||||
desc = "A nicotine delivery system popularized by folksy backwoodsmen, kept popular in the modern age and beyond by space hipsters."
|
||||
icon_state = "cobpipeoff"
|
||||
item_state = "cobpipeoff"
|
||||
icon_on = "cobpipeon" //Note - these are in masks.dmi
|
||||
icon_off = "cobpipeoff"
|
||||
smoketime = 400
|
||||
|
||||
|
||||
chem_volume = 35
|
||||
|
||||
/////////
|
||||
//ZIPPO//
|
||||
@@ -385,7 +398,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
var/icon_off = "lighter-g"
|
||||
w_class = 1
|
||||
throwforce = 4
|
||||
flags = TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
attack_verb = list("burnt", "singed")
|
||||
|
||||
@@ -444,9 +457,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
/obj/item/weapon/flame/lighter/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M, /mob))
|
||||
return
|
||||
M.IgniteMob()
|
||||
|
||||
if(istype(M.wear_mask, /obj/item/clothing/mask/cigarette) && user.zone_sel.selecting == "mouth" && lit)
|
||||
var/obj/item/clothing/mask/cigarette/cig = M.wear_mask
|
||||
if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == "mouth" && lit)
|
||||
var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask
|
||||
if(M == user)
|
||||
cig.attackby(src, user)
|
||||
else
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
density = 0
|
||||
anchored = 0
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
force = 5.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 3
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#ifndef T_BOARD
|
||||
#error T_BOARD macro is not defined but we need it!
|
||||
#endif
|
||||
|
||||
/obj/item/weapon/circuitboard/biogenerator
|
||||
name = T_BOARD("biogenerator")
|
||||
build_path = "/obj/machinery/biogenerator"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=2"
|
||||
frame_desc = "Requires 1 Manipulator, and 1 Matter Bin."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/matter_bin" = 1,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1)
|
||||
@@ -0,0 +1,15 @@
|
||||
#ifndef T_BOARD
|
||||
#error T_BOARD macro is not defined but we need it!
|
||||
#endif
|
||||
|
||||
/obj/item/weapon/circuitboard/recharge_station
|
||||
name = T_BOARD("cyborg recharging station")
|
||||
build_path = "/obj/machinery/recharge_station"
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=3;engineering=3"
|
||||
frame_desc = "Requires 2 Manipulator, 2 Capacitor, 1 Cell, and 5 pieces of cable."
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 5,
|
||||
"/obj/item/weapon/stock_parts/capacitor" = 2,
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 2,
|
||||
"/obj/item/weapon/cell" = 1)
|
||||
@@ -4,7 +4,6 @@
|
||||
desc = "A generic brand of lipstick."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "lipstick"
|
||||
flags = FPRINT | TABLEPASS
|
||||
w_class = 1.0
|
||||
var/colour = "red"
|
||||
var/open = 0
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
icon_state = "plastic-explosive0"
|
||||
item_state = "plasticx"
|
||||
flags = FPRINT | TABLEPASS | NOBLUDGEON
|
||||
flags = NOBLUDGEON
|
||||
w_class = 2.0
|
||||
origin_tech = "syndicate=2"
|
||||
var/datum/wires/explosive/c4/wires = null
|
||||
@@ -38,7 +38,7 @@
|
||||
/obj/item/weapon/plastique/afterattack(atom/movable/target, mob/user, flag)
|
||||
if (!flag)
|
||||
return
|
||||
if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/) || istype(target, /obj/item/clothing/tie/storage/) || istype(target, /obj/item/clothing/under))
|
||||
if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/) || istype(target, /obj/item/clothing/accessory/storage/) || istype(target, /obj/item/clothing/under))
|
||||
return
|
||||
user << "Planting explosives..."
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "fire_extinguisher0"
|
||||
item_state = "fire_extinguisher"
|
||||
hitsound = 'sound/weapons/smash.ogg'
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
throwforce = 10
|
||||
w_class = 3.0
|
||||
throw_speed = 2
|
||||
@@ -13,7 +13,7 @@
|
||||
force = 10.0
|
||||
matter = list("metal" = 90)
|
||||
attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
|
||||
|
||||
|
||||
var/spray_particles = 6
|
||||
var/spray_amount = 2 //units of liquid per particle
|
||||
var/max_water = 120
|
||||
@@ -27,7 +27,6 @@
|
||||
icon_state = "miniFE0"
|
||||
item_state = "miniFE"
|
||||
hitsound = null //it is much lighter, after all.
|
||||
flags = FPRINT | TABLEPASS
|
||||
throwforce = 2
|
||||
w_class = 2.0
|
||||
force = 3.0
|
||||
@@ -124,7 +123,7 @@
|
||||
R.my_atom = W
|
||||
if(!W || !src) return
|
||||
src.reagents.trans_to(W, spray_amount)
|
||||
|
||||
|
||||
for(var/b=0, b<5, b++)
|
||||
step_towards(W,my_target)
|
||||
if(!W || !W.reagents) return
|
||||
@@ -135,6 +134,9 @@
|
||||
if(!W.reagents)
|
||||
break
|
||||
W.reagents.reaction(atm)
|
||||
if(isliving(atm)) //For extinguishing mobs on fire
|
||||
var/mob/living/M = atm
|
||||
M.ExtinguishMob()
|
||||
if(W.loc == my_target) break
|
||||
sleep(2)
|
||||
W.delete()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/flamethrower.dmi'
|
||||
icon_state = "flamethrowerbase"
|
||||
item_state = "flamethrower_0"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
force = 3.0
|
||||
throwforce = 10.0
|
||||
throw_speed = 1
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
/obj/item/device/paicard,
|
||||
/obj/item/device/violin,
|
||||
/obj/item/weapon/storage/belt/utility/full,
|
||||
/obj/item/clothing/tie/horrible)
|
||||
/obj/item/clothing/accessory/horrible)
|
||||
|
||||
if(!ispath(gift_type,/obj/item)) return
|
||||
|
||||
|
||||
@@ -21,11 +21,12 @@
|
||||
B.health -= damage
|
||||
B.update_icon()
|
||||
|
||||
new/obj/effect/effect/smoke/flashbang(src.loc)
|
||||
new/obj/effect/effect/sparks(src.loc)
|
||||
new/obj/effect/effect/smoke/illumination(src.loc, brightness=15)
|
||||
del(src)
|
||||
return
|
||||
|
||||
proc/bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged.
|
||||
proc/bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged.
|
||||
if (locate(/obj/item/weapon/cloaking_device, M)) // Called during the loop that bangs people in lockers/containers and when banging
|
||||
for(var/obj/item/weapon/cloaking_device/S in M) // people in normal view. Could theroetically be called during other explosions.
|
||||
S.active = 0 // -- Polymorph
|
||||
@@ -100,16 +101,6 @@
|
||||
M << "\red Your ears start to ring!"
|
||||
M.update_icons()
|
||||
|
||||
/obj/effect/effect/smoke/flashbang
|
||||
name = "illumination"
|
||||
time_to_live = 10
|
||||
opacity = 0
|
||||
icon_state = "sparks"
|
||||
|
||||
/obj/effect/effect/smoke/flashbang/New()
|
||||
..()
|
||||
SetLuminosity(15)
|
||||
|
||||
/obj/item/weapon/grenade/flashbang/clusterbang//Created by Polymorph, fixed by Sieve
|
||||
desc = "Use of this weapon may constiute a war crime in your area, consult your local captain."
|
||||
name = "clusterbang"
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
item_state = "flashbang"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
var/active = 0
|
||||
var/det_time = 50
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
icon_state = "flashbang"
|
||||
det_time = 20
|
||||
item_state = "flashbang"
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
var/datum/effect/effect/system/smoke_spread/bad/smoke
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "handcuff"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 5
|
||||
w_class = 2.0
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
desc = "A small satchel made for organizing seeds."
|
||||
var/mode = 1; //0 = pick one at a time, 1 = pick all on tile
|
||||
var/capacity = 500; //the number of seeds it can carry.
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 1
|
||||
var/list/item_quants = list()
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
return
|
||||
if((!in_range(src, usr) && src.loc != user))
|
||||
return
|
||||
t = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
|
||||
t = sanitize(copytext(t,1,MAX_MESSAGE_LEN))
|
||||
if(t)
|
||||
src.name = text("Glass Case - '[]'", t)
|
||||
else
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
affected.implants += src.imp
|
||||
imp.part = affected
|
||||
|
||||
H.hud_updateflag |= 1 << IMPLOYAL_HUD
|
||||
BITSET(H.hud_updateflag, IMPLOYAL_HUD)
|
||||
|
||||
src.imp = null
|
||||
update()
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
if (source.handcuffed)
|
||||
var/obj/item/weapon/W = source.handcuffed
|
||||
source.handcuffed = null
|
||||
if(source.buckled && source.buckled.buckle_require_restraints)
|
||||
source.buckled.unbuckle_mob()
|
||||
source.update_inv_handcuffed()
|
||||
if (source.client)
|
||||
source.client.screen -= W
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
throwforce = 5.0
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
origin_tech = "materials=1"
|
||||
attack_verb = list("attacked", "stabbed", "poked")
|
||||
sharp = 0
|
||||
@@ -137,7 +137,7 @@
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "knife"
|
||||
desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come."
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
sharp = 1
|
||||
edge = 1
|
||||
force = 10.0
|
||||
@@ -169,7 +169,7 @@
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "butch"
|
||||
desc = "A huge thing used for chopping and chopping up meat. This includes clowns and clown-by-products."
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
force = 15.0
|
||||
w_class = 2.0
|
||||
throwforce = 8.0
|
||||
@@ -246,7 +246,7 @@
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 3.0
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
matter = list("metal" = 3000)
|
||||
/* // NOPE
|
||||
var/food_total= 0
|
||||
|
||||
@@ -75,10 +75,10 @@
|
||||
|
||||
|
||||
/obj/item/weapon/book/manual/supermatter_engine
|
||||
name = "Supermatter Engine User's Guide"
|
||||
name = "Supermatter Engine Operating Manual"
|
||||
icon_state = "bookSupermatter"
|
||||
author = "Waleed Asad"
|
||||
title = "Supermatter Engine User's Guide"
|
||||
author = "Nanotrasen Central Engineering Division"
|
||||
title = "Supermatter Engine Operating Manual"
|
||||
|
||||
/obj/item/weapon/book/manual/supermatter_engine/New()
|
||||
..()
|
||||
@@ -94,95 +94,56 @@
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>OPERATING MANUAL FOR MK 1 PROTOTYPE THERMOELECTRIC SUPERMATTER ENGINE 'TOMBOLA'</h1>
|
||||
<br>
|
||||
Engineering notes on the single-stage supermatter engine,</br>
|
||||
-Waleed Asad</br></br>
|
||||
|
||||
Station,</br>
|
||||
Exodus</br></br>
|
||||
|
||||
A word of caution, do not enter the engine room for any reason without radiation protection and meson scanners on. The status of the engine may be unpredictable even when you believe it is 'off.' This is an important level of personal protection.</br></br>
|
||||
|
||||
The engine has two basic modes of functionality. It has been observed that it is capable of both a safe level of operation and a modified, high output mode.</br></br>
|
||||
|
||||
<h2>Heat-Primary Mode</h2>
|
||||
<i>Notes on starting the basic function mode</i>
|
||||
<h2>OPERATING PRINCIPLES</h2>
|
||||
<br>
|
||||
<li>The supermatter crystal serves as the fundamental power source of the engine. Upon being charged, it begins to emit large amounts of heat and radiation, as well and oxygen and plasma. As oxygen accelerates the reaction, and plasma carries the risk of fire, these must be filtered out. NOTE: Supermatter radiation will not charge radiation collectors.</li>
|
||||
<br>
|
||||
<li>Air in the reactor chamber housing the supermatter is circulated through the reactor loop, which passes through the filters and thermoelectric generators. The thermoelectric generators transfer heat from the reactor loop to the colder radiator loop, thereby generating power. Additional power is generated from internal turbines in the circulators.</li>
|
||||
<br>
|
||||
<li>Air in the radiator loop is circulated through the radiator bank, located in space. This rapidly cools the air, preserving the temperature differential needed for power generation.</li>
|
||||
<br>
|
||||
<li>The MK 1 Prototype Thermoelectric Supermatter Engine is designed to operate at reactor temperatures of 3000K to 4000K and generate up to 1MW of power. Beyond 1MW, the thermoelectric generators will begin to lose power through electrical discharge, reducing efficiency, but additional power generation remains feasible.</li>
|
||||
<br>
|
||||
<li>The crystal structure of the supermatter will begin to liquefy if its temperature exceeds 5000K. This eventually results in a massive release of light, heat and radiation, disintegration of both the supermatter crystal and most of the surrounding area, and as as-of-yet poorly documented psychological effects on all animals within a 2km. Appropriate action should be taken to stabilize or eject the supermatter before such occurs.</li>
|
||||
<br>
|
||||
<h2>SUPERMATTER HANDLING</h2>
|
||||
<li>Do not expose supermatter to oxygen.</li>
|
||||
<li>Do not <del>touch supermatter</del> <del>without gloves</del> <del>without exosuit protection</del> allow supermatter to contact any solid object apart from specially-designed supporting pallet.</li>
|
||||
<li>Do not directly view supermatter without meson goggles.</li>
|
||||
<li>While handles on pallet allow moving the supermatter via pulling, pushing should not be attempted.</li>
|
||||
<br>
|
||||
<h2>STARTUP PROCEDURE</h2>
|
||||
<ol>
|
||||
<li><b>Prepare collector arrays</b>: As is standard, begin by wrenching them down, filling six plasma tanks with a plasma canister, and inserting the tank into the collectors one by one. Finally, initialize each collector.</li>
|
||||
|
||||
<li><b>Prepare gas system</b>: Before introducing any gas into the supermatter engine room, it is important to remember the small, but vital steps to preparing this section. First, set the input gas pump and output gas flow pump to 4500 kPa, or maximum flow. Second, switch the digital switching valve into the 'up' position, so the green light is on north side of the valve, in order to circulate the gas back toward the coolers and collectors.</li>
|
||||
|
||||
<li><b>Apply N2 gas</b>: Retrieve the two N2 canisters from storage and bring them to the engine room. Attach one of them to the input section of the engine gas system located next to the collectors. Keep it attached until the N2 pressure is low enough to turn the canister light red. Replace it with the second canister to keep N2 pressure at optimal levels.</li>
|
||||
|
||||
<li><b>Open supermatter shielding</b>: This button is located in the engine room, to the left of the engine monitoring room blast doors. At this point, the supermatter chamber is mostly a gas mixture of N2 and is producing no radiation. It is considered 'safe' up until this point. Do not forget radiation shielding and meson scanners.</li>
|
||||
|
||||
<li><b>Begin primary emitter burst series</b>: Begin by firing four shots into the supermatter using the emitter. It is important to move to this step quickly. The onboard SMES units may not have enough power to run the emitters if left alone too long on-station. This engine can produce enough power on its own to run the entire station, ignoring the SMES units completely, and is wired to do so.</li>
|
||||
|
||||
<li><b>Switch SMES units to primary settings</b>: Maximize input and set the devices to automatically charge, additionally turn their outputs on if they are off unless power is to be saved (Which can be useful in case of later failures).</li>
|
||||
|
||||
<li><b>Begin secondary emitter burst series</b>: Before firing the emitter again, check the power in the line with a multimeter (Do not forget electrical gloves). The engine is running at high efficiency when the value exceeds 200,000 power units.</li>
|
||||
|
||||
<li><b>Maintain engine power</b>: When power in the lines get low, add an additional emitter burst series to bring power to normal levels.</li>
|
||||
<li>Fill reactor loop and radiator loop with two (2) standard canisters of nitrogen gas each.</li>
|
||||
<li>Ensure that pumps and filters are on and operating at maximum power.</li>
|
||||
<li>Fire <del>5</del> <del>15</del> <del>2</del> <del>UNKNOWN</del> 8-12 pulses from emitter at supermatter crystal. Reactor blast doors must be open for this procedure.</li>
|
||||
</ol>
|
||||
|
||||
|
||||
<h2>O2-Reaction Mode</h2>
|
||||
|
||||
The second mode for running the engine uses a gas mixture to produce a reaction within the supermatter. This mode requires the CE's or Atmospheric's help to set up. This is called 'O2-Reaction Mode.'</br></br>
|
||||
|
||||
<b><u>THIS MODE CAN CAUSE A RUNAWAY REACTION, LEADING TO CATASTROPHIC FAILURE IF NOT MAINTAINED. NEVER FORGET ABOUT THE ENGINE IN THIS MODE.</u></b></br></br>
|
||||
|
||||
Additionally, this mode can be used for what is called a '<b>Cold Start</b>.' If the station has no power in the SMES to run the emitters, using this mode will allow enough power output to run them, and quickly reach an acceptable level of power output.</br></br>
|
||||
|
||||
<br>
|
||||
<h2>OPERATION AND MAINTENANCE</h2>
|
||||
<ol>
|
||||
<li><b>Prepare collector arrays</b>: As is standard, begin by wrenching them down, filling six plasma tanks with a plasma canister, and inserting the tank into the collectors one by one. Finally, initialize each collector.</li>
|
||||
|
||||
<li><b>Prepare gas system</b>: Before introducing any gas into the supermatter engine room, it is important to remember the small, but vital steps to preparing this section. First, set the input gas pump and output gas flow pump to 4500 kPa, or maximum flow. Second, switch the digital switching valve into the 'up' position, so the green light is on north side of the valve, in order to circulate the gas back toward the coolers and collectors.</li>
|
||||
|
||||
<li><b>Modify the engine room filters</b>: Unlike the Heat-Primary Mode, it is important to change the filters attached to the gas system to stop filtering O2, and start filtering carbon molecules. O2-Reaction Mode produces far more plasma than Heat-Primary, therefore filtering it off is essential.</li>
|
||||
|
||||
<li><b>Switch SMES units to primary settings</b>: Maximize input and set the devices to automatically charge, additionally turn their outputs on if they are off unless power is to be saved (Which can be useful in case of later failures). If you check the power in the system lines at this point, you will find that it is constantly going up. Indeed, with just the addition of O2 to the supermatter, it will begin outputting power.</li>
|
||||
|
||||
<li><b>Begin primary emitter burst series</b>: Begin by firing four shots into the supermatter using the emitter. Do not over power the supermatter. The reaction is self sustaining and propagating. As long as O2 is in the chamber, it will continue outputting MORE power.</li>
|
||||
|
||||
<li><b>Maintain follow up operations</b>: Remember to check the temperature of the core gas and switch to the Heat-Primary function, or vent the core room when problems begin if required.</li>
|
||||
</ol></br>
|
||||
|
||||
<h2>Notes on Supermatter Reaction Function and Drawbacks</h2>
|
||||
|
||||
After several hours of observation, an interesting phenomenon was witnessed. The supermatter undergoes a constant, self-sustaining reaction when given an extremely high O2 concentration. Anything about 80% or higher typically will cause this reaction. The supermatter will continue to react whenever this gas mixture is in the same room as the supermatter.</br></br>
|
||||
|
||||
To understand why O2-Reaction mode is dangerous, the core principle of the supermatter must be understood. The supermatter emits three things when 'not safe,' that is any time it is giving off power. These things are:</br>
|
||||
|
||||
<ul>
|
||||
<li>Radiation (which is converted into power by the collectors)</li></br>
|
||||
<li>Heat (which is removed via the gas exchange system and coolers)</li></br>
|
||||
<li>External gas (in the form of plasma and O2)</li></br>
|
||||
</ul></br>
|
||||
|
||||
When in Heat-Primary mode, far more heat and plasma are produced than radiation. In O2-Reaction mode, very little heat and only moderate amounts of plasma are produced, however HUGE amounts of energy leaving the supermatter is in the form of radiation.</br></br>
|
||||
|
||||
The O2-Reaction engine mode has a single drawback which has been eluded to more than once so far and that is very simple. The engine room will continue to grow hotter as the constant reaction continues. Eventually, there will be what is called a 'critical gas mixture.' This is the point at which the constant adding of plasma to the mixture of air around the supermatter changes the gas concentration to below the tolerance. When this happens, two things occur. First, the supermatter switches to its primary mode of operation wherein huge amounts of heat are produced by the engine rather than low amounts with high power output. Second, an uncontrollable increase in heat within the supermatter chamber will occur. This will lead to a spark-up, igniting the plasma in the supermatter chamber, wildly increasing both pressure and temperature.</br></br>
|
||||
|
||||
While the O2-Reaction mode is dangerous, it does produce heavy amounts of energy. Consider using this mode only in short amounts to fill the SMES, and switch back later in the shift to keep things flowing normally.</br></br>
|
||||
|
||||
|
||||
<h2>Notes on Supermatter Containment and Emergency Procedures</h2>
|
||||
|
||||
While a constant vigil on the supermatter is not required, regular checkups are important. Check the temperature of gas leaving the supermatter chamber for unsafe levels and ensure that the plasma in the chamber is at a safe concentration. Of course, also make sure the chamber is not on fire. A fire in the core chamber is very difficult to put out. As any toxin scientist can tell you, even low amounts of plasma can burn at very high temperatures. This burning creates a huge increase in pressure and more importantly, temperature of the crystal itself.</br></br>
|
||||
|
||||
The supermatter is strong, but not invincible. When the supermatter is heated too much, its crystal structure will attempt to liquefy. The change in atomic structure of the supermatter leads to a single reaction, a massive explosion. The computer chip attached to the supermatter core will warn the station when stability is threatened. It will then offer a second warning, when things have become dangerously close to total destruction of the core.</br></br>
|
||||
|
||||
Located both within the CE office and engine room is the engine ventilatory control button. This button allows the core vent controls to be accessed, venting the room to space. Remember however, that this process takes time. If a fire is raging, and the pressure is higher than fathomable, it will take a great deal of time to vent the room. Also located in the CE's office is the emergency core eject button. A new core can be ordered from cargo. It is often not worth the lives of the crew to hold on to it, not to mention the structural damage. However, if by some mistake the supermatter is pushed off or removed from the mass driver it sits on, manual reposition will be required. Which is very dangerous and often leads to death.</br></br>
|
||||
|
||||
The supermatter is extremely dangerous. More dangerous than people give it credit for. It can destroy you in an instant, without hesitation, reducing you to a pile of dust. When working closely with supermatter, it is suggested to get a genetic backup and do not wear any items of value to you. The supermatter core can be pulled if grabbed properly by the base, but <b>pushing is not possible.</b></br></br>
|
||||
|
||||
|
||||
<h2>In Closing</h2>
|
||||
|
||||
Remember that the supermatter is dangerous, and the core is dangerous still. Venting the core room is always an option if you are even remotely worried, utilizing Atmospherics to properly ready the room once more for core function. It is always a good idea to check up regularly on the temperature of gas leaving the chamber, as well as the power in the system lines. Lastly, once again remember, never touch the supermatter with anything. Ever.</br></br>
|
||||
|
||||
-Waleed Asad, Senior Engine Technician
|
||||
<li>Ensure that radiation protection and meson goggles are worn at all times while working in the engine room.</li>
|
||||
<li>Ensure that reactor and radiator loops are undamaged and unobstructed.</li>
|
||||
<li>Ensure that plasma and oxygen gas exhaust from filters is properly contained or disposed. Do not allow exhaust pressure to exceed 4500 kPa.</li>
|
||||
<li>Ensure that engine room Area Power Controller (APC) and engine Superconducting Magnetic Energy Storage unit (SMES) are properly charged.</li>
|
||||
<li>Ensure that reactor temperature does not exceed 5000K. In event of reactor temperature exceeding 5000K, see EMERGENCY COOLING PROCEDURE.</li>
|
||||
<li>In event of imminent and/or unavoidable delamination, see EJECTION PROCEDURE.</li>
|
||||
</ol>
|
||||
<br>
|
||||
<h2>EMERGENCY COOLING PROCEDURE</h2>
|
||||
<ol>
|
||||
<li>Open Emergency Cooling Valve 1 and Emergency Cooling Valve 2.</li>
|
||||
<li>When reactor temperature returns to safe operating levels, close Emergency Cooling Valve 1 and Emergency Cooling Valve 2.</li>
|
||||
<li>If reactor temperature does not return to safe operating levels, see EJECTION PROCEDURE.</li>
|
||||
</ol>
|
||||
<br>
|
||||
<h2>EJECTION PROCEDURE</h2>
|
||||
<ol>
|
||||
<li>Press Engine Ventilatory Control button to open engine core vent to space.</li>
|
||||
<li>Press Emergency Core Eject button to eject supermatter crystal. NOTE: Attempting crystal ejection while engine core vent is closed will result in ejection failure.</li>
|
||||
<li>In event of ejection failure, <i>pending</i></li>
|
||||
</ol>
|
||||
</body>
|
||||
</html>"}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
var/active_w_class
|
||||
sharp = 0
|
||||
edge = 0
|
||||
flags = FPRINT | TABLEPASS | NOBLOODY
|
||||
flags = NOBLOODY
|
||||
|
||||
/obj/item/weapon/melee/energy/proc/activate(mob/living/user)
|
||||
anchored = 1
|
||||
@@ -73,7 +73,7 @@
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 3
|
||||
flags = FPRINT | CONDUCT | NOSHIELD | TABLEPASS | NOBLOODY
|
||||
flags = CONDUCT | NOSHIELD | NOBLOODY
|
||||
origin_tech = "magnets=3;combat=4"
|
||||
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
|
||||
sharp = 1
|
||||
@@ -109,7 +109,7 @@
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 2
|
||||
flags = FPRINT | TABLEPASS | NOSHIELD | NOBLOODY
|
||||
flags = NOSHIELD | NOBLOODY
|
||||
origin_tech = "magnets=3;syndicate=4"
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/dropped(var/mob/user)
|
||||
@@ -177,7 +177,7 @@
|
||||
throw_speed = 1
|
||||
throw_range = 1
|
||||
w_class = 4.0//So you can't hide it in your pocket or some such.
|
||||
flags = FPRINT | TABLEPASS | NOSHIELD | NOBLOODY
|
||||
flags = NOSHIELD | NOBLOODY
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
var/mob/living/creator
|
||||
var/datum/effect/effect/system/spark_spread/spark_system
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "A tool used by great men to placate the frothing masses."
|
||||
icon_state = "chain"
|
||||
item_state = "chain"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 10
|
||||
throwforce = 7
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
throw_speed = 5
|
||||
throw_range = 10
|
||||
w_class = 3.0
|
||||
flags = FPRINT | TABLEPASS
|
||||
attack_verb = list("mopped", "bashed", "bludgeoned", "whacked")
|
||||
var/mopping = 0
|
||||
var/mopcount = 0
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//NEVER USE THIS IT SUX -PETETHEGOAT
|
||||
//THE GOAT WAS RIGHT - RKF
|
||||
|
||||
var/global/list/cached_icons = list()
|
||||
|
||||
@@ -11,10 +12,10 @@ var/global/list/cached_icons = list()
|
||||
matter = list("metal" = 200)
|
||||
w_class = 3.0
|
||||
amount_per_transfer_from_this = 10
|
||||
possible_transfer_amounts = list(10,20,30,50,70)
|
||||
volume = 70
|
||||
flags = FPRINT | OPENCONTAINER
|
||||
var/paint_type = ""
|
||||
possible_transfer_amounts = list(10,20,30,60)
|
||||
volume = 60
|
||||
flags = OPENCONTAINER
|
||||
var/paint_type = "red"
|
||||
|
||||
afterattack(turf/simulated/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
@@ -28,22 +29,27 @@ var/global/list/cached_icons = list()
|
||||
return ..()
|
||||
|
||||
New()
|
||||
if(paint_type == "remover")
|
||||
name = "paint remover bucket"
|
||||
else if(paint_type && lentext(paint_type) > 0)
|
||||
if(paint_type && lentext(paint_type) > 0)
|
||||
name = paint_type + " " + name
|
||||
..()
|
||||
reagents.add_reagent("paint_[paint_type]", volume)
|
||||
|
||||
on_reagent_change() //Until we have a generic "paint", this will give new colours to all paints in the can
|
||||
var/mixedcolor = mix_color_from_reagents(reagents.reagent_list)
|
||||
for(var/datum/reagent/paint/P in reagents.reagent_list)
|
||||
P.color = mixedcolor
|
||||
reagents.add_reagent("water", volume*3/5)
|
||||
reagents.add_reagent("plasticide", volume/5)
|
||||
if(paint_type == "white") //why don't white crayons exist
|
||||
reagents.add_reagent("aluminum", volume/5)
|
||||
else if (paint_type == "black")
|
||||
reagents.add_reagent("carbon", volume/5)
|
||||
else
|
||||
reagents.add_reagent("crayon_dust_[paint_type]", volume/5)
|
||||
reagents.handle_reactions()
|
||||
|
||||
red
|
||||
icon_state = "paint_red"
|
||||
paint_type = "red"
|
||||
|
||||
yellow
|
||||
icon_state = "paint_yellow"
|
||||
paint_type = "yellow"
|
||||
|
||||
green
|
||||
icon_state = "paint_green"
|
||||
paint_type = "green"
|
||||
@@ -52,13 +58,9 @@ var/global/list/cached_icons = list()
|
||||
icon_state = "paint_blue"
|
||||
paint_type = "blue"
|
||||
|
||||
yellow
|
||||
icon_state = "paint_yellow"
|
||||
paint_type = "yellow"
|
||||
|
||||
violet
|
||||
purple
|
||||
icon_state = "paint_violet"
|
||||
paint_type = "violet"
|
||||
paint_type = "purple"
|
||||
|
||||
black
|
||||
icon_state = "paint_black"
|
||||
@@ -68,170 +70,3 @@ var/global/list/cached_icons = list()
|
||||
icon_state = "paint_white"
|
||||
paint_type = "white"
|
||||
|
||||
remover
|
||||
paint_type = "remover"
|
||||
/*
|
||||
/obj/item/weapon/paint
|
||||
gender= PLURAL
|
||||
name = "paint"
|
||||
desc = "Used to recolor floors and walls. Can not be removed by the janitor."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "paint_neutral"
|
||||
color = "FFFFFF"
|
||||
item_state = "paintcan"
|
||||
w_class = 3.0
|
||||
|
||||
/obj/item/weapon/paint/red
|
||||
name = "red paint"
|
||||
color = "FF0000"
|
||||
icon_state = "paint_red"
|
||||
|
||||
/obj/item/weapon/paint/green
|
||||
name = "green paint"
|
||||
color = "00FF00"
|
||||
icon_state = "paint_green"
|
||||
|
||||
/obj/item/weapon/paint/blue
|
||||
name = "blue paint"
|
||||
color = "0000FF"
|
||||
icon_state = "paint_blue"
|
||||
|
||||
/obj/item/weapon/paint/yellow
|
||||
name = "yellow paint"
|
||||
color = "FFFF00"
|
||||
icon_state = "paint_yellow"
|
||||
|
||||
/obj/item/weapon/paint/violet
|
||||
name = "violet paint"
|
||||
color = "FF00FF"
|
||||
icon_state = "paint_violet"
|
||||
|
||||
/obj/item/weapon/paint/black
|
||||
name = "black paint"
|
||||
color = "333333"
|
||||
icon_state = "paint_black"
|
||||
|
||||
/obj/item/weapon/paint/white
|
||||
name = "white paint"
|
||||
color = "FFFFFF"
|
||||
icon_state = "paint_white"
|
||||
|
||||
|
||||
/obj/item/weapon/paint/anycolor
|
||||
gender= PLURAL
|
||||
name = "any color"
|
||||
icon_state = "paint_neutral"
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
var/t1 = input(user, "Please select a color:", "Locking Computer", null) in list( "red", "blue", "green", "yellow", "black", "white")
|
||||
if ((user.get_active_hand() != src || user.stat || user.restrained()))
|
||||
return
|
||||
switch(t1)
|
||||
if("red")
|
||||
color = "FF0000"
|
||||
if("blue")
|
||||
color = "0000FF"
|
||||
if("green")
|
||||
color = "00FF00"
|
||||
if("yellow")
|
||||
color = "FFFF00"
|
||||
if("violet")
|
||||
color = "FF00FF"
|
||||
if("white")
|
||||
color = "FFFFFF"
|
||||
if("black")
|
||||
color = "333333"
|
||||
icon_state = "paint_[t1]"
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/paint/afterattack(turf/target, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
if(!istype(target) || istype(target, /turf/space))
|
||||
return
|
||||
var/ind = "[initial(target.icon)][color]"
|
||||
if(!cached_icons[ind])
|
||||
var/icon/overlay = new/icon(initial(target.icon))
|
||||
overlay.Blend("#[color]",ICON_MULTIPLY)
|
||||
overlay.SetIntensity(1.4)
|
||||
target.icon = overlay
|
||||
cached_icons[ind] = target.icon
|
||||
else
|
||||
target.icon = cached_icons[ind]
|
||||
return
|
||||
|
||||
/obj/item/weapon/paint/paint_remover
|
||||
gender = PLURAL
|
||||
name = "paint remover"
|
||||
icon_state = "paint_neutral"
|
||||
|
||||
afterattack(turf/target, mob/user as mob)
|
||||
if(istype(target) && target.icon != initial(target.icon))
|
||||
target.icon = initial(target.icon)
|
||||
return
|
||||
*/
|
||||
|
||||
datum/reagent/paint
|
||||
name = "Paint"
|
||||
id = "paint_"
|
||||
reagent_state = 2
|
||||
color = "#808080"
|
||||
description = "This paint will only adhere to floor tiles."
|
||||
|
||||
reaction_turf(var/turf/T, var/volume)
|
||||
if(!istype(T) || istype(T, /turf/space))
|
||||
return
|
||||
T.color = color
|
||||
|
||||
reaction_obj(var/obj/O, var/volume)
|
||||
..()
|
||||
if(istype(O,/obj/item/weapon/light))
|
||||
O.color = color
|
||||
|
||||
red
|
||||
name = "Red Paint"
|
||||
id = "paint_red"
|
||||
color = "#FE191A"
|
||||
|
||||
green
|
||||
name = "Green Paint"
|
||||
color = "#18A31A"
|
||||
id = "paint_green"
|
||||
|
||||
blue
|
||||
name = "Blue Paint"
|
||||
color = "#247CFF"
|
||||
id = "paint_blue"
|
||||
|
||||
yellow
|
||||
name = "Yellow Paint"
|
||||
color = "#FDFE7D"
|
||||
id = "paint_yellow"
|
||||
|
||||
violet
|
||||
name = "Violet Paint"
|
||||
color = "#CC0099"
|
||||
id = "paint_violet"
|
||||
|
||||
black
|
||||
name = "Black Paint"
|
||||
color = "#333333"
|
||||
id = "paint_black"
|
||||
|
||||
white
|
||||
name = "White Paint"
|
||||
color = "#F0F8FF"
|
||||
id = "paint_white"
|
||||
|
||||
datum/reagent/paint_remover
|
||||
name = "Paint Remover"
|
||||
id = "paint_remover"
|
||||
description = "Paint remover is used to remove floor paint from floor tiles."
|
||||
reagent_state = 2
|
||||
color = "#808080"
|
||||
|
||||
reaction_turf(var/turf/T, var/volume)
|
||||
if(istype(T) && T.icon != initial(T.icon))
|
||||
T.icon = initial(T.icon)
|
||||
return
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
//Define all tape types in policetape.dm
|
||||
/obj/item/taperoll
|
||||
name = "tape roll"
|
||||
icon = 'icons/policetape.dmi'
|
||||
icon_state = "rollstart"
|
||||
w_class = 2.0
|
||||
var/turf/start
|
||||
var/turf/end
|
||||
var/tape_type = /obj/item/tape
|
||||
var/icon_base
|
||||
|
||||
/obj/item/tape
|
||||
name = "tape"
|
||||
icon = 'icons/policetape.dmi'
|
||||
anchored = 1
|
||||
var/lifted = 0
|
||||
var/crumpled = 0
|
||||
var/icon_base
|
||||
|
||||
/obj/item/taperoll/police
|
||||
name = "police tape"
|
||||
desc = "A roll of police tape used to block off crime scenes from the public."
|
||||
icon_state = "police_start"
|
||||
tape_type = /obj/item/tape/police
|
||||
icon_base = "police"
|
||||
|
||||
/obj/item/tape/police
|
||||
name = "police tape"
|
||||
desc = "A length of police tape. Do not cross."
|
||||
req_access = list(access_security)
|
||||
icon_base = "police"
|
||||
|
||||
/obj/item/taperoll/engineering
|
||||
name = "engineering tape"
|
||||
desc = "A roll of engineering tape used to block off working areas from the public."
|
||||
icon_state = "engineering_start"
|
||||
tape_type = /obj/item/tape/engineering
|
||||
icon_base = "engineering"
|
||||
|
||||
/obj/item/tape/engineering
|
||||
name = "engineering tape"
|
||||
desc = "A length of engineering tape. Better not cross it."
|
||||
req_one_access = list(access_engine,access_atmospherics)
|
||||
icon_base = "engineering"
|
||||
|
||||
/obj/item/taperoll/attack_self(mob/user as mob)
|
||||
if(icon_state == "[icon_base]_start")
|
||||
start = get_turf(src)
|
||||
usr << "\blue You place the first end of the [src]."
|
||||
icon_state = "[icon_base]_stop"
|
||||
else
|
||||
icon_state = "[icon_base]_start"
|
||||
end = get_turf(src)
|
||||
if(start.y != end.y && start.x != end.x || start.z != end.z)
|
||||
usr << "\blue [src] can only be laid horizontally or vertically."
|
||||
return
|
||||
|
||||
var/turf/cur = start
|
||||
var/dir
|
||||
if (start.x == end.x)
|
||||
var/d = end.y-start.y
|
||||
if(d) d = d/abs(d)
|
||||
end = get_turf(locate(end.x,end.y+d,end.z))
|
||||
dir = "v"
|
||||
else
|
||||
var/d = end.x-start.x
|
||||
if(d) d = d/abs(d)
|
||||
end = get_turf(locate(end.x+d,end.y,end.z))
|
||||
dir = "h"
|
||||
|
||||
var/can_place = 1
|
||||
while (cur!=end && can_place)
|
||||
if(cur.density == 1)
|
||||
can_place = 0
|
||||
else if (istype(cur, /turf/space))
|
||||
can_place = 0
|
||||
else
|
||||
for(var/obj/O in cur)
|
||||
if(!istype(O, /obj/item/tape) && O.density)
|
||||
can_place = 0
|
||||
break
|
||||
cur = get_step_towards(cur,end)
|
||||
if (!can_place)
|
||||
usr << "\blue You can't run \the [src] through that!"
|
||||
return
|
||||
|
||||
cur = start
|
||||
var/tapetest = 0
|
||||
while (cur!=end)
|
||||
for(var/obj/item/tape/Ptest in cur)
|
||||
if(Ptest.icon_state == "[Ptest.icon_base]_[dir]")
|
||||
tapetest = 1
|
||||
if(tapetest != 1)
|
||||
var/obj/item/tape/P = new tape_type(cur)
|
||||
P.icon_state = "[P.icon_base]_[dir]"
|
||||
cur = get_step_towards(cur,end)
|
||||
//is_blocked_turf(var/turf/T)
|
||||
usr << "\blue You finish placing the [src]." //Git Test
|
||||
|
||||
/obj/item/taperoll/afterattack(var/atom/A, mob/user as mob, proximity)
|
||||
if (proximity && istype(A, /obj/machinery/door/airlock))
|
||||
var/turf/T = get_turf(A)
|
||||
var/obj/item/tape/P = new tape_type(T.x,T.y,T.z)
|
||||
P.loc = locate(T.x,T.y,T.z)
|
||||
P.icon_state = "[src.icon_base]_door"
|
||||
P.layer = 3.2
|
||||
user << "\blue You finish placing the [src]."
|
||||
|
||||
/obj/item/tape/proc/crumple()
|
||||
if(!crumpled)
|
||||
crumpled = 1
|
||||
icon_state = "[icon_state]_c"
|
||||
name = "crumpled [name]"
|
||||
|
||||
/obj/item/tape/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(!lifted && ismob(mover))
|
||||
var/mob/M = mover
|
||||
add_fingerprint(M)
|
||||
if (!allowed(M)) //only select few learn art of not crumpling the tape
|
||||
M << "<span class='warning'>You are not supposed to go past [src]...</span>"
|
||||
crumple()
|
||||
return ..(mover)
|
||||
|
||||
/obj/item/tape/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
breaktape(W, user)
|
||||
|
||||
/obj/item/tape/attack_hand(mob/user as mob)
|
||||
if (user.a_intent == "help" && src.allowed(user))
|
||||
user.show_viewers("\blue [user] lifts [src], allowing passage.")
|
||||
crumple()
|
||||
lifted = 1
|
||||
spawn(200)
|
||||
lifted = 0
|
||||
else
|
||||
breaktape(null, user)
|
||||
|
||||
|
||||
|
||||
/obj/item/tape/proc/breaktape(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(user.a_intent == "help" && ((!can_puncture(W) && src.allowed(user))))
|
||||
user << "You can't break the [src] with that!"
|
||||
return
|
||||
user.show_viewers("\blue [user] breaks the [src]!")
|
||||
|
||||
var/dir[2]
|
||||
var/icon_dir = src.icon_state
|
||||
if(icon_dir == "[src.icon_base]_h")
|
||||
dir[1] = EAST
|
||||
dir[2] = WEST
|
||||
if(icon_dir == "[src.icon_base]_v")
|
||||
dir[1] = NORTH
|
||||
dir[2] = SOUTH
|
||||
|
||||
for(var/i=1;i<3;i++)
|
||||
var/N = 0
|
||||
var/turf/cur = get_step(src,dir[i])
|
||||
while(N != 1)
|
||||
N = 1
|
||||
for (var/obj/item/tape/P in cur)
|
||||
if(P.icon_state == icon_dir)
|
||||
N = 0
|
||||
del(P)
|
||||
cur = get_step(cur,dir[i])
|
||||
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
icon_state = "cell"
|
||||
item_state = "cell"
|
||||
origin_tech = "powerstorage=1"
|
||||
flags = FPRINT|TABLEPASS
|
||||
force = 5.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 3
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "scroll"
|
||||
var/uses = 4.0
|
||||
flags = FPRINT | TABLEPASS
|
||||
w_class = 2.0
|
||||
item_state = "paper"
|
||||
throw_speed = 4
|
||||
@@ -70,7 +69,7 @@
|
||||
return
|
||||
|
||||
if(user && user.buckled)
|
||||
user.buckled.unbuckle()
|
||||
user.buckled.unbuckle_mob()
|
||||
|
||||
var/list/tempL = L
|
||||
var/attempt = null
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
if(affecting.take_damage(5, 0))
|
||||
H.UpdateDamageIcon()
|
||||
H.updatehealth()
|
||||
if(!(H.species & NO_PAIN))
|
||||
if(!(H.species && (H.species.flags & NO_PAIN)))
|
||||
H.Weaken(3)
|
||||
..()
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "riot"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BACK
|
||||
force = 5.0
|
||||
throwforce = 5.0
|
||||
@@ -39,7 +39,7 @@
|
||||
desc = "A shield capable of stopping most projectile and melee attacks. It can be retracted, expanded, and stored anywhere."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "eshield0" // eshield1 for expanded
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
force = 3.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
@@ -88,7 +88,7 @@
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "shield0"
|
||||
var/active = 0.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
item_state = "electronic"
|
||||
throwforce = 10.0
|
||||
throw_speed = 2
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
icon_state = "backpack"
|
||||
item_state = "backpack"
|
||||
w_class = 4.0
|
||||
flags = FPRINT|TABLEPASS
|
||||
slot_flags = SLOT_BACK //ERROOOOO
|
||||
max_w_class = 3
|
||||
max_combined_w_class = 21
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
display_contents_with_number = 0 // UNStABLE AS FuCK, turn on when it stops crashing clients
|
||||
use_to_pickup = 1
|
||||
slot_flags = SLOT_BELT
|
||||
flags = FPRINT | TABLEPASS
|
||||
|
||||
// -----------------------------
|
||||
// Trash bag
|
||||
@@ -37,7 +36,7 @@
|
||||
max_w_class = 2
|
||||
storage_slots = 21
|
||||
can_hold = list() // any
|
||||
cant_hold = list("/obj/item/weapon/disk/nuclear")
|
||||
cant_hold = list(/obj/item/weapon/disk/nuclear)
|
||||
|
||||
/obj/item/weapon/storage/bag/trash/update_icon()
|
||||
if(contents.len == 0)
|
||||
@@ -64,7 +63,7 @@
|
||||
max_w_class = 2
|
||||
storage_slots = 21
|
||||
can_hold = list() // any
|
||||
cant_hold = list("/obj/item/weapon/disk/nuclear")
|
||||
cant_hold = list(/obj/item/weapon/disk/nuclear)
|
||||
|
||||
// -----------------------------
|
||||
// Mining Satchel
|
||||
@@ -80,7 +79,7 @@
|
||||
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
|
||||
can_hold = list("/obj/item/weapon/ore")
|
||||
can_hold = list(/obj/item/weapon/ore)
|
||||
|
||||
|
||||
// -----------------------------
|
||||
@@ -95,7 +94,7 @@
|
||||
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 = 2
|
||||
can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/grown","/obj/item/seeds","/obj/item/weapon/grown")
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown)
|
||||
|
||||
|
||||
// -----------------------------
|
||||
@@ -253,4 +252,4 @@
|
||||
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * cash.w_class
|
||||
max_w_class = 3
|
||||
w_class = 2
|
||||
can_hold = list("/obj/item/weapon/coin","/obj/item/weapon/spacecash")
|
||||
can_hold = list(/obj/item/weapon/coin,/obj/item/weapon/spacecash)
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon = 'icons/obj/clothing/belts.dmi'
|
||||
icon_state = "utilitybelt"
|
||||
item_state = "utility"
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
attack_verb = list("whipped", "lashed", "disciplined")
|
||||
|
||||
@@ -21,19 +20,19 @@
|
||||
icon_state = "utilitybelt"
|
||||
item_state = "utility"
|
||||
can_hold = list(
|
||||
//"/obj/item/weapon/combitool",
|
||||
"/obj/item/weapon/crowbar",
|
||||
"/obj/item/weapon/screwdriver",
|
||||
"/obj/item/weapon/weldingtool",
|
||||
"/obj/item/weapon/wirecutters",
|
||||
"/obj/item/weapon/wrench",
|
||||
"/obj/item/device/multitool",
|
||||
"/obj/item/device/flashlight",
|
||||
"/obj/item/stack/cable_coil",
|
||||
"/obj/item/device/t_scanner",
|
||||
"/obj/item/device/analyzer",
|
||||
"/obj/item/taperoll/engineering",
|
||||
"/obj/item/device/robotanalyzer")
|
||||
///obj/item/weapon/combitool,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/weapon/screwdriver,
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/wirecutters,
|
||||
/obj/item/weapon/wrench,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/stack/cable_coil,
|
||||
/obj/item/device/t_scanner,
|
||||
/obj/item/device/analyzer,
|
||||
/obj/item/taperoll/engineering,
|
||||
/obj/item/device/robotanalyzer)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/belt/utility/full/New()
|
||||
@@ -63,24 +62,30 @@
|
||||
icon_state = "medicalbelt"
|
||||
item_state = "medical"
|
||||
can_hold = list(
|
||||
"/obj/item/device/healthanalyzer",
|
||||
"/obj/item/weapon/dnainjector",
|
||||
"/obj/item/weapon/reagent_containers/dropper",
|
||||
"/obj/item/weapon/reagent_containers/glass/beaker",
|
||||
"/obj/item/weapon/reagent_containers/glass/bottle",
|
||||
"/obj/item/weapon/reagent_containers/pill",
|
||||
"/obj/item/weapon/reagent_containers/syringe",
|
||||
"/obj/item/weapon/reagent_containers/glass/dispenser",
|
||||
"/obj/item/weapon/flame/lighter/zippo",
|
||||
"/obj/item/weapon/storage/fancy/cigarettes",
|
||||
"/obj/item/weapon/storage/pill_bottle",
|
||||
"/obj/item/stack/medical",
|
||||
"/obj/item/device/flashlight/pen",
|
||||
"/obj/item/clothing/mask/surgical",
|
||||
"/obj/item/clothing/gloves/latex",
|
||||
"/obj/item/weapon/reagent_containers/hypospray"
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/weapon/dnainjector,
|
||||
/obj/item/weapon/reagent_containers/dropper,
|
||||
/obj/item/weapon/reagent_containers/glass/beaker,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle,
|
||||
/obj/item/weapon/reagent_containers/pill,
|
||||
/obj/item/weapon/reagent_containers/syringe,
|
||||
/obj/item/weapon/flame/lighter/zippo,
|
||||
/obj/item/weapon/storage/fancy/cigarettes,
|
||||
/obj/item/weapon/storage/pill_bottle,
|
||||
/obj/item/stack/medical,
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/clothing/mask/surgical,
|
||||
/obj/item/clothing/gloves/latex,
|
||||
/obj/item/weapon/reagent_containers/hypospray
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/medical/emt
|
||||
name = "EMT utility belt"
|
||||
desc = "A sturdy black webbing belt with attached pouches."
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
icon_state = "emsbelt"
|
||||
item_state = "emsbelt"
|
||||
|
||||
|
||||
/obj/item/weapon/storage/belt/security
|
||||
name = "security belt"
|
||||
@@ -91,25 +96,24 @@
|
||||
max_w_class = 3
|
||||
max_combined_w_class = 21
|
||||
can_hold = list(
|
||||
"/obj/item/weapon/grenade",
|
||||
"/obj/item/weapon/reagent_containers/spray/pepper",
|
||||
"/obj/item/weapon/handcuffs",
|
||||
"/obj/item/device/flash",
|
||||
"/obj/item/clothing/glasses",
|
||||
"/obj/item/ammo_casing/shotgun",
|
||||
"/obj/item/ammo_magazine",
|
||||
"/obj/item/weapon/reagent_containers/food/snacks/donut/normal",
|
||||
"/obj/item/weapon/reagent_containers/food/snacks/donut/jelly",
|
||||
"/obj/item/weapon/melee/baton",
|
||||
"/obj/item/weapon/gun/energy/taser",
|
||||
"/obj/item/weapon/flame/lighter/zippo",
|
||||
"/obj/item/weapon/cigpacket",
|
||||
"/obj/item/clothing/glasses/hud/security",
|
||||
"/obj/item/device/flashlight",
|
||||
"/obj/item/device/pda",
|
||||
"/obj/item/device/radio/headset",
|
||||
"/obj/item/weapon/melee",
|
||||
"/obj/item/taperoll/police"
|
||||
/obj/item/weapon/grenade,
|
||||
/obj/item/weapon/reagent_containers/spray/pepper,
|
||||
/obj/item/weapon/handcuffs,
|
||||
/obj/item/device/flash,
|
||||
/obj/item/clothing/glasses,
|
||||
/obj/item/ammo_casing/shotgun,
|
||||
/obj/item/ammo_magazine,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/normal,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/jelly,
|
||||
/obj/item/weapon/melee/baton,
|
||||
/obj/item/weapon/gun/energy/taser,
|
||||
/obj/item/weapon/flame/lighter/zippo,
|
||||
/obj/item/clothing/glasses/hud/security,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/device/pda,
|
||||
/obj/item/device/radio/headset,
|
||||
/obj/item/weapon/melee,
|
||||
/obj/item/taperoll/police
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/soulstone
|
||||
@@ -119,7 +123,7 @@
|
||||
item_state = "soulstonebelt"
|
||||
storage_slots = 6
|
||||
can_hold = list(
|
||||
"/obj/item/device/soulstone"
|
||||
/obj/item/device/soulstone
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/soulstone/full/New()
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 3.0
|
||||
flags = FPRINT | TABLEPASS
|
||||
var/mob/affecting = null
|
||||
var/deity_name = "Christ"
|
||||
|
||||
|
||||
@@ -79,7 +79,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"
|
||||
|
||||
New()
|
||||
@@ -92,6 +91,22 @@
|
||||
new /obj/item/weapon/reagent_containers/syringe( src )
|
||||
new /obj/item/weapon/reagent_containers/syringe( src )
|
||||
|
||||
/obj/item/weapon/storage/box/syringegun
|
||||
name = "box of syringe gun cartridges"
|
||||
desc = "A box full of compressed gas cartridges."
|
||||
icon_state = "syringe"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/syringe_cartridge( src )
|
||||
new /obj/item/weapon/syringe_cartridge( src )
|
||||
new /obj/item/weapon/syringe_cartridge( src )
|
||||
new /obj/item/weapon/syringe_cartridge( src )
|
||||
new /obj/item/weapon/syringe_cartridge( src )
|
||||
new /obj/item/weapon/syringe_cartridge( src )
|
||||
new /obj/item/weapon/syringe_cartridge( src )
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/beakers
|
||||
name = "box of beakers"
|
||||
icon_state = "beaker"
|
||||
@@ -149,7 +164,7 @@
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
|
||||
/obj/item/weapon/storage/box/shotgunammo
|
||||
name = "box of shotgun shells"
|
||||
name = "box of shotgun slugs"
|
||||
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
|
||||
|
||||
New()
|
||||
@@ -162,6 +177,62 @@
|
||||
new /obj/item/ammo_casing/shotgun(src)
|
||||
new /obj/item/ammo_casing/shotgun(src)
|
||||
|
||||
/obj/item/weapon/storage/box/shotgunshells
|
||||
name = "box of shotgun shells"
|
||||
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/pellet(src)
|
||||
new /obj/item/ammo_casing/shotgun/pellet(src)
|
||||
new /obj/item/ammo_casing/shotgun/pellet(src)
|
||||
new /obj/item/ammo_casing/shotgun/pellet(src)
|
||||
new /obj/item/ammo_casing/shotgun/pellet(src)
|
||||
new /obj/item/ammo_casing/shotgun/pellet(src)
|
||||
new /obj/item/ammo_casing/shotgun/pellet(src)
|
||||
|
||||
/obj/item/weapon/storage/box/flashshells
|
||||
name = "box of illumination shells"
|
||||
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/flash(src)
|
||||
new /obj/item/ammo_casing/shotgun/flash(src)
|
||||
new /obj/item/ammo_casing/shotgun/flash(src)
|
||||
new /obj/item/ammo_casing/shotgun/flash(src)
|
||||
new /obj/item/ammo_casing/shotgun/flash(src)
|
||||
new /obj/item/ammo_casing/shotgun/flash(src)
|
||||
new /obj/item/ammo_casing/shotgun/flash(src)
|
||||
|
||||
/obj/item/weapon/storage/box/stunshells
|
||||
name = "box of stun shells"
|
||||
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/stunshell(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunshell(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunshell(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunshell(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunshell(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunshell(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunshell(src)
|
||||
|
||||
/obj/item/weapon/storage/box/heavysniperammo
|
||||
name = "box of 14.5mm AP shells"
|
||||
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/a145(src)
|
||||
new /obj/item/ammo_casing/a145(src)
|
||||
new /obj/item/ammo_casing/a145(src)
|
||||
new /obj/item/ammo_casing/a145(src)
|
||||
new /obj/item/ammo_casing/a145(src)
|
||||
new /obj/item/ammo_casing/a145(src)
|
||||
new /obj/item/ammo_casing/a145(src)
|
||||
|
||||
/obj/item/weapon/storage/box/flashbangs
|
||||
name = "box of flashbangs (WARNING)"
|
||||
desc = "<B>WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use.</B>"
|
||||
@@ -309,6 +380,20 @@
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
|
||||
|
||||
/obj/item/weapon/storage/box/sinpockets
|
||||
name = "box of sin-pockets"
|
||||
desc = "<B>Instructions:</B> <I>Crush bottom of package to initiate chemical heating. Wait for 20 seconds before consumption. Product will cool if not eaten within seven minutes.</I>"
|
||||
icon_state = "donk_kit"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes
|
||||
name = "monkey cube box"
|
||||
@@ -316,7 +401,7 @@
|
||||
icon = 'icons/obj/food.dmi'
|
||||
icon_state = "monkeycubebox"
|
||||
storage_slots = 7
|
||||
can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/monkeycube")
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube)
|
||||
New()
|
||||
..()
|
||||
if(src.type == /obj/item/weapon/storage/box/monkeycubes)
|
||||
@@ -430,7 +515,7 @@
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "spbox"
|
||||
storage_slots = 8
|
||||
can_hold = list("/obj/item/toy/snappop")
|
||||
can_hold = list(/obj/item/toy/snappop)
|
||||
New()
|
||||
..()
|
||||
for(var/i=1; i <= storage_slots; i++)
|
||||
@@ -444,9 +529,8 @@
|
||||
item_state = "zippo"
|
||||
storage_slots = 10
|
||||
w_class = 1
|
||||
flags = TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
can_hold = list("/obj/item/weapon/flame/match")
|
||||
can_hold = list(/obj/item/weapon/flame/match)
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -479,7 +563,7 @@
|
||||
item_state = "syringe_kit"
|
||||
foldable = /obj/item/stack/sheet/cardboard //BubbleWrap
|
||||
storage_slots=21
|
||||
can_hold = list("/obj/item/weapon/light/tube", "/obj/item/weapon/light/bulb")
|
||||
can_hold = list(/obj/item/weapon/light/tube, /obj/item/weapon/light/bulb)
|
||||
max_combined_w_class = 42 //holds 21 items of w_class 2
|
||||
use_to_pickup = 1 // for picking up broken bulbs, not that most people will try
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional."
|
||||
icon_state = "briefcase"
|
||||
item_state = "briefcase"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
force = 8.0
|
||||
throw_speed = 1
|
||||
throw_range = 4
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
/obj/item/weapon/storage/fancy/examine(mob/user)
|
||||
if(!..(user, 1))
|
||||
return
|
||||
|
||||
|
||||
if(contents.len <= 0)
|
||||
user << "There are no [src.icon_type]s left in the box."
|
||||
else if(contents.len == 1)
|
||||
@@ -48,7 +48,7 @@
|
||||
name = "egg box"
|
||||
storage_slots = 12
|
||||
max_combined_w_class = 24
|
||||
can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/egg")
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/egg)
|
||||
|
||||
/obj/item/weapon/storage/fancy/egg_box/New()
|
||||
..()
|
||||
@@ -69,7 +69,6 @@
|
||||
item_state = "candlebox5"
|
||||
storage_slots = 5
|
||||
throwforce = 2
|
||||
flags = TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
|
||||
@@ -92,7 +91,7 @@
|
||||
storage_slots = 6
|
||||
icon_type = "crayon"
|
||||
can_hold = list(
|
||||
"/obj/item/toy/crayon"
|
||||
/obj/item/toy/crayon
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/fancy/crayons/New()
|
||||
@@ -133,17 +132,16 @@
|
||||
item_state = "cigpacket"
|
||||
w_class = 1
|
||||
throwforce = 2
|
||||
flags = TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
storage_slots = 6
|
||||
can_hold = list("/obj/item/clothing/mask/cigarette")
|
||||
can_hold = list(/obj/item/clothing/mask/smokable/cigarette)
|
||||
icon_type = "cigarette"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/New()
|
||||
..()
|
||||
flags |= NOREACT
|
||||
for(var/i = 1 to storage_slots)
|
||||
new /obj/item/clothing/mask/cigarette(src)
|
||||
new /obj/item/clothing/mask/smokable/cigarette(src)
|
||||
create_reagents(15 * storage_slots)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/Del()
|
||||
@@ -156,7 +154,7 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/remove_from_storage(obj/item/W as obj, atom/new_location)
|
||||
var/obj/item/clothing/mask/cigarette/C = W
|
||||
var/obj/item/clothing/mask/smokable/cigarette/C = W
|
||||
if(!istype(C)) return // what
|
||||
reagents.trans_to(C, (reagents.total_volume/contents.len))
|
||||
..()
|
||||
@@ -166,7 +164,7 @@
|
||||
return
|
||||
|
||||
if(M == user && user.zone_sel.selecting == "mouth" && contents.len > 0 && !user.wear_mask)
|
||||
var/obj/item/clothing/mask/cigarette/W = new /obj/item/clothing/mask/cigarette(user)
|
||||
var/obj/item/clothing/mask/smokable/cigarette/W = new /obj/item/clothing/mask/smokable/cigarette(user)
|
||||
reagents.trans_to(W, (reagents.total_volume/contents.len))
|
||||
user.equip_to_slot_if_possible(W, slot_wear_mask)
|
||||
reagents.maximum_volume = 15 * contents.len
|
||||
@@ -190,17 +188,16 @@
|
||||
icon = 'icons/obj/cigarettes.dmi'
|
||||
w_class = 1
|
||||
throwforce = 2
|
||||
flags = TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
storage_slots = 7
|
||||
can_hold = list("/obj/item/clothing/mask/cigarette/cigar")
|
||||
can_hold = list(/obj/item/clothing/mask/smokable/cigarette/cigar)
|
||||
icon_type = "cigar"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigar/New()
|
||||
..()
|
||||
flags |= NOREACT
|
||||
for(var/i = 1 to storage_slots)
|
||||
new /obj/item/clothing/mask/cigarette/cigar(src)
|
||||
new /obj/item/clothing/mask/smokable/cigarette/cigar(src)
|
||||
create_reagents(15 * storage_slots)
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigar/Del()
|
||||
@@ -212,7 +209,7 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigar/remove_from_storage(obj/item/W as obj, atom/new_location)
|
||||
var/obj/item/clothing/mask/cigarette/cigar/C = W
|
||||
var/obj/item/clothing/mask/smokable/cigarette/cigar/C = W
|
||||
if(!istype(C)) return
|
||||
reagents.trans_to(C, (reagents.total_volume/contents.len))
|
||||
..()
|
||||
@@ -222,7 +219,7 @@
|
||||
return
|
||||
|
||||
if(M == user && user.zone_sel.selecting == "mouth" && contents.len > 0 && !user.wear_mask)
|
||||
var/obj/item/clothing/mask/cigarette/cigar/W = new /obj/item/clothing/mask/cigarette/cigar(user)
|
||||
var/obj/item/clothing/mask/smokable/cigarette/cigar/W = new /obj/item/clothing/mask/smokable/cigarette/cigar(user)
|
||||
reagents.trans_to(W, (reagents.total_volume/contents.len))
|
||||
user.equip_to_slot_if_possible(W, slot_wear_mask)
|
||||
reagents.maximum_volume = 15 * contents.len
|
||||
@@ -242,7 +239,7 @@
|
||||
icon_type = "vial"
|
||||
name = "vial storage box"
|
||||
storage_slots = 6
|
||||
can_hold = list("/obj/item/weapon/reagent_containers/glass/beaker/vial")
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/glass/beaker/vial)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/fancy/vials/New()
|
||||
@@ -258,7 +255,7 @@
|
||||
icon_state = "vialbox0"
|
||||
item_state = "syringe_kit"
|
||||
max_w_class = 3
|
||||
can_hold = list("/obj/item/weapon/reagent_containers/glass/beaker/vial")
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/glass/beaker/vial)
|
||||
max_combined_w_class = 14 //The sum of the w_classes of all the items in this storage item.
|
||||
storage_slots = 6
|
||||
req_access = list(access_virology)
|
||||
|
||||
@@ -109,6 +109,25 @@
|
||||
new /obj/item/stack/medical/advanced/ointment(src)
|
||||
new /obj/item/stack/medical/splint(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/firstaid/combat
|
||||
name = "combat medical kit"
|
||||
desc = "Contains advanced medical treatments."
|
||||
icon_state = "bezerk"
|
||||
item_state = "firstaid-advanced"
|
||||
|
||||
/obj/item/weapon/storage/firstaid/combat/New()
|
||||
..()
|
||||
if (empty) return
|
||||
new /obj/item/weapon/storage/pill_bottle/bicaridine(src)
|
||||
new /obj/item/weapon/storage/pill_bottle/dermaline(src)
|
||||
new /obj/item/weapon/storage/pill_bottle/dexalin_plus(src)
|
||||
new /obj/item/weapon/storage/pill_bottle/dylovene(src)
|
||||
new /obj/item/weapon/storage/pill_bottle/tramadol(src)
|
||||
new /obj/item/weapon/storage/pill_bottle/spaceacillin(src)
|
||||
new /obj/item/stack/medical/splint(src)
|
||||
return
|
||||
|
||||
/*
|
||||
* Pill Bottles
|
||||
*/
|
||||
@@ -119,26 +138,12 @@
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
item_state = "contsolid"
|
||||
w_class = 2.0
|
||||
can_hold = list("/obj/item/weapon/reagent_containers/pill","/obj/item/weapon/dice","/obj/item/weapon/paper")
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice,/obj/item/weapon/paper)
|
||||
allow_quick_gather = 1
|
||||
use_to_pickup = 1
|
||||
storage_slots = 14
|
||||
use_sound = null
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/kelotane
|
||||
name = "bottle of kelotane pills"
|
||||
desc = "Contains pills used to treat burns."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/antitox
|
||||
name = "bottle of Dylovene pills"
|
||||
desc = "Contains pills used to counter toxins."
|
||||
@@ -153,6 +158,62 @@
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox( src )
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/bicaridine
|
||||
name = "bottle of Bicaridine pills"
|
||||
desc = "Contains pills used to stabilize the severely injured."
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/bicaridine/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dexalin_plus
|
||||
name = "bottle of Dexalin Plus pills"
|
||||
desc = "Contains pills used to treat extreme cases of oxygen deprivation."
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dexalin_plus/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dermaline
|
||||
name = "bottle of Dermaline pills"
|
||||
desc = "Contains pills used to treat burn wounds."
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dermaline/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dylovene
|
||||
name = "bottle of Dylovene pills"
|
||||
desc = "Contains pills used to treat toxic substances in the blood."
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dylovene/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/inaprovaline
|
||||
name = "bottle of Inaprovaline pills"
|
||||
desc = "Contains pills used to stabilize patients."
|
||||
@@ -167,8 +228,36 @@
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline( src )
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/kelotane
|
||||
name = "bottle of kelotane pills"
|
||||
desc = "Contains pills used to treat burns."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/spaceacillin
|
||||
name = "bottle of Spaceacillin pills"
|
||||
desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space."
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/spaceacillin/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/tramadol
|
||||
name = "bottle of Tramadol Pills"
|
||||
name = "bottle of Tramadol pills"
|
||||
desc = "Contains pills used to relieve pain."
|
||||
|
||||
New()
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
/obj/item/weapon/storage/pill_bottle/dice
|
||||
name = "pack of dice"
|
||||
desc = "It's a small container with dice inside."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/dice( src )
|
||||
new /obj/item/weapon/dice/d20( src )
|
||||
|
||||
/*
|
||||
* Donut Box
|
||||
*/
|
||||
|
||||
/obj/item/weapon/storage/donut_box
|
||||
icon = 'icons/obj/food.dmi'
|
||||
icon_state = "donutbox"
|
||||
name = "donut box"
|
||||
storage_slots = 6
|
||||
var/startswith = 6
|
||||
can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/donut")
|
||||
foldable = /obj/item/stack/sheet/cardboard
|
||||
|
||||
/obj/item/weapon/storage/donut_box/New()
|
||||
..()
|
||||
for(var/i=1; i <= startswith; i++)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donut/normal(src)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/donut_box/update_icon()
|
||||
overlays.Cut()
|
||||
var/i = 0
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/donut/D in contents)
|
||||
var/image/img = image('icons/obj/food.dmi', D.overlay_state)
|
||||
img.pixel_x = i * 3
|
||||
overlays += img
|
||||
i++
|
||||
|
||||
/obj/item/weapon/storage/donut_box/empty
|
||||
icon_state = "donutbox0"
|
||||
startswith = 0
|
||||
/obj/item/weapon/storage/pill_bottle/dice
|
||||
name = "pack of dice"
|
||||
desc = "It's a small container with dice inside."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/dice( src )
|
||||
new /obj/item/weapon/dice/d20( src )
|
||||
|
||||
/*
|
||||
* Donut Box
|
||||
*/
|
||||
|
||||
/obj/item/weapon/storage/donut_box
|
||||
icon = 'icons/obj/food.dmi'
|
||||
icon_state = "donutbox"
|
||||
name = "donut box"
|
||||
storage_slots = 6
|
||||
var/startswith = 6
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut)
|
||||
foldable = /obj/item/stack/sheet/cardboard
|
||||
|
||||
/obj/item/weapon/storage/donut_box/New()
|
||||
..()
|
||||
for(var/i=1; i <= startswith; i++)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/donut/normal(src)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/donut_box/update_icon()
|
||||
overlays.Cut()
|
||||
var/i = 0
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/donut/D in contents)
|
||||
var/image/img = image('icons/obj/food.dmi', D.overlay_state)
|
||||
img.pixel_x = i * 3
|
||||
overlays += img
|
||||
i++
|
||||
|
||||
/obj/item/weapon/storage/donut_box/empty
|
||||
icon_state = "donutbox0"
|
||||
startswith = 0
|
||||
|
||||
@@ -145,7 +145,6 @@
|
||||
icon_state = "secure"
|
||||
item_state = "sec-case"
|
||||
desc = "A large briefcase with a digital locking system."
|
||||
flags = FPRINT | TABLEPASS
|
||||
force = 8.0
|
||||
throw_speed = 1
|
||||
throw_range = 4
|
||||
@@ -216,13 +215,12 @@
|
||||
icon_opened = "safe0"
|
||||
icon_locking = "safeb"
|
||||
icon_sparking = "safespark"
|
||||
flags = FPRINT | TABLEPASS
|
||||
force = 8.0
|
||||
w_class = 8.0
|
||||
max_w_class = 8
|
||||
anchored = 1.0
|
||||
density = 0
|
||||
cant_hold = list("/obj/item/weapon/storage/secure/briefcase")
|
||||
cant_hold = list(/obj/item/weapon/storage/secure/briefcase)
|
||||
|
||||
New()
|
||||
..()
|
||||
|
||||
@@ -209,24 +209,17 @@
|
||||
usr << "<span class='notice'>[src] is full, make some space.</span>"
|
||||
return 0 //Storage item is full
|
||||
|
||||
if(can_hold.len)
|
||||
var/ok = 0
|
||||
for(var/A in can_hold)
|
||||
if(istype(W, text2path(A) ))
|
||||
ok = 1
|
||||
break
|
||||
if(!ok)
|
||||
if(!stop_messages)
|
||||
if (istype(W, /obj/item/weapon/hand_labeler))
|
||||
return 0
|
||||
usr << "<span class='notice'>[src] cannot hold [W].</span>"
|
||||
return 0
|
||||
if(can_hold.len && !is_type_in_list(W, can_hold))
|
||||
if(!stop_messages)
|
||||
if (istype(W, /obj/item/weapon/hand_labeler))
|
||||
return 0
|
||||
usr << "<span class='notice'>[src] cannot hold [W].</span>"
|
||||
return 0
|
||||
|
||||
for(var/A in cant_hold) //Check for specific items which this container can't hold.
|
||||
if(istype(W, text2path(A) ))
|
||||
if(!stop_messages)
|
||||
usr << "<span class='notice'>[src] cannot hold [W].</span>"
|
||||
return 0
|
||||
if(cant_hold.len && is_type_in_list(W, cant_hold))
|
||||
if(!stop_messages)
|
||||
usr << "<span class='notice'>[src] cannot hold [W].</span>"
|
||||
return 0
|
||||
|
||||
if (W.w_class > max_w_class)
|
||||
if(!stop_messages)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "red"
|
||||
item_state = "toolbox_red"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
force = 5.0
|
||||
throwforce = 10.0
|
||||
throw_speed = 1
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
return
|
||||
|
||||
if("guns")
|
||||
new /obj/item/weapon/gun/projectile(src)
|
||||
new /obj/item/weapon/gun/projectile/revolver(src)
|
||||
new /obj/item/ammo_magazine/a357(src)
|
||||
new /obj/item/weapon/card/emag(src)
|
||||
new /obj/item/weapon/plastique(src)
|
||||
@@ -149,3 +149,71 @@
|
||||
..()
|
||||
new /obj/item/weapon/stamp/chameleon(src)
|
||||
new /obj/item/weapon/pen/chameleon(src)
|
||||
new /obj/item/device/destTagger(src)
|
||||
new /obj/item/weapon/packageWrap(src)
|
||||
new /obj/item/weapon/hand_labeler(src)
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/spy
|
||||
name = "spy kit"
|
||||
desc = "For when you want to conduct voyeurism from afar."
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/spy/New()
|
||||
..()
|
||||
new /obj/item/device/spy_bug(src)
|
||||
new /obj/item/device/spy_bug(src)
|
||||
new /obj/item/device/spy_bug(src)
|
||||
new /obj/item/device/spy_bug(src)
|
||||
new /obj/item/device/spy_bug(src)
|
||||
new /obj/item/device/spy_bug(src)
|
||||
new /obj/item/device/spy_monitor(src)
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/g9mm
|
||||
name = "\improper Smooth operator"
|
||||
desc = "9mm with silencer kit."
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/g9mm/New()
|
||||
..()
|
||||
new /obj/item/weapon/gun/projectile/pistol(src)
|
||||
new /obj/item/weapon/silencer(src)
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/cigarette
|
||||
name = "\improper Tricky smokes"
|
||||
desc = "Comes with the following brands of cigarettes, in this order: 2xFlash, 2xSmoke, 1xMindBreaker, 1xTricordrazine. Avoid mixing them up."
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/cigarette/New()
|
||||
..()
|
||||
var/obj/item/weapon/storage/fancy/cigarettes/pack
|
||||
pack = new /obj/item/weapon/storage/fancy/cigarettes(src)
|
||||
fill_cigarre_package(pack, list("aluminum" = 5, "potassium" = 5, "sulfur" = 5))
|
||||
pack.desc += " 'F' has been scribbled on it."
|
||||
|
||||
pack = new /obj/item/weapon/storage/fancy/cigarettes(src)
|
||||
fill_cigarre_package(pack, list("aluminum" = 5, "potassium" = 5, "sulfur" = 5))
|
||||
pack.desc += " 'F' has been scribbled on it."
|
||||
|
||||
pack = new /obj/item/weapon/storage/fancy/cigarettes(src)
|
||||
fill_cigarre_package(pack, list("potassium" = 5, "sugar" = 5, "phosphorus" = 5))
|
||||
pack.desc += " 'S' has been scribbled on it."
|
||||
|
||||
pack = new /obj/item/weapon/storage/fancy/cigarettes(src)
|
||||
fill_cigarre_package(pack, list("potassium" = 5, "sugar" = 5, "phosphorus" = 5))
|
||||
pack.desc += " 'S' has been scribbled on it."
|
||||
|
||||
pack = new /obj/item/weapon/storage/fancy/cigarettes(src)
|
||||
// Dylovene. Going with 1.5 rather than 1.6666666...
|
||||
fill_cigarre_package(pack, list("potassium" = 1.5, "nitrogen" = 1.5, "silicon" = 1.5))
|
||||
// Mindbreaker
|
||||
fill_cigarre_package(pack, list("silicon" = 4.5, "hydrogen" = 4.5))
|
||||
|
||||
pack.desc += " 'MB' has been scribbled on it."
|
||||
|
||||
pack = new /obj/item/weapon/storage/fancy/cigarettes(src)
|
||||
pack.reagents.add_reagent("tricordrazine", 15 * pack.storage_slots)
|
||||
pack.desc += " 'T' has been scribbled on it."
|
||||
|
||||
new /obj/item/weapon/flame/lighter/zippo(src)
|
||||
|
||||
/proc/fill_cigarre_package(var/obj/item/weapon/storage/fancy/cigarettes/C, var/list/reagents)
|
||||
for(var/reagent in reagents)
|
||||
C.reagents.add_reagent(reagent, reagents[reagent] * C.storage_slots)
|
||||
|
||||
|
||||
@@ -5,25 +5,25 @@
|
||||
icon_state = "wallet"
|
||||
w_class = 2
|
||||
can_hold = list(
|
||||
"/obj/item/weapon/spacecash",
|
||||
"/obj/item/weapon/card",
|
||||
"/obj/item/clothing/mask/cigarette",
|
||||
"/obj/item/device/flashlight/pen",
|
||||
"/obj/item/seeds",
|
||||
"/obj/item/stack/medical",
|
||||
"/obj/item/toy/crayon",
|
||||
"/obj/item/weapon/coin",
|
||||
"/obj/item/weapon/dice",
|
||||
"/obj/item/weapon/disk",
|
||||
"/obj/item/weapon/implanter",
|
||||
"/obj/item/weapon/flame/lighter",
|
||||
"/obj/item/weapon/flame/match",
|
||||
"/obj/item/weapon/paper",
|
||||
"/obj/item/weapon/pen",
|
||||
"/obj/item/weapon/photo",
|
||||
"/obj/item/weapon/reagent_containers/dropper",
|
||||
"/obj/item/weapon/screwdriver",
|
||||
"/obj/item/weapon/stamp")
|
||||
/obj/item/weapon/spacecash,
|
||||
/obj/item/weapon/card,
|
||||
/obj/item/clothing/mask/smokable/cigarette/,
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/seeds,
|
||||
/obj/item/stack/medical,
|
||||
/obj/item/toy/crayon,
|
||||
/obj/item/weapon/coin,
|
||||
/obj/item/weapon/dice,
|
||||
/obj/item/weapon/disk,
|
||||
/obj/item/weapon/implanter,
|
||||
/obj/item/weapon/flame/lighter,
|
||||
/obj/item/weapon/flame/match,
|
||||
/obj/item/weapon/paper,
|
||||
/obj/item/weapon/pen,
|
||||
/obj/item/weapon/photo,
|
||||
/obj/item/weapon/reagent_containers/dropper,
|
||||
/obj/item/weapon/screwdriver,
|
||||
/obj/item/weapon/stamp)
|
||||
slot_flags = SLOT_ID
|
||||
|
||||
var/obj/item/weapon/card/id/front_id = null
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "retractor"
|
||||
matter = list("metal" = 10000, "glass" = 5000)
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
w_class = 2.0
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "hemostat"
|
||||
matter = list("metal" = 5000, "glass" = 2500)
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
w_class = 2.0
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
attack_verb = list("attacked", "pinched")
|
||||
@@ -44,7 +44,7 @@
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "cautery"
|
||||
matter = list("metal" = 5000, "glass" = 2500)
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
w_class = 2.0
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
attack_verb = list("burnt")
|
||||
@@ -59,7 +59,7 @@
|
||||
icon_state = "drill"
|
||||
hitsound = 'sound/weapons/circsawhit.ogg'
|
||||
matter = list("metal" = 15000, "glass" = 10000)
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
force = 15.0
|
||||
w_class = 2.0
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
@@ -78,7 +78,7 @@
|
||||
desc = "Cut, cut, and once more cut."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "scalpel"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
force = 10.0
|
||||
sharp = 1
|
||||
edge = 1
|
||||
@@ -134,7 +134,7 @@
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "saw3"
|
||||
hitsound = 'sound/weapons/circsawhit.ogg'
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
force = 15.0
|
||||
w_class = 2.0
|
||||
throwforce = 9.0
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "baton"
|
||||
item_state = "classic_baton"
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
force = 10
|
||||
|
||||
@@ -70,7 +69,6 @@
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "telebaton_0"
|
||||
item_state = "telebaton_0"
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2
|
||||
force = 3
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "table_parts"
|
||||
matter = list("metal" = 3750)
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
attack_verb = list("slammed", "bashed", "battered", "bludgeoned", "thrashed", "whacked")
|
||||
|
||||
var/build_type = /obj/structure/table
|
||||
@@ -50,7 +50,7 @@
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "reinf_tableparts"
|
||||
matter = list("metal" = 7500)
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
|
||||
stack_types = list(/obj/item/stack/sheet/metal, /obj/item/stack/rods)
|
||||
build_type = /obj/structure/table/reinforced
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
name = "phoron tank"
|
||||
desc = "Contains dangerous phoron. Do not inhale. Warning: extremely flammable."
|
||||
icon_state = "phoron"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = null //they have no straps!
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
name = "emergency oxygen tank"
|
||||
desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it."
|
||||
icon_state = "emergency"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2.0
|
||||
force = 4.0
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/obj/item/weapon/tank
|
||||
name = "tank"
|
||||
icon = 'icons/obj/tank.dmi'
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = 3
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
var/frequency = 1451
|
||||
var/broadcasting = null
|
||||
var/listening = 1.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
w_class = 2.0
|
||||
item_state = "electronic"
|
||||
throw_speed = 4
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
desc = "A wrench with many common uses. Can be usually found in your hand."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "wrench"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
@@ -37,7 +37,7 @@
|
||||
desc = "You can be totally screwwy with this."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "screwdriver"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 5.0
|
||||
w_class = 1.0
|
||||
@@ -96,7 +96,7 @@
|
||||
desc = "This cuts wires."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "cutters"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 6.0
|
||||
throw_speed = 2
|
||||
@@ -119,6 +119,8 @@
|
||||
"You cut \the [C]'s restraints with \the [src]!",\
|
||||
"You hear cable being cut.")
|
||||
C.handcuffed = null
|
||||
if(C.buckled && C.buckled.buckle_require_restraints)
|
||||
C.buckled.unbuckle_mob()
|
||||
C.update_inv_handcuffed()
|
||||
return
|
||||
else
|
||||
@@ -131,7 +133,7 @@
|
||||
name = "welding tool"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "welder"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
//Amount of OUCH when it's thrown
|
||||
@@ -259,6 +261,9 @@
|
||||
if (src.welding)
|
||||
remove_fuel(1)
|
||||
var/turf/location = get_turf(user)
|
||||
if(isliving(O))
|
||||
var/mob/living/L = O
|
||||
L.IgniteMob()
|
||||
if (istype(location, /turf))
|
||||
location.hotspot_expose(700, 50, 1)
|
||||
return
|
||||
@@ -433,7 +438,7 @@
|
||||
desc = "Used to remove floors and to pry open doors."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "crowbar"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
@@ -531,4 +536,4 @@
|
||||
if(!resolved && tool && target)
|
||||
tool.afterattack(target,user,1)
|
||||
if(tool)
|
||||
tool.loc = src*/
|
||||
tool.loc = src*/
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
var/force_wielded = 0
|
||||
var/wieldsound = null
|
||||
var/unwieldsound = null
|
||||
var/base_icon
|
||||
|
||||
/obj/item/weapon/twohanded/proc/unwield()
|
||||
wielded = 0
|
||||
@@ -34,6 +35,10 @@
|
||||
name = "[initial(name)] (Wielded)"
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/twohanded/New()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/twohanded/mob_can_equip(M as mob, slot)
|
||||
//Cannot equip wielded items.
|
||||
if(wielded)
|
||||
@@ -51,7 +56,8 @@
|
||||
return unwield()
|
||||
|
||||
/obj/item/weapon/twohanded/update_icon()
|
||||
return
|
||||
icon_state = "[base_icon][wielded]"
|
||||
item_state = icon_state
|
||||
|
||||
/obj/item/weapon/twohanded/pickup(mob/user)
|
||||
unwield()
|
||||
@@ -106,11 +112,15 @@
|
||||
wield()
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/twohanded/offhand/update_icon()
|
||||
return
|
||||
|
||||
/*
|
||||
* Fireaxe
|
||||
*/
|
||||
/obj/item/weapon/twohanded/fireaxe // DEM AXES MAN, marker -Agouri
|
||||
icon_state = "fireaxe0"
|
||||
base_icon = "fireaxe"
|
||||
name = "fire axe"
|
||||
desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?"
|
||||
force = 10
|
||||
@@ -121,10 +131,6 @@
|
||||
force_wielded = 40
|
||||
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
|
||||
|
||||
/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/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
..()
|
||||
@@ -146,6 +152,7 @@
|
||||
*/
|
||||
/obj/item/weapon/twohanded/dualsaber
|
||||
icon_state = "dualsaber0"
|
||||
base_icon = "dualsaber"
|
||||
name = "double-bladed energy sword"
|
||||
desc = "Handle with care."
|
||||
force = 3
|
||||
@@ -156,16 +163,12 @@
|
||||
force_wielded = 30
|
||||
wieldsound = 'sound/weapons/saberon.ogg'
|
||||
unwieldsound = 'sound/weapons/saberoff.ogg'
|
||||
flags = FPRINT | TABLEPASS | NOSHIELD
|
||||
flags = NOSHIELD
|
||||
origin_tech = "magnets=3;syndicate=4"
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
sharp = 1
|
||||
edge = 1
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/update_icon()
|
||||
icon_state = "dualsaber[wielded]"
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/attack(target as mob, mob/living/user as mob)
|
||||
..()
|
||||
if((CLUMSY in user.mutations) && (wielded) &&prob(40))
|
||||
@@ -187,6 +190,7 @@
|
||||
//spears, bay edition
|
||||
/obj/item/weapon/twohanded/spear
|
||||
icon_state = "spearglass0"
|
||||
base_icon = "spearglass"
|
||||
name = "spear"
|
||||
desc = "A haphazardly-constructed yet still deadly weapon of ancient design."
|
||||
force = 14
|
||||
@@ -201,6 +205,29 @@
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
|
||||
|
||||
/obj/item/weapon/twohanded/spear/update_icon()
|
||||
icon_state = "spearglass[wielded]"
|
||||
return
|
||||
/obj/item/weapon/twohanded/baseballbat
|
||||
name = "wooden bat"
|
||||
desc = "HOME RUN!"
|
||||
icon_state = "woodbat0"
|
||||
base_icon = "woodbat"
|
||||
item_state = "woodbat"
|
||||
sharp = 0
|
||||
edge = 0
|
||||
w_class = 3
|
||||
force = 15
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
throwforce = 7
|
||||
attack_verb = list("smashed", "beaten", "slammed", "smacked", "striked", "battered", "bonked")
|
||||
hitsound = 'sound/weapons/genhit3.ogg'
|
||||
force_wielded = 23
|
||||
|
||||
/obj/item/weapon/twohanded/baseballbat/metal
|
||||
name = "metal bat"
|
||||
desc = "A shiny metal bat."
|
||||
icon_state = "metalbat0"
|
||||
base_icon = "metalbat"
|
||||
item_state = "metalbat"
|
||||
force = 18
|
||||
w_class = 3.0
|
||||
force_wielded = 27
|
||||
@@ -3,7 +3,6 @@
|
||||
name = "banhammer"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "toyhammer"
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 0
|
||||
w_class = 2.0
|
||||
@@ -20,7 +19,6 @@
|
||||
desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae."
|
||||
icon_state = "nullrod"
|
||||
item_state = "nullrod"
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
force = 15
|
||||
throw_speed = 1
|
||||
@@ -77,7 +75,6 @@
|
||||
desc = "This thing is so unspeakably shitty you are having a hard time even holding it."
|
||||
icon_state = "sord"
|
||||
item_state = "sord"
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
force = 2
|
||||
throwforce = 1
|
||||
@@ -99,7 +96,7 @@
|
||||
desc = "What are you standing around staring at this for? Get to killing!"
|
||||
icon_state = "claymore"
|
||||
item_state = "claymore"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
force = 40
|
||||
throwforce = 10
|
||||
@@ -124,7 +121,7 @@
|
||||
desc = "Woefully underpowered in D20"
|
||||
icon_state = "katana"
|
||||
item_state = "katana"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT | SLOT_BACK
|
||||
force = 40
|
||||
throwforce = 10
|
||||
@@ -156,30 +153,6 @@
|
||||
w_class = 3
|
||||
attack_verb = list("jabbed","stabbed","ripped")
|
||||
|
||||
/obj/item/weapon/baseballbat
|
||||
name = "wooden bat"
|
||||
desc = "HOME RUN!"
|
||||
icon_state = "woodbat"
|
||||
item_state = "woodbat"
|
||||
sharp = 0
|
||||
edge = 0
|
||||
w_class = 3
|
||||
force = 15
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
throwforce = 7
|
||||
attack_verb = list("smashed", "beaten", "slammed", "smacked", "striked", "battered", "bonked")
|
||||
hitsound = 'sound/weapons/genhit3.ogg'
|
||||
|
||||
|
||||
/obj/item/weapon/baseballbat/metal
|
||||
name = "metal bat"
|
||||
desc = "A shiny metal bat."
|
||||
icon_state = "metalbat"
|
||||
item_state = "metalbat"
|
||||
force = 18
|
||||
w_class = 3.0
|
||||
|
||||
/obj/item/weapon/butterfly
|
||||
name = "butterfly knife"
|
||||
desc = "A basic metal blade concealed in a lightweight plasteel grip. Small enough when folded to fit in a pocket."
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
/obj/item/weapon/weldpack
|
||||
name = "Welding kit"
|
||||
desc = "A heavy-duty, portable welding fluid carrier."
|
||||
slot_flags = SLOT_BACK
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "welderpack"
|
||||
w_class = 4.0
|
||||
var/max_fuel = 350
|
||||
|
||||
/obj/item/weapon/weldpack/New()
|
||||
var/datum/reagents/R = new/datum/reagents(max_fuel) //Lotsa refills
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
R.add_reagent("fuel", max_fuel)
|
||||
|
||||
/obj/item/weapon/weldpack/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/T = W
|
||||
if(T.welding & prob(50))
|
||||
message_admins("[key_name_admin(user)] triggered a fueltank explosion.")
|
||||
log_game("[key_name(user)] triggered a fueltank explosion.")
|
||||
user << "\red That was stupid of you."
|
||||
explosion(get_turf(src),-1,0,2)
|
||||
if(src)
|
||||
del(src)
|
||||
return
|
||||
else
|
||||
if(T.welding)
|
||||
user << "\red That was close!"
|
||||
src.reagents.trans_to(W, T.max_fuel)
|
||||
user << "\blue Welder refilled!"
|
||||
playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
|
||||
return
|
||||
user << "\blue The tank scoffs at your insolence. It only provides services to welders."
|
||||
return
|
||||
|
||||
/obj/item/weapon/weldpack/afterattack(obj/O as obj, mob/user as mob, proximity)
|
||||
if(!proximity) // this replaces and improves the get_dist(src,O) <= 1 checks used previously
|
||||
return
|
||||
if (istype(O, /obj/structure/reagent_dispensers/fueltank) && src.reagents.total_volume < max_fuel)
|
||||
O.reagents.trans_to(src, max_fuel)
|
||||
user << "\blue You crack the cap off the top of the pack and fill it back up again from the tank."
|
||||
playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
|
||||
return
|
||||
else if (istype(O, /obj/structure/reagent_dispensers/fueltank) && src.reagents.total_volume == max_fuel)
|
||||
user << "\blue The pack is already full!"
|
||||
return
|
||||
|
||||
/obj/item/weapon/weldpack/examine(mob/user)
|
||||
..(user)
|
||||
user << text("\icon[] [] units of fuel left!", src, src.reagents.total_volume)
|
||||
return
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user