From 3105297f3ebb24457f26947d62f6271d97f3f603 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 30 Jul 2014 21:08:28 +0930 Subject: [PATCH 1/8] Adjusted spawn procs for heist and nuke. --- code/game/gamemodes/heist/heist.dm | 108 ++++++++++---------- code/game/gamemodes/nuclear/nuclear.dm | 15 ++- code/game/objects/effects/landmarks.dm | 8 ++ code/modules/admin/player_panel.dm | 3 + code/modules/admin/verbs/one_click_antag.dm | 2 +- 5 files changed, 73 insertions(+), 63 deletions(-) diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 8b49a4574a..475b13c3f7 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -2,8 +2,12 @@ VOX HEIST ROUNDTYPE */ +var/global/list/raider_spawn = list() +var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' objective. Clumsy, rewrite sometime. + /datum/game_mode/ var/list/datum/mind/raiders = list() //Antags. + var/list/raid_objectives = list() //Raid objectives /datum/game_mode/heist name = "heist" @@ -16,9 +20,6 @@ VOX HEIST ROUNDTYPE var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) - var/list/raid_objectives = list() //Raid objectives. - var/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' objective. - /datum/game_mode/heist/announce() world << "The current game mode is - Heist!" world << "An unidentified bluespace signature has slipped past the Icarus and is approaching [station_name()]!" @@ -59,15 +60,6 @@ VOX HEIST ROUNDTYPE /datum/game_mode/heist/post_setup() - //Build a list of spawn points. - var/list/turf/raider_spawn = list() - - for(var/obj/effect/landmark/L in landmarks_list) - if(L.name == "voxstart") - raider_spawn += get_turf(L) - del(L) - continue - //Generate objectives for the group. if(!config.objectives_disabled) raid_objectives = forge_vox_objectives() @@ -83,49 +75,57 @@ VOX HEIST ROUNDTYPE raider.current.loc = raider_spawn[index] index++ - var/sounds = rand(2,8) - var/i = 0 - var/newname = "" - - while(i<=sounds) - i++ - newname += pick(list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah")) - - var/mob/living/carbon/human/vox = raider.current - - vox.real_name = capitalize(newname) - vox.name = vox.real_name - raider.name = vox.name - vox.age = rand(12,20) - vox.dna.mutantrace = "vox" - vox.set_species("Vox") - vox.languages = list() // Removing language from chargen. - vox.flavor_text = "" - vox.add_language("Vox-pidgin") - vox.h_style = "Short Vox Quills" - vox.f_style = "Shaved" - for(var/datum/organ/external/limb in vox.organs) - limb.status &= ~(ORGAN_DESTROYED | ORGAN_ROBOT) - - //Now apply cortical stack. - var/datum/organ/external/E = vox.get_organ("head") - var/obj/item/weapon/implant/cortical/I = new(vox) - I.imp_in = vox - I.implanted = 1 - I.part = E - E.implants += I - cortical_stacks += I - - vox.equip_vox_raider() - vox.regenerate_icons() - - raider.objectives = raid_objectives + create_vox(raider) greet_vox(raider) + if(!config.objectives_disabled && raid_objectives) + raider.objectives = raid_objectives + spawn (rand(waittime_l, waittime_h)) send_intercept() -/datum/game_mode/heist/proc/is_raider_crew_safe() +/datum/game_mode/proc/create_vox(var/datum/mind/newraider) + + + var/sounds = rand(2,8) + var/i = 0 + var/newname = "" + + while(i<=sounds) + i++ + newname += pick(list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah")) + + var/mob/living/carbon/human/vox = newraider.current + + vox.real_name = capitalize(newname) + vox.name = vox.real_name + newraider.name = vox.name + vox.age = rand(12,20) + vox.dna.mutantrace = "vox" + vox.set_species("Vox") + vox.languages = list() // Removing language from chargen. + vox.flavor_text = "" + vox.add_language("Vox-pidgin") + vox.h_style = "Short Vox Quills" + vox.f_style = "Shaved" + + for(var/datum/organ/external/limb in vox.organs) + limb.status &= ~(ORGAN_DESTROYED | ORGAN_ROBOT) + + //Generate cortical stack. + var/datum/organ/external/affected = vox.get_organ("head") + + var/obj/item/weapon/implant/cortical/I = new(vox) + I.imp_in = vox + I.implanted = 1 + affected.implants += I + I.part = affected + cortical_stacks += I + + vox.equip_vox_raider() + vox.regenerate_icons() + +/datum/game_mode/proc/is_raider_crew_safe() if(cortical_stacks.len == 0) return 0 @@ -135,7 +135,7 @@ VOX HEIST ROUNDTYPE return 0 return 1 -/datum/game_mode/heist/proc/is_raider_crew_alive() +/datum/game_mode/proc/is_raider_crew_alive() for(var/datum/mind/raider in raiders) if(raider.current) @@ -143,7 +143,7 @@ VOX HEIST ROUNDTYPE return 1 return 0 -/datum/game_mode/heist/proc/forge_vox_objectives() +/datum/game_mode/proc/forge_vox_objectives() var/i = 1 var/max_objectives = pick(2,2,2,2,3,3,3,4) @@ -171,7 +171,7 @@ VOX HEIST ROUNDTYPE return objs -/datum/game_mode/heist/proc/greet_vox(var/datum/mind/raider) +/datum/game_mode/proc/greet_vox(var/datum/mind/raider) raider.current << "\blue You are a Vox Raider, fresh from the Shoal!" raider.current << "\blue The Vox are a race of cunning, sharp-eyed nomadic raiders and traders endemic to the frontier and much of the unexplored galaxy. You and the crew have come to the Exodus for plunder, trade or both." raider.current << "\blue Vox are cowardly and will flee from larger groups, but corner one or find them en masse and they are vicious." @@ -294,4 +294,4 @@ datum/game_mode/proc/auto_declare_completion_heist() //maybe send the player a message that they've gone home/been kidnapped? Someone responsible for vox lore should write that. Del(M) for (var/obj/O in skipjack.contents) - Del(O) //no hiding in lockers or anything + Del(O) //no hiding in lockers or anything \ No newline at end of file diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 53fbcba2f4..484dbd57e7 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -1,3 +1,10 @@ +/* + NUCLEAR EMERGENCY ROUNDTYPE +*/ + +var/global/list/turf/synd_spawn = list() + + /datum/game_mode var/list/datum/mind/syndicates = list() @@ -116,14 +123,6 @@ /datum/game_mode/nuclear/post_setup() - var/list/turf/synd_spawn = list() - - for(var/obj/effect/landmark/A in landmarks_list) - if(A.name == "Syndicate-Spawn") - synd_spawn += get_turf(A) - del(A) - continue - var/obj/effect/landmark/uplinkdevice = locate("landmark*Syndicate-Uplink") //i will be rewriting this shortly var/obj/effect/landmark/nuke_spawn = locate("landmark*Nuclear-Bomb") diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index e287ee845d..514a5b38f9 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -81,6 +81,14 @@ ninjastart += loc del(src) + if("voxstart") + raider_spawn += loc + del(src) + + if("Syndicate-Spawn") + synd_spawn += loc + del(src) + landmarks_list += src return 1 diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index ac67a624e3..0a83ce4903 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -481,6 +481,9 @@ if(ticker.mode.traitors.len) dat += check_role_table("Traitors", ticker.mode.traitors, src) + if(ticker.mode.borers.len) + dat += check_role_table("Cortical Borers", ticker.mode.borers, src) + var/datum/game_mode/mutiny/mutiny = get_mutiny_mode() if(mutiny) dat += mutiny.check_antagonists_ui(src) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index fc147e04fd..95fbc615c8 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -533,7 +533,7 @@ client/proc/one_click_antag() if(ticker.mode && ( istype( ticker.mode,/datum/game_mode/heist ) ) ) var/datum/game_mode/heist/M = ticker.mode - M.cortical_stacks += I + cortical_stacks += I M.raiders[new_vox.mind] = I ticker.mode.traitors += new_vox.mind From dac4e3432e2fe9531f297498961d5ecb09bb27c3 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 30 Jul 2014 21:08:54 +0930 Subject: [PATCH 2/8] Adjusted borer spawns/options/vars. --- code/modules/mob/holder.dm | 11 ++++++---- code/modules/mob/living/carbon/carbon.dm | 11 +++++----- .../modules/mob/living/simple_animal/borer.dm | 21 ++++++++++++------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 747467a66f..78e36dbb66 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -54,14 +54,12 @@ //Mob specific holders. /obj/item/weapon/holder/diona - name = "diona nymph" desc = "It's a tiny plant critter." icon_state = "nymph" origin_tech = "magnets=3;biotech=5" /obj/item/weapon/holder/drone - name = "maintenance drone" desc = "It's a small maintenance robot." icon_state = "drone" @@ -69,8 +67,13 @@ /obj/item/weapon/holder/cat - name = "cat" desc = "It's a cat. Meow." icon_state = "cat" - origin_tech = null \ No newline at end of file + origin_tech = null + +/obj/item/weapon/holder/borer + name = "cortical borer" + desc = "It's a slimy brain slug. Gross." + icon_state = "borer" + origin_tech = "biotech=6" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 0d6aaec965..22989c3f71 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1,6 +1,6 @@ /mob/living/carbon/Life() ..() - + // Increase germ_level regularly if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level germ_level++ @@ -14,7 +14,7 @@ src.nutrition -= HUNGER_FACTOR/10 if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360) src.bodytemperature += 2 - + // Moving around increases germ_level faster if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8)) germ_level++ @@ -206,7 +206,7 @@ if (istype(src,/mob/living/carbon/human) && src:w_uniform) var/mob/living/carbon/human/H = src H.w_uniform.add_fingerprint(M) - + if(lying) src.sleeping = max(0,src.sleeping-5) if(src.sleeping == 0) @@ -216,7 +216,7 @@ else M.visible_message("[M] hugs [src] to make [t_him] feel better!", \ "You hug [src] to make [t_him] feel better!") - + AdjustParalysis(-3) AdjustStunned(-3) AdjustWeakened(-3) @@ -470,9 +470,10 @@ return if(B.chemicals >= 100) - src << "\red Your host twitches and quivers as you rapdly excrete several larvae from your sluglike body." + src << "\red Your host twitches and quivers as you rapdly excretea larva from your sluglike body." visible_message("\red [src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!") B.chemicals -= 100 + B.has_reproduced = 1 new /obj/effect/decal/cleanable/vomit(get_turf(src)) playsound(loc, 'sound/effects/splat.ogg', 50, 1) diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index 0d15aeab54..6033c02a25 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -1,6 +1,7 @@ /mob/living/captive_brain name = "host brain" real_name = "host brain" + universal_understand = 1 /mob/living/captive_brain/say(var/message) @@ -45,6 +46,8 @@ friendly = "prods" wander = 0 pass_flags = PASSTABLE + universal_understand = 1 + holder_type = /obj/item/weapon/holder/borer var/used_dominate var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin. @@ -53,6 +56,11 @@ var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. var/controlling // Used in human death check. var/docile = 0 // Sugar can stop borers from acting. + var/has_reproduced + var/roundstart + +/mob/living/simple_animal/borer/roundstart + roundstart = 1 /mob/living/simple_animal/borer/Life() @@ -96,9 +104,7 @@ ..() truename = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]" host_brain = new/mob/living/captive_brain(src) - - request_player() - + if(!roundstart) request_player() /mob/living/simple_animal/borer/say(var/message) @@ -338,7 +344,7 @@ detatch() -mob/living/simple_animal/borer/proc/detatch() +/mob/living/simple_animal/borer/proc/detatch() if(!host) return @@ -530,7 +536,7 @@ mob/living/simple_animal/borer/proc/detatch() src << text("\blue You have stopped hiding.") //Procs for grabbing players. -mob/living/simple_animal/borer/proc/request_player() +/mob/living/simple_animal/borer/proc/request_player() for(var/mob/dead/observer/O in player_list) if(jobban_isbanned(O, "Syndicate")) continue @@ -538,7 +544,7 @@ mob/living/simple_animal/borer/proc/request_player() if(O.client.prefs.be_special & BE_ALIEN) question(O.client) -mob/living/simple_animal/borer/proc/question(var/client/C) +/mob/living/simple_animal/borer/proc/question(var/client/C) spawn(0) if(!C) return var/response = alert(C, "A cortical borer needs a player. Are you interested?", "Cortical borer request", "Yes", "No", "Never for this round") @@ -549,7 +555,7 @@ mob/living/simple_animal/borer/proc/question(var/client/C) else if (response == "Never for this round") C.prefs.be_special ^= BE_ALIEN -mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate) +/mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate) if(!candidate) return @@ -558,3 +564,4 @@ mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate) src.ckey = candidate.ckey if(src.mind) src.mind.assigned_role = "Cortical Borer" + src.mind.special_role = "Cortical Borer" \ No newline at end of file From e885fc81150eb3283756696d7655784b827ffd1e Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 30 Jul 2014 21:09:25 +0930 Subject: [PATCH 3/8] Added Calamity mode. --- baystation12.dme | 1 + code/game/gamemodes/calamity/calamity.dm | 477 +++++++++++++++++++++++ code/game/gamemodes/objective.dm | 39 +- code/modules/events/event_manager.dm | 4 + 4 files changed, 520 insertions(+), 1 deletion(-) create mode 100644 code/game/gamemodes/calamity/calamity.dm diff --git a/baystation12.dme b/baystation12.dme index a820faad30..f25b66fc1a 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -206,6 +206,7 @@ #include "code\game\gamemodes\blob\blobs\factory.dm" #include "code\game\gamemodes\blob\blobs\node.dm" #include "code\game\gamemodes\blob\blobs\shield.dm" +#include "code\game\gamemodes\calamity\calamity.dm" #include "code\game\gamemodes\changeling\changeling.dm" #include "code\game\gamemodes\changeling\changeling_powers.dm" #include "code\game\gamemodes\changeling\modularchangling.dm" diff --git a/code/game/gamemodes/calamity/calamity.dm b/code/game/gamemodes/calamity/calamity.dm new file mode 100644 index 0000000000..d8f931cfd1 --- /dev/null +++ b/code/game/gamemodes/calamity/calamity.dm @@ -0,0 +1,477 @@ +/* + * This roundtype is a replacement for the meteor round on upstream BS12 - players + * expressed the desire for quick, chaotic and violent rounds, preferrably without + * dependancy on other players. + * I wanted to call it clusterfuck, but I figure that's a bit too overt. Think of + * the children. + * ~ Zuhayr + */ + +//temp, move these somewhere appropriate and change all the other references to use it. +/proc/show_generic_antag_text(var/datum/mind/player) + if(player.current) + player.current << \ + "You are an antagonist! Within the rules, \ + try to act as an opposing force to the crew. Further RP and try to make sure \ + other players have fun! If you are confused or at a loss, always adminhelp, \ + and before taking extreme actions, please try to also contact the administration! \ + Think through your actions and make the roleplay immersive! Please remember all \ + rules aside from those without explicit exceptions apply to antagonists." + +/proc/show_objectives(var/datum/mind/player) + if(!player || !player.current) return + var/obj_count = 1 + player.current << "\blue Your current objectives:" + for(var/datum/objective/objective in player.objectives) + player.current << "Objective #[obj_count]: [objective.explanation_text]" + obj_count++ + +/datum/game_mode/var/list/borers = list() + +/datum/game_mode/calamity + name = "calamity" + config_tag = "calamity" + required_players = 1 + votable = 0 //Remove after testing. + + uplink_welcome = "Syndicate Uplink Console:" + uplink_uses = 10 + + //Possible roundstart antag types. + var/list/atypes = list("syndi","ling","tater","wiz","ninja","vox","slug","cult") + var/list/chosen_atypes = list() + var/list/chosen_candidates = list() + var/list/already_assigned_candidates = list() + + //At one antagonist group per 10 players we are just going to go with tiny groups. + var/max_antags = 3 // Antag groups spawn with this many members. + var/antag_type_ratio = 10 // 1 antag type per this many players. + + var/const/waittime_l = 600 + var/const/waittime_h = 1800 + +/datum/game_mode/calamity/announce() + world << "The current game mode is - Calamity!" + world << "This must be a Thursday. You never could get the hang of Thursdays..." + +/datum/game_mode/calamity/can_start() + + if(!..()) + return 0 + + var/antag_count = player_list.len/antag_type_ratio + + if(!antag_count) + return 1 + + for(var/i=0;i" + + for(var/datum/mind/P in L) + text += "
[P.key] was [P.name] (" + if(P.current) + if(P.current.stat == DEAD) + text += "died" + else + text += "survived" + if(P.current.real_name != P.name) + text += " as [P.current.real_name]" + else + text += "body destroyed" + text += ")" + + if(M.objectives.len) + text += "
Their objectives were:" + var/num = 1 + for(var/datum/objective/O in M.objectives) + text += "
Objective [num]: [O.explanation_text]" + num++ + + //Single antag objective completion. + for(var/list/L in list(src.changelings, src.ninjas, src.borers, src.traitors)) + + if(L.len) + var/datum/mind/M = L[1] + text = "
The [M.special_role][L.len == 1 ? " was" : "s were"]:" + for(var/datum/mind/P in L) + var/num = 1 + text += "
[P.key] was [P.name]." + if(P.objectives.len) + for(var/datum/objective/O in P.objectives) + text += "
Objective [num]: [O.explanation_text]" + num++ + ..() + return 1 + +//Converts chosen atype to an actual role string. +/datum/game_mode/calamity/proc/get_candidate_role_text(var/role) + + var/role_text + + switch(role) + if("syndi") + role_text = "Syndicate Operative" + if("ling") + role_text = "Changeling" + if("tater") + role_text = "Traitor" + if("wiz") + role_text = "Cabalist" + if("ninja") + role_text = "Ninja" + if("vox") + role_text = "Vox Raider" + if("slug") + role_text = "Cortical Borer" + if("cult") + role_text = "Cultist" + + return role_text + +//Grabs candidate lists for various atypes. +/datum/game_mode/calamity/proc/get_role_candidates(var/role) + + var/list/possible_antags = list() + switch(role) + if("syndi") + possible_antags = get_players_for_role(BE_OPERATIVE) + if("ling") + possible_antags = get_players_for_role(BE_CHANGELING) + if("tater") + possible_antags = get_players_for_role(BE_TRAITOR) + if("wiz") + possible_antags = get_players_for_role(BE_WIZARD) + if("ninja") + possible_antags = get_players_for_role(BE_NINJA) + if("vox") + possible_antags = get_players_for_role(BE_RAIDER) + if("slug") + possible_antags = get_players_for_role(BE_ALIEN) + if("cult") + possible_antags = get_players_for_role(BE_CULTIST) + + var/list/filtered_antags = list() + if(possible_antags) + for(var/datum/mind/candidate in possible_antags) + if(!(candidate in already_assigned_candidates)) + filtered_antags |= candidate + already_assigned_candidates |= candidate + + if(filtered_antags && islist(filtered_antags)) + return filtered_antags + else + return list(filtered_antags) + +//Spawning procs for the various antag types. +//A LOT OF THE FOLLOWING IS COPYPASTED FROM OTHER MODES AND NEEDS +//TO BE FIXED UP. NINJA, NUKE AND CULT IN PARTICULAR ARE FUCKING AWFUL. ~ Z +/datum/game_mode/calamity/proc/spawn_syndicate(var/list/candidates) + + var/obj/effect/landmark/uplinklocker = locate("landmark*Syndicate-Uplink") + var/obj/effect/landmark/nuke_spawn = locate("landmark*Nuclear-Bomb") + + var/nuke_code = "[rand(10000, 99999)]" + var/leader_selected = 0 + var/spawnpos = 1 + + for(var/datum/mind/player in candidates) + + syndicates += player + + if(spawnpos > synd_spawn.len) + spawnpos = 1 + player.current.loc = synd_spawn[spawnpos] + + player.current.real_name = "[syndicate_name()] Operative" + spawn(0) + NukeNameAssign(player) + + if(!config.objectives_disabled) + forge_syndicate_objectives(player) + else + show_generic_antag_text(player) + + greet_syndicate(player) + equip_syndicate(player.current) + + if(!leader_selected) + prepare_syndicate_leader(player, nuke_code) + leader_selected = 1 + + spawnpos++ + update_synd_icons_added(player) + + update_all_synd_icons() + + if(uplinklocker) + new /obj/structure/closet/syndicate/nuclear(uplinklocker.loc) + if(nuke_spawn && synd_spawn.len > 0) + var/obj/machinery/nuclearbomb/the_bomb = new /obj/machinery/nuclearbomb(nuke_spawn.loc) + the_bomb.r_code = nuke_code + +/datum/game_mode/calamity/proc/spawn_changelings(var/list/candidates) + + for(var/datum/mind/player in candidates) + + changelings += player + grant_changeling_powers(player.current) + player.special_role = "Changeling" + + if(!config.objectives_disabled) + player.objectives += new /datum/objective/escape() + player.objectives += new /datum/objective/survive() + else + show_generic_antag_text(player) + + greet_changeling(player) + +/datum/game_mode/calamity/proc/spawn_traitors(var/list/candidates) + + for(var/datum/mind/player in candidates) + traitors += player + + if(!config.objectives_disabled) + player.objectives += new /datum/objective/escape() + player.objectives += new /datum/objective/survive() + else + show_generic_antag_text(player) + + finalize_traitor(player) + greet_traitor(player) + +/datum/game_mode/calamity/proc/spawn_cabal(var/list/candidates) + + for(var/datum/mind/player in candidates) + wizards += player + + if(!config.objectives_disabled) + player.objectives += new /datum/objective/escape() + player.objectives += new /datum/objective/survive() + else + show_generic_antag_text(player) + + player.current.loc = pick(wizardstart) + + equip_wizard(player.current) + name_wizard(player.current) + greet_wizard(player) + +/datum/game_mode/calamity/proc/spawn_ninja(var/list/candidates) + + //I hate that this is necessary. ~Z + for(var/obj/effect/landmark/L in landmarks_list) + if(L.name == "carpspawn") + ninjastart.Add(L) + + for(var/datum/mind/player in candidates) + ninjas += player + + player.current << browse(null, "window=playersetup") + player.current = create_space_ninja(pick(ninjastart)) + player.current.ckey = player.key + + if(player.current && !(istype(player.current,/mob/living/carbon/human))) return 0 + + //Ninja intro crawl goes here. + + if(!config.objectives_disabled) + player.objectives += new /datum/objective/ninja_highlander() + player.objectives += new /datum/objective/survive() + else + show_generic_antag_text(player) + + //Ninja objective announcement goes here. + + //Set ninja internals. + var/mob/living/carbon/human/N = player.current + N.internal = N.s_store + N.internals.icon_state = "internal1" + if(N.wear_suit && istype(N.wear_suit,/obj/item/clothing/suit/space/space_ninja)) + var/obj/item/clothing/suit/space/space_ninja/S = N.wear_suit + S:randomize_param() + +/datum/game_mode/calamity/proc/spawn_vox_raiders(var/list/candidates) + + //Create objectives. + var/list/raid_objectives = forge_vox_objectives() + + //Create raiders. + for(var/datum/mind/player in candidates) + raiders += player + + //Place them on the shuttle. + var/index = 1 + if(index > raider_spawn.len) + index = 1 + player.current.loc = raider_spawn[index] + index++ + + if(!config.objectives_disabled) + player.objectives = raid_objectives + + //Equip them. + create_vox(player) + greet_vox(player) + + player.current << "Your crew is transporting cortical stacks and critical resources back to the Shoal.\ + No delay or concession can be tolerated. Even putting holes in the station pales in comparison to failure." + + spawn (rand(waittime_l, waittime_h)) + send_intercept() + ..() + +/datum/game_mode/calamity/proc/spawn_borers(var/list/candidates) + + var/list/possible_hosts = list() + for(var/mob/living/carbon/human/H in mob_list) + if(!(H.species.flags & IS_SYNTHETIC)) + possible_hosts += H + + for(var/datum/mind/player in candidates) + + if(!possible_hosts || possible_hosts.len) + break + + borers += player + var/mob/living/carbon/human/target_host = pick(possible_hosts) + possible_hosts -= target_host + + var/mob/living/simple_animal/borer/roundstart/B = new(target_host) + + player.current = B + B.mind = player + B.key = player.key + player.assigned_role = "Cortical Borer" + player.special_role = "Cortical Borer" + + B.host = target_host + B.host_brain.name = target_host.name + B.host_brain.real_name = target_host.real_name + + var/datum/organ/external/head = target_host.get_organ("head") + head.implants += B + + player.current << "\blue You are a cortical borer! You are a brain slug that worms its way \ + into the head of its victim, lurking out of sight until it needs to take control." + player.current << "You can speak to your victim with say, to other borers with say ;, and use your Alien tab for abilities." + + if(!config.objectives_disabled) + player.objectives += new /datum/objective/borer_survive() + player.objectives += new /datum/objective/borer_reproduce() + player.objectives += new /datum/objective/escape() + show_objectives(player) + else + show_generic_antag_text(player) + +/datum/game_mode/calamity/proc/spawn_cultists(var/list/candidates) + + //Prune the list. + var/list/jobs_to_skip = list("Chaplain","AI", "Cyborg", "Lawyer", "Head of Security", "Captain") + if(config.protect_roles_from_antagonist) + jobs_to_skip += list("Security Officer", "Warden", "Detective") + + //Make cult objectives. + var/cult_objectives = list() + cult_objectives += new /datum/objective/cult_summon() + + //Actually spawn cultists. + for(var/datum/mind/player in candidates) + + for(var/job in jobs_to_skip) + if(player.assigned_role == job) + continue + + cult += player + equip_cultist(player.current) + grant_runeword(player.current) + update_cult_icons_added(player) + player.current << "\blue You are a member of the cult! Your dark masters have sent you forth to serve their vile will." + player.current << "\red This station sails above a weeping tear in the Cosmos. Bring the Geometer of Blood forth." + + if(!config.objectives_disabled) + + for(var/datum/objective/O in cult_objectives) + player.objectives += O + + player.objectives += new /datum/objective/escape() + player.objectives += new /datum/objective/survive() + show_objectives(player) + else + show_generic_antag_text(player) + player.special_role = "Cultist" \ No newline at end of file diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 3d1f814094..b7c44a1e3e 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -930,4 +930,41 @@ datum/objective/heist/inviolate_death explanation_text = "Follow the Inviolate. Minimise death and loss of resources." check_completion() if(vox_kills > MAX_VOX_KILLS) return 0 - return 1 \ No newline at end of file + return 1 + +//Borer objective(s). + +/datum/objective/borer_survive + explanation_text = "Survive in a host until the end of the round." + +/datum/objective/borer_survive/check_completion() + if(owner) + var/mob/living/simple_animal/borer/B = owner + if(istype(B) && B.stat < 2 && B.host && B.host.stat < 2) return 1 + return 0 + +/datum/objective/borer_reproduce + explanation_text = "Reproduce at least once." + +/datum/objective/borer_reproduce/check_completion() + if(owner && owner.current) + var/mob/living/simple_animal/borer/B = owner.current + if(istype(B) && B.has_reproduced) return 1 + return 0 + +/datum/objective/ninja_highlander + explanation_text = "You aspire to be a Grand Master of the Spider Clan. Kill all of your fellow acolytes." + +/datum/objective/ninja_highlander/check_completion() + if(owner) + for(var/datum/mind/ninja in ticker.mode.ninjas) + if(ninja.current.stat < 2 || owner == ninja) return 0 + return 1 + return 0 + +/datum/objective/cult_summon + explanation_text = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it." + +/datum/objective/cult_summon/check_completion() + if(locate(/obj/machinery/singularity/narsie/large) in machines) return 1 + return 0 \ No newline at end of file diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm index 52fbc8220a..1311e1c71b 100644 --- a/code/modules/events/event_manager.dm +++ b/code/modules/events/event_manager.dm @@ -30,6 +30,10 @@ var/scheduledEvent = null playercount_modifier = 0.9 if(36 to 100000) playercount_modifier = 0.8 + + if(ticker.mode && ticker.mode.name == "calamity") //Calamity mode lowers the time required between events drastically. + playercount_modifier = playercount_modifier * 0.3 + var/next_event_delay = rand(eventTimeLower, eventTimeUpper) * playercount_modifier scheduledEvent = world.timeofday + next_event_delay log_debug("Next event in [next_event_delay/600] minutes.") From f2393d9465cda8ff8c09f579470a0818587dcd3f Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 30 Jul 2014 21:36:31 +0930 Subject: [PATCH 4/8] Replaces antag intro text and objective announcement with a proc. --- code/datums/mind.dm | 20 ++++------ .../game/gamemodes/autotraitor/autotraitor.dm | 22 +++-------- code/game/gamemodes/calamity/calamity.dm | 39 +++++++++---------- code/game/gamemodes/changeling/changeling.dm | 12 +----- code/game/gamemodes/cult/cult.dm | 3 +- code/game/gamemodes/events/space_ninja.dm | 7 +--- code/game/gamemodes/heist/heist.dm | 9 +---- code/game/gamemodes/meme/meme.dm | 6 +-- code/game/gamemodes/ninja/ninja.dm | 10 ++--- code/game/gamemodes/nuclear/nuclear.dm | 17 +++----- code/game/gamemodes/revolution/revolution.dm | 16 +++----- .../gamemodes/revolution/rp-revolution.dm | 5 +-- .../gamemodes/revolution/rp_revolution.dm | 13 ++----- code/game/gamemodes/traitor/traitor.dm | 9 +---- code/game/gamemodes/wizard/rightandwrong.dm | 6 +-- code/game/gamemodes/wizard/wizard.dm | 11 +----- code/game/machinery/syndicatebeacon.dm | 6 +-- code/game/machinery/wishgranter.dm | 6 +-- code/modules/admin/verbs/onlyone.dm | 5 +-- 19 files changed, 63 insertions(+), 159 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index b749bfb07e..621b1b6bb9 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -564,7 +564,7 @@ datum/mind current << "\red Revolution has been disappointed of your leader traits! You are a regular revolutionary now!" else if(!(src in ticker.mode.revolutionaries)) current << "\red You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!" - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(src) else return ticker.mode.revolutionaries += src @@ -577,7 +577,7 @@ datum/mind ticker.mode.revolutionaries -= src ticker.mode.update_rev_icons_removed(src) current << "\red You have proved your devotion to revoltion! You are a head revolutionary now!" - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(src) else if(!(src in ticker.mode.head_revolutionaries)) current << "\blue You are a member of the revolutionaries' leadership now!" else @@ -656,11 +656,11 @@ datum/mind special_role = "Cultist" current << "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie." current << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back." - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." var/datum/game_mode/cult/cult = ticker.mode if (istype(cult)) if(!config.objectives_disabled) cult.memorize_cult_objectives(src) + show_objectives(src) log_admin("[key_name_admin(usr)] has cult'ed [current].") if("tome") var/mob/living/carbon/human/H = current @@ -701,7 +701,7 @@ datum/mind special_role = "Wizard" //ticker.mode.learn_basic_spells(current) current << "\red You are the Space Wizard!" - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(src) log_admin("[key_name_admin(usr)] has wizard'ed [current].") if("lair") current.loc = pick(wizardstart) @@ -732,8 +732,7 @@ datum/mind ticker.mode.grant_changeling_powers(current) special_role = "Changeling" current << "Your powers are awoken. A flash of memory returns to us...we are a changeling!" - if(config.objectives_disabled) - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(src) log_admin("[key_name_admin(usr)] has changeling'ed [current].") if("autoobjectives") if(!config.objectives_disabled) @@ -774,10 +773,7 @@ datum/mind current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" special_role = "Syndicate" current << "\blue You are a [syndicate_name()] agent!" - if(config.objectives_disabled) - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." - else - ticker.mode.forge_syndicate_objectives(src) + ticker.mode.forge_syndicate_objectives(src) ticker.mode.greet_syndicate(src) log_admin("[key_name_admin(usr)] has nuke op'ed [current].") if("lair") @@ -829,8 +825,8 @@ datum/mind special_role = "traitor" current << "\red You are a traitor!" log_admin("[key_name_admin(usr)] has traitor'ed [current].") - if (config.objectives_disabled) - current << "You have been turned into an antagonist- Within the rules, try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonist." + show_objectives() + if(istype(current, /mob/living/silicon)) var/mob/living/silicon/A = current call(/datum/game_mode/proc/add_law_zero)(A) diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm index 882f161842..898378543d 100644 --- a/code/game/gamemodes/autotraitor/autotraitor.dm +++ b/code/game/gamemodes/autotraitor/autotraitor.dm @@ -136,14 +136,9 @@ newtraitor << "You are now a traitor." newtraitor.mind.special_role = "traitor" newtraitor.hud_updateflag |= 1 << SPECIALROLE_HUD - var/obj_count = 1 - newtraitor << "\blue Your current objectives:" - if(!config.objectives_disabled) - for(var/datum/objective/objective in newtraitor.mind.objectives) - newtraitor << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - else - newtraitor << "You have been selected this round as an antagonist- Within the rules, try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonist." + newtraitor << "You have been selected this round as an antagonist!" + show_objectives(newtraitor.mind) + //else //message_admins("No new traitor being added.") //else @@ -194,14 +189,9 @@ traitors += character.mind character << "\red You are the traitor." character.mind.special_role = "traitor" - if (config.objectives_disabled) - character << "You have been selected this round as an antagonist- Within the rules, try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonist." - else - var/obj_count = 1 - character << "\blue Your current objectives:" - for(var/datum/objective/objective in character.mind.objectives) - character << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + character << "You have been selected this round as an antagonist!" + show_objectives(character.mind) + //else //message_admins("New traitor roll failed. No new traitor.") //else diff --git a/code/game/gamemodes/calamity/calamity.dm b/code/game/gamemodes/calamity/calamity.dm index d8f931cfd1..52f6501245 100644 --- a/code/game/gamemodes/calamity/calamity.dm +++ b/code/game/gamemodes/calamity/calamity.dm @@ -7,7 +7,7 @@ * ~ Zuhayr */ -//temp, move these somewhere appropriate and change all the other references to use it. +//temp, move these somewhere appropriate /proc/show_generic_antag_text(var/datum/mind/player) if(player.current) player.current << \ @@ -19,7 +19,13 @@ rules aside from those without explicit exceptions apply to antagonists." /proc/show_objectives(var/datum/mind/player) + if(!player || !player.current) return + + if(config.objectives_disabled) + show_generic_antag_text(player) + return + var/obj_count = 1 player.current << "\blue Your current objectives:" for(var/datum/objective/objective in player.objectives) @@ -262,11 +268,7 @@ spawn(0) NukeNameAssign(player) - if(!config.objectives_disabled) - forge_syndicate_objectives(player) - else - show_generic_antag_text(player) - + forge_syndicate_objectives(player) greet_syndicate(player) equip_syndicate(player.current) @@ -296,9 +298,8 @@ if(!config.objectives_disabled) player.objectives += new /datum/objective/escape() player.objectives += new /datum/objective/survive() - else - show_generic_antag_text(player) + show_objectives(player) greet_changeling(player) /datum/game_mode/calamity/proc/spawn_traitors(var/list/candidates) @@ -309,8 +310,8 @@ if(!config.objectives_disabled) player.objectives += new /datum/objective/escape() player.objectives += new /datum/objective/survive() - else - show_generic_antag_text(player) + + show_objectives(player) finalize_traitor(player) greet_traitor(player) @@ -323,8 +324,8 @@ if(!config.objectives_disabled) player.objectives += new /datum/objective/escape() player.objectives += new /datum/objective/survive() - else - show_generic_antag_text(player) + + show_objectives(player) player.current.loc = pick(wizardstart) @@ -353,8 +354,8 @@ if(!config.objectives_disabled) player.objectives += new /datum/objective/ninja_highlander() player.objectives += new /datum/objective/survive() - else - show_generic_antag_text(player) + + show_objectives(player) //Ninja objective announcement goes here. @@ -435,9 +436,8 @@ player.objectives += new /datum/objective/borer_survive() player.objectives += new /datum/objective/borer_reproduce() player.objectives += new /datum/objective/escape() - show_objectives(player) - else - show_generic_antag_text(player) + + show_objectives(player) /datum/game_mode/calamity/proc/spawn_cultists(var/list/candidates) @@ -471,7 +471,6 @@ player.objectives += new /datum/objective/escape() player.objectives += new /datum/objective/survive() - show_objectives(player) - else - show_generic_antag_text(player) + + show_objectives(player) player.special_role = "Cultist" \ No newline at end of file diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 03780adf36..c3079bf3d5 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -125,23 +125,13 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" changeling.current << "\red You are a changeling!" changeling.current << "\red Use say \":g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them." - if(config.objectives_disabled) - changeling.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." - - if (!config.objectives_disabled) - changeling.current << "You must complete the following tasks:" + show_objectives(changeling) if (changeling.current.mind) if (changeling.current.mind.assigned_role == "Clown") changeling.current << "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself." changeling.current.mutations.Remove(CLUMSY) - if (!config.objectives_disabled) - var/obj_count = 1 - for(var/datum/objective/objective in changeling.objectives) - changeling.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - return /*/datum/game_mode/changeling/check_finished() var/changelings_alive = 0 diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 285a2ac0e3..771b43caa5 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -100,8 +100,7 @@ cult_mind.current << "\blue You are a member of the cult!" if(!config.objectives_disabled) memorize_cult_objectives(cult_mind) - else - cult_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(cult_mind) cult_mind.special_role = "Cultist" spawn (rand(waittime_l, waittime_h)) diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm index 03d9c6a8cd..57ec2bc7ae 100644 --- a/code/game/gamemodes/events/space_ninja.dm +++ b/code/game/gamemodes/events/space_ninja.dm @@ -375,12 +375,7 @@ Malf AIs/silicons aren't added. Monkeys aren't added. Messes with objective comp var/directive = generate_ninja_directive(side) new_ninja << "\blue \nYou are an elite mercenary assassin of the Spider Clan, [new_ninja.real_name]. The dreaded \red SPACE NINJA!\blue You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor. Remember your training (initialize your suit by right clicking on it)! \nYour current directive is: \red [directive]" new_ninja.mind.store_memory("Directive: \red [directive]
") - - var/obj_count = 1 - new_ninja << "\blue Your current objectives:" - for(var/datum/objective/objective in ninja_mind.objectives) - new_ninja << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + show_objectives(new_ninja.mind) sent_ninja_to_station = 1//And we're done. return new_ninja//Return the ninja in case we need to reference them later. diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 475b13c3f7..b8b991f4d4 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -177,14 +177,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' raider.current << "\blue Vox are cowardly and will flee from larger groups, but corner one or find them en masse and they are vicious." raider.current << "\blue Use :V to voxtalk, :H to talk on your encrypted channel, and don't forget to turn on your nitrogen internals!" raider.current << "\red IF YOU HAVE NOT PLAYED A VOX BEFORE, REVIEW THIS THREAD: http://baystation12.net/forums/viewtopic.php?f=6&t=8657." - var/obj_count = 1 - if(!config.objectives_disabled) - for(var/datum/objective/objective in raider.objectives) - raider.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - else - raider.current << "Within the rules, try to act as an opposing force to the crew or come up with other fun ideas. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." - + show_objectives(raider) /datum/game_mode/heist/declare_completion() diff --git a/code/game/gamemodes/meme/meme.dm b/code/game/gamemodes/meme/meme.dm index 71781c48e8..ae4e2dce8f 100644 --- a/code/game/gamemodes/meme/meme.dm +++ b/code/game/gamemodes/meme/meme.dm @@ -131,11 +131,7 @@ /datum/game_mode/proc/greet_meme(var/datum/mind/meme, var/you_are=1) if (you_are) meme.current << "\red You are a meme!" - - var/obj_count = 1 - for(var/datum/objective/objective in meme.objectives) - meme.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + show_objectives(meme) return /datum/game_mode/meme/check_finished() diff --git a/code/game/gamemodes/ninja/ninja.dm b/code/game/gamemodes/ninja/ninja.dm index 33810a2e5b..10cff5eccb 100644 --- a/code/game/gamemodes/ninja/ninja.dm +++ b/code/game/gamemodes/ninja/ninja.dm @@ -56,8 +56,8 @@ if(ninja.current && !(istype(ninja.current,/mob/living/carbon/human))) return 0 if(!config.objectives_disabled) forge_ninja_objectives(ninja) - else - ninja.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(ninja) + var/mob/living/carbon/human/N = ninja.current N.internal = N.s_store N.internals.icon_state = "internal1" @@ -139,11 +139,7 @@ ninja.current << "You are an elite mercenary assassin of the Spider Clan, [ninja.current.real_name]. You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor.\nYour current directive is: \red [directive]\n \blue Try your best to adhere to this." ninja.store_memory("Directive: \red [directive]
") - var/obj_count = 1 - ninja.current << "\blue Your current objectives:" - for(var/datum/objective/objective in ninja.objectives) - ninja.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + show_objectives(ninja) /datum/game_mode/proc/auto_declare_completion_ninja() if(ninjas.len) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 484dbd57e7..8aa8cf3fa6 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -138,8 +138,8 @@ var/global/list/turf/synd_spawn = list() synd_mind.current.real_name = "[syndicate_name()] Operative" // placeholder while we get their actual name spawn(0) NukeNameAssign(synd_mind) - if(!config.objectives_disabled) - forge_syndicate_objectives(synd_mind) + + forge_syndicate_objectives(synd_mind) greet_syndicate(synd_mind) equip_syndicate(synd_mind.current) @@ -187,25 +187,18 @@ var/global/list/turf/synd_spawn = list() /datum/game_mode/proc/forge_syndicate_objectives(var/datum/mind/syndicate) + if (config.objectives_disabled) return + var/datum/objective/nuclear/syndobj = new syndobj.owner = syndicate syndicate.objectives += syndobj - /datum/game_mode/proc/greet_syndicate(var/datum/mind/syndicate, var/you_are=1) if (you_are) syndicate.current << "\blue You are a [syndicate_name()] agent!" - var/obj_count = 1 - if(!config.objectives_disabled) - for(var/datum/objective/objective in syndicate.objectives) - syndicate.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - else - syndicate.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." - return - + show_objectives(syndicate) /datum/game_mode/proc/random_radio_frequency() return 1337 // WHY??? -- Doohl diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 2f04f8266b..fd774975d0 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -118,16 +118,13 @@ rev_mind.objectives += rev_obj /datum/game_mode/proc/greet_revolutionary(var/datum/mind/rev_mind, var/you_are=1) - var/obj_count = 1 + + rev_mind.special_role = "Head Revolutionary" + if (you_are) rev_mind.current << "\blue You are a member of the revolutionaries' leadership!" - if(!config.objectives_disabled) - for(var/datum/objective/objective in rev_mind.objectives) - rev_mind.current << "Objective #[obj_count]: [objective.explanation_text]" - rev_mind.special_role = "Head Revolutionary" - obj_count++ - else - rev_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + + show_objectives(rev_mind) ///////////////////////////////////////////////////////////////////////////////// //This are equips the rev heads with their gear, and makes the clown not clumsy// @@ -198,8 +195,7 @@ revolutionaries += rev_mind rev_mind.current << "\red You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!" rev_mind.special_role = "Revolutionary" - if(config.objectives_disabled) - rev_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(rev_mind) update_rev_icons_added(rev_mind) return 1 ////////////////////////////////////////////////////////////////////////////// diff --git a/code/game/gamemodes/revolution/rp-revolution.dm b/code/game/gamemodes/revolution/rp-revolution.dm index 2fdf8af27c..282864a3fe 100644 --- a/code/game/gamemodes/revolution/rp-revolution.dm +++ b/code/game/gamemodes/revolution/rp-revolution.dm @@ -87,11 +87,8 @@ update_rev_icons_added(rev_mind) for(var/datum/mind/rev_mind in head_revolutionaries) - var/obj_count = 1 rev_mind.current << "\blue You are a member of the revolutionaries' leadership!" - for(var/datum/objective/objective in rev_mind.objectives) - rev_mind.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + show_objectives(rev_mind) spawn (rand(waittime_l, waittime_h)) send_intercept() diff --git a/code/game/gamemodes/revolution/rp_revolution.dm b/code/game/gamemodes/revolution/rp_revolution.dm index 71c34c0d04..cbfe977230 100644 --- a/code/game/gamemodes/revolution/rp_revolution.dm +++ b/code/game/gamemodes/revolution/rp_revolution.dm @@ -78,16 +78,10 @@ send_intercept() /datum/game_mode/revolution/rp_revolution/greet_revolutionary(var/datum/mind/rev_mind, var/you_are=1) - var/obj_count = 1 + rev_mind.special_role = "Head Revolutionary" if (you_are) rev_mind.current << "\blue You are a member of the revolutionaries' leadership!" - if(!config.objectives_disabled) - for(var/datum/objective/objective in rev_mind.objectives) - rev_mind.current << "Objective #[obj_count]: [objective.explanation_text]" - rev_mind.special_role = "Head Revolutionary" - obj_count++ - else - rev_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(rev_mind) // Show each head revolutionary up to 3 candidates var/list/already_considered = list() @@ -113,8 +107,7 @@ revolutionaries += rev_mind rev_mind.current << "\red You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill, capture or convert the heads to win the revolution!" rev_mind.special_role = "Revolutionary" - if(config.objectives_disabled) - rev_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(rev_mind) update_rev_icons_added(rev_mind) H.hud_updateflag |= 1 << SPECIALROLE_HUD return 1 diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 71076aaf28..0c0928dbc1 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -135,14 +135,7 @@ /datum/game_mode/proc/greet_traitor(var/datum/mind/traitor) traitor.current << "You are the traitor." - if (!config.objectives_disabled) - var/obj_count = 1 - for(var/datum/objective/objective in traitor.objectives) - traitor.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - else - traitor.current << "You have been selected this round as an antagonist- Within the rules, try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonist." - return + show_objectives(traitor) /datum/game_mode/proc/finalize_traitor(var/datum/mind/traitor) diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index 23a0416112..ccce7f9bff 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -13,10 +13,8 @@ survive.owner = H.mind H.mind.objectives += survive H << "You are the survivor! Your own safety matters above all else, trust no one and kill anyone who gets in your way. However, armed as you are, now would be the perfect time to settle that score or grab that pair of yellow gloves you've been eyeing..." - var/obj_count = 1 - for(var/datum/objective/OBJ in H.mind.objectives) - H << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ + show_objectives(H.mind) + var/randomize = pick("taser","egun","laser","revolver","detective","smg","nuclear","deagle","gyrojet","pulse","silenced","cannon","doublebarrel","shotgun","combatshotgun","mateba","smg","uzi","crossbow","saw") switch (randomize) if("taser") diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index d28238e28f..b79fe4ba30 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -135,16 +135,7 @@ /datum/game_mode/proc/greet_wizard(var/datum/mind/wizard, var/you_are=1) if (you_are) wizard.current << "\red You are the Space Wizard!" - wizard.current << "The Space Wizards Federation has given you the following tasks:" - if(!config.objectives_disabled) - var/obj_count = 1 - for(var/datum/objective/objective in wizard.objectives) - wizard.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - else - wizard.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." - return - + show_objectives(wizard) /*/datum/game_mode/proc/learn_basic_spells(mob/living/carbon/human/wizard_mob) if (!istype(wizard_mob)) diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 59e24ad3e9..2be8fabf28 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -86,11 +86,7 @@ M << "You have joined the ranks of the Syndicate and become a traitor to the station!" message_admins("[N]/([N.ckey]) has accepted a traitor objective from a syndicate beacon.") - - var/obj_count = 1 - for(var/datum/objective/OBJ in M.mind.objectives) - M << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ + show_objectives(M.mind) src.add_fingerprint(usr) src.updateUsrDialog() diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm index 786468c0c4..2720a1c318 100644 --- a/code/game/machinery/wishgranter.dm +++ b/code/game/machinery/wishgranter.dm @@ -66,11 +66,7 @@ silence.owner = user.mind user.mind.objectives += silence - var/obj_count = 1 - for(var/datum/objective/OBJ in user.mind.objectives) - user << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ - + show_objectives(user.mind) user << "You have a very bad feeling about this." return \ No newline at end of file diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 822043720d..aa99b4bd46 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -20,10 +20,7 @@ H.mind.objectives += hijack_objective H << "You are the traitor." - var/obj_count = 1 - for(var/datum/objective/OBJ in H.mind.objectives) - H << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ + show_objectives(H.mind) for (var/obj/item/I in H) if (istype(I, /obj/item/weapon/implant)) From 70fe00e1c1e99e3d2a473b3d8ffe9bf04ce8f09a Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 30 Jul 2014 21:51:17 +0930 Subject: [PATCH 5/8] Updated borer icons slightly. --- code/modules/mob/holder.dm | 1 - icons/mob/animal.dmi | Bin 180475 -> 181302 bytes icons/obj/objects.dmi | Bin 122711 -> 123082 bytes 3 files changed, 1 deletion(-) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 78e36dbb66..d1adff7de2 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -65,7 +65,6 @@ icon_state = "drone" origin_tech = "magnets=3;engineering=5" - /obj/item/weapon/holder/cat name = "cat" desc = "It's a cat. Meow." diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 0fb7e01d0d757b59dfaa5371e966585d95daee8c..e9886ba8a0f1d8b9c3df280c082f28c3c10afbf2 100644 GIT binary patch delta 16285 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 delta 15452 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 diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index 8900043e3de90ae4d7e62054b298f7a87860b474..23d627a5f1299a68d0ca5bdf4432e012d59cfff3 100644 GIT binary patch delta 7668 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 W;~R=sf&85d07~*|a-}k+pZ*83=)xiZ delta 7294 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 I#LVx10N)GyJpcdz From 0868c344ccaa4e883cbbdc2c567dc567a31f1d90 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 1 Aug 2014 23:50:33 +0930 Subject: [PATCH 6/8] Adjustments and a typo fix. --- code/game/gamemodes/calamity/calamity.dm | 27 ------------------- code/game/gamemodes/game_mode.dm | 25 +++++++++++++++++ code/modules/mob/living/carbon/carbon.dm | 2 +- .../modules/mob/living/simple_animal/borer.dm | 2 ++ 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/code/game/gamemodes/calamity/calamity.dm b/code/game/gamemodes/calamity/calamity.dm index 52f6501245..c2ab3202f4 100644 --- a/code/game/gamemodes/calamity/calamity.dm +++ b/code/game/gamemodes/calamity/calamity.dm @@ -7,33 +7,6 @@ * ~ Zuhayr */ -//temp, move these somewhere appropriate -/proc/show_generic_antag_text(var/datum/mind/player) - if(player.current) - player.current << \ - "You are an antagonist! Within the rules, \ - try to act as an opposing force to the crew. Further RP and try to make sure \ - other players have fun! If you are confused or at a loss, always adminhelp, \ - and before taking extreme actions, please try to also contact the administration! \ - Think through your actions and make the roleplay immersive! Please remember all \ - rules aside from those without explicit exceptions apply to antagonists." - -/proc/show_objectives(var/datum/mind/player) - - if(!player || !player.current) return - - if(config.objectives_disabled) - show_generic_antag_text(player) - return - - var/obj_count = 1 - player.current << "\blue Your current objectives:" - for(var/datum/objective/objective in player.objectives) - player.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - -/datum/game_mode/var/list/borers = list() - /datum/game_mode/calamity name = "calamity" config_tag = "calamity" diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 415d1362be..a566c2d101 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -481,3 +481,28 @@ proc/get_nt_opposed() dudes += man if(dudes.len == 0) return null return pick(dudes) + +//Announces objectives/generic antag text. +/proc/show_generic_antag_text(var/datum/mind/player) + if(player.current) + player.current << \ + "You are an antagonist! Within the rules, \ + try to act as an opposing force to the crew. Further RP and try to make sure \ + other players have fun! If you are confused or at a loss, always adminhelp, \ + and before taking extreme actions, please try to also contact the administration! \ + Think through your actions and make the roleplay immersive! Please remember all \ + rules aside from those without explicit exceptions apply to antagonists." + +/proc/show_objectives(var/datum/mind/player) + + if(!player || !player.current) return + + if(config.objectives_disabled) + show_generic_antag_text(player) + return + + var/obj_count = 1 + player.current << "\blue Your current objectives:" + for(var/datum/objective/objective in player.objectives) + player.current << "Objective #[obj_count]: [objective.explanation_text]" + obj_count++ \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 22989c3f71..4de06df651 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -470,7 +470,7 @@ return if(B.chemicals >= 100) - src << "\red Your host twitches and quivers as you rapdly excretea larva from your sluglike body." + src << "\red Your host twitches and quivers as you rapidly excrete a larva from your sluglike body." visible_message("\red [src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!") B.chemicals -= 100 B.has_reproduced = 1 diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index 6033c02a25..7ffd57e96a 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -1,3 +1,5 @@ +/datum/game_mode/var/list/borers = list() + /mob/living/captive_brain name = "host brain" real_name = "host brain" From 96c70126084f8afe5ce1c0a96ae691e456bd3df6 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 1 Aug 2014 23:54:38 +0930 Subject: [PATCH 7/8] Fixed part of the ninja objective. --- code/game/gamemodes/objective.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index b7c44a1e3e..82619c2796 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -958,7 +958,8 @@ datum/objective/heist/inviolate_death /datum/objective/ninja_highlander/check_completion() if(owner) for(var/datum/mind/ninja in ticker.mode.ninjas) - if(ninja.current.stat < 2 || owner == ninja) return 0 + if(ninja != owner) + if(ninja.current.stat < 2) return 0 return 1 return 0 From 9eed4422ff18f1eeb36dea16311891d32d81c7f6 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 2 Aug 2014 00:15:49 +0930 Subject: [PATCH 8/8] Lowercasing some Del() calls. --- code/game/gamemodes/heist/heist.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index b8b991f4d4..320e89d9b2 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -285,6 +285,6 @@ datum/game_mode/proc/auto_declare_completion_heist() var/area/skipjack = locate(/area/shuttle/vox/station) for (var/mob/living/M in skipjack.contents) //maybe send the player a message that they've gone home/been kidnapped? Someone responsible for vox lore should write that. - Del(M) + del(M) for (var/obj/O in skipjack.contents) - Del(O) //no hiding in lockers or anything \ No newline at end of file + del(O) //no hiding in lockers or anything \ No newline at end of file