Files
CHOMPStation2/code/game/objects/items/weapons/chewables.dm
2025-03-16 15:44:59 +01:00

371 lines
12 KiB
Plaintext

/obj/item/clothing/mask/chewable
name = "chewable item master"
desc = "If you are seeing this, ahelp it."
icon = 'icons/inventory/face/item.dmi'
drop_sound = 'sound/items/drop/food.ogg'
body_parts_covered = 0
var/type_butt = null
var/chem_volume = 0
var/chewtime = 0
var/brand
var/list/filling = list()
var/wrapped = FALSE
/obj/item/clothing/mask/chewable/attack_self(mob/user)
if(wrapped)
wrapped = FALSE
to_chat(user, span_notice("You unwrap \the [name]."))
playsound(src.loc, 'sound/items/drop/wrapper.ogg', 50, 1)
slot_flags = SLOT_EARS | SLOT_MASK
update_icon()
/obj/item/clothing/mask/chewable/update_icon()
cut_overlays()
if(wrapped)
add_overlay("[initial(icon_state)]_wrapper")
/obj/item/clothing/mask/chewable/Initialize(mapload)
. = ..()
flags |= NOREACT // so it doesn't react until you light it
create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 15
for(var/R in filling)
reagents.add_reagent(R, filling[R])
if(wrapped)
slot_flags = null
/obj/item/clothing/mask/chewable/equipped(var/mob/living/user, var/slot)
..()
if(slot == slot_wear_mask)
var/mob/living/carbon/human/C = user
if(C.check_has_mouth())
START_PROCESSING(SSprocessing, src)
else
to_chat(user, span_notice("You don't have a mouth, and can't make much use of \the [src]."))
/obj/item/clothing/mask/chewable/dropped(mob/user)
STOP_PROCESSING(SSprocessing, src)
..()
/obj/item/clothing/mask/chewable/Destroy()
. = ..()
STOP_PROCESSING(SSprocessing, src)
/obj/item/clothing/mask/chewable/proc/chew()
chewtime--
if(reagents && reagents.total_volume)
if(ishuman(loc))
var/mob/living/carbon/human/C = loc
if (src == C.wear_mask && C.check_has_mouth())
reagents.trans_to_mob(C, REM, CHEM_INGEST, 0.2)
else
STOP_PROCESSING(SSprocessing, src)
/obj/item/clothing/mask/chewable/process()
chew()
if(chewtime < 1)
spitout()
/obj/item/clothing/mask/chewable/tobacco
name = "wad"
desc = "A chewy wad of tobacco. Cut in long strands and treated with syrup so it doesn't taste like an ash-tray when you stuff it into your face."
throw_speed = 0.5
icon_state = "chew"
type_butt = /obj/item/trash/spitwad
w_class = 1
slot_flags = SLOT_EARS | SLOT_MASK
chem_volume = 50
chewtime = 300
brand = "tobacco"
/obj/item/clothing/mask/chewable/proc/spitout(var/transfer_color = 1, var/no_message = 0)
if(type_butt)
var/obj/item/butt = new type_butt(src.loc)
transfer_fingerprints_to(butt)
if(transfer_color)
butt.color = color
if(brand)
butt.desc += " This one is \a [brand]."
if(ismob(loc))
var/mob/living/M = loc
if(!no_message)
to_chat(M, span_notice("The [name] runs out of flavor."))
if(M.wear_mask)
M.remove_from_mob(src) //un-equip it so the overlays can update
M.update_inv_wear_mask(0)
if(!M.equip_to_slot_if_possible(butt, slot_wear_mask))
M.update_inv_l_hand(0)
M.update_inv_r_hand(1)
M.put_in_hands(butt)
STOP_PROCESSING(SSprocessing, src)
qdel(src)
/obj/item/clothing/mask/chewable/tobacco/cheap
name = "chewing tobacco"
desc = "A chewy wad of tobacco. Cut in long strands and treated with syrup so it tastes less like an ash-tray when you stuff it into your face."
filling = list(REAGENT_ID_NICOTINE = 2)
/obj/item/clothing/mask/chewable/tobacco/fine
name = "deluxe chewing tobacco"
desc = "A chewy wad of fine tobacco. Cut in long strands and treated with syrup so it doesn't taste like an ash-tray when you stuff it into your face."
filling = list(REAGENT_ID_NICOTINE = 3)
/obj/item/clothing/mask/chewable/tobacco/nico
name = "nicotine gum"
desc = "A chewy wad of synthetic rubber, laced with nicotine. Possibly the least disgusting method of nicotine delivery."
icon_state = "nic_gum"
type_butt = /obj/item/trash/spitgum
wrapped = TRUE
/obj/item/clothing/mask/chewable/tobacco/nico/Initialize(mapload)
. = ..()
reagents.add_reagent(REAGENT_ID_NICOTINE, 2)
color = reagents.get_color()
/obj/item/storage/chewables
name = "box of chewing wads master"
desc = "A generic brand of Waffle Co Wads, unflavored chews. Why do these exist?"
icon = 'icons/obj/cigarettes.dmi'
icon_state = "cigpacket"
item_state = "cigpacket"
drop_sound = 'sound/items/drop/shovel.ogg'
use_sound = 'sound/items/storage/pillbottle.ogg'
w_class = 2
throwforce = 2
slot_flags = SLOT_BELT
starts_with = list(/obj/item/clothing/mask/chewable/tobacco = 6)
/obj/item/storage/chewables/Initialize(mapload)
. = ..()
make_exact_fit()
//Tobacco Tins
/obj/item/storage/chewables/tobacco
name = "tin of Al Mamun Smooth chewing tobacco"
desc = "Packaged and shipped straight from Kishar, popularised by the biosphere farmers of Kanondaga."
icon_state = "chew_generic"
item_state = "cigpacket"
starts_with = list(/obj/item/clothing/mask/chewable/tobacco/cheap = 6)
storage_slots = 6
/obj/item/storage/chewables/tobacco/fine
name = "tin of Suamalie chewing tobacco"
desc = "Once reserved for the first-class tourists of Oasis, this premium blend has been released for the public to enjoy."
icon_state = "chew_fine"
item_state = "Dpacket"
starts_with = list(/obj/item/clothing/mask/chewable/tobacco/fine = 6)
/obj/item/storage/box/fancy/chewables/tobacco/nico
name = "box of Nico-Tine gum"
desc = "A government doctor approved brand of nicotine gum. Cut out the middleman for your addiction fix."
icon = 'icons/obj/cigarettes.dmi'
icon_state = "chew_nico"
item_state = "Epacket"
starts_with = list(/obj/item/clothing/mask/chewable/tobacco/nico = 6)
storage_slots = 6
drop_sound = 'sound/items/drop/box.ogg'
use_sound = 'sound/items/storage/box.ogg'
var/open = 0
var/open_state
var/closed_state
/obj/item/storage/box/fancy/chewables/tobacco/nico/Initialize(mapload)
if(!open_state)
open_state = "[initial(icon_state)]0"
if(!closed_state)
closed_state = "[initial(icon_state)]"
. = ..()
/obj/item/storage/box/fancy/chewables/tobacco/nico/update_icon()
cut_overlays()
if(open)
icon_state = open_state
if(contents.len >= 1)
add_overlay("chew_nico[contents.len]")
else
icon_state = closed_state
/obj/item/storage/box/fancy/chewables/tobacco/nico/open(mob/user as mob)
if(open)
return
open = TRUE
if(contents.len == 0)
icon_state = "[initial(icon_state)]_empty"
else
update_icon()
..()
/obj/item/storage/box/fancy/chewables/tobacco/nico/close(mob/user as mob)
open = FALSE
if(contents.len == 0)
icon_state = "[initial(icon_state)]_empty"
else
update_icon()
..()
/obj/item/clothing/mask/chewable/candy
name = "wad"
desc = "A chewy wad of wadding material."
throw_speed = 0.5
icon_state = "chew"
type_butt = /obj/item/trash/spitgum
w_class = 1
slot_flags = SLOT_EARS | SLOT_MASK
chem_volume = 50
chewtime = 300
filling = list(REAGENT_ID_SUGAR = 2)
/obj/item/clothing/mask/chewable/candy/gum
name = "chewing gum"
desc = "A chewy wad of fine synthetic rubber and artificial flavoring. Be sure to unwrap it, genius."
icon_state = "gum"
item_state = "gum"
wrapped = TRUE
/obj/item/clothing/mask/chewable/candy/gum/Initialize(mapload)
. = ..()
reagents.add_reagent(pick(REAGENT_ID_BANANA,REAGENT_ID_BERRYJUICE,REAGENT_ID_GRAPEJUICE,REAGENT_ID_LEMONJUICE,REAGENT_ID_LIMEJUICE,REAGENT_ID_ORANGEJUICE,REAGENT_ID_WATERMELONJUICE),10)
color = reagents.get_color()
update_icon()
/obj/item/storage/box/gum
name = "\improper Frooty-Choos flavored gum"
desc = "A small pack of chewing gum in various flavors."
description_fluff = "Frooty-Choos is NanoTrasen's top-selling brand of artificially flavoured fruit-adjacent non-swallowable chew-product. This extremely specific definition places sales figures safely away from competing 'gum' brands."
icon = 'icons/obj/food_snacks.dmi'
icon_state = "gum_pack"
item_state = "candy"
slot_flags = SLOT_EARS
w_class = 1
starts_with = list(/obj/item/clothing/mask/chewable/candy/gum = 5)
can_hold = list(/obj/item/clothing/mask/chewable/candy/gum,
/obj/item/trash/spitgum)
use_sound = 'sound/items/drop/paper.ogg'
drop_sound = 'sound/items/drop/wrapper.ogg'
max_storage_space = 5
foldable = null
trash = /obj/item/trash/gumpack
/obj/item/clothing/mask/chewable/candy/lolli
name = "lollipop"
desc = "A simple artificially flavored sphere of sugar on a handle, colloquially known as a sucker. Allegedly one is born every minute. Make sure to unwrap it, genius."
type_butt = /obj/item/trash/lollibutt
icon_state = "lollipop"
item_state = "lollipop"
wrapped = TRUE
var/list/victims = null // CHOMPAdd
/obj/item/clothing/mask/chewable/candy/lolli/process()
chew()
if(chewtime < 1)
spitout(0)
// CHOMPAdd Start
/obj/item/clothing/mask/chewable/candy/lolli/container_resist(mob/living/M)
if(istype(M, /mob/living/voice)) return
if(victims)
victims -= M
to_chat(M, span_warning("You manage to pull yourself free of \the [src]."))
M.forceMove(get_turf(src))
/obj/item/clothing/mask/chewable/candy/lolli/chew()
if(victims && victims.len && prob(2))
for(var/mob/living/F in victims)
var/message = pick(
"The tongue swishes you around and presses you against the candy!",
"You get tossed about in the mouth, between candy and tongue!",
"The sweet drool of your captor permeates you...",
"The candy sticks to you, not allowing you to leave the mouth at all!",
"You get squeezed under the candy, against the tongue!")
to_chat(F, span_notice(message))
return ..()
/obj/item/clothing/mask/chewable/candy/lolli/spitout()
if(victims && victims.len)
var/mob/living/M = loc
if(M.can_be_drop_pred && M.food_vore && M.vore_selected)
for(var/mob/living/F in victims)
if(!F.can_be_drop_prey || !F.food_vore)
to_chat(F, span_warning("You manage to pull yourself free of \the [src] at the last second!"))
to_chat(M, span_notice("[F] barely escapes from your mouth!"))
F.forceMove(get_turf(src))
else
F.forceMove(M.vore_selected)
victims -= F
return ..()
/obj/item/clothing/mask/chewable/candy/lolli/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/holder))
if(!(istype(W, /obj/item/holder/micro) || istype(W, /obj/item/holder/mouse)))
. = ..()
return
if(wrapped)
to_chat(user, span_warning("You cannot stick [W] to \the [src] without unwrapping it!"))
return
var/obj/item/holder/H = W
if(!victims)
victims = list()
var/mob/living/M = H.held_mob
M.forceMove(src)
H.held_mob = null
user.drop_from_inventory(H)
qdel(H)
victims += M
to_chat(user, span_notice("You stick [M] to \the [src]."))
to_chat(M, span_warning("[user] sticks you to \the [src]!"))
return
/obj/item/clothing/mask/chewable/candy/lolli/examine(mob/user)
. = ..()
if(Adjacent(user))
if(victims && victims.len)
. += span_notice("It has [english_list(victims)] stuck on it.")
// CHOMPAdd End
/obj/item/clothing/mask/chewable/candy/lolli/Initialize(mapload)
. = ..()
reagents.add_reagent(pick(REAGENT_ID_BANANA,REAGENT_ID_BERRYJUICE,REAGENT_ID_GRAPEJUICE,REAGENT_ID_LEMONJUICE,REAGENT_ID_LIMEJUICE,REAGENT_ID_ORANGEJUICE,REAGENT_ID_WATERMELONJUICE),20)
color = reagents.get_color()
update_icon()
/obj/item/storage/box/pocky
name = "\improper Totemo yoi Pocky"
desc = "A bundle of chocolate-coated bisquit sticks."
icon = 'icons/obj/food_snacks.dmi'
icon_state = "pockys"
item_state = "pocky"
w_class = 1
starts_with = list(/obj/item/clothing/mask/chewable/candy/pocky = 8)
can_hold = list(/obj/item/clothing/mask/chewable/candy/pocky)
use_sound = 'sound/items/drop/paper.ogg'
drop_sound = 'sound/items/drop/wrapper.ogg'
max_storage_space = 8
foldable = null
trash = /obj/item/trash/pocky
/obj/item/clothing/mask/chewable/candy/pocky
name = "chocolate pocky"
desc = "A chocolate-coated biscuit stick."
icon_state = "pockystick"
item_state = "pocky"
filling = list(REAGENT_ID_SUGAR = 2, REAGENT_ID_CHOCOLATE = 5)
type_butt = null
/obj/item/clothing/mask/chewable/candy/pocky/process()
chew()
if(chewtime < 1)
if(ismob(loc))
to_chat(loc, span_notice("There's no more of \the [name] left!"))
spitout(0)