diff --git a/_maps/map_files/generic/lavaland.dmm b/_maps/map_files/generic/lavaland.dmm
index 5d66bbc616b..c864950a0c5 100644
--- a/_maps/map_files/generic/lavaland.dmm
+++ b/_maps/map_files/generic/lavaland.dmm
@@ -33916,7 +33916,7 @@ aa
aa
aa
aj
-en
+aj
aj
ab
ab
@@ -34173,7 +34173,7 @@ aa
aa
aa
aj
-aj
+en
aj
aj
ab
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index 8aa32271e7d..daac9933bd8 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -1,11 +1,11 @@
/obj/structure/flora
burn_state = FLAMMABLE
burntime = 30
+ anchored = 1
//trees
/obj/structure/flora/tree
name = "tree"
- anchored = 1
density = 1
pixel_x = -16
layer = FLY_LAYER
@@ -17,14 +17,14 @@
if(W.sharpness && W.force > 0)
if(W.hitsound)
playsound(get_turf(src), W.hitsound, 100, 0, 0)
- user.visible_message("[user] begins to cut down [src] with [W].","You begin to cut down [src] with [W].", "You hear the sound of cutting a tree.")
+ user.visible_message("[user] begins to cut down [src] with [W].","You begin to cut down [src] with [W].", "You hear the sound of sawing.")
if(do_after(user, 1000/W.force, target = user)) //5 seconds with 20 force, 8 seconds with a hatchet, 20 seconds with a shard.
if(cut)
return
- user.visible_message("[user] falls [src] with the [W].","You fall [src] with the [W].", "You hear the sound of a tree falling.")
+ 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)
icon_state = "tree_stump"
- name = "stump"
+ name += " stump"
cut = TRUE
for(var/i=1 to log_amount)
new /obj/item/weapon/grown/log/tree(get_turf(src))
@@ -71,7 +71,6 @@
/obj/structure/flora/grass
name = "grass"
icon = 'icons/obj/flora/snowflora.dmi'
- anchored = 1
gender = PLURAL //"this is grass" not "this is a grass"
/obj/structure/flora/grass/brown
@@ -114,7 +113,6 @@
name = "bush"
icon = 'icons/obj/flora/ausflora.dmi'
icon_state = "firstbush_1"
- anchored = 1
/obj/structure/flora/ausbushes/New()
if(icon_state == "firstbush_1")
@@ -279,7 +277,6 @@
icon_state = "basalt"
desc = "A volcanic rock"
icon = 'icons/obj/flora/rocks.dmi'
- anchored = 1
burn_state = FIRE_PROOF
density = 1
diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm
index e316bc66234..2839c6bec08 100644
--- a/code/game/objects/structures/fluff.dm
+++ b/code/game/objects/structures/fluff.dm
@@ -8,12 +8,10 @@
anchored = TRUE
density = FALSE
opacity = 0
- var/deconstructible = 1
+ var/deconstructible = TRUE
/obj/structure/fluff/attackby(obj/item/I, mob/living/user, params)
- if(istype(I, /obj/item/weapon/wrench))
- if(!deconstructible)
- return
+ if(istype(I, /obj/item/weapon/wrench) && deconstructible)
user.visible_message("[user] starts disassembling [src]...", "You start disassembling [src]...")
playsound(user, 'sound/items/Ratchet.ogg', 50, 1)
if(!do_after(user, 50, target = src))
@@ -64,7 +62,9 @@
desc = "A towering basalt sculpture of a proud and regal drake. Its eyes are six glowing gemstones."
icon = 'icons/effects/64x64.dmi'
icon_state = "drake_statue"
+ pixel_x = -16
density = TRUE
+ deconstructible = FALSE
/obj/structure/fluff/drake_statue/falling //A variety of statue in disrepair; parts are broken off and a gemstone is missing
desc = "A towering basalt sculpture of a drake. Cracks run down its surface and parts of it have fallen off."
diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm
index 3a540a57857..d72e106b393 100644
--- a/code/game/turfs/simulated/floor/plating.dm
+++ b/code/game/turfs/simulated/floor/plating.dm
@@ -214,7 +214,6 @@
icon_state = "lava"
baseturf = /turf/open/floor/plating/lava //lava all the way down
slowdown = 2
- var/processing = 0
luminosity = 1
/turf/open/floor/plating/lava/airless
@@ -222,13 +221,10 @@
/turf/open/floor/plating/lava/Entered(atom/movable/AM)
burn_stuff()
- if(!processing)
- processing = 1
- START_PROCESSING(SSobj, src)
+ START_PROCESSING(SSobj, src)
/turf/open/floor/plating/lava/process()
if(!burn_stuff())
- processing = 0
STOP_PROCESSING(SSobj, src)
/turf/open/floor/plating/lava/make_plating()
@@ -245,8 +241,10 @@
/turf/open/floor/plating/lava/proc/burn_stuff()
. = 0
for(var/thing in contents)
- if(istype(thing, /obj))
+ if(isobj(thing))
var/obj/O = thing
+ if(O.burn_state == LAVA_PROOF || O.throwing)
+ continue
if(istype(O, /obj/effect/decal/cleanable/ash)) //So we don't get stuck burning the same ash pile forever
qdel(O)
continue
@@ -257,7 +255,7 @@
O.fire_act()
- else if (istype(thing, /mob/living))
+ else if (isliving(thing))
. = 1
var/mob/living/L = thing
if("lava" in L.weather_immunities)
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 6dcd7a11f7e..1ec44083591 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -575,41 +575,56 @@
var/drop_y = 1
var/drop_z = 1
-
/turf/open/chasm/Entered(atom/movable/AM)
- if(istype(AM, /obj/singularity) || istype(AM, /obj/item/projectile))
- return
+ START_PROCESSING(SSobj, src)
+ drop_stuff()
+
+/turf/open/chasm/process()
+ if(!drop_stuff())
+ STOP_PROCESSING(SSobj, src)
+
+/turf/open/chasm/proc/drop_stuff()
+ . = 0
+ for(var/thing in contents)
+ if(droppable(thing))
+ . = 1
+ drop(thing)
+
+/turf/open/chasm/proc/droppable(atom/movable/AM)
+ if(!isliving(AM) && !isobj(AM))
+ return 0
+ if(istype(AM, /obj/singularity) || istype(AM, /obj/item/projectile) || AM.throwing)
+ return 0
if(istype(AM, /obj/effect/portal))
- // Portals aren't affected by gravity. Probably.
- return
- // Flies right over the chasm
- if(istype(AM, /mob/living/simple_animal))
- // apparently only simple_animals can fly??
+ //Portals aren't affected by gravity. Probably.
+ return 0
+ //Flies right over the chasm
+ if(isanimal(AM))
var/mob/living/simple_animal/SA = AM
if(SA.flying)
- return
- if(istype(AM, /mob/living/carbon/human))
+ return 0
+ if(ishuman(AM))
var/mob/living/carbon/human/H = AM
if(istype(H.belt, /obj/item/device/wormhole_jaunter))
var/obj/item/device/wormhole_jaunter/J = H.belt
- // To freak out any bystanders
+ //To freak out any bystanders
visible_message("[H] falls into [src]!")
J.chasm_react(H)
- return
- if(H.dna.species && (FLYING in H.dna.species.specflags))
- return
- drop(AM)
-
+ return 0
+ if(H.dna && H.dna.species && (FLYING in H.dna.species.specflags))
+ return 0
+ return 1
/turf/open/chasm/proc/drop(atom/movable/AM)
- /*visible_message("[AM] falls into [src]!")
- qdel(AM)*/
- AM.forceMove(locate(drop_x, drop_y, drop_z))
- AM.visible_message("[AM] falls from above!", "GAH! Ah... where are you?")
- if(istype(AM, /mob/living))
- var/mob/living/L = AM
- L.Weaken(5)
- L.adjustBruteLoss(30)
+ var/turf/T = locate(drop_x, drop_y, drop_z)
+ if(T)
+ AM.visible_message("[AM] falls into [src]!", "GAH! Ah... where are you?")
+ T.visible_message("[AM] falls from above!")
+ AM.forceMove(T)
+ if(isliving(AM))
+ var/mob/living/L = AM
+ L.Weaken(5)
+ L.adjustBruteLoss(30)
/turf/open/chasm/straight_down/New()
..()
@@ -636,22 +651,21 @@
initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
/turf/open/chasm/straight_down/lava_land_surface/drop(atom/movable/AM)
- if(!AM.invisibility)
- AM.visible_message("[AM] falls into [src]!", "You stumble and stare into an abyss before you. It stares back, and you fall \
- into the enveloping dark.")
- if(isliving(AM))
- var/mob/living/L = AM
- L.notransform = TRUE
- L.Stun(10)
- L.resting = TRUE
- animate(AM, transform = matrix() - matrix(), alpha = 0, color = rgb(0, 0, 0), time = 10)
- for(var/i in 1 to 5)
- AM.pixel_y--
- sleep(2)
- if(isrobot(AM))
- var/mob/living/silicon/robot/S = AM
- qdel(S.mmi)
- qdel(AM)
+ AM.visible_message("[AM] falls into [src]!", "You stumble and stare into an abyss before you. It stares back, and you fall \
+ into the enveloping dark.")
+ if(isliving(AM))
+ var/mob/living/L = AM
+ L.notransform = TRUE
+ L.Stun(10)
+ L.resting = TRUE
+ animate(AM, transform = matrix() - matrix(), alpha = 0, color = rgb(0, 0, 0), time = 10)
+ for(var/i in 1 to 5)
+ AM.pixel_y--
+ sleep(2)
+ if(isrobot(AM))
+ var/mob/living/silicon/robot/S = AM
+ qdel(S.mmi)
+ qdel(AM)
/turf/closed/mineral/volcanic/lava_land_surface
environment_type = "basalt"
diff --git a/code/modules/spells/spell_types/charge.dm b/code/modules/spells/spell_types/charge.dm
index fc6c555a47b..57088176cb2 100644
--- a/code/modules/spells/spell_types/charge.dm
+++ b/code/modules/spells/spell_types/charge.dm
@@ -62,11 +62,12 @@
break
else if(istype(item, /obj/item/weapon/stock_parts/cell/))
var/obj/item/weapon/stock_parts/cell/C = item
- if(prob(80))
- C.maxcharge -= 200
- if(C.maxcharge <= 1) //Div by 0 protection
- C.maxcharge = 1
- burnt_out = 1
+ if(!C.self_recharge)
+ if(prob(80))
+ C.maxcharge -= 200
+ if(C.maxcharge <= 1) //Div by 0 protection
+ C.maxcharge = 1
+ burnt_out = 1
C.charge = C.maxcharge
charged_item = C
break
@@ -75,11 +76,12 @@
for(I in item.contents)
if(istype(I, /obj/item/weapon/stock_parts/cell/))
var/obj/item/weapon/stock_parts/cell/C = I
- if(prob(80))
- C.maxcharge -= 200
- if(C.maxcharge <= 1) //Div by 0 protection
- C.maxcharge = 1
- burnt_out = 1
+ if(!C.self_recharge)
+ if(prob(80))
+ C.maxcharge -= 200
+ if(C.maxcharge <= 1) //Div by 0 protection
+ C.maxcharge = 1
+ burnt_out = 1
C.charge = C.maxcharge
item.update_icon()
charged_item = item