Merge remote-tracking branch 'citadel/master' into mobility_flags

This commit is contained in:
kevinz000
2020-01-19 16:18:12 -07:00
320 changed files with 5694 additions and 2936 deletions
@@ -266,7 +266,7 @@
/turf/open/indestructible/boss,
/area/ruin/unpowered/ash_walkers)
"aH" = (
/mob/living/simple_animal/hostile/spawner/lavaland/ash_walker,
/obj/structure/lavaland/ash_walker,
/turf/open/lava/smooth{
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
+3 -3
View File
@@ -3675,7 +3675,7 @@
/area/awaymission/snowdin/cave/cavern)
"im" = (
/obj/effect/decal/cleanable/blood/old,
/mob/living/simple_animal/hostile/spawner/nether{
/obj/structure/spawner/nether{
max_mobs = 5
},
/turf/open/floor/engine/cult{
@@ -8278,7 +8278,7 @@
/turf/open/floor/engine/cult,
/area/awaymission/snowdin/post/cavern2)
"sb" = (
/mob/living/simple_animal/hostile/spawner/nether{
/obj/structure/spawner/nether{
max_mobs = 4;
name = "weak netherworld link"
},
@@ -10179,7 +10179,7 @@
/obj/structure/cable/yellow{
icon_state = "2-8"
},
/mob/living/simple_animal/hostile/spawner/nether{
/obj/structure/spawner/nether{
max_mobs = 4;
name = "weak netherworld link"
},
+8 -8
View File
@@ -103,7 +103,7 @@
},
/area/awaymission/caves/BMP_asteroid/level_four)
"at" = (
/mob/living/simple_animal/hostile/spawner/skeleton,
/obj/structure/spawner/skeleton,
/turf/open/floor/plating/asteroid/basalt/lava{
initial_gas_mix = "n2=23;o2=14"
},
@@ -164,7 +164,7 @@
},
/area/awaymission/caves/BMP_asteroid/level_four)
"aB" = (
/mob/living/simple_animal/hostile/spawner/skeleton,
/obj/structure/spawner/skeleton,
/turf/open/floor/engine/cult{
initial_gas_mix = "n2=23;o2=14"
},
@@ -374,7 +374,7 @@
},
/area/awaymission/caves/BMP_asteroid/level_three)
"be" = (
/mob/living/simple_animal/hostile/spawner/mining/goliath,
/obj/structure/spawner/mining/goliath,
/turf/open/floor/plating/asteroid/basalt{
initial_gas_mix = "n2=23;o2=14"
},
@@ -504,7 +504,7 @@
/area/awaymission/caves/BMP_asteroid/level_three)
"bw" = (
/obj/effect/decal/cleanable/blood,
/mob/living/simple_animal/hostile/spawner/skeleton,
/obj/structure/spawner/skeleton,
/turf/open/floor/engine/cult{
initial_gas_mix = "n2=23;o2=14"
},
@@ -930,7 +930,7 @@
/turf/closed/wall,
/area/awaymission/caves/BMP_asteroid/level_two)
"cL" = (
/mob/living/simple_animal/hostile/spawner/mining/basilisk,
/obj/structure/spawner/mining/basilisk,
/turf/open/floor/plating/asteroid/basalt{
initial_gas_mix = "n2=23;o2=14"
},
@@ -1644,7 +1644,7 @@
/turf/open/floor/plasteel,
/area/awaymission/caves/listeningpost)
"fb" = (
/mob/living/simple_animal/hostile/spawner/mining/hivelord,
/obj/structure/spawner/mining/hivelord,
/turf/open/floor/plating/asteroid/basalt{
initial_gas_mix = "n2=23;o2=14"
},
@@ -2133,7 +2133,7 @@
/turf/open/floor/plasteel/recharge_floor,
/area/awaymission/caves/BMP_asteroid)
"gD" = (
/mob/living/simple_animal/hostile/spawner/mining/hivelord,
/obj/structure/spawner/mining/hivelord,
/turf/open/floor/plating/asteroid/basalt{
initial_gas_mix = "n2=23;o2=14"
},
@@ -2206,7 +2206,7 @@
},
/area/awaymission/caves/BMP_asteroid)
"gQ" = (
/mob/living/simple_animal/hostile/spawner/mining/basilisk,
/obj/structure/spawner/mining/basilisk,
/turf/open/floor/plating/asteroid/basalt{
initial_gas_mix = "n2=23;o2=14"
},
+3 -3
View File
@@ -3670,7 +3670,7 @@
/area/awaymission/snowdin/cave/cavern)
"im" = (
/obj/effect/decal/cleanable/blood/old,
/mob/living/simple_animal/hostile/spawner/nether{
/obj/structure/spawner/nether{
max_mobs = 5
},
/turf/open/floor/engine/cult{
@@ -8333,7 +8333,7 @@
/turf/open/floor/engine/cult,
/area/awaymission/snowdin/post/cavern2)
"sb" = (
/mob/living/simple_animal/hostile/spawner/nether{
/obj/structure/spawner/nether{
max_mobs = 4;
name = "weak netherworld link"
},
@@ -10243,7 +10243,7 @@
/obj/structure/cable/yellow{
icon_state = "2-8"
},
/mob/living/simple_animal/hostile/spawner/nether{
/obj/structure/spawner/nether{
max_mobs = 4;
name = "weak netherworld link"
},
+72 -34
View File
@@ -6672,12 +6672,6 @@
/obj/structure/closet/emcloset,
/turf/open/floor/plating,
/area/maintenance/port/fore)
"aoZ" = (
/obj/machinery/atmospherics/components/binary/valve/digital{
name = "Waste Release"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"apa" = (
/obj/machinery/atmospherics/pipe/simple/green/visible{
dir = 4
@@ -6916,7 +6910,7 @@
/turf/open/floor/plasteel,
/area/janitor)
"apI" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{
/obj/machinery/atmospherics/components/unary/relief_valve/atmos/atmos_waste{
dir = 1
},
/obj/structure/lattice/catwalk,
@@ -25394,6 +25388,7 @@
/obj/structure/sign/poster/official/state_laws{
pixel_y = -32
},
/obj/effect/landmark/start/cyborg,
/turf/open/floor/plasteel,
/area/science/robotics/mechbay)
"blu" = (
@@ -25550,7 +25545,7 @@
/area/science/lab)
"blM" = (
/obj/effect/turf_decal/bot,
/obj/effect/landmark/start/roboticist,
/obj/effect/landmark/start/cyborg,
/turf/open/floor/plasteel,
/area/science/robotics/lab)
"blO" = (
@@ -26059,6 +26054,7 @@
/area/maintenance/aft)
"bnb" = (
/obj/machinery/recharge_station,
/obj/effect/landmark/start/cyborg,
/turf/open/floor/plasteel,
/area/science/robotics/mechbay)
"bnc" = (
@@ -49658,6 +49654,7 @@
/area/ai_monitored/turret_protected/aisat_interior)
"cum" = (
/obj/machinery/recharge_station,
/obj/effect/landmark/start/cyborg,
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat/service)
"cun" = (
@@ -52362,6 +52359,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/effect/landmark/start/roboticist,
/turf/open/floor/plasteel,
/area/science/robotics/lab)
"cHT" = (
@@ -52438,7 +52436,7 @@
"cIc" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/bot,
/obj/effect/landmark/start/roboticist,
/obj/effect/landmark/start/cyborg,
/turf/open/floor/plasteel,
/area/science/robotics/lab)
"cId" = (
@@ -53471,14 +53469,11 @@
/turf/open/floor/wood,
/area/crew_quarters/bar)
"est" = (
/obj/machinery/light{
dir = 1
},
/obj/effect/turf_decal/tile/blue{
dir = 4
},
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-03"
/obj/machinery/computer/shuttle/mining/common{
dir = 4
},
/turf/open/floor/plasteel/white/corner{
dir = 1
@@ -53625,6 +53620,10 @@
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"eZP" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/space/basic,
/area/hallway/secondary/entry)
"fbm" = (
/obj/structure/chair/comfy/brown{
dir = 4
@@ -54818,6 +54817,15 @@
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
"jnX" = (
/obj/machinery/door/airlock/external{
name = "Common Mining Shuttle Bay"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
"job" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -55374,6 +55382,10 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"kRw" = (
/obj/effect/landmark/start/roboticist,
/turf/open/floor/plasteel/white,
/area/science/robotics/lab)
"kSb" = (
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -56831,6 +56843,18 @@
},
/turf/open/floor/plasteel/dark,
/area/maintenance/port)
"rHa" = (
/obj/docking_port/stationary{
dir = 8;
dwidth = 3;
height = 5;
id = "commonmining_home";
name = "SS13: Common Mining Dock";
roundstart_template = /datum/map_template/shuttle/mining_common/meta;
width = 7
},
/turf/open/space/basic,
/area/space)
"rKc" = (
/obj/structure/lattice/catwalk,
/obj/structure/cable{
@@ -58110,6 +58134,11 @@
"vYa" = (
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"vZs" = (
/obj/structure/lattice,
/obj/structure/lattice,
/turf/open/space,
/area/space/nearstation)
"wcy" = (
/obj/structure/reagent_dispensers/water_cooler,
/obj/structure/cable{
@@ -58551,6 +58580,15 @@
},
/turf/open/floor/plasteel,
/area/science/circuit)
"ycF" = (
/obj/machinery/door/airlock/external{
name = "Common Mining Shuttle Bay"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
"ydD" = (
/obj/effect/turf_decal/bot,
/obj/machinery/suit_storage_unit/rd,
@@ -66662,7 +66700,7 @@ aaa
aaa
aaa
aaa
aaf
aoV
aaa
aaa
aaa
@@ -66919,12 +66957,12 @@ aaa
aaa
aaa
aaa
aaf
aoV
aaa
rHa
aaa
aaa
aaa
aaa
aaf
aoV
aaa
aaa
aaa
@@ -67176,12 +67214,12 @@ aaa
aaa
aaa
aaa
aaf
aaa
aaa
aaa
aaf
aaf
asE
asE
ycF
asE
asE
aoV
aaa
aaa
aaa
@@ -67434,11 +67472,11 @@ aaa
aaa
aaa
aaf
aaa
aaf
aaa
aAC
eZP
auP
eZP
aaf
vZs
aaa
aaa
aaa
@@ -67691,10 +67729,10 @@ aaa
aaa
aaa
arB
awW
awW
asE
arB
jnX
asE
aAC
aaf
aaa
aaa
@@ -91636,7 +91674,7 @@ bMK
cbB
alk
alX
aoZ
cbA
bQt
apa
cgX
@@ -102905,7 +102943,7 @@ aYV
bfV
bhw
cHM
biL
kRw
blB
blF
cHS
+71 -16
View File
@@ -159,7 +159,9 @@
/area/construction/mining/aux_base)
"abe" = (
/obj/effect/turf_decal/delivery,
/obj/item/twohanded/required/kirbyplants/random,
/obj/effect/turf_decal/stripes/end{
dir = 1
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"abf" = (
@@ -182,7 +184,7 @@
pixel_x = -23
},
/obj/effect/turf_decal/stripes/line{
dir = 9
dir = 8
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
@@ -108781,6 +108783,7 @@
"dCs" = (
/obj/effect/decal/cleanable/oil,
/obj/effect/turf_decal/bot,
/obj/effect/landmark/start/cyborg,
/turf/open/floor/plasteel,
/area/science/robotics/lab)
"dCt" = (
@@ -108800,6 +108803,7 @@
"dCu" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/bot,
/obj/effect/landmark/start/cyborg,
/turf/open/floor/plasteel,
/area/science/robotics/lab)
"dCv" = (
@@ -110235,6 +110239,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/bot,
/obj/effect/landmark/start/cyborg,
/turf/open/floor/plasteel,
/area/science/robotics/lab)
"dEL" = (
@@ -110253,6 +110258,7 @@
/area/science/robotics/lab)
"dEM" = (
/obj/effect/turf_decal/bot,
/obj/effect/landmark/start/cyborg,
/turf/open/floor/plasteel,
/area/science/robotics/lab)
"dEN" = (
@@ -125760,6 +125766,17 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
"eYg" = (
/obj/machinery/door/airlock/external{
name = "External Docking Port"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"faI" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -125918,6 +125935,15 @@
},
/turf/open/floor/engine,
/area/science/mixing)
"gdb" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"giN" = (
/obj/structure/window/reinforced{
dir = 8
@@ -125929,6 +125955,19 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall/r_wall,
/area/science/circuit)
"gmn" = (
/obj/machinery/door/airlock/external{
name = "External Docking Port"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"gut" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -126063,6 +126102,11 @@
/obj/structure/sign/warning/vacuum,
/turf/closed/wall/r_wall,
/area/chapel/office)
"hlu" = (
/obj/effect/turf_decal/delivery,
/obj/machinery/computer/shuttle/mining/common,
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"hrP" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -127466,6 +127510,17 @@
},
/turf/open/floor/plasteel,
/area/science/research/abandoned)
"xDY" = (
/obj/docking_port/stationary{
dwidth = 3;
height = 5;
id = "commonmining_home";
name = "SS13: Common Mining Dock";
roundstart_template = /datum/map_template/shuttle/mining_common/meta;
width = 7
},
/turf/open/space/basic,
/area/space)
"xDZ" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 1
@@ -159473,8 +159528,8 @@ aaa
aaa
aaa
aaa
aaa
aaa
rqh
rqh
aad
aad
aaa
@@ -159729,8 +159784,8 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaO
aaO
aaO
aaO
abf
@@ -159985,10 +160040,10 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaO
xDY
eYg
gdb
gmn
abe
abp
abC
@@ -160243,10 +160298,10 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaO
abe
aaO
aaO
hlu
abq
abD
abD
@@ -160501,7 +160556,7 @@ aaa
aaa
aaa
aaa
aaa
rqh
aaO
aaO
abf
@@ -160758,8 +160813,8 @@ aaa
aaa
aaa
aaa
aaa
aaa
rqh
rqh
aad
aad
aaa
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -25468,6 +25468,7 @@
"biw" = (
/obj/machinery/recharge_station,
/obj/effect/turf_decal/bot,
/obj/effect/landmark/start/cyborg,
/turf/open/floor/plasteel/dark,
/area/science/robotics/mechbay)
"bix" = (
@@ -26658,6 +26659,7 @@
/obj/effect/turf_decal/tile/green{
dir = 4
},
/obj/effect/landmark/start/roboticist,
/turf/open/floor/plasteel,
/area/science/robotics/lab)
"blJ" = (
@@ -27579,6 +27581,7 @@
/area/science/robotics/lab)
"bnQ" = (
/obj/effect/turf_decal/bot,
/obj/effect/landmark/start/cyborg,
/turf/open/floor/plasteel,
/area/science/robotics/lab)
"bnR" = (
@@ -28095,8 +28098,8 @@
/turf/open/floor/plasteel/dark,
/area/science/robotics/lab)
"boY" = (
/obj/effect/landmark/start/roboticist,
/obj/effect/turf_decal/bot,
/obj/effect/landmark/start/cyborg,
/turf/open/floor/plasteel,
/area/science/robotics/lab)
"boZ" = (
@@ -98808,8 +98811,8 @@ beI
bkt
blH
bmO
bnQ
bnQ
boY
boY
bqi
bry
bsZ
@@ -99065,7 +99068,7 @@ bju
bkt
blI
bmO
bnQ
boY
boY
bqi
brz
+5 -1
View File
@@ -7891,6 +7891,10 @@
},
/turf/open/floor/engine/cult,
/area/wizard_station)
"sa" = (
/obj/item/hilbertshotel/ghostdojo,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"sc" = (
/obj/docking_port/stationary{
area_type = /area/syndicate_mothership/control;
@@ -47751,7 +47755,7 @@ Of
QF
Nd
Sd
Sd
sa
Nd
WN
Ur
+124
View File
@@ -0,0 +1,124 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/mining)
"b" = (
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/plating,
/area/shuttle/mining)
"c" = (
/obj/structure/table,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/mining)
"d" = (
/obj/machinery/computer/shuttle/mining/common,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/mining)
"e" = (
/turf/open/floor/mineral/titanium,
/area/shuttle/mining)
"f" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/mining)
"g" = (
/obj/machinery/light{
dir = 8
},
/turf/open/floor/mineral/titanium,
/area/shuttle/mining)
"h" = (
/obj/machinery/door/airlock/titanium{
name = "Lavaland Shuttle Airlock"
},
/obj/docking_port/mobile{
dir = 8;
dwidth = 3;
height = 5;
id = "mining_common";
name = "lavaland shuttle";
port_direction = 4;
width = 7
},
/turf/open/floor/plating,
/area/shuttle/mining)
"i" = (
/obj/structure/closet/crate,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/mining)
"j" = (
/obj/structure/shuttle/engine/heater,
/obj/structure/window/reinforced{
dir = 1;
layer = 2.9
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/window/reinforced{
dir = 4
},
/turf/open/floor/plating,
/area/shuttle/mining)
"k" = (
/obj/structure/ore_box,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/mining)
"l" = (
/obj/structure/shuttle/engine/propulsion/burst,
/turf/open/floor/plating/airless,
/area/shuttle/mining)
"Q" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/open/floor/mineral/titanium,
/area/shuttle/mining)
(1,1,1) = {"
a
a
b
a
b
a
a
"}
(2,1,1) = {"
a
c
e
g
f
i
a
"}
(3,1,1) = {"
b
d
Q
e
f
j
l
"}
(4,1,1) = {"
a
c
e
e
f
k
a
"}
(5,1,1) = {"
a
a
b
h
b
a
a
"}
+6
View File
@@ -197,3 +197,9 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(
#define TOTAL_MASS_HAND_REPLACEMENT 5 //standard punching stamina cost. most hand replacements are huge items anyway.
#define TOTAL_MASS_MEDIEVAL_WEAPON 3.6 //very, very generic average sword/warpick/etc. weight in pounds.
#define TOTAL_MASS_TOY_SWORD 1.5
//bullet_act() return values
#define BULLET_ACT_HIT "HIT" //It's a successful hit, whatever that means in the context of the thing it's hitting.
#define BULLET_ACT_BLOCK "BLOCK" //It's a blocked hit, whatever that means in the context of the thing it's hitting.
#define BULLET_ACT_FORCE_PIERCE "PIERCE" //It pierces through the object regardless of the bullet being piercing by default.
#define BULLET_ACT_TURF "TURF" //It hit us but it should hit something on the same turf too. Usually used for turfs.
+2
View File
@@ -302,6 +302,7 @@
//Nanites
#define COMSIG_HAS_NANITES "has_nanites" //() returns TRUE if nanites are found
#define COMSIG_NANITE_IS_STEALTHY "nanite_is_stealthy" //() returns TRUE if nanites have stealth
#define COMSIG_NANITE_GET_PROGRAMS "nanite_get_programs" //(list/nanite_programs) - makes the input list a copy the nanites' program list
#define COMSIG_NANITE_SET_VOLUME "nanite_set_volume" //(amount) Sets current nanite volume to the given amount
#define COMSIG_NANITE_ADJUST_VOLUME "nanite_adjust" //(amount) Adjusts nanite volume by the given amount
@@ -310,6 +311,7 @@
#define COMSIG_NANITE_SET_SAFETY "nanite_set_safety" //(amount) Sets safety threshold to the given amount
#define COMSIG_NANITE_SET_REGEN "nanite_set_regen" //(amount) Sets regeneration rate to the given amount
#define COMSIG_NANITE_SIGNAL "nanite_signal" //(code(1-9999)) Called when sending a nanite signal to a mob.
#define COMSIG_NANITE_COMM_SIGNAL "nanite_comm_signal" //(comm_code(1-9999), comm_message) Called when sending a nanite comm signal to a mob.
#define COMSIG_NANITE_SCAN "nanite_scan" //(mob/user, full_scan) - sends to chat a scan of the nanites to the user, returns TRUE if nanites are detected
#define COMSIG_NANITE_UI_DATA "nanite_ui_data" //(list/data, scan_level) - adds nanite data to the given data list - made for ui_data procs
#define COMSIG_NANITE_ADD_PROGRAM "nanite_add_program" //(datum/nanite_program/new_program, datum/nanite_program/source_program) Called when adding a program to a nanite component
+1
View File
@@ -60,6 +60,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define FLYING (1<<1)
#define VENTCRAWLING (1<<2)
#define FLOATING (1<<3)
#define UNSTOPPABLE (1<<4) //When moving, will Bump()/Cross()/Uncross() everything, but won't be stopped.
//Fire and Acid stuff, for resistance_flags
#define LAVA_PROOF (1<<0)
-24
View File
@@ -25,30 +25,6 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
#define NOT_IMPLEMENTED "NOT_IMPLEMENTED"
#define MIDNIGHT_ROLLOVER 864000 //number of deciseconds in a day
#define JANUARY 1
#define FEBRUARY 2
#define MARCH 3
#define APRIL 4
#define MAY 5
#define JUNE 6
#define JULY 7
#define AUGUST 8
#define SEPTEMBER 9
#define OCTOBER 10
#define NOVEMBER 11
#define DECEMBER 12
//Select holiday names -- If you test for a holiday in the code, make the holiday's name a define and test for that instead
#define NEW_YEAR "New Year"
#define VALENTINES "Valentine's Day"
#define APRIL_FOOLS "April Fool's Day"
#define EASTER "Easter"
#define HALLOWEEN "Halloween"
#define CHRISTMAS "Christmas"
#define FESTIVE_SEASON "Festive Season"
//Human Overlays Indexes/////////
//LOTS OF CIT CHANGES HERE. BE CAREFUL WHEN UPSTREAM ADDS MORE LAYERS
#define MUTATIONS_LAYER 32 //mutations. Tk headglows, cold resistance glow, etc
+20
View File
@@ -0,0 +1,20 @@
//Defaults
#define MOVE_FORCE_DEFAULT 1000
#define MOVE_RESIST_DEFAULT 1000
#define PULL_FORCE_DEFAULT 1000
//Factors/modifiers
#define MOVE_FORCE_PULL_RATIO 1 //Same move force to pull objects
#define MOVE_FORCE_PUSH_RATIO 1 //Same move force to normally push
#define MOVE_FORCE_FORCEPUSH_RATIO 2 //2x move force to forcefully push
#define MOVE_FORCE_CRUSH_RATIO 3 //3x move force to do things like crush objects
#define MOVE_FORCE_THROW_RATIO 1 //Same force throw as resist to throw objects
#define MOVE_FORCE_OVERPOWERING (MOVE_FORCE_DEFAULT * MOVE_FORCE_CRUSH_RATIO * 10)
#define MOVE_FORCE_EXTREMELY_STRONG (MOVE_FORCE_DEFAULT * MOVE_FORCE_CRUSH_RATIO * 3)
#define MOVE_FORCE_VERY_STRONG ((MOVE_FORCE_DEFAULT * MOVE_FORCE_CRUSH_RATIO) - 1)
#define MOVE_FORCE_STRONG (MOVE_FORCE_DEFAULT * 2)
#define MOVE_FORCE_NORMAL MOVE_FORCE_DEFAULT
#define MOVE_FORCE_WEAK (MOVE_FORCE_DEFAULT / 2)
#define MOVE_FORCE_VERY_WEAK ((MOVE_FORCE_DEFAULT / MOVE_FORCE_CRUSH_RATIO) + 1)
#define MOVE_FORCE_EXTREMELY_WEAK (MOVE_FORCE_DEFAULT / (MOVE_FORCE_CRUSH_RATIO * 3))
+24
View File
@@ -1,3 +1,27 @@
#define MIDNIGHT_ROLLOVER 864000 //number of deciseconds in a day
#define JANUARY 1
#define FEBRUARY 2
#define MARCH 3
#define APRIL 4
#define MAY 5
#define JUNE 6
#define JULY 7
#define AUGUST 8
#define SEPTEMBER 9
#define OCTOBER 10
#define NOVEMBER 11
#define DECEMBER 12
//Select holiday names -- If you test for a holiday in the code, make the holiday's name a define and test for that instead
#define NEW_YEAR "New Year"
#define VALENTINES "Valentine's Day"
#define APRIL_FOOLS "April Fool's Day"
#define EASTER "Easter"
#define HALLOWEEN "Halloween"
#define CHRISTMAS "Christmas"
#define FESTIVE_SEASON "Festive Season"
/*
Days of the week to make it easier to reference them.
+2
View File
@@ -182,6 +182,7 @@
#define TRAIT_AUTO_CATCH_ITEM "auto_catch_item"
#define TRAIT_CLOWN_MENTALITY "clown_mentality" // The future is now, clownman.
#define TRAIT_FREESPRINT "free_sprinting"
#define TRAIT_NO_TELEPORT "no-teleport" //you just can't
#define TRAIT_NO_ALCOHOL "alcohol_intolerance"
// common trait sources
@@ -243,4 +244,5 @@
#define NUKEOP_ANTAGONIST "nukeop-antagonist"
#define MADE_UNCLONEABLE "made-uncloneable"
#define NUKEOP_TRAIT "nuke-op"
#define MEGAFAUNA_TRAIT "megafauna"
#define DEATHSQUAD_TRAIT "deathsquad"
+4
View File
@@ -120,6 +120,10 @@
if (CONFIG_GET(flag/log_vote))
WRITE_LOG(GLOB.world_game_log, "VOTE: [text]")
/proc/log_craft(text)
if (CONFIG_GET(flag/log_craft))
WRITE_LOG(GLOB.world_crafting_log, "CRAFT: [text]")
/proc/log_topic(text)
WRITE_LOG(GLOB.world_game_log, "TOPIC: [text]")
+1 -1
View File
@@ -1276,7 +1276,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
invisibility = 101
density = FALSE
see_in_dark = 1e6
anchored = TRUE
move_resist = INFINITY
var/ready_to_die = FALSE
/mob/dview/Initialize() //Properly prevents this mob from gaining huds or joining any global lists
+4 -1
View File
@@ -101,7 +101,10 @@ GLOBAL_LIST_INIT(bitfields, list(
),
"movement_type" = list(
"GROUND" = GROUND,
"FLYING" = FLYING
"FLYING" = FLYING,
"VENTCRAWLING" = VENTCRAWLING,
"FLOATING" = FLOATING,
"UNSTOPPABLE" = UNSTOPPABLE
),
"resistance_flags" = list(
"LAVA_PROOF" = LAVA_PROOF,
+2
View File
@@ -32,6 +32,8 @@ GLOBAL_VAR(world_map_error_log)
GLOBAL_PROTECT(world_map_error_log)
GLOBAL_VAR(subsystem_log)
GLOBAL_PROTECT(subsystem_log)
GLOBAL_VAR(world_crafting_log)
GLOBAL_PROTECT(world_crafting_log)
GLOBAL_LIST_EMPTY(bombers)
GLOBAL_PROTECT(bombers)
@@ -43,6 +43,8 @@
/datum/config_entry/flag/log_vote // log voting
/datum/config_entry/flag/log_craft // log crafting
/datum/config_entry/flag/log_whisper // log client whisper
/datum/config_entry/flag/log_attack // log attack messages
+1
View File
@@ -55,6 +55,7 @@ SUBSYSTEM_DEF(throwing)
var/dist_y
var/dx
var/dy
var/force = MOVE_FORCE_DEFAULT
var/pure_diagonal
var/diagonal_error
var/datum/callback/callback
+3
View File
@@ -548,6 +548,9 @@
cooldown = world.time
owner.playsound_local(box, 'sound/misc/box_deploy.ogg', 50, TRUE)
/datum/action/item_action/flash
name = "Flash"
//Preset for spells
/datum/action/spell_action
check_flags = 0
+14 -1
View File
@@ -37,6 +37,7 @@
/datum/component/nanites/RegisterWithParent()
. = ..()
RegisterSignal(parent, COMSIG_HAS_NANITES, .proc/confirm_nanites)
RegisterSignal(parent, COMSIG_NANITE_IS_STEALTHY, .proc/check_stealth)
RegisterSignal(parent, COMSIG_NANITE_UI_DATA, .proc/nanite_ui_data)
RegisterSignal(parent, COMSIG_NANITE_GET_PROGRAMS, .proc/get_programs)
RegisterSignal(parent, COMSIG_NANITE_SET_VOLUME, .proc/set_volume)
@@ -57,10 +58,12 @@
RegisterSignal(parent, COMSIG_LIVING_MINOR_SHOCK, .proc/on_minor_shock)
RegisterSignal(parent, COMSIG_SPECIES_GAIN, .proc/check_viable_biotype)
RegisterSignal(parent, COMSIG_NANITE_SIGNAL, .proc/receive_signal)
RegisterSignal(parent, COMSIG_NANITE_COMM_SIGNAL, .proc/receive_comm_signal)
/datum/component/nanites/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, list(COMSIG_HAS_NANITES,
COMSIG_NANITE_IS_STEALTHY,
COMSIG_NANITE_UI_DATA,
COMSIG_NANITE_GET_PROGRAMS,
COMSIG_NANITE_SET_VOLUME,
@@ -79,7 +82,8 @@
COMSIG_LIVING_MINOR_SHOCK,
COMSIG_MOVABLE_HEAR,
COMSIG_SPECIES_GAIN,
COMSIG_NANITE_SIGNAL))
COMSIG_NANITE_SIGNAL,
COMSIG_NANITE_COMM_SIGNAL))
/datum/component/nanites/Destroy()
STOP_PROCESSING(SSnanites, src)
@@ -188,6 +192,9 @@
var/datum/nanite_program/NP = X
NP.on_minor_shock()
/datum/component/nanites/proc/check_stealth(datum/source)
return stealth
/datum/component/nanites/proc/on_death(datum/source, gibbed)
for(var/X in programs)
var/datum/nanite_program/NP = X
@@ -198,6 +205,12 @@
var/datum/nanite_program/NP = X
NP.receive_signal(code, source)
/datum/component/nanites/proc/receive_comm_signal(datum/source, comm_code, comm_message, comm_source = "an unidentified source")
for(var/X in programs)
if(istype(X, /datum/nanite_program/triggered/comm))
var/datum/nanite_program/triggered/comm/NP = X
NP.receive_comm_signal(comm_code, comm_message, comm_source)
/datum/component/nanites/proc/check_viable_biotype()
if(!(MOB_ORGANIC in host_mob.mob_biotypes) && !(MOB_UNDEAD in host_mob.mob_biotypes))
qdel(src) //bodytype no longer sustains nanites
+49
View File
@@ -0,0 +1,49 @@
/datum/component/spawner
var/mob_types = list(/mob/living/simple_animal/hostile/carp)
var/spawn_time = 300 //30 seconds default
var/list/spawned_mobs = list()
var/spawn_delay = 0
var/max_mobs = 5
var/spawn_text = "emerges from"
var/list/faction = list("mining")
/datum/component/spawner/Initialize(_mob_types, _spawn_time, _faction, _spawn_text, _max_mobs)
if(_spawn_time)
spawn_time=_spawn_time
if(_mob_types)
mob_types=_mob_types
if(_faction)
faction=_faction
if(_spawn_text)
spawn_text=_spawn_text
if(_max_mobs)
max_mobs=_max_mobs
RegisterSignal(parent, list(COMSIG_PARENT_QDELETING), .proc/stop_spawning)
START_PROCESSING(SSprocessing, src)
/datum/component/spawner/process()
try_spawn_mob()
/datum/component/spawner/proc/stop_spawning(force, hint)
STOP_PROCESSING(SSprocessing, src)
for(var/mob/living/simple_animal/L in spawned_mobs)
if(L.nest == src)
L.nest = null
spawned_mobs = null
/datum/component/spawner/proc/try_spawn_mob()
var/atom/P = parent
if(spawned_mobs.len >= max_mobs)
return 0
if(spawn_delay > world.time)
return 0
spawn_delay = world.time + spawn_time
var/chosen_mob_type = pick(mob_types)
var/mob/living/simple_animal/L = new chosen_mob_type(P.loc)
L.flags_1 |= (P.flags_1 & ADMIN_SPAWNED_1)
spawned_mobs += L
L.nest = src
L.faction = src.faction
P.visible_message("<span class='danger'>[L] [spawn_text] [P].</span>")
@@ -0,0 +1,26 @@
/datum/element/dusts_on_catatonia
element_flags = ELEMENT_DETACH
var/list/mob/attached_mobs = list()
/datum/element/dusts_on_catatonia/Attach(datum/target,penalize = FALSE)
. = ..()
if(!ismob(target))
return ELEMENT_INCOMPATIBLE
var/mob/M = target
if(!(M in attached_mobs))
attached_mobs += M
START_PROCESSING(SSprocessing,src)
/datum/element/dusts_on_catatonia/Detach(mob/M)
. = ..()
if(M in attached_mobs)
attached_mobs -= M
if(!attached_mobs.len)
STOP_PROCESSING(SSprocessing,src)
/datum/element/dusts_on_catatonia/process()
for(var/m in attached_mobs)
var/mob/M = m
if(!M.key && !M.get_ghost())
M.dust(force = TRUE)
Detach(M)
+1 -1
View File
@@ -66,7 +66,7 @@
var/area/A = get_area(curturf)
var/area/B = get_area(destturf)
if(!forced && (A.noteleport || B.noteleport))
if(!forced && (HAS_TRAIT(teleatom, TRAIT_NO_TELEPORT) || A.noteleport || B.noteleport))
return FALSE
if(SEND_SIGNAL(destturf, COMSIG_ATOM_INTERCEPT_TELEPORT, channel, curturf, destturf))
+1 -1
View File
@@ -26,7 +26,7 @@
if(A.grab_state >= GRAB_AGGRESSIVE)
D.grabbedby(A, 1)
else
A.start_pulling(D, 1)
A.start_pulling(D, supress_message = TRUE)
if(A.pulling)
D.drop_all_held_items()
D.stop_pulling()
@@ -239,7 +239,14 @@
mood_change = -3
timeout = 1000
/datum/mood_event/nanite_sadness
description = "<span class='warning robot'>+++++++HAPPINESS SUPPRESSION+++++++</span>\n"
mood_change = -7
/datum/mood_event/daylight_2
description = "<span class='boldwarning'>I have been scorched by the unforgiving rays of the sun.</span>\n"
mood_change = -6
timeout = 1200
/datum/mood_event/nanite_sadness/add_effects(message)
description = "<span class='warning robot'>+++++++[message]+++++++</span>\n"
@@ -142,6 +142,16 @@
mood_change = 2
timeout = 15 MINUTES
/datum/mood_event/nanite_happiness
description = "<span class='nicegreen robot'>+++++++HAPPINESS ENHANCEMENT+++++++</span>\n"
mood_change = 7
/datum/mood_event/nanite_happiness/add_effects(message)
description = "<span class='nicegreen robot'>+++++++[message]+++++++</span>\n"
/datum/mood_event/area
description = "" //Fill this out in the area
mood_change = 0
//Power gamer stuff below
/datum/mood_event/drankblood
description = "<span class='nicegreen'>I have fed greedly from that which nourishes me.</span>\n"
+8
View File
@@ -131,6 +131,10 @@
port_id = "mining"
can_be_bought = FALSE
/datum/map_template/shuttle/mining_common
port_id = "mining_common"
can_be_bought = FALSE
/datum/map_template/shuttle/cargo
port_id = "cargo"
can_be_bought = FALSE
@@ -493,6 +497,10 @@
suffix = "delta"
name = "labour shuttle (Delta)"
/datum/map_template/shuttle/mining_common/meta
suffix = "meta"
name = "lavaland shuttle (Meta)"
/datum/map_template/shuttle/arrival/delta
suffix = "delta"
name = "arrival shuttle (Delta)"
+1 -1
View File
@@ -626,7 +626,7 @@
if(do_after(mob_viewer, 35, null, mob_viewer))
if(isliving(mob_viewer))
var/mob/living/L = mob_viewer
to_chat(mob_viewer, "<span class='notice'>You succesfuly remove the durathread strand.</span>")
to_chat(mob_viewer, "<span class='notice'>You successfully remove the durathread strand.</span>")
L.remove_status_effect(STATUS_EFFECT_CHOKINGSTRAND)
+1 -1
View File
@@ -360,7 +360,7 @@
SEND_SIGNAL(src, COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume)
return
/atom/proc/hitby(atom/movable/AM, skipcatch, hitpush, blocked)
/atom/proc/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
if(density && !has_gravity(AM)) //thrown stuff bounces off dense stuff in no grav, unless the thrown stuff ends up inside what it hit(embedding, bola, etc...).
addtimer(CALLBACK(src, .proc/hitby_react, AM), 2)
+38 -14
View File
@@ -3,6 +3,9 @@
var/last_move = null
var/last_move_time = 0
var/anchored = FALSE
var/move_resist = MOVE_RESIST_DEFAULT
var/move_force = MOVE_FORCE_DEFAULT
var/pull_force = PULL_FORCE_DEFAULT
var/datum/thrownthing/throwing = null
var/throw_speed = 2 //How many tiles to move per ds when being thrown. Float values are fully supported
var/throw_range = 7
@@ -115,20 +118,20 @@
return FALSE
return ..()
/atom/movable/proc/start_pulling(atom/movable/AM,gs)
/atom/movable/proc/start_pulling(atom/movable/AM, state, force = move_force, supress_message = FALSE)
if(QDELETED(AM))
return FALSE
if(!(AM.can_be_pulled(src)))
if(!(AM.can_be_pulled(src, state, force)))
return FALSE
// If we're pulling something then drop what we're currently pulling and pull this instead.
if(pulling)
if(gs==0)
if(state == 0)
stop_pulling()
return FALSE
// Are we trying to pull something we are already pulling? Then enter grab cycle and end.
if(AM == pulling)
grab_state = gs
grab_state = state
if(istype(AM,/mob/living))
var/mob/living/AMob = AM
AMob.grabbedby(src)
@@ -139,11 +142,12 @@
AM.pulledby.stop_pulling() //an object can't be pulled by two mobs at once.
pulling = AM
AM.pulledby = src
grab_state = gs
grab_state = state
if(ismob(AM))
var/mob/M = AM
log_combat(src, M, "grabbed", addition="passive grab")
visible_message("<span class='warning'>[src] has grabbed [M] passively!</span>")
if(!supress_message)
visible_message("<span class='warning'>[src] has grabbed [M] passively!</span>")
return TRUE
/atom/movable/proc/stop_pulling()
@@ -508,17 +512,19 @@
/atom/movable/proc/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
set waitfor = 0
SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum)
return hit_atom.hitby(src)
return hit_atom.hitby(src, throwingdatum=throwingdatum)
/atom/movable/hitby(atom/movable/AM, skipcatch, hitpush = TRUE, blocked)
if(!anchored && hitpush)
/atom/movable/hitby(atom/movable/AM, skipcatch, hitpush = TRUE, blocked, datum/thrownthing/throwingdatum)
if(!anchored && hitpush && (!throwingdatum || (throwingdatum.force >= (move_resist * MOVE_FORCE_PUSH_RATIO))))
step(src, AM.dir)
..()
/atom/movable/proc/safe_throw_at(atom/target, range, speed, mob/thrower, spin=TRUE, diagonals_first = FALSE, var/datum/callback/callback, messy_throw = TRUE)
return throw_at(target, range, speed, thrower, spin, diagonals_first, callback, messy_throw)
/atom/movable/proc/safe_throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, diagonals_first = FALSE, datum/callback/callback, force = INFINITY, messy_throw = TRUE)
if((force < (move_resist * MOVE_FORCE_THROW_RATIO)) || (move_resist == INFINITY))
return
return throw_at(target, range, speed, thrower, spin, diagonals_first, callback, force, messy_throw)
/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin=TRUE, diagonals_first = FALSE, var/datum/callback/callback, messy_throw = TRUE) //If this returns FALSE then callback will not be called.
/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, diagonals_first = FALSE, datum/callback/callback, force = INFINITY, messy_throw = TRUE) //If this returns FALSE then callback will not be called.
. = FALSE
if (!target || speed <= 0)
return
@@ -564,6 +570,7 @@
TT.speed = speed
TT.thrower = thrower
TT.diagonals_first = diagonals_first
TT.force = force
TT.callback = callback
if(!QDELETED(thrower))
TT.target_zone = thrower.zone_selected
@@ -614,6 +621,22 @@
return 0
return 1
/atom/movable/proc/force_pushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction)
return FALSE
/atom/movable/proc/force_push(atom/movable/AM, force = move_force, direction, silent = FALSE)
. = AM.force_pushed(src, force, direction)
if(!silent && .)
visible_message("<span class='warning'>[src] forcefully pushes against [AM]!</span>", "<span class='warning'>You forcefully push against [AM]!</span>")
/atom/movable/proc/move_crush(atom/movable/AM, force = move_force, direction, silent = FALSE)
. = AM.move_crushed(src, force, direction)
if(!silent && .)
visible_message("<span class='danger'>[src] crushes past [AM]!</span>", "<span class='danger'>You crush [AM]!</span>")
/atom/movable/proc/move_crushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction)
return FALSE
/atom/movable/CanPass(atom/movable/mover, turf/target)
if(mover in buckled_mobs)
return 1
@@ -833,14 +856,15 @@
/atom/movable/proc/get_cell()
return
/atom/movable/proc/can_be_pulled(user)
/atom/movable/proc/can_be_pulled(user, grab_state, force)
if(src == user || !isturf(loc))
return FALSE
if(anchored || throwing)
return FALSE
if(force < (move_resist * MOVE_FORCE_PULL_RATIO))
return FALSE
return TRUE
/obj/item/proc/do_pickup_animation(atom/target)
set waitfor = FALSE
if(!istype(loc, /turf))
@@ -145,9 +145,9 @@
C.throw_mode_on() //so they can catch it on the return.
return ..()
/obj/item/shield/energy/bananium/throw_impact(atom/hit_atom)
/obj/item/shield/energy/bananium/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(active)
var/caught = hit_atom.hitby(src, 0, 0)
var/caught = hit_atom.hitby(src, FALSE, FALSE, throwingdatum=throwingdatum)
if(iscarbon(hit_atom) && !caught)//if they are a carbon and they didn't catch it
var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery)
slipper.Slip(hit_atom)
+7 -1
View File
@@ -220,6 +220,12 @@
T -= M.rating*0.2
prod_coeff = min(1,max(0,T)) // Coeff going 1 -> 0,8 -> 0,6 -> 0,4
/obj/machinery/autolathe/examine(mob/user)
. += ..()
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: Storing up to <b>[materials.max_amount]</b> material units.<br>Material consumption at <b>[prod_coeff*100]%</b>.</span>"
/obj/machinery/autolathe/proc/main_win(mob/user)
var/dat = "<div class='statusDisplay'><h3>Autolathe Menu:</h3><br>"
dat += materials_printout()
@@ -380,4 +386,4 @@
//Called when the object is constructed by an autolathe
//Has a reference to the autolathe so you can do !!FUN!! things with hacked lathes
/obj/item/proc/autolathe_crafted(obj/machinery/autolathe/A)
return
return
+2
View File
@@ -28,6 +28,8 @@
. += "There's [charging ? "a" : "no"] cell in the charger."
if(charging)
. += "Current charge: [round(charging.percent(), 1)]%."
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: Charge rate at <b>[charge_rate]J</b> per cycle.</span>"
/obj/machinery/cell_charger/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/stock_parts/cell) && !panel_open)
+5
View File
@@ -102,8 +102,13 @@
/obj/machinery/clonepod/examine(mob/user)
. = ..()
var/mob/living/mob_occupant = occupant
. += "<span class='notice'>The <i>linking</i> device can be <i>scanned<i> with a multitool.</span>"
if(mess)
. += "It's filled with blood and viscera. You swear you can see it moving..."
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: Cloning speed at <b>[speed_coeff*50]%</b>.<br>Predicted amount of cellular damage: <b>[100-heal_level]%</b>.</span>"
if(efficiency > 5)
to_chat(user, "<span class='notice'>Pod has been upgraded to support autoprocessing.<span>")
if(is_operational() && mob_occupant)
if(mob_occupant.stat != DEAD)
. += "Current clone cycle is [round(get_completion())]% complete."
+3 -3
View File
@@ -44,7 +44,7 @@
data += "Current target: [(!target) ? "None" : "[get_area(target)] [(regime_set != "Gate") ? "" : "Teleporter"]"]<BR>"
if(calibrating)
data += "Calibration: <font color='yellow'>In Progress</font>"
else if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accurate >= 3)
else if(power_station.teleporter_hub.calibrated || power_station.efficiency >= 3)
data += "Calibration: <font color='green'>Optimal</font>"
else
data += "Calibration: <font color='red'>Sub-Optimal</font>"
@@ -84,14 +84,14 @@
if(!target)
say("Error: No target set to calibrate to.")
return
if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accurate >= 3)
if(power_station.teleporter_hub.calibrated || power_station.efficiency >= 3)
say("Hub is already calibrated!")
return
say("Processing hub calibration to target...")
calibrating = 1
power_station.update_icon()
spawn(50 * (3 - power_station.teleporter_hub.accurate)) //Better parts mean faster calibration
spawn(50 * (3 - power_station.efficiency)) //Better parts mean faster calibration
calibrating = 0
if(check_hub_connection())
power_station.teleporter_hub.calibrated = 1
+7
View File
@@ -27,6 +27,13 @@
for(var/obj/item/stock_parts/micro_laser/P in component_parts)
damage_coeff = P.rating
/obj/machinery/dna_scannernew/examine(mob/user)
. = ..()
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: Radiation pulse accuracy increased by factor <b>[precision_coeff**2]</b>.<br>Radiation pulse damage decreased by factor <b>[damage_coeff**2]</b>.</span>"
if(scan_level >= 3)
. += "<span class='notice'>Scanner has been upgraded to support autoprocessing.<span>"
/obj/machinery/dna_scannernew/update_icon()
//no power or maintenance
+1
View File
@@ -5,6 +5,7 @@
icon_state = "door1"
opacity = 1
density = TRUE
move_resist = MOVE_FORCE_VERY_STRONG
layer = OPEN_DOOR_LAYER
power_channel = ENVIRON
max_integrity = 350
+1 -1
View File
@@ -32,7 +32,7 @@
CalculateAffectingAreas()
/obj/machinery/door/firedoor/examine(mob/user)
..()
. = ..()
if(!density)
. += "<span class='notice'>It is open, but could be <b>pried</b> closed.</span>"
else if(!welded)
+4 -2
View File
@@ -129,7 +129,7 @@
/obj/machinery/harvester/proc/end_harvesting()
harvesting = FALSE
open_machine()
say("Subject has been succesfuly harvested.")
say("Subject has been successfully harvested.")
playsound(src, 'sound/machines/microwave/microwave-end.ogg', 100, 0)
/obj/machinery/harvester/screwdriver_act(mob/living/user, obj/item/I)
@@ -191,4 +191,6 @@
if(state_open)
. += "<span class='notice'>[src] must be closed before harvesting.</span>"
else if(!harvesting)
. += "<span class='notice'>Alt-click [src] to start harvesting.</span>"
. += "<span class='notice'>Alt-click [src] to start harvesting.</span>"
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: Harvest speed at <b>[interval*0.1]</b> seconds per organ.<span>"
+5
View File
@@ -143,6 +143,11 @@ GLOBAL_LIST_EMPTY(network_holopads)
holograph_range += 1 * B.rating
holo_range = holograph_range
/obj/machinery/holopad/examine(mob/user)
. = ..()
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: Current projection range: <b>[holo_range]</b> units.</span>"
/obj/machinery/holopad/attackby(obj/item/P, mob/user, params)
if(default_deconstruction_screwdriver(user, "holopad_open", "holopad0", P))
return
+5
View File
@@ -23,6 +23,11 @@
E += M.rating*15
range = E
/obj/machinery/launchpad/examine(mob/user)
. = ..()
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: Maximum range: <b>[range]</b> units.</span>"
/obj/machinery/launchpad/attackby(obj/item/I, mob/user, params)
if(stationary)
if(default_deconstruction_screwdriver(user, "lpad-idle-o", "lpad-idle", I))
+6 -1
View File
@@ -144,7 +144,7 @@
// Set this limb up using the specias name and body zone
limb.icon_state = "[selected_category]_[limb.body_zone]"
limb.name = "\improper synthetic [selected_category] [parse_zone(limb.body_zone)]"
limb.desc = "A synthetic [selected_category] limb that will morph on its first use in surgery. This one is for the [parse_zone(limb.body_zone)]"
limb.desc = "A synthetic [selected_category] limb that will morph on its first use in surgery. This one is for the [parse_zone(limb.body_zone)]."
limb.species_id = selected_category
limb.update_icon_dropped()
@@ -158,6 +158,11 @@
T -= M.rating*0.2
prod_coeff = min(1,max(0,T)) // Coeff going 1 -> 0,8 -> 0,6 -> 0,4
/obj/machinery/limbgrower/examine(mob/user)
. = ..()
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: Storing up to <b>[reagents.maximum_volume]u</b> of synthflesh.<br>Synthflesh consumption at <b>[prod_coeff*100]%</b>.<span>"
/obj/machinery/limbgrower/proc/main_win(mob/user)
var/dat = "<div class='statusDisplay'><h3>Limb Grower Menu:</h3><br>"
dat += "<A href='?src=[REF(src)];menu=[LIMBGROWER_CHEMICAL_MENU]'>Chemical Storage</A>"
+17
View File
@@ -23,6 +23,23 @@
for(var/obj/item/stock_parts/capacitor/C in component_parts)
recharge_coeff = C.rating
/obj/machinery/recharger/examine(mob/user)
. = ..()
if(!in_range(user, src) && !issilicon(user) && !isobserver(user))
. += "<span class='warning'>You're too far away to examine [src]'s contents and display!</span>"
return
if(charging)
. += {"<span class='notice'>\The [src] contains:</span>
<span class='notice'>- \A [charging].</span>"}
if(!(stat & (NOPOWER|BROKEN)))
. += "<span class='notice'>The status display reads:</span>"
. += "<span class='notice'>- Recharging <b>[recharge_coeff*10]%</b> cell charge per cycle.</span>"
if(charging)
var/obj/item/stock_parts/cell/C = charging.get_cell()
. += "<span class='notice'>- \The [charging]'s cell is at <b>[C.percent()]%</b>.</span>"
/obj/machinery/recharger/proc/setCharging(new_charging)
charging = new_charging
if (new_charging)
+7
View File
@@ -50,6 +50,13 @@
for(var/obj/item/stock_parts/cell/C in component_parts)
recharge_speed *= C.maxcharge / 10000
/obj/machinery/recharge_station/examine(mob/user)
. = ..()
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: Recharging <b>[recharge_speed]J</b> per cycle.</span>"
if(repairs)
to_chat(user, "<span class='notice'>[src] has been upgraded to support automatic repairs.<span>")
/obj/machinery/recharge_station/process()
if(!is_operational())
return
+4 -3
View File
@@ -41,9 +41,10 @@
/obj/machinery/recycler/examine(mob/user)
. = ..()
. += "The power light is [(stat & NOPOWER) ? "off" : "on"]."
. += "The safety-mode light is [safety_mode ? "on" : "off"]."
. += "The safety-sensors status light is [obj_flags & EMAGGED ? "off" : "on"]."
. += "<span class='notice'>Reclaiming <b>[amount_produced]%</b> of materials salvaged.</span>"
. += {"The power light is [(stat & NOPOWER) ? "off" : "on"].
The safety-mode light is [safety_mode ? "on" : "off"].
The safety-sensors status light is [obj_flags & EMAGGED ? "off" : "on"]."}
/obj/machinery/recycler/power_change()
..()
+3
View File
@@ -4,6 +4,7 @@
icon = 'icons/effects/effects.dmi'
icon_state = "shield-old"
density = TRUE
move_resist = INFINITY
opacity = 0
anchored = TRUE
resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
@@ -93,6 +94,7 @@
/obj/machinery/shieldgen/proc/shields_up()
active = TRUE
update_icon()
move_resist = INFINITY
for(var/turf/target_tile in range(shield_range, src))
if(isspaceturf(target_tile) && !(locate(/obj/structure/emergency_shield) in target_tile))
@@ -101,6 +103,7 @@
/obj/machinery/shieldgen/proc/shields_down()
active = FALSE
move_resist = initial(move_resist)
update_icon()
QDEL_LIST(deployed_shields)
+2
View File
@@ -52,6 +52,8 @@
. += "The charge meter reads [cell ? round(cell.percent(), 1) : 0]%."
else
. += "There is no power cell installed."
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: Temperature range at <b>[settableTemperatureRange]°C</b>.<br>Heating power at <b>[heatingPower*0.001]kJ</b>.<br>Power consumption at <b>[(efficiency*-0.0025)+150]%</b>.<span>" //100%, 75%, 50%, 25%
/obj/machinery/space_heater/update_icon()
if(on)
+19 -5
View File
@@ -11,7 +11,7 @@
idle_power_usage = 10
active_power_usage = 2000
circuit = /obj/item/circuitboard/machine/teleporter_hub
var/accurate = FALSE
var/accuracy = 0
var/obj/machinery/teleport/station/power_station
var/calibrated //Calibration prevents mutation
@@ -29,7 +29,12 @@
var/A = 0
for(var/obj/item/stock_parts/matter_bin/M in component_parts)
A += M.rating
accurate = A
accuracy = A
/obj/machinery/teleport/hub/examine(mob/user)
. = ..()
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: Probability of malfunction decreased by <b>[(accuracy*25)-25]%</b>.</span>"
/obj/machinery/teleport/hub/proc/link_power_station()
if(power_station)
@@ -69,13 +74,13 @@
if(do_teleport(M, com.target, channel = TELEPORT_CHANNEL_BLUESPACE))
use_power(5000)
if(!calibrated && iscarbon(M) && prob(30 - ((accurate) * 10))) //oh dear a problem
if(!calibrated && iscarbon(M) && prob(30 - ((accuracy) * 10))) //oh dear a problem
var/mob/living/carbon/C = M
if(C.dna?.species && C.dna.species.id != "fly" && !HAS_TRAIT(C, TRAIT_RADIMMUNE))
to_chat(C, "<span class='italics'>You hear a buzzing in your ears.</span>")
C.set_species(/datum/species/fly)
log_game("[C] ([key_name(C)]) was turned into a fly person")
C.apply_effect((rand(120 - accurate * 40, 180 - accurate * 60)), EFFECT_IRRADIATE, 0)
C.apply_effect((rand(120 - accuracy * 40, 180 - accuracy * 60)), EFFECT_IRRADIATE, 0)
calibrated = FALSE
return
@@ -102,7 +107,7 @@
/obj/machinery/teleport/station
name = "station"
name = "teleporter station"
desc = "The power control station for a bluespace teleporter. Used for toggling power, and can activate a test-fire to prevent malfunctions."
icon_state = "controller"
use_power = IDLE_POWER_USE
@@ -125,6 +130,15 @@
E += C.rating
efficiency = E - 1
/obj/machinery/teleport/station/examine(mob/user)
. = ..()
if(!panel_open)
. += "<span class='notice'>The panel is <i>screwed</i> in, obstructing the linking device and wiring panel.</span>"
else
. += "<span class='notice'>The <i>linking</i> device is now able to be <i>scanned</i> with a multitool.<br>The <i>wiring</i> can be <i>connected<i> to a nearby console and hub with a pair of wirecutters.</span>"
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: This station can be linked to <b>[efficiency]</b> other station(s).</span>"
/obj/machinery/teleport/station/proc/link_console_and_hub()
for(var/direction in GLOB.cardinals)
teleporter_hub = locate(/obj/machinery/teleport/hub, get_step(src, direction))
+1 -1
View File
@@ -19,7 +19,7 @@
return TRUE
/obj/machinery/turnstile/bullet_act(obj/item/projectile/P, def_zone)
return -1 //Pass through!
return BULLET_ACT_FORCE_PIERCE //Pass through!
/obj/machinery/turnstile/proc/allowed_access(var/mob/B)
if(B.pulledby && ismob(B.pulledby))
@@ -84,7 +84,7 @@
switch(mode)
if(1)
if(!locked)
if(!istype(target) || target.anchored)
if(!istype(target) || target.anchored || target.move_resist >= MOVE_FORCE_EXTREMELY_STRONG)
occupant_message("Unable to lock on [target]")
return
locked = target
@@ -110,7 +110,7 @@
else
atoms = orange(3, target)
for(var/atom/movable/A in atoms)
if(A.anchored)
if(A.anchored || A.move_resist >= MOVE_FORCE_EXTREMELY_STRONG)
continue
spawn(0)
var/iter = 5-get_dist(A,target)
+1 -1
View File
@@ -436,7 +436,7 @@
throwforce = 35
icon_state = "punching_glove"
/obj/item/punching_glove/throw_impact(atom/hit_atom)
/obj/item/punching_glove/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(!..())
if(ismovableatom(hit_atom))
var/atom/movable/AM = hit_atom
+5
View File
@@ -36,6 +36,11 @@
MC += C.rating
max_charge = MC * 25
/obj/machinery/mech_bay_recharge_port/examine(mob/user)
. = ..()
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: Base recharge rate at <b>[max_charge]J</b> per cycle.</span>"
/obj/machinery/mech_bay_recharge_port/process()
if(stat & NOPOWER || !recharge_console)
return
+5
View File
@@ -62,6 +62,11 @@
T += Ml.rating
time_coeff = round(initial(time_coeff) - (initial(time_coeff)*(T))/5,0.01)
/obj/machinery/mecha_part_fabricator/examine(mob/user)
. = ..()
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: Storing up to <b>[materials.max_amount]</b> material units.<br>Material consumption at <b>[component_coeff*100]%</b>.<br>Build time reduced by <b>[100-time_coeff*100]%</b>.</span>"
/obj/machinery/mecha_part_fabricator/emag_act()
. = ..()
+2 -2
View File
@@ -108,8 +108,8 @@
/obj/mecha/attack_tk()
return
/obj/mecha/hitby(atom/movable/A as mob|obj) //wrapper
log_message("Hit by [A].", color="red")
/obj/mecha/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) //wrapper
log_message("Hit by [AM].", color="red")
. = ..()
+1
View File
@@ -4,6 +4,7 @@
/obj/effect
icon = 'icons/effects/effects.dmi'
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
move_resist = INFINITY
obj_flags = 0
/obj/effect/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
+9 -9
View File
@@ -567,21 +567,21 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
else
return
/obj/item/throw_impact(atom/A, datum/thrownthing/throwingdatum)
if(A && !QDELETED(A))
SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, A, throwingdatum)
if(get_temperature() && isliving(A))
var/mob/living/L = A
/obj/item/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(hit_atom && !QDELETED(hit_atom))
SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum)
if(get_temperature() && isliving(hit_atom))
var/mob/living/L = hit_atom
L.IgniteMob()
var/itempush = 1
if(w_class < 4)
itempush = 0 //too light to push anything
return A.hitby(src, 0, itempush)
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, messy_throw = TRUE)
/obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, messy_throw = TRUE)
thrownby = thrower
callback = CALLBACK(src, .proc/after_throw, callback, (spin && messy_throw)) //replace their callback with our own
. = ..(target, range, speed, thrower, spin, diagonals_first, callback)
. = ..(target, range, speed, thrower, spin, diagonals_first, callback, force)
/obj/item/proc/after_throw(datum/callback/callback, messy_throw)
if (callback) //call the original callback
@@ -673,7 +673,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
else
. = ""
/obj/item/hitby(atom/movable/AM)
/obj/item/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
return
/obj/item/attack_hulk(mob/living/carbon/human/user)
+7 -7
View File
@@ -677,18 +677,18 @@ RLD
icon_state = "rld"
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
matter = 500
max_matter = 500
sheetmultiplier = 16
matter = 200
max_matter = 200
sheetmultiplier = 5
var/mode = LIGHT_MODE
actions_types = list(/datum/action/item_action/pick_color)
ammo_sections = 5
has_ammobar = TRUE
var/wallcost = 10
var/floorcost = 15
var/launchcost = 5
var/deconcost = 10
var/wallcost = 20
var/floorcost = 25
var/launchcost = 10
var/deconcost = 20
var/walldelay = 10
var/floordelay = 10
+3
View File
@@ -19,12 +19,14 @@ GLOBAL_LIST_INIT(atmos_pipe_recipes, list(
new /datum/pipe_info/pipe("Manifold", /obj/machinery/atmospherics/pipe/manifold),
new /datum/pipe_info/pipe("Manual Valve", /obj/machinery/atmospherics/components/binary/valve),
new /datum/pipe_info/pipe("Digital Valve", /obj/machinery/atmospherics/components/binary/valve/digital),
new /datum/pipe_info/pipe("Relief Valve", /obj/machinery/atmospherics/components/binary/relief_valve),
new /datum/pipe_info/pipe("4-Way Manifold", /obj/machinery/atmospherics/pipe/manifold4w),
new /datum/pipe_info/pipe("Layer Manifold", /obj/machinery/atmospherics/pipe/layer_manifold),
),
"Devices" = list(
new /datum/pipe_info/pipe("Connector", /obj/machinery/atmospherics/components/unary/portables_connector),
new /datum/pipe_info/pipe("Unary Vent", /obj/machinery/atmospherics/components/unary/vent_pump),
new /datum/pipe_info/pipe("Relief Valve", /obj/machinery/atmospherics/components/unary/relief_valve),
new /datum/pipe_info/pipe("Gas Pump", /obj/machinery/atmospherics/components/binary/pump),
new /datum/pipe_info/pipe("Passive Gate", /obj/machinery/atmospherics/components/binary/passive_gate),
new /datum/pipe_info/pipe("Volume Pump", /obj/machinery/atmospherics/components/binary/volume_pump),
@@ -33,6 +35,7 @@ GLOBAL_LIST_INIT(atmos_pipe_recipes, list(
new /datum/pipe_info/meter("Meter"),
new /datum/pipe_info/pipe("Gas Filter", /obj/machinery/atmospherics/components/trinary/filter),
new /datum/pipe_info/pipe("Gas Mixer", /obj/machinery/atmospherics/components/trinary/mixer),
new /datum/pipe_info/pipe("Passive Vent", /obj/machinery/atmospherics/components/unary/passive_vent),
),
"Heat Exchange" = list(
new /datum/pipe_info/pipe("Pipe", /obj/machinery/atmospherics/pipe/heat_exchanging/simple),
@@ -74,6 +74,7 @@
playsound(src, 'sound/weapons/slice.ogg', 50, 1)
if(prob(P.damage))
push_over()
return BULLET_ACT_HIT
/obj/item/cardboard_cutout/proc/change_appearance(obj/item/toy/crayon/crayon, mob/living/user)
if(!crayon || !user)
+1 -1
View File
@@ -242,7 +242,7 @@
if(Pgun && istype(Pgun))
Pgun.field_connect(src)
else
return 0
return BULLET_ACT_HIT
/obj/effect/chrono_field/assume_air()
return 0
@@ -293,6 +293,10 @@
name = "Mining Shuttle (Computer Board)"
build_path = /obj/machinery/computer/shuttle/mining
/obj/item/circuitboard/computer/mining_shuttle/common
name = "Lavaland Shuttle (Computer Board)"
build_path = /obj/machinery/computer/shuttle/mining/common
/obj/item/circuitboard/computer/white_ship
name = "White Ship (Computer Board)"
build_path = /obj/machinery/computer/shuttle/white_ship
@@ -146,7 +146,7 @@
master.disrupt()
/obj/effect/dummy/chameleon/bullet_act()
..()
. = ..()
master.disrupt()
/obj/effect/dummy/chameleon/relaymove(mob/user, direction)
@@ -56,6 +56,14 @@
else
return ..()
/obj/item/laser_pointer/examine(mob/user)
. = ..()
if(in_range(user, src) || isobserver(user))
if(!diode)
. += "<span class='notice'>The diode is missing.<span>"
else
. += "<span class='notice'>A class <b>[diode.rating]</b> laser diode is installed. It is <i>screwed</i> in place.<span>"
/obj/item/laser_pointer/afterattack(atom/target, mob/living/user, flag, params)
. = ..()
laser_act(target, user, params)
+1 -1
View File
@@ -160,7 +160,7 @@
/obj/item/dice/attack_self(mob/user)
diceroll(user)
/obj/item/dice/throw_impact(atom/target)
/obj/item/dice/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
diceroll(thrownby)
. = ..()
+2 -2
View File
@@ -340,7 +340,7 @@
return
playsound(src.loc,'sound/weapons/bolathrow.ogg', 75, 1)
/obj/item/restraints/legcuffs/bola/throw_impact(atom/hit_atom)
/obj/item/restraints/legcuffs/bola/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(..() || !iscarbon(hit_atom))//if it gets caught or the target can't be cuffed,
return//abort
var/mob/living/carbon/C = hit_atom
@@ -368,7 +368,7 @@
w_class = WEIGHT_CLASS_SMALL
breakouttime = 60
/obj/item/restraints/legcuffs/bola/energy/throw_impact(atom/hit_atom)
/obj/item/restraints/legcuffs/bola/energy/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(iscarbon(hit_atom))
var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(hit_atom))
B.Crossed(hit_atom)
+4 -2
View File
@@ -40,8 +40,10 @@
if (prob(50))
qdel(src)
/obj/item/latexballon/bullet_act()
burst()
/obj/item/latexballon/bullet_act(obj/item/projectile/P)
if(!P.nodamage)
burst()
return ..()
/obj/item/latexballon/temperature_expose(datum/gas_mixture/air, temperature, volume)
if(temperature > T0C+100)
+6 -5
View File
@@ -333,13 +333,13 @@
if(proximity_flag)
consume_everything(target)
/obj/item/melee/supermatter_sword/throw_impact(target)
/obj/item/melee/supermatter_sword/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
..()
if(ismob(target))
var/mob/M
if(ismob(hit_atom))
var/mob/M = hit_atom
if(src.loc == M)
M.dropItemToGround(src)
consume_everything(target)
consume_everything(hit_atom)
/obj/item/melee/supermatter_sword/pickup(user)
..()
@@ -358,7 +358,8 @@
/obj/item/melee/supermatter_sword/bullet_act(obj/item/projectile/P)
visible_message("<span class='danger'>[P] smacks into [src] and rapidly flashes to ash.</span>",\
"<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>")
consume_everything()
consume_everything(P)
return BULLET_ACT_HIT
/obj/item/melee/supermatter_sword/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] touches [src]'s blade. It looks like [user.p_theyre()] tired of waiting for the radiation to kill [user.p_them()]!</span>")
+3 -3
View File
@@ -60,7 +60,7 @@
#define DECALTYPE_BULLET 2
/obj/item/target/clown/bullet_act(obj/item/projectile/P)
..()
. = ..()
playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1)
/obj/item/target/bullet_act(obj/item/projectile/P)
@@ -89,8 +89,8 @@
else
bullet_hole.icon_state = "dent"
add_overlay(bullet_hole)
return
return -1
return BULLET_ACT_HIT
return BULLET_ACT_FORCE_PIERCE
#undef DECALTYPE_SCORCH
#undef DECALTYPE_BULLET
+3 -3
View File
@@ -105,10 +105,10 @@
playsound(src.loc, "sparks", 50, 1)
shock(M)
/obj/item/twohanded/mjollnir/throw_impact(atom/target)
/obj/item/twohanded/mjollnir/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
. = ..()
if(isliving(target))
shock(target)
if(isliving(hit_atom))
shock(hit_atom)
/obj/item/twohanded/mjollnir/update_icon() //Currently only here to fuck with the on-mob icons.
icon_state = "mjollnir[wielded]"
+1 -1
View File
@@ -35,7 +35,7 @@
/obj/item/stack/ore/bluespace_crystal/proc/blink_mob(mob/living/L)
do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
/obj/item/stack/ore/bluespace_crystal/throw_impact(atom/hit_atom)
/obj/item/stack/ore/bluespace_crystal/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(!..()) // not caught in mid-air
visible_message("<span class='notice'>[src] fizzles and disappears upon impact!</span>")
var/turf/T = get_turf(hit_atom)
+2 -1
View File
@@ -202,6 +202,7 @@
if(O)
O.setDir(usr.dir)
use(R.req_amount * multiplier)
log_craft("[O] crafted by [usr] at [loc_name(O.loc)]")
//START: oh fuck i'm so sorry
if(istype(O, /obj/structure/windoor_assembly))
@@ -341,7 +342,7 @@
merge(o)
. = ..()
/obj/item/stack/hitby(atom/movable/AM, skip, hitpush)
/obj/item/stack/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
if(istype(AM, merge_type))
merge(AM)
. = ..()
+1 -1
View File
@@ -41,7 +41,7 @@
cell = new preload_cell_type(src)
update_icon()
/obj/item/melee/baton/throw_impact(atom/hit_atom)
/obj/item/melee/baton/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
..()
//Only mob/living types have stun handling
if(status && prob(throw_hit_chance) && iscarbon(hit_atom))
+1 -1
View File
@@ -259,7 +259,7 @@
if(proximity && ismovableatom(O) && O != sliver)
Consume(O, user)
/obj/item/hemostat/supermatter/throw_impact(atom/hit_atom) // no instakill supermatter javelins
/obj/item/hemostat/supermatter/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) // no instakill supermatter javelins
if(sliver)
sliver.forceMove(loc)
to_chat(usr, "<span class='notice'>\The [sliver] falls out of \the [src] as you throw them.</span>")
+4 -4
View File
@@ -84,7 +84,7 @@
else
return ..()
/obj/item/toy/balloon/throw_impact(atom/hit_atom)
/obj/item/toy/balloon/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(!..()) //was it caught by a mob?
balloon_burst(hit_atom)
@@ -531,7 +531,7 @@
/obj/item/toy/snappop/fire_act(exposed_temperature, exposed_volume)
pop_burst()
/obj/item/toy/snappop/throw_impact(atom/hit_atom)
/obj/item/toy/snappop/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(!..())
pop_burst()
@@ -1157,7 +1157,7 @@
icon_state = "minimeteor"
w_class = WEIGHT_CLASS_SMALL
/obj/item/toy/minimeteor/throw_impact(atom/hit_atom)
/obj/item/toy/minimeteor/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(!..())
playsound(src, 'sound/effects/meteorimpact.ogg', 40, 1)
for(var/mob/M in urange(10, src))
@@ -1206,7 +1206,7 @@
if(user.dropItemToGround(src))
throw_at(target, throw_range, throw_speed)
/obj/item/toy/snowball/throw_impact(atom/hit_atom)
/obj/item/toy/snowball/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(!..())
playsound(src, 'sound/effects/pop.ogg', 20, 1)
qdel(src)
+12 -1
View File
@@ -46,7 +46,7 @@
if(BURN)
playsound(src.loc, 'sound/items/welder.ogg', 100, 1)
/obj/hitby(atom/movable/AM)
/obj/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
..()
var/throwdamage = AM.throwforce
if(isobj(AM))
@@ -126,6 +126,17 @@
if(. && !play_soundeffect)
playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
/obj/force_pushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction)
return TRUE
/obj/move_crushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction)
collision_damage(pusher, force, direction)
return TRUE
/obj/proc/collision_damage(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction)
var/amt = max(0, ((force - (move_resist * MOVE_FORCE_CRUSH_RATIO)) / (move_resist * MOVE_FORCE_CRUSH_RATIO)) * 10)
take_damage(amt, BRUTE)
/obj/attack_slime(mob/living/simple_animal/slime/user)
if(!user.is_adult)
return
+1 -1
View File
@@ -80,7 +80,7 @@
SEND_SIGNAL(src, COMSIG_OBJ_SETANCHORED, anchorvalue)
anchored = anchorvalue
/obj/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, messy_throw)
/obj/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, messy_throw = TRUE)
. = ..()
if(obj_flags & FROZEN)
visible_message("<span class='danger'>[src] shatters into a million pieces!</span>")
@@ -66,6 +66,14 @@
req_access = null
locked = FALSE
/obj/structure/closet/secure_closet/freezer/gulag_fridge
name = "refrigerator"
/obj/structure/closet/secure_closet/freezer/gulag_fridge/PopulateContents()
..()
for(var/i in 1 to 3)
new /obj/item/reagent_containers/food/drinks/beer/light(src)
/obj/structure/closet/secure_closet/freezer/fridge
name = "refrigerator"
@@ -290,3 +290,17 @@
..()
for(var/i in 1 to 3)
new /obj/item/storage/box/lethalshot(src)
/obj/structure/closet/secure_closet/labor_camp_security
name = "labor camp security locker"
req_access = list(ACCESS_SECURITY)
icon_state = "sec"
/obj/structure/closet/secure_closet/labor_camp_security/PopulateContents()
..()
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/clothing/head/helmet/sec(src)
new /obj/item/clothing/under/rank/security(src)
new /obj/item/clothing/under/rank/security/skirt(src)
new /obj/item/clothing/glasses/hud/security/sunglasses(src)
new /obj/item/flashlight/seclite(src)
@@ -46,6 +46,7 @@
roundstart = FALSE
death = FALSE
anchored = FALSE
move_resist = MOVE_FORCE_NORMAL
density = FALSE
flavour_text = "<span class='big bold'>You are an ash walker.</span><b> Your tribe worships <span class='danger'>the Necropolis</span>. The wastes are sacred ground, its monsters a blessed bounty. You would never leave its beautiful expanse. \
You have seen lights in the distance... they foreshadow the arrival of outsiders that seek to tear apart the Necropolis and its domain. Fresh sacrifices for your nest.</b>"
@@ -120,6 +121,7 @@
roundstart = FALSE
death = FALSE
anchored = FALSE
move_resist = MOVE_FORCE_NORMAL
density = FALSE
var/has_owner = FALSE
var/can_transfer = TRUE //if golems can switch bodies to this new shell
@@ -645,6 +647,7 @@
SSjob.equip_loadout(null, new_spawn, FALSE)
SSquirks.AssignQuirks(new_spawn, new_spawn.client, TRUE, TRUE, null, FALSE, new_spawn)
new_spawn.AddElement(/datum/element/ghost_role_eligibility)
new_spawn.AddElement(/datum/element/dusts_on_catatonia)
ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, GHOSTROLE_TRAIT)
ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT)
ADD_TRAIT(new_spawn,TRAIT_PACIFISM,GHOSTROLE_TRAIT)
+1 -1
View File
@@ -258,7 +258,7 @@
take_damage(1, BURN, 0, 0)
..()
/obj/structure/grille/hitby(AM as mob|obj)
/obj/structure/grille/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
if(isobj(AM))
if(prob(50) && anchored && !broken)
var/obj/O = AM
+2
View File
@@ -106,6 +106,7 @@
take_damage(10, BRUTE, "melee", 1) //Tasers aren't harmful.
if(istype(P, /obj/item/projectile/beam/disabler))
take_damage(5, BRUTE, "melee", 1) //Disablers aren't harmful.
return BULLET_ACT_HIT
/obj/structure/holosign/barrier/medical
name = "\improper PENLITE holobarrier"
@@ -152,6 +153,7 @@
/obj/structure/holosign/barrier/cyborg/hacked/bullet_act(obj/item/projectile/P)
take_damage(P.damage, BRUTE, "melee", 1) //Yeah no this doesn't get projectile resistance.
return BULLET_ACT_HIT
/obj/structure/holosign/barrier/cyborg/hacked/proc/cooldown()
shockcd = FALSE
@@ -1,39 +1,32 @@
//Necropolis Tendrils, which spawn lavaland monsters and break into a chasm when killed
/obj/effect/light_emitter/tendril
set_luminosity = 4
set_cap = 2.5
light_color = LIGHT_COLOR_LAVA
/mob/living/simple_animal/hostile/spawner/lavaland
/obj/structure/spawner/lavaland
name = "necropolis tendril"
desc = "A vile tendril of corruption, originating deep underground. Terrible monsters are pouring out of it."
icon = 'icons/mob/nest.dmi'
icon_state = "tendril"
icon_living = "tendril"
icon_dead = "tendril"
faction = list("mining")
weather_immunities = list("lava","ash")
health = 250
maxHealth = 250
max_mobs = 3
spawn_time = 300 //30 seconds default
max_integrity = 250
mob_types = list(/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril)
spawn_text = "emerges from"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxbodytemp = INFINITY
loot = list(/obj/effect/collapse, /obj/structure/closet/crate/necropolis/tendril)
del_on_death = 1
move_resist=INFINITY // just killing it tears a massive hole in the ground, let's not move it
anchored = TRUE
resistance_flags = FIRE_PROOF | LAVA_PROOF
var/gps = null
var/obj/effect/light_emitter/tendril/emitted_light
/mob/living/simple_animal/hostile/spawner/lavaland/goliath
/obj/structure/spawner/lavaland/goliath
mob_types = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril)
/mob/living/simple_animal/hostile/spawner/lavaland/legion
/obj/structure/spawner/lavaland/legion
mob_types = list(/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril)
/mob/living/simple_animal/hostile/spawner/lavaland/Initialize()
GLOBAL_LIST_INIT(tendrils, list())
/obj/structure/spawner/lavaland/Initialize()
. = ..()
emitted_light = new(loc)
for(var/F in RANGE_TURFS(1, src))
@@ -41,18 +34,19 @@
var/turf/closed/mineral/M = F
M.ScrapeAway(null, CHANGETURF_IGNORE_AIR)
gps = new /obj/item/gps/internal(src)
GLOB.tendrils += src
/mob/living/simple_animal/hostile/spawner/lavaland/Destroy()
QDEL_NULL(emitted_light)
QDEL_NULL(gps)
/obj/structure/spawner/lavaland/deconstruct(disassembled)
new /obj/effect/collapse(loc)
new /obj/structure/closet/crate/necropolis/tendril(loc)
return ..()
/mob/living/simple_animal/hostile/spawner/lavaland/death()
/obj/structure/spawner/lavaland/Destroy()
var/last_tendril = TRUE
for(var/mob/living/simple_animal/hostile/spawner/lavaland/other in GLOB.mob_living_list)
if(other != src)
last_tendril = FALSE
break
if(GLOB.tendrils.len>1)
last_tendril = FALSE
if(last_tendril && !(flags_1 & ADMIN_SPAWNED_1))
if(SSmedals.hub_enabled)
for(var/mob/living/L in view(7,src))
@@ -60,7 +54,15 @@
continue
SSmedals.UnlockMedal("[BOSS_MEDAL_TENDRIL] [ALL_KILL_MEDAL]", L.client)
SSmedals.SetScore(TENDRIL_CLEAR_SCORE, L.client, 1)
..()
GLOB.tendrils -= src
QDEL_NULL(emitted_light)
QDEL_NULL(gps)
return ..()
/obj/effect/light_emitter/tendril
set_luminosity = 4
set_cap = 2.5
light_color = LIGHT_COLOR_LAVA
/obj/effect/collapse
name = "collapsing necropolis tendril"
@@ -92,4 +94,4 @@
for(var/turf/T in range(2,src))
if(!T.density)
T.TerraformTurf(/turf/open/chasm/lavaland, /turf/open/chasm/lavaland, flags = CHANGETURF_INHERIT_AIR)
qdel(src)
qdel(src)
+3 -3
View File
@@ -64,15 +64,15 @@
var/ploc = get_turf(P)
if(!finished || !allowed_projectile_typecache[P.type] || !(P.dir in GLOB.cardinals))
return ..()
if(auto_reflect(P, pdir, ploc, pangle) != -1)
if(auto_reflect(P, pdir, ploc, pangle) != BULLET_ACT_FORCE_PIERCE)
return ..()
return -1
return BULLET_ACT_FORCE_PIERCE
/obj/structure/reflector/proc/auto_reflect(obj/item/projectile/P, pdir, turf/ploc, pangle)
P.ignore_source_check = TRUE
P.range = P.decayedRange
P.decayedRange = max(P.decayedRange--, 0)
return -1
return BULLET_ACT_FORCE_PIERCE
/obj/structure/reflector/attackby(obj/item/W, mob/user, params)
if(admin)
+75
View File
@@ -0,0 +1,75 @@
/obj/structure/spawner
name = "monster nest"
icon = 'icons/mob/animal.dmi'
icon_state = "hole"
max_integrity = 100
move_resist = MOVE_FORCE_EXTREMELY_STRONG
anchored = TRUE
density = TRUE
var/max_mobs = 5
var/spawn_time = 300 //30 seconds default
var/mob_types = list(/mob/living/simple_animal/hostile/carp)
var/spawn_text = "emerges from"
var/faction = list("hostile")
/obj/structure/spawner/Initialize()
. = ..()
AddComponent(/datum/component/spawner, mob_types, spawn_time, faction, spawn_text, max_mobs)
/obj/structure/spawner/syndicate
name = "warp beacon"
icon = 'icons/obj/device.dmi'
icon_state = "syndbeacon"
spawn_text = "warps in from"
mob_types = list(/mob/living/simple_animal/hostile/syndicate/ranged)
faction = list(ROLE_SYNDICATE)
/obj/structure/spawner/skeleton
name = "bone pit"
desc = "A pit full of bones, and some still seem to be moving..."
icon_state = "hole"
icon = 'icons/mob/nest.dmi'
max_integrity = 150
max_mobs = 15
spawn_time = 150
mob_types = list(/mob/living/simple_animal/hostile/skeleton)
spawn_text = "climbs out of"
faction = list("skeleton")
/obj/structure/spawner/mining
name = "monster den"
desc = "A hole dug into the ground, harboring all kinds of monsters found within most caves or mining asteroids."
icon_state = "hole"
max_integrity = 200
max_mobs = 3
icon = 'icons/mob/nest.dmi'
spawn_text = "crawls out of"
mob_types = list(/mob/living/simple_animal/hostile/asteroid/goldgrub, /mob/living/simple_animal/hostile/asteroid/goliath, /mob/living/simple_animal/hostile/asteroid/hivelord, /mob/living/simple_animal/hostile/asteroid/basilisk, /mob/living/simple_animal/hostile/asteroid/fugu)
faction = list("mining")
/obj/structure/spawner/mining/goldgrub
name = "goldgrub den"
desc = "A den housing a nest of goldgrubs, annoying but arguably much better than anything else you'll find in a nest."
mob_types = list(/mob/living/simple_animal/hostile/asteroid/goldgrub)
/obj/structure/spawner/mining/goliath
name = "goliath den"
desc = "A den housing a nest of goliaths, oh god why?"
mob_types = list(/mob/living/simple_animal/hostile/asteroid/goliath)
/obj/structure/spawner/mining/hivelord
name = "hivelord den"
desc = "A den housing a nest of hivelords."
mob_types = list(/mob/living/simple_animal/hostile/asteroid/hivelord)
/obj/structure/spawner/mining/basilisk
name = "basilisk den"
desc = "A den housing a nest of basilisks, bring a coat."
mob_types = list(/mob/living/simple_animal/hostile/asteroid/basilisk)
/obj/structure/spawner/mining/wumborian
name = "wumborian fugu den"
desc = "A den housing a nest of wumborian fugus, how do they all even fit in there?"
mob_types = list(/mob/living/simple_animal/hostile/asteroid/fugu)
+1 -1
View File
@@ -124,7 +124,7 @@
message_admins("Plasma statue ignited by [Proj]. No known firer, in [ADMIN_VERBOSEJMP(T)]")
log_game("Plasma statue ignited by [Proj] in [AREACOORD(T)]. No known firer.")
PlasmaBurn(2500)
..()
return ..()
/obj/structure/statue/plasma/attackby(obj/item/W, mob/user, params)
if(W.get_temperature() > 300 && !QDELETED(src))//If the temperature of the object is over 300, then ignite
+2 -3
View File
@@ -71,6 +71,5 @@
/obj/structure/target_stake/bullet_act(obj/item/projectile/P)
if(pinned_target)
pinned_target.bullet_act(P)
else
..()
return pinned_target.bullet_act(P)
return ..()
@@ -151,9 +151,9 @@
has_data = TRUE
/turf/open/floor/plating/asteroid/airless/cave/volcanic
mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/random = 50, /mob/living/simple_animal/hostile/spawner/lavaland/goliath = 3, \
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/random = 40, /mob/living/simple_animal/hostile/spawner/lavaland = 2, \
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/random = 30, /mob/living/simple_animal/hostile/spawner/lavaland/legion = 3, \
mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/random = 50, /obj/structure/spawner/lavaland/goliath = 3, \
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/random = 40, /obj/structure/spawner/lavaland = 2, \
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/random = 30, /obj/structure/spawner/lavaland/legion = 3, \
SPAWN_MEGAFAUNA = 6, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10)
data_having_type = /turf/open/floor/plating/asteroid/airless/cave/volcanic/has_data
@@ -274,7 +274,7 @@
return //if there's a megafauna within standard view don't spawn anything at all
if(ispath(randumb, /mob/living/simple_animal/hostile/asteroid) || istype(H, /mob/living/simple_animal/hostile/asteroid))
return //if the random is a standard mob, avoid spawning if there's another one within 12 tiles
if((ispath(randumb, /mob/living/simple_animal/hostile/spawner/lavaland) || istype(H, /mob/living/simple_animal/hostile/spawner/lavaland)) && get_dist(src, H) <= 2)
if((ispath(randumb, /obj/structure/spawner/lavaland) || istype(H, /obj/structure/spawner/lavaland)) && get_dist(src, H) <= 2)
return //prevents tendrils spawning in each other's collapse range
new randumb(T)
+1 -1
View File
@@ -36,7 +36,7 @@
if(burn_stuff(AM))
START_PROCESSING(SSobj, src)
/turf/open/lava/hitby(atom/movable/AM)
/turf/open/lava/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
if(burn_stuff(AM))
START_PROCESSING(SSobj, src)
+6 -3
View File
@@ -65,13 +65,16 @@
if(I.use_tool(src, user, 40, volume=50))
var/range = I.digrange //Store the current digrange so people don't cheese digspeed swapping for faster mining
var/list/dug_tiles = list()
if(ismineralturf(src))
if(I.digrange > 0)
for(var/turf/closed/mineral/M in range(user,range))
if(get_dir(user,M)&stored_dir)
M.gets_drilled()
M.gets_drilled(user)
dug_tiles += M
to_chat(user, "<span class='notice'>You finish cutting into the rock.</span>")
gets_drilled(user)
if(!(src in dug_tiles))
gets_drilled(user)
SSblackbox.record_feedback("tally", "pick_used_mining", 1, I.type)
else
return attack_hand(user)
@@ -615,4 +618,4 @@
turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = 1
defer_change = 1
@@ -120,7 +120,7 @@
PlasmaBurn(2500)
else if(istype(Proj, /obj/item/projectile/ion))
PlasmaBurn(500)
..()
return ..()
/turf/closed/wall/mineral/wood
+1 -1
View File
@@ -25,7 +25,7 @@
if(stored_pulling)
stored_pulling.setDir(get_dir(stored_pulling.loc, newloc))
stored_pulling.forceMove(src)
H.start_pulling(stored_pulling, TRUE)
H.start_pulling(stored_pulling, supress_message = TRUE)
/turf/closed/wall/mineral/cult/ratvar_act()
. = ..()
+21 -7
View File
@@ -224,14 +224,20 @@
for(var/i in contents)
if(i == mover || i == mover.loc) // Multi tile objects and moving out of other objects
continue
if(QDELETED(mover))
break
var/atom/movable/thing = i
if(thing.Cross(mover))
continue
if(!firstbump || ((thing.layer > firstbump.layer || thing.flags_1 & ON_BORDER_1) && !(firstbump.flags_1 & ON_BORDER_1)))
firstbump = thing
if(!thing.Cross(mover))
if(CHECK_BITFIELD(mover.movement_type, UNSTOPPABLE))
mover.Bump(thing)
continue
else
if(!firstbump || ((thing.layer > firstbump.layer || thing.flags_1 & ON_BORDER_1) && !(firstbump.flags_1 & ON_BORDER_1)))
firstbump = thing
if(firstbump)
mover.Bump(firstbump)
return FALSE
if(!QDELETED(mover))
mover.Bump(firstbump)
return CHECK_BITFIELD(mover.movement_type, UNSTOPPABLE)
return TRUE
/turf/Exit(atom/movable/mover, atom/newloc)
@@ -239,13 +245,16 @@
if(!.)
return FALSE
for(var/i in contents)
if(QDELETED(mover))
break
if(i == mover)
continue
var/atom/movable/thing = i
if(!thing.Uncross(mover, newloc))
if(thing.flags_1 & ON_BORDER_1)
mover.Bump(thing)
return FALSE
if(!CHECK_BITFIELD(mover.movement_type, UNSTOPPABLE))
return FALSE
/turf/Entered(atom/movable/AM)
..()
@@ -563,3 +572,8 @@
//Should return new turf
/turf/proc/Melt()
return ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
/turf/bullet_act(obj/item/projectile/P)
. = ..()
if(. != BULLET_ACT_FORCE_PIERCE)
. = BULLET_ACT_TURF
+2
View File
@@ -116,6 +116,7 @@ GLOBAL_LIST(topic_status_cache)
GLOB.query_debug_log = "[GLOB.log_directory]/query_debug.log"
GLOB.world_job_debug_log = "[GLOB.log_directory]/job_debug.log"
GLOB.subsystem_log = "[GLOB.log_directory]/subsystem.log"
GLOB.world_crafting_log = "[GLOB.log_directory]/crafting.log"
#ifdef UNIT_TESTS
GLOB.test_log = file("[GLOB.log_directory]/tests.log")
@@ -131,6 +132,7 @@ GLOBAL_LIST(topic_status_cache)
start_log(GLOB.world_runtime_log)
start_log(GLOB.world_job_debug_log)
start_log(GLOB.subsystem_log)
start_log(GLOB.world_crafting_log)
GLOB.changelog_hash = md5('html/changelog.html') //for telling if the changelog has changed recently
if(fexists(GLOB.config_error_log))
+5 -1
View File
@@ -907,12 +907,16 @@
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=alien;jobban4=[REF(M)]'><font color=red>Alien</font></a></td>"
else
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=alien;jobban4=[REF(M)]'>Alien</a></td>"
//Gang
if(jobban_isbanned(M, ROLE_GANG) || isbanned_dept)
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=gang;jobban4=[REF(M)]'><font color=red>Gang</font></a></td>"
else
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=gang;jobban4=[REF(M)]'>Gang</a></td>"
//Bloodsucker
if(jobban_isbanned(M, ROLE_BLOODSUCKER) || isbanned_dept)
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=bloodsucker;jobban4=[REF(M)]'><font color=red>Bloodsucker</font></a></td>"
else
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=bloodsucker;jobban4=[REF(M)]'>Bloodsucker</a></td>"
//Other Roles (black)

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