diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index e7893c3f84e..66cdff69b3f 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -409,6 +409,15 @@ limit = 3 category = "Assistance" +/datum/spellbook_entry/item/oozebottle + name = "Bottle of Ooze" + desc = "A bottle of magically infused ooze, which will awake an all-consuming Morph, capable of cunningly disguising itself as any object it comes in contact with. Be careful though, as Morph diet includes Wizards." + item_path = /obj/item/antag_spawner/morph + cost = 1 + log_name = "BO" + limit = 3 + category = "Assistance" + /datum/spellbook_entry/item/tarotdeck name = "Tarot Deck" desc = "A deck of guardian tarot cards, capable of binding a personal guardian to your body. There are multiple types of guardian available, but all of them will transfer some amount of damage to you. \ diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index 937c831dfbf..c1155bee0d3 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -10,7 +10,6 @@ /obj/item/antag_spawner/proc/equip_antag(mob/target) return - /obj/item/antag_spawner/borg_tele name = "syndicate cyborg teleporter" desc = "A single-use teleporter used to deploy a Syndicate Cyborg on the field." @@ -149,7 +148,6 @@ to_chat(S, "Objective #[1]: [KillDaWiz.explanation_text]") to_chat(S, "Objective #[2]: [KillDaCrew.explanation_text]") - /obj/item/antag_spawner/slaughter_demon/laughter name = "vial of tickles" desc = "A magically infused bottle of clown love, distilled from \ @@ -160,3 +158,60 @@ lurking just beyond the veil..." objective_verb = "Hug and Tickle" demon_type = /mob/living/simple_animal/slaughter/laughter + +/obj/item/antag_spawner/morph + name = "vial of ooze" + desc = "A magically infused bottle of ooze, distilled by methods rather not be spoken of." + icon = 'icons/obj/wizard.dmi' + icon_state = "vialooze" + var/shatter_msg = "You shatter the bottle, no \ + turning back now!" + var/veil_msg = "The sludge is awake and seeps \ + away..." + var/objective_verb = "Eat" + var/mob/living/morph_type = /mob/living/simple_animal/hostile/morph + +/obj/item/antag_spawner/morph/attack_self(mob/user) + if(level_blocks_magic(user.z))//this is to make sure the wizard does NOT summon a morph from the Den.. + to_chat(user, "You should probably wait until you reach the station.") + return + + if(used) + to_chat(user, "This bottle already has a broken seal.") + return + used = TRUE + to_chat(user, "You break the seal on the bottle, calling upon the dire sludge to awaken...") + + var/list/candidates = pollCandidates("Do you want to play as a Morph awakened by [user.real_name]?", ROLE_MORPH, 1, 100) + + if(candidates.len > 0) + var/mob/C = pick(candidates) + spawn_antag(C, get_turf(src.loc), initial(morph_type.name), user) + to_chat(user, "[shatter_msg]") + to_chat(user, "[veil_msg]") + playsound(user.loc, 'sound/effects/glassbr1.ogg', 100, 1) + qdel(src) + else + used = FALSE + to_chat(user, "The sludge does not respond to your attempt to awake it. Perhaps you should try again later.") + +/obj/item/antag_spawner/morph/spawn_antag(client/C, turf/T, type = "", mob/user) + var/mob/living/simple_animal/hostile/morph/M = new /mob/living/simple_animal/hostile/morph(pick(xeno_spawn)) + M.key = C.key + M.mind.assigned_role = SPECIAL_ROLE_MORPH + M.mind.special_role = SPECIAL_ROLE_MORPH + to_chat(M, M.playstyle_string) + ticker.mode.traitors += M.mind + var/datum/objective/assassinate/KillDaWiz = new /datum/objective/assassinate + KillDaWiz.owner = M.mind + KillDaWiz.target = user.mind + KillDaWiz.explanation_text = "[objective_verb] [user.real_name], the one who was foolish enough to awake you." + M.mind.objectives += KillDaWiz + var/datum/objective/KillDaCrew = new /datum/objective + KillDaCrew.owner = M.mind + KillDaCrew.explanation_text = "[objective_verb] everyone and everything else while you're at it." + M.mind.objectives += KillDaCrew + M.mind.objectives += KillDaCrew + to_chat(M, "Objective #[1]: [KillDaWiz.explanation_text]") + to_chat(M, "Objective #[2]: [KillDaCrew.explanation_text]") + M << 'sound/magic/mutate.ogg' \ No newline at end of file diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi index 108e5603b25..07c8be38ed9 100644 Binary files a/icons/obj/wizard.dmi and b/icons/obj/wizard.dmi differ