From 5d519410b9e21dcd3da78b935d7822f0d8d3b189 Mon Sep 17 00:00:00 2001 From: Belaya Date: Sun, 27 Apr 2025 14:09:57 -0500 Subject: [PATCH 1/2] Wood variants: Plaswood, Shadow Wood and Mushroom Wood --- .../code/game/machinery/deployable.dm | 92 +++++++ .../items/stacks/sheets/sheet_types.dm | 146 ++++++++++ .../objects/items/stacks/tiles/tile_types.dm | 29 ++ .../objects/structures/beds_chairs/bed.dm | 30 +++ .../objects/structures/beds_chairs/chair.dm | 69 +++++ .../crates_lockers/crates/wooden.dm | 24 ++ .../code/game/objects/structures/dresser.dm | 249 ++++++++++++++++++ .../game/objects/structures/false_walls.dm | 27 ++ .../game/objects/structures/table_frames.dm | 88 +++++++ .../game/objects/structures/table_racks.dm | 68 +++++ GainStation13/code/game/turfs/closed.dm | 27 ++ .../game/turfs/simulated/floor/fancy_floor.dm | 164 ++++++++++++ .../turfs/simulated/wall/mineral_walls.dm | 78 ++++++ .../code/modules/cargo/bounties/assistant.dm | 21 ++ .../code/modules/cargo/bounties/mining.dm | 21 ++ GainStation13/code/modules/cargo/packs.dm | 21 ++ .../modules/hydroponics/grown/towercap.dm | 36 +++ GainStation13/icons/obj/crates.dmi | Bin 0 -> 1450 bytes .../icons/obj/hydroponics/harvest.dmi | Bin 1758 -> 4051 bytes .../obj/smooth_structures/gmushroom_table.dmi | Bin 0 -> 675 bytes .../gmushroompoker_table.dmi | Bin 0 -> 796 bytes .../obj/smooth_structures/plaswood_table.dmi | Bin 0 -> 674 bytes .../smooth_structures/plaswoodpoker_table.dmi | Bin 0 -> 795 bytes .../obj/smooth_structures/shadoww_table.dmi | Bin 0 -> 672 bytes .../smooth_structures/shadowwpoker_table.dmi | Bin 0 -> 794 bytes GainStation13/icons/obj/stationobjs.dmi | Bin 0 -> 942 bytes GainStation13/icons/obj/structure/flora.dm | 6 +- GainStation13/icons/obj/structures.dmi | Bin 0 -> 1033 bytes code/datums/mapgen/CaveGenerator.dm | 2 +- .../mapgen/Cavegens/LavalandGenerator.dm | 2 +- tgstation.dme | 15 ++ 31 files changed, 1210 insertions(+), 5 deletions(-) create mode 100644 GainStation13/code/game/machinery/deployable.dm create mode 100644 GainStation13/code/game/objects/items/stacks/sheets/sheet_types.dm create mode 100644 GainStation13/code/game/objects/items/stacks/tiles/tile_types.dm create mode 100644 GainStation13/code/game/objects/structures/beds_chairs/bed.dm create mode 100644 GainStation13/code/game/objects/structures/beds_chairs/chair.dm create mode 100644 GainStation13/code/game/objects/structures/crates_lockers/crates/wooden.dm create mode 100644 GainStation13/code/game/objects/structures/dresser.dm create mode 100644 GainStation13/code/game/objects/structures/false_walls.dm create mode 100644 GainStation13/code/game/objects/structures/table_frames.dm create mode 100644 GainStation13/code/game/objects/structures/table_racks.dm create mode 100644 GainStation13/code/game/turfs/simulated/floor/fancy_floor.dm create mode 100644 GainStation13/code/game/turfs/simulated/wall/mineral_walls.dm create mode 100644 GainStation13/code/modules/cargo/bounties/assistant.dm create mode 100644 GainStation13/code/modules/cargo/bounties/mining.dm create mode 100644 GainStation13/code/modules/hydroponics/grown/towercap.dm create mode 100644 GainStation13/icons/obj/crates.dmi create mode 100644 GainStation13/icons/obj/smooth_structures/gmushroom_table.dmi create mode 100644 GainStation13/icons/obj/smooth_structures/gmushroompoker_table.dmi create mode 100644 GainStation13/icons/obj/smooth_structures/plaswood_table.dmi create mode 100644 GainStation13/icons/obj/smooth_structures/plaswoodpoker_table.dmi create mode 100644 GainStation13/icons/obj/smooth_structures/shadoww_table.dmi create mode 100644 GainStation13/icons/obj/smooth_structures/shadowwpoker_table.dmi create mode 100644 GainStation13/icons/obj/stationobjs.dmi create mode 100644 GainStation13/icons/obj/structures.dmi 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 0000000000000000000000000000000000000000..13703aa19bdb808b2a29ddc2fe40c2fd339047df GIT binary patch literal 1450 zcmV;b1y%ZqP)fFDZ*Bkpc$`yKaB_9` z^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+J-4(t zqbNT=SBZ-=C9|j)C}zmTnO2mTn+joLs?0A)%_FF~ASbc7JU>5$XoWe(f|MiOi4sRR9JG{`|;boebJ)5GC&tBSVc$9wYEPX((VL#UdPfaYO<+Ss!oFP_Oi z5>VA`+fv%r7^HtFAZw2Yv|h&l1n?L_JrdB`tp8<-Uf@WFv4YlF0(gZZ9a08k$K%nh zZ$I>aOqs(f>WrOEr>={JHhWc0I1k9^(Cm7g3H+< zoB?#XNUKI>rzoSKDQ$_3Q-ImwrU@c1my40)6bx?#v(JGLcGZbWFoz>y0e82|akL#` z>_+BrG!npV>f%K(hnu?C6CZnf!{h7799VAwuCC%Jn8QMgJ@L`ibv%vCVWB-hU>Cy& z)--?$`#&TK026ORyybBKK*sm?9wr6TqJwX6aflSyZqK@f*b^T^e|Se@-68=*i4s6I z&HxdJ0pi^-R&XzlfX$5;6}ZjNPei1k5cdk+$-+cA0M;vWhj@KYe8hTY6yWs(-%wJc z4dt`=*kxwNSVw?^DB8aGSTu?sx}qI+*;F)}zt6WSc+__hruka1nF!rb5-{uoEF}Sp z2T)DEEAr~QtaOqr8a1phUhNCAz!f@xlsWyVu%^rTt^K)sOy8U+QaSH@m{DzzQ;iV`f7PdPh3 z<3*D|&)V3>FRizuSrfp{58XB&bp*KDl!=Nf0qp$HZS&D&0ez_#^$g%8I17Ne)QhYF zm}({6>`3!5U!|+Tb)kfbgsZE8mTq>W`IxVg6U`2l$i!Jy(!@{||tPEmL2Di7CkbJ^)JZ|JfKnZr$8?};Cjd-YQ% z#T?i`09RLi)68L^^`1Bal<9Ke{ob@|6#yE$7(TG30ZiEcAyELB_!{CXj|Tq6e(RRfD1;fAy?a8ZP{Qv*}07*qoM6N<$ Ef}U8G*Z=?k literal 0 HcmV?d00001 diff --git a/GainStation13/icons/obj/hydroponics/harvest.dmi b/GainStation13/icons/obj/hydroponics/harvest.dmi index c8e3d4d0422b58a829eb63d99130e216f5d14e06..c2e4af3a06dce0829524eed3639b895951064e69 100644 GIT binary patch literal 4051 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 literal 1758 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 IM6N<$f&q#rD*ylh literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..85bdbcbc794e357e4a1a6ae84059534e02084411 GIT binary patch literal 795 zcmV+$1LXXPP)005u_0{{R3dEt5<0000RP)t-sz`(#+ zSy^9SUxV=-0C=2@lR*l@AP_~@dJ0L_mKxo5QxZxR%@v9zrje!^RGRBo8tAV0ck|)# zc{4CIJ9n3UVC}W1Zxf>Rj-8k~94XoCnC2X0L&q;VG;?6P z?J5Oq>>Su`sXj5lwwnXnE!8s%?8l$Lc2jL&f|sqkG}W#=aQn8;#X&&@j|wusK)#@Y z^`p@SST|nApq~TFOO*v;a}EbI*sMsI7GYjqlT%;w^}zt2{by=ceD`l05bHx0i1i^0 zMDAqE0UKmFf_)|){=>dE(BMzbU!4kCi~TNxIu-0XY&{v&so=OKTc?6ECK}PndkBem59S>5E=MA%S&<(Il6N^0=^$9! zhZchS@5AGPwa>PK3M#1J(Lw4L$QM*l3e2wu%Rs^#dKoz67np@$ewU*Z%z4G2bRV9x z>%qtC!ySWrjtL^+H8zOEKk?fxh{&exa-N2NekKMlzqg!s!Y2ZIcZ=jcwSo#Ncyv&F zv=JWv=+A Zz5y^0-uVr;q5}W`002ovPDHLkV1gk-Vru{Z literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2d62fe8f9a18b3349f71b39cb2fd651aff288a85 GIT binary patch literal 672 zcmV;R0$=@!P)005u_0{{R3dEt5<0000LP)t-sz`(#b zI7vW2RDpD_X153d0}}#_?I7LXz21qidIvP%<>HP%JT3Xbt3~zJ8^FZpClAgFnX)!B(7y z%Q%VtI`X&MD6CPOggG2J%VAEwEV|>&yYTR7Untq+%Gf9w8qVghQP~t{%VuA0pMOmU zG#Y3O&?p%JPrcES08hP9G6Nn5cOuz zf0(Jsv{`02#<(4*@BMVimkOFfDW_9!*0iPD5x}s8xBI)Q0hhRix7({v2C&ixd-V(u zAi!Bb;|1y)0-OTOTX=b|nm}pJv4BCE6*bc$&&z9d>RT=!2Jkt5)&}K0zga-34^5!d zhbB-M$<+cb!g54<%{}%$3&tpYE=gSrrX+oxkvc$t0RIL2$pmW|fB*pk zybE~q8+e032HSs1#VCR0I`J?mNuXix6(B%>HvxO!LD3H2fMCwj{$N=z+c8kRhfql| z=cso%Dyhwi_HeL!P&nA#ha4Qg59b4WM;#zQfB005u_0{{R3dEt5<0000RP)t-sz`(#b zI7vW2RDpD_92^`eDJf}Oj9FQ6z`(%ZQfsUL0004WQchCV=-0C=2@lR*l?Fc3x8$tgm+j+iD}H_{?q*egh+sR?Q-Nif$pSa2u#yZP|= zycw959f#96vHm>Lw+Yd$o*kIl?J3D_PPPQuQDTj|*|de2bTVaZ1a}Q3vkS2#LCF&I z(`@sP=>SFoi~<XMkB#(ekoe?|(J_hiq_b8yJ+y@czh*3n8BI2|FN_9p8i~^Ww z^}Oc%TJI)YlDc4;U0f7eHj-f1{AOHXX=t)FDRA_V9M!Ko3?jTsvQJ0b6~se zDg|up9N2EDJ~6q8cZ^&tyH z?qtgW8)P|xeI_3M!@f7r;7`t9oeElu{Vsz#73?}}JsH%g;J7ARr-E)xwyvOp4+-9K zfYp|Q3M#1JUBG|8fHY`uu>4iZS`3WWiP?0^>+&{ujn|3UjH63~E?y^Q;~WMuc83*I z@Q`5bUl6rZupT78|0WWRm)>LhgK-@u8qvvn2#I(P<{a`aMcR3R2AXwXn z7J~cl!{dRq&$faJDyZPmLFyOC7gSIR%&!N_K*Ae(893w@n1x_|m!lNSdBvb~AD*-8 z!N=>v9fNz02_oS&Hi*PO@!Kwl$foUbo`!#ZCI&CRx14vvCjxtSi{w7Ff(j~lbWnV> z5g!kI5D_q(QzSrRgr~jWd?D{VAeHO0mCj70fRfsI!_1_o*}&Jc|u~o Y0Wc8W`3<+C0{{R307*qoM6N<$f>-EZnE(I) literal 0 HcmV?d00001 diff --git a/GainStation13/icons/obj/stationobjs.dmi b/GainStation13/icons/obj/stationobjs.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e4314307e86606ac42d700cf79a88a3b40efab5f GIT binary patch literal 942 zcmV;f15x~mP)9P1@DzPa~Pw%-+y;b+cSr?+C4nDdG@>p zN`-(uuYpn_P-Zd%86hBg@T!MPKL!u0`36!@a@^Mn5qTE3ic;p*u<&@+}eG_JWyCq zCK|Db=F-IZ2NUnOHt~*ziTJ$SWIQKHfF~q38PBOoDdHM*#6bZG_afyg}^K2PnnKV zA#hr|Q>LRN@<1Wid=cQ0W=iCNMy|Ocz#+}_kq5WZt%RS-zuGl^ce+vhkKaLf#?bYx zg?@^##TK^IeLuI+%aGy)LF^<57Ys4=x{wmNc$U9~)a$`5vF9~V>Lv(riy5{@9$&;z zGM(LXB!W;k0YM`Kc?;wje?H$u[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 0000000000000000000000000000000000000000..61f8e7aec5ff87dcafb7377e9e7d9d40475c6cbc GIT binary patch literal 1033 zcmV+k1or!hP)t<80d!JM zQvg8b*k%9#0GE1HSad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP18sn37*!PMYeZ#G<0iT|KmA~p5K@^22{}Z*yR)SU7O4uf_m9RyMJV2WC zsZz&EunJa!O~6X9&`PipE5Syv5`2ZcLY^V_o^xh*v;ss8Q~zr4F9R$6&=Rmy z-xhFE-x074v9F9GKvZm25ul=S z6aW>4qX4MrIZ8l^Qv{^gML>#G19X%{1lr0X0xf0H7?eeAP!_d8S=7%kk8$f6CNXY3 z!!X7jcgY?=adVgK0TefP$sRy)`z&#asPI|h6j9-`#3`aeNn?tjVA7Z(D3~;+2nx;; z1l%ah5(L~R%n}6LC{8P;NLl!_Vv3Z7Pb;QKS@2Bz6fp~)X`doy!87es#4G?%z_=Zt zfN?uO0plhB0TlospaK8{Q~;0w3I`;B!T|}O0C0Pi?Ps@F*?N3`w=QokS6@I%4z literal 0 HcmV?d00001 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/tgstation.dme b/tgstation.dme index 118a575221..84603e1d44 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" @@ -4044,6 +4058,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" From 95abdc9f8f7a15a3f786f37b18a937c5fc0a3241 Mon Sep 17 00:00:00 2001 From: Belaya Date: Sun, 27 Apr 2025 18:51:05 -0500 Subject: [PATCH 2/2] Orbit menu job icon fix --- icons/UI_Icons/tgui/jobs.dmi | Bin 1115 -> 1261 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/UI_Icons/tgui/jobs.dmi b/icons/UI_Icons/tgui/jobs.dmi index 207f11afed1faccd981fe0c5f66948d0edc59029..e4115d846b8657f339f1ba956d39c8771e430cfb 100644 GIT binary patch delta 1221 zcmV;$1UmcM2<-_aiBL{Q4GJ0x0000DNk~Le0000u0000m2m=5B0CNjTK>z>%W055y zT0woH^PeZlZNFQWy!XRT_q#*)*K30S0D4?6%K!kehD4m${mKB!Q&Uq94-fw@|Nj90 zhlhs~Np&eHDF6Tfz`(#WGc#dibm9O200DGTPE!Ct=GbNc00D@Ro*RGTuP~CmXn_u0 zx)ceD49zbTj6_>(EYX$d82S4$uWp6d$+U2yc)X*uYTq{R+g-c<*fvMZg*dgZ?eoK9 zvzW;Im$(QBYP57P3Q$@$3s1S|%2TuGGDN(_zqo+lxf?Y%r-VZl?*d_m zsi%aPtLTgcA-kX`bi#l24VUy0JvkV->&O`nxl$Bz)?0sd8xreic~sqmj#x#` zkUiG5b&z}hj~4=T64eI=4F;a;2_wZi87M{j4#_a}>O9A>E>R}EU=1v$bVwE+i9g9# zQTG|5^H;AsLw~Nm*NdA}PlNZ$$px#Y@6SPz$&~zVR|jguztF38vs+(Y$RECnBAXyD zDg6Kd0;EYqK~#T8iJg^=mZC5Wg^O^t2<|STqND5K{hxA@TS8mKnR5tpy!7X5lD1@= zD>nK#SCsm=*#1Q~RRvU4QBErDYEtA19pJcF;fgS@DMaL@EXZlw`m^!5?KYr^M-I?~ z{6$aG_(ofZ{VuL#9`lup07ea=ipR-QnRuwGm`mb$@)&>SyCQVhiY41W=NLRX?rz~6 zPos$K-_&hsD|AQOib^Qd9ju)yv>Va}=eaHWbprAQLe4p;?Wx~wb)94-dQ5@2UneT4 z>l3tB8K~PAK>YC< zvIL!iA}J^sW)LCAzyG`kEL1fORaQtsl^=QC>*heOoNkJ+3N}r%;Bn4T9Uu1VkK?Vw zw4=T2ktXvr)er)cHtl-!^4E2}2o?Ht#}n-+;2D27C!l5`yC)M70IskEhKb1mtL;1J zd_*uDhkz;yA`dYEIZ?qpRGd!8LOm0hL!CW}_8B;NJaBiGHYa!@w*am_j``(6b8etT zEoshOX|bQKWqU6-e0|||8SWa&eK0K_wDS5N`do)QZE!pnBp`&iV;JQ3E?NSQ2R?u} zLBM|-a8r;rn3fMA6%6eR)Psqjg=!v!!m>x42nr?ag#eI&LN0&^cTaK@Tk`l}b5Q>#5)AFf^mfl=6}XQ_d=Vq~?Y2J2%T?ko~; z94C^%Tiw3*OGf2734n;pOtzrN0v!`(0%{n jF@W!zgC90$?Qwhq(D7m@Hr<1N00000NkvXXu0mjfj@32q delta 1074 zcmV-21kL;H3EK!IiBL{Q4GJ0x0000DNk~Le0000m0000m2m=5B0ASn+wEzGBV38#v zSM#4I$!)*)!%z3SL-*HfL4BfIm%NWl-*@|N^Ra7BD495Quif**W7{m` zHI#>!wh2f>&}*F)6ic;oFey-4wT&mq<>aYtdVz?y`WF`vJoi)K=9F-(;$0x@F%6Uu zrHU5J2;xFPp;NAZzi_3G=*hvzeNWDC$xT8=Hw)>x3jdx#6eU7d1Nng!5@oG-J_}eB zjT zzKjq3xA0rzusq|ox8yB&Sy|liEDT6IigogWn^$<9%Dg;io%KLXZ z&38fjSyQcxC2b)psi{k(z0>JCEV$PTl%VyNfi#7G1vH{wAZKun>0C2#Dml^w2)}#< z(swXm=>S)nE49q<)btZz8K(LE?^xenbhNB1n%rw^embyHx;3y~ue(lOvglTQ5A^-Y z0G&>rk^wNsj^Y6(K#Xj2e+4iD6dx=C_|<7?Qrr`;jHS3Q%pQLK={g{lq*ef_Y3N@> zn-xZXfpyWt$77uq8`{sx+R(2y!vGA!#_K?Zt|kpDExpGKum!db&{JTOGuVf7fH}B8 zY6PI;%7BmPOG zsL*G(KhgI4lT;{rIOFRJ=Ys+;N0Kvu7(4)f^+N`1ygNpQ0XRW`GjKM54hobdfsywo zE(#!K5Iq(^%zzUC@fODQK>ry4){FEYc0PPQ)-cktHnb2fw0wT0$^NFPZe!BsPHQfI zq0eQ!(Z=gT?}Zp4o;Qr6yl)03O09KpT@bcOew8z02^3Kq@I^5O2(7Pot{;!}8{b7*mS|lw4FCWD07*qoM6N<$g7Zq?KmY&$