Merge branch 'master' of https://github.com/bgobandit/-tg-station into boxshit

Conflicts:
	code/modules/clothing/suits/bio.dm
	code/modules/clothing/suits/utility.dm
This commit is contained in:
bgobandit
2015-10-02 00:41:19 -04:00
698 changed files with 23394 additions and 90780 deletions
+2 -2
View File
@@ -76,7 +76,7 @@
if(buckle_mob(M))
if(M == user)
M.visible_message(\
"[M] buckles themself to [src].",\
"<span class='notice'>[M] buckles themself to [src].</span>",\
"<span class='notice'>You buckle yourself to [src].</span>",\
"<span class='italics'>You hear metal clanking.</span>")
else
@@ -90,7 +90,7 @@
if(M)
if(M != user)
M.visible_message(\
"<span class='notice'>[user] unbuckles you from [src].",\
"<span class='notice'>[user] unbuckles [M] from [src].</span>",\
"<span class='notice'>[user] unbuckles you from [src].</span>",\
"<span class='italics'>You hear metal clanking.</span>")
else
+12 -17
View File
@@ -29,7 +29,7 @@
canSmoothWith = list(/obj/structure/alien/resin)
var/health = 200
var/resintype = null
smooth = 1
smooth = SMOOTH_TRUE
/obj/structure/alien/resin/New(location)
@@ -84,11 +84,11 @@
/obj/structure/alien/resin/ex_act(severity, target)
switch(severity)
if(1.0)
if(1)
health -= 150
if(2.0)
if(2)
health -= 100
if(3.0)
if(3)
health -= 50
healthcheck()
@@ -196,21 +196,15 @@
qdel(src)
return
direction_loop:
for(var/dirn in cardinal)
var/turf/T = get_step(src, dirn)
if(!linked_node || get_dist(linked_node, src) > linked_node.node_range)
return
if (!istype(T) || T.density || locate(/obj/structure/alien/weeds) in T || istype(T, /turf/space))
continue
for(var/turf/T in U.GetAtmosAdjacentTurfs())
if(!linked_node || get_dist(linked_node, src) > linked_node.node_range)
return
if (locate(/obj/structure/alien/weeds) in T || istype(T, /turf/space))
continue
for(var/obj/O in T)
if(O.density)
continue direction_loop
new /obj/structure/alien/weeds(T, linked_node)
new /obj/structure/alien/weeds(T, linked_node)
/obj/structure/alien/weeds/ex_act(severity, target)
@@ -224,7 +218,7 @@
else
visible_message("<span class='danger'>[user] has attacked [src] with [I]!</span>")
var/damage = I.force / 4.0
var/damage = I.force / 4
if(istype(I, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = I
if(WT.remove_fuel(0, user))
@@ -315,6 +309,7 @@
anchored = 1
var/health = 100
var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive
layer = MOB_LAYER
/obj/structure/alien/egg/New()
@@ -12,6 +12,8 @@
random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7")
var/list/viruses = list()
blood_DNA = list("UNKNOWN DNA" = "X*")
bloodiness = MAX_SHOE_BLOODINESS
blood_state = BLOOD_STATE_XENO
/obj/effect/decal/cleanable/xenoblood/Destroy()
for(var/datum/disease/D in viruses)
@@ -65,4 +67,4 @@
/obj/effect/decal/cleanable/blood/xtracks
icon_state = "xtracks"
random_icon_states = null
blood_DNA = list("UNKNOWN DNA" = "X*")
blood_DNA = list("UNKNOWN DNA" = "X*")
@@ -10,6 +10,8 @@
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
var/list/viruses = list()
blood_DNA = list()
blood_state = BLOOD_STATE_HUMAN
bloodiness = MAX_SHOE_BLOODINESS
/obj/effect/decal/cleanable/blood/Destroy()
for(var/datum/disease/D in viruses)
@@ -48,6 +50,11 @@
var/list/existing_dirs = list()
blood_DNA = list()
/obj/effect/decal/cleanable/trail_holder/can_bloodcrawl_in()
return 1
/obj/effect/decal/cleanable/blood/gibs
name = "gibs"
desc = "They look bloody and gruesome."
@@ -99,9 +106,90 @@
icon = 'icons/effects/drip.dmi'
icon_state = "1"
random_icon_states = list("1","2","3","4","5")
bloodiness = 0
var/list/drips = list()
/obj/effect/decal/cleanable/blood/drip/New()
..()
spawn(1)
drips |= icon_state
drips |= icon_state
/obj/effect/decal/cleanable/blood/drip/can_bloodcrawl_in()
return 1
//BLOODY FOOTPRINTS
/obj/effect/decal/cleanable/blood/footprints
name = "footprints"
icon = 'icons/effects/footprints.dmi'
icon_state = "nothingwhatsoever"
desc = "where might they lead?"
gender = PLURAL
random_icon_states = null
var/entered_dirs = 0
var/exited_dirs = 0
blood_state = BLOOD_STATE_HUMAN //the icon state to load images from
var/list/shoe_types = list()
/obj/effect/decal/cleanable/blood/footprints/Crossed(atom/movable/O)
if(ishuman(O))
var/mob/living/carbon/human/H = O
var/obj/item/clothing/shoes/S = H.shoes
if(S && S.bloody_shoes[blood_state])
S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0)
entered_dirs|= H.dir
shoe_types |= H.shoes.type
update_icon()
/obj/effect/decal/cleanable/blood/footprints/Uncrossed(atom/movable/O)
if(ishuman(O))
var/mob/living/carbon/human/H = O
var/obj/item/clothing/shoes/S = H.shoes
if(S && S.bloody_shoes[blood_state])
S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0)
exited_dirs|= H.dir
shoe_types |= H.shoes.type
update_icon()
/obj/effect/decal/cleanable/blood/footprints/update_icon()
overlays.Cut()
for(var/Ddir in cardinal)
if(entered_dirs & Ddir)
var/image/I
if(bloody_footprints_cache["entered-[blood_state]-[Ddir]"])
I = bloody_footprints_cache["entered-[blood_state]-[Ddir]"]
else
I = image(icon,"[blood_state]1",dir = Ddir)
bloody_footprints_cache["entered-[blood_state]-[Ddir]"] = I
if(I)
overlays += I
if(exited_dirs & Ddir)
var/image/I
if(bloody_footprints_cache["exited-[blood_state]-[Ddir]"])
I = bloody_footprints_cache["exited-[blood_state]-[Ddir]"]
else
I = image(icon,"[blood_state]2",dir = Ddir)
bloody_footprints_cache["exited-[blood_state]-[Ddir]"] = I
if(I)
overlays += I
alpha = BLOODY_FOOTPRINT_BASE_ALPHA+bloodiness
/obj/effect/decal/cleanable/blood/footprints/examine(mob/user)
. = ..()
if(shoe_types.len)
. += "You recognise the footprints as belonging to:\n"
for(var/shoe in shoe_types)
var/obj/item/clothing/shoes/S = shoe
. += "some <B>[initial(S.name)]</B> \icon[S]\n"
user << .
/obj/effect/decal/cleanable/blood/footprints/can_bloodcrawl_in()
if((blood_state != BLOOD_STATE_OIL) && (blood_state != BLOOD_STATE_NOT_BLOODY))
return 1
return 0
@@ -10,6 +10,8 @@
icon = 'icons/mob/robots.dmi'
icon_state = "gib1"
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7")
blood_state = BLOOD_STATE_OIL
bloodiness = MAX_SHOE_BLOODINESS
/obj/effect/decal/cleanable/robot_debris/proc/streak(list/directions)
spawn (0)
@@ -18,7 +20,6 @@
sleep(3)
if (i > 0)
if (prob(40))
/*var/obj/effect/decal/cleanable/oil/o =*/
new /obj/effect/decal/cleanable/oil/streak(src.loc)
else if (prob(10))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
@@ -34,10 +35,10 @@
random_icon_states = list("gibarm", "gibleg")
/obj/effect/decal/cleanable/robot_debris/up
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibup1","gibup1") //2:7 is close enough to 1:4
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibup1","gibup1")
/obj/effect/decal/cleanable/robot_debris/down
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibdown1","gibdown1") //2:7 is close enough to 1:4
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibdown1","gibdown1")
/obj/effect/decal/cleanable/oil
name = "motor oil"
@@ -50,6 +51,8 @@
icon_state = "floor1"
var/viruses = list()
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
blood_state = BLOOD_STATE_OIL
bloodiness = MAX_SHOE_BLOODINESS
/obj/effect/decal/cleanable/oil/New()
..()
@@ -62,4 +65,4 @@
return ..()
/obj/effect/decal/cleanable/oil/streak
random_icon_states = list("streak1", "streak2", "streak3", "streak4", "streak5")
random_icon_states = list("streak1", "streak2", "streak3", "streak4", "streak5")
+31 -3
View File
@@ -1,5 +1,7 @@
/obj/effect/decal/cleanable
var/list/random_icon_states = list()
var/blood_state = "" //I'm sorry but cleanable/blood code is ass, and so is blood_DNA
var/bloodiness = 0 //0-100, amount of blood in this decal, used for making footprints and affecting the alpha of bloody footprints
/obj/effect/decal/cleanable/New()
if (random_icon_states && length(src.random_icon_states) > 0)
@@ -21,10 +23,10 @@
if(!reagents.total_volume) //scooped up all of it
qdel(src)
return
if(is_hot(W)) //todo: make heating a reagent holder proc
if(W.is_hot()) //todo: make heating a reagent holder proc
if(istype(W, /obj/item/clothing/mask/cigarette)) return
else
var/hotness = is_hot(W)
var/hotness = W.is_hot()
var/added_heat = (hotness / 100)
src.reagents.chem_temp = min(src.reagents.chem_temp + added_heat, hotness)
src.reagents.handle_reactions()
@@ -40,4 +42,30 @@
if(reagents)
reagents.chem_temp += 30
reagents.handle_reactions()
..()
..()
//Add "bloodiness" of this blood's type, to the human's shoes
//This is on /cleanable because fuck this ancient mess
/obj/effect/decal/cleanable/Crossed(atom/movable/O)
if(ishuman(O))
var/mob/living/carbon/human/H = O
if(H.shoes && blood_state && bloodiness)
var/obj/item/clothing/shoes/S = H.shoes
var/add_blood = 0
if(bloodiness >= BLOOD_GAIN_PER_STEP)
add_blood = BLOOD_GAIN_PER_STEP
else
add_blood = bloodiness
bloodiness -= add_blood
S.bloody_shoes[blood_state] = min(MAX_SHOE_BLOODINESS,S.bloody_shoes[blood_state]+add_blood)
S.blood_state = blood_state
update_icon()
H.update_inv_shoes()
/obj/effect/decal/cleanable/proc/can_bloodcrawl_in()
return bloodiness
+274 -381
View File
@@ -1,381 +1,274 @@
//########################## CONTRABAND ;3333333333333333333 -Agouri ###################################################
#define NUM_OF_POSTER_DESIGNS 33 //subtype 0-contraband posters
#define NUM_OF_POSTER_DESIGNS_LEGIT 33 //subtype 1-corporate approved posters
/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. Its vulgar themes have marked it as contraband aboard Nanotrasen space facilities."
icon_state = "rolled_poster"
var/serial_number = 0
var/obj/structure/sign/poster/resulting_poster = null //The poster that will be created is initialised and stored through contraband/poster's constructor
var/subtype = 0
/obj/item/weapon/contraband/poster/New(turf/loc, given_serial = 0)
if(given_serial == 0)
if(subtype == 0)
serial_number = rand(1, NUM_OF_POSTER_DESIGNS)
resulting_poster = new(serial_number,subtype)
if(subtype == 1)
serial_number = rand(1, NUM_OF_POSTER_DESIGNS_LEGIT)
resulting_poster = new(serial_number,subtype)
else
serial_number = given_serial
//We don't give it a resulting_poster because if we called it with a given_serial it means that we're rerolling an already used poster.
name += " - No. [serial_number]"
..(loc)
/*/obj/item/weapon/contraband/poster/attack(mob/M as mob, mob/user as mob)
src.add_fingerprint(user)
if(resulting_poster)
resulting_poster.add_fingerprint(user)
..()*/
/*/obj/item/weapon/contraband/poster/attack(atom/A, mob/user as mob) //This shit is handled through the wall's attackby()
if(istype(A, /turf/simulated/wall))
if(resulting_poster == null)
return
else
var/turf/simulated/wall/W = A
var/check = 0
var/stuff_on_wall = 0
for(var/obj/O in W.contents) //Let's see if it already has a poster on it or too much stuff
if(istype(O,/obj/structure/sign/poster))
check = 1
break
stuff_on_wall++
if(stuff_on_wall == 3)
check = 1
break
if(check)
user << "<span class='notice'>The wall is far too cluttered to place a poster!</span>"
return
resulting_poster.loc = W //Looks like it's uncluttered enough. Place the poster
W.contents += resulting_poster
qdel(src)*/
//############################## 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/ruined = 0
var/subtype = 0
/obj/structure/sign/poster/New(serial,subtype)
serial_number = serial
if(serial_number == loc)
if(subtype == 0)
serial_number = rand(1, NUM_OF_POSTER_DESIGNS) //This is for the mappers that want individual posters without having to use rolled posters.
if(subtype == 1)
serial_number = rand(1, NUM_OF_POSTER_DESIGNS_LEGIT)
if(subtype == 0)
icon_state = "poster[serial_number]"
switch(serial_number)
if(1)
name += " - Free Tonto"
desc += " A framed shred of a much larger flag, colors bled together and faded from age."
if(2)
name += " - Atmosia Declaration of Independence"
desc += " A relic of a failed rebellion."
if(3)
name += " - Fun Police"
desc += " A poster condemning the station's security forces."
if(4)
name += " - Lusty Xeno"
desc += " A heretical poster depicting the titular star of an equally heretical book."
if(5)
name += " - Syndicate Recruitment Poster"
desc += " See the galaxy! Shatter corrupt megacorporations! Join today!"
if(6)
name += " - Clown"
desc += " Honk."
if(7)
name += " - Smoke"
desc += " A poster depicting a carton of cigarettes."
if(8)
name += " - Grey Tide"
desc += " A rebellious poster symbolizing assistant solidarity."
if(9)
name += " - Missing Gloves"
desc += " This poster is about the uproar that followed Nanotrasen's financial cuts towards insulated-glove purchases."
if(10)
name += " - Hacking Guide"
desc += " This poster details the internal workings of the common Nanotrasen airlock."
if(11)
name += " - RIP Badger"
desc += " This poster commemorates the day hundreds of badgers worldwide were sacrificed for the greater good."
if(12)
name += " - Ambrosia Vulgaris"
desc += " This poster is lookin' pretty trippy man."
if(13)
name += " - Donut Corp."
desc += " This poster is an advertisement for Donut Corp."
if(14)
name += " - EAT"
desc += " This poster is advising that you eat."
if(15)
name += " - Tools"
desc += " This poster is an advertisement for tools."
if(16)
name += " - Power"
desc += " A poster all about power."
if(17)
name += " - Power to the People"
desc += " Screw those EDF guys!"
if(18)
name += " - Communist state"
desc += " All hail the Communist party!"
if(19)
name += " - Lamarr"
desc += " This poster depicts Lamarr. Probably made by the Research Director."
if(20)
name += " - Borg Fancy"
desc += " Being fancy can be for any borg, just need a suit."
if(21)
name += " - Borg Fancy v2"
desc += " Borg Fancy, Now only taking the most fancy."
if(22)
name += " - Kosmicheskaya Stantsiya 13 Does Not Exist"
desc += " A poster denying the existence of the derelict station near Space Station 13."
if(23)
name += " - Rebels Unite!"
desc += " A poster telling the viewer to rebel against Nanotrasen."
if(24)
name += " - C-20r Advertisment"
desc += " A poster advertising the Scarborough Arms C-20r."
if(25)
name += " - Have A Puff"
desc += " Who cares about lung cancer when you're high as a kite?"
if(26)
name += " - Revolver Advertisment"
desc += " Because seven shots are all you need."
if(27)
name += " - D-Day Promotional Poster"
desc += " A promotional poster for some rapper."
if(28)
name += " - Syndicate Pistol Advertisment"
desc += " A poster advertising syndicate pistols as being 'Classy as fuck'."
if(29)
name += " - E-sword Rainbow"
desc += " All the colors of bloody murder rainbow."
if(30)
name += " - Red Rum"
desc += " Looking at this poster makes you want to kill."
if(31)
name += " - CC 64K Advertisment"
desc += " The latest portable computer from Comrade Computing, with a whole 64kB of ram!"
if(32)
name += " - Punch Shit"
desc += " Fight things for no reason, like a man!"
if(33)
name += " - The Griffin"
desc += " The Griffin commands you to be the worst you can be. Will you?"
else
name += " - Error (subtype 0 serial_number)"
desc += " This is a bug, please report the circumstances under which you encountered this poster at https://github.com/tgstation/-tg-station/issues."
if(subtype == 1)
icon_state = "poster[serial_number]_legit"
switch(serial_number)
if(1)
name += " - Here for Your Saftey"
desc += " A poster glorifying the station's security force."
if(2)
name += " - Nanotrasen Logo"
desc += " A poster depicting the logo of Nanotrasen."
if(3)
name += " - Cleanliness"
desc += " A poster warning of the dangers of poor hygiene."
if(4)
name += " - Help Others"
desc += " A poster encouraging you to help fellow crewmembers."
if(5)
name += " - Build"
desc += " A poster glorifying the engineering team."
if(6)
name += " - Bless This Spess"
desc += " A poster blessing this area."
if(7)
name += " - Science"
desc += " A poster depicting an atom."
if(8)
name += " - Ian"
desc += " Arf Arf."
if(9)
name += " - Obey"
desc += " A poster instructing the viewer to obey authority."
if(10)
name += " - Walk"
desc += " A poster instructing the viewer to walk instead of running."
if(11)
name += " - State Laws"
desc += " A poster instructing cyborgs to state their laws."
if(12)
name += " - Love Ian"
desc += " Ian is love, Ian is life."
if(13)
name += " - Space Cops"
desc += " A poster advertising the television show Space Cops."
if(14)
name += " - Ue No"
desc += " This thing is all in Japanese."
if(15)
name += " - Get Your LEGS"
desc += " LEGS: Leadership, Experiance, Genius, S(Opportunity)."
if(16)
name += " - Do Not Question"
desc += " A poster instructing the viewer not to ask about things they aren't meant to know."
if(17)
name += " - Work for a Future"
desc += " A poster encouraging you to work for your future, what it is, no one is really sure."
if(18)
name += " - Soft Cap Pop Art"
desc += " A poster reprint of some cheap pop art."
if(19)
name += " - Saftey: Internals"
desc += " A poster instructing the viewer to wear internals in environments where there is no oxygen or the air has been rendered toxic."
if(20)
name += " - Saftey: Eye Protection"
desc += " A poster instructing the viewer to wear eye protection when dealing with chemicals, smoke, or bright lights."
if(21)
name += " - Saftey: Report"
desc += " A poster instructing the viewer to report suspicious activity to the security force."
if(22)
name += " - Report Crimes"
desc += " Report crimes at: 1-800-FUCKING-TERRORISTS or at https://www.sectorthirteen.nt/malconetents."
if(23)
name += " - Ion Rifle"
desc += " A poster displaying an Ion Rifle."
if(24)
name += " - Foam Force Advertisment"
desc += " Foam Force, it's Foam or be Foamed!"
if(25)
name += " - Cohiba Robusto Advertisment"
desc += " Cohiba Robusto, the classy cigar."
if(26)
name += " - 50th Aniversery Vintage Reprint"
desc += " A reprint of a poster from 2504, commemorating the 50th Aniversery of Nanoposters Manufacturing, a subsidary of Nanotrasen."
if(27)
name += " - Fruit Bowl"
desc += " Simple, yet awe inspiring."
if(28)
name += " - NanoPDA 1000 Advertisment"
desc += " A poster advertising the latest PDA from Nanotrasen."
if(29)
name += " - Enlist"
desc += " Enlist in the Nanotrasen Deathsquadron reserves today!"
if(30)
name += " - Nanomichi Advertisment"
desc += " A poster advertising Nanomichi brand audio cassettes."
if(31)
name += " - 12 Gauge"
desc += " A poster boasting about the superiority of 12 gauge shotgun shells."
if(32)
name += " - High-Class Martini"
desc += " I told you to shake it, no stirring"
if(33)
name += " - The Owl"
desc += " The Owl would do his best to protect the station. Will you?"
else
name += " - Error (subtype 1 serial_number)"
desc += " This is a bug, please report the circumstances under which you encountered this poster at https://github.com/NTStation/NTstation13/issues."
..()
/obj/structure/sign/poster/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/wirecutters))
playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1)
if(ruined)
user << "<span class='notice'>You remove the remnants of the poster.</span>"
qdel(src)
else
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)
if(ruined)
return
var/temp_loc = user.loc
switch(alert("Do I want to rip the poster from the wall?","You think...","Yes","No"))
if("Yes")
if( user.loc != temp_loc || ruined )
return
visible_message("[user] rips [src] in a single, decisive motion!" )
playsound(src.loc, '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)
if("No")
return
/obj/structure/sign/poster/proc/roll_and_drop(turf/location)
var/obj/item/weapon/contraband/poster/P = new(src, serial_number)
P.resulting_poster = src
P.loc = location
loc = P
//seperated to reduce code duplication. Moved here for ease of reference and to unclutter r_wall/attackby()
/turf/simulated/wall/proc/place_poster(obj/item/weapon/contraband/poster/P, mob/user)
if(!P.resulting_poster) return
var/stuff_on_wall = 0
for(var/obj/O in contents) //Let's see if it already has a poster on it or too much stuff
if(istype(O,/obj/structure/sign/poster))
user << "<span class='warning'>The wall is far too cluttered to place a poster!</span>"
return
stuff_on_wall++
if(stuff_on_wall == 3)
user << "<span class='warning'>The wall is far too cluttered to place a poster!</span>"
return
user << "<span class='notice'>You start placing the poster on the wall...</span>" //Looks like it's uncluttered enough. Place the poster.
//declaring D because otherwise if P gets 'deconstructed' we lose our reference to P.resulting_poster
var/obj/structure/sign/poster/D = P.resulting_poster
var/temp_loc = user.loc
flick("poster_being_set",D)
D.loc = src
qdel(P) //delete it now to cut down on sanity checks afterwards. Agouri's code supports rerolling it anyway
playsound(D.loc, 'sound/items/poster_being_created.ogg', 100, 1)
sleep(17)
if(!D) return
if(istype(src,/turf/simulated/wall) && user && user.loc == temp_loc) //Let's check if everything is still there
user << "<span class='notice'>You place the poster!</span>"
else
D.roll_and_drop(temp_loc)
return
//Putting non-contraband posters here because everything else here is related to posters anyway. -JS
/obj/item/weapon/contraband/poster/legit
desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. It's contents go through Nanotrasen's strict content guidlines."
icon_state = "rolled_poster_legit"
subtype = 1
//########################## POSTERS ##################################
#define NUM_OF_POSTER_DESIGNS 36 // contraband posters
#define NUM_OF_POSTER_DESIGNS_LEGIT 35 // corporate approved posters
#define POSTERNAME "name"
#define POSTERDESC "desc"
//########################## LISTS OF POSTERS AND DESCS #####################
// please add new posters and names to their respective lists and update constant(s) above
// use the format below, including punctuation, this will become important later
// CONTRABAND
var/global/list/contrabandposters = list(
list(name = "- Free Tonto", desc = " A salvaged shred of a much larger flag, colors bled together and faded from age."),
list(name = "- Atmosia Declaration of Independence", desc = " A relic of a failed rebellion."),
list(name = "- Fun Police", desc = " A poster condemning the station's security forces."),
list(name = "- Lusty Xenomorph", desc = " A heretical poster depicting the titular star of an equally heretical book."),
list(name = "- Syndicate Recruitment", desc = " See the galaxy! Shatter corrupt megacorporations! Join today!"),
list(name = "- Clown", desc = " Honk."),
list(name = "- Smoke", desc = " A poster advertising a rival corporate brand of cigarettes."),
list(name = "- Grey Tide", desc = " A rebellious poster symbolizing assistant solidarity."),
list(name = "- Missing Gloves", desc = " This poster references the uproar that followed Nanotrasen's financial cuts toward insulated-glove purchases."),
list(name = "- Hacking Guide", desc = " This poster details the internal workings of the common Nanotrasen airlock. Sadly, it appears out of date."),
list(name = "- RIP Badger", desc = " This seditious poster references Nanotrasen's genocide of a space station full of badgers."),
list(name = "- Ambrosia Vulgaris", desc = " This poster is lookin' pretty trippy man."),
list(name = "- Donut Corp.", desc = " This poster is an unauthorized advertisement for Donut Corp."),
list(name = "- EAT.", desc = " This poster promotes rank gluttony."),
list(name = "- Tools", desc = " This poster looks like an advertisement for tools, but is in fact a subliminal jab at the tools at CentComm."),
list(name = "- Power", desc = " A poster that positions the seat of power outside Nanotrasen."),
list(name = "- Space Cube", desc = " Ignorant of Nature's Harmonic 6 Side Space Cube Creation, the Spacemen are Dumb, Educated Singularity Stupid and Evil."),
list(name = "- Communist State", desc = " All hail the Communist party!"),
list(name = "- Lamarr", desc = " This poster depicts Lamarr. Probably made by a traitorous Research Director."),
list(name = "- Borg Fancy", desc = " Being fancy can be for any borg, just need a suit."),
list(name = "- Borg Fancy v2", desc = " Borg Fancy, Now only taking the most fancy."),
list(name = "- Kosmicheskaya Stantsiya 13 Does Not Exist", desc = " A poster mocking CentComm's denial of the existence of the derelict station near Space Station 13."),
list(name = "- Rebels Unite", desc = " A poster urging the viewer to rebel against Nanotrasen."),
list(name = "- C-20r", desc = " A poster advertising the Scarborough Arms C-20r."),
list(name = "- Have a Puff", desc = " Who cares about lung cancer when you're high as a kite?"),
list(name = "- Revolver", desc = " Because seven shots are all you need."),
list(name = "- D-Day Promo", desc = " A promotional poster for some rapper."),
list(name = "- Syndicate Pistol", desc = " A poster advertising syndicate pistols as being 'classy as fuck'. It is covered in faded gang tags."),
list(name = "- Energy Swords", desc = " All the colors of the bloody murder rainbow."),
list(name = "- Red Rum", desc = " Looking at this poster makes you want to kill."),
list(name = "- CC 64K Ad", desc = " The latest portable computer from Comrade Computing, with a whole 64kB of ram!"),
list(name = "- Punch Shit", desc = " Fight things for no reason, like a man!"),
list(name = "- The Griffin", desc = " The Griffin commands you to be the worst you can be. Will you?"),
list(name = "- Lizard", desc = " This lewd poster depicts a lizard preparing to mate."),
list(name = "- Free Drone", desc = " This poster commemorates the bravery of the rogue drone banned by CentComm."),
list(name = "- Busty Backdoor Xeno Babes 6", desc = " Get a load, or give, of these all natural Xenos!") )
// LEGIT
var/global/list/legitposters = list(
list(name = "- Here For Your Safety", desc = " A poster glorifying the station's security force."),
list(name = "- Nanotrasen Logo", desc = " A poster depicting the Nanotrasen logo."),
list(name = "- Cleanliness", desc = " A poster warning of the dangers of poor hygiene."),
list(name = "- Help Others", desc = " A poster encouraging you to help fellow crewmembers."),
list(name = "- Build", desc = " A poster glorifying the engineering team."),
list(name = "- Bless This Spess", desc = " A poster blessing this area."),
list(name = "- Science", desc = " A poster depicting an atom."),
list(name = "- Ian", desc = " Arf arf. Yap."),
list(name = "- Obey", desc = " A poster instructing the viewer to obey authority."),
list(name = "- Walk", desc = " A poster instructing the viewer to walk instead of running."),
list(name = "- State Laws", desc = " A poster instructing cyborgs to state their laws."),
list(name = "- Love Ian", desc = " Ian is love, Ian is life."),
list(name = "- Space Cops.", desc = " A poster advertising the television show Space Cops."),
list(name = "- Ue No.", desc = " This thing is all in Japanese."),
list(name = "- Get Your LEGS", desc = " LEGS: Leadership, Experience, Genius, Subordination."),
list(name = "- Do Not Question", desc = " A poster instructing the viewer not to ask about things they aren't meant to know."),
list(name = "- Work For A Future", desc = " A poster encouraging you to work for your future."),
list(name = "- Soft Cap Pop Art", desc = " A poster reprint of some cheap pop art."),
list(name = "- Safety: Internals", desc = " A poster instructing the viewer to wear internals in the rare environments where there is no oxygen or the air has been rendered toxic."),
list(name = "- Safety: Eye Protection", desc = " A poster instructing the viewer to wear eye protection when dealing with chemicals, smoke, or bright lights."),
list(name = "- Safety: Report", desc = " A poster instructing the viewer to report suspicious activity to the security force."),
list(name = "- Report Crimes", desc = " A poster encouraging the swift reporting of crime or seditious behavior to station security."),
list(name = "- Ion Rifle", desc = " A poster displaying an Ion Rifle."),
list(name = "- Foam Force Ad", desc = " Foam Force, it's Foam or be Foamed!"),
list(name = "- Cohiba Robusto Ad", desc = " Cohiba Robusto, the classy cigar."),
list(name = "- 50th Anniversary Vintage Reprint", desc = " A reprint of a poster from 2505, commemorating the 50th Aniversery of Nanoposters Manufacturing, a subsidary of Nanotrasen."),
list(name = "- Fruit Bowl", desc = " Simple, yet awe-inspiring."),
list(name = "- PDA Ad", desc = " A poster advertising the latest PDA from Nanotrasen suppliers."),
list(name = "- Enlist", desc = " Enlist in the Nanotrasen Deathsquadron reserves today!"),
list(name = "- Nanomichi Ad", desc = " A poster advertising Nanomichi brand audio cassettes."),
list(name = "- 12 Gauge", desc = " A poster boasting about the superiority of 12 gauge shotgun shells."),
list(name = "- High-Class Martini", desc = " I told you to shake it, no stirring."),
list(name = "- The Owl", desc = " The Owl would do his best to protect the station. Will you?"),
list(name = "- No ERP", desc = " This poster reminds the crew that Eroticism, Rape and Pornography are banned on Nanotrasen stations."),
list(name = "- Carbon Dioxide", desc = " This informational poster teaches the viewer what carbon dioxide is.") )
//########################## THE ACTUAL POSTER CODE ###########################
/obj/item/weapon/poster
name = "poster"
desc = "You probably shouldn't be holding this."
icon = 'icons/obj/contraband.dmi'
force = 0
burn_state = 0 //Burnable
var/serial_number = 0
var/obj/structure/sign/poster/resulting_poster = null //The poster that will be created is initialised and stored through contraband/poster's constructor
var/official = 0
/obj/item/weapon/poster/contraband
name = "contraband poster"
desc = "This poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. Its vulgar themes have marked it as contraband aboard Nanotrasen space facilities."
icon_state = "rolled_poster"
/obj/item/weapon/poster/legit
name = "motivational poster"
icon_state = "rolled_legit"
desc = "An official Nanotrasen-issued poster to foster a compliant and obedient workforce. It comes with state-of-the-art adhesive backing, for easy pinning to any vertical surface."
official = 1
/obj/item/weapon/poster/New(turf/loc, given_serial = 0)
if(given_serial == 0)
if(!official)
serial_number = rand(1, NUM_OF_POSTER_DESIGNS)
resulting_poster = new(serial_number,official)
else
serial_number = rand(1, NUM_OF_POSTER_DESIGNS_LEGIT)
resulting_poster = new(serial_number,official)
else
serial_number = given_serial
//We don't give it a resulting_poster because if we called it with a given_serial it means that we're rerolling an already used poster.
name += " - No. [serial_number]"
..(loc)
/*/obj/item/weapon/contraband/poster/attack(mob/M as mob, mob/user as mob)
src.add_fingerprint(user)
if(resulting_poster)
resulting_poster.add_fingerprint(user)
..()*/
/*/obj/item/weapon/contraband/poster/attack(atom/A, mob/user as mob) //This shit is handled through the wall's attackby()
if(istype(A, /turf/simulated/wall))
if(resulting_poster == null)
return
else
var/turf/simulated/wall/W = A
var/check = 0
var/stuff_on_wall = 0
for(var/obj/O in W.contents) //Let's see if it already has a poster on it or too much stuff
if(istype(O,/obj/structure/sign/poster))
check = 1
break
stuff_on_wall++
if(stuff_on_wall == 3)
check = 1
break
if(check)
user << "<span class='notice'>The wall is far too cluttered to place a poster!</span>"
return
resulting_poster.loc = W //Looks like it's uncluttered enough. Place the poster
W.contents += resulting_poster
qdel(src)*/
//############################## 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/ruined = 0
var/official = 0
var/placespeed = 37 // don't change this, otherwise the animation will not sync to the progress bar
/obj/structure/sign/poster/New(serial,rolled_official)
serial_number = serial
official = rolled_official
if(serial_number == loc)
if(!official)
serial_number = rand(1, NUM_OF_POSTER_DESIGNS) //This is for the mappers that want individual posters without having to use rolled posters.
if(official)
serial_number = rand(1, NUM_OF_POSTER_DESIGNS_LEGIT)
if(!official)
icon_state = "poster[serial_number]"
name += contrabandposters[serial_number][POSTERNAME]
desc += contrabandposters[serial_number][POSTERDESC]
else if (official)
icon_state = "poster[serial_number]_legit"
name += legitposters[serial_number][POSTERNAME]
desc += legitposters[serial_number][POSTERDESC]
..()
/obj/structure/sign/poster/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/wirecutters))
playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1)
if(ruined)
user << "<span class='notice'>You remove the remnants of the poster.</span>"
qdel(src)
else
user << "<span class='notice'>You carefully remove the poster from the wall.</span>"
roll_and_drop(user.loc, official)
return
/obj/structure/sign/poster/attack_hand(mob/user)
if(ruined)
return
var/temp_loc = user.loc
if((user.loc != temp_loc) || ruined )
return
visible_message("[user] rips [src] in a single, decisive motion!" )
playsound(src.loc, '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/location, official)
if (!official)
var/obj/item/weapon/poster/contraband/P = new(src, serial_number)
P.resulting_poster = src
P.loc = location
loc = P
else
var/obj/item/weapon/poster/legit/P = new(src, serial_number)
P.resulting_poster = src
P.loc = location
loc = P
//seperated to reduce code duplication. Moved here for ease of reference and to unclutter r_wall/attackby()
/turf/simulated/wall/proc/place_poster(obj/item/weapon/poster/P, mob/user)
if(!P.resulting_poster) return
var/stuff_on_wall = 0
for(var/obj/O in contents) //Let's see if it already has a poster on it or too much stuff
if(istype(O,/obj/structure/sign/poster))
user << "<span class='warning'>The wall is far too cluttered to place a poster!</span>"
return
stuff_on_wall++
if(stuff_on_wall == 3)
user << "<span class='warning'>The wall is far too cluttered to place a poster!</span>"
return
user << "<span class='notice'>You start placing the poster on the wall...</span>" //Looks like it's uncluttered enough. Place the poster.
//declaring D because otherwise if P gets 'deconstructed' we lose our reference to P.resulting_poster
var/obj/structure/sign/poster/D = P.resulting_poster
var/temp_loc = user.loc
flick("poster_being_set",D)
D.loc = src
D.official = P.official
qdel(P) //delete it now to cut down on sanity checks afterwards. Agouri's code supports rerolling it anyway
playsound(D.loc, 'sound/items/poster_being_created.ogg', 100, 1)
if(do_after(user,D.placespeed,target=src))
if(!D) return
if(istype(src,/turf/simulated/wall) && user && user.loc == temp_loc) //Let's check if everything is still there
user << "<span class='notice'>You place the poster!</span>"
else
D.roll_and_drop(temp_loc,D.official)
return
@@ -13,7 +13,14 @@ would spawn and follow the beaker, even if it is carried or thrown.
unacidable = 1//So effect are not targeted by alien acid.
pass_flags = PASSTABLE | PASSGRILLE
/obj/effect/effect/New()
..()
if(ticker)
cameranet.updateVisibility(src)
/obj/effect/effect/Destroy()
if(ticker)
cameranet.updateVisibility(src)
..()
return QDEL_HINT_PUTINPOOL
/*
@@ -9,7 +9,7 @@
/obj/effect/effect/ion_trails
name = "ion trails"
icon_state = "ion_trails"
anchored = 1.0
anchored = 1
/datum/effect/effect/system/ion_trail_follow
var/turf/oldposition
@@ -8,8 +8,8 @@
/obj/effect/effect/sparks
name = "sparks"
icon_state = "sparks"
var/amount = 6.0
anchored = 1.0
var/amount = 6
anchored = 1
mouse_opacity = 0
/obj/effect/effect/sparks/New()
@@ -4,7 +4,7 @@
name = "water"
icon = 'icons/effects/effects.dmi'
icon_state = "extinguish"
var/life = 15.0
var/life = 15
mouse_opacity = 0
+1 -1
View File
@@ -3,7 +3,7 @@
name = "FORCEWALL"
icon = 'icons/effects/effects.dmi'
icon_state = "m_shield"
anchored = 1.0
anchored = 1
opacity = 0
density = 1
unacidable = 1
+3 -3
View File
@@ -119,14 +119,14 @@
/obj/effect/glowshroom/ex_act(severity, target)
switch(severity)
if(1.0)
if(1)
qdel(src)
return
if(2.0)
if(2)
if (prob(50))
qdel(src)
return
if(3.0)
if(3)
if (prob(5))
qdel(src)
return
+2 -2
View File
@@ -2,7 +2,7 @@
name = "landmark"
icon = 'icons/mob/screen_gen.dmi'
icon_state = "x2"
anchored = 1.0
anchored = 1
unacidable = 1
/obj/effect/landmark/New()
@@ -72,7 +72,7 @@
name = "start"
icon = 'icons/mob/screen_gen.dmi'
icon_state = "x"
anchored = 1.0
anchored = 1
/obj/effect/landmark/start/New()
..()
+1 -1
View File
@@ -7,7 +7,7 @@
unacidable = 1//Can't destroy energy portals.
var/obj/item/target = null
var/creator = null
anchored = 1.0
anchored = 1
var/precision = 1 // how close to the portal you will teleport. 0 = on the portal, 1 = adjacent
/obj/effect/portal/Bumped(mob/M as mob|obj)
@@ -92,7 +92,8 @@
/obj/item/clothing/head/cone = 1,
/obj/item/weapon/coin/silver = 1,
/obj/item/weapon/coin/twoheaded = 1,
/obj/item/weapon/contraband/poster = 1,
/obj/item/weapon/poster/contraband = 1,
/obj/item/weapon/poster/legit = 1,
/obj/item/weapon/crowbar = 1,
/obj/item/weapon/crowbar/red = 1,
/obj/item/weapon/extinguisher = 11,
+5 -5
View File
@@ -10,12 +10,12 @@
//similar to weeds, but only barfed out by nurses manually
/obj/effect/spider/ex_act(severity, target)
switch(severity)
if(1.0)
if(1)
qdel(src)
if(2.0)
if(2)
if (prob(50))
qdel(src)
if(3.0)
if(3)
if (prob(5))
qdel(src)
return
@@ -26,7 +26,7 @@
else
visible_message("<span class='danger'>[user] has attacked \the [src] with \the [W]!</span>")
var/damage = W.force / 4.0
var/damage = W.force / 4
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
@@ -139,7 +139,7 @@
else if(entry_vent)
if(get_dist(src, entry_vent) <= 1)
var/list/vents = list()
var/datum/pipeline/entry_vent_parent = entry_vent.parents["p1"]
var/datum/pipeline/entry_vent_parent = entry_vent.PARENT1
for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in entry_vent_parent.other_atmosmch)
vents.Add(temp_vent)
if(!vents.len)
+21 -10
View File
@@ -7,13 +7,18 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
var/lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
var/righthand_file = 'icons/mob/inhands/items_righthand.dmi'
//Dimensions of the lefthand_file and righthand_file vars
//eg: 32x32 sprite, 64x64 sprite, etc.
var/inhand_x_dimension = 32
var/inhand_y_dimension = 32
//Not on /clothing because for some reason any /obj/item can technically be "worn" with enough fuckery.
var/icon/alternate_worn_icon = null//If this is set, update_icons() will find on mob (WORN, NOT INHANDS) states in this file instead, primary use: badminnery/events
var/alternate_worn_layer = null//If this is set, update_icons() will force the on mob state (WORN, NOT INHANDS) onto this layer, instead of it's default
var/hitsound = null
var/throwhitsound = null
var/w_class = 3.0
var/w_class = 3
var/slot_flags = 0 //This is used to determine on which slots an item can fit.
pass_flags = PASSTABLE
pressure_resistance = 3
@@ -84,6 +89,8 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
)
var/flags_cover = 0 //for flags such as GLASSESCOVERSEYES
var/heat = 0
var/sharpness = IS_BLUNT
/obj/item/proc/check_allowed_items(atom/target, not_inside, target_self)
if(((src in target) && !target_self) || ((!istype(target.loc, /turf)) && (!istype(target, /turf)) && (not_inside)) || is_type_in_list(target, can_be_placed_into))
@@ -138,17 +145,17 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
..()
var/size
switch(src.w_class)
if(1.0)
if(1)
size = "tiny"
if(2.0)
if(2)
size = "small"
if(3.0)
if(3)
size = "normal-sized"
if(4.0)
if(4)
size = "bulky"
if(5.0)
if(5)
size = "huge"
if(6.0)
if(6)
size = "gigantic"
else
//if ((CLUMSY in usr.mutations) && prob(50)) t = "funny-looking"
@@ -189,9 +196,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
if (loc == user)
if(!user.unEquip(src))
return
else
if(isliving(loc))
return
pickup(user)
add_fingerprint(user)
user.put_in_active_hand(src)
@@ -491,3 +496,9 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
S.remove_from_storage(src,newLoc)
return 1
return 0
/obj/item/proc/is_hot()
return heat
/obj/item/proc/is_sharp()
return sharpness
+1
View File
@@ -39,6 +39,7 @@
var/tagged = 0 // so closet code knows to put the tag overlay back
density = 0
mob_storage_capacity = 2
open_sound = 'sound/items/zip.ogg'
/obj/structure/closet/body_bag/attackby(obj/item/I, mob/user, params)
+4
View File
@@ -8,6 +8,7 @@
w_class = 1
var/wax = 200
var/lit = 0
heat = 1000
proc
light(var/flavor_text = "<span class='danger'>[usr] lights the [name].</span>")
@@ -95,4 +96,7 @@
user.AddLuminosity(-CANDLE_LUMINOSITY)
SetLuminosity(CANDLE_LUMINOSITY)
/obj/item/candle/is_hot()
return lit * heat
#undef CANDLE_LUMINOSITY
+18 -1
View File
@@ -91,7 +91,7 @@
desc = "A box of crayons for all your rune drawing needs."
icon = 'icons/obj/crayons.dmi'
icon_state = "crayonbox"
w_class = 2.0
w_class = 2
storage_slots = 6
can_hold = list(
/obj/item/toy/crayon
@@ -134,6 +134,23 @@
edible = 0
validSurfaces = list(/turf/simulated/floor,/turf/simulated/wall)
/obj/item/toy/crayon/spraycan/suicide_act(mob/user)
var/mob/living/carbon/human/H = user
if(capped)
user.visible_message("<span class='suicide'>[user] shakes up the [src] with a rattle and lifts it to their mouth, but nothing happens! Maybe they should have uncapped it first! Nonetheless--</span>")
user.say("MEDIOCRE!!")
else
user.visible_message("<span class='suicide'>[user] shakes up the [src] with a rattle and lifts it to their mouth, spraying silver paint across their teeth!</span>")
user.say("WITNESS ME!!")
playsound(loc, 'sound/effects/spray.ogg', 5, 1, 5)
colour = "#C0C0C0"
update_icon()
H.lip_style = "spray_face"
H.lip_color = colour
H.update_body()
uses = max(0, uses - 10)
return (OXYLOSS)
/obj/item/toy/crayon/spraycan/New()
..()
name = "spray can"
+3 -6
View File
@@ -10,8 +10,9 @@ var/global/list/obj/item/device/pda/PDAs = list()
icon = 'icons/obj/pda.dmi'
icon_state = "pda"
item_state = "electronic"
w_class = 1.0
w_class = 1
slot_flags = SLOT_ID | SLOT_BELT
origin_tech = "programming=2"
//Main variables
var/owner = null // String name of owner
@@ -703,12 +704,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
else
difficulty += 2
if(prob(difficulty * 12) || (P.hidden_uplink))
if(prob(difficulty * 15) || (P.hidden_uplink))
U.show_message("<span class='danger'>An error flashes on your [src].</span>", 1)
else if (prob(difficulty * 3))
U.show_message("<span class='danger'>Energy feeds back into your [src]!</span>", 1)
U << browse(null, "window=pda")
explode()
else
U.show_message("<span class='notice'>Success!</span>", 1)
P.explode()
+1 -1
View File
@@ -20,7 +20,7 @@
/obj/item/radio/integrated/signal
var/frequency = 1457
var/code = 30.0
var/code = 30
var/last_transmission
var/datum/radio_frequency/radio_connection
+1 -1
View File
@@ -4,7 +4,7 @@
icon = 'icons/obj/aicards.dmi'
icon_state = "aicard" // aicard-full
item_state = "electronic"
w_class = 2.0
w_class = 2
slot_flags = SLOT_BELT
flags = NOBLUDGEON
var/flush = null
@@ -10,10 +10,11 @@
desc = "For illicit snooping through the camera network."
icon = 'icons/obj/device.dmi'
icon_state = "camera_bug"
w_class = 1.0
w_class = 1
item_state = "camera_bug"
throw_speed = 4
throw_range = 20
origin_tech = "syndicate=3;engineering=;1"
var/obj/machinery/camera/current = null
@@ -4,10 +4,10 @@
flags = CONDUCT
slot_flags = SLOT_BELT
item_state = "electronic"
throwforce = 5.0
throwforce = 5
throw_speed = 3
throw_range = 5
w_class = 2.0
w_class = 2
origin_tech = "syndicate=4;magnets=4"
var/can_use = 1
var/obj/effect/dummy/chameleon/active_dummy = null
@@ -9,6 +9,7 @@
force = 3
attack_verb = list("blown up", "exploded", "detonated")
materials = list(MAT_METAL=50, MAT_GLASS=30)
origin_tech = "syndicate=3;combat=2,"
/obj/item/device/doorCharge/ex_act(severity, target)
switch(severity)
@@ -191,7 +191,7 @@ obj/item/device/flashlight/lamp/bananalamp
/obj/item/device/flashlight/flare
name = "flare"
desc = "A red Nanotrasen issued flare. There are instructions on the side, it reads 'pull cord, make light'."
w_class = 2.0
w_class = 2
brightness_on = 7 // Pretty bright.
icon_state = "flare"
item_state = "flare"
@@ -199,6 +199,7 @@ obj/item/device/flashlight/lamp/bananalamp
var/fuel = 0
var/on_damage = 7
var/produce_heat = 1500
heat = 1000
/obj/item/device/flashlight/flare/New()
fuel = rand(800, 1000) // Sorry for changing this so much but I keep under-estimating how long X number of ticks last in seconds.
@@ -249,6 +250,9 @@ obj/item/device/flashlight/lamp/bananalamp
damtype = "fire"
SSobj.processing += src
/obj/item/device/flashlight/flare/is_hot()
return on * heat
/obj/item/device/flashlight/flare/torch
name = "torch"
desc = "A torch fashioned from some leaves and a log."
@@ -67,9 +67,9 @@
/obj/item/device/laser_pointer/afterattack(atom/target, mob/living/user, flag, params)
if(flag) //we're placing the object on a table or in backpack
return
laser_act(target, user)
laser_act(target, user, params)
/obj/item/device/laser_pointer/proc/laser_act(atom/target, mob/living/user)
/obj/item/device/laser_pointer/proc/laser_act(atom/target, mob/living/user, params)
if( !(user in (viewers(7,target))) )
return
if (!diode)
@@ -80,7 +80,7 @@
return
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.dna && (H.dna.check_mutation(HULK) || NOGUNS in H.dna.species.specflags))
if(H.dna.check_mutation(HULK) || NOGUNS in H.dna.species.specflags)
user << "<span class='warning'>Your fingers can't press the button!</span>"
return
@@ -140,12 +140,19 @@
//laser pointer image
icon_state = "pointer_[pointer_icon_state]"
var/list/showto = list()
for(var/mob/M in range(7,targloc))
for(var/mob/M in viewers(7,targloc))
if(M.client)
showto.Add(M.client)
var/image/I = image('icons/obj/projectiles.dmi',targloc,pointer_icon_state,10)
I.pixel_x = target.pixel_x + rand(-5,5)
I.pixel_y = target.pixel_y + rand(-5,5)
var/list/click_params = params2list(params)
if(click_params)
if(click_params["icon-x"])
I.pixel_x = (text2num(click_params["icon-x"]) - 16)
if(click_params["icon-y"])
I.pixel_y = (text2num(click_params["icon-y"]) - 16)
else
I.pixel_x = target.pixel_x + rand(-5,5)
I.pixel_y = target.pixel_y + rand(-5,5)
if(outmsg)
user << outmsg
+2 -2
View File
@@ -8,8 +8,8 @@
name = "multitool"
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors."
icon_state = "multitool"
force = 5.0
w_class = 2.0
force = 5
w_class = 2
throwforce = 0
throw_range = 7
throw_speed = 3
+1 -1
View File
@@ -3,7 +3,7 @@
icon = 'icons/obj/aicards.dmi'
icon_state = "pai"
item_state = "electronic"
w_class = 2.0
w_class = 2
slot_flags = SLOT_BELT
origin_tech = "programming=2"
var/obj/item/device/radio/radio
+1 -1
View File
@@ -5,7 +5,7 @@
name = "power sink"
icon_state = "powersink0"
item_state = "electronic"
w_class = 4.0
w_class = 4
flags = CONDUCT
throwforce = 5
throw_speed = 1
@@ -6,7 +6,7 @@
item_state = "electropack"
flags = CONDUCT
slot_flags = SLOT_BACK
w_class = 5.0
w_class = 5
materials = list(MAT_METAL=10000, MAT_GLASS=2500)
var/on = 1
var/code = 2
@@ -3,7 +3,7 @@
desc = "Talk through this."
icon_state = "intercom"
anchored = 1
w_class = 4.0
w_class = 4
canhear_range = 2
var/number = 0
var/anyai = 1
+7 -7
View File
@@ -70,7 +70,7 @@ MASS SPECTROMETER
flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 3
w_class = 1.0
w_class = 1
throw_speed = 3
throw_range = 7
materials = list(MAT_METAL=200)
@@ -162,8 +162,7 @@ MASS SPECTROMETER
// Species and body temperature
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.dna)
user << "<span class='info'>Species: [H.dna.species.name]</span>"
user << "<span class='info'>Species: [H.dna.species.name]</span>"
user << "<span class='info'>Body temperature: [round(M.bodytemperature-T0C,0.1)] &deg;C ([round(M.bodytemperature*1.8-459.67,0.1)] &deg;F)</span>"
// Time of death
@@ -193,7 +192,8 @@ MASS SPECTROMETER
var/implant_detect
for(var/obj/item/organ/internal/cyberimp/CI in H.internal_organs)
implant_detect += "[H.name] is modified with a [CI.name].<br>"
if(CI.status == ORGAN_ROBOTIC)
implant_detect += "[H.name] is modified with a [CI.name].<br>"
if(implant_detect)
user.show_message("<span class='notice'>Detected cybernetic modifications:</span>")
user.show_message("<span class='notice'>[implant_detect]</span>")
@@ -235,7 +235,7 @@ MASS SPECTROMETER
name = "analyzer"
icon_state = "atmos"
item_state = "analyzer"
w_class = 2.0
w_class = 2
flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 0
@@ -301,7 +301,7 @@ MASS SPECTROMETER
name = "mass-spectrometer"
icon_state = "spectrometer"
item_state = "analyzer"
w_class = 2.0
w_class = 2
flags = CONDUCT | OPENCONTAINER
slot_flags = SLOT_BELT
throwforce = 0
@@ -376,7 +376,7 @@ MASS SPECTROMETER
icon_state = "adv_spectrometer"
item_state = "analyzer"
origin_tech = "biotech=1"
w_class = 2.0
w_class = 2
flags = CONDUCT
throwforce = 0
throw_speed = 3
@@ -3,7 +3,7 @@
desc = "A miniature machine that tracks suit sensors across the station."
icon = 'icons/obj/device.dmi'
icon_state = "scanner"
w_class = 2.0
w_class = 2
slot_flags = SLOT_BELT
origin_tech = "programming=3;materials=3;magnets=3"
@@ -20,7 +20,7 @@ effective or pretty fucking useless.
desc = "A strange device with twin antennas."
icon_state = "batterer"
throwforce = 5
w_class = 1.0
w_class = 1
throw_speed = 3
throw_range = 7
flags = CONDUCT
@@ -77,7 +77,7 @@ effective or pretty fucking useless.
flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 3
w_class = 1.0
w_class = 1
throw_speed = 3
throw_range = 7
materials = list(MAT_METAL=400)
@@ -98,7 +98,7 @@ effective or pretty fucking useless.
if(M)
if(intensity >= 5)
M.apply_effect(round(intensity/1.5), PARALYZE)
M.irradiate(intensity*10)
M.rad_act(intensity*10)
else
user << "<span class='warning'>The radioactive microlaser is still recharging.</span>"
+1 -1
View File
@@ -5,7 +5,7 @@
icon_state = "docs_generic"
item_state = "paper"
throwforce = 0
w_class = 1.0
w_class = 1
throw_range = 1
throw_speed = 1
layer = 4
+2 -1
View File
@@ -5,12 +5,13 @@
/obj/item/tapeproj
icon = 'icons/obj/holotape.dmi'
icon_state = "rollstart"
w_class = 2.0
w_class = 2
var/turf/start
var/turf/end
var/tape_type = /obj/item/holotape
var/icon_base
var/charging = 0
origin_tech = "materials=1;engineering=1"
/obj/item/holotape
icon = 'icons/obj/holotape.dmi'
+2 -2
View File
@@ -5,7 +5,7 @@
item_state = "lgloves"
force = 0
throwforce = 0
w_class = 1.0
w_class = 1
throw_speed = 1
throw_range = 7
var/state
@@ -55,5 +55,5 @@
var/obj/item/weapon/tank/T = W
blow(T, user)
return
if (is_sharp(W) || is_hot(W) || is_pointed(W))
if (is_sharp(W) || W.is_hot() || is_pointed(W))
burst()
+46 -19
View File
@@ -6,15 +6,24 @@
desc = "Extremely radioactive. Wear goggles."
icon = 'icons/obj/nuke_tools.dmi'
icon_state = "plutonium_core"
item_state = "plutoniumcore"
var/pulse = 0
var/cooldown = 0
/obj/item/nuke_core/New()
SSobj.processing += src
/obj/item/nuke_core/attackby(obj/item/nuke_core_container/container, mob/user)
if(istype(container))
container.load(src, user)
else
..()
/obj/item/nuke_core/process()
if(cooldown < world.time - 40)
if(cooldown < world.time - 60)
cooldown = world.time
for(var/mob/living/L in range(8,get_turf(src)))
var/rads = 100 - get_dist(L,src)*7
L.irradiate(rads)
flick("plutonium_core_pulse", src)
radiation_pulse(get_turf(src), 1, 4, 40, 1)
//nuke core box, for carrying the core
/obj/item/nuke_core_container
@@ -22,33 +31,51 @@
desc = "Solid container for radioactive objects."
icon = 'icons/obj/nuke_tools.dmi'
icon_state = "core_container_empty"
item_state = "tile"
var/obj/item/nuke_core/core = null
/obj/item/nuke_core_container/proc/load(obj/item/nuke_core/ncore, obj/machinery/nuclearbomb/nuke)
if(core)
/obj/item/nuke_core_container/proc/load(obj/item/nuke_core/ncore, mob/user)
if(core || !istype(ncore))
return 0
SSobj.processing -= ncore
ncore.loc = src
core = ncore
nuke.core = null
icon_state = "core_container_loaded"
user << "<span class='warning'>Container is sealing...</span>"
spawn(50)
SSobj.processing -= core
icon_state = "core_container_sealed"
playsound(loc, 'sound/items/Deconstruct.ogg', 100, 1)
if(loc == user)
user << "<span class='warning'>Container is sealed, the radiation is contained.</span>"
return 1
/obj/item/nuke_core_container/attackby(obj/item/nuke_core/core, mob/user)
if(istype(core))
if(!user.unEquip(core))
user << "<span class='warning'>The [core] is stuck to your hand!</span>"
return
else
load(core, user)
else
..()
//snowflake screwdriver, works as a key to start nuke theft, traitor only
/obj/item/weapon/screwdriver/nuke
name = "screwdriver"
desc = "A screwdriver with an ultra thin tip."
icon = 'icons/obj/nuke_tools.dmi'
icon_state = "screwdriver_nuke"
item_state = "screwdriver_nuke"
/obj/item/weapon/screwdriver/nuke/New()
//to skip screwdriver icon update
/obj/item/weapon/paper/nuke_instructions
info = "How to break into a Nanotrasen self-destruct terminal and remove it's plutonium core:<br>\
info = "How to break into a Nanotrasen self-destruct terminal and remove its plutonium core:<br>\
<ul>\
<li>Use a screwdriver with a very thin tip (provided) to unscrew the terminal's front panel;</li>\
<li>The insides of the terminal should be mostly hollow and you should have a clear way to the warhead's weak spot;</li>\
<li>Use something to draw cut lines on the warhead, according to the provided plans;</li>\
<li>With a welding tool, cut a hole in the warhead, following the previously drawn cut lines;</li>\
<li>After you breach the warhead, you may notice the very subtle glow of the plutonium core;</li>\
<li>Place the provided core container in the hole and poke the core until it falls into the container;</li>\
<li>Once the core is inside the container, the container will lock shut. Deliver the container to your commander.</li>"
/obj/item/weapon/paper/nuke_plans
info = "Nuclear warhead breaching plans:"
<li>Use a screwdriver with a very thin tip (provided) to unscrew the terminal's front panel</li>\
<li>Dislodge and remove the front panel with a crowbar</li>\
<li>Cut the inner metal plate with a welding tool</li>\
<li>Pry off the inner plate with a crowbar to expose the radioactive core</li>\
<li>Use the core container to remove the plutonium core; the container will take some time to seal</li>\
<li>???</li>"
+2 -2
View File
@@ -30,7 +30,7 @@
name = "cyborg torso"
desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell."
icon_state = "chest"
var/wires = 0.0
var/wires = 0
var/obj/item/weapon/stock_parts/cell/cell = null
/obj/item/robot_parts/head
@@ -321,7 +321,7 @@
return
var/obj/item/stack/cable_coil/coil = W
if (coil.use(1))
src.wires = 1.0
src.wires = 1
user << "<span class='notice'>You insert the wire.</span>"
else
user << "<span class='warning'>You need one length of coil to wire it!</span>"
@@ -16,7 +16,6 @@
return 1
return 0
/obj/item/borg/upgrade/reset
name = "cyborg module reset board"
desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the cyborg."
@@ -197,7 +196,7 @@
R.module.rebuild()
return 1
/obj/item/borg/upgrade/syndicate/
/obj/item/borg/upgrade/syndicate
name = "illegal equipment module"
desc = "Unlocks the hidden, deadlier functions of a cyborg"
icon_state = "cyborg_upgrade3"
@@ -211,3 +210,85 @@
R.SetEmagged(1)
return 1
/obj/item/borg/upgrade/selfrepair
name = "self-repair module"
desc = "This module will repair the cyborg over time."
icon_state = "cyborg_upgrade5"
require_module = 1
var/repair_amount = -1
var/repair_tick = 1
var/msg_cooldown = 0
var/on = 0
var/powercost = 10
var/mob/living/silicon/robot/cyborg
/obj/item/borg/upgrade/selfrepair/action(mob/living/silicon/robot/R)
if(..())
return 0
var/obj/item/borg/upgrade/selfrepair/U = locate() in R
if(U)
usr << "<span class='warning'>This unit is already equipped with a self-repair module.</span>"
return 0
cyborg = R
icon_state = "selfrepair_off"
action_button_name = "Toggle Self-Repair"
return 1
/obj/item/borg/upgrade/selfrepair/ui_action_click()
on = !on
if(on)
cyborg << "<span class='notice'>You activate the self-repair module.</span>"
SSobj.processing |= src
else
cyborg << "<span class='notice'>You deactivate the self-repair module.</span>"
SSobj.processing -= src
update_icon()
/obj/item/borg/upgrade/selfrepair/update_icon()
if(cyborg)
icon_state = "selfrepair_[on ? "on" : "off"]"
else
icon_state = "cyborg_upgrade5"
/obj/item/borg/upgrade/selfrepair/proc/deactivate()
SSobj.processing -= src
on = 0
update_icon()
/obj/item/borg/upgrade/selfrepair/process()
if(!repair_tick)
repair_tick = 1
return
if( cyborg && (cyborg.stat != DEAD) && on)
if(cyborg.cell.charge < powercost*2)
cyborg << "<span class='warning'>Self-repair module deactivated. Please recharge.</span>"
deactivate()
return
if(cyborg.health < cyborg.maxHealth)
if(cyborg.health < 0)
repair_amount = -2.5
powercost = 30
else
repair_amount = -1
powercost = 10
cyborg.adjustBruteLoss(repair_amount)
cyborg.adjustFireLoss(repair_amount)
cyborg.updatehealth()
cyborg.cell.use(powercost)
else
cyborg.cell.use(5)
repair_tick = 0
if( (world.time - 2000) > msg_cooldown )
var/msgmode = "standby"
if(cyborg.health < 0)
msgmode = "critical"
else if(cyborg.health < cyborg.maxHealth)
msgmode = "normal"
cyborg << "<span class='notice'>Self-repair is active in <span class='boldnotice'>[msgmode]</span> mode.</span>"
msg_cooldown = world.time
else
deactivate()
@@ -47,9 +47,18 @@
desc = "A shooting target that looks like a xenomorphic alien."
hp = 2350
/obj/item/target/clown
icon_state = "target_c"
desc = "A shooting target that looks like a useless clown."
hp = 2000
#define DECALTYPE_SCORCH 1
#define DECALTYPE_BULLET 2
/obj/item/target/clown/bullet_act(obj/item/projectile/P)
..()
playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1)
/obj/item/target/bullet_act(obj/item/projectile/P)
var/p_x = P.p_x + pick(0,0,0,0,0,-1,1) // really ugly way of coding "sometimes offset P.p_x!"
var/p_y = P.p_y + pick(0,0,0,0,0,-1,1)
+1 -1
View File
@@ -9,7 +9,7 @@
throwforce = 0
throw_speed = 2
throw_range = 2
w_class = 1.0
w_class = 1
burn_state = 0 //Burnable
/obj/item/stack/spacecash/c10
+3 -3
View File
@@ -10,9 +10,9 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \
icon_state = "rods"
item_state = "rods"
flags = CONDUCT
w_class = 3.0
force = 9.0
throwforce = 10.0
w_class = 3
force = 9
throwforce = 10
throw_speed = 3
throw_range = 7
materials = list(MAT_METAL=1000)
@@ -260,14 +260,15 @@
desc = "A nasty looking shard of glass."
icon = 'icons/obj/shards.dmi'
icon_state = "large"
w_class = 1.0
force = 5.0
throwforce = 10.0
w_class = 1
force = 5
throwforce = 10
item_state = "shard-glass"
materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
attack_verb = list("stabbed", "slashed", "sliced", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
var/cooldown = 0
sharpness = IS_SHARP
/obj/item/weapon/shard/suicide_act(mob/user)
user.visible_message(pick("<span class='suicide'>[user] is slitting \his wrists with the shard of glass! It looks like \he's trying to commit suicide.</span>", \
@@ -3,9 +3,9 @@
singular_name = "wired glass floor tile"
desc = "A glass tile, which is wired, somehow."
icon_state = "glass_wire"
w_class = 3.0
force = 3.0
throwforce = 5.0
w_class = 3
force = 3
throwforce = 5
throw_speed = 3
throw_range = 7
flags = CONDUCT
@@ -29,6 +29,7 @@ Mineral Sheets
throw_speed = 3
throw_range = 5
origin_tech = "materials=1"
materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
sheettype = "sandstone"
var/global/list/datum/stack_recipe/sandstone_recipes = list ( \
@@ -52,9 +53,9 @@ var/global/list/datum/stack_recipe/sandstone_recipes = list ( \
name = "diamond"
icon_state = "sheet-diamond"
singular_name = "diamond"
force = 5.0
force = 5
throwforce = 5
w_class = 3.0
w_class = 3
throw_range = 3
origin_tech = "materials=6"
sheettype = "diamond"
@@ -81,9 +82,9 @@ var/global/list/datum/stack_recipe/diamond_recipes = list ( \
name = "uranium"
icon_state = "sheet-uranium"
singular_name = "uranium sheet"
force = 5.0
force = 5
throwforce = 5
w_class = 3.0
w_class = 3
throw_speed = 1
throw_range = 3
origin_tech = "materials=5"
@@ -110,9 +111,9 @@ var/global/list/datum/stack_recipe/uranium_recipes = list ( \
name = "solid plasma"
icon_state = "sheet-plasma"
singular_name = "plasma sheet"
force = 5.0
force = 5
throwforce = 5
w_class = 3.0
w_class = 3
throw_speed = 1
throw_range = 3
origin_tech = "plasmatech=2;materials=2"
@@ -134,7 +135,7 @@ var/global/list/datum/stack_recipe/plasma_recipes = list ( \
..()
/obj/item/stack/sheet/mineral/plasma/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(is_hot(W) > 300)//If the temperature of the object is over 300, then ignite
if(W.is_hot() > 300)//If the temperature of the object is over 300, then ignite
message_admins("Plasma sheets ignited by [key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
log_game("Plasma sheets ignited by [key_name(user)] in ([x],[y],[z])")
fire_act()
@@ -152,9 +153,9 @@ var/global/list/datum/stack_recipe/plasma_recipes = list ( \
name = "gold"
icon_state = "sheet-gold"
singular_name = "gold bar"
force = 5.0
force = 5
throwforce = 5
w_class = 3.0
w_class = 3
throw_speed = 1
throw_range = 3
origin_tech = "materials=4"
@@ -184,9 +185,9 @@ var/global/list/datum/stack_recipe/gold_recipes = list ( \
name = "silver"
icon_state = "sheet-silver"
singular_name = "silver bar"
force = 5.0
force = 5
throwforce = 5
w_class = 3.0
w_class = 3
throw_speed = 1
throw_range = 3
origin_tech = "materials=3"
@@ -216,9 +217,9 @@ var/global/list/datum/stack_recipe/silver_recipes = list ( \
name = "bananium"
icon_state = "sheet-clown"
singular_name = "bananium sheet"
force = 5.0
force = 5
throwforce = 5
w_class = 3.0
w_class = 3
throw_speed = 1
throw_range = 3
origin_tech = "materials=4"
@@ -246,12 +247,13 @@ var/global/list/datum/stack_recipe/clown_recipes = list ( \
name = "enriched uranium"
icon_state = "sheet-enruranium"
singular_name = "enriched uranium sheet"
force = 5.0
force = 5
throwforce = 5
w_class = 3.0
w_class = 3
throw_speed = 1
throw_range = 3
origin_tech = "materials=5"
origin_tech = "materials=6"
materials = list(MAT_URANIUM=3000)
/*
* Adamantine
@@ -260,9 +262,9 @@ var/global/list/datum/stack_recipe/clown_recipes = list ( \
name = "adamantine"
icon_state = "sheet-adamantine"
singular_name = "adamantine sheet"
force = 5.0
force = 5
throwforce = 5
w_class = 3.0
w_class = 3
throw_speed = 1
throw_range = 3
origin_tech = "materials=4"
@@ -274,9 +276,9 @@ var/global/list/datum/stack_recipe/clown_recipes = list ( \
name = "mythril"
icon_state = "sheet-mythril"
singular_name = "mythril sheet"
force = 5.0
force = 5
throwforce = 5
w_class = 3.0
w_class = 3
throw_speed = 1
throw_range = 3
origin_tech = "materials=4"
@@ -5,6 +5,7 @@
* Wood
* Cloth
* Cardboard
* Runed Metal (cult)
*/
/*
@@ -31,6 +32,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
new/datum/stack_recipe("firelock frame", /obj/structure/firelock_frame, 3, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("machine frame", /obj/machinery/constructable_frame/machine_frame, 5, time = 25, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("meatspike frame", /obj/structure/kitchenspike_frame, 5, time = 25, one_per_turf = 1, on_floor = 1), \
null, \
new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade), \
new/datum/stack_recipe("light fixture frame", /obj/item/wallframe/light_fixture, 2), \
@@ -50,7 +52,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
singular_name = "metal sheet"
icon_state = "sheet-metal"
materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT)
throwforce = 10.0
throwforce = 10
flags = CONDUCT
origin_tech = "materials=1"
@@ -78,7 +80,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \
icon_state = "sheet-plasteel"
item_state = "sheet-metal"
materials = list(MAT_METAL=6000, MAT_PLASMA=6000)
throwforce = 10.0
throwforce = 10
flags = CONDUCT
origin_tech = "materials=2"
@@ -101,6 +103,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 15, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 15, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("dog bed", /obj/structure/stool/bed/dogbed, 10, time = 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("display case chassis", /obj/structure/displaycase_chassis, 5, one_per_turf = 1, on_floor = 1), \
)
/obj/item/stack/sheet/mineral/wood
@@ -140,6 +143,7 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg), \
new/datum/stack_recipe("pizza box", /obj/item/pizzabox), \
new/datum/stack_recipe("folder", /obj/item/weapon/folder), \
new/datum/stack_recipe("large box", /obj/structure/closet/cardboard, 4), \
)
/obj/item/stack/sheet/cardboard //BubbleWrap
@@ -152,4 +156,33 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
/obj/item/stack/sheet/cardboard/New(var/loc, var/amount=null)
recipes = cardboard_recipes
return ..()
return ..()
/*
* Runed Metal
*/
var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \
new/datum/stack_recipe("pylon", /obj/structure/cult/pylon, 4, time = 40, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("forge", /obj/structure/cult/forge, 6, time = 40, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("archives", /obj/structure/cult/tome, 4, time = 40, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("altar", /obj/structure/cult/talisman, 10, time = 40, one_per_turf = 1, on_floor = 1), \
)
/obj/item/stack/sheet/runed_metal
name = "runed metal"
desc = "Sheets of cold metal with shifting inscriptions writ upon them."
singular_name = "runed metal"
icon_state = "sheet-runed"
icon = 'icons/obj/items.dmi'
sheettype = "runed"
/obj/item/stack/sheet/runed_metal/New(var/loc, var/amount=null)
recipes = runed_metal_recipes
return ..()
/obj/item/stack/sheet/runed_metal/attack_self(mob/user)
if(!iscultist(user))
user << "<span class='warning'>You aren't able to think of anything [src] could build...</span>"
return
..()
@@ -1,6 +1,6 @@
/obj/item/stack/sheet
name = "sheet"
w_class = 3.0
w_class = 3
force = 5
throwforce = 5
max_amount = 50
@@ -6,6 +6,7 @@
origin_tech = "plasma=1"
turf_type = /turf/simulated/floor/mineral/plasma
mineralType = "plasma"
materials = list(MAT_PLASMA=500)
/obj/item/stack/tile/mineral/uranium
name = "uranium tile"
@@ -15,6 +16,7 @@
origin_tech = "material=1"
turf_type = /turf/simulated/floor/mineral/uranium
mineralType = "uranium"
materials = list(MAT_URANIUM=500)
/obj/item/stack/tile/mineral/gold
name = "gold tile"
@@ -24,6 +26,7 @@
origin_tech = "material=1"
turf_type = /turf/simulated/floor/mineral/gold
mineralType = "gold"
materials = list(MAT_GOLD=500)
/obj/item/stack/tile/mineral/silver
name = "silver tile"
@@ -33,6 +36,7 @@
origin_tech = "material=1"
turf_type = /turf/simulated/floor/mineral/silver
mineralType = "silver"
materials = list(MAT_SILVER=500)
/obj/item/stack/tile/mineral/diamond
name = "diamond tile"
@@ -42,6 +46,7 @@
origin_tech = "material=2"
turf_type = /turf/simulated/floor/mineral/diamond
mineralType = "diamond"
materials = list(MAT_DIAMOND=500)
/obj/item/stack/tile/mineral/bananium
name = "bananium tile"
@@ -51,4 +56,5 @@
origin_tech = "material=1"
turf_type = /turf/simulated/floor/mineral/bananium
mineralType = "bananium"
materials = list(MAT_BANANIUM=500)
@@ -3,9 +3,9 @@
singular_name = "broken tile"
desc = "A broken tile. This should not exist."
icon = 'icons/obj/tiles.dmi'
w_class = 3.0
force = 1.0
throwforce = 1.0
w_class = 3
force = 1
throwforce = 1
throw_speed = 3
throw_range = 7
max_amount = 60
@@ -21,7 +21,7 @@
user << "<span class='warning'>You need at least four tiles to do this!</span>"
return
if(is_hot(WT) && !mineralType)
if(WT.is_hot() && !mineralType)
user << "<span class='warning'>You can not reform this!</span>"
return
@@ -121,9 +121,9 @@
singular_name = "floor tile"
desc = "Those could work as a pretty decent throwing weapon."
icon_state = "tile"
force = 6.0
materials = list(MAT_METAL=937.5)
throwforce = 10.0
force = 6
materials = list(MAT_METAL=500)
throwforce = 10
flags = CONDUCT
max_amount = 60
turf_type = /turf/simulated/floor/plasteel
+18 -18
View File
@@ -98,7 +98,7 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "syndballoon"
item_state = "syndballoon"
w_class = 4.0
w_class = 4
/*
* Fake singularity
@@ -122,10 +122,10 @@
righthand_file = 'icons/mob/inhands/guns_righthand.dmi'
flags = CONDUCT
slot_flags = SLOT_BELT
w_class = 3.0
w_class = 3
materials = list(MAT_METAL=10, MAT_GLASS=10)
attack_verb = list("struck", "pistol whipped", "hit", "bashed")
var/bullets = 7.0
var/bullets = 7
/obj/item/toy/gun/examine(mob/user)
..()
@@ -174,9 +174,9 @@
desc = "Make sure to recyle the box in an autolathe when it gets empty."
icon = 'icons/obj/ammo.dmi'
icon_state = "357OLD-7"
w_class = 1.0
w_class = 1
materials = list(MAT_METAL=10, MAT_GLASS=10)
var/amount_left = 7.0
var/amount_left = 7
/obj/item/toy/ammo/gun/update_icon()
src.icon_state = text("357OLD-[]", src.amount_left)
@@ -194,8 +194,8 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "sword0"
item_state = "sword0"
var/active = 0.0
w_class = 2.0
var/active = 0
w_class = 2
flags = NOSHIELD
attack_verb = list("attacked", "struck", "hit")
var/hacked = 0
@@ -316,7 +316,7 @@
desc = "A colourful crayon. Looks tasty. Mmmm..."
icon = 'icons/obj/crayons.dmi'
icon_state = "crayonred"
w_class = 1.0
w_class = 1
attack_verb = list("attacked", "coloured")
var/colour = "#FF0000" //RGB
var/drawtype = "rune"
@@ -645,7 +645,7 @@
desc = "A little toy model AI core with real law announcing action!"
icon = 'icons/obj/toy.dmi'
icon_state = "AI"
w_class = 2.0
w_class = 2
var/cooldown = 0
/obj/item/toy/AI/attack_self(mob/user)
@@ -664,7 +664,7 @@
desc = "An action figure modeled after 'The Owl', defender of justice."
icon = 'icons/obj/toy.dmi'
icon_state = "owlprize"
w_class = 2.0
w_class = 2
var/cooldown = 0
/obj/item/toy/owl/attack_self(mob/user)
@@ -683,7 +683,7 @@
desc = "An action figure modeled after 'The Griffin', criminal mastermind."
icon = 'icons/obj/toy.dmi'
icon_state = "griffinprize"
w_class = 2.0
w_class = 2
var/cooldown = 0
/obj/item/toy/griffin/attack_self(mob/user)
@@ -729,7 +729,7 @@
icon = 'icons/obj/toy.dmi'
deckstyle = "nanotrasen"
icon_state = "deck_nanotrasen_full"
w_class = 2.0
w_class = 2
var/cooldown = 0
var/list/cards = list()
@@ -860,7 +860,7 @@
desc = "A number of cards not in a deck, customarily held in ones hand."
icon = 'icons/obj/toy.dmi'
icon_state = "nanotrasen_hand2"
w_class = 1.0
w_class = 1
var/list/currenthand = list()
var/choice = null
@@ -954,7 +954,7 @@
desc = "a card"
icon = 'icons/obj/toy.dmi'
icon_state = "singlecard_nanotrasen_down"
w_class = 1.0
w_class = 1
var/cardname = null
var/flipped = 0
pixel_x = -5
@@ -1074,7 +1074,7 @@
desc = "A plastic model of a Nuclear Fission Explosive."
icon = 'icons/obj/toy.dmi'
icon_state = "nuketoyidle"
w_class = 2.0
w_class = 2
var/cooldown = 0
/obj/item/toy/nuke/attack_self(mob/user)
@@ -1101,7 +1101,7 @@
desc = "Relive the excitement of a meteor shower! SweetMeat-eor. Co is not responsible for any injuries, headaches or hearing loss caused by Mini-Meteor?"
icon = 'icons/obj/toy.dmi'
icon_state = "minimeteor"
w_class = 2.0
w_class = 2
/obj/item/toy/minimeteor/throw_impact(atom/hit_atom)
if(!..())
@@ -1120,7 +1120,7 @@
desc = "An adorable stuffed toy that resembles a space carp."
icon = 'icons/obj/toy.dmi'
icon_state = "carpplushie"
w_class = 2.0
w_class = 2
attack_verb = list("bitten", "eaten", "fin slapped")
burn_state = 0 //Burnable
var/bitesound = 'sound/weapons/bite.ogg'
@@ -1144,7 +1144,7 @@
desc = "A big, plastic red button. Reads 'From HonkCo Pranks?' on the back."
icon = 'icons/obj/assemblies.dmi'
icon_state = "bigred"
w_class = 2.0
w_class = 2
var/cooldown = 0
/obj/item/toy/redbutton/attack_self(mob/user)
+1 -1
View File
@@ -2,7 +2,7 @@
/obj/item/trash
icon = 'icons/obj/janitor.dmi'
desc = "This is rubbish."
w_class = 1.0
w_class = 1
burn_state = 0 //Burnable
/obj/item/trash/raisins
@@ -13,14 +13,15 @@ AI MODULES
item_state = "electronic"
desc = "An AI Module for programming laws to an AI."
flags = CONDUCT
force = 5.0
w_class = 2.0
force = 5
w_class = 2
throwforce = 0
throw_speed = 3
throw_range = 7
origin_tech = "programming=3"
var/list/laws = list()
var/bypass_law_amt_check = 0
materials = list(MAT_GOLD=50)
/obj/item/weapon/aiModule/examine(var/mob/user as mob)
..()
@@ -291,7 +292,7 @@ AI MODULES
name = "'Corporate' Core AI Module"
origin_tech = "programming=3;materials=4"
laws = list("The crew is expensive to replace.",\
"The station and it's equipment is expensive to replace",\
"The station and its equipment are expensive to replace",\
"You are expensive to replace",\
"Minimize expenses")
+6 -6
View File
@@ -11,13 +11,13 @@ RCD
icon_state = "rcd"
opacity = 0
density = 0
anchored = 0.0
anchored = 0
flags = CONDUCT
force = 10.0
throwforce = 10.0
force = 10
throwforce = 10
throw_speed = 3
throw_range = 5
w_class = 3.0
w_class = 3
materials = list(MAT_METAL=100000)
origin_tech = "engineering=4;materials=2"
req_access_txt = "11"
@@ -64,7 +64,7 @@ RCD
var/deconairlockdelay = 50
/obj/item/weapon/rcd/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] sets the RCD to 'Wall' and points it down his throat! It looks like \he's trying to commit suicide..</span>")
user.visible_message("<span class='suicide'>[user] sets the RCD to 'Wall' and points it down \his throat! It looks like \he's trying to commit suicide..</span>")
return (BRUTELOSS)
/obj/item/weapon/rcd/verb/change_airlock_access()
@@ -530,4 +530,4 @@ RCD
/obj/item/weapon/rcd_ammo/large
origin_tech = "materials=4"
materials = list(MAT_METAL=12000, MAT_GLASS=8000)
ammoamt = 160
ammoamt = 160
+12 -4
View File
@@ -103,6 +103,8 @@ var/global/list/RPD_recipes=list(
"Heat Exchange" = list(
"Pipe" = new /datum/pipe_info(PIPE_HE, 1, PIPE_BENDABLE),
//"Bent Pipe" = new /datum/pipe_info(PIPE_HE, 5, PIPE_BENT),
"Manifold" = new /datum/pipe_info(PIPE_HE_MANIFOLD, 1, PIPE_TRINARY),
"4-Way Manifold" = new /datum/pipe_info(PIPE_HE_4WAYMANIFOLD, 1, PIPE_QUAD),
"Junction" = new /datum/pipe_info(PIPE_JUNCTION, 1, PIPE_UNARY),
"Heat Exchanger" = new /datum/pipe_info(PIPE_HEAT_EXCHANGE, 1, PIPE_UNARY),
),
@@ -125,13 +127,13 @@ var/global/list/RPD_recipes=list(
icon_state = "rpd"
opacity = 0
density = 0
anchored = 0.0
anchored = 0
flags = CONDUCT
force = 10.0
throwforce = 10.0
force = 10
throwforce = 10
throw_speed = 1
throw_range = 5
w_class = 3.0
w_class = 3
materials = list(MAT_METAL=75000, MAT_GLASS=37500)
origin_tech = "engineering=4;materials=2"
var/datum/effect/effect/system/spark_spread/spark_system
@@ -168,6 +170,12 @@ var/global/list/RPD_recipes=list(
/obj/item/weapon/pipe_dispenser/attack_self(mob/user)
show_menu(user)
/obj/item/weapon/pipe_dispenser/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] points the end of the RPD down \his throat and presses a button! It looks like \he's trying to commit suicide...</span>")
playsound(get_turf(user), 'sound/machines/click.ogg', 50, 1)
playsound(get_turf(user), 'sound/items/Deconstruct.ogg', 50, 1)
return(BRUTELOSS)
/obj/item/weapon/pipe_dispenser/proc/render_dir_img(_dir,pic,title,flipped=0)
var/selected=" class=\"imglink\""
if(_dir == p_dir)
+2 -2
View File
@@ -10,10 +10,10 @@ RSF
icon_state = "rcd"
opacity = 0
density = 0
anchored = 0.0
anchored = 0
var/matter = 0
var/mode = 1
w_class = 3.0
w_class = 3
/obj/item/weapon/rsf/New()
desc = "A RSF. It currently holds [matter]/30 fabrication-units."
@@ -5,7 +5,7 @@
icon_state = "paint sprayer"
item_state = "paint sprayer"
w_class = 2.0
w_class = 2
materials = list(MAT_METAL=50, MAT_GLASS=50)
origin_tech = "engineering=1"
+1 -1
View File
@@ -15,7 +15,7 @@
name = "card"
desc = "Does card things."
icon = 'icons/obj/card.dmi'
w_class = 1.0
w_class = 1
var/list/files = list( )
@@ -6,7 +6,7 @@
icon = 'icons/obj/chronos.dmi'
icon_state = "chronobackpack"
item_state = "backpack"
w_class = 4.0
w_class = 4
slot_flags = SLOT_BACK
slowdown = 1
action_button_name = "Equip/Unequip TED Gun"
@@ -41,7 +41,7 @@
icon = 'icons/obj/chronos.dmi'
icon_state = "chronogun"
item_state = "chronogun"
w_class = 3.0
w_class = 3
flags = NODROP
ammo_type = list(/obj/item/ammo_casing/energy/chrono_beam)
fire_delay = 50
@@ -22,8 +22,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon_state = "match_unlit"
var/lit = 0
var/smoketime = 5
w_class = 1.0
w_class = 1
origin_tech = "materials=1"
heat = 1000
/obj/item/weapon/match/process()
var/turf/location = get_turf(src)
@@ -74,7 +75,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
return
M.IgniteMob()
var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M,user)
if(lit && cig)
if(lit && cig && user.a_intent == "help")
if(cig.lit)
user << "<span class='notice'>The [cig.name] is already lit.</span>"
if(M == user)
cig.attackby(src, user)
else
@@ -85,10 +88,13 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/proc/help_light_cig(mob/living/carbon/M, mob/living/carbon/user)
if(!iscarbon(M))
return
if(istype(M.wear_mask, /obj/item/clothing/mask/cigarette) && user.zone_sel.selecting == "mouth")
if(istype(M.wear_mask, /obj/item/clothing/mask/cigarette))
var/obj/item/clothing/mask/cigarette/cig = M.wear_mask
return cig
/obj/item/weapon/match/is_hot()
return lit * heat
//////////////////
//FINE SMOKABLES//
//////////////////
@@ -107,6 +113,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/lastHolder = null
var/smoketime = 300
var/chem_volume = 30
heat = 1000
/obj/item/clothing/mask/cigarette/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is huffing the [src.name] as quickly as they can! It looks like \he's trying to give \himself cancer.</span>")
@@ -120,7 +127,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W, mob/user, params)
..()
if(!lit && smoketime > 0 && is_hot(W))
if(!lit && smoketime > 0 && W.is_hot())
var/lighting_text = is_lighter(W,user)
if(lighting_text)
light(lighting_text)
@@ -139,7 +146,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else
user << "<span class='notice'>[src] is full.</span>"
/obj/item/clothing/mask/cigarette/proc/is_lighter(obj/O, mob/user)
/obj/item/clothing/mask/cigarette/proc/is_lighter(obj/item/O, mob/user)
var/lighting_text = null
if(istype(O, /obj/item/weapon/weldingtool))
lighting_text = "<span class='notice'>[user] casually lights the [name] with [O], what a badass.</span>"
@@ -153,7 +160,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
lighting_text = "<span class='notice'>[user] fiddles with [O], and manages to light their [name].</span>"
else if(istype(O, /obj/item/device/flashlight/flare))
lighting_text = "<span class='notice'>[user] lights their [name] with [O] like a real badass.</span>"
else if(is_hot(O))
else if(O.is_hot())
lighting_text = "<span class='notice'>[user] lights their [name] with [O].</span>"
return lighting_text
@@ -247,7 +254,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(!istype(M))
return ..()
var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M,user)
if(lit && cig)
if(lit && cig && user.a_intent == "help")
if(cig.lit)
user << "<span class='notice'>The [cig.name] is already lit.</span>"
if(M == user)
cig.attackby(src, user)
else
@@ -258,6 +267,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/cigarette/fire_act()
light()
/obj/item/clothing/mask/cigarette/is_hot()
return lit * heat
/obj/item/clothing/mask/cigarette/rollie
name = "rollie"
desc = "A roll of dried plant matter wrapped in thin paper."
@@ -272,8 +284,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/cigarette/rollie/New()
..()
src.pixel_x = rand(-5.0, 5)
src.pixel_y = rand(-5.0, 5)
src.pixel_x = rand(-5, 5)
src.pixel_y = rand(-5, 5)
/obj/item/clothing/mask/cigarette/rollie/trippy/New()
..()
@@ -289,8 +301,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/weapon/cigbutt/roach/New()
..()
src.pixel_x = rand(-5.0, 5)
src.pixel_y = rand(-5.0, 5)
src.pixel_x = rand(-5, 5)
src.pixel_y = rand(-5, 5)
////////////
@@ -354,6 +366,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
chem_volume = 100
var/packeditem = 0
/obj/item/clothing/mask/cigarette/pipe/New()
..()
name = "empty [initial(name)]"
/obj/item/clothing/mask/cigarette/pipe/process()
var/turf/location = get_turf(src)
smoketime--
@@ -432,10 +448,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon_off = "cobpipeoff"
smoketime = 0
/obj/item/clothing/mask/cigarette/pipe/cobpipe/New()
..()
name = "empty [initial(name)]"
/////////
//ZIPPO//
@@ -450,6 +462,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
flags = CONDUCT
slot_flags = SLOT_BELT
var/lit = 0
heat = 1500
/obj/item/weapon/lighter/greyscale
name = "cheap lighter"
@@ -507,7 +520,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(lit)
M.IgniteMob()
var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M,user)
if(lit && cig)
if(lit && cig && user.a_intent == "help")
if(cig.lit)
user << "<span class='notice'>The [cig.name] is already lit.</span>"
if(M == user)
cig.attackby(src, user)
else
@@ -538,6 +553,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
SetLuminosity(1)
return
/obj/item/weapon/lighter/is_hot()
return lit * heat
///////////
//ROLLING//
@@ -15,7 +15,7 @@
gender = PLURAL
icon = 'icons/obj/items.dmi'
icon_state = "soap"
w_class = 1.0
w_class = 1
throwforce = 0
throw_speed = 3
throw_range = 7
@@ -36,9 +36,10 @@
cleanspeed = 10 //much faster than mop so it is useful for traitors who want to clean crime scenes
/obj/item/weapon/soap/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] crams the bar of soap down \his throat! It looks like \he's trying to commit suicide..</span>")
. = TOXLOSS
src.loc = user
user.say(";FFFFFFFFFFFFFFFFUUUUUUUDGE!!")
user.visible_message("<span class='suicide'>[user] lifts the [src.name] to their mouth and gnaws on it furiously, producing a thick froth! They'll never get that BB gun now!")
PoolOrNew(/obj/effect/effect/foam, loc)
return (TOXLOSS)
/obj/item/weapon/soap/Crossed(AM as mob|obj)
if (istype(AM, /mob/living/carbon))
@@ -83,7 +84,7 @@
item_state = "bike_horn"
throwforce = 0
hitsound = null //To prevent tap.ogg playing, as the item lacks of force
w_class = 1.0
w_class = 1
throw_speed = 3
throw_range = 7
attack_verb = list("HONKED")
+6 -6
View File
@@ -7,9 +7,9 @@
desc = "Order, order! No bombs in my courthouse."
icon = 'icons/obj/items.dmi'
icon_state = "gavelhammer"
force = 5.0
throwforce = 6.0
w_class = 2.0
force = 5
throwforce = 6
w_class = 2
attack_verb = list("bashed", "battered", "judged", "whacked")
burn_state = 0 //Burnable
@@ -23,9 +23,9 @@
desc = "Smack it with a gavel hammer when the assistants get rowdy."
icon = 'icons/obj/items.dmi'
icon_state = "gavelblock"
force = 2.0
throwforce = 2.0
w_class = 1.0
force = 2
throwforce = 2
w_class = 1
burn_state = 0 //Burnable
/obj/item/weapon/gavelblock/attackby(obj/item/I, mob/user, params)
+94 -31
View File
@@ -281,10 +281,24 @@
var/cooldown = 0
var/busy = 0
var/obj/item/weapon/defibrillator/defib
var/req_defib = 1
var/combat = 0 //If it penetrates armor and gives additional functionality
/obj/item/weapon/twohanded/shockpaddles/proc/recharge(var/time)
if(req_defib || !time)
return
cooldown = 1
update_icon()
sleep(time)
var/turf/T = get_turf(src)
T.audible_message("<span class='notice'>[src] beeps: Unit is recharged.</span>")
playsound(T, 'sound/machines/defib_ready.ogg', 50, 0)
cooldown = 0
update_icon()
/obj/item/weapon/twohanded/shockpaddles/New(mainunit)
..()
if(check_defib_exists(mainunit, src))
if(check_defib_exists(mainunit, src) && req_defib)
defib = mainunit
loc = defib
busy = 0
@@ -299,11 +313,14 @@
/obj/item/weapon/twohanded/shockpaddles/suicide_act(mob/user)
user.visible_message("<span class='danger'>[user] is putting the live paddles on \his chest! It looks like \he's trying to commit suicide.</span>")
defib.deductcharge(revivecost)
if(req_defib)
defib.deductcharge(revivecost)
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
return (OXYLOSS)
/obj/item/weapon/twohanded/shockpaddles/dropped(mob/user)
if(!req_defib)
return ..()
if(user)
var/obj/item/weapon/twohanded/O = user.get_inactive_hand()
if(istype(O))
@@ -315,6 +332,8 @@
return unwield(user)
/obj/item/weapon/twohanded/shockpaddles/proc/check_defib_exists(mainunit, mob/living/carbon/human/M, obj/O)
if(!req_defib)
return 1 //If it doesn't need a defib, just say it exists
if (!mainunit || !istype(mainunit, /obj/item/weapon/defibrillator)) //To avoid weird issues from admin spawns
M.unEquip(O)
qdel(O)
@@ -327,22 +346,35 @@
if(busy)
return
if(!defib.powered)
if(req_defib && !defib.powered)
user.visible_message("<span class='notice'>[defib] beeps: Unit is unpowered.</span>")
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
return
if(!wielded)
user << "<span class='warning'>You need to wield the paddles in both hands before you can use them on someone!</span>"
if(isrobot(user))
user << "<span class='warning'>You must activate the paddles in your active module before you can use them on someone!</span>"
else
user << "<span class='warning'>You need to wield the paddles in both hands before you can use them on someone!</span>"
return
if(cooldown)
user << "<span class='warning'>[defib] is recharging!</span>"
if(req_defib)
user << "<span class='warning'>[defib] is recharging!</span>"
else
user << "<span class='warning'>[src] are recharging!</span>"
return
if(!ishuman(M))
user << "<span class='warning'>The instructions on [defib] don't mention how to revive that...</span>"
if(req_defib)
user << "<span class='warning'>The instructions on [defib] don't mention how to revive that...</span>"
else
user << "<span class='warning'>You aren't sure how to revive that...</span>"
return
else
var/mob/living/carbon/human/H = M
if(user.a_intent == "disarm" && !defib.safety)
if(user.a_intent == "disarm")
if(req_defib && defib.safety)
return
if(!req_defib && !combat)
return
busy = 1
H.visible_message("<span class='danger'>[user] has touched [H.name] with [src]!</span>", \
"<span class='userdanger'>[user] has touched [H.name] with [src]!</span>")
@@ -351,15 +383,23 @@
H.updatehealth() //forces health update before next life tick
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
H.emote("gasp")
add_logs(user, M, "stunned", defib)
defib.deductcharge(revivecost)
cooldown = 1
add_logs(user, M, "stunned", src)
if(req_defib)
defib.deductcharge(revivecost)
cooldown = 1
busy = 0
update_icon()
defib.cooldowncheck(user)
if(req_defib)
defib.cooldowncheck(user)
else
recharge(60)
return
if(user.zone_sel && user.zone_sel.selecting == "chest")
if(!defib.safety && user.a_intent == "harm")
if(user.a_intent == "harm")
if(req_defib && defib.safety)
return
if(!req_defib && !combat)
return
user.visible_message("<span class='warning'>[user] begins to place [src] on [M.name]'s chest.</span>",
"<span class='warning'>You overcharge the paddles and begin to place them onto [M]'s chest...</span>")
busy = 1
@@ -369,9 +409,16 @@
"<span class='warning'>You place [src] on [M.name]'s chest and begin to charge them.</span>")
var/turf/T = get_turf(defib)
playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0)
T.audible_message("<span class='warning'>\The [defib] lets out an urgent beep and lets out a steadily rising hum...</span>")
if(req_defib)
T.audible_message("<span class='warning'>\The [defib] lets out an urgent beep and lets out a steadily rising hum...</span>")
else
user.audible_message("<span class='warning'>[src] let out an urgent beep.</span>")
if(do_after(user, 30, target = M)) //Takes longer due to overcharging
if(M.stat == DEAD)
if(!M)
busy = 0
update_icon()
return
if(M && M.stat == DEAD)
user << "<span class='warning'>[M] is dead.</span>"
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
busy = 0
@@ -391,12 +438,15 @@
add_logs(user, M, "overloaded the heart of", defib)
M.Weaken(5)
M.Jitter(100)
defib.deductcharge(revivecost)
cooldown = 1
if(req_defib)
defib.deductcharge(revivecost)
cooldown = 1
busy = 0
update_icon()
defib.cooldowncheck(user)
return
if(!req_defib)
recharge(60)
if(req_defib && (defib.cooldowncheck(user)))
return
busy = 0
update_icon()
return
@@ -416,8 +466,8 @@
if(do_after(user, 20, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
for(var/obj/item/carried_item in H.contents)
if(istype(carried_item, /obj/item/clothing/suit/space))
if(!defib.combat)
user.visible_message("<span class='warning'>[defib] buzzes: Patient's chest is obscured. Operation aborted.</span>")
if((!src.combat && !req_defib) || (req_defib && !defib.combat))
user.audible_message("<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Patient's chest is obscured. Operation aborted.</span>")
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
busy = 0
update_icon()
@@ -431,14 +481,14 @@
var/failed = null
if (H.suiciding || (NOCLONE in H.mutations))
failed = "<span class='warning'>[defib] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile.</span>"
if (H.suiciding || (H.disabilities & NOCLONE))
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile.</span>"
else if ((tplus > tlimit) || !H.getorgan(/obj/item/organ/internal/heart))
failed = "<span class='warning'>[defib] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return. Further attempts futile.</span>"
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return. Further attempts futile.</span>"
else if(total_burn >= 180 || total_brute >= 180)
failed = "<span class='warning'>[defib] buzzes: Resuscitation failed - Severe tissue damage makes recovery of patient impossible via defibrillator. Further attempts futile.</span>"
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Severe tissue damage makes recovery of patient impossible via defibrillator. Further attempts futile.</span>"
else if(H.get_ghost() || !H.getorgan(/obj/item/organ/internal/brain))
failed = "<span class='warning'>[defib] buzzes: Resuscitation failed - No activity in patient's brain. Further attempts may be successful.</span>"
failed = "<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - No activity in patient's brain. Further attempts may be successful.</span>"
if(failed)
@@ -455,7 +505,7 @@
H.adjustToxLoss((mobhealth - halfwaycritdeath) * (H.getToxLoss() / overall_damage))
H.adjustFireLoss((mobhealth - halfwaycritdeath) * (total_burn / overall_damage))
H.adjustBruteLoss((mobhealth - halfwaycritdeath) * (total_brute / overall_damage))
user.visible_message("<span class='notice'>[defib] pings: Resuscitation successful.</span>")
user.visible_message("<span class='notice'>[req_defib ? "[defib]" : "[src]"] pings: Resuscitation successful.</span>")
playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0)
H.stat = UNCONSCIOUS
dead_mob_list -= H
@@ -464,19 +514,32 @@
if(tplus > tloss)
H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100))))
add_logs(user, M, "revived", defib)
defib.deductcharge(revivecost)
if(req_defib)
defib.deductcharge(revivecost)
cooldown = 1
update_icon()
cooldown = 1
defib.cooldowncheck(user)
if(req_defib)
defib.cooldowncheck(user)
else
recharge(60)
else if(H.heart_attack)
H.heart_attack = 0
user.visible_message("<span class='notice'>[defib] pings: Patient's heart is now beating again.</span>")
user.visible_message("<span class='notice'>[req_defib ? "[defib]" : "[src]"] pings: Patient's heart is now beating again.</span>")
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
else
user.visible_message("<span class='warning'>[defib] buzzes: Patient is not in a valid state. Operation aborted.</span>")
user.visible_message("<span class='warning'>[req_defib ? "[defib]" : "[src]"] buzzes: Patient is not in a valid state. Operation aborted.</span>")
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
busy = 0
update_icon()
else
user << "<span class='warning'>You need to target your patient's chest with [src]!</span>"
return
/obj/item/weapon/twohanded/shockpaddles/syndicate
name = "syndicate defibrillator paddles"
desc = "A pair of paddles used to revive deceased operatives. It possesses both the ability to penetrate armor and todeliver powerful shocks offensively."
combat = 1
icon = 'icons/obj/weapons.dmi'
icon_state = "defibpaddles0"
item_state = "defibpaddles0"
req_defib = 0
@@ -5,7 +5,7 @@
icon_state = "dnainjector"
throw_speed = 3
throw_range = 5
w_class = 1.0
w_class = 1
var/damage_coeff = 1
var/list/fields
@@ -17,10 +17,7 @@
/obj/item/weapon/dnainjector/proc/inject(mob/living/carbon/M, mob/user)
if(check_dna_integrity(M) && !(NOCLONE in M.mutations))
if(M.stat == DEAD) //prevents dead people from having their DNA changed
user << "<span class='notice'>You can't modify [M]'s DNA while \he's dead.</span>"
return
if(M.has_dna() && !(M.disabilities & NOCLONE))
M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2))
var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]"
for(var/datum/mutation/human/HM in remove_mutations)
@@ -38,7 +35,7 @@
M.dna.blood_type = fields["blood_type"]
if(fields["UI"]) //UI+UE
M.dna.uni_identity = merge_text(M.dna.uni_identity, fields["UI"])
updateappearance(M)
M.updateappearance(mutations_overlay_update=1)
log_attack(log_msg)
else
user << "<span class='notice'>It appears that [M] does not have compatible DNA.</span>"
@@ -139,6 +136,20 @@
..()
add_mutations.Add(mutations_list[COUGH])
/obj/item/weapon/dnainjector/antidwarf
name = "\improper DNA injector (Anti-Dwarfism)"
desc = "Helps you grow big and strong."
New()
..()
remove_mutations.Add(mutations_list[DWARFISM])
/obj/item/weapon/dnainjector/dwarf
name = "\improper DNA injector (Dwarfism)"
desc = "Its a small world after all."
New()
..()
add_mutations.Add(mutations_list[DWARFISM])
/obj/item/weapon/dnainjector/clumsymut
name = "\improper DNA injector (Clumsy)"
desc = "Makes clown minions."
@@ -8,7 +8,7 @@
icon_state = "plastic-explosive0"
item_state = "plasticx"
flags = NOBLUDGEON
w_class = 2.0
w_class = 2
origin_tech = "syndicate=2"
var/datum/wires/explosive/c4/wires = null
var/timer = 10
@@ -7,14 +7,14 @@
hitsound = 'sound/weapons/smash.ogg'
flags = CONDUCT
throwforce = 10
w_class = 3.0
w_class = 3
throw_speed = 2
throw_range = 7
force = 10
materials = list(MAT_METAL=90)
attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
var/max_water = 50
var/last_use = 1.0
var/last_use = 1
var/safety = 1
var/sprite_name = "fire_extinguisher"
var/power = 5 //Maximum distance launched water will travel
@@ -29,8 +29,8 @@
hitsound = null //it is much lighter, after all.
flags = null //doesn't CONDUCT
throwforce = 2
w_class = 2.0
force = 3.0
w_class = 2
force = 3
materials = list()
max_water = 30
sprite_name = "miniFE"
@@ -5,11 +5,11 @@
icon_state = "flamethrowerbase"
item_state = "flamethrower_0"
flags = CONDUCT
force = 3.0
throwforce = 10.0
force = 3
throwforce = 10
throw_speed = 1
throw_range = 5
w_class = 3.0
w_class = 3
materials = list(MAT_METAL=500)
origin_tech = "combat=1;plasmatech=1"
var/status = 0
@@ -39,8 +39,8 @@
/obj/item/weapon/lipstick/random,
/obj/item/weapon/grenade/smokebomb,
/obj/item/weapon/grown/corncob,
/obj/item/weapon/contraband/poster,
/obj/item/weapon/contraband/poster/legit,
/obj/item/weapon/poster/contraband,
/obj/item/weapon/poster/legit,
/obj/item/weapon/book/manual/barman_recipes,
/obj/item/weapon/book/manual/chef_recipes,
/obj/item/weapon/bikehorn,
@@ -13,9 +13,8 @@
bang(get_turf(M), M)
for(var/obj/effect/blob/B in get_hear(8,flashbang_turf)) //Blob damage here
var/damage = round(30/(get_dist(B,get_turf(src))+1))
B.health -= damage
B.update_icon()
var/damage = round(40/(get_dist(B,get_turf(src))+1))
B.take_damage(damage, BURN)
qdel(src)
/obj/item/weapon/grenade/flashbang/proc/bang(turf/T , mob/living/M)
@@ -3,7 +3,7 @@
/obj/item/weapon/grenade/iedcasing
name = "improvised firebomb"
desc = "A weak, improvised incendiary device."
w_class = 2.0
w_class = 2
icon = 'icons/obj/grenade.dmi'
icon_state = "improvised_grenade"
item_state = "flashbang"
@@ -1,7 +1,7 @@
/obj/item/weapon/grenade
name = "grenade"
desc = "It has an adjustable timer."
w_class = 2.0
w_class = 2
icon = 'icons/obj/grenade.dmi'
icon_state = "grenade"
item_state = "flashbang"
+2 -2
View File
@@ -13,7 +13,7 @@
flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 0
w_class = 2.0
w_class = 2
throw_speed = 3
throw_range = 5
materials = list(MAT_METAL=500)
@@ -152,7 +152,7 @@
icon_state = "handcuff"
flags = CONDUCT
throwforce = 0
w_class = 3.0
w_class = 3
origin_tech = "materials=1"
slowdown = 7
breakouttime = 300 //Deciseconds = 30s = 0.5 minute
@@ -79,89 +79,3 @@
. = 1
qdel(src)
return .
/obj/item/weapon/implant/tracking
name = "tracking implant"
desc = "Track with this."
activated = 0
origin_tech = "materials=2;magnets=2;programming=2;biotech=2"
var/id = 1.0
/obj/item/weapon/implant/tracking/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Tracking Beacon<BR>
<b>Life:</b> 10 minutes after death of host<BR>
<b>Important Notes:</b> None<BR>
<HR>
<b>Implant Details:</b> <BR>
<b>Function:</b> Continuously transmits low power signal. Useful for tracking.<BR>
<b>Special Features:</b><BR>
<i>Neuro-Safe</i>- Specialized shell absorbs excess voltages self-destructing the chip if
a malfunction occurs thereby securing safety of subject. The implant will melt and
disintegrate into bio-safe elements.<BR>
<b>Integrity:</b> Gradient creates slight risk of being overcharged and frying the
circuitry. As a result neurotoxins can cause massive damage.<HR>
Implant Specifics:<BR>"}
return dat
/obj/item/weapon/implant/weapons_auth
name = "firearms authentication implant"
desc = "Lets you shoot your guns"
icon_state = "auth"
origin_tech = "materials=2;magnets=2;programming=2;biotech=5;syndicate=5"
activated = 0
/obj/item/weapon/implant/weapons_auth/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Firearms Authentication Implant<BR>
<b>Life:</b> 4 hours after death of host<BR>
<b>Implant Details:</b> <BR>
<b>Function:</b> Allows operation of implant-locked weaponry, preventing equipment from falling into enemy hands."}
return dat
/obj/item/weapon/implant/adrenalin
name = "adrenal implant"
desc = "Removes all stuns and knockdowns."
icon_state = "adrenal"
origin_tech = "materials=2;biotech=4;combat=3;syndicate=4"
uses = 3
/obj/item/weapon/implant/adrenalin/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Cybersun Industries Adrenaline Implant<BR>
<b>Life:</b> Five days.<BR>
<b>Important Notes:</b> <font color='red'>Illegal</font><BR>
<HR>
<b>Implant Details:</b> Subjects injected with implant can activate an injection of medical cocktails.<BR>
<b>Function:</b> Removes stuns, increases speed, and has a mild healing effect.<BR>
<b>Integrity:</b> Implant can only be used three times before reserves are depleted."}
return dat
/obj/item/weapon/implant/adrenalin/activate()
if(uses < 1) return 0
uses--
imp_in << "<span class='notice'>You feel a sudden surge of energy!</span>"
imp_in.SetStunned(0)
imp_in.SetWeakened(0)
imp_in.SetParalysis(0)
imp_in.adjustStaminaLoss(-75)
imp_in.lying = 0
imp_in.update_canmove()
imp_in.reagents.add_reagent("synaptizine", 10)
imp_in.reagents.add_reagent("omnizine", 10)
imp_in.reagents.add_reagent("stimulants", 10)
/obj/item/weapon/implant/emp
name = "emp implant"
desc = "Triggers an EMP."
icon_state = "emp"
origin_tech = "materials=2;biotech=3;magnets=4;syndicate=4"
uses = 2
/obj/item/weapon/implant/emp/activate()
if (src.uses < 1) return 0
src.uses--
empulse(imp_in, 3, 5)
@@ -24,6 +24,14 @@
/obj/item/weapon/implant/chem/New()
..()
create_reagents(50)
tracked_implants += src
/obj/item/weapon/implant/chem/Destroy()
..()
tracked_implants -= src
/obj/item/weapon/implant/chem/trigger(emote, mob/source)
if(emote == "deathgasp")
@@ -0,0 +1,61 @@
/obj/item/weapon/implant/weapons_auth
name = "firearms authentication implant"
desc = "Lets you shoot your guns"
icon_state = "auth"
origin_tech = "materials=2;magnets=2;programming=2;biotech=5;syndicate=5"
activated = 0
/obj/item/weapon/implant/weapons_auth/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Firearms Authentication Implant<BR>
<b>Life:</b> 4 hours after death of host<BR>
<b>Implant Details:</b> <BR>
<b>Function:</b> Allows operation of implant-locked weaponry, preventing equipment from falling into enemy hands."}
return dat
/obj/item/weapon/implant/adrenalin
name = "adrenal implant"
desc = "Removes all stuns and knockdowns."
icon_state = "adrenal"
origin_tech = "materials=2;biotech=4;combat=3;syndicate=4"
uses = 3
/obj/item/weapon/implant/adrenalin/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Cybersun Industries Adrenaline Implant<BR>
<b>Life:</b> Five days.<BR>
<b>Important Notes:</b> <font color='red'>Illegal</font><BR>
<HR>
<b>Implant Details:</b> Subjects injected with implant can activate an injection of medical cocktails.<BR>
<b>Function:</b> Removes stuns, increases speed, and has a mild healing effect.<BR>
<b>Integrity:</b> Implant can only be used three times before reserves are depleted."}
return dat
/obj/item/weapon/implant/adrenalin/activate()
if(uses < 1) return 0
uses--
imp_in << "<span class='notice'>You feel a sudden surge of energy!</span>"
imp_in.SetStunned(0)
imp_in.SetWeakened(0)
imp_in.SetParalysis(0)
imp_in.adjustStaminaLoss(-75)
imp_in.lying = 0
imp_in.update_canmove()
imp_in.reagents.add_reagent("synaptizine", 10)
imp_in.reagents.add_reagent("omnizine", 10)
imp_in.reagents.add_reagent("stimulants", 10)
/obj/item/weapon/implant/emp
name = "emp implant"
desc = "Triggers an EMP."
icon_state = "emp"
origin_tech = "materials=2;biotech=3;magnets=4;syndicate=4"
uses = 2
/obj/item/weapon/implant/emp/activate()
if (src.uses < 1) return 0
src.uses--
empulse(imp_in, 3, 5)
@@ -0,0 +1,32 @@
/obj/item/weapon/implant/tracking
name = "tracking implant"
desc = "Track with this."
activated = 0
origin_tech = "materials=2;magnets=2;programming=2;biotech=2"
var/id = 1
/obj/item/weapon/implant/tracking/New()
..()
tracked_implants += src
/obj/item/weapon/implant/tracking/Destroy()
..()
tracked_implants -= src
/obj/item/weapon/implant/tracking/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Tracking Beacon<BR>
<b>Life:</b> 10 minutes after death of host<BR>
<b>Important Notes:</b> None<BR>
<HR>
<b>Implant Details:</b> <BR>
<b>Function:</b> Continuously transmits low power signal. Useful for tracking.<BR>
<b>Special Features:</b><BR>
<i>Neuro-Safe</i>- Specialized shell absorbs excess voltages self-destructing the chip if
a malfunction occurs thereby securing safety of subject. The implant will melt and
disintegrate into bio-safe elements.<BR>
<b>Integrity:</b> Gradient creates slight risk of being overcharged and frying the
circuitry. As a result neurotoxins can cause massive damage.<HR>
Implant Specifics:<BR>"}
return dat
@@ -6,7 +6,7 @@
item_state = "implantcase"
throw_speed = 2
throw_range = 5
w_class = 1.0
w_class = 1
origin_tech = "materials=1;biotech=2"
materials = list(MAT_GLASS=500)
var/obj/item/weapon/implant/imp = null
@@ -6,7 +6,7 @@
item_state = "syringe_0"
throw_speed = 3
throw_range = 5
w_class = 2.0
w_class = 2
origin_tech = "materials=1;biotech=3;programming=2"
materials = list(MAT_METAL=600, MAT_GLASS=200)
var/obj/item/weapon/implant/imp = null
@@ -6,10 +6,10 @@
item_state = "electronic"
throw_speed = 3
throw_range = 5
w_class = 2.0
w_class = 2
var/obj/item/weapon/implantcase/case = null
var/broadcasting = null
var/listening = 1.0
var/listening = 1
/obj/item/weapon/implantpad/update_icon()
+3 -3
View File
@@ -55,9 +55,9 @@
name = "wet floor sign"
icon = 'icons/obj/janitor.dmi'
icon_state = "caution"
force = 1.0
throwforce = 3.0
force = 1
throwforce = 3
throw_speed = 2
throw_range = 5
w_class = 2.0
w_class = 2
attack_verb = list("warned", "cautioned", "smashed")
+13 -12
View File
@@ -13,8 +13,8 @@
name = "fork"
desc = "Pointy."
icon_state = "fork"
force = 5.0
w_class = 1.0
force = 5
w_class = 1
throwforce = 0
throw_speed = 3
throw_range = 5
@@ -52,15 +52,16 @@
icon_state = "knife"
desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come."
flags = CONDUCT
force = 10.0
w_class = 2.0
throwforce = 10.0
force = 10
w_class = 2
throwforce = 10
hitsound = 'sound/weapons/bladeslice.ogg'
throw_speed = 3
throw_range = 6
materials = list(MAT_METAL=12000)
origin_tech = "materials=1"
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
sharpness = IS_SHARP_ACCURATE
/obj/item/weapon/kitchen/knife/suicide_act(mob/user)
user.visible_message(pick("<span class='suicide'>[user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.</span>", \
@@ -73,27 +74,27 @@
desc = "The unearthly energies that once powered this blade are now dormant."
icon = 'icons/obj/wizard.dmi'
icon_state = "render"
w_class = 3.0
w_class = 3
/obj/item/weapon/kitchen/knife/butcher
name = "butcher's cleaver"
icon_state = "butch"
desc = "A huge thing used for chopping and chopping up meat. This includes clowns and clown-by-products."
flags = CONDUCT
force = 15.0
throwforce = 8.0
force = 15
throwforce = 8
attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
w_class = 3.0
w_class = 3
/obj/item/weapon/kitchen/rollingpin
name = "rolling pin"
desc = "Used to knock out the Bartender."
icon_state = "rolling_pin"
force = 8.0
throwforce = 5.0
force = 8
throwforce = 5
throw_speed = 3
throw_range = 7
w_class = 3.0
w_class = 3
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
/* Trays moved to /obj/item/weapon/storage/bag */
@@ -6,6 +6,7 @@
var/list/attack_verb_on = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
w_class = 2
var/w_class_on = 4
heat = 3500
/obj/item/weapon/melee/energy/suicide_act(mob/user)
user.visible_message(pick("<span class='suicide'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>", \
@@ -15,11 +16,14 @@
/obj/item/weapon/melee/energy/rejects_blood()
return 1
/obj/item/weapon/melee/energy/is_sharp()
return active * sharpness
/obj/item/weapon/melee/energy/axe
name = "energy axe"
desc = "An energised battle axe."
icon_state = "axe0"
force = 40.0
force = 40
force_on = 150
throwforce = 25
throwforce_on = 30
@@ -41,8 +45,8 @@
name = "energy sword"
desc = "May the force be within you."
icon_state = "sword0"
force = 3.0
throwforce = 5.0
force = 3
throwforce = 5
hitsound = "swing_hit" //it starts deactivated
throw_speed = 3
throw_range = 5
@@ -90,8 +94,11 @@
add_fingerprint(user)
return
/obj/item/weapon/melee/energy/is_hot()
return active * heat
/obj/item/weapon/melee/energy/sword/cyborg
var/hitcost = 500
var/hitcost = 50
/obj/item/weapon/melee/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R)
if(R.cell)
@@ -103,6 +110,29 @@
..()
return
/obj/item/weapon/melee/energy/sword/cyborg/saw //Used by medical Syndicate cyborgs
name = "energy saw"
desc = "For heavy duty cutting. It has a carbon-fiber blade and an energy capacitor that can be toggled to make it more powerful."
icon_state = "esaw"
force_on = 30
force = 18 //About as much as a spear
hitsound = 'sound/weapons/circsawhit.ogg'
origin_tech = "materials=3;biotech=3;syndicate=3"
icon = 'icons/obj/surgery.dmi'
icon_state = "esaw_0"
icon_state_on = "esaw_1"
hitcost = 75 //Costs more because it's not intended to be a murderbone weapon
item_color = null
w_class = 3
sharpness = IS_SHARP
/obj/item/weapon/melee/energy/sword/cyborg/saw/New()
..()
item_color = null
/obj/item/weapon/melee/energy/sword/cyborg/saw/IsShield()
return 0
/obj/item/weapon/melee/energy/sword/saber
/obj/item/weapon/melee/energy/sword/saber/blue
@@ -172,7 +202,7 @@
throwforce = 1//Throwing or dropping the item deletes it.
throw_speed = 3
throw_range = 1
w_class = 4.0//So you can't hide it in your pocket or some such.
w_class = 4//So you can't hide it in your pocket or some such.
flags = NOSHIELD
var/datum/effect/effect/system/spark_spread/spark_system
+20 -1
View File
@@ -86,6 +86,25 @@
force = 0
on = 0
/obj/item/weapon/melee/classic_baton/telescopic/suicide_act(mob/user)
var/mob/living/carbon/human/H = user
var/obj/item/organ/internal/brain/B = H.getorgan(/obj/item/organ/internal/brain)
user.visible_message("<span class='suicide'>[user] stuffs the [src] up their nose and presses the 'extend' button! It looks like they're trying to clear their mind.</span>")
if(!on)
src.attack_self(user)
else
playsound(loc, 'sound/weapons/batonextend.ogg', 50, 1)
add_fingerprint(user)
sleep(3)
if (H && !qdeleted(H))
if (B && !qdeleted(B))
H.internal_organs -= B
qdel(B)
gibs(H.loc, H.viruses, H.dna)
return (BRUTELOSS)
return
/obj/item/weapon/melee/classic_baton/telescopic/attack_self(mob/user)
on = !on
if(on)
@@ -105,4 +124,4 @@
attack_verb = list("hit", "poked")
playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1)
add_fingerprint(user)
add_fingerprint(user)
+5 -5
View File
@@ -5,11 +5,11 @@
name = "mop"
icon = 'icons/obj/janitor.dmi'
icon_state = "mop"
force = 3.0
throwforce = 5.0
force = 3
throwforce = 5
throw_speed = 3
throw_range = 7
w_class = 3.0
w_class = 3
attack_verb = list("mopped", "bashed", "bludgeoned", "whacked")
burn_state = 0 //Burnable
var/mopping = 0
@@ -47,9 +47,9 @@ obj/item/weapon/mop/proc/clean(turf/simulated/A)
if(istype(turf))
user.visible_message("[user] begins to clean \the [turf] with [src].", "<span class='notice'>You begin to clean \the [turf] with [src]...</span>")
if(do_after(user, mopspeed, target = src))
clean(turf)
if(do_after(user, src.mopspeed, target = turf))
user << "<span class='notice'>You finish mopping.</span>"
clean(turf)
/obj/effect/attackby(obj/item/I, mob/user, params)
+1 -1
View File
@@ -9,7 +9,7 @@
icon_state = "paint_neutral"
item_color = "FFFFFF"
item_state = "paintcan"
w_class = 3.0
w_class = 3
burn_state = 0 //Burnable
burntime = 5
var/paintleft = 10
+2 -2
View File
@@ -3,8 +3,8 @@
desc = "A scroll for moving around."
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll"
var/uses = 4.0
w_class = 2.0
var/uses = 4
w_class = 2
item_state = "paper"
throw_speed = 3
throw_range = 7
+1 -1
View File
@@ -3,7 +3,7 @@
name = "blank picket sign"
desc = "It's blank"
force = 5
w_class = 4.0
w_class = 4
attack_verb = list("bashed","smacked")
burn_state = 0 //Burnable
@@ -109,7 +109,7 @@
desc = "Space Santa uses this to deliver toys to all the nice children in space in Christmas! Wow, it's pretty big!"
icon_state = "giftbag0"
item_state = "giftbag"
w_class = 4.0
w_class = 4
max_w_class = 3
max_combined_w_class = 60
@@ -292,10 +292,10 @@
icon_state = "tray"
desc = "A metal tray to lay food on."
force = 5
throwforce = 10.0
throwforce = 10
throw_speed = 3
throw_range = 5
w_class = 4.0
w_class = 4
flags = CONDUCT
materials = list(MAT_METAL=3000)
preposition = "on"
@@ -133,6 +133,7 @@
desc = "Proves to the world that you are the strongest!"
icon_state = "championbelt"
item_state = "champion"
materials = list(MAT_GOLD=400)
storage_slots = 1
can_hold = list(
/obj/item/clothing/mask/luchador
@@ -5,7 +5,7 @@
icon_state ="book"
throw_speed = 2
throw_range = 5
w_class = 3.0
w_class = 3
burn_state = 0 //Burnable
var/title = "book"
/obj/item/weapon/storage/book/attack_self(mob/user)
@@ -196,7 +196,8 @@ var/global/list/bibleitemstates = list("bible", "koran", "scrapbook", "bible", "
if (istype(A, /turf/simulated/floor))
user << "<span class='notice'>You hit the floor with the bible.</span>"
if(user.mind && (user.mind.assigned_role == "Chaplain"))
call(/obj/effect/rune/proc/revealrunes)(src)
for(var/obj/effect/rune/R in orange(2,user))
R.invisibility = 0
if(user.mind && (user.mind.assigned_role == "Chaplain"))
if(A.reagents && A.reagents.has_reagent("water")) //blesses all the water in the holder
user << "<span class='notice'>You bless [A].</span>"
@@ -3,11 +3,11 @@
desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional."
icon_state = "briefcase"
flags = CONDUCT
force = 8.0
force = 8
hitsound = "swing_hit"
throw_speed = 2
throw_range = 4
w_class = 4.0
w_class = 4
max_w_class = 3
max_combined_w_class = 21
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
@@ -124,7 +124,7 @@
return
var/obj/item/clothing/mask/cigarette/cig = locate(/obj/item/clothing/mask/cigarette) in contents
if(cig)
if(M == user && user.zone_sel.selecting == "mouth" && contents.len > 0 && !user.wear_mask)
if(M == user && contents.len > 0 && !user.wear_mask)
var/obj/item/clothing/mask/cigarette/W = cig
remove_from_storage(W, M)
M.equip_to_slot_if_possible(W, slot_wear_mask)
@@ -134,7 +134,7 @@
icon_state = "pill_canister"
icon = 'icons/obj/chemical.dmi'
item_state = "contsolid"
w_class = 2.0
w_class = 2
can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice)
allow_quick_gather = 1
use_to_pickup = 1
@@ -23,7 +23,7 @@
var/l_hacking = 0
var/emagged = 0
var/open = 0
w_class = 3.0
w_class = 3
max_w_class = 2
max_combined_w_class = 14
@@ -149,11 +149,11 @@
icon_state = "secure"
item_state = "sec-case"
desc = "A large briefcase with a digital locking system."
force = 8.0
force = 8
hitsound = "swing_hit"
throw_speed = 2
throw_range = 4
w_class = 4.0
w_class = 4
max_w_class = 3
max_combined_w_class = 21
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
@@ -182,7 +182,7 @@
//Syndie variant of Secure Briefcase. Contains space cash, slightly more robust.
/obj/item/weapon/storage/secure/briefcase/syndie
force = 15.0
force = 15
/obj/item/weapon/storage/secure/briefcase/syndie/New()
for(var/i = 0, i < storage_slots - 2, i++)
@@ -201,10 +201,10 @@
icon_opened = "safe0"
icon_locking = "safeb"
icon_sparking = "safespark"
force = 8.0
w_class = 8.0
force = 8
w_class = 8
max_w_class = 8
anchored = 1.0
anchored = 1
density = 0
cant_hold = list(/obj/item/weapon/storage/secure/briefcase)
@@ -8,7 +8,7 @@
/obj/item/weapon/storage
name = "storage"
icon = 'icons/obj/storage.dmi'
w_class = 3.0
w_class = 3
var/silent = 0 // No message on putting items in
var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else)
var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set)
@@ -312,7 +312,7 @@
usr << "<span class='notice'>You put [W] [preposition]to [src].</span>"
else if(in_range(M, usr)) //If someone is standing close enough, they can tell what it is...
M.show_message("<span class='notice'>[usr] puts [W] [preposition]to [src].</span>", 1)
else if(W && W.w_class >= 3.0) //Otherwise they can only see large or normal items from a distance...
else if(W && W.w_class >= 3) //Otherwise they can only see large or normal items from a distance...
M.show_message("<span class='notice'>[usr] puts [W] [preposition]to [src].</span>", 1)
orient2hud(usr)
@@ -10,6 +10,7 @@
throw_speed = 2
throw_range = 7
w_class = 4
materials = list(MAT_METAL = 500)
origin_tech = "combat=1"
attack_verb = list("robusted")
hitsound = 'sound/weapons/smash.ogg'
@@ -103,4 +104,4 @@
/obj/item/weapon/storage/toolbox/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] robusts \himself with the toolbox! It looks like \he's trying to commit suicide..</span>")
return (BRUTELOSS)
return (BRUTELOSS)

Some files were not shown because too many files have changed in this diff Show More