Merge pull request #11664 from Markolie/swarmerfix

Lavaland fixes, Mark V
This commit is contained in:
Crazy Lemon
2019-06-05 21:06:16 -07:00
committed by GitHub
64 changed files with 807 additions and 695 deletions
+5 -1
View File
@@ -6351,6 +6351,10 @@
/obj/structure/bed/abductor,
/turf/unsimulated/floor/abductor,
/area/abductor_ship)
"Ur" = (
/obj/machinery/poolcontroller/invisible,
/turf/unsimulated/beach/water,
/area/centcom/holding)
(1,1,1) = {"
aa
@@ -35864,7 +35868,7 @@ tv
tu
tu
tQ
tU
Ur
th
ab
ab
@@ -24,9 +24,6 @@
"af" = (
/obj/structure/table,
/obj/item/clothing/mask/gas,
/obj/machinery/light/small{
dir = 1
},
/obj/item/clothing/glasses/sunglasses/big,
/obj/item/clothing/glasses/sunglasses/big,
/obj/item/clothing/glasses/sunglasses/big,
@@ -34,6 +31,9 @@
/area/ruin/powered/beach)
"ag" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plating,
/area/ruin/powered/beach)
"ah" = (
@@ -438,6 +438,10 @@
/obj/item/storage/backpack/duffel,
/turf/simulated/floor/beach/sand,
/area/ruin/powered/beach)
"bL" = (
/obj/machinery/poolcontroller/invisible,
/turf/simulated/floor/beach/water,
/area/ruin/powered/beach)
"bM" = (
/turf/simulated/floor/plasteel/stairs/old,
/area/ruin/powered/beach)
@@ -477,12 +481,6 @@
"bW" = (
/turf/simulated/wall/r_wall,
/area/ruin/powered/beach)
"cd" = (
/obj/machinery/light/small{
dir = 1
},
/turf/simulated/wall/mineral/sandstone,
/area/ruin/powered/beach)
"cs" = (
/obj/effect/overlay/palmtree_l,
/obj/machinery/light{
@@ -567,6 +565,14 @@
},
/turf/simulated/floor/pod,
/area/ruin/powered/beach)
"Ei" = (
/obj/effect/turf_decal/sand,
/obj/machinery/light/small{
light_power = 3;
dir = 8
},
/turf/simulated/floor/plating,
/area/ruin/powered/beach)
"Gc" = (
/turf/simulated/floor/pod/light,
/area/ruin/powered/beach)
@@ -1054,7 +1060,7 @@ aa
(15,1,1) = {"
aa
bW
cd
aj
aj
aj
aF
@@ -1087,7 +1093,7 @@ aa
aa
bW
ak
ar
Ei
aj
aE
aC
@@ -1335,7 +1341,7 @@ bU
bU
bU
bU
bU
bL
bW
aa
"}
@@ -763,7 +763,7 @@
/obj/effect/turf_decal/tile/brown{
dir = 4
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -1683,7 +1683,7 @@
/turf/simulated/floor/plating,
/area/ruin/unpowered/syndicate_lava_base/testlab)
"dT" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -1996,7 +1996,7 @@
/obj/machinery/light/small{
dir = 8
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -2201,7 +2201,7 @@
/turf/simulated/floor/plasteel/dark,
/area/ruin/unpowered/syndicate_lava_base/testlab)
"eM" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/syndicate{
dir = 1;
pixel_y = -24
},
@@ -2513,7 +2513,7 @@
/obj/item/clothing/glasses/hud/health,
/obj/structure/disposalpipe/segment,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/firealarm{
/obj/machinery/firealarm/syndicate{
dir = 4;
pixel_x = 26
},
@@ -3613,7 +3613,7 @@
/turf/simulated/wall/mineral/plastitanium/nodiagonal,
/area/ruin/unpowered/syndicate_lava_base/main)
"hZ" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -3921,7 +3921,7 @@
/obj/machinery/light/small{
dir = 1
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/syndicate{
dir = 2;
pixel_y = 24
},
@@ -3958,7 +3958,7 @@
/turf/simulated/floor/plasteel/dark,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"iG" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -5194,7 +5194,7 @@
/turf/simulated/floor/plasteel/dark,
/area/ruin/unpowered/syndicate_lava_base/bar)
"kM" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/syndicate{
dir = 4;
pixel_x = 26
},
@@ -5281,7 +5281,7 @@
/obj/structure/chair{
dir = 1
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -5763,7 +5763,7 @@
/turf/simulated/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/medbay)
"mg" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -5871,7 +5871,7 @@
/obj/structure/bed/roller,
/obj/machinery/iv_drip,
/obj/item/reagent_containers/iv_bag/blood/OMinus,
/obj/machinery/firealarm{
/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
@@ -6546,7 +6546,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/syndicate{
dir = 2;
pixel_y = 24
},
@@ -6649,7 +6649,7 @@
/turf/simulated/floor/plasteel/white/side,
/area/ruin/unpowered/syndicate_lava_base/medbay)
"oh" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/syndicate{
dir = 8;
pixel_x = -26
},
+6 -2
View File
@@ -6,7 +6,7 @@
/turf/unsimulated/beach/water/deep,
/area/awaymission/undersea)
"ac" = (
/obj/machinery/poolcontroller/seacontroller,
/obj/machinery/poolcontroller/invisible/sea,
/turf/unsimulated/beach/water/deep,
/area/awaymission/undersea)
"ad" = (
@@ -1494,6 +1494,10 @@
/obj/structure/closet/crate,
/turf/unsimulated/beach/sand,
/area/awaymission/beach)
"LZ" = (
/obj/machinery/poolcontroller/invisible,
/turf/unsimulated/beach/water/deep,
/area/awaymission/beach)
(1,1,1) = {"
aa
@@ -15371,7 +15375,7 @@ du
du
du
du
du
LZ
"}
(55,1,1) = {"
aa
@@ -3608,7 +3608,7 @@
name = "MO19 Research"
})
"fj" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 2;
pixel_y = 24
},
@@ -5104,7 +5104,7 @@
pixel_y = 0;
tag = ""
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 28
},
@@ -5267,7 +5267,7 @@
pixel_x = -4;
pixel_y = 2
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 2;
pixel_y = 24
},
@@ -5413,7 +5413,7 @@
pixel_x = 0;
pixel_y = 0
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 28
},
@@ -6594,7 +6594,7 @@
name = "MO19 Arrivals"
})
"jp" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
@@ -7560,7 +7560,7 @@
name = "MO19 Arrivals"
})
"kK" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_y = -24
},
@@ -8028,7 +8028,7 @@
name = "MO19 Arrivals"
})
"lt" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
@@ -8649,7 +8649,7 @@
name = "MO19 Arrivals"
})
"mw" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
@@ -8898,7 +8898,7 @@
name = "MO19 Arrivals"
})
"mS" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
File diff suppressed because it is too large Load Diff
@@ -812,7 +812,7 @@
name = "UO45 Central Hall"
})
"by" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
@@ -1841,7 +1841,7 @@
name = "UO45 Central Hall"
})
"do" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 2;
pixel_x = 0;
pixel_y = 24
@@ -2133,7 +2133,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 2;
pixel_x = 0;
pixel_y = 24
@@ -3590,7 +3590,7 @@
name = "UO45 Central Hall"
})
"fW" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -4205,7 +4205,7 @@
name = "UO45 Research"
})
"gZ" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 2;
pixel_x = 0;
pixel_y = 24
@@ -4314,7 +4314,7 @@
/obj/machinery/light/small{
dir = 8
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 8;
pixel_x = -24
},
@@ -5061,7 +5061,7 @@
name = "UO45 Crew Quarters"
})
"iq" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 8;
pixel_x = -24
},
@@ -5827,7 +5827,7 @@
name = "UO45 Crew Quarters"
})
"jw" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 8;
pixel_x = -24
},
@@ -6511,7 +6511,7 @@
initialize_directions = 11;
tag = "icon-manifold-r-f (EAST)"
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
@@ -7046,7 +7046,7 @@
name = "UO45 Crew Quarters"
})
"lg" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -7409,7 +7409,7 @@
pixel_x = 0;
tag = ""
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -7594,7 +7594,7 @@
icon_state = "pipe-j1";
tag = "icon-pipe-j1 (EAST)"
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -7668,7 +7668,7 @@
name = "UO45 Research"
})
"lN" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -8181,7 +8181,7 @@
})
"mz" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 8;
pixel_x = -24
},
@@ -8241,7 +8241,7 @@
name = "UO45 Gateway"
})
"mE" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -9938,7 +9938,7 @@
scrub_N2O = 0;
scrub_Toxins = 0
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -10347,7 +10347,7 @@
/obj/machinery/light/small{
dir = 8
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 8;
pixel_x = -24
},
@@ -10384,7 +10384,7 @@
/obj/machinery/light/small{
dir = 4
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
@@ -11386,7 +11386,7 @@
/obj/item/storage/toolbox/mechanical{
pixel_y = 5
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 2;
pixel_x = 0;
pixel_y = 24
@@ -11735,7 +11735,7 @@
name = "UO45 Engineering"
})
"rj" = (
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 2;
pixel_x = 0;
pixel_y = 24
@@ -12914,7 +12914,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -15179,7 +15179,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 1;
pixel_x = 0;
pixel_y = -24
@@ -16281,7 +16281,7 @@
})
"xp" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/firealarm{
/obj/machinery/firealarm/no_alarm{
dir = 4;
pixel_x = 24
},
+5 -1
View File
@@ -12566,6 +12566,10 @@
/obj/effect/landmark/ai_multicam_room,
/turf/unsimulated/ai_visible,
/area/ai_multicam_room)
"Qt" = (
/obj/machinery/poolcontroller/invisible,
/turf/unsimulated/beach/water,
/area/ninja/holding)
"QE" = (
/obj/structure/chair/sofa/right,
/turf/simulated/shuttle/floor{
@@ -54450,7 +54454,7 @@ fI
fH
fH
he
hv
Qt
fg
aN
aN
+1
View File
@@ -628,6 +628,7 @@
/obj/effect/turf_decal/tile/brown{
dir = 4
},
/obj/effect/baseturf_helper/lava_land/surface,
/turf/simulated/floor/plasteel,
/area/mine/eva)
"bH" = (
@@ -141,6 +141,10 @@
icon_state = "freezerfloor"
},
/area/template_noop)
"K" = (
/obj/machinery/poolcontroller/invisible,
/turf/unsimulated/beach/water,
/area/template_noop)
(1,1,1) = {"
a
@@ -153,7 +157,7 @@ a
"}
(2,1,1) = {"
a
b
K
b
l
o
@@ -142,6 +142,10 @@
icon_state = "freezerfloor"
},
/area/template_noop)
"O" = (
/obj/machinery/poolcontroller/invisible,
/turf/unsimulated/beach/water,
/area/template_noop)
(1,1,1) = {"
a
@@ -154,7 +158,7 @@ a
"}
(2,1,1) = {"
a
b
O
b
l
o
@@ -190,6 +190,10 @@
icon_state = "floor4"
},
/area/template_noop)
"X" = (
/obj/machinery/poolcontroller/invisible,
/turf/unsimulated/beach/water,
/area/template_noop)
(1,1,1) = {"
a
@@ -202,7 +206,7 @@ a
"}
(2,1,1) = {"
a
b
X
b
l
o
@@ -129,6 +129,10 @@
icon_state = "freezerfloor"
},
/area/template_noop)
"Z" = (
/obj/machinery/poolcontroller/invisible,
/turf/unsimulated/beach/water,
/area/template_noop)
(1,1,1) = {"
a
@@ -141,7 +145,7 @@ a
"}
(2,1,1) = {"
a
b
Z
b
k
n
@@ -131,6 +131,10 @@
icon_state = "freezerfloor"
},
/area/template_noop)
"X" = (
/obj/machinery/poolcontroller/invisible,
/turf/unsimulated/beach/water,
/area/template_noop)
(1,1,1) = {"
a
@@ -143,7 +147,7 @@ a
"}
(2,1,1) = {"
a
b
X
b
m
p
+2
View File
@@ -17,6 +17,8 @@
#define ismecha(A) (istype(A, /obj/mecha))
#define iseffect(A) (istype(A, /obj/effect))
#define is_cleanable(A) (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/rune)) //if something is cleanable
#define is_pen(W) (istype(W, /obj/item/pen))
+2 -2
View File
@@ -1718,8 +1718,8 @@ var/mob/dview/dview_mob = new
/proc/turf_clear(turf/T)
for(var/atom/A in T)
if(A.simulated)
return 0
return 1
return FALSE
return TRUE
/proc/screen_loc2turf(scr_loc, turf/origin)
var/tX = splittext(scr_loc, ",")
+1 -1
View File
@@ -30,7 +30,7 @@ SUBSYSTEM_DEF(mapping)
var/mining_type = MINETYPE
if (mining_type == "lavaland")
// Spawn Lavaland ruins and rivers.
seedRuins(list(level_name_to_num(MINING)), config.lavaland_budget, /area/lavaland/surface/outdoors, lava_ruins_templates)
seedRuins(list(level_name_to_num(MINING)), config.lavaland_budget, /area/lavaland/surface/outdoors/unexplored, lava_ruins_templates)
spawn_rivers()
else
// Populate mining Z-level hidden rooms
+2
View File
@@ -523,3 +523,5 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/proc/HasRoundStarted()
return current_state >= GAME_STATE_PLAYING
/datum/controller/subsystem/ticker/proc/IsRoundInProgress()
return current_state == GAME_STATE_PLAYING
+1 -1
View File
@@ -624,7 +624,7 @@ var/record_id_num = 1001
clothes_s = new /icon('icons/mob/uniform.dmi', "syndicate_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "swat_gl"), ICON_UNDERLAY)
else if(H.mind.assigned_role in get_all_centcom_jobs())
else if(H.mind && H.mind.assigned_role in get_all_centcom_jobs())
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
else
+1 -1
View File
@@ -12,7 +12,7 @@
var/last_bumped = 0
var/pass_flags = 0
var/germ_level = GERM_LEVEL_AMBIENT // The higher the germ level, the more germ on the atom.
var/simulated = 1 //filter for actions - used by lighting overlays
var/simulated = TRUE //filter for actions - used by lighting overlays
var/atom_say_verb = "says"
var/dont_save = 0 // For atoms that are temporary by necessity - like lighting overlays
+6 -9
View File
@@ -380,23 +380,20 @@
//Overlays
/atom/movable/overlay
var/atom/master = null
anchored = 1
anchored = TRUE
simulated = FALSE
/atom/movable/overlay/New()
verbs.Cut()
return
/atom/movable/overlay/attackby(a, b, c)
if(src.master)
return src.master.attackby(a, b, c)
return
if(master)
return master.attackby(a, b, c)
/atom/movable/overlay/attack_hand(a, b, c)
if(src.master)
return src.master.attack_hand(a, b, c)
return
if(master)
return master.attack_hand(a, b, c)
/atom/movable/proc/water_act(volume, temperature, source, method = TOUCH) //amount of water acting : temperature of water in kelvin : object that called it (for shennagins)
return TRUE
@@ -181,9 +181,19 @@
S.Integrate(src)
return FALSE
/atom/movable/lighting_object/swarmer_act()
/atom/movable/swarmer_act()
if(!simulated)
return FALSE
return ..()
/obj/effect/swarmer_act()
return FALSE
/obj/effect/decal/cleanable/robot_debris/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
S.DisIntegrate(src)
qdel(src)
return TRUE
/obj/item/gun/swarmer_act()//Stops you from eating the entire armory
return FALSE
+4 -2
View File
@@ -295,10 +295,12 @@
to_chat(O, "The screen bursts into static.")
/obj/machinery/camera/proc/triggerCameraAlarm()
SSalarms.camera_alarm.triggerAlarm(loc, src)
if(is_station_contact(z))
SSalarms.camera_alarm.triggerAlarm(loc, src)
/obj/machinery/camera/proc/cancelCameraAlarm()
SSalarms.camera_alarm.clearAlarm(loc, src)
if(is_station_contact(z))
SSalarms.camera_alarm.clearAlarm(loc, src)
/obj/machinery/camera/proc/can_use()
if(!status)
+7 -6
View File
@@ -43,19 +43,20 @@
/obj/machinery/camera/proc/cancelAlarm()
if(!status || (stat & NOPOWER))
return 0
if(detectTime == -1)
return FALSE
if(detectTime == -1 && is_station_contact(z))
SSalarms.motion_alarm.clearAlarm(loc, src)
detectTime = 0
return 1
return TRUE
/obj/machinery/camera/proc/triggerAlarm()
if(!status || (stat & NOPOWER))
return 0
if(!detectTime) return 0
return FALSE
if(!detectTime || !is_station_contact(z))
return FALSE
SSalarms.motion_alarm.triggerAlarm(loc, src)
detectTime = -1
return 1
return TRUE
/obj/machinery/camera/HasProximity(atom/movable/AM as mob|obj)
// Motion cameras outside of an "ai monitored" area will use this to detect stuff.
+23 -15
View File
@@ -21,6 +21,16 @@ FIRE ALARM
var/wiresexposed = 0
var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone
var/report_fire_alarms = TRUE // Should triggered fire alarms also trigger an actual alarm?
var/show_alert_level = TRUE // Should fire alarms display the current alert level?
/obj/machinery/firealarm/no_alarm
report_fire_alarms = FALSE
/obj/machinery/firealarm/syndicate
report_fire_alarms = FALSE
show_alert_level = FALSE
/obj/machinery/firealarm/update_icon()
if(wiresexposed)
@@ -215,40 +225,38 @@ FIRE ALARM
time = min(max(round(time), 0), 120)
/obj/machinery/firealarm/proc/reset()
if(!( working ))
if(!working)
return
var/area/A = get_area(src)
A.fire_reset()
for(var/obj/machinery/firealarm/FA in A)
SSalarms.fire_alarm.clearAlarm(loc, FA)
return
if(is_station_contact(z) && FA.report_fire_alarms)
SSalarms.fire_alarm.clearAlarm(loc, FA)
/obj/machinery/firealarm/proc/alarm(var/duration = 0)
if(!( working))
if(!working)
return
var/area/A = get_area(src)
for(var/obj/machinery/firealarm/FA in A)
SSalarms.fire_alarm.triggerAlarm(loc, FA, duration)
if(is_station_contact(z) && FA.report_fire_alarms)
SSalarms.fire_alarm.triggerAlarm(loc, FA, duration)
else
A.fire_alert() // Manually trigger alarms if the alarm isn't reported
update_icon()
//playsound(loc, 'sound/ambience/signal.ogg', 75, 0)
return
/obj/machinery/firealarm/New(location, direction, building)
..()
if(location)
loc = location
if(direction)
dir = direction
if(building)
buildstage = 0
wiresexposed = 1
wiresexposed = TRUE
pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24)
pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0
if(is_station_contact(z))
if(is_station_contact(z) && show_alert_level)
if(security_level)
overlays += image('icons/obj/monitors.dmi', "overlay_[get_security_level()]")
else
+7 -7
View File
@@ -348,28 +348,28 @@ Class Procs:
return attack_hand(user)
/obj/machinery/attack_hand(mob/user as mob)
if(user.lying || user.stat)
return 1
if(user.incapacitated())
return TRUE
if(!user.IsAdvancedToolUser())
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
return 1
return TRUE
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.getBrainLoss() >= 60)
visible_message("<span class='warning'>[H] stares cluelessly at [src] and drools.</span>")
return 1
return TRUE
else if(prob(H.getBrainLoss()))
to_chat(user, "<span class='warning'>You momentarily forget how to use [src].</span>")
return 1
return TRUE
if(panel_open)
add_fingerprint(user)
return 0
return FALSE
if(!interact_offline && stat & (NOPOWER|BROKEN|MAINT))
return 1
return TRUE
add_fingerprint(user)
+28 -19
View File
@@ -20,13 +20,36 @@
var/list/linkedmist = list() //Used to keep track of created mist
var/deep_water = FALSE //set to 1 to drown even standing people
/obj/machinery/poolcontroller/invisible
invisibility = INVISIBILITY_MAXIMUM
name = "Water Controller"
desc = "An invisible water controller. Players shouldn't see this."
/obj/machinery/poolcontroller/New() //This proc automatically happens on world start
/obj/machinery/poolcontroller/invisible/sea
name = "Sea Controller"
desc = "A controller for the underwater portion of the sea. Players shouldn't see this."
deep_water = TRUE
/obj/machinery/poolcontroller/Initialize(mapload)
var/contents_loop = linked_area
if(!linked_area)
for(var/turf/simulated/floor/beach/water/W in range(srange,src)) //Search for /turf/simulated/floor/beach/water in the range of var/srange
linkedturfs += W //Add found pool turfs to the central list.
W.linkedcontroller = src // And add the linked controller to itself.
..() //Changed to call parent as per MarkvA's recommendation
contents_loop = range(srange, src)
for(var/turf/T in contents_loop)
if(istype(T, /turf/simulated/floor/beach/water))
var/turf/simulated/floor/beach/water/W = T
W.linkedcontroller = src
linkedturfs += T
else if(istype(T, /turf/unsimulated/beach/water))
var/turf/unsimulated/beach/water/W = T
W.linkedcontroller = src
linkedturfs += T
. = ..()
/obj/machinery/poolcontroller/invisible/Initialize(mapload)
linked_area = get_area(src)
. = ..()
/obj/machinery/poolcontroller/emag_act(user as mob) //Emag_act, this is called when it is hit with a cryptographic sequencer.
if(!emagged) //If it is not already emagged, emag it.
@@ -190,20 +213,6 @@
return 1
/obj/machinery/poolcontroller/seacontroller
invisibility = 101
unacidable = 1
name = "Sea Controller"
desc = "A controller for the underwater portion of the sea. Players shouldn't see this."
deep_water = TRUE //deep sea is deep water
/obj/machinery/poolcontroller/seacontroller/Initialize()
linked_area = get_area(src)
for(var/turf/unsimulated/beach/water/W in linked_area)
linkedturfs += W //Add found pool turfs to the central list.
W.linkedcontroller = src // And add the linked controller to itself.
..()
#undef FRIGID
#undef COOL
#undef NORMAL
+79 -27
View File
@@ -3,68 +3,120 @@
desc = "Looks unstable. Best to test it with the clown."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "portal"
density = 1
unacidable = 1//Can't destroy energy portals.
var/failchance = 5
density = TRUE
unacidable = TRUE
anchored = TRUE
var/obj/item/target = null
var/creator = null
anchored = 1
var/precision = 1 // how close to the portal you will teleport. 0 = on the portal, 1 = adjacent
var/can_multitool_to_remove = 0
var/failchance = 5
var/fail_icon = "portal1"
var/precision = TRUE // how close to the portal you will teleport. FALSE = on the portal, TRUE = adjacent
var/can_multitool_to_remove = FALSE
var/ignore_tele_proof_area_setting = FALSE
/obj/effect/portal/Bumped(mob/M as mob|obj)
teleport(M)
/obj/effect/portal/New(loc, turf/target, creator=null, lifespan=300)
/obj/effect/portal/New(loc, turf/target, creator = null, lifespan = 300)
..()
GLOB.portals += src
src.loc = loc
src.target = target
src.creator = creator
if(lifespan > 0)
spawn(lifespan)
qdel(src)
/obj/effect/portal/Destroy()
GLOB.portals -= src
if(istype(creator, /obj))
if(isobj(creator))
var/obj/O = creator
O.portal_destroyed(src)
creator = null
target = null
return ..()
/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj)
if(istype(M, /obj/effect)) //sparks don't teleport
/obj/effect/portal/singularity_pull()
return
/obj/effect/portal/singularity_act()
return
/obj/effect/portal/Crossed(atom/movable/AM)
if(isobserver(AM))
return ..()
if(!teleport(AM))
return ..()
/obj/effect/portal/attack_tk(mob/user)
return
/obj/effect/portal/attack_hand(mob/user)
. = ..()
if(.)
return
if(M.anchored&&istype(M, /obj/mecha))
return
if(!( target ))
qdel(src)
return
if(istype(M, /atom/movable))
if(prob(failchance))
src.icon_state = "portal1"
if(!do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to deep space.
invalid_teleport()
else
if(!do_teleport(M, target, precision, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to a turf adjacent to target.
invalid_teleport()
if(get_turf(user) == get_turf(src))
teleport(user)
if(Adjacent(user))
user.forceMove(get_turf(src))
/obj/effect/portal/attack_ghost(mob/dead/observer/O)
if(target)
O.forceMove(target)
/obj/effect/portal/attackby(obj/item/A, mob/user)
if(istype(A, /obj/item/multitool) && can_multitool_to_remove)
if(ismultitool(A) && can_multitool_to_remove)
qdel(src)
else if(user && Adjacent(user))
user.forceMove(get_turf(src))
return TRUE
/obj/effect/portal/proc/teleport(atom/movable/M, force = FALSE)
if(!istype(M))
return FALSE
if(!M.simulated || iseffect(M))
return FALSE
if(M.anchored && ismecha(M))
return FALSE
if(!target)
qdel(src)
return FALSE
if(ismegafauna(M))
message_admins("[M] has used a portal at [ADMIN_VERBOSEJMP(src)] made by [key_name_admin(usr)].")
if(prob(failchance))
icon_state = fail_icon
if(!do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to deep space.
invalid_teleport()
return FALSE
else
if(!do_teleport(M, target, precision, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to a turf adjacent to target.
invalid_teleport()
return FALSE
return TRUE
/obj/effect/portal/proc/invalid_teleport()
visible_message("<span class='warning'>[src] flickers and fails due to bluespace interference!</span>")
do_sparks(5, 0, loc)
qdel(src)
/obj/effect/portal/redspace
name = "redspace portal"
desc = "A portal capable of bypassing bluespace interference."
icon_state = "portal1"
failchance = 0
precision = 0
ignore_tele_proof_area_setting = TRUE
ignore_tele_proof_area_setting = TRUE
+12 -12
View File
@@ -93,14 +93,14 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
icon = 'icons/obj/stationobjs.dmi'
icon_state = "glassbox20"
desc = "A display case for prized possessions. It taunts you to kick it."
density = 1
anchored = 1
unacidable = 1 //Dissolving the case would also delete the contents.
density = TRUE
anchored = TRUE
unacidable = TRUE //Dissolving the case would also delete the contents.
var/health = 30
var/obj/item/occupant = null
var/destroyed = 0
var/locked = 0
var/burglar_alarm = 0
var/destroyed = FALSE
var/locked = FALSE
var/burglar_alarm = FALSE
var/ue = null
var/image/occupant_overlay = null
var/obj/item/airlock_electronics/circuit
@@ -116,8 +116,8 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
/obj/structure/displaycase/captains_laser
name = "captain's display case"
desc = "A display case for the captain's antique laser gun. Hooked up with an anti-theft system."
burglar_alarm = 1
locked = 1
burglar_alarm = TRUE
locked = TRUE
req_access = list(access_captain)
start_showpiece_type = /obj/item/gun/energy/laser/captain
@@ -205,7 +205,7 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
return
/obj/structure/displaycase/proc/burglar_alarm()
if(burglar_alarm)
if(burglar_alarm && is_station_contact(z))
var/area/alarmed = get_area(src)
alarmed.burglaralert(src)
visible_message("<span class='danger'>The burglar alarm goes off!</span>")
@@ -215,10 +215,10 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
sleep(74) // 7.4 seconds long
/obj/structure/displaycase/update_icon()
if(src.destroyed)
src.icon_state = "glassbox2b"
if(destroyed)
icon_state = "glassbox2b"
else
src.icon_state = "glassbox2[locked]"
icon_state = "glassbox2[locked]"
overlays = 0
if(occupant)
var/icon/occupant_icon=getFlatIcon(occupant)
@@ -18,9 +18,6 @@
if(prob(floor_variance))
icon_state = "[environment_type][rand(0,12)]"
/turf/simulated/floor/plating/asteroid/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
/turf/simulated/floor/plating/asteroid/burn_tile()
return
@@ -95,12 +92,6 @@
slowdown = 0
return
/turf/simulated/floor/plating/asteroid/singularity_act()
return
/turf/simulated/floor/plating/asteroid/singularity_pull(S, current_size)
return
/turf/simulated/floor/plating/asteroid/basalt
name = "volcanic floor"
baseturf = /turf/simulated/floor/plating/asteroid/basalt
+2 -2
View File
@@ -8,7 +8,7 @@
canSmoothWith = list(/turf/simulated/floor/chasm)
density = TRUE //This will prevent hostile mobs from pathing into chasms, while the canpass override will still let it function like an open turf
var/static/list/falling_atoms = list() //Atoms currently falling into the chasm
var/static/list/forbidden_types = typecacheof(list(/obj/effect/portal, /obj/singularity, /obj/structure/stone_tile, /obj/item/projectile, /obj/effect/temp_visual, /obj/effect/collapse, /obj/effect/collapse, /atom/movable/lighting_object))
var/static/list/forbidden_types = typecacheof(list(/obj/effect/portal, /obj/singularity, /obj/structure/stone_tile, /obj/item/projectile, /obj/effect/temp_visual, /obj/effect/collapse, /obj/effect/collapse))
var/drop_x = 1
var/drop_y = 1
var/drop_z = 1
@@ -75,7 +75,7 @@
return FALSE
if(!isliving(AM) && !isobj(AM))
return FALSE
if(is_type_in_typecache(AM, forbidden_types) || AM.throwing)
if(!AM.simulated || is_type_in_typecache(AM, forbidden_types) || AM.throwing)
return FALSE
//Flies right over the chasm
if(isliving(AM))
+4 -4
View File
@@ -53,13 +53,13 @@
return FALSE
var/thing_to_check = src
if (AM)
if(AM)
thing_to_check = list(AM)
for(var/thing in thing_to_check)
if(istype(thing, /atom/movable/lighting_object) || istype(thing, /atom/movable/overlay))
continue
if(isobj(thing))
var/obj/O = thing
if(!O.simulated)
continue
if((O.resistance_flags & (LAVA_PROOF|INDESTRUCTIBLE)) || O.throwing)
continue
. = 1
@@ -71,7 +71,7 @@
O.resistance_flags &= ~FIRE_PROOF
O.fire_act(10000, 1000)
else if (isliving(thing))
else if(isliving(thing))
. = 1
var/mob/living/L = thing
if(L.flying)
@@ -254,6 +254,3 @@
/turf/simulated/floor/plating/abductor2/burn_tile()
return //unburnable
/turf/simulated/floor/plating/abductor2/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
@@ -43,6 +43,9 @@
name = "beach"
icon = 'icons/misc/beach.dmi'
/turf/simulated/floor/beach/pry_tile(obj/item/C, mob/user, silent = FALSE)
return
/turf/simulated/floor/beach/sand
name = "sand"
icon_state = "sand"
@@ -67,10 +70,6 @@
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
var/obj/machinery/poolcontroller/linkedcontroller = null
/turf/simulated/floor/beach/water/pry_tile(obj/item/C, mob/user, silent = FALSE)
return //cannot pry off tiles of water
/turf/simulated/floor/beach/water/New()
..()
var/image/overlay_image = image('icons/misc/beach.dmi', icon_state = "water5", layer = ABOVE_MOB_LAYER)
+5 -7
View File
@@ -2,7 +2,7 @@
name = "plating"
icon_state = "plating"
icon = 'icons/turf/floors/plating.dmi'
intact = 0
intact = FALSE
floor_tile = null
broken_states = list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5")
burnt_states = list("floorscorched1", "floorscorched2")
@@ -103,7 +103,7 @@
/turf/simulated/floor/engine/attack_hand(mob/user as mob)
user.Move_Pulled(src)
/turf/simulated/floor/engine/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
/turf/simulated/floor/engine/pry_tile(obj/item/C, mob/user, silent = FALSE)
return
/turf/simulated/floor/engine/attackby(obj/item/C as obj, mob/user as mob, params)
@@ -224,7 +224,7 @@
/turf/simulated/floor/snow/ex_act(severity)
return
/turf/simulated/floor/snow/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
/turf/simulated/floor/snow/pry_tile(obj/item/C, mob/user, silent = FALSE)
return
/turf/simulated/floor/plating/metalfoam
@@ -243,12 +243,10 @@
if(MFOAM_IRON)
icon_state = "ironfoam"
/turf/simulated/floor/plating/metalfoam/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
/turf/simulated/floor/plating/metalfoam/attackby(var/obj/item/C, mob/user, params)
if(..())
return 1
return TRUE
if(istype(C) && C.force)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
+1 -1
View File
@@ -136,7 +136,7 @@
var/obj/structure/sign/poster/P = O
P.roll_and_drop(src)
else
O.loc = src
O.forceMove(src)
ChangeTurf(/turf/simulated/floor/plating)
+1 -1
View File
@@ -88,7 +88,7 @@
/turf/space/transit/Entered(atom/movable/AM, atom/OldLoc, ignoreRest = 0)
if(!AM)
return
if(istype(AM, /obj/docking_port) || !AM.simulated)
if(!AM.simulated || istype(AM, /obj/docking_port))
return //this was fucking hilarious, the docking ports were getting thrown to random Z-levels
var/max = world.maxx-TRANSITIONEDGE
var/min = 1+TRANSITIONEDGE
+2 -4
View File
@@ -491,16 +491,14 @@
var/turf/T0 = src
for(var/X in T0.GetAllContents())
var/atom/A = X
if(!A.simulated)
continue
if(istype(A, /mob/dead))
continue
if(istype(A, /obj/effect/landmark))
continue
if(istype(A, /obj/docking_port))
continue
if(istype(A, /atom/movable/lighting_object))
continue
if(!A.simulated)
continue
qdel(A, force=TRUE)
T0.ChangeTurf(turf_type)
@@ -161,7 +161,7 @@ var/sc_safecode5 = "[rand(0,9)]"
desc = "Your body becomes weak and your feel your mind slipping away as you try to comprehend what you know can't be possible."
move_self = 0 //Contianed narsie does not move!
grav_pull = 0 //Contained narsie does not pull stuff in!
var/uneatable = list(/turf/space, /obj/effect/overlay, /atom/movable/lighting_object, /mob/living/simple_animal/hostile/construct)
var/uneatable = list(/turf/space, /obj/effect/overlay, /mob/living/simple_animal/hostile/construct)
//Override this to prevent no adminlog runtimes and admin warnings about a singularity without containment
/obj/singularity/narsie/sc_Narsie/admin_investigate_setup()
@@ -173,14 +173,16 @@ var/sc_safecode5 = "[rand(0,9)]"
mezzer()
/obj/singularity/narsie/sc_Narsie/consume(var/atom/A)
if(!A.simulated)
return FALSE
if(is_type_in_list(A, uneatable))
return 0
return FALSE
if(istype(A,/mob/living))
var/mob/living/L = A
L.gib()
else if(istype(A,/obj/))
var/obj/O = A
O.ex_act(1.0)
O.ex_act(1)
if(O) qdel(O)
else if(isturf(A))
var/turf/T = A
+21 -19
View File
@@ -34,7 +34,6 @@
qdel(O)
wormholes.Cut()
/obj/effect/portal/wormhole
name = "wormhole"
desc = "It looks highly unstable; It could close at any moment."
@@ -42,23 +41,26 @@
icon_state = "anom"
failchance = 0
/obj/effect/portal/wormhole/attack_hand(mob/user)
teleport(user)
/obj/effect/portal/wormhole/attackby(obj/item/I, mob/user, params)
teleport(user)
/obj/effect/portal/wormhole/teleport(atom/movable/M)
if(istype(M, /obj/effect)) //sparks don't teleport
return
if(M.anchored && istype(M, /obj/mecha))
return
if(!istype(M))
return FALSE
if(istype(M, /atom/movable))
var/turf/target
if(GLOB.portals.len)
var/obj/effect/portal/P = pick(GLOB.portals)
if(P && isturf(P.loc))
target = P.loc
if(!target) return
do_teleport(M, target, 1, 1, 0, 0) ///You will appear adjacent to the beacon
if(!M.simulated || iseffect(M))
return FALSE
if(M.anchored && ismecha(M))
return FALSE
var/turf/target
if(GLOB.portals.len)
var/obj/effect/portal/P = pick(GLOB.portals)
if(P && isturf(P.loc))
target = P.loc
if(!target)
return FALSE
if(!do_teleport(M, target, 1, TRUE)) ///You will appear adjacent to the beacon
return FALSE
return TRUE
@@ -129,7 +129,7 @@
name = "goliath meat"
desc = "A slab of goliath meat. It's not very edible now, but it cooks great in lava."
icon_state = "goliathmeat"
list_reagents = list("nutriment" = 3, "toxin" = 5)
list_reagents = list("protein" = 3, "toxin" = 5)
/obj/item/reagent_containers/food/snacks/goliath/burn()
visible_message("[src] finishes cooking!")
@@ -222,6 +222,7 @@
resistance_flags = LAVA_PROOF | FIRE_PROOF
icon_state = "goliathsteak"
trash = null
list_reagents = list("protein" = 6, "vitamin" = 2)
//////////////////////
// Cubes //
@@ -157,6 +157,9 @@
pass_flags = PASSTABLE
visible_contents = FALSE
/obj/machinery/smartfridge/disks/accept_check(obj/item/O)
return istype(O, /obj/item/disk)
// ----------------------------
// Virology Medical Smartfridge
// ----------------------------
+22 -28
View File
@@ -699,7 +699,7 @@
/obj/item/wormhole_jaunter
name = "wormhole jaunter"
desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to blue space for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least."
desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to bluespace for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least.\nThanks to modifications provided by the Free Golems, this jaunter can be worn on the belt to provide protection from chasms."
icon = 'icons/obj/items.dmi'
icon_state = "Jaunter"
item_state = "electronic"
@@ -708,15 +708,16 @@
throw_speed = 3
throw_range = 5
origin_tech = "bluespace=2"
slot_flags = SLOT_BELT
/obj/item/wormhole_jaunter/attack_self(mob/user)
user.visible_message("<span class='notice'>[user.name] activates the [src.name]!</span>")
user.visible_message("<span class='notice'>[user.name] activates the [name]!</span>")
activate(user, TRUE)
/obj/item/wormhole_jaunter/proc/turf_check(mob/user)
var/turf/device_turf = get_turf(user)
if(!device_turf || !is_teleport_allowed(device_turf.z))
to_chat(user, "<span class='notice'>You're having difficulties getting the [src.name] to work.</span>")
to_chat(user, "<span class='notice'>You're having difficulties getting the [name] to work.</span>")
return FALSE
return TRUE
@@ -736,49 +737,42 @@
var/list/L = get_destinations(user)
if(!L.len)
to_chat(user, "<span class='notice'>The [src.name] found no beacons in the world to anchor a wormhole to.</span>")
to_chat(user, "<span class='notice'>The [name] found no beacons in the world to anchor a wormhole to.</span>")
return
var/chosen_beacon = pick(L)
var/obj/effect/portal/wormhole/jaunt_tunnel/J = new (get_turf(src), src, 100, null, FALSE, get_turf(chosen_beacon))
var/obj/effect/portal/jaunt_tunnel/J = new(get_turf(src), get_turf(chosen_beacon), src, 100)
if(adjacent)
try_move_adjacent(J)
else
J.teleport(user)
playsound(src,'sound/effects/sparks4.ogg',50,1)
qdel(src)
/obj/item/wormhole_jaunter/proc/chasm_react(mob/user)
if(user.get_item_by_slot(SLOT_BELT) == src)
if(user.get_item_by_slot(slot_belt) == src)
to_chat(user, "Your [name] activates, saving you from the chasm!</span>")
activate(user, FALSE)
else
to_chat(user, "[src] is not attached to your belt, preventing it from saving you from the chasm. RIP.</span>")
/obj/effect/portal/wormhole/jaunt_tunnel
/obj/effect/portal/jaunt_tunnel
name = "jaunt tunnel"
icon = 'icons/effects/effects.dmi'
icon_state = "bhole3"
desc = "A stable hole in the universe made by a wormhole jaunter. Turbulent doesn't even begin to describe how rough passage through one of these is, but at least it will always get you somewhere near a beacon."
failchance = 0
/obj/effect/portal/wormhole/jaunt_tunnel/teleport(atom/movable/M)
if(istype(M, /obj/effect))
return
if(istype(M, /atom/movable))
if(do_teleport(M, target, 6))
if(isliving(M))
var/mob/living/L = M
L.Weaken(3)
if(ishuman(L))
shake_camera(L, 20, 1)
var/mob/living/carbon/human/H = L
spawn(20)
if(H && H.check_has_mouth())
H.visible_message("<span class='danger'>[L.name] vomits from travelling through the [src.name]!</span>", "<span class='userdanger'>You throw up from travelling through the [src.name]!</span>")
H.nutrition -= 20
H.adjustToxLoss(-3)
var/turf/T = get_turf(H)
T.add_vomit_floor()
else
visible_message("<span class='warning'>[src] flickers and fails, due to bluespace interference!</span>")
qdel(src)
/obj/effect/portal/jaunt_tunnel/teleport(atom/movable/M)
. = ..()
if(.)
// KERPLUNK
playsound(M,'sound/weapons/resonator_blast.ogg', 50, 1)
if(iscarbon(M))
var/mob/living/carbon/L = M
L.Weaken(6)
if(ishuman(L))
shake_camera(L, 20, 1)
addtimer(CALLBACK(L, /mob/living/carbon.proc/vomit), 20)
/**********************Resonator**********************/
+1 -11
View File
@@ -4,6 +4,7 @@
icon_state = "l_mushroom"
name = "large mushrooms"
desc = "A number of large mushrooms, covered in a faint layer of ash and what can only be spores."
anchored = TRUE
var/harvested_name = "shortened mushrooms"
var/harvested_desc = "Some quickly regrowing mushrooms, formerly known to be quite large."
var/needs_sharp_harvest = TRUE
@@ -26,17 +27,6 @@
if(prob(15))
harvest(null, TRUE)
/obj/structure/flora/ash/ex_act(severity, target)
switch(severity)
if(1)
qdel(src)
if(2)
if(prob(80))
qdel(src)
if(3)
if(prob(50))
qdel(src)
/obj/structure/flora/ash/proc/harvest(user, no_drop)
if(harvested)
return 0
@@ -72,7 +72,7 @@
var/mob/dead/observer/current_spirits = list()
for(var/mob/dead/observer/O in GLOB.player_list)
if(is_type_in_list(O.following, contents))
if((O.following in contents))
ghost_counter++
O.invisibility = 0
current_spirits |= O
@@ -198,7 +198,7 @@
user.visible_message("<span class='danger'>[user] turns \the [T] into [transform_string]!</span>")
message_admins("[key_name_admin(user)] fired the lava staff at [get_area(target)] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>).")
log_game("[key_name(user)] fired the lava staff at [get_area(target)] ([T.x], [T.y], [T.z]).")
T.TerraformTurf(turf_type)
T.TerraformTurf(turf_type, keep_icon = FALSE)
timer = world.time + create_cooldown
qdel(L)
else
@@ -207,7 +207,7 @@
return
else
user.visible_message("<span class='danger'>[user] turns \the [T] into [reset_string]!</span>")
T.TerraformTurf(reset_turf_type)
T.TerraformTurf(reset_turf_type, keep_icon = FALSE)
timer = world.time + reset_cooldown
playsound(T,'sound/magic/fireball.ogg', 200, 1)
@@ -30,7 +30,6 @@
if(6)
new /obj/item/pickaxe/diamond(src)
if(7)
new /obj/item/clothing/head/culthood(src)
new /obj/item/clothing/suit/hooded/cultrobes(src)
new /obj/item/bedsheet/cult(src)
if(8)
+19 -12
View File
@@ -20,18 +20,27 @@
anchored = TRUE
var/obj/machinery/mineral/processing_unit/machine = null
var/machinedir = EAST
speed_process = TRUE
/obj/machinery/mineral/processing_unit_console/New()
..()
/obj/machinery/mineral/processing_unit_console/Initialize(mapload)
. = ..()
machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir))
if(machine)
machine.CONSOLE = src
else
qdel(src)
return INITIALIZE_HINT_QDEL
/obj/machinery/mineral/processing_unit_console/attack_ghost(mob/user)
return ui_interact(user)
/obj/machinery/mineral/processing_unit_console/attack_hand(mob/user)
if(..())
return
return TRUE
return ui_interact(user)
/obj/machinery/mineral/processing_unit_console/ui_interact(mob/user)
. = ..()
if(!machine)
return
@@ -43,7 +52,8 @@
/obj/machinery/mineral/processing_unit_console/Topic(href, href_list)
if(..())
return
return TRUE
usr.set_machine(src)
add_fingerprint(usr)
@@ -59,15 +69,14 @@
machine.on = (href_list["set_on"] == "on")
updateUsrDialog()
return TRUE
/obj/machinery/mineral/processing_unit_console/Destroy()
machine = null
return ..()
/**********************Mineral processing unit**************************/
/obj/machinery/mineral/processing_unit
name = "furnace"
icon = 'icons/obj/machines/mining_machines.dmi'
@@ -81,8 +90,8 @@
var/datum/research/files
speed_process = TRUE
/obj/machinery/mineral/processing_unit/New()
..()
/obj/machinery/mineral/processing_unit/Initialize(mapload)
. = ..()
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, TRUE, /obj/item/stack)
files = new /datum/research/smelter(src)
@@ -99,6 +108,7 @@
for(var/obj/item/stack/ore/O in T)
process_ore(O)
CHECK_TICK
if(on)
if(selected_material)
smelt_ore()
@@ -106,11 +116,9 @@
else if(selected_alloy)
smelt_alloy()
if(CONSOLE)
CONSOLE.updateUsrDialog()
/obj/machinery/mineral/processing_unit/proc/process_ore(obj/item/stack/ore/O)
GET_COMPONENT(materials, /datum/component/material_container)
var/material_amount = materials.get_item_material_amount(O)
@@ -167,7 +175,6 @@
var/out = get_step(src, output_dir)
materials.retrieve_sheets(sheets_to_remove, selected_material, out)
/obj/machinery/mineral/processing_unit/proc/smelt_alloy()
var/datum/design/alloy = files.FindDesignByID(selected_alloy) //check if it's a valid design
if(!alloy)
+4
View File
@@ -245,6 +245,10 @@
/mob/proc/get_item_by_slot(slot_id)
switch(slot_id)
if(slot_wear_mask)
return wear_mask
if(slot_back)
return back
if(slot_l_hand)
return l_hand
if(slot_r_hand)
+6 -5
View File
@@ -712,17 +712,18 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
return back
if(slot_wear_mask)
return wear_mask
if(slot_handcuffed)
return handcuffed
if(slot_legcuffed)
return legcuffed
if(slot_wear_suit)
return wear_suit
if(slot_l_hand)
return l_hand
if(slot_r_hand)
return r_hand
if(slot_handcuffed)
return handcuffed
if(slot_legcuffed)
return legcuffed
return null
//generates realistic-ish pulse output based on preset levels
/mob/living/carbon/proc/get_pulse(var/method) //method 0 is for hands, 1 is for machines, more accurate
var/temp = 0 //see setup.dm:694
+2 -2
View File
@@ -3,9 +3,9 @@
set background = BACKGROUND_ENABLED
if(notransform)
return 0
return FALSE
if(!loc)
return 0
return FALSE
var/datum/gas_mixture/environment = loc.return_air()
if(client || registered_z) // This is a temporary error tracker to make sure we've caught everything
@@ -16,8 +16,8 @@
turns_per_move = 5
see_in_dark = 6
mob_size = MOB_SIZE_SMALL
simplespecies = /mob/living/simple_animal/pet/cat
childtype = /mob/living/simple_animal/pet/cat/kitten
animal_species = /mob/living/simple_animal/pet/cat
childtype = list(/mob/living/simple_animal/pet/cat/kitten)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3)
response_help = "pets"
response_disarm = "gently pushes aside"
@@ -22,8 +22,8 @@
response_disarm = "bops"
response_harm = "kicks"
see_in_dark = 5
childtype = /mob/living/simple_animal/pet/corgi/puppy
simplespecies = /mob/living/simple_animal/pet/corgi
childtype = list(/mob/living/simple_animal/pet/corgi)
animal_species = /mob/living/simple_animal/pet/corgi
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
var/shaved = 0
var/obj/item/inventory_head
@@ -67,7 +67,7 @@
. = ..()
if(!.)
walk(src, 0)
return 0
return FALSE
/mob/living/simple_animal/hostile/handle_automated_action()
if(AIStatus == AI_OFF)
@@ -10,7 +10,7 @@
attack_sound = 'sound/weapons/punch4.ogg'
mouse_opacity = MOUSE_OPACITY_OPAQUE
move_to_delay = 40
ranged = 1
ranged = TRUE
ranged_cooldown = 2 //By default, start the Goliath with his cooldown off so that people can run away quickly on first sight
ranged_cooldown_time = 120
friendly = "wails at"
@@ -31,12 +31,12 @@
move_force = MOVE_FORCE_VERY_STRONG
move_resist = MOVE_FORCE_VERY_STRONG
pull_force = MOVE_FORCE_VERY_STRONG
var/pre_attack = 0
var/pre_attack = FALSE
var/pre_attack_icon = "Goliath_preattack"
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide)
/mob/living/simple_animal/hostile/asteroid/goliath/Life()
..()
. = ..()
handle_preattack()
/mob/living/simple_animal/hostile/asteroid/goliath/proc/handle_preattack()
@@ -59,8 +59,7 @@
new /obj/effect/temp_visual/goliath_tentacle/original(tturf, src)
ranged_cooldown = world.time + ranged_cooldown_time
icon_state = icon_aggro
pre_attack = 0
return
pre_attack = FALSE
/mob/living/simple_animal/hostile/asteroid/goliath/adjustHealth(damage)
ranged_cooldown--
@@ -72,7 +71,6 @@
handle_preattack()
if(icon_state != icon_aggro)
icon_state = icon_aggro
return
// Lavaland Goliath
/mob/living/simple_animal/hostile/asteroid/goliath/beast
@@ -87,8 +85,8 @@
pre_attack_icon = "goliath2"
butcher_results = list(/obj/item/reagent_containers/food/snacks/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2)
loot = list()
stat_attack = 1
robust_searching = 1
stat_attack = TRUE
robust_searching = TRUE
/mob/living/simple_animal/hostile/asteroid/goliath/beast/random/Initialize()
. = ..()
@@ -136,7 +134,7 @@
/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril
fromtendril = TRUE
//tentacles
// Tentacles
/obj/effect/temp_visual/goliath_tentacle
name = "goliath tentacle"
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
@@ -35,7 +35,7 @@
loot = list(/obj/effect/decal/cleanable/blood/gibs)
deathmessage = "is pulped into bugmash."
simplespecies = /mob/living/simple_animal/hostile/asteroid/gutlunch
animal_species = /mob/living/simple_animal/hostile/asteroid/gutlunch
childtype = list(/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck = 45, /mob/living/simple_animal/hostile/asteroid/gutlunch/guthen = 55)
wanted_objects = list(/obj/effect/decal/cleanable/blood/gibs)
@@ -62,10 +62,9 @@
var/can_collar = 0 // can add collar to mob or not
//Hot simple_animal baby making vars
var/childtype = null
var/scan_ready = 1
var/simplespecies //Sorry, no spider+corgi buttbabies.
var/list/childtype = null
var/next_scan_time = 0
var/animal_species //Sorry, no spider+corgi buttbabies.
var/gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //if CHEM_MOB_SPAWN_HOSTILE can be spawned by plasma with gold core, CHEM_MOB_SPAWN_FRIENDLY are 'friendlies' spawned with blood
@@ -446,27 +445,32 @@
/mob/living/simple_animal/proc/make_babies() // <3 <3 <3
if(gender != FEMALE || stat || !scan_ready || !childtype || !simplespecies)
return
scan_ready = 0
spawn(400)
scan_ready = 1
var/alone = 1
if(gender != FEMALE || stat || next_scan_time > world.time || !childtype || !animal_species || !SSticker.IsRoundInProgress())
return FALSE
next_scan_time = world.time + 400
var/alone = TRUE
var/mob/living/simple_animal/partner
var/children = 0
for(var/mob/M in oview(7, src))
if(istype(M, childtype)) //Check for children FIRST.
if(M.stat != CONSCIOUS) //Check if it's conscious FIRST.
continue
else if(istype(M, childtype)) //Check for children SECOND.
children++
else if(istype(M, simplespecies))
if(M.client)
else if(istype(M, animal_species))
if(M.ckey)
continue
else if(!istype(M, childtype) && M.gender == MALE) //Better safe than sorry ;_;
partner = M
else if(istype(M, /mob/))
alone = 0
continue
else if(isliving(M) && !faction_check_mob(M)) //shyness check. we're not shy in front of things that share a faction with us.
return //we never mate when not alone, so just abort early
if(alone && partner && children < 3)
return new childtype(loc)
var/childspawn = pickweight(childtype)
var/turf/target = get_turf(loc)
if(target)
return new childspawn(target)
/mob/living/simple_animal/say_quote(var/message)
var/verb = "says"
+1 -1
View File
@@ -1010,7 +1010,7 @@ var/list/slot_equipment_priority = list( \
var/atom/A = foo
if(A.invisibility > see_invisible)
continue
if(is_type_in_list(A, shouldnt_see))
if(is_type_in_list(A, shouldnt_see) || !A.simulated)
continue
statpanel_things += A
statpanel(listed_turf.name, null, statpanel_things)
+1 -1
View File
@@ -176,7 +176,7 @@
var/player_ghosted = 0
var/turf/listed_turf = null //the current turf being examined in the stat panel
var/list/shouldnt_see = list(/atom/movable/lighting_object) //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes
var/list/shouldnt_see = list() //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes
var/kills = 0
+8 -8
View File
@@ -99,7 +99,7 @@
var/indestructible = 0 // If set, prevents aliens from destroying it
var/keep_preset_name = 0
var/report_power_alarm = 1
var/report_power_alarm = TRUE
var/shock_proof = 0 //if set to 1, this APC will not arc bolts of electricity if it's overloaded.
@@ -117,11 +117,11 @@
operating = 0
/obj/machinery/power/apc/noalarm
report_power_alarm = 0
report_power_alarm = FALSE
/obj/machinery/power/apc/syndicate //general syndicate access
req_access = list(access_syndicate)
report_power_alarm = 0
report_power_alarm = FALSE
/obj/item/apc_electronics
name = "power control module"
@@ -1171,14 +1171,14 @@
lighting = autoset(lighting, 1)
environ = autoset(environ, 1)
autoflag = 3
if(report_power_alarm)
if(report_power_alarm && is_station_contact(z))
SSalarms.power_alarm.clearAlarm(loc, src)
else if(cell.charge < 1250 && cell.charge > 750 && longtermpower < 0) // <30%, turn off equipment
if(autoflag != 2)
equipment = autoset(equipment, 2)
lighting = autoset(lighting, 1)
environ = autoset(environ, 1)
if(report_power_alarm)
if(report_power_alarm && is_station_contact(z))
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 2
else if(cell.charge < 750 && cell.charge > 10) // <15%, turn off lighting & equipment
@@ -1186,7 +1186,7 @@
equipment = autoset(equipment, 2)
lighting = autoset(lighting, 2)
environ = autoset(environ, 1)
if(report_power_alarm)
if(report_power_alarm && is_station_contact(z))
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 1
else if(cell.charge <= 0) // zero charge, turn all off
@@ -1194,7 +1194,7 @@
equipment = autoset(equipment, 0)
lighting = autoset(lighting, 0)
environ = autoset(environ, 0)
if(report_power_alarm)
if(report_power_alarm && is_station_contact(z))
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 0
@@ -1250,7 +1250,7 @@
equipment = autoset(equipment, 0)
lighting = autoset(lighting, 0)
environ = autoset(environ, 0)
if(report_power_alarm)
if(report_power_alarm && is_station_contact(z))
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 0
@@ -57,7 +57,7 @@
if(!(istype(B) && B.off_floor))
qdel(O)
else
if(!istype(O, /atom/movable/lighting_object))
if(O.simulated)
O.color = initial(O.color)
O.clean_blood()
@@ -74,7 +74,7 @@
/datum/outfit/lavaland_syndicate/comms
name = "Lavaland Syndicate Comms Agent"
r_hand = /obj/item/melee/energy/sword/saber
mask = /obj/item/clothing/mask/chameleon
mask = /obj/item/clothing/mask/chameleon/gps
suit = /obj/item/clothing/suit/armor/vest
/obj/item/clothing/mask/chameleon/gps/New()
+2 -4
View File
@@ -58,12 +58,10 @@
var/contcount
for(var/atom/A in T.contents)
if(istype(A,/atom/movable/lighting_object))
continue
if(istype(A,/obj/machinery/light))
continue //hacky but whatever, shuttles need three spots each for this shit
if(!A.simulated)
continue
if(istype(A, /obj/machinery/light))
continue //hacky but whatever, shuttles need three spots each for this shit
contcount++
if(contcount)
+4 -6
View File
@@ -82,11 +82,10 @@
var/heal_burn = 0
var/heal_oxy = 0
/obj/item/organ/internal/heart/cursed/attack(mob/living/carbon/human/H, mob/living/carbon/human/user, obj/target)
if(H == user && istype(H))
if(NO_BLOOD in H.dna.species.species_traits)
to_chat(H, "<span class = 'userdanger'>\The [src] is not compatible with your form!</span>")
to_chat(H, "<span class='userdanger'>[src] is not compatible with your form!</span>")
return
playsound(user,'sound/effects/singlebeat.ogg', 40, 1)
user.drop_item()
@@ -111,17 +110,16 @@
if(owner)
to_chat(owner, "<span class='userdanger'>Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!</span>")
/datum/action/item_action/organ_action/cursed_heart
name = "pump your blood"
//You are now brea- pumping blood manually
/datum/action/item_action/organ_action/cursed_heart/Trigger()
. = ..()
if(. && istype(target,/obj/item/organ/internal/heart/cursed))
if(. && istype(target, /obj/item/organ/internal/heart/cursed))
var/obj/item/organ/internal/heart/cursed/cursed_heart = target
if(world.time < (cursed_heart.last_pump + (cursed_heart.pump_delay-10))) //no spam
if(world.time < (cursed_heart.last_pump + (cursed_heart.pump_delay - 10))) //no spam
to_chat(owner, "<span class='userdanger'>Too soon!</span>")
return
@@ -132,7 +130,7 @@
var/mob/living/carbon/human/H = owner
if(istype(H))
if(!(NO_BLOOD in H.dna.species.species_traits))
H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss*0.5, BLOOD_VOLUME_NORMAL)
H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss * 0.5, BLOOD_VOLUME_NORMAL)
if(owner.client)
owner.client.color = ""
+13 -7
View File
@@ -22,7 +22,7 @@
var/delay_timer = null
var/list/blacklist = list(/obj/tram/rail,/atom/movable/lighting_object)
var/list/blacklist = list(/obj/tram/rail)
var/list/ancwhitelist = list(/obj/tram, /obj/vehicle, /obj/structure/chair, /obj/structure/grille, /obj/structure/window)
/obj/tram/tram_controller/New()
@@ -135,14 +135,20 @@
tram += src
/obj/tram/tram_controller/proc/check_validity(var/atom/movable/AM)
if(!AM) return 0
if(is_type_in_list(AM, blacklist)) return 0
if(!AM.simulated) return 0
if(!AM)
return FALSE
if(!AM.simulated)
return FALSE
if(is_type_in_list(AM, blacklist))
return FALSE
if(AM.anchored)
if(is_type_in_list(AM, ancwhitelist))
return 1
return 0
return 1
return TRUE
return FALSE
return TRUE
/obj/tram/tram_controller/proc/init_controllers()
for(var/obj/tram/controlpad/CCP in tram)