This commit is contained in:
Ghommie
2020-06-30 00:49:06 +02:00
303 changed files with 6981 additions and 73525 deletions
File diff suppressed because it is too large Load Diff
+222 -182
View File
@@ -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
+55 -66
View File
@@ -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
+28 -92
View File
@@ -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
+72 -89
View File
@@ -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
File diff suppressed because it is too large Load Diff
+9 -11
View File
@@ -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
+8 -11
View File
@@ -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) = {"
+16 -1
View File
@@ -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
+1
View File
@@ -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
+8 -3
View File
@@ -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)
+5 -1
View File
@@ -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)
+9
View File
@@ -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)
))
+2
View File
@@ -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))
+6 -2
View File
@@ -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"
+1
View File
@@ -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"
+1
View File
@@ -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
+1 -1
View File
@@ -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
+7 -1
View File
@@ -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"
+8
View File
@@ -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"
+1 -1
View File
@@ -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)
+5
View File
@@ -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)
+1 -1
View File
@@ -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++)
+2
View File
@@ -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)
+2 -1
View File
@@ -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()
+6 -1
View File
@@ -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))
+1 -1
View File
@@ -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
+2 -1
View File
@@ -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
+27 -9
View File
@@ -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
+29 -1
View File
@@ -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
+55
View File
@@ -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."
+2 -1
View File
@@ -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
+244
View File
@@ -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)
+3 -2
View File
@@ -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)
+10 -3
View File
@@ -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)
+5 -5
View File
@@ -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
+5 -2
View File
@@ -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)
+9 -3
View File
@@ -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)
+56 -6
View File
@@ -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
+144 -29
View File
@@ -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"
+32
View File
@@ -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"))
+30
View File
@@ -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
View File
@@ -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
+7
View File
@@ -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"
+5 -1
View File
@@ -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"
+63 -3
View File
@@ -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
+85 -20
View File
@@ -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
+13 -15
View File
@@ -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("")
+5 -5
View File
@@ -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]
+2 -1
View File
@@ -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
+2 -1
View File
@@ -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
+2 -1
View File
@@ -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)
..()
+2
View File
@@ -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
+2
View File
@@ -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
+7 -6
View File
@@ -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)
+5 -4
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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."
+5 -18
View File
@@ -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
+12 -8
View File
@@ -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)
+13 -4
View File
@@ -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)]"
+1 -1
View File
@@ -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
+20 -6
View File
@@ -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)
+44
View File
@@ -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
+1
View File
@@ -26,6 +26,7 @@
"Firefighter",
"Odysseus",
"Gygax",
"Medical-Spec Gygax",
"Durand",
"H.O.N.K",
"Phazon",
+298
View File
@@ -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(
+41
View File
@@ -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
+1 -1
View File
@@ -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"])
+18
View File
@@ -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"
+34
View File
@@ -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. (&copy; 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,
+1
View File
@@ -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"
+2 -1
View File
@@ -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)
+1 -6
View File
@@ -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 "
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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
-1
View File
@@ -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)
. = ..()
+18 -11
View File
@@ -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
+19 -1
View File
@@ -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))
+2 -2
View File
@@ -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//
/////////////
+1 -1
View File
@@ -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)
+2
View File
@@ -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
+10 -4
View File
@@ -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