Files
CHOMPStation2/code/game/gamemodes/blob/theblob.dm
mport2004@gmail.com 206c30c48a The safe plasma limit on breathing has been lowered causing plasma to actually damage you at a semi decent rate.
The force secret mode will now build the list of possible modes and make sure it can set the forced mode up before it actually picks the mode.  If the setup fails it will just use another mode from the secret list.
The R-table in medbay lobby was replaced with a normal table and medbay mostly follows the old "Can you get to the hall with next to nothing on you" map design.
Blob mode work.


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2185 316c924e-a436-60f5-8080-3fe189b3f50e
2011-09-12 08:57:02 +00:00

227 lines
4.7 KiB
Plaintext

/obj/blob
name = "blob"
icon = 'blob.dmi'
icon_state = "blob"
density = 1
opacity = 0
anchored = 1
var/active = 1
var/health = 40
New(loc, var/h = 40)
blobs += src
active_blobs += src
src.health = h
src.dir = pick(1,2,4,8)
src.update()
..(loc)
Del()
blobs -= src
if(active)
active_blobs -= src
..()
/*
proc/poisoned(iteration)
src.health -= 20
src.update()
for(var/obj/blob/B in orange(1,src))
if(prob(100/(iteration/2)))
spawn(rand(10,100))
if(B)
B.poisoned(iteration+1)
*/
proc/Life()
set background = 1
if(!active) return
var/turf/U = src.loc
/* if (locate(/obj/movable, U))
U = locate(/obj/movable, U)
if(U.density == 1)
del(src)
if(U.poison> 200000)
src.health -= round(U.poison/200000)
src.update()
return
*/
//Spaceblobs will harden and become inactive
if(istype(U, /turf/space))
src.active = 0
src.health += 40
src.name = "strong blob"
src.icon_state = "blob_idle"//needs a new sprite
active_blobs -= src
return
var/p = health //TODO: DEFERRED * (U.n2/11376000 + U.oxygen/1008000 + U.co2/200)
if(!prob(p)) return
for(var/dirn in cardinal)
sleep(3)
var/turf/T = get_step(src, dirn)
if(istype(T.loc, /area/arrival))
continue
if((locate(/obj/blob) in T))
continue
var/obj/blob/B = new /obj/blob(U, src.health)
if(T.Enter(B,src) && !(locate(/obj/blob) in T))
B.loc = T // open cell, so expand
else
if(prob(90)) // closed cell, 10% chance to not expand
if(!locate(/obj/blob) in T)
for(var/atom/A in T) // otherwise explode contents of turf
A.blob_act()
T.blob_act()
del(B)
return
ex_act(severity)
switch(severity)
if(1)
del(src)
if(2)
src.health -= rand(60,90)
src.update()
if(3)
src.health -= rand(30,40)
src.update()
proc/update()
if(health <= 0)
playsound(src.loc, 'splat.ogg', 50, 1)
del(src)
return
if(health<10)
icon_state = "blob_damaged"
return
if(health<20)
icon_state = "blob_damaged2"
return
bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
..()
update()
attackby(var/obj/item/weapon/W, var/mob/user)
playsound(src.loc, 'attackblob.ogg', 50, 1)
src.visible_message("\red <B>The [src] has been attacked with \the [W][(user ? " by [user]." : ".")]")
var/damage = W.force / 4.0
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(WT.welding)
damage = 15
playsound(src.loc, 'Welder.ogg', 100, 1)
src.health -= damage
src.update()
examine()
set src in oview(1)
usr << "Some blob thing."
/datum/station_state/proc/count()
for(var/turf/T in world)
if(T.z != 1)
continue
if(istype(T,/turf/simulated/floor))
if(!(T:burnt))
src.floor+=2
else
src.floor++
else if(istype(T, /turf/simulated/floor/engine))
src.floor+=2
else if(istype(T, /turf/simulated/wall))
if(T:intact)
src.wall+=2
else
src.wall++
else if(istype(T, /turf/simulated/wall/r_wall))
if(T:intact)
src.r_wall+=2
else
src.r_wall++
for(var/obj/O in world)
if(O.z != 1)
continue
if(istype(O, /obj/window))
src.window++
else if(istype(O, /obj/grille))
if(!O:destroyed)
src.grille++
else if(istype(O, /obj/machinery/door))
src.door++
else if(istype(O, /obj/machinery))
src.mach++
/datum/station_state/proc/score(var/datum/station_state/result)
var/r1a = min( result.floor / max(floor,1), 1.0)
var/r1b = min(result.r_wall/ max(r_wall,1), 1.0)
var/r1c = min(result.wall / max(wall,1), 1.0)
var/r2a = min(result.window / max(window,1), 1.0)
var/r2b = min(result.door / max(door,1), 1.0)
var/r2c = min(result.grille / max(grille,1), 1.0)
var/r3 = min(result.mach / max(mach,1), 1.0)
//diary << "Blob scores:[r1b] [r1c] / [r2a] [r2b] [r2c] / [r3] [r1a]"
return (4*(r1b+r1c) + 2*(r2a+r2b+r2c) + r3+r1a)/16.0
//////////////////////////////****IDLE BLOB***/////////////////////////////////////
/obj/blob/idle
name = "blob"
desc = "it looks... tasty"
icon_state = "blobidle0"
New(loc, var/h = 10)
src.health = h
src.dir = pick(1,2,4,8)
src.update_idle()
proc/update_idle() //put in stuff here to make it transform? Maybe when its down to around 5 health?
if(health<=0)
del(src)
return
if(health<4)
icon_state = "blobc0"
return
if(health<10)
icon_state = "blobb0"
return
icon_state = "blobidle0"
Del() //idle blob that spawns a normal blob when killed.
var/obj/blob/B = new /obj/blob( src.loc )
spawn(30)
B.Life()
..()