diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index 6acf26a68d3..c24434866ee 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -1204,7 +1204,7 @@ "dg" = ( /obj/structure/stone_tile/center, /obj/effect/mapping_helpers/no_lava, -/obj/structure/bonfire, +/obj/structure/lightable/bonfire, /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "di" = ( diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_shuttlecrash.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_shuttlecrash.dmm index 1827a23d78f..2d2c1fd777d 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_shuttlecrash.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_shuttlecrash.dmm @@ -197,7 +197,7 @@ /turf/simulated/floor/plating, /area/ruin/unpowered/misc_lavaruin) "sx" = ( -/obj/structure/bonfire, +/obj/structure/lightable/bonfire, /obj/effect/mapping_helpers/no_lava, /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/way_home.dmm b/_maps/map_files/RandomRuins/SpaceRuins/way_home.dmm index 6192c613ff9..204ece3d351 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/way_home.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/way_home.dmm @@ -9,7 +9,7 @@ /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/unpowered/no_grav/way_home) "d" = ( -/obj/structure/signpost{ +/obj/structure/signpost/ruin{ name = "salvation" }, /turf/simulated/floor/plating/asteroid/airless, diff --git a/_maps/map_files/shuttles/emergency_jungle.dmm b/_maps/map_files/shuttles/emergency_jungle.dmm index 46009bb4ad7..c616056c708 100644 --- a/_maps/map_files/shuttles/emergency_jungle.dmm +++ b/_maps/map_files/shuttles/emergency_jungle.dmm @@ -163,7 +163,7 @@ }, /area/shuttle/escape) "aL" = ( -/obj/structure/bonfire/lit/dense, +/obj/structure/lightable/bonfire/lit/dense, /turf/simulated/floor/grass, /area/shuttle/escape) "aN" = ( @@ -731,7 +731,7 @@ /turf/simulated/floor/grass, /area/shuttle/escape) "tc" = ( -/obj/structure/bonfire/lit/dense, +/obj/structure/lightable/bonfire/lit/dense, /turf/simulated/floor/mineral/plastitanium/red/brig{ icon_state = "wood" }, diff --git a/_maps/map_files/stations/cerestation.dmm b/_maps/map_files/stations/cerestation.dmm index 4c20572b654..91db1c35a98 100644 --- a/_maps/map_files/stations/cerestation.dmm +++ b/_maps/map_files/stations/cerestation.dmm @@ -13264,7 +13264,7 @@ /turf/simulated/floor/carpet/grimey, /area/station/security/detective) "bPY" = ( -/obj/structure/bonfire, +/obj/structure/lightable/bonfire, /turf/simulated/floor/engine, /area/station/service/library) "bQc" = ( @@ -35390,11 +35390,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/simulated/floor/plating, /area/station/hallway/primary/fore/north) -"fXv" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) "fXz" = ( /obj/effect/spawner/random/dirt/often, /obj/structure/extinguisher_cabinet{ @@ -36404,7 +36399,7 @@ /turf/simulated/floor/transparent/glass/reinforced, /area/station/maintenance/apmaint) "gmR" = ( -/obj/structure/bonfire/lit, +/obj/structure/lightable/bonfire/lit, /obj/structure/stone_tile/surrounding/burnt, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/fore2) @@ -51216,6 +51211,11 @@ icon_state = "redcorner" }, /area/station/hallway/primary/fore/west) +"jKO" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard) "jKQ" = ( /obj/machinery/light/small{ dir = 4 @@ -171237,7 +171237,7 @@ lCC hnV tqi tqi -fXv +jKO eKJ wyL iJv diff --git a/_maps/map_files/stations/emeraldstation.dmm b/_maps/map_files/stations/emeraldstation.dmm index a0d419ab0e1..433b3538477 100644 --- a/_maps/map_files/stations/emeraldstation.dmm +++ b/_maps/map_files/stations/emeraldstation.dmm @@ -52375,7 +52375,7 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/dorms/fore) "ksj" = ( -/obj/structure/bonfire, +/obj/structure/lightable/bonfire, /obj/item/food/fish_skewer{ pixel_y = 9; pixel_x = 14 @@ -79593,7 +79593,7 @@ /turf/simulated/floor/plasteel, /area/station/supply/sorting) "pLi" = ( -/obj/structure/bonfire/lit, +/obj/structure/lightable/bonfire/lit, /obj/structure/stone_tile/slab/burnt, /turf/simulated/floor/grass/jungle, /area/station/maintenance/aft) diff --git a/code/datums/components/shelved.dm b/code/datums/components/shelved.dm index 3aa678d2efe..891d3716110 100644 --- a/code/datums/components/shelved.dm +++ b/code/datums/components/shelved.dm @@ -203,6 +203,15 @@ default_scale = 0.80 default_rotation = -90 +/datum/component/shelver/spear_rack + placement_zones = list( + list(1, 1, 13, 32) = list("x" = -6, "y" = 2, "layer" = BELOW_OBJ_LAYER), + list(14, 1, 20, 32) = list("x" = 0, "y" = 2, "layer" = BELOW_OBJ_LAYER), + list(21, 1, 32, 32) = list("x" = 6, "y" = 2, "layer" = BELOW_OBJ_LAYER), + ) + default_scale = 0.80 + default_rotation = -45 + /// A component for items stored on shelves, propagated by [/datum/component/shelver] components. /datum/component/shelved /// The UID of the object acting as the shelf diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 167c761e8bc..6dbeb85387c 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -248,19 +248,25 @@ GLOBAL_LIST_INIT(wood_recipes, list( new /datum/stack_recipe("rake", /obj/item/cultivator/rake, 5, time = 1 SECONDS), new /datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/glass/bucket/wooden, 3, time = 1 SECONDS), new /datum/stack_recipe("firebrand", /obj/item/match/firebrand, 2, time = 10 SECONDS), + new /datum/stack_recipe("mug", /obj/item/reagent_containers/drinks/mug/wood, 1, time = 0.5 SECONDS), new /datum/stack_recipe("notice board", /obj/item/mounted/noticeboard, 5, time = 5 SECONDS), null, new /datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20), new /datum/stack_recipe_list("wood structures", list( new /datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 1 SECONDS), new /datum/stack_recipe("wooden chair", /obj/structure/chair/wood, 3, time = 1 SECONDS, one_per_turf = TRUE, on_floor = TRUE), + new /datum/stack_recipe("wooden stool", /obj/structure/chair/stool/wood, 2, time = 1 SECONDS, one_per_turf = TRUE, on_floor = TRUE), new /datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), new /datum/stack_recipe("bookcase", /obj/structure/bookcase, 5, time = 5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), new /datum/stack_recipe("dresser", /obj/structure/dresser, 30, time = 5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), + new /datum/stack_recipe("wooden marker", /obj/structure/signpost/wood, 2, time = 2 SECONDS, one_per_turf = TRUE, on_floor = TRUE), + new /datum/stack_recipe("spear rack", /obj/structure/spear_rack, 2, time = 2 SECONDS, one_per_turf = TRUE, on_floor = TRUE), new /datum/stack_recipe("dog bed", /obj/structure/bed/dogbed, 10, time = 1 SECONDS, one_per_turf = TRUE, on_floor = TRUE), + new /datum/stack_recipe("slab bed", /obj/structure/bed/wood, 5, time = 1 SECONDS, one_per_turf = TRUE, on_floor = TRUE), new /datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 2 SECONDS, one_per_turf = TRUE, on_floor = TRUE), - new /datum/stack_recipe("wooden airlock assembly", /obj/structure/door_assembly/door_assembly_wood, 4, time = 50, one_per_turf = TRUE, on_floor = TRUE), + new /datum/stack_recipe("wooden airlock assembly", /obj/structure/door_assembly/door_assembly_wood, 4, time = 5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), new /datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 1.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), + new /datum/stack_recipe("torch sconce", /obj/structure/lightable/torch, 5, time = 3 SECONDS, one_per_turf = TRUE, on_floor = TRUE), )), new /datum/stack_recipe_list("pews", list( new /datum/stack_recipe("pew (middle)", /obj/structure/chair/sofa/pew, 5, one_per_turf = TRUE, on_floor = TRUE), diff --git a/code/game/objects/structures/misc_structures.dm b/code/game/objects/structures/misc_structures.dm index a3d1f42cc9a..ae2ad164de0 100644 --- a/code/game/objects/structures/misc_structures.dm +++ b/code/game/objects/structures/misc_structures.dm @@ -6,13 +6,79 @@ */ /obj/structure/signpost + name = "signpost" icon = 'icons/obj/stationobjs.dmi' icon_state = "signpost" anchored = TRUE - density = TRUE + density = FALSE + new_attack_chain = TRUE + var/writing = "" + +/obj/structure/signpost/Initialize(mapload) + . = ..() + update() + +/obj/structure/signpost/deconstruct() + new /obj/item/stack/sheet/wood (get_turf(src), 2) + qdel(src) + ..() + +/obj/structure/signpost/wrench_act(mob/user, obj/item/I) + . = TRUE + if(!I.use_tool(src, user, 0, volume = I.tool_volume)) + return + deconstruct() + +/obj/structure/signpost/item_interaction(mob/living/user, obj/item/used, list/modifiers) + if(istype(used, /obj/item/pen)) + rename(user) + return ITEM_INTERACT_COMPLETE + return ..() + +/obj/structure/signpost/proc/rename(mob/user) + var/n_name = rename_interactive(user) + if(n_name) + writing = n_name + update() + add_fingerprint(user) + +/obj/structure/signpost/proc/update() + if(writing) + overlays += "[initial(icon_state)]_writing" + desc = "It says: '[writing]'." + else + overlays.Cut() + desc = "It says... nothing." + +/obj/structure/signpost/ruin + name = "Salvation" + writing = "This way home" + +/obj/structure/signpost/wood + name = "wooden sign" + desc = "A small wooden marker." + icon = 'icons/obj/objects.dmi' + icon_state = "signpost_wood" + var/scarf = FALSE + max_integrity = 100 + +/obj/structure/signpost/wood/AltClick(mob/living/user) + if(!scarf) + scarf = TRUE + to_chat(user, "You tie a memorial wreath around the sign.") + else + scarf = FALSE + to_chat(user, "You untie the memorial wreath from the sign.") + update() + +/obj/structure/signpost/wood/update() + ..() + if(scarf) + icon_state = "signpost_wood_scarf" + else + icon_state = "signpost_wood" /obj/structure/ninjatele - name = "Long-Distance Teleportation Console" desc = "A console used to send a Spider Clan operative long distances rapidly." icon = 'icons/obj/ninjaobjects.dmi' diff --git a/code/game/objects/structures/shelves.dm b/code/game/objects/structures/shelves.dm index c0175375fe8..976d5e5e137 100644 --- a/code/game/objects/structures/shelves.dm +++ b/code/game/objects/structures/shelves.dm @@ -155,3 +155,44 @@ GLOBAL_LIST_INIT(shelf_colors, list("basic", "sci", "sup", "serv", "med", "sec", name = "brass weapon rack" icon_state = "gunrack_clockwork" build_stack_type = /obj/item/stack/tile/brass + +/obj/structure/spear_rack + name = "spear rack" + desc = "A rack meant to hold spears, though you could probably balance other things on there if you tried..." + icon = 'icons/obj/objects.dmi' + icon_state = "rack_wood" + layer = TABLE_LAYER + density = TRUE + anchored = TRUE + pass_flags_self = PASSTAKE + max_integrity = 80 + var/build_stack_type = /obj/item/stack/sheet/wood + var/image/shelf_overlay + +/obj/structure/spear_rack/Initialize(mapload) + . = ..() + var/static/list/spear_subtypes = typesof(/obj/item/spear) + shelf_overlay = mutable_appearance('icons/obj/objects.dmi', "rack_wood_over") + shelf_overlay.layer = LOW_ITEM_LAYER + AddComponent(/datum/component/shelver/spear_rack, allowed_types_ = spear_subtypes) + update_appearance(UPDATE_OVERLAYS) + + if(mapload) + SEND_SIGNAL(src, COMSIG_SHELF_ADDED_ON_MAPLOAD) + +/obj/structure/spear_rack/update_overlays() + return list(shelf_overlay) + +/obj/structure/spear_rack/wrench_act(mob/living/user, obj/item/I) + . = TRUE + if(user.a_intent != INTENT_HELP) + return FALSE + if(!I.use_tool(src, user, 2.5 SECONDS, volume = I.tool_volume)) + return + + to_chat(user, "You disassemble [src].") + deconstruct() + +/obj/structure/spear_rack/deconstruct(disassembled) + new build_stack_type(get_turf(src), 2) + return ..() diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 28183daff66..2aa7c0db033 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -128,6 +128,13 @@ return TRUE +/obj/structure/bed/wood + name = "wooden slab" + desc = "It looks even less comfortable than the floor it's built on..." + icon_state = "bed_wood" + buildstacktype = /obj/item/stack/sheet/wood + buildstackamount = 5 + /* * Roller beds */ diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index e3a4db68a13..ae1b2ef290d 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -506,6 +506,16 @@ buildstackamount = 2 buildstacktype = /obj/item/stack/sheet/bamboo +/obj/structure/chair/stool/wood + name = "wooden chair" + desc = "A short wooden stool. Pull up a stump, won't you?" + icon_state = "wooden_stool" + resistance_flags = FLAMMABLE + max_integrity = 50 + buildstackamount = 2 + buildstacktype = /obj/item/stack/sheet/wood + item_chair = /obj/item/chair/stool/wood + /obj/item/chair name = "chair" desc = "Bar brawl essential." @@ -573,6 +583,13 @@ item_state = "stool_bamboo" origin_type = /obj/structure/chair/stool/bamboo +/obj/item/chair/stool/wood + name = "wood stool" + desc = "The barfighter's choice of stool." + icon_state = "wooden_stool_toppled" + item_state = "stool_wood" + origin_type = /obj/structure/chair/stool/wood + /obj/item/chair/AltClick(mob/user) . = ..() if(Adjacent(user)) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index d9a76bfacf8..2aaaef97190 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -909,6 +909,8 @@ anchored = TRUE pass_flags_self = LETPASSTHROW | PASSTAKE max_integrity = 20 + var/deconstruction_item = /obj/item/rack_parts + var/deconstruction_quantity = 1 /obj/structure/rack/examine(mob/user) . = ..() @@ -1001,8 +1003,11 @@ /obj/structure/rack/deconstruct(disassembled = TRUE) if(!(flags & NODECONSTRUCT)) density = FALSE - var/obj/item/rack_parts/newparts = new(loc) - transfer_fingerprints_to(newparts) + if(deconstruction_quantity) + new deconstruction_item(loc, deconstruction_quantity) + else + var/decon_parts = new deconstruction_item(get_turf(src)) + transfer_fingerprints_to(decon_parts) qdel(src) /* diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index cfa2050e02c..16550bdb49c 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -669,7 +669,7 @@ M.matchignite() playsound(user.loc, 'sound/goonstation/misc/matchstick_light.ogg', 50, 1) return - if(M.lit && !M.burnt) + if(M.lit && !M.burnt && M.w_class <= WEIGHT_CLASS_SMALL) user.visible_message("[user] crushes [M] into the bottom of [src], extinguishing it.","You crush [M] into the bottom of [src], extinguishing it.") M.dropped() return diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 14f5d5c6734..4a3a3f88998 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -842,7 +842,7 @@ name = "Bonfire" time = 60 reqs = list(/obj/item/grown/log = 5) - result = list(/obj/structure/bonfire) + result = list(/obj/structure/lightable/bonfire) category = CAT_PRIMAL alert_admins_on_craft = TRUE diff --git a/code/modules/food_and_drinks/drinks/drinks/mugs.dm b/code/modules/food_and_drinks/drinks/drinks/mugs.dm index f75698d5390..a921487a5eb 100644 --- a/code/modules/food_and_drinks/drinks/drinks/mugs.dm +++ b/code/modules/food_and_drinks/drinks/drinks/mugs.dm @@ -170,3 +170,9 @@ desc = "An inscription on the side reads \"Best Captain 2559\"... The last time the station had a worthy captain." icon_state = "mug_cap" preset = TRUE + +/obj/item/reagent_containers/drinks/mug/wood + name = "wooden cup" + desc = "This is a tower-cap cup. All craftsdwarfship is... passable." + icon_state = "mug_wood" + preset = TRUE diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 86b2a2133a8..b552bf735ac 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -119,9 +119,112 @@ name = "wooden spikes" icon_state = "woodspike" -/////////BONFIRES////////// +//MARK: Bonfires and torches -/obj/structure/bonfire +/obj/structure/lightable + name = "lightable fire" + var/burning = FALSE + var/lighter // Who lit the fucking thing + var/fire_stack_strength = 5 + var/dangerous = TRUE // Does this burn things that cross it? + var/heat_factor = 1000 // How much does this heat up the air? + var/light_strength = 6 + light_color = "#ED9200" + density = FALSE + anchored = TRUE + new_attack_chain = TRUE + +/obj/structure/lightable/proc/CheckOxygen() + var/turf/T = get_turf(src) + var/datum/gas_mixture/G = T.get_readonly_air() + if(G.oxygen() > MIN_OXY_IGNITE) + return 1 + return 0 + +/obj/structure/lightable/Initialize(mapload) + . = ..() + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_atom_entered), + ) + AddElement(/datum/element/connect_loc, loc_connections) + +/obj/structure/lightable/proc/on_atom_entered(datum/source, atom/movable/entered) + SIGNAL_HANDLER // COMSIG_ATOM_ENTERED + + if(burning && dangerous) + Burn() + if(ishuman(entered)) + var/mob/living/carbon/human/H = entered + add_attack_logs(src, H, "Burned by a bonfire (Lit by [lighter])", ATKLOG_ALMOSTALL) + +/obj/structure/lightable/proc/StartBurning(mob/user) + if(burning) + return + if(!CheckOxygen()) + to_chat(user, "You can't seem to ignite [src] in this environment!") + return + + icon_state = "[initial(icon_state)]_burning" + burning = TRUE + set_light(light_strength, l_color = light_color) + Burn() + START_PROCESSING(SSobj, src) + +/obj/structure/lightable/bonfire/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) + ..() + StartBurning() + +/obj/structure/lightable/proc/Burn() + var/turf/current_location = get_turf(src) + current_location.hotspot_expose(heat_factor, 10) + for(var/A in current_location) + if(A == src) + continue + if(isobj(A)) + var/obj/O = A + if(dangerous) + O.fire_act(1000, 500) + else + O.temperature_expose(exposed_temperature = 400) + else if(isliving(A)) + var/mob/living/L = A + if(dangerous) + L.adjust_fire_stacks(fire_stack_strength) + L.IgniteMob() + else + L.adjust_bodytemperature(10, 310) + +/obj/structure/lightable/process() + if(!CheckOxygen()) + extinguish() + return + Burn() + +/obj/structure/lightable/extinguish() + if(burning) + icon_state = initial(icon_state) + burning = 0 + set_light(0) + STOP_PROCESSING(SSobj, src) + +/obj/structure/lightable/item_interaction(mob/living/user, obj/item/used, list/modifiers) + . = ..() + if(istype(used, /obj/item/stack/rods) && !can_buckle) + var/obj/item/stack/rods/R = used + R.use(1) + can_buckle = TRUE + buckle_requires_restraints = TRUE + to_chat(user, "You add a rod to [src].") + var/image/U = image(icon='icons/obj/hydroponics/equipment.dmi',icon_state="bonfire_rod",pixel_y=16) + underlays += U + return ITEM_INTERACT_COMPLETE + if(used.get_heat()) + lighter = user.ckey + user.create_log(MISC_LOG, "lit a bonfire", src) + StartBurning(user) + return ITEM_INTERACT_COMPLETE + +/obj/structure/lightable/bonfire name = "bonfire" desc = "For grilling, broiling, charring, smoking, heating, roasting, toasting, simmering, searing, melting, and occasionally burning things." icon = 'icons/obj/hydroponics/equipment.dmi' @@ -129,45 +232,21 @@ density = FALSE anchored = TRUE buckle_lying = FALSE - var/burning = FALSE - var/lighter // Who lit the fucking thing - var/fire_stack_strength = 5 -/obj/structure/bonfire/Initialize(mapload) - . = ..() - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_atom_entered), - ) - AddElement(/datum/element/connect_loc, loc_connections) - -/obj/structure/bonfire/dense +/obj/structure/lightable/bonfire/dense density = TRUE /// haha empty define -/obj/structure/bonfire/lit +/obj/structure/lightable/bonfire/lit -/obj/structure/bonfire/lit/dense +/obj/structure/lightable/bonfire/lit/dense density = TRUE -/obj/structure/bonfire/lit/Initialize(mapload) +/obj/structure/lightable/bonfire/lit/Initialize(mapload) . = ..() StartBurning() -/obj/structure/bonfire/attackby__legacy__attackchain(obj/item/W, mob/user, params) - if(istype(W, /obj/item/stack/rods) && !can_buckle) - var/obj/item/stack/rods/R = W - R.use(1) - can_buckle = TRUE - buckle_requires_restraints = TRUE - to_chat(user, "You add a rod to [src].") - var/image/U = image(icon='icons/obj/hydroponics/equipment.dmi',icon_state="bonfire_rod",pixel_y=16) - underlays += U - if(W.get_heat()) - lighter = user.ckey - user.create_log(MISC_LOG, "lit a bonfire", src) - StartBurning(user) - -/obj/structure/bonfire/attack_hand(mob/user) +/obj/structure/lightable/bonfire/attack_hand(mob/user) if(burning) to_chat(user, "You need to extinguish [src] before removing the logs!") return @@ -179,74 +258,34 @@ return ..() - -/// Check if we're standing in an oxygenless environment -/obj/structure/bonfire/proc/CheckOxygen() - var/turf/T = get_turf(src) - var/datum/gas_mixture/G = T.get_readonly_air() - if(G.oxygen() > MIN_OXY_IGNITE) - return 1 - return 0 - -/obj/structure/bonfire/proc/StartBurning(mob/user) - if(burning) - return - if(!CheckOxygen()) - to_chat(user, "You can't seem to ignite [src] in this environment!") - return - - icon_state = "bonfire_on_fire" - burning = TRUE - set_light(6, l_color = "#ED9200") - Burn() - START_PROCESSING(SSobj, src) - -/obj/structure/bonfire/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) - ..() - StartBurning() - -/obj/structure/bonfire/proc/on_atom_entered(datum/source, atom/movable/entered) - SIGNAL_HANDLER // COMSIG_ATOM_ENTERED - - if(burning) - Burn() - if(ishuman(entered)) - var/mob/living/carbon/human/H = entered - add_attack_logs(src, H, "Burned by a bonfire (Lit by [lighter])", ATKLOG_ALMOSTALL) - -/obj/structure/bonfire/proc/Burn() - var/turf/current_location = get_turf(src) - current_location.hotspot_expose(1000, 10) - for(var/A in current_location) - if(A == src) - continue - if(isobj(A)) - var/obj/O = A - O.fire_act(1000, 500) - else if(isliving(A)) - var/mob/living/L = A - L.adjust_fire_stacks(fire_stack_strength) - L.IgniteMob() - -/obj/structure/bonfire/process() - if(!CheckOxygen()) - extinguish() - return - Burn() - -/obj/structure/bonfire/extinguish() - if(burning) - icon_state = "bonfire" - burning = 0 - set_light(0) - STOP_PROCESSING(SSobj, src) - -/obj/structure/bonfire/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) +/obj/structure/lightable/bonfire/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) if(..()) M.pixel_y += 13 -/obj/structure/bonfire/unbuckle_mob(mob/living/buckled_mob, force = FALSE) +/obj/structure/lightable/bonfire/unbuckle_mob(mob/living/buckled_mob, force = FALSE) if(..()) buckled_mob.pixel_y -= 13 +/obj/structure/lightable/torch + icon = 'icons/obj/objects.dmi' + icon_state = "torch" + name = "torch sconce" + desc = "A standing torch sconce, made from towercap wood." + dangerous = FALSE + light_strength = 4 + light_color = "#f5df15" + max_integrity = 100 + +/obj/structure/lightable/torch/wrench_act(mob/user, obj/item/I) + . = TRUE + if(!I.use_tool(src, user, 0, volume = I.tool_volume)) + return + deconstruct() + +/obj/structure/lightable/torch/deconstruct() + density = FALSE + new /obj/item/stack/sheet/wood (get_turf(src), 5) + qdel(src) + ..() + #undef MIN_OXY_IGNITE diff --git a/icons/mob/inhands/chairs_lefthand.dmi b/icons/mob/inhands/chairs_lefthand.dmi index 9dec4b51bd4..2e6e9a2798e 100644 Binary files a/icons/mob/inhands/chairs_lefthand.dmi and b/icons/mob/inhands/chairs_lefthand.dmi differ diff --git a/icons/mob/inhands/chairs_righthand.dmi b/icons/mob/inhands/chairs_righthand.dmi index 3e143580991..01efedb00b7 100644 Binary files a/icons/mob/inhands/chairs_righthand.dmi and b/icons/mob/inhands/chairs_righthand.dmi differ diff --git a/icons/obj/chairs.dmi b/icons/obj/chairs.dmi index 8abc0e30135..c438eb27c85 100644 Binary files a/icons/obj/chairs.dmi and b/icons/obj/chairs.dmi differ diff --git a/icons/obj/hydroponics/equipment.dmi b/icons/obj/hydroponics/equipment.dmi index e7b27879af4..c86b6154912 100644 Binary files a/icons/obj/hydroponics/equipment.dmi and b/icons/obj/hydroponics/equipment.dmi differ diff --git a/icons/obj/mugs.dmi b/icons/obj/mugs.dmi index 26517f45ed3..66a03e2f464 100644 Binary files a/icons/obj/mugs.dmi and b/icons/obj/mugs.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index 2d8b464f907..5a3c7b1c9c5 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/icons/obj/stacks/organic.dmi b/icons/obj/stacks/organic.dmi index 1ab5d7e9d22..745da24390c 100644 Binary files a/icons/obj/stacks/organic.dmi and b/icons/obj/stacks/organic.dmi differ diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi index 4495ee0ae12..9cbd5f4450e 100644 Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ diff --git a/tools/UpdatePaths/Scripts/28528_bonfire.txt b/tools/UpdatePaths/Scripts/28528_bonfire.txt new file mode 100644 index 00000000000..94037a45f4d --- /dev/null +++ b/tools/UpdatePaths/Scripts/28528_bonfire.txt @@ -0,0 +1 @@ +/obj/structure/bonfire : /obj/structure/lightable/bonfire{@OLD}