diff --git a/baystation12.dme b/baystation12.dme index 024f4d444f..851511951e 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -278,7 +278,6 @@ #include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\game_mode_latespawn.dm" #include "code\game\gamemodes\gameticker.dm" -#include "code\game\gamemodes\intercept_report.dm" #include "code\game\gamemodes\objective.dm" #include "code\game\gamemodes\setupgame.dm" #include "code\game\gamemodes\blob\blob.dm" diff --git a/code/game/antagonist/alien/borer.dm b/code/game/antagonist/alien/borer.dm index 07ebf3d189..9374de6a6a 100644 --- a/code/game/antagonist/alien/borer.dm +++ b/code/game/antagonist/alien/borer.dm @@ -8,6 +8,7 @@ var/datum/antagonist/xenos/borer/borers bantype = "Borer" welcome_text = "Use your Infest power to crawl into the ear of a host and fuse with their brain. You can only take control temporarily, and at risk of hurting your host, so be clever and careful; your host is encouraged to help you however they can. Talk to your fellow borers with :x." antag_indicator = "brainworm" + antaghud_indicator = "hudborer" faction_role_text = "Borer Thrall" faction_descriptor = "Unity" diff --git a/code/game/antagonist/alien/xenomorph.dm b/code/game/antagonist/alien/xenomorph.dm index f6a8bc5cb1..4603fc5d1c 100644 --- a/code/game/antagonist/alien/xenomorph.dm +++ b/code/game/antagonist/alien/xenomorph.dm @@ -9,6 +9,7 @@ var/datum/antagonist/xenos/xenomorphs bantype = "Xenomorph" flags = ANTAG_OVERRIDE_MOB | ANTAG_RANDSPAWN | ANTAG_OVERRIDE_JOB | ANTAG_VOTABLE welcome_text = "Hiss! You are a larval alien. Hide and bide your time until you are ready to evolve." + antaghud_indicator = "hudalien" hard_cap = 5 hard_cap_round = 8 diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm index 3be89beba1..faf7526a9c 100644 --- a/code/game/antagonist/antagonist.dm +++ b/code/game/antagonist/antagonist.dm @@ -19,6 +19,7 @@ var/role_text_plural = "Traitors" // As above but plural. // Visual references. + var/antaghud_indicator = "hudsyndicate" // Used by the ghost antagHUD. var/antag_indicator // icon_state for icons/mob/mob.dm visual indicator. var/faction_indicator // See antag_indicator, but for factionalized people only. var/faction_invisible // Can members of the faction identify other antagonists? @@ -76,6 +77,11 @@ role_text_plural = role_text if(config.protect_roles_from_antagonist) restricted_jobs |= protected_jobs + if(antaghud_indicator) + if(!hud_icon_reference) + hud_icon_reference = list() + if(role_text) hud_icon_reference[role_text] = antaghud_indicator + if(faction_role_text) hud_icon_reference[faction_role_text] = antaghud_indicator /datum/antagonist/proc/tick() return 1 diff --git a/code/game/antagonist/antagonist_print.dm b/code/game/antagonist/antagonist_print.dm index 5cbce01a81..178b613b45 100644 --- a/code/game/antagonist/antagonist_print.dm +++ b/code/game/antagonist/antagonist_print.dm @@ -69,7 +69,7 @@ var/uplink_true = 0 var/purchases = "" for(var/obj/item/device/uplink/H in world_uplinks) - if(H && H.owner && H.owner == ply) + if(H && H.uplink_owner && H.uplink_owner == ply) TC_uses += H.used_TC uplink_true = 1 var/list/refined_log = new() diff --git a/code/game/antagonist/antagonist_update.dm b/code/game/antagonist/antagonist_update.dm index d6be8c9441..4eb81cc709 100644 --- a/code/game/antagonist/antagonist_update.dm +++ b/code/game/antagonist/antagonist_update.dm @@ -74,10 +74,18 @@ qdel(I) /datum/antagonist/proc/update_current_antag_max() - var/main_type + cur_max = hard_cap if(ticker && ticker.mode) if(ticker.mode.antag_tags && (id in ticker.mode.antag_tags)) - main_type = 1 - cur_max = (main_type ? hard_cap_round : hard_cap) + cur_max = hard_cap_round + if(ticker.mode.antag_scaling_coeff) - cur_max = Clamp((ticker.mode.num_players()/ticker.mode.antag_scaling_coeff), 1, cur_max) + + var/count = 0 + for(var/mob/living/M in player_list) + if(M.client) + count++ + + // Minimum: initial_spawn_target + // Maximum: hard_cap or hard_cap_round + cur_max = max(initial_spawn_target,min(round(count/ticker.mode.antag_scaling_coeff),cur_max)) diff --git a/code/game/antagonist/outsider/deathsquad.dm b/code/game/antagonist/outsider/deathsquad.dm index 052533340b..1f8c11ecb0 100644 --- a/code/game/antagonist/outsider/deathsquad.dm +++ b/code/game/antagonist/outsider/deathsquad.dm @@ -9,6 +9,7 @@ var/datum/antagonist/deathsquad/deathsquad landmark_id = "Commando" flags = ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_HAS_NUKE | ANTAG_HAS_LEADER default_access = list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage) + antaghud_indicator = "huddeathsquad" hard_cap = 4 hard_cap_round = 8 diff --git a/code/game/antagonist/outsider/ert.dm b/code/game/antagonist/outsider/ert.dm index 71278c344a..98a44442dc 100644 --- a/code/game/antagonist/outsider/ert.dm +++ b/code/game/antagonist/outsider/ert.dm @@ -12,6 +12,7 @@ var/datum/antagonist/ert/ert id_type = /obj/item/weapon/card/id/centcom/ERT flags = ANTAG_OVERRIDE_JOB | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER | ANTAG_CHOOSE_NAME + antaghud_indicator = "hudloyalist" hard_cap = 5 hard_cap_round = 7 diff --git a/code/game/antagonist/outsider/mercenary.dm b/code/game/antagonist/outsider/mercenary.dm index 69d9f60420..f703818e47 100644 --- a/code/game/antagonist/outsider/mercenary.dm +++ b/code/game/antagonist/outsider/mercenary.dm @@ -12,6 +12,7 @@ var/datum/antagonist/mercenary/mercs welcome_text = "To speak on the strike team's private channel use :t." flags = ANTAG_OVERRIDE_JOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_HAS_NUKE | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER id_type = /obj/item/weapon/card/id/syndicate + antaghud_indicator = "hudoperative" hard_cap = 4 hard_cap_round = 8 @@ -42,16 +43,15 @@ var/datum/antagonist/mercenary/mercs if(player.backbag == 4) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(player), slot_back) player.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(player.back), slot_in_backpack) player.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/cyanide(player), slot_in_backpack) + + if (player.mind == leader) + var/obj/item/device/radio/uplink/U = new(player.loc) + U.hidden_uplink.uplink_owner = player.mind + U.hidden_uplink.uses = 40 + player.put_in_hands(U) + player.update_icons() create_id("Mercenary", player) create_radio(SYND_FREQ, player) return 1 - -/datum/antagonist/mercenary/create_nuke() - ..() - // Create the radio. - var/obj/effect/landmark/uplinkdevice = locate("landmark*Syndicate-Uplink") - if(uplinkdevice) - var/obj/item/device/radio/uplink/U = new(uplinkdevice.loc) - U.hidden_uplink.uses = 40 \ No newline at end of file diff --git a/code/game/antagonist/outsider/ninja.dm b/code/game/antagonist/outsider/ninja.dm index b091e9a55e..09dc15b594 100644 --- a/code/game/antagonist/outsider/ninja.dm +++ b/code/game/antagonist/outsider/ninja.dm @@ -9,6 +9,7 @@ var/datum/antagonist/ninja/ninjas landmark_id = "ninjastart" welcome_text = "You are an elite mercenary assassin of the Spider Clan. You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor." flags = ANTAG_OVERRIDE_JOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_RANDSPAWN | ANTAG_VOTABLE | ANTAG_SET_APPEARANCE + antaghud_indicator = "hudninja" initial_spawn_req = 1 initial_spawn_target = 1 diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm index f377480a4d..8ab342bbf2 100644 --- a/code/game/antagonist/outsider/raider.dm +++ b/code/game/antagonist/outsider/raider.dm @@ -10,6 +10,7 @@ var/datum/antagonist/raider/raiders landmark_id = "voxstart" welcome_text = "Use :H to talk on your encrypted channel." flags = ANTAG_OVERRIDE_JOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_VOTABLE | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER + antaghud_indicator = "hudmutineer" hard_cap = 6 hard_cap_round = 10 diff --git a/code/game/antagonist/outsider/wizard.dm b/code/game/antagonist/outsider/wizard.dm index af1fc09e8e..f6741cafa0 100644 --- a/code/game/antagonist/outsider/wizard.dm +++ b/code/game/antagonist/outsider/wizard.dm @@ -9,6 +9,7 @@ var/datum/antagonist/wizard/wizards landmark_id = "wizard" welcome_text = "You will find a list of available spells in your spell book. Choose your magic arsenal carefully.
In your pockets you will find a teleport scroll. Use it as needed." flags = ANTAG_OVERRIDE_JOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_VOTABLE | ANTAG_SET_APPEARANCE + antaghud_indicator = "hudwizard" hard_cap = 1 hard_cap_round = 3 diff --git a/code/game/antagonist/station/changeling.dm b/code/game/antagonist/station/changeling.dm index ded3361cd2..b3f5605a91 100644 --- a/code/game/antagonist/station/changeling.dm +++ b/code/game/antagonist/station/changeling.dm @@ -9,6 +9,7 @@ protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain") welcome_text = "Use say \"#g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them." flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE + antaghud_indicator = "hudchangeling" /datum/antagonist/changeling/get_special_objective_text(var/datum/mind/player) return "
Changeling ID: [player.changeling.changelingID].
Genomes Absorbed: [player.changeling.absorbedcount]" diff --git a/code/game/antagonist/station/cultist.dm b/code/game/antagonist/station/cultist.dm index 20c2bd428d..aba2115d15 100644 --- a/code/game/antagonist/station/cultist.dm +++ b/code/game/antagonist/station/cultist.dm @@ -26,6 +26,7 @@ var/datum/antagonist/cultist/cult hard_cap_round = 6 initial_spawn_req = 4 initial_spawn_target = 6 + antaghud_indicator = "hudcultist" var/allow_narsie = 1 var/datum/mind/sacrifice_target diff --git a/code/game/antagonist/station/loyalist.dm b/code/game/antagonist/station/loyalist.dm index 4b95467691..fddf0c3796 100644 --- a/code/game/antagonist/station/loyalist.dm +++ b/code/game/antagonist/station/loyalist.dm @@ -13,6 +13,7 @@ var/datum/antagonist/loyalists/loyalists loss_text = "The heads of staff did not stop the revolution!" victory_feedback_tag = "win - rev heads killed" loss_feedback_tag = "loss - heads killed" + antaghud_indicator = "hudloyalist" flags = 0 hard_cap = 2 diff --git a/code/game/antagonist/station/revolutionary.dm b/code/game/antagonist/station/revolutionary.dm index f3454cf756..96e3752991 100644 --- a/code/game/antagonist/station/revolutionary.dm +++ b/code/game/antagonist/station/revolutionary.dm @@ -14,6 +14,7 @@ var/datum/antagonist/revolutionary/revs victory_feedback_tag = "win - heads killed" loss_feedback_tag = "loss - rev heads killed" flags = ANTAG_SUSPICIOUS | ANTAG_VOTABLE + antaghud_indicator = "hudrevolutionary" hard_cap = 2 hard_cap_round = 4 diff --git a/code/game/antagonist/station/rogue_ai.dm b/code/game/antagonist/station/rogue_ai.dm index a3e609e55d..c17b6c0f86 100644 --- a/code/game/antagonist/station/rogue_ai.dm +++ b/code/game/antagonist/station/rogue_ai.dm @@ -15,7 +15,7 @@ var/datum/antagonist/rogue_ai/malf hard_cap_round = 1 initial_spawn_req = 1 initial_spawn_target = 1 - + antaghud_indicator = "hudmalai" /datum/antagonist/rogue_ai/New() ..() diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index c4eea26004..e32d99280d 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -106,6 +106,8 @@ var/global/list/additional_antag_types = list() return var/datum/antagonist/antag = all_antag_types[choice] if(antag) + if(!islist(ticker.mode.antag_templates)) + ticker.mode.antag_templates = list() ticker.mode.antag_templates |= antag message_admins("Admin [key_name_admin(usr)] added [antag.role_text] template to game mode.") @@ -429,26 +431,35 @@ var/global/list/additional_antag_types = list() if(!antag_template) return candidates - // Assemble a list of active players without jobbans. - for(var/mob/new_player/player in player_list) - if( player.client && player.ready ) - players += player + // If this is being called post-roundstart then it doesn't care about ready status. + if(ticker && ticker.current_state == GAME_STATE_PLAYING) + for(var/mob/player in player_list) + if(!player.client) + continue + if(!role || (player.client.prefs.be_special & role)) + log_debug("[player.key] had [antag_id] enabled, so we are drafting them.") + candidates |= player.mind + else + // Assemble a list of active players without jobbans. + for(var/mob/new_player/player in player_list) + if( player.client && player.ready ) + players += player - // Get a list of all the people who want to be the antagonist for this round - for(var/mob/new_player/player in players) - if(!role || (player.client.prefs.be_special & role)) - log_debug("[player.key] had [antag_id] enabled, so we are drafting them.") - candidates += player.mind - players -= player - - // If we don't have enough antags, draft people who voted for the round. - if(candidates.len < required_enemies) + // Get a list of all the people who want to be the antagonist for this round for(var/mob/new_player/player in players) - if(player.ckey in round_voters) - log_debug("[player.key] voted for this round, so we are drafting them.") + if(!role || (player.client.prefs.be_special & role)) + log_debug("[player.key] had [antag_id] enabled, so we are drafting them.") candidates += player.mind players -= player - break + + // If we don't have enough antags, draft people who voted for the round. + if(candidates.len < required_enemies) + for(var/mob/new_player/player in players) + if(player.ckey in round_voters) + log_debug("[player.key] voted for this round, so we are drafting them.") + candidates += player.mind + players -= player + break return candidates // Returns: The number of people who had the antagonist role set to yes, regardless of recomended_enemies, if that number is greater than required_enemies // required_enemies if the number of people with that role set to yes is less than recomended_enemies, diff --git a/code/game/gamemodes/game_mode_latespawn.dm b/code/game/gamemodes/game_mode_latespawn.dm index f849f7133d..038cf351ab 100644 --- a/code/game/gamemodes/game_mode_latespawn.dm +++ b/code/game/gamemodes/game_mode_latespawn.dm @@ -1,6 +1,7 @@ /datum/game_mode/var/next_spawn = 0 /datum/game_mode/var/min_autotraitor_delay = 4200 // Approx 7 minutes. /datum/game_mode/var/max_autotraitor_delay = 12000 // Approx 20 minutes. +/datum/game_mode/var/process_count = 0 /datum/game_mode/proc/get_usable_templates(var/list/supplied_templates) var/list/usable_templates = list() @@ -13,7 +14,11 @@ ///process() ///Called by the gameticker /datum/game_mode/proc/process() - try_latespawn() + // Slow this down a bit so latejoiners have a chance of being antags. + process_count++ + if(process_count >= 10) + process_count = 0 + try_latespawn() /datum/game_mode/proc/latespawn(var/mob/living/carbon/human/character) if(!character.mind) diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm deleted file mode 100644 index 4feba5d1d2..0000000000 --- a/code/game/gamemodes/intercept_report.dm +++ /dev/null @@ -1,187 +0,0 @@ -/datum/intercept_text - var/text - /* - var/prob_correct_person_lower = 20 - var/prob_correct_person_higher = 80 - var/prob_correct_job_lower = 20 - var/prob_correct_job_higher = 80 - var/prob_correct_prints_lower = 20 - var/prob_correct_print_higher = 80 - var/prob_correct_objective_lower = 20 - var/prob_correct_objective_higher = 80 - */ - var/list/org_names_1 = list( - "Blighted", - "Defiled", - "Unholy", - "Murderous", - "Ugly", - "French", - "Blue", - "Farmer" - ) - var/list/org_names_2 = list( - "Reapers", - "Swarm", - "Rogues", - "Menace", - "Jeff Worshippers", - "Drunks", - "Strikers", - "Creed" - ) - var/list/anomalies = list( - "Huge electrical storm", - "Photon emitter", - "Meson generator", - "Blue swirly thing" - ) - var/list/SWF_names = list( - "Grand Wizard", - "His Most Unholy Master", - "The Most Angry", - "Bighands", - "Tall Hat", - "Deadly Sandals" - ) - var/list/changeling_names = list( - "Odo", - "The Thing", - "Booga", - "The Goatee of Wrath", - "Tam Lin", - "Species 3157", - "Small Prick" - ) - -// TODO: Update to new antagonist system. -/datum/intercept_text/proc/build(var/mode_type, datum/mind/correct_person) - switch(mode_type) - if("revolution") - src.text = "" - src.build_rev(correct_person) - return src.text - if("cult") - src.text = "" - src.build_cult(correct_person) - return src.text - if("wizard") - src.text = "" - src.build_wizard(correct_person) - return src.text - if("nuke") - src.text = "" - src.build_nuke(correct_person) - return src.text - if("traitor") - src.text = "" - src.build_traitor(correct_person) - return src.text - if("malf") - src.text = "" - src.build_malf(correct_person) - return src.text - if("changeling","traitorchan") - src.text = "" - src.build_changeling(correct_person) - return src.text - else - return null - -/datum/intercept_text/proc/get_suspect() - var/list/dudes = list() - for(var/mob/living/carbon/human/man in player_list) if(man.client && man.client.prefs.nanotrasen_relation == COMPANY_OPPOSED) - dudes += man - for(var/i = 0, i < max(player_list.len/10,2), i++) - dudes += pick(player_list) - return pick(dudes) - -/datum/intercept_text/proc/build_traitor(datum/mind/correct_person) - var/name_1 = pick(src.org_names_1) - var/name_2 = pick(src.org_names_2) - - var/mob/living/carbon/human/H = get_suspect() - if(!H) return - - var/fingerprints = num2text(md5(H.dna.uni_identity)) - var/traitor_name = H.real_name - var/prob_right_dude = rand(1, 100) - - src.text += "

The [name_1] [name_2] implied an undercover operative was acting on their behalf on the station currently." - src.text += "It would be in your best interests to suspect everybody, as these undercover operatives could have implants which trigger them to have their memories removed until they are needed. He, or she, could even be a high ranking officer." - - src.text += "After some investigation, we " - if(prob(50)) - src.text += "are [prob_right_dude]% sure that [traitor_name] may have been involved, and should be closely observed." - src.text += "
Note: This group are known to be untrustworthy, so do not act on this information without proper discourse." - else - src.text += "discovered the following set of fingerprints ([fingerprints]) on sensitive materials, and their owner should be closely observed." - src.text += "However, these could also belong to a current Cent. Com employee, so do not act on this without reason." - - - -/datum/intercept_text/proc/build_cult(datum/mind/correct_person) - var/name_1 = pick(src.org_names_1) - var/name_2 = pick(src.org_names_2) - - var/prob_right_dude = rand(1, 100) - var/mob/living/carbon/human/H = get_suspect() - if(!H) return - var/traitor_job = H.mind.assigned_role - - src.text += "

It has been brought to our attention that the [name_1] [name_2] have stumbled upon some dark secrets. They apparently want to spread the dangerous knowledge onto as many stations as they can." - src.text += "Watch out for the following: praying to an unfamilar god, preaching the word of \[REDACTED\], sacrifices, magical dark power, living constructs of evil and a portal to the dimension of the underworld." - - src.text += "Based on our intelligence, we are [prob_right_dude]% sure that if true, someone doing the job of [traitor_job] on your station may have been converted " - src.text += "and instilled with the idea of the flimsiness of the real world, seeking to destroy it. " - - src.text += "
However, if this information is acted on without substantial evidence, those responsible will face severe repercussions." - - - -/datum/intercept_text/proc/build_rev(datum/mind/correct_person) - var/name_1 = pick(src.org_names_1) - var/name_2 = pick(src.org_names_2) - - var/prob_right_dude = rand(1, 100) - var/mob/living/carbon/human/H = get_suspect() - if(!H) return - var/traitor_job = H.mind.assigned_role - - src.text += "

It has been brought to our attention that the [name_1] [name_2] are attempting to stir unrest on one of our stations in your sector." - src.text += "Watch out for suspicious activity among the crew and make sure that all heads of staff report in periodically." - - src.text += "Based on our intelligence, we are [prob_right_dude]% sure that if true, someone doing the job of [traitor_job] on your station may have been brainwashed " - src.text += "at a recent conference, and their department should be closely monitored for signs of mutiny. " - - src.text += "
However, if this information is acted on without substantial evidence, those responsible will face severe repercussions." - - - -/datum/intercept_text/proc/build_wizard(datum/mind/correct_person) - var/SWF_desc = pick(SWF_names) - - src.text += "

The evil Space Wizards Federation have recently broke their most feared wizard, known only as \"[SWF_desc]\" out of space jail. " - src.text += "He is on the run, last spotted in a system near your present location. If anybody suspicious is located aboard, please " - src.text += "approach with EXTREME caution. Cent. Com also recommends that it would be wise to not inform the crew of this, due to their fearful nature." - src.text += "Known attributes include: Brown sandals, a large blue hat, a voluptous white beard, and an inclination to cast spells." - -/datum/intercept_text/proc/build_nuke(datum/mind/correct_person) - src.text += "

Cent. Com recently recieved a report of a plot to destroy one of our stations in your area. We believe the Nuclear Authentication Disc " - src.text += "that is standard issue aboard your vessel may be a target. We recommend removal of this object, and it's storage in a safe " - src.text += "environment. As this may cause panic among the crew, all efforts should be made to keep this information a secret from all but " - src.text += "the most trusted crew-members." - -/datum/intercept_text/proc/build_malf(datum/mind/correct_person) - var/a_name = pick(src.anomalies) - src.text += "

A [a_name] was recently picked up by a nearby stations sensors in your sector. If it came into contact with your ship or " - src.text += "electrical equipment, it may have had hazardarous and unpredictable effect. Closely observe any non carbon based life forms " - src.text += "for signs of unusual behaviour, but keep this information discreet at all times due to this possibly dangerous scenario." - -/datum/intercept_text/proc/build_changeling(datum/mind/correct_person) - var/cname = pick(src.changeling_names) - var/orgname1 = pick(src.org_names_1) - var/orgname2 = pick(src.org_names_2) - src.text += "

We have received a report that a dangerous alien lifeform known only as \"[cname]\" may have infiltrated your crew. " - src.text += "These lifeforms are assosciated with the [orgname1] [orgname2] and may be attempting to acquire sensitive materials on their behalf. " - src.text += "Please take care not to alarm the crew, as [cname] may take advantage of a panic situation. Remember, they can be anybody, suspect everybody!" diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 93f1d8fe32..9a67cdc94a 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -15,7 +15,7 @@ required_enemies = 1 end_on_antag_death = 1 antag_tags = list(MODE_TRAITOR) - antag_scaling_coeff = 10 + antag_scaling_coeff = 8 /datum/game_mode/traitor/auto name = "autotraitor" diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 83c3ab98d7..911c89ce03 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -911,6 +911,9 @@ About the new airlock wires panel: health -= crush_damage healthcheck() +/obj/effect/energy_field/airlock_crush(var/crush_damage) + Stress(crush_damage) + /obj/structure/closet/airlock_crush(var/crush_damage) ..() damage(crush_damage) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index cf67c4d01f..2c72743bd2 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -28,6 +28,7 @@ var/message2 = "" // message line 2 var/index1 // display index for scrolling messages or 0 if non-scrolling var/index2 + var/picture = null var/frequency = 1435 // radio frequency @@ -72,13 +73,13 @@ // set what is displayed /obj/machinery/status_display/proc/update() + remove_display() if(friendc && !ignore_friendc) set_picture("ai_friend") return 1 switch(mode) if(STATUS_DISPLAY_BLANK) //blank - remove_display() return 1 if(STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME) //emergency shuttle timer if(emergency_shuttle.waiting_to_leave()) @@ -96,8 +97,6 @@ if(length(message2) > CHARS_PER_LINE) message2 = "Error" update_display(message1, message2) - else - remove_display() return 1 if(STATUS_DISPLAY_MESSAGE) //custom messages var/line1 @@ -122,6 +121,9 @@ index2 -= message2_len update_display(line1, line2) return 1 + if(STATUS_DISPLAY_ALERT) + set_picture(picture_state) + return 1 if(STATUS_DISPLAY_TIME) message1 = "TIME" message2 = worldtime2text() @@ -150,9 +152,11 @@ index2 = 0 /obj/machinery/status_display/proc/set_picture(state) - picture_state = state remove_display() - overlays += image('icons/obj/status_display.dmi', icon_state=picture_state) + if(!picture || picture_state != state) + picture_state = state + picture = image('icons/obj/status_display.dmi', icon_state=picture_state) + overlays |= picture /obj/machinery/status_display/proc/update_display(line1, line2) var/new_text = {"
[line1]
[line2]
"} @@ -207,7 +211,7 @@ if("time") mode = STATUS_DISPLAY_TIME - + update() #undef CHARS_PER_LINE #undef FOND_SIZE diff --git a/code/game/objects/items/devices/uplink.dm b/code/game/objects/items/devices/uplink.dm index 345e9ddd06..2023c881a9 100644 --- a/code/game/objects/items/devices/uplink.dm +++ b/code/game/objects/items/devices/uplink.dm @@ -7,10 +7,16 @@ A list of items and costs is stored under the datum of every game mode, alongsid */ /obj/item/device/uplink - var/welcome = "Illegal Uplink Console" // Welcoming menu message - var/uses = DEFAULT_TELECRYSTAL_AMOUNT // Numbers of crystals - var/list/purchase_log - var/datum/mind/owner = null + var/welcome // Welcoming menu message + var/uses // Numbers of crystals + var/list/ItemsCategory // List of categories with lists of items + var/list/ItemsReference // List of references with an associated item + var/list/nanoui_items // List of items for NanoUI use + var/nanoui_menu = 0 // The current menu we are in + var/list/nanoui_data = new // Additional data for NanoUI use + + var/list/purchase_log = new + var/datum/mind/uplink_owner = null var/used_TC = 0 /obj/item/device/uplink/nano_host() @@ -18,7 +24,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid /obj/item/device/uplink/New(var/location, var/datum/mind/owner) ..() - src.owner = owner + src.uplink_owner = owner purchase_log = list() world_uplinks += src @@ -42,10 +48,8 @@ A list of items and costs is stored under the datum of every game mode, alongsid name = "hidden uplink" desc = "There is something wrong if you're examining this." var/active = 0 - var/nanoui_menu = 0 // The current menu we are in var/datum/uplink_category/category = 0 // The current category we are in var/exploit_id // Id of the current exploit record we are viewing - var/list/nanoui_data // Data for NanoUI use // The hidden uplink MUST be inside an obj/item's contents. diff --git a/code/game/objects/items/devices/uplink_items.dm b/code/game/objects/items/devices/uplink_items.dm index d818179a05..f5481c0fdd 100644 --- a/code/game/objects/items/devices/uplink_items.dm +++ b/code/game/objects/items/devices/uplink_items.dm @@ -76,12 +76,12 @@ var/datum/uplink/uplink = new() return 1 // With no owner, there's no need to check antag status. - if(!U.owner) + if(!U.uplink_owner) return 0 for(var/antag_role in antag_roles) var/datum/antagonist/antag = all_antag_types[antag_role] - if(antag.is_antagonist(U.owner)) + if(antag.is_antagonist(U.uplink_owner)) return 1 return 0 diff --git a/code/global.dm b/code/global.dm index 49484df37d..61835c9afd 100644 --- a/code/global.dm +++ b/code/global.dm @@ -12,6 +12,7 @@ var/global/list/processing_power_items = list() var/global/list/active_diseases = list() var/global/list/med_hud_users = list() // List of all entities using a medical HUD. var/global/list/sec_hud_users = list() // List of all entities using a security HUD. +var/global/list/hud_icon_reference = list() var/global/list/global_mutations = list() // List of hidden mutation things. diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index d5a54b33b2..92b8dcf25a 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -657,7 +657,8 @@ proc/admin_notice(var/message, var/rights) if(message) if(!check_rights(R_SERVER,0)) message = sanitize(message, 500, extra = 0) - world << "\blue [usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:\n \t [message]" + message = replacetext(message, "\n", "
") // required since we're putting it in a

tag + world << "[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:

[message]

" log_admin("Announce: [key_name(usr)] : [message]") feedback_add_details("admin_verb","A") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm index a4f91ce94c..448173104b 100644 --- a/code/modules/hydroponics/seed_storage.dm +++ b/code/modules/hydroponics/seed_storage.dm @@ -101,7 +101,7 @@ if(seed.get_trait(TRAIT_REQUIRES_NUTRIENTS)) if(seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) < 0.05) dat += "Low" - else if(seed.get_trait(TRAIT_REQUIRES_NUTRIENTS) > 0.2) + else if(seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) > 0.2) dat += "High" else dat += "Norm" diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index c7845bc7f0..58881d28db 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -123,7 +123,7 @@ Works together with spawning an observer, noted above. if(antagHUD) var/list/target_list = list() for(var/mob/living/target in oview(src, 14)) - if(target.mind&&(target.mind.special_role||issilicon(target)) ) + if(target.mind && target.mind.special_role) target_list += target if(target_list.len) assess_targets(target_list, src) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 45cc17b0e4..250350bf46 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -219,16 +219,20 @@ var/list/slot_equipment_priority = list( \ /mob/proc/canUnEquip(obj/item/I) if(!I) //If there's nothing to drop, the drop is automatically successful. return 1 + var/slot = get_inventory_slot(I) + if(slot && !I.mob_can_unequip(src, slot)) + return 0 + + drop_from_inventory(I) + return 1 + +/mob/proc/get_inventory_slot(obj/item/I) var/slot for(var/s in slot_back to slot_tie) //kind of worries me if(get_equipped_item(s) == I) slot = s break - - if(slot && !I.mob_can_unequip(src, slot)) - return 0 - - return 1 + return slot //This differs from remove_from_mob() in that it checks if the item can be unequipped first. /mob/proc/unEquip(obj/item/I, force = 0) //Force overrides NODROP for things like wizarditis and admin undress. diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index f1cae922e6..f4e49b4f6f 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1678,35 +1678,11 @@ if (BITTEST(hud_updateflag, SPECIALROLE_HUD)) var/image/holder = hud_list[SPECIALROLE_HUD] holder.icon_state = "hudblank" - if(mind) - - // TODO: Update to new antagonist system. - switch(mind.special_role) - if("traitor","Mercenary") - holder.icon_state = "hudsyndicate" - if("Revolutionary") - holder.icon_state = "hudrevolutionary" - if("Head Revolutionary") - holder.icon_state = "hudheadrevolutionary" - if("Cultist") - holder.icon_state = "hudcultist" - if("Changeling") - holder.icon_state = "hudchangeling" - if("Wizard","Fake Wizard") - holder.icon_state = "hudwizard" - if("Death Commando") - holder.icon_state = "huddeathsquad" - if("Ninja") - holder.icon_state = "hudninja" - if("head_loyalist") - holder.icon_state = "hudloyalist" - if("loyalist") - holder.icon_state = "hudloyalist" - if("head_mutineer") - holder.icon_state = "hudmutineer" - if("mutineer") - holder.icon_state = "hudmutineer" - + if(mind && mind.special_role) + if(hud_icon_reference[mind.special_role]) + holder.icon_state = hud_icon_reference[mind.special_role] + else + holder.icon_state = "hudsyndicate" hud_list[SPECIALROLE_HUD] = holder hud_updateflag = 0 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index eac54734db..ab79044b19 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -655,27 +655,15 @@ default behaviour is: set category = "IC" resting = !resting - src << "You are now [resting ? "resting" : "getting up"]." + src << "You are now [resting ? "resting" : "getting up"]" /mob/living/proc/is_allowed_vent_crawl_item(var/obj/item/carried_item) - if(istype(carried_item, /obj/item/weapon/implant)) - return 1 - if(istype(carried_item, /obj/item/clothing/mask/facehugger)) - return 1 - return 0 - -/mob/living/carbon/is_allowed_vent_crawl_item(var/obj/item/carried_item) - if(carried_item in internal_organs) - return 1 - return ..() - -/mob/living/carbon/human/is_allowed_vent_crawl_item(var/obj/item/carried_item) - if(carried_item in organs) - return 1 - return ..() + return isnull(get_inventory_slot(carried_item)) /mob/living/simple_animal/spiderbot/is_allowed_vent_crawl_item(var/obj/item/carried_item) - return carried_item != held_item + if(carried_item == held_item) + return 0 + return ..() /mob/living/proc/handle_ventcrawl(var/obj/machinery/atmospherics/unary/vent_pump/vent_found = null, var/ignore_items = 0) // -- TLE -- Merged by Carn if(stat) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 88c3e812f0..10446ba8fa 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -379,6 +379,9 @@ src.client.perspective = EYE_PERSPECTIVE src.client.eye = card + //stop resting + resting = 0 + // If we are being held, handle removing our holder from their inv. var/obj/item/weapon/holder/H = loc if(istype(H)) diff --git a/html/changelog.html b/html/changelog.html index 248f688be8..3de7213ad2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -108,6 +108,10 @@
  • Added ballistic supply drop pods.
  • Added diona gestalt random map template.
  • Swapped the singularity beacon out for a hacked supply beacon.
  • +

    Zuhayr updated:

    +

    24 August 2015

    diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index f6da88ca35..0d3e68db03 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ