Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MIRROR] Patches Up Gifts In Anticipation Of The Holidays #943

Merged
merged 1 commit into from
Dec 4, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions _maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -377,10 +377,10 @@
/obj/structure/rack,
/obj/item/storage/box/lights/bulbs,
/obj/item/storage/toolbox/mechanical/old,
/obj/item/a_gift{
/obj/item/gift{
contains_type = /obj/item/gun/ballistic/automatic/toy/unrestricted
},
/obj/item/a_gift{
/obj/item/gift{
contains_type = /obj/item/gun/ballistic/automatic/pistol/toy
},
/obj/item/ammo_box/foambox,
Expand Down Expand Up @@ -524,13 +524,13 @@
/obj/structure/table/wood,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/small/directional/south,
/obj/item/a_gift{
/obj/item/gift{
contains_type = /obj/item/toy/plush/goatplushie;
pixel_x = 7;
pixel_y = 6
},
/obj/structure/sign/clock/directional/south,
/obj/item/a_gift{
/obj/item/gift{
contains_type = /obj/item/toy/plush/ratplush;
pixel_x = -4;
pixel_y = 2
Expand Down Expand Up @@ -713,7 +713,7 @@
/obj/structure/table,
/obj/effect/turf_decal/tile/yellow/diagonal_edge,
/obj/effect/turf_decal/tile/neutral/diagonal_centre,
/obj/item/a_gift{
/obj/item/gift{
contains_type = /obj/item/toy/figure/wizard
},
/turf/open/floor/iron/diagonal/lavaland,
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/computer/arcade/arcade.dm
Original file line number Diff line number Diff line change
Expand Up @@ -695,4 +695,4 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
/obj/machinery/computer/arcade/amputation/festive //dispenses wrapped gifts instead of arcade prizes, also known as the ancap christmas tree
name = "Mediborg's Festive Amputation Adventure"
desc = "A picture of a blood-soaked medical cyborg wearing a Santa hat flashes on the screen. The mediborg has a speech bubble that says, \"Put your hand in the machine if you aren't a <b>coward!</b>\""
prize_override = list(/obj/item/a_gift/anything = 1)
prize_override = list(/obj/item/gift/anything = 1)
165 changes: 86 additions & 79 deletions code/game/objects/items/gift.dm
Original file line number Diff line number Diff line change
@@ -1,116 +1,123 @@
/* Gifts and wrapping paper
/* Gifts
* Contains:
* Gifts
* Wrapping Paper
*/

/*
* Gifts
*/

GLOBAL_LIST_EMPTY(possible_gifts)

/obj/item/a_gift
/// Gifts to give to players, will contain a nice toy or other fun item for them to play with.
/obj/item/gift
name = "gift"
desc = "PRESENTS!!!! eek!"
icon = 'icons/obj/storage/wrapping.dmi'
icon_state = "giftdeliverypackage3"
inhand_icon_state = "gift"
resistance_flags = FLAMMABLE

var/obj/item/contains_type
/// What type of thing are we guaranteed to spawn in with?
var/obj/item/contains_type = null

/obj/item/a_gift/Initialize(mapload)
/obj/item/gift/Initialize(mapload)
. = ..()
pixel_x = rand(-10,10)
pixel_y = rand(-10,10)
icon_state = "giftdeliverypackage[rand(1,5)]"

contains_type = get_gift_type()
if(isnull(contains_type))
contains_type = get_gift_type()

/obj/item/a_gift/suicide_act(mob/living/user)
/obj/item/gift/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] peeks inside [src] and cries [user.p_them()]self to death! It looks like [user.p_they()] [user.p_were()] on the naughty list..."))
return BRUTELOSS

/obj/item/a_gift/examine(mob/M)
/obj/item/gift/examine(mob/user)
. = ..()
if(HAS_MIND_TRAIT(M, TRAIT_PRESENT_VISION) || isobserver(M))
if(HAS_MIND_TRAIT(user, TRAIT_PRESENT_VISION) || isobserver(user))
. += span_notice("It contains \a [initial(contains_type.name)].")

/obj/item/a_gift/attack_self(mob/M)
if(HAS_MIND_TRAIT(M, TRAIT_CANNOT_OPEN_PRESENTS))
to_chat(M, span_warning("You're supposed to be spreading gifts, not opening them yourself!"))
/obj/item/gift/attack_self(mob/user)
if(HAS_MIND_TRAIT(user, TRAIT_CANNOT_OPEN_PRESENTS))
to_chat(user, span_warning("You're supposed to be spreading gifts, not opening them yourself!"))
return

qdel(src)
moveToNullspace()

var/obj/item/thing = new contains_type(get_turf(user))

var/obj/item/I = new contains_type(get_turf(M))
if (!QDELETED(I)) //might contain something like metal rods that might merge with a stack on the ground
M.visible_message(span_notice("[M] unwraps \the [src], finding \a [I] inside!"))
M.investigate_log("has unwrapped a present containing [I.type].", INVESTIGATE_PRESENTS)
M.put_in_hands(I)
I.add_fingerprint(M)
if (QDELETED(thing)) //might contain something like metal rods that might merge with a stack on the ground
user.visible_message(span_danger("Oh no! The present that [user] opened had nothing inside it!"))
else
M.visible_message(span_danger("Oh no! The present that [M] opened had nothing inside it!"))

/obj/item/a_gift/proc/get_gift_type()
var/gift_type_list = list(/obj/item/sord,
/obj/item/storage/wallet,
/obj/item/storage/photo_album,
/obj/item/storage/box/snappops,
/obj/item/storage/crayons,
/obj/item/storage/backpack/holding,
/obj/item/storage/belt/champion,
/obj/item/soap/deluxe,
/obj/item/pickaxe/diamond,
/obj/item/pen/invisible,
/obj/item/lipstick/random,
/obj/item/grenade/smokebomb,
/obj/item/grown/corncob,
/obj/item/poster/random_contraband,
/obj/item/poster/random_official,
/obj/item/book/manual/wiki/barman_recipes,
/obj/item/book/manual/chef_recipes,
/obj/item/bikehorn,
/obj/item/toy/beach_ball,
/obj/item/toy/basketball,
/obj/item/banhammer,
/obj/item/food/grown/ambrosia/deus,
/obj/item/food/grown/ambrosia/vulgaris,
/obj/item/pai_card,
/obj/item/instrument/violin,
/obj/item/instrument/guitar,
/obj/item/storage/belt/utility/full,
/obj/item/clothing/neck/tie/horrible,
/obj/item/clothing/suit/jacket/leather,
/obj/item/clothing/suit/jacket/leather/biker,
/obj/item/clothing/suit/costume/poncho,
/obj/item/clothing/suit/costume/poncho/green,
/obj/item/clothing/suit/costume/poncho/red,
/obj/item/clothing/suit/costume/snowman,
/obj/item/clothing/head/costume/snowman,
/obj/item/stack/sheet/mineral/coal)

gift_type_list += subtypesof(/obj/item/clothing/head/collectable)
gift_type_list += subtypesof(/obj/item/toy) - (((typesof(/obj/item/toy/cards) - /obj/item/toy/cards/deck) + /obj/item/toy/figure + /obj/item/toy/ammo)) //All toys, except for abstract types and syndicate cards.
user.visible_message(span_notice("[user] unwraps \the [src], finding \a [thing] inside!"))
user.investigate_log("has unwrapped a present containing [thing.type].", INVESTIGATE_PRESENTS)
user.put_in_hands(thing)
thing.add_fingerprint(user)

var/gift_type = pick(gift_type_list)
qdel(src)

return gift_type
/obj/item/gift/proc/get_gift_type()
var/static/list/gift_type_list = null

if(isnull(gift_type_list))
gift_type_list = list(
/obj/item/banhammer,
/obj/item/bikehorn,
/obj/item/book/manual/chef_recipes,
/obj/item/book/manual/wiki/barman_recipes,
/obj/item/clothing/head/costume/snowman,
/obj/item/clothing/neck/tie/horrible,
/obj/item/clothing/suit/costume/poncho,
/obj/item/clothing/suit/costume/poncho/green,
/obj/item/clothing/suit/costume/poncho/red,
/obj/item/clothing/suit/costume/snowman,
/obj/item/clothing/suit/jacket/leather,
/obj/item/clothing/suit/jacket/leather/biker,
/obj/item/food/grown/ambrosia/deus,
/obj/item/food/grown/ambrosia/vulgaris,
/obj/item/grenade/smokebomb,
/obj/item/grown/corncob,
/obj/item/instrument/guitar,
/obj/item/instrument/violin,
/obj/item/lipstick/random,
/obj/item/pai_card,
/obj/item/pen/invisible,
/obj/item/pickaxe/diamond,
/obj/item/poster/random_contraband,
/obj/item/poster/random_official,
/obj/item/soap/deluxe,
/obj/item/sord,
/obj/item/stack/sheet/mineral/coal,
/obj/item/storage/backpack/holding,
/obj/item/storage/belt/champion,
/obj/item/storage/belt/utility/full,
/obj/item/storage/box/snappops,
/obj/item/storage/crayons,
/obj/item/storage/photo_album,
/obj/item/storage/wallet,
/obj/item/toy/basketball,
/obj/item/toy/beach_ball,
)

gift_type_list += subtypesof(/obj/item/clothing/head/collectable)
//Add all toys, except for abstract types and syndicate cards.
gift_type_list += subtypesof(/obj/item/toy) - (((typesof(/obj/item/toy/cards) - /obj/item/toy/cards/deck) + /obj/item/toy/figure + /obj/item/toy/ammo))

var/gift_type = pick(gift_type_list)
return gift_type

/obj/item/a_gift/anything
/// Gifts that typically only very OP stuff or admins or Santa Claus himself should be giving out, as they contain ANY valid subtype of `/obj/item`, including stuff like instagib rifles. Wow!
/obj/item/gift/anything
name = "christmas gift"
desc = "It could be anything!"

/obj/item/a_gift/anything/get_gift_type()
if(!GLOB.possible_gifts.len)
var/list/gift_types_list = subtypesof(/obj/item)
for(var/V in gift_types_list)
var/obj/item/I = V
if((!initial(I.icon_state)) || (!initial(I.inhand_icon_state)) || (initial(I.item_flags) & ABSTRACT))
gift_types_list -= V
GLOB.possible_gifts = gift_types_list
var/gift_type = pick(GLOB.possible_gifts)
/obj/item/gift/anything/get_gift_type()
var/static/list/obj/item/possible_gifts = null

if(isnull(possible_gifts))
possible_gifts = list()
for(var/type in subtypesof(/obj/item))
var/obj/item/thing = type
if(!initial(thing.icon_state) || !initial(thing.inhand_icon_state) || (initial(thing.item_flags) & ABSTRACT))
continue

possible_gifts += type

var/gift_type = pick(possible_gifts)
return gift_type
2 changes: 1 addition & 1 deletion code/game/objects/items/storage/backpack.dm
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@
return
if(HAS_MIND_TRAIT(user, TRAIT_CANNOT_OPEN_PRESENTS))
var/turf/floor = get_turf(src)
var/obj/item/thing = new /obj/item/a_gift/anything(floor)
var/obj/item/thing = new /obj/item/gift/anything(floor)
if(!atom_storage.attempt_insert(thing, user, override = TRUE, force = STORAGE_SOFT_LOCKED))
qdel(thing)

Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/structures/flora.dm
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@
/obj/structure/flora/tree/pine/xmas/presents
icon_state = "pinepresents"
desc = "A wondrous decorated Christmas tree. It has presents!"
var/gift_type = /obj/item/a_gift/anything
var/gift_type = /obj/item/gift/anything
var/unlimited = FALSE
var/static/list/took_presents //shared between all xmas trees

Expand Down
4 changes: 2 additions & 2 deletions code/modules/clothing/outfits/event.dm
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
suit = /obj/item/clothing/suit/space/santa
back = /obj/item/storage/backpack/santabag
backpack_contents = list(
/obj/item/a_gift/anything = 5,
)
/obj/item/gift/anything = 5,
)
gloves = /obj/item/clothing/gloves/color/red
head = /obj/item/clothing/head/helmet/space/santahat/beardless
shoes = /obj/item/clothing/shoes/sneakers/red
Expand Down
4 changes: 2 additions & 2 deletions code/modules/holiday/holidays.dm
Original file line number Diff line number Diff line change
Expand Up @@ -844,9 +844,9 @@
SSticker.OnRoundstart(CALLBACK(src, PROC_REF(roundstart_celebrate)))
GLOB.maintenance_loot += list(
list(
/obj/item/toy/xmas_cracker = 3,
/obj/item/clothing/head/costume/santa = 1,
/obj/item/a_gift/anything = 1
/obj/item/gift/anything = 1,
/obj/item/toy/xmas_cracker = 3,
) = maint_holiday_weight,
)

Expand Down
2 changes: 1 addition & 1 deletion code/modules/spells/spell_types/conjure/presents.dm
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@
invocation_type = INVOCATION_SHOUT

summon_radius = 3
summon_type = list(/obj/item/a_gift)
summon_type = list(/obj/item/gift)
summon_amount = 5
4 changes: 2 additions & 2 deletions modular_skyrat/modules/holidays/flora.dm
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
/obj/structure/flora/tree/pine/xmas/presents/safe
icon_state = "pinepresents"
desc = "A wondrous decorated Christmas tree. It has presents!"
gift_type = /obj/item/a_gift //only give safe gifts from the tree
gift_type = /obj/item/gift //only give safe gifts from the tree
unlimited = FALSE

/obj/structure/flora/tree/pine/xmas/presents/safe/unlimited
icon_state = "pinepresents"
desc = "A wondrous decorated Christmas tree. It has presents!"
gift_type = /obj/item/a_gift //only give safe gifts from the tree
gift_type = /obj/item/gift //only give safe gifts from the tree
unlimited = TRUE
1 change: 1 addition & 0 deletions tools/UpdatePaths/Scripts/80035_gift_renaming.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/obj/item/a_gift : /obj/item/gift{@OLD}
Loading