From 298d55f90557d477009d8c6fd5095feb38e22f59 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sun, 11 Oct 2015 22:40:13 -0400 Subject: [PATCH 01/12] Voodooyay --- code/game/asteroid.dm | 2 +- code/game/gamemodes/wizard/artefact.dm | 193 ++++++++++++++++++++ code/game/gamemodes/wizard/rightandwrong.dm | 9 +- code/game/gamemodes/wizard/spellbook.dm | 6 + icons/obj/wizard.dmi | Bin 11392 -> 13365 bytes 5 files changed, 207 insertions(+), 3 deletions(-) diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm index 3753c888912..6f6cdd18a2f 100644 --- a/code/game/asteroid.dm +++ b/code/game/asteroid.dm @@ -80,7 +80,7 @@ var/global/max_secret_rooms = 6 walltypes = list(/turf/simulated/wall/mineral/plasma=3,/turf/simulated/mineral/random/high_chance=1) floortypes = list(/turf/simulated/floor/wood) treasureitems = list(/obj/item/weapon/veilrender/vealrender=2, /obj/item/weapon/spellbook/oneuse/blind=1,/obj/item/clothing/head/wizard/red=2, - /obj/item/weapon/spellbook/oneuse/forcewall=1, /obj/item/weapon/spellbook/oneuse/smoke=1, /obj/structure/constructshell = 1, /obj/item/toy/katana=3) + /obj/item/weapon/spellbook/oneuse/forcewall=1, /obj/item/weapon/spellbook/oneuse/smoke=1, /obj/structure/constructshell = 1, /obj/item/toy/katana=3,/obj/item/voodoo=3) fluffitems = list(/obj/structure/safe/floor=1,/obj/structure/dresser=1,/obj/item/weapon/storage/belt/soulstone=1,/obj/item/trash/candle=3, /obj/item/weapon/dice=3,/obj/item/weapon/twohanded/staff=2,/obj/effect/decal/cleanable/dirt=3,/obj/item/weapon/coin/mythril=3) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index ef0dddac0fa..dbe9d3fa538 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -213,3 +213,196 @@ user << " You can see...everything!" visible_message("[user] stares into [src], their eyes glazing over.") user.ghostize(1) + +/////////////////////////////////////////Necromantic Stone/////////////////// + +/obj/item/device/necromantic_stone + name = "necromantic stone" + desc = "A shard capable of resurrecting humans as skeleton thralls." + icon = 'icons/obj/wizard.dmi' + icon_state = "necrostone" + item_state = "electronic" + origin_tech = "bluespace=4;materials=4" + w_class = 1 + var/list/spooky_scaries = list() + var/unlimited = 0 + +/obj/item/device/necromantic_stone/unlimited + unlimited = 1 + +/obj/item/device/necromantic_stone/attack(mob/living/carbon/human/M as mob, mob/living/carbon/human/user as mob) + + if(!istype(M)) + return ..() + + if(!istype(user)) + return + + if(M.stat != DEAD) + user << "This artifact can only affect the dead!" + return + + //if(!M.mind || !M.client) + //user << "There is no soul connected to this body..." + // return + + check_spooky()//clean out/refresh the list + + if(spooky_scaries.len >= 3 && !unlimited) + user << "This artifact can only affect three undead at a time!" + return + M.makeSkeleton() + M.revive() + spooky_scaries |= M + M << "You have been revived by [user.real_name]!" + M << "They are your master now, assist them even if it costs you your new life!" + equip_roman_skeleton(M) + desc = "A shard capable of resurrecting humans as skeleton thralls[unlimited ? "." : ", [spooky_scaries.len]/3 active thralls."]" + +/obj/item/device/necromantic_stone/proc/check_spooky() + if(unlimited) //no point, the list isn't used. + return + for(var/X in spooky_scaries) + if(!istype(X, /mob/living/carbon/human)) + spooky_scaries.Remove(X) + continue + var/mob/living/carbon/human/H = X + if(H.stat == DEAD) + spooky_scaries.Remove(X) + continue + listclearnulls(spooky_scaries) + +//Funny gimmick, skeletons always seem to wear roman/ancient armour +//Voodoo Zombie Pirates added for paradise +/obj/item/device/necromantic_stone/proc/equip_roman_skeleton(mob/living/carbon/human/H as mob) + for(var/obj/item/I in H) + H.unEquip(I) + if(prob(50))//50 50 chance + var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) + H.equip_to_slot_or_del(new hat(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/roman(H), slot_l_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_r_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back) + else + H.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(H), slot_glasses) + + +/////////////////////////////////////////Voodoo/////////////////// + + +/obj/item/voodoo + name = "wicker doll" + desc = "Something creepy about it." + icon = 'icons/obj/wizard.dmi' + icon_state = "voodoo" + item_state = "electronic" + var/mob/living/carbon/human/target = null + var/list/mob/living/carbon/human/possible = list() + var/obj/item/link = null + var/cooldown_time = 30 //3s + var/cooldown = 0 + + + +/obj/item/voodoo/attackby(obj/item/I as obj, mob/user as mob, params) + if(target && cooldown < world.time) + if(is_hot(I)) + target << "You suddenly feel very hot" + target.bodytemperature += 50 + GiveHint(target) + else if(can_puncture(I)) + target << "You feel a stabbing pain in [parse_zone(user.zone_sel.selecting)]!" + target.Weaken(2) + GiveHint(target) + else if(istype(I,/obj/item/weapon/bikehorn)) + target << "HONK" + target << 'sound/items/AirHorn.ogg' + target.ear_damage += rand(0,3) + GiveHint(target) + cooldown = world.time +cooldown_time + return + if(!link) + if(I.loc == user && istype(I) && I.w_class <= 2) + user.drop_item() + I.loc = src + link = I + user << "You attach [I] to the doll." + update_targets() + ..() +/obj/item/voodoo/check_eye(mob/user as mob) + return src.loc == user + +/obj/item/voodoo/attack_self(mob/user as mob) + if(!target && possible.len) + target = input(user, "Select your victim!", "Voodoo") as null|anything in possible + return + if(user.zone_sel.selecting == "chest") + if(link) + target = null + link.loc = get_turf(src) + user << "You remove the [link] from the doll." + link = null + update_targets() + return + if(target && cooldown < world.time) + switch(user.zone_sel.selecting) + if("mouth") + var/wgw = sanitize(input(user, "What would you like the victim to say", "Voodoo", null) as text) + target.say(wgw) + log_game("[user][user.key] made [target][target.key] say [wgw] with a voodoo doll.") + if("eyes") + user.set_machine(src) + if(user.client) + user.client.eye = target + user.client.perspective = EYE_PERSPECTIVE + spawn(100) + user.reset_view() + user.unset_machine() + if("r_leg","l_leg") + user << "You move the doll's legs around." + var/turf/T = get_step(target,pick(cardinal)) + target.Move(T) + if("r_arm","l_arm") + //use active hand on random nearby mob + var/list/nearby_mobs = list() + for(var/mob/living/L in range(target,1)) + if(L!=target) + nearby_mobs |= L + if(nearby_mobs.len) + var/mob/living/T = pick(nearby_mobs) + log_game("[user][user.key] made [target][target.key] click on [T] with a voodoo doll.") + target.ClickOn(T) + GiveHint(target) + if("head") + user << "You smack the doll's head with your hand." + target.Dizzy(10) + target << "You suddenly feel as if your head was hit with a hammer!" + GiveHint(target,user) + cooldown = world.time + cooldown_time + +/obj/item/voodoo/proc/update_targets() + possible = list() + if(!link) + return + for(var/mob/living/carbon/human/H in living_mob_list) + if(md5(H.dna.uni_identity) in link.fingerprints) + possible |= H + +/obj/item/voodoo/proc/GiveHint(mob/victim,force=0) + if(prob(50) || force) + var/way = dir2text(get_dir(victim,get_turf(src))) + victim << "You feel a dark presence from [way]" + if(prob(20) || force) + var/area/A = get_area(src) + victim << "You feel a dark presence from [A.name]" + +/obj/item/voodoo/fire_act() + if(target) + target.adjust_fire_stacks(20) + target.IgniteMob() + GiveHint(target,1) + return ..() diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index e98517688d8..a417c839a7e 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -2,8 +2,8 @@ /mob/proc/rightandwrong(var/summon_type) //0 = Summon Guns, 1 = Summon Magic var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","silenced","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car","boltaction","arg") - 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") - var/list/magicspeciallist = list("staffchange","staffanimation", "wandbelt", "contract", "staffchaos") + 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") + var/list/magicspeciallist = list("staffchange","staffanimation", "wandbelt", "contract", "staffchaos","necromantic") usr << "You summoned [summon_type ? "magic" : "guns"]!" message_admins("[key_name_admin(usr)] summoned [summon_type ? "magic" : "guns"]!") for(var/mob/living/carbon/human/H in player_list) @@ -110,6 +110,9 @@ H.see_invisible = SEE_INVISIBLE_LEVEL_TWO 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) @@ -123,4 +126,6 @@ new /obj/item/weapon/contract(get_turf(H)) if("staffchaos") new /obj/item/weapon/gun/magic/staff/chaos(get_turf(H)) + if("necromantic") + new /obj/item/device/necromantic_stone(get_turf(H)) H << "You suddenly feel lucky." diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index acf20832ba8..54426761a02 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -281,6 +281,12 @@ user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/construct(null)) return . +/datum/spellbook_entry/item/necrostone + name = "A Necromantic Stone" + desc = "A Necromantic stone is able to resurrect three dead individuals as skeletal thralls for you to command." + item_path = /obj/item/device/necromantic_stone + log_name = "NS" + /datum/spellbook_entry/item/wands name = "Wand Assortment" desc = "A collection of wands that allow for a wide variety of utility. Wands do not recharge, so be conservative in use. Comes in a handy belt." diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi index 273eeab09219f8d1d0a8988679cfc721a4c93d64..160acb74381b10b40dee91bc8e11f3b10c842ec7 100644 GIT binary patch literal 13365 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 Date: Tue, 13 Oct 2015 21:53:34 -0400 Subject: [PATCH 02/12] DON"T DROP ALL THE GORE! --- code/game/gamemodes/wizard/artefact.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index dbe9d3fa538..94b7ea8a675 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -251,7 +251,7 @@ if(spooky_scaries.len >= 3 && !unlimited) user << "This artifact can only affect three undead at a time!" return - M.makeSkeleton() + M.set_species("Skellington") M.revive() spooky_scaries |= M M << "You have been revived by [user.real_name]!" @@ -288,6 +288,7 @@ else H.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(H), slot_glasses) From c5205869532248a55b1214d1c0386a398f477921 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 14 Oct 2015 20:39:29 -0400 Subject: [PATCH 03/12] changes added new posible skeleton outfits Chaplain traitor voodoo doll, Tell me if the TC cost needs adjusting. On Click fix... --- code/_onclick/click.dm | 4 +-- code/datums/uplink_item.dm | 10 ++++++ code/game/gamemodes/wizard/artefact.dm | 50 ++++++++++++++++---------- 3 files changed, 43 insertions(+), 21 deletions(-) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 272b3157b88..cad5657fc37 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -38,7 +38,7 @@ return next_click = world.time + 1 - if(client.buildmode) + if(client && client.buildmode) build_click(src, client.buildmode, params, A) return @@ -411,7 +411,7 @@ /* if(buckled && buckled.movable) buckled.dir = direction buckled.handle_rotation()*/ - + /obj/screen/click_catcher icon = 'icons/mob/screen1_full.dmi' icon_state = "passage0" diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index c287c00975d..029b31aad89 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -147,6 +147,16 @@ var/list/uplink_items = list() cost = 2 job = list("Chef") +//Chaplain + +/datum/uplink_item/jobspecific/voodoo + name = "Voodoo Doll" + desc = "A doll created by Syndicate Witch Doctors. Ingridents:Something of the Thread,Something of the Head,Something of the Body,Something of the Dead and monosodium glutamate." + reference = "VD" + item = /obj/item/voodoo + cost = 13 + job = list("Chaplain") + //Janitor /datum/uplink_item/jobspecific/cautionsign diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 94b7ea8a675..7d0afe12b48 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -242,21 +242,21 @@ user << "This artifact can only affect the dead!" return - //if(!M.mind || !M.client) - //user << "There is no soul connected to this body..." - // return + if(!M.mind || !M.client) + user << "There is no soul connected to this body..." + return check_spooky()//clean out/refresh the list if(spooky_scaries.len >= 3 && !unlimited) user << "This artifact can only affect three undead at a time!" return - M.set_species("Skellington") + M.MakeSkeleton() M.revive() spooky_scaries |= M M << "You have been revived by [user.real_name]!" M << "They are your master now, assist them even if it costs you your new life!" - equip_roman_skeleton(M) + equip_skeleton(M) desc = "A shard capable of resurrecting humans as skeleton thralls[unlimited ? "." : ", [spooky_scaries.len]/3 active thralls."]" /obj/item/device/necromantic_stone/proc/check_spooky() @@ -274,22 +274,34 @@ //Funny gimmick, skeletons always seem to wear roman/ancient armour //Voodoo Zombie Pirates added for paradise -/obj/item/device/necromantic_stone/proc/equip_roman_skeleton(mob/living/carbon/human/H as mob) +/obj/item/device/necromantic_stone/proc/equip_skeleton(mob/living/carbon/human/H as mob) for(var/obj/item/I in H) H.unEquip(I) - if(prob(50))//50 50 chance - var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) - H.equip_to_slot_or_del(new hat(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/roman(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_r_hand) - H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back) - else - H.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(H), slot_glasses) + var/randomSpooky = pick("roman","pirate","yand","clown") + switch(randomSpooky) + if("roman") + var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) + H.equip_to_slot_or_del(new hat(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/roman(H), slot_l_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_r_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back) + if("pirate") + H.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/pirate_brown(H), slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(H), slot_glasses) + if("yand")//mine is an evil laugh + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl(H), slot_w_uniform) + if("clown") + H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask) + H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H), slot_l_store) /////////////////////////////////////////Voodoo/////////////////// From a77885be69cd0b9260f6a63ea9bfabcc3ecdf3e4 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 14 Oct 2015 23:59:16 -0400 Subject: [PATCH 04/12] wizard-chan Nyaa~! --- code/datums/uplink_item.dm | 2 +- code/game/gamemodes/wizard/artefact.dm | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 029b31aad89..c029f24b59a 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -151,7 +151,7 @@ var/list/uplink_items = list() /datum/uplink_item/jobspecific/voodoo name = "Voodoo Doll" - desc = "A doll created by Syndicate Witch Doctors. Ingridents:Something of the Thread,Something of the Head,Something of the Body,Something of the Dead and monosodium glutamate." + desc = "A doll created by Syndicate Witch Doctors. Ingredients:Something of the Thread, Something of the Head, Something of the Body, Something of the Dead, Secret Voodoo herbs and monosodium glutamate." reference = "VD" item = /obj/item/voodoo cost = 13 diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 7d0afe12b48..f7f6f864e82 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -251,7 +251,7 @@ if(spooky_scaries.len >= 3 && !unlimited) user << "This artifact can only affect three undead at a time!" return - M.MakeSkeleton() + M.makeSkeleton() M.revive() spooky_scaries |= M M << "You have been revived by [user.real_name]!" @@ -293,15 +293,18 @@ H.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(H), slot_glasses) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(H), slot_r_hand) if("yand")//mine is an evil laugh H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/weapon/katana(H), slot_belt) if("clown") H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask) H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H), slot_l_store) + H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff/stick(H), slot_r_hand) /////////////////////////////////////////Voodoo/////////////////// From 6ce58424a82104dd9f3b353cfa32ab8c943d26a6 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 22 Oct 2015 20:29:34 -0400 Subject: [PATCH 05/12] small change the client connected bit is for debugging, will uncomment later. --- code/game/gamemodes/wizard/artefact.dm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index f7f6f864e82..ee42761ddb3 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -242,9 +242,9 @@ user << "This artifact can only affect the dead!" return - if(!M.mind || !M.client) - user << "There is no soul connected to this body..." - return + //if(!M.mind || !M.client) + // user << "There is no soul connected to this body..." + // return check_spooky()//clean out/refresh the list @@ -252,6 +252,7 @@ user << "This artifact can only affect three undead at a time!" return M.makeSkeleton() + M.visible_message(" A massive amount of flesh sloughs off [M] and a skeleton rises up!") M.revive() spooky_scaries |= M M << "You have been revived by [user.real_name]!" From 2c3e572602bab5c00007941a99a1d66bb988602e Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 24 Oct 2015 00:32:56 -0400 Subject: [PATCH 06/12] We hats merge conflicts... --- code/game/gamemodes/wizard/artefact.dm | 578 ++++++++++++++++--------- 1 file changed, 376 insertions(+), 202 deletions(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index ee42761ddb3..762b595e3c0 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -214,212 +214,386 @@ visible_message("[user] stares into [src], their eyes glazing over.") user.ghostize(1) -/////////////////////////////////////////Necromantic Stone/////////////////// +/////////////////////Multiverse Blade//////////////////// +var/global/list/multiverse = list() -/obj/item/device/necromantic_stone - name = "necromantic stone" - desc = "A shard capable of resurrecting humans as skeleton thralls." - icon = 'icons/obj/wizard.dmi' - icon_state = "necrostone" - item_state = "electronic" - origin_tech = "bluespace=4;materials=4" - w_class = 1 - var/list/spooky_scaries = list() - var/unlimited = 0 - -/obj/item/device/necromantic_stone/unlimited - unlimited = 1 - -/obj/item/device/necromantic_stone/attack(mob/living/carbon/human/M as mob, mob/living/carbon/human/user as mob) - - if(!istype(M)) - return ..() - - if(!istype(user)) - return - - if(M.stat != DEAD) - user << "This artifact can only affect the dead!" - return - - //if(!M.mind || !M.client) - // user << "There is no soul connected to this body..." - // return - - check_spooky()//clean out/refresh the list - - if(spooky_scaries.len >= 3 && !unlimited) - user << "This artifact can only affect three undead at a time!" - return - M.makeSkeleton() - M.visible_message(" A massive amount of flesh sloughs off [M] and a skeleton rises up!") - M.revive() - spooky_scaries |= M - M << "You have been revived by [user.real_name]!" - M << "They are your master now, assist them even if it costs you your new life!" - equip_skeleton(M) - desc = "A shard capable of resurrecting humans as skeleton thralls[unlimited ? "." : ", [spooky_scaries.len]/3 active thralls."]" - -/obj/item/device/necromantic_stone/proc/check_spooky() - if(unlimited) //no point, the list isn't used. - return - for(var/X in spooky_scaries) - if(!istype(X, /mob/living/carbon/human)) - spooky_scaries.Remove(X) - continue - var/mob/living/carbon/human/H = X - if(H.stat == DEAD) - spooky_scaries.Remove(X) - continue - listclearnulls(spooky_scaries) - -//Funny gimmick, skeletons always seem to wear roman/ancient armour -//Voodoo Zombie Pirates added for paradise -/obj/item/device/necromantic_stone/proc/equip_skeleton(mob/living/carbon/human/H as mob) - for(var/obj/item/I in H) - H.unEquip(I) - var/randomSpooky = pick("roman","pirate","yand","clown") - switch(randomSpooky) - if("roman") - var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) - H.equip_to_slot_or_del(new hat(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/roman(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_r_hand) - H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back) - if("pirate") - H.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/pirate_brown(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(H), slot_glasses) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(H), slot_r_hand) - if("yand")//mine is an evil laugh - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/weapon/katana(H), slot_belt) - if("clown") - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask) - H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H), slot_l_store) - H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff/stick(H), slot_r_hand) - - -/////////////////////////////////////////Voodoo/////////////////// - - -/obj/item/voodoo - name = "wicker doll" - desc = "Something creepy about it." - icon = 'icons/obj/wizard.dmi' - icon_state = "voodoo" - item_state = "electronic" - var/mob/living/carbon/human/target = null - var/list/mob/living/carbon/human/possible = list() - var/obj/item/link = null - var/cooldown_time = 30 //3s +/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/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. - - -/obj/item/voodoo/attackby(obj/item/I as obj, mob/user as mob, params) - if(target && cooldown < world.time) - if(is_hot(I)) - target << "You suddenly feel very hot" - target.bodytemperature += 50 - GiveHint(target) - else if(can_puncture(I)) - target << "You feel a stabbing pain in [parse_zone(user.zone_sel.selecting)]!" - target.Weaken(2) - GiveHint(target) - else if(istype(I,/obj/item/weapon/bikehorn)) - target << "HONK" - target << 'sound/items/AirHorn.ogg' - target.ear_damage += rand(0,3) - GiveHint(target) - cooldown = world.time +cooldown_time - return - if(!link) - if(I.loc == user && istype(I) && I.w_class <= 2) - user.drop_item() - I.loc = src - link = I - user << "You attach [I] to the doll." - update_targets() +/obj/item/weapon/multisword/New() ..() -/obj/item/voodoo/check_eye(mob/user as mob) - return src.loc == user + multiverse |= src -/obj/item/voodoo/attack_self(mob/user as mob) - if(!target && possible.len) - target = input(user, "Select your victim!", "Voodoo") as null|anything in possible - return - if(user.zone_sel.selecting == "chest") - if(link) - target = null - link.loc = get_turf(src) - user << "You remove the [link] from the doll." - link = null - update_targets() - return - if(target && cooldown < world.time) - switch(user.zone_sel.selecting) - if("mouth") - var/wgw = sanitize(input(user, "What would you like the victim to say", "Voodoo", null) as text) - target.say(wgw) - log_game("[user][user.key] made [target][target.key] say [wgw] with a voodoo doll.") - if("eyes") - user.set_machine(src) - if(user.client) - user.client.eye = target - user.client.perspective = EYE_PERSPECTIVE - spawn(100) - user.reset_view() - user.unset_machine() - if("r_leg","l_leg") - user << "You move the doll's legs around." - var/turf/T = get_step(target,pick(cardinal)) - target.Move(T) - if("r_arm","l_arm") - //use active hand on random nearby mob - var/list/nearby_mobs = list() - for(var/mob/living/L in range(target,1)) - if(L!=target) - nearby_mobs |= L - if(nearby_mobs.len) - var/mob/living/T = pick(nearby_mobs) - log_game("[user][user.key] made [target][target.key] click on [T] with a voodoo doll.") - target.ClickOn(T) - GiveHint(target) - if("head") - user << "You smack the doll's head with your hand." - target.Dizzy(10) - target << "You suddenly feel as if your head was hit with a hammer!" - GiveHint(target,user) - cooldown = world.time + cooldown_time -/obj/item/voodoo/proc/update_targets() - possible = list() - if(!link) - return - for(var/mob/living/carbon/human/H in living_mob_list) - if(md5(H.dna.uni_identity) in link.fingerprints) - possible |= H - -/obj/item/voodoo/proc/GiveHint(mob/victim,force=0) - if(prob(50) || force) - var/way = dir2text(get_dir(victim,get_turf(src))) - victim << "You feel a dark presence from [way]" - if(prob(20) || force) - var/area/A = get_area(src) - victim << "You feel a dark presence from [A.name]" - -/obj/item/voodoo/fire_act() - if(target) - target.adjust_fire_stacks(20) - target.IgniteMob() - GiveHint(target,1) +/obj/item/weapon/multisword/Destroy() + 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.real_name == user.real_name) + 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." + 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(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 + 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) + 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." + 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","Diona","Machine","Slime People","Grey","Vulpkanin") + M.set_species(pick(all_species)) + 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() + + 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) + //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 + 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) + 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 + + 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) + W.SetOwnerInfo(M) + 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" + 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 + probability_evil = 100 + duplicate_self = 1 + sword_type = /obj/item/weapon/multisword/pike \ No newline at end of file From 99df52b229de19d58dd8714630adfd59da924439 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 24 Oct 2015 00:36:36 -0400 Subject: [PATCH 07/12] HISSSSSSSSSSSSSSSSSSSSSSSS --- code/game/gamemodes/wizard/artefact.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 762b595e3c0..3008d2db0c7 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -596,4 +596,4 @@ var/global/list/multiverse = list() cooldown_between_uses = 200 //Half the time probability_evil = 100 duplicate_self = 1 - sword_type = /obj/item/weapon/multisword/pike \ No newline at end of file + sword_type = /obj/item/weapon/multisword/pike From 4549035505573b70f5a9bf58d3c84f466a1286f7 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 24 Oct 2015 01:59:49 -0400 Subject: [PATCH 08/12] Reasons to NOT give me ideas.... --- code/datums/uplink_item.dm | 2 +- code/game/gamemodes/wizard/artefact.dm | 228 +++++++++++++++++++++++++ icons/obj/wizard.dmi | Bin 13365 -> 14350 bytes 3 files changed, 229 insertions(+), 1 deletion(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index c029f24b59a..acea0966db9 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -151,7 +151,7 @@ var/list/uplink_items = list() /datum/uplink_item/jobspecific/voodoo name = "Voodoo Doll" - desc = "A doll created by Syndicate Witch Doctors. Ingredients:Something of the Thread, Something of the Head, Something of the Body, Something of the Dead, Secret Voodoo herbs and monosodium glutamate." + desc = "A doll created by Syndicate Witch Doctors. Ingredients: Something of the Thread, Something of the Head, Something of the Body, Something of the Dead, Secret Voodoo herbs, and Monosodium glutamate." reference = "VD" item = /obj/item/voodoo cost = 13 diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 3008d2db0c7..ae6b578602e 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -597,3 +597,231 @@ var/global/list/multiverse = list() probability_evil = 100 duplicate_self = 1 sword_type = /obj/item/weapon/multisword/pike + + +/////////////////////////////////////////Necromantic Stone/////////////////// + +/obj/item/device/necromantic_stone + name = "necromantic stone" + desc = "A shard capable of resurrecting humans as skeleton thralls." + icon = 'icons/obj/wizard.dmi' + icon_state = "necrostone" + item_state = "electronic" + origin_tech = "bluespace=4;materials=4" + w_class = 1 + var/list/spooky_scaries = list() + var/unlimited = 0 + var/heresy = 0 + +/obj/item/device/necromantic_stone/unlimited + unlimited = 1 + +/obj/item/device/necromantic_stone/attack(mob/living/carbon/human/M as mob, mob/living/carbon/human/user as mob) + + if(!istype(M)) + return ..() + + if(!istype(user)) + return + + if(M.stat != DEAD) + user << "This artifact can only affect the dead!" + return + + //if(!M.mind || !M.client) + // user << "There is no soul connected to this body..." + // return + + check_spooky()//clean out/refresh the list + + if(spooky_scaries.len >= 3 && !unlimited) + user << "This artifact can only affect three undead at a time!" + return + M.makeSkeleton() + M.visible_message(" A massive amount of flesh sloughs off [M] and a skeleton rises up!") + M.revive() + spooky_scaries |= M + M << "You have been revived by [user.real_name]!" + M << "They are your master now, assist them even if it costs you your new life!" + equip_skeleton(M) + desc = "A shard capable of resurrecting humans as skeleton thralls[unlimited ? "." : ", [spooky_scaries.len]/3 active thralls."]" + +/obj/item/device/necromantic_stone/proc/check_spooky() + if(unlimited) //no point, the list isn't used. + return + for(var/X in spooky_scaries) + if(!istype(X, /mob/living/carbon/human)) + spooky_scaries.Remove(X) + continue + var/mob/living/carbon/human/H = X + if(H.stat == DEAD) + spooky_scaries.Remove(X) + continue + listclearnulls(spooky_scaries) + +//Funny gimmick, skeletons always seem to wear roman/ancient armour +//Voodoo Zombie Pirates added for paradise +/obj/item/device/necromantic_stone/proc/equip_skeleton(mob/living/carbon/human/H as mob) + for(var/obj/item/I in H) + H.unEquip(I) + var/randomSpooky = "roman"//defualt + if(heresy) + randomSpooky = "yand" + else + randomSpooky = pick("roman","pirate","yand","clown") + + switch(randomSpooky) + if("roman") + var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) + H.equip_to_slot_or_del(new hat(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/roman(H), slot_l_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_r_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back) + if("pirate") + H.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/pirate_brown(H), slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(H), slot_glasses) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(H), slot_r_hand) + if("yand")//mine is an evil laugh + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/weapon/katana(H), slot_belt) + if("clown") + H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask) + H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H), slot_l_store) + H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff/stick(H), slot_r_hand) + + +/obj/item/device/necromantic_stone/nya + name = "nya-cromantic stone" + desc = "A shard capable of resurrecting humans as creatures of Vile Heresy. Even the Wizard Federation fears it.." + icon = 'icons/obj/wizard.dmi' + icon_state = "nyacrostone" + item_state = "electronic" + origin_tech = "bluespace=4;materials=4" + w_class = 1 + heresy = 1 + unlimited = 1 + +/////////////////////////////////////////Voodoo/////////////////// + + +/obj/item/voodoo + name = "wicker doll" + desc = "Something creepy about it." + icon = 'icons/obj/wizard.dmi' + icon_state = "voodoo" + item_state = "electronic" + var/mob/living/carbon/human/target = null + var/list/mob/living/carbon/human/possible = list() + var/obj/item/link = null + var/cooldown_time = 30 //3s + var/cooldown = 0 + + + +/obj/item/voodoo/attackby(obj/item/I as obj, mob/user as mob, params) + if(target && cooldown < world.time) + if(is_hot(I)) + target << "You suddenly feel very hot" + target.bodytemperature += 50 + GiveHint(target) + else if(can_puncture(I)) + target << "You feel a stabbing pain in [parse_zone(user.zone_sel.selecting)]!" + target.Weaken(2) + GiveHint(target) + else if(istype(I,/obj/item/weapon/bikehorn)) + target << "HONK" + target << 'sound/items/AirHorn.ogg' + target.ear_damage += rand(0,3) + GiveHint(target) + cooldown = world.time +cooldown_time + return + if(!link) + if(I.loc == user && istype(I) && I.w_class <= 2) + user.drop_item() + I.loc = src + link = I + user << "You attach [I] to the doll." + update_targets() + ..() +/obj/item/voodoo/check_eye(mob/user as mob) + return src.loc == user + +/obj/item/voodoo/attack_self(mob/user as mob) + if(!target && possible.len) + target = input(user, "Select your victim!", "Voodoo") as null|anything in possible + return + if(user.zone_sel.selecting == "chest") + if(link) + target = null + link.loc = get_turf(src) + user << "You remove the [link] from the doll." + link = null + update_targets() + return + if(target && cooldown < world.time) + switch(user.zone_sel.selecting) + if("mouth") + var/wgw = sanitize(input(user, "What would you like the victim to say", "Voodoo", null) as text) + target.say(wgw) + log_game("[user][user.key] made [target][target.key] say [wgw] with a voodoo doll.") + if("eyes") + user.set_machine(src) + if(user.client) + user.client.eye = target + user.client.perspective = EYE_PERSPECTIVE + spawn(100) + user.reset_view() + user.unset_machine() + if("r_leg","l_leg") + user << "You move the doll's legs around." + var/turf/T = get_step(target,pick(cardinal)) + target.Move(T) + if("r_arm","l_arm") + //use active hand on random nearby mob + var/list/nearby_mobs = list() + for(var/mob/living/L in range(target,1)) + if(L!=target) + nearby_mobs |= L + if(nearby_mobs.len) + var/mob/living/T = pick(nearby_mobs) + log_game("[user][user.key] made [target][target.key] click on [T] with a voodoo doll.") + target.ClickOn(T) + GiveHint(target) + if("head") + user << "You smack the doll's head with your hand." + target.Dizzy(10) + target << "You suddenly feel as if your head was hit with a hammer!" + GiveHint(target,user) + cooldown = world.time + cooldown_time + +/obj/item/voodoo/proc/update_targets() + possible = list() + if(!link) + return + for(var/mob/living/carbon/human/H in living_mob_list) + if(md5(H.dna.uni_identity) in link.fingerprints) + possible |= H + +/obj/item/voodoo/proc/GiveHint(mob/victim,force=0) + if(prob(50) || force) + var/way = dir2text(get_dir(victim,get_turf(src))) + victim << "You feel a dark presence from [way]" + if(prob(20) || force) + var/area/A = get_area(src) + victim << "You feel a dark presence from [A.name]" + +/obj/item/voodoo/fire_act() + if(target) + target.adjust_fire_stacks(20) + target.IgniteMob() + GiveHint(target,1) + return ..() \ No newline at end of file diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi index 160acb74381b10b40dee91bc8e11f3b10c842ec7..c35817db6094997059486972223ee5ae264b824a 100644 GIT binary patch literal 14350 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 DEL3MO literal 13365 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 Date: Sat, 24 Oct 2015 22:40:52 -0400 Subject: [PATCH 09/12] uncomments something commented for debuf --- code/game/gamemodes/wizard/artefact.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index ae6b578602e..db008885f6b 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -628,9 +628,9 @@ var/global/list/multiverse = list() user << "This artifact can only affect the dead!" return - //if(!M.mind || !M.client) - // user << "There is no soul connected to this body..." - // return + if(!M.mind || !M.client) + user << "There is no soul connected to this body..." + return check_spooky()//clean out/refresh the list From 4227cba0556e8f5a27fba9356ee99c3837105f60 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sun, 1 Nov 2015 22:55:37 -0500 Subject: [PATCH 10/12] Changes yay range change and skeleton change. --- code/game/gamemodes/wizard/artefact.dm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index db008885f6b..cda0e92b654 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -685,18 +685,22 @@ var/global/list/multiverse = list() H.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(H), slot_glasses) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(H), slot_r_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_r_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back) if("yand")//mine is an evil laugh H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/weapon/katana(H), slot_belt) if("clown") H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask) + H.equip_to_slot_or_del(new /obj/item/clothing/head/stalhelm(H), slot_head) H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H), slot_l_store) - H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff/stick(H), slot_r_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_r_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back) /obj/item/device/necromantic_stone/nya @@ -788,7 +792,7 @@ var/global/list/multiverse = list() if("r_arm","l_arm") //use active hand on random nearby mob var/list/nearby_mobs = list() - for(var/mob/living/L in range(target,1)) + for(var/mob/living/L in range(1,target)) if(L!=target) nearby_mobs |= L if(nearby_mobs.len) From 17d50207ff6c726a8e35a33278b8064e098b036c Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sun, 1 Nov 2015 23:40:47 -0500 Subject: [PATCH 11/12] Spooky Scary Skeletons --- 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 cda0e92b654..e99cf0e5aa8 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -692,7 +692,9 @@ var/global/list/multiverse = list() H.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/weapon/katana(H), slot_belt) + H.equip_to_slot_or_del(new /obj/item/weapon/katana(H), slot_r_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/roman(H), slot_l_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back) if("clown") H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(H), slot_shoes) @@ -700,6 +702,7 @@ var/global/list/multiverse = list() H.equip_to_slot_or_del(new /obj/item/clothing/head/stalhelm(H), slot_head) H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H), slot_l_store) H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_r_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/roman(H), slot_l_hand) H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back) From e08d11ee2fd5492a89a69bf640f87ef6ecf6a2cc Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Mon, 2 Nov 2015 15:09:26 -0500 Subject: [PATCH 12/12] forgot to give pirates the shield... --- code/game/gamemodes/wizard/artefact.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index e99cf0e5aa8..63de49edb1b 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -687,6 +687,7 @@ var/global/list/multiverse = list() H.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(H), slot_glasses) H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_r_hand) H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back) + H.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/roman(H), slot_l_hand) if("yand")//mine is an evil laugh H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(H), slot_head)