mob/Teleport
verb
BloodTeleportShort()
set category = "Abilities"
set name = "Blood Teleport Short"
if(usr.Freeze)
usr<<"<FONT COLOR=yellow>Client information</FONT>: Your frozen, you can't use magic"
return
if(usr.Energy<=0)
usr<<"<FONT COLOR=yellow>Client information</FONT>: Your out of energy"
return
if(usr.MagicBound||WorldMagicBound)
usr<<"Your Magic doesn't seem to work, it's bound!"
return
if(usr.Selforb == 0)
usr.Selforb = 1
usr.density = 0
usr.Exposing_Magic()
usr.overlays = new /obj/orb/BloodTeleport1
view(7)<< "[usr] Teleports out"
usr.Energy -= 5
sleep(1)
usr.overlays = null
view(7)<< Shimmering
usr.overlays += new /obj/orb/BloodTeleport2
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport3
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport4
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport5
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport6
usr.underlays=null
usr.icon=null
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport7
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport8
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport9
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport10
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport11
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport12
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport13
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport14
usr.invisibility=100
else if(Selforb == 1)
usr.Selforb = 0
usr.density = 1
usr.invisibility = 0
view(7)<< "[usr] Teleports in"
view(7)<< Shimmering
usr.Exposing_Magic()
usr.Energy -= 5
//////////////////////////////////
usr.overlays = new /obj/orb/BloodTeleport14
sleep(1)
usr.overlays = null
view(7)<< Shimmering
usr.overlays += new /obj/orb/BloodTeleport13
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport12
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport11
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport10
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport9
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport8
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport7
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport6
usr.icon=usr.original_icon
usr.ClothingProc()
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport5
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport4
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport3
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport2
sleep(1)
usr.overlays = null
usr.overlays += new /obj/orb/BloodTeleport1
usr.overlays = null
Problem description:
Hey guys! So I don't know much about overlays, was hoping there was an better way to add my overlay icons that will give me the same results but less lines. If you have any ideas or even just a webpage on overlays i'd appreciate it! Thanks :).
One thing you should know about overlays is that you should rarely add something to overlays without removing that same exact thing from it later. This means you don't have to totally clear overlays all the time, which interferes with everything else that might be using overlays. When code affects other code indirectly in unexpected ways, that code breaks.
If you're clearing overlays because you want to remove clothing, you don't want to clear overlays, you just want to remove clothing, which could be its own proc that only affects the clothing overlays. That's a separate matter.
Whenever you have repetitive code with minimal differences, you can always use a for() loop instead. In this case, you have a sequence of types to loop over and show with 0.1 second in between. Might as well make the lists global so they're not recreated every time this verb is called.
It's still pretty ugly, but I'd have to see what the differences are between the types to simplify it any more. If the types only have a different icon_state, and the icon states are numbers (like "1", "2", etc.), then you don't need the lists or multiple objects at all:
Of course, you can also iterate with a decreasing value for the deactivation effect:
Even better than overlays, you can use vis_contents, so you won't have to repeat the addition/removal of the object at all:
If you want, you can even put the animation frames into actual animated icon states and use flick(), which even gets rid of the loops.
Even better than all of the above would be if you could create your effect using animate() or particle effects.