diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index ec94137546a..665fbb8041a 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -4,6 +4,10 @@ BEDSHEETS LINEN BINS */ +#define BEDSHEET_ABSTRACT "abstract" +#define BEDSHEET_SINGLE "single" +#define BEDSHEET_DOUBLE "double" + /obj/item/bedsheet name = "bedsheet" desc = "A surprisingly soft linen bedsheet." @@ -23,6 +27,7 @@ LINEN BINS dog_fashion = /datum/dog_fashion/head/ghost var/list/dream_messages = list("white") + var/bedsheet_type = BEDSHEET_SINGLE /obj/item/bedsheet/Initialize(mapload) . = ..() @@ -252,18 +257,32 @@ LINEN BINS icon_state = "random_bedsheet" name = "random bedsheet" desc = "If you're reading this description ingame, something has gone wrong! Honk!" - slot_flags = null + bedsheet_type = BEDSHEET_ABSTRACT + var/static/list/bedsheet_list + var/spawn_type = BEDSHEET_SINGLE /obj/item/bedsheet/random/Initialize(mapload) ..() - var/type = pick(typesof(/obj/item/bedsheet) - /obj/item/bedsheet/random) - new type(loc) + if(!LAZYACCESS(bedsheet_list, spawn_type)) + var/list/spawn_list = list() + var/list/possible_types = typesof(/obj/item/bedsheet) + for(var/obj/item/bedsheet/sheet as anything in possible_types) + if(initial(sheet.bedsheet_type) == spawn_type) + spawn_list += sheet + LAZYSET(bedsheet_list, spawn_type, spawn_list) + var/chosen_type = pick(bedsheet_list[spawn_type]) + new chosen_type(loc) return INITIALIZE_HINT_QDEL +/obj/item/bedsheet/random/double + icon_state = "random_bedsheet" + spawn_type = BEDSHEET_DOUBLE + /obj/item/bedsheet/dorms icon_state = "random_bedsheet" name = "random dorms bedsheet" desc = "If you're reading this description ingame, something has gone wrong! Honk!" + bedsheet_type = BEDSHEET_DOUBLE slot_flags = null /obj/item/bedsheet/dorms/Initialize(mapload) @@ -292,138 +311,189 @@ LINEN BINS /obj/item/bedsheet/double icon_state = "double_sheetwhite" - dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET worn_icon_state = "sheetwhite" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/blue/double icon_state = "double_sheetblue" worn_icon_state = "sheetblue" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/green/double icon_state = "double_sheetgreen" worn_icon_state = "sheetgreen" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/grey/double icon_state = "double_sheetgrey" worn_icon_state = "sheetgrey" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/orange/double icon_state = "double_sheetorange" worn_icon_state = "sheetorange" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/purple/double icon_state = "double_sheetpurple" worn_icon_state = "sheetpurple" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/patriot/double icon_state = "double_sheetUSA" worn_icon_state = "sheetUSA" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/rainbow/double icon_state = "double_sheetrainbow" worn_icon_state = "sheetrainbow" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/red/double icon_state = "double_sheetred" worn_icon_state = "sheetred" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/yellow/double icon_state = "double_sheetyellow" worn_icon_state = "sheetyellow" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/mime/double icon_state = "double_sheetmime" worn_icon_state = "sheetmime" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/clown/double icon_state = "double_sheetclown" worn_icon_state = "sheetclown" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/captain/double icon_state = "double_sheetcaptain" worn_icon_state = "sheetcaptain" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/rd/double icon_state = "double_sheetrd" worn_icon_state = "sheetrd" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/medical/double icon_state = "double_sheetmedical" worn_icon_state = "sheetmedical" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/cmo/double icon_state = "double_sheetcmo" worn_icon_state = "sheetcmo" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/hos/double icon_state = "double_sheethos" worn_icon_state = "sheethos" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/hop/double icon_state = "double_sheethop" worn_icon_state = "sheethop" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/ce/double icon_state = "double_sheetce" worn_icon_state = "sheetce" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/qm/double icon_state = "double_sheetqm" worn_icon_state = "sheetqm" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/chaplain/double icon_state = "double_sheetchap" worn_icon_state = "sheetchap" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/brown/double icon_state = "double_sheetbrown" worn_icon_state = "sheetbrown" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/black/double icon_state = "double_sheetblack" worn_icon_state = "sheetblack" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/centcom/double icon_state = "double_sheetcentcom" worn_icon_state = "sheetcentcom" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/syndie/double icon_state = "double_sheetsyndie" worn_icon_state = "sheetsyndie" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/cult/double icon_state = "double_sheetcult" worn_icon_state = "sheetcult" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/wiz/double icon_state = "double_sheetwiz" worn_icon_state = "sheetwiz" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/nanotrasen/double icon_state = "double_sheetNT" worn_icon_state = "sheetNT" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/ian/double icon_state = "double_sheetian" worn_icon_state = "sheetian" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE /obj/item/bedsheet/cosmos/double icon_state = "double_sheetcosmos" worn_icon_state = "sheetcosmos" + dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET + bedsheet_type = BEDSHEET_DOUBLE -/obj/item/bedsheet/random/double +/obj/item/bedsheet/dorms_double icon_state = "random_bedsheet" + bedsheet_type = BEDSHEET_ABSTRACT -/obj/item/bedsheet/random/double/Initialize() - ..() - var/type = pick(typesof(/obj/item/bedsheet) - /obj/item/bedsheet/random) - new type(loc) - return INITIALIZE_HINT_QDEL - -/obj/item/bedsheet/dorms/double - icon_state = "random_bedsheet" - -/obj/item/bedsheet/dorms/double/Initialize() +/obj/item/bedsheet/dorms_double/Initialize() ..() var/type = pick_weight(list("Colors" = 80, "Special" = 20)) switch(type) @@ -579,3 +649,7 @@ LINEN BINS add_fingerprint(user) return COMPONENT_CANCEL_ATTACK_CHAIN + +#undef BEDSHEET_ABSTRACT +#undef BEDSHEET_SINGLE +#undef BEDSHEET_DOUBLE