Merge branch 'master' of github.com:Citadel-Station-13/Citadel-Station-13 into chemmaster

This commit is contained in:
Linzolle
2020-06-23 20:49:12 -05:00
159 changed files with 72665 additions and 67776 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+22 -34
View File
@@ -666,7 +666,7 @@
pixel_x = 24;
specialfunctions = 4
},
/obj/item/bedsheet/red,
/obj/effect/spawner/lootdrop/bedsheet,
/turf/open/floor/wood,
/area/awaymission/beach)
"bU" = (
@@ -799,9 +799,7 @@
/turf/open/floor/wood,
/area/awaymission/beach)
"cn" = (
/obj/machinery/vending/boozeomat{
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one. May not work for bartenders that don't have Nanotrasen bank accounts."
},
/obj/machinery/vending/boozeomat,
/turf/open/floor/wood,
/area/awaymission/beach)
"co" = (
@@ -897,9 +895,7 @@
/area/awaymission/beach)
"cD" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/rag{
pixel_y = 7
},
/obj/item/reagent_containers/rag,
/turf/open/floor/wood,
/area/awaymission/beach)
"cE" = (
@@ -1081,14 +1077,6 @@
/obj/item/clothing/glasses/heat,
/turf/open/floor/plating/beach/sand,
/area/awaymission/beach)
"iy" = (
/obj/item/toy/seashell,
/turf/open/floor/plating/beach/coastline_t,
/area/awaymission/beach)
"MD" = (
/obj/item/toy/seashell,
/turf/open/floor/plating/beach/sand,
/area/awaymission/beach)
(1,1,1) = {"
aa
@@ -4660,9 +4648,9 @@ ac
aw
af
ay
MD
ak
MD
ak
ak
aT
ao
aY
@@ -4766,7 +4754,7 @@ ac
aw
af
ay
MD
ak
ak
ak
ak
@@ -4875,7 +4863,7 @@ ay
ak
ak
ak
MD
ak
ak
ak
ak
@@ -5216,7 +5204,7 @@ aY
ae
aw
ag
MD
ak
aZ
ak
ak
@@ -5317,7 +5305,7 @@ ak
ak
ak
ak
MD
ak
aT
aj
aj
@@ -5328,7 +5316,7 @@ ak
ak
ak
ak
MD
ak
aT
ao
ar
@@ -6294,7 +6282,7 @@ ak
ak
ak
ak
iy
ap
ar
ac
ac
@@ -6474,7 +6462,7 @@ ac
ac
ad
ag
MD
ak
ak
ak
ak
@@ -6822,7 +6810,7 @@ cl
bd
bd
bd
cD
cC
cH
ba
ak
@@ -6929,7 +6917,7 @@ cm
bd
bd
bd
cC
cD
cH
ba
ak
@@ -8956,7 +8944,7 @@ ak
ak
ak
ak
MD
ak
ak
ak
cu
@@ -10328,7 +10316,7 @@ ac
ac
aw
ag
MD
ak
ak
ak
ak
@@ -10436,7 +10424,7 @@ ad
af
ay
ak
MD
ak
ak
ak
ak
@@ -10574,7 +10562,7 @@ ak
ak
cO
ak
iy
ap
ar
ac
ac
@@ -10787,7 +10775,7 @@ ak
ak
ak
aK
MD
ak
ap
ar
ac
@@ -10970,7 +10958,7 @@ ac
ac
ax
ag
MD
ak
ak
ak
ak
@@ -11000,7 +10988,7 @@ ak
ak
ak
ak
MD
ak
bo
aq
ar
@@ -15007,7 +14995,7 @@ ad
ag
al
ak
MD
ak
ap
ar
ab
@@ -18,7 +18,6 @@
/area/awaymission/moonoutpost19/hive)
"ae" = (
/obj/machinery/computer/arcade{
icon_state = "arcade";
dir = 1
},
/turf/open/floor/plasteel/dark,
@@ -359,7 +358,6 @@
/mob/living/simple_animal/hostile/alien/queen/large{
desc = "A gigantic alien who is in charge of the hive and all of its loyal servants.";
name = "alien queen";
pixel_x = -16;
plants_off = 1
},
/turf/open/floor/plating/asteroid{
@@ -435,9 +433,7 @@
},
/area/awaymission/moonoutpost19/syndicate)
"aZ" = (
/obj/effect/turf_decal/tile/red{
dir = 2
},
/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel/dark{
heat_capacity = 1e+006
},
@@ -490,9 +486,7 @@
/area/awaymission/moonoutpost19/syndicate)
"bh" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/red{
dir = 2
},
/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel/dark{
heat_capacity = 1e+006
},
@@ -915,11 +909,9 @@
/area/awaymission/moonoutpost19/syndicate)
"bT" = (
/obj/machinery/power/smes{
charge = 0;
input_level = 10000;
inputting = 0;
output_level = 15000;
outputting = 1
output_level = 15000
},
/obj/structure/cable{
icon_state = "0-8"
@@ -961,7 +953,6 @@
/area/awaymission/moonoutpost19/hive)
"bX" = (
/obj/machinery/conveyor{
dir = 2;
id = "awaysyndie"
},
/obj/effect/turf_decal/stripes/line{
@@ -1334,8 +1325,7 @@
/area/awaymission/moonoutpost19/syndicate)
"cC" = (
/obj/machinery/mineral/processing_unit{
dir = 1;
output_dir = 2
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -1426,8 +1416,6 @@
"cK" = (
/obj/structure/cable,
/obj/machinery/power/apc/highcap/fifteen_k{
dir = 2;
locked = 1;
name = "Worn-out APC";
pixel_y = -25;
req_access = null;
@@ -1472,12 +1460,9 @@
"cN" = (
/obj/structure/cable,
/obj/machinery/power/port_gen/pacman{
desc = "A portable generator for emergency backup power.";
name = "P.A.C.M.A.N.-type portable generator"
},
/obj/effect/turf_decal/stripes/line{
dir = 2
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating{
heat_capacity = 1e+006
},
@@ -1486,12 +1471,9 @@
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/power/port_gen/pacman/super{
desc = "A portable generator for emergency backup power.";
name = "S.U.P.E.R.P.A.C.M.A.N.-type portable generator"
},
/obj/effect/turf_decal/stripes/line{
dir = 2
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating{
heat_capacity = 1e+006
},
@@ -1823,7 +1805,6 @@
/obj/structure/closet/secure_closet{
desc = "It's a secure locker for personnel. The first card swiped gains control.";
icon_state = "cabinet";
locked = 1;
name = "personal closet";
req_access_txt = "150"
},
@@ -2036,8 +2017,7 @@
/turf/open/floor/plating{
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
heat_capacity = 1e+006;
icon_plating = "asteroidplating";
icon_state = "asteroidplating";
icon_state = "platingdmg1";
temperature = 251
},
/area/awaymission/moonoutpost19/syndicate)
@@ -2059,23 +2039,11 @@
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating{
/turf/open/floor/plating/asteroid{
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
heat_capacity = 1e+006;
icon_plating = "asteroidplating";
icon_state = "asteroidplating";
temperature = 251
heat_capacity = 1e+006
},
/area/awaymission/moonoutpost19/syndicate)
"dM" = (
/turf/open/floor/plating{
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
heat_capacity = 1e+006;
icon_plating = "asteroidplating";
icon_state = "asteroidplating";
temperature = 251
},
/area/awaymission/moonoutpost19/main)
"dN" = (
/obj/item/stack/ore/iron{
pixel_x = -7;
@@ -2400,14 +2368,12 @@
/area/awaymission/moonoutpost19/research)
"eK" = (
/turf/open/floor/plasteel/white/side{
dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/moonoutpost19/research)
"eL" = (
/obj/structure/alien/weeds,
/turf/open/floor/plasteel/white/side{
dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/moonoutpost19/research)
@@ -2467,7 +2433,6 @@
/area/awaymission/moonoutpost19/research)
"eS" = (
/obj/machinery/power/port_gen/pacman{
desc = "A portable generator for emergency backup power.";
name = "P.A.C.M.A.N.-type portable generator"
},
/obj/structure/cable{
@@ -2479,7 +2444,6 @@
/area/awaymission/moonoutpost19/research)
"eT" = (
/obj/machinery/power/port_gen/pacman/super{
desc = "A portable generator for emergency backup power.";
name = "S.U.P.E.R.P.A.C.M.A.N.-type portable generator"
},
/obj/structure/cable{
@@ -2525,8 +2489,7 @@
charge = 1.5e+006;
input_level = 10000;
inputting = 0;
output_level = 15000;
outputting = 1
output_level = 15000
},
/turf/open/floor/plating{
heat_capacity = 1e+006
@@ -2619,9 +2582,7 @@
icon_state = "2-8"
},
/obj/structure/alien/weeds,
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -2655,7 +2616,6 @@
/area/awaymission/moonoutpost19/research)
"fh" = (
/obj/machinery/firealarm{
dir = 2;
pixel_y = 24
},
/obj/structure/table,
@@ -2801,9 +2761,7 @@
icon_state = "1-4"
},
/obj/structure/alien/weeds,
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -3041,7 +2999,6 @@
"fT" = (
/obj/structure/closet/secure_closet{
icon_state = "sec";
locked = 1;
name = "security officer's locker";
req_access_txt = "201"
},
@@ -3109,9 +3066,7 @@
icon_state = "1-2"
},
/obj/structure/alien/weeds,
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -3241,9 +3196,7 @@
pixel_x = 28
},
/obj/structure/alien/weeds,
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -3471,9 +3424,7 @@
req_access = null;
start_charge = 100
},
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -3626,9 +3577,7 @@
pixel_x = 23;
req_access = null
},
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -3712,7 +3661,6 @@
"hb" = (
/obj/machinery/light{
active_power_usage = 0;
dir = 2;
icon_state = "tube-broken";
status = 2
},
@@ -3826,7 +3774,6 @@
req_access_txt = "201"
},
/turf/open/floor/plasteel/white/side{
dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/moonoutpost19/research)
@@ -3842,7 +3789,6 @@
status = 2
},
/turf/open/floor/plasteel/white/side{
dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/moonoutpost19/research)
@@ -3867,7 +3813,6 @@
"hq" = (
/obj/structure/closet/secure_closet{
icon_state = "rd";
locked = 1;
name = "research director's locker";
req_access_txt = "201"
},
@@ -3885,7 +3830,6 @@
pixel_y = 2
},
/obj/machinery/firealarm{
dir = 2;
pixel_y = 24
},
/turf/open/floor/plasteel/cafeteria{
@@ -3935,9 +3879,7 @@
},
/area/awaymission/moonoutpost19/research)
"hw" = (
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -4027,7 +3969,6 @@
},
/obj/machinery/light/small{
active_power_usage = 0;
dir = 2;
icon_state = "bulb-broken";
status = 2
},
@@ -4303,7 +4244,6 @@
/obj/structure/closet/l3closet,
/obj/machinery/light/small{
active_power_usage = 0;
dir = 2;
icon_state = "bulb-broken";
status = 2
},
@@ -4453,7 +4393,6 @@
},
/obj/machinery/shower{
dir = 4;
icon_state = "shower";
name = "emergency shower"
},
/obj/effect/turf_decal/stripes/line{
@@ -4581,7 +4520,6 @@
},
/obj/machinery/light/small{
active_power_usage = 0;
dir = 2;
icon_state = "bulb-broken";
status = 2
},
@@ -4623,9 +4561,7 @@
/area/awaymission/moonoutpost19/research)
"iL" = (
/obj/machinery/light/small,
/obj/effect/turf_decal/stripes/line{
dir = 2
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -4720,9 +4656,7 @@
/turf/closed/wall/rust,
/area/awaymission/moonoutpost19/arrivals)
"iU" = (
/obj/machinery/vending/boozeomat{
req_access_txt = "0"
},
/obj/machinery/vending/boozeomat,
/turf/open/floor/plasteel/cafeteria{
dir = 5
},
@@ -5680,9 +5614,7 @@
/obj/machinery/door/firedoor/closed{
opacity = 0
},
/obj/effect/turf_decal/tile/neutral{
dir = 2
},
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -5830,9 +5762,7 @@
/obj/structure/chair{
dir = 8
},
/obj/effect/turf_decal/stripes/corner{
dir = 2
},
/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -6048,9 +5978,7 @@
},
/area/awaymission/moonoutpost19/arrivals)
"lG" = (
/obj/effect/turf_decal/stripes/corner{
dir = 2
},
/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -6224,9 +6152,7 @@
},
/area/awaymission/moonoutpost19/arrivals)
"mh" = (
/obj/effect/turf_decal/tile/neutral{
dir = 2
},
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
heat_capacity = 1e+006;
@@ -6237,7 +6163,6 @@
/obj/machinery/portable_atmospherics/canister/air,
/obj/effect/decal/cleanable/dirt,
/obj/structure/window{
icon_state = "window";
dir = 1
},
/turf/open/floor/plating{
@@ -6271,7 +6196,6 @@
/area/awaymission/moonoutpost19/arrivals)
"mm" = (
/obj/structure/closet/secure_closet{
icon_state = "secure";
locked = 0;
name = "kitchen Cabinet";
req_access_txt = "201"
@@ -6375,9 +6299,7 @@
/area/awaymission/moonoutpost19/arrivals)
"mx" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/neutral{
dir = 2
},
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
heat_capacity = 1e+006;
@@ -6786,18 +6708,6 @@
heat_capacity = 1e+006
},
/area/awaymission/moonoutpost19/arrivals)
"nu" = (
/obj/machinery/light/small{
dir = 8
},
/turf/open/floor/plating{
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
heat_capacity = 1e+006;
icon_plating = "asteroidplating";
icon_state = "asteroidplating";
temperature = 251
},
/area/awaymission/moonoutpost19/arrivals)
"nw" = (
/obj/machinery/washing_machine,
/obj/effect/turf_decal/tile/blue{
@@ -6842,9 +6752,7 @@
pixel_x = 23;
req_access = null
},
/obj/effect/turf_decal/tile/neutral{
dir = 2
},
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
heat_capacity = 1e+006;
@@ -7088,18 +6996,6 @@
heat_capacity = 1e+006
},
/area/awaymission/moonoutpost19/arrivals)
"nW" = (
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plating{
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
heat_capacity = 1e+006;
icon_plating = "asteroidplating";
icon_state = "asteroidplating";
temperature = 251
},
/area/awaymission/moonoutpost19/arrivals)
"nX" = (
/obj/structure/chair/comfy/black{
dir = 8
@@ -7117,9 +7013,7 @@
dir = 4
},
/obj/effect/decal/cleanable/generic,
/obj/effect/turf_decal/tile/neutral{
dir = 2
},
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
heat_capacity = 1e+006;
@@ -7128,12 +7022,9 @@
/area/awaymission/moonoutpost19/arrivals)
"nZ" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating{
/turf/open/floor/plating/asteroid{
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
heat_capacity = 1e+006;
icon_plating = "asteroidplating";
icon_state = "asteroidplating";
temperature = 251
heat_capacity = 1e+006
},
/area/awaymission/moonoutpost19/main)
"oa" = (
@@ -7163,12 +7054,9 @@
/obj/structure/disposalpipe/trunk{
dir = 1
},
/turf/open/floor/plating{
/turf/open/floor/plating/asteroid{
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251";
heat_capacity = 1e+006;
icon_plating = "asteroidplating";
icon_state = "asteroidplating";
temperature = 251
heat_capacity = 1e+006
},
/area/awaymission/moonoutpost19/main)
"od" = (
@@ -7203,7 +7091,6 @@
/obj/structure/window/reinforced,
/obj/structure/closet/secure_closet{
icon_state = "science";
locked = 1;
name = "scientist's locker";
req_access_txt = "201"
},
@@ -36454,7 +36341,7 @@ hI
hI
hI
hI
nW
lj
ba
ba
ba
@@ -36711,7 +36598,7 @@ zZ
nA
nK
Wf
dM
ba
ba
ba
ba
@@ -36968,7 +36855,7 @@ zZ
lM
lN
Wf
dM
ba
ba
ba
ba
@@ -37225,7 +37112,7 @@ hI
nB
nL
hI
nW
lj
ba
ba
ba
@@ -40774,7 +40661,7 @@ du
dx
dC
dI
dM
ba
ba
ba
ba
@@ -41594,13 +41481,13 @@ hJ
lM
lN
hI
dM
ba
ba
ba
dM
dM
dM
ba
ba
ba
ba
od
ba
ba
@@ -41857,7 +41744,7 @@ nZ
nZ
nZ
oc
dM
ba
ba
ba
ba
@@ -42108,13 +41995,13 @@ hI
nJ
nR
hJ
dM
ba
ba
ba
dM
dM
dM
ba
ba
ba
ba
ba
oe
ba
@@ -42872,9 +42759,9 @@ lN
hJ
ba
ba
dM
dM
nu
ba
ba
mO
ba
ba
ba
@@ -261,9 +261,7 @@
/area/awaymission/undergroundoutpost45/central)
"aO" = (
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/tile/neutral{
dir = 2
},
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -423,7 +421,6 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/secure_closet{
icon_state = "sec";
locked = 1;
name = "security officer's locker";
req_access_txt = "201"
},
@@ -626,8 +623,7 @@
/area/awaymission/undergroundoutpost45/central)
"bB" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5;
level = 1
dir = 5
},
/obj/effect/turf_decal/tile/neutral{
dir = 4
@@ -652,8 +648,7 @@
/area/awaymission/undergroundoutpost45/central)
"bD" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10;
level = 1
dir = 10
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -811,8 +806,7 @@
/area/awaymission/undergroundoutpost45/central)
"bV" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10;
level = 1
dir = 10
},
/turf/closed/wall,
/area/awaymission/undergroundoutpost45/central)
@@ -1260,7 +1254,6 @@
},
/obj/machinery/portable_atmospherics/scrubber,
/obj/structure/window{
icon_state = "window";
dir = 8
},
/turf/open/floor/plating{
@@ -1282,7 +1275,6 @@
},
/obj/structure/reagent_dispensers/fueltank,
/obj/structure/window{
icon_state = "window";
dir = 4
},
/turf/open/floor/plating{
@@ -1291,8 +1283,7 @@
/area/awaymission/undergroundoutpost45/central)
"cV" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10;
level = 1
dir = 10
},
/turf/closed/wall/rust,
/area/awaymission/undergroundoutpost45/central)
@@ -1428,7 +1419,6 @@
/area/awaymission/undergroundoutpost45/central)
"dm" = (
/obj/machinery/firealarm{
dir = 2;
pixel_y = 24
},
/turf/open/floor/plasteel{
@@ -1448,9 +1438,7 @@
layer = 5
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/green{
dir = 2
},
/obj/effect/turf_decal/tile/green,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -1729,7 +1717,6 @@
dir = 4
},
/obj/machinery/firealarm{
dir = 2;
pixel_y = 24
},
/obj/effect/turf_decal/tile/green{
@@ -1858,9 +1845,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
/obj/effect/turf_decal/tile/neutral{
dir = 2
},
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -2125,15 +2110,6 @@
icon_state = "platingdmg1"
},
/area/awaymission/undergroundoutpost45/central)
"eu" = (
/turf/open/floor/plating{
initial_gas_mix = "co2=173.4;n2=135.1;plasma=229.8;TEMP=351.9";
heat_capacity = 1e+006;
icon_plating = "asteroidplating";
icon_state = "asteroidplating";
temperature = 363.9
},
/area/awaymission/undergroundoutpost45/caves)
"ev" = (
/obj/item/clothing/under/misc/pj/red,
/obj/structure/closet/secure_closet{
@@ -2328,9 +2304,7 @@
/obj/machinery/door/firedoor,
/obj/item/folder/red,
/obj/machinery/door/window/southleft{
base_state = "left";
dir = 8;
icon_state = "left";
name = "Security Checkpoint";
req_access_txt = "201"
},
@@ -2369,9 +2343,7 @@
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
/obj/machinery/door/window/southleft{
base_state = "left";
dir = 4;
icon_state = "left";
name = "Hydroponics Desk";
req_access_txt = "201"
},
@@ -2508,9 +2480,7 @@
},
/area/awaymission/undergroundoutpost45/central)
"fb" = (
/obj/effect/turf_decal/tile/green{
dir = 2
},
/obj/effect/turf_decal/tile/green,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -2568,7 +2538,6 @@
network = list("uo45")
},
/obj/machinery/power/apc/highcap/fifteen_k{
dir = 2;
locked = 0;
name = "Hydroponics APC";
pixel_y = -25;
@@ -3055,15 +3024,13 @@
/area/awaymission/undergroundoutpost45/central)
"gc" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5;
level = 1
dir = 5
},
/turf/closed/wall/r_wall,
/area/awaymission/undergroundoutpost45/central)
"gd" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10;
level = 1
dir = 10
},
/turf/closed/wall/r_wall,
/area/awaymission/undergroundoutpost45/central)
@@ -3319,7 +3286,6 @@
amount = 23
},
/turf/open/floor/plasteel/white/side{
dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/research)
@@ -3327,7 +3293,6 @@
/obj/structure/table,
/obj/item/storage/toolbox/mechanical,
/turf/open/floor/plasteel/white/side{
dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/research)
@@ -3452,7 +3417,6 @@
},
/obj/machinery/camera{
c_tag = "Research Lab";
dir = 2;
network = list("uo45","uo45r")
},
/turf/open/floor/plasteel/white{
@@ -3461,7 +3425,6 @@
/area/awaymission/undergroundoutpost45/research)
"gZ" = (
/obj/machinery/firealarm{
dir = 2;
pixel_y = 24
},
/turf/open/floor/plasteel/white{
@@ -3614,9 +3577,7 @@
},
/area/awaymission/undergroundoutpost45/crew_quarters)
"ho" = (
/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
@@ -4531,8 +4492,7 @@
/area/awaymission/undergroundoutpost45/gateway)
"iX" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10;
level = 1
dir = 10
},
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
@@ -4626,7 +4586,6 @@
/area/awaymission/undergroundoutpost45/crew_quarters)
"jf" = (
/obj/structure/closet/secure_closet{
icon_state = "secure";
locked = 0;
name = "kitchen Cabinet";
req_access_txt = "201"
@@ -5169,7 +5128,6 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/secure_closet{
icon_state = "rd";
locked = 1;
name = "research director's locker";
req_access_txt = "201"
},
@@ -5934,7 +5892,6 @@
},
/obj/machinery/camera{
c_tag = "Gateway Ready Room";
dir = 2;
network = list("uo45","uo45r")
},
/turf/open/floor/plasteel{
@@ -5971,7 +5928,6 @@
/obj/item/reagent_containers/spray/pepper,
/obj/structure/closet/secure_closet{
icon_state = "sec";
locked = 1;
name = "security officer's locker";
req_access_txt = "201"
},
@@ -6029,9 +5985,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6041,9 +5995,7 @@
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6064,9 +6016,7 @@
dir = 1;
network = list("uo45","uo45r")
},
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6081,9 +6031,7 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
},
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6096,9 +6044,7 @@
dir = 4
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6115,9 +6061,7 @@
name = "Research Division Access";
req_access_txt = "201"
},
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6130,9 +6074,7 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6151,9 +6093,7 @@
dir = 1
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6171,9 +6111,7 @@
pixel_y = -24
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6183,7 +6121,6 @@
icon_state = "0-8"
},
/obj/machinery/power/apc/highcap/fifteen_k{
dir = 2;
locked = 0;
name = "UO45 Research Division APC";
pixel_y = -25;
@@ -6196,9 +6133,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6211,9 +6146,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6234,9 +6167,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6245,17 +6176,13 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/research)
"lM" = (
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6270,9 +6197,7 @@
dir = 1;
network = list("uo45","uo45r")
},
/obj/effect/turf_decal/tile/purple{
dir = 2
},
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6408,7 +6333,6 @@
},
/obj/machinery/camera{
c_tag = "Engineering Secure Storage";
dir = 2;
network = list("uo45")
},
/turf/open/floor/plating{
@@ -6472,7 +6396,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/portable_atmospherics/scrubber,
/obj/structure/window{
icon_state = "window";
dir = 4
},
/obj/effect/decal/cleanable/dirt,
@@ -6547,9 +6470,7 @@
pixel_y = -32
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/line{
dir = 2
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/white{
heat_capacity = 1e+006
},
@@ -6744,7 +6665,6 @@
"mE" = (
/obj/structure/cable,
/obj/machinery/power/apc/highcap/fifteen_k{
dir = 2;
locked = 0;
name = "UO45 Gateway APC";
pixel_y = -25;
@@ -7392,9 +7312,7 @@
/obj/structure/cable{
icon_state = "2-4"
},
/obj/effect/turf_decal/stripes/corner{
dir = 2
},
/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/plasteel/dark{
heat_capacity = 1e+006
},
@@ -7409,9 +7327,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/turf_decal/stripes/line{
dir = 2
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/dark{
heat_capacity = 1e+006
},
@@ -7495,7 +7411,6 @@
},
/obj/machinery/computer/security/telescreen{
desc = "Used for monitoring the research division and the labs within.";
dir = 2;
name = "research monitor";
network = list("uo45r")
},
@@ -7687,7 +7602,6 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/obj/machinery/camera{
c_tag = "Dormitories";
dir = 2;
network = list("uo45")
},
/obj/effect/turf_decal/tile/neutral{
@@ -7943,8 +7857,7 @@
charge = 1.5e+006;
input_level = 10000;
inputting = 0;
output_level = 7000;
outputting = 1
output_level = 7000
},
/turf/open/floor/plating{
heat_capacity = 1e+006
@@ -7956,8 +7869,7 @@
charge = 1.5e+006;
input_level = 30000;
inputting = 0;
output_level = 7000;
outputting = 1
output_level = 7000
},
/turf/open/floor/plating{
heat_capacity = 1e+006
@@ -8091,9 +8003,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 2
},
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -8121,9 +8031,7 @@
"oJ" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/neutral{
dir = 2
},
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -8164,9 +8072,7 @@
/area/awaymission/undergroundoutpost45/crew_quarters)
"oM" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/effect/turf_decal/tile/neutral{
dir = 2
},
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -8281,7 +8187,6 @@
dir = 1
},
/obj/machinery/power/port_gen/pacman{
desc = "A portable generator for emergency backup power.";
name = "P.A.C.M.A.N.-type portable generator"
},
/obj/structure/cable{
@@ -8296,7 +8201,6 @@
dir = 1
},
/obj/machinery/power/port_gen/pacman/super{
desc = "A portable generator for emergency backup power.";
name = "S.U.P.E.R.P.A.C.M.A.N.-type portable generator"
},
/obj/item/wrench,
@@ -8315,7 +8219,6 @@
dir = 1
},
/obj/machinery/power/port_gen/pacman{
desc = "A portable generator for emergency backup power.";
name = "P.A.C.M.A.N.-type portable generator"
},
/obj/structure/cable{
@@ -8676,7 +8579,6 @@
/area/awaymission/undergroundoutpost45/engineering)
"pE" = (
/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos{
dir = 2;
icon_state = "in";
id_tag = "UO45_air_out";
name = "air out"
@@ -8688,7 +8590,6 @@
/area/awaymission/undergroundoutpost45/engineering)
"pF" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos{
dir = 2;
id = "UO45_air_in"
},
/turf/open/floor/engine/air,
@@ -9012,7 +8913,6 @@
/obj/item/clothing/glasses/hud/health,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/white/corner{
dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/research)
@@ -9025,7 +8925,6 @@
/obj/item/hand_labeler,
/obj/item/clothing/neck/stethoscope,
/turf/open/floor/plasteel/white/side{
dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/research)
@@ -9248,7 +9147,6 @@
},
/obj/machinery/camera{
c_tag = "Atmospherics";
dir = 2;
network = list("uo45")
},
/obj/structure/table,
@@ -9257,7 +9155,6 @@
pixel_y = 5
},
/obj/machinery/firealarm{
dir = 2;
pixel_y = 24
},
/obj/item/multitool,
@@ -9303,21 +9200,15 @@
dir = 10
},
/obj/machinery/portable_atmospherics/scrubber,
/obj/effect/turf_decal/bot{
dir = 2
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/engineering)
"qN" = (
/obj/machinery/portable_atmospherics/canister/air,
/obj/effect/turf_decal/bot{
dir = 2
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/engineering)
@@ -9560,7 +9451,6 @@
/area/awaymission/undergroundoutpost45/engineering)
"rl" = (
/obj/machinery/firealarm{
dir = 2;
pixel_y = 24
},
/obj/structure/tank_dispenser{
@@ -9643,7 +9533,6 @@
},
/obj/machinery/power/apc/highcap/fifteen_k{
dir = 8;
locked = 1;
name = "UO45 Engineering APC";
pixel_x = -25;
req_access = null;
@@ -9683,7 +9572,6 @@
/obj/item/clothing/head/helmet,
/obj/structure/closet/secure_closet{
icon_state = "sec";
locked = 1;
name = "security officer's locker";
req_access_txt = "201"
},
@@ -9750,11 +9638,8 @@
"rx" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/obj/machinery/portable_atmospherics/scrubber,
/obj/effect/turf_decal/bot{
dir = 2
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/engineering)
@@ -10167,9 +10052,7 @@
name = "Privacy Shutters"
},
/obj/machinery/door/window/southleft{
base_state = "left";
dir = 4;
icon_state = "left";
name = "Engineering Reception";
req_access_txt = "201"
},
@@ -10260,7 +10143,6 @@
"sj" = (
/obj/structure/cable,
/obj/machinery/power/apc/highcap/fifteen_k{
dir = 2;
locked = 0;
name = "UO45 Mining APC";
pixel_y = -25;
@@ -10280,9 +10162,7 @@
},
/obj/item/storage/backpack/satchel/eng,
/obj/item/clothing/gloves/fingerless,
/obj/effect/turf_decal/tile/brown{
dir = 2
},
/obj/effect/turf_decal/tile/brown,
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -10290,8 +10170,7 @@
"sk" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
name = "Mix to Distro";
on = 0
name = "Mix to Distro"
},
/turf/open/floor/plasteel{
heat_capacity = 1e+006
@@ -10955,9 +10834,7 @@
},
/area/awaymission/undergroundoutpost45/crew_quarters)
"tv" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 2
},
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/obj/machinery/portable_atmospherics/pump,
/obj/effect/turf_decal/tile/blue{
dir = 4
@@ -10969,9 +10846,7 @@
/area/awaymission/undergroundoutpost45/engineering)
"tw" = (
/obj/machinery/light/small,
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 2
},
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/obj/structure/window/reinforced{
dir = 4;
layer = 2.9
@@ -11145,8 +11020,7 @@
/area/awaymission/undergroundoutpost45/engineering)
"tK" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5;
level = 1
dir = 5
},
/turf/closed/wall/rust,
/area/awaymission/undergroundoutpost45/research)
@@ -11404,11 +11278,8 @@
dir = 1
},
/obj/machinery/portable_atmospherics/canister/air,
/obj/effect/turf_decal/bot{
dir = 2
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/engineering)
@@ -11716,17 +11587,13 @@
},
/area/awaymission/undergroundoutpost45/research)
"uL" = (
/obj/machinery/atmospherics/components/binary/valve{
dir = 2
},
/obj/machinery/atmospherics/components/binary/valve,
/turf/open/floor/plating{
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/research)
"uM" = (
/obj/machinery/atmospherics/components/binary/valve{
dir = 2
},
/obj/machinery/atmospherics/components/binary/valve,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -11813,8 +11680,7 @@
/area/awaymission/undergroundoutpost45/engineering)
"uV" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5;
level = 1
dir = 5
},
/obj/structure/chair/office/dark{
dir = 8
@@ -12342,9 +12208,7 @@
/obj/structure/sign/warning/electricshock{
pixel_y = -32
},
/obj/machinery/vending/engivend{
req_access_txt = "0"
},
/obj/machinery/vending/engivend,
/obj/machinery/camera{
c_tag = "Engineering Foyer";
dir = 1;
@@ -12402,11 +12266,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/bot{
dir = 2
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/engineering)
@@ -12415,11 +12276,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/bot{
dir = 2
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/engineering)
@@ -12428,11 +12286,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
/obj/effect/turf_decal/bot{
dir = 2
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
dir = 2;
heat_capacity = 1e+006
},
/area/awaymission/undergroundoutpost45/engineering)
@@ -13274,7 +13129,6 @@
/area/awaymission/undergroundoutpost45/engineering)
"xl" = (
/obj/machinery/conveyor{
dir = 2;
id = "UO45_mining"
},
/obj/effect/turf_decal/stripes/line{
@@ -13328,7 +13182,6 @@
/area/awaymission/undergroundoutpost45/mining)
"xq" = (
/obj/machinery/conveyor{
dir = 2;
id = "UO45_mining"
},
/obj/structure/sign/warning/nosmoking{
@@ -13383,8 +13236,7 @@
/area/awaymission/undergroundoutpost45/mining)
"xw" = (
/obj/machinery/mineral/processing_unit{
dir = 1;
output_dir = 2
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -13468,7 +13320,6 @@
/area/awaymission/undergroundoutpost45/mining)
"xE" = (
/obj/machinery/conveyor{
dir = 2;
id = "UO45_mining"
},
/obj/machinery/light/small{
@@ -13604,7 +13455,6 @@
/area/awaymission/undergroundoutpost45/mining)
"xS" = (
/obj/machinery/mech_bay_recharge_port{
icon_state = "recharge_port";
dir = 8
},
/obj/structure/cable{
@@ -42626,7 +42476,7 @@ tT
gy
uN
hH
eu
eJ
eJ
ad
ad
@@ -42883,7 +42733,7 @@ tU
uw
uO
vk
eu
eJ
eJ
eJ
ad
@@ -43140,7 +42990,7 @@ tV
ux
uP
hH
eu
eJ
eJ
eJ
eJ
@@ -48811,7 +48661,7 @@ ww
xZ
yc
ww
eu
eJ
eJ
eJ
eJ
@@ -49068,7 +48918,7 @@ xX
ya
yd
yf
eu
eJ
eJ
eJ
eJ
@@ -49325,7 +49175,7 @@ xY
yb
ye
ww
eu
eJ
eJ
eJ
eJ
@@ -51326,9 +51176,9 @@ ad
ad
ad
ad
eu
eu
eu
eJ
eJ
eJ
fn
eJ
eJ
+5 -1
View File
@@ -32,4 +32,8 @@
list("", "\improper S.T.E.A.L.T.H. pod MKVII", "A supply pod that, under normal circumstances, is completely invisible to conventional methods of detection. How are you even seeing this?"),\
list("gondolapod", "gondola", "The silent walker. This one seems to be part of a delivery agency."),\
list("", "", "")\
)
)
#define PACK_GOODY_NONE 0
#define PACK_GOODY_PUBLIC 1 //can be bought by both privates and cargo
#define PACK_GOODY_PRIVATE 2 //can be bought only by privates
+4
View File
@@ -232,6 +232,10 @@
#define COMSIG_LIVING_STATUS_STAGGER "living_stagger" //from base of mob/living/Stagger() (amount, update, ignore)
#define COMPONENT_NO_STUN 1 //For all of them
#define COMSIG_LIVING_LIFE "life_tick" //from base of mob/living/Life() (seconds, times_fired)
#define COMPONENT_INTERRUPT_LIFE_BIOLOGICAL 1 // interrupt biological processes
#define COMPONENT_INTERRUPT_LIFE_PHYSICAL 2 // interrupt physical handling
// /mob/living/carbon signals
#define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity))
#define COMSIG_CARBON_IDENTITY_TRANSFERRED_TO "carbon_id_transferred_to" //from datum/dna/transfer_identity(): (datum/dna, transfer_SE)
+16
View File
@@ -6,10 +6,26 @@
#define RETURN_TYPE(X) set SpacemanDMM_return_type = X
#define SHOULD_CALL_PARENT(X) set SpacemanDMM_should_call_parent = X
#define UNLINT(X) SpacemanDMM_unlint(X)
#define SHOULD_NOT_OVERRIDE(X) set SpacemanDMM_should_not_override = X
#define SHOULD_NOT_SLEEP(X) set SpacemanDMM_should_not_sleep = X
#define SHOULD_BE_PURE(X) set SpacemanDMM_should_be_pure = X
#define PRIVATE_PROC(X) set SpacemanDMM_private_proc = X
#define PROTECTED_PROC(X) set SpacemanDMM_protected_proc = X
#define VAR_FINAL var/SpacemanDMM_final
#define VAR_PRIVATE var/SpacemanDMM_private
#define VAR_PROTECTED var/SpacemanDMM_protected
#else
#define RETURN_TYPE(X)
#define SHOULD_CALL_PARENT(X)
#define UNLINT(X) X
#define SHOULD_NOT_OVERRIDE(X)
#define SHOULD_NOT_SLEEP(X)
#define SHOULD_BE_PURE(X)
#define PRIVATE_PROC(X)
#define PROTECTED_PROC(X)
#define VAR_FINAL var
#define VAR_PRIVATE var
#define VAR_PROTECTED var
#endif
/world/proc/enable_debugger()
+1 -1
View File
@@ -76,7 +76,7 @@
if(check_click_intercept(params,A))
return
if(notransform)
if(mob_transforming)
return
if(SEND_SIGNAL(src, COMSIG_MOB_CLICKON, A, params) & COMSIG_MOB_CANCEL_CLICKON)
+1 -1
View File
@@ -23,7 +23,7 @@ SUBSYSTEM_DEF(npcpool)
var/mob/living/simple_animal/SA = currentrun[currentrun.len]
--currentrun.len
if(!SA.ckey && !SA.notransform)
if(!SA.ckey && !SA.mob_transforming)
if(SA.stat != DEAD)
SA.handle_automated_movement()
if(SA.stat != DEAD)
+2 -2
View File
@@ -409,7 +409,7 @@ SUBSYSTEM_DEF(ticker)
var/mob/living = player.transfer_character()
if(living)
qdel(player)
living.notransform = TRUE
living.mob_transforming = TRUE
if(living.client)
if (living.client.prefs && living.client.prefs.auto_ooc)
if (living.client.prefs.chat_toggles & CHAT_OOC)
@@ -423,7 +423,7 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/proc/release_characters(list/livings)
for(var/I in livings)
var/mob/living/L = I
L.notransform = FALSE
L.mob_transforming = FALSE
/datum/controller/subsystem/ticker/proc/send_tip_of_the_round()
var/m
@@ -123,7 +123,9 @@
trauma = _trauma
return ..()
/mob/living/split_personality/Life()
/mob/living/split_personality/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(QDELETED(body))
qdel(src) //in case trauma deletion doesn't already do it
@@ -132,8 +134,6 @@
trauma.switch_personalities()
qdel(trauma)
..()
/mob/living/split_personality/Login()
..()
to_chat(src, "<span class='notice'>As a split personality, you cannot do anything but observe. However, you will eventually gain control of your body, switching places with the current personality.</span>")
+5 -5
View File
@@ -30,7 +30,7 @@ GLOBAL_LIST_EMPTY(cinematics)
/datum/cinematic
var/id = CINEMATIC_DEFAULT
var/list/watching = list() //List of clients watching this
var/list/locked = list() //Who had notransform set during the cinematic
var/list/locked = list() //Who had mob_transforming set during the cinematic
var/is_global = FALSE //Global cinematics will override mob-specific ones
var/obj/screen/cinematic/screen
var/datum/callback/special_callback //For special effects synced with animation (explosions after the countdown etc)
@@ -45,7 +45,7 @@ GLOBAL_LIST_EMPTY(cinematics)
GLOB.cinematics -= src
QDEL_NULL(screen)
for(var/mob/M in locked)
M.notransform = FALSE
M.mob_transforming = FALSE
return ..()
/datum/cinematic/proc/play(watchers)
@@ -70,7 +70,7 @@ GLOBAL_LIST_EMPTY(cinematics)
for(var/mob/M in GLOB.mob_list)
if(M in watchers)
M.notransform = TRUE //Should this be done for non-global cinematics or even at all ?
M.mob_transforming = TRUE //Should this be done for non-global cinematics or even at all ?
locked += M
//Close watcher ui's
SStgui.close_user_uis(M)
@@ -79,7 +79,7 @@ GLOBAL_LIST_EMPTY(cinematics)
M.client.screen += screen
else
if(is_global)
M.notransform = TRUE
M.mob_transforming = TRUE
locked += M
//Actually play it
@@ -254,4 +254,4 @@ Nuke.Explosion()
Narsie()
-> Cinematic(CULT,world)
*/
*/
+1 -1
View File
@@ -109,7 +109,7 @@
AM.visible_message("<span class='boldwarning'>[AM] falls into [parent]!</span>", "<span class='userdanger'>[oblivion_message]</span>")
if (isliving(AM))
var/mob/living/L = AM
L.notransform = TRUE
L.mob_transforming = TRUE
L.Paralyze(200)
var/oldtransform = AM.transform
+74
View File
@@ -0,0 +1,74 @@
/**
* omen.dm: For when you want someone to have a really bad day
*
* When you attach an omen component to someone, they start running the risk of all sorts of bad environmental injuries, like nearby vending machines randomly falling on you,
* or hitting your head really hard when you slip and fall, or... well, for now those two are all I have. More will come.
*
* Omens are removed once the victim is either maimed by one of the possible injuries, or if they receive a blessing (read: bashing with a bible) from the chaplain.
*/
/datum/component/omen
dupe_mode = COMPONENT_DUPE_UNIQUE
/// Whatever's causing the omen, if there is one. Destroying the vessel won't stop the omen, but we destroy the vessel (if one exists) upon the omen ending
var/obj/vessel
/datum/component/omen/Initialize(silent=FALSE, vessel)
if(!isliving(parent))
return COMPONENT_INCOMPATIBLE
var/mob/person = parent
if(!silent)
to_chat(person, "<span class='warning'>You get a bad feeling...</span>")
src.vessel = vessel
/datum/component/omen/Destroy(force, silent)
if(vessel)
vessel.visible_message("<span class='warning'>[vessel] burns up in a sinister flash, taking an evil energy with it...</span>")
vessel = null
return ..()
/datum/component/omen/RegisterWithParent()
RegisterSignal(parent, COMSIG_MOVABLE_MOVED, .proc/check_accident)
RegisterSignal(parent, COMSIG_LIVING_STATUS_KNOCKDOWN, .proc/check_slip)
RegisterSignal(parent, COMSIG_ADD_MOOD_EVENT, .proc/check_bless)
/datum/component/omen/UnregisterFromParent()
UnregisterSignal(parent, list(COMSIG_LIVING_STATUS_KNOCKDOWN, COMSIG_MOVABLE_MOVED, COMSIG_ADD_MOOD_EVENT))
/**
* check_accident() is called each step we take
*
* While we're walking around, roll to see if there's any environmental hazards (currently only vending machines) on one of the adjacent tiles we can trigger.
* We do the prob() at the beginning to A. add some tension for /when/ it will strike, and B. (more importantly) ameliorate the fact that we're checking up to 5 turfs's contents each time
*/
/datum/component/omen/proc/check_accident(atom/movable/our_guy)
if(!prob(15))
return
for(var/t in get_adjacent_open_turfs(our_guy))
var/turf/the_turf = t
for(var/obj/machinery/vending/darth_vendor in the_turf)
if(darth_vendor.tiltable)
darth_vendor.tilt(our_guy)
qdel(src)
return
/// If we get knocked down, see if we have a really bad slip and bash our head hard
/datum/component/omen/proc/check_slip(mob/living/our_guy, amount)
if(amount <= 0 || prob(50)) // 50% chance to bonk our head
return
var/obj/item/bodypart/the_head = our_guy.get_bodypart(BODY_ZONE_HEAD)
if(!the_head)
return
playsound(get_turf(our_guy), "sound/effects/tableheadsmash.ogg", 90, TRUE)
our_guy.visible_message("<span class='danger'>[our_guy] hits [our_guy.p_their()] head really badly falling down!</span>", "<span class='userdanger'>You hit your head really badly falling down!</span>")
the_head.receive_damage(75)
our_guy.adjustOrganLoss(ORGAN_SLOT_BRAIN, 100)
qdel(src)
/// Hijack the mood system to see if we get the blessing mood event to cancel the omen
/datum/component/omen/proc/check_bless(mob/living/our_guy, category)
if(category != "blessing")
return
to_chat(our_guy, "<span class='nicegreen'>You feel a horrible omen lifted off your shoulders!</span>")
qdel(src)
+2 -2
View File
@@ -52,9 +52,9 @@
to_chat(affected_mob, pick(stage5))
if(QDELETED(affected_mob))
return
if(affected_mob.notransform)
if(affected_mob.mob_transforming)
return
affected_mob.notransform = 1
affected_mob.mob_transforming = 1
for(var/obj/item/W in affected_mob.get_equipped_items(TRUE))
affected_mob.dropItemToGround(W)
for(var/obj/item/I in affected_mob.held_items)
+3 -3
View File
@@ -72,8 +72,8 @@
/// Checking to see if we're gonna embed into a human
/datum/element/embed/proc/checkEmbedMob(obj/item/weapon, mob/living/carbon/victim, hit_zone, datum/thrownthing/throwingdatum, forced=FALSE)
if(!istype(victim) || HAS_TRAIT(victim, TRAIT_PIERCEIMMUNE))
/datum/element/embed/proc/checkEmbedMob(obj/item/weapon, mob/living/carbon/victim, hit_zone, datum/thrownthing/throwingdatum, blocked = FALSE, forced = FALSE)
if(blocked || !istype(victim) || HAS_TRAIT(victim, TRAIT_PIERCEIMMUNE))
return
var/actual_chance = embed_chance
@@ -89,7 +89,7 @@
return
var/roll_embed = prob(actual_chance)
var/pass = forced || ((((throwingdatum ? throwingdatum.speed : weapon.throw_speed) >= EMBED_THROWSPEED_THRESHOLD) || ignore_throwspeed_threshold) && roll_embed)
var/pass = forced || ((((throwingdatum ? throwingdatum.speed : weapon.throw_speed) >= EMBED_THROWSPEED_THRESHOLD) || ignore_throwspeed_threshold) && roll_embed && (!HAS_TRAIT(victim, TRAIT_AUTO_CATCH_ITEM) || victim.incapacitated() || victim.get_active_held_item()))
if(!pass)
return
+4 -2
View File
@@ -9,6 +9,7 @@
/datum/status_effect/incapacitating/on_creation(mob/living/new_owner, set_duration, updating_canmove)
if(isnum(set_duration))
duration = set_duration
tick_interval = max(world.tick_lag, round(tick_interval, world.tick_lag))
. = ..()
if(.)
if(updating_canmove)
@@ -84,8 +85,9 @@
if(prob(20))
if(carbon_owner)
carbon_owner.handle_dreams()
if(prob(10) && owner.health > owner.crit_threshold)
owner.emote("snore")
// 2% per second, tick interval is in deciseconds
if(prob(tick_interval * 0.2) && owner.health > owner.crit_threshold)
owner.emote("snore")
/datum/status_effect/staggered
id = "staggered"
+2 -2
View File
@@ -413,8 +413,8 @@
// shock user with probability prb (if all connections & power are working)
// returns TRUE if shocked, FALSE otherwise
// The preceding comment was borrowed from the grille's shock script
/obj/machinery/door/airlock/proc/shock(mob/user, prb)
if(!hasPower()) // unpowered, no shock
/obj/machinery/door/airlock/proc/shock(mob/living/user, prb)
if(!istype(user) || !hasPower()) // unpowered, no shock
return FALSE
if(shockCooldown > world.time)
return FALSE //Already shocked someone recently?
+2 -1
View File
@@ -13,7 +13,8 @@
var/obj/item/reagent_containers/beaker
var/static/list/drip_containers = typecacheof(list(/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/food,
/obj/item/reagent_containers/glass))
/obj/item/reagent_containers/glass,
/obj/item/reagent_containers/chem_pack))
/obj/machinery/iv_drip/Initialize(mapload)
. = ..()
+13 -1
View File
@@ -257,7 +257,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
. += "[src] is made of cold-resistant materials."
if(resistance_flags & FIRE_PROOF)
. += "[src] is made of fire-retardant materials."
if(item_flags & (ITEM_CAN_BLOCK | ITEM_CAN_PARRY))
var/datum/block_parry_data/data = return_block_parry_datum(block_parry_data)
. += "[src] has the capacity to be used to block and/or parry. <a href='?src=[REF(data)];name=[name];block=[item_flags & ITEM_CAN_BLOCK];parry=[item_flags & ITEM_CAN_PARRY];render=1'>\[Show Stats\]</a>"
@@ -635,6 +635,18 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
var/itempush = 1
if(w_class < 4)
itempush = 0 //too light to push anything
if(isliving(hit_atom)) //Living mobs handle hit sounds differently.
var/volume = get_volume_by_throwforce_and_or_w_class()
if (throwforce > 0)
if (throwhitsound)
playsound(hit_atom, throwhitsound, volume, TRUE, -1)
else if(hitsound)
playsound(hit_atom, hitsound, volume, TRUE, -1)
else
playsound(hit_atom, 'sound/weapons/genhit.ogg',volume, TRUE, -1)
else
playsound(hit_atom, 'sound/weapons/throwtap.ogg', 1, volume, -1)
return hit_atom.hitby(src, 0, itempush, throwingdatum=throwingdatum)
/obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, messy_throw = TRUE)
@@ -545,7 +545,7 @@
to_chat(usr, "<span class='notice'>This unit already has an expand module installed!</span>")
return FALSE
R.notransform = TRUE
R.mob_transforming = TRUE
var/prev_locked_down = R.locked_down
R.SetLockdown(1)
R.anchored = TRUE
@@ -559,7 +559,7 @@
if(!prev_locked_down)
R.SetLockdown(0)
R.anchored = FALSE
R.notransform = FALSE
R.mob_transforming = FALSE
R.resize = 2
R.hasExpanded = TRUE
R.update_transform()
@@ -779,6 +779,9 @@ GLOBAL_LIST_INIT(plastic_recipes, list(
/obj/item/stack/sheet/plastic/fifty
amount = 50
/obj/item/stack/sheet/plastic/twenty
amount = 20
/obj/item/stack/sheet/plastic/five
amount = 5
@@ -266,6 +266,9 @@
/obj/item/stack/tile/carpet/blackred/twenty
amount = 20
/obj/item/stack/tile/carpet/blackred/thirty
amount = 30
/obj/item/stack/tile/carpet/blackred/fifty
amount = 50
@@ -275,6 +278,9 @@
/obj/item/stack/tile/carpet/monochrome/twenty
amount = 20
/obj/item/stack/tile/carpet/monochrome/thirty
amount = 30
/obj/item/stack/tile/carpet/monochrome/fifty
amount = 50
@@ -284,6 +290,9 @@
/obj/item/stack/tile/carpet/blue/twenty
amount = 20
/obj/item/stack/tile/carpet/blue/thirty
amount = 30
/obj/item/stack/tile/carpet/blue/fifty
amount = 50
@@ -293,6 +302,9 @@
/obj/item/stack/tile/carpet/cyan/twenty
amount = 20
/obj/item/stack/tile/carpet/cyan/thirty
amount = 30
/obj/item/stack/tile/carpet/cyan/fifty
amount = 50
@@ -302,6 +314,9 @@
/obj/item/stack/tile/carpet/green/twenty
amount = 20
/obj/item/stack/tile/carpet/green/thirty
amount = 30
/obj/item/stack/tile/carpet/green/fifty
amount = 50
@@ -311,6 +326,9 @@
/obj/item/stack/tile/carpet/orange/twenty
amount = 20
/obj/item/stack/tile/carpet/orange/thirty
amount = 30
/obj/item/stack/tile/carpet/orange/fifty
amount = 50
@@ -320,6 +338,9 @@
/obj/item/stack/tile/carpet/purple/twenty
amount = 20
/obj/item/stack/tile/carpet/purple/thirty
amount = 30
/obj/item/stack/tile/carpet/purple/fifty
amount = 50
@@ -329,6 +350,9 @@
/obj/item/stack/tile/carpet/red/twenty
amount = 20
/obj/item/stack/tile/carpet/red/thirty
amount = 30
/obj/item/stack/tile/carpet/red/fifty
amount = 50
@@ -338,6 +362,9 @@
/obj/item/stack/tile/carpet/royalblack/twenty
amount = 20
/obj/item/stack/tile/carpet/royalblack/thirty
amount = 30
/obj/item/stack/tile/carpet/royalblack/fifty
amount = 50
@@ -347,6 +374,9 @@
/obj/item/stack/tile/carpet/royalblue/twenty
amount = 20
/obj/item/stack/tile/carpet/royalblue/thirty
amount = 30
/obj/item/stack/tile/carpet/royalblue/fifty
amount = 50
+1 -1
View File
@@ -391,7 +391,7 @@
STR.storage_flags = STORAGE_FLAGS_VOLUME_DEFAULT
STR.max_volume = STORAGE_VOLUME_CHEMISTRY_BAG
STR.insert_preposition = "in"
STR.can_hold = typecacheof(list(/obj/item/reagent_containers/pill, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/syringe/dart))
STR.can_hold = typecacheof(list(/obj/item/reagent_containers/pill, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/syringe/dart, /obj/item/reagent_containers/chem_pack))
/*
* Biowaste bag (mostly for xenobiologists)
+2 -1
View File
@@ -180,7 +180,8 @@
/obj/item/implantcase,
/obj/item/implant,
/obj/item/implanter,
/obj/item/pinpointer/crew
/obj/item/pinpointer/crew,
/obj/item/reagent_containers/chem_pack
))
/obj/item/storage/belt/medical/surgery_belt_adv
+19
View File
@@ -138,6 +138,22 @@
icon_type = "cigarette"
spawn_type = /obj/item/clothing/mask/cigarette/space_cigarette
custom_price = PRICE_ALMOST_CHEAP
var/spawn_coupon = TRUE
/obj/item/storage/fancy/cigarettes/attack_self(mob/user)
if(contents.len == 0 && spawn_coupon)
to_chat(user, "<span class='notice'>You rip the back off \the [src] and get a coupon!</span>")
var/obj/item/coupon/attached_coupon = new
user.put_in_hands(attached_coupon)
attached_coupon.generate()
attached_coupon = null
spawn_coupon = FALSE
name = "discarded cigarette packet"
desc = "An old cigarette packet with the back torn off, worth less than nothing now."
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_items = 0
return
return ..()
/obj/item/storage/fancy/cigarettes/ComponentInitialize()
. = ..()
@@ -148,6 +164,8 @@
/obj/item/storage/fancy/cigarettes/examine(mob/user)
. = ..()
. += "<span class='notice'>Alt-click to extract contents.</span>"
if(spawn_coupon)
. += "<span class='notice'>There's a coupon on the back of the pack! You can tear it off once it's empty.</span>"
/obj/item/storage/fancy/cigarettes/AltClick(mob/living/carbon/user)
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
@@ -308,6 +326,7 @@
w_class = WEIGHT_CLASS_NORMAL
icon_type = "premium cigar"
spawn_type = /obj/item/clothing/mask/cigarette/cigar
spawn_coupon = FALSE
/obj/item/storage/fancy/cigarettes/cigars/ComponentInitialize()
. = ..()
+2 -1
View File
@@ -418,7 +418,8 @@
/obj/item/circuitboard/computer/crew,
/obj/item/stack/sheet/glass,
/obj/item/stack/sheet/mineral/silver,
/obj/item/organ_storage
/obj/item/organ_storage,
/obj/item/reagent_containers/chem_pack
))
//hijacking the minature first aids for hypospray boxes. <3
+43 -10
View File
@@ -188,19 +188,52 @@
new /obj/item/clothing/accessory/medal/plasma/nobel_science(src)
/obj/item/storage/lockbox/medal/engineering
name = "engineering medal box"
desc = "A locked box used to store medals to be given to the members of the engineering department."
req_access = list(ACCESS_CE)
name = "engineering medal box"
desc = "A locked box used to store medals to be given to the members of the engineering department."
req_access = list(ACCESS_CE)
/obj/item/storage/lockbox/medal/engineering/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/clothing/accessory/medal/engineer(src)
for(var/i in 1 to 3)
new /obj/item/clothing/accessory/medal/engineer(src)
/obj/item/storage/lockbox/medal/medical
name = "medical medal box"
desc = "A locked box used to store medals to be given to the members of the medical department."
req_access = list(ACCESS_CMO)
name = "medical medal box"
desc = "A locked box used to store medals to be given to the members of the medical department."
req_access = list(ACCESS_CMO)
/obj/item/storage/lockbox/medal/medical/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/clothing/accessory/medal/ribbon/medical_doctor(src)
for(var/i in 1 to 3)
new /obj/item/clothing/accessory/medal/ribbon/medical_doctor(src)
/obj/item/storage/lockbox/order
name = "order lockbox"
desc = "A box used to secure small cargo orders from being looted by those who didn't order it. Yeah, cargo tech, that means you."
icon = 'icons/obj/storage.dmi'
icon_state = "secure"
item_state = "sec-case"
lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/briefcase_righthand.dmi'
w_class = WEIGHT_CLASS_HUGE
var/datum/bank_account/buyer_account
var/privacy_lock = TRUE
/obj/item/storage/lockbox/order/Initialize(datum/bank_account/_buyer_account)
. = ..()
buyer_account = _buyer_account
/obj/item/storage/lockbox/order/attackby(obj/item/W, mob/user, params)
if(!istype(W, /obj/item/card/id))
return ..()
var/obj/item/card/id/id_card = W
if(iscarbon(user))
add_fingerprint(user)
if(id_card.registered_account != buyer_account)
to_chat(user, "<span class='notice'>Bank account does not match with buyer!</span")
return
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, !privacy_lock)
privacy_lock = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)
user.visible_message("<span class='notice'>[user] [privacy_lock ? "" : "un"]locks [src]'s privacy lock.</span>",
"<span class='notice'>You [privacy_lock ? "" : "un"]lock [src]'s privacy lock.</span>")
@@ -6,8 +6,16 @@
max_integrity = 250
armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
secure = TRUE
var/melee_min_damage = 20
/obj/structure/closet/secure_closet/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
if(damage_flag == "melee" && damage_amount < 20)
if(damage_flag == "melee" && damage_amount < melee_min_damage)
return 0
. = ..()
. = ..()
// Exists to work around the minimum 700 cr price for goodies / small items
/obj/structure/closet/secure_closet/goodies
icon_state = "goodies"
desc = "A sturdier card-locked storage unit used for bulky shipments."
max_integrity = 500 // Same as crates.
melee_min_damage = 25 // Idem.
+5
View File
@@ -87,6 +87,11 @@
smooth = SMOOTH_TRUE
explosion_block = INFINITY
/turf/closed/indestructible/syndicate
icon = 'icons/turf/walls/plastitanium_wall.dmi'
icon_state = "map-shuttle"
smooth = SMOOTH_TRUE
/turf/closed/indestructible/riveted/uranium
icon = 'icons/turf/walls/uranium_wall.dmi'
icon_state = "uranium"
+1 -1
View File
@@ -205,7 +205,7 @@
if(floor_tile)
if(prob(70))
remove_tile()
else if(prob(50))
else if(prob(50) && (/turf/open/space in baseturfs))
ReplaceWithLattice()
/turf/open/floor/narsie_act(force, ignore_mobs, probability = 20)
@@ -0,0 +1,12 @@
/obj/structure/fluff/iced_abductor ///Unless more non-machine ayy structures made, it will stay in fluff.
name = "Mysterious Block of Ice"
desc = "A shadowy figure lies in this sturdy-looking block of ice. Who knows where it came from?"
icon = 'icons/effects/freeze.dmi'
icon_state = "ice_ayy"
density = TRUE
deconstructible = FALSE
/obj/structure/fluff/iced_abductor/Destroy()
var/turf/T = get_turf(src)
new /obj/effect/mob_spawn/human/abductor(T)
. = ..()
@@ -103,7 +103,9 @@
factory.spores += src
. = ..()
/mob/living/simple_animal/hostile/blob/blobspore/Life()
/mob/living/simple_animal/hostile/blob/blobspore/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(!is_zombie && isturf(src.loc))
for(var/mob/living/carbon/human/H in view(src,1)) //Only for corpse right next to/on same tile
if(H.stat == DEAD)
@@ -111,7 +113,6 @@
break
if(factory && z != factory.z)
death()
..()
/mob/living/simple_animal/hostile/blob/blobspore/proc/Zombify(mob/living/carbon/human/H)
is_zombie = 1
@@ -233,39 +234,40 @@
return FALSE
return ..()
/mob/living/simple_animal/hostile/blob/blobbernaut/Life()
if(..())
var/list/blobs_in_area = range(2, src)
if(independent)
return // strong independent blobbernaut that don't need no blob
var/damagesources = 0
if(!(locate(/obj/structure/blob) in blobs_in_area))
damagesources++
if(!factory)
damagesources++
else
if(locate(/obj/structure/blob/core) in blobs_in_area)
adjustHealth(-maxHealth*0.1)
var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(src)) //hello yes you are being healed
if(overmind)
H.color = overmind.blobstrain.complementary_color
else
H.color = "#000000"
if(locate(/obj/structure/blob/node) in blobs_in_area)
adjustHealth(-maxHealth*0.05)
var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(src))
if(overmind)
H.color = overmind.blobstrain.complementary_color
else
H.color = "#000000"
if(damagesources)
for(var/i in 1 to damagesources)
adjustHealth(maxHealth*0.025) //take 2.5% of max health as damage when not near the blob or if the naut has no factory, 5% if both
var/image/I = new('icons/mob/blob.dmi', src, "nautdamage", MOB_LAYER+0.01)
I.appearance_flags = RESET_COLOR
/mob/living/simple_animal/hostile/blob/blobbernaut/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
var/list/blobs_in_area = range(2, src)
if(independent)
return // strong independent blobbernaut that don't need no blob
var/damagesources = 0
if(!(locate(/obj/structure/blob) in blobs_in_area))
damagesources++
if(!factory)
damagesources++
else
if(locate(/obj/structure/blob/core) in blobs_in_area)
adjustHealth(-maxHealth*0.1)
var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(src)) //hello yes you are being healed
if(overmind)
I.color = overmind.blobstrain.complementary_color
flick_overlay_view(I, src, 8)
H.color = overmind.blobstrain.complementary_color
else
H.color = "#000000"
if(locate(/obj/structure/blob/node) in blobs_in_area)
adjustHealth(-maxHealth*0.05)
var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(src))
if(overmind)
H.color = overmind.blobstrain.complementary_color
else
H.color = "#000000"
if(damagesources)
for(var/i in 1 to damagesources)
adjustHealth(maxHealth*0.025) //take 2.5% of max health as damage when not near the blob or if the naut has no factory, 5% if both
var/image/I = new('icons/mob/blob.dmi', src, "nautdamage", MOB_LAYER+0.01)
I.appearance_flags = RESET_COLOR
if(overmind)
I.color = overmind.blobstrain.complementary_color
flick_overlay_view(I, src, 8)
/mob/living/simple_animal/hostile/blob/blobbernaut/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
. = ..()
@@ -129,10 +129,10 @@
target.Stun(power_time)
to_chat(L, "<span class='notice'>[target] is fixed in place by your hypnotic gaze.</span>")
target.next_move = world.time + power_time // <--- Use direct change instead. We want an unmodified delay to their next move // target.changeNext_move(power_time) // check click.dm
target.notransform = TRUE // <--- Fuck it. We tried using next_move, but they could STILL resist. We're just doing a hard freeze.
target.mob_transforming = TRUE // <--- Fuck it. We tried using next_move, but they could STILL resist. We're just doing a hard freeze.
spawn(power_time)
if(istype(target) && success)
target.notransform = FALSE
target.mob_transforming = FALSE
if(istype(L) && target.stat == CONSCIOUS && (target in L.fov_view(10))) // They Woke Up! (Notice if within view)
to_chat(L, "<span class='warning'>[target] has snapped out of their trance.</span>")
@@ -20,7 +20,7 @@
. = ..()
if(!.)
return
if(owner.notransform || !get_turf(owner))
if(owner.mob_transforming || !get_turf(owner))
return FALSE
return TRUE
@@ -83,7 +83,7 @@
// Freeze Me
user.next_move = world.time + mist_delay
user.Stun(mist_delay, ignore_canstun = TRUE)
user.notransform = TRUE
user.mob_transforming = TRUE
user.density = FALSE
var/invis_was = user.invisibility
user.invisibility = INVISIBILITY_MAXIMUM
@@ -106,7 +106,7 @@
user.dir = get_dir(my_turf, target_turf)
user.next_move = world.time + mist_delay / 2
user.Stun(mist_delay / 2, ignore_canstun = TRUE)
user.notransform = FALSE
user.mob_transforming = FALSE
user.density = 1
user.invisibility = invis_was
@@ -21,7 +21,7 @@
var/datum/changelingprofile/chosen_prof = changeling.get_dna(chosen_name)
if(!chosen_prof)
return
if(!user || user.notransform)
if(!user || user.mob_transforming)
return 0
to_chat(user, "<span class='notice'>We transform our appearance.</span>")
@@ -11,9 +11,9 @@
//Transform into a monkey.
/obj/effect/proc_holder/changeling/lesserform/sting_action(mob/living/carbon/human/user)
if(!user || user.notransform)
if(!user || user.mob_transforming)
return 0
to_chat(user, "<span class='warning'>Our genes cry out!</span>")
user.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE)
return TRUE
return TRUE
@@ -40,8 +40,9 @@
if(!shield_health)
return "<span class='warning'>Its shield has been destroyed!</span>"
/mob/living/simple_animal/hostile/clockwork/marauder/Life()
..()
/mob/living/simple_animal/hostile/clockwork/marauder/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
var/turf/T = get_turf(src)
var/turf/open/space/S = isspaceturf(T)? T : null
var/less_space_damage
+3 -2
View File
@@ -48,8 +48,9 @@
..()
boost = world.time + 30
/mob/living/simple_animal/imp/Life()
..()
/mob/living/simple_animal/imp/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(boost<world.time)
speed = 1
else
@@ -107,7 +107,9 @@
mind.add_antag_datum(/datum/antagonist/revenant)
//Life, Stat, Hud Updates, and Say
/mob/living/simple_animal/revenant/Life()
/mob/living/simple_animal/revenant/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(stasis)
return
if(revealed && essence <= 0)
@@ -120,14 +122,13 @@
to_chat(src, "<span class='revenboldnotice'>You are once more concealed.</span>")
if(unstun_time && world.time >= unstun_time)
unstun_time = 0
notransform = FALSE
mob_transforming = FALSE
to_chat(src, "<span class='revenboldnotice'>You can move again!</span>")
if(essence_regenerating && !inhibited && essence < essence_regen_cap) //While inhibited, essence will not regenerate
essence = min(essence_regen_cap, essence+essence_regen_amount)
update_action_buttons_icon() //because we update something required by our spells in life, we need to update our buttons
update_spooky_icon()
update_health_hud()
..()
/mob/living/simple_animal/revenant/Stat()
..()
@@ -218,7 +219,7 @@
return 0
stasis = TRUE
to_chat(src, "<span class='revendanger'>NO! No... it's too late, you can feel your essence [pick("breaking apart", "drifting away")]...</span>")
notransform = TRUE
mob_transforming = TRUE
revealed = TRUE
invisibility = 0
playsound(src, 'sound/effects/screech.ogg', 100, 1)
@@ -260,7 +261,7 @@
return
if(time <= 0)
return
notransform = TRUE
mob_transforming = TRUE
if(!unstun_time)
to_chat(src, "<span class='revendanger'>You cannot move!</span>")
unstun_time = world.time + time
@@ -271,7 +272,7 @@
/mob/living/simple_animal/revenant/proc/update_spooky_icon()
if(revealed)
if(notransform)
if(mob_transforming)
if(draining)
icon_state = icon_drain
else
@@ -320,7 +321,7 @@
/mob/living/simple_animal/revenant/proc/death_reset()
revealed = FALSE
unreveal_time = 0
notransform = 0
mob_transforming = 0
unstun_time = 0
inhibited = FALSE
draining = FALSE
@@ -369,7 +369,7 @@
var/mob/living/carbon/last_user
/obj/item/warpwhistle/proc/interrupted(mob/living/carbon/user)
if(!user || QDELETED(src) || user.notransform)
if(!user || QDELETED(src) || user.mob_transforming)
on_cooldown = FALSE
return TRUE
return FALSE
@@ -1,20 +1,39 @@
/*Cabin areas*/
/area/awaymission/snowforest
name = "Snow Forest"
icon_state = "away"
requires_power = FALSE
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
/area/awaymission/cabin
name = "Cabin"
icon_state = "away2"
requires_power = TRUE
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
/area/awaymission/snowforest/lumbermill
/area/awaymission/cabin/snowforest
name = "Snow Forest"
icon_state = "away"
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
/area/awaymission/cabin/snowforest/sovietsurface
name = "Snow Forest"
icon_state = "awaycontent29"
requires_power = FALSE
/area/awaymission/cabin/lumbermill
name = "Lumbermill"
icon_state = "away3"
requires_power = FALSE
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
/area/awaymission/cabin/caves/sovietcave
name = "Soviet Bunker"
icon_state = "awaycontent4"
/area/awaymission/cabin/caves
name = "North Snowdin Caves"
icon_state = "awaycontent15"
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
/area/awaymission/cabin/caves/mountain
name = "North Snowdin Mountains"
icon_state = "awaycontent24"
/obj/structure/firepit
name = "firepit"
@@ -92,7 +111,7 @@
egg_type = null
speak = list()
/*Cabin's forest*/
/*Cabin's forest. Removed in the new cabin map since it was buggy and I prefer manual placement.*/
/datum/mapGenerator/snowy
modules = list(/datum/mapGeneratorModule/bottomlayer/snow, \
/datum/mapGeneratorModule/snow/pineTrees, \
@@ -136,4 +155,4 @@
endTurfX = 159
endTurfY = 157
startTurfX = 37
startTurfY = 35
startTurfY = 35
+21 -1
View File
@@ -18,6 +18,7 @@
var/obj/item/radio/headset/radio
/// var that tracks message cooldown
var/message_cooldown
var/list/loaded_coupons
light_color = "#E2853D"//orange
@@ -134,6 +135,8 @@
"cost" = P.cost,
"id" = pack,
"desc" = P.desc || P.name, // If there is a description, use it. Otherwise use the pack's name.
"private_goody" = P.goody == PACK_GOODY_PRIVATE,
"goody" = P.goody == PACK_GOODY_PUBLIC,
"access" = P.access,
"can_private_buy" = P.can_private_buy
))
@@ -215,8 +218,22 @@
if(isnull(reason) || ..())
return
if(pack.goody == PACK_GOODY_PRIVATE && !self_paid)
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE)
say("ERROR: Private small crates may only be purchased by private accounts.")
return
var/obj/item/coupon/applied_coupon
for(var/i in loaded_coupons)
var/obj/item/coupon/coupon_check = i
if(pack.type == coupon_check.discounted_pack)
say("Coupon found! [round(coupon_check.discount_pct_off * 100)]% off applied!")
coupon_check.moveToNullspace()
applied_coupon = coupon_check
break
var/turf/T = get_turf(src)
var/datum/supply_order/SO = new(pack, name, rank, ckey, reason, account)
var/datum/supply_order/SO = new(pack, name, rank, ckey, reason, account, applied_coupon)
SO.generateRequisition(T)
if(requestonly && !self_paid)
SSshuttle.requestlist += SO
@@ -229,6 +246,9 @@
var/id = text2num(params["id"])
for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
if(SO.id == id)
if(SO.applied_coupon)
say("Coupon refunded.")
SO.applied_coupon.forceMove(get_turf(src))
SSshuttle.shoppinglist -= SO
. = TRUE
break
+50
View File
@@ -0,0 +1,50 @@
#define COUPON_OMEN "omen"
/obj/item/coupon
name = "coupon"
desc = "It doesn't matter if you didn't want it before, what matters now is that you've got a coupon for it!"
icon_state = "data_1"
icon = 'icons/obj/card.dmi'
item_flags = NOBLUDGEON
w_class = WEIGHT_CLASS_TINY
var/datum/supply_pack/discounted_pack
var/discount_pct_off = 0.05
var/obj/machinery/computer/cargo/inserted_console
/// Choose what our prize is :D
/obj/item/coupon/proc/generate()
discounted_pack = pick(subtypesof(/datum/supply_pack/goody))
var/list/chances = list("0.10" = 4, "0.15" = 8, "0.20" = 10, "0.25" = 8, "0.50" = 4, COUPON_OMEN = 1)
discount_pct_off = pickweight(chances)
if(discount_pct_off == COUPON_OMEN)
name = "coupon - fuck you"
desc = "The small text reads, 'You will be slaughtered'... That doesn't sound right, does it?"
if(ismob(loc))
var/mob/M = loc
to_chat(M, "<span class='warning'>The coupon reads '<b>fuck you</b>' in large, bold text... is- is that a prize, or?</span>")
M.AddComponent(/datum/component/omen, TRUE, src)
else
discount_pct_off = text2num(discount_pct_off)
name = "coupon - [round(discount_pct_off * 100)]% off [initial(discounted_pack.name)]"
/obj/item/coupon/attack_obj(obj/O, mob/living/user)
if(!istype(O, /obj/machinery/computer/cargo))
return ..()
if(discount_pct_off == COUPON_OMEN)
to_chat(user, "<span class='warning'>\The [O] validates the coupon as authentic, but refuses to accept it...</span>")
O.say("Coupon fulfillment already in progress...")
return
inserted_console = O
LAZYADD(inserted_console.loaded_coupons, src)
inserted_console.say("Coupon for [initial(discounted_pack.name)] applied!")
forceMove(inserted_console)
/obj/item/coupon/Destroy()
if(inserted_console)
LAZYREMOVE(inserted_console.loaded_coupons, src)
inserted_console = null
. = ..()
#undef COUPON_OMEN
+42 -33
View File
@@ -27,10 +27,12 @@
var/orderer_rank
var/orderer_ckey
var/reason
var/discounted_pct
var/datum/supply_pack/pack
var/datum/bank_account/paying_account
var/obj/item/coupon/applied_coupon
/datum/supply_order/New(datum/supply_pack/pack, orderer, orderer_rank, orderer_ckey, reason, paying_account)
/datum/supply_order/New(datum/supply_pack/pack, orderer, orderer_rank, orderer_ckey, reason, paying_account, coupon)
id = SSshuttle.ordernum++
src.pack = pack
src.orderer = orderer
@@ -38,6 +40,7 @@
src.orderer_ckey = orderer_ckey
src.reason = reason
src.paying_account = paying_account
src.applied_coupon = coupon
/datum/supply_order/proc/generateRequisition(turf/T)
var/obj/item/paper/P = new(T)
@@ -57,58 +60,64 @@
P.update_icon()
return P
/datum/supply_order/proc/generateManifest(obj/structure/closet/crate/C)
var/obj/item/paper/fluff/jobs/cargo/manifest/P = new(C, id, pack.cost)
/datum/supply_order/proc/generateManifest(obj/container, owner, packname) //generates-the-manifests.
var/obj/item/paper/fluff/jobs/cargo/manifest/P = new(container, id, 0)
var/station_name = (P.errors & MANIFEST_ERROR_NAME) ? new_station_name() : station_name()
P.name = "shipping manifest - #[id] ([pack.name])"
P.name = "shipping manifest - [packname?"#[id] ([pack.name])":"(Grouped Item Crate)"]"
P.info += "<h2>[command_name()] Shipping Manifest</h2>"
P.info += "<hr/>"
if(paying_account)
P.info += "Direct purchase from [paying_account.account_holder]<br/>"
P.name += " - Purchased by [paying_account.account_holder]"
if(id && !(id == "Cargo"))
P.info += "Direct purchase from [owner]<br/>"
P.name += " - Purchased by [owner]"
P.info += "Order #[id]<br/>"
P.info += "Destination: [station_name]<br/>"
P.info += "Item: [pack.name]<br/>"
if(packname)
P.info += "Item: [packname]<br/>"
P.info += "Contents: <br/>"
P.info += "<ul>"
for(var/atom/movable/AM in C.contents - P - C.lockerelectronics)
var/list/ignore_this = list(P)
if(istype(container, /obj/structure/closet))
var/obj/structure/closet/C = container
ignore_this += C.lockerelectronics
for(var/atom/movable/AM in container.contents - ignore_this)
if((P.errors & MANIFEST_ERROR_CONTENTS) && prob(50))
continue
P.info += "<li>[AM.name]</li>"
P.info += "</ul>"
P.info += "<h4>Stamp below to confirm receipt of goods:</h4>"
if(P.errors & MANIFEST_ERROR_ITEM)
var/static/list/blacklisted_error = typecacheof(list(
/obj/structure/closet/crate/secure,
/obj/structure/closet/crate/large,
/obj/structure/closet/secure_closet/goodies
))
if(blacklisted_error[container.type])
P.errors &= ~MANIFEST_ERROR_ITEM
else
var/lost = max(round(container.contents.len / 10), 1)
while(--lost >= 0)
qdel(pick(container.contents))
P.update_icon()
P.forceMove(C)
C.manifest = P
C.update_icon()
P.forceMove(container)
if(istype(container, /obj/structure/closet/crate))
var/obj/structure/closet/crate/C = container
C.manifest = P
C.update_icon()
return P
/datum/supply_order/proc/generate(atom/A)
var/obj/structure/closet/crate/C = pack.generate(A, paying_account)
var/obj/item/paper/fluff/jobs/cargo/manifest/M = generateManifest(C)
if(M.errors & MANIFEST_ERROR_ITEM)
if(istype(C, /obj/structure/closet/crate/secure) || istype(C, /obj/structure/closet/crate/large))
M.errors &= ~MANIFEST_ERROR_ITEM
else
var/lost = max(round(C.contents.len / 10), 1)
while(--lost >= 0)
qdel(pick(C.contents))
generateManifest(C, paying_account, pack)
return C
//Paperwork for NT
/obj/item/folder/paperwork
name = "Incomplete Paperwork"
desc = "These should've been filled out four months ago! Unfinished grant papers issued by Nanotrasen's finance department. Complete this page for additional funding."
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "docs_generic"
/obj/item/folder/paperwork_correct
name = "Finished Paperwork"
desc = "A neat stack of filled-out forms, in triplicate and signed. Is there anything more satisfying? Make sure they get stamped."
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "docs_verified"
/datum/supply_order/proc/generateCombo(var/miscbox, var/misc_own, var/misc_contents)
for (var/I in misc_contents)
new I(miscbox)
generateManifest(miscbox, misc_own, "")
return
+1
View File
@@ -15,6 +15,7 @@
var/special_enabled = FALSE
var/DropPodOnly = FALSE //only usable by the Bluespace Drop Pod via the express cargo console
var/admin_spawned = FALSE //Can only an admin spawn this crate?
var/goody = PACK_GOODY_NONE //Small items can be grouped into a single crate.They also come in a closet/lockbox instead of a full crate, so the 700 min doesn't apply
var/can_private_buy = TRUE //Can it be purchased privately by each crewmember?
/datum/supply_pack/proc/generate(atom/A, datum/bank_account/paying_account)
-9
View File
@@ -37,15 +37,6 @@
contains = list(/obj/item/storage/box/chemimp)
crate_name = "chemical implant crate"
/datum/supply_pack/security/armory/combatknives
name = "Combat Knives Crate"
desc = "Contains three sharpened combat knives. Each knife guaranteed to fit snugly inside any Nanotrasen-standard boot. Requires Armory access to open."
cost = 3200
contains = list(/obj/item/kitchen/knife/combat,
/obj/item/kitchen/knife/combat,
/obj/item/kitchen/knife/combat)
crate_name = "combat knife crate"
/datum/supply_pack/security/armory/ballistic
name = "Combat Shotguns Crate"
desc = "For when the enemy absolutely needs to be replaced with lead. Contains three Aussec-designed Combat Shotguns, with three Shotgun Bandoliers, as well as seven buchshot and 12g shotgun slugs. Requires Armory access to open."
+1 -10
View File
@@ -90,16 +90,6 @@
crate_name = "industrial rcd"
crate_type = /obj/structure/closet/crate/secure/engineering
/datum/supply_pack/engineering/powergamermitts
name = "Insulated Gloves Crate"
desc = "The backbone of modern society. Barely ever ordered for actual engineering. Contains three insulated gloves."
cost = 2300 //Made of pure-grade bullshittinium
contains = list(/obj/item/clothing/gloves/color/yellow,
/obj/item/clothing/gloves/color/yellow,
/obj/item/clothing/gloves/color/yellow)
crate_name = "insulated gloves crate"
crate_type = /obj/structure/closet/crate/engineering/electrical
/datum/supply_pack/engineering/inducers
name = "NT-75 Electromagnetic Power Inducers Crate"
desc = "No rechargers? No problem, with the NT-75 EPI, you can recharge any standard cell-based equipment anytime, anywhere. Contains two Inducers."
@@ -162,6 +152,7 @@
/obj/item/storage/toolbox/mechanical)
cost = 1200
crate_name = "toolbox crate"
special = TRUE //Department resupply shuttle loan event.
/datum/supply_pack/engineering/bsa
name = "Bluespace Artillery Parts"
+77
View File
@@ -0,0 +1,77 @@
/datum/supply_pack/goody
access = NONE
group = "Goodies"
goody = PACK_GOODY_PRIVATE
/datum/supply_pack/goody/combatknives_single
name = "Combat Knife Single-Pack"
desc = "Contains one sharpened combat knive. Guaranteed to fit snugly inside any Nanotrasen-standard boot."
cost = 800
contains = list(/obj/item/kitchen/knife/combat)
/datum/supply_pack/goody/sologamermitts
name = "Insulated Gloves Single-Pack"
desc = "The backbone of modern society. Barely ever ordered for actual engineering."
cost = 800
contains = list(/obj/item/clothing/gloves/color/yellow)
/datum/supply_pack/goody/firstaidbruises_single
name = "Bruise Treatment Kit Single-Pack"
desc = "A single brute first-aid kit, perfect for recovering from being crushed in an airlock. Did you know people get crushed in airlocks all the time? Interesting..."
cost = 330
contains = list(/obj/item/storage/firstaid/brute)
/datum/supply_pack/goody/firstaidburns_single
name = "Burn Treatment Kit Single-Pack"
desc = "A single burn first-aid kit. The advertisement displays a winking atmospheric technician giving a thumbs up, saying \"Mistakes happen!\""
cost = 330
contains = list(/obj/item/storage/firstaid/fire)
/datum/supply_pack/goody/firstaid_single
name = "First Aid Kit Single-Pack"
desc = "A single first-aid kit, fit for healing most types of bodily harm."
cost = 250
contains = list(/obj/item/storage/firstaid/regular)
/datum/supply_pack/goody/firstaidoxygen_single
name = "Oxygen Deprivation Kit Single-Pack"
desc = "A single oxygen deprivation first-aid kit, marketed heavily to those with crippling fears of asphyxiation."
cost = 330
contains = list(/obj/item/storage/firstaid/o2)
/datum/supply_pack/goody/firstaidtoxins_single
name = "Toxin Treatment Kit Single-Pack"
desc = "A single first aid kit focused on healing damage dealt by heavy toxins."
cost = 330
contains = list(/obj/item/storage/firstaid/toxin)
/datum/supply_pack/goody/toolbox // mostly just to water down coupon probability
name = "Mechanical Toolbox"
desc = "A fully stocked mechanical toolbox, for when you're too lazy to just print them out."
cost = 300
contains = list(/obj/item/storage/toolbox/mechanical)
/datum/supply_pack/goody/electrical_toolbox // mostly just to water down coupon probability
name = "Mechanical Toolbox"
desc = "A fully stocked electrical toolbox, for when you're too lazy to just print them out."
cost = 300
contains = list(/obj/item/storage/toolbox/electrical)
/datum/supply_pack/goody/valentine
name = "Valentine Card"
desc = "Make an impression on that special someone! Comes with one valentine card and a free candy heart!"
cost = 150
contains = list(/obj/item/valentine, /obj/item/reagent_containers/food/snacks/candyheart)
/datum/supply_pack/goody/beeplush
name = "Bee Plushie"
desc = "The most important thing you could possibly spend your hard-earned money on."
cost = 1500
contains = list(/obj/item/toy/plush/beeplushie)
/datum/supply_pack/goody/beach_ball
name = "Beach Ball"
desc = "The simple beach ball is one of Nanotrasen's most popular products. 'Why do we make beach balls? Because we can! (TM)' - Nanotrasen"
cost = 200
contains = list(/obj/item/toy/beach_ball)
+27 -49
View File
@@ -14,53 +14,60 @@
//////////////////////////////////////////////////////////////////////////////
/datum/supply_pack/materials/cardboard50
goody = PACK_GOODY_PUBLIC
name = "50 Cardboard Sheets"
desc = "Create a bunch of boxes."
cost = 1000
cost = 300 //thrice their export value
contains = list(/obj/item/stack/sheet/cardboard/fifty)
crate_name = "cardboard sheets crate"
/datum/supply_pack/materials/glass50
goody = PACK_GOODY_PUBLIC
name = "50 Glass Sheets"
desc = "Let some nice light in with fifty glass sheets!"
cost = 850
cost = 300 //double their export value
contains = list(/obj/item/stack/sheet/glass/fifty)
crate_name = "glass sheets crate"
/datum/supply_pack/materials/metal50
goody = PACK_GOODY_PUBLIC
name = "50 Metal Sheets"
desc = "Any construction project begins with a good stack of fifty metal sheets!"
cost = 850
cost = 300 //double their export value
contains = list(/obj/item/stack/sheet/metal/fifty)
crate_name = "metal sheets crate"
/datum/supply_pack/materials/plasteel20
goody = PACK_GOODY_PUBLIC
name = "20 Plasteel Sheets"
desc = "Reinforce the station's integrity with twenty plasteel sheets!"
cost = 4700
cost = 4000
contains = list(/obj/item/stack/sheet/plasteel/twenty)
crate_name = "plasteel sheets crate"
/datum/supply_pack/materials/plasteel50
name = "50 Plasteel Sheets"
desc = "For when you REALLY have to reinforce something."
cost = 9050
contains = list(/obj/item/stack/sheet/plasteel/fifty)
crate_name = "plasteel sheets crate"
/datum/supply_pack/materials/plastic50
goody = PACK_GOODY_PUBLIC
name = "50 Plastic Sheets"
desc = "Build a limitless amount of toys with fifty plastic sheets!"
cost = 950
contains = list(/obj/item/stack/sheet/plastic/fifty)
crate_name = "plastic sheets crate"
cost = 200 // double their export
contains = list(/obj/item/stack/sheet/plastic/twenty)
/datum/supply_pack/materials/sandstone30
goody = PACK_GOODY_PUBLIC
name = "30 Sandstone Blocks"
desc = "Neither sandy nor stoney, these thirty blocks will still get the job done."
cost = 800
cost = 150 // five times their export
contains = list(/obj/item/stack/sheet/mineral/sandstone/thirty)
crate_name = "sandstone blocks crate"
/datum/supply_pack/materials/wood50
goody = PACK_GOODY_PUBLIC
name = "50 Wood Planks"
desc = "Turn cargo's boring metal groundwork into beautiful panelled flooring and much more with fifty wooden planks!"
cost = 400 // 6-7 planks shy from having equal import/export prices
contains = list(/obj/item/stack/sheet/mineral/wood/twenty)
/datum/supply_pack/materials/rcdammo
goody = PACK_GOODY_PUBLIC
name = "Large RCD ammo Single-Pack"
desc = "A single large compressed RCD matter pack, to help with any holes or projects people might be working on."
cost = 600
contains = list(/obj/item/rcd_ammo/large)
/datum/supply_pack/materials/rawlumber
name = "50 Towercap Logs"
@@ -74,35 +81,6 @@
for(var/i in 1 to 49)
new /obj/item/grown/log(.)
/datum/supply_pack/materials/wood50
name = "50 Wood Planks"
desc = "Turn cargo's boring metal groundwork into beautiful panelled flooring and much more with fifty wooden planks!"
cost = 1450
contains = list(/obj/item/stack/sheet/mineral/wood/fifty)
crate_name = "wood planks crate"
/datum/supply_pack/materials/rcdammo
name = "Spare RCD ammo"
desc = "This crate contains sixteen RCD compressed matter packs, to help with any holes or projects people might be working on."
cost = 3750
contains = list(/obj/item/rcd_ammo,
/obj/item/rcd_ammo,
/obj/item/rcd_ammo,
/obj/item/rcd_ammo,
/obj/item/rcd_ammo,
/obj/item/rcd_ammo,
/obj/item/rcd_ammo,
/obj/item/rcd_ammo,
/obj/item/rcd_ammo,
/obj/item/rcd_ammo,
/obj/item/rcd_ammo,
/obj/item/rcd_ammo,
/obj/item/rcd_ammo,
/obj/item/rcd_ammo,
/obj/item/rcd_ammo,
/obj/item/rcd_ammo)
crate_name = "rcd ammo"
//////////////////////////////////////////////////////////////////////////////
///////////////////////////// Canisters //////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
-57
View File
@@ -141,34 +141,6 @@
///////////////////////////// Medical Kits ///////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
/datum/supply_pack/medical/firstaidbruises
name = "Bruise Treatment Kit Crate"
desc = "Contains three first aid kits focused on healing bruises and broken bones."
cost = 1000
contains = list(/obj/item/storage/firstaid/brute,
/obj/item/storage/firstaid/brute,
/obj/item/storage/firstaid/brute)
crate_name = "brute treatment kit crate"
/datum/supply_pack/medical/firstaidburns
name = "Burn Treatment Kit Crate"
desc = "Contains three first aid kits focused on healing severe burns."
cost = 1000
contains = list(/obj/item/storage/firstaid/fire,
/obj/item/storage/firstaid/fire,
/obj/item/storage/firstaid/fire)
crate_name = "burn treatment kit crate"
/datum/supply_pack/medical/firstaid
name = "First Aid Kit Crate"
desc = "Contains four first aid kits for healing most types of wounds."
cost = 1000
contains = list(/obj/item/storage/firstaid/regular,
/obj/item/storage/firstaid/regular,
/obj/item/storage/firstaid/regular,
/obj/item/storage/firstaid/regular)
crate_name = "first aid kit crate"
/datum/supply_pack/medical/sprays
name = "Medical Sprays"
desc = "Contains two cans of Styptic Spray, Silver Sulfadiazine Spray, Synthflesh Spray and Sterilizer Compound Spray."
@@ -183,35 +155,6 @@
/obj/item/reagent_containers/medspray/sterilizine)
crate_name = "medical supplies crate"
/datum/supply_pack/medical/firstaidmixed
name = "Mixed Medical Kits"
desc = "Contains one of each medical kits for dealing with a variety of injured crewmembers."
cost = 1250
contains = list(/obj/item/storage/firstaid/toxin,
/obj/item/storage/firstaid/o2,
/obj/item/storage/firstaid/brute,
/obj/item/storage/firstaid/fire,
/obj/item/storage/firstaid/regular)
crate_name = "medical supplies crate"
/datum/supply_pack/medical/firstaidoxygen
name = "Oxygen Deprivation Kit Crate"
desc = "Contains three first aid kits focused on helping oxygen deprivation victims."
cost = 1000
contains = list(/obj/item/storage/firstaid/o2,
/obj/item/storage/firstaid/o2,
/obj/item/storage/firstaid/o2)
crate_name = "oxygen deprivation kit crate"
/datum/supply_pack/medical/firstaidtoxins
name = "Toxin Treatment Kit Crate"
desc = "Contains three first aid kits focused on healing damage dealt by heavy toxins."
cost = 1000
contains = list(/obj/item/storage/firstaid/toxin,
/obj/item/storage/firstaid/toxin,
/obj/item/storage/firstaid/toxin)
crate_name = "toxin treatment kit crate"
/datum/supply_pack/medical/advrad
name = "Radiation Treatment Crate Deluxe"
desc = "A crate for when radiation is out of hand... Contains two rad-b-gone kits, one bottle of anti radiation deluxe pills, as well as a radiation treatment deluxe pill bottle!"
+51 -38
View File
@@ -333,45 +333,58 @@
//////////////////////////// Misc + Decor ////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
/datum/supply_pack/misc/carpet_exotic
name = "Exotic Carpet Crate"
desc = "Exotic carpets straight from Space Russia, for all your decorating needs. Contains 100 tiles each of 10 different flooring patterns."
cost = 7000
contains = list(/obj/item/stack/tile/carpet/blue/fifty,
/obj/item/stack/tile/carpet/blue/fifty,
/obj/item/stack/tile/carpet/cyan/fifty,
/obj/item/stack/tile/carpet/cyan/fifty,
/obj/item/stack/tile/carpet/green/fifty,
/obj/item/stack/tile/carpet/green/fifty,
/obj/item/stack/tile/carpet/orange/fifty,
/obj/item/stack/tile/carpet/orange/fifty,
/obj/item/stack/tile/carpet/purple/fifty,
/obj/item/stack/tile/carpet/purple/fifty,
/obj/item/stack/tile/carpet/red/fifty,
/obj/item/stack/tile/carpet/red/fifty,
/obj/item/stack/tile/carpet/royalblue/fifty,
/obj/item/stack/tile/carpet/royalblue/fifty,
/obj/item/stack/tile/carpet/royalblack/fifty,
/obj/item/stack/tile/carpet/royalblack/fifty,
/obj/item/stack/tile/carpet/blackred/fifty,
/obj/item/stack/tile/carpet/blackred/fifty,
/obj/item/stack/tile/carpet/monochrome/fifty,
/obj/item/stack/tile/carpet/monochrome/fifty)
crate_name = "exotic carpet crate"
/datum/supply_pack/misc/carpet
name = "Premium Carpet Crate"
desc = "Plasteel floor tiles getting on your nerves? These stacks of extra soft carpet will tie any room together. Contains some classic carpet, along with black, red, and monochrome varients."
cost = 1350
contains = list(/obj/item/stack/tile/carpet/fifty,
/obj/item/stack/tile/carpet/fifty,
/obj/item/stack/tile/carpet/black/fifty,
/obj/item/stack/tile/carpet/black/fifty,
/obj/item/stack/tile/carpet/blackred/fifty,
/obj/item/stack/tile/carpet/blackred/fifty,
/obj/item/stack/tile/carpet/monochrome/fifty,
/obj/item/stack/tile/carpet/monochrome/fifty)
crate_name = "premium carpet crate"
goody = PACK_GOODY_PUBLIC
name = "Classic Carpet Single-Pack"
desc = "Plasteel floor tiles getting on your nerves? This 50 units stack of extra soft carpet will tie any room together."
cost = 200
contains = list(/obj/item/stack/tile/carpet/fifty)
/datum/supply_pack/misc/carpet/black
name = "Black Carpet Single-Pack"
contains = list(/obj/item/stack/tile/carpet/black/fifty)
/datum/supply_pack/misc/carpet/premium
name = "Monochrome Carpet Single-Pack"
desc = "Exotic carpets for all your decorating needs. This 30 units stack of extra soft carpet will tie any room together."
cost = 250
contains = list(/obj/item/stack/tile/carpet/monochrome/thirty)
/datum/supply_pack/misc/carpet/premium/blackred
name = "Black-Red Carpet Single-Pack"
contains = list(/obj/item/stack/tile/carpet/blackred/thirty)
/datum/supply_pack/misc/carpet/premium/royalblack
name = "Royal Black Carpet Single-Pack"
contains = list(/obj/item/stack/tile/carpet/royalblack/thirty)
/datum/supply_pack/misc/carpet/premium/royalblue
name = "Royal Blue Carpet Single-Pack"
contains = list(/obj/item/stack/tile/carpet/royalblue/thirty)
/datum/supply_pack/misc/carpet/premium/red
name = "Red Carpet Single-Pack"
contains = list(/obj/item/stack/tile/carpet/red/thirty)
/datum/supply_pack/misc/carpet/premium/purple
name = "Purple Carpet Single-Pack"
contains = list(/obj/item/stack/tile/carpet/purple/thirty)
/datum/supply_pack/misc/carpet/premium/orange
name = "Orange Carpet Single-Pack"
contains = list(/obj/item/stack/tile/carpet/orange/thirty)
/datum/supply_pack/misc/carpet/premium/green
name = "Green Carpet Single-Pack"
contains = list(/obj/item/stack/tile/carpet/green/thirty)
/datum/supply_pack/misc/carpet/premium/cyan
name = "Cyan Carpet Single-Pack"
contains = list(/obj/item/stack/tile/carpet/cyan/thirty)
/datum/supply_pack/misc/carpet/premium/blue
name = "Blue Carpet Single-Pack"
contains = list(/obj/item/stack/tile/carpet/blue/thirty)
/datum/supply_pack/misc/noslipfloor
name = "High-traction Floor Tiles"
@@ -84,7 +84,7 @@
user.alpha = 255
user.update_atom_colour()
user.animate_movement = FORWARD_STEPS
user.notransform = 0
user.mob_transforming = 0
user.anchored = FALSE
teleporting = 0
for(var/obj/item/I in user.held_items)
@@ -125,7 +125,7 @@
ADD_TRAIT(I, TRAIT_NODROP, CHRONOSUIT_TRAIT)
user.animate_movement = NO_STEPS
user.changeNext_move(8 + phase_in_ds)
user.notransform = 1
user.mob_transforming = 1
user.anchored = TRUE
user.Stun(INFINITY)
+2 -2
View File
@@ -85,8 +85,8 @@
/datum/round_event_control/stray_cargo/syndicate
name = "Stray Syndicate Cargo Pod"
typepath = /datum/round_event/stray_cargo/syndicate
weight = 6
max_occurrences = 1
weight = 0
max_occurrences = 0
earliest_start = 30 MINUTES
/datum/round_event/stray_cargo/syndicate
+4 -4
View File
@@ -303,12 +303,12 @@ All foods are distributed among various categories. Use common sense.
var/obj/item/result
if(cooked_type)
result = new cooked_type(T)
//if the result is food, set its food quality to the original food item's quality
if(isfood(result))
var/obj/item/reagent_containers/food/food_output = result
food_output.adjust_food_quality(food_quality + M.quality_increase)
if(istype(M))
initialize_cooked_food(result, M.efficiency)
//if the result is food, set its food quality to the original food item's quality
if(isfood(result))
var/obj/item/reagent_containers/food/food_output = result
food_output.adjust_food_quality(food_quality + M.quality_increase)
else
initialize_cooked_food(result, 1)
SSblackbox.record_feedback("tally", "food_made", 1, result.type)
@@ -463,7 +463,7 @@
return TRUE
if(!O.reagents || !O.reagents.reagent_list.len) // other empty containers not accepted
return FALSE
if(istype(O, /obj/item/reagent_containers/syringe) || istype(O, /obj/item/reagent_containers/glass/bottle) || istype(O, /obj/item/reagent_containers/glass/beaker) || istype(O, /obj/item/reagent_containers/spray) || istype(O, /obj/item/reagent_containers/medspray))
if(istype(O, /obj/item/reagent_containers/syringe) || istype(O, /obj/item/reagent_containers/glass/bottle) || istype(O, /obj/item/reagent_containers/glass/beaker) || istype(O, /obj/item/reagent_containers/spray) || istype(O, /obj/item/reagent_containers/medspray) || istype(O, /obj/item/reagent_containers/chem_pack))
return TRUE
return FALSE
+3 -2
View File
@@ -56,8 +56,9 @@
cached_z = z
poof()
/mob/living/simple_animal/jacq/Life()
..()
/mob/living/simple_animal/jacq/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(!ckey)
if((last_poof+3 MINUTES) < world.realtime)
poof()
@@ -492,7 +492,7 @@
setDir(user.dir)
user.forceMove(src)
user.notransform = TRUE
user.mob_transforming = TRUE
user.status_flags |= GODMODE
can_destroy = FALSE
@@ -501,7 +501,7 @@
/obj/effect/immortality_talisman/proc/unvanish(mob/user)
user.status_flags &= ~GODMODE
user.notransform = FALSE
user.mob_transforming = FALSE
user.forceMove(get_turf(src))
user.visible_message("<span class='danger'>[user] pops back into reality!</span>")
+3 -3
View File
@@ -68,7 +68,7 @@ INITIALIZE_IMMEDIATE(/mob/dead)
set category = "OOC"
set name = "Server Hop!"
set desc= "Jump to the other server"
if(notransform)
if(mob_transforming)
return
var/list/csa = CONFIG_GET(keyed_list/cross_server)
var/pick
@@ -93,9 +93,9 @@ INITIALIZE_IMMEDIATE(/mob/dead)
to_chat(C, "<span class='notice'>Sending you to [pick].</span>")
new /obj/screen/splash(C)
notransform = TRUE
mob_transforming = TRUE
sleep(29) //let the animation play
notransform = FALSE
mob_transforming = FALSE
if(!C)
return
+3 -3
View File
@@ -37,10 +37,10 @@
C.put_in_hands(B1)
C.put_in_hands(B2)
C.regenerate_icons()
src.notransform = TRUE
src.mob_transforming = TRUE
spawn(0)
bloodpool_sink(B)
src.notransform = FALSE
src.mob_transforming = FALSE
return 1
/mob/living/proc/bloodpool_sink(obj/effect/decal/cleanable/B)
@@ -155,7 +155,7 @@
addtimer(CALLBACK(src, /atom/.proc/remove_atom_colour, TEMPORARY_COLOUR_PRIORITY, newcolor), 6 SECONDS)
/mob/living/proc/phasein(obj/effect/decal/cleanable/B)
if(src.notransform)
if(src.mob_transforming)
to_chat(src, "<span class='warning'>Finish eating first!</span>")
return 0
B.visible_message("<span class='warning'>[B] starts to bubble...</span>")
+2 -6
View File
@@ -1,11 +1,7 @@
/mob/living/brain/Life()
set invisibility = 0
if (notransform)
/mob/living/brain/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(!loc)
return
. = ..()
handle_emp_damage()
/mob/living/brain/update_stat()
@@ -8,9 +8,6 @@
/mob/living/carbon/alien/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
return ..(AM, skipcatch = TRUE, hitpush = FALSE)
/mob/living/carbon/alien/can_embed(obj/item/I)
return FALSE
/*Code for aliens attacking aliens. Because aliens act on a hivemind, I don't see them as very aggressive with each other.
As such, they can either help or harm other aliens. Help works like the human help command while harm is a simple nibble.
In all, this is a lot like the monkey code. /N
@@ -1,14 +1,10 @@
/mob/living/carbon/alien/larva/Life()
set invisibility = 0
if (notransform)
/mob/living/carbon/alien/larva/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(..()) //not dead
// GROW!
if(amount_grown < max_grown)
amount_grown++
update_icons()
// GROW!
if(amount_grown < max_grown)
amount_grown++
update_icons()
/mob/living/carbon/alien/larva/update_stat()
+3 -2
View File
@@ -1,6 +1,7 @@
/mob/living/carbon/alien/Life()
/mob/living/carbon/alien/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
findQueen()
return..()
/mob/living/carbon/alien/check_breath(datum/gas_mixture/breath)
if(status_flags & GODMODE)
@@ -92,7 +92,7 @@
ghost.transfer_ckey(new_xeno, FALSE)
SEND_SOUND(new_xeno, sound('sound/voice/hiss5.ogg',0,0,0,100)) //To get the player's attention
new_xeno.Paralyze(6)
new_xeno.notransform = TRUE
new_xeno.mob_transforming = TRUE
new_xeno.invisibility = INVISIBILITY_MAXIMUM
sleep(6)
@@ -102,7 +102,7 @@
if(new_xeno)
new_xeno.SetParalyzed(0)
new_xeno.notransform = FALSE
new_xeno.mob_transforming = FALSE
new_xeno.invisibility = 0
var/mob/living/carbon/old_owner = owner
@@ -65,17 +65,6 @@
throw_mode_off()
return TRUE
/mob/living/carbon/embed_item(obj/item/I)
throw_alert("embeddedobject", /obj/screen/alert/embeddedobject)
var/obj/item/bodypart/L = pick(bodyparts)
L.embedded_objects |= I
I.add_mob_blood(src)//it embedded itself in you, of course it's bloody!
I.forceMove(src)
I.embedded()
L.receive_damage(I.w_class*I.embedding["impact_pain_mult"])
visible_message("<span class='danger'>[I] embeds itself in [src]'s [L.name]!</span>","<span class='userdanger'>[I] embeds itself in your [L.name]!</span>")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "embedded", /datum/mood_event/embedded)
/mob/living/carbon/attacked_by(obj/item/I, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1)
var/totitemdamage = pre_attacked_by(I, user) * damage_multiplier
var/impacting_zone = (user == src)? check_zone(user.zone_selected) : ran_zone(user.zone_selected)
+10 -9
View File
@@ -1,20 +1,21 @@
/mob/living/carbon/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE)
/mob/living/carbon/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE)
SEND_SIGNAL(src, COMSIG_MOB_APPLY_DAMGE, damage, damagetype, def_zone)
var/hit_percent = (100-blocked)/100
if(!forced && hit_percent <= 0)
return 0
var/obj/item/bodypart/BP = null
if(isbodypart(def_zone)) //we specified a bodypart object
BP = def_zone
else
if(!def_zone)
def_zone = ran_zone(def_zone)
BP = get_bodypart(check_zone(def_zone))
if(!BP)
BP = bodyparts[1]
if(!spread_damage)
if(isbodypart(def_zone)) //we specified a bodypart object
BP = def_zone
else
if(!def_zone)
def_zone = ran_zone(def_zone)
BP = get_bodypart(check_zone(def_zone))
if(!BP)
BP = bodyparts[1]
var/damage_amount = forced ? damage : damage * hit_percent
switch(damagetype)
@@ -1,5 +1,5 @@
/mob/living/carbon/human/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE)
/mob/living/carbon/human/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage)
// depending on the species, it will run the corresponding apply_damage code there
return dna.species.apply_damage(damage, damagetype, def_zone, blocked, src, forced)
return dna.species.apply_damage(damage, damagetype, def_zone, blocked, src, forced, spread_damage)
+10 -21
View File
@@ -18,32 +18,21 @@
#define THERMAL_PROTECTION_HAND_LEFT 0.025
#define THERMAL_PROTECTION_HAND_RIGHT 0.025
/mob/living/carbon/human/Life(seconds, times_fired)
set invisibility = 0
if (notransform)
/mob/living/carbon/human/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
handle_active_genes()
//heart attack stuff
handle_heart()
dna.species.spec_life(src) // for mutantraces
return (stat != DEAD) && !QDELETED(src)
. = ..()
if (QDELETED(src))
return 0
if(.) //not dead
handle_active_genes()
if(stat != DEAD)
//heart attack stuff
handle_heart()
/mob/living/carbon/human/PhysicalLife(seconds, times_fired)
if(!(. = ..()))
return
//Update our name based on whether our face is obscured/disfigured
name = get_visible_name()
dna.species.spec_life(src) // for mutantraces
if(stat != DEAD)
return 1
/mob/living/carbon/human/calculate_affecting_pressure(pressure)
var/headless = !get_bodypart(BODY_ZONE_HEAD) //should the mob be perennially headless (see dullahans), we only take the suit into account, so they can into space.
if (wear_suit && istype(wear_suit, /obj/item/clothing) && (headless || (head && istype(head, /obj/item/clothing))))
+17 -17
View File
@@ -1492,12 +1492,12 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/miss_chance = 100//calculate the odds that a punch misses entirely. considers stamina and brute damage of the puncher. punches miss by default to prevent weird cases
if(user.dna.species.punchdamagelow)
if(HAS_TRAIT(user, TRAIT_PUGILIST)) //pugilists have a flat 10% miss chance
miss_chance = 10
if(atk_verb == ATTACK_EFFECT_KICK) //kicks never miss (provided your species deals more than 0 damage)
miss_chance = 0
else if(HAS_TRAIT(user, TRAIT_PUGILIST)) //pugilists have a flat 10% miss chance
miss_chance = 10
else
miss_chance = min(10 + ((puncherstam + puncherbrute)*0.5), 100) //probability of miss has a base of 10, and modified based on half brute total. Capped at max 100 to prevent weirdness in prob()
miss_chance = min(10 + max(puncherstam * 0.5, puncherbrute * 0.5), 100) //probability of miss has a base of 10, and modified based on half brute total. Capped at max 100 to prevent weirdness in prob()
if(!damage || !affecting || prob(miss_chance))//future-proofing for species that have 0 damage/weird cases where no zone is targeted
playsound(target.loc, user.dna.species.miss_sound, 25, TRUE, -1)
@@ -1939,7 +1939,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
append_message += ", causing them to drop [target_held_item]"
log_combat(user, target, "shoved", append_message)
/datum/species/proc/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H, forced = FALSE)
/datum/species/proc/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H, forced = FALSE, spread_damage = FALSE)
SEND_SIGNAL(src, COMSIG_MOB_APPLY_DAMGE, damage, damagetype, def_zone)
var/hit_percent = (100-(blocked+armor))/100
hit_percent = (hit_percent * (100-H.physiology.damage_resistance))/100
@@ -1947,20 +1947,20 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
return 0
var/obj/item/bodypart/BP = null
if(isbodypart(def_zone))
if(damagetype == STAMINA && istype(def_zone, /obj/item/bodypart/head))
BP = H.get_bodypart(check_zone(BODY_ZONE_CHEST))
if(!spread_damage)
if(isbodypart(def_zone))
if(damagetype == STAMINA && istype(def_zone, /obj/item/bodypart/head))
BP = H.get_bodypart(check_zone(BODY_ZONE_CHEST))
else
BP = def_zone
else
BP = def_zone
else
if(!def_zone)
def_zone = ran_zone(def_zone)
if(damagetype == STAMINA && def_zone == BODY_ZONE_HEAD)
def_zone = BODY_ZONE_CHEST
BP = H.get_bodypart(check_zone(def_zone))
if(!BP)
BP = H.bodyparts[1]
if(!def_zone)
def_zone = ran_zone(def_zone)
if(damagetype == STAMINA && def_zone == BODY_ZONE_HEAD)
def_zone = BODY_ZONE_CHEST
BP = H.get_bodypart(check_zone(def_zone))
if(!BP)
BP = H.bodyparts[1]
switch(damagetype)
if(BRUTE)
@@ -239,7 +239,7 @@
"<span class='notice'>You focus intently on moving your body while \
standing perfectly still...</span>")
H.notransform = TRUE
H.mob_transforming = TRUE
if(do_after(owner, delay=60, needhand=FALSE, target=owner, progress=TRUE))
if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT)
@@ -249,7 +249,7 @@
else
to_chat(H, "<span class='warning'>...but fail to stand perfectly still!</span>")
H.notransform = FALSE
H.mob_transforming = FALSE
/datum/action/innate/split_body/proc/make_dupe()
var/mob/living/carbon/human/H = owner
@@ -267,7 +267,7 @@
spare.Move(get_step(H.loc, pick(NORTH,SOUTH,EAST,WEST)))
H.blood_volume *= 0.45
H.notransform = 0
H.mob_transforming = 0
var/datum/species/jelly/slime/origin_datum = H.dna.species
origin_datum.bodies |= spare
@@ -466,8 +466,9 @@
if(new_color)
var/temp_hsv = RGBtoHSV(new_color)
if(ReadHSV(temp_hsv)[3] >= ReadHSV("#7F7F7F")[3]) // mutantcolors must be bright
H.dna.features["mcolor"] = sanitize_hexcolor(new_color)
H.dna.features["mcolor"] = sanitize_hexcolor(new_color, 6)
H.update_body()
H.update_hair()
else
to_chat(H, "<span class='notice'>Invalid color. Your color is not bright enough.</span>")
else if(select_alteration == "Hair Style")
+15 -20
View File
@@ -1,29 +1,19 @@
/mob/living/carbon/Life()
set invisibility = 0
if(notransform)
return
if(damageoverlaytemp)
damageoverlaytemp = 0
update_damage_hud()
/mob/living/carbon/BiologicalLife(seconds, times_fired)
if(stat == DEAD)
return FALSE
//Reagent processing needs to come before breathing, to prevent edge cases.
handle_organs()
. = ..()
if (QDELETED(src))
if(!(. = ..()))
return
if(.) //not dead
handle_blood()
handle_blood()
// handle_blood *could* kill us.
// we should probably have a better system for if we need to check for death or something in the future hmw
if(stat != DEAD)
var/bprv = handle_bodyparts()
if(bprv & BODYPART_LIFE_UPDATE_HEALTH)
updatehealth()
update_stamina()
doSprintBufferRegen()
if(stat != DEAD)
handle_brain_damage()
@@ -35,12 +25,17 @@
stop_sound_channel(CHANNEL_HEARTBEAT)
handle_death()
rot()
. = FALSE
//Updates the number of stored chemicals for powers
handle_changeling()
if(stat != DEAD)
return 1
/mob/living/carbon/PhysicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(damageoverlaytemp)
damageoverlaytemp = 0
update_damage_hud()
//Procs called while dead
/mob/living/carbon/proc/handle_death()
+18 -22
View File
@@ -3,30 +3,26 @@
/mob/living/carbon/monkey
/mob/living/carbon/monkey/Life()
set invisibility = 0
if (notransform)
/mob/living/carbon/monkey/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(..())
if(!client)
if(stat == CONSCIOUS)
if(on_fire || buckled || restrained() || (!CHECK_MOBILITY(src, MOBILITY_STAND) && CHECK_MOBILITY(src, MOBILITY_MOVE))) //CIT CHANGE - makes it so monkeys attempt to resist if they're resting)
if(!resisting && prob(MONKEY_RESIST_PROB))
resisting = TRUE
walk_to(src,0)
resist()
else if(resisting)
resisting = FALSE
else if((mode == MONKEY_IDLE && !pickupTarget && !prob(MONKEY_SHENANIGAN_PROB)) || !handle_combat())
if(prob(25) && CHECK_MOBILITY(src, MOBILITY_MOVE) && isturf(loc) && !pulledby)
step(src, pick(GLOB.cardinals))
else if(prob(1))
emote(pick("scratch","jump","roll","tail"))
else
if(client)
return
if(stat == CONSCIOUS)
if(on_fire || buckled || restrained() || (!CHECK_MOBILITY(src, MOBILITY_STAND) && CHECK_MOBILITY(src, MOBILITY_MOVE))) //CIT CHANGE - makes it so monkeys attempt to resist if they're resting)
if(!resisting && prob(MONKEY_RESIST_PROB))
resisting = TRUE
walk_to(src,0)
resist()
else if(resisting)
resisting = FALSE
else if((mode == MONKEY_IDLE && !pickupTarget && !prob(MONKEY_SHENANIGAN_PROB)) || !handle_combat())
if(prob(25) && CHECK_MOBILITY(src, MOBILITY_MOVE) && isturf(loc) && !pulledby)
step(src, pick(GLOB.cardinals))
else if(prob(1))
emote(pick("scratch","jump","roll","tail"))
else
walk_to(src,0)
/mob/living/carbon/monkey/handle_mutations_and_radiation()
if(radiation)
@@ -31,11 +31,12 @@
if(relic_mask)
equip_to_slot_or_del(new relic_mask, SLOT_WEAR_MASK)
/mob/living/carbon/monkey/punpun/Life()
/mob/living/carbon/monkey/punpun/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
Write_Memory(FALSE, FALSE)
memory_saved = TRUE
..()
/mob/living/carbon/monkey/punpun/death(gibbed)
if(!memory_saved)
@@ -12,7 +12,7 @@
overlays_standing[cache_index] = null
/mob/living/carbon/regenerate_icons()
if(notransform)
if(mob_transforming)
return 1
update_inv_hands()
update_inv_handcuffed()
+16 -10
View File
@@ -1,14 +1,20 @@
/*
apply_damage(a,b,c)
args
a:damage - How much damage to take
b:damage_type - What type of damage to take, brute, burn
c:def_zone - Where to take the damage if its brute or burn
Returns
standard 0 if fail
*/
/mob/living/proc/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE)
/**
* Applies damage to this mob
*
* Sends [COMSIG_MOB_APPLY_DAMGE]
*
* Arguuments:
* * damage - amount of damage
* * damagetype - one of [BRUTE], [BURN], [TOX], [OXY], [CLONE], [STAMINA]
* * def_zone - zone that is being hit if any
* * blocked - armor value applied
* * forced - bypass hit percentage
* * spread_damage - used in overrides
*
* Returns TRUE if damage applied
*/
/mob/living/proc/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE)
var/hit_percent = (100-blocked)/100
if(!damage || (hit_percent <= 0))
return 0
+61 -39
View File
@@ -1,12 +1,20 @@
/**
* Called by SSmobs at (hopefully) an interval of 1 second.
* Splits off into PhysicalLife() and BiologicalLife(). Override those instead of this.
*/
/mob/living/proc/Life(seconds, times_fired)
set waitfor = FALSE
set invisibility = 0
set waitfor = FALSE // yeah hey we're kind of on a subsystem, no sleeping will be tolerated here!
if(mob_transforming)
return
if(digitalinvis)
handle_diginvis() //AI becomes unable to see mob
. = SEND_SIGNAL(src, COMSIG_LIVING_LIFE, seconds, times_fired)
if(!(. & COMPONENT_INTERRUPT_LIFE_PHYSICAL))
PhysicalLife(seconds, times_fired)
if(!(. & COMPONENT_INTERRUPT_LIFE_BIOLOGICAL))
BiologicalLife(seconds, times_fired)
if((movement_type & FLYING) && !(movement_type & FLOATING)) //TODO: Better floating
float(on = TRUE)
// CODE BELOW SHOULD ONLY BE THINGS THAT SHOULD HAPPEN NO MATTER WHAT AND CAN NOT BE SUSPENDED!
// Otherwise, it goes into one of the two split Life procs!
if (client)
var/turf/T = get_turf(src)
@@ -30,28 +38,54 @@
log_game("Z-TRACKING: [src] of type [src.type] has a Z-registration despite not having a client.")
update_z(null)
if (notransform)
return
if(!loc)
return
var/datum/gas_mixture/environment = loc.return_air()
if(stat != DEAD)
//Mutations and radiation
handle_mutations_and_radiation()
if(stat != DEAD)
//Breathing, if applicable
handle_breathing(times_fired)
/**
* Handles biological life processes like chemical metabolism, breathing, etc
* Returns TRUE or FALSE based on if we were interrupted. This is used by overridden variants to check if they should stop.
*/
/mob/living/proc/BiologicalLife(seconds, times_fired)
handle_diseases()// DEAD check is in the proc itself; we want it to spread even if the mob is dead, but to handle its disease-y properties only if you're not.
if (QDELETED(src)) // diseases can qdel the mob via transformations
return
// Everything after this shouldn't process while dead (as of the time of writing)
if(stat == DEAD)
return FALSE
if(stat != DEAD)
//Random events (vomiting etc)
handle_random_events()
//Mutations and radiation
handle_mutations_and_radiation()
//Breathing, if applicable
handle_breathing(times_fired)
if (QDELETED(src)) // diseases can qdel the mob via transformations
return FALSE
//Random events (vomiting etc)
handle_random_events()
//stuff in the stomach
handle_stomach()
handle_block_parry(seconds)
// These two MIGHT need to be moved to base Life() if we get any in the future that's a "physical" effect that needs to fire even while in stasis.
handle_traits() // eye, ear, brain damages
handle_status_effects() //all special effects, stun, knockdown, jitteryness, hallucination, sleeping, etc
return TRUE
/**
* Handles physical life processes like being on fire. Don't ask why this is considered "Life".
* Returns TRUE or FALSE based on if we were interrupted. This is used by overridden variants to check if they should stop.
*/
/mob/living/proc/PhysicalLife(seconds, times_fired)
if(digitalinvis)
handle_diginvis() //AI becomes unable to see mob
if((movement_type & FLYING) && !(movement_type & FLOATING)) //TODO: Better floating
float(on = TRUE)
if(!loc)
return FALSE
var/datum/gas_mixture/environment = loc.return_air()
//Handle temperature/pressure differences between body and environment
if(environment)
@@ -59,23 +93,11 @@
handle_fire()
//stuff in the stomach
handle_stomach()
handle_gravity()
handle_block_parry(seconds)
if(machine)
machine.check_eye(src)
if(stat != DEAD)
handle_traits() // eye, ear, brain damages
if(stat != DEAD)
handle_status_effects() //all special effects, stun, knockdown, jitteryness, hallucination, sleeping, etc
if(stat != DEAD)
return 1
return TRUE
/mob/living/proc/handle_breathing(times_fired)
return
@@ -168,4 +190,4 @@
/mob/living/proc/handle_high_gravity(gravity)
if(gravity >= GRAVITY_DAMAGE_TRESHOLD) //Aka gravity values of 3 or more
var/grav_stregth = gravity - GRAVITY_DAMAGE_TRESHOLD
adjustBruteLoss(min(grav_stregth,3))
adjustBruteLoss(min(grav_stregth,3))
+6 -25
View File
@@ -1,7 +1,7 @@
/mob/living/proc/run_armor_check(def_zone = null, attack_flag = "melee", absorb_text = "Your armor absorbs the blow!", soften_text = "Your armor softens the blow!", armour_penetration, penetrated_text = "Your armor was penetrated!", silent=FALSE)
var/armor = getarmor(def_zone, attack_flag)
if(silent)
return max(0, armor - armour_penetration)
@@ -108,12 +108,6 @@
/mob/living/proc/catch_item(obj/item/I, skip_throw_mode_check = FALSE)
return FALSE
/mob/living/proc/embed_item(obj/item/I)
return
/mob/living/proc/can_embed(obj/item/I)
return FALSE
/mob/living/hitby(atom/movable/AM, skipcatch, hitpush = TRUE, blocked = FALSE, datum/thrownthing/throwingdatum)
// Throwingdatum can be null if someone had an accident() while slipping with an item in hand.
var/obj/item/I
@@ -129,30 +123,17 @@
skipcatch = TRUE
blocked = TRUE
total_damage = block_calculate_resultant_damage(total_damage, block_return)
else if(I && I.throw_speed >= EMBED_THROWSPEED_THRESHOLD && can_embed(I, src) && prob(I.embedding["embed_chance"]) && !HAS_TRAIT(src, TRAIT_PIERCEIMMUNE) && (!HAS_TRAIT(src, TRAIT_AUTO_CATCH_ITEM) || incapacitated() || get_active_held_item()))
embed_item(I)
hitpush = FALSE
skipcatch = TRUE //can't catch the now embedded item
if(I)
var/nosell_hit = SEND_SIGNAL(I, COMSIG_MOVABLE_IMPACT_ZONE, src, impacting_zone, throwingdatum, FALSE, blocked)
if(nosell_hit)
skipcatch = TRUE
hitpush = FALSE
if(!skipcatch && isturf(I.loc) && catch_item(I))
return TRUE
var/dtype = BRUTE
var/volume = I.get_volume_by_throwforce_and_or_w_class()
SEND_SIGNAL(I, COMSIG_MOVABLE_IMPACT_ZONE, src, impacting_zone)
dtype = I.damtype
if (I.throwforce > 0) //If the weapon's throwforce is greater than zero...
if (I.throwhitsound) //...and throwhitsound is defined...
playsound(loc, I.throwhitsound, volume, 1, -1) //...play the weapon's throwhitsound.
else if(I.hitsound) //Otherwise, if the weapon's hitsound is defined...
playsound(loc, I.hitsound, volume, 1, -1) //...play the weapon's hitsound.
else if(!I.throwhitsound) //Otherwise, if throwhitsound isn't defined...
playsound(loc, 'sound/weapons/genhit.ogg',volume, 1, -1) //...play genhit.ogg.
else if(!I.throwhitsound && I.throwforce > 0) //Otherwise, if the item doesn't have a throwhitsound and has a throwforce greater than zero...
playsound(loc, 'sound/weapons/genhit.ogg', volume, 1, -1)//...play genhit.ogg
if(!I.throwforce)// Otherwise, if the item's throwforce is 0...
playsound(loc, 'sound/weapons/throwtap.ogg', 1, volume, -1)//...play throwtap.ogg.
if(!blocked)
visible_message("<span class='danger'>[src] has been hit by [I].</span>", \
"<span class='userdanger'>You have been hit by [I].</span>")
+31 -31
View File
@@ -3,48 +3,48 @@
#define POWER_RESTORATION_SEARCH_APC 2
#define POWER_RESTORATION_APC_FOUND 3
/mob/living/silicon/ai/Life()
if (stat == DEAD)
/mob/living/silicon/ai/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
else //I'm not removing that shitton of tabs, unneeded as they are. -- Urist
//I'm not removing that shitton of tabs, unneeded as they are. -- Urist
//Being dead doesn't mean your temperature never changes
update_gravity(mob_has_gravity())
update_gravity(mob_has_gravity())
handle_status_effects()
handle_status_effects()
if(malfhack && malfhack.aidisabled)
deltimer(malfhacking)
// This proc handles cleanup of screen notifications and
// messenging the client
malfhacked(malfhack)
if(malfhack && malfhack.aidisabled)
deltimer(malfhacking)
// This proc handles cleanup of screen notifications and
// messenging the client
malfhacked(malfhack)
if(isturf(loc) && (QDELETED(eyeobj) || !eyeobj.loc))
view_core()
if(isturf(loc) && (QDELETED(eyeobj) || !eyeobj.loc))
view_core()
if(machine)
machine.check_eye(src)
if(machine)
machine.check_eye(src)
// Handle power damage (oxy)
if(aiRestorePowerRoutine)
// Lost power
adjustOxyLoss(1)
else
// Gain Power
if(getOxyLoss())
adjustOxyLoss(-1)
// Handle power damage (oxy)
if(aiRestorePowerRoutine)
// Lost power
adjustOxyLoss(1)
else
// Gain Power
if(getOxyLoss())
adjustOxyLoss(-1)
if(!lacks_power())
var/area/home = get_area(src)
if(home.powered(EQUIP))
home.use_power(1000, EQUIP)
if(!lacks_power())
var/area/home = get_area(src)
if(home.powered(EQUIP))
home.use_power(1000, EQUIP)
if(aiRestorePowerRoutine >= POWER_RESTORATION_SEARCH_APC)
ai_restore_power()
return
if(aiRestorePowerRoutine >= POWER_RESTORATION_SEARCH_APC)
ai_restore_power()
return
else if(!aiRestorePowerRoutine)
ai_lose_power()
else if(!aiRestorePowerRoutine)
ai_lose_power()
/mob/living/silicon/ai/proc/lacks_power()
var/turf/T = get_turf(src)
@@ -1,5 +1,5 @@
/mob/living/silicon/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE)
/mob/living/silicon/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE)
var/hit_percent = (100-blocked)/100
if(!damage || (!forced && hit_percent <= 0))
return 0
+9 -6
View File
@@ -146,10 +146,11 @@
if(possible_chassis[chassis])
AddElement(/datum/element/mob_holder, chassis, 'icons/mob/pai_item_head.dmi', 'icons/mob/pai_item_rh.dmi', 'icons/mob/pai_item_lh.dmi', ITEM_SLOT_HEAD)
/mob/living/silicon/pai/Life()
/mob/living/silicon/pai/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(hacking)
process_hack()
return ..()
/mob/living/silicon/pai/proc/process_hack()
@@ -282,17 +283,19 @@
. = ..()
. += "A personal AI in holochassis mode. Its master ID string seems to be [master]."
/mob/living/silicon/pai/Life()
if(stat == DEAD)
return
/mob/living/silicon/pai/PhysicalLife()
. = ..()
if(cable)
if(get_dist(src, cable) > 1)
var/turf/T = get_turf(src.loc)
T.visible_message("<span class='warning'>[src.cable] rapidly retracts back into its spool.</span>", "<span class='italics'>You hear a click and the sound of wire spooling rapidly.</span>")
qdel(src.cable)
cable = null
/mob/living/silicon/pai/BiologicalLife()
if(!(. = ..()))
return
silent = max(silent - 1, 0)
. = ..()
/mob/living/silicon/pai/updatehealth()
if(status_flags & GODMODE)
@@ -1,9 +1,6 @@
/mob/living/silicon/robot/Life()
set invisibility = 0
if (src.notransform)
/mob/living/silicon/robot/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
..()
adjustOxyLoss(-10) //we're a robot!
handle_robot_hud_updates()
handle_robot_cell()
@@ -259,7 +259,7 @@
var/prev_locked_down = R.locked_down
sleep(1)
flick("[cyborg_base_icon]_transform", R)
R.notransform = TRUE
R.mob_transforming = TRUE
R.SetLockdown(1)
R.anchored = TRUE
sleep(1)
@@ -270,7 +270,7 @@
R.SetLockdown(0)
R.setDir(SOUTH)
R.anchored = FALSE
R.notransform = FALSE
R.mob_transforming = FALSE
R.update_headlamp()
R.notify_ai(NEW_MODULE)
if(R.hud_used)
@@ -62,7 +62,7 @@
log_reagent("FERMICHEM: [src] has astrally transmitted [message] into [A]")
//Delete the mob if there's no mind! Pay that mob no mind.
/mob/living/simple_animal/astral/Life()
if(!mind)
qdel(src)
/mob/living/simple_animal/astral/PhysicalLife(seconds, times_fired)
. = ..()
if(!mind && !QDELETED(src))
qdel(src)
@@ -115,13 +115,14 @@
Read_Memory()
. = ..()
/mob/living/simple_animal/pet/cat/Runtime/Life()
/mob/living/simple_animal/pet/cat/Runtime/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(!cats_deployed && SSticker.current_state >= GAME_STATE_SETTING_UP)
Deploy_The_Cats()
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
Write_Memory()
memory_saved = TRUE
..()
/mob/living/simple_animal/pet/cat/Runtime/make_babies()
var/mob/baby = ..()
@@ -177,7 +178,9 @@
gold_core_spawnable = NO_SPAWN
unique_pet = TRUE
/mob/living/simple_animal/pet/cat/Life()
/mob/living/simple_animal/pet/cat/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(!stat && !buckled && !client)
if(prob(1))
emote("me", EMOTE_VISIBLE, pick("stretches out for a belly rub.", "wags its tail.", "lies down."))
@@ -269,8 +272,9 @@
to_chat(src, "<span class='notice'>Your name is now <b>\"new_name\"</b>!</span>")
name = new_name
/mob/living/simple_animal/pet/cat/cak/Life()
..()
/mob/living/simple_animal/pet/cat/cak/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(stat)
return
if(health < maxHealth)
@@ -27,8 +27,9 @@
var/obj/item/inventory_mask
gold_core_spawnable = FRIENDLY_SPAWN
/mob/living/simple_animal/crab/Life()
..()
/mob/living/simple_animal/crab/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
//CRAB movement
if(!ckey && !stat)
if(isturf(loc) && !resting && !buckled) //This is so it only moves if it's not inside a closet, gentics machine, etc.
@@ -366,11 +366,12 @@
RemoveElement(/datum/element/mob_holder, held_icon)
AddElement(/datum/element/mob_holder, "old_corgi")
/mob/living/simple_animal/pet/dog/corgi/Ian/Life()
/mob/living/simple_animal/pet/dog/corgi/Ian/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
Write_Memory(FALSE)
memory_saved = TRUE
..()
/mob/living/simple_animal/pet/dog/corgi/Ian/death()
if(!memory_saved)
@@ -419,8 +420,9 @@
fdel(json_file)
WRITE_FILE(json_file, json_encode(file_data))
/mob/living/simple_animal/pet/dog/corgi/Ian/Life()
..()
/mob/living/simple_animal/pet/dog/corgi/Ian/BiologicalLife()
if(!(. = ..()))
return
//Feeding, chasing food, FOOOOODDDD
if(!stat && CHECK_MULTIPLE_BITFIELDS(mobility_flags, MOBILITY_STAND|MOBILITY_MOVE) && !buckled)
@@ -490,8 +492,9 @@
nofur = TRUE
unique_pet = TRUE
/mob/living/simple_animal/pet/dog/corgi/narsie/Life()
..()
/mob/living/simple_animal/pet/dog/corgi/narsie/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
for(var/mob/living/simple_animal/pet/P in range(1, src))
if(P != src && prob(5))
visible_message("<span class='warning'>[src] devours [P]!</span>", \
@@ -615,8 +618,9 @@
return
..()
/mob/living/simple_animal/pet/dog/corgi/Lisa/Life()
..()
/mob/living/simple_animal/pet/dog/corgi/Lisa/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
make_babies()
@@ -628,8 +632,9 @@
setDir(i)
sleep(1)
/mob/living/simple_animal/pet/dog/pug/Life()
..()
/mob/living/simple_animal/pet/dog/pug/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(!stat && CHECK_MULTIPLE_BITFIELDS(mobility_flags, MOBILITY_STAND|MOBILITY_MOVE) && !buckled)
if(prob(1))
emote("me", EMOTE_VISIBLE, pick("chases its tail."))
@@ -46,9 +46,10 @@
udder = null
return ..()
/mob/living/simple_animal/hostile/retaliate/goat/Life()
. = ..()
if(.)
/mob/living/simple_animal/hostile/retaliate/goat/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(stat == CONSCIOUS)
//chance to go crazy and start wacking stuff
if(!enemies.len && prob(1))
Retaliate()
@@ -57,7 +58,6 @@
enemies = list()
LoseTarget()
src.visible_message("<span class='notice'>[src] calms down.</span>")
if(stat == CONSCIOUS)
udder.generateMilk(milk_reagent)
eat_plants()
if(!pulledby)
@@ -160,8 +160,9 @@
else
return ..()
/mob/living/simple_animal/cow/Life()
. = ..()
/mob/living/simple_animal/cow/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(stat == CONSCIOUS)
udder.generateMilk(milk_reagent)
@@ -244,9 +245,8 @@
pixel_x = rand(-6, 6)
pixel_y = rand(0, 10)
/mob/living/simple_animal/chick/Life()
. =..()
if(!.)
/mob/living/simple_animal/chick/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(!stat && !ckey)
amount_grown += rand(1,2)
@@ -254,8 +254,9 @@
new /mob/living/simple_animal/chicken(src.loc)
qdel(src)
/mob/living/simple_animal/chick/holo/Life()
..()
/mob/living/simple_animal/chick/holo/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
amount_grown = 0
/mob/living/simple_animal/chicken
@@ -328,9 +329,8 @@
else
..()
/mob/living/simple_animal/chicken/Life()
. =..()
if(!.)
/mob/living/simple_animal/chicken/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if((!stat && prob(3) && eggsleft > 0) && egg_type)
visible_message("<span class='alertalien'>[src] [pick(layMessage)]</span>")
@@ -403,9 +403,8 @@
. = ..()
++kiwi_count
/mob/living/simple_animal/kiwi/Life()
. =..()
if(!.)
/mob/living/simple_animal/kiwi/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if((!stat && prob(3) && eggsleft > 0) && egg_type)
visible_message("[src] [pick(layMessage)]")
@@ -478,9 +477,8 @@
pixel_x = rand(-6, 6)
pixel_y = rand(0, 10)
/mob/living/simple_animal/babyKiwi/Life()
. =..()
if(!.)
/mob/living/simple_animal/babyKiwi/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(!stat && !ckey)
amount_grown += rand(1,2)
@@ -546,4 +544,4 @@
health = 75
maxHealth = 75
blood_volume = BLOOD_VOLUME_NORMAL
footstep_type = FOOTSTEP_MOB_SHOE
footstep_type = FOOTSTEP_MOB_SHOE
@@ -72,8 +72,8 @@
qdel(src)
//low regen over time
/mob/living/simple_animal/pet/plushie/Life()
if(stat)
/mob/living/simple_animal/pet/plushie/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(health < maxHealth)
heal_overall_damage(5) //Decent life regen, they're not able to hurt anyone so this shouldn't be an issue (butterbear for reference has 10 regen)
@@ -160,7 +160,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
to_chat(src, "<span class='notice'>Your new name <span class='name'>[new_name]</span> anchors itself in your mind.</span>")
fully_replace_character_name(null, new_name)
/mob/living/simple_animal/hostile/guardian/Life() //Dies if the summoner dies
/mob/living/simple_animal/hostile/guardian/PhysicalLife() //Dies if the summoner dies
. = ..()
update_health_hud() //we need to update all of our health displays to match our summoner and we can't practically give the summoner a hook to do it
med_hud_set_health()
@@ -19,8 +19,9 @@
. = ..()
stealthcooldown = 0
/mob/living/simple_animal/hostile/guardian/assassin/Life()
. = ..()
/mob/living/simple_animal/hostile/guardian/assassin/PhysicalLife()
if(!(. = ..()))
return
updatestealthalert()
if(loc == summoner && toggle)
ToggleMode(0)
@@ -11,8 +11,9 @@
var/charging = 0
var/obj/screen/alert/chargealert
/mob/living/simple_animal/hostile/guardian/charger/Life()
. = ..()
/mob/living/simple_animal/hostile/guardian/charger/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(ranged_cooldown <= world.time)
if(!chargealert)
chargealert = throw_alert("charge", /obj/screen/alert/cancharge)
@@ -13,8 +13,9 @@
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Crowd control modules activated. Holoparasite swarm online.</span>"
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! You caught one! OH GOD, EVERYTHING'S ON FIRE. Except you and the fish.</span>"
/mob/living/simple_animal/hostile/guardian/fire/Life()
. = ..()
/mob/living/simple_animal/hostile/guardian/fire/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(summoner)
summoner.ExtinguishMob()
summoner.adjust_fire_stacks(-20)
@@ -125,7 +125,7 @@ mob/living/simple_animal/hostile/bear/butter //The mighty companion to Cak. Seve
attack_verb_continuous = "slaps"
attack_verb_simple = "slap"
/mob/living/simple_animal/hostile/bear/butter/Life() //Heals butter bear really fast when he takes damage.
/mob/living/simple_animal/hostile/bear/butter/BiologicalLife(seconds, times_fired) //Heals butter bear really fast when he takes damage.
if(stat)
return
if(health < maxHealth)
@@ -47,8 +47,9 @@
if(regen_amount)
regen_cooldown = world.time + REGENERATION_DELAY
/mob/living/simple_animal/hostile/carp/Life()
. = ..()
/mob/living/simple_animal/hostile/carp/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(regen_amount && regen_cooldown < world.time)
heal_overall_damage(regen_amount)
@@ -67,11 +67,10 @@
foes = null
return ..()
/mob/living/simple_animal/hostile/Life()
. = ..()
if(!.) //dead
/mob/living/simple_animal/hostile/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
walk(src, 0) //stops walking
return 0
return
/mob/living/simple_animal/hostile/handle_automated_action()
if(AIStatus == AI_OFF)
@@ -23,13 +23,12 @@
deathmessage = "vanishes into thin air! It was a fake!"
has_field_of_vision = FALSE //not meant to be played anyway.
/mob/living/simple_animal/hostile/illusion/Life()
..()
/mob/living/simple_animal/hostile/illusion/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(world.time > life_span)
death()
/mob/living/simple_animal/hostile/illusion/proc/Copy_Parent(mob/living/original, life = 50, hp = 100, damage = 0, replicate = 0 )
appearance = original.appearance
parent_mob = original
@@ -166,8 +166,9 @@
if(!hopping)
Hop()
/mob/living/simple_animal/hostile/jungle/leaper/Life()
. = ..()
/mob/living/simple_animal/hostile/jungle/leaper/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
update_icons()
/mob/living/simple_animal/hostile/jungle/leaper/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
@@ -197,7 +198,7 @@
hopping = TRUE
density = FALSE
pass_flags |= PASSMOB
notransform = TRUE
mob_transforming = TRUE
var/turf/new_turf = locate((target.x + rand(-3,3)),(target.y + rand(-3,3)),target.z)
if(player_hop)
new_turf = get_turf(target)
@@ -209,7 +210,7 @@
/mob/living/simple_animal/hostile/jungle/leaper/proc/FinishHop()
density = TRUE
notransform = FALSE
mob_transforming = FALSE
pass_flags &= ~PASSMOB
hopping = FALSE
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 100, 1)
@@ -220,7 +221,7 @@
/mob/living/simple_animal/hostile/jungle/leaper/proc/BellyFlop()
var/turf/new_turf = get_turf(target)
hopping = TRUE
notransform = TRUE
mob_transforming = TRUE
new /obj/effect/temp_visual/leaper_crush(new_turf)
addtimer(CALLBACK(src, .proc/BellyFlopHop, new_turf), 30)
@@ -231,7 +232,7 @@
/mob/living/simple_animal/hostile/jungle/leaper/proc/Crush()
hopping = FALSE
density = TRUE
notransform = FALSE
mob_transforming = FALSE
playsound(src, 'sound/effects/meteorimpact.ogg', 200, 1)
for(var/mob/living/L in orange(1, src))
L.adjustBruteLoss(35)
@@ -27,8 +27,9 @@
footstep_type = FOOTSTEP_MOB_CLAW
/mob/living/simple_animal/hostile/jungle/mega_arachnid/Life()
..()
/mob/living/simple_animal/hostile/jungle/mega_arachnid/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
return
if(target && ranged_cooldown > world.time && iscarbon(target))
var/mob/living/carbon/C = target
if(!C.legcuffed && C.health < 50)
@@ -40,7 +41,6 @@
minimum_distance = 0
alpha = 255
/mob/living/simple_animal/hostile/jungle/mega_arachnid/Aggro()
..()
alpha = 255

Some files were not shown because too many files have changed in this diff Show More