/obj/item/weapon/contract name = "contract" desc = "written in the blood of some unfortunate fellow." icon = 'icons/mob/screen/spells.dmi' icon_state = "master_open" var/contract_master = null var/list/contract_spells = list(/spell/contract/reward,/spell/contract/punish,/spell/contract/return_master) /obj/item/weapon/contract/attack_self(mob/user as mob) if(contract_master == null) user << "You bind the contract to your soul, making you the recipient of whatever poor fool's soul that decides to contract with you." contract_master = user return if(contract_master == user) user << "You can't contract with yourself!" return if(iscultist(user)) user << "Your soul already belongs to other powers!" return var/ans = alert(user,"The contract clearly states that signing this contract will bind your soul to \the [contract_master]. Are you sure you want to continue?","[src]","Yes","No") if(ans == "Yes") user.visible_message("\The [user] signs the contract, their body glowing a deep yellow.") if(!src.contract_effect(user)) user.visible_message("\The [src] visibly rejects \the [user], erasing their signature from the line.") return user.visible_message("\The [src] disappears with a flash of light.") if(contract_spells.len && istype(contract_master,/mob/living)) //if it aint text its probably a mob or another user var/mob/living/M = contract_master for(var/spell_type in contract_spells) M.add_spell(new spell_type(user), "const_spell_ready") log_and_message_admins("signed their soul over to \the [contract_master] using \the [src].", user) user.drop_from_inventory(src) qdel(src) /obj/item/weapon/contract/proc/contract_effect(mob/user as mob) user << "You've signed your soul over to \the [contract_master] and with that your unbreakable vow of servitude begins." return 1 /obj/item/weapon/contract/apprentice name = "apprentice wizarding contract" desc = "a wizarding school contract for those who want to sign their soul for a piece of the magic pie." color = "#993300" /obj/item/weapon/contract/apprentice/contract_effect(mob/user as mob) if(user.mind.assigned_role == "Apprentice") user << "You are already a wizarding apprentice!" return 0 if(wizards.add_antagonist_mind(user.mind,1,"Apprentice","You are an apprentice! Your job is to learn the wizarding arts!")) user.mind.assigned_role = "Apprentice" user << "With the signing of this paper you agree to become \the [contract_master]'s apprentice in the art of wizardry." user.faction = "Space Wizard" wizards.add_antagonist_mind(user.mind,1) new /obj/item/weapon/spellbook/student(get_turf(user)) return 1 return 0 /obj/item/weapon/contract/wizard //contracts that involve making a deal with the Wizard Acadamy (or NON PLAYERS) contract_master = "\improper Wizard Academy" /obj/item/weapon/contract/wizard/xray name = "xray vision contract" desc = "This contract is almost see-through..." color = "#339900" /obj/item/weapon/contract/wizard/xray/contract_effect(mob/user as mob) ..() if (!(XRAY in user.mutations)) user.mutations.Add(XRAY) user.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS) user.see_in_dark = 8 user.see_invisible = SEE_INVISIBLE_LEVEL_TWO user << "The walls suddenly disappear." return 1 return 0 /obj/item/weapon/contract/wizard/tk name = "telekinesis contract" desc = "This contract makes your mind buzz. It promises to give you the ability to move things with your mind. At a price." color = "#990033" /obj/item/weapon/contract/wizard/tk/contract_effect(mob/user as mob) ..() if(!(TK in user.mutations)) user.mutations.Add(TK) user << "You feel your mind expanding!" return 1 return 0 /obj/item/weapon/contract/boon name = "boon contract" desc = "this contract grants you a boon for signing it." var/path /obj/item/weapon/contract/boon/New(var/newloc, var/new_path) ..(newloc) if(new_path) path = new_path var/item_name = "" if(ispath(path,/obj)) var/obj/O = path item_name = initial(O.name) else if(ispath(path,/spell)) var/spell/S = path item_name = initial(S.name) name = "[item_name] contract" /obj/item/weapon/contract/boon/contract_effect(mob/user as mob) ..() if(ispath(path,/spell)) user.add_spell(new path) return 1 else if(ispath(path,/obj)) new path(get_turf(user.loc)) playsound(get_turf(usr),'sound/effects/phasein.ogg',50,1) return 1 /obj/item/weapon/contract/boon/wizard contract_master = "\improper Wizard Academy" /obj/item/weapon/contract/boon/wizard/artificer name = "artificer contract" path = /spell/aoe_turf/conjure/construct desc = "This contract has a passage dedicated to an entity known as 'Nar-Sie'" /obj/item/weapon/contract/boon/wizard/fireball name = "fireball contract" path = /spell/targeted/projectile/dumbfire/fireball desc = "This contract feels warm to the touch." /obj/item/weapon/contract/boon/wizard/smoke name = "smoke contract" path = /spell/aoe_turf/smoke desc = "This contract smells as dank as they come." /obj/item/weapon/contract/boon/wizard/mindswap name = "mindswap contract" path = /spell/targeted/mind_transfer desc = "This contract looks ragged and torn." /obj/item/weapon/contract/boon/wizard/forcewall name = "forcewall contract" path = /spell/aoe_turf/conjure/forcewall contract_master = "\improper Mime Federation" desc = "This contract has a dedication to mimes everywhere at the top." /obj/item/weapon/contract/boon/wizard/knock name = "knock contract" path = /spell/aoe_turf/knock desc = "This contract is hard to hold still." /obj/item/weapon/contract/boon/wizard/horsemask name = "horsemask contract" path = /spell/targeted/equip_item/horsemask desc = "This contract is more horse than your mind has room for." /obj/item/weapon/contract/boon/wizard/charge name = "charge contract" path = /spell/aoe_turf/charge desc = "This contract is made of 100% post-consumer wizard." /obj/item/weapon/contract/boon/wizard/gestalt name = "conjure gestalt contract" path = /spell/aoe_turf/conjure/grove/gestalt desc = "This contract is a druid's favorite." /obj/item/weapon/contract/boon/wizard/statue name = "flesh to stone contract" path = /spell/targeted/flesh_to_stone desc = "This contract is truly petrifying."