diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 24038d496bd..e9c27fd76b8 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -1115,7 +1115,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) name = "Pizza Bomb" desc = "A pizza box with a bomb taped inside of it. The timer needs to be set by opening the box; afterwards, opening the box again will trigger the detonation." reference = "PB" - item = /obj/item/pizza_bomb + item = /obj/item/pizzabox/pizza_bomb cost = 6 surplus = 80 diff --git a/code/game/objects/effects/spawners/random_spawners.dm b/code/game/objects/effects/spawners/random_spawners.dm index 2dbe235c6cb..947c67c7801 100644 --- a/code/game/objects/effects/spawners/random_spawners.dm +++ b/code/game/objects/effects/spawners/random_spawners.dm @@ -190,10 +190,16 @@ color = "#000000" /obj/effect/spawner/random_spawners/syndicate/trap/pizzabomb - name = "50pc trap pizza" + name = "33pc trap pizza" result = list(/obj/item/pizzabox/meat = 1, /obj/item/pizzabox/hawaiian = 1, - /obj/item/pizza_bomb/autoarm = 1) + /obj/item/pizzabox/margherita = 1, + /obj/item/pizzabox/vegetable = 1, + /obj/item/pizzabox/mushroom = 1, + /obj/item/pizzabox/pepperoni = 7, //Higher weight as a pizza bomb looks like pepperoni by default + /obj/item/pizzabox/garlic = 1, + /obj/item/pizzabox/firecracker = 1, + /obj/item/pizzabox/pizza_bomb/autoarm = 7) /obj/effect/spawner/random_spawners/syndicate/trap/medbot name = "50pc trap medibot" diff --git a/code/game/objects/items/devices/pizza_bomb.dm b/code/game/objects/items/devices/pizza_bomb.dm deleted file mode 100644 index a80c398d8d7..00000000000 --- a/code/game/objects/items/devices/pizza_bomb.dm +++ /dev/null @@ -1,119 +0,0 @@ -/obj/item/pizza_bomb - name = "pizza box" - desc = "A box suited for pizzas." - icon = 'icons/obj/food/pizza.dmi' - icon_state = "pizzabox1" - var/timer = 10 //Adjustable timer - var/timer_set = 0 - var/primed = 0 - var/disarmed = 0 - var/wires = list("orange", "green", "blue", "yellow", "aqua", "purple") - var/correct_wire - var/armer //Used for admin purposes - var/opener //Ditto - -/obj/item/pizza_bomb/attack_self(mob/user) - if(disarmed) - to_chat(user, "\The [src] is disarmed.") - return - if(!timer_set) - name = "pizza bomb" - desc = "It seems inactive." - icon_state = "pizzabox_bomb" - timer_set = 1 - timer = (input(user, "Set a timer, from one second to ten seconds.", "Timer", "[timer]") as num) SECONDS - if(!in_range(src, usr) || issilicon(usr) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || usr.restrained()) - timer_set = 0 - name = "pizza box" - desc = "A box suited for pizzas." - icon_state = "pizzabox1" - return - timer = clamp(timer, 10, 100) - icon_state = "pizzabox1" - to_chat(user, "You set the timer to [timer / 10] before activating the payload and closing \the [src].") - message_admins("[key_name_admin(usr)] has set a timer on a pizza bomb to [timer/10] seconds at (JMP).") - log_game("[key_name(usr)] has set the timer on a pizza bomb to [timer/10] seconds ([loc.x],[loc.y],[loc.z]).") - armer = user - name = "pizza box" - desc = "A box suited for pizzas." - return - if(!primed) - name = "pizza bomb" - desc = "OH GOD THAT'S NOT A PIZZA" - icon_state = "pizzabox_bomb_active" - audible_message("[bicon(src)] *beep* *beep*") - to_chat(user, "That's no pizza! That's a bomb!") - if(HAS_TRAIT(src, TRAIT_CMAGGED)) - atom_say("Pizza time!") - playsound(src, 'sound/voice/pizza_time.ogg', 50, FALSE) ///Sound effect made by BlackDog - message_admins("[key_name_admin(usr)] has triggered a pizza bomb armed by [key_name_admin(armer)] at (JMP).") - log_game("[key_name(usr)] has triggered a pizza bomb armed by [key_name(armer)] ([loc.x],[loc.y],[loc.z]).") - opener = user - primed = 1 - sleep(timer) - return go_boom() - -/obj/item/pizza_bomb/proc/go_boom() - if(disarmed) - visible_message("[bicon(src)] Sparks briefly jump out of the [correct_wire] wire on [src], but it's disarmed!") - return - atom_say("Enjoy the pizza!") - visible_message("[src] violently explodes!") - message_admins("A pizza bomb set by [key_name_admin(armer)] and opened by [key_name_admin(opener)] has detonated at (JMP).") - log_game("Pizza bomb set by [key_name(armer)] and opened by [key_name(opener)]) detonated at ([loc.x],[loc.y],[loc.z]).") - explosion(src.loc,1,2,4,flame_range = 2) //Identical to a minibomb - armer = null - opener = null - qdel(src) - -/obj/item/pizza_bomb/cmag_act(mob/user) - if(!HAS_TRAIT(src, TRAIT_CMAGGED)) - to_chat(user, "You smear the bananium ooze all over the pizza bomb's internals! You think you smell a bit of tomato sauce.") - ADD_TRAIT(src, TRAIT_CMAGGED, CLOWN_EMAG) - -/obj/item/pizza_bomb/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/wirecutters) && primed) - to_chat(user, "Oh God, what wire do you cut?!") - var/chosen_wire = input(user, "OH GOD OH GOD", "WHAT WIRE?!") in wires - if(!in_range(src, usr) || issilicon(usr) || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.restrained()) - return - playsound(src, I.usesound, 50, 1, 1) - user.visible_message("[user] cuts the [chosen_wire] wire!", "You cut the [chosen_wire] wire!") - sleep(5) - if(chosen_wire == correct_wire) - src.audible_message("[bicon(src)] \The [src] suddenly stops beeping and seems lifeless.") - to_chat(user, "You did it!") - icon_state = "pizzabox_bomb_[correct_wire]" - name = "pizza bomb" - desc = "A devious contraption, made of a small explosive payload hooked up to pressure-sensitive wires. It's disarmed." - disarmed = 1 - primed = 0 - return - else - to_chat(user, "WRONG WIRE!") - go_boom() - return - if(istype(I, /obj/item/wirecutters) && disarmed) - if(!in_range(user, src)) - to_chat(user, "You can't see the box well enough to cut the wires out.") - return - user.visible_message("[user] starts removing the payload and wires from \the [src].") - if(do_after(user, 40 * I.toolspeed, target = src)) - playsound(src, I.usesound, 50, 1, 1) - user.unEquip(src) - user.visible_message("[user] removes the insides of \the [src]!") - var/obj/item/stack/cable_coil/C = new /obj/item/stack/cable_coil(src.loc) - C.amount = 3 - new /obj/item/bombcore/miniature(src.loc) - new /obj/item/pizzabox(src.loc) - qdel(src) - return - ..() - -/obj/item/pizza_bomb/New() - ..() - correct_wire = pick(wires) - -/obj/item/pizza_bomb/autoarm - timer_set = 1 - timer = 30 // 3 seconds diff --git a/code/modules/food_and_drinks/food/foods/pizza.dm b/code/modules/food_and_drinks/food/foods/pizza.dm index 7ad5ce2603f..4664fb43976 100644 --- a/code/modules/food_and_drinks/food/foods/pizza.dm +++ b/code/modules/food_and_drinks/food/foods/pizza.dm @@ -365,52 +365,183 @@ if(is_pen(I)) if(open) return - var/t = clean_input("Enter what you want to add to the tag:", "Write", null) + var/t = clean_input("Enter what you want to set the tag to:", "Write", null) var/obj/item/pizzabox/boxtotagto = src if(boxes.len > 0) boxtotagto = boxes[boxes.len] - boxtotagto.box_tag = copytext("[boxtotagto.box_tag][t]", 1, 30) + boxtotagto.box_tag = copytext("[t]", 1, 30) update_appearance(UPDATE_DESC|UPDATE_ICON) return ..() /obj/item/pizzabox/margherita/Initialize(mapload) - . = ..() pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/margheritapizza(src) box_tag = "margherita deluxe" + . = ..() /obj/item/pizzabox/vegetable/Initialize(mapload) - . = ..() pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza(src) box_tag = "gourmet vegetable" + . = ..() /obj/item/pizzabox/mushroom/Initialize(mapload) - . = ..() pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza(src) box_tag = "mushroom special" + . = ..() /obj/item/pizzabox/meat/Initialize(mapload) - . = ..() pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza(src) box_tag = "meatlover's supreme" + . = ..() /obj/item/pizzabox/hawaiian/Initialize(mapload) - . = ..() pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza(src) box_tag = "Hawaiian feast" + . = ..() /obj/item/pizzabox/pepperoni/Initialize(mapload) - . = ..() pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/pepperonipizza(src) box_tag = "classic pepperoni" + . = ..() /obj/item/pizzabox/garlic/Initialize(mapload) - . = ..() pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/garlicpizza(src) box_tag = "triple garlic" + . = ..() /obj/item/pizzabox/firecracker/Initialize(mapload) - . = ..() pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/firecrackerpizza(src) box_tag = "extra spicy pie" + . = ..() + +////////////////////////// +// Pizza bombs // +////////////////////////// +/obj/item/pizzabox/pizza_bomb + /// Adjustable timer + var/timer = 1 SECONDS + var/timer_set = FALSE + var/primed = FALSE + var/disarmed = FALSE + var/wires = list("orange", "green", "blue", "yellow", "aqua", "purple") + var/correct_wire + var/armer //Used for admin purposes + var/opener //Ditto + +/obj/item/pizzabox/pizza_bomb/update_desc() + if(primed) + return + return ..() + +/obj/item/pizzabox/pizza_bomb/update_icon_state() + if(primed) + return + return ..() + +/obj/item/pizzabox/pizza_bomb/attack_self(mob/user) + if(disarmed) + to_chat(user, "[src] is disarmed.") + return + if(!timer_set) + name = "pizza bomb" + desc = "It seems inactive." + icon_state = "pizzabox_bomb" + timer_set = TRUE + timer = (input(user, "Set a timer, from one second to ten seconds.", "Timer", "[timer]") as num) SECONDS + if(!in_range(src, user) || issilicon(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || user.restrained()) + timer_set = FALSE + name = "pizza box" + desc = "A box suited for pizzas." + icon_state = "pizzabox1" + return + timer = clamp(timer, 1 SECONDS, 10 SECONDS) + icon_state = "pizzabox1" + to_chat(user, "You set the timer to [timer / 10] before activating the payload and closing [src].") + message_admins("[key_name_admin(usr)] has set a timer on a pizza bomb to [timer/10] seconds at (JMP).") + log_game("[key_name(usr)] has set the timer on a pizza bomb to [timer / 10] seconds ([loc.x],[loc.y],[loc.z]).") + armer = user + name = "pizza box" + desc = "A box suited for pizzas." + return + if(!primed) + name = "pizza bomb" + desc = "OH GOD THAT'S NOT A PIZZA" + icon_state = "pizzabox_bomb_active" + audible_message("[bicon(src)] *beep* *beep*") + to_chat(user, "That's no pizza! That's a bomb!") + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + atom_say("Pizza time!") + playsound(src, 'sound/voice/pizza_time.ogg', 50, FALSE) ///Sound effect made by BlackDog + message_admins("[key_name_admin(usr)] has triggered a pizza bomb armed by [key_name_admin(armer)] at (JMP).") + log_game("[key_name(usr)] has triggered a pizza bomb armed by [key_name(armer)] ([loc.x],[loc.y],[loc.z]).") + opener = user + primed = TRUE + sleep(timer) + return go_boom() + +/obj/item/pizzabox/pizza_bomb/proc/go_boom() + if(disarmed) + visible_message("[bicon(src)] Sparks briefly jump out of the [correct_wire] wire on [src], but it's disarmed!") + return + atom_say("Enjoy the pizza!") + visible_message("[src] violently explodes!") + message_admins("A pizza bomb set by [key_name_admin(armer)] and opened by [key_name_admin(opener)] has detonated at (JMP).") + log_game("Pizza bomb set by [key_name(armer)] and opened by [key_name(opener)]) detonated at ([loc.x],[loc.y],[loc.z]).") + explosion(loc, 1, 2, 4, flame_range = 2) //Identical to a minibomb + armer = null + opener = null + qdel(src) + +/obj/item/pizzabox/pizza_bomb/cmag_act(mob/user) + if(!HAS_TRAIT(src, TRAIT_CMAGGED)) + to_chat(user, "You smear the bananium ooze all over the pizza bomb's internals! You think you smell a bit of tomato sauce.") + ADD_TRAIT(src, TRAIT_CMAGGED, CLOWN_EMAG) + +/obj/item/pizzabox/pizza_bomb/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/wirecutters) && primed) + to_chat(user, "Oh God, what wire do you cut?!") + var/chosen_wire = input(user, "OH GOD OH GOD", "WHAT WIRE?!") in wires + if(!in_range(src, user) || issilicon(usr) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || user.restrained()) + return + playsound(src, I.usesound, 50, 1, 1) + user.visible_message("[user] cuts the [chosen_wire] wire!", "You cut the [chosen_wire] wire!") + sleep(5) + if(chosen_wire == correct_wire) + audible_message("[bicon(src)] [src] suddenly stops beeping and seems lifeless.") + to_chat(user, "You did it!") + icon_state = "pizzabox_bomb_[correct_wire]" + name = "pizza bomb" + desc = "A devious contraption, made of a small explosive payload hooked up to pressure-sensitive wires. It's disarmed." + disarmed = TRUE + primed = FALSE + return + else + to_chat(user, "WRONG WIRE!") + go_boom() + return + if(istype(I, /obj/item/wirecutters) && disarmed) + if(!in_range(user, src)) + to_chat(user, "You can't see the box well enough to cut the wires out.") + return + user.visible_message("[user] starts removing the payload and wires from [src].") + if(do_after(user, 40 * I.toolspeed, target = src)) + playsound(src, I.usesound, 50, 1, 1) + user.unEquip(src) + user.visible_message("[user] removes the insides of [src]!") + var/obj/item/stack/cable_coil/C = new /obj/item/stack/cable_coil(src.loc) + C.amount = 3 + new /obj/item/bombcore/miniature(loc) + new /obj/item/pizzabox(loc) + qdel(src) + return + ..() + +/obj/item/pizzabox/pizza_bomb/Initialize(mapload) + correct_wire = pick(wires) + box_tag = "classic pepperoni" + . = ..() + +/obj/item/pizzabox/pizza_bomb/autoarm + timer_set = TRUE + timer = 3 SECONDS diff --git a/code/modules/ruins/lavalandruin_code/pizzaparty.dm b/code/modules/ruins/lavalandruin_code/pizzaparty.dm index 58aebdf8115..d4fcc5957b5 100644 --- a/code/modules/ruins/lavalandruin_code/pizzaparty.dm +++ b/code/modules/ruins/lavalandruin_code/pizzaparty.dm @@ -6,7 +6,7 @@ /obj/item/pizzabox/pepperoni = 2, /obj/item/pizzabox/garlic = 1, /obj/item/pizzabox/firecracker = 1, - /obj/item/pizza_bomb = 1) + /obj/item/pizzabox/pizza_bomb = 1) lootdoubles = FALSE /obj/structure/reagent_dispensers/water_cooler/pizzaparty diff --git a/paradise.dme b/paradise.dme index f013e7bba78..65a3afe4fc4 100644 --- a/paradise.dme +++ b/paradise.dme @@ -925,7 +925,6 @@ #include "code\game\objects\items\devices\machineprototype.dm" #include "code\game\objects\items\devices\megaphone.dm" #include "code\game\objects\items\devices\paicard.dm" -#include "code\game\objects\items\devices\pizza_bomb.dm" #include "code\game\objects\items\devices\powersink.dm" #include "code\game\objects\items\devices\scanners.dm" #include "code\game\objects\items\devices\sensor_device.dm"