Files
Bubberstation/code/game/objects/items/stacks/wrap.dm
SkyratBot a71c12248b [MIRROR] Wrapping paper fixes. [MDB IGNORE] (#19750)
* Wrapping paper fixes. (#73803)

## About The Pull Request

This, as the title suggests, fixes some wrapping paper bugs.

First, wrapping paper coloration has been rebound to Alt+click, so the
control doesn't conflict with extracting wrapping paper from a roll,
which is right click. Originally, both of them were on right click,
which caused problems.

Second, it fixes a problem with the greyscale icons on the gifts
themselves. They were showing up as the default gift icon, no matter
what color you selected, because the automatic path generation wasn't
set up properly. This fixes that.

Fixes #73800.

## Why It's Good For The Game

Bugs are bad, and we should try to fix them.

## Changelog
🆑
fix: Gifts you wrap will now display their greyscale colors as they're
supposed to.
fix: Wrapping paper color selection has been rebound to Alt+click, to
fix a bug where both wrapping paper color selection, and extracting
wrapping paper from a roll were both bound to right click.
/🆑

* Wrapping paper fixes.

---------

Co-authored-by: sergeirocks100 <31294280+sergeirocks100@users.noreply.github.com>
2023-03-10 06:49:15 +00:00

215 lines
6.4 KiB
Plaintext

/*
* Wrapping Paper
*/
/obj/item/stack/wrapping_paper
name = "wrapping paper"
desc = "Wrap packages with this festive paper to make gifts."
icon = 'icons/obj/stack_objects.dmi'
icon_state = "wrap_paper"
inhand_icon_state = "wrap_paper"
greyscale_config = /datum/greyscale_config/wrap_paper
item_flags = NOBLUDGEON
amount = 25
max_amount = 25
resistance_flags = FLAMMABLE
merge_type = /obj/item/stack/wrapping_paper
singular_name = "wrapping paper"
/obj/item/stack/wrapping_paper/Initialize(mapload)
. = ..()
if(!greyscale_colors)
//Generate random valid colors for paper and ribbon
var/generated_base_color = "#" + random_color()
var/generated_ribbon_color = "#" + random_color()
var/temp_base_hsv = RGBtoHSV(generated_base_color)
var/temp_ribbon_hsv = RGBtoHSV(generated_ribbon_color)
//If colors are too dark, set to original colors
if(ReadHSV(temp_base_hsv)[3] < ReadHSV("7F7F7F")[3])
generated_base_color = "#00FF00"
if(ReadHSV(temp_ribbon_hsv)[3] < ReadHSV("7F7F7F")[3])
generated_ribbon_color = "#FF0000"
//Set layers to these colors, base then ribbon
set_greyscale(colors = list(generated_base_color, generated_ribbon_color))
/obj/item/stack/wrapping_paper/AltClick(mob/user, modifiers)
var/new_base = input(user, "", "Select a base color", color) as color
var/new_ribbon = input(user, "", "Select a ribbon color", color) as color
if(!user.can_perform_action(src))
return
set_greyscale(colors = list(new_base, new_ribbon))
return TRUE
//preset wrapping paper meant to fill the original color configuration
/obj/item/stack/wrapping_paper/xmas
greyscale_colors = "#00FF00#FF0000"
/obj/item/stack/wrapping_paper/use(used, transfer, check = TRUE)
var/turf/T = get_turf(src)
. = ..()
if(QDELETED(src) && !transfer)
new /obj/item/c_tube(T)
/obj/item/stack/wrapping_paper/small
desc = "Wrap packages with this festive paper to make gifts. This roll looks a bit skimpy."
amount = 10
merge_type = /obj/item/stack/wrapping_paper/small
/*
* Package Wrap
*/
/obj/item/stack/package_wrap
name = "package wrapper"
singular_name = "wrapping sheet"
desc = "You can use this to wrap items in."
icon = 'icons/obj/stack_objects.dmi'
icon_state = "deliveryPaper"
item_flags = NOBLUDGEON
amount = 25
max_amount = 25
resistance_flags = FLAMMABLE
grind_results = list(/datum/reagent/cellulose = 5)
merge_type = /obj/item/stack/package_wrap
/obj/item/stack/package_wrap/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] begins wrapping [user.p_them()]self in \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
if(use(3))
var/obj/item/delivery/big/parcel = new(get_turf(user.loc))
parcel.base_icon_state = "deliverypackage5"
parcel.update_icon()
user.forceMove(parcel)
parcel.contains_mobs = TRUE // SKYRAT EDIT - CARGO BORGS
parcel.add_fingerprint(user)
return OXYLOSS
else
balloon_alert(user, "not enough paper!")
return SHAME
/obj/item/proc/can_be_package_wrapped() //can the item be wrapped with package wrapper into a delivery package
return TRUE
/obj/item/storage/can_be_package_wrapped()
return FALSE
/obj/item/storage/box/can_be_package_wrapped()
return TRUE
/obj/item/delivery/can_be_package_wrapped()
return FALSE
/obj/item/stack/package_wrap/afterattack(obj/target, mob/user, proximity)
. = ..()
if(!proximity)
return
if(!istype(target))
return
if(target.anchored)
return
// SKYRAT EDIT START - Cargo borgs
if(!amount)
return
// SKYRAT EDIT END
if(isitem(target))
. |= AFTERATTACK_PROCESSED_ITEM
var/obj/item/item = target
if(!item.can_be_package_wrapped())
balloon_alert(user, "can't be wrapped!")
return
if(user.is_holding(item))
if(!user.dropItemToGround(item))
return
else if(!isturf(item.loc))
return
if(use(1))
var/obj/item/delivery/small/parcel = new(get_turf(item.loc))
if(user.Adjacent(item))
parcel.add_fingerprint(user)
item.add_fingerprint(user)
user.put_in_hands(parcel)
item.forceMove(parcel)
var/size = round(item.w_class)
parcel.name = "[weight_class_to_text(size)] parcel"
parcel.w_class = size
size = min(size, 5)
parcel.base_icon_state = "deliverypackage[size]"
parcel.update_icon()
else if(istype(target, /obj/structure/closet))
var/obj/structure/closet/closet = target
if(closet.opened)
balloon_alert(user, "can't wrap while open!")
return
if(!closet.delivery_icon) //no delivery icon means unwrappable closet (e.g. body bags)
balloon_alert(user, "can't wrap!")
return
if(use(3))
var/obj/item/delivery/big/parcel = new(get_turf(closet.loc))
parcel.base_icon_state = closet.delivery_icon
parcel.update_icon()
parcel.drag_slowdown = closet.drag_slowdown
closet.forceMove(parcel)
parcel.add_fingerprint(user)
closet.add_fingerprint(user)
// SKYRAT EDIT START - CARGO BORGS
for(var/item in closet.get_all_contents())
if(istype(item, /mob))
parcel.contains_mobs = TRUE
break
// SKYRAT EDIT END
else
balloon_alert(user, "not enough paper!")
return
else if(istype(target, /obj/machinery/portable_atmospherics))
var/obj/machinery/portable_atmospherics/portable_atmospherics = target
if(portable_atmospherics.anchored)
balloon_alert(user, "can't wrap while anchored!")
return
if(use(3))
var/obj/item/delivery/big/parcel = new(get_turf(portable_atmospherics.loc))
parcel.base_icon_state = "deliverybox"
parcel.update_icon()
parcel.drag_slowdown = portable_atmospherics.drag_slowdown
portable_atmospherics.forceMove(parcel)
parcel.add_fingerprint(user)
portable_atmospherics.add_fingerprint(user)
else
balloon_alert(user, "not enough paper!")
return
else
balloon_alert(user, "can't wrap!")
return
user.visible_message(span_notice("[user] wraps [target]."))
user.log_message("has used [name] on [key_name(target)]", LOG_ATTACK, color="blue")
/obj/item/stack/package_wrap/use(used, transfer = FALSE, check = TRUE)
var/turf/T = get_turf(src)
. = ..()
if(QDELETED(src) && !transfer)
new /obj/item/c_tube(T)
/obj/item/stack/package_wrap/small
desc = "You can use this to wrap items in. This roll looks a bit skimpy."
w_class = WEIGHT_CLASS_SMALL
amount = 5
merge_type = /obj/item/stack/package_wrap/small
/obj/item/c_tube
name = "cardboard tube"
desc = "A tube... of cardboard."
icon = 'icons/obj/stack_objects.dmi'
icon_state = "c_tube"
inhand_icon_state = "c_tube"
throwforce = 0
w_class = WEIGHT_CLASS_TINY
throw_speed = 3
throw_range = 5