Bug fixes

This commit is contained in:
Markolie
2014-12-10 04:47:24 +01:00
parent 6af11b55c3
commit 7359061678
24 changed files with 215 additions and 413 deletions
@@ -32,7 +32,7 @@
/obj/machinery/computer3/security/mining
name = "Outpost Cameras"
desc = "Used to access the various cameras on the outpost."
spawn_files = list(/datum/file/camnet_key/mining)
spawn_files = list(/datum/file/camnet_key/miningoutpost)
/*
Camera monitoring computers, wall-mounted
@@ -43,7 +43,7 @@
spawn_files = list(/datum/file/camnet_key)
/obj/machinery/computer3/wall_comp/telescreen/entertainment
desc = "Damn, they better have /tg/thechannel on these things."
desc = "Damn, they better have Paradise Channel on these things."
spawn_files = list(/datum/file/camnet_key/entertainment)
@@ -76,53 +76,96 @@
return
computer.Crash(MISSING_PROGRAM)
/datum/file/camnet_key/mining
name = "Mining Camera Network Key"
title = "mining station"
desc = "Connects to mining security cameras."
networks = list("MINE")
/datum/file/camnet_key/telecomms
name = "Telecomms Network Key"
title = "telecommunications satellite"
desc = "Connects to telecommunications satellite security cameras."
networks = list("Telecomms")
/datum/file/camnet_key/researchoutpost
name = "Research Outpost Network Key"
title = "research outpost"
desc = "Connects to research outpost security cameras."
networks = list("Research Outpost")
/datum/file/camnet_key/miningoutpost
name = "Mining Outpost Network Key"
title = "mining outpost"
desc = "Connects to mining outpost security cameras."
networks = list("Mining Outpost")
screen = "miningcameras"
/datum/file/camnet_key/research
name = "Research Camera Network Key"
name = "Research Network Key"
title = "research"
networks = list("RD")
/datum/file/camnet_key/bombrange
name = "R&D Bomb Range Camera Network Key"
title = "bomb range"
desc = "Monitors the bomb range."
networks = list("Toxins")
/datum/file/camnet_key/xeno
name = "R&D Misc. Research Camera Network Key"
title = "special research"
networks = list("Misc")
/datum/file/camnet_key/singulo
name = "Singularity Camera Network Key"
title = "singularity"
networks = list("Singularity")
/datum/file/camnet_key/entertainment
name = "Entertainment Channel Encryption Key"
title = "entertainment"
desc = "Damn, I hope they have /tg/thechannel on here."
networks = list("thunder")
screen = "entertainment"
/datum/file/camnet_key/creed
name = "Special Ops Camera Encryption Key"
title = "special ops"
desc = "Connects to special ops secure camera feeds."
networks = list("CREED")
desc = "Connects to research security cameras."
networks = list("Research")
/datum/file/camnet_key/prison
name = "Prison Camera Network Key"
name = "Prison Network Key"
title = "prison"
desc = "Monitors the prison."
desc = "Connects to prison security cameras."
networks = list("Prison")
/datum/file/camnet_key/interrogation
name = "Interrogation Network Key"
title = "interrogation"
desc = "Connects to interrogation security cameras."
networks = list("Interrogation")
/datum/file/camnet_key/supermatter
name = "Supermatter Network Key"
title = "supermatter"
desc = "Connects to supermatter security cameras."
networks = list("Supermatter")
/datum/file/camnet_key/singularity
name = "Singularity Network Key"
title = "singularity"
desc = "Connects to singularity security cameras."
networks = list("Singularity")
/datum/file/camnet_key/anomalyisolation
name = "Anomaly Isolation Network Key"
title = "anomalyisolation"
desc = "Connects to interrogation security cameras."
networks = list("Anomaly Isolation")
/datum/file/camnet_key/toxins
name = "Toxins Network Key"
title = "toxins"
desc = "Connects to toxins security cameras."
networks = list("Toxins")
/datum/file/camnet_key/telepad
name = "Telepad Network Key"
title = "telepad"
desc = "Connects to telepad security cameras."
networks = list("Telepad")
/datum/file/camnet_key/ert
name = "Emergency Response Team Network Key"
title = "emergency response team"
desc = "Connects to emergency response team security cameras."
networks = list("ERT")
/datum/file/camnet_key/centcom
name = "Central Command Network Key"
title = "central command"
desc = "Connects to central command security cameras."
networks = list("CentCom")
/datum/file/camnet_key/thunderdome
name = "Thunderdome Network Key"
title = "thunderdome"
desc = "Connects to thunderdome security cameras."
networks = list("Thunderdome")
/datum/file/camnet_key/entertainment
name = "Entertainment Network Key"
title = "entertainment"
desc = "Connects to entertainment security cameras."
networks = list("news")
/*
@@ -147,7 +190,7 @@
if(temp.len)
L.Add(C)
//camera_sort(L)
camera_sort(L)
return L
verify_machine(var/obj/machinery/camera/C,var/datum/file/camnet_key/key = null)
@@ -4,7 +4,7 @@
/obj/machinery/computer3/card/hop
default_prog = /datum/file/program/card_comp
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/cardslot/dual)
spawn_files = list(/datum/file/program/arcade, /datum/file/program/security, /datum/file/camnet_key/mining, /datum/file/camnet_key/entertainment,/datum/file/camnet_key/prison)
spawn_files = list(/datum/file/program/arcade, /datum/file/program/security, /datum/file/camnet_key/miningoutpost, /datum/file/camnet_key/entertainment,/datum/file/camnet_key/prison)
/obj/machinery/computer3/card/centcom
@@ -6,7 +6,7 @@
default_prog = /datum/file/program/communications
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio/subspace,/obj/item/part/computer/cardslot/dual)
spawn_files = list(/datum/file/program/card_comp, /datum/file/program/security, /datum/file/program/crew, /datum/file/program/arcade,
/datum/file/camnet_key, /datum/file/camnet_key/entertainment, /datum/file/camnet_key/singulo)
/datum/file/camnet_key, /datum/file/camnet_key/entertainment, /datum/file/camnet_key/singularity)
/datum/file/program/communications
+10 -3
View File
@@ -296,6 +296,9 @@
if(access_security in C.access)
newlap.spawn_files += (/datum/file/program/secure_data)
newlap.spawn_files += (/datum/file/camnet_key)
newlap.spawn_files += (/datum/file/camnet_key/researchoutpost)
newlap.spawn_files += (/datum/file/camnet_key/miningoutpost)
newlap.spawn_files += (/datum/file/camnet_key/telecomms)
newlap.spawn_files += (/datum/file/program/security)
if(access_armory in C.access)
newlap.spawn_files += (/datum/file/program/prisoner)
@@ -312,13 +315,17 @@
if(access_engine in C.access)
newlap.spawn_files += (/datum/file/program/powermon)
if(access_research in C.access)
newlap.spawn_files += (/datum/file/camnet_key/researchoutpost)
newlap.spawn_files += (/datum/file/camnet_key/research)
newlap.spawn_files += (/datum/file/camnet_key/bombrange)
newlap.spawn_files += (/datum/file/camnet_key/xeno)
newlap.spawn_files += (/datum/file/camnet_key/anomalyisolation)
newlap.spawn_files += (/datum/file/camnet_key/toxins)
newlap.spawn_files += (/datum/file/camnet_key/telepad)
if(access_rd in C.access)
newlap.spawn_files += (/datum/file/program/borg_control)
if(access_cent_specops in C.access)
newlap.spawn_files += (/datum/file/camnet_key/creed)
newlap.spawn_files += (/datum/file/camnet_key/ert)
newlap.spawn_files += (/datum/file/camnet_key/centcom)
newlap.spawn_files += (/datum/file/camnet_key/thunderdome)
newlap.spawn_files += (/datum/file/program/arcade)
newlap.spawn_files += (/datum/file/camnet_key/entertainment)
//Atlantis: Each laptop gets "invisible" program/security - REQUIRED for camnetkeys to work.
+8 -7
View File
@@ -30,6 +30,7 @@
var/mob/living/silicon/ai/calling_ai //Links a bot to the AI calling it.
var/obj/item/device/radio/Radio //The bot's radio, for speaking to people.
var/radio_frequency //The bot's default radio speaking freqency. Recommended to be on a department frequency.
var/radio_name = "Common"
//var/emagged = 0 //Urist: Moving that var to the general /bot tree as it's used by most bots
var/auto_patrol = 0// set to make bot automatically patrol
var/turf/patrol_target // this is turf to navigate to (location of beacon)
@@ -101,6 +102,7 @@
set_custom_texts()
Radio = new /obj/item/device/radio(src)
Radio.listening = 0 //Makes bot radios transmit only so no one hears things while adjacent to one.
Radio.config(list("[radio_name]" = 0))
/obj/machinery/bot/proc/add_to_beacons(bot_filter) //Master filter control for bots. Must be placed in the bot's local New() to support map spawned bots.
@@ -335,14 +337,13 @@
/obj/machinery/bot/attack_ai(mob/user as mob)
attack_hand(user)
/obj/machinery/bot/proc/speak(var/message, freq) //Pass a message to have the bot say() it. Pass a frequency to say it on the radio.
/obj/machinery/bot/proc/speak(var/message, freq, var/freqname = null) //Pass a message to have the bot say() it. Pass a frequency to say it on the radio.
if((!on) || (!message))
return
if(freq)
return
// Commenting out the radio code until our say code's compatible with /tg/'s
/* Radio.set_frequency(radio_frequency)
Radio.talk_into_atom(src, message, radio_frequency) */
Radio.set_frequency(radio_frequency)
if(freqname)
Radio.autosay(message, src.name, freqname, list(src.z))
else
for(var/mob/O in hearers(src, null))
O.show_message("<span class='game say'><span class='name'>[src]</span> beeps, \"[message]\"</span>",2)
@@ -651,7 +652,7 @@ obj/machinery/bot/proc/start_patrol()
botcard.access = user_access + prev_access //Adds the user's access, if any.
mode = BOT_SUMMON
calc_summon_path()
speak("Responding."/*, radio_frequency*/)
speak("Responding.", radio_frequency, radio_name)
return
// receive response from beacon
@@ -738,7 +739,7 @@ obj/machinery/bot/proc/bot_summon()
check_bot_access()
path = AStar(loc, summon_target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance_cardinal, 0, 150, id=botcard, exclude=avoid)
if(!path || tries >= 5) //Cannot reach target. Give up and announce the issue.
speak("Summon command failed, destination unreachable."/*,radio_frequency*/)
speak("Summon command failed, destination unreachable.", radio_frequency, radio_name)
bot_reset()
/obj/machinery/bot/proc/summon_step()
+2
View File
@@ -39,6 +39,7 @@
var/next_dest
var/next_dest_loc
radio_frequency = SRV_FREQ //Service
radio_name = "Service"
bot_type = CLEAN_BOT
bot_filter = RADIO_CLEANBOT
@@ -120,6 +121,7 @@ text("<A href='?src=\ref[src];power=1'>[on ? "On" : "Off"]</A>"))
if(allowed(usr) && !open && !emagged)
locked = !locked
user << "<span class='notice'>You [ locked ? "lock" : "unlock"] the [src] behaviour controls.</span>"
updateUsrDialog()
else
if(emagged)
user << "<span class='warning'>ERROR</span>"
+4 -9
View File
@@ -34,6 +34,7 @@
var/projectile = /obj/item/projectile/energy/electrode //Holder for projectile type
var/shoot_sound = 'sound/weapons/Taser.ogg'
radio_frequency = SEC_FREQ
radio_name = "Security"
bot_type = SEC_BOT
bot_filter = RADIO_SECBOT
@@ -267,8 +268,8 @@ Auto Patrol[]"},
M.Stun(5)
if(declare_arrests)
//var/area/location = get_area(src)
declare_arrest()
var/area/location = get_area(src)
speak("[arrest_type ? "Detaining" : "Arresting"] level [threatlevel] scumbag <b>[target]</b> in [location].",radio_frequency, radio_name)
target.visible_message("<span class='danger'>[target] has been stunned by [src]!</span>",\
"<span class='userdanger'>[target] has been stunned by [src]!</span></span>")
@@ -725,10 +726,4 @@ Auto Patrol[]"},
/obj/machinery/bot/ed209/redtag/New()
new /obj/machinery/bot/ed209(get_turf(src),null,"r")
qdel(src)
/obj/machinery/bot/ed209/proc/declare_arrest()
var/area/location = get_area(src)
for(var/mob/living/carbon/human/human in world)
if((human.z == src.z) && istype(human.glasses, /obj/item/clothing/glasses/hud/security) || istype(human.glasses, /obj/item/clothing/glasses/sunglasses/sechud) && !human.blinded)
human << "<span class='info'>\icon[human.glasses] [src.name] is [arrest_type ? "detaining" : "arresting"] level [threatlevel] threat <b>[target]</b> in <b>[location]</b></span>"
qdel(src)
+4 -1
View File
@@ -50,6 +50,7 @@
req_one_access = list(access_construction, access_robotics)
var/targetdirection
radio_frequency = ENG_FREQ //Engineering channel
radio_name = "Engineering"
bot_type = FLOOR_BOT
bot_filter = RADIO_FLOORBOT
var/process_type //Determines what to do when process_scan() recieves a target. See process_scan() for details.
@@ -150,6 +151,7 @@
if(allowed(user) && !open && !emagged)
locked = !locked
user << "<span class='notice'>You [locked ? "lock" : "unlock"] \the [src] behaviour controls.</span>"
updateUsrDialog()
else
if(emagged)
user << "<span class='warning'>ERROR</span>"
@@ -314,7 +316,8 @@
/obj/machinery/bot/floorbot/proc/nag() //Annoy everyone on the channel to refill us!
if(!nagged)
speak("Requesting refill at <b>[get_area(src)]</b>!"/*, radio_frequency*/)
var/area/location = get_area(src)
speak("Requesting refill at <b>[location]</b>!", radio_frequency, radio_name)
nagged = 1
/obj/machinery/bot/floorbot/proc/is_hull_breach(var/turf/t) //Ignore space tiles not considered part of a structure, also ignores shuttle docking areas.
+6 -17
View File
@@ -31,6 +31,7 @@
var/declare_cooldown = 0 //Prevents spam of critical patient alerts.
var/stationary_mode = 0 //If enabled, the Medibot will not move automatically.
radio_frequency = MED_FREQ //Medical frequency
radio_name = "Medical"
//Setting which reagents to use to treat what by default. By id.
var/treatment_brute = "tricordrazine"
var/treatment_oxy = "tricordrazine"
@@ -522,8 +523,10 @@
/obj/machinery/bot/medbot/proc/declare(var/crit_patient)
if(declare_cooldown)
return
//var/area/location = get_area(src)
declare_critical(crit_patient)
if((skin == "bezerk"))
return
var/area/location = get_area(src)
speak("Medical emergency! [crit_patient ? "<b>[crit_patient]</b>" : "A patient"] is in critical condition at [location]!",radio_frequency, radio_name)
declare_cooldown = 1
spawn(200) //Twenty seconds
declare_cooldown = 0
@@ -589,18 +592,4 @@
S.skin = skin
S.name = created_name
user.before_take_item(src, 1)
qdel(src)
/obj/machinery/bot/medbot/proc/declare_critical(var/crit_patient)
var/area/location = get_area(src)
for(var/mob/living/carbon/human/human in world)
if((human.z == src.z) && istype(human.glasses, /obj/item/clothing/glasses/hud/health) || istype(human.glasses, /obj/item/clothing/glasses/hud/health_advanced) && !human.blinded)
if((skin == "bezerk") && (!("syndicate" in human.faction)))
continue
human << "<span class='info'>\icon[human.glasses] Medical emergency! [crit_patient ? "<b>[crit_patient]</b>" : "A patient"] is in critical condition at [location]!"
for(var/mob/living/silicon/robot in world)
if((robot.z == src.z) && !robot.blinded)
if((skin == "bezerk") && (!("syndicate" in robot.faction)))
continue
if(robot.sensor_mode == 2)
robot << "<span class='info'>Medical emergency! [crit_patient ? "<b>[crit_patient]</b>" : "A patient"] is in critical condition at [location]!"
qdel(src)
+8 -4
View File
@@ -94,7 +94,7 @@ var/global/mulebot_count = 0
else if(istype(I, /obj/item/weapon/card/id) || istype(I, /obj/item/device/pda))
if(toggle_lock(user))
user << "<span class='notice'>Controls [(locked ? "locked" : "unlocked")].</span>"
updateUsrDialog()
else if(istype(I,/obj/item/weapon/cell) && open && !cell)
var/obj/item/weapon/cell/C = I
user.drop_item()
@@ -237,7 +237,7 @@ var/global/mulebot_count = 0
//user << browse("<HEAD><TITLE>M.U.L.E. Mk. III [suffix ? "([suffix])" : ""]</TITLE></HEAD>[dat]", "window=mulebot;size=350x500")
//onclose(user, "mulebot")
var/datum/browser/popup = new(user, "mulebot", "M.U.L.E. Mk. V [suffix ? "([suffix])" : ""]", 350, 500)
var/datum/browser/popup = new(user, "mulebot", "M.U.L.E. Mk. V [suffix ? "([suffix])" : ""]", 350, 535)
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
popup.open()
@@ -683,6 +683,8 @@ var/global/mulebot_count = 0
/obj/machinery/bot/mulebot/proc/at_target()
if(!reached_target)
radio_frequency = SUP_FREQ //Supply channel
radio_name = "Supply"
Radio.config(list("[radio_name]" = 0))
visible_message("[src] makes a chiming sound!", "You hear a chime.")
playsound(loc, 'sound/machines/chime.ogg', 50, 0)
reached_target = 1
@@ -694,9 +696,11 @@ var/global/mulebot_count = 0
playsound(calling_ai, 'sound/machines/chime.ogg',40, 0)
calling_ai = null
radio_frequency = AIPRIV_FREQ //Report on AI Private instead if the AI is controlling us.
radio_name = "AI Private"
Radio.config(list("[radio_name]" = 0))
if(load) // if loaded, unload at target
speak("Destination <b>[destination]</b> reached. Unloading [load]."/*,radio_frequency*/)
speak("Destination <b>[destination]</b> reached. Unloading [load].", radio_frequency, radio_name)
unload(loaddir)
else
// not loaded
@@ -712,7 +716,7 @@ var/global/mulebot_count = 0
if(AM)
load(AM)
if(report_delivery)
speak("Now loading [load] at <b>[get_area(src)]</b>."/*,radio_frequency*/)
speak("Now loading [load] at <b>[get_area(src)]</b>.", radio_frequency, radio_name)
// whatever happened, check to see if we return home
if(auto_return && destination != home_destination)
+5 -13
View File
@@ -24,6 +24,7 @@
var/check_records = 1 //Does it check security records?
var/arrest_type = 0 //If true, don't handcuff
radio_frequency = SEC_FREQ //Security channel
radio_name = "Security"
bot_type = SEC_BOT
bot_filter = RADIO_SECBOT
@@ -41,7 +42,7 @@
name = "Officer Beepsky"
desc = "It's Officer Beepsky! Powered by a potato and a shot of whiskey."
idcheck = 0
weaponscheck = 0
weaponscheck = 1
auto_patrol = 1
/obj/machinery/bot/secbot/pingsky
@@ -230,8 +231,8 @@ Auto Patrol: []"},
M.Stun(5)
if(declare_arrests)
//var/area/location = get_area(src)
declare_arrest()
var/area/location = get_area(src)
speak("[arrest_type ? "Detaining" : "Arresting"] level [threatlevel] scumbag <b>[target]</b> in [location].",radio_frequency, radio_name)
target.visible_message("<span class='danger'>[target] has been stunned by [src]!</span>",\
"<span class='userdanger'>[target] has been stunned by [src]!</span>")
@@ -475,13 +476,4 @@ Auto Patrol: []"},
overlays -= "hs_arm"
new /obj/item/robot_parts/l_arm(get_turf(src))
user << "<span class='notice'>You remove the robot arm from [src].</span>"
build_step--
/obj/machinery/bot/secbot/proc/declare_arrest()
var/area/location = get_area(src)
for(var/mob/living/carbon/human/human in world)
if((human.z == src.z) && istype(human.glasses, /obj/item/clothing/glasses/hud/security) || istype(human.glasses, /obj/item/clothing/glasses/sunglasses/sechud) && !human.blinded)
human << "<span class='info'>\icon[human.glasses] [src.name] is [arrest_type ? "detaining" : "arresting"] level [threatlevel] threat <b>[target]</b> in <b>[location]</b></span>"
for(var/mob/living/silicon/robot in world)
if((robot.z == src.z) && !robot.blinded && robot.sensor_mode == 1)
robot << "<span class='info'>[src.name] is [arrest_type ? "detaining" : "arresting"] level [threatlevel] threat <b>[target]</b> in <b>[location]</b></span>"
build_step--
+16 -261
View File
@@ -23,14 +23,13 @@ var/specops_shuttle_timeleft = 0
var/specops_shuttle_timereset = 0
/proc/specops_return()
var/area/centcom/control/command = locate()//To find announcer. This area should exist for this proc to work.
var/mob/living/silicon/decoy/announcer = locate() in command//We need a fake AI to announce some stuff below. Otherwise it will be wonky.
var/obj/item/device/radio/intercom/announcer = new /obj/item/device/radio/intercom(null)//We need a fake AI to announce some stuff below. Otherwise it will be wonky.
announcer.config(list("Response Team" = 0))
var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values.
var/message = "\"THE SPECIAL OPERATIONS SHUTTLE IS PREPARING TO RETURN\""//Initial message shown.
if(announcer)
announcer.say(message)
announcer.say(message)
announcer.autosay(message, "A.L.I.C.E.", "Response Team", list(1,2))
while(specops_shuttle_time - world.timeofday > 0)
var/ticksleft = specops_shuttle_time - world.timeofday
@@ -46,7 +45,7 @@ var/specops_shuttle_timeleft = 0
message = "\"ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN\""
if(rounded_time_left==0)
message = "\"ALERT: TAKEOFF\""
announcer.say(message)
announcer.autosay(message, "A.L.I.C.E.", "Response Team")
message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle.
//Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that.
@@ -94,21 +93,20 @@ var/specops_shuttle_timeleft = 0
for(var/obj/machinery/computer/specops_shuttle/S in world)
S.specops_shuttle_timereset = world.time + SPECOPS_RETURN_DELAY
del(announcer)
/proc/specops_process()
var/area/centcom/specops/special_ops = locate()//Where is the specops area located?
var/area/centcom/control/command = locate()//To find announcer. This area should exist for this proc to work.
var/mob/living/silicon/decoy/announcer = locate() in command//We need a fake AI to announce some stuff below. Otherwise it will be wonky.
var/obj/item/device/radio/intercom/announcer = new /obj/item/device/radio/intercom(null)//We need a fake AI to announce some stuff below. Otherwise it will be wonky.
announcer.config(list("Response Team" = 0))
var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values.
var/message = "\"THE SPECIAL OPERATIONS SHUTTLE IS PREPARING FOR LAUNCH\""//Initial message shown.
if(announcer)
announcer.say(message)
announcer.say(message)
/*
message = "ARMORED SQUAD TAKE YOUR POSITION ON GRAVITY LAUNCH PAD"
announcer.say(message)
*/
announcer.autosay(message, "A.L.I.C.E.", "Response Team")
//message = "ARMORED SQUAD TAKE YOUR POSITION ON GRAVITY LAUNCH PAD"
//announcer.autosay(message, "A.L.I.C.E.", "Response Team")
while(specops_shuttle_time - world.timeofday > 0)
var/ticksleft = specops_shuttle_time - world.timeofday
@@ -124,8 +122,7 @@ var/specops_shuttle_timeleft = 0
message = "\"ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN\""
if(rounded_time_left==0)
message = "\"ALERT: TAKEOFF\""
announcer.say(message)
announcer.say(message)
announcer.autosay(message, "A.L.I.C.E.", "Response Team")
message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle.
//Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that.
@@ -237,6 +234,8 @@ var/specops_shuttle_timeleft = 0
for(var/obj/machinery/computer/specops_shuttle/S in world)
S.specops_shuttle_timereset = world.time + SPECOPS_RETURN_DELAY
del(announcer)
/proc/specops_can_move()
if(specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom)
@@ -339,248 +338,4 @@ var/specops_shuttle_timeleft = 0
add_fingerprint(usr)
updateUsrDialog()
return
/*//Config stuff
#define SPECOPS_MOVETIME 600 //Time to station is milliseconds. 60 seconds, enough time for everyone to be on the shuttle before it leaves.
#define SPECOPS_STATION_AREATYPE "/area/shuttle/specops/station" //Type of the spec ops shuttle area for station
#define SPECOPS_DOCK_AREATYPE "/area/shuttle/specops/centcom" //Type of the spec ops shuttle area for dock
var/specops_shuttle_moving_to_station = 0
var/specops_shuttle_moving_to_centcom = 0
var/specops_shuttle_at_station = 0
var/specops_shuttle_can_send = 1
var/specops_shuttle_time = 0
var/specops_shuttle_timeleft = 0
/obj/machinery/computer/specops_shuttle
name = "Spec. Ops. Shuttle Console"
icon = 'icons/obj/computer.dmi'
icon_state = "shuttle"
req_access = list(access_cent_specops)
var/temp = null
var/hacked = 0
var/allowedtocall = 0
/proc/specops_process()
var/area/centcom/control/cent_com = locate()//To find announcer. This area should exist for this proc to work.
var/area/centcom/specops/special_ops = locate()//Where is the specops area located?
var/mob/living/silicon/decoy/announcer = locate() in cent_com//We need a fake AI to announce some stuff below. Otherwise it will be wonky.
var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values.
var/message = "THE SPECIAL OPERATIONS SHUTTLE IS PREPARING FOR LAUNCH"//Initial message shown.
if(announcer)
announcer.say(message)
message = "ARMORED SQUAD TAKE YOUR POSITION ON GRAVITY LAUNCH PAD"
announcer.say(message)
while(specops_shuttle_time - world.timeofday > 0)
var/ticksleft = specops_shuttle_time - world.timeofday
if(ticksleft > 1e5)
specops_shuttle_time = world.timeofday + 10 // midnight rollover
specops_shuttle_timeleft = (ticksleft / 10)
//All this does is announce the time before launch.
if(announcer)
var/rounded_time_left = round(specops_shuttle_timeleft)//Round time so that it will report only once, not in fractions.
if(rounded_time_left in message_tracker)//If that time is in the list for message announce.
message = "ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN"
if(rounded_time_left==0)
message = "ALERT: TAKEOFF"
announcer.say(message)
message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle.
//Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that.
sleep(5)
specops_shuttle_moving_to_station = 0
specops_shuttle_moving_to_centcom = 0
specops_shuttle_at_station = 1
if (specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return
if (!specops_can_move())
usr << "\red The Special Operations shuttle is unable to leave."
return
//Begin Marauder launchpad.
spawn(0)//So it parallel processes it.
for(var/obj/machinery/door/poddoor/M in special_ops)
switch(M.id)
if("ASSAULT0")
spawn(10)//1 second delay between each.
M.open()
if("ASSAULT1")
spawn(20)
M.open()
if("ASSAULT2")
spawn(30)
M.open()
if("ASSAULT3")
spawn(40)
M.open()
sleep(10)
var/spawn_marauder[] = new()
for(var/obj/effect/landmark/L in landmarks_list)
if(L.name == "Marauder Entry")
spawn_marauder.Add(L)
for(var/obj/effect/landmark/L in landmarks_list)
if(L.name == "Marauder Exit")
var/obj/effect/portal/P = new(L.loc)
P.invisibility = 101//So it is not seen by anyone.
P.failchance = 0//So it has no fail chance when teleporting.
P.target = pick(spawn_marauder)//Where the marauder will arrive.
spawn_marauder.Remove(P.target)
sleep(10)
for(var/obj/machinery/mass_driver/M in special_ops)
switch(M.id)
if("ASSAULT0")
spawn(10)
M.drive()
if("ASSAULT1")
spawn(20)
M.drive()
if("ASSAULT2")
spawn(30)
M.drive()
if("ASSAULT3")
spawn(40)
M.drive()
sleep(50)//Doors remain open for 5 seconds.
for(var/obj/machinery/door/poddoor/M in special_ops)
switch(M.id)//Doors close at the same time.
if("ASSAULT0")
spawn(0)
M.close()
if("ASSAULT1")
spawn(0)
M.close()
if("ASSAULT2")
spawn(0)
M.close()
if("ASSAULT3")
spawn(0)
M.close()
special_ops.readyreset()//Reset firealarm after the team launched.
//End Marauder launchpad.
var/area/start_location = locate(/area/shuttle/specops/centcom)
var/area/end_location = locate(/area/shuttle/specops/station)
var/list/dstturfs = list()
var/throwy = world.maxy
for(var/turf/T in end_location)
dstturfs += T
if(T.y < throwy)
throwy = T.y
// hey you, get out of the way!
for(var/turf/T in dstturfs)
// find the turf to move things to
var/turf/D = locate(T.x, throwy - 1, 1)
//var/turf/E = get_step(D, SOUTH)
for(var/atom/movable/AM as mob|obj in T)
AM.Move(D)
if(istype(T, /turf/simulated))
del(T)
start_location.move_contents_to(end_location)
for(var/turf/T in get_area_turfs(end_location) )
var/mob/M = locate(/mob) in T
M << "\red You have arrived to [station_name]. Commence operation!"
/proc/specops_can_move()
if(specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return 0
else return 1
/obj/machinery/computer/specops_shuttle/attackby(I as obj, user as mob)
return attack_hand(user)
/obj/machinery/computer/specops_shuttle/attack_ai(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/specops_shuttle/attack_paw(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/specops_shuttle/attackby(I as obj, user as mob)
if(istype(I,/obj/item/weapon/card/emag))
user << "\blue The electronic systems in this console are far too advanced for your primitive hacking peripherals."
else
return attack_hand(user)
/obj/machinery/computer/specops_shuttle/attack_hand(var/mob/user as mob)
if(!allowed(user))
user << "\red Access Denied."
return
// if (sent_strike_team == 0)
// usr << "\red The strike team has not yet deployed."
// return
if(..())
return
user.set_machine(src)
var/dat
if (temp)
dat = temp
else
dat += {"<BR><B>Special Operations Shuttle</B><HR>
\nLocation: [specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "Departing for [station_name] in ([specops_shuttle_timeleft] seconds.)":specops_shuttle_at_station ? "Station":"Dock"]<BR>
[specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "\n*The Special Ops. shuttle is already leaving.*<BR>\n<BR>":specops_shuttle_at_station ? "\n<A href='?src=\ref[src];sendtodock=1'>Shuttle Offline</A><BR>\n<BR>":"\n<A href='?src=\ref[src];sendtostation=1'>Depart to [station_name]</A><BR>\n<BR>"]
\n<A href='?src=\ref[user];mach_close=computer'>Close</A>"}
user << browse(dat, "window=computer;size=575x450")
onclose(user, "computer")
return
/obj/machinery/computer/specops_shuttle/Topic(href, href_list)
if(..())
return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.set_machine(src)
if (href_list["sendtodock"])
if(!specops_shuttle_at_station|| specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return
usr << "\blue Central Command will not allow the Special Operations shuttle to return."
return
else if (href_list["sendtostation"])
if(specops_shuttle_at_station || specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return
if (!specops_can_move())
usr << "\red The Special Operations shuttle is unable to leave."
return
usr << "\blue The Special Operations shuttle will arrive on [station_name] in [(SPECOPS_MOVETIME/10)] seconds."
temp += "Shuttle departing.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
updateUsrDialog()
var/area/centcom/specops/special_ops = locate()
if(special_ops)
special_ops.readyalert()//Trigger alarm for the spec ops area.
specops_shuttle_moving_to_station = 1
specops_shuttle_time = world.timeofday + SPECOPS_MOVETIME
spawn(0)
specops_process()
else if (href_list["mainmenu"])
temp = null
add_fingerprint(usr)
updateUsrDialog()
return
*/
return
@@ -107,7 +107,7 @@
M.Weaken(10)
if(master && wires & 1)
if(master)
master.receive_signal()
return
@@ -196,7 +196,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
/obj/item/device/radio/proc/isWireCut(var/index)
return wires.IsIndexCut(index)
/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel) //BS12 EDIT
/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel, var/zlevel = list(1)) //BS12 EDIT
var/datum/radio_frequency/connection = null
if(channel && channels && channels.len > 0)
if (channel == "department")
@@ -215,7 +215,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
Broadcast_Message(connection, A,
0, "*garbled automated announcement*", src,
message, from, "Automated Announcement", from, "synthesized voice",
4, 0, list(1), 1459)
4, 0, zlevel, connection.frequency)
del(A)
return
+8 -8
View File
@@ -161,15 +161,15 @@
return
return
/obj/item/stack/proc/use(var/amount)
src.amount-=amount
if (src.amount<=0)
var/oldsrc = src
src = null //dont kill proc after del()
/obj/item/stack/proc/use(var/used)
if (amount < used)
return 0
amount -= used
if (amount <= 0)
if(usr)
usr.before_take_item(oldsrc)
qdel(oldsrc)
return
usr.before_take_item(src, 1)
qdel(src)
return 1
/obj/item/stack/proc/add_to_stacks(mob/usr as mob)
var/obj/item/stack/oldsrc = src
@@ -34,6 +34,7 @@
else
on = 1
icon_state = "echair1"
shock()
usr << "<span class='notice'>You switch [on ? "on" : "off"] [src].</span>"
return
@@ -70,8 +71,10 @@
sleep(1)
buckled_mob.burn_skin(85)
buckled_mob.Stun(600)
on = 0
visible_message("<span class='danger'>The electric chair went off!</span>", "<span class='danger'>You hear a deep sharp shock!</span>")
A.power_light = light
A.updateicon()
return
return
+1 -1
View File
@@ -277,7 +277,7 @@
icon_state = "crown"
item_state = "crown"
desc = "A gliterring bananium crown with spessjewels in it. Swaggy."
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/fedora
-1
View File
@@ -1098,7 +1098,6 @@
if( (cell_charge/CELLRATE+perapc) >= lastused_total) // can we draw enough from cell+grid to cover last usage?
cell_charge = min(cell_maxcharge, cell_charge + CELLRATE * perapc) //recharge with what we can
cell.charge = cell_charge
add_load(perapc) // so draw what we can from the grid
charging = 0
+1 -1
View File
@@ -37,7 +37,7 @@
/datum/shuttle/ferry/multidock/specops/proc/radio_announce(var/message)
if(announcer)
announcer.autosay(message, "A.L.I.C.E.", "Response Team")
announcer.autosay(message, "A.L.I.C.E.", "Response Team", list(1,2))
/datum/shuttle/ferry/multidock/specops/launch(var/user)
if (!can_launch())
+2 -1
View File
@@ -77,7 +77,8 @@
/obj/vehicle/train/ambulance/update_icon()
if(open)
icon_state = "mulebot-hatch"
//icon_state = "mulebot-hatch"
icon_state = initial(icon_state)
else
icon_state = initial(icon_state)
+2 -1
View File
@@ -127,7 +127,8 @@
/obj/vehicle/train/janitor/update_icon()
if(open)
icon_state = "mulebot-hatch"
//icon_state = "mulebot-hatch"
icon_state = initial(icon_state)
else
icon_state = initial(icon_state)
+5
View File
@@ -56,6 +56,11 @@
if(mob.stat == 2)
return
var/mob/living/carbon/human/MS = mob
if(MS && (MS.species.flags & IS_SYNTHETIC))
return
if(stage <= 1 && clicks == 0) // with a certain chance, the mob may become immune to the disease before it starts properly
if(prob(5))
mob.antibodies |= antigen