Files
Bubberstation/code/game/objects/items/tail_pin.dm
SmArtKar b6c84135c3 Refactors embedding to use datums instead of storing data in bespoke elements (#84599)
## About The Pull Request

This refactors embedding elements to make them use singleton datums
(similarly to armor) instead being bespoke and creating a new element
every time armor values are supposed to be adjusted.
Default values have been removed from defines due to now being declared
in base class itself.
Additionally fixes vending machines and tackling gloves setting
generated shards (which they instantly embed into their victim) embed
properties to null after running the embedding code, despite said shards
having non-null embedding values by default, making them not be able to
embed into anyone else, also potentially breaking the pain/jostling code
if they somehow get updated.

## Why It's Good For The Game

Current embedding system is an unnecessarily complicated mess as bespoke
elements are hard to work with, and creating a new element every time
you change values is hacky at best. This change should make it easier to
read and work with.

## Changelog
🆑
fix: Fixed glass shards generated from falling vending machines or
tackling windows not being able to embed into anyone.
refactor: Refactored embedding code to use datums instead of bespoke
elements and ugly associated lists.
/🆑
2024-07-07 23:20:07 +02:00

50 lines
1.9 KiB
Plaintext

/obj/item/tail_pin
icon = 'icons/obj/poster.dmi'
icon_state = "tailpin"
name = "tail pin"
desc = "Officially branded 'pin the tail on the corgi' style party implement. Not intended to be used on people."
force = 0
w_class = WEIGHT_CLASS_SMALL
throwforce = 0
throw_speed = 1
custom_materials = list(/datum/material/iron= HALF_SHEET_MATERIAL_AMOUNT)
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb_continuous = list("pokes", "jabs", "pins the tail on")
attack_verb_simple = list("poke", "jab")
sharpness = SHARP_POINTY
max_integrity = 200
layer = CORGI_ASS_PIN_LAYER
embed_type = /datum/embed_data/corgi_pin
/datum/embed_data/corgi_pin
pain_chance = 0
jostle_pain_mult = 0
ignore_throwspeed_threshold = TRUE
/obj/item/poster/tail_board
name = "party game poster"
poster_type = /obj/structure/sign/poster/party_game
icon_state = "rolled_poster"
/obj/structure/sign/poster/party_game
name = "pin the tail on the corgi"
desc = "The rules are simple, pin the tail on the corgi, while blindfolded. Are you a bad enough dude to hit the target?"
icon_state = "pinningposter"
poster_item_name = "party game poster"
poster_item_desc = "Place it on a wall to start playing pin the tail on the corgi."
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/party_game, 32)
/obj/structure/sign/poster/party_game/attackby(obj/item/I, mob/user, params)
. = ..()
if(!istype(I,/obj/item/tail_pin))//We're using the same trick that tables use for placing objects x and y onto the click location.
return
if(!user.transferItemToLoc(I, drop_location(), silent = FALSE))
return
var/list/modifiers = params2list(params)
if(!LAZYACCESS(modifiers, ICON_X) || !LAZYACCESS(modifiers, ICON_Y))
return
I.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/2), world.icon_size/2)
I.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2)
return TRUE