This commit is contained in:
lm40
2017-06-19 17:28:46 -04:00
committed by GitHub
parent 2502baaaab
commit 005f3a4ecc
120 changed files with 910 additions and 341 deletions
+1 -7
View File
@@ -25,13 +25,7 @@ There are a number of ways to download the source code. Some are described here,
Option 1:
Follow this: http://www.tgstation13.org/wiki/Setting_up_git
Option 2:
Install GitHub::windows from http://windows.github.com/
It handles most of the setup and configuraton of Git for you.
Then you simply search for the tgstation repository and click the big clone
button.
Option 3: Download the source code as a zip by clicking the ZIP button in the
Option 2: Download the source code as a zip by clicking the ZIP button in the
code tab of https://github.com/tgstation/tgstation
(note: this will use a lot of bandwidth if you wish to update and is a lot of
hassle if you want to make any changes at all, so it's not recommended.)
@@ -72827,10 +72827,6 @@
},
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile,
/obj/machinery/door/poddoor/preopen{
id = "xenosecure";
name = "Secure Pen Shutters"
},
/obj/machinery/door/poddoor/preopen{
id = "xenosecure";
name = "Secure Pen Shutters"
+1
View File
@@ -627,6 +627,7 @@
/area/mine/production)
"bD" = (
/obj/structure/closet/crate,
/obj/item/weapon/dice/d4,
/turf/open/floor/plasteel/brown{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
dir = 1
+47 -99
View File
@@ -22584,14 +22584,12 @@
tag = "icon-4-8";
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
tag = "icon-manifold (EAST)";
icon_state = "manifold";
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 9
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"aKy" = (
@@ -22682,11 +22680,6 @@
tag = "icon-1-4";
icon_state = "1-4"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
tag = "icon-intact (SOUTHEAST)";
icon_state = "intact";
dir = 6
},
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -22710,9 +22703,6 @@
tag = "icon-4-8";
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -22723,9 +22713,6 @@
tag = "icon-4-8";
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/yellow/side{
dir = 8
},
@@ -22739,9 +22726,6 @@
tag = "icon-4-8";
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/neutral,
/area/engine/engineering)
"aKK" = (
@@ -22750,9 +22734,11 @@
tag = "icon-4-8";
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/obj/item/clothing/gloves/color/yellow,
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/thirteenloko,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
/turf/open/floor/plasteel/yellow,
/area/engine/engineering)
"aKL" = (
@@ -23066,14 +23052,10 @@
/turf/closed/wall,
/area/crew_quarters/kitchen)
"aLm" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
tag = "icon-manifold (WEST)";
icon_state = "manifold";
dir = 8
},
/obj/structure/extinguisher_cabinet{
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/neutral/corner{
dir = 1
},
@@ -23290,10 +23272,11 @@
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile,
/obj/structure/cable/white,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
tag = "icon-manifold (NORTH)";
icon_state = "manifold";
dir = 1
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/engine/gravity_generator)
"aLM" = (
@@ -23302,14 +23285,13 @@
icon_state = "1-2"
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
tag = "icon-manifold (EAST)";
icon_state = "manifold";
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9;
pixel_y = 0
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"aLN" = (
@@ -23393,7 +23375,6 @@
tag = "icon-1-2";
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -23831,7 +23812,7 @@
/turf/open/floor/plating,
/area/tcommsat/server)
"aMN" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall/r_wall,
/area/tcommsat/server)
"aMO" = (
@@ -23843,7 +23824,6 @@
pixel_x = -32
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/camera{
c_tag = "Engineering Port";
dir = 4;
@@ -24586,7 +24566,6 @@
pixel_x = -23;
pixel_y = 0
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -24664,7 +24643,6 @@
},
/obj/structure/cable/white,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -24891,7 +24869,6 @@
icon_state = "1-2"
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -24974,7 +24951,6 @@
dir = 4;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -25780,7 +25756,6 @@
pixel_x = -26
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -25825,19 +25800,17 @@
/obj/machinery/newscaster{
pixel_x = 32
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
tag = "icon-manifold (EAST)";
icon_state = "manifold";
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/obj/effect/turf_decal/stripes/line{
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"aPO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 6
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 1
},
/turf/closed/wall/r_wall,
/area/maintenance/port)
@@ -26462,7 +26435,6 @@
/area/engine/engineering)
"aQT" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -26814,12 +26786,12 @@
pixel_y = 0
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"aRG" = (
@@ -26946,7 +26918,6 @@
pixel_x = 24
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/closet/secure_closet/engineering_personal,
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -27435,9 +27406,6 @@
/area/tcommsat/server)
"aSP" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/structure/closet/wardrobe/engineering_yellow,
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -27447,9 +27415,6 @@
"aSQ" = (
/obj/machinery/atmospherics/pipe/simple/general/visible,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/caution,
/area/engine/engineering)
"aSR" = (
@@ -27458,9 +27423,6 @@
/obj/structure/sign/nosmoking_2{
pixel_y = -32
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/engine/engineering)
@@ -27468,9 +27430,6 @@
/obj/item/clothing/gloves/color/black,
/obj/item/clothing/glasses/meson/engine,
/obj/structure/table/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/engine/engineering)
@@ -27478,16 +27437,10 @@
/obj/structure/table/reinforced,
/obj/item/weapon/storage/toolbox/mechanical,
/obj/item/device/flashlight,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/engine/engineering)
"aSU" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -27507,9 +27460,6 @@
pixel_y = -32
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/vault{
dir = 8
},
@@ -27521,9 +27471,6 @@
on = 1;
target_temperature = 80
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 9
},
@@ -27536,9 +27483,6 @@
on = 1;
target_temperature = 80
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 5
},
@@ -27555,9 +27499,6 @@
},
/obj/item/device/geiger_counter,
/obj/item/device/geiger_counter,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/engine/engineering)
@@ -27566,19 +27507,11 @@
/obj/item/clothing/suit/radiation,
/obj/item/clothing/head/radiation,
/obj/item/clothing/glasses/meson,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/engine/engineering)
"aTa" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
tag = "icon-intact (NORTHWEST)";
icon_state = "intact";
dir = 9
},
/obj/structure/closet/secure_closet/engineering_personal,
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -37645,7 +37578,6 @@
tag = "icon-1-2";
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/camera{
c_tag = "Engineering Starboard";
dir = 8;
@@ -41248,6 +41180,22 @@
"bwU" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bwV" = (
/obj/structure/cable/white{
tag = "icon-1-2";
icon_state = "1-2"
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"bwW" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
/turf/closed/wall/r_wall,
/area/tcommsat/server)
(1,1,1) = {"
aaa
@@ -70928,11 +70876,11 @@ aMN
aMN
aMN
aMN
aMN
aMN
aMN
aMN
aSO
bwW
aMJ
aMJ
aMJ
aMJ
aMJ
aMJ
aMJ
@@ -71184,7 +71132,7 @@ aMO
aNY
aOz
aPI
aJp
bwV
aRF
aSP
aEt
@@ -86855,7 +86803,7 @@ bsz
aDZ
aIY
aDZ
aGY
aDZ
arj
arj
anl
@@ -87112,7 +87060,7 @@ bsA
aHY
aIZ
blm
aLn
ahZ
aMy
aHY
aDc
+10 -22
View File
@@ -1516,9 +1516,6 @@
icon_state = "4-8";
pixel_y = 0
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/AIsatextAS)
"adr" = (
@@ -3305,7 +3302,6 @@
name = "Prison Wing";
req_access_txt = "1"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable/yellow{
d1 = 1;
d2 = 2;
@@ -3326,7 +3322,6 @@
/area/security/prison)
"ahf" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/door/airlock/glass_security{
name = "Prison Wing";
req_access_txt = "1"
@@ -12775,9 +12770,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/black,
/area/crew_quarters/heads/hop)
"aAk" = (
@@ -26849,7 +26841,6 @@
/obj/machinery/door/airlock/glass{
name = "Diner"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
@@ -26865,7 +26856,6 @@
/obj/machinery/door/airlock/glass{
name = "Diner"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
@@ -45842,7 +45832,6 @@
d2 = 2;
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/engine/engineering)
@@ -48897,7 +48886,7 @@
/area/hallway/primary/central)
"bWU" = (
/obj/structure/table,
/obj/item/weapon/storage/fancy,
/obj/item/weapon/storage/fancy/donut_box,
/turf/open/floor/plasteel/neutral/corner{
dir = 1
},
@@ -53230,7 +53219,6 @@
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/hallway/secondary/exit/departure_lounge)
"chp" = (
@@ -69752,7 +69740,7 @@ cdi
cdz
cdi
ceb
cex
cdi
ceO
cdi
ccZ
@@ -74304,7 +74292,7 @@ aEz
aEz
aEz
aEz
cht
chu
chA
chG
chI
@@ -74565,7 +74553,7 @@ chu
chB
chH
chJ
chO
aNF
chy
chF
aMT
@@ -74807,10 +74795,10 @@ atX
awA
agv
ayy
azF
azF
azF
azF
aCZ
aCZ
aCZ
aCZ
aCZ
aDB
aEw
@@ -85929,7 +85917,7 @@ bKT
bLz
bKT
bMG
bNn
bNg
bNI
bOc
bMb
@@ -93114,7 +93102,7 @@ bLR
bZp
bBF
bCP
bDI
bJl
bCP
bHI
bCP
+2
View File
@@ -104,3 +104,5 @@ GLOBAL_LIST_EMPTY(all_scripture) //a list containing scripture instances; not us
#define OCULAR_WARDEN_EXCLUSION_RANGE 3 //the range at which ocular wardens cannot be placed near other ocular wardens
#define RATVARIAN_SPEAR_DURATION 1800 //how long ratvarian spears last; defaults to 3 minutes
#define PRISM_DELAY_DURATION 1200 //how long prolonging prisms delay the shuttle for; defaults to 2 minutes
+5 -1
View File
@@ -15,9 +15,13 @@
#define ABOVE_NORMAL_TURF_LAYER 2.08
#define LATTICE_LAYER 2.2
#define DISPOSAL_PIPE_LAYER 2.3
#define GAS_PIPE_LAYER 2.35
#define GAS_PIPE_HIDDEN_LAYER 2.35
#define WIRE_LAYER 2.4
#define WIRE_TERMINAL_LAYER 2.45
#define GAS_SCRUBBER_LAYER 2.46
#define GAS_PIPE_VISIBLE_LAYER 2.47
#define GAS_FILTER_LAYER 2.48
#define GAS_PUMP_LAYER 2.49
#define LOW_OBJ_LAYER 2.5
#define LOW_SIGIL_LAYER 2.52
#define SIGIL_LAYER 2.54
+3
View File
@@ -1,3 +1,6 @@
//wrapper macro for sending images that makes grepping easy
#define SEND_IMAGE(target, image) target << image
/proc/random_blood_type()
return pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+")
+1 -1
View File
@@ -47,7 +47,7 @@ SUBSYSTEM_DEF(shuttle)
var/lockdown = FALSE //disallow transit after nuke goes off
var/auto_call = 72000 //time before in deciseconds in which the shuttle is auto called. Default is 2 hours.
var/auto_call = 99000 //time before in deciseconds in which the shuttle is auto called. Default is 2½ hours plus 15 for the shuttle. So total is 3.
/datum/controller/subsystem/shuttle/Initialize(timeofday)
if(!arrivals)
@@ -42,7 +42,7 @@ Bonus
return
/datum/symptom/vomit/proc/Vomit(mob/living/carbon/M)
M.vomit(20)
M.vomit(20)
/*
//////////////////////////////////////
@@ -75,7 +75,7 @@ Bonus
severity = 5
/datum/symptom/vomit/blood/Vomit(mob/living/carbon/M)
M.vomit(0, 1)
M.vomit(0,TRUE)
/*
@@ -103,4 +103,4 @@ Bonus
level = 4
/datum/symptom/vomit/projectile/Vomit(mob/living/carbon/M)
M.vomit(6,0,1,5,1)
M.vomit(6, distance = 5)
+1 -1
View File
@@ -31,4 +31,4 @@
affected_mob.adjustToxLoss(1)
if(3)
if(prob(1))
affected_mob.vomit(95)
affected_mob.vomit(95)
+2 -2
View File
@@ -79,7 +79,7 @@
details = ": '" + html_encode(testmerge[line]["title"]) + "' by " + html_encode(testmerge[line]["author"]) + " at commit " + html_encode(copytext(cm, 1, min(length(cm), 7)))
else if(has_pr_details) //tgs2 support
details = ": '" + html_encode(testmerge[line]["title"]) + "' by " + html_encode(testmerge[line]["user"]["login"])
. += "<a href='[config.githuburl]/pull/[line]'>#[line][details]</a><br>"
. += "<a href=\"[config.githuburl]/pull/[line]\">#[line][details]</a><br>"
/client/verb/showrevinfo()
set category = "OOC"
@@ -93,7 +93,7 @@
to_chat(src, GLOB.revdata.GetTestMergeInfo())
prefix = "Based off origin/master commit: "
var/pc = GLOB.revdata.originmastercommit
to_chat(src, "[prefix]<a href='[config.githuburl]/commit/[pc]'>[copytext(pc, 1, min(length(pc), 7))]</a>")
to_chat(src, "[prefix]<a href=\"[config.githuburl]/commit/[pc]\">[copytext(pc, 1, min(length(pc), 7))]</a>")
else
to_chat(src, "Revision unknown")
to_chat(src, "<b>Current Infomational Settings:</b>")
+1 -1
View File
@@ -23,7 +23,7 @@
new_mob.key = key
The Login proc will handle making a new mob for that mobtype (including setting up stuff like mind.name). Simple!
The Login proc will handle making a new mind for that mobtype (including setting up stuff like mind.name). Simple!
However if you want that mind to have any special properties like being a traitor etc you will have to do that
yourself.
+7
View File
@@ -40,6 +40,8 @@
passindex++
var/mob/living/buckled_mob = m
var/list/offsets = get_offsets(passindex)
var/rider_dir = get_rider_dir(passindex)
buckled_mob.setDir(rider_dir)
dir_loop:
for(var/offsetdir in offsets)
if(offsetdir == ridden_dir)
@@ -56,6 +58,11 @@
/datum/riding/proc/get_offsets(pass_index) // list(dir = x, y, layer)
return list("[NORTH]" = list(0, 0), "[SOUTH]" = list(0, 0), "[EAST]" = list(0, 0), "[WEST]" = list(0, 0))
//Override this to set the passengers/riders dir based on which passenger they are.
//ie: rider facing the vehicle's dir, but passenger 2 facing backwards, etc.
/datum/riding/proc/get_rider_dir(pass_index)
return ridden.dir
//KEYS
/datum/riding/proc/keycheck(mob/user)
if(keytype)
+5 -4
View File
@@ -232,19 +232,20 @@
/datum/status_effect/cult_master
id = "The Cult Master"
duration = -1
tick_interval = 100
alert_type = null
on_remove_on_mob_delete = TRUE
var/alive = TRUE
/datum/status_effect/cult_master/proc/deathrattle()
if(!QDELETED(GLOB.cult_narsie))
return //if nar-sie is alive, don't even worry about it
var/area/A = get_area(owner)
for(var/datum/mind/B in SSticker.mode.cult)
if(isliving(B.current))
var/mob/living/M = B.current
M << 'sound/hallucinations/veryfar_noise.ogg'
to_chat(M, "<span class='cultlarge'>The Cult's Master, [owner], has fallen in the [A]!")
to_chat(M, "<span class='cultlarge'>The Cult's Master, [owner], has fallen in \the [A]!</span>")
/datum/status_effect/cult_master/tick()
if(owner.stat != DEAD && !alive)
alive = TRUE
@@ -17,7 +17,7 @@
B.leave_victim()
if(iscarbon(user))
var/mob/living/carbon/C = user
C.vomit(0)
C.vomit(0, toxic = TRUE)
to_chat(user, "<span class='notice'>A parasite exits our form.</span>")
var/list/bad_organs = list(
user.getorgan(/obj/item/organ/body_egg),
@@ -31,7 +31,7 @@
O.Remove(user)
if(iscarbon(user))
var/mob/living/carbon/C = user
C.vomit(0)
C.vomit(0, toxic = TRUE)
O.forceMove(get_turf(user))
user.reagents.add_reagent("mutadone", 10)
@@ -64,5 +64,5 @@
/proc/change_construction_value(amount)
GLOB.clockwork_construction_value += amount
/proc/can_recite_scripture(mob/living/L)
return (is_servant_of_ratvar(L) && L.stat == CONSCIOUS && L.can_speak_vocal() && (GLOB.ratvar_awakens || (ishuman(L) || issilicon(L))))
/proc/can_recite_scripture(mob/living/L, can_potentially)
return (is_servant_of_ratvar(L) && (can_potentially || (L.stat == CONSCIOUS && L.can_speak_vocal())) && (GLOB.ratvar_awakens || (ishuman(L) || issilicon(L))))
@@ -69,7 +69,7 @@
/obj/item/clockwork/component/vanguard_cogwheel/onyx_prism
name = "onyx prism"
desc = "An onyx prism with a small aperture. It's very heavy."
clockwork_desc = "A broken prism from a mending motor. <b>Serviceable as a substitute for a vanguard cogwheel.</b>"
clockwork_desc = "A broken prism from a prolonging prism. <b>Serviceable as a substitute for a vanguard cogwheel.</b>"
icon_state = "onyx_prism"
cultist_message = "The prism grows painfully hot in your hands."
servant_of_ratvar_messages = list("The prism isn't getting any lighter." = FALSE, "\"So... you haven't failed yet. Have hope, child.\"" = TRUE, \
@@ -37,7 +37,7 @@
user.visible_message("<span class='warning'>As [user] puts [src] on, it flickers off their head!</span>", "<span class='warning'>The helmet flickers off your head, leaving only nausea!</span>")
if(iscarbon(user))
var/mob/living/carbon/C = user
C.vomit(20, 1, 1, 0, 1)
C.vomit(20)
else
to_chat(user, "<span class='heavy_brass'>\"Do you have a hole in your head? You're about to.\"</span>")
to_chat(user, "<span class='userdanger'>The helmet tries to drive a spike through your head as you scramble to remove it!</span>")
@@ -98,7 +98,7 @@
user.visible_message("<span class='warning'>As [user] puts [src] on, it flickers off their body!</span>", "<span class='warning'>The curiass flickers off your body, leaving only nausea!</span>")
if(iscarbon(user))
var/mob/living/carbon/C = user
C.vomit(20, 1, 1, 0, 1)
C.vomit(20)
else
to_chat(user, "<span class='heavy_brass'>\"I think this armor is too hot for you to handle.\"</span>")
to_chat(user, "<span class='userdanger'>The curiass emits a burst of flame as you scramble to get it off!</span>")
@@ -159,7 +159,7 @@
user.visible_message("<span class='warning'>As [user] puts [src] on, it flickers off their arms!</span>", "<span class='warning'>The gauntlets flicker off your arms, leaving only nausea!</span>")
if(iscarbon(user))
var/mob/living/carbon/C = user
C.vomit(10, 1, 1, 0, 1)
C.vomit()
else
to_chat(user, "<span class='heavy_brass'>\"Did you like having arms?\"</span>")
to_chat(user, "<span class='userdanger'>The gauntlets suddenly squeeze tight, crushing your arms before you manage to get them off!</span>")
@@ -209,7 +209,7 @@
user.visible_message("<span class='warning'>As [user] puts [src] on, it flickers off their feet!</span>", "<span class='warning'>The treads flicker off your feet, leaving only nausea!</span>")
if(iscarbon(user))
var/mob/living/carbon/C = user
C.vomit(10, 1, 1, 0, 1)
C.vomit()
else
to_chat(user, "<span class='heavy_brass'>\"Let's see if you can dance with these.\"</span>")
to_chat(user, "<span class='userdanger'>The treads turn searing hot as you scramble to get them off!</span>")
@@ -214,6 +214,38 @@
quickbind_desc = "Creates an Interdiction Lens, which drains power into nearby Sigils of Transmission."
//Prolonging Prism: Creates a prism that will delay the shuttle at a power cost
/datum/clockwork_scripture/create_object/prolonging_prism
descname = "Powered Structure, Delay Emergency Shuttles"
name = "Prolonging Prism"
desc = "Creates a mechanized prism which will delay the arrival of an emergency shuttle by 2 minutes at a massive power cost."
invocations = list("May this prism...", "...grant us time to enact his will!")
channel_time = 80
consumed_components = list(VANGUARD_COGWHEEL = 5, GEIS_CAPACITOR = 2, REPLICANT_ALLOY = 2)
object_path = /obj/structure/destructible/clockwork/powered/prolonging_prism
creator_message = "<span class='brass'>You form a prolonging prism, which will delay the arrival of an emergency shuttle at a massive power cost.</span>"
observer_message = "<span class='warning'>An onyx prism forms in midair and sprouts tendrils to support itself!</span>"
invokers_required = 2
multiple_invokers_used = TRUE
usage_tip = "The power cost to delay a shuttle increases based on CV and the number of times activated."
tier = SCRIPTURE_APPLICATION
one_per_tile = TRUE
primary_component = VANGUARD_COGWHEEL
sort_priority = 7
quickbind = TRUE
quickbind_desc = "Creates a Prolonging Prism, which will delay the arrival of an emergency shuttle by 2 minutes at a massive power cost."
/datum/clockwork_scripture/create_object/prolonging_prism/check_special_requirements()
if(SSshuttle.emergency.mode == SHUTTLE_DOCKED || SSshuttle.emergency.mode == SHUTTLE_IGNITING || SSshuttle.emergency.mode == SHUTTLE_STRANDED || SSshuttle.emergency.mode == SHUTTLE_ESCAPE)
to_chat(invoker, "<span class='inathneq'>\"It is too late to construct one of these, champion.\"</span>")
return FALSE
var/turf/T = get_turf(invoker)
if(!T || T.z != ZLEVEL_STATION)
to_chat(invoker, "<span class='inathneq'>\"You must be on the station to construct one of these, champion.\"</span>")
return FALSE
return ..()
//Mania Motor: Creates a malevolent transmitter that will broadcast the whispers of Sevtug into the minds of nearby nonservants, causing a variety of mental effects at a power cost.
/datum/clockwork_scripture/create_object/mania_motor
descname = "Powered Structure, Area Denial"
@@ -122,8 +122,8 @@
/datum/clockwork_scripture/ranged_ability/geis_prep/run_scripture()
var/servants = 0
if(!GLOB.ratvar_awakens)
for(var/mob/living/M in GLOB.all_clockwork_mobs)
if(ishuman(M) || issilicon(M))
for(var/mob/living/M in GLOB.living_mob_list)
if(can_recite_scripture(M, TRUE))
servants++
if(servants > SCRIPT_SERVANT_REQ)
whispered = FALSE
@@ -153,8 +153,8 @@
/datum/clockwork_scripture/geis/run_scripture()
var/servants = 0
if(!GLOB.ratvar_awakens)
for(var/mob/living/M in GLOB.all_clockwork_mobs)
if(ishuman(M) || issilicon(M))
for(var/mob/living/M in GLOB.living_mob_list)
if(can_recite_scripture(M, TRUE))
servants++
if(target.buckled)
target.buckled.unbuckle_mob(target, TRUE)
@@ -0,0 +1,140 @@
//Prolonging Prism: A prism that consumes power to delay the shuttle
/obj/structure/destructible/clockwork/powered/prolonging_prism
name = "prolonging prism"
desc = "A dark onyx prism, held in midair by spiraling tendrils of stone."
clockwork_desc = "A powerful prism that will delay the arrival of an emergency shuttle."
icon_state = "prolonging_prism_inactive"
active_icon = "prolonging_prism"
inactive_icon = "prolonging_prism_inactive"
unanchored_icon = "prolonging_prism_unwrenched"
construction_value = 20
max_integrity = 125
obj_integrity = 125
break_message = "<span class='warning'>The prism falls to the ground with a heavy thud!</span>"
debris = list(/obj/item/clockwork/alloy_shards/small = 3, \
/obj/item/clockwork/alloy_shards/medium = 1, \
/obj/item/clockwork/alloy_shards/large = 1, \
/obj/item/clockwork/component/vanguard_cogwheel/onyx_prism = 1)
var/static/list/component_refund = list(VANGUARD_COGWHEEL = 2, GEIS_CAPACITOR = 1, REPLICANT_ALLOY = 1)
var/static/delay_cost = 2500
var/static/delay_cost_increase = 750
var/static/delay_remaining = 0
/obj/structure/destructible/clockwork/powered/prolonging_prism/examine(mob/user)
..()
if(is_servant_of_ratvar(user) || isobserver(user))
if(SSshuttle.emergency.mode == SHUTTLE_DOCKED || SSshuttle.emergency.mode == SHUTTLE_IGNITING || SSshuttle.emergency.mode == SHUTTLE_STRANDED || SSshuttle.emergency.mode == SHUTTLE_ESCAPE)
to_chat(user, "<span class='inathneq'>An emergency shuttle has arrived and this prism is no longer useful; attempt to activate it to gain a partial refund of components used.</span>")
else
var/efficiency = get_efficiency_mod()
var/efficiency_time = get_efficiency_mod(TRUE)
to_chat(user, "<span class='inathneq_small'>It requires at least <b>[get_delay_cost() * efficiency]W</b> of power to attempt to delay the arrival of an emergency shuttle by \
<b>[2 * efficiency_time]</b> minutes.</span>")
to_chat(user, "<span class='inathneq_small'>This cost increases by <b>[delay_cost_increase * 0.1]W</b> for every <b>10 CV</b> and <b>[delay_cost_increase]W</b> for every previous \
activation.</span>")
/obj/structure/destructible/clockwork/powered/prolonging_prism/forced_disable(bad_effects)
if(active)
if(bad_effects)
try_use_power(MIN_CLOCKCULT_POWER*4)
visible_message("<span class='warning'>[src] emits an airy chuckling sound and falls dark!</span>")
toggle()
return TRUE
/obj/structure/destructible/clockwork/powered/prolonging_prism/attack_hand(mob/living/user)
if(user.canUseTopic(src, !issilicon(user), NO_DEXTERY) && is_servant_of_ratvar(user))
if(SSshuttle.emergency.mode == SHUTTLE_DOCKED || SSshuttle.emergency.mode == SHUTTLE_IGNITING || SSshuttle.emergency.mode == SHUTTLE_STRANDED || SSshuttle.emergency.mode == SHUTTLE_ESCAPE)
to_chat(user, "<span class='brass'>You break [src] apart, refunding some of the components used.</span>")
for(var/i in component_refund)
generate_cache_component(i, src)
take_damage(max_integrity)
return 0
if(active)
return 0
var/turf/T = get_turf(src)
if(!T || T.z != ZLEVEL_STATION)
to_chat(user, "<span class='warning'>[src] must be on the station to function!</span>")
return 0
if(SSshuttle.emergency.mode != SHUTTLE_CALL)
to_chat(user, "<span class='warning'>No emergency shuttles are attempting to arrive at the station!</span>")
return 0
var/efficiency = get_efficiency_mod()
if(!try_use_power(get_delay_cost() * efficiency))
to_chat(user, "<span class='warning'>[src] needs more power to function!</span>")
return 0
delay_cost += delay_cost_increase
delay_remaining += PRISM_DELAY_DURATION
toggle(0, user)
/obj/structure/destructible/clockwork/powered/prolonging_prism/process()
var/turf/own_turf = get_turf(src)
if(SSshuttle.emergency.mode != SHUTTLE_CALL || delay_remaining <= 0 || !own_turf || own_turf.z != ZLEVEL_STATION)
forced_disable(FALSE)
return
. = ..()
var/delay_amount = 40
delay_remaining -= delay_amount
var/efficiency = get_efficiency_mod()
SSshuttle.emergency.setTimer(SSshuttle.emergency.timeLeft(1) + (delay_amount * efficiency))
var/highest_y
var/highest_x
var/lowest_y
var/lowest_x
var/list/prism_turfs = list()
for(var/t in SSshuttle.emergency.ripple_area(SSshuttle.getDock("emergency_home")))
prism_turfs[t] = TRUE
var/turf/T = t
if(!highest_y || T.y > highest_y)
highest_y = T.y
if(!highest_x || T.x > highest_x)
highest_x = T.x
if(!lowest_y || T.y < lowest_y)
lowest_y = T.y
if(!lowest_x || T.x < lowest_x)
lowest_x = T.x
var/mean_y = Lerp(lowest_y, highest_y)
var/mean_x = Lerp(lowest_x, highest_x)
if(prob(50))
mean_y = Ceiling(mean_y)
else
mean_y = Floor(mean_y)
if(prob(50))
mean_x = Ceiling(mean_x)
else
mean_x = Floor(mean_x)
var/turf/semi_random_center_turf = locate(mean_x, mean_y, ZLEVEL_STATION)
for(var/t in getline(src, semi_random_center_turf))
prism_turfs[t] = TRUE
var/placement_style = prob(50)
for(var/t in prism_turfs)
var/turf/T = t
if(placement_style)
if(IsOdd(T.x + T.y))
seven_random_hexes(T, efficiency)
else if(prob(50 * efficiency))
new /obj/effect/temp_visual/ratvar/prolonging_prism(T)
else
if(IsEven(T.x + T.y))
seven_random_hexes(T, efficiency)
else if(prob(50 * efficiency))
new /obj/effect/temp_visual/ratvar/prolonging_prism(T)
CHECK_TICK //we may be going over a hell of a lot of turfs
/obj/structure/destructible/clockwork/powered/prolonging_prism/proc/get_delay_cost()
return Floor((GLOB.clockwork_construction_value * delay_cost_increase * 0.01) + delay_cost, MIN_CLOCKCULT_POWER)
/obj/structure/destructible/clockwork/powered/prolonging_prism/proc/seven_random_hexes(turf/T, efficiency)
var/static/list/hex_states = list("prismhex1", "prismhex2", "prismhex3", "prismhex4", "prismhex5", "prismhex6", "prismhex7")
var/mutable_appearance/hex_combo
for(var/n in hex_states) //BUILD ME A HEXAGON
if(prob(50 * efficiency))
if(!hex_combo)
hex_combo = mutable_appearance('icons/effects/64x64.dmi', n, RIPPLE_LAYER)
else
hex_combo.overlays += mutable_appearance('icons/effects/64x64.dmi', n, RIPPLE_LAYER)
if(hex_combo) //YOU BUILT A HEXAGON
hex_combo.pixel_x = -16
hex_combo.pixel_y = -16
hex_combo.mouse_opacity = 0
hex_combo.plane = GAME_PLANE
new /obj/effect/temp_visual/ratvar/prolonging_prism(T, hex_combo)
@@ -49,7 +49,7 @@
/obj/structure/destructible/clockwork/massive/ratvar/Bump(atom/A)
var/turf/T = get_turf(A)
if(T == loc)
T = get_step(A, A.dir) //please don't run into a window like a bird, ratvar
T = get_step(T, dir) //please don't run into a window like a bird, ratvar
forceMove(T)
/obj/structure/destructible/clockwork/massive/ratvar/Process_Spacemove()
+1 -6
View File
@@ -81,17 +81,12 @@
popup.open()
return 1
/mob/living/proc/cult_master()
set category = "Cultist"
set name = "Assert Leadership"
pollCultists(src) // This proc handles the distribution of cult master actions
/datum/action/innate/cult/mastervote
name = "Assert Leadership"
button_icon_state = "cultvote"
/datum/action/innate/cult/mastervote/IsAvailable()
if(GLOB.cult_vote_called)
if(GLOB.cult_vote_called || !ishuman(owner))
return FALSE
return ..()
+1 -1
View File
@@ -523,7 +523,7 @@
to_chat(M, "<span class='warning'>An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit.</span>")
M.Stun(5)
sleep(30)
M.vomit(50)
M.vomit(10, distance = 5)
if(ORION_TRAIL_FLUX)
if(prob(75))
M.Weaken(3)
+1 -1
View File
@@ -250,7 +250,7 @@ GLOBAL_LIST_INIT(pipeID2State, list(
if(istype(user, /mob/living/carbon))
var/mob/living/carbon/C = user
for(var/i=1 to 20)
C.vomit(0,1,0,4,0)
C.vomit(0, TRUE, FALSE, 4, FALSE)
if(prob(20))
C.spew_organ()
sleep(5)
+4 -18
View File
@@ -17,10 +17,12 @@
var/obj/effect/countdown/transformer/countdown
var/mob/living/silicon/ai/masterAI
/obj/machinery/transformer/New()
/obj/machinery/transformer/Initialize()
// On us
..()
. = ..()
new /obj/machinery/conveyor/auto(locate(x - 1, y, z), WEST)
new /obj/machinery/conveyor/auto(loc, WEST)
new /obj/machinery/conveyor/auto(locate(x + 1, y, z), WEST)
countdown = new(src)
countdown.start()
@@ -116,19 +118,3 @@
if(R)
R.SetLockdown(0)
R.notify_ai(NEW_BORG)
/obj/machinery/transformer/conveyor/New()
..()
var/turf/T = loc
if(T)
// Spawn Conveyor Belts
//East
var/turf/east = locate(T.x + 1, T.y, T.z)
if(isfloorturf(east))
new /obj/machinery/conveyor/auto(east, WEST)
// West
var/turf/west = locate(T.x - 1, T.y, T.z)
if(isfloorturf(west))
new /obj/machinery/conveyor/auto(west, WEST)
+1 -1
View File
@@ -960,7 +960,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
/obj/item/seeds/cabbage = 3,/obj/item/seeds/carrot = 3,/obj/item/seeds/cherry = 3,/obj/item/seeds/chanter = 3,
/obj/item/seeds/chili = 3,/obj/item/seeds/cocoapod = 3,/obj/item/seeds/coffee = 3,/obj/item/seeds/corn = 3,
/obj/item/seeds/eggplant = 3,/obj/item/seeds/grape = 3,/obj/item/seeds/grass = 3,/obj/item/seeds/lemon = 3,
/obj/item/seeds/lime = 3,/obj/item/seeds/orange = 3,/obj/item/seeds/potato = 3,/obj/item/seeds/poppy = 3,
/obj/item/seeds/lime = 3,/obj/item/seeds/onion = 3,/obj/item/seeds/orange = 3,/obj/item/seeds/potato = 3,/obj/item/seeds/poppy = 3,
/obj/item/seeds/pumpkin = 3,/obj/item/seeds/replicapod = 3,/obj/item/seeds/wheat/rice = 3,/obj/item/seeds/soya = 3,/obj/item/seeds/sunflower = 3,
/obj/item/seeds/tea = 3,/obj/item/seeds/tobacco = 3,/obj/item/seeds/tomato = 3,
/obj/item/seeds/tower = 3,/obj/item/seeds/watermelon = 3,/obj/item/seeds/wheat = 3,/obj/item/seeds/whitebeet = 3)
@@ -146,6 +146,20 @@
pixel_y = rand(-10, 10)
animate(src, alpha = 0, time = 3, easing = EASE_OUT)
/obj/effect/temp_visual/ratvar/prolonging_prism
icon = 'icons/effects/64x64.dmi'
icon_state = "prismhex1"
layer = RIPPLE_LAYER
pixel_y = -16
pixel_x = -16
duration = 30
/obj/effect/temp_visual/ratvar/prolonging_prism/Initialize(mapload, set_appearance)
. = ..()
if(set_appearance)
appearance = set_appearance
animate(src, alpha = 0, time = duration, easing = BOUNCE_EASING)
/obj/effect/temp_visual/ratvar/spearbreak
icon = 'icons/effects/64x64.dmi'
icon_state = "ratvarspearbreak"
+3 -1
View File
@@ -269,13 +269,15 @@
return
if(!in_range(src, user))
return
if(is_cyborg)
return
else
if(zero_amount())
return
//get amount from user
var/min = 0
var/max = src.get_amount()
var/stackmaterial = round(input(user,"How many sheets do you wish to take out of this stack? (Maximum [max]") as num)
var/stackmaterial = round(input(user,"How many sheets do you wish to take out of this stack? (Maximum [max])") as num)
if(stackmaterial == null || stackmaterial <= min || stackmaterial >= src.get_amount())
return
else
+6 -1
View File
@@ -125,8 +125,8 @@ obj/item/weapon/construction
var/canRturf = 0
var/ranged = FALSE
var/airlock_type = /obj/machinery/door/airlock
var/airlock_glass = FALSE // So the floor's rcd_act knows how much ammo to use
var/window_type = /obj/structure/window/fulltile
var/advanced_airlock_setting = 1 //Set to 1 if you want more paintjobs available
var/list/conf_access = null
var/use_one_access = 0 //If the airlock should require ALL or only ONE of the listed accesses.
@@ -266,8 +266,10 @@ obj/item/weapon/construction
airlock_type = /obj/machinery/door/airlock/external
if("High Security")
airlock_type = /obj/machinery/door/airlock/highsecurity
airlock_glass = FALSE
else
airlock_type = /obj/machinery/door/airlock
airlock_glass = FALSE
if("Glass")
if(advanced_airlock_setting == 1)
@@ -289,10 +291,13 @@ obj/item/weapon/construction
airlock_type = /obj/machinery/door/airlock/glass_research
if("Mining")
airlock_type = /obj/machinery/door/airlock/glass_mining
airlock_glass = TRUE
else
airlock_type = /obj/machinery/door/airlock/glass
airlock_glass = TRUE
else
airlock_type = /obj/machinery/door/airlock
airlock_glass = FALSE
/obj/item/weapon/construction/rcd/proc/rcd_create(atom/A, mob/user)
+3 -3
View File
@@ -23,7 +23,7 @@
//variables for prebuilt flamethrowers
var/create_full = FALSE
var/create_with_tank = FALSE
var/igniter_type = /obj/item/device/assembly/igniter
var/igniter_type = /obj/item/device/assembly/igniter
/obj/item/weapon/flamethrower/Destroy()
if(weldtool)
@@ -145,7 +145,7 @@
if(!status)
to_chat(user, "<span class='notice'>Secure the igniter first!</span>")
return
to_chat(user, "<span class='notice'>You ignite [src]!</span>")
to_chat(user, "<span class='notice'>You [lit ? "extinguish" : "ignite"] [src]!</span>")
lit = !lit
if(lit)
START_PROCESSING(SSobj, src)
@@ -238,4 +238,4 @@
return
/obj/item/device/assembly/igniter/proc/ignite_turf(obj/item/weapon/flamethrower/F,turf/open/location,release_amount = 0.05)
F.default_ignite(location,release_amount)
F.default_ignite(location,release_amount)
@@ -128,6 +128,7 @@
user.visible_message("[user] recharged \the [A]!","<span class='notice'>You recharged \the [A]!</span>")
recharging = FALSE
return TRUE
recharging = FALSE
/obj/item/weapon/inducer/attack(mob/M, mob/user)
+8 -8
View File
@@ -58,8 +58,8 @@
origin_tech = "materials=5;engineering=5;abductor=3"
/obj/item/weapon/wrench/power
name = "Hand Drill"
desc ="A simple powered drill with a bolt bit"
name = "hand drill"
desc = "A simple powered hand drill. It's fitted with a bolt bit."
icon_state = "drill_bolt"
item_state = "drill"
usesound = 'sound/items/drill_use.ogg'
@@ -182,8 +182,8 @@
toolspeed = 0.1
/obj/item/weapon/screwdriver/power
name = "Hand Drill"
desc = "A simple hand drill with a screwdriver bit attached."
name = "hand drill"
desc = "A simple powered hand drill. It's fitted with a screw bit."
icon_state = "drill_screw"
item_state = "drill"
materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25)
@@ -283,8 +283,8 @@
toolspeed = 0.5
/obj/item/weapon/wirecutters/power
name = "Jaws of Life"
desc = "A set of jaws of life, the magic of science has managed to fit it down into a device small enough to fit in a tool belt. It's fitted with a cutting head."
name = "jaws of life"
desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a cutting head."
icon_state = "jaws_cutter"
item_state = "jawsoflife"
origin_tech = "materials=2;engineering=2"
@@ -714,8 +714,8 @@
toolspeed = 0.5
/obj/item/weapon/crowbar/power
name = "Jaws of Life"
desc = "A set of jaws of life, the magic of science has managed to fit it down into a device small enough to fit in a tool belt. It's fitted with a prying head"
name = "jaws of life"
desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a prying head."
icon_state = "jaws_pry"
item_state = "jawsoflife"
materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25)
@@ -234,6 +234,7 @@
throw_range = 3
hitsound = 'sound/items/trayhit1.ogg'
hit_reaction_chance = 50
materials = list(MAT_METAL = 2000)
var/break_chance = 5 //Likely hood of smashing the chair.
var/obj/structure/chair/origin_type = /obj/structure/chair
@@ -317,6 +318,7 @@
max_integrity = 70
hitsound = 'sound/weapons/genhit1.ogg'
origin_type = /obj/structure/chair/wood
materials = null
break_chance = 50
/obj/item/chair/wood/narsie_act()
+3 -1
View File
@@ -23,7 +23,9 @@
if(RCD_DECONSTRUCT)
return list("mode" = RCD_DECONSTRUCT, "delay" = 20, "cost" = 5)
if(RCD_WINDOWGRILLE)
return list("mode" = RCD_WINDOWGRILLE, "delay" = 40, "cost" = 10)
if(the_rcd.window_type == /obj/structure/window/reinforced/fulltile)
return list("mode" = RCD_WINDOWGRILLE, "delay" = 40, "cost" = 12)
else return list("mode" = RCD_WINDOWGRILLE, "delay" = 20, "cost" = 8)
return FALSE
/obj/structure/grille/rcd_act(mob/user, var/obj/item/weapon/construction/rcd/the_rcd, passed_mode)
+1 -1
View File
@@ -190,7 +190,7 @@ GLOBAL_LIST_EMPTY(crematoriums)
// Make sure we don't delete the actual morgue and its tray
var/list/conts = GetAllContents() - src - connected
if(conts.len <= 1)
if(!conts.len)
audible_message("<span class='italics'>You hear a hollow crackle.</span>")
return
+4 -2
View File
@@ -206,11 +206,13 @@
if(RCD_FLOORWALL)
return list("mode" = RCD_FLOORWALL, "delay" = 20, "cost" = 16)
if(RCD_AIRLOCK)
return list("mode" = RCD_AIRLOCK, "delay" = 50, "cost" = 16)
if(the_rcd.airlock_glass)
return list("mode" = RCD_AIRLOCK, "delay" = 50, "cost" = 20)
else return list("mode" = RCD_AIRLOCK, "delay" = 50, "cost" = 16)
if(RCD_DECONSTRUCT)
return list("mode" = RCD_DECONSTRUCT, "delay" = 50, "cost" = 33)
if(RCD_WINDOWGRILLE)
return list("mode" = RCD_WINDOWGRILLE, "delay" = 40, "cost" = 4)
return list("mode" = RCD_WINDOWGRILLE, "delay" = 10, "cost" = 4)
return FALSE
/turf/open/floor/rcd_act(mob/user, obj/item/weapon/construction/rcd/the_rcd, passed_mode)
+4 -1
View File
@@ -173,7 +173,10 @@
switch(the_rcd.mode)
if(RCD_FLOORWALL)
return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 2)
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
if(L)
return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 1)
else return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 3)
return FALSE
/turf/open/space/rcd_act(mob/user, obj/item/weapon/construction/rcd/the_rcd, passed_mode)
+4 -1
View File
@@ -66,7 +66,10 @@ GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin())
/client/proc/toggle_AI_interact, /*toggle admin ability to interact with machines as an AI*/
/client/proc/customiseSNPC, /* Customise any interactive crewmembers in the world */
/client/proc/resetSNPC, /* Resets any interactive crewmembers in the world */
/client/proc/open_shuttle_manipulator /* Opens shuttle manipulator UI */
/client/proc/open_shuttle_manipulator, /* Opens shuttle manipulator UI */
/client/proc/deadchat,
/client/proc/toggleprayers,
/client/proc/toggleadminhelpsound
)
GLOBAL_PROTECT(admin_verbs_ban)
GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel,/client/proc/DB_ban_panel,/client/proc/stickybanpanel))
+1 -1
View File
@@ -506,7 +506,7 @@
for(var/datum/mind/N in SSticker.mode.cult)
var/mob/M = N.current
if(M)
dat += "<tr><td><a href='?_src_=holder;adminplayeropts=\ref[M]'>[M.real_name]</a>[M.client ? "" : " <i>(No Client)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
dat += "<tr><td><a href='?_src_=holder;adminplayeropts=\ref[M]'>[M.real_name]</a>[N.has_antag_datum(ANTAG_DATUM_CULT_MASTER) ? "<i><font color=red> \[Master\]</font></i>" : ""][M.client ? "" : " <i>(No Client)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
dat += "<td><A href='?priv_msg=[M.ckey]'>PM</A></td>"
dat += "<td><A href='?_src_=holder;adminplayerobservefollow=\ref[M]'>FLW</a></td></tr>"
dat += "</table>"
+6 -3
View File
@@ -480,7 +480,8 @@
if(minutes > GLOB.CMinutes)
mins = minutes - GLOB.CMinutes
mins = input(usr,"How long (in minutes)? (Default: 1440)","Ban time",mins ? mins : 1440) as num|null
if(!mins)
if(mins <= 0)
to_chat(usr, "<span class='danger'>[mins] is not a valid duration.</span>")
return
minutes = GLOB.CMinutes + mins
duration = GetExp(minutes)
@@ -914,7 +915,8 @@
switch(alert("Temporary Ban?",,"Yes","No", "Cancel"))
if("Yes")
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
if(!mins)
if(mins <= 0)
to_chat(usr, "<span class='danger'>[mins] is not a valid duration.</span>")
return
var/reason = input(usr,"Please State Reason.","Reason") as message|null
if(!reason)
@@ -1109,7 +1111,8 @@
switch(alert("Temporary Ban?",,"Yes","No", "Cancel"))
if("Yes")
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
if(!mins)
if(mins <= 0)
to_chat(usr, "<span class='danger'>[mins] is not a valid duration.</span>")
return
var/reason = input(usr,"Please State Reason.","Reason") as message|null
if(!reason)
+3 -3
View File
@@ -612,8 +612,8 @@ GLOBAL_PROTECT(VVpixelmovement)
if (O.vv_edit_var(variable, var_new) == FALSE)
to_chat(src, "Your edit was rejected by the object.")
return
log_world("### VarEdit by [src]: [O.type] [variable]=[html_encode("[O.vars[variable]]")]")
log_admin("[key_name(src)] modified [original_name]'s [variable] to [O.vars[variable]]")
var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] to [O.vars[variable]]"
log_world("### VarEdit by [src]: [O.type] [variable]=[html_encode("[var_new]")]")
log_admin("[key_name(src)] modified [original_name]'s [variable] to [var_new]")
var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] to [var_new]"
message_admins(msg)
admin_ticket_log(O, msg)
@@ -9,13 +9,16 @@ Pipes -> Pipelines
Pipelines + Other Objects -> Pipe network
*/
#define PIPE_VISIBLE_LEVEL 2
#define PIPE_HIDDEN_LEVEL 1
/obj/machinery/atmospherics
anchored = 1
idle_power_usage = 0
active_power_usage = 0
power_channel = ENVIRON
on_blueprints = TRUE
layer = GAS_PIPE_LAYER //under wires
layer = GAS_PIPE_HIDDEN_LAYER //under wires
resistance_flags = FIRE_PROOF
obj_integrity = 200
max_integrity = 200
@@ -4,6 +4,7 @@
initialize_directions = SOUTH|NORTH
use_power = 1
device_type = BINARY
layer = GAS_PUMP_LAYER
/obj/machinery/atmospherics/components/binary/SetInitDirections()
switch(dir)
@@ -4,6 +4,7 @@
initialize_directions = SOUTH|NORTH|WEST
use_power = 1
device_type = TRINARY
layer = GAS_FILTER_LAYER
var/flipped = 0
@@ -7,6 +7,7 @@
obj_integrity = 350
max_integrity = 350
armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 30, acid = 30)
layer = ABOVE_WINDOW_LAYER
var/on = FALSE
state_open = FALSE
@@ -155,7 +156,7 @@
var/turf/T = get_turf(src)
if(occupant)
var/mob/living/mob_occupant = occupant
if(mob_occupant.health >= 100) // Don't bother with fully healed people.
if(mob_occupant.health >= mob_occupant.getMaxHealth()) // Don't bother with fully healed people.
on = FALSE
update_icon()
playsound(T, 'sound/machines/cryo_warning.ogg', volume) // Bug the doctors.
@@ -4,7 +4,8 @@
density = 1
name = "generator input"
desc = "Placeholder"
desc = "An input for a generator."
layer = LOW_OBJ_LAYER
var/update_cycle
@@ -7,6 +7,8 @@
can_unwrench = 1
layer = LOW_OBJ_LAYER
var/obj/machinery/atmospherics/components/unary/heat_exchanger/partner = null
var/update_cycle
@@ -16,6 +16,7 @@
var/datum/radio_frequency/radio_connection
level = 1
layer = GAS_SCRUBBER_LAYER
/obj/machinery/atmospherics/components/unary/outlet_injector/Destroy()
if(SSradio)
@@ -7,6 +7,7 @@
dir = SOUTH
initialize_directions = SOUTH
layer = GAS_SCRUBBER_LAYER
var/on = 0
@@ -7,6 +7,7 @@
var/obj/machinery/portable_atmospherics/connected_device
use_power = 0
level = 0
layer = GAS_FILTER_LAYER
/obj/machinery/atmospherics/components/unary/portables_connector/New()
..()
@@ -9,6 +9,7 @@
var/volume = 10000 //in liters, 1 meters by 1 meters by 2 meters
density = 1
var/gas_type = 0
layer = ABOVE_WINDOW_LAYER
/obj/machinery/atmospherics/components/unary/tank/New()
..()
@@ -1,7 +1,8 @@
/obj/machinery/atmospherics/components/unary/thermomachine
name = "thermomachine"
desc = "Heats or cools gas in connected pipes."
icon_state = "cold_map"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "freezer"
var/icon_state_on = "cold_on"
var/icon_state_open = "cold_off"
density = TRUE
@@ -9,7 +10,8 @@
obj_integrity = 300
max_integrity = 300
armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 80, acid = 30)
layer = OBJ_LAYER
var/on = FALSE
var/min_temperature = 0
var/max_temperature = 0
@@ -13,6 +13,7 @@
can_unwrench = 1
welded = 0
level = 1
layer = GAS_SCRUBBER_LAYER
var/id_tag = null
var/on = 0
@@ -11,6 +11,7 @@
can_unwrench = 1
welded = 0
level = 1
layer = GAS_SCRUBBER_LAYER
var/id_tag = null
var/on = 0
@@ -38,13 +38,13 @@
//Colored pipes, use these for mapping
/obj/machinery/atmospherics/pipe/manifold/general
name="pipe"
/obj/machinery/atmospherics/pipe/manifold/general/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold/general/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold/scrubbers
name="scrubbers pipe"
@@ -52,10 +52,11 @@
color=rgb(255,0,0)
/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold/supply
name="air supply pipe"
@@ -63,10 +64,11 @@
color=rgb(0,0,255)
/obj/machinery/atmospherics/pipe/manifold/supply/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold/supply/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold/supplymain
name="main air supply pipe"
@@ -74,47 +76,96 @@
color=rgb(130,43,272)
/obj/machinery/atmospherics/pipe/manifold/supplymain/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold/yellow
pipe_color=rgb(255,198,0)
color=rgb(255,198,0)
/obj/machinery/atmospherics/pipe/manifold/yellow/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold/yellow/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold/cyan
pipe_color=rgb(0,256,249)
color=rgb(0,256,249)
/obj/machinery/atmospherics/pipe/manifold/cyan/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold/cyan/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold/green
pipe_color=rgb(30,256,0)
color=rgb(30,256,0)
/obj/machinery/atmospherics/pipe/manifold/green/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold/green/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold/orange
pipe_color=rgb(255,127,39)
color=rgb(255,127,39)
pipe_color=rgb(255,129,25)
color=rgb(255,129,25)
/obj/machinery/atmospherics/pipe/manifold/orange/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold/orange/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold/purple
pipe_color=rgb(128,0,182)
color=rgb(128,0,182)
/obj/machinery/atmospherics/pipe/manifold/purple/visible
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold/purple/hidden
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold/dark
pipe_color=rgb(69,69,69)
color=rgb(69,69,69)
/obj/machinery/atmospherics/pipe/manifold/dark/visible
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold/dark/hidden
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold/violet
pipe_color=rgb(64,0,128)
color=rgb(64,0,128)
/obj/machinery/atmospherics/pipe/manifold/violet/visible
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold/violet/hidden
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold/brown
pipe_color=rgb(178,100,56)
color=rgb(178,100,56)
/obj/machinery/atmospherics/pipe/manifold/brown/visible
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold/brown/hidden
level = PIPE_HIDDEN_LEVEL
@@ -29,13 +29,13 @@
//Colored pipes, use these for mapping
/obj/machinery/atmospherics/pipe/manifold4w/general
name="pipe"
/obj/machinery/atmospherics/pipe/manifold4w/general/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold4w/general/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers
name="scrubbers pipe"
@@ -43,10 +43,12 @@
color=rgb(255,0,0)
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold4w/supply
name="air supply pipe"
@@ -54,10 +56,11 @@
color=rgb(0,0,255)
/obj/machinery/atmospherics/pipe/manifold4w/supply/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold4w/supplymain
name="main air supply pipe"
@@ -65,47 +68,96 @@
color=rgb(130,43,272)
/obj/machinery/atmospherics/pipe/manifold4w/supplymain/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold4w/supplymain/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold4w/yellow
pipe_color=rgb(255,198,0)
color=rgb(255,198,0)
/obj/machinery/atmospherics/pipe/manifold4w/yellow/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold4w/yellow/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold4w/cyan
pipe_color=rgb(0,256,249)
color=rgb(0,256,249)
/obj/machinery/atmospherics/pipe/manifold4w/cyan/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold4w/cyan/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold4w/green
pipe_color=rgb(30,256,0)
color=rgb(30,256,0)
/obj/machinery/atmospherics/pipe/manifold4w/green/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold4w/green/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold4w/orange
pipe_color=rgb(255,127,39)
color=rgb(255,127,39)
pipe_color=rgb(255,129,25)
color=rgb(255,129,25)
/obj/machinery/atmospherics/pipe/manifold4w/orange/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold4w/orange/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold4w/purple
pipe_color=rgb(128,0,182)
color=rgb(128,0,182)
/obj/machinery/atmospherics/pipe/manifold4w/purple/visible
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold4w/purple/hidden
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold4w/dark
pipe_color=rgb(69,69,69)
color=rgb(69,69,69)
/obj/machinery/atmospherics/pipe/manifold4w/dark/visible
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold4w/dark/hidden
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold4w/violet
pipe_color=rgb(64,0,128)
color=rgb(64,0,128)
/obj/machinery/atmospherics/pipe/manifold4w/violet/visible
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold4w/violet/hidden
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/manifold4w/brown
pipe_color=rgb(178,100,56)
color=rgb(178,100,56)
/obj/machinery/atmospherics/pipe/manifold4w/brown/visible
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/manifold4w/brown/hidden
level = PIPE_HIDDEN_LEVEL
@@ -40,13 +40,13 @@ The regular pipe you see everywhere, including bent ones.
//Colored pipes, use these for mapping
/obj/machinery/atmospherics/pipe/simple/general
name="pipe"
/obj/machinery/atmospherics/pipe/simple/general/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/simple/general/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/simple/scrubbers
name="scrubbers pipe"
@@ -54,10 +54,11 @@ The regular pipe you see everywhere, including bent ones.
color=rgb(255,0,0)
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/simple/supply
name="air supply pipe"
@@ -65,10 +66,11 @@ The regular pipe you see everywhere, including bent ones.
color=rgb(0,0,255)
/obj/machinery/atmospherics/pipe/simple/supply/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/simple/supply/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/simple/supplymain
name="main air supply pipe"
@@ -76,47 +78,96 @@ The regular pipe you see everywhere, including bent ones.
color=rgb(130,43,272)
/obj/machinery/atmospherics/pipe/simple/supplymain/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/simple/supplymain/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/simple/yellow
pipe_color=rgb(255,198,0)
color=rgb(255,198,0)
/obj/machinery/atmospherics/pipe/simple/yellow/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/simple/yellow/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/simple/cyan
pipe_color=rgb(0,256,249)
color=rgb(0,256,249)
/obj/machinery/atmospherics/pipe/simple/cyan/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/simple/cyan/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/simple/green
pipe_color=rgb(30,256,0)
color=rgb(30,256,0)
/obj/machinery/atmospherics/pipe/simple/green/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/simple/green/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/simple/orange
pipe_color=rgb(255,127,39)
color=rgb(255,127,39)
pipe_color=rgb(255,129,25)
color=rgb(255,129,25)
/obj/machinery/atmospherics/pipe/simple/orange/visible
level = 2
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/simple/orange/hidden
level = 1
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/simple/purple
pipe_color=rgb(128,0,182)
color=rgb(128,0,182)
/obj/machinery/atmospherics/pipe/simple/purple/visible
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/simple/purple/hidden
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/simple/dark
pipe_color=rgb(69,69,69)
color=rgb(69,69,69)
/obj/machinery/atmospherics/pipe/simple/dark/visible
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/simple/dark/hidden
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/simple/violet
pipe_color=rgb(64,0,128)
color=rgb(64,0,128)
/obj/machinery/atmospherics/pipe/simple/violet/visible
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/simple/violet/hidden
level = PIPE_HIDDEN_LEVEL
/obj/machinery/atmospherics/pipe/simple/brown
pipe_color=rgb(178,100,56)
color=rgb(178,100,56)
/obj/machinery/atmospherics/pipe/simple/brown/visible
level = PIPE_VISIBLE_LEVEL
layer = GAS_PIPE_VISIBLE_LAYER
/obj/machinery/atmospherics/pipe/simple/brown/hidden
level = PIPE_HIDDEN_LEVEL
+1 -1
View File
@@ -69,7 +69,7 @@
// Plasteel. Lightweight, strong and contains some plasma too.
/datum/export/stack/plasteel
cost = 85
cost = 305 // 2000u of plasma + 2000u of metal.
message = "of plasteel"
export_types = list(/obj/item/stack/sheet/plasteel)
+2 -2
View File
@@ -1249,13 +1249,13 @@
/datum/supply_pack/materials/plasteel20
name = "20 Plasteel Sheets"
cost = 3000
cost = 7500
contains = list(/obj/item/stack/sheet/plasteel/twenty)
crate_name = "plasteel sheets crate"
/datum/supply_pack/materials/plasteel50
name = "50 Plasteel Sheets"
cost = 5000
cost = 16500
contains = list(/obj/item/stack/sheet/plasteel/fifty)
crate_name = "plasteel sheets crate"
+1 -1
View File
@@ -490,7 +490,7 @@ GLOBAL_LIST(external_rsc_urls)
return
if(!account_join_date)
account_join_date = "Error"
var/datum/DBQuery/query_log_connection = SSdbcore.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_ip`,`server_port`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),COALESCE(INET_ATON('[world.internet_address]'), 0),'[world.port]','[sql_ckey]',INET_ATON('[sql_ip]'),'[sql_computerid]')")
var/datum/DBQuery/query_log_connection = SSdbcore.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_ip`,`server_port`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')),'[world.port]','[sql_ckey]',INET_ATON('[sql_ip]'),'[sql_computerid]')")
query_log_connection.Execute()
if(new_player)
player_age = -1
+2 -3
View File
@@ -625,7 +625,7 @@ Gunshots/explosions/opening doors/less rare audio (done)
else if(src.dir == WEST)
del src.currentimage
src.currentimage = new /image(left,src)
to_chat(my_target, currentimage)
SEND_IMAGE(my_target, currentimage)
/obj/effect/fake_attacker/proc/attack_loop()
@@ -669,7 +669,7 @@ Gunshots/explosions/opening doors/less rare audio (done)
var/obj/effect/overlay/O = new/obj/effect/overlay(target.loc)
O.name = "blood"
var/image/I = image('icons/effects/blood.dmi',O,"floor[rand(1,7)]",O.dir,1)
to_chat(target, I)
SEND_IMAGE(target, I)
QDEL_IN(O, 300)
@@ -786,7 +786,6 @@ Gunshots/explosions/opening doors/less rare audio (done)
new /obj/effect/hallucination/items_other(src.loc,src)
if("sounds")
//Strange audio
//to_chat(src, "Strange Audio")
switch(rand(1,20))
if(1) playsound_local(null,'sound/machines/airlock.ogg', 15, 1)
if(2)
+3 -2
View File
@@ -182,7 +182,7 @@
/obj/item/weapon/reagent_containers/food/snacks/proc/slice(accuracy, obj/item/weapon/W, mob/user)
if((slices_num <= 0 || !slices_num) || !slice_path) //is the food sliceable?
return 0
return FALSE
if ( \
!isturf(src.loc) || \
@@ -191,7 +191,7 @@
!(locate(/obj/item/weapon/storage/bag/tray) in src.loc) \
)
to_chat(user, "<span class='warning'>You cannot slice [src] here! You need a table or at least a tray.</span>")
return 1
return FALSE
var/slices_lost = 0
if (accuracy >= IS_SHARP_ACCURATE)
@@ -211,6 +211,7 @@
var/obj/item/weapon/reagent_containers/food/snacks/slice = new slice_path (loc)
initialize_slice(slice, reagents_per_slice)
qdel(src)
return TRUE
/obj/item/weapon/reagent_containers/food/snacks/proc/initialize_slice(obj/item/weapon/reagent_containers/food/snacks/slice, reagents_per_slice)
slice.create_reagents(slice.volume)
@@ -475,4 +475,13 @@
icon_state = "butter"
list_reagents = list("nutriment" = 5)
filling_color = "#FFD700"
tastes = list("butter" = 1)
tastes = list("butter" = 1)
/obj/item/weapon/reagent_containers/food/snacks/onionrings
name = "onion rings"
desc = "Onion slices coated in batter."
icon_state = "onionrings"
list_reagents = list("nutriment" = 3)
filling_color = "#C0C9A0"
gender = PLURAL
tastes = list("batter" = 3, "onion" = 1)
@@ -15,8 +15,7 @@
var/max_n_of_items = 10 // whatever fat fuck made this a global var needs to look at themselves in the mirror sometime
var/efficiency = 0
// see code/modules/food/recipes_microwave.dm for recipes
//Microwaving doesn't use recipes, instead it calls the microwave_act of the objects. For food, this creates something based on the food's cooked_type
/*******************
* Initialising
@@ -126,8 +126,6 @@
input = /obj/item/weapon/reagent_containers/food/snacks/grown/parsnip
output = /obj/item/weapon/reagent_containers/food/snacks/roastparsnip
/* mobs */
/datum/food_processor_process/mob/process_food(loc, what, processor)
..()
+72
View File
@@ -0,0 +1,72 @@
/obj/item/seeds/onion
name = "pack of onion seeds"
desc = "These seeds grow into onions."
icon_state = "seed-onion"
species = "onion"
plantname = "Onion Sprouts"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/onion
lifespan = 20
maturation = 3
production = 4
yield = 6
endurance = 25
growthstages = 3
weed_chance = 3
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1)
mutatelist = list(/obj/item/seeds/onion/red)
/obj/item/weapon/reagent_containers/food/snacks/grown/onion
seed = /obj/item/seeds/onion
name = "onion"
desc = "Nothing to cry over."
icon_state = "onion"
filling_color = "#C0C9A0"
bitesize_mod = 2
tastes = list("onions" = 1)
slice_path = /obj/item/weapon/reagent_containers/food/snacks/onion_slice
slices_num = 2
/obj/item/seeds/onion/red
name = "pack of red onion seeds"
desc = "For growing exceptionally potent onions."
icon_state = "seed-onionred"
species = "onion_red"
plantname = "Red Onion Sprouts"
weed_chance = 1
product = /obj/item/weapon/reagent_containers/food/snacks/grown/onion/red
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1, "tearjuice" = 0.05)
/obj/item/weapon/reagent_containers/food/snacks/grown/onion/red
seed = /obj/item/seeds/onion/red
name = "red onion"
desc = "Purple despite the name."
icon_state = "onion_red"
filling_color = "#C29ACF"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/onion_slice/red
/obj/item/weapon/reagent_containers/food/snacks/grown/onion/slice(accuracy, obj/item/weapon/W, mob/user)
var/datum/effect_system/smoke_spread/chem/S = new //Since the onion is destroyed when it's sliced,
var/splat_location = get_turf(src) //we need to set up the smoke beforehand
S.attach(splat_location)
S.set_up(reagents, 0, splat_location, 0)
if(..())
S.start()
return TRUE
qdel(S)
/obj/item/weapon/reagent_containers/food/snacks/onion_slice
name = "onion slices"
desc = "Rings, not for wearing."
icon_state = "onionslice"
list_reagents = list("nutriment" = 5, "vitamin" = 2)
filling_color = "#C0C9A0"
gender = PLURAL
cooked_type = /obj/item/weapon/reagent_containers/food/snacks/onionrings
/obj/item/weapon/reagent_containers/food/snacks/onion_slice/red
name = "red onion slices"
desc = "They shine like exceptionally low quality amethyst."
icon_state = "onionslice_red"
filling_color = "#C29ACF"
list_reagents = list("nutriment" = 5, "vitamin" = 2, "tearjuice" = 2.5)
+10
View File
@@ -270,6 +270,8 @@
source_turf.luminosity = Ceiling(light_range)
for(T in view(Ceiling(light_range), source_turf))
for (thing in T.get_corners(source_turf))
if(!thing)
continue
C = thing
corners[C] = 0
turfs += T
@@ -291,6 +293,8 @@
LAZYINITLIST(effect_str)
if (needs_update == LIGHTING_VIS_UPDATE)
for (thing in corners - effect_str) // New corners
if(!thing)
continue
C = thing
LAZYADD(C.affecting, src)
if (!C.active)
@@ -300,6 +304,8 @@
else
L = corners - effect_str
for (thing in L) // New corners
if(!thing)
continue
C = thing
LAZYADD(C.affecting, src)
if (!C.active)
@@ -308,6 +314,8 @@
APPLY_CORNER(C)
for (thing in corners - L) // Existing corners
if(!thing)
continue
C = thing
if (!C.active)
effect_str[C] = 0
@@ -316,6 +324,8 @@
L = effect_str - corners
for (thing in L) // Old, now gone, corners.
if(!thing)
continue
C = thing
REMOVE_CORNER(C)
LAZYREMOVE(C.affecting, src)
+6
View File
@@ -24,6 +24,8 @@
var/datum/lighting_corner/C
var/thing
for (thing in corners)
if(!thing)
continue
C = thing
C.update_active()
@@ -45,6 +47,8 @@
var/datum/lighting_corner/C
var/datum/light_source/S
for (thing in corners)
if(!thing)
continue
C = thing
if (!C.active) // We would activate the corner, calculate the lighting for it.
for (thing in C.affecting)
@@ -61,6 +65,8 @@
var/thing
var/datum/lighting_corner/L
for (thing in corners)
if(!thing)
continue
L = thing
totallums += L.lum_r + L.lum_b + L.lum_g
+25 -13
View File
@@ -1,3 +1,8 @@
#define GIBTONITE_QUALITY_HIGH 3
#define GIBTONITE_QUALITY_MEDIUM 2
#define GIBTONITE_QUALITY_LOW 1
/**********************Mineral ores**************************/
/obj/item/weapon/ore
@@ -184,10 +189,11 @@
item_state = "Gibtonite ore"
w_class = WEIGHT_CLASS_BULKY
throw_range = 0
var/primed = 0
var/primed = FALSE
var/det_time = 100
var/quality = 1 //How pure this gibtonite is, determines the explosion produced by it and is derived from the det_time of the rock wall it was taken from, higher value = better
var/quality = GIBTONITE_QUALITY_LOW //How pure this gibtonite is, determines the explosion produced by it and is derived from the det_time of the rock wall it was taken from, higher value = better
var/attacher = "UNKNOWN"
var/det_timer
/obj/item/weapon/twohanded/required/gibtonite/Destroy()
qdel(wires)
@@ -213,10 +219,12 @@
return
if(primed)
if(istype(I, /obj/item/device/mining_scanner) || istype(I, /obj/item/device/t_scanner/adv_mining_scanner) || istype(I, /obj/item/device/multitool))
primed = 0
primed = FALSE
if(det_timer)
deltimer(det_timer)
user.visible_message("The chain reaction was stopped! ...The ore's quality looks diminished.", "<span class='notice'>You stopped the chain reaction. ...The ore's quality looks diminished.</span>")
icon_state = "Gibtonite ore"
quality = 1
quality = GIBTONITE_QUALITY_LOW
return
..()
@@ -237,8 +245,8 @@
/obj/item/weapon/twohanded/required/gibtonite/proc/GibtoniteReaction(mob/user, triggered_by = 0)
if(!primed)
primed = TRUE
playsound(src,'sound/effects/hit_on_shattered_glass.ogg',50,1)
primed = 1
icon_state = "Gibtonite active"
var/turf/bombturf = get_turf(src)
var/area/A = get_area(bombturf)
@@ -260,14 +268,18 @@
else
user.visible_message("<span class='warning'>[user] strikes \the [src], causing a chain reaction!</span>", "<span class='danger'>You strike \the [src], causing a chain reaction.</span>")
log_game("[key_name(user)] has primed a [name] for detonation at [A][COORD(bombturf)]")
if(primed)
if(quality == 3)
explosion(src.loc,2,4,9,adminlog = notify_admins)
if(quality == 2)
explosion(src.loc,1,2,5,adminlog = notify_admins)
if(quality == 1)
explosion(src.loc,-1,1,3,adminlog = notify_admins)
qdel(src)
det_timer = addtimer(CALLBACK(src, .proc/detonate, notify_admins), det_time, TIMER_STOPPABLE)
/obj/item/weapon/twohanded/required/gibtonite/proc/detonate(notify_admins)
if(primed)
switch(quality)
if(GIBTONITE_QUALITY_HIGH)
explosion(src,2,4,9,adminlog = notify_admins)
if(GIBTONITE_QUALITY_MEDIUM)
explosion(src,1,2,5,adminlog = notify_admins)
if(GIBTONITE_QUALITY_LOW)
explosion(src,0,1,3,adminlog = notify_admins)
qdel(src)
/obj/item/weapon/ore/Initialize()
..()
+5
View File
@@ -28,6 +28,11 @@
else
return ..()
/obj/structure/ore_box/examine(mob/living/user)
if(Adjacent(user) && istype(user))
show_contents(user)
. = ..()
/obj/structure/ore_box/attack_hand(mob/user)
if(Adjacent(user))
show_contents(user)
+4 -7
View File
@@ -379,10 +379,6 @@
return
return TRUE
/mob/living/carbon/proc/is_mouth_covered(head_only = 0, mask_only = 0)
if( (!mask_only && head && (head.flags_cover & HEADCOVERSMOUTH)) || (!head_only && wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH)) )
return 1
/mob/living/carbon/get_standard_pixel_y_offset(lying = 0)
if(lying)
return -6
@@ -450,7 +446,7 @@
return 0
return ..()
/mob/living/carbon/proc/vomit(var/lost_nutrition = 10, var/blood = 0, var/stun = 1, var/distance = 0, var/message = 1, var/toxic = 0)
/mob/living/carbon/proc/vomit(lost_nutrition = 10, blood = FALSE, stun = TRUE, distance = 1, message = TRUE, toxic = FALSE)
if(dna && dna.species && NOHUNGER in dna.species.species_traits)
return 1
@@ -476,6 +472,9 @@
playsound(get_turf(src), 'sound/effects/splat.ogg', 50, 1)
var/turf/T = get_turf(src)
if(!blood)
nutrition -= lost_nutrition
adjustToxLoss(-3)
for(var/i=0 to distance)
if(blood)
if(T)
@@ -485,8 +484,6 @@
else
if(T)
T.add_vomit_floor(src, toxic)//toxic barf looks different
nutrition -= lost_nutrition
adjustToxLoss(-3)
T = get_step(T, dir)
if (is_blocked_turf(T))
break
@@ -35,6 +35,18 @@
number += E.bang_protect
return number
/mob/living/carbon/is_mouth_covered(head_only = 0, mask_only = 0)
if( (!mask_only && head && (head.flags_cover & HEADCOVERSMOUTH)) || (!head_only && wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH)) )
return TRUE
/mob/living/carbon/is_eyes_covered(check_glasses = 1, check_head = 1, check_mask = 1)
if(check_glasses && glasses && (glasses.flags_cover & GLASSESCOVERSEYES))
return TRUE
if(check_head && head && (head.flags_cover & HEADCOVERSEYES))
return TRUE
if(check_mask && wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH))
return TRUE
/mob/living/carbon/check_projectile_dismemberment(obj/item/projectile/P, def_zone)
var/obj/item/bodypart/affecting = get_bodypart(def_zone)
if(affecting && affecting.dismemberable && affecting.get_damage() >= (affecting.max_damage - P.dismemberment))
@@ -305,8 +317,9 @@
Weaken(stun_pwr*effect_amount)
if(istype(ears) && (deafen_pwr || damage_pwr))
ears.ear_damage += damage_pwr * effect_amount
ears.deaf = max(ears.deaf, deafen_pwr * effect_amount)
var/ear_damage = damage_pwr * effect_amount
var/deaf = max(ears.deaf, deafen_pwr * effect_amount)
adjustEarDamage(ear_damage,deaf)
if(ears.ear_damage >= 15)
to_chat(src, "<span class='warning'>Your ears start to ring badly!</span>")
@@ -66,12 +66,21 @@
var/obj/item/weapon/storage/wallet/wallet = wear_id
var/obj/item/device/pda/pda = wear_id
var/obj/item/weapon/card/id/id = wear_id
var/obj/item/device/modular_computer/tablet/tablet = wear_id
if(istype(wallet))
id = wallet.front_id
if(istype(id))
. = id.registered_name
else if(istype(pda))
. = pda.owner
else if(istype(tablet))
var/obj/item/weapon/computer_hardware/card_slot/card_slot = tablet.all_components[MC_CARD]
if(card_slot && (card_slot.stored_card2 || card_slot.stored_card))
if(card_slot.stored_card2) //The second card is the one used for authorization in the ID changing program, so we prioritize it here for consistency
. = card_slot.stored_card2.registered_name
else
if(card_slot.stored_card)
. = card_slot.stored_card.registered_name
if(!.)
. = if_no_id //to prevent null-names making the mob unclickable
return
+3 -3
View File
@@ -282,9 +282,9 @@
//Puke if toxloss is too high
if(!stat)
if(getToxLoss() >= 45 && nutrition > 20)
lastpuke ++
if(lastpuke >= 25) // about 25 second delay I guess
vomit(20, 0, 1, 0, 1, 1)
lastpuke += prob(50)
if(lastpuke >= 50) // about 25 second delay I guess
vomit(20, toxic = TRUE)
lastpuke = 0
@@ -1509,19 +1509,24 @@
// +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt.
if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !(RESISTHOT in species_traits))
//Body temperature is too hot.
var/burn_damage
switch(H.bodytemperature)
if(360 to 400)
H.throw_alert("temp", /obj/screen/alert/hot, 1)
H.apply_damage(HEAT_DAMAGE_LEVEL_1*heatmod, BURN)
burn_damage = HEAT_DAMAGE_LEVEL_1
if(400 to 460)
H.throw_alert("temp", /obj/screen/alert/hot, 2)
H.apply_damage(HEAT_DAMAGE_LEVEL_2*heatmod, BURN)
burn_damage = HEAT_DAMAGE_LEVEL_2
if(460 to INFINITY)
H.throw_alert("temp", /obj/screen/alert/hot, 3)
if(H.on_fire)
H.apply_damage(HEAT_DAMAGE_LEVEL_3*heatmod, BURN)
burn_damage = HEAT_DAMAGE_LEVEL_3
else
H.apply_damage(HEAT_DAMAGE_LEVEL_2*heatmod, BURN)
burn_damage = HEAT_DAMAGE_LEVEL_2
burn_damage *= heatmod
if((prob(burn_damage) * 10) / 4) //40% for level 3 damage on humans
H.emote("scream")
H.apply_damage(burn_damage, BURN)
else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !(GLOB.mutations_list[COLDRES] in H.dna.mutations))
switch(H.bodytemperature)
if(200 to 260)
@@ -17,7 +17,7 @@
var/datum/reagent/consumable/nutri_check = chem
if(nutri_check.nutriment_factor > 0)
var/turf/pos = get_turf(H)
H.vomit(0, 0, 0, 1, 1)
H.vomit(0, FALSE, FALSE, 2, TRUE)
playsound(pos, 'sound/effects/splat.ogg', 50, 1)
H.visible_message("<span class='danger'>[H] vomits on the floor!</span>", \
"<span class='userdanger'>You throw up on the floor!</span>")
@@ -8,20 +8,26 @@
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT)
mutant_organs = list(/obj/item/organ/tongue/zombie)
var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg')
/datum/species/zombie/infectious
name = "Infectious Zombie"
id = "memezombies"
limbs_id = "zombie"
mutanthands = /obj/item/zombie_hand
no_equip = list(slot_wear_mask, slot_head)
armor = 20 // 120 damage to KO a zombie, which kills it
speedmod = 2
mutanteyes = /obj/item/organ/eyes/night_vision/zombie
/datum/species/zombie/infectious/spec_stun(mob/living/carbon/human/H,amount)
. = min(2, amount)
/datum/species/zombie/infectious/spec_life(mob/living/carbon/C)
. = ..()
C.a_intent = INTENT_HARM // THE SUFFERING MUST FLOW
C.heal_overall_damage(4,4)
if(prob(4))
playsound(C, pick(spooks), 50, TRUE, 10)
if(C.InCritical())
C.death()
// Zombies only move around when not in crit, they instantly
+7 -1
View File
@@ -25,7 +25,7 @@
/mob/living/proc/getarmor(def_zone, type)
return 0
//this returns the mob's protection against eye damage (number between -1 and 2)
//this returns the mob's protection against eye damage (number between -1 and 2) from bright lights
/mob/living/proc/get_eye_protection()
return 0
@@ -33,6 +33,12 @@
/mob/living/proc/get_ear_protection()
return 0
/mob/living/proc/is_mouth_covered(head_only = 0, mask_only = 0)
return FALSE
/mob/living/proc/is_eyes_covered(check_glasses = 1, check_head = 1, check_mask = 1)
return FALSE
/mob/living/proc/on_hit(obj/item/projectile/P)
return
+1 -1
View File
@@ -171,7 +171,7 @@
var/icon/small_img = icon(temp_img) //Icon() is needed or else temp_img will be rescaled too >.>
var/icon/ic = icon('icons/obj/items.dmi',"photo")
small_img.Scale(8, 8)
ic.Blend(small_img,ICON_OVERLAY, 10, 13)
ic.Blend(small_img,ICON_OVERLAY, 13, 13)
p.icon = ic
toner -= 5
busy = 1
+1 -3
View File
@@ -533,7 +533,6 @@
cut_overlays()
if(displayed)
add_overlay(getFlatIcon(displayed))
add_overlay("frame-overlay")
/obj/item/wallframe/picture/after_attach(obj/O)
..()
@@ -591,13 +590,12 @@
/obj/structure/sign/picture_frame/attack_hand(mob/user)
if(framed)
framed.show()
framed.show(user)
/obj/structure/sign/picture_frame/update_icon()
cut_overlays()
if(framed)
add_overlay(getFlatIcon(framed))
add_overlay("frame-overlay")
/obj/structure/sign/picture_frame/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
+1 -1
View File
@@ -33,7 +33,7 @@ By design, d1 is the smallest direction and d2 is the highest
icon_state = "0-1"
var/d1 = 0 // cable direction 1 (see above)
var/d2 = 1 // cable direction 2 (see above)
layer = WIRE_LAYER //Above pipes, which are at GAS_PIPE_LAYER
layer = WIRE_LAYER //Above hidden pipes, GAS_PIPE_HIDDEN_LAYER
var/cable_color = "red"
var/obj/item/stack/cable_coil/stored
+2 -2
View File
@@ -1,6 +1,6 @@
/obj/machinery/power/emitter
name = "Emitter"
desc = "A heavy duty industrial laser.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
name = "emitter"
desc = "A heavy-duty industrial laser, often used in containment fields and power generation.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
icon = 'icons/obj/singularity.dmi'
icon_state = "emitter"
var/icon_state_on = "emitter_+a"
@@ -6,7 +6,7 @@
/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/place(turf/T)
if(isclosedturf(T) && !ignore_wall)
return FALSE
return TRUE
return ..()
/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/flatten
ignore_wall = TRUE
@@ -532,6 +532,44 @@
color = "#DFDFDF"
taste_description = "mayonnaise"
/datum/reagent/consumable/tearjuice
name = "Tear Juice"
id = "tearjuice"
description = "A blinding substance extracted from certain onions."
color = "#c0c9a0"
taste_description = "bitterness"
/datum/reagent/consumable/tearjuice/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(!istype(M))
return
var/unprotected = FALSE
switch(method)
if(INGEST)
unprotected = TRUE
if(INJECT)
unprotected = FALSE
else //Touch or vapor
if(!M.is_mouth_covered() && !M.is_eyes_covered())
unprotected = TRUE
if(unprotected)
if(!M.getorganslot("eye_sight")) //can't blind somebody with no eyes
to_chat(M, "<span class = 'notice'>Your eye sockets feel wet.</span>")
else
if(!M.eye_blurry)
to_chat(M, "<span class = 'warning'>Tears well up in your eyes!</span>")
M.blind_eyes(2)
M.blur_eyes(5)
..()
/datum/reagent/consumable/tearjuice/on_mob_life(mob/living/M)
..()
if(M.eye_blurry) //Don't worsen vision if it was otherwise fine
M.blur_eyes(4)
if(prob(10))
to_chat(M, "<span class = 'warning'>Your eyes sting!</span>")
M.blind_eyes(2)
////Lavaland Flora Reagents////
@@ -662,7 +662,7 @@
.=..()
if(current_cycle >=11 && prob(min(50,current_cycle)) && ishuman(M))
var/mob/living/carbon/human/H = M
H.vomit(lost_nutrition = 10, blood = prob(10), stun = prob(50), distance = rand(0,4), message = TRUE, toxic = prob(30))
H.vomit(10, prob(10), prob(50), rand(0,4), TRUE, prob(30))
for(var/datum/reagent/toxin/R in M.reagents.reagent_list)
if(R != src)
H.reagents.remove_reagent(R.id,1)
@@ -672,7 +672,7 @@
if(current_cycle >=33 && prob(15) && ishuman(M))
var/mob/living/carbon/human/H = M
H.spew_organ()
H.vomit(lost_nutrition = 0, blood = 1, stun = 1, distance = 4)
H.vomit(0, TRUE, TRUE, 4)
to_chat(H, "<span class='userdanger'>You feel something lumpy come up as you vomit.</span>")
/datum/reagent/toxin/curare
+2 -2
View File
@@ -55,7 +55,7 @@
/obj/structure/reagent_dispensers/watertank/high
name = "high-capacity water tank"
desc = "A highly-pressurized water tank made to hold gargantuan amounts of water.."
desc = "A highly pressurized water tank made to hold gargantuan amounts of water."
icon_state = "water_high" //I was gonna clean my room...
tank_volume = 100000
@@ -107,7 +107,7 @@
reagents.trans_to(W, W.max_fuel)
user.visible_message("<span class='notice'>[user] refills [user.p_their()] [W.name].</span>", "<span class='notice'>You refill [W].</span>")
playsound(src, 'sound/effects/refill.ogg', 50, 1)
update_icon()
W.update_icon()
else
user.visible_message("<span class='warning'>[user] catastrophically fails at refilling [user.p_their()] [W.name]!</span>", "<span class='userdanger'>That was stupid of you.</span>")
var/message_admins = "[key_name_admin(user)] triggered a fueltank explosion via welding tool."
@@ -763,7 +763,6 @@
name = "Flash"
desc = "When a problem arises, SCIENCE is the solution."
id = "sflash"
req_tech = list("magnets" = 3, "combat" = 2)
build_type = MECHFAB
materials = list(MAT_METAL = 750, MAT_GLASS = 750)
construction_time = 100
@@ -4,7 +4,7 @@
name = "Plasma + Iron alloy"
id = "plasteel"
build_type = SMELTER
materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT / 2, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT / 2)
materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/plasteel
category = list("initial")
@@ -13,7 +13,7 @@
name = "Plasma + Titanium alloy"
id = "plastitanium"
build_type = SMELTER
materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT / 2, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT / 2)
materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/mineral/plastitanium
category = list("initial")
+1 -1
View File
@@ -5,7 +5,7 @@ GLOBAL_PROTECT(reboot_mode)
return params[SERVICE_WORLD_PARAM]
/world/proc/ExportService(command)
return shell("python code/modules/server_tools/nudge.py \"[command]\"") == 0
return RunningService() && shell("python code/modules/server_tools/nudge.py \"[command]\"") == 0
/world/proc/IRCBroadcast(msg)
ExportService("[SERVICE_REQUEST_IRC_BROADCAST] [msg]")
+1 -1
View File
@@ -277,7 +277,7 @@
else if((findtext(message, vomit_words)))
cooldown = COOLDOWN_STUN
for(var/mob/living/carbon/C in listeners)
C.vomit(10 * power_multiplier)
C.vomit(10 * power_multiplier, distance = power_multiplier)
//SILENCE
else if((findtext(message, silence_words)))
@@ -0,0 +1,4 @@
author: "QualityVan"
delete-after: True
changes:
- rscdel: "Cyborgs can no longer alt-click their material stacks to split them"
@@ -0,0 +1,4 @@
author: "QualityVan"
delete-after: True
changes:
- bugfix: "Cremators now still work when there's only one thing in them"
@@ -0,0 +1,4 @@
author: "QualityVan"
delete-after: True
changes:
- bugfix: "The ORM now uses the intended amount of resources when making alloys"
@@ -0,0 +1,4 @@
author: "oranges"
delete-after: True
changes:
- rscadd: "Added stungloves to the brain damage lines"
@@ -0,0 +1,5 @@
author: "Joan"
delete-after: True
changes:
- rscadd: "Added Prolonging Prism as an application scripture.
balance: Prolonging Prism will delay the arrival of an emergency shuttle by 2 minutes at the cost of 2500W of power plus 75W for every 10 CV and 750W for every previous activation. In addition to the high cost, it very obviously affects the shuttle dock and leaves an obvious trail to the prism."
@@ -0,0 +1,4 @@
author: "Tacolizard"
delete-after: True
changes:
- bugfix: "Flamethrowers no longer say they're being ignited when you extinguish them"
@@ -0,0 +1,4 @@
author: "MrStonedOne and Lummox JR"
delete-after: True
changes:
- bugfix: "Fixed icon scaling and size preferences not loading (Technically size preferences were loading because byond saves that locally, but that's not reliable because ss13 shares a hub)"
@@ -0,0 +1,4 @@
author: "Joan"
delete-after: True
changes:
- rscdel: "Cultists must be human to run for Cult Master status."

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