diff --git a/code/WorkInProgress/Chemistry-Tools.dm b/code/WorkInProgress/Chemistry-Tools.dm index 6c4ec22749a..2d615466035 100644 --- a/code/WorkInProgress/Chemistry-Tools.dm +++ b/code/WorkInProgress/Chemistry-Tools.dm @@ -1458,7 +1458,7 @@ /obj/item/weapon/reagent_containers/food/snacks/monkeyburger name = "monkeyburger" desc = "The cornerstone of every nutritious breakfast." - icon_state = "burger" + icon_state = "hburger" amount = 5 heal_amt = 2 @@ -2050,7 +2050,13 @@ /obj/reagent_dispensers/fueltank/blob_act() explosion(src.loc,0,1,5,7,10) - del(src) + if(src) + del(src) + +/obj/reagent_dispensers/fueltank/ex_act() + explosion(src.loc,-1,0,2) + if(src) + del(src) /obj/reagent_dispensers/beerkeg name = "beer keg" diff --git a/code/datums/diseases/beesease.dm b/code/datums/diseases/beesease.dm index be75835ca5c..ec863a441eb 100644 --- a/code/datums/diseases/beesease.dm +++ b/code/datums/diseases/beesease.dm @@ -15,7 +15,7 @@ if(1) if(prob(2)) affected_mob << "\red You feel like something is moving inside of you" - if(2) //also changes say, see the say.dm + if(2) //also changes say, see say.dm if(prob(2)) affected_mob << "\red You feel like something is moving inside of you" if(prob(2)) diff --git a/code/datums/diseases/wizarditis.dm b/code/datums/diseases/wizarditis.dm index 413cbb13892..2c158f2925c 100644 --- a/code/datums/diseases/wizarditis.dm +++ b/code/datums/diseases/wizarditis.dm @@ -106,6 +106,9 @@ STI KALY - blind if(theareas.Find(AR) || AR.name == "Space") continue theareas += AR + if(!theareas) + return + var/area/thearea = pick(theareas) var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread() @@ -116,6 +119,7 @@ STI KALY - blind var/list/L = list() for(var/turf/T in get_area_turfs(thearea.type)) if(T.z != affected_mob.z) continue + if(T.name == "space") continue if(!T.density) var/clear = 1 for(var/obj/O in T) @@ -125,6 +129,9 @@ STI KALY - blind if(clear) L+=T + if(!L) + return + affected_mob.say("SCYAR NILA [uppertext(thearea.name)]!") affected_mob.loc = pick(L) smoke.start() diff --git a/code/defines/obj/clothing.dm b/code/defines/obj/clothing.dm index 1afec170ce4..bbf4acd6289 100644 --- a/code/defines/obj/clothing.dm +++ b/code/defines/obj/clothing.dm @@ -657,6 +657,20 @@ icon_state = "syndicate" item_state = "space_suit_syndicate" +//Themed space suits for different nuke rounds (WIP) + +/obj/item/clothing/head/helmet/space/pirate + name = "pirate hat" + desc = "Yarr." + icon_state = "pirate" + item_state = "pirate" + +/obj/item/clothing/suit/space/pirate + name = "pirate coat" + desc = "Yarr." + icon_state = "pirate" + item_state = "pirate" + // UNDERS AND BY THAT, NATURALLY I MEAN UNIFORMS/JUMPSUITS /obj/item/clothing/under diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index acc0d6c225e..d50a7941546 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -1072,6 +1072,9 @@ Total SMES charging rate should not exceed total power generation rate, or an ov w_class = 2.0 flags = FPRINT | TABLEPASS | NOSHIELD +/obj/item/weapon/sword/pirate + name = "energy cutlass" + icon_state = "cutlass0" /obj/item/weapon/table_parts name = "table parts" diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index df3fafac01f..9ba199ea838 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -41,6 +41,8 @@ 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/changelingdeathticker = 0 + /datum/game_mode/changeling/announce() world << "The current game mode is - Changeling!" world << "There is an alien changeling on the station. Do not let the changeling succeed!" @@ -152,7 +154,7 @@ intercepttext += " Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:" var/list/possible_modes = list() - possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling") + possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling", "cult") possible_modes -= "[ticker.mode]" var/number = pick(2, 3) var/i = 0 @@ -176,6 +178,17 @@ command_alert("Summary downloaded and printed out at all communications consoles.", "Enemy communication intercept. Security Level Elevated.") world << sound('intercept.ogg') +/datum/game_mode/changeling/check_finished() + if(changeling.current.stat==2) + if(changelingdeathticker>=900) + return 1 + changelingdeathticker++ + + if(changeling.current.stat!=2) + if(changelingdeathticker) + changelingdeathticker = 0 + + return ..() /datum/game_mode/changeling/declare_completion() for(var/datum/mind/changeling in changelings) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index b194e5df359..002ef6ac581 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -1,35 +1,36 @@ -// To add a rev to the list of revolutionaries, make sure it's rev (with if(ticker.mode.name == "revolution)), -// then call ticker.mode:add_revolutionary(_THE_PLAYERS_MIND_) -// nothing else needs to be done, as that proc will check if they are a valid target. -// Just make sure the converter is a head before you call it! -// To remove a rev (from brainwashing or w/e), call ticker.mode:remove_revolutionary(_THE_PLAYERS_MIND_), -// this will also check they're not a head, so it can just be called freely -// If the rev icons start going wrong for some reason, ticker.mode:update_all_rev_icons() can be called to correct them. -// If the game somtimes isn't registering a win properly, then ticker.mode.check_win() isn't being called somewhere. - /datum/game_mode/cult name = "cult" config_tag = "cult" + var/datum/mind/sacrifice_target = null var/list/datum/mind/cult = list() var/finished = 0 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/objectives = list() + var/eldergod = 1 //for the summon god objective + var/const/acolytes_needed = 5 //for the survive objective /datum/game_mode/cult/announce() world << "The current game mode is - Cult!" - world << "Some crewmembers are attempting to start a cult!
\nCultists - Kill the Captain, HoP, RD, CE and HoS. Convert other crewmembers (excluding the heads, security officers and chaplain) to your cause by using the convert rune. Remember - there is no you, there is only the cult.
\nPersonnel - Protect the heads. Destroy the cult either via killing the cultists or brainwashing them with the chaplain's bible.
" + world << "Some crewmembers are attempting to start a cult!
\nCultists - complete your objectives. Convert crewmembers to your cause by using the convert rune. Remember - there is no you, there is only the cult.
\nPersonnel - Do not let the cult succeed in its mission. Brainwashing them with the chaplain's bible reverts them to whatever CentCom-allowed faith they had.
" + +/datum/game_mode/cult/pre_setup() + if(prob(50)) + objectives += "survive" + objectives += "sacrifice" + else + objectives += "eldergod" + objectives += "sacrifice" + return 1 /datum/game_mode/cult/post_setup() var/list/cultists_possible = list() cultists_possible = get_possible_cultists() - var/list/heads = list() - heads = get_living_heads() var/cultists_number = 0 - if(!cultists_possible || !heads) + if(!cultists_possible) world << " \red Not enough players for cult game mode. Restarting world in 5 seconds." sleep(50) world.Reboot() @@ -45,22 +46,37 @@ cultists_possible -= cult cultists_number-- - for(var/datum/mind/cult_mind in cult) - for(var/datum/mind/head_mind in heads) - var/datum/objective/assassinate/cult_obj = new - cult_obj.owner = cult_mind - cult_obj.find_target_by_role(head_mind.assigned_role) - cult_mind.objectives += cult_obj + if("sacrifice" in objectives) + var/list/possible_targets = get_unconvertables() + if(!possible_targets.len) + for(var/mob/living/carbon/human/player in world) + if(player.mind && !cult.Find(player.mind)) + possible_targets += player.mind + + if(possible_targets.len > 0) + sacrifice_target = pick(possible_targets) + + for(var/datum/mind/cult_mind in cult) equip_cultist(cult_mind.current) update_cult_icons_added(cult_mind) - - for(var/datum/mind/cult_mind in cult) - var/obj_count = 1 cult_mind.current << "\blue You are a member of the cult!" - for(var/datum/objective/objective in cult_mind.objectives) - cult_mind.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + for(var/obj_count = 1,obj_count <= objectives.len,obj_count++) + var/explanation + switch(objectives[obj_count]) + if("survive") + explanation = "Our knowledge must live on. Make sure at least [acolytes_needed] acolytes escape on the shuttle to spread their work on an another station." + if("sacrifice") + if(sacrifice_target) + explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. You will need the sacrifice rune (Hell join blood) and three acolytes to do so." + else + explanation = "Free objective." + if("eldergod") + explanation = "Summon Nar-Sie via the use of an appropriate rune. It will only work if nine cultists stand on and around it." + cult_mind.current << "Objective #[obj_count]: [explanation]" + cult_mind.memory += "Objective #[obj_count]: [explanation]
" + cult_mind.current << "The convert rune is join blood self" + cult_mind.memory += "The convert rune is join blood self
" spawn (rand(waittime_l, waittime_h)) send_intercept() @@ -80,29 +96,32 @@ T = foo break if (!T) - cult_mob << "Unfortunately, you weren't able to get a talisman. This is very bad and you should adminhelp immediately. (still, check your backpack. it may have been a mere bug. if you have a piece of bloody paper, all is well" + cult_mob << "Unfortunately, you weren't able to get a talisman. This is very bad and you should adminhelp immediately. (still, check your backpack. it may have been a mere bug. if you have a piece of bloody paper, all is well)" else cult_mob << "You have a talisman in your backpack, one that will help you start the cult on this station. Use it well and remember - there are others." if(!wordtravel) runerandom() var/word=pick("1","2","3","4","5","6","7","8") + var/wordexp switch(word) if("1") - cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordtravel] is travel..." + wordexp = "[wordtravel] is travel..." if("2") - cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordblood] is blood..." + wordexp = "[wordblood] is blood..." if("3") - cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordjoin] is join..." + wordexp = "[wordjoin] is join..." if("4") - cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordhell] is Hell..." + wordexp = "[wordhell] is Hell..." if("5") - cult_mob << "\red You remembered one thing from the dark teachings of your master... [worddestr] is destroy..." + wordexp = "[worddestr] is destroy..." if("6") - cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordtech] is technology..." + wordexp = "[wordtech] is technology..." if("7") - cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordself] is self..." + wordexp = "[wordself] is self..." if("8") - cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordsee] is see..." + wordexp = "[wordsee] is see..." + cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordexp]" + cult_mob.mind.store_memory("You remember one thing: [wordexp]", 0, 0) cultists.Add(cult_mob) /datum/game_mode/cult/send_intercept() @@ -134,20 +153,6 @@ command_alert("Summary downloaded and printed out at all communications consoles.", "Enemy communication intercept. Security Level Elevated.") world << sound('intercept.ogg') - -/datum/game_mode/cult/check_win() - if(check_cult_victory()) - finished = 1 - else if(check_heads_victory()) - finished = 2 - return - -/datum/game_mode/cult/check_finished() - if(finished != 0) - return 1 - else - return 0 - /datum/game_mode/cult/proc/add_cultist(datum/mind/cult_mind) var/list/uncons = get_unconvertables() if(!(cult_mind in cult) && !(cult_mind in uncons)) @@ -228,29 +233,6 @@ else return candidates -/datum/game_mode/cult/proc/get_living_heads() - var/list/heads = list() - - for(var/mob/living/carbon/human/player in world) - if(player.mind) - var/role = player.mind.assigned_role - if(role in list("Captain", "Head of Security", "Head of Personnel", "Chief Engineer", "Research Director")) - heads += player.mind - - return heads - - -/datum/game_mode/cult/proc/get_all_heads() - var/list/heads = list() - - for(var/mob/player in world) - if(player.mind) - var/role = player.mind.assigned_role - if(role in list("Captain", "Head of Security", "Head of Personnel", "Chief Engineer", "Research Director")) - heads += player.mind - - return heads - /datum/game_mode/cult/proc/get_unconvertables() var/list/ucs = list() for(var/mob/living/carbon/human/player in world) @@ -262,29 +244,38 @@ return ucs /datum/game_mode/cult/proc/check_cult_victory() - for(var/datum/mind/cult_mind in cult) - for(var/datum/objective/objective in cult_mind.objectives) - if(!(objective.check_completion())) - return 0 + var/cult_fail = 0 + if(objectives.Find("survive")) + cult_fail += check_survive() //the proc returns 1 if there are not enough cultists on the shuttle, 0 otherwise + if(objectives.Find("eldergod")) + cult_fail += eldergod //1 by default, 0 if the elder god has been summoned at least once + if(objectives.Find("sacrifice")) + if(!sacrificed.Find(sacrifice_target)) //if the target has been sacrificed, ignore this step. otherwise, add 1 to cult_fail + cult_fail++ + return cult_fail //if any objectives aren't met, failure + +/datum/game_mode/cult/proc/check_survive() + var/acolytes_survived = 0 + var/area/shuttle = locate(/area/shuttle/escape/centcom) + for(var/mob/living/carbon/human/C in world) + if(get_turf(C) in shuttle && C.stat!=2 && cult.Find(C.mind)) + acolytes_survived++ + if(acolytes_survived>=acolytes_needed) + return 0 + else return 1 -/datum/game_mode/cult/proc/check_heads_victory() - for(var/datum/mind/cult_mind in cult) - if(cult_mind.current.stat != 2) - return 0 - return 1 - /datum/game_mode/cult/declare_completion() var/text = "" - if(finished == 1) - world << "\red The heads of staff were killed! The cult win!" - else if(finished == 2) - world << "\red The heads of staff managed to stop the cult!" + if(!check_cult_victory()) + world << "\red The cult wins! It has succeeded in serving its dark masters!" + else + world << "\red The staff managed to stop the cult!" world << "The cultists were: " - for(var/datum/mind/cult_nh_mind in cultists) + for(var/datum/mind/cult_nh_mind in cult) if(cult_nh_mind.current) text += "[cult_nh_mind.current.real_name]" if(cult_nh_mind.current.stat == 2) @@ -297,20 +288,29 @@ world << text - world << "The heads of staff were: " - var/list/heads = list() - heads = get_all_heads() - for(var/datum/mind/head_mind in heads) - text = "" - if(head_mind.current) - text += "[head_mind.current.real_name]" - if(head_mind.current.stat == 2) - text += " (Dead)" - else - text += " (Survived!)" - else - text += "[head_mind.key] (character destroyed)" + world << "The cultists' objectives were:" - world << text + for(var/obj_count=1,obj_count <= objectives.len,obj_count++) + var/explanation + switch(objectives[obj_count]) + if("survive") + if(!check_survive()) + explanation = "Make sure at least [acolytes_needed] acolytes escape on the shuttle. \green Success!" + else + explanation = "Make sure at least [acolytes_needed] acolytes escape on the shuttle. \red Failed." + if("sacrifice") + if(!sacrifice_target) + explanation = "Free objective" + else + if(sacrificed.Find(sacrifice_target)) + explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. \green Success!" + else + explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. \red Failed." + if("eldergod") + if(!eldergod) + explanation = "Summon Nar-Sie. \green Success!" + else + explanation = "Summon Nar-Sie. \red Failed." + world << "Objective #[obj_count]: [explanation]" return 1 \ No newline at end of file diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 4b4f3fe6699..679a9f0594c 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -250,7 +250,7 @@ virus_type = /datum/disease/brainrot if("cold") virus_type = /datum/disease/cold - if("rhinovirus") + if("retrovirus") virus_type = /datum/disease/dnaspread if("flu") virus_type = /datum/disease/flu diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm index fe145e59649..173341f875b 100644 --- a/code/game/gamemodes/malfunction/malfunction.dm +++ b/code/game/gamemodes/malfunction/malfunction.dm @@ -55,7 +55,7 @@ intercepttext += " Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:" var/list/possible_modes = list() - possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling") + possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling", "cult") possible_modes -= "[ticker.mode]" var/number = pick(2, 3) var/i = 0 diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 1fcf2aa4b30..78bd4911105 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -194,7 +194,7 @@ intercepttext += " Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:" var/list/possible_modes = list() - possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling") + possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling", "cult") possible_modes -= "nuke" var/number = pick(2, 3) var/i = 0 diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 39c39925cc2..b3513ea2ac7 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -167,4 +167,59 @@ datum else return 0 +/* Isn't suited for global objectives +/*---------CULTIST----------*/ + eldergod + explanation_text = "Summon Nar-Sie via the use of an appropriate rune. It will only work if nine cultists stand on and around it." + + check_completion() + if(eldergod) //global var, defined in rune4.dm + return 1 + return 0 + + survivecult + var/num_cult + + explanation_text = "Our knowledge must live on. Make sure at least 5 acolytes escape on the shuttle to spread their work on an another station." + + check_completion() + if(emergency_shuttle.location<2) + return 0 + + var/cultists_escaped = 0 + + var/area/shuttle/escape/centcom/C = /area/shuttle/escape/centcom + for(var/turf/T in get_area_turfs(C.type)) + for(var/mob/living/carbon/human/H in T) + if(cultists.Find(H)) + cultists_escaped++ + + if(cultists_escaped>=5) + return 1 + + return 0 + + sacrifice //stolen from traitor target objective + + proc/find_target() //I don't know how to make it work with the rune otherwise, so I'll do it via a global var, sacrifice_target, defined in rune15.dm + var/list/possible_targets = call(/datum/game_mode/cult/proc/get_unconvertables)() + + if(possible_targets.len > 0) + sacrifice_target = pick(possible_targets) + + if(sacrifice_target && sacrifice_target.current) + explanation_text = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. You will need the sacrifice rune (Hell join blood) and three acolytes to do so." + else + explanation_text = "Free Objective" + + return sacrifice_target + + check_completion() //again, calling on a global list defined in rune15.dm + if(sacrifice_target.current in sacrificed) + return 1 + else + return 0 + +/*-------ENDOF CULTIST------*/ +*/ \ No newline at end of file diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index eb52e118c8f..9d355cea911 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -142,7 +142,7 @@ intercepttext += " Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:" var/list/possible_modes = list() - possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling") + possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "cult", "changeling") possible_modes -= "[ticker.mode]" var/number = pick(2, 3) var/i = 0 diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 57374c0782b..1ed13dda449 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -150,7 +150,7 @@ intercepttext += " Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:" var/list/possible_modes = list() - possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling") + possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling", "cult") possible_modes -= "[ticker.mode]" var/number = pick(2, 3) var/i = 0 diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 46794b6c2d9..1e30758d351 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -236,7 +236,7 @@ intercepttext += " Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:" var/list/possible_modes = list() - possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling") + possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling", "cult") possible_modes -= "[ticker.mode]" var/number = pick(2, 3) var/i = 0 diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index b36455a2a1c..8b64e611b70 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -611,7 +611,7 @@ Auto Patrol: []"}, if(istype(perp:wear_suit, /obj/item/clothing/suit/wizrobe)) threatcount += 2 - if(perp.mutantrace != "none") + if(perp.mutantrace && perp.mutantrace != "none") threatcount += 2 //Agent cards lower threatlevel when normal idchecking is off. diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 071a4dc471d..a8961d5014d 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -391,7 +391,7 @@ if(ticker.mode.name == "blob" || ticker.mode.name == "Corporate Restructuring" || ticker.mode.name == "sandbox") user << "Under directive 7-10, [station_name()] is quarantined until further notice." return - if(ticker.mode.name == "revolution" || ticker.mode.name == "cult" || ticker.mode.name == "AI malfunction" || ticker.mode.name == "confliction") + if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction" || ticker.mode.name == "confliction") user << "Centcom will not allow the shuttle to be called." return if(ticker.mode.name == "nuclear emergency" && world.time < 6000) diff --git a/code/game/magic/cultist/ritual.dm b/code/game/magic/cultist/ritual.dm index 646e2fa4e58..a000d96d645 100644 --- a/code/game/magic/cultist/ritual.dm +++ b/code/game/magic/cultist/ritual.dm @@ -49,9 +49,10 @@ var/runedec = 0 // see Hell join - See invisible // blood join Hell - Raise dead // blood see destroy - Hide nearby runes -// Hell join blood - Leave your body and ghost around +// Hell travel self - Leave your body and ghost around // blood see travel - Manifest a ghost into a mortal body // Hell tech join - Imbue a rune into a talisman +// Hell blood join - Sacrifice rune examine() if(!cultists.Find(usr)) @@ -115,12 +116,14 @@ var/runedec = 0 return raise() if(word1 == wordblood && word2 == wordsee && word3 == worddestr) return obscure(4) - if(word1 == wordhell && word2 == wordjoin && word3 == wordblood) + if(word1 == wordhell && word2 == wordtravel && word3 == wordself) return ajourney() if(word1 == wordblood && word2 == wordsee && word3 == wordtravel) return manifest() if(word1 == wordhell && word2 == wordtech && word3 == wordjoin) return talisman() + if(word1 == wordhell && word2 == wordblood && word3 == wordjoin) + return sacrifice() else return fizzle() @@ -167,7 +170,7 @@ var/runedec = 0 icon_state = "1" src.icon += rgb(0, 0 , 255) return - if(word1 == wordhell && word2 == wordjoin && word3 == wordblood) + if(word1 == wordhell && word2 == wordtravel && word3 == wordself) icon_state = "6" src.icon += rgb(0, 0 , 255) return @@ -178,6 +181,10 @@ var/runedec = 0 icon_state = "3" src.icon += rgb(0, 0 , 255) return + if(word1 == wordhell && word2 == wordblood && word3 == wordjoin) + icon_state = "[rand(1,6)]" + src.icon += rgb(255, 255, 255) + return icon_state="[rand(1,6)]" //random shape and color for dummy runes src.icon -= rgb(255,255,255) src.icon += rgb(rand(1,255),rand(1,255),rand(1,255)) @@ -197,6 +204,9 @@ var/runedec = 0 var/C = 0 for(var/obj/rune/N in world) C++ + if (!istype(user.loc,/turf)) + user << "\red You do not have enough space to write a proper rune." + return if (C>=26+runedec) //including the useless rune at the secret room, shouldn't count against the limit of 25 runes - Urist switch(alert("The cloth of reality can't take that much of a strain. By creating another rune, you risk locally tearing reality apart, which would prove fatal to you. Do you still wish to scribe the rune?",,"Yes","No")) if("Yes") @@ -250,7 +260,9 @@ var/runedec = 0 runerandom() if(user) var/r - var/list/runes = list("teleport", "tome", "convert", "tear in reality", "emp", "drain", "seer", "raise", "obscure", "astral journey", "manifest", "imbue talisman") + if (!istype(user.loc,/turf)) + user << "\red You do not have enough space to write a proper rune." + var/list/runes = list("teleport", "tome", "convert", "tear in reality", "emp", "drain", "seer", "raise", "obscure", "astral journey", "manifest", "imbue talisman", "sacrifice") r = input("Choose a rune to scribe", "Rune Scribing") in runes switch(r) if("teleport") @@ -314,8 +326,8 @@ var/runedec = 0 if("astral journey") var/obj/rune/R = new /obj/rune(user.loc) R.word1=wordhell - R.word2=wordjoin - R.word3=wordblood + R.word2=wordtravel + R.word3=wordself R.check_icon() if("manifest") var/obj/rune/R = new /obj/rune(user.loc) @@ -329,6 +341,12 @@ var/runedec = 0 R.word2=wordtech R.word3=wordjoin R.check_icon() + if("sacrifice") + var/obj/rune/R = new /obj/rune(user.loc) + R.word1=wordhell + R.word2=wordblood + R.word3=wordjoin + R.check_icon() /obj/item/weapon/paperscrap name = "scrap of paper" @@ -357,7 +375,7 @@ var/runedec = 0 var/uses = 0 attack_self(mob/user as mob) - usr.bruteloss+=20 + usr.bruteloss+=10 switch(imbue) if("newtome") call(/obj/rune/proc/tomesummon)() diff --git a/code/game/magic/cultist/rune15.dm b/code/game/magic/cultist/rune15.dm new file mode 100644 index 00000000000..aa8fb636d61 --- /dev/null +++ b/code/game/magic/cultist/rune15.dm @@ -0,0 +1,18 @@ +var/list/sacrificed = list() + +/obj/rune/proc/sacrifice() + var/culcount = 0 + for(var/mob/living/carbon/human/C in orange(1,src)) + if(cultists.Find(C)) + culcount++ + if(culcount>=3) + for(var/mob/living/carbon/human/S in src.loc) + if(ticker.mode.name == "cult") + if(S == ticker.mode:sacrifice_target.current)//Iunno, check if it's a target + sacrificed += S.mind + S.gib(1) + usr << "\red The Geometer of Blood accepts this sacrifice." + else + usr << "\red The Geometer of Blood does not accept this sacrifice." + return + return fizzle() \ No newline at end of file diff --git a/code/game/magic/cultist/rune3.dm b/code/game/magic/cultist/rune3.dm index c6d13b5fb95..5fb67b6b18f 100644 --- a/code/game/magic/cultist/rune3.dm +++ b/code/game/magic/cultist/rune3.dm @@ -3,13 +3,16 @@ if(cultists.Find(M)) return fizzle() else + if(ticker.mode.name == "cult") + var/list/uncons = call(/datum/game_mode/cult/proc/get_unconvertables)() + if(M.mind in uncons) + return fizzle() + ticker.mode:add_cultist(M.mind) usr.say("Mah'weyh pleggh at e'ntrath!") - cultists.Add(M) for (var/mob/V in viewers(src)) V.show_message("\red [M] writhes in pain as the markings below him glow a bloody red.", 3, "\red You hear an anguished scream.", 2) M << "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root." M << "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." - if(ticker.mode.name == "cult") - ticker.mode:add_cultist(M.mind) + cultists.Add(M) return return fizzle() \ No newline at end of file diff --git a/code/game/magic/cultist/rune4.dm b/code/game/magic/cultist/rune4.dm index b569264141d..4ca8ef8fd9b 100644 --- a/code/game/magic/cultist/rune4.dm +++ b/code/game/magic/cultist/rune4.dm @@ -11,7 +11,8 @@ S.desc = "Your mind begins to bubble and ooze as it tries to comprehend what it sees." S.pixel_x = -89 S.pixel_y = -85 - message_admins("

[key_name_admin(usr)] has summoned a Tear in the Fabric of Reality!", 1) + if(ticker.mode.name == "cult") + ticker.mode:eldergod = 0 return else return fizzle() \ No newline at end of file diff --git a/code/game/magic/cultist/rune7.dm b/code/game/magic/cultist/rune7.dm index d6798fee561..c5e248e1d0b 100644 --- a/code/game/magic/cultist/rune7.dm +++ b/code/game/magic/cultist/rune7.dm @@ -3,8 +3,6 @@ usr.say("Rash'tla sektath mal'zua. Zasan therium vivira. Itonis al'ra matum!") if(usr.see_invisible!=0 && usr.see_invisible!=15) usr << "\red The world beyond flashes your eyes but disappears quickly, as if something is disrupting your vision." - if(usr.see_invisible==15) - return fizzle() else usr << "\red The world beyond opens to your eyes." usr.see_invisible = 15 diff --git a/code/game/magic/cultist/specialtalisman.dm b/code/game/magic/cultist/specialtalisman.dm index db33f54e4a8..e3b471d4687 100644 --- a/code/game/magic/cultist/specialtalisman.dm +++ b/code/game/magic/cultist/specialtalisman.dm @@ -1,4 +1,8 @@ /obj/item/weapon/paper/talisman/proc/supply(var/key) + if (!src.uses) + del(src) + return + var/dat = "There are [src.uses] bloody runes on the parchment.
" dat += "Please choose the chant to be imbued into the fabric of reality.
" dat += "
" @@ -17,10 +21,6 @@ if (usr.stat || usr.restrained() || !in_range(src, usr)) return - if (!src.uses) - del(src) - return - if (href_list["rune"]) switch(href_list["rune"]) if("newtome") diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 6418cbccdbb..ed746ba8fac 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -18,19 +18,25 @@ STUN BATON /obj/item/weapon/sword/attack_self(mob/user as mob) if ((user.mutations & 16) && prob(50)) - user << "\red You accidentally cut yourself with the Sword." + user << "\red You accidentally cut yourself with [src]." user.bruteloss += 5 user.fireloss +=5 src.active = !( src.active ) if (src.active) - user << "\blue The sword is now active." + user << "\blue [src] is now active." src.force = 30 - src.icon_state = "sword1" + if(istype(src,/obj/item/weapon/sword/pirate)) + src.icon_state = "cutlass1" + else + src.icon_state = "sword1" src.w_class = 4 else - user << "\blue The sword can now be concealed." + user << "\blue [src] can now be concealed." src.force = 3 - src.icon_state = "sword0" + if(istype(src,/obj/item/weapon/sword/pirate)) + src.icon_state = "cutlass0" + else + src.icon_state = "sword0" src.w_class = 2 src.add_fingerprint(user) return diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 6683a654727..6e6d7a777ef 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -271,7 +271,8 @@ var/showadminmessages = 1 Blob
Sandbox
Revolution
- Cult
AI Malfunction
+ Cult
+ AI Malfunction
Death Commando Deathmatch
Confliction (TESTING)
Capture The Flag (Beta)

@@ -1149,7 +1150,7 @@ var/showadminmessages = 1 viral_outbreak() message_admins("[key_name_admin(usr)] has triggered a virus outbreak", 1) else - var/list/viruses = list("fake gbs","gbs","magnitis","wizarditis",/*"beesease",*/"brain rot","cold","rhinovirus","flu") + var/list/viruses = list("fake gbs","gbs","magnitis","wizarditis",/*"beesease",*/"brain rot","cold","retrovirus","flu") var/V = input("Choose the virus to spread", "BIOHAZARD") in viruses viral_outbreak(V) message_admins("[key_name_admin(usr)] has triggered a virus outbreak of [V]", 1) @@ -1329,14 +1330,6 @@ var/showadminmessages = 1 if(M) dat += "[M.real_name][M.client ? "" : " (logged out)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" - dat += "" - for(var/datum/mind/N in ticker.mode:get_living_heads()) - var/mob/M = N.current - if(M) - dat += "" - dat += "" - var/turf/mob_loc = get_turf_loc(M) - dat += "" dat += "
Target(s)Location
[M.real_name][M.client ? "" : " (logged out)"][M.stat == 2 ? " (DEAD)" : ""]PM[mob_loc.loc]
" else // i'll finish this later diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 8eeac098e34..cf106d33380 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -66,7 +66,7 @@ if(cultists.Find(corpse) && corpse.ajourn==1 && corpse.health>-100) //checks if it's an astral-journeying cultistm if it is and he's not on an astral journey rune, re-entering won't work var/S=0 for(var/obj/rune/R in world) - if(corpse.loc==R.loc && R.word1 == wordhell && R.word2 == wordjoin && R.word3 == wordblood) + if(corpse.loc==R.loc && R.word1 == wordhell && R.word2 == wordtravel && R.word3 == wordself) S=1 if(!S) usr << "\red The astral cord that ties your body and your spirit has been severed. You are likely to wander the realm beyond until your body is finally dead and thus reunited with you." diff --git a/goonstation.dme b/goonstation.dme index f53895ed686..4c74b5002f6 100644 --- a/goonstation.dme +++ b/goonstation.dme @@ -385,6 +385,7 @@ #include "code\game\magic\cultist\rune12.dm" #include "code\game\magic\cultist\rune13.dm" #include "code\game\magic\cultist\rune14.dm" +#include "code\game\magic\cultist\rune15.dm" #include "code\game\magic\cultist\rune2.dm" #include "code\game\magic\cultist\rune3.dm" #include "code\game\magic\cultist\rune4.dm" diff --git a/icons/changelog.html b/icons/changelog.html index 58b797befb8..f34585bfe8b 100644 --- a/icons/changelog.html +++ b/icons/changelog.html @@ -46,6 +46,18 @@

Changelog

+
Thursday, November 2, 19:11(GMT)
+
    +
  • Finished work on the "cult" gamemode. I'll still add features to it later, but it is safe to be put on secret rotation now.
  • +
  • Added an energy cutlass and made a pirate version of the space suit in preparation for a later nuke update.
  • +
  • Changeling now ends 15 minutes after changeling death, unless he's ressurected.
  • +
  • Further fixing of wizarditis teleporting into space.
  • +
  • Fixed the wise beard sprite.
  • +
  • Fixed missing sprite for monkeyburgers.
  • +
  • Fixed Beepsky automatically adding 2 treason points to EVERYONE.
  • + +
+
Thursday, October 28, 19:30(GMT)
  • Sleepers and disposals now require two seconds to climb inside
  • diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index d62d891ad56..4f2ef099d55 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi index 6632649e468..8dca2f57bff 100644 Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi index 42c8a41ca48..f1d47e8a763 100644 Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 48725f853d9..a7101eba414 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 0b8f955cc51..87676c7eb20 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ