From e40ef20c86dcca41baaf788885b6efcc80da743a Mon Sep 17 00:00:00 2001
From: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>
Date: Wed, 8 Feb 2023 14:07:36 -0500
Subject: [PATCH] Pizza bombs can no longer be told apart, some pizza
improvements (#20191)
* pizza time
* a batch of delicous pizza fixes mama mia
Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
* bool
* Apply suggestions from code review
Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com>
* steels changes
---------
Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com>
---
code/datums/uplink_item.dm | 2 +-
.../effects/spawners/random_spawners.dm | 10 +-
code/game/objects/items/devices/pizza_bomb.dm | 119 --------------
.../food_and_drinks/food/foods/pizza.dm | 151 ++++++++++++++++--
.../ruins/lavalandruin_code/pizzaparty.dm | 2 +-
paradise.dme | 1 -
6 files changed, 151 insertions(+), 134 deletions(-)
delete mode 100644 code/game/objects/items/devices/pizza_bomb.dm
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"