mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
AntagHUD, Bayghost sprites, and other fixes from Bay.
This commit is contained in:
@@ -42,7 +42,8 @@
|
|||||||
var/Tickcomp = 0
|
var/Tickcomp = 0
|
||||||
var/socket_talk = 0 // use socket_talk to communicate with other processes
|
var/socket_talk = 0 // use socket_talk to communicate with other processes
|
||||||
var/list/resource_urls = null
|
var/list/resource_urls = null
|
||||||
|
var/antag_hud_allowed = 0 // Ghosts can turn on Antagovision to see a HUD of who is the bad guys this round.
|
||||||
|
var/antag_hud_restricted = 0 // Ghosts that turn on Antagovision cannot rejoin the round.
|
||||||
var/list/mode_names = list()
|
var/list/mode_names = list()
|
||||||
var/list/modes = list() // allowed modes
|
var/list/modes = list() // allowed modes
|
||||||
var/list/votable_modes = list() // votable modes
|
var/list/votable_modes = list() // votable modes
|
||||||
@@ -389,6 +390,11 @@
|
|||||||
if("ticklag")
|
if("ticklag")
|
||||||
Ticklag = text2num(value)
|
Ticklag = text2num(value)
|
||||||
|
|
||||||
|
if("allow_antag_hud")
|
||||||
|
config.antag_hud_allowed = 1
|
||||||
|
if("antag_hud_restricted")
|
||||||
|
config.antag_hud_restricted = 1
|
||||||
|
|
||||||
if("socket_talk")
|
if("socket_talk")
|
||||||
socket_talk = text2num(value)
|
socket_talk = text2num(value)
|
||||||
|
|
||||||
@@ -595,7 +601,7 @@
|
|||||||
var/list/datum/game_mode/runnable_modes = new
|
var/list/datum/game_mode/runnable_modes = new
|
||||||
for (var/T in (typesof(/datum/game_mode) - /datum/game_mode))
|
for (var/T in (typesof(/datum/game_mode) - /datum/game_mode))
|
||||||
var/datum/game_mode/M = new T()
|
var/datum/game_mode/M = new T()
|
||||||
world.log << "DEBUG: [T], tag=[M.config_tag], prob=[probabilities[M.config_tag]]"
|
//world << "DEBUG: [T], tag=[M.config_tag], prob=[probabilities[M.config_tag]]"
|
||||||
if (!(M.config_tag in modes))
|
if (!(M.config_tag in modes))
|
||||||
del(M)
|
del(M)
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -1,7 +1,43 @@
|
|||||||
//STRIKE TEAMS
|
//STRIKE TEAMS
|
||||||
|
//Thanks to Kilakk for the admin-button portion of this code.
|
||||||
|
|
||||||
var/list/response_team_members = list()
|
var/list/response_team_members = list()
|
||||||
var/send_emergency_team = 0
|
var/global/send_emergency_team = 0 // Used for automagic response teams
|
||||||
|
// 'admin_emergency_team' for admin-spawned response teams
|
||||||
|
var/ert_base_chance = 10 // Default base chance. Will be incremented by increment ERT chance.
|
||||||
|
var/can_call_ert
|
||||||
|
|
||||||
|
/client/proc/response_team()
|
||||||
|
set name = "Dispatch Emergency Response Team"
|
||||||
|
set category = "Special Verbs"
|
||||||
|
set desc = "Send an emergency response team to the station"
|
||||||
|
|
||||||
|
if(!holder)
|
||||||
|
usr << "\red Only administrators may use this command."
|
||||||
|
return
|
||||||
|
if(!ticker)
|
||||||
|
usr << "\red The game hasn't started yet!"
|
||||||
|
return
|
||||||
|
if(ticker.current_state == 1)
|
||||||
|
usr << "\red The round hasn't started yet!"
|
||||||
|
return
|
||||||
|
if(send_emergency_team)
|
||||||
|
usr << "\red Central Command has already dispatched an emergency response team!"
|
||||||
|
return
|
||||||
|
if(alert("Do you want to dispatch an Emergency Response Team?",,"Yes","No") != "Yes")
|
||||||
|
return
|
||||||
|
if(get_security_level() != "red") // Allow admins to reconsider if the alert level isn't Red
|
||||||
|
switch(alert("The station is not in red alert. Do you still want to dispatch a response team?",,"Yes","No"))
|
||||||
|
if("No")
|
||||||
|
return
|
||||||
|
if(send_emergency_team)
|
||||||
|
usr << "\red Looks like somebody beat you to it!"
|
||||||
|
return
|
||||||
|
|
||||||
|
message_admins("[key_name_admin(usr)] is dispatching an Emergency Response Team.", 1)
|
||||||
|
log_admin("[key_name(usr)] used Dispatch Response Team.")
|
||||||
|
trigger_armed_response_team(1)
|
||||||
|
|
||||||
|
|
||||||
client/verb/JoinResponseTeam()
|
client/verb/JoinResponseTeam()
|
||||||
set category = "IC"
|
set category = "IC"
|
||||||
@@ -16,15 +52,16 @@ client/verb/JoinResponseTeam()
|
|||||||
|
|
||||||
if(response_team_members.len > 5) usr << "The emergency response team is already full!"
|
if(response_team_members.len > 5) usr << "The emergency response team is already full!"
|
||||||
|
|
||||||
var/leader_selected = (response_team_members.len == 0)
|
|
||||||
|
|
||||||
|
|
||||||
for (var/obj/effect/landmark/L in world) if (L.name == "Commando")
|
|
||||||
|
|
||||||
|
for (var/obj/effect/landmark/L in landmarks_list) if (L.name == "Commando")
|
||||||
|
L.name = null//Reserving the place.
|
||||||
var/new_name = input(usr, "Pick a name","Name") as null|text
|
var/new_name = input(usr, "Pick a name","Name") as null|text
|
||||||
if(!new_name) return
|
if(!new_name)//Somebody changed his mind, place is available again.
|
||||||
var/mob/living/carbon/human/new_commando = create_response_team(L, leader_selected, new_name)
|
L.name = "Commando"
|
||||||
|
return
|
||||||
|
var/leader_selected = isemptylist(response_team_members)
|
||||||
|
var/mob/living/carbon/human/new_commando = create_response_team(L.loc, leader_selected, new_name)
|
||||||
|
del(L)
|
||||||
new_commando.mind.key = usr.key
|
new_commando.mind.key = usr.key
|
||||||
new_commando.key = usr.key
|
new_commando.key = usr.key
|
||||||
|
|
||||||
@@ -34,7 +71,7 @@ client/verb/JoinResponseTeam()
|
|||||||
new_commando << "<b>As member of the Emergency Response Team, you answer only to your leader and CentComm officials.</b>"
|
new_commando << "<b>As member of the Emergency Response Team, you answer only to your leader and CentComm officials.</b>"
|
||||||
else
|
else
|
||||||
new_commando << "<b>As leader of the Emergency Response Team, you answer only to CentComm, and have authority to override the Captain where it is necessary to achieve your mission goals. It is recommended that you attempt to cooperate with the captain where possible, however."
|
new_commando << "<b>As leader of the Emergency Response Team, you answer only to CentComm, and have authority to override the Captain where it is necessary to achieve your mission goals. It is recommended that you attempt to cooperate with the captain where possible, however."
|
||||||
del(L)
|
return
|
||||||
|
|
||||||
else
|
else
|
||||||
usr << "You need to be an observer or new player to use this."
|
usr << "You need to be an observer or new player to use this."
|
||||||
@@ -43,9 +80,10 @@ client/verb/JoinResponseTeam()
|
|||||||
proc/percentage_dead()
|
proc/percentage_dead()
|
||||||
var/total = 0
|
var/total = 0
|
||||||
var/deadcount = 0
|
var/deadcount = 0
|
||||||
for(var/mob/living/carbon/human/H in world) if(H.mind) // I *think* monkeys gone human don't have a mind
|
for(var/mob/living/carbon/human/H in mob_list)
|
||||||
if(H.stat == 2) deadcount++
|
if(H.client) // Monkeys and mice don't have a client, amirite?
|
||||||
total++
|
if(H.stat == 2) deadcount++
|
||||||
|
total++
|
||||||
|
|
||||||
if(total == 0) return 0
|
if(total == 0) return 0
|
||||||
else return round(100 * deadcount / total)
|
else return round(100 * deadcount / total)
|
||||||
@@ -54,7 +92,7 @@ proc/percentage_dead()
|
|||||||
proc/percentage_antagonists()
|
proc/percentage_antagonists()
|
||||||
var/total = 0
|
var/total = 0
|
||||||
var/antagonists = 0
|
var/antagonists = 0
|
||||||
for(var/mob/living/carbon/human/H in world)
|
for(var/mob/living/carbon/human/H in mob_list)
|
||||||
if(is_special_character(H) >= 1)
|
if(is_special_character(H) >= 1)
|
||||||
antagonists++
|
antagonists++
|
||||||
total++
|
total++
|
||||||
@@ -62,12 +100,28 @@ proc/percentage_antagonists()
|
|||||||
if(total == 0) return 0
|
if(total == 0) return 0
|
||||||
else return round(100 * antagonists / total)
|
else return round(100 * antagonists / total)
|
||||||
|
|
||||||
|
// Increments the ERT chance automatically, so that the later it is in the round,
|
||||||
|
// the more likely an ERT is to be able to be called.
|
||||||
|
proc/increment_ert_chance()
|
||||||
|
while(send_emergency_team == 0) // There is no ERT at the time.
|
||||||
|
if(get_security_level() == "green")
|
||||||
|
ert_base_chance += 1
|
||||||
|
if(get_security_level() == "blue")
|
||||||
|
ert_base_chance += 2
|
||||||
|
if(get_security_level() == "red")
|
||||||
|
ert_base_chance += 3
|
||||||
|
if(get_security_level() == "delta")
|
||||||
|
ert_base_chance += 10 // Need those big guns
|
||||||
|
sleep(600 * 3) // Minute * Number of Minutes
|
||||||
|
|
||||||
|
|
||||||
proc/trigger_armed_response_team(var/force = 0)
|
proc/trigger_armed_response_team(var/force = 0)
|
||||||
|
if(!can_call_ert && !force)
|
||||||
|
return
|
||||||
if(send_emergency_team)
|
if(send_emergency_team)
|
||||||
return
|
return
|
||||||
|
|
||||||
var/send_team_chance = 20 // base chance that a team will be sent
|
var/send_team_chance = ert_base_chance // Is incremented by increment_ert_chance.
|
||||||
send_team_chance += 2*percentage_dead() // the more people are dead, the higher the chance
|
send_team_chance += 2*percentage_dead() // the more people are dead, the higher the chance
|
||||||
send_team_chance += percentage_antagonists() // the more antagonists, the higher the chance
|
send_team_chance += percentage_antagonists() // the more antagonists, the higher the chance
|
||||||
send_team_chance = min(send_team_chance, 100)
|
send_team_chance = min(send_team_chance, 100)
|
||||||
@@ -75,12 +129,19 @@ proc/trigger_armed_response_team(var/force = 0)
|
|||||||
if(force) send_team_chance = 100
|
if(force) send_team_chance = 100
|
||||||
|
|
||||||
// there's only a certain chance a team will be sent
|
// there's only a certain chance a team will be sent
|
||||||
if(!prob(send_team_chance)) return
|
if(!prob(send_team_chance))
|
||||||
|
command_alert("It would appear that an emergency response team was requested for [station_name()]. Unfortunately, we were unable to send one at this time.", "Central Command")
|
||||||
|
can_call_ert = 0 // Only one call per round, ladies.
|
||||||
|
return
|
||||||
|
|
||||||
command_alert("According to our sensors, [station_name()] has entered code red. We will prepare and dispatch an emergency response team to deal with the situation.", "Command Report")
|
command_alert("It would appear that an emergency response team was requested for [station_name()]. We will prepare and send one as soon as possible.", "Central Command")
|
||||||
|
|
||||||
|
can_call_ert = 0 // Only one call per round, gentleman.
|
||||||
send_emergency_team = 1
|
send_emergency_team = 1
|
||||||
|
|
||||||
|
sleep(600 * 5)
|
||||||
|
send_emergency_team = 0 // Can no longer join the ERT.
|
||||||
|
|
||||||
var/area/security/nuke_storage/nukeloc = locate()//To find the nuke in the vault
|
var/area/security/nuke_storage/nukeloc = locate()//To find the nuke in the vault
|
||||||
var/obj/machinery/nuclearbomb/nuke = locate() in nukeloc
|
var/obj/machinery/nuclearbomb/nuke = locate() in nukeloc
|
||||||
if(!nuke)
|
if(!nuke)
|
||||||
@@ -208,9 +269,8 @@ proc/trigger_armed_response_team(var/force = 0)
|
|||||||
M.mind.special_role = "Response Team"
|
M.mind.special_role = "Response Team"
|
||||||
if(!(M.mind in ticker.minds))
|
if(!(M.mind in ticker.minds))
|
||||||
ticker.minds += M.mind//Adds them to regular mind list.
|
ticker.minds += M.mind//Adds them to regular mind list.
|
||||||
M.loc = spawn_location.loc
|
M.loc = spawn_location
|
||||||
M.equip_strike_team(leader_selected)
|
M.equip_strike_team(leader_selected)
|
||||||
del(spawn_location)
|
|
||||||
return M
|
return M
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/equip_strike_team(leader_selected = 0)
|
/mob/living/carbon/human/proc/equip_strike_team(leader_selected = 0)
|
||||||
@@ -247,25 +307,18 @@ proc/trigger_armed_response_team(var/force = 0)
|
|||||||
equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack)
|
equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack)
|
||||||
|
|
||||||
var/obj/item/weapon/card/id/W = new(src)
|
var/obj/item/weapon/card/id/W = new(src)
|
||||||
W.name = "[real_name]'s ID Card (Emergency Response Team)"
|
W.assignment = "Emergency Response Team[leader_selected ? " Leader" : ""]"
|
||||||
W.icon_state = "centcom"
|
|
||||||
if(leader_selected)
|
|
||||||
W.name = "[real_name]'s ID Card (Emergency Response Team Leader)"
|
|
||||||
W.access = get_all_accesses()
|
|
||||||
W.access += get_all_centcom_access()
|
|
||||||
W.assignment = "Emergency Response Team Leader"
|
|
||||||
else
|
|
||||||
W.access = get_all_accesses()
|
|
||||||
W.access += get_all_centcom_access()
|
|
||||||
W.assignment = "Emergency Response Team"
|
|
||||||
W.access += list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage)//Let's add their alloted CentCom access.
|
|
||||||
W.registered_name = real_name
|
W.registered_name = real_name
|
||||||
|
W.name = "[real_name]'s ID Card ([W.assignment])"
|
||||||
|
W.icon_state = "centcom"
|
||||||
|
W.access = get_all_accesses()
|
||||||
|
W.access += get_all_centcom_access()
|
||||||
equip_to_slot_or_del(W, slot_wear_id)
|
equip_to_slot_or_del(W, slot_wear_id)
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/*//debug verb
|
//debug verb (That is horribly coded, LEAVE THIS OFF UNLESS PRIVATELY TESTING. Seriously.
|
||||||
client/verb/ResponseTeam()
|
/*client/verb/ResponseTeam()
|
||||||
set category = "Admin"
|
set category = "Admin"
|
||||||
if(!send_emergency_team)
|
if(!send_emergency_team)
|
||||||
send_emergency_team = 1*/
|
send_emergency_team = 1*/
|
||||||
@@ -67,7 +67,12 @@ var/list/admin_verbs_admin = list(
|
|||||||
/client/proc/toggledebuglogs,
|
/client/proc/toggledebuglogs,
|
||||||
/datum/admins/proc/show_skills,
|
/datum/admins/proc/show_skills,
|
||||||
/client/proc/check_customitem_activity,
|
/client/proc/check_customitem_activity,
|
||||||
///client/proc/response_team
|
// /client/proc/man_up,
|
||||||
|
// /client/proc/global_man_up,
|
||||||
|
/client/proc/response_team, // Response Teams admin verb
|
||||||
|
/client/proc/toggle_antagHUD_use,
|
||||||
|
/client/proc/toggle_antagHUD_restrictions,
|
||||||
|
/client/proc/allow_character_respawn /* Allows a ghost to respawn */
|
||||||
)
|
)
|
||||||
var/list/admin_verbs_ban = list(
|
var/list/admin_verbs_ban = list(
|
||||||
/client/proc/unban_panel,
|
/client/proc/unban_panel,
|
||||||
@@ -756,4 +761,28 @@ var/list/admin_verbs_mod = list(
|
|||||||
if (prefs.toggles & CHAT_DEBUGLOGS)
|
if (prefs.toggles & CHAT_DEBUGLOGS)
|
||||||
usr << "You now will get debug log messages"
|
usr << "You now will get debug log messages"
|
||||||
else
|
else
|
||||||
usr << "You now won't get debug log messages"
|
usr << "You now won't get debug log messages"
|
||||||
|
|
||||||
|
|
||||||
|
/client/proc/man_up(mob/T as mob in mob_list)
|
||||||
|
set category = "Fun"
|
||||||
|
set name = "Man Up"
|
||||||
|
set desc = "Tells mob to man up and deal with it."
|
||||||
|
|
||||||
|
T << "<span class='notice'><b><font size=3>Man up and deal with it.</font></b></span>"
|
||||||
|
T << "<span class='notice'>Move on.</span>"
|
||||||
|
|
||||||
|
log_admin("[key_name(usr)] told [key_name(T)] to man up and deal with it.")
|
||||||
|
message_admins("\blue [key_name_admin(usr)] told [key_name(T)] to man up and deal with it.", 1)
|
||||||
|
|
||||||
|
/client/proc/global_man_up()
|
||||||
|
set category = "Fun"
|
||||||
|
set name = "Man Up Global"
|
||||||
|
set desc = "Tells everyone to man up and deal with it."
|
||||||
|
|
||||||
|
for (var/mob/T as mob in mob_list)
|
||||||
|
T << "<br><center><span class='notice'><b><font size=4>Man up.<br> Deal with it.</font></b><br>Move on.</span></center><br>"
|
||||||
|
T << 'sound/voice/ManUp1.ogg'
|
||||||
|
|
||||||
|
log_admin("[key_name(usr)] told everyone to man up and deal with it.")
|
||||||
|
message_admins("\blue [key_name_admin(usr)] told everyone to man up and deal with it.", 1)
|
||||||
|
|||||||
@@ -445,12 +445,8 @@
|
|||||||
var/counter = 0
|
var/counter = 0
|
||||||
//Regular jobs
|
//Regular jobs
|
||||||
//Command (Blue)
|
//Command (Blue)
|
||||||
|
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
||||||
// AUTOFIXED BY fix_string_idiocy.py
|
jobs += "<tr align='center' bgcolor='ccccff'><th colspan='[length(command_positions)]'><a href='?src=\ref[src];jobban3=commanddept;jobban4=\ref[M]'>Command Positions</a></th></tr><tr align='center'>"
|
||||||
// C:\Users\Rob\Documents\Projects\vgstation13\code\modules\admin\topic.dm:448: jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
|
||||||
jobs += {"<table cellpadding='1' cellspacing='0' width='100%'>
|
|
||||||
<tr align='center' bgcolor='ccccff'><th colspan='[length(command_positions)]'><a href='?src=\ref[src];jobban3=commanddept;jobban4=\ref[M]'>Command Positions</a></th></tr><tr align='center'>"}
|
|
||||||
// END AUTOFIX
|
|
||||||
for(var/jobPos in command_positions)
|
for(var/jobPos in command_positions)
|
||||||
if(!jobPos) continue
|
if(!jobPos) continue
|
||||||
var/datum/job/job = job_master.GetJob(jobPos)
|
var/datum/job/job = job_master.GetJob(jobPos)
|
||||||
@@ -470,12 +466,8 @@
|
|||||||
|
|
||||||
//Security (Red)
|
//Security (Red)
|
||||||
counter = 0
|
counter = 0
|
||||||
|
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
||||||
// AUTOFIXED BY fix_string_idiocy.py
|
jobs += "<tr bgcolor='ffddf0'><th colspan='[length(security_positions)]'><a href='?src=\ref[src];jobban3=securitydept;jobban4=\ref[M]'>Security Positions</a></th></tr><tr align='center'>"
|
||||||
// C:\Users\Rob\Documents\Projects\vgstation13\code\modules\admin\topic.dm:469: jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
|
||||||
jobs += {"<table cellpadding='1' cellspacing='0' width='100%'>
|
|
||||||
<tr bgcolor='ffddf0'><th colspan='[length(security_positions)]'><a href='?src=\ref[src];jobban3=securitydept;jobban4=\ref[M]'>Security Positions</a></th></tr><tr align='center'>"}
|
|
||||||
// END AUTOFIX
|
|
||||||
for(var/jobPos in security_positions)
|
for(var/jobPos in security_positions)
|
||||||
if(!jobPos) continue
|
if(!jobPos) continue
|
||||||
var/datum/job/job = job_master.GetJob(jobPos)
|
var/datum/job/job = job_master.GetJob(jobPos)
|
||||||
@@ -495,12 +487,8 @@
|
|||||||
|
|
||||||
//Engineering (Yellow)
|
//Engineering (Yellow)
|
||||||
counter = 0
|
counter = 0
|
||||||
|
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
||||||
// AUTOFIXED BY fix_string_idiocy.py
|
jobs += "<tr bgcolor='fff5cc'><th colspan='[length(engineering_positions)]'><a href='?src=\ref[src];jobban3=engineeringdept;jobban4=\ref[M]'>Engineering Positions</a></th></tr><tr align='center'>"
|
||||||
// C:\Users\Rob\Documents\Projects\vgstation13\code\modules\admin\topic.dm:490: jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
|
||||||
jobs += {"<table cellpadding='1' cellspacing='0' width='100%'>
|
|
||||||
<tr bgcolor='fff5cc'><th colspan='[length(engineering_positions)]'><a href='?src=\ref[src];jobban3=engineeringdept;jobban4=\ref[M]'>Engineering Positions</a></th></tr><tr align='center'>"}
|
|
||||||
// END AUTOFIX
|
|
||||||
for(var/jobPos in engineering_positions)
|
for(var/jobPos in engineering_positions)
|
||||||
if(!jobPos) continue
|
if(!jobPos) continue
|
||||||
var/datum/job/job = job_master.GetJob(jobPos)
|
var/datum/job/job = job_master.GetJob(jobPos)
|
||||||
@@ -520,12 +508,8 @@
|
|||||||
|
|
||||||
//Medical (White)
|
//Medical (White)
|
||||||
counter = 0
|
counter = 0
|
||||||
|
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
||||||
// AUTOFIXED BY fix_string_idiocy.py
|
jobs += "<tr bgcolor='ffeef0'><th colspan='[length(medical_positions)]'><a href='?src=\ref[src];jobban3=medicaldept;jobban4=\ref[M]'>Medical Positions</a></th></tr><tr align='center'>"
|
||||||
// C:\Users\Rob\Documents\Projects\vgstation13\code\modules\admin\topic.dm:511: jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
|
||||||
jobs += {"<table cellpadding='1' cellspacing='0' width='100%'>
|
|
||||||
<tr bgcolor='ffeef0'><th colspan='[length(medical_positions)]'><a href='?src=\ref[src];jobban3=medicaldept;jobban4=\ref[M]'>Medical Positions</a></th></tr><tr align='center'>"}
|
|
||||||
// END AUTOFIX
|
|
||||||
for(var/jobPos in medical_positions)
|
for(var/jobPos in medical_positions)
|
||||||
if(!jobPos) continue
|
if(!jobPos) continue
|
||||||
var/datum/job/job = job_master.GetJob(jobPos)
|
var/datum/job/job = job_master.GetJob(jobPos)
|
||||||
@@ -545,12 +529,8 @@
|
|||||||
|
|
||||||
//Science (Purple)
|
//Science (Purple)
|
||||||
counter = 0
|
counter = 0
|
||||||
|
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
||||||
// AUTOFIXED BY fix_string_idiocy.py
|
jobs += "<tr bgcolor='e79fff'><th colspan='[length(science_positions)]'><a href='?src=\ref[src];jobban3=sciencedept;jobban4=\ref[M]'>Science Positions</a></th></tr><tr align='center'>"
|
||||||
// C:\Users\Rob\Documents\Projects\vgstation13\code\modules\admin\topic.dm:532: jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
|
||||||
jobs += {"<table cellpadding='1' cellspacing='0' width='100%'>
|
|
||||||
<tr bgcolor='e79fff'><th colspan='[length(science_positions)]'><a href='?src=\ref[src];jobban3=sciencedept;jobban4=\ref[M]'>Science Positions</a></th></tr><tr align='center'>"}
|
|
||||||
// END AUTOFIX
|
|
||||||
for(var/jobPos in science_positions)
|
for(var/jobPos in science_positions)
|
||||||
if(!jobPos) continue
|
if(!jobPos) continue
|
||||||
var/datum/job/job = job_master.GetJob(jobPos)
|
var/datum/job/job = job_master.GetJob(jobPos)
|
||||||
@@ -570,12 +550,8 @@
|
|||||||
|
|
||||||
//Civilian (Grey)
|
//Civilian (Grey)
|
||||||
counter = 0
|
counter = 0
|
||||||
|
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
||||||
// AUTOFIXED BY fix_string_idiocy.py
|
jobs += "<tr bgcolor='dddddd'><th colspan='[length(civilian_positions)]'><a href='?src=\ref[src];jobban3=civiliandept;jobban4=\ref[M]'>Civilian Positions</a></th></tr><tr align='center'>"
|
||||||
// C:\Users\Rob\Documents\Projects\vgstation13\code\modules\admin\topic.dm:553: jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
|
||||||
jobs += {"<table cellpadding='1' cellspacing='0' width='100%'>
|
|
||||||
<tr bgcolor='dddddd'><th colspan='[length(civilian_positions)]'><a href='?src=\ref[src];jobban3=civiliandept;jobban4=\ref[M]'>Civilian Positions</a></th></tr><tr align='center'>"}
|
|
||||||
// END AUTOFIX
|
|
||||||
for(var/jobPos in civilian_positions)
|
for(var/jobPos in civilian_positions)
|
||||||
if(!jobPos) continue
|
if(!jobPos) continue
|
||||||
var/datum/job/job = job_master.GetJob(jobPos)
|
var/datum/job/job = job_master.GetJob(jobPos)
|
||||||
@@ -591,16 +567,18 @@
|
|||||||
if(counter >= 5) //So things dont get squiiiiished!
|
if(counter >= 5) //So things dont get squiiiiished!
|
||||||
jobs += "</tr><tr align='center'>"
|
jobs += "</tr><tr align='center'>"
|
||||||
counter = 0
|
counter = 0
|
||||||
|
|
||||||
|
if(jobban_isbanned(M, "Internal Affairs Agent"))
|
||||||
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Internal Affairs Agent;jobban4=\ref[M]'><font color=red>Internal Affairs Agent</font></a></td>"
|
||||||
|
else
|
||||||
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Internal Affairs Agent;jobban4=\ref[M]'>Internal Affairs Agent</a></td>"
|
||||||
|
|
||||||
jobs += "</tr></table>"
|
jobs += "</tr></table>"
|
||||||
|
|
||||||
//Non-Human (Green)
|
//Non-Human (Green)
|
||||||
counter = 0
|
counter = 0
|
||||||
|
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
||||||
// AUTOFIXED BY fix_string_idiocy.py
|
jobs += "<tr bgcolor='ccffcc'><th colspan='[length(nonhuman_positions)+1]'><a href='?src=\ref[src];jobban3=nonhumandept;jobban4=\ref[M]'>Non-human Positions</a></th></tr><tr align='center'>"
|
||||||
// C:\Users\Rob\Documents\Projects\vgstation13\code\modules\admin\topic.dm:574: jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
|
||||||
jobs += {"<table cellpadding='1' cellspacing='0' width='100%'>
|
|
||||||
<tr bgcolor='ccffcc'><th colspan='[length(nonhuman_positions)]'><a href='?src=\ref[src];jobban3=nonhumandept;jobban4=\ref[M]'>Non-human Positions</a></th></tr><tr align='center'>"}
|
|
||||||
// END AUTOFIX
|
|
||||||
for(var/jobPos in nonhuman_positions)
|
for(var/jobPos in nonhuman_positions)
|
||||||
if(!jobPos) continue
|
if(!jobPos) continue
|
||||||
var/datum/job/job = job_master.GetJob(jobPos)
|
var/datum/job/job = job_master.GetJob(jobPos)
|
||||||
@@ -618,21 +596,22 @@
|
|||||||
counter = 0
|
counter = 0
|
||||||
|
|
||||||
//pAI isn't technically a job, but it goes in here.
|
//pAI isn't technically a job, but it goes in here.
|
||||||
|
|
||||||
if(jobban_isbanned(M, "pAI"))
|
if(jobban_isbanned(M, "pAI"))
|
||||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=pAI;jobban4=\ref[M]'><font color=red>pAI</font></a></td>"
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=pAI;jobban4=\ref[M]'><font color=red>pAI</font></a></td>"
|
||||||
else
|
else
|
||||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=pAI;jobban4=\ref[M]'>pAI</a></td>"
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=pAI;jobban4=\ref[M]'>pAI</a></td>"
|
||||||
|
if(jobban_isbanned(M, "AntagHUD"))
|
||||||
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=AntagHUD;jobban4=\ref[M]'><font color=red>AntagHUD</font></a></td>"
|
||||||
|
else
|
||||||
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=AntagHUD;jobban4=\ref[M]'>AntagHUD</a></td>"
|
||||||
jobs += "</tr></table>"
|
jobs += "</tr></table>"
|
||||||
|
|
||||||
//Antagonist (Orange)
|
//Antagonist (Orange)
|
||||||
var/isbanned_dept = jobban_isbanned(M, "Syndicate")
|
var/isbanned_dept = jobban_isbanned(M, "Syndicate")
|
||||||
|
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
||||||
|
jobs += "<tr bgcolor='ffeeaa'><th colspan='10'><a href='?src=\ref[src];jobban3=Syndicate;jobban4=\ref[M]'>Antagonist Positions</a></th></tr><tr align='center'>"
|
||||||
|
|
||||||
// AUTOFIXED BY fix_string_idiocy.py
|
|
||||||
// C:\Users\Rob\Documents\Projects\vgstation13\code\modules\admin\topic.dm:602: jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
|
||||||
jobs += {"<table cellpadding='1' cellspacing='0' width='100%'>
|
|
||||||
<tr bgcolor='ffeeaa'><th colspan='10'><a href='?src=\ref[src];jobban3=Syndicate;jobban4=\ref[M]'>Antagonist Positions</a></th></tr><tr align='center'>"}
|
|
||||||
// END AUTOFIX
|
|
||||||
//Traitor
|
//Traitor
|
||||||
if(jobban_isbanned(M, "traitor") || isbanned_dept)
|
if(jobban_isbanned(M, "traitor") || isbanned_dept)
|
||||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=traitor;jobban4=\ref[M]'><font color=red>[replacetext("Traitor", " ", " ")]</font></a></td>"
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=traitor;jobban4=\ref[M]'><font color=red>[replacetext("Traitor", " ", " ")]</font></a></td>"
|
||||||
@@ -671,6 +650,13 @@
|
|||||||
else
|
else
|
||||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=wizard;jobban4=\ref[M]'>[replacetext("Wizard", " ", " ")]</a></td>"
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=wizard;jobban4=\ref[M]'>[replacetext("Wizard", " ", " ")]</a></td>"
|
||||||
|
|
||||||
|
//ERT
|
||||||
|
if(jobban_isbanned(M, "Emergency Response Team") || isbanned_dept)
|
||||||
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Emergency Response Team;jobban4=\ref[M]'><font color=red>Emergency Response Team</font></a></td>"
|
||||||
|
else
|
||||||
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Emergency Response Team;jobban4=\ref[M]'>Emergency Response Team</a></td>"
|
||||||
|
|
||||||
|
|
||||||
//Vox Raider
|
//Vox Raider
|
||||||
if(jobban_isbanned(M, "Vox Raider") || isbanned_dept)
|
if(jobban_isbanned(M, "Vox Raider") || isbanned_dept)
|
||||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Vox Raider;jobban4=\ref[M]'><font color=red>Vox Raider</font></a></td>"
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Vox Raider;jobban4=\ref[M]'><font color=red>Vox Raider</font></a></td>"
|
||||||
@@ -695,11 +681,24 @@
|
|||||||
else
|
else
|
||||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=infested monkey;jobban4=\ref[M]'>[replacetext("Infested Monkey", " ", " ")]</a></td>"
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=infested monkey;jobban4=\ref[M]'>[replacetext("Infested Monkey", " ", " ")]</a></td>"
|
||||||
*/
|
*/
|
||||||
|
|
||||||
jobs += "</tr></table>"
|
jobs += "</tr></table>"
|
||||||
|
|
||||||
|
//Other races (BLUE, because I have no idea what other color to make this)
|
||||||
|
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
||||||
|
jobs += "<tr bgcolor='ccccff'><th colspan='1'>Other Races</th></tr><tr align='center'>"
|
||||||
|
|
||||||
|
if(jobban_isbanned(M, "Dionaea"))
|
||||||
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Dionaea;jobban4=\ref[M]'><font color=red>Dionaea</font></a></td>"
|
||||||
|
else
|
||||||
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Dionaea;jobban4=\ref[M]'>Dionaea</a></td>"
|
||||||
|
|
||||||
|
jobs += "</tr></table>"
|
||||||
|
|
||||||
|
|
||||||
body = "<body>[jobs]</body>"
|
body = "<body>[jobs]</body>"
|
||||||
dat = "<tt>[header][body]</tt>"
|
dat = "<tt>[header][body]</tt>"
|
||||||
usr << browse(dat, "window=jobban2;size=800x450")
|
usr << browse(dat, "window=jobban2;size=800x490")
|
||||||
return
|
return
|
||||||
|
|
||||||
//JOBBAN'S INNARDS
|
//JOBBAN'S INNARDS
|
||||||
@@ -1532,7 +1531,7 @@
|
|||||||
src.owner << "You sent [input] to [H] via a secure channel."
|
src.owner << "You sent [input] to [H] via a secure channel."
|
||||||
log_admin("[src.owner] replied to [key_name(H)]'s Centcomm message with the message [input].")
|
log_admin("[src.owner] replied to [key_name(H)]'s Centcomm message with the message [input].")
|
||||||
message_admins("[src.owner] replied to [key_name(H)]'s Centcom message with: \"[input]\"")
|
message_admins("[src.owner] replied to [key_name(H)]'s Centcom message with: \"[input]\"")
|
||||||
H << "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from Central Command. Message as follows. [input]. Message ends.\""
|
H << "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from Central Command. Message as follows. <b>\"[input]\"</b> Message ends.\""
|
||||||
|
|
||||||
else if(href_list["SyndicateReply"])
|
else if(href_list["SyndicateReply"])
|
||||||
var/mob/living/carbon/human/H = locate(href_list["SyndicateReply"])
|
var/mob/living/carbon/human/H = locate(href_list["SyndicateReply"])
|
||||||
@@ -2398,12 +2397,8 @@
|
|||||||
alert("The game mode is [ticker.mode.name]")
|
alert("The game mode is [ticker.mode.name]")
|
||||||
else alert("For some reason there's a ticker, but not a game mode")
|
else alert("For some reason there's a ticker, but not a game mode")
|
||||||
if("manifest")
|
if("manifest")
|
||||||
|
var/dat = "<B>Showing Crew Manifest.</B><HR>"
|
||||||
// AUTOFIXED BY fix_string_idiocy.py
|
dat += "<table cellspacing=5><tr><th>Name</th><th>Position</th></tr>"
|
||||||
// C:\Users\Rob\Documents\Projects\vgstation13\code\modules\admin\topic.dm:2252: var/dat = "<B>Showing Crew Manifest.</B><HR>"
|
|
||||||
var/dat = {"<B>Showing Crew Manifest.</B><HR>
|
|
||||||
<table cellspacing=5><tr><th>Name</th><th>Position</th></tr>"}
|
|
||||||
// END AUTOFIX
|
|
||||||
for(var/mob/living/carbon/human/H in mob_list)
|
for(var/mob/living/carbon/human/H in mob_list)
|
||||||
if(H.ckey)
|
if(H.ckey)
|
||||||
dat += text("<tr><td>[]</td><td>[]</td></tr>", H.name, H.get_assignment())
|
dat += text("<tr><td>[]</td><td>[]</td></tr>", H.name, H.get_assignment())
|
||||||
@@ -2412,24 +2407,16 @@
|
|||||||
if("check_antagonist")
|
if("check_antagonist")
|
||||||
check_antagonists()
|
check_antagonists()
|
||||||
if("DNA")
|
if("DNA")
|
||||||
|
var/dat = "<B>Showing DNA from blood.</B><HR>"
|
||||||
// AUTOFIXED BY fix_string_idiocy.py
|
dat += "<table cellspacing=5><tr><th>Name</th><th>DNA</th><th>Blood Type</th></tr>"
|
||||||
// C:\Users\Rob\Documents\Projects\vgstation13\code\modules\admin\topic.dm:2262: var/dat = "<B>Showing DNA from blood.</B><HR>"
|
|
||||||
var/dat = {"<B>Showing DNA from blood.</B><HR>
|
|
||||||
<table cellspacing=5><tr><th>Name</th><th>DNA</th><th>Blood Type</th></tr>"}
|
|
||||||
// END AUTOFIX
|
|
||||||
for(var/mob/living/carbon/human/H in mob_list)
|
for(var/mob/living/carbon/human/H in mob_list)
|
||||||
if(H.dna && H.ckey)
|
if(H.dna && H.ckey)
|
||||||
dat += "<tr><td>[H]</td><td>[H.dna.unique_enzymes]</td><td>[H.b_type]</td></tr>"
|
dat += "<tr><td>[H]</td><td>[H.dna.unique_enzymes]</td><td>[H.b_type]</td></tr>"
|
||||||
dat += "</table>"
|
dat += "</table>"
|
||||||
usr << browse(dat, "window=DNA;size=440x410")
|
usr << browse(dat, "window=DNA;size=440x410")
|
||||||
if("fingerprints")
|
if("fingerprints")
|
||||||
|
var/dat = "<B>Showing Fingerprints.</B><HR>"
|
||||||
// AUTOFIXED BY fix_string_idiocy.py
|
dat += "<table cellspacing=5><tr><th>Name</th><th>Fingerprints</th></tr>"
|
||||||
// C:\Users\Rob\Documents\Projects\vgstation13\code\modules\admin\topic.dm:2270: var/dat = "<B>Showing Fingerprints.</B><HR>"
|
|
||||||
var/dat = {"<B>Showing Fingerprints.</B><HR>
|
|
||||||
<table cellspacing=5><tr><th>Name</th><th>Fingerprints</th></tr>"}
|
|
||||||
// END AUTOFIX
|
|
||||||
for(var/mob/living/carbon/human/H in mob_list)
|
for(var/mob/living/carbon/human/H in mob_list)
|
||||||
if(H.ckey)
|
if(H.ckey)
|
||||||
if(H.dna && H.dna.uni_identity)
|
if(H.dna && H.dna.uni_identity)
|
||||||
@@ -2729,4 +2716,4 @@
|
|||||||
show_player_info(ckey)
|
show_player_info(ckey)
|
||||||
if("list")
|
if("list")
|
||||||
PlayerNotesPage(text2num(href_list["index"]))
|
PlayerNotesPage(text2num(href_list["index"]))
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -446,16 +446,15 @@ client/proc/one_click_antag()
|
|||||||
//Generates a list of candidates from active ghosts.
|
//Generates a list of candidates from active ghosts.
|
||||||
for(var/mob/dead/observer/G in player_list)
|
for(var/mob/dead/observer/G in player_list)
|
||||||
spawn(0)
|
spawn(0)
|
||||||
if(!jobban_isbanned(G, "Vox Raider") && !jobban_isbanned(G, "Syndicate"))
|
switch(alert(G,"Do you wish to be considered for a vox raiding party arriving on the station?","Please answer in 30 seconds!","Yes","No"))
|
||||||
switch(alert(G,"Do you wish to be considered for a vox raiding party arriving on the station?","Please answer in 30 seconds!","Yes","No"))
|
if("Yes")
|
||||||
if("Yes")
|
if((world.time-time_passed)>300)//If more than 30 game seconds passed.
|
||||||
if((world.time-time_passed)>300)//If more than 30 game seconds passed.
|
|
||||||
return
|
|
||||||
candidates += G
|
|
||||||
if("No")
|
|
||||||
return
|
|
||||||
else
|
|
||||||
return
|
return
|
||||||
|
candidates += G
|
||||||
|
if("No")
|
||||||
|
return
|
||||||
|
else
|
||||||
|
return
|
||||||
|
|
||||||
sleep(300) //Debug.
|
sleep(300) //Debug.
|
||||||
|
|
||||||
@@ -520,6 +519,7 @@ client/proc/one_click_antag()
|
|||||||
new_vox.mind_initialize()
|
new_vox.mind_initialize()
|
||||||
new_vox.mind.assigned_role = "MODE"
|
new_vox.mind.assigned_role = "MODE"
|
||||||
new_vox.mind.special_role = "Vox Raider"
|
new_vox.mind.special_role = "Vox Raider"
|
||||||
|
new_vox.mutations |= NOCLONE //Stops the station crew from messing around with their DNA.
|
||||||
|
|
||||||
ticker.mode.traitors += new_vox.mind
|
ticker.mode.traitors += new_vox.mind
|
||||||
new_vox.equip_vox_raider()
|
new_vox.equip_vox_raider()
|
||||||
|
|||||||
@@ -249,7 +249,7 @@ Ccomp's first proc.
|
|||||||
return ghosts
|
return ghosts
|
||||||
else
|
else
|
||||||
return mobs
|
return mobs
|
||||||
/*
|
|
||||||
|
|
||||||
/client/proc/allow_character_respawn()
|
/client/proc/allow_character_respawn()
|
||||||
set category = "Special Verbs"
|
set category = "Special Verbs"
|
||||||
@@ -339,7 +339,8 @@ Ccomp's first proc.
|
|||||||
|
|
||||||
log_admin("[key_name(usr)] has [action] on joining the round if they use AntagHUD")
|
log_admin("[key_name(usr)] has [action] on joining the round if they use AntagHUD")
|
||||||
message_admins("Admin [key_name_admin(usr)] has [action] on joining the round if they use AntagHUD", 1)
|
message_admins("Admin [key_name_admin(usr)] has [action] on joining the round if they use AntagHUD", 1)
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -57,12 +57,16 @@ var/global/vox_tick = 1
|
|||||||
equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(src), slot_back)
|
equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(src), slot_back)
|
||||||
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_r_store)
|
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_r_store)
|
||||||
|
|
||||||
var/obj/item/weapon/card/id/syndicate/W = new(src)
|
var/obj/item/weapon/card/id/syndicate/C = new(src)
|
||||||
W.name = "[real_name]'s Legitimate Human ID Card"
|
C.name = "[real_name]'s Legitimate Human ID Card"
|
||||||
W.icon_state = "id"
|
C.icon_state = "id"
|
||||||
W.access = list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage, access_syndicate)
|
C.access = list(access_syndicate)
|
||||||
W.assignment = "Trader"
|
C.assignment = "Trader"
|
||||||
W.registered_name = real_name
|
C.registered_name = real_name
|
||||||
|
//C.registered_user = src
|
||||||
|
var/obj/item/weapon/storage/wallet/W = new(src)
|
||||||
|
W.handle_item_insertion(C)
|
||||||
|
// NO. /vg/ spawn_money(rand(50,150)*10,W)
|
||||||
equip_to_slot_or_del(W, slot_wear_id)
|
equip_to_slot_or_del(W, slot_wear_id)
|
||||||
|
|
||||||
var/obj/item/weapon/implant/cortical/I = new(src)
|
var/obj/item/weapon/implant/cortical/I = new(src)
|
||||||
|
|||||||
@@ -23,6 +23,9 @@
|
|||||||
var/started_as_observer //This variable is set to 1 when you enter the game as an observer.
|
var/started_as_observer //This variable is set to 1 when you enter the game as an observer.
|
||||||
//If you died in the game and are a ghsot - this will remain as null.
|
//If you died in the game and are a ghsot - this will remain as null.
|
||||||
//Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot.
|
//Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot.
|
||||||
|
var/has_enabled_antagHUD = 0
|
||||||
|
var/medHUD = 0
|
||||||
|
var/antagHUD = 0
|
||||||
universal_speak = 1
|
universal_speak = 1
|
||||||
var/atom/movable/following = null
|
var/atom/movable/following = null
|
||||||
|
|
||||||
@@ -38,6 +41,20 @@
|
|||||||
T = get_turf(body) //Where is the body located?
|
T = get_turf(body) //Where is the body located?
|
||||||
attack_log = body.attack_log //preserve our attack logs by copying them to our ghost
|
attack_log = body.attack_log //preserve our attack logs by copying them to our ghost
|
||||||
|
|
||||||
|
// NEW SPOOKY BAY GHOST ICONS
|
||||||
|
//////////////
|
||||||
|
if (ishuman(body))
|
||||||
|
var/mob/living/carbon/human/H = body
|
||||||
|
icon = H.stand_icon
|
||||||
|
overlays = H.overlays_standing
|
||||||
|
else
|
||||||
|
icon = body.icon
|
||||||
|
icon_state = body.icon_state
|
||||||
|
overlays = body.overlays
|
||||||
|
|
||||||
|
alpha = 127
|
||||||
|
// END BAY SPOOKY GHOST SPRITES
|
||||||
|
|
||||||
gender = body.gender
|
gender = body.gender
|
||||||
if(body.mind && body.mind.name)
|
if(body.mind && body.mind.name)
|
||||||
name = body.mind.name
|
name = body.mind.name
|
||||||
@@ -70,13 +87,122 @@ Transfer_mind is there to check if mob is being deleted/not going to have a body
|
|||||||
Works together with spawning an observer, noted above.
|
Works together with spawning an observer, noted above.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/mob/dead/observer/Life()
|
||||||
|
..()
|
||||||
|
if(!loc) return
|
||||||
|
if(!client) return 0
|
||||||
|
|
||||||
|
|
||||||
|
if(client.images.len)
|
||||||
|
for(var/image/hud in client.images)
|
||||||
|
if(copytext(hud.icon_state,1,4) == "hud")
|
||||||
|
client.images.Remove(hud)
|
||||||
|
if(antagHUD)
|
||||||
|
var/list/target_list = list()
|
||||||
|
for(var/mob/living/target in oview(src))
|
||||||
|
if( target.mind&&(target.mind.special_role||issilicon(target)) )
|
||||||
|
target_list += target
|
||||||
|
if(target_list.len)
|
||||||
|
assess_targets(target_list, src)
|
||||||
|
if(medHUD)
|
||||||
|
process_medHUD(src)
|
||||||
|
|
||||||
|
|
||||||
|
// Direct copied from medical HUD glasses proc, used to determine what health bar to put over the targets head.
|
||||||
|
/mob/dead/proc/RoundHealth(var/health)
|
||||||
|
switch(health)
|
||||||
|
if(100 to INFINITY)
|
||||||
|
return "health100"
|
||||||
|
if(70 to 100)
|
||||||
|
return "health80"
|
||||||
|
if(50 to 70)
|
||||||
|
return "health60"
|
||||||
|
if(30 to 50)
|
||||||
|
return "health40"
|
||||||
|
if(18 to 30)
|
||||||
|
return "health25"
|
||||||
|
if(5 to 18)
|
||||||
|
return "health10"
|
||||||
|
if(1 to 5)
|
||||||
|
return "health1"
|
||||||
|
if(-99 to 0)
|
||||||
|
return "health0"
|
||||||
|
else
|
||||||
|
return "health-100"
|
||||||
|
return "0"
|
||||||
|
|
||||||
|
|
||||||
|
// Pretty much a direct copy of Medical HUD stuff, except will show ill if they are ill instead of also checking for known illnesses.
|
||||||
|
|
||||||
|
/mob/dead/proc/process_medHUD(var/mob/M)
|
||||||
|
var/client/C = M.client
|
||||||
|
var/image/holder
|
||||||
|
for(var/mob/living/carbon/human/patient in oview(M))
|
||||||
|
var/foundVirus = 0
|
||||||
|
if(patient.virus2.len)
|
||||||
|
foundVirus = 1
|
||||||
|
if(!C) return
|
||||||
|
holder = patient.hud_list[HEALTH_HUD]
|
||||||
|
if(patient.stat == 2)
|
||||||
|
holder.icon_state = "hudhealth-100"
|
||||||
|
else
|
||||||
|
holder.icon_state = "hud[RoundHealth(patient.health)]"
|
||||||
|
C.images += holder
|
||||||
|
|
||||||
|
holder = patient.hud_list[STATUS_HUD]
|
||||||
|
if(patient.stat == 2)
|
||||||
|
holder.icon_state = "huddead"
|
||||||
|
else if(patient.status_flags & XENO_HOST)
|
||||||
|
holder.icon_state = "hudxeno"
|
||||||
|
else if(foundVirus)
|
||||||
|
holder.icon_state = "hudill"
|
||||||
|
else
|
||||||
|
holder.icon_state = "hudhealthy"
|
||||||
|
C.images += holder
|
||||||
|
|
||||||
|
|
||||||
|
/mob/dead/proc/assess_targets(list/target_list, mob/dead/observer/U)
|
||||||
|
var/icon/tempHud = 'icons/mob/hud.dmi'
|
||||||
|
for(var/mob/living/target in target_list)
|
||||||
|
if(iscarbon(target))
|
||||||
|
switch(target.mind.special_role)
|
||||||
|
if("traitor","Syndicate")
|
||||||
|
U.client.images += image(tempHud,target,"hudsyndicate")
|
||||||
|
if("Revolutionary")
|
||||||
|
U.client.images += image(tempHud,target,"hudrevolutionary")
|
||||||
|
if("Head Revolutionary")
|
||||||
|
U.client.images += image(tempHud,target,"hudheadrevolutionary")
|
||||||
|
if("Cultist")
|
||||||
|
U.client.images += image(tempHud,target,"hudcultist")
|
||||||
|
if("Changeling")
|
||||||
|
U.client.images += image(tempHud,target,"hudchangeling")
|
||||||
|
if("Wizard","Fake Wizard")
|
||||||
|
U.client.images += image(tempHud,target,"hudwizard")
|
||||||
|
if("Hunter","Sentinel","Drone","Queen")
|
||||||
|
U.client.images += image(tempHud,target,"hudalien")
|
||||||
|
if("Death Commando")
|
||||||
|
U.client.images += image(tempHud,target,"huddeathsquad")
|
||||||
|
if("Ninja")
|
||||||
|
U.client.images += image(tempHud,target,"hudninja")
|
||||||
|
else//If we don't know what role they have but they have one.
|
||||||
|
U.client.images += image(tempHud,target,"hudunknown1")
|
||||||
|
else//If the silicon mob has no law datum, no inherent laws, or a law zero, add them to the hud.
|
||||||
|
var/mob/living/silicon/silicon_target = target
|
||||||
|
if(!silicon_target.laws||(silicon_target.laws&&(silicon_target.laws.zeroth||!silicon_target.laws.inherent.len))||silicon_target.mind.special_role=="traitor")
|
||||||
|
if(isrobot(silicon_target))//Different icons for robutts and AI.
|
||||||
|
U.client.images += image(tempHud,silicon_target,"hudmalborg")
|
||||||
|
else
|
||||||
|
U.client.images += image(tempHud,silicon_target,"hudmalai")
|
||||||
|
return 1
|
||||||
|
|
||||||
/mob/proc/ghostize(var/can_reenter_corpse = 1)
|
/mob/proc/ghostize(var/can_reenter_corpse = 1)
|
||||||
if(key)
|
if(key)
|
||||||
var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc.
|
var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc.
|
||||||
ghost.can_reenter_corpse = can_reenter_corpse
|
ghost.can_reenter_corpse = can_reenter_corpse
|
||||||
ghost.timeofdeath = timeofdeath //BS12 EDIT
|
ghost.timeofdeath = src.timeofdeath //BS12 EDIT
|
||||||
ghost.key = key
|
ghost.key = key
|
||||||
|
if(!ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
|
||||||
|
ghost.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
|
||||||
return ghost
|
return ghost
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -90,10 +216,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
|||||||
if(stat == DEAD)
|
if(stat == DEAD)
|
||||||
ghostize(1)
|
ghostize(1)
|
||||||
else
|
else
|
||||||
var/response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost whilst still alive you may not play again this round! You can't change your mind so choose wisely!!)","Are you sure you want to ghost?","Ghost","Stay in body")
|
var/response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost, you won't be able to play this round for another 30 minutes! You can't change your mind so choose wisely!)","Are you sure you want to ghost?","Ghost","Stay in body")
|
||||||
if(response != "Ghost") return //didn't want to ghost after-all
|
if(response != "Ghost") return //didn't want to ghost after-all
|
||||||
resting = 1
|
resting = 1
|
||||||
ghostize(0) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3
|
var/mob/dead/observer/ghost = ghostize(0) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3
|
||||||
|
ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly.
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
@@ -119,6 +246,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
|||||||
// updateSpookyAlpha()
|
// updateSpookyAlpha()
|
||||||
|
|
||||||
/mob/dead/observer/Move(NewLoc, direct)
|
/mob/dead/observer/Move(NewLoc, direct)
|
||||||
|
dir = direct
|
||||||
if(NewLoc)
|
if(NewLoc)
|
||||||
loc = NewLoc
|
loc = NewLoc
|
||||||
for(var/obj/effect/step_trigger/S in NewLoc)
|
for(var/obj/effect/step_trigger/S in NewLoc)
|
||||||
@@ -183,6 +311,45 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
|||||||
mind.current.key = key
|
mind.current.key = key
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
/mob/dead/observer/verb/toggle_medHUD()
|
||||||
|
set category = "Ghost"
|
||||||
|
set name = "Toggle MedicHUD"
|
||||||
|
set desc = "Toggles Medical HUD allowing you to see how everyone is doing"
|
||||||
|
if(!client)
|
||||||
|
return
|
||||||
|
if(medHUD)
|
||||||
|
medHUD = 0
|
||||||
|
src << "\blue <B>Medical HUD Disabled</B>"
|
||||||
|
else
|
||||||
|
medHUD = 1
|
||||||
|
src << "\blue <B>Medical HUD Enabled</B>"
|
||||||
|
|
||||||
|
/mob/dead/observer/verb/toggle_antagHUD()
|
||||||
|
set category = "Ghost"
|
||||||
|
set name = "Toggle AntagHUD"
|
||||||
|
set desc = "Toggles AntagHUD allowing you to see who is the antagonist"
|
||||||
|
if(!config.antag_hud_allowed && !client.holder)
|
||||||
|
src << "\red Admins have disabled this for this round."
|
||||||
|
return
|
||||||
|
if(!client)
|
||||||
|
return
|
||||||
|
var/mob/dead/observer/M = src
|
||||||
|
if(jobban_isbanned(M, "AntagHUD"))
|
||||||
|
src << "\red <B>You have been banned from using this feature</B>"
|
||||||
|
return
|
||||||
|
if(config.antag_hud_restricted && !M.has_enabled_antagHUD &&!client.holder)
|
||||||
|
var/response = alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?","Yes","No")
|
||||||
|
if(response == "No") return
|
||||||
|
M.can_reenter_corpse = 0
|
||||||
|
if(!M.has_enabled_antagHUD && !client.holder)
|
||||||
|
M.has_enabled_antagHUD = 1
|
||||||
|
if(M.antagHUD)
|
||||||
|
M.antagHUD = 0
|
||||||
|
src << "\blue <B>AntagHUD Disabled</B>"
|
||||||
|
else
|
||||||
|
M.antagHUD = 1
|
||||||
|
src << "\blue <B>AntagHUD Enabled</B>"
|
||||||
|
|
||||||
/mob/dead/observer/proc/dead_tele()
|
/mob/dead/observer/proc/dead_tele()
|
||||||
set category = "Ghost"
|
set category = "Ghost"
|
||||||
set name = "Teleport"
|
set name = "Teleport"
|
||||||
@@ -361,7 +528,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
|||||||
//host = new /mob/living/silicon/robot/mommi(spawner.loc)
|
//host = new /mob/living/silicon/robot/mommi(spawner.loc)
|
||||||
spawner.attack_ghost(src)
|
spawner.attack_ghost(src)
|
||||||
else
|
else
|
||||||
src << "<span class='warning'>Unable to find any powered MoMMI Spawners on this z-level to spawn MoMMIs at.</span>"
|
src << "<span class='warning'>Unable to find any powered MoMMI Spawners on this z-level.</span>"
|
||||||
|
|
||||||
//if(host)
|
//if(host)
|
||||||
// host.ckey = src.ckey
|
// host.ckey = src.ckey
|
||||||
|
|||||||
Reference in New Issue
Block a user