diff --git a/code/game/atoms.dm b/code/game/atoms.dm index db82ee191b6..f38a741b114 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -610,6 +610,9 @@ var/list/blood_splatter_icons = list() /atom/proc/narsie_act() return +/atom/proc/ratvar_act() + return + /atom/proc/atom_say(message) if(!message) return diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 052df8d9623..52cf7e10c69 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -1,12 +1,13 @@ -/* Diffrent misc types of sheets +/* Different misc types of sheets * Contains: - * Metal - * Plasteel - * Wood - * Cloth - * Plastic - * Cardboard - * Runed Metal (cult) + * Metal + * Plasteel + * Wood + * Cloth + * Plastic + * Cardboard + * Runed Metal (cult) + * Brass (clockwork cult) */ /* @@ -107,10 +108,13 @@ var/global/list/datum/stack_recipe/metal_recipes = list( /obj/item/stack/sheet/metal/fifty amount = 50 +/obj/item/stack/sheet/metal/ratvar_act() + new /obj/item/stack/tile/brass(loc, amount) + qdel(src) + /obj/item/stack/sheet/metal/narsie_act() - if(prob(20)) - new /obj/item/stack/sheet/runed_metal(loc, amount) - qdel(src) + new /obj/item/stack/sheet/runed_metal(loc, amount) + qdel(src) /obj/item/stack/sheet/metal/New(var/loc, var/amount=null) recipes = metal_recipes @@ -273,12 +277,15 @@ var/global/list/datum/stack_recipe/cult = list ( \ /obj/item/stack/sheet/runed_metal name = "runed metal" desc = "Sheets of cold metal with shifting inscriptions writ upon them." - singular_name = "runed metal" + singular_name = "runed metal sheet" icon_state = "sheet-runed" - icon = 'icons/obj/items.dmi' sheettype = "runed" merge_type = /obj/item/stack/sheet/runed_metal +/obj/item/stack/sheet/runed_metal/ratvar_act() + new /obj/item/stack/tile/brass(loc, amount) + qdel(src) + /obj/item/stack/sheet/runed_metal/attack_self(mob/living/user) if(!iscultist(user)) to_chat(user, "Only one with forbidden knowledge could hope to work this metal...") @@ -306,6 +313,39 @@ var/global/list/datum/stack_recipe/cult = list ( \ recipes = cult return ..() +/* + * Brass + */ +var/global/list/datum/stack_recipe/brass_recipes = list ( \ + new/datum/stack_recipe("brass table frame", /obj/structure/table_frame/brass, 1, time = 5, one_per_turf = TRUE, on_floor = TRUE), \ + ) + +/obj/item/stack/tile/brass + name = "brass" + desc = "Sheets made out of brass." + singular_name = "brass sheet" + icon_state = "sheet-brass" + icon = 'icons/obj/items.dmi' + burn_state = FIRE_PROOF + throwforce = 10 + max_amount = 50 + throw_speed = 1 + throw_range = 3 + turf_type = /turf/simulated/floor/clockwork + +/obj/item/stack/tile/brass/narsie_act() + new /obj/item/stack/sheet/runed_metal(loc, amount) + qdel(src) + +/obj/item/stack/tile/brass/New(loc, amount=null) + recipes = brass_recipes + . = ..() + pixel_x = 0 + pixel_y = 0 + +/obj/item/stack/tile/brass/fifty + amount = 50 + /* * Bones */ diff --git a/code/game/objects/structures/table_frames.dm b/code/game/objects/structures/table_frames.dm index e370fb482b0..6f5a70af404 100644 --- a/code/game/objects/structures/table_frames.dm +++ b/code/game/objects/structures/table_frames.dm @@ -86,6 +86,10 @@ new /obj/structure/table_frame/wood(loc) qdel(src) +/obj/structure/table_frame/ratvar_act() + new /obj/structure/table_frame/brass(loc) + qdel(src) + /* * Wooden Frames */ @@ -118,3 +122,30 @@ make_new_table(/obj/structure/table/wood/poker) else return ..() + +/obj/structure/table_frame/brass + name = "brass table frame" + desc = "Four pieces of brass arranged in a square. It's slightly warm to the touch." + icon_state = "brass_frame" + burn_state = FIRE_PROOF + framestack = /obj/item/stack/tile/brass + framestackamount = 1 + +/obj/structure/table_frame/brass/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/stack/tile/brass)) + var/obj/item/stack/tile/brass/W = I + if(W.get_amount() < 1) + to_chat(user, "You need one brass sheet to do this!") + return + to_chat(user, "You start adding [W] to [src]...") + if(do_after(user, 20, target = src) && W.use(1)) + make_new_table(/obj/structure/table/reinforced/brass) + else + return ..() + +/obj/structure/table_frame/brass/narsie_act() + ..() + if(src) //do we still exist? + var/previouscolor = color + color = "#960000" + animate(src, color = previouscolor, time = 8) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 6cb6ef50d0f..5b6fec84c73 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -78,6 +78,10 @@ new /obj/structure/table/wood(loc) qdel(src) +/obj/structure/table/ratvar_act() + new /obj/structure/table/reinforced/brass(loc) + qdel(src) + /obj/structure/table/ex_act(severity) switch(severity) if(1) @@ -477,8 +481,9 @@ burn_state = FLAMMABLE burntime = 20 -/obj/structure/table/wood/narsie_act() - return +/obj/structure/table/wood/narsie_act(total_override = TRUE) + if(!total_override) + ..() /obj/structure/table/wood/poker //No specialties, Just a mapping object. name = "gambling table" @@ -488,8 +493,7 @@ buildstack = /obj/item/stack/tile/carpet /obj/structure/table/wood/poker/narsie_act() - new /obj/structure/table/wood(loc) - qdel(src) + ..(FALSE) /* * Fancy Tables @@ -565,6 +569,29 @@ else . = ..() +/obj/structure/table/reinforced/brass + name = "brass table" + desc = "A solid, slightly beveled brass table." + icon = 'icons/obj/smooth_structures/brass_table.dmi' + icon_state = "brass_table" + burn_state = FIRE_PROOF + frame = /obj/structure/table_frame/brass + framestack = /obj/item/stack/tile/brass + buildstack = /obj/item/stack/tile/brass + framestackamount = 1 + buildstackamount = 1 + canSmoothWith = list(/obj/structure/table/reinforced/brass) + +/obj/structure/table/reinforced/brass/narsie_act() + take_damage(rand(15, 45), BRUTE) + if(src) //do we still exist? + var/previouscolor = color + color = "#960000" + animate(src, color = previouscolor, time = 8) + +/obj/structure/table/reinforced/brass/ratvar_act() + obj_integrity = max_integrity + /* * Racks */ diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 0476df52ceb..dbc41924251 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -223,5 +223,10 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," if(prob(20)) ChangeTurf(/turf/simulated/floor/engine/cult) +/turf/simulated/floor/ratvar_act(force, ignore_mobs) + . = ..() + if(.) + ChangeTurf(/turf/simulated/floor/clockwork) + /turf/simulated/floor/can_have_cabling() return !burnt && !broken diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index f46d81584d7..ddc95afaccd 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -67,3 +67,32 @@ /turf/simulated/floor/noslip/MakeSlippery() return + +//Clockwork floor: Slowly heals toxin damage on nearby servants. +/turf/simulated/floor/clockwork + name = "clockwork floor" + desc = "Tightly-pressed brass tiles. They emit minute vibration." + icon_state = "clockwork_floor" + +/turf/simulated/floor/clockwork/attackby(obj/item/I, mob/living/user, params) + if(iscrowbar(I)) + user.visible_message("[user] begins slowly prying up [src]...", "You begin painstakingly prying up [src]...") + playsound(src, I.usesound, 20, 1) + if(!do_after(user, 70*I.toolspeed, target = src)) + return 0 + user.visible_message("[user] pries up [src]!", "You pry up [src]!") + playsound(src, I.usesound, 80, 1) + make_plating() + return 1 + return ..() + +/turf/simulated/floor/clockwork/make_plating() + new /obj/item/stack/tile/brass(src) + return ..() + +/turf/simulated/floor/clockwork/narsie_act() + ..() + if(istype(src, /turf/simulated/floor/clockwork)) //if we haven't changed type + var/previouscolor = color + color = "#960000" + animate(src, color = previouscolor, time = 8) diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 53a043bd5e3..18ff4d697fa 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -146,6 +146,13 @@ /turf/simulated/floor/engine/cult/narsie_act() return +/turf/simulated/floor/engine/cult/ratvar_act() + . = ..() + if(istype(src, /turf/simulated/floor/engine/cult)) //if we haven't changed type + var/previouscolor = color + color = "#FAE48C" + animate(src, color = previouscolor, time = 8) + /turf/simulated/floor/engine/n20/New() ..() var/datum/gas_mixture/adding = new diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 83de35ea82c..2f05b738385 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -415,6 +415,15 @@ /turf/proc/can_lay_cable() return can_have_cabling() & !intact +/turf/ratvar_act(force, ignore_mobs, probability = 40) + . = (prob(probability) || force) + for(var/I in src) + var/atom/A = I + if(ignore_mobs && ismob(A)) + continue + if(ismob(A) || .) + A.ratvar_act() + /turf/proc/add_blueprints(atom/movable/AM) var/image/I = new I.appearance = AM.appearance diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index d194094e289..abf090ef440 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/smooth_structures/brass_table.dmi b/icons/obj/smooth_structures/brass_table.dmi new file mode 100644 index 00000000000..f3cc8bb9ee5 Binary files /dev/null and b/icons/obj/smooth_structures/brass_table.dmi differ diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index 99744a46b2d..ed29bb274fd 100644 Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 62ba9c4e66c..d1a3cfbf675 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ