Adds tongs (#78698)

## About The Pull Request


![dreamseeker_6nkq7xbypa](https://github.com/tgstation/tgstation/assets/7483112/60f86b9d-a5aa-4630-8ab4-8956b2e44665).

Adds tongs, as requested on the [Official TGStation13
Forums](https://tgstation13.org/phpBB/viewtopic.php?f=9&t=33026)
Tongs can be used to pick up food from two tiles away, and feed it to
people who are two tiles away.
You can also use them while in your hand to snap them together like a
crab, or use them to harmlessly pinch people who are up to two tiles
away.

Tongs are available from the kitchen's dinnerware vendor, the autolathe,
and the service lathe.

## Why It's Good For The Game

You can feed people from across a counter, without touching the food and
spreading your germs to them.

## Changelog

🆑 Coded by Jacquerel, Sprited by Dalmationer
add: Added tongs to the kitchen, which you can use to manipulate food
from further away
/🆑
This commit is contained in:
Jacquerel
2023-10-03 14:27:26 -06:00
committed by GitHub
parent 4bb5bffc68
commit 2d39c1289f
8 changed files with 128 additions and 10 deletions
+100
View File
@@ -0,0 +1,100 @@
/// Tongs, let you pick up and feed people food from further away.
/obj/item/kitchen/tongs
name = "tongs"
desc = "So you never have to touch anything with your dirty, unwashed hands."
reach = 2
icon_state = "tongs"
base_icon_state = "tongs"
inhand_icon_state = "fork" // close enough
attack_verb_continuous = list("pinches", "tongs", "nips")
attack_verb_simple = list("pinch", "tong", "nip")
/// What are we holding in our tongs?
var/obj/item/tonged
/// Sound to play when we click our tongs together
var/clack_sound = 'sound/items/handling/component_drop.ogg'
/// Time to wait between clacking sounds
var/clack_delay = 2 SECONDS
/// Have we clacked recently?
COOLDOWN_DECLARE(clack_cooldown)
/obj/item/kitchen/tongs/Destroy(force)
QDEL_NULL(tonged)
return ..()
/obj/item/kitchen/tongs/examine(mob/user)
. = ..()
if (!isnull(tonged))
. += span_notice("It is holding [tonged].")
/obj/item/kitchen/tongs/dropped(mob/user, silent)
. = ..()
drop_tonged()
/obj/item/kitchen/tongs/attack_self(mob/user, modifiers)
. = ..()
if(.)
return TRUE
if (!isnull(tonged))
drop_tonged()
return TRUE
if (!COOLDOWN_FINISHED(src, clack_cooldown))
return TRUE
user.visible_message(span_notice("[user] clacks [user.p_their()] [src] together like a crab. Click clack!"))
click_clack()
return TRUE
/// Release the food we are holding
/obj/item/kitchen/tongs/proc/drop_tonged()
if (isnull(tonged))
return
visible_message(span_notice("[tonged] falls to the ground!"))
var/turf/location = drop_location()
tonged.forceMove(location)
tonged.do_drop_animation(location)
/// Play a clacking sound and appear closed, then open again
/obj/item/kitchen/tongs/proc/click_clack()
COOLDOWN_START(src, clack_cooldown, clack_delay)
playsound(src, clack_sound, vol = 100, vary = FALSE)
icon_state = "[base_icon_state]_closed"
var/delay = min(0.5 SECONDS, clack_delay / 2) // Just in case someone's been fucking with the cooldown
addtimer(CALLBACK(src, PROC_REF(clack)), delay, TIMER_DELETE_ME)
/// Plays a clacking sound and appear open
/obj/item/kitchen/tongs/proc/clack()
playsound(src, clack_sound, vol = 100, vary = FALSE)
icon_state = base_icon_state
/obj/item/kitchen/tongs/Exited(atom/movable/leaving, direction)
. = ..()
if (leaving != tonged)
return
tonged = null
update_appearance(UPDATE_ICON)
/obj/item/kitchen/tongs/pre_attack(obj/item/attacked, mob/living/user, params)
if (!isnull(tonged))
attacked.attackby(tonged, user)
return TRUE
if (isliving(attacked))
if (COOLDOWN_FINISHED(src, clack_cooldown))
click_clack()
return ..()
if (!IsEdible(attacked) || attacked.w_class > WEIGHT_CLASS_NORMAL || !isnull(tonged))
return ..()
tonged = attacked
attacked.do_pickup_animation(src)
attacked.forceMove(src)
update_appearance(UPDATE_ICON)
/obj/item/kitchen/tongs/update_overlays()
. = ..()
if (isnull(tonged))
return
var/mutable_appearance/held_food = new /mutable_appearance(tonged.appearance)
held_food.layer = layer
held_food.plane = plane
held_food.transform = held_food.transform.Scale(0.7, 0.7)
held_food.pixel_x = 6
held_food.pixel_y = 6
. += held_food
+6 -4
View File
@@ -299,10 +299,12 @@
ONLY 5000 BUX GET NOW! Contains a grill and fuel."
cost = CARGO_CRATE_VALUE * 8
crate_type = /obj/structure/closet/crate
contains = list(/obj/item/stack/sheet/mineral/coal/five,
/obj/machinery/grill/unwrenched,
/obj/item/reagent_containers/cup/soda_cans/monkey_energy,
)
contains = list(
/obj/item/stack/sheet/mineral/coal/five,
/obj/item/kitchen/tongs,
/obj/item/reagent_containers/cup/soda_cans/monkey_energy,
/obj/machinery/grill/unwrenched,
)
crate_name = "grilling starter kit crate"
/datum/supply_pack/organic/grillfuel
+7 -6
View File
@@ -33,13 +33,14 @@
// Adds up to 100, don't mess it up
mail_goodies = list(
/obj/item/storage/box/ingredients/random = 40,
/obj/item/reagent_containers/cup/bottle/caramel = 8,
/obj/item/reagent_containers/condiment/flour = 8,
/obj/item/reagent_containers/condiment/rice = 8,
/obj/item/reagent_containers/condiment/ketchup = 8,
/obj/item/reagent_containers/condiment/enzyme = 8,
/obj/item/reagent_containers/condiment/soymilk = 8,
/obj/item/reagent_containers/cup/bottle/caramel = 7,
/obj/item/reagent_containers/condiment/flour = 7,
/obj/item/reagent_containers/condiment/rice = 7,
/obj/item/reagent_containers/condiment/ketchup = 7,
/obj/item/reagent_containers/condiment/enzyme = 7,
/obj/item/reagent_containers/condiment/soymilk = 7,
/obj/item/kitchen/spoon/soup_ladle = 6,
/obj/item/kitchen/tongs = 6,
/obj/item/knife/kitchen = 4,
/obj/item/knife/butcher = 2,
)
@@ -142,6 +142,18 @@
)
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
/datum/design/tongs
name = "Tongs"
id = "tongs"
build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2)
build_path = /obj/item/kitchen/tongs
category = list(
RND_CATEGORY_INITIAL,
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN,
)
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
/datum/design/tray
name = "Serving Tray"
id = "servingtray"
@@ -115,6 +115,7 @@
"titaniumglass",
"toner_large",
"toner",
"tongs",
"toy_armblade",
"toy_balloon",
"toygun",
+1
View File
@@ -14,6 +14,7 @@
/obj/item/kitchen/spoon/soup_ladle = 3,
/obj/item/clothing/suit/apron/chef = 2,
/obj/item/kitchen/rollingpin = 2,
/obj/item/kitchen/tongs = 2,
/obj/item/knife/kitchen = 2,
),
),
Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 14 KiB

+1
View File
@@ -2158,6 +2158,7 @@
#include "code\game\objects\items\taster.dm"
#include "code\game\objects\items\teleportation.dm"
#include "code\game\objects\items\theft_tools.dm"
#include "code\game\objects\items\tongs.dm"
#include "code\game\objects\items\toy_mechs.dm"
#include "code\game\objects\items\toys.dm"
#include "code\game\objects\items\trash.dm"