diff --git a/code/LINDA/LINDA_fire.dm b/code/LINDA/LINDA_fire.dm index 837c3795b03..f82cd83d3a6 100644 --- a/code/LINDA/LINDA_fire.dm +++ b/code/LINDA/LINDA_fire.dm @@ -118,7 +118,7 @@ perform_exposure() - if(location.wet) location.wet = 0 + if(location.wet) location.wet = TURF_DRY if(bypassing) icon_state = "3" diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index ba730797ce0..0dca37a8a35 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -174,3 +174,9 @@ #define MANIFEST_ERROR_NAME 1 #define MANIFEST_ERROR_COUNT 2 #define MANIFEST_ERROR_ITEM 4 + +//Turf wet states +#define TURF_DRY 0 +#define TURF_WET_WATER 1 +#define TURF_WET_LUBE 2 +#define TURF_WET_ICE 3 \ No newline at end of file diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index a0aaadd6e51..1bd2c794ee8 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1233,6 +1233,12 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine cost = 10 containername = "replacement lights crate" +/datum/supply_packs/misc/noslipfloor + name = "High-traction Floor Tiles" + contains = list(/obj/item/stack/tile/noslip/loaded) + cost = 20 + containername = "high-traction floor tiles" + ///////////// Costumes /datum/supply_packs/misc/costume diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 17ec358a4a8..14fcee521f8 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -39,6 +39,7 @@ /obj/item/toy/toy_xeno = 2, /obj/random/figure = 16, /obj/random/plushie = 7, + /obj/item/stack/tile/fakespace/loaded = 2, ) /obj/machinery/computer/arcade/power_change() diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 207a046446e..4bbdcb4fca2 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -70,4 +70,26 @@ throw_range = 7 flags = CONDUCT turf_type = /turf/simulated/floor/plasteel - mineralType = "metal" \ No newline at end of file + mineralType = "metal" + +/obj/item/stack/tile/fakespace + name = "astral carpet" + singular_name = "astral carpet" + desc = "A piece of carpet with a convincing star pattern." + icon_state = "tile_space" + turf_type = /turf/simulated/floor/fakespace + +/obj/item/stack/tile/fakespace/loaded + amount = 30 + +//High-traction +/obj/item/stack/tile/noslip + name = "high-traction floor tile" + singular_name = "high-traction floor tile" + desc = "A high-traction floor tile. It feels rubbery in your hand." + icon_state = "tile_noslip" + turf_type = /turf/simulated/floor/noslip + origin_tech = "materials=3" + +/obj/item/stack/tile/noslip/loaded + amount = 20 \ No newline at end of file diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 194a69608b4..b92b9c593ba 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -116,6 +116,7 @@ /obj/item/clothing/under/syndicate/tacticool, /obj/item/weapon/storage/box/fakesyndiesuit, /obj/item/toy/crossbow/tommygun, + /obj/item/stack/tile/fakespace/loaded, ) if(!ispath(gift_type,/obj/item)) return diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 9d8ed7ee3dc..d50ca6b08d0 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -80,7 +80,7 @@ handle_rotation() if(istype(src.loc, /turf/simulated)) var/turf/simulated/T = src.loc - if(T.wet == 2) //Lube! Fall off! + if(T.wet == TURF_WET_LUBE) //Lube! Fall off! playsound(src, 'sound/misc/slip.ogg', 50, 1, -3) buckled_mob.Stun(7) buckled_mob.Weaken(7) diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index ec4585ed46f..44650579eaa 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -17,24 +17,32 @@ /turf/simulated/proc/burn_tile() -/turf/simulated/proc/MakeSlippery(var/wet_setting = 1) // 1 = Water, 2 = Lube +/turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER) // 1 = Water, 2 = Lube, 3 = Ice if(wet >= wet_setting) return wet = wet_setting - if(wet_setting == 1) + if(wet_setting != TURF_DRY) if(wet_overlay) overlays -= wet_overlay wet_overlay = null - wet_overlay = image('icons/effects/water.dmi', src, "wet_floor_static") + var/turf/simulated/floor/F = src + if(istype(F)) + wet_overlay = image('icons/effects/water.dmi', src, "wet_floor_static") + else + wet_overlay = image('icons/effects/water.dmi', src, "wet_static") overlays += wet_overlay spawn(rand(790, 820)) // Purely so for visual effect if(!istype(src, /turf/simulated)) //Because turfs don't get deleted, they change, adapt, transform, evolve and deform. they are one and they are all. return - if(wet > wet_setting) return - wet = 0 - if(wet_overlay) - overlays -= wet_overlay + MakeDry(wet_setting) + +/turf/simulated/proc/MakeDry(wet_setting = TURF_WET_WATER) + if(wet > wet_setting) + return + wet = TURF_DRY + if(wet_overlay) + overlays -= wet_overlay /turf/simulated/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir,var/bloodcolor="#A10808") var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src @@ -94,7 +102,7 @@ if (noslip) return // no slipping while sitting in a chair, plz switch (src.wet) - if(1) + if(TURF_WET_WATER) if ((M.m_intent == "run") && !(istype(M:shoes, /obj/item/clothing/shoes) && M.shoes.flags&NOSLIP)) M.stop_pulling() step(M, M.dir) @@ -107,7 +115,7 @@ return - if(2) //lube //can cause infinite loops - needs work + if(TURF_WET_LUBE) //lube //can cause infinite loops - needs work if(!M.buckled) M.stop_pulling() step(M, M.dir) @@ -120,7 +128,7 @@ playsound(src, 'sound/misc/slip.ogg', 50, 1, -3) M.Weaken(7) - if(3) // Ice + if(TURF_WET_ICE) // Ice if ((M.m_intent == "run") && !(istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP) && prob(30)) M.stop_pulling() step(M, M.dir) diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index 1523cf91f63..c1a74d07973 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -82,4 +82,14 @@ /turf/simulated/floor/carpet/burn_tile() burnt = 1 - update_icon() \ No newline at end of file + update_icon() + +/turf/simulated/floor/fakespace + icon = 'icons/turf/space.dmi' + icon_state = "0" + floor_tile = /obj/item/stack/tile/fakespace + broken_states = list("damaged") + +/turf/simulated/floor/fakespace/New() + ..() + icon_state = "[rand(0,25)]" \ No newline at end of file diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index efa62bc17cb..e48770a177b 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -54,4 +54,15 @@ /turf/simulated/floor/beach/water/New() ..() - overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1) \ No newline at end of file + overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1) + +/turf/simulated/floor/noslip + name = "high-traction floor" + icon_state = "noslip" + floor_tile = /obj/item/stack/tile/noslip + broken_states = list("noslip-damaged1","noslip-damaged2","noslip-damaged3") + burnt_states = list("noslip-scorched1","noslip-scorched2") + slowdown = -0.3 + +/turf/simulated/floor/noslip/MakeSlippery() + return \ No newline at end of file diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index e8a2ddf2aaa..37b40525275 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -4,6 +4,7 @@ luminosity = 1 var/intact = 1 + var/slowdown = 0 //negative for faster, positive for slower //Properties for open tiles (/floor) var/oxygen = 0 diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 46db0d5e139..154526cee3f 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -57,6 +57,16 @@ put_on_delay = 50 species_restricted = null +/obj/item/clothing/shoes/galoshes/dry + name = "absorbent galoshes" + desc = "A pair of purple rubber boots, designed to prevent slipping on wet surfaces while also drying them." + icon_state = "galoshes_dry" + +/obj/item/clothing/shoes/galoshes/dry/step_action() + var/turf/simulated/t_loc = get_turf(src) + if(istype(t_loc) && t_loc.wet) + t_loc.MakeDry(TURF_WET_WATER) + /obj/item/clothing/shoes/clown_shoes desc = "The prankster's standard-issue clowning shoes. Damn they're huge!" name = "clown shoes" diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index 96680de98b8..265a8c74202 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -925,6 +925,50 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 if(!uses) qdel(src) +/obj/item/stack/tile/bluespace + name = "bluespace floor tile" + singular_name = "floor tile" + desc = "Through a series of micro-teleports these tiles let people move at incredible speeds" + icon_state = "tile-bluespace" + w_class = 3 + force = 6 + materials = list(MAT_METAL=500) + throwforce = 10 + throw_speed = 3 + throw_range = 7 + flags = CONDUCT + max_amount = 60 + turf_type = /turf/simulated/floor/bluespace + + +/turf/simulated/floor/bluespace + slowdown = -1 + icon_state = "bluespace" + desc = "Through a series of micro-teleports these tiles let people move at incredible speeds" + floor_tile = /obj/item/stack/tile/bluespace + + +/obj/item/stack/tile/sepia + name = "sepia floor tile" + singular_name = "floor tile" + desc = "Time seems to flow very slowly around these tiles" + icon_state = "tile-sepia" + w_class = 3 + force = 6 + materials = list(MAT_METAL=500) + throwforce = 10 + throw_speed = 3 + throw_range = 7 + flags = CONDUCT + max_amount = 60 + turf_type = /turf/simulated/floor/sepia + + +/turf/simulated/floor/sepia + slowdown = 2 + icon_state = "sepia" + desc = "Time seems to flow very slowly around these tiles" + floor_tile = /obj/item/stack/tile/sepia /obj/effect/goleRUNe anchored = 1 diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 214c6dfa3a9..22a41279401 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -236,7 +236,9 @@ src << "\blue You're pinned to a wall by [mob.pinned[1]]!" return 0 + var/turf/T = mob.loc move_delay = world.time//set move delay + move_delay += T.slowdown mob.last_movement = world.time mob.last_move_intent = world.time + 10 switch(mob.m_intent) @@ -265,7 +267,6 @@ var/mob/M = L[1] if(M) if ((get_dist(mob, M) <= 1 || M.loc == mob.loc)) - var/turf/T = mob.loc . = ..() if (isturf(M.loc)) var/diag = get_dir(mob, M) diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index 8d6294b4156..432461bec93 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -1016,12 +1016,8 @@ datum/reagent/haloperidol/on_mob_life(var/mob/living/M as mob) if (!istype(T)) return src = null if(volume >= 1) - if(T.wet >= 2) //Clears lube! Fight back against the slipping, and WIN! - T.wet = 0 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - return + if(istype(T) && T.wet) + T.MakeDry(TURF_WET_LUBE) /datum/reagent/degreaser/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm index 99f6e60a5e6..7b2cc0615b0 100644 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm @@ -196,4 +196,11 @@ result = "lsd" required_reagents = list("diethylamine" = 1, "fungus" = 1) result_amount = 3 - mix_message = "The mixture turns a rather unassuming color and settles." \ No newline at end of file + mix_message = "The mixture turns a rather unassuming color and settles." + + drying_agent + name = "Drying agent" + id = "drying_agent" + result = "drying_agent" + required_reagents = list("plasma" = 2, "ethanol" = 1, "sodium" = 1) + result_amount = 3 \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm index e4726c4779c..4257b1c9be6 100644 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm @@ -450,11 +450,25 @@ Z.loc = get_turf(holder.my_atom) Z.announce_to_ghosts() //Bluespace + slimefloor2 + name = "Bluespace Floor" + id = "m_floor2" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/bluespace + required_other = 1 + on_reaction(datum/reagents/holder, created_volume) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/stack/tile/bluespace/P = new /obj/item/stack/tile/bluespace + P.amount = 25 + P.loc = get_turf(holder.my_atom) + slimecrystal name = "Slime Crystal" id = "m_crystal" result = null - required_reagents = list("blood" = 1) + required_reagents = list("plasma" = 1) result_amount = 1 required_container = /obj/item/slime_extract/bluespace required_other = 1 @@ -489,20 +503,23 @@ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") var/obj/item/device/camera/P = new /obj/item/device/camera P.loc = get_turf(holder.my_atom) + var/obj/item/device/camera_film/Z = new /obj/item/device/camera_film + Z.loc = get_turf(holder.my_atom) - - slimefilm - name = "Slime Film" - id = "m_film" + slimefloor + name = "Sepia Floor" + id = "m_floor" result = null required_reagents = list("blood" = 1) result_amount = 1 required_container = /obj/item/slime_extract/sepia required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/device/camera_film/P = new /obj/item/device/camera_film + on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/stack/tile/sepia/P = new /obj/item/stack/tile/sepia + P.amount = 25 P.loc = get_turf(holder.my_atom) + //Pyrite slimepaint name = "Slime Paint" diff --git a/code/modules/reagents/oldchem/reagents/reagents_food.dm b/code/modules/reagents/oldchem/reagents/reagents_food.dm index 42c15938f2c..da3244cbda2 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_food.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_food.dm @@ -281,21 +281,7 @@ if (!istype(T)) return src = null if(volume >= 3) - if(T.wet >= 1) return - T.wet = 1 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor") - T.overlays += T.wet_overlay - - spawn(800) - if (!istype(T)) return - if(T.wet >= 2) return - T.wet = 0 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null + T.MakeSlippery() var/hotspot = (locate(/obj/effect/hotspot) in T) if(hotspot) var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) diff --git a/code/modules/reagents/oldchem/reagents/reagents_water.dm b/code/modules/reagents/oldchem/reagents/reagents_water.dm index 1db18dd1d41..1db08c92c7d 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_water.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_water.dm @@ -31,21 +31,7 @@ if (!istype(T)) return src = null if(volume >= 3) - if(T.wet >= 1) return - T.wet = 1 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor") - T.overlays += T.wet_overlay - - spawn(800) - if (!istype(T)) return - if(T.wet >= 2) return - T.wet = 0 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null + T.MakeSlippery() for(var/mob/living/carbon/slime/M in T) M.apply_water() @@ -91,15 +77,7 @@ if (!istype(T)) return src = null if(volume >= 1) - if(T.wet >= 2) return - T.wet = 2 - spawn(800) - if (!istype(T)) return - T.wet = 0 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - return + T.MakeSlippery(TURF_WET_LUBE) /datum/reagent/space_cleaner @@ -350,6 +328,23 @@ reagent_state = LIQUID color = "#FFFFD6" // very very light yellow +/datum/reagent/drying_agent + name = "Drying agent" + id = "drying_agent" + description = "Can be used to dry things." + reagent_state = LIQUID + color = "#A70FFF" + +/datum/reagent/drying_agent/reaction_turf(turf/simulated/T, reac_volume) + if(istype(T) && T.wet) + T.MakeDry(TURF_WET_WATER) + +/datum/reagent/drying_agent/reaction_obj(obj/O, reac_volume) + if(istype(O, /obj/item/clothing/shoes/galoshes)) + var/t_loc = get_turf(O) + qdel(O) + new /obj/item/clothing/shoes/galoshes/dry(t_loc) + /* /datum/reagent/vaccine //data must contain virus type diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm index eca8911f6ad..ef21731868d 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -556,19 +556,8 @@ if(istype(mob.loc,/turf/simulated)) var/turf/simulated/T = mob.loc - if(T.wet < 1) - T.wet = 1 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor") - T.overlays += T.wet_overlay - spawn(800) - if (istype(T) && T.wet < 2) - T.wet = 0 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null + if(T.wet < TURF_WET_WATER) + T.MakeSlippery() diff --git a/icons/effects/water.dmi b/icons/effects/water.dmi index 10e698a34ca..1bccfad7773 100644 Binary files a/icons/effects/water.dmi and b/icons/effects/water.dmi differ diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index 20dc03cbabb..b9cccb43949 100644 Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index 36ec05a86f9..cab7cc16e7c 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 6ef95efd7e8..a5af5cd486d 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index b3ce39511b5..18dd60eb768 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ