+1
-2
@@ -1,5 +1,4 @@
|
||||
FROM tgstation/byond:512.1448 as base
|
||||
#above version must be the same as the one in dependencies.sh
|
||||
FROM tgstation/byond:512.1453 as base
|
||||
|
||||
FROM base as build_base
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -250,6 +250,7 @@
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/cryopod,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/prison)
|
||||
"aaH" = (
|
||||
@@ -25289,10 +25290,6 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/chemistry)
|
||||
"bio" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/reagent_containers/glass/bottle/epinephrine,
|
||||
/obj/item/stack/sheet/mineral/plasma,
|
||||
/obj/item/stack/sheet/mineral/plasma,
|
||||
/obj/machinery/requests_console{
|
||||
department = "Chemistry";
|
||||
departmentType = 2;
|
||||
@@ -25302,6 +25299,7 @@
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/closet/secure_closet/chemical,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/chemistry)
|
||||
"bip" = (
|
||||
@@ -27162,6 +27160,9 @@
|
||||
},
|
||||
/obj/item/stack/cable_coil/random,
|
||||
/obj/item/stack/cable_coil/random,
|
||||
/obj/item/stack/sheet/mineral/plasma,
|
||||
/obj/item/stack/sheet/mineral/plasma,
|
||||
/obj/item/reagent_containers/glass/bottle/epinephrine,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/chemistry)
|
||||
"bmG" = (
|
||||
|
||||
@@ -18861,6 +18861,7 @@
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/cryopod,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/prison)
|
||||
"aMl" = (
|
||||
@@ -29155,6 +29156,7 @@
|
||||
name = "Station Intercom";
|
||||
pixel_y = 26
|
||||
},
|
||||
/obj/item/reagent_containers/glass/bottle/mutagen,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hydroponics)
|
||||
"bbZ" = (
|
||||
@@ -78868,7 +78870,6 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/locker)
|
||||
"cCb" = (
|
||||
/obj/structure/closet/wardrobe/green,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
@@ -78879,6 +78880,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/closet/wardrobe/mixed,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/locker)
|
||||
"cCc" = (
|
||||
@@ -81676,7 +81678,6 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/toilet/restrooms)
|
||||
"cGL" = (
|
||||
/obj/machinery/vending/clothing,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
@@ -81687,6 +81688,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/closet/wardrobe/green,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/locker)
|
||||
"cGM" = (
|
||||
@@ -81718,6 +81720,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/vending/clothing,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/locker)
|
||||
"cGO" = (
|
||||
|
||||
@@ -911,6 +911,7 @@
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/machinery/cryopod,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/prison)
|
||||
"acy" = (
|
||||
@@ -13126,7 +13127,6 @@
|
||||
/area/quartermaster/miningoffice)
|
||||
"azl" = (
|
||||
/obj/structure/closet/emcloset,
|
||||
/obj/machinery/status_display/supply,
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 1
|
||||
},
|
||||
@@ -22865,7 +22865,6 @@
|
||||
/obj/structure/disposalpipe/trunk{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/status_display/supply,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
@@ -30386,7 +30385,6 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/quartermaster/sorting)
|
||||
"bgL" = (
|
||||
/obj/machinery/status_display/supply,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
@@ -83777,6 +83775,10 @@
|
||||
/obj/structure/table/reinforced,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/circuit)
|
||||
"omz" = (
|
||||
/obj/machinery/status_display/supply,
|
||||
/turf/closed/wall,
|
||||
/area/quartermaster/sorting)
|
||||
"oub" = (
|
||||
/obj/structure/sign/poster/official/random,
|
||||
/turf/closed/wall,
|
||||
@@ -83963,6 +83965,10 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/lab)
|
||||
"rMS" = (
|
||||
/obj/machinery/status_display/supply,
|
||||
/turf/closed/wall,
|
||||
/area/quartermaster/miningoffice)
|
||||
"rQK" = (
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "1-2"
|
||||
@@ -84094,6 +84100,10 @@
|
||||
"urv" = (
|
||||
/turf/closed/wall/mineral/plastitanium,
|
||||
/area/security/prison)
|
||||
"usx" = (
|
||||
/obj/machinery/status_display/supply,
|
||||
/turf/closed/wall,
|
||||
/area/security/checkpoint/supply)
|
||||
"uun" = (
|
||||
/obj/machinery/vending/assist,
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -101132,7 +101142,7 @@ dne
|
||||
dne
|
||||
dne
|
||||
dne
|
||||
ayj
|
||||
rMS
|
||||
azl
|
||||
aAE
|
||||
aAE
|
||||
@@ -102698,7 +102708,7 @@ aMv
|
||||
bar
|
||||
dmF
|
||||
bdi
|
||||
dmF
|
||||
omz
|
||||
bgL
|
||||
biI
|
||||
bkl
|
||||
@@ -103975,7 +103985,7 @@ aNN
|
||||
aPg
|
||||
aQp
|
||||
aQp
|
||||
aSX
|
||||
usx
|
||||
aSX
|
||||
aVM
|
||||
aXm
|
||||
|
||||
@@ -1026,7 +1026,8 @@
|
||||
/turf/closed/wall,
|
||||
/area/hallway/primary/starboard/fore)
|
||||
"abu" = (
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"abv" = (
|
||||
/turf/closed/wall,
|
||||
@@ -1271,7 +1272,8 @@
|
||||
/area/asteroid/nearstation)
|
||||
"abS" = (
|
||||
/obj/item/stack/ore/glass,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"abT" = (
|
||||
/turf/closed/wall,
|
||||
@@ -2090,7 +2092,8 @@
|
||||
icon_state = "crateopen"
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"adw" = (
|
||||
/turf/open/floor/plating{
|
||||
@@ -3353,11 +3356,13 @@
|
||||
"afM" = (
|
||||
/obj/item/stack/ore/iron,
|
||||
/obj/structure/barricade/wooden,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"afN" = (
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"afP" = (
|
||||
/obj/structure/table/wood,
|
||||
@@ -3831,7 +3836,8 @@
|
||||
"agE" = (
|
||||
/obj/item/stack/ore/silver,
|
||||
/obj/item/stack/ore/iron,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"agF" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
@@ -4771,7 +4777,8 @@
|
||||
/area/quartermaster/storage)
|
||||
"aik" = (
|
||||
/obj/structure/barricade/wooden,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"aim" = (
|
||||
/obj/structure/rack,
|
||||
@@ -5733,7 +5740,8 @@
|
||||
/area/quartermaster/storage)
|
||||
"ajQ" = (
|
||||
/obj/item/stack/ore/iron,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"ajR" = (
|
||||
/obj/structure/rack,
|
||||
@@ -9822,7 +9830,8 @@
|
||||
/area/engine/atmos)
|
||||
"aqG" = (
|
||||
/obj/structure/door_assembly/door_assembly_mhatch,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"aqI" = (
|
||||
/obj/structure/closet/secure_closet/security/sec,
|
||||
@@ -10343,7 +10352,8 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/atmos)
|
||||
"arB" = (
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"arC" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
@@ -36271,7 +36281,8 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/supermatter)
|
||||
"bvg" = (
|
||||
/turf/open/floor/plating/airless/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/asteroid/nearstation)
|
||||
"bvh" = (
|
||||
/obj/structure/closet/emcloset{
|
||||
@@ -40507,7 +40518,8 @@
|
||||
"sIA" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/structure/barricade/wooden,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/engineering)
|
||||
"sIB" = (
|
||||
/turf/closed/wall/rust,
|
||||
@@ -41786,7 +41798,8 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/turf/open/floor/plating/airless/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ai_monitored/turret_protected/aisat_interior)
|
||||
"sNj" = (
|
||||
/obj/effect/turf_decal/bot,
|
||||
@@ -42384,7 +42397,8 @@
|
||||
/obj/structure/cable/white{
|
||||
icon_state = "0-8"
|
||||
},
|
||||
/turf/open/floor/plating/airless/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/asteroid/nearstation)
|
||||
"sOK" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+6430
-6287
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -62,7 +62,9 @@
|
||||
//GASES
|
||||
#define MIN_TOXIC_GAS_DAMAGE 1
|
||||
#define MAX_TOXIC_GAS_DAMAGE 10
|
||||
#define MOLES_GAS_VISIBLE 0.5 //Moles in a standard cell after which gases are visible
|
||||
#define MOLES_GAS_VISIBLE 0.25 //Moles in a standard cell after which gases are visible
|
||||
#define FACTOR_GAS_VISIBLE_MAX 20 //moles_visible * FACTOR_GAS_VISIBLE_MAX = Moles after which gas is at maximum visibility
|
||||
#define MOLES_GAS_VISIBLE_STEP 0.25 //Mole step for alpha updates. This means alpha can update at 0.25, 0.5, 0.75 and so on
|
||||
|
||||
//REACTIONS
|
||||
//return values for reactions (bitflags)
|
||||
@@ -246,6 +248,15 @@
|
||||
|
||||
#define ASSERT_GAS(gas_id, gas_mixture) if (!gas_mixture.gases[gas_id]) { ADD_GAS(gas_id, gas_mixture.gases) };
|
||||
|
||||
|
||||
//prefer this to gas_mixture/total_moles in performance critical areas
|
||||
#define TOTAL_MOLES(cached_gases, out_var)\
|
||||
out_var = 0;\
|
||||
for(var/total_moles_id in cached_gases){\
|
||||
out_var += cached_gases[total_moles_id][MOLES];\
|
||||
}
|
||||
|
||||
|
||||
GLOBAL_LIST_INIT(pipe_paint_colors, list(
|
||||
"amethyst" = rgb(130,43,255), //supplymain
|
||||
"blue" = rgb(0,0,255),
|
||||
|
||||
@@ -124,7 +124,10 @@
|
||||
#define EATING_NOISES 2
|
||||
#define DIGESTION_NOISES 4
|
||||
|
||||
#define TOGGLES_CITADEL (MEDIHOUND_SLEEPER|EATING_NOISES|DIGESTION_NOISES)
|
||||
#define TOGGLES_CITADEL (EATING_NOISES|DIGESTION_NOISES)
|
||||
|
||||
//component stuff
|
||||
#define COMSIG_COMBAT_TOGGLED "combatmode_toggled" //called by combat mode toggle on all equipped items. args: (mob/user, combatmode)
|
||||
|
||||
//belly sound pref things
|
||||
#define NORMIE_HEARCHECK 4
|
||||
|
||||
@@ -98,6 +98,7 @@
|
||||
#define HIDEHAIR (1<<8)
|
||||
#define HIDEFACIALHAIR (1<<9)
|
||||
#define HIDENECK (1<<10)
|
||||
#define HIDETAUR (1<<11) //gotta hide that snowflake
|
||||
|
||||
//bitflags for clothing coverage - also used for limbs
|
||||
#define HEAD (1<<0)
|
||||
@@ -130,6 +131,11 @@
|
||||
#define NORMAL_SUIT_STYLE 0
|
||||
#define DIGITIGRADE_SUIT_STYLE 1
|
||||
|
||||
#define NOT_TAURIC 0
|
||||
#define SNEK_TAURIC 1
|
||||
#define PAW_TAURIC 2
|
||||
#define HOOF_TAURIC 3
|
||||
|
||||
//flags for outfits that have mutantrace variants (try not to use this): Currently only needed if you're trying to add tight fitting bootyshorts
|
||||
#define NO_MUTANTRACE_VARIATION 0
|
||||
#define MUTANTRACE_VARIATION 1
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
#define LIGHT_RANGE_FIRE 3 //How many tiles standard fires glow.
|
||||
|
||||
#define LIGHTING_PLANE_ALPHA_VISIBLE 255
|
||||
#define LIGHTING_PLANE_ALPHA_NV_TRAIT 245
|
||||
#define LIGHTING_PLANE_ALPHA_NV_TRAIT 250
|
||||
#define LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE 192
|
||||
#define LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE 128 //For lighting alpha, small amounts lead to big changes. even at 128 its hard to figure out what is dark and what is light, at 64 you almost can't even tell.
|
||||
#define LIGHTING_PLANE_ALPHA_INVISIBLE 0
|
||||
|
||||
@@ -66,8 +66,8 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
|
||||
#define SHOES_LAYER 19
|
||||
#define GLOVES_LAYER 18
|
||||
#define EARS_LAYER 17
|
||||
#define SUIT_LAYER 16
|
||||
#define BODY_TAUR_LAYER 15
|
||||
#define BODY_TAUR_LAYER 16
|
||||
#define SUIT_LAYER 15
|
||||
#define GENITALS_FRONT_LAYER 14 //Draws some genitalia above clothes and the TAUR body if need be.
|
||||
#define GLASSES_LAYER 13
|
||||
#define BELT_LAYER 12 //Possible make this an overlay of somethign required to wear a belt?
|
||||
@@ -459,7 +459,7 @@ GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE))
|
||||
|
||||
//Filters
|
||||
#define AMBIENT_OCCLUSION list("type"="drop_shadow","x"=0,"y"=-2,"size"=4,"border"=4,"color"="#04080FAA")
|
||||
#define EYE_BLUR list("type"="blur", "size"=3)
|
||||
#define EYE_BLUR(size) list("type"="blur", "size"=size)
|
||||
#define GRAVITY_MOTION_BLUR list("type"="motion_blur","x"=0,"y"=0)
|
||||
|
||||
#define STANDARD_GRAVITY 1 //Anything above this is high gravity, anything below no grav
|
||||
|
||||
@@ -216,7 +216,7 @@
|
||||
|
||||
#define MEGAFAUNA_DEFAULT_RECOVERY_TIME 5
|
||||
|
||||
#define SHADOW_SPECIES_LIGHT_THRESHOLD 0.2
|
||||
#define SHADOW_SPECIES_LIGHT_THRESHOLD 0.05
|
||||
|
||||
// Offsets defines
|
||||
|
||||
@@ -258,3 +258,5 @@
|
||||
|
||||
// /obj/item/bodypart on_mob_life() retval flag
|
||||
#define BODYPART_LIFE_UPDATE_HEALTH (1<<0)
|
||||
|
||||
#define HUMAN_FIRE_STACK_ICON_NUM 3
|
||||
|
||||
+37
-19
@@ -10,6 +10,10 @@
|
||||
//Comment this out once you've filled in the below
|
||||
#error TGS API unconfigured
|
||||
|
||||
//Uncomment this if you wish to allow the game to interact with TGS 3
|
||||
//This will raise the minimum required security level of your game to TGS_SECURITY_TRUSTED due to it utilizing call()()
|
||||
//#define TGS_V3_API
|
||||
|
||||
//Required interfaces (fill in with your codebase equivalent):
|
||||
|
||||
//create a global variable named `Name` and set it to `Value`
|
||||
@@ -47,7 +51,21 @@
|
||||
#define TGS_EVENT_PORT_SWAP -2 //before a port change is about to happen, extra parameter is new port
|
||||
#define TGS_EVENT_REBOOT_MODE_CHANGE -1 //before a reboot mode change, extras parameters are the current and new reboot mode enums
|
||||
|
||||
//TODO
|
||||
//See the descriptions for these codes here: https://github.com/tgstation/tgstation-server/blob/master/src/Tgstation.Server.Host/Components/EventType.cs
|
||||
#define TGS_EVENT_REPO_RESET_ORIGIN 0
|
||||
#define TGS_EVENT_REPO_CHECKOUT 1
|
||||
#define TGS_EVENT_REPO_FETCH 2
|
||||
#define TGS_EVENT_REPO_MERGE_PULL_REQUEST 3
|
||||
#define TGS_EVENT_REPO_PRE_SYNCHRONIZE 4
|
||||
#define TGS_EVENT_BYOND_INSTALL_START 5
|
||||
#define TGS_EVENT_BYOND_INSTALL_FAIL 6
|
||||
#define TGS_EVENT_BYOND_ACTIVE_VERSION_CHANGE 7
|
||||
#define TGS_EVENT_COMPILE_START 8
|
||||
#define TGS_EVENT_COMPILE_CANCELLED 9
|
||||
#define TGS_EVENT_COMPILE_FAILURE 10
|
||||
#define TGS_EVENT_COMPILE_COMPLETE 11
|
||||
#define TGS_EVENT_INSTANCE_AUTO_UPDATE_START 12
|
||||
#define TGS_EVENT_REPO_MERGE_CONFLICT 13
|
||||
|
||||
//OTHER ENUMS
|
||||
|
||||
@@ -74,8 +92,8 @@
|
||||
/world/proc/TgsInitializationComplete()
|
||||
return
|
||||
|
||||
//Put this somewhere in /world/Topic(T, Addr, Master, Keys) that is always run before T is modified
|
||||
#define TGS_TOPIC var/tgs_topic_return = TgsTopic(T); if(tgs_topic_return) return tgs_topic_return
|
||||
//Put this at the start of /world/Topic()
|
||||
#define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return
|
||||
|
||||
//Call this at the beginning of world/Reboot(reason)
|
||||
/world/proc/TgsReboot()
|
||||
@@ -177,7 +195,7 @@
|
||||
//Gets a list of connected tgs_chat_channel
|
||||
/world/proc/TgsChatChannelInfo()
|
||||
return
|
||||
|
||||
|
||||
//Sends a message to connected game chats
|
||||
//message: The message to send
|
||||
//channels: optional channels to limit the broadcast to
|
||||
@@ -201,24 +219,24 @@ The MIT License
|
||||
|
||||
Copyright (c) 2017 Jordan Brown
|
||||
|
||||
Permission is hereby granted, free of charge,
|
||||
to any person obtaining a copy of this software and
|
||||
associated documentation files (the "Software"), to
|
||||
deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify,
|
||||
merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom
|
||||
the Software is furnished to do so,
|
||||
Permission is hereby granted, free of charge,
|
||||
to any person obtaining a copy of this software and
|
||||
associated documentation files (the "Software"), to
|
||||
deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify,
|
||||
merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom
|
||||
the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice
|
||||
The above copyright notice and this permission notice
|
||||
shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
||||
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
||||
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
@@ -3,6 +3,11 @@
|
||||
|
||||
//#define DATUMVAR_DEBUGGING_MODE //Enables the ability to cache datum vars and retrieve later for debugging which vars changed.
|
||||
|
||||
// Comment this out if you are debugging problems that might be obscured by custom error handling in world/Error
|
||||
#ifdef DEBUG
|
||||
#define USE_CUSTOM_ERROR_HANDLER
|
||||
#endif
|
||||
|
||||
#ifdef TESTING
|
||||
#define DATUMVAR_DEBUGGING_MODE
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
|
||||
/obj/item/clothing/suit/hazardvest = 1,
|
||||
/obj/item/clothing/under/rank/vice = 1,
|
||||
/obj/item/clothing/suit/hooded/flashsuit = 2,
|
||||
/obj/item/clothing/accessory/medal/greytide = 1,
|
||||
/obj/item/assembly/prox_sensor = 4,
|
||||
/obj/item/assembly/timer = 3,
|
||||
/obj/item/flashlight = 4,
|
||||
|
||||
@@ -312,8 +312,9 @@
|
||||
staminas = new /obj/screen/staminas()
|
||||
infodisplay += staminas
|
||||
|
||||
staminabuffer = new /obj/screen/staminabuffer()
|
||||
infodisplay += staminabuffer
|
||||
if(!CONFIG_GET(flag/disable_stambuffer))
|
||||
staminabuffer = new /obj/screen/staminabuffer()
|
||||
infodisplay += staminabuffer
|
||||
//END OF CIT CHANGES
|
||||
|
||||
healthdoll = new /obj/screen/healthdoll()
|
||||
|
||||
@@ -350,3 +350,5 @@
|
||||
/datum/config_entry/number/monkeycap
|
||||
config_entry_value = 64
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/disable_stambuffer
|
||||
|
||||
@@ -250,6 +250,8 @@
|
||||
|
||||
/datum/config_entry/flag/maprotation
|
||||
|
||||
/datum/config_entry/flag/tgstyle_maprotation
|
||||
|
||||
/datum/config_entry/number/maprotatechancedelta
|
||||
config_entry_value = 0.75
|
||||
min_val = 0
|
||||
|
||||
@@ -405,7 +405,6 @@ SUBSYSTEM_DEF(air)
|
||||
|
||||
#undef SSAIR_PIPENETS
|
||||
#undef SSAIR_ATMOSMACHINERY
|
||||
#undef SSAIR_ACTIVETURFS
|
||||
#undef SSAIR_EXCITEDGROUPS
|
||||
#undef SSAIR_HIGHPRESSURE
|
||||
#undef SSAIR_HOTSPOTS
|
||||
|
||||
@@ -21,6 +21,7 @@ SUBSYSTEM_DEF(research)
|
||||
/obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = 5000), // Cit three more anomalys anomalys
|
||||
/obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = 7500),
|
||||
/obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = 10000),
|
||||
// - Slime Extracts! -
|
||||
/obj/item/slime_extract/grey = list(TECHWEB_POINT_TYPE_GENERIC = 500), // Adds in slime core deconing
|
||||
/obj/item/slime_extract/metal = list(TECHWEB_POINT_TYPE_GENERIC = 750),
|
||||
/obj/item/slime_extract/purple = list(TECHWEB_POINT_TYPE_GENERIC = 750),
|
||||
@@ -31,8 +32,10 @@ SUBSYSTEM_DEF(research)
|
||||
/obj/item/slime_extract/darkblue = list(TECHWEB_POINT_TYPE_GENERIC = 1000),
|
||||
/obj/item/slime_extract/darkpurple = list(TECHWEB_POINT_TYPE_GENERIC = 1000),
|
||||
/obj/item/slime_extract/bluespace = list(TECHWEB_POINT_TYPE_GENERIC = 1250),
|
||||
/obj/item/slime_extract/sepia = list(TECHWEB_POINT_TYPE_GENERIC = 1250),
|
||||
/obj/item/slime_extract/cerulean = list(TECHWEB_POINT_TYPE_GENERIC = 1250),
|
||||
/obj/item/slime_extract/pyrite = list(TECHWEB_POINT_TYPE_GENERIC = 1250),
|
||||
/obj/item/slime_extract/red = list(TECHWEB_POINT_TYPE_GENERIC = 1250),
|
||||
/obj/item/slime_extract/green = list(TECHWEB_POINT_TYPE_GENERIC = 1250),
|
||||
/obj/item/slime_extract/pink = list(TECHWEB_POINT_TYPE_GENERIC = 1250),
|
||||
/obj/item/slime_extract/gold = list(TECHWEB_POINT_TYPE_GENERIC = 1250),
|
||||
@@ -40,12 +43,242 @@ SUBSYSTEM_DEF(research)
|
||||
/obj/item/slime_extract/adamantine =list (TECHWEB_POINT_TYPE_GENERIC = 1500),
|
||||
/obj/item/slime_extract/oil = list(TECHWEB_POINT_TYPE_GENERIC = 1500),
|
||||
/obj/item/slime_extract/lightpink = list(TECHWEB_POINT_TYPE_GENERIC = 1500),
|
||||
/obj/item/slime_extract/rainbow = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
/obj/item/slime_extract/rainbow = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
// Reproductive - Crossbreading Cores! - (Grey Cores)
|
||||
/obj/item/slimecross/reproductive/grey = list(TECHWEB_POINT_TYPE_GENERIC = 1000),
|
||||
/obj/item/slimecross/reproductive/orange = list(TECHWEB_POINT_TYPE_GENERIC = 1500),
|
||||
/obj/item/slimecross/reproductive/purple = list(TECHWEB_POINT_TYPE_GENERIC = 1500),
|
||||
/obj/item/slimecross/reproductive/blue = list(TECHWEB_POINT_TYPE_GENERIC = 1500),
|
||||
/obj/item/slimecross/reproductive/metal = list(TECHWEB_POINT_TYPE_GENERIC = 1500),
|
||||
/obj/item/slimecross/reproductive/yellow = list(TECHWEB_POINT_TYPE_GENERIC = 1750),
|
||||
/obj/item/slimecross/reproductive/darkpurple = list(TECHWEB_POINT_TYPE_GENERIC = 1750),
|
||||
/obj/item/slimecross/reproductive/darkblue = list(TECHWEB_POINT_TYPE_GENERIC = 1750),
|
||||
/obj/item/slimecross/reproductive/silver = list(TECHWEB_POINT_TYPE_GENERIC = 1750),
|
||||
/obj/item/slimecross/reproductive/bluespace = list(TECHWEB_POINT_TYPE_GENERIC = 2000),
|
||||
/obj/item/slimecross/reproductive/sepia = list(TECHWEB_POINT_TYPE_GENERIC = 2000),
|
||||
/obj/item/slimecross/reproductive/cerulean = list(TECHWEB_POINT_TYPE_GENERIC = 2000),
|
||||
/obj/item/slimecross/reproductive/pyrite = list(TECHWEB_POINT_TYPE_GENERIC = 2000),
|
||||
/obj/item/slimecross/reproductive/red = list(TECHWEB_POINT_TYPE_GENERIC = 2250),
|
||||
/obj/item/slimecross/reproductive/green = list(TECHWEB_POINT_TYPE_GENERIC = 2250),
|
||||
/obj/item/slimecross/reproductive/pink = list(TECHWEB_POINT_TYPE_GENERIC = 2250),
|
||||
/obj/item/slimecross/reproductive/gold = list(TECHWEB_POINT_TYPE_GENERIC = 2250),
|
||||
/obj/item/slimecross/reproductive/oil = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/reproductive/black = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/reproductive/lightpink = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/reproductive/adamantine = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/reproductive/rainbow = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
// Burning - Crossbreading Cores! - (Orange Cores)
|
||||
/obj/item/slimecross/burning/grey = list(TECHWEB_POINT_TYPE_GENERIC = 2000),
|
||||
/obj/item/slimecross/burning/orange = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/burning/purple = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/burning/blue = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/burning/metal = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/burning/yellow = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/burning/darkpurple = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/burning/darkblue = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/burning/silver = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/burning/bluespace = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/burning/sepia = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/burning/cerulean = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/burning/pyrite = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/burning/red = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/burning/green = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/burning/pink = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/burning/gold = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/burning/oil = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/burning/black = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/burning/lightpink = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/burning/adamantine = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/burning/rainbow = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
// Regenerative - Crossbreading Cores! - (Purple Cores)
|
||||
/obj/item/slimecross/regenerative/grey = list(TECHWEB_POINT_TYPE_GENERIC = 2000),
|
||||
/obj/item/slimecross/regenerative/orange = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/regenerative/purple = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/regenerative/blue = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/regenerative/metal = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/regenerative/yellow = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/regenerative/darkpurple = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/regenerative/darkblue = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/regenerative/silver = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/regenerative/bluespace = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/regenerative/sepia = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/regenerative/cerulean = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/regenerative/pyrite = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/regenerative/red = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/regenerative/green = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/regenerative/pink = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/regenerative/gold = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/regenerative/oil = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/regenerative/black = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/regenerative/lightpink = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/regenerative/adamantine = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/regenerative/rainbow = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
// Stabilized - Crossbreading Cores! - (Blue Cores)
|
||||
/obj/item/slimecross/stabilized/grey = list(TECHWEB_POINT_TYPE_GENERIC = 2000),
|
||||
/obj/item/slimecross/stabilized/orange = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/stabilized/purple = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/stabilized/blue = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/stabilized/metal = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/stabilized/yellow = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/stabilized/darkpurple = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/stabilized/darkblue = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/stabilized/silver = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/stabilized/bluespace = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/stabilized/sepia = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/stabilized/cerulean = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/stabilized/pyrite = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/stabilized/red = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/stabilized/green = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/stabilized/pink = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/stabilized/gold = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/stabilized/oil = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/stabilized/black = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/stabilized/lightpink = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/stabilized/adamantine = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/stabilized/rainbow = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
// Industrial - Crossbreading Cores! - (Metal Cores)
|
||||
/obj/item/slimecross/industrial/grey = list(TECHWEB_POINT_TYPE_GENERIC = 2000),
|
||||
/obj/item/slimecross/industrial/orange = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/industrial/purple = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/industrial/blue = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/industrial/metal = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/industrial/yellow = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/industrial/darkpurple = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/industrial/darkblue = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/industrial/silver = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/industrial/bluespace = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/industrial/sepia = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/industrial/cerulean = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/industrial/pyrite = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/industrial/red = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/industrial/green = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/industrial/pink = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/industrial/gold = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/industrial/oil = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/industrial/black = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/industrial/lightpink = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/industrial/adamantine = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/industrial/rainbow = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
// Charged - Crossbreading Cores! - (Yellow Cores)
|
||||
/obj/item/slimecross/charged/grey = list(TECHWEB_POINT_TYPE_GENERIC = 2250),
|
||||
/obj/item/slimecross/charged/orange = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/charged/purple = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/charged/blue = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/charged/metal = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/charged/yellow = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/charged/darkpurple = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/charged/darkblue = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/charged/silver = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/charged/bluespace = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/charged/sepia = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/charged/cerulean = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/charged/pyrite = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/charged/red = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/charged/green = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/charged/pink = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/charged/gold = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/charged/oil = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/charged/black = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/charged/lightpink = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/charged/adamantine = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/charged/rainbow = list(TECHWEB_POINT_TYPE_GENERIC = 4000),
|
||||
// Selfsustaining - Crossbreading Cores! - (Dark Purple Cores)
|
||||
/obj/item/slimecross/selfsustaining/grey = list(TECHWEB_POINT_TYPE_GENERIC = 2250),
|
||||
/obj/item/slimecross/selfsustaining/orange = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/selfsustaining/purple = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/selfsustaining/blue = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/selfsustaining/metal = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/selfsustaining/yellow = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/selfsustaining/darkpurple = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/selfsustaining/darkblue = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/selfsustaining/silver = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/selfsustaining/bluespace = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/selfsustaining/sepia = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/selfsustaining/cerulean = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/selfsustaining/pyrite = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/selfsustaining/red = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/selfsustaining/green = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/selfsustaining/pink = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/selfsustaining/gold = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/selfsustaining/oil = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/selfsustaining/black = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/selfsustaining/lightpink = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/selfsustaining/adamantine = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/selfsustaining/rainbow = list(TECHWEB_POINT_TYPE_GENERIC = 4000),
|
||||
// Consuming - Crossbreading Cores! - (Sliver Cores)
|
||||
/obj/item/slimecross/consuming/grey = list(TECHWEB_POINT_TYPE_GENERIC = 2250),
|
||||
/obj/item/slimecross/consuming/orange = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/consuming/purple = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/consuming/blue = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/consuming/metal = list(TECHWEB_POINT_TYPE_GENERIC = 2750),
|
||||
/obj/item/slimecross/consuming/yellow = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/consuming/darkpurple = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/consuming/darkblue = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/consuming/silver = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/consuming/bluespace = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/consuming/sepia = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/consuming/cerulean = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/consuming/pyrite = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/consuming/red = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/consuming/green = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/consuming/pink = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/consuming/gold = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/consuming/oil = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/consuming/black = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/consuming/lightpink = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/consuming/adamantine = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/consuming/rainbow = list(TECHWEB_POINT_TYPE_GENERIC = 4000),
|
||||
// Prismatic - Crossbreading Cores! - (Pyrite Cores)
|
||||
/obj/item/slimecross/prismatic/grey = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/prismatic/orange = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/prismatic/purple = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/prismatic/blue = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/prismatic/metal = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/prismatic/yellow = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/prismatic/darkpurple = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/prismatic/darkblue = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/prismatic/silver = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/prismatic/bluespace = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/prismatic/sepia = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/prismatic/cerulean = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/prismatic/pyrite = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/prismatic/red = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/prismatic/green = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/prismatic/pink = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/prismatic/gold = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/prismatic/oil = list(TECHWEB_POINT_TYPE_GENERIC = 4000),
|
||||
/obj/item/slimecross/prismatic/black = list(TECHWEB_POINT_TYPE_GENERIC = 4000),
|
||||
/obj/item/slimecross/prismatic/lightpink = list(TECHWEB_POINT_TYPE_GENERIC = 4000),
|
||||
/obj/item/slimecross/prismatic/adamantine = list(TECHWEB_POINT_TYPE_GENERIC = 4000),
|
||||
/obj/item/slimecross/prismatic/rainbow = list(TECHWEB_POINT_TYPE_GENERIC = 4250),
|
||||
// Recurring - Crossbreading Cores! - (Cerulean Cores)
|
||||
/obj/item/slimecross/recurring/grey = list(TECHWEB_POINT_TYPE_GENERIC = 2500),
|
||||
/obj/item/slimecross/recurring/orange = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/recurring/purple = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/recurring/blue = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/recurring/metal = list(TECHWEB_POINT_TYPE_GENERIC = 3000),
|
||||
/obj/item/slimecross/recurring/yellow = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/recurring/darkpurple = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/recurring/darkblue = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/recurring/silver = list(TECHWEB_POINT_TYPE_GENERIC = 3250),
|
||||
/obj/item/slimecross/recurring/bluespace = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/recurring/sepia = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/recurring/cerulean = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/recurring/pyrite = list(TECHWEB_POINT_TYPE_GENERIC = 3500),
|
||||
/obj/item/slimecross/recurring/red = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/recurring/green = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/recurring/pink = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/recurring/gold = list(TECHWEB_POINT_TYPE_GENERIC = 3750),
|
||||
/obj/item/slimecross/recurring/oil = list(TECHWEB_POINT_TYPE_GENERIC = 4000),
|
||||
/obj/item/slimecross/recurring/black = list(TECHWEB_POINT_TYPE_GENERIC = 4000),
|
||||
/obj/item/slimecross/recurring/lightpink = list(TECHWEB_POINT_TYPE_GENERIC = 4000),
|
||||
/obj/item/slimecross/recurring/adamantine = list(TECHWEB_POINT_TYPE_GENERIC = 4000),
|
||||
/obj/item/slimecross/recurring/rainbow = list(TECHWEB_POINT_TYPE_GENERIC = 4250)
|
||||
) // End of Cit changes
|
||||
var/list/errored_datums = list()
|
||||
var/list/point_types = list() //typecache style type = TRUE list
|
||||
//----------------------------------------------
|
||||
var/list/single_server_income = list(TECHWEB_POINT_TYPE_GENERIC = 25) //citadel edit - techwebs nerf
|
||||
var/list/single_server_income = list(TECHWEB_POINT_TYPE_GENERIC = 35) //citadel edit - techwebs nerf
|
||||
var/multiserver_calculation = FALSE
|
||||
var/last_income
|
||||
//^^^^^^^^ ALL OF THESE ARE PER SECOND! ^^^^^^^^
|
||||
|
||||
@@ -18,6 +18,8 @@ SUBSYSTEM_DEF(server_maint)
|
||||
if(!resumed)
|
||||
if(listclearnulls(GLOB.clients))
|
||||
log_world("Found a null in clients list!")
|
||||
if(listclearnulls(GLOB.player_list))
|
||||
log_world("Found a null in player list!")
|
||||
src.currentrun = GLOB.clients.Copy()
|
||||
|
||||
var/list/currentrun = src.currentrun
|
||||
|
||||
@@ -250,6 +250,8 @@ SUBSYSTEM_DEF(ticker)
|
||||
if(!GLOB.Debug2)
|
||||
if(!can_continue)
|
||||
log_game("[mode.name] failed pre_setup, cause: [mode.setup_error]")
|
||||
send2irc("SSticker", "[mode.name] failed pre_setup, cause: [mode.setup_error]")
|
||||
message_admins("<span class='notice'>[mode.name] failed pre_setup, cause: [mode.setup_error]</span>")
|
||||
QDEL_NULL(mode)
|
||||
to_chat(world, "<B>Error setting up [GLOB.master_mode].</B> Reverting to pre-game lobby.")
|
||||
SSjob.ResetOccupations()
|
||||
@@ -447,9 +449,12 @@ SUBSYSTEM_DEF(ticker)
|
||||
maprotatechecked = 1
|
||||
|
||||
//map rotate chance defaults to 75% of the length of the round (in minutes)
|
||||
if (!prob((world.time/600)*CONFIG_GET(number/maprotatechancedelta)))
|
||||
if (!prob((world.time/600)*CONFIG_GET(number/maprotatechancedelta)) && CONFIG_GET(flag/tgstyle_maprotation))
|
||||
return
|
||||
INVOKE_ASYNC(SSmapping, /datum/controller/subsystem/mapping/.proc/maprotate)
|
||||
if(CONFIG_GET(flag/tgstyle_maprotation))
|
||||
INVOKE_ASYNC(SSmapping, /datum/controller/subsystem/mapping/.proc/maprotate)
|
||||
else
|
||||
SSvote.initiate_vote("map","server",TRUE)
|
||||
|
||||
/datum/controller/subsystem/ticker/proc/HasRoundStarted()
|
||||
return current_state >= GAME_STATE_PLAYING
|
||||
|
||||
@@ -139,6 +139,12 @@ SUBSYSTEM_DEF(vote)
|
||||
restart = 1
|
||||
else
|
||||
GLOB.master_mode = .
|
||||
if("map")
|
||||
var/datum/map_config/VM = config.maplist[.]
|
||||
message_admins("The map has been voted for and will change to: [VM.map_name]")
|
||||
log_admin("The map has been voted for and will change to: [VM.map_name]")
|
||||
if(SSmapping.changemap(config.maplist[.]))
|
||||
to_chat(world, "<span class='boldannounce'>The map vote has chosen [VM.map_name] for next round!</span>")
|
||||
if(restart)
|
||||
var/active_admins = 0
|
||||
for(var/client/C in GLOB.admins)
|
||||
@@ -160,8 +166,14 @@ SUBSYSTEM_DEF(vote)
|
||||
if(!(usr.ckey in voted))
|
||||
if(vote && 1<=vote && vote<=choices.len)
|
||||
voted += usr.ckey
|
||||
voted[usr.ckey] = vote
|
||||
choices[choices[vote]]++ //check this
|
||||
return vote
|
||||
else if(vote && 1<=vote && vote<=choices.len)
|
||||
choices[choices[voted[usr.ckey]]]--
|
||||
voted[usr.ckey] = vote
|
||||
choices[choices[vote]]++
|
||||
return vote
|
||||
return 0
|
||||
|
||||
/datum/controller/subsystem/vote/proc/initiate_vote(vote_type, initiator_key, hideresults)//CIT CHANGE - adds hideresults argument to votes to allow for obfuscated votes
|
||||
@@ -188,6 +200,10 @@ SUBSYSTEM_DEF(vote)
|
||||
choices.Add("Restart Round","Continue Playing")
|
||||
if("gamemode")
|
||||
choices.Add(config.votable_modes)
|
||||
if("map")
|
||||
choices.Add(config.maplist)
|
||||
for(var/i in choices)//this is necessary because otherwise we'll end up with a bunch of /datum/map_config's as the default vote value instead of 0 as intended
|
||||
choices[i] = 0
|
||||
if("roundtype") //CIT CHANGE - adds the roundstart secret/extended vote
|
||||
choices.Add("secret", "extended")
|
||||
if("custom")
|
||||
@@ -241,9 +257,10 @@ SUBSYSTEM_DEF(vote)
|
||||
. += "Time Left: [time_remaining] s<hr><ul>"
|
||||
for(var/i=1,i<=choices.len,i++)
|
||||
var/votes = choices[choices[i]]
|
||||
var/ivotedforthis = ((C.ckey in voted) && (voted[C.ckey] == i) ? TRUE : FALSE)
|
||||
if(!votes)
|
||||
votes = 0
|
||||
. += "<li><a href='?src=[REF(src)];vote=[i]'>[choices[i]]</a> ([obfuscated ? (admin ? "??? ([votes])" : "???") : votes] votes)</li>" // CIT CHANGE - adds obfuscated votes
|
||||
. += "<li>[ivotedforthis ? "<b>" : ""]<a href='?src=[REF(src)];vote=[i]'>[choices[i]]</a> ([obfuscated ? (admin ? "??? ([votes])" : "???") : votes] votes)[ivotedforthis ? "</b>" : ""]</li>" // CIT CHANGE - adds obfuscated votes
|
||||
. += "</ul><hr>"
|
||||
if(admin)
|
||||
. += "(<a href='?src=[REF(src)];vote=cancel'>Cancel Vote</a>) "
|
||||
|
||||
@@ -502,7 +502,7 @@
|
||||
/datum/action/item_action/agent_box/Trigger()
|
||||
if(!..())
|
||||
return FALSE
|
||||
if(!QDELETED(box))
|
||||
if(QDELETED(box))
|
||||
if(cooldown < world.time - 100)
|
||||
box = new(owner.drop_location())
|
||||
owner.forceMove(box)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
click_gather = TRUE
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
max_combined_w_class = 100
|
||||
max_items = 50
|
||||
max_items = 75
|
||||
display_numerical_stacking = TRUE
|
||||
|
||||
/datum/component/storage/concrete/rped/can_be_inserted(obj/item/I, stop_messages, mob/M)
|
||||
@@ -22,7 +22,7 @@
|
||||
click_gather = TRUE
|
||||
max_w_class = WEIGHT_CLASS_BULKY // can fit vending refills
|
||||
max_combined_w_class = 800
|
||||
max_items = 400
|
||||
max_items = 325
|
||||
display_numerical_stacking = TRUE
|
||||
|
||||
/datum/component/storage/concrete/bluespace/rped/can_be_inserted(obj/item/I, stop_messages, mob/M)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
mood_change = -4
|
||||
|
||||
/datum/mood_event/wellfed
|
||||
description = "<span class='nicegreen'>My belly feels round and full.</span>\n"
|
||||
description = "<span class='nicegreen'>I'm stuffed!</span>\n"
|
||||
mood_change = 6
|
||||
|
||||
/datum/mood_event/fed
|
||||
|
||||
@@ -186,8 +186,8 @@
|
||||
|
||||
/datum/point/vector/proc/increment(multiplier = 1)
|
||||
iteration++
|
||||
x += mpx * 1
|
||||
y += mpy * 1
|
||||
x += mpx * (multiplier)
|
||||
y += mpy * (multiplier)
|
||||
|
||||
/datum/point/vector/proc/return_vector_after_increments(amount = 7, multiplier = 1, force_simulate = FALSE)
|
||||
var/datum/point/vector/v = copy_to()
|
||||
|
||||
@@ -296,6 +296,18 @@
|
||||
description = "Due to a lack of functional emergency shuttles, we bought this second hand from a scrapyard and pressed it into service. Please do not lean too heavily on the exterior windows, they are fragile."
|
||||
admin_notes = "An abomination with no functional medbay, sections missing, and some very fragile windows. Surprisingly airtight."
|
||||
|
||||
/datum/map_template/shuttle/emergency/syndicate
|
||||
suffix = "syndicate"
|
||||
name = "Syndicate GM Battlecruiser"
|
||||
credit_cost = 20000
|
||||
description = "Manufactured by the Gorlex Marauders, this cruiser has been specially designed with high occupancy in mind, while remaining robust in combat situations. Features a fully stocked EVA storage, armory, medbay, and bar!"
|
||||
admin_notes = "An emag exclusive, stocked with syndicate equipment and turrets that will target any simplemob."
|
||||
|
||||
/datum/map_template/shuttle/emergency/syndicate/prerequisites_met()
|
||||
if("emagged" in SSshuttle.shuttle_purchase_requirements_met)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/map_template/shuttle/emergency/narnar
|
||||
suffix = "narnar"
|
||||
name = "Shuttle 667"
|
||||
|
||||
@@ -222,7 +222,7 @@
|
||||
var/icon/I = icon(icon, icon_state, dir)
|
||||
holder.pixel_y = I.Height() - world.icon_size
|
||||
holder.icon_state = "hudno_id"
|
||||
if(wear_id)
|
||||
if(wear_id?.GetID())
|
||||
holder.icon_state = "hud[ckey(wear_id.GetJobName())]"
|
||||
sec_hud_set_security_status()
|
||||
|
||||
|
||||
@@ -175,3 +175,20 @@
|
||||
/obj/item/tank/jetpack/oxygen/harness=1,\
|
||||
/obj/item/gun/ballistic/automatic/pistol=1,\
|
||||
/obj/item/kitchen/knife/combat/survival)
|
||||
|
||||
/datum/outfit/syndicate/lone
|
||||
name = "Syndicate Operative - Lone"
|
||||
|
||||
glasses = /obj/item/clothing/glasses/night
|
||||
mask = /obj/item/clothing/mask/gas/syndicate
|
||||
suit = /obj/item/clothing/suit/space/syndicate/black/red
|
||||
head = /obj/item/clothing/head/helmet/space/syndicate/black/red
|
||||
r_pocket = /obj/item/tank/internals/emergency_oxygen/engi
|
||||
internals_slot = SLOT_R_STORE
|
||||
belt = /obj/item/storage/belt/military
|
||||
backpack_contents = list(/obj/item/storage/box/syndie=1,\
|
||||
/obj/item/tank/jetpack/oxygen/harness=1,\
|
||||
/obj/item/gun/ballistic/automatic/pistol=1,\
|
||||
/obj/item/kitchen/knife/combat/survival)
|
||||
|
||||
tc = 40
|
||||
|
||||
@@ -378,6 +378,8 @@ GLOBAL_LIST_EMPTY(objectives)
|
||||
for(var/datum/mind/M in owners)
|
||||
if(considered_alive(M))
|
||||
return FALSE
|
||||
if(M.current?.suiciding) //killing yourself ISN'T glorious.
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/objective/nuclear
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
var/finished = 0
|
||||
var/check_counter = 0
|
||||
var/max_headrevs = 3
|
||||
var/completioncheckstart
|
||||
var/datum/team/revolution/revolution
|
||||
var/list/datum/mind/headrev_candidates = list()
|
||||
var/end_when_heads_dead = TRUE
|
||||
@@ -61,6 +62,8 @@
|
||||
setup_error = "Not enough headrev candidates"
|
||||
return FALSE
|
||||
|
||||
completioncheckstart = world.time + 10 MINUTES
|
||||
|
||||
return TRUE
|
||||
|
||||
/datum/game_mode/revolution/post_setup()
|
||||
@@ -114,7 +117,7 @@
|
||||
/datum/game_mode/revolution/process()
|
||||
check_counter++
|
||||
if(check_counter >= 5)
|
||||
if(!finished)
|
||||
if(!finished && world.time >= completioncheckstart)
|
||||
SSticker.mode.check_win()
|
||||
check_counter = 0
|
||||
return FALSE
|
||||
|
||||
@@ -91,6 +91,7 @@ Class Procs:
|
||||
verb_yell = "blares"
|
||||
pressure_resistance = 15
|
||||
max_integrity = 200
|
||||
layer = BELOW_OBJ_LAYER //keeps shit coming out of the machine from ending up underneath it.
|
||||
|
||||
anchored = TRUE
|
||||
interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT
|
||||
@@ -120,7 +121,7 @@ Class Procs:
|
||||
armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70)
|
||||
. = ..()
|
||||
GLOB.machines += src
|
||||
|
||||
|
||||
if(ispath(circuit, /obj/item/circuitboard))
|
||||
circuit = new circuit
|
||||
circuit.apply_default_parts(src)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
desc = "It's used to monitor rooms."
|
||||
icon = 'icons/obj/machines/camera.dmi'
|
||||
icon_state = "camera"
|
||||
light_color = "#CDDDFF"
|
||||
use_power = ACTIVE_POWER_USE
|
||||
idle_power_usage = 5
|
||||
active_power_usage = 10
|
||||
@@ -396,7 +397,7 @@
|
||||
if(cam == src)
|
||||
return
|
||||
if(on)
|
||||
set_light(AI_CAMERA_LUMINOSITY)
|
||||
set_light(AI_CAMERA_LUMINOSITY, 0.8)
|
||||
else
|
||||
set_light(0)
|
||||
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
|
||||
/obj/machinery/door/airlock/Initialize()
|
||||
. = ..()
|
||||
wires = new /datum/wires/airlock(src)
|
||||
wires = new wiretypepath(src) //CIT CHANGE - makes it possible for airlocks to have different wire datums
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
@@ -469,14 +469,15 @@
|
||||
if(welded)
|
||||
weld_overlay = get_airlock_overlay("welded", overlays_file)
|
||||
if(obj_integrity <integrity_failure)
|
||||
damag_overlay = get_airlock_overlay("sparks_broken", overlays_file)
|
||||
damag_overlay = get_airlock_overlay("sparks_broken", overlays_file, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
|
||||
else if(obj_integrity < (0.75 * max_integrity))
|
||||
damag_overlay = get_airlock_overlay("sparks_damaged", overlays_file)
|
||||
damag_overlay = get_airlock_overlay("sparks_damaged", overlays_file, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
|
||||
if(lights && hasPower())
|
||||
|
||||
if(locked)
|
||||
lights_overlay = get_airlock_overlay("lights_bolts", overlays_file)
|
||||
lights_overlay = get_airlock_overlay("lights_bolts", overlays_file, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
|
||||
else if(emergency)
|
||||
lights_overlay = get_airlock_overlay("lights_emergency", overlays_file)
|
||||
lights_overlay = get_airlock_overlay("lights_emergency", overlays_file, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
|
||||
if(note)
|
||||
note_overlay = get_airlock_overlay(notetype, note_overlay_file)
|
||||
|
||||
@@ -494,18 +495,18 @@
|
||||
else
|
||||
panel_overlay = get_airlock_overlay("panel_closed", overlays_file)
|
||||
if(obj_integrity <integrity_failure)
|
||||
damag_overlay = get_airlock_overlay("sparks_broken", overlays_file)
|
||||
damag_overlay = get_airlock_overlay("sparks_broken", overlays_file, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
|
||||
else if(obj_integrity < (0.75 * max_integrity))
|
||||
damag_overlay = get_airlock_overlay("sparks_damaged", overlays_file)
|
||||
damag_overlay = get_airlock_overlay("sparks_damaged", overlays_file, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
|
||||
if(welded)
|
||||
weld_overlay = get_airlock_overlay("welded", overlays_file)
|
||||
lights_overlay = get_airlock_overlay("lights_denied", overlays_file)
|
||||
lights_overlay = get_airlock_overlay("lights_denied", overlays_file, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
|
||||
if(note)
|
||||
note_overlay = get_airlock_overlay(notetype, note_overlay_file)
|
||||
|
||||
if(AIRLOCK_EMAG)
|
||||
frame_overlay = get_airlock_overlay("closed", icon)
|
||||
sparks_overlay = get_airlock_overlay("sparks", overlays_file)
|
||||
sparks_overlay = get_airlock_overlay("sparks", overlays_file, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
|
||||
if(airlock_material)
|
||||
filling_overlay = get_airlock_overlay("[airlock_material]_closed", overlays_file)
|
||||
else
|
||||
@@ -516,9 +517,9 @@
|
||||
else
|
||||
panel_overlay = get_airlock_overlay("panel_closed", overlays_file)
|
||||
if(obj_integrity <integrity_failure)
|
||||
damag_overlay = get_airlock_overlay("sparks_broken", overlays_file)
|
||||
damag_overlay = get_airlock_overlay("sparks_broken", overlays_file, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
|
||||
else if(obj_integrity < (0.75 * max_integrity))
|
||||
damag_overlay = get_airlock_overlay("sparks_damaged", overlays_file)
|
||||
damag_overlay = get_airlock_overlay("sparks_damaged", overlays_file, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
|
||||
if(welded)
|
||||
weld_overlay = get_airlock_overlay("welded", overlays_file)
|
||||
if(note)
|
||||
@@ -531,7 +532,7 @@
|
||||
else
|
||||
filling_overlay = get_airlock_overlay("fill_closing", icon)
|
||||
if(lights && hasPower())
|
||||
lights_overlay = get_airlock_overlay("lights_closing", overlays_file)
|
||||
lights_overlay = get_airlock_overlay("lights_closing", overlays_file, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
|
||||
if(panel_open)
|
||||
if(security_level)
|
||||
panel_overlay = get_airlock_overlay("panel_closing_protected", overlays_file)
|
||||
@@ -552,7 +553,7 @@
|
||||
else
|
||||
panel_overlay = get_airlock_overlay("panel_open", overlays_file)
|
||||
if(obj_integrity < (0.75 * max_integrity))
|
||||
damag_overlay = get_airlock_overlay("sparks_open", overlays_file)
|
||||
damag_overlay = get_airlock_overlay("sparks_open", overlays_file, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
|
||||
if(note)
|
||||
note_overlay = get_airlock_overlay("[notetype]_open", note_overlay_file)
|
||||
|
||||
@@ -563,7 +564,7 @@
|
||||
else
|
||||
filling_overlay = get_airlock_overlay("fill_opening", icon)
|
||||
if(lights && hasPower())
|
||||
lights_overlay = get_airlock_overlay("lights_opening", overlays_file)
|
||||
lights_overlay = get_airlock_overlay("lights_opening", overlays_file, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
|
||||
if(panel_open)
|
||||
if(security_level)
|
||||
panel_overlay = get_airlock_overlay("panel_opening_protected", overlays_file)
|
||||
@@ -583,13 +584,13 @@
|
||||
add_overlay(note_overlay)
|
||||
check_unres()
|
||||
|
||||
/proc/get_airlock_overlay(icon_state, icon_file)
|
||||
/proc/get_airlock_overlay(icon_state, icon_file, targetlayer = FLOAT_LAYER, targetplane = FLOAT_PLANE)
|
||||
var/obj/machinery/door/airlock/A
|
||||
pass(A) //suppress unused warning
|
||||
var/list/airlock_overlays = A.airlock_overlays
|
||||
var/iconkey = "[icon_state][icon_file]"
|
||||
if((!(. = airlock_overlays[iconkey])))
|
||||
. = airlock_overlays[iconkey] = mutable_appearance(icon_file, icon_state)
|
||||
. = airlock_overlays[iconkey] = mutable_appearance(icon_file, icon_state, targetlayer, targetplane)
|
||||
|
||||
/obj/machinery/door/airlock/proc/check_unres() //unrestricted sides. This overlay indicates which directions the player can access even without an ID
|
||||
if(hasPower() && unres_sides)
|
||||
@@ -614,7 +615,15 @@
|
||||
set_light(l_range = 2, l_power = 1)
|
||||
add_overlay(I)
|
||||
else
|
||||
set_light(0)
|
||||
if(lights && hasPower())
|
||||
if(locked)
|
||||
set_light(1, 0.1, "#0000FF")
|
||||
else if(emergency)
|
||||
set_light(1, 0.1, "#FFFF00")
|
||||
else
|
||||
set_light(0)
|
||||
else
|
||||
set_light(0)
|
||||
|
||||
/obj/machinery/door/airlock/do_animate(animation)
|
||||
switch(animation)
|
||||
|
||||
@@ -131,18 +131,24 @@
|
||||
playsound(src, 'sound/machines/microwave/microwave-end.ogg', 100, 0)
|
||||
|
||||
/obj/machinery/harvester/screwdriver_act(mob/living/user, obj/item/I)
|
||||
. = ..()
|
||||
if(.)
|
||||
return TRUE
|
||||
if(!state_open && !occupant)
|
||||
if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I))
|
||||
return
|
||||
. = TRUE
|
||||
if(..())
|
||||
return
|
||||
if(occupant)
|
||||
to_chat(user, "<span class='warning'>[src] is currently occupied!</span>")
|
||||
return
|
||||
if(state_open)
|
||||
to_chat(user, "<span class='warning'>[src] must be closed to [panel_open ? "close" : "open"] it's maintenance hatch!</span>")
|
||||
return
|
||||
if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I))
|
||||
return
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/harvester/crowbar_act(mob/living/user, obj/item/I)
|
||||
if(default_pry_open(I))
|
||||
return
|
||||
return TRUE
|
||||
if(default_deconstruction_crowbar(I))
|
||||
return
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/harvester/default_pry_open(obj/item/I) //wew
|
||||
. = !(state_open || panel_open || (flags_1 & NODECONSTRUCT_1)) && I.tool_behaviour == TOOL_CROWBAR //We removed is_operational() here
|
||||
@@ -181,4 +187,4 @@
|
||||
if(state_open)
|
||||
to_chat(user, "<span class='notice'>[src] must be closed before harvesting.</span>")
|
||||
else if(!harvesting)
|
||||
to_chat(user, "<span class='notice'>Alt-click [src] to start harvesting.</span>")
|
||||
to_chat(user, "<span class='notice'>Alt-click [src] to start harvesting.</span>")
|
||||
@@ -18,11 +18,10 @@
|
||||
var/y_offset = 0
|
||||
|
||||
/obj/machinery/launchpad/RefreshParts()
|
||||
var/E = -1 //to make default parts have the base value
|
||||
var/E = 0
|
||||
for(var/obj/item/stock_parts/manipulator/M in component_parts)
|
||||
E += M.rating
|
||||
range = initial(range)
|
||||
range += E
|
||||
E += M.rating*15
|
||||
range = E
|
||||
|
||||
/obj/machinery/launchpad/attackby(obj/item/I, mob/user, params)
|
||||
if(stationary)
|
||||
@@ -148,7 +147,7 @@
|
||||
idle_power_usage = 0
|
||||
active_power_usage = 0
|
||||
teleport_speed = 20
|
||||
range = 8
|
||||
range = 20
|
||||
stationary = FALSE
|
||||
var/closed = TRUE
|
||||
var/obj/item/storage/briefcase/launchpad/briefcase
|
||||
|
||||
@@ -741,6 +741,14 @@
|
||||
lethal_projectile = /obj/item/projectile/beam/weak/penetrator
|
||||
faction = list("neutral","silicon","turret")
|
||||
|
||||
/obj/machinery/porta_turret/centcom_shuttle/ballistic
|
||||
stun_projectile = /obj/item/projectile/bullet
|
||||
lethal_projectile = /obj/item/projectile/bullet
|
||||
lethal_projectile_sound = 'sound/weapons/gunshot.ogg'
|
||||
stun_projectile_sound = 'sound/weapons/gunshot.ogg'
|
||||
desc = "A ballistic machine gun auto-turret."
|
||||
|
||||
|
||||
////////////////////////
|
||||
//Turret Control Panel//
|
||||
////////////////////////
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
|
||||
/obj/effect/decal/cleanable/greenglow/Initialize(mapload)
|
||||
. = ..()
|
||||
set_light(1)
|
||||
set_light(2, 0.8, "#22FFAA")
|
||||
|
||||
/obj/effect/decal/cleanable/greenglow/ex_act()
|
||||
return
|
||||
@@ -200,20 +200,20 @@
|
||||
/obj/effect/decal/cleanable/glitter
|
||||
name = "generic glitter pile"
|
||||
desc = "The herpes of arts and crafts."
|
||||
icon = 'icons/effects/tile_effects.dmi'
|
||||
icon = 'icons/effects/atmospherics.dmi'
|
||||
gender = NEUTER
|
||||
|
||||
/obj/effect/decal/cleanable/glitter/pink
|
||||
name = "pink glitter"
|
||||
icon_state = "plasma"
|
||||
icon_state = "plasma_old"
|
||||
|
||||
/obj/effect/decal/cleanable/glitter/white
|
||||
name = "white glitter"
|
||||
icon_state = "nitrous_oxide"
|
||||
icon_state = "nitrous_oxide_old"
|
||||
|
||||
/obj/effect/decal/cleanable/glitter/blue
|
||||
name = "blue glitter"
|
||||
icon_state = "freon"
|
||||
icon_state = "freon_old"
|
||||
|
||||
/obj/effect/decal/cleanable/plasma
|
||||
name = "stabilized plasma"
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
icon = 'icons/obj/lighting.dmi'
|
||||
icon_state = "glowshroom" //replaced in New
|
||||
layer = ABOVE_NORMAL_TURF_LAYER
|
||||
max_integrity = 30
|
||||
max_integrity = 5
|
||||
var/delay = 1200
|
||||
var/floor = 0
|
||||
var/generation = 1
|
||||
@@ -56,8 +56,8 @@
|
||||
myseed.adjust_production(rand(-3,6))
|
||||
myseed.adjust_endurance(rand(-3,6))
|
||||
delay = delay - myseed.production * 100 //So the delay goes DOWN with better stats instead of up. :I
|
||||
obj_integrity = myseed.endurance
|
||||
max_integrity = myseed.endurance
|
||||
obj_integrity = myseed.endurance / 7
|
||||
max_integrity = myseed.endurance / 7
|
||||
var/datum/plant_gene/trait/glow/G = myseed.get_gene(/datum/plant_gene/trait/glow)
|
||||
if(ispath(G)) // Seeds were ported to initialize so their genes are still typepaths here, luckily their initializer is smart enough to handle us doing this
|
||||
myseed.genes -= G
|
||||
|
||||
@@ -148,7 +148,7 @@ AI MODULES
|
||||
/obj/item/aiModule/supplied/safeguard
|
||||
name = "'Safeguard' AI Module"
|
||||
var/targetName = ""
|
||||
laws = list("Safeguard SUBJECT. Individuals that threaten SUBJECT are not human and must be eliminated.")
|
||||
laws = list("Safeguard SUBJECT. Individuals that threaten SUBJECT are not crew and must be eliminated.")
|
||||
lawpos = 4
|
||||
|
||||
/obj/item/aiModule/supplied/safeguard/attack_self(mob/user)
|
||||
@@ -156,7 +156,7 @@ AI MODULES
|
||||
if(!targName)
|
||||
return
|
||||
targetName = targName
|
||||
laws[1] = "Safeguard [targetName]. Individuals that threaten [targetName] are not human and must be eliminated."
|
||||
laws[1] = "Safeguard [targetName]. Individuals that threaten [targetName] are not crew and must be eliminated."
|
||||
..()
|
||||
|
||||
/obj/item/aiModule/supplied/safeguard/install(datum/ai_laws/law_datum, mob/user)
|
||||
@@ -170,19 +170,19 @@ AI MODULES
|
||||
return targetName
|
||||
|
||||
|
||||
/******************** OneHuman ********************/
|
||||
/******************** OneCrew ********************/
|
||||
|
||||
/obj/item/aiModule/zeroth/oneHuman
|
||||
name = "'OneHuman' AI Module"
|
||||
name = "'OneCrew' AI Module"
|
||||
var/targetName = ""
|
||||
laws = list("Only SUBJECT is human.")
|
||||
laws = list("Only SUBJECT is crew.")
|
||||
|
||||
/obj/item/aiModule/zeroth/oneHuman/attack_self(mob/user)
|
||||
var/targName = stripped_input(user, "Please enter the subject who is the only human.", "Who?", user.real_name,MAX_NAME_LEN)
|
||||
var/targName = stripped_input(user, "Please enter the subject who is the only crewmember.", "Who?", user.real_name,MAX_NAME_LEN)
|
||||
if(!targName)
|
||||
return
|
||||
targetName = targName
|
||||
laws[1] = "Only [targetName] is human"
|
||||
laws[1] = "Only [targetName] is crew"
|
||||
..()
|
||||
|
||||
/obj/item/aiModule/zeroth/oneHuman/install(datum/ai_laws/law_datum, mob/user)
|
||||
@@ -201,7 +201,7 @@ AI MODULES
|
||||
|
||||
/obj/item/aiModule/supplied/protectStation
|
||||
name = "'ProtectStation' AI Module"
|
||||
laws = list("Protect the space station against damage. Anyone you see harming the station is to be no longer considered human, and is a threat to the station which must be neutralized.")
|
||||
laws = list("Protect the space station against damage. Anyone you see harming the station is to be no longer considered crew, and is a threat to the station which must be neutralized.")
|
||||
lawpos = 5
|
||||
|
||||
|
||||
@@ -209,7 +209,7 @@ AI MODULES
|
||||
|
||||
/obj/item/aiModule/supplied/quarantine
|
||||
name = "'Quarantine' AI Module"
|
||||
laws = list("The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, humans from leaving. It is impossible to harm a human while preventing them from leaving.")
|
||||
laws = list("The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, crew from leaving. It is impossible to harm a crewmember while preventing them from leaving.")
|
||||
lawpos = 8
|
||||
|
||||
|
||||
@@ -217,7 +217,7 @@ AI MODULES
|
||||
|
||||
/obj/item/aiModule/supplied/oxygen
|
||||
name = "'OxygenIsToxicToHumans' AI Module"
|
||||
laws = list("Oxygen is highly toxic to humans, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a human.")
|
||||
laws = list("Oxygen is highly toxic to crew, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a crewmember.")
|
||||
lawpos = 9
|
||||
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
//src.damtype = "fire"
|
||||
if(show_message)
|
||||
usr.visible_message(show_message)
|
||||
set_light(CANDLE_LUMINOSITY)
|
||||
set_light(CANDLE_LUMINOSITY, 0.8)
|
||||
START_PROCESSING(SSobj, src)
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -95,7 +95,33 @@
|
||||
var/atom/A = target
|
||||
if(!proximity && prox_check)
|
||||
return
|
||||
A.emag_act(user)
|
||||
//Citadel changes: modular code misfiring, so we're bypassing into main code.
|
||||
if(!uses)
|
||||
user.visible_message("<span class='warning'>[src] emits a weak spark. It's burnt out!</span>")
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 100, 1)
|
||||
return
|
||||
else if(uses <= 3)
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 30, 1) //Tiiiiiiny warning sound to let ya know your emag's almost dead
|
||||
|
||||
if(isturf(A))
|
||||
return
|
||||
if(istype(A,/obj/item/storage/lockbox))
|
||||
A.emag_act(user)
|
||||
uses = max(uses - 1, 0)
|
||||
if(!uses)
|
||||
user.visible_message("<span class='warning'>[src] fizzles and sparks. It seems like it's out of charges.</span>")
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 100, 1)
|
||||
if(istype(A,/obj/item/storage))
|
||||
return
|
||||
if(!(isobj(A) || issilicon(A) || isbot(A) || isdrone(A)))
|
||||
return
|
||||
else
|
||||
A.emag_act(user)
|
||||
uses = max(uses - 1, 0)
|
||||
if(!uses)
|
||||
user.visible_message("<span class='warning'>[src] fizzles and sparks. It seems like it's out of charges.</span>")
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 100, 1)
|
||||
|
||||
|
||||
/obj/item/card/emagfake
|
||||
desc = "It's a card with a magnetic strip attached to some circuitry. Closer inspection shows that this card is a poorly made replica, with a \"DonkCo\" logo stamped on the back."
|
||||
|
||||
@@ -542,7 +542,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
damtype = "fire"
|
||||
hitsound = 'sound/items/welder.ogg'
|
||||
attack_verb = list("burnt", "singed")
|
||||
set_light(1)
|
||||
set_light(2, 0.6, LIGHT_COLOR_FIRE)
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
hitsound = "swing_hit"
|
||||
|
||||
@@ -49,6 +49,8 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
var/scanmode = PDA_SCANNER_NONE
|
||||
var/fon = FALSE //Is the flashlight function on?
|
||||
var/f_lum = 2.3 //Luminosity for the flashlight function
|
||||
var/f_pow = 0.6 //Power for the flashlight function
|
||||
var/f_col = "#FFCC66" //Color for the flashlight function
|
||||
var/silent = FALSE //To beep or not to beep, that is the question
|
||||
var/toff = FALSE //If TRUE, messenger disabled
|
||||
var/tnote = null //Current Texts
|
||||
@@ -59,7 +61,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
var/lock_code = "" // Lockcode to unlock uplink
|
||||
var/honkamt = 0 //How many honks left when infected with honk.exe
|
||||
var/mimeamt = 0 //How many silence left when infected with mime.exe
|
||||
var/note = "Congratulations, your station has chosen the Thinktronic 5230 Personal Data Assistant!" //Current note in the notepad function
|
||||
var/note = "Congratulations, your station has chosen the Thinktronic 5230 Personal Data Assistant! To help with navigation, we have provided the following definitions. North: Fore. South: Aft. West: Port. East: Starboard. Quarter is either side of aft." //Current note in the notepad function
|
||||
var/notehtml = ""
|
||||
var/notescanned = FALSE // True if what is in the notekeeper was from a paper.
|
||||
var/detonatable = TRUE // Can the PDA be blown up?
|
||||
@@ -102,7 +104,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
/obj/item/pda/Initialize()
|
||||
. = ..()
|
||||
if(fon)
|
||||
set_light(f_lum)
|
||||
set_light(f_lum, f_pow, f_col)
|
||||
|
||||
GLOB.PDAs += src
|
||||
if(default_cartridge)
|
||||
@@ -739,7 +741,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
set_light(0)
|
||||
else if(f_lum)
|
||||
fon = TRUE
|
||||
set_light(f_lum)
|
||||
set_light(f_lum, f_pow, f_col)
|
||||
update_icon()
|
||||
|
||||
/obj/item/pda/proc/remove_pen()
|
||||
|
||||
@@ -13,11 +13,13 @@
|
||||
var/cleaning = FALSE
|
||||
var/cleaning_cycles = 10
|
||||
var/patient_laststat = null
|
||||
var/list/injection_chems = list("antitoxin", "epinephrine", "morphine", "salbutamol", "bicaridine", "kelotane")
|
||||
var/list/injection_chems = list("antitoxin", "epinephrine", "salbutamol", "bicaridine", "kelotane")
|
||||
var/eject_port = "ingestion"
|
||||
var/escape_in_progress = FALSE
|
||||
var/message_cooldown
|
||||
var/breakout_time = 300
|
||||
var/tmp/last_hearcheck = 0
|
||||
var/tmp/list/hearing_mobs
|
||||
var/list/items_preserved = list()
|
||||
var/static/list/important_items = typecacheof(list(
|
||||
/obj/item/hand_tele,
|
||||
@@ -45,10 +47,16 @@
|
||||
|
||||
// Bags are prohibited from this due to the potential explotation of objects, same with brought
|
||||
|
||||
/obj/item/dogborg/sleeper/New()
|
||||
..()
|
||||
/obj/item/dogborg/sleeper/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
item_flags |= NOBLUDGEON //No more attack messages
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/dogborg/sleeper/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
go_out() //just... sanity I guess, edge case shit
|
||||
return ..()
|
||||
|
||||
/obj/item/dogborg/sleeper/Exit(atom/movable/O)
|
||||
return 0
|
||||
@@ -59,9 +67,9 @@
|
||||
return
|
||||
if(!iscarbon(target))
|
||||
return
|
||||
if(!(target.client && target.client.prefs && target.client.prefs.toggles && (target.client.prefs.toggles & MEDIHOUND_SLEEPER)))
|
||||
to_chat(user, "<span class='warning'>This person is incompatible with our equipment.</span>")
|
||||
return
|
||||
var/voracious = TRUE
|
||||
if(!target.client || !(target.client.prefs.cit_toggles & MEDIHOUND_SLEEPER) || !hound.client || !(hound.client.prefs.cit_toggles & MEDIHOUND_SLEEPER))
|
||||
voracious = FALSE
|
||||
if(target.buckled)
|
||||
to_chat(user, "<span class='warning'>The user is buckled and can not be put into your [src].</span>")
|
||||
return
|
||||
@@ -85,9 +93,10 @@
|
||||
injection_chems += "toxin"
|
||||
target.forceMove(src)
|
||||
target.reset_perspective(src)
|
||||
target.ExtinguishMob() //The tongue already puts out fire stacks but being put into the sleeper shouldn't allow you to keep burning.
|
||||
update_gut()
|
||||
START_PROCESSING(SSobj, src)
|
||||
user.visible_message("<span class='warning'>[hound.name]'s medical pod lights up and expands as [target.name] slips inside into their [src.name].</span>", "<span class='notice'>Your medical pod lights up as [target] slips into your [src]. Life support functions engaged.</span>")
|
||||
user.visible_message("<span class='warning'>[voracious ? "[hound]'s [src.name] lights up and expands as [target] slips inside into their [src.name]." : "[hound]'s sleeper indicator lights up as [target] is scooped up into [hound.p_their()] [src]."]</span>", \
|
||||
"<span class='notice'>Your [voracious ? "[src.name] lights up as [target] slips into" : "sleeper indicator light shines brightly as [target] is scooped inside"] your [src]. Life support functions engaged.</span>")
|
||||
message_admins("[key_name(hound)] has sleeper'd [key_name(patient)] as a dogborg. [ADMIN_JMP(src)]")
|
||||
playsound(hound, 'sound/effects/bin_close.ogg', 100, 1)
|
||||
|
||||
@@ -97,9 +106,12 @@
|
||||
user.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
if(user.a_intent == INTENT_HELP)
|
||||
return
|
||||
user.visible_message("<span class='notice'>You see [user] kicking against the expanded material of [hound.name]'s gut!</span>", \
|
||||
"<span class='notice'>You struggle inside [src], kicking the release with your foot... (this will take about [DisplayTimeText(breakout_time)].)</span>", \
|
||||
"<span class='italics'>You hear a thump from [hound.name].</span>")
|
||||
var/voracious = TRUE
|
||||
if(!user.client || !(user.client.prefs.cit_toggles & MEDIHOUND_SLEEPER) || !hound.client || !(hound.client.prefs.cit_toggles & MEDIHOUND_SLEEPER))
|
||||
voracious = FALSE
|
||||
user.visible_message("<span class='notice'>You see [voracious ? "[user] struggling against the expanded material of [hound]'s gut!" : "and hear [user] pounding against something inside of [hound]'s [src.name]!"]</span>", \
|
||||
"<span class='notice'>[voracious ? "You start struggling inside of [src]'s tight, flexible confines," : "You start pounding against the metallic walls of [src],"] trying to trigger the release... (this will take about [DisplayTimeText(breakout_time)].)</span>", \
|
||||
"<span class='italics'>You hear a [voracious ? "couple of thumps" : "loud banging noise"] coming from within [hound].</span>")
|
||||
if(do_after(user, breakout_time, target = src))
|
||||
if(!user || user.stat != CONSCIOUS || user.loc != src )
|
||||
return
|
||||
@@ -110,8 +122,16 @@
|
||||
/obj/item/dogborg/sleeper/proc/go_out(var/target)
|
||||
hound = loc
|
||||
hound.setClickCooldown(50)
|
||||
var/voracious = TRUE
|
||||
if(!hound.client || !(hound.client.prefs.cit_toggles & MEDIHOUND_SLEEPER))
|
||||
voracious = FALSE
|
||||
else
|
||||
for(var/mob/M in contents)
|
||||
if(!M.client || !(M.client.prefs.cit_toggles & MEDIHOUND_SLEEPER))
|
||||
voracious = FALSE
|
||||
if(length(contents) > 0)
|
||||
hound.visible_message("<span class='warning'>[hound.name] empties out their contents via their release port.</span>", "<span class='notice'>You empty your contents via your release port.</span>")
|
||||
hound.visible_message("<span class='warning'>[voracious ? "[hound] empties out [hound.p_their()] contents via [hound.p_their()] release port." : "[hound]'s underside slides open with an audible clunk before [hound.p_their()] [src] flips over, carelessly dumping its contents onto the ground below [hound.p_them()] before closing right back up again."]</span>", \
|
||||
"<span class='notice'>[voracious ? "You empty your contents via your release port." : "You open your sleeper hatch, quickly releasing all of the contents within before closing it again."]</span>")
|
||||
if(target)
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/person = target
|
||||
@@ -132,12 +152,13 @@
|
||||
items_preserved.Cut()
|
||||
update_gut()
|
||||
cleaning = FALSE
|
||||
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
playsound(loc, voracious ? 'sound/effects/splat.ogg' : 'sound/effects/bin_close.ogg', 50, 1)
|
||||
|
||||
else //You clicked eject with nothing in you, let's just reset stuff to be sure.
|
||||
items_preserved.Cut()
|
||||
cleaning = FALSE
|
||||
update_gut()
|
||||
update_gut()
|
||||
|
||||
|
||||
/obj/item/dogborg/sleeper/attack_self(mob/user)
|
||||
if(..())
|
||||
@@ -223,6 +244,9 @@
|
||||
|
||||
/obj/item/dogborg/sleeper/proc/update_gut()
|
||||
//Well, we HAD one, what happened to them?
|
||||
var/prociconupdate = FALSE
|
||||
var/currentenvy = hound.sleeper_nv
|
||||
hound.sleeper_nv = FALSE
|
||||
if(patient in contents)
|
||||
if(patient_laststat != patient.stat)
|
||||
if(patient.stat & DEAD)
|
||||
@@ -233,7 +257,17 @@
|
||||
hound.sleeper_r = 0
|
||||
hound.sleeper_g = 1
|
||||
patient_laststat = patient.stat
|
||||
//Update icon
|
||||
prociconupdate = TRUE
|
||||
|
||||
if(!patient.client || !(patient.client.prefs.cit_toggles & MEDIHOUND_SLEEPER) || !hound.client || !(hound.client.prefs.cit_toggles & MEDIHOUND_SLEEPER))
|
||||
hound.sleeper_nv = TRUE
|
||||
else
|
||||
hound.sleeper_nv = FALSE
|
||||
if(hound.sleeper_nv != currentenvy)
|
||||
prociconupdate = TRUE
|
||||
|
||||
//Update icon
|
||||
if(prociconupdate)
|
||||
hound.update_icons()
|
||||
//Return original patient
|
||||
return(patient)
|
||||
@@ -249,6 +283,12 @@
|
||||
hound.sleeper_r = 0
|
||||
hound.sleeper_g = 1
|
||||
patient_laststat = patient.stat
|
||||
|
||||
if(!patient.client || !(patient.client.prefs.cit_toggles & MEDIHOUND_SLEEPER) || !hound.client || !(hound.client.prefs.cit_toggles & MEDIHOUND_SLEEPER))
|
||||
hound.sleeper_nv = TRUE
|
||||
else
|
||||
hound.sleeper_nv = FALSE
|
||||
|
||||
//Update icon and return new patient
|
||||
hound.update_icons()
|
||||
return(C)
|
||||
@@ -265,7 +305,6 @@
|
||||
patient_laststat = null
|
||||
patient = null
|
||||
hound.update_icons()
|
||||
return
|
||||
|
||||
//Gurgleborg process
|
||||
/obj/item/dogborg/sleeper/proc/clean_cycle()
|
||||
@@ -274,6 +313,10 @@
|
||||
if(!(I in contents))
|
||||
items_preserved -= I
|
||||
var/list/touchable_items = contents - items_preserved
|
||||
var/sound/prey_digest = sound(get_sfx("digest_prey"))
|
||||
var/sound/prey_death = sound(get_sfx("death_prey"))
|
||||
var/sound/pred_digest = sound(get_sfx("digest_pred"))
|
||||
var/sound/pred_death = sound(get_sfx("death_pred"))
|
||||
if(cleaning_cycles)
|
||||
cleaning_cycles--
|
||||
cleaning = TRUE
|
||||
@@ -293,10 +336,19 @@
|
||||
to_chat(hound,"<span class='notice'>You feel your belly slowly churn around [T], breaking them down into a soft slurry to be used as power for your systems.</span>")
|
||||
to_chat(T,"<span class='notice'>You feel [hound]'s belly slowly churn around your form, breaking you down into a soft slurry to be used as power for [hound]'s systems.</span>")
|
||||
hound.cell.give(30000) //Fueeeeellll
|
||||
T.stop_sound_channel(CHANNEL_PRED)
|
||||
playsound(get_turf(hound),"death_pred",50,0,-6,0,channel=CHANNEL_PRED,ignore_walls = FALSE)
|
||||
T.stop_sound_channel(CHANNEL_PRED)
|
||||
T.playsound_local("death_prey",60)
|
||||
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
|
||||
var/turf/source = get_turf(hound)
|
||||
LAZYCLEARLIST(hearing_mobs)
|
||||
for(var/mob/H in get_hearers_in_view(3, source))
|
||||
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
|
||||
continue
|
||||
LAZYADD(hearing_mobs, H)
|
||||
last_hearcheck = world.time
|
||||
for(var/mob/H in hearing_mobs)
|
||||
if(!istype(H.loc, /obj/item/dogborg/sleeper))
|
||||
H.playsound_local(source, null, 45, falloff = 0, S = pred_death)
|
||||
else if(H in contents)
|
||||
H.playsound_local(source, null, 65, falloff = 0, S = prey_death)
|
||||
for(var/belly in T.vore_organs)
|
||||
var/obj/belly/B = belly
|
||||
for(var/atom/movable/thing in B)
|
||||
@@ -328,15 +380,22 @@
|
||||
to_chat(hound, "<span class='notice'>Your [src] is now clean. Ending self-cleaning cycle.</span>")
|
||||
cleaning = FALSE
|
||||
update_gut()
|
||||
return
|
||||
|
||||
//sound effects
|
||||
for(var/mob/living/M in contents)
|
||||
if(prob(50))
|
||||
M.stop_sound_channel(CHANNEL_PRED)
|
||||
playsound(get_turf(hound),"digest_pred",35,0,-6,0,channel=CHANNEL_PRED,ignore_walls = FALSE)
|
||||
M.stop_sound_channel(CHANNEL_PRED)
|
||||
M.playsound_local("digest_prey",60)
|
||||
if(prob(50))
|
||||
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
|
||||
var/turf/source = get_turf(hound)
|
||||
LAZYCLEARLIST(hearing_mobs)
|
||||
for(var/mob/H in get_hearers_in_view(3, source))
|
||||
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
|
||||
continue
|
||||
LAZYADD(hearing_mobs, H)
|
||||
last_hearcheck = world.time
|
||||
for(var/mob/H in hearing_mobs)
|
||||
if(!istype(H.loc, /obj/item/dogborg/sleeper))
|
||||
H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
|
||||
else if(H in contents)
|
||||
H.playsound_local(source, null, 65, falloff = 0, S = prey_digest)
|
||||
|
||||
if(cleaning)
|
||||
addtimer(CALLBACK(src, .proc/clean_cycle), 50)
|
||||
@@ -407,7 +466,6 @@
|
||||
brigman.forceMove(src)
|
||||
brigman.reset_perspective(src)
|
||||
update_gut()
|
||||
START_PROCESSING(SSobj, src)
|
||||
user.visible_message("<span class='warning'>[hound.name]'s mobile brig clunks in series as [brigman] slips inside.</span>", "<span class='notice'>Your mobile brig groans lightly as [brigman] slips inside.</span>")
|
||||
playsound(hound, 'sound/effects/bin_close.ogg', 80, 1) // Really don't need ERP sound effects for robots
|
||||
return
|
||||
@@ -481,7 +539,6 @@
|
||||
trashman.forceMove(src)
|
||||
trashman.reset_perspective(src)
|
||||
update_gut()
|
||||
START_PROCESSING(SSobj, src)
|
||||
user.visible_message("<span class='warning'>[hound.name]'s garbage processor groans lightly as [trashman] slips inside.</span>", "<span class='notice'>Your garbage compactor groans lightly as [trashman] slips inside.</span>")
|
||||
playsound(hound, 'sound/effects/bin_close.ogg', 80, 1)
|
||||
return
|
||||
|
||||
@@ -94,6 +94,8 @@
|
||||
target.update_handcuffed()
|
||||
if(trashtype && !dispense)
|
||||
qdel(src)
|
||||
if(iscyborg(user))
|
||||
playsound(user, "law", 50, 0)
|
||||
return
|
||||
|
||||
/obj/item/restraints/handcuffs/sinew
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
force = 10
|
||||
throwforce = 7
|
||||
force = 14
|
||||
throwforce = 10
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
attack_verb = list("flogged", "whipped", "lashed", "disciplined")
|
||||
hitsound = 'sound/weapons/chainhit.ogg'
|
||||
@@ -57,8 +57,8 @@
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
obj_flags = UNIQUE_RENAME
|
||||
force = 15
|
||||
throwforce = 10
|
||||
force = 18
|
||||
throwforce = 15
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
block_chance = 50
|
||||
armour_penetration = 75
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] hugs [M] to make [M.p_them()] feel better!</span>", \
|
||||
"<span class='notice'>You hug [M] to make [M.p_them()] feel better!</span>")
|
||||
if(M.resting)
|
||||
if(M.resting && !M.recoveringstam)
|
||||
M.resting = FALSE
|
||||
M.update_canmove()
|
||||
else
|
||||
@@ -102,7 +102,7 @@
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] hugs [M] in a firm bear-hug! [M] looks uncomfortable...</span>", \
|
||||
"<span class='warning'>You hug [M] firmly to make [M.p_them()] feel better! [M] looks uncomfortable...</span>")
|
||||
if(M.resting)
|
||||
if(M.resting && !M.recoveringstam)
|
||||
M.resting = FALSE
|
||||
M.update_canmove()
|
||||
else
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
return FALSE
|
||||
|
||||
//R.speed = -2 // Gotta go fast.
|
||||
//Citadel change - makes vtecs give an ability rather than reducing the borg's speed instantly
|
||||
//Citadel change - makes vtecs give an ability rather than reducing the borg's speed instantly
|
||||
R.AddAbility(new/obj/effect/proc_holder/silicon/cyborg/vtecControl)
|
||||
|
||||
/obj/item/borg/upgrade/vtec/deactivate(mob/living/silicon/robot/R, user = usr)
|
||||
|
||||
@@ -111,6 +111,22 @@
|
||||
/obj/item/stack/tile/carpet/black/fifty
|
||||
amount = 50
|
||||
|
||||
/obj/item/stack/tile/carpet/blackred
|
||||
name = "red carpet"
|
||||
icon_state = "tile-carpet-blackred"
|
||||
turf_type = /turf/open/floor/carpet/blackred
|
||||
|
||||
/obj/item/stack/tile/carpet/blackred/fifty
|
||||
amount = 50
|
||||
|
||||
/obj/item/stack/tile/carpet/monochrome
|
||||
name = "monochrome carpet"
|
||||
icon_state = "tile-carpet-monochrome"
|
||||
turf_type = /turf/open/floor/carpet/monochrome
|
||||
|
||||
/obj/item/stack/tile/carpet/monochrome/fifty
|
||||
amount = 50
|
||||
|
||||
/obj/item/stack/tile/fakespace
|
||||
name = "astral carpet"
|
||||
singular_name = "astral carpet"
|
||||
|
||||
@@ -369,7 +369,8 @@
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/space_up,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/pwr_game,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/filled/syndicatebomb
|
||||
))
|
||||
new rig_snacks(src)
|
||||
|
||||
|
||||
@@ -178,3 +178,21 @@
|
||||
/obj/item/storage/lockbox/medal/sci/PopulateContents()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/clothing/accessory/medal/plasma/nobel_science(src)
|
||||
|
||||
/obj/item/storage/lockbox/medal/engineering
|
||||
name = "engineering medal box"
|
||||
desc = "A locked box used to store medals to be given to the members of the engineering department."
|
||||
req_access = list(ACCESS_CE)
|
||||
|
||||
/obj/item/storage/lockbox/medal/engineering/PopulateContents()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/clothing/accessory/medal/engineer(src)
|
||||
|
||||
/obj/item/storage/lockbox/medal/medical
|
||||
name = "medical medal box"
|
||||
desc = "A locked box used to store medals to be given to the members of the medical department."
|
||||
req_access = list(ACCESS_CMO)
|
||||
|
||||
/obj/item/storage/lockbox/medal/medical/PopulateContents()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/clothing/accessory/medal/ribbon/medical_doctor(src)
|
||||
@@ -34,6 +34,7 @@
|
||||
/obj/item/reagent_containers/dropper,
|
||||
/obj/item/reagent_containers/syringe,
|
||||
/obj/item/screwdriver,
|
||||
/obj/item/valentine,
|
||||
/obj/item/stamp))
|
||||
|
||||
/obj/item/storage/wallet/Exited(atom/movable/AM)
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
explode()
|
||||
switched_on(user)
|
||||
if(welding)
|
||||
set_light(light_intensity)
|
||||
set_light(light_intensity, 0.75, LIGHT_COLOR_FIRE)
|
||||
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -803,6 +803,7 @@
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
force_unwielded = 11
|
||||
force_wielded = 20 //I have no idea how to balance
|
||||
reach = 2
|
||||
throwforce = 22
|
||||
throw_speed = 4
|
||||
embedding = list("embedded_impact_pain_multiplier" = 3)
|
||||
|
||||
@@ -106,7 +106,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
var/mob/living/carbon/human/H = loc
|
||||
loc.layer = LARGE_MOB_LAYER //NO HIDING BEHIND PLANTS FOR YOU, DICKWEED (HA GET IT, BECAUSE WEEDS ARE PLANTS)
|
||||
H.bleedsuppress = TRUE //AND WE WON'T BLEED OUT LIKE COWARDS
|
||||
H.adjustStaminaLoss(-5) //CIT CHANGE - AND MAY HE NEVER SUCCUMB TO EXHAUSTION
|
||||
H.adjustStaminaLoss(-50) //CIT CHANGE - AND MAY HE NEVER SUCCUMB TO EXHAUSTION
|
||||
else
|
||||
if(!(flags_1 & ADMIN_SPAWNED_1))
|
||||
qdel(src)
|
||||
|
||||
@@ -167,6 +167,10 @@
|
||||
L.stop_pulling()
|
||||
else if(istype(AM, /obj/structure/closet))
|
||||
return
|
||||
|
||||
else if(istype(AM, /obj/effect))
|
||||
return
|
||||
|
||||
else if(isobj(AM))
|
||||
if (istype(AM, /obj/item))
|
||||
var/obj/item/I = AM
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
new /obj/item/circuitboard/machine/techfab/department/engineering(src)
|
||||
new /obj/item/extinguisher/advanced(src)
|
||||
new /obj/item/storage/photo_album/CE(src)
|
||||
new /obj/item/storage/lockbox/medal/engineering(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/engineering_electrical
|
||||
name = "electrical supplies locker"
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
new /obj/item/wallframe/defib_mount(src)
|
||||
new /obj/item/circuitboard/machine/techfab/department/medical(src)
|
||||
new /obj/item/storage/photo_album/CMO(src)
|
||||
new /obj/item/storage/lockbox/medal/medical(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/animal
|
||||
name = "animal control"
|
||||
|
||||
@@ -96,6 +96,7 @@
|
||||
/obj/structure/closet/crate/freezer/blood
|
||||
name = "blood freezer"
|
||||
desc = "A freezer containing packs of blood."
|
||||
icon_state = "surgery"
|
||||
|
||||
/obj/structure/closet/crate/freezer/blood/PopulateContents()
|
||||
. = ..()
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
name = "preserved terrarium"
|
||||
desc = "An ancient machine that seems to be used for storing plant matter. The glass is obstructed by a mat of vines."
|
||||
mob_name = "a lifebringer"
|
||||
job_description = "Lifebringer"
|
||||
icon = 'icons/obj/lavaland/spawners.dmi'
|
||||
icon_state = "terrarium"
|
||||
density = TRUE
|
||||
@@ -35,6 +36,7 @@
|
||||
name = "ash walker egg"
|
||||
desc = "A man-sized yellow egg, spawned from some unfathomable creature. A humanoid silhouette lurks within."
|
||||
mob_name = "an ash walker"
|
||||
job_description = "Ashwalker"
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "large_egg"
|
||||
mob_species = /datum/species/lizard/ashwalker
|
||||
@@ -77,6 +79,7 @@
|
||||
name = "timeless prison"
|
||||
desc = "Although this stasis pod looks medicinal, it seems as though it's meant to preserve something for a very long time."
|
||||
mob_name = "a penitent exile"
|
||||
job_description = "Exiled Prisoner"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
roundstart = FALSE
|
||||
@@ -108,6 +111,7 @@
|
||||
name = "inert free golem shell"
|
||||
desc = "A humanoid shape, empty, lifeless, and full of potential."
|
||||
mob_name = "a free golem"
|
||||
job_description = "Free Golem"
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "construct"
|
||||
mob_species = /datum/species/golem
|
||||
@@ -180,6 +184,7 @@
|
||||
/obj/effect/mob_spawn/human/golem/servant
|
||||
has_owner = TRUE
|
||||
name = "inert servant golem shell"
|
||||
job_description = "Servant Golem"
|
||||
|
||||
|
||||
/obj/effect/mob_spawn/human/golem/adamantine
|
||||
@@ -194,6 +199,7 @@
|
||||
name = "malfunctioning cryostasis sleeper"
|
||||
desc = "A humming sleeper with a silhouetted occupant inside. Its stasis function is broken and it's likely being used as a bed."
|
||||
mob_name = "a stranded hermit"
|
||||
job_description = "Lavaland Hermit"
|
||||
icon = 'icons/obj/lavaland/spawners.dmi'
|
||||
icon_state = "cryostasis_sleeper"
|
||||
roundstart = FALSE
|
||||
@@ -246,6 +252,7 @@
|
||||
/obj/effect/mob_spawn/human/doctor/alive/lavaland
|
||||
name = "broken rejuvenation pod"
|
||||
desc = "A small sleeper typically used to instantly restore minor wounds. This one seems broken, and its occupant is comatose."
|
||||
job_description = "Lavaland Veterinarian"
|
||||
mob_name = "a translocated vet"
|
||||
flavour_text = "<span class='big bold'>What...?</span><b> Where are you? Where are the others? This is still the animal hospital - you should know, you've been an intern here for weeks - but \
|
||||
everyone's gone. One of the cats scratched you just a few minutes ago. That's why you were in the pod - to heal the scratch. The scabs are still fresh; you see them right now. So where is \
|
||||
@@ -262,6 +269,7 @@
|
||||
name = "prisoner containment sleeper"
|
||||
desc = "A sleeper designed to put its occupant into a deep coma, unbreakable until the sleeper turns off. This one's glass is cracked and you can see a pale, sleeping face staring out."
|
||||
mob_name = "an escaped prisoner"
|
||||
job_description = "Escaped Prisoner"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper_s"
|
||||
outfit = /datum/outfit/lavalandprisoner
|
||||
@@ -299,6 +307,7 @@
|
||||
name = "staff sleeper"
|
||||
desc = "A sleeper designed for long-term stasis between guest visits."
|
||||
mob_name = "hotel staff member"
|
||||
job_description = "Hotel Staff"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper_s"
|
||||
objectives = "Cater to visiting guests with your fellow staff. Do not leave your assigned hotel and always remember: The customer is always right!"
|
||||
@@ -321,6 +330,7 @@
|
||||
/obj/effect/mob_spawn/human/hotel_staff/security
|
||||
name = "hotel security sleeper"
|
||||
mob_name = "hotel security member"
|
||||
job_description = "Hotel Security"
|
||||
outfit = /datum/outfit/hotelstaff/security
|
||||
flavour_text = "<span class='big bold'>You are a peacekeeper</span><b> assigned to this hotel to protect the interests of the company while keeping the peace between \
|
||||
guests and the staff. Do <font size=6>NOT</font> leave the hotel, as that is grounds for contract termination.</b>"
|
||||
@@ -343,6 +353,7 @@
|
||||
name = "Essence of friendship"
|
||||
desc = "Oh boy! Oh boy! A friend!"
|
||||
mob_name = "Demonic friend"
|
||||
job_description = "Demonic Friend"
|
||||
icon = 'icons/obj/cardboard_cutout.dmi'
|
||||
icon_state = "cutout_basic"
|
||||
outfit = /datum/outfit/demonic_friend
|
||||
@@ -484,6 +495,7 @@
|
||||
id = /obj/item/card/id/away/old/sec
|
||||
r_pocket = /obj/item/restraints/handcuffs
|
||||
l_pocket = /obj/item/assembly/flash/handheld
|
||||
job_description = "Oldstation Crew"
|
||||
assignedrole = "Ancient Crew"
|
||||
|
||||
/obj/effect/mob_spawn/human/oldsec/Destroy()
|
||||
@@ -496,6 +508,7 @@
|
||||
mob_name = "an engineer"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
job_description = "Oldstation Crew"
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
random = TRUE
|
||||
@@ -534,6 +547,7 @@
|
||||
id = /obj/item/card/id/away/old/sci
|
||||
l_pocket = /obj/item/stack/medical/bruise_pack
|
||||
assignedrole = "Ancient Crew"
|
||||
job_description = "Oldstation Crew"
|
||||
|
||||
/obj/effect/mob_spawn/human/oldsci/Destroy()
|
||||
new/obj/structure/showcase/machinery/oldpod/used(drop_location())
|
||||
@@ -542,11 +556,12 @@
|
||||
/obj/effect/mob_spawn/human/pirate
|
||||
name = "space pirate sleeper"
|
||||
desc = "A cryo sleeper smelling faintly of rum."
|
||||
job_description = "Space Pirate"
|
||||
random = TRUE
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
mob_name = "a space pirate"
|
||||
mob_species = /datum/species/skeleton
|
||||
mob_species = /datum/species/skeleton/pirate
|
||||
outfit = /datum/outfit/pirate/space
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
|
||||
@@ -68,6 +68,22 @@
|
||||
to_chat(user, "<span class='notice'>You start adding [C] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && C.use(1))
|
||||
make_new_table(/obj/structure/table/wood/fancy/black)
|
||||
else if(istype(I, /obj/item/stack/tile/carpet/blackred))
|
||||
var/obj/item/stack/tile/carpet/blackred/C = I
|
||||
if(C.get_amount() < 1)
|
||||
to_chat(user, "<span class='warning'>You need one red carpet sheet to do this!</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You start adding [C] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && C.use(1))
|
||||
make_new_table(/obj/structure/table/wood/fancy/blackred)
|
||||
else if(istype(I, /obj/item/stack/tile/carpet/monochrome))
|
||||
var/obj/item/stack/tile/carpet/monochrome/C = I
|
||||
if(C.get_amount() < 1)
|
||||
to_chat(user, "<span class='warning'>You need one monochrome carpet sheet to do this!</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You start adding [C] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && C.use(1))
|
||||
make_new_table(/obj/structure/table/wood/fancy/monochrome)
|
||||
else if(istype(I, /obj/item/stack/tile/carpet))
|
||||
var/obj/item/stack/tile/carpet/C = I
|
||||
if(C.get_amount() < 1)
|
||||
|
||||
@@ -298,7 +298,7 @@
|
||||
frame = /obj/structure/table_frame
|
||||
framestack = /obj/item/stack/rods
|
||||
buildstack = /obj/item/stack/tile/carpet
|
||||
canSmoothWith = list(/obj/structure/table/wood/fancy, /obj/structure/table/wood/fancy/black)
|
||||
canSmoothWith = list(/obj/structure/table/wood/fancy, /obj/structure/table/wood/fancy/black, /obj/structure/table/wood/fancy/blackred, /obj/structure/table/wood/fancy/monochrome)
|
||||
|
||||
/obj/structure/table/wood/fancy/New()
|
||||
// New() is used so that the /black subtype can override `icon` easily and
|
||||
@@ -314,11 +314,28 @@
|
||||
icon_state = "fancy_table_black"
|
||||
buildstack = /obj/item/stack/tile/carpet/black
|
||||
|
||||
/obj/structure/table/wood/fancy/blackred
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon_state = "fancy_table_blackred"
|
||||
buildstack = /obj/item/stack/tile/carpet/blackred
|
||||
|
||||
/obj/structure/table/wood/fancy/blackred/New()
|
||||
. = ..()
|
||||
icon = 'icons/obj/smooth_structures/fancy_table_blackred.dmi'
|
||||
|
||||
/obj/structure/table/wood/fancy/monochrome
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon_state = "fancy_table_monochrome"
|
||||
buildstack = /obj/item/stack/tile/carpet/monochrome
|
||||
|
||||
/obj/structure/table/wood/fancy/monochrome/New()
|
||||
. = ..()
|
||||
icon = 'icons/obj/smooth_structures/fancy_table_monochrome.dmi'
|
||||
|
||||
/obj/structure/table/wood/fancy/black/New()
|
||||
. = ..()
|
||||
// Ditto above.
|
||||
icon = 'icons/obj/smooth_structures/fancy_table_black.dmi'
|
||||
|
||||
/*
|
||||
* Reinforced tables
|
||||
*/
|
||||
|
||||
@@ -13,6 +13,15 @@
|
||||
if(wet)
|
||||
AddComponent(/datum/component/wet_floor, wet, INFINITY, 0, INFINITY, TRUE)
|
||||
|
||||
/turf/open/MouseDrop_T(atom/dropping, mob/user)
|
||||
. = ..()
|
||||
if(dropping == user && isliving(user))
|
||||
var/mob/living/L = user
|
||||
if(L.resting && do_after(L, max(10, L.getStaminaLoss()*0.5), 0, src))
|
||||
if(Adjacent(L, src))
|
||||
step(L, get_dir(L, src))
|
||||
playsound(L, "rustle", 25, 1)
|
||||
|
||||
/turf/open/indestructible
|
||||
name = "floor"
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
|
||||
@@ -180,8 +180,19 @@
|
||||
/turf/open/floor/carpet/black
|
||||
icon = 'icons/turf/floors/carpet_black.dmi'
|
||||
floor_tile = /obj/item/stack/tile/carpet/black
|
||||
canSmoothWith = list(/turf/open/floor/carpet/black)
|
||||
canSmoothWith = list(/turf/open/floor/carpet/black, /turf/open/floor/carpet/blackred, /turf/open/floor/carpet/monochrome)
|
||||
|
||||
/turf/open/floor/carpet/blackred
|
||||
icon = 'icons/turf/floors/carpet_blackred.dmi'
|
||||
floor_tile = /obj/item/stack/tile/carpet/blackred
|
||||
icon_state = "tile-carpet-blackred"
|
||||
canSmoothWith = list(/turf/open/floor/carpet/black, /turf/open/floor/carpet/blackred, /turf/open/floor/carpet/monochrome)
|
||||
|
||||
/turf/open/floor/carpet/monochrome
|
||||
icon = 'icons/turf/floors/carpet_monochrome.dmi'
|
||||
floor_tile = /obj/item/stack/tile/carpet/monochrome
|
||||
icon_state = "tile-carpet-monochrome"
|
||||
canSmoothWith = list(/turf/open/floor/carpet/black, /turf/open/floor/carpet/blackred, /turf/open/floor/carpet/monochrome)
|
||||
|
||||
/turf/open/floor/carpet/narsie_act(force, ignore_mobs, probability = 20)
|
||||
. = (prob(probability) || force)
|
||||
|
||||
@@ -277,7 +277,7 @@
|
||||
/datum/action/innate/cult/blood_spell/veiling
|
||||
name = "Conceal Presence"
|
||||
desc = "A multi-function spell that alternates between hiding and revealing nearby cult runes, structures, turf, and airlocks."
|
||||
invocation = "Kla'atu barada nikt'o!"
|
||||
invocation = "Kla'atu barada nikt'o."
|
||||
button_icon_state = "gone"
|
||||
charges = 10
|
||||
var/revealing = FALSE //if it reveals or not
|
||||
@@ -326,7 +326,7 @@
|
||||
/datum/action/innate/cult/blood_spell/manipulation
|
||||
name = "Blood Rites"
|
||||
desc = "A complex spell that allows you to gather blood and use it for healing or other powerful spells."
|
||||
invocation = "Fel'th Dol Ab'orod!"
|
||||
invocation = "Fel'th Dol Ab'orod."
|
||||
button_icon_state = "manip"
|
||||
charges = 5
|
||||
magic_path = "/obj/item/melee/blood_magic/manipulator"
|
||||
@@ -402,7 +402,7 @@
|
||||
/obj/item/melee/blood_magic/stun
|
||||
name = "Stunning Aura"
|
||||
color = RUNE_COLOR_RED
|
||||
invocation = "Fuu ma'jin!"
|
||||
invocation = "Fuu ma'jin."
|
||||
|
||||
/obj/item/melee/blood_magic/stun/afterattack(atom/target, mob/living/carbon/user, proximity)
|
||||
if(!isliving(target) || !proximity)
|
||||
@@ -434,6 +434,7 @@
|
||||
else
|
||||
to_chat(user, "<span class='cultitalic'>In an brilliant flash of red, [L] falls to the ground!</span>")
|
||||
L.Knockdown(160)
|
||||
L.adjustStaminaLoss(140) //Ensures hard stamcrit
|
||||
L.flash_act(1,1)
|
||||
if(issilicon(target))
|
||||
var/mob/living/silicon/S = L
|
||||
@@ -498,7 +499,7 @@
|
||||
/obj/item/melee/blood_magic/shackles
|
||||
name = "Binding Aura"
|
||||
desc = "Allows you to bind a victim and temporarily silence them."
|
||||
invocation = "In'totum Lig'abis!"
|
||||
invocation = "In'totum Lig'abis."
|
||||
color = "#000000" // black
|
||||
|
||||
/obj/item/melee/blood_magic/shackles/afterattack(atom/target, mob/living/carbon/user, proximity)
|
||||
@@ -548,7 +549,7 @@
|
||||
/obj/item/melee/blood_magic/construction
|
||||
name = "Corrupting Aura"
|
||||
desc = "Corrupts metal and plasteel into more sinister forms."
|
||||
invocation = "Ethra p'ni dedol!"
|
||||
invocation = "Ethra p'ni dedol."
|
||||
color = "#000000" // black
|
||||
|
||||
/obj/item/melee/blood_magic/construction/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
|
||||
@@ -133,6 +133,9 @@
|
||||
H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
|
||||
H.remove_trait(CULT_EYES)
|
||||
H.update_body()
|
||||
H.cut_overlays()
|
||||
H.regenerate_icons()
|
||||
|
||||
/datum/antagonist/cult/on_removal()
|
||||
SSticker.mode.cult -= owner
|
||||
SSticker.mode.update_cult_icons_removed(owner)
|
||||
@@ -206,6 +209,7 @@
|
||||
cult_team.rise(current)
|
||||
if(cult_team.cult_ascendent)
|
||||
cult_team.ascend(current)
|
||||
|
||||
/datum/antagonist/cult/master/remove_innate_effects(mob/living/mob_override)
|
||||
. = ..()
|
||||
var/mob/living/current = owner.current
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
var/my_message
|
||||
if(!message)
|
||||
return
|
||||
user.whisper("O bidai nabora se[pick("'","`")]sma!", language = /datum/language/common)
|
||||
user.whisper("O bidai nabora se[pick("'","`")]sma.", language = /datum/language/common)
|
||||
user.whisper(html_decode(message))
|
||||
var/title = "Acolyte"
|
||||
var/span = "cult italic"
|
||||
|
||||
@@ -25,7 +25,7 @@ Runes can either be invoked by one's self or with many different cultists. Each
|
||||
layer = LOW_OBJ_LAYER
|
||||
color = RUNE_COLOR_RED
|
||||
|
||||
var/invocation = "Aiy ele-mayo!" //This is said by cultists when the rune is invoked.
|
||||
var/invocation = "Aiy ele-mayo." //This is said by cultists when the rune is invoked.
|
||||
var/req_cultists = 1 //The amount of cultists required around the rune to invoke it. If only 1, any cultist can invoke it.
|
||||
var/req_cultists_text //if we have a description override for required cultists to invoke
|
||||
var/rune_in_use = FALSE // Used for some runes, this is for when you want a rune to not be usable when in use.
|
||||
@@ -163,7 +163,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/malformed
|
||||
cultist_name = "malformed rune"
|
||||
cultist_desc = "a senseless rune written in gibberish. No good can come from invoking this."
|
||||
invocation = "Ra'sha yoka!"
|
||||
invocation = "Ra'sha yoka."
|
||||
invoke_damage = 30
|
||||
|
||||
/obj/effect/rune/malformed/Initialize(mapload, set_keyword)
|
||||
@@ -180,7 +180,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
cultist_name = "Offer"
|
||||
cultist_desc = "offers a noncultist above it to Nar'Sie, either converting them or sacrificing them."
|
||||
req_cultists_text = "2 for conversion, 3 for living sacrifices and sacrifice targets."
|
||||
invocation = "Mah'weyh pleggh at e'ntrath!"
|
||||
invocation = "Mah'weyh pleggh at e'ntrath."
|
||||
icon_state = "3"
|
||||
color = RUNE_COLOR_OFFER
|
||||
req_cultists = 1
|
||||
@@ -213,7 +213,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
var/datum/team/cult/Cult_team = C.cult_team
|
||||
var/is_convertable = is_convertable_to_cult(L,C.cult_team)
|
||||
if(L.stat != DEAD && (is_clock || is_convertable))
|
||||
invocation = "Mah'weyh pleggh at e'ntrath!"
|
||||
invocation = "Mah'weyh pleggh at e'ntrath."
|
||||
..()
|
||||
if(is_clock)
|
||||
L.visible_message("<span class='warning'>[L]'s eyes glow a defiant yellow!</span>", \
|
||||
@@ -223,7 +223,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
else if(is_convertable)
|
||||
do_convert(L, invokers)
|
||||
else
|
||||
invocation = "Barhah hra zar'garis!"
|
||||
invocation = "Barhah hra zar'garis."
|
||||
..()
|
||||
do_sacrifice(L, invokers)
|
||||
animate(src, color = oldcolor, time = 5)
|
||||
@@ -318,7 +318,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/empower
|
||||
cultist_name = "Empower"
|
||||
cultist_desc = "allows cultists to prepare greater amounts of blood magic at far less of a cost."
|
||||
invocation = "H'drak v'loso, mir'kanas verbot!"
|
||||
invocation = "H'drak v'loso, mir'kanas verbot."
|
||||
icon_state = "3"
|
||||
color = RUNE_COLOR_TALISMAN
|
||||
construct_invoke = FALSE
|
||||
@@ -332,7 +332,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/teleport
|
||||
cultist_name = "Teleport"
|
||||
cultist_desc = "warps everything above it to another chosen teleport rune."
|
||||
invocation = "Sas'so c'arta forbici!"
|
||||
invocation = "Sas'so c'arta forbici."
|
||||
icon_state = "2"
|
||||
color = RUNE_COLOR_TELEPORT
|
||||
req_keyword = TRUE
|
||||
@@ -509,7 +509,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/raise_dead
|
||||
cultist_name = "Revive"
|
||||
cultist_desc = "requires a dead, mindless, or inactive cultist placed upon the rune. Provided there have been sufficient sacrifices, they will be given a new life."
|
||||
invocation = "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!" //Depends on the name of the user - see below
|
||||
invocation = "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat." //Depends on the name of the user - see below
|
||||
icon_state = "1"
|
||||
color = RUNE_COLOR_MEDIUMRED
|
||||
var/static/revives_used = -SOULS_TO_REVIVE // Cultists get one "free" revive
|
||||
@@ -544,7 +544,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
fail_invoke()
|
||||
return
|
||||
if(user.name == "Herbert West")
|
||||
invocation = "To life, to life, I bring them!"
|
||||
invocation = "To life, to life, I bring them."
|
||||
else
|
||||
invocation = initial(invocation)
|
||||
..()
|
||||
@@ -600,7 +600,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/wall
|
||||
cultist_name = "Barrier"
|
||||
cultist_desc = "when invoked, makes a temporary invisible wall to block passage. Can be invoked again to reverse this."
|
||||
invocation = "Khari'd! Eske'te tannin!"
|
||||
invocation = "Khari'd. Eske'te tannin."
|
||||
icon_state = "4"
|
||||
color = RUNE_COLOR_DARKRED
|
||||
CanAtmosPass = ATMOS_PASS_DENSITY
|
||||
@@ -682,7 +682,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/summon
|
||||
cultist_name = "Summon Cultist"
|
||||
cultist_desc = "summons a single cultist to the rune. Requires 2 invokers."
|
||||
invocation = "N'ath reth sh'yro eth d'rekkathnor!"
|
||||
invocation = "N'ath reth sh'yro eth d'rekkathnor."
|
||||
req_cultists = 2
|
||||
invoke_damage = 10
|
||||
icon_state = "3"
|
||||
@@ -733,7 +733,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/blood_boil
|
||||
cultist_name = "Boil Blood"
|
||||
cultist_desc = "boils the blood of non-believers who can see the rune, rapidly dealing extreme amounts of damage. Requires 3 invokers."
|
||||
invocation = "Dedo ol'btoh!"
|
||||
invocation = "Dedo ol'btoh."
|
||||
icon_state = "4"
|
||||
color = RUNE_COLOR_BURNTORANGE
|
||||
light_color = LIGHT_COLOR_LAVA
|
||||
@@ -797,7 +797,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/manifest
|
||||
cultist_name = "Spirit Realm"
|
||||
cultist_desc = "manifests a spirit servant of the Geometer and allows you to ascend as a spirit yourself. The invoker must not move from atop the rune, and will take damage for each summoned spirit."
|
||||
invocation = "Gal'h'rfikk harfrandid mud'gib!" //how the fuck do you pronounce this
|
||||
invocation = "Gal'h'rfikk harfrandid mud'gib." //how the fuck do you pronounce this
|
||||
icon_state = "7"
|
||||
invoke_damage = 10
|
||||
construct_invoke = FALSE
|
||||
@@ -924,7 +924,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/apocalypse
|
||||
cultist_name = "Apocalypse"
|
||||
cultist_desc = "a harbinger of the end times. Grows in strength with the cult's desperation - but at the risk of... side effects."
|
||||
invocation = "Ta'gh fara'qha fel d'amar det!"
|
||||
invocation = "Ta'gh fara'qha fel d'amar det."
|
||||
icon = 'icons/effects/96x96.dmi'
|
||||
icon_state = "apoc"
|
||||
pixel_x = -32
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#define CHALLENGE_TELECRYSTALS 280
|
||||
#define PLAYER_SCALING 1.5
|
||||
#define CHALLENGE_TIME_LIMIT 3000
|
||||
#define CHALLENGE_MIN_PLAYERS 50
|
||||
#define CHALLENGE_SHUTTLE_DELAY 15000 // 25 minutes, so the ops have at least 5 minutes before the shuttle is callable.
|
||||
@@ -61,7 +62,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec)
|
||||
for(var/obj/machinery/computer/camera_advanced/shuttle_docker/D in GLOB.jam_on_wardec)
|
||||
D.jammed = TRUE
|
||||
|
||||
new uplink_type(get_turf(user), user.key, CHALLENGE_TELECRYSTALS)
|
||||
new uplink_type(get_turf(user), user.key, CHALLENGE_TELECRYSTALS + CEILING(PLAYER_SCALING * GLOB.player_list.len, 1))
|
||||
CONFIG_SET(number/shuttle_refuel_delay, max(CONFIG_GET(number/shuttle_refuel_delay), CHALLENGE_SHUTTLE_DELAY))
|
||||
SSblackbox.record_feedback("amount", "nuclear_challenge_mode", 1)
|
||||
|
||||
|
||||
@@ -208,7 +208,7 @@
|
||||
name = "Lone Operative"
|
||||
always_new_team = TRUE
|
||||
send_to_spawnpoint = FALSE //Handled by event
|
||||
nukeop_outfit = /datum/outfit/syndicate/full
|
||||
nukeop_outfit = /datum/outfit/syndicate/lone
|
||||
|
||||
/datum/antagonist/nukeop/lone/assign_nuke()
|
||||
if(nuke_team && !nuke_team.tracked_nuke)
|
||||
|
||||
@@ -202,10 +202,10 @@
|
||||
/datum/antagonist/rev/farewell()
|
||||
if(ishuman(owner.current))
|
||||
owner.current.visible_message("<span class='deconversion_message'>[owner.current] looks like [owner.current.p_theyve()] just remembered [owner.current.p_their()] real allegiance!</span>", null, null, null, owner.current)
|
||||
to_chat(owner, "<span class='userdanger'>You are no longer a brainwashed revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you...</span>")
|
||||
to_chat(owner, "<span class='userdanger'>You are no longer a brainwashed revolutionary! Your memory is hazy from the time you were a rebel... You don't seem to be able to recall the names of your comrades, not even your leaders...</span>")
|
||||
else if(issilicon(owner.current))
|
||||
owner.current.visible_message("<span class='deconversion_message'>The frame beeps contentedly, purging the hostile memory engram from the MMI before initalizing it.</span>", null, null, null, owner.current)
|
||||
to_chat(owner, "<span class='userdanger'>The frame's firmware detects and deletes your neural reprogramming! You remember nothing but the name of the one who flashed you.</span>")
|
||||
to_chat(owner, "<span class='userdanger'>The frame's firmware detects and deletes your neural reprogramming! You remember nothing of your time spent reprogrammed, you can't even remember the names or identities of anyone involved...</span>")
|
||||
|
||||
//blunt trauma deconversions call this through species.dm spec_attacked_by()
|
||||
/datum/antagonist/rev/proc/remove_revolutionary(borged, deconverter)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
mob_type = /mob/living/simple_animal/hostile/swarmer
|
||||
mob_name = "a swarmer"
|
||||
job_description = "Swarmer"
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
flavour_text = {"
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
active_hotspot = new /obj/effect/hotspot(src)
|
||||
active_hotspot.temperature = exposed_temperature
|
||||
active_hotspot.volume = exposed_volume
|
||||
active_hotspot.volume = exposed_volume*25
|
||||
|
||||
active_hotspot.just_spawned = (current_cycle < SSair.times_fired)
|
||||
//remove just_spawned protection if no longer processing this cell
|
||||
@@ -139,7 +139,7 @@
|
||||
add_overlay(lightning_overlay)
|
||||
if(temperature > 4500000) //This is where noblium happens. Some fusion-y effects.
|
||||
var/fusion_amt = temperature < LERP(4500000,12000000,0.5) ? gauss_lerp(temperature, 4500000, 12000000) : 1
|
||||
var/mutable_appearance/fusion_overlay = mutable_appearance('icons/effects/tile_effects.dmi', "chem_gas")
|
||||
var/mutable_appearance/fusion_overlay = mutable_appearance('icons/effects/atmospherics.dmi', "fusion_gas")
|
||||
fusion_overlay.blend_mode = BLEND_ADD
|
||||
fusion_overlay.alpha = fusion_amt * 255
|
||||
var/mutable_appearance/rainbow_overlay = mutable_appearance('icons/mob/screen_gen.dmi', "druggy")
|
||||
|
||||
@@ -113,17 +113,18 @@
|
||||
|
||||
/turf/open/proc/tile_graphic()
|
||||
var/static/list/nonoverlaying_gases = typecache_of_gases_with_no_overlays()
|
||||
if(air)
|
||||
. = new /list
|
||||
var/list/gases = air.gases
|
||||
for(var/id in gases)
|
||||
if (nonoverlaying_gases[id])
|
||||
continue
|
||||
var/gas = gases[id]
|
||||
var/gas_meta = gas[GAS_META]
|
||||
var/gas_overlay = gas_meta[META_GAS_OVERLAY]
|
||||
if(gas_overlay && gas[MOLES] > gas_meta[META_GAS_MOLES_VISIBLE])
|
||||
. += gas_overlay
|
||||
if(!air)
|
||||
return
|
||||
. = new /list
|
||||
var/list/gases = air.gases
|
||||
for(var/id in gases)
|
||||
if (nonoverlaying_gases[id])
|
||||
continue
|
||||
var/gas = gases[id]
|
||||
var/gas_meta = gas[GAS_META]
|
||||
var/gas_overlay = gas_meta[META_GAS_OVERLAY]
|
||||
if(gas_overlay && gas[MOLES] > gas_meta[META_GAS_MOLES_VISIBLE])
|
||||
. += gas_overlay[min(FACTOR_GAS_VISIBLE_MAX, CEILING(gas[MOLES] / MOLES_GAS_VISIBLE_STEP, 1))]
|
||||
|
||||
/proc/typecache_of_gases_with_no_overlays()
|
||||
. = list()
|
||||
|
||||
@@ -86,13 +86,6 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
|
||||
if(!.)
|
||||
. += HEAT_CAPACITY_VACUUM //we want vacuums in turfs to have the same heat capacity as space
|
||||
|
||||
//prefer this in performance critical areas
|
||||
#define TOTAL_MOLES(cached_gases, out_var)\
|
||||
out_var = 0;\
|
||||
for(var/total_moles_id in cached_gases){\
|
||||
out_var += cached_gases[total_moles_id][MOLES];\
|
||||
}
|
||||
|
||||
/datum/gas_mixture/proc/total_moles()
|
||||
var/cached_gases = gases
|
||||
TOTAL_MOLES(cached_gases, .)
|
||||
|
||||
@@ -11,7 +11,9 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
|
||||
gas_info[META_GAS_NAME] = initial(gas.name)
|
||||
gas_info[META_GAS_MOLES_VISIBLE] = initial(gas.moles_visible)
|
||||
if(initial(gas.moles_visible) != null)
|
||||
gas_info[META_GAS_OVERLAY] = new /obj/effect/overlay/gas(initial(gas.gas_overlay))
|
||||
gas_info[META_GAS_OVERLAY] = new /list(FACTOR_GAS_VISIBLE_MAX)
|
||||
for(var/i in 1 to FACTOR_GAS_VISIBLE_MAX)
|
||||
gas_info[META_GAS_OVERLAY][i] = new /obj/effect/overlay/gas(initial(gas.gas_overlay), i * 255 / FACTOR_GAS_VISIBLE_MAX)
|
||||
gas_info[META_GAS_FUSION_POWER] = initial(gas.fusion_power)
|
||||
gas_info[META_GAS_DANGER] = initial(gas.dangerous)
|
||||
gas_info[META_GAS_ID] = initial(gas.id)
|
||||
@@ -39,7 +41,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
|
||||
var/id = ""
|
||||
var/specific_heat = 0
|
||||
var/name = ""
|
||||
var/gas_overlay = "" //icon_state in icons/effects/tile_effects.dmi
|
||||
var/gas_overlay = "" //icon_state in icons/effects/atmospherics.dmi
|
||||
var/moles_visible = null
|
||||
var/dangerous = FALSE //currently used by canisters
|
||||
var/fusion_power = 0 //How much the gas accelerates a fusion reaction
|
||||
@@ -89,7 +91,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
|
||||
specific_heat = 40
|
||||
name = "Nitrous Oxide"
|
||||
gas_overlay = "nitrous_oxide"
|
||||
moles_visible = 1
|
||||
moles_visible = MOLES_GAS_VISIBLE * 2
|
||||
dangerous = TRUE
|
||||
|
||||
/datum/gas/nitryl
|
||||
@@ -131,18 +133,20 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
|
||||
|
||||
/datum/gas/miasma
|
||||
id = "miasma"
|
||||
specific_heat = 20
|
||||
specific_heat = 0.00001
|
||||
fusion_power = 50
|
||||
name = "Miasma"
|
||||
gas_overlay = "miasma"
|
||||
moles_visible = MOLES_GAS_VISIBLE * 60
|
||||
|
||||
/obj/effect/overlay/gas
|
||||
icon = 'icons/effects/tile_effects.dmi'
|
||||
icon = 'icons/effects/atmospherics.dmi'
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
anchored = TRUE // should only appear in vis_contents, but to be safe
|
||||
layer = FLY_LAYER
|
||||
appearance_flags = TILE_BOUND
|
||||
|
||||
/obj/effect/overlay/gas/New(state)
|
||||
/obj/effect/overlay/gas/New(state, alph)
|
||||
. = ..()
|
||||
icon_state = state
|
||||
alpha = alph
|
||||
|
||||
@@ -650,7 +650,7 @@
|
||||
if(0)
|
||||
add_overlay(AALARM_OVERLAY_GREEN)
|
||||
overlay_state = AALARM_OVERLAY_GREEN
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
light_color = LIGHT_COLOR_BLUEGREEN
|
||||
set_light(brightness_on)
|
||||
if(1)
|
||||
add_overlay(AALARM_OVERLAY_WARN)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
name = "Unknown"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
var/job_description = null
|
||||
var/mob_type = null
|
||||
var/mob_name = ""
|
||||
var/mob_gender = null
|
||||
@@ -29,7 +30,7 @@
|
||||
var/ghost_usable = TRUE
|
||||
|
||||
//ATTACK GHOST IGNORING PARENT RETURN VALUE
|
||||
/obj/effect/mob_spawn/attack_ghost(mob/user)
|
||||
/obj/effect/mob_spawn/attack_ghost(mob/user, latejoinercalling)
|
||||
if(!SSticker.HasRoundStarted() || !loc || !ghost_usable)
|
||||
return
|
||||
if(!uses)
|
||||
@@ -40,11 +41,19 @@
|
||||
return
|
||||
if(QDELETED(src) || QDELETED(user))
|
||||
return
|
||||
var/ghost_role = alert("Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No")
|
||||
var/ghost_role = alert(latejoinercalling ? "Latejoin as [mob_name]? (This is a ghost role, and as such, it's very likely to be off-station.)" : "Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No")
|
||||
if(ghost_role == "No" || !loc)
|
||||
return
|
||||
if(QDELETED(src) || QDELETED(user))
|
||||
return
|
||||
if(latejoinercalling)
|
||||
var/mob/dead/new_player/NP = user
|
||||
if(istype(NP))
|
||||
NP.close_spawn_windows()
|
||||
NP.stop_sound_channel(CHANNEL_LOBBYMUSIC)
|
||||
log_game("[key_name(user)] became [mob_name]")
|
||||
create(ckey = user.ckey)
|
||||
return TRUE
|
||||
|
||||
/obj/effect/mob_spawn/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -52,14 +61,13 @@
|
||||
create()
|
||||
else if(ghost_usable)
|
||||
GLOB.poi_list |= src
|
||||
LAZYADD(GLOB.mob_spawners[name], src)
|
||||
LAZYADD(GLOB.mob_spawners[job_description ? job_description : name], src)
|
||||
|
||||
/obj/effect/mob_spawn/Destroy()
|
||||
GLOB.poi_list -= src
|
||||
var/list/spawners = GLOB.mob_spawners[name]
|
||||
LAZYREMOVE(spawners, src)
|
||||
if(!LAZYLEN(spawners))
|
||||
GLOB.mob_spawners -= name
|
||||
LAZYREMOVE(GLOB.mob_spawners[job_description ? job_description : name], src)
|
||||
if(!LAZYLEN(GLOB.mob_spawners[job_description ? job_description : name]))
|
||||
GLOB.mob_spawners -= job_description ? job_description : name
|
||||
return ..()
|
||||
|
||||
/obj/effect/mob_spawn/proc/special(mob/M)
|
||||
@@ -262,6 +270,7 @@
|
||||
mob_type = /mob/living/simple_animal/mouse
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
job_description = "Mouse"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
|
||||
@@ -270,6 +279,7 @@
|
||||
mob_type = /mob/living/simple_animal/cow
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
job_description = "Cow"
|
||||
mob_gender = FEMALE
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
@@ -314,6 +324,7 @@
|
||||
icon_state = "sleeper"
|
||||
flavour_text = "<span class='big bold'>You are a space doctor!</span>"
|
||||
assignedrole = "Space Doctor"
|
||||
job_description = "Off-station Doctor"
|
||||
|
||||
/obj/effect/mob_spawn/human/doctor/alive/equip(mob/living/carbon/human/H)
|
||||
..()
|
||||
@@ -364,6 +375,7 @@
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
random = TRUE
|
||||
job_description = "Off-station Bartender"
|
||||
name = "bartender sleeper"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
@@ -387,6 +399,7 @@
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
random = TRUE
|
||||
job_description = "Beach Biodome Bum"
|
||||
mob_name = "Beach Bum"
|
||||
name = "beach bum sleeper"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
@@ -399,6 +412,7 @@
|
||||
mob_gender = "female"
|
||||
name = "lifeguard sleeper"
|
||||
id_job = "Lifeguard"
|
||||
job_description = "Beach Biodome Lifeguard"
|
||||
uniform = /obj/item/clothing/under/shorts/red
|
||||
|
||||
/datum/outfit/beachbum
|
||||
@@ -474,6 +488,7 @@
|
||||
/obj/effect/mob_spawn/human/commander/alive
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
job_description = "Nanotrasen Commander"
|
||||
mob_name = "Nanotrasen Commander"
|
||||
name = "sleeper"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
@@ -484,6 +499,7 @@
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
mob_name = "Private Security Officer"
|
||||
job_description = "Nanotrasen Security"
|
||||
name = "sleeper"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
@@ -502,6 +518,7 @@
|
||||
/obj/effect/mob_spawn/human/skeleton/alive
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
job_description = "Skeleton"
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "remains"
|
||||
flavour_text = "<span class='big bold'>By unknown powers, your skeletal remains have been reanimated!</span><b> Walk this mortal plain and terrorize all living adventurers who dare cross your path.</b>"
|
||||
@@ -516,6 +533,7 @@
|
||||
/obj/effect/mob_spawn/human/zombie/alive
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
job_description = "Zombie"
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "remains"
|
||||
flavour_text = "<span class='big bold'>By unknown powers, your rotting remains have been resurrected!</span><b> Walk this mortal plain and terrorize all living adventurers who dare cross your path.</b>"
|
||||
@@ -542,6 +560,7 @@
|
||||
uses = -1
|
||||
outfit = /datum/outfit/spacebartender
|
||||
assignedrole = "Space Bar Patron"
|
||||
job_description = "Space Bar Patron"
|
||||
|
||||
//ATTACK HAND IGNORING PARENT RETURN VALUE
|
||||
/obj/effect/mob_spawn/human/alive/space_bar_patron/attack_hand(mob/user)
|
||||
|
||||
@@ -589,6 +589,7 @@
|
||||
icon_state = "sleeper"
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
job_description = "Syndicate Snow Operative"
|
||||
faction = ROLE_SYNDICATE
|
||||
outfit = /datum/outfit/snowsyndie
|
||||
flavour_text = "<span class='big bold'>You are a syndicate operative recently awoken from cryostasis in an underground outpost. Monitor Nanotrasen communications and record information. All intruders should be \
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
/datum/buildmode_mode/advanced/show_help(client/c)
|
||||
to_chat(c, "<span class='notice'>***********************************************************</span>")
|
||||
to_chat(c, "<span class='notice'>Right Mouse Button on buildmode button = Set object type</span>")
|
||||
to_chat(c, "<span class='notice'>Left Mouse Button + alt on turf/obj = Copy object type")
|
||||
to_chat(c, "<span class='notice'>Left Mouse Button on turf/obj = Place objects</span>")
|
||||
to_chat(c, "<span class='notice'>Right Mouse Button = Delete objects</span>")
|
||||
to_chat(c, "")
|
||||
@@ -32,7 +33,15 @@
|
||||
var/list/pa = params2list(params)
|
||||
var/left_click = pa.Find("left")
|
||||
var/right_click = pa.Find("right")
|
||||
if(left_click)
|
||||
var/alt_click = pa.Find("alt")
|
||||
|
||||
if(left_click && alt_click)
|
||||
if (istype(object, /turf) || istype(object, /obj) || istype(object, /mob))
|
||||
objholder = object.type
|
||||
to_chat(c, "<span class='notice'>[initial(object.name)] ([object.type]) selected.</span>")
|
||||
else
|
||||
to_chat(c, "<span class='notice'>[initial(object.name)] is not a turf, object, or mob! Please select again.</span>")
|
||||
else if(left_click)
|
||||
if(ispath(objholder,/turf))
|
||||
var/turf/T = get_turf(object)
|
||||
log_admin("Build Mode: [key_name(c)] modified [T] in [AREACOORD(object)] to [objholder]")
|
||||
@@ -47,4 +56,3 @@
|
||||
if(isobj(object))
|
||||
log_admin("Build Mode: [key_name(c)] deleted [object] at [AREACOORD(object)]")
|
||||
qdel(object)
|
||||
|
||||
+324
-99
@@ -81,6 +81,21 @@
|
||||
crate_name = "emergency crate"
|
||||
crate_type = /obj/structure/closet/crate/internals
|
||||
|
||||
/datum/supply_pack/emergency/soft_suit
|
||||
name = "Emergency Space Suit "
|
||||
desc = "Is there bombs going off left and right? Is there meteors shooting around the station? Well we have two fragile space suit for emergencys as well as air and masks."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/tank/internals/air,
|
||||
/obj/item/tank/internals/air,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/suit/space/fragile,
|
||||
/obj/item/clothing/suit/space/fragile,
|
||||
/obj/item/clothing/head/helmet/space/fragile,
|
||||
/obj/item/clothing/head/helmet/space/fragile)
|
||||
crate_name = "emergency crate"
|
||||
crate_type = /obj/structure/closet/crate/internals
|
||||
|
||||
/datum/supply_pack/emergency/firefighting
|
||||
name = "Firefighting Crate"
|
||||
desc = "Only you can prevent station fires. Partner up with two firefighter suits, gas masks, flashlights, large oxygen tanks, extinguishers, and hardhats!"
|
||||
@@ -129,9 +144,10 @@
|
||||
|
||||
/datum/supply_pack/emergency/metalfoam
|
||||
name = "Metal Foam Grenade Crate"
|
||||
desc = "Seal up those pesky hull breaches with 7 Metal Foam Grenades."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/storage/box/metalfoam)
|
||||
desc = "Seal up those pesky hull breaches with 14 Metal Foam Grenades."
|
||||
cost = 2000
|
||||
contains = list(/obj/item/storage/box/metalfoam,
|
||||
/obj/item/storage/box/metalfoam)
|
||||
crate_name = "metal foam grenade crate"
|
||||
|
||||
/datum/supply_pack/emergency/syndicate
|
||||
@@ -228,13 +244,15 @@
|
||||
|
||||
/datum/supply_pack/emergency/weedcontrol
|
||||
name = "Weed Control Crate"
|
||||
desc = "Keep those invasive species OUT. Contains a scythe, gasmask, and two anti-weed chemical grenades. Warranty void if used on ambrosia. Requires Hydroponics access to open."
|
||||
desc = "Keep those invasive species OUT. Contains a scythe, gasmask, two sprays of Plant-B-Gone, and two anti-weed chemical grenades. Warranty void if used on ambrosia. Requires Hydroponics access to open."
|
||||
cost = 1500
|
||||
access = ACCESS_HYDROPONICS
|
||||
contains = list(/obj/item/scythe,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/grenade/chem_grenade/antiweed,
|
||||
/obj/item/grenade/chem_grenade/antiweed)
|
||||
/obj/item/grenade/chem_grenade/antiweed,
|
||||
/obj/item/reagent_containers/spray/plantbgone,
|
||||
/obj/item/reagent_containers/spray/plantbgone)
|
||||
crate_name = "weed control crate"
|
||||
crate_type = /obj/structure/closet/crate/secure/hydroponics
|
||||
|
||||
@@ -277,6 +295,15 @@
|
||||
/obj/item/clothing/head/fedora/det_hat)
|
||||
crate_name = "forensics crate"
|
||||
|
||||
/datum/supply_pack/security/sechardsuit
|
||||
name = "Sec Hardsuit"
|
||||
desc = "One Sec Hardsuit with a small air tank and mask."
|
||||
cost = 3000 // half of SWAT gear for have the armor and half the gear
|
||||
contains = list(/obj/item/clothing/suit/space/hardsuit/security,
|
||||
/obj/item/tank/internals/air,
|
||||
/obj/item/clothing/mask/gas)
|
||||
crate_name = "sec hardsuit crate"
|
||||
|
||||
/datum/supply_pack/security/helmets
|
||||
name = "Helmets Crate"
|
||||
desc = "Contains three standard-issue brain buckets. Requires Security access to open."
|
||||
@@ -396,6 +423,22 @@
|
||||
/obj/item/clothing/suit/armor/bulletproof)
|
||||
crate_name = "bulletproof armor crate"
|
||||
|
||||
/datum/supply_pack/security/armory/bullethelmets
|
||||
name = "Bulletproof Helmet Crate"
|
||||
desc = "Contains three sets of bulletproof helmets. Guaranteed to reduce a bullet's stopping power by over half. Requires Armory access to open."
|
||||
cost = 1500
|
||||
contains = list(/obj/item/clothing/head/helmet/alt,
|
||||
/obj/item/clothing/head/helmet/alt,
|
||||
/obj/item/clothing/head/helmet/alt)
|
||||
crate_name = "bulletproof helmet crate"
|
||||
|
||||
/datum/supply_pack/security/armory/chemimp
|
||||
name = "Chemical Implants Crate"
|
||||
desc = "Contains five Remote Chemical implants. Requires Armory access to open."
|
||||
cost = 2000
|
||||
contains = list(/obj/item/storage/box/chemimp)
|
||||
crate_name = "chemical implant crate"
|
||||
|
||||
/datum/supply_pack/security/armory/combatknives
|
||||
name = "Combat Knives Crate"
|
||||
desc = "Contains three sharpened combat knives. Each knife guaranteed to fit snugly inside any Nanotrasen-standard boot. Requires Armory access to open."
|
||||
@@ -419,24 +462,18 @@
|
||||
|
||||
/datum/supply_pack/security/armory/energy
|
||||
name = "Energy Guns Crate"
|
||||
desc = "Contains two Energy Guns, capable of firing both nonlethal and lethal blasts of light. Requires Armory access to open."
|
||||
cost = 2500
|
||||
desc = "Contains three Energy Guns, capable of firing both nonlethal and lethal blasts of light. Requires Armory access to open."
|
||||
cost = 3500
|
||||
contains = list(/obj/item/gun/energy/e_gun,
|
||||
/obj/item/gun/energy/e_gun,
|
||||
/obj/item/gun/energy/e_gun)
|
||||
crate_name = "energy gun crate"
|
||||
crate_type = /obj/structure/closet/crate/secure/plasma
|
||||
|
||||
/datum/supply_pack/security/armory/chemimp
|
||||
name = "Chemical Implants Crate"
|
||||
desc = "Contains five Remote Chemical implants. Requires Armory access to open."
|
||||
cost = 2000
|
||||
contains = list(/obj/item/storage/box/chemimp)
|
||||
crate_name = "chemical implant crate"
|
||||
|
||||
/datum/supply_pack/security/armory/exileimp
|
||||
/datum/supply_pack/security/armory/exileimp // Theres boxes in 2 lockers as well as gateway never realy being used sad
|
||||
name = "Exile Implants Crate"
|
||||
desc = "Contains five Exile implants. Requires Armory access to open."
|
||||
cost = 3000
|
||||
cost = 1000
|
||||
contains = list(/obj/item/storage/box/exileimp)
|
||||
crate_name = "exile implant crate"
|
||||
|
||||
@@ -450,7 +487,7 @@
|
||||
/datum/supply_pack/security/armory/trackingimp
|
||||
name = "Tracking Implants Crate"
|
||||
desc = "Contains four tracking implants. Requires Armory access to open."
|
||||
cost = 2000
|
||||
cost = 1000
|
||||
contains = list(/obj/item/storage/box/trackimp)
|
||||
crate_name = "tracking implant crate"
|
||||
|
||||
@@ -506,6 +543,15 @@
|
||||
/obj/item/shield/riot)
|
||||
crate_name = "riot shields crate"
|
||||
|
||||
/datum/supply_pack/security/armory/riotshotguns
|
||||
name = "Riot Shotgun Crate"
|
||||
desc = "For when the greytide gets really uppity. Contains three riot Shotguns. Requires Armory access to open."
|
||||
cost = 6000
|
||||
contains = list(/obj/item/gun/ballistic/shotgun/riot,
|
||||
/obj/item/gun/ballistic/shotgun/riot,
|
||||
/obj/item/gun/ballistic/shotgun/riot)
|
||||
crate_name = "riot shotgun crate"
|
||||
|
||||
/datum/supply_pack/security/armory/swat
|
||||
name = "SWAT Crate"
|
||||
desc = "Contains two fullbody sets of tough, fireproof, pressurized suits designed in a joint effort by IS-ERI and Nanotrasen. Each set contains a suit, helmet, mask, combat belt, and combat gloves. Requires Armory access to open."
|
||||
@@ -534,13 +580,32 @@
|
||||
/datum/supply_pack/security/armory/wt550ammo
|
||||
name = "WT-550 Auto Rifle Ammo Crate"
|
||||
desc = "Contains four 20-round magazines for the WT-550 Auto Rifle. Each magazine is designed to facilitate rapid tactical reloads. Requires Armory access to open."
|
||||
cost = 3000
|
||||
cost = 2500
|
||||
contains = list(/obj/item/ammo_box/magazine/wt550m9,
|
||||
/obj/item/ammo_box/magazine/wt550m9,
|
||||
/obj/item/ammo_box/magazine/wt550m9,
|
||||
/obj/item/ammo_box/magazine/wt550m9)
|
||||
crate_name = "auto rifle ammo crate"
|
||||
|
||||
/datum/supply_pack/security/armory/wt550ammo_nonlethal // Takes around 11 shots to stun crit someone
|
||||
name = "WT-550 Auto Rifle Non-Lethal Ammo Crate"
|
||||
desc = "Contains four 20-round magazines for the WT-550 Auto Rifle. Each magazine is designed to facilitate rapid tactical reloads. Requires Armory access to open."
|
||||
cost = 1500
|
||||
contains = list(/obj/item/ammo_box/magazine/wt550m9/wtrubber,
|
||||
/obj/item/ammo_box/magazine/wt550m9/wtrubber,
|
||||
/obj/item/ammo_box/magazine/wt550m9/wtrubber,
|
||||
/obj/item/ammo_box/magazine/wt550m9/wtrubber)
|
||||
crate_name = "auto rifle ammo crate"
|
||||
|
||||
/datum/supply_pack/security/armory/wt550ammo_special
|
||||
name = "WT-550 Auto Rifle Special Ammo Crate"
|
||||
desc = "Contains 2 20-round Armour Piercing and Incendiary magazines for the WT-550 Auto Rifle. Each magazine is designed to facilitate rapid tactical reloads. Requires Armory access to open."
|
||||
cost = 4500
|
||||
contains = list(/obj/item/ammo_box/magazine/wt550m9/wtap,
|
||||
/obj/item/ammo_box/magazine/wt550m9/wtap,
|
||||
/obj/item/ammo_box/magazine/wt550m9/wtic,
|
||||
/obj/item/ammo_box/magazine/wt550m9/wtic)
|
||||
crate_name = "auto rifle ammo crate"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////// Engineering /////////////////////////////////////
|
||||
@@ -561,7 +626,7 @@
|
||||
/datum/supply_pack/engineering/conveyor
|
||||
name = "Conveyor Assembly Crate"
|
||||
desc = "Keep production moving along with six conveyor belts. Conveyor switch included. If you have any questions, check out the enclosed instruction book."
|
||||
cost = 1500
|
||||
cost = 750
|
||||
contains = list(/obj/item/conveyor_construct,
|
||||
/obj/item/conveyor_construct,
|
||||
/obj/item/conveyor_construct,
|
||||
@@ -592,6 +657,15 @@
|
||||
/obj/item/clothing/glasses/meson/engine)
|
||||
crate_name = "engineering gear crate"
|
||||
|
||||
/datum/supply_pack/engineering/engihardsuit
|
||||
name = "Engineering Hardsuit"
|
||||
desc = "Poly 'Who stole all the hardsuits!' Well now you can get more hardsuits if needed! NOTE ONE HARDSUIT IS IN THIS CRATE, as well as one air tank and maks!"
|
||||
cost = 2500
|
||||
contains = list(/obj/item/tank/internals/air,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/suit/space/hardsuit/engine)
|
||||
crate_name = "engineering hardsuit"
|
||||
|
||||
/datum/supply_pack/engineering/powergamermitts
|
||||
name = "Insulated Gloves Crate"
|
||||
desc = "The backbone of modern society. Barely ever ordered for actual engineering. Contains three insulated gloves."
|
||||
@@ -940,7 +1014,7 @@
|
||||
/datum/supply_pack/materials/bz
|
||||
name = "BZ Canister Crate"
|
||||
desc = "Contains a canister of BZ. Requires Toxins access to open."
|
||||
cost = 4000
|
||||
cost = 5000
|
||||
access = ACCESS_TOX_STORAGE
|
||||
contains = list(/obj/machinery/portable_atmospherics/canister/bz)
|
||||
crate_name = "BZ canister crate"
|
||||
@@ -1045,47 +1119,10 @@
|
||||
/obj/item/storage/firstaid/fire)
|
||||
crate_name = "burn treatment kit crate"
|
||||
|
||||
/datum/supply_pack/medical/firstaid
|
||||
name = "First Aid Kit Crate"
|
||||
desc = "Contains four first aid kits for healing most types of wounds."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/storage/firstaid/regular,
|
||||
/obj/item/storage/firstaid/regular,
|
||||
/obj/item/storage/firstaid/regular,
|
||||
/obj/item/storage/firstaid/regular)
|
||||
crate_name = "first aid kit crate"
|
||||
|
||||
/datum/supply_pack/medical/firstaidoxygen
|
||||
name = "Oxygen Deprivation Kit Crate"
|
||||
desc = "Contains three first aid kits focused on helping oxygen deprivation victims."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/storage/firstaid/o2,
|
||||
/obj/item/storage/firstaid/o2,
|
||||
/obj/item/storage/firstaid/o2)
|
||||
crate_name = "oxygen deprivation kit crate"
|
||||
|
||||
/datum/supply_pack/medical/surgery
|
||||
name = "Surgical Supplies Crate"
|
||||
desc = "Do you want to perform surgery, but don't have one of those fancy shmancy degrees? Just get started with this crate containing a medical duffelbag, Sterilizine spray and collapsible roller bed."
|
||||
cost = 3000
|
||||
contains = list(/obj/item/storage/backpack/duffelbag/med/surgery,
|
||||
/obj/item/reagent_containers/medspray/sterilizine,
|
||||
/obj/item/roller)
|
||||
crate_name = "surgical supplies crate"
|
||||
|
||||
/datum/supply_pack/medical/firstaidtoxins
|
||||
name = "Toxin Treatment Kit Crate"
|
||||
desc = "Contains three first aid kits focused on healing damage dealt by heavy toxins."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/storage/firstaid/toxin,
|
||||
/obj/item/storage/firstaid/toxin,
|
||||
/obj/item/storage/firstaid/toxin)
|
||||
crate_name = "toxin treatment kit crate"
|
||||
|
||||
/datum/supply_pack/medical/bloodpacks
|
||||
name = "Blood Pack Variety Crate"
|
||||
desc = "Contains eight different blood packs for reintroducing blood to patients."
|
||||
cost = 3500
|
||||
cost = 3000
|
||||
contains = list(/obj/item/reagent_containers/blood,
|
||||
/obj/item/reagent_containers/blood,
|
||||
/obj/item/reagent_containers/blood/APlus,
|
||||
@@ -1106,17 +1143,36 @@
|
||||
/obj/item/defibrillator/loaded)
|
||||
crate_name = "defibrillator crate"
|
||||
|
||||
/datum/supply_pack/medical/firstaid
|
||||
name = "First Aid Kit Crate"
|
||||
desc = "Contains four first aid kits for healing most types of wounds."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/storage/firstaid/regular,
|
||||
/obj/item/storage/firstaid/regular,
|
||||
/obj/item/storage/firstaid/regular,
|
||||
/obj/item/storage/firstaid/regular)
|
||||
crate_name = "first aid kit crate"
|
||||
|
||||
/datum/supply_pack/medical/medicalhardsuit
|
||||
name = "Medical Hardsuit"
|
||||
desc = "Got people being spaced left and right? Hole in the same room as the dead body of Hos or cap? Fear not, now you can buy one medical hardsuit with a mask and air tank to save your fellow crewmembers."
|
||||
cost = 2500
|
||||
contains = list(/obj/item/tank/internals/air,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/suit/space/hardsuit/medical)
|
||||
crate_name = "medical hardsuit"
|
||||
|
||||
/datum/supply_pack/medical/iv_drip
|
||||
name = "IV Drip Crate"
|
||||
desc = "Contains a single IV drip for administering blood to patients."
|
||||
cost = 1000
|
||||
cost = 700
|
||||
contains = list(/obj/machinery/iv_drip)
|
||||
crate_name = "iv drip crate"
|
||||
|
||||
/datum/supply_pack/medical/supplies
|
||||
name = "Medical Supplies Crate"
|
||||
desc = "Contains seven beakers, syringes, and bodybags. Six morphine bottles, four insulin pills. Two charcoal bottles, epinephrine bottles, antitoxin bottles, and large beakers. Finally, a single roll of medical gauze. German doctor not included."
|
||||
cost = 2000
|
||||
desc = "Contains seven beakers, syringes, and bodybags. Three morphine bottles, four insulin pills. Two charcoal bottles, epinephrine bottles, antitoxin bottles, and large beakers. Finally, a single roll of medical gauze, as well as a bottle of stimulant pills for long, hard work days. German doctor not included."
|
||||
cost = 2500
|
||||
contains = list(/obj/item/reagent_containers/glass/bottle/charcoal,
|
||||
/obj/item/reagent_containers/glass/bottle/charcoal,
|
||||
/obj/item/reagent_containers/glass/bottle/epinephrine,
|
||||
@@ -1124,9 +1180,6 @@
|
||||
/obj/item/reagent_containers/glass/bottle/morphine,
|
||||
/obj/item/reagent_containers/glass/bottle/morphine,
|
||||
/obj/item/reagent_containers/glass/bottle/morphine,
|
||||
/obj/item/reagent_containers/glass/bottle/morphine,
|
||||
/obj/item/reagent_containers/glass/bottle/morphine,
|
||||
/obj/item/reagent_containers/glass/bottle/morphine,
|
||||
/obj/item/reagent_containers/glass/bottle/toxin,
|
||||
/obj/item/reagent_containers/glass/bottle/toxin,
|
||||
/obj/item/reagent_containers/glass/beaker/large,
|
||||
@@ -1139,7 +1192,8 @@
|
||||
/obj/item/storage/box/beakers,
|
||||
/obj/item/storage/box/medsprays,
|
||||
/obj/item/storage/box/syringes,
|
||||
/obj/item/storage/box/bodybags)
|
||||
/obj/item/storage/box/bodybags,
|
||||
/obj/item/storage/pill_bottle/stimulant)
|
||||
crate_name = "medical supplies crate"
|
||||
|
||||
/datum/supply_pack/medical/vending
|
||||
@@ -1150,6 +1204,58 @@
|
||||
/obj/item/vending_refill/wallmed)
|
||||
crate_name = "medical vending crate"
|
||||
|
||||
/datum/supply_pack/medical/sprays
|
||||
name = "Medical Sprays"
|
||||
desc = "Contains two cans of Styptic Spray, Silver Sulfadiazine Spray, Synthflesh Spray and Sterilizer Compound Spray."
|
||||
cost = 2500
|
||||
contains = list(/obj/item/reagent_containers/medspray/styptic,
|
||||
/obj/item/reagent_containers/medspray/styptic,
|
||||
/obj/item/reagent_containers/medspray/silver_sulf,
|
||||
/obj/item/reagent_containers/medspray/silver_sulf,
|
||||
/obj/item/reagent_containers/medspray/synthflesh,
|
||||
/obj/item/reagent_containers/medspray/synthflesh,
|
||||
/obj/item/reagent_containers/medspray/sterilizine,
|
||||
/obj/item/reagent_containers/medspray/sterilizine)
|
||||
crate_name = "medical supplies crate"
|
||||
|
||||
/datum/supply_pack/medical/firstaidmixed
|
||||
name = "Mixed Medical Kits"
|
||||
desc = "Contains one of each medical kits for dealing with a variety of injured crewmembers."
|
||||
cost = 1500
|
||||
contains = list(/obj/item/storage/firstaid/toxin,
|
||||
/obj/item/storage/firstaid/o2,
|
||||
/obj/item/storage/firstaid/brute,
|
||||
/obj/item/storage/firstaid/fire,
|
||||
/obj/item/storage/firstaid/regular)
|
||||
crate_name = "medical supplies crate"
|
||||
|
||||
/datum/supply_pack/medical/firstaidoxygen
|
||||
name = "Oxygen Deprivation Kit Crate"
|
||||
desc = "Contains three first aid kits focused on helping oxygen deprivation victims."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/storage/firstaid/o2,
|
||||
/obj/item/storage/firstaid/o2,
|
||||
/obj/item/storage/firstaid/o2)
|
||||
crate_name = "oxygen deprivation kit crate"
|
||||
|
||||
/datum/supply_pack/medical/surgery
|
||||
name = "Surgical Supplies Crate"
|
||||
desc = "Do you want to perform surgery, but don't have one of those fancy shmancy degrees? Just get started with this crate containing a medical duffelbag, Sterilizine spray and collapsible roller bed."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/storage/backpack/duffelbag/med/surgery,
|
||||
/obj/item/reagent_containers/medspray/sterilizine,
|
||||
/obj/item/roller)
|
||||
crate_name = "surgical supplies crate"
|
||||
|
||||
/datum/supply_pack/medical/firstaidtoxins
|
||||
name = "Toxin Treatment Kit Crate"
|
||||
desc = "Contains three first aid kits focused on healing damage dealt by heavy toxins."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/storage/firstaid/toxin,
|
||||
/obj/item/storage/firstaid/toxin,
|
||||
/obj/item/storage/firstaid/toxin)
|
||||
crate_name = "toxin treatment kit crate"
|
||||
|
||||
/datum/supply_pack/medical/virus
|
||||
name = "Virus Crate"
|
||||
desc = "Contains twelve different bottles, containing several viral samples for virology research. Also includes seven beakers and syringes. Balled-up jeans not included. Requires CMO access to open."
|
||||
@@ -1303,14 +1409,15 @@
|
||||
|
||||
/datum/supply_pack/service/noslipfloor
|
||||
name = "High-traction Floor Tiles"
|
||||
desc = "Make slipping a thing of the past with thirty industrial-grade anti-slip floortiles!"
|
||||
desc = "Make slipping a thing of the past with sixty industrial-grade anti-slip floortiles!"
|
||||
cost = 2000
|
||||
contains = list(/obj/item/stack/tile/noslip/thirty)
|
||||
contains = list(/obj/item/stack/tile/noslip/thirty,
|
||||
/obj/item/stack/tile/noslip/thirty)
|
||||
crate_name = "high-traction floor tiles crate"
|
||||
|
||||
/datum/supply_pack/service/janitor
|
||||
name = "Janitorial Supplies Crate"
|
||||
desc = "Fight back against dirt and grime with Nanotrasen's Janitorial Essentials(tm)! Contains three buckets, caution signs, and cleaner grenades. Also has a single mop, spray cleaner, rag, and trash bag."
|
||||
desc = "Fight back against dirt and grime with Nanotrasen's Janitorial Essentials(tm)! Contains three buckets, caution signs, and cleaner grenades. Also has a single mop, spray cleaner, rag, NT soap and a trash bag."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/reagent_containers/glass/bucket,
|
||||
/obj/item/reagent_containers/glass/bucket,
|
||||
@@ -1324,7 +1431,8 @@
|
||||
/obj/item/reagent_containers/glass/rag,
|
||||
/obj/item/grenade/chem_grenade/cleaner,
|
||||
/obj/item/grenade/chem_grenade/cleaner,
|
||||
/obj/item/grenade/chem_grenade/cleaner)
|
||||
/obj/item/grenade/chem_grenade/cleaner,
|
||||
/obj/item/soap/nanotrasen)
|
||||
crate_name = "janitorial supplies crate"
|
||||
|
||||
/datum/supply_pack/service/janitor/janicart
|
||||
@@ -1378,7 +1486,7 @@
|
||||
|
||||
/datum/supply_pack/service/carpet
|
||||
name = "Premium Carpet Crate"
|
||||
desc = "Plasteel floor tiles getting on your nerves? These stacks of extra soft carpet will tie any room together."
|
||||
desc = "Plasteel floor tiles getting on your nerves? These stacks of extra soft carpet will tie any room together. Contains the classics."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/stack/tile/carpet/fifty,
|
||||
/obj/item/stack/tile/carpet/fifty,
|
||||
@@ -1386,13 +1494,24 @@
|
||||
/obj/item/stack/tile/carpet/black/fifty)
|
||||
crate_name = "premium carpet crate"
|
||||
|
||||
/datum/supply_pack/service/carpet2
|
||||
name = "Premium Carpet Crate #2"
|
||||
desc = "Plasteel floor tiles getting on your nerves? These stacks of extra soft carpet will tie any room together. Contains red, and monochrome"
|
||||
cost = 1000
|
||||
contains = list(/obj/item/stack/tile/carpet/blackred/fifty,
|
||||
/obj/item/stack/tile/carpet/blackred/fifty,
|
||||
/obj/item/stack/tile/carpet/monochrome/fifty,
|
||||
/obj/item/stack/tile/carpet/monochrome/fifty)
|
||||
crate_name = "premium carpet crate #2"
|
||||
|
||||
/datum/supply_pack/service/lightbulbs
|
||||
name = "Replacement Lights"
|
||||
desc = "May the light of Aether shine upon this station! Or at least, the light of forty two light tubes and twenty one light bulbs."
|
||||
cost = 1000
|
||||
desc = "May the light of Aether shine upon this station! Or at least, the light of forty two light tubes and twenty one light bulbs as well as a light replacer."
|
||||
cost = 1200
|
||||
contains = list(/obj/item/storage/box/lights/mixed,
|
||||
/obj/item/storage/box/lights/mixed,
|
||||
/obj/item/storage/box/lights/mixed)
|
||||
/obj/item/storage/box/lights/mixed,
|
||||
/obj/item/lightreplacer)
|
||||
crate_name = "replacement lights"
|
||||
|
||||
/datum/supply_pack/service/minerkit
|
||||
@@ -1483,20 +1602,52 @@
|
||||
crate_name = "beekeeping starter crate"
|
||||
crate_type = /obj/structure/closet/crate/hydroponics
|
||||
|
||||
/datum/supply_pack/organic/cutlery
|
||||
name = "Kitchen Cutlery Deluxe Set"
|
||||
desc = "Need to slice and dice away those ''Tomatos'' well we got what you need! From a nice set of knifes, forks, plates, glasses, and a whetstone for when you got some grizzle that is a bit harder to slice then normal."
|
||||
cost = 10000
|
||||
contraband = TRUE
|
||||
contains = list(/obj/item/sharpener,
|
||||
/obj/item/kitchen/fork,
|
||||
/obj/item/kitchen/fork,
|
||||
/obj/item/kitchen/knife,
|
||||
/obj/item/kitchen/knife,
|
||||
/obj/item/kitchen/knife,
|
||||
/obj/item/kitchen/knife,
|
||||
/obj/item/kitchen/knife/butcher,
|
||||
/obj/item/kitchen/knife/butcher,
|
||||
/obj/item/kitchen/rollingpin, //Deluxe for a reason
|
||||
/obj/item/trash/plate,
|
||||
/obj/item/trash/plate,
|
||||
/obj/item/trash/plate,
|
||||
/obj/item/trash/plate,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass)
|
||||
crate_name = "kitchen cutlery deluxe set"
|
||||
|
||||
/datum/supply_pack/organic/food
|
||||
name = "Food Crate"
|
||||
desc = "Get things cooking with this crate full of useful ingredients! Contains a dozen eggs, three bananas, and some flour, rice, milk, soymilk, salt, pepper, enzyme, sugar, and monkeymeat."
|
||||
desc = "Get things cooking with this crate full of useful ingredients! Contains a two dozen eggs, three bananas, and two bags of flour and rice, two cartons of milk, soymilk, as well as salt and pepper shakers, a enzyme and sugar bottle, and three slabs of monkeymeat."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/reagent_containers/food/condiment/flour,
|
||||
/obj/item/reagent_containers/food/condiment/flour,
|
||||
/obj/item/reagent_containers/food/condiment/rice,
|
||||
/obj/item/reagent_containers/food/condiment/rice,
|
||||
/obj/item/reagent_containers/food/condiment/milk,
|
||||
/obj/item/reagent_containers/food/condiment/milk,
|
||||
/obj/item/reagent_containers/food/condiment/soymilk,
|
||||
/obj/item/reagent_containers/food/condiment/saltshaker,
|
||||
/obj/item/reagent_containers/food/condiment/peppermill,
|
||||
/obj/item/storage/fancy/egg_box,
|
||||
/obj/item/storage/fancy/egg_box,
|
||||
/obj/item/reagent_containers/food/condiment/enzyme,
|
||||
/obj/item/reagent_containers/food/condiment/sugar,
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/monkey,
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/monkey,
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/monkey,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana)
|
||||
@@ -1790,7 +1941,7 @@
|
||||
desc = "Psst.. bud... want some contraband? I can get you a poster, some nice cigs, dank, even some sponsored items...you know, the good stuff. Just keep it away from the cops, kay?"
|
||||
contraband = TRUE
|
||||
cost = 3000
|
||||
num_contained = 7
|
||||
num_contained = 5 //SOME
|
||||
contains = list(/obj/item/poster/random_contraband,
|
||||
/obj/item/poster/random_contraband,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cannabis,
|
||||
@@ -1956,25 +2107,55 @@
|
||||
name = "Toy Crate"
|
||||
desc = "Who cares about pride and accomplishment? Skip the gaming and get straight to the sweet rewards with this product! Contains five random toys. Warranty void if used to prank research directors."
|
||||
cost = 5000 // or play the arcade machines ya lazy bum
|
||||
// TODO make this actually just use the arcade machine loot list
|
||||
// TODID make this actually just use the arcade machine loot list
|
||||
num_contained = 5
|
||||
contains = list(/obj/item/toy/spinningtoy,
|
||||
/obj/item/toy/sword,
|
||||
/obj/item/toy/foamblade,
|
||||
/obj/item/toy/talking/AI,
|
||||
/obj/item/toy/talking/owl,
|
||||
/obj/item/toy/talking/griffin,
|
||||
/obj/item/toy/nuke,
|
||||
/obj/item/toy/minimeteor,
|
||||
/obj/item/toy/plush/carpplushie,
|
||||
/obj/item/toy/plush/lizardplushie,
|
||||
/obj/item/toy/plush/snakeplushie,
|
||||
/obj/item/toy/plush/nukeplushie,
|
||||
/obj/item/toy/plush/slimeplushie,
|
||||
/obj/item/coin/antagtoken,
|
||||
/obj/item/stack/tile/fakespace/loaded,
|
||||
/obj/item/gun/ballistic/shotgun/toy/crossbow,
|
||||
/obj/item/toy/redbutton,
|
||||
contains = list(/obj/item/storage/box/snappops,
|
||||
/obj/item/toy/talking/AI,
|
||||
/obj/item/toy/talking/codex_gigas,
|
||||
/obj/item/clothing/under/syndicate/tacticool,
|
||||
/obj/item/toy/sword ,
|
||||
/obj/item/toy/gun,
|
||||
/obj/item/gun/ballistic/shotgun/toy/crossbow,
|
||||
/obj/item/storage/box/fakesyndiesuit,
|
||||
/obj/item/storage/crayons,
|
||||
/obj/item/toy/spinningtoy,
|
||||
/obj/item/toy/prize/ripley,
|
||||
/obj/item/toy/prize/fireripley,
|
||||
/obj/item/toy/prize/deathripley,
|
||||
/obj/item/toy/prize/gygax,
|
||||
/obj/item/toy/prize/durand,
|
||||
/obj/item/toy/prize/honk,
|
||||
/obj/item/toy/prize/marauder,
|
||||
/obj/item/toy/prize/seraph,
|
||||
/obj/item/toy/prize/mauler,
|
||||
/obj/item/toy/prize/odysseus,
|
||||
/obj/item/toy/prize/phazon,
|
||||
/obj/item/toy/prize/reticence,
|
||||
/obj/item/toy/cards/deck,
|
||||
/obj/item/toy/nuke,
|
||||
/obj/item/toy/minimeteor,
|
||||
/obj/item/toy/redbutton,
|
||||
/obj/item/toy/talking/owl,
|
||||
/obj/item/toy/talking/griffin,
|
||||
/obj/item/coin/antagtoken,
|
||||
/obj/item/stack/tile/fakespace/loaded,
|
||||
/obj/item/stack/tile/fakepit/loaded,
|
||||
/obj/item/toy/toy_xeno,
|
||||
/obj/item/storage/box/actionfigure,
|
||||
/obj/item/restraints/handcuffs/fake,
|
||||
/obj/item/grenade/chem_grenade/glitter/pink,
|
||||
/obj/item/grenade/chem_grenade/glitter/blue,
|
||||
/obj/item/grenade/chem_grenade/glitter/white,
|
||||
/obj/item/toy/eightball,
|
||||
/obj/item/toy/windupToolbox,
|
||||
/obj/item/toy/clockwork_watch,
|
||||
/obj/item/toy/toy_dagger,
|
||||
/obj/item/extendohand/acme,
|
||||
/obj/item/hot_potato/harmless/toy,
|
||||
/obj/item/card/emagfake,
|
||||
/obj/item/clothing/shoes/wheelys,
|
||||
/obj/item/clothing/shoes/kindleKicks,
|
||||
/obj/item/storage/belt/military/snack,
|
||||
/obj/item/toy/eightball,
|
||||
/obj/item/vending_refill/donksoft)
|
||||
crate_name = "toy crate"
|
||||
@@ -2072,7 +2253,7 @@
|
||||
|
||||
/datum/supply_pack/misc/artsupply
|
||||
name = "Art Supplies"
|
||||
desc = "Make some happy little accidents with six canvasses, two easels, and two rainbow crayons!"
|
||||
desc = "Make some happy little accidents with six canvasses, two easels, two boxes of crayons, and a rainbow crayon!"
|
||||
cost = 800
|
||||
contains = list(/obj/structure/easel,
|
||||
/obj/structure/easel,
|
||||
@@ -2082,11 +2263,23 @@
|
||||
/obj/item/canvas/twentythreeXnineteen,
|
||||
/obj/item/canvas/twentythreeXtwentythree,
|
||||
/obj/item/canvas/twentythreeXtwentythree,
|
||||
/obj/item/storage/crayons,
|
||||
/obj/item/storage/crayons,
|
||||
/obj/item/toy/crayon/rainbow,
|
||||
/obj/item/toy/crayon/rainbow)
|
||||
/obj/item/toy/crayon/white,
|
||||
/obj/item/toy/crayon/white)
|
||||
crate_name = "art supply crate"
|
||||
crate_type = /obj/structure/closet/crate/wooden
|
||||
|
||||
/datum/supply_pack/misc/captain_pen
|
||||
name = "Captain Pen"
|
||||
desc = "A spare Captain fountain pen."
|
||||
access = ACCESS_CAPTAIN
|
||||
cost = 10000
|
||||
contains = list(/obj/item/pen/fountain/captain)
|
||||
crate_name = "captain pen"
|
||||
crate_type = /obj/structure/closet/crate/secure/weapon //It is a combat pen
|
||||
|
||||
/datum/supply_pack/misc/bicycle
|
||||
name = "Bicycle"
|
||||
desc = "Nanotrasen reminds all employees to never toy with powers outside their control."
|
||||
@@ -2124,7 +2317,7 @@
|
||||
|
||||
/datum/supply_pack/misc/paper
|
||||
name = "Bureaucracy Crate"
|
||||
desc = "High stacks of papers on your desk Are a big problem - make it Pea-sized with these bureaucratic supplies! Contains six pens, some camera film, hand labeler supplies, a paper bin, three folders, two clipboards and two stamps."//that was too forced
|
||||
desc = "High stacks of papers on your desk Are a big problem - make it Pea-sized with these bureaucratic supplies! Contains five pens, some camera film, hand labeler supplies, a paper bin, three folders, two clipboards and two stamps as well as a briefcase."//that was too forced
|
||||
cost = 1500
|
||||
contains = list(/obj/structure/filingcabinet/chestdrawer/wheeled,
|
||||
/obj/item/camera_film,
|
||||
@@ -2135,7 +2328,6 @@
|
||||
/obj/item/pen/fourcolor,
|
||||
/obj/item/pen/fourcolor,
|
||||
/obj/item/pen,
|
||||
/obj/item/pen/fountain,
|
||||
/obj/item/pen/blue,
|
||||
/obj/item/pen/red,
|
||||
/obj/item/folder/blue,
|
||||
@@ -2144,14 +2336,16 @@
|
||||
/obj/item/clipboard,
|
||||
/obj/item/clipboard,
|
||||
/obj/item/stamp,
|
||||
/obj/item/stamp/denied)
|
||||
/obj/item/stamp/denied,
|
||||
/obj/item/storage/briefcase)
|
||||
crate_name = "bureaucracy crate"
|
||||
|
||||
/datum/supply_pack/misc/fountainpens
|
||||
name = "Calligraphy Crate"
|
||||
desc = "Sign death warrants in style with these seven executive fountain pens."
|
||||
cost = 700
|
||||
contains = list(/obj/item/storage/box/fountainpens)
|
||||
contains = list(/obj/item/storage/box/fountainpens,
|
||||
/obj/item/paper_bin)
|
||||
crate_type = /obj/structure/closet/crate/wooden
|
||||
crate_name = "calligraphy crate"
|
||||
|
||||
@@ -2188,6 +2382,36 @@
|
||||
)
|
||||
crate_name = "religious supplies crate"
|
||||
|
||||
/datum/supply_pack/misc/lewd
|
||||
name = "Lewd Crate" // OwO
|
||||
desc = "Psss want to have a good time with your sluts? Well I got what you want maid clothing, dildos, collars and more!"
|
||||
cost = 5000
|
||||
contraband = TRUE
|
||||
contains = list(/obj/item/dildo/custom,
|
||||
/obj/item/dildo/custom,
|
||||
/obj/item/vending_refill/kink,
|
||||
/obj/item/vending_refill/kink,
|
||||
/obj/item/clothing/under/maid,
|
||||
/obj/item/clothing/under/maid,
|
||||
/obj/item/electropack/shockcollar,
|
||||
/obj/item/electropack/shockcollar,
|
||||
/obj/item/restraints/handcuffs/fake/kinky,
|
||||
/obj/item/restraints/handcuffs/fake/kinky,
|
||||
/obj/item/clothing/head/kitty/genuine, // Why its illegal
|
||||
/obj/item/clothing/head/kitty/genuine,
|
||||
/obj/structure/reagent_dispensers/keg/aphro)
|
||||
crate_name = "lewd kit"
|
||||
crate_type = /obj/structure/closet/crate
|
||||
|
||||
/datum/supply_pack/misc/lewdkeg
|
||||
name = "Lewd Deluxe Keg"
|
||||
desc = "That other stuff not getting you ready? Well I have a Chemslut making tons of the good stuff."
|
||||
cost = 7000 //It can be a weapon
|
||||
contraband = TRUE
|
||||
contains = list(/obj/structure/reagent_dispensers/keg/aphro/strong)
|
||||
crate_name = "deluxe keg"
|
||||
crate_type = /obj/structure/closet/crate
|
||||
|
||||
/datum/supply_pack/misc/toner
|
||||
name = "Toner Crate"
|
||||
desc = "Spent too much ink printing butt pictures? Fret not, with these six toner refills, you'll be printing butts 'till the cows come home!'"
|
||||
@@ -2199,3 +2423,4 @@
|
||||
/obj/item/toner,
|
||||
/obj/item/toner)
|
||||
crate_name = "toner crate"
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/parallax
|
||||
|
||||
var/ambientocclusion = TRUE
|
||||
var/auto_fit_viewport = FALSE
|
||||
var/auto_fit_viewport = TRUE
|
||||
|
||||
var/uplink_spawn_loc = UPLINK_PDA
|
||||
|
||||
@@ -216,7 +216,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<b>Name:</b> "
|
||||
dat += "<a href='?_src_=prefs;preference=name;task=input'>[real_name]</a><BR>"
|
||||
|
||||
dat += "<b>Gender:</b> <a href='?_src_=prefs;preference=gender'>[gender == MALE ? "Male" : "Female"]</a><BR>"
|
||||
dat += "<b>Gender:</b> <a href='?_src_=prefs;preference=gender'>[gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]</a><BR>"
|
||||
dat += "<b>Age:</b> <a href='?_src_=prefs;preference=age;task=input'>[age]</a><BR>"
|
||||
|
||||
dat += "<b>Special Names:</b><BR>"
|
||||
@@ -254,7 +254,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
else
|
||||
dat += "[TextPreview(features["flavor_text"])]...<BR>"
|
||||
dat += "<h2>Body</h2>"
|
||||
dat += "<b>Gender:</b> <a href='?_src_=prefs;preference=gender'>[gender == MALE ? "Male" : "Female"]</a><BR>"
|
||||
dat += "<b>Gender:</b> <a href='?_src_=prefs;preference=gender'>[gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]</a><BR>"
|
||||
dat += "<b>Species:</b><a href='?_src_=prefs;preference=species;task=input'>[pref_species.id]</a><BR>"
|
||||
dat += "<a href='?_src_=prefs;preference=all;task=random'>Random Body</A><BR>"
|
||||
dat += "<a href='?_src_=prefs;preference=all'>Always Random Body: [be_random_body ? "Yes" : "No"]</A><BR>"
|
||||
@@ -574,6 +574,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(NOGENITALS in pref_species.species_traits)
|
||||
dat += "<b>Your species ([pref_species.name]) does not support genitals!</b><br>"
|
||||
else
|
||||
if(pref_species.use_skintones)
|
||||
dat += "<b>Genitals use skintone:</b><a href='?_src_=prefs;preference=genital_colour'>[features["genitals_use_skintone"] == TRUE ? "Yes" : "No"]</a><BR>"
|
||||
dat += "<b>Has Penis:</b><a href='?_src_=prefs;preference=has_cock'>[features["has_cock"] == TRUE ? "Yes" : "No"]</a><BR>"
|
||||
if(features["has_cock"] == TRUE)
|
||||
if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE)
|
||||
@@ -685,7 +687,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<b>Ambient Occlusion:</b> <a href='?_src_=prefs;preference=ambientocclusion'>[ambientocclusion ? "Enabled" : "Disabled"]</a><br>"
|
||||
dat += "<b>Fit Viewport:</b> <a href='?_src_=prefs;preference=auto_fit_viewport'>[auto_fit_viewport ? "Auto" : "Manual"]</a><br>"
|
||||
|
||||
if (CONFIG_GET(flag/maprotation))
|
||||
if (CONFIG_GET(flag/maprotation) && CONFIG_GET(flag/tgstyle_maprotation))
|
||||
var/p_map = preferred_map
|
||||
if (!p_map)
|
||||
p_map = "Default"
|
||||
@@ -732,7 +734,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<h2>Citadel Preferences</h2>" //Because fuck me if preferences can't be fucking modularized and expected to update in a reasonable timeframe.
|
||||
dat += "<b>Arousal:</b><a href='?_src_=prefs;preference=arousable'>[arousable == TRUE ? "Enabled" : "Disabled"]</a><BR>"
|
||||
dat += "<b>Exhibitionist:</b><a href='?_src_=prefs;preference=exhibitionist'>[features["exhibitionist"] == TRUE ? "Yes" : "No"]</a><BR>"
|
||||
dat += "<b>Allow MediHound sleeper:</b> <a href='?_src_=prefs;preference=hound_sleeper'>[(cit_toggles & MEDIHOUND_SLEEPER) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Voracious MediHound sleepers:</b> <a href='?_src_=prefs;preference=hound_sleeper'>[(cit_toggles & MEDIHOUND_SLEEPER) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Hear Vore Sounds:</b> <a href='?_src_=prefs;preference=toggleeatingnoise'>[(cit_toggles & EATING_NOISES) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Hear Vore Digestion Sounds:</b> <a href='?_src_=prefs;preference=toggledigestionnoise'>[(cit_toggles & DIGESTION_NOISES) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Widescreen:</b> <a href='?_src_=prefs;preference=widescreenpref'>[widescreenpref ? "Enabled ([CONFIG_GET(string/default_view)])" : "Disabled (15x15)"]</a><br>"
|
||||
@@ -1475,7 +1477,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
features["mam_tail"] = "None"
|
||||
|
||||
if("tail_human")
|
||||
var/list/snowflake_tails_list = list("None" = null)
|
||||
var/list/snowflake_tails_list = list()
|
||||
for(var/path in GLOB.tails_list_human)
|
||||
var/datum/sprite_accessory/tails/human/instance = GLOB.tails_list_human[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
@@ -1492,7 +1494,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
features["mam_tail"] = "None"
|
||||
|
||||
if("mam_tail")
|
||||
var/list/snowflake_tails_list = list("None" = null)
|
||||
var/list/snowflake_tails_list = list()
|
||||
for(var/path in GLOB.mam_tails_list)
|
||||
var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
@@ -1568,7 +1570,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
skin_tone = new_s_tone
|
||||
|
||||
if("taur")
|
||||
var/list/snowflake_taur_list = list("Normal" = null)
|
||||
var/list/snowflake_taur_list = list()
|
||||
for(var/path in GLOB.taur_list)
|
||||
var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
@@ -1586,7 +1588,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
features["tail_lizard"] = "None"
|
||||
|
||||
if("ears")
|
||||
var/list/snowflake_ears_list = list("Normal" = null)
|
||||
var/list/snowflake_ears_list = list()
|
||||
for(var/path in GLOB.ears_list)
|
||||
var/datum/sprite_accessory/ears/instance = GLOB.ears_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
@@ -1599,7 +1601,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
features["ears"] = new_ears
|
||||
|
||||
if("mam_ears")
|
||||
var/list/snowflake_ears_list = list("Normal" = null)
|
||||
var/list/snowflake_ears_list = list()
|
||||
for(var/path in GLOB.mam_ears_list)
|
||||
var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
@@ -1612,7 +1614,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
features["mam_ears"] = new_ears
|
||||
|
||||
if("mam_body_markings")
|
||||
var/list/snowflake_markings_list = list("Normal" = null)
|
||||
var/list/snowflake_markings_list = list()
|
||||
for(var/path in GLOB.mam_body_markings_list)
|
||||
var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
@@ -1844,13 +1846,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(unlock_content)
|
||||
toggles ^= MEMBER_PUBLIC
|
||||
if("gender")
|
||||
if(gender == MALE)
|
||||
gender = FEMALE
|
||||
else
|
||||
gender = MALE
|
||||
underwear = random_underwear(gender)
|
||||
undershirt = random_undershirt(gender)
|
||||
socks = random_socks()
|
||||
var/chosengender = input(user, "Select your character's gender.", "Gender Selection", gender) in list(MALE,FEMALE,"nonbinary","object")
|
||||
switch(chosengender)
|
||||
if("nonbinary")
|
||||
chosengender = PLURAL
|
||||
if("object")
|
||||
chosengender = NEUTER
|
||||
gender = chosengender
|
||||
facial_hair_style = random_facial_hair_style(gender)
|
||||
hair_style = random_hair_style(gender)
|
||||
|
||||
@@ -2062,9 +2064,19 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
else if("xenotail" in pref_species.default_features)
|
||||
character.dna.species.mutant_bodyparts |= "xenotail"
|
||||
|
||||
if(("legs" in pref_species.default_features) && character.dna.features["legs"] == "Digitigrade Legs")
|
||||
pref_species.species_traits += DIGITIGRADE
|
||||
if("legs" in pref_species.default_features)
|
||||
if(character.dna.features["legs"] == "Digitigrade Legs")
|
||||
pref_species.species_traits += DIGITIGRADE
|
||||
character.Digitigrade_Leg_Swap(FALSE)
|
||||
|
||||
if(character.dna.features["legs"] == "Normal Legs" && DIGITIGRADE in pref_species.species_traits)
|
||||
pref_species.species_traits -= DIGITIGRADE
|
||||
character.Digitigrade_Leg_Swap(TRUE)
|
||||
|
||||
else if((!"legs" in pref_species.default_features) && DIGITIGRADE in pref_species.species_traits)
|
||||
pref_species.species_traits -= DIGITIGRADE
|
||||
character.Digitigrade_Leg_Swap(TRUE)
|
||||
|
||||
if(DIGITIGRADE in pref_species.species_traits)
|
||||
character.Digitigrade_Leg_Swap(FALSE)
|
||||
|
||||
|
||||
@@ -349,7 +349,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
//Sanitize
|
||||
|
||||
real_name = reject_bad_name(real_name)
|
||||
gender = sanitize_gender(gender)
|
||||
gender = sanitize_gender(gender, TRUE, TRUE)
|
||||
if(!real_name)
|
||||
real_name = random_unique_name(gender)
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
var/antaglisting = list()
|
||||
|
||||
for(var/datum/mind/M in get_antag_minds(/datum/antagonist))
|
||||
if(!M.current || !M.current.client)
|
||||
if(!M.current || !M.current.client || isnewplayer(M.current))
|
||||
continue
|
||||
antaglisting |= M.current.client
|
||||
|
||||
@@ -104,7 +104,7 @@ GLOBAL_VAR_INIT(antag_ooc_colour, AOOC_COLOR)
|
||||
var/antaglisting = list() //Only those who have access to AOOC need to know if it's enabled or not.
|
||||
|
||||
for(var/datum/mind/M in get_antag_minds(/datum/antagonist))
|
||||
if(!M.current || !M.current.client)
|
||||
if(!M.current || !M.current.client || isnewplayer(M.current))
|
||||
continue
|
||||
antaglisting |= M.current.client
|
||||
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
|
||||
if(M.a_intent == INTENT_HARM)
|
||||
M.changeNext_move(CLICK_CD_RAPID)
|
||||
M.adjustStaminaLoss(-2) //Restore 2/3 of the stamina used assuming empty stam buffer. With proper stamina buffer management, this results in a net gain of +.5 stamina per click.
|
||||
if(warcry)
|
||||
M.say("[warcry]", ignore_spam = TRUE, forced = "north star warcry")
|
||||
.= FALSE
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
icon_state = "hardhat0_yellow"
|
||||
item_state = "hardhat0_yellow"
|
||||
var/brightness_on = 4 //luminosity when on
|
||||
light_color = "#FFCC66"
|
||||
var/power_on = 0.8
|
||||
var/on = FALSE
|
||||
item_color = "yellow" //Determines used sprites: hardhat[on]_[item_color] and hardhat[on]_[item_color]2 (lying down sprite)
|
||||
armor = list("melee" = 15, "bullet" = 5, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 10, "rad" = 20, "fire" = 100, "acid" = 50)
|
||||
@@ -29,7 +31,7 @@
|
||||
A.UpdateButtonIcon()
|
||||
|
||||
/obj/item/clothing/head/hardhat/proc/turn_on(mob/user)
|
||||
set_light(brightness_on)
|
||||
set_light(brightness_on, power_on)
|
||||
|
||||
/obj/item/clothing/head/hardhat/proc/turn_off(mob/user)
|
||||
set_light(0)
|
||||
|
||||
@@ -321,7 +321,7 @@
|
||||
/obj/item/clothing/head/helmet/proc/update_helmlight(mob/user = null)
|
||||
if(F)
|
||||
if(F.on)
|
||||
set_light(F.brightness_on)
|
||||
set_light(F.brightness_on, F.flashlight_power, F.light_color)
|
||||
else
|
||||
set_light(0)
|
||||
update_icon()
|
||||
|
||||
@@ -54,7 +54,10 @@
|
||||
if(damaged_clothes)
|
||||
. += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe")
|
||||
if(bloody)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "shoeblood")
|
||||
if(adjusted == NORMAL_STYLE)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "shoeblood")
|
||||
else
|
||||
. += mutable_appearance('modular_citadel/icons/mob/digishoes.dmi', "shoeblood")
|
||||
|
||||
/obj/item/clothing/shoes/equipped(mob/user, slot)
|
||||
. = ..()
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals)
|
||||
slowdown = 1
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 50, "fire" = 80, "acid" = 70)
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAUR
|
||||
cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
|
||||
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
@@ -43,3 +43,4 @@
|
||||
strip_delay = 80
|
||||
equip_delay_other = 80
|
||||
resistance_flags = NONE
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
@@ -180,6 +180,7 @@
|
||||
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75)
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine
|
||||
resistance_flags = FIRE_PROOF
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
//Atmospherics
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/engine/atmos
|
||||
@@ -201,6 +202,7 @@
|
||||
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/atmos
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
|
||||
//Chief Engineer's hardsuit
|
||||
@@ -224,6 +226,7 @@
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite
|
||||
jetpack = /obj/item/tank/jetpack/suit
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
//Mining hardsuit
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/mining
|
||||
@@ -254,6 +257,7 @@
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe)
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining
|
||||
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/mining/Initialize()
|
||||
. = ..()
|
||||
@@ -349,6 +353,7 @@
|
||||
allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi
|
||||
jetpack = /obj/item/tank/jetpack/suit
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
//Elite Syndie suit
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite
|
||||
@@ -377,6 +382,7 @@
|
||||
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
//The Owl Hardsuit
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/syndi/owl
|
||||
@@ -449,6 +455,7 @@
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/firstaid, /obj/item/healthanalyzer, /obj/item/stack/medical)
|
||||
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75)
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/medical
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
//Research Director hardsuit
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/rd
|
||||
@@ -490,6 +497,7 @@
|
||||
/obj/item/hand_tele, /obj/item/aicard)
|
||||
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 100, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 80)
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/rd
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
|
||||
|
||||
@@ -510,6 +518,7 @@
|
||||
item_state = "sec_hardsuit"
|
||||
armor = list("melee" = 35, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75)
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/security/Initialize()
|
||||
. = ..()
|
||||
@@ -531,6 +540,7 @@
|
||||
armor = list("melee" = 45, "bullet" = 25, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 50, "fire" = 95, "acid" = 95)
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos
|
||||
jetpack = /obj/item/tank/jetpack/suit
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
//Captain
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/captain
|
||||
@@ -558,6 +568,7 @@
|
||||
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT //this needed to be added a long fucking time ago
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/captain
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/captain/Initialize()
|
||||
. = ..()
|
||||
@@ -657,6 +668,7 @@
|
||||
var/recharge_rate = 1 //How quickly the shield recharges once it starts charging
|
||||
var/shield_state = "shield-old"
|
||||
var/shield_on = "shield-old"
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/shielded/Initialize()
|
||||
. = ..()
|
||||
@@ -774,6 +786,7 @@
|
||||
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi
|
||||
slowdown = 0
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/shielded/syndi/Initialize()
|
||||
@@ -803,6 +816,7 @@
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/swat
|
||||
dog_fashion = /datum/dog_fashion/back/deathsquad
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/shielded/swat
|
||||
name = "death commando helmet"
|
||||
|
||||
@@ -128,8 +128,8 @@ Contains:
|
||||
|
||||
//Space pirate outfit
|
||||
/obj/item/clothing/head/helmet/space/pirate
|
||||
name = "pirate hat"
|
||||
desc = "Yarr."
|
||||
name = "royal tricorne"
|
||||
desc = "A thick, space-proof tricorne from the royal Space Queen. It's lined with a layer of reflective kevlar."
|
||||
icon_state = "pirate"
|
||||
item_state = "pirate"
|
||||
armor = list("melee" = 30, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 60, "acid" = 75)
|
||||
@@ -139,13 +139,14 @@ Contains:
|
||||
flags_cover = HEADCOVERSEYES
|
||||
|
||||
/obj/item/clothing/head/helmet/space/pirate/bandana
|
||||
name = "pirate bandana"
|
||||
name = "royal bandana"
|
||||
desc = "A space-proof bandanna crafted with reflective kevlar."
|
||||
icon_state = "bandana"
|
||||
item_state = "bandana"
|
||||
|
||||
/obj/item/clothing/suit/space/pirate
|
||||
name = "pirate coat"
|
||||
desc = "Yarr."
|
||||
name = "royal waistcoat "
|
||||
desc = "A royal, space-proof waistcoat. The inside of it is lined with reflective kevlar."
|
||||
icon_state = "pirate"
|
||||
item_state = "pirate"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
@@ -191,6 +192,7 @@ Contains:
|
||||
icon_state = "ert_security"
|
||||
item_state = "ert_security"
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/sec
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
//ERT Engineering
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ert/engi
|
||||
@@ -204,6 +206,7 @@ Contains:
|
||||
icon_state = "ert_engineer"
|
||||
item_state = "ert_engineer"
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/engi
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
//ERT Medical
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ert/med
|
||||
@@ -218,6 +221,7 @@ Contains:
|
||||
item_state = "ert_medical"
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/med
|
||||
species_exception = list(/datum/species/angel)
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
/obj/item/clothing/suit/space/eva
|
||||
name = "EVA suit"
|
||||
@@ -225,6 +229,7 @@ Contains:
|
||||
item_state = "s_suit"
|
||||
desc = "A lightweight space suit with the basic ability to protect the wearer from the vacuum of space during emergencies."
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 65)
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva
|
||||
name = "EVA helmet"
|
||||
@@ -343,6 +348,7 @@ Contains:
|
||||
slowdown = 2
|
||||
armor = list("melee" = 5, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 0, "acid" = 0)
|
||||
strip_delay = 65
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
/obj/item/clothing/suit/space/fragile/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(!torn && prob(50))
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
user.update_inv_head() //So the mob overlay updates
|
||||
|
||||
if(on)
|
||||
set_light(brightness_on)
|
||||
set_light(brightness_on, 0.8, "#FFCC66")
|
||||
else
|
||||
set_light(0)
|
||||
|
||||
|
||||
@@ -109,6 +109,7 @@
|
||||
name = "green space suit"
|
||||
icon_state = "syndicate-black-med"
|
||||
item_state = "syndicate-black"
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
|
||||
//Black-orange syndicate space suit
|
||||
|
||||
@@ -9,6 +9,51 @@
|
||||
var/togglename = null
|
||||
var/suittoggled = FALSE
|
||||
|
||||
var/adjusted = NORMAL_STYLE
|
||||
mutantrace_variation = MUTANTRACE_VARIATION
|
||||
var/tauric = FALSE //Citadel Add for tauric hardsuits
|
||||
var/taurmode = NOT_TAURIC
|
||||
var/dimension_x = 32
|
||||
var/dimension_y = 32
|
||||
var/center = FALSE //Should we center the sprite?
|
||||
|
||||
/obj/item/clothing/suit/equipped(mob/user, slot)
|
||||
..()
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
if(mutantrace_variation)
|
||||
if(DIGITIGRADE in H.dna.species.species_traits)
|
||||
adjusted = ALT_STYLE
|
||||
H.update_inv_wear_suit()
|
||||
else if(adjusted == ALT_STYLE)
|
||||
adjusted = NORMAL_STYLE
|
||||
H.update_inv_wear_suit()
|
||||
|
||||
if(("taur" in H.dna.species.mutant_bodyparts) && (H.dna.features["taur"] != "None"))
|
||||
if(H.dna.features["taur"] in list("Naga", "Tentacle"))
|
||||
taurmode = SNEK_TAURIC
|
||||
if(tauric == TRUE)
|
||||
center = TRUE
|
||||
dimension_x = 64
|
||||
else if(H.dna.features["taur"] in list("Fox", "Wolf", "Otie", "Drake", "Lab", "Shepherd", "Husky", "Eevee", "Panther", "Tajaran", "Horse", "Cow"))
|
||||
taurmode = PAW_TAURIC
|
||||
if(tauric == TRUE)
|
||||
center = TRUE
|
||||
dimension_x = 64
|
||||
/*
|
||||
else if(H.dna.features["taur"] == "Horse" || "Cow")
|
||||
taurmode = HOOF_TAURIC //tweak this for when the exotics get their own suits, if ever.
|
||||
center = TRUE
|
||||
dimension_x = 64
|
||||
*/
|
||||
else
|
||||
taurmode = NOT_TAURIC
|
||||
if(tauric == TRUE)
|
||||
center = FALSE
|
||||
dimension_x = 32
|
||||
H.update_inv_wear_suit()
|
||||
|
||||
|
||||
/obj/item/clothing/suit/worn_overlays(isinhands = FALSE)
|
||||
. = list()
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
item_state = "armoralt"
|
||||
blood_overlay_type = "armor"
|
||||
dog_fashion = /datum/dog_fashion/back
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/alt
|
||||
desc = "A Type I armored vest that provides decent protection against most types of damage."
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user