Merge branch 'master' into Hallucinations3.0

This commit is contained in:
XDTM
2017-07-18 22:04:13 +02:00
committed by GitHub
1260 changed files with 4359 additions and 6679 deletions
+7 -7
View File
@@ -110,8 +110,8 @@
/obj/effect/anomaly/grav/Collide(mob/A)
gravShock(A)
/obj/effect/anomaly/grav/Bumped(mob/A)
gravShock(A)
/obj/effect/anomaly/grav/CollidedWith(atom/movable/AM)
gravShock(AM)
/obj/effect/anomaly/grav/proc/gravShock(mob/living/A)
if(boing && isliving(A) && !A.stat)
@@ -146,8 +146,8 @@
/obj/effect/anomaly/flux/Collide(mob/living/M)
mobShock(M)
/obj/effect/anomaly/flux/Bumped(mob/living/M)
mobShock(M)
/obj/effect/anomaly/flux/CollidedWith(atom/movable/AM)
mobShock(AM)
/obj/effect/anomaly/flux/proc/mobShock(mob/living/M)
if(canshock && istype(M))
@@ -188,9 +188,9 @@
for(var/mob/living/M in range(1,src))
do_teleport(M, locate(M.x, M.y, M.z), 4)
/obj/effect/anomaly/bluespace/Bumped(atom/A)
if(isliving(A))
do_teleport(A, locate(A.x, A.y, A.z), 8)
/obj/effect/anomaly/bluespace/CollidedWith(atom/movable/AM)
if(isliving(AM))
do_teleport(AM, locate(AM.x, AM.y, AM.z), 8)
/obj/effect/anomaly/bluespace/detonate()
var/turf/T = safepick(get_area_turfs(impact_area))
+3 -7
View File
@@ -19,16 +19,12 @@
LAZYREMOVE(AllTeleporters, src)
return ..()
/obj/effect/bump_teleporter/Bumped(atom/user)
if(!ismob(user))
//user.loc = src.loc //Stop at teleporter location
/obj/effect/bump_teleporter/CollidedWith(atom/movable/AM)
if(!ismob(AM))
return
if(!id_target)
//user.loc = src.loc //Stop at teleporter location, there is nowhere to teleport to.
return
for(var/obj/effect/bump_teleporter/BT in AllTeleporters)
if(BT.id == src.id_target)
usr.loc = BT.loc //Teleport to location with correct id.
return
AM.forceMove(BT.loc) //Teleport to location with correct id.
+1 -1
View File
@@ -123,7 +123,7 @@
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))
if(istype(O, /obj/structure/sign/poster))
to_chat(user, "<span class='warning'>The wall is far too cluttered to place a poster!</span>")
return
stuff_on_wall++
@@ -6,17 +6,10 @@
icon = 'icons/effects/blood.dmi'
icon_state = "xfloor1"
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)
D.cure(0)
viruses = null
return ..()
/obj/effect/decal/cleanable/xenoblood/xsplatter
random_icon_states = list("xgibbl1", "xgibbl2", "xgibbl3", "xgibbl4", "xgibbl5")
@@ -34,13 +27,9 @@
var/direction = pick(directions)
for(var/i = 0, i < pick(1, 200; 2, 150; 3, 50), i++)
sleep(2)
if (i > 0)
var/obj/effect/decal/cleanable/xenoblood/b = new /obj/effect/decal/cleanable/xenoblood/xsplatter(src.loc)
for(var/datum/disease/D in src.viruses)
var/datum/disease/ND = D.Copy(1)
b.viruses += ND
ND.holder = b
if (!step_to(src, get_step(src, direction), 0))
if(i > 0)
new /obj/effect/decal/cleanable/xenoblood/xsplatter(loc)
if(!step_to(src, get_step(src, direction), 0))
break
/obj/effect/decal/cleanable/xenoblood/xgibs/ex_act()
@@ -4,17 +4,10 @@
icon = 'icons/effects/blood.dmi'
icon_state = "floor1"
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)
D.cure(0)
viruses = null
return ..()
/obj/effect/decal/cleanable/blood/replace_decal(obj/effect/decal/cleanable/blood/C)
if (C.blood_DNA)
blood_DNA |= C.blood_DNA.Copy()
@@ -70,15 +63,11 @@
/obj/effect/decal/cleanable/blood/gibs/proc/streak(list/directions)
set waitfor = 0
var/direction = pick(directions)
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50), i++)
for(var/i = 0, i < pick(1, 200; 2, 150; 3, 50), i++)
sleep(2)
if (i > 0)
var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
for(var/datum/disease/D in src.viruses)
var/datum/disease/ND = D.Copy(1)
b.viruses += ND
ND.holder = b
if (!step_to(src, get_step(src, direction), 0))
if(i > 0)
new /obj/effect/decal/cleanable/blood/splatter(loc)
if(!step_to(src, get_step(src, direction), 0))
break
/obj/effect/decal/cleanable/blood/gibs/up
@@ -80,9 +80,8 @@
icon = 'icons/effects/blood.dmi'
icon_state = "vomit_1"
random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4")
var/list/viruses = list()
/obj/effect/decal/cleanable/vomit/attack_hand(var/mob/user)
/obj/effect/decal/cleanable/vomit/attack_hand(mob/user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(isflyperson(H))
@@ -98,12 +97,6 @@
reagents.trans_to(H, reagents.total_volume)
qdel(src)
/obj/effect/decal/cleanable/vomit/Destroy()
for(var/datum/disease/D in viruses)
D.cure(0)
viruses = null
return ..()
/obj/effect/decal/cleanable/vomit/old
name = "crusty dried vomit"
desc = "You try not to look at the chunks, and fail."
@@ -43,7 +43,6 @@
desc = "It's black and greasy. Looks like Beepsky made another mess."
icon = 'icons/mob/robots.dmi'
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
@@ -52,11 +51,5 @@
..()
reagents.add_reagent("oil", 30)
/obj/effect/decal/cleanable/oil/Destroy()
for(var/datum/disease/D in viruses)
D.cure(0)
viruses = null
return ..()
/obj/effect/decal/cleanable/oil/streak
random_icon_states = list("streak1", "streak2", "streak3", "streak4", "streak5")
@@ -6,8 +6,8 @@
var/list/gibamounts = list() //amount to spawn for each gib decal type we'll spawn.
var/list/gibdirections = list() //of lists of possible directions to spread each gib decal type towards.
/obj/effect/gibspawner/Initialize(mapload, list/viruses, datum/dna/MobDNA)
..()
/obj/effect/gibspawner/Initialize(mapload, datum/dna/MobDNA)
. = ..()
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
to_chat(world, "<span class='danger'>Gib list length mismatch!</span>")
@@ -29,13 +29,6 @@
var/mob/living/carbon/digester = loc
digester.stomach_contents += gib
if(viruses && viruses.len > 0)
for(var/datum/disease/D in viruses)
if(prob(virusProb))
var/datum/disease/viruus = D.Copy(1)
gib.viruses += viruus
viruus.holder = gib
if(MobDNA)
gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.blood_type
else if(istype(src, /obj/effect/gibspawner/generic)) // Probably a monkey
@@ -50,53 +43,53 @@
/obj/effect/gibspawner/generic
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core)
gibamounts = list(2,2,1)
/obj/effect/gibspawner/generic/Initialize()
playsound(src, 'sound/effects/blobattack.ogg', 40, 1)
gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list())
..()
. = ..()
/obj/effect/gibspawner/human
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/up,/obj/effect/decal/cleanable/blood/gibs/down,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/body,/obj/effect/decal/cleanable/blood/gibs/limb,/obj/effect/decal/cleanable/blood/gibs/core)
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/up, /obj/effect/decal/cleanable/blood/gibs/down, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/body, /obj/effect/decal/cleanable/blood/gibs/limb, /obj/effect/decal/cleanable/blood/gibs/core)
gibamounts = list(1,1,1,1,1,1,1)
/obj/effect/gibspawner/human/Initialize()
playsound(src, 'sound/effects/blobattack.ogg', 50, 1)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list())
..()
. = ..()
/obj/effect/gibspawner/humanbodypartless //only the gibs that don't look like actual full bodyparts (except torso).
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core,/obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/torso)
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/torso)
gibamounts = list(1, 1, 1, 1, 1, 1)
/obj/effect/gibspawner/humanbodypartless/Initialize()
playsound(src, 'sound/effects/blobattack.ogg', 50, 1)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list())
..()
. = ..()
/obj/effect/gibspawner/xeno
gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/up,/obj/effect/decal/cleanable/xenoblood/xgibs/down,/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/body, /obj/effect/decal/cleanable/xenoblood/xgibs/limb, /obj/effect/decal/cleanable/xenoblood/xgibs/core)
gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/up, /obj/effect/decal/cleanable/xenoblood/xgibs/down, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/body, /obj/effect/decal/cleanable/xenoblood/xgibs/limb, /obj/effect/decal/cleanable/xenoblood/xgibs/core)
gibamounts = list(1,1,1,1,1,1,1)
/obj/effect/gibspawner/xeno/Initialize()
playsound(src, 'sound/effects/blobattack.ogg', 60, 1)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list())
..()
. = ..()
/obj/effect/gibspawner/xenobodypartless //only the gibs that don't look like actual full bodyparts (except torso).
gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/core,/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/core, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/torso)
gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/core, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/core, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/torso)
gibamounts = list(1, 1, 1, 1, 1, 1)
/obj/effect/gibspawner/xenobodypartless/Initialize()
playsound(src, 'sound/effects/blobattack.ogg', 60, 1)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list())
..()
. = ..()
/obj/effect/gibspawner/larva
gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva/body, /obj/effect/decal/cleanable/xenoblood/xgibs/larva/body)
@@ -105,7 +98,7 @@
/obj/effect/gibspawner/larva/Initialize()
playsound(src, 'sound/effects/blobattack.ogg', 60, 1)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST), list(), GLOB.alldirs)
..()
. = ..()
/obj/effect/gibspawner/larvabodypartless
gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva)
@@ -114,14 +107,14 @@
/obj/effect/gibspawner/larvabodypartless/Initialize()
playsound(src, 'sound/effects/blobattack.ogg', 60, 1)
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST), list())
..()
. = ..()
/obj/effect/gibspawner/robot
sparks = 1
gibtypes = list(/obj/effect/decal/cleanable/robot_debris/up,/obj/effect/decal/cleanable/robot_debris/down,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris/limb)
gibtypes = list(/obj/effect/decal/cleanable/robot_debris/up, /obj/effect/decal/cleanable/robot_debris/down, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris/limb)
gibamounts = list(1,1,1,1,1,1)
/obj/effect/gibspawner/robot/Initialize()
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs)
gibamounts[6] = pick(0,1,2)
..()
. = ..()
+2 -2
View File
@@ -312,7 +312,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
// I have cleaned it up a little, but it could probably use more. -Sayu
// The lack of ..() is intentional, do not add one
/obj/item/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W,/obj/item/weapon/storage))
if(istype(W, /obj/item/weapon/storage))
var/obj/item/weapon/storage/S = W
if(S.use_to_pickup)
if(S.collection_mode) //Mode is set to collect multiple items on a tile and we clicked on a valid one.
@@ -567,7 +567,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
/obj/item/proc/remove_item_from_storage(atom/newLoc) //please use this if you're going to snowflake an item out of a obj/item/weapon/storage
if(!newLoc)
return 0
if(istype(loc,/obj/item/weapon/storage))
if(istype(loc, /obj/item/weapon/storage))
var/obj/item/weapon/storage/S = loc
S.remove_from_storage(src,newLoc)
return 1
+1 -1
View File
@@ -562,7 +562,7 @@
self_contained = FALSE // Don't disappear when they're empty
can_change_colour = TRUE
validSurfaces = list(/turf/open/floor,/turf/closed/wall)
validSurfaces = list(/turf/open/floor, /turf/closed/wall)
reagent_contents = list("welding_fuel" = 1, "ethanol" = 1)
pre_noise = TRUE
@@ -144,12 +144,13 @@
update_icon()
/obj/item/device/geiger_counter/emag_act(mob/user)
if(!emagged)
if(scanning)
to_chat(user, "<span class='warning'>Turn off [src] before you perform this action!</span>")
return 0
to_chat(user, "<span class='warning'>You override [src]'s radiation storing protocols. It will now generate small doses of radiation, and stored rads are now projected into creatures you scan.</span>")
emagged = TRUE
if(emagged)
return
if(scanning)
to_chat(user, "<span class='warning'>Turn off [src] before you perform this action!</span>")
return 0
to_chat(user, "<span class='warning'>You override [src]'s radiation storing protocols. It will now generate small doses of radiation, and stored rads are now projected into creatures you scan.</span>")
emagged = TRUE
#undef RAD_LEVEL_NORMAL
#undef RAD_LEVEL_MODERATE
+75 -6
View File
@@ -6,12 +6,11 @@
icon = 'icons/obj/musician.dmi'
var/datum/song/handheld/song
var/instrumentId = "generic"
var/instrumentExt = "ogg"
var/instrumentExt = "mid"
/obj/item/device/instrument/New()
song = new(instrumentId, src)
song.instrumentExt = instrumentExt
..()
/obj/item/device/instrument/Initialize()
. = ..()
song = new(instrumentId, src, instrumentExt)
/obj/item/device/instrument/Destroy()
qdel(song)
@@ -61,16 +60,24 @@
/obj/item/device/instrument/piano_synth
name = "synthesizer"
desc = "An electronic synthesizer that can play piano music."
desc = "An advanced electronic synthesizer that can be used as various instruments."
icon_state = "synth"
item_state = "synth"
instrumentId = "piano"
instrumentExt = "ogg"
var/static/list/insTypes = list("accordion" = "mid", "bikehorn" = "ogg", "glockenspiel" = "mid", "guitar" = "ogg", "harmonica" = "mid", "piano" = "ogg", "recorder" = "mid", "saxophone" = "mid", "trombone" = "mid", "violin" = "mid", "xylophone" = "mid") //No eguitar you ear-rapey fuckers.
actions_types = list(/datum/action/item_action/synthswitch)
/obj/item/device/instrument/piano_synth/proc/changeInstrument(name = "piano")
song.instrumentDir = name
song.instrumentExt = insTypes[name]
/obj/item/device/instrument/guitar
name = "guitar"
desc = "It's made of wood and has bronze strings."
icon_state = "guitar"
item_state = "guitar"
instrumentExt = "ogg"
force = 10
attack_verb = list("played metal on", "serenaded", "crashed", "smashed")
hitsound = 'sound/weapons/stringsmash.ogg'
@@ -85,3 +92,65 @@
attack_verb = list("played metal on", "shredded", "crashed", "smashed")
hitsound = 'sound/weapons/stringsmash.ogg'
instrumentId = "eguitar"
instrumentExt = "ogg"
/obj/item/device/instrument/glockenspiel
name = "glockenspiel"
desc = "Smooth metal bars perfect for any marching band."
icon_state = "glockenspiel"
item_state = "glockenspiel"
instrumentId = "glockenspiel"
/obj/item/device/instrument/accordion
name = "accordion"
desc = "Pun-Pun not included."
icon_state = "accordion"
item_state = "accordion"
instrumentId = "accordion"
/obj/item/device/instrument/saxophone
name = "saxophone"
desc = "This soothing sound will be sure to leave your audience in tears."
icon_state = "saxophone"
item_state = "saxophone"
instrumentId = "saxophone"
/obj/item/device/instrument/trombone
name = "trombone"
desc = "How can any pool table ever hope to compete?"
icon_state = "trombone"
item_state = "trombone"
instrumentId = "trombone"
/obj/item/device/instrument/recorder
name = "recorder"
desc = "Just like in school, playing ability and all."
icon_state = "recorder"
item_state = "recorder"
instrumentId = "recorder"
/obj/item/device/instrument/harmonica
name = "harmonica"
desc = "For when you get a bad case of the space blues."
icon_state = "harmonica"
item_state = "harmonica"
instrumentId = "harmonica"
slot_flags = SLOT_MASK
force = 5
w_class = WEIGHT_CLASS_SMALL
actions_types = list(/datum/action/item_action/instrument)
/obj/item/device/instrument/bikehorn
name = "gilded bike horn"
desc = "An exquisitely decorated bike horn, capable of honking in a variety of notes."
icon_state = "bike_horn"
item_state = "bike_horn"
attack_verb = list("beautifully honks")
instrumentId = "bikehorn"
instrumentExt = "ogg"
w_class = WEIGHT_CLASS_TINY
force = 0
throw_speed = 3
throw_range = 15
hitsound = 'sound/items/bikehorn.ogg'
@@ -122,7 +122,7 @@
var/replaced_something = TRUE
for(var/obj/item/I in S.contents)
if(istype(I,/obj/item/weapon/light))
if(istype(I, /obj/item/weapon/light))
var/obj/item/weapon/light/L = I
found_lightbulbs = TRUE
if(src.uses >= max_uses)
@@ -148,8 +148,9 @@
to_chat(user, "<span class='notice'>You fill \the [src] with lights from \the [S]. " + status_string() + "</span>")
/obj/item/device/lightreplacer/emag_act()
if(!emagged)
Emag()
if(emagged)
return
Emag()
/obj/item/device/lightreplacer/attack_self(mob/user)
to_chat(user, status_string())
@@ -18,6 +18,8 @@
return voicespan
/obj/item/device/megaphone/emag_act(mob/user)
if(emagged)
return
to_chat(user, "<span class='warning'>You overload \the [src]'s voice synthesizer.</span>")
emagged = TRUE
voicespan = list(SPAN_REALLYBIG, "userdanger")
@@ -23,7 +23,7 @@
if(!proximity_flag)
return
if(!istype(A,/obj/machinery/atmospherics/pipe))
if(!istype(A, /obj/machinery/atmospherics/pipe))
return
var/obj/machinery/atmospherics/pipe/P = A
+2 -1
View File
@@ -174,7 +174,8 @@ MASS SPECTROMETER
if(tdelta < (DEFIB_TIME_LIMIT * 10))
to_chat(user, "<span class='danger'>Subject died [tdelta / 10] seconds ago, defibrillation may be possible!</span>")
for(var/datum/disease/D in M.viruses)
for(var/thing in M.viruses)
var/datum/disease/D = thing
if(!(D.visibility_flags & HIDDEN_SCANNER))
to_chat(user, "<span class='alert'><b>Warning: [D.form] detected</b>\nName: [D.name].\nType: [D.spread_text].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]</span>")
+1 -1
View File
@@ -283,7 +283,7 @@
O.lockcharge = TRUE
O.update_canmove()
else if(istype(W,/obj/item/weapon/pen))
else if(istype(W, /obj/item/weapon/pen))
to_chat(user, "<span class='warning'>You need to use a multitool to name [src]!</span>")
else
return ..()
+1 -1
View File
@@ -55,7 +55,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
if (!R && replace)
user.put_in_hands(new_item)
else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks))
else if(istype(W, /obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/S = W
if(amount != 1)
to_chat(user, "<span class='warning'>You must use a single rod!</span>")
@@ -14,7 +14,7 @@
/obj/item/stack/light_w/attackby(obj/item/O, mob/user, params)
if(istype(O,/obj/item/weapon/wirecutters))
if(istype(O, /obj/item/weapon/wirecutters))
var/obj/item/stack/cable_coil/CC = new (user.loc)
CC.amount = 5
CC.add_fingerprint(user)
@@ -86,7 +86,7 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \
w_class = WEIGHT_CLASS_TINY
/obj/item/weapon/emptysandbag/attackby(obj/item/W, mob/user, params)
if(istype(W,/obj/item/weapon/ore/glass))
if(istype(W, /obj/item/weapon/ore/glass))
to_chat(user, "<span class='notice'>You fill the sandbag.</span>")
var/obj/item/stack/sheet/mineral/sandbags/I = new /obj/item/stack/sheet/mineral/sandbags
qdel(src)
@@ -312,7 +312,7 @@ GLOBAL_LIST_INIT(plastitanium_recipes, list ( \
origin_tech = "materials=1"
GLOBAL_LIST_INIT(snow_recipes, list ( \
new/datum/stack_recipe("Snow Wall",/turf/closed/wall/mineral/snow, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("Snow Wall", /turf/closed/wall/mineral/snow, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("Snowman", /obj/structure/statue/snow/snowman, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("Snowball", /obj/item/toy/snowball, 1), \
))
@@ -20,7 +20,7 @@
state = 0 //fine
/obj/item/stack/tile/light/attackby(obj/item/O, mob/user, params)
if(istype(O,/obj/item/weapon/crowbar))
if(istype(O, /obj/item/weapon/crowbar))
new/obj/item/stack/sheet/metal(user.loc)
amount--
new/obj/item/stack/light_w(user.loc)
+1 -1
View File
@@ -237,7 +237,7 @@
w_class = WEIGHT_CLASS_SMALL
add_fingerprint(user)
// Copied from /obj/item/weapon/melee/energy/sword/attackby
// Copied from /obj/item/weapon/melee/transforming/energy/sword/attackby
/obj/item/toy/sword/attackby(obj/item/weapon/W, mob/living/user, params)
if(istype(W, /obj/item/toy/sword))
if((W.flags & NODROP) || (flags & NODROP))
+3 -3
View File
@@ -518,7 +518,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
/obj/item/weapon/pipe_dispenser/pre_attackby(atom/A, mob/user)
if(!user.IsAdvancedToolUser() || istype(A,/turf/open/space/transit))
if(!user.IsAdvancedToolUser() || istype(A, /turf/open/space/transit))
return ..()
//make sure what we're clicking is valid for the current mode
@@ -570,8 +570,8 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
new /obj/item/pipe_meter(A)
if(DISPOSALS_MODE) //Making disposals pipes
if(is_anchored_dense_turf(A))
to_chat(user, "<span class='warning'>The [src]'s error light flickers; there's something in the way!</span>")
if(isclosedturf(A))
to_chat(user, "<span class='warning'>[src]'s error light flickers; there's something in the way!</span>")
return
to_chat(user, "<span class='notice'>You start building a disposals pipe...</span>")
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
+12 -12
View File
@@ -145,7 +145,7 @@ update_label("John Doe", "Clowny")
/obj/item/weapon/card/id/syndicate
name = "agent card"
access = list(GLOB.access_maint_tunnels, GLOB.access_syndicate)
access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE)
origin_tech = "syndicate=1"
var/anyone = FALSE //Can anyone forge the ID or just syndicate?
@@ -195,7 +195,7 @@ update_label("John Doe", "Clowny")
desc = "An ID straight from the Syndicate."
registered_name = "Syndicate"
assignment = "Syndicate Overlord"
access = list(GLOB.access_syndicate)
access = list(ACCESS_SYNDICATE)
/obj/item/weapon/card/id/captains_spare
name = "captain's spare ID"
@@ -229,7 +229,7 @@ update_label("John Doe", "Clowny")
assignment = "Emergency Response Team Commander"
/obj/item/weapon/card/id/ert/Initialize()
access = get_all_accesses()+get_ert_access("commander")-GLOB.access_change_ids
access = get_all_accesses()+get_ert_access("commander")-ACCESS_CHANGE_IDS
..()
/obj/item/weapon/card/id/ert/Security
@@ -237,7 +237,7 @@ update_label("John Doe", "Clowny")
assignment = "Security Response Officer"
/obj/item/weapon/card/id/ert/Security/Initialize()
access = get_all_accesses()+get_ert_access("sec")-GLOB.access_change_ids
access = get_all_accesses()+get_ert_access("sec")-ACCESS_CHANGE_IDS
..()
/obj/item/weapon/card/id/ert/Engineer
@@ -245,7 +245,7 @@ update_label("John Doe", "Clowny")
assignment = "Engineer Response Officer"
/obj/item/weapon/card/id/ert/Engineer/Initialize()
access = get_all_accesses()+get_ert_access("eng")-GLOB.access_change_ids
access = get_all_accesses()+get_ert_access("eng")-ACCESS_CHANGE_IDS
..()
/obj/item/weapon/card/id/ert/Medical
@@ -253,7 +253,7 @@ update_label("John Doe", "Clowny")
assignment = "Medical Response Officer"
/obj/item/weapon/card/id/ert/Medical/Initialize()
access = get_all_accesses()+get_ert_access("med")-GLOB.access_change_ids
access = get_all_accesses()+get_ert_access("med")-ACCESS_CHANGE_IDS
..()
/obj/item/weapon/card/id/prisoner
@@ -299,26 +299,26 @@ update_label("John Doe", "Clowny")
/obj/item/weapon/card/id/mining
name = "mining ID"
access = list(GLOB.access_mining, GLOB.access_mining_station, GLOB.access_mineral_storeroom)
access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
/obj/item/weapon/card/id/away
name = "a perfectly generic identification card"
desc = "A perfectly generic identification card. Looks like it could use some flavor."
access = list(GLOB.access_away_general)
access = list(ACCESS_AWAY_GENERAL)
/obj/item/weapon/card/id/away/hotel
name = "Staff ID"
desc = "A staff ID used to access the hotel's doors."
access = list(GLOB.access_away_general, GLOB.access_away_maint)
access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINT)
/obj/item/weapon/card/id/away/hotel/securty
name = "Officer ID"
access = list(GLOB.access_away_general, GLOB.access_away_maint, GLOB.access_away_sec)
access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINT, ACCESS_AWAY_SEC)
/obj/item/weapon/card/id/away/old
name = "a perfectly generic identification card"
desc = "A perfectly generic identification card. Looks like it could use some flavor."
access = list(GLOB.access_away_general)
access = list(ACCESS_AWAY_GENERAL)
/obj/item/weapon/card/id/away/old/sec
name = "Security Officer ID"
@@ -339,4 +339,4 @@ update_label("John Doe", "Clowny")
name = "APC Access ID"
desc = "Special ID card to allow access to APCs"
icon_state = "centcom"
access = list(GLOB.access_engine_equip)
access = list(ACCESS_ENGINE_EQUIP)
@@ -60,7 +60,7 @@
//So this is a workaround. This also makes more sense from an IC standpoint. ~Carn
if(user.client && (target in user.client.screen))
to_chat(user, "<span class='warning'>You need to take that [target.name] off before cleaning it!</span>")
else if(istype(target,/obj/effect/decal/cleanable))
else if(istype(target, /obj/effect/decal/cleanable))
user.visible_message("[user] begins to scrub \the [target.name] out with [src].", "<span class='warning'>You begin to scrub \the [target.name] out with [src]...</span>")
if(do_after(user, src.cleanspeed, target = target))
to_chat(user, "<span class='notice'>You scrub \the [target.name] out.</span>")
@@ -115,7 +115,7 @@
update_icon()
return
else if(istype(W,/obj/item/weapon/tank/internals/plasma))
else if(istype(W, /obj/item/weapon/tank/internals/plasma))
if(ptank)
if(user.transferItemToLoc(W,src))
ptank.forceMove(get_turf(src))
+1 -1
View File
@@ -72,7 +72,7 @@
var/gift_type = pick(gift_type_list)
if(!ispath(gift_type,/obj/item))
if(!ispath(gift_type, /obj/item))
return
qdel(src)
@@ -193,7 +193,7 @@
name = "large grenade"
desc = "A custom made large grenade. It affects a larger area."
icon_state = "large_grenade"
allowed_containers = list(/obj/item/weapon/reagent_containers/glass,/obj/item/weapon/reagent_containers/food/condiment,
allowed_containers = list(/obj/item/weapon/reagent_containers/glass, /obj/item/weapon/reagent_containers/food/condiment,
/obj/item/weapon/reagent_containers/food/drinks)
origin_tech = "combat=3;engineering=3"
affected_area = 5
@@ -34,4 +34,4 @@
M.soundbang_act(1, 200, 10, 15)
else
M.soundbang_act(1, max(20/max(1,distance), 3), rand(0, 5))
M.soundbang_act(1, max(200/max(1,distance), 60), rand(0, 5))
@@ -228,7 +228,7 @@
return
if((istype(AM, /obj/item/weapon/storage/)) && !((istype(AM, /obj/item/weapon/storage/secure)) || (istype(AM, /obj/item/weapon/storage/lockbox)))) //If its storage but not secure storage OR a lockbox, then place it inside.
return
if((istype(AM,/obj/item/weapon/storage/secure)) || (istype(AM, /obj/item/weapon/storage/lockbox)))
if((istype(AM, /obj/item/weapon/storage/secure)) || (istype(AM, /obj/item/weapon/storage/lockbox)))
var/obj/item/weapon/storage/secure/S = AM
if(!S.locked) //Literal hacks, this works for lockboxes despite incorrect type casting, because they both share the locked var. But if its unlocked, place it inside, otherwise PLANTING C4!
return
@@ -56,7 +56,7 @@
imp_type = /obj/item/weapon/implant/chem
/obj/item/weapon/implantcase/chem/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W,/obj/item/weapon/reagent_containers/syringe) && imp)
if(istype(W, /obj/item/weapon/reagent_containers/syringe) && imp)
W.afterattack(imp, user, TRUE, params)
return TRUE
else
+2 -2
View File
@@ -60,7 +60,7 @@
/obj/item/weapon/inducer/attackby(obj/item/weapon/W, mob/user)
if(istype(W,/obj/item/weapon/screwdriver))
if(istype(W, /obj/item/weapon/screwdriver))
playsound(src, W.usesound, 50, 1)
if(!opened)
to_chat(user, "<span class='notice'>You unscrew the battery compartment.</span>")
@@ -72,7 +72,7 @@
opened = FALSE
update_icon()
return
if(istype(W,/obj/item/weapon/stock_parts/cell))
if(istype(W, /obj/item/weapon/stock_parts/cell))
if(opened)
if(!cell)
if(!user.transferItemToLoc(W, src))
+88 -125
View File
@@ -1,46 +1,63 @@
/obj/item/weapon/melee/energy
var/active = 0
var/force_on = 30 //force when active
var/throwforce_on = 20
var/icon_state_on = "axe1"
var/list/attack_verb_on = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
var/list/possible_colors
w_class = WEIGHT_CLASS_SMALL
sharpness = IS_SHARP
var/w_class_on = WEIGHT_CLASS_BULKY
/obj/item/weapon/melee/transforming/energy
hitsound_on = 'sound/weapons/blade1.ogg'
heat = 3500
max_integrity = 200
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30)
resistance_flags = FIRE_PROOF
var/brightness_on = 3
/obj/item/weapon/melee/energy/Initialize()
/obj/item/weapon/melee/transforming/energy/Initialize()
. = ..()
if(LAZYLEN(possible_colors))
item_color = pick(possible_colors)
switch(item_color)//Only run this check if the color was picked randomly, so that colors can be manually set for non-random colored energy weapons.
if("red")
light_color = LIGHT_COLOR_RED
if("green")
light_color = LIGHT_COLOR_GREEN
if("blue")
light_color = LIGHT_COLOR_LIGHT_CYAN
if("purple")
light_color = LIGHT_COLOR_LAVENDER
if(active)
set_light(brightness_on)
START_PROCESSING(SSobj, src)
/obj/item/weapon/melee/energy/suicide_act(mob/user)
/obj/item/weapon/melee/transforming/energy/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/weapon/melee/transforming/energy/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku!</span>")
return (BRUTELOSS|FIRELOSS)
/obj/item/weapon/melee/energy/add_blood(list/blood_dna)
/obj/item/weapon/melee/transforming/energy/add_blood(list/blood_dna)
return 0
/obj/item/weapon/melee/energy/is_sharp()
/obj/item/weapon/melee/transforming/energy/is_sharp()
return active * sharpness
/obj/item/weapon/melee/energy/axe
/obj/item/weapon/melee/transforming/energy/process()
open_flame()
/obj/item/weapon/melee/transforming/energy/transform_weapon(mob/living/user, supress_message_text)
. = ..()
if(.)
if(active)
if(item_color)
icon_state = "sword[item_color]"
START_PROCESSING(SSobj, src)
set_light(brightness_on)
else
STOP_PROCESSING(SSobj, src)
set_light(0)
/obj/item/weapon/melee/transforming/energy/is_hot()
return active * heat
/obj/item/weapon/melee/transforming/energy/ignition_effect(atom/A, mob/user)
if(!active)
return ""
var/in_mouth = ""
if(iscarbon(user))
var/mob/living/carbon/C = user
if(C.wear_mask == src)
in_mouth = ", barely missing their nose"
. = "<span class='warning'>[user] swings their [src][in_mouth]. They light [A] in the process.</span>"
playsound(loc, hitsound, get_clamped_volume(), 1, -1)
add_fingerprint(user)
/obj/item/weapon/melee/transforming/energy/axe
name = "energy axe"
desc = "An energized battle axe."
icon_state = "axe0"
@@ -56,21 +73,22 @@
flags = CONDUCT
armour_penetration = 100
origin_tech = "combat=4;magnets=3"
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
attack_verb_off = list("attacked", "chopped", "cleaved", "torn", "cut")
attack_verb_on = list()
light_color = "#40ceff"
/obj/item/weapon/melee/energy/axe/suicide_act(mob/user)
/obj/item/weapon/melee/transforming/energy/axe/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] swings [src] towards [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (BRUTELOSS|FIRELOSS)
/obj/item/weapon/melee/energy/sword
/obj/item/weapon/melee/transforming/energy/sword
name = "energy sword"
desc = "May the force be within you."
icon_state = "sword0"
force = 3
throwforce = 5
hitsound = "swing_hit" //it starts deactivated
attack_verb_off = list("tapped", "poked")
throw_speed = 3
throw_range = 5
sharpness = IS_SHARP
@@ -79,93 +97,30 @@
armour_penetration = 35
origin_tech = "combat=3;magnets=4;syndicate=4"
block_chance = 50
possible_colors = list("red", "blue", "green", "purple")
var/hacked = FALSE
/obj/item/weapon/melee/energy/sword/Destroy()
STOP_PROCESSING(SSobj, src)
/obj/item/weapon/melee/transforming/energy/sword/transform_weapon(mob/living/user, supress_message_text)
. = ..()
if(. && active && item_color)
icon_state = "sword[item_color]"
/obj/item/weapon/melee/energy/sword/process()
if(active)
if(hacked)
light_color = pick(LIGHT_COLOR_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER)
open_flame()
else
STOP_PROCESSING(SSobj, src)
/obj/item/weapon/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/weapon/melee/transforming/energy/sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(active)
return ..()
return 0
/obj/item/weapon/melee/energy/attack_self(mob/living/carbon/user)
if(user.disabilities & CLUMSY && prob(50))
to_chat(user, "<span class='warning'>You accidentally cut yourself with [src], like a doofus!</span>")
user.take_bodypart_damage(5,5)
active = !active
if (active)
force = force_on
throwforce = throwforce_on
hitsound = 'sound/weapons/blade1.ogg'
throw_speed = 4
if(attack_verb_on.len)
attack_verb = attack_verb_on
if(!item_color)
icon_state = icon_state_on
else
icon_state = "sword[item_color]"
w_class = w_class_on
playsound(user, 'sound/weapons/saberon.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
to_chat(user, "<span class='notice'>[src] is now active.</span>")
START_PROCESSING(SSobj, src)
set_light(brightness_on)
else
force = initial(force)
throwforce = initial(throwforce)
hitsound = initial(hitsound)
throw_speed = initial(throw_speed)
if(attack_verb_on.len)
attack_verb = list()
icon_state = initial(icon_state)
w_class = initial(w_class)
playsound(user, 'sound/weapons/saberoff.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
to_chat(user, "<span class='notice'>[src] can now be concealed.</span>")
STOP_PROCESSING(SSobj, src)
set_light(0)
add_fingerprint(user)
/obj/item/weapon/melee/energy/is_hot()
return active * heat
/obj/item/weapon/melee/energy/ignition_effect(atom/A, mob/user)
if(!active)
return ""
var/in_mouth = ""
if(iscarbon(user))
var/mob/living/carbon/C = user
if(C.wear_mask == src)
in_mouth = ", barely missing their nose"
. = "<span class='warning'>[user] swings their \
[src][in_mouth]. They light [A] in the process.</span>"
playsound(loc, hitsound, get_clamped_volume(), 1, -1)
add_fingerprint(user)
/obj/item/weapon/melee/energy/sword/cyborg
/obj/item/weapon/melee/transforming/energy/sword/cyborg
var/hitcost = 50
/obj/item/weapon/melee/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R)
/obj/item/weapon/melee/transforming/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R)
if(R.cell)
var/obj/item/weapon/stock_parts/cell/C = R.cell
if(active && !(C.use(hitcost)))
attack_self(R)
to_chat(R, "<span class='notice'>It's out of charge!</span>")
return
..()
return
return ..()
/obj/item/weapon/melee/energy/sword/cyborg/saw //Used by medical Syndicate cyborgs
/obj/item/weapon/melee/transforming/energy/sword/cyborg/saw //Used by medical Syndicate cyborgs
name = "energy saw"
desc = "For heavy duty cutting. It has a carbon-fiber blade in addition to a toggleable hard-light edge to dramatically increase sharpness."
icon_state = "esaw"
@@ -176,36 +131,44 @@
icon_state = "esaw_0"
icon_state_on = "esaw_1"
hitcost = 75 //Costs more than a standard cyborg esword
item_color = null
w_class = WEIGHT_CLASS_NORMAL
sharpness = IS_SHARP
light_color = "#40ceff"
possible_colors = null
/obj/item/weapon/melee/energy/sword/cyborg/saw/Initialize()
. = ..()
icon_state = "esaw_0"
item_color = null
/obj/item/weapon/melee/energy/sword/cyborg/saw/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
/obj/item/weapon/melee/transforming/energy/sword/cyborg/saw/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
return 0
/obj/item/weapon/melee/energy/sword/saber
/obj/item/weapon/melee/transforming/energy/sword/saber
var/list/possible_colors = list("red" = LIGHT_COLOR_RED, "blue" = LIGHT_COLOR_LIGHT_CYAN, "green" = LIGHT_COLOR_GREEN, "purple" = LIGHT_COLOR_LAVENDER)
var/hacked = FALSE
/obj/item/weapon/melee/energy/sword/saber/blue
possible_colors = list("blue")
/obj/item/weapon/melee/transforming/energy/sword/saber/Initialize(mapload)
. = ..()
if(LAZYLEN(possible_colors))
var/set_color = pick(possible_colors)
item_color = set_color
light_color = possible_colors[set_color]
/obj/item/weapon/melee/energy/sword/saber/purple
possible_colors = list("purple")
/obj/item/weapon/melee/transforming/energy/sword/saber/process()
. = ..()
if(hacked)
var/set_color = pick(possible_colors)
light_color = possible_colors[set_color]
update_light()
/obj/item/weapon/melee/energy/sword/saber/green
possible_colors = list("green")
/obj/item/weapon/melee/transforming/energy/sword/saber/red
possible_colors = list("red" = LIGHT_COLOR_RED)
/obj/item/weapon/melee/energy/sword/saber/red
possible_colors = list("red")
/obj/item/weapon/melee/transforming/energy/sword/saber/blue
possible_colors = list("blue" = LIGHT_COLOR_LIGHT_CYAN)
/obj/item/weapon/melee/transforming/energy/sword/saber/green
possible_colors = list("green" = LIGHT_COLOR_GREEN)
/obj/item/weapon/melee/energy/sword/saber/attackby(obj/item/weapon/W, mob/living/user, params)
/obj/item/weapon/melee/transforming/energy/sword/saber/purple
possible_colors = list("purple" = LIGHT_COLOR_LAVENDER)
/obj/item/weapon/melee/transforming/energy/sword/saber/attackby(obj/item/weapon/W, mob/living/user, params)
if(istype(W, /obj/item/device/multitool))
if(!hacked)
hacked = TRUE
@@ -220,21 +183,21 @@
else
return ..()
/obj/item/weapon/melee/energy/sword/pirate
/obj/item/weapon/melee/transforming/energy/sword/pirate
name = "energy cutlass"
desc = "Arrrr matey."
icon_state = "cutlass0"
icon_state_on = "cutlass1"
light_color = "#ff0000"
/obj/item/weapon/melee/energy/blade
/obj/item/weapon/melee/transforming/energy/blade
name = "energy blade"
desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal."
icon_state = "blade"
force = 30 //Normal attacks deal esword damage
force = 30 //Normal attacks deal esword damage
hitsound = 'sound/weapons/blade1.ogg'
active = 1
throwforce = 1//Throwing or dropping the item deletes it.
throwforce = 1 //Throwing or dropping the item deletes it.
throw_speed = 3
throw_range = 1
w_class = WEIGHT_CLASS_BULKY//So you can't hide it in your pocket or some such.
@@ -242,16 +205,16 @@
sharpness = IS_SHARP
//Most of the other special functions are handled in their own files. aka special snowflake code so kewl
/obj/item/weapon/melee/energy/blade/Initialize()
/obj/item/weapon/melee/transforming/energy/blade/Initialize()
. = ..()
spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
/obj/item/weapon/melee/energy/blade/attack_self(mob/user)
/obj/item/weapon/melee/transforming/energy/blade/transform_weapon(mob/living/user, supress_message_text)
return
/obj/item/weapon/melee/energy/blade/hardlight
/obj/item/weapon/melee/transforming/energy/blade/hardlight
name = "hardlight blade"
desc = "An extremely sharp blade made out of hard light. Packs quite a punch."
icon_state = "lightblade"
@@ -160,7 +160,7 @@
if (B && !QDELETED(B))
H.internal_organs -= B
qdel(B)
new /obj/effect/gibspawner/generic(H.loc, H.viruses, H.dna)
new /obj/effect/gibspawner/generic(get_turf(H), H.dna)
return (BRUTELOSS)
/obj/item/weapon/melee/classic_baton/telescopic/attack_self(mob/user)
@@ -256,13 +256,13 @@
/obj/item/weapon/melee/supermatter_sword/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] touches [src]'s blade. It looks like [user.p_theyre()] tired of waiting for the radiation to kill [user.p_them()]!</span>")
user.drop_item()
shard.Bumped(user)
shard.CollidedWith(user)
/obj/item/weapon/melee/supermatter_sword/proc/consume_everything(target)
if(isnull(target))
shard.Consume()
else if(!isturf(target))
shard.Bumped(target)
shard.CollidedWith(target)
else
consume_turf(target)
@@ -28,7 +28,7 @@
/obj/item/weapon/melee/transforming/attack(mob/living/target, mob/living/carbon/human/user)
var/nemesis_faction = FALSE
if(nemesis_factions.len)
if(LAZYLEN(nemesis_factions))
for(var/F in target.faction)
if(F in nemesis_factions)
nemesis_faction = TRUE
+1 -1
View File
@@ -20,7 +20,7 @@
if(requires_sharpness && !I.sharpness)
to_chat(user, "<span class='notice'>You can only sharpen items that are already sharp, such as knives.</span>")
return
if(istype(I, /obj/item/weapon/melee/energy))
if(istype(I, /obj/item/weapon/melee/transforming/energy))
to_chat(user, "<span class='notice'>You don't think \the [I] will be the thing getting modified if you use it on \the [src].</span>")
return
if(istype(I, /obj/item/weapon/twohanded))//some twohanded items should still be sharpenable, but handle force differently. therefore i need this stuff
@@ -45,7 +45,7 @@
step_towards(A,pull)
else if(ishuman(X))
var/mob/living/carbon/human/H = X
if(istype(H.shoes,/obj/item/clothing/shoes/magboots))
if(istype(H.shoes, /obj/item/clothing/shoes/magboots))
var/obj/item/clothing/shoes/magboots/M = H.shoes
if(M.magpulse)
continue
@@ -305,7 +305,7 @@
/obj/item/weapon/storage/backpack/satchel/flat/secret/Initialize()
..()
if(isfloorturf(loc) && !istype(loc,/turf/open/floor/plating/))
if(isfloorturf(loc) && !istype(loc, /turf/open/floor/plating/))
hide(1)
/obj/item/weapon/storage/backpack/satchel/flat/secret/hide(intact)
@@ -112,7 +112,7 @@
max_combined_w_class = 100 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class
max_w_class = WEIGHT_CLASS_NORMAL
w_class = WEIGHT_CLASS_TINY
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown,/obj/item/weapon/reagent_containers/honeycomb)
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown, /obj/item/seeds, /obj/item/weapon/grown, /obj/item/weapon/reagent_containers/honeycomb)
resistance_flags = FLAMMABLE
////////
@@ -152,7 +152,7 @@
allow_quick_empty = 1 // this function is superceded
/obj/item/weapon/storage/bag/sheetsnatcher/can_be_inserted(obj/item/W, stop_messages = 0)
if(!istype(W,/obj/item/stack/sheet) || istype(W,/obj/item/stack/sheet/mineral/sandstone) || istype(W,/obj/item/stack/sheet/mineral/wood))
if(!istype(W, /obj/item/stack/sheet) || istype(W, /obj/item/stack/sheet/mineral/sandstone) || istype(W, /obj/item/stack/sheet/mineral/wood))
if(!stop_messages)
to_chat(usr, "The snatcher does not accept [W].")
return 0 //I don't care, but the existing code rejects them for not being "sheets" *shrug* -Sayu
@@ -144,7 +144,7 @@
icon = 'icons/obj/chemical.dmi'
item_state = "contsolid"
w_class = WEIGHT_CLASS_SMALL
can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice)
can_hold = list(/obj/item/weapon/reagent_containers/pill, /obj/item/weapon/dice)
allow_quick_gather = 1
use_to_pickup = 1
@@ -7,7 +7,7 @@
max_w_class = WEIGHT_CLASS_NORMAL
max_combined_w_class = 14 //The sum of the w_classes of all the items in this storage item.
storage_slots = 4
req_access = list(GLOB.access_armory)
req_access = list(ACCESS_ARMORY)
var/locked = TRUE
var/broken = FALSE
var/open = FALSE
@@ -56,6 +56,7 @@
if(user)
visible_message("<span class='warning'>\The [src] has been broken by [user] with an electromagnetic card!</span>")
return
/obj/item/weapon/storage/lockbox/show_to(mob/user)
if(locked)
to_chat(user, "<span class='warning'>It's locked!</span>")
@@ -87,7 +88,7 @@
/obj/item/weapon/storage/lockbox/loyalty
name = "lockbox of mindshield implants"
req_access = list(GLOB.access_security)
req_access = list(ACCESS_SECURITY)
/obj/item/weapon/storage/lockbox/loyalty/PopulateContents()
for(var/i in 1 to 3)
@@ -98,7 +99,7 @@
/obj/item/weapon/storage/lockbox/clusterbang
name = "lockbox of clusterbangs"
desc = "You have a bad feeling about opening this."
req_access = list(GLOB.access_security)
req_access = list(ACCESS_SECURITY)
/obj/item/weapon/storage/lockbox/clusterbang/PopulateContents()
new /obj/item/weapon/grenade/clusterbuster(src)
@@ -112,7 +113,7 @@
max_w_class = WEIGHT_CLASS_SMALL
storage_slots = 10
max_combined_w_class = 20
req_access = list(GLOB.access_captain)
req_access = list(ACCESS_CAPTAIN)
icon_locked = "medalbox+l"
icon_closed = "medalbox"
icon_broken = "medalbox+b"
@@ -161,7 +162,7 @@
/obj/item/weapon/storage/lockbox/medal/sec
name = "security medal box"
desc = "A locked box used to store medals to be given to members of the security department."
req_access = list(GLOB.access_hos)
req_access = list(ACCESS_HOS)
/obj/item/weapon/storage/lockbox/medal/sec/PopulateContents()
for(var/i in 1 to 3)
@@ -170,7 +171,7 @@
/obj/item/weapon/storage/lockbox/medal/sci
name = "science medal box"
desc = "A locked box used to store medals to be given to members of the science department."
req_access = list(GLOB.access_rd)
req_access = list(ACCESS_RD)
/obj/item/weapon/storage/lockbox/medal/sci/PopulateContents()
for(var/i in 1 to 3)
@@ -34,7 +34,7 @@
if(!over_object)
return
if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
if (istype(usr.loc, /obj/mecha)) // stops inventory actions in a mech
return
// this must come before the screen objects only block, dunno why it wasn't before
@@ -52,7 +52,7 @@
new /obj/item/clothing/under/suit_jacket/really_black(src)
if("murder") // 28 tc now
new /obj/item/weapon/melee/energy/sword/saber(src)
new /obj/item/weapon/melee/transforming/energy/sword/saber(src)
new /obj/item/clothing/glasses/thermal/syndi(src)
new /obj/item/weapon/card/emag(src)
new /obj/item/clothing/shoes/chameleon(src)
@@ -73,10 +73,10 @@
return ..()
/obj/item/weapon/storage/wallet/random/PopulateContents()
var/item1_type = pick( /obj/item/stack/spacecash/c10,/obj/item/stack/spacecash/c100,/obj/item/stack/spacecash/c1000,/obj/item/stack/spacecash/c20,/obj/item/stack/spacecash/c200,/obj/item/stack/spacecash/c50, /obj/item/stack/spacecash/c500)
var/item1_type = pick( /obj/item/stack/spacecash/c10, /obj/item/stack/spacecash/c100, /obj/item/stack/spacecash/c1000, /obj/item/stack/spacecash/c20, /obj/item/stack/spacecash/c200, /obj/item/stack/spacecash/c50, /obj/item/stack/spacecash/c500)
var/item2_type
if(prob(50))
item2_type = pick( /obj/item/stack/spacecash/c10,/obj/item/stack/spacecash/c100,/obj/item/stack/spacecash/c1000,/obj/item/stack/spacecash/c20,/obj/item/stack/spacecash/c200,/obj/item/stack/spacecash/c50, /obj/item/stack/spacecash/c500)
item2_type = pick( /obj/item/stack/spacecash/c10, /obj/item/stack/spacecash/c100, /obj/item/stack/spacecash/c1000, /obj/item/stack/spacecash/c20, /obj/item/stack/spacecash/c200, /obj/item/stack/spacecash/c50, /obj/item/stack/spacecash/c500)
var/item3_type = pick( /obj/item/weapon/coin/silver, /obj/item/weapon/coin/silver, /obj/item/weapon/coin/gold, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron )
spawn(2)
@@ -76,7 +76,7 @@
return 1
/obj/item/weapon/tank/jetpack/suicide_act(mob/user)
if (istype(user,/mob/living/carbon/human/))
if (istype(user, /mob/living/carbon/human/))
var/mob/living/carbon/human/H = user
H.forcesay("WHAT THE FUCK IS CARBON DIOXIDE?")
H.visible_message("<span class='suicide'>[user] is suffocating [user.p_them()]self with [src]! It looks like [user.p_they()] didn't read what that jetpack says!</span>")
@@ -231,7 +231,7 @@
var/pressure = air_contents.return_pressure()
if(pressure > TANK_FRAGMENT_PRESSURE)
if(!istype(src.loc,/obj/item/device/transfer_valve))
if(!istype(src.loc, /obj/item/device/transfer_valve))
message_admins("Explosive tank rupture! Last key to touch the tank was [src.fingerprintslast].")
log_game("Explosive tank rupture! Last key to touch the tank was [src.fingerprintslast].")
//to_chat(world, "\blue[x],[y] tank is exploding: [pressure] kPa")
@@ -246,7 +246,7 @@
//to_chat(world, "\blue Exploding Pressure: [pressure] kPa, intensity: [range]")
explosion(epicenter, round(range*0.25), round(range*0.5), round(range), round(range*1.5))
if(istype(src.loc,/obj/item/device/transfer_valve))
if(istype(src.loc, /obj/item/device/transfer_valve))
qdel(src.loc)
else
qdel(src)
+3 -3
View File
@@ -225,10 +225,10 @@
if(!proximity)
return
if(wielded) //destroys windows and grilles in one hit
if(istype(A,/obj/structure/window))
if(istype(A, /obj/structure/window))
var/obj/structure/window/W = A
W.take_damage(200, BRUTE, "melee", 0)
else if(istype(A,/obj/structure/grille))
else if(istype(A, /obj/structure/grille))
var/obj/structure/grille/G = A
G.take_damage(40, BRUTE, "melee", 0)
@@ -360,7 +360,7 @@
return 1
/obj/item/weapon/twohanded/dualsaber/ignition_effect(atom/A, mob/user)
// same as /obj/item/weapon/melee/energy, mostly
// same as /obj/item/weapon/melee/transforming/energy, mostly
if(!wielded)
return ""
var/in_mouth = ""
+3 -5
View File
@@ -3,7 +3,7 @@
desc = "A bar sign with no writing on it"
icon = 'icons/obj/barsigns.dmi'
icon_state = "empty"
req_access = list(GLOB.access_bar)
req_access = list(ACCESS_BAR)
max_integrity = 500
integrity_failure = 250
armor = list(melee = 20, bullet = 20, laser = 20, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50)
@@ -118,13 +118,11 @@
if(broken || emagged)
to_chat(user, "<span class='warning'>Nothing interesting happens!</span>")
return
emagged = TRUE
to_chat(user, "<span class='notice'>You emag the barsign. Takeover in progress...</span>")
sleep(100) //10 seconds
set_sign(new /datum/barsign/hiddensigns/syndibarsign)
emagged = TRUE
req_access = list(GLOB.access_syndicate)
req_access = list(ACCESS_SYNDICATE)
/obj/structure/sign/barsign/proc/pick_sign()
@@ -49,7 +49,7 @@
var/foldabletype = /obj/item/roller
/obj/structure/bed/roller/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W,/obj/item/roller/robo))
if(istype(W, /obj/item/roller/robo))
var/obj/item/roller/robo/R = W
if(R.loaded)
to_chat(user, "<span class='warning'>You already have a roller bed docked!</span>")
@@ -245,7 +245,7 @@
/obj/item/chair/proc/plant(mob/user)
for(var/obj/A in get_turf(loc))
if(istype(A,/obj/structure/chair))
if(istype(A, /obj/structure/chair))
to_chat(user, "<span class='danger'>There is already a chair here.</span>")
return
if(A.density && !(A.flags & ON_BORDER))
@@ -415,7 +415,7 @@
user.visible_message("<span class='warning'>Sparks fly from [src]!</span>",
"<span class='warning'>You scramble [src]'s lock, breaking it open!</span>",
"<span class='italics'>You hear a faint electrical spark.</span>")
playsound(src.loc, 'sound/effects/sparks4.ogg', 50, 1)
playsound(src, "sparks", 50, 1)
broken = 1
locked = FALSE
update_icon()
@@ -63,7 +63,7 @@
for(var/i in 1 to 3)
new /obj/item/clothing/suit/armor/tdome/red(src)
for(var/i in 1 to 3)
new /obj/item/weapon/melee/energy/sword/saber(src)
new /obj/item/weapon/melee/transforming/energy/sword/saber(src)
for(var/i in 1 to 3)
new /obj/item/weapon/gun/energy/laser(src)
for(var/i in 1 to 3)
@@ -82,7 +82,7 @@
for(var/i in 1 to 3)
new /obj/item/clothing/suit/armor/tdome/green(src)
for(var/i in 1 to 3)
new /obj/item/weapon/melee/energy/sword/saber(src)
new /obj/item/weapon/melee/transforming/energy/sword/saber(src)
for(var/i in 1 to 3)
new /obj/item/weapon/gun/energy/laser(src)
for(var/i in 1 to 3)
@@ -1,6 +1,6 @@
/obj/structure/closet/secure_closet/bar
name = "booze storage"
req_access = list(GLOB.access_bar)
req_access = list(ACCESS_BAR)
icon_state = "cabinet"
resistance_flags = FLAMMABLE
max_integrity = 70
@@ -1,6 +1,6 @@
/obj/structure/closet/secure_closet/quartermaster
name = "\proper quartermaster's locker"
req_access = list(GLOB.access_qm)
req_access = list(ACCESS_QM)
icon_state = "qm"
/obj/structure/closet/secure_closet/quartermaster/PopulateContents()
@@ -1,6 +1,6 @@
/obj/structure/closet/secure_closet/engineering_chief
name = "\proper chief engineer's locker"
req_access = list(GLOB.access_ce)
req_access = list(ACCESS_CE)
icon_state = "ce"
/obj/structure/closet/secure_closet/engineering_chief/PopulateContents()
@@ -30,7 +30,7 @@
/obj/structure/closet/secure_closet/engineering_electrical
name = "electrical supplies locker"
req_access = list(GLOB.access_engine_equip)
req_access = list(ACCESS_ENGINE_EQUIP)
icon_state = "eng"
icon_door = "eng_elec"
@@ -49,7 +49,7 @@
/obj/structure/closet/secure_closet/engineering_welding
name = "welding supplies locker"
req_access = list(GLOB.access_engine_equip)
req_access = list(ACCESS_ENGINE_EQUIP)
icon_state = "eng"
icon_door = "eng_weld"
@@ -62,7 +62,7 @@
/obj/structure/closet/secure_closet/engineering_personal
name = "engineer's locker"
req_access = list(GLOB.access_engine_equip)
req_access = list(ACCESS_ENGINE_EQUIP)
icon_state = "eng_secure"
/obj/structure/closet/secure_closet/engineering_personal/PopulateContents()
@@ -78,7 +78,7 @@
/obj/structure/closet/secure_closet/atmospherics
name = "\proper atmospheric technician's locker"
req_access = list(GLOB.access_atmospherics)
req_access = list(ACCESS_ATMOSPHERICS)
icon_state = "atmos"
/obj/structure/closet/secure_closet/atmospherics/PopulateContents()
@@ -3,7 +3,7 @@
/obj/structure/closet/secure_closet/freezer/kitchen
name = "kitchen Cabinet"
req_access = list(GLOB.access_kitchen)
req_access = list(ACCESS_KITCHEN)
/obj/structure/closet/secure_closet/freezer/kitchen/PopulateContents()
..()
@@ -51,7 +51,7 @@
/obj/structure/closet/secure_closet/freezer/money
name = "freezer"
desc = "This contains cold hard cash."
req_access = list(GLOB.access_heads_vault)
req_access = list(ACCESS_HEADS_VAULT)
/obj/structure/closet/secure_closet/freezer/money/PopulateContents()
..()
@@ -65,7 +65,7 @@
/obj/structure/closet/secure_closet/freezer/cream_pie
name = "cream pie closet"
desc = "Contains pies filled with cream and/or custard, you sickos."
req_access = list(GLOB.access_theatre)
req_access = list(ACCESS_THEATRE)
/obj/structure/closet/secure_closet/freezer/pie/PopulateContents()
..()
@@ -1,6 +1,6 @@
/obj/structure/closet/secure_closet/hydroponics
name = "botanist's locker"
req_access = list(GLOB.access_hydroponics)
req_access = list(ACCESS_HYDROPONICS)
icon_state = "hydro"
/obj/structure/closet/secure_closet/hydroponics/PopulateContents()
@@ -2,7 +2,7 @@
name = "medicine closet"
desc = "Filled to the brim with medical junk."
icon_state = "med"
req_access = list(GLOB.access_medical)
req_access = list(ACCESS_MEDICAL)
/obj/structure/closet/secure_closet/medical1/PopulateContents()
..()
@@ -24,7 +24,7 @@
/obj/structure/closet/secure_closet/medical2
name = "anesthetic closet"
desc = "Used to knock people out."
req_access = list(GLOB.access_surgery)
req_access = list(ACCESS_SURGERY)
/obj/structure/closet/secure_closet/medical2/PopulateContents()
..()
@@ -35,7 +35,7 @@
/obj/structure/closet/secure_closet/medical3
name = "medical doctor's locker"
req_access = list(GLOB.access_surgery)
req_access = list(ACCESS_SURGERY)
icon_state = "med_secure"
/obj/structure/closet/secure_closet/medical3/PopulateContents()
@@ -49,7 +49,7 @@
/obj/structure/closet/secure_closet/CMO
name = "\proper chief medical officer's locker"
req_access = list(GLOB.access_cmo)
req_access = list(ACCESS_CMO)
icon_state = "cmo"
/obj/structure/closet/secure_closet/CMO/PopulateContents()
@@ -74,7 +74,7 @@
/obj/structure/closet/secure_closet/animal
name = "animal control"
req_access = list(GLOB.access_surgery)
req_access = list(ACCESS_SURGERY)
/obj/structure/closet/secure_closet/animal/PopulateContents()
..()
@@ -1,7 +1,7 @@
/obj/structure/closet/secure_closet/ertCom
name = "commander's closet"
desc = "Emergency Response Team equipment locker."
req_access = list(GLOB.access_cent_captain)
req_access = list(ACCESS_CENT_CAPTAIN)
icon_state = "cap"
/obj/structure/closet/secure_closet/ertCom/PopulateContents()
@@ -22,7 +22,7 @@
/obj/structure/closet/secure_closet/ertSec
name = "security closet"
desc = "Emergency Response Team equipment locker."
req_access = list(GLOB.access_cent_specops)
req_access = list(ACCESS_CENT_SPECOPS)
icon_state = "hos"
/obj/structure/closet/secure_closet/ertSec/PopulateContents()
@@ -36,7 +36,7 @@
/obj/structure/closet/secure_closet/ertMed
name = "medical closet"
desc = "Emergency Response Team equipment locker."
req_access = list(GLOB.access_cent_medical)
req_access = list(ACCESS_CENT_MEDICAL)
icon_state = "cmo"
/obj/structure/closet/secure_closet/ertMed/PopulateContents()
@@ -52,7 +52,7 @@
/obj/structure/closet/secure_closet/ertEngi
name = "engineer closet"
desc = "Emergency Response Team equipment locker."
req_access = list(GLOB.access_cent_storage)
req_access = list(ACCESS_CENT_STORAGE)
icon_state = "ce"
/obj/structure/closet/secure_closet/ertEngi/PopulateContents()
@@ -1,7 +1,7 @@
/obj/structure/closet/secure_closet/personal
desc = "It's a secure locker for personnel. The first card swiped gains control."
name = "personal closet"
req_access = list(GLOB.access_all_personal_lockers)
req_access = list(ACCESS_ALL_PERSONAL_LOCKERS)
var/registered_name = null
/obj/structure/closet/secure_closet/personal/PopulateContents()
@@ -1,6 +1,6 @@
/obj/structure/closet/secure_closet/RD
name = "\proper research director's locker"
req_access = list(GLOB.access_rd)
req_access = list(ACCESS_RD)
icon_state = "rd"
/obj/structure/closet/secure_closet/RD/PopulateContents()
@@ -1,6 +1,6 @@
/obj/structure/closet/secure_closet/captains
name = "\proper captain's locker"
req_access = list(GLOB.access_captain)
req_access = list(ACCESS_CAPTAIN)
icon_state = "cap"
/obj/structure/closet/secure_closet/captains/PopulateContents()
@@ -32,7 +32,7 @@
/obj/structure/closet/secure_closet/hop
name = "\proper head of personnel's locker"
req_access = list(GLOB.access_hop)
req_access = list(ACCESS_HOP)
icon_state = "hop"
/obj/structure/closet/secure_closet/hop/PopulateContents()
@@ -56,7 +56,7 @@
/obj/structure/closet/secure_closet/hos
name = "\proper head of security's locker"
req_access = list(GLOB.access_hos)
req_access = list(ACCESS_HOS)
icon_state = "hos"
/obj/structure/closet/secure_closet/hos/PopulateContents()
@@ -87,7 +87,7 @@
/obj/structure/closet/secure_closet/warden
name = "\proper warden's locker"
req_access = list(GLOB.access_armory)
req_access = list(ACCESS_ARMORY)
icon_state = "warden"
/obj/structure/closet/secure_closet/warden/PopulateContents()
@@ -111,7 +111,7 @@
/obj/structure/closet/secure_closet/security
name = "security officer's locker"
req_access = list(GLOB.access_security)
req_access = list(ACCESS_SECURITY)
icon_state = "sec"
/obj/structure/closet/secure_closet/security/PopulateContents()
@@ -159,7 +159,7 @@
/obj/structure/closet/secure_closet/detective
name = "\proper detective's cabinet"
req_access = list(GLOB.access_forensics_lockers)
req_access = list(ACCESS_FORENSICS_LOCKERS)
icon_state = "cabinet"
resistance_flags = FLAMMABLE
max_integrity = 70
@@ -186,7 +186,7 @@
/obj/structure/closet/secure_closet/injection
name = "lethal injections"
req_access = list(GLOB.access_hos)
req_access = list(ACCESS_HOS)
/obj/structure/closet/secure_closet/injection/PopulateContents()
..()
@@ -195,7 +195,7 @@
/obj/structure/closet/secure_closet/brig
name = "brig locker"
req_access = list(GLOB.access_brig)
req_access = list(ACCESS_BRIG)
anchored = TRUE
var/id = null
@@ -203,7 +203,7 @@
anchored = TRUE
name = "Secure Evidence Closet"
req_access_txt = "0"
req_one_access_txt = list(GLOB.access_armory, GLOB.access_forensics_lockers)
req_one_access_txt = list(ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS)
/obj/structure/closet/secure_closet/brig/PopulateContents()
..()
@@ -212,7 +212,7 @@
/obj/structure/closet/secure_closet/courtroom
name = "courtroom locker"
req_access = list(GLOB.access_court)
req_access = list(ACCESS_COURT)
/obj/structure/closet/secure_closet/courtroom/PopulateContents()
..()
@@ -227,16 +227,16 @@
/obj/structure/closet/secure_closet/contraband/armory
anchored = TRUE
name = "Contraband Locker"
req_access = list(GLOB.access_armory)
req_access = list(ACCESS_ARMORY)
/obj/structure/closet/secure_closet/contraband/heads
anchored = TRUE
name = "Contraband Locker"
req_access = list(GLOB.access_heads)
req_access = list(ACCESS_HEADS)
/obj/structure/closet/secure_closet/armory1
name = "armory armor locker"
req_access = list(GLOB.access_armory)
req_access = list(ACCESS_ARMORY)
icon_state = "armory"
/obj/structure/closet/secure_closet/armory1/PopulateContents()
@@ -251,7 +251,7 @@
/obj/structure/closet/secure_closet/armory2
name = "armory ballistics locker"
req_access = list(GLOB.access_armory)
req_access = list(ACCESS_ARMORY)
icon_state = "armory"
/obj/structure/closet/secure_closet/armory2/PopulateContents()
@@ -264,7 +264,7 @@
/obj/structure/closet/secure_closet/armory3
name = "armory energy gun locker"
req_access = list(GLOB.access_armory)
req_access = list(ACCESS_ARMORY)
icon_state = "armory"
/obj/structure/closet/secure_closet/armory3/PopulateContents()
@@ -278,7 +278,7 @@
/obj/structure/closet/secure_closet/tac
name = "armory tac locker"
req_access = list(GLOB.access_armory)
req_access = list(ACCESS_ARMORY)
icon_state = "tac"
/obj/structure/closet/secure_closet/tac/PopulateContents()
@@ -290,7 +290,7 @@
/obj/structure/closet/secure_closet/lethalshots
name = "shotgun lethal rounds"
req_access = list(GLOB.access_armory)
req_access = list(ACCESS_ARMORY)
icon_state = "tac"
/obj/structure/closet/secure_closet/lethalshots/PopulateContents()
+3 -3
View File
@@ -132,7 +132,7 @@
else
to_chat(user, "<span class='warning'>[src] is already in good condition!</span>")
return
else if(!alert && istype(W,/obj/item/weapon/crowbar) && openable) //Only applies to the lab cage and player made display cases
else if(!alert && istype(W, /obj/item/weapon/crowbar) && openable) //Only applies to the lab cage and player made display cases
if(broken)
if(showpiece)
to_chat(user, "<span class='notice'>Remove the displayed object first.</span>")
@@ -239,13 +239,13 @@
/obj/structure/displaycase/captain
alert = 1
start_showpiece_type = /obj/item/weapon/gun/energy/laser/captain
req_access = list(GLOB.access_cent_specops)
req_access = list(ACCESS_CENT_SPECOPS)
/obj/structure/displaycase/labcage
name = "lab cage"
desc = "A glass lab container for storing interesting creatures."
start_showpiece_type = /obj/item/clothing/mask/facehugger/lamarr
req_access = list(GLOB.access_rd)
req_access = list(ACCESS_RD)
+1 -1
View File
@@ -22,7 +22,7 @@
return ..()
/obj/structure/fireaxecabinet/attackby(obj/item/I, mob/user, params)
if(iscyborg(user) || istype(I,/obj/item/device/multitool))
if(iscyborg(user) || istype(I, /obj/item/device/multitool))
toggle_lock(user)
else if(istype(I, /obj/item/weapon/weldingtool) && user.a_intent == INTENT_HELP && !broken)
var/obj/item/weapon/weldingtool/WT = I
+1 -1
View File
@@ -38,7 +38,7 @@
return TRUE
/obj/structure/fireplace/attackby(obj/item/T, mob/user)
if(istype(T,/obj/item/stack/sheet/mineral/wood))
if(istype(T, /obj/item/stack/sheet/mineral/wood))
var/obj/item/stack/sheet/mineral/wood/wood = T
var/space_remaining = MAXIMUM_BURN_TIMER - burn_time_remaining()
var/space_for_logs = round(space_remaining / LOG_BURN_TIMER)
@@ -390,7 +390,7 @@
death = FALSE
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper_s"
id_access_list = list(GLOB.access_syndicate)
id_access_list = list(ACCESS_SYNDICATE)
outfit = /datum/outfit/syndicate_empty
assignedrole = "Space Syndicate" //I know this is really dumb, but Syndicate operative is nuke ops
@@ -442,7 +442,7 @@
/datum/outfit/syndicate_empty/SBC/assault/captain
name = "Syndicate Battlecruiser Captain"
l_pocket = /obj/item/weapon/melee/energy/sword/saber/red
l_pocket = /obj/item/weapon/melee/transforming/energy/sword/saber/red
r_pocket = /obj/item/weapon/melee/classic_baton/telescopic
suit = /obj/item/clothing/suit/armor/vest/capcarapace/syndicate
suit_store = /obj/item/weapon/gun/ballistic/revolver/mateba
+5 -5
View File
@@ -114,7 +114,7 @@
to_chat(user, "<span class='warning'>There is already a false wall present!</span>")
return
if(istype(W,/obj/item/stack/rods))
if(istype(W, /obj/item/stack/rods))
var/obj/item/stack/rods/S = W
if(state == GIRDER_DISPLACED)
if(S.get_amount() < 2)
@@ -145,11 +145,11 @@
qdel(src)
return
if(!istype(W,/obj/item/stack/sheet))
if(!istype(W, /obj/item/stack/sheet))
return
var/obj/item/stack/sheet/S = W
if(istype(S,/obj/item/stack/sheet/metal))
if(istype(S, /obj/item/stack/sheet/metal))
if(state == GIRDER_DISPLACED)
if(S.get_amount() < 2)
to_chat(user, "<span class='warning'>You need two sheets of metal to create a false wall!</span>")
@@ -179,7 +179,7 @@
qdel(src)
return
if(istype(S,/obj/item/stack/sheet/plasteel))
if(istype(S, /obj/item/stack/sheet/plasteel))
if(state == GIRDER_DISPLACED)
if(S.get_amount() < 2)
to_chat(user, "<span class='warning'>You need at least two sheets to create a false wall!</span>")
@@ -282,7 +282,7 @@
/obj/structure/girder/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal)
var/remains = pick(/obj/item/stack/rods, /obj/item/stack/sheet/metal)
new remains(loc)
qdel(src)
+5 -11
View File
@@ -49,17 +49,11 @@
new /obj/structure/grille/ratvar(src.loc)
qdel(src)
/obj/structure/grille/Bumped(atom/user)
if(ismob(user))
var/tile_density = FALSE
for(var/atom/movable/AM in get_turf(src))
if(AM == src)
continue
if(AM.density && AM.layer >= layer)
tile_density = TRUE
break
if(!tile_density)
shock(user, 70)
/obj/structure/grille/CollidedWith(atom/movable/AM)
if(!ismob(AM))
return
var/mob/M = AM
shock(M, 70)
/obj/structure/grille/attack_paw(mob/user)
+11 -7
View File
@@ -115,10 +115,14 @@
shockcd = TRUE
addtimer(CALLBACK(src, .proc/cooldown), 5)
/obj/structure/holosign/barrier/cyborg/hacked/Bumped(atom/user)
if(!shockcd)
if(ismob(user))
var/mob/living/M = user
M.electrocute_act(15,"Energy Barrier", safety=1)
shockcd = TRUE
addtimer(CALLBACK(src, .proc/cooldown), 5)
/obj/structure/holosign/barrier/cyborg/hacked/CollidedWith(atom/movable/AM)
if(shockcd)
return
if(!ismob(AM))
return
var/mob/living/M = AM
M.electrocute_act(15,"Energy Barrier", safety=1)
shockcd = TRUE
addtimer(CALLBACK(src, .proc/cooldown), 5)
@@ -37,10 +37,10 @@
..()
move_update_air(T)
/obj/structure/mineral_door/Bumped(atom/user)
/obj/structure/mineral_door/CollidedWith(atom/movable/AM)
..()
if(!state)
return TryToSwitchState(user)
return TryToSwitchState(AM)
/obj/structure/mineral_door/attack_ai(mob/user) //those aren't machinery, they're just big fucking slabs of a mineral
if(isAI(user)) //so the AI can't open it
@@ -122,7 +122,7 @@
icon_state = initial_state
/obj/structure/mineral_door/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W,/obj/item/weapon/pickaxe))
if(istype(W, /obj/item/weapon/pickaxe))
var/obj/item/weapon/pickaxe/digTool = W
to_chat(user, "<span class='notice'>You start digging the [name]...</span>")
if(do_after(user,digTool.digspeed*(1+round(max_integrity*0.01)), target = src) && src)
+22 -20
View File
@@ -1,5 +1,6 @@
#define MUSIC_MAXLINES 300
#define MUSIC_MAXLINECHARS 50
/datum/song
var/name = "Untitled"
@@ -16,10 +17,11 @@
var/instrumentExt = "ogg" // the file extension
var/obj/instrumentObj = null // the associated obj playing the sound
/datum/song/New(dir, obj)
/datum/song/New(dir, obj, ext = "ogg")
tempo = sanitize_tempo(tempo)
instrumentDir = dir
instrumentObj = obj
instrumentExt = ext
/datum/song/Destroy()
instrumentObj = null
@@ -52,7 +54,7 @@
return
// now generate name
var/soundfile = "sound/[instrumentDir]/[ascii2text(note+64)][acc][oct].[instrumentExt]"
var/soundfile = "sound/instruments/[instrumentDir]/[ascii2text(note+64)][acc][oct].[instrumentExt]"
soundfile = file(soundfile)
// make sure the note exists
if(!fexists(soundfile))
@@ -70,10 +72,10 @@
/datum/song/proc/shouldStopPlaying(mob/user)
if(instrumentObj)
if(!user.canUseTopic(instrumentObj))
return 1
return TRUE
return !instrumentObj.anchored // add special cases to stop in subclasses
else
return 1
return TRUE
/datum/song/proc/playsong(mob/user)
while(repeat >= 0)
@@ -91,9 +93,9 @@
for(var/note in splittext(notes[1], "-"))
//to_chat(world, "note: [note]")
if(!playing || shouldStopPlaying(user))//If the instrument is playing, or special case
playing = 0
playing = FALSE
return
if(lentext(note) == 0)
if(!lentext(note))
continue
//to_chat(world, "Parse: [copytext(note,1,2)]")
var/cur_note = text2ascii(note) - 96
@@ -123,7 +125,7 @@
else
sleep(tempo)
repeat--
playing = 0
playing = FALSE
repeat = 0
updateDialog(user)
@@ -172,7 +174,7 @@
defined by tempo / x: <i>C,G/2,E/4</i><br>
Combined, an example is: <i>E-E4/4,F#/2,G#/8,B/8,E3-E4/4</i>
<br>
Lines may be up to 50 characters.<br>
Lines may be up to [MUSIC_MAXLINECHARS] characters.<br>
A song may only contain up to [MUSIC_MAXLINES] lines.<br>
"}
else
@@ -198,7 +200,7 @@
lines.Cut(MUSIC_MAXLINES + 1)
var/linenum = 1
for(var/l in lines)
if(lentext(l) > 50)
if(lentext(l) > MUSIC_MAXLINECHARS)
to_chat(usr, "Line [linenum] too long!")
lines.Remove(l)
else
@@ -225,11 +227,11 @@
if(!in_range(instrumentObj, usr))
return
if(lentext(t) >= 3072)
if(lentext(t) >= MUSIC_MAXLINES * MUSIC_MAXLINECHARS)
var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no")
if(cont == "no")
break
while(lentext(t) > 3072)
while(lentext(t) > MUSIC_MAXLINES * MUSIC_MAXLINECHARS)
ParseSong(t)
else if(href_list["help"])
@@ -251,7 +253,7 @@
tempo = sanitize_tempo(tempo + text2num(href_list["tempo"]))
else if(href_list["play"])
playing = 1
playing = TRUE
spawn()
playsong(usr)
@@ -261,8 +263,8 @@
return
if(lines.len > MUSIC_MAXLINES)
return
if(lentext(newline) > 50)
newline = copytext(newline, 1, 50)
if(lentext(newline) > MUSIC_MAXLINECHARS)
newline = copytext(newline, 1, MUSIC_MAXLINECHARS)
lines.Add(newline)
else if(href_list["deleteline"])
@@ -276,14 +278,14 @@
var/content = html_encode(input("Enter your line: ", instrumentObj.name, lines[num]) as text|null)
if(!content || !in_range(instrumentObj, usr))
return
if(lentext(content) > 50)
content = copytext(content, 1, 50)
if(lentext(content) > MUSIC_MAXLINECHARS)
content = copytext(content, 1, MUSIC_MAXLINECHARS)
if(num > lines.len || num < 1)
return
lines[num] = content
else if(href_list["stop"])
playing = 0
playing = FALSE
updateDialog(usr)
return
@@ -302,7 +304,7 @@
if(instrumentObj)
return !isliving(instrumentObj.loc)
else
return 1
return TRUE
//////////////////////////////////////////////////////////////////////////
@@ -359,7 +361,7 @@
/obj/structure/piano/attackby(obj/item/O, mob/user, params)
if (istype(O, /obj/item/weapon/wrench))
if (!anchored && !isinspace())
playsound(src.loc, O.usesound, 50, 1)
playsound(src, O.usesound, 50, 1)
to_chat(user, "<span class='notice'> You begin to tighten \the [src] to the floor...</span>")
if (do_after(user, 20*O.toolspeed, target = src))
user.visible_message( \
@@ -368,7 +370,7 @@
"<span class='italics'>You hear ratchet.</span>")
anchored = TRUE
else if(anchored)
playsound(src.loc, O.usesound, 50, 1)
playsound(src, O.usesound, 50, 1)
to_chat(user, "<span class='notice'> You begin to loosen \the [src]'s casters...</span>")
if (do_after(user, 40*O.toolspeed, target = src))
user.visible_message( \
+8 -8
View File
@@ -89,39 +89,39 @@
/obj/structure/noticeboard/captain
name = "Captain's Notice Board"
desc = "Important notices from the Captain."
req_access = list(GLOB.access_captain)
req_access = list(ACCESS_CAPTAIN)
/obj/structure/noticeboard/hop
name = "Head of Personnel's Notice Board"
desc = "Important notices from the Head of Personnel."
req_access = list(GLOB.access_hop)
req_access = list(ACCESS_HOP)
/obj/structure/noticeboard/ce
name = "Chief Engineer's Notice Board"
desc = "Important notices from the Chief Engineer."
req_access = list(GLOB.access_ce)
req_access = list(ACCESS_CE)
/obj/structure/noticeboard/hos
name = "Head of Security's Notice Board"
desc = "Important notices from the Head of Security."
req_access = list(GLOB.access_hos)
req_access = list(ACCESS_HOS)
/obj/structure/noticeboard/cmo
name = "Chief Medical Officer's Notice Board"
desc = "Important notices from the Chief Medical Officer."
req_access = list(GLOB.access_cmo)
req_access = list(ACCESS_CMO)
/obj/structure/noticeboard/rd
name = "Research Director's Notice Board"
desc = "Important notices from the Research Director."
req_access = list(GLOB.access_rd)
req_access = list(ACCESS_RD)
/obj/structure/noticeboard/qm
name = "Quartermaster's Notice Board"
desc = "Important notices from the Quartermaster."
req_access = list(GLOB.access_qm)
req_access = list(ACCESS_QM)
/obj/structure/noticeboard/staff
name = "Staff Notice Board"
desc = "Important notices from the heads of staff."
req_access = list(GLOB.access_heads)
req_access = list(ACCESS_HEADS)
+2 -2
View File
@@ -76,7 +76,7 @@
anchored = 0
to_chat(user, "<span class='notice'>You cut \the [src] free from the floor.</span>")
//Finishing the frame
else if(istype(W,/obj/item/stack/sheet))
else if(istype(W, /obj/item/stack/sheet))
if(finished)
return
var/obj/item/stack/sheet/S = W
@@ -88,7 +88,7 @@
S.use(5)
new /obj/structure/reflector/single (src.loc)
qdel (src)
if(istype(W,/obj/item/stack/sheet/rglass))
if(istype(W, /obj/item/stack/sheet/rglass))
if(S.get_amount() < 10)
to_chat(user, "<span class='warning'>You need ten sheets of reinforced glass to create a double reflector!</span>")
return
+4 -4
View File
@@ -115,7 +115,7 @@
radiate()
return ..()
/obj/structure/statue/uranium/Bumped(atom/user)
/obj/structure/statue/uranium/CollidedWith(atom/movable/AM)
radiate()
..()
@@ -155,10 +155,10 @@
/obj/structure/statue/plasma/bullet_act(obj/item/projectile/Proj)
var/burn = FALSE
if(istype(Proj,/obj/item/projectile/beam))
if(istype(Proj, /obj/item/projectile/beam))
PlasmaBurn(2500)
burn = TRUE
else if(istype(Proj,/obj/item/projectile/ion))
else if(istype(Proj, /obj/item/projectile/ion))
PlasmaBurn(500)
burn = TRUE
if(burn)
@@ -273,7 +273,7 @@
name = "statue of a clown"
icon_state = "clown"
/obj/structure/statue/bananium/Bumped(atom/user)
/obj/structure/statue/bananium/CollidedWith(atom/movable/AM)
honk()
..()
+1 -1
View File
@@ -266,7 +266,7 @@
frame = /obj/structure/table_frame
framestack = /obj/item/stack/rods
buildstack = /obj/item/stack/tile/carpet
canSmoothWith = list(/obj/structure/table/wood/fancy,/obj/structure/table/wood/fancy/black)
canSmoothWith = list(/obj/structure/table/wood/fancy, /obj/structure/table/wood/fancy/black)
/obj/structure/table/wood/fancy/New()
icon = 'icons/obj/smooth_structures/fancy_table.dmi' //so that the tables place correctly in the map editor
@@ -32,7 +32,7 @@
/obj/structure/transit_tube/station/should_stop_pod(pod, from_dir)
return 1
/obj/structure/transit_tube/station/Bumped(atom/movable/AM)
/obj/structure/transit_tube/station/CollidedWith(atom/movable/AM)
if(!pod_moving && open_status == STATION_TUBE_OPEN && ismob(AM) && AM.dir == boarding_dir)
for(var/obj/structure/transit_tube_pod/pod in loc)
if(!pod.moving)
@@ -71,7 +71,7 @@
if(do_after(user, 15, target = src))
if(open_status == STATION_TUBE_OPEN && GM && user.grab_state >= GRAB_AGGRESSIVE && user.pulling == GM && !GM.buckled && !GM.has_buckled_mobs())
GM.Knockdown(100)
src.Bumped(GM)
src.CollidedWith(GM)
break
else
for(var/obj/structure/transit_tube_pod/pod in loc)