Merge remote-tracking branch 'citadel/master' into eldritch_affairs
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
/area/lavaland/surface/outdoors)
|
||||
"e" = (
|
||||
/obj/item/clothing/shoes/workboots/mining,
|
||||
/obj/item/clothing/under/rank/miner/lavaland,
|
||||
/obj/item/clothing/under/rank/cargo/miner/lavaland,
|
||||
/obj/effect/decal/remains/human,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/area/lavaland/surface/outdoors)
|
||||
|
||||
@@ -188,10 +188,10 @@
|
||||
/area/ruin/powered/seedvault)
|
||||
"G" = (
|
||||
/obj/structure/closet/crate/hydroponics,
|
||||
/obj/item/clothing/under/rank/hydroponics,
|
||||
/obj/item/clothing/under/rank/hydroponics,
|
||||
/obj/item/clothing/under/rank/hydroponics,
|
||||
/obj/item/clothing/under/rank/hydroponics,
|
||||
/obj/item/clothing/under/rank/civilian/hydroponics,
|
||||
/obj/item/clothing/under/rank/civilian/hydroponics,
|
||||
/obj/item/clothing/under/rank/civilian/hydroponics,
|
||||
/obj/item/clothing/under/rank/civilian/hydroponics,
|
||||
/turf/open/floor/plasteel/freezer,
|
||||
/area/ruin/powered/seedvault)
|
||||
"H" = (
|
||||
|
||||
@@ -324,7 +324,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/rack,
|
||||
/obj/item/clothing/under/soviet,
|
||||
/obj/item/clothing/under/costume/soviet,
|
||||
/obj/item/clothing/head/ushanka,
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/ruin/space/djstation)
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
/obj/structure/closet{
|
||||
name = "Official Clothing"
|
||||
},
|
||||
/obj/item/clothing/under/rank/centcom_commander,
|
||||
/obj/item/clothing/under/rank/centcom/commander,
|
||||
/obj/item/clothing/head/centhat,
|
||||
/obj/item/clothing/gloves/combat,
|
||||
/obj/item/clothing/suit/armor/vest,
|
||||
|
||||
@@ -2098,7 +2098,7 @@
|
||||
/area/awaymission/BMPship/Aft)
|
||||
"gj" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/clothing/under/overalls,
|
||||
/obj/item/clothing/under/misc/overalls,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/BMPship/Aft)
|
||||
"gk" = (
|
||||
@@ -2269,7 +2269,7 @@
|
||||
/area/awaymission/BMPship/Aft)
|
||||
"gP" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/clothing/under/lawyer/bluesuit,
|
||||
/obj/item/clothing/under/rank/civilian/lawyer/bluesuit,
|
||||
/obj/item/clothing/suit/apron,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/BMPship/Aft)
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
/obj/structure/chair{
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/clothing/under/polychromic/shirt,
|
||||
/obj/item/clothing/under/misc/poly_shirt,
|
||||
/obj/item/clothing/neck/tie/black,
|
||||
/obj/item/clothing/shoes/laceup,
|
||||
/obj/item/storage/wallet/random,
|
||||
@@ -89,7 +89,7 @@
|
||||
/obj/structure/chair{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/clothing/under/polychromic/skirt,
|
||||
/obj/item/clothing/under/dress/skirt/polychromic,
|
||||
/obj/item/clothing/shoes/laceup,
|
||||
/obj/item/clothing/gloves/color/white,
|
||||
/obj/item/clothing/glasses/regular,
|
||||
|
||||
@@ -573,7 +573,7 @@
|
||||
"bU" = (
|
||||
/obj/effect/decal/cleanable/blood,
|
||||
/obj/structure/chair,
|
||||
/obj/item/clothing/under/rank/centcom_officer,
|
||||
/obj/item/clothing/under/rank/centcom/officer,
|
||||
/obj/item/restraints/handcuffs,
|
||||
/obj/effect/decal/remains/human,
|
||||
/turf/open/floor/plating/airless,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+7244
-4021
File diff suppressed because it is too large
Load Diff
@@ -2754,12 +2754,12 @@
|
||||
"hT" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/storage/belt/soulstone,
|
||||
/obj/item/clothing/under/schoolgirl,
|
||||
/obj/item/clothing/under/costume/schoolgirl,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/academy/academyaft)
|
||||
"hU" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/clothing/under/skirt/black,
|
||||
/obj/item/clothing/under/dress/skirt,
|
||||
/obj/item/clothing/glasses/regular,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/academy/academyaft)
|
||||
@@ -2772,7 +2772,7 @@
|
||||
"hW" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/lipstick/random,
|
||||
/obj/item/clothing/under/schoolgirl,
|
||||
/obj/item/clothing/under/costume/schoolgirl,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/academy/academyaft)
|
||||
"hX" = (
|
||||
|
||||
@@ -2524,7 +2524,7 @@
|
||||
/area/awaymission/snowdin/post)
|
||||
"fF" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/clothing/under/assistantformal,
|
||||
/obj/item/clothing/under/misc/assistantformal,
|
||||
/obj/item/clothing/suit/hooded/wintercoat,
|
||||
/obj/item/clothing/shoes/winterboots,
|
||||
/obj/effect/turf_decal/bot,
|
||||
|
||||
@@ -2252,7 +2252,7 @@
|
||||
/area/awaymission/centcomAway/hangar)
|
||||
"mQ" = (
|
||||
/obj/structure/safe/floor,
|
||||
/obj/item/clothing/under/rank/centcom_officer,
|
||||
/obj/item/clothing/under/rank/centcom/officer,
|
||||
/obj/item/clothing/suit/det_suit,
|
||||
/obj/item/gun/ballistic/revolver/mateba,
|
||||
/turf/open/indestructible,
|
||||
|
||||
@@ -580,7 +580,7 @@
|
||||
/area/awaymission/caves/BMP_asteroid/level_four)
|
||||
"bH" = (
|
||||
/obj/effect/decal/remains/human,
|
||||
/obj/item/clothing/under/patriotsuit,
|
||||
/obj/item/clothing/under/misc/patriotsuit,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
/obj/structure/bed/nest,
|
||||
/obj/effect/decal/cleanable/blood/gibs,
|
||||
/obj/item/clothing/mask/facehugger/impregnated,
|
||||
/obj/item/clothing/under/rank/security,
|
||||
/obj/item/clothing/under/rank/security/officer,
|
||||
/obj/item/clothing/suit/armor/vest,
|
||||
/obj/item/melee/baton/loaded,
|
||||
/obj/item/clothing/head/helmet,
|
||||
@@ -5718,7 +5718,7 @@
|
||||
name = "personal closet";
|
||||
req_access_txt = "201"
|
||||
},
|
||||
/obj/item/clothing/under/suit_jacket/navy,
|
||||
/obj/item/clothing/under/suit/navy,
|
||||
/turf/open/floor/carpet{
|
||||
heat_capacity = 1e+006
|
||||
},
|
||||
@@ -6008,7 +6008,7 @@
|
||||
name = "Kitchen Crate"
|
||||
},
|
||||
/obj/item/storage/box/mousetraps,
|
||||
/obj/item/clothing/under/waiter,
|
||||
/obj/item/clothing/under/suit/waiter,
|
||||
/turf/open/floor/plasteel/showroomfloor{
|
||||
heat_capacity = 1e+006;
|
||||
temperature = 273.15
|
||||
@@ -6655,7 +6655,7 @@
|
||||
name = "personal closet";
|
||||
req_access_txt = "201"
|
||||
},
|
||||
/obj/item/clothing/under/assistantformal,
|
||||
/obj/item/clothing/under/misc/assistantformal,
|
||||
/turf/open/floor/carpet{
|
||||
heat_capacity = 1e+006
|
||||
},
|
||||
@@ -6823,7 +6823,7 @@
|
||||
/obj/structure/table,
|
||||
/obj/structure/bedsheetbin,
|
||||
/obj/item/clothing/neck/tie/black,
|
||||
/obj/item/clothing/under/lawyer/blacksuit,
|
||||
/obj/item/clothing/under/suit/black,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
@@ -7068,7 +7068,7 @@
|
||||
name = "personal closet";
|
||||
req_access_txt = "201"
|
||||
},
|
||||
/obj/item/clothing/under/suit_jacket/burgundy,
|
||||
/obj/item/clothing/under/suit/burgundy,
|
||||
/turf/open/floor/carpet{
|
||||
heat_capacity = 1e+006
|
||||
},
|
||||
|
||||
@@ -3214,7 +3214,7 @@
|
||||
id_job = "Geneticist";
|
||||
oxy_damage = 55;
|
||||
suit = /obj/item/clothing/suit/toggle/labcoat/genetics;
|
||||
uniform = /obj/item/clothing/under/rank/geneticist;
|
||||
uniform = /obj/item/clothing/under/rank/medical/geneticist;
|
||||
name = "Geneticist"
|
||||
},
|
||||
/obj/effect/decal/cleanable/blood,
|
||||
@@ -4322,7 +4322,7 @@
|
||||
id_job = "Geneticist";
|
||||
oxy_damage = 55;
|
||||
suit = /obj/item/clothing/suit/toggle/labcoat/genetics;
|
||||
uniform = /obj/item/clothing/under/rank/geneticist;
|
||||
uniform = /obj/item/clothing/under/rank/medical/geneticist;
|
||||
name = "Geneticist"
|
||||
},
|
||||
/obj/effect/decal/cleanable/blood,
|
||||
@@ -5173,7 +5173,7 @@
|
||||
id_job = "Geneticist";
|
||||
oxy_damage = 55;
|
||||
suit = /obj/item/clothing/suit/toggle/labcoat/genetics;
|
||||
uniform = /obj/item/clothing/under/rank/geneticist;
|
||||
uniform = /obj/item/clothing/under/rank/medical/geneticist;
|
||||
name = "Geneticist"
|
||||
},
|
||||
/obj/effect/decal/cleanable/blood,
|
||||
@@ -6047,7 +6047,7 @@
|
||||
id_job = "Geneticist";
|
||||
oxy_damage = 55;
|
||||
suit = /obj/item/clothing/suit/toggle/labcoat/genetics;
|
||||
uniform = /obj/item/clothing/under/rank/geneticist;
|
||||
uniform = /obj/item/clothing/under/rank/medical/geneticist;
|
||||
name = "Geneticist"
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
|
||||
@@ -312,7 +312,7 @@
|
||||
name = "personal closet";
|
||||
req_access_txt = "201"
|
||||
},
|
||||
/obj/item/clothing/under/pj/blue,
|
||||
/obj/item/clothing/under/misc/pj/blue,
|
||||
/turf/open/floor/carpet{
|
||||
heat_capacity = 1e+006
|
||||
},
|
||||
@@ -362,7 +362,7 @@
|
||||
name = "personal closet";
|
||||
req_access_txt = "201"
|
||||
},
|
||||
/obj/item/clothing/under/suit_jacket/female,
|
||||
/obj/item/clothing/under/suit/black/skirt,
|
||||
/turf/open/floor/carpet{
|
||||
heat_capacity = 1e+006
|
||||
},
|
||||
@@ -2135,7 +2135,7 @@
|
||||
},
|
||||
/area/awaymission/undergroundoutpost45/caves)
|
||||
"ev" = (
|
||||
/obj/item/clothing/under/pj/red,
|
||||
/obj/item/clothing/under/misc/pj/red,
|
||||
/obj/structure/closet/secure_closet{
|
||||
desc = "It's a secure locker for personnel. The first card swiped gains control.";
|
||||
icon_state = "cabinet";
|
||||
@@ -3130,7 +3130,7 @@
|
||||
name = "Kitchen Crate"
|
||||
},
|
||||
/obj/item/storage/box/mousetraps,
|
||||
/obj/item/clothing/under/waiter,
|
||||
/obj/item/clothing/under/suit/waiter,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel/showroomfloor{
|
||||
heat_capacity = 1e+006
|
||||
@@ -5263,7 +5263,7 @@
|
||||
},
|
||||
/area/awaymission/undergroundoutpost45/gateway)
|
||||
"km" = (
|
||||
/obj/item/clothing/under/suit_jacket/navy,
|
||||
/obj/item/clothing/under/suit/navy,
|
||||
/obj/structure/closet/secure_closet{
|
||||
desc = "It's a secure locker for personnel. The first card swiped gains control.";
|
||||
icon_state = "cabinet";
|
||||
@@ -9706,7 +9706,7 @@
|
||||
name = "personal closet";
|
||||
req_access_txt = "201"
|
||||
},
|
||||
/obj/item/clothing/under/pj/red,
|
||||
/obj/item/clothing/under/misc/pj/red,
|
||||
/turf/open/floor/carpet{
|
||||
heat_capacity = 1e+006
|
||||
},
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "map_files\OmegaStation\OmegaStation.dmm"
|
||||
#include "map_files\PubbyStation\PubbyStation.dmm"
|
||||
#include "map_files\BoxStation\BoxStation.dmm"
|
||||
#include "map_files\LambdaStation\lambda.dmm"
|
||||
|
||||
#ifdef TRAVISBUILDING
|
||||
#include "templates.dm"
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
#define FORCE_MAP "_maps/lambdastation.json"
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"map_name": "Lambda Station",
|
||||
"map_path": "map_files/LambdaStation",
|
||||
"map_file": "lambda.dmm",
|
||||
"shuttles": {
|
||||
"cargo": "cargo_box",
|
||||
"ferry": "ferry_fancy",
|
||||
"whiteship": "whiteship_meta",
|
||||
"emergency": "emergency_meta"
|
||||
}
|
||||
}
|
||||
+5811
-4053
File diff suppressed because it is too large
Load Diff
@@ -4154,7 +4154,7 @@
|
||||
},
|
||||
/obj/item/wirerod,
|
||||
/obj/item/wrench,
|
||||
/obj/item/clothing/under/waiter,
|
||||
/obj/item/clothing/under/suit/waiter,
|
||||
/obj/item/clothing/accessory/waistcoat,
|
||||
/obj/structure/sign/poster/contraband/random{
|
||||
pixel_x = -32
|
||||
@@ -39822,7 +39822,7 @@
|
||||
/obj/structure/closet/secure_closet/hos,
|
||||
/obj/item/clothing/head/HoS/beret,
|
||||
/obj/item/clothing/suit/armor/hos/trenchcoat,
|
||||
/obj/item/clothing/under/rank/head_of_security/grey,
|
||||
/obj/item/clothing/under/rank/security/head_of_security/grey,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 9
|
||||
},
|
||||
@@ -50312,7 +50312,7 @@
|
||||
/obj/item/clothing/suit/det_suit{
|
||||
icon_state = "curator"
|
||||
},
|
||||
/obj/item/clothing/under/rank/det{
|
||||
/obj/item/clothing/under/rank/security/detective{
|
||||
icon_state = "curator"
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -62632,7 +62632,7 @@
|
||||
/area/security/warden)
|
||||
"cbF" = (
|
||||
/obj/structure/closet/secure_closet/warden,
|
||||
/obj/item/clothing/under/rank/warden/grey,
|
||||
/obj/item/clothing/under/rank/security/warden/grey,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
@@ -74042,7 +74042,7 @@
|
||||
/area/maintenance/starboard)
|
||||
"cuG" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/clothing/under/rank/security,
|
||||
/obj/item/clothing/under/rank/security/officer,
|
||||
/obj/item/restraints/handcuffs,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/light/small,
|
||||
@@ -78636,7 +78636,7 @@
|
||||
pixel_x = 26;
|
||||
pixel_y = 26
|
||||
},
|
||||
/obj/item/clothing/under/kilt,
|
||||
/obj/item/clothing/under/costume/kilt,
|
||||
/obj/item/clothing/head/beret,
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 23
|
||||
@@ -78674,7 +78674,7 @@
|
||||
/obj/item/clothing/head/fedora{
|
||||
icon_state = "detective"
|
||||
},
|
||||
/obj/item/clothing/under/geisha,
|
||||
/obj/item/clothing/under/costume/geisha,
|
||||
/obj/item/clothing/head/fedora{
|
||||
icon_state = "curator"
|
||||
},
|
||||
@@ -78682,7 +78682,7 @@
|
||||
desc = "This looks awfully familiar...";
|
||||
icon_state = "curator"
|
||||
},
|
||||
/obj/item/clothing/under/rank/curator/treasure_hunter,
|
||||
/obj/item/clothing/under/rank/civilian/curator/treasure_hunter,
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 23
|
||||
},
|
||||
@@ -81143,7 +81143,7 @@
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/item/folder/blue,
|
||||
/obj/item/clothing/under/rank/centcom_commander{
|
||||
/obj/item/clothing/under/rank/centcom/commander{
|
||||
desc = "A replica of a jumpsuit worn by the highest ranking commanders under Nanotrasen's central command.";
|
||||
name = "Replica CentCom officer's jumpsuit"
|
||||
},
|
||||
@@ -88556,7 +88556,7 @@
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
"cTg" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/clothing/under/sl_suit{
|
||||
/obj/item/clothing/under/suit/sl{
|
||||
name = "referee suit"
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -89705,7 +89705,7 @@
|
||||
/obj/structure/closet/secure_closet/personal/cabinet,
|
||||
/obj/item/clothing/suit/jacket/letterman_nanotrasen,
|
||||
/obj/item/clothing/suit/toggle/lawyer,
|
||||
/obj/item/clothing/under/maid,
|
||||
/obj/item/clothing/under/costume/maid,
|
||||
/obj/item/clothing/head/kitty,
|
||||
/obj/machinery/airalarm{
|
||||
dir = 1;
|
||||
@@ -89733,7 +89733,7 @@
|
||||
/obj/item/clothing/head/fedora{
|
||||
icon_state = "detective"
|
||||
},
|
||||
/obj/item/clothing/under/lawyer/female,
|
||||
/obj/item/clothing/under/rank/civilian/lawyer/female,
|
||||
/obj/machinery/airalarm{
|
||||
dir = 1;
|
||||
pixel_y = -22
|
||||
@@ -89757,7 +89757,7 @@
|
||||
pixel_y = -32
|
||||
},
|
||||
/obj/item/clothing/head/fedora,
|
||||
/obj/item/clothing/under/redeveninggown,
|
||||
/obj/item/clothing/under/dress/redeveninggown,
|
||||
/obj/item/clothing/head/rabbitears,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/crew_quarters/dorms)
|
||||
@@ -90569,7 +90569,6 @@
|
||||
pixel_y = 3
|
||||
},
|
||||
/obj/item/storage/box/syringes,
|
||||
/obj/item/gun/syringe,
|
||||
/obj/machinery/status_display/evac{
|
||||
pixel_x = -32
|
||||
},
|
||||
@@ -90581,6 +90580,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/gun/syringe/dart,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/storage)
|
||||
"cWv" = (
|
||||
@@ -92803,7 +92803,7 @@
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
"dae" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/clothing/under/suit_jacket/really_black,
|
||||
/obj/item/clothing/under/suit/black_really,
|
||||
/obj/item/cane,
|
||||
/obj/item/clothing/head/bowler{
|
||||
pixel_y = 5
|
||||
@@ -98184,7 +98184,7 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/clothing/suit/toggle/owlwings,
|
||||
/obj/item/clothing/under/owl,
|
||||
/obj/item/clothing/under/costume/owl,
|
||||
/obj/item/clothing/mask/gas/owl_mask,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/aft)
|
||||
@@ -99195,7 +99195,7 @@
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/machinery/light/small,
|
||||
/obj/structure/bedsheetbin,
|
||||
/obj/item/gun/syringe,
|
||||
/obj/item/gun/syringe/dart,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
@@ -106576,11 +106576,11 @@
|
||||
/obj/item/clothing/mask/muzzle,
|
||||
/obj/item/clothing/glasses/sunglasses/blindfold,
|
||||
/obj/item/clothing/ears/earmuffs,
|
||||
/obj/item/gun/syringe,
|
||||
/obj/item/clothing/glasses/eyepatch,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/gun/syringe/dart,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/surgery)
|
||||
"dyE" = (
|
||||
@@ -110502,7 +110502,7 @@
|
||||
/area/medical/medbay/central)
|
||||
"dFk" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/clothing/under/maid,
|
||||
/obj/item/clothing/under/costume/maid,
|
||||
/obj/item/clothing/head/kitty,
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
@@ -111362,7 +111362,7 @@
|
||||
/area/maintenance/department/medical/morgue)
|
||||
"dGw" = (
|
||||
/obj/structure/closet/secure_closet/CMO,
|
||||
/obj/item/clothing/under/rank/nursesuit,
|
||||
/obj/item/clothing/under/rank/medical/doctor/nurse,
|
||||
/obj/item/clothing/head/nursehat,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 5
|
||||
@@ -113664,7 +113664,7 @@
|
||||
/area/crew_quarters/theatre/abandoned)
|
||||
"dKr" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/clothing/under/geisha,
|
||||
/obj/item/clothing/under/costume/geisha,
|
||||
/obj/item/clothing/shoes/sandal,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
@@ -121170,7 +121170,7 @@
|
||||
/area/library/abandoned)
|
||||
"dYm" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/clothing/under/rank/curator,
|
||||
/obj/item/clothing/under/rank/civilian/curator,
|
||||
/obj/effect/spawner/lootdrop/maintenance{
|
||||
lootcount = 2;
|
||||
name = "2maintenance loot spawner"
|
||||
@@ -125929,12 +125929,12 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/table,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/chapel/office)
|
||||
"gbV" = (
|
||||
@@ -126052,7 +126052,7 @@
|
||||
/area/science/circuit)
|
||||
"gVS" = (
|
||||
/obj/item/clothing/head/kitty,
|
||||
/obj/item/clothing/under/maid,
|
||||
/obj/item/clothing/under/costume/maid,
|
||||
/obj/item/clothing/mask/muzzle,
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/abandoned_gambling_den)
|
||||
@@ -126360,6 +126360,20 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/science/mixing)
|
||||
"jwo" = (
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/simple_animal/pet/bumbles,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hydroponics)
|
||||
"jBE" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -160698,7 +160712,7 @@ bjt
|
||||
bli
|
||||
bnk
|
||||
boB
|
||||
bnj
|
||||
jwo
|
||||
bnj
|
||||
bnh
|
||||
bvB
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -4556,7 +4556,7 @@
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
"aiR" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/clothing/under/sl_suit{
|
||||
/obj/item/clothing/under/suit/sl{
|
||||
desc = "Whoever wears this makes the rules.";
|
||||
name = "referee suit"
|
||||
},
|
||||
@@ -6918,8 +6918,8 @@
|
||||
/area/maintenance/port)
|
||||
"ana" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/clothing/under/rank/mailman,
|
||||
/obj/item/clothing/under/rank/vice{
|
||||
/obj/item/clothing/under/misc/mailman,
|
||||
/obj/item/clothing/under/misc/vice_officer{
|
||||
pixel_x = 4;
|
||||
pixel_y = -3
|
||||
},
|
||||
@@ -7555,7 +7555,7 @@
|
||||
c_tag = "Brig - Infirmary";
|
||||
dir = 1
|
||||
},
|
||||
/obj/item/clothing/under/rank/medical/purple{
|
||||
/obj/item/clothing/under/rank/medical/doctor/purple{
|
||||
pixel_y = -4
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
@@ -8886,7 +8886,7 @@
|
||||
/obj/structure/chair,
|
||||
/obj/item/restraints/handcuffs,
|
||||
/obj/effect/decal/remains/human,
|
||||
/obj/item/clothing/under/soviet,
|
||||
/obj/item/clothing/under/costume/soviet,
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
@@ -9965,7 +9965,7 @@
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 23
|
||||
},
|
||||
/obj/item/clothing/under/assistantformal,
|
||||
/obj/item/clothing/under/misc/assistantformal,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"asV" = (
|
||||
@@ -10042,7 +10042,7 @@
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 23
|
||||
},
|
||||
/obj/item/clothing/under/suit_jacket/burgundy,
|
||||
/obj/item/clothing/under/suit/burgundy,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"atc" = (
|
||||
@@ -11693,7 +11693,7 @@
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 23
|
||||
},
|
||||
/obj/item/clothing/under/suit_jacket/tan,
|
||||
/obj/item/clothing/under/suit/tan,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"awE" = (
|
||||
@@ -13402,11 +13402,11 @@
|
||||
/area/crew_quarters/dorms)
|
||||
"aAe" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/clothing/under/suit_jacket/female{
|
||||
/obj/item/clothing/under/suit/black/skirt{
|
||||
pixel_x = 3;
|
||||
pixel_y = 1
|
||||
},
|
||||
/obj/item/clothing/under/suit_jacket/really_black{
|
||||
/obj/item/clothing/under/suit/black_really{
|
||||
pixel_x = -2
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
@@ -13418,9 +13418,9 @@
|
||||
},
|
||||
/obj/item/clothing/accessory/waistcoat,
|
||||
/obj/item/clothing/suit/toggle/lawyer/black,
|
||||
/obj/item/clothing/under/suit_jacket/red,
|
||||
/obj/item/clothing/under/suit/red,
|
||||
/obj/item/clothing/neck/tie/black,
|
||||
/obj/item/clothing/under/lawyer/blacksuit,
|
||||
/obj/item/clothing/under/suit/black,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
@@ -14755,7 +14755,7 @@
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 23
|
||||
},
|
||||
/obj/item/clothing/under/suit_jacket/navy,
|
||||
/obj/item/clothing/under/suit/navy,
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/dorms)
|
||||
"aCM" = (
|
||||
@@ -16789,7 +16789,7 @@
|
||||
/area/crew_quarters/dorms)
|
||||
"aGP" = (
|
||||
/obj/structure/closet/secure_closet/personal/cabinet,
|
||||
/obj/item/clothing/under/assistantformal,
|
||||
/obj/item/clothing/under/misc/assistantformal,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
"aGQ" = (
|
||||
@@ -23603,7 +23603,7 @@
|
||||
/area/maintenance/starboard/fore)
|
||||
"aUX" = (
|
||||
/obj/structure/closet/secure_closet/personal,
|
||||
/obj/item/clothing/under/assistantformal,
|
||||
/obj/item/clothing/under/misc/assistantformal,
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
|
||||
/obj/item/clothing/suit/hooded/wintercoat,
|
||||
/obj/item/clothing/shoes/winterboots,
|
||||
@@ -26182,7 +26182,7 @@
|
||||
/area/ai_monitored/turret_protected/ai)
|
||||
"aZU" = (
|
||||
/obj/structure/closet/secure_closet/personal,
|
||||
/obj/item/clothing/under/assistantformal,
|
||||
/obj/item/clothing/under/misc/assistantformal,
|
||||
/obj/item/clothing/suit/hooded/wintercoat,
|
||||
/obj/item/clothing/shoes/winterboots,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -26345,7 +26345,7 @@
|
||||
/area/maintenance/port/fore)
|
||||
"bah" = (
|
||||
/obj/structure/closet/secure_closet/personal,
|
||||
/obj/item/clothing/under/assistantformal,
|
||||
/obj/item/clothing/under/misc/assistantformal,
|
||||
/obj/structure/sign/map/right{
|
||||
desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown).";
|
||||
icon_state = "map-right-MS";
|
||||
@@ -27278,7 +27278,7 @@
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
},
|
||||
/obj/item/clothing/under/assistantformal,
|
||||
/obj/item/clothing/under/misc/assistantformal,
|
||||
/obj/structure/sign/map/left{
|
||||
desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown).";
|
||||
icon_state = "map-left-MS";
|
||||
@@ -29748,21 +29748,21 @@
|
||||
name = "formal uniform crate";
|
||||
req_access_txt = "3"
|
||||
},
|
||||
/obj/item/clothing/under/rank/security/navyblue,
|
||||
/obj/item/clothing/under/rank/security/navyblue,
|
||||
/obj/item/clothing/under/rank/security/navyblue,
|
||||
/obj/item/clothing/under/rank/security/navyblue,
|
||||
/obj/item/clothing/under/rank/security/navyblue,
|
||||
/obj/item/clothing/under/rank/security/navyblue,
|
||||
/obj/item/clothing/under/rank/security/officer/formal,
|
||||
/obj/item/clothing/under/rank/security/officer/formal,
|
||||
/obj/item/clothing/under/rank/security/officer/formal,
|
||||
/obj/item/clothing/under/rank/security/officer/formal,
|
||||
/obj/item/clothing/under/rank/security/officer/formal,
|
||||
/obj/item/clothing/under/rank/security/officer/formal,
|
||||
/obj/item/clothing/suit/armor/navyblue,
|
||||
/obj/item/clothing/suit/armor/navyblue,
|
||||
/obj/item/clothing/suit/armor/navyblue,
|
||||
/obj/item/clothing/suit/armor/navyblue,
|
||||
/obj/item/clothing/suit/armor/navyblue,
|
||||
/obj/item/clothing/suit/armor/navyblue,
|
||||
/obj/item/clothing/under/rank/warden/navyblue,
|
||||
/obj/item/clothing/under/rank/security/warden/formal,
|
||||
/obj/item/clothing/suit/armor/vest/warden/navyblue,
|
||||
/obj/item/clothing/under/rank/head_of_security/navyblue,
|
||||
/obj/item/clothing/under/rank/security/head_of_security/formal,
|
||||
/obj/item/clothing/suit/armor/hos/navyblue,
|
||||
/obj/item/clothing/head/beret/sec/navyofficer,
|
||||
/obj/item/clothing/head/beret/sec/navyofficer,
|
||||
@@ -46039,7 +46039,7 @@
|
||||
},
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/clothing/shoes/laceup,
|
||||
/obj/item/clothing/under/suit_jacket/really_black,
|
||||
/obj/item/clothing/under/suit/black_really,
|
||||
/obj/item/clothing/glasses/sunglasses,
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Corporate Showroom"
|
||||
@@ -47330,7 +47330,7 @@
|
||||
/obj/machinery/newscaster{
|
||||
pixel_x = -30
|
||||
},
|
||||
/obj/item/clothing/under/suit_jacket/red,
|
||||
/obj/item/clothing/under/suit/red,
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
/obj/item/book/codex_gigas,
|
||||
/turf/open/floor/engine/cult,
|
||||
@@ -54133,7 +54133,6 @@
|
||||
/obj/item/clothing/glasses/hud/health,
|
||||
/obj/item/clothing/glasses/hud/health,
|
||||
/obj/item/clothing/glasses/hud/health,
|
||||
/obj/item/gun/syringe,
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1
|
||||
},
|
||||
@@ -54146,6 +54145,7 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/gun/syringe/dart,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/storage)
|
||||
"cds" = (
|
||||
@@ -59207,13 +59207,13 @@
|
||||
},
|
||||
/obj/item/clothing/suit/straight_jacket,
|
||||
/obj/item/clothing/mask/muzzle,
|
||||
/obj/item/gun/syringe,
|
||||
/obj/item/clothing/glasses/eyepatch,
|
||||
/obj/item/clothing/glasses/sunglasses/blindfold,
|
||||
/obj/item/clothing/ears/earmuffs,
|
||||
/obj/item/storage/belt/medical{
|
||||
pixel_y = 2
|
||||
},
|
||||
/obj/item/gun/syringe/dart,
|
||||
/turf/open/floor/plasteel/white/side,
|
||||
/area/medical/surgery)
|
||||
"cnu" = (
|
||||
@@ -61843,7 +61843,7 @@
|
||||
"csa" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/restraints/handcuffs/cable/white,
|
||||
/obj/item/gun/syringe,
|
||||
/obj/item/gun/syringe/dart,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/aft)
|
||||
"csb" = (
|
||||
@@ -72433,12 +72433,12 @@
|
||||
pixel_x = -26
|
||||
},
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/chapel/office)
|
||||
"cLW" = (
|
||||
@@ -82724,6 +82724,14 @@
|
||||
/obj/structure/grille,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
"soe" = (
|
||||
/obj/effect/turf_decal/tile/green,
|
||||
/obj/effect/turf_decal/tile/green{
|
||||
dir = 4
|
||||
},
|
||||
/mob/living/simple_animal/pet/bumbles,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hydroponics)
|
||||
"soh" = (
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "4-8"
|
||||
@@ -117831,7 +117839,7 @@ bSV
|
||||
bUk
|
||||
bVv
|
||||
bWQ
|
||||
bWQ
|
||||
soe
|
||||
bWQ
|
||||
caL
|
||||
ccv
|
||||
|
||||
+4449
-5544
File diff suppressed because it is too large
Load Diff
@@ -12660,7 +12660,7 @@
|
||||
/area/maintenance/port/fore)
|
||||
"avQ" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/clothing/under/rank/security,
|
||||
/obj/item/clothing/under/rank/security/officer,
|
||||
/obj/item/restraints/handcuffs,
|
||||
/obj/structure/cable/white,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
@@ -13692,7 +13692,7 @@
|
||||
/obj/structure/closet/secure_closet/personal/cabinet,
|
||||
/obj/item/clothing/suit/jacket/letterman_nanotrasen,
|
||||
/obj/item/clothing/suit/toggle/lawyer,
|
||||
/obj/item/clothing/under/maid,
|
||||
/obj/item/clothing/under/costume/maid,
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
},
|
||||
@@ -13716,7 +13716,7 @@
|
||||
/obj/item/clothing/head/fedora{
|
||||
icon_state = "detective"
|
||||
},
|
||||
/obj/item/clothing/under/geisha,
|
||||
/obj/item/clothing/under/costume/geisha,
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
},
|
||||
@@ -17365,7 +17365,7 @@
|
||||
/obj/item/clothing/head/fedora{
|
||||
icon_state = "detective"
|
||||
},
|
||||
/obj/item/clothing/under/lawyer/female,
|
||||
/obj/item/clothing/under/rank/civilian/lawyer/female,
|
||||
/obj/machinery/light/small,
|
||||
/turf/open/floor/wood,
|
||||
/area/crew_quarters/dorms)
|
||||
@@ -17387,7 +17387,7 @@
|
||||
},
|
||||
/obj/item/clothing/suit/toggle/lawyer/black,
|
||||
/obj/item/clothing/head/fedora,
|
||||
/obj/item/clothing/under/blacktango,
|
||||
/obj/item/clothing/under/dress/blacktango,
|
||||
/obj/machinery/light/small,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/crew_quarters/dorms)
|
||||
@@ -27696,12 +27696,12 @@
|
||||
pixel_y = 3
|
||||
},
|
||||
/obj/item/storage/box/syringes,
|
||||
/obj/item/gun/syringe,
|
||||
/obj/item/reagent_containers/hypospray/CMO,
|
||||
/obj/item/storage/belt/medical,
|
||||
/obj/item/storage/belt/medical,
|
||||
/obj/item/clothing/neck/stethoscope,
|
||||
/obj/item/clothing/neck/stethoscope,
|
||||
/obj/item/gun/syringe/dart,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/medbay/zone3)
|
||||
"aXR" = (
|
||||
|
||||
@@ -18191,7 +18191,7 @@
|
||||
/obj/structure/chair/wood/normal{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/clothing/under/janimaid,
|
||||
/obj/item/clothing/under/rank/civilian/janitor/maid,
|
||||
/turf/open/floor/wood{
|
||||
icon_state = "wood-broken"
|
||||
},
|
||||
@@ -20830,7 +20830,7 @@
|
||||
/area/janitor)
|
||||
"aXP" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/clothing/under/maid,
|
||||
/obj/item/clothing/under/costume/maid,
|
||||
/obj/item/key/janitor,
|
||||
/obj/item/grenade/clusterbuster/cleaner,
|
||||
/obj/item/grenade/chem_grenade/cleaner,
|
||||
@@ -22504,14 +22504,6 @@
|
||||
/obj/effect/turf_decal/tile/green,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hydroponics)
|
||||
"bbe" = (
|
||||
/obj/structure/chair/stool,
|
||||
/obj/effect/turf_decal/tile/green,
|
||||
/obj/effect/turf_decal/tile/green{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hydroponics)
|
||||
"bbg" = (
|
||||
/obj/effect/landmark/start/cook,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
||||
@@ -22599,9 +22591,9 @@
|
||||
"bbt" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/clothing/under/sundress,
|
||||
/obj/item/clothing/under/waiter,
|
||||
/obj/item/clothing/under/blacktango,
|
||||
/obj/item/clothing/under/dress/sundress,
|
||||
/obj/item/clothing/under/suit/waiter,
|
||||
/obj/item/clothing/under/dress/blacktango,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/bar)
|
||||
"bbu" = (
|
||||
@@ -22661,7 +22653,7 @@
|
||||
pixel_x = 6;
|
||||
pixel_y = -5
|
||||
},
|
||||
/obj/item/clothing/under/rank/mailman,
|
||||
/obj/item/clothing/under/misc/mailman,
|
||||
/obj/item/clothing/head/mailman,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/quartermaster/office)
|
||||
@@ -35727,7 +35719,7 @@
|
||||
icon_state = "2-4"
|
||||
},
|
||||
/obj/structure/closet,
|
||||
/obj/item/clothing/under/rank/nursesuit,
|
||||
/obj/item/clothing/under/rank/medical/doctor/nurse,
|
||||
/obj/item/clothing/head/nursehat,
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
/obj/machinery/airalarm{
|
||||
@@ -39520,7 +39512,6 @@
|
||||
"bMK" = (
|
||||
/obj/item/soap/nanotrasen,
|
||||
/obj/item/clothing/neck/stethoscope,
|
||||
/obj/item/gun/syringe,
|
||||
/obj/structure/table/glass,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
@@ -39529,6 +39520,7 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/gun/syringe/dart,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"bMM" = (
|
||||
@@ -51429,10 +51421,10 @@
|
||||
/turf/open/floor/carpet,
|
||||
/area/chapel/main/monastery)
|
||||
"cwz" = (
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/obj/item/clothing/under/misc/burial,
|
||||
/obj/structure/table/wood,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/chapel/main/monastery)
|
||||
@@ -55848,7 +55840,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/secondary/exit/departure_lounge)
|
||||
"klV" = (
|
||||
/obj/item/clothing/under/rank/clown/sexy,
|
||||
/obj/item/clothing/under/rank/civilian/clown/sexy,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/maintenance/department/crew_quarters/dorms)
|
||||
"kmd" = (
|
||||
@@ -59851,6 +59843,15 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/science/xenobiology)
|
||||
"ttS" = (
|
||||
/obj/structure/chair/stool,
|
||||
/obj/effect/turf_decal/tile/green,
|
||||
/obj/effect/turf_decal/tile/green{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/simple_animal/pet/bumbles,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hydroponics)
|
||||
"tue" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-4"
|
||||
@@ -90071,7 +90072,7 @@ aRN
|
||||
aXZ
|
||||
aYQ
|
||||
aXS
|
||||
bbe
|
||||
ttS
|
||||
bcd
|
||||
bdo
|
||||
ben
|
||||
|
||||
@@ -1711,14 +1711,14 @@
|
||||
/obj/structure/table,
|
||||
/obj/item/paper,
|
||||
/obj/item/pen,
|
||||
/obj/item/clothing/under/schoolgirl,
|
||||
/obj/item/clothing/under/costume/schoolgirl,
|
||||
/turf/open/floor/holofloor,
|
||||
/area/holodeck/rec_center/school)
|
||||
"eD" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/paper,
|
||||
/obj/item/pen,
|
||||
/obj/item/clothing/under/schoolgirl/green,
|
||||
/obj/item/clothing/under/costume/schoolgirl/green,
|
||||
/turf/open/floor/holofloor,
|
||||
/area/holodeck/rec_center/school)
|
||||
"eE" = (
|
||||
@@ -1832,14 +1832,14 @@
|
||||
/obj/structure/table,
|
||||
/obj/item/paper,
|
||||
/obj/item/pen,
|
||||
/obj/item/clothing/under/schoolgirl/orange,
|
||||
/obj/item/clothing/under/costume/schoolgirl/orange,
|
||||
/turf/open/floor/holofloor,
|
||||
/area/holodeck/rec_center/school)
|
||||
"eU" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/paper,
|
||||
/obj/item/pen,
|
||||
/obj/item/clothing/under/schoolgirl/red,
|
||||
/obj/item/clothing/under/costume/schoolgirl/red,
|
||||
/turf/open/floor/holofloor,
|
||||
/area/holodeck/rec_center/school)
|
||||
"eV" = (
|
||||
@@ -1934,7 +1934,7 @@
|
||||
/obj/structure/table,
|
||||
/obj/item/paper,
|
||||
/obj/item/pen,
|
||||
/obj/item/clothing/under/schoolgirl,
|
||||
/obj/item/clothing/under/costume/schoolgirl,
|
||||
/obj/item/toy/katana,
|
||||
/turf/open/floor/holofloor,
|
||||
/area/holodeck/rec_center/school)
|
||||
@@ -6839,8 +6839,8 @@
|
||||
/area/centcom/ferry)
|
||||
"pN" = (
|
||||
/obj/structure/closet/secure_closet/personal/cabinet,
|
||||
/obj/item/clothing/under/rank/curator/treasure_hunter,
|
||||
/obj/item/clothing/under/skirt/black,
|
||||
/obj/item/clothing/under/rank/civilian/curator/treasure_hunter,
|
||||
/obj/item/clothing/under/dress/skirt,
|
||||
/obj/item/clothing/under/shorts/black,
|
||||
/obj/item/clothing/under/pants/track,
|
||||
/obj/item/clothing/accessory/armband/deputy,
|
||||
@@ -17017,11 +17017,11 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/centcom/holding)
|
||||
"OU" = (
|
||||
/obj/item/clothing/under/jabroni,
|
||||
/obj/item/clothing/under/geisha,
|
||||
/obj/item/clothing/under/kilt,
|
||||
/obj/item/clothing/under/costume/jabroni,
|
||||
/obj/item/clothing/under/costume/geisha,
|
||||
/obj/item/clothing/under/costume/kilt,
|
||||
/obj/structure/closet,
|
||||
/obj/item/clothing/under/roman,
|
||||
/obj/item/clothing/under/costume/roman,
|
||||
/turf/open/indestructible/hotelwood,
|
||||
/area/centcom/holding)
|
||||
"OV" = (
|
||||
|
||||
@@ -0,0 +1,278 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"b" = (
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/shuttle/arrival)
|
||||
"c" = (
|
||||
/obj/structure/shuttle/engine/propulsion/right{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/arrival)
|
||||
"d" = (
|
||||
/obj/structure/shuttle/engine/propulsion/left{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/arrival)
|
||||
"e" = (
|
||||
/obj/docking_port/mobile/arrivals{
|
||||
dir = 2;
|
||||
dwidth = 4;
|
||||
height = 12;
|
||||
name = "cog arrivals shuttle";
|
||||
width = 9
|
||||
},
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"f" = (
|
||||
/turf/closed/wall/mineral/titanium/nosmooth,
|
||||
/area/shuttle/arrival)
|
||||
"g" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/window/reinforced/spawner,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/arrival)
|
||||
"h" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
dir = 1
|
||||
},
|
||||
/turf/closed/wall/mineral/titanium/nosmooth,
|
||||
/area/shuttle/arrival)
|
||||
"i" = (
|
||||
/obj/machinery/sleeper,
|
||||
/obj/machinery/light{
|
||||
dir = 8;
|
||||
light_color = "#e8eaff"
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/white,
|
||||
/area/shuttle/arrival)
|
||||
"j" = (
|
||||
/obj/structure/closet/emcloset/anchored,
|
||||
/turf/open/floor/mineral/titanium/white,
|
||||
/area/shuttle/arrival)
|
||||
"k" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/radio,
|
||||
/obj/item/storage/toolbox/emergency,
|
||||
/turf/open/floor/mineral/titanium/white,
|
||||
/area/shuttle/arrival)
|
||||
"l" = (
|
||||
/obj/machinery/sleeper,
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/white,
|
||||
/area/shuttle/arrival)
|
||||
"m" = (
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"n" = (
|
||||
/obj/structure/window/shuttle,
|
||||
/obj/structure/grille,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/arrival)
|
||||
"o" = (
|
||||
/obj/structure/chair/comfy/shuttle,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"p" = (
|
||||
/obj/structure/chair/comfy/shuttle,
|
||||
/obj/machinery/light{
|
||||
dir = 8;
|
||||
light_color = "#e8eaff"
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"q" = (
|
||||
/obj/structure/chair/comfy/shuttle,
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"r" = (
|
||||
/obj/machinery/door/airlock/external{
|
||||
name = "Arrival Shuttle Airlock"
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/arrival)
|
||||
"s" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/storage/firstaid/regular,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"t" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/storage/toolbox/emergency,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"u" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"v" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/radio,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"w" = (
|
||||
/obj/machinery/computer{
|
||||
dir = 1;
|
||||
name = "Shuttle computer"
|
||||
},
|
||||
/obj/machinery/light{
|
||||
dir = 8;
|
||||
light_color = "#e8eaff"
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"x" = (
|
||||
/obj/machinery/computer{
|
||||
dir = 1;
|
||||
name = "Shuttle computer"
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
"y" = (
|
||||
/obj/machinery/computer{
|
||||
dir = 1;
|
||||
name = "Shuttle computer"
|
||||
},
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/arrival)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
c
|
||||
h
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
b
|
||||
f
|
||||
b
|
||||
b
|
||||
n
|
||||
b
|
||||
b
|
||||
r
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
c
|
||||
g
|
||||
i
|
||||
m
|
||||
o
|
||||
o
|
||||
p
|
||||
m
|
||||
s
|
||||
u
|
||||
b
|
||||
b
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
d
|
||||
g
|
||||
j
|
||||
m
|
||||
o
|
||||
o
|
||||
o
|
||||
m
|
||||
o
|
||||
o
|
||||
w
|
||||
n
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
e
|
||||
f
|
||||
k
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
x
|
||||
n
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
c
|
||||
g
|
||||
j
|
||||
m
|
||||
o
|
||||
o
|
||||
o
|
||||
m
|
||||
o
|
||||
o
|
||||
y
|
||||
n
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
d
|
||||
g
|
||||
l
|
||||
m
|
||||
o
|
||||
o
|
||||
q
|
||||
m
|
||||
t
|
||||
v
|
||||
b
|
||||
b
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
b
|
||||
f
|
||||
b
|
||||
b
|
||||
n
|
||||
b
|
||||
b
|
||||
r
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
a
|
||||
d
|
||||
h
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
@@ -0,0 +1,546 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"b" = (
|
||||
/obj/structure/shuttle/engine/propulsion{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/escape)
|
||||
"c" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/escape)
|
||||
"d" = (
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/shuttle/escape)
|
||||
"e" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/escape)
|
||||
"f" = (
|
||||
/obj/machinery/status_display/evac,
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/shuttle/escape)
|
||||
"g" = (
|
||||
/obj/machinery/door/airlock/titanium{
|
||||
name = "Emergency Shuttle Airlock"
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/escape)
|
||||
"h" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/escape)
|
||||
"i" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/shuttle/escape)
|
||||
"j" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/storage/toolbox/emergency,
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/yellow,
|
||||
/area/shuttle/escape)
|
||||
"k" = (
|
||||
/obj/structure/chair/comfy/brown{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/yellow,
|
||||
/area/shuttle/escape)
|
||||
"l" = (
|
||||
/obj/machinery/vending/wallmed,
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/shuttle/escape)
|
||||
"m" = (
|
||||
/obj/effect/spawner/structure/window/shuttle,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/escape)
|
||||
"n" = (
|
||||
/turf/open/floor/mineral/titanium/white,
|
||||
/area/shuttle/escape)
|
||||
"o" = (
|
||||
/obj/machinery/door/airlock/titanium{
|
||||
name = "Emergency Shuttle Airlock"
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/docking_port/mobile/emergency{
|
||||
dheight = 0;
|
||||
dir = 2;
|
||||
dwidth = 9;
|
||||
name = "NES Classic";
|
||||
width = 22
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/escape)
|
||||
"p" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/escape)
|
||||
"q" = (
|
||||
/obj/machinery/sleeper,
|
||||
/turf/open/floor/mineral/titanium/white,
|
||||
/area/shuttle/escape)
|
||||
"r" = (
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/shuttle/escape)
|
||||
"s" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/escape)
|
||||
"t" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/shuttle/escape)
|
||||
"u" = (
|
||||
/obj/structure/chair/comfy/brown{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/yellow,
|
||||
/area/shuttle/escape)
|
||||
"v" = (
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/radio,
|
||||
/turf/open/floor/mineral/titanium/yellow,
|
||||
/area/shuttle/escape)
|
||||
"w" = (
|
||||
/obj/machinery/door/airlock/public/glass{
|
||||
name = "Emergency Shuttle Infirmary"
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/white,
|
||||
/area/shuttle/escape)
|
||||
"x" = (
|
||||
/obj/machinery/door/airlock/public/glass{
|
||||
name = "Emergency Shuttle Cockpit";
|
||||
req_access_txt = "19"
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/yellow,
|
||||
/area/shuttle/escape)
|
||||
"y" = (
|
||||
/turf/open/floor/mineral/titanium/yellow,
|
||||
/area/shuttle/escape)
|
||||
"z" = (
|
||||
/obj/machinery/computer/emergency_shuttle{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/yellow,
|
||||
/area/shuttle/escape)
|
||||
"A" = (
|
||||
/obj/structure/chair/comfy/brown{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/light/small,
|
||||
/turf/open/floor/mineral/titanium/yellow,
|
||||
/area/shuttle/escape)
|
||||
"B" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced,
|
||||
/obj/item/storage/firstaid/regular,
|
||||
/turf/open/floor/mineral/titanium/yellow,
|
||||
/area/shuttle/escape)
|
||||
"C" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/storage/firstaid/regular,
|
||||
/obj/structure/window/reinforced,
|
||||
/turf/open/floor/mineral/titanium/yellow,
|
||||
/area/shuttle/escape)
|
||||
"D" = (
|
||||
/obj/machinery/light,
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/shuttle/escape)
|
||||
"H" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/mineral/plastitanium/red/brig,
|
||||
/area/shuttle/escape)
|
||||
"J" = (
|
||||
/turf/open/floor/mineral/plastitanium/red/brig,
|
||||
/area/shuttle/escape)
|
||||
"K" = (
|
||||
/obj/machinery/door/airlock/public/glass{
|
||||
name = "Emergency Shuttle Brig";
|
||||
req_access_txt = "2"
|
||||
},
|
||||
/turf/open/floor/mineral/plastitanium/red/brig,
|
||||
/area/shuttle/escape)
|
||||
"P" = (
|
||||
/obj/structure/table/optable,
|
||||
/turf/open/floor/mineral/titanium/white,
|
||||
/area/shuttle/escape)
|
||||
"Q" = (
|
||||
/obj/machinery/light,
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/shuttle/escape)
|
||||
"R" = (
|
||||
/obj/machinery/light/small,
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/backpack/duffelbag/med/surgery,
|
||||
/turf/open/floor/mineral/titanium/white,
|
||||
/area/shuttle/escape)
|
||||
"T" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/mineral/plastitanium/red/brig,
|
||||
/area/shuttle/escape)
|
||||
"V" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/mineral/titanium,
|
||||
/area/shuttle/escape)
|
||||
"W" = (
|
||||
/obj/structure/shuttle/engine/propulsion{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/escape)
|
||||
"X" = (
|
||||
/obj/structure/shuttle/engine/propulsion{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/escape)
|
||||
"Y" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/window/reinforced,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/escape)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
d
|
||||
b
|
||||
b
|
||||
b
|
||||
d
|
||||
b
|
||||
b
|
||||
b
|
||||
d
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
W
|
||||
d
|
||||
p
|
||||
p
|
||||
p
|
||||
d
|
||||
p
|
||||
p
|
||||
p
|
||||
d
|
||||
X
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
c
|
||||
d
|
||||
q
|
||||
n
|
||||
P
|
||||
d
|
||||
H
|
||||
H
|
||||
H
|
||||
d
|
||||
Y
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
d
|
||||
l
|
||||
q
|
||||
n
|
||||
R
|
||||
d
|
||||
T
|
||||
J
|
||||
H
|
||||
d
|
||||
d
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
d
|
||||
d
|
||||
d
|
||||
w
|
||||
f
|
||||
d
|
||||
f
|
||||
K
|
||||
d
|
||||
d
|
||||
d
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
d
|
||||
t
|
||||
t
|
||||
r
|
||||
s
|
||||
s
|
||||
s
|
||||
r
|
||||
s
|
||||
s
|
||||
d
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
g
|
||||
r
|
||||
r
|
||||
r
|
||||
s
|
||||
s
|
||||
s
|
||||
r
|
||||
s
|
||||
s
|
||||
m
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
m
|
||||
r
|
||||
r
|
||||
Q
|
||||
d
|
||||
m
|
||||
d
|
||||
V
|
||||
s
|
||||
s
|
||||
m
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
g
|
||||
r
|
||||
r
|
||||
r
|
||||
r
|
||||
r
|
||||
r
|
||||
r
|
||||
s
|
||||
s
|
||||
m
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
m
|
||||
r
|
||||
r
|
||||
s
|
||||
s
|
||||
s
|
||||
s
|
||||
r
|
||||
r
|
||||
r
|
||||
m
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
d
|
||||
d
|
||||
r
|
||||
s
|
||||
s
|
||||
s
|
||||
s
|
||||
r
|
||||
r
|
||||
d
|
||||
d
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
m
|
||||
h
|
||||
r
|
||||
r
|
||||
r
|
||||
r
|
||||
r
|
||||
r
|
||||
r
|
||||
h
|
||||
m
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
d
|
||||
e
|
||||
s
|
||||
s
|
||||
s
|
||||
r
|
||||
s
|
||||
s
|
||||
s
|
||||
D
|
||||
d
|
||||
"}
|
||||
(14,1,1) = {"
|
||||
m
|
||||
s
|
||||
s
|
||||
s
|
||||
s
|
||||
r
|
||||
s
|
||||
s
|
||||
s
|
||||
s
|
||||
m
|
||||
"}
|
||||
(15,1,1) = {"
|
||||
o
|
||||
r
|
||||
r
|
||||
r
|
||||
r
|
||||
r
|
||||
s
|
||||
s
|
||||
s
|
||||
s
|
||||
m
|
||||
"}
|
||||
(16,1,1) = {"
|
||||
m
|
||||
r
|
||||
r
|
||||
s
|
||||
s
|
||||
r
|
||||
s
|
||||
s
|
||||
s
|
||||
s
|
||||
m
|
||||
"}
|
||||
(17,1,1) = {"
|
||||
g
|
||||
r
|
||||
r
|
||||
r
|
||||
i
|
||||
r
|
||||
i
|
||||
r
|
||||
r
|
||||
r
|
||||
d
|
||||
"}
|
||||
(18,1,1) = {"
|
||||
d
|
||||
d
|
||||
d
|
||||
m
|
||||
d
|
||||
x
|
||||
f
|
||||
m
|
||||
d
|
||||
d
|
||||
d
|
||||
"}
|
||||
(19,1,1) = {"
|
||||
a
|
||||
a
|
||||
m
|
||||
j
|
||||
k
|
||||
y
|
||||
k
|
||||
C
|
||||
m
|
||||
a
|
||||
a
|
||||
"}
|
||||
(20,1,1) = {"
|
||||
a
|
||||
a
|
||||
d
|
||||
d
|
||||
u
|
||||
k
|
||||
A
|
||||
d
|
||||
d
|
||||
a
|
||||
a
|
||||
"}
|
||||
(21,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
m
|
||||
v
|
||||
z
|
||||
B
|
||||
m
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(22,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
d
|
||||
m
|
||||
m
|
||||
m
|
||||
d
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
@@ -520,7 +520,7 @@
|
||||
/obj/structure/window/reinforced,
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/bag/tray,
|
||||
/obj/item/clothing/under/waiter,
|
||||
/obj/item/clothing/under/suit/waiter,
|
||||
/turf/open/floor/plasteel/cafeteria,
|
||||
/area/shuttle/escape)
|
||||
"bg" = (
|
||||
|
||||
@@ -0,0 +1,349 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/shuttle/labor)
|
||||
"b" = (
|
||||
/obj/structure/shuttle/engine/propulsion{
|
||||
icon_state = "propulsion";
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/shuttle/labor)
|
||||
"c" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
icon_state = "heater";
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/window/reinforced,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/shuttle/labor)
|
||||
"d" = (
|
||||
/obj/structure/closet/crate/internals,
|
||||
/obj/item/clothing/suit/hazardvest{
|
||||
desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks.";
|
||||
name = "emergency lifejacket"
|
||||
},
|
||||
/obj/item/clothing/suit/hazardvest{
|
||||
desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks.";
|
||||
name = "emergency lifejacket"
|
||||
},
|
||||
/obj/item/clothing/suit/hazardvest{
|
||||
desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks.";
|
||||
name = "emergency lifejacket"
|
||||
},
|
||||
/obj/item/clothing/suit/hazardvest{
|
||||
desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks.";
|
||||
name = "emergency lifejacket"
|
||||
},
|
||||
/obj/item/clothing/suit/hazardvest{
|
||||
desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks.";
|
||||
name = "emergency lifejacket"
|
||||
},
|
||||
/obj/item/tank/internals/emergency_oxygen/double{
|
||||
pixel_x = 3
|
||||
},
|
||||
/obj/item/tank/internals/emergency_oxygen/double{
|
||||
pixel_x = 3
|
||||
},
|
||||
/obj/item/tank/internals/emergency_oxygen/double{
|
||||
pixel_x = 3
|
||||
},
|
||||
/obj/item/tank/internals/emergency_oxygen/double{
|
||||
pixel_x = 3
|
||||
},
|
||||
/obj/item/tank/internals/emergency_oxygen/double{
|
||||
pixel_x = 3
|
||||
},
|
||||
/obj/item/clothing/mask/breath{
|
||||
pixel_x = -3;
|
||||
pixel_y = -3
|
||||
},
|
||||
/obj/item/clothing/mask/breath{
|
||||
pixel_x = -3;
|
||||
pixel_y = -3
|
||||
},
|
||||
/obj/item/clothing/mask/breath{
|
||||
pixel_x = -3;
|
||||
pixel_y = -3
|
||||
},
|
||||
/obj/item/clothing/mask/breath{
|
||||
pixel_x = -3;
|
||||
pixel_y = -3
|
||||
},
|
||||
/obj/item/clothing/mask/breath{
|
||||
pixel_x = -3;
|
||||
pixel_y = -3
|
||||
},
|
||||
/obj/item/clothing/head/hardhat/orange{
|
||||
name = "protective hat";
|
||||
pixel_y = 9
|
||||
},
|
||||
/obj/item/clothing/head/hardhat/orange{
|
||||
name = "protective hat";
|
||||
pixel_y = 9
|
||||
},
|
||||
/obj/item/clothing/head/hardhat/orange{
|
||||
name = "protective hat";
|
||||
pixel_y = 9
|
||||
},
|
||||
/obj/item/clothing/head/hardhat/orange{
|
||||
name = "protective hat";
|
||||
pixel_y = 9
|
||||
},
|
||||
/obj/item/clothing/head/hardhat/orange{
|
||||
name = "protective hat";
|
||||
pixel_y = 9
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/labor)
|
||||
"e" = (
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/labor)
|
||||
"f" = (
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/labor)
|
||||
"g" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/door/airlock/shuttle{
|
||||
id_tag = "prisonshuttle";
|
||||
name = "Labor Shuttle Airlock"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/labor)
|
||||
"h" = (
|
||||
/obj/structure/grille,
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "0-8"
|
||||
},
|
||||
/obj/structure/window/shuttle,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/labor)
|
||||
"i" = (
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/labor)
|
||||
"j" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/labor)
|
||||
"k" = (
|
||||
/obj/machinery/flasher{
|
||||
id = "gulagshuttleflasher";
|
||||
pixel_x = 25
|
||||
},
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/labor)
|
||||
"l" = (
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/labor)
|
||||
"m" = (
|
||||
/obj/machinery/light,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/labor)
|
||||
"n" = (
|
||||
/turf/closed/wall/mineral/titanium/nodiagonal,
|
||||
/area/shuttle/labor)
|
||||
"o" = (
|
||||
/obj/machinery/mineral/labor_claim_console{
|
||||
machinedir = 2;
|
||||
pixel_x = 30
|
||||
},
|
||||
/obj/effect/turf_decal/bot,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/labor)
|
||||
"p" = (
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/shuttle/labor)
|
||||
"q" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1;
|
||||
light_color = "#c1caff"
|
||||
},
|
||||
/obj/machinery/button/flasher{
|
||||
dir = 1;
|
||||
id = "gulagshuttleflasher";
|
||||
name = "Flash Control";
|
||||
pixel_y = 26;
|
||||
req_access_txt = "1"
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/shuttle/labor)
|
||||
"r" = (
|
||||
/obj/docking_port/mobile{
|
||||
dir = 8;
|
||||
dwidth = 2;
|
||||
height = 5;
|
||||
id = "laborcamp";
|
||||
name = "labor camp shuttle";
|
||||
port_direction = 4;
|
||||
width = 9
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/door/airlock/shuttle{
|
||||
name = "Labor Shuttle Airlock";
|
||||
req_access_txt = "2"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/labor)
|
||||
"s" = (
|
||||
/obj/machinery/computer/shuttle/labor{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/reagent_dispensers/peppertank{
|
||||
pixel_x = -31
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/shuttle/labor)
|
||||
"t" = (
|
||||
/obj/structure/chair/office/dark,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/shuttle/labor)
|
||||
"u" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/folder/red,
|
||||
/obj/item/restraints/handcuffs,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/shuttle/labor)
|
||||
"v" = (
|
||||
/obj/structure/window/shuttle,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/shuttle/labor)
|
||||
"w" = (
|
||||
/obj/machinery/door/airlock/shuttle{
|
||||
name = "Labor Shuttle Airlock";
|
||||
req_access_txt = "2"
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/labor)
|
||||
"x" = (
|
||||
/obj/machinery/mineral/stacking_machine/laborstacker{
|
||||
input_dir = 2;
|
||||
output_dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/labor)
|
||||
"y" = (
|
||||
/obj/machinery/mineral/stacking_unit_console{
|
||||
machinedir = 2;
|
||||
pixel_x = 30;
|
||||
pixel_y = -32
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/shuttle/labor)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
h
|
||||
a
|
||||
a
|
||||
h
|
||||
a
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
b
|
||||
a
|
||||
d
|
||||
j
|
||||
l
|
||||
w
|
||||
p
|
||||
s
|
||||
v
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
b
|
||||
c
|
||||
f
|
||||
e
|
||||
m
|
||||
n
|
||||
q
|
||||
t
|
||||
v
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
b
|
||||
a
|
||||
i
|
||||
k
|
||||
o
|
||||
x
|
||||
y
|
||||
u
|
||||
v
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
a
|
||||
a
|
||||
g
|
||||
a
|
||||
a
|
||||
a
|
||||
r
|
||||
a
|
||||
a
|
||||
"}
|
||||
@@ -82,7 +82,7 @@
|
||||
},
|
||||
/obj/item/clothing/head/collectable/pirate,
|
||||
/obj/item/clothing/suit/pirate,
|
||||
/obj/item/clothing/under/pirate,
|
||||
/obj/item/clothing/under/costume/pirate,
|
||||
/obj/item/clothing/shoes/jackboots,
|
||||
/obj/item/clothing/head/bandana,
|
||||
/turf/open/floor/plasteel/dark/side{
|
||||
@@ -387,7 +387,7 @@
|
||||
},
|
||||
/obj/item/clothing/head/collectable/pirate,
|
||||
/obj/item/clothing/suit/pirate,
|
||||
/obj/item/clothing/under/pirate,
|
||||
/obj/item/clothing/under/costume/pirate,
|
||||
/obj/item/clothing/shoes/jackboots,
|
||||
/obj/item/clothing/head/bandana,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
|
||||
@@ -0,0 +1,428 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/obj/structure/shuttle/engine/propulsion/left{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/abandoned)
|
||||
"b" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
dir = 8
|
||||
},
|
||||
/turf/closed/wall/mineral/titanium/nosmooth,
|
||||
/area/shuttle/abandoned)
|
||||
"c" = (
|
||||
/turf/closed/wall/mineral/titanium/interior,
|
||||
/area/shuttle/abandoned)
|
||||
"d" = (
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"e" = (
|
||||
/obj/structure/shuttle/engine/propulsion/burst{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/abandoned)
|
||||
"f" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
dir = 8
|
||||
},
|
||||
/turf/closed/wall/mineral/titanium/interior,
|
||||
/area/shuttle/abandoned)
|
||||
"g" = (
|
||||
/turf/closed/wall/mineral/titanium/nodiagonal,
|
||||
/area/shuttle/abandoned)
|
||||
"h" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/abandoned)
|
||||
"i" = (
|
||||
/obj/machinery/suit_storage_unit/security,
|
||||
/obj/machinery/light/small{
|
||||
brightness = 3;
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/airalarm/all_access{
|
||||
pixel_y = 24
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/abandoned)
|
||||
"j" = (
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/shuttle/abandoned)
|
||||
"k" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/abandoned)
|
||||
"l" = (
|
||||
/obj/structure/shuttle/engine/propulsion/right{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/abandoned)
|
||||
"m" = (
|
||||
/obj/structure/bed,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned)
|
||||
"n" = (
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned)
|
||||
"o" = (
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned)
|
||||
"p" = (
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned)
|
||||
"q" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/structure/window/reinforced/spawner/east,
|
||||
/obj/machinery/recharger,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/abandoned)
|
||||
"r" = (
|
||||
/obj/structure/filingcabinet,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/shuttle/abandoned)
|
||||
"s" = (
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/shuttle/abandoned)
|
||||
"t" = (
|
||||
/turf/closed/wall/mineral/titanium/nosmooth,
|
||||
/area/shuttle/abandoned)
|
||||
"u" = (
|
||||
/obj/machinery/door/airlock/security,
|
||||
/obj/machinery/door/firedoor,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned)
|
||||
"v" = (
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned)
|
||||
"w" = (
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned)
|
||||
"x" = (
|
||||
/obj/machinery/door/firedoor/border_only/closed{
|
||||
icon_state = "door_closed";
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/door/window/eastright,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/abandoned)
|
||||
"y" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/paper_bin,
|
||||
/obj/item/pen,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/shuttle/abandoned)
|
||||
"z" = (
|
||||
/obj/structure/window/shuttle,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/abandoned)
|
||||
"A" = (
|
||||
/obj/machinery/door/window/eastright,
|
||||
/obj/structure/toilet{
|
||||
contents = newlist(/obj/item/toy/snappop/phoenix);
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned)
|
||||
"B" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4;
|
||||
light_color = "#c1caff"
|
||||
},
|
||||
/obj/machinery/flasher{
|
||||
id = "cogws";
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned)
|
||||
"C" = (
|
||||
/obj/effect/turf_decal/tile/red,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/closet/crate/secure/weapon,
|
||||
/obj/item/gun/energy/laser/carbine,
|
||||
/obj/machinery/button/flasher{
|
||||
id = "cogws";
|
||||
pixel_x = -24;
|
||||
pixel_y = 8
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned)
|
||||
"D" = (
|
||||
/obj/effect/turf_decal/tile/red,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/closet/crate/secure/weapon,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/gun/energy/e_gun/stun,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned)
|
||||
"E" = (
|
||||
/obj/machinery/light{
|
||||
dir = 8;
|
||||
light_color = "#e8eaff"
|
||||
},
|
||||
/obj/machinery/airalarm/all_access{
|
||||
dir = 4;
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/shuttle/abandoned)
|
||||
"F" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/shuttle/abandoned)
|
||||
"G" = (
|
||||
/obj/machinery/computer/shuttle/white_ship{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/shuttle/abandoned)
|
||||
"H" = (
|
||||
/obj/item/clothing/glasses/sunglasses/blindfold,
|
||||
/obj/machinery/airalarm/all_access{
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned)
|
||||
"I" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/clothing/glasses/sunglasses,
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/shuttle/abandoned)
|
||||
"J" = (
|
||||
/obj/structure/curtain,
|
||||
/obj/machinery/shower{
|
||||
name = "shower";
|
||||
pixel_y = 12
|
||||
},
|
||||
/obj/item/soap/nanotrasen,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/shuttle/abandoned)
|
||||
"K" = (
|
||||
/obj/structure/mirror{
|
||||
pixel_y = 32
|
||||
},
|
||||
/obj/structure/sink{
|
||||
pixel_y = 28
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/shuttle/abandoned)
|
||||
"L" = (
|
||||
/obj/machinery/door/airlock/shuttle,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/shuttle/abandoned)
|
||||
"M" = (
|
||||
/obj/structure/toilet{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
brightness = 3;
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/airalarm/all_access{
|
||||
dir = 1;
|
||||
pixel_y = -24
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/shuttle/abandoned)
|
||||
"N" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/docking_port/mobile{
|
||||
dir = 2;
|
||||
dwidth = 7;
|
||||
height = 9;
|
||||
id = "whiteship";
|
||||
movement_force = list("KNOCKDOWN" = 0, "THROW" = 0);
|
||||
name = "Prisoner Transport";
|
||||
port_direction = 8;
|
||||
preferred_direction = 4;
|
||||
width = 13
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/abandoned)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
e
|
||||
l
|
||||
g
|
||||
c
|
||||
g
|
||||
a
|
||||
e
|
||||
l
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
b
|
||||
f
|
||||
f
|
||||
t
|
||||
A
|
||||
t
|
||||
f
|
||||
f
|
||||
b
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
c
|
||||
g
|
||||
m
|
||||
n
|
||||
n
|
||||
n
|
||||
m
|
||||
g
|
||||
c
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
d
|
||||
c
|
||||
m
|
||||
n
|
||||
n
|
||||
n
|
||||
m
|
||||
c
|
||||
d
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
d
|
||||
h
|
||||
n
|
||||
n
|
||||
B
|
||||
H
|
||||
n
|
||||
h
|
||||
d
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
d
|
||||
g
|
||||
c
|
||||
u
|
||||
c
|
||||
g
|
||||
c
|
||||
g
|
||||
d
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
c
|
||||
c
|
||||
o
|
||||
v
|
||||
C
|
||||
c
|
||||
J
|
||||
c
|
||||
c
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
c
|
||||
i
|
||||
p
|
||||
w
|
||||
D
|
||||
c
|
||||
K
|
||||
M
|
||||
c
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
c
|
||||
g
|
||||
q
|
||||
x
|
||||
c
|
||||
g
|
||||
L
|
||||
g
|
||||
c
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
d
|
||||
j
|
||||
r
|
||||
s
|
||||
E
|
||||
s
|
||||
s
|
||||
j
|
||||
d
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
d
|
||||
N
|
||||
s
|
||||
s
|
||||
F
|
||||
s
|
||||
s
|
||||
k
|
||||
d
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
d
|
||||
j
|
||||
j
|
||||
y
|
||||
G
|
||||
I
|
||||
j
|
||||
j
|
||||
d
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
d
|
||||
d
|
||||
j
|
||||
z
|
||||
z
|
||||
z
|
||||
j
|
||||
d
|
||||
d
|
||||
"}
|
||||
@@ -909,11 +909,11 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/item/storage/wallet/random,
|
||||
/obj/item/clothing/under/rank/centcom_officer{
|
||||
/obj/item/clothing/under/rank/centcom/officer{
|
||||
desc = "A badge on the arm indicates that it's meant to be worn by CentCom recovery teams. This one seems dusty and clearly hasn't been cleaned in some time.";
|
||||
name = "\improper dusty old CentCom jumpsuit"
|
||||
},
|
||||
/obj/item/clothing/under/rank/centcom_commander{
|
||||
/obj/item/clothing/under/rank/centcom/commander{
|
||||
desc = "A badge on the arm indicates that it's meant to be worn by CentCom recovery teams. This one seems dusty and clearly hasn't been cleaned in some time.";
|
||||
name = "\improper dusty old CentCom jumpsuit"
|
||||
},
|
||||
|
||||
+65
-31
@@ -2,32 +2,57 @@
|
||||
|
||||
#define CHECK_DNA_AND_SPECIES(C) if((!(C.dna)) || (!(C.dna.species))) return
|
||||
|
||||
//Defines copying names of mutations in all cases, make sure to change this if you change mutation's name
|
||||
#define HULK "Hulk"
|
||||
#define XRAY "X Ray Vision"
|
||||
#define COLDRES "Cold Resistance"
|
||||
#define TK "Telekinesis"
|
||||
#define NERVOUS "Nervousness"
|
||||
#define EPILEPSY "Epilepsy"
|
||||
#define MUTATE "Unstable DNA"
|
||||
#define COUGH "Cough"
|
||||
#define DWARFISM "Dwarfism"
|
||||
#define CLOWNMUT "Clumsiness"
|
||||
#define TOURETTES "Tourettes Syndrome"
|
||||
#define DEAFMUT "Deafness"
|
||||
#define BLINDMUT "Blindness"
|
||||
#define RACEMUT "Monkified"
|
||||
#define BADSIGHT "Near Sightness"
|
||||
#define LASEREYES "Laser Eyes"
|
||||
#define CHAMELEON "Chameleon"
|
||||
#define WACKY "Wacky"
|
||||
#define MUT_MUTE "Mute"
|
||||
#define SMILE "Smile"
|
||||
#define STONER "Stoner"
|
||||
#define UNINTELLIGIBLE "Unintelligible"
|
||||
#define SWEDISH "Swedish"
|
||||
#define CHAV "Chav"
|
||||
#define ELVIS "Elvis"
|
||||
//Defines copying names of mutations in all cases, make sure to change this if you change mutation's type
|
||||
#define HULK /datum/mutation/human/hulk
|
||||
#define XRAY /datum/mutation/human/thermal/x_ray
|
||||
#define SPACEMUT /datum/mutation/human/space_adaptation
|
||||
#define TK /datum/mutation/human/telekinesis
|
||||
#define NERVOUS /datum/mutation/human/nervousness
|
||||
#define EPILEPSY /datum/mutation/human/epilepsy
|
||||
#define MUTATE /datum/mutation/human/bad_dna
|
||||
#define COUGH /datum/mutation/human/cough
|
||||
#define DWARFISM /datum/mutation/human/dwarfism
|
||||
#define GIGANTISM /datum/mutation/human/gigantism
|
||||
#define CLOWNMUT /datum/mutation/human/clumsy
|
||||
#define TOURETTES /datum/mutation/human/tourettes
|
||||
#define DEAFMUT /datum/mutation/human/deaf
|
||||
#define BLINDMUT /datum/mutation/human/blind
|
||||
#define RACEMUT /datum/mutation/human/race
|
||||
#define BADSIGHT /datum/mutation/human/nearsight
|
||||
#define LASEREYES /datum/mutation/human/laser_eyes
|
||||
#define CHAMELEON /datum/mutation/human/chameleon
|
||||
#define WACKY /datum/mutation/human/wacky
|
||||
#define MUT_MUTE /datum/mutation/human/mute
|
||||
#define SMILE /datum/mutation/human/smile
|
||||
#define STONER /datum/mutation/human/stoner
|
||||
#define UNINTELLIGIBLE /datum/mutation/human/unintelligible
|
||||
#define SWEDISH /datum/mutation/human/swedish
|
||||
#define CHAV /datum/mutation/human/chav
|
||||
#define ELVIS /datum/mutation/human/elvis
|
||||
#define RADIOACTIVE /datum/mutation/human/radioactive
|
||||
#define GLOWY /datum/mutation/human/glow
|
||||
#define ANTIGLOWY /datum/mutation/human/glow/anti
|
||||
#define TELEPATHY /datum/mutation/human/telepathy
|
||||
#define FIREBREATH /datum/mutation/human/firebreath
|
||||
#define VOID /datum/mutation/human/void
|
||||
#define TONGUESPIKE /datum/mutation/human/tongue_spike
|
||||
#define TONGUESPIKECHEM /datum/mutation/human/tongue_spike/chem
|
||||
#define STRONG /datum/mutation/human/strong
|
||||
#define STIMMED /datum/mutation/human/stimmed
|
||||
#define FIRESWEAT /datum/mutation/human/fire
|
||||
#define THERMAL /datum/mutation/human/thermal
|
||||
#define ANTENNA /datum/mutation/human/antenna
|
||||
#define PARANOIA /datum/mutation/human/paranoia
|
||||
#define MINDREAD /datum/mutation/human/mindreader
|
||||
#define INSULATED /datum/mutation/human/insulated
|
||||
#define SHOCKTOUCH /datum/mutation/human/shock
|
||||
#define OLFACTION /datum/mutation/human/olfaction
|
||||
#define ACIDFLESH /datum/mutation/human/acidflesh
|
||||
#define BADBLINK /datum/mutation/human/badblink
|
||||
#define SPASTIC /datum/mutation/human/spastic
|
||||
#define GELADIKINESIS /datum/mutation/human/geladikinesis
|
||||
#define CRYOKINESIS /datum/mutation/human/cryokinesis
|
||||
#define SPIDER_WEB /datum/mutation/human/webbing
|
||||
|
||||
#define UI_CHANGED "ui changed"
|
||||
#define UE_CHANGED "ue changed"
|
||||
@@ -39,10 +64,12 @@
|
||||
//Types of usual mutations
|
||||
#define POSITIVE 1
|
||||
#define NEGATIVE 2
|
||||
#define MINOR_NEGATIVE 3
|
||||
#define MINOR_NEGATIVE 4
|
||||
|
||||
//Mutations that cant be taken from genetics and are not in SE
|
||||
#define NON_SCANNABLE -1
|
||||
//Mutation classes. Normal being on them, extra being additional mutations with instability and other being stuff you dont want people to fuck with like wizard mutate
|
||||
#define MUT_NORMAL 1
|
||||
#define MUT_EXTRA 2
|
||||
#define MUT_OTHER 3
|
||||
|
||||
//DNA - Because fuck you and your magic numbers being all over the codebase.
|
||||
#define DNA_BLOCK_SIZE 3
|
||||
@@ -63,7 +90,8 @@
|
||||
#define DNA_MUTANTMARKING_BLOCK 13
|
||||
#define DNA_TAUR_BLOCK 14
|
||||
|
||||
#define DNA_STRUC_ENZYMES_BLOCKS 18
|
||||
#define DNA_SEQUENCE_LENGTH 4
|
||||
#define DNA_MUTATION_BLOCKS 8
|
||||
#define DNA_UNIQUE_ENZYMES_LEN 32
|
||||
|
||||
//Transformation proc stuff
|
||||
@@ -141,7 +169,13 @@
|
||||
#define STANDARD_ORGAN_HEALING (1/(15 MINUTES / (2 SECONDS)))
|
||||
#define STANDARD_ORGAN_DECAY (1/(15 MINUTES / (2 SECONDS))) //designed to fail organs when left to decay for ~15 minutes. 2 SECOND is SSmobs tickrate.
|
||||
|
||||
|
||||
//used for the can_chromosome var on mutations
|
||||
#define CHROMOSOME_NEVER 0
|
||||
#define CHROMOSOME_NONE 1
|
||||
#define CHROMOSOME_USED 2
|
||||
|
||||
#define G_MALE 1
|
||||
#define G_FEMALE 2
|
||||
#define G_PLURAL 3
|
||||
#define G_NEUTER 4
|
||||
#define G_NEUTER 4
|
||||
@@ -1,3 +1,6 @@
|
||||
#define TRAITOR_HUMAN /datum/traitor_class/human/freeform
|
||||
#define TRAITOR_AI /datum/traitor_class/ai
|
||||
|
||||
#define NUKE_RESULT_FLUKE 0
|
||||
#define NUKE_RESULT_NUKE_WIN 1
|
||||
#define NUKE_RESULT_CREW_WIN 2
|
||||
@@ -74,6 +77,7 @@
|
||||
#define MARTIALART_HUNTER "hunter-fu"
|
||||
|
||||
//Blob
|
||||
/// blob gets a free reroll every X time
|
||||
#define BLOB_REROLL_TIME 2400
|
||||
#define BLOB_REROLL_TIME 2400 // blob gets a free reroll every X time
|
||||
#define BLOB_SPREAD_COST 4
|
||||
#define BLOB_ATTACK_REFUND 2 //blob refunds this much if it attacks and doesn't spread
|
||||
#define BLOB_REFLECTOR_COST 15
|
||||
@@ -2,18 +2,6 @@
|
||||
//Be sure to update the min/max of these if you do change them.
|
||||
//Measurements are in imperial units. Inches, feet, yards, miles. Tsp, tbsp, cups, quarts, gallons, etc
|
||||
|
||||
//HUD stuff
|
||||
#define ui_arousal "EAST-1:28,CENTER-4:8"//Below the health doll
|
||||
#define ui_stamina "EAST-1:28,CENTER:17" // replacing internals button
|
||||
#define ui_overridden_resist "EAST-3:24,SOUTH+1:7"
|
||||
#define ui_combat_toggle "EAST-4:22,SOUTH:5"
|
||||
|
||||
//1:1 HUD layout stuff
|
||||
#define ui_boxcraft "EAST-4:22,SOUTH+1:6"
|
||||
#define ui_boxarea "EAST-4:6,SOUTH+1:6"
|
||||
#define ui_boxlang "EAST-5:22,SOUTH+1:6"
|
||||
#define ui_boxvore "EAST-5:22,SOUTH+1:6"
|
||||
|
||||
//Filters
|
||||
#define CIT_FILTER_STAMINACRIT filter(type="drop_shadow", x=0, y=0, size=-3, color="#04080F")
|
||||
|
||||
@@ -35,44 +23,50 @@
|
||||
#define MASTURBATE_LINKED_ORGAN (1<<6) //used to pass our mission to the linked organ
|
||||
#define CAN_CLIMAX_WITH (1<<7)
|
||||
#define GENITAL_CAN_AROUSE (1<<8)
|
||||
#define GENITAL_UNDIES_HIDDEN (1<<9)
|
||||
#define UPDATE_OWNER_APPEARANCE (1<<10)
|
||||
|
||||
#define COCK_SIZE_MIN 1
|
||||
#define COCK_SIZE_MAX 20
|
||||
|
||||
#define DEF_VAGINA_SHAPE "Human"
|
||||
|
||||
#define COCK_SIZE_DEF 6
|
||||
|
||||
#define COCK_DIAMETER_RATIO_MAX 0.42
|
||||
#define COCK_DIAMETER_RATIO_DEF 0.25
|
||||
#define COCK_DIAMETER_RATIO_MIN 0.15
|
||||
|
||||
#define KNOT_GIRTH_RATIO_MAX 3
|
||||
#define KNOT_GIRTH_RATIO_DEF 2.1
|
||||
#define KNOT_GIRTH_RATIO_MIN 1.25
|
||||
#define DEF_COCK_SHAPE "Human"
|
||||
|
||||
#define BALLS_VOLUME_BASE 25
|
||||
#define BALLS_VOLUME_MULT 1
|
||||
|
||||
#define DEF_BALLS_SHAPE "Single"
|
||||
|
||||
#define BALLS_SIZE_MIN 1
|
||||
#define BALLS_SIZE_DEF 2
|
||||
#define BALLS_SIZE_MAX 3
|
||||
|
||||
#define BALLS_SACK_SIZE_MIN 1
|
||||
#define BALLS_SACK_SIZE_DEF 8
|
||||
#define BALLS_SACK_SIZE_MAX 40
|
||||
|
||||
#define CUM_RATE 2 // holy shit what a really shitty define name - relates to units per arbitrary measure of time?
|
||||
#define CUM_RATE_MULT 1
|
||||
#define CUM_EFFICIENCY 1 //amount of nutrition required per life()
|
||||
|
||||
#define EGG_GIRTH_MIN 1//inches
|
||||
#define EGG_GIRTH_DEF 6
|
||||
#define EGG_GIRTH_MAX 16
|
||||
|
||||
#define BREASTS_VOLUME_BASE 50 //base volume for the reagents in the breasts, multiplied by the size then multiplier. 50u for A cups, 850u for HH cups.
|
||||
#define BREASTS_VOLUME_MULT 1 //global multiplier for breast volume.
|
||||
|
||||
#define BREASTS_SIZE_DEF "c" //lowercase cause those sprite accessory don't use uppercased letters.
|
||||
|
||||
#define DEF_BREASTS_SHAPE "Pair"
|
||||
|
||||
#define MILK_RATE 5
|
||||
#define MILK_RATE_MULT 1
|
||||
#define MILK_EFFICIENCY 1
|
||||
|
||||
//visibility toggles defines to avoid errors typos code errors.
|
||||
#define GEN_VISIBLE_ALWAYS "Always visible"
|
||||
#define GEN_VISIBLE_NO_CLOTHES "Hidden by clothes"
|
||||
#define GEN_VISIBLE_NO_UNDIES "Hidden by underwear"
|
||||
#define GEN_VISIBLE_NEVER "Always hidden"
|
||||
|
||||
//Individual logging define
|
||||
#define INDIVIDUAL_LOOC_LOG "LOOC log"
|
||||
|
||||
@@ -83,8 +77,6 @@
|
||||
//Citadel istypes
|
||||
#define isgenital(A) (istype(A, /obj/item/organ/genital))
|
||||
|
||||
#define isborer(A) (istype(A, /mob/living/simple_animal/borer))
|
||||
|
||||
#define CITADEL_MENTOR_OOC_COLOUR "#224724"
|
||||
|
||||
//xenobio console upgrade stuff
|
||||
@@ -92,14 +84,6 @@
|
||||
#define XENOBIO_UPGRADE_SLIMEBASIC 2
|
||||
#define XENOBIO_UPGRADE_SLIMEADV 4
|
||||
|
||||
//stamina stuff
|
||||
#define STAMINA_SOFTCRIT 100 //softcrit for stamina damage. prevents standing up, prevents performing actions that cost stamina, etc, but doesn't force a rest or stop movement
|
||||
#define STAMINA_CRIT 140 //crit for stamina damage. forces a rest, and stops movement until stamina goes back to stamina softcrit
|
||||
#define STAMINA_SOFTCRIT_TRADITIONAL 0 //same as STAMINA_SOFTCRIT except for the more traditional health calculations
|
||||
#define STAMINA_CRIT_TRADITIONAL -40 //ditto, but for STAMINA_CRIT
|
||||
|
||||
#define CRAWLUNDER_DELAY 30 //Delay for crawling under a standing mob
|
||||
|
||||
//Citadel toggles because bitflag memes
|
||||
#define MEDIHOUND_SLEEPER (1<<0)
|
||||
#define EATING_NOISES (1<<1)
|
||||
@@ -117,8 +101,6 @@
|
||||
#define TOGGLES_CITADEL (EATING_NOISES|DIGESTION_NOISES|BREAST_ENLARGEMENT|PENIS_ENLARGEMENT)
|
||||
|
||||
//component stuff
|
||||
#define COMSIG_COMBAT_TOGGLED "combatmode_toggled" //called by combat mode toggle on all equipped items. args: (mob/user, combatmode)
|
||||
|
||||
#define COMSIG_VORE_TOGGLED "voremode_toggled" // totally not copypasta
|
||||
|
||||
//belly sound pref things
|
||||
|
||||
@@ -29,12 +29,60 @@
|
||||
#define EFFECT_DROWSY "drowsy"
|
||||
#define EFFECT_JITTER "jitter"
|
||||
|
||||
// /mob/living/combat_flags
|
||||
#define CAN_TOGGLE_COMBAT_MODE(mob) FORCE_BOOLEAN((mob.stat == CONSCIOUS) && !(mob.combat_flags & COMBAT_FLAG_HARD_STAMCRIT))
|
||||
|
||||
/// Default combat flags for those affected by ((stamina combat))
|
||||
#define COMBAT_FLAGS_DEFAULT NONE
|
||||
/// Default combat flags for everyone else (so literally everyone but humans)
|
||||
#define COMBAT_FLAGS_STAMSYSTEM_EXEMPT (COMBAT_FLAG_SPRINT_ACTIVE | COMBAT_FLAG_COMBAT_ACTIVE | COMBAT_FLAG_SPRINT_TOGGLED | COMBAT_FLAG_COMBAT_TOGGLED)
|
||||
/// Default combat flags for those only affected by sprint (so just silicons)
|
||||
#define COMBAT_FLAGS_STAMEXEMPT_YESSPRINT (COMBAT_FLAG_COMBAT_ACTIVE | COMBAT_FLAG_COMBAT_TOGGLED)
|
||||
|
||||
/// The user wants combat mode on
|
||||
#define COMBAT_FLAG_COMBAT_TOGGLED (1<<0)
|
||||
/// The user wants sprint mode on
|
||||
#define COMBAT_FLAG_SPRINT_TOGGLED (1<<1)
|
||||
/// Combat mode is currently active
|
||||
#define COMBAT_FLAG_COMBAT_ACTIVE (1<<2)
|
||||
/// Sprint is currently active
|
||||
#define COMBAT_FLAG_SPRINT_ACTIVE (1<<3)
|
||||
/// Currently attempting to crawl under someone
|
||||
#define COMBAT_FLAG_ATTEMPTING_CRAWL (1<<4)
|
||||
/// Currently stamcritted
|
||||
#define COMBAT_FLAG_HARD_STAMCRIT (1<<5)
|
||||
/// Currently attempting to resist up from the ground
|
||||
#define COMBAT_FLAG_RESISTING_REST (1<<6)
|
||||
/// Intentionally resting
|
||||
#define COMBAT_FLAG_INTENTIONALLY_RESTING (1<<7)
|
||||
/// Currently stamcritted but not as violently
|
||||
#define COMBAT_FLAG_SOFT_STAMCRIT (1<<8)
|
||||
|
||||
// Helpers for getting someone's stamcrit state. Cast to living.
|
||||
#define NOT_STAMCRIT 0
|
||||
#define SOFT_STAMCRIT 1
|
||||
#define HARD_STAMCRIT 2
|
||||
|
||||
// Stamcrit check helpers
|
||||
#define IS_STAMCRIT(mob) (CHECK_STAMCRIT(mob) != NOT_STAMCRIT)
|
||||
#define CHECK_STAMCRIT(mob) ((mob.combat_flags & COMBAT_FLAG_HARD_STAMCRIT)? HARD_STAMCRIT : ((mob.combat_flags & COMBAT_FLAG_SOFT_STAMCRIT)? SOFT_STAMCRIT : NOT_STAMCRIT))
|
||||
|
||||
//stamina stuff
|
||||
#define STAMINA_SOFTCRIT 100 //softcrit for stamina damage. prevents standing up, prevents performing actions that cost stamina, etc, but doesn't force a rest or stop movement
|
||||
#define STAMINA_CRIT 140 //crit for stamina damage. forces a rest, and stops movement until stamina goes back to stamina softcrit
|
||||
#define STAMINA_SOFTCRIT_TRADITIONAL 0 //same as STAMINA_SOFTCRIT except for the more traditional health calculations
|
||||
#define STAMINA_CRIT_TRADITIONAL -40 //ditto, but for STAMINA_CRIT
|
||||
|
||||
#define CRAWLUNDER_DELAY 30 //Delay for crawling under a standing mob
|
||||
|
||||
//Bitflags defining which status effects could be or are inflicted on a mob
|
||||
// This is a bit out of date/inaccurate in light of all the new status effects and is probably pending rework.
|
||||
#define CANSTUN (1<<0)
|
||||
#define CANKNOCKDOWN (1<<1)
|
||||
#define CANUNCONSCIOUS (1<<2)
|
||||
#define CANPUSH (1<<3)
|
||||
#define GODMODE (1<<4)
|
||||
#define CANSTAGGER (1<<5)
|
||||
|
||||
//Health Defines
|
||||
#define HEALTH_THRESHOLD_CRIT 0
|
||||
@@ -203,3 +251,5 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(
|
||||
#define BULLET_ACT_BLOCK "BLOCK" //It's a blocked hit, whatever that means in the context of the thing it's hitting.
|
||||
#define BULLET_ACT_FORCE_PIERCE "PIERCE" //It pierces through the object regardless of the bullet being piercing by default.
|
||||
#define BULLET_ACT_TURF "TURF" //It hit us but it should hit something on the same turf too. Usually used for turfs.
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/// Return this from `/datum/component/Initialize` or `datum/component/OnTransfer` to have the component be deleted if it's applied to an incorrect type.
|
||||
/// `parent` must not be modified if this is to be returned.
|
||||
/// This will be noted in the runtime logs
|
||||
#define COMPONENT_INCOMPATIBLE 1
|
||||
/// Returned in PostTransfer to prevent transfer, similar to `COMPONENT_INCOMPATIBLE`
|
||||
#define COMPONENT_NOTRANSFER 2
|
||||
|
||||
/// Return value to cancel attaching
|
||||
#define ELEMENT_INCOMPATIBLE 1
|
||||
|
||||
// /datum/element flags
|
||||
/// Causes the detach proc to be called when the host object is being deleted
|
||||
#define ELEMENT_DETACH (1 << 0)
|
||||
/**
|
||||
* Only elements created with the same arguments given after `id_arg_index` share an element instance
|
||||
* The arguments are the same when the text and number values are the same and all other values have the same ref
|
||||
*/
|
||||
#define ELEMENT_BESPOKE (1 << 1)
|
||||
|
||||
// How multiple components of the exact same type are handled in the same datum
|
||||
/// old component is deleted (default)
|
||||
#define COMPONENT_DUPE_HIGHLANDER 0
|
||||
/// duplicates allowed
|
||||
#define COMPONENT_DUPE_ALLOWED 1
|
||||
/// new component is deleted
|
||||
#define COMPONENT_DUPE_UNIQUE 2
|
||||
/// old component is given the initialization args of the new
|
||||
#define COMPONENT_DUPE_UNIQUE_PASSARGS 4
|
||||
/// each component of the same type is consulted as to whether the duplicate should be allowed
|
||||
#define COMPONENT_DUPE_SELECTIVE 5
|
||||
|
||||
//Redirection component init flags
|
||||
#define REDIRECT_TRANSFER_WITH_TURF 1
|
||||
|
||||
//Arch
|
||||
#define ARCH_PROB "probability" //Probability for each item
|
||||
#define ARCH_MAXDROP "max_drop_amount" //each item's max drop amount
|
||||
|
||||
//Ouch my toes!
|
||||
#define CALTROP_BYPASS_SHOES 1
|
||||
#define CALTROP_IGNORE_WALKERS 2
|
||||
@@ -0,0 +1,16 @@
|
||||
/// Used to trigger signals and call procs registered for that signal
|
||||
/// The datum hosting the signal is automaticaly added as the first argument
|
||||
/// Returns a bitfield gathered from all registered procs
|
||||
/// Arguments given here are packaged in a list and given to _SendSignal
|
||||
#define SEND_SIGNAL(target, sigtype, arguments...) ( !target.comp_lookup || !target.comp_lookup[sigtype] ? NONE : target._SendSignal(sigtype, list(target, ##arguments)) )
|
||||
|
||||
#define SEND_GLOBAL_SIGNAL(sigtype, arguments...) ( SEND_SIGNAL(SSdcs, sigtype, ##arguments) )
|
||||
|
||||
/// A wrapper for _AddElement that allows us to pretend we're using normal named arguments
|
||||
#define AddElement(arguments...) _AddElement(list(##arguments))
|
||||
|
||||
/// A wrapper for _RemoveElement that allows us to pretend we're using normal named arguments
|
||||
#define RemoveElement(arguments...) _RemoveElement(list(##arguments))
|
||||
|
||||
/// A wrapper for _AddComponent that allows us to pretend we're using normal named arguments
|
||||
#define AddComponent(arguments...) _AddComponent(list(##arguments))
|
||||
@@ -1,28 +1,3 @@
|
||||
#define SEND_SIGNAL(target, sigtype, arguments...) ( !target.comp_lookup || !target.comp_lookup[sigtype] ? NONE : target._SendSignal(sigtype, list(target, ##arguments)) )
|
||||
|
||||
#define SEND_GLOBAL_SIGNAL(sigtype, arguments...) ( SEND_SIGNAL(SSdcs, sigtype, ##arguments) )
|
||||
|
||||
#define COMPONENT_INCOMPATIBLE 1
|
||||
#define COMPONENT_NOTRANSFER 2
|
||||
|
||||
#define ELEMENT_INCOMPATIBLE 1 // Return value to cancel attaching
|
||||
|
||||
// /datum/element flags
|
||||
/// Causes the detach proc to be called when the host object is being deleted
|
||||
#define ELEMENT_DETACH (1 << 0)
|
||||
/**
|
||||
* Only elements created with the same arguments given after `id_arg_index` share an element instance
|
||||
* The arguments are the same when the text and number values are the same and all other values have the same ref
|
||||
*/
|
||||
#define ELEMENT_BESPOKE (1 << 1)
|
||||
|
||||
// How multiple components of the exact same type are handled in the same datum
|
||||
|
||||
#define COMPONENT_DUPE_HIGHLANDER 0 //old component is deleted (default)
|
||||
#define COMPONENT_DUPE_ALLOWED 1 //duplicates allowed
|
||||
#define COMPONENT_DUPE_UNIQUE 2 //new component is deleted
|
||||
#define COMPONENT_DUPE_UNIQUE_PASSARGS 4 //old component is given the initialization args of the new
|
||||
|
||||
// All signals. Format:
|
||||
// When the signal is called: (signal arguments)
|
||||
// All signals send the source datum of the signal as the first argument
|
||||
@@ -200,6 +175,7 @@
|
||||
#define SPEECH_LANGUAGE 5
|
||||
// #define SPEECH_IGNORE_SPAM 6
|
||||
// #define SPEECH_FORCED 7
|
||||
#define COMSIG_MOB_ANTAG_ON_GAIN "mob_antag_on_gain" //from base of /datum/antagonist/on_gain(): (antag_datum)
|
||||
|
||||
// /mob/living signals
|
||||
#define COMSIG_LIVING_REGENERATE_LIMBS "living_regenerate_limbs" //from base of /mob/living/regenerate_limbs(): (noheal, excluded_limbs)
|
||||
@@ -210,7 +186,10 @@
|
||||
#define COMSIG_LIVING_MINOR_SHOCK "living_minor_shock" //sent by stuff like stunbatons and tasers: ()
|
||||
#define COMSIG_LIVING_REVIVE "living_revive" //from base of mob/living/revive() (full_heal, admin_revive)
|
||||
#define COMSIG_MOB_CLIENT_LOGIN "comsig_mob_client_login" //sent when a mob/login() finishes: (client)
|
||||
#define COMSIG_MOB_CLIENT_MOVE "comsig_mob_client_move" //sent when client/Move() finishes with no early returns: (client, direction, n, oldloc)
|
||||
#define COMSIG_LIVING_GUN_PROCESS_FIRE "living_gun_process_fire" //from base of /obj/item/gun/proc/process_fire(): (atom/target, params, zone_override)
|
||||
#define COMSIG_LIVING_COMBAT_ENABLED "combatmode_enabled" //from base of mob/living/enable_combat_mode() (was_forced)
|
||||
#define COMSIG_LIVING_COMBAT_DISABLED "combatmode_disabled" //from base of mob/living/disable_combat_mode() (was_forced)
|
||||
|
||||
//ALL OF THESE DO NOT TAKE INTO ACCOUNT WHETHER AMOUNT IS 0 OR LOWER AND ARE SENT REGARDLESS!
|
||||
#define COMSIG_LIVING_STATUS_STUN "living_stun" //from base of mob/living/Stun() (amount, update, ignore)
|
||||
@@ -220,10 +199,12 @@
|
||||
#define COMSIG_LIVING_STATUS_UNCONSCIOUS "living_unconscious" //from base of mob/living/Unconscious() (amount, update, ignore)
|
||||
#define COMSIG_LIVING_STATUS_SLEEP "living_sleeping" //from base of mob/living/Sleeping() (amount, update, ignore)
|
||||
#define COMSIG_LIVING_STATUS_DAZE "living_daze" //from base of mob/living/Daze() (amount, update, ignore)
|
||||
#define COMSIG_LIVING_STATUS_STAGGER "living_stagger" //from base of mob/living/Stagger() (amount, update, ignore)
|
||||
#define COMPONENT_NO_STUN 1 //For all of them
|
||||
|
||||
// /mob/living/carbon signals
|
||||
#define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity))
|
||||
#define COMSIG_CARBON_IDENTITY_TRANSFERRED_TO "carbon_id_transferred_to" //from datum/dna/transfer_identity(): (datum/dna, transfer_SE)
|
||||
|
||||
// /mob/living/simple_animal/hostile signals
|
||||
#define COMSIG_HOSTILE_ATTACKINGTARGET "hostile_attackingtarget"
|
||||
@@ -289,6 +270,9 @@
|
||||
#define COMSIG_HUMAN_MELEE_UNARMED_ATTACK "human_melee_unarmed_attack" //from mob/living/carbon/human/UnarmedAttack(): (atom/target)
|
||||
#define COMSIG_HUMAN_MELEE_UNARMED_ATTACKBY "human_melee_unarmed_attackby" //from mob/living/carbon/human/UnarmedAttack(): (mob/living/carbon/human/attacker)
|
||||
#define COMSIG_HUMAN_DISARM_HIT "human_disarm_hit" //Hit by successful disarm attack (mob/living/carbon/human/attacker,zone_targeted)
|
||||
#define COMSIG_HUMAN_PREFS_COPIED_TO "human_prefs_copied_to" //from datum/preferences/copy_to(): (datum/preferences, icon_updates, roundstart_checks)
|
||||
#define COMSIG_HUMAN_HARDSET_DNA "human_hardset_dna" //from mob/living/carbon/human/hardset_dna(): (ui, list/mutation_index, newreal_name, newblood_type, datum/species, newfeatures)
|
||||
#define COMSIG_HUMAN_ON_RANDOMIZE "humman_on_randomize" //from base of proc/randomize_human()
|
||||
|
||||
// /datum/species signals
|
||||
#define COMSIG_SPECIES_GAIN "species_gain" //from datum/species/on_species_gain(): (datum/species/new_species, datum/species/old_species)
|
||||
@@ -355,19 +339,6 @@
|
||||
#define COMSIG_ACTION_TRIGGER "action_trigger" //from base of datum/action/proc/Trigger(): (datum/action)
|
||||
#define COMPONENT_ACTION_BLOCK_TRIGGER 1
|
||||
|
||||
/*******Non-Signal Component Related Defines*******/
|
||||
|
||||
//Redirection component init flags
|
||||
#define REDIRECT_TRANSFER_WITH_TURF 1
|
||||
|
||||
//Arch
|
||||
#define ARCH_PROB "probability" //Probability for each item
|
||||
#define ARCH_MAXDROP "max_drop_amount" //each item's max drop amount
|
||||
|
||||
//Ouch my toes!
|
||||
#define CALTROP_BYPASS_SHOES 1
|
||||
#define CALTROP_IGNORE_WALKERS 2
|
||||
|
||||
//Xenobio hotkeys
|
||||
#define COMSIG_XENO_SLIME_CLICK_CTRL "xeno_slime_click_ctrl" //from slime CtrlClickOn(): (/mob)
|
||||
#define COMSIG_XENO_SLIME_CLICK_ALT "xeno_slime_click_alt" //from slime AltClickOn(): (/mob)
|
||||
@@ -6,6 +6,7 @@
|
||||
#define NO_ASSASSIN (1<<0)
|
||||
#define WAROPS_ALWAYS_ALLOWED (1<<1)
|
||||
#define USE_PREF_WEIGHTS (1<<2)
|
||||
#define FORCE_IF_WON (1<<3)
|
||||
|
||||
#define ONLY_RULESET (1<<0)
|
||||
#define HIGHLANDER_RULESET (1<<1)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
#define FLOOR(x, y) ( round((x) / (y)) * (y) )
|
||||
|
||||
// Similar to clamp but the bottom rolls around to the top and vice versa. min is inclusive, max is exclusive
|
||||
#define WRAP(val, min, max) ( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) )
|
||||
#define WRAP(val, min, max) CLAMP(( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) ),min,max-1)
|
||||
|
||||
// Real modulus that handles decimals
|
||||
#define MODULUS(x, y) ( (x) - (y) * round((x) / (y)) )
|
||||
@@ -201,4 +201,9 @@
|
||||
#define RULE_OF_THREE(a, b, x) ((a*x)/b)
|
||||
// )
|
||||
|
||||
#define MANHATTAN_DISTANCE(a, b) (abs(a.x - b.x) + abs(a.y - b.y))
|
||||
#define MANHATTAN_DISTANCE(a, b) (abs(a.x - b.x) + abs(a.y - b.y))
|
||||
|
||||
#define LOGISTIC_FUNCTION(L,k,x,x_0) (L/(1+(NUM_E**(-k*(x-x_0)))))
|
||||
|
||||
/// Make sure something is a boolean TRUE/FALSE 1/0 value, since things like bitfield & bitflag doesn't always give 1s and 0s.
|
||||
#define FORCE_BOOLEAN(x) ((x)? TRUE : FALSE)
|
||||
|
||||
@@ -345,11 +345,10 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
|
||||
#define COLOUR_PRIORITY_AMOUNT 4 //how many priority levels there are.
|
||||
|
||||
//Endgame Results
|
||||
#define NUKE_NEAR_MISS 1
|
||||
#define NUKE_MISS_STATION 2
|
||||
#define NUKE_SYNDICATE_BASE 3
|
||||
#define STATION_DESTROYED_NUKE 4
|
||||
#define STATION_EVACUATED 5
|
||||
#define NUKE_MISS_STATION 1
|
||||
#define NUKE_SYNDICATE_BASE 2
|
||||
#define STATION_DESTROYED_NUKE 3
|
||||
#define STATION_EVACUATED 4
|
||||
#define BLOB_WIN 8
|
||||
#define BLOB_NUKE 9
|
||||
#define BLOB_DESTROYED 10
|
||||
|
||||
@@ -289,4 +289,5 @@
|
||||
#define HUMAN_FIRE_STACK_ICON_NUM 3
|
||||
|
||||
#define PULL_PRONE_SLOWDOWN 0.6
|
||||
#define HUMAN_CARRY_SLOWDOWN 0
|
||||
#define FIREMAN_CARRY_SLOWDOWN 0
|
||||
#define PIGGYBACK_CARRY_SLOWDOWN 1
|
||||
|
||||
@@ -81,7 +81,8 @@
|
||||
|
||||
//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam
|
||||
#define MAX_MESSAGE_LEN 2048 //Citadel edit: What's the WORST that could happen?
|
||||
#define MAX_FAVOR_LEN 4096 //double the maximum message length.
|
||||
#define MAX_FLAVOR_LEN 4096 //double the maximum message length.
|
||||
#define MAX_TASTE_LEN 40 //lick... vore... ew...
|
||||
#define MAX_NAME_LEN 42
|
||||
#define MAX_BROADCAST_LEN 512
|
||||
#define MAX_CHARTER_LEN 80
|
||||
|
||||
@@ -53,6 +53,9 @@
|
||||
|
||||
#define STATUS_EFFECT_SLEEPING /datum/status_effect/incapacitating/sleeping //the affected is asleep
|
||||
|
||||
/// Blocks sprint
|
||||
#define STATUS_EFFECT_STAGGERED /datum/status_effect/staggered
|
||||
|
||||
#define STATUS_EFFECT_TASED_WEAK /datum/status_effect/electrode //not as crippling, just slows down
|
||||
|
||||
#define STATUS_EFFECT_TASED /datum/status_effect/electrode/no_combat_mode //the affected has been tased, preventing fine muscle control
|
||||
@@ -118,3 +121,4 @@
|
||||
|
||||
#define STATUS_EFFECT_RAINBOWPROTECTION /datum/status_effect/rainbow_protection //Invulnerable and pacifistic
|
||||
#define STATUS_EFFECT_SLIMESKIN /datum/status_effect/slimeskin //Increased armor
|
||||
#define STATUS_EFFECT_DNA_MELT /datum/status_effect/dna_melt //usually does something horrible to you when you hit 100 genetic instability
|
||||
|
||||
@@ -83,6 +83,7 @@
|
||||
#define TRAIT_DISFIGURED "disfigured"
|
||||
#define TRAIT_XENO_HOST "xeno_host" //Tracks whether we're gonna be a baby alien's mummy.
|
||||
#define TRAIT_STUNIMMUNE "stun_immunity"
|
||||
#define TRAIT_TASED_RESISTANCE "tased_resistance" //prevents you from suffering most of the effects of being tased
|
||||
#define TRAIT_SLEEPIMMUNE "sleep_immunity"
|
||||
#define TRAIT_PUSHIMMUNE "push_immunity"
|
||||
#define TRAIT_SHOCKIMMUNE "shock_immunity"
|
||||
@@ -130,6 +131,8 @@
|
||||
#define TRAIT_UNINTELLIGIBLE_SPEECH "unintelligible-speech"
|
||||
#define TRAIT_SOOTHED_THROAT "soothed-throat"
|
||||
#define TRAIT_LAW_ENFORCEMENT_METABOLISM "law-enforcement-metabolism"
|
||||
#define TRAIT_QUICK_CARRY "quick-carry"
|
||||
#define TRAIT_QUICKER_CARRY "quicker-carry"
|
||||
#define TRAIT_STRONG_GRABBER "strong_grabber"
|
||||
#define TRAIT_CALCIUM_HEALER "calcium_healer"
|
||||
#define TRAIT_MAGIC_CHOKE "magic_choke"
|
||||
@@ -143,6 +146,7 @@
|
||||
#define TRAIT_NOMARROW "nomarrow" // You don't make blood, with chemicals or nanites.
|
||||
#define TRAIT_NOPULSE "nopulse" // Your heart doesn't beat.
|
||||
#define TRAIT_EXEMPT_HEALTH_EVENTS "exempt-health-events"
|
||||
#define TRAIT_NO_MIDROUND_ANTAG "no-midround-antag" //can't be turned into an antag by random events
|
||||
|
||||
// mobility flag traits
|
||||
// IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it)
|
||||
@@ -158,6 +162,15 @@
|
||||
|
||||
#define TRAIT_SWIMMING "swimming" //only applied by /datum/element/swimming, for checking
|
||||
|
||||
/**
|
||||
* COMBAT MODE/SPRINT MODE TRAITS
|
||||
*/
|
||||
|
||||
/// Prevents combat mode from being active.
|
||||
#define TRAIT_COMBAT_MODE_LOCKED "combatmode_locked"
|
||||
/// Prevents sprinting from being active.
|
||||
#define TRAIT_SPRINT_LOCKED "sprint_locked"
|
||||
|
||||
//non-mob traits
|
||||
#define TRAIT_PARALYSIS "paralysis" //Used for limb-based paralysis, where replacing the limb will fix it
|
||||
|
||||
@@ -194,6 +207,8 @@
|
||||
#define TRAIT_AUTO_CATCH_ITEM "auto_catch_item"
|
||||
#define TRAIT_CLOWN_MENTALITY "clown_mentality" // The future is now, clownman.
|
||||
#define TRAIT_FREESPRINT "free_sprinting"
|
||||
#define TRAIT_XRAY_VISION "xray_vision"
|
||||
#define TRAIT_THERMAL_VISION "thermal_vision"
|
||||
#define TRAIT_NO_TELEPORT "no-teleport" //you just can't
|
||||
#define TRAIT_NO_INTERNALS "no-internals"
|
||||
#define TRAIT_NO_ALCOHOL "alcohol_intolerance"
|
||||
@@ -219,10 +234,13 @@
|
||||
#define ROUNDSTART_TRAIT "roundstart" //cannot be removed without admin intervention
|
||||
#define GHOSTROLE_TRAIT "ghostrole"
|
||||
#define APHRO_TRAIT "aphro"
|
||||
#define BLOODSUCKER_TRAIT "bloodsucker"
|
||||
#define CLOTHING_TRAIT "clothing" //used for quirky carrygloves
|
||||
|
||||
// unique trait sources, still defines
|
||||
#define STATUE_MUTE "statue"
|
||||
#define CLONING_POD_TRAIT "cloning-pod"
|
||||
#define VIRTUAL_REALITY_TRAIT "vr_trait"
|
||||
#define CHANGELING_DRAIN "drain"
|
||||
#define CHANGELING_HIVEMIND_MUTE "ling_mute"
|
||||
#define ABYSSAL_GAZE_BLIND "abyssal_gaze"
|
||||
|
||||
@@ -5,6 +5,11 @@
|
||||
#define MAJORITY_JUDGEMENT_VOTING 4
|
||||
#define INSTANT_RUNOFF_VOTING 5
|
||||
|
||||
#define SHOW_RESULTS (1<<0)
|
||||
#define SHOW_VOTES (1<<1)
|
||||
#define SHOW_WINNER (1<<2)
|
||||
#define SHOW_ABSTENTION (1<<3)
|
||||
|
||||
GLOBAL_LIST_INIT(vote_score_options,list("Bad","Poor","Acceptable","Good","Great"))
|
||||
|
||||
GLOBAL_LIST_INIT(vote_type_names,list(\
|
||||
@@ -15,3 +20,10 @@ GLOBAL_LIST_INIT(vote_type_names,list(\
|
||||
"Raw Score (returns results from 0 to 1, winner is 1)" = SCORE_VOTING,\
|
||||
"Majority Judgement (single-winner score voting)" = MAJORITY_JUDGEMENT_VOTING,\
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(display_vote_settings, list(\
|
||||
"Results" = SHOW_RESULTS,
|
||||
"Ongoing Votes" = SHOW_VOTES,
|
||||
"Winner" = SHOW_WINNER,
|
||||
"Abstainers" = SHOW_ABSTENTION
|
||||
))
|
||||
@@ -58,15 +58,13 @@ GLOBAL_LIST_EMPTY(ipc_antennas_list)
|
||||
//Genitals and Arousal Lists
|
||||
GLOBAL_LIST_EMPTY(genitals_list)
|
||||
GLOBAL_LIST_EMPTY(cock_shapes_list)
|
||||
GLOBAL_LIST_EMPTY(gentlemans_organ_names)
|
||||
GLOBAL_LIST_EMPTY(balls_shapes_list)
|
||||
GLOBAL_LIST_EMPTY(breasts_size_list)
|
||||
GLOBAL_LIST_EMPTY(breasts_shapes_list)
|
||||
GLOBAL_LIST_EMPTY(vagina_shapes_list)
|
||||
GLOBAL_LIST_INIT(cum_into_containers_list, list(/obj/item/reagent_containers/food/snacks/pie)) //Yer fuggin snowflake name list jfc
|
||||
GLOBAL_LIST_INIT(dick_nouns, list("dick","cock","member","shaft"))
|
||||
GLOBAL_LIST_INIT(cum_id_list,"semen")
|
||||
GLOBAL_LIST_INIT(milk_id_list,"milk")
|
||||
//longcat memes.
|
||||
GLOBAL_LIST_INIT(dick_nouns, list("phallus", "willy", "dick", "prick", "member", "tool", "gentleman's organ", "cock", "wang", "knob", "dong", "joystick", "pecker", "johnson", "weenie", "tadger", "schlong", "thirsty ferret", "One eyed trouser trout", "Ding dong", "ankle spanker", "Pork sword", "engine cranker", "Harry hot dog", "Davy Crockett", "Kidney cracker", "Heat seeking moisture missile", "Giggle stick", "love whistle", "Tube steak", "Uncle Dick", "Purple helmet warrior"))
|
||||
|
||||
GLOBAL_LIST_INIT(genitals_visibility_toggles, list(GEN_VISIBLE_ALWAYS, GEN_VISIBLE_NO_CLOTHES, GEN_VISIBLE_NO_UNDIES, GEN_VISIBLE_NEVER))
|
||||
|
||||
GLOBAL_LIST_INIT(dildo_shapes, list(
|
||||
"Human" = "human",
|
||||
@@ -107,38 +105,6 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
|
||||
if(!src.holder) return
|
||||
message_admins("[key_name_admin(usr)] manually reloaded mentors")
|
||||
|
||||
//Flavor Text
|
||||
/mob/proc/set_flavor()
|
||||
set name = "Set Flavor Text"
|
||||
set desc = "Sets an extended description of your character's features."
|
||||
set category = "IC"
|
||||
|
||||
var/new_flavor = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", flavor_text, MAX_FAVOR_LEN, TRUE)
|
||||
if(!isnull(new_flavor))
|
||||
flavor_text = html_decode(new_flavor)
|
||||
to_chat(src, "Your flavor text has been updated.")
|
||||
|
||||
//Flavor Text
|
||||
/mob/proc/set_flavor_2()
|
||||
set name = "Set Temporary Flavor Text"
|
||||
set desc = "Sets a description of your character's current appearance. Use this for emotions, poses etc."
|
||||
set category = "IC"
|
||||
|
||||
var/new_flavor = stripped_multiline_input(usr, "Set the temporary flavor text in your 'examine' verb. This should be used only for things pertaining to the current round!", "Short-Term Flavor Text", flavor_text_2, MAX_FAVOR_LEN, TRUE)
|
||||
if(!isnull(new_flavor))
|
||||
flavor_text_2 = html_decode(new_flavor)
|
||||
to_chat(src, "Your temporary flavor text has been updated.")
|
||||
|
||||
/mob/proc/print_flavor_text(flavor,temp = FALSE)
|
||||
if(!flavor)
|
||||
return
|
||||
// We are decoding and then encoding to not only get correct amount of characters, but also to prevent partial escaping characters being shown.
|
||||
var/msg = html_decode(replacetext(flavor, "\n", " "))
|
||||
if(length_char(msg) <= 40)
|
||||
return "<span class='notice'>[html_encode(msg)]</span>"
|
||||
else
|
||||
return "<span class='notice'>[html_encode(copytext_char(msg, 1, 37))]... <a href='?src=[REF(src)];flavor[temp ? "2" : ""]_more=1'>More...</span></a>"
|
||||
|
||||
//LOOC toggles
|
||||
/client/verb/listen_looc()
|
||||
set name = "Show/Hide LOOC"
|
||||
@@ -171,18 +137,6 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/proc/has_ovipositor()
|
||||
var/obj/item/organ/genital/G = getorganslot(ORGAN_SLOT_PENIS)
|
||||
if(G && istype(G, /obj/item/organ/genital/ovipositor))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/proc/has_eggsack()
|
||||
var/obj/item/organ/genital/G = getorganslot(ORGAN_SLOT_TESTICLES)
|
||||
if(G && istype(G, /obj/item/organ/genital/eggsack))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/proc/is_groin_exposed(list/L)
|
||||
if(!L)
|
||||
L = get_equipped_items()
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
//////////////////////////////////////////////////////////
|
||||
//A bunch of helpers to make genetics less of a headache//
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
#define GET_INITIALIZED_MUTATION(A) GLOB.all_mutations[A]
|
||||
#define GET_GENE_STRING(A, B) (B.mutation_index[A])
|
||||
#define GET_SEQUENCE(A) (GLOB.full_sequences[A])
|
||||
|
||||
#define GET_MUTATION_STABILIZER(A) ((A.stabilizer_coeff < 0) ? 1 : A.stabilizer_coeff)
|
||||
#define GET_MUTATION_SYNCHRONIZER(A) ((A.synchronizer_coeff < 0) ? 1 : A.synchronizer_coeff)
|
||||
#define GET_MUTATION_POWER(A) ((A.power_coeff < 0) ? 1 : A.power_coeff)
|
||||
#define GET_MUTATION_ENERGY(A) ((A.energy_coeff < 0) ? 1 : A.energy_coeff)
|
||||
@@ -425,7 +425,7 @@
|
||||
candidates -= M
|
||||
|
||||
/proc/pollGhostCandidates(Question, jobbanType, datum/game_mode/gametypeCheck, be_special_flag = 0, poll_time = 300, ignore_category = null, flashwindow = TRUE)
|
||||
var/datum/element/ghost_role_eligibility/eligibility = SSdcs.GetElement(/datum/element/ghost_role_eligibility)
|
||||
var/datum/element/ghost_role_eligibility/eligibility = SSdcs.GetElement(list(/datum/element/ghost_role_eligibility))
|
||||
var/list/candidates = eligibility.get_all_ghost_role_eligible()
|
||||
return pollCandidates(Question, jobbanType, gametypeCheck, be_special_flag, poll_time, ignore_category, flashwindow, candidates)
|
||||
|
||||
|
||||
@@ -54,12 +54,6 @@
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list)
|
||||
GLOB.breasts_size_list = list ("a", "b", "c", "d", "e") //We need the list to choose from initialized, but it's no longer a sprite_accessory thing.
|
||||
GLOB.gentlemans_organ_names = list("phallus", "willy", "dick", "prick", "member", "tool", "gentleman's organ",
|
||||
"cock", "wang", "knob", "dong", "joystick", "pecker", "johnson", "weenie", "tadger", "schlong", "thirsty ferret",
|
||||
"baloney pony", "schlanger", "Mutton dagger", "old blind bob","Hanging Johnny", "fishing rod", "Tally whacker", "polly rocket",
|
||||
"One eyed trouser trout", "Ding dong", "ankle spanker", "Pork sword", "engine cranker", "Harry hot dog", "Davy Crockett",
|
||||
"Kidney cracker", "Heat seeking moisture missile", "Giggle stick", "love whistle", "Tube steak", "Uncle Dick", "Purple helmet warrior")
|
||||
|
||||
for(var/gpath in subtypesof(/obj/item/organ/genital))
|
||||
var/obj/item/organ/genital/G = gpath
|
||||
|
||||
+10
-26
@@ -181,50 +181,34 @@
|
||||
"genitals_use_skintone" = FALSE,
|
||||
"has_cock" = FALSE,
|
||||
"cock_shape" = pick(GLOB.cock_shapes_list),
|
||||
"cock_length" = 6,
|
||||
"cock_length" = COCK_SIZE_DEF,
|
||||
"cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF,
|
||||
"cock_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||
"has_sheath" = FALSE,
|
||||
"sheath_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||
"has_balls" = FALSE,
|
||||
"balls_internal" = FALSE,
|
||||
"balls_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||
"balls_amount" = 2,
|
||||
"balls_sack_size" = BALLS_SACK_SIZE_DEF,
|
||||
"balls_size" = BALLS_SIZE_DEF,
|
||||
"balls_shape" = "Single",
|
||||
"balls_shape" = DEF_BALLS_SHAPE,
|
||||
"balls_cum_rate" = CUM_RATE,
|
||||
"balls_cum_mult" = CUM_RATE_MULT,
|
||||
"balls_efficiency" = CUM_EFFICIENCY,
|
||||
"has_ovi" = FALSE,
|
||||
"ovi_shape" = "knotted",
|
||||
"ovi_length" = 6,
|
||||
"ovi_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||
"has_eggsack" = FALSE,
|
||||
"eggsack_internal" = TRUE,
|
||||
"eggsack_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||
"eggsack_size" = BALLS_SACK_SIZE_DEF,
|
||||
"eggsack_egg_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||
"eggsack_egg_size" = EGG_GIRTH_DEF,
|
||||
"has_breasts" = FALSE,
|
||||
"breasts_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||
"breasts_size" = pick(GLOB.breasts_size_list),
|
||||
"breasts_shape" = "Pair",
|
||||
"breasts_size" = pick(CONFIG_GET(keyed_list/breasts_cups_prefs)),
|
||||
"breasts_shape" = DEF_BREASTS_SHAPE,
|
||||
"breasts_producing" = FALSE,
|
||||
"has_vag" = FALSE,
|
||||
"vag_shape" = pick(GLOB.vagina_shapes_list),
|
||||
"vag_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||
"vag_clits" = 1,
|
||||
"vag_clit_diam" = 0.25,
|
||||
"vag_clit_len" = 0.25,
|
||||
"has_womb" = FALSE,
|
||||
"womb_cum_rate" = CUM_RATE,
|
||||
"womb_cum_mult" = CUM_RATE_MULT,
|
||||
"womb_efficiency" = CUM_EFFICIENCY,
|
||||
"balls_visibility" = GEN_VISIBLE_NO_UNDIES,
|
||||
"breasts_visibility"= GEN_VISIBLE_NO_UNDIES,
|
||||
"cock_visibility" = GEN_VISIBLE_NO_UNDIES,
|
||||
"vag_visibility" = GEN_VISIBLE_NO_UNDIES,
|
||||
"ipc_screen" = snowflake_ipc_antenna_list ? pick(snowflake_ipc_antenna_list) : "None",
|
||||
"ipc_antenna" = "None",
|
||||
"flavor_text" = "",
|
||||
"meat_type" = "Mammalian"
|
||||
"meat_type" = "Mammalian",
|
||||
"body_model" = MALE
|
||||
))
|
||||
|
||||
/proc/random_hair_style(gender)
|
||||
|
||||
@@ -1426,7 +1426,9 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
|
||||
/proc/get_random_drink()
|
||||
var/list/blocked = list(/obj/item/reagent_containers/food/drinks/soda_cans,
|
||||
/obj/item/reagent_containers/food/drinks/bottle
|
||||
/obj/item/reagent_containers/food/drinks/bottle,
|
||||
/obj/item/reagent_containers/food/drinks/flask/russian,
|
||||
/obj/item/reagent_containers/food/drinks/flask/steel
|
||||
)
|
||||
return pick(subtypesof(/obj/item/reagent_containers/food/drinks) - blocked)
|
||||
|
||||
@@ -1562,4 +1564,4 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
channels_to_use += channel
|
||||
|
||||
if(channels_to_use.len)
|
||||
world.TgsChatBroadcast()
|
||||
world.TgsChatBroadcast()
|
||||
|
||||
@@ -238,5 +238,16 @@ GLOBAL_LIST_INIT(bitfields, list(
|
||||
"MOBILITY_PULL" = MOBILITY_PULL,
|
||||
"MOBILITY_HOLD" = MOBILITY_HOLD,
|
||||
"MOBILITY_RESIST" = MOBILITY_RESIST
|
||||
),
|
||||
"combat_flags" = list(
|
||||
"COMBAT_FLAG_COMBAT_TOGGLED" = COMBAT_FLAG_COMBAT_TOGGLED,
|
||||
"COMBAT_FLAG_SPRINT_TOGGLED" = COMBAT_FLAG_SPRINT_TOGGLED,
|
||||
"COMBAT_FLAG_COMBAT_ACTIVE" = COMBAT_FLAG_COMBAT_ACTIVE,
|
||||
"COMBAT_FLAG_SPRINT_ACTIVE" = COMBAT_FLAG_SPRINT_ACTIVE,
|
||||
"COMBAT_FLAG_ATTEMPTING_CRAWL" = COMBAT_FLAG_ATTEMPTING_CRAWL,
|
||||
"COMBAT_FLAG_HARD_STAMCRIT" = COMBAT_FLAG_HARD_STAMCRIT,
|
||||
"COMBAT_FLAG_SOFT_STAMCRIT" = COMBAT_FLAG_SOFT_STAMCRIT,
|
||||
"COMBAT_FLAG_INTENTIONALLY_RESTING" = COMBAT_FLAG_INTENTIONALLY_RESTING,
|
||||
"COMBAT_FLAG_RESISTING_REST" = COMBAT_FLAG_RESISTING_REST
|
||||
)
|
||||
))
|
||||
|
||||
@@ -21,8 +21,11 @@ GLOBAL_LIST(op_se_blocks)
|
||||
GLOBAL_VAR(NULLED_SE)
|
||||
GLOBAL_VAR(NULLED_UI)
|
||||
|
||||
GLOBAL_LIST_EMPTY(global_mutations) // list of hidden mutation things
|
||||
GLOBAL_LIST_EMPTY(all_mutations)
|
||||
GLOBAL_LIST_EMPTY(full_sequences)
|
||||
|
||||
GLOBAL_LIST_EMPTY(bad_mutations)
|
||||
GLOBAL_LIST_EMPTY(good_mutations)
|
||||
GLOBAL_LIST_EMPTY(not_good_mutations)
|
||||
GLOBAL_LIST_EMPTY(not_good_mutations)
|
||||
|
||||
GLOBAL_LIST_EMPTY(mutation_recipes)
|
||||
@@ -36,7 +36,7 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
|
||||
/obj/item/clothing/head/welding = 1,
|
||||
/obj/item/clothing/mask/gas = 15,
|
||||
/obj/item/clothing/suit/hazardvest = 1,
|
||||
/obj/item/clothing/under/rank/vice = 1,
|
||||
/obj/item/clothing/under/misc/vice_officer = 1,
|
||||
/obj/item/clothing/suit/hooded/flashsuit = 2,
|
||||
/obj/item/clothing/accessory/medal/greytide = 1,
|
||||
/obj/item/assembly/prox_sensor = 4,
|
||||
|
||||
@@ -152,10 +152,10 @@
|
||||
else
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
UnarmedAttack(A,1)
|
||||
UnarmedAttack(A, 1)
|
||||
else
|
||||
if(W)
|
||||
W.afterattack(A,src,0,params)
|
||||
W.ranged_attack_chain(src, A, params)
|
||||
else
|
||||
RangedAttack(A,params)
|
||||
|
||||
|
||||
@@ -163,3 +163,14 @@
|
||||
#define ui_ghost_reenter_corpse "SOUTH:6,CENTER:24"
|
||||
#define ui_ghost_teleport "SOUTH:6,CENTER+1:24"
|
||||
#define ui_ghost_pai "SOUTH: 6, CENTER+2:24"
|
||||
|
||||
|
||||
//UI position overrides for 1:1 screen layout. (default is 7:5)
|
||||
#define ui_stamina "EAST-1:28,CENTER:17" // replacing internals button
|
||||
#define ui_overridden_resist "EAST-3:24,SOUTH+1:7"
|
||||
#define ui_combat_toggle "EAST-4:22,SOUTH:5"
|
||||
|
||||
#define ui_boxcraft "EAST-4:22,SOUTH+1:6"
|
||||
#define ui_boxarea "EAST-4:6,SOUTH+1:6"
|
||||
#define ui_boxlang "EAST-5:22,SOUTH+1:6"
|
||||
#define ui_boxvore "EAST-5:22,SOUTH+1:6"
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
//CITADEL CHANGES - sprint button
|
||||
using = new /obj/screen/sprintbutton
|
||||
using.icon = tg_ui_icon_to_cit_ui(ui_style)
|
||||
using.icon_state = (owner.sprinting ? "act_sprint_on" : "act_sprint")
|
||||
using.icon_state = ((owner.combat_flags & COMBAT_FLAG_SPRINT_ACTIVE) ? "act_sprint_on" : "act_sprint")
|
||||
using.screen_loc = ui_movi
|
||||
using.hud = src
|
||||
static_inventory += using
|
||||
|
||||
@@ -8,12 +8,15 @@
|
||||
*afterattack. The return value does not matter.
|
||||
*/
|
||||
/obj/item/proc/melee_attack_chain(mob/user, atom/target, params)
|
||||
if(item_flags & NO_ATTACK_CHAIN_SOFT_STAMCRIT)
|
||||
if(isliving(user))
|
||||
var/mob/living/L = user
|
||||
if(L.getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
if(isliving(user))
|
||||
var/mob/living/L = user
|
||||
if(item_flags & NO_ATTACK_CHAIN_SOFT_STAMCRIT)
|
||||
if(IS_STAMCRIT(L))
|
||||
to_chat(L, "<span class='warning'>You are too exhausted to swing [src]!</span>")
|
||||
return
|
||||
if(!CHECK_MOBILITY(L, MOBILITY_USE))
|
||||
to_chat(L, "<span class='warning'>You are unable to swing [src] right now!</span>")
|
||||
return
|
||||
if(tool_behaviour && target.tool_act(user, src, tool_behaviour))
|
||||
return
|
||||
if(pre_attack(target, user, params))
|
||||
@@ -24,6 +27,15 @@
|
||||
return
|
||||
afterattack(target, user, TRUE, params)
|
||||
|
||||
/// Like melee_attack_chain but for ranged.
|
||||
/obj/item/proc/ranged_attack_chain(mob/user, atom/target, params)
|
||||
if(isliving(user))
|
||||
var/mob/living/L = user
|
||||
if(!CHECK_MOBILITY(L, MOBILITY_USE))
|
||||
to_chat(L, "<span class='warning'>You are unable to raise [src] right now!</span>")
|
||||
return
|
||||
afterattack(target, user, FALSE, params)
|
||||
|
||||
// Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown.
|
||||
/obj/item/proc/attack_self(mob/user)
|
||||
if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_SELF, user) & COMPONENT_NO_INTERACT)
|
||||
@@ -50,7 +62,6 @@
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
return I.attack(src, user)
|
||||
|
||||
|
||||
/obj/item/proc/attack(mob/living/M, mob/living/user)
|
||||
if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, M, user) & COMPONENT_ITEM_NO_ATTACK)
|
||||
return
|
||||
@@ -58,7 +69,7 @@
|
||||
if(item_flags & NOBLUDGEON)
|
||||
return
|
||||
|
||||
if(user.getStaminaLoss() >= STAMINA_SOFTCRIT) // CIT CHANGE - makes it impossible to attack in stamina softcrit
|
||||
if(IS_STAMCRIT(user)) // CIT CHANGE - makes it impossible to attack in stamina softcrit
|
||||
to_chat(user, "<span class='warning'>You're too exhausted.</span>") // CIT CHANGE - ditto
|
||||
return // CIT CHANGE - ditto
|
||||
|
||||
@@ -88,7 +99,7 @@
|
||||
return
|
||||
if(item_flags & NOBLUDGEON)
|
||||
return
|
||||
if(user.getStaminaLoss() >= STAMINA_SOFTCRIT) // CIT CHANGE - makes it impossible to attack in stamina softcrit
|
||||
if(IS_STAMCRIT(user)) // CIT CHANGE - makes it impossible to attack in stamina softcrit
|
||||
to_chat(user, "<span class='warning'>You're too exhausted.</span>") // CIT CHANGE - ditto
|
||||
return // CIT CHANGE - ditto
|
||||
user.adjustStaminaLossBuffered(getweight()*1.2)//CIT CHANGE - makes attacking things cause stamina loss
|
||||
@@ -109,27 +120,22 @@
|
||||
/mob/living/attacked_by(obj/item/I, mob/living/user)
|
||||
//CIT CHANGES START HERE - combatmode and resting checks
|
||||
var/totitemdamage = I.force
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/tempcarb = user
|
||||
if(!tempcarb.combatmode)
|
||||
totitemdamage *= 0.5
|
||||
if(!(user.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE))
|
||||
totitemdamage *= 0.5
|
||||
if(!CHECK_MOBILITY(user, MOBILITY_STAND))
|
||||
totitemdamage *= 0.5
|
||||
//CIT CHANGES END HERE
|
||||
if(user != src && check_shields(I, totitemdamage, "the [I.name]", MELEE_ATTACK, I.armour_penetration))
|
||||
return FALSE
|
||||
send_item_attack_message(I, user)
|
||||
I.do_stagger_action(src, user)
|
||||
if(I.force)
|
||||
apply_damage(totitemdamage, I.damtype) //CIT CHANGE - replaces I.force with totitemdamage
|
||||
if(I.damtype == BRUTE && !HAS_TRAIT(src, TRAIT_NOMARROW))
|
||||
if(prob(33))
|
||||
I.add_mob_blood(src)
|
||||
var/turf/location = get_turf(src)
|
||||
if(iscarbon(src))
|
||||
var/mob/living/carbon/C = src
|
||||
C.bleed(totitemdamage)
|
||||
else
|
||||
add_splatter_floor(location)
|
||||
add_splatter_floor(location)
|
||||
if(totitemdamage >= 10 && get_dist(user, src) <= 1) //people with TK won't get smeared with blood
|
||||
user.add_mob_blood(src)
|
||||
return TRUE //successful attack
|
||||
@@ -172,5 +178,33 @@
|
||||
playsound(src, 'sound/weapons/dink.ogg', 30, 1)
|
||||
return 1
|
||||
|
||||
/// How much stamina this takes to swing this is not for realism purposes hecc off.
|
||||
/obj/item/proc/getweight()
|
||||
return total_mass || w_class * 1.25
|
||||
|
||||
/// How long this staggers for. 0 and negatives supported.
|
||||
/obj/item/proc/melee_stagger_duration()
|
||||
if(!isnull(stagger_force))
|
||||
return stagger_force
|
||||
/// totally not an untested, arbitrary equation.
|
||||
return clamp((1.5 + (w_class/7.5)) * (force / 2), 0, 10 SECONDS)
|
||||
|
||||
/obj/item/proc/do_stagger_action(mob/living/target, mob/living/user)
|
||||
if(!CHECK_BITFIELD(target.status_flags, CANSTAGGER))
|
||||
return FALSE
|
||||
if(target.combat_flags & COMBAT_FLAG_SPRINT_ACTIVE)
|
||||
target.do_staggered_animation()
|
||||
var/duration = melee_stagger_duration()
|
||||
if(!duration) //0
|
||||
return FALSE
|
||||
else if(duration > 0)
|
||||
target.Stagger(duration)
|
||||
else //negative
|
||||
target.AdjustStaggered(duration)
|
||||
return TRUE
|
||||
|
||||
/mob/proc/do_staggered_animation()
|
||||
set waitfor = FALSE
|
||||
animate(src, pixel_x = -2, pixel_y = -2, time = 1, flags = ANIMATION_RELATIVE | ANIMATION_PARALLEL)
|
||||
animate(pixel_x = 4, pixel_y = 4, time = 1, flags = ANIMATION_RELATIVE)
|
||||
animate(pixel_x = -2, pixel_y = -2, time = 0.5, flags = ANIMATION_RELATIVE)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
var/override = 0
|
||||
|
||||
for(var/datum/mutation/human/HM in dna.mutations)
|
||||
override += HM.on_attack_hand(src, A, proximity)
|
||||
override += HM.on_attack_hand(A, proximity)
|
||||
|
||||
if(override)
|
||||
return
|
||||
@@ -95,7 +95,7 @@
|
||||
return
|
||||
|
||||
for(var/datum/mutation/human/HM in dna.mutations)
|
||||
HM.on_ranged_attack(src, A, mouseparams)
|
||||
HM.on_ranged_attack(A, mouseparams)
|
||||
|
||||
if(isturf(A) && get_dist(src,A) <= 1)
|
||||
src.Move_Pulled(A)
|
||||
|
||||
@@ -371,19 +371,18 @@
|
||||
for(var/T in storyteller_cache)
|
||||
var/datum/dynamic_storyteller/S = T
|
||||
var/config_tag = initial(S.config_tag)
|
||||
var/final_weight = initial(S.weight)
|
||||
if(probabilities[config_tag]<=0)
|
||||
var/probability = (config_tag in probabilities) ? probabilities[config_tag] : initial(S.weight)
|
||||
if(probability <= 0)
|
||||
continue
|
||||
final_weight = probabilities[config_tag]
|
||||
if(SSpersistence.saved_storytellers.len == 3 && repeated_mode_adjust.len == 3)
|
||||
if(SSpersistence.saved_storytellers.len == repeated_mode_adjust.len)
|
||||
var/name = initial(S.name)
|
||||
var/recent_round = min(SSpersistence.saved_storytellers.Find(name),3)
|
||||
var/adjustment = 0
|
||||
while(recent_round)
|
||||
adjustment += repeated_mode_adjust[recent_round]
|
||||
recent_round = SSpersistence.saved_modes.Find(name,recent_round+1,0)
|
||||
final_weight *= ((100-adjustment)/100)
|
||||
runnable_storytellers[S] = final_weight
|
||||
probability *= ((100-adjustment)/100)
|
||||
runnable_storytellers[S] = probability
|
||||
return runnable_storytellers
|
||||
|
||||
|
||||
|
||||
@@ -396,6 +396,10 @@
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
|
||||
/datum/config_entry/keyed_list/job_threat
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
|
||||
/datum/config_entry/number/monkeycap
|
||||
config_entry_value = 64
|
||||
min_val = 0
|
||||
@@ -423,3 +427,21 @@
|
||||
config_entry_value = 3
|
||||
|
||||
/datum/config_entry/flag/suicide_allowed
|
||||
|
||||
/datum/config_entry/keyed_list/breasts_cups_prefs
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
config_entry_value = list("a", "b", "c", "d", "e") //keep these lowercase
|
||||
|
||||
/datum/config_entry/number/penis_min_inches_prefs
|
||||
config_entry_value = 1
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/penis_max_inches_prefs
|
||||
config_entry_value = 20
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/keyed_list/safe_visibility_toggles
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
config_entry_value = list(GEN_VISIBLE_NO_CLOTHES, GEN_VISIBLE_NO_UNDIES, GEN_VISIBLE_NEVER) //refer to cit_helpers for all toggles.
|
||||
|
||||
@@ -82,17 +82,23 @@
|
||||
config_entry_value = 600
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/vote_autotransfer_initial //length of time before the first autotransfer vote is called (deciseconds, default 2 hours)
|
||||
/// Length of time before the first autotransfer vote is called (deciseconds, default 2 hours)
|
||||
/// Set to 0 to disable the subsystem altogether.
|
||||
/datum/config_entry/number/vote_autotransfer_initial
|
||||
config_entry_value = 72000
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/vote_autotransfer_interval //length of time to wait before subsequent autotransfer votes (deciseconds, default 30 minutes)
|
||||
///length of time to wait before subsequent autotransfer votes (deciseconds, default 30 minutes)
|
||||
/datum/config_entry/number/vote_autotransfer_interval
|
||||
config_entry_value = 18000
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/vote_autotransfer_maximum // maximum extensions until the round autoends
|
||||
/// maximum extensions until the round autoends.
|
||||
/// Set to 0 to force automatic crew transfer after the 'vote_autotransfer_initial' elapsed.
|
||||
/// Set to -1 to disable the maximum extensions cap.
|
||||
/datum/config_entry/number/vote_autotransfer_maximum
|
||||
config_entry_value = 4
|
||||
min_val = 0
|
||||
min_val = -1
|
||||
|
||||
/datum/config_entry/flag/default_no_vote // vote does not default to nochange/norestart
|
||||
|
||||
@@ -459,3 +465,6 @@
|
||||
/datum/config_entry/number/max_bunker_days
|
||||
config_entry_value = 7
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/flag/minimaps_enabled
|
||||
config_entry_value = TRUE
|
||||
|
||||
@@ -257,8 +257,7 @@ SUBSYSTEM_DEF(air)
|
||||
T.add_atom_colour("#00ff00", TEMPORARY_COLOUR_PRIORITY)
|
||||
#endif
|
||||
T.excited = TRUE
|
||||
active_turfs |= T
|
||||
SSair_turfs.currentrun |= T
|
||||
active_turfs[T] = SSair_turfs.currentrun[T] = TRUE
|
||||
if(blockchanges && T.excited_group)
|
||||
T.excited_group.garbage_collect()
|
||||
add_to_react_queue(T)
|
||||
@@ -274,10 +273,9 @@ SUBSYSTEM_DEF(air)
|
||||
|
||||
/datum/controller/subsystem/air/proc/add_to_react_queue(turf/open/T)
|
||||
if(istype(T) && T.air)
|
||||
turf_react_queue |= T
|
||||
turf_react_queue[T] = TRUE
|
||||
if(currentpart == SSAIR_REACTQUEUE)
|
||||
currentrun |= T
|
||||
return
|
||||
currentrun[T] = TRUE
|
||||
|
||||
/datum/controller/subsystem/air/proc/remove_from_react_queue(turf/open/T)
|
||||
turf_react_queue -= T
|
||||
|
||||
@@ -16,7 +16,7 @@ SUBSYSTEM_DEF(atoms)
|
||||
|
||||
/datum/controller/subsystem/atoms/Initialize(timeofday)
|
||||
GLOB.fire_overlay.appearance_flags = RESET_COLOR
|
||||
setupGenetics() //to set the mutations' place in structural enzymes, so monkey.initialize() knows where to put the monkey mutation.
|
||||
setupGenetics() //to set the mutations' sequence.
|
||||
initialized = INITIALIZATION_INNEW_MAPLOAD
|
||||
InitializeAtoms()
|
||||
return ..()
|
||||
@@ -108,16 +108,19 @@ SUBSYSTEM_DEF(atoms)
|
||||
BadInitializeCalls = SSatoms.BadInitializeCalls
|
||||
|
||||
/datum/controller/subsystem/atoms/proc/setupGenetics()
|
||||
var/list/avnums = new /list(DNA_STRUC_ENZYMES_BLOCKS)
|
||||
for(var/i=1, i<=DNA_STRUC_ENZYMES_BLOCKS, i++)
|
||||
avnums[i] = i
|
||||
CHECK_TICK
|
||||
|
||||
for(var/A in subtypesof(/datum/mutation/human))
|
||||
var/datum/mutation/human/B = new A()
|
||||
if(B.dna_block == NON_SCANNABLE)
|
||||
var/list/mutations = subtypesof(/datum/mutation/human)
|
||||
shuffle_inplace(mutations)
|
||||
for(var/A in subtypesof(/datum/generecipe))
|
||||
var/datum/generecipe/GR = A
|
||||
GLOB.mutation_recipes[initial(GR.required)] = initial(GR.result)
|
||||
for(var/i in 1 to LAZYLEN(mutations))
|
||||
var/path = mutations[i] //byond gets pissy when we do it in one line
|
||||
var/datum/mutation/human/B = new path ()
|
||||
B.alias = "Mutation #[i]"
|
||||
GLOB.all_mutations[B.type] = B
|
||||
GLOB.full_sequences[B.type] = generate_gene_sequence(B.blocks)
|
||||
if(B.locked)
|
||||
continue
|
||||
B.dna_block = pick_n_take(avnums)
|
||||
if(B.quality == POSITIVE)
|
||||
GLOB.good_mutations |= B
|
||||
else if(B.quality == NEGATIVE)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#define NO_MAXVOTES_CAP -1
|
||||
|
||||
SUBSYSTEM_DEF(autotransfer)
|
||||
name = "Autotransfer Vote"
|
||||
flags = SS_KEEP_TIMING | SS_BACKGROUND
|
||||
@@ -7,21 +9,32 @@ SUBSYSTEM_DEF(autotransfer)
|
||||
var/targettime
|
||||
var/voteinterval
|
||||
var/maxvotes
|
||||
var/curvotes
|
||||
var/curvotes = 0
|
||||
|
||||
/datum/controller/subsystem/autotransfer/Initialize(timeofday)
|
||||
var/init_vote = CONFIG_GET(number/vote_autotransfer_initial)
|
||||
if(!init_vote) //Autotransfer voting disabled.
|
||||
can_fire = FALSE
|
||||
return ..()
|
||||
starttime = world.time
|
||||
targettime = starttime + CONFIG_GET(number/vote_autotransfer_initial)
|
||||
targettime = starttime + init_vote
|
||||
voteinterval = CONFIG_GET(number/vote_autotransfer_interval)
|
||||
maxvotes = CONFIG_GET(number/vote_autotransfer_maximum)
|
||||
curvotes = 0
|
||||
return ..()
|
||||
|
||||
/datum/controller/subsystem/autotransfer/Recover()
|
||||
starttime = SSautotransfer.starttime
|
||||
voteinterval = SSautotransfer.voteinterval
|
||||
curvotes = SSautotransfer.curvotes
|
||||
|
||||
/datum/controller/subsystem/autotransfer/fire()
|
||||
if(maxvotes > curvotes)
|
||||
if(world.time > targettime)
|
||||
SSvote.initiate_vote("transfer",null) //TODO figure out how to not use null as the user
|
||||
targettime = targettime + voteinterval
|
||||
curvotes += 1
|
||||
if(world.time < targettime)
|
||||
return
|
||||
if(maxvotes == NO_MAXVOTES_CAP || maxvotes > curvotes)
|
||||
SSvote.initiate_vote("transfer","server")
|
||||
targettime = targettime + voteinterval
|
||||
curvotes++
|
||||
else
|
||||
SSshuttle.autoEnd()
|
||||
|
||||
#undef NO_MAXVOTES_CAP
|
||||
@@ -1,27 +1,53 @@
|
||||
PROCESSING_SUBSYSTEM_DEF(dcs)
|
||||
name = "Datum Component System"
|
||||
flags = SS_NO_INIT
|
||||
|
||||
var/list/elements_by_type = list()
|
||||
|
||||
/datum/controller/subsystem/processing/dcs/Recover()
|
||||
comp_lookup = SSdcs.comp_lookup
|
||||
|
||||
/datum/controller/subsystem/processing/dcs/proc/GetElement(datum/element/eletype, ...)
|
||||
/datum/controller/subsystem/processing/dcs/proc/GetElement(list/arguments)
|
||||
var/datum/element/eletype = arguments[1]
|
||||
var/element_id = eletype
|
||||
|
||||
if(!ispath(eletype, /datum/element))
|
||||
CRASH("Attempted to instantiate [eletype] as a /datum/element")
|
||||
|
||||
if(initial(eletype.element_flags) & ELEMENT_BESPOKE)
|
||||
var/list/fullid = list("[eletype]")
|
||||
for(var/i in initial(eletype.id_arg_index) to length(args))
|
||||
var/argument = args[i]
|
||||
if(istext(argument) || isnum(argument))
|
||||
fullid += "[argument]"
|
||||
else
|
||||
fullid += "[REF(argument)]"
|
||||
element_id = fullid.Join("&")
|
||||
element_id = GetIdFromArguments(arguments)
|
||||
|
||||
. = elements_by_type[element_id]
|
||||
if(.)
|
||||
return
|
||||
if(!ispath(eletype, /datum/element))
|
||||
CRASH("Attempted to instantiate [eletype] as a /datum/element")
|
||||
. = elements_by_type[element_id] = new eletype
|
||||
. = elements_by_type[element_id] = new eletype
|
||||
|
||||
/****
|
||||
* Generates an id for bespoke elements when given the argument list
|
||||
* Generating the id here is a bit complex because we need to support named arguments
|
||||
* Named arguments can appear in any order and we need them to appear after ordered arguments
|
||||
* We assume that no one will pass in a named argument with a value of null
|
||||
**/
|
||||
/datum/controller/subsystem/processing/dcs/proc/GetIdFromArguments(list/arguments)
|
||||
var/datum/element/eletype = arguments[1]
|
||||
var/list/fullid = list("[eletype]")
|
||||
var/list/named_arguments = list()
|
||||
for(var/i in initial(eletype.id_arg_index) to length(arguments))
|
||||
var/key = arguments[i]
|
||||
var/value
|
||||
if(istext(key))
|
||||
value = arguments[key]
|
||||
if(!(istext(key) || isnum(key)))
|
||||
key = REF(key)
|
||||
key = "[key]" // Key is stringified so numbers dont break things
|
||||
if(!isnull(value))
|
||||
if(!(istext(value) || isnum(value)))
|
||||
value = REF(value)
|
||||
named_arguments["[key]"] = value
|
||||
else
|
||||
fullid += "[key]"
|
||||
|
||||
if(length(named_arguments))
|
||||
named_arguments = sortList(named_arguments)
|
||||
fullid += named_arguments
|
||||
return list2params(fullid)
|
||||
|
||||
@@ -66,6 +66,7 @@ SUBSYSTEM_DEF(job)
|
||||
|
||||
|
||||
/datum/controller/subsystem/job/proc/GetJob(rank)
|
||||
RETURN_TYPE(/datum/job)
|
||||
if(!occupations.len)
|
||||
SetupOccupations()
|
||||
return name_occupations[rank]
|
||||
@@ -738,4 +739,4 @@ SUBSYSTEM_DEF(job)
|
||||
. |= player.mind
|
||||
|
||||
/datum/controller/subsystem/job/proc/JobDebug(message)
|
||||
log_job_debug(message)
|
||||
log_job_debug(message)
|
||||
|
||||
@@ -103,7 +103,7 @@ SUBSYSTEM_DEF(jukeboxes)
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
if(!M.client)
|
||||
continue
|
||||
if(!(M.client.prefs.toggles & SOUND_INSTRUMENTS))
|
||||
if(!(M.client.prefs.toggles & SOUND_INSTRUMENTS) || !M.can_hear())
|
||||
M.stop_sound_channel(jukeinfo[2])
|
||||
continue
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
SUBSYSTEM_DEF(minimaps)
|
||||
name = "Minimaps"
|
||||
flags = SS_NO_FIRE
|
||||
var/list/station_minimaps
|
||||
var/datum/minimap_group/station_minimap
|
||||
|
||||
/datum/controller/subsystem/minimaps/Initialize()
|
||||
if(!CONFIG_GET(flag/minimaps_enabled))
|
||||
to_chat(world, "<span class='boldwarning'>Minimaps disabled! Skipping init.</span>")
|
||||
return ..()
|
||||
build_minimaps()
|
||||
return ..()
|
||||
|
||||
/datum/controller/subsystem/minimaps/proc/build_minimaps()
|
||||
station_minimaps = list()
|
||||
for(var/z in SSmapping.levels_by_trait(ZTRAIT_STATION))
|
||||
var/datum/space_level/SL = SSmapping.get_level(z)
|
||||
var/name = (SL.name == initial(SL.name))? "[z] - Station" : "[z] - [SL.name]"
|
||||
station_minimaps += new /datum/minimap(z, name = name)
|
||||
station_minimap = new(station_minimaps, "Station")
|
||||
@@ -37,11 +37,11 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
|
||||
if(job?.blacklisted_quirks)
|
||||
cut = filter_quirks(my_quirks, job.blacklisted_quirks)
|
||||
for(var/V in my_quirks)
|
||||
var/datum/quirk/Q = quirks[V]
|
||||
if(Q)
|
||||
if(V in quirks)
|
||||
var/datum/quirk/Q = quirks[V]
|
||||
user.add_quirk(Q, spawn_effects)
|
||||
else
|
||||
stack_trace("Invalid quirk \"[V]\" in client [cli.ckey] preferences")
|
||||
log_admin("Invalid quirk \"[V]\" in client [cli.ckey] preferences")
|
||||
cli.prefs.all_quirks -= V
|
||||
badquirk = TRUE
|
||||
if(badquirk)
|
||||
@@ -85,7 +85,7 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
|
||||
our_quirks -= i
|
||||
cut += i
|
||||
pointscut += quirk_points_by_name(i)
|
||||
if (pointscut >= 0) //with how it works, it needs to be above zero, not below, as points for positive is positive, and negative is negative, we only want it to break if it's above zero, ie. we cut more positive than negative
|
||||
if (pointscut >= 0)
|
||||
break
|
||||
/* //Code to automatically reduce positive quirks until balance is even.
|
||||
var/points_used = total_points(our_quirks)
|
||||
@@ -102,7 +102,7 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
|
||||
*/
|
||||
|
||||
//Nah, let's null all non-neutrals out.
|
||||
if (pointscut != 0)// only if the pointscutting didn't work.
|
||||
if (pointscut < 0)// only if the pointscutting didn't work.
|
||||
if(cut.len)
|
||||
for(var/i in our_quirks)
|
||||
if(quirk_points_by_name(i) != 0)
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
PROCESSING_SUBSYSTEM_DEF(status_effects)
|
||||
wait = 1
|
||||
flags = SS_TICKER
|
||||
@@ -479,15 +479,15 @@ SUBSYSTEM_DEF(ticker)
|
||||
var/vote_type = CONFIG_GET(string/map_vote_type)
|
||||
switch(vote_type)
|
||||
if("PLURALITY")
|
||||
SSvote.initiate_vote("map","server",hideresults=TRUE)
|
||||
SSvote.initiate_vote("map","server", display = SHOW_RESULTS)
|
||||
if("APPROVAL")
|
||||
SSvote.initiate_vote("map","server",hideresults=TRUE,votesystem = APPROVAL_VOTING)
|
||||
SSvote.initiate_vote("map","server", display = SHOW_RESULTS, votesystem = APPROVAL_VOTING)
|
||||
if("IRV")
|
||||
SSvote.initiate_vote("map","server",hideresults=TRUE,votesystem = INSTANT_RUNOFF_VOTING)
|
||||
SSvote.initiate_vote("map","server", display = SHOW_RESULTS, votesystem = INSTANT_RUNOFF_VOTING)
|
||||
if("SCORE")
|
||||
SSvote.initiate_vote("map","server",hideresults=TRUE,votesystem = MAJORITY_JUDGEMENT_VOTING)
|
||||
SSvote.initiate_vote("map","server", display = SHOW_RESULTS, votesystem = MAJORITY_JUDGEMENT_VOTING)
|
||||
else
|
||||
SSvote.initiate_vote("map","server",hideresults=TRUE)
|
||||
SSvote.initiate_vote("map","server", display = SHOW_RESULTS)
|
||||
// fallback
|
||||
|
||||
/datum/controller/subsystem/ticker/proc/HasRoundStarted()
|
||||
@@ -503,9 +503,9 @@ SUBSYSTEM_DEF(ticker)
|
||||
SSticker.modevoted = TRUE
|
||||
var/dynamic = CONFIG_GET(flag/dynamic_voting)
|
||||
if(dynamic)
|
||||
SSvote.initiate_vote("dynamic","server",hideresults=TRUE,votesystem=SCORE_VOTING,forced=TRUE,vote_time = 20 MINUTES)
|
||||
SSvote.initiate_vote("dynamic", "server", display = NONE, votesystem = SCORE_VOTING, forced = TRUE,vote_time = 20 MINUTES)
|
||||
else
|
||||
SSvote.initiate_vote("roundtype","server",hideresults=TRUE,votesystem=PLURALITY_VOTING,forced=TRUE, \
|
||||
SSvote.initiate_vote("roundtype", "server", display = NONE, votesystem = PLURALITY_VOTING, forced=TRUE, \
|
||||
vote_time = (CONFIG_GET(flag/modetier_voting) ? 1 MINUTES : 20 MINUTES))
|
||||
|
||||
/datum/controller/subsystem/ticker/Recover()
|
||||
|
||||
@@ -69,12 +69,12 @@ SUBSYSTEM_DEF(traumas)
|
||||
|
||||
"spiders" = typecacheof(list(/obj/structure/spider)),
|
||||
|
||||
"security" = typecacheof(list(/obj/item/clothing/under/rank/security, /obj/item/clothing/under/rank/warden,
|
||||
/obj/item/clothing/under/rank/head_of_security, /obj/item/clothing/under/rank/det,
|
||||
"security" = typecacheof(list(/obj/item/clothing/under/rank/security/officer, /obj/item/clothing/under/rank/security/warden,
|
||||
/obj/item/clothing/under/rank/security/head_of_security, /obj/item/clothing/under/rank/security/detective,
|
||||
/obj/item/melee/baton, /obj/item/gun/energy/taser, /obj/item/restraints/handcuffs,
|
||||
/obj/machinery/door/airlock/security, /obj/effect/hallucination/simple/securitron)),
|
||||
|
||||
"clowns" = typecacheof(list(/obj/item/clothing/under/rank/clown, /obj/item/clothing/shoes/clown_shoes,
|
||||
"clowns" = typecacheof(list(/obj/item/clothing/under/rank/civilian/clown, /obj/item/clothing/shoes/clown_shoes,
|
||||
/obj/item/clothing/mask/gas/clown_hat, /obj/item/instrument/bikehorn,
|
||||
/obj/item/pda/clown, /obj/item/grown/bananapeel)),
|
||||
|
||||
@@ -87,15 +87,15 @@ SUBSYSTEM_DEF(traumas)
|
||||
"skeletons" = typecacheof(list(/obj/item/organ/tongue/bone, /obj/item/clothing/suit/armor/bone, /obj/item/stack/sheet/bone,
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton,
|
||||
/obj/effect/decal/remains/human)),
|
||||
"conspiracies" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_security,
|
||||
/obj/item/clothing/under/rank/chief_engineer, /obj/item/clothing/under/rank/chief_medical_officer,
|
||||
/obj/item/clothing/under/rank/head_of_personnel, /obj/item/clothing/under/rank/research_director,
|
||||
/obj/item/clothing/under/rank/head_of_security/grey, /obj/item/clothing/under/rank/head_of_security/alt,
|
||||
/obj/item/clothing/under/rank/research_director/alt, /obj/item/clothing/under/rank/research_director/turtleneck,
|
||||
/obj/item/clothing/under/captainparade, /obj/item/clothing/under/hosparademale, /obj/item/clothing/under/hosparadefem,
|
||||
"conspiracies" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/security/head_of_security,
|
||||
/obj/item/clothing/under/rank/engineering/chief_engineer, /obj/item/clothing/under/rank/medical/chief_medical_officer,
|
||||
/obj/item/clothing/under/rank/civilian/head_of_personnel, /obj/item/clothing/under/rank/rnd/research_director,
|
||||
/obj/item/clothing/under/rank/security/head_of_security/grey, /obj/item/clothing/under/rank/security/head_of_security/alt,
|
||||
/obj/item/clothing/under/rank/rnd/research_director/alt, /obj/item/clothing/under/rank/rnd/research_director/turtleneck,
|
||||
/obj/item/clothing/under/rank/captain/parade, /obj/item/clothing/under/rank/security/head_of_security/parade, /obj/item/clothing/under/rank/security/head_of_security/parade/female,
|
||||
/obj/item/clothing/head/helmet/abductor, /obj/item/clothing/suit/armor/abductor/vest, /obj/item/abductor/baton,
|
||||
/obj/item/storage/belt/military/abductor, /obj/item/gun/energy/alien, /obj/item/abductor/silencer,
|
||||
/obj/item/abductor/gizmo, /obj/item/clothing/under/rank/centcom_officer,
|
||||
/obj/item/abductor/gizmo, /obj/item/clothing/under/rank/centcom/officer,
|
||||
/obj/item/clothing/suit/space/hardsuit/ert, /obj/item/clothing/suit/space/hardsuit/ert/sec,
|
||||
/obj/item/clothing/suit/space/hardsuit/ert/engi, /obj/item/clothing/suit/space/hardsuit/ert/med,
|
||||
/obj/item/clothing/suit/space/hardsuit/deathsquad, /obj/item/clothing/head/helmet/space/hardsuit/deathsquad,
|
||||
@@ -103,8 +103,8 @@ SUBSYSTEM_DEF(traumas)
|
||||
"robots" = typecacheof(list(/obj/machinery/computer/upload, /obj/item/aiModule/, /obj/machinery/recharge_station,
|
||||
/obj/item/aicard, /obj/item/deactivated_swarmer, /obj/effect/mob_spawn/swarmer)),
|
||||
|
||||
"doctors" = typecacheof(list(/obj/item/clothing/under/rank/medical, /obj/item/clothing/under/rank/chemist,
|
||||
/obj/item/clothing/under/rank/nursesuit, /obj/item/clothing/under/rank/chief_medical_officer,
|
||||
"doctors" = typecacheof(list(/obj/item/clothing/under/rank/medical/doctor, /obj/item/clothing/under/rank/medical/chemist,
|
||||
/obj/item/clothing/under/rank/medical/doctor/nurse, /obj/item/clothing/under/rank/medical/chief_medical_officer,
|
||||
/obj/item/reagent_containers/syringe, /obj/item/reagent_containers/pill/, /obj/item/reagent_containers/hypospray,
|
||||
/obj/item/storage/firstaid, /obj/item/storage/pill_bottle, /obj/item/healthanalyzer,
|
||||
/obj/structure/sign/departments/medbay, /obj/machinery/door/airlock/medical, /obj/machinery/sleeper,
|
||||
@@ -112,10 +112,10 @@ SUBSYSTEM_DEF(traumas)
|
||||
/obj/item/retractor, /obj/item/hemostat, /obj/item/cautery, /obj/item/surgicaldrill, /obj/item/scalpel, /obj/item/circular_saw,
|
||||
/obj/item/clothing/suit/bio_suit/plaguedoctorsuit, /obj/item/clothing/head/plaguedoctorhat, /obj/item/clothing/mask/gas/plaguedoctor)),
|
||||
|
||||
"authority" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_personnel,
|
||||
/obj/item/clothing/under/rank/head_of_security, /obj/item/clothing/under/rank/research_director,
|
||||
/obj/item/clothing/under/rank/chief_medical_officer, /obj/item/clothing/under/rank/chief_engineer,
|
||||
/obj/item/clothing/under/rank/centcom_officer, /obj/item/clothing/under/rank/centcom_commander,
|
||||
"authority" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/civilian/head_of_personnel,
|
||||
/obj/item/clothing/under/rank/security/head_of_security, /obj/item/clothing/under/rank/rnd/research_director,
|
||||
/obj/item/clothing/under/rank/medical/chief_medical_officer, /obj/item/clothing/under/rank/engineering/chief_engineer,
|
||||
/obj/item/clothing/under/rank/centcom/officer, /obj/item/clothing/under/rank/centcom/commander,
|
||||
/obj/item/melee/classic_baton/telescopic, /obj/item/card/id/silver, /obj/item/card/id/gold,
|
||||
/obj/item/card/id/captains_spare, /obj/item/card/id/centcom, /obj/machinery/door/airlock/command)),
|
||||
|
||||
@@ -131,7 +131,7 @@ SUBSYSTEM_DEF(traumas)
|
||||
/obj/item/clothing/suit/wizrobe, /obj/item/clothing/head/wizard, /obj/item/spellbook, /obj/item/staff,
|
||||
/obj/item/clothing/suit/space/hardsuit/shielded/wizard, /obj/item/clothing/suit/space/hardsuit/wizard,
|
||||
/obj/item/gun/magic/staff, /obj/item/gun/magic/wand,
|
||||
/obj/item/nullrod, /obj/item/clothing/under/rank/chaplain)),
|
||||
/obj/item/nullrod, /obj/item/clothing/under/rank/civilian/chaplain)),
|
||||
|
||||
"aliens" = typecacheof(list(/obj/item/clothing/mask/facehugger, /obj/item/organ/body_egg/alien_embryo,
|
||||
/obj/structure/alien, /obj/item/toy/toy_xeno,
|
||||
@@ -145,21 +145,21 @@ SUBSYSTEM_DEF(traumas)
|
||||
|
||||
"birds" = typecacheof(list(/obj/item/clothing/mask/gas/plaguedoctor, /obj/item/reagent_containers/food/snacks/cracker,
|
||||
/obj/item/clothing/suit/chickensuit, /obj/item/clothing/head/chicken,
|
||||
/obj/item/clothing/suit/toggle/owlwings, /obj/item/clothing/under/owl, /obj/item/clothing/mask/gas/owl_mask,
|
||||
/obj/item/clothing/under/griffin, /obj/item/clothing/shoes/griffin, /obj/item/clothing/head/griffin,
|
||||
/obj/item/clothing/suit/toggle/owlwings, /obj/item/clothing/under/costume/owl, /obj/item/clothing/mask/gas/owl_mask,
|
||||
/obj/item/clothing/under/costume/griffin, /obj/item/clothing/shoes/griffin, /obj/item/clothing/head/griffin,
|
||||
/obj/item/clothing/head/helmet/space/freedom, /obj/item/clothing/suit/space/freedom)),
|
||||
|
||||
"anime" = typecacheof(list(/obj/item/clothing/under/schoolgirl, /obj/item/katana, /obj/item/reagent_containers/food/snacks/sashimi, /obj/item/reagent_containers/food/snacks/chawanmushi,
|
||||
"anime" = typecacheof(list(/obj/item/clothing/under/costume/schoolgirl, /obj/item/katana, /obj/item/reagent_containers/food/snacks/sashimi, /obj/item/reagent_containers/food/snacks/chawanmushi,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/sake, /obj/item/throwing_star, /obj/item/clothing/head/kitty/genuine, /obj/item/clothing/suit/space/space_ninja,
|
||||
/obj/item/clothing/mask/gas/space_ninja, /obj/item/clothing/shoes/space_ninja, /obj/item/clothing/gloves/space_ninja, /obj/item/twohanded/vibro_weapon,
|
||||
/obj/item/nullrod/scythe/vibro, /obj/item/energy_katana, /obj/item/toy/katana, /obj/item/nullrod/claymore/katana, /obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe)),
|
||||
|
||||
"mimes" = typecacheof(list(/obj/item/pda/mime, /obj/item/clothing/under/rank/mime, /obj/item/clothing/mask/gas/mime,
|
||||
"mimes" = typecacheof(list(/obj/item/pda/mime, /obj/item/clothing/under/rank/civilian/mime, /obj/item/clothing/mask/gas/mime,
|
||||
/obj/item/clothing/head/frenchberet, /obj/item/clothing/suit/suspenders, /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing,
|
||||
/obj/item/storage/backpack/mime, /obj/item/reagent_containers/food/snacks/grown/banana/mime,
|
||||
/obj/item/grown/bananapeel/mimanapeel, /obj/item/cartridge/virus/mime, /obj/item/clothing/shoes/sneakers/mime,
|
||||
/obj/item/bedsheet/mime, /obj/item/reagent_containers/food/snacks/burger/mime, /obj/item/clothing/head/beret, /obj/item/clothing/mask/gas/sexymime,
|
||||
/obj/item/clothing/under/sexymime, /obj/item/toy/figure/mime, /obj/item/toy/crayon/mime, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced, /obj/mecha/combat/reticence)),
|
||||
/obj/item/clothing/under/rank/civilian/mime/sexy, /obj/item/toy/figure/mime, /obj/item/toy/crayon/mime, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced, /obj/mecha/combat/reticence)),
|
||||
|
||||
"cats" = typecacheof(list(/obj/item/organ/ears/cat, /obj/item/organ/tail/cat, /obj/item/laser_pointer, /obj/item/toy/cattoy, /obj/item/clothing/head/kitty,
|
||||
/obj/item/clothing/head/collectable/kitty, /obj/item/melee/chainofcommand/tailwhip/kitty, /obj/item/stack/sheet/animalhide/cat)),
|
||||
|
||||
@@ -23,7 +23,7 @@ SUBSYSTEM_DEF(vote)
|
||||
var/list/generated_actions = list()
|
||||
var/next_pop = 0
|
||||
|
||||
var/obfuscated = FALSE//CIT CHANGE - adds obfuscated/admin-only votes
|
||||
var/display_votes = SHOW_RESULTS|SHOW_VOTES|SHOW_WINNER|SHOW_ABSTENTION //CIT CHANGE - adds obfuscated/admin-only votes
|
||||
|
||||
var/list/stored_gamemode_votes = list() //Basically the last voted gamemode is stored here for end-of-round use.
|
||||
|
||||
@@ -59,7 +59,7 @@ SUBSYSTEM_DEF(vote)
|
||||
voted.Cut()
|
||||
voting.Cut()
|
||||
scores.Cut()
|
||||
obfuscated = FALSE //CIT CHANGE - obfuscated votes
|
||||
display_votes = initial(display_votes) //CIT CHANGE - obfuscated votes
|
||||
remove_action_buttons()
|
||||
|
||||
/datum/controller/subsystem/vote/proc/get_result()
|
||||
@@ -89,20 +89,6 @@ SUBSYSTEM_DEF(vote)
|
||||
choices[GLOB.master_mode] += non_voters.len
|
||||
if(choices[GLOB.master_mode] >= greatest_votes)
|
||||
greatest_votes = choices[GLOB.master_mode]
|
||||
else if(mode == "transfer") // austation begin -- Crew autotransfer vote
|
||||
var/factor = 1
|
||||
switch(world.time / (1 MINUTES))
|
||||
if(0 to 60)
|
||||
factor = 0.5
|
||||
if(61 to 120)
|
||||
factor = 0.8
|
||||
if(121 to 240)
|
||||
factor = 1
|
||||
if(241 to 300)
|
||||
factor = 1.2
|
||||
else
|
||||
factor = 1.4
|
||||
choices["Initiate Crew Transfer"] += round(non_voters.len * factor) // austation end
|
||||
//get all options with that many votes and return them in a list
|
||||
. = list()
|
||||
if(greatest_votes)
|
||||
@@ -264,7 +250,7 @@ SUBSYSTEM_DEF(vote)
|
||||
if(winners.len > 0)
|
||||
if(was_roundtype_vote)
|
||||
stored_gamemode_votes = list()
|
||||
if(!obfuscated)
|
||||
if(display_votes & SHOW_RESULTS)
|
||||
if(vote_system == SCHULZE_VOTING)
|
||||
text += "\nIt should be noted that this is not a raw tally of votes (impossible in ranked choice) but the score determined by the schulze method of voting, so the numbers will look weird!"
|
||||
if(vote_system == MAJORITY_JUDGEMENT_VOTING)
|
||||
@@ -275,15 +261,15 @@ SUBSYSTEM_DEF(vote)
|
||||
votes = 0
|
||||
if(was_roundtype_vote)
|
||||
stored_gamemode_votes[choices[i]] = votes
|
||||
text += "\n<b>[choices[i]]:</b> [obfuscated ? "???" : votes]" //CIT CHANGE - adds obfuscated votes
|
||||
text += "\n<b>[choices[i]]:</b> [display_votes & SHOW_RESULTS ? votes : "???"]" //CIT CHANGE - adds obfuscated votes
|
||||
if(mode != "custom")
|
||||
if(winners.len > 1 && !obfuscated) //CIT CHANGE - adds obfuscated votes
|
||||
if(winners.len > 1 && display_votes & SHOW_WINNER) //CIT CHANGE - adds obfuscated votes
|
||||
text = "\n<b>Vote Tied Between:</b>"
|
||||
for(var/option in winners)
|
||||
text += "\n\t[option]"
|
||||
. = pick(winners)
|
||||
text += "\n<b>Vote Result: [obfuscated ? "???" : .]</b>" //CIT CHANGE - adds obfuscated votes
|
||||
else
|
||||
text += "\n<b>Vote Result: [display_votes & SHOW_WINNER ? . : "???"]</b>" //CIT CHANGE - adds obfuscated votes
|
||||
if(display_votes & SHOW_ABSTENTION)
|
||||
text += "\n<b>Did not vote:</b> [GLOB.clients.len-voted.len]"
|
||||
else if(vote_system == SCORE_VOTING)
|
||||
for(var/score_name in scores)
|
||||
@@ -292,7 +278,7 @@ SUBSYSTEM_DEF(vote)
|
||||
score = 0
|
||||
if(was_roundtype_vote)
|
||||
stored_gamemode_votes[score_name] = score
|
||||
text = "\n<b>[score_name]:</b> [obfuscated ? "???" : score]"
|
||||
text = "\n<b>[score_name]:</b> [display_votes & SHOW_RESULTS ? score : "???"]"
|
||||
. = 1
|
||||
else
|
||||
text += "<b>Vote Result: Inconclusive - No Votes!</b>"
|
||||
@@ -309,7 +295,7 @@ SUBSYSTEM_DEF(vote)
|
||||
if(islist(myvote))
|
||||
for(var/j=1,j<=myvote.len,j++)
|
||||
SSblackbox.record_feedback("nested tally","voting",1,list(vote_title_text,"[j]\th",choices[myvote[j]]))
|
||||
if(obfuscated) //CIT CHANGE - adds obfuscated votes. this messages admins with the vote's true results
|
||||
if(!(display_votes & SHOW_RESULTS)) //CIT CHANGE - adds obfuscated votes. this messages admins with the vote's true results
|
||||
var/admintext = "Obfuscated results"
|
||||
if(vote_system != SCORE_VOTING)
|
||||
if(vote_system == SCHULZE_VOTING)
|
||||
@@ -341,7 +327,7 @@ SUBSYSTEM_DEF(vote)
|
||||
if(CONFIG_GET(flag/modetier_voting))
|
||||
reset()
|
||||
started_time = 0
|
||||
initiate_vote("mode tiers","server",hideresults=FALSE,votesystem=SCORE_VOTING,forced=TRUE, vote_time = 30 MINUTES)
|
||||
initiate_vote("mode tiers","server", votesystem=SCORE_VOTING, forced=TRUE, vote_time = 30 MINUTES)
|
||||
to_chat(world,"<b>The vote will end right as the round starts.</b>")
|
||||
return .
|
||||
if("restart")
|
||||
@@ -368,11 +354,15 @@ SUBSYSTEM_DEF(vote)
|
||||
return message_admins("A vote has tried to change the gamemode, but the game has already started. Aborting.")
|
||||
GLOB.master_mode = "dynamic"
|
||||
var/list/runnable_storytellers = config.get_runnable_storytellers()
|
||||
var/datum/dynamic_storyteller/picked
|
||||
for(var/T in runnable_storytellers)
|
||||
var/datum/dynamic_storyteller/S = T
|
||||
runnable_storytellers[S] *= stored_gamemode_votes[initial(S.name)]
|
||||
var/datum/dynamic_storyteller/S = pickweightAllowZero(runnable_storytellers)
|
||||
GLOB.dynamic_storyteller_type = S
|
||||
if(stored_gamemode_votes[initial(S.name)] == 1 && CHECK_BITFIELD(initial(S.flags), FORCE_IF_WON))
|
||||
picked = S
|
||||
runnable_storytellers[S] *= round(stored_gamemode_votes[initial(S.name)]*100000,1)
|
||||
if(!picked)
|
||||
picked = pickweightAllowZero(runnable_storytellers)
|
||||
GLOB.dynamic_storyteller_type = picked
|
||||
if("map")
|
||||
var/datum/map_config/VM = config.maplist[.]
|
||||
message_admins("The map has been voted for and will change to: [VM.map_name]")
|
||||
@@ -446,7 +436,7 @@ SUBSYSTEM_DEF(vote)
|
||||
saved -= usr.ckey
|
||||
return 0
|
||||
|
||||
/datum/controller/subsystem/vote/proc/initiate_vote(vote_type, initiator_key, hideresults, votesystem = PLURALITY_VOTING, forced = FALSE,vote_time = -1)//CIT CHANGE - adds hideresults argument to votes to allow for obfuscated votes
|
||||
/datum/controller/subsystem/vote/proc/initiate_vote(vote_type, initiator_key, display = display_votes, votesystem = PLURALITY_VOTING, forced = FALSE,vote_time = -1)//CIT CHANGE - adds display argument to votes to allow for obfuscated votes
|
||||
vote_system = votesystem
|
||||
if(!mode)
|
||||
if(started_time)
|
||||
@@ -457,7 +447,7 @@ SUBSYSTEM_DEF(vote)
|
||||
|
||||
var/admin = FALSE
|
||||
var/ckey = ckey(initiator_key)
|
||||
if(GLOB.admin_datums[ckey])
|
||||
if(GLOB.admin_datums[ckey] || initiator_key == "server")
|
||||
admin = TRUE
|
||||
|
||||
if(next_allowed_time > world.time && !admin)
|
||||
@@ -466,7 +456,7 @@ SUBSYSTEM_DEF(vote)
|
||||
|
||||
SEND_SOUND(world, sound('sound/misc/notice2.ogg'))
|
||||
reset()
|
||||
obfuscated = hideresults //CIT CHANGE - adds obfuscated votes
|
||||
display_votes = display //CIT CHANGE - adds obfuscated votes
|
||||
switch(vote_type)
|
||||
if("restart")
|
||||
choices.Add("Restart Round","Continue Playing")
|
||||
@@ -517,6 +507,21 @@ SUBSYSTEM_DEF(vote)
|
||||
if(!option || mode || !usr.client)
|
||||
break
|
||||
choices.Add(option)
|
||||
var/keep_going = TRUE
|
||||
var/toggles = SHOW_RESULTS|SHOW_VOTES|SHOW_WINNER
|
||||
while(keep_going)
|
||||
var/list/choices = list()
|
||||
for(var/A in GLOB.display_vote_settings)
|
||||
var/toggletext
|
||||
var/bitflag = GLOB.display_vote_settings[A]
|
||||
toggletext = "[toggles & bitflag ? "Show" : "Hide"] [A]"
|
||||
choices[toggletext] = bitflag
|
||||
var/chosen = input(usr, "Toggle vote display settings. Cancel to finalize.", toggles) as null|anything in choices
|
||||
if(!chosen)
|
||||
keep_going = FALSE
|
||||
else
|
||||
toggles ^= choices[chosen]
|
||||
display_votes = toggles
|
||||
else
|
||||
return 0
|
||||
mode = vote_type
|
||||
@@ -587,7 +592,7 @@ SUBSYSTEM_DEF(vote)
|
||||
ivotedforthis = ((C.ckey in voted) && (i in voted[C.ckey]))
|
||||
if(!votes)
|
||||
votes = 0
|
||||
. += "<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
|
||||
. += "<li>[ivotedforthis ? "<b>" : ""]<a href='?src=[REF(src)];vote=[i]'>[choices[i]]</a> ([display_votes & SHOW_VOTES ? votes : (admin ? "??? ([votes])" : "???")] votes)[ivotedforthis ? "</b>" : ""]</li>" // CIT CHANGE - adds obfuscated votes
|
||||
if(choice_descs.len >= i)
|
||||
. += "<li>[choice_descs[i]]</li>"
|
||||
. += "</ul><hr>"
|
||||
|
||||
@@ -676,7 +676,8 @@
|
||||
|
||||
//Preset for general and toggled actions
|
||||
/datum/action/innate
|
||||
check_flags = 0
|
||||
check_flags = NONE
|
||||
required_mobility_flags = NONE
|
||||
var/active = 0
|
||||
|
||||
/datum/action/innate/Trigger()
|
||||
|
||||
+19
-12
@@ -9,8 +9,8 @@
|
||||
var/max_distance = 0
|
||||
var/sleep_time = 3
|
||||
var/finished = 0
|
||||
var/target_oldloc = null
|
||||
var/origin_oldloc = null
|
||||
var/turf/target_oldloc
|
||||
var/turf/origin_oldloc
|
||||
var/static_beam = 0
|
||||
var/beam_type = /obj/effect/ebeam //must be subtype
|
||||
var/timing_id = null
|
||||
@@ -23,13 +23,13 @@
|
||||
target_oldloc = get_turf(target)
|
||||
sleep_time = beam_sleep_time
|
||||
if(origin_oldloc == origin && target_oldloc == target)
|
||||
static_beam = 1
|
||||
static_beam = TRUE
|
||||
max_distance = maxdistance
|
||||
base_icon = new(beam_icon,beam_icon_state)
|
||||
icon = beam_icon
|
||||
icon_state = beam_icon_state
|
||||
beam_type = btype
|
||||
if(time < INFINITY)
|
||||
if(time < INFINITY)
|
||||
addtimer(CALLBACK(src,.proc/End), time)
|
||||
|
||||
/datum/beam/proc/Start()
|
||||
@@ -42,10 +42,14 @@
|
||||
return
|
||||
recalculating = TRUE
|
||||
timing_id = null
|
||||
if(origin && target && get_dist(origin,target)<max_distance && origin.z == target.z)
|
||||
var/origin_turf = get_turf(origin)
|
||||
var/target_turf = get_turf(target)
|
||||
if(!static_beam && (origin_turf != origin_oldloc || target_turf != target_oldloc))
|
||||
var/turf/origin_turf
|
||||
if(origin)
|
||||
origin_turf = get_turf(origin)
|
||||
var/turf/target_turf
|
||||
if(target)
|
||||
target_turf = get_turf(target)
|
||||
if(origin_turf && target_turf && (get_dist(origin_turf, target_turf) < max_distance) && (origin_turf.z == target_turf.z))
|
||||
if(!static_beam && ((origin_turf != origin_oldloc) || (target_turf != target_oldloc)))
|
||||
origin_oldloc = origin_turf //so we don't keep checking against their initial positions, leading to endless Reset()+Draw() calls
|
||||
target_oldloc = target_turf
|
||||
Reset()
|
||||
@@ -83,24 +87,27 @@
|
||||
elements.Cut()
|
||||
|
||||
/datum/beam/Destroy()
|
||||
finished = TRUE
|
||||
Reset()
|
||||
target = null
|
||||
origin = null
|
||||
return ..()
|
||||
|
||||
/datum/beam/proc/Draw()
|
||||
var/Angle = round(Get_Angle(origin,target))
|
||||
if(!origin_oldloc || !target_oldloc)
|
||||
return
|
||||
var/Angle = round(Get_Angle(origin_oldloc,target_oldloc))
|
||||
var/matrix/rot_matrix = matrix()
|
||||
rot_matrix.Turn(Angle)
|
||||
|
||||
//Translation vector for origin and target
|
||||
var/DX = (32*target.x+target.pixel_x)-(32*origin.x+origin.pixel_x)
|
||||
var/DY = (32*target.y+target.pixel_y)-(32*origin.y+origin.pixel_y)
|
||||
var/DX = (32*target_oldloc.x+target_oldloc.pixel_x)-(32*origin_oldloc.x+origin_oldloc.pixel_x)
|
||||
var/DY = (32*target_oldloc.y+target_oldloc.pixel_y)-(32*origin_oldloc.y+origin_oldloc.pixel_y)
|
||||
var/N = 0
|
||||
var/length = round(sqrt((DX)**2+(DY)**2)) //hypotenuse of the triangle formed by target and origin's displacement
|
||||
|
||||
for(N in 0 to length-1 step 32)//-1 as we want < not <=, but we want the speed of X in Y to Z and step X
|
||||
if(QDELETED(src) || finished)
|
||||
if(finished)
|
||||
break
|
||||
var/obj/effect/ebeam/X = new beam_type(origin_oldloc)
|
||||
X.owner = src
|
||||
|
||||
@@ -47,9 +47,9 @@
|
||||
|
||||
/datum/brain_trauma/special/imaginary_friend/proc/get_ghost()
|
||||
set waitfor = FALSE
|
||||
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s imaginary friend?", ROLE_PAI, null, null, 75, friend, POLL_IGNORE_IMAGINARYFRIEND)
|
||||
var/list/candidates = pollCandidatesForMob("Do you want to play as [owner]'s imaginary friend?", ROLE_PAI, null, null, 75, friend, POLL_IGNORE_IMAGINARYFRIEND)
|
||||
if(LAZYLEN(candidates))
|
||||
var/mob/dead/observer/C = pick(candidates)
|
||||
var/mob/C = pick(candidates)
|
||||
C.transfer_ckey(friend, FALSE)
|
||||
friend_initialized = TRUE
|
||||
else
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
..()
|
||||
make_backseats()
|
||||
get_ghost()
|
||||
RegisterSignal(M, COMSIG_MOB_DEATH, .proc/revert_to_normal)
|
||||
|
||||
/datum/brain_trauma/severe/split_personality/proc/make_backseats()
|
||||
stranger_backseat = new(owner, src)
|
||||
@@ -27,9 +28,9 @@
|
||||
|
||||
/datum/brain_trauma/severe/split_personality/proc/get_ghost()
|
||||
set waitfor = FALSE
|
||||
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s split personality?", ROLE_PAI, null, null, 75, stranger_backseat, POLL_IGNORE_SPLITPERSONALITY)
|
||||
var/list/mob/candidates = pollCandidatesForMob("Do you want to play as [owner]'s split personality?", ROLE_PAI, null, null, 75, stranger_backseat, POLL_IGNORE_SPLITPERSONALITY)
|
||||
if(LAZYLEN(candidates))
|
||||
var/mob/dead/observer/C = pick(candidates)
|
||||
var/mob/C = pick(candidates)
|
||||
C.transfer_ckey(stranger_backseat, FALSE)
|
||||
log_game("[key_name(stranger_backseat)] became [key_name(owner)]'s split personality.")
|
||||
message_admins("[ADMIN_LOOKUPFLW(stranger_backseat)] became [ADMIN_LOOKUPFLW(owner)]'s split personality.")
|
||||
@@ -37,23 +38,23 @@
|
||||
qdel(src)
|
||||
|
||||
/datum/brain_trauma/severe/split_personality/on_life()
|
||||
if(owner.stat == DEAD)
|
||||
if(current_controller != OWNER)
|
||||
switch_personalities()
|
||||
qdel(src)
|
||||
else if(prob(3))
|
||||
if(prob(3))
|
||||
switch_personalities()
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/severe/split_personality/on_lose()
|
||||
if(current_controller != OWNER) //it would be funny to cure a guy only to be left with the other personality, but it seems too cruel
|
||||
switch_personalities()
|
||||
switch_personalities(TRUE)
|
||||
QDEL_NULL(stranger_backseat)
|
||||
QDEL_NULL(owner_backseat)
|
||||
UnregisterSignal(owner, COMSIG_MOB_DEATH)
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/severe/split_personality/proc/switch_personalities()
|
||||
if(QDELETED(owner) || owner.stat == DEAD || QDELETED(stranger_backseat) || QDELETED(owner_backseat))
|
||||
/datum/brain_trauma/severe/split_personality/proc/revert_to_normal()
|
||||
qdel(src)
|
||||
|
||||
/datum/brain_trauma/severe/split_personality/proc/switch_personalities(forced = FALSE)
|
||||
if(QDELETED(owner) || (owner.stat == DEAD && !forced) || QDELETED(stranger_backseat) || QDELETED(owner_backseat))
|
||||
return
|
||||
|
||||
var/mob/living/split_personality/current_backseat
|
||||
@@ -126,10 +127,6 @@
|
||||
if(QDELETED(body))
|
||||
qdel(src) //in case trauma deletion doesn't already do it
|
||||
|
||||
if((body.stat == DEAD && trauma.owner_backseat == src))
|
||||
trauma.switch_personalities()
|
||||
qdel(trauma)
|
||||
|
||||
//if one of the two ghosts, the other one stays permanently
|
||||
if(!body.client && trauma.initialized)
|
||||
trauma.switch_personalities()
|
||||
|
||||
@@ -4,132 +4,6 @@
|
||||
|
||||
Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward it's arguments with a `SendSignal()` call. Now every component that want's to can also know about this happening.
|
||||
|
||||
### In the code
|
||||
See [this thread](https://tgstation13.org/phpBB/viewtopic.php?f=5&t=22674) for an introduction to the system as a whole.
|
||||
|
||||
#### Slippery things
|
||||
|
||||
At the time of this writing, every object that is slippery overrides atom/Crossed does some checks, then slips the mob. Instead of all those Crossed overrides they could add a slippery component to all these objects. And have the checks in one proc that is run by the Crossed event
|
||||
|
||||
#### Powercells
|
||||
|
||||
A lot of objects have powercells. The `get_cell()` proc was added to give generic access to the cell var if it had one. This is just a specific use case of `GetComponent()`
|
||||
|
||||
#### Radios
|
||||
|
||||
The radio object as it is should not exist, given that more things use the _concept_ of radios rather than the object itself. The actual function of the radio can exist in a component which all the things that use it (Request consoles, actual radios, the SM shard) can add to themselves.
|
||||
|
||||
#### Standos
|
||||
|
||||
Stands have a lot of procs which mimic mob procs. Rather than inserting hooks for all these procs in overrides, the same can be accomplished with signals
|
||||
|
||||
## API
|
||||
|
||||
### Defines
|
||||
|
||||
1. `COMPONENT_INCOMPATIBLE` Return this from `/datum/component/Initialize` or `datum/component/OnTransfer` to have the component be deleted if it's applied to an incorrect type. `parent` must not be modified if this is to be returned. This will be noted in the runtime logs
|
||||
|
||||
### Vars
|
||||
|
||||
1. `/datum/var/list/datum_components` (private)
|
||||
* Lazy associated list of type -> component/list of components.
|
||||
1. `/datum/var/list/comp_lookup` (private)
|
||||
* Lazy associated list of signal -> registree/list of registrees
|
||||
1. `/datum/var/list/signal_procs` (private)
|
||||
* Associated lazy list of signals -> `/datum/callback`s that will be run when the parent datum receives that signal
|
||||
1. `/datum/var/signal_enabled` (protected, boolean)
|
||||
* If the datum is signal enabled. If not, it will not react to signals
|
||||
* `FALSE` by default, set to `TRUE` when a signal is registered
|
||||
1. `/datum/component/var/dupe_mode` (protected, enum)
|
||||
* How duplicate component types are handled when added to the datum.
|
||||
* `COMPONENT_DUPE_HIGHLANDER` (default): Old component will be deleted, new component will first have `/datum/component/proc/InheritComponent(datum/component/old, FALSE)` on it
|
||||
* `COMPONENT_DUPE_ALLOWED`: The components will be treated as separate, `GetComponent()` will return the first added
|
||||
* `COMPONENT_DUPE_UNIQUE`: New component will be deleted, old component will first have `/datum/component/proc/InheritComponent(datum/component/new, TRUE)` on it
|
||||
* `COMPONENT_DUPE_UNIQUE_PASSARGS`: New component will never exist and instead its initialization arguments will be passed on to the old component.
|
||||
1. `/datum/component/var/dupe_type` (protected, type)
|
||||
* Definition of a duplicate component type
|
||||
* `null` means exact match on `type` (default)
|
||||
* Any other type means that and all subtypes
|
||||
1. `/datum/component/var/datum/parent` (protected, read-only)
|
||||
* The datum this component belongs to
|
||||
* Never `null` in child procs
|
||||
1. `report_signal_origin` (protected, boolean)
|
||||
* If `TRUE`, will invoke the callback when signalled with the signal type as the first argument.
|
||||
* `FALSE` by default.
|
||||
|
||||
### Procs
|
||||
|
||||
1. `/datum/proc/GetComponent(component_type(type)) -> datum/component?` (public, final)
|
||||
* Returns a reference to a component of component_type if it exists in the datum, null otherwise
|
||||
1. `/datum/proc/GetComponents(component_type(type)) -> list` (public, final)
|
||||
* Returns a list of references to all components of component_type that exist in the datum
|
||||
1. `/datum/proc/GetExactComponent(component_type(type)) -> datum/component?` (public, final)
|
||||
* Returns a reference to a component whose type MATCHES component_type if that component exists in the datum, null otherwise
|
||||
1. `GET_COMPONENT(varname, component_type)` OR `GET_COMPONENT_FROM(varname, component_type, src)`
|
||||
* Shorthand for `var/component_type/varname = src.GetComponent(component_type)`
|
||||
1. `SEND_SIGNAL(target, sigtype, ...)` (public, final)
|
||||
* Use to send signals to target datum
|
||||
* Extra arguments are to be specified in the signal definition
|
||||
* Returns a bitflag with signal specific information assembled from all activated components
|
||||
* Arguments are packaged in a list and handed off to _SendSignal()
|
||||
1. `/datum/proc/AddComponent(component_type(type), ...) -> datum/component` (public, final)
|
||||
* Creates an instance of `component_type` in the datum and passes `...` to its `Initialize()` call
|
||||
* Sends the `COMSIG_COMPONENT_ADDED` signal to the datum
|
||||
* All components a datum owns are deleted with the datum
|
||||
* Returns the component that was created. Or the old component in a dupe situation where `COMPONENT_DUPE_UNIQUE` was set
|
||||
* If this tries to add an component to an incompatible type, the component will be deleted and the result will be `null`. This is very unperformant, try not to do it
|
||||
* Properly handles duplicate situations based on the `dupe_mode` var
|
||||
1. `/datum/proc/LoadComponent(component_type(type), ...) -> datum/component` (public, final)
|
||||
* Equivalent to calling `GetComponent(component_type)` where, if the result would be `null`, returns `AddComponent(component_type, ...)` instead
|
||||
1. `/datum/proc/ComponentActivated(datum/component/C)` (abstract, async)
|
||||
* Called on a component's `parent` after a signal received causes it to activate. `src` is the parameter
|
||||
* Will only be called if a component's callback returns `TRUE`
|
||||
1. `/datum/proc/TakeComponent(datum/component/C)` (public, final)
|
||||
* Properly transfers ownership of a component from one datum to another
|
||||
* Signals `COMSIG_COMPONENT_REMOVING` on the parent
|
||||
* Called on the datum you want to own the component with another datum's component
|
||||
1. `/datum/proc/_SendSignal(signal, list/arguments)` (private, final)
|
||||
* Handles most of the actual signaling procedure
|
||||
* Will runtime if used on datums with an empty component list
|
||||
1. `/datum/proc/RegisterSignal(datum/target, signal(string/list of strings), proc_ref(type), override(boolean))` (protected, final)
|
||||
* If signal is a list it will be as if RegisterSignal was called for each of the entries with the same following arguments
|
||||
* Makes the datum listen for the specified `signal` on it's `parent` datum.
|
||||
* When that signal is received `proc_ref` will be called on the component, along with associated arguments
|
||||
* Example proc ref: `.proc/OnEvent`
|
||||
* If a previous registration is overwritten by the call, a runtime occurs. Setting `override` to TRUE prevents this
|
||||
* These callbacks run asyncronously
|
||||
* Returning `TRUE` from these callbacks will trigger a `TRUE` return from the `SendSignal()` that initiated it
|
||||
1. `/datum/component/New(datum/parent, ...)` (private, final)
|
||||
* Runs internal setup for the component
|
||||
* Extra arguments are passed to `Initialize()`
|
||||
1. `/datum/component/Initialize(...)` (abstract, no-sleep)
|
||||
* Called by `New()` with the same argments excluding `parent`
|
||||
* Component does not exist in `parent`'s `datum_components` list yet, although `parent` is set and may be used
|
||||
* Signals will not be received while this function is running
|
||||
* Component may be deleted after this function completes without being attached
|
||||
* Do not call `qdel(src)` from this function
|
||||
1. `/datum/component/Destroy(force(bool), silent(bool))` (virtual, no-sleep)
|
||||
* Sends the `COMSIG_COMPONENT_REMOVING` signal to the parent datum if the `parent` isn't being qdeleted
|
||||
* Properly removes the component from `parent` and cleans up references
|
||||
* Setting `force` makes it not check for and remove the component from the parent
|
||||
* Setting `silent` deletes the component without sending a `COMSIG_COMPONENT_REMOVING` signal
|
||||
1. `/datum/component/proc/InheritComponent(datum/component/C, i_am_original(boolean))` (abstract, no-sleep)
|
||||
* Called on a component when a component of the same type was added to the same parent
|
||||
* See `/datum/component/var/dupe_mode`
|
||||
* `C`'s type will always be the same of the called component
|
||||
1. `/datum/component/proc/AfterComponentActivated()` (abstract, async)
|
||||
* Called on a component that was activated after it's `parent`'s `ComponentActivated()` is called
|
||||
1. `/datum/component/proc/OnTransfer(datum/new_parent)` (abstract, no-sleep)
|
||||
* Called before `new_parent` is assigned to `parent` in `TakeComponent()`
|
||||
* Allows the component to react to ownership transfers
|
||||
1. `/datum/component/proc/_RemoveFromParent()` (private, final)
|
||||
* Clears `parent` and removes the component from it's component list
|
||||
1. `/datum/component/proc/_JoinParent` (private, final)
|
||||
* Tries to add the component to it's `parent`s `datum_components` list
|
||||
1. `/datum/component/proc/RegisterWithParent` (abstract, no-sleep)
|
||||
* Used to register the signals that should be on the `parent` object
|
||||
* Use this if you plan on the component transfering between parents
|
||||
1. `/datum/component/proc/UnregisterFromParent` (abstract, no-sleep)
|
||||
* Counterpart to `RegisterWithParent()`
|
||||
* Used to unregister the signals that should only be on the `parent` object
|
||||
|
||||
### See/Define signals and their arguments in __DEFINES\components.dm
|
||||
### See/Define signals and their arguments in [__DEFINES\components.dm](..\..\__DEFINES\components.dm)
|
||||
|
||||
@@ -1,21 +1,71 @@
|
||||
/**
|
||||
* # Component
|
||||
*
|
||||
* The component datum
|
||||
*
|
||||
* A component should be a single standalone unit
|
||||
* of functionality, that works by receiving signals from it's parent
|
||||
* object to provide some single functionality (i.e a slippery component)
|
||||
* that makes the object it's attached to cause people to slip over.
|
||||
* Useful when you want shared behaviour independent of type inheritance
|
||||
*/
|
||||
/datum/component
|
||||
/// Defines how duplicate existing components are handled when added to a datum
|
||||
/// See `COMPONENT_DUPE_*` definitions for available options
|
||||
var/dupe_mode = COMPONENT_DUPE_HIGHLANDER
|
||||
|
||||
/// The type to check for duplication
|
||||
/// `null` means exact match on `type` (default)
|
||||
/// Any other type means that and all subtypes
|
||||
var/dupe_type
|
||||
|
||||
/// The datum this components belongs to
|
||||
var/datum/parent
|
||||
//only set to true if you are able to properly transfer this component
|
||||
//At a minimum RegisterWithParent and UnregisterFromParent should be used
|
||||
//Make sure you also implement PostTransfer for any post transfer handling
|
||||
|
||||
/// Only set to true if you are able to properly transfer this component
|
||||
/// At a minimum RegisterWithParent and UnregisterFromParent should be used
|
||||
/// Make sure you also implement PostTransfer for any post transfer handling
|
||||
var/can_transfer = FALSE
|
||||
|
||||
/datum/component/New(datum/P, ...)
|
||||
parent = P
|
||||
var/list/arguments = args.Copy(2)
|
||||
/**
|
||||
* Create a new component.
|
||||
* Additional arguments are passed to `Initialize()`
|
||||
*
|
||||
* Arguments:
|
||||
* * datum/P the parent datum this component reacts to signals from
|
||||
*/
|
||||
/datum/component/New(list/raw_args)
|
||||
parent = raw_args[1]
|
||||
var/list/arguments = raw_args.Copy(2)
|
||||
if(Initialize(arglist(arguments)) == COMPONENT_INCOMPATIBLE)
|
||||
qdel(src, TRUE, TRUE)
|
||||
CRASH("Incompatible [type] assigned to a [P.type]! args: [json_encode(arguments)]")
|
||||
CRASH("Incompatible [type] assigned to a [parent.type]! args: [json_encode(arguments)]")
|
||||
|
||||
_JoinParent(P)
|
||||
_JoinParent(parent)
|
||||
|
||||
/**
|
||||
* Called during component creation with the same arguments as in new excluding parent.
|
||||
* Do not call `qdel(src)` from this function, `return COMPONENT_INCOMPATIBLE` instead
|
||||
*/
|
||||
/datum/component/proc/Initialize(...)
|
||||
return
|
||||
|
||||
/**
|
||||
* Properly removes the component from `parent` and cleans up references
|
||||
* Setting `force` makes it not check for and remove the component from the parent
|
||||
* Setting `silent` deletes the component without sending a `COMSIG_COMPONENT_REMOVING` signal
|
||||
*/
|
||||
/datum/component/Destroy(force=FALSE, silent=FALSE)
|
||||
if(!force && parent)
|
||||
_RemoveFromParent()
|
||||
if(!silent)
|
||||
SEND_SIGNAL(parent, COMSIG_COMPONENT_REMOVING, src)
|
||||
parent = null
|
||||
return ..()
|
||||
|
||||
/**
|
||||
* Internal proc to handle behaviour of components when joining a parent
|
||||
*/
|
||||
/datum/component/proc/_JoinParent()
|
||||
var/datum/P = parent
|
||||
//lazy init the parent's dc list
|
||||
@@ -51,21 +101,9 @@
|
||||
|
||||
RegisterWithParent()
|
||||
|
||||
// If you want/expect to be moving the component around between parents, use this to register on the parent for signals
|
||||
/datum/component/proc/RegisterWithParent()
|
||||
SEND_SIGNAL(src, COMSIG_COMPONENT_REGISTER_PARENT) //CITADEL EDIT
|
||||
|
||||
/datum/component/proc/Initialize(...)
|
||||
return
|
||||
|
||||
/datum/component/Destroy(force=FALSE, silent=FALSE)
|
||||
if(!force && parent)
|
||||
_RemoveFromParent()
|
||||
if(!silent)
|
||||
SEND_SIGNAL(parent, COMSIG_COMPONENT_REMOVING, src)
|
||||
parent = null
|
||||
return ..()
|
||||
|
||||
/**
|
||||
* Internal proc to handle behaviour when being removed from a parent
|
||||
*/
|
||||
/datum/component/proc/_RemoveFromParent()
|
||||
var/datum/P = parent
|
||||
var/list/dc = P.datum_components
|
||||
@@ -84,9 +122,38 @@
|
||||
|
||||
UnregisterFromParent()
|
||||
|
||||
/datum/component/proc/UnregisterFromParent()
|
||||
SEND_SIGNAL(src, COMSIG_COMPONENT_UNREGISTER_PARENT) //CITADEL EDIT
|
||||
/**
|
||||
* Register the component with the parent object
|
||||
*
|
||||
* Use this proc to register with your parent object
|
||||
* Overridable proc that's called when added to a new parent
|
||||
*/
|
||||
/datum/component/proc/RegisterWithParent()
|
||||
return
|
||||
|
||||
/**
|
||||
* Unregister from our parent object
|
||||
*
|
||||
* Use this proc to unregister from your parent object
|
||||
* Overridable proc that's called when removed from a parent
|
||||
* *
|
||||
*/
|
||||
/datum/component/proc/UnregisterFromParent()
|
||||
return
|
||||
|
||||
/**
|
||||
* Register to listen for a signal from the passed in target
|
||||
*
|
||||
* This sets up a listening relationship such that when the target object emits a signal
|
||||
* the source datum this proc is called upon, will recieve a callback to the given proctype
|
||||
* Return values from procs registered must be a bitfield
|
||||
*
|
||||
* Arguments:
|
||||
* * datum/target The target to listen for signals from
|
||||
* * sig_type_or_types Either a string signal name, or a list of signal names (strings)
|
||||
* * proctype The proc to call back when the signal is emitted
|
||||
* * override If a previous registration exists you must explicitly set this
|
||||
*/
|
||||
/datum/proc/RegisterSignal(datum/target, sig_type_or_types, proctype, override = FALSE)
|
||||
if(QDELETED(src) || QDELETED(target))
|
||||
return
|
||||
@@ -119,6 +186,16 @@
|
||||
|
||||
signal_enabled = TRUE
|
||||
|
||||
/**
|
||||
* Stop listening to a given signal from target
|
||||
*
|
||||
* Breaks the relationship between target and source datum, removing the callback when the signal fires
|
||||
* Doesn't care if a registration exists or not
|
||||
*
|
||||
* Arguments:
|
||||
* * datum/target Datum to stop listening to signals from
|
||||
* * sig_typeor_types Signal string key or list of signal keys to stop listening to specifically
|
||||
*/
|
||||
/datum/proc/UnregisterSignal(datum/target, sig_type_or_types)
|
||||
var/list/lookup = target.comp_lookup
|
||||
if(!signal_procs || !signal_procs[target] || !lookup)
|
||||
@@ -126,6 +203,8 @@
|
||||
if(!islist(sig_type_or_types))
|
||||
sig_type_or_types = list(sig_type_or_types)
|
||||
for(var/sig in sig_type_or_types)
|
||||
if(!signal_procs[target][sig])
|
||||
continue
|
||||
switch(length(lookup[sig]))
|
||||
if(2)
|
||||
lookup[sig] = (lookup[sig]-src)[1]
|
||||
@@ -148,15 +227,47 @@
|
||||
if(!signal_procs[target].len)
|
||||
signal_procs -= target
|
||||
|
||||
/**
|
||||
* Called on a component when a component of the same type was added to the same parent
|
||||
* See `/datum/component/var/dupe_mode`
|
||||
* `C`'s type will always be the same of the called component
|
||||
*/
|
||||
/datum/component/proc/InheritComponent(datum/component/C, i_am_original)
|
||||
return
|
||||
|
||||
|
||||
/**
|
||||
* Called on a component when a component of the same type was added to the same parent with COMPONENT_DUPE_SELECTIVE
|
||||
* See `/datum/component/var/dupe_mode`
|
||||
* `C`'s type will always be the same of the called component
|
||||
* return TRUE if you are absorbing the component, otherwise FALSE if you are fine having it exist as a duplicate component
|
||||
*/
|
||||
/datum/component/proc/CheckDupeComponent(datum/component/C, ...)
|
||||
return
|
||||
|
||||
|
||||
/**
|
||||
* Callback Just before this component is transferred
|
||||
*
|
||||
* Use this to do any special cleanup you might need to do before being deregged from an object
|
||||
*
|
||||
*/
|
||||
/datum/component/proc/PreTransfer()
|
||||
return
|
||||
|
||||
/**
|
||||
* Callback Just after a component is transferred
|
||||
*
|
||||
* Use this to do any special setup you need to do after being moved to a new object
|
||||
* Do not call `qdel(src)` from this function, `return COMPONENT_INCOMPATIBLE` instead
|
||||
*
|
||||
*/
|
||||
/datum/component/proc/PostTransfer()
|
||||
return COMPONENT_INCOMPATIBLE //Do not support transfer by default as you must properly support it
|
||||
|
||||
/**
|
||||
* Internal proc to create a list of our type and all parent types
|
||||
*/
|
||||
/datum/component/proc/_GetInverseTypeList(our_type = type)
|
||||
//we can do this one simple trick
|
||||
var/current_type = parent_type
|
||||
@@ -166,6 +277,11 @@
|
||||
current_type = type2parent(current_type)
|
||||
. += current_type
|
||||
|
||||
/**
|
||||
* Internal proc to handle most all of the signaling procedure
|
||||
* Will runtime if used on datums with an empty component list
|
||||
* Use the `SEND_SIGNAL` define instead
|
||||
*/
|
||||
/datum/proc/_SendSignal(sigtype, list/arguments)
|
||||
var/target = comp_lookup[sigtype]
|
||||
if(!length(target))
|
||||
@@ -183,9 +299,16 @@
|
||||
. |= CallAsync(C, proctype, arguments)
|
||||
|
||||
// The type arg is casted so initial works, you shouldn't be passing a real instance into this
|
||||
/**
|
||||
* Return any component assigned to this datum of the given type
|
||||
* This will throw an error if it's possible to have more than one component of that type on the parent
|
||||
*
|
||||
* Arguments:
|
||||
* * datum/component/c_type The typepath of the component you want to get a reference to
|
||||
*/
|
||||
/datum/proc/GetComponent(datum/component/c_type)
|
||||
RETURN_TYPE(c_type)
|
||||
if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED)
|
||||
if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED || initial(c_type.dupe_mode) == COMPONENT_DUPE_SELECTIVE)
|
||||
stack_trace("GetComponent was called to get a component of which multiple copies could be on an object. This can easily break and should be changed. Type: \[[c_type]\]")
|
||||
var/list/dc = datum_components
|
||||
if(!dc)
|
||||
@@ -194,7 +317,18 @@
|
||||
if(length(.))
|
||||
return .[1]
|
||||
|
||||
/datum/proc/GetExactComponent(c_type)
|
||||
// The type arg is casted so initial works, you shouldn't be passing a real instance into this
|
||||
/**
|
||||
* Return any component assigned to this datum of the exact given type
|
||||
* This will throw an error if it's possible to have more than one component of that type on the parent
|
||||
*
|
||||
* Arguments:
|
||||
* * datum/component/c_type The typepath of the component you want to get a reference to
|
||||
*/
|
||||
/datum/proc/GetExactComponent(datum/component/c_type)
|
||||
RETURN_TYPE(c_type)
|
||||
if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED || initial(c_type.dupe_mode) == COMPONENT_DUPE_SELECTIVE)
|
||||
stack_trace("GetComponent was called to get a component of which multiple copies could be on an object. This can easily break and should be changed. Type: \[[c_type]\]")
|
||||
var/list/dc = datum_components
|
||||
if(!dc)
|
||||
return null
|
||||
@@ -206,6 +340,12 @@
|
||||
return C
|
||||
return null
|
||||
|
||||
/**
|
||||
* Get all components of a given type that are attached to this datum
|
||||
*
|
||||
* Arguments:
|
||||
* * c_type The component type path
|
||||
*/
|
||||
/datum/proc/GetComponents(c_type)
|
||||
var/list/dc = datum_components
|
||||
if(!dc)
|
||||
@@ -214,7 +354,15 @@
|
||||
if(!length(.))
|
||||
return list(.)
|
||||
|
||||
/datum/proc/AddComponent(new_type, ...)
|
||||
/**
|
||||
* Creates an instance of `new_type` in the datum and attaches to it as parent
|
||||
* Sends the `COMSIG_COMPONENT_ADDED` signal to the datum
|
||||
* Returns the component that was created. Or the old component in a dupe situation where `COMPONENT_DUPE_UNIQUE` was set
|
||||
* If this tries to add an component to an incompatible type, the component will be deleted and the result will be `null`. This is very unperformant, try not to do it
|
||||
* Properly handles duplicate situations based on the `dupe_mode` var
|
||||
*/
|
||||
/datum/proc/_AddComponent(list/raw_args)
|
||||
var/new_type = raw_args[1]
|
||||
var/datum/component/nt = new_type
|
||||
var/dm = initial(nt.dupe_mode)
|
||||
var/dt = initial(nt.dupe_type)
|
||||
@@ -229,7 +377,7 @@
|
||||
new_comp = nt
|
||||
nt = new_comp.type
|
||||
|
||||
args[1] = src
|
||||
raw_args[1] = src
|
||||
|
||||
if(dm != COMPONENT_DUPE_ALLOWED)
|
||||
if(!dt)
|
||||
@@ -240,37 +388,62 @@
|
||||
switch(dm)
|
||||
if(COMPONENT_DUPE_UNIQUE)
|
||||
if(!new_comp)
|
||||
new_comp = new nt(arglist(args))
|
||||
new_comp = new nt(raw_args)
|
||||
if(!QDELETED(new_comp))
|
||||
old_comp.InheritComponent(new_comp, TRUE)
|
||||
QDEL_NULL(new_comp)
|
||||
if(COMPONENT_DUPE_HIGHLANDER)
|
||||
if(!new_comp)
|
||||
new_comp = new nt(arglist(args))
|
||||
new_comp = new nt(raw_args)
|
||||
if(!QDELETED(new_comp))
|
||||
new_comp.InheritComponent(old_comp, FALSE)
|
||||
QDEL_NULL(old_comp)
|
||||
if(COMPONENT_DUPE_UNIQUE_PASSARGS)
|
||||
if(!new_comp)
|
||||
var/list/arguments = args.Copy(2)
|
||||
old_comp.InheritComponent(null, TRUE, arguments)
|
||||
var/list/arguments = raw_args.Copy(2)
|
||||
arguments.Insert(1, null, TRUE)
|
||||
old_comp.InheritComponent(arglist(arguments))
|
||||
else
|
||||
old_comp.InheritComponent(new_comp, TRUE)
|
||||
if(COMPONENT_DUPE_SELECTIVE)
|
||||
var/list/arguments = raw_args.Copy()
|
||||
arguments[1] = new_comp
|
||||
var/make_new_component = TRUE
|
||||
for(var/i in GetComponents(new_type))
|
||||
var/datum/component/C = i
|
||||
if(C.CheckDupeComponent(arglist(arguments)))
|
||||
make_new_component = FALSE
|
||||
QDEL_NULL(new_comp)
|
||||
break
|
||||
if(!new_comp && make_new_component)
|
||||
new_comp = new nt(raw_args)
|
||||
else if(!new_comp)
|
||||
new_comp = new nt(arglist(args)) // There's a valid dupe mode but there's no old component, act like normal
|
||||
new_comp = new nt(raw_args) // There's a valid dupe mode but there's no old component, act like normal
|
||||
else if(!new_comp)
|
||||
new_comp = new nt(arglist(args)) // Dupes are allowed, act like normal
|
||||
new_comp = new nt(raw_args) // Dupes are allowed, act like normal
|
||||
|
||||
if(!old_comp && !QDELETED(new_comp)) // Nothing related to duplicate components happened and the new component is healthy
|
||||
SEND_SIGNAL(src, COMSIG_COMPONENT_ADDED, new_comp)
|
||||
return new_comp
|
||||
return old_comp
|
||||
|
||||
/**
|
||||
* Get existing component of type, or create it and return a reference to it
|
||||
*
|
||||
* Use this if the item needs to exist at the time of this call, but may not have been created before now
|
||||
*
|
||||
* Arguments:
|
||||
* * component_type The typepath of the component to create or return
|
||||
* * ... additional arguments to be passed when creating the component if it does not exist
|
||||
*/
|
||||
/datum/proc/LoadComponent(component_type, ...)
|
||||
. = GetComponent(component_type)
|
||||
if(!.)
|
||||
return AddComponent(arglist(args))
|
||||
return _AddComponent(args)
|
||||
|
||||
/**
|
||||
* Removes the component from parent, ends up with a null parent
|
||||
*/
|
||||
/datum/component/proc/RemoveComponent()
|
||||
if(!parent)
|
||||
return
|
||||
@@ -280,6 +453,14 @@
|
||||
parent = null
|
||||
SEND_SIGNAL(old_parent, COMSIG_COMPONENT_REMOVING, src)
|
||||
|
||||
/**
|
||||
* Transfer this component to another parent
|
||||
*
|
||||
* Component is taken from source datum
|
||||
*
|
||||
* Arguments:
|
||||
* * datum/component/target Target datum to transfer to
|
||||
*/
|
||||
/datum/proc/TakeComponent(datum/component/target)
|
||||
if(!target || target.parent == src)
|
||||
return
|
||||
@@ -296,6 +477,14 @@
|
||||
if(target == AddComponent(target))
|
||||
target._JoinParent()
|
||||
|
||||
/**
|
||||
* Transfer all components to target
|
||||
*
|
||||
* All components from source datum are taken
|
||||
*
|
||||
* Arguments:
|
||||
* * /datum/target the target to move the components to
|
||||
*/
|
||||
/datum/proc/TransferComponents(datum/target)
|
||||
var/list/dc = datum_components
|
||||
if(!dc)
|
||||
@@ -310,5 +499,8 @@
|
||||
if(C.can_transfer)
|
||||
target.TakeComponent(comps)
|
||||
|
||||
/**
|
||||
* Return the object that is the host of any UI's that this component has
|
||||
*/
|
||||
/datum/component/ui_host()
|
||||
return parent
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
var/obj/screen/craft/C = new()
|
||||
C.icon = H.ui_style
|
||||
H.static_inventory += C
|
||||
if(!CL.prefs.widescreenpref)
|
||||
C.screen_loc = ui_boxcraft
|
||||
CL.screen += C
|
||||
RegisterSignal(C, COMSIG_CLICK, .proc/component_ui_interact)
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
/datum/crafting_recipe/mummy/body
|
||||
name = "Mummification Bandages (Body)"
|
||||
result = /obj/item/clothing/under/mummy
|
||||
result = /obj/item/clothing/under/costume/mummy
|
||||
reqs = list(/obj/item/stack/sheet/cloth = 5)
|
||||
|
||||
/datum/crafting_recipe/lizardhat
|
||||
@@ -107,7 +107,7 @@
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/diagnostic_singlasses_removal
|
||||
/datum/crafting_recipe/diagnostic_sunglasses_removal
|
||||
name = "Diagnostic HUDsunglasses removal"
|
||||
result = /obj/item/clothing/glasses/sunglasses
|
||||
time = 20
|
||||
@@ -126,6 +126,85 @@
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
category = CAT_CLOTHING
|
||||
*/
|
||||
|
||||
// Eyepatch Glasses
|
||||
|
||||
/datum/crafting_recipe/secpatch
|
||||
name = "Security Eyepatch HUD"
|
||||
result = /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
parts = list(/obj/item/clothing/glasses/hud/security/sunglasses = 1,
|
||||
/obj/item/clothing/glasses/eyepatch = 1)
|
||||
reqs = list(/obj/item/clothing/glasses/hud/security/sunglasses = 1,
|
||||
/obj/item/clothing/glasses/eyepatch = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/secpatch_removal
|
||||
name = "Security HUDpatch Removal"
|
||||
result = /obj/item/clothing/glasses/eyepatch
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/hud/security/sunglasses/eyepatch = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/medpatch
|
||||
name = "Medical Eyepatch HUD"
|
||||
result = /obj/item/clothing/glasses/hud/health/eyepatch
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
parts = list(/obj/item/clothing/glasses/hud/health = 1,
|
||||
/obj/item/clothing/glasses/eyepatch = 1)
|
||||
reqs = list(/obj/item/clothing/glasses/hud/health = 1,
|
||||
/obj/item/clothing/glasses/eyepatch = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/medpatch_removal
|
||||
name = "Medical HUDpatch Removal"
|
||||
result = /obj/item/clothing/glasses/eyepatch
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/hud/health/eyepatch = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/diagpatch
|
||||
name = "Diagnostic Eyepatch HUD"
|
||||
result = /obj/item/clothing/glasses/hud/diagnostic/eyepatch
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
parts = list(/obj/item/clothing/glasses/hud/diagnostic = 1,
|
||||
/obj/item/clothing/glasses/eyepatch = 1)
|
||||
reqs = list(/obj/item/clothing/glasses/hud/diagnostic = 1,
|
||||
/obj/item/clothing/glasses/eyepatch = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/diagpatch_removal
|
||||
name = "Diagnostic HUDpatch Removal"
|
||||
result = /obj/item/clothing/glasses/eyepatch
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/hud/diagnostic/eyepatch = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/mesonpatch
|
||||
name = "Meson Scanner Eyepatch"
|
||||
result = /obj/item/clothing/glasses/meson/eyepatch
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
parts = list(/obj/item/clothing/glasses/meson = 1,
|
||||
/obj/item/clothing/glasses/eyepatch = 1)
|
||||
reqs = list(/obj/item/clothing/glasses/meson = 1,
|
||||
/obj/item/clothing/glasses/eyepatch = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/mesonpatch_removal
|
||||
name = "Meson Scanner patch Removal"
|
||||
result = /obj/item/clothing/glasses/eyepatch
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/meson/eyepatch = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/ghostsheet
|
||||
name = "Ghost Sheet"
|
||||
result = /obj/item/clothing/suit/ghost_sheet
|
||||
|
||||
@@ -278,7 +278,7 @@
|
||||
result = /obj/item/banner/command/mundane
|
||||
time = 40
|
||||
reqs = list(/obj/item/stack/rods = 2,
|
||||
/obj/item/clothing/under/captainparade = 1)
|
||||
/obj/item/clothing/under/rank/captain/parade = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/engineering_banner
|
||||
@@ -286,7 +286,7 @@
|
||||
result = /obj/item/banner/engineering/mundane
|
||||
time = 40
|
||||
reqs = list(/obj/item/stack/rods = 2,
|
||||
/obj/item/clothing/under/rank/engineer = 1)
|
||||
/obj/item/clothing/under/rank/engineering/engineer = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/cargo_banner
|
||||
@@ -294,7 +294,7 @@
|
||||
result = /obj/item/banner/cargo/mundane
|
||||
time = 40
|
||||
reqs = list(/obj/item/stack/rods = 2,
|
||||
/obj/item/clothing/under/rank/cargotech = 1)
|
||||
/obj/item/clothing/under/rank/cargo/tech = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/science_banner
|
||||
@@ -302,7 +302,7 @@
|
||||
result = /obj/item/banner/science/mundane
|
||||
time = 40
|
||||
reqs = list(/obj/item/stack/rods = 2,
|
||||
/obj/item/clothing/under/rank/scientist = 1)
|
||||
/obj/item/clothing/under/rank/rnd/scientist = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/medical_banner
|
||||
@@ -310,7 +310,7 @@
|
||||
result = /obj/item/banner/medical/mundane
|
||||
time = 40
|
||||
reqs = list(/obj/item/stack/rods = 2,
|
||||
/obj/item/clothing/under/rank/medical = 1)
|
||||
/obj/item/clothing/under/rank/medical/doctor = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/security_banner
|
||||
@@ -318,7 +318,7 @@
|
||||
result = /obj/item/banner/security/mundane
|
||||
time = 40
|
||||
reqs = list(/obj/item/stack/rods = 2,
|
||||
/obj/item/clothing/under/rank/security = 1)
|
||||
/obj/item/clothing/under/rank/security/officer = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bloodsucker/vassalrack
|
||||
|
||||
@@ -278,7 +278,7 @@
|
||||
|
||||
/datum/crafting_recipe/arrow
|
||||
name = "Arrow"
|
||||
result = /obj/item/ammo_casing/caseless/arrow
|
||||
result = /obj/item/ammo_casing/caseless/arrow/wood
|
||||
time = 30
|
||||
reqs = list(/obj/item/stack/sheet/mineral/wood = 1,
|
||||
/obj/item/stack/sheet/silk = 1,
|
||||
@@ -293,17 +293,17 @@
|
||||
always_availible = FALSE
|
||||
reqs = list(/obj/item/stack/sheet/bone = 1,
|
||||
/obj/item/stack/sheet/sinew = 1,
|
||||
/obj/item/ammo_casing/caseless/arrow/ashen = 1)
|
||||
/obj/item/ammo_casing/caseless/arrow/ash = 1)
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/ashen_arrow
|
||||
name = "Fire Hardened Arrow"
|
||||
result = /obj/item/ammo_casing/caseless/arrow/ashen
|
||||
result = /obj/item/ammo_casing/caseless/arrow/ash
|
||||
tools = list(TOOL_WELDER)
|
||||
time = 30
|
||||
always_availible = FALSE
|
||||
reqs = list(/obj/item/ammo_casing/caseless/arrow = 1)
|
||||
reqs = list(/obj/item/ammo_casing/caseless/arrow/wood = 1)
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
|
||||
@@ -30,26 +30,23 @@
|
||||
return ..()
|
||||
|
||||
/datum/component/fantasy/RegisterWithParent()
|
||||
. = ..()
|
||||
var/obj/item/master = parent
|
||||
originalName = master.name
|
||||
modify()
|
||||
|
||||
/datum/component/fantasy/UnregisterFromParent()
|
||||
. = ..()
|
||||
unmodify()
|
||||
|
||||
/datum/component/fantasy/InheritComponent(datum/component/fantasy/newComp, original, list/arguments)
|
||||
/datum/component/fantasy/InheritComponent(datum/component/fantasy/newComp, original, quality, list/affixes, canFail, announce)
|
||||
unmodify()
|
||||
if(newComp)
|
||||
quality += newComp.quality
|
||||
canFail = newComp.canFail
|
||||
announce = newComp.announce
|
||||
src.quality += newComp.quality
|
||||
src.canFail = newComp.canFail
|
||||
src.announce = newComp.announce
|
||||
else
|
||||
arguments.len = 5 // This is done to replicate what happens when an arglist smaller than the necessary arguments is given
|
||||
quality += arguments[1]
|
||||
canFail = arguments[4] || canFail
|
||||
announce = arguments[5] || announce
|
||||
src.quality += quality
|
||||
src.canFail = canFail || src.canFail
|
||||
src.announce = announce || src.announce
|
||||
modify()
|
||||
|
||||
/datum/component/fantasy/proc/randomQuality()
|
||||
|
||||
@@ -101,11 +101,11 @@
|
||||
host_mob = null
|
||||
return ..()
|
||||
|
||||
/datum/component/nanites/InheritComponent(datum/component/nanites/new_nanites, i_am_original, list/arguments)
|
||||
/datum/component/nanites/InheritComponent(datum/component/nanites/new_nanites, i_am_original, amount, cloud)
|
||||
if(new_nanites)
|
||||
adjust_nanites(null, new_nanites.nanite_volume)
|
||||
else
|
||||
adjust_nanites(null, arguments[1]) //just add to the nanite volume
|
||||
adjust_nanites(null, amount) //just add to the nanite volume
|
||||
|
||||
/datum/component/nanites/process()
|
||||
adjust_nanites(null, regen_rate)
|
||||
|
||||
@@ -41,9 +41,9 @@
|
||||
orbiters = null
|
||||
return ..()
|
||||
|
||||
/datum/component/orbiter/InheritComponent(datum/component/orbiter/newcomp, original, list/arguments)
|
||||
if(arguments)
|
||||
begin_orbit(arglist(arguments))
|
||||
/datum/component/orbiter/InheritComponent(datum/component/orbiter/newcomp, original, atom/movable/orbiter, radius, clockwise, rotation_speed, rotation_segments, pre_rotation)
|
||||
if(!newcomp)
|
||||
begin_orbit(arglist(args.Copy(3)))
|
||||
return
|
||||
// The following only happens on component transfers
|
||||
orbiters += newcomp.orbiters
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
/datum/component/wearertargeting/phantomthief
|
||||
dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
|
||||
signals = list(COMSIG_COMBAT_TOGGLED)
|
||||
signals = list(COMSIG_LIVING_COMBAT_ENABLED)
|
||||
proctype = .proc/handlefilterstuff
|
||||
var/filter_x
|
||||
var/filter_y
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
if(strength <= RAD_BACKGROUND_RADIATION)
|
||||
return PROCESS_KILL
|
||||
|
||||
/datum/component/radioactive/InheritComponent(datum/component/C, i_am_original, list/arguments)
|
||||
/datum/component/radioactive/InheritComponent(datum/component/C, i_am_original, _strength, _source, _half_life, _can_contaminate)
|
||||
if(!i_am_original)
|
||||
return
|
||||
if(!hl3_release_date) // Permanently radioactive things don't get to grow stronger
|
||||
@@ -56,7 +56,7 @@
|
||||
var/datum/component/radioactive/other = C
|
||||
strength = max(strength, other.strength)
|
||||
else
|
||||
strength = max(strength, arguments[1])
|
||||
strength = max(strength, _strength)
|
||||
|
||||
/datum/component/radioactive/proc/rad_examine(datum/source, mob/user, list/examine_list)
|
||||
var/atom/master = parent
|
||||
|
||||
@@ -53,11 +53,21 @@ handles linking back and forth.
|
||||
|
||||
/datum/component/remote_materials/proc/_MakeLocal()
|
||||
silo = null
|
||||
mat_container = parent.AddComponent(/datum/component/material_container,
|
||||
list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace, /datum/material/plastic),
|
||||
local_size,
|
||||
FALSE,
|
||||
/obj/item/stack)
|
||||
var/static/list/allowed_mats = list(
|
||||
/datum/material/iron,
|
||||
/datum/material/glass,
|
||||
/datum/material/silver,
|
||||
/datum/material/gold,
|
||||
/datum/material/diamond,
|
||||
/datum/material/plasma,
|
||||
/datum/material/uranium,
|
||||
/datum/material/bananium,
|
||||
/datum/material/titanium,
|
||||
/datum/material/bluespace,
|
||||
/datum/material/plastic,
|
||||
)
|
||||
|
||||
mat_container = parent.AddComponent(/datum/component/material_container, allowed_mats, local_size, allowed_types=/obj/item/stack)
|
||||
|
||||
/datum/component/remote_materials/proc/set_local_size(size)
|
||||
local_size = size
|
||||
|
||||
@@ -191,20 +191,28 @@
|
||||
|
||||
///////Yes, I said humans. No, this won't end well...//////////
|
||||
/datum/component/riding/human
|
||||
var/fireman_carrying = FALSE
|
||||
|
||||
/datum/component/riding/human/Initialize()
|
||||
. = ..()
|
||||
RegisterSignal(parent, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, .proc/on_host_unarmed_melee)
|
||||
|
||||
/datum/component/riding/human/vehicle_mob_unbuckle(datum/source, mob/living/M, force = FALSE)
|
||||
var/mob/living/carbon/human/H = parent
|
||||
H.remove_movespeed_modifier(MOVESPEED_ID_HUMAN_CARRYING)
|
||||
. = ..()
|
||||
var/mob/living/carbon/human/H = parent
|
||||
if(!length(H.buckled_mobs))
|
||||
H.remove_movespeed_modifier(MOVESPEED_ID_HUMAN_CARRYING)
|
||||
if(!fireman_carrying)
|
||||
M.Daze(25)
|
||||
REMOVE_TRAIT(M, TRAIT_MOBILITY_NOUSE, src)
|
||||
|
||||
/datum/component/riding/human/vehicle_mob_buckle(datum/source, mob/living/M, force = FALSE)
|
||||
. = ..()
|
||||
var/mob/living/carbon/human/H = parent
|
||||
H.add_movespeed_modifier(MOVESPEED_ID_HUMAN_CARRYING, multiplicative_slowdown = HUMAN_CARRY_SLOWDOWN)
|
||||
if(length(H.buckled_mobs))
|
||||
H.add_movespeed_modifier(MOVESPEED_ID_HUMAN_CARRYING, multiplicative_slowdown = fireman_carrying? FIREMAN_CARRY_SLOWDOWN : PIGGYBACK_CARRY_SLOWDOWN)
|
||||
if(fireman_carrying)
|
||||
ADD_TRAIT(M, TRAIT_MOBILITY_NOUSE, src)
|
||||
|
||||
/datum/component/riding/human/proc/on_host_unarmed_melee(atom/target)
|
||||
var/mob/living/carbon/human/H = parent
|
||||
@@ -236,11 +244,11 @@
|
||||
else
|
||||
return list(TEXT_NORTH = list(0, 6), TEXT_SOUTH = list(0, 6), TEXT_EAST = list(-6, 4), TEXT_WEST = list( 6, 4))
|
||||
|
||||
|
||||
/datum/component/riding/human/force_dismount(mob/living/user)
|
||||
var/atom/movable/AM = parent
|
||||
AM.unbuckle_mob(user)
|
||||
user.DefaultCombatKnockdown(60)
|
||||
user.Daze(50)
|
||||
user.visible_message("<span class='warning'>[AM] pushes [user] off of [AM.p_them()]!</span>")
|
||||
|
||||
/datum/component/riding/cyborg
|
||||
@@ -341,7 +349,7 @@
|
||||
var/mob/living/parent
|
||||
var/selfdeleting = FALSE
|
||||
|
||||
/obj/item/riding_offhand/dropped()
|
||||
/obj/item/riding_offhand/dropped(mob/user)
|
||||
selfdeleting = TRUE
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
src.allow_death = allow_death
|
||||
check_in_bounds() // Just in case something is being created outside of station/centcom
|
||||
|
||||
/datum/component/stationloving/InheritComponent(datum/component/stationloving/newc, original, list/arguments)
|
||||
/datum/component/stationloving/InheritComponent(datum/component/stationloving/newc, original, inform_admins, allow_death)
|
||||
if (original)
|
||||
if (istype(newc))
|
||||
if (newc)
|
||||
inform_admins = newc.inform_admins
|
||||
allow_death = newc.allow_death
|
||||
else if (LAZYLEN(arguments))
|
||||
inform_admins = arguments[1]
|
||||
else
|
||||
inform_admins = inform_admins
|
||||
|
||||
/datum/component/stationloving/proc/relocate()
|
||||
var/targetturf = find_safe_turf()
|
||||
|
||||
@@ -43,13 +43,13 @@
|
||||
master.cut_overlay(overlay)
|
||||
return ..()
|
||||
|
||||
/datum/component/thermite/InheritComponent(datum/component/thermite/newC, i_am_original, list/arguments)
|
||||
/datum/component/thermite/InheritComponent(datum/component/thermite/newC, i_am_original, _amount)
|
||||
if(!i_am_original)
|
||||
return
|
||||
if(newC)
|
||||
amount += newC.amount
|
||||
else
|
||||
amount += arguments[1]
|
||||
amount += _amount
|
||||
|
||||
/datum/component/thermite/proc/thermite_melt(mob/user)
|
||||
var/turf/master = parent
|
||||
|
||||
@@ -28,7 +28,7 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
var/compact_mode = FALSE
|
||||
var/debug = FALSE
|
||||
|
||||
/datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20, datum/ui_state/_checkstate)
|
||||
/datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20, datum/ui_state/_checkstate, datum/traitor_class/traitor_class)
|
||||
if(!isitem(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
|
||||
@@ -47,7 +47,11 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
RegisterSignal(parent, COMSIG_PEN_ROTATED, .proc/pen_rotation)
|
||||
|
||||
GLOB.uplinks += src
|
||||
uplink_items = get_uplink_items(gamemode, TRUE, allow_restricted)
|
||||
var/list/filters = list()
|
||||
if(istype(traitor_class))
|
||||
filters = traitor_class.uplink_filters
|
||||
starting_tc = traitor_class.TC
|
||||
uplink_items = get_uplink_items(gamemode, TRUE, allow_restricted, filters)
|
||||
|
||||
if(_owner)
|
||||
owner = _owner
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
RegisterSignal(current_mind, COMSIG_PRE_MIND_TRANSFER, .proc/pre_player_transfer)
|
||||
if(mastermind?.current)
|
||||
mastermind.current.audiovisual_redirect = M
|
||||
ADD_TRAIT(M, TRAIT_NO_MIDROUND_ANTAG, VIRTUAL_REALITY_TRAIT)
|
||||
|
||||
/datum/component/virtual_reality/UnregisterFromParent()
|
||||
. = ..()
|
||||
@@ -69,6 +70,7 @@
|
||||
current_mind = null
|
||||
if(mastermind?.current)
|
||||
mastermind.current.audiovisual_redirect = null
|
||||
REMOVE_TRAIT(parent, TRAIT_NO_MIDROUND_ANTAG, VIRTUAL_REALITY_TRAIT)
|
||||
|
||||
/**
|
||||
* Called when attempting to connect a mob to a virtual reality mob.
|
||||
@@ -235,7 +237,7 @@
|
||||
qdel(src)
|
||||
|
||||
/**
|
||||
* Used for recursive virtual realities shenanigeans and should be called only through the above proc.
|
||||
* Used for recursive virtual realities shenanigeans and should be called by the above proc.
|
||||
*/
|
||||
/datum/component/virtual_reality/proc/vr_in_a_vr(mob/player, deathcheck = FALSE, lethal_cleanup = FALSE)
|
||||
var/mob/M = parent
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user