mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-08-28 23:58:31 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into woodrat_map
This commit is contained in:
@@ -24,10 +24,9 @@
|
||||
|
||||
/obj/effect/decal/cleanable/greenglow
|
||||
|
||||
New()
|
||||
..()
|
||||
spawn(1200)// 2 minutes
|
||||
qdel(src)
|
||||
/obj/effect/decal/cleanable/greenglow/New()
|
||||
..()
|
||||
QDEL_IN(src, 2 MINUTES)
|
||||
|
||||
/obj/effect/decal/cleanable/dirt
|
||||
name = "dirt"
|
||||
|
||||
@@ -24,10 +24,10 @@ var/global/list/image/fluidtrack_cache=list()
|
||||
var/crusty=0
|
||||
var/image/overlay
|
||||
|
||||
New(_direction,_color,_wet)
|
||||
src.direction=_direction
|
||||
src.basecolor=_color
|
||||
src.wet=_wet
|
||||
/datum/fluidtrack/New(_direction,_color,_wet)
|
||||
src.direction=_direction
|
||||
src.basecolor=_color
|
||||
src.wet=_wet
|
||||
|
||||
/obj/effect/decal/cleanable/blood/tracks/reveal_blood()
|
||||
if(!fluorescent)
|
||||
@@ -72,86 +72,86 @@ var/global/list/image/fluidtrack_cache=list()
|
||||
* @param goingdir Direction tracks are going to (or 0).
|
||||
* @param bloodcolor Color of the blood when wet.
|
||||
*/
|
||||
proc/AddTracks(var/list/DNA, var/comingdir, var/goingdir, var/bloodcolor="#A10808")
|
||||
var/updated=0
|
||||
// Shift our goingdir 4 spaces to the left so it's in the GOING bitblock.
|
||||
var/realgoing=goingdir<<4
|
||||
/obj/effect/decal/cleanable/blood/tracks/proc/AddTracks(var/list/DNA, var/comingdir, var/goingdir, var/bloodcolor="#A10808")
|
||||
var/updated=0
|
||||
// Shift our goingdir 4 spaces to the left so it's in the GOING bitblock.
|
||||
var/realgoing=goingdir<<4
|
||||
|
||||
// Current bit
|
||||
var/b=0
|
||||
// Current bit
|
||||
var/b=0
|
||||
|
||||
// When tracks will start to dry out
|
||||
var/t=world.time + TRACKS_CRUSTIFY_TIME
|
||||
// When tracks will start to dry out
|
||||
var/t=world.time + TRACKS_CRUSTIFY_TIME
|
||||
|
||||
var/datum/fluidtrack/track
|
||||
var/datum/fluidtrack/track
|
||||
|
||||
// Process 4 bits
|
||||
for(var/bi=0;bi<4;bi++)
|
||||
b=1<<bi
|
||||
// COMING BIT
|
||||
// If setting
|
||||
if(comingdir&b)
|
||||
// If not wet or not set
|
||||
if(dirs&b)
|
||||
var/sid=setdirs["[b]"]
|
||||
track=stack[sid]
|
||||
if(track.wet==t && track.basecolor==bloodcolor)
|
||||
continue
|
||||
// Remove existing stack entry
|
||||
stack.Remove(track)
|
||||
track=new /datum/fluidtrack(b,bloodcolor,t)
|
||||
stack.Add(track)
|
||||
setdirs["[b]"]=stack.Find(track)
|
||||
updatedtracks |= b
|
||||
updated=1
|
||||
// Process 4 bits
|
||||
for(var/bi=0;bi<4;bi++)
|
||||
b=1<<bi
|
||||
// COMING BIT
|
||||
// If setting
|
||||
if(comingdir&b)
|
||||
// If not wet or not set
|
||||
if(dirs&b)
|
||||
var/sid=setdirs["[b]"]
|
||||
track=stack[sid]
|
||||
if(track.wet==t && track.basecolor==bloodcolor)
|
||||
continue
|
||||
// Remove existing stack entry
|
||||
stack.Remove(track)
|
||||
track=new /datum/fluidtrack(b,bloodcolor,t)
|
||||
stack.Add(track)
|
||||
setdirs["[b]"]=stack.Find(track)
|
||||
updatedtracks |= b
|
||||
updated=1
|
||||
|
||||
// GOING BIT (shift up 4)
|
||||
b=b<<4
|
||||
if(realgoing&b)
|
||||
// If not wet or not set
|
||||
if(dirs&b)
|
||||
var/sid=setdirs["[b]"]
|
||||
track=stack[sid]
|
||||
if(track.wet==t && track.basecolor==bloodcolor)
|
||||
continue
|
||||
// Remove existing stack entry
|
||||
stack.Remove(track)
|
||||
track=new /datum/fluidtrack(b,bloodcolor,t)
|
||||
stack.Add(track)
|
||||
setdirs["[b]"]=stack.Find(track)
|
||||
updatedtracks |= b
|
||||
updated=1
|
||||
// GOING BIT (shift up 4)
|
||||
b=b<<4
|
||||
if(realgoing&b)
|
||||
// If not wet or not set
|
||||
if(dirs&b)
|
||||
var/sid=setdirs["[b]"]
|
||||
track=stack[sid]
|
||||
if(track.wet==t && track.basecolor==bloodcolor)
|
||||
continue
|
||||
// Remove existing stack entry
|
||||
stack.Remove(track)
|
||||
track=new /datum/fluidtrack(b,bloodcolor,t)
|
||||
stack.Add(track)
|
||||
setdirs["[b]"]=stack.Find(track)
|
||||
updatedtracks |= b
|
||||
updated=1
|
||||
|
||||
dirs |= comingdir|realgoing
|
||||
if(islist(blood_DNA))
|
||||
blood_DNA |= DNA.Copy()
|
||||
if(updated)
|
||||
update_icon()
|
||||
dirs |= comingdir|realgoing
|
||||
if(islist(blood_DNA))
|
||||
blood_DNA |= DNA.Copy()
|
||||
if(updated)
|
||||
update_icon()
|
||||
|
||||
update_icon()
|
||||
overlays.Cut()
|
||||
color = "#FFFFFF"
|
||||
var/truedir=0
|
||||
/obj/effect/decal/cleanable/blood/tracks/update_icon()
|
||||
overlays.Cut()
|
||||
color = "#FFFFFF"
|
||||
var/truedir=0
|
||||
|
||||
// Update ONLY the overlays that have changed.
|
||||
for(var/datum/fluidtrack/track in stack)
|
||||
var/stack_idx=setdirs["[track.direction]"]
|
||||
var/state=coming_state
|
||||
truedir=track.direction
|
||||
if(truedir&240) // Check if we're in the GOING block
|
||||
state=going_state
|
||||
truedir=truedir>>4
|
||||
// Update ONLY the overlays that have changed.
|
||||
for(var/datum/fluidtrack/track in stack)
|
||||
var/stack_idx=setdirs["[track.direction]"]
|
||||
var/state=coming_state
|
||||
truedir=track.direction
|
||||
if(truedir&240) // Check if we're in the GOING block
|
||||
state=going_state
|
||||
truedir=truedir>>4
|
||||
|
||||
if(track.overlay)
|
||||
track.overlay=null
|
||||
var/image/I = image(icon, icon_state=state, dir=num2dir(truedir))
|
||||
I.color = track.basecolor
|
||||
if(track.overlay)
|
||||
track.overlay=null
|
||||
var/image/I = image(icon, icon_state=state, dir=num2dir(truedir))
|
||||
I.color = track.basecolor
|
||||
|
||||
track.fresh=0
|
||||
track.overlay=I
|
||||
stack[stack_idx]=track
|
||||
overlays += I
|
||||
updatedtracks=0 // Clear our memory of updated tracks.
|
||||
track.fresh=0
|
||||
track.overlay=I
|
||||
stack[stack_idx]=track
|
||||
overlays += I
|
||||
updatedtracks=0 // Clear our memory of updated tracks.
|
||||
|
||||
/obj/effect/decal/cleanable/blood/tracks/footprints
|
||||
name = "wet footprints"
|
||||
|
||||
@@ -1,242 +0,0 @@
|
||||
|
||||
//########################## CONTRABAND ;3333333333333333333 -Agouri ###################################################
|
||||
|
||||
/obj/item/weapon/contraband
|
||||
name = "contraband item"
|
||||
desc = "You probably shouldn't be holding this."
|
||||
icon = 'icons/obj/contraband.dmi'
|
||||
force = 0
|
||||
|
||||
|
||||
/obj/item/weapon/contraband/poster
|
||||
name = "rolled-up poster"
|
||||
desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface."
|
||||
icon_state = "rolled_poster"
|
||||
drop_sound = 'sound/items/drop/wrapper.ogg'
|
||||
pickup_sound = 'sound/items/pickup/wrapper.ogg'
|
||||
var/serial_number = null
|
||||
|
||||
var/poster_type = /obj/structure/sign/poster
|
||||
|
||||
/obj/item/weapon/contraband/poster/New(turf/loc, var/given_serial = 0)
|
||||
if(!serial_number)
|
||||
if(given_serial == 0)
|
||||
serial_number = rand(1, poster_designs.len)
|
||||
else
|
||||
serial_number = given_serial
|
||||
name += " - No. [serial_number]"
|
||||
..(loc)
|
||||
|
||||
//Places the poster on a wall
|
||||
/obj/item/weapon/contraband/poster/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams)
|
||||
if (!adjacent)
|
||||
return
|
||||
|
||||
//must place on a wall and user must not be inside a closet/mecha/whatever
|
||||
var/turf/W = A
|
||||
if (!iswall(W) || !isturf(user.loc))
|
||||
to_chat(user, "<span class='warning'>You can't place this here!</span>")
|
||||
return
|
||||
|
||||
var/placement_dir = get_dir(user, W)
|
||||
if (!(placement_dir in cardinal))
|
||||
to_chat(user, "<span class='warning'>You must stand directly in front of the wall you wish to place that on.</span>")
|
||||
return
|
||||
|
||||
//just check if there is a poster on or adjacent to the wall
|
||||
var/stuff_on_wall = 0
|
||||
if (locate(/obj/structure/sign/poster) in W)
|
||||
stuff_on_wall = 1
|
||||
|
||||
//crude, but will cover most cases. We could do stuff like check pixel_x/y but it's not really worth it.
|
||||
for (var/dir in cardinal)
|
||||
var/turf/T = get_step(W, dir)
|
||||
if (locate(/obj/structure/sign/poster) in T)
|
||||
stuff_on_wall = 1
|
||||
break
|
||||
|
||||
if (stuff_on_wall)
|
||||
to_chat(user, "<span class='notice'>There is already a poster there!</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You start placing the poster on the wall...</span>") //Looks like it's uncluttered enough. Place the poster.
|
||||
|
||||
var/obj/structure/sign/poster/P = new poster_type(user.loc, placement_dir=get_dir(user, W), serial=serial_number, itemtype = src.type)
|
||||
|
||||
flick("poster_being_set", P)
|
||||
//playsound(W, 'sound/items/poster_being_created.ogg', 100, 1) //why the hell does placing a poster make printer sounds?
|
||||
|
||||
var/oldsrc = src //get a reference to src so we can delete it after detaching ourselves
|
||||
src = null
|
||||
spawn(17)
|
||||
if(!P) return
|
||||
|
||||
if(iswall(W) && user && P.loc == user.loc) //Let's check if everything is still there
|
||||
to_chat(user, "<span class='notice'>You place the poster!</span>")
|
||||
else
|
||||
P.roll_and_drop(P.loc)
|
||||
|
||||
qdel(oldsrc) //delete it now to cut down on sanity checks afterwards. Agouri's code supports rerolling it anyway
|
||||
|
||||
//NT subtype
|
||||
/obj/item/weapon/contraband/poster/nanotrasen
|
||||
icon_state = "rolled_poster_nt"
|
||||
poster_type = /obj/structure/sign/poster/nanotrasen
|
||||
|
||||
/obj/item/weapon/contraband/poster/nanotrasen/New(turf/loc, var/given_serial = 0)
|
||||
if(given_serial == 0)
|
||||
serial_number = rand(1, NT_poster_designs.len)
|
||||
else
|
||||
serial_number = given_serial
|
||||
..(loc)
|
||||
|
||||
//Selectable subtype
|
||||
/obj/item/weapon/contraband/poster/custom
|
||||
name = "rolled-up poly-poster"
|
||||
desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. This one is made from some kind of e-paper, and could display almost anything!"
|
||||
poster_type = /obj/structure/sign/poster/custom
|
||||
|
||||
/obj/item/weapon/contraband/poster/custom/New(turf/loc, var/given_serial = 0)
|
||||
if(given_serial == 0)
|
||||
serial_number = 1 //Decidedly unrandom
|
||||
else
|
||||
serial_number = given_serial
|
||||
..(loc)
|
||||
|
||||
/obj/item/weapon/contraband/poster/custom/verb/select_poster()
|
||||
set name = "Set Poster type"
|
||||
set category = "Object"
|
||||
set desc = "Click to choose a poster to display."
|
||||
|
||||
var/mob/M = usr
|
||||
var/list/options = list()
|
||||
for(var/datum/poster/posteroption in poster_designs)
|
||||
options[posteroption.listing_name] = posteroption
|
||||
|
||||
var/choice = input(M,"Choose a poster!","Customize Poster") in options
|
||||
if(src && choice && !M.stat && in_range(M,src))
|
||||
var serial = poster_designs.Find(options[choice])
|
||||
serial_number = serial
|
||||
name = "rolled-up poly-poster - No.[serial]"
|
||||
to_chat(M, "The poster is now: [choice].")
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
//############################## THE ACTUAL DECALS ###########################
|
||||
|
||||
/obj/structure/sign/poster
|
||||
name = "poster"
|
||||
desc = "A large piece of space-resistant printed paper. "
|
||||
icon = 'icons/obj/contraband.dmi'
|
||||
anchored = 1
|
||||
var/serial_number //Will hold the value of src.loc if nobody initialises it
|
||||
var/poster_type //So mappers can specify a desired poster
|
||||
var/ruined = 0
|
||||
|
||||
var/roll_type
|
||||
var/poster_set = FALSE
|
||||
|
||||
/obj/structure/sign/poster/New(var/newloc, var/placement_dir=null, var/serial=null, var/itemtype = /obj/item/weapon/contraband/poster)
|
||||
..(newloc)
|
||||
|
||||
if(!serial)
|
||||
serial = rand(1, poster_designs.len) //use a random serial if none is given
|
||||
|
||||
if(!poster_set)
|
||||
serial_number = serial
|
||||
var/datum/poster/design = poster_designs[serial_number]
|
||||
set_poster(design)
|
||||
|
||||
if(itemtype || !roll_type)
|
||||
roll_type = itemtype
|
||||
|
||||
switch (placement_dir)
|
||||
if (NORTH)
|
||||
pixel_x = 0
|
||||
pixel_y = 32
|
||||
if (SOUTH)
|
||||
pixel_x = 0
|
||||
pixel_y = -32
|
||||
if (EAST)
|
||||
pixel_x = 32
|
||||
pixel_y = 0
|
||||
if (WEST)
|
||||
pixel_x = -32
|
||||
pixel_y = 0
|
||||
|
||||
/obj/structure/sign/poster/Initialize()
|
||||
. = ..()
|
||||
if (poster_type)
|
||||
var/path = text2path(poster_type)
|
||||
var/datum/poster/design = new path
|
||||
set_poster(design)
|
||||
|
||||
/obj/structure/sign/poster/proc/set_poster(var/datum/poster/design)
|
||||
name = "[initial(name)] - [design.name]"
|
||||
desc = "[initial(desc)] [design.desc]"
|
||||
icon_state = design.icon_state // poster[serial_number]
|
||||
|
||||
poster_set = TRUE
|
||||
|
||||
/obj/structure/sign/poster/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.is_wirecutter())
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
if(ruined)
|
||||
to_chat(user, "<span class='notice'>You remove the remnants of the poster.</span>")
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You carefully remove the poster from the wall.</span>")
|
||||
roll_and_drop(user.loc)
|
||||
return
|
||||
|
||||
/obj/structure/sign/poster/attack_hand(mob/user as mob)
|
||||
|
||||
if(ruined)
|
||||
return
|
||||
|
||||
if(alert("Do I want to rip the poster from the wall?","You think...","Yes","No") == "Yes")
|
||||
|
||||
if(ruined || !user.Adjacent(src))
|
||||
return
|
||||
|
||||
visible_message("<span class='warning'>[user] rips [src] in a single, decisive motion!</span>" )
|
||||
playsound(src, 'sound/items/poster_ripped.ogg', 100, 1)
|
||||
ruined = 1
|
||||
icon_state = "poster_ripped"
|
||||
name = "ripped poster"
|
||||
desc = "You can't make out anything from the poster's original print. It's ruined."
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/structure/sign/poster/proc/roll_and_drop(turf/newloc)
|
||||
var/obj/item/weapon/contraband/poster/P = new roll_type(src, serial_number)
|
||||
P.loc = newloc
|
||||
src.loc = P
|
||||
qdel(src)
|
||||
|
||||
/datum/poster
|
||||
// Name suffix. Poster - [name]
|
||||
var/name=""
|
||||
// Description suffix
|
||||
var/desc=""
|
||||
var/icon_state=""
|
||||
var/listing_name=""
|
||||
|
||||
// NT poster subtype.
|
||||
/obj/structure/sign/poster/nanotrasen
|
||||
roll_type = /obj/item/weapon/contraband/poster/nanotrasen
|
||||
|
||||
/obj/structure/sign/poster/nanotrasen/New(var/newloc, var/placement_dir=null, var/serial=null, var/itemtype = /obj/item/weapon/contraband/poster/nanotrasen)
|
||||
if(!serial)
|
||||
serial = rand(1, NT_poster_designs.len)
|
||||
|
||||
serial_number = serial
|
||||
var/datum/poster/design = NT_poster_designs[serial_number]
|
||||
set_poster(design)
|
||||
|
||||
..(newloc, placement_dir, serial, itemtype)
|
||||
|
||||
//Non-Random Posters
|
||||
|
||||
/obj/structure/sign/poster/custom
|
||||
roll_type = /obj/item/weapon/contraband/poster/custom
|
||||
@@ -5,26 +5,26 @@
|
||||
plane = DIRTY_PLANE
|
||||
anchored = 1
|
||||
|
||||
New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune")
|
||||
..()
|
||||
loc = location
|
||||
/obj/effect/decal/cleanable/crayon/New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune")
|
||||
..()
|
||||
loc = location
|
||||
|
||||
name = type
|
||||
desc = "A [type] drawn in crayon."
|
||||
name = type
|
||||
desc = "A [type] drawn in crayon."
|
||||
|
||||
switch(type)
|
||||
if("rune")
|
||||
type = "rune[rand(1,6)]"
|
||||
if("graffiti")
|
||||
type = pick("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa")
|
||||
switch(type)
|
||||
if("rune")
|
||||
type = "rune[rand(1,6)]"
|
||||
if("graffiti")
|
||||
type = pick("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa")
|
||||
|
||||
var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]",2.1)
|
||||
var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]s",2.1)
|
||||
var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]",2.1)
|
||||
var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]s",2.1)
|
||||
|
||||
mainOverlay.Blend(main,ICON_ADD)
|
||||
shadeOverlay.Blend(shade,ICON_ADD)
|
||||
mainOverlay.Blend(main,ICON_ADD)
|
||||
shadeOverlay.Blend(shade,ICON_ADD)
|
||||
|
||||
overlays += mainOverlay
|
||||
overlays += shadeOverlay
|
||||
overlays += mainOverlay
|
||||
overlays += shadeOverlay
|
||||
|
||||
add_hiddenprint(usr)
|
||||
add_hiddenprint(usr)
|
||||
@@ -1,346 +1,347 @@
|
||||
// baystation12 posters
|
||||
/datum/poster/bay_1
|
||||
icon_state="bsposter1"
|
||||
name = "PSA: Unlucky Space Explorer"
|
||||
desc = "This grim PSA depicts a skeletal form within a space suit. Thousands die every year as a result of failing to follow EVA safety guidelines."
|
||||
listing_name = "PSA - EVA Accidents"
|
||||
// Base type needs to be defined or template types make random selection wonky
|
||||
/decl/poster
|
||||
var/icon_state="bsposter1"
|
||||
var/name = "PSA: Unlucky Space Explorer"
|
||||
var/desc = "This grim PSA depicts a skeletal form within a space suit. Thousands die every year as a result of failing to follow EVA safety guidelines."
|
||||
var/listing_name = "PSA - EVA Accidents"
|
||||
|
||||
/datum/poster/bay_2
|
||||
/decl/poster/bay_2
|
||||
icon_state="bsposter2"
|
||||
name = "PSA: Disobedient Drones"
|
||||
desc = "This PSA depicts the cold, unmoving stare of a particularly advanced AI. Contact information for the Emergent Intelligence Oversight is included."
|
||||
listing_name = "PSA - Emergent Drones"
|
||||
|
||||
/datum/poster/bay_3
|
||||
/decl/poster/bay_3
|
||||
icon_state="bsposter3"
|
||||
name = "PSA: Corporate Espionage"
|
||||
desc = "This PSA warns of the dangers of trusting your co-workers with sensitive department information. They may be spying for a rival corporation, or worse!"
|
||||
listing_name = "PSA - Corporate Espionage"
|
||||
|
||||
/datum/poster/bay_4
|
||||
/decl/poster/bay_4
|
||||
icon_state="bsposter4"
|
||||
name = "Keep Calm"
|
||||
desc = "An incredibly vague message, presented in a classic form. Someone has scribbled an O over the A on the poster."
|
||||
listing_name = "PSA - Keep Calm"
|
||||
|
||||
/datum/poster/bay_5
|
||||
/decl/poster/bay_5
|
||||
icon_state="bsposter5"
|
||||
name = "PSA: Saboteurs!"
|
||||
desc = "A company PSA reminding employees to keep an eye out for suspicious activity, and report it immediately."
|
||||
listing_name = "PSA - Saboteur"
|
||||
|
||||
/datum/poster/bay_6
|
||||
/decl/poster/bay_6
|
||||
icon_state="bsposter6"
|
||||
name = "Eradicator XV"
|
||||
desc = "An ad for the fifteenth installment in the Eradicator movie franchise, about a violent robotic uprising hellbent on wiping out humanity."
|
||||
listing_name = "Ad - Eradicator XV"
|
||||
|
||||
/datum/poster/bay_7
|
||||
/decl/poster/bay_7
|
||||
icon_state="bsposter7"
|
||||
name = "Wasteland: Battle for Earth"
|
||||
desc = "This action movie ad shows a couple of ragged post-apocalyptic gunmen, one male and one female, on top of a mound of rubble."
|
||||
listing_name = "Ad - Battle for Earth"
|
||||
|
||||
/datum/poster/bay_8
|
||||
/decl/poster/bay_8
|
||||
icon_state="bsposter8"
|
||||
name = "Pinup Girl Cindy"
|
||||
desc = "This is a vintage 2450s pin-up of NanoTrasen's PR girl, Cindy, in a particularly feminine pose."
|
||||
listing_name = "Pin-up - Cindi"
|
||||
|
||||
/datum/poster/bay_9
|
||||
/decl/poster/bay_9
|
||||
icon_state="bsposter9"
|
||||
name = "Pinup Girl Amy"
|
||||
desc = "This pin-up is of Amy, one of NanoTrasen's most popular PR models."
|
||||
listing_name = "Pin-up - Amy"
|
||||
|
||||
/datum/poster/bay_10
|
||||
/decl/poster/bay_10
|
||||
icon_state="bsposter10"
|
||||
name = "Don't Panic"
|
||||
desc = "This ad for Vey-Medical anxiety pills depicts some sort of star in a grimace. The \"Don't Panic\" is written in big, friendly letters."
|
||||
listing_name = "Ad - Don't panic."
|
||||
|
||||
/datum/poster/bay_11
|
||||
/decl/poster/bay_11
|
||||
icon_state="bsposter11"
|
||||
name = "Underwater Living"
|
||||
desc = "This immigration poster encourages you to move to Earth;s premiere underwater city, Atlantis. One bedroom apartments start at half your salary."
|
||||
listing_name = "Ad - Atlantis"
|
||||
|
||||
/datum/poster/bay_12
|
||||
/decl/poster/bay_12
|
||||
icon_state="bsposter12"
|
||||
name = "Beware Rogue AI"
|
||||
desc = "This ad for the Emergent Intelligence Oversight Recruitment Division depicts a menacing AI and asks if you're a bad enough dude to take it on."
|
||||
listing_name = "Recruitment - EIO"
|
||||
|
||||
/datum/poster/bay_13
|
||||
/decl/poster/bay_13
|
||||
icon_state="bsposter13"
|
||||
name = "Become A User of the Arcane Arts"
|
||||
desc = "This ad for popular Virtual Reality online game 'Wiz Online' depicts a wizard, casting a spell. You can't really make out if it's an actual photograph or a computer-generated image. Incredible graphics!"
|
||||
listing_name = "Ad - Wiz Online"
|
||||
|
||||
/datum/poster/bay_14
|
||||
/decl/poster/bay_14
|
||||
icon_state="bsposter14"
|
||||
name = "Levitating Skull"
|
||||
desc = "This tacky ad is a portrait of the flying enchanted skull, Bones. Its adventures along with its fabled companion are showing now on a broadcast service near you!"
|
||||
listing_name = "Ad - Bones Adventures"
|
||||
|
||||
/datum/poster/bay_15
|
||||
/decl/poster/bay_15
|
||||
icon_state="bsposter15"
|
||||
name = "Augmented Legend"
|
||||
desc = "This ad for Ward-Takahashi cybernetic implants shows obviously augmented individual, gazing towards the sky. Is your body augmented?"
|
||||
listing_name = "Ad - Ward-Takahashi Augments"
|
||||
|
||||
/datum/poster/bay_16
|
||||
/decl/poster/bay_16
|
||||
icon_state="bsposter16"
|
||||
name = "Snow Crash"
|
||||
desc = "This particular one depicts nothing remarkable other than a rather mesmerising pattern of monitor static. You think it's an ad for something, but you're not sure what."
|
||||
listing_name = "Ad - Snow Crash"
|
||||
|
||||
/datum/poster/bay_17
|
||||
/decl/poster/bay_17
|
||||
icon_state="bsposter17"
|
||||
name = "Pinup Girl Val"
|
||||
desc = "Luscious Val McNeil, the vertically challenged Legal Extraordinaire, winner of Miss Space two years running and favoured pinup girl of Lawyers Weekly."
|
||||
listing_name = "Pin-up - Val"
|
||||
|
||||
/datum/poster/bay_18
|
||||
/decl/poster/bay_18
|
||||
icon_state="bsposter18"
|
||||
name = "Derpman, Enforcer of the State"
|
||||
desc = "An ad for Centauri Provisions donuts. Officer Derpman is here to protect and serve... your donuts! A generously proportioned man, he teaches you the value of hiding your snacks."
|
||||
listing_name = "Ad - Officer Derpman Donuts"
|
||||
|
||||
/datum/poster/bay_19
|
||||
/decl/poster/bay_19
|
||||
icon_state="bsposter19"
|
||||
name = "Respect an Unathi"
|
||||
desc = "This poster depicts a sharply dressed Unathi receiving a prestigious award. It appears to espouse greater co-operation and harmony between humanity and the Unathi."
|
||||
listing_name = "PSA - Unathi"
|
||||
|
||||
/datum/poster/bay_20
|
||||
/decl/poster/bay_20
|
||||
icon_state="bsposter20"
|
||||
name = "Skrell Tourism"
|
||||
desc = "This tourism poster depicts a mysteriously inscrutable, alien scene. Numerous Skrell can be seen conversing amidst great, crystalline towers rising above crashing waves."
|
||||
listing_name = "Ad - Skrellian Tourism"
|
||||
|
||||
/datum/poster/bay_21
|
||||
/decl/poster/bay_21
|
||||
icon_state="bsposter21"
|
||||
name = "Join the Fuzz!"
|
||||
desc = "It's a nice recruitment poster of a white haired Chinese woman that says; \"Big Guns, Hot Women, Good Times. Security. We get it done.\""
|
||||
listing_name = "Recruitment - NanoTrasen Security - Pinup"
|
||||
|
||||
/datum/poster/bay_22
|
||||
/decl/poster/bay_22
|
||||
icon_state="bsposter22"
|
||||
name = "Looking for a career with excitement?"
|
||||
desc = "A recruitment poster starring a dark haired woman with glasses and a purple shirt that has \"Got Brains? Got Talent? Not afraid of electric flying monsters that want to suck the soul out of you? Then Xenobiology could use someone like you!\" written on the bottom."
|
||||
listing_name = "Recruitment - Xenobiology"
|
||||
|
||||
/datum/poster/bay_23
|
||||
/decl/poster/bay_23
|
||||
icon_state="bsposter23"
|
||||
name = "Safety first: because electricity doesn't wait!"
|
||||
desc = "A safety poster starring a clueless looking redhead with frazzled hair. \"Every year, hundreds of NT employees expose themselves to electric shock. Play it safe. Avoid suspicious doors after electrical storms, and always wear protection when doing electric maintenance.\""
|
||||
listing_name = "Safety - Electric Shock"
|
||||
|
||||
/datum/poster/bay_24
|
||||
/decl/poster/bay_24
|
||||
icon_state="bsposter24"
|
||||
name = "Responsible medbay habits, No #259"
|
||||
desc = "A poster with a nervous looking geneticist on it states; \"Friends Tell Friends They're Clones. It can cause severe and irreparable emotional trauma if a person is not properly informed of their recent demise. Always follow your contractual obligation and inform them of their recent rejuvenation.\""
|
||||
listing_name = "Medical - Clone Disclosure"
|
||||
|
||||
/datum/poster/bay_25
|
||||
/decl/poster/bay_25
|
||||
icon_state="bsposter25"
|
||||
name = "Irresponsible medbay habits, No #2"
|
||||
desc = "This is a safety poster starring a perverted looking naked doctor. \"Sexual harassment is never okay. REPORT any acts of sexual deviance or harassment that disrupt a healthy working environment.\""
|
||||
listing_name = "Medical - Sexual Harassment"
|
||||
|
||||
/datum/poster/bay_26
|
||||
/decl/poster/bay_26
|
||||
icon_state="bsposter26"
|
||||
name = "The Men We Knew"
|
||||
desc = "This movie poster depicts a group of soldiers fighting a large mech, it seems to be some kind of movie set during the Hegemony War."
|
||||
listing_name = "Ad - Men We Knew"
|
||||
|
||||
/datum/poster/bay_27
|
||||
/decl/poster/bay_27
|
||||
icon_state="bsposter27"
|
||||
name = "Plastic Sheep Can't Scream"
|
||||
desc = "This is a movie poster for an upcoming horror movie, featuring a frightening looking robotic creature."
|
||||
listing_name = "Ad - Plastic Sheep Can't Scream"
|
||||
|
||||
/datum/poster/bay_28
|
||||
/decl/poster/bay_28
|
||||
icon_state="bsposter28"
|
||||
name = "The Stars Know Love"
|
||||
desc = "This is a movie poster. A bleeding woman is shown drawing a heart in her blood on the window of space ship, it seems to be a romantic drama."
|
||||
listing_name = "Ad - The Stars Know Love"
|
||||
|
||||
/datum/poster/bay_29
|
||||
/decl/poster/bay_29
|
||||
icon_state="bsposter29"
|
||||
name = "Winter Is Coming"
|
||||
desc = "On the poster is a frighteningly large wolf, he warns: \"Only YOU can keep yourself from freezing this winter!\". Below is the logo of NanoThreads clothing."
|
||||
listing_name = "Ad - Cold-weather Gear"
|
||||
|
||||
/datum/poster/bay_30
|
||||
/decl/poster/bay_30
|
||||
icon_state="bsposter30"
|
||||
name = "Ambrosia Vulgaris"
|
||||
desc = "It's an ad for getting absolutely shitfaced on psychadelics. Just looking at this poster makes you feel a little bit dizzy. Use responsibly."
|
||||
listing_name = "Ad - Ambrosia Vulgaris"
|
||||
|
||||
/datum/poster/bay_31
|
||||
/decl/poster/bay_31
|
||||
icon_state="bsposter31"
|
||||
name = "Donut Panic"
|
||||
desc = "This is an advertisement for Donut Panic, the bi-monthly periodical for donut lovers galaxy-wide."
|
||||
listing_name = "Ad - Donuts Panic"
|
||||
|
||||
/datum/poster/bay_32
|
||||
/decl/poster/bay_32
|
||||
icon_state="bsposter32"
|
||||
name = "Eat!"
|
||||
desc = "A NanoPastures poster depicting a synthmeat hamburger. The poster COMMANDS you to consume the hamburger."
|
||||
listing_name = "Ad - Hamburger"
|
||||
|
||||
/datum/poster/bay_33
|
||||
/decl/poster/bay_33
|
||||
icon_state="bsposter33"
|
||||
name = "Tools, tools, tools!"
|
||||
desc = "Xion Manufacturing reminds you: Never trust an off-brand tool. "
|
||||
listing_name = "Ad - Xion Tools"
|
||||
|
||||
/datum/poster/bay_34
|
||||
/decl/poster/bay_34
|
||||
icon_state="bsposter34"
|
||||
name = "Power Up!"
|
||||
desc = "NanoTrasen are leaders in Phoron-based supermatter power! High reward, higher risk!"
|
||||
listing_name = "Ad - Phoron Power"
|
||||
|
||||
/datum/poster/bay_35
|
||||
/decl/poster/bay_35
|
||||
icon_state="bsposter35"
|
||||
name = "Kendrick"
|
||||
desc = "This is a poster depicting the pet and mascot of the science department, and national corporate ambassador for slime-based science solutions.."
|
||||
listing_name = "Ad - Slime Science"
|
||||
|
||||
/datum/poster/bay_36
|
||||
/decl/poster/bay_36
|
||||
icon_state="bsposter36"
|
||||
name = "Fancy Borg"
|
||||
desc = "A poster depicting a cyborg dressed to the nines. An ad for cybernetics enthusiast magazine, Borg Fancy."
|
||||
listing_name = "Ad - Borg Fancy A"
|
||||
|
||||
/datum/poster/bay_37
|
||||
/decl/poster/bay_37
|
||||
icon_state="bsposter37"
|
||||
name = "Fancier Borg"
|
||||
desc = "A poster depicting a cyborg dressed to the nines. An ad for cybernetics enthusiast magazine, Borg Fancy. This is even fancier than the other poster."
|
||||
listing_name = "Ad - Borg Fancy B"
|
||||
|
||||
/datum/poster/bay_38
|
||||
/decl/poster/bay_38
|
||||
icon_state="bsposter38"
|
||||
name = "Toaster Love"
|
||||
desc = "This is a poster of a toaster containing two slices of bread. The word LOVE is written in big pink letters underneath. An ad for a cybernetics 'enthusiast' magazine. "
|
||||
listing_name = "Ad - Toaster Love"
|
||||
|
||||
/datum/poster/bay_39
|
||||
/decl/poster/bay_39
|
||||
icon_state="bsposter39"
|
||||
name = "Responsible medbay habits, No #91"
|
||||
desc = "A safety poster with a chemist holding a vial. \"Always wear safety gear while handling dangerous chemicals, even if it concerns only small amounts.\""
|
||||
listing_name = "Safety - Chemicals"
|
||||
|
||||
/datum/poster/bay_40
|
||||
/decl/poster/bay_40
|
||||
icon_state="bsposter40"
|
||||
name = "Agreeable work environment"
|
||||
desc = "This poster depicts a young woman in a stylish dress. \"Try to aim for a pleasant atmosphere in the workspace. A friendly word can do more than forms in triplicate.\""
|
||||
listing_name = "PSA - Agreeable Work Environment"
|
||||
|
||||
/datum/poster/bay_41
|
||||
/decl/poster/bay_41
|
||||
icon_state="bsposter41"
|
||||
name = "Professional work environment"
|
||||
desc = "A safety poster featuring a green haired woman in a shimmering blue dress. \"As an Internal Affairs Agent, your job is to create a fair and agreeable work environment for the crewmembers, as discreetly and professionally as possible.\""
|
||||
listing_name = "Recruitment - Internal Affairs"
|
||||
|
||||
/datum/poster/bay_42
|
||||
/decl/poster/bay_42
|
||||
icon_state="bsposter42"
|
||||
name = "Engineering pinup"
|
||||
desc = "This is pin-up poster. A half-naked girl with white hair, toned muscles and stunning blue eyes looks back at you from the poster. Her welding helmet, tattoos and grey jumpsuit hanging around her waist gives a bit of a rugged feel."
|
||||
listing_name = "Pin-up - Engineer"
|
||||
|
||||
/datum/poster/bay_43
|
||||
/decl/poster/bay_43
|
||||
icon_state="bsposter43"
|
||||
name = "Responsible medbay habits, No #3"
|
||||
desc = "A safety poster with a purple-haired surgeon. She looks a bit cross. \"Let the surgeons do their work. NEVER replace or remove a surgery tool from where the surgeon put it.\""
|
||||
listing_name = "Safety - Surgical Tools"
|
||||
|
||||
/datum/poster/bay_44
|
||||
/decl/poster/bay_44
|
||||
icon_state="bsposter44"
|
||||
name = "Time for a drink?"
|
||||
desc = "This poster for a brand for \"Tajaran-style\" rum produced by Gilthari Exports depicts a friendly-looking Tajaran holding a tray of drinks."
|
||||
listing_name = "Ad - Rarkajar Rum"
|
||||
|
||||
/datum/poster/bay_45
|
||||
/decl/poster/bay_45
|
||||
icon_state="bsposter45"
|
||||
name = "Responsible engineering habits, No #1"
|
||||
desc = "A safety poster featuring a blue haired engineer. \"When repairing a machine or construction, always aim for long-term solutions.\""
|
||||
listing_name = "Safety - No Shortcut Fixes"
|
||||
|
||||
/datum/poster/bay_46
|
||||
/decl/poster/bay_46
|
||||
icon_state="bsposter46"
|
||||
name = "Inspirational lawyer"
|
||||
desc = "An inspirational poster depicting a Skrellian lawyer. He seems to be shouting something, while pointing fiercely to the right. It's an ad for a NanoTrasen subsidiary law firm."
|
||||
listing_name = "Ad - NanoTrasen Law"
|
||||
|
||||
/datum/poster/bay_47
|
||||
/decl/poster/bay_47
|
||||
icon_state="bsposter47"
|
||||
name = "Security pinup"
|
||||
desc = "This is a pin-up poster. A dark skinned white haired girl poses in the sunlight wearing a tank top with her stomach exposed. The text on the poster states \"M, Succubus of Security.\" and a lipstick mark stains the top right corner, as if kissed by the model herself."
|
||||
listing_name = "Pin-up - Security"
|
||||
|
||||
/datum/poster/bay_48
|
||||
/decl/poster/bay_48
|
||||
icon_state="bsposter48"
|
||||
name = "Remote Drones 4 U"
|
||||
desc = "This is an ad for a fairly basic model of drone produced by Grayson Manufactories Ltd. for use in hazardous environments."
|
||||
listing_name = "Ad - Grayson Drones"
|
||||
|
||||
/datum/poster/bay_49
|
||||
/decl/poster/bay_49
|
||||
icon_state="bsposter49"
|
||||
name = "Engineering recruitment"
|
||||
desc = "This is a poster showing an engineer relaxing by a computer, the text states \"Living the life! Join Engineering today!\""
|
||||
listing_name = "Recruitment - Engineering"
|
||||
|
||||
/datum/poster/bay_50
|
||||
/decl/poster/bay_50
|
||||
icon_state="bsposter50"
|
||||
name = "Pinup Girl Cindy Kate"
|
||||
desc = "This particular one is of Cindy Kate, a seductive virtual performer well known among less savoury exonet circles."
|
||||
listing_name = "Pin-up - Cindi-Kate"
|
||||
|
||||
/datum/poster/bay_51
|
||||
/decl/poster/bay_51
|
||||
icon_state="bsposter51"
|
||||
name = "space tourism poster"
|
||||
desc = "This is a poster produced by the Visit Space Society. This one is targeted at planet-dwellers, suggesting they generally visit space."
|
||||
listing_name = "Tourism - Space"
|
||||
|
||||
/datum/poster/bay_52
|
||||
/decl/poster/bay_52
|
||||
icon_state="bsposter52"
|
||||
name = "fire safety poster"
|
||||
desc = "This is a poster reminding you of what you should do if you are on fire, or if you are at a dance party."
|
||||
listing_name = "Safety - Stop Drop and Roll"
|
||||
|
||||
/datum/poster/bay_53
|
||||
/decl/poster/bay_53
|
||||
icon_state="bsposter53"
|
||||
name = "fire extinguisher poster"
|
||||
desc = "This is a poster reminding you of what you should use to put out a fire."
|
||||
listing_name = "Safety - Fire Extinguishers"
|
||||
|
||||
/datum/poster/bay_54
|
||||
/decl/poster/bay_54
|
||||
icon_state="bsposter54"
|
||||
name = "firefighter poster"
|
||||
desc = "This is a poster of a particularly stern looking firefighter. The caption reads, \"Only you can prevent space fires.\""
|
||||
listing_name = "Safety - Prevent Fires"
|
||||
|
||||
/datum/poster/bay_55
|
||||
/decl/poster/bay_55
|
||||
icon_state="bsposter55"
|
||||
name = "Binma tourism poster"
|
||||
desc = "This is a poster produced by the Visit Space Society. This one suggests you visit the exotic garden world of Binma, and try not to get eaten."
|
||||
listing_name = "Tourism - Binma"
|
||||
|
||||
/datum/poster/bay_56
|
||||
/decl/poster/bay_56
|
||||
icon_state="bsposter56"
|
||||
name = "Mars appreciation poster"
|
||||
desc = "This is a poster produced by the Visit Space Society. This one suggests you visit historic Mars. Come for the domes, stay for the monuments to hubris!"
|
||||
|
||||
/datum/poster/bay_57
|
||||
/decl/poster/bay_57
|
||||
icon_state="bsposter57"
|
||||
name = "space carp warning poster"
|
||||
desc = "This poster tells of the dangers of space carp infestations."
|
||||
listing_name = "Safety - Carp"
|
||||
|
||||
/datum/poster/bay_58
|
||||
/decl/poster/bay_58
|
||||
icon_state="bsposter58"
|
||||
name = "space carp information poster"
|
||||
desc = "This poster showcases an old spacer saying on the dangers of migrant space carp."
|
||||
|
||||
@@ -1,52 +1,52 @@
|
||||
/datum/poster/pol_1
|
||||
/decl/poster/pol_1
|
||||
icon_state="polposter1"
|
||||
name = "Safety!"
|
||||
desc = "A poster advising you to learn how to put on your internals at a moment's notice."
|
||||
listing_name = "Safety - Internals"
|
||||
|
||||
/datum/poster/pol_2
|
||||
/decl/poster/pol_2
|
||||
icon_state="polposter2"
|
||||
name = "Safety!"
|
||||
desc = "A blue and white colored poster. This one advises you to wear your safety goggles when handling chemicals."
|
||||
listing_name = "Safety - Goggles"
|
||||
|
||||
/datum/poster/pol_3
|
||||
/decl/poster/pol_3
|
||||
icon_state="polposter3"
|
||||
name = "Safety!"
|
||||
desc = "A safety poster instructing you to comply with the authorities, especially in an emergency."
|
||||
listing_name = "Safety - Follow Instruction"
|
||||
|
||||
/datum/poster/pol_4
|
||||
/decl/poster/pol_4
|
||||
icon_state="polposter4"
|
||||
name = "Clean Hands Save Lives"
|
||||
desc = "A safety poster reminding you to wash your hands."
|
||||
listing_name = "Safety - Hand Washing"
|
||||
|
||||
/datum/poster/pol_5
|
||||
/decl/poster/pol_5
|
||||
icon_state="polposter5"
|
||||
name = "Help!"
|
||||
desc = "This poster depicts a man helping another man get up."
|
||||
listing_name = "Safety - Help Others"
|
||||
|
||||
/datum/poster/pol_6
|
||||
/decl/poster/pol_6
|
||||
icon_state="polposter6"
|
||||
name = "Walk!"
|
||||
desc = "This poster depicts a man walking, presumably to encourage you not to run in the halls."
|
||||
listing_name = "Safety - No Running"
|
||||
|
||||
/datum/poster/pol_7
|
||||
/decl/poster/pol_7
|
||||
icon_state="polposter7"
|
||||
name = "Place your signs!"
|
||||
desc = "A safety poster reminding custodial staff to place wet floor signs where needed. This reminder's rarely heeded."
|
||||
listing_name = "Safety - Wet Floor Signs"
|
||||
|
||||
/datum/poster/pol_8
|
||||
/decl/poster/pol_8
|
||||
icon_state="polposter8"
|
||||
name = "Safety!"
|
||||
desc = "An advertisement / safety poster for EVA training and certification. Training is available at your local Central Command."
|
||||
listing_name = "Safety - EVA Training"
|
||||
|
||||
/datum/poster/pol_9
|
||||
/decl/poster/pol_9
|
||||
icon_state="poster10" //Recycling this icon
|
||||
name = "Airlock Maintenance Reference"
|
||||
desc = "This poster appears to be reference material for maintenance personnel, instructing to always wear insulated gloves, that wirecutters and \
|
||||
@@ -54,49 +54,49 @@
|
||||
wire codes."
|
||||
listing_name = "Safety - Airlock Maintenance"
|
||||
|
||||
/datum/poster/pol_10
|
||||
/decl/poster/pol_10
|
||||
icon_state="polposter9"
|
||||
name = "orchid"
|
||||
desc = "This poster appears strangely familiar, depicting the flower of a tree native to the planet Earth."
|
||||
listing_name = "General - Orchid"
|
||||
|
||||
/datum/poster/pol_11
|
||||
/decl/poster/pol_11
|
||||
icon_state="polposter10"
|
||||
name = "firefighter pinup"
|
||||
desc = "A buff firefighter with his shirt off. Maybe he's trying to raise awareness about fire safety, but you're a little distracted."
|
||||
listing_name = "Pin-up - Firefighter"
|
||||
|
||||
/datum/poster/pol_12
|
||||
/decl/poster/pol_12
|
||||
icon_state="polposter11"
|
||||
name = "CHUCK"
|
||||
desc = "With the budget Cyber Solutions 'Chuck' model work drone, your days of menial labour are numbered! \"With Cyber Solutions, there's always someone beside you, helping you. You know their face. You know my face.\""
|
||||
listing_name = "Ad - Chuck"
|
||||
|
||||
/datum/poster/pol_13
|
||||
/decl/poster/pol_13
|
||||
icon_state="polposter12"
|
||||
name = "New You"
|
||||
desc = "An ad for Kaleidoscope Cosmetics. \"The common factor in all your failed relationships is you. Fix it with affordable gene therapy!\""
|
||||
listing_name = "Ad - Kaleidoscope"
|
||||
|
||||
/datum/poster/pol_14
|
||||
/decl/poster/pol_14
|
||||
icon_state="polposter13"
|
||||
name = "Take a Taxi"
|
||||
desc = "An ad for the Major Bill's Transportation drone-operated taxi service operating in most major cities throughout Solar space."
|
||||
listing_name = "Ad - Taxi"
|
||||
|
||||
/datum/poster/pol_15
|
||||
/decl/poster/pol_15
|
||||
icon_state="polposter14"
|
||||
name = "Adopt A Teshpet"
|
||||
desc = "An ad for definitively racist virtual pet game, Teshpets."
|
||||
listing_name = "Ad - Teshpets"
|
||||
|
||||
/datum/poster/pol_16
|
||||
/decl/poster/pol_16
|
||||
icon_state="polposter15"
|
||||
name = "Train and Fight"
|
||||
desc = "This poster of sweaty, near-naked wrestlers is the most masculine thing you've ever seen. You can barely tell where one man ends and the other begins. Always seek manliness!"
|
||||
listing_name = "Pinup - Wrestling"
|
||||
|
||||
/datum/poster/nt_3
|
||||
/decl/poster/nt_3
|
||||
icon_state = "ntposter03"
|
||||
name = "Mechatronic Safety"
|
||||
desc = "This poster displays three cutting-edge gygaxes standing in line in front of a man in plain clothes.\
|
||||
@@ -104,25 +104,25 @@
|
||||
The image seems important."
|
||||
listing_name = "Safety - Mech Operation"
|
||||
|
||||
/datum/poster/nt_4
|
||||
/decl/poster/nt_4
|
||||
icon_state = "ntposter04"
|
||||
name = "Beware Aetotheans"
|
||||
desc = "This poster displays a distinctly hostile-looking red Promethean in a black coat. The fine-print around the edges warns the reader about the dangers posed by Almachi Prometheans."
|
||||
listing_name = "Safety - Aetothean Danger"
|
||||
|
||||
/datum/poster/nt_5
|
||||
/decl/poster/nt_5
|
||||
icon_state = "ntposter05"
|
||||
name = "Promethean"
|
||||
desc = "This poster displays a friendly-looking green Promethean in a labcoat. The fine-print around the edges talks about the benefits Prometheans give in laboratories."
|
||||
listing_name = "Safety - Prometheans"
|
||||
|
||||
/datum/poster/nt_6
|
||||
/decl/poster/nt_6
|
||||
icon_state = "ntposter06"
|
||||
name = "NanoTrasen"
|
||||
desc = "This poster showcases an NT emblem. There is writing in the ring around the inner points, probably some sort of slogan no one bothers to memorize."
|
||||
listing_name = "Ad - NanoTrasen"
|
||||
|
||||
/datum/poster/nt_7
|
||||
/decl/poster/nt_7
|
||||
icon_state = "ntposter07"
|
||||
name = "SolGov"
|
||||
desc = "This poster showcases an SCG emblem. The outer ring reads,\
|
||||
@@ -130,62 +130,62 @@
|
||||
Solar Confederate Government."
|
||||
listing_name = "Political - SolGov"
|
||||
|
||||
/datum/poster/nt_8
|
||||
/decl/poster/nt_8
|
||||
icon_state = "ntposter08"
|
||||
name = "wildlife hazard"
|
||||
desc = "This SifGov poster warns against attempting to kill a fully grown giant spider or other hostile life-form alone."
|
||||
listing_name = "Safety - Spiders"
|
||||
|
||||
// A new subset of poster datum for ONLY 'Internal' NanoTrasen posters, given to Security.
|
||||
/datum/poster/nanotrasen
|
||||
/decl/poster/nanotrasen
|
||||
icon_state = "polposter1"
|
||||
name = "Safety!"
|
||||
desc = "A poster advising you to learn how to put on your internals at a moment's notice."
|
||||
listing_name = "Safety - Internals"
|
||||
|
||||
/datum/poster/nanotrasen/pol_2
|
||||
/decl/poster/nanotrasen/pol_2
|
||||
icon_state="polposter2"
|
||||
name = "Safety!"
|
||||
desc = "A blue and white colored poster. This one advises you to wear your safety goggles when handling chemicals."
|
||||
listing_name = "Safety - Goggles"
|
||||
|
||||
/datum/poster/nanotrasen/pol_3
|
||||
/decl/poster/nanotrasen/pol_3
|
||||
icon_state="polposter3"
|
||||
name = "Safety!"
|
||||
desc = "A safety poster instructing you to comply with the authorities, especially in an emergency."
|
||||
listing_name = "Safety - Follow Instruction"
|
||||
|
||||
/datum/poster/nanotrasen/pol_4
|
||||
/decl/poster/nanotrasen/pol_4
|
||||
icon_state="polposter4"
|
||||
name = "Clean Hands Save Lives"
|
||||
desc = "A safety poster reminding you to wash your hands."
|
||||
listing_name = "Safety - Hand Washing"
|
||||
|
||||
/datum/poster/nanotrasen/pol_5
|
||||
/decl/poster/nanotrasen/pol_5
|
||||
icon_state="polposter5"
|
||||
name = "Help!"
|
||||
desc = "This poster depicts a man helping another man get up."
|
||||
listing_name = "Safety - Help Others"
|
||||
|
||||
/datum/poster/nanotrasen/pol_6
|
||||
/decl/poster/nanotrasen/pol_6
|
||||
icon_state="polposter6"
|
||||
name = "Walk!"
|
||||
desc = "This poster depicts a man walking, presumably to encourage you not to run in the halls."
|
||||
listing_name = "Safety - No Running"
|
||||
|
||||
/datum/poster/nanotrasen/pol_7
|
||||
/decl/poster/nanotrasen/pol_7
|
||||
icon_state="polposter7"
|
||||
name = "Place your signs!"
|
||||
desc = "A safety poster reminding custodial staff to place wet floor signs where needed. This reminder's rarely heeded."
|
||||
listing_name = "Safety - Wet Floor Signs"
|
||||
|
||||
/datum/poster/nanotrasen/pol_8
|
||||
/decl/poster/nanotrasen/pol_8
|
||||
icon_state="polposter8"
|
||||
name = "Safety!"
|
||||
desc = "An advertisement / safety poster for EVA training and certification. Training is available at your local Central Command."
|
||||
listing_name = "Safety - EVA Training"
|
||||
|
||||
/datum/poster/nanotrasen/pol_9
|
||||
/decl/poster/nanotrasen/pol_9
|
||||
icon_state="poster10"
|
||||
name = "Airlock Maintenance Reference"
|
||||
desc = "This poster appears to be reference material for maintenance personnel, instructing to always wear insulated gloves, that wirecutters and \
|
||||
@@ -193,97 +193,97 @@
|
||||
wire codes."
|
||||
listing_name = "Safety - Airlock Maintenance"
|
||||
|
||||
/datum/poster/nanotrasen/pol_10
|
||||
/decl/poster/nanotrasen/pol_10
|
||||
icon_state="polposter9"
|
||||
name = "orchid"
|
||||
desc = "This poster suggests a feeling of peace. It depicts the flower of a tree native to the planet Earth."
|
||||
listing_name = "General - Orchid"
|
||||
|
||||
/datum/poster/nanotrasen/bay_9
|
||||
/decl/poster/nanotrasen/bay_9
|
||||
icon_state="bsposter9"
|
||||
name = "Pinup Girl Amy"
|
||||
desc = "This particular one is of Amy, the nymphomaniac urban legend of deep space. How this photograph came to be is not known."
|
||||
listing_name = "Pin-up - Amy"
|
||||
|
||||
/datum/poster/nanotrasen/bay_21
|
||||
/decl/poster/nanotrasen/bay_21
|
||||
icon_state="bsposter21"
|
||||
name = "Join the Fuzz!"
|
||||
desc = "It's a nice recruitment poster of a white haired Chinese woman that says; \"Big Guns, Hot Women, Good Times. Security. We get it done.\""
|
||||
listing_name = "Recruitment - NanoTrasen Security - Pinup"
|
||||
|
||||
/datum/poster/nanotrasen/bay_22
|
||||
/decl/poster/nanotrasen/bay_22
|
||||
icon_state="bsposter22"
|
||||
name = "Looking for a career with excitement?"
|
||||
desc = "A recruitment poster starring a dark haired woman with glasses and a purple shirt that has \"Got Brains? Got Talent? Not afraid of electric flying monsters that want to suck the soul out of you? Then Xenobiology could use someone like you!\" written on the bottom."
|
||||
listing_name = "Recruitment - Xenobiology"
|
||||
|
||||
/datum/poster/nanotrasen/bay_23
|
||||
/decl/poster/nanotrasen/bay_23
|
||||
icon_state="bsposter23"
|
||||
name = "Safety first: because electricity doesn't wait!"
|
||||
desc = "A safety poster starring a clueless looking redhead with frazzled hair. \"Every year, hundreds of NT employees expose themselves to electric shock. Play it safe. Avoid suspicious doors after electrical storms, and always wear protection when doing electric maintenance.\""
|
||||
listing_name = "Safety - Electric Shock"
|
||||
|
||||
/datum/poster/nanotrasen/bay_24
|
||||
/decl/poster/nanotrasen/bay_24
|
||||
icon_state="bsposter24"
|
||||
name = "Responsible medbay habits, No #259"
|
||||
desc = "A poster with a nervous looking geneticist on it states; \"Friends Tell Friends They're Clones. It can cause severe and irreparable emotional trauma if a person is not properly informed of their recent demise. Always follow your contractual obligation and inform them of their recent rejuvenation.\""
|
||||
listing_name = "Medical - Clone Disclosure"
|
||||
|
||||
/datum/poster/nanotrasen/bay_25
|
||||
/decl/poster/nanotrasen/bay_25
|
||||
icon_state="bsposter25"
|
||||
name = "Irresponsible medbay habits, No #2"
|
||||
desc = "This is a safety poster starring a perverted looking naked doctor. \"Sexual harassment is never okay. REPORT any acts of sexual deviance or harassment that disrupt a healthy working environment.\""
|
||||
listing_name = "Medical - Sexual Harassment"
|
||||
|
||||
/datum/poster/nanotrasen/bay_49
|
||||
/decl/poster/nanotrasen/bay_49
|
||||
icon_state="bsposter49"
|
||||
name = "Engineering recruitment"
|
||||
desc = "This is a poster showing an engineer relaxing by a computer, the text states \"Living the life! Join Engineering today!\""
|
||||
listing_name = "Recruitment - Engineering"
|
||||
|
||||
/datum/poster/nanotrasen/bay_52
|
||||
/decl/poster/nanotrasen/bay_52
|
||||
icon_state="bsposter52"
|
||||
name = "fire safety poster"
|
||||
desc = "This is a poster reminding you of what you should do if you are on fire, or if you are at a dance party."
|
||||
listing_name = "Safety - Stop Drop And Roll"
|
||||
|
||||
/datum/poster/nanotrasen/bay_53
|
||||
/decl/poster/nanotrasen/bay_53
|
||||
icon_state="bsposter53"
|
||||
name = "fire extinguisher poster"
|
||||
desc = "This is a poster reminding you of what you should use to put out a fire."
|
||||
listing_name = "Safety - Extinguishers"
|
||||
|
||||
/datum/poster/nanotrasen/bay_54
|
||||
/decl/poster/nanotrasen/bay_54
|
||||
icon_state="bsposter54"
|
||||
name = "firefighter poster"
|
||||
desc = "This is a poster of a particularly stern looking firefighter. The caption reads, \"Only you can prevent space fires.\""
|
||||
listing_name = "Safety - Prevent Fires"
|
||||
|
||||
/datum/poster/nanotrasen/bay_57
|
||||
/decl/poster/nanotrasen/bay_57
|
||||
icon_state="bsposter57"
|
||||
name = "space carp warning poster"
|
||||
desc = "This poster tells of the dangers of space carp infestations."
|
||||
listing_name = "Safety - Carp"
|
||||
|
||||
/datum/poster/nanotrasen/bay_58
|
||||
/decl/poster/nanotrasen/bay_58
|
||||
icon_state="bsposter58"
|
||||
name = "space carp information poster"
|
||||
desc = "This poster showcases an old spacer saying on the dangers of migrant space carp."
|
||||
listing_name = "Safety - Carp Information"
|
||||
|
||||
/datum/poster/nanotrasen/nt_1
|
||||
/decl/poster/nanotrasen/nt_1
|
||||
icon_state = "ntposter01"
|
||||
name = "Security recruitment"
|
||||
desc = "This poster showcases an NT security guard in an excited pose, with a small blurb about the importance of Security."
|
||||
listing_name = "Recruitment - NanoTrasen Security - Importance"
|
||||
|
||||
/datum/poster/nanotrasen/nt_2
|
||||
/decl/poster/nanotrasen/nt_2
|
||||
icon_state = "ntposter02"
|
||||
name = "Security recruitment"
|
||||
desc = "This poster showcases an NT security guard in an excited pose, with a small blurb about Security Employee benefits."
|
||||
listing_name = "Recruitment - NanoTrasen Security - Benefits"
|
||||
|
||||
/datum/poster/nanotrasen/nt_3
|
||||
/decl/poster/nanotrasen/nt_3
|
||||
icon_state = "ntposter03"
|
||||
name = "Mechatronic Safety"
|
||||
desc = "This poster displays three cutting-edge gygaxes standing in line in front of a man in plain clothes.\
|
||||
@@ -291,25 +291,25 @@
|
||||
The image seems important."
|
||||
listing_name = "Safety - Mech Operation"
|
||||
|
||||
/datum/poster/nanotrasen/nt_4
|
||||
/decl/poster/nanotrasen/nt_4
|
||||
icon_state = "ntposter04"
|
||||
name = "Beware Aetotheans"
|
||||
desc = "This poster displays a distinctly hostile-looking red Promethean in a black coat. The fine-print around the edges warns the reader about the dangers posed by Almachi Prometheans."
|
||||
listing_name = "Safety - Aetothean Danger"
|
||||
|
||||
/datum/poster/nanotrasen/nt_5
|
||||
/decl/poster/nanotrasen/nt_5
|
||||
icon_state = "ntposter05"
|
||||
name = "Promethean"
|
||||
desc = "This poster displays a friendly-looking green Promethean in a labcoat. The fine-print around the edges talks about the benefits Prometheans give in laboratories."
|
||||
listing_name = "Safety - Prometheans"
|
||||
|
||||
/datum/poster/nanotrasen/nt_6
|
||||
/decl/poster/nanotrasen/nt_6
|
||||
icon_state = "ntposter06"
|
||||
name = "NanoTrasen"
|
||||
desc = "This poster showcases an NT emblem. There is writing in the ring around the inner points, probably some sort of slogan no one bothers to memorize."
|
||||
listing_name = "Ad - NanoTrasen"
|
||||
|
||||
/datum/poster/nanotrasen/nt_7
|
||||
/decl/poster/nanotrasen/nt_7
|
||||
icon_state = "ntposter07"
|
||||
name = "SolGov"
|
||||
desc = "This poster showcases an SCG emblem. The outer ring reads,\
|
||||
@@ -317,13 +317,13 @@
|
||||
Solar Confederate Government."
|
||||
listing_name = "Political - SolGov"
|
||||
|
||||
/datum/poster/nanotrasen/nt_8
|
||||
/decl/poster/nanotrasen/nt_8
|
||||
icon_state = "ntposter08"
|
||||
name = "wildlife hazard"
|
||||
desc = "This poster warns against attempting to kill a fully grown giant spider or other hostile life-form alone."
|
||||
listing_name = "Safety - Spiders"
|
||||
|
||||
/datum/poster/nanotrasen/nt_9
|
||||
/decl/poster/nanotrasen/nt_9
|
||||
icon_state = "ntposter09"
|
||||
name = "Regulations and You"
|
||||
desc = "This SifGov poster showcases an NT security guard reading from her PDA. The blurb advocates for the reader to keep corporate regulations in mind at all times, as an emergency can occur at any time."
|
||||
|
||||
@@ -0,0 +1,206 @@
|
||||
/proc/get_poster_decl(var/path = null, var/exact = TRUE)
|
||||
if(ispath(path))
|
||||
if(exact)
|
||||
return decls_repository.get_decl(path)
|
||||
else
|
||||
var/list/L = decls_repository.get_decls_of_type(path)
|
||||
return L[pick(L)]
|
||||
return null
|
||||
|
||||
/obj/item/poster
|
||||
name = "rolled-up poster"
|
||||
desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface."
|
||||
icon = 'icons/obj/contraband.dmi'
|
||||
icon_state = "rolled_poster"
|
||||
drop_sound = 'sound/items/drop/wrapper.ogg'
|
||||
pickup_sound = 'sound/items/pickup/wrapper.ogg'
|
||||
force = 0
|
||||
var/decl/poster/poster_decl = null
|
||||
var/poster_type = /obj/structure/sign/poster
|
||||
|
||||
/obj/item/poster/Initialize(var/mapload, var/decl/poster/poster_decl = null)
|
||||
if(ispath(src.poster_decl))
|
||||
src.poster_decl = get_poster_decl(src.poster_decl, TRUE)
|
||||
else if(istype(poster_decl))
|
||||
src.poster_decl = poster_decl
|
||||
else if(ispath(poster_decl))
|
||||
src.poster_decl = get_poster_decl(poster_decl, TRUE)
|
||||
else
|
||||
src.poster_decl = get_poster_decl(/decl/poster, FALSE)
|
||||
|
||||
name += " - No. [src.poster_decl.name]"
|
||||
return ..()
|
||||
|
||||
//Places the poster on a wall
|
||||
/obj/item/poster/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams)
|
||||
if(!adjacent)
|
||||
return FALSE
|
||||
|
||||
//must place on a wall and user must not be inside a closet/mecha/whatever
|
||||
var/turf/W = A
|
||||
if(!iswall(W) || !isturf(user.loc))
|
||||
to_chat(user, "<span class='warning'>You can't place this here!</span>")
|
||||
return FALSE
|
||||
|
||||
var/placement_dir = get_dir(user, W)
|
||||
if(!(placement_dir in cardinal))
|
||||
to_chat(user, "<span class='warning'>You must stand directly in front of the wall you wish to place that on.</span>")
|
||||
return FALSE
|
||||
|
||||
//just check if there is a poster on or adjacent to the wall
|
||||
var/stuff_on_wall = 0
|
||||
if(locate(/obj/structure/sign/poster) in W)
|
||||
stuff_on_wall = 1
|
||||
|
||||
//crude, but will cover most cases. We could do stuff like check pixel_x/y but it's not really worth it.
|
||||
for (var/dir in cardinal)
|
||||
var/turf/T = get_step(W, dir)
|
||||
if (locate(/obj/structure/sign/poster) in T)
|
||||
stuff_on_wall = 1
|
||||
break
|
||||
|
||||
if(stuff_on_wall)
|
||||
to_chat(user, "<span class='notice'>There is already a poster there!</span>")
|
||||
return FALSE
|
||||
|
||||
to_chat(user, "<span class='notice'>You start placing the poster on the wall...</span>") //Looks like it's uncluttered enough. Place the poster.
|
||||
|
||||
var/obj/structure/sign/poster/P = new poster_type(user.loc, get_dir(user, W), src)
|
||||
|
||||
if(do_after(user, 17)) //Let's check if everything is still there
|
||||
to_chat(user, "<span class='notice'>You place the poster!</span>")
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
P.roll_and_drop(P.loc)
|
||||
qdel(src)
|
||||
return FALSE
|
||||
|
||||
//NT subtype
|
||||
/obj/item/poster/nanotrasen
|
||||
icon_state = "rolled_poster_nt"
|
||||
poster_type = /obj/structure/sign/poster/nanotrasen
|
||||
|
||||
/obj/item/poster/nanotrasen/Initialize(turf/loc, var/decl/poster/P = null)
|
||||
if(!ispath(src.poster_decl) && !ispath(P) && !istype(P))
|
||||
src.poster_decl = get_poster_decl(/decl/poster/nanotrasen, FALSE)
|
||||
return ..()
|
||||
|
||||
//Selectable subtype
|
||||
/obj/item/poster/custom
|
||||
name = "rolled-up poly-poster"
|
||||
desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. This one is made from some kind of e-paper, and could display almost anything!"
|
||||
poster_type = /obj/structure/sign/poster/custom
|
||||
|
||||
/obj/item/poster/custom/verb/select_poster()
|
||||
set name = "Set Poster type"
|
||||
set category = "Object"
|
||||
set desc = "Click to choose a poster to display."
|
||||
|
||||
var/mob/M = usr
|
||||
var/list/options = list()
|
||||
for(var/decl/poster/posteroption in decls_repository.get_decls_of_type(/decl/poster))
|
||||
options[posteroption.listing_name] = posteroption
|
||||
|
||||
var/choice = input(M,"Choose a poster!","Customize Poster") in options
|
||||
if(src && choice && !M.stat && in_range(M,src))
|
||||
poster_decl = options[choice]
|
||||
name = "rolled-up poly-poster - No.[poster_decl.icon_state]"
|
||||
to_chat(M, "The poster is now: [choice].")
|
||||
|
||||
|
||||
|
||||
//############################## THE ACTUAL DECALS ###########################
|
||||
|
||||
/obj/structure/sign/poster
|
||||
name = "poster"
|
||||
desc = "A large piece of space-resistant printed paper. "
|
||||
icon = 'icons/obj/contraband.dmi'
|
||||
anchored = 1
|
||||
var/decl/poster/poster_decl = null
|
||||
var/target_poster_decl_path = /decl/poster
|
||||
var/roll_type = /obj/item/poster
|
||||
var/ruined = FALSE
|
||||
|
||||
// This stuff needs to go in new() for the the flick() to look right while it's being placed
|
||||
/obj/structure/sign/poster/New(var/newloc, var/placement_dir = null, var/obj/item/poster/P = null)
|
||||
if(placement_dir)
|
||||
dir = placement_dir
|
||||
|
||||
switch (dir)
|
||||
if (NORTH)
|
||||
pixel_x = 0
|
||||
pixel_y = 32
|
||||
if (SOUTH)
|
||||
pixel_x = 0
|
||||
pixel_y = -32
|
||||
if (EAST)
|
||||
pixel_x = 32
|
||||
pixel_y = 0
|
||||
if (WEST)
|
||||
pixel_x = -32
|
||||
pixel_y = 0
|
||||
|
||||
flick("poster_being_set", src)
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/structure/sign/poster/Initialize(var/newloc, var/placement_dir = null, var/obj/item/poster/P = null)
|
||||
if(ispath(src.poster_decl))
|
||||
src.poster_decl = get_poster_decl(src.poster_decl, TRUE)
|
||||
else if(istype(P))
|
||||
src.poster_decl = P.poster_decl
|
||||
roll_type = P.type
|
||||
else if(ispath(P))
|
||||
src.poster_decl = get_poster_decl(P, TRUE)
|
||||
else
|
||||
src.poster_decl = get_poster_decl(target_poster_decl_path, FALSE)
|
||||
|
||||
name = "[initial(name)] - [poster_decl.name]"
|
||||
desc = "[initial(desc)] [poster_decl.desc]"
|
||||
icon_state = poster_decl.icon_state
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/structure/sign/poster/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.is_wirecutter())
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
if(ruined)
|
||||
to_chat(user, "<span class='notice'>You remove the remnants of the poster.</span>")
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You carefully remove the poster from the wall.</span>")
|
||||
roll_and_drop(get_turf(user))
|
||||
return
|
||||
|
||||
/obj/structure/sign/poster/attack_hand(mob/user as mob)
|
||||
|
||||
if(ruined)
|
||||
return
|
||||
|
||||
if(alert("Do I want to rip the poster from the wall?","You think...","Yes","No") == "Yes")
|
||||
|
||||
if(ruined || !user.Adjacent(src))
|
||||
return
|
||||
|
||||
visible_message("<span class='warning'>[user] rips [src] in a single, decisive motion!</span>" )
|
||||
playsound(src, 'sound/items/poster_ripped.ogg', 100, 1)
|
||||
ruined = TRUE
|
||||
icon_state = "poster_ripped"
|
||||
name = "ripped poster"
|
||||
desc = "You can't make out anything from the poster's original print. It's ruined."
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/structure/sign/poster/proc/roll_and_drop(turf/newloc)
|
||||
var/obj/item/poster/P = new roll_type(newloc, poster_decl)
|
||||
P.loc = newloc
|
||||
qdel(src)
|
||||
|
||||
// NT poster subtype.
|
||||
/obj/structure/sign/poster/nanotrasen
|
||||
roll_type = /obj/item/poster/nanotrasen
|
||||
target_poster_decl_path = /decl/poster/nanotrasen
|
||||
|
||||
// Non-Random Posters
|
||||
/obj/structure/sign/poster/custom
|
||||
roll_type = /obj/item/poster/custom
|
||||
@@ -1,50 +1,50 @@
|
||||
// /tg/ posters.
|
||||
/datum/poster/tg_1
|
||||
/decl/poster/tg_1
|
||||
name = "Free Tonto"
|
||||
desc = "A framed shred of a much larger flag, colors bled together and faded from age."
|
||||
icon_state="poster1"
|
||||
|
||||
/datum/poster/tg_2
|
||||
/decl/poster/tg_2
|
||||
name = "Atmosia Declaration of Independence"
|
||||
desc = "A relic of a failed rebellion"
|
||||
icon_state="poster2"
|
||||
|
||||
/datum/poster/tg_3
|
||||
/decl/poster/tg_3
|
||||
name = "Fun Police"
|
||||
desc = "A poster condemning the station's security forces."
|
||||
icon_state="poster3"
|
||||
|
||||
/datum/poster/tg_4
|
||||
/decl/poster/tg_4
|
||||
name = "Lusty Xeno"
|
||||
desc = "A heretical poster depicting the titular star of an equally heretical book."
|
||||
icon_state="poster4"
|
||||
|
||||
/datum/poster/tg_5
|
||||
/decl/poster/tg_5
|
||||
name = "Mercenary Recruitment Poster"
|
||||
desc = "See the galaxy! Shatter corrupt megacorporations! Join today!"
|
||||
icon_state="poster5"
|
||||
|
||||
/datum/poster/tg_6
|
||||
/decl/poster/tg_6
|
||||
name = "Clown"
|
||||
desc = "Honk."
|
||||
icon_state="poster6"
|
||||
|
||||
/datum/poster/tg_7
|
||||
/decl/poster/tg_7
|
||||
name = "Smoke"
|
||||
desc = "A poster depicting a carton of cigarettes."
|
||||
icon_state="poster7"
|
||||
|
||||
/datum/poster/tg_8
|
||||
/decl/poster/tg_8
|
||||
name = "Grey Tide"
|
||||
desc = "A rebellious poster symbolizing assistant solidarity."
|
||||
icon_state="poster8"
|
||||
|
||||
/datum/poster/tg_9
|
||||
/decl/poster/tg_9
|
||||
name = "Missing Gloves"
|
||||
desc = "This poster is about the uproar that followed NanoTrasen's financial cuts towards insulated-glove purchases."
|
||||
icon_state="poster9"
|
||||
|
||||
/datum/poster/tg_10
|
||||
/decl/poster/tg_10
|
||||
name = "Hacking Guide"
|
||||
desc = "This poster details the internal workings of the common NanoTrasen airlock."
|
||||
icon_state="poster10"
|
||||
@@ -20,22 +20,22 @@ would spawn and follow the beaker, even if it is carried or thrown.
|
||||
var/atom/holder
|
||||
var/setup = 0
|
||||
|
||||
proc/set_up(n = 3, c = 0, turf/loc)
|
||||
if(n > 10)
|
||||
n = 10
|
||||
number = n
|
||||
cardinals = c
|
||||
location = loc
|
||||
setup = 1
|
||||
/datum/effect/effect/system/proc/set_up(n = 3, c = 0, turf/loc)
|
||||
if(n > 10)
|
||||
n = 10
|
||||
number = n
|
||||
cardinals = c
|
||||
location = loc
|
||||
setup = 1
|
||||
|
||||
proc/attach(atom/atom)
|
||||
holder = atom
|
||||
/datum/effect/effect/system/proc/attach(atom/atom)
|
||||
holder = atom
|
||||
|
||||
proc/start()
|
||||
/datum/effect/effect/system/proc/start()
|
||||
|
||||
Destroy()
|
||||
holder = null
|
||||
return ..()
|
||||
/datum/effect/effect/system/Destroy()
|
||||
holder = null
|
||||
return ..()
|
||||
|
||||
/////////////////////////////////////////////
|
||||
// GENERIC STEAM SPREAD SYSTEM
|
||||
@@ -58,32 +58,30 @@ steam.start() -- spawns the effect
|
||||
icon_state = "extinguish"
|
||||
density = 0
|
||||
|
||||
/datum/effect/effect/system/steam_spread
|
||||
/datum/effect/effect/system/steam_spread/set_up(n = 3, c = 0, turf/loc)
|
||||
if(n > 10)
|
||||
n = 10
|
||||
number = n
|
||||
cardinals = c
|
||||
location = loc
|
||||
|
||||
set_up(n = 3, c = 0, turf/loc)
|
||||
if(n > 10)
|
||||
n = 10
|
||||
number = n
|
||||
cardinals = c
|
||||
location = loc
|
||||
|
||||
start()
|
||||
var/i = 0
|
||||
for(i=0, i<src.number, i++)
|
||||
spawn(0)
|
||||
if(holder)
|
||||
src.location = get_turf(holder)
|
||||
var/obj/effect/effect/steam/steam = new /obj/effect/effect/steam(src.location)
|
||||
var/direction
|
||||
if(src.cardinals)
|
||||
direction = pick(cardinal)
|
||||
else
|
||||
direction = pick(alldirs)
|
||||
for(i=0, i<pick(1,2,3), i++)
|
||||
sleep(5)
|
||||
step(steam,direction)
|
||||
spawn(20)
|
||||
qdel(steam)
|
||||
/datum/effect/effect/system/steam_spread/start()
|
||||
var/i = 0
|
||||
for(i=0, i<src.number, i++)
|
||||
spawn(0)
|
||||
if(holder)
|
||||
src.location = get_turf(holder)
|
||||
var/obj/effect/effect/steam/steam = new /obj/effect/effect/steam(src.location)
|
||||
var/direction
|
||||
if(src.cardinals)
|
||||
direction = pick(cardinal)
|
||||
else
|
||||
direction = pick(alldirs)
|
||||
for(i=0, i<pick(1,2,3), i++)
|
||||
sleep(5)
|
||||
step(steam,direction)
|
||||
spawn(20)
|
||||
qdel(steam)
|
||||
|
||||
/////////////////////////////////////////////
|
||||
//SPARK SYSTEM (like steam system)
|
||||
@@ -125,36 +123,36 @@ steam.start() -- spawns the effect
|
||||
/datum/effect/effect/system/spark_spread
|
||||
var/total_sparks = 0 // To stop it being spammed and lagging!
|
||||
|
||||
set_up(n = 3, c = 0, loca)
|
||||
if(n > 10)
|
||||
n = 10
|
||||
number = n
|
||||
cardinals = c
|
||||
if(istype(loca, /turf/))
|
||||
location = loca
|
||||
else
|
||||
location = get_turf(loca)
|
||||
/datum/effect/effect/system/spark_spread/set_up(n = 3, c = 0, loca)
|
||||
if(n > 10)
|
||||
n = 10
|
||||
number = n
|
||||
cardinals = c
|
||||
if(istype(loca, /turf/))
|
||||
location = loca
|
||||
else
|
||||
location = get_turf(loca)
|
||||
|
||||
start()
|
||||
var/i = 0
|
||||
for(i=0, i<src.number, i++)
|
||||
if(src.total_sparks > 20)
|
||||
return
|
||||
spawn(0)
|
||||
if(holder)
|
||||
src.location = get_turf(holder)
|
||||
var/obj/effect/effect/sparks/sparks = new /obj/effect/effect/sparks(src.location)
|
||||
src.total_sparks++
|
||||
var/direction
|
||||
if(src.cardinals)
|
||||
direction = pick(cardinal)
|
||||
else
|
||||
direction = pick(alldirs)
|
||||
for(i=0, i<pick(1,2,3), i++)
|
||||
sleep(5)
|
||||
step(sparks,direction)
|
||||
spawn(20)
|
||||
src.total_sparks--
|
||||
/datum/effect/effect/system/spark_spread/start()
|
||||
var/i = 0
|
||||
for(i=0, i<src.number, i++)
|
||||
if(src.total_sparks > 20)
|
||||
return
|
||||
spawn(0)
|
||||
if(holder)
|
||||
src.location = get_turf(holder)
|
||||
var/obj/effect/effect/sparks/sparks = new /obj/effect/effect/sparks(src.location)
|
||||
src.total_sparks++
|
||||
var/direction
|
||||
if(src.cardinals)
|
||||
direction = pick(cardinal)
|
||||
else
|
||||
direction = pick(alldirs)
|
||||
for(i=0, i<pick(1,2,3), i++)
|
||||
sleep(5)
|
||||
step(sparks,direction)
|
||||
spawn(20)
|
||||
src.total_sparks--
|
||||
|
||||
|
||||
|
||||
@@ -430,46 +428,46 @@ steam.start() -- spawns the effect
|
||||
var/processing = 1
|
||||
var/on = 1
|
||||
|
||||
set_up(atom/atom)
|
||||
attach(atom)
|
||||
oldposition = get_turf(atom)
|
||||
/datum/effect/effect/system/ion_trail_follow/set_up(atom/atom)
|
||||
attach(atom)
|
||||
oldposition = get_turf(atom)
|
||||
|
||||
start()
|
||||
if(!src.on)
|
||||
src.on = 1
|
||||
src.processing = 1
|
||||
if(src.processing)
|
||||
src.processing = 0
|
||||
spawn(0)
|
||||
var/turf/T
|
||||
if(istype(holder, /atom/movable))
|
||||
var/atom/movable/AM = holder
|
||||
if(AM.locs && AM.locs.len)
|
||||
T = get_turf(pick(AM.locs))
|
||||
else
|
||||
T = get_turf(AM)
|
||||
else //when would this ever be attached a non-atom/movable?
|
||||
T = get_turf(src.holder)
|
||||
if(T != src.oldposition)
|
||||
if(isturf(T))
|
||||
var/obj/effect/effect/ion_trails/I = new /obj/effect/effect/ion_trails(src.oldposition)
|
||||
src.oldposition = T
|
||||
I.set_dir(src.holder.dir)
|
||||
flick("ion_fade", I)
|
||||
I.icon_state = "blank"
|
||||
spawn( 20 )
|
||||
qdel(I)
|
||||
spawn(2)
|
||||
if(src.on)
|
||||
src.processing = 1
|
||||
src.start()
|
||||
/datum/effect/effect/system/ion_trail_follow/start()
|
||||
if(!src.on)
|
||||
src.on = 1
|
||||
src.processing = 1
|
||||
if(src.processing)
|
||||
src.processing = 0
|
||||
spawn(0)
|
||||
var/turf/T
|
||||
if(istype(holder, /atom/movable))
|
||||
var/atom/movable/AM = holder
|
||||
if(AM.locs && AM.locs.len)
|
||||
T = get_turf(pick(AM.locs))
|
||||
else
|
||||
spawn(2)
|
||||
if(src.on)
|
||||
src.processing = 1
|
||||
src.start()
|
||||
T = get_turf(AM)
|
||||
else //when would this ever be attached a non-atom/movable?
|
||||
T = get_turf(src.holder)
|
||||
if(T != src.oldposition)
|
||||
if(isturf(T))
|
||||
var/obj/effect/effect/ion_trails/I = new /obj/effect/effect/ion_trails(src.oldposition)
|
||||
src.oldposition = T
|
||||
I.set_dir(src.holder.dir)
|
||||
flick("ion_fade", I)
|
||||
I.icon_state = "blank"
|
||||
spawn( 20 )
|
||||
qdel(I)
|
||||
spawn(2)
|
||||
if(src.on)
|
||||
src.processing = 1
|
||||
src.start()
|
||||
else
|
||||
spawn(2)
|
||||
if(src.on)
|
||||
src.processing = 1
|
||||
src.start()
|
||||
|
||||
proc/stop()
|
||||
/datum/effect/effect/system/ion_trail_follow/proc/stop()
|
||||
src.processing = 0
|
||||
src.on = 0
|
||||
|
||||
@@ -486,95 +484,95 @@ steam.start() -- spawns the effect
|
||||
var/processing = 1
|
||||
var/on = 1
|
||||
|
||||
set_up(atom/atom)
|
||||
attach(atom)
|
||||
oldposition = get_turf(atom)
|
||||
/datum/effect/effect/system/steam_trail_follow/set_up(atom/atom)
|
||||
attach(atom)
|
||||
oldposition = get_turf(atom)
|
||||
|
||||
start()
|
||||
if(!src.on)
|
||||
src.on = 1
|
||||
src.processing = 1
|
||||
if(src.processing)
|
||||
src.processing = 0
|
||||
spawn(0)
|
||||
if(src.number < 3)
|
||||
var/obj/effect/effect/steam/I = new /obj/effect/effect/steam(src.oldposition)
|
||||
src.number++
|
||||
src.oldposition = get_turf(holder)
|
||||
I.set_dir(src.holder.dir)
|
||||
spawn(10)
|
||||
qdel(I)
|
||||
src.number--
|
||||
spawn(2)
|
||||
if(src.on)
|
||||
src.processing = 1
|
||||
src.start()
|
||||
else
|
||||
spawn(2)
|
||||
if(src.on)
|
||||
src.processing = 1
|
||||
src.start()
|
||||
|
||||
proc/stop()
|
||||
/datum/effect/effect/system/steam_trail_follow/start()
|
||||
if(!src.on)
|
||||
src.on = 1
|
||||
src.processing = 1
|
||||
if(src.processing)
|
||||
src.processing = 0
|
||||
src.on = 0
|
||||
spawn(0)
|
||||
if(src.number < 3)
|
||||
var/obj/effect/effect/steam/I = new /obj/effect/effect/steam(src.oldposition)
|
||||
src.number++
|
||||
src.oldposition = get_turf(holder)
|
||||
I.set_dir(src.holder.dir)
|
||||
spawn(10)
|
||||
qdel(I)
|
||||
src.number--
|
||||
spawn(2)
|
||||
if(src.on)
|
||||
src.processing = 1
|
||||
src.start()
|
||||
else
|
||||
spawn(2)
|
||||
if(src.on)
|
||||
src.processing = 1
|
||||
src.start()
|
||||
|
||||
/datum/effect/effect/system/steam_trail_follow/proc/stop()
|
||||
src.processing = 0
|
||||
src.on = 0
|
||||
|
||||
/datum/effect/effect/system/reagents_explosion
|
||||
var/amount // TNT equivalent
|
||||
var/flashing = 0 // does explosion creates flash effect?
|
||||
var/flashing_factor = 0 // factor of how powerful the flash effect relatively to the explosion
|
||||
|
||||
set_up (amt, loc, flash = 0, flash_fact = 0)
|
||||
amount = amt
|
||||
if(istype(loc, /turf/))
|
||||
location = loc
|
||||
else
|
||||
location = get_turf(loc)
|
||||
/datum/effect/effect/system/reagents_explosion/set_up(amt, loc, flash = 0, flash_fact = 0)
|
||||
amount = amt
|
||||
if(istype(loc, /turf/))
|
||||
location = loc
|
||||
else
|
||||
location = get_turf(loc)
|
||||
|
||||
flashing = flash
|
||||
flashing_factor = flash_fact
|
||||
flashing = flash
|
||||
flashing_factor = flash_fact
|
||||
|
||||
return
|
||||
|
||||
/datum/effect/effect/system/reagents_explosion/start()
|
||||
if (amount <= 2)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
s.set_up(2, 1, location)
|
||||
s.start()
|
||||
|
||||
for(var/mob/M in viewers(5, location))
|
||||
to_chat(M, "<span class='warning'>The solution violently explodes.</span>")
|
||||
for(var/mob/M in viewers(1, location))
|
||||
if (prob (50 * amount))
|
||||
to_chat(M, "<span class='warning'>The explosion knocks you down.</span>")
|
||||
M.Weaken(rand(1,5))
|
||||
return
|
||||
else
|
||||
var/devst = -1
|
||||
var/heavy = -1
|
||||
var/light = -1
|
||||
var/flash = -1
|
||||
|
||||
start()
|
||||
if (amount <= 2)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
s.set_up(2, 1, location)
|
||||
s.start()
|
||||
// Clamp all values to fractions of max_explosion_range, following the same pattern as for tank transfer bombs
|
||||
if (round(amount/12) > 0)
|
||||
devst = devst + amount/12
|
||||
|
||||
for(var/mob/M in viewers(5, location))
|
||||
to_chat(M, "<span class='warning'>The solution violently explodes.</span>")
|
||||
for(var/mob/M in viewers(1, location))
|
||||
if (prob (50 * amount))
|
||||
to_chat(M, "<span class='warning'>The explosion knocks you down.</span>")
|
||||
M.Weaken(rand(1,5))
|
||||
return
|
||||
else
|
||||
var/devst = -1
|
||||
var/heavy = -1
|
||||
var/light = -1
|
||||
var/flash = -1
|
||||
if (round(amount/6) > 0)
|
||||
heavy = heavy + amount/6
|
||||
|
||||
// Clamp all values to fractions of max_explosion_range, following the same pattern as for tank transfer bombs
|
||||
if (round(amount/12) > 0)
|
||||
devst = devst + amount/12
|
||||
if (round(amount/3) > 0)
|
||||
light = light + amount/3
|
||||
|
||||
if (round(amount/6) > 0)
|
||||
heavy = heavy + amount/6
|
||||
if (flashing && flashing_factor)
|
||||
flash = (amount/4) * flashing_factor
|
||||
|
||||
if (round(amount/3) > 0)
|
||||
light = light + amount/3
|
||||
for(var/mob/M in viewers(8, location))
|
||||
to_chat(M, "<span class='warning'>The solution violently explodes.</span>")
|
||||
|
||||
if (flashing && flashing_factor)
|
||||
flash = (amount/4) * flashing_factor
|
||||
|
||||
for(var/mob/M in viewers(8, location))
|
||||
to_chat(M, "<span class='warning'>The solution violently explodes.</span>")
|
||||
|
||||
explosion(
|
||||
location,
|
||||
round(min(devst, BOMBCAP_DVSTN_RADIUS)),
|
||||
round(min(heavy, BOMBCAP_HEAVY_RADIUS)),
|
||||
round(min(light, BOMBCAP_LIGHT_RADIUS)),
|
||||
round(min(flash, BOMBCAP_FLASH_RADIUS))
|
||||
)
|
||||
explosion(
|
||||
location,
|
||||
round(min(devst, BOMBCAP_DVSTN_RADIUS)),
|
||||
round(min(heavy, BOMBCAP_HEAVY_RADIUS)),
|
||||
round(min(light, BOMBCAP_LIGHT_RADIUS)),
|
||||
round(min(flash, BOMBCAP_FLASH_RADIUS))
|
||||
)
|
||||
|
||||
@@ -9,47 +9,47 @@
|
||||
var/fleshcolor //Used for gibbed humans.
|
||||
var/bloodcolor //Used for gibbed humans.
|
||||
|
||||
New(location, var/datum/dna/MobDNA, var/fleshcolor, var/bloodcolor)
|
||||
..()
|
||||
/obj/effect/gibspawner/New(location, var/datum/dna/MobDNA, var/fleshcolor, var/bloodcolor)
|
||||
..()
|
||||
|
||||
if(fleshcolor) src.fleshcolor = fleshcolor
|
||||
if(bloodcolor) src.bloodcolor = bloodcolor
|
||||
Gib(loc,MobDNA)
|
||||
if(fleshcolor) src.fleshcolor = fleshcolor
|
||||
if(bloodcolor) src.bloodcolor = bloodcolor
|
||||
Gib(loc,MobDNA)
|
||||
|
||||
proc/Gib(atom/location, var/datum/dna/MobDNA = null)
|
||||
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
|
||||
to_world("<span class='warning'>Gib list length mismatch!</span>")
|
||||
return
|
||||
/obj/effect/gibspawner/proc/Gib(atom/location, var/datum/dna/MobDNA = null)
|
||||
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
|
||||
to_world("<span class='warning'>Gib list length mismatch!</span>")
|
||||
return
|
||||
|
||||
var/obj/effect/decal/cleanable/blood/gibs/gib = null
|
||||
var/obj/effect/decal/cleanable/blood/gibs/gib = null
|
||||
|
||||
if(sparks)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
s.set_up(2, 1, get_turf(location)) // Not sure if it's safe to pass an arbitrary object to set_up, todo
|
||||
s.start()
|
||||
if(sparks)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
s.set_up(2, 1, get_turf(location)) // Not sure if it's safe to pass an arbitrary object to set_up, todo
|
||||
s.start()
|
||||
|
||||
for(var/i = 1, i<= gibtypes.len, i++)
|
||||
if(gibamounts[i])
|
||||
for(var/j = 1, j<= gibamounts[i], j++)
|
||||
var/gibType = gibtypes[i]
|
||||
gib = new gibType(location)
|
||||
for(var/i = 1, i<= gibtypes.len, i++)
|
||||
if(gibamounts[i])
|
||||
for(var/j = 1, j<= gibamounts[i], j++)
|
||||
var/gibType = gibtypes[i]
|
||||
gib = new gibType(location)
|
||||
|
||||
// Apply human species colouration to masks.
|
||||
if(fleshcolor)
|
||||
gib.fleshcolor = fleshcolor
|
||||
if(bloodcolor)
|
||||
gib.basecolor = bloodcolor
|
||||
// Apply human species colouration to masks.
|
||||
if(fleshcolor)
|
||||
gib.fleshcolor = fleshcolor
|
||||
if(bloodcolor)
|
||||
gib.basecolor = bloodcolor
|
||||
|
||||
gib.update_icon()
|
||||
gib.update_icon()
|
||||
|
||||
gib.blood_DNA = list()
|
||||
if(MobDNA)
|
||||
gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type
|
||||
else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey
|
||||
gib.blood_DNA["Non-human DNA"] = "A+"
|
||||
if(istype(location,/turf/))
|
||||
var/list/directions = gibdirections[i]
|
||||
if(directions.len)
|
||||
gib.streak(directions)
|
||||
gib.blood_DNA = list()
|
||||
if(MobDNA)
|
||||
gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type
|
||||
else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey
|
||||
gib.blood_DNA["Non-human DNA"] = "A+"
|
||||
if(istype(location,/turf/))
|
||||
var/list/directions = gibdirections[i]
|
||||
if(directions.len)
|
||||
gib.streak(directions)
|
||||
|
||||
qdel(src)
|
||||
qdel(src)
|
||||
|
||||
@@ -277,7 +277,8 @@ when portals are shortly lived, or when portals are made to be obvious with spec
|
||||
|
||||
for(var/thing in mobs_to_relay)
|
||||
var/mob/mob = thing
|
||||
var/message = mob.combine_message(message_pieces, verb, M)
|
||||
var/list/combined = mob.combine_message(message_pieces, verb, M)
|
||||
var/message = combined["formatted"]
|
||||
var/name_used = M.GetVoice()
|
||||
var/rendered = null
|
||||
rendered = "<span class='game say'><span class='name'>[name_used]</span> [message]</span>"
|
||||
|
||||
@@ -8,9 +8,10 @@
|
||||
icon='icons/effects/beam.dmi'
|
||||
icon_state="b_beam"
|
||||
var/tmp/atom/BeamSource
|
||||
New()
|
||||
..()
|
||||
spawn(10) qdel(src)
|
||||
|
||||
/obj/effect/overlay/beam/New()
|
||||
..()
|
||||
spawn(10) qdel(src)
|
||||
|
||||
/obj/effect/overlay/palmtree_r
|
||||
name = "Palm tree"
|
||||
|
||||
@@ -1,27 +1,26 @@
|
||||
/obj/effect/gibspawner
|
||||
generic
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
|
||||
gibamounts = list(2,2,1)
|
||||
/obj/effect/gibspawner/generic
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
|
||||
gibamounts = list(2,2,1)
|
||||
|
||||
New()
|
||||
gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list())
|
||||
..()
|
||||
/obj/effect/gibspawner/generic/New()
|
||||
gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list())
|
||||
..()
|
||||
|
||||
human
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/down,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
|
||||
gibamounts = list(1,1,1,1,1,1,1)
|
||||
/obj/effect/gibspawner/human
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/down,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
|
||||
gibamounts = list(1,1,1,1,1,1,1)
|
||||
|
||||
New()
|
||||
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list())
|
||||
gibamounts[6] = pick(0,1,2)
|
||||
..()
|
||||
/obj/effect/gibspawner/human/New()
|
||||
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list())
|
||||
gibamounts[6] = pick(0,1,2)
|
||||
..()
|
||||
|
||||
robot
|
||||
sparks = 1
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/robot/up,/obj/effect/decal/cleanable/blood/gibs/robot/down,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot/limb)
|
||||
gibamounts = list(1,1,1,1,1,1)
|
||||
/obj/effect/gibspawner/robot
|
||||
sparks = 1
|
||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/robot/up,/obj/effect/decal/cleanable/blood/gibs/robot/down,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot/limb)
|
||||
gibamounts = list(1,1,1,1,1,1)
|
||||
|
||||
New()
|
||||
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs)
|
||||
gibamounts[6] = pick(0,1,2)
|
||||
..()
|
||||
/obj/effect/gibspawner/robot/New()
|
||||
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs)
|
||||
gibamounts[6] = pick(0,1,2)
|
||||
..()
|
||||
@@ -0,0 +1,28 @@
|
||||
/obj/effect/graffitispawner
|
||||
name = "old scrawling"
|
||||
icon = 'icons/effects/map_effects.dmi'
|
||||
icon_state = "graffiti"
|
||||
|
||||
var/graffiti_type // The text string for the desired icon state of your graffiti.
|
||||
|
||||
// If the effect's color is not set, it will be chosen at random.
|
||||
var/color_secondary // The hexcode for the desired secondary color of your graffiti. If blank, it will inherit this effect's color.
|
||||
|
||||
/obj/effect/graffitispawner/Initialize()
|
||||
..()
|
||||
|
||||
if(!color)
|
||||
color = rgb(rand(1,255),rand(1,255),rand(1,255))
|
||||
|
||||
if(!color_secondary)
|
||||
color_secondary = color
|
||||
|
||||
if(!graffiti_type)
|
||||
graffiti_type = pick("rune", "graffiti", "left", "right", "up", "down")
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
var/obj/effect/decal/cleanable/crayon/C = new(T, color, color_secondary, graffiti_type)
|
||||
|
||||
C.name = name
|
||||
|
||||
qdel(src)
|
||||
@@ -33,57 +33,57 @@
|
||||
var/nostop = 0 // if 1: will only be stopped by teleporters
|
||||
var/list/affecting = list()
|
||||
|
||||
Trigger(var/atom/A)
|
||||
if(!A || !istype(A, /atom/movable))
|
||||
/obj/effect/step_trigger/thrower/Trigger(var/atom/A)
|
||||
if(!A || !istype(A, /atom/movable))
|
||||
return
|
||||
var/atom/movable/AM = A
|
||||
var/curtiles = 0
|
||||
var/stopthrow = 0
|
||||
for(var/obj/effect/step_trigger/thrower/T in orange(2, src))
|
||||
if(AM in T.affecting)
|
||||
return
|
||||
var/atom/movable/AM = A
|
||||
var/curtiles = 0
|
||||
var/stopthrow = 0
|
||||
for(var/obj/effect/step_trigger/thrower/T in orange(2, src))
|
||||
if(AM in T.affecting)
|
||||
return
|
||||
|
||||
if(ismob(AM))
|
||||
var/mob/M = AM
|
||||
if(immobilize)
|
||||
M.canmove = 0
|
||||
if(ismob(AM))
|
||||
var/mob/M = AM
|
||||
if(immobilize)
|
||||
M.canmove = 0
|
||||
|
||||
affecting.Add(AM)
|
||||
while(AM && !stopthrow)
|
||||
if(tiles)
|
||||
if(curtiles >= tiles)
|
||||
break
|
||||
if(AM.z != src.z)
|
||||
affecting.Add(AM)
|
||||
while(AM && !stopthrow)
|
||||
if(tiles)
|
||||
if(curtiles >= tiles)
|
||||
break
|
||||
if(AM.z != src.z)
|
||||
break
|
||||
|
||||
curtiles++
|
||||
curtiles++
|
||||
|
||||
sleep(speed)
|
||||
sleep(speed)
|
||||
|
||||
// Calculate if we should stop the process
|
||||
if(!nostop)
|
||||
for(var/obj/effect/step_trigger/T in get_step(AM, direction))
|
||||
if(T.stopper && T != src)
|
||||
stopthrow = 1
|
||||
else
|
||||
for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, direction))
|
||||
if(T.stopper)
|
||||
stopthrow = 1
|
||||
// Calculate if we should stop the process
|
||||
if(!nostop)
|
||||
for(var/obj/effect/step_trigger/T in get_step(AM, direction))
|
||||
if(T.stopper && T != src)
|
||||
stopthrow = 1
|
||||
else
|
||||
for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, direction))
|
||||
if(T.stopper)
|
||||
stopthrow = 1
|
||||
|
||||
if(AM)
|
||||
var/predir = AM.dir
|
||||
step(AM, direction)
|
||||
if(!facedir)
|
||||
AM.set_dir(predir)
|
||||
if(AM)
|
||||
var/predir = AM.dir
|
||||
step(AM, direction)
|
||||
if(!facedir)
|
||||
AM.set_dir(predir)
|
||||
|
||||
|
||||
|
||||
affecting.Remove(AM)
|
||||
affecting.Remove(AM)
|
||||
|
||||
if(ismob(AM))
|
||||
var/mob/M = AM
|
||||
if(immobilize)
|
||||
M.canmove = 1
|
||||
if(ismob(AM))
|
||||
var/mob/M = AM
|
||||
if(immobilize)
|
||||
M.canmove = 1
|
||||
|
||||
/* Stops things thrown by a thrower, doesn't do anything */
|
||||
|
||||
@@ -154,11 +154,11 @@
|
||||
var/teleport_y_offset = 0
|
||||
var/teleport_z_offset = 0
|
||||
|
||||
Trigger(var/atom/movable/A)
|
||||
if(teleport_x && teleport_y && teleport_z)
|
||||
if(teleport_x_offset && teleport_y_offset && teleport_z_offset)
|
||||
var/turf/T = locate(rand(teleport_x, teleport_x_offset), rand(teleport_y, teleport_y_offset), rand(teleport_z, teleport_z_offset))
|
||||
A.forceMove(T)
|
||||
/obj/effect/step_trigger/teleporter/random/Trigger(var/atom/movable/A)
|
||||
if(teleport_x && teleport_y && teleport_z)
|
||||
if(teleport_x_offset && teleport_y_offset && teleport_z_offset)
|
||||
var/turf/T = locate(rand(teleport_x, teleport_x_offset), rand(teleport_y, teleport_y_offset), rand(teleport_z, teleport_z_offset))
|
||||
A.forceMove(T)
|
||||
|
||||
/* Teleporter that sends objects stepping on it to a specific landmark. */
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
// #define EMPDEBUG 10
|
||||
|
||||
proc/empulse(turf/epicenter, first_range, second_range, third_range, fourth_range, log=0)
|
||||
/proc/empulse(turf/epicenter, first_range, second_range, third_range, fourth_range, log=0)
|
||||
if(!epicenter) return
|
||||
|
||||
if(!istype(epicenter, /turf))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//TODO: Flash range does nothing currently
|
||||
|
||||
proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, z_transfer = UP|DOWN, shaped)
|
||||
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, z_transfer = UP|DOWN, shaped)
|
||||
var/multi_z_scalar = config.multi_z_explosion_scalar
|
||||
spawn(0)
|
||||
var/start = world.timeofday
|
||||
@@ -107,6 +107,6 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
|
||||
defer_powernet_rebuild = 0
|
||||
return 1
|
||||
|
||||
proc/secondaryexplosion(turf/epicenter, range)
|
||||
/proc/secondaryexplosion(turf/epicenter, range)
|
||||
for(var/turf/tile in range(range, epicenter))
|
||||
tile.ex_act(2)
|
||||
|
||||
@@ -13,7 +13,7 @@ var/list/explosion_turfs = list()
|
||||
var/explosion_in_progress = 0
|
||||
|
||||
|
||||
proc/explosion_rec(turf/epicenter, power)
|
||||
/proc/explosion_rec(turf/epicenter, power)
|
||||
|
||||
var/loopbreak = 0
|
||||
while(explosion_in_progress)
|
||||
|
||||
@@ -269,6 +269,7 @@
|
||||
R.hud_used.update_robot_modules_display()
|
||||
|
||||
/obj/item/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
. = ..()
|
||||
if(istype(W, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = W
|
||||
if(S.use_to_pickup)
|
||||
|
||||
@@ -7,26 +7,17 @@
|
||||
icon_state = "bodybag_folded"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
|
||||
attack_self(mob/user)
|
||||
var/obj/structure/closet/body_bag/R = new /obj/structure/closet/body_bag(user.loc)
|
||||
R.add_fingerprint(user)
|
||||
qdel(src)
|
||||
/obj/item/bodybag/attack_self(mob/user)
|
||||
var/obj/structure/closet/body_bag/R = new /obj/structure/closet/body_bag(user.loc)
|
||||
R.add_fingerprint(user)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/bodybags
|
||||
name = "body bags"
|
||||
desc = "This box contains body bags."
|
||||
icon_state = "bodybags"
|
||||
New()
|
||||
..()
|
||||
new /obj/item/bodybag(src)
|
||||
new /obj/item/bodybag(src)
|
||||
new /obj/item/bodybag(src)
|
||||
new /obj/item/bodybag(src)
|
||||
new /obj/item/bodybag(src)
|
||||
new /obj/item/bodybag(src)
|
||||
new /obj/item/bodybag(src)
|
||||
|
||||
starts_with = list(/obj/item/bodybag = 7)
|
||||
|
||||
/obj/structure/closet/body_bag
|
||||
name = "body bag"
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
if(choice)
|
||||
var/obj/item/device/communicator/chosen_communicator = choice
|
||||
var/mob/observer/dead/O = src
|
||||
var/text_message = sanitize(input(src, "What do you want the message to say?")) as message
|
||||
var/text_message = sanitize(input(src, "What do you want the message to say?") as message)
|
||||
if(text_message && O.exonet)
|
||||
O.exonet.send_message(chosen_communicator.exonet.address, "text", text_message)
|
||||
|
||||
|
||||
@@ -232,7 +232,8 @@
|
||||
var/list/mobs_to_relay = in_range["mobs"]
|
||||
|
||||
for(var/mob/mob in mobs_to_relay)
|
||||
var/message = mob.combine_message(message_pieces, verb, M)
|
||||
var/list/combined = mob.combine_message(message_pieces, verb, M)
|
||||
var/message = combined["formatted"]
|
||||
var/name_used = M.GetVoice()
|
||||
var/rendered = null
|
||||
rendered = "<span class='game say'>[bicon(src)] <span class='name'>[name_used]</span> [message]</span>"
|
||||
|
||||
@@ -454,7 +454,7 @@
|
||||
return
|
||||
|
||||
playsound(src, 'sound/machines/defib_charge.ogg', 50, 0)
|
||||
audible_message("<span class='warning'>\The [src] lets out a steadily rising hum...</span>")
|
||||
audible_message("<span class='warning'>\The [src] lets out a steadily rising hum...</span>", runemessage = "whines")
|
||||
|
||||
if(!do_after(user, chargetime, H))
|
||||
return
|
||||
@@ -521,7 +521,7 @@
|
||||
H.setBrainLoss(brain_damage)
|
||||
|
||||
/obj/item/weapon/shockpaddles/proc/make_announcement(var/message, var/msg_class)
|
||||
audible_message("<b>\The [src]</b> [message]", "\The [src] vibrates slightly.")
|
||||
audible_message("<b>\The [src]</b> [message]", "\The [src] vibrates slightly.", runemessage = "buzz")
|
||||
|
||||
/obj/item/weapon/shockpaddles/emag_act(mob/user)
|
||||
if(safety)
|
||||
|
||||
@@ -31,12 +31,13 @@
|
||||
/obj/item/device/megaphone/proc/do_broadcast(var/mob/living/user, var/message)
|
||||
if(emagged)
|
||||
if(insults)
|
||||
user.audible_message("<B>[user.GetVoice()]</B>[user.GetAltName()] broadcasts, <FONT size=3>\"[pick(insultmsg)]\"</FONT>")
|
||||
var/insult = pick(insultmsg)
|
||||
user.audible_message("<B>[user.GetVoice()]</B>[user.GetAltName()] broadcasts, <FONT size=3>\"[insult]\"</FONT>", runemessage = insult)
|
||||
insults--
|
||||
else
|
||||
to_chat(user, "<span class='warning'>*BZZZZzzzzzt*</span>")
|
||||
else
|
||||
user.audible_message("<B>[user.GetVoice()]</B>[user.GetAltName()] broadcasts, <FONT size=3>\"[message]\"</FONT>")
|
||||
user.audible_message("<B>[user.GetVoice()]</B>[user.GetAltName()] broadcasts, <FONT size=3>\"[message]\"</FONT>", runemessage = message)
|
||||
|
||||
/obj/item/device/megaphone/attack_self(var/mob/living/user)
|
||||
var/message = sanitize(input(user, "Shout a message?", "Megaphone", null) as text)
|
||||
@@ -131,7 +132,8 @@
|
||||
/obj/item/device/megaphone/super/do_broadcast(var/mob/living/user, var/message)
|
||||
if(emagged)
|
||||
if(insults)
|
||||
user.audible_message("<B>[user.GetVoice()]</B>[user.GetAltName()] broadcasts, <FONT size=[broadcast_size] face='[broadcast_font]' color='[broadcast_color]'>\"[pick(insultmsg)]\"</FONT>")
|
||||
var/insult = pick(insultmsg)
|
||||
user.audible_message("<B>[user.GetVoice()]</B>[user.GetAltName()] broadcasts, <FONT size=[broadcast_size] face='[broadcast_font]' color='[broadcast_color]'>\"[insult]\"</FONT>", runemessage = insult)
|
||||
if(broadcast_size >= 11)
|
||||
var/turf/T = get_turf(user)
|
||||
playsound(src, 'sound/items/AirHorn.ogg', 100, 1)
|
||||
@@ -160,4 +162,4 @@
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
user.audible_message("<B>[user.GetVoice()]</B>[user.GetAltName()] broadcasts, <FONT size=[broadcast_size] face='[broadcast_font]' color='[broadcast_color]'>\"[message]\"</FONT>")
|
||||
user.audible_message("<B>[user.GetVoice()]</B>[user.GetAltName()] broadcasts, <FONT size=[broadcast_size] face='[broadcast_font]' color='[broadcast_color]'>\"[message]\"</FONT>", runemessage = message)
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
var/obj/machinery/connectable //Used to connect machinery.
|
||||
var/weakref_wiring //Used to store weak references for integrated circuitry. This is now the Omnitool.
|
||||
toolspeed = 1
|
||||
tool_qualities = list(TOOL_MULTITOOL)
|
||||
|
||||
/obj/item/device/multitool/attack_self(mob/living/user)
|
||||
var/choice = alert("What do you want to do with \the [src]?","Multitool Menu", "Switch Mode", "Clear Buffers", "Cancel")
|
||||
|
||||
@@ -28,13 +28,6 @@ GLOBAL_LIST_BOILERPLATE(all_beacons, /obj/item/device/radio/beacon)
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/device/radio/beacon/bacon //Probably a better way of doing this, I'm lazy.
|
||||
proc/digest_delay()
|
||||
spawn(600)
|
||||
qdel(src)
|
||||
|
||||
|
||||
// SINGULO BEACON SPAWNER
|
||||
|
||||
/obj/item/device/radio/beacon/syndicate
|
||||
|
||||
@@ -148,7 +148,7 @@ var/global/list/default_medbay_channels = list(
|
||||
|
||||
return tgui_interact(user)
|
||||
|
||||
/obj/item/device/radio/ui_interact(mob/user, ui_key, datum/nanoui/ui, force_open, datum/nano_ui/master_ui, datum/topic_state/state)
|
||||
/obj/item/device/radio/ui_interact(mob/user, ui_key, datum/nanoui/ui, force_open, datum/nanoui/master_ui, datum/topic_state/state)
|
||||
log_runtime(EXCEPTION("Warning: [user] attempted to call ui_interact on radio [src] [type]. This is deprecated. Please update the caller to tgui_interact."))
|
||||
|
||||
/obj/item/device/radio/Topic(href, href_list)
|
||||
|
||||
@@ -258,13 +258,13 @@
|
||||
var/playedmessage = mytape.storedinfo[i]
|
||||
if (findtextEx(playedmessage,"*",1,2)) //remove marker for action sounds
|
||||
playedmessage = copytext(playedmessage,2)
|
||||
T.audible_message("<font color=Maroon><B>Tape Recorder</B>: [playedmessage]</font>")
|
||||
T.audible_message("<font color=Maroon><B>Tape Recorder</B>: [playedmessage]</font>", runemessage = playedmessage)
|
||||
|
||||
if(mytape.storedinfo.len < i+1)
|
||||
playsleepseconds = 1
|
||||
sleep(10)
|
||||
T = get_turf(src)
|
||||
T.audible_message("<font color=Maroon><B>Tape Recorder</B>: End of recording.</font>")
|
||||
T.audible_message("<font color=Maroon><B>Tape Recorder</B>: End of recording.</font>", runemessage = "click")
|
||||
break
|
||||
else
|
||||
playsleepseconds = mytape.timestamp[i+1] - mytape.timestamp[i]
|
||||
@@ -272,7 +272,7 @@
|
||||
if(playsleepseconds > 14)
|
||||
sleep(10)
|
||||
T = get_turf(src)
|
||||
T.audible_message("<font color=Maroon><B>Tape Recorder</B>: Skipping [playsleepseconds] seconds of silence</font>")
|
||||
T.audible_message("<font color=Maroon><B>Tape Recorder</B>: Skipping [playsleepseconds] seconds of silence</font>", runemessage = "tape winding")
|
||||
playsleepseconds = 1
|
||||
sleep(10 * playsleepseconds)
|
||||
|
||||
@@ -282,7 +282,7 @@
|
||||
|
||||
if(emagged)
|
||||
var/turf/T = get_turf(src)
|
||||
T.audible_message("<font color=Maroon><B>Tape Recorder</B>: This tape recorder will self-destruct in... Five.</font>")
|
||||
T.audible_message("<font color=Maroon><B>Tape Recorder</B>: This tape recorder will self-destruct in... Five.</font>", runemessage = "beep beep")
|
||||
sleep(10)
|
||||
T = get_turf(src)
|
||||
T.audible_message("<font color=Maroon><B>Tape Recorder</B>: Four.</font>")
|
||||
|
||||
@@ -24,5 +24,6 @@
|
||||
|
||||
var/message = sanitize(input(user,"Choose a message to relay to those around you.") as text|null)
|
||||
if(message)
|
||||
var/obj/item/device/text_to_speech/O = src
|
||||
audible_message("[bicon(O)] \The [O.name] states, \"[message]\"")
|
||||
audible_message("[bicon(src)] \The [src.name] states, \"[message]\"", runemessage = "synthesized speech")
|
||||
if(ismob(loc))
|
||||
loc.audible_message("", runemessage = "\[TTS Voice\] [message]")
|
||||
|
||||
@@ -33,12 +33,12 @@
|
||||
|
||||
if(isnull(insults))
|
||||
playsound(src, 'sound/voice/halt.ogg', 100, 1, vary = 0)
|
||||
user.audible_message("<span class='warning'>[user]'s [name] rasps, \"[use_message]\"</span>", "<span class='warning'>\The [user] holds up \the [name].</span>")
|
||||
user.audible_message("<span class='warning'>[user]'s [name] rasps, \"[use_message]\"</span>", "<span class='warning'>\The [user] holds up \the [name].</span>", runemessage = "\[TTS Voice\] [use_message]")
|
||||
else
|
||||
if(insults > 0)
|
||||
playsound(src, 'sound/voice/binsult.ogg', 100, 1, vary = 0)
|
||||
// Yes, it used to show the transcription of the sound clip. That was a) inaccurate b) immature as shit.
|
||||
user.audible_message("<span class='warning'>[user]'s [name] gurgles something indecipherable and deeply offensive.</span>", "<span class='warning'>\The [user] holds up \the [name].</span>")
|
||||
user.audible_message("<span class='warning'>[user]'s [name] gurgles something indecipherable and deeply offensive.</span>", "<span class='warning'>\The [user] holds up \the [name].</span>", runemessage = "\[TTS Voice\] #&@&^%(*")
|
||||
insults--
|
||||
else
|
||||
to_chat(user, "<span class='danger'>*BZZZZZZZZT*</span>")
|
||||
|
||||
@@ -67,10 +67,10 @@
|
||||
icon_state = "healthhud"
|
||||
icon = 'icons/obj/clothing/glasses.dmi'
|
||||
|
||||
New()
|
||||
..()
|
||||
hud = new /obj/item/clothing/glasses/hud/health(src)
|
||||
return
|
||||
/obj/item/borg/sight/hud/med/New()
|
||||
..()
|
||||
hud = new /obj/item/clothing/glasses/hud/health(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/borg/sight/hud/sec
|
||||
@@ -78,7 +78,7 @@
|
||||
icon_state = "securityhud"
|
||||
icon = 'icons/obj/clothing/glasses.dmi'
|
||||
|
||||
New()
|
||||
..()
|
||||
hud = new /obj/item/clothing/glasses/hud/security(src)
|
||||
return
|
||||
/obj/item/borg/sight/hud/sec/New()
|
||||
..()
|
||||
hud = new /obj/item/clothing/glasses/hud/security(src)
|
||||
return
|
||||
|
||||
@@ -9,75 +9,75 @@
|
||||
var/icon/virtualIcon
|
||||
var/list/bulletholes = list()
|
||||
|
||||
Destroy()
|
||||
// if a target is deleted and associated with a stake, force stake to forget
|
||||
for(var/obj/structure/target_stake/T in view(3,src))
|
||||
if(T.pinned_target == src)
|
||||
T.pinned_target = null
|
||||
T.density = 1
|
||||
break
|
||||
..() // delete target
|
||||
/obj/item/target/Destroy()
|
||||
// if a target is deleted and associated with a stake, force stake to forget
|
||||
for(var/obj/structure/target_stake/T in view(3,src))
|
||||
if(T.pinned_target == src)
|
||||
T.pinned_target = null
|
||||
T.density = 1
|
||||
break
|
||||
..() // delete target
|
||||
|
||||
Moved(atom/old_loc, direction, forced = FALSE)
|
||||
. = ..()
|
||||
// After target moves, check for nearby stakes. If associated, move to target
|
||||
for(var/obj/structure/target_stake/M in view(3,src))
|
||||
if(M.density == 0 && M.pinned_target == src)
|
||||
M.forceMove(loc)
|
||||
/obj/item/target/Moved(atom/old_loc, direction, forced = FALSE)
|
||||
. = ..()
|
||||
// After target moves, check for nearby stakes. If associated, move to target
|
||||
for(var/obj/structure/target_stake/M in view(3,src))
|
||||
if(M.density == 0 && M.pinned_target == src)
|
||||
M.forceMove(loc)
|
||||
|
||||
// This may seem a little counter-intuitive but I assure you that's for a purpose.
|
||||
// Stakes are the ones that carry targets, yes, but in the stake code we set
|
||||
// a stake's density to 0 meaning it can't be pushed anymore. Instead of pushing
|
||||
// the stake now, we have to push the target.
|
||||
// This may seem a little counter-intuitive but I assure you that's for a purpose.
|
||||
// Stakes are the ones that carry targets, yes, but in the stake code we set
|
||||
// a stake's density to 0 meaning it can't be pushed anymore. Instead of pushing
|
||||
// the stake now, we have to push the target.
|
||||
|
||||
|
||||
|
||||
attackby(obj/item/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.remove_fuel(0, user))
|
||||
overlays.Cut()
|
||||
to_chat(usr, "You slice off [src]'s uneven chunks of aluminum and scorch marks.")
|
||||
return
|
||||
/obj/item/target/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.remove_fuel(0, user))
|
||||
overlays.Cut()
|
||||
to_chat(usr, "You slice off [src]'s uneven chunks of aluminum and scorch marks.")
|
||||
return
|
||||
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
// taking pinned targets off!
|
||||
var/obj/structure/target_stake/stake
|
||||
for(var/obj/structure/target_stake/T in view(3,src))
|
||||
if(T.pinned_target == src)
|
||||
stake = T
|
||||
break
|
||||
/obj/item/target/attack_hand(mob/user as mob)
|
||||
// taking pinned targets off!
|
||||
var/obj/structure/target_stake/stake
|
||||
for(var/obj/structure/target_stake/T in view(3,src))
|
||||
if(T.pinned_target == src)
|
||||
stake = T
|
||||
break
|
||||
|
||||
if(stake)
|
||||
if(stake.pinned_target)
|
||||
stake.density = 1
|
||||
density = 0
|
||||
layer = OBJ_LAYER
|
||||
if(stake)
|
||||
if(stake.pinned_target)
|
||||
stake.density = 1
|
||||
density = 0
|
||||
layer = OBJ_LAYER
|
||||
|
||||
loc = user.loc
|
||||
if(ishuman(user))
|
||||
if(!user.get_active_hand())
|
||||
user.put_in_hands(src)
|
||||
to_chat(user, "You take the target out of the stake.")
|
||||
else
|
||||
src.loc = get_turf(user)
|
||||
loc = user.loc
|
||||
if(ishuman(user))
|
||||
if(!user.get_active_hand())
|
||||
user.put_in_hands(src)
|
||||
to_chat(user, "You take the target out of the stake.")
|
||||
else
|
||||
src.loc = get_turf(user)
|
||||
to_chat(user, "You take the target out of the stake.")
|
||||
|
||||
stake.pinned_target = null
|
||||
return
|
||||
stake.pinned_target = null
|
||||
return
|
||||
|
||||
else
|
||||
..()
|
||||
else
|
||||
..()
|
||||
|
||||
syndicate
|
||||
icon_state = "target_s"
|
||||
desc = "A shooting target that looks like a hostile agent."
|
||||
hp = 2600 // i guess syndie targets are sturdier?
|
||||
alien
|
||||
icon_state = "target_q"
|
||||
desc = "A shooting target with a threatening silhouette."
|
||||
hp = 2350 // alium onest too kinda
|
||||
/obj/item/target/syndicate
|
||||
icon_state = "target_s"
|
||||
desc = "A shooting target that looks like a hostile agent."
|
||||
hp = 2600 // i guess syndie targets are sturdier?
|
||||
/obj/item/target/alien
|
||||
icon_state = "target_q"
|
||||
desc = "A shooting target with a threatening silhouette."
|
||||
hp = 2350 // alium onest too kinda
|
||||
|
||||
/obj/item/target/bullet_act(var/obj/item/projectile/Proj)
|
||||
var/p_x = Proj.p_x + pick(0,0,0,0,0,-1,1) // really ugly way of coding "sometimes offset Proj.p_x!"
|
||||
@@ -160,21 +160,21 @@
|
||||
var/b2y1 = 0
|
||||
var/b2y2 = 0
|
||||
|
||||
New(var/obj/item/target/Target, var/pixel_x = 0, var/pixel_y = 0)
|
||||
if(!Target) return
|
||||
/datum/bullethole/New(var/obj/item/target/Target, var/pixel_x = 0, var/pixel_y = 0)
|
||||
if(!Target) return
|
||||
|
||||
// Randomize the first box
|
||||
b1x1 = pixel_x - pick(1,1,1,1,2,2,3,3,4)
|
||||
b1x2 = pixel_x + pick(1,1,1,1,2,2,3,3,4)
|
||||
b1y = pixel_y
|
||||
if(prob(35))
|
||||
b1y += rand(-4,4)
|
||||
// Randomize the first box
|
||||
b1x1 = pixel_x - pick(1,1,1,1,2,2,3,3,4)
|
||||
b1x2 = pixel_x + pick(1,1,1,1,2,2,3,3,4)
|
||||
b1y = pixel_y
|
||||
if(prob(35))
|
||||
b1y += rand(-4,4)
|
||||
|
||||
// Randomize the second box
|
||||
b2x = pixel_x
|
||||
if(prob(35))
|
||||
b2x += rand(-4,4)
|
||||
b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4)
|
||||
b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4)
|
||||
// Randomize the second box
|
||||
b2x = pixel_x
|
||||
if(prob(35))
|
||||
b2x += rand(-4,4)
|
||||
b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4)
|
||||
b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4)
|
||||
|
||||
Target.bulletholes.Add(src)
|
||||
Target.bulletholes.Add(src)
|
||||
|
||||
@@ -164,90 +164,90 @@
|
||||
var/bullets = 5
|
||||
drop_sound = 'sound/items/drop/gun.ogg'
|
||||
|
||||
examine(mob/user)
|
||||
. = ..()
|
||||
if(bullets && get_dist(user, src) <= 2)
|
||||
. += "<span class='notice'>It is loaded with [bullets] foam darts!</span>"
|
||||
/obj/item/toy/crossbow/examine(mob/user)
|
||||
. = ..()
|
||||
if(bullets && get_dist(user, src) <= 2)
|
||||
. += "<span class='notice'>It is loaded with [bullets] foam darts!</span>"
|
||||
|
||||
attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/toy/ammo/crossbow))
|
||||
if(bullets <= 4)
|
||||
user.drop_item()
|
||||
qdel(I)
|
||||
bullets++
|
||||
to_chat(user, "<span class='notice'>You load the foam dart into the crossbow.</span>")
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>It's already fully loaded.</span>")
|
||||
/obj/item/toy/crossbow/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/toy/ammo/crossbow))
|
||||
if(bullets <= 4)
|
||||
user.drop_item()
|
||||
qdel(I)
|
||||
bullets++
|
||||
to_chat(user, "<span class='notice'>You load the foam dart into the crossbow.</span>")
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>It's already fully loaded.</span>")
|
||||
|
||||
|
||||
afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
|
||||
if(!isturf(target.loc) || target == user) return
|
||||
if(flag) return
|
||||
/obj/item/toy/crossbow/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
|
||||
if(!isturf(target.loc) || target == user) return
|
||||
if(flag) return
|
||||
|
||||
if (locate (/obj/structure/table, src.loc))
|
||||
return
|
||||
else if (bullets)
|
||||
var/turf/trg = get_turf(target)
|
||||
var/obj/effect/foam_dart_dummy/D = new/obj/effect/foam_dart_dummy(get_turf(src))
|
||||
bullets--
|
||||
D.icon_state = "foamdart"
|
||||
D.name = "foam dart"
|
||||
playsound(src, 'sound/items/syringeproj.ogg', 50, 1)
|
||||
if (locate (/obj/structure/table, src.loc))
|
||||
return
|
||||
else if (bullets)
|
||||
var/turf/trg = get_turf(target)
|
||||
var/obj/effect/foam_dart_dummy/D = new/obj/effect/foam_dart_dummy(get_turf(src))
|
||||
bullets--
|
||||
D.icon_state = "foamdart"
|
||||
D.name = "foam dart"
|
||||
playsound(src, 'sound/items/syringeproj.ogg', 50, 1)
|
||||
|
||||
for(var/i=0, i<6, i++)
|
||||
if (D)
|
||||
if(D.loc == trg) break
|
||||
step_towards(D,trg)
|
||||
for(var/i=0, i<6, i++)
|
||||
if (D)
|
||||
if(D.loc == trg) break
|
||||
step_towards(D,trg)
|
||||
|
||||
for(var/mob/living/M in D.loc)
|
||||
if(!istype(M,/mob/living)) continue
|
||||
if(M == user) continue
|
||||
for(var/mob/O in viewers(world.view, D))
|
||||
O.show_message(text("<span class='warning'>\The [] was hit by the foam dart!</span>", M), 1)
|
||||
new /obj/item/toy/ammo/crossbow(M.loc)
|
||||
qdel(D)
|
||||
return
|
||||
|
||||
for(var/atom/A in D.loc)
|
||||
if(A == user) continue
|
||||
if(A.density)
|
||||
new /obj/item/toy/ammo/crossbow(A.loc)
|
||||
qdel(D)
|
||||
|
||||
sleep(1)
|
||||
|
||||
spawn(10)
|
||||
if(D)
|
||||
new /obj/item/toy/ammo/crossbow(D.loc)
|
||||
for(var/mob/living/M in D.loc)
|
||||
if(!istype(M,/mob/living)) continue
|
||||
if(M == user) continue
|
||||
for(var/mob/O in viewers(world.view, D))
|
||||
O.show_message(text("<span class='warning'>\The [] was hit by the foam dart!</span>", M), 1)
|
||||
new /obj/item/toy/ammo/crossbow(M.loc)
|
||||
qdel(D)
|
||||
return
|
||||
|
||||
return
|
||||
else if (bullets == 0)
|
||||
user.Weaken(5)
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message(text("<span class='warning'>\The [] realized they were out of ammo and starting scrounging for some!</span>", user), 1)
|
||||
for(var/atom/A in D.loc)
|
||||
if(A == user) continue
|
||||
if(A.density)
|
||||
new /obj/item/toy/ammo/crossbow(A.loc)
|
||||
qdel(D)
|
||||
|
||||
sleep(1)
|
||||
|
||||
spawn(10)
|
||||
if(D)
|
||||
new /obj/item/toy/ammo/crossbow(D.loc)
|
||||
qdel(D)
|
||||
|
||||
return
|
||||
else if (bullets == 0)
|
||||
user.Weaken(5)
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message(text("<span class='warning'>\The [] realized they were out of ammo and starting scrounging for some!</span>", user), 1)
|
||||
|
||||
|
||||
attack(mob/M as mob, mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
/obj/item/toy/crossbow/attack(mob/M as mob, mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
|
||||
// ******* Check
|
||||
|
||||
if (src.bullets > 0 && M.lying)
|
||||
if (src.bullets > 0 && M.lying)
|
||||
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if(O.client)
|
||||
O.show_message(text("<span class='danger'>\The [] casually lines up a shot with []'s head and pulls the trigger!</span>", user, M), 1, "<span class='warning'>You hear the sound of foam against skull</span>", 2)
|
||||
O.show_message(text("<span class='warning'>\The [] was hit in the head by the foam dart!</span>", M), 1)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if(O.client)
|
||||
O.show_message(text("<span class='danger'>\The [] casually lines up a shot with []'s head and pulls the trigger!</span>", user, M), 1, "<span class='warning'>You hear the sound of foam against skull</span>", 2)
|
||||
O.show_message(text("<span class='warning'>\The [] was hit in the head by the foam dart!</span>", M), 1)
|
||||
|
||||
playsound(src, 'sound/items/syringeproj.ogg', 50, 1)
|
||||
new /obj/item/toy/ammo/crossbow(M.loc)
|
||||
src.bullets--
|
||||
else if (M.lying && src.bullets == 0)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if (O.client) O.show_message(text("<span class='danger'>\The [] casually lines up a shot with []'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!</span>", user, M), 1, "<span class='warning'>You hear someone fall</span>", 2)
|
||||
user.Weaken(5)
|
||||
return
|
||||
playsound(src, 'sound/items/syringeproj.ogg', 50, 1)
|
||||
new /obj/item/toy/ammo/crossbow(M.loc)
|
||||
src.bullets--
|
||||
else if (M.lying && src.bullets == 0)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if (O.client) O.show_message(text("<span class='danger'>\The [] casually lines up a shot with []'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!</span>", user, M), 1, "<span class='warning'>You hear someone fall</span>", 2)
|
||||
user.Weaken(5)
|
||||
return
|
||||
|
||||
/obj/item/toy/ammo/crossbow
|
||||
name = "foam dart"
|
||||
@@ -285,21 +285,21 @@
|
||||
w_class = ITEMSIZE_SMALL
|
||||
attack_verb = list("attacked", "struck", "hit")
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
src.active = !( src.active )
|
||||
if (src.active)
|
||||
to_chat(user, "<span class='notice'>You extend the plastic blade with a quick flick of your wrist.</span>")
|
||||
playsound(src, 'sound/weapons/saberon.ogg', 50, 1)
|
||||
src.item_state = "[icon_state]_blade"
|
||||
src.w_class = ITEMSIZE_LARGE
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You push the plastic blade back down into the handle.</span>")
|
||||
playsound(src, 'sound/weapons/saberoff.ogg', 50, 1)
|
||||
src.item_state = "[icon_state]"
|
||||
src.w_class = ITEMSIZE_SMALL
|
||||
update_icon()
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
/obj/item/toy/sword/attack_self(mob/user as mob)
|
||||
src.active = !( src.active )
|
||||
if (src.active)
|
||||
to_chat(user, "<span class='notice'>You extend the plastic blade with a quick flick of your wrist.</span>")
|
||||
playsound(src, 'sound/weapons/saberon.ogg', 50, 1)
|
||||
src.item_state = "[icon_state]_blade"
|
||||
src.w_class = ITEMSIZE_LARGE
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You push the plastic blade back down into the handle.</span>")
|
||||
playsound(src, 'sound/weapons/saberoff.ogg', 50, 1)
|
||||
src.item_state = "[icon_state]"
|
||||
src.w_class = ITEMSIZE_SMALL
|
||||
update_icon()
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/toy/sword/update_icon()
|
||||
. = ..()
|
||||
@@ -365,15 +365,15 @@
|
||||
w_class = ITEMSIZE_TINY
|
||||
drop_sound = null
|
||||
|
||||
throw_impact(atom/hit_atom)
|
||||
..()
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
new /obj/effect/decal/cleanable/ash(src.loc)
|
||||
src.visible_message("<span class='warning'>The [src.name] explodes!</span>","<span class='warning'>You hear a snap!</span>")
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||||
qdel(src)
|
||||
/obj/item/toy/snappop/throw_impact(atom/hit_atom)
|
||||
..()
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
new /obj/effect/decal/cleanable/ash(src.loc)
|
||||
src.visible_message("<span class='warning'>The [src.name] explodes!</span>","<span class='warning'>You hear a snap!</span>")
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/toy/snappop/Crossed(atom/movable/H as mob|obj)
|
||||
if(H.is_incorporeal())
|
||||
|
||||
@@ -293,7 +293,8 @@
|
||||
for(var/wr_master in masters)
|
||||
var/weakref/wr = wr_master
|
||||
var/mob/master = wr.resolve()
|
||||
var/message = master.combine_message(message_pieces, verb, M)
|
||||
var/list/combined = master.combine_message(message_pieces, verb, M)
|
||||
var/message = combined["formatted"]
|
||||
var/rendered = "<i><span class='game say'>UAV received: <span class='name'>[name_used]</span> [message]</span></i>"
|
||||
master.show_message(rendered, 2)
|
||||
|
||||
|
||||
@@ -30,14 +30,14 @@
|
||||
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
|
||||
/datum/autopsy_data/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/obj/item/organ/external/O)
|
||||
if(!O.autopsy_data.len && !O.trace_chemicals.len) return
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
if(wrapped)
|
||||
add_overlay("[initial(icon_state)]_wrapper")
|
||||
|
||||
obj/item/clothing/mask/chewable/Initialize()
|
||||
/obj/item/clothing/mask/chewable/Initialize()
|
||||
. = ..()
|
||||
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
|
||||
@@ -47,7 +47,7 @@ obj/item/clothing/mask/chewable/Initialize()
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
..()
|
||||
|
||||
obj/item/clothing/mask/chewable/Destroy()
|
||||
/obj/item/clothing/mask/chewable/Destroy()
|
||||
. = ..()
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
|
||||
@@ -135,6 +135,9 @@ obj/item/clothing/mask/chewable/Destroy()
|
||||
throwforce = 2
|
||||
slot_flags = SLOT_BELT
|
||||
starts_with = list(/obj/item/clothing/mask/chewable/tobacco = 6)
|
||||
|
||||
/obj/item/weapon/storage/chewables/Initialize()
|
||||
. = ..()
|
||||
make_exact_fit()
|
||||
|
||||
//Tobacco Tins
|
||||
@@ -259,4 +262,4 @@ obj/item/clothing/mask/chewable/Destroy()
|
||||
|
||||
/obj/item/clothing/mask/chewable/candy/pocky/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("chocolate" = 10)
|
||||
reagents.add_reagent("chocolate", 10)
|
||||
@@ -584,10 +584,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
deactivation_sound = 'sound/items/zippo_off.ogg'
|
||||
|
||||
/obj/item/weapon/flame/lighter/random
|
||||
New()
|
||||
icon_state = "lighter-[pick("r","c","y","g")]"
|
||||
item_state = icon_state
|
||||
base_state = icon_state
|
||||
/obj/item/weapon/flame/lighter/random/New()
|
||||
icon_state = "lighter-[pick("r","c","y","g")]"
|
||||
item_state = icon_state
|
||||
base_state = icon_state
|
||||
|
||||
/obj/item/weapon/flame/lighter/attack_self(mob/living/user)
|
||||
if(!base_state)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#error T_BOARD macro is not defined but we need it!
|
||||
#endif
|
||||
|
||||
obj/item/weapon/circuitboard/rdserver
|
||||
/obj/item/weapon/circuitboard/rdserver
|
||||
name = T_BOARD("R&D server")
|
||||
build_path = /obj/machinery/r_n_d/server/core
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
@@ -11,7 +11,7 @@ obj/item/weapon/circuitboard/rdserver
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1)
|
||||
|
||||
obj/item/weapon/circuitboard/rdserver/attackby(obj/item/I as obj, mob/user as mob)
|
||||
/obj/item/weapon/circuitboard/rdserver/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(I.is_screwdriver())
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
user.visible_message("<span class='notice'>\The [user] adjusts the jumper on \the [src]'s access protocol pins.</span>", "<span class='notice'>You adjust the jumper on the access protocol pins.</span>")
|
||||
|
||||
@@ -141,262 +141,240 @@
|
||||
desc = "This will make you big and strong, but give you a bad skin condition."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
New()
|
||||
block = HULKBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/hulkmut/New()
|
||||
block = HULKBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antihulk
|
||||
name = "\improper DNA injector (Anti-Hulk)"
|
||||
desc = "Cures green skin."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 2
|
||||
New()
|
||||
block = HULKBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antihulk/New()
|
||||
block = HULKBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/xraymut
|
||||
name = "\improper DNA injector (Xray)"
|
||||
desc = "Finally you can see what the Site Manager does."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 8
|
||||
New()
|
||||
block = XRAYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/xraymut/New()
|
||||
block = XRAYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antixray
|
||||
name = "\improper DNA injector (Anti-Xray)"
|
||||
desc = "It will make you see harder."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 8
|
||||
New()
|
||||
block = XRAYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antixray/New()
|
||||
block = XRAYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/firemut
|
||||
name = "\improper DNA injector (Fire)"
|
||||
desc = "Gives you fire."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 10
|
||||
New()
|
||||
block = FIREBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/firemut/New()
|
||||
block = FIREBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antifire
|
||||
name = "\improper DNA injector (Anti-Fire)"
|
||||
desc = "Cures fire."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 10
|
||||
New()
|
||||
block = FIREBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antifire/New()
|
||||
block = FIREBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/telemut
|
||||
name = "\improper DNA injector (Tele.)"
|
||||
desc = "Super brain man!"
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 12
|
||||
New()
|
||||
block = TELEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/telemut/New()
|
||||
block = TELEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antitele
|
||||
name = "\improper DNA injector (Anti-Tele.)"
|
||||
desc = "Will make you not able to control your mind."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 12
|
||||
New()
|
||||
block = TELEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antitele/New()
|
||||
block = TELEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/nobreath
|
||||
name = "\improper DNA injector (No Breath)"
|
||||
desc = "Hold your breath and count to infinity."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
New()
|
||||
block = NOBREATHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/nobreath/New()
|
||||
block = NOBREATHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antinobreath
|
||||
name = "\improper DNA injector (Anti-No Breath)"
|
||||
desc = "Hold your breath and count to 100."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 2
|
||||
New()
|
||||
block = NOBREATHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antinobreath/New()
|
||||
block = NOBREATHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/remoteview
|
||||
name = "\improper DNA injector (Remote View)"
|
||||
desc = "Stare into the distance for a reason."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
New()
|
||||
block = REMOTEVIEWBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/remoteview/New()
|
||||
block = REMOTEVIEWBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antiremoteview
|
||||
name = "\improper DNA injector (Anti-Remote View)"
|
||||
desc = "Cures green skin."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 2
|
||||
New()
|
||||
block = REMOTEVIEWBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antiremoteview/New()
|
||||
block = REMOTEVIEWBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/regenerate
|
||||
name = "\improper DNA injector (Regeneration)"
|
||||
desc = "Healthy but hungry."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
New()
|
||||
block = REGENERATEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/regenerate/New()
|
||||
block = REGENERATEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antiregenerate
|
||||
name = "\improper DNA injector (Anti-Regeneration)"
|
||||
desc = "Sickly but sated."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 2
|
||||
New()
|
||||
block = REGENERATEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antiregenerate/New()
|
||||
block = REGENERATEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/runfast
|
||||
name = "\improper DNA injector (Increase Run)"
|
||||
desc = "Running Man."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
New()
|
||||
block = INCREASERUNBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/runfast/New()
|
||||
block = INCREASERUNBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antirunfast
|
||||
name = "\improper DNA injector (Anti-Increase Run)"
|
||||
desc = "Walking Man."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 2
|
||||
New()
|
||||
block = INCREASERUNBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antirunfast/New()
|
||||
block = INCREASERUNBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/morph
|
||||
name = "\improper DNA injector (Morph)"
|
||||
desc = "A total makeover."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
New()
|
||||
block = MORPHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/morph/New()
|
||||
block = MORPHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antimorph
|
||||
name = "\improper DNA injector (Anti-Morph)"
|
||||
desc = "Cures identity crisis."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 2
|
||||
New()
|
||||
block = MORPHBLOCK
|
||||
..()
|
||||
|
||||
/* No COLDBLOCK on bay
|
||||
/obj/item/weapon/dnainjector/cold
|
||||
name = "\improper DNA injector (Cold)"
|
||||
desc = "Feels a bit chilly."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
New()
|
||||
block = COLDBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/anticold
|
||||
name = "\improper DNA injector (Anti-Cold)"
|
||||
desc = "Feels room-temperature."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 2
|
||||
New()
|
||||
block = COLDBLOCK
|
||||
..()
|
||||
*/
|
||||
/obj/item/weapon/dnainjector/antimorph/New()
|
||||
block = MORPHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/noprints
|
||||
name = "\improper DNA injector (No Prints)"
|
||||
desc = "Better than a pair of budget insulated gloves."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
New()
|
||||
block = NOPRINTSBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/noprints/New()
|
||||
block = NOPRINTSBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antinoprints
|
||||
name = "\improper DNA injector (Anti-No Prints)"
|
||||
desc = "Not quite as good as a pair of budget insulated gloves."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 2
|
||||
New()
|
||||
block = NOPRINTSBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antinoprints/New()
|
||||
block = NOPRINTSBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/insulation
|
||||
name = "\improper DNA injector (Shock Immunity)"
|
||||
desc = "Better than a pair of real insulated gloves."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
New()
|
||||
block = SHOCKIMMUNITYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/insulation/New()
|
||||
block = SHOCKIMMUNITYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antiinsulation
|
||||
name = "\improper DNA injector (Anti-Shock Immunity)"
|
||||
desc = "Not quite as good as a pair of real insulated gloves."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 2
|
||||
New()
|
||||
block = SHOCKIMMUNITYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antiinsulation/New()
|
||||
block = SHOCKIMMUNITYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/midgit
|
||||
name = "\improper DNA injector (Small Size)"
|
||||
desc = "Makes you shrink."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
New()
|
||||
block = SMALLSIZEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/midgit/New()
|
||||
block = SMALLSIZEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antimidgit
|
||||
name = "\improper DNA injector (Anti-Small Size)"
|
||||
desc = "Makes you grow. But not too much."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 2
|
||||
New()
|
||||
block = SMALLSIZEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antimidgit/New()
|
||||
block = SMALLSIZEBLOCK
|
||||
..()
|
||||
|
||||
/////////////////////////////////////
|
||||
/obj/item/weapon/dnainjector/antiglasses
|
||||
@@ -404,197 +382,197 @@
|
||||
desc = "Toss away those glasses!"
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 1
|
||||
New()
|
||||
block = GLASSESBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antiglasses/New()
|
||||
block = GLASSESBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/glassesmut
|
||||
name = "\improper DNA injector (Glasses)"
|
||||
desc = "Will make you need dorkish glasses."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 1
|
||||
New()
|
||||
block = GLASSESBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/glassesmut/New()
|
||||
block = GLASSESBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/epimut
|
||||
name = "\improper DNA injector (Epi.)"
|
||||
desc = "Shake shake shake the room!"
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 3
|
||||
New()
|
||||
block = HEADACHEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/epimut/New()
|
||||
block = HEADACHEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antiepi
|
||||
name = "\improper DNA injector (Anti-Epi.)"
|
||||
desc = "Will fix you up from shaking the room."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 3
|
||||
New()
|
||||
block = HEADACHEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antiepi/New()
|
||||
block = HEADACHEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/anticough
|
||||
name = "\improper DNA injector (Anti-Cough)"
|
||||
desc = "Will stop that awful noise."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 5
|
||||
New()
|
||||
block = COUGHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/anticough/New()
|
||||
block = COUGHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/coughmut
|
||||
name = "\improper DNA injector (Cough)"
|
||||
desc = "Will bring forth a sound of horror from your throat."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 5
|
||||
New()
|
||||
block = COUGHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/coughmut/New()
|
||||
block = COUGHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/clumsymut
|
||||
name = "\improper DNA injector (Clumsy)"
|
||||
desc = "Makes clumsy minions."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 6
|
||||
New()
|
||||
block = CLUMSYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/clumsymut/New()
|
||||
block = CLUMSYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/anticlumsy
|
||||
name = "\improper DNA injector (Anti-Clumy)"
|
||||
desc = "Cleans up confusion."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 6
|
||||
New()
|
||||
block = CLUMSYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/anticlumsy/New()
|
||||
block = CLUMSYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antitour
|
||||
name = "\improper DNA injector (Anti-Tour.)"
|
||||
desc = "Will cure tourrets."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 7
|
||||
New()
|
||||
block = TWITCHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antitour/New()
|
||||
block = TWITCHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/tourmut
|
||||
name = "\improper DNA injector (Tour.)"
|
||||
desc = "Gives you a nasty case off tourrets."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 7
|
||||
New()
|
||||
block = TWITCHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/tourmut/New()
|
||||
block = TWITCHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/stuttmut
|
||||
name = "\improper DNA injector (Stutt.)"
|
||||
desc = "Makes you s-s-stuttterrr"
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 9
|
||||
New()
|
||||
block = NERVOUSBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/stuttmut/New()
|
||||
block = NERVOUSBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antistutt
|
||||
name = "\improper DNA injector (Anti-Stutt.)"
|
||||
desc = "Fixes that speaking impairment."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 9
|
||||
New()
|
||||
block = NERVOUSBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antistutt/New()
|
||||
block = NERVOUSBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/blindmut
|
||||
name = "\improper DNA injector (Blind)"
|
||||
desc = "Makes you not see anything."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 11
|
||||
New()
|
||||
block = BLINDBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/blindmut/New()
|
||||
block = BLINDBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antiblind
|
||||
name = "\improper DNA injector (Anti-Blind)"
|
||||
desc = "ITS A MIRACLE!!!"
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 11
|
||||
New()
|
||||
block = BLINDBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antiblind/New()
|
||||
block = BLINDBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/deafmut
|
||||
name = "\improper DNA injector (Deaf)"
|
||||
desc = "Sorry, what did you say?"
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 13
|
||||
New()
|
||||
block = DEAFBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/deafmut/New()
|
||||
block = DEAFBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antideaf
|
||||
name = "\improper DNA injector (Anti-Deaf)"
|
||||
desc = "Will make you hear once more."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 13
|
||||
New()
|
||||
block = DEAFBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antideaf/New()
|
||||
block = DEAFBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/hallucination
|
||||
name = "\improper DNA injector (Halluctination)"
|
||||
desc = "What you see isn't always what you get."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
New()
|
||||
block = HALLUCINATIONBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/hallucination/New()
|
||||
block = HALLUCINATIONBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antihallucination
|
||||
name = "\improper DNA injector (Anti-Hallucination)"
|
||||
desc = "What you see is what you get."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 2
|
||||
New()
|
||||
block = HALLUCINATIONBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/antihallucination/New()
|
||||
block = HALLUCINATIONBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/h2m
|
||||
name = "\improper DNA injector (Human > Monkey)"
|
||||
desc = "Will make you a flea bag."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 14
|
||||
New()
|
||||
block = MONKEYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/h2m/New()
|
||||
block = MONKEYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/m2h
|
||||
name = "\improper DNA injector (Monkey > Human)"
|
||||
desc = "Will make you...less hairy."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 14
|
||||
New()
|
||||
block = MONKEYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/m2h/New()
|
||||
block = MONKEYBLOCK
|
||||
..()
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
/obj/item/weapon/lipstick/random,
|
||||
/obj/item/weapon/grenade/smokebomb,
|
||||
/obj/item/weapon/corncob,
|
||||
/obj/item/weapon/contraband/poster/custom,
|
||||
/obj/item/poster/custom,
|
||||
/obj/item/weapon/book/manual/barman_recipes,
|
||||
/obj/item/weapon/book/manual/chef_recipes,
|
||||
/obj/item/weapon/bikehorn,
|
||||
|
||||
@@ -19,152 +19,144 @@
|
||||
var/mob/living/carbon/occupant = null
|
||||
var/injecting = 0
|
||||
|
||||
proc
|
||||
go_out()
|
||||
put_mob(mob/living/carbon/M as mob)
|
||||
implant(var/mob/M)
|
||||
add_implants()
|
||||
/obj/machinery/implantchair/New()
|
||||
..()
|
||||
add_implants()
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
add_implants()
|
||||
/obj/machinery/implantchair/attack_hand(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
var/health_text = ""
|
||||
if(src.occupant)
|
||||
if(src.occupant.health <= -100)
|
||||
health_text = "<FONT color=red>Dead</FONT>"
|
||||
else if(src.occupant.health < 0)
|
||||
health_text = "<FONT color=red>[round(src.occupant.health,0.1)]</FONT>"
|
||||
else
|
||||
health_text = "[round(src.occupant.health,0.1)]"
|
||||
|
||||
var/dat ="<B>Implanter Status</B><BR>"
|
||||
|
||||
dat +="<B>Current occupant:</B> [src.occupant ? "<BR>Name: [src.occupant]<BR>Health: [health_text]<BR>" : "<FONT color=red>None</FONT>"]<BR>"
|
||||
dat += "<B>Implants:</B> [src.implant_list.len ? "[implant_list.len]" : "<A href='?src=\ref[src];replenish=1'>Replenish</A>"]<BR>"
|
||||
if(src.occupant)
|
||||
dat += "[src.ready ? "<A href='?src=\ref[src];implant=1'>Implant</A>" : "Recharging"]<BR>"
|
||||
user.set_machine(src)
|
||||
user << browse(dat, "window=implant")
|
||||
onclose(user, "implant")
|
||||
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
var/health_text = ""
|
||||
if(src.occupant)
|
||||
if(src.occupant.health <= -100)
|
||||
health_text = "<FONT color=red>Dead</FONT>"
|
||||
else if(src.occupant.health < 0)
|
||||
health_text = "<FONT color=red>[round(src.occupant.health,0.1)]</FONT>"
|
||||
else
|
||||
health_text = "[round(src.occupant.health,0.1)]"
|
||||
|
||||
var/dat ="<B>Implanter Status</B><BR>"
|
||||
|
||||
dat +="<B>Current occupant:</B> [src.occupant ? "<BR>Name: [src.occupant]<BR>Health: [health_text]<BR>" : "<FONT color=red>None</FONT>"]<BR>"
|
||||
dat += "<B>Implants:</B> [src.implant_list.len ? "[implant_list.len]" : "<A href='?src=\ref[src];replenish=1'>Replenish</A>"]<BR>"
|
||||
if(src.occupant)
|
||||
dat += "[src.ready ? "<A href='?src=\ref[src];implant=1'>Implant</A>" : "Recharging"]<BR>"
|
||||
user.set_machine(src)
|
||||
user << browse(dat, "window=implant")
|
||||
onclose(user, "implant")
|
||||
|
||||
|
||||
Topic(href, href_list)
|
||||
if((get_dist(src, usr) <= 1) || istype(usr, /mob/living/silicon/ai))
|
||||
if(href_list["implant"])
|
||||
if(src.occupant)
|
||||
injecting = 1
|
||||
go_out()
|
||||
ready = 0
|
||||
spawn(injection_cooldown)
|
||||
ready = 1
|
||||
|
||||
if(href_list["replenish"])
|
||||
/obj/machinery/implantchair/Topic(href, href_list)
|
||||
if((get_dist(src, usr) <= 1) || istype(usr, /mob/living/silicon/ai))
|
||||
if(href_list["implant"])
|
||||
if(src.occupant)
|
||||
injecting = 1
|
||||
go_out()
|
||||
ready = 0
|
||||
spawn(replenish_cooldown)
|
||||
add_implants()
|
||||
spawn(injection_cooldown)
|
||||
ready = 1
|
||||
|
||||
src.updateUsrDialog()
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
if(href_list["replenish"])
|
||||
ready = 0
|
||||
spawn(replenish_cooldown)
|
||||
add_implants()
|
||||
ready = 1
|
||||
|
||||
|
||||
attackby(var/obj/item/weapon/G as obj, var/mob/user as mob)
|
||||
if(istype(G, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/grab = G
|
||||
if(!ismob(grab.affecting))
|
||||
return
|
||||
if(grab.affecting.has_buckled_mobs())
|
||||
to_chat(user, span("warning", "\The [grab.affecting] has other entities attached to them. Remove them first."))
|
||||
return
|
||||
var/mob/M = grab.affecting
|
||||
if(put_mob(M))
|
||||
qdel(G)
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
|
||||
go_out(var/mob/M)
|
||||
if(!( src.occupant ))
|
||||
return
|
||||
if(M == occupant) // so that the guy inside can't eject himself -Agouri
|
||||
return
|
||||
if (src.occupant.client)
|
||||
src.occupant.client.eye = src.occupant.client.mob
|
||||
src.occupant.client.perspective = MOB_PERSPECTIVE
|
||||
src.occupant.loc = src.loc
|
||||
if(injecting)
|
||||
implant(src.occupant)
|
||||
injecting = 0
|
||||
src.occupant = null
|
||||
icon_state = "implantchair"
|
||||
return
|
||||
|
||||
|
||||
put_mob(mob/living/carbon/M as mob)
|
||||
if(!iscarbon(M))
|
||||
to_chat(usr, "<span class='warning'>\The [src] cannot hold this!</span>")
|
||||
return
|
||||
if(src.occupant)
|
||||
to_chat(usr, "<span class='warning'>\The [src] is already occupied!</span>")
|
||||
return
|
||||
if(M.client)
|
||||
M.client.perspective = EYE_PERSPECTIVE
|
||||
M.client.eye = src
|
||||
M.stop_pulling()
|
||||
M.loc = src
|
||||
src.occupant = M
|
||||
src.add_fingerprint(usr)
|
||||
icon_state = "implantchair_on"
|
||||
return 1
|
||||
|
||||
|
||||
implant(var/mob/M)
|
||||
if (!istype(M, /mob/living/carbon))
|
||||
return
|
||||
if(!implant_list.len) return
|
||||
for(var/obj/item/weapon/implant/loyalty/imp in implant_list)
|
||||
if(!imp) continue
|
||||
if(istype(imp, /obj/item/weapon/implant/loyalty))
|
||||
for (var/mob/O in viewers(M, null))
|
||||
O.show_message("<span class='warning'>\The [M] has been implanted by \the [src].</span>", 1)
|
||||
|
||||
if(imp.handle_implant(M, BP_TORSO))
|
||||
imp.post_implant(M)
|
||||
|
||||
implant_list -= imp
|
||||
break
|
||||
return
|
||||
|
||||
|
||||
add_implants()
|
||||
for(var/i=0, i<src.max_implants, i++)
|
||||
var/obj/item/weapon/implant/loyalty/I = new /obj/item/weapon/implant/loyalty(src)
|
||||
implant_list += I
|
||||
/obj/machinery/implantchair/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob)
|
||||
if(istype(G, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/grab = G
|
||||
if(!ismob(grab.affecting))
|
||||
return
|
||||
if(grab.affecting.has_buckled_mobs())
|
||||
to_chat(user, span("warning", "\The [grab.affecting] has other entities attached to them. Remove them first."))
|
||||
return
|
||||
var/mob/M = grab.affecting
|
||||
if(put_mob(M))
|
||||
qdel(G)
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/implantchair/proc/go_out(var/mob/M)
|
||||
if(!( src.occupant ))
|
||||
return
|
||||
|
||||
verb
|
||||
get_out()
|
||||
set name = "Eject occupant"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
if(usr.stat != 0)
|
||||
return
|
||||
src.go_out(usr)
|
||||
add_fingerprint(usr)
|
||||
return
|
||||
if(M == occupant) // so that the guy inside can't eject himself -Agouri
|
||||
return
|
||||
if (src.occupant.client)
|
||||
src.occupant.client.eye = src.occupant.client.mob
|
||||
src.occupant.client.perspective = MOB_PERSPECTIVE
|
||||
src.occupant.loc = src.loc
|
||||
if(injecting)
|
||||
implant(src.occupant)
|
||||
injecting = 0
|
||||
src.occupant = null
|
||||
icon_state = "implantchair"
|
||||
return
|
||||
|
||||
|
||||
move_inside()
|
||||
set name = "Move Inside"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
if(usr.stat != 0 || stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
put_mob(usr)
|
||||
return
|
||||
/obj/machinery/implantchair/proc/put_mob(mob/living/carbon/M as mob)
|
||||
if(!iscarbon(M))
|
||||
to_chat(usr, "<span class='warning'>\The [src] cannot hold this!</span>")
|
||||
return
|
||||
if(src.occupant)
|
||||
to_chat(usr, "<span class='warning'>\The [src] is already occupied!</span>")
|
||||
return
|
||||
if(M.client)
|
||||
M.client.perspective = EYE_PERSPECTIVE
|
||||
M.client.eye = src
|
||||
M.stop_pulling()
|
||||
M.loc = src
|
||||
src.occupant = M
|
||||
src.add_fingerprint(usr)
|
||||
icon_state = "implantchair_on"
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/implantchair/proc/implant(var/mob/M)
|
||||
if (!istype(M, /mob/living/carbon))
|
||||
return
|
||||
if(!implant_list.len) return
|
||||
for(var/obj/item/weapon/implant/loyalty/imp in implant_list)
|
||||
if(!imp) continue
|
||||
if(istype(imp, /obj/item/weapon/implant/loyalty))
|
||||
for (var/mob/O in viewers(M, null))
|
||||
O.show_message("<span class='warning'>\The [M] has been implanted by \the [src].</span>", 1)
|
||||
|
||||
if(imp.handle_implant(M, BP_TORSO))
|
||||
imp.post_implant(M)
|
||||
|
||||
implant_list -= imp
|
||||
break
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/implantchair/proc/add_implants()
|
||||
for(var/i=0, i<src.max_implants, i++)
|
||||
var/obj/item/weapon/implant/loyalty/I = new /obj/item/weapon/implant/loyalty(src)
|
||||
implant_list += I
|
||||
return
|
||||
|
||||
/obj/machinery/implantchair/verb/get_out()
|
||||
set name = "Eject occupant"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
if(usr.stat != 0)
|
||||
return
|
||||
src.go_out(usr)
|
||||
add_fingerprint(usr)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/implantchair/verb/move_inside()
|
||||
set name = "Move Inside"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
if(usr.stat != 0 || stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
put_mob(usr)
|
||||
return
|
||||
|
||||
@@ -12,87 +12,83 @@
|
||||
var/obj/item/weapon/implantcase/case = null
|
||||
var/broadcasting = null
|
||||
var/listening = 1.0
|
||||
proc
|
||||
/obj/item/weapon/implantpad/proc/update()
|
||||
if (src.case)
|
||||
src.icon_state = "implantpad-1"
|
||||
else
|
||||
src.icon_state = "implantpad-0"
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/implantpad/attack_hand(mob/living/user as mob)
|
||||
if ((src.case && user.item_is_in_hands(src)))
|
||||
user.put_in_active_hand(case)
|
||||
|
||||
src.case.add_fingerprint(user)
|
||||
src.case = null
|
||||
|
||||
src.add_fingerprint(user)
|
||||
update()
|
||||
else
|
||||
return ..()
|
||||
return
|
||||
|
||||
|
||||
update()
|
||||
if (src.case)
|
||||
src.icon_state = "implantpad-1"
|
||||
else
|
||||
src.icon_state = "implantpad-0"
|
||||
/obj/item/weapon/implantpad/attackby(obj/item/weapon/implantcase/C as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(C, /obj/item/weapon/implantcase))
|
||||
if(!( src.case ))
|
||||
user.drop_item()
|
||||
C.loc = src
|
||||
src.case = C
|
||||
else
|
||||
return
|
||||
src.update()
|
||||
return
|
||||
|
||||
|
||||
attack_hand(mob/living/user as mob)
|
||||
if ((src.case && user.item_is_in_hands(src)))
|
||||
user.put_in_active_hand(case)
|
||||
|
||||
src.case.add_fingerprint(user)
|
||||
src.case = null
|
||||
|
||||
src.add_fingerprint(user)
|
||||
update()
|
||||
/obj/item/weapon/implantpad/attack_self(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
var/dat = "<B>Implant Mini-Computer:</B><HR>"
|
||||
if (src.case)
|
||||
if(src.case.imp)
|
||||
if(istype(src.case.imp, /obj/item/weapon/implant))
|
||||
dat += src.case.imp.get_data()
|
||||
if(istype(src.case.imp, /obj/item/weapon/implant/tracking))
|
||||
dat += {"ID (1-100):
|
||||
<A href='byond://?src=\ref[src];tracking_id=-10'>-</A>
|
||||
<A href='byond://?src=\ref[src];tracking_id=-1'>-</A> [case.imp:id]
|
||||
<A href='byond://?src=\ref[src];tracking_id=1'>+</A>
|
||||
<A href='byond://?src=\ref[src];tracking_id=10'>+</A><BR>"}
|
||||
else
|
||||
return ..()
|
||||
dat += "The implant casing is empty."
|
||||
else
|
||||
dat += "Please insert an implant casing!"
|
||||
user << browse(dat, "window=implantpad")
|
||||
onclose(user, "implantpad")
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/implantpad/Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat)
|
||||
return
|
||||
if ((usr.contents.Find(src)) || ((in_range(src, usr) && istype(src.loc, /turf))))
|
||||
usr.set_machine(src)
|
||||
if (href_list["tracking_id"])
|
||||
var/obj/item/weapon/implant/tracking/T = src.case.imp
|
||||
T.id += text2num(href_list["tracking_id"])
|
||||
T.id = min(1000, T.id)
|
||||
T.id = max(1, T.id)
|
||||
|
||||
|
||||
attackby(obj/item/weapon/implantcase/C as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(C, /obj/item/weapon/implantcase))
|
||||
if(!( src.case ))
|
||||
user.drop_item()
|
||||
C.loc = src
|
||||
src.case = C
|
||||
if (istype(src.loc, /mob))
|
||||
attack_self(src.loc)
|
||||
else
|
||||
return
|
||||
src.update()
|
||||
return
|
||||
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
var/dat = "<B>Implant Mini-Computer:</B><HR>"
|
||||
if (src.case)
|
||||
if(src.case.imp)
|
||||
if(istype(src.case.imp, /obj/item/weapon/implant))
|
||||
dat += src.case.imp.get_data()
|
||||
if(istype(src.case.imp, /obj/item/weapon/implant/tracking))
|
||||
dat += {"ID (1-100):
|
||||
<A href='byond://?src=\ref[src];tracking_id=-10'>-</A>
|
||||
<A href='byond://?src=\ref[src];tracking_id=-1'>-</A> [case.imp:id]
|
||||
<A href='byond://?src=\ref[src];tracking_id=1'>+</A>
|
||||
<A href='byond://?src=\ref[src];tracking_id=10'>+</A><BR>"}
|
||||
else
|
||||
dat += "The implant casing is empty."
|
||||
else
|
||||
dat += "Please insert an implant casing!"
|
||||
user << browse(dat, "window=implantpad")
|
||||
onclose(user, "implantpad")
|
||||
return
|
||||
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat)
|
||||
return
|
||||
if ((usr.contents.Find(src)) || ((in_range(src, usr) && istype(src.loc, /turf))))
|
||||
usr.set_machine(src)
|
||||
if (href_list["tracking_id"])
|
||||
var/obj/item/weapon/implant/tracking/T = src.case.imp
|
||||
T.id += text2num(href_list["tracking_id"])
|
||||
T.id = min(1000, T.id)
|
||||
T.id = max(1, T.id)
|
||||
|
||||
if (istype(src.loc, /mob))
|
||||
attack_self(src.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if (M.client)
|
||||
src.attack_self(M)
|
||||
src.add_fingerprint(usr)
|
||||
else
|
||||
usr << browse(null, "window=implantpad")
|
||||
return
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if (M.client)
|
||||
src.attack_self(M)
|
||||
src.add_fingerprint(usr)
|
||||
else
|
||||
usr << browse(null, "window=implantpad")
|
||||
return
|
||||
return
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
obj/item/weapon/chainsaw
|
||||
/obj/item/weapon/chainsaw
|
||||
name = "chainsaw"
|
||||
desc = "Vroom vroom."
|
||||
icon_state = "chainsaw0"
|
||||
@@ -12,7 +12,7 @@ obj/item/weapon/chainsaw
|
||||
var/active_force = 55
|
||||
var/inactive_force = 10
|
||||
|
||||
obj/item/weapon/chainsaw/New()
|
||||
/obj/item/weapon/chainsaw/New()
|
||||
var/datum/reagents/R = new/datum/reagents(max_fuel)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
@@ -20,13 +20,13 @@ obj/item/weapon/chainsaw/New()
|
||||
START_PROCESSING(SSobj, src)
|
||||
..()
|
||||
|
||||
obj/item/weapon/chainsaw/Destroy()
|
||||
/obj/item/weapon/chainsaw/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
if(reagents)
|
||||
qdel(reagents)
|
||||
..()
|
||||
|
||||
obj/item/weapon/chainsaw/proc/turnOn(mob/user as mob)
|
||||
/obj/item/weapon/chainsaw/proc/turnOn(mob/user as mob)
|
||||
if(on) return
|
||||
|
||||
visible_message("You start pulling the string on \the [src].", "[usr] starts pulling the string on the [src].")
|
||||
@@ -49,7 +49,7 @@ obj/item/weapon/chainsaw/proc/turnOn(mob/user as mob)
|
||||
else
|
||||
to_chat(user, "You fumble with the string.")
|
||||
|
||||
obj/item/weapon/chainsaw/proc/turnOff(mob/user as mob)
|
||||
/obj/item/weapon/chainsaw/proc/turnOff(mob/user as mob)
|
||||
if(!on) return
|
||||
to_chat(user, "You switch the gas nozzle on the chainsaw, turning it off.")
|
||||
attack_verb = list("bluntly hit", "beat", "knocked")
|
||||
@@ -60,13 +60,13 @@ obj/item/weapon/chainsaw/proc/turnOff(mob/user as mob)
|
||||
on = 0
|
||||
update_icon()
|
||||
|
||||
obj/item/weapon/chainsaw/attack_self(mob/user as mob)
|
||||
/obj/item/weapon/chainsaw/attack_self(mob/user as mob)
|
||||
if(!on)
|
||||
turnOn(user)
|
||||
else
|
||||
turnOff(user)
|
||||
|
||||
obj/item/weapon/chainsaw/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
|
||||
/obj/item/weapon/chainsaw/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
..()
|
||||
if(on)
|
||||
@@ -98,7 +98,7 @@ obj/item/weapon/chainsaw/afterattack(atom/A as mob|obj|turf|area, mob/user as mo
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Don't move while you're refilling the chainsaw.</span>")
|
||||
|
||||
obj/item/weapon/chainsaw/process()
|
||||
/obj/item/weapon/chainsaw/process()
|
||||
if(!on) return
|
||||
|
||||
if(on)
|
||||
@@ -109,20 +109,20 @@ obj/item/weapon/chainsaw/process()
|
||||
to_chat(usr, "\The [src] sputters to a stop!")
|
||||
turnOff()
|
||||
|
||||
obj/item/weapon/chainsaw/proc/get_fuel()
|
||||
/obj/item/weapon/chainsaw/proc/get_fuel()
|
||||
return reagents.get_reagent_amount("fuel")
|
||||
|
||||
obj/item/weapon/chainsaw/examine(mob/user)
|
||||
/obj/item/weapon/chainsaw/examine(mob/user)
|
||||
. = ..()
|
||||
if(max_fuel && get_dist(user, src) == 0)
|
||||
. += "<span class = 'notice'>The [src] feels like it contains roughtly [get_fuel()] units of fuel left.</span>"
|
||||
|
||||
obj/item/weapon/chainsaw/suicide_act(mob/user)
|
||||
/obj/item/weapon/chainsaw/suicide_act(mob/user)
|
||||
var/datum/gender/TU = gender_datums[user.get_visible_gender()]
|
||||
to_chat(viewers(user), "<span class='danger'>[user] is lying down and pulling the chainsaw into [TU.him], it looks like [TU.he] [TU.is] trying to commit suicide!</span>")
|
||||
return(BRUTELOSS)
|
||||
|
||||
obj/item/weapon/chainsaw/update_icon()
|
||||
/obj/item/weapon/chainsaw/update_icon()
|
||||
if(on)
|
||||
icon_state = "chainsaw1"
|
||||
item_state = "chainsaw1"
|
||||
|
||||
@@ -11,12 +11,11 @@
|
||||
thrown_force_divisor = 1
|
||||
origin_tech = list(TECH_MATERIAL = 1)
|
||||
attack_verb = list("attacked", "stabbed", "poked")
|
||||
sharp = 1
|
||||
edge = 1
|
||||
sharp = TRUE
|
||||
edge = TRUE
|
||||
force_divisor = 0.1 // 6 when wielded with hardness 60 (steel)
|
||||
thrown_force_divisor = 0.25 // 5 when thrown with weight 20 (steel)
|
||||
var/loaded //Descriptive string for currently loaded food object.
|
||||
var/scoop_food = 1
|
||||
var/weakref/loaded //Weakref for currently loaded food object.
|
||||
|
||||
/obj/item/weapon/material/kitchen/utensil/New()
|
||||
..()
|
||||
@@ -25,6 +24,15 @@
|
||||
create_reagents(5)
|
||||
return
|
||||
|
||||
/obj/item/weapon/material/kitchen/utensil/update_icon()
|
||||
. = ..()
|
||||
cut_overlays()
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/eaten = loaded?.resolve()
|
||||
if(eaten)
|
||||
var/image/I = new(icon, "loadedfood")
|
||||
I.color = eaten.filling_color
|
||||
add_overlay(I)
|
||||
|
||||
/obj/item/weapon/material/kitchen/utensil/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M))
|
||||
return ..()
|
||||
@@ -37,30 +45,32 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
if (reagents.total_volume > 0)
|
||||
if (loaded && reagents.total_volume > 0)
|
||||
var/atom/movable/eaten = loaded?.resolve()
|
||||
reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
|
||||
if(M == user)
|
||||
if(!M.can_eat(loaded))
|
||||
return
|
||||
M.visible_message("<span class='notice'>\The [user] eats some [loaded] from \the [src].</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>\The [user] begins to feed \the [M]!</span>")
|
||||
if(!(M.can_force_feed(user, loaded) && do_mob(user, M, 5 SECONDS)))
|
||||
return
|
||||
M.visible_message("<span class='notice'>\The [user] feeds some [loaded] to \the [M] with \the [src].</span>")
|
||||
playsound(src,'sound/items/eatfood.ogg', rand(10,40), 1)
|
||||
overlays.Cut()
|
||||
if(eaten)
|
||||
if(M == user)
|
||||
if(!M.can_eat(eaten))
|
||||
return
|
||||
M.visible_message(SPAN_NOTICE("\The [user] eats some of \the [eaten] with \the [src]."))
|
||||
else
|
||||
user.visible_message(SPAN_WARNING("\The [user] begins to feed \the [M]!"))
|
||||
if(!(M.can_force_feed(user, eaten) && do_mob(user, M, 5 SECONDS)))
|
||||
return
|
||||
M.visible_message(SPAN_NOTICE("\The [user] feeds some of \the [eaten] to \the [M] with \the [src]."))
|
||||
playsound(src,'sound/items/eatfood.ogg', rand(10,40), 1)
|
||||
update_icon()
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You don't have anything on \the [src].</span>") //if we have help intent and no food scooped up DON'T STAB OURSELVES WITH THE FORK
|
||||
to_chat(user, SPAN_WARNING("You don't have anything on \the [src].")) //if we have help intent and no food scooped up DON'T STAB OURSELVES WITH THE FORK
|
||||
return
|
||||
|
||||
/obj/item/weapon/material/kitchen/utensil/fork
|
||||
name = "fork"
|
||||
desc = "It's a fork. Sure is pointy."
|
||||
icon_state = "fork"
|
||||
sharp = 1
|
||||
edge = 0
|
||||
sharp = TRUE
|
||||
edge = FALSE
|
||||
|
||||
/obj/item/weapon/material/kitchen/utensil/fork/plastic
|
||||
default_material = "plastic"
|
||||
@@ -70,8 +80,8 @@
|
||||
desc = "It's a spoon. You can see your own upside-down face in it."
|
||||
icon_state = "spoon"
|
||||
attack_verb = list("attacked", "poked")
|
||||
edge = 0
|
||||
sharp = 0
|
||||
edge = FALSE
|
||||
sharp = FALSE
|
||||
force_divisor = 0.1 //2 when wielded with weight 20 (steel)
|
||||
|
||||
/obj/item/weapon/material/kitchen/utensil/spoon/plastic
|
||||
|
||||
@@ -288,7 +288,9 @@ Protectiveness | Armor %
|
||||
|
||||
/obj/item/weapon/material/armor_plating/insert
|
||||
unbreakable = FALSE
|
||||
|
||||
name = "plate insert"
|
||||
desc = "used to craft armor plates for a plate carrier. Trim with a welder for light armor or add a second for heavy armor"
|
||||
|
||||
/obj/item/weapon/material/armor_plating/attackby(var/obj/O, mob/user)
|
||||
if(istype(O, /obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/S = O
|
||||
|
||||
@@ -18,53 +18,53 @@ var/global/list/cached_icons = list()
|
||||
flags = OPENCONTAINER
|
||||
var/paint_type = "red"
|
||||
|
||||
afterattack(turf/simulated/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(istype(target) && reagents.total_volume > 5)
|
||||
user.visible_message("<span class='warning'>\The [target] has been splashed with something by [user]!</span>")
|
||||
reagents.trans_to_turf(target, 5)
|
||||
else
|
||||
return ..()
|
||||
/obj/item/weapon/reagent_containers/glass/paint/afterattack(turf/simulated/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(istype(target) && reagents.total_volume > 5)
|
||||
user.visible_message("<span class='warning'>\The [target] has been splashed with something by [user]!</span>")
|
||||
reagents.trans_to_turf(target, 5)
|
||||
else
|
||||
return ..()
|
||||
|
||||
New()
|
||||
if(paint_type && length(paint_type) > 0)
|
||||
name = paint_type + " " + name
|
||||
..()
|
||||
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("marker_ink_[paint_type]", volume/5)
|
||||
reagents.handle_reactions()
|
||||
/obj/item/weapon/reagent_containers/glass/paint/New()
|
||||
if(paint_type && length(paint_type) > 0)
|
||||
name = paint_type + " " + name
|
||||
..()
|
||||
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("marker_ink_[paint_type]", volume/5)
|
||||
reagents.handle_reactions()
|
||||
|
||||
red
|
||||
icon_state = "paint_red"
|
||||
paint_type = "red"
|
||||
/obj/item/weapon/reagent_containers/glass/paint/red
|
||||
icon_state = "paint_red"
|
||||
paint_type = "red"
|
||||
|
||||
yellow
|
||||
icon_state = "paint_yellow"
|
||||
paint_type = "yellow"
|
||||
/obj/item/weapon/reagent_containers/glass/paint/yellow
|
||||
icon_state = "paint_yellow"
|
||||
paint_type = "yellow"
|
||||
|
||||
green
|
||||
icon_state = "paint_green"
|
||||
paint_type = "green"
|
||||
/obj/item/weapon/reagent_containers/glass/paint/green
|
||||
icon_state = "paint_green"
|
||||
paint_type = "green"
|
||||
|
||||
blue
|
||||
icon_state = "paint_blue"
|
||||
paint_type = "blue"
|
||||
/obj/item/weapon/reagent_containers/glass/paint/blue
|
||||
icon_state = "paint_blue"
|
||||
paint_type = "blue"
|
||||
|
||||
purple
|
||||
icon_state = "paint_violet"
|
||||
paint_type = "purple"
|
||||
/obj/item/weapon/reagent_containers/glass/paint/purple
|
||||
icon_state = "paint_violet"
|
||||
paint_type = "purple"
|
||||
|
||||
black
|
||||
icon_state = "paint_black"
|
||||
paint_type = "black"
|
||||
/obj/item/weapon/reagent_containers/glass/paint/black
|
||||
icon_state = "paint_black"
|
||||
paint_type = "black"
|
||||
|
||||
white
|
||||
icon_state = "paint_white"
|
||||
paint_type = "white"
|
||||
/obj/item/weapon/reagent_containers/glass/paint/white
|
||||
icon_state = "paint_white"
|
||||
paint_type = "white"
|
||||
|
||||
|
||||
@@ -17,44 +17,44 @@
|
||||
var/icon_broken = "lockbox+b"
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/card/id))
|
||||
if(src.broken)
|
||||
to_chat(user, "<span class='warning'>It appears to be broken.</span>")
|
||||
/obj/item/weapon/storage/lockbox/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/card/id))
|
||||
if(src.broken)
|
||||
to_chat(user, "<span class='warning'>It appears to be broken.</span>")
|
||||
return
|
||||
if(src.allowed(user))
|
||||
src.locked = !( src.locked )
|
||||
if(src.locked)
|
||||
src.icon_state = src.icon_locked
|
||||
to_chat(user, "<span class='notice'>You lock \the [src]!</span>")
|
||||
close_all()
|
||||
return
|
||||
if(src.allowed(user))
|
||||
src.locked = !( src.locked )
|
||||
if(src.locked)
|
||||
src.icon_state = src.icon_locked
|
||||
to_chat(user, "<span class='notice'>You lock \the [src]!</span>")
|
||||
close_all()
|
||||
return
|
||||
else
|
||||
src.icon_state = src.icon_closed
|
||||
to_chat(user, "<span class='notice'>You unlock \the [src]!</span>")
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Access Denied</span>")
|
||||
else if(istype(W, /obj/item/weapon/melee/energy/blade))
|
||||
if(emag_act(INFINITY, user, W, "The locker has been sliced open by [user] with an energy blade!", "You hear metal being sliced and sparks flying."))
|
||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
||||
spark_system.set_up(5, 0, src.loc)
|
||||
spark_system.start()
|
||||
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)
|
||||
playsound(src, "sparks", 50, 1)
|
||||
if(!locked)
|
||||
..()
|
||||
src.icon_state = src.icon_closed
|
||||
to_chat(user, "<span class='notice'>You unlock \the [src]!</span>")
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='warning'>It's locked!</span>")
|
||||
return
|
||||
to_chat(user, "<span class='warning'>Access Denied</span>")
|
||||
else if(istype(W, /obj/item/weapon/melee/energy/blade))
|
||||
if(emag_act(INFINITY, user, W, "The locker has been sliced open by [user] with an energy blade!", "You hear metal being sliced and sparks flying."))
|
||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
||||
spark_system.set_up(5, 0, src.loc)
|
||||
spark_system.start()
|
||||
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)
|
||||
playsound(src, "sparks", 50, 1)
|
||||
if(!locked)
|
||||
..()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>It's locked!</span>")
|
||||
return
|
||||
|
||||
|
||||
show_to(mob/user as mob)
|
||||
if(locked)
|
||||
to_chat(user, "<span class='warning'>It's locked!</span>")
|
||||
else
|
||||
..()
|
||||
return
|
||||
/obj/item/weapon/storage/lockbox/show_to(mob/user as mob)
|
||||
if(locked)
|
||||
to_chat(user, "<span class='warning'>It's locked!</span>")
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/lockbox/emag_act(var/remaining_charges, var/mob/user, var/emag_source, var/visual_feedback = "", var/audible_feedback = "")
|
||||
if(!broken)
|
||||
|
||||
@@ -264,11 +264,11 @@
|
||||
var/obj/item/sample_object
|
||||
var/number
|
||||
|
||||
New(obj/item/sample as obj)
|
||||
if(!istype(sample))
|
||||
qdel(src)
|
||||
sample_object = sample
|
||||
number = 1
|
||||
/datum/numbered_display/New(obj/item/sample as obj)
|
||||
if(!istype(sample))
|
||||
qdel(src)
|
||||
sample_object = sample
|
||||
number = 1
|
||||
|
||||
//This proc determins the size of the inventory to be displayed. Please touch it only if you know what you're doing.
|
||||
/obj/item/weapon/storage/proc/orient2hud(mob/user as mob)
|
||||
|
||||
@@ -73,11 +73,11 @@
|
||||
attack_verb = list("drilled")
|
||||
drop_sound = 'sound/items/drop/accessory.ogg'
|
||||
|
||||
suicide_act(mob/user)
|
||||
var/datum/gender/TU = gender_datums[user.get_visible_gender()]
|
||||
to_chat(viewers(user),pick("<span class='danger'>\The [user] is pressing \the [src] to [TU.his] temple and activating it! It looks like [TU.hes] trying to commit suicide.</span>",
|
||||
"<span class='danger'>\The [user] is pressing \the [src] to [TU.his] chest and activating it! It looks like [TU.hes] trying to commit suicide.</span>"))
|
||||
return (BRUTELOSS)
|
||||
/obj/item/weapon/surgical/surgicaldrill/suicide_act(mob/user)
|
||||
var/datum/gender/TU = gender_datums[user.get_visible_gender()]
|
||||
to_chat(viewers(user),pick("<span class='danger'>\The [user] is pressing \the [src] to [TU.his] temple and activating it! It looks like [TU.hes] trying to commit suicide.</span>",
|
||||
"<span class='danger'>\The [user] is pressing \the [src] to [TU.his] chest and activating it! It looks like [TU.hes] trying to commit suicide.</span>"))
|
||||
return (BRUTELOSS)
|
||||
|
||||
/*
|
||||
* Scalpel
|
||||
@@ -99,12 +99,12 @@
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
drop_sound = 'sound/items/drop/knife.ogg'
|
||||
|
||||
suicide_act(mob/user)
|
||||
var/datum/gender/TU = gender_datums[user.get_visible_gender()]
|
||||
to_chat(viewers(user),pick("<span class='danger'>\The [user] is slitting [TU.his] wrists with the [src.name]! It looks like [TU.hes] trying to commit suicide.</span>", \
|
||||
"<span class='danger'>\The [user] is slitting [TU.his] throat with the [src.name]! It looks like [TU.hes] trying to commit suicide.</span>", \
|
||||
"<span class='danger'>\The [user] is slitting [TU.his] stomach open with the [src.name]! It looks like [TU.hes] trying to commit seppuku.</span>"))
|
||||
return (BRUTELOSS)
|
||||
/obj/item/weapon/surgical/scalpel/suicide_act(mob/user)
|
||||
var/datum/gender/TU = gender_datums[user.get_visible_gender()]
|
||||
to_chat(viewers(user),pick("<span class='danger'>\The [user] is slitting [TU.his] wrists with the [src.name]! It looks like [TU.hes] trying to commit suicide.</span>", \
|
||||
"<span class='danger'>\The [user] is slitting [TU.his] throat with the [src.name]! It looks like [TU.hes] trying to commit suicide.</span>", \
|
||||
"<span class='danger'>\The [user] is slitting [TU.his] stomach open with the [src.name]! It looks like [TU.hes] trying to commit seppuku.</span>"))
|
||||
return (BRUTELOSS)
|
||||
|
||||
/*
|
||||
* Researchable Scalpels
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
#define TANK_MAX_RELEASE_PRESSURE (3*ONE_ATMOSPHERE)
|
||||
#define TANK_DEFAULT_RELEASE_PRESSURE 21
|
||||
#define TANK_IDEAL_PRESSURE 1015 //Arbitrary.
|
||||
|
||||
var/list/global/tank_gauge_cache = list()
|
||||
|
||||
@@ -12,10 +12,10 @@
|
||||
drop_sound = 'sound/items/drop/sword.ogg'
|
||||
pickup_sound = 'sound/items/pickup/sword.ogg'
|
||||
|
||||
suicide_act(mob/user)
|
||||
var/datum/gender/T = gender_datums[user.get_visible_gender()]
|
||||
to_chat(viewers(user),"<span class='danger'>[user] is impaling [T.himself] with the [src.name]! It looks like [T.he] [T.is] trying to commit suicide.</span>")
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
/obj/item/weapon/nullrod/suicide_act(mob/user)
|
||||
var/datum/gender/T = gender_datums[user.get_visible_gender()]
|
||||
to_chat(viewers(user),"<span class='danger'>[user] is impaling [T.himself] with the [src.name]! It looks like [T.he] [T.is] trying to commit suicide.</span>")
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/obj/item/weapon/nullrod/attack(mob/M as mob, mob/living/user as mob) //Paste from old-code to decult with a null rod.
|
||||
|
||||
|
||||
@@ -259,10 +259,8 @@
|
||||
spawn_nothing_percentage = 50
|
||||
/obj/random/contraband/item_to_spawn()
|
||||
return pick(prob(6);/obj/item/weapon/storage/pill_bottle/tramadol,
|
||||
prob(8);/obj/item/weapon/haircomb,
|
||||
prob(4);/obj/item/weapon/storage/pill_bottle/happy,
|
||||
prob(4);/obj/item/weapon/storage/pill_bottle/zoom,
|
||||
prob(10);/obj/item/weapon/contraband/poster/custom,
|
||||
prob(4);/obj/item/weapon/material/butterfly,
|
||||
prob(6);/obj/item/weapon/material/butterflyblade,
|
||||
prob(6);/obj/item/weapon/material/butterflyhandle,
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
if(prob(50))
|
||||
starts_with += /obj/item/weapon/storage/backpack/dufflebag/sec
|
||||
if(prob(30))
|
||||
starts_with += /obj/item/weapon/contraband/poster/nanotrasen
|
||||
starts_with += /obj/item/poster/nanotrasen
|
||||
return ..()
|
||||
|
||||
/obj/structure/closet/secure_closet/security/cargo/Initialize()
|
||||
@@ -269,11 +269,11 @@ GLOBAL_LIST_BOILERPLATE(all_brig_closets, /obj/structure/closet/secure_closet/br
|
||||
anchored = 1
|
||||
|
||||
starts_with = list(
|
||||
/obj/item/weapon/contraband/poster/nanotrasen,
|
||||
/obj/item/weapon/contraband/poster/nanotrasen,
|
||||
/obj/item/weapon/contraband/poster/nanotrasen,
|
||||
/obj/item/weapon/contraband/poster/nanotrasen,
|
||||
/obj/item/weapon/contraband/poster/nanotrasen)
|
||||
/obj/item/poster/nanotrasen,
|
||||
/obj/item/poster/nanotrasen,
|
||||
/obj/item/poster/nanotrasen,
|
||||
/obj/item/poster/nanotrasen,
|
||||
/obj/item/poster/nanotrasen)
|
||||
|
||||
/obj/structure/closet/secure_closet/courtroom
|
||||
name = "courtroom locker"
|
||||
|
||||
@@ -224,10 +224,11 @@
|
||||
destroyed = 1
|
||||
icon_state = "grille-b"
|
||||
density = 0
|
||||
New()
|
||||
..()
|
||||
health = rand(-5, -1) //In the destroyed but not utterly threshold.
|
||||
healthcheck() //Send this to healthcheck just in case we want to do something else with it.
|
||||
|
||||
/obj/structure/grille/broken/New()
|
||||
..()
|
||||
health = rand(-5, -1) //In the destroyed but not utterly threshold.
|
||||
healthcheck() //Send this to healthcheck just in case we want to do something else with it.
|
||||
|
||||
/obj/structure/grille/cult
|
||||
name = "cult grille"
|
||||
|
||||
@@ -46,12 +46,12 @@
|
||||
return
|
||||
|
||||
plant = prepare_icon(emagged ? "emagged" : null)
|
||||
overlays += plant
|
||||
overlays = list(plant)
|
||||
set_light(2)
|
||||
update_use_power(USE_POWER_ACTIVE)
|
||||
|
||||
/obj/machinery/holoplant/proc/deactivate()
|
||||
overlays -= plant
|
||||
overlays.Cut()
|
||||
QDEL_NULL(plant)
|
||||
set_light(0)
|
||||
update_use_power(USE_POWER_OFF)
|
||||
@@ -66,16 +66,16 @@
|
||||
/obj/machinery/holoplant/proc/flicker()
|
||||
interference = TRUE
|
||||
spawn(0)
|
||||
overlays -= plant
|
||||
overlays.Cut()
|
||||
set_light(0)
|
||||
sleep(rand(2,4))
|
||||
overlays += plant
|
||||
overlays = list(plant)
|
||||
set_light(2)
|
||||
sleep(rand(2,4))
|
||||
overlays -= plant
|
||||
overlays.Cut()
|
||||
set_light(0)
|
||||
sleep(rand(2,4))
|
||||
overlays += plant
|
||||
overlays = list(plant)
|
||||
set_light(2)
|
||||
interference = FALSE
|
||||
|
||||
|
||||
@@ -247,9 +247,9 @@
|
||||
icon = 'icons/obj/inflatable.dmi'
|
||||
icon_state = "folded_wall_torn"
|
||||
|
||||
attack_self(mob/user)
|
||||
to_chat(user, "<span class='notice'>The inflatable wall is too torn to be inflated!</span>")
|
||||
add_fingerprint(user)
|
||||
/obj/item/inflatable/torn/attack_self(mob/user)
|
||||
to_chat(user, "<span class='notice'>The inflatable wall is too torn to be inflated!</span>")
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/inflatable/door/torn
|
||||
name = "torn inflatable door"
|
||||
@@ -257,9 +257,9 @@
|
||||
icon = 'icons/obj/inflatable.dmi'
|
||||
icon_state = "folded_door_torn"
|
||||
|
||||
attack_self(mob/user)
|
||||
to_chat(user, "<span class='notice'>The inflatable door is too torn to be inflated!</span>")
|
||||
add_fingerprint(user)
|
||||
/obj/item/inflatable/door/torn/attack_self(mob/user)
|
||||
to_chat(user, "<span class='notice'>The inflatable door is too torn to be inflated!</span>")
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/weapon/storage/briefcase/inflatable
|
||||
name = "inflatable barrier box"
|
||||
@@ -268,13 +268,4 @@
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 7
|
||||
can_hold = list(/obj/item/inflatable)
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/inflatable/door(src)
|
||||
new /obj/item/inflatable/door(src)
|
||||
new /obj/item/inflatable/door(src)
|
||||
new /obj/item/inflatable(src)
|
||||
new /obj/item/inflatable(src)
|
||||
new /obj/item/inflatable(src)
|
||||
new /obj/item/inflatable(src)
|
||||
starts_with = list(/obj/item/inflatable/door = 3, /obj/item/inflatable = 4)
|
||||
|
||||
@@ -253,8 +253,8 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
|
||||
/obj/item/stack/rods{amount = 5},
|
||||
/obj/item/stack/material/steel{amount = 5},
|
||||
/obj/item/stack/material/cardboard{amount = 5},
|
||||
/obj/item/weapon/contraband/poster,
|
||||
/obj/item/weapon/contraband/poster/custom,
|
||||
/obj/item/poster,
|
||||
/obj/item/poster/custom,
|
||||
/obj/item/weapon/newspaper,
|
||||
/obj/item/weapon/paper/crumpled,
|
||||
/obj/item/weapon/paper/crumpled/bloody
|
||||
|
||||
@@ -163,7 +163,7 @@ FLOOR SAFES
|
||||
return
|
||||
|
||||
|
||||
obj/structure/safe/ex_act(severity)
|
||||
/obj/structure/safe/ex_act(severity)
|
||||
return
|
||||
|
||||
//FLOOR SAFES
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
/obj/item/weapon/stock_parts/capacitor/adv = 30,
|
||||
/obj/item/weapon/computer_hardware/network_card/advanced = 20
|
||||
)
|
||||
obj/structure/salvageable/computer/Initialize()
|
||||
/obj/structure/salvageable/computer/Initialize()
|
||||
. = ..()
|
||||
icon_state = "computer[rand(0,7)]"
|
||||
|
||||
@@ -136,7 +136,7 @@ obj/structure/salvageable/computer/Initialize()
|
||||
/obj/item/stack/material/silver{amount = 10} = 30
|
||||
)
|
||||
|
||||
obj/structure/salvageable/implant_container/Initialize()
|
||||
/obj/structure/salvageable/implant_container/Initialize()
|
||||
. = ..()
|
||||
icon_state = "implant_container[rand(0,1)]"
|
||||
|
||||
@@ -164,7 +164,7 @@ obj/structure/salvageable/implant_container/Initialize()
|
||||
/obj/item/weapon/computer_hardware/network_card/advanced = 20
|
||||
)
|
||||
|
||||
obj/structure/salvageable/data/Initialize()
|
||||
/obj/structure/salvageable/data/Initialize()
|
||||
. = ..()
|
||||
icon_state = "data[rand(0,1)]"
|
||||
|
||||
@@ -194,7 +194,7 @@ obj/structure/salvageable/data/Initialize()
|
||||
/obj/item/weapon/computer_hardware/network_card/advanced = 20
|
||||
)
|
||||
|
||||
obj/structure/salvageable/server/Initialize()
|
||||
/obj/structure/salvageable/server/Initialize()
|
||||
. = ..()
|
||||
icon_state = "server[rand(0,1)]"
|
||||
|
||||
@@ -219,7 +219,7 @@ obj/structure/salvageable/server/Initialize()
|
||||
/obj/item/weapon/computer_hardware/hard_drive/advanced = 40
|
||||
)
|
||||
|
||||
obj/structure/salvageable/personal/Initialize()
|
||||
/obj/structure/salvageable/personal/Initialize()
|
||||
. = ..()
|
||||
icon_state = "personal[rand(0,12)]"
|
||||
new /obj/structure/table/reinforced (loc)
|
||||
@@ -234,7 +234,7 @@ obj/structure/salvageable/personal/Initialize()
|
||||
/obj/item/weapon/computer_hardware/hard_drive/cluster = 50
|
||||
)
|
||||
|
||||
obj/structure/salvageable/bliss/Initialize()
|
||||
/obj/structure/salvageable/bliss/Initialize()
|
||||
. = ..()
|
||||
icon_state = "bliss[rand(0,1)]"
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
|
||||
|
||||
// When destroyed by explosions, properly handle contents.
|
||||
obj/structure/ex_act(severity)
|
||||
/obj/structure/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
for(var/atom/movable/AM in contents)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*/
|
||||
|
||||
|
||||
obj/structure/windoor_assembly
|
||||
/obj/structure/windoor_assembly
|
||||
name = "windoor assembly"
|
||||
icon = 'icons/obj/doors/windoor.dmi'
|
||||
icon_state = "l_windoor_assembly01"
|
||||
@@ -27,12 +27,12 @@ obj/structure/windoor_assembly
|
||||
var/state = "01" //How far the door assembly has progressed in terms of sprites
|
||||
var/step = null //How far the door assembly has progressed in terms of steps
|
||||
|
||||
obj/structure/windoor_assembly/secure
|
||||
/obj/structure/windoor_assembly/secure
|
||||
name = "secure windoor assembly"
|
||||
secure = "secure_"
|
||||
icon_state = "l_secure_windoor_assembly01"
|
||||
|
||||
obj/structure/windoor_assembly/New(Loc, start_dir=NORTH, constructed=0)
|
||||
/obj/structure/windoor_assembly/New(Loc, start_dir=NORTH, constructed=0)
|
||||
..()
|
||||
if(constructed)
|
||||
state = "01"
|
||||
@@ -46,7 +46,7 @@ obj/structure/windoor_assembly/New(Loc, start_dir=NORTH, constructed=0)
|
||||
|
||||
update_nearby_tiles(need_rebuild=1)
|
||||
|
||||
obj/structure/windoor_assembly/Destroy()
|
||||
/obj/structure/windoor_assembly/Destroy()
|
||||
density = 0
|
||||
update_nearby_tiles()
|
||||
..()
|
||||
|
||||
Reference in New Issue
Block a user