Merge pull request #1 from Citadel-Station-13/master
Just updating my base. Dab.
This commit is contained in:
@@ -34,11 +34,6 @@
|
||||
/obj/structure/alien/weeds,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"ai" = (
|
||||
/obj/structure/alien/weeds,
|
||||
/obj/structure/alien/egg,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"aj" = (
|
||||
/obj/structure/alien/weeds,
|
||||
/obj/structure/bed/nest,
|
||||
@@ -1219,12 +1214,12 @@ an
|
||||
ac
|
||||
ac
|
||||
aJ
|
||||
ag
|
||||
af
|
||||
ag
|
||||
ac
|
||||
ac
|
||||
ar
|
||||
ai
|
||||
ag
|
||||
ac
|
||||
an
|
||||
an
|
||||
@@ -1269,7 +1264,7 @@ an
|
||||
an
|
||||
ac
|
||||
Dd
|
||||
ai
|
||||
ag
|
||||
ak
|
||||
ag
|
||||
af
|
||||
@@ -1298,10 +1293,10 @@ aa
|
||||
ab
|
||||
ac
|
||||
ac
|
||||
ai
|
||||
ag
|
||||
ag
|
||||
at
|
||||
ai
|
||||
ag
|
||||
ac
|
||||
ag
|
||||
at
|
||||
@@ -1401,7 +1396,7 @@ ab
|
||||
ac
|
||||
af
|
||||
ag
|
||||
af
|
||||
ag
|
||||
ag
|
||||
af
|
||||
ac
|
||||
@@ -1807,7 +1802,7 @@ bD
|
||||
(25,1,1) = {"
|
||||
ab
|
||||
ac
|
||||
ai
|
||||
ag
|
||||
ag
|
||||
JM
|
||||
ag
|
||||
@@ -1816,7 +1811,7 @@ ac
|
||||
ag
|
||||
ar
|
||||
ag
|
||||
ai
|
||||
ag
|
||||
ac
|
||||
ab
|
||||
ab
|
||||
@@ -1860,7 +1855,7 @@ ab
|
||||
ac
|
||||
ac
|
||||
af
|
||||
ai
|
||||
ag
|
||||
af
|
||||
ag
|
||||
aF
|
||||
|
||||
@@ -173,6 +173,7 @@
|
||||
/obj/structure/stone_tile{
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/t_scanner/adv_mining_scanner/lesser,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"aC" = (
|
||||
@@ -186,6 +187,7 @@
|
||||
},
|
||||
/obj/structure/closet/crate/medical,
|
||||
/obj/item/storage/firstaid/regular,
|
||||
/obj/item/storage/firstaid/ancient,
|
||||
/obj/item/reagent_containers/blood/random,
|
||||
/obj/item/reagent_containers/blood/lizard,
|
||||
/obj/item/reagent_containers/blood/lizard,
|
||||
@@ -269,6 +271,7 @@
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"aP" = (
|
||||
/obj/structure/stone_tile,
|
||||
/obj/item/shard,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"aQ" = (
|
||||
@@ -575,6 +578,7 @@
|
||||
/obj/item/stack/sheet/mineral/wood,
|
||||
/obj/item/stack/sheet/mineral/wood,
|
||||
/obj/item/seeds/tower,
|
||||
/obj/item/seeds/tower,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"bx" = (
|
||||
@@ -1086,7 +1090,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/twohanded/spear,
|
||||
/obj/item/kitchen/knife/combat/bone,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"cN" = (
|
||||
@@ -1142,6 +1146,7 @@
|
||||
/obj/structure/stone_tile{
|
||||
dir = 1
|
||||
},
|
||||
/obj/item/surgical_drapes,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"cX" = (
|
||||
@@ -1301,6 +1306,7 @@
|
||||
},
|
||||
/obj/structure/stone_tile/center,
|
||||
/obj/effect/mapping_helpers/no_lava,
|
||||
/obj/item/hatchet,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/area/lavaland/surface/outdoors)
|
||||
"du" = (
|
||||
@@ -1392,6 +1398,18 @@
|
||||
},
|
||||
/turf/closed/mineral/volcanic/lava_land_surface,
|
||||
/area/lavaland/surface/outdoors)
|
||||
"nS" = (
|
||||
/obj/item/toy/cards/deck/syndicate,
|
||||
/turf/closed/mineral/volcanic/lava_land_surface,
|
||||
/area/lavaland/surface/outdoors)
|
||||
"Bv" = (
|
||||
/obj/structure/stone_tile{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/mapping_helpers/no_lava,
|
||||
/obj/item/cultivator,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/area/lavaland/surface/outdoors)
|
||||
|
||||
(1,1,1) = {"
|
||||
aa
|
||||
@@ -1407,7 +1425,7 @@ ah
|
||||
ah
|
||||
aa
|
||||
aa
|
||||
ah
|
||||
nS
|
||||
ah
|
||||
ah
|
||||
ah
|
||||
@@ -1558,7 +1576,7 @@ ba
|
||||
bn
|
||||
bz
|
||||
ak
|
||||
cb
|
||||
Bv
|
||||
df
|
||||
bX
|
||||
co
|
||||
|
||||
@@ -170,6 +170,8 @@
|
||||
/obj/item/storage/box/monkeycubes,
|
||||
/obj/item/storage/toolbox/drone,
|
||||
/obj/item/storage/toolbox/drone,
|
||||
/obj/item/storage/fancy/candle_box,
|
||||
/obj/item/storage/fancy/candle_box,
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plasteel,
|
||||
|
||||
@@ -29156,6 +29156,7 @@
|
||||
name = "Station Intercom";
|
||||
pixel_y = 26
|
||||
},
|
||||
/obj/item/reagent_containers/glass/bottle/mutagen,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hydroponics)
|
||||
"bbZ" = (
|
||||
@@ -78869,7 +78870,6 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/locker)
|
||||
"cCb" = (
|
||||
/obj/structure/closet/wardrobe/green,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
@@ -78880,6 +78880,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/closet/wardrobe/mixed,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/locker)
|
||||
"cCc" = (
|
||||
@@ -81677,7 +81678,6 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/crew_quarters/toilet/restrooms)
|
||||
"cGL" = (
|
||||
/obj/machinery/vending/clothing,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
@@ -81688,6 +81688,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/closet/wardrobe/green,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/locker)
|
||||
"cGM" = (
|
||||
@@ -81719,6 +81720,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/vending/clothing,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/locker)
|
||||
"cGO" = (
|
||||
|
||||
@@ -1026,7 +1026,8 @@
|
||||
/turf/closed/wall,
|
||||
/area/hallway/primary/starboard/fore)
|
||||
"abu" = (
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"abv" = (
|
||||
/turf/closed/wall,
|
||||
@@ -1271,7 +1272,8 @@
|
||||
/area/asteroid/nearstation)
|
||||
"abS" = (
|
||||
/obj/item/stack/ore/glass,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"abT" = (
|
||||
/turf/closed/wall,
|
||||
@@ -2090,7 +2092,8 @@
|
||||
icon_state = "crateopen"
|
||||
},
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"adw" = (
|
||||
/turf/open/floor/plating{
|
||||
@@ -3353,11 +3356,13 @@
|
||||
"afM" = (
|
||||
/obj/item/stack/ore/iron,
|
||||
/obj/structure/barricade/wooden,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"afN" = (
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"afP" = (
|
||||
/obj/structure/table/wood,
|
||||
@@ -3831,7 +3836,8 @@
|
||||
"agE" = (
|
||||
/obj/item/stack/ore/silver,
|
||||
/obj/item/stack/ore/iron,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"agF" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
@@ -4771,7 +4777,8 @@
|
||||
/area/quartermaster/storage)
|
||||
"aik" = (
|
||||
/obj/structure/barricade/wooden,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"aim" = (
|
||||
/obj/structure/rack,
|
||||
@@ -5733,7 +5740,8 @@
|
||||
/area/quartermaster/storage)
|
||||
"ajQ" = (
|
||||
/obj/item/stack/ore/iron,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/asteroid/nearstation)
|
||||
"ajR" = (
|
||||
/obj/structure/rack,
|
||||
@@ -9822,7 +9830,8 @@
|
||||
/area/engine/atmos)
|
||||
"aqG" = (
|
||||
/obj/structure/door_assembly/door_assembly_mhatch,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"aqI" = (
|
||||
/obj/structure/closet/secure_closet/security/sec,
|
||||
@@ -10343,7 +10352,8 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/atmos)
|
||||
"arB" = (
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"arC" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
@@ -36271,7 +36281,8 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/supermatter)
|
||||
"bvg" = (
|
||||
/turf/open/floor/plating/airless/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/asteroid/nearstation)
|
||||
"bvh" = (
|
||||
/obj/structure/closet/emcloset{
|
||||
@@ -40507,7 +40518,8 @@
|
||||
"sIA" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/structure/barricade/wooden,
|
||||
/turf/open/floor/plating/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/engineering)
|
||||
"sIB" = (
|
||||
/turf/closed/wall/rust,
|
||||
@@ -41786,7 +41798,8 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/turf/open/floor/plating/airless/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/ai_monitored/turret_protected/aisat_interior)
|
||||
"sNj" = (
|
||||
/obj/effect/turf_decal/bot,
|
||||
@@ -42384,7 +42397,8 @@
|
||||
/obj/structure/cable/white{
|
||||
icon_state = "0-8"
|
||||
},
|
||||
/turf/open/floor/plating/airless/astplate,
|
||||
/obj/effect/turf_decal/sand/plating,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/asteroid/nearstation)
|
||||
"sOK" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
"ae" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/docking_port/mobile{
|
||||
callTime = 250;
|
||||
dheight = 0;
|
||||
@@ -148,6 +149,7 @@
|
||||
/area/shuttle/abandoned/crew)
|
||||
"ap" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 1
|
||||
},
|
||||
@@ -737,6 +739,7 @@
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/item/reagent_containers/glass/bucket,
|
||||
/obj/item/mop,
|
||||
/obj/item/assembly/prox_sensor,
|
||||
/obj/item/storage/bag/trash{
|
||||
pixel_x = 6
|
||||
},
|
||||
@@ -954,6 +957,7 @@
|
||||
/area/shuttle/abandoned/engine)
|
||||
"bm" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/decal/cleanable/dirt{
|
||||
desc = "A thin layer of dust coating the floor.";
|
||||
name = "dust"
|
||||
@@ -1130,6 +1134,7 @@
|
||||
/area/shuttle/abandoned/bridge)
|
||||
"by" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/abandoned/engine)
|
||||
@@ -2600,6 +2605,7 @@
|
||||
"do" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/decal/cleanable/dirt{
|
||||
desc = "A thin layer of dust coating the floor.";
|
||||
name = "dust"
|
||||
@@ -2670,6 +2676,7 @@
|
||||
/area/shuttle/abandoned/medbay)
|
||||
"dt" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 1
|
||||
},
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
/area/shuttle/abandoned/crew)
|
||||
"ad" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
|
||||
/obj/docking_port/mobile{
|
||||
callTime = 250;
|
||||
@@ -443,6 +444,7 @@
|
||||
name = "E.V.A Access"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/obj/structure/fans/tiny,
|
||||
/area/shuttle/abandoned/crew)
|
||||
"aK" = (
|
||||
/obj/effect/decal/cleanable/dirt{
|
||||
@@ -628,6 +630,7 @@
|
||||
name = "E.V.A Access"
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned/bar)
|
||||
"aX" = (
|
||||
@@ -2531,6 +2534,7 @@
|
||||
/obj/machinery/door/airlock/external/glass{
|
||||
name = "E.V.A Access"
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/decal/cleanable/dirt{
|
||||
desc = "A thin layer of dust coating the floor.";
|
||||
name = "dust"
|
||||
@@ -2555,6 +2559,7 @@
|
||||
/obj/machinery/door/airlock/external/glass{
|
||||
name = "E.V.A Access"
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned/cargo)
|
||||
"ds" = (
|
||||
@@ -2782,6 +2787,7 @@
|
||||
/area/shuttle/abandoned/medbay)
|
||||
"dI" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
|
||||
/obj/effect/decal/cleanable/dirt{
|
||||
desc = "A thin layer of dust coating the floor.";
|
||||
@@ -3103,6 +3109,7 @@
|
||||
/area/shuttle/abandoned/cargo)
|
||||
"eb" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 1
|
||||
},
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
/area/shuttle/abandoned/crew)
|
||||
"ah" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
|
||||
/obj/docking_port/mobile{
|
||||
callTime = 250;
|
||||
@@ -458,6 +459,7 @@
|
||||
/area/shuttle/abandoned/crew)
|
||||
"aI" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 1
|
||||
},
|
||||
@@ -583,6 +585,7 @@
|
||||
name = "dust"
|
||||
},
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 4
|
||||
},
|
||||
@@ -704,6 +707,7 @@
|
||||
name = "dust"
|
||||
},
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 8
|
||||
},
|
||||
@@ -1893,6 +1897,7 @@
|
||||
/area/shuttle/abandoned/bridge)
|
||||
"ch" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 4
|
||||
},
|
||||
@@ -1915,6 +1920,7 @@
|
||||
/area/shuttle/abandoned/engine)
|
||||
"cj" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 8
|
||||
},
|
||||
@@ -3094,6 +3100,7 @@
|
||||
name = "dust"
|
||||
},
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 4
|
||||
},
|
||||
@@ -3164,6 +3171,7 @@
|
||||
name = "dust"
|
||||
},
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 8
|
||||
},
|
||||
@@ -3432,6 +3440,7 @@
|
||||
/obj/item/shovel,
|
||||
/obj/item/pickaxe,
|
||||
/obj/item/storage/box/lights/mixed,
|
||||
/obj/item/storage/box/lights/mixed,
|
||||
/obj/item/mining_scanner,
|
||||
/obj/effect/turf_decal/bot,
|
||||
/turf/open/floor/plating,
|
||||
@@ -3514,6 +3523,7 @@
|
||||
/area/shuttle/abandoned/bar)
|
||||
"dP" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
|
||||
/obj/effect/decal/cleanable/dirt{
|
||||
desc = "A thin layer of dust coating the floor.";
|
||||
@@ -3808,6 +3818,7 @@
|
||||
/area/shuttle/abandoned/cargo)
|
||||
"ej" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 1
|
||||
},
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
/obj/machinery/door/airlock/public/glass{
|
||||
name = "Shuttle Airlock"
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/abandoned)
|
||||
"e" = (
|
||||
@@ -96,6 +97,7 @@
|
||||
preferred_direction = 1;
|
||||
width = 9
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/shuttle/abandoned)
|
||||
"p" = (
|
||||
|
||||
@@ -7,4 +7,7 @@
|
||||
#define TICK_USAGE_REAL world.tick_usage //to be used where the result isn't checked
|
||||
|
||||
#define TICK_CHECK ( TICK_USAGE > Master.current_ticklimit )
|
||||
#define CHECK_TICK if TICK_CHECK stoplag()
|
||||
#define CHECK_TICK ( TICK_CHECK ? stoplag() : 0 )
|
||||
|
||||
#define TICK_CHECK_HIGH_PRIORITY ( TICK_USAGE > 95 )
|
||||
#define CHECK_TICK_HIGH_PRIORITY ( TICK_CHECK_HIGH_PRIORITY? stoplag() : 0 )
|
||||
|
||||
@@ -4,6 +4,11 @@
|
||||
#define ALL (~0) //For convenience.
|
||||
#define NONE 0
|
||||
|
||||
//for convenience
|
||||
#define ENABLE_BITFIELD(variable, flag) (variable |= (flag))
|
||||
#define DISABLE_BITFIELD(variable, flag) (variable &= ~(flag))
|
||||
#define CHECK_BITFIELD(variable, flag) (variable & flag)
|
||||
|
||||
GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768))
|
||||
|
||||
// for /datum/var/datum_flags
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#define LIGHT_COLOR_BLUE "#6496FA" //Cold, diluted blue. rgb(100, 150, 250)
|
||||
|
||||
#define LIGHT_COLOR_BLUEGREEN "#7DE1AF" //Light blueish green. rgb(125, 225, 175)
|
||||
#define LIGHT_COLOR_PALEBLUE "#7DAFE1" //A pale blue-ish color. rgb(125, 175, 225)
|
||||
#define LIGHT_COLOR_CYAN "#7DE1E1" //Diluted cyan. rgb(125, 225, 225)
|
||||
#define LIGHT_COLOR_LIGHT_CYAN "#40CEFF" //More-saturated cyan. rgb(64, 206, 255)
|
||||
#define LIGHT_COLOR_DARK_BLUE "#6496FA" //Saturated blue. rgb(51, 117, 248)
|
||||
@@ -58,7 +59,7 @@
|
||||
#define LIGHT_RANGE_FIRE 3 //How many tiles standard fires glow.
|
||||
|
||||
#define LIGHTING_PLANE_ALPHA_VISIBLE 255
|
||||
#define LIGHTING_PLANE_ALPHA_NV_TRAIT 245
|
||||
#define LIGHTING_PLANE_ALPHA_NV_TRAIT 250
|
||||
#define LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE 192
|
||||
#define LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE 128 //For lighting alpha, small amounts lead to big changes. even at 128 its hard to figure out what is dark and what is light, at 64 you almost can't even tell.
|
||||
#define LIGHTING_PLANE_ALPHA_INVISIBLE 0
|
||||
|
||||
+24
-91
@@ -63,96 +63,29 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0)
|
||||
|
||||
//Takes a value of time in deciseconds.
|
||||
//Returns a text value of that number in hours, minutes, or seconds.
|
||||
/proc/DisplayTimeText(time_value, truncate = FALSE)
|
||||
var/second = (time_value)*0.1
|
||||
var/second_adjusted = null
|
||||
var/second_rounded = FALSE
|
||||
var/minute = null
|
||||
var/hour = null
|
||||
var/day = null
|
||||
|
||||
/proc/DisplayTimeText(time_value, round_seconds_to = 0.1)
|
||||
var/second = FLOOR(time_value * 0.1, round_seconds_to)
|
||||
if(!second)
|
||||
return "0 seconds"
|
||||
if(second >= 60)
|
||||
minute = FLOOR(second/60, 1)
|
||||
second = round(second - (minute*60), 0.1)
|
||||
second_rounded = TRUE
|
||||
if(second) //check if we still have seconds remaining to format, or if everything went into minute.
|
||||
second_adjusted = round(second) //used to prevent '1 seconds' being shown
|
||||
if(day || hour || minute)
|
||||
if(second_adjusted == 1 && second >= 1)
|
||||
second = " and 1 second"
|
||||
else if(second > 1)
|
||||
second = " and [second_adjusted] seconds"
|
||||
else //shows a fraction if seconds is < 1
|
||||
if(second_rounded) //no sense rounding again if it's already done
|
||||
second = " and [second] seconds"
|
||||
else
|
||||
second = " and [round(second, 0.1)] seconds"
|
||||
else
|
||||
if(second_adjusted == 1 && second >= 1)
|
||||
second = "[truncate ? "second" : "1 second"]"
|
||||
else if(second > 1)
|
||||
second = "[second_adjusted] seconds"
|
||||
else
|
||||
if(second_rounded)
|
||||
second = "[second] seconds"
|
||||
else
|
||||
second = "[round(second, 0.1)] seconds"
|
||||
else
|
||||
second = null
|
||||
|
||||
if(!minute)
|
||||
return "[second]"
|
||||
if(minute >= 60)
|
||||
hour = FLOOR(minute/60, 1)
|
||||
minute = (minute - (hour*60))
|
||||
if(minute) //alot simpler from here since you don't have to worry about fractions
|
||||
if(minute != 1)
|
||||
if((day || hour) && second)
|
||||
minute = ", [minute] minutes"
|
||||
else if((day || hour) && !second)
|
||||
minute = " and [minute] minutes"
|
||||
else
|
||||
minute = "[minute] minutes"
|
||||
else
|
||||
if((day || hour) && second)
|
||||
minute = ", 1 minute"
|
||||
else if((day || hour) && !second)
|
||||
minute = " and 1 minute"
|
||||
else
|
||||
minute = "[truncate ? "minute" : "1 minute"]"
|
||||
else
|
||||
minute = null
|
||||
|
||||
if(!hour)
|
||||
return "[minute][second]"
|
||||
if(hour >= 24)
|
||||
day = FLOOR(hour/24, 1)
|
||||
hour = (hour - (day*24))
|
||||
return "right now"
|
||||
if(second < 60)
|
||||
return "[second] second[(second != 1)? "s":""]"
|
||||
var/minute = FLOOR(second / 60, 1)
|
||||
second = FLOOR(MODULUS(second, 60), round_seconds_to)
|
||||
var/secondT
|
||||
if(second)
|
||||
secondT = " and [second] second[(second != 1)? "s":""]"
|
||||
if(minute < 60)
|
||||
return "[minute] minute[(minute != 1)? "s":""][secondT]"
|
||||
var/hour = FLOOR(minute / 60, 1)
|
||||
minute = MODULUS(minute, 60)
|
||||
var/minuteT
|
||||
if(minute)
|
||||
minuteT = " and [minute] minute[(minute != 1)? "s":""]"
|
||||
if(hour < 24)
|
||||
return "[hour] hour[(hour != 1)? "s":""][minuteT][secondT]"
|
||||
var/day = FLOOR(hour / 24, 1)
|
||||
hour = MODULUS(hour, 24)
|
||||
var/hourT
|
||||
if(hour)
|
||||
if(hour != 1)
|
||||
if(day && (minute || second))
|
||||
hour = ", [hour] hours"
|
||||
else if(day && (!minute || !second))
|
||||
hour = " and [hour] hours"
|
||||
else
|
||||
hour = "[hour] hours"
|
||||
else
|
||||
if(day && (minute || second))
|
||||
hour = ", 1 hour"
|
||||
else if(day && (!minute || !second))
|
||||
hour = " and 1 hour"
|
||||
else
|
||||
hour = "[truncate ? "hour" : "1 hour"]"
|
||||
else
|
||||
hour = null
|
||||
|
||||
if(!day)
|
||||
return "[hour][minute][second]"
|
||||
if(day > 1)
|
||||
day = "[day] days"
|
||||
else
|
||||
day = "[truncate ? "day" : "1 day"]"
|
||||
|
||||
return "[day][hour][minute][second]"
|
||||
hourT = " and [hour] hour[(hour != 1)? "s":""]"
|
||||
return "[day] day[(day != 1)? "s":""][hourT][minuteT][secondT]"
|
||||
|
||||
@@ -1239,6 +1239,20 @@ GLOBAL_REAL_VAR(list/stack_trace_storage)
|
||||
pixel_x = initialpixelx
|
||||
pixel_y = initialpixely
|
||||
|
||||
/atom/proc/do_jiggle(targetangle = 45)
|
||||
var/matrix/OM = matrix(transform)
|
||||
var/matrix/M = matrix(transform)
|
||||
M.Turn(pick(-targetangle, targetangle))
|
||||
animate(src, transform = M, time = 10, easing = ELASTIC_EASING)
|
||||
animate(src, transform = OM, time = 10, easing = ELASTIC_EASING)
|
||||
|
||||
/atom/proc/do_squish(squishx = 1.2, squishy = 0.6)
|
||||
var/matrix/OM = matrix(transform)
|
||||
var/matrix/M = matrix(transform)
|
||||
M.Scale(squishx, squishy)
|
||||
animate(src, transform = M, time = 10, easing = BOUNCE_EASING)
|
||||
animate(src, transform = OM, time = 10, easing = BOUNCE_EASING)
|
||||
|
||||
/proc/weightclass2text(var/w_class)
|
||||
switch(w_class)
|
||||
if(WEIGHT_CLASS_TINY)
|
||||
@@ -1530,4 +1544,4 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
. = list()
|
||||
for(var/i in L)
|
||||
if(condition.Invoke(i))
|
||||
. |= i
|
||||
. |= i
|
||||
|
||||
@@ -38,6 +38,7 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
|
||||
/obj/item/clothing/suit/hazardvest = 1,
|
||||
/obj/item/clothing/under/rank/vice = 1,
|
||||
/obj/item/clothing/suit/hooded/flashsuit = 2,
|
||||
/obj/item/clothing/accessory/medal/greytide = 1,
|
||||
/obj/item/assembly/prox_sensor = 4,
|
||||
/obj/item/assembly/timer = 3,
|
||||
/obj/item/flashlight = 4,
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
|
||||
/datum/config_entry/string/servername // server name (the name of the game window)
|
||||
|
||||
/datum/config_entry/string/servertagline
|
||||
config_entry_value = "We forgot to set the server's tagline in config.txt"
|
||||
|
||||
/datum/config_entry/string/serversqlname // short form server name used for the DB
|
||||
|
||||
/datum/config_entry/string/stationname // station name (the name of the station in-game)
|
||||
|
||||
@@ -454,7 +454,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
if(CONFIG_GET(flag/tgstyle_maprotation))
|
||||
INVOKE_ASYNC(SSmapping, /datum/controller/subsystem/mapping/.proc/maprotate)
|
||||
else
|
||||
SSvote.initiate_vote("map","server")
|
||||
SSvote.initiate_vote("map","server",TRUE)
|
||||
|
||||
/datum/controller/subsystem/ticker/proc/HasRoundStarted()
|
||||
return current_state >= GAME_STATE_PLAYING
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
click_gather = TRUE
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
max_combined_w_class = 100
|
||||
max_items = 50
|
||||
max_items = 100
|
||||
display_numerical_stacking = TRUE
|
||||
|
||||
/datum/component/storage/concrete/rped/can_be_inserted(obj/item/I, stop_messages, mob/M)
|
||||
@@ -22,7 +22,7 @@
|
||||
click_gather = TRUE
|
||||
max_w_class = WEIGHT_CLASS_BULKY // can fit vending refills
|
||||
max_combined_w_class = 800
|
||||
max_items = 400
|
||||
max_items = 350
|
||||
display_numerical_stacking = TRUE
|
||||
|
||||
/datum/component/storage/concrete/bluespace/rped/can_be_inserted(obj/item/I, stop_messages, mob/M)
|
||||
@@ -31,3 +31,6 @@
|
||||
if (!stop_messages)
|
||||
to_chat(M, "<span class='warning'>[parent] only accepts machine parts!</span>")
|
||||
return FALSE
|
||||
|
||||
/datum/component/storage/concrete/cyborg/rped
|
||||
max_items = 150
|
||||
|
||||
@@ -169,10 +169,12 @@
|
||||
if(locked)
|
||||
to_chat(M, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
return FALSE
|
||||
var/atom/A = parent
|
||||
var/obj/item/I = O
|
||||
if(collection_mode == COLLECT_ONE)
|
||||
if(can_be_inserted(I, null, M))
|
||||
handle_item_insertion(I, null, M)
|
||||
A.do_squish()
|
||||
return
|
||||
if(!isturf(I.loc))
|
||||
return
|
||||
@@ -189,6 +191,7 @@
|
||||
stoplag(1)
|
||||
qdel(progress)
|
||||
to_chat(M, "<span class='notice'>You put everything you could [insert_preposition] [parent].</span>")
|
||||
A.do_squish(1.4, 0.4)
|
||||
|
||||
/datum/component/storage/proc/handle_mass_item_insertion(list/things, datum/component/storage/src_object, mob/user, datum/progressbar/progress)
|
||||
var/atom/source_real_location = src_object.real_location()
|
||||
@@ -246,6 +249,7 @@
|
||||
while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress)))
|
||||
stoplag(1)
|
||||
qdel(progress)
|
||||
A.do_squish(0.8, 1.2)
|
||||
|
||||
/datum/component/storage/proc/mass_remove_from_storage(atom/target, list/things, datum/progressbar/progress, trigger_on_found = TRUE)
|
||||
var/atom/real_location = real_location()
|
||||
@@ -455,6 +459,7 @@
|
||||
return FALSE
|
||||
if(dump_destination.storage_contents_dump_act(src, M))
|
||||
playsound(A, "rustle", 50, 1, -5)
|
||||
A.do_squish(0.8, 1.2)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
@@ -473,6 +478,8 @@
|
||||
return TRUE
|
||||
return FALSE
|
||||
handle_item_insertion(I, FALSE, M)
|
||||
var/atom/A = parent
|
||||
A.do_squish()
|
||||
|
||||
/datum/component/storage/proc/return_inv(recursive)
|
||||
var/list/ret = list()
|
||||
@@ -514,6 +521,7 @@
|
||||
if(A.loc != M)
|
||||
return
|
||||
playsound(A, "rustle", 50, 1, -5)
|
||||
A.do_jiggle()
|
||||
if(istype(over_object, /obj/screen/inventory/hand))
|
||||
var/obj/screen/inventory/hand/H = over_object
|
||||
M.putItemFromInventoryInHandIfPossible(A, H.held_index)
|
||||
@@ -539,6 +547,8 @@
|
||||
if(!L.incapacitated() && I == L.get_active_held_item())
|
||||
if(!SEND_SIGNAL(I, COMSIG_CONTAINS_STORAGE) && can_be_inserted(I, FALSE)) //If it has storage it should be trying to dump, not insert.
|
||||
handle_item_insertion(I, FALSE, L)
|
||||
var/atom/A = parent
|
||||
A.do_squish()
|
||||
|
||||
//This proc return 1 if the item can be picked up and 0 if it can't.
|
||||
//Set the stop_messages to stop it from printing messages
|
||||
@@ -712,6 +722,7 @@
|
||||
to_chat(user, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
else
|
||||
show_to(user)
|
||||
A.do_jiggle()
|
||||
|
||||
/datum/component/storage/proc/signal_on_pickup(datum/source, mob/user)
|
||||
var/atom/A = parent
|
||||
@@ -732,16 +743,30 @@
|
||||
return hide_from(target)
|
||||
|
||||
/datum/component/storage/proc/on_alt_click(datum/source, mob/user)
|
||||
if(!isliving(user) || user.incapacitated() || !quickdraw || locked || !user.CanReach(parent))
|
||||
if(!isliving(user) || !user.CanReach(parent))
|
||||
return
|
||||
var/obj/item/I = locate() in real_location()
|
||||
if(!I)
|
||||
if(locked)
|
||||
to_chat(user, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
return
|
||||
remove_from_storage(I, get_turf(user))
|
||||
if(!user.put_in_hands(I))
|
||||
to_chat(user, "<span class='notice'>You fumble for [I] and it falls on the floor.</span>")
|
||||
|
||||
var/atom/A = parent
|
||||
if(!quickdraw)
|
||||
A.add_fingerprint(user)
|
||||
user_show_to_mob(user)
|
||||
playsound(A, "rustle", 50, 1, -5)
|
||||
return
|
||||
|
||||
if(!user.incapacitated())
|
||||
var/obj/item/I = locate() in real_location()
|
||||
if(!I)
|
||||
return
|
||||
A.add_fingerprint(user)
|
||||
remove_from_storage(I, get_turf(user))
|
||||
if(!user.put_in_hands(I))
|
||||
to_chat(user, "<span class='notice'>You fumble for [I] and it falls on the floor.</span>")
|
||||
return
|
||||
user.visible_message("<span class='warning'>[user] draws [I] from [parent]!</span>", "<span class='notice'>You draw [I] from [parent].</span>")
|
||||
return
|
||||
user.visible_message("<span class='warning'>[user] draws [I] from [parent]!</span>", "<span class='notice'>You draw [I] from [parent].</span>")
|
||||
|
||||
/datum/component/storage/proc/action_trigger(datum/signal_source, datum/action/source)
|
||||
gather_mode_switch(source.owner)
|
||||
|
||||
@@ -38,15 +38,25 @@
|
||||
var/obj/item/heirloom_type
|
||||
switch(quirk_holder.mind.assigned_role)
|
||||
if("Clown")
|
||||
heirloom_type = /obj/item/paint/anycolor
|
||||
heirloom_type = /obj/item/bikehorn/golden
|
||||
if("Mime")
|
||||
heirloom_type = /obj/item/reagent_containers/food/snacks/baguette
|
||||
heirloom_type = /obj/item/toy/dummy
|
||||
heirloom_type = /obj/item/paint/anycolor
|
||||
if("Cook")
|
||||
heirloom_type = /obj/item/kitchen/knife/scimitar
|
||||
if("Medical Doctor")
|
||||
heirloom_type = /obj/item/healthanalyzer/advanced
|
||||
if("Station Engineer")
|
||||
heirloom_type = /obj/item/wirecutters/brass
|
||||
if("Atmospheric Technician")
|
||||
heirloom_type = /obj/item/extinguisher/mini/family
|
||||
if("Lawyer")
|
||||
heirloom_type = /obj/item/gavelhammer
|
||||
if("Janitor")
|
||||
heirloom_type = /obj/item/mop
|
||||
if("Security Officer")
|
||||
heirloom_type = /obj/item/book/manual/wiki/security_space_law
|
||||
heirloom_type = /obj/item/clothing/accessory/medal/silver/valor
|
||||
if("Scientist")
|
||||
heirloom_type = /obj/item/toy/plush/slimeplushie
|
||||
if("Assistant")
|
||||
@@ -257,14 +267,32 @@
|
||||
|
||||
/datum/quirk/phobia
|
||||
name = "Phobia"
|
||||
desc = "You've had a traumatic past, that has scared you for life while dealing with your greatest fear."
|
||||
desc = "You've had a traumatic past, one that has scarred you for life, and cripples you when dealing with your greatest fears."
|
||||
value = -2 // It can hardstun you. You can be a job that your phobia targets...
|
||||
gain_text = "<span class='danger'>You feel your fears manifest themselfs.</span>"
|
||||
lose_text = "<span class='notice'>You feel your fears fade away.</span>"
|
||||
medical_record_text = "Patient has an extreme or irrational fear of or aversion to something."
|
||||
gain_text = "<span class='danger'>You begin to tremble as an immeasurable fear grips your mind.</span>"
|
||||
lose_text = "<span class='notice'>Your confidence wipes away the fear that had been plaguing you.</span>"
|
||||
medical_record_text = "Patient has an extreme or irrational fear and aversion to an undefined stimuli."
|
||||
var/datum/brain_trauma/mild/phobia/phobia
|
||||
|
||||
|
||||
/datum/quirk/phobia/add()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
phobia = new
|
||||
H.gain_trauma(phobia, TRAUMA_RESILIENCE_SURGERY)
|
||||
|
||||
/datum/quirk/mute
|
||||
name = "Mute"
|
||||
desc = "Due to some accident, medical condition, or simply by choice, you are completely unable to speak."
|
||||
value = -2 //HALP MAINTS
|
||||
gain_text = "<span class='danger'>You find yourself unable to speak!</span>"
|
||||
lose_text = "<span class='notice'>You feel a growing strength in your vocal chords.</span>"
|
||||
medical_record_text = "Functionally mute, patient is unable to use their voice in any capacity."
|
||||
var/datum/brain_trauma/severe/mute
|
||||
|
||||
/datum/quirk/mute/add()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
H.gain_trauma(mute, TRAUMA_RESILIENCE_SURGERY)
|
||||
|
||||
/datum/quirk/mute/on_process()
|
||||
if(quirk_holder.mind && LAZYLEN(quirk_holder.mind.antag_datums))
|
||||
to_chat(quirk_holder, "<span class='boldannounce'>Your antagonistic nature has caused your voice to return.</span>")
|
||||
qdel(src)
|
||||
|
||||
@@ -93,6 +93,10 @@
|
||||
/datum/weather/ash_storm/weather_act(mob/living/L)
|
||||
if(is_ash_immune(L))
|
||||
return
|
||||
if(is_species(L, /datum/species/lizard/ashwalker))
|
||||
if(L.getStaminaLoss() <= STAMINA_SOFTCRIT)
|
||||
L.adjustStaminaLossBuffered(4)
|
||||
return
|
||||
L.adjustFireLoss(4)
|
||||
|
||||
|
||||
|
||||
@@ -29,6 +29,13 @@
|
||||
/area/centcom/holding
|
||||
name = "Holding Facility"
|
||||
|
||||
/area/centcom/vip
|
||||
name = "VIP Zone"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
|
||||
/area/centcom/winterball
|
||||
name = "winterball Zone"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
|
||||
|
||||
/area/centcom/supplypod
|
||||
name = "Supplypod Facility"
|
||||
icon_state = "supplypod"
|
||||
|
||||
@@ -622,8 +622,12 @@
|
||||
else if(direction & WEST)
|
||||
pixel_x_diff = -8
|
||||
|
||||
animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2)
|
||||
animate(src, pixel_x = pixel_x - pixel_x_diff, pixel_y = pixel_y - pixel_y_diff, time = 2)
|
||||
var/matrix/OM = matrix(transform)
|
||||
var/matrix/M = matrix(transform)
|
||||
M.Turn(pixel_x_diff ? pixel_x_diff*2 : pick(-16, 16))
|
||||
|
||||
animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, transform = M, time = 2)
|
||||
animate(src, pixel_x = pixel_x - pixel_x_diff, pixel_y = pixel_y - pixel_y_diff, transform = OM, time = 2)
|
||||
|
||||
/atom/movable/proc/do_item_attack_animation(atom/A, visual_effect_icon, obj/item/used_item)
|
||||
var/image/I
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
///////////////////////////
|
||||
/datum/game_mode/revolution/announce()
|
||||
to_chat(world, "<B>The current game mode is - Revolution!</B>")
|
||||
to_chat(world, "<B>Some crewmembers are attempting to start a revolution!<BR>\nRevolutionaries - Kill the Captain, HoP, HoS, CE, RD and CMO. Convert other crewmembers (excluding the heads of staff, and security officers) to your cause by flashing them. Protect your leaders.<BR>\nPersonnel - Protect the heads of staff. Kill the leaders of the revolution, and brainwash the other revolutionaries (by beating them in the head).</B>")
|
||||
to_chat(world, "<B>Some crewmembers are attempting to start a revolution!<BR>\nRevolutionaries - Kill the Captain, HoP, HoS, CE, RD, QM and CMO. Convert other crewmembers (excluding the heads of staff, and security officers) to your cause by flashing them. Protect your leaders.<BR>\nPersonnel - Protect the heads of staff. Kill the leaders of the revolution, and brainwash the other revolutionaries (by beating them in the head).</B>")
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -212,6 +212,17 @@
|
||||
icon_state = "sleeper_s"
|
||||
controls_inside = TRUE
|
||||
|
||||
/obj/machinery/sleeper/syndie/Initialize()
|
||||
. = ..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/machine/sleeper(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/super(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator/pico(null)
|
||||
component_parts += new /obj/item/stack/sheet/glass(null)
|
||||
component_parts += new /obj/item/stack/sheet/glass(null)
|
||||
component_parts += new /obj/item/stack/cable_coil(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/sleeper/syndie/fullupgrade/Initialize()
|
||||
. = ..()
|
||||
component_parts = list()
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "jukebox"
|
||||
verb_say = "states"
|
||||
density = TRUE
|
||||
req_access = list(ACCESS_BAR)
|
||||
req_one_access = list(ACCESS_BAR, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_ENGINE, ACCESS_CARGO, ACCESS_THEATRE)
|
||||
var/active = FALSE
|
||||
var/list/rangers = list()
|
||||
var/stop = 0
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
/obj/machinery/suit_storage_unit/engine
|
||||
suit_type = /obj/item/clothing/suit/space/hardsuit/engine
|
||||
mask_type = /obj/item/clothing/mask/breath
|
||||
storage_type= /obj/item/clothing/shoes/magboots
|
||||
|
||||
/obj/machinery/suit_storage_unit/ce
|
||||
suit_type = /obj/item/clothing/suit/space/hardsuit/engine/elite
|
||||
|
||||
@@ -275,6 +275,18 @@
|
||||
variance = 25
|
||||
harmful = TRUE
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/seedscatter
|
||||
name = "\improper Melon Seed \"Scattershot\""
|
||||
desc = "A weapon for combat exosuits. Shoots a spread of pellets, shaped as seed."
|
||||
icon_state = "mecha_scatter"
|
||||
equip_cooldown = 30
|
||||
projectile = /obj/item/projectile/bullet/seed
|
||||
projectiles = 4
|
||||
projectile_energy_cost = 55
|
||||
projectiles_per_shot = 10
|
||||
variance = 20
|
||||
harmful = TRUE
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg
|
||||
name = "\improper Ultra AC 2"
|
||||
desc = "A weapon for combat exosuits. Shoots a rapid, three shot burst."
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
for(var/turf/open/floor/earth in view(3,src))
|
||||
if(is_type_in_typecache(earth, blacklisted_glowshroom_turfs))
|
||||
continue
|
||||
if(!ownturf.CanAtmosPass(earth))
|
||||
if(!disease_air_spread_walk(ownturf, earth))
|
||||
continue
|
||||
if(spreadsIntoAdjacent || !locate(/obj/structure/glowshroom) in view(1,earth))
|
||||
possibleLocs += earth
|
||||
|
||||
@@ -36,6 +36,7 @@ RLD
|
||||
var/no_ammo_message = "<span class='warning'>The \'Low Ammo\' light on the device blinks yellow.</span>"
|
||||
var/has_ammobar = FALSE //controls whether or not does update_icon apply ammo indicator overlays
|
||||
var/ammo_sections = 10 //amount of divisions in the ammo indicator overlay/number of ammo indicator states
|
||||
var/custom_range = 7
|
||||
|
||||
/obj/item/construction/Initialize()
|
||||
. = ..()
|
||||
@@ -119,7 +120,7 @@ RLD
|
||||
return .
|
||||
|
||||
/obj/item/construction/proc/range_check(atom/A, mob/user)
|
||||
if(!(A in view(7, get_turf(user))))
|
||||
if(!(A in range(custom_range, get_turf(user))))
|
||||
to_chat(user, "<span class='warning'>The \'Out of Range\' light on [src] blinks red.</span>")
|
||||
return FALSE
|
||||
else
|
||||
@@ -445,13 +446,23 @@ RLD
|
||||
matter = 160
|
||||
|
||||
/obj/item/construction/rcd/combat
|
||||
name = "industrial RCD"
|
||||
name = "Combat RCD"
|
||||
desc = "A device used to rapidly build and deconstruct. Reload with metal, plasteel, glass or compressed matter cartridges. This RCD has been upgraded to be able to remove Rwalls!"
|
||||
icon_state = "ircd"
|
||||
item_state = "ircd"
|
||||
max_matter = 500
|
||||
matter = 500
|
||||
canRturf = TRUE
|
||||
|
||||
/obj/item/construction/rcd/industrial
|
||||
name = "industrial RCD"
|
||||
icon_state = "ircd"
|
||||
item_state = "ircd"
|
||||
max_matter = 500
|
||||
matter = 500
|
||||
delay_mod = 0.6
|
||||
sheetmultiplier = 8
|
||||
|
||||
/obj/item/rcd_ammo
|
||||
name = "compressed matter cartridge"
|
||||
desc = "Highly compressed matter for the RCD."
|
||||
@@ -509,8 +520,9 @@ RLD
|
||||
icon_state = "rld-5"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
matter = 200
|
||||
max_matter = 200
|
||||
matter = 500
|
||||
max_matter = 500
|
||||
sheetmultiplier = 16
|
||||
var/mode = LIGHT_MODE
|
||||
actions_types = list(/datum/action/item_action/pick_color)
|
||||
|
||||
@@ -521,7 +533,7 @@ RLD
|
||||
|
||||
var/walldelay = 10
|
||||
var/floordelay = 10
|
||||
var/decondelay = 15
|
||||
var/decondelay = 10
|
||||
|
||||
var/color_choice = null
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
/obj/item/flashlight/attack_self(mob/user)
|
||||
on = !on
|
||||
update_brightness(user)
|
||||
playsound(user, on ? 'sound/weapons/magin.ogg' : 'sound/weapons/magout.ogg', 40, 1)
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
|
||||
@@ -42,6 +42,18 @@
|
||||
sprite_name = "miniFE"
|
||||
dog_fashion = null
|
||||
|
||||
/obj/item/extinguisher/mini/family
|
||||
name = "pocket fire extinguisher"
|
||||
desc = "A old fashen pocket fire extinguisher that has been modified with a larger water tank, and a small high-power sprayer. It feels cool to the touch and has a small humming to it..."
|
||||
icon_state = "miniFE0"
|
||||
item_state = "miniFE"
|
||||
throwforce = 1
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
force = 2
|
||||
max_water = 40
|
||||
power = 7
|
||||
cooling_power = 3
|
||||
|
||||
/obj/item/extinguisher/Initialize()
|
||||
. = ..()
|
||||
create_reagents(max_water)
|
||||
|
||||
@@ -29,8 +29,12 @@
|
||||
if(target.mind.has_antag_datum(/datum/antagonist/rev/head) || target.mind.unconvertable)
|
||||
if(!silent)
|
||||
target.visible_message("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>")
|
||||
var/obj/item/implanter/I = loc
|
||||
removed(target, 1)
|
||||
qdel(src)
|
||||
if(istype(I))
|
||||
I.imp = null
|
||||
I.update_icon()
|
||||
return FALSE
|
||||
|
||||
var/datum/antagonist/rev/rev = target.mind.has_antag_datum(/datum/antagonist/rev)
|
||||
|
||||
@@ -176,3 +176,12 @@
|
||||
user.visible_message("<span class='suicide'>[user] begins flattening [user.p_their()] head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return BRUTELOSS
|
||||
/* Trays moved to /obj/item/storage/bag */
|
||||
|
||||
/obj/item/kitchen/knife/scimitar
|
||||
name = "Scimitar knife"
|
||||
desc = "A knife used to cleanly butcher. Its razor-sharp edge has been honed for butchering, but has been poorly maintained over the years."
|
||||
attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
/obj/item/kitchen/knife/scimiar/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/butchering, 90 - force, 100, force - 60) //bonus chance increases depending on force
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
force = 10
|
||||
throwforce = 7
|
||||
force = 14
|
||||
throwforce = 10
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
attack_verb = list("flogged", "whipped", "lashed", "disciplined")
|
||||
hitsound = 'sound/weapons/chainhit.ogg'
|
||||
@@ -57,8 +57,8 @@
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
obj_flags = UNIQUE_RENAME
|
||||
force = 15
|
||||
throwforce = 10
|
||||
force = 18
|
||||
throwforce = 15
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
block_chance = 50
|
||||
armour_penetration = 75
|
||||
|
||||
@@ -56,22 +56,34 @@
|
||||
icon_state = "paint_neutral"
|
||||
|
||||
/obj/item/paint/anycolor/attack_self(mob/user)
|
||||
var/t1 = input(user, "Please select a color:", "Locking Computer", null) in list( "red", "blue", "green", "yellow", "violet", "black", "white")
|
||||
var/t1 = input(user, "Please select a color:", "Locking Computer", null) in list( "red", "pink", "blue", "cyan", "green", "lime", "yellow", "orange", "violet", "purple", "black", "gray", "white")
|
||||
if ((user.get_active_held_item() != src || user.stat || user.restrained()))
|
||||
return
|
||||
switch(t1)
|
||||
if("red")
|
||||
item_color = "C73232"
|
||||
if("pink")
|
||||
item_color = "FFC0CD"
|
||||
if("blue")
|
||||
item_color = "5998FF"
|
||||
if("cyan")
|
||||
item_color = "00FFFF"
|
||||
if("green")
|
||||
item_color = "2A9C3B"
|
||||
if("lime")
|
||||
item_color = "00FF00"
|
||||
if("yellow")
|
||||
item_color = "CFB52B"
|
||||
if("orange")
|
||||
item_color = "fFA700"
|
||||
if("violet")
|
||||
item_color = "AE4CCD"
|
||||
if("purple")
|
||||
item_color = "800080"
|
||||
if("white")
|
||||
item_color = "FFFFFF"
|
||||
if("gray")
|
||||
item_color = "808080"
|
||||
if("black")
|
||||
item_color = "333333"
|
||||
icon_state = "paint_[t1]"
|
||||
|
||||
@@ -190,8 +190,10 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
|
||||
new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 30), \
|
||||
new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("plywood chair", /obj/structure/chair/comfy/plywood, 4, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("rustic wooden door", /obj/structure/mineral_door/woodrustic, 10, time = 20, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
|
||||
@@ -111,6 +111,22 @@
|
||||
/obj/item/stack/tile/carpet/black/fifty
|
||||
amount = 50
|
||||
|
||||
/obj/item/stack/tile/carpet/blackred
|
||||
name = "red carpet"
|
||||
icon_state = "tile-carpet-blackred"
|
||||
turf_type = /turf/open/floor/carpet/blackred
|
||||
|
||||
/obj/item/stack/tile/carpet/blackred/fifty
|
||||
amount = 50
|
||||
|
||||
/obj/item/stack/tile/carpet/monochrome
|
||||
name = "monochrome carpet"
|
||||
icon_state = "tile-carpet-monochrome"
|
||||
turf_type = /turf/open/floor/carpet/monochrome
|
||||
|
||||
/obj/item/stack/tile/carpet/monochrome/fifty
|
||||
amount = 50
|
||||
|
||||
/obj/item/stack/tile/fakespace
|
||||
name = "astral carpet"
|
||||
singular_name = "astral carpet"
|
||||
|
||||
@@ -369,7 +369,8 @@
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/space_up,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/pwr_game,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/filled/syndicatebomb
|
||||
))
|
||||
new rig_snacks(src)
|
||||
|
||||
|
||||
@@ -178,3 +178,21 @@
|
||||
/obj/item/storage/lockbox/medal/sci/PopulateContents()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/clothing/accessory/medal/plasma/nobel_science(src)
|
||||
|
||||
/obj/item/storage/lockbox/medal/engineering
|
||||
name = "engineering medal box"
|
||||
desc = "A locked box used to store medals to be given to the members of the engineering department."
|
||||
req_access = list(ACCESS_CE)
|
||||
|
||||
/obj/item/storage/lockbox/medal/engineering/PopulateContents()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/clothing/accessory/medal/engineer(src)
|
||||
|
||||
/obj/item/storage/lockbox/medal/medical
|
||||
name = "medical medal box"
|
||||
desc = "A locked box used to store medals to be given to the members of the medical department."
|
||||
req_access = list(ACCESS_CMO)
|
||||
|
||||
/obj/item/storage/lockbox/medal/medical/PopulateContents()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/clothing/accessory/medal/ribbon/medical_doctor(src)
|
||||
@@ -88,8 +88,10 @@
|
||||
. = ..()
|
||||
if(proximity)
|
||||
if(isobj(A))
|
||||
var/obj/O = A
|
||||
O.take_damage(20)
|
||||
var/obj/machinery/door/O = A
|
||||
if(istype(O) && (O.damage_deflection >= 10)) //Eh fine. //This is a meme cast do not do what I did!
|
||||
return
|
||||
O.take_damage(13)
|
||||
|
||||
/obj/item/storage/toolbox/mechanical/old/heirloom/PopulateContents()
|
||||
return
|
||||
|
||||
@@ -1039,6 +1039,7 @@
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "snowball"
|
||||
throwforce = 12 //pelt your enemies to death with lumps of snow
|
||||
damtype = STAMINA
|
||||
|
||||
/obj/item/toy/snowball/afterattack(atom/target as mob|obj|turf|area, mob/user)
|
||||
. = ..()
|
||||
|
||||
@@ -803,6 +803,7 @@
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
force_unwielded = 11
|
||||
force_wielded = 20 //I have no idea how to balance
|
||||
reach = 2
|
||||
throwforce = 22
|
||||
throw_speed = 4
|
||||
embedding = list("embedded_impact_pain_multiplier" = 3)
|
||||
|
||||
@@ -192,6 +192,17 @@
|
||||
/obj/structure/chair/comfy/lime
|
||||
color = rgb(255,251,0)
|
||||
|
||||
/obj/structure/chair/comfy/plywood
|
||||
name = "plywood chair"
|
||||
desc = "A relaxing plywood chair."
|
||||
icon_state = "plywood_chair"
|
||||
anchored = FALSE
|
||||
buildstacktype = /obj/item/stack/sheet/mineral/wood
|
||||
buildstackamount = 4
|
||||
|
||||
/obj/structure/chair/comfy/plywood/GetArmrest()
|
||||
return mutable_appearance('icons/obj/chairs.dmi', "plywood_chair_armrest")
|
||||
|
||||
/obj/structure/chair/comfy/shuttle
|
||||
name = "shuttle seat"
|
||||
desc = "A comfortable, secure seat. It has a more sturdy looking buckling system, for smoother flights."
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
new /obj/item/circuitboard/machine/techfab/department/engineering(src)
|
||||
new /obj/item/extinguisher/advanced(src)
|
||||
new /obj/item/storage/photo_album/CE(src)
|
||||
new /obj/item/storage/lockbox/medal/engineering(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/engineering_electrical
|
||||
name = "electrical supplies locker"
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
new /obj/item/wallframe/defib_mount(src)
|
||||
new /obj/item/circuitboard/machine/techfab/department/medical(src)
|
||||
new /obj/item/storage/photo_album/CMO(src)
|
||||
new /obj/item/storage/lockbox/medal/medical(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/animal
|
||||
name = "animal control"
|
||||
|
||||
@@ -70,6 +70,13 @@
|
||||
desc = "A towering basalt sculpture of a drake. Cracks run down its surface and parts of it have fallen off."
|
||||
icon_state = "drake_statue_falling"
|
||||
|
||||
/obj/structure/fluff/lightpost
|
||||
name = "lightpost"
|
||||
desc = "A homely lightpost adorned with festive decor."
|
||||
icon = 'icons/obj/2x2.dmi'
|
||||
icon_state = "lightpost"
|
||||
deconstructible = FALSE
|
||||
layer = EDGED_TURF_LAYER
|
||||
|
||||
/obj/structure/fluff/bus
|
||||
name = "bus"
|
||||
@@ -167,3 +174,11 @@
|
||||
desc = "A crudely-made sign with the words 'fok of' written in some sort of red paint."
|
||||
icon = 'icons/obj/fluff.dmi'
|
||||
icon_state = "fokof"
|
||||
|
||||
/obj/structure/fluff/snowlegion
|
||||
name = "snowlegion"
|
||||
desc = "Looks like that weird kid with the tiger plushie has been round here again."
|
||||
icon = 'icons/obj/fluff.dmi'
|
||||
icon_state = "snowlegion"
|
||||
anchored = TRUE
|
||||
deconstructible = FALSE
|
||||
|
||||
@@ -223,6 +223,16 @@
|
||||
max_integrity = 200
|
||||
rad_insulation = RAD_VERY_LIGHT_INSULATION
|
||||
|
||||
/obj/structure/mineral_door/woodrustic
|
||||
name = "rustic wood door"
|
||||
icon_state = "woodrustic"
|
||||
openSound = 'sound/effects/doorcreaky.ogg'
|
||||
closeSound = 'sound/effects/doorcreaky.ogg'
|
||||
sheetType = /obj/item/stack/sheet/mineral/wood
|
||||
sheetAmount = 10
|
||||
max_integrity = 200
|
||||
rad_insulation = RAD_VERY_LIGHT_INSULATION
|
||||
|
||||
/obj/structure/mineral_door/paperframe
|
||||
name = "paper frame door"
|
||||
icon_state = "paperframe"
|
||||
|
||||
@@ -45,3 +45,12 @@
|
||||
name = "command department"
|
||||
desc = "A direction sign, pointing out which way the Command department is."
|
||||
icon_state = "direction_bridge"
|
||||
|
||||
/obj/structure/sign/directions/bar
|
||||
name = "bar"
|
||||
desc = "A direction sign, pointing out which way the Bar is."
|
||||
icon_state = "direction_bar"
|
||||
/obj/structure/sign/directions/cafe
|
||||
name = "cafe"
|
||||
desc = "A direction sign, pointing out which way the Cafe is."
|
||||
icon_state = "direction_cafe"
|
||||
|
||||
@@ -68,6 +68,22 @@
|
||||
to_chat(user, "<span class='notice'>You start adding [C] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && C.use(1))
|
||||
make_new_table(/obj/structure/table/wood/fancy/black)
|
||||
else if(istype(I, /obj/item/stack/tile/carpet/blackred))
|
||||
var/obj/item/stack/tile/carpet/blackred/C = I
|
||||
if(C.get_amount() < 1)
|
||||
to_chat(user, "<span class='warning'>You need one red carpet sheet to do this!</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You start adding [C] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && C.use(1))
|
||||
make_new_table(/obj/structure/table/wood/fancy/blackred)
|
||||
else if(istype(I, /obj/item/stack/tile/carpet/monochrome))
|
||||
var/obj/item/stack/tile/carpet/monochrome/C = I
|
||||
if(C.get_amount() < 1)
|
||||
to_chat(user, "<span class='warning'>You need one monochrome carpet sheet to do this!</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You start adding [C] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && C.use(1))
|
||||
make_new_table(/obj/structure/table/wood/fancy/monochrome)
|
||||
else if(istype(I, /obj/item/stack/tile/carpet))
|
||||
var/obj/item/stack/tile/carpet/C = I
|
||||
if(C.get_amount() < 1)
|
||||
|
||||
@@ -298,7 +298,7 @@
|
||||
frame = /obj/structure/table_frame
|
||||
framestack = /obj/item/stack/rods
|
||||
buildstack = /obj/item/stack/tile/carpet
|
||||
canSmoothWith = list(/obj/structure/table/wood/fancy, /obj/structure/table/wood/fancy/black)
|
||||
canSmoothWith = list(/obj/structure/table/wood/fancy, /obj/structure/table/wood/fancy/black, /obj/structure/table/wood/fancy/blackred, /obj/structure/table/wood/fancy/monochrome)
|
||||
|
||||
/obj/structure/table/wood/fancy/New()
|
||||
// New() is used so that the /black subtype can override `icon` easily and
|
||||
@@ -314,11 +314,28 @@
|
||||
icon_state = "fancy_table_black"
|
||||
buildstack = /obj/item/stack/tile/carpet/black
|
||||
|
||||
/obj/structure/table/wood/fancy/blackred
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon_state = "fancy_table_blackred"
|
||||
buildstack = /obj/item/stack/tile/carpet/blackred
|
||||
|
||||
/obj/structure/table/wood/fancy/blackred/New()
|
||||
. = ..()
|
||||
icon = 'icons/obj/smooth_structures/fancy_table_blackred.dmi'
|
||||
|
||||
/obj/structure/table/wood/fancy/monochrome
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon_state = "fancy_table_monochrome"
|
||||
buildstack = /obj/item/stack/tile/carpet/monochrome
|
||||
|
||||
/obj/structure/table/wood/fancy/monochrome/New()
|
||||
. = ..()
|
||||
icon = 'icons/obj/smooth_structures/fancy_table_monochrome.dmi'
|
||||
|
||||
/obj/structure/table/wood/fancy/black/New()
|
||||
. = ..()
|
||||
// Ditto above.
|
||||
icon = 'icons/obj/smooth_structures/fancy_table_black.dmi'
|
||||
|
||||
/*
|
||||
* Reinforced tables
|
||||
*/
|
||||
|
||||
@@ -200,5 +200,9 @@
|
||||
'sound/vore/prey/death_04.ogg','sound/vore/prey/death_05.ogg','sound/vore/prey/death_06.ogg',
|
||||
'sound/vore/prey/death_07.ogg','sound/vore/prey/death_08.ogg','sound/vore/prey/death_09.ogg',
|
||||
'sound/vore/prey/death_10.ogg')
|
||||
if("clang")
|
||||
soundin = pick('sound/effects/clang1.ogg', 'sound/effects/clang2.ogg')
|
||||
if("clangsmall")
|
||||
soundin = pick('sound/effects/clangsmall1.ogg', 'sound/effects/clangsmall2.ogg')
|
||||
//END OF CIT CHANGES
|
||||
return soundin
|
||||
|
||||
@@ -49,6 +49,14 @@
|
||||
baseturfs = /turf/closed/indestructible/sandstone
|
||||
smooth = SMOOTH_TRUE
|
||||
|
||||
/turf/closed/indestructible/wood
|
||||
name = "wooden wall"
|
||||
desc = "A wall with wooden plating. Stiff."
|
||||
icon = 'icons/turf/walls/wood_wall.dmi'
|
||||
icon_state = "wood"
|
||||
baseturfs = /turf/closed/indestructible/wood
|
||||
smooth = SMOOTH_TRUE
|
||||
|
||||
/turf/closed/indestructible/oldshuttle/corner
|
||||
icon_state = "corner"
|
||||
|
||||
@@ -76,6 +84,7 @@
|
||||
icon = 'icons/turf/walls/riveted.dmi'
|
||||
icon_state = "riveted"
|
||||
smooth = SMOOTH_TRUE
|
||||
explosion_block = INFINITY
|
||||
|
||||
/turf/closed/indestructible/riveted/uranium
|
||||
icon = 'icons/turf/walls/uranium_wall.dmi'
|
||||
|
||||
+15
-1
@@ -19,7 +19,7 @@
|
||||
var/mob/living/L = user
|
||||
if(L.resting && do_after(L, max(10, L.getStaminaLoss()*0.5), 0, src))
|
||||
if(Adjacent(L, src))
|
||||
L.forceMove(src)
|
||||
step(L, get_dir(L, src))
|
||||
playsound(L, "rustle", 25, 1)
|
||||
|
||||
/turf/open/indestructible
|
||||
@@ -49,6 +49,20 @@
|
||||
if(istype(AM))
|
||||
playsound(src,sound,50,1)
|
||||
|
||||
/turf/open/indestructible/cobble/side
|
||||
icon_state = "cobble_side"
|
||||
|
||||
/turf/open/indestructible/cobble/corner
|
||||
icon_state = "cobble_corner"
|
||||
|
||||
/turf/open/indestructible/cobble
|
||||
name = "cobblestone path"
|
||||
desc = "A simple but beautiful path made of various sized stones."
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "cobble"
|
||||
baseturfs = /turf/open/indestructible/cobble
|
||||
tiled_dirt = FALSE
|
||||
|
||||
/turf/open/indestructible/necropolis
|
||||
name = "necropolis floor"
|
||||
desc = "It's regarding you suspiciously."
|
||||
|
||||
@@ -180,8 +180,19 @@
|
||||
/turf/open/floor/carpet/black
|
||||
icon = 'icons/turf/floors/carpet_black.dmi'
|
||||
floor_tile = /obj/item/stack/tile/carpet/black
|
||||
canSmoothWith = list(/turf/open/floor/carpet/black)
|
||||
canSmoothWith = list(/turf/open/floor/carpet/black, /turf/open/floor/carpet/blackred, /turf/open/floor/carpet/monochrome)
|
||||
|
||||
/turf/open/floor/carpet/blackred
|
||||
icon = 'icons/turf/floors/carpet_blackred.dmi'
|
||||
floor_tile = /obj/item/stack/tile/carpet/blackred
|
||||
icon_state = "tile-carpet-blackred"
|
||||
canSmoothWith = list(/turf/open/floor/carpet/black, /turf/open/floor/carpet/blackred, /turf/open/floor/carpet/monochrome)
|
||||
|
||||
/turf/open/floor/carpet/monochrome
|
||||
icon = 'icons/turf/floors/carpet_monochrome.dmi'
|
||||
floor_tile = /obj/item/stack/tile/carpet/monochrome
|
||||
icon_state = "tile-carpet-monochrome"
|
||||
canSmoothWith = list(/turf/open/floor/carpet/black, /turf/open/floor/carpet/blackred, /turf/open/floor/carpet/monochrome)
|
||||
|
||||
/turf/open/floor/carpet/narsie_act(force, ignore_mobs, probability = 20)
|
||||
. = (prob(probability) || force)
|
||||
|
||||
@@ -4,11 +4,14 @@
|
||||
#define RANDOM_LOWER_X 50
|
||||
#define RANDOM_LOWER_Y 50
|
||||
|
||||
#define RIVERGEN_SAFETY_LOCK 1000000
|
||||
|
||||
/proc/spawn_rivers(target_z, nodes = 4, turf_type = /turf/open/lava/smooth/lava_land_surface, whitelist_area = /area/lavaland/surface/outdoors/unexplored, min_x = RANDOM_LOWER_X, min_y = RANDOM_LOWER_Y, max_x = RANDOM_UPPER_X, max_y = RANDOM_UPPER_Y)
|
||||
var/list/river_nodes = list()
|
||||
var/num_spawned = 0
|
||||
var/list/possible_locs = block(locate(min_x, min_y, target_z), locate(max_x, max_y, target_z))
|
||||
while(num_spawned < nodes && possible_locs.len)
|
||||
var/safety = 0
|
||||
while(num_spawned < nodes && possible_locs.len && (safety++ < RIVERGEN_SAFETY_LOCK))
|
||||
var/turf/T = pick(possible_locs)
|
||||
var/area/A = get_area(T)
|
||||
if(!istype(A, whitelist_area) || (T.flags_1 & NO_LAVA_GEN_1))
|
||||
@@ -16,7 +19,8 @@
|
||||
else
|
||||
river_nodes += new /obj/effect/landmark/river_waypoint(T)
|
||||
num_spawned++
|
||||
|
||||
|
||||
safety = 0
|
||||
//make some randomly pathing rivers
|
||||
for(var/A in river_nodes)
|
||||
var/obj/effect/landmark/river_waypoint/W = A
|
||||
@@ -30,7 +34,7 @@
|
||||
break
|
||||
var/detouring = 0
|
||||
var/cur_dir = get_dir(cur_turf, target_turf)
|
||||
while(cur_turf != target_turf)
|
||||
while(cur_turf != target_turf && (safety++ < RIVERGEN_SAFETY_LOCK))
|
||||
|
||||
if(detouring) //randomly snake around a bit
|
||||
if(prob(20))
|
||||
|
||||
+1
-1
@@ -263,7 +263,7 @@ GLOBAL_VAR(restart_counter)
|
||||
s += "Citadel" //Replace this with something else. Or ever better, delete it and uncomment the game version. CIT CHANGE - modifies the hub entry link
|
||||
s += "</a>"
|
||||
s += ")\]" //CIT CHANGE - encloses the server title in brackets to make the hub entry fancier
|
||||
s += "<br><small><i>That furry /TG/code server your mother warned you about.</i></small><br>" //CIT CHANGE - adds a tagline!
|
||||
s += "<br>[CONFIG_GET(string/servertagline)]<br>" //CIT CHANGE - adds a tagline!
|
||||
|
||||
var/n = 0
|
||||
for (var/mob/M in GLOB.player_list)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,36 +7,34 @@
|
||||
//
|
||||
// query : select_query | delete_query | update_query | call_query | explain
|
||||
// explain : 'EXPLAIN' query
|
||||
// select_query : 'SELECT' object_selectors
|
||||
// delete_query : 'DELETE' object_selectors
|
||||
// update_query : 'UPDATE' object_selectors 'SET' assignments
|
||||
// call_query : 'CALL' variable 'ON' object_selectors // Note here: 'variable' does function calls. This simplifies parsing.
|
||||
//
|
||||
// select_query : 'SELECT' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]
|
||||
// delete_query : 'DELETE' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]
|
||||
// update_query : 'UPDATE' select_list [('FROM' | 'IN') from_list] 'SET' assignments ['WHERE' bool_expression]
|
||||
// call_query : 'CALL' call_function ['ON' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]]
|
||||
// select_item : '*' | object_type
|
||||
//
|
||||
// select_list : select_item [',' select_list]
|
||||
// select_item : '*' | select_function | object_type
|
||||
// select_function : count_function
|
||||
// count_function : 'COUNT' '(' '*' ')' | 'COUNT' '(' object_types ')'
|
||||
// object_selectors : select_item [('FROM' | 'IN') from_item] [modifier_list]
|
||||
// modifier_list : ('WHERE' bool_expression | 'MAP' expression) [modifier_list]
|
||||
//
|
||||
// from_list : from_item [',' from_list]
|
||||
// from_item : 'world' | object_type
|
||||
// from_item : 'world' | expression
|
||||
//
|
||||
// call_function : <function name> ['(' [arguments] ')']
|
||||
// call_function : <function name> '(' [arguments] ')'
|
||||
// arguments : expression [',' arguments]
|
||||
//
|
||||
// object_type : <type path> | string
|
||||
// object_type : <type path>
|
||||
//
|
||||
// assignments : assignment, [',' assignments]
|
||||
// assignments : assignment [',' assignments]
|
||||
// assignment : <variable name> '=' expression
|
||||
// variable : <variable name> | <variable name> '.' variable
|
||||
// variable : <variable name> | <variable name> '.' variable | '[' <hex number> ']' | '[' <hex number> ']' '.' variable
|
||||
//
|
||||
// bool_expression : expression comparitor expression [bool_operator bool_expression]
|
||||
// expression : ( unary_expression | '(' expression ')' | value ) [binary_operator expression]
|
||||
// unary_expression : unary_operator ( unary_expression | value | '(' expression ')' )
|
||||
// comparitor : '=' | '==' | '!=' | '<>' | '<' | '<=' | '>' | '>='
|
||||
// value : variable | string | number | 'null'
|
||||
// value : variable | string | number | 'null' | object_type
|
||||
// unary_operator : '!' | '-' | '~'
|
||||
// binary_operator : comparitor | '+' | '-' | '/' | '*' | '&' | '|' | '^'
|
||||
// binary_operator : comparitor | '+' | '-' | '/' | '*' | '&' | '|' | '^' | '%'
|
||||
// bool_operator : 'AND' | '&&' | 'OR' | '||'
|
||||
//
|
||||
// string : ''' <some text> ''' | '"' <some text > '"'
|
||||
@@ -51,10 +49,9 @@
|
||||
var/list/query
|
||||
var/list/tree
|
||||
|
||||
var/list/select_functions = list("count")
|
||||
var/list/boolean_operators = list("and", "or", "&&", "||")
|
||||
var/list/unary_operators = list("!", "-", "~")
|
||||
var/list/binary_operators = list("+", "-", "/", "*", "&", "|", "^")
|
||||
var/list/binary_operators = list("+", "-", "/", "*", "&", "|", "^", "%")
|
||||
var/list/comparitors = list("=", "==", "!=", "<>", "<", "<=", ">", ">=")
|
||||
|
||||
/datum/SDQL_parser/New(query_list)
|
||||
@@ -62,12 +59,12 @@
|
||||
|
||||
/datum/SDQL_parser/proc/parse_error(error_message)
|
||||
error = 1
|
||||
to_chat(usr, "<span class='danger'>SQDL2 Parsing Error: [error_message]</span>")
|
||||
to_chat(usr, "<span class='warning'>SQDL2 Parsing Error: [error_message]</span>")
|
||||
return query.len + 1
|
||||
|
||||
/datum/SDQL_parser/proc/parse()
|
||||
tree = list()
|
||||
query(1, tree)
|
||||
query_options(1, tree)
|
||||
|
||||
if(error)
|
||||
return list()
|
||||
@@ -91,354 +88,547 @@
|
||||
/datum/SDQL_parser/proc/tokenl(i)
|
||||
return lowertext(token(i))
|
||||
|
||||
/datum/SDQL_parser/proc/query_options(i, list/node)
|
||||
var/list/options = list()
|
||||
if(tokenl(i) == "using")
|
||||
i = option_assignments(i + 1, node, options)
|
||||
query(i, node)
|
||||
if(length(options))
|
||||
node["options"] = options
|
||||
|
||||
//option_assignment: query_option '=' define
|
||||
/datum/SDQL_parser/proc/option_assignment(i, list/node, list/assignment_list = list())
|
||||
var/type = tokenl(i)
|
||||
if(!(type in SDQL2_VALID_OPTION_TYPES))
|
||||
parse_error("Invalid option type: [type]")
|
||||
if(!(token(i + 1) == "="))
|
||||
parse_error("Invalid option assignment symbol: [token(i + 1)]")
|
||||
var/val = tokenl(i + 2)
|
||||
if(!(val in SDQL2_VALID_OPTION_VALUES))
|
||||
parse_error("Invalid optoin value: [val]")
|
||||
assignment_list[type] = val
|
||||
return (i + 3)
|
||||
|
||||
//option_assignments: option_assignment, [',' option_assignments]
|
||||
/datum/SDQL_parser/proc/option_assignments(i, list/node, list/store)
|
||||
i = option_assignment(i, node, store)
|
||||
|
||||
if(token(i) == ",")
|
||||
i = option_assignments(i + 1, node, store)
|
||||
|
||||
return i
|
||||
|
||||
//query: select_query | delete_query | update_query
|
||||
/datum/SDQL_parser/proc/query(i, list/node)
|
||||
query_type = tokenl(i)
|
||||
|
||||
switch(query_type)
|
||||
if("select")
|
||||
select_query(i, node)
|
||||
|
||||
if("delete")
|
||||
delete_query(i, node)
|
||||
|
||||
if("update")
|
||||
update_query(i, node)
|
||||
|
||||
if("call")
|
||||
call_query(i, node)
|
||||
|
||||
if("explain")
|
||||
node += "explain"
|
||||
node["explain"] = list()
|
||||
query(i + 1, node["explain"])
|
||||
|
||||
|
||||
// select_query: 'SELECT' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]
|
||||
// select_query: 'SELECT' object_selectors
|
||||
/datum/SDQL_parser/proc/select_query(i, list/node)
|
||||
var/list/select = list()
|
||||
i = select_list(i + 1, select)
|
||||
node += "select"
|
||||
i = object_selectors(i + 1, select)
|
||||
|
||||
node["select"] = select
|
||||
selectors(i, node)
|
||||
return i
|
||||
|
||||
//delete_query: 'DELETE' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]
|
||||
|
||||
//delete_query: 'DELETE' object_selectors
|
||||
/datum/SDQL_parser/proc/delete_query(i, list/node)
|
||||
var/list/select = list()
|
||||
i = select_list(i + 1, select)
|
||||
node += "delete"
|
||||
i = object_selectors(i + 1, select)
|
||||
|
||||
node["delete"] = select
|
||||
selectors(i, node)
|
||||
|
||||
return i
|
||||
|
||||
//update_query: 'UPDATE' select_list [('FROM' | 'IN') from_list] 'SET' assignments ['WHERE' bool_expression]
|
||||
|
||||
//update_query: 'UPDATE' object_selectors 'SET' assignments
|
||||
/datum/SDQL_parser/proc/update_query(i, list/node)
|
||||
var/list/select = list()
|
||||
i = select_list(i + 1, select)
|
||||
node += "update"
|
||||
i = object_selectors(i + 1, select)
|
||||
|
||||
node["update"] = select
|
||||
|
||||
if(tokenl(i) != "set")
|
||||
i = parse_error("UPDATE has misplaced SET")
|
||||
|
||||
var/list/set_assignments = list()
|
||||
i = assignments(i + 1, set_assignments)
|
||||
node += "set"
|
||||
|
||||
node["set"] = set_assignments
|
||||
selectors(i, node)
|
||||
|
||||
return i
|
||||
|
||||
//call_query: 'CALL' call_function ['ON' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]]
|
||||
|
||||
//call_query: 'CALL' call_function ['ON' object_selectors]
|
||||
/datum/SDQL_parser/proc/call_query(i, list/node)
|
||||
var/list/func = list()
|
||||
i = variable(i + 1, func) // Yes technically does anything variable() matches but I don't care, if admins fuck up this badly then they shouldn't be allowed near SDQL.
|
||||
node += "call"
|
||||
|
||||
node["call"] = func
|
||||
|
||||
if(tokenl(i) != "on")
|
||||
return i
|
||||
return parse_error("You need to specify what to call ON.")
|
||||
|
||||
var/list/select = list()
|
||||
i = select_list(i + 1, select)
|
||||
node += "on"
|
||||
i = object_selectors(i + 1, select)
|
||||
|
||||
node["on"] = select
|
||||
selectors(i, node)
|
||||
|
||||
return i
|
||||
|
||||
//select_list: select_item [',' select_list]
|
||||
// object_selectors: select_item [('FROM' | 'IN') from_item] [modifier_list]
|
||||
/datum/SDQL_parser/proc/object_selectors(i, list/node)
|
||||
i = select_item(i, node)
|
||||
|
||||
if (tokenl(i) == "from" || tokenl(i) == "in")
|
||||
i++
|
||||
var/list/from = list()
|
||||
i = from_item(i, from)
|
||||
node[++node.len] = from
|
||||
|
||||
else
|
||||
node[++node.len] = list("world")
|
||||
|
||||
i = modifier_list(i, node)
|
||||
return i
|
||||
|
||||
// modifier_list: ('WHERE' bool_expression | 'MAP' expression) [modifier_list]
|
||||
/datum/SDQL_parser/proc/modifier_list(i, list/node)
|
||||
while (TRUE)
|
||||
if (tokenl(i) == "where")
|
||||
i++
|
||||
node += "where"
|
||||
var/list/expr = list()
|
||||
i = bool_expression(i, expr)
|
||||
node[++node.len] = expr
|
||||
|
||||
else if (tokenl(i) == "map")
|
||||
i++
|
||||
node += "map"
|
||||
var/list/expr = list()
|
||||
i = expression(i, expr)
|
||||
node[++node.len] = expr
|
||||
|
||||
else
|
||||
return i
|
||||
|
||||
//select_list:select_item [',' select_list]
|
||||
/datum/SDQL_parser/proc/select_list(i, list/node)
|
||||
i = select_item(i, node)
|
||||
|
||||
if(token(i) == ",")
|
||||
i = select_list(i + 1, node)
|
||||
|
||||
return i
|
||||
|
||||
//assignments: assignment, [',' assignments]
|
||||
/datum/SDQL_parser/proc/assignments(i, list/node)
|
||||
i = assignment(i, node)
|
||||
|
||||
if(token(i) == ",")
|
||||
i = assignments(i + 1, node)
|
||||
|
||||
return i
|
||||
|
||||
|
||||
//select_item: '*' | select_function | object_type
|
||||
/datum/SDQL_parser/proc/select_item(i, list/node)
|
||||
if(token(i) == "*")
|
||||
if (token(i) == "*")
|
||||
node += "*"
|
||||
i++
|
||||
else if(tokenl(i) in select_functions)
|
||||
i = select_function(i, node)
|
||||
else
|
||||
|
||||
else if (copytext(token(i), 1, 2) == "/")
|
||||
i = object_type(i, node)
|
||||
|
||||
else
|
||||
i = parse_error("Expected '*' or type path for select item")
|
||||
|
||||
return i
|
||||
|
||||
// Standardized method for handling the IN/FROM and WHERE options.
|
||||
/datum/SDQL_parser/proc/selectors(i, list/node)
|
||||
while (token(i))
|
||||
var/tok = tokenl(i)
|
||||
if(tok in list("from", "in"))
|
||||
if (tok in list("from", "in"))
|
||||
var/list/from = list()
|
||||
i = from_item(i + 1, from)
|
||||
|
||||
node["from"] = from
|
||||
continue
|
||||
if(tok == "where")
|
||||
|
||||
if (tok == "where")
|
||||
var/list/where = list()
|
||||
i = bool_expression(i + 1, where)
|
||||
|
||||
node["where"] = where
|
||||
continue
|
||||
|
||||
parse_error("Expected either FROM, IN or WHERE token, found [token(i)] instead.")
|
||||
return i + 1
|
||||
if(!node.Find("from"))
|
||||
|
||||
if (!node.Find("from"))
|
||||
node["from"] = list("world")
|
||||
|
||||
return i
|
||||
|
||||
//from_item: 'world' | object_type
|
||||
//from_item: 'world' | expression
|
||||
/datum/SDQL_parser/proc/from_item(i, list/node)
|
||||
if(token(i) == "world")
|
||||
node += "world"
|
||||
i++
|
||||
|
||||
else
|
||||
i = expression(i, node)
|
||||
|
||||
return i
|
||||
|
||||
|
||||
//bool_expression: expression [bool_operator bool_expression]
|
||||
/datum/SDQL_parser/proc/bool_expression(i, list/node)
|
||||
|
||||
var/list/bool = list()
|
||||
i = expression(i, bool)
|
||||
|
||||
node[++node.len] = bool
|
||||
|
||||
if(tokenl(i) in boolean_operators)
|
||||
i = bool_operator(i, node)
|
||||
i = bool_expression(i, node)
|
||||
|
||||
return i
|
||||
|
||||
|
||||
//assignment: <variable name> '=' expression
|
||||
/datum/SDQL_parser/proc/assignment(var/i, var/list/node, var/list/assignment_list = list())
|
||||
assignment_list += token(i)
|
||||
|
||||
if(token(i + 1) == ".")
|
||||
i = assignment(i + 2, node, assignment_list)
|
||||
|
||||
else if(token(i + 1) == "=")
|
||||
var/exp_list = list()
|
||||
node[assignment_list] = exp_list
|
||||
|
||||
i = expression(i + 2, exp_list)
|
||||
|
||||
else
|
||||
parse_error("Assignment expected, but no = found")
|
||||
|
||||
return i
|
||||
|
||||
//variable: <variable name> | <variable name> '.' variable
|
||||
|
||||
//variable: <variable name> | <variable name> '.' variable | '[' <hex number> ']' | '[' <hex number> ']' '.' variable
|
||||
/datum/SDQL_parser/proc/variable(i, list/node)
|
||||
var/list/L = list(token(i))
|
||||
node[++node.len] = L
|
||||
|
||||
if(token(i) == "{")
|
||||
L += token(i+1)
|
||||
L += token(i + 1)
|
||||
i += 2
|
||||
|
||||
if(token(i) != "}")
|
||||
parse_error("Missing } at end of pointer.")
|
||||
|
||||
if(token(i + 1) == ".")
|
||||
L += "."
|
||||
i = variable(i + 2, L)
|
||||
else if(token(i + 1) == "(") // OH BOY PROC
|
||||
|
||||
else if (token(i + 1) == "(") // OH BOY PROC
|
||||
var/list/arguments = list()
|
||||
i = call_function(i, null, arguments)
|
||||
L += ":"
|
||||
L[++L.len] = arguments
|
||||
else if(token(i + 1) == "\[")
|
||||
|
||||
else if (token(i + 1) == "\[")
|
||||
var/list/expression = list()
|
||||
i = expression(i + 2, expression)
|
||||
if (token(i) != "]")
|
||||
parse_error("Missing ] at the end of list access.")
|
||||
|
||||
L += "\["
|
||||
L[++L.len] = expression
|
||||
i++
|
||||
|
||||
else
|
||||
i++
|
||||
|
||||
return i
|
||||
|
||||
|
||||
//object_type: <type path>
|
||||
/datum/SDQL_parser/proc/object_type(i, list/node)
|
||||
|
||||
if (copytext(token(i), 1, 2) != "/")
|
||||
return parse_error("Expected type, but it didn't begin with /")
|
||||
|
||||
var/path = text2path(token(i))
|
||||
if (path == null)
|
||||
return parse_error("Nonexistant type path: [token(i)]")
|
||||
|
||||
node += path
|
||||
|
||||
return i + 1
|
||||
|
||||
|
||||
//comparitor: '=' | '==' | '!=' | '<>' | '<' | '<=' | '>' | '>='
|
||||
/datum/SDQL_parser/proc/comparitor(i, list/node)
|
||||
|
||||
if(token(i) in list("=", "==", "!=", "<>", "<", "<=", ">", ">="))
|
||||
node += token(i)
|
||||
|
||||
else
|
||||
parse_error("Unknown comparitor [token(i)]")
|
||||
|
||||
return i + 1
|
||||
|
||||
|
||||
//bool_operator: 'AND' | '&&' | 'OR' | '||'
|
||||
/datum/SDQL_parser/proc/bool_operator(i, list/node)
|
||||
|
||||
if(tokenl(i) in list("and", "or", "&&", "||"))
|
||||
node += token(i)
|
||||
|
||||
else
|
||||
parse_error("Unknown comparitor [token(i)]")
|
||||
|
||||
return i + 1
|
||||
|
||||
|
||||
//string: ''' <some text> ''' | '"' <some text > '"'
|
||||
/datum/SDQL_parser/proc/string(i, list/node)
|
||||
|
||||
if(copytext(token(i), 1, 2) in list("'", "\""))
|
||||
node += token(i)
|
||||
|
||||
else
|
||||
parse_error("Expected string but found '[token(i)]'")
|
||||
|
||||
return i + 1
|
||||
|
||||
//array: '[' expression, expression, ... ']'
|
||||
/datum/SDQL_parser/proc/array(i, list/node)
|
||||
/datum/SDQL_parser/proc/array(var/i, var/list/node)
|
||||
// Arrays get turned into this: list("[", list(exp_1a = exp_1b, ...), ...), "[" is to mark the next node as an array.
|
||||
if(copytext(token(i), 1, 2) != "\[")
|
||||
parse_error("Expected an array but found '[token(i)]'")
|
||||
return i + 1
|
||||
node += token(i)
|
||||
|
||||
node += token(i) // Add the "["
|
||||
|
||||
var/list/expression_list = list()
|
||||
|
||||
i++
|
||||
if(token(i) != "]")
|
||||
var/list/temp_expression_list = list()
|
||||
var/tok
|
||||
do
|
||||
tok = token(i)
|
||||
if(tok == "," || tok == ":")
|
||||
if(temp_expression_list == null)
|
||||
if (tok == "," || tok == ":")
|
||||
if (temp_expression_list == null)
|
||||
parse_error("Found ',' or ':' without expression in an array.")
|
||||
return i + 1
|
||||
|
||||
expression_list[++expression_list.len] = temp_expression_list
|
||||
temp_expression_list = null
|
||||
if(tok == ":")
|
||||
if (tok == ":")
|
||||
temp_expression_list = list()
|
||||
i = expression(i + 1, temp_expression_list)
|
||||
expression_list[expression_list[expression_list.len]] = temp_expression_list
|
||||
temp_expression_list = null
|
||||
tok = token(i)
|
||||
if(tok != ",")
|
||||
if(tok == "]")
|
||||
if (tok != ",")
|
||||
if (tok == "]")
|
||||
break
|
||||
|
||||
parse_error("Expected ',' or ']' after array assoc value, but found '[token(i)]'")
|
||||
return i
|
||||
|
||||
|
||||
i++
|
||||
continue
|
||||
|
||||
temp_expression_list = list()
|
||||
i = expression(i, temp_expression_list)
|
||||
|
||||
// Ok, what the fuck BYOND?
|
||||
// Not having these lines here causes the parser to die
|
||||
// on an error saying that list/token() doesn't exist as a proc.
|
||||
// These lines prevent that.
|
||||
// I assume the compiler/VM is shitting itself and swapping out some variables internally?
|
||||
// While throwing in debug logging it disappeared
|
||||
// And these 3 lines prevent it from happening while being quiet.
|
||||
// So.. it works.
|
||||
// Don't touch it.
|
||||
var/whatthefuck = i
|
||||
whatthefuck = src.type
|
||||
whatthefuck = whatthefuck
|
||||
|
||||
while(token(i) && token(i) != "]")
|
||||
if(temp_expression_list)
|
||||
|
||||
if (temp_expression_list)
|
||||
expression_list[++expression_list.len] = temp_expression_list
|
||||
|
||||
node[++node.len] = expression_list
|
||||
return i + 1
|
||||
|
||||
//object_type: <type path> | string
|
||||
/datum/SDQL_parser/proc/object_type(i, list/node)
|
||||
if(copytext(token(i), 1, 2) == "/")
|
||||
node += token(i)
|
||||
else
|
||||
i = string(i, node)
|
||||
return i + 1
|
||||
|
||||
//comparitor: '=' | '==' | '!=' | '<>' | '<' | '<=' | '>' | '>='
|
||||
/datum/SDQL_parser/proc/comparitor(i, list/node)
|
||||
if(token(i) in list("=", "==", "!=", "<>", "<", "<=", ">", ">="))
|
||||
node += token(i)
|
||||
else
|
||||
parse_error("Unknown comparitor [token(i)]")
|
||||
return i + 1
|
||||
|
||||
//bool_operator: 'AND' | '&&' | 'OR' | '||'
|
||||
/datum/SDQL_parser/proc/bool_operator(i, list/node)
|
||||
if(tokenl(i) in list("and", "or", "&&", "||"))
|
||||
node += token(i)
|
||||
else
|
||||
parse_error("Unknown comparitor [token(i)]")
|
||||
return i + 1
|
||||
|
||||
//string: ''' <some text> ''' | '"' <some text > '"'
|
||||
/datum/SDQL_parser/proc/string(i, list/node)
|
||||
if(copytext(token(i), 1, 2) in list("'", "\""))
|
||||
node += token(i)
|
||||
else
|
||||
parse_error("Expected string but found '[token(i)]'")
|
||||
return i + 1
|
||||
|
||||
//call_function: <function name> ['(' [arguments] ')']
|
||||
/datum/SDQL_parser/proc/call_function(i, list/node, list/arguments)
|
||||
if(length(tokenl(i)))
|
||||
var/procname = ""
|
||||
if(token(i) == "global" && token(i+1) == ".")
|
||||
if(tokenl(i) == "global" && token(i + 1) == ".") // Global proc.
|
||||
i += 2
|
||||
procname = "global."
|
||||
node += procname + token(i++)
|
||||
if(token(i) != "(")
|
||||
parse_error("Expected ( but found '[token(i)]'")
|
||||
|
||||
else if(token(i + 1) != ")")
|
||||
var/list/expression_list_temp = list()
|
||||
var/list/temp_expression_list = list()
|
||||
do
|
||||
i = expression(i + 1, expression_list_temp)
|
||||
i = expression(i + 1, temp_expression_list)
|
||||
if(token(i) == ",")
|
||||
arguments[++arguments.len] = expression_list_temp
|
||||
expression_list_temp = list()
|
||||
arguments[++arguments.len] = temp_expression_list
|
||||
temp_expression_list = list()
|
||||
continue
|
||||
|
||||
while(token(i) && token(i) != ")")
|
||||
arguments[++arguments.len] = expression_list_temp
|
||||
|
||||
arguments[++arguments.len] = temp_expression_list // The code this is copy pasted from won't be executed when it's the last param, this fixes that.
|
||||
else
|
||||
i++
|
||||
else
|
||||
parse_error("Expected a function but found nothing")
|
||||
return i + 1
|
||||
|
||||
//select_function: count_function
|
||||
/datum/SDQL_parser/proc/select_function(i, list/node)
|
||||
parse_error("Sorry, function calls aren't available yet")
|
||||
return i
|
||||
|
||||
//expression: ( unary_expression | '(' expression ')' | value ) [binary_operator expression]
|
||||
/datum/SDQL_parser/proc/expression(i, list/node)
|
||||
|
||||
if(token(i) in unary_operators)
|
||||
i = unary_expression(i, node)
|
||||
|
||||
else if(token(i) == "(")
|
||||
var/list/expr = list()
|
||||
|
||||
i = expression(i + 1, expr)
|
||||
|
||||
if(token(i) != ")")
|
||||
parse_error("Missing ) at end of expression.")
|
||||
|
||||
else
|
||||
i++
|
||||
|
||||
node[++node.len] = expr
|
||||
|
||||
else
|
||||
i = value(i, node)
|
||||
|
||||
if(token(i) in binary_operators)
|
||||
i = binary_operator(i, node)
|
||||
i = expression(i, node)
|
||||
|
||||
else if(token(i) in comparitors)
|
||||
i = binary_operator(i, node)
|
||||
|
||||
var/list/rhs = list()
|
||||
i = expression(i, rhs)
|
||||
|
||||
node[++node.len] = rhs
|
||||
|
||||
|
||||
return i
|
||||
|
||||
|
||||
//unary_expression: unary_operator ( unary_expression | value | '(' expression ')' )
|
||||
/datum/SDQL_parser/proc/unary_expression(i, list/node)
|
||||
|
||||
if(token(i) in unary_operators)
|
||||
var/list/unary_exp = list()
|
||||
|
||||
unary_exp += token(i)
|
||||
i++
|
||||
|
||||
if(token(i) in unary_operators)
|
||||
i = unary_expression(i, unary_exp)
|
||||
|
||||
else if(token(i) == "(")
|
||||
var/list/expr = list()
|
||||
|
||||
i = expression(i + 1, expr)
|
||||
|
||||
if(token(i) != ")")
|
||||
parse_error("Missing ) at end of expression.")
|
||||
|
||||
else
|
||||
i++
|
||||
|
||||
unary_exp[++unary_exp.len] = expr
|
||||
|
||||
else
|
||||
i = value(i, unary_exp)
|
||||
|
||||
node[++node.len] = unary_exp
|
||||
|
||||
|
||||
else
|
||||
parse_error("Expected unary operator but found '[token(i)]'")
|
||||
|
||||
return i
|
||||
|
||||
//binary_operator: comparitor | '+' | '-' | '/' | '*' | '&' | '|' | '^'
|
||||
|
||||
//binary_operator: comparitor | '+' | '-' | '/' | '*' | '&' | '|' | '^' | '%'
|
||||
/datum/SDQL_parser/proc/binary_operator(i, list/node)
|
||||
|
||||
if(token(i) in (binary_operators + comparitors))
|
||||
node += token(i)
|
||||
|
||||
else
|
||||
parse_error("Unknown binary operator [token(i)]")
|
||||
|
||||
return i + 1
|
||||
|
||||
//value: variable | string | number | 'null'
|
||||
|
||||
//value: variable | string | number | 'null' | object_type
|
||||
/datum/SDQL_parser/proc/value(i, list/node)
|
||||
if(token(i) == "null")
|
||||
node += "null"
|
||||
i++
|
||||
else if(lowertext(copytext(token(i),1,3)) == "0x" && isnum(hex2num(copytext(token(i),3))))
|
||||
node += hex2num(copytext(token(i),3))
|
||||
|
||||
else if(lowertext(copytext(token(i), 1, 3)) == "0x" && isnum(hex2num(copytext(token(i), 3))))
|
||||
node += hex2num(copytext(token(i), 3))
|
||||
i++
|
||||
|
||||
else if(isnum(text2num(token(i))))
|
||||
node += text2num(token(i))
|
||||
i++
|
||||
|
||||
else if(copytext(token(i), 1, 2) in list("'", "\""))
|
||||
i = string(i, node)
|
||||
|
||||
else if(copytext(token(i), 1, 2) == "\[") // Start a list.
|
||||
i = array(i, node)
|
||||
else if(copytext(token(i), 1, 2) == "/")
|
||||
i = object_type(i, node)
|
||||
else
|
||||
i = variable(i, node)
|
||||
return i
|
||||
|
||||
/*EXPLAIN SELECT * WHERE 42 = 6 * 9 OR val = - 5 == 7*/
|
||||
return i
|
||||
|
||||
@@ -48,6 +48,12 @@
|
||||
/proc/_image(icon, loc, icon_state, layer, dir)
|
||||
return image(icon, loc, icon_state, layer, dir)
|
||||
|
||||
/proc/_istype(object, type)
|
||||
return istype(object, type)
|
||||
|
||||
/proc/_ispath(path, type)
|
||||
return ispath(path, type)
|
||||
|
||||
/proc/_length(E)
|
||||
return length(E)
|
||||
|
||||
@@ -208,4 +214,3 @@
|
||||
/proc/_step_away(ref, trg, max)
|
||||
step_away(ref, trg, max)
|
||||
|
||||
|
||||
|
||||
@@ -4,10 +4,12 @@
|
||||
if(!check_rights(R_SOUNDS))
|
||||
return
|
||||
|
||||
var/freq = 1
|
||||
var/vol = input(usr, "What volume would you like the sound to play at?",, 100) as null|num
|
||||
if(!vol)
|
||||
return
|
||||
var/freq = input(usr, "What frequency would you like the sound to play at?",, 1) as null|num
|
||||
if(!freq)
|
||||
freq = 1
|
||||
vol = CLAMP(vol, 1, 100)
|
||||
|
||||
var/sound/admin_sound = new()
|
||||
@@ -96,13 +98,17 @@
|
||||
if (data["webpage_url"])
|
||||
webpage_url = "<a href=\"[data["webpage_url"]]\">[title]</a>"
|
||||
|
||||
var/freq = input(usr, "What frequency would you like the sound to play at?",, 1) as null|num
|
||||
if(!freq)
|
||||
freq = 1
|
||||
pitch = freq
|
||||
|
||||
var/res = alert(usr, "Show the title of and link to this song to the players?\n[title]",, "No", "Yes", "Cancel")
|
||||
switch(res)
|
||||
if("Yes")
|
||||
to_chat(world, "<span class='boldannounce'>An admin played: [webpage_url]</span>")
|
||||
if("Cancel")
|
||||
return
|
||||
|
||||
SSblackbox.record_feedback("nested tally", "played_url", 1, list("[ckey]", "[web_sound_input]"))
|
||||
log_admin("[key_name(src)] played web sound: [web_sound_input]")
|
||||
message_admins("[key_name(src)] played web sound: [web_sound_input]")
|
||||
|
||||
@@ -277,7 +277,7 @@
|
||||
/datum/action/innate/cult/blood_spell/veiling
|
||||
name = "Conceal Presence"
|
||||
desc = "A multi-function spell that alternates between hiding and revealing nearby cult runes, structures, turf, and airlocks."
|
||||
invocation = "Kla'atu barada nikt'o!"
|
||||
invocation = "Kla'atu barada nikt'o."
|
||||
button_icon_state = "gone"
|
||||
charges = 10
|
||||
var/revealing = FALSE //if it reveals or not
|
||||
@@ -326,7 +326,7 @@
|
||||
/datum/action/innate/cult/blood_spell/manipulation
|
||||
name = "Blood Rites"
|
||||
desc = "A complex spell that allows you to gather blood and use it for healing or other powerful spells."
|
||||
invocation = "Fel'th Dol Ab'orod!"
|
||||
invocation = "Fel'th Dol Ab'orod."
|
||||
button_icon_state = "manip"
|
||||
charges = 5
|
||||
magic_path = "/obj/item/melee/blood_magic/manipulator"
|
||||
@@ -402,7 +402,7 @@
|
||||
/obj/item/melee/blood_magic/stun
|
||||
name = "Stunning Aura"
|
||||
color = RUNE_COLOR_RED
|
||||
invocation = "Fuu ma'jin!"
|
||||
invocation = "Fuu ma'jin."
|
||||
|
||||
/obj/item/melee/blood_magic/stun/afterattack(atom/target, mob/living/carbon/user, proximity)
|
||||
if(!isliving(target) || !proximity)
|
||||
@@ -434,6 +434,7 @@
|
||||
else
|
||||
to_chat(user, "<span class='cultitalic'>In an brilliant flash of red, [L] falls to the ground!</span>")
|
||||
L.Knockdown(160)
|
||||
L.adjustStaminaLoss(140) //Ensures hard stamcrit
|
||||
L.flash_act(1,1)
|
||||
if(issilicon(target))
|
||||
var/mob/living/silicon/S = L
|
||||
@@ -498,7 +499,7 @@
|
||||
/obj/item/melee/blood_magic/shackles
|
||||
name = "Binding Aura"
|
||||
desc = "Allows you to bind a victim and temporarily silence them."
|
||||
invocation = "In'totum Lig'abis!"
|
||||
invocation = "In'totum Lig'abis."
|
||||
color = "#000000" // black
|
||||
|
||||
/obj/item/melee/blood_magic/shackles/afterattack(atom/target, mob/living/carbon/user, proximity)
|
||||
@@ -548,7 +549,7 @@
|
||||
/obj/item/melee/blood_magic/construction
|
||||
name = "Corrupting Aura"
|
||||
desc = "Corrupts metal and plasteel into more sinister forms."
|
||||
invocation = "Ethra p'ni dedol!"
|
||||
invocation = "Ethra p'ni dedol."
|
||||
color = "#000000" // black
|
||||
|
||||
/obj/item/melee/blood_magic/construction/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
var/my_message
|
||||
if(!message)
|
||||
return
|
||||
user.whisper("O bidai nabora se[pick("'","`")]sma!", language = /datum/language/common)
|
||||
user.whisper("O bidai nabora se[pick("'","`")]sma.", language = /datum/language/common)
|
||||
user.whisper(html_decode(message))
|
||||
var/title = "Acolyte"
|
||||
var/span = "cult italic"
|
||||
|
||||
@@ -25,7 +25,7 @@ Runes can either be invoked by one's self or with many different cultists. Each
|
||||
layer = LOW_OBJ_LAYER
|
||||
color = RUNE_COLOR_RED
|
||||
|
||||
var/invocation = "Aiy ele-mayo!" //This is said by cultists when the rune is invoked.
|
||||
var/invocation = "Aiy ele-mayo." //This is said by cultists when the rune is invoked.
|
||||
var/req_cultists = 1 //The amount of cultists required around the rune to invoke it. If only 1, any cultist can invoke it.
|
||||
var/req_cultists_text //if we have a description override for required cultists to invoke
|
||||
var/rune_in_use = FALSE // Used for some runes, this is for when you want a rune to not be usable when in use.
|
||||
@@ -163,7 +163,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/malformed
|
||||
cultist_name = "malformed rune"
|
||||
cultist_desc = "a senseless rune written in gibberish. No good can come from invoking this."
|
||||
invocation = "Ra'sha yoka!"
|
||||
invocation = "Ra'sha yoka."
|
||||
invoke_damage = 30
|
||||
|
||||
/obj/effect/rune/malformed/Initialize(mapload, set_keyword)
|
||||
@@ -180,7 +180,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
cultist_name = "Offer"
|
||||
cultist_desc = "offers a noncultist above it to Nar'Sie, either converting them or sacrificing them."
|
||||
req_cultists_text = "2 for conversion, 3 for living sacrifices and sacrifice targets."
|
||||
invocation = "Mah'weyh pleggh at e'ntrath!"
|
||||
invocation = "Mah'weyh pleggh at e'ntrath."
|
||||
icon_state = "3"
|
||||
color = RUNE_COLOR_OFFER
|
||||
req_cultists = 1
|
||||
@@ -213,7 +213,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
var/datum/team/cult/Cult_team = C.cult_team
|
||||
var/is_convertable = is_convertable_to_cult(L,C.cult_team)
|
||||
if(L.stat != DEAD && (is_clock || is_convertable))
|
||||
invocation = "Mah'weyh pleggh at e'ntrath!"
|
||||
invocation = "Mah'weyh pleggh at e'ntrath."
|
||||
..()
|
||||
if(is_clock)
|
||||
L.visible_message("<span class='warning'>[L]'s eyes glow a defiant yellow!</span>", \
|
||||
@@ -223,7 +223,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
else if(is_convertable)
|
||||
do_convert(L, invokers)
|
||||
else
|
||||
invocation = "Barhah hra zar'garis!"
|
||||
invocation = "Barhah hra zar'garis."
|
||||
..()
|
||||
do_sacrifice(L, invokers)
|
||||
animate(src, color = oldcolor, time = 5)
|
||||
@@ -318,7 +318,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/empower
|
||||
cultist_name = "Empower"
|
||||
cultist_desc = "allows cultists to prepare greater amounts of blood magic at far less of a cost."
|
||||
invocation = "H'drak v'loso, mir'kanas verbot!"
|
||||
invocation = "H'drak v'loso, mir'kanas verbot."
|
||||
icon_state = "3"
|
||||
color = RUNE_COLOR_TALISMAN
|
||||
construct_invoke = FALSE
|
||||
@@ -332,7 +332,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/teleport
|
||||
cultist_name = "Teleport"
|
||||
cultist_desc = "warps everything above it to another chosen teleport rune."
|
||||
invocation = "Sas'so c'arta forbici!"
|
||||
invocation = "Sas'so c'arta forbici."
|
||||
icon_state = "2"
|
||||
color = RUNE_COLOR_TELEPORT
|
||||
req_keyword = TRUE
|
||||
@@ -509,7 +509,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/raise_dead
|
||||
cultist_name = "Revive"
|
||||
cultist_desc = "requires a dead, mindless, or inactive cultist placed upon the rune. Provided there have been sufficient sacrifices, they will be given a new life."
|
||||
invocation = "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!" //Depends on the name of the user - see below
|
||||
invocation = "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat." //Depends on the name of the user - see below
|
||||
icon_state = "1"
|
||||
color = RUNE_COLOR_MEDIUMRED
|
||||
var/static/revives_used = -SOULS_TO_REVIVE // Cultists get one "free" revive
|
||||
@@ -544,7 +544,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
fail_invoke()
|
||||
return
|
||||
if(user.name == "Herbert West")
|
||||
invocation = "To life, to life, I bring them!"
|
||||
invocation = "To life, to life, I bring them."
|
||||
else
|
||||
invocation = initial(invocation)
|
||||
..()
|
||||
@@ -600,7 +600,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/wall
|
||||
cultist_name = "Barrier"
|
||||
cultist_desc = "when invoked, makes a temporary invisible wall to block passage. Can be invoked again to reverse this."
|
||||
invocation = "Khari'd! Eske'te tannin!"
|
||||
invocation = "Khari'd. Eske'te tannin."
|
||||
icon_state = "4"
|
||||
color = RUNE_COLOR_DARKRED
|
||||
CanAtmosPass = ATMOS_PASS_DENSITY
|
||||
@@ -682,7 +682,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/summon
|
||||
cultist_name = "Summon Cultist"
|
||||
cultist_desc = "summons a single cultist to the rune. Requires 2 invokers."
|
||||
invocation = "N'ath reth sh'yro eth d'rekkathnor!"
|
||||
invocation = "N'ath reth sh'yro eth d'rekkathnor."
|
||||
req_cultists = 2
|
||||
invoke_damage = 10
|
||||
icon_state = "3"
|
||||
@@ -733,7 +733,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/blood_boil
|
||||
cultist_name = "Boil Blood"
|
||||
cultist_desc = "boils the blood of non-believers who can see the rune, rapidly dealing extreme amounts of damage. Requires 3 invokers."
|
||||
invocation = "Dedo ol'btoh!"
|
||||
invocation = "Dedo ol'btoh."
|
||||
icon_state = "4"
|
||||
color = RUNE_COLOR_BURNTORANGE
|
||||
light_color = LIGHT_COLOR_LAVA
|
||||
@@ -797,7 +797,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/manifest
|
||||
cultist_name = "Spirit Realm"
|
||||
cultist_desc = "manifests a spirit servant of the Geometer and allows you to ascend as a spirit yourself. The invoker must not move from atop the rune, and will take damage for each summoned spirit."
|
||||
invocation = "Gal'h'rfikk harfrandid mud'gib!" //how the fuck do you pronounce this
|
||||
invocation = "Gal'h'rfikk harfrandid mud'gib." //how the fuck do you pronounce this
|
||||
icon_state = "7"
|
||||
invoke_damage = 10
|
||||
construct_invoke = FALSE
|
||||
@@ -924,7 +924,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
/obj/effect/rune/apocalypse
|
||||
cultist_name = "Apocalypse"
|
||||
cultist_desc = "a harbinger of the end times. Grows in strength with the cult's desperation - but at the risk of... side effects."
|
||||
invocation = "Ta'gh fara'qha fel d'amar det!"
|
||||
invocation = "Ta'gh fara'qha fel d'amar det."
|
||||
icon = 'icons/effects/96x96.dmi'
|
||||
icon_state = "apoc"
|
||||
pixel_x = -32
|
||||
|
||||
@@ -588,12 +588,18 @@ This is here to make the tiles around the station mininuke change when it's arme
|
||||
var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control
|
||||
if(istype(loneop))
|
||||
loneop.weight += 1
|
||||
if(loneop.weight % 5 == 0)
|
||||
message_admins("[src] is stationary in [ADMIN_VERBOSEJMP(newturf)]. The weight of Lone Operative is now [loneop.weight].")
|
||||
log_game("[src] is stationary for too long in [loc_name(newturf)], and has increased the weight of the Lone Operative event to [loneop.weight].")
|
||||
else
|
||||
lastlocation = newturf
|
||||
last_disk_move = world.time
|
||||
var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control
|
||||
if(istype(loneop) && prob(loneop.weight))
|
||||
loneop.weight = max(loneop.weight - 1, 0)
|
||||
if(loneop.weight % 5 == 0)
|
||||
message_admins("[src] is on the move (currently in [ADMIN_VERBOSEJMP(newturf)]). The weight of Lone Operative is now [loneop.weight].")
|
||||
log_game("[src] being on the move has reduced the weight of the Lone Operative event to [loneop.weight].")
|
||||
|
||||
/obj/item/disk/nuclear/examine(mob/user)
|
||||
. = ..()
|
||||
|
||||
@@ -202,10 +202,10 @@
|
||||
/datum/antagonist/rev/farewell()
|
||||
if(ishuman(owner.current))
|
||||
owner.current.visible_message("<span class='deconversion_message'>[owner.current] looks like [owner.current.p_theyve()] just remembered [owner.current.p_their()] real allegiance!</span>", null, null, null, owner.current)
|
||||
to_chat(owner, "<span class='userdanger'>You are no longer a brainwashed revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you...</span>")
|
||||
to_chat(owner, "<span class='userdanger'>You are no longer a brainwashed revolutionary! Your memory is hazy from the time you were a rebel... You don't seem to be able to recall the names of your comrades, not even your leaders...</span>")
|
||||
else if(issilicon(owner.current))
|
||||
owner.current.visible_message("<span class='deconversion_message'>The frame beeps contentedly, purging the hostile memory engram from the MMI before initalizing it.</span>", null, null, null, owner.current)
|
||||
to_chat(owner, "<span class='userdanger'>The frame's firmware detects and deletes your neural reprogramming! You remember nothing but the name of the one who flashed you.</span>")
|
||||
to_chat(owner, "<span class='userdanger'>The frame's firmware detects and deletes your neural reprogramming! You remember nothing of your time spent reprogrammed, you can't even remember the names or identities of anyone involved...</span>")
|
||||
|
||||
//blunt trauma deconversions call this through species.dm spec_attacked_by()
|
||||
/datum/antagonist/rev/proc/remove_revolutionary(borged, deconverter)
|
||||
|
||||
@@ -60,50 +60,13 @@
|
||||
owner.current.forceMove(pick(GLOB.wizardstart))
|
||||
|
||||
/datum/antagonist/wizard/proc/create_objectives()
|
||||
switch(rand(1,100))
|
||||
if(1 to 30)
|
||||
var/datum/objective/assassinate/kill_objective = new
|
||||
kill_objective.owner = owner
|
||||
kill_objective.find_target()
|
||||
objectives += kill_objective
|
||||
var/datum/objective/new_objective = new("Cause as much creative mayhem as you can aboard the station! The more outlandish your methods of achieving this, the better! Make sure there's a decent amount of crew alive to tell of your tale.")
|
||||
new_objective.owner = owner
|
||||
objectives += new_objective
|
||||
|
||||
if (!(locate(/datum/objective/escape) in owner.objectives))
|
||||
var/datum/objective/escape/escape_objective = new
|
||||
escape_objective.owner = owner
|
||||
objectives += escape_objective
|
||||
|
||||
if(31 to 60)
|
||||
var/datum/objective/steal/steal_objective = new
|
||||
steal_objective.owner = owner
|
||||
steal_objective.find_target()
|
||||
objectives += steal_objective
|
||||
|
||||
if (!(locate(/datum/objective/escape) in owner.objectives))
|
||||
var/datum/objective/escape/escape_objective = new
|
||||
escape_objective.owner = owner
|
||||
objectives += escape_objective
|
||||
|
||||
if(61 to 85)
|
||||
var/datum/objective/assassinate/kill_objective = new
|
||||
kill_objective.owner = owner
|
||||
kill_objective.find_target()
|
||||
objectives += kill_objective
|
||||
|
||||
var/datum/objective/steal/steal_objective = new
|
||||
steal_objective.owner = owner
|
||||
steal_objective.find_target()
|
||||
objectives += steal_objective
|
||||
|
||||
if (!(locate(/datum/objective/survive) in owner.objectives))
|
||||
var/datum/objective/survive/survive_objective = new
|
||||
survive_objective.owner = owner
|
||||
objectives += survive_objective
|
||||
|
||||
else
|
||||
if (!(locate(/datum/objective/hijack) in owner.objectives))
|
||||
var/datum/objective/hijack/hijack_objective = new
|
||||
hijack_objective.owner = owner
|
||||
objectives += hijack_objective
|
||||
var/datum/objective/escape/escape_objective = new
|
||||
escape_objective.owner = owner
|
||||
objectives += escape_objective
|
||||
|
||||
for(var/datum/objective/O in objectives)
|
||||
owner.objectives += O
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
if(active_hotspot)
|
||||
if(soh)
|
||||
if((tox > 0.5 || trit > 0.5) && oxy > 0.5)
|
||||
if(active_hotspot.temperature < exposed_temperature)
|
||||
active_hotspot.temperature = exposed_temperature
|
||||
if(active_hotspot.temperature < exposed_temperature*50)
|
||||
active_hotspot.temperature = exposed_temperature*50
|
||||
if(active_hotspot.volume < exposed_volume)
|
||||
active_hotspot.volume = exposed_volume
|
||||
return 1
|
||||
@@ -36,7 +36,7 @@
|
||||
return 0
|
||||
|
||||
active_hotspot = new /obj/effect/hotspot(src)
|
||||
active_hotspot.temperature = exposed_temperature
|
||||
active_hotspot.temperature = exposed_temperature*50
|
||||
active_hotspot.volume = exposed_volume*25
|
||||
|
||||
active_hotspot.just_spawned = (current_cycle < SSair.times_fired)
|
||||
@@ -47,6 +47,7 @@
|
||||
heating.temperature = exposed_temperature
|
||||
heating.react()
|
||||
assume_air(heating)
|
||||
air_update_turf()
|
||||
return igniting
|
||||
|
||||
//This is the icon for fire on turfs, also helps for nurturing small fires until they are full tile
|
||||
|
||||
@@ -650,7 +650,7 @@
|
||||
if(0)
|
||||
add_overlay(AALARM_OVERLAY_GREEN)
|
||||
overlay_state = AALARM_OVERLAY_GREEN
|
||||
light_color = LIGHT_COLOR_BLUEGREEN
|
||||
light_color = LIGHT_COLOR_PALEBLUE
|
||||
set_light(brightness_on)
|
||||
if(1)
|
||||
add_overlay(AALARM_OVERLAY_WARN)
|
||||
|
||||
@@ -65,9 +65,9 @@
|
||||
|
||||
/obj/effect/mob_spawn/Destroy()
|
||||
GLOB.poi_list -= src
|
||||
LAZYREMOVE(GLOB.mob_spawners[name], src)
|
||||
if(!LAZYLEN(GLOB.mob_spawners[name]))
|
||||
GLOB.mob_spawners -= name
|
||||
LAZYREMOVE(GLOB.mob_spawners[job_description ? job_description : name], src)
|
||||
if(!LAZYLEN(GLOB.mob_spawners[job_description ? job_description : name]))
|
||||
GLOB.mob_spawners -= job_description ? job_description : name
|
||||
return ..()
|
||||
|
||||
/obj/effect/mob_spawn/proc/special(mob/M)
|
||||
|
||||
@@ -10,6 +10,10 @@
|
||||
name = "Snowdin Tundra Plains"
|
||||
icon_state = "awaycontent25"
|
||||
|
||||
/area/awaymission/snowdin/outside/vip
|
||||
name = "Snowdin Tundra Plains"
|
||||
icon_state = "awaycontent25"
|
||||
|
||||
/area/awaymission/snowdin/post
|
||||
name = "Snowdin Outpost"
|
||||
icon_state = "awaycontent2"
|
||||
@@ -116,7 +120,7 @@
|
||||
name = "Snowdin Main Base"
|
||||
icon_state = "awaycontent16"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
requires_power = TRUE
|
||||
requires_power = FALSE
|
||||
|
||||
/area/awaymission/snowdin/dungeon1
|
||||
name = "Snowdin Depths"
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
/datum/buildmode_mode/advanced/show_help(client/c)
|
||||
to_chat(c, "<span class='notice'>***********************************************************</span>")
|
||||
to_chat(c, "<span class='notice'>Right Mouse Button on buildmode button = Set object type</span>")
|
||||
to_chat(c, "<span class='notice'>Left Mouse Button + alt on turf/obj = Copy object type")
|
||||
to_chat(c, "<span class='notice'>Left Mouse Button on turf/obj = Place objects</span>")
|
||||
to_chat(c, "<span class='notice'>Right Mouse Button = Delete objects</span>")
|
||||
to_chat(c, "")
|
||||
@@ -32,7 +33,15 @@
|
||||
var/list/pa = params2list(params)
|
||||
var/left_click = pa.Find("left")
|
||||
var/right_click = pa.Find("right")
|
||||
if(left_click)
|
||||
var/alt_click = pa.Find("alt")
|
||||
|
||||
if(left_click && alt_click)
|
||||
if (istype(object, /turf) || istype(object, /obj) || istype(object, /mob))
|
||||
objholder = object.type
|
||||
to_chat(c, "<span class='notice'>[initial(object.name)] ([object.type]) selected.</span>")
|
||||
else
|
||||
to_chat(c, "<span class='notice'>[initial(object.name)] is not a turf, object, or mob! Please select again.</span>")
|
||||
else if(left_click)
|
||||
if(ispath(objholder,/turf))
|
||||
var/turf/T = get_turf(object)
|
||||
log_admin("Build Mode: [key_name(c)] modified [T] in [AREACOORD(object)] to [objholder]")
|
||||
@@ -47,4 +56,3 @@
|
||||
if(isobj(object))
|
||||
log_admin("Build Mode: [key_name(c)] deleted [object] at [AREACOORD(object)]")
|
||||
qdel(object)
|
||||
|
||||
+168
-2
@@ -81,6 +81,30 @@
|
||||
crate_name = "emergency crate"
|
||||
crate_type = /obj/structure/closet/crate/internals
|
||||
|
||||
/datum/supply_pack/emergency/rcds
|
||||
name = "Emergency RCDs"
|
||||
desc = "Bombs going off on station? SME blown and now you need to fix the hole it left behind? Well this crate has a pare of Rcds to be able to easily fix up any problem you may have!"
|
||||
cost = 1500
|
||||
contains = list(/obj/item/construction/rcd,
|
||||
/obj/item/construction/rcd)
|
||||
crate_name = "emergency rcds"
|
||||
crate_type = /obj/structure/closet/crate/internals
|
||||
|
||||
/datum/supply_pack/emergency/soft_suit
|
||||
name = "Emergency Space Suit "
|
||||
desc = "Is there bombs going off left and right? Is there meteors shooting around the station? Well we have two fragile space suit for emergencys as well as air and masks."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/tank/internals/air,
|
||||
/obj/item/tank/internals/air,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/suit/space/fragile,
|
||||
/obj/item/clothing/suit/space/fragile,
|
||||
/obj/item/clothing/head/helmet/space/fragile,
|
||||
/obj/item/clothing/head/helmet/space/fragile)
|
||||
crate_name = "emergency crate"
|
||||
crate_type = /obj/structure/closet/crate/internals
|
||||
|
||||
/datum/supply_pack/emergency/firefighting
|
||||
name = "Firefighting Crate"
|
||||
desc = "Only you can prevent station fires. Partner up with two firefighter suits, gas masks, flashlights, large oxygen tanks, extinguishers, and hardhats!"
|
||||
@@ -241,6 +265,26 @@
|
||||
crate_name = "weed control crate"
|
||||
crate_type = /obj/structure/closet/crate/secure/hydroponics
|
||||
|
||||
/datum/supply_pack/medical/anitvirus
|
||||
name = "Virus Containment Crate"
|
||||
desc = "Viro let out a death plague Mk II again? Someone didnt wash there hands? Old plagues born anew? Well this crate is for you! Hope you cure it before it brakes out of the station... This crate needs medical access to open and has two bio suits, a box of needles and beakers, five spaceacillin needles, and a medibot."
|
||||
cost = 3000
|
||||
access = ACCESS_MEDICAL
|
||||
contains = list(/mob/living/simple_animal/bot/medbot,
|
||||
/obj/item/clothing/head/bio_hood,
|
||||
/obj/item/clothing/head/bio_hood,
|
||||
/obj/item/clothing/suit/bio_suit,
|
||||
/obj/item/clothing/suit/bio_suit,
|
||||
/obj/item/reagent_containers/syringe/antiviral,
|
||||
/obj/item/reagent_containers/syringe/antiviral,
|
||||
/obj/item/reagent_containers/syringe/antiviral,
|
||||
/obj/item/reagent_containers/syringe/antiviral,
|
||||
/obj/item/reagent_containers/syringe/antiviral,
|
||||
/obj/item/storage/box/syringes,
|
||||
/obj/item/storage/box/beakers)
|
||||
crate_name = "virus containment unit crate"
|
||||
crate_type = /obj/structure/closet/crate/secure/plasma
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////// Security ////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
@@ -280,6 +324,15 @@
|
||||
/obj/item/clothing/head/fedora/det_hat)
|
||||
crate_name = "forensics crate"
|
||||
|
||||
/datum/supply_pack/security/sechardsuit
|
||||
name = "Sec Hardsuit"
|
||||
desc = "One Sec Hardsuit with a small air tank and mask."
|
||||
cost = 3000 // half of SWAT gear for have the armor and half the gear
|
||||
contains = list(/obj/item/clothing/suit/space/hardsuit/security,
|
||||
/obj/item/tank/internals/air,
|
||||
/obj/item/clothing/mask/gas)
|
||||
crate_name = "sec hardsuit crate"
|
||||
|
||||
/datum/supply_pack/security/helmets
|
||||
name = "Helmets Crate"
|
||||
desc = "Contains three standard-issue brain buckets. Requires Security access to open."
|
||||
@@ -362,6 +415,29 @@
|
||||
/obj/item/melee/baton/loaded)
|
||||
crate_name = "stun baton crate"
|
||||
|
||||
/datum/supply_pack/security/russianclothing
|
||||
name = "Russian Surplus Clothing"
|
||||
desc = "An old russian crate full of surplus armor that they used to use! Has two sets of bulletproff armor, a few union suits and some warm hats!"
|
||||
hidden = TRUE
|
||||
contraband = TRUE
|
||||
cost = 5000 // Its basicly sec suits, good boots/gloves
|
||||
contains = list(/obj/item/clothing/suit/security/officer/russian,
|
||||
/obj/item/clothing/suit/security/officer/russian,
|
||||
/obj/item/clothing/shoes/combat,
|
||||
/obj/item/clothing/shoes/combat,
|
||||
/obj/item/clothing/head/ushanka,
|
||||
/obj/item/clothing/head/ushanka,
|
||||
/obj/item/clothing/suit/armor/bulletproof,
|
||||
/obj/item/clothing/suit/armor/bulletproof,
|
||||
/obj/item/clothing/head/helmet/alt,
|
||||
/obj/item/clothing/head/helmet/alt,
|
||||
/obj/item/clothing/gloves/combat,
|
||||
/obj/item/clothing/gloves/combat,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/mask/gas)
|
||||
crate_name = "surplus russian clothing"
|
||||
crate_type = /obj/structure/closet/crate/internals
|
||||
|
||||
/datum/supply_pack/security/taser
|
||||
name = "Taser Crate"
|
||||
desc = "From the depths of stunbased combat, this order rises above, supreme. Contains three hybrid tasers, capable of firing both electrodes and disabling shots. Requires Security access to open."
|
||||
@@ -633,6 +709,24 @@
|
||||
/obj/item/clothing/glasses/meson/engine)
|
||||
crate_name = "engineering gear crate"
|
||||
|
||||
/datum/supply_pack/engineering/engihardsuit
|
||||
name = "Engineering Hardsuit"
|
||||
desc = "Poly 'Who stole all the hardsuits!' Well now you can get more hardsuits if needed! NOTE ONE HARDSUIT IS IN THIS CRATE, as well as one air tank and maks!"
|
||||
cost = 2500
|
||||
contains = list(/obj/item/tank/internals/air,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/suit/space/hardsuit/engine)
|
||||
crate_name = "engineering hardsuit"
|
||||
|
||||
/datum/supply_pack/engineering/industrialrcd
|
||||
name = "Industrial RCD"
|
||||
desc = "A industrial RCD in case the station has gone through more then one meteor storm and the CE needs to bring out the somthing a bit more reliable. Dose not contain spare ammo for the industrial RCD or any other RCD modles."
|
||||
cost = 4500
|
||||
access = ACCESS_CE
|
||||
contains = list(/obj/item/construction/rcd/industrial)
|
||||
crate_name = "industrial rcd"
|
||||
crate_type = /obj/structure/closet/crate/secure/engineering
|
||||
|
||||
/datum/supply_pack/engineering/powergamermitts
|
||||
name = "Insulated Gloves Crate"
|
||||
desc = "The backbone of modern society. Barely ever ordered for actual engineering. Contains three insulated gloves."
|
||||
@@ -978,6 +1072,28 @@
|
||||
contains = list(/obj/item/stack/sheet/mineral/wood/fifty)
|
||||
crate_name = "wood planks crate"
|
||||
|
||||
/datum/supply_pack/materials/rcdammo
|
||||
name = "Spare RDC ammo"
|
||||
desc = "This crate contains sixteen RCD ammo packs, to help with any holes or projects people mite be working on."
|
||||
cost = 3750
|
||||
contains = list(/obj/item/rcd_ammo,
|
||||
/obj/item/rcd_ammo,
|
||||
/obj/item/rcd_ammo,
|
||||
/obj/item/rcd_ammo,
|
||||
/obj/item/rcd_ammo,
|
||||
/obj/item/rcd_ammo,
|
||||
/obj/item/rcd_ammo,
|
||||
/obj/item/rcd_ammo,
|
||||
/obj/item/rcd_ammo,
|
||||
/obj/item/rcd_ammo,
|
||||
/obj/item/rcd_ammo,
|
||||
/obj/item/rcd_ammo,
|
||||
/obj/item/rcd_ammo,
|
||||
/obj/item/rcd_ammo,
|
||||
/obj/item/rcd_ammo,
|
||||
/obj/item/rcd_ammo)
|
||||
crate_name = "rcd ammo"
|
||||
|
||||
/datum/supply_pack/materials/bz
|
||||
name = "BZ Canister Crate"
|
||||
desc = "Contains a canister of BZ. Requires Toxins access to open."
|
||||
@@ -1120,6 +1236,15 @@
|
||||
/obj/item/storage/firstaid/regular)
|
||||
crate_name = "first aid kit crate"
|
||||
|
||||
/datum/supply_pack/medical/medicalhardsuit
|
||||
name = "Medical Hardsuit"
|
||||
desc = "Got people being spaced left and right? Hole in the same room as the dead body of Hos or cap? Fear not, now you can buy one medical hardsuit with a mask and air tank to save your fellow crewmembers."
|
||||
cost = 2500
|
||||
contains = list(/obj/item/tank/internals/air,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/suit/space/hardsuit/medical)
|
||||
crate_name = "medical hardsuit"
|
||||
|
||||
/datum/supply_pack/medical/iv_drip
|
||||
name = "IV Drip Crate"
|
||||
desc = "Contains a single IV drip for administering blood to patients."
|
||||
@@ -1238,6 +1363,7 @@
|
||||
crate_type = /obj/structure/closet/crate/secure/plasma
|
||||
dangerous = TRUE
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////// Science /////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
@@ -1411,6 +1537,18 @@
|
||||
crate_name = "janitor backpack crate"
|
||||
crate_type = /obj/structure/closet/crate/secure
|
||||
|
||||
/datum/supply_pack/service/advlighting
|
||||
name = "Advanced Lighting crate"
|
||||
desc = "Thanks to advanced lighting tech we here at the Lamp Factory have be able to produce more lamps and lamp items! This crate has three lamps, a box of lights and a state of the art rapid-light-device!"
|
||||
cost = 2500 //Fair
|
||||
contains = list(/obj/item/construction/rld,
|
||||
/obj/item/flashlight/lamp,
|
||||
/obj/item/flashlight/lamp,
|
||||
/obj/item/flashlight/lamp/green,
|
||||
/obj/item/storage/box/lights/mixed)
|
||||
crate_name = "advanced lighting crate"
|
||||
crate_type = /obj/structure/closet/crate/secure
|
||||
|
||||
/datum/supply_pack/service/mule
|
||||
name = "MULEbot Crate"
|
||||
desc = "Pink-haired Quartermaster not doing her job? Replace her with this tireless worker, today!"
|
||||
@@ -1444,7 +1582,7 @@
|
||||
|
||||
/datum/supply_pack/service/carpet
|
||||
name = "Premium Carpet Crate"
|
||||
desc = "Plasteel floor tiles getting on your nerves? These stacks of extra soft carpet will tie any room together."
|
||||
desc = "Plasteel floor tiles getting on your nerves? These stacks of extra soft carpet will tie any room together. Contains the classics."
|
||||
cost = 1000
|
||||
contains = list(/obj/item/stack/tile/carpet/fifty,
|
||||
/obj/item/stack/tile/carpet/fifty,
|
||||
@@ -1452,6 +1590,16 @@
|
||||
/obj/item/stack/tile/carpet/black/fifty)
|
||||
crate_name = "premium carpet crate"
|
||||
|
||||
/datum/supply_pack/service/carpet2
|
||||
name = "Premium Carpet Crate #2"
|
||||
desc = "Plasteel floor tiles getting on your nerves? These stacks of extra soft carpet will tie any room together. Contains red, and monochrome"
|
||||
cost = 1000
|
||||
contains = list(/obj/item/stack/tile/carpet/blackred/fifty,
|
||||
/obj/item/stack/tile/carpet/blackred/fifty,
|
||||
/obj/item/stack/tile/carpet/monochrome/fifty,
|
||||
/obj/item/stack/tile/carpet/monochrome/fifty)
|
||||
crate_name = "premium carpet crate #2"
|
||||
|
||||
/datum/supply_pack/service/lightbulbs
|
||||
name = "Replacement Lights"
|
||||
desc = "May the light of Aether shine upon this station! Or at least, the light of forty two light tubes and twenty one light bulbs as well as a light replacer."
|
||||
@@ -1611,6 +1759,22 @@
|
||||
access = ACCESS_THEATRE
|
||||
crate_type = /obj/structure/closet/crate/secure
|
||||
|
||||
/datum/supply_pack/organic/hunting
|
||||
name = "Huntting gear"
|
||||
desc = "Even in space, we can fine prey to hunt, this crate contains everthing a fine hunter needs to have a sporting time. This crate needs armory access to open. A true huntter only needs a fine bottle of cognac, a nice coat, some good o' cigars, and of cource a huntting shotgun. "
|
||||
cost = 3500
|
||||
contraband = TRUE
|
||||
contains = list(/obj/item/clothing/head/flatcap,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/captain,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/cognac,
|
||||
/obj/item/storage/fancy/cigarettes/cigars/havana,
|
||||
/obj/item/clothing/gloves/color/white,
|
||||
/obj/item/clothing/under/rank/curator,
|
||||
/obj/item/gun/ballistic/shotgun/lethal)
|
||||
access = ACCESS_ARMORY
|
||||
crate_name = "sporting crate"
|
||||
crate_type = /obj/structure/closet/crate/secure // Would have liked a wooden crate but access >:(
|
||||
|
||||
/datum/supply_pack/organic/hydroponics
|
||||
name = "Hydroponics Crate"
|
||||
desc = "Supplies for growing a great garden! Contains two bottles of ammonia, two Plant-B-Gone spray bottles, a hatchet, cultivator, plant analyzer, as well as a pair of leather gloves and a botanist's apron."
|
||||
@@ -2213,7 +2377,9 @@
|
||||
/obj/item/canvas/twentythreeXtwentythree,
|
||||
/obj/item/storage/crayons,
|
||||
/obj/item/storage/crayons,
|
||||
/obj/item/toy/crayon/rainbow)
|
||||
/obj/item/toy/crayon/rainbow,
|
||||
/obj/item/toy/crayon/white,
|
||||
/obj/item/toy/crayon/white)
|
||||
crate_name = "art supply crate"
|
||||
crate_type = /obj/structure/closet/crate/wooden
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
antaglisting |= M.current.client
|
||||
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
if(M.client && (M.stat == DEAD || M.client.holder))
|
||||
if(M.client && (M.stat == DEAD || M.client.holder) && !istype(M, /mob/dead/new_player))
|
||||
antaglisting |= M.client
|
||||
|
||||
for(var/client/C in antaglisting)
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
|
||||
if(M.a_intent == INTENT_HARM)
|
||||
M.changeNext_move(CLICK_CD_RAPID)
|
||||
M.adjustStaminaLoss(-2) //Restore 2/3 of the stamina used assuming empty stam buffer. With proper stamina buffer management, this results in a net gain of +.5 stamina per click.
|
||||
if(warcry)
|
||||
M.say("[warcry]", ignore_spam = TRUE, forced = "north star warcry")
|
||||
.= FALSE
|
||||
|
||||
@@ -168,6 +168,7 @@ Contains:
|
||||
strip_delay = 130
|
||||
item_flags = NODROP
|
||||
brightness_on = 7
|
||||
resistance_flags = ACID_PROOF
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ert
|
||||
name = "emergency response team suit"
|
||||
@@ -179,6 +180,7 @@ Contains:
|
||||
armor = list("melee" = 65, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80)
|
||||
slowdown = 0
|
||||
strip_delay = 130
|
||||
resistance_flags = ACID_PROOF
|
||||
|
||||
//ERT Security
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ert/sec
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
desc = "A hood that protects the head and face from biological contaminants."
|
||||
permeability_coefficient = 0.01
|
||||
clothing_flags = THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 60, "fire" = 30, "acid" = 100)
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDEFACE
|
||||
resistance_flags = ACID_PROOF
|
||||
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
@@ -22,7 +22,7 @@
|
||||
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
slowdown = 1
|
||||
allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/pen, /obj/item/flashlight/pen, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 60, "fire" = 30, "acid" = 100)
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAUR
|
||||
strip_delay = 70
|
||||
equip_delay_other = 70
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
|
||||
/obj/item/clothing/suit/armor/reactive/stealth
|
||||
name = "reactive stealth armor"
|
||||
reactivearmor_cooldown_duration = 300
|
||||
reactivearmor_cooldown_duration = 65
|
||||
desc = "An experimental suit of armor that renders the wearer invisible on detection of imminent harm, and creates a decoy that runs away from the owner. You can't fight what you can't see."
|
||||
|
||||
/obj/item/clothing/suit/armor/reactive/stealth/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
@@ -153,7 +153,7 @@
|
||||
name = "reactive tesla armor"
|
||||
desc = "An experimental suit of armor with sensitive detectors hooked up to a huge capacitor grid, with emitters strutting out of it. Zap."
|
||||
siemens_coefficient = -1
|
||||
reactivearmor_cooldown_duration = 150
|
||||
reactivearmor_cooldown_duration = 20
|
||||
var/tesla_power = 25000
|
||||
var/tesla_range = 20
|
||||
var/tesla_flags = TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE
|
||||
@@ -187,7 +187,7 @@
|
||||
|
||||
/obj/item/clothing/suit/armor/reactive/repulse
|
||||
name = "reactive repulse armor"
|
||||
reactivearmor_cooldown_duration = 200
|
||||
reactivearmor_cooldown_duration = 20
|
||||
desc = "An experimental suit of armor that violently throws back attackers."
|
||||
|
||||
/obj/item/clothing/suit/armor/reactive/repulse/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
@@ -213,7 +213,7 @@
|
||||
|
||||
/obj/item/clothing/suit/armor/reactive/table
|
||||
name = "reactive table armor"
|
||||
reactivearmor_cooldown_duration = 500
|
||||
reactivearmor_cooldown_duration = 0
|
||||
desc = "If you can't beat the memes, embrace them."
|
||||
var/tele_range = 10
|
||||
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
SSblackbox.record_feedback("associative", "commendation", 1, list("commender" = "[user.real_name]", "commendee" = "[M.real_name]", "medal" = "[src]", "reason" = input))
|
||||
GLOB.commendations += "[user.real_name] awarded <b>[M.real_name]</b> the <span class='medaltext'>[name]</span>! \n- [input]"
|
||||
commended = TRUE
|
||||
desc += "<br>The inscription reads: [input] - [user.real_name]"
|
||||
desc += "<br>The inscription reads: [input] - [user.real_name]"
|
||||
log_game("<b>[key_name(M)]</b> was given the following commendation by <b>[key_name(user)]</b>: [input]")
|
||||
message_admins("<b>[key_name(M)]</b> was given the following commendation by <b>[key_name(user)]</b>: [input]")
|
||||
|
||||
@@ -157,6 +157,16 @@
|
||||
desc = "A bronze heart-shaped medal awarded for sacrifice. It is often awarded posthumously or for severe injury in the line of duty."
|
||||
icon_state = "bronze_heart"
|
||||
|
||||
/obj/item/clothing/accessory/medal/engineer
|
||||
name = "\"Shift's Best Electrician\" award"
|
||||
desc = "An award bestowed upon engineers who have excelled at keeping the station running in the best possible condition against all odds."
|
||||
icon_state = "engineer"
|
||||
|
||||
/obj/item/clothing/accessory/medal/greytide
|
||||
name = "\"Greytider of the shift\" award"
|
||||
desc = "An award for only the most annoying of assistants. Locked doors mean nothing to you and behaving is not in your vocabulary"
|
||||
icon_state = "greytide"
|
||||
|
||||
/obj/item/clothing/accessory/medal/ribbon
|
||||
name = "ribbon"
|
||||
desc = "A ribbon"
|
||||
@@ -167,6 +177,11 @@
|
||||
name = "\"cargo tech of the shift\" award"
|
||||
desc = "An award bestowed only upon those cargotechs who have exhibited devotion to their duty in keeping with the highest traditions of Cargonia."
|
||||
|
||||
/obj/item/clothing/accessory/medal/ribbon/medical_doctor
|
||||
name = "\"doctor of the shift\" award"
|
||||
desc = "An award bestowed only upon the most capable doctors who have upheld the Hippocratic Oath to the best of their ability"
|
||||
icon_state = "medical_doctor"
|
||||
|
||||
/obj/item/clothing/accessory/medal/silver
|
||||
name = "silver medal"
|
||||
desc = "A silver medal."
|
||||
@@ -280,7 +295,7 @@
|
||||
desc = "Fills you with the conviction of JUSTICE. Lawyers tend to want to show it to everyone they meet."
|
||||
icon_state = "lawyerbadge"
|
||||
item_color = "lawyerbadge"
|
||||
|
||||
|
||||
/obj/item/clothing/accessory/lawyers_badge/attack_self(mob/user)
|
||||
if(prob(1))
|
||||
user.say("The testimony contradicts the evidence!", forced = "attorney's badge")
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// Fixed to work with Citadel code. Apparently none of them had NO_MUTANTRACE flags.
|
||||
// I was pissy when I realised how to fix this because it's so fucking easy and nobody apparently had done it.
|
||||
|
||||
/obj/item/clothing/under/stripper_pink
|
||||
name = "pink stripper outfit"
|
||||
icon_state = "stripper_p"
|
||||
@@ -6,7 +9,7 @@
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/stripper_green
|
||||
name = "green stripper outfit"
|
||||
@@ -16,8 +19,7 @@
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/wedding/bride_orange
|
||||
name = "orange wedding dress"
|
||||
@@ -28,7 +30,7 @@
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/wedding/bride_purple
|
||||
name = "purple wedding dress"
|
||||
@@ -39,7 +41,7 @@
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/wedding/bride_blue
|
||||
name = "blue wedding dress"
|
||||
@@ -50,7 +52,7 @@
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/wedding/bride_red
|
||||
name = "red wedding dress"
|
||||
@@ -61,7 +63,7 @@
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/wedding/bride_white
|
||||
name = "white wedding dress"
|
||||
@@ -72,7 +74,7 @@
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/mankini
|
||||
name = "pink mankini"
|
||||
@@ -82,6 +84,7 @@
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
/*
|
||||
|
||||
/obj/item/clothing/under/psysuit
|
||||
@@ -126,7 +129,7 @@
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/russobluecamooutfit
|
||||
name = "russian blue camo"
|
||||
@@ -137,7 +140,7 @@
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/stilsuit
|
||||
name = "stillsuit"
|
||||
@@ -148,7 +151,7 @@
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/aviatoruniform
|
||||
name = "aviator uniform"
|
||||
@@ -159,7 +162,7 @@
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/bikersuit
|
||||
name = "biker's outfit"
|
||||
@@ -169,7 +172,7 @@
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/jacketsuit
|
||||
name = "richard's outfit"
|
||||
@@ -180,7 +183,7 @@
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
obj/item/clothing/under/mega
|
||||
name = "\improper DRN-001 suit"
|
||||
@@ -191,7 +194,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/proto
|
||||
name = "The Prototype Suit"
|
||||
@@ -202,7 +205,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/megax
|
||||
name = "\improper Maverick Hunter regalia"
|
||||
@@ -213,7 +216,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/joe
|
||||
name = "The Sniper Suit"
|
||||
@@ -224,7 +227,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/roll
|
||||
name = "\improper DRN-002 Dress"
|
||||
@@ -235,7 +238,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/gokugidown
|
||||
name = "turtle hermit undershirt"
|
||||
@@ -246,7 +249,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/gokugi
|
||||
name = "turtle hermit outfit"
|
||||
@@ -257,7 +260,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/doomguy
|
||||
name = "\improper Doomguy's pants"
|
||||
@@ -268,7 +271,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/vault13
|
||||
name = "vault 13 Jumpsuit"
|
||||
@@ -279,7 +282,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/vault
|
||||
name = "vault jumpsuit"
|
||||
@@ -290,7 +293,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/clownpiece
|
||||
name = "Clownpiece's Pierrot suit"
|
||||
@@ -301,7 +304,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/cia
|
||||
name = "casual IAA outfit"
|
||||
@@ -312,7 +315,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/greaser
|
||||
name = "greaser outfit"
|
||||
@@ -322,7 +325,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/greaser/New()
|
||||
var/greaser_colour = "default"
|
||||
@@ -341,6 +344,8 @@ obj/item/clothing/under/mega
|
||||
item_color = "greaser_[greaser_colour]"
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
|
||||
/obj/item/clothing/under/wintercasualwear
|
||||
name = "winter casualwear"
|
||||
@@ -351,8 +356,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/casualwear
|
||||
name = "spring casualwear"
|
||||
@@ -363,7 +367,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/keyholesweater
|
||||
name = "keyhole sweater"
|
||||
@@ -374,7 +378,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/casualhoodie
|
||||
name = "casual hoodie"
|
||||
@@ -385,8 +389,7 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/casualhoodie/skirt
|
||||
icon_state = "hoodieskirt"
|
||||
@@ -394,6 +397,8 @@ obj/item/clothing/under/mega
|
||||
item_color = "hoodieskirt"
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/*
|
||||
/obj/item/clothing/under/mummy_rags
|
||||
name = "mummy rags"
|
||||
@@ -427,3 +432,5 @@ obj/item/clothing/under/mega
|
||||
can_adjust = 0
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
|
||||
@@ -18,7 +18,14 @@
|
||||
"Your money can buy happiness!", \
|
||||
"Engage direct marketing!", \
|
||||
"Advertising is legalized lying! But don't let that put you off our great deals!", \
|
||||
"You don't want to buy anything? Yeah, well, I didn't want to buy your mom either.")
|
||||
"You don't want to buy anything? Yeah, well, I didn't want to buy your mom either.",
|
||||
"Gamers, rise up!",
|
||||
"Ok, now, this is epic.",
|
||||
"HUMAN FUNNY.",
|
||||
"But I'm already tracer!",
|
||||
"How do I vore people?",
|
||||
"ERP?",
|
||||
"Not epic bros...")
|
||||
|
||||
|
||||
/datum/round_event/brand_intelligence/announce(fake)
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
var/datum/job/jobdatum = SSjob.GetJob("Assistant")
|
||||
devil.job = jobdatum.title
|
||||
jobdatum.equip(devil)
|
||||
success_spawn = TRUE
|
||||
return SUCCESSFUL_SPAWN
|
||||
|
||||
|
||||
|
||||
@@ -79,12 +79,28 @@
|
||||
typepath = /datum/round_event/vent_clog/beer
|
||||
max_occurrences = 0
|
||||
|
||||
/datum/round_event/vent_clog/beer
|
||||
reagentsAmount = 100
|
||||
|
||||
/datum/round_event_control/vent_clog/plasma_decon
|
||||
name = "Plasma decontamination"
|
||||
typepath = /datum/round_event/vent_clog/plasma_decon
|
||||
max_occurrences = 0
|
||||
|
||||
/datum/round_event/vent_clog/beer
|
||||
/datum/round_event_control/vent_clog/female
|
||||
name = "FemCum stationwide"
|
||||
typepath = /datum/round_event/vent_clog/female
|
||||
max_occurrences = 0
|
||||
|
||||
/datum/round_event/vent_clog/female
|
||||
reagentsAmount = 100
|
||||
|
||||
/datum/round_event_control/vent_clog/male
|
||||
name = "Semen stationwide"
|
||||
typepath = /datum/round_event/vent_clog/male
|
||||
max_occurrences = 0
|
||||
|
||||
/datum/round_event/vent_clog/male
|
||||
reagentsAmount = 100
|
||||
|
||||
/datum/round_event/vent_clog/beer/announce()
|
||||
@@ -102,6 +118,30 @@
|
||||
foam.start()
|
||||
CHECK_TICK
|
||||
|
||||
/datum/round_event/vent_clog/male/start()
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
|
||||
if(vent && vent.loc)
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
R.my_atom = vent
|
||||
R.add_reagent("semen", reagentsAmount)
|
||||
|
||||
var/datum/effect_system/foam_spread/foam = new
|
||||
foam.set_up(200, get_turf(vent), R)
|
||||
foam.start()
|
||||
CHECK_TICK
|
||||
|
||||
/datum/round_event/vent_clog/female/start()
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
|
||||
if(vent && vent.loc)
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
R.my_atom = vent
|
||||
R.add_reagent("femcum", reagentsAmount)
|
||||
|
||||
var/datum/effect_system/foam_spread/foam = new
|
||||
foam.set_up(200, get_turf(vent), R)
|
||||
foam.start()
|
||||
CHECK_TICK
|
||||
|
||||
/datum/round_event/vent_clog/plasma_decon/announce()
|
||||
priority_announce("We are deploying an experimental plasma decontamination system. Please stand away from the vents and do not breathe the smoke that comes out.", "Central Command Update")
|
||||
|
||||
|
||||
@@ -90,6 +90,10 @@
|
||||
name = "Nuka Cola"
|
||||
list_reagents = list("nuka_cola" = 50)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/filled/syndicatebomb
|
||||
name = "Syndicat Bomb"
|
||||
list_reagents = list("syndicatebomb" = 50)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/reagent_containers/food/snacks/egg)) //breaking eggs
|
||||
var/obj/item/reagent_containers/food/snacks/egg/E = I
|
||||
|
||||
@@ -185,6 +185,17 @@
|
||||
icon_state = ""
|
||||
bitesize = 2
|
||||
|
||||
GLOBAL_VAR_INIT(frying_hardmode, TRUE)
|
||||
GLOBAL_VAR_INIT(frying_bad_chem_add_volume, TRUE)
|
||||
GLOBAL_LIST_INIT(frying_bad_chems, list(
|
||||
"bad_food" = 10,
|
||||
"clf3" = 2,
|
||||
"aranesp" = 2,
|
||||
"blackpowder" = 10,
|
||||
"phlogiston" = 3,
|
||||
"cyanide" = 3,
|
||||
))
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/deepfryholder/Initialize(mapload, obj/item/fried)
|
||||
. = ..()
|
||||
name = fried.name //We'll determine the other stuff when it's actually removed
|
||||
@@ -210,6 +221,13 @@
|
||||
else
|
||||
fried.forceMove(src)
|
||||
trash = fried
|
||||
if(!istype(fried, /obj/item/reagent_containers/food) && GLOB.frying_hardmode && GLOB.frying_bad_chems.len)
|
||||
var/R = rand(1, GLOB.frying_bad_chems.len)
|
||||
var/bad_chem = GLOB.frying_bad_chems[R]
|
||||
var/bad_chem_amount = GLOB.frying_bad_chems[bad_chem]
|
||||
if(GLOB.frying_bad_chem_add_volume)
|
||||
reagents.maximum_volume += bad_chem_amount
|
||||
reagents.add_reagent(bad_chem, bad_chem_amount)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/deepfryholder/Destroy()
|
||||
if(trash)
|
||||
|
||||
@@ -149,16 +149,16 @@
|
||||
icon_state = "pineapplepizza"
|
||||
slice_path = /obj/item/reagent_containers/food/snacks/pizzaslice/pineapple
|
||||
bonus_reagents = list("nutriment" = 6, "vitamin" = 6)
|
||||
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pineapple" = 2, "ham" = 2)
|
||||
foodtype = GRAIN | VEGETABLES | DAIRY | MEAT | FRUIT | PINEAPPLE
|
||||
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pineapple" = 6, "ham" = 2)
|
||||
foodtype = PINEAPPLE //Over powering tast of gods fruit
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/pizzaslice/pineapple
|
||||
name = "\improper Hawaiian pizza slice"
|
||||
desc = "A slice of delicious controversy."
|
||||
icon_state = "pineapplepizzaslice"
|
||||
filling_color = "#FF4500"
|
||||
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pineapple" = 2, "ham" = 2)
|
||||
foodtype = GRAIN | VEGETABLES | DAIRY | MEAT | FRUIT | PINEAPPLE
|
||||
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pineapple" = 6, "ham" = 2)
|
||||
foodtype = PINEAPPLE //Over powering tast of gods fruit
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/pizza/arnold
|
||||
name = "\improper Arnold pizza"
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
/turf/open/floor/holofloor/wood
|
||||
icon_state = "wood"
|
||||
tiled_dirt = FALSE
|
||||
|
||||
|
||||
/turf/open/floor/holofloor/snow
|
||||
gender = PLURAL
|
||||
name = "snow"
|
||||
@@ -133,6 +133,15 @@
|
||||
bullet_sizzle = TRUE
|
||||
bullet_bounce_sound = null
|
||||
tiled_dirt = FALSE
|
||||
baseturfs = /turf/open/floor/holofloor/snow
|
||||
|
||||
/turf/open/floor/holofloor/snow/attack_hand(mob/living/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] scroops up some snow from [src].</span>", "<span class='notice'>You scoop up some snow from [src].</span>")
|
||||
var/obj/item/toy/snowball/S = new(get_turf(src))
|
||||
user.put_in_hands(S)
|
||||
|
||||
/turf/open/floor/holofloor/snow/cold
|
||||
initial_gas_mix = "nob=7500;TEMP=2.7"
|
||||
@@ -143,3 +152,22 @@
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "asteroid"
|
||||
tiled_dirt = FALSE
|
||||
|
||||
/turf/open/floor/holofloor/ice
|
||||
name = "ice sheet"
|
||||
desc = "A sheet of solid ice. Looks slippery."
|
||||
icon = 'icons/turf/floors/ice_turf.dmi'
|
||||
icon_state = "unsmooth"
|
||||
baseturfs = /turf/open/floor/holofloor/ice
|
||||
slowdown = 1
|
||||
footstep = FOOTSTEP_FLOOR
|
||||
|
||||
/turf/open/floor/holofloor/ice/smooth
|
||||
icon_state = "smooth"
|
||||
smooth = SMOOTH_MORE | SMOOTH_BORDER
|
||||
canSmoothWith = list(/turf/open/floor/plating/ice/smooth, /turf/open/floor/plating/ice, /turf/open/floor/holofloor/ice)
|
||||
baseturfs = /turf/open/floor/holofloor/ice/smooth
|
||||
|
||||
/turf/open/floor/holofloor/ice/Initialize()
|
||||
. = ..()
|
||||
MakeSlippery(TURF_WET_PERMAFROST, INFINITY, 0, INFINITY, TRUE)
|
||||
|
||||
@@ -136,6 +136,7 @@
|
||||
|
||||
spawn(30)
|
||||
if(!QDELETED(src))
|
||||
investigate_log("[key_name(user)] released a killer tomato at [COORD(src)]", INVESTIGATE_BOTANY)
|
||||
var/mob/living/simple_animal/hostile/killertomato/K = new /mob/living/simple_animal/hostile/killertomato(get_turf(src.loc))
|
||||
K.maxHealth += round(seed.endurance / 3)
|
||||
K.melee_damage_lower += round(seed.potency / 10)
|
||||
|
||||
@@ -24,10 +24,7 @@
|
||||
lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi'
|
||||
volume = 100
|
||||
|
||||
/obj/item/reagent_containers/spray/weedspray/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("weedkiller", 100)
|
||||
list_reagents = list("weedkiller" = 100)
|
||||
|
||||
/obj/item/reagent_containers/spray/weedspray/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is huffing [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
@@ -42,10 +39,7 @@
|
||||
lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi'
|
||||
volume = 100
|
||||
|
||||
/obj/item/reagent_containers/spray/pestspray/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("pestkiller", 100)
|
||||
list_reagents = list("pestkiller" = 100)
|
||||
|
||||
/obj/item/reagent_containers/spray/pestspray/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is huffing [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
@@ -137,6 +131,7 @@
|
||||
else
|
||||
var/turf/user_turf = get_turf(user)
|
||||
var/dir_to_target = get_dir(user_turf, get_turf(A))
|
||||
var/stam_gain = 0
|
||||
swiping = TRUE
|
||||
var/static/list/scythe_slash_angles = list(0, 45, 90, -45, -90)
|
||||
for(var/i in scythe_slash_angles)
|
||||
@@ -144,7 +139,10 @@
|
||||
for(var/obj/structure/spacevine/V in T)
|
||||
if(user.Adjacent(V))
|
||||
melee_attack_chain(user, V)
|
||||
stam_gain += 5 //should be hitcost
|
||||
swiping = FALSE
|
||||
stam_gain += 2 //Initial hitcost
|
||||
user.adjustStaminaLoss(-stam_gain)
|
||||
|
||||
// *************************************
|
||||
// Nutrient defines for hydroponics
|
||||
@@ -153,71 +151,45 @@
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/nutrient
|
||||
name = "bottle of nutrient"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
volume = 50
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
amount_per_transfer_from_this = 10
|
||||
possible_transfer_amounts = list(1,2,5,10,15,25,50)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/nutrient/Initialize()
|
||||
. = ..()
|
||||
src.pixel_x = rand(-5, 5)
|
||||
src.pixel_y = rand(-5, 5)
|
||||
pixel_x = rand(-5, 5)
|
||||
pixel_y = rand(-5, 5)
|
||||
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/nutrient/ez
|
||||
name = "bottle of E-Z-Nutrient"
|
||||
desc = "Contains a fertilizer that causes mild mutations with each harvest."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/nutrient/ez/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("eznutriment", 50)
|
||||
list_reagents = list("eznutriment" = 50)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/nutrient/l4z
|
||||
name = "bottle of Left 4 Zed"
|
||||
desc = "Contains a fertilizer that limits plant yields to no more than one and causes significant mutations in plants."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/nutrient/l4z/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("left4zednutriment", 50)
|
||||
list_reagents = list("left4zednutriment" = 50)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/nutrient/rh
|
||||
name = "bottle of Robust Harvest"
|
||||
desc = "Contains a fertilizer that increases the yield of a plant by 30% while causing no mutations."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/nutrient/rh/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("robustharvestnutriment", 50)
|
||||
list_reagents = list("robustharvestnutriment" = 50)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/nutrient/empty
|
||||
name = "bottle"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/killer
|
||||
name = "bottle"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
volume = 50
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
amount_per_transfer_from_this = 10
|
||||
possible_transfer_amounts = list(1,2,5,10,15,25,50)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/killer/weedkiller
|
||||
name = "bottle of weed killer"
|
||||
desc = "Contains a herbicide."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/killer/weedkiller/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("weedkiller", 50)
|
||||
list_reagents = list("weedkiller" = 50)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/killer/pestkiller
|
||||
name = "bottle of pest spray"
|
||||
desc = "Contains a pesticide."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/killer/pestkiller/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("pestkiller", 50)
|
||||
list_reagents = list("pestkiller" = 50)
|
||||
@@ -127,6 +127,8 @@
|
||||
return 0
|
||||
if(!CONFIG_GET(flag/use_age_restriction_for_jobs))
|
||||
return 0
|
||||
if(C.prefs.db_flags & DB_FLAG_EXEMPT)
|
||||
return 0
|
||||
if(!isnum(C.player_age))
|
||||
return 0 //This is only a number if the db connection is established, otherwise it is text: "Requires database", meaning these restrictions cannot be enforced
|
||||
if(!isnum(minimal_player_age))
|
||||
|
||||
@@ -19,22 +19,24 @@
|
||||
new /datum/data/mining_equipment("Soap", /obj/item/soap/nanotrasen, 200),
|
||||
new /datum/data/mining_equipment("Laser Pointer", /obj/item/laser_pointer, 300),
|
||||
new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300),
|
||||
new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/hivelordstabilizer, 400),
|
||||
new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 400),
|
||||
new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400),
|
||||
new /datum/data/mining_equipment("GAR Meson Scanners", /obj/item/clothing/glasses/meson/gar, 500),
|
||||
new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500),
|
||||
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/card/mining_point_card, 500),
|
||||
new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 500),
|
||||
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 600),
|
||||
new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600),
|
||||
new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 750),
|
||||
new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/hivelordstabilizer, 750),
|
||||
new /datum/data/mining_equipment("Jaunter", /obj/item/wormhole_jaunter, 750),
|
||||
new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/twohanded/required/kinetic_crusher, 750),
|
||||
new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 750),
|
||||
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 800),
|
||||
new /datum/data/mining_equipment("Burn First-Aid Kit", /obj/item/storage/firstaid/fire, 800),
|
||||
new /datum/data/mining_equipment("First-Aid Kit", /obj/item/storage/firstaid/regular, 800),
|
||||
new /datum/data/mining_equipment("First-Aid Kit", /obj/item/storage/firstaid/regular, 800),
|
||||
new /datum/data/mining_equipment("Advanced Scanner", /obj/item/t_scanner/adv_mining_scanner, 800),
|
||||
new /datum/data/mining_equipment("Resonator", /obj/item/resonator, 800),
|
||||
new /datum/data/mining_equipment("Mini Extinguisher", /obj/item/extinguisher/mini, 1000),
|
||||
new /datum/data/mining_equipment("Fulton Pack", /obj/item/extraction_pack, 1000),
|
||||
new /datum/data/mining_equipment("Lazarus Injector", /obj/item/lazarus_injector, 1000),
|
||||
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/pickaxe/silver, 1000),
|
||||
@@ -59,7 +61,8 @@
|
||||
new /datum/data/mining_equipment("KA Range Increase", /obj/item/borg/upgrade/modkit/range, 1000),
|
||||
new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
|
||||
new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1000),
|
||||
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000)
|
||||
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000),
|
||||
new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000)
|
||||
)
|
||||
|
||||
/datum/data/mining_equipment
|
||||
@@ -314,4 +317,4 @@
|
||||
new /obj/item/clothing/mask/gas/seva(drop_location)
|
||||
|
||||
SSblackbox.record_feedback("tally", "suit_voucher_redeemed", 1, selection)
|
||||
qdel(voucher)
|
||||
qdel(voucher)
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
OB.brainmob = src
|
||||
forceMove(OB)
|
||||
|
||||
|
||||
/mob/living/brain/proc/create_dna()
|
||||
stored_dna = new /datum/dna/stored(src)
|
||||
if(!stored_dna.species)
|
||||
@@ -28,6 +27,7 @@
|
||||
death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA
|
||||
if(mind) //You aren't allowed to return to brains that don't exist
|
||||
mind.current = null
|
||||
mind.active = FALSE //No one's using it anymore.
|
||||
ghostize() //Ghostize checks for key so nothing else is necessary.
|
||||
container = null
|
||||
return ..()
|
||||
|
||||
@@ -36,7 +36,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
||||
|
||||
/obj/item/mmi/posibrain/proc/ping_ghosts(msg, newlymade)
|
||||
if(newlymade || GLOB.posibrain_notify_cooldown <= world.time)
|
||||
notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/effects/ghost2.ogg':null, enter_link = "<a href=?src=[REF(src)];activate=1>(Click to enter)</a>", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_POSIBRAIN)
|
||||
notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/misc/server-ready.ogg':null, enter_link = "<a href=?src=[REF(src)];activate=1>(Click to enter)</a>", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_POSIBRAIN)
|
||||
if(!newlymade)
|
||||
GLOB.posibrain_notify_cooldown = world.time + askDelay
|
||||
|
||||
|
||||
@@ -188,6 +188,8 @@
|
||||
if(thrown_thing)
|
||||
visible_message("<span class='danger'>[src] has thrown [thrown_thing].</span>")
|
||||
src.log_message("has thrown [thrown_thing]", LOG_ATTACK)
|
||||
do_attack_animation(target, no_effect = 1)
|
||||
playsound(loc, 'sound/weapons/punchmiss.ogg', 50, 1, -1)
|
||||
newtonian_move(get_dir(target, src))
|
||||
thrown_thing.throw_at(target, thrown_thing.throw_range, thrown_thing.throw_speed, src)
|
||||
|
||||
|
||||
@@ -178,7 +178,6 @@
|
||||
parts -= picked
|
||||
if(updating_health)
|
||||
updatehealth()
|
||||
update_stamina()
|
||||
if(update)
|
||||
update_damage_overlays()
|
||||
update_stamina() //CIT CHANGE - makes sure update_stamina() always gets called after a health update
|
||||
|
||||
@@ -599,11 +599,7 @@
|
||||
|
||||
//Check for dresscode violations
|
||||
if(istype(head, /obj/item/clothing/head/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/syndi) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi))
|
||||
threatcount += 6 //fuk u antags <3
|
||||
|
||||
//Check for nonhuman scum
|
||||
if(dna && dna.species.id && dna.species.id != "human")
|
||||
threatcount += 1
|
||||
threatcount += 4 //fuk u antags <3 //no you
|
||||
|
||||
//mindshield implants imply trustworthyness
|
||||
if(has_trait(TRAIT_MINDSHIELD))
|
||||
|
||||
@@ -272,7 +272,10 @@
|
||||
"<span class='userdanger'>[M] disarmed [src]!</span>")
|
||||
else
|
||||
playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1)
|
||||
Knockdown(100)
|
||||
if(!lying) //CITADEL EDIT
|
||||
Knockdown(100, TRUE, FALSE, 30, 25)
|
||||
else
|
||||
Knockdown(100)
|
||||
log_combat(M, src, "tackled")
|
||||
visible_message("<span class='danger'>[M] has tackled down [src]!</span>", \
|
||||
"<span class='userdanger'>[M] has tackled down [src]!</span>")
|
||||
|
||||
@@ -92,3 +92,5 @@
|
||||
limbs_id = "lizard"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,DIGITIGRADE)
|
||||
inherent_traits = list(TRAIT_NOGUNS,TRAIT_NOBREATH)
|
||||
burnmod = 0.9
|
||||
brutemod = 0.9
|
||||
@@ -23,7 +23,7 @@
|
||||
var/bprv = handle_bodyparts()
|
||||
if(bprv & BODYPART_LIFE_UPDATE_HEALTH)
|
||||
updatehealth()
|
||||
update_stamina()
|
||||
update_stamina()
|
||||
|
||||
if(stat != DEAD)
|
||||
handle_brain_damage()
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
adjustStaminaLoss(-stamina, FALSE)
|
||||
if(updating_health)
|
||||
updatehealth()
|
||||
update_stamina()
|
||||
update_stamina()
|
||||
|
||||
// damage ONE external organ, organ gets randomly selected from damaged ones.
|
||||
/mob/living/proc/take_bodypart_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE)
|
||||
@@ -252,7 +252,7 @@
|
||||
adjustStaminaLoss(stamina, FALSE)
|
||||
if(updating_health)
|
||||
updatehealth()
|
||||
update_stamina()
|
||||
update_stamina()
|
||||
|
||||
// heal MANY bodyparts, in random order
|
||||
/mob/living/proc/heal_overall_damage(brute = 0, burn = 0, stamina = 0, only_robotic = FALSE, only_organic = TRUE, updating_health = TRUE)
|
||||
@@ -261,7 +261,7 @@
|
||||
adjustStaminaLoss(-stamina, FALSE)
|
||||
if(updating_health)
|
||||
updatehealth()
|
||||
update_stamina()
|
||||
update_stamina()
|
||||
|
||||
// damage MANY bodyparts, in random order
|
||||
/mob/living/proc/take_overall_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE)
|
||||
@@ -270,7 +270,7 @@
|
||||
adjustStaminaLoss(stamina, FALSE)
|
||||
if(updating_health)
|
||||
updatehealth()
|
||||
update_stamina()
|
||||
update_stamina()
|
||||
|
||||
//heal up to amount damage, in a given order
|
||||
/mob/living/proc/heal_ordered_damage(amount, list/damage_types)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user