-
Notifications
You must be signed in to change notification settings - Fork 67
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[MIRROR] Patches Up Gifts In Anticipation Of The Holidays [MDB IGNORE…
…] (#25383) (#943) * Patches Up Gifts In Anticipation Of The Holidays (#80035) ## About The Pull Request I decided to look at why everyone loves (and I despise) Christmas too much, and was met with a lot of smelly code. In fact, some of it was completely busted! Let's fix several things. * We no longer use a GLOB for "every possible item you can cram into a gift box", we now use static lists scoped to the proc. That saves us some pollution for something that really didn't need it (and only was set up that way for cacheing I believe). We also static-cache stuff that we weren't doing previously, to save even more work (in anticipation for entropic heat death of universe). * Repaths `/obj/item/a_gift` to `/obj/item/gift`. I never liked the old path and this new one is cleaner. This also uncovered a bug. * Mappers would var-edit gifts to have a unique mapped-in type, but the code never respected this. I fixed it so the behavior should now respect that rather than override the variable on Initialize(). Now the goat plushie gift will always have said goat plushie rather than just any toy. * Procs should now have the proper arg nomenclature. * Also just cleans up a lot of single letter variables and the like. There was some cooked shit that's now alphabetized and nicely multilined. ## Why It's Good For The Game Ho ho ho. ## Changelog :cl: fix: Some mapped-in gifts that were supposed to guarantee a certain gift weren't spawning that exact gift type, this has been patched to reflect the mapper's intent. /:cl: * Patches Up Gifts In Anticipation Of The Holidays * Update flora.dm --------- Co-authored-by: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Co-authored-by: san7890 <the@san7890.com> Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
- Loading branch information
1 parent
bfd4d35
commit 351e4c8
Showing
10 changed files
with
102 additions
and
94 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
/obj/item/a_gift : /obj/item/gift{@OLD} |