Well, I'm using this snippet I wrote for square-type explosions.
proc/Explosion(var/mob/M,var/radius=0,var/mob/startpoint,var/obj/E,var/strength,var/TIMEBEFOREDAMAGE=0) //TIMEBEFOREDAMAGE var is in tenths of seconds, allows for very fine control in the explosion timing... if(M && radius && E && startpoint) var/obj/XYZ = new E(startpoint.loc) XYZ.Gowner=M if(M.client) for(var/mob/X in oview(startpoint,radius)) if(X&&X!=M) spawn(TIMEBEFOREDAMAGE) if(strength) var/explosiondamage=(strength*1000000) - (X.reiatsu/4) else var/explosiondamage=(M.reiatsu*3) - (X.reiatsu/3) X.health-=explosiondamage X.Death(M)
Read that if you want to actually learn the math behind it.
http://www.byond.com/developer/Theodis/Explosions
Use/study that to get a more practical example.