Destructable Terrain in Developer Help
|
|
obj/Fireball icon='Fireball.dmi' density=1 Bump(A) if(ismob(A)||(isobj(A)&&istype(A,/obj/Destructable))) var damage; MagicDamage; FireDamage if(isobj(A)) var/obj/M=A FireDamage=src.Fire-(M.Water*0.7) MagicDamage=src.MagicPower-(M.MagicPower*0.12) if(ismob(A)) var/mob/M=A FireDamage=src.Fire-(M.Water*0.7) MagicDamage=src.MagicPower-(M.MagicPower*0.12) damage=round(MagicDamage+FireDamage)*1.9 if(damage<1) damage=1 if(ismob(A)) var/mob M=A; O=src.Caster src.loc=M.loc if(M.MagicShield) del(src) if(O.FriendlyFireCheck(M)) viewers(6,M)<<"<i>[M] was hit by [O]'s Fireball for [round(damage)] damage!</i>" M.Death(O,damage,src) src.MagicDamage*=0.3; src.FireDamage*=0.4 if(src.MagicDamage<5||src.FireDamage<5) del(src) else var/obj/M=A src.Destroy(damage); del(src)
if(istype(A,/turf/)) var/turf/T = A if(T.density) del(src) if(istype(A,/obj/)) if(isobj(A)) var/obj/o = A if(istype(o,/obj/Jutsu)) JutsuClash_Water(src,o) else if(istype(o,/obj/weapon)) del(o) else del(src)
obj/Destructable proc/Destroy(damage) src.HEALTH-=damage if(src.HEALTH<=0) del(src)
|
The above code works; and I do know how I would go about implementing this system into my project.
But it seems to be tragically inefficient. I've got the exact same damage calculation done once each for objects and mobs, and am checking twice to see what kind of atom it is (obj|mob).
It'd be nice to be able to just go:
if(ismob(A)||(isobj(A)&&istype(A,/obj/Destructable))) var damage; MagicDamage; FireDamage if(isobj(A)) var/obj/M=A else if(ismob(A)) var/mob/M=A FireDamage=src.Fire-(M.Water*0.7) MagicDamage=src.MagicPower-(M.MagicPower*0.12) damage=round(MagicDamage+FireDamage)*1.9 if(damage<1) damage=1
|
Esp. since I have to add this type of coding into about 40+ different objs' Bump() proc.
EDIT: Oh, I should try using var/atom or something.
Even then though, the whole system still seems overly clunky.
|