Files
Fluffy a3a4d46fa7 Hitby refactor (#19624)
Refactored hitby to be in line with TG's version.
Refactored item weight defines to a more clear naming scheme, also in
line with TG's version.
Refactored how the movement bumps are handled, ported signals to handle
them, in preparation for the movement update.
Fixed disposal hit bouncing the hitting atom on the wall.
Items do not push other items anymore if they are tiny.
2024-07-28 20:52:08 +00:00

121 lines
3.9 KiB
Plaintext

/obj/item/material/ashtray
name = "ashtray"
icon = 'icons/obj/ashtray.dmi'
icon_state = "ashtray"
randpixel = 5
force_divisor = 0.1
thrown_force_divisor = 0.1
var/image/base_image
var/max_butts = 10
w_class = WEIGHT_CLASS_TINY
/obj/item/material/ashtray/Initialize(newloc, material_key)
. = ..()
if(!material)
return INITIALIZE_HINT_QDEL
max_butts = round(material.hardness/10) //This is arbitrary but whatever.
randpixel_xy()
update_icon()
/obj/item/material/ashtray/shatter()
..()
if(emptyout(get_turf(src)))
visible_message(SPAN_DANGER("The contents of [src] spill everywhere!"))
/obj/item/material/ashtray/proc/emptyout(atom/dest)
if(!contents.len)
return FALSE
for (var/obj/O in contents)
O.forceMove(dest)
update_icon()
return TRUE
/obj/item/material/ashtray/attack_self(mob/user)
var/turf/dest = get_turf(src)
if(emptyout(dest))
user.visible_message("<b>[user]</b> pours [src] out onto [dest].", SPAN_NOTICE("You pour [src] out onto [dest]."))
return
to_chat(user, SPAN_WARNING("[src] is empty, there's nothing to pour out!"))
/obj/item/material/ashtray/update_icon()
color = null
ClearOverlays()
var/list/ashtray_cache = SSicon_cache.ashtray_cache
var/cache_key = "base-[material.name]"
if(!ashtray_cache[cache_key])
var/image/I = image('icons/obj/ashtray.dmi',"ashtray")
I.color = material.icon_colour
ashtray_cache[cache_key] = I
AddOverlays(ashtray_cache[cache_key])
if (contents.len == max_butts)
AddOverlays("ashtray_full")
desc = "It's stuffed full."
else if (contents.len > max_butts/2)
AddOverlays("ashtray_half")
desc = "It's half-filled."
else
desc = "An ashtray made of [material.display_name]."
/obj/item/material/ashtray/attackby(obj/item/attacking_item, mob/user)
if (health <= 0)
return
if (istype(attacking_item, /obj/item/trash/cigbutt) || istype(attacking_item, /obj/item/clothing/mask/smokable/cigarette) || istype(attacking_item, /obj/item/flame/match))
if (contents.len >= max_butts)
to_chat(user, "\The [src] is full.")
return
user.remove_from_mob(attacking_item)
attacking_item.forceMove(src)
if (istype(attacking_item,/obj/item/clothing/mask/smokable/cigarette))
var/obj/item/clothing/mask/smokable/cigarette/cig = attacking_item
if (cig.lit == TRUE)
user.visible_message("<b>[user]</b> crushes [cig] in [src], putting it out.", SPAN_NOTICE("You crush [cig] in [src], putting it out."))
playsound(src.loc, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1)
STOP_PROCESSING(SSprocessing, cig)
var/obj/item/butt = new cig.type_butt(src)
cig.transfer_fingerprints_to(butt)
qdel(cig)
attacking_item = butt
//spawn(1)
// TemperatureAct(150)
else if (cig.lit == FALSE)
user.visible_message(
"<b>[user]</b> places [cig] in [src] without even smoking it.",
SPAN_NOTICE("You place [cig] in [src] without even smoking it. Why would you do that?")
)
else
user.visible_message("<b>[user]</b> places [attacking_item] in [src].", SPAN_NOTICE("You place [attacking_item] in [src]."))
user.update_inv_l_hand()
user.update_inv_r_hand()
add_fingerprint(user)
update_icon()
else
health = max(0,health - attacking_item.force)
user.visible_message(user, SPAN_DANGER("[user] hits [src] with [attacking_item]!"), SPAN_DANGER("You hit [src] with [attacking_item]."))
playsound(get_turf(src), material.hitsound, 25)
if (health < 1)
shatter()
return
/obj/item/material/ashtray/throw_impact(atom/hit_atom)
if (health > 0)
health = max(0,health - 3)
if(emptyout(get_turf(src)))
visible_message(SPAN_DANGER("[src] slams into [hit_atom], spilling its contents everywhere!"))
if (health < 1)
shatter()
return
update_icon()
return ..()
/obj/item/material/ashtray/plastic/Initialize(newloc, material_key)
. = ..(newloc, MATERIAL_PLASTIC)
/obj/item/material/ashtray/bronze/Initialize(newloc, material_key)
. = ..(newloc, MATERIAL_BRONZE)
/obj/item/material/ashtray/glass/Initialize(newloc, material_key)
. = ..(newloc, MATERIAL_GLASS)