Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into Ghommie-cit765
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -12,7 +12,6 @@
|
||||
/turf/open/lava/smooth{
|
||||
desc = "Looks hot.";
|
||||
luminosity = 5;
|
||||
name = "lava";
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid/level_four)
|
||||
@@ -37,7 +36,6 @@
|
||||
/turf/open/lava/smooth{
|
||||
desc = "Looks hot.";
|
||||
luminosity = 5;
|
||||
name = "lava";
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid/level_three)
|
||||
@@ -116,7 +114,7 @@
|
||||
},
|
||||
/obj/item/veilrender/honkrender,
|
||||
/obj/item/clothing/mask/gas/clown_hat,
|
||||
/obj/item/organ/heart/demon,
|
||||
/obj/item/organ/heart/cursed,
|
||||
/turf/open/floor/engine/cult{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
@@ -188,9 +186,7 @@
|
||||
amount = 25
|
||||
},
|
||||
/obj/item/coin/antagtoken,
|
||||
/obj/item/book/granter/spell/summonitem{
|
||||
name = "an extremely flamboyant book"
|
||||
},
|
||||
/obj/item/book/granter/spell/smoke,
|
||||
/turf/open/floor/engine/cult{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
@@ -239,7 +235,6 @@
|
||||
/area/awaymission/caves/BMP_asteroid/level_three)
|
||||
"aM" = (
|
||||
/obj/structure/ladder/unbreakable{
|
||||
anchored = 1;
|
||||
height = 1;
|
||||
id = "minedeep"
|
||||
},
|
||||
@@ -266,7 +261,6 @@
|
||||
/area/awaymission/caves/BMP_asteroid/level_three)
|
||||
"aP" = (
|
||||
/obj/structure/ladder/unbreakable{
|
||||
anchored = 1;
|
||||
height = 1;
|
||||
id = "dungeon";
|
||||
name = "rusty ladder"
|
||||
@@ -317,7 +311,6 @@
|
||||
/turf/open/lava/smooth{
|
||||
desc = "Looks hot.";
|
||||
luminosity = 5;
|
||||
name = "lava";
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid/level_four)
|
||||
@@ -356,7 +349,11 @@
|
||||
/area/awaymission/caves/BMP_asteroid/level_four)
|
||||
"ba" = (
|
||||
/obj/structure/destructible/cult/talisman,
|
||||
/obj/item/book/granter/martial/plasma_fist,
|
||||
/obj/item/storage/belt/champion,
|
||||
/obj/item/melee/sabre{
|
||||
icon_state = "cultblade";
|
||||
name = "blood-red sabre"
|
||||
},
|
||||
/turf/open/floor/engine/cult{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
@@ -446,12 +443,11 @@
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid/level_four)
|
||||
"bo" = (
|
||||
/obj/structure/flora/rock,
|
||||
/obj/item/soulstone/anybody,
|
||||
/turf/open/floor/plating/asteroid/basalt{
|
||||
/obj/structure/trap/chill,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid/level_three)
|
||||
/area/awaymission/caves/BMP_asteroid/level_four)
|
||||
"bp" = (
|
||||
/obj/machinery/gateway{
|
||||
dir = 10
|
||||
@@ -516,8 +512,8 @@
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid/level_three)
|
||||
"by" = (
|
||||
/obj/item/mjollnir,
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/nurse,
|
||||
/obj/item/nullrod/hammmer,
|
||||
/turf/open/floor/plating/asteroid/basalt{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
@@ -531,8 +527,8 @@
|
||||
/area/awaymission/caves/BMP_asteroid/level_four)
|
||||
"bA" = (
|
||||
/obj/structure/destructible/cult/tome,
|
||||
/obj/item/necromantic_stone,
|
||||
/obj/effect/decal/cleanable/blood,
|
||||
/obj/item/immortality_talisman,
|
||||
/turf/open/floor/engine/cult{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
@@ -563,7 +559,6 @@
|
||||
/area/awaymission/caves/BMP_asteroid/level_four)
|
||||
"bF" = (
|
||||
/obj/structure/ladder/unbreakable{
|
||||
anchored = 1;
|
||||
height = 2;
|
||||
id = "dungeon";
|
||||
name = "rusty ladder"
|
||||
@@ -573,7 +568,9 @@
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid/level_three)
|
||||
"bG" = (
|
||||
/obj/item/gun/ballistic/automatic/pistol/deagle/gold,
|
||||
/obj/item/gun/ballistic/revolver/reverse{
|
||||
name = "suspicious .357 revovler"
|
||||
},
|
||||
/turf/open/floor/plating/asteroid/basalt/lava{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
@@ -581,12 +578,14 @@
|
||||
"bH" = (
|
||||
/obj/effect/decal/remains/human,
|
||||
/obj/item/clothing/under/misc/patriotsuit,
|
||||
/obj/structure/trap/chill,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid/level_four)
|
||||
"bI" = (
|
||||
/obj/item/bedsheet/patriot,
|
||||
/obj/structure/trap/chill,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
@@ -606,7 +605,6 @@
|
||||
/turf/open/lava/smooth{
|
||||
desc = "Looks hot.";
|
||||
luminosity = 5;
|
||||
name = "lava";
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
@@ -617,7 +615,6 @@
|
||||
/turf/open/lava/smooth{
|
||||
desc = "Looks hot.";
|
||||
luminosity = 5;
|
||||
name = "lava";
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid/level_two)
|
||||
@@ -734,7 +731,6 @@
|
||||
/area/awaymission/caves/BMP_asteroid/level_two)
|
||||
"ce" = (
|
||||
/obj/structure/ladder/unbreakable{
|
||||
anchored = 1;
|
||||
height = 1;
|
||||
id = "mineintro"
|
||||
},
|
||||
@@ -1030,7 +1026,7 @@
|
||||
/area/awaymission/caves/research)
|
||||
"cX" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/melee/baton,
|
||||
/obj/item/gun/energy/temperature,
|
||||
/turf/open/floor/plasteel{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
@@ -1093,9 +1089,6 @@
|
||||
/obj/structure/closet/secure_closet/miner{
|
||||
name = "weapon equipment"
|
||||
},
|
||||
/obj/item/grenade/syndieminibomb/concussion,
|
||||
/obj/item/grenade/syndieminibomb/concussion,
|
||||
/obj/item/grenade/syndieminibomb/concussion,
|
||||
/turf/open/floor/plasteel{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
@@ -1122,7 +1115,6 @@
|
||||
/area/awaymission/caves/BMP_asteroid/level_two)
|
||||
"dj" = (
|
||||
/obj/structure/ladder/unbreakable{
|
||||
anchored = 1;
|
||||
height = 2;
|
||||
id = "minedeep"
|
||||
},
|
||||
@@ -1195,7 +1187,6 @@
|
||||
"dw" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet,
|
||||
/obj/effect/landmark/awaystart,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid/level_two)
|
||||
"dx" = (
|
||||
@@ -1376,35 +1367,35 @@
|
||||
"eg" = (
|
||||
/obj/effect/decal/cleanable/robot_debris/old,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"eh" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/radio,
|
||||
/obj/item/radio,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"ei" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/paper_bin,
|
||||
/obj/item/pen,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"ej" = (
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
"ek" = (
|
||||
/obj/structure/window{
|
||||
icon_state = "window";
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/simple_animal/hostile/mining_drone,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"el" = (
|
||||
/obj/structure/closet/secure_closet/personal,
|
||||
/obj/item/gun/energy/laser/captain/scattershot,
|
||||
/turf/open/floor/wood,
|
||||
/area/awaymission/caves/northblock)
|
||||
/obj/machinery/gateway{
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"em" = (
|
||||
/obj/structure/closet/secure_closet/personal,
|
||||
/turf/open/floor/wood{
|
||||
@@ -1433,20 +1424,19 @@
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"er" = (
|
||||
/obj/structure/chair/stool,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"es" = (
|
||||
/obj/structure/window{
|
||||
icon_state = "window";
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/window,
|
||||
/mob/living/simple_animal/hostile/mining_drone,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"et" = (
|
||||
/obj/effect/decal/cleanable/shreds,
|
||||
/turf/open/floor/plating{
|
||||
@@ -1467,37 +1457,47 @@
|
||||
/obj/item/mining_scanner,
|
||||
/obj/item/mining_scanner,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"ex" = (
|
||||
/obj/structure/closet/secure_closet/miner,
|
||||
/obj/effect/decal/cleanable/cobweb,
|
||||
/obj/item/survivalcapsule,
|
||||
/obj/item/extinguisher/mini,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
"ey" = (
|
||||
/obj/structure/reagent_dispensers/watertank,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
"ez" = (
|
||||
/obj/machinery/light/small/built{
|
||||
dir = 1
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-4"
|
||||
},
|
||||
/obj/machinery/power/port_gen/pacman,
|
||||
/obj/item/wrench,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"ey" = (
|
||||
/obj/machinery/suit_storage_unit/mining{
|
||||
desc = "An industrial unit made to hold space suits. Age has seemed to rust the sliding door mechanisms, making it difficult to open.";
|
||||
name = "rusted suit storage unit"
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"ez" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-8"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"eA" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/paper/fluff/awaymissions/caves/work_notice,
|
||||
/obj/machinery/light/small/built{
|
||||
dir = 1
|
||||
},
|
||||
/obj/item/stack/sheet/mineral/plasma,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"eB" = (
|
||||
/obj/structure/barricade/wooden,
|
||||
/obj/machinery/gateway{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"eC" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/gps/mining,
|
||||
@@ -1506,17 +1506,19 @@
|
||||
/obj/item/clothing/glasses/meson,
|
||||
/obj/item/clothing/glasses/meson,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"eD" = (
|
||||
/obj/structure/closet/secure_closet/miner,
|
||||
/obj/item/survivalcapsule,
|
||||
/obj/item/extinguisher/mini,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"eE" = (
|
||||
/obj/effect/landmark/awaystart,
|
||||
/obj/machinery/gateway{
|
||||
dir = 5
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"eF" = (
|
||||
/turf/closed/wall,
|
||||
/area/awaymission/caves/listeningpost)
|
||||
@@ -1526,7 +1528,7 @@
|
||||
"eH" = (
|
||||
/obj/machinery/vending/sustenance,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"eI" = (
|
||||
/obj/structure/closet/crate/trashcart,
|
||||
/obj/item/switchblade,
|
||||
@@ -1546,7 +1548,7 @@
|
||||
"eL" = (
|
||||
/obj/machinery/vending/sovietsoda,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"eM" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 8
|
||||
@@ -1593,7 +1595,7 @@
|
||||
"eR" = (
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"eS" = (
|
||||
/obj/machinery/light/small/built,
|
||||
/obj/machinery/suit_storage_unit/mining{
|
||||
@@ -1601,11 +1603,11 @@
|
||||
name = "rusted suit storage unit"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"eT" = (
|
||||
/obj/structure/closet/emcloset,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"eU" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/toolbox/mechanical,
|
||||
@@ -1651,16 +1653,11 @@
|
||||
/area/awaymission/caves/BMP_asteroid/level_two)
|
||||
"fc" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/paper/fluff/awaymissions/caves/shipment_receipt,
|
||||
/obj/item/gun/energy/laser/captain/scattershot,
|
||||
/obj/item/gun/energy/laser/captain/scattershot,
|
||||
/obj/item/gun/energy/laser,
|
||||
/obj/item/grenade/syndieminibomb/concussion,
|
||||
/obj/item/grenade/syndieminibomb/concussion,
|
||||
/obj/item/grenade/syndieminibomb/concussion,
|
||||
/obj/item/slimepotion/fireproof,
|
||||
/obj/item/slimepotion/fireproof,
|
||||
/obj/item/clothing/glasses/thermal,
|
||||
/obj/item/gun/energy/laser,
|
||||
/obj/item/survivalcapsule,
|
||||
/obj/item/kitchen/knife/combat/survival,
|
||||
/obj/item/kitchen/knife/combat/survival,
|
||||
/turf/open/floor/plating/asteroid/basalt{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
@@ -1708,11 +1705,14 @@
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid/level_two)
|
||||
"fk" = (
|
||||
/obj/item/grenade/syndieminibomb/concussion,
|
||||
/turf/open/floor/plating/asteroid/basalt{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
/obj/machinery/gateway{
|
||||
dir = 8
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid/level_two)
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"fl" = (
|
||||
/obj/effect/decal/remains/human,
|
||||
/turf/open/floor/plating/asteroid/basalt{
|
||||
@@ -1726,10 +1726,11 @@
|
||||
/obj/structure/closet/crate{
|
||||
icon_state = "crateopen"
|
||||
},
|
||||
/obj/item/paper/fluff/awaymissions/caves/shipment_receipt,
|
||||
/obj/item/organ/eyes/robotic/thermals,
|
||||
/obj/item/gun/energy/laser/captain/scattershot,
|
||||
/obj/item/slimepotion/fireproof,
|
||||
/obj/item/gun/energy/laser,
|
||||
/obj/item/gun/energy/laser,
|
||||
/obj/item/survivalcapsule,
|
||||
/obj/item/kitchen/knife/combat/survival,
|
||||
/obj/item/kitchen/knife/combat/survival,
|
||||
/turf/open/floor/plating/asteroid/basalt{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
@@ -1791,11 +1792,14 @@
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid/level_two)
|
||||
"fw" = (
|
||||
/obj/item/gun/energy/laser/captain/scattershot,
|
||||
/turf/open/floor/plating/asteroid/basalt{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
/obj/machinery/gateway/centeraway{
|
||||
calibrated = 0
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid/level_two)
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"fx" = (
|
||||
/obj/effect/bump_teleporter{
|
||||
id = "mineintroup";
|
||||
@@ -1968,7 +1972,6 @@
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
"ga" = (
|
||||
/obj/structure/ladder/unbreakable{
|
||||
anchored = 1;
|
||||
height = 2;
|
||||
id = "mineintro"
|
||||
},
|
||||
@@ -2035,11 +2038,14 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/BMP_asteroid)
|
||||
"gk" = (
|
||||
/obj/effect/landmark/awaystart,
|
||||
/turf/open/floor/plating/asteroid/basalt{
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
/obj/machinery/gateway{
|
||||
dir = 4
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid/level_two)
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"gl" = (
|
||||
/obj/item/trash/plate,
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -2260,7 +2266,6 @@
|
||||
/turf/open/lava/smooth{
|
||||
desc = "Looks hot.";
|
||||
luminosity = 5;
|
||||
name = "lava";
|
||||
initial_gas_mix = "n2=23;o2=14"
|
||||
},
|
||||
/area/awaymission/caves/BMP_asteroid/level_four)
|
||||
@@ -2276,6 +2281,41 @@
|
||||
/obj/effect/baseturf_helper/asteroid/basalt,
|
||||
/turf/closed/wall,
|
||||
/area/awaymission/caves/northblock)
|
||||
"tk" = (
|
||||
/obj/machinery/gateway{
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"CY" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"GV" = (
|
||||
/obj/structure/barricade/wooden,
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"Hp" = (
|
||||
/obj/machinery/gateway,
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/listeningpost)
|
||||
"If" = (
|
||||
/obj/machinery/gateway{
|
||||
dir = 10
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/caves/listeningpost)
|
||||
|
||||
(1,1,1) = {"
|
||||
aa
|
||||
@@ -6581,7 +6621,7 @@ dO
|
||||
dP
|
||||
dI
|
||||
dZ
|
||||
el
|
||||
dA
|
||||
dt
|
||||
bL
|
||||
bL
|
||||
@@ -10180,13 +10220,13 @@ bL
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
dX
|
||||
dX
|
||||
dW
|
||||
dW
|
||||
dW
|
||||
dW
|
||||
dW
|
||||
eG
|
||||
eG
|
||||
eF
|
||||
eF
|
||||
eF
|
||||
eF
|
||||
eF
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
@@ -10432,18 +10472,18 @@ bL
|
||||
bL
|
||||
bM
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
dX
|
||||
eG
|
||||
eG
|
||||
eF
|
||||
eF
|
||||
eG
|
||||
eG
|
||||
ex
|
||||
eD
|
||||
eD
|
||||
eD
|
||||
eD
|
||||
dX
|
||||
eG
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
@@ -10689,18 +10729,18 @@ bL
|
||||
bL
|
||||
bM
|
||||
bM
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
dW
|
||||
eF
|
||||
el
|
||||
fk
|
||||
If
|
||||
eJ
|
||||
eF
|
||||
ey
|
||||
ev
|
||||
ev
|
||||
ev
|
||||
eJ
|
||||
eJ
|
||||
eJ
|
||||
eR
|
||||
dX
|
||||
eG
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
@@ -10946,18 +10986,18 @@ bL
|
||||
bL
|
||||
bL
|
||||
bM
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
dX
|
||||
eG
|
||||
eB
|
||||
fw
|
||||
Hp
|
||||
CY
|
||||
GV
|
||||
ez
|
||||
eE
|
||||
ev
|
||||
ev
|
||||
eO
|
||||
eJ
|
||||
eJ
|
||||
eS
|
||||
dX
|
||||
eG
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
@@ -11203,18 +11243,18 @@ bL
|
||||
bL
|
||||
bL
|
||||
bM
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
dX
|
||||
eG
|
||||
eE
|
||||
gk
|
||||
tk
|
||||
eJ
|
||||
eG
|
||||
eA
|
||||
ev
|
||||
ev
|
||||
ev
|
||||
eJ
|
||||
eJ
|
||||
eJ
|
||||
eT
|
||||
dW
|
||||
eF
|
||||
bL
|
||||
bV
|
||||
bV
|
||||
@@ -11460,17 +11500,17 @@ bL
|
||||
bL
|
||||
bL
|
||||
bM
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
bL
|
||||
dX
|
||||
ev
|
||||
ev
|
||||
ev
|
||||
ev
|
||||
ev
|
||||
eF
|
||||
eF
|
||||
eG
|
||||
eG
|
||||
eG
|
||||
eG
|
||||
eJ
|
||||
eJ
|
||||
eJ
|
||||
eJ
|
||||
eJ
|
||||
eF
|
||||
eG
|
||||
eG
|
||||
@@ -11719,15 +11759,15 @@ bL
|
||||
bV
|
||||
bV
|
||||
bL
|
||||
dW
|
||||
dX
|
||||
dX
|
||||
dX
|
||||
eB
|
||||
dW
|
||||
eF
|
||||
eG
|
||||
eG
|
||||
eG
|
||||
eW
|
||||
eF
|
||||
eH
|
||||
eL
|
||||
ev
|
||||
eJ
|
||||
eW
|
||||
eN
|
||||
eJ
|
||||
@@ -11976,11 +12016,11 @@ bL
|
||||
bV
|
||||
bV
|
||||
bL
|
||||
dW
|
||||
eF
|
||||
eg
|
||||
eq
|
||||
ev
|
||||
ev
|
||||
eJ
|
||||
eJ
|
||||
eF
|
||||
eF
|
||||
eF
|
||||
@@ -12233,11 +12273,11 @@ bL
|
||||
bV
|
||||
bV
|
||||
bL
|
||||
dX
|
||||
eG
|
||||
eh
|
||||
ej
|
||||
fm
|
||||
eg
|
||||
ev
|
||||
eJ
|
||||
eF
|
||||
eI
|
||||
eM
|
||||
@@ -12490,11 +12530,11 @@ bL
|
||||
bV
|
||||
bV
|
||||
bL
|
||||
dX
|
||||
eG
|
||||
ei
|
||||
er
|
||||
ej
|
||||
ev
|
||||
fm
|
||||
eJ
|
||||
eG
|
||||
eJ
|
||||
eN
|
||||
@@ -12624,7 +12664,7 @@ ae
|
||||
ac
|
||||
ac
|
||||
ac
|
||||
bo
|
||||
aj
|
||||
bv
|
||||
ac
|
||||
ag
|
||||
@@ -12747,11 +12787,11 @@ bL
|
||||
bV
|
||||
bV
|
||||
bL
|
||||
dX
|
||||
ej
|
||||
ej
|
||||
ev
|
||||
ev
|
||||
eG
|
||||
fm
|
||||
fm
|
||||
eJ
|
||||
eJ
|
||||
eG
|
||||
eJ
|
||||
eO
|
||||
@@ -13004,7 +13044,7 @@ bL
|
||||
bV
|
||||
bV
|
||||
bL
|
||||
dW
|
||||
eF
|
||||
ek
|
||||
es
|
||||
ew
|
||||
@@ -13261,11 +13301,11 @@ bL
|
||||
bV
|
||||
bV
|
||||
bV
|
||||
dW
|
||||
dW
|
||||
dX
|
||||
dX
|
||||
dW
|
||||
eF
|
||||
eF
|
||||
eG
|
||||
eG
|
||||
eF
|
||||
eF
|
||||
eK
|
||||
eP
|
||||
@@ -50925,7 +50965,7 @@ ad
|
||||
ai
|
||||
ai
|
||||
ai
|
||||
ai
|
||||
bo
|
||||
ai
|
||||
ai
|
||||
ad
|
||||
@@ -51181,7 +51221,7 @@ ad
|
||||
ad
|
||||
ad
|
||||
ai
|
||||
ai
|
||||
bo
|
||||
bG
|
||||
bI
|
||||
ai
|
||||
@@ -54147,7 +54187,7 @@ bJ
|
||||
bJ
|
||||
bJ
|
||||
cQ
|
||||
gk
|
||||
bJ
|
||||
bJ
|
||||
gs
|
||||
bJ
|
||||
@@ -64676,7 +64716,7 @@ bJ
|
||||
bK
|
||||
bK
|
||||
bK
|
||||
fw
|
||||
bJ
|
||||
bJ
|
||||
bJ
|
||||
cq
|
||||
@@ -64931,7 +64971,7 @@ bJ
|
||||
bJ
|
||||
bJ
|
||||
fe
|
||||
fk
|
||||
bJ
|
||||
fn
|
||||
fd
|
||||
bJ
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -919,7 +919,6 @@
|
||||
/area/awaymission/research/interior/gateway)
|
||||
"ck" = (
|
||||
/obj/machinery/door/window/eastright{
|
||||
icon_state = "right";
|
||||
dir = 2
|
||||
},
|
||||
/obj/effect/landmark/awaystart,
|
||||
@@ -1363,16 +1362,6 @@
|
||||
"dc" = (
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/awaymission/research/interior/secure)
|
||||
"dd" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/disk/data{
|
||||
desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, information will turn up blank on most DNA machines.";
|
||||
name = "encrypted genetic data disk";
|
||||
read_only = 1
|
||||
},
|
||||
/obj/item/firing_pin/dna,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/awaymission/research/interior/secure)
|
||||
"de" = (
|
||||
/obj/structure/filingcabinet,
|
||||
/obj/structure/filingcabinet,
|
||||
@@ -1391,8 +1380,8 @@
|
||||
name = "encrypted genetic data disk";
|
||||
read_only = 1
|
||||
},
|
||||
/obj/item/dnainjector/xraymut,
|
||||
/obj/item/dnainjector/xraymut,
|
||||
/obj/item/dnainjector/glow,
|
||||
/obj/item/storage/toolbox/syndicate,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/awaymission/research/interior/secure)
|
||||
"dg" = (
|
||||
@@ -1481,18 +1470,6 @@
|
||||
"do" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/awaymission/research/interior/security)
|
||||
"dp" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/disk/data{
|
||||
desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, information will turn up blank on most DNA machines.";
|
||||
name = "encrypted genetic data disk";
|
||||
read_only = 1
|
||||
},
|
||||
/obj/item/dnainjector/telemut,
|
||||
/obj/item/dnainjector/telemut,
|
||||
/obj/item/dnainjector/chavmut,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/awaymission/research/interior/secure)
|
||||
"dq" = (
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
@@ -1743,8 +1720,6 @@
|
||||
"dJ" = (
|
||||
/obj/structure/rack,
|
||||
/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/machinery/light/small{
|
||||
dir = 4
|
||||
@@ -1769,19 +1744,19 @@
|
||||
/area/awaymission/research/interior/secure)
|
||||
"dL" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/disk/data{
|
||||
desc = "A data disk used to store cloning and genetic records. The name on the label appears to be scratched off with the words 'DO NOT CLONE' hastily written over it.";
|
||||
fields = list("label" = "Buffer1:George Melons", "UI" = "3c300f11b5421ca7014d8", "SE" = "430431205660551642142504334461413202111310233445620533134255", "UE" = "6893e6a0b0076a41897776b10cc2b324", "name" = "George Melons", "blood_type" = "B+");
|
||||
name = "old genetics data disk"
|
||||
},
|
||||
/obj/item/disk/data{
|
||||
desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, information will turn up blank on most DNA machines.";
|
||||
name = "encrypted genetic data disk";
|
||||
read_only = 1
|
||||
},
|
||||
/obj/item/firing_pin/dna,
|
||||
/obj/item/dnainjector/dwarf,
|
||||
/obj/item/dnainjector/dwarf,
|
||||
/obj/item/disk/data{
|
||||
desc = "A data disk used to store cloning and genetic records. The name on the label appears to be scratched off.";
|
||||
fields = list("label" = "Buffer1:Kr-$$@##", "UI" = "f8f603857000f930127c4", "SE" = "414401462231053131010241514651403453121613263463440351136366", "UE" = "340008485c321e542aed4df7032ac04d", "name" = "Krystal Symers", "blood_type" = "A+");
|
||||
name = "dusty genetics data disk";
|
||||
read_only = 1
|
||||
},
|
||||
/obj/item/dnainjector/insulated,
|
||||
/obj/item/gun/energy/disabler,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/awaymission/research/interior/secure)
|
||||
"dM" = (
|
||||
@@ -1792,11 +1767,13 @@
|
||||
read_only = 1
|
||||
},
|
||||
/obj/item/disk/data{
|
||||
desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, information will turn up blank on most DNA machines.";
|
||||
name = "encrypted genetic data disk";
|
||||
desc = "A data disk used to store cloning and genetic records. The name on the label appears to be scratched off.";
|
||||
fields = list("label" = "Buffer1:Kr-$$@##", "UI" = "f8f603857000f930127c4", "SE" = "414401462231053131010241514651403453121613263463440351136366", "UE" = "340008485c321e542aed4df7032ac04d", "name" = "Krystal Symers", "blood_type" = "A+");
|
||||
name = "dusty genetics data disk";
|
||||
read_only = 1
|
||||
},
|
||||
/obj/item/dnainjector/chameleonmut,
|
||||
/obj/item/dnainjector/glow,
|
||||
/obj/item/storage/toolbox/syndicate,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/awaymission/research/interior/secure)
|
||||
"dN" = (
|
||||
@@ -1890,7 +1867,6 @@
|
||||
"dU" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/gun/ballistic/automatic/wt550,
|
||||
/obj/item/gun/ballistic/automatic/wt550,
|
||||
/obj/item/ammo_box/magazine/wt550m9,
|
||||
/obj/item/ammo_box/magazine/wt550m9,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -2070,7 +2046,6 @@
|
||||
"ep" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/gun/ballistic/automatic/pistol/m1911,
|
||||
/obj/item/gun/ballistic/automatic/pistol/m1911,
|
||||
/obj/item/ammo_box/magazine/m45,
|
||||
/obj/item/ammo_box/magazine/m45,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -3071,7 +3046,6 @@
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/machinery/door/airlock/highsecurity{
|
||||
aiDisabledIdScanner = 0;
|
||||
name = "Vault Storage";
|
||||
req_access_txt = "36"
|
||||
},
|
||||
@@ -3531,7 +3505,6 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/awaymission/research/interior/cryo)
|
||||
"gR" = (
|
||||
/obj/item/melee/classic_baton/telescopic,
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 1
|
||||
},
|
||||
@@ -3542,6 +3515,7 @@
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/melee/baton/cattleprod,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/awaymission/research/interior/cryo)
|
||||
"gS" = (
|
||||
@@ -3914,7 +3888,6 @@
|
||||
/area/awaymission/research/interior/cryo)
|
||||
"hw" = (
|
||||
/obj/machinery/computer/arcade{
|
||||
icon_state = "arcade";
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/yellowsiding{
|
||||
@@ -4126,20 +4099,22 @@
|
||||
/area/awaymission/research/interior/security)
|
||||
"hS" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/clothing/head/collectable/petehat{
|
||||
name = "dusty hat"
|
||||
},
|
||||
/obj/item/disk/data{
|
||||
desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, information will turn up blank on most DNA machines.";
|
||||
name = "encrypted genetic data disk";
|
||||
read_only = 1
|
||||
},
|
||||
/obj/item/disk/data{
|
||||
desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, information will turn up blank on most DNA machines. This one has the initials 'C.P' marked on the front. ";
|
||||
name = "encrypted genetic data disk";
|
||||
desc = "A data disk used to store cloning and genetic records. The name on the label appears to be scratched off.";
|
||||
fields = list("label" = "Buffer1:Kr-$$@##", "UI" = "f8f603857000f930127c4", "SE" = "414401462231053131010241514651403453121613263463440351136366", "UE" = "340008485c321e542aed4df7032ac04d", "name" = "Krystal Symers", "blood_type" = "A+");
|
||||
name = "dusty genetics data disk";
|
||||
read_only = 1
|
||||
},
|
||||
/obj/item/clothing/head/collectable/petehat{
|
||||
name = "dusty hat"
|
||||
},
|
||||
/obj/item/firing_pin/dna,
|
||||
/obj/item/dnainjector/gigantism,
|
||||
/obj/item/kitchen/knife/combat/survival,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/awaymission/research/interior/secure)
|
||||
"hT" = (
|
||||
@@ -4150,12 +4125,13 @@
|
||||
read_only = 1
|
||||
},
|
||||
/obj/item/disk/data{
|
||||
desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, information will turn up blank on most DNA machines.";
|
||||
name = "encrypted genetic data disk";
|
||||
desc = "A data disk used to store cloning and genetic records. The name on the label appears to be scratched off.";
|
||||
fields = list("label" = "Buffer1:Kr-$$@##", "UI" = "f8f603857000f930127c4", "SE" = "414401462231053131010241514651403453121613263463440351136366", "UE" = "340008485c321e542aed4df7032ac04d", "name" = "Krystal Symers", "blood_type" = "A+");
|
||||
name = "dusty genetics data disk";
|
||||
read_only = 1
|
||||
},
|
||||
/obj/item/firing_pin/dna,
|
||||
/obj/item/dnainjector/hulkmut,
|
||||
/obj/item/dnainjector/antenna,
|
||||
/obj/item/clothing/suit/armor/vest,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/awaymission/research/interior/secure)
|
||||
"hU" = (
|
||||
@@ -4296,10 +4272,14 @@
|
||||
name = "encrypted genetic data disk";
|
||||
read_only = 1
|
||||
},
|
||||
/obj/item/firing_pin/dna/dredd,
|
||||
/obj/item/firing_pin/dna/dredd,
|
||||
/obj/item/dnainjector/lasereyesmut,
|
||||
/obj/item/dnainjector/lasereyesmut,
|
||||
/obj/item/disk/data{
|
||||
desc = "A data disk used to store cloning and genetic records. The name on the label appears to be scratched off.";
|
||||
fields = list("label" = "Buffer1:Kr-$$@##", "UI" = "f8f603857000f930127c4", "SE" = "414401462231053131010241514651403453121613263463440351136366", "UE" = "340008485c321e542aed4df7032ac04d", "name" = "Krystal Symers", "blood_type" = "A+");
|
||||
name = "dusty genetics data disk";
|
||||
read_only = 1
|
||||
},
|
||||
/obj/item/dnainjector/gigantism,
|
||||
/obj/item/kitchen/knife/combat/survival,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/awaymission/research/interior/secure)
|
||||
"im" = (
|
||||
@@ -4603,7 +4583,6 @@
|
||||
/area/awaymission/research/interior/bathroom)
|
||||
"iN" = (
|
||||
/obj/machinery/shower{
|
||||
icon_state = "shower";
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/freezer,
|
||||
@@ -6335,7 +6314,7 @@
|
||||
/area/space/nearstation)
|
||||
"nb" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/book/granter/spell/random,
|
||||
/obj/item/book/granter/spell/smoke,
|
||||
/turf/open/floor/mineral/plasma,
|
||||
/area/space/nearstation)
|
||||
"nc" = (
|
||||
@@ -6460,6 +6439,11 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/research/interior/maint)
|
||||
"Hs" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/book/granter/crafting_recipe/bone_bow,
|
||||
/turf/open/floor/mineral/plasma,
|
||||
/area/space/nearstation)
|
||||
"Km" = (
|
||||
/obj/machinery/door/airlock/security/glass{
|
||||
id_tag = "outerbrig";
|
||||
@@ -6582,6 +6566,11 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/research/interior/escapepods)
|
||||
"ZZ" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/book/granter/action/origami,
|
||||
/turf/open/floor/mineral/plasma,
|
||||
/area/space/nearstation)
|
||||
|
||||
(1,1,1) = {"
|
||||
aa
|
||||
@@ -11121,8 +11110,8 @@ ab
|
||||
ab
|
||||
na
|
||||
nb
|
||||
nb
|
||||
nb
|
||||
Hs
|
||||
ZZ
|
||||
na
|
||||
ab
|
||||
ab
|
||||
@@ -31113,8 +31102,8 @@ ad
|
||||
ad
|
||||
ad
|
||||
cQ
|
||||
dd
|
||||
dp
|
||||
dL
|
||||
dL
|
||||
dL
|
||||
cQ
|
||||
dc
|
||||
@@ -31126,7 +31115,7 @@ cQ
|
||||
dc
|
||||
cQ
|
||||
hS
|
||||
dM
|
||||
il
|
||||
il
|
||||
cQ
|
||||
ad
|
||||
@@ -32399,7 +32388,7 @@ ad
|
||||
ad
|
||||
cQ
|
||||
df
|
||||
dd
|
||||
dM
|
||||
dM
|
||||
cQ
|
||||
dc
|
||||
@@ -32412,7 +32401,7 @@ dc
|
||||
cQ
|
||||
hT
|
||||
hT
|
||||
dd
|
||||
hT
|
||||
cQ
|
||||
ad
|
||||
ad
|
||||
|
||||
@@ -417,7 +417,6 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 2;
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -1035,7 +1034,6 @@
|
||||
/area/awaymission/snowdin/post/research)
|
||||
"cE" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 2;
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
@@ -1281,7 +1279,6 @@
|
||||
"cY" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 2;
|
||||
piping_layer = 3;
|
||||
pixel_x = 5;
|
||||
pixel_y = 5
|
||||
@@ -1329,7 +1326,6 @@
|
||||
"db" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 2;
|
||||
piping_layer = 3;
|
||||
pixel_x = 5;
|
||||
pixel_y = 5
|
||||
@@ -1389,7 +1385,6 @@
|
||||
"df" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 2;
|
||||
piping_layer = 3;
|
||||
pixel_x = 5;
|
||||
pixel_y = 5
|
||||
@@ -1861,7 +1856,6 @@
|
||||
/area/awaymission/snowdin/post)
|
||||
"em" = (
|
||||
/obj/machinery/power/apc{
|
||||
dir = 2;
|
||||
name = "Gateway APC";
|
||||
pixel_y = -24;
|
||||
req_access = 150
|
||||
@@ -1936,9 +1930,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/snowdin/post/messhall)
|
||||
"et" = (
|
||||
/obj/machinery/vending/boozeomat{
|
||||
req_access_txt = "0"
|
||||
},
|
||||
/obj/machinery/vending/boozeomat,
|
||||
/obj/effect/turf_decal/tile/bar,
|
||||
/obj/effect/turf_decal/tile/bar{
|
||||
dir = 1
|
||||
@@ -1968,7 +1960,6 @@
|
||||
/area/awaymission/snowdin/post/messhall)
|
||||
"ew" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 2;
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/bar,
|
||||
@@ -2210,7 +2201,6 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/firealarm{
|
||||
dir = 2;
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
@@ -2411,7 +2401,6 @@
|
||||
/area/awaymission/snowdin/post/dorm)
|
||||
"fw" = (
|
||||
/obj/machinery/sleeper{
|
||||
icon_state = "sleeper";
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
@@ -2631,7 +2620,6 @@
|
||||
/area/awaymission/snowdin/post/hydro)
|
||||
"fT" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 2;
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/effect/turf_decal/tile/green{
|
||||
@@ -3808,7 +3796,6 @@
|
||||
/area/awaymission/snowdin/post)
|
||||
"iu" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 2;
|
||||
piping_layer = 3;
|
||||
pixel_x = 5;
|
||||
pixel_y = 5
|
||||
@@ -4483,7 +4470,8 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/snowdin/post/garage)
|
||||
"jL" = (
|
||||
/obj/vehicle/ridden/atv,
|
||||
/obj/vehicle/ridden/atv/snowmobile,
|
||||
/obj/item/key,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/snowdin/post/garage)
|
||||
"jM" = (
|
||||
@@ -5060,8 +5048,9 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/snowdin/post/garage)
|
||||
"lc" = (
|
||||
/obj/vehicle/ridden/atv,
|
||||
/obj/effect/decal/cleanable/oil,
|
||||
/obj/vehicle/ridden/atv/snowmobile,
|
||||
/obj/item/key,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/snowdin/post/garage)
|
||||
"ld" = (
|
||||
@@ -5285,7 +5274,6 @@
|
||||
/area/awaymission/snowdin/post)
|
||||
"lv" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 2;
|
||||
piping_layer = 3;
|
||||
pixel_x = 5;
|
||||
pixel_y = 5
|
||||
@@ -5421,7 +5409,6 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 2;
|
||||
piping_layer = 3;
|
||||
pixel_x = 5;
|
||||
pixel_y = 5
|
||||
@@ -5468,7 +5455,6 @@
|
||||
/area/awaymission/snowdin/post/hydro)
|
||||
"lG" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 2;
|
||||
piping_layer = 3;
|
||||
pixel_x = 5;
|
||||
pixel_y = 5
|
||||
@@ -6601,7 +6587,6 @@
|
||||
/obj/item/ammo_box/a762,
|
||||
/obj/structure/closet/secure_closet{
|
||||
icon_state = "sec";
|
||||
locked = 1;
|
||||
name = "security officer's locker";
|
||||
req_access_txt = "201"
|
||||
},
|
||||
@@ -6800,7 +6785,6 @@
|
||||
/area/awaymission/snowdin/post/hydro)
|
||||
"ot" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 2;
|
||||
pixel_y = 24
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -8715,7 +8699,6 @@
|
||||
/area/awaymission/snowdin/outside)
|
||||
"sW" = (
|
||||
/obj/machinery/power/turbine{
|
||||
dir = 2;
|
||||
luminosity = 2
|
||||
},
|
||||
/obj/structure/cable,
|
||||
@@ -9863,7 +9846,6 @@
|
||||
"wm" = (
|
||||
/obj/machinery/porta_turret/centcom_shuttle/weak{
|
||||
desc = "A turret built with substandard parts and run down further with age.";
|
||||
icon_state = "syndie_off";
|
||||
dir = 9;
|
||||
faction = list("pirate")
|
||||
},
|
||||
@@ -9958,7 +9940,6 @@
|
||||
},
|
||||
/obj/effect/light_emitter{
|
||||
light_color = "#FAA019";
|
||||
light_power = 1;
|
||||
light_range = 4;
|
||||
name = "fire light"
|
||||
},
|
||||
@@ -9990,7 +9971,6 @@
|
||||
/area/awaymission/snowdin/outside)
|
||||
"wC" = (
|
||||
/obj/vehicle/ridden/atv{
|
||||
icon_state = "atv";
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/light_emitter{
|
||||
@@ -11092,10 +11072,8 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/snowdin/post/minipost)
|
||||
"zq" = (
|
||||
/obj/vehicle/ridden/atv{
|
||||
icon_state = "atv";
|
||||
dir = 8
|
||||
},
|
||||
/obj/vehicle/ridden/atv/snowmobile,
|
||||
/obj/item/key,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/snowdin/post/minipost)
|
||||
"zr" = (
|
||||
@@ -11412,12 +11390,6 @@
|
||||
/obj/item/clothing/suit/hooded/wintercoat,
|
||||
/turf/open/floor/plating/snowed,
|
||||
/area/awaymission/snowdin/outside)
|
||||
"Ah" = (
|
||||
/obj/structure/window/reinforced/fulltile/ice,
|
||||
/obj/structure/grille,
|
||||
/obj/item/clothing/suit/hooded/wintercoat,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/snowdin/post/minipost)
|
||||
"Ai" = (
|
||||
/turf/open/floor/plating{
|
||||
icon_state = "platingdmg1"
|
||||
@@ -11588,7 +11560,6 @@
|
||||
},
|
||||
/obj/effect/light_emitter{
|
||||
light_color = "#FAA019";
|
||||
light_power = 1;
|
||||
light_range = 4;
|
||||
name = "fire light"
|
||||
},
|
||||
@@ -12299,7 +12270,6 @@
|
||||
desc = "It's a storage unit for a Syndicate boarding party."
|
||||
},
|
||||
/obj/effect/turf_decal/bot_white,
|
||||
/obj/item/gun/ballistic/automatic/pistol,
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
@@ -12345,7 +12315,6 @@
|
||||
/area/awaymission/snowdin/cave)
|
||||
"CP" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
icon_state = "heater";
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -12635,14 +12604,6 @@
|
||||
/obj/item/stack/rods,
|
||||
/turf/open/floor/mineral/plastitanium/red,
|
||||
/area/awaymission/snowdin/cave)
|
||||
"Ds" = (
|
||||
/obj/item/grenade/plastic/c4,
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/awaymission/snowdin/cave)
|
||||
"Dt" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/structure/window/reinforced{
|
||||
@@ -12880,7 +12841,6 @@
|
||||
/area/awaymission/snowdin/cave)
|
||||
"DU" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
icon_state = "heater";
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -13215,26 +13175,14 @@
|
||||
/obj/item/toy/plush/nukeplushie,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/awaymission/snowdin/cave)
|
||||
"EE" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/weather/snow,
|
||||
/obj/machinery/suit_storage_unit{
|
||||
state_open = 1
|
||||
},
|
||||
/turf/open/floor/mineral/plastitanium{
|
||||
initial_gas_mix = "o2=22;n2=82;TEMP=180";
|
||||
planetary_atmos = 1;
|
||||
temperature = 180
|
||||
},
|
||||
/area/awaymission/snowdin/cave)
|
||||
"EF" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/weather/snow,
|
||||
/obj/machinery/suit_storage_unit/syndicate,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/security,
|
||||
/obj/item/tank/internals/emergency_oxygen/engi,
|
||||
/obj/structure/rack,
|
||||
/turf/open/floor/mineral/plastitanium{
|
||||
initial_gas_mix = "o2=22;n2=82;TEMP=180";
|
||||
planetary_atmos = 1;
|
||||
@@ -13246,9 +13194,9 @@
|
||||
dir = 5
|
||||
},
|
||||
/obj/effect/turf_decal/weather/snow,
|
||||
/obj/machinery/suit_storage_unit{
|
||||
state_open = 1
|
||||
},
|
||||
/obj/item/clothing/suit/hooded/wintercoat/security,
|
||||
/obj/item/tank/internals/emergency_oxygen/engi,
|
||||
/obj/structure/rack,
|
||||
/turf/open/floor/mineral/plastitanium{
|
||||
initial_gas_mix = "o2=22;n2=82;TEMP=180";
|
||||
planetary_atmos = 1;
|
||||
@@ -13320,7 +13268,6 @@
|
||||
/area/awaymission/snowdin/cave)
|
||||
"EN" = (
|
||||
/obj/machinery/sleeper/syndie{
|
||||
icon_state = "sleeper_s";
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/bot_white,
|
||||
@@ -13333,7 +13280,6 @@
|
||||
"EP" = (
|
||||
/obj/effect/turf_decal/bot_white,
|
||||
/obj/machinery/sleeper/syndie{
|
||||
icon_state = "sleeper_s";
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -13757,7 +13703,6 @@
|
||||
/area/awaymission/snowdin/cave/cavern)
|
||||
"FY" = (
|
||||
/obj/machinery/conveyor{
|
||||
dir = 2;
|
||||
id = "snowdin_belt_mine"
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
@@ -13780,8 +13725,7 @@
|
||||
/area/awaymission/snowdin/post/mining_main)
|
||||
"Gc" = (
|
||||
/obj/structure/statue/snow/snowman{
|
||||
anchored = 1;
|
||||
name = "snowman"
|
||||
anchored = 1
|
||||
},
|
||||
/obj/item/pickaxe/mini{
|
||||
pixel_x = 5;
|
||||
@@ -13868,7 +13812,6 @@
|
||||
"Gn" = (
|
||||
/obj/structure/plasticflaps,
|
||||
/obj/machinery/conveyor{
|
||||
dir = 2;
|
||||
id = "snowdin_belt_mine"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
@@ -14054,7 +13997,6 @@
|
||||
output_dir = 2
|
||||
},
|
||||
/obj/machinery/conveyor{
|
||||
dir = 2;
|
||||
id = "snowdin_belt_mine"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
@@ -14170,7 +14112,6 @@
|
||||
/area/awaymission/snowdin/post/mining_main/mechbay)
|
||||
"Hk" = (
|
||||
/obj/machinery/conveyor{
|
||||
dir = 2;
|
||||
id = "snowdin_belt_mine"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
@@ -14286,11 +14227,9 @@
|
||||
/area/awaymission/snowdin/post/mining_main/mechbay)
|
||||
"HC" = (
|
||||
/obj/machinery/mineral/processing_unit{
|
||||
dir = 1;
|
||||
output_dir = 2
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/conveyor{
|
||||
dir = 2;
|
||||
id = "snowdin_belt_mine"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
@@ -14555,7 +14494,6 @@
|
||||
/area/awaymission/snowdin/post/mining_main/mechbay)
|
||||
"In" = (
|
||||
/obj/mecha/working/ripley/mining{
|
||||
icon_state = "ripley";
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/bot,
|
||||
@@ -14615,11 +14553,9 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/snowdin/post/mining_main)
|
||||
"Ix" = (
|
||||
/obj/vehicle/ridden/atv{
|
||||
icon_state = "atv";
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/decal/cleanable/oil,
|
||||
/obj/vehicle/ridden/atv/snowmobile,
|
||||
/obj/item/key,
|
||||
/turf/open/floor/plating,
|
||||
/area/awaymission/snowdin/post/mining_main)
|
||||
"Iy" = (
|
||||
@@ -27300,7 +27236,7 @@ oa
|
||||
dX
|
||||
yW
|
||||
yW
|
||||
Ah
|
||||
AX
|
||||
Av
|
||||
Lw
|
||||
yX
|
||||
@@ -36093,7 +36029,7 @@ CC
|
||||
El
|
||||
an
|
||||
an
|
||||
EE
|
||||
EF
|
||||
CC
|
||||
ae
|
||||
ae
|
||||
@@ -36607,7 +36543,7 @@ OF
|
||||
En
|
||||
Es
|
||||
Dp
|
||||
EE
|
||||
EF
|
||||
CC
|
||||
zh
|
||||
af
|
||||
@@ -38396,7 +38332,7 @@ CC
|
||||
CL
|
||||
CW
|
||||
Di
|
||||
Ds
|
||||
Di
|
||||
Di
|
||||
CC
|
||||
CX
|
||||
@@ -55604,7 +55540,7 @@ eL
|
||||
eJ
|
||||
tp
|
||||
qi
|
||||
tt
|
||||
tz
|
||||
qi
|
||||
tp
|
||||
eJ
|
||||
@@ -56372,13 +56308,13 @@ eJ
|
||||
eJ
|
||||
tp
|
||||
qi
|
||||
tt
|
||||
tz
|
||||
tv
|
||||
qi
|
||||
tt
|
||||
qi
|
||||
tv
|
||||
tt
|
||||
tz
|
||||
qi
|
||||
tp
|
||||
eJ
|
||||
@@ -57146,7 +57082,7 @@ eJ
|
||||
eJ
|
||||
tp
|
||||
qi
|
||||
tt
|
||||
tz
|
||||
qi
|
||||
tp
|
||||
eJ
|
||||
@@ -69622,7 +69558,7 @@ tp
|
||||
qi
|
||||
tz
|
||||
qi
|
||||
tt
|
||||
tz
|
||||
qi
|
||||
qi
|
||||
qi
|
||||
@@ -70385,7 +70321,7 @@ eJ
|
||||
gW
|
||||
tp
|
||||
qi
|
||||
tt
|
||||
tz
|
||||
tp
|
||||
qi
|
||||
qi
|
||||
@@ -71159,7 +71095,7 @@ qi
|
||||
qi
|
||||
tp
|
||||
qi
|
||||
tt
|
||||
tz
|
||||
qi
|
||||
tp
|
||||
tp
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -50,15 +50,13 @@
|
||||
/turf/open/floor/circuit/off,
|
||||
/area/awaymission/wildwest/vault)
|
||||
"an" = (
|
||||
/turf/open/floor/plasteel/cult{
|
||||
name = "engraved floor"
|
||||
},
|
||||
/turf/open/floor/plasteel/cult,
|
||||
/area/awaymission/wildwest/vault)
|
||||
"ao" = (
|
||||
/turf/open/floor/circuit/green/off,
|
||||
/area/awaymission/wildwest/vault)
|
||||
"ap" = (
|
||||
/obj/machinery/wish_granter_dark,
|
||||
/obj/item/nullrod/claymore/glowing,
|
||||
/turf/open/floor/circuit/green/off,
|
||||
/area/awaymission/wildwest/vault)
|
||||
"aq" = (
|
||||
@@ -69,54 +67,72 @@
|
||||
/obj/machinery/gateway{
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/circuit/green/off,
|
||||
/area/awaymission/wildwest/vault)
|
||||
/turf/open/floor/plating/ironsand{
|
||||
icon_state = "ironsand1"
|
||||
},
|
||||
/area/awaymission/wildwest/mines)
|
||||
"as" = (
|
||||
/obj/machinery/gateway{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/circuit/green/off,
|
||||
/area/awaymission/wildwest/vault)
|
||||
/turf/open/floor/plating/ironsand{
|
||||
icon_state = "ironsand1"
|
||||
},
|
||||
/area/awaymission/wildwest/mines)
|
||||
"at" = (
|
||||
/obj/machinery/gateway{
|
||||
dir = 5
|
||||
},
|
||||
/turf/open/floor/circuit/green/off,
|
||||
/area/awaymission/wildwest/vault)
|
||||
/turf/open/floor/plating/ironsand{
|
||||
icon_state = "ironsand1"
|
||||
},
|
||||
/area/awaymission/wildwest/mines)
|
||||
"au" = (
|
||||
/obj/machinery/gateway{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/circuit/green/off,
|
||||
/area/awaymission/wildwest/vault)
|
||||
/turf/open/floor/plating/ironsand{
|
||||
icon_state = "ironsand1"
|
||||
},
|
||||
/area/awaymission/wildwest/mines)
|
||||
"av" = (
|
||||
/obj/machinery/gateway/centeraway{
|
||||
calibrated = 0
|
||||
},
|
||||
/turf/open/floor/circuit/green/off,
|
||||
/area/awaymission/wildwest/vault)
|
||||
/turf/open/floor/plating/ironsand{
|
||||
icon_state = "ironsand1"
|
||||
},
|
||||
/area/awaymission/wildwest/mines)
|
||||
"aw" = (
|
||||
/obj/machinery/gateway{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/circuit/green/off,
|
||||
/area/awaymission/wildwest/vault)
|
||||
/turf/open/floor/plating/ironsand{
|
||||
icon_state = "ironsand1"
|
||||
},
|
||||
/area/awaymission/wildwest/mines)
|
||||
"ax" = (
|
||||
/obj/machinery/gateway{
|
||||
dir = 10
|
||||
},
|
||||
/turf/open/floor/circuit/green/off,
|
||||
/area/awaymission/wildwest/vault)
|
||||
/turf/open/floor/plating/ironsand{
|
||||
icon_state = "ironsand1"
|
||||
},
|
||||
/area/awaymission/wildwest/mines)
|
||||
"ay" = (
|
||||
/obj/machinery/gateway,
|
||||
/turf/open/floor/circuit/green/off,
|
||||
/area/awaymission/wildwest/vault)
|
||||
/turf/open/floor/plating/ironsand{
|
||||
icon_state = "ironsand1"
|
||||
},
|
||||
/area/awaymission/wildwest/mines)
|
||||
"az" = (
|
||||
/obj/machinery/gateway{
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/circuit/green/off,
|
||||
/area/awaymission/wildwest/vault)
|
||||
/turf/open/floor/plating/ironsand{
|
||||
icon_state = "ironsand1"
|
||||
},
|
||||
/area/awaymission/wildwest/mines)
|
||||
"aA" = (
|
||||
/obj/effect/meatgrinder,
|
||||
/turf/open/floor/circuit/green/off,
|
||||
@@ -162,9 +178,7 @@
|
||||
/area/awaymission/wildwest/vault)
|
||||
"aL" = (
|
||||
/obj/item/paper/fluff/awaymissions/wildwest/grinder,
|
||||
/turf/open/floor/plasteel/cult{
|
||||
name = "engraved floor"
|
||||
},
|
||||
/turf/open/floor/plasteel/cult,
|
||||
/area/awaymission/wildwest/vault)
|
||||
"aM" = (
|
||||
/turf/closed/mineral/silver,
|
||||
@@ -174,9 +188,7 @@
|
||||
/area/awaymission/wildwest/mines)
|
||||
"aO" = (
|
||||
/obj/effect/mob_spawn/human/corpse/syndicatecommando,
|
||||
/turf/open/floor/plasteel/cult{
|
||||
name = "engraved floor"
|
||||
},
|
||||
/turf/open/floor/plasteel/cult,
|
||||
/area/awaymission/wildwest/vault)
|
||||
"aP" = (
|
||||
/obj/effect/decal/cleanable/blood/splatter,
|
||||
@@ -349,11 +361,6 @@
|
||||
/obj/structure/bed,
|
||||
/turf/open/floor/wood,
|
||||
/area/awaymission/wildwest/mines)
|
||||
"bC" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/gun/ballistic,
|
||||
/turf/open/floor/wood,
|
||||
/area/awaymission/wildwest/mines)
|
||||
"bD" = (
|
||||
/obj/structure/table/wood,
|
||||
/turf/open/floor/wood,
|
||||
@@ -595,17 +602,8 @@
|
||||
dir = 5
|
||||
},
|
||||
/area/awaymission/wildwest/mines)
|
||||
"ch" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/gun/ballistic,
|
||||
/turf/open/floor/plasteel/cafeteria{
|
||||
dir = 5
|
||||
},
|
||||
/area/awaymission/wildwest/mines)
|
||||
"ci" = (
|
||||
/obj/structure/mineral_door/wood{
|
||||
icon_state = "wood"
|
||||
},
|
||||
/obj/structure/mineral_door/wood,
|
||||
/turf/open/floor/wood,
|
||||
/area/awaymission/wildwest/mines)
|
||||
"cj" = (
|
||||
@@ -755,7 +753,7 @@
|
||||
/area/awaymission/wildwest/mines)
|
||||
"cL" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/dualsaber,
|
||||
/obj/item/nullrod/claymore/saber/red,
|
||||
/turf/open/floor/wood,
|
||||
/area/awaymission/wildwest/gov)
|
||||
"cM" = (
|
||||
@@ -767,9 +765,7 @@
|
||||
/turf/open/floor/wood,
|
||||
/area/awaymission/wildwest/gov)
|
||||
"cO" = (
|
||||
/obj/structure/mineral_door/wood{
|
||||
icon_state = "wood"
|
||||
},
|
||||
/obj/structure/mineral_door/wood,
|
||||
/turf/open/floor/wood,
|
||||
/area/awaymission/wildwest/gov)
|
||||
"cP" = (
|
||||
@@ -946,17 +942,13 @@
|
||||
/turf/open/floor/carpet,
|
||||
/area/awaymission/wildwest/mines)
|
||||
"dm" = (
|
||||
/obj/structure/mineral_door/wood{
|
||||
icon_state = "wood"
|
||||
},
|
||||
/obj/structure/mineral_door/wood,
|
||||
/turf/open/floor/plating/ironsand{
|
||||
icon_state = "ironsand1"
|
||||
},
|
||||
/area/awaymission/wildwest/mines)
|
||||
"dn" = (
|
||||
/obj/structure/mineral_door/wood{
|
||||
icon_state = "wood"
|
||||
},
|
||||
/obj/structure/mineral_door/wood,
|
||||
/obj/effect/decal/cleanable/blood/tracks,
|
||||
/turf/open/floor/plating/ironsand{
|
||||
icon_state = "ironsand1"
|
||||
@@ -1048,9 +1040,7 @@
|
||||
},
|
||||
/area/awaymission/wildwest/gov)
|
||||
"dD" = (
|
||||
/obj/structure/mineral_door/wood{
|
||||
icon_state = "wood"
|
||||
},
|
||||
/obj/structure/mineral_door/wood,
|
||||
/turf/open/floor/plating/ironsand{
|
||||
icon_state = "ironsand1"
|
||||
},
|
||||
@@ -1176,7 +1166,6 @@
|
||||
/area/awaymission/wildwest/gov)
|
||||
"dV" = (
|
||||
/obj/machinery/shower{
|
||||
icon_state = "shower";
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/cafeteria{
|
||||
@@ -1185,7 +1174,6 @@
|
||||
/area/awaymission/wildwest/mines)
|
||||
"dW" = (
|
||||
/obj/machinery/shower{
|
||||
icon_state = "shower";
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/cafeteria{
|
||||
@@ -2009,10 +1997,6 @@
|
||||
/obj/machinery/photocopier,
|
||||
/turf/open/floor/wood,
|
||||
/area/awaymission/wildwest/mines)
|
||||
"gm" = (
|
||||
/obj/item/gun/ballistic,
|
||||
/turf/open/floor/wood,
|
||||
/area/awaymission/wildwest/mines)
|
||||
"gn" = (
|
||||
/mob/living/simple_animal/hostile/netherworld,
|
||||
/turf/open/floor/grass,
|
||||
@@ -2195,10 +2179,9 @@
|
||||
/area/awaymission/wildwest/mines)
|
||||
"gW" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/clothing/suit/space/syndicate/black/orange,
|
||||
/obj/item/clothing/head/helmet/space/syndicate/black/orange,
|
||||
/obj/item/clothing/mask/gas/syndicate,
|
||||
/obj/item/tank/internals/oxygen,
|
||||
/obj/item/clothing/suit/space/syndicate/blue,
|
||||
/obj/item/clothing/head/helmet/space/syndicate/blue,
|
||||
/turf/open/floor/mineral/titanium/yellow,
|
||||
/area/awaymission/wildwest/refine)
|
||||
"gX" = (
|
||||
@@ -32762,9 +32745,9 @@ aT
|
||||
aN
|
||||
aN
|
||||
aT
|
||||
aT
|
||||
aT
|
||||
aT
|
||||
ar
|
||||
au
|
||||
ax
|
||||
aT
|
||||
aT
|
||||
aT
|
||||
@@ -33019,9 +33002,9 @@ aT
|
||||
aN
|
||||
aN
|
||||
aT
|
||||
aT
|
||||
aT
|
||||
aT
|
||||
as
|
||||
av
|
||||
ay
|
||||
aT
|
||||
aT
|
||||
aT
|
||||
@@ -33276,9 +33259,9 @@ aT
|
||||
aN
|
||||
aN
|
||||
aT
|
||||
aT
|
||||
aT
|
||||
aT
|
||||
at
|
||||
aw
|
||||
az
|
||||
aT
|
||||
aT
|
||||
aT
|
||||
@@ -38117,7 +38100,7 @@ bu
|
||||
bz
|
||||
bM
|
||||
bM
|
||||
ch
|
||||
bM
|
||||
by
|
||||
bu
|
||||
bj
|
||||
@@ -39913,7 +39896,7 @@ bj
|
||||
bj
|
||||
aT
|
||||
bu
|
||||
bC
|
||||
bD
|
||||
bj
|
||||
bj
|
||||
bu
|
||||
@@ -46340,7 +46323,7 @@ aT
|
||||
bu
|
||||
bD
|
||||
bj
|
||||
bC
|
||||
bD
|
||||
cl
|
||||
bj
|
||||
bj
|
||||
@@ -47563,9 +47546,9 @@ aa
|
||||
ab
|
||||
ab
|
||||
ab
|
||||
ar
|
||||
au
|
||||
ax
|
||||
ao
|
||||
ao
|
||||
ao
|
||||
ao
|
||||
ao
|
||||
ao
|
||||
@@ -47820,9 +47803,9 @@ aa
|
||||
ab
|
||||
ab
|
||||
ab
|
||||
as
|
||||
av
|
||||
ay
|
||||
ao
|
||||
ao
|
||||
ao
|
||||
ao
|
||||
ao
|
||||
ao
|
||||
@@ -48077,9 +48060,9 @@ aa
|
||||
aa
|
||||
ab
|
||||
ab
|
||||
at
|
||||
aw
|
||||
az
|
||||
ao
|
||||
ao
|
||||
ao
|
||||
ao
|
||||
ao
|
||||
ao
|
||||
@@ -48850,7 +48833,7 @@ aa
|
||||
ab
|
||||
ab
|
||||
ao
|
||||
ao
|
||||
ap
|
||||
ao
|
||||
ab
|
||||
ab
|
||||
@@ -51159,7 +51142,7 @@ aa
|
||||
aa
|
||||
aa
|
||||
ab
|
||||
ap
|
||||
ao
|
||||
ao
|
||||
aq
|
||||
ab
|
||||
@@ -52283,7 +52266,7 @@ eX
|
||||
dj
|
||||
bj
|
||||
bu
|
||||
gm
|
||||
bj
|
||||
bj
|
||||
eM
|
||||
bj
|
||||
|
||||
+1186
-1514
File diff suppressed because it is too large
Load Diff
@@ -4558,7 +4558,6 @@
|
||||
department = "Mining";
|
||||
pixel_x = -30
|
||||
},
|
||||
/obj/structure/closet/crate/bin,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/quartermaster/miningdock)
|
||||
"bzj" = (
|
||||
@@ -10026,6 +10025,7 @@
|
||||
pixel_x = 32
|
||||
},
|
||||
/obj/effect/turf_decal/tile/brown,
|
||||
/obj/machinery/rnd/production/techfab/department/cargo,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/quartermaster/storage)
|
||||
"dDf" = (
|
||||
@@ -14580,6 +14580,10 @@
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/disposal/bin,
|
||||
/obj/structure/disposalpipe/trunk{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/genetics)
|
||||
"goM" = (
|
||||
@@ -26013,13 +26017,6 @@
|
||||
/obj/effect/landmark/start/paramedic,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/zone3)
|
||||
"nhO" = (
|
||||
/obj/machinery/airalarm/server{
|
||||
dir = 1;
|
||||
pixel_y = -22
|
||||
},
|
||||
/turf/open/floor/circuit/telecomms/mainframe,
|
||||
/area/tcommsat/server)
|
||||
"nij" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
@@ -27181,7 +27178,6 @@
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/closet/crate/bin,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/genetics)
|
||||
"nSf" = (
|
||||
@@ -28206,7 +28202,9 @@
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/structure/disposalpipe/sorting/mail/flip{
|
||||
sortType = 23
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/genetics)
|
||||
"ouE" = (
|
||||
@@ -56146,7 +56144,7 @@ won
|
||||
evJ
|
||||
fsQ
|
||||
mxo
|
||||
nhO
|
||||
pTw
|
||||
apJ
|
||||
apJ
|
||||
apJ
|
||||
|
||||
@@ -32,11 +32,6 @@
|
||||
"g" = (
|
||||
/turf/closed/wall/mineral/titanium/nodiagonal,
|
||||
/area/shuttle/abandoned)
|
||||
"h" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/abandoned)
|
||||
"i" = (
|
||||
/obj/machinery/suit_storage_unit/security,
|
||||
/obj/machinery/light/small{
|
||||
@@ -64,6 +59,7 @@
|
||||
/area/shuttle/abandoned)
|
||||
"m" = (
|
||||
/obj/structure/bed,
|
||||
/obj/item/bedsheet/orange,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned)
|
||||
"n" = (
|
||||
@@ -130,7 +126,6 @@
|
||||
/area/shuttle/abandoned)
|
||||
"x" = (
|
||||
/obj/machinery/door/firedoor/border_only/closed{
|
||||
icon_state = "door_closed";
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/door/window/eastright,
|
||||
@@ -174,12 +169,12 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/closet/crate/secure/weapon,
|
||||
/obj/item/gun/energy/laser/carbine,
|
||||
/obj/machinery/button/flasher{
|
||||
id = "cogws";
|
||||
pixel_x = -24;
|
||||
pixel_y = 8
|
||||
},
|
||||
/obj/item/gun/energy/laser/retro,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned)
|
||||
"D" = (
|
||||
@@ -191,7 +186,7 @@
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/gun/energy/e_gun/stun,
|
||||
/obj/item/gun/energy/laser/retro,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/shuttle/abandoned)
|
||||
"E" = (
|
||||
@@ -228,12 +223,14 @@
|
||||
"I" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/clothing/glasses/sunglasses,
|
||||
/obj/item/gps{
|
||||
gpstag = "NTPRS"
|
||||
},
|
||||
/turf/open/floor/plasteel/grimy,
|
||||
/area/shuttle/abandoned)
|
||||
"J" = (
|
||||
/obj/structure/curtain,
|
||||
/obj/machinery/shower{
|
||||
name = "shower";
|
||||
pixel_y = 12
|
||||
},
|
||||
/obj/item/soap/nanotrasen,
|
||||
@@ -329,13 +326,13 @@ d
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
d
|
||||
h
|
||||
g
|
||||
n
|
||||
n
|
||||
B
|
||||
H
|
||||
n
|
||||
h
|
||||
g
|
||||
d
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
|
||||
@@ -145,4 +145,19 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
|
||||
/// If the thing can reflect light (lasers/energy)
|
||||
#define RICOCHET_SHINY (1<<0)
|
||||
/// If the thing can reflect matter (bullets/bomb shrapnel)
|
||||
#define RICOCHET_HARD (1<<1)
|
||||
#define RICOCHET_HARD (1<<1)
|
||||
|
||||
#define KEEP_TOGETHER_ORIGINAL "keep_together_original"
|
||||
|
||||
//setter for KEEP_TOGETHER to allow for multiple sources to set and unset it
|
||||
#define ADD_KEEP_TOGETHER(x, source)\
|
||||
if ((x.appearance_flags & KEEP_TOGETHER) && !HAS_TRAIT(x, TRAIT_KEEP_TOGETHER)) ADD_TRAIT(x, TRAIT_KEEP_TOGETHER, KEEP_TOGETHER_ORIGINAL); \
|
||||
ADD_TRAIT(x, TRAIT_KEEP_TOGETHER, source);\
|
||||
x.appearance_flags |= KEEP_TOGETHER
|
||||
|
||||
#define REMOVE_KEEP_TOGETHER(x, source)\
|
||||
REMOVE_TRAIT(x, TRAIT_KEEP_TOGETHER, source);\
|
||||
if(HAS_TRAIT_FROM_ONLY(x, TRAIT_KEEP_TOGETHER, KEEP_TOGETHER_ORIGINAL))\
|
||||
REMOVE_TRAIT(x, TRAIT_KEEP_TOGETHER, KEEP_TOGETHER_ORIGINAL);\
|
||||
else if(!HAS_TRAIT(x, TRAIT_KEEP_TOGETHER))\
|
||||
x.appearance_flags &= ~KEEP_TOGETHER
|
||||
|
||||
@@ -52,3 +52,4 @@
|
||||
#define ORGAN_VITAL (1<<4) //Currently only the brain
|
||||
#define ORGAN_NO_SPOIL (1<<5) //Do not spoil under any circumstances
|
||||
#define ORGAN_NO_DISMEMBERMENT (1<<6) //Immune to disembowelment.
|
||||
#define ORGAN_EDIBLE (1<<5) //is a snack? :D
|
||||
@@ -35,6 +35,7 @@
|
||||
#define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living, params)
|
||||
#define COMPONENT_NO_AFTERATTACK 1 //Return this in response if you don't want afterattack to be called
|
||||
#define COMSIG_ATOM_HULK_ATTACK "hulk_attack" //from base of atom/attack_hulk(): (/mob/living/carbon/human)
|
||||
#define COMSIG_ATOM_ATTACK_ANIMAL "attack_animal" //from base of atom/animal_attack(): (/mob/user)
|
||||
#define COMSIG_PARENT_EXAMINE "atom_examine" //from base of atom/examine(): (/mob, list/examine_return_text)
|
||||
#define COMSIG_ATOM_GET_EXAMINE_NAME "atom_examine_name" //from base of atom/get_examine_name(): (/mob, list/overrides)
|
||||
//Positions for overrides list
|
||||
@@ -140,10 +141,10 @@
|
||||
#define HEARING_SPEAKER 2
|
||||
// #define HEARING_LANGUAGE 3
|
||||
#define HEARING_RAW_MESSAGE 4
|
||||
/* #define HEARING_RADIO_FREQ 5
|
||||
#define HEARING_SPANS 6
|
||||
// #define HEARING_RADIO_FREQ 5
|
||||
// #define HEARING_SPANS 6
|
||||
#define HEARING_MESSAGE_MODE 7
|
||||
#define HEARING_SOURCE 8*/
|
||||
// #define HEARING_SOURCE 8
|
||||
#define COMSIG_MOVABLE_DISPOSING "movable_disposing" //called when the movable is added to a disposal holder object for disposal movement: (obj/structure/disposalholder/holder, obj/machinery/disposal/source)
|
||||
#define COMSIG_MOVABLE_TELEPORTED "movable_teleported" //from base of do_teleport(): (channel, turf/origin, turf/destination)
|
||||
|
||||
@@ -256,6 +257,9 @@
|
||||
#define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" //from base of obj/deconstruct(): (disassembled)
|
||||
#define COMSIG_OBJ_BREAK "obj_break" //from base of /obj/obj_break(): (damage_flag)
|
||||
#define COMSIG_OBJ_SETANCHORED "obj_setanchored" //called in /obj/structure/setAnchored(): (value)
|
||||
#define COMSIG_OBJ_ATTACK_GENERIC "obj_attack_generic" //from base of atom/animal_attack(): (/mob/user)
|
||||
#define COMPONENT_STOP_GENERIC_ATTACK 1
|
||||
|
||||
|
||||
// /machinery signals
|
||||
#define COMSIG_MACHINE_EJECT_OCCUPANT "eject_occupant" //from base of obj/machinery/dropContents() (occupant)
|
||||
@@ -287,6 +291,7 @@
|
||||
#define COMPONENT_BLOCK_SHARPEN_BLOCKED 2
|
||||
#define COMPONENT_BLOCK_SHARPEN_ALREADY 4
|
||||
#define COMPONENT_BLOCK_SHARPEN_MAXED 8
|
||||
#define COMSIG_ITEM_MICROWAVE_ACT "microwave_act" //called on item when microwaved (): (obj/machinery/microwave/M)
|
||||
#define COMSIG_ITEM_WORN_OVERLAYS "item_worn_overlays" //from base of obj/item/worn_overlays(): (isinhands, icon_file, used_state, style_flags, list/overlays)
|
||||
// THE FOLLOWING TWO BLOCKS SHOULD RETURN BLOCK FLAGS AS DEFINED IN __DEFINES/combat.dm!
|
||||
#define COMSIG_ITEM_CHECK_BLOCK "check_block" //from base of obj/item/check_block(): (mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
|
||||
|
||||
@@ -18,4 +18,8 @@
|
||||
#define DRINK_VERYGOOD 3
|
||||
#define DRINK_FANTASTIC 4
|
||||
#define FOOD_AMAZING 5
|
||||
#define RACE_DRINK 6
|
||||
#define RACE_DRINK 6
|
||||
|
||||
#define FOOD_IN_CONTAINER (1<<0)
|
||||
|
||||
#define STOP_SERVING_BREAKFAST (15 MINUTES)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#define FOOTSTEP_GRASS "grass"
|
||||
#define FOOTSTEP_WATER "water"
|
||||
#define FOOTSTEP_LAVA "lava"
|
||||
#define FOOTSTEP_MEAT "meat"
|
||||
//barefoot sounds
|
||||
#define FOOTSTEP_WOOD_BAREFOOT "woodbarefoot"
|
||||
#define FOOTSTEP_WOOD_CLAW "woodclaw"
|
||||
@@ -89,6 +90,8 @@ GLOBAL_LIST_INIT(footstep, list(
|
||||
'sound/effects/footstep/lava1.ogg',
|
||||
'sound/effects/footstep/lava2.ogg',
|
||||
'sound/effects/footstep/lava3.ogg'), 100, 0),
|
||||
FOOTSTEP_MEAT = list(list(
|
||||
'sound/effects/meatslap.ogg'), 100, 0)
|
||||
))
|
||||
|
||||
//bare footsteps lists
|
||||
@@ -131,6 +134,8 @@ GLOBAL_LIST_INIT(barefootstep, list(
|
||||
'sound/effects/footstep/lava1.ogg',
|
||||
'sound/effects/footstep/lava2.ogg',
|
||||
'sound/effects/footstep/lava3.ogg'), 100, 0),
|
||||
FOOTSTEP_MEAT = list(list(
|
||||
'sound/effects/meatslap.ogg'), 100, 0)
|
||||
))
|
||||
|
||||
//claw footsteps lists
|
||||
@@ -173,6 +178,8 @@ GLOBAL_LIST_INIT(clawfootstep, list(
|
||||
'sound/effects/footstep/lava1.ogg',
|
||||
'sound/effects/footstep/lava2.ogg',
|
||||
'sound/effects/footstep/lava3.ogg'), 100, 0),
|
||||
FOOTSTEP_MEAT = list(list(
|
||||
'sound/effects/meatslap.ogg'), 100, 0)
|
||||
))
|
||||
|
||||
//heavy footsteps list
|
||||
@@ -189,4 +196,6 @@ GLOBAL_LIST_INIT(heavyfootstep, list(
|
||||
'sound/effects/footstep/lava1.ogg',
|
||||
'sound/effects/footstep/lava2.ogg',
|
||||
'sound/effects/footstep/lava3.ogg'), 100, 0),
|
||||
FOOTSTEP_MEAT = list(list(
|
||||
'sound/effects/meatslap.ogg'), 100, 0)
|
||||
))
|
||||
|
||||
@@ -135,6 +135,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
|
||||
|
||||
#define iscat(A) (istype(A, /mob/living/simple_animal/pet/cat))
|
||||
|
||||
#define isdog(A) (istype(A, /mob/living/simple_animal/pet/dog))
|
||||
|
||||
#define iscorgi(A) (istype(A, /mob/living/simple_animal/pet/dog/corgi))
|
||||
|
||||
#define ishostile(A) (istype(A, /mob/living/simple_animal/hostile))
|
||||
|
||||
@@ -4,8 +4,12 @@
|
||||
/// Hard materials, such as iron or metal
|
||||
#define MAT_CATEGORY_RIGID "rigid material"
|
||||
|
||||
///Use this flag on TRUE if you want the basic recipes
|
||||
#define MAT_CATEGORY_BASE_RECIPES "basic recipes"
|
||||
|
||||
/// Flag for atoms, this flag ensures it isn't re-colored by materials. Useful for snowflake icons such as default toolboxes.
|
||||
#define MATERIAL_COLOR (1<<0)
|
||||
#define MATERIAL_ADD_PREFIX (1<<1)
|
||||
#define MATERIAL_EFFECTS (1<<2)
|
||||
#define MATERIAL_AFFECT_STATISTICS (1<<3)
|
||||
#define MATERIAL_AFFECT_STATISTICS (1<<2)
|
||||
|
||||
#define MATERIAL_SOURCE(mat) "[mat.name]_material"
|
||||
@@ -432,6 +432,7 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
|
||||
//text files
|
||||
#define BRAIN_DAMAGE_FILE "traumas.json"
|
||||
#define ION_FILE "ion_laws.json"
|
||||
#define REDPILL_FILE "redpill.json"
|
||||
#define PIRATE_NAMES_FILE "pirates.json"
|
||||
|
||||
|
||||
|
||||
@@ -98,6 +98,7 @@
|
||||
#define BRAIN_TRAUMA_MILD /datum/brain_trauma/mild
|
||||
#define BRAIN_TRAUMA_SEVERE /datum/brain_trauma/severe
|
||||
#define BRAIN_TRAUMA_SPECIAL /datum/brain_trauma/special
|
||||
#define BRAIN_TRAUMA_MAGIC /datum/brain_trauma/magic
|
||||
|
||||
#define TRAUMA_RESILIENCE_BASIC 1 //Curable with chems
|
||||
#define TRAUMA_RESILIENCE_SURGERY 2 //Curable with brain surgery
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/// How much someone is slowed from fireman carrying a human
|
||||
#define FIREMAN_CARRY_SLOWDOWN 0
|
||||
/// How much someone is slowed by piggybacking a human
|
||||
#define PIGGYBACK_CARRY_SLOWDOWN 1
|
||||
#define PIGGYBACK_CARRY_SLOWDOWN 0
|
||||
/// slowdown when in softcrit. Note that crawling slowdown will also apply at the same time!
|
||||
#define SOFTCRIT_ADD_SLOWDOWN 2
|
||||
/// slowdown when crawling
|
||||
|
||||
@@ -100,4 +100,10 @@
|
||||
///Ascending priority defines.
|
||||
#define MODIFIER_SKILL_PRIORITY_LOW 100
|
||||
#define MODIFIER_SKILL_PRIORITY_DEF 50
|
||||
#define MODIFIER_SKILL_PRIORITY_MAX 1 //max priority, meant for job/antag modifiers so they don't null out other (de)buffs
|
||||
#define MODIFIER_SKILL_PRIORITY_MAX 1 //max priority, meant for job/antag modifiers so they don't null out other (de)buffs
|
||||
|
||||
// UI Defines
|
||||
///Categories of skills, these will be displayed alphabetically.
|
||||
#define SKILL_UI_CAT_ENG "Engineering"
|
||||
#define SKILL_UI_CAT_MED "Medical"
|
||||
#define SKILL_UI_CAT_MISC "Misc"
|
||||
|
||||
@@ -61,6 +61,12 @@
|
||||
} while (0)
|
||||
#define HAS_TRAIT(target, trait) (target.status_traits ? (target.status_traits[trait] ? TRUE : FALSE) : FALSE)
|
||||
#define HAS_TRAIT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (source in target.status_traits[trait]) : FALSE) : FALSE)
|
||||
#define HAS_TRAIT_FROM_ONLY(target, trait, source) (\
|
||||
target.status_traits ?\
|
||||
(target.status_traits[trait] ?\
|
||||
((source in target.status_traits[trait]) && (length(target.status_traits) == 1))\
|
||||
: FALSE)\
|
||||
: FALSE)
|
||||
#define HAS_TRAIT_NOT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (length(target.status_traits[trait] - source) > 0) : FALSE) : FALSE)
|
||||
|
||||
//mob traits
|
||||
@@ -226,6 +232,8 @@
|
||||
#define VEHICLE_TRAIT "vehicle" // inherited from riding vehicles
|
||||
#define INNATE_TRAIT "innate"
|
||||
|
||||
///Used for managing KEEP_TOGETHER in [appearance_flags]
|
||||
#define TRAIT_KEEP_TOGETHER "keep-together"
|
||||
|
||||
// item traits
|
||||
#define TRAIT_NODROP "nodrop"
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
/proc/english_list(list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" )
|
||||
var/total = input.len
|
||||
if (!total)
|
||||
return "[nothing_text]"
|
||||
return nothing_text
|
||||
else if (total == 1)
|
||||
return "[input[1]]"
|
||||
else if (total == 2)
|
||||
|
||||
@@ -120,3 +120,8 @@ GLOBAL_VAR_INIT(cmp_field, "name")
|
||||
|
||||
/proc/cmp_item_block_priority_asc(obj/item/A, obj/item/B)
|
||||
return A.block_priority - B.block_priority
|
||||
|
||||
/proc/cmp_skill_categories(datum/skill/A, datum/skill/B)
|
||||
if(A.ui_category == B.ui_category)
|
||||
return sorttext(A.name, B.name)
|
||||
return sorttext(A.ui_category, B.ui_category)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
for(var/file in args)
|
||||
src << browse_rsc(file)
|
||||
|
||||
/client/proc/browse_files(root="data/logs/", max_iterations=10, list/valid_extensions=list("txt","log","htm", "html", "md"))
|
||||
/client/proc/browse_files(root="data/logs/", max_iterations=10, list/valid_extensions=list("txt","log","htm", "html", "md", "json"))
|
||||
var/path = root
|
||||
|
||||
for(var/i=0, i<max_iterations, i++)
|
||||
|
||||
@@ -375,6 +375,8 @@ GLOBAL_LIST_EMPTY(species_list)
|
||||
override = TRUE
|
||||
if(HAS_TRAIT(M, TRAIT_SIXTHSENSE))
|
||||
override = TRUE
|
||||
if(SSticker.current_state == GAME_STATE_FINISHED)
|
||||
override = TRUE
|
||||
if(isnewplayer(M) && !override)
|
||||
continue
|
||||
if(M.stat != DEAD && !override)
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
|
||||
to_chat(world, "<BR><BR><BR><span class='big bold'>The round has ended.</span>")
|
||||
if(LAZYLEN(GLOB.round_end_notifiees))
|
||||
send2irc("Notice", "[GLOB.round_end_notifiees.Join(", ")] the round has ended.")
|
||||
world.TgsTargetedChatBroadcast("[GLOB.round_end_notifiees.Join(", ")] the round has ended.", FALSE)
|
||||
|
||||
for(var/I in round_end_events)
|
||||
var/datum/callback/cb = I
|
||||
@@ -233,6 +233,7 @@
|
||||
for(var/antag_name in total_antagonists)
|
||||
var/list/L = total_antagonists[antag_name]
|
||||
log_game("[antag_name]s :[L.Join(", ")].")
|
||||
set_observer_default_invisibility(0, "<span class='warning'>The round is over! You are now visible to the living.</span>")
|
||||
|
||||
CHECK_TICK
|
||||
SSdbcore.SetRoundEnd()
|
||||
|
||||
@@ -224,5 +224,10 @@ GLOBAL_LIST_INIT(admiral_messages, list("Do you know how expensive these station
|
||||
|
||||
GLOBAL_LIST_INIT(redacted_strings, list("\[REDACTED\]", "\[CLASSIFIED\]", "\[ARCHIVED\]", "\[EXPLETIVE DELETED\]", "\[EXPUNGED\]", "\[INFORMATION ABOVE YOUR SECURITY CLEARANCE\]", "\[MOVE ALONG CITIZEN\]", "\[NOTHING TO SEE HERE\]", "\[ACCESS DENIED\]"))
|
||||
|
||||
|
||||
GLOBAL_LIST_INIT(wisdoms, world.file2list("strings/wisdoms.txt"))
|
||||
|
||||
GLOBAL_LIST_INIT(speech_verbs, list("default","says","gibbers", "states", "chitters", "declares", "bellows", "buzzes" ,"beeps", "chirps" ,"hisses" ,"poofs" ,"rattles", "mewls" ,"barks", "blorbles", "squeaks", "squawks", "flutters"))
|
||||
|
||||
GLOBAL_LIST_INIT(roundstart_tongues, list("default","human tongue" = /obj/item/organ/tongue, "lizard tongue" = /obj/item/organ/tongue/lizard, "skeleton tongue" = /obj/item/organ/tongue/bone, "fly tongue" = /obj/item/organ/tongue/fly, "ipc tongue" = /obj/item/organ/tongue/robot/ipc))
|
||||
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
A.attack_animal(src)
|
||||
|
||||
/atom/proc/attack_animal(mob/user)
|
||||
return
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ANIMAL, user)
|
||||
|
||||
/mob/living/RestrainedClickOn(atom/A)
|
||||
return
|
||||
|
||||
@@ -104,7 +104,9 @@
|
||||
var/list/lines = world.file2list("[directory]/[filename]")
|
||||
var/list/_entries = entries
|
||||
var/list/postload_required = list()
|
||||
var/linenumber = 0
|
||||
for(var/L in lines)
|
||||
linenumber++
|
||||
L = trim(L)
|
||||
if(!L)
|
||||
continue
|
||||
@@ -132,7 +134,7 @@
|
||||
|
||||
if(entry == "$include")
|
||||
if(!value)
|
||||
log_config("Warning: Invalid $include directive: [value]")
|
||||
log_config("LINE [linenumber]: Invalid $include directive: [value]")
|
||||
else
|
||||
LoadEntries(value, stack)
|
||||
++.
|
||||
@@ -140,7 +142,7 @@
|
||||
|
||||
var/datum/config_entry/E = _entries[entry]
|
||||
if(!E)
|
||||
log_config("Unknown setting in configuration: '[entry]'")
|
||||
log_config("LINE [linenumber]: Unknown setting: '[entry]'")
|
||||
continue
|
||||
|
||||
if(lockthis)
|
||||
@@ -150,7 +152,7 @@
|
||||
var/datum/config_entry/new_ver = entries_by_type[E.deprecated_by]
|
||||
var/new_value = E.DeprecationUpdate(value)
|
||||
var/good_update = istext(new_value)
|
||||
log_config("Entry [entry] is deprecated and will be removed soon. Migrate to [new_ver.name]![good_update ? " Suggested new value is: [new_value]" : ""]")
|
||||
log_config("LINE [linenumber]: [entry] is deprecated and will be removed soon. Migrate to [new_ver.name]![good_update ? " Suggested new value is: [new_value]" : ""]")
|
||||
if(!warned_deprecated_configs)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, /proc/message_admins, "This server is using deprecated configuration settings. Please check the logs and update accordingly."), 0)
|
||||
warned_deprecated_configs = TRUE
|
||||
@@ -162,10 +164,10 @@
|
||||
|
||||
var/validated = E.ValidateAndSet(value, TRUE)
|
||||
if(!validated)
|
||||
log_config("Failed to validate setting \"[value]\" for [entry]")
|
||||
log_config("LINE [linenumber]: Failed to validate setting \"[value]\" for [entry]")
|
||||
else
|
||||
if(E.modified && !E.dupes_allowed)
|
||||
log_config("Duplicate setting for [entry] ([value], [E.resident_file]) detected! Using latest.")
|
||||
log_config("LINE [linenumber]: Duplicate setting for [entry] ([value], [E.resident_file]) detected! Using latest.")
|
||||
if(E.postload_required)
|
||||
postload_required[E] = TRUE
|
||||
|
||||
|
||||
@@ -168,12 +168,14 @@
|
||||
|
||||
/datum/config_entry/flag/join_with_mutant_humans //players can pick mutant bodyparts for humans before joining the game
|
||||
|
||||
/datum/config_entry/flag/no_summon_guns //No
|
||||
/datum/config_entry/flag/no_summon_guns //No
|
||||
|
||||
/datum/config_entry/flag/no_summon_magic //Fun
|
||||
|
||||
/datum/config_entry/flag/no_summon_events //Allowed
|
||||
|
||||
/datum/config_entry/flag/no_summon_traumas //!
|
||||
|
||||
/datum/config_entry/flag/no_intercept_report //Whether or not to send a communications intercept report roundstart. This may be overridden by gamemodes.
|
||||
|
||||
/datum/config_entry/number/arrivals_shuttle_dock_window //Time from when a player late joins on the arrivals shuttle to when the shuttle docks on the station
|
||||
|
||||
@@ -12,7 +12,7 @@ SUBSYSTEM_DEF(events)
|
||||
var/frequency_upper = 6000 //10 minutes upper bound. Basically an event will happen every 3 to 10 minutes.
|
||||
|
||||
var/list/holidays //List of all holidays occuring today or null if no holidays
|
||||
var/wizardmode = 0
|
||||
var/wizardmode = FALSE
|
||||
|
||||
/datum/controller/subsystem/events/Initialize(time, zlevel)
|
||||
for(var/type in typesof(/datum/round_event_control))
|
||||
@@ -91,6 +91,7 @@ SUBSYSTEM_DEF(events)
|
||||
if(. == EVENT_CANT_RUN)//we couldn't run this event for some reason, set its max_occurrences to 0
|
||||
E.max_occurrences = 0
|
||||
else if(. == EVENT_READY)
|
||||
E.random = TRUE
|
||||
E.runEvent(TRUE)
|
||||
|
||||
//allows a client to trigger an event
|
||||
|
||||
@@ -64,19 +64,33 @@ SUBSYSTEM_DEF(input)
|
||||
// Misc
|
||||
macroset_classic_input["Tab"] = "\".winset \\\"mainwindow.macro=[SKIN_MACROSET_CLASSIC_HOTKEYS] map.focus=true input.background-color=[COLOR_INPUT_DISABLED]\\\"\""
|
||||
macroset_classic_input["Escape"] = "\".winset \\\"input.text=\\\"\\\"\\\"\""
|
||||
|
||||
|
||||
// FINALLY, WE CAN DO SOMETHING MORE NORMAL FOR THE SNOWFLAKE-BUT-LESS KEYSET.
|
||||
|
||||
// HAHA - SIKE. Because of BYOND weirdness (tl;dr not specifically binding this way results in potentially duplicate chatboxes when
|
||||
// conflicts occur with something like say indicator vs say), we're going to snowflake this anyways
|
||||
var/list/hard_binds = list(
|
||||
"O" = "ooc",
|
||||
"T" = "say",
|
||||
"L" = "looc",
|
||||
"M" = "me"
|
||||
)
|
||||
var/list/hard_bind_anti_collision = list()
|
||||
var/list/anti_collision_modifiers = list("Ctrl", "Alt", "Shift", "Ctrl+Alt", "Ctrl+Shift", "Alt+Shift", "Ctrl+Alt+Shift")
|
||||
for(var/key in hard_binds)
|
||||
for(var/modifier in anti_collision_modifiers)
|
||||
hard_bind_anti_collision["[modifier]+[key]"] = ".NONSENSICAL_VERB_THAT_DOES_NOTHING"
|
||||
|
||||
macroset_classic_hotkey = list(
|
||||
"Any" = "\"KeyDown \[\[*\]\]\"",
|
||||
"Any+UP" = "\"KeyUp \[\[*\]\]\"",
|
||||
"Tab" = "\".winset \\\"mainwindow.macro=[SKIN_MACROSET_CLASSIC_INPUT] input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"",
|
||||
"Escape" = "\".winset \\\"input.text=\\\"\\\"\\\"\"",
|
||||
"Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"",
|
||||
"O" = "ooc",
|
||||
"T" = "say",
|
||||
"L" = "looc",
|
||||
"M" = "me"
|
||||
)
|
||||
|
||||
macroset_classic_hotkey |= hard_binds
|
||||
macroset_classic_hotkey |= hard_bind_anti_collision
|
||||
|
||||
// And finally, the modern set.
|
||||
macroset_hotkey = list(
|
||||
@@ -85,11 +99,10 @@ SUBSYSTEM_DEF(input)
|
||||
"Tab" = "\".winset \\\"input.focus=true?map.focus=true input.background-color=[COLOR_INPUT_DISABLED]:input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"",
|
||||
"Escape" = "\".winset \\\"input.text=\\\"\\\"\\\"\"",
|
||||
"Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"",
|
||||
"O" = "ooc",
|
||||
"T" = "say",
|
||||
"L" = "looc",
|
||||
"M" = "me"
|
||||
)
|
||||
|
||||
macroset_hotkey |= hard_binds
|
||||
macroset_hotkey |= hard_bind_anti_collision
|
||||
|
||||
// Badmins just wanna have fun ♪
|
||||
/datum/controller/subsystem/input/proc/refresh_client_macro_sets()
|
||||
@@ -104,3 +117,8 @@ SUBSYSTEM_DEF(input)
|
||||
for(var/i in 1 to clients.len)
|
||||
var/client/C = clients[i]
|
||||
C.keyLoop()
|
||||
|
||||
/// *sigh
|
||||
/client/verb/NONSENSICAL_VERB_THAT_DOES_NOTHING()
|
||||
set name = ".NONSENSICAL_VERB_THAT_DOES_NOTHING"
|
||||
set hidden = TRUE
|
||||
|
||||
@@ -10,24 +10,52 @@ SUBSYSTEM_DEF(materials)
|
||||
var/list/materials
|
||||
///Dictionary of category || list of material refs
|
||||
var/list/materials_by_category
|
||||
///Dictionary of category || list of material types, mostly used by rnd machines like autolathes.
|
||||
var/list/materialtypes_by_category
|
||||
///A cache of all material combinations that have been used
|
||||
var/list/list/material_combos
|
||||
///List of stackcrafting recipes for materials using rigid materials
|
||||
var/list/rigid_stack_recipes = list(
|
||||
new /datum/stack_recipe("chair", /obj/structure/chair/greyscale, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
|
||||
new /datum/stack_recipe("toilet", /obj/structure/toilet/greyscale, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
|
||||
new /datum/stack_recipe("sink", /obj/structure/sink/greyscale, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
|
||||
new /datum/stack_recipe("Floor tile", /obj/item/stack/tile/material, 1, 4, 20, applies_mats = TRUE)
|
||||
)
|
||||
|
||||
///Ran on initialize, populated the materials and materials_by_category dictionaries with their appropiate vars (See these variables for more info)
|
||||
/datum/controller/subsystem/materials/proc/InitializeMaterials()
|
||||
materials = list()
|
||||
materials_by_category = list()
|
||||
materialtypes_by_category = list()
|
||||
material_combos = list()
|
||||
for(var/type in subtypesof(/datum/material))
|
||||
var/datum/material/ref = new type
|
||||
materials[type] = ref
|
||||
for(var/c in ref.categories)
|
||||
materials_by_category[c] += list(ref)
|
||||
materialtypes_by_category[c] += list(type)
|
||||
|
||||
/datum/controller/subsystem/materials/proc/GetMaterialRef(datum/material/fakemat)
|
||||
if(!materials)
|
||||
InitializeMaterials()
|
||||
return materials[fakemat] || fakemat
|
||||
return materials[fakemat] || fakemat
|
||||
|
||||
|
||||
///Returns a list to be used as an object's custom_materials. Lists will be cached and re-used based on the parameters.
|
||||
/datum/controller/subsystem/materials/proc/FindOrCreateMaterialCombo(list/materials_declaration, multiplier)
|
||||
if(!material_combos)
|
||||
InitializeMaterials()
|
||||
var/list/combo_params = list()
|
||||
for(var/x in materials_declaration)
|
||||
var/datum/material/mat = x
|
||||
var/path_name = ispath(mat) ? "[mat]" : "[mat.type]"
|
||||
combo_params += "[path_name]=[materials_declaration[mat] * multiplier]"
|
||||
sortTim(combo_params, /proc/cmp_text_asc) // We have to sort now in case the declaration was not in order
|
||||
var/combo_index = combo_params.Join("-")
|
||||
var/list/combo = material_combos[combo_index]
|
||||
if(!combo)
|
||||
combo = list()
|
||||
for(var/mat in materials_declaration)
|
||||
combo[GetMaterialRef(mat)] = materials_declaration[mat] * multiplier
|
||||
material_combos[combo_index] = combo
|
||||
return combo
|
||||
|
||||
@@ -5,6 +5,61 @@
|
||||
/datum/brain_trauma/magic
|
||||
resilience = TRAUMA_RESILIENCE_LOBOTOMY
|
||||
|
||||
/datum/brain_trauma/magic/lumiphobia
|
||||
name = "Lumiphobia"
|
||||
desc = "Patient has an inexplicable adverse reaction to light."
|
||||
scan_desc = "light hypersensitivity"
|
||||
gain_text = "<span class='warning'>You feel a craving for darkness.</span>"
|
||||
lose_text = "<span class='notice'>Light no longer bothers you.</span>"
|
||||
var/next_damage_warning = 0
|
||||
|
||||
/datum/brain_trauma/magic/lumiphobia/on_life()
|
||||
..()
|
||||
var/turf/T = owner.loc
|
||||
if(istype(T))
|
||||
var/light_amount = T.get_lumcount()
|
||||
if(light_amount > SHADOW_SPECIES_LIGHT_THRESHOLD) //if there's enough light, start dying
|
||||
if(world.time > next_damage_warning)
|
||||
to_chat(owner, "<span class='warning'><b>The light burns you!</b></span>")
|
||||
next_damage_warning = world.time + 100 //Avoid spamming
|
||||
owner.take_overall_damage(0,3)
|
||||
|
||||
/datum/brain_trauma/magic/poltergeist
|
||||
name = "Poltergeist"
|
||||
desc = "Patient appears to be targeted by a violent invisible entity."
|
||||
scan_desc = "paranormal activity"
|
||||
gain_text = "<span class='warning'>You feel a hateful presence close to you.</span>"
|
||||
lose_text = "<span class='notice'>You feel the hateful presence fade away.</span>"
|
||||
|
||||
/datum/brain_trauma/magic/poltergeist/on_life()
|
||||
..()
|
||||
if(prob(4))
|
||||
var/most_violent = -1 //So it can pick up items with 0 throwforce if there's nothing else
|
||||
var/obj/item/throwing
|
||||
for(var/obj/item/I in view(5, get_turf(owner)))
|
||||
if(I.anchored)
|
||||
continue
|
||||
if(I.throwforce > most_violent)
|
||||
most_violent = I.throwforce
|
||||
throwing = I
|
||||
if(throwing)
|
||||
throwing.throw_at(owner, 8, 2)
|
||||
|
||||
/datum/brain_trauma/magic/antimagic
|
||||
name = "Athaumasia"
|
||||
desc = "Patient is completely inert to magical forces."
|
||||
scan_desc = "thaumic blank"
|
||||
gain_text = "<span class='notice'>You realize that magic cannot be real.</span>"
|
||||
lose_text = "<span class='notice'>You realize that magic might be real.</span>"
|
||||
|
||||
/datum/brain_trauma/magic/antimagic/on_gain()
|
||||
ADD_TRAIT(owner, TRAIT_ANTIMAGIC, TRAUMA_TRAIT)
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/magic/antimagic/on_lose()
|
||||
REMOVE_TRAIT(owner, TRAIT_ANTIMAGIC, TRAUMA_TRAIT)
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/magic/stalker
|
||||
name = "Stalking Phantom"
|
||||
desc = "Patient is stalked by a phantom only they can see."
|
||||
|
||||
@@ -119,8 +119,9 @@
|
||||
|
||||
/datum/brain_trauma/severe/paralysis/spinesnapped
|
||||
random_gain = FALSE
|
||||
clonable = FALSE
|
||||
paralysis_type = "legs"
|
||||
resilience = TRAUMA_RESILIENCE_LOBOTOMY
|
||||
resilience = TRAUMA_RESILIENCE_LOBOTOMY // It shouldn't fix severed spinal cords really, but there is no specific surgery for that yet.
|
||||
|
||||
/datum/brain_trauma/severe/narcolepsy
|
||||
name = "Narcolepsy"
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glasses
|
||||
name = "Hand Made Glasses"
|
||||
desc = "Hande made glasses that have not been polished at all making them useless. Selling them could still be worth a bit of credits."
|
||||
name = "Handmade Glasses"
|
||||
desc = "Handmade glasses that have not been polished at all making them useless. Selling them could still be worth a few credits."
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "frames_2"
|
||||
@@ -92,7 +92,7 @@
|
||||
time = 150
|
||||
subcategory = CAT_MISCELLANEOUS
|
||||
category = CAT_MISC
|
||||
always_availible = FALSE // Disabled til learned
|
||||
always_availible = FALSE // Disabled until learned
|
||||
|
||||
|
||||
/datum/crafting_recipe/bloodsucker/candelabrum
|
||||
|
||||
@@ -0,0 +1,244 @@
|
||||
/*!
|
||||
This component makes it possible to make things edible. What this means is that you can take a bite or force someone to take a bite (in the case of items).
|
||||
These items take a specific time to eat, and can do most of the things our original food items could.
|
||||
Behavior that's still missing from this component that original food items had that should either be put into seperate components or somewhere else:
|
||||
Components:
|
||||
Drying component (jerky etc)
|
||||
Customizable component (custom pizzas etc)
|
||||
Processable component (Slicing and cooking behavior essentialy, making it go from item A to B when conditions are met.)
|
||||
Dunkable component (Dunking things into reagent containers to absorb a specific amount of reagents)
|
||||
Misc:
|
||||
Something for cakes (You can store things inside)
|
||||
*/
|
||||
/datum/component/edible
|
||||
///Amount of reagents taken per bite
|
||||
var/bite_consumption = 2
|
||||
///Amount of bites taken so far
|
||||
var/bitecount = 0
|
||||
///Flags for food
|
||||
var/food_flags = NONE
|
||||
///Bitfield of the types of this food
|
||||
var/foodtypes = NONE
|
||||
///Amount of seconds it takes to eat this food
|
||||
var/eat_time = 30
|
||||
///Defines how much it lowers someones satiety (Need to eat, essentialy)
|
||||
var/junkiness = 0
|
||||
///Message to send when eating
|
||||
var/list/eatverbs
|
||||
///Callback to be ran for when you take a bite of something
|
||||
var/datum/callback/after_eat
|
||||
///Last time we checked for food likes
|
||||
var/last_check_time
|
||||
|
||||
/datum/component/edible/Initialize(list/initial_reagents, food_flags = NONE, foodtypes = NONE, volume = 50, eat_time = 30, list/tastes, list/eatverbs = list("bite","chew","nibble","gnaw","gobble","chomp"), bite_consumption = 2, datum/callback/after_eat)
|
||||
if(!isatom(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
|
||||
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine)
|
||||
RegisterSignal(parent, COMSIG_ATOM_ATTACK_ANIMAL, .proc/UseByAnimal)
|
||||
if(isitem(parent))
|
||||
RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/UseFromHand)
|
||||
else if(isturf(parent))
|
||||
RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, .proc/TryToEatTurf)
|
||||
|
||||
src.bite_consumption = bite_consumption
|
||||
src.food_flags = food_flags
|
||||
src.foodtypes = foodtypes
|
||||
src.eat_time = eat_time
|
||||
src.eatverbs = eatverbs
|
||||
src.junkiness = junkiness
|
||||
src.after_eat = after_eat
|
||||
|
||||
var/atom/owner = parent
|
||||
|
||||
owner.create_reagents(volume, INJECTABLE)
|
||||
|
||||
if(initial_reagents)
|
||||
for(var/rid in initial_reagents)
|
||||
var/amount = initial_reagents[rid]
|
||||
if(tastes && tastes.len && (rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin))
|
||||
owner.reagents.add_reagent(rid, amount, tastes.Copy())
|
||||
else
|
||||
owner.reagents.add_reagent(rid, amount)
|
||||
|
||||
/datum/component/edible/proc/examine(datum/source, mob/user, list/examine_list)
|
||||
if(!(food_flags & FOOD_IN_CONTAINER))
|
||||
switch (bitecount)
|
||||
if (0)
|
||||
return
|
||||
if(1)
|
||||
examine_list += "[parent] was bitten by someone!"
|
||||
if(2,3)
|
||||
examine_list += "[parent] was bitten [bitecount] times!"
|
||||
else
|
||||
examine_list += "[parent] was bitten multiple times!"
|
||||
|
||||
/datum/component/edible/proc/UseFromHand(obj/item/source, mob/living/M, mob/living/user)
|
||||
return TryToEat(M, user)
|
||||
|
||||
/datum/component/edible/proc/TryToEatTurf(datum/source, mob/user)
|
||||
return TryToEat(user, user)
|
||||
|
||||
///All the checks for the act of eating itself and
|
||||
/datum/component/edible/proc/TryToEat(mob/living/eater, mob/living/feeder)
|
||||
|
||||
set waitfor = FALSE
|
||||
|
||||
var/atom/owner = parent
|
||||
|
||||
if(feeder.a_intent == INTENT_HARM)
|
||||
return
|
||||
if(!owner.reagents.total_volume)//Shouldn't be needed but it checks to see if it has anything left in it.
|
||||
to_chat(feeder, "<span class='warning'>None of [owner] left, oh no!</span>")
|
||||
if(isturf(parent))
|
||||
var/turf/T = parent
|
||||
T.ScrapeAway(1, CHANGETURF_INHERIT_AIR)
|
||||
else
|
||||
qdel(parent)
|
||||
return
|
||||
if(!CanConsume(eater, feeder))
|
||||
return
|
||||
var/fullness = eater.nutrition + 10 //The theoretical fullness of the person eating if they were to eat this
|
||||
for(var/datum/reagent/consumable/C in eater.reagents.reagent_list) //we add the nutrition value of what we're currently digesting
|
||||
fullness += C.nutriment_factor * C.volume / C.metabolization_rate
|
||||
|
||||
. = COMPONENT_ITEM_NO_ATTACK //Point of no return I suppose
|
||||
|
||||
if(eater == feeder)//If you're eating it yourself.
|
||||
if(!do_mob(feeder, eater, eat_time)) //Gotta pass the minimal eat time
|
||||
return
|
||||
var/eatverb = pick(eatverbs)
|
||||
if(junkiness && eater.satiety < -150 && eater.nutrition > NUTRITION_LEVEL_STARVING + 50 && !HAS_TRAIT(eater, TRAIT_VORACIOUS))
|
||||
to_chat(eater, "<span class='warning'>You don't feel like eating any more junk food at the moment!</span>")
|
||||
return
|
||||
else if(fullness <= 50)
|
||||
eater.visible_message("<span class='notice'>[eater] hungrily [eatverb]s \the [parent], gobbling it down!</span>", "<span class='notice'>You hungrily [eatverb] \the [parent], gobbling it down!</span>")
|
||||
else if(fullness > 50 && fullness < 150)
|
||||
eater.visible_message("<span class='notice'>[eater] hungrily [eatverb]s \the [parent].</span>", "<span class='notice'>You hungrily [eatverb] \the [parent].</span>")
|
||||
else if(fullness > 150 && fullness < 500)
|
||||
eater.visible_message("<span class='notice'>[eater] [eatverb]s \the [parent].</span>", "<span class='notice'>You [eatverb] \the [parent].</span>")
|
||||
else if(fullness > 500 && fullness < 600)
|
||||
eater.visible_message("<span class='notice'>[eater] unwillingly [eatverb]s a bit of \the [parent].</span>", "<span class='notice'>You unwillingly [eatverb] a bit of \the [parent].</span>")
|
||||
else if(fullness > (600 * (1 + eater.overeatduration / 2000))) // The more you eat - the more you can eat
|
||||
eater.visible_message("<span class='warning'>[eater] cannot force any more of \the [parent] to go down [eater.p_their()] throat!</span>", "<span class='warning'>You cannot force any more of \the [parent] to go down your throat!</span>")
|
||||
return
|
||||
else //If you're feeding it to someone else.
|
||||
if(isbrain(eater))
|
||||
to_chat(feeder, "<span class='warning'>[eater] doesn't seem to have a mouth!</span>")
|
||||
return
|
||||
if(fullness <= (600 * (1 + eater.overeatduration / 1000)))
|
||||
eater.visible_message("<span class='danger'>[feeder] attempts to feed [eater] [parent].</span>", \
|
||||
"<span class='userdanger'>[feeder] attempts to feed you [parent].</span>")
|
||||
else
|
||||
eater.visible_message("<span class='warning'>[feeder] cannot force any more of [parent] down [eater]'s throat!</span>", \
|
||||
"<span class='warning'>[feeder] cannot force any more of [parent] down your throat!</span>")
|
||||
return
|
||||
if(!do_mob(feeder, eater)) //Wait 3 seconds before you can feed
|
||||
return
|
||||
|
||||
log_combat(feeder, eater, "fed", owner.reagents.log_list())
|
||||
eater.visible_message("<span class='danger'>[feeder] forces [eater] to eat [parent]!</span>", \
|
||||
"<span class='userdanger'>[feeder] forces you to eat [parent]!</span>")
|
||||
|
||||
TakeBite(eater, feeder)
|
||||
|
||||
///This function lets the eater take a bite and transfers the reagents to the eater.
|
||||
/datum/component/edible/proc/TakeBite(mob/living/eater, mob/living/feeder)
|
||||
|
||||
var/atom/owner = parent
|
||||
|
||||
if(!owner?.reagents)
|
||||
return FALSE
|
||||
if(eater.satiety > -200)
|
||||
eater.satiety -= junkiness
|
||||
playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE)
|
||||
if(owner.reagents.total_volume)
|
||||
SEND_SIGNAL(parent, COMSIG_FOOD_EATEN, eater, feeder)
|
||||
var/fraction = min(bite_consumption / owner.reagents.total_volume, 1)
|
||||
owner.reagents.reaction(eater, INGEST, fraction)
|
||||
owner.reagents.trans_to(eater, bite_consumption)
|
||||
bitecount++
|
||||
On_Consume(eater)
|
||||
checkLiked(fraction, eater)
|
||||
|
||||
//Invoke our after eat callback if it is valid
|
||||
if(after_eat)
|
||||
after_eat.Invoke(eater, feeder)
|
||||
|
||||
return TRUE
|
||||
|
||||
///Checks whether or not the eater can actually consume the food
|
||||
/datum/component/edible/proc/CanConsume(mob/living/eater, mob/living/feeder)
|
||||
if(!iscarbon(eater))
|
||||
return FALSE
|
||||
var/mob/living/carbon/C = eater
|
||||
var/covered = ""
|
||||
if(C.is_mouth_covered(head_only = 1))
|
||||
covered = "headgear"
|
||||
else if(C.is_mouth_covered(mask_only = 1))
|
||||
covered = "mask"
|
||||
if(covered)
|
||||
var/who = (isnull(feeder) || eater == feeder) ? "your" : "[eater.p_their()]"
|
||||
to_chat(feeder, "<span class='warning'>You have to remove [who] [covered] first!</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
///Check foodtypes to see if we should send a moodlet
|
||||
/datum/component/edible/proc/checkLiked(var/fraction, mob/M)
|
||||
if(last_check_time + 50 > world.time)
|
||||
return FALSE
|
||||
if(!ishuman(M))
|
||||
return FALSE
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(HAS_TRAIT(H, TRAIT_AGEUSIA) && foodtypes & H.dna.species.toxic_food)
|
||||
to_chat(H, "<span class='warning'>You don't feel so good...</span>")
|
||||
H.adjust_disgust(25 + 30 * fraction)
|
||||
else
|
||||
if(foodtypes & H.dna.species.toxic_food)
|
||||
to_chat(H,"<span class='warning'>What the hell was that thing?!</span>")
|
||||
H.adjust_disgust(25 + 30 * fraction)
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food)
|
||||
else if(foodtypes & H.dna.species.disliked_food)
|
||||
to_chat(H,"<span class='notice'>That didn't taste very good...</span>")
|
||||
H.adjust_disgust(11 + 15 * fraction)
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food)
|
||||
else if(foodtypes & H.dna.species.liked_food)
|
||||
to_chat(H,"<span class='notice'>I love this taste!</span>")
|
||||
H.adjust_disgust(-5 + -2.5 * fraction)
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food)
|
||||
if((foodtypes & BREAKFAST) && world.time - SSticker.round_start_time < STOP_SERVING_BREAKFAST)
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "breakfast", /datum/mood_event/breakfast)
|
||||
last_check_time = world.time
|
||||
|
||||
///Delete the item when it is fully eaten
|
||||
/datum/component/edible/proc/On_Consume(mob/living/eater)
|
||||
|
||||
var/atom/owner = parent
|
||||
|
||||
if(!eater)
|
||||
return
|
||||
if(!owner.reagents.total_volume)
|
||||
if(isturf(parent))
|
||||
var/turf/T = parent
|
||||
T.ScrapeAway(1, CHANGETURF_INHERIT_AIR)
|
||||
else
|
||||
qdel(parent)
|
||||
|
||||
///Ability to feed food to puppers
|
||||
/datum/component/edible/proc/UseByAnimal(datum/source, mob/user)
|
||||
|
||||
var/atom/owner = parent
|
||||
|
||||
if(!isdog(user))
|
||||
return
|
||||
var/mob/living/L = user
|
||||
if(bitecount == 0 || prob(50))
|
||||
L.emote("me", 1, "nibbles away at \the [parent]")
|
||||
bitecount++
|
||||
. = COMPONENT_ITEM_NO_ATTACK
|
||||
L.taste(owner.reagents) // why should carbons get all the fun?
|
||||
if(bitecount >= 5)
|
||||
var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where \the [parent] was")
|
||||
if(sattisfaction_text)
|
||||
L.emote("me", 1, "[sattisfaction_text]")
|
||||
qdel(parent)
|
||||
@@ -69,8 +69,9 @@
|
||||
out += "[out ? " and it " : "[master] "]seems to be glowing a bit."
|
||||
if(RAD_AMOUNT_HIGH to INFINITY) //At this level the object can contaminate other objects
|
||||
out += "[out ? " and it " : "[master] "]hurts to look at."
|
||||
else
|
||||
out += "."
|
||||
if(!LAZYLEN(out))
|
||||
return
|
||||
out += "."
|
||||
examine_list += out.Join()
|
||||
|
||||
/datum/component/radioactive/proc/rad_attack(datum/source, atom/movable/target, mob/living/user)
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
var/list/faction = list("mining")
|
||||
|
||||
/datum/component/spawner/Initialize(_mob_types, _spawn_time, _faction, _spawn_text, _max_mobs)
|
||||
if(!isatom(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
if(_spawn_time)
|
||||
spawn_time=_spawn_time
|
||||
if(_mob_types)
|
||||
@@ -19,20 +21,25 @@
|
||||
if(_max_mobs)
|
||||
max_mobs=_max_mobs
|
||||
|
||||
RegisterSignal(parent, list(COMSIG_PARENT_QDELETING), .proc/stop_spawning)
|
||||
RegisterSignal(parent, COMSIG_PARENT_QDELETING, .proc/stop_spawning)
|
||||
RegisterSignal(parent, COMSIG_OBJ_ATTACK_GENERIC, .proc/on_attack_generic)
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
|
||||
/datum/component/spawner/process()
|
||||
try_spawn_mob()
|
||||
|
||||
|
||||
/datum/component/spawner/proc/stop_spawning(force, hint)
|
||||
/datum/component/spawner/proc/stop_spawning(datum/source, force, hint)
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
for(var/mob/living/simple_animal/L in spawned_mobs)
|
||||
if(L.nest == src)
|
||||
L.nest = null
|
||||
spawned_mobs = null
|
||||
|
||||
// Stopping clientless simple mobs' from indiscriminately bashing their own spawners due DestroySurroundings() et similars.
|
||||
/datum/component/spawner/proc/on_attack_generic(datum/source, mob/user, damage_amount, damage_type, damage_flag, sound_effect, armor_penetration)
|
||||
if(!user.client && ((user.faction & faction) || (user in spawned_mobs)))
|
||||
return COMPONENT_STOP_GENERIC_ATTACK
|
||||
|
||||
/datum/component/spawner/proc/try_spawn_mob()
|
||||
var/atom/P = parent
|
||||
if(spawned_mobs.len >= max_mobs)
|
||||
|
||||
@@ -20,11 +20,11 @@
|
||||
|
||||
/datum/disease/transformation/Copy()
|
||||
var/datum/disease/transformation/D = ..()
|
||||
D.stage1 = stage1.Copy()
|
||||
D.stage2 = stage2.Copy()
|
||||
D.stage3 = stage3.Copy()
|
||||
D.stage4 = stage4.Copy()
|
||||
D.stage5 = stage5.Copy()
|
||||
D.stage1 = stage1?.Copy()
|
||||
D.stage2 = stage2?.Copy()
|
||||
D.stage3 = stage3?.Copy()
|
||||
D.stage4 = stage4?.Copy()
|
||||
D.stage5 = stage5?.Copy()
|
||||
D.new_form = D.new_form
|
||||
return D
|
||||
|
||||
|
||||
@@ -8,8 +8,11 @@
|
||||
if(. == ELEMENT_INCOMPATIBLE || !isatom(target) || isarea(target))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
beauty = beautyamount
|
||||
RegisterSignal(target, COMSIG_ENTER_AREA, .proc/enter_area)
|
||||
RegisterSignal(target, COMSIG_EXIT_AREA, .proc/exit_area)
|
||||
|
||||
if(ismovable(target))
|
||||
RegisterSignal(target, COMSIG_ENTER_AREA, .proc/enter_area)
|
||||
RegisterSignal(target, COMSIG_EXIT_AREA, .proc/exit_area)
|
||||
|
||||
var/area/A = get_area(target)
|
||||
if(A)
|
||||
enter_area(null, A)
|
||||
|
||||
@@ -23,10 +23,14 @@
|
||||
var/end_sound
|
||||
var/chance
|
||||
var/volume = 100
|
||||
var/vary = FALSE
|
||||
var/max_loops
|
||||
var/direct
|
||||
var/extra_range = 0
|
||||
var/falloff
|
||||
|
||||
var/timerid
|
||||
var/init_timerid
|
||||
|
||||
/datum/looping_sound/New(list/_output_atoms=list(), start_immediately=FALSE, _direct=FALSE)
|
||||
if(!mid_sounds)
|
||||
@@ -47,13 +51,15 @@
|
||||
/datum/looping_sound/proc/start(atom/add_thing)
|
||||
if(add_thing)
|
||||
output_atoms |= add_thing
|
||||
if(timerid)
|
||||
if(timerid || init_timerid)
|
||||
return
|
||||
on_start()
|
||||
|
||||
/datum/looping_sound/proc/stop(atom/remove_thing)
|
||||
if(remove_thing)
|
||||
output_atoms -= remove_thing
|
||||
if(init_timerid)
|
||||
deltimer(init_timerid)
|
||||
if(!timerid)
|
||||
return
|
||||
on_stop()
|
||||
@@ -80,7 +86,7 @@
|
||||
if(direct)
|
||||
SEND_SOUND(thing, S)
|
||||
else
|
||||
playsound(thing, S, volume)
|
||||
playsound(thing, S, volume, vary, extra_range, falloff)
|
||||
|
||||
/datum/looping_sound/proc/get_sound(starttime, _mid_sounds)
|
||||
. = _mid_sounds || mid_sounds
|
||||
@@ -92,7 +98,7 @@
|
||||
if(start_sound)
|
||||
play(start_sound)
|
||||
start_wait = start_length
|
||||
addtimer(CALLBACK(src, .proc/sound_loop), start_wait, TIMER_CLIENT_TIME)
|
||||
init_timerid = addtimer(CALLBACK(src, .proc/sound_loop), start_wait, TIMER_CLIENT_TIME | TIMER_STOPPABLE)
|
||||
|
||||
/datum/looping_sound/proc/on_stop()
|
||||
if(end_sound)
|
||||
|
||||
@@ -6,8 +6,6 @@ Simple datum which is instanced once per type and is used for every object of sa
|
||||
/datum/material
|
||||
var/name = "material"
|
||||
var/desc = "its..stuff."
|
||||
///Var that's mostly used by science machines to identify specific materials, should most likely be phased out at some point
|
||||
var/id = "mat"
|
||||
///Base color of the material, is used for greyscale. Item isn't changed in color if this is null.
|
||||
var/color
|
||||
///Base alpha of the material, is used for greyscale icons.
|
||||
@@ -26,6 +24,20 @@ Simple datum which is instanced once per type and is used for every object of sa
|
||||
var/armor_modifiers = list("melee" = 1, "bullet" = 1, "laser" = 1, "energy" = 1, "bomb" = 1, "bio" = 1, "rad" = 1, "fire" = 1, "acid" = 1)
|
||||
///How beautiful is this material per unit?
|
||||
var/beauty_modifier = 0
|
||||
///Can be used to override the sound items make, lets add some SLOSHing.
|
||||
var/item_sound_override
|
||||
///Can be used to override the stepsound a turf makes. MORE SLOOOSH
|
||||
var/turf_sound_override
|
||||
///what texture icon state to overlay
|
||||
var/texture_layer_icon_state
|
||||
///a cached filter for the texture icon
|
||||
var/cached_texture_filter
|
||||
|
||||
/datum/material/New()
|
||||
. = ..()
|
||||
if(texture_layer_icon_state)
|
||||
var/texture_icon = icon('icons/materials/composite.dmi', texture_layer_icon_state)
|
||||
cached_texture_filter = filter(type="layer", icon=texture_icon, blend_mode = BLEND_INSET_OVERLAY)
|
||||
|
||||
///This proc is called when the material is added to an object.
|
||||
/datum/material/proc/on_applied(atom/source, amount, material_flags)
|
||||
@@ -34,16 +46,27 @@ Simple datum which is instanced once per type and is used for every object of sa
|
||||
source.add_atom_colour(color, FIXED_COLOUR_PRIORITY)
|
||||
if(alpha)
|
||||
source.alpha = alpha
|
||||
if(texture_layer_icon_state)
|
||||
ADD_KEEP_TOGETHER(source, MATERIAL_SOURCE(src))
|
||||
source.filters += cached_texture_filter
|
||||
|
||||
if(material_flags & MATERIAL_ADD_PREFIX)
|
||||
source.name = "[name] [source.name]"
|
||||
|
||||
if(istype(source, /obj)) //objs
|
||||
on_applied_obj(source, amount, material_flags)
|
||||
|
||||
if(beauty_modifier)
|
||||
addtimer(CALLBACK(source, /datum.proc/_AddElement, list(/datum/element/beauty, beauty_modifier * amount)), 0)
|
||||
|
||||
if(istype(source, /obj)) //objs
|
||||
on_applied_obj(source, amount, material_flags)
|
||||
|
||||
else if(isturf(source, /turf)) //turfs
|
||||
on_applied_turf(source, amount, material_flags)
|
||||
|
||||
source.mat_update_desc(src)
|
||||
|
||||
///This proc is called when a material updates an object's description
|
||||
/atom/proc/mat_update_desc(/datum/material/mat)
|
||||
return
|
||||
///This proc is called when the material is added to an object specifically.
|
||||
/datum/material/proc/on_applied_obj(var/obj/o, amount, material_flags)
|
||||
if(material_flags & MATERIAL_AFFECT_STATISTICS)
|
||||
@@ -61,6 +84,24 @@ Simple datum which is instanced once per type and is used for every object of sa
|
||||
for(var/i in current_armor)
|
||||
temp_armor_list[i] = current_armor[i] * armor_modifiers[i]
|
||||
o.armor = getArmor(arglist(temp_armor_list))
|
||||
if(!isitem(o))
|
||||
return
|
||||
var/obj/item/I = o
|
||||
if(!item_sound_override)
|
||||
return
|
||||
I.hitsound = item_sound_override
|
||||
I.usesound = item_sound_override
|
||||
I.throwhitsound = item_sound_override
|
||||
|
||||
/datum/material/proc/on_applied_turf(var/turf/T, amount, material_flags)
|
||||
if(isopenturf(T))
|
||||
if(!turf_sound_override)
|
||||
return
|
||||
var/turf/open/O = T
|
||||
O.footstep = turf_sound_override
|
||||
O.barefootstep = turf_sound_override
|
||||
O.clawfootstep = turf_sound_override
|
||||
O.heavyfootstep = turf_sound_override
|
||||
|
||||
///This proc is called when the material is removed from an object.
|
||||
/datum/material/proc/on_removed(atom/source, material_flags)
|
||||
@@ -68,6 +109,9 @@ Simple datum which is instanced once per type and is used for every object of sa
|
||||
if(color)
|
||||
source.remove_atom_colour(FIXED_COLOUR_PRIORITY, color)
|
||||
source.alpha = initial(source.alpha)
|
||||
if(texture_layer_icon_state)
|
||||
source.filters -= cached_texture_filter
|
||||
REMOVE_KEEP_TOGETHER(source, MATERIAL_SOURCE(src))
|
||||
|
||||
if(material_flags & MATERIAL_ADD_PREFIX)
|
||||
source.name = initial(source.name)
|
||||
@@ -75,10 +119,16 @@ Simple datum which is instanced once per type and is used for every object of sa
|
||||
if(istype(source, /obj)) //objs
|
||||
on_removed_obj(source, material_flags)
|
||||
|
||||
else if(istype(source, /turf)) //turfs
|
||||
on_removed_turf(source, material_flags)
|
||||
|
||||
///This proc is called when the material is removed from an object specifically.
|
||||
/datum/material/proc/on_removed_obj(var/obj/o, amount, material_flags)
|
||||
/datum/material/proc/on_removed_obj(obj/o, material_flags)
|
||||
if(material_flags & MATERIAL_AFFECT_STATISTICS)
|
||||
var/new_max_integrity = initial(o.max_integrity)
|
||||
o.modify_max_integrity(new_max_integrity)
|
||||
o.force = initial(o.force)
|
||||
o.throwforce = initial(o.throwforce)
|
||||
|
||||
/datum/material/proc/on_removed_turf(turf/T, material_flags)
|
||||
return
|
||||
|
||||
@@ -1,21 +1,19 @@
|
||||
///Has no special properties.
|
||||
/datum/material/iron
|
||||
name = "iron"
|
||||
id = "iron"
|
||||
desc = "Common iron ore often found in sedimentary and igneous layers of the crust."
|
||||
color = "#878687"
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/metal
|
||||
value_per_unit = 0.0025
|
||||
|
||||
///Breaks extremely easily but is transparent.
|
||||
/datum/material/glass
|
||||
name = "glass"
|
||||
id = "glass"
|
||||
desc = "Glass forged by melting sand."
|
||||
color = "#88cdf1"
|
||||
alpha = 150
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
integrity_modifier = 0.1
|
||||
sheet_type = /obj/item/stack/sheet/glass
|
||||
value_per_unit = 0.0025
|
||||
@@ -30,10 +28,9 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
///Has no special properties. Could be good against vampires in the future perhaps.
|
||||
/datum/material/silver
|
||||
name = "silver"
|
||||
id = "silver"
|
||||
desc = "Silver"
|
||||
color = list(255/255, 284/255, 302/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0)
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/silver
|
||||
value_per_unit = 0.025
|
||||
beauty_modifier = 0.075
|
||||
@@ -41,11 +38,10 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
///Slight force increase
|
||||
/datum/material/gold
|
||||
name = "gold"
|
||||
id = "gold"
|
||||
desc = "Gold"
|
||||
color = list(340/255, 240/255, 50/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) //gold is shiny, but not as bright as bananium
|
||||
strength_modifier = 1.2
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/gold
|
||||
value_per_unit = 0.0625
|
||||
beauty_modifier = 0.15
|
||||
@@ -54,11 +50,10 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
///Has no special properties
|
||||
/datum/material/diamond
|
||||
name = "diamond"
|
||||
id = "diamond"
|
||||
desc = "Highly pressurized carbon"
|
||||
color = list(48/255, 272/255, 301/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0)
|
||||
alpha = 132
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/diamond
|
||||
value_per_unit = 0.25
|
||||
beauty_modifier = 0.3
|
||||
@@ -67,10 +62,9 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
///Is slightly radioactive
|
||||
/datum/material/uranium
|
||||
name = "uranium"
|
||||
id = "uranium"
|
||||
desc = "Uranium"
|
||||
color = rgb(48, 237, 26)
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/uranium
|
||||
value_per_unit = 0.05
|
||||
beauty_modifier = 0.3 //It shines so beautiful
|
||||
@@ -88,10 +82,9 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
///Adds firestacks on hit (Still needs support to turn into gas on destruction)
|
||||
/datum/material/plasma
|
||||
name = "plasma"
|
||||
id = "plasma"
|
||||
desc = "Isn't plasma a state of matter? Oh whatever."
|
||||
color = list(298/255, 46/255, 352/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0)
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/plasma
|
||||
value_per_unit = 0.1
|
||||
beauty_modifier = 0.15
|
||||
@@ -111,7 +104,6 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
///Can cause bluespace effects on use. (Teleportation) (Not yet implemented)
|
||||
/datum/material/bluespace
|
||||
name = "bluespace crystal"
|
||||
id = "bluespace_crystal"
|
||||
desc = "Crystals with bluespace properties"
|
||||
color = list(119/255, 217/255, 396/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0)
|
||||
alpha = 200
|
||||
@@ -123,10 +115,9 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
///Honks and slips
|
||||
/datum/material/bananium
|
||||
name = "bananium"
|
||||
id = "bananium"
|
||||
desc = "Material with hilarious properties"
|
||||
color = list(460/255, 464/255, 0, 0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) //obnoxiously bright yellow
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/bananium
|
||||
value_per_unit = 0.5
|
||||
beauty_modifier = 0.5
|
||||
@@ -146,11 +137,10 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
///Mediocre force increase
|
||||
/datum/material/titanium
|
||||
name = "titanium"
|
||||
id = "titanium"
|
||||
desc = "Titanium"
|
||||
color = "#b3c0c7"
|
||||
strength_modifier = 1.3
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE)
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/titanium
|
||||
value_per_unit = 0.0625
|
||||
beauty_modifier = 0.05
|
||||
@@ -158,11 +148,10 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
|
||||
/datum/material/runite
|
||||
name = "runite"
|
||||
id = "runite"
|
||||
desc = "Runite"
|
||||
color = "#3F9995"
|
||||
strength_modifier = 1.3
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/runite
|
||||
beauty_modifier = 0.5
|
||||
armor_modifiers = list("melee" = 1.35, "bullet" = 2, "laser" = 0.5, "energy" = 1.25, "bomb" = 1.25, "bio" = 1, "rad" = 1, "fire" = 1.4, "acid" = 1) //rune is weak against magic lasers but strong against bullets. This is the combat triangle.
|
||||
@@ -170,7 +159,6 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
///Force decrease
|
||||
/datum/material/plastic
|
||||
name = "plastic"
|
||||
id = "plastic"
|
||||
desc = "Plastic"
|
||||
color = "#caccd9"
|
||||
strength_modifier = 0.85
|
||||
@@ -182,7 +170,6 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
///Force decrease and mushy sound effect. (Not yet implemented)
|
||||
/datum/material/biomass
|
||||
name = "biomass"
|
||||
id = "biomass"
|
||||
desc = "Organic matter"
|
||||
color = "#735b4d"
|
||||
strength_modifier = 0.8
|
||||
@@ -190,12 +177,11 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
|
||||
/datum/material/wood
|
||||
name = "wood"
|
||||
id = "wood"
|
||||
desc = "Flexible, durable, but flamable. Hard to come across in space."
|
||||
color = "#bb8e53"
|
||||
strength_modifier = 0.5
|
||||
sheet_type = /obj/item/stack/sheet/mineral/wood
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
value_per_unit = 0.06
|
||||
beauty_modifier = 0.1
|
||||
armor_modifiers = list("melee" = 1.1, "bullet" = 1.1, "laser" = 0.4, "energy" = 0.4, "bomb" = 1, "bio" = 0.2, "rad" = 0, "fire" = 0, "acid" = 0.3)
|
||||
@@ -215,11 +201,10 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
///Stronk force increase
|
||||
/datum/material/adamantine
|
||||
name = "adamantine"
|
||||
id = "adamantine"
|
||||
desc = "A powerful material made out of magic, I mean science!"
|
||||
color = "#6d7e8e"
|
||||
strength_modifier = 1.5
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/adamantine
|
||||
value_per_unit = 0.25
|
||||
beauty_modifier = 0.4
|
||||
@@ -228,10 +213,9 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
///RPG Magic. (Admin only)
|
||||
/datum/material/mythril
|
||||
name = "mythril"
|
||||
id = "mythril"
|
||||
desc = "How this even exists is byond me"
|
||||
color = "#f2d5d7"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/mythril
|
||||
value_per_unit = 0.75
|
||||
beauty_modifier = 0.5
|
||||
@@ -246,3 +230,134 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
. = ..()
|
||||
if(istype(source, /obj/item))
|
||||
qdel(source.GetComponent(/datum/component/fantasy))
|
||||
|
||||
//I don't like sand. It's coarse, and rough, and irritating, and it gets everywhere.
|
||||
/datum/material/sand
|
||||
name = "sand"
|
||||
desc = "You know, it's amazing just how structurally sound sand can be."
|
||||
color = "#EDC9AF"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/sandblock
|
||||
value_per_unit = 0.001
|
||||
strength_modifier = 0.5
|
||||
integrity_modifier = 0.1
|
||||
armor_modifiers = list("melee" = 0.25, "bullet" = 0.25, "laser" = 1.25, "energy" = 0.25, "bomb" = 0.25, "bio" = 0.25, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5)
|
||||
beauty_modifier = 0.25
|
||||
turf_sound_override = FOOTSTEP_SAND
|
||||
texture_layer_icon_state = "sand"
|
||||
|
||||
//And now for our lavaland dwelling friends, sand, but in stone form! Truly revolutionary.
|
||||
/datum/material/sandstone
|
||||
name = "sandstone"
|
||||
desc = "Bialtaakid 'ant taerif ma hdha."
|
||||
color = "#B77D31"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/sandstone
|
||||
value_per_unit = 0.0025
|
||||
armor_modifiers = list("melee" = 0.5, "bullet" = 0.5, "laser" = 1.25, "energy" = 0.5, "bomb" = 0.5, "bio" = 0.25, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5)
|
||||
beauty_modifier = 0.3
|
||||
turf_sound_override = FOOTSTEP_WOOD
|
||||
texture_layer_icon_state = "brick"
|
||||
|
||||
/datum/material/snow
|
||||
name = "snow"
|
||||
desc = "There's no business like snow business."
|
||||
color = "#FFFFFF"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/snow
|
||||
value_per_unit = 0.0025
|
||||
armor_modifiers = list("melee" = 0.25, "bullet" = 0.25, "laser" = 0.25, "energy" = 0.25, "bomb" = 0.25, "bio" = 0.25, "rad" = 1.5, "fire" = 0.25, "acid" = 1.5)
|
||||
beauty_modifier = 0.3
|
||||
turf_sound_override = FOOTSTEP_SAND
|
||||
texture_layer_icon_state = "sand"
|
||||
|
||||
/datum/material/runedmetal
|
||||
name = "runed metal"
|
||||
desc = "Mir'ntrath barhah Nar'sie."
|
||||
color = "#3C3434"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/runed_metal
|
||||
value_per_unit = 0.75
|
||||
armor_modifiers = list("melee" = 1.2, "bullet" = 1.2, "laser" = 1, "energy" = 1, "bomb" = 1.2, "bio" = 1.2, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5)
|
||||
beauty_modifier = -0.15
|
||||
texture_layer_icon_state = "runed"
|
||||
|
||||
/datum/material/bronze
|
||||
name = "bronze"
|
||||
desc = "Clock Cult? Never heard of it."
|
||||
color = "#92661A"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/tile/bronze
|
||||
value_per_unit = 0.025
|
||||
armor_modifiers = list("melee" = 1, "bullet" = 1, "laser" = 1, "energy" = 1, "bomb" = 1, "bio" = 1, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5)
|
||||
beauty_modifier = 0.2
|
||||
|
||||
/datum/material/paper
|
||||
name = "paper"
|
||||
desc = "Ten thousand folds of pure starchy power."
|
||||
color = "#E5DCD5"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/paperframes
|
||||
value_per_unit = 0.0025
|
||||
armor_modifiers = list("melee" = 0.1, "bullet" = 0.1, "laser" = 0.1, "energy" = 0.1, "bomb" = 0.1, "bio" = 0.1, "rad" = 1.5, "fire" = 0, "acid" = 1.5)
|
||||
beauty_modifier = 0.3
|
||||
turf_sound_override = FOOTSTEP_SAND
|
||||
texture_layer_icon_state = "paper"
|
||||
|
||||
/datum/material/paper/on_applied_obj(obj/source, amount, material_flags)
|
||||
. = ..()
|
||||
if(material_flags & MATERIAL_AFFECT_STATISTICS)
|
||||
var/obj/paper = source
|
||||
paper.resistance_flags |= FLAMMABLE
|
||||
paper.obj_flags |= UNIQUE_RENAME
|
||||
|
||||
/datum/material/paper/on_removed_obj(obj/source, material_flags)
|
||||
if(material_flags & MATERIAL_AFFECT_STATISTICS)
|
||||
var/obj/paper = source
|
||||
paper.resistance_flags &= ~FLAMMABLE
|
||||
return ..()
|
||||
|
||||
/datum/material/cardboard
|
||||
name = "cardboard"
|
||||
desc = "They say cardboard is used by hobos to make incredible things."
|
||||
color = "#5F625C"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/cardboard
|
||||
value_per_unit = 0.003
|
||||
armor_modifiers = list("melee" = 0.25, "bullet" = 0.25, "laser" = 0.25, "energy" = 0.25, "bomb" = 0.25, "bio" = 0.25, "rad" = 1.5, "fire" = 0, "acid" = 1.5)
|
||||
beauty_modifier = -0.1
|
||||
|
||||
/datum/material/cardboard/on_applied_obj(obj/source, amount, material_flags)
|
||||
. = ..()
|
||||
if(material_flags & MATERIAL_AFFECT_STATISTICS)
|
||||
var/obj/cardboard = source
|
||||
cardboard.resistance_flags |= FLAMMABLE
|
||||
cardboard.obj_flags |= UNIQUE_RENAME
|
||||
|
||||
/datum/material/cardboard/on_removed_obj(obj/source, material_flags)
|
||||
if(material_flags & MATERIAL_AFFECT_STATISTICS)
|
||||
var/obj/cardboard = source
|
||||
cardboard.resistance_flags &= ~FLAMMABLE
|
||||
return ..()
|
||||
|
||||
/datum/material/bone
|
||||
name = "bone"
|
||||
desc = "Man, building with this will make you the coolest caveman on the block."
|
||||
color = "#e3dac9"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/bone
|
||||
value_per_unit = 0.05
|
||||
armor_modifiers = list("melee" = 1.2, "bullet" = 0.75, "laser" = 0.75, "energy" = 1.2, "bomb" = 1, "bio" = 1, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5)
|
||||
beauty_modifier = -0.2
|
||||
|
||||
/datum/material/bamboo
|
||||
name = "bamboo"
|
||||
desc = "If it's good enough for pandas, it's good enough for you."
|
||||
color = "#339933"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/bamboo
|
||||
value_per_unit = 0.0025
|
||||
armor_modifiers = list("melee" = 0.5, "bullet" = 0.5, "laser" = 0.5, "energy" = 0.5, "bomb" = 0.5, "bio" = 0.51, "rad" = 1.5, "fire" = 0.5, "acid" = 1.5)
|
||||
beauty_modifier = 0.2
|
||||
turf_sound_override = FOOTSTEP_WOOD
|
||||
texture_layer_icon_state = "bamboo"
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
///It's gross, gets the name of it's owner, and is all kinds of fucked up
|
||||
/datum/material/meat
|
||||
name = "meat"
|
||||
desc = "Meat"
|
||||
color = rgb(214, 67, 67)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/meat
|
||||
value_per_unit = 0.05
|
||||
beauty_modifier = -0.3
|
||||
strength_modifier = 0.7
|
||||
armor_modifiers = list("melee" = 0.3, "bullet" = 0.3, "laser" = 1.2, "energy" = 1.2, "bomb" = 0.3, "bio" = 0, "rad" = 0.7, "fire" = 1, "acid" = 1)
|
||||
item_sound_override = 'sound/effects/meatslap.ogg'
|
||||
turf_sound_override = FOOTSTEP_MEAT
|
||||
texture_layer_icon_state = "meat"
|
||||
|
||||
/datum/material/meat/on_removed(atom/source, material_flags)
|
||||
. = ..()
|
||||
qdel(source.GetComponent(/datum/component/edible))
|
||||
|
||||
/datum/material/meat/on_applied_obj(obj/O, amount, material_flags)
|
||||
. = ..()
|
||||
O.obj_flags |= UNIQUE_RENAME //So you can name it after the person its made from, a depressing comprimise.
|
||||
make_edible(O, amount, material_flags)
|
||||
|
||||
/datum/material/meat/on_applied_turf(turf/T, amount, material_flags)
|
||||
. = ..()
|
||||
make_edible(T, amount, material_flags)
|
||||
|
||||
/datum/material/meat/proc/make_edible(atom/source, amount, material_flags)
|
||||
var/nutriment_count = 3 * (amount / MINERAL_MATERIAL_AMOUNT)
|
||||
var/oil_count = 2 * (amount / MINERAL_MATERIAL_AMOUNT)
|
||||
source.AddComponent(/datum/component/edible, list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/cooking_oil = oil_count), null, RAW | MEAT | GROSS, null, 30, list("Fleshy"))
|
||||
@@ -0,0 +1,30 @@
|
||||
/datum/material/pizza
|
||||
name = "pizza"
|
||||
desc = "~Jamme, jamme, n'coppa, jamme ja! Jamme, jamme, n'coppa jamme ja, funi-culi funi-cala funi-culi funi-cala!! Jamme jamme ja funiculi funicula!~"
|
||||
color = "#FF9F23"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/pizza
|
||||
value_per_unit = 0.05
|
||||
beauty_modifier = 0.1
|
||||
strength_modifier = 0.7
|
||||
armor_modifiers = list("melee" = 0.3, "bullet" = 0.3, "laser" = 1.2, "energy" = 1.2, "bomb" = 0.3, "bio" = 0, "rad" = 0.7, "fire" = 1, "acid" = 1)
|
||||
item_sound_override = 'sound/effects/meatslap.ogg'
|
||||
turf_sound_override = FOOTSTEP_MEAT
|
||||
texture_layer_icon_state = "pizza"
|
||||
|
||||
/datum/material/pizza/on_removed(atom/source, material_flags)
|
||||
. = ..()
|
||||
qdel(source.GetComponent(/datum/component/edible))
|
||||
|
||||
/datum/material/pizza/on_applied_obj(obj/O, amount, material_flags)
|
||||
. = ..()
|
||||
make_edible(O, amount, material_flags)
|
||||
|
||||
/datum/material/pizza/on_applied_turf(turf/T, amount, material_flags)
|
||||
. = ..()
|
||||
make_edible(T, amount, material_flags)
|
||||
|
||||
/datum/material/pizza/proc/make_edible(atom/source, amount, material_flags)
|
||||
var/nutriment_count = 3 * (amount / MINERAL_MATERIAL_AMOUNT)
|
||||
var/oil_count = 2 * (amount / MINERAL_MATERIAL_AMOUNT)
|
||||
source.AddComponent(/datum/component/edible, list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/cooking_oil = oil_count), null, GRAIN | MEAT | DAIRY | VEGETABLES, null, 30, list("crust", "tomato", "cheese", "meat"))
|
||||
+1
-1
@@ -67,7 +67,7 @@
|
||||
var/datum/skill_holder/skill_holder
|
||||
|
||||
/datum/mind/New(var/key)
|
||||
skill_holder = new()
|
||||
skill_holder = new(src)
|
||||
src.key = key
|
||||
soulOwner = src
|
||||
martial_art = default_martial_art
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
school = "evocation"
|
||||
charge_max = 600
|
||||
clothes_req = NONE
|
||||
antimagic_allowed = TRUE
|
||||
range = 20
|
||||
base_icon_state = "fireball"
|
||||
action_icon_state = "fireball0"
|
||||
@@ -122,6 +123,7 @@
|
||||
desc = "A rare genome that attracts odd forces not usually observed. May sometimes pull you in randomly."
|
||||
school = "evocation"
|
||||
clothes_req = NONE
|
||||
antimagic_allowed = TRUE
|
||||
charge_max = 600
|
||||
invocation = "DOOOOOOOOOOOOOOOOOOOOM!!!"
|
||||
invocation_type = "shout"
|
||||
@@ -155,6 +157,7 @@
|
||||
dropmessage = "You let the electricity from your hand dissipate."
|
||||
hand_path = /obj/item/melee/touch_attack/shock
|
||||
charge_max = 400
|
||||
antimagic_allowed = TRUE
|
||||
clothes_req = NONE
|
||||
action_icon_state = "zap"
|
||||
|
||||
@@ -212,6 +215,7 @@
|
||||
desc = "Get a scent off of the item you're currently holding to track it. With an empty hand, you'll track the scent you've remembered."
|
||||
charge_max = 100
|
||||
clothes_req = NONE
|
||||
antimagic_allowed = TRUE
|
||||
range = -1
|
||||
include_user = TRUE
|
||||
action_icon_state = "nose"
|
||||
@@ -290,6 +294,7 @@
|
||||
name = "Drop a limb"
|
||||
desc = "Concentrate to make a random limb pop right off your body."
|
||||
clothes_req = NONE
|
||||
antimagic_allowed = TRUE
|
||||
charge_max = 100
|
||||
action_icon_state = "autotomy"
|
||||
|
||||
@@ -327,6 +332,7 @@
|
||||
name = "Lay Web"
|
||||
desc = "Drops a web. Only you will be able to traverse your web easily, making it pretty good for keeping you safe."
|
||||
clothes_req = NONE
|
||||
antimagic_allowed = TRUE
|
||||
charge_max = 4 SECONDS //the same time to lay a web
|
||||
action_icon = 'icons/mob/actions/actions_genetic.dmi'
|
||||
action_icon_state = "lay_web"
|
||||
@@ -368,6 +374,7 @@
|
||||
name = "Launch spike"
|
||||
desc = "Shoot your tongue out in the direction you're facing, embedding it and dealing damage until they remove it."
|
||||
clothes_req = NONE
|
||||
antimagic_allowed = TRUE
|
||||
charge_max = 100
|
||||
action_icon = 'icons/mob/actions/actions_genetic.dmi'
|
||||
action_icon_state = "spike"
|
||||
|
||||
@@ -462,6 +462,10 @@
|
||||
suffix = "whiteship_pod"
|
||||
name = "Salvage Pod"
|
||||
|
||||
/datum/map_template/shuttle/whiteship/cog
|
||||
suffix = "cog"
|
||||
name = "NT Prisoner Transport"
|
||||
|
||||
/datum/map_template/shuttle/cargo/box
|
||||
suffix = "box"
|
||||
name = "supply shuttle (Box)"
|
||||
@@ -628,4 +632,4 @@
|
||||
|
||||
/datum/map_template/shuttle/hunter/bounty
|
||||
suffix = "bounty"
|
||||
name = "Bounty Hunter Ship"
|
||||
name = "Bounty Hunter Ship"
|
||||
|
||||
@@ -11,6 +11,66 @@
|
||||
if(!mind.skill_holder)
|
||||
to_chat(usr, "<span class='warning'>How do you check the skills of [(usr == src)? "yourself when you are" : "something"] without the capability for skills? (PROBABLY A BUG, PRESS F1.)</span>")
|
||||
return
|
||||
var/datum/browser/B = new(usr, "skilldisplay_[REF(src)]", "Skills of [src]")
|
||||
B.set_content(mind.skill_html_readout())
|
||||
B.open()
|
||||
|
||||
mind.skill_holder.ui_interact(src)
|
||||
|
||||
/datum/skill_holder/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "skillpanel", "[owner.name]'s Skills", 620, 580, master_ui, state)
|
||||
ui.set_autoupdate(FALSE) // This UI is only ever opened by one person, and never is updated outside of user input.
|
||||
ui.open()
|
||||
else if(need_static_data_update)
|
||||
update_static_data(user)
|
||||
need_static_data_update = FALSE
|
||||
|
||||
/datum/skill_holder/ui_static_data(mob/user)
|
||||
. = list()
|
||||
.["skills"] = list()
|
||||
for(var/path in GLOB.skill_datums)
|
||||
var/datum/skill/S = GLOB.skill_datums[path]
|
||||
var/list/dat = S.get_skill_data(src)
|
||||
if(islist(dat["modifiers"]))
|
||||
dat["modifiers"] = jointext(dat["modifiers"], ", ")
|
||||
dat["percent_base"] = (dat["value_base"] / dat["max_value"])
|
||||
dat["percent_mod"] = (dat["value_mod"] / dat["max_value"])
|
||||
.["skills"] += list(dat)
|
||||
|
||||
/datum/skill_holder/ui_data(mob/user)
|
||||
. = list()
|
||||
.["playername"] = owner.name
|
||||
.["see_skill_mods"] = see_skill_mods
|
||||
.["admin"] = check_rights(R_DEBUG)
|
||||
|
||||
/datum/skill_holder/ui_act(action, params)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
switch(action)
|
||||
if("toggle_mods")
|
||||
see_skill_mods = !see_skill_mods
|
||||
return TRUE
|
||||
if ("adj_exp")
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
var/skill = text2path(params["skill"])
|
||||
var/number = input("Please insert the amount of experience/progress you'd like to add/subtract:") as num|null
|
||||
if (number)
|
||||
owner.set_skill_value(skill, owner.get_skill_value(skill, FALSE) + number)
|
||||
return TRUE
|
||||
if ("set_exp")
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
var/skill = text2path(params["skill"])
|
||||
var/number = input("Please insert the number you want to set the player's exp/progress to:") as num|null
|
||||
if (!isnull(number))
|
||||
owner.set_skill_value(skill, number)
|
||||
return TRUE
|
||||
if ("set_lvl")
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
var/datum/skill/level/S = GLOB.skill_datums[text2path(params["skill"])]
|
||||
var/number = input("Please insert a whole number between 0[S.associative ? " ([S.unskilled_tier])" : ""] and [S.max_levels][S.associative ? " ([S.levels[S.max_levels]])" : ""] corresponding to the level you'd like to set the player to.") as num|null
|
||||
if (number >= 0 && number <= S.max_levels)
|
||||
owner.set_skill_value(S.type, S.get_skill_level_value(number))
|
||||
return TRUE
|
||||
|
||||
@@ -8,6 +8,7 @@ GLOBAL_LIST_INIT_TYPED(skill_datums, /datum/skill, init_skill_datums())
|
||||
continue
|
||||
S = new path
|
||||
.[S.type] = S
|
||||
. = sortTim(., /proc/cmp_skill_categories, TRUE)
|
||||
|
||||
/**
|
||||
* Skill datums
|
||||
@@ -34,6 +35,8 @@ GLOBAL_LIST_INIT_TYPED(skill_datums, /datum/skill, init_skill_datums())
|
||||
var/competency_multiplier = 1
|
||||
/// A list of ways this skill can affect or be affected through actions and skill modifiers.
|
||||
var/list/skill_traits = list(SKILL_SANITY, SKILL_INTELLIGENCE)
|
||||
/// Index of this skill in the UI
|
||||
var/ui_category = SKILL_UI_CAT_MISC
|
||||
|
||||
/**
|
||||
* Ensures what someone's setting as a value for this skill is valid.
|
||||
@@ -57,10 +60,28 @@ GLOBAL_LIST_INIT_TYPED(skill_datums, /datum/skill, init_skill_datums())
|
||||
return new_value > existing
|
||||
|
||||
/**
|
||||
* Standard value "render"
|
||||
* Get a list of data used in the skill panel menu.
|
||||
*/
|
||||
/datum/skill/proc/standard_render_value(value, level)
|
||||
return value
|
||||
/datum/skill/proc/get_skill_data(datum/skill_holder/H)
|
||||
var/skill_value = H.owner.get_skill_value(type, FALSE)
|
||||
. = list(
|
||||
"name" = name,
|
||||
"desc" = desc,
|
||||
"path" = type,
|
||||
"value_base" = skill_value,
|
||||
"value_mod" = skill_value,
|
||||
"modifiers" = "None",
|
||||
"max_value" = 1 //To avoid division by zero later on.
|
||||
)
|
||||
var/list/mods = LAZYACCESS(H.skill_value_mods, type)
|
||||
if(mods)
|
||||
var/list/mod_names = list()
|
||||
for(var/k in mods)
|
||||
var/datum/skill_modifier/M = GLOB.skill_modifiers[k]
|
||||
mod_names |= M.name
|
||||
skill_value = M.apply_modifier(skill_value, type, H, MODIFIER_TARGET_VALUE)
|
||||
.["value_mod"] = skill_value
|
||||
.["modifiers"] = mod_names //Will be jointext()'d later.
|
||||
|
||||
// Just saying, the choice to use different sub-parent-types is to force coders to resolve issues as I won't be implementing custom procs to grab skill levels in a certain context.
|
||||
// Aka: So people don't forget to change checks if they change a skill's progression type.
|
||||
@@ -71,10 +92,12 @@ GLOBAL_LIST_INIT_TYPED(skill_datums, /datum/skill, init_skill_datums())
|
||||
competency_thresholds = list(THRESHOLD_COMPETENT = FALSE, THRESHOLD_EXPERT = TRUE, THRESHOLD_MASTER = TRUE)
|
||||
|
||||
/datum/skill/binary/sanitize_value(new_value)
|
||||
return new_value? TRUE : FALSE
|
||||
return new_value >= 1 ? TRUE : FALSE
|
||||
|
||||
/datum/skill/binary/standard_render_value(value, level)
|
||||
return value? "Yes" : "No"
|
||||
/datum/skill/binary/get_skill_data(datum/skill_holder/H)
|
||||
. = ..()
|
||||
.["base_readout"] = .["value_base"] ? "Learned: Yes" : "Learned: No"
|
||||
.["mod_readout"] = .["value_mod"] ? "Learned: Yes" : "Learned: No"
|
||||
|
||||
/datum/skill/numerical
|
||||
abstract_type = /datum/skill/numerical
|
||||
@@ -84,14 +107,15 @@ GLOBAL_LIST_INIT_TYPED(skill_datums, /datum/skill, init_skill_datums())
|
||||
var/max_value = 100
|
||||
/// Min value of this skill
|
||||
var/min_value = 0
|
||||
/// Display as a percent in standard_render_value?
|
||||
var/display_as_percent = FALSE
|
||||
|
||||
/datum/skill/numerical/sanitize_value(new_value)
|
||||
return clamp(new_value, min_value, max_value)
|
||||
|
||||
/datum/skill/numerical/standard_render_value(value, level)
|
||||
return display_as_percent? "[round(value/max_value/100, 0.01)]%" : "[value] / [max_value]"
|
||||
/datum/skill/numerical/get_skill_data(datum/skill_holder/H)
|
||||
. = ..()
|
||||
.["base_readout"] = "Skill Progress: \[[.["value_base"]] / [max_value]\]"
|
||||
.["mod_readout"] = "Skill Progress: \[[.["value_mod"]] / [max_value]\]"
|
||||
.["max_value"] = max_value
|
||||
|
||||
/datum/skill/enum
|
||||
abstract_type = /datum/skill/enum
|
||||
@@ -123,13 +147,7 @@ GLOBAL_LIST_INIT_TYPED(skill_datums, /datum/skill, init_skill_datums())
|
||||
var/max_assoc = ""
|
||||
var/max_assoc_start = 1
|
||||
for(var/lvl in 1 to max_levels)
|
||||
var/value
|
||||
switch(level_up_method)
|
||||
if(STANDARD_LEVEL_UP)
|
||||
value = XP_LEVEL(standard_xp_lvl_up, xp_lvl_multiplier, lvl)
|
||||
if(DWARFY_LEVEL_UP)
|
||||
value = DORF_XP_LEVEL(standard_xp_lvl_up, xp_lvl_multiplier, lvl)
|
||||
value = round(value, 1)
|
||||
var/value = round(get_skill_level_value(lvl), 1)
|
||||
if(!associative)
|
||||
levels += value
|
||||
continue
|
||||
@@ -167,8 +185,13 @@ GLOBAL_LIST_INIT_TYPED(skill_datums, /datum/skill, init_skill_datums())
|
||||
else if(. < 0)
|
||||
to_chat(M.current, "<span class='warning'>I feel like I've become worse at [name]!</span>")
|
||||
|
||||
/datum/skill/level/standard_render_value(value, level)
|
||||
var/current_lvl = associative ? (!level ? unskilled_tier : levels[level]) : level
|
||||
/datum/skill/level/get_skill_data(datum/skill_holder/H)
|
||||
. = ..()
|
||||
var/skill_value_base = .["value_base"]
|
||||
var/skill_value_mod = .["value_mod"]
|
||||
.["level_based"] = TRUE
|
||||
|
||||
var/level = LAZYACCESS(H.skill_levels, type) || 0
|
||||
var/current_lvl_xp_sum = 0
|
||||
if(level)
|
||||
current_lvl_xp_sum = associative ? levels[levels[level]] : levels[level]
|
||||
@@ -176,8 +199,50 @@ GLOBAL_LIST_INIT_TYPED(skill_datums, /datum/skill, init_skill_datums())
|
||||
var/next_lvl_xp = associative ? levels[levels[next_index]] : levels[next_index]
|
||||
if(next_lvl_xp > current_lvl_xp_sum)
|
||||
next_lvl_xp -= current_lvl_xp_sum
|
||||
.["lvl_base_num"] = .["lvl_mod_num"] = level
|
||||
.["lvl_base"] = .["lvl_mod"] = associative ? (!level ? unskilled_tier : levels[level]) : level
|
||||
.["base_style"] = .["mod_style"] = "font-weight:bold; color:hsl([(level+1)*(350/max_levels+1)], 50%, 50%)"
|
||||
.["xp_next_lvl_base"] = .["xp_next_lvl_mod"] = "\[[skill_value_base - current_lvl_xp_sum]/[next_lvl_xp]\]"
|
||||
|
||||
return "[associative ? current_lvl : "Lvl. [current_lvl]"] ([value - current_lvl_xp_sum]/[next_lvl_xp])[level == max_levels ? " \[MAX!\]" : ""]"
|
||||
.["max_lvl"] = max_levels
|
||||
var/max_value = associative ? levels[levels[max_levels]] : levels[max_levels]
|
||||
.["max_value"] = max_value
|
||||
|
||||
.["base_readout"] = "Overall Skill Progress: \[[skill_value_base]/[max_value]\]"
|
||||
.["mod_readout"] = "Overall Skill Progress: \[[skill_value_mod]/[max_value]\]"
|
||||
|
||||
var/list/mods = LAZYACCESS(H.skill_level_mods, type)
|
||||
if(mods) //I'm not proud of doing the same-ish process twice a row but here we go.
|
||||
var/list/mod_names = .["modifiers"]
|
||||
if(!mod_names)
|
||||
.["modifiers"] = mod_names = list()
|
||||
for(var/k in mods)
|
||||
var/datum/skill_modifier/M = GLOB.skill_modifiers[k]
|
||||
mod_names |= M.name
|
||||
level = M.apply_modifier(level, type, H, MODIFIER_TARGET_LEVEL)
|
||||
|
||||
if(level)
|
||||
current_lvl_xp_sum = associative ? levels[levels[level]] : levels[level]
|
||||
else
|
||||
current_lvl_xp_sum = 0
|
||||
next_index = min(max_levels, level+1)
|
||||
next_lvl_xp = associative ? levels[levels[next_index]] : levels[next_index]
|
||||
if(next_lvl_xp > current_lvl_xp_sum)
|
||||
next_lvl_xp -= current_lvl_xp_sum
|
||||
.["lvl_mod_num"] = level
|
||||
.["lvl_mod"] = associative ? (!level ? unskilled_tier : levels[level]) : level
|
||||
.["mod_style"] = "font-weight:bold; color:hsl([(level+1)*(300/(max_levels+1))], 50%, 50%)"
|
||||
.["xp_next_lvl_mod"] = "\[[skill_value_mod - current_lvl_xp_sum]/[next_lvl_xp]\]"
|
||||
|
||||
/**
|
||||
* Gets the base value required to reach a level specified by the 'num' arg.
|
||||
*/
|
||||
/datum/skill/level/proc/get_skill_level_value(num)
|
||||
switch(level_up_method)
|
||||
if(STANDARD_LEVEL_UP)
|
||||
. = XP_LEVEL(standard_xp_lvl_up, xp_lvl_multiplier, num)
|
||||
if(DWARFY_LEVEL_UP)
|
||||
. = DORF_XP_LEVEL(standard_xp_lvl_up, xp_lvl_multiplier, num)
|
||||
|
||||
/datum/skill/level/job
|
||||
abstract_type = /datum/skill/level/job
|
||||
|
||||
@@ -20,6 +20,18 @@
|
||||
var/list/original_values
|
||||
var/list/original_affinities
|
||||
var/list/original_levels
|
||||
/// The mind datum this skill is associated with, only used for the check_skills UI
|
||||
var/datum/mind/owner
|
||||
/// For UI updates.
|
||||
var/need_static_data_update = TRUE
|
||||
/// Whether modifiers and final skill values or only base values are displayed.
|
||||
var/see_skill_mods = TRUE
|
||||
/// The current selected skill category.
|
||||
var/selected_category
|
||||
|
||||
/datum/skill_holder/New(owner)
|
||||
..()
|
||||
src.owner = owner
|
||||
|
||||
/**
|
||||
* Grabs the value of a skill.
|
||||
@@ -79,6 +91,7 @@
|
||||
CRASH("Invalid set_skill_value call. Use skill typepaths.") //until a time when we somehow need text ids for dynamic skills, I'm enforcing this.
|
||||
var/datum/skill/S = GLOB.skill_datums[skill]
|
||||
value = S.sanitize_value(value)
|
||||
skill_holder.need_static_data_update = TRUE
|
||||
if(!isnull(value))
|
||||
LAZYINITLIST(skill_holder.skills)
|
||||
S.set_skill_value(skill_holder, value, src, silent)
|
||||
@@ -183,18 +196,3 @@
|
||||
divisor++
|
||||
if(divisor)
|
||||
. = modifier_is_multiplier ? value*(sum/divisor) : value/(sum/divisor)
|
||||
|
||||
/**
|
||||
* Generates a HTML readout of our skills.
|
||||
* Port to tgui-next when?
|
||||
*/
|
||||
/datum/mind/proc/skill_html_readout()
|
||||
var/list/out = list("<center><h1>Skills</h1></center><hr>")
|
||||
out += "<table style=\"width:100%\"><tr><th><b>Skill</b><th><b>Value</b></tr>"
|
||||
for(var/path in GLOB.skill_datums)
|
||||
var/datum/skill/S = GLOB.skill_datums[path]
|
||||
var/skill_value = get_skill_value(path)
|
||||
var/skill_level = get_skill_level(path, round = TRUE)
|
||||
out += "<tr><td><font color='[S.name_color]'>[S.name]</font></td><td>[S.standard_render_value(skill_value, skill_level)]</td></tr>"
|
||||
out += "</table>"
|
||||
return out.Join("")
|
||||
|
||||
@@ -7,6 +7,8 @@ GLOBAL_LIST_EMPTY(potential_mods_per_skill)
|
||||
* and cause lots of edge cases. These are fairly simple overall... make a subtype though, don't use this one.
|
||||
*/
|
||||
/datum/skill_modifier
|
||||
/// Name and description of the skill modifier, used in the UI
|
||||
var/name = "???"
|
||||
/// flags for this skill modifier.
|
||||
var/modifier_flags = NONE
|
||||
/// target skills, can be a specific skill typepath or a list of skill traits.
|
||||
@@ -110,6 +112,7 @@ GLOBAL_LIST_EMPTY(potential_mods_per_skill)
|
||||
if(M.modifier_flags & MODIFIER_SKILL_LEVEL)
|
||||
ADD_MOD_STEP(skill_holder.skill_level_mods, path, skill_holder.original_levels, get_skill_level(path, FALSE))
|
||||
LAZYSET(skill_holder.all_current_skill_modifiers, id, TRUE)
|
||||
skill_holder.need_static_data_update = TRUE
|
||||
|
||||
if(M.modifier_flags & MODIFIER_SKILL_BODYBOUND)
|
||||
M.RegisterSignal(src, COMSIG_MIND_TRANSFER, /datum/skill_modifier.proc/on_mind_transfer)
|
||||
@@ -141,6 +144,7 @@ GLOBAL_LIST_EMPTY(potential_mods_per_skill)
|
||||
if(M.modifier_flags & MODIFIER_SKILL_LEVEL && skill_holder.skill_level_mods)
|
||||
REMOVE_MOD_STEP(skill_holder.skill_level_mods, path, skill_holder.original_levels)
|
||||
LAZYREMOVE(skill_holder.all_current_skill_modifiers, id)
|
||||
skill_holder.need_static_data_update = TRUE
|
||||
|
||||
if(!mind_transfer && M.modifier_flags & MODIFIER_SKILL_BODYBOUND)
|
||||
M.UnregisterSignal(src, COMSIG_MIND_TRANSFER)
|
||||
@@ -165,11 +169,7 @@ GLOBAL_LIST_EMPTY(potential_mods_per_skill)
|
||||
var/datum/skill/S = GLOB.skill_datums[skillpath]
|
||||
if(method == MODIFIER_TARGET_VALUE && S.progression_type == SKILL_PROGRESSION_LEVEL)
|
||||
var/datum/skill/level/L = S
|
||||
switch(L.level_up_method)
|
||||
if(STANDARD_LEVEL_UP)
|
||||
mod = XP_LEVEL(L.standard_xp_lvl_up, L.xp_lvl_multiplier, S.competency_thresholds[mod])
|
||||
if(DWARFY_LEVEL_UP)
|
||||
mod = DORF_XP_LEVEL(L.standard_xp_lvl_up, L.xp_lvl_multiplier, S.competency_thresholds[mod])
|
||||
mod = L.get_skill_level_value(L.competency_thresholds[mod])
|
||||
else
|
||||
mod = S.competency_thresholds[mod]
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/datum/skill/level/job/wiring
|
||||
name = "Wiring"
|
||||
desc = "How proficient and knowledged you are at wiring beyond laying cables on the floor."
|
||||
desc = "How proficient and knowledged you are at wiring beyond making post-futuristic wire art."
|
||||
name_color = COLOR_PALE_ORANGE
|
||||
skill_traits = list(SKILL_SANITY, SKILL_INTELLIGENCE, SKILL_USE_TOOL, SKILL_TRAINING_TOOL)
|
||||
ui_category = SKILL_UI_CAT_ENG
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/datum/skill/numerical/surgery
|
||||
name = "Surgery"
|
||||
desc = "How proficient you are at doing surgery."
|
||||
desc = "How proficient you are at performing surgical procedures."
|
||||
name_color = COLOR_PALE_BLUE_GRAY
|
||||
competency_multiplier = 1.5 // 60% surgery speed up at max value of 100, considering the base multiplier.
|
||||
ui_category = SKILL_UI_CAT_MED
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/// Jobbie skill modifiers.
|
||||
|
||||
/datum/skill_modifier/job
|
||||
name = "Job Training"
|
||||
modifier_flags = MODIFIER_SKILL_VALUE|MODIFIER_SKILL_VIRTUE|MODIFIER_SKILL_ORIGIN_DIFF
|
||||
priority = MODIFIER_SKILL_PRIORITY_MAX
|
||||
|
||||
@@ -23,7 +24,7 @@
|
||||
modifier_flags = MODIFIER_SKILL_VALUE|MODIFIER_SKILL_LEVEL|MODIFIER_SKILL_VIRTUE|MODIFIER_SKILL_ORIGIN_DIFF
|
||||
level_mod = JOB_SKILL_TRAINED
|
||||
|
||||
/datum/skill_modifier/job/level/New(id)
|
||||
/datum/skill_modifier/job/level/New(id, register = FALSE)
|
||||
if(level_mod)
|
||||
value_mod = GET_STANDARD_LVL(level_mod)
|
||||
..()
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
/datum/skill_modifier/bad_mood
|
||||
name = "Mood (Dejected)"
|
||||
modifier_flags = MODIFIER_SKILL_VALUE|MODIFIER_SKILL_LEVEL|MODIFIER_SKILL_MULT|MODIFIER_SKILL_BODYBOUND
|
||||
target_skills = list(SKILL_SANITY)
|
||||
|
||||
/datum/skill_modifier/great_mood
|
||||
name = "Mood (Elated)"
|
||||
modifier_flags = MODIFIER_SKILL_AFFINITY|MODIFIER_SKILL_MULT|MODIFIER_SKILL_BODYBOUND
|
||||
target_skills = list(SKILL_SANITY)
|
||||
affinity_mod = 1.2
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/datum/skill_modifier/brain_damage
|
||||
name = "Brain Damage"
|
||||
target_skills = list(SKILL_INTELLIGENCE)
|
||||
modifier_flags = MODIFIER_SKILL_VALUE|MODIFIER_SKILL_AFFINITY|MODIFIER_SKILL_LEVEL|MODIFIER_SKILL_MULT|MODIFIER_SKILL_BODYBOUND
|
||||
value_mod = 0.85
|
||||
@@ -6,6 +7,7 @@
|
||||
affinity_mod = 0.85
|
||||
|
||||
/datum/skill_modifier/heavy_brain_damage
|
||||
name = "Brain Damage (Severe)"
|
||||
target_skills = list(SKILL_INTELLIGENCE)
|
||||
modifier_flags = MODIFIER_SKILL_VALUE|MODIFIER_SKILL_AFFINITY|MODIFIER_SKILL_LEVEL|MODIFIER_SKILL_BODYBOUND|MODIFIER_SKILL_HANDICAP|MODIFIER_USE_THRESHOLDS
|
||||
priority = MODIFIER_SKILL_PRIORITY_LOW
|
||||
|
||||
@@ -81,11 +81,11 @@
|
||||
owner.adjustStaminaLoss(-0.5) //reduce stamina loss by 0.5 per tick, 10 per 2 seconds
|
||||
if(human_owner && human_owner.drunkenness)
|
||||
human_owner.drunkenness *= 0.997 //reduce drunkenness by 0.3% per tick, 6% per 2 seconds
|
||||
if(prob(20))
|
||||
if(carbon_owner)
|
||||
carbon_owner.handle_dreams()
|
||||
if(prob(10) && owner.health > owner.crit_threshold)
|
||||
owner.emote("snore")
|
||||
if(carbon_owner && !carbon_owner.dreaming && prob(2))
|
||||
carbon_owner.dream()
|
||||
// 2% per second, tick interval is in deciseconds
|
||||
if(prob((tick_interval+1) * 0.2) && owner.health > owner.crit_threshold)
|
||||
owner.emote("snore")
|
||||
|
||||
/datum/status_effect/staggered
|
||||
id = "staggered"
|
||||
@@ -711,8 +711,9 @@ datum/status_effect/pacify
|
||||
if(hearing_args[HEARING_SPEAKER] == owner)
|
||||
return
|
||||
var/mob/living/carbon/C = owner
|
||||
var/hypnomsg = uncostumize_say(hearing_args[HEARING_RAW_MESSAGE], hearing_args[HEARING_MESSAGE_MODE])
|
||||
C.cure_trauma_type(/datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY) //clear previous hypnosis
|
||||
addtimer(CALLBACK(C, /mob/living/carbon.proc/gain_trauma, /datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY, hearing_args[HEARING_RAW_MESSAGE]), 10)
|
||||
addtimer(CALLBACK(C, /mob/living/carbon.proc/gain_trauma, /datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY, hypnomsg), 10)
|
||||
addtimer(CALLBACK(C, /mob/living.proc/Stun, 60, TRUE, TRUE), 15) //Take some time to think about it
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
var/id = "effect" //Used for screen alerts.
|
||||
var/duration = -1 //How long the status effect lasts in DECISECONDS. Enter -1 for an effect that never ends unless removed through some means.
|
||||
var/tick_interval = 10 //How many deciseconds between ticks, approximately. Leave at 10 for every second.
|
||||
var/next_tick //The scheduled time for the next tick.
|
||||
var/mob/living/owner //The mob affected by the status effect.
|
||||
var/on_remove_on_mob_delete = FALSE //if we call on_remove() when the mob is deleted
|
||||
var/examine_text //If defined, this text will appear when the mob is examined - to use he, she etc. use "SUBJECTPRONOUN" and replace it in the examines themselves
|
||||
@@ -31,7 +32,7 @@
|
||||
return
|
||||
if(duration != -1)
|
||||
duration = world.time + duration
|
||||
tick_interval = world.time + tick_interval
|
||||
next_tick = world.time + tick_interval
|
||||
if(alert_type)
|
||||
var/obj/screen/alert/status_effect/A = owner.throw_alert(id, alert_type)
|
||||
A.attached_effect = src //so the alert can reference us, if it needs to
|
||||
@@ -52,9 +53,9 @@
|
||||
if(!owner)
|
||||
qdel(src)
|
||||
return
|
||||
if(tick_interval < world.time)
|
||||
if(next_tick < world.time)
|
||||
tick()
|
||||
tick_interval = world.time + initial(tick_interval)
|
||||
next_tick = world.time + tick_interval
|
||||
if(duration != -1 && duration < world.time)
|
||||
qdel(src)
|
||||
|
||||
@@ -221,7 +222,7 @@
|
||||
threshold_crossed = FALSE //resets threshold effect if we fall below threshold so threshold effect can trigger again
|
||||
on_threshold_drop()
|
||||
if(stacks_added > 0)
|
||||
tick_interval += delay_before_decay //refreshes time until decay
|
||||
next_tick += delay_before_decay //refreshes time until decay
|
||||
stacks = min(stacks, max_stacks)
|
||||
status_overlay.icon_state = "[overlay_state][stacks]"
|
||||
status_underlay.icon_state = "[underlay_state][stacks]"
|
||||
|
||||
+24
-25
@@ -48,6 +48,7 @@
|
||||
var/rad_insulation = RAD_NO_INSULATION
|
||||
|
||||
///The custom materials this atom is made of, used by a lot of things like furniture, walls, and floors (if I finish the functionality, that is.)
|
||||
///The list referenced by this var can be shared by multiple objects and should not be directly modified. Instead, use [set_custom_materials][/atom/proc/set_custom_materials].
|
||||
var/list/custom_materials
|
||||
///Bitfield for how the atom handles materials.
|
||||
var/material_flags = NONE
|
||||
@@ -114,11 +115,8 @@
|
||||
if (canSmoothWith)
|
||||
canSmoothWith = typelist("canSmoothWith", canSmoothWith)
|
||||
|
||||
var/temp_list = list()
|
||||
for(var/i in custom_materials)
|
||||
temp_list[SSmaterials.GetMaterialRef(i)] = custom_materials[i] //Get the proper instanced version
|
||||
custom_materials = null //Null the list to prepare for applying the materials properly
|
||||
set_custom_materials(temp_list)
|
||||
// apply materials properly from the default custom_materials value
|
||||
set_custom_materials(custom_materials)
|
||||
|
||||
ComponentInitialize()
|
||||
|
||||
@@ -438,7 +436,7 @@
|
||||
var/blood_id = get_blood_id()
|
||||
if(!(blood_id in GLOB.blood_reagent_types))
|
||||
return
|
||||
return list("ANIMAL DNA" = "Y-")
|
||||
return list("color" = list(BLOOD_COLOR_HUMAN), "ANIMAL DNA" = "Y-")
|
||||
|
||||
/mob/living/carbon/get_blood_dna_list()
|
||||
var/blood_id = get_blood_id()
|
||||
@@ -446,13 +444,15 @@
|
||||
return
|
||||
var/list/blood_dna = list()
|
||||
if(dna)
|
||||
blood_dna["color"] = list(dna.species.exotic_blood_color) //so when combined, the list grows with the number of colors
|
||||
blood_dna[dna.unique_enzymes] = dna.blood_type
|
||||
else
|
||||
blood_dna["color"] = list(BLOOD_COLOR_HUMAN)
|
||||
blood_dna["UNKNOWN DNA"] = "X*"
|
||||
return blood_dna
|
||||
|
||||
/mob/living/carbon/alien/get_blood_dna_list()
|
||||
return list("UNKNOWN DNA" = "X*")
|
||||
return list("color" = list(BLOOD_COLOR_XENO), "UNKNOWN DNA" = "X*")
|
||||
|
||||
//to add a mob's dna info into an object's blood_DNA list.
|
||||
/atom/proc/transfer_mob_blood_dna(mob/living/L)
|
||||
@@ -461,8 +461,10 @@
|
||||
if(!new_blood_dna)
|
||||
return FALSE
|
||||
LAZYINITLIST(blood_DNA) //if our list of DNA doesn't exist yet, initialise it.
|
||||
LAZYINITLIST(blood_DNA["color"])
|
||||
var/old_length = blood_DNA.len
|
||||
blood_DNA |= new_blood_dna
|
||||
blood_DNA["color"] += new_blood_dna["color"]
|
||||
if(blood_DNA.len == old_length)
|
||||
return FALSE
|
||||
return TRUE
|
||||
@@ -470,9 +472,12 @@
|
||||
//to add blood dna info to the object's blood_DNA list
|
||||
/atom/proc/transfer_blood_dna(list/blood_dna, list/datum/disease/diseases)
|
||||
LAZYINITLIST(blood_DNA)
|
||||
LAZYINITLIST(blood_dna["color"])
|
||||
|
||||
var/old_length = blood_DNA.len
|
||||
blood_DNA |= blood_dna
|
||||
if(blood_DNA.len > old_length)
|
||||
blood_DNA["color"] += blood_dna["color"]
|
||||
return TRUE
|
||||
//some new blood DNA was added
|
||||
|
||||
@@ -544,23 +549,22 @@
|
||||
|
||||
/atom/proc/blood_DNA_to_color()
|
||||
var/list/colors = list()//first we make a list of all bloodtypes present
|
||||
for(var/bloop in blood_DNA)
|
||||
if(colors[blood_DNA[bloop]])
|
||||
colors[blood_DNA[bloop]]++
|
||||
for(var/blood_color in blood_DNA["color"])
|
||||
if(colors[blood_color])
|
||||
colors[blood_color]++
|
||||
else
|
||||
colors[blood_DNA[bloop]] = 1
|
||||
colors[blood_color] = 1
|
||||
|
||||
var/final_rgb = BLOOD_COLOR_HUMAN //a default so we don't have white blood graphics if something messed up
|
||||
|
||||
if(colors.len)
|
||||
var/sum = 0 //this is all shitcode, but it works; trust me
|
||||
final_rgb = bloodtype_to_color(colors[1])
|
||||
final_rgb = colors[1]
|
||||
sum = colors[colors[1]]
|
||||
if(colors.len > 1)
|
||||
var/i = 2
|
||||
while(i <= colors.len)
|
||||
var/tmp = colors[colors[i]]
|
||||
final_rgb = BlendRGB(final_rgb, bloodtype_to_color(colors[i]), tmp/(tmp+sum))
|
||||
final_rgb = BlendRGB(final_rgb, colors[i], tmp/(tmp+sum))
|
||||
sum += tmp
|
||||
i++
|
||||
|
||||
@@ -1006,26 +1010,21 @@ Proc for attack log creation, because really why not
|
||||
|
||||
///Sets the custom materials for an item.
|
||||
/atom/proc/set_custom_materials(var/list/materials, multiplier = 1)
|
||||
|
||||
if(!materials)
|
||||
materials = custom_materials
|
||||
|
||||
if(custom_materials) //Only runs if custom materials existed at first. Should usually be the case but check anyways
|
||||
for(var/i in custom_materials)
|
||||
var/datum/material/custom_material = SSmaterials.GetMaterialRef(i)
|
||||
custom_material.on_removed(src, material_flags) //Remove the current materials
|
||||
|
||||
if(!length(materials))
|
||||
custom_materials = null
|
||||
return
|
||||
|
||||
custom_materials = list() //Reset the list
|
||||
if(material_flags)
|
||||
for(var/x in materials)
|
||||
var/datum/material/custom_material = SSmaterials.GetMaterialRef(x)
|
||||
custom_material.on_applied(src, materials[x] * multiplier * material_modifier, material_flags)
|
||||
|
||||
for(var/x in materials)
|
||||
var/datum/material/custom_material = SSmaterials.GetMaterialRef(x)
|
||||
|
||||
if(material_flags & MATERIAL_EFFECTS)
|
||||
custom_material.on_applied(src, materials[custom_material] * multiplier * material_modifier, material_flags)
|
||||
custom_materials[custom_material] += materials[x] * multiplier
|
||||
custom_materials = SSmaterials.FindOrCreateMaterialCombo(materials, multiplier)
|
||||
|
||||
/**
|
||||
* Returns true if this atom has gravity for the passed in turf
|
||||
|
||||
@@ -51,4 +51,4 @@
|
||||
|
||||
H.dna.add_mutation(CLOWNMUT)
|
||||
H.dna.add_mutation(SMILE)
|
||||
H.gain_trauma(/datum/brain_trauma/mild/phobia, TRAUMA_RESILIENCE_LOBOTOMY, "clowns") //MWA HA HA
|
||||
H.gain_trauma(/datum/brain_trauma/mild/phobia/clowns, TRAUMA_RESILIENCE_LOBOTOMY) //MWA HA HA
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
targetitem = /obj/item/gun/energy/e_gun/hos
|
||||
difficulty = 10
|
||||
excludefromjob = list("Head Of Security")
|
||||
altitems = list(/obj/item/gun/ballistic/revolver/mws, /obj/item/choice_beacon/hosgun) //We now look for eather the alt verson of the hos gun or the beacon picker.
|
||||
altitems = list(/obj/item/gun/ballistic/revolver/mws, /obj/item/choice_beacon/hosgun) //We now look for either the alt verson of the hos gun or the beacon picker.
|
||||
|
||||
/datum/objective_item/steal/handtele
|
||||
name = "a hand teleporter."
|
||||
|
||||
@@ -46,29 +46,16 @@
|
||||
"Dinnerware",
|
||||
"Imported"
|
||||
)
|
||||
var/list/allowed_materials = list(
|
||||
/datum/material/iron,
|
||||
/datum/material/glass,
|
||||
/datum/material/gold,
|
||||
/datum/material/silver,
|
||||
/datum/material/diamond,
|
||||
/datum/material/uranium,
|
||||
/datum/material/plasma,
|
||||
/datum/material/bluespace,
|
||||
/datum/material/bananium,
|
||||
/datum/material/titanium,
|
||||
/datum/material/runite,
|
||||
/datum/material/plastic,
|
||||
/datum/material/adamantine,
|
||||
/datum/material/mythril,
|
||||
/datum/material/wood
|
||||
)
|
||||
var/list/allowed_materials
|
||||
|
||||
/// Base print speed
|
||||
var/base_print_speed = 10
|
||||
|
||||
/obj/machinery/autolathe/Initialize()
|
||||
AddComponent(/datum/component/material_container, allowed_materials, _show_on_examine=TRUE, _after_insert=CALLBACK(src, .proc/AfterMaterialInsert))
|
||||
var/list/mats = allowed_materials
|
||||
if(!mats)
|
||||
mats = SSmaterials.materialtypes_by_category[MAT_CATEGORY_RIGID]
|
||||
AddComponent(/datum/component/material_container, mats, _show_on_examine=TRUE, _after_insert=CALLBACK(src, .proc/AfterMaterialInsert))
|
||||
. = ..()
|
||||
wires = new /datum/wires/autolathe(src)
|
||||
stored_research = new stored_research
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
return examine(user)
|
||||
|
||||
//Start growing a human clone in the pod!
|
||||
/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, mutation_index, mindref, datum/species/mrace, list/features, factions, list/quirks, datum/bank_account/insurance)
|
||||
/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, mutation_index, mindref, datum/species/mrace, list/features, factions, list/quirks, datum/bank_account/insurance, list/traumas)
|
||||
if(panel_open)
|
||||
return FALSE
|
||||
if(mess || attempting)
|
||||
@@ -209,6 +209,12 @@
|
||||
var/datum/quirk/Q = new V(H)
|
||||
Q.on_clone(quirks[V])
|
||||
|
||||
for(var/t in traumas)
|
||||
var/datum/brain_trauma/BT = t
|
||||
var/datum/brain_trauma/cloned_trauma = BT.on_clone()
|
||||
if(cloned_trauma)
|
||||
H.gain_trauma(cloned_trauma, BT.resilience)
|
||||
|
||||
H.set_cloned_appearance()
|
||||
H.give_genitals(TRUE)
|
||||
|
||||
@@ -271,9 +277,6 @@
|
||||
var/obj/item/bodypart/BP = I
|
||||
BP.attach_limb(mob_occupant)
|
||||
|
||||
//Premature clones may have brain damage.
|
||||
mob_occupant.adjustOrganLoss(ORGAN_SLOT_BRAIN, -((speed_coeff / 2) * dmg_mult))
|
||||
|
||||
use_power(7500) //This might need tweaking.
|
||||
|
||||
else if((mob_occupant && mob_occupant.cloneloss <= (100 - heal_level)))
|
||||
@@ -399,6 +402,8 @@
|
||||
to_chat(occupant, "<span class='notice'><b>There is a bright flash!</b><br><i>You feel like a new being.</i></span>")
|
||||
mob_occupant.flash_act()
|
||||
|
||||
mob_occupant.adjustOrganLoss(ORGAN_SLOT_BRAIN, mob_occupant.getCloneLoss())
|
||||
|
||||
occupant.forceMove(T)
|
||||
update_icon()
|
||||
mob_occupant.domutcheck(1) //Waiting until they're out before possible monkeyizing. The 1 argument forces powers to manifest.
|
||||
@@ -474,10 +479,9 @@
|
||||
unattached_flesh.Cut()
|
||||
|
||||
H.setCloneLoss(CLONE_INITIAL_DAMAGE) //Yeah, clones start with very low health, not with random, because why would they start with random health
|
||||
//H.setOrganLoss(ORGAN_SLOT_BRAIN, CLONE_INITIAL_DAMAGE)
|
||||
// In addition to being cellularly damaged and having barely any
|
||||
|
||||
// brain function, they also have no limbs or internal organs.
|
||||
// In addition to being cellularly damaged, they also have no limbs or internal organs.
|
||||
// Applying brainloss is done when the clone leaves the pod, so application of traumas can happen.
|
||||
// based on the level of damage sustained.
|
||||
|
||||
if(!HAS_TRAIT(H, TRAIT_NODISMEMBER))
|
||||
var/static/list/zones = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
if(pod.occupant)
|
||||
continue //how though?
|
||||
|
||||
if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"], R.fields["quirks"], R.fields["bank_account"]))
|
||||
if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"], R.fields["quirks"], R.fields["bank_account"], R.fields["traumas"]))
|
||||
temp = "[R.fields["name"]] => <font class='good'>Cloning cycle in progress...</font>"
|
||||
records -= R
|
||||
|
||||
@@ -442,14 +442,17 @@
|
||||
var/mob/living/mob_occupant = get_mob_or_brainmob(occupant)
|
||||
var/datum/dna/dna
|
||||
var/datum/bank_account/has_bank_account
|
||||
|
||||
// Do not use unless you know what they are.
|
||||
var/mob/living/carbon/C = mob_occupant
|
||||
var/mob/living/brain/B = mob_occupant
|
||||
|
||||
if(ishuman(mob_occupant))
|
||||
var/mob/living/carbon/C = mob_occupant
|
||||
dna = C.has_dna()
|
||||
var/obj/item/card/id/I = C.get_idcard()
|
||||
if(I)
|
||||
has_bank_account = I.registered_account
|
||||
if(isbrain(mob_occupant))
|
||||
var/mob/living/brain/B = mob_occupant
|
||||
dna = B.stored_dna
|
||||
|
||||
if(!istype(dna))
|
||||
@@ -497,11 +500,17 @@
|
||||
R.fields["features"] = dna.features
|
||||
R.fields["factions"] = mob_occupant.faction
|
||||
R.fields["quirks"] = list()
|
||||
R.fields["bank_account"] = has_bank_account
|
||||
for(var/V in mob_occupant.roundstart_quirks)
|
||||
var/datum/quirk/T = V
|
||||
R.fields["quirks"][T.type] = T.clone_data()
|
||||
|
||||
R.fields["traumas"] = list()
|
||||
if(ishuman(mob_occupant))
|
||||
R.fields["traumas"] = C.get_traumas()
|
||||
if(isbrain(mob_occupant))
|
||||
R.fields["traumas"] = B.get_traumas()
|
||||
|
||||
R.fields["bank_account"] = has_bank_account
|
||||
if (!isnull(mob_occupant.mind)) //Save that mind so traitors can continue traitoring after cloning.
|
||||
R.fields["mind"] = "[REF(mob_occupant.mind)]"
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
var/secondsElectrified = 0
|
||||
var/shockedby
|
||||
var/visible = TRUE
|
||||
var/visible = TRUE // To explain: Whether the door can block line of sight when closed or not.
|
||||
var/operating = FALSE
|
||||
var/glass = FALSE
|
||||
var/welded = FALSE
|
||||
|
||||
@@ -54,6 +54,15 @@
|
||||
else
|
||||
icon_state = "[src.base_state]open"
|
||||
|
||||
/obj/machinery/door/window/update_atom_colour()
|
||||
if((color && (color_hex2num(color) < 255)))
|
||||
visible = TRUE
|
||||
if(density)
|
||||
set_opacity(TRUE)
|
||||
else
|
||||
visible = FALSE
|
||||
set_opacity(density && visible)
|
||||
|
||||
/obj/machinery/door/window/proc/open_and_close()
|
||||
open()
|
||||
if(src.check_access(null))
|
||||
@@ -143,16 +152,18 @@
|
||||
do_animate("opening")
|
||||
playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1)
|
||||
src.icon_state ="[src.base_state]open"
|
||||
sleep(10)
|
||||
addtimer(CALLBACK(src, .proc/finish_opening), 10)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/door/window/proc/finish_opening()
|
||||
operating = FALSE
|
||||
density = FALSE
|
||||
// src.sd_set_opacity(0) //TODO: why is this here? Opaque windoors? ~Carn
|
||||
if(visible)
|
||||
set_opacity(FALSE)
|
||||
air_update_turf(1)
|
||||
update_freelook_sight()
|
||||
|
||||
if(operating == 1) //emag again
|
||||
operating = FALSE
|
||||
return 1
|
||||
|
||||
/obj/machinery/door/window/close(forced=0)
|
||||
if (src.operating)
|
||||
@@ -171,10 +182,13 @@
|
||||
density = TRUE
|
||||
air_update_turf(1)
|
||||
update_freelook_sight()
|
||||
sleep(10)
|
||||
addtimer(CALLBACK(src, .proc/finish_closing), 10)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/door/window/proc/finish_closing()
|
||||
if(visible)
|
||||
set_opacity(TRUE)
|
||||
operating = FALSE
|
||||
return 1
|
||||
|
||||
/obj/machinery/door/window/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
|
||||
switch(damage_type)
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
/obj/machinery/sheetifier
|
||||
name = "Sheet-meister 2000"
|
||||
desc = "A very sheety machine"
|
||||
icon = 'icons/obj/machines/sheetifier.dmi'
|
||||
icon_state = "base_machine"
|
||||
density = TRUE
|
||||
use_power = IDLE_POWER_USE
|
||||
idle_power_usage = 10
|
||||
active_power_usage = 100
|
||||
circuit = /obj/item/circuitboard/machine/sheetifier
|
||||
layer = BELOW_OBJ_LAYER
|
||||
var/busy_processing = FALSE
|
||||
|
||||
/obj/machinery/sheetifier/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/material_container, list(/datum/material/meat), MINERAL_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, TRUE, /obj/item/reagent_containers/food/snacks/meat/slab, CALLBACK(src, .proc/CanInsertMaterials), CALLBACK(src, .proc/AfterInsertMaterials))
|
||||
|
||||
/obj/machinery/sheetifier/update_overlays()
|
||||
. = ..()
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
var/mutable_appearance/on_overlay = mutable_appearance(icon, "buttons_on")
|
||||
. += on_overlay
|
||||
|
||||
/obj/machinery/sheetifier/update_icon_state()
|
||||
icon_state = "base_machine[busy_processing ? "_processing" : ""]"
|
||||
|
||||
/obj/machinery/sheetifier/proc/CanInsertMaterials()
|
||||
return !busy_processing
|
||||
|
||||
/obj/machinery/sheetifier/proc/AfterInsertMaterials(item_inserted, id_inserted, amount_inserted)
|
||||
busy_processing = TRUE
|
||||
update_icon()
|
||||
var/datum/material/last_inserted_material = id_inserted
|
||||
var/mutable_appearance/processing_overlay = mutable_appearance(icon, "processing")
|
||||
processing_overlay.color = last_inserted_material.color
|
||||
flick_overlay_static(processing_overlay, src, 64)
|
||||
addtimer(CALLBACK(src, .proc/finish_processing), 64)
|
||||
|
||||
/obj/machinery/sheetifier/proc/finish_processing()
|
||||
busy_processing = FALSE
|
||||
update_icon()
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
materials.retrieve_all() //Returns all as sheets
|
||||
@@ -388,7 +388,7 @@
|
||||
/obj/item/mecha_parts/mecha_equipment/generator/get_equip_info()
|
||||
var/output = ..()
|
||||
if(output)
|
||||
return "[output] \[[fuel]: [round(fuel.amount*fuel.mats_per_stack,0.1)] cm<sup>3</sup>\] - <a href='?src=[REF(src)];toggle=1'>[equip_ready?"A":"Dea"]ctivate</a>"
|
||||
return "[output] \[[fuel]: [round(fuel.amount*MINERAL_MATERIAL_AMOUNT,0.1)] cm<sup>3</sup>\] - <a href='?src=[REF(src)];toggle=1'>[equip_ready?"A":"Dea"]ctivate</a>"
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/generator/action(target)
|
||||
if(chassis)
|
||||
@@ -398,9 +398,9 @@
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(var/obj/item/stack/sheet/P)
|
||||
if(P.type == fuel.type && P.amount > 0)
|
||||
var/to_load = max(max_fuel - fuel.amount*fuel.mats_per_stack,0)
|
||||
var/to_load = max(max_fuel - fuel.amount*MINERAL_MATERIAL_AMOUNT,0)
|
||||
if(to_load)
|
||||
var/units = min(max(round(to_load / P.mats_per_stack),1),P.amount)
|
||||
var/units = min(max(round(to_load / MINERAL_MATERIAL_AMOUNT),1),P.amount)
|
||||
fuel.amount += units
|
||||
P.use(units)
|
||||
occupant_message("[units] unit\s of [fuel] successfully loaded.")
|
||||
@@ -454,7 +454,7 @@
|
||||
if(cur_charge < chassis.cell.maxcharge)
|
||||
use_fuel = fuel_per_cycle_active
|
||||
chassis.give_power(power_per_cycle)
|
||||
fuel.amount -= min(use_fuel/fuel.mats_per_stack,fuel.amount)
|
||||
fuel.amount -= min(use_fuel/MINERAL_MATERIAL_AMOUNT,fuel.amount)
|
||||
update_equip_info()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
"Firefighter",
|
||||
"Odysseus",
|
||||
"Gygax",
|
||||
"Medical-Spec Gygax",
|
||||
"Durand",
|
||||
"H.O.N.K",
|
||||
"Phazon",
|
||||
|
||||
@@ -642,6 +642,304 @@
|
||||
user.visible_message("[user] unfastens Gygax Armor Plates.", "<span class='notice'>You unfasten Gygax Armor Plates.</span>")
|
||||
return TRUE
|
||||
|
||||
//Begin Medigax
|
||||
/datum/component/construction/unordered/mecha_chassis/medigax
|
||||
result = /datum/component/construction/mecha/medigax
|
||||
steps = list(
|
||||
/obj/item/mecha_parts/part/medigax_torso,
|
||||
/obj/item/mecha_parts/part/medigax_left_arm,
|
||||
/obj/item/mecha_parts/part/medigax_right_arm,
|
||||
/obj/item/mecha_parts/part/medigax_left_leg,
|
||||
/obj/item/mecha_parts/part/medigax_right_leg,
|
||||
/obj/item/mecha_parts/part/medigax_head
|
||||
)
|
||||
|
||||
/datum/component/construction/mecha/medigax
|
||||
result = /obj/mecha/medical/medigax
|
||||
base_icon = "medigax"
|
||||
steps = list(
|
||||
//1
|
||||
list(
|
||||
"key" = TOOL_WRENCH,
|
||||
"desc" = "The hydraulic systems are disconnected."
|
||||
),
|
||||
|
||||
//2
|
||||
list(
|
||||
"key" = TOOL_SCREWDRIVER,
|
||||
"back_key" = TOOL_WRENCH,
|
||||
"desc" = "The hydraulic systems are connected."
|
||||
),
|
||||
|
||||
//3
|
||||
list(
|
||||
"key" = /obj/item/stack/cable_coil,
|
||||
"amount" = 5,
|
||||
"back_key" = TOOL_SCREWDRIVER,
|
||||
"desc" = "The hydraulic systems are active."
|
||||
),
|
||||
|
||||
//4
|
||||
list(
|
||||
"key" = TOOL_WIRECUTTER,
|
||||
"back_key" = TOOL_SCREWDRIVER,
|
||||
"desc" = "The wiring is added."
|
||||
),
|
||||
|
||||
//5
|
||||
list(
|
||||
"key" = /obj/item/circuitboard/mecha/gygax/main,
|
||||
"action" = ITEM_DELETE,
|
||||
"back_key" = TOOL_SCREWDRIVER,
|
||||
"desc" = "The wiring is adjusted."
|
||||
),
|
||||
|
||||
//6
|
||||
list(
|
||||
"key" = TOOL_SCREWDRIVER,
|
||||
"back_key" = TOOL_CROWBAR,
|
||||
"desc" = "Central control module is installed."
|
||||
),
|
||||
|
||||
//7
|
||||
list(
|
||||
"key" = /obj/item/circuitboard/mecha/gygax/peripherals,
|
||||
"action" = ITEM_DELETE,
|
||||
"back_key" = TOOL_SCREWDRIVER,
|
||||
"desc" = "Central control module is secured."
|
||||
),
|
||||
|
||||
//8
|
||||
list(
|
||||
"key" = TOOL_SCREWDRIVER,
|
||||
"back_key" = TOOL_CROWBAR,
|
||||
"desc" = "Peripherals control module is installed."
|
||||
),
|
||||
|
||||
//9
|
||||
list(
|
||||
"key" = /obj/item/circuitboard/mecha/gygax/targeting,
|
||||
"action" = ITEM_DELETE,
|
||||
"back_key" = TOOL_SCREWDRIVER,
|
||||
"desc" = "Peripherals control module is secured."
|
||||
),
|
||||
|
||||
//10
|
||||
list(
|
||||
"key" = TOOL_SCREWDRIVER,
|
||||
"back_key" = TOOL_CROWBAR,
|
||||
"desc" = "Weapon control module is installed."
|
||||
),
|
||||
|
||||
//11
|
||||
list(
|
||||
"key" = /obj/item/stock_parts/scanning_module,
|
||||
"action" = ITEM_MOVE_INSIDE,
|
||||
"back_key" = TOOL_SCREWDRIVER,
|
||||
"desc" = "Weapon control module is secured."
|
||||
),
|
||||
|
||||
//12
|
||||
list(
|
||||
"key" = TOOL_SCREWDRIVER,
|
||||
"back_key" = TOOL_CROWBAR,
|
||||
"desc" = "Scanner module is installed."
|
||||
),
|
||||
|
||||
//13
|
||||
list(
|
||||
"key" = /obj/item/stock_parts/capacitor,
|
||||
"action" = ITEM_MOVE_INSIDE,
|
||||
"back_key" = TOOL_SCREWDRIVER,
|
||||
"desc" = "Scanner module is secured."
|
||||
),
|
||||
|
||||
//14
|
||||
list(
|
||||
"key" = TOOL_SCREWDRIVER,
|
||||
"back_key" = TOOL_CROWBAR,
|
||||
"desc" = "Capacitor is installed."
|
||||
),
|
||||
|
||||
//15
|
||||
list(
|
||||
"key" = /obj/item/stock_parts/cell,
|
||||
"action" = ITEM_MOVE_INSIDE,
|
||||
"back_key" = TOOL_SCREWDRIVER,
|
||||
"desc" = "Capacitor is secured."
|
||||
),
|
||||
|
||||
//16
|
||||
list(
|
||||
"key" = TOOL_SCREWDRIVER,
|
||||
"back_key" = TOOL_CROWBAR,
|
||||
"desc" = "The power cell is installed."
|
||||
),
|
||||
|
||||
//17
|
||||
list(
|
||||
"key" = /obj/item/stack/sheet/metal,
|
||||
"amount" = 5,
|
||||
"back_key" = TOOL_SCREWDRIVER,
|
||||
"desc" = "The power cell is secured."
|
||||
),
|
||||
|
||||
//18
|
||||
list(
|
||||
"key" = TOOL_WRENCH,
|
||||
"back_key" = TOOL_CROWBAR,
|
||||
"desc" = "Internal armor is installed."
|
||||
),
|
||||
|
||||
//19
|
||||
list(
|
||||
"key" = TOOL_WELDER,
|
||||
"back_key" = TOOL_WRENCH,
|
||||
"desc" = "Internal armor is wrenched."
|
||||
),
|
||||
|
||||
//20
|
||||
list(
|
||||
"key" = /obj/item/mecha_parts/part/medigax_armor,
|
||||
"action" = ITEM_DELETE,
|
||||
"back_key" = TOOL_WELDER,
|
||||
"desc" = "Internal armor is welded."
|
||||
),
|
||||
|
||||
//21
|
||||
list(
|
||||
"key" = TOOL_WRENCH,
|
||||
"back_key" = TOOL_CROWBAR,
|
||||
"desc" = "External armor is installed."
|
||||
),
|
||||
|
||||
//22
|
||||
list(
|
||||
"key" = TOOL_WELDER,
|
||||
"back_key" = TOOL_WRENCH,
|
||||
"desc" = "External armor is wrenched."
|
||||
),
|
||||
|
||||
)
|
||||
|
||||
/datum/component/construction/mecha/medigax/action(datum/source, atom/used_atom, mob/user)
|
||||
return check_step(used_atom,user)
|
||||
|
||||
/datum/component/construction/mecha/medigax/custom_action(obj/item/I, mob/living/user, diff)
|
||||
if(!..())
|
||||
return FALSE
|
||||
|
||||
switch(index)
|
||||
if(1)
|
||||
user.visible_message("[user] connects [parent] hydraulic systems", "<span class='notice'>You connect [parent] hydraulic systems.</span>")
|
||||
if(2)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] activates [parent] hydraulic systems.", "<span class='notice'>You activate [parent] hydraulic systems.</span>")
|
||||
else
|
||||
user.visible_message("[user] disconnects [parent] hydraulic systems", "<span class='notice'>You disconnect [parent] hydraulic systems.</span>")
|
||||
if(3)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] adds the wiring to [parent].", "<span class='notice'>You add the wiring to [parent].</span>")
|
||||
else
|
||||
user.visible_message("[user] deactivates [parent] hydraulic systems.", "<span class='notice'>You deactivate [parent] hydraulic systems.</span>")
|
||||
if(4)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] adjusts the wiring of [parent].", "<span class='notice'>You adjust the wiring of [parent].</span>")
|
||||
else
|
||||
user.visible_message("[user] removes the wiring from [parent].", "<span class='notice'>You remove the wiring from [parent].</span>")
|
||||
if(5)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs [I] into [parent].", "<span class='notice'>You install [I] into [parent].</span>")
|
||||
else
|
||||
user.visible_message("[user] disconnects the wiring of [parent].", "<span class='notice'>You disconnect the wiring of [parent].</span>")
|
||||
if(6)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures the mainboard.", "<span class='notice'>You secure the mainboard.</span>")
|
||||
else
|
||||
user.visible_message("[user] removes the central control module from [parent].", "<span class='notice'>You remove the central computer mainboard from [parent].</span>")
|
||||
if(7)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs [I] into [parent].", "<span class='notice'>You install [I] into [parent].</span>")
|
||||
else
|
||||
user.visible_message("[user] unfastens the mainboard.", "<span class='notice'>You unfasten the mainboard.</span>")
|
||||
if(8)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures the peripherals control module.", "<span class='notice'>You secure the peripherals control module.</span>")
|
||||
else
|
||||
user.visible_message("[user] removes the peripherals control module from [parent].", "<span class='notice'>You remove the peripherals control module from [parent].</span>")
|
||||
if(9)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs [I] into [parent].", "<span class='notice'>You install [I] into [parent].</span>")
|
||||
else
|
||||
user.visible_message("[user] unfastens the peripherals control module.", "<span class='notice'>You unfasten the peripherals control module.</span>")
|
||||
if(10)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures the weapon control module.", "<span class='notice'>You secure the weapon control module.</span>")
|
||||
else
|
||||
user.visible_message("[user] removes the weapon control module from [parent].", "<span class='notice'>You remove the weapon control module from [parent].</span>")
|
||||
if(11)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs [I] to [parent].", "<span class='notice'>You install [I] to [parent].</span>")
|
||||
else
|
||||
user.visible_message("[user] unfastens the weapon control module.", "<span class='notice'>You unfasten the weapon control module.</span>")
|
||||
if(12)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures the scanner module.", "<span class='notice'>You secure the scanner module.</span>")
|
||||
else
|
||||
user.visible_message("[user] removes the scanner module from [parent].", "<span class='notice'>You remove the scanner module from [parent].</span>")
|
||||
if(13)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs [I] to [parent].", "<span class='notice'>You install [I] to [parent].</span>")
|
||||
else
|
||||
user.visible_message("[user] unfastens the scanner module.", "<span class='notice'>You unfasten the scanner module.</span>")
|
||||
if(14)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures the capacitor.", "<span class='notice'>You secure the capacitor.</span>")
|
||||
else
|
||||
user.visible_message("[user] removes the capacitor from [parent].", "<span class='notice'>You remove the capacitor from [parent].</span>")
|
||||
if(15)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs [I] into [parent].", "<span class='notice'>You install [I] into [parent].</span>")
|
||||
else
|
||||
user.visible_message("[user] unfastens the capacitor.", "<span class='notice'>You unfasten the capacitor.</span>")
|
||||
if(16)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures the power cell.", "<span class='notice'>You secure the power cell.</span>")
|
||||
else
|
||||
user.visible_message("[user] pries the power cell from [parent].", "<span class='notice'>You pry the power cell from [parent].</span>")
|
||||
if(17)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs the internal armor layer to [parent].", "<span class='notice'>You install the internal armor layer to [parent].</span>")
|
||||
else
|
||||
user.visible_message("[user] unfastens the power cell.", "<span class='notice'>You unfasten the power cell.</span>")
|
||||
if(18)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures the internal armor layer.", "<span class='notice'>You secure the internal armor layer.</span>")
|
||||
else
|
||||
user.visible_message("[user] pries internal armor layer from [parent].", "<span class='notice'>You pry internal armor layer from [parent].</span>")
|
||||
if(19)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] welds the internal armor layer to [parent].", "<span class='notice'>You weld the internal armor layer to [parent].</span>")
|
||||
else
|
||||
user.visible_message("[user] unfastens the internal armor layer.", "<span class='notice'>You unfasten the internal armor layer.</span>")
|
||||
if(20)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs [I] to [parent].", "<span class='notice'>You install [I] to [parent].</span>")
|
||||
else
|
||||
user.visible_message("[user] cuts the internal armor layer from [parent].", "<span class='notice'>You cut the internal armor layer from [parent].</span>")
|
||||
if(21)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures Gygax Armor Plates.", "<span class='notice'>You secure Medical Gygax Armor Plates.</span>")
|
||||
else
|
||||
user.visible_message("[user] pries Gygax Armor Plates from [parent].", "<span class='notice'>You pry Medical Gygax Armor Plates from [parent].</span>")
|
||||
if(22)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] welds Gygax Armor Plates to [parent].", "<span class='notice'>You weld Medical Gygax Armor Plates to [parent].</span>")
|
||||
else
|
||||
user.visible_message("[user] unfastens Gygax Armor Plates.", "<span class='notice'>You unfasten Medical Gygax Armor Plates.</span>")
|
||||
return TRUE
|
||||
// End Medigax
|
||||
|
||||
/datum/component/construction/unordered/mecha_chassis/firefighter
|
||||
result = /datum/component/construction/mecha/firefighter
|
||||
steps = list(
|
||||
|
||||
@@ -129,6 +129,47 @@
|
||||
desc = "A set of armor plates designed for the Gygax. Designed to effectively deflect damage with a lightweight construction."
|
||||
icon_state = "gygax_armor"
|
||||
|
||||
///////// Medical Gygax
|
||||
|
||||
/obj/item/mecha_parts/chassis/medigax
|
||||
name = "\improper Medical Gygax chassis"
|
||||
construct_type = /datum/component/construction/unordered/mecha_chassis/medigax
|
||||
|
||||
/obj/item/mecha_parts/part/medigax_torso
|
||||
name = "\improper Medical Gygax torso"
|
||||
desc = "A torso part of Gygax. Contains power unit, processing core and life support systems."
|
||||
icon_state = "medigax_harness"
|
||||
|
||||
/obj/item/mecha_parts/part/medigax_head
|
||||
name = "\improper Medical Gygax head"
|
||||
desc = "A Gygax head. Houses advanced surveillance and targeting sensors."
|
||||
icon_state = "medigax_head"
|
||||
|
||||
/obj/item/mecha_parts/part/medigax_left_arm
|
||||
name = "\improper Medical Gygax left arm"
|
||||
desc = "A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons."
|
||||
icon_state = "medigax_l_arm"
|
||||
|
||||
/obj/item/mecha_parts/part/medigax_right_arm
|
||||
name = "\improper Medical Gygax right arm"
|
||||
desc = "A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons."
|
||||
icon_state = "medigax_r_arm"
|
||||
|
||||
/obj/item/mecha_parts/part/medigax_left_leg
|
||||
name = "\improper Medical Gygax left leg"
|
||||
desc = "A Gygax left leg. Constructed with advanced servomechanisms and actuators to enable faster speed."
|
||||
icon_state = "medigax_l_leg"
|
||||
|
||||
/obj/item/mecha_parts/part/medigax_right_leg
|
||||
name = "\improper Medical Gygax right leg"
|
||||
desc = "A Gygax right leg. Constructed with advanced servomechanisms and actuators to enable faster speed."
|
||||
icon_state = "medigax_r_leg"
|
||||
|
||||
/obj/item/mecha_parts/part/medigax_armor
|
||||
gender = PLURAL
|
||||
name = "\improper Medical Gygax armor plates"
|
||||
desc = "A set of armor plates designed for the Gygax. Designed to effectively deflect damage with a lightweight construction."
|
||||
icon_state = "medigax_armor"
|
||||
|
||||
//////////// Durand
|
||||
|
||||
|
||||
@@ -256,7 +256,7 @@
|
||||
output_access_dialog(id_card, usr)
|
||||
|
||||
if(href_list["del_req_access"] && add_req_access)
|
||||
operation_req_access -= text2num(href_list["add_req_access"])
|
||||
operation_req_access -= text2num(href_list["del_req_access"])
|
||||
output_access_dialog(id_card, usr)
|
||||
|
||||
if(href_list["finish_req_access"])
|
||||
|
||||
@@ -125,6 +125,24 @@
|
||||
name = "\improper Dark Gygax wreckage"
|
||||
icon_state = "darkgygax-broken"
|
||||
|
||||
/obj/structure/mecha_wreckage/medigax
|
||||
name = "\improper Medical Gygax wreckage"
|
||||
icon_state = "medigax-broken"
|
||||
|
||||
/obj/structure/mecha_wreckage/medigax/Initialize()
|
||||
. = ..()
|
||||
var/list/parts = list(/obj/item/mecha_parts/part/medigax_torso,
|
||||
/obj/item/mecha_parts/part/medigax_head,
|
||||
/obj/item/mecha_parts/part/medigax_left_arm,
|
||||
/obj/item/mecha_parts/part/medigax_right_arm,
|
||||
/obj/item/mecha_parts/part/medigax_left_leg,
|
||||
/obj/item/mecha_parts/part/medigax_right_leg)
|
||||
for(var/i = 0; i < 2; i++)
|
||||
if(parts.len && prob(40))
|
||||
var/part = pick(parts)
|
||||
welder_salvage += part
|
||||
parts -= part
|
||||
|
||||
/obj/structure/mecha_wreckage/marauder
|
||||
name = "\improper Marauder wreckage"
|
||||
icon_state = "marauder-broken"
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
/obj/mecha/medical/medigax
|
||||
desc = "A Gygax with it's actuator overload stripped and a slick white paint scheme, for medical use, These exosuits are developed and produced by Vey-Med. (© All rights reserved)."
|
||||
name = "\improper Medical Gygax"
|
||||
icon_state = "medigax"
|
||||
step_in = 1.75 // a little faster than an odysseus
|
||||
max_temperature = 25000
|
||||
max_integrity = 250
|
||||
wreckage = /obj/structure/mecha_wreckage/odysseus
|
||||
armor = list("melee" = 25, "bullet" = 20, "laser" = 30, "energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
|
||||
internal_damage_threshold = 35
|
||||
deflect_chance = 15
|
||||
step_energy_drain = 6
|
||||
infra_luminosity = 6
|
||||
|
||||
|
||||
/obj/mecha/medical/medigax/moved_inside(mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
|
||||
hud.add_hud_to(H)
|
||||
|
||||
/obj/mecha/medical/medigax/go_out()
|
||||
if(isliving(occupant))
|
||||
var/mob/living/carbon/human/L = occupant
|
||||
var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
|
||||
hud.remove_hud_from(L)
|
||||
..()
|
||||
|
||||
/obj/mecha/medical/medigax/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
|
||||
var/mob/living/brain/B = mmi_as_oc.brainmob
|
||||
hud.add_hud_to(B)
|
||||
@@ -91,7 +91,7 @@
|
||||
var/mob/living/carbon/human/H = O
|
||||
var/obj/item/clothing/shoes/S = H.shoes
|
||||
if(S && S.bloody_shoes[blood_state])
|
||||
if(color != bloodtype_to_color(S.last_bloodtype))
|
||||
if(color != S.last_blood_color)
|
||||
return
|
||||
S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0)
|
||||
shoe_types |= S.type
|
||||
@@ -104,7 +104,7 @@
|
||||
var/mob/living/carbon/human/H = O
|
||||
var/obj/item/clothing/shoes/S = H.shoes
|
||||
if(S && S.bloody_shoes[blood_state])
|
||||
if(color != bloodtype_to_color(S.last_bloodtype))//last entry - we check its color
|
||||
if(color != S.last_blood_color)//last entry - we check its color
|
||||
return
|
||||
S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0)
|
||||
shoe_types |= S.type
|
||||
|
||||
@@ -451,7 +451,7 @@
|
||||
lootcount = 1
|
||||
spawn_on_turf = FALSE
|
||||
//Note this is out of a 100 - Meaning the number you see is also the percent its going to pick that
|
||||
//This is ment for "low" loot that anyone could fine in a toilet, for better gear use high loot toilet
|
||||
//This is meant for "low" loot that anyone could find in a toilet, for better gear use high loot toilet
|
||||
loot = list("" = 30,
|
||||
/obj/item/lighter = 2,
|
||||
/obj/item/tape/random = 1,
|
||||
@@ -476,7 +476,7 @@
|
||||
lootcount = 1
|
||||
spawn_on_turf = FALSE
|
||||
//Note this is out of a 100 - Meaning the number you see is also the percent its going to pick that
|
||||
//This is ment for "prison" loot that is rather rare and ment for "prisoners if they get a crowbar to fine, or sec.
|
||||
//This is meant for "prison" loot that is rather rare and meant for "prisoners if they get a crowbar to fine, or sec.
|
||||
loot = list("" = 10,
|
||||
/obj/item/lighter = 5,
|
||||
/obj/item/poster/random_contraband = 5,
|
||||
|
||||
@@ -778,6 +778,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
|
||||
..()
|
||||
|
||||
/obj/item/proc/microwave_act(obj/machinery/microwave/M)
|
||||
SEND_SIGNAL(src, COMSIG_ITEM_MICROWAVE_ACT, M)
|
||||
if(istype(M) && M.dirty < 100)
|
||||
M.dirty++
|
||||
|
||||
|
||||
@@ -61,6 +61,14 @@
|
||||
name = "Experimental Clone Pod (Machine Board)"
|
||||
build_path = /obj/machinery/clonepod/experimental
|
||||
|
||||
/obj/item/circuitboard/machine/sheetifier
|
||||
name = "Sheet-meister 2000 (Machine Board)"
|
||||
icon_state = "supply"
|
||||
build_path = /obj/machinery/sheetifier
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/manipulator = 2,
|
||||
/obj/item/stock_parts/matter_bin = 2)
|
||||
|
||||
/obj/item/circuitboard/machine/abductor
|
||||
name = "alien board (Report This)"
|
||||
icon_state = "abductor_mod"
|
||||
|
||||
@@ -88,6 +88,7 @@
|
||||
var/obj/effect/decal/cleanable/C = locate() in target
|
||||
qdel(C)
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
target.clean_blood()
|
||||
SEND_SIGNAL(target, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
|
||||
target.wash_cream()
|
||||
return
|
||||
@@ -180,4 +181,4 @@
|
||||
name = "Canned Laughter"
|
||||
desc = "Just looking at this makes you want to giggle."
|
||||
icon_state = "laughter"
|
||||
list_reagents = list(/datum/reagent/consumable/laughter = 50)
|
||||
list_reagents = list(/datum/reagent/consumable/laughter = 50)
|
||||
|
||||
@@ -737,12 +737,7 @@
|
||||
to_chat(usr, "<span class='warning'>A color that dark on an object like this? Surely not...</span>")
|
||||
return FALSE
|
||||
|
||||
|
||||
if(istype(target, /obj/structure/window))
|
||||
var/obj/structure/window/W = target
|
||||
W.spraycan_paint(paint_color)
|
||||
else
|
||||
target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY)
|
||||
target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY)
|
||||
|
||||
. = use_charges(user, 2)
|
||||
var/fraction = min(1, . / reagents.maximum_volume)
|
||||
|
||||
@@ -258,6 +258,9 @@ GLOBAL_LIST_INIT(channel_tokens, list(
|
||||
name = "\proper mini Integrated Subspace Transceiver "
|
||||
subspace_transmission = FALSE
|
||||
|
||||
/obj/item/radio/headset/silicon/pai/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/empprotection, EMP_PROTECT_WIRES)
|
||||
|
||||
/obj/item/radio/headset/silicon/ai
|
||||
name = "\proper Integrated Subspace Transceiver "
|
||||
|
||||
@@ -510,7 +510,7 @@
|
||||
oneuse = FALSE
|
||||
remarks = list("So that is how icing is made!", "Placing fruit on top? How simple...", "Huh layering cake seems harder then this...", "This book smells like candy", "A clown must have made this page, or they forgot to spell check it before printing...", "Wait, a way to cook slime to be safe?")
|
||||
|
||||
/obj/item/book/granter/crafting_recipe/coldcooking //IceCream
|
||||
/obj/item/book/granter/crafting_recipe/coldcooking //Icecream
|
||||
name = "Cooking with Ice"
|
||||
desc = "A cook book that teaches you many old icecream treats."
|
||||
crafting_recipe_types = list(/datum/crafting_recipe/food/banana_split, /datum/crafting_recipe/food/root_float, /datum/crafting_recipe/food/bluecharrie_float, /datum/crafting_recipe/food/charrie_float)
|
||||
|
||||
@@ -689,7 +689,7 @@
|
||||
item_state = "mace_greyscale"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
|
||||
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS | MATERIAL_EFFECTS //Material type changes the prefix as well as the color.
|
||||
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS //Material type changes the prefix as well as the color.
|
||||
custom_materials = list(/datum/material/iron = 12000) //Defaults to an Iron Mace.
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
force = 14
|
||||
|
||||
@@ -17,7 +17,6 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
custom_materials = list(/datum/material/iron=1000)
|
||||
mats_per_stack = 1000
|
||||
max_amount = 50
|
||||
attack_verb = list("hit", "bludgeoned", "whacked")
|
||||
hitsound = 'sound/weapons/grenadelaunch.ogg'
|
||||
|
||||
@@ -39,9 +39,11 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \
|
||||
item_state = "sheet-sandstone"
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
custom_materials = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/sandstone=MINERAL_MATERIAL_AMOUNT)
|
||||
sheettype = "sandstone"
|
||||
merge_type = /obj/item/stack/sheet/mineral/sandstone
|
||||
walltype = /turf/closed/wall/mineral/sandstone
|
||||
material_type = /datum/material/sandstone
|
||||
|
||||
/obj/item/stack/sheet/mineral/sandstone/get_main_recipes()
|
||||
. = ..()
|
||||
@@ -107,6 +109,7 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \
|
||||
point_value = 25
|
||||
merge_type = /obj/item/stack/sheet/mineral/diamond
|
||||
material_type = /datum/material/diamond
|
||||
walltype = /turf/closed/wall/mineral/diamond
|
||||
|
||||
GLOBAL_LIST_INIT(diamond_recipes, list ( \
|
||||
new/datum/stack_recipe("diamond door", /obj/structure/mineral_door/transparent/diamond, 10, one_per_turf = 1, on_floor = 1), \
|
||||
@@ -135,6 +138,7 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \
|
||||
point_value = 20
|
||||
merge_type = /obj/item/stack/sheet/mineral/uranium
|
||||
material_type = /datum/material/uranium
|
||||
walltype = /turf/closed/wall/mineral/uranium
|
||||
|
||||
GLOBAL_LIST_INIT(uranium_recipes, list ( \
|
||||
new/datum/stack_recipe("uranium door", /obj/structure/mineral_door/uranium, 10, one_per_turf = 1, on_floor = 1), \
|
||||
@@ -163,6 +167,7 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \
|
||||
point_value = 20
|
||||
merge_type = /obj/item/stack/sheet/mineral/plasma
|
||||
material_type = /datum/material/plasma
|
||||
walltype = /turf/closed/wall/mineral/plasma
|
||||
|
||||
/obj/item/stack/sheet/mineral/plasma/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins licking \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
@@ -205,6 +210,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \
|
||||
point_value = 20
|
||||
merge_type = /obj/item/stack/sheet/mineral/gold
|
||||
material_type = /datum/material/gold
|
||||
walltype = /turf/closed/wall/mineral/gold
|
||||
|
||||
GLOBAL_LIST_INIT(gold_recipes, list ( \
|
||||
new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, one_per_turf = 1, on_floor = 1), \
|
||||
@@ -236,6 +242,7 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \
|
||||
merge_type = /obj/item/stack/sheet/mineral/silver
|
||||
material_type = /datum/material/silver
|
||||
tableVariant = /obj/structure/table/optable
|
||||
walltype = /turf/closed/wall/mineral/silver
|
||||
|
||||
GLOBAL_LIST_INIT(silver_recipes, list ( \
|
||||
new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, one_per_turf = 1, on_floor = 1), \
|
||||
@@ -266,6 +273,7 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \
|
||||
point_value = 50
|
||||
merge_type = /obj/item/stack/sheet/mineral/bananium
|
||||
material_type = /datum/material/bananium
|
||||
walltype = /turf/closed/wall/mineral/bananium
|
||||
|
||||
GLOBAL_LIST_INIT(bananium_recipes, list ( \
|
||||
new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20), \
|
||||
@@ -294,6 +302,7 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \
|
||||
point_value = 20
|
||||
merge_type = /obj/item/stack/sheet/mineral/titanium
|
||||
material_type = /datum/material/titanium
|
||||
walltype = /turf/closed/wall/mineral/titanium
|
||||
|
||||
GLOBAL_LIST_INIT(titanium_recipes, list ( \
|
||||
new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20), \
|
||||
@@ -324,6 +333,7 @@ GLOBAL_LIST_INIT(titanium_recipes, list ( \
|
||||
custom_materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT, /datum/material/plasma=MINERAL_MATERIAL_AMOUNT)
|
||||
point_value = 45
|
||||
merge_type = /obj/item/stack/sheet/mineral/plastitanium
|
||||
walltype = /turf/closed/wall/mineral/plastitanium
|
||||
|
||||
/obj/item/stack/sheet/mineral/plastitanium/fifty
|
||||
amount = 50
|
||||
@@ -390,11 +400,14 @@ GLOBAL_LIST_INIT(adamantine_recipes, list(
|
||||
name = "snow"
|
||||
icon_state = "sheet-snow"
|
||||
item_state = "sheet-snow"
|
||||
custom_materials = list(/datum/material/snow = MINERAL_MATERIAL_AMOUNT)
|
||||
singular_name = "snow block"
|
||||
force = 1
|
||||
throwforce = 2
|
||||
grind_results = list(/datum/reagent/consumable/ice = 20)
|
||||
merge_type = /obj/item/stack/sheet/mineral/snow
|
||||
walltype = /turf/closed/wall/mineral/snow
|
||||
material_type = /datum/material/snow
|
||||
|
||||
GLOBAL_LIST_INIT(snow_recipes, list ( \
|
||||
new/datum/stack_recipe("Snow Wall", /turf/closed/wall/mineral/snow, 5, one_per_turf = 1, on_floor = 1), \
|
||||
|
||||
@@ -205,7 +205,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \
|
||||
desc = "This sheet is an alloy of iron and plasma."
|
||||
icon_state = "sheet-plasteel"
|
||||
item_state = "sheet-metal"
|
||||
custom_materials = list(/datum/material/iron=2000, /datum/material/plasma=2000)
|
||||
custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT, /datum/material/plasma=MINERAL_MATERIAL_AMOUNT)
|
||||
throwforce = 10
|
||||
flags_1 = CONDUCT_1
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 80)
|
||||
@@ -289,6 +289,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
|
||||
novariants = TRUE
|
||||
material_type = /datum/material/wood
|
||||
grind_results = list(/datum/reagent/carbon = 20)
|
||||
walltype = /turf/closed/wall/mineral/wood
|
||||
|
||||
/obj/item/stack/sheet/mineral/wood/attackby(obj/item/W, mob/user, params) // NOTE: sheet_types.dm is where the WOOD stack lives. Maybe move this over there.
|
||||
// Taken from /obj/item/stack/rods/attackby in [rods.dm]
|
||||
@@ -344,11 +345,13 @@ GLOBAL_LIST_INIT(bamboo_recipes, list ( \
|
||||
icon_state = "sheet-bamboo"
|
||||
item_state = "sheet-bamboo"
|
||||
icon = 'icons/obj/stack_objects.dmi'
|
||||
custom_materials = list(/datum/material/bamboo = MINERAL_MATERIAL_AMOUNT)
|
||||
throwforce = 15
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0)
|
||||
resistance_flags = FLAMMABLE
|
||||
merge_type = /obj/item/stack/sheet/mineral/bamboo
|
||||
grind_results = list(/datum/reagent/carbon = 5)
|
||||
material_type = /datum/material/bamboo
|
||||
|
||||
/obj/item/stack/sheet/mineral/bamboo/get_main_recipes()
|
||||
. = ..()
|
||||
@@ -513,12 +516,14 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
|
||||
desc = "Large sheets of card, like boxes folded flat."
|
||||
singular_name = "cardboard sheet"
|
||||
icon_state = "sheet-card"
|
||||
custom_materials = list(/datum/material/cardboard = MINERAL_MATERIAL_AMOUNT)
|
||||
item_state = "sheet-card"
|
||||
resistance_flags = FLAMMABLE
|
||||
force = 0
|
||||
throwforce = 0
|
||||
merge_type = /obj/item/stack/sheet/cardboard
|
||||
novariants = TRUE
|
||||
material_type = /datum/material/cardboard
|
||||
|
||||
/obj/item/stack/sheet/cardboard/get_main_recipes()
|
||||
. = ..()
|
||||
@@ -558,10 +563,12 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \
|
||||
icon_state = "sheet-runed"
|
||||
item_state = "sheet-runed"
|
||||
icon = 'icons/obj/stack_objects.dmi'
|
||||
custom_materials = list(/datum/material/runedmetal = MINERAL_MATERIAL_AMOUNT)
|
||||
sheettype = "runed"
|
||||
merge_type = /obj/item/stack/sheet/runed_metal
|
||||
novariants = TRUE
|
||||
grind_results = list(/datum/reagent/iron = 5, /datum/reagent/blood = 15)
|
||||
material_type = /datum/material/runedmetal
|
||||
|
||||
/obj/item/stack/sheet/runed_metal/ratvar_act()
|
||||
new /obj/item/stack/tile/brass(loc, amount)
|
||||
@@ -680,6 +687,7 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
|
||||
icon_state = "sheet-brass"
|
||||
item_state = "sheet-brass"
|
||||
icon = 'icons/obj/stack_objects.dmi'
|
||||
custom_materials = list(/datum/material/bronze = MINERAL_MATERIAL_AMOUNT)
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
throwforce = 10
|
||||
max_amount = 50
|
||||
@@ -690,6 +698,7 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
|
||||
grind_results = list(/datum/reagent/iron = 5, /datum/reagent/copper = 3) //we have no "tin" reagent so this is the closest thing
|
||||
merge_type = /obj/item/stack/tile/bronze
|
||||
tableVariant = /obj/structure/table/bronze
|
||||
material_type = /datum/material/bronze
|
||||
|
||||
/obj/item/stack/tile/bronze/attack_self(mob/living/user)
|
||||
if(is_servant_of_ratvar(user)) //still lets them build with it, just gives a message
|
||||
@@ -737,6 +746,7 @@ GLOBAL_LIST_INIT(bone_recipes, list(
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "bone"
|
||||
item_state = "sheet-bone"
|
||||
custom_materials = list(/datum/material/bone = MINERAL_MATERIAL_AMOUNT)
|
||||
singular_name = "bone"
|
||||
desc = "Someone's been drinking their milk."
|
||||
force = 7
|
||||
@@ -747,6 +757,7 @@ GLOBAL_LIST_INIT(bone_recipes, list(
|
||||
throw_range = 3
|
||||
grind_results = list(/datum/reagent/carbon = 10)
|
||||
merge_type = /obj/item/stack/sheet/bone
|
||||
material_type = /datum/material/bone
|
||||
|
||||
/obj/item/stack/sheet/bone/get_main_recipes()
|
||||
. = ..()
|
||||
@@ -774,6 +785,7 @@ GLOBAL_LIST_INIT(plastic_recipes, list(
|
||||
custom_materials = list(/datum/material/plastic=MINERAL_MATERIAL_AMOUNT)
|
||||
throwforce = 7
|
||||
grind_results = list(/datum/reagent/glitter/white = 60)
|
||||
material_type = /datum/material/plastic
|
||||
merge_type = /obj/item/stack/sheet/plastic
|
||||
|
||||
/obj/item/stack/sheet/plastic/fifty
|
||||
@@ -799,9 +811,11 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra
|
||||
singular_name = "paper frame"
|
||||
icon_state = "sheet-paper"
|
||||
item_state = "sheet-paper"
|
||||
custom_materials = list(/datum/material/paper = MINERAL_MATERIAL_AMOUNT)
|
||||
merge_type = /obj/item/stack/sheet/paperframes
|
||||
resistance_flags = FLAMMABLE
|
||||
merge_type = /obj/item/stack/sheet/paperframes
|
||||
material_type = /datum/material/paper
|
||||
|
||||
/obj/item/stack/sheet/paperframes/get_main_recipes()
|
||||
. = ..()
|
||||
@@ -842,3 +856,55 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra
|
||||
merge_type = /obj/item/stack/sheet/cotton/durathread
|
||||
pull_effort = 70
|
||||
loom_result = /obj/item/stack/sheet/durathread
|
||||
|
||||
/obj/item/stack/sheet/meat
|
||||
name = "meat sheets"
|
||||
desc = "Something's bloody meat compressed into a nice solid sheet"
|
||||
singular_name = "meat sheet"
|
||||
icon_state = "sheet-meat"
|
||||
material_flags = MATERIAL_COLOR
|
||||
custom_materials = list(/datum/material/meat = MINERAL_MATERIAL_AMOUNT)
|
||||
merge_type = /obj/item/stack/sheet/meat
|
||||
material_type = /datum/material/meat
|
||||
material_modifier = 1 //None of that wussy stuff
|
||||
|
||||
/obj/item/stack/sheet/meat/fifty
|
||||
amount = 50
|
||||
/obj/item/stack/sheet/meat/twenty
|
||||
amount = 20
|
||||
/obj/item/stack/sheet/meat/five
|
||||
amount = 5
|
||||
|
||||
/obj/item/stack/sheet/pizza
|
||||
name = "pepperoni sheetzzas"
|
||||
desc = "It's a delicious pepperoni sheetzza!"
|
||||
singular_name = "pepperoni sheetzza"
|
||||
icon_state = "sheet-pizza"
|
||||
custom_materials = list(/datum/material/pizza = MINERAL_MATERIAL_AMOUNT)
|
||||
merge_type = /obj/item/stack/sheet/pizza
|
||||
material_type = /datum/material/pizza
|
||||
material_modifier = 1
|
||||
|
||||
/obj/item/stack/sheet/pizza/fifty
|
||||
amount = 50
|
||||
/obj/item/stack/sheet/pizza/twenty
|
||||
amount = 20
|
||||
/obj/item/stack/sheet/pizza/five
|
||||
amount = 5
|
||||
|
||||
/obj/item/stack/sheet/sandblock
|
||||
name = "blocks of sand"
|
||||
desc = "You're too old to be playing with sandcastles. Now you build... sandstations."
|
||||
singular_name = "block of sand"
|
||||
icon_state = "sheet-sandstone"
|
||||
custom_materials = list(/datum/material/sand = MINERAL_MATERIAL_AMOUNT)
|
||||
merge_type = /obj/item/stack/sheet/sandblock
|
||||
material_type = /datum/material/sand
|
||||
material_modifier = 1
|
||||
|
||||
/obj/item/stack/sheet/sandblock/fifty
|
||||
amount = 50
|
||||
/obj/item/stack/sheet/sandblock/twenty
|
||||
amount = 20
|
||||
/obj/item/stack/sheet/sandblock/five
|
||||
amount = 5
|
||||
|
||||
@@ -10,10 +10,14 @@
|
||||
throw_range = 3
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed")
|
||||
novariants = FALSE
|
||||
mats_per_stack = MINERAL_MATERIAL_AMOUNT
|
||||
var/sheettype = null //this is used for girders in the creation of walls/false walls
|
||||
var/point_value = 0 //turn-in value for the gulag stacker - loosely relative to its rarity
|
||||
var/shard_type // the shard debris typepath left over by solar panels and windows etc.
|
||||
///this is used for girders in the creation of walls/false walls
|
||||
var/sheettype = null
|
||||
///turn-in value for the gulag stacker - loosely relative to its rarity
|
||||
var/point_value = 0
|
||||
/// the shard debris typepath left over by solar panels and windows etc.
|
||||
var/shard_type
|
||||
///What type of wall does this sheet spawn
|
||||
var/walltype
|
||||
|
||||
/obj/item/stack/sheet/Initialize(mapload, new_amount, merge)
|
||||
. = ..()
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
var/merge_type = null // This path and its children should merge with this stack, defaults to src.type
|
||||
var/full_w_class = WEIGHT_CLASS_NORMAL //The weight class the stack should have at amount > 2/3rds max_amount
|
||||
var/novariants = TRUE //Determines whether the item should update it's sprites based on amount.
|
||||
var/mats_per_stack = 0
|
||||
var/list/mats_per_unit //list that tells you how much is in a single unit.
|
||||
///Datum material type that this stack is made of
|
||||
var/material_type
|
||||
//NOTE: When adding grind_results, the amounts should be for an INDIVIDUAL ITEM - these amounts will be multiplied by the stack size in on_grind()
|
||||
@@ -47,8 +47,11 @@
|
||||
if(!merge_type)
|
||||
merge_type = type
|
||||
if(custom_materials && custom_materials.len)
|
||||
mats_per_unit = list()
|
||||
var/in_process_mat_list = custom_materials.Copy()
|
||||
for(var/i in custom_materials)
|
||||
custom_materials[SSmaterials.GetMaterialRef(i)] = mats_per_stack * amount
|
||||
mats_per_unit[SSmaterials.GetMaterialRef(i)] = in_process_mat_list[i]
|
||||
custom_materials[i] *= amount
|
||||
. = ..()
|
||||
if(merge)
|
||||
for(var/obj/item/stack/S in loc)
|
||||
@@ -60,7 +63,7 @@
|
||||
var/datum/material/M = SSmaterials.GetMaterialRef(material_type) //First/main material
|
||||
for(var/i in M.categories)
|
||||
switch(i)
|
||||
if(MAT_CATEGORY_RIGID)
|
||||
if(MAT_CATEGORY_BASE_RECIPES)
|
||||
var/list/temp = SSmaterials.rigid_stack_recipes.Copy()
|
||||
recipes += temp
|
||||
update_weight()
|
||||
@@ -315,10 +318,13 @@
|
||||
if (amount < used)
|
||||
return FALSE
|
||||
amount -= used
|
||||
if(check)
|
||||
zero_amount()
|
||||
for(var/i in custom_materials)
|
||||
custom_materials[i] = amount * mats_per_stack
|
||||
if(check && zero_amount())
|
||||
return TRUE
|
||||
if(length(mats_per_unit))
|
||||
var/temp_materials = custom_materials.Copy()
|
||||
for(var/i in mats_per_unit)
|
||||
temp_materials[i] = mats_per_unit[i] * src.amount
|
||||
set_custom_materials(temp_materials)
|
||||
update_icon()
|
||||
update_weight()
|
||||
return TRUE
|
||||
@@ -350,10 +356,11 @@
|
||||
source.add_charge(amount * cost)
|
||||
else
|
||||
src.amount += amount
|
||||
if(custom_materials && custom_materials.len)
|
||||
for(var/i in custom_materials)
|
||||
custom_materials[SSmaterials.GetMaterialRef(i)] = MINERAL_MATERIAL_AMOUNT * src.amount
|
||||
set_custom_materials() //Refresh
|
||||
if(length(mats_per_unit))
|
||||
var/temp_materials = custom_materials.Copy()
|
||||
for(var/i in mats_per_unit)
|
||||
temp_materials[i] = mats_per_unit[i] * src.amount
|
||||
set_custom_materials(temp_materials)
|
||||
update_icon()
|
||||
update_weight()
|
||||
|
||||
|
||||
@@ -9,16 +9,35 @@
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
max_amount = 60
|
||||
mats_per_stack = 500
|
||||
var/turf_type = null
|
||||
var/mineralType = null
|
||||
novariants = TRUE
|
||||
var/human_maxHealth = 100
|
||||
|
||||
/obj/item/stack/tile/Initialize(mapload, amount)
|
||||
. = ..()
|
||||
pixel_x = rand(-3, 3)
|
||||
pixel_y = rand(-3, 3) //randomize a little
|
||||
|
||||
/obj/item/stack/tile/examine(mob/user)
|
||||
. = ..()
|
||||
if(throwforce && !is_cyborg) //do not want to divide by zero or show the message to borgs who can't throw
|
||||
var/verb
|
||||
switch(CEILING(human_maxHealth / throwforce, 1)) //throws to crit a human
|
||||
if(1 to 3)
|
||||
verb = "superb"
|
||||
if(4 to 6)
|
||||
verb = "great"
|
||||
if(7 to 9)
|
||||
verb = "good"
|
||||
if(10 to 12)
|
||||
verb = "fairly decent"
|
||||
if(13 to 15)
|
||||
verb = "mediocre"
|
||||
if(!verb)
|
||||
return
|
||||
. += "<span class='notice'>Those could work as a [verb] throwing weapon.</span>"
|
||||
|
||||
/obj/item/stack/tile/attackby(obj/item/W, mob/user, params)
|
||||
|
||||
if (istype(W, /obj/item/weldingtool))
|
||||
@@ -470,7 +489,7 @@
|
||||
/obj/item/stack/tile/plasteel
|
||||
name = "floor tile"
|
||||
singular_name = "floor tile"
|
||||
desc = "Those could work as a pretty decent throwing weapon."
|
||||
desc = "The ground you walk on."
|
||||
icon_state = "tile"
|
||||
force = 6
|
||||
custom_materials = list(/datum/material/iron=500)
|
||||
@@ -482,7 +501,15 @@
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/item/stack/tile/plasteel/cyborg
|
||||
desc = "The ground you walk on." //Not the usual floor tile desc as that refers to throwing, Cyborgs can't do that - RR
|
||||
custom_materials = null // All other Borg versions of items have no Metal or Glass - RR
|
||||
is_cyborg = 1
|
||||
cost = 125
|
||||
|
||||
/obj/item/stack/tile/material
|
||||
name = "floor tile"
|
||||
singular_name = "floor tile"
|
||||
desc = "The ground you walk on."
|
||||
throwforce = 10
|
||||
icon_state = "material_tile"
|
||||
turf_type = /turf/open/floor/material
|
||||
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
|
||||
|
||||
@@ -444,4 +444,22 @@
|
||||
STR.max_combined_w_class = 30
|
||||
STR.max_items = 3
|
||||
STR.display_numerical_stacking = FALSE
|
||||
STR.can_hold = typecacheof(list(/obj/item/ammo_box/magazine, /obj/item/ammo_casing))
|
||||
STR.can_hold = typecacheof(list(/obj/item/ammo_box/magazine, /obj/item/ammo_casing))
|
||||
|
||||
/obj/item/storage/bag/material
|
||||
name = "material pouch"
|
||||
desc = "A pouch for sheets and RCD ammunition that manages to hang where you would normally put things in your pocket."
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "materialpouch"
|
||||
slot_flags = ITEM_SLOT_POCKET
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/storage/bag/material/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_w_class = WEIGHT_CLASS_NORMAL
|
||||
STR.max_combined_w_class = INFINITY
|
||||
STR.max_items = 2
|
||||
STR.display_numerical_stacking = TRUE
|
||||
STR.can_hold = typecacheof(list(/obj/item/rcd_ammo, /obj/item/stack/sheet))
|
||||
@@ -106,10 +106,10 @@
|
||||
/obj/item/storage/briefcase/medical
|
||||
name = "medical briefcase"
|
||||
icon_state = "medbriefcase"
|
||||
desc = "A white with a blue cross brieface, this is ment to hold medical gear that would not be able to normally fit in a bag."
|
||||
desc = "A white with a blue cross brieface, this is meant to hold medical gear that would not be able to normally fit in a bag."
|
||||
|
||||
/obj/item/storage/briefcase/medical/PopulateContents()
|
||||
new /obj/item/clothing/neck/stethoscope(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
..() //In case of paperwork
|
||||
..() //Incase of paperwork
|
||||
|
||||
|
||||
@@ -370,6 +370,14 @@
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/breast_enlargement(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/neurine
|
||||
name = "bottle of neurine pills"
|
||||
desc = "Contains pills to treat non-severe mental traumas."
|
||||
|
||||
/obj/item/storage/pill_bottle/neurine/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/neurine(src)
|
||||
|
||||
/////////////
|
||||
//Organ Box//
|
||||
/////////////
|
||||
|
||||
@@ -25,7 +25,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
|
||||
icon_state = "toolbox_default"
|
||||
item_state = "toolbox_default"
|
||||
can_rubberify = FALSE
|
||||
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS | MATERIAL_EFFECTS
|
||||
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
|
||||
|
||||
/obj/item/storage/toolbox/Initialize(mapload)
|
||||
if(has_latches)
|
||||
|
||||
@@ -103,6 +103,8 @@
|
||||
take_damage(400, BRUTE, "melee", 0, get_dir(src, B))
|
||||
|
||||
/obj/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) //used by attack_alien, attack_animal, and attack_slime
|
||||
if(SEND_SIGNAL(src, COMSIG_OBJ_ATTACK_GENERIC, user, damage_amount, damage_type, damage_flag, sound_effect, armor_penetration) & COMPONENT_STOP_GENERIC_ATTACK)
|
||||
return FALSE
|
||||
user.do_attack_animation(src)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
return take_damage(damage_amount, damage_type, damage_flag, sound_effect, get_dir(src, user), armor_penetration)
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
///Material chair
|
||||
/obj/structure/chair/greyscale
|
||||
icon_state = "chair_greyscale"
|
||||
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS | MATERIAL_EFFECTS
|
||||
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
|
||||
item_chair = /obj/item/chair/greyscale
|
||||
buildstacktype = null //Custom mats handle this
|
||||
|
||||
@@ -384,7 +384,7 @@
|
||||
/obj/item/chair/greyscale
|
||||
icon_state = "chair_greyscale_toppled"
|
||||
item_state = "chair_greyscale"
|
||||
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS | MATERIAL_EFFECTS
|
||||
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
|
||||
origin_type = /obj/structure/chair/greyscale
|
||||
|
||||
/obj/item/chair/stool
|
||||
|
||||
@@ -170,7 +170,7 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(S.sheettype && S.sheettype != "runed")
|
||||
if(S.sheettype != "runed")
|
||||
var/M = S.sheettype
|
||||
if(state == GIRDER_DISPLACED)
|
||||
var/F = text2path("/obj/structure/falsewall/[M]")
|
||||
@@ -188,9 +188,13 @@
|
||||
transfer_fingerprints_to(FW)
|
||||
qdel(src)
|
||||
else
|
||||
var/F = text2path("/turf/closed/wall/mineral/[M]")
|
||||
var/list/material_list
|
||||
var/F = S.walltype
|
||||
if(!F)
|
||||
return
|
||||
F = /turf/closed/wall/material
|
||||
if(S.material_type)
|
||||
material_list = list()
|
||||
material_list[SSmaterials.GetMaterialRef(S.material_type)] = MINERAL_MATERIAL_AMOUNT * 2
|
||||
if(S.get_amount() < 2)
|
||||
to_chat(user, "<span class='warning'>You need at least two sheets to add plating!</span>")
|
||||
return
|
||||
@@ -201,7 +205,9 @@
|
||||
S.use(2)
|
||||
to_chat(user, "<span class='notice'>You add the plating.</span>")
|
||||
var/turf/T = get_turf(src)
|
||||
T.PlaceOnTop(F)
|
||||
var/turf/newturf = T.PlaceOnTop(F)
|
||||
if(material_list)
|
||||
newturf.set_custom_materials(material_list)
|
||||
transfer_fingerprints_to(T)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user