mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-26 13:39:16 +01:00
Merge remote-tracking branch 'upstream/dev' into TheSummoning
Conflicts: code/game/machinery/cryopod.dm code/game/objects/items/weapons/clown_items.dm
This commit is contained in:
@@ -1256,6 +1256,8 @@ var/global/floorIsLava = 0
|
||||
//*********************************************************************************************************
|
||||
//
|
||||
|
||||
//Returns 1 to let the dragdrop code know we are trapping this event
|
||||
//Returns 0 if we don't plan to trap the event
|
||||
/datum/admins/proc/cmd_ghost_drag(var/mob/dead/observer/frommob, var/mob/living/tomob)
|
||||
if(!istype(frommob))
|
||||
return //Extra sanity check to make sure only observers are shoved into things
|
||||
@@ -1272,6 +1274,8 @@ var/global/floorIsLava = 0
|
||||
var/ask = alert(question, "Place ghost in control of mob?", "Yes", "No")
|
||||
if (ask != "Yes")
|
||||
return 1
|
||||
if (!frommob || !tomob) //make sure the mobs don't go away while we waited for a response
|
||||
return 1
|
||||
if(tomob.client) //No need to ghostize if there is no client
|
||||
tomob.ghostize(0)
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has put [frommob.ckey] in control of [tomob.name].</span>")
|
||||
|
||||
@@ -55,8 +55,7 @@ proc/admin_proc()
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
world << "you have enough rights!"
|
||||
|
||||
NOTE: it checks usr! not src! So if you're checking somebody's rank in a proc which they did not call
|
||||
you will have to do something like if(client.holder.rights & R_ADMIN) yourself.
|
||||
NOTE: It checks usr by default. Supply the "user" argument if you wish to check for a specific mob.
|
||||
*/
|
||||
/proc/check_rights(rights_required, show_msg=1, var/mob/user = usr)
|
||||
if(user && user.client)
|
||||
|
||||
@@ -1323,7 +1323,7 @@
|
||||
return
|
||||
|
||||
if(L.can_centcom_reply())
|
||||
var/input = input(src.owner, "Please enter a message to reply to [key_name(L)] via their headset.","Outgoing message from Centcomm", "")
|
||||
var/input = sanitize(input(src.owner, "Please enter a message to reply to [key_name(L)] via their headset.","Outgoing message from Centcomm", ""))
|
||||
if(!input) return
|
||||
|
||||
src.owner << "You sent [input] to [L] via a secure channel."
|
||||
|
||||
@@ -28,15 +28,13 @@
|
||||
feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
//log_admin("HELP: [key_name(src)]: [msg]")
|
||||
|
||||
/proc/Centcomm_announce(var/text , var/mob/Sender , var/iamessage)
|
||||
var/msg = sanitize(text)
|
||||
/proc/Centcomm_announce(var/msg, var/mob/Sender, var/iamessage)
|
||||
msg = "\blue <b><font color=orange>CENTCOMM[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
C << msg
|
||||
|
||||
/proc/Syndicate_announce(var/text , var/mob/Sender)
|
||||
var/msg = sanitize(text)
|
||||
/proc/Syndicate_announce(var/msg, var/mob/Sender)
|
||||
msg = "\blue <b><font color=crimson>ILLEGAL:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
|
||||
@@ -527,7 +527,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
|
||||
switch(alert("Should this be announced to the general population?",,"Yes","No"))
|
||||
if("Yes")
|
||||
command_announcement.Announce(input, customname, new_sound = 'sound/AI/commandreport.ogg');
|
||||
command_announcement.Announce(input, customname, new_sound = 'sound/AI/commandreport.ogg', msg_sanitized = 1);
|
||||
if("No")
|
||||
world << "\red New NanoTrasen Update available at all communication consoles."
|
||||
world << sound('sound/AI/commandreport.ogg')
|
||||
|
||||
@@ -171,6 +171,7 @@
|
||||
set desc = "BOOOOM!"
|
||||
deadman = 1
|
||||
processing_objects.Add(src)
|
||||
log_and_message_admins("is threatening to trigger a signaler deadman's switch")
|
||||
usr.visible_message("\red [usr] moves their finger over [src]'s signal button...")
|
||||
|
||||
/obj/item/device/assembly/signaler/Destroy()
|
||||
|
||||
@@ -3,7 +3,7 @@ proc/createRandomZlevel()
|
||||
return
|
||||
|
||||
var/list/potentialRandomZlevels = list()
|
||||
world << "\red \b Searching for away missions..."
|
||||
admin_notice("\red \b Searching for away missions...", R_DEBUG)
|
||||
var/list/Lines = file2list("maps/RandomZLevels/fileList.txt")
|
||||
if(!Lines.len) return
|
||||
for (var/t in Lines)
|
||||
@@ -35,7 +35,7 @@ proc/createRandomZlevel()
|
||||
|
||||
|
||||
if(potentialRandomZlevels.len)
|
||||
world << "\red \b Loading away mission..."
|
||||
admin_notice("\red \b Loading away mission...", R_DEBUG)
|
||||
|
||||
var/map = pick(potentialRandomZlevels)
|
||||
var/file = file(map)
|
||||
@@ -48,8 +48,8 @@ proc/createRandomZlevel()
|
||||
continue
|
||||
awaydestinations.Add(L)
|
||||
|
||||
world << "\red \b Away mission loaded."
|
||||
admin_notice("\red \b Away mission loaded.", R_DEBUG)
|
||||
|
||||
else
|
||||
world << "\red \b No away missions found."
|
||||
admin_notice("\red \b No away missions found.", R_DEBUG)
|
||||
return
|
||||
|
||||
@@ -162,7 +162,11 @@
|
||||
nanomanager.send_resources(src)
|
||||
|
||||
if(prefs.lastchangelog != changelog_hash) //bolds the changelog button on the interface so we know there are updates.
|
||||
winset(src, "rpane.changelog", "background-color=#eaeaea;font-style=bold")
|
||||
src << "<span class='info'>You have unread updates in the changelog.</span>"
|
||||
winset(src, "rpane.changelogb", "background-color=#eaeaea;font-style=bold")
|
||||
if(config.aggressive_changelog)
|
||||
src.changes()
|
||||
|
||||
|
||||
|
||||
//////////////
|
||||
@@ -259,8 +263,9 @@
|
||||
getFiles(
|
||||
'html/search.js',
|
||||
'html/panels.css',
|
||||
'html/painew.png',
|
||||
'html/loading.gif',
|
||||
'html/images/loading.gif',
|
||||
'html/images/ntlogo.png',
|
||||
'html/images/talisman.png',
|
||||
'icons/pda_icons/pda_atmos.png',
|
||||
'icons/pda_icons/pda_back.png',
|
||||
'icons/pda_icons/pda_bell.png',
|
||||
@@ -298,7 +303,5 @@
|
||||
'icons/spideros_icons/sos_11.png',
|
||||
'icons/spideros_icons/sos_12.png',
|
||||
'icons/spideros_icons/sos_13.png',
|
||||
'icons/spideros_icons/sos_14.png',
|
||||
'html/images/ntlogo.png',
|
||||
'html/images/talisman.png'
|
||||
'icons/spideros_icons/sos_14.png'
|
||||
)
|
||||
|
||||
@@ -46,6 +46,10 @@
|
||||
var/obj/item/ai_card // Reference to the MMI, posibrain, intellicard or pAI card previously holding the AI.
|
||||
var/obj/item/ai_verbs/verb_holder
|
||||
|
||||
/obj/item/rig_module/ai_container/process()
|
||||
if(integrated_ai && loc)
|
||||
integrated_ai.SetupStat(loc.get_rig())
|
||||
|
||||
/obj/item/rig_module/ai_container/proc/update_verb_holder()
|
||||
if(!verb_holder)
|
||||
verb_holder = new(src)
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
var/activate_string = "Activate"
|
||||
var/deactivate_string = "Deactivate"
|
||||
|
||||
var/list/stat_rig_module/stat_modules = new()
|
||||
|
||||
/obj/item/rig_module/examine()
|
||||
..()
|
||||
switch(damage)
|
||||
@@ -126,7 +128,11 @@
|
||||
|
||||
charges = processed_charges
|
||||
|
||||
..()
|
||||
stat_modules += new/stat_rig_module/activate(src)
|
||||
stat_modules += new/stat_rig_module/deactivate(src)
|
||||
stat_modules += new/stat_rig_module/engage(src)
|
||||
stat_modules += new/stat_rig_module/select(src)
|
||||
stat_modules += new/stat_rig_module/charge(src)
|
||||
|
||||
// Called when the module is installed into a suit.
|
||||
/obj/item/rig_module/proc/installed(var/obj/item/weapon/rig/new_holder)
|
||||
@@ -218,4 +224,111 @@
|
||||
// Called by holder rigsuit attackby()
|
||||
// Checks if an item is usable with this module and handles it if it is
|
||||
/obj/item/rig_module/proc/accepts_item(var/obj/item/input_device)
|
||||
return 0
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/Stat()
|
||||
..()
|
||||
|
||||
if(istype(back,/obj/item/weapon/rig))
|
||||
var/obj/item/weapon/rig/R = back
|
||||
SetupStat(R)
|
||||
|
||||
/mob/proc/SetupStat(var/obj/item/weapon/rig/R)
|
||||
if(R && !R.canremove && R.installed_modules.len && statpanel("Hardsuit Modules"))
|
||||
var/cell_status = R.cell ? "[R.cell.charge]/[R.cell.maxcharge]" : "ERROR"
|
||||
statpanel("Hardsuit Modules", "Suit charge", cell_status)
|
||||
for(var/obj/item/rig_module/module in R.installed_modules)
|
||||
{
|
||||
for(var/stat_rig_module/SRM in module.stat_modules)
|
||||
if(SRM.CanUse())
|
||||
statpanel("Hardsuit Modules",SRM.module.interface_name,SRM)
|
||||
}
|
||||
|
||||
/stat_rig_module
|
||||
parent_type = /atom/movable
|
||||
var/module_mode = ""
|
||||
var/obj/item/rig_module/module
|
||||
|
||||
/stat_rig_module/New(var/obj/item/rig_module/module)
|
||||
..()
|
||||
src.module = module
|
||||
|
||||
/stat_rig_module/proc/AddHref(var/list/href_list)
|
||||
return
|
||||
|
||||
/stat_rig_module/proc/CanUse()
|
||||
return 0
|
||||
|
||||
/stat_rig_module/Click()
|
||||
..()
|
||||
if(CanUse())
|
||||
var/list/href_list = list(
|
||||
"interact_module" = module.holder.installed_modules.Find(module),
|
||||
"module_mode" = module_mode
|
||||
)
|
||||
AddHref(href_list)
|
||||
module.holder.Topic(usr, href_list)
|
||||
|
||||
/stat_rig_module/activate/New(var/obj/item/rig_module/module)
|
||||
..()
|
||||
name = module.activate_string
|
||||
if(module.active_power_cost)
|
||||
name += " ([module.active_power_cost*10]A)"
|
||||
module_mode = "activate"
|
||||
|
||||
/stat_rig_module/activate/CanUse()
|
||||
return module.toggleable && !module.active
|
||||
|
||||
/stat_rig_module/deactivate/New(var/obj/item/rig_module/module)
|
||||
..()
|
||||
name = module.deactivate_string
|
||||
// Show cost despite being 0, if it means changing from an active cost.
|
||||
if(module.active_power_cost || module.passive_power_cost)
|
||||
name += " ([module.passive_power_cost*10]P)"
|
||||
|
||||
module_mode = "deactivate"
|
||||
|
||||
/stat_rig_module/deactivate/CanUse()
|
||||
return module.toggleable && module.active
|
||||
|
||||
/stat_rig_module/engage/New(var/obj/item/rig_module/module)
|
||||
..()
|
||||
name = module.engage_string
|
||||
if(module.use_power_cost)
|
||||
name += " ([module.use_power_cost*10]E)"
|
||||
module_mode = "engage"
|
||||
|
||||
/stat_rig_module/engage/CanUse()
|
||||
return module.usable
|
||||
|
||||
/stat_rig_module/select/New()
|
||||
..()
|
||||
name = "Select"
|
||||
module_mode = "select"
|
||||
|
||||
/stat_rig_module/select/CanUse()
|
||||
if(module.selectable)
|
||||
name = module.holder.selected_module == module ? "Selected" : "Select"
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/stat_rig_module/charge/New()
|
||||
..()
|
||||
name = "Change Charge"
|
||||
module_mode = "select_charge_type"
|
||||
|
||||
/stat_rig_module/charge/AddHref(var/list/href_list)
|
||||
var/charge_index = module.charges.Find(module.charge_selected)
|
||||
if(!charge_index)
|
||||
charge_index = 0
|
||||
else
|
||||
charge_index = charge_index == module.charges.len ? 1 : charge_index+1
|
||||
|
||||
href_list["charge_type"] = module.charges[charge_index]
|
||||
|
||||
/stat_rig_module/charge/CanUse()
|
||||
if(module.charges && module.charges.len)
|
||||
var/datum/rig_charge/charge = module.charges[module.charge_selected]
|
||||
name = "[charge.display_name] ([charge.charges]C) - Change"
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -776,6 +776,14 @@
|
||||
return 0
|
||||
wearer.Move(null,dir)*/
|
||||
|
||||
/atom/proc/get_rig()
|
||||
if(loc)
|
||||
return loc.get_rig()
|
||||
return null
|
||||
|
||||
/obj/item/weapon/rig/get_rig()
|
||||
return src
|
||||
|
||||
#undef ONLY_DEPLOY
|
||||
#undef ONLY_RETRACT
|
||||
#undef SEAL_DELAY
|
||||
|
||||
@@ -21,130 +21,130 @@
|
||||
|
||||
//Green syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/green
|
||||
name = "Green Space Helmet"
|
||||
name = "green space helmet"
|
||||
icon_state = "syndicate-helm-green"
|
||||
item_state = "syndicate-helm-green"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/green
|
||||
name = "Green Space Suit"
|
||||
name = "green space suit"
|
||||
icon_state = "syndicate-green"
|
||||
item_state = "syndicate-green"
|
||||
|
||||
|
||||
//Dark green syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/green/dark
|
||||
name = "Dark Green Space Helmet"
|
||||
name = "dark green space helmet"
|
||||
icon_state = "syndicate-helm-green-dark"
|
||||
item_state = "syndicate-helm-green-dark"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/green/dark
|
||||
name = "Dark Green Space Suit"
|
||||
name = "dark green space suit"
|
||||
icon_state = "syndicate-green-dark"
|
||||
item_state = "syndicate-green-dark"
|
||||
|
||||
|
||||
//Orange syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/orange
|
||||
name = "Orange Space Helmet"
|
||||
name = "orange space helmet"
|
||||
icon_state = "syndicate-helm-orange"
|
||||
item_state = "syndicate-helm-orange"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/orange
|
||||
name = "Orange Space Suit"
|
||||
name = "orange space suit"
|
||||
icon_state = "syndicate-orange"
|
||||
item_state = "syndicate-orange"
|
||||
|
||||
|
||||
//Blue syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/blue
|
||||
name = "Blue Space Helmet"
|
||||
name = "blue space helmet"
|
||||
icon_state = "syndicate-helm-blue"
|
||||
item_state = "syndicate-helm-blue"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/blue
|
||||
name = "Blue Space Suit"
|
||||
name = "blue space suit"
|
||||
icon_state = "syndicate-blue"
|
||||
item_state = "syndicate-blue"
|
||||
|
||||
|
||||
//Black syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/black
|
||||
name = "Black Space Helmet"
|
||||
name = "black space helmet"
|
||||
icon_state = "syndicate-helm-black"
|
||||
item_state = "syndicate-helm-black"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/black
|
||||
name = "Black Space Suit"
|
||||
name = "black space suit"
|
||||
icon_state = "syndicate-black"
|
||||
item_state = "syndicate-black"
|
||||
|
||||
|
||||
//Black-green syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/black/green
|
||||
name = "Black Space Helmet"
|
||||
name = "black and green space helmet"
|
||||
icon_state = "syndicate-helm-black-green"
|
||||
item_state = "syndicate-helm-black-green"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/black/green
|
||||
name = "Black and Green Space Suit"
|
||||
name = "black and green space suit"
|
||||
icon_state = "syndicate-black-green"
|
||||
item_state = "syndicate-black-green"
|
||||
|
||||
|
||||
//Black-blue syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/black/blue
|
||||
name = "Black Space Helmet"
|
||||
name = "black and blue space helmet"
|
||||
icon_state = "syndicate-helm-black-blue"
|
||||
item_state = "syndicate-helm-black-blue"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/black/blue
|
||||
name = "Black and Blue Space Suit"
|
||||
name = "black and blue space suit"
|
||||
icon_state = "syndicate-black-blue"
|
||||
item_state = "syndicate-black-blue"
|
||||
|
||||
|
||||
//Black medical syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/black/med
|
||||
name = "Black Space Helmet"
|
||||
name = "black medical space helmet"
|
||||
icon_state = "syndicate-helm-black-med"
|
||||
item_state = "syndicate-helm-black"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/black/med
|
||||
name = "Green Space Suit"
|
||||
name = "black medical space suit"
|
||||
icon_state = "syndicate-black-med"
|
||||
item_state = "syndicate-black"
|
||||
|
||||
|
||||
//Black-orange syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/black/orange
|
||||
name = "Black Space Helmet"
|
||||
name = "black and orange space helmet"
|
||||
icon_state = "syndicate-helm-black-orange"
|
||||
item_state = "syndicate-helm-black"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/black/orange
|
||||
name = "Black and Orange Space Suit"
|
||||
name = "black and orange space suit"
|
||||
icon_state = "syndicate-black-orange"
|
||||
item_state = "syndicate-black"
|
||||
|
||||
|
||||
//Black-red syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/black/red
|
||||
name = "Black Space Helmet"
|
||||
name = "black and red space helmet"
|
||||
icon_state = "syndicate-helm-black-red"
|
||||
item_state = "syndicate-helm-black-red"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/black/red
|
||||
name = "Black and Red Space Suit"
|
||||
name = "black and red space suit"
|
||||
icon_state = "syndicate-black-red"
|
||||
item_state = "syndicate-black-red"
|
||||
|
||||
//Black with yellow/red engineering syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/black/engie
|
||||
name = "Black Space Helmet"
|
||||
name = "black engineering space helmet"
|
||||
icon_state = "syndicate-helm-black-engie"
|
||||
item_state = "syndicate-helm-black"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/black/engie
|
||||
name = "Black Engineering Space Suit"
|
||||
name = "black engineering space suit"
|
||||
icon_state = "syndicate-black-engie"
|
||||
item_state = "syndicate-black"
|
||||
@@ -1131,6 +1131,8 @@
|
||||
icon_state = "parker_eliza_arms"
|
||||
item_state = "parker_eliza_arms"
|
||||
item_color = "parker_eliza_arms"
|
||||
body_parts_covered = 0 //technicially it's underneath everything
|
||||
canremove = 0
|
||||
|
||||
|
||||
////////////// Accessories /////
|
||||
|
||||
@@ -4,12 +4,12 @@ datum/event/viral_infection
|
||||
datum/event/viral_infection/setup()
|
||||
announceWhen = rand(0, 3000)
|
||||
endWhen = announceWhen + 1
|
||||
|
||||
|
||||
//generate 1-3 viruses. This way there's an upper limit on how many individual diseases need to be cured if many people are initially infected
|
||||
var/num_diseases = rand(1,3)
|
||||
for (var/i=0, i < num_diseases, i++)
|
||||
var/datum/disease2/disease/D = new /datum/disease2/disease
|
||||
|
||||
|
||||
var/strength = 1 //whether the disease is of the greater or lesser variety
|
||||
if (severity >= EVENT_LEVEL_MAJOR && prob(75))
|
||||
strength = 2
|
||||
@@ -24,7 +24,7 @@ datum/event/viral_infection/announce()
|
||||
level = pick("one", "two", "three", "four")
|
||||
else
|
||||
level = "five"
|
||||
|
||||
|
||||
if (severity == EVENT_LEVEL_MAJOR || prob(60))
|
||||
command_announcement.Announce("Confirmed outbreak of level [level] biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
|
||||
|
||||
@@ -33,8 +33,10 @@ datum/event/viral_infection/start()
|
||||
|
||||
var/list/candidates = list() //list of candidate keys
|
||||
for(var/mob/living/carbon/human/G in player_list)
|
||||
if(G.client && G.stat != DEAD)
|
||||
candidates += G
|
||||
if(G.stat != DEAD && G.is_client_active(5))
|
||||
var/turf/T = get_turf(G)
|
||||
if(T.z in config.station_levels)
|
||||
candidates += G
|
||||
if(!candidates.len) return
|
||||
candidates = shuffle(candidates)//Incorporating Donkie's list shuffle
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
seed_name = "berry"
|
||||
display_name = "berry bush"
|
||||
mutants = list("glowberries","poisonberries")
|
||||
chems = list("nutriment" = list(1,10), "berryjuice" = list(1,10))
|
||||
chems = list("nutriment" = list(1,10), "berryjuice" = list(10,10))
|
||||
kitchen_tag = "berries"
|
||||
|
||||
/datum/seed/berry/New()
|
||||
@@ -76,7 +76,7 @@
|
||||
seed_name = "poison berry"
|
||||
display_name = "poison berry bush"
|
||||
mutants = list("deathberries")
|
||||
chems = list("nutriment" = list(1), "toxin" = list(3,5), "poisonberryjuice" = list(3,5))
|
||||
chems = list("nutriment" = list(1), "toxin" = list(3,5), "poisonberryjuice" = list(10,5))
|
||||
|
||||
/datum/seed/berry/poison/New()
|
||||
..()
|
||||
@@ -138,7 +138,7 @@
|
||||
seed_name = "tomato"
|
||||
display_name = "tomato plant"
|
||||
mutants = list("bluetomato","bloodtomato")
|
||||
chems = list("nutriment" = list(1,10), "tomatojuice" = list(1,10))
|
||||
chems = list("nutriment" = list(1,10), "tomatojuice" = list(10,10))
|
||||
kitchen_tag = "tomato"
|
||||
|
||||
/datum/seed/tomato/New()
|
||||
@@ -196,7 +196,7 @@
|
||||
seed_name = "bluespace tomato"
|
||||
display_name = "bluespace tomato plant"
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1,20), "singulo" = list(1,5))
|
||||
chems = list("nutriment" = list(1,20), "singulo" = list(10,5))
|
||||
|
||||
/datum/seed/tomato/blue/teleport/New()
|
||||
..()
|
||||
@@ -544,7 +544,7 @@
|
||||
seed_name = "grape"
|
||||
display_name = "grapevines"
|
||||
mutants = list("greengrapes")
|
||||
chems = list("nutriment" = list(1,10), "sugar" = list(1,5), "grapejuice" = list(1,10))
|
||||
chems = list("nutriment" = list(1,10), "sugar" = list(1,5), "grapejuice" = list(10,10))
|
||||
|
||||
/datum/seed/grapes/New()
|
||||
..()
|
||||
@@ -563,7 +563,7 @@
|
||||
seed_name = "green grape"
|
||||
display_name = "green grapevines"
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1,10), "kelotane" = list(3,5), "grapejuice" = list(1,10))
|
||||
chems = list("nutriment" = list(1,10), "kelotane" = list(3,5), "grapejuice" = list(10,10))
|
||||
|
||||
/datum/seed/grapes/green/New()
|
||||
..()
|
||||
@@ -610,7 +610,7 @@
|
||||
name = "banana"
|
||||
seed_name = "banana"
|
||||
display_name = "banana tree"
|
||||
chems = list("banana" = list(1,10))
|
||||
chems = list("banana" = list(10,10))
|
||||
trash_type = /obj/item/weapon/bananapeel
|
||||
kitchen_tag = "banana"
|
||||
|
||||
@@ -648,7 +648,7 @@
|
||||
name = "potato"
|
||||
seed_name = "potato"
|
||||
display_name = "potatoes"
|
||||
chems = list("nutriment" = list(1,10), "potato" = list(1,10))
|
||||
chems = list("nutriment" = list(1,10), "potato" = list(10,10))
|
||||
kitchen_tag = "potato"
|
||||
|
||||
/datum/seed/potato/New()
|
||||
@@ -666,7 +666,7 @@
|
||||
name = "soybean"
|
||||
seed_name = "soybean"
|
||||
display_name = "soybeans"
|
||||
chems = list("nutriment" = list(1,20), "soymilk" = list(1,20))
|
||||
chems = list("nutriment" = list(1,20), "soymilk" = list(10,20))
|
||||
kitchen_tag = "soybeans"
|
||||
|
||||
/datum/seed/soybean/New()
|
||||
@@ -720,7 +720,7 @@
|
||||
name = "carrot"
|
||||
seed_name = "carrot"
|
||||
display_name = "carrots"
|
||||
chems = list("nutriment" = list(1,20), "imidazoline" = list(3,5), "carrotjuice" = list(1,20))
|
||||
chems = list("nutriment" = list(1,20), "imidazoline" = list(3,5), "carrotjuice" = list(10,20))
|
||||
kitchen_tag = "carrot"
|
||||
|
||||
/datum/seed/carrots/New()
|
||||
@@ -790,7 +790,7 @@
|
||||
name = "watermelon"
|
||||
seed_name = "watermelon"
|
||||
display_name = "watermelon vine"
|
||||
chems = list("nutriment" = list(1,6), "watermelonjuice" = list(1,6))
|
||||
chems = list("nutriment" = list(1,6), "watermelonjuice" = list(10,6))
|
||||
|
||||
/datum/seed/watermelon/New()
|
||||
..()
|
||||
@@ -828,7 +828,7 @@
|
||||
name = "lime"
|
||||
seed_name = "lime"
|
||||
display_name = "lime trees"
|
||||
chems = list("nutriment" = list(1,20), "limejuice" = list(1,20))
|
||||
chems = list("nutriment" = list(1,20), "limejuice" = list(10,20))
|
||||
kitchen_tag = "lime"
|
||||
|
||||
/datum/seed/citrus/New()
|
||||
@@ -847,7 +847,7 @@
|
||||
name = "lemon"
|
||||
seed_name = "lemon"
|
||||
display_name = "lemon trees"
|
||||
chems = list("nutriment" = list(1,20), "lemonjuice" = list(1,20))
|
||||
chems = list("nutriment" = list(1,20), "lemonjuice" = list(10,20))
|
||||
kitchen_tag = "lemon"
|
||||
|
||||
/datum/seed/citrus/lemon/New()
|
||||
@@ -860,7 +860,7 @@
|
||||
seed_name = "orange"
|
||||
display_name = "orange trees"
|
||||
kitchen_tag = "orange"
|
||||
chems = list("nutriment" = list(1,20), "orangejuice" = list(1,20))
|
||||
chems = list("nutriment" = list(1,20), "orangejuice" = list(10,20))
|
||||
|
||||
/datum/seed/citrus/orange/New()
|
||||
..()
|
||||
@@ -906,7 +906,7 @@
|
||||
seed_name = "cherry"
|
||||
seed_noun = "pits"
|
||||
display_name = "cherry tree"
|
||||
chems = list("nutriment" = list(1,15), "sugar" = list(1,15), "cherryjelly" = list(1,15))
|
||||
chems = list("nutriment" = list(1,15), "sugar" = list(1,15), "cherryjelly" = list(10,15))
|
||||
kitchen_tag = "cherries"
|
||||
|
||||
/datum/seed/cherries/New()
|
||||
|
||||
@@ -484,6 +484,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
|
||||
//This is called when a ghost is drag clicked to something.
|
||||
/mob/dead/observer/MouseDrop(atom/over)
|
||||
if(!usr || !over) return
|
||||
if (isobserver(usr) && usr.client && usr.client.holder && isliving(over))
|
||||
if (usr.client.holder.cmd_ghost_drag(src,over))
|
||||
return
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
|
||||
var/locked = 0
|
||||
var/mob/living/carbon/brain/brainmob = null//The current occupant.
|
||||
var/mob/living/silicon/robot = null//Appears unused.
|
||||
var/obj/mecha = null//This does not appear to be used outside of reference in mecha.dm.
|
||||
|
||||
attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
|
||||
@@ -119,14 +119,14 @@
|
||||
m_type = 1
|
||||
if ("flap")
|
||||
if (!src.restrained())
|
||||
message = "<B>[src]</B> flaps his wings."
|
||||
message = "<B>[src]</B> flaps \his wings."
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
|
||||
if ("aflap")
|
||||
if (!src.restrained())
|
||||
message = "<B>[src]</B> flaps his wings ANGRILY!"
|
||||
message = "<B>[src]</B> flaps \his wings ANGRILY!"
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
@@ -618,4 +618,4 @@
|
||||
HTML += "<hr />"
|
||||
HTML +="<a href='?src=\ref[src];flavor_change=done'>\[Done\]</a>"
|
||||
HTML += "<tt>"
|
||||
src << browse(HTML, "window=flavor_changes;size=430x300")
|
||||
src << browse(HTML, "window=flavor_changes;size=430x300")
|
||||
|
||||
@@ -319,7 +319,7 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t
|
||||
This function restores the subjects blood to max.
|
||||
*/
|
||||
/mob/living/carbon/human/proc/restore_blood()
|
||||
if(!species.flags & NO_BLOOD)
|
||||
if(!(species.flags & NO_BLOOD))
|
||||
var/blood_volume = vessel.get_reagent_amount("blood")
|
||||
vessel.add_reagent("blood",560.0-blood_volume)
|
||||
|
||||
|
||||
@@ -218,4 +218,41 @@
|
||||
log_say("PsychicWhisper: [key_name(src)]->[M.key] : [msg]")
|
||||
M << "\green You hear a strange, alien voice in your head... \italic [msg]"
|
||||
src << "\green You said: \"[msg]\" to [M]"
|
||||
return
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/diona_split_nymph()
|
||||
set name = "Split"
|
||||
set desc = "Split your humanoid form into its constituent nymphs."
|
||||
set category = "Abilities"
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
var/mob/living/carbon/alien/diona/S = new(T)
|
||||
S.set_dir(dir)
|
||||
if(mind)
|
||||
mind.transfer_to(S)
|
||||
|
||||
message_admins("\The [src] has split into nymphs; player now controls [key_name_admin(S)]")
|
||||
log_admin("\The [src] has split into nymphs; player now controls [key_name(S)]")
|
||||
|
||||
var/nymphs = 1
|
||||
|
||||
for(var/mob/living/carbon/alien/diona/D in src)
|
||||
nymphs++
|
||||
D.loc = T
|
||||
D.set_dir(pick(NORTH, SOUTH, EAST, WEST))
|
||||
|
||||
if(nymphs < 5)
|
||||
for(var/i in nymphs to 4)
|
||||
var/mob/M = new /mob/living/carbon/alien/diona(T)
|
||||
M.set_dir(pick(NORTH, SOUTH, EAST, WEST))
|
||||
|
||||
|
||||
for(var/obj/item/W in src)
|
||||
drop_from_inventory(W)
|
||||
|
||||
visible_message("<span class='warning'>\The [src] quivers slightly, then splits apart with a wet slithering noise.</span>")
|
||||
|
||||
del(src)
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
//NOTE: Breathing happens once per FOUR TICKS, unless the last breath fails. In which case it happens once per ONE TICK! So oxyloss healing is done once per 4 ticks while oxyloss damage is applied once per tick!
|
||||
#define HUMAN_MAX_OXYLOSS 1 //Defines how much oxyloss humans can get per tick. A tile with no air at all (such as space) applies this value, otherwise it's a percentage of it.
|
||||
#define HUMAN_CRIT_MAX_OXYLOSS ( (tickerProcess.getLastTickerTimeDuration()) / 6) //The amount of damage you'll get when in critical condition. We want this to be a 5 minute deal = 300s. There are 50HP to get through, so (1/6)*last_tick_duration per second. Breaths however only happen every 4 ticks.
|
||||
#define HUMAN_CRIT_MAX_OXYLOSS ( 2.0 / 6) //The amount of damage you'll get when in critical condition. We want this to be a 5 minute deal = 300s. There are 50HP to get through, so (1/6)*last_tick_duration per second. Breaths however only happen every 4 ticks. last_tick_duration = ~2.0 on average
|
||||
|
||||
#define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point
|
||||
#define HEAT_DAMAGE_LEVEL_2 4 //Amount of damage applied when your body temperature passes the 400K point
|
||||
|
||||
@@ -53,3 +53,8 @@
|
||||
/datum/species/vox/get_random_name(var/gender)
|
||||
var/datum/language/species_language = all_languages[default_language]
|
||||
return species_language.get_random_name(gender)
|
||||
|
||||
/datum/species/vox/can_shred(var/mob/living/carbon/human/H, var/ignore_intent)
|
||||
if(!H.mind || !H.mind.special_role) // Pariah check.
|
||||
return 0
|
||||
return ..()
|
||||
@@ -168,6 +168,10 @@
|
||||
"r_foot" = list("path" = /obj/item/organ/external/diona/foot/right)
|
||||
)
|
||||
|
||||
inherent_verbs = list(
|
||||
/mob/living/carbon/human/proc/diona_split_nymph
|
||||
)
|
||||
|
||||
warning_low_pressure = 50
|
||||
hazard_low_pressure = -1
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
if(istype(get_active_hand(),/obj/item/device/assembly/signaler))
|
||||
var/obj/item/device/assembly/signaler/signaler = get_active_hand()
|
||||
if(signaler.deadman && prob(80))
|
||||
log_and_message_admins("has triggered a signaler deadman's switch")
|
||||
src.visible_message("\red [src] triggers their deadman's switch!")
|
||||
signaler.signal()
|
||||
|
||||
|
||||
@@ -101,7 +101,6 @@
|
||||
|
||||
/mob/living/silicon/pai/Login()
|
||||
..()
|
||||
usr << browse_rsc('html/paigrid.png') // Go ahead and cache the interface resources as early as possible
|
||||
|
||||
|
||||
// this function shows the information about being silenced as a pAI in the Status panel
|
||||
|
||||
@@ -309,7 +309,7 @@
|
||||
if(lentext(msg) <= 40)
|
||||
return "\blue [msg]"
|
||||
else
|
||||
return "\blue [copytext(msg, 1, 37)]... <a href='byond://?src=\ref[src];flavor_more=1'>More...</a>"
|
||||
return "\blue [copytext_preserve_html(msg, 1, 37)]... <a href='byond://?src=\ref[src];flavor_more=1'>More...</a>"
|
||||
|
||||
/*
|
||||
/mob/verb/help()
|
||||
@@ -383,8 +383,6 @@
|
||||
set name = "Changelog"
|
||||
set category = "OOC"
|
||||
getFiles(
|
||||
'html/postcardsmall.jpg',
|
||||
'html/somerights20.png',
|
||||
'html/88x31.png',
|
||||
'html/bug-minus.png',
|
||||
'html/cross-circle.png',
|
||||
@@ -742,6 +740,8 @@ note dizziness decrements automatically in the mob's Life() proc.
|
||||
else
|
||||
statpanel(listed_turf.name, null, listed_turf)
|
||||
for(var/atom/A in listed_turf)
|
||||
if(!A.mouse_opacity)
|
||||
continue
|
||||
if(A.invisibility > see_invisible)
|
||||
continue
|
||||
if(is_type_in_list(A, shouldnt_see))
|
||||
|
||||
@@ -615,3 +615,7 @@ proc/is_blind(A)
|
||||
|
||||
eyeobj.setLoc(C)
|
||||
return 1
|
||||
|
||||
// Returns true if the mob has a client which has been active in the last given X minutes.
|
||||
/mob/proc/is_client_active(var/active = 1)
|
||||
return client && client.inactivity < active MINUTES
|
||||
|
||||
@@ -188,7 +188,7 @@
|
||||
if(S.victim == mob)
|
||||
return
|
||||
|
||||
if(mob.stat==2)
|
||||
if(mob.stat==DEAD && isliving(mob))
|
||||
mob.ghostize()
|
||||
return
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/var/global/datum/topic_state/contained_state/contained_state = new()
|
||||
|
||||
/datum/topic_state/contained_state/can_use_topic(var/atom/src_object, var/mob/user)
|
||||
if(!src_object.contains(src))
|
||||
if(!src_object.contains(user))
|
||||
return STATUS_CLOSE
|
||||
|
||||
return user.shared_nano_interaction()
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
/var/global/datum/topic_state/inventory_state/inventory_state = new()
|
||||
|
||||
/datum/topic_state/inventory_state/can_use_topic(var/src_object, var/mob/user)
|
||||
if(!(src_object in src))
|
||||
if(!(src_object in user))
|
||||
return STATUS_CLOSE
|
||||
|
||||
|
||||
return user.shared_nano_interaction()
|
||||
|
||||
@@ -54,5 +54,7 @@
|
||||
return
|
||||
if( href_list["clear"] )
|
||||
active_sensor = null
|
||||
if( href_list["refresh"] )
|
||||
refresh_sensors()
|
||||
else if( href_list["setsensor"] )
|
||||
active_sensor = href_list["setsensor"]
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
var/last_burn = 0
|
||||
var/list/last_movement = list(0,0)
|
||||
var/fore_dir = NORTH
|
||||
var/rotate = 1 //For proc rotate
|
||||
|
||||
var/obj/effect/map/current_sector
|
||||
var/obj/machinery/computer/helm/nav_control
|
||||
@@ -70,7 +71,7 @@
|
||||
/obj/effect/map/ship/proc/get_brake_path()
|
||||
if(!get_acceleration())
|
||||
return INFINITY
|
||||
return max(abs(speed[1]),abs(speed[2]))/get_acceleration()
|
||||
return get_speed()/get_acceleration()
|
||||
|
||||
#define SIGN(X) (X == 0 ? 0 : (X > 0 ? 1 : -1))
|
||||
/obj/effect/map/ship/proc/decelerate()
|
||||
@@ -94,13 +95,21 @@
|
||||
if(direction & SOUTH)
|
||||
adjust_speed(0, -get_acceleration())
|
||||
|
||||
|
||||
/obj/effect/map/ship/proc/rotate(var/direction)
|
||||
var/matrix/M = matrix()
|
||||
M.Turn(dir2angle(direction))
|
||||
src.transform = M //Rotate ship
|
||||
|
||||
/obj/effect/map/ship/process()
|
||||
if(!is_still())
|
||||
var/list/deltas = list(0,0)
|
||||
for(var/i=1, i<=2, i++)
|
||||
if(speed[i] && world.time > last_movement[i] + default_delay - speed[i])
|
||||
if(speed[i] && world.time > last_movement[i] + default_delay - abs(speed[i]))
|
||||
deltas[i] = speed[i] > 0 ? 1 : -1
|
||||
last_movement[i] = world.time
|
||||
var/turf/newloc = locate(x + deltas[1], y + deltas[2], z)
|
||||
if(newloc)
|
||||
Move(newloc)
|
||||
Move(newloc)
|
||||
if(rotate)
|
||||
rotate(get_heading())
|
||||
|
||||
@@ -210,6 +210,8 @@
|
||||
t = replacetext(t, "\[/i\]", "</I>")
|
||||
t = replacetext(t, "\[u\]", "<U>")
|
||||
t = replacetext(t, "\[/u\]", "</U>")
|
||||
t = replacetext(t, "\[time\]", "[worldtime2text()]")
|
||||
t = replacetext(t, "\[date\]", "[worlddate2text()]")
|
||||
t = replacetext(t, "\[large\]", "<font size=\"4\">")
|
||||
t = replacetext(t, "\[/large\]", "</font>")
|
||||
t = replacetext(t, "\[sign\]", "<font face=\"[signfont]\"><i>[get_signature(P, user)]</i></font>")
|
||||
|
||||
@@ -1195,10 +1195,12 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
|
||||
equipment = 0
|
||||
environ = 0
|
||||
update()
|
||||
update_icon()
|
||||
|
||||
spawn(600)
|
||||
update_channels()
|
||||
update()
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/machinery/power/apc/ex_act(severity)
|
||||
|
||||
@@ -62,13 +62,13 @@ Deep minerals:
|
||||
deep_count++
|
||||
// Sanity check.
|
||||
if(surface_count < MIN_SURFACE_COUNT)
|
||||
world << "<span class='danger'>Insufficient surface minerals. Rerolling...</span>"
|
||||
admin_notice("<span class='danger'>Insufficient surface minerals. Rerolling...</span>", R_DEBUG)
|
||||
return 0
|
||||
else if(rare_count < MIN_RARE_COUNT)
|
||||
world << "<span class='danger'>Insufficient rare minerals. Rerolling...</span>"
|
||||
admin_notice("<span class='danger'>Insufficient rare minerals. Rerolling...</span>", R_DEBUG)
|
||||
return 0
|
||||
else if(deep_count < MIN_DEEP_COUNT)
|
||||
world << "<span class='danger'>Insufficient deep minerals. Rerolling...</span>"
|
||||
admin_notice("<span class='danger'>Insufficient deep minerals. Rerolling...</span>", R_DEBUG)
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
@@ -112,7 +112,7 @@ Deep minerals:
|
||||
|
||||
// Infinite loop check!
|
||||
if(iteration>=iterate_before_fail)
|
||||
world << "<span class='danger'>Iteration count exceeded, aborting.</span>"
|
||||
admin_notice("<span class='danger'>Iteration count exceeded, aborting.</span>", R_DEBUG)
|
||||
return
|
||||
|
||||
var/isize = input_size
|
||||
|
||||
@@ -58,12 +58,12 @@ var/global/list/random_maps = list()
|
||||
if(seed) rand_seed(seed)
|
||||
|
||||
var/start_time = world.timeofday
|
||||
world << "<span class='danger'>Generating [descriptor].</span>"
|
||||
admin_notice("<span class='danger'>Generating [descriptor].</span>", R_DEBUG)
|
||||
for(var/i = 0;i<max_attempts;i++)
|
||||
if(generate())
|
||||
world << "<span class='danger'>[capitalize(descriptor)] generation completed in [round(0.1*(world.timeofday-start_time),0.1)] seconds.</span>"
|
||||
admin_notice("<span class='danger'>[capitalize(descriptor)] generation completed in [round(0.1*(world.timeofday-start_time),0.1)] seconds.</span>", R_DEBUG)
|
||||
return
|
||||
world << "<span class='danger'>[capitalize(descriptor)] generation failed in [round(0.1*(world.timeofday-start_time),0.1)] seconds: could not produce sane map.</span>"
|
||||
admin_notice("<span class='danger'>[capitalize(descriptor)] generation failed in [round(0.1*(world.timeofday-start_time),0.1)] seconds: could not produce sane map.</span>", R_DEBUG)
|
||||
|
||||
/datum/random_map/proc/within_bounds(var/val)
|
||||
return (val>0) && (val<=raw_map_size)
|
||||
@@ -169,5 +169,5 @@ var/global/list/random_maps = list()
|
||||
for(var/i = 0, i < max_secret_rooms, i++)
|
||||
if(make_mining_asteroid_secret())
|
||||
rooms_placed++
|
||||
world << "<span class='danger'>Placed [rooms_placed] secrets.</span>"
|
||||
admin_notice("<span class='danger'>Placed [rooms_placed] secrets.</span>", R_DEBUG)
|
||||
return 1
|
||||
@@ -173,8 +173,7 @@
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("cola", 15)
|
||||
reagents.add_reagent("orangejuice", 15)
|
||||
reagents.add_reagent("brownstar", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/space_up
|
||||
name = "Space-Up"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
icon_state = "Shield_Gen"
|
||||
anchored = 0
|
||||
density = 1
|
||||
req_access = list(access_teleporter)
|
||||
req_access = list(access_engine_equip)
|
||||
var/active = 0
|
||||
var/power = 0
|
||||
var/state = 0
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
var/damage_archived = 0
|
||||
var/safe_alert = "Crystaline hyperstructure returning to safe operating levels."
|
||||
var/safe_warned = 0
|
||||
var/public_alert = 0 //Stick to Engineering frequency except for big warnings when integrity bad
|
||||
var/warning_point = 100
|
||||
var/warning_alert = "Danger! Crystal hyperstructure instability!"
|
||||
var/emergency_point = 700
|
||||
@@ -88,7 +89,7 @@
|
||||
|
||||
/obj/machinery/power/supermatter/New()
|
||||
. = ..()
|
||||
radio = new (src)
|
||||
radio = new /obj/item/device/radio{channels=list("Engineering")}(src)
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter/Destroy()
|
||||
@@ -126,7 +127,7 @@
|
||||
integrity = round(100 - integrity * 100)
|
||||
integrity = integrity < 0 ? 0 : integrity
|
||||
var/alert_msg = " Integrity at [integrity]%"
|
||||
|
||||
|
||||
if(damage > emergency_point)
|
||||
alert_msg = emergency_alert + alert_msg
|
||||
lastwarning = world.timeofday - WARNING_DELAY * 4
|
||||
@@ -141,7 +142,15 @@
|
||||
else
|
||||
alert_msg = null
|
||||
if(alert_msg)
|
||||
radio.autosay(alert_msg, "Supermatter Monitor")
|
||||
radio.autosay(alert_msg, "Supermatter Monitor", "Engineering")
|
||||
//Public alerts
|
||||
if((damage > emergency_point) && !public_alert)
|
||||
radio.autosay("WARNING: SUPERMATTER CRYSTAL DELAMINATION IMMINENT!", "Supermatter Monitor")
|
||||
public_alert = 1
|
||||
else if(safe_warned && public_alert)
|
||||
radio.autosay(alert_msg, "Supermatter Monitor")
|
||||
public_alert = 0
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter/process()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user