From 395cd5a68c4c6a136304d6d067bd06ed4b689604 Mon Sep 17 00:00:00 2001 From: ktccd Date: Sat, 28 Nov 2015 01:06:27 +0100 Subject: [PATCH] Rewrote a bit of blob code to fix... a lot Stuff fixed: My sad attempt at fixing #13126. The expand() proc for blobs is hopefully less intensive now (WHY did it used to spawn a blob only to destroy it? That must've been such a waste...). Destroy code no longer needs to adjust for the expand() proc doing weird things. The antag panel will now show the correct variable used to determine blob progress. Renamed the variables I used so they're not so similar to each other. blob_legit and blobs_legit was WAY to easy to mix up. --- code/game/area/Space Station 13 areas.dm | 14 +++---- code/game/gamemodes/blob/blob_finish.dm | 2 +- code/game/gamemodes/blob/theblob.dm | 47 ++++++++++++++---------- code/modules/admin/player_panel.dm | 2 +- 4 files changed, 36 insertions(+), 29 deletions(-) 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 += "
" - dat += "" + dat += "" for(var/datum/mind/blob in mode.infected_crew) var/mob/M = blob.current
Blob
Progress: [blobs.len]/[mode.blobwincount]
Progress: [blobs_legit.len]/[mode.blobwincount]