diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index d2a22b2dc82..53d7093e514 100644
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -30,7 +30,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
var/lightswitch = 1
var/valid_territory = 1 //If it's a valid territory for gangs to claim
- var/blob_legit = 1 //Does it count for blobs score? By default, all areas count.
+ var/blob_allowed = 1 //Does it count for blobs score? By default, all areas count.
var/eject = null
@@ -99,7 +99,7 @@ var/list/teleportlocs = list()
power_environ = 0
valid_territory = 0
ambientsounds = list('sound/ambience/ambispace.ogg','sound/ambience/title2.ogg',)
- blob_legit = 0 //Eating up space doesn't count for victory as a blob.
+ blob_allowed = 0 //Eating up space doesn't count for victory as a blob.
/area/space/nearstation
icon_state = "space_near"
@@ -167,7 +167,7 @@ var/list/teleportlocs = list()
icon_state = "centcom"
requires_power = 0
has_gravity = 1
- blob_legit = 0 //Should go without saying, no blobs should take over centcom as a win condition.
+ blob_allowed = 0 //Should go without saying, no blobs should take over centcom as a win condition.
/area/centcom/control
name = "Centcom Docks"
@@ -194,7 +194,7 @@ var/list/teleportlocs = list()
icon_state = "syndie-ship"
requires_power = 0
has_gravity = 1
- blob_legit = 0 //Not... entirely sure this will ever come up... but if the bus makes blobs AND ops, it shouldn't aim for the ops to win.
+ blob_allowed = 0 //Not... entirely sure this will ever come up... but if the bus makes blobs AND ops, it shouldn't aim for the ops to win.
/area/syndicate_mothership/control
name = "Syndicate Control Room"
@@ -211,7 +211,7 @@ var/list/teleportlocs = list()
icon_state = "asteroid"
requires_power = 0
has_gravity = 1
- blob_legit = 0 //Nope, no winning on the asteroid as a blob. Gotta eat the station.
+ blob_allowed = 0 //Nope, no winning on the asteroid as a blob. Gotta eat the station.
valid_territory = 0
/area/asteroid/cave
@@ -1018,7 +1018,7 @@ var/list/teleportlocs = list()
name = "Ruskie DJ Station"
icon_state = "DJ"
has_gravity = 1
- blob_legit = 0 //Nope, no winning on the DJ station as a blob. Gotta eat the main station.
+ blob_allowed = 0 //Nope, no winning on the DJ station as a blob. Gotta eat the main station.
/area/djstation/solars
name = "DJ Station Solars"
@@ -1030,7 +1030,7 @@ var/list/teleportlocs = list()
/area/derelict
name = "Derelict Station"
icon_state = "storage"
- blob_legit = 0 //Nope, no winning on the derelict as a blob. Gotta eat the station.
+ blob_allowed = 0 //Nope, no winning on the derelict as a blob. Gotta eat the station.
/area/derelict/hallway/primary
name = "Derelict Primary Hallway"
diff --git a/code/game/gamemodes/blob/blob_finish.dm b/code/game/gamemodes/blob/blob_finish.dm
index b177798cdcd..5bd7dc2b321 100644
--- a/code/game/gamemodes/blob/blob_finish.dm
+++ b/code/game/gamemodes/blob/blob_finish.dm
@@ -19,7 +19,7 @@
/datum/game_mode/blob/declare_completion()
if(round_converted) //So badmin blobs later don't step on the dead natural blobs metaphorical toes
..()
- if(blobwincount <= blobs.len)
+ if(blobwincount <= blobs_legit.len)
feedback_set_details("round_end_result","win - blob took over")
world << "The blob has taken over the station!"
world << "The entire station was eaten by the Blob"
diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm
index ca99254b6f8..2acc5df04b1 100644
--- a/code/game/gamemodes/blob/theblob.dm
+++ b/code/game/gamemodes/blob/theblob.dm
@@ -17,10 +17,9 @@
var/fire_resist = 1
var/mob/camera/blob/overmind
-
/obj/effect/blob/New(loc)
var/area/Ablob = get_area(loc)
- if (Ablob.blob_legit) //Is the area Legit for blobs?
+ if (Ablob.blob_allowed) //Is this area allowed for winning as blob?
blobs_legit += src
blobs += src //Keep track of the blob in the normal list either way
src.dir = pick(1, 2, 4, 8)
@@ -35,11 +34,10 @@
/obj/effect/blob/Destroy()
var/area/Ablob = get_area(loc)
- if (Ablob.blob_legit) //Only remove for blobs in Legit places, else they didn't add points to begin with.
+ if (Ablob.blob_allowed) //Only remove for blobs in areas that counted for the win
blobs_legit -= src
blobs -= src //It's still removed from the normal list
- if(isturf(loc)) //Necessary because Expand() is retarded and spawns a blob and then deletes it
- playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
+ playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) //Expand() is no longer broken, no check necessary.
return ..()
@@ -130,24 +128,33 @@
else T = null
if(!T) return 0
- var/obj/effect/blob/B = new /obj/effect/blob/normal(src.loc)
+ //We can keep the above code in this proc, it probably works fine?
+ //new blob code with less BS:
+ var/Blob_spawnable = 1
if(istype(T, /turf/space) && prob(65))
- B.health = 0
- B.color = a_color
- B.density = 1
- if(T.Enter(B,src))//Attempt to move into the tile
- B.density = initial(B.density)
- B.loc = T
- B.update_icon()
- else
- T.blob_act()//If we cant move in hit the turf
- B.loc = null //So we don't play the splat sound, see Destroy()
- qdel(B)
-
- for(var/atom/A in T)//Hit everything in the turf
- A.blob_act()
+ Blob_spawnable = 0
+ playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) //Let's give some feedback that we DID try to spawn in space, since players are used to it
+ for (var/atom/A in T)
+ if (A.density != 0) // Unless density is 0, don't spawn a blob
+ Blob_spawnable = 0
+ A.blob_act() //Hit everything
+ if (T.density != 0) //Check for walls and such dense turfs
+ Blob_spawnable = 0
+ T.blob_act() //Hit the turf
+ if (Blob_spawnable == 1)
+ var/obj/effect/blob/B = new /obj/effect/blob/normal(src.loc)
+ B.color = a_color
+ B.density = 1
+ if(T.Enter(B,src)) //NOW we can attempt to move into the tile
+ B.density = initial(B.density)
+ B.loc = T
+ B.update_icon()
+ else
+ T.blob_act() //If we cant move in hit the turf
+ qdel(B) //We should never get to this point, since we checked before moving in. Destroy blob anyway for cleanliness though
return 1
+
/obj/effect/blob/ex_act(severity, target)
..()
var/damage = 150 - 20 * severity
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index 39f37bc3d1a..dff4818781c 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -544,7 +544,7 @@
if(istype(ticker.mode, /datum/game_mode/blob))
var/datum/game_mode/blob/mode = ticker.mode
dat += "
| Blob | ||
| Progress: [blobs.len]/[mode.blobwincount] | ||
| Progress: [blobs_legit.len]/[mode.blobwincount] |