diff --git a/_maps/map_files/templates/shelter_2.dmm b/_maps/map_files/templates/shelter_2.dmm new file mode 100644 index 00000000000..4ba11cef609 --- /dev/null +++ b/_maps/map_files/templates/shelter_2.dmm @@ -0,0 +1,41 @@ +"a" = (/turf/simulated/wall/survival,/area/survivalpod) +"b" = (/obj/structure/sign/mining/survival{dir = 8},/turf/simulated/wall/survival,/area/survivalpod) +"c" = (/obj/machinery/smartfridge/survival_pod/loaded,/turf/simulated/floor/pod,/area/survivalpod) +"d" = (/turf/simulated/floor/pod,/area/survivalpod) +"e" = (/obj/machinery/door/window/survival_pod{dir = 1},/turf/simulated/floor/carpet/black,/area/survivalpod) +"f" = (/obj/machinery/light,/turf/simulated/floor/carpet/black,/area/survivalpod) +"g" = (/obj/structure/sign/mining/survival{tag = "icon-survival (NORTH)"; icon_state = "survival"; dir = 1},/turf/simulated/wall/survival,/area/survivalpod) +"h" = (/obj/structure/fans,/turf/simulated/floor/pod,/area/survivalpod) +"i" = (/obj/machinery/sleeper/survival_pod,/turf/simulated/floor/pod,/area/survivalpod) +"j" = (/obj/structure/table/survival_pod,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/brute{pixel_x = 4; pixel_y = -2},/turf/simulated/floor/pod,/area/survivalpod) +"k" = (/obj/structure/table/wood/fancy/black{pixel_y = -9},/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/machinery/microwave,/turf/simulated/floor/carpet/black,/area/survivalpod) +"l" = (/obj/structure/sink/kitchen{dir = 4; pixel_x = -11},/turf/simulated/floor/carpet/black,/area/survivalpod) +"m" = (/obj/structure/sign/mining/survival,/turf/simulated/wall/survival,/area/survivalpod) +"n" = (/obj/structure/curtain/black,/obj/machinery/shower{pixel_y = 20},/turf/simulated/floor/pod{pixel_y = 0},/area/survivalpod) +"o" = (/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/machinery/door/window/survival_pod{dir = 1},/turf/simulated/floor/carpet/black,/area/survivalpod) +"p" = (/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/carpet/black,/area/survivalpod) +"q" = (/obj/structure/window/reinforced/survival_pod{dir = 9},/turf/simulated/floor/carpet/black,/area/survivalpod) +"r" = (/turf/simulated/floor/carpet/black,/area/survivalpod) +"s" = (/obj/item/device/gps/computer,/turf/simulated/floor/pod,/area/survivalpod) +"t" = (/obj/structure/stool/bed/pod,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/pod,/area/survivalpod) +"u" = (/obj/structure/tubes,/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/pod,/area/survivalpod) +"v" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/displaycase{desc = "A display case containing an expensive forgery, probably."; locked = 1; pixel_y = -4; req_access_txt = "48"; start_showpiece_type = /obj/item/fakeartefact},/turf/simulated/floor/carpet/black{dir = 1},/area/survivalpod) +"w" = (/obj/structure/fans/tiny,/obj/machinery/door/airlock/survival_pod,/turf/simulated/floor/pod,/area/survivalpod) +"x" = (/obj/structure/sign/mining/survival{tag = "icon-survival (EAST)"; icon_state = "survival"; dir = 4},/turf/simulated/wall/survival,/area/survivalpod) +"y" = (/obj/structure/toilet/secret{pixel_y = 12},/turf/simulated/floor/pod,/area/survivalpod) +"z" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/cardboard_cutout{desc = "A cardboard cutout of a xenomorph maid."; icon_state = "cutout_lusty"; name = "lusty xenomorph maid"}, /turf/simulated/floor/carpet/black,/area/survivalpod) +"A" = (/obj/structure/table/wood/fancy/black,/obj/machinery/light{dir = 4},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 6; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/bottle/wine,/turf/simulated/floor/carpet/black,/area/survivalpod) +"B" = (/obj/structure/table/wood/fancy/black,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -4; pixel_y = 1},/obj/effect/spawner/lootdrop/three_course_meal,/turf/simulated/floor/carpet/black,/area/survivalpod) +"C" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/carpet/black,/area/survivalpod) +"D" = (/obj/structure/sign/mining,/turf/simulated/wall/survival,/area/survivalpod) + +(1,1,1) = {" +agagaga +bhcsnyx +aidtoza +bjdupAx +akevqBa +blfrrCx +amawaDa +"} + diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 7045a06a875..ebfd177959e 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -198,3 +198,27 @@ /obj/item/weapon/gun/energy/kinetic_accelerator = 1, /obj/item/pizzabox = 3, ) + +/obj/effect/spawner/lootdrop/three_course_meal + name = "three course meal spawner" + lootcount = 3 + lootdoubles = FALSE + var/soups = list( + /obj/item/weapon/reagent_containers/food/snacks/beetsoup, + /obj/item/weapon/reagent_containers/food/snacks/stew, + /obj/item/weapon/reagent_containers/food/snacks/hotchili, + /obj/item/weapon/reagent_containers/food/snacks/nettlesoup, + /obj/item/weapon/reagent_containers/food/snacks/meatballsoup) + var/salads = list( + /obj/item/weapon/reagent_containers/food/snacks/herbsalad, + /obj/item/weapon/reagent_containers/food/snacks/validsalad, + /obj/item/weapon/reagent_containers/food/snacks/aesirsalad) + var/mains = list( + /obj/item/weapon/reagent_containers/food/snacks/enchiladas, + /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat, + /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger, + /obj/item/weapon/reagent_containers/food/snacks/superbiteburger) + +/obj/effect/spawner/lootdrop/three_course_meal/New() + loot = list(pick(soups) = 1,pick(salads) = 1,pick(mains) = 1) + . = ..() diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 1fec38f491b..f982c89a8c3 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -100,6 +100,11 @@ turf_type = /turf/simulated/floor/carpet burn_state = FLAMMABLE +/obj/item/stack/tile/carpet/black + name = "black carpet" + icon_state = "tile-carpet-black" + turf_type = /turf/simulated/floor/carpet/black + //Plasteel /obj/item/stack/tile/plasteel name = "floor tiles" diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm index 684dbc688a1..7655fba3605 100644 --- a/code/game/objects/items/weapons/table_rack_parts.dm +++ b/code/game/objects/items/weapons/table_rack_parts.dm @@ -46,6 +46,18 @@ /obj/item/stack/sheet/wood, /obj/item/stack/sheet/wood) +/obj/item/weapon/table_parts/wood/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/stack/tile/carpet)) + var/target = /obj/item/weapon/table_parts/fancy + if(istype(W, /obj/item/stack/tile/carpet/black)) + target = /obj/item/weapon/table_parts/fancy/black + var/obj/item/stack/S = W + if(S.use(1)) + new target(get_turf(src)) + qdel(src) + else + . = ..() + /obj/item/weapon/table_parts/glass name = "glass table parts" desc = "fragile!" @@ -57,6 +69,17 @@ /obj/item/stack/sheet/metal, /obj/item/stack/sheet/metal) +/obj/item/weapon/table_parts/fancy + name = "fancy table parts" + desc = "Pretty!" + icon_state = "fancy_tableparts" + result = /obj/structure/table/wood/fancy + +/obj/item/weapon/table_parts/fancy/black + name = "black fancy table parts" + icon_state = "black_fancy_tableparts" + result = /obj/structure/table/wood/fancy/black + /obj/item/weapon/rack_parts name = "rack parts" desc = "Parts of a rack." diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index 104fac7fd69..0fbc7b97879 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -35,6 +35,44 @@ icon_state = "open" layer = SHOWER_OPEN_LAYER +/obj/structure/curtain/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/toy/crayon)) + color = input(user, "Choose Color") as color + else if(isscrewdriver(W)) + if(anchored) + playsound(loc, W.usesound, 100, 1) + user.visible_message("[user] unscrews [src] from the floor.", "You start to unscrew [src] from the floor...", "You hear rustling noises.") + if(do_after(user, 50 * W.toolspeed, target = src)) + if(!anchored) + return + anchored = FALSE + to_chat(user, "You unscrew [src] from the floor.") + else + playsound(loc, W.usesound, 100, 1) + user.visible_message("[user] screws [src] to the floor.", "You start to screw [src] to the floor...", "You hear rustling noises.") + if(do_after(user, 50 * W.toolspeed, target = src)) + if(anchored) + return + anchored = TRUE + to_chat(user, "You screw [src] to the floor.") + else if(istype(W, /obj/item/weapon/wirecutters)) + if(!anchored) + playsound(loc, W.usesound, 100, 1) + user.visible_message("[user] cuts apart [src].", "You start to cut apart [src].", "You hear cutting.") + if(do_after(user, 50 * W.toolspeed, target = src)) + if(anchored) + return + to_chat(user, "You cut apart [src].") + deconstruct() + else + . = ..() + +/obj/structure/curtain/proc/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/cloth(loc, 2) + new /obj/item/stack/sheet/plastic(loc, 2) + new /obj/item/stack/rods(loc, 1) + qdel(src) + /obj/structure/curtain/black name = "black curtain" color = "#222222" @@ -59,4 +97,4 @@ color = "#000066" #undef SHOWER_OPEN_LAYER -#undef SHOWER_CLOSED_LAYER \ No newline at end of file +#undef SHOWER_CLOSED_LAYER diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 72638ff0943..158593a973f 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -105,19 +105,21 @@ var/global/list/captain_display_cases = list() var/ue = null var/image/occupant_overlay = null var/obj/item/weapon/airlock_electronics/circuit + var/start_showpiece_type = null //add type for items on display + +/obj/structure/displaycase/New() + . = ..() + if(start_showpiece_type) + occupant = new start_showpiece_type(src) + update_icon() /obj/structure/displaycase/captains_laser name = "captain's display case" desc = "A display case for the captain's antique laser gun. Hooked up with an anti-theft system." - burglar_alarm = 1 - -/obj/structure/displaycase/captains_laser/New() - captain_display_cases += src - req_access = list(access_captain) + burglar_alarm = 1 locked = 1 - spawn(5) - occupant = new /obj/item/weapon/gun/energy/laser/captain(src) - update_icon() + req_access = list(access_captain) + start_showpiece_type = /obj/item/weapon/gun/energy/laser/captain /obj/structure/displaycase/Destroy() dump() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 55181579699..d6bec1019b2 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -412,6 +412,35 @@ /obj/structure/table/woodentable/poker/narsie_act() return +/* + * Fancy Tables + */ + +/obj/structure/table/wood/fancy + name = "fancy table" + desc = "A standard metal table frame covered with an amazingly fancy, patterned cloth." + icon = 'icons/obj/structures.dmi' + icon_state = "fancy_table" + parts = /obj/item/weapon/table_parts/fancy + canSmoothWith = list(/obj/structure/table/wood/fancy, /obj/structure/table/wood/fancy/black) + +/obj/structure/table/wood/fancy/New() + icon = 'icons/obj/smooth_structures/fancy_table.dmi' //so that the tables place correctly in the map editor + ..() + +/obj/structure/table/wood/fancy/black + icon_state = "fancy_table_black" + parts = /obj/item/weapon/table_parts/fancy/black + +/obj/structure/table/wood/fancy/black/New() + ..() + icon = 'icons/obj/smooth_structures/fancy_table_black.dmi' //so that the tables place correctly in the map editor + + +/* + * Glass Tables + */ + /obj/structure/glasstable_frame name = "glass table frame" desc = "A metal frame for a glass table." diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index a43406eb3c7..d3cc48d46bf 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -120,6 +120,15 @@ to_chat(user, "You carefully place [I] into the cistern.") return +/obj/structure/toilet/secret + var/secret_type = null + +/obj/structure/toilet/secret/New() + . = ..() + if(secret_type) + var/obj/item/secret = new secret_type(src) + secret.desc += " It's a secret!" + w_items += secret.w_class /obj/structure/urinal diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index 94dc68b51f2..f4d281cdf68 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -145,6 +145,11 @@ burnt = 1 update_icon() +/turf/simulated/floor/carpet/black + icon = 'icons/turf/floors/carpet_black.dmi' + floor_tile = /obj/item/stack/tile/carpet/black + canSmoothWith = list(/turf/simulated/floor/carpet/black) + /turf/simulated/floor/fakespace icon = 'icons/turf/space.dmi' icon_state = "0" @@ -153,4 +158,4 @@ /turf/simulated/floor/fakespace/New() ..() - icon_state = "[rand(0,25)]" \ No newline at end of file + icon_state = "[rand(0,25)]" diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index ae964af74a8..6f266c121e1 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -307,9 +307,26 @@ /obj/item/weapon/bikehorn) category = CAT_MISC +/datum/crafting_recipe/blackcarpet + name = "Black Carpet" + result = /obj/item/stack/tile/carpet/black + time = 20 + reqs = list(/obj/item/stack/tile/carpet = 1) + tools = list(/obj/item/toy/crayon) + category = CAT_MISC + +/datum/crafting_recipe/showercurtain + name = "Shower Curtains" + result = /obj/structure/curtain + time = 20 + reqs = list(/obj/item/stack/sheet/cloth = 2, + /obj/item/stack/sheet/plastic = 2, + /obj/item/stack/rods = 1) + category = CAT_MISC + /datum/crafting_recipe/bonfire name = "Bonfire" time = 60 reqs = list(/obj/item/weapon/grown/log = 5) result = /obj/structure/bonfire - category = CAT_PRIMAL \ No newline at end of file + category = CAT_PRIMAL diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 96735d1a078..7852fe0edd8 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -333,8 +333,28 @@ new /obj/effect/effect/harmless_smoke(get_turf(src)) qdel(src) +/obj/item/weapon/survivalcapsule/luxury + name = "luxury bluespace shelter capsule" + desc = "An exorbitantly expensive luxury suite stored within a pocket of bluespace." + origin_tech = "engineering=3;bluespace=4" + template_id = "shelter_beta" + //Pod turfs and objects +//Window +/obj/structure/window/reinforced/survival_pod + name = "pod window" + icon = 'icons/obj/lavaland/survival_pod.dmi' + icon_state = "pwindow" + +// This override can be removed whenever we get rid of the stupid fucking `dir = 9` = full tile!!!! shit +/obj/structure/window/reinforced/survival_pod/CanPass(atom/movable/mover, turf/target, height=0) + if(istype(mover) && mover.checkpass(PASSGLASS)) + return 1 + if(get_dir(loc, target) == dir) + return !density + else + return 1 //Floors /turf/simulated/floor/pod @@ -364,6 +384,12 @@ base_icon_state = "survival_pod" glass_type = "/survival_pod" +//Windoor +/obj/machinery/door/window/survival_pod + icon = 'icons/obj/lavaland/survival_pod.dmi' + icon_state = "windoor" + base_state = "windoor" + //Table /obj/structure/table/survival_pod icon = 'icons/obj/lavaland/survival_pod.dmi' @@ -536,3 +562,31 @@ new /obj/item/stack/rods(loc) qdel(src) return ..() + +/obj/item/fakeartefact + name = "expensive forgery" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x2" + var/possible = list(/obj/item/ship_in_a_bottle, + /obj/item/weapon/gun/energy/pulse, + /obj/item/weapon/sleeping_carp_scroll, + /obj/item/weapon/shield/changeling, + /obj/item/weapon/lava_staff, + /obj/item/weapon/katana/energy, + /obj/item/weapon/storage/toolbox/green/memetic, + /obj/item/weapon/gun/projectile/automatic/l6_saw, + /obj/item/weapon/gun/magic/staff/chaos, + /obj/item/weapon/gun/magic/staff/spellblade, + /obj/item/weapon/gun/magic/wand/death, + /obj/item/weapon/gun/magic/wand/fireball, + /obj/item/stack/telecrystal, + /obj/item/weapon/banhammer) + +/obj/item/fakeartefact/New() + . = ..() + var/obj/item/I = pick(possible) + name = initial(I.name) + icon = initial(I.icon) + desc = initial(I.desc) + icon_state = initial(I.icon_state) + item_state = initial(I.item_state) diff --git a/code/modules/mining/shelters.dm b/code/modules/mining/shelters.dm index 38750b12d19..2389470e7f5 100644 --- a/code/modules/mining/shelters.dm +++ b/code/modules/mining/shelters.dm @@ -40,3 +40,17 @@ /datum/map_template/shelter/alpha/New() . = ..() whitelisted_turfs = typecacheof(/turf/simulated/mineral) + +/datum/map_template/shelter/beta + name = "Shelter Beta" + shelter_id = "shelter_beta" + description = "An extremly luxurious shelter, containing all \ + the amenities of home, including carpeted floors, hot and cold \ + running water, a gourmet three course meal, cooking facilities, \ + and a deluxe companion to keep you from getting lonely during \ + an ash storm." + mappath = "_maps/map_files/templates/shelter_2.dmm" + +/datum/map_template/shelter/beta/New() + . = ..() + whitelisted_turfs = typecacheof(/turf/simulated/mineral) diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 2735d145ac8..cb535c90165 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/lavaland/survival_pod.dmi b/icons/obj/lavaland/survival_pod.dmi index fae242d524f..a4c207b402c 100644 Binary files a/icons/obj/lavaland/survival_pod.dmi and b/icons/obj/lavaland/survival_pod.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table.dmi b/icons/obj/smooth_structures/fancy_table.dmi new file mode 100644 index 00000000000..a57b165f4ac Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table_black.dmi b/icons/obj/smooth_structures/fancy_table_black.dmi new file mode 100644 index 00000000000..d4570e8a7c1 Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_black.dmi differ diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index 85788316c13..2c7fedf90b3 100644 Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi index e4fedae838b..67cc9682cf8 100644 Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ diff --git a/icons/turf/floors/carpet_black.dmi b/icons/turf/floors/carpet_black.dmi new file mode 100644 index 00000000000..d1174203aa9 Binary files /dev/null and b/icons/turf/floors/carpet_black.dmi differ