This commit is contained in:
Arkatos1
2019-06-24 15:16:59 +02:00
80 changed files with 890 additions and 705 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.
+4 -6
View File
@@ -134,8 +134,6 @@
if(operating)
return
add_fingerprint(user)
if(!requiresID())
user = null
if(density && !emagged)
if(allowed(user))
@@ -157,7 +155,7 @@
return try_to_activate_door(user)
/obj/machinery/door/attack_tk(mob/user)
if(requiresID() && !allowed(null))
if(!allowed(null))
return
..()
@@ -165,9 +163,7 @@
add_fingerprint(user)
if(operating || emagged)
return
if(!requiresID())
user = null //so allowed(user) always succeeds
if(allowed(user) || user.can_advanced_admin_interact())
if(requiresID() && (allowed(user) || user.can_advanced_admin_interact()))
if(density)
open()
else
@@ -179,6 +175,8 @@
/obj/machinery/door/allowed(mob/M)
if(emergency)
return TRUE
if(!requiresID())
return FALSE // Intentional. machinery/door/requiresID() always == 1. airlocks, however, == 0 if ID scan is disabled. Yes, this var is poorly named.
return ..()
/obj/machinery/door/proc/try_to_weld(obj/item/weldingtool/W, mob/user)
+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
+1
View File
@@ -1031,6 +1031,7 @@
contraband = list(/obj/item/gun/projectile/shotgun/toy/crossbow= 10, //Congrats, you unlocked the +18 setting!
/obj/item/gun/projectile/automatic/c20r/toy/riot = 10,
/obj/item/gun/projectile/automatic/l6_saw/toy/riot = 10,
/obj/item/gun/projectile/automatic/sniper_rifle/toy = 10,
/obj/item/ammo_box/foambox/riot = 20,
/obj/item/toy/katana = 10,
/obj/item/twohanded/dualsaber/toy = 5,
+85 -27
View File
@@ -3,68 +3,126 @@
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/can_teleport(atom/movable/M)
. = TRUE
if(!istype(M))
. = FALSE
if(!M.simulated || iseffect(M))
. = FALSE
if(M.anchored && ismecha(M))
. = FALSE
/obj/effect/portal/proc/teleport(atom/movable/M)
if(!can_teleport(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
@@ -242,7 +242,8 @@
/obj/item/gun/projectile/automatic/toy/pistol/enforcer = 50,
/obj/item/gun/projectile/shotgun/toy = 50,
/obj/item/gun/projectile/shotgun/toy/crossbow = 50,
/obj/item/gun/projectile/shotgun/toy/tommygun = 50
/obj/item/gun/projectile/shotgun/toy/tommygun = 50,
/obj/item/gun/projectile/automatic/sniper_rifle/toy = 50
)
+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
+19 -17
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/can_teleport(atom/movable/M)
. = ..()
/obj/effect/portal/wormhole/attackby(obj/item/I, mob/user, params)
teleport(user)
if(istype(M, /obj/singularity))
. = FALSE
/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(!can_teleport(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
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
// ----------------------------
+26 -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**********************/
@@ -911,6 +905,7 @@
throw_range = 5
var/loaded = 1
var/malfunctioning = 0
var/revive_type = SENTIENCE_ORGANIC //So you can't revive boss monsters or robots with it
/obj/item/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag)
if(!loaded)
@@ -918,6 +913,9 @@
if(istype(target, /mob/living) && proximity_flag)
if(istype(target, /mob/living/simple_animal))
var/mob/living/simple_animal/M = target
if(M.sentience_type != revive_type)
to_chat(user, "<span class='info'>[src] does not work on this sort of creature.</span>")
return
if(M.stat == DEAD)
M.faction = list("neutral")
M.revive()
+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)
+1
View File
@@ -15,6 +15,7 @@ GLOBAL_LIST_INIT(boo_phrases, list(
ghost = TRUE
action_icon_state = "boo"
school = "transmutation"
charge_max = 600
starts_charged = FALSE
+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
@@ -106,6 +106,12 @@
else //Everyone else fails, skip the emote attempt
return
if("warble", "warbles")
if(isskrell(src)) //Only Skrell can warble.
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm'
else //Everyone else fails, skip the emote attempt
return
if("scream", "screams")
on_CD = handle_emote_CD(50) //longer cooldown
if("fart", "farts", "flip", "flips", "snap", "snaps")
@@ -221,6 +227,13 @@
playsound(loc, 'sound/effects/voxrustle.ogg', 50, 0) //Credit to sound-ideas (freesfx.co.uk) for the sound.
m_type = 2
if("warble", "warbles")
var/M = handle_emote_param(param)
message = "<B>[src]</B> warbles[M ? " at [M]" : ""]."
playsound(loc, 'sound/effects/warble.ogg', 50, 0) // Copyright CC BY 3.0 alienistcog (freesound.org) for the sound.
m_type = 2
if("yes")
var/M = handle_emote_param(param)
@@ -904,6 +917,8 @@
emotelist += "\nVox specific emotes :- quill(s)"
if("Diona")
emotelist += "\nDiona specific emotes :- creak(s)"
if("Skrell")
emotelist += "\nSkrell specific emotes :- warble(s)"
if(ismachine(src))
emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob"
+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
@@ -594,7 +594,7 @@ var/robot_arm = /obj/item/robot_parts/l_arm
qdel(src)
/obj/item/honkbot_arm_assembly
name = "incomplete honkbot assembly."
name = "incomplete honkbot assembly"
desc = "A clown box with a robot arm permanently grafted to it."
icon = 'icons/obj/aibots.dmi'
icon_state = "honkbot_arm"
@@ -625,8 +625,8 @@ var/robot_arm = /obj/item/robot_parts/l_arm
if(istype(W, /obj/item/instrument/trombone))
if(!user.unEquip(W))
return
to_chat(user, "<span class='notice'>You add the trombone to [src]! Heeeenk! </span>")
to_chat(user, "<span class='notice'>You add the trombone to [src]! Heeeenk!</span>")
qdel(W)
var/mob/living/simple_animal/bot/honkbot/A = new /mob/living/simple_animal/bot/honkbot(T)
var/mob/living/simple_animal/bot/honkbot/A = new /mob/living/simple_animal/bot/honkbot(get_turf(src))
A.robot_arm = robot_arm
qdel(src)
@@ -37,7 +37,7 @@
. = ..()
update_icon()
auto_patrol = TRUE
var/datum/job/clown/J = new/datum/job/clown
var/datum/job/clown/J = new /datum/job/clown()
access_card.access += J.get_access()
prev_access = access_card.access
@@ -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)
@@ -64,7 +64,7 @@
..()
/mob/living/simple_animal/hostile/asteroid/gutlunch/AttackingTarget()
if(is_type_in_list(target, wanted_objects)) //we eats
if(is_type_in_typecache(target, wanted_objects)) //we eats
udder.generateMilk()
regenerate_icons()
visible_message("<span class='notice'>[src] slurps up [target].</span>")
@@ -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)
@@ -0,0 +1,4 @@
author: "Kyep"
delete-after: True
changes:
- bugfix: "Disarming/grabbing a door with IDSCAN disabled no longer results in a can_admin_interact runtime error."
@@ -0,0 +1,4 @@
author: "iantine"
delete-after: True
changes:
- rscadd: "Skrell *warble emote"
@@ -0,0 +1,4 @@
author: "Arkatos"
delete-after: True
changes:
- imageadd: "Added new Boo! spell icon"
@@ -0,0 +1,21 @@
author: "Markolie"
delete-after: True
changes:
- rscadd: "Portals can now be activated by clicking on them with or without an object. Ghosts can now also click on them to be taken to their destination."
- rscadd: "Portals now warn admins when they are used to teleport megafauna."
- tweak: "The singularity can now eat basalt and chasms on Lavaland. They get turned into lava."
- bugfix: "AI swarmers will no longer get stuck on effects (such as blood)."
- bugfix: "Fixed the spectral blade turning all ghosts visible."
- bugfix: "Fixed a runtime with assigning outfits to mindless mobs."
- bugfix: "Fixed certain alarms triggering despite being outside of station contact and the Syndicate base still triggering fire alarms."
- bugfix: "Fixed being unable to put the wormhole jaunter in the belt slot."
- bugfix: "Fixed the disk compartmentalizer not accepting disks."
- bugfix: "Gutlunches and Gubbucks will now reproduce properly."
- bugfix: "The necropolis chest cult clothing drop no longer spawns with a cult hood as well, as that's part of the suit itself."
- bugfix: "Goliath steaks can now be eaten properly."
- bugfix: "Fixed a stray light on the beach ruin."
- bugfix: "Lavaland ruins should no longer spawn on the Labor Camp."
- bugfix: "Ancient goliaths will now properly randomly spawn tentacles."
- bugfix: "The labor camp will now spawn properly with a processing console."
- bugfix: "Water turfs in the beach ruin (and other water turfs that previously didn't do so) will now properly apply water to you."
- bugfix: "Ash flora is now anchored."
@@ -0,0 +1,4 @@
author: "Terilia"
delete-after: True
changes:
- rscadd: "Added the Donksoft sniper into the Trader spawnpool."
@@ -0,0 +1,6 @@
author: "Markolie"
delete-after: True
changes:
- bugfix: "Gutlunches will now eat properly."
- bugfix: "The tesla can no longer travel through wormholes."
- bugfix: "Fixed an issue with honkbot construction."
@@ -0,0 +1,4 @@
author: "Fethas"
delete-after: True
changes:
- bugfix: "Fixes an oversight from the lavaland port invovling Laz injectors and sentience typing that didn't carry over from tg."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.