mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-29 07:59:01 +01:00
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:
@@ -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 planet’s 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)
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
))
|
||||
))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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,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))
|
||||
|
||||
Reference in New Issue
Block a user