From ba6ff1246c52f58495c15bd3fa1fe4d2670f0edd Mon Sep 17 00:00:00 2001 From: BadAtThisGame Date: Wed, 4 Dec 2024 01:27:50 +0200 Subject: [PATCH 1/5] Ports even more Vanderlin stuff --- code/__DEFINES/components.dm | 1 + code/datums/elements/bed_tuckable.dm | 66 +++ code/datums/particle_weathers/_base.dm | 2 +- code/game/objects/items/bedsheets.dm | 120 +++++ .../rogueitems/natural/clothfibersthorn.dm | 15 + .../objects/structures/beds_chairs/bed.dm | 166 +------ code/game/objects/structures/bedsheet_bin.dm | 446 ------------------ code/modules/mob/living/living.dm | 2 + stonekeep.dme | 3 +- 9 files changed, 211 insertions(+), 610 deletions(-) create mode 100644 code/datums/elements/bed_tuckable.dm create mode 100644 code/game/objects/items/bedsheets.dm delete mode 100644 code/game/objects/structures/bedsheet_bin.dm diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index 8d1a94ab74..29e966a4a9 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -217,6 +217,7 @@ #define COMSIG_MOB_DEADSAY "mob_deadsay" // from /mob/say_dead(): (mob/speaker, message) #define MOB_DEADSAY_SIGNAL_INTERCEPT 1 // /mob/living signals +#define COMSIG_LIVING_SET_RESTING "comsig_set_resting" #define COMSIG_LIVING_RESIST "living_resist" //from base of mob/living/resist() (/mob/living) #define COMSIG_LIVING_IGNITED "living_ignite" //from base of mob/living/IgniteMob() (/mob/living) #define COMSIG_LIVING_EXTINGUISHED "living_extinguished" //from base of mob/living/ExtinguishMob() (/mob/living) diff --git a/code/datums/elements/bed_tuckable.dm b/code/datums/elements/bed_tuckable.dm new file mode 100644 index 0000000000..67c6d86a10 --- /dev/null +++ b/code/datums/elements/bed_tuckable.dm @@ -0,0 +1,66 @@ +/// Tucking element, for things that can be tucked into bed. +/datum/element/bed_tuckable + /// our pixel_x offset - how much the item moves x when in bed (+x is closer to the pillow) + var/x_offset = 0 + /// our pixel_y offset - how much the item move y when in bed (-y is closer to the middle) + var/y_offset = 0 + /// our rotation degree - how many degrees we need to turn the item to get to the left/right side + var/rotation_degree = 0 + /// our starting angle for the item + var/starting_angle = 0 + +/datum/element/bed_tuckable/Attach(obj/target, x = 0, y = 0, rotation = 0) + . = ..() + if(!isitem(target)) + return ELEMENT_INCOMPATIBLE + + x_offset = x + y_offset = y + starting_angle = rotation + RegisterSignal(target, COMSIG_ITEM_ATTACK_OBJ, PROC_REF(tuck_into_bed)) + +/datum/element/bed_tuckable/Detach(obj/target) + . = ..() + UnregisterSignal(target, list(COMSIG_ITEM_ATTACK_OBJ, COMSIG_ITEM_PICKUP)) + +/** + * Tuck our object into bed. + * + * tucked - the object being tucked + * target_bed - the bed we're tucking them into + * tucker - the guy doing the tucking + */ +/datum/element/bed_tuckable/proc/tuck_into_bed(obj/item/tucked, obj/structure/bed/target_bed, mob/living/tucker) + SIGNAL_HANDLER + + if(!istype(target_bed)) + return + + if(!tucker.transferItemToLoc(tucked, target_bed.drop_location())) + return + + to_chat(tucker, span_notice("You lay [tucked] out on [target_bed].")) + tucked.dir = target_bed.dir + tucked.pixel_x = target_bed.dir & EAST ? -x_offset : x_offset + tucked.pixel_y = y_offset + tucked.layer = ABOVE_MOB_LAYER + tucked.plane = -2 + if(starting_angle) + rotation_degree = target_bed.dir & EAST ? starting_angle + 180 : starting_angle + tucked.transform = turn(tucked.transform, rotation_degree) + RegisterSignal(tucked, COMSIG_ITEM_PICKUP, PROC_REF(untuck)) + + return COMPONENT_NO_AFTERATTACK + +/** + * If we rotate our object, then we need to un-rotate it when it's picked up + * + * tucked - the object that is tucked + */ +/datum/element/bed_tuckable/proc/untuck(obj/item/tucked) + SIGNAL_HANDLER + + tucked.transform = turn(tucked.transform, -rotation_degree) + tucked.layer = initial(tucked.layer) + tucked.plane = initial(tucked.plane) + UnregisterSignal(tucked, COMSIG_ITEM_PICKUP) diff --git a/code/datums/particle_weathers/_base.dm b/code/datums/particle_weathers/_base.dm index fdbad24b1b..3ba1d8fad2 100644 --- a/code/datums/particle_weathers/_base.dm +++ b/code/datums/particle_weathers/_base.dm @@ -20,7 +20,7 @@ //Obnoxiously 3D -- INCREASE Z level to make them further away transform = list( 1, 0, 0, 0 , 0, 1, 0, 0 , - 0, 0, 1, 1/2, //Get twice as Small every 2 Z + 0, 0, 1, 1/4, //Get twice as Small every 4 Z 0, 0, 0, 1 ) //Animate particle effect to a severity diff --git a/code/game/objects/items/bedsheets.dm b/code/game/objects/items/bedsheets.dm new file mode 100644 index 0000000000..b001d8f9ae --- /dev/null +++ b/code/game/objects/items/bedsheets.dm @@ -0,0 +1,120 @@ +/* +CONTAINS: +BEDSHEETS +*/ + +/obj/item/bedsheet + name = "bedsheet" + desc = "" + icon = 'icons/obj/bedsheets.dmi' + lefthand_file = 'icons/mob/inhands/misc/bedsheet_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/bedsheet_righthand.dmi' + icon_state = "sheetwhite" + item_state = "sheetwhite" + layer = OBJ_LAYER + plane = GAME_PLANE_UPPER + throwforce = 0 + throw_speed = 1 + throw_range = 2 + w_class = WEIGHT_CLASS_TINY + resistance_flags = FLAMMABLE + dying_key = DYE_REGISTRY_BEDSHEET + + dog_fashion = /datum/dog_fashion/head/ghost + var/list/dream_messages = list("white") + var/datum/weakref/signal_sleeper //this is our goldylocks + +/obj/item/bedsheet/Initialize() + . = ..() + AddElement(/datum/element/bed_tuckable, 0, 0, 0) + +/obj/item/bedsheet/attack_self(mob/user) + if(!user.CanReach(src)) //No telekenetic grabbing. + return + if(!user.resting) + return + if(!user.dropItemToGround(src)) + return + coverup(user) + add_fingerprint(user) + +/obj/item/bedsheet/proc/coverup(mob/living/sleeper) + layer = ABOVE_MOB_LAYER + plane = -2 + pixel_x = 0 + pixel_y = 0 + to_chat(sleeper, "I cover myself with [src].") + var/angle = sleeper.lying_prev + dir = angle2dir(angle + 180) // 180 flips it to be the same direction as the mob + signal_sleeper = WEAKREF(sleeper) + RegisterSignal(src, COMSIG_ITEM_PICKUP, PROC_REF(on_pickup)) + RegisterSignal(sleeper, COMSIG_MOVABLE_MOVED, PROC_REF(smooth_sheets)) + RegisterSignal(sleeper, COMSIG_LIVING_SET_RESTING, PROC_REF(smooth_sheets)) + RegisterSignal(sleeper, COMSIG_PARENT_QDELETING, PROC_REF(smooth_sheets)) + +/obj/item/bedsheet/proc/smooth_sheets(mob/living/sleeper) + SIGNAL_HANDLER + UnregisterSignal(src, COMSIG_ITEM_PICKUP) + UnregisterSignal(sleeper, COMSIG_MOVABLE_MOVED) + UnregisterSignal(sleeper, COMSIG_LIVING_SET_RESTING) + UnregisterSignal(sleeper, COMSIG_PARENT_QDELETING) + to_chat(sleeper, "I smooth [src] out beneath you.") + layer = initial(layer) + plane = initial(plane) + signal_sleeper = null + +// We need to do this in case someone picks up a bedsheet while a mob is covered up +// otherwise the bedsheet will disappear while in our hands if the sleeper signals get activated by moving +/obj/item/bedsheet/proc/on_pickup(datum/source, mob/grabber) + SIGNAL_HANDLER + var/mob/living/sleeper = signal_sleeper?.resolve() + UnregisterSignal(src, COMSIG_ITEM_PICKUP) + UnregisterSignal(sleeper, COMSIG_MOVABLE_MOVED) + UnregisterSignal(sleeper, COMSIG_LIVING_SET_RESTING) + UnregisterSignal(sleeper, COMSIG_PARENT_QDELETING) + signal_sleeper = null + +/obj/item/bedsheet/rogue/cloth + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "cloth_bedsheet" + item_state = "cloth_bedsheet" + pixel_y = 5 + +/obj/item/bedsheet/rogue/pelt + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "pelt_bedsheet" + item_state = "pelt_bedsheet" + pixel_y = 5 + +/obj/item/bedsheet/rogue/wool + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "wool_bedsheet" + item_state = "wool_bedsheet" + pixel_y = 5 + +/obj/item/bedsheet/rogue/double_pelt + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "double_pelt_bedsheet" + item_state = "double_pelt_bedsheet" + +/obj/item/bedsheet/rogue/fabric + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "fabric_bedsheet" + item_state = "fabric_bedsheet" + pixel_y = 5 + +/obj/item/bedsheet/rogue/fabric_double + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "double_fabric_bedsheet" + item_state = "double_fabric_bedsheet" + +/obj/item/bedsheet/random + icon_state = "random_bedsheet" + name = "random bedsheet" + desc = "" diff --git a/code/game/objects/items/rogueitems/natural/clothfibersthorn.dm b/code/game/objects/items/rogueitems/natural/clothfibersthorn.dm index 125e86b8e2..5d4d336adf 100644 --- a/code/game/objects/items/rogueitems/natural/clothfibersthorn.dm +++ b/code/game/objects/items/rogueitems/natural/clothfibersthorn.dm @@ -20,6 +20,9 @@ to_chat(user, "I start to collect [src]...") if(move_after(user, 5 SECONDS, target = src)) var/fibercount = 0 + var/obj/item/natural/fibers/W = user.get_active_held_item() + if(istype(W)) + fibercount++ for(var/obj/item/natural/fibers/F in get_turf(src)) fibercount++ while(fibercount > 0) @@ -33,6 +36,8 @@ fibercount -= clamp(fibercount, 2, 6) for(var/obj/item/natural/fibers/F in get_turf(src)) qdel(F) + if(istype(W)) + qdel(W) /obj/item/natural/silk name = "silk" @@ -56,6 +61,9 @@ to_chat(user, "I start to collect [src]...") if(move_after(user, 5 SECONDS, target = src)) var/silkcount = 0 + var/obj/item/natural/silk/W = user.get_active_held_item() + if(istype(W)) + silkcount++ for(var/obj/item/natural/silk/F in get_turf(src)) silkcount++ while(silkcount > 0) @@ -69,6 +77,8 @@ silkcount -= clamp(silkcount, 2, 6) for(var/obj/item/natural/silk/F in get_turf(src)) qdel(F) + if(istype(W)) + qdel(W) #ifdef TESTSERVER @@ -358,6 +368,9 @@ to_chat(user, "I start to collect [src]...") if(move_after(user, 5 SECONDS, target = src)) var/wormcount = 0 + var/obj/item/natural/worms/W = user.get_active_held_item() + if(istype(W)) + wormcount++ for(var/obj/item/natural/worms/F in get_turf(src)) wormcount++ while(wormcount > 0) @@ -371,3 +384,5 @@ wormcount -= clamp(wormcount, 2, 12) for(var/obj/item/natural/worms/F in get_turf(src)) qdel(F) + if(istype(W)) + qdel(W) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index 3d86950f94..3bcee9a8aa 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -23,11 +23,6 @@ var/bolts = TRUE buckleverb = "lay" -/obj/structure/bed/examine(mob/user) - . = ..() -// if(bolts) -// . += "It's held together by a couple of bolts." - /obj/structure/bed/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) if(buildstacktype) @@ -44,163 +39,10 @@ else return ..() -/* - * Roller beds - */ -/obj/structure/bed/roller - name = "roller bed" - icon = 'icons/obj/rollerbed.dmi' - icon_state = "down" - anchored = FALSE - resistance_flags = NONE - var/foldabletype = /obj/item/roller - -/obj/structure/bed/roller/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/roller/robo)) - var/obj/item/roller/robo/R = W - if(R.loaded) - to_chat(user, "I already have a roller bed docked!") - return - - if(has_buckled_mobs()) - if(buckled_mobs.len > 1) - unbuckle_all_mobs() - user.visible_message("[user] unbuckles all creatures from [src].") - else - user_unbuckle_mob(buckled_mobs[1],user) - else - R.loaded = src - forceMove(R) - user.visible_message("[user] collects [src].", "I collect [src].") - return 1 - else - return ..() - -/obj/structure/bed/roller/MouseDrop(over_object, src_location, over_location) +/obj/strucutre/bed/post_buckle_mob(mob/living/M) . = ..() - if(over_object == usr && Adjacent(usr)) - if(!ishuman(usr) || !usr.canUseTopic(src, BE_CLOSE)) - return 0 - if(has_buckled_mobs()) - return 0 - usr.visible_message("[usr] collapses \the [src.name].", "I collapse \the [src.name].") - var/obj/structure/bed/roller/B = new foldabletype(get_turf(src)) - usr.put_in_hands(B) - qdel(src) - -/obj/structure/bed/roller/post_buckle_mob(mob/living/M) - density = TRUE - icon_state = "up" -// M.pixel_y = initial(M.pixel_y) + M.update_cone_show() -/obj/structure/bed/roller/Moved() +/obj/structure/bed/post_unbuckle_mob(mob/living/M) . = ..() - if(has_gravity()) - playsound(src, 'sound/blank.ogg', 100, TRUE) - -/obj/structure/bed/roller/post_unbuckle_mob(mob/living/M) - density = FALSE - icon_state = "down" -// M.pixel_x = M.get_standard_pixel_x_offset(M.lying) -// M.pixel_y = M.get_standard_pixel_y_offset(M.lying) - -/obj/item/roller - name = "roller bed" - desc = "" - icon = 'icons/obj/rollerbed.dmi' - icon_state = "folded" - w_class = WEIGHT_CLASS_NORMAL // No more excuses, stop getting blood everywhere - -/obj/item/roller/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/roller/robo)) - var/obj/item/roller/robo/R = I - if(R.loaded) - to_chat(user, "[R] already has a roller bed loaded!") - return - user.visible_message("[user] loads [src].", "I load [src] into [R].") - R.loaded = new/obj/structure/bed/roller(R) - qdel(src) //"Load" - return - else - return ..() - -/obj/item/roller/attack_self(mob/user) - deploy_roller(user, user.loc) - -/obj/item/roller/afterattack(obj/target, mob/user , proximity) - . = ..() - if(!proximity) - return - if(isopenturf(target)) - deploy_roller(user, target) - -/obj/item/roller/proc/deploy_roller(mob/user, atom/location) - var/obj/structure/bed/roller/R = new /obj/structure/bed/roller(location) - R.add_fingerprint(user) - qdel(src) - -/obj/item/roller/robo //ROLLER ROBO DA! - name = "roller bed dock" - desc = "" - var/obj/structure/bed/roller/loaded = null - -/obj/item/roller/robo/Initialize() - . = ..() - loaded = new(src) - -/obj/item/roller/robo/examine(mob/user) - . = ..() - . += "The dock is [loaded ? "loaded" : "empty"]." - -/obj/item/roller/robo/deploy_roller(mob/user, atom/location) - if(loaded) - loaded.forceMove(location) - user.visible_message("[user] deploys [loaded].", "I deploy [loaded].") - loaded = null - else - to_chat(user, "The dock is empty!") - -//Dog bed - -/obj/structure/bed/dogbed - name = "dog bed" - icon_state = "dogbed" - desc = "" - anchored = FALSE - buildstacktype - buildstackamount = 10 - var/mob/living/owner = null - -/obj/structure/bed/dogbed/ian - desc = "" - name = "Ian's bed" - anchored = TRUE - -/obj/structure/bed/dogbed/cayenne - desc = "" - name = "Cayenne's bed" - anchored = TRUE - -/obj/structure/bed/dogbed/renault - desc = "" - name = "Renault's bed" - anchored = TRUE - -/obj/structure/bed/dogbed/runtime - desc = "" - name = "Runtime's bed" - anchored = TRUE - -/obj/structure/bed/dogbed/proc/update_owner(mob/living/M) - owner = M - name = "[M]'s bed" - desc = "" - -/obj/structure/bed/dogbed/buckle_mob(mob/living/M, force, check_loc) - . = ..() - update_owner(M) - -/obj/structure/bed/alien - name = "resting contraption" - desc = "" - icon_state = "abed" + M.update_cone_show() diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm deleted file mode 100644 index a174231bc4..0000000000 --- a/code/game/objects/structures/bedsheet_bin.dm +++ /dev/null @@ -1,446 +0,0 @@ -/* -CONTAINS: -BEDSHEETS -LINEN BINS -*/ - -/obj/item/bedsheet - name = "bedsheet" - desc = "" - icon = 'icons/obj/bedsheets.dmi' - lefthand_file = 'icons/mob/inhands/misc/bedsheet_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/bedsheet_righthand.dmi' - icon_state = "sheetwhite" - item_state = "sheetwhite" - layer = OBJ_LAYER - plane = GAME_PLANE_UPPER - throwforce = 0 - throw_speed = 1 - throw_range = 2 - w_class = WEIGHT_CLASS_TINY - resistance_flags = FLAMMABLE - dying_key = DYE_REGISTRY_BEDSHEET - - dog_fashion = /datum/dog_fashion/head/ghost - var/list/dream_messages = list("white") - -/obj/item/bedsheet/attack_self(mob/user) - if(!user.CanReach(src)) //No telekenetic grabbing. - return - if(!user.dropItemToGround(src)) - return - if(layer == initial(layer)) - layer = ABOVE_MOB_LAYER - to_chat(user, "I cover myself with [src].") - pixel_x = 0 - pixel_y = 0 - else - layer = initial(layer) - to_chat(user, "I smooth [src] out beneath you.") - add_fingerprint(user) - return - -/obj/item/bedsheet/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WIRECUTTER || I.get_sharpness()) - var/obj/item/stack/sheet/cloth/C = new (get_turf(src), 3) - transfer_fingerprints_to(C) - C.add_fingerprint(user) - qdel(src) - to_chat(user, "I tear [src] up.") - else - return ..() - -/obj/item/bedsheet/blue - icon_state = "sheetblue" - item_state = "sheetblue" - dream_messages = list("blue") - -/obj/item/bedsheet/green - icon_state = "sheetgreen" - item_state = "sheetgreen" - dream_messages = list("green") - -/obj/item/bedsheet/grey - icon_state = "sheetgrey" - item_state = "sheetgrey" - dream_messages = list("grey") - -/obj/item/bedsheet/orange - icon_state = "sheetorange" - item_state = "sheetorange" - dream_messages = list("orange") - -/obj/item/bedsheet/purple - icon_state = "sheetpurple" - item_state = "sheetpurple" - dream_messages = list("purple") - -/obj/item/bedsheet/patriot - name = "patriotic bedsheet" - desc = "" - icon_state = "sheetUSA" - item_state = "sheetUSA" - dream_messages = list("America", "freedom", "fireworks", "bald eagles") - -/obj/item/bedsheet/rainbow - name = "rainbow bedsheet" - desc = "" - icon_state = "sheetrainbow" - item_state = "sheetrainbow" - dream_messages = list("red", "orange", "yellow", "green", "blue", "purple", "a rainbow") - -/obj/item/bedsheet/red - icon_state = "sheetred" - item_state = "sheetred" - dream_messages = list("red") - -/obj/item/bedsheet/yellow - icon_state = "sheetyellow" - item_state = "sheetyellow" - dream_messages = list("yellow") - -/obj/item/bedsheet/mime - name = "mime's blanket" - desc = "" - icon_state = "sheetmime" - item_state = "sheetmime" - dream_messages = list("silence", "gestures", "a pale face", "a gaping mouth", "the mime") - -/obj/item/bedsheet/clown - name = "clown's blanket" - desc = "" - icon_state = "sheetclown" - item_state = "sheetrainbow" - dream_messages = list("honk", "laughter", "a prank", "a joke", "a smiling face", "the clown") - -/obj/item/bedsheet/captain - name = "captain's bedsheet" - desc = "" - icon_state = "sheetcaptain" - item_state = "sheetcaptain" - dream_messages = list("authority", "a golden ID", "sunglasses", "a green disc", "an antique gun", "the captain") - -/obj/item/bedsheet/rd - name = "research director's bedsheet" - desc = "" - icon_state = "sheetrd" - item_state = "sheetrd" - dream_messages = list("authority", "a silvery ID", "a bomb", "a mech", "a facehugger", "maniacal laughter", "the research director") - -// for Free Golems. -/obj/item/bedsheet/rd/royal_cape - name = "Royal Cape of the Liberator" - desc = "" - dream_messages = list("mining", "stone", "a golem", "freedom", "doing whatever") - -/obj/item/bedsheet/medical - name = "medical blanket" - desc = "" - icon_state = "sheetmedical" - item_state = "sheetmedical" - dream_messages = list("healing", "life", "surgery", "a doctor") - -/obj/item/bedsheet/cmo - name = "chief medical officer's bedsheet" - desc = "" - icon_state = "sheetcmo" - item_state = "sheetcmo" - dream_messages = list("authority", "a silvery ID", "healing", "life", "surgery", "a cat", "the chief medical officer") - -/obj/item/bedsheet/hos - name = "head of security's bedsheet" - desc = "" - icon_state = "sheethos" - item_state = "sheethos" - dream_messages = list("authority", "a silvery ID", "handcuffs", "a baton", "a flashbang", "sunglasses", "the head of security") - -/obj/item/bedsheet/hop - name = "head of personnel's bedsheet" - desc = "" - icon_state = "sheethop" - item_state = "sheethop" - dream_messages = list("authority", "a silvery ID", "obligation", "a computer", "an ID", "a corgi", "the head of personnel") - -/obj/item/bedsheet/ce - name = "chief engineer's bedsheet" - desc = "" - icon_state = "sheetce" - item_state = "sheetce" - dream_messages = list("authority", "a silvery ID", "the engine", "power tools", "an APC", "a parrot", "the chief engineer") - -/obj/item/bedsheet/qm - name = "quartermaster's bedsheet" - desc = "" - icon_state = "sheetqm" - item_state = "sheetqm" - dream_messages = list("a grey ID", "a shuttle", "a crate", "a sloth", "the quartermaster") - -/obj/item/bedsheet/brown - icon_state = "sheetbrown" - item_state = "sheetbrown" - dream_messages = list("brown") - -/obj/item/bedsheet/black - icon_state = "sheetblack" - item_state = "sheetblack" - dream_messages = list("black") - -/obj/item/bedsheet/centcom - name = "\improper CentCom bedsheet" - desc = "" - icon_state = "sheetcentcom" - item_state = "sheetcentcom" - dream_messages = list("a unique ID", "authority", "artillery", "an ending") - -/obj/item/bedsheet/syndie - name = "syndicate bedsheet" - desc = "" - icon_state = "sheetsyndie" - item_state = "sheetsyndie" - dream_messages = list("a green disc", "a red crystal", "a glowing blade", "a wire-covered ID") - -/obj/item/bedsheet/cult - name = "cultist's bedsheet" - desc = "" - icon_state = "sheetcult" - item_state = "sheetcult" - dream_messages = list("a tome", "a floating red crystal", "a glowing sword", "a bloody symbol", "a massive humanoid figure") - -/obj/item/bedsheet/wiz - name = "wizard's bedsheet" - desc = "" - icon_state = "sheetwiz" - item_state = "sheetwiz" - dream_messages = list("a book", "an explosion", "lightning", "a staff", "a skeleton", "a robe", "magic") - -/obj/item/bedsheet/nanotrasen - name = "nanotrasen bedsheet" - desc = "" - icon_state = "sheetNT" - item_state = "sheetNT" - dream_messages = list("authority", "an ending") - -/obj/item/bedsheet/ian - icon_state = "sheetian" - item_state = "sheetian" - dream_messages = list("a dog", "a corgi", "woof", "bark", "arf") - -/obj/item/bedsheet/cosmos - name = "cosmic space bedsheet" - desc = "" - icon_state = "sheetcosmos" - item_state = "sheetcosmos" - dream_messages = list("the infinite cosmos", "Hans Zimmer music", "a flight through space", "the galaxy", "being fabulous", "shooting stars") - light_power = 2 - light_outer_range = 1.4 - -/obj/item/bedsheet/rogue/cloth - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "cloth_bedsheet" - item_state = "cloth_bedsheet" - pixel_y = 5 - -/obj/item/bedsheet/rogue/pelt - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "pelt_bedsheet" - item_state = "pelt_bedsheet" - pixel_y = 5 - -/obj/item/bedsheet/rogue/wool - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "wool_bedsheet" - item_state = "wool_bedsheet" - pixel_y = 5 - -/obj/item/bedsheet/rogue/double_pelt - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "double_pelt_bedsheet" - item_state = "double_pelt_bedsheet" - -/obj/item/bedsheet/rogue/fabric - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "fabric_bedsheet" - item_state = "fabric_bedsheet" - pixel_y = 5 - -/obj/item/bedsheet/rogue/fabric_double - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "double_fabric_bedsheet" - item_state = "double_fabric_bedsheet" - -/obj/item/bedsheet/random - icon_state = "random_bedsheet" - name = "random bedsheet" - desc = "" - -/obj/item/bedsheet/random/Initialize() - ..() - var/type = pick(typesof(/obj/item/bedsheet) - /obj/item/bedsheet/random) - new type(loc) - return INITIALIZE_HINT_QDEL - -/obj/item/bedsheet/dorms - icon_state = "random_bedsheet" - name = "random dorms bedsheet" - desc = "" - -/obj/item/bedsheet/dorms/Initialize() - ..() - var/type = pickweight(list("Colors" = 80, "Special" = 20)) - switch(type) - if("Colors") - type = pick(list(/obj/item/bedsheet, - /obj/item/bedsheet/blue, - /obj/item/bedsheet/green, - /obj/item/bedsheet/grey, - /obj/item/bedsheet/orange, - /obj/item/bedsheet/purple, - /obj/item/bedsheet/red, - /obj/item/bedsheet/yellow, - /obj/item/bedsheet/brown, - /obj/item/bedsheet/black)) - if("Special") - type = pick(list(/obj/item/bedsheet/patriot, - /obj/item/bedsheet/rainbow, - /obj/item/bedsheet/ian, - /obj/item/bedsheet/cosmos, - /obj/item/bedsheet/nanotrasen)) - new type(loc) - return INITIALIZE_HINT_QDEL - -/obj/structure/bedsheetbin - name = "linen bin" - desc = "" - icon = 'icons/obj/structures.dmi' - icon_state = "linenbin-full" - anchored = TRUE - resistance_flags = FLAMMABLE - max_integrity = 70 - var/amount = 10 - var/list/sheets = list() - var/obj/item/hidden = null - -/obj/structure/bedsheetbin/empty - amount = 0 - icon_state = "linenbin-empty" - anchored = FALSE - - -/obj/structure/bedsheetbin/examine(mob/user) - . = ..() - if(amount < 1) - . += "There are no bed sheets in the bin." - else if(amount == 1) - . += "There is one bed sheet in the bin." - else - . += "There are [amount] bed sheets in the bin." - - -/obj/structure/bedsheetbin/update_icon() - switch(amount) - if(0) - icon_state = "linenbin-empty" - if(1 to 5) - icon_state = "linenbin-half" - else - icon_state = "linenbin-full" - -/obj/structure/bedsheetbin/fire_act(added, maxstacks) - if(amount) - amount = 0 - update_icon() - ..() - -/obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/bedsheet)) - if(!user.transferItemToLoc(I, src)) - return - sheets.Add(I) - amount++ - to_chat(user, "I tuck [I] in [src].") - update_icon() - - else if(default_unfasten_wrench(user, I, 5)) - return - - else if(I.tool_behaviour == TOOL_SCREWDRIVER) - if(flags_1 & NODECONSTRUCT_1) - return - if(amount) - to_chat(user, "The [src] must be empty first!") - return - if(I.use_tool(src, user, 5, volume=50)) - to_chat(user, "I disassemble the [src].") - new /obj/item/stack/rods(loc, 2) - qdel(src) - - else if(amount && !hidden && I.w_class < WEIGHT_CLASS_BULKY) //make sure there's sheets to hide it among, make sure nothing else is hidden in there. - if(!user.transferItemToLoc(I, src)) - to_chat(user, "\The [I] is stuck to your hand, you cannot hide it among the sheets!") - return - hidden = I - to_chat(user, "I hide [I] among the sheets.") - - -/obj/structure/bedsheetbin/attack_paw(mob/user) - return attack_hand(user) - -/obj/structure/bedsheetbin/attack_hand(mob/user) - . = ..() - if(.) - return - if(isliving(user)) - var/mob/living/L = user - if(!(L.mobility_flags & MOBILITY_PICKUP)) - return - if(amount >= 1) - amount-- - - var/obj/item/bedsheet/B - if(sheets.len > 0) - B = sheets[sheets.len] - sheets.Remove(B) - - else - B = new /obj/item/bedsheet(loc) - - B.forceMove(drop_location()) - user.put_in_hands(B) - to_chat(user, "I take [B] out of [src].") - update_icon() - - if(hidden) - hidden.forceMove(drop_location()) - to_chat(user, "[hidden] falls out of [B]!") - hidden = null - - - add_fingerprint(user) -/obj/structure/bedsheetbin/attack_tk(mob/user) - if(amount >= 1) - amount-- - - var/obj/item/bedsheet/B - if(sheets.len > 0) - B = sheets[sheets.len] - sheets.Remove(B) - - else - B = new /obj/item/bedsheet(loc) - - B.forceMove(drop_location()) - to_chat(user, "I telekinetically remove [B] from [src].") - update_icon() - - if(hidden) - hidden.forceMove(drop_location()) - hidden = null - - - add_fingerprint(user) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index bf63cbceee..596e7b704c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -734,6 +734,7 @@ else to_chat(src, "I fail to get up!") update_cone_show() + SEND_SIGNAL(src, COMSIG_LIVING_SET_RESTING, rest) /mob/living/proc/update_resting() update_rest_hud_icon() @@ -1601,6 +1602,7 @@ else mobility_flags |= MOBILITY_STAND lying = 0 + update_cone_show() /* if(should_be_lying || restrained || incapacitated()) diff --git a/stonekeep.dme b/stonekeep.dme index 67d8554645..65f56ca4f5 100644 --- a/stonekeep.dme +++ b/stonekeep.dme @@ -624,6 +624,7 @@ #include "code\datums\diseases\advance\symptoms\weight.dm" #include "code\datums\diseases\advance\symptoms\youth.dm" #include "code\datums\elements\_element.dm" +#include "code\datums\elements\bed_tuckable.dm" #include "code\datums\elements\ai_flee_when_hurt.dm" #include "code\datums\elements\bsa_blocker.dm" #include "code\datums\elements\cleaning.dm" @@ -856,6 +857,7 @@ #include "code\game\objects\effects\temporary_visuals\projectiles\muzzle.dm" #include "code\game\objects\effects\temporary_visuals\projectiles\projectile_effects.dm" #include "code\game\objects\effects\temporary_visuals\projectiles\tracer.dm" +#include "code\game\objects\items\bedsheets.dm" #include "code\game\objects\items\blueprints.dm" #include "code\game\objects\items\bodybag.dm" #include "code\game\objects\items\candle.dm" @@ -1051,7 +1053,6 @@ #include "code\game\objects\structures\barricades.dm" #include "code\game\objects\structures\barsigns.dm" #include "code\game\objects\structures\bearpelt.dm" -#include "code\game\objects\structures\bedsheet_bin.dm" #include "code\game\objects\structures\displaycase.dm" #include "code\game\objects\structures\divine.dm" #include "code\game\objects\structures\dresser.dm" From 5d2bf99b5dc50aa528a3657142045a8bece800dc Mon Sep 17 00:00:00 2001 From: BadAtThisGame Date: Wed, 4 Dec 2024 01:53:49 +0200 Subject: [PATCH 2/5] My fault linters --- stonekeep.dme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stonekeep.dme b/stonekeep.dme index 65f56ca4f5..b5903dcbf3 100644 --- a/stonekeep.dme +++ b/stonekeep.dme @@ -624,8 +624,8 @@ #include "code\datums\diseases\advance\symptoms\weight.dm" #include "code\datums\diseases\advance\symptoms\youth.dm" #include "code\datums\elements\_element.dm" -#include "code\datums\elements\bed_tuckable.dm" #include "code\datums\elements\ai_flee_when_hurt.dm" +#include "code\datums\elements\bed_tuckable.dm" #include "code\datums\elements\bsa_blocker.dm" #include "code\datums\elements\cleaning.dm" #include "code\datums\elements\digitalcamo.dm" From 28aab1ed26d03f025ffce579eb83944b0343e7ee Mon Sep 17 00:00:00 2001 From: BadAtThisGame Date: Wed, 4 Dec 2024 01:57:21 +0200 Subject: [PATCH 3/5] Fixes? --- code/game/objects/items/stacks/rods.dm | 1 - code/game/objects/items/stacks/sheets/sheet_types.dm | 1 - code/modules/mapping/mapping_helpers.dm | 2 -- code/modules/mob/living/simple_animal/friendly/dog.dm | 5 +---- .../mob/living/simple_animal/hostile/mining_mobs/hivelord.dm | 2 -- 5 files changed, 1 insertion(+), 10 deletions(-) diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 36565b16f3..281cfe3035 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -2,7 +2,6 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = TRUE, on_floor = FALSE), \ new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 25, one_per_turf = 0), \ - new/datum/stack_recipe("linen bin", /obj/structure/bedsheetbin/empty, 2, time = 5, one_per_turf = 0), \ )) /obj/item/stack/rods diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 3a7f3b6927..13a828442d 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -148,7 +148,6 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("dog bed", /obj/structure/bed/dogbed, 10, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("dresser", /obj/structure/dresser, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 10),\ new/datum/stack_recipe("display case chassis", /obj/structure/displaycase_chassis, 5, one_per_turf = TRUE, on_floor = TRUE), \ diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 37fdd4d076..56f95b11e0 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -200,8 +200,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) table += thing if(isopenturf(thing)) new /obj/effect/decal/cleanable/confetti(thing) - if(locate(/obj/structure/bed/dogbed/ian) in thing) - new /obj/item/toy/balloon/corgi(thing) else openturfs += thing //cake + knife to cut it! diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index a3b93c1cf7..a5dbf896d9 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -134,10 +134,7 @@ /mob/living/simple_animal/pet/dog/Initialize() . = ..() var/dog_area = get_area(src) - for(var/obj/structure/bed/dogbed/D in dog_area) - if(!D.owner) - D.update_owner(src) - break + break /mob/living/simple_animal/pet/dog/corgi/Initialize() . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index c33c427e31..8c5346491d 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -300,8 +300,6 @@ mob_species = pick(list(/datum/species/golem/adamantine, /datum/species/golem/plasma, /datum/species/golem/diamond, /datum/species/golem/gold, /datum/species/golem/silver, /datum/species/golem/plasteel, /datum/species/golem/titanium, /datum/species/golem/plastitanium)) if(prob(30)) glasses = pickweight(list(/obj/item/clothing/glasses/meson = 2, /obj/item/clothing/glasses/hud/health = 2, /obj/item/clothing/glasses/hud/diagnostic =2, /obj/item/clothing/glasses/science = 2, /obj/item/clothing/glasses/welding = 2, /obj/item/clothing/glasses/night = 1)) - if(prob(50)) - neck = /obj/item/bedsheet/rd/royal_cape if(prob(10)) l_pocket = pick(list(/obj/item/crowbar/power, /obj/item/screwdriver/power, /obj/item/weldingtool/experimental)) if("YeOlde") From 227d2839db7e9fa6b13d2ca7b60691a84dde534e Mon Sep 17 00:00:00 2001 From: BadAtThisGame Date: Wed, 4 Dec 2024 01:59:01 +0200 Subject: [PATCH 4/5] I've had enough --- code/modules/mapping/mapping_helpers.dm | 2 -- code/modules/mob/living/simple_animal/friendly/dog.dm | 5 ----- 2 files changed, 7 deletions(-) diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 56f95b11e0..ad6050adf4 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -200,8 +200,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) table += thing if(isopenturf(thing)) new /obj/effect/decal/cleanable/confetti(thing) - else - openturfs += thing //cake + knife to cut it! var/turf/food_turf = get_turf(pick(table)) new /obj/item/kitchen/knife(food_turf) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index a5dbf896d9..e2368a18bd 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -131,11 +131,6 @@ animal_species = /mob/living/simple_animal/pet/dog/corgi/exoticcorgi nofur = TRUE -/mob/living/simple_animal/pet/dog/Initialize() - . = ..() - var/dog_area = get_area(src) - break - /mob/living/simple_animal/pet/dog/corgi/Initialize() . = ..() regenerate_icons() From 799b11b83aa83d7d36029b444da5d51f7d064c3c Mon Sep 17 00:00:00 2001 From: BadAtThisGame Date: Wed, 4 Dec 2024 02:06:05 +0200 Subject: [PATCH 5/5] gffgdhgjf --- code/game/objects/items/bedsheets.dm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/bedsheets.dm b/code/game/objects/items/bedsheets.dm index b001d8f9ae..504ff835a7 100644 --- a/code/game/objects/items/bedsheets.dm +++ b/code/game/objects/items/bedsheets.dm @@ -31,8 +31,6 @@ BEDSHEETS /obj/item/bedsheet/attack_self(mob/user) if(!user.CanReach(src)) //No telekenetic grabbing. return - if(!user.resting) - return if(!user.dropItemToGround(src)) return coverup(user) @@ -43,7 +41,7 @@ BEDSHEETS plane = -2 pixel_x = 0 pixel_y = 0 - to_chat(sleeper, "I cover myself with [src].") + to_chat(sleeper, span_notice("I cover myself with [src].")) var/angle = sleeper.lying_prev dir = angle2dir(angle + 180) // 180 flips it to be the same direction as the mob signal_sleeper = WEAKREF(sleeper) @@ -58,7 +56,7 @@ BEDSHEETS UnregisterSignal(sleeper, COMSIG_MOVABLE_MOVED) UnregisterSignal(sleeper, COMSIG_LIVING_SET_RESTING) UnregisterSignal(sleeper, COMSIG_PARENT_QDELETING) - to_chat(sleeper, "I smooth [src] out beneath you.") + to_chat(sleeper, span_notice("I smooth [src] out beneath you.")) layer = initial(layer) plane = initial(plane) signal_sleeper = null