/////////Apprentice Contract////////// /obj/item/weapon/contract name = "contract" desc = "A magic contract previously signed by an apprentice. In exchange for instruction in the magical arts, they are bound to answer your call for aid." icon = 'icons/obj/wizard.dmi' icon_state ="scroll2" throw_speed = 1 throw_range = 5 w_class = 1.0 var/used = 0 /obj/item/weapon/contract/attack_self(mob/user as mob) user.set_machine(src) var/dat if(used) dat = "You have already summoned your apprentice.
" else dat = "Contract of Apprenticeship:
" dat += "Using this contract, you may summon an apprentice to aid you on your mission.
" dat += "If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.
" dat += "Which school of magic is your apprentice studying?:
" dat += "Destruction
" dat += "Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.
" dat += "Bluespace Manipulation
" dat += "Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.
" dat += "Healing
" dat += "Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.
" dat += "Robeless
" dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.
" user << browse(dat, "window=radio") onclose(user, "radio") return /obj/item/weapon/contract/Topic(href, href_list) ..() var/mob/living/carbon/human/H = usr if(H.stat || H.restrained()) return if(!istype(H, /mob/living/carbon/human)) return 1 if(loc == H || (in_range(src, H) && istype(loc, /turf))) H.set_machine(src) if(href_list["school"]) if (used) H << "You already used this contract!" return var/list/candidates = get_candidates(BE_WIZARD) if(candidates.len) src.used = 1 var/client/C = pick(candidates) new /obj/effect/effect/harmless_smoke(H.loc) var/mob/living/carbon/human/M = new/mob/living/carbon/human(H.loc) M.key = C.key M << "You are the [H.real_name]'s apprentice! You are bound by magic contract to follow their orders and help them in accomplishing their goals." switch(href_list["school"]) if("destruction") M.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/projectile/magic_missile(M)) M.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/dumbfire/fireball(M)) M << "Your service has not gone unrewarded, however. Studying under [H.real_name], you have learned powerful, destructive spells. You are able to cast magic missile and fireball." if("bluespace") M.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/area_teleport/teleport(M)) M.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/ethereal_jaunt(M)) M << "Your service has not gone unrewarded, however. Studying under [H.real_name], you have learned reality bending mobility spells. You are able to cast teleport and ethereal jaunt." if("healing") M.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/charge(M)) M.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/aoe_turf/conjure/forcewall(M)) M.equip_to_slot_or_del(new /obj/item/weapon/gun/magic/staff/healing(M), slot_r_hand) M << "Your service has not gone unrewarded, however. Studying under [H.real_name], you have learned livesaving survival spells. You are able to cast charge and forcewall." if("robeless") M.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/aoe_turf/knock(M)) M.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/mind_transfer(M)) M << "Your service has not gone unrewarded, however. Studying under [H.real_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap." 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/under/color/lightpurple(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(M), slot_head) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll/apprentice(M), slot_r_store) var/wizard_name_first = pick(wizard_first) var/wizard_name_second = pick(wizard_second) var/randomname = "[wizard_name_first] [wizard_name_second]" var/newname = sanitize(copytext(input(M, "You are the wizard's apprentice. Would you like to change your name to something else?", "Name change", randomname) as null|text,1,MAX_NAME_LEN)) if (!newname) newname = randomname M.mind.name = newname M.real_name = newname M.name = newname var/datum/objective/protect/new_objective = new /datum/objective/protect new_objective.owner = M:mind new_objective:target = H:mind new_objective.explanation_text = "Protect [H.real_name], the wizard." M.mind.objectives += new_objective ticker.mode.traitors += M.mind M.mind.special_role = "apprentice" M.faction = list("wizard") else H << "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later." return ///////////////////////////Veil Render////////////////////// /obj/item/weapon/veilrender name = "veil render" desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast city." icon = 'icons/obj/wizard.dmi' icon_state = "render" item_state = "render" force = 15 throwforce = 10 w_class = 3 var/charged = 1 hitsound = 'sound/weapons/bladeslice.ogg' /obj/effect/rend name = "tear in the fabric of reality" desc = "You should run now" icon = 'icons/obj/biomass.dmi' icon_state = "rift" density = 1 unacidable = 1 anchored = 1.0 /obj/effect/rend/New() spawn(50) new /obj/machinery/singularity/narsie/wizard(get_turf(src)) del(src) return return /obj/item/weapon/veilrender/attack_self(mob/user as mob) if(charged == 1) new /obj/effect/rend(get_turf(usr)) charged = 0 visible_message("\red [src] hums with power as [usr] deals a blow to reality itself!") else user << "\red The unearthly energies that powered the blade are now dormant." /obj/item/weapon/veilrender/vealrender name = "veal render" desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast farm." /obj/item/weapon/veilrender/vealrender/attack_self(mob/user as mob) if(charged) new /obj/effect/rend/cow(get_turf(usr)) charged = 0 visible_message("\red [src] hums with power as [usr] deals a blow to hunger itself!") else user << "\red The unearthly energies that powered the blade are now dormant." /obj/effect/rend/cow desc = "Reverberates with the sound of ten thousand moos." var/cowsleft = 20 /obj/effect/rend/cow/New() processing_objects.Add(src) return /obj/effect/rend/cow/process() if(locate(/mob) in loc) return new /mob/living/simple_animal/cow(loc) cowsleft-- if(cowsleft <= 0) del src /obj/effect/rend/cow/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I, /obj/item/weapon/nullrod)) visible_message("\red [I] strikes a blow against \the [src], banishing it!") spawn(1) del src return ..() /////////////////////////////////////////Scrying/////////////////// /obj/item/weapon/scrying name = "scrying orb" desc = "An incandescent orb of otherworldly energy, staring into it gives you vision beyond mortal means." icon = 'icons/obj/projectiles.dmi' icon_state ="bluespace" throw_speed = 7 throw_range = 15 throwforce = 15 damtype = BURN force = 15 hitsound = 'sound/items/welder2.ogg' /obj/item/weapon/scrying/attack_self(mob/user as mob) user << "\blue You can see...everything!" visible_message("\red [usr] stares into [src], their eyes glazing over.") user.ghostize(1)