diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 37fb0e732f..b9ccee8f36 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -98,23 +98,43 @@
matter = list("metal" = 50)
attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed")
+/obj/item/weapon/cane/concealed
+ var/atom/movable/concealed_blade
+
+/obj/item/weapon/cane/concealed/New(var/blade)
+ ..()
+ if(!isturf(blade))
+ concealed_blade = blade
+ else
+ concealed_blade = new/obj/item/weapon/kitchenknife/concealed(src)
+ loc = blade
+
/obj/item/weapon/cane/concealed/attack_self(mob/user)
user.visible_message("[user] has unsheathed a blade from \his [src]!", "You unsheathe the blade from \the [src].")
- var/blade = new/obj/item/weapon/kitchenknife/concealed
+ // Calling drop/put in hands to properly call item drop/pickup procs
user.drop_from_inventory(src)
- user.put_in_hands(blade)
- del(src)
+ user.put_in_hands(concealed_blade)
+ loc = concealed_blade
/obj/item/weapon/kitchenknife/concealed
name = "cane blade"
desc = "A now less than concealed cane blade."
+ var/atom/movable/container
+
+/obj/item/weapon/kitchenknife/concealed/New(var/container)
+ ..()
+ if(!isturf(container))
+ src.container = container
+ else
+ container = new/obj/item/weapon/cane/concealed(src)
+ loc = container
/obj/item/weapon/kitchenknife/concealed/attack_self(mob/user)
- var/cane = new/obj/item/weapon/cane/concealed
+ user.visible_message("[user] has sheathed a blade into \his [container]!", "You sheathe the blade into \the [container].")
+ // Calling drop/put in hands to properly call item drop/pickup procs
user.drop_from_inventory(src)
- user.put_in_hands(cane)
- del(src)
- user.visible_message("[user] has sheathed a blade into \his [cane]!", "You sheathe the blade into \the [cane].")
+ user.put_in_hands(container)
+ loc = container
/obj/item/weapon/disk
name = "disk"
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 9692cacf69..c724319160 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -323,6 +323,20 @@
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
+
+/obj/item/weapon/storage/box/sinpockets
+ name = "box of sin-pockets"
+ desc = "Instructions: Crush bottom of package to initiate chemical heating. Wait for 20 seconds before consumption. Product will cool if not eaten within seven minutes."
+ icon_state = "donk_kit"
+
+ New()
+ ..()
+ new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
+ new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
+ new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
+ new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
+ new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
+ new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
/obj/item/weapon/storage/box/monkeycubes
name = "monkey cube box"
diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm
index 87617d95ce..b9b9c5888b 100644
--- a/code/modules/food/recipes_microwave.dm
+++ b/code/modules/food/recipes_microwave.dm
@@ -180,11 +180,7 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket //SPECIAL
proc/warm_up(var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked)
- being_cooked.warm = 1
- being_cooked.reagents.add_reagent("tricordrazine", 5)
- being_cooked.bitesize = 6
- being_cooked.name = "Warm " + being_cooked.name
- being_cooked.cooltime()
+ being_cooked.heat()
make_food(var/obj/container as obj)
var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked = ..(container)
warm_up(being_cooked)
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index e5e16db2dc..3e38a8ccf6 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -698,6 +698,23 @@
reagents.add_reagent("protein", 6)
bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket
+ name = "\improper Sin-pocket"
+ desc = "The food of choice for the veteran. Do NOT overconsume."
+ filling_color = "#6D6D00"
+ heated_reagents = list("doctorsdelight" = 5, "hyperzine" = 5, "synaptizine" = 1)
+ var/has_been_heated = 0
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket/attack_self(mob/user)
+ if(has_been_heated)
+ user << "The heating chemicals have already been spent."
+ return
+ has_been_heated = 1
+ user.visible_message("[user] crushes \the [src] package.", "You crush \the [src] package and feel a comfortable heat build up.")
+ spawn(200)
+ user << "You think \the [src] is ready to eat about now."
+ heat()
+
/obj/item/weapon/reagent_containers/food/snacks/donkpocket
name = "Donk-pocket"
desc = "The food of choice for the seasoned traitor."
@@ -710,12 +727,22 @@
reagents.add_reagent("protein", 2)
var/warm = 0
- proc/cooltime() //Not working, derp?
+ var/list/heated_reagents = list("tricordrazine" = 5)
+ proc/heat()
+ warm = 1
+ for(var/reagent in heated_reagents)
+ reagents.add_reagent(reagent, heated_reagents[reagent])
+ bitesize = 6
+ name = "Warm " + name
+ cooltime()
+
+ proc/cooltime()
if (src.warm)
- spawn( 4200 )
+ spawn(4200)
src.warm = 0
- src.reagents.del_reagent("tricordrazine")
- src.name = "donk-pocket"
+ for(var/reagent in heated_reagents)
+ src.reagents.del_reagent(reagent)
+ src.name = initial(name)
return
/obj/item/weapon/reagent_containers/food/snacks/brainburger