From 3eb4ad0ed599bcbecd027f510e72eb2dae7115f4 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Tue, 24 Sep 2019 18:15:05 -0400 Subject: [PATCH] Maintainers Have No Sense of Right or Wrong (#12381) --- code/__DEFINES/misc.dm | 3 + code/game/gamemodes/objective.dm | 48 +++ code/game/gamemodes/wizard/rightandwrong.dm | 325 +++++++++--------- code/game/gamemodes/wizard/spellbook.dm | 36 +- code/modules/admin/secrets.dm | 4 +- code/modules/admin/topic.dm | 28 +- .../antagonists/survivalist/survivalist.dm | 41 +++ code/modules/mob/new_player/new_player.dm | 5 + paradise.dme | 1 + 9 files changed, 295 insertions(+), 196 deletions(-) create mode 100644 code/modules/antagonists/survivalist/survivalist.dm diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index a9e43b7c3a0..7dd5fc5a609 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -417,3 +417,6 @@ #define ENGTYPE_SING "Singularity" #define ENGTYPE_SM "Supermatter" #define ENGTYPE_TESLA "Tesla" + +#define SUMMON_GUNS "guns" +#define SUMMON_MAGIC "magic" \ No newline at end of file diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 42ebb351e42..8bdee684ae1 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -506,6 +506,54 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu return 0 return 1 +/datum/objective/steal_five_of_type + explanation_text = "Steal at least five items!" + var/list/wanted_items = list() + +/datum/objective/steal_five_of_type/New() + ..() + wanted_items = typecacheof(wanted_items) + +/datum/objective/steal_five_of_type/check_completion() + var/stolen_count = 0 + if(!isliving(owner.current)) + return FALSE + var/list/all_items = owner.current.GetAllContents() //this should get things in cheesewheels, books, etc. + for(var/obj/I in all_items) //Check for wanted items + if(is_type_in_typecache(I, wanted_items)) + stolen_count++ + return stolen_count >= 5 + +/datum/objective/steal_five_of_type/summon_guns + explanation_text = "Steal at least five guns!" + wanted_items = list(/obj/item/gun) + +/datum/objective/steal_five_of_type/summon_magic + explanation_text = "Steal at least five magical artefacts!" + wanted_items = list() + +/datum/objective/steal_five_of_type/summon_magic/New() + wanted_items = GLOB.summoned_magic_objectives + ..() + +/datum/objective/steal_five_of_type/summon_magic/check_completion() + var/stolen_count = 0 + if(!isliving(owner.current)) + return FALSE + var/list/all_items = owner.current.GetAllContents() //this should get things in cheesewheels, books, etc. + for(var/obj/I in all_items) //Check for wanted items + if(istype(I, /obj/item/spellbook) && !istype(I, /obj/item/spellbook/oneuse)) + var/obj/item/spellbook/spellbook = I + if(spellbook.uses) //if the book still has powers... + stolen_count++ //it counts. nice. + if(istype(I, /obj/item/spellbook/oneuse)) + var/obj/item/spellbook/oneuse/oneuse = I + if(!oneuse.used) + stolen_count++ + else if(is_type_in_typecache(I, wanted_items)) + stolen_count++ + return stolen_count >= 5 + /datum/objective/blood /datum/objective/blood/proc/gen_amount_goal(low = 150, high = 400) target_amount = rand(low,high) diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index e69a4b7ec79..76ac6dc603f 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -1,170 +1,169 @@ +//In this file: Summon Magic/Summon Guns/Summon Events +// 1 in 50 chance of getting something really special. +#define SPECIALIST_MAGIC_PROB 2 -/mob/proc/rightandwrong(summon_type, revolver_fight = FALSE, fake_revolver_fight = FALSE) //0 = Summon Guns, 1 = Summon Magic - var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car","boltaction","arg","uzi","turret","pulsecarbine","decloner","mindflayer","kinetic","advplasmacutter","wormhole","wt550","grenadelauncher","medibeam", "fakerevolver") - var/list/magiclist = list("fireball","smoke","blind","mindswap","forcewall","knock","horsemask","charge", "summonitem", "wandnothing", "wanddeath", "wandresurrection", "wandpolymorph", "wandteleport", "wanddoor", "wandfireball", "staffhealing", "armor", "scrying", "staffdoor", "special","voodoo","special") - var/list/magicspeciallist = list("staffchange","staffanimation", "wandbelt", "contract", "staffchaos","necromantic") +GLOBAL_LIST_INIT(summoned_guns, list( + /obj/item/gun/energy/disabler, + /obj/item/gun/energy/gun, + /obj/item/gun/energy/gun/advtaser, + /obj/item/gun/energy/laser, + /obj/item/gun/projectile/revolver, + /obj/item/gun/projectile/revolver/detective, + /obj/item/gun/projectile/automatic/pistol/deagle/camo, + /obj/item/gun/projectile/automatic/gyropistol, + /obj/item/gun/energy/pulse, + /obj/item/gun/projectile/automatic/pistol, + /obj/item/gun/projectile/revolver/doublebarrel, + /obj/item/gun/projectile/shotgun, + /obj/item/gun/projectile/shotgun/automatic/combat, + /obj/item/gun/projectile/automatic/ar, + /obj/item/gun/projectile/revolver/mateba, + /obj/item/gun/projectile/shotgun/boltaction, + /obj/item/gun/projectile/automatic/mini_uzi, + /obj/item/gun/energy/lasercannon, + /obj/item/gun/energy/kinetic_accelerator/crossbow/large, + /obj/item/gun/energy/gun/nuclear, + /obj/item/gun/projectile/automatic/proto, + /obj/item/gun/projectile/automatic/c20r, + /obj/item/gun/projectile/automatic/l6_saw, + /obj/item/gun/projectile/automatic/m90, + /obj/item/gun/energy/alien, + /obj/item/gun/energy/gun/turret, + /obj/item/gun/energy/pulse/carbine, + /obj/item/gun/energy/decloner, + /obj/item/gun/energy/mindflayer, + /obj/item/gun/energy/kinetic_accelerator, + /obj/item/gun/energy/plasmacutter/adv, + /obj/item/gun/energy/wormhole_projector, + /obj/item/gun/projectile/automatic/wt550, + /obj/item/gun/projectile/automatic/shotgun/bulldog, + /obj/item/gun/projectile/revolver/grenadelauncher, + /obj/item/gun/projectile/revolver/golden, + /obj/item/gun/projectile/automatic/sniper_rifle, + /obj/item/gun/medbeam, + /obj/item/gun/energy/laser/scatter)) - to_chat(usr, "You summoned [summon_type ? "magic" : "guns"]!") - message_admins("[key_name_admin(usr)] summoned [summon_type ? "magic" : "guns"]! ([revolver_fight ? "Revolver duel!" : ""] [fake_revolver_fight ? "Suicidal revolver duel!" : ""])") +//if you add anything that isn't covered by the typepaths below, add it to summon_magic_objective_types +GLOBAL_LIST_INIT(summoned_magic, list( + /obj/item/spellbook/oneuse/fireball, + /obj/item/spellbook/oneuse/smoke, + /obj/item/spellbook/oneuse/blind, + /obj/item/spellbook/oneuse/mindswap, + /obj/item/spellbook/oneuse/forcewall, + /obj/item/spellbook/oneuse/knock, + /obj/item/spellbook/oneuse/horsemask, + /obj/item/spellbook/oneuse/charge, + /obj/item/spellbook/oneuse/summonitem, + /obj/item/gun/magic/wand, + /obj/item/gun/magic/wand/death, + /obj/item/gun/magic/wand/resurrection, + /obj/item/gun/magic/wand/polymorph, + /obj/item/gun/magic/wand/teleport, + /obj/item/gun/magic/wand/door, + /obj/item/gun/magic/wand/fireball, + /obj/item/gun/magic/staff/healing, + /obj/item/gun/magic/staff/door, + /obj/item/scrying, + /obj/item/voodoo, + /obj/item/clothing/suit/space/hardsuit/wizard, + /obj/item/immortality_talisman, + /obj/item/melee/ghost_sword)) + +GLOBAL_LIST_INIT(summoned_special_magic, list( + /obj/item/gun/magic/staff/change, + /obj/item/gun/magic/staff/animate, + /obj/item/storage/belt/wands/full, + /obj/item/contract, + /obj/item/gun/magic/staff/chaos, + /obj/item/necromantic_stone, + /obj/item/blood_contract)) + +//everything above except for single use spellbooks, because they are counted separately (and are for basic bitches anyways) +GLOBAL_LIST_INIT(summoned_magic_objectives, list( + /obj/item/contract, + /obj/item/blood_contract, + /obj/item/clothing/suit/space/hardsuit/wizard, + /obj/item/gun/magic, + /obj/item/immortality_talisman, + /obj/item/melee/ghost_sword, + /obj/item/necromantic_stone, + /obj/item/scrying, + /obj/item/spellbook, + /obj/item/storage/belt/wands/full, + /obj/item/voodoo)) + +// If true, it's the probability of triggering "survivor" antag. +GLOBAL_VAR_INIT(summon_guns_triggered, FALSE) +GLOBAL_VAR_INIT(summon_magic_triggered, FALSE) + +/proc/give_guns(mob/living/carbon/human/H) + if(H.stat == DEAD || !(H.client)) + return + if(H.mind) + if(iswizard(H)) + return + + if(prob(GLOB.summon_guns_triggered) && !(H.mind in SSticker.mode.traitors)) + SSticker.mode.traitors += H.mind + + H.mind.add_antag_datum(/datum/antagonist/survivalist/guns) + H.create_attack_log("was made into a survivalist, and trusts no one!") + + var/gun_type = pick(GLOB.summoned_guns) + var/obj/item/gun/G = new gun_type(get_turf(H)) + playsound(get_turf(H),'sound/magic/summon_guns.ogg', 50, TRUE) + + var/in_hand = H.put_in_hands(G) // not always successful + + to_chat(H, "\A [G] appears [in_hand ? "in your hand" : "at your feet"]!") + +/proc/give_magic(mob/living/carbon/human/H) + if(H.stat == DEAD || !(H.client)) + return + if(H.mind) + if(iswizard(H)) + return + + if(prob(GLOB.summon_magic_triggered) && !(H.mind in SSticker.mode.traitors)) + SSticker.mode.traitors += H.mind + + H.mind.add_antag_datum(/datum/antagonist/survivalist/magic) + H.create_attack_log("was made into a survivalist, and trusts no one!") + + var/magic_type = pick(GLOB.summoned_magic) + var/lucky = FALSE + if(prob(SPECIALIST_MAGIC_PROB)) + magic_type = pick(GLOB.summoned_special_magic) + lucky = TRUE + + var/obj/item/M = new magic_type(get_turf(H)) + playsound(get_turf(H),'sound/magic/summon_magic.ogg', 50, TRUE) + + var/in_hand = H.put_in_hands(M) + + to_chat(H, "\A [M] appears [in_hand ? "in your hand" : "at your feet"]!") + if(lucky) + to_chat(H, "You feel incredibly lucky.") + +/proc/rightandwrong(summon_type, mob/user, survivor_probability) + if(user) //in this case either someone holding a spellbook or a badmin + to_chat(user, "You summoned [summon_type]!") + message_admins("[ADMIN_LOOKUPFLW(user)] summoned [summon_type]!") + log_game("[key_name(user)] summoned [summon_type]!") + + if(summon_type == SUMMON_MAGIC) + GLOB.summon_magic_triggered = survivor_probability + else if(summon_type == SUMMON_GUNS) + GLOB.summon_guns_triggered = survivor_probability + else + CRASH("Bad summon_type given: [summon_type]") for(var/mob/living/carbon/human/H in GLOB.player_list) - if(H.stat == 2 || !(H.client)) + var/turf/T = get_turf(H) + if(T && is_away_level(T.z)) continue - if(H.mind) - if(H.mind.special_role == SPECIAL_ROLE_WIZARD || H.mind.special_role == SPECIAL_ROLE_WIZARD_APPRENTICE) - continue - var/randomizeguns = pick(gunslist) - var/randomizemagic = pick(magiclist) - var/randomizemagicspecial = pick(magicspeciallist) - if(revolver_fight) - randomizeguns = "revolver" - if(fake_revolver_fight) - if(prob(50)) - randomizeguns = "revolver" - else - randomizeguns = "fakerevolver" - if(!summon_type) - switch(randomizeguns) - if("taser") - new /obj/item/gun/energy/gun/advtaser(get_turf(H)) - if("egun") - new /obj/item/gun/energy/gun(get_turf(H)) - if("laser") - new /obj/item/gun/energy/laser(get_turf(H)) - if("revolver") - new /obj/item/gun/projectile/revolver(get_turf(H)) - if("detective") - new /obj/item/gun/projectile/revolver/detective(get_turf(H)) - if("deagle") - new /obj/item/gun/projectile/automatic/pistol/deagle/camo(get_turf(H)) - if("gyrojet") - new /obj/item/gun/projectile/automatic/gyropistol(get_turf(H)) - if("pulse") - new /obj/item/gun/energy/pulse(get_turf(H)) - if("suppressed") - new /obj/item/gun/projectile/automatic/pistol(get_turf(H)) - new /obj/item/suppressor(get_turf(H)) - if("doublebarrel") - new /obj/item/gun/projectile/revolver/doublebarrel(get_turf(H)) - if("shotgun") - new /obj/item/gun/projectile/shotgun(get_turf(H)) - if("combatshotgun") - new /obj/item/gun/projectile/shotgun/automatic/combat(get_turf(H)) - if("arg") - new /obj/item/gun/projectile/automatic/ar(get_turf(H)) - if("mateba") - new /obj/item/gun/projectile/revolver/mateba(get_turf(H)) - if("boltaction") - new /obj/item/gun/projectile/shotgun/boltaction(get_turf(H)) - if("uzi") - new /obj/item/gun/projectile/automatic/mini_uzi(get_turf(H)) - if("cannon") - new /obj/item/gun/energy/lasercannon(get_turf(H)) - if("crossbow") - new /obj/item/gun/energy/kinetic_accelerator/crossbow/large(get_turf(H)) - if("nuclear") - new /obj/item/gun/energy/gun/nuclear(get_turf(H)) - if("sabr") - new /obj/item/gun/projectile/automatic/proto(get_turf(H)) - if("bulldog") - new /obj/item/gun/projectile/automatic/shotgun/bulldog(get_turf(H)) - if("c20r") - new /obj/item/gun/projectile/automatic/c20r(get_turf(H)) - if("saw") - new /obj/item/gun/projectile/automatic/l6_saw(get_turf(H)) - if("car") - new /obj/item/gun/projectile/automatic/m90(get_turf(H)) - if("turret") - new /obj/item/gun/energy/gun/turret(get_turf(H)) - if("pulsecarbine") - new /obj/item/gun/energy/pulse/carbine(get_turf(H)) - if("decloner") - new /obj/item/gun/energy/decloner(get_turf(H)) - if("mindflayer") - new /obj/item/gun/energy/mindflayer(get_turf(H)) - if("kinetic") - new /obj/item/gun/energy/kinetic_accelerator(get_turf(H)) - if("advplasmacutter") - new /obj/item/gun/energy/plasmacutter/adv(get_turf(H)) - if("wormhole") - new /obj/item/gun/energy/wormhole_projector(get_turf(H)) - if("wt550") - new /obj/item/gun/projectile/automatic/wt550(get_turf(H)) - if("grenadelauncher") - new /obj/item/gun/projectile/revolver/grenadelauncher(get_turf(H)) - if("medibeam") - new /obj/item/gun/medbeam(get_turf(H)) - if("fakerevolver") - new /obj/item/toy/russian_revolver/trick_revolver(get_turf(H)) //lol - - playsound(get_turf(H), 'sound/magic/summon_guns.ogg', 50, 1) + if(summon_type == SUMMON_MAGIC) + give_magic(H) else - switch(randomizemagic) - if("fireball") - new /obj/item/spellbook/oneuse/fireball(get_turf(H)) - if("smoke") - new /obj/item/spellbook/oneuse/smoke(get_turf(H)) - if("blind") - new /obj/item/spellbook/oneuse/blind(get_turf(H)) - if("mindswap") - new /obj/item/spellbook/oneuse/mindswap(get_turf(H)) - if("forcewall") - new /obj/item/spellbook/oneuse/forcewall(get_turf(H)) - if("knock") - new /obj/item/spellbook/oneuse/knock(get_turf(H)) - if("horsemask") - new /obj/item/spellbook/oneuse/horsemask(get_turf(H)) - if("charge") - new /obj/item/spellbook/oneuse/charge(get_turf(H)) - if("summonitem") - new /obj/item/spellbook/oneuse/summonitem(get_turf(H)) - if("wandnothing") - new /obj/item/gun/magic/wand(get_turf(H)) - if("wanddeath") - new /obj/item/gun/magic/wand/death(get_turf(H)) - if("wandresurrection") - new /obj/item/gun/magic/wand/resurrection(get_turf(H)) - if("wandpolymorph") - new /obj/item/gun/magic/wand/polymorph(get_turf(H)) - if("wandteleport") - new /obj/item/gun/magic/wand/teleport(get_turf(H)) - if("wanddoor") - new /obj/item/gun/magic/wand/door(get_turf(H)) - if("wandfireball") - new /obj/item/gun/magic/wand/fireball(get_turf(H)) - if("staffhealing") - new /obj/item/gun/magic/staff/healing(get_turf(H)) - if("staffdoor") - new /obj/item/gun/magic/staff/door(get_turf(H)) - if("armor") - new /obj/item/clothing/suit/space/hardsuit/wizard(get_turf(H)) - if("scrying") - new /obj/item/scrying(get_turf(H)) - if(!(XRAY in H.mutations)) - H.mutations.Add(XRAY) - H.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS) - H.see_in_dark = 8 - H.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - H.update_sight() - to_chat(H, "The walls suddenly disappear.") - if("voodoo") - new /obj/item/voodoo(get_turf(H)) - if("special") - magiclist -= "special" //only one super OP item per summoning max - switch(randomizemagicspecial) - if("staffchange") - new /obj/item/gun/magic/staff/change(get_turf(H)) - if("staffanimation") - new /obj/item/gun/magic/staff/animate(get_turf(H)) - if("wandbelt") - new /obj/item/storage/belt/wands/full(get_turf(H)) - if("contract") - new /obj/item/contract(get_turf(H)) - if("staffchaos") - new /obj/item/gun/magic/staff/chaos(get_turf(H)) - if("necromantic") - new /obj/item/necromantic_stone(get_turf(H)) - to_chat(H, "You suddenly feel lucky.") - - playsound(get_turf(H), 'sound/magic/summon_magic.ogg', 50, 1) + give_guns(H) \ No newline at end of file diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 56cc3594ee2..75c15c633bc 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -295,11 +295,11 @@ /datum/spellbook_entry/summon name = "Summon Stuff" category = "Rituals" - refundable = 0 + refundable = FALSE buy_word = "Cast" - var/active = 0 + var/active = FALSE -/datum/spellbook_entry/summon/CanBuy(var/mob/living/carbon/human/user,var/obj/item/spellbook/book) +/datum/spellbook_entry/summon/CanBuy(mob/living/carbon/human/user, obj/item/spellbook/book) return ..() && !active /datum/spellbook_entry/summon/GetInfo() @@ -337,8 +337,7 @@ /datum/spellbook_entry/summon/guns name = "Summon Guns" - desc = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill you. Just be careful not to stand still too long! You will also receive 1 extra point to use in your spellbook." - cost = 0 + desc = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill you. There is a good chance that they will shoot each other first." log_name = "SG" /datum/spellbook_entry/summon/guns/IsSpellAvailable() @@ -349,18 +348,17 @@ else return TRUE -/datum/spellbook_entry/summon/guns/Buy(var/mob/living/carbon/human/user,var/obj/item/spellbook/book) +/datum/spellbook_entry/summon/guns/Buy(mob/living/carbon/human/user, obj/item/spellbook/book) feedback_add_details("wizard_spell_learned", log_name) - user.rightandwrong(0) - book.uses += 1 - active = 1 - to_chat(user, "You have cast summon guns and gained an extra charge for your spellbook.") - return 1 + rightandwrong(SUMMON_GUNS, user, 10) + active = TRUE + playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, TRUE) + to_chat(user, "You have cast summon guns!") + return TRUE /datum/spellbook_entry/summon/magic name = "Summon Magic" - desc = "Share the wonders of magic with the crew and show them why they aren't to be trusted with it at the same time. You will also receive 1 extra point to use in your spellbook." - cost = 0 + desc = "Share the wonders of magic with the crew and show them why they aren't to be trusted with it at the same time." log_name = "SU" /datum/spellbook_entry/summon/magic/IsSpellAvailable() @@ -371,13 +369,13 @@ else return TRUE -/datum/spellbook_entry/summon/magic/Buy(var/mob/living/carbon/human/user,var/obj/item/spellbook/book) +/datum/spellbook_entry/summon/magic/Buy(mob/living/carbon/human/user, obj/item/spellbook/book) feedback_add_details("wizard_spell_learned", log_name) - user.rightandwrong(1) - book.uses += 1 - active = 1 - to_chat(user, "You have cast summon magic and gained an extra charge for your spellbook.") - return 1 + rightandwrong(SUMMON_MAGIC, user, 10) + active = TRUE + playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, TRUE) + to_chat(user, "You have cast summon magic!") + return TRUE //Main category - Magical Items /datum/spellbook_entry/item diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index cec31ffc2ac..fe487ae6431 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -113,9 +113,7 @@ Japanese Animes Mode   Egalitarian Station Mode
Summon Guns   - Summon Magic   - Summon Revolver Duel   - Summon Suicidal Revolver Duel + Summon Magic
Roll the Dice

diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 2875c16c137..24b49ad3781 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -37,7 +37,7 @@ return var/ticketID = text2num(href_list["openmentorticket"]) SSmentor_tickets.showDetailUI(usr, ticketID) - + if(href_list["stickyban"]) stickyban(href_list["stickyban"],href_list) @@ -2860,19 +2860,25 @@ if("guns") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","SG") - usr.rightandwrong(FALSE) + var/survivor_probability = 0 + switch(alert("Do you want this to create survivors antagonists?", , "No Antags", "Some Antags", "All Antags!")) + if("Some Antags") + survivor_probability = 25 + if("All Antags!") + survivor_probability = 100 + + rightandwrong(SUMMON_GUNS, usr, survivor_probability) if("magic") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","SM") - usr.rightandwrong(TRUE) - if("revolver") - feedback_inc("admin_secrets_fun_used", 1) - feedback_add_details("admin_secrets_fun_used", "SRD") - usr.rightandwrong(FALSE, revolver_fight = TRUE) - if("fakerevolver") - feedback_inc("admin_secrets_fun_used", 1) - feedback_add_details("admin_secrets_fun_used", "SFD") - usr.rightandwrong(FALSE, fake_revolver_fight = TRUE) + var/survivor_probability = 0 + switch(alert("Do you want this to create survivors antagonists?", , "No Antags", "Some Antags", "All Antags!")) + if("Some Antags") + survivor_probability = 25 + if("All Antags!") + survivor_probability = 100 + + rightandwrong(SUMMON_MAGIC, usr, survivor_probability) if("tdomereset") var/delete_mobs = alert("Clear all mobs?","Confirm","Yes","No","Cancel") if(delete_mobs == "Cancel") diff --git a/code/modules/antagonists/survivalist/survivalist.dm b/code/modules/antagonists/survivalist/survivalist.dm new file mode 100644 index 00000000000..7d08e18834c --- /dev/null +++ b/code/modules/antagonists/survivalist/survivalist.dm @@ -0,0 +1,41 @@ +/datum/antagonist/survivalist + name = "Survivalist" + var/greet_message = "" + +/datum/antagonist/survivalist/proc/forge_objectives() + var/datum/objective/survive/survive = new + survive.owner = owner + objectives += survive + owner.objectives |= objectives + +/datum/antagonist/survivalist/on_gain() + owner.special_role = "survivalist" + forge_objectives() + . = ..() + +/datum/antagonist/survivalist/greet() + to_chat(owner.current, "You are the survivalist! [greet_message]") + owner.announce_objectives() + +/datum/antagonist/survivalist/guns + greet_message = "Your own safety matters above all else, and the only way to ensure your safety is to stockpile weapons! Grab as many guns as possible, by any means necessary. Kill anyone who gets in your way." + +/datum/antagonist/survivalist/guns/forge_objectives() + var/datum/objective/steal_five_of_type/summon_guns/guns = new + guns.owner = owner + objectives += guns + ..() + +/datum/antagonist/survivalist/magic + name = "Amateur Magician" + greet_message = "Grow your newfound talent! Grab as many magical artefacts as possible, by any means necessary. Kill anyone who gets in your way." + +/datum/antagonist/survivalist/magic/greet() + ..() + to_chat(owner.current, "As a wonderful magician, you should remember that spellbooks don't mean anything if they are used up.") + +/datum/antagonist/survivalist/magic/forge_objectives() + var/datum/objective/steal_five_of_type/summon_magic/magic = new + magic.owner = owner + objectives += magic + ..() \ No newline at end of file diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 47a4e4a5d0e..ac8917398c5 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -379,6 +379,11 @@ AnnounceArrival(character, rank, join_message) AddEmploymentContract(character) + if(GLOB.summon_guns_triggered) + give_guns(character) + if(GLOB.summon_magic_triggered) + give_magic(character) + if(!thisjob.is_position_available() && thisjob in SSjobs.prioritized_jobs) SSjobs.prioritized_jobs -= thisjob qdel(src) diff --git a/paradise.dme b/paradise.dme index bdb77b45dd0..554b6f1c041 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1236,6 +1236,7 @@ #include "code\modules\antagonists\_common\antag_hud.dm" #include "code\modules\antagonists\_common\antag_spawner.dm" #include "code\modules\antagonists\_common\antag_team.dm" +#include "code\modules\antagonists\survivalist\survivalist.dm" #include "code\modules\antagonists\wishgranter\wishgranter.dm" #include "code\modules\arcade\arcade_base.dm" #include "code\modules\arcade\arcade_prize.dm"