Files
vgstation13/code/game/gamemodes/blob/theblob.dm
mport2004@gmail.com c612827472 Singularity absorption explosion range lowered and is now dependent on singularity size.
BoH is no longer an instakill on a singularity, the chance the singularity will die from bombs now 25% from 10%.
Finished removing Metabslow from the game because delaying Interface rebuilds is a bad idea.
Sadly THE SUN is gone due to lighting lag issues, the current mob max luminosity is set to 7.
Damage and stun from doors shocking people has been lowered.
process() is now an obj level proc as it was already used by several procs and they can now jump onto the ticker if needed. 


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2199 316c924e-a436-60f5-8080-3fe189b3f50e
2011-09-14 07:24:19 +00:00

258 lines
5.6 KiB
Plaintext

/obj/blob
name = "blob"
icon = 'blob.dmi'
icon_state = "blob"
desc = "Some blob creature thingy"
density = 0
opacity = 0
anchored = 1
var
active = 1
health = 40
blobtype = "Blob"
blobdebug = 0
/*Types
Blob
Node
Factory
Shield
*/
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
if(blobtype == "Node")
processing_objects.Remove(src)
..()
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if( (air_group && blobtype != "Shield") || (height==0)) return 1
if(istype(mover) && mover.checkpass(PASSBLOB)) return 1
return 0
proc/check_mutations()
if(blobtype != "Blob") return
desc = "This really needs a better sprite"
//Spaceeeeeeblobbb
if(istype(src.loc, /turf/space))
active = 0
health += 40
name = "strong blob"
icon_state = "blob_idle"//needs a new sprite
blobtype = "Shield"
active_blobs -= src
return 1
//Commandblob
if((blobdebug == 1))
active = 0
health += 80
name = "solid blob"
icon_state = "blob_node"//needs a new sprite
blobtype = "Node"
active_blobs -= src
processing_objects.Add(src)
return 1
if((blobdebug == 2))
health += 20
name = "odd blob"
icon_state = "blob_factory"//needs a new sprite
blobtype = "Factory"
return 1
return 0
process()
spawn(-1)
Life()
return
proc/Life(var/pulse = 0)
set background = 1
if(blobtype == "Factory")
for(var/i = 1 to 2)
new/obj/critter/blob(src.loc)
return
if(check_mutations())
return
if(!prob(health)) return//Does not do much unless its healthy it seems, might want to change this later
for(var/dirn in cardinal)
// sleep(3) Due to the background we might not need this dono though
var/turf/T = get_step(src, dirn)
if((locate(/obj/blob) in T))
if(((src.blobtype == "Node") || (pulse > 0))&& (pulse < 12))
var/obj/blob/E = (locate(/obj/blob) in T)
E.Life((pulse+1))
return//Pass it along and end
continue
var/obj/blob/B = new /obj/blob(src.loc, 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)
src.health -= rand(90,150)
if(2)
src.health -= rand(60,90)
src.update()
if(3)
src.health -= rand(30,40)
src.update()
proc/update()//Needs to be updated with the types
if(health <= 0)
playsound(src.loc, 'splat.ogg', 50, 1)
del(src)
return
if(blobtype != "Blob") 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.name] 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()
..()