Merge branch 'master' of github.com:Citadel-Station-13/Citadel-Station-13 into chemmaster
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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)
|
||||
*/
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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)
|
||||
. = ..()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
. = ..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
@@ -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 //////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))))
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user