diff --git a/GainStation13/code/game/machinery/deployable.dm b/GainStation13/code/game/machinery/deployable.dm new file mode 100644 index 0000000000..92128e29ab --- /dev/null +++ b/GainStation13/code/game/machinery/deployable.dm @@ -0,0 +1,92 @@ +#define SINGLE "single" +#define VERTICAL "vertical" +#define HORIZONTAL "horizontal" + +#define METAL 1 +#define WOOD 2 +#define SAND 3 + +/obj/structure/barricade/shadoww //GS13 wood barricades + name = "Shadow barricade" + desc = "This space is blocked off by a shadow wood barricade." + icon = 'GainStation13/icons/obj/structures.dmi' + icon_state = "shadowwbarricade" + max_integrity = 50 + bar_material = WOOD + var/drop_amount = 3 + +/obj/structure/barricade/shadoww/attackby(obj/item/I, mob/user) + if(istype(I,/obj/item/stack/sheet/mineral/shadoww)) + var/obj/item/stack/sheet/mineral/shadoww/W = I + if(W.amount < 5) + to_chat(user, "You need at least five shadown planks to make a wall!") + return + else + to_chat(user, "You start adding [I] to [src]...") + if(do_after(user, 50, target=src)) + W.use(5) + new /turf/closed/wall/mineral/shadoww/nonmetal(get_turf(src)) + qdel(src) + return + return ..() + +/obj/structure/barricade/shadoww/make_debris() + new /obj/item/stack/sheet/mineral/shadoww(get_turf(src), drop_amount) + + +/obj/structure/barricade/plaswood + name = "Plaswood barricade" + desc = "This space is blocked off by a plaswood barricade." + icon = 'GainStation13/icons/obj/structures.dmi' + icon_state = "plaswoodwbarricade" + max_integrity = 180 + bar_material = WOOD + var/drop_amount = 3 + +/obj/structure/barricade/plaswood/attackby(obj/item/I, mob/user) + if(istype(I,/obj/item/stack/sheet/mineral/plaswood)) + var/obj/item/stack/sheet/mineral/plaswood/W = I + if(W.amount < 5) + to_chat(user, "You need at least five plaswood planks to make a wall!") + return + else + to_chat(user, "You start adding [I] to [src]...") + if(do_after(user, 50, target=src)) + W.use(5) + new /turf/closed/wall/mineral/plaswood/nonmetal(get_turf(src)) + qdel(src) + return + return ..() + +/obj/structure/barricade/plaswood/make_debris() + new /obj/item/stack/sheet/mineral/plaswood(get_turf(src), drop_amount) + + +/obj/structure/barricade/gmushroom + name = "Mushroom barricade" + desc = "This space is blocked off by a mushroom barricade." + icon = 'GainStation13/icons/obj/structures.dmi' + icon_state = "gmushroombarricade" + max_integrity = 50 + bar_material = WOOD + var/drop_amount = 3 + +/obj/structure/barricade/gmushroom/attackby(obj/item/I, mob/user) + if(istype(I,/obj/item/stack/sheet/mineral/gmushroom)) + var/obj/item/stack/sheet/mineral/gmushroom/W = I + if(W.amount < 5) + to_chat(user, "You need at least five mushroom planks to make a wall!") + return + else + to_chat(user, "You start adding [I] to [src]...") + if(do_after(user, 50, target=src)) + W.use(5) + new /turf/closed/wall/mineral/gmushroom/nonmetal(get_turf(src)) + qdel(src) + return + return ..() + +/obj/structure/barricade/gmushroom/make_debris() + new /obj/item/stack/sheet/mineral/gmushroom(get_turf(src), drop_amount) + +//GS13 wood barricades diff --git a/GainStation13/code/game/objects/items/stacks/sheets/sheet_types.dm b/GainStation13/code/game/objects/items/stacks/sheets/sheet_types.dm new file mode 100644 index 0000000000..f10387370c --- /dev/null +++ b/GainStation13/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -0,0 +1,146 @@ +//GS13: Shadow Wood + +GLOBAL_LIST_INIT(shadoww_recipes, list ( \ + new/datum/stack_recipe("Shadow wood floor tile", /obj/item/stack/tile/shadoww, 1, 4, 20), \ + new/datum/stack_recipe("Shadow wood table frame", /obj/structure/table_frame/shadoww, 2, time = 10), \ + new/datum/stack_recipe("Shadow wood barricade", /obj/structure/barricade/shadoww, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ + null, \ + new/datum/stack_recipe("Shadow wood chair", /obj/structure/chair/shadoww, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ + null, \ + new/datum/stack_recipe("Shadow wood barricade", /obj/structure/barricade/shadoww, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ + null, \ + new/datum/stack_recipe("Dog bed", /obj/structure/bed/shadowwdogbed, 10, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("Dresser", /obj/structure/shadowwdresser, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("shadow wood crate", /obj/structure/closet/crate/shadoww, 6, time = 50, one_per_turf = TRUE, on_floor = TRUE),\ +)) + + +/obj/item/stack/sheet/mineral/shadoww + name = "shadow wood" + desc = "An purplish wood, it's nothing special besides its color." + singular_name = "shadow wood plank" + icon_state = "sheet-shadoww" + item_state = "sheet-shadoww" + icon = 'GainStation13/icons/obj/stack_objects.dmi' + custom_materials = list(/datum/material/wood=MINERAL_MATERIAL_AMOUNT) + sheettype = "shadoww" + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0) + resistance_flags = FLAMMABLE + merge_type = /obj/item/stack/sheet/mineral/shadoww + novariants = TRUE + grind_results = list(/datum/reagent/carbon = 20) + walltype = /turf/closed/wall/mineral/shadoww + +/obj/item/stack/sheet/mineral/shadoww/get_main_recipes() + . = ..() + . += GLOB.shadoww_recipes + +/obj/item/stack/sheet/mineral/shadoww/fifty + amount = 50 + +/obj/item/stack/sheet/mineral/shadoww/twenty + amount = 20 + +/obj/item/stack/sheet/mineral/shadoww/ten + amount = 10 + +/obj/item/stack/sheet/mineral/shadoww/five + amount = 5 + +//GS13: Giant mushroom + +GLOBAL_LIST_INIT(gmushroom_recipes, list ( \ + new/datum/stack_recipe("Mushroom floor tile", /obj/item/stack/tile/gmushroom, 1, 4, 20), \ + new/datum/stack_recipe("Mushroom table frame", /obj/structure/table_frame/gmushroom, 2, time = 10), \ + new/datum/stack_recipe("Mushroom barricade", /obj/structure/barricade/gmushroom, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ + null, \ + new/datum/stack_recipe("Mushroom chair", /obj/structure/chair/gmushroom, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ + null, \ + new/datum/stack_recipe("Mushroom barricade", /obj/structure/barricade/gmushroom, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ + null, \ + new/datum/stack_recipe("Dog bed", /obj/structure/bed/gmushroomdogbed, 10, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("Dresser", /obj/structure/gmushroomdresser, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("Mushroom crate", /obj/structure/closet/crate/gmushroom, 6, time = 50, one_per_turf = TRUE, on_floor = TRUE),\ + null, \ +)) + +/obj/item/stack/sheet/mineral/gmushroom + name = "mushroom 'wood'" + desc = "A material similar to wood, except for being fireproof." + singular_name = "mushroom plank" + icon_state = "sheet-gmushroom" + item_state = "sheet-gmushroom" + icon = 'GainStation13/icons/obj/stack_objects.dmi' + sheettype = "gmushroom" + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 0) + resistance_flags = FIRE_PROOF + merge_type = /obj/item/stack/sheet/mineral/gmushroom + novariants = TRUE + grind_results = list(/datum/reagent/carbon = 20) + walltype = /turf/closed/wall/mineral/gmushroom + +/obj/item/stack/sheet/mineral/gmushroom/get_main_recipes() + . = ..() + . += GLOB.gmushroom_recipes + +/obj/item/stack/sheet/mineral/gmushroom/fifty + amount = 50 + +/obj/item/stack/sheet/mineral/gmushroom/twenty + amount = 20 + +/obj/item/stack/sheet/mineral/gmushroom/ten + amount = 10 + +/obj/item/stack/sheet/mineral/gmushroom/five + amount = 5 + +//GS13: Plaswood + +GLOBAL_LIST_INIT(plaswood_recipes, list ( \ + new/datum/stack_recipe("Plaswood floor tile", /obj/item/stack/tile/plaswood, 1, 4, 20), \ + new/datum/stack_recipe("Plaswood table frame", /obj/structure/table_frame/plaswood, 2, time = 10), \ + null, \ + new/datum/stack_recipe("Plaswood chair", /obj/structure/chair/plaswood, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ + null, \ + new/datum/stack_recipe("Plaswood barricade", /obj/structure/barricade/plaswood, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ + null, \ + new/datum/stack_recipe("Dog bed", /obj/structure/bed/plaswooddogbed, 10, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("Dresser", /obj/structure/plaswooddresser, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("Plaswood crate", /obj/structure/closet/crate/plaswood, 6, time = 50, one_per_turf = TRUE, on_floor = TRUE),\ + null, \ +)) + + +/obj/item/stack/sheet/mineral/plaswood + name = "plaswood" + desc = "A type of resistant wood acquired from Plasma Trees. It amost looks like metal!" + singular_name = "plaswood plank" + icon_state = "sheet-plaswood" + item_state = "sheet-plaswood" + icon = 'GainStation13/icons/obj/stack_objects.dmi' + sheettype = "plaswood" + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 80) + resistance_flags = FLAMMABLE | ACID_PROOF + throwforce = 10 + merge_type = /obj/item/stack/sheet/mineral/plaswood + novariants = TRUE + grind_results = list(/datum/reagent/carbon = 20, /datum/reagent/toxin/plasma = 20) + point_value = 23 + walltype = /turf/closed/wall/mineral/plaswood + +/obj/item/stack/sheet/mineral/plaswood/get_main_recipes() + . = ..() + . += GLOB.plaswood_recipes + +/obj/item/stack/sheet/mineral/plaswood/fifty + amount = 50 + +/obj/item/stack/sheet/mineral/plaswood/twenty + amount = 20 + +/obj/item/stack/sheet/mineral/plaswood/ten + amount = 10 + +/obj/item/stack/sheet/mineral/plaswood/five + amount = 5 diff --git a/GainStation13/code/game/objects/items/stacks/tiles/tile_types.dm b/GainStation13/code/game/objects/items/stacks/tiles/tile_types.dm new file mode 100644 index 0000000000..3eb2f5ca7e --- /dev/null +++ b/GainStation13/code/game/objects/items/stacks/tiles/tile_types.dm @@ -0,0 +1,29 @@ +//Mushroom +/obj/item/stack/tile/gmushroom + name = "mushroom floor tile" + singular_name = "mushroom floor tile" + desc = "An easy to fit mushroom floor tile." + icon = 'GainStation13/icons/obj/tiles.dmi' + icon_state = "tile-gmushroom" + turf_type = /turf/open/floor/gmushroom + resistance_flags = FIRE_PROOF + +//Shadow Wood +/obj/item/stack/tile/shadoww + name = "shadow wood floor tile" + singular_name = "shadow wood floor tile" + desc = "An easy to fit wood floor tile." + icon = 'GainStation13/icons/obj/tiles.dmi' + icon_state = "tile-shadoww" + turf_type = /turf/open/floor/shadoww + resistance_flags = FLAMMABLE + +//Plaswood +/obj/item/stack/tile/plaswood + name = "plaswood floor tile" + singular_name = "plaswood floor tile" + desc = "An easy to fit wood floor tile." + icon = 'GainStation13/icons/obj/tiles.dmi' + icon_state = "tile-plaswood" + turf_type = /turf/open/floor/plaswood + resistance_flags = FLAMMABLE | ACID_PROOF diff --git a/GainStation13/code/game/objects/structures/beds_chairs/bed.dm b/GainStation13/code/game/objects/structures/beds_chairs/bed.dm new file mode 100644 index 0000000000..df88709e8f --- /dev/null +++ b/GainStation13/code/game/objects/structures/beds_chairs/bed.dm @@ -0,0 +1,30 @@ +//GS13: pet beds +/obj/structure/bed/shadowwdogbed + name = "dog bed" + icon = 'GainStation13/icons/obj/objects.dmi' + icon_state = "shadowwdogbed" + desc = "A comfy-looking dog bed. You can even strap your pet in, in case the gravity turns off." + anchored = FALSE + buildstacktype = /obj/item/stack/sheet/mineral/shadoww + buildstackamount = 10 + var/mob/living/owner = null + +/obj/structure/bed/plaswooddogbed + name = "dog bed" + icon = 'GainStation13/icons/obj/objects.dmi' + icon_state = "plaswooddogbed" + desc = "A comfy-looking dog bed. You can even strap your pet in, in case the gravity turns off." + anchored = FALSE + buildstacktype = /obj/item/stack/sheet/mineral/plaswood + buildstackamount = 10 + var/mob/living/owner = null + +/obj/structure/bed/gmushroomdogbed + name = "dog bed" + icon = 'GainStation13/icons/obj/objects.dmi' + icon_state = "gmushroomdogbed" + desc = "A comfy-looking dog bed. You can even strap your pet in, in case the gravity turns off." + anchored = FALSE + buildstacktype = /obj/item/stack/sheet/mineral/gmushroom + buildstackamount = 10 + var/mob/living/owner = null diff --git a/GainStation13/code/game/objects/structures/beds_chairs/chair.dm b/GainStation13/code/game/objects/structures/beds_chairs/chair.dm new file mode 100644 index 0000000000..71ff15b9ea --- /dev/null +++ b/GainStation13/code/game/objects/structures/beds_chairs/chair.dm @@ -0,0 +1,69 @@ +//Shadow +/obj/structure/chair/shadoww + name = "shadow wood chair" + desc = "Fashionable dark." + icon = 'GainStation13/icons/obj/chairs.dmi' + icon_state = "shadoww_chair" + resistance_flags = FLAMMABLE + max_integrity = 70 + buildstacktype = /obj/item/stack/sheet/mineral/shadoww + buildstackamount = 3 + item_chair = /obj/item/chair/shadoww + +//Plaswood +/obj/structure/chair/plaswood + name = "plaswood chair" + desc = "Hard but confortable to sit." + icon = 'GainStation13/icons/obj/chairs.dmi' + icon_state = "plaswood_chair" + resistance_flags = FLAMMABLE | ACID_PROOF + max_integrity = 90 + buildstacktype = /obj/item/stack/sheet/mineral/plaswood + buildstackamount = 3 + item_chair = /obj/item/chair/plaswood + +//Mushroom +/obj/structure/chair/gmushroom + name = "mushroom chair" + desc = "You don't need to worry about losing your seat in case of fire!" + icon = 'GainStation13/icons/obj/chairs.dmi' + icon_state = "gmushroom_chair" + resistance_flags = FIRE_PROOF + max_integrity = 70 + buildstacktype = /obj/item/stack/sheet/mineral/gmushroom + buildstackamount = 3 + item_chair = /obj/item/chair/gmushroom + +//Toppled chairs +/obj/item/chair/shadoww + name = "shadow wood chair" + icon = 'GainStation13/icons/obj/chairs.dmi' + icon_state = "shadoww_chair_toppled" + item_state = "shadowwchair" + resistance_flags = FLAMMABLE + max_integrity = 70 + hitsound = 'sound/weapons/genhit1.ogg' + origin_type = /obj/structure/chair/shadoww + break_chance = 50 + +/obj/item/chair/plaswood + name = "plaswood chair" + icon = 'GainStation13/icons/obj/chairs.dmi' + icon_state = "plaswood_chair_toppled" + item_state = "plaswoodchair" + resistance_flags = FLAMMABLE | ACID_PROOF + max_integrity = 90 + hitsound = 'sound/weapons/genhit1.ogg' + origin_type = /obj/structure/chair/plaswood + break_chance = 70 + +/obj/item/chair/gmushroom + name = "mushroom chair" + icon = 'GainStation13/icons/obj/chairs.dmi' + icon_state = "gmushroom_chair_toppled" + item_state = "gmushroomchair" + resistance_flags = FIRE_PROOF + max_integrity = 70 + hitsound = 'sound/weapons/genhit1.ogg' + origin_type = /obj/structure/chair/gmushroom + break_chance = 50 diff --git a/GainStation13/code/game/objects/structures/crates_lockers/crates/wooden.dm b/GainStation13/code/game/objects/structures/crates_lockers/crates/wooden.dm new file mode 100644 index 0000000000..f0930acf53 --- /dev/null +++ b/GainStation13/code/game/objects/structures/crates_lockers/crates/wooden.dm @@ -0,0 +1,24 @@ +//Wood crates +/obj/structure/closet/crate/shadoww + name = "shadown wood crate" + desc = "Works just as well as a metal one." + material_drop = /obj/item/stack/sheet/mineral/shadoww + material_drop_amount = 6 + icon = 'GainStation13/icons/obj/crates.dmi' + icon_state = "shadoww" + +/obj/structure/closet/crate/plaswood + name = "plaswood crate" + desc = "Works just as well as a metal one." + material_drop = /obj/item/stack/sheet/mineral/plaswood + material_drop_amount = 6 + icon = 'GainStation13/icons/obj/crates.dmi' + icon_state = "plaswood" + +/obj/structure/closet/crate/gmushroom + name = "mushroom crate" + desc = "Works just as well as a metal one." + material_drop = /obj/item/stack/sheet/mineral/gmushroom + material_drop_amount = 6 + icon = 'GainStation13/icons/obj/crates.dmi' + icon_state = "gmushroom" diff --git a/GainStation13/code/game/objects/structures/dresser.dm b/GainStation13/code/game/objects/structures/dresser.dm new file mode 100644 index 0000000000..3f3203936e --- /dev/null +++ b/GainStation13/code/game/objects/structures/dresser.dm @@ -0,0 +1,249 @@ +//GS13 Shadow/Mushroom/Plasma dressers +/obj/structure/gmushroomdresser + name = "dresser" + desc = "A nicely-crafted mushroom dresser. It's filled with lots of undies." + icon = 'GainStation13/icons/obj/stationobjs.dmi' + icon_state = "gmushroomdresser" + density = TRUE + anchored = TRUE + +/obj/structure/gmushroomdresser/attackby(obj/item/I, mob/user, params) + if(I.tool_behaviour == TOOL_WRENCH) + to_chat(user, "You begin to [anchored ? "unwrench" : "wrench"] [src].") + if(I.use_tool(src, user, 20, volume=50)) + to_chat(user, "You successfully [anchored ? "unwrench" : "wrench"] [src].") + setAnchored(!anchored) + else + return ..() + +/obj/structure/gmushroomdresser/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) + qdel(src) + +/obj/structure/gmushroomdresser/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) + . = ..() + if(. || !ishuman(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + return + var/mob/living/carbon/human/H = user + + if(H.dna && H.dna.species && (NO_UNDERWEAR in H.dna.species.species_traits)) + to_chat(H, "You are not capable of wearing underwear.") + return + + var/list/undergarment_choices = list("Underwear", "Underwear Color", "Undershirt", "Undershirt Color", "Socks", "Socks Color") + if(!(GLOB.underwear_list[H.underwear]?.has_color)) + undergarment_choices -= "Underwear Color" + if(!(GLOB.undershirt_list[H.undershirt]?.has_color)) + undergarment_choices -= "Undershirt Color" + if(!(GLOB.socks_list[H.socks]?.has_color)) + undergarment_choices -= "Socks Color" + + var/choice = input(H, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in undergarment_choices + if(!H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + return + var/dye_undie = FALSE + var/dye_shirt = FALSE + var/dye_socks = FALSE + switch(choice) + if("Underwear") + var/new_undies = input(H, "Select your underwear", "Changing") as null|anything in GLOB.underwear_list + if(new_undies) + H.underwear = new_undies + H.saved_underwear = new_undies + var/datum/sprite_accessory/underwear/bottom/B = GLOB.underwear_list[new_undies] + dye_undie = B?.has_color + if("Undershirt") + var/new_undershirt = input(H, "Select your undershirt", "Changing") as null|anything in GLOB.undershirt_list + if(new_undershirt) + H.undershirt = new_undershirt + H.saved_undershirt = new_undershirt + var/datum/sprite_accessory/underwear/top/T = GLOB.undershirt_list[new_undershirt] + dye_shirt = T?.has_color + if("Socks") + var/new_socks = input(H, "Select your socks", "Changing") as null|anything in GLOB.socks_list + if(new_socks) + H.socks = new_socks + H.saved_socks = new_socks + var/datum/sprite_accessory/underwear/socks/S = GLOB.socks_list[new_socks] + dye_socks = S?.has_color + if(dye_undie || choice == "Underwear Color") + H.undie_color = recolor_undergarment(H, "underwear", H.undie_color) + if(dye_shirt || choice == "Undershirt Color") + H.shirt_color = recolor_undergarment(H, "undershirt", H.shirt_color) + if(dye_socks || choice == "Socks Color") + H.socks_color = recolor_undergarment(H, "socks", H.socks_color) + + add_fingerprint(H) + H.update_body(TRUE) + +/obj/structure/gmushroomdresser/proc/recolor_undergarment(mob/living/carbon/human/H, garment_type = "underwear", default_color) + var/n_color = input(H, "Choose your [garment_type]'\s color.", "Character Preference", default_color) as color|null + if(!n_color || !H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + return default_color + return sanitize_hexcolor(n_color, 3, FALSE, default_color) + +/obj/structure/plaswooddresser + name = "dresser" + desc = "A nicely-crafted plaswood dresser. It's filled with lots of undies." + icon = 'GainStation13/icons/obj/stationobjs.dmi' + icon_state = "plaswooddresser" + density = TRUE + anchored = TRUE + +/obj/structure/plaswooddresser/attackby(obj/item/I, mob/user, params) + if(I.tool_behaviour == TOOL_WRENCH) + to_chat(user, "You begin to [anchored ? "unwrench" : "wrench"] [src].") + if(I.use_tool(src, user, 20, volume=50)) + to_chat(user, "You successfully [anchored ? "unwrench" : "wrench"] [src].") + setAnchored(!anchored) + else + return ..() + +/obj/structure/plaswooddresser/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) + qdel(src) + +/obj/structure/plaswooddresser/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) + . = ..() + if(. || !ishuman(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + return + var/mob/living/carbon/human/H = user + + if(H.dna && H.dna.species && (NO_UNDERWEAR in H.dna.species.species_traits)) + to_chat(H, "You are not capable of wearing underwear.") + return + + var/list/undergarment_choices = list("Underwear", "Underwear Color", "Undershirt", "Undershirt Color", "Socks", "Socks Color") + if(!(GLOB.underwear_list[H.underwear]?.has_color)) + undergarment_choices -= "Underwear Color" + if(!(GLOB.undershirt_list[H.undershirt]?.has_color)) + undergarment_choices -= "Undershirt Color" + if(!(GLOB.socks_list[H.socks]?.has_color)) + undergarment_choices -= "Socks Color" + + var/choice = input(H, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in undergarment_choices + if(!H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + return + var/dye_undie = FALSE + var/dye_shirt = FALSE + var/dye_socks = FALSE + switch(choice) + if("Underwear") + var/new_undies = input(H, "Select your underwear", "Changing") as null|anything in GLOB.underwear_list + if(new_undies) + H.underwear = new_undies + H.saved_underwear = new_undies + var/datum/sprite_accessory/underwear/bottom/B = GLOB.underwear_list[new_undies] + dye_undie = B?.has_color + if("Undershirt") + var/new_undershirt = input(H, "Select your undershirt", "Changing") as null|anything in GLOB.undershirt_list + if(new_undershirt) + H.undershirt = new_undershirt + H.saved_undershirt = new_undershirt + var/datum/sprite_accessory/underwear/top/T = GLOB.undershirt_list[new_undershirt] + dye_shirt = T?.has_color + if("Socks") + var/new_socks = input(H, "Select your socks", "Changing") as null|anything in GLOB.socks_list + if(new_socks) + H.socks = new_socks + H.saved_socks = new_socks + var/datum/sprite_accessory/underwear/socks/S = GLOB.socks_list[new_socks] + dye_socks = S?.has_color + if(dye_undie || choice == "Underwear Color") + H.undie_color = recolor_undergarment(H, "underwear", H.undie_color) + if(dye_shirt || choice == "Undershirt Color") + H.shirt_color = recolor_undergarment(H, "undershirt", H.shirt_color) + if(dye_socks || choice == "Socks Color") + H.socks_color = recolor_undergarment(H, "socks", H.socks_color) + + add_fingerprint(H) + H.update_body(TRUE) + +/obj/structure/plaswooddresser/proc/recolor_undergarment(mob/living/carbon/human/H, garment_type = "underwear", default_color) + var/n_color = input(H, "Choose your [garment_type]'\s color.", "Character Preference", default_color) as color|null + if(!n_color || !H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + return default_color + return sanitize_hexcolor(n_color, 3, FALSE, default_color) + +/obj/structure/shadowwdresser + name = "dresser" + desc = "A nicely-crafted shadow wood dresser. It's filled with lots of undies." + icon = 'GainStation13/icons/obj/stationobjs.dmi' + icon_state = "shadowwdresser" + density = TRUE + anchored = TRUE + +/obj/structure/shadowwdresser/attackby(obj/item/I, mob/user, params) + if(I.tool_behaviour == TOOL_WRENCH) + to_chat(user, "You begin to [anchored ? "unwrench" : "wrench"] [src].") + if(I.use_tool(src, user, 20, volume=50)) + to_chat(user, "You successfully [anchored ? "unwrench" : "wrench"] [src].") + setAnchored(!anchored) + else + return ..() + +/obj/structure/shadowwdresser/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) + qdel(src) + +/obj/structure/shadowwdresser/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) + . = ..() + if(. || !ishuman(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + return + var/mob/living/carbon/human/H = user + + if(H.dna && H.dna.species && (NO_UNDERWEAR in H.dna.species.species_traits)) + to_chat(H, "You are not capable of wearing underwear.") + return + + var/list/undergarment_choices = list("Underwear", "Underwear Color", "Undershirt", "Undershirt Color", "Socks", "Socks Color") + if(!(GLOB.underwear_list[H.underwear]?.has_color)) + undergarment_choices -= "Underwear Color" + if(!(GLOB.undershirt_list[H.undershirt]?.has_color)) + undergarment_choices -= "Undershirt Color" + if(!(GLOB.socks_list[H.socks]?.has_color)) + undergarment_choices -= "Socks Color" + + var/choice = input(H, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in undergarment_choices + if(!H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + return + var/dye_undie = FALSE + var/dye_shirt = FALSE + var/dye_socks = FALSE + switch(choice) + if("Underwear") + var/new_undies = input(H, "Select your underwear", "Changing") as null|anything in GLOB.underwear_list + if(new_undies) + H.underwear = new_undies + H.saved_underwear = new_undies + var/datum/sprite_accessory/underwear/bottom/B = GLOB.underwear_list[new_undies] + dye_undie = B?.has_color + if("Undershirt") + var/new_undershirt = input(H, "Select your undershirt", "Changing") as null|anything in GLOB.undershirt_list + if(new_undershirt) + H.undershirt = new_undershirt + H.saved_undershirt = new_undershirt + var/datum/sprite_accessory/underwear/top/T = GLOB.undershirt_list[new_undershirt] + dye_shirt = T?.has_color + if("Socks") + var/new_socks = input(H, "Select your socks", "Changing") as null|anything in GLOB.socks_list + if(new_socks) + H.socks = new_socks + H.saved_socks = new_socks + var/datum/sprite_accessory/underwear/socks/S = GLOB.socks_list[new_socks] + dye_socks = S?.has_color + if(dye_undie || choice == "Underwear Color") + H.undie_color = recolor_undergarment(H, "underwear", H.undie_color) + if(dye_shirt || choice == "Undershirt Color") + H.shirt_color = recolor_undergarment(H, "undershirt", H.shirt_color) + if(dye_socks || choice == "Socks Color") + H.socks_color = recolor_undergarment(H, "socks", H.socks_color) + + add_fingerprint(H) + H.update_body(TRUE) + +/obj/structure/shadowwdresser/proc/recolor_undergarment(mob/living/carbon/human/H, garment_type = "underwear", default_color) + var/n_color = input(H, "Choose your [garment_type]'\s color.", "Character Preference", default_color) as color|null + if(!n_color || !H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + return default_color + return sanitize_hexcolor(n_color, 3, FALSE, default_color) diff --git a/GainStation13/code/game/objects/structures/false_walls.dm b/GainStation13/code/game/objects/structures/false_walls.dm new file mode 100644 index 0000000000..1fc633e74d --- /dev/null +++ b/GainStation13/code/game/objects/structures/false_walls.dm @@ -0,0 +1,27 @@ +//Shadow/Mushroom/Plasma false walls +/obj/structure/falsewall/gmushroom + name = "mushroom wall" + desc = "A wall with mushroom plating." + icon = 'GainStation13/icons/turf/walls/gmushroom_wall.dmi' + icon_state = "gmushroom" + mineral = /obj/item/stack/sheet/mineral/gmushroom + walltype = /turf/closed/wall/mineral/gmushroom + canSmoothWith = list(/obj/structure/falsewall/gmushroom, /turf/closed/wall/mineral/gmushroom) + +/obj/structure/falsewall/plaswood + name = "plaswood wall" + desc = "A wall with plaswood plating." + icon = 'GainStation13/icons/turf/walls/plaswood_wall.dmi' + icon_state = "plaswood" + mineral = /obj/item/stack/sheet/mineral/plaswood + walltype = /turf/closed/wall/mineral/plaswood + canSmoothWith = list(/obj/structure/falsewall/plaswood, /turf/closed/wall/mineral/plaswood) + +/obj/structure/falsewall/shadoww + name = "shadow wall" + desc = "A wall with shadow wood plating." + icon = 'GainStation13/icons/turf/walls/shadoww_wall.dmi' + icon_state = "shadoww" + mineral = /obj/item/stack/sheet/mineral/shadoww + walltype = /turf/closed/wall/mineral/shadoww + canSmoothWith = list(/obj/structure/falsewall/shadoww, /turf/closed/wall/mineral/shadoww) diff --git a/GainStation13/code/game/objects/structures/table_frames.dm b/GainStation13/code/game/objects/structures/table_frames.dm new file mode 100644 index 0000000000..bcbed8d5eb --- /dev/null +++ b/GainStation13/code/game/objects/structures/table_frames.dm @@ -0,0 +1,88 @@ +//Plaswood Frames +/obj/structure/table_frame/plaswood + name = "Plaswood table frame" + desc = "Four wooden legs with four framing wooden rods for a wooden table. You could easily pass through this." + icon = 'GainStation13/icons/obj/structures.dmi' + icon_state = "plaswood_frame" + framestack = /obj/item/stack/sheet/mineral/plaswood + framestackamount = 2 + resistance_flags = FLAMMABLE | ACID_PROOF + +/obj/structure/table_frame/plaswood/attackby(obj/item/I, mob/user, params) + if (istype(I, /obj/item/stack)) + var/obj/item/stack/material = I + var/toConstruct // stores the table variant + if(istype(I, /obj/item/stack/sheet/mineral/plaswood)) + toConstruct = /obj/structure/table/plaswood + else if(istype(I, /obj/item/stack/tile/carpet)) + toConstruct = /obj/structure/table/plaswood/plaswoodpoker + + if (toConstruct) + if(material.get_amount() < 1) + to_chat(user, "You need one [material.name] sheet to do this!") + return + to_chat(user, "You start adding [material] to [src]...") + if(do_after(user, 20, target = src) && material.use(1)) + make_new_table(toConstruct) + else + return ..() + + +//Mushroom Frames +/obj/structure/table_frame/gmushroom + name = "mushroom table frame" + desc = "Four wooden legs with four framing wooden rods for a wooden table. You could easily pass through this." + icon = 'GainStation13/icons/obj/structures.dmi' + icon_state = "gmushroom_frame" + framestack = /obj/item/stack/sheet/mineral/gmushroom + framestackamount = 2 + resistance_flags = FIRE_PROOF + +/obj/structure/table_frame/gmushroom/attackby(obj/item/I, mob/user, params) + if (istype(I, /obj/item/stack)) + var/obj/item/stack/material = I + var/toConstruct // stores the table variant + if(istype(I, /obj/item/stack/sheet/mineral/gmushroom)) + toConstruct = /obj/structure/table/gmushroom + else if(istype(I, /obj/item/stack/tile/carpet)) + toConstruct = /obj/structure/table/gmushroom/gmushroompoker + + if (toConstruct) + if(material.get_amount() < 1) + to_chat(user, "You need one [material.name] sheet to do this!") + return + to_chat(user, "You start adding [material] to [src]...") + if(do_after(user, 20, target = src) && material.use(1)) + make_new_table(toConstruct) + else + return ..() + + +//Shadow Wood Frames +/obj/structure/table_frame/shadoww + name = "shadow wood frame" + desc = "Four wooden legs with four framing wooden rods for a wooden table. You could easily pass through this." + icon = 'GainStation13/icons/obj/structures.dmi' + icon_state = "shadoww_frame" + framestack = /obj/item/stack/sheet/mineral/shadoww + framestackamount = 2 + resistance_flags = FLAMMABLE + +/obj/structure/table_frame/shadoww/attackby(obj/item/I, mob/user, params) + if (istype(I, /obj/item/stack)) + var/obj/item/stack/material = I + var/toConstruct // stores the table variant + if(istype(I, /obj/item/stack/sheet/mineral/shadoww)) + toConstruct = /obj/structure/table/shadoww + else if(istype(I, /obj/item/stack/tile/carpet)) + toConstruct = /obj/structure/table/shadoww/shadowwpoker + + if (toConstruct) + if(material.get_amount() < 1) + to_chat(user, "You need one [material.name] sheet to do this!") + return + to_chat(user, "You start adding [material] to [src]...") + if(do_after(user, 20, target = src) && material.use(1)) + make_new_table(toConstruct) + else + return ..() diff --git a/GainStation13/code/game/objects/structures/table_racks.dm b/GainStation13/code/game/objects/structures/table_racks.dm new file mode 100644 index 0000000000..5d7362d160 --- /dev/null +++ b/GainStation13/code/game/objects/structures/table_racks.dm @@ -0,0 +1,68 @@ +//Shadowwood tables +/obj/structure/table/shadoww + name = "Shadow wood table" + desc = "Do not apply fire to this. Rumour says it burns easily." + icon = 'GainStation13/icons/obj/smooth_structures/shadoww_table.dmi' + icon_state = "shadoww_table" + frame = /obj/structure/table_frame/shadoww + framestack = /obj/item/stack/sheet/mineral/shadoww + buildstack = /obj/item/stack/sheet/mineral/shadoww + resistance_flags = FLAMMABLE + max_integrity = 70 + canSmoothWith = list(/obj/structure/table/shadoww, + /obj/structure/table/shadoww/shadowwpoker) + +/obj/structure/table/shadoww/shadowwpoker + name = "gambling table" + desc = "A seedy table for seedy dealings in seedy places." + icon = 'GainStation13/icons/obj/smooth_structures/shadowwpoker_table.dmi' + icon_state = "shadowwpoker_table" + frame = /obj/structure/table_frame/shadoww + buildstack = /obj/item/stack/tile/carpet + +//Plaswood tables +/obj/structure/table/plaswood + name = "plaswood table" + desc = "An strong and grey wooden table." + icon = 'GainStation13/icons/obj/smooth_structures/plaswood_table.dmi' + icon_state = "plaswood_table" + frame = /obj/structure/table_frame/plaswood + framestack = /obj/item/stack/sheet/mineral/plaswood + buildstack = /obj/item/stack/sheet/mineral/plaswood + resistance_flags = FLAMMABLE + max_integrity = 200 + integrity_failure = 50 + armor = list("melee" = 10, "bullet" = 30, "laser" = 30, "energy" = 100, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) + canSmoothWith = list(/obj/structure/table/plaswood, + /obj/structure/table/plaswood/plaswoodpoker) + +/obj/structure/table/plaswood/plaswoodpoker + name = "gambling table" + desc = "A seedy table for seedy dealings in seedy places." + icon = 'GainStation13/icons/obj/smooth_structures/plaswoodpoker_table.dmi' + icon_state = "plaswoodpoker_table" + frame = /obj/structure/table_frame/plaswood + buildstack = /obj/item/stack/tile/carpet + + +//Mushroom tables +/obj/structure/table/gmushroom + name = "Mushroom table" + desc = "A pinkish table. And is fireproof!" + icon = 'GainStation13/icons/obj/smooth_structures/gmushroom_table.dmi' + icon_state = "gmushroom_table" + frame = /obj/structure/table_frame/gmushroom + framestack = /obj/item/stack/sheet/mineral/gmushroom + buildstack = /obj/item/stack/sheet/mineral/gmushroom + resistance_flags = FIRE_PROOF + max_integrity = 70 + canSmoothWith = list(/obj/structure/table/gmushroom, + /obj/structure/table/gmushroom/gmushroompoker) + +/obj/structure/table/gmushroom/gmushroompoker + name = "gambling table" + desc = "A seedy table for seedy dealings in seedy places." + icon = 'GainStation13/icons/obj/smooth_structures/gmushroompoker_table.dmi' + icon_state = "gmushroompoker_table" + frame = /obj/structure/table_frame/gmushroom + buildstack = /obj/item/stack/tile/carpet diff --git a/GainStation13/code/game/turfs/closed.dm b/GainStation13/code/game/turfs/closed.dm index d552cd6dd0..27b4a75c87 100644 --- a/GainStation13/code/game/turfs/closed.dm +++ b/GainStation13/code/game/turfs/closed.dm @@ -25,3 +25,30 @@ desc = "Somehow, it doesn't melt at all..." icon = 'Gainstation13/icons/turf/walls/wall_candy.dmi' icon_state = "choco_wall1" + +/turf/closed/indestructible/shadoww + name = "shadow wall" + desc = "A wall with shadow wood plating." + icon = 'GainStation13/icons/turf/walls/shadoww_wall.dmi' + icon_state = "shadoww" + baseturfs = /turf/closed/indestructible/shadoww + smooth = SMOOTH_TRUE + canSmoothWith = list(/turf/closed/wall/mineral/shadoww, /obj/structure/falsewall/shadoww, /turf/closed/indestructible/shadoww) + +/turf/closed/indestructible/plaswood + name = "plaswood wall" + desc = "A wall with plaswood plating." + icon = 'GainStation13/icons/turf/walls/plaswood_wall.dmi' + icon_state = "plaswood" + baseturfs = /turf/closed/indestructible/plaswood + smooth = SMOOTH_TRUE + canSmoothWith = list(/turf/closed/wall/mineral/plaswood, /obj/structure/falsewall/plaswood, /turf/closed/indestructible/shadoww) + +/turf/closed/indestructible/gmushroom + name = "mushroom wall" + desc = "A wall with mushroom plating." + icon = 'GainStation13/icons/turf/walls/gmushroom_wall.dmi' + icon_state = "gmushroom" + baseturfs = /turf/closed/indestructible/gmushroom + smooth = SMOOTH_TRUE + canSmoothWith = list(/turf/closed/wall/mineral/gmushroom, /obj/structure/falsewall/gmushroom, /turf/closed/indestructible/gmushroom) diff --git a/GainStation13/code/game/turfs/simulated/floor/fancy_floor.dm b/GainStation13/code/game/turfs/simulated/floor/fancy_floor.dm new file mode 100644 index 0000000000..d7cac032ab --- /dev/null +++ b/GainStation13/code/game/turfs/simulated/floor/fancy_floor.dm @@ -0,0 +1,164 @@ +//Shadow wood +/turf/open/floor/shadoww + desc = "Stylish shadow wood." + icon_state = "shadoww" + floor_tile = /obj/item/stack/tile/shadoww + broken_states = list("shadoww-broken", "shadoww-broken2", "shadoww-broken3", "shadoww-broken4", "shadoww-broken5", "shadoww-broken6", "shadoww-broken7") + footstep = FOOTSTEP_WOOD + barefootstep = FOOTSTEP_WOOD_BAREFOOT + clawfootstep = FOOTSTEP_WOOD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + tiled_dirt = FALSE + +/turf/open/floor/shadoww/examine(mob/user) + . = ..() + . += "There's a few screws and a small crack visible." + +/turf/open/floor/shadoww/screwdriver_act(mob/living/user, obj/item/I) + if(..()) + return TRUE + return pry_tile(I, user) + +/turf/open/floor/shadoww/try_replace_tile(obj/item/stack/tile/T, mob/user, params) + if(T.turf_type == type) + return + var/obj/item/tool = user.is_holding_item_of_type(/obj/item/screwdriver) + if(!tool) + tool = user.is_holding_item_of_type(/obj/item/crowbar) + if(!tool) + return + var/turf/open/floor/plating/P = pry_tile(tool, user, TRUE) + if(!istype(P)) + return + P.attackby(T, user, params) + +/turf/open/floor/shadoww/pry_tile(obj/item/C, mob/user, silent = FALSE) + C.play_tool_sound(src, 80) + return remove_tile(user, silent, (C.tool_behaviour == TOOL_SCREWDRIVER)) + +/turf/open/floor/shadoww/remove_tile(mob/user, silent = FALSE, make_tile = TRUE, forced = FALSE) + if(broken || burnt) + broken = 0 + burnt = 0 + if(user && !silent) + to_chat(user, "You remove the broken planks.") + else + if(make_tile) + if(user && !silent) + to_chat(user, "You unscrew the planks.") + if(floor_tile) + new floor_tile(src) + else + if(user && !silent) + to_chat(user, "You forcefully pry off the planks, destroying them in the process.") + return make_plating() + +//Mushroom wood +/turf/open/floor/gmushroom + desc = "Stylish mushroom 'wood'." + icon_state = "gmushroom" + floor_tile = /obj/item/stack/tile/gmushroom + broken_states = list("gmushroom-broken", "gmushroom-broken2", "gmushroom-broken3", "gmushroom-broken4", "gmushroom-broken5", "gmushroom-broken6", "gmushroom-broken7") + footstep = FOOTSTEP_WOOD + barefootstep = FOOTSTEP_WOOD_BAREFOOT + clawfootstep = FOOTSTEP_WOOD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + tiled_dirt = FALSE + +/turf/open/floor/gmushroom/examine(mob/user) + . = ..() + . += "There's a few screws and a small crack visible." + +/turf/open/floor/gmushroom/screwdriver_act(mob/living/user, obj/item/I) + if(..()) + return TRUE + return pry_tile(I, user) + +/turf/open/floor/gmushroom/try_replace_tile(obj/item/stack/tile/T, mob/user, params) + if(T.turf_type == type) + return + var/obj/item/tool = user.is_holding_item_of_type(/obj/item/screwdriver) + if(!tool) + tool = user.is_holding_item_of_type(/obj/item/crowbar) + if(!tool) + return + var/turf/open/floor/plating/P = pry_tile(tool, user, TRUE) + if(!istype(P)) + return + P.attackby(T, user, params) + +/turf/open/floor/gmushroom/pry_tile(obj/item/C, mob/user, silent = FALSE) + C.play_tool_sound(src, 80) + return remove_tile(user, silent, (C.tool_behaviour == TOOL_SCREWDRIVER)) + +/turf/open/floor/gmushroom/remove_tile(mob/user, silent = FALSE, make_tile = TRUE, forced = FALSE) + if(broken || burnt) + broken = 0 + burnt = 0 + if(user && !silent) + to_chat(user, "You remove the broken planks.") + else + if(make_tile) + if(user && !silent) + to_chat(user, "You unscrew the planks.") + if(floor_tile) + new floor_tile(src) + else + if(user && !silent) + to_chat(user, "You forcefully pry off the planks, destroying them in the process.") + return make_plating() + +//Plaswood +/turf/open/floor/plaswood + desc = "Stylish plaswood." + icon_state = "plaswood" + floor_tile = /obj/item/stack/tile/plaswood + broken_states = list("plaswood-broken", "plaswood-broken2", "plaswood-broken3", "plaswood-broken4", "plaswood-broken5", "plaswood-broken6", "plaswood-broken7") + footstep = FOOTSTEP_WOOD + barefootstep = FOOTSTEP_WOOD_BAREFOOT + clawfootstep = FOOTSTEP_WOOD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + tiled_dirt = FALSE + +/turf/open/floor/plaswood/examine(mob/user) + . = ..() + . += "There's a few screws and a small crack visible." + +/turf/open/floor/plaswood/screwdriver_act(mob/living/user, obj/item/I) + if(..()) + return TRUE + return pry_tile(I, user) + +/turf/open/floor/plaswood/try_replace_tile(obj/item/stack/tile/T, mob/user, params) + if(T.turf_type == type) + return + var/obj/item/tool = user.is_holding_item_of_type(/obj/item/screwdriver) + if(!tool) + tool = user.is_holding_item_of_type(/obj/item/crowbar) + if(!tool) + return + var/turf/open/floor/plating/P = pry_tile(tool, user, TRUE) + if(!istype(P)) + return + P.attackby(T, user, params) + +/turf/open/floor/plaswood/pry_tile(obj/item/C, mob/user, silent = FALSE) + C.play_tool_sound(src, 80) + return remove_tile(user, silent, (C.tool_behaviour == TOOL_SCREWDRIVER)) + +/turf/open/floor/plaswood/remove_tile(mob/user, silent = FALSE, make_tile = TRUE, forced = FALSE) + if(broken || burnt) + broken = 0 + burnt = 0 + if(user && !silent) + to_chat(user, "You remove the broken planks.") + else + if(make_tile) + if(user && !silent) + to_chat(user, "You unscrew the planks.") + if(floor_tile) + new floor_tile(src) + else + if(user && !silent) + to_chat(user, "You forcefully pry off the planks, destroying them in the process.") + return make_plating() diff --git a/GainStation13/code/game/turfs/simulated/wall/mineral_walls.dm b/GainStation13/code/game/turfs/simulated/wall/mineral_walls.dm new file mode 100644 index 0000000000..a8e8891944 --- /dev/null +++ b/GainStation13/code/game/turfs/simulated/wall/mineral_walls.dm @@ -0,0 +1,78 @@ +// GS13: Extra wood walls +/turf/closed/wall/mineral/gmushroom + name = "mushroom wall" + desc = "A wall with mushroom plating." + icon = 'GainStation13/icons/turf/walls/gmushroom_wall.dmi' + icon_state = "gmushroom" + sheet_type = /obj/item/stack/sheet/mineral/gmushroom + hardness = 70 + explosion_block = 0 + canSmoothWith = list(/turf/closed/wall/mineral/gmushroom, /obj/structure/falsewall/gmushroom, /turf/closed/wall/mineral/gmushroom/nonmetal) + +/turf/closed/wall/mineral/gmushroom/attackby(obj/item/W, mob/user) + if(W.sharpness && W.force) + var/duration = (48/W.force) * 2 //In seconds, for now. + if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/fireaxe)) + duration /= 4 //Much better with hatchets and axes. + if(do_after(user, duration*10, target=src)) //Into deciseconds. + dismantle_wall(FALSE,FALSE) + return + return ..() + +/turf/closed/wall/mineral/gmushroom/nonmetal + desc = "A solidly mushroom wall. It's a bit weaker than a wall made with metal." + girder_type = /obj/structure/barricade/gmushroom + hardness = 50 + canSmoothWith = list(/turf/closed/wall/mineral/gmushroom, /obj/structure/falsewall/gmushroom, /turf/closed/wall/mineral/gmushroom/nonmetal) + +/turf/closed/wall/mineral/plaswood + name = "plaswood wall" + desc = "A wall with plaswood plating." + icon = 'GainStation13/icons/turf/walls/plaswood_wall.dmi' + icon_state = "plaswood" + sheet_type = /obj/item/stack/sheet/mineral/plaswood + hardness = 90 + explosion_block = 35 + canSmoothWith = list(/turf/closed/wall/mineral/plaswood, /obj/structure/falsewall/plaswood, /turf/closed/wall/mineral/plaswood/nonmetal) + +/turf/closed/wall/mineral/plaswood/attackby(obj/item/W, mob/user) + if(W.sharpness && W.force) + var/duration = (48/W.force) * 2 //In seconds, for now. + if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/fireaxe)) + duration /= 4 //Much better with hatchets and axes. + if(do_after(user, duration*10, target=src)) //Into deciseconds. + dismantle_wall(FALSE,FALSE) + return + return ..() + +/turf/closed/wall/mineral/plaswood/nonmetal + desc = "A solidly plaswood wall. It's a bit weaker than a wall made with metal." + girder_type = /obj/structure/barricade/plaswood + hardness = 70 + canSmoothWith = list(/turf/closed/wall/mineral/plaswood, /obj/structure/falsewall/plaswood, /turf/closed/wall/mineral/plaswood/nonmetal) + +/turf/closed/wall/mineral/shadoww + name = "shadow wall" + desc = "A wall with shadow wood plating." + icon = 'GainStation13/icons/turf/walls/shadoww_wall.dmi' + icon_state = "shadoww" + sheet_type = /obj/item/stack/sheet/mineral/shadoww + hardness = 70 + explosion_block = 0 + canSmoothWith = list(/turf/closed/wall/mineral/shadoww, /obj/structure/falsewall/shadoww, /turf/closed/wall/mineral/shadoww/nonmetal) + +/turf/closed/wall/mineral/shadoww/attackby(obj/item/W, mob/user) + if(W.sharpness && W.force) + var/duration = (48/W.force) * 2 //In seconds, for now. + if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/fireaxe)) + duration /= 4 //Much better with hatchets and axes. + if(do_after(user, duration*10, target=src)) //Into deciseconds. + dismantle_wall(FALSE,FALSE) + return + return ..() + +/turf/closed/wall/mineral/shadoww/nonmetal + desc = "A solidly shadow wall. It's a bit weaker than a wall made with metal." + girder_type = /obj/structure/barricade/shadoww + hardness = 50 + canSmoothWith = list(/turf/closed/wall/mineral/shadoww, /obj/structure/falsewall/shadoww, /turf/closed/wall/mineral/shadoww/nonmetal) diff --git a/GainStation13/code/modules/cargo/bounties/assistant.dm b/GainStation13/code/modules/cargo/bounties/assistant.dm new file mode 100644 index 0000000000..2918fe6d3e --- /dev/null +++ b/GainStation13/code/modules/cargo/bounties/assistant.dm @@ -0,0 +1,21 @@ +//Wood chair bounties +/datum/bounty/item/assistant/shadow_wood_chair + name = "Shadow Wood Chairs" + description = "One of the Commanders is unhappy with his chair. He claims it hurts his back. Ship some shadow wood chairs to humor him." + reward = 1000 + required_count = 5 + wanted_types = list(/obj/structure/chair/shadoww) + +/datum/bounty/item/assistant/mushroom_chair + name = "Mushroom Chairs" + description = "One of the Commanders is unhappy with his chair. He claims it hurts his back. Ship some mushroom chairs to humor him." + reward = 1500 + required_count = 5 + wanted_types = list(/obj/structure/chair/gmushroom) + +/datum/bounty/item/assistant/plaswood_chair + name = "Plaswood Chairs" + description = "One of the Commanders is unhappy with his chair. He claims it hurts his back. Ship some shadow wood chairs to humor him." + reward = 2250 + required_count = 5 + wanted_types = list(/obj/structure/chair/plaswood) diff --git a/GainStation13/code/modules/cargo/bounties/mining.dm b/GainStation13/code/modules/cargo/bounties/mining.dm new file mode 100644 index 0000000000..53bc7bb093 --- /dev/null +++ b/GainStation13/code/modules/cargo/bounties/mining.dm @@ -0,0 +1,21 @@ +//Wood plank bounties +/datum/bounty/item/mining/plaswood + name = "Plaswood Planks" + description = "Central Command's carpentry department needs more exotic wood, send us some plaswood planks!" + reward = 5500 + required_count = 100 + wanted_types = list(/obj/item/stack/sheet/mineral/plaswood) + +/datum/bounty/item/mining/gmushroom + name = "Mushroom Planks" + description = "Central Command's carpentry department needs more exotic 'wood', send us some mushroom planks!" + reward = 1100 + required_count = 100 + wanted_types = list(/obj/item/stack/sheet/mineral/gmushroom) + +/datum/bounty/item/mining/shadoww + name = "Shadow Planks" + description = "Central Command's carpentry department needs more exotic wood, send us some shadow planks!" + reward = 900 + required_count = 100 + wanted_types = list(/obj/item/stack/sheet/mineral/shadoww) diff --git a/GainStation13/code/modules/cargo/packs.dm b/GainStation13/code/modules/cargo/packs.dm index 5c153e5aff..1bb2b4a179 100644 --- a/GainStation13/code/modules/cargo/packs.dm +++ b/GainStation13/code/modules/cargo/packs.dm @@ -52,3 +52,24 @@ cost = 1500 contains = list(/obj/item/vending_refill/clothing) crate_name = "clothesmate supply crate" + +/datum/supply_pack/materials/gmushroom50 //buyable special wood planks + name = "50 Mushroom Planks" + desc = "Looks like wood AND is fire proof? Of course you need fifty mushroom planks!" + cost = 1700 + crate_type = /obj/structure/closet/secure_closet/cargo + contains = list(/obj/item/stack/sheet/mineral/gmushroom/fifty) + +/datum/supply_pack/materials/plaswood50 + name = "50 Plaswood Planks" + desc = "Who need metal when you can have fifty plaswood planks?" + cost = 6000 + crate_type = /obj/structure/closet/secure_closet/cargo + contains = list(/obj/item/stack/sheet/mineral/plaswood/fifty) + +/datum/supply_pack/materials/shadoww50 + name = "50 Shadow Wood Planks" + desc = "Time to bring the dark side with fifty shadow wooden planks!" + cost = 1450 + crate_type = /obj/structure/closet/secure_closet/cargo + contains = list(/obj/item/stack/sheet/mineral/shadoww/fifty) diff --git a/GainStation13/code/modules/hydroponics/grown/towercap.dm b/GainStation13/code/modules/hydroponics/grown/towercap.dm new file mode 100644 index 0000000000..e7d47f2b4f --- /dev/null +++ b/GainStation13/code/modules/hydroponics/grown/towercap.dm @@ -0,0 +1,36 @@ +//extra chopped wood logs +/obj/item/grown/log/gmushroom + seed = null + name = "mushroom log" + desc = "Looks like candy! Do not eat it." + icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi' + icon_state = "mushroom_log" + plank_type = /obj/item/stack/sheet/mineral/gmushroom + plank_name = "mushroom planks" + +/obj/item/grown/log/gmushroom/CheckAccepted(obj/item/I) + return FALSE + +/obj/item/grown/log/shadowtree + seed = null + name = "shadow log" + desc = "A piece of dark log." + icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi' + icon_state = "shadow_log" + plank_type = /obj/item/stack/sheet/mineral/shadoww + plank_name = "shadow planks" + +/obj/item/grown/log/gmushroom/CheckAccepted(obj/item/I) + return FALSE + +/obj/item/grown/log/plasmatree + seed = null + name = "plasma tree log" + desc = "A heavy piece log." + icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi' + icon_state = "plasmatree_log" + plank_type = /obj/item/stack/sheet/mineral/plaswood + plank_name = "plaswood planks" + +/obj/item/grown/log/plasmatree/CheckAccepted(obj/item/I) + return FALSE diff --git a/GainStation13/icons/obj/crates.dmi b/GainStation13/icons/obj/crates.dmi new file mode 100644 index 0000000000..13703aa19b Binary files /dev/null and b/GainStation13/icons/obj/crates.dmi differ diff --git a/GainStation13/icons/obj/hydroponics/harvest.dmi b/GainStation13/icons/obj/hydroponics/harvest.dmi index c8e3d4d042..c2e4af3a06 100644 Binary files a/GainStation13/icons/obj/hydroponics/harvest.dmi and b/GainStation13/icons/obj/hydroponics/harvest.dmi differ diff --git a/GainStation13/icons/obj/smooth_structures/gmushroom_table.dmi b/GainStation13/icons/obj/smooth_structures/gmushroom_table.dmi new file mode 100644 index 0000000000..42feccf233 Binary files /dev/null and b/GainStation13/icons/obj/smooth_structures/gmushroom_table.dmi differ diff --git a/GainStation13/icons/obj/smooth_structures/gmushroompoker_table.dmi b/GainStation13/icons/obj/smooth_structures/gmushroompoker_table.dmi new file mode 100644 index 0000000000..b5e396e30d Binary files /dev/null and b/GainStation13/icons/obj/smooth_structures/gmushroompoker_table.dmi differ diff --git a/GainStation13/icons/obj/smooth_structures/plaswood_table.dmi b/GainStation13/icons/obj/smooth_structures/plaswood_table.dmi new file mode 100644 index 0000000000..4710cea48c Binary files /dev/null and b/GainStation13/icons/obj/smooth_structures/plaswood_table.dmi differ diff --git a/GainStation13/icons/obj/smooth_structures/plaswoodpoker_table.dmi b/GainStation13/icons/obj/smooth_structures/plaswoodpoker_table.dmi new file mode 100644 index 0000000000..85bdbcbc79 Binary files /dev/null and b/GainStation13/icons/obj/smooth_structures/plaswoodpoker_table.dmi differ diff --git a/GainStation13/icons/obj/smooth_structures/shadoww_table.dmi b/GainStation13/icons/obj/smooth_structures/shadoww_table.dmi new file mode 100644 index 0000000000..2d62fe8f9a Binary files /dev/null and b/GainStation13/icons/obj/smooth_structures/shadoww_table.dmi differ diff --git a/GainStation13/icons/obj/smooth_structures/shadowwpoker_table.dmi b/GainStation13/icons/obj/smooth_structures/shadowwpoker_table.dmi new file mode 100644 index 0000000000..1903c23c02 Binary files /dev/null and b/GainStation13/icons/obj/smooth_structures/shadowwpoker_table.dmi differ diff --git a/GainStation13/icons/obj/stationobjs.dmi b/GainStation13/icons/obj/stationobjs.dmi new file mode 100644 index 0000000000..e4314307e8 Binary files /dev/null and b/GainStation13/icons/obj/stationobjs.dmi differ diff --git a/GainStation13/icons/obj/structure/flora.dm b/GainStation13/icons/obj/structure/flora.dm index f2248f4d6b..64dc8dedd0 100644 --- a/GainStation13/icons/obj/structure/flora.dm +++ b/GainStation13/icons/obj/structure/flora.dm @@ -39,7 +39,7 @@ user.visible_message("[user] fells [src] with the [W].","You fell [src] with the [W].", "You hear the sound of a tree falling.") playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0) for(var/i=1 to log_amount) - new /obj/item/grown/log(get_turf(src)) + new /obj/item/grown/log/gmushroom(get_turf(src)) var/obj/structure/gmushroom/gmushroomstump/S = new(loc) S.name = "[name] stump" @@ -91,7 +91,7 @@ user.visible_message("[user] fells [src] with the [W].","You fell [src] with the [W].", "You hear the sound of a tree falling.") playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0) for(var/i=1 to log_amount) - new /obj/item/grown/log(get_turf(src)) + new /obj/item/grown/log/shadowtree(get_turf(src)) var/obj/structure/shadowtree/shadowtreestump/S = new(loc) S.name = "[name] stump" @@ -142,7 +142,7 @@ user.visible_message("[user] fells [src] with the [W].","You fell [src] with the [W].", "You hear the sound of a tree falling.") playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0) for(var/i=1 to log_amount) - new /obj/item/grown/log(get_turf(src)) + new /obj/item/grown/log/plasmatree(get_turf(src)) var/obj/structure/plasmatree/plasmatreestump/S = new(loc) S.name = "[name] stump" diff --git a/GainStation13/icons/obj/structures.dmi b/GainStation13/icons/obj/structures.dmi new file mode 100644 index 0000000000..61f8e7aec5 Binary files /dev/null and b/GainStation13/icons/obj/structures.dmi differ diff --git a/code/datums/mapgen/CaveGenerator.dm b/code/datums/mapgen/CaveGenerator.dm index 4d6ae0ae07..13c43ef7a6 100644 --- a/code/datums/mapgen/CaveGenerator.dm +++ b/code/datums/mapgen/CaveGenerator.dm @@ -41,7 +41,7 @@ if(!megafauna_spawn_list) megafauna_spawn_list = GLOB.megafauna_spawn_list if(!flora_spawn_list) - flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2) + flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2, /obj/structure/flora/gmushroom/gggmushroom = 2, /obj/structure/flora/shadowtree/shadowtreee = 2, /obj/structure/flora/plasmatree/plasmatreee = 2) //GS13 Edit: trees in caves if(!feature_spawn_list) feature_spawn_list = list(/obj/structure/geyser/random = 1) diff --git a/code/datums/mapgen/Cavegens/LavalandGenerator.dm b/code/datums/mapgen/Cavegens/LavalandGenerator.dm index 3ce3821708..b9c0278462 100644 --- a/code/datums/mapgen/Cavegens/LavalandGenerator.dm +++ b/code/datums/mapgen/Cavegens/LavalandGenerator.dm @@ -7,7 +7,7 @@ /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/random = 40, /obj/structure/spawner/lavaland = 2, \ /mob/living/simple_animal/hostile/asteroid/hivelord/legion/random = 30, /obj/structure/spawner/lavaland/legion = 3, \ SPAWN_MEGAFAUNA = 4, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10) - flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2, /obj/structure/flora/ashtree = 1) + flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2, /obj/structure/flora/ashtree = 1, /obj/structure/flora/gmushroom/gggmushroom = 2, /obj/structure/flora/shadowtree/shadowtreee = 2, /obj/structure/flora/plasmatree/plasmatreee = 2) //GS13 Edit: trees in lavaland feature_spawn_list = list(/obj/structure/geyser/random = 1) initial_closed_chance = 45 diff --git a/icons/UI_Icons/tgui/jobs.dmi b/icons/UI_Icons/tgui/jobs.dmi index 207f11afed..e4115d846b 100644 Binary files a/icons/UI_Icons/tgui/jobs.dmi and b/icons/UI_Icons/tgui/jobs.dmi differ diff --git a/tgstation.dme b/tgstation.dme index dae6690f2f..b929a40851 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3963,6 +3963,7 @@ #include "GainStation13\code\game\plushes.dm" #include "GainStation13\code\game\sound.dm" #include "GainStation13\code\game\area\ruins.dm" +#include "GainStation13\code\game\machinery\deployable.dm" #include "GainStation13\code\game\objects\tiles.dm" #include "GainStation13\code\game\objects\turfs.dm" #include "GainStation13\code\game\objects\effects\landmarks.dm" @@ -3975,14 +3976,25 @@ #include "GainStation13\code\game\objects\items\toys.dm" #include "GainStation13\code\game\objects\items\storage\bags.dm" #include "GainStation13\code\game\objects\items\storage\firstaid.dm" +#include "GainStation13\code\game\objects\items\stacks\sheets\sheet_types.dm" +#include "GainStation13\code\game\objects\items\stacks\tiles\tile_types.dm" #include "GainStation13\code\game\objects\structures\barsigns.dm" #include "GainStation13\code\game\objects\structures\crate.dm" +#include "GainStation13\code\game\objects\structures\false_walls.dm" +#include "GainStation13\code\game\objects\structures\dresser.dm" #include "GainStation13\code\game\objects\structures\medikit.dm" #include "GainStation13\code\game\objects\structures\sofa.dm" #include "GainStation13\code\game\objects\structures\statues.dm" +#include "GainStation13\code\game\objects\structures\table_frames.dm" +#include "GainStation13\code\game\objects\structures\table_racks.dm" +#include "GainStation13\code\game\objects\structures\beds_chairs\bed.dm" +#include "GainStation13\code\game\objects\structures\beds_chairs\chair.dm" +#include "GainStation13\code\game\objects\structures\crates_lockers\crates\wooden.dm" #include "GainStation13\code\game\objects\structures\crates_lockers\closets\secure\psychology.dm" #include "GainStation13\code\game\turfs\closed.dm" #include "GainStation13\code\game\turfs\open.dm" +#include "GainStation13\code\game\turfs\simulated\floor\fancy_floor.dm" +#include "GainStation13\code\game\turfs\simulated\wall\mineral_walls.dm" #include "GainStation13\code\machinery\adipoelectric_generator.dm" #include "GainStation13\code\machinery\adipoelectric_transformer.dm" #include "GainStation13\code\machinery\cryogenic.dm" @@ -4023,6 +4035,8 @@ #include "GainStation13\code\modules\atmospherics\gasmixtures\reactions.dm" #include "GainStation13\code\modules\atmospherics\machinery\portable\canister.dm" #include "GainStation13\code\modules\cargo\packs.dm" +#include "GainStation13\code\modules\cargo\bounties\assistant.dm" +#include "GainStation13\code\modules\cargo\bounties\mining.dm" #include "GainStation13\code\modules\client\border_control.dm" #include "GainStation13\code\modules\client\loadout\head.dm" #include "GainStation13\code\modules\client\loadout\uniform.dm" @@ -4045,6 +4059,7 @@ #include "GainStation13\code\modules\hydroponics\lipoplant.dm" #include "GainStation13\code\modules\hydroponics\munchies_weed.dm" #include "GainStation13\code\modules\hydroponics\grown\berries.dm" +#include "GainStation13\code\modules\hydroponics\grown\towercap.dm" #include "GainStation13\code\modules\jobs\job_types\psychologist.dm" #include "GainStation13\code\modules\loadout\backpack.dm" #include "GainStation13\code\modules\loadout\gloves.dm"