Removes ERT from standard gameplay. The Horizon now sends distress beacons for other Overmap vessels instead. Barricades and crew armoury buff. (#14371)

This commit is contained in:
Matt Atlas
2022-08-02 17:59:51 +02:00
committed by GitHub
parent 582a03c331
commit f768a9022d
103 changed files with 2470 additions and 939 deletions
@@ -8,7 +8,7 @@
/decl/origin_item/origin/coc_grown
name = "CoC Grown"
desc = "Dionae who were originally grown in and influenced by a planet within the Coalition of Colonies "
important_information = "As a result of no federal laws dictating how Dionae grown within CoC territory should be treated, their treatment can vary greatly from system to system, although generally are treated well and fully integrated into their local planets society."
important_information = "As a result of no federal laws dictating how Dionae grown within CoC territory should be treated, their treatment can vary greatly from system to system, although generally are treated well and fully integrated into their local planet's society."
possible_accents = list(ACCENT_ROOTSONG, ACCENT_VOIDSONG)
possible_citizenships = list(CITIZENSHIP_COALITION, CITIZENSHIP_BIESEL, CITIZENSHIP_JARGON, CITIZENSHIP_EUM)
possible_religions = list(RELIGION_ETERNAL, RELIGION_OTHER, RELIGION_NONE)
+7 -1
View File
@@ -107,7 +107,7 @@
)
/obj/item/clothing/accessory/armor_plate/generic
name = "kevlar armor plate"
name = "standard armor plate"
desc = "A light-weight kevlar armor plate in drab black colors. A galactic favourite of Zavodskoi fans."
icon_state = "plate_generic"
item_state = "plate_generic"
@@ -243,6 +243,12 @@
icon_state = "helm_sec"
item_state = "helm_sec"
/obj/item/clothing/head/helmet/security/generic
name = "standard helmet"
desc = "A shiny helmet in grey! Goes well with the respective plate carrier."
icon_state = "helm_generic"
item_state = "helm_generic"
/obj/item/clothing/head/helmet/security/skrell
name = "skrellmet"
desc = "A helmet built for use by a Skrell. This one appears to be fairly standard and reliable."
@@ -21,6 +21,11 @@
drop_sound = 'sound/items/drop/boots.ogg'
pickup_sound = 'sound/items/pickup/boots.ogg'
/obj/item/clothing/accessory/leg_guard/generic
name = "standard leg guards"
icon_state = "legguards_generic"
item_state = "legguards_generic"
/obj/item/clothing/accessory/leg_guard/ablative
name = "ablative leg guards"
desc = "These will protect your legs and feet from energy weapons."
@@ -125,6 +130,11 @@
drop_sound = 'sound/items/drop/axe.ogg'
pickup_sound = 'sound/items/pickup/axe.ogg'
/obj/item/clothing/accessory/arm_guard/generic
name = "standard arm guards"
icon_state = "armguards_generic"
item_state = "armguards_generic"
/obj/item/clothing/accessory/arm_guard/ablative
name = "ablative arm guards"
desc = "These arm guards will protect your hands and arms from energy weapons."
+4 -4
View File
@@ -20,11 +20,11 @@
if(zlevel in current_map.station_levels)
switch(severity)
if(EVENT_LEVEL_MUNDANE)
command_announcement.Announce("A minor electrical storm has been detected near the [location_name()]. Please watch out for possible electrical discharges.", "[location_name()] Sensor Array", new_sound = 'sound/AI/electrical_storm.ogg')
command_announcement.Announce("A minor electrical storm has been detected near the [location_name()]. Please watch out for possible electrical discharges.", "[location_name()] Sensor Array", new_sound = 'sound/AI/electrical_storm.ogg', zlevels = affecting_z)
if(EVENT_LEVEL_MODERATE)
command_announcement.Announce("The [location_name()] is about to pass through an electrical storm. Please secure sensitive electrical equipment until the storm passes.", "[location_name()] Sensor Array", new_sound = 'sound/AI/electrical_storm.ogg')
command_announcement.Announce("The [location_name()] is about to pass through an electrical storm. Please secure sensitive electrical equipment until the storm passes.", "[location_name()] Sensor Array", new_sound = 'sound/AI/electrical_storm.ogg', zlevels = affecting_z)
if(EVENT_LEVEL_MAJOR)
command_announcement.Announce("Alert. A strong electrical storm has been detected in proximity of the [location_name()]. It is recommended to immediately secure sensitive electrical equipment until the storm passes.", "[location_name()] Sensor Array", new_sound = 'sound/AI/electrical_storm.ogg')
command_announcement.Announce("Alert. A strong electrical storm has been detected in proximity of the [location_name()]. It is recommended to immediately secure sensitive electrical equipment until the storm passes.", "[location_name()] Sensor Array", new_sound = 'sound/AI/electrical_storm.ogg', zlevels = affecting_z)
break
/datum/event/electrical_storm/start()
@@ -71,5 +71,5 @@
..()
for (var/zlevel in affecting_z)
if(zlevel in current_map.station_levels)
command_announcement.Announce("The [location_name()] has cleared the electrical storm. Please repair any electrical overloads.", "Electrical Storm Alert")
command_announcement.Announce("The [location_name()] has cleared the electrical storm. Please repair any electrical overloads.", "Electrical Storm Alert", zlevels = affecting_z)
break
+1 -1
View File
@@ -13,7 +13,7 @@
/datum/event/false_alarm/end(var/faked)
command_announcement.Announce("Error, It appears our previous announcement about [eventname] was a sensor glitch. There is no cause for alarm, please return to your stations.", "False Alarm", new_sound = 'sound/AI/falsealarm.ogg')
command_announcement.Announce("Error, It appears our previous announcement about [eventname] was a sensor glitch. There is no cause for alarm, please return to your stations.", "False Alarm", new_sound = 'sound/AI/falsealarm.ogg', zlevels = affecting_z)
if(two_part)
E.end() //This does not return TRUE for var/faked because two-part events like radiation storms need to do things such as revoking maint access
if (EM)
+1 -1
View File
@@ -9,7 +9,7 @@
/datum/event/gravity/announce()
for (var/zlevel in affecting_z)
if(zlevel in current_map.station_levels)
command_announcement.Announce("Feedback surge detected in the gravity generation systems. Artificial gravity has been disabled whilst the system reinitializes. Further failures may result in a gravitational collapse and formation of blackholes.", "Gravity Failure")
command_announcement.Announce("Feedback surge detected in the gravity generation systems. Artificial gravity has been disabled whilst the system reinitializes. Further failures may result in a gravitational collapse and formation of blackholes.", "Gravity Failure", zlevels = affecting_z)
break
/datum/event/gravity/start()
+1 -1
View File
@@ -6,4 +6,4 @@
power_failure(0, severity)
/datum/event/grid_check/announce()
command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg')
command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg', zlevels = affecting_z)
+1 -1
View File
@@ -127,4 +127,4 @@
new spawned_mob(chosen_area.random_space())
/datum/event/infestation/announce()
command_announcement.Announce("[chosen_scan_type] indicate that [chosen_mob] [chosen_verb] [chosen_area]. Clear them out before this starts to affect productivity.", event_name, new_sound = 'sound/AI/vermin.ogg')
command_announcement.Announce("[chosen_scan_type] indicate that [chosen_mob] [chosen_verb] [chosen_area]. Clear them out before this starts to affect productivity.", event_name, new_sound = 'sound/AI/vermin.ogg', zlevels = affecting_z)
+1 -1
View File
@@ -22,7 +22,7 @@
naming = "serious"
if(EVENT_LEVEL_MAJOR)
naming = "major"
command_announcement.Announce("A [naming] maintenance drone hijacking has occurred. The hacked drones are aggressive and dangerous. Caution is advised when entering maintenance tunnels.", "Drone Behaviour Control")
command_announcement.Announce("A [naming] maintenance drone hijacking has occurred. The hacked drones are aggressive and dangerous. Caution is advised when entering maintenance tunnels.", "Drone Behaviour Control", zlevels = affecting_z)
/datum/event/rogue_maint_drones/proc/get_infestation_turfs()
var/area/location = pick_area(list(/proc/is_not_space_area, /proc/is_station_area, /proc/is_maint_area))
+9 -9
View File
@@ -27,14 +27,14 @@
/datum/event/meteor_wave/announce()
for (var/zlevel in affecting_z)
if(zlevel in current_map.station_levels)
command_announcement.Announce(current_map.meteors_detected_message, "Meteor Alert", new_sound = 'sound/AI/meteors_detected_message.ogg')
command_announcement.Announce(current_map.meteors_detected_message, "Meteor Alert", new_sound = 'sound/AI/meteors_detected_message.ogg', zlevels = affecting_z)
break
/datum/event/meteor_wave/start()
..()
for (var/zlevel in affecting_z)
if(zlevel in current_map.station_levels)
command_announcement.Announce(current_map.meteor_contact_message, "Meteor Alert")
command_announcement.Announce(current_map.meteor_contact_message, "Meteor Alert", zlevels = affecting_z)
break
/datum/event/meteor_wave/end(var/faked)
@@ -42,7 +42,7 @@
if(faked)
return
spawn(100)//We give 10 seconds before announcing, for the last wave of meteors to hit the station
command_announcement.Announce(current_map.meteor_end_message, "Meteor Alert")
command_announcement.Announce(current_map.meteor_end_message, "Meteor Alert", zlevels = affecting_z)
/datum/event/meteor_wave/tick()
@@ -81,17 +81,17 @@
/datum/event/meteor_wave/downed_ship/announce()
for (var/zlevel in affecting_z)
if(zlevel in current_map.station_levels)
command_announcement.Announce(current_map.ship_meteor_end_message, "Ship Debris Alert", new_sound = 'sound/AI/meteor_end_message.ogg')
command_announcement.Announce(current_map.ship_meteor_end_message, "Ship Debris Alert", new_sound = 'sound/AI/meteor_end_message.ogg', zlevels = affecting_z)
break
/datum/event/meteor_wave/downed_ship/start()
command_announcement.Announce(current_map.ship_meteor_contact_message, "Ship Debris Alert", new_sound = 'sound/AI/meteor_contact_message.ogg')
command_announcement.Announce(current_map.ship_meteor_contact_message, "Ship Debris Alert", new_sound = 'sound/AI/meteor_contact_message.ogg', zlevels = affecting_z)
/datum/event/meteor_wave/downed_ship/end(var/faked)
if(faked)
return
spawn(100)//We give 10 seconds before announcing, for the last wave of meteors to hit the station
command_announcement.Announce(current_map.ship_meteor_end_message, "Ship Debris Alert", new_sound = 'sound/AI/meteor_end_message.ogg')
command_announcement.Announce(current_map.ship_meteor_end_message, "Ship Debris Alert", new_sound = 'sound/AI/meteor_end_message.ogg', zlevels = affecting_z)
/datum/event/meteor_wave/overmap
next_meteor_lower = 5
@@ -107,17 +107,17 @@
/datum/event/meteor_wave/dust/announce()
for (var/zlevel in affecting_z)
if(zlevel in current_map.station_levels)
command_announcement.Announce(current_map.dust_detected_message, "Dust Belt Alert", new_sound = 'sound/AI/dust_detected_message.ogg')
command_announcement.Announce(current_map.dust_detected_message, "Dust Belt Alert", new_sound = 'sound/AI/dust_detected_message.ogg', zlevels = affecting_z)
break
/datum/event/meteor_wave/dust/start()
command_announcement.Announce(current_map.dust_contact_message, "Dust Belt Alert", new_sound = 'sound/AI/dust_contact_message.ogg')
command_announcement.Announce(current_map.dust_contact_message, "Dust Belt Alert", new_sound = 'sound/AI/dust_contact_message.ogg', zlevels = affecting_z)
/datum/event/meteor_wave/dust/end(var/faked)
if(faked)
return
spawn(100)//We give 10 seconds before announcing, for the last wave of meteors to hit the station
command_announcement.Announce(current_map.dust_end_message, "Dust Belt Alert", , new_sound = 'sound/AI/dust_end_message.ogg')
command_announcement.Announce(current_map.dust_end_message, "Dust Belt Alert", , new_sound = 'sound/AI/dust_end_message.ogg', zlevels = affecting_z)
/datum/event/meteor_wave/dust/get_meteors()
return SSatlas.current_sector.meteors_dust
+1 -1
View File
@@ -39,7 +39,7 @@
/datum/event/prison_break/announce()
if(areas && areas.len > 0)
command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] [(eventDept == "Security")? "imprisonment":"containment"] subroutines. Secure any compromised areas immediately. Station AI involvement is recommended.", "[eventDept] Alert")
command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] [(eventDept == "Security")? "imprisonment":"containment"] subroutines. Secure any compromised areas immediately. Station AI involvement is recommended.", "[eventDept] Alert", zlevels = affecting_z)
/datum/event/prison_break/start()
+3 -3
View File
@@ -18,7 +18,7 @@
return res
/datum/event/radiation_storm/announce()
command_announcement.Announce(current_map.radiation_detected_message, "Radiation Sensor Array Automated Alert", new_sound = 'sound/AI/radiation_detected_message.ogg')
command_announcement.Announce(current_map.radiation_detected_message, "Radiation Sensor Array Automated Alert", new_sound = 'sound/AI/radiation_detected_message.ogg', zlevels = affecting_z)
/datum/event/radiation_storm/start()
..()
@@ -27,7 +27,7 @@
/datum/event/radiation_storm/tick()
if(activeFor == enterBelt)
command_announcement.Announce(current_map.radiation_contact_message, "Radiation Sensor Array Automated Alert", new_sound = 'sound/AI/radiation_contact_message.ogg')
command_announcement.Announce(current_map.radiation_contact_message, "Radiation Sensor Array Automated Alert", new_sound = 'sound/AI/radiation_contact_message.ogg', zlevels = affecting_z)
radiate()
if(activeFor >= enterBelt && activeFor <= leaveBelt)
@@ -38,7 +38,7 @@
radiate()
else if(activeFor == leaveBelt)
command_announcement.Announce(current_map.radiation_end_message, "Radiation Sensor Array Automated Alert", new_sound = 'sound/AI/radiation_end_message.ogg')
command_announcement.Announce(current_map.radiation_end_message, "Radiation Sensor Array Automated Alert", new_sound = 'sound/AI/radiation_end_message.ogg', zlevels = affecting_z)
lights()
/datum/event/radiation_storm/proc/radiate()
+1 -1
View File
@@ -5,7 +5,7 @@
/datum/event/rescue_pod/announce()
if(prob(66))
command_announcement.Announce("Ship sensors indicate an escape pod inbound to a nearby celestial body. Investigate the situation if necessary and hand off the survivors, if any, to a third party vessel.", new_title="SCCV Horizon Sensor Suite", new_sound = 'sound/AI/commandreport.ogg')
command_announcement.Announce("Ship sensors indicate an escape pod inbound to a nearby celestial body. Investigate the situation if necessary and hand off the survivors, if any, to a third party vessel.", new_title="SCCV Horizon Sensor Suite", new_sound = 'sound/AI/commandreport.ogg', zlevels = affecting_z)
/datum/event/rescue_pod/setup()
for(var/datum/event/E in typesof(src))
+2 -2
View File
@@ -38,6 +38,6 @@
if(!faked)
if(num_recovered > length(drones_list) * 0.75)
command_announcement.Announce(current_map.rogue_drone_end_message, "Rogue Drone Alert", new_sound = 'sound/AI/rogue_drone_end_message.ogg')
command_announcement.Announce(current_map.rogue_drone_end_message, "Rogue Drone Alert", new_sound = 'sound/AI/rogue_drone_end_message.ogg', zlevels = affecting_z)
else
command_announcement.Announce(current_map.rogue_drone_destroyed_message, "Rogue Drone Alert", new_sound = 'sound/AI/rogue_drone_destroyed_message.ogg')
command_announcement.Announce(current_map.rogue_drone_destroyed_message, "Rogue Drone Alert", new_sound = 'sound/AI/rogue_drone_destroyed_message.ogg', zlevels = affecting_z)
+1 -1
View File
@@ -13,7 +13,7 @@
possible_spiders = typesof(/mob/living/simple_animal/hostile/giant_spider)
/datum/event/spider_infestation/announce()
command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg', zlevels = affecting_z)
/datum/event/spider_infestation/start()
var/list/vents = list()
+2 -2
View File
@@ -22,8 +22,8 @@
/datum/event/supply_drop/announce()
if (prob(65))//Announce the location
command_announcement.Announce("A transport signature of unknown origin detected in [location_name], an object appears to have been beamed aboard [station_name()].", "Unknown Object", new_sound = 'sound/AI/strangeobject.ogg')
command_announcement.Announce("A transport signature of unknown origin detected in [location_name], an object appears to have been beamed aboard [station_name()].", "Unknown Object", new_sound = 'sound/AI/strangeobject.ogg', zlevels = affecting_z)
else if (prob(25))//Announce the transport, but not the location
command_announcement.Announce("External transport signature of unknown origin detected aboard [station_name()], precise destination point cannot be determined, please investigate.", "Unknown Object", new_sound = 'sound/AI/strangeobject.ogg')
command_announcement.Announce("External transport signature of unknown origin detected aboard [station_name()], precise destination point cannot be determined, please investigate.", "Unknown Object", new_sound = 'sound/AI/strangeobject.ogg', zlevels = affecting_z)
//Otherwise, no announcement at all.
//Someone will randomly stumble across it, and probably quietly loot it without telling anyone
+1 -1
View File
@@ -77,4 +77,4 @@
qdel(R)
/datum/event/vent_clog/announce()
command_announcement.Announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert", new_sound = 'sound/AI/scrubbers.ogg')
command_announcement.Announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert", new_sound = 'sound/AI/scrubbers.ogg', zlevels = affecting_z)
+1 -1
View File
@@ -6,7 +6,7 @@
endWhen = announceWhen + 1
/datum/event/wallrot/announce()
command_announcement.Announce("Harmful fungi detected at coordinates ([origin_turf.x], [origin_turf.y], [origin_turf.z]). The structure may be contaminated.", "Biohazard Alert", new_sound = 'sound/AI/fungi.ogg')
command_announcement.Announce("Harmful fungi detected at coordinates ([origin_turf.x], [origin_turf.y], [origin_turf.z]). The structure may be contaminated.", "Biohazard Alert", new_sound = 'sound/AI/fungi.ogg', zlevels = affecting_z)
/datum/event/wallrot/start()
set waitfor = FALSE
@@ -1,4 +1,4 @@
/obj/structure/barricade/Value()
/obj/structure/blocker/Value()
return material.value
/obj/structure/bed/Value()
+1 -1
View File
@@ -716,7 +716,7 @@ var/list/worths = list(
/obj/structure/holostool = 0,
/obj/structure/holohoop = 0,
/obj/structure/bookcase = 50,
/obj/structure/barricade = -1,
/obj/structure/blocker = -1,
/obj/structure = 30,
//BOTS,
/mob/living/bot/cleanbot = 260,
-10
View File
@@ -20,15 +20,6 @@
basic_hit(A, D)
return TRUE
/datum/martial_art/zombie/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
addtimer(CALLBACK(src, .proc/check_grab, A), 5) // grabs don't appear instantly, so we need to wait a bit
/datum/martial_art/zombie/proc/check_grab(var/mob/living/carbon/human/A)
var/obj/item/grab/G = A.get_active_hand()
if(G)
G.state = GRAB_AGGRESSIVE
G.icon_state = "grabbed1"
G.hud.icon_state = "reinforce1"
/datum/martial_art/zombie/proc/strong_bite(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
A.do_attack_animation(D)
@@ -45,7 +36,6 @@
to_chat(usr, "<b><i>You moan inside yourself, grasping knowledge unknown to the living...</i></b>")
to_chat(usr, "<span class='notice'>Strong Bite</span>: Harm Harm Harm. Delivers a strong bite to your foe. This bite does 5 to 10 damage but pierces through all armour.")
to_chat(usr, "<span class='notice'>Strong Grip</span>: Grab. While weak, your ravenous lust for living flesh allows you to instantly get an aggressive grab on anyone you catch.")
to_chat(usr, SPAN_NOTICE("Press the Check Attacks verb in the IC tab! Your bite infects, but it is less powerful than your claws."))
#undef STRONG_BITE
+6 -2
View File
@@ -20,7 +20,7 @@
recipes += new /datum/stack_recipe_list("generic construction",
list(
new /datum/stack_recipe("[display_name] door", /obj/structure/simple_door, BUILD_AMT, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
new /datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, BUILD_AMT, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
new /datum/stack_recipe("[display_name] blocker", /obj/structure/blocker, BUILD_AMT, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
new /datum/stack_recipe("[display_name] railing", /obj/structure/railing, BUILD_AMT, time = 25, one_per_turf = FALSE, on_floor = TRUE, supplied_material = "[name]"),
new /datum/stack_recipe("[display_name] stool", /obj/structure/bed/stool, BUILD_AMT, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
new /datum/stack_recipe("[display_name] chair", /obj/structure/bed/stool/chair, BUILD_AMT, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
@@ -51,6 +51,8 @@
new /datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20),
new /datum/stack_recipe("full regular floor tile", /obj/item/stack/tile/floor/full, 1, 4, 20),
new /datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60),
new /datum/stack_recipe("steel barricade", /obj/structure/barricade/metal, BUILD_AMT, time = 10 SECONDS, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("barbed wire", /obj/item/stack/barbed_wire, 1, 2, 20),
new /datum/stack_recipe("table frame", /obj/structure/table, BUILD_AMT, time = 10, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("wall girders", /obj/structure/girder, BUILD_AMT, time = 50, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("steel window frame", /obj/structure/window_frame/unanchored, BUILD_AMT, time = 25, one_per_turf = 1, on_floor = 1),
@@ -131,6 +133,7 @@
recipes += new /datum/stack_recipe_list("[display_name] recipes",
list(
new /datum/stack_recipe("AI core", /obj/structure/AIcore, BUILD_AMT, time = 50, one_per_turf = 1),
new /datum/stack_recipe("plateel barricade", /obj/structure/barricade/plasteel, BUILD_AMT, time = 12 SECONDS, one_per_turf = 1),
new /datum/stack_recipe("knife grip", /obj/item/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]"),
new /datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor_dark, 1, 4, 20),
new /datum/stack_recipe("full dark floor tile", /obj/item/stack/tile/floor_dark/full, 1, 4, 20)
@@ -156,6 +159,7 @@
..()
recipes += new /datum/stack_recipe_list("[display_name] recipes",
list(
new /datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, BUILD_AMT, time = 5 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1),
new /datum/stack_recipe("wood circlet", /obj/item/woodcirclet, 1),
new /datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20),
@@ -295,4 +299,4 @@
list(
new /datum/stack_recipe("leather briefcase", /obj/item/storage/briefcase/real, 4, 1, time = 20),
new /datum/stack_recipe("leather whip", /obj/item/melee/whip, 15, 1, time = 20)
))
))
+1 -1
View File
@@ -7,7 +7,7 @@
PATHS THAT USE DATUMS
turf/simulated/wall
obj/item/material
obj/structure/barricade
obj/structure/blocker
obj/item/stack/material
obj/structure/table
@@ -156,9 +156,6 @@
icobase = 'icons/mob/human_races/zombie/r_zombie.dmi'
deform = 'icons/mob/human_races/zombie/r_zombie.dmi'
brute_mod = 0.5
burn_mod = 0.5
hide_name = TRUE
name_language = null // Use the first-name last-name generator rather than a language scrambler
@@ -169,6 +166,8 @@
unarmed_types = list(/datum/unarmed_attack/bite/infectious, /datum/unarmed_attack/claws/strong/zombie)
darksight = 8
slowdown = 0.5
has_fine_manipulation = FALSE
speech_sounds = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg')
@@ -182,11 +181,24 @@
BP_ZOMBIE_PARASITE = /obj/item/organ/internal/parasite/zombie,
BP_BRAIN = /obj/item/organ/internal/brain/zombie,
BP_STOMACH = /obj/item/organ/internal/stomach
)
)
has_limbs = list(
BP_CHEST = list("path" = /obj/item/organ/external/chest/zombie),
BP_GROIN = list("path" = /obj/item/organ/external/groin/zombie),
BP_HEAD = list("path" = /obj/item/organ/external/head/zombie),
BP_L_ARM = list("path" = /obj/item/organ/external/arm/zombie),
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/zombie),
BP_L_LEG = list("path" = /obj/item/organ/external/leg/zombie),
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/zombie),
BP_L_HAND = list("path" = /obj/item/organ/external/hand/zombie),
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/zombie),
BP_L_FOOT = list("path" = /obj/item/organ/external/foot/zombie),
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/zombie)
)
total_health = 100
slowdown = 3
slowdown = 2
vision_flags = DEFAULT_SIGHT | SEE_MOBS
@@ -222,6 +234,7 @@
var/datum/martial_art/zombie/Z = new /datum/martial_art/zombie()
Z.teach(H)
to_chat(H, "<font size=4><span class='notice'>Use the Check Attacks verb in your IC tab for information on your attacks! They are important! Your bite infects, but is worse at getting through armour than your claws, which have great damage and are armor piercing!</font></span>")
H.accent = ACCENT_BLUESPACE
return ..()
/datum/species/zombie/tajara
@@ -309,7 +309,7 @@
G.attack_generic(src,rand(melee_damage_lower,melee_damage_upper),attacktext)
return
if(istype(O, /obj/structure/barricade) || istype(O, /obj/structure/closet) || istype(O, /obj/structure/inflatable))
if(istype(O, /obj/structure/blocker) || istype(O, /obj/structure/closet) || istype(O, /obj/structure/inflatable))
var/obj/structure/S = O
rapid = 1
OpenFire(S)
+1 -1
View File
@@ -1192,7 +1192,7 @@ proc/is_blind(A)
if(used_accent && (speaking?.allow_accents || !speaking))
var/datum/accent/a = SSrecords.accents[used_accent]
if(istype(a))
if(hearer.client && hearer.client.prefs?.toggles_secondary & ACCENT_TAG_TEXT)
if(hearer && hearer.client && hearer.client.prefs?.toggles_secondary & ACCENT_TAG_TEXT)
return "([a.text_tag])"
else
var/final_icon = a.tag_icon
@@ -172,7 +172,8 @@
if(!input || !can_still_topic())
SSnanoui.update_uis(src)
return
crew_announcement.Announce(input)
var/affected_zlevels = GetConnectedZlevels(GET_Z(program.computer))
crew_announcement.Announce(input, zlevels = affected_zlevels)
set_announcement_cooldown(TRUE)
addtimer(CALLBACK(src, .proc/set_announcement_cooldown, FALSE), 600) //One minute cooldown
if("message")
+9
View File
@@ -39,8 +39,17 @@
return TRUE
. = ..()
/datum/nano_module/nano_host()
return host ? host : src
/datum/nano_module/proc/get_host_z()
return GET_Z(nano_host())
/datum/proc/initial_data()
return list()
/datum/proc/update_layout()
return FALSE
/datum/proc/nano_host()
return src
+1
View File
@@ -231,6 +231,7 @@
organ_tag = BP_ZOMBIE_PARASITE
parent_organ = BP_HEAD
stage_interval = 150
relative_size = 0
var/last_heal = 0
var/heal_rate = 5 SECONDS
+33
View File
@@ -0,0 +1,33 @@
/obj/item/organ/external/chest/zombie
max_damage = 100
min_broken_damage = 35
/obj/item/organ/external/groin/zombie
maim_bonus = 5
/obj/item/organ/external/arm/zombie
maim_bonus = 15
/obj/item/organ/external/arm/right/zombie
maim_bonus = 15
/obj/item/organ/external/leg/zombie
maim_bonus = 15
/obj/item/organ/external/leg/right/zombie
maim_bonus = 15
/obj/item/organ/external/foot/zombie
maim_bonus = 15
/obj/item/organ/external/foot/right/zombie
maim_bonus = 15
/obj/item/organ/external/hand/zombie
maim_bonus = 15
/obj/item/organ/external/hand/right/zombie
maim_bonus = 15
/obj/item/organ/external/head/zombie
maim_bonus = 3
+13 -1
View File
@@ -21,7 +21,8 @@ var/global/area/overmap/map_overmap // Global object used to locate the overmap
var/base = 0 //starting sector, counts as station_levels
var/in_space = 1 //can be accessed via lucky EVA
var/has_distress_beacon
var/has_called_distress_beacon = FALSE
var/image/applied_distress_overlay
/obj/effect/overmap/visitable/Initialize()
. = ..()
@@ -111,6 +112,17 @@ var/global/area/overmap/map_overmap // Global object used to locate the overmap
/obj/effect/overmap/visitable/proc/generate_skybox()
return
/obj/effect/overmap/visitable/proc/toggle_distress_status()
has_called_distress_beacon = !has_called_distress_beacon
if(has_called_distress_beacon)
var/image/distress_overlay = image('icons/obj/overmap.dmi', "distress")
applied_distress_overlay = distress_overlay
add_overlay(applied_distress_overlay)
filters = filter(type = "outline", size = 2, color = COLOR_RED)
else
cut_overlay(applied_distress_overlay)
filters = null
/obj/effect/overmap/visitable/sector
name = "generic sector"
desc = "Sector with some stuff in it."
@@ -44,6 +44,18 @@
data["status"] = "VACUUM SEAL BROKEN"
else
data["status"] = "OK"
var/list/distress_beacons = list()
for(var/caller in SSdistress.active_distress_beacons)
var/datum/distress_beacon/beacon = SSdistress.active_distress_beacons[caller]
var/obj/effect/overmap/vessel = beacon.caller
var/mob/living/carbon/human/H = beacon.user
var/job_string = H.job ? "[H.job] " : ""
var/bearing = round(90 - Atan2(vessel.x - linked.x, vessel.y - linked.y),5)
if(bearing < 0)
bearing += 360
distress_beacons.Add(list(list("caller" = vessel.name, "sender" = "[job_string][H.name]", "bearing" = bearing)))
if(length(distress_beacons))
data["distress_beacons"] = distress_beacons
var/list/contacts = list()
for(var/obj/effect/overmap/O in view(7,linked))
if(linked == O)
@@ -54,7 +66,7 @@
if(bearing < 0)
bearing += 360
contacts.Add(list(list("name"=O.name, "ref"="\ref[O]", "bearing"=bearing)))
if(contacts.len)
if(length(contacts))
data["contacts"] = contacts
else
data["status"] = "MISSING"
@@ -63,7 +75,7 @@
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "shipsensors.tmpl", "[linked.name] Sensors Control", 420, 530, src)
ui = new(user, src, ui_key, "shipsensors.tmpl", "[linked.name] Sensors Control", 600, 530, src)
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
@@ -103,6 +115,17 @@
new/obj/item/paper/(get_turf(src), O.get_scan_data(usr), "paper (Sensor Scan - [O])")
return TOPIC_HANDLED
if (href_list["play_message"])
var/caller = href_list["play_message"]
var/datum/distress_beacon/beacon = SSdistress.active_distress_beacons[caller]
var/mob/living/carbon/human/sender = beacon.user
var/user_name = beacon.user_name
var/accent_icon = sender.get_accent_icon()
visible_message(SPAN_NOTICE("\The [src] beeps a few times as it replays the distress message."))
playsound(src, 'sound/machines/compbeep5.ogg')
visible_message(SPAN_ITALIC("[accent_icon] <b>[user_name]</b> explains, \"[beacon.distress_message]\""))
return TOPIC_HANDLED
/obj/machinery/computer/ship/sensors/process()
..()
if(!linked)
+1
View File
@@ -413,6 +413,7 @@
user.visible_message(SPAN_WARNING("\The [user] hits \the [src], but it doesn't break."), SPAN_WARNING("You hit \the [src], but it doesn't break."), SPAN_WARNING("You hear something hitting against glass."))
/obj/machinery/light/bullet_act(obj/item/projectile/P, def_zone)
bullet_ping(P)
shatter()
// returns whether this light has power
@@ -60,6 +60,30 @@
firemodes = list()
modifystate = null
/obj/item/gun/energy/rifle/laser/noctiluca
name = "combat laser rifle"
desc = "The Noctiluca XM/24 is a brand new model of laser rifle, developed entirely by Kumar Arms, a Zavodskoi Interstellar subsidiary. Easy to handle for users with minimal training, reliable and with a reasonable form factor, it is poised to become the new standard for laser weaponry."
desc_fluff = "The Noctiluca XM/24 was unveiled at the tail end of 2463 in the SCC Future Firearms contest and was released by Zavodskoi in June 2464 after achieving a stunning victory over the other competitors. Zavodskoi installations are prioritized for acquisition of this new rifle, with along the SCCV Horizon. The Noctiluca's specialty lies in its revolutionary dual-function laser diffuser, which is able to modulate the laser into either a standard beam or an armor-piercing super-concentrated beam."
desc_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger. \
The Noctiluca comes with a standard firing mode that is slightly worse in damage than the normal laser rifle, but has more armor penetration. Additionally, \
it has a secondary armor-piercing mode, which does less damage but has extremely high armor piercing."
icon = 'icons/obj/guns/crew_laser.dmi'
icon_state = "trilaser"
item_state = "trilaser"
max_shots = 12
fire_delay = 5
burst_delay = 5
origin_tech = list(TECH_COMBAT = 8, TECH_MAGNET = 4)
projectile_type = /obj/item/projectile/beam/noctiluca
secondary_projectile_type = /obj/item/projectile/beam/noctiluca/armor_piercing
secondary_fire_sound = 'sound/weapons/laserstrong.ogg'
can_switch_modes = TRUE
firemodes = list(
list(mode_name = "fire normal diffusion lasers", projectile_type = /obj/item/projectile/beam/noctiluca, fire_sound = 'sound/weapons/laser1.ogg'),
list(mode_name = "fire specialized armor piercing lasers", projectile_type = /obj/item/projectile/beam/noctiluca/armor_piercing, fire_sound = 'sound/weapons/laserstrong.ogg')
)
/obj/item/gun/energy/rifle/laser/heavy
name = "laser cannon"
desc = "A nanotrasen designed laser cannon capable of acting as a powerful support weapon."
@@ -320,6 +320,37 @@
else
to_chat(user, "\The [launcher] is empty.")
/obj/item/gun/projectile/automatic/rifle/jingya
name = "burst rifle"
desc = "The Jingya A-1 is the first of a new line of Nanotrasen rifles, developed in cooperation with Zavodskoi Interstellar's Kumar Arms subsidiary. They are made to be sleek, easy to use by users with minimal training and cheap to mass produce while still being reliable."
desc_fluff = "The Jingya A-1 won a hard-fought victory in the ballistic side of the SCC Future Firearms contest hosted in 2463, which was also its first unveiling: this rifle is made to function where laser weaponry may be either too risky or not functional for the engagement at hand. It is slated to be deployed for trial usage by a select few special TCFL regiments in Mictlan."
icon = 'icons/obj/guns/crew_rifle.dmi'
icon_state = "arifle"
item_state = "arifle"
w_class = ITEMSIZE_LARGE
force = 10
caliber = "a556"
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 3)
ammo_type = /obj/item/ammo_casing/a556
fire_sound = 'sound/weapons/gunshot/gunshot_rifle.ogg'
slot_flags = SLOT_BACK
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/a556/carbine/polymer
allowed_magazines = list(/obj/item/ammo_magazine/a556/carbine, /obj/item/ammo_magazine/a556/carbine/polymer)
burst_delay = 4
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=12),
list(mode_name="2-round bursts", burst=2, burst_accuracy=list(1, 1))
)
/obj/item/gun/projectile/automatic/rifle/jingya/update_icon()
..()
if(ammo_magazine)
icon_state = "arifle"
else
icon_state = "arifle-empty"
/obj/item/gun/projectile/automatic/rifle/l6_saw
name = "light machine gun"
desc = "A rather traditionally made L6 SAW with a pleasantly lacquered wooden pistol grip. Has 'Aussec Armory- 2431' engraved on the receiver"
+27 -1
View File
@@ -11,6 +11,7 @@
mouse_opacity = 0
animate_movement = 0 //Use SLIDE_STEPS in conjunction with legacy
var/projectile_type = /obj/item/projectile
var/ping_effect = "ping_b" //Effect displayed when a bullet hits a barricade. See atom/proc/bullet_ping.
var/def_zone = "" //Aiming at
var/hit_zone // The place that actually got hit
@@ -655,4 +656,29 @@
if(initial(shrapnel_type))
var/obj/shrapnel = new shrapnel_type
. += "Shrapnel Type: [shrapnel.name]<br>"
. += "Armor Penetration: [initial(armor_penetration)]%<br>"
. += "Armor Penetration: [initial(armor_penetration)]%<br>"
//This is where the bullet bounces off.
/atom/proc/bullet_ping(obj/item/projectile/P, var/pixel_x_offset, var/pixel_y_offset)
if(!P || !P.ping_effect)
return
var/image/I = image('icons/obj/projectiles.dmi', src,P.ping_effect,10, pixel_x = pixel_x_offset, pixel_y = pixel_y_offset)
var/angle = (P.firer && prob(60)) ? round(Get_Angle(P.firer,src)) : round(rand(1,359))
I.pixel_x += rand(-6,6)
I.pixel_y += rand(-6,6)
var/matrix/rotate = matrix()
rotate.Turn(angle)
I.transform = rotate
// Need to do this in order to prevent the ping from being deleted
addtimer(CALLBACK(I, /image/.proc/flick_overlay, src, 3), 1)
/image/proc/flick_overlay(var/atom/A, var/duration)
A.overlays.Add(src)
addtimer(CALLBACK(src, .proc/flick_remove_overlay, A), duration)
/image/proc/flick_remove_overlay(var/atom/A)
if(A)
A.overlays.Remove(src)
@@ -1,6 +1,7 @@
/obj/item/projectile/beam
name = "laser"
icon_state = "laser"
ping_effect = "ping_s"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSRAILING
damage = 30
damage_type = BURN
@@ -50,6 +51,19 @@
damage = 35
armor_penetration = 10
/obj/item/projectile/beam/noctiluca
damage = 25
armor_penetration = 25
/obj/item/projectile/beam/noctiluca/armor_piercing
name = "concentrated laser"
damage = 15
armor_penetration = 50
muzzle_type = /obj/effect/projectile/muzzle/laser/scc
tracer_type = /obj/effect/projectile/tracer/laser/scc
impact_type = /obj/effect/projectile/impact/laser/scc
/obj/item/projectile/beam/midlaser/ice
damage = 25
armor_penetration = 10
@@ -434,13 +434,15 @@
embed = FALSE
penetrating = FALSE
armor_penetration = 10
var/heavy_impact_range = 1
/obj/item/projectile/bullet/recoilless_rifle/on_impact(var/atom/A)
explosion(A, -1, 1, 2)
explosion(A, -1, heavy_impact_range, 2)
..()
/obj/item/projectile/bullet/recoilless_rifle/peac
name = "anti-tank missile"
icon_state = "peac"
damage = 45
penetrating = TRUE
penetrating = TRUE
heavy_impact_range = -1
+2 -2
View File
@@ -6,13 +6,13 @@
priority_announcement.Announce( \
"A localized disruption within the neighboring psionic continua has been detected. All psi-operant crewmembers \
are advised to cease any sensitive activities and report to medical personnel in case of damage.", \
"Jargon Federation Observation Probe TC-203 Sensor Array", new_sound = 'sound/misc/announcements/nightlight_old.ogg')
"Jargon Federation Observation Probe TC-203 Sensor Array", new_sound = 'sound/misc/announcements/nightlight_old.ogg', zlevels = affecting_z)
/datum/event/psi/end()
priority_announcement.Announce( \
"The psi-disturbance has ended and baseline normality has been re-asserted. \
Anything you still can't cope with is therefore your own problem.", \
"Jargon Federation Observation Probe TC-203 Sensor Array", new_sound = 'sound/misc/announcements/nightlight_old.ogg')
"Jargon Federation Observation Probe TC-203 Sensor Array", new_sound = 'sound/misc/announcements/nightlight_old.ogg', zlevels = affecting_z)
/datum/event/psi/tick()
for(var/thing in SSpsi.processing)
+2 -2
View File
@@ -18,7 +18,7 @@
SIGNAL SOURCE TRIANGULATED TO DISTANT SITE: All personnel are advised to avoid \
exposure to active audio transmission equipment including radio headsets and intercoms \
for the duration of the signal broadcast.", \
"Jargon Federation Observation Probe TC-203 Sensor Array", new_sound = 'sound/misc/announcements/security_level_old.ogg')
"Jargon Federation Observation Probe TC-203 Sensor Array", new_sound = 'sound/misc/announcements/security_level_old.ogg', zlevels = affecting_z)
/datum/event/minispasm/start()
var/list/victims = list()
@@ -62,4 +62,4 @@
/datum/event/minispasm/end()
command_announcement.Announce( \
"PRIORITY ALERT: SIGNAL BROADCAST HAS CEASED. Personnel are cleared to resume use of non-hardened radio transmission equipment. Have a nice day.", \
"Jargon Federation Observation Probe TC-203 Sensor Array", new_sound = 'sound/misc/announcements/nightlight_old.ogg')
"Jargon Federation Observation Probe TC-203 Sensor Array", new_sound = 'sound/misc/announcements/nightlight_old.ogg', zlevels = affecting_z)
@@ -1,5 +1,5 @@
/obj/machinery/keycard_auth
name = "Keycard Authentication Device"
name = "keycard authentication device"
desc = "This device is used to trigger station functions, which require more than one ID card to authenticate."
icon = 'icons/obj/monitors.dmi'
icon_state = "auth_off"
@@ -12,6 +12,8 @@
var/obj/machinery/keycard_auth/event_source
var/mob/event_triggered_by
var/mob/event_confirmed_by
var/listening = FALSE
var/recorded_message = ""
//1 = select event
//2 = authenticate
anchored = 1.0
@@ -19,11 +21,21 @@
active_power_usage = 6
power_channel = ENVIRON
/obj/machinery/keycard_auth/attack_ai(mob/user as mob)
to_chat(user, "The station AI is not to interact with these devices.")
/obj/machinery/keycard_auth/Initialize(mapload, d, populate_components, is_internal)
..()
return INITIALIZE_HINT_LATELOAD
/obj/machinery/keycard_auth/LateInitialize()
if(current_map.use_overmap && !linked)
var/my_sector = map_sectors["[z]"]
if (istype(my_sector, /obj/effect/overmap/visitable))
attempt_hook_up(my_sector)
/obj/machinery/keycard_auth/attack_ai(mob/user)
to_chat(user, SPAN_NOTICE("The station AI is not to interact with these devices."))
return
/obj/machinery/keycard_auth/attackby(obj/item/W as obj, mob/user as mob)
/obj/machinery/keycard_auth/attackby(obj/item/W, mob/user)
if(stat & (NOPOWER|BROKEN))
to_chat(user, "This device is not powered.")
return
@@ -37,14 +49,14 @@
event_source.event_confirmed_by = usr
else if(screen == 2)
event_triggered_by = usr
broadcast_request() //This is the device making the initial event request. It needs to broadcast to other devices
broadcast_request(user) //This is the device making the initial event request. It needs to broadcast to other devices
/obj/machinery/keycard_auth/power_change()
..()
if(stat &NOPOWER)
icon_state = "auth_off"
/obj/machinery/keycard_auth/attack_hand(mob/user as mob)
/obj/machinery/keycard_auth/attack_hand(mob/user)
if(user.stat || stat & (NOPOWER|BROKEN))
to_chat(user, "This device is not powered.")
return
@@ -65,7 +77,7 @@
dat += "Select an event to trigger:<ul>"
dat += "<li><A href='?src=\ref[src];triggerevent=Red alert'>Red alert</A></li>"
if(!config.ert_admin_call_only)
dat += "<li><A href='?src=\ref[src];triggerevent=Distress Beacon'>Distress Beacon</A></li>"
dat += "<li><A href='?src=\ref[src];triggerevent=Distress Beacon'>Broadcast Distress Beacon</A></li>"
dat += "</ul>"
if(screen == 2)
@@ -104,11 +116,28 @@
icon_state = "auth_off"
event_triggered_by = null
event_confirmed_by = null
recorded_message = ""
/obj/machinery/keycard_auth/proc/broadcast_request()
/obj/machinery/keycard_auth/hear_talk(mob/M, text, verb, datum/language/speaking)
if(event == "Distress Beacon" && listening && M == event_triggered_by)
recorded_message = text
/obj/machinery/keycard_auth/proc/broadcast_request(var/mob/user)
var/distress_message
if(event == "Distress Beacon" && user)
distress_message = input(user, "Enter a distress message that other vessels will receive.", "Distress Beacon")
if(distress_message)
listening = TRUE
user.say(distress_message)
listening = FALSE
else
to_chat(user, SPAN_WARNING("The beacon refuses to launch without a message!"))
reset()
return
icon_state = "auth_on"
for(var/obj/machinery/keycard_auth/KA in SSmachinery.machinery)
if(KA == src) continue
if(KA == src)
continue
KA.reset()
spawn()
KA.receive_request(src)
@@ -116,7 +145,7 @@
sleep(confirm_delay)
if(confirmed)
confirmed = 0
trigger_event(event)
trigger_event(event, recorded_message, user)
log_game("[key_name(event_triggered_by)] triggered and [key_name(event_confirmed_by)] confirmed event [event]",ckey=key_name(event_triggered_by),ckey_target=key_name(event_confirmed_by))
message_admins("[key_name_admin(event_triggered_by)] triggered and [key_name_admin(event_confirmed_by)] confirmed event [event]", 1)
reset()
@@ -136,7 +165,7 @@
active = 0
busy = 0
/obj/machinery/keycard_auth/proc/trigger_event()
/obj/machinery/keycard_auth/proc/trigger_event(var/event, var/distress_message, var/mob/user)
switch(event)
if("Red alert")
set_security_level(SEC_LEVEL_RED)
@@ -145,7 +174,13 @@
if(is_ert_blocked())
to_chat(usr, "<span class='warning'>The distress beacon is disabled!</span>")
return
SSresponseteam.trigger_armed_response_team()
if(linked)
if(linked.has_called_distress_beacon)
to_chat(usr, SPAN_WARNING("The distress beacon has already been fired!"))
return
SSdistress.trigger_overmap_distress_beacon(linked, distress_message, user)
else
SSdistress.trigger_armed_response_team()
feedback_inc("alert_keycard_auth_ert",1)
/obj/machinery/keycard_auth/proc/is_ert_blocked()
@@ -42,7 +42,7 @@
SSnightlight.end_temp_disable()
if(SEC_LEVEL_RED)
if(security_level < SEC_LEVEL_RED)
security_announcement_sound.Announce("[config.alert_desc_red_upto]", "Attention! Security level elevated to red!")
security_announcement_sound.Announce("[config.alert_desc_red_upto]", "Attention! Security level elevated to red!", new_sound = 'sound/effects/high_alert.ogg')
SSnightlight.temp_disable()
else
security_announcement.Announce("[config.alert_desc_red_downto]", "Attention! Code red!")
-1
View File
@@ -1,4 +1,3 @@
/obj/structure/table/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
if(istype(mover,/obj/item/projectile))