AntagHUD, Bayghost sprites, and other fixes from Bay.

This commit is contained in:
Rob Nelson
2013-12-08 16:06:02 -08:00
parent aa02c70ca9
commit ac15f0cdca
8 changed files with 374 additions and 127 deletions

View File

@@ -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

View File

@@ -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*/

View File

@@ -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)

View File

@@ -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", " ", "&nbsp")]</font></a></td>" jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=traitor;jobban4=\ref[M]'><font color=red>[replacetext("Traitor", " ", "&nbsp")]</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", " ", "&nbsp")]</a></td>" jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=wizard;jobban4=\ref[M]'>[replacetext("Wizard", " ", "&nbsp")]</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&nbsp;Raider</font></a></td>" jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Vox Raider;jobban4=\ref[M]'><font color=red>Vox&nbsp;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", " ", "&nbsp")]</a></td>" jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=infested monkey;jobban4=\ref[M]'>[replacetext("Infested Monkey", " ", "&nbsp")]</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

View File

@@ -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()

View File

@@ -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)
*/
/* /*

View File

@@ -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)

View File

@@ -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