Merge branch 'master' into RemoveSetBackground

This commit is contained in:
Jordan Brown
2018-01-10 12:37:53 -08:00
committed by GitHub
64 changed files with 2681 additions and 2255 deletions
+79 -38
View File
@@ -19323,7 +19323,7 @@
dir = 4
},
/turf/closed/wall,
/area/maintenance/port)
/area/quartermaster/warehouse)
"aWD" = (
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plasteel,
@@ -19816,7 +19816,7 @@
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/turf/closed/wall,
/area/maintenance/port)
/area/quartermaster/warehouse)
"aXF" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/vault{
@@ -19850,7 +19850,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall,
/area/maintenance/port)
/area/quartermaster/warehouse)
"aXK" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -20003,7 +20003,7 @@
dir = 4
},
/turf/closed/wall,
/area/maintenance/port)
/area/quartermaster/warehouse)
"aYd" = (
/obj/structure/chair/office/dark,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
@@ -20591,7 +20591,7 @@
"aZF" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/area/maintenance/port)
/area/quartermaster/warehouse)
"aZG" = (
/obj/machinery/light_switch{
pixel_y = 28
@@ -20617,7 +20617,7 @@
/obj/item/stack/sheet/cardboard,
/obj/item/stack/rods/fifty,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aZJ" = (
/obj/structure/table/wood,
/obj/item/device/camera/detective,
@@ -21037,7 +21037,7 @@
/area/hallway/primary/starboard)
"baS" = (
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"baT" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -21076,7 +21076,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/closet/crate,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"baZ" = (
/obj/machinery/status_display{
layer = 4;
@@ -21229,7 +21229,7 @@
/obj/structure/closet/crate,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bbu" = (
/obj/machinery/power/apc{
dir = 1;
@@ -21380,7 +21380,7 @@
dir = 4
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bbQ" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/drinks/bottle/whiskey{
@@ -21398,7 +21398,7 @@
dir = 4
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bbT" = (
/obj/structure/table/wood,
/obj/item/device/flashlight/lamp/green,
@@ -21662,13 +21662,13 @@
dir = 8
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bcF" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bcG" = (
/obj/structure/table/wood,
/obj/machinery/computer/security/wooden_tv,
@@ -21690,7 +21690,7 @@
},
/obj/structure/closet/crate/freezer,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bcK" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/maintenance,
@@ -21741,7 +21741,7 @@
dir = 4
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bcS" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -21751,13 +21751,13 @@
dir = 4
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bcT" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/closed/wall,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bcU" = (
/obj/item/stack/tile/plasteel,
/turf/open/space,
@@ -22129,7 +22129,7 @@
"bdS" = (
/obj/structure/closet/crate/internals,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bdT" = (
/obj/machinery/power/apc{
dir = 8;
@@ -22148,7 +22148,7 @@
"bdU" = (
/obj/structure/closet/crate/medical,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bdV" = (
/obj/item/stack/sheet/metal,
/turf/open/floor/plating/airless,
@@ -22405,7 +22405,7 @@
},
/obj/structure/closet/crate,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bey" = (
/turf/open/floor/plasteel/white/corner{
dir = 8
@@ -22447,7 +22447,7 @@
},
/obj/structure/closet/crate,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"beE" = (
/obj/machinery/light,
/turf/open/floor/plasteel,
@@ -22691,7 +22691,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/item/stack/sheet/cardboard,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bfh" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -22702,7 +22702,7 @@
"bfi" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bfj" = (
/obj/structure/disposalpipe/trunk,
/obj/structure/disposaloutlet{
@@ -23153,7 +23153,7 @@
dir = 9
},
/turf/closed/wall,
/area/maintenance/port)
/area/quartermaster/warehouse)
"bgz" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
@@ -23162,7 +23162,7 @@
"bgA" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bgB" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -23760,7 +23760,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"bhX" = (
/obj/structure/disposalpipe/sorting/wrap{
dir = 1
@@ -46793,7 +46793,7 @@
"ckQ" = (
/obj/structure/closet/cardboard,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"ckS" = (
/obj/structure/closet/cardboard,
/turf/open/floor/plating,
@@ -52719,7 +52719,7 @@
/obj/effect/landmark/event_spawn,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"cBj" = (
/obj/structure/table,
/obj/item/folder/blue,
@@ -57013,6 +57013,47 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"QoZ" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"Qpa" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"Qpb" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
icon_state = "1-2"
},
/obj/machinery/power/apc{
dir = 4;
name = "Cargo Warehouse APC";
areastring = "/area/quartermaster/warehouse";
pixel_x = 26
},
/obj/structure/cable{
icon_state = "0-2"
},
/turf/open/floor/plating,
/area/maintenance/port)
"Qpc" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"Qpd" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"Qpe" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"Qpf" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"Qpg" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"Qph" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
(1,1,1) = {"
aaa
@@ -77186,7 +77227,7 @@ aWu
aYa
aZD
aZD
aZD
Qpb
aZD
aZD
bff
@@ -77705,7 +77746,7 @@ baS
bdS
bdU
ckQ
aZE
Qpg
bjq
bjr
bjr
@@ -78219,7 +78260,7 @@ bcR
bcE
baS
bex
bhY
aZF
bgu
bic
bku
@@ -78476,7 +78517,7 @@ bcS
bbt
bfi
beD
aZE
Qph
aZE
biA
bmg
@@ -78726,13 +78767,13 @@ aTH
aPK
aWz
aWC
aZE
aZE
aZE
QoZ
Qpa
Qpc
bcT
aZE
aZE
aZE
Qpd
Qpe
Qpf
aZE
bju
biv
+127 -44
View File
@@ -14590,6 +14590,9 @@
dir = 6
},
/obj/effect/decal/cleanable/oil,
/obj/structure/cable{
icon_state = "2-4"
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
"aKl" = (
@@ -14867,6 +14870,9 @@
req_access_txt = "31"
},
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
"aLi" = (
@@ -15319,27 +15325,27 @@
dir = 4
},
/turf/closed/wall,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aMp" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aMq" = (
/obj/effect/spawner/lootdrop/maintenance,
/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aMr" = (
/obj/structure/closet/crate,
/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aMs" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -15348,7 +15354,7 @@
pixel_y = 32
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aMt" = (
/obj/structure/closet/cardboard,
/obj/structure/disposalpipe/segment{
@@ -15362,20 +15368,27 @@
dir = 2
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aMu" = (
/obj/item/cigbutt/cigarbutt,
/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aMv" = (
/obj/structure/disposalpipe/segment{
dir = 9
},
/obj/machinery/power/apc{
dir = 4;
name = "Cargo Warehouse APC";
areastring = "/area/quartermaster/warehouse";
pixel_x = 26
},
/obj/structure/cable,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aMw" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -15952,20 +15965,20 @@
pixel_x = -32
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aNO" = (
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aNP" = (
/obj/structure/closet/crate,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aNQ" = (
/obj/structure/extinguisher_cabinet{
pixel_x = 27
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aNR" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -16498,33 +16511,33 @@
/obj/effect/spawner/lootdrop/maintenance,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aOZ" = (
/obj/item/stack/sheet/cardboard,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aPa" = (
/obj/structure/closet/crate,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aPb" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aPc" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aPd" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -16904,16 +16917,16 @@
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aQd" = (
/obj/item/device/flashlight,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aQe" = (
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aQf" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
@@ -16921,11 +16934,11 @@
},
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aQg" = (
/obj/structure/closet/crate/medical,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aQh" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/supply)
@@ -17446,7 +17459,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aRo" = (
/obj/machinery/door/poddoor/shutters{
id = "qm_warehouse";
@@ -17455,7 +17468,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aRp" = (
/obj/machinery/door/poddoor/shutters{
id = "qm_warehouse";
@@ -17463,11 +17476,11 @@
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aRq" = (
/obj/structure/closet/crate/internals,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"aRr" = (
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/supply)
@@ -48291,7 +48304,7 @@
"coL" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating/airless,
/area/quartermaster/storage)
/area/quartermaster/warehouse)
"coN" = (
/turf/open/floor/plasteel/neutral/corner,
/area/hallway/secondary/exit/departure_lounge)
@@ -51370,6 +51383,76 @@
/obj/machinery/vending/games,
/turf/open/floor/plasteel/dark,
/area/library)
"cCX" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
"cCY" = (
/obj/structure/disposalpipe/segment{
dir = 10
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
"cCZ" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable{
icon_state = "2-8"
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
"cDa" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"cDb" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"cDc" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"cDd" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"cDe" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"cDf" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"cDg" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"cDh" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"cDi" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"cDj" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"cDk" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"cDl" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"cDm" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
"cDn" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
(1,1,1) = {"
aaa
@@ -90793,12 +90876,12 @@ aEd
aIj
aJm
aKg
aLg
cDa
aMo
aLg
aLg
aLg
aLg
cDd
cDf
cDg
cDh
aLg
aTj
aUu
@@ -91826,8 +91909,8 @@ aMs
aNO
aPb
aQe
aLg
aLg
cDi
cDj
aTn
aUx
aVA
@@ -92084,7 +92167,7 @@ aNP
aPb
aNO
aNP
aLg
cDk
aTo
aSk
aTm
@@ -92341,7 +92424,7 @@ aNO
aPc
aQf
aRq
aLg
cDl
aTp
aSk
aTm
@@ -92598,7 +92681,7 @@ aNQ
aNO
aQg
aNP
aLg
cDm
aTq
aSk
aVB
@@ -92848,14 +92931,14 @@ aEd
aEd
aEd
aEd
aKl
aLg
aLg
aLg
cCX
cDb
cDc
cDe
coL
coL
coL
aLg
cDn
aTr
aUy
aPd
@@ -93105,7 +93188,7 @@ aGI
aHr
aEd
aJp
aKm
cCY
aLi
aMw
aEj
@@ -93362,7 +93445,7 @@ aGJ
aGJ
aDl
aEk
aEk
cCZ
aLj
aMx
aEj
+5
View File
@@ -76,3 +76,8 @@
#define AHELP_ACTIVE 1
#define AHELP_CLOSED 2
#define AHELP_RESOLVED 3
#define ROUNDSTART_LOGOUT_REPORT_TIME 6000 //Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued.
#define SPAM_TRIGGER_WARNING 5 //Number of identical messages required before the spam-prevention will warn you to stfu
#define SPAM_TRIGGER_AUTOMUTE 10 //Number of identical messages required before the spam-prevention will automute you
+3
View File
@@ -491,3 +491,6 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE
//Fullscreen overlay resolution in tiles.
#define FULLSCREEN_OVERLAY_RESOLUTION_X 15
#define FULLSCREEN_OVERLAY_RESOLUTION_Y 15
#define SUMMON_GUNS "guns"
#define SUMMON_MAGIC "magic"
+18 -1
View File
@@ -185,4 +185,21 @@
#define OFFSET_BELT "belt"
#define OFFSET_BACK "back"
#define OFFSET_SUIT "suit"
#define OFFSET_NECK "neck"
#define OFFSET_NECK "neck"
//MINOR TWEAKS/MISC
#define AGE_MIN 17 //youngest a character can be
#define AGE_MAX 85 //oldest a character can be
#define WIZARD_AGE_MIN 30 //youngest a wizard can be
#define APPRENTICE_AGE_MIN 29 //youngest an apprentice can be
#define SHOES_SLOWDOWN 0 //How much shoes slow you down by default. Negative values speed you up
#define POCKET_STRIP_DELAY 40 //time taken (in deciseconds) to search somebody's pockets
#define DOOR_CRUSH_DAMAGE 15 //the amount of damage that airlocks deal when they crush you
#define HUNGER_FACTOR 0.1 //factor at which mob nutrition decreases
#define REAGENTS_METABOLISM 0.4 //How many units of reagent are consumed per tick, by default.
#define REAGENTS_EFFECT_MULTIPLIER (REAGENTS_METABOLISM / 0.4) // By defining the effect multiplier this way, it'll exactly adjust all effects according to how they originally were with the 0.4 metabolism
// AI Toggles
#define AI_CAMERA_LUMINOSITY 5
#define AI_VOX // Comment out if you don't want VOX to be enabled and have players download the voice sounds.
+7 -1
View File
@@ -56,4 +56,10 @@
#define LINGHIVE_NONE 0
#define LINGHIVE_OUTSIDER 1
#define LINGHIVE_LING 2
#define LINGHIVE_LINK 3
#define LINGHIVE_LINK 3
//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam
#define MAX_MESSAGE_LEN 1024
#define MAX_NAME_LEN 42
#define MAX_BROADCAST_LEN 512
#define MAX_CHARTER_LEN 80
+4
View File
@@ -1,3 +1,7 @@
//Update this whenever the db schema changes
//make sure you add an update to the schema_version stable in the db changelog
#define DB_MAJOR_VERSION 4
#define DB_MINOR_VERSION 0
//Timing subsystem
//Don't run if there is an identical unique timer active
+2
View File
@@ -377,6 +377,7 @@
if(X.get_team() == T)
all_antagonists -= X
result += " "//newline between teams
CHECK_TICK
var/currrent_category
var/datum/antagonist/previous_category
@@ -396,6 +397,7 @@
previous_category = A
result += A.roundend_report()
result += "<br><br>"
CHECK_TICK
if(all_antagonists.len)
var/datum/antagonist/last = all_antagonists[all_antagonists.len]
+1 -1
View File
@@ -1500,7 +1500,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
var/datum/thing = input
if(thing.use_tag)
if(!thing.tag)
WARNING("A ref was requested of an object with use_tag set but no tag: [thing]")
stack_trace("A ref was requested of an object with use_tag set but no tag: [thing]")
thing.use_tag = FALSE
else
return "\[[url_encode(thing.tag)]\]"
+12 -51
View File
@@ -19,53 +19,6 @@
2 for preloading absolutely everything;
*/
//ADMIN STUFF
#define ROUNDSTART_LOGOUT_REPORT_TIME 6000 //Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued.
#define SPAM_TRIGGER_WARNING 5 //Number of identical messages required before the spam-prevention will warn you to stfu
#define SPAM_TRIGGER_AUTOMUTE 10 //Number of identical messages required before the spam-prevention will automute you
//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam
#define MAX_MESSAGE_LEN 1024
#define MAX_NAME_LEN 42
#define MAX_BROADCAST_LEN 512
#define MAX_CHARTER_LEN 80
//MINOR TWEAKS/MISC
#define AGE_MIN 17 //youngest a character can be
#define AGE_MAX 85 //oldest a character can be
#define WIZARD_AGE_MIN 30 //youngest a wizard can be
#define APPRENTICE_AGE_MIN 29 //youngest an apprentice can be
#define SHOES_SLOWDOWN 0 //How much shoes slow you down by default. Negative values speed you up
#define POCKET_STRIP_DELAY 40 //time taken (in deciseconds) to search somebody's pockets
#define DOOR_CRUSH_DAMAGE 15 //the amount of damage that airlocks deal when they crush you
#define HUNGER_FACTOR 0.1 //factor at which mob nutrition decreases
#define REAGENTS_METABOLISM 0.4 //How many units of reagent are consumed per tick, by default.
#define REAGENTS_EFFECT_MULTIPLIER (REAGENTS_METABOLISM / 0.4) // By defining the effect multiplier this way, it'll exactly adjust all effects according to how they originally were with the 0.4 metabolism
#define MAX_STACK_AMOUNT_METAL 50
#define MAX_STACK_AMOUNT_GLASS 50
#define MAX_STACK_AMOUNT_RODS 60
// AI Toggles
#define AI_CAMERA_LUMINOSITY 5
#define AI_VOX 1 // Comment out if you don't want VOX to be enabled and have players download the voice sounds.
//Additional code for the above flags.
#ifdef TESTING
#warn compiling in TESTING mode. testing() debug messages will be visible.
#endif
#ifdef GC_FAILURE_HARD_LOOKUP
#define FIND_REF_NO_CHECK_TICK
#endif
#ifdef TRAVISTESTING
#define TESTING
#endif
//Update this whenever you need to take advantage of more recent byond features
#define MIN_COMPILER_VERSION 511
#if DM_VERSION < MIN_COMPILER_VERSION
@@ -74,7 +27,15 @@
#error You need version 511 or higher
#endif
//Update this whenever the db schema changes
//make sure you add an update to the schema_version stable in the db changelog
#define DB_MAJOR_VERSION 4
#define DB_MINOR_VERSION 0
//Additional code for the above flags.
#ifdef TESTING
#warn compiling in TESTING mode. testing() debug messages will be visible.
#endif
#ifdef GC_FAILURE_HARD_LOOKUP
#define FIND_REF_NO_CHECK_TICK
#endif
#ifdef TRAVISTESTING
#define TESTING
#endif
+5
View File
@@ -80,6 +80,7 @@
cultist.special_role = "Cultist"
cultist.restricted_roles = restricted_jobs
log_game("[cultist.key] (ckey) has been selected as a cultist")
return (cultists_to_cult.len>=required_enemies)
@@ -87,6 +88,10 @@
/datum/game_mode/cult/post_setup()
for(var/datum/mind/cult_mind in cultists_to_cult)
add_cultist(cult_mind, 0, equip=TRUE)
if(!main_cult)
var/datum/antagonist/cult/C = cult_mind.has_antag_datum(/datum/antagonist/cult,TRUE)
if(C && C.cult_team)
main_cult = C.cult_team
..()
+2
View File
@@ -123,6 +123,7 @@
to_chat(user, "<span class='cultlarge'>\"I wouldn't advise that.\"</span>")
to_chat(user, "<span class='warning'>An overwhelming sense of nausea overpowers you!</span>")
user.Dizzy(80)
user.dropItemToGround(src, TRUE)
user.Knockdown(30)
return
else
@@ -130,6 +131,7 @@
to_chat(user, "<span class='userdanger'>A horrible force yanks at your arm!</span>")
user.emote("scream")
user.apply_damage(30, BRUTE, pick("l_arm", "r_arm"))
user.dropItemToGround(src, TRUE)
user.Knockdown(50)
return
jaunt.Grant(user, src)
+10 -1
View File
@@ -121,11 +121,20 @@
force = 15
hitsound = 'sound/items/welder2.ogg'
var/xray_granted = FALSE
/obj/item/scrying/equipped(mob/user)
if(!xray_granted && ishuman(user))
var/mob/living/carbon/human/H = user
if(!(H.dna.check_mutation(XRAY)))
H.dna.add_mutation(XRAY)
xray_granted = TRUE
. = ..()
/obj/item/scrying/attack_self(mob/user)
to_chat(user, "<span class='notice'>You can see...everything!</span>")
visible_message("<span class='danger'>[user] stares into [src], their eyes glazing over.</span>")
user.ghostize(1)
return
/////////////////////////////////////////Necromantic Stone///////////////////
+3 -9
View File
@@ -57,7 +57,7 @@
aspell.name = "Instant [aspell.name]"
if(aspell.spell_level >= aspell.level_max)
to_chat(user, "<span class='notice'>This spell cannot be strengthened any further.</span>")
SSblackbox.record_feedback("nested tally", "wizard_spell_improved", 1, list("[name]", "[aspell.level]"))
SSblackbox.record_feedback("nested tally", "wizard_spell_improved", 1, list("[name]", "[aspell.spell_level]"))
return 1
//No same spell found - just learn it
SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name)
@@ -318,12 +318,6 @@
item_path = /obj/item/scrying
category = "Defensive"
/datum/spellbook_entry/item/scryingorb/Buy(mob/living/carbon/human/user,obj/item/spellbook/book)
if(..())
if (!(user.dna.check_mutation(XRAY)))
user.dna.add_mutation(XRAY)
return 1
/datum/spellbook_entry/item/soulstones
name = "Six Soul Stone Shards and the spell Artificer"
desc = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. The spell Artificer allows you to create arcane machines for the captured souls to pilot."
@@ -482,7 +476,7 @@
/datum/spellbook_entry/summon/guns/Buy(mob/living/carbon/human/user,obj/item/spellbook/book)
SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name)
rightandwrong(0, user, 25)
rightandwrong(SUMMON_GUNS, user, 25)
active = 1
playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1)
to_chat(user, "<span class='notice'>You have cast summon guns!</span>")
@@ -499,7 +493,7 @@
/datum/spellbook_entry/summon/magic/Buy(mob/living/carbon/human/user,obj/item/spellbook/book)
SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name)
rightandwrong(1, user, 25)
rightandwrong(SUMMON_MAGIC, user, 25)
active = 1
playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1)
to_chat(user, "<span class='notice'>You have cast summon magic!</span>")
@@ -188,21 +188,33 @@
build_path = /obj/machinery/computer/cargo
var/contraband = FALSE
/obj/item/circuitboard/computer/cargo/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/device/multitool))
if(!emagged)
contraband = !contraband
to_chat(user, "<span class='notice'>Receiver spectrum set to [contraband ? "Broad" : "Standard"].</span>")
else
to_chat(user, "<span class='notice'>The spectrum chip is unresponsive.</span>")
else if(istype(I, /obj/item/card/emag))
if(!emagged)
contraband = TRUE
emagged = TRUE
to_chat(user, "<span class='notice'>You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.</span>")
/obj/item/circuitboard/computer/cargo/multitool_act(mob/living/user)
if(!emagged)
contraband = !contraband
to_chat(user, "<span class='notice'>Receiver spectrum set to [contraband ? "Broad" : "Standard"].</span>")
else
return ..()
to_chat(user, "<span class='notice'>The spectrum chip is unresponsive.</span>")
/obj/item/circuitboard/computer/cargo/emag_act(mob/living/user)
if(!emagged)
contraband = TRUE
emagged = TRUE
to_chat(user, "<span class='notice'>You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.</span>")
/obj/item/circuitboard/computer/cargo/express
name = "Express Supply Console (Computer Board)"
build_path = /obj/machinery/computer/cargo/express
/obj/item/circuitboard/computer/cargo/express/multitool_act(mob/living/user)
if (!emagged)
to_chat(user, "<span class='notice'>Routing protocols are already set to: \"factory defaults\".</span>")
else
to_chat(user, "<span class='notice'>You reset the routing protocols to: \"factory defaults\".</span>")
emagged = FALSE
/obj/item/circuitboard/computer/cargo/express/emag_act(mob/living/user)
to_chat(user, "<span class='notice'>You change the routing protocols, allowing the Drop Pod to land anywhere on the station.</span>")
emagged = TRUE
/obj/item/circuitboard/computer/cargo/request
name = "Supply Request Console (Computer Board)"
+6 -4
View File
@@ -273,6 +273,9 @@
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "defibpaddles"
item_state = "defibpaddles"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
force = 0
throwforce = 6
w_class = WEIGHT_CLASS_BULKY
@@ -311,6 +314,9 @@
item_state = "defibpaddles[wielded]"
if(cooldown)
icon_state = "defibpaddles[wielded]_cooldown"
if(iscarbon(loc))
var/mob/living/carbon/C = loc
C.update_inv_hands()
/obj/item/twohanded/shockpaddles/suicide_act(mob/user)
user.visible_message("<span class='danger'>[user] is putting the live paddles on [user.p_their()] chest! It looks like [user.p_theyre()] trying to commit suicide!</span>")
@@ -583,8 +589,6 @@
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "defibpaddles0"
item_state = "defibpaddles0"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
req_defib = FALSE
/obj/item/twohanded/shockpaddles/cyborg/attack(mob/M, mob/user)
@@ -606,8 +610,6 @@
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "defibpaddles0"
item_state = "defibpaddles0"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
req_defib = FALSE
#undef HALFWAYCRITDEATH
@@ -18,6 +18,7 @@
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
force = 5
w_class = WEIGHT_CLASS_SMALL
tool_behaviour = TOOL_MULTITOOL
throwforce = 0
throw_range = 7
throw_speed = 3
+3
View File
@@ -229,6 +229,9 @@
hitsound = 'sound/weapons/rapierhit.ogg'
var/possessed = FALSE
/obj/item/nullrod/scythe/talking/relaymove(mob/user)
return //stops buckled message spam for the ghost.
/obj/item/nullrod/scythe/talking/attack_self(mob/living/user)
if(possessed)
return
+1 -1
View File
@@ -58,7 +58,7 @@
/obj/item/shield/energy
name = "energy combat shield"
desc = "A shield capable of stopping most melee attacks. Protects user from almost all energy projectiles. It can be retracted, expanded, and stored anywhere."
desc = "A shield that reflects almost all energy projectiles, but is useless against physical attacks. It can be retracted, expanded, and stored anywhere."
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "eshield0" // eshield1 for expanded
lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi'
+17 -17
View File
@@ -156,23 +156,23 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
var/unholy2clean = A.reagents.get_reagent_amount("unholywater")
A.reagents.del_reagent("unholywater")
A.reagents.add_reagent("holywater",unholy2clean)
if(istype(A, /obj/item/twohanded/required/cult_bastard))
var/obj/item/twohanded/required/cult_bastard/sword = A
to_chat(user, "<span class='notice'>You begin to exorcise [sword].</span>")
playsound(src,'sound/hallucinations/veryfar_noise.ogg',40,1)
if(do_after(user, 40, target = sword))
playsound(src,'sound/effects/pray_chaplain.ogg',60,1)
for(var/obj/item/device/soulstone/SS in sword.contents)
SS.usability = TRUE
for(var/mob/living/simple_animal/shade/EX in SS)
SSticker.mode.remove_cultist(EX.mind, 1, 0)
EX.icon_state = "ghost1"
EX.name = "Purified [EX.name]"
SS.release_shades(user)
qdel(SS)
new /obj/item/nullrod/claymore(get_turf(sword))
user.visible_message("<span class='notice'>[user] has purified the [sword]!!</span>")
qdel(sword)
if(istype(A, /obj/item/twohanded/required/cult_bastard))
var/obj/item/twohanded/required/cult_bastard/sword = A
to_chat(user, "<span class='notice'>You begin to exorcise [sword].</span>")
playsound(src,'sound/hallucinations/veryfar_noise.ogg',40,1)
if(do_after(user, 40, target = sword))
playsound(src,'sound/effects/pray_chaplain.ogg',60,1)
for(var/obj/item/device/soulstone/SS in sword.contents)
SS.usability = TRUE
for(var/mob/living/simple_animal/shade/EX in SS)
SSticker.mode.remove_cultist(EX.mind, 1, 0)
EX.icon_state = "ghost1"
EX.name = "Purified [EX.name]"
SS.release_shades(user)
qdel(SS)
new /obj/item/nullrod/claymore(get_turf(sword))
user.visible_message("<span class='notice'>[user] has purified the [sword]!!</span>")
qdel(sword)
/obj/item/storage/book/bible/booze
+2 -1
View File
@@ -661,7 +661,8 @@
user.visible_message("<span class='danger'>[user] blasts \the [target] with \the [src]!</span>")
playsound(target, 'sound/magic/disintegrate.ogg', 100, 1)
W.break_wall()
return 1
W.ScrapeAway()
return
..()
//HF blade
@@ -132,7 +132,7 @@
if(opened || !can_open(user))
return
playsound(loc, open_sound, 15, 1, -3)
opened = 1
opened = TRUE
if(!dense_when_open)
density = FALSE
climb_time *= 0.5 //it's faster to climb onto an open thing
@@ -185,7 +185,7 @@
take_contents()
playsound(loc, close_sound, 15, 1, -3)
climb_time = initial(climb_time)
opened = 0
opened = FALSE
density = TRUE
update_icon()
return 1
@@ -208,6 +208,10 @@
/obj/structure/closet/attackby(obj/item/W, mob/user, params)
if(user in src)
return
if(!src.tool_interact(W,user))
return ..()
/obj/structure/closet/proc/tool_interact(obj/item/W, mob/user)//returns TRUE if attackBy call shouldnt be continued (because tool was used/closet was of wrong type), FALSE if otherwise
if(opened)
if(istype(W, cutting_tool))
if(istype(W, /obj/item/weldingtool))
@@ -217,29 +221,29 @@
playsound(loc, cutting_sound, 40, 1)
if(do_after(user, 40*WT.toolspeed, 1, target = src))
if(!opened || !WT.isOn())
return
return TRUE
playsound(loc, cutting_sound, 50, 1)
user.visible_message("<span class='notice'>[user] slices apart \the [src].</span>",
"<span class='notice'>You cut \the [src] apart with \the [WT].</span>",
"<span class='italics'>You hear welding.</span>")
deconstruct(TRUE)
return 0
return TRUE
else // for example cardboard box is cut with wirecutters
user.visible_message("<span class='notice'>[user] cut apart \the [src].</span>", \
"<span class='notice'>You cut \the [src] apart with \the [W].</span>")
deconstruct(TRUE)
return 0
return TRUE
if(user.transferItemToLoc(W, drop_location())) // so we put in unlit welder too
return 1
return TRUE
else if(istype(W, /obj/item/weldingtool) && can_weld_shut)
var/obj/item/weldingtool/WT = W
if(!WT.remove_fuel(0, user))
return
return TRUE
to_chat(user, "<span class='notice'>You begin [welded ? "unwelding":"welding"] \the [src]...</span>")
playsound(loc, 'sound/items/welder2.ogg', 40, 1)
if(do_after(user, 40*WT.toolspeed, 1, target = src))
if(opened || !WT.isOn())
return
return TRUE
playsound(loc, WT.usesound, 50, 1)
welded = !welded
user.visible_message("<span class='notice'>[user] [welded ? "welds shut" : "unweldeds"] \the [src].</span>",
@@ -248,7 +252,7 @@
update_icon()
else if(istype(W, /obj/item/wrench) && anchorable)
if(isinspace() && !anchored)
return
return TRUE
anchored = !anchored
playsound(src.loc, W.usesound, 75, 1)
user.visible_message("<span class='notice'>[user] [anchored ? "anchored" : "unanchored"] \the [src] [anchored ? "to" : "from"] the ground.</span>", \
@@ -257,9 +261,9 @@
else if(user.a_intent != INTENT_HARM && !(W.flags_1 & NOBLUDGEON_1))
if(W.GetID() || !toggle(user))
togglelock(user)
return 1
return TRUE
else
return ..()
return FALSE
/obj/structure/closet/MouseDrop_T(atom/movable/O, mob/living/user)
if(!istype(O) || O.anchored || istype(O, /obj/screen))
@@ -0,0 +1,92 @@
//The "BDPtarget" temp visual is created by the expressconsole, which in turn makes two things: a falling droppod animation, and the droppod itself.
//------------------------------------BLUESPACE DROP POD-------------------------------------//
/obj/structure/closet/bsdroppod
name = "Bluespace Drop Pod"
desc = "A Nanotrasen supply drop pod."
icon = 'icons/obj/2x2.dmi'
icon_state = "BDP"
pixel_x = -16//2x2 sprite
pixel_y = -5
layer = TABLE_LAYER//so that the crate inside doesn't appear underneath
allow_objects = TRUE
allow_dense = TRUE
delivery_icon = null
can_weld_shut = FALSE
armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 90, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
anchored = TRUE
anchorable = FALSE
var/datum/supply_order/SupplyOrder
/obj/structure/closet/bsdroppod/Initialize(mapload, datum/supply_order/so)
. = ..()
SupplyOrder = so//uses Supply Order passed from expressconsole into BDPtarget
addtimer(CALLBACK(src, .proc/open), 30)//open 3seconds after appearing
/obj/structure/closet/bsdroppod/update_icon()
cut_overlays()
if (opened)
add_overlay("BDP_open")
else
add_overlay("BDP_door")
/obj/structure/closet/bsdroppod/tool_interact(obj/item/W, mob/user)
return TRUE
/obj/structure/closet/bsdroppod/toggle(mob/living/user)
return
/obj/structure/closet/bsdroppod/open()
var/turf/T = get_turf(src)
opened = TRUE
SupplyOrder.generate(T)//not called during populateContents as supplyorder generation requires a turf
update_icon()
playsound(src, open_sound, 15, 1, -3)
addtimer(CALLBACK(src, .proc/sparks), 30)//3 seconds after opening, make some sparks and delete
/obj/structure/closet/bsdroppod/proc/sparks()//sparks cant be called from addtimer
do_sparks(5, TRUE, src)
qdel(src)//no need for QDEL_IN if we already have a timer
/obj/structure/closet/bsdroppod/Destroy()//make some sparks b4 deletion
QDEL_NULL(SupplyOrder)
return ..()
//------------------------------------FALLING BLUESPACE DROP POD-------------------------------------//
/obj/effect/temp_visual/BDPfall
icon = 'icons/obj/2x2.dmi'
icon_state = "BDP_falling"
pixel_x = -16
pixel_y = -5
pixel_z = 200
name = "Bluespace Drop Pod"
desc = "Get out of the way!"
layer = FLY_LAYER//that wasnt flying, that was falling with style!
randomdir = FALSE
//------------------------------------TEMPORARY_VISUAL-------------------------------------//
/obj/effect/BDPtarget
icon = 'icons/mob/actions/actions_items.dmi'
icon_state = "sniper_zoom"
layer = PROJECTILE_HIT_THRESHHOLD_LAYER
light_range = 2
var/obj/effect/temp_visual/fallingPod
/obj/effect/BDPtarget/Initialize(mapload, datum/supply_order/SO)
. = ..()
addtimer(CALLBACK(src, .proc/beginLaunch, SO), 30)//wait 3 seconds
/obj/effect/BDPtarget/proc/beginLaunch(datum/supply_order/SO)
fallingPod = new /obj/effect/temp_visual/BDPfall(drop_location())
animate(fallingPod, pixel_z = 0, time = 3, easing = LINEAR_EASING)//make and animate a falling pod
addtimer(CALLBACK(src, .proc/endLaunch, SO), 3, TIMER_CLIENT_TIME)//fall 0.3seconds
/obj/effect/BDPtarget/proc/endLaunch(datum/supply_order/SO)
new /obj/structure/closet/bsdroppod(drop_location(), SO)//pod is created
explosion(src,0,0,2, flame_range = 2) //explosion and camshake (shoutout to @cyberboss)
qdel(src)
/obj/effect/BDPtarget/Destroy()
QDEL_NULL(fallingPod)//delete falling pod after animation's over
return ..()
+2 -2
View File
@@ -463,7 +463,7 @@
if("All Antags!")
survivor_probability = 100
rightandwrong(0, usr, survivor_probability)
rightandwrong(SUMMON_GUNS, usr, survivor_probability)
if("magic")
if(!check_rights(R_FUN))
@@ -476,7 +476,7 @@
if("All Antags!")
survivor_probability = 100
rightandwrong(1, usr, survivor_probability)
rightandwrong(SUMMON_MAGIC, usr, survivor_probability)
if("events")
if(!check_rights(R_FUN))
+2 -4
View File
@@ -31,7 +31,7 @@ GLOBAL_LIST_INIT(potentialRandomZlevels, generateMapList(filename = "config/away
return ..()
/proc/generateMapList(filename)
var/list/potentialMaps = list()
. = list()
var/list/Lines = world.file2list(filename)
if(!Lines.len)
@@ -58,6 +58,4 @@ GLOBAL_LIST_INIT(potentialRandomZlevels, generateMapList(filename = "config/away
if (!name)
continue
potentialMaps.Add(t)
return potentialMaps
. += t
+2 -2
View File
@@ -69,7 +69,7 @@
"name" = P.group,
"packs" = list()
)
if((P.hidden && !emagged) || (P.contraband && !contraband) || (P.special && !P.special_enabled))
if((P.hidden && !emagged) || (P.contraband && !contraband) || (P.special && !P.special_enabled) || P.DropPodOnly)
continue
data["supplies"][P.group]["packs"] += list(list(
"name" = P.name,
@@ -140,7 +140,7 @@
var/datum/supply_pack/pack = SSshuttle.supply_packs[id]
if(!istype(pack))
return
if((pack.hidden && !emagged) || (pack.contraband && !contraband))
if((pack.hidden && !emagged) || (pack.contraband && !contraband) || pack.DropPodOnly)
return
var/name = "*None Provided*"
+125
View File
@@ -0,0 +1,125 @@
/obj/machinery/computer/cargo/express
name = "express supply console"
desc = "This console allows the user to purchase a package for double the price,\
with 1/40th of the delivery time: made possible by NanoTrasen's new \"Drop Pod Railgun\".\
All sales are near instantaneous - please choose carefully"
icon_screen = "supply_express"
circuit = /obj/item/circuitboard/computer/cargo/express
blockade_warning = "Bluespace instability detected. Delivery impossible."
req_access = list(ACCESS_QM)
var/message
var/locked = TRUE
/obj/machinery/computer/cargo/express/attackby(obj/item/W, mob/living/user, params)
..()
if((istype(W, /obj/item/card/id) || istype(W, /obj/item/device/pda)) && allowed(user))
locked = !locked
to_chat(user, "<span class='notice'>You [locked ? "lock" : "unlock"] the interface.</span>")
/obj/machinery/computer/cargo/express/emag_act(mob/living/user)
if(emagged)
return
user.visible_message("<span class='warning'>[user] swipes a suspicious card through [src]!</span>",
"<span class='notice'>You change the routing protocols, allowing the Drop Pod to land anywhere on the station.</span>")
emagged = TRUE
// This also sets this on the circuit board
var/obj/item/circuitboard/computer/cargo/board = circuit
board.emagged = TRUE
/obj/machinery/computer/cargo/express/ui_interact(mob/living/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state.
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "cargo_express", name, 1000, 800, master_ui, state)
ui.open()
/obj/machinery/computer/cargo/express/ui_data(mob/user)
var/list/data = list()
data["locked"] = locked
data["siliconUser"] = user.has_unlimited_silicon_privilege
data["points"] = SSshuttle.points
data["supplies"] = list()
message = "For normally priced items, please use the standard Supply or Request Console. \
Sales are near-instantaneous - please choose carefully."
if(SSshuttle.supplyBlocked)
message = blockade_warning
if(emagged)
message = "(&!#@ERROR: ROUTING_#PROTOCOL MALF(*CT#ON. $UG%ESTE@ ACT#0N: !^/PULS3-%E)ET CIR*)ITB%ARD."
data["message"] = message
if (emagged)
for(var/pack in SSshuttle.supply_packs)
var/datum/supply_pack/P = SSshuttle.supply_packs[pack]
if (P.name == "Toy Crate")//Can only order toys if emagged. You gotta spend 10K points to crash a droppod somewhere on the station
data["supplies"][P.group] = list(
"name" = P.group,
"packs" = list()
)
data["supplies"][P.group]["packs"] += list(list(
"name" = P.name,
"cost" = P.cost * 2, //displays twice the normal cost
"id" = pack
))
else
for(var/pack in SSshuttle.supply_packs)
var/datum/supply_pack/P = SSshuttle.supply_packs[pack]
if(!data["supplies"][P.group])
data["supplies"][P.group] = list(
"name" = P.group,
"packs" = list()
)
if((P.hidden) || (P.contraband) || (P.special))//no fun allowed
continue
data["supplies"][P.group]["packs"] += list(list(
"name" = P.name,
"cost" = P.cost * 2, //displays twice the normal cost
"id" = pack
))
return data
/obj/machinery/computer/cargo/express/ui_act(action, params, datum/tgui/ui)
switch(action)
if("add")//Generate Supply Order first
var/id = text2path(params["id"])
var/datum/supply_pack/pack = SSshuttle.supply_packs[id]
if(!istype(pack))
return
var/name = "*None Provided*"
var/rank = "*None Provided*"
var/ckey = usr.ckey
if(ishuman(usr))
var/mob/living/carbon/human/H = usr
name = H.get_authentification_name()
rank = H.get_assignment()
else if(issilicon(usr))
name = usr.real_name
rank = "Silicon"
var/reason = ""
var/datum/supply_order/SO = new(pack, name, rank, ckey, reason)
if(SO.pack.cost* 2 <= SSshuttle.points) //If you can afford it, then begin the delivery
SO.generateRequisition(get_turf(src))
SSshuttle.points -= SO.pack.cost * 2//twice the normal cost
var/list/empty_turfs = list()
var/area/landingzone
if (!emagged)
landingzone = locate(/area/quartermaster/storage) in GLOB.sortedAreas
else
landingzone = locate(pick(GLOB.the_station_areas)) in GLOB.sortedAreas
for(var/turf/open/floor/T in landingzone.contents) //get all the turfs in cargo bay
if(is_blocked_turf(T))//wont land on a blocked turf
continue
empty_turfs.Add(T)
if (empty_turfs.len != 0 )
var/LZ = empty_turfs[rand(empty_turfs.len-1)]//pick a random turf
new /obj/effect/BDPtarget(LZ, SO)//where the magic happens. this temp visual makes the actual droppod after a pause
. = TRUE
update_icon()
+1781 -1780
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -11,7 +11,7 @@
..()
/datum/round_event/wizard/summonguns/start()
rightandwrong(0,,10)
rightandwrong(SUMMON_GUNS, null, 10)
/datum/round_event_control/wizard/summonmagic //The Somewhat Less Classic
name = "Summon Magic"
@@ -26,4 +26,4 @@
..()
/datum/round_event/wizard/summonmagic/start()
rightandwrong(1,,10)
rightandwrong(SUMMON_MAGIC, null, 10)
@@ -222,7 +222,7 @@
component_parts = null
/obj/machinery/smartfridge/drying_rack/on_deconstruction()
new /obj/item/stack/sheet/mineral/wood(loc, 10)
new /obj/item/stack/sheet/mineral/wood(drop_location(), 10)
..()
/obj/machinery/smartfridge/drying_rack/RefreshParts()
@@ -297,7 +297,7 @@
update_icon()
/obj/machinery/smartfridge/drying_rack/proc/rack_dry()
for(var/obj/item/reagent_containers/food/snacks/S in contents)
for(var/obj/item/reagent_containers/food/snacks/S in src)
if(S.dried_type == S.type)//if the dried type is the same as the object's type, don't bother creating a whole new item...
S.add_atom_colour("#ad7257", FIXED_COLOUR_PRIORITY)
S.dry = TRUE
@@ -307,8 +307,8 @@
new dried(drop_location())
qdel(S)
return TRUE
for(var/obj/item/stack/sheet/wetleather/WL in contents)
var/obj/item/stack/sheet/leather/L = new(loc)
for(var/obj/item/stack/sheet/wetleather/WL in src)
var/obj/item/stack/sheet/leather/L = new(drop_location())
L.amount = WL.amount
qdel(WL)
return TRUE
+2 -2
View File
@@ -266,13 +266,13 @@
/datum/plant_gene/trait/glow/shadow
//makes plant emit slightly purple shadows
//adds -potency*(rate*0.05) light power to products
//adds -potency*(rate*0.2) light power to products
name = "Shadow Emission"
rate = 0.04
glow_color = "#AAD84B"
/datum/plant_gene/trait/glow/shadow/glow_power(obj/item/seeds/S)
return -max(S.potency*(rate*0.05), 0.075)
return -max(S.potency*(rate*0.2), 0.2)
/datum/plant_gene/trait/glow/red
name = "Red Electrical Glow"
@@ -357,6 +357,11 @@
to_chat(humanc, "<span class='userdanger'><i>THERE CAN BE ONLY ONE!!!</i></span>")
humanc.make_scottish()
if(GLOB.summon_guns_triggered)
give_guns(humanc)
if(GLOB.summon_magic_triggered)
give_magic(humanc)
GLOB.joined_player_list += character.ckey
if(CONFIG_GET(flag/allow_latejoin_antagonists) && humanc) //Borgs aren't allowed to be antags. Will need to be tweaked if we get true latejoin ais.
+1 -1
View File
@@ -198,7 +198,7 @@
else
to_chat(user, "<span class='notice'>The MMI indicates the brain is active.</span>")
/obj/item/device/mmi/relaymove()
/obj/item/device/mmi/relaymove(mob/user)
return //so that the MMI won't get a warning about not being able to move if it tries to move
/obj/item/device/mmi/syndie
@@ -1,8 +1,8 @@
/mob/living/carbon/alien/spawn_gibs(with_bodyparts)
if(with_bodyparts)
new /obj/effect/gibspawner/xeno(get_turf(src))
new /obj/effect/gibspawner/xeno(drop_location())
else
new /obj/effect/gibspawner/xenobodypartless(get_turf(src))
new /obj/effect/gibspawner/xenobodypartless(drop_location())
/mob/living/carbon/alien/gib_animation()
new /obj/effect/temp_visual/gib_animation(loc, "gibbed-a")
@@ -8,9 +8,9 @@
/mob/living/carbon/alien/larva/spawn_gibs(with_bodyparts)
if(with_bodyparts)
new /obj/effect/gibspawner/larva(get_turf(src))
new /obj/effect/gibspawner/larva(drop_location())
else
new /obj/effect/gibspawner/larvabodypartless(get_turf(src))
new /obj/effect/gibspawner/larvabodypartless(drop_location())
/mob/living/carbon/alien/larva/gib_animation()
new /obj/effect/temp_visual/gib_animation(loc, "gibbed-l")
+6 -4
View File
@@ -13,14 +13,16 @@
SSticker.mode.check_win() //Calls the rounds wincheck, mainly for wizard, malf, and changeling now
/mob/living/carbon/gib(no_brain, no_organs, no_bodyparts)
var/atom/Tsec = drop_location()
for(var/mob/M in src)
if(M in stomach_contents)
stomach_contents.Remove(M)
M.forceMove(loc)
M.forceMove(Tsec)
visible_message("<span class='danger'>[M] bursts out of [src]!</span>")
..()
/mob/living/carbon/spill_organs(no_brain, no_organs, no_bodyparts)
var/atom/Tsec = drop_location()
if(!no_bodyparts)
if(no_organs)//so the organs don't get transfered inside the bodyparts we'll drop.
for(var/X in internal_organs)
@@ -35,7 +37,7 @@
var/org_zone = check_zone(O.zone) //both groin and chest organs.
if(org_zone == "chest")
O.Remove(src)
O.forceMove(get_turf(src))
O.forceMove(Tsec)
O.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5)
else
for(var/X in internal_organs)
@@ -47,7 +49,7 @@
qdel(I)
continue
I.Remove(src)
I.forceMove(get_turf(src))
I.forceMove(Tsec)
I.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5)
@@ -55,4 +57,4 @@
for(var/X in bodyparts)
var/obj/item/bodypart/BP = X
BP.drop_limb()
BP.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5)
BP.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5)
@@ -6,9 +6,9 @@
/mob/living/carbon/human/spawn_gibs(with_bodyparts)
if(with_bodyparts)
new /obj/effect/gibspawner/human(get_turf(src), dna, get_static_viruses())
new /obj/effect/gibspawner/human(drop_location(), dna, get_static_viruses())
else
new /obj/effect/gibspawner/humanbodypartless(get_turf(src), dna, get_static_viruses())
new /obj/effect/gibspawner/humanbodypartless(drop_location(), dna, get_static_viruses())
/mob/living/carbon/human/spawn_dust(just_ash = FALSE)
if(just_ash)
@@ -25,9 +25,10 @@
create_internal_organs() //most of it is done in set_species now, this is only for parent call
handcrafting = new()
AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT), CALLBACK(src, .proc/clean_blood))
. = ..()
AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT), CALLBACK(src, .proc/clean_blood))
/mob/living/carbon/human/OpenCraftingMenu()
handcrafting.ui_interact(src)
@@ -1026,4 +1027,4 @@
race = /datum/species/zombie/infectious
/mob/living/carbon/human/species/zombie/krokodil_addict
race = /datum/species/krokodil_addict
race = /datum/species/krokodil_addict
@@ -68,7 +68,10 @@
P.firer = src
P.yo = new_y - curloc.y
P.xo = new_x - curloc.x
P.Angle = null
var/new_angle_s = P.Angle + rand(120,240)
while(new_angle_s > 180) // Translate to regular projectile degrees
new_angle_s -= 360
P.setAngle(new_angle_s)
return -1 // complete projectile permutation
+1 -1
View File
@@ -18,7 +18,7 @@
return
/mob/living/proc/spawn_gibs()
new /obj/effect/gibspawner/generic(get_turf(src), null, get_static_viruses())
new /obj/effect/gibspawner/generic(drop_location(), null, get_static_viruses())
/mob/living/proc/spill_organs()
return
+1 -1
View File
@@ -63,7 +63,7 @@
qdel(src)
return TRUE
/obj/item/clothing/head/mob_holder/relaymove()
/obj/item/clothing/head/mob_holder/relaymove(mob/user)
release()
/obj/item/clothing/head/mob_holder/container_resist()
+3 -2
View File
@@ -786,9 +786,10 @@
if(QDELETED(src))
return
if(butcher_results)
var/atom/Tsec = drop_location()
for(var/path in butcher_results)
for(var/i = 1; i <= butcher_results[path];i++)
new path(src.loc)
new path(Tsec)
butcher_results.Remove(path) //In case you want to have things like simple_animals drop their butcher results on gib, so it won't double up below.
visible_message("<span class='notice'>[user] butchers [src].</span>")
gib(0, 0, 1)
@@ -1034,7 +1035,7 @@
. = ..()
if(.)
if(client)
reset_perspective(destination)
reset_perspective()
update_canmove() //if the mob was asleep inside a container and then got forceMoved out we need to make them fall.
/mob/living/proc/update_z(new_z) // 1+ to register, null to unregister
+1 -1
View File
@@ -1,5 +1,5 @@
/mob/living/silicon/spawn_gibs()
new /obj/effect/gibspawner/robot(get_turf(src))
new /obj/effect/gibspawner/robot(drop_location())
/mob/living/silicon/spawn_dust()
new /obj/effect/decal/remains/robot(loc)
@@ -146,6 +146,10 @@
P.firer = src
P.yo = new_y - curloc.y
P.xo = new_x - curloc.x
var/new_angle_s = P.Angle + rand(120,240)
while(new_angle_s > 180) // Translate to regular projectile degrees
new_angle_s -= 360
P.setAngle(new_angle_s)
return -1 // complete projectile permutation
@@ -244,9 +244,10 @@
/mob/living/simple_animal/gib()
if(butcher_results)
var/atom/Tsec = drop_location()
for(var/path in butcher_results)
for(var/i = 1; i <= butcher_results[path];i++)
new path(src.loc)
new path(Tsec)
..()
/mob/living/simple_animal/gib_animation()
+5 -1
View File
@@ -150,6 +150,10 @@
if(!disabilities[disability])
return
if(!sources) // No defined source cures the disability entirely.
disabilities -= disability
return
if(!islist(sources))
sources = list(sources)
@@ -212,4 +216,4 @@
if(!has_disability(DISABILITY_HUSK))
status_flags |= DISFIGURED //makes them unknown
update_body()
add_disability(DISABILITY_HUSK, source)
add_disability(DISABILITY_HUSK, source)
+5 -2
View File
@@ -18,12 +18,14 @@
dissipate_delay = 5
dissipate_strength = 1
var/list/orbiting_balls = list()
var/miniball = FALSE
var/produced_power
var/energy_to_raise = 32
var/energy_to_lower = -20
/obj/singularity/energy_ball/Initialize(mapload, starting_energy = 50, is_miniball = FALSE)
. = ..()
miniball = is_miniball
if(!is_miniball)
set_light(10, 7, "#EEEEFF")
@@ -42,10 +44,11 @@
. = ..()
/obj/singularity/energy_ball/admin_investigate_setup()
if(istype(loc, /obj/singularity/energy_ball))
return
if(miniball)
return //don't annnounce miniballs
..()
/obj/singularity/energy_ball/process()
if(!orbiting)
handle_energy()
+9 -5
View File
@@ -86,14 +86,18 @@
return
if(user.transferItemToLoc(A, src))
to_chat(user, "<span class='notice'>You screw [S] onto [src].</span>")
suppressed = A
S.oldsound = fire_sound
fire_sound = 'sound/weapons/gunshot_silenced.ogg'
w_class += A.w_class //so pistols do not fit in pockets when suppressed
update_icon()
install_suppressor(A)
return
return 0
/obj/item/gun/ballistic/proc/install_suppressor(obj/item/suppressor/S)
// this proc assumes that the suppressor is already inside src
suppressed = S
S.oldsound = fire_sound
fire_sound = 'sound/weapons/gunshot_silenced.ogg'
w_class += S.w_class //so pistols do not fit in pockets when suppressed
update_icon()
/obj/item/gun/ballistic/attack_hand(mob/user)
if(loc == user)
if(suppressed && can_unsuppress)
@@ -12,7 +12,11 @@
/obj/item/gun/ballistic/automatic/pistol/update_icon()
..()
icon_state = "[initial(icon_state)][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]"
return
/obj/item/gun/ballistic/automatic/pistol/suppressed/Initialize(mapload)
. = ..()
var/obj/item/suppressor/S = new(src)
install_suppressor(S)
/obj/item/gun/ballistic/automatic/pistol/m1911
name = "\improper M1911"
@@ -194,7 +194,7 @@
id = "cargorequest"
build_path = /obj/item/circuitboard/computer/cargo/request
category = list("Computer Boards")
/datum/design/board/stockexchange
name = "Computer Design (Stock Exchange Console)"
desc = "Allows for the construction of circuit boards used to build a Stock Exchange Console."
@@ -2,6 +2,16 @@
/////////////////////////////////////////
/////////////////Mining//////////////////
/////////////////////////////////////////
/datum/design/cargo_express
name = "Computer Design (Express Supply Console)"//shes beautiful
desc = "Allows for the construction of circuit boards used to build an Express Supply Console."//who?
id = "cargoexpress"//the coder reading this
build_type = PROTOLATHE
materials = list(MAT_GLASS = 1000)
reagents_list = list("sacid" = 20)
build_path = /obj/item/circuitboard/computer/cargo/express
category = list("Mining Designs")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
/datum/design/drill
name = "Mining Drill"
+1 -1
View File
@@ -424,7 +424,7 @@
display_name = "Mining Technology"
description = "Better than Efficiency V."
prereq_ids = list("engineering")
design_ids = list("drill", "superresonator", "triggermod", "damagemod", "cooldownmod", "rangemod", "ore_redemption", "mining_equipment_vendor")
design_ids = list("drill", "superresonator", "triggermod", "damagemod", "cooldownmod", "rangemod", "ore_redemption", "mining_equipment_vendor", "cargoexpress")//e a r l y g a m e)
research_cost = 2500
export_price = 10000
+171 -201
View File
@@ -1,210 +1,178 @@
//In this file: Summon Magic/Summon Guns/Summon Events
/proc/rightandwrong(summon_type, mob/user, survivor_probability) //0 = Summon Guns, 1 = Summon Magic
var/list/gunslist = list("taser","gravgun","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car","boltaction","speargun","arg","uzi","alienpistol","dragnet","turret","pulsecarbine","decloner","mindflayer","hyperkinetic","advplasmacutter","wormhole","wt550","bulldog","grenadelauncher","goldenrevolver","sniper","medibeam","scatterbeam")
var/list/magiclist = list("fireball","smoke","blind","mindswap","forcewall","knock","horsemask","charge", "summonitem", "wandnothing", "wanddeath", "wandresurrection", "wandpolymorph", "wandteleport", "wanddoor", "wandfireball", "staffchange", "staffhealing", "armor", "scrying","staffdoor","voodoo", "whistle", "battlemage", "immortality", "ghostsword", "special")
var/list/magicspeciallist = list("staffchange","staffanimation", "wandbelt", "contract", "staffchaos", "necromantic", "bloodcontract")
// 1 in 50 chance of getting something really special.
#define SPECIALIST_MAGIC_PROB 2
GLOBAL_LIST_INIT(summoned_guns, list(
/obj/item/gun/energy/e_gun/advtaser,
/obj/item/gun/energy/e_gun,
/obj/item/gun/energy/laser,
/obj/item/gun/ballistic/revolver,
/obj/item/gun/ballistic/revolver/detective,
/obj/item/gun/ballistic/automatic/pistol/deagle/camo,
/obj/item/gun/ballistic/automatic/gyropistol,
/obj/item/gun/energy/pulse,
/obj/item/gun/ballistic/automatic/pistol/suppressed,
/obj/item/gun/ballistic/revolver/doublebarrel,
/obj/item/gun/ballistic/shotgun,
/obj/item/gun/ballistic/shotgun/automatic/combat,
/obj/item/gun/ballistic/automatic/ar,
/obj/item/gun/ballistic/revolver/mateba,
/obj/item/gun/ballistic/shotgun/boltaction,
/obj/item/gun/ballistic/automatic/speargun,
/obj/item/gun/ballistic/automatic/mini_uzi,
/obj/item/gun/energy/lasercannon,
/obj/item/gun/energy/kinetic_accelerator/crossbow/large,
/obj/item/gun/energy/e_gun/nuclear,
/obj/item/gun/ballistic/automatic/proto,
/obj/item/gun/ballistic/automatic/shotgun/bulldog,
/obj/item/gun/ballistic/automatic/c20r,
/obj/item/gun/ballistic/automatic/l6_saw,
/obj/item/gun/ballistic/automatic/m90,
/obj/item/gun/energy/alien,
/obj/item/gun/energy/e_gun/dragnet,
/obj/item/gun/energy/e_gun/turret,
/obj/item/gun/energy/pulse/carbine,
/obj/item/gun/energy/decloner,
/obj/item/gun/energy/mindflayer,
/obj/item/gun/energy/kinetic_accelerator,
/obj/item/gun/energy/plasmacutter/adv,
/obj/item/gun/energy/wormhole_projector,
/obj/item/gun/ballistic/automatic/wt550,
/obj/item/gun/ballistic/automatic/shotgun,
/obj/item/gun/ballistic/revolver/grenadelauncher,
/obj/item/gun/ballistic/revolver/golden,
/obj/item/gun/ballistic/automatic/sniper_rifle,
/obj/item/gun/medbeam,
/obj/item/gun/energy/laser/scatter,
/obj/item/gun/energy/gravity_gun))
GLOBAL_LIST_INIT(summoned_magic, list(
/obj/item/spellbook/oneuse/fireball,
/obj/item/spellbook/oneuse/smoke,
/obj/item/spellbook/oneuse/blind,
/obj/item/spellbook/oneuse/mindswap,
/obj/item/spellbook/oneuse/forcewall,
/obj/item/spellbook/oneuse/knock,
/obj/item/spellbook/oneuse/barnyard,
/obj/item/spellbook/oneuse/charge,
/obj/item/spellbook/oneuse/summonitem,
/obj/item/gun/magic/wand,
/obj/item/gun/magic/wand/death,
/obj/item/gun/magic/wand/resurrection,
/obj/item/gun/magic/wand/polymorph,
/obj/item/gun/magic/wand/teleport,
/obj/item/gun/magic/wand/door,
/obj/item/gun/magic/wand/fireball,
/obj/item/gun/magic/staff/healing,
/obj/item/gun/magic/staff/door,
/obj/item/scrying,
/obj/item/voodoo,
/obj/item/warpwhistle,
/obj/item/clothing/suit/space/hardsuit/shielded/wizard,
/obj/item/device/immortality_talisman,
/obj/item/melee/ghost_sword))
GLOBAL_LIST_INIT(summoned_special_magic, list(
/obj/item/gun/magic/staff/change,
/obj/item/gun/magic/staff/animate,
/obj/item/storage/belt/wands/full,
/obj/item/antag_spawner/contract,
/obj/item/gun/magic/staff/chaos,
/obj/item/device/necromantic_stone,
/obj/item/blood_contract))
// If true, it's the probability of triggering "survivor" antag.
GLOBAL_VAR_INIT(summon_guns_triggered, FALSE)
GLOBAL_VAR_INIT(summon_magic_triggered, FALSE)
/proc/give_guns(mob/living/carbon/human/H)
if(H.stat == DEAD || !(H.client))
return
if(H.mind)
if(iswizard(H) || H.mind.special_role == "survivalist")
return
if(prob(GLOB.summon_guns_triggered) && !(H.mind in SSticker.mode.traitors))
SSticker.mode.traitors += H.mind
var/datum/objective/steal_five_of_type/summon_guns/guns = new
guns.owner = H.mind
H.mind.objectives += guns
H.mind.special_role = "survivalist"
H.mind.add_antag_datum(/datum/antagonist/auto_custom)
to_chat(H, "<B>You are the survivalist! Your own safety matters above all else, and the only way to ensure your safety is to stockpile weapons! Grab as many guns as possible, by any means necessary. Kill anyone who gets in your way.</B>")
var/datum/objective/survive/survive = new
survive.owner = H.mind
H.mind.objectives += survive
H.log_message("<font color='red'>Was made into a survivalist, and trusts no one!</font>", INDIVIDUAL_ATTACK_LOG)
H.mind.announce_objectives()
var/gun_type = pick(GLOB.summoned_guns)
var/obj/item/gun/G = new gun_type(get_turf(H))
G.unlock()
playsound(get_turf(H),'sound/magic/summon_guns.ogg', 50, 1)
var/in_hand = H.put_in_hands(G) // not always successful
to_chat(H, "<span class='warning'>\A [G] appears [in_hand ? "in your hand" : "at your feet"]!</span>")
/proc/give_magic(mob/living/carbon/human/H)
if(H.stat == DEAD || !(H.client))
return
if(H.mind)
if(iswizard(H) || H.mind.special_role == "survivalist")
return
if(prob(GLOB.summon_magic_triggered) && !(H.mind in SSticker.mode.traitors))
var/datum/objective/steal_five_of_type/summon_magic/magic = new
magic.owner = H.mind
H.mind.objectives += magic
H.mind.special_role = "amateur magician"
H.mind.add_antag_datum(/datum/antagonist/auto_custom)
to_chat(H, "<B>You are the amateur magician! Grow your newfound talent! Grab as many magical artefacts as possible, by any means necessary. Kill anyone who gets in your way.</B>")
var/datum/objective/survive/survive = new
survive.owner = H.mind
H.mind.objectives += survive
H.log_message("<font color='red'>Was made into a survivalist, and trusts no one!</font>", INDIVIDUAL_ATTACK_LOG)
H.mind.announce_objectives()
var/magic_type = pick(GLOB.summoned_magic)
var/lucky = FALSE
if(prob(SPECIALIST_MAGIC_PROB))
magic_type = pick(GLOB.summoned_special_magic)
lucky = TRUE
var/obj/item/M = new magic_type(get_turf(H))
playsound(get_turf(H),'sound/magic/summon_magic.ogg', 50, 1)
var/in_hand = H.put_in_hands(M)
to_chat(H, "<span class='warning'>\A [M] appears [in_hand ? "in your hand" : "at your feet"]!</span>")
if(lucky)
to_chat(H, "<span class='notice'>You feel incredibly lucky.</span>")
/proc/rightandwrong(summon_type, mob/user, survivor_probability)
if(user) //in this case either someone holding a spellbook or a badmin
to_chat(user, "<B>You summoned [summon_type ? "magic" : "guns"]!</B>")
message_admins("[key_name_admin(user, 1)] summoned [summon_type ? "magic" : "guns"]!")
log_game("[key_name(user)] summoned [summon_type ? "magic" : "guns"]!")
to_chat(user, "<span class='warning'>You summoned [summon_type]!</span>")
message_admins("[key_name_admin(user, 1)] summoned [summon_type]!")
log_game("[key_name(user)] summoned [summon_type]!")
if(summon_type == SUMMON_MAGIC)
GLOB.summon_magic_triggered = survivor_probability
else if(summon_type == SUMMON_GUNS)
GLOB.summon_guns_triggered = survivor_probability
else
CRASH("Bad summon_type given: [summon_type]")
for(var/mob/living/carbon/human/H in GLOB.player_list)
if(H.stat == DEAD || !(H.client))
continue
if(H.mind)
if(iswizard(H) || H.mind.special_role == "survivalist")
continue
if(prob(survivor_probability) && !(H.mind in SSticker.mode.traitors))
SSticker.mode.traitors += H.mind
if(!summon_type)
var/datum/objective/steal_five_of_type/summon_guns/guns = new
guns.owner = H.mind
H.mind.objectives += guns
H.mind.special_role = "survivalist"
H.mind.add_antag_datum(/datum/antagonist/auto_custom)
to_chat(H, "<B>You are the survivalist! Your own safety matters above all else, and the only way to ensure your safety is to stockpile weapons! Grab as many guns as possible, by any means necessary. Kill anyone who gets in your way.</B>")
else
var/datum/objective/steal_five_of_type/summon_magic/magic = new
magic.owner = H.mind
H.mind.objectives += magic
H.mind.special_role = "amateur magician"
H.mind.add_antag_datum(/datum/antagonist/auto_custom)
to_chat(H, "<B>You are the amateur magician! Grow your newfound talent! Grab as many magical artefacts as possible, by any means necessary. Kill anyone who gets in your way.</B>")
var/datum/objective/survive/survive = new
survive.owner = H.mind
H.mind.objectives += survive
H.log_message("<font color='red'>Was made into a survivalist, and trusts no one!</font>", INDIVIDUAL_ATTACK_LOG)
H.mind.announce_objectives()
var/randomizeguns = pick(gunslist)
var/randomizemagic = pick(magiclist)
var/randomizemagicspecial = pick(magicspeciallist)
if(!summon_type)
var/obj/item/gun/G
switch (randomizeguns)
if("taser")
G = new /obj/item/gun/energy/e_gun/advtaser(get_turf(H))
if("egun")
G = new /obj/item/gun/energy/e_gun(get_turf(H))
if("laser")
G = new /obj/item/gun/energy/laser(get_turf(H))
if("revolver")
G = new /obj/item/gun/ballistic/revolver(get_turf(H))
if("detective")
G = new /obj/item/gun/ballistic/revolver/detective(get_turf(H))
if("deagle")
G = new /obj/item/gun/ballistic/automatic/pistol/deagle/camo(get_turf(H))
if("gyrojet")
G = new /obj/item/gun/ballistic/automatic/gyropistol(get_turf(H))
if("pulse")
G = new /obj/item/gun/energy/pulse(get_turf(H))
if("suppressed")
G = new /obj/item/gun/ballistic/automatic/pistol(get_turf(H))
new /obj/item/suppressor(get_turf(H))
if("doublebarrel")
G = new /obj/item/gun/ballistic/revolver/doublebarrel(get_turf(H))
if("shotgun")
G = new /obj/item/gun/ballistic/shotgun(get_turf(H))
if("combatshotgun")
G = new /obj/item/gun/ballistic/shotgun/automatic/combat(get_turf(H))
if("arg")
G = new /obj/item/gun/ballistic/automatic/ar(get_turf(H))
if("mateba")
G = new /obj/item/gun/ballistic/revolver/mateba(get_turf(H))
if("boltaction")
G = new /obj/item/gun/ballistic/shotgun/boltaction(get_turf(H))
if("speargun")
G = new /obj/item/gun/ballistic/automatic/speargun(get_turf(H))
if("uzi")
G = new /obj/item/gun/ballistic/automatic/mini_uzi(get_turf(H))
if("cannon")
G = new /obj/item/gun/energy/lasercannon(get_turf(H))
if("crossbow")
G = new /obj/item/gun/energy/kinetic_accelerator/crossbow/large(get_turf(H))
if("nuclear")
G = new /obj/item/gun/energy/e_gun/nuclear(get_turf(H))
if("sabr")
G = new /obj/item/gun/ballistic/automatic/proto(get_turf(H))
if("bulldog")
G = new /obj/item/gun/ballistic/automatic/shotgun/bulldog(get_turf(H))
if("c20r")
G = new /obj/item/gun/ballistic/automatic/c20r(get_turf(H))
if("saw")
G = new /obj/item/gun/ballistic/automatic/l6_saw(get_turf(H))
if("car")
G = new /obj/item/gun/ballistic/automatic/m90(get_turf(H))
if("alienpistol")
G = new /obj/item/gun/energy/alien(get_turf(H))
if("dragnet")
G = new /obj/item/gun/energy/e_gun/dragnet(get_turf(H))
if("turret")
G = new /obj/item/gun/energy/e_gun/turret(get_turf(H))
if("pulsecarbine")
G = new /obj/item/gun/energy/pulse/carbine(get_turf(H))
if("decloner")
G = new /obj/item/gun/energy/decloner(get_turf(H))
if("mindflayer")
G = new /obj/item/gun/energy/mindflayer(get_turf(H))
if("hyperkinetic")
G = new /obj/item/gun/energy/kinetic_accelerator(get_turf(H))
if("advplasmacutter")
G = new /obj/item/gun/energy/plasmacutter/adv(get_turf(H))
if("wormhole")
G = new /obj/item/gun/energy/wormhole_projector(get_turf(H))
if("wt550")
G = new /obj/item/gun/ballistic/automatic/wt550(get_turf(H))
if("bulldog")
G = new /obj/item/gun/ballistic/automatic/shotgun(get_turf(H))
if("grenadelauncher")
G = new /obj/item/gun/ballistic/revolver/grenadelauncher(get_turf(H))
if("goldenrevolver")
G = new /obj/item/gun/ballistic/revolver/golden(get_turf(H))
if("sniper")
G = new /obj/item/gun/ballistic/automatic/sniper_rifle(get_turf(H))
if("medibeam")
G = new /obj/item/gun/medbeam(get_turf(H))
if("scatterbeam")
G = new /obj/item/gun/energy/laser/scatter(get_turf(H))
if("gravgun")
G = new /obj/item/gun/energy/gravity_gun(get_turf(H))
G.unlock()
playsound(get_turf(H),'sound/magic/summon_guns.ogg', 50, 1)
if(summon_type == SUMMON_MAGIC)
give_magic(H)
else
switch (randomizemagic)
if("fireball")
new /obj/item/spellbook/oneuse/fireball(get_turf(H))
if("smoke")
new /obj/item/spellbook/oneuse/smoke(get_turf(H))
if("blind")
new /obj/item/spellbook/oneuse/blind(get_turf(H))
if("mindswap")
new /obj/item/spellbook/oneuse/mindswap(get_turf(H))
if("forcewall")
new /obj/item/spellbook/oneuse/forcewall(get_turf(H))
if("knock")
new /obj/item/spellbook/oneuse/knock(get_turf(H))
if("horsemask")
new /obj/item/spellbook/oneuse/barnyard(get_turf(H))
if("charge")
new /obj/item/spellbook/oneuse/charge(get_turf(H))
if("summonitem")
new /obj/item/spellbook/oneuse/summonitem(get_turf(H))
if("wandnothing")
new /obj/item/gun/magic/wand(get_turf(H))
if("wanddeath")
new /obj/item/gun/magic/wand/death(get_turf(H))
if("wandresurrection")
new /obj/item/gun/magic/wand/resurrection(get_turf(H))
if("wandpolymorph")
new /obj/item/gun/magic/wand/polymorph(get_turf(H))
if("wandteleport")
new /obj/item/gun/magic/wand/teleport(get_turf(H))
if("wanddoor")
new /obj/item/gun/magic/wand/door(get_turf(H))
if("wandfireball")
new /obj/item/gun/magic/wand/fireball(get_turf(H))
if("staffhealing")
new /obj/item/gun/magic/staff/healing(get_turf(H))
if("staffdoor")
new /obj/item/gun/magic/staff/door(get_turf(H))
if("armor")
new /obj/item/clothing/suit/space/hardsuit/wizard(get_turf(H))
if("scrying")
new /obj/item/scrying(get_turf(H))
if (!(H.dna.check_mutation(XRAY)))
H.dna.add_mutation(XRAY)
to_chat(H, "<span class='notice'>The walls suddenly disappear.</span>")
if("voodoo")
new /obj/item/voodoo(get_turf(H))
if("whistle")
new /obj/item/warpwhistle(get_turf(H))
if("battlemage")
new /obj/item/clothing/suit/space/hardsuit/shielded/wizard(get_turf(H))
if("immortality")
new /obj/item/device/immortality_talisman(get_turf(H))
if("ghostsword")
new /obj/item/melee/ghost_sword(get_turf(H))
if("special")
magiclist -= "special" //only one super OP item per summoning max
switch (randomizemagicspecial)
if("staffchange")
new /obj/item/gun/magic/staff/change(get_turf(H))
if("staffanimation")
new /obj/item/gun/magic/staff/animate(get_turf(H))
if("wandbelt")
new /obj/item/storage/belt/wands/full(get_turf(H))
if("contract")
new /obj/item/antag_spawner/contract(get_turf(H))
if("staffchaos")
new /obj/item/gun/magic/staff/chaos(get_turf(H))
if("necromantic")
new /obj/item/device/necromantic_stone(get_turf(H))
if("bloodcontract")
new /obj/item/blood_contract(get_turf(H))
to_chat(H, "<span class='notice'>You suddenly feel lucky.</span>")
playsound(get_turf(H),'sound/magic/summon_magic.ogg', 50, 1)
give_guns(H)
/proc/summonevents()
if(!SSevents.wizardmode)
@@ -221,3 +189,5 @@
SSevents.reschedule()
message_admins("Summon Events intensifies, events will now occur every [SSevents.frequency_lower / 600] to [SSevents.frequency_upper / 600] minutes.")
log_game("Summon Events was increased!")
#undef SPECIALIST_MAGIC_PROB
@@ -82,7 +82,7 @@
/obj/item/bodypart/proc/drop_limb(special)
if(!owner)
return
var/turf/T = get_turf(owner)
var/atom/Tsec = owner.drop_location()
var/mob/living/carbon/C = owner
update_limb(1)
C.bodyparts -= src
@@ -126,7 +126,7 @@
C.update_hair()
C.update_canmove()
if(!T) // T = null happens when a "dummy human" used for rendering icons on prefs screen gets its limbs replaced.
if(!Tsec) // Tsec = null happens when a "dummy human" used for rendering icons on prefs screen gets its limbs replaced.
qdel(src)
return
@@ -135,7 +135,7 @@
qdel(src)
return
forceMove(T)
forceMove(Tsec)
@@ -167,7 +167,7 @@
..()
if(C && !special)
if(C.handcuffed)
C.handcuffed.forceMove(C.loc)
C.handcuffed.forceMove(drop_location())
C.handcuffed.dropped(C)
C.handcuffed = null
C.update_handcuffed()
@@ -185,7 +185,7 @@
..()
if(C && !special)
if(C.handcuffed)
C.handcuffed.forceMove(C.loc)
C.handcuffed.forceMove(drop_location())
C.handcuffed.dropped(C)
C.handcuffed = null
C.update_handcuffed()
@@ -201,7 +201,7 @@
/obj/item/bodypart/r_leg/drop_limb(special)
if(owner && !special)
if(owner.legcuffed)
owner.legcuffed.forceMove(owner.loc)
owner.legcuffed.forceMove(drop_location())
owner.legcuffed.dropped(owner)
owner.legcuffed = null
owner.update_inv_legcuffed()
@@ -212,7 +212,7 @@
/obj/item/bodypart/l_leg/drop_limb(special) //copypasta
if(owner && !special)
if(owner.legcuffed)
owner.legcuffed.forceMove(owner.loc)
owner.legcuffed.forceMove(drop_location())
owner.legcuffed.dropped(owner)
owner.legcuffed = null
owner.update_inv_legcuffed()
+1 -2
View File
@@ -6,10 +6,9 @@
turf = /turf/open/space/basic
area = /area/space
view = "15x15"
cache_lifespan = 7
hub = "Exadv1.spacestation13"
name = "/tg/ Station 13"
fps = 20
#ifdef GC_FAILURE_HARD_LOOKUP
#ifdef FIND_REF_NO_CHECK_TICK
loop_checks = FALSE
#endif
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 107 KiB

+1 -2
View File
@@ -17,7 +17,6 @@ It's fun to try and predict the round type from the tip of the round message.
The quartermaster is not a head of staff and will never be one.
The bird remembers.
Your sprite represents your hitbox, so that afro makes you easier to kill. The sacrifices we make for style.
Spacemen can't move diagonally but most animals can. Blame the slow decline of the numpad.
Sometimes admins will just do stuff. Roll with it.
The remake will never come out.
Plenty of things that aren't traditionally considered weapons can still be used to slowly brutalize someone to death, get creative!
@@ -26,4 +25,4 @@ This game is older than most of the people playing it.
Do not go gentle into that good night.
Flashbangs can weaken blob tiles, allowing for you and the crew to easily destroy them.
Just the tip?
Some people are unable to read text on a game where half of it is based on text.
Some people are unable to read text on a game where half of it is based on text.
+2
View File
@@ -1055,6 +1055,7 @@
#include "code\game\objects\structures\crates_lockers\closets\utility_closets.dm"
#include "code\game\objects\structures\crates_lockers\closets\wardrobe.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\bar.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\bsdroppod.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\cargo.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\engineering.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm"
@@ -1246,6 +1247,7 @@
#include "code\modules\cargo\console.dm"
#include "code\modules\cargo\export_scanner.dm"
#include "code\modules\cargo\exports.dm"
#include "code\modules\cargo\expressconsole.dm"
#include "code\modules\cargo\order.dm"
#include "code\modules\cargo\packs.dm"
#include "code\modules\cargo\exports\gear.dm"
+1 -1
View File
File diff suppressed because one or more lines are too long
+18 -18
View File
File diff suppressed because one or more lines are too long
+43
View File
@@ -0,0 +1,43 @@
<script>
component.exports = {
computed: {
tabs () {
return Object.keys(this.get('data.supplies'))
}
}
}
</script>
<ui-notice>
{{#if data.siliconUser }}
<ui-section label='Interface Lock'>
<ui-button icon='{{data.locked ? "lock" : "unlock"}}' action='lock'>{{data.locked ? "Engaged" : "Disengaged"}}</ui-button>
</ui-section>
{{else}}
<span>Swipe a QM-Level ID card to {{data.locked ? "unlock" : "lock"}} this interface.</span>
{{/if}}
</ui-notice>
{{#if !data.locked }}
<ui-display title='Express Cargo Console'>
<ui-section label='Credits'>
<span>{{Math.floor(adata.points)}}</span>
</ui-section>
<ui-section label='Notice'>
<span>{{data.message}}</span>
</ui-section>
</ui-display>
<ui-tabs tabs='{{tabs}}'>
{{#each data.supplies}}
<tab name='{{name}}'>
{{#each packs}}
<ui-section label='{{name}}' candystripe right>
<ui-button action='add' params='{"id": "{{id}}"}'>{{cost}} Credits (Premium Pricing)</ui-button>
</ui-section>
{{/each}}
</tab>
{{/each}}
</ui-tabs>
{{/if}}
@@ -546,7 +546,7 @@ function auto_update($payload){
$content = file_get_contents('https://raw.githubusercontent.com/' . $repoOwnerAndName . '/' . $tracked_branch . '/'. $path_to_script);
$content_diff = "### Diff not available. :slightly_frowning_face:";
if($github_diff && preg_match('/(diff --git a\/' . preg_quote($path_to_script, '/') . '.+?)(?:^diff)?/sm', $github_diff, $matches)) {
$script_diff = matches[1];
$script_diff = $matches[1];
if($script_diff) {
$content_diff = "``" . "`DIFF\n" . $script_diff ."\n``" . "`";
}
+2 -2
View File
@@ -24,8 +24,8 @@ if [ "$BUILD_TOOLS" = false ]; then
source $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup
if [ "$BUILD_TESTING" = true ]; then
tools/travis/dm.sh -DTRAVISBUILDING tgstation.dme
else
tools/travis/dm.sh -DTRAVISBUILDING -DTRAVISTESTING -DALL_MAPS tgstation.dme
else
tools/travis/dm.sh -DTRAVISBUILDING tgstation.dme
fi;
fi;