From a404929d1634312e25fac800aaef0d1eb82036a6 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 21 Oct 2015 23:59:59 -0400 Subject: [PATCH 1/5] Multiverse Sword --- code/game/gamemodes/objective.dm | 30 ++ code/game/gamemodes/wizard/artefact.dm | 306 +++++++++++++++++++ code/game/objects/items/weapons/cards_ids.dm | 11 +- code/modules/admin/secrets.dm | 1 + code/modules/admin/topic.dm | 4 + code/modules/admin/verbs/onlyone.dm | 49 ++- 6 files changed, 397 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 96acbacb0e8..fe6a5da9fe2 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -347,6 +347,36 @@ datum/objective/hijack return 0 return 1 +/datum/objective/hijackclone + explanation_text = "Hijack the emergency shuttle by ensuring only you (or your copies) escape." + + check_completion() + if(!owner.current) + return 0 + if(!emergency_shuttle.returned()) + return 0 + + var/area/A = locate(/area/shuttle/escape/centcom) + + for(var/mob/living/player in player_list) //Make sure nobody else is onboard + if(player.mind && player.mind != owner) + if(player.stat != DEAD) + if(istype(player, /mob/living/silicon)) + continue + if(get_area(player) == A) + if(player.real_name != owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/shuttle/floor4)) + return 0 + + for(var/mob/living/player in player_list) //Make sure at least one of you is onboard + if(player.mind && player.mind != owner) + if(player.stat != DEAD) + if(istype(player, /mob/living/silicon)) + continue + if(get_area(player) == A) + if(player.real_name == owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/shuttle/floor4)) + return 1 + return 0 + datum/objective/block explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive." diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index ef0dddac0fa..53fd96d5fc5 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -213,3 +213,309 @@ user << " You can see...everything!" visible_message("[user] stares into [src], their eyes glazing over.") user.ghostize(1) + +/////////////////////Multiverse Blade//////////////////// +var/global/list/multiverse = list() + +/obj/item/weapon/multisword + name = "multiverse sword" + desc = "A weapon capable of conquering the universe and beyond. Activate it to summon copies of yourself from others dimensions to fight by your side." + icon = 'icons/obj/weapons.dmi' + icon_state = "energy_katana" + item_state = "energy_katana" + hitsound = 'sound/weapons/bladeslice.ogg' + flags = CONDUCT + slot_flags = SLOT_BELT + force = 20 + throwforce = 10 + sharp = 1 + edge = 1 + w_class = 2 + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + var/faction = list("unassigned") + var/cooldown = 0 + var/cooldown_between_uses = 400 //time in deciseconds between uses--default of 40 seconds. + var/assigned = "unassigned" + var/evil = TRUE + var/duplicate_self = 0 //Do we want the species randomized along with equipment should the user be duplicated in their entirety? + var/sword_type = /obj/item/weapon/multisword //type of sword to equip. + +/obj/item/weapon/multisword/New() + ..() + multiverse |= src + + +/obj/item/weapon/multisword/Destroy() + multiverse.Remove(src) + return ..() + +/obj/item/weapon/multisword/attack_self(mob/user) + if(user.mind.special_role == "apprentice") + user << "You know better than to touch your teacher's stuff." + return + if(cooldown < world.time) + var/faction_check = 0 + for(var/F in faction) + if(F in user.faction) + faction_check = 1 + break + if(faction_check == 0) + faction = list("[user.real_name]") + assigned = "[user.real_name]" + user.faction = list("[user.real_name]") + user << "You bind the sword to yourself. You can now use it to summon help." + if(!usr.mind.special_role) + if(prob(30)) + user << "With your new found power you could easily conquer the station!" + var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone + hijack_objective.owner = usr.mind + usr.mind.objectives += hijack_objective + hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!" + usr << "Objective #[1]: [hijack_objective.explanation_text]" + ticker.mode.traitors += usr.mind + usr.mind.special_role = "[usr.real_name] Prime" + evil = TRUE + else + user << "With your new found power you could easily defend the station!" + var/datum/objective/survive/new_objective = new /datum/objective/survive + new_objective.owner = usr.mind + new_objective.explanation_text = "Survive, and help defend the innocent from the mobs of multiverse clones." + usr << "Objective #[1]: [new_objective.explanation_text]" + usr.mind.objectives += new_objective + ticker.mode.traitors += usr.mind + usr.mind.special_role = "[usr.real_name] Prime" + evil = FALSE + else + var/list/candidates = get_candidates(BE_WIZARD) + if(candidates.len) + var/client/C = pick(candidates) + spawn_copy(C, get_turf(user.loc), user) + user << "The sword flashes, and you find yourself face to face with...you!" + cooldown = world.time + cooldown_between_uses + for(var/obj/item/weapon/multisword/M in multiverse) + if(M.assigned == assigned) + M.cooldown = cooldown + + else + user << "You fail to summon any copies of yourself. Perhaps you should try again in a bit." + else + user << "[src] is recharging! Keep in mind it shares a cooldown with the swords wielded by your copies." + + +/obj/item/weapon/multisword/proc/spawn_copy(var/client/C, var/turf/T) + var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) + C.prefs.copy_to(M) + M.key = C.key + M.mind.name = usr.real_name + M << "You are an alternate version of [usr.real_name] from another universe! Help them accomplish their goals at all costs." + M.real_name = usr.real_name + M.name = usr.real_name + M.faction = list("[usr.real_name]") + if(duplicate_self) + M.set_species(usr.get_species()) //duplicate the sword user's species. + else + if(prob(50)) + var/list/all_species = list("Human","Unathi","Skrell","Tajaran","Kidan","Golem","Machine","Slime People","Grey","Vulpkanin") + M.set_species(pick(all_species)) + M.dna = usr.dna.Clone() + M.update_body() + M.update_hair() + M.UpdateAppearance() + domutcheck(M, null) + equip_copy(M) + + if(evil) + var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone + hijack_objective.owner = M.mind + M.mind.objectives += hijack_objective + hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!" + M << "Objective #[1]: [hijack_objective.explanation_text]" + M.mind.special_role = "multiverse traveller" + log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] hijack.") + else + var/datum/objective/protect/new_objective = new /datum/objective/protect + new_objective.owner = M.mind + new_objective.target = usr.mind + new_objective.explanation_text = "Protect [usr.real_name], your copy, and help them defend the innocent from the mobs of multiverse clones." + M.mind.objectives += new_objective + M << "Objective #[1]: [new_objective.explanation_text]" + M.mind.special_role = "multiverse traveller" + log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] protect the station.") + +/obj/item/weapon/multisword/proc/equip_copy(var/mob/living/carbon/human/M) + + var/obj/item/weapon/multisword/sword = new sword_type + sword.assigned = assigned + sword.faction = list("[assigned]") + sword.evil = evil + + if(duplicate_self) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_or_collect(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_or_collect(new /obj/item/clothing/under/color/random(M), slot_w_uniform) + M.equip_or_collect(new /obj/item/clothing/shoes/black(M), slot_shoes) + M.equip_to_slot_or_del(sword, slot_r_hand) //Don't duplicate the hands, or duplicate swords could be generated...or weird cases of factionless swords. + else + var/randomize = pick("mobster","roman","wizard","cyborg","syndicate","assistant", "animu", "cultist", "highlander", "clown", "killer", "pirate", "soviet", "officer", "gladiator") + + switch(randomize) + if("mobster") + M.equip_to_slot_or_del(new /obj/item/clothing/head/fedora(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/really_black(M), slot_w_uniform) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("roman") + var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) + M.equip_to_slot_or_del(new hat(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/under/roman(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/roman(M), slot_l_hand) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("wizard") + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/red(M), slot_head) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("cyborg") + if(M.get_species() != "Machine") + for(var/obj/item/organ/O in M.organs) + O.robotize() + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("syndicate") + M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/swat(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M),slot_wear_mask) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("assistant") + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("animu") + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl(M), slot_w_uniform) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("cultist") + M.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("highlander") + M.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/head/beret(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("clown") + M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_l_store) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("killer") + M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/utensil/knife(M), slot_l_store) + M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store) + M.equip_to_slot_or_del(sword, slot_r_hand) + for(var/obj/item/carried_item in M.contents) + if(!istype(carried_item, /obj/item/weapon/implant)) + carried_item.add_blood(M) + + if("pirate") + M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("soviet") + M.equip_to_slot_or_del(new /obj/item/clothing/head/hgpiratecap(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/hgpirate(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("officer") + M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad/beret(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/havana(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/jacket/miljacket(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("gladiator") + M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/gladiator(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/under/gladiator(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) + M.equip_to_slot_or_del(sword, slot_r_hand) + + + else + return + + M.update_icons() + + var/obj/item/weapon/card/id/W = new /obj/item/weapon/card/id + if(duplicate_self) + var/duplicated_access = usr.get_item_by_slot(slot_wear_id) + if(duplicated_access && istype(duplicated_access, /obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/duplicated_id = duplicated_access + W.access = duplicated_id.access + W.icon_state = duplicated_id.icon_state + else + W.access += access_maint_tunnels + W.icon_state = "centcom" + else + W.access += access_maint_tunnels + W.icon_state = "centcom" + W.assignment = "Multiverse Traveller" + W.registered_name = M.real_name + W.update_label(M.real_name) + M.equip_to_slot_or_del(W, slot_wear_id) + + +/obj/item/weapon/multisword/pike //If We are to be used and spent, let it be for a noble purpose. + name = "phantom pike" + desc = "A fishing pike that appears to be imbued with a peculiar energy." + icon_state = "harpoon" + item_state = "harpoon" + cooldown_between_uses = 200 //Half the time + duplicate_self = 1 + sword_type = /obj/item/weapon/multisword/pike diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 84fad33f60c..ee203dad9b4 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -179,6 +179,13 @@ /obj/item/weapon/card/id/proc/is_untrackable() return untrackable +/obj/item/weapon/card/id/proc/update_label(newname, newjob) + if(newname || newjob) + name = "[(!newname) ? "identification card" : "[newname]'s ID Card"][(!newjob) ? "" : " ([newjob])"]" + return + + name = "[(!registered_name) ? "identification card" : "[registered_name]'s ID Card"][(!assignment) ? "" : " ([assignment])"]" + /obj/item/weapon/card/id/attackby(obj/item/weapon/W as obj, mob/user as mob, params) ..() @@ -623,12 +630,12 @@ assignment = "Green Team Fighter" icon_state = "TDgreen" desc = "This ID card is given to those who fought inside the thunderdome for the Green Team. Not many have lived to see one of those, even fewer lived to keep it." - + /obj/item/weapon/card/id/lifetime name = "Lifetime ID Card" desc = "A modified ID card given only to those people who have devoted their lives to the better interests of Nanotrasen. It sparkles blue." icon_state = "lifetimeid" - + // Decals /obj/item/weapon/id_decal name = "identification card decal" diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index a064788ebba..7ae8cb1fe28 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -100,6 +100,7 @@ TDM
Everyone is the traitor   There can only be one!   + There can only be me!   Dodgeball (TDM)!
Round-enders
The floor is lava! (DANGEROUS: extremely lame)
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index c58d9edf765..12dbc638e57 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2668,6 +2668,10 @@ feedback_add_details("admin_secrets_fun_used","OO") usr.client.only_one() // message_admins("[key_name_admin(usr)] has triggered HIGHLANDER") + if("onlyme") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","OM") + usr.client.only_me() if("onlyoneteam") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","OOT") diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index ae1e053659b..a07e7dfb58a 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -5,9 +5,9 @@ var/list/incompatible_species = list("Plasmaman") for(var/mob/living/carbon/human/H in player_list) - if(H.stat == DEAD || !(H.client)) + if(H.stat == DEAD || !(H.client)) continue - if(is_special_character(H)) + if(is_special_character(H)) continue if(H.species.name in incompatible_species) H.set_species("Human") @@ -55,3 +55,48 @@ message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ONE! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1) log_admin("[key_name(usr)] used there can be only one.") nologevent = 1 + world << sound('sound/music/THUNDERDOME.ogg') + +/client/proc/only_me() + if(!ticker) + alert("The game hasn't started yet!") + return + + for(var/mob/living/carbon/human/H in player_list) + if(H.stat == 2 || !(H.client)) continue + if(is_special_character(H)) continue + + ticker.mode.traitors += H.mind + H.mind.special_role = "[H.real_name] Prime" + + var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone + hijack_objective.owner = H.mind + H.mind.objectives += hijack_objective + + H << "You are the multiverse summoner. Activate your blade to summon copies of yourself from another universe to fight by your side." + var/obj_count = 1 + for(var/datum/objective/OBJ in H.mind.objectives) + H << "Objective #[obj_count]: [OBJ.explanation_text]" + obj_count++ + + var/obj/item/slot_item_ID = H.get_item_by_slot(slot_wear_id) + qdel(slot_item_ID) + var/obj/item/slot_item_hand = H.get_item_by_slot(slot_r_hand) + H.unEquip(slot_item_hand) + + var /obj/item/weapon/multisword/multi = new(H) + H.equip_to_slot_or_del(multi, slot_r_hand) + + var/obj/item/weapon/card/id/W = new(H) + W.icon_state = "centcom" + W.access = get_all_accesses() + W.access += get_all_centcom_access() + W.assignment = "Multiverse Summoner" + W.registered_name = H.real_name + W.update_label(H.real_name) + H.equip_to_slot_or_del(W, slot_wear_id) + + message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ME! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1) + log_admin("[key_name(usr)] used there can be only me.") + nologevent = 1 + world << sound('sound/music/THUNDERDOME.ogg') \ No newline at end of file From 77a354979cf7308cfcb0ce6ba5294c8992336a5e Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Thu, 22 Oct 2015 01:13:37 -0400 Subject: [PATCH 2/5] tweaks --- code/game/gamemodes/wizard/artefact.dm | 93 ++++++++++++++++++++++---- code/modules/admin/verbs/onlyone.dm | 2 +- 2 files changed, 80 insertions(+), 15 deletions(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 53fd96d5fc5..99ab89d3a7b 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -237,6 +237,7 @@ var/global/list/multiverse = list() var/cooldown_between_uses = 400 //time in deciseconds between uses--default of 40 seconds. var/assigned = "unassigned" var/evil = TRUE + var/probability_evil = 30 //what's the probability this sword will be evil when activated? var/duplicate_self = 0 //Do we want the species randomized along with equipment should the user be duplicated in their entirety? var/sword_type = /obj/item/weapon/multisword //type of sword to equip. @@ -265,7 +266,7 @@ var/global/list/multiverse = list() user.faction = list("[user.real_name]") user << "You bind the sword to yourself. You can now use it to summon help." if(!usr.mind.special_role) - if(prob(30)) + if(prob(probability_evil)) user << "With your new found power you could easily conquer the station!" var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone hijack_objective.owner = usr.mind @@ -308,20 +309,22 @@ var/global/list/multiverse = list() M.key = C.key M.mind.name = usr.real_name M << "You are an alternate version of [usr.real_name] from another universe! Help them accomplish their goals at all costs." - M.real_name = usr.real_name - M.name = usr.real_name M.faction = list("[usr.real_name]") if(duplicate_self) M.set_species(usr.get_species()) //duplicate the sword user's species. else if(prob(50)) - var/list/all_species = list("Human","Unathi","Skrell","Tajaran","Kidan","Golem","Machine","Slime People","Grey","Vulpkanin") + var/list/all_species = list("Human","Unathi","Skrell","Tajaran","Kidan","Golem","Diona","Machine","Slime People","Grey","Vulpkanin") M.set_species(pick(all_species)) - M.dna = usr.dna.Clone() + M.real_name = usr.real_name //this is clear down here in case the user happens to become a golem; that way they have the proper name. + M.name = usr.real_name + if(duplicate_self) + M.dna = usr.dna.Clone() + M.UpdateAppearance() + domutcheck(M, null) M.update_body() M.update_hair() - M.UpdateAppearance() - domutcheck(M, null) + equip_copy(M) if(evil) @@ -350,11 +353,70 @@ var/global/list/multiverse = list() sword.evil = evil if(duplicate_self) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) - M.equip_or_collect(new /obj/item/weapon/storage/backpack(M), slot_back) - M.equip_or_collect(new /obj/item/clothing/under/color/random(M), slot_w_uniform) - M.equip_or_collect(new /obj/item/clothing/shoes/black(M), slot_shoes) - M.equip_to_slot_or_del(sword, slot_r_hand) //Don't duplicate the hands, or duplicate swords could be generated...or weird cases of factionless swords. + //Duplicates the user's current equipent + var/mob/living/carbon/human/H = usr + + var/obj/head = H.get_item_by_slot(slot_head) + if(head) + M.equip_to_slot_or_del(new head.type(M), slot_head) + + var/obj/mask = H.get_item_by_slot(slot_wear_mask) + if(mask) + M.equip_to_slot_or_del(new mask.type(M), slot_wear_mask) + + var/obj/glasses = H.get_item_by_slot(slot_glasses) + if(glasses) + M.equip_to_slot_or_del(new glasses.type(M), slot_glasses) + + var/obj/left_ear = H.get_item_by_slot(slot_l_ear) + if(left_ear) + M.equip_to_slot_or_del(new left_ear.type(M), slot_l_ear) + + var/obj/right_ear = H.get_item_by_slot(slot_r_ear) + if(right_ear) + M.equip_to_slot_or_del(new right_ear.type(M), slot_r_ear) + + var/obj/uniform = H.get_item_by_slot(slot_w_uniform) + if(uniform) + M.equip_to_slot_or_del(new uniform.type(M), slot_w_uniform) + + var/obj/suit = H.get_item_by_slot(slot_wear_suit) + if(suit) + M.equip_to_slot_or_del(new suit.type(M), slot_wear_suit) + + var/obj/gloves = H.get_item_by_slot(slot_gloves) + if(gloves) + M.equip_to_slot_or_del(new gloves.type(M), slot_gloves) + + var/obj/shoes = H.get_item_by_slot(slot_shoes) + if(shoes) + M.equip_to_slot_or_del(new shoes.type(M), slot_shoes) + + var/obj/belt = H.get_item_by_slot(slot_belt) + if(belt) + M.equip_to_slot_or_del(new belt.type(M), slot_belt) + + var/obj/pda = H.get_item_by_slot(slot_wear_pda) + if(pda) + M.equip_to_slot_or_del(new pda.type(M), slot_wear_pda) + + var/obj/back = H.get_item_by_slot(slot_back) + if(back) + M.equip_to_slot_or_del(new back.type(M), slot_back) + + var/obj/suit_storage = H.get_item_by_slot(slot_s_store) + if(suit_storage) + M.equip_to_slot_or_del(new suit_storage.type(M), slot_s_store) + + var/obj/left_pocket = H.get_item_by_slot(slot_l_store) + if(left_pocket) + M.equip_to_slot_or_del(new left_pocket.type(M), slot_l_store) + + var/obj/right_pocket = H.get_item_by_slot(slot_r_store) + if(right_pocket) + M.equip_to_slot_or_del(new right_pocket.type(M), slot_r_store) + + M.equip_to_slot_or_del(sword, slot_r_hand) //Don't duplicate what's equipped to hands, or else duplicate swords could be generated...or weird cases of factionless swords. else var/randomize = pick("mobster","roman","wizard","cyborg","syndicate","assistant", "animu", "cultist", "highlander", "clown", "killer", "pirate", "soviet", "officer", "gladiator") @@ -490,8 +552,6 @@ var/global/list/multiverse = list() else return - M.update_icons() - var/obj/item/weapon/card/id/W = new /obj/item/weapon/card/id if(duplicate_self) var/duplicated_access = usr.get_item_by_slot(slot_wear_id) @@ -510,6 +570,10 @@ var/global/list/multiverse = list() W.update_label(M.real_name) M.equip_to_slot_or_del(W, slot_wear_id) + M.update_icons() + +/obj/item/weapon/multisword/pure_evil + probability_evil = 100 /obj/item/weapon/multisword/pike //If We are to be used and spent, let it be for a noble purpose. name = "phantom pike" @@ -517,5 +581,6 @@ var/global/list/multiverse = list() icon_state = "harpoon" item_state = "harpoon" cooldown_between_uses = 200 //Half the time + probability_evil = 100 duplicate_self = 1 sword_type = /obj/item/weapon/multisword/pike diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index a07e7dfb58a..ca404f5cfc5 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -84,7 +84,7 @@ var/obj/item/slot_item_hand = H.get_item_by_slot(slot_r_hand) H.unEquip(slot_item_hand) - var /obj/item/weapon/multisword/multi = new(H) + var /obj/item/weapon/multisword/pure_evil/multi = new(H) H.equip_to_slot_or_del(multi, slot_r_hand) var/obj/item/weapon/card/id/W = new(H) From cc9861ecadc2dfb1ef7d2cf9e46a2bcac80589de Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Thu, 22 Oct 2015 02:11:36 -0400 Subject: [PATCH 3/5] duplication tweaks --- code/game/gamemodes/wizard/artefact.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 99ab89d3a7b..8c2fa530834 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -305,7 +305,10 @@ var/global/list/multiverse = list() /obj/item/weapon/multisword/proc/spawn_copy(var/client/C, var/turf/T) var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) - C.prefs.copy_to(M) + if(duplicate_self) + usr.client.prefs.copy_to(M) + else + C.prefs.copy_to(M) M.key = C.key M.mind.name = usr.real_name M << "You are an alternate version of [usr.real_name] from another universe! Help them accomplish their goals at all costs." From 2e8e5c3a37009e888f620a8f81b788f41875cb59 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Thu, 22 Oct 2015 02:48:46 -0400 Subject: [PATCH 4/5] friendly-fire-proofing --- code/game/gamemodes/wizard/artefact.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 8c2fa530834..97cdc43c189 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -250,6 +250,12 @@ var/global/list/multiverse = list() multiverse.Remove(src) return ..() +/obj/item/weapon/multisword/attack(mob/living/M as mob, mob/living/user as mob) //to prevent accidental friendly fire or out and out grief. + if(M.faction == user.faction) + user << "The [src] detects benevolent energies in your target and redirects your attack!" + return + ..() + /obj/item/weapon/multisword/attack_self(mob/user) if(user.mind.special_role == "apprentice") user << "You know better than to touch your teacher's stuff." From c4341992d15b1d019101bbbcc961df4ff095cd90 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Thu, 22 Oct 2015 21:52:20 -0400 Subject: [PATCH 5/5] last tweaks --- code/game/gamemodes/wizard/artefact.dm | 6 +++++- code/modules/admin/verbs/onlyone.dm | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 97cdc43c189..3008d2db0c7 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -251,7 +251,7 @@ var/global/list/multiverse = list() return ..() /obj/item/weapon/multisword/attack(mob/living/M as mob, mob/living/user as mob) //to prevent accidental friendly fire or out and out grief. - if(M.faction == user.faction) + if(M.real_name == user.real_name) user << "The [src] detects benevolent energies in your target and redirects your attack!" return ..() @@ -427,6 +427,9 @@ var/global/list/multiverse = list() M.equip_to_slot_or_del(sword, slot_r_hand) //Don't duplicate what's equipped to hands, or else duplicate swords could be generated...or weird cases of factionless swords. else + if(M.get_species() == "Tajaran" || M.get_species() == "Unathi") + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) //If they can't wear shoes, give them a pair of sandals. + var/randomize = pick("mobster","roman","wizard","cyborg","syndicate","assistant", "animu", "cultist", "highlander", "clown", "killer", "pirate", "soviet", "officer", "gladiator") switch(randomize) @@ -577,6 +580,7 @@ var/global/list/multiverse = list() W.assignment = "Multiverse Traveller" W.registered_name = M.real_name W.update_label(M.real_name) + W.SetOwnerInfo(M) M.equip_to_slot_or_del(W, slot_wear_id) M.update_icons() diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index ca404f5cfc5..97e7f716a3c 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -96,6 +96,8 @@ W.update_label(H.real_name) H.equip_to_slot_or_del(W, slot_wear_id) + H.update_icons() + message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ME! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1) log_admin("[key_name(usr)] used there can be only me.") nologevent = 1