Skip to content
Home
Post Code
Jass (Warcraft III)
Wurst
GUI (Warcraft III)
Galaxy (StarCraft II)
GUI (StarCraft II)
C++
Java
Delphi
Text
Search Code
Compare Code
Uploads
Draw
Create New Drawing
View Drawings
Graph
Log in
<pre class="jasscode"><span class="style_symbol">/</span><span class="style_symbol">*</span> <span class="style_int">4</span> Packages included.. Projectile superclass TimedBlasts <span class="style_symbol">(</span>main system<span class="style_symbol">)</span> Kamehameha <span class="style_symbol">(</span>2d example of TimedBlasts System<span class="style_symbol">)</span> AngryKame <span class="style_symbol">(</span>3d example of TimedBlasts System TimedBlasts attempts to give a system to create various <span class="style_string">"timed blasts"</span> that can be customized to create tons of different spells that follow the general layout User begins channeling animation<span class="style_symbol">,</span> creating the projectile near them.. after a certain size is reached<span class="style_symbol">,</span> the projectile is launched to the target <span class="style_type">point</span> inflicting damage. If two <span class="style_string">"clashable"</span> blasts hit each other<span class="style_symbol">,</span> the two casters will be in a struggle until one runs out of mana<span class="style_symbol">,</span> and the winning blast will change target to its opposing caster <span class="style_type">unit</span>. <span class="style_symbol">*</span>visual example of what this code attempts to achieve in the case of a 3d clashable blast https:<span class="style_comment">//www.youtube.com/watch?v=M7i5Z3C5ZOk</span> <span class="style_symbol">*</span>note clashable and 3d hasn't been tested<span class="style_symbol">/</span>made yet<span class="style_symbol">*</span> protected real impactAoe <span class="style_symbol">-</span> size of aoe for damage to be done protected real damage <span class="style_symbol">-</span> damage to be done protected real endScale <span class="style_symbol">-</span> final scale of the blast before launching protected boolean trailOn <span class="style_symbol">-</span> creates a trail following the blast as it flies to the target protected boolean dustOn <span class="style_symbol">-</span> creates a dust effect around the caster as he fires protected boolean pulseOn <span class="style_symbol">-</span> makes the missile pulsate as it flies to the targeted area protected boolean launchOn <span class="style_symbol">-</span> creates a launch effect as the missile is launched protected boolean dropOn <span class="style_symbol">-</span> <span class="style_keyword">if</span> the missile is fired from an aerial position<span class="style_symbol">,</span> the missile is lowered to the targetted area protected boolean flightOn <span class="style_symbol">-</span> <span class="style_keyword">if</span> the missile will be fired from an aerial position protected <span class="style_type">string</span> trailSFX <span class="style_symbol">-</span> specify what SFX will be used for the trail protected <span class="style_type">string</span> pulseSFX <span class="style_symbol">-</span> specify what SFX will be used for the pulse protected <span class="style_type">string</span> launchSFX <span class="style_symbol">-</span> <span class="style_string">" "</span> protected <span class="style_type">string</span> finalSFX <span class="style_symbol">-</span> <span class="style_string">" "</span> protected <span class="style_type">string</span> dustSFX <span class="style_symbol">-</span> <span class="style_string">" "</span> protected real trailSize <span class="style_symbol">-</span> size of trail created protected real pulseSize <span class="style_symbol">-</span> size of pulses protected real launchSize <span class="style_symbol">-</span> size of launch protected colorA missileCol <span class="style_symbol">-</span> color of missile protected colorA trailCol <span class="style_symbol">=</span> color of trail protected colorA pulseCol <span class="style_symbol">=</span> color of pulse protected real speed <span class="style_symbol">-</span> speed of missile during travel protected <span class="style_type">int</span> channelIndex <span class="style_symbol">-</span> animation index to channel protected <span class="style_type">int</span> launchIndex <span class="style_symbol">-</span> animation index to launch protected real offsetDistance <span class="style_symbol">=</span> <span class="style_int">50</span> <span class="style_symbol">-</span> small offset from caster protected real realDropSpeed <span class="style_symbol">=</span> <span class="style_symbol">-</span><span class="style_int">15</span> <span class="style_keyword">if</span> there is a drop<span class="style_symbol">,</span> reasonable dropspeed<span class="style_symbol">,</span> can be changed private real timeSinceLastTrail <span class="style_symbol">=</span> <span class="style_int">0</span> <span class="style_symbol">-</span> used to create trail private real timeSinceLastPulse <span class="style_symbol">=</span> <span class="style_int">0</span> <span class="style_symbol">-</span> used to create pulses private real timeSinceLastChannel <span class="style_symbol">=</span> <span class="style_int">0</span> <span class="style_symbol">-</span> uses to create channel protected real timeDistance <span class="style_symbol">-</span> how long trails and pulses should last<span class="style_symbol">,</span> depends on speed<span class="style_symbol">,</span> and missile sizes<span class="style_symbol">,</span> should be configured to each spell accordingly protected sound throwSound <span class="style_symbol">=</span> generic missile size protected real lowerRate <span class="style_symbol">=</span> <span class="style_int">150</span>. speed that a missile will lower <span class="style_keyword">if</span> it is a 3d missile protected real destroyExplode <span class="style_symbol">=</span> <span class="style_int">1</span>.<span class="style_int">5</span> how long the destruction sfx will be played protected boolean clashing <span class="style_symbol">-</span> setting <span class="style_keyword">if</span> the missile is ready to clash protected boolean clashable <span class="style_symbol">-</span> saves <span class="style_keyword">true</span> value for clashable until channeling is complete protected boolean clashed <span class="style_symbol">-</span> <span class="style_keyword">if</span> a missile has clashed<span class="style_symbol">,</span> prevents further clashs protected boolean channeling <span class="style_symbol">=</span> <span class="style_keyword">if</span> a missile is still channeling<span class="style_symbol">,</span> it cannot clash yet <span class="style_symbol">*</span><span class="style_symbol">/</span> package Projectile import public Entity public class Projectile extends FxEntity <span class="style_comment">// Angles</span> protected angle xyAngle private vec3 startpos private boolean timed <span class="style_symbol">=</span> <span class="style_keyword">false</span> private boolean ranged <span class="style_symbol">=</span> <span class="style_keyword">false</span> <span class="style_comment">// Moving Speed</span> private real speed <span class="style_symbol">=</span> <span class="style_int">0</span> private real acc <span class="style_symbol">=</span> <span class="style_int">1</span>.<span class="style_int">0</span> protected real dist <span class="style_symbol">=</span> <span class="style_int">0</span> private real maxDist <span class="style_symbol">=</span> <span class="style_int">0</span> protected real lifespan <span class="style_symbol">=</span> <span class="style_int">0</span> protected real dropSpeed <span class="style_symbol">=</span> <span class="style_int">0</span> construct<span class="style_symbol">(</span> vec3 pos<span class="style_symbol">,</span> real radius<span class="style_symbol">,</span> player owner<span class="style_symbol">,</span> angle xyAngle<span class="style_symbol">,</span> <span class="style_type">string</span> fxpath <span class="style_symbol">)</span> super<span class="style_symbol">(</span>pos<span class="style_symbol">,</span> radius<span class="style_symbol">,</span> owner<span class="style_symbol">,</span> xyAngle<span class="style_symbol">,</span> fxpath<span class="style_symbol">)</span> startpos <span class="style_symbol">=</span> pos setXYAngle<span class="style_symbol">(</span>xyAngle<span class="style_symbol">)</span> active <span class="style_symbol">=</span> <span class="style_keyword">false</span> function setRanged<span class="style_symbol">(</span>real maxDistance<span class="style_symbol">)</span> this.maxDist <span class="style_symbol">=</span> maxDistance<span class="style_symbol">*</span>maxDistance ranged <span class="style_symbol">=</span> <span class="style_keyword">true</span> function setTimed<span class="style_symbol">(</span>real lifespan<span class="style_symbol">)</span> this.lifespan <span class="style_symbol">=</span> lifespan timed <span class="style_symbol">=</span> <span class="style_keyword">true</span> function setSpeed<span class="style_symbol">(</span>real speed<span class="style_symbol">)</span> this.speed <span class="style_symbol">=</span> speed <span class="style_comment">//angle.direction(real distance)</span> setVel<span class="style_symbol">(</span>vec3<span class="style_symbol">(</span>xyAngle.cos<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">*</span>speed<span class="style_symbol">,</span> xyAngle.sin<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">*</span>speed<span class="style_symbol">,</span> dropSpeed<span class="style_symbol">)</span><span class="style_symbol">)</span> function setSpeed<span class="style_symbol">(</span>real speed<span class="style_symbol">,</span> real drop<span class="style_symbol">)</span> this.speed <span class="style_symbol">=</span> speed <span class="style_comment">//angle.direction(real distance)</span> setVel<span class="style_symbol">(</span>vec3<span class="style_symbol">(</span>xyAngle.cos<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">*</span>speed<span class="style_symbol">,</span> xyAngle.sin<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">*</span>speed<span class="style_symbol">,</span> drop<span class="style_symbol">)</span><span class="style_symbol">)</span> function setAcc<span class="style_symbol">(</span>real factor<span class="style_symbol">)</span> this.acc <span class="style_symbol">=</span> factor function getSpeed<span class="style_symbol">(</span><span class="style_symbol">)</span> returns real <span class="style_keyword">return</span> speed function setXYAngle<span class="style_symbol">(</span>angle xyA<span class="style_symbol">)</span> this.xyAngle <span class="style_symbol">=</span> xyA fx.setXYAngle<span class="style_symbol">(</span>xyA<span class="style_symbol">)</span> function setZAngle<span class="style_symbol">(</span>angle zA<span class="style_symbol">)</span> fx.setZAngle<span class="style_symbol">(</span>zA<span class="style_symbol">)</span> override function update<span class="style_symbol">(</span><span class="style_symbol">)</span> vel <span class="style_symbol">*</span><span class="style_symbol">=</span> acc pos <span class="style_symbol">+</span><span class="style_symbol">=</span> vel fixPos<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_keyword">if</span> timed lifespan <span class="style_symbol">-</span><span class="style_symbol">=</span> ANIMATION_PERIOD <span class="style_keyword">if</span> lifespan <<span class="style_symbol">=</span> <span class="style_int">0</span> done <span class="style_symbol">=</span> <span class="style_keyword">true</span> <span class="style_keyword">return</span> <span class="style_keyword">if</span> ranged <span class="style_keyword">if</span> startpos.distToVecSquared<span class="style_symbol">(</span>pos<span class="style_symbol">)</span> > maxDist done <span class="style_symbol">=</span> <span class="style_keyword">true</span> package TimedBlasts import Projectile import LinkedListModule import Fx import Constants import ClosureTimers import Terrain import LinkedList public class TimedBlasts extends Projectile use LinkedListModule <span class="style_comment">//Editable values</span> protected real impactAoe protected real damage protected real endScale protected boolean trailOn <span class="style_symbol">=</span> <span class="style_keyword">false</span> protected boolean dustOn <span class="style_symbol">=</span> <span class="style_keyword">false</span> protected boolean pulseOn <span class="style_symbol">=</span> <span class="style_keyword">false</span> protected boolean launchOn <span class="style_symbol">=</span> <span class="style_keyword">false</span> protected boolean dropOn <span class="style_symbol">=</span> <span class="style_keyword">false</span> protected boolean flightOn <span class="style_symbol">=</span> <span class="style_keyword">true</span> protected <span class="style_type">string</span> trailSFX protected <span class="style_type">string</span> pulseSFX protected <span class="style_type">string</span> launchSFX protected <span class="style_type">string</span> finalSFX protected <span class="style_type">string</span> dustSFX <span class="style_symbol">=</span> dustWave protected real trailSize protected real pulseSize protected real launchSize protected colorA missileCol <span class="style_symbol">=</span> colorA<span class="style_symbol">(</span><span class="style_int">255</span><span class="style_symbol">,</span><span class="style_int">255</span><span class="style_symbol">,</span><span class="style_int">255</span><span class="style_symbol">,</span><span class="style_int">255</span><span class="style_symbol">)</span> protected colorA trailCol <span class="style_symbol">=</span> colorA<span class="style_symbol">(</span><span class="style_int">255</span><span class="style_symbol">,</span><span class="style_int">255</span><span class="style_symbol">,</span><span class="style_int">255</span><span class="style_symbol">,</span><span class="style_int">255</span><span class="style_symbol">)</span> protected colorA pulseCol <span class="style_symbol">=</span> colorA<span class="style_symbol">(</span><span class="style_int">255</span><span class="style_symbol">,</span><span class="style_int">255</span><span class="style_symbol">,</span><span class="style_int">255</span><span class="style_symbol">,</span><span class="style_int">255</span><span class="style_symbol">)</span> protected real speed protected <span class="style_type">int</span> channelIndex protected <span class="style_type">int</span> launchIndex protected real offsetDistance <span class="style_symbol">=</span> <span class="style_int">50</span> protected real realDropSpeed <span class="style_symbol">=</span> <span class="style_symbol">-</span><span class="style_int">15</span> private real timeSinceLastTrail <span class="style_symbol">=</span> <span class="style_int">0</span> private real timeSinceLastPulse <span class="style_symbol">=</span> <span class="style_int">0</span> private real timeSinceLastChannel <span class="style_symbol">=</span> <span class="style_int">0</span> protected real timeDistance <span class="style_symbol">=</span> <span class="style_int">1</span> protected sound throwSound <span class="style_symbol">=</span> gg_snd_kamehameha_fire protected real lowerRate <span class="style_symbol">=</span> <span class="style_int">150</span>. protected real destroyExplode <span class="style_symbol">=</span> <span class="style_int">1</span>.<span class="style_int">5</span> protected boolean clashing <span class="style_symbol">=</span> <span class="style_keyword">false</span> protected boolean clashable <span class="style_symbol">=</span> <span class="style_keyword">false</span> protected boolean clashed <span class="style_symbol">=</span> <span class="style_keyword">false</span> protected boolean channeling <span class="style_symbol">=</span> <span class="style_keyword">false</span> protected LinkedList<Fx> trailList <span class="style_symbol">=</span> new LinkedList<Fx><span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_comment">//Instance Variables</span> private vec3 target protected <span class="style_type">unit</span> u private timer t <span class="style_symbol">=</span> getTimer<span class="style_symbol">(</span><span class="style_symbol">)</span> protected real scale protected angle targetAngle private boolean missileCast <span class="style_symbol">=</span> <span class="style_keyword">false</span> construct<span class="style_symbol">(</span><span class="style_type">unit</span> actor<span class="style_symbol">,</span>vec3 pos<span class="style_symbol">,</span> player owner<span class="style_symbol">,</span> vec3 target<span class="style_symbol">,</span> <span class="style_type">string</span> SFX<span class="style_symbol">,</span> real originalScale<span class="style_symbol">)</span> super<span class="style_symbol">(</span>pos.addReals<span class="style_symbol">(</span><span class="style_int">0</span><span class="style_symbol">,</span> <span class="style_int">0</span><span class="style_symbol">,</span> pos.withTerrainZ<span class="style_symbol">(</span><span class="style_symbol">)</span>.z<span class="style_symbol">)</span><span class="style_symbol">,</span> <span class="style_int">0</span><span class="style_symbol">,</span> owner<span class="style_symbol">,</span> pos.angleTo2d<span class="style_symbol">(</span>target<span class="style_symbol">)</span><span class="style_symbol">,</span> SFX<span class="style_symbol">)</span> this.targetAngle <span class="style_symbol">=</span> pos.angleTo2d<span class="style_symbol">(</span>target<span class="style_symbol">)</span> this.u <span class="style_symbol">=</span> actor this.target <span class="style_symbol">=</span> target this.u.pause<span class="style_symbol">(</span><span class="style_symbol">)</span> this.scale <span class="style_symbol">=</span> originalScale function startMissile<span class="style_symbol">(</span><span class="style_symbol">)</span> this.setSpeed<span class="style_symbol">(</span><span class="style_int">0</span><span class="style_symbol">)</span> this.pos <span class="style_symbol">=</span> pos.offset2d<span class="style_symbol">(</span>pos.angleTo2d<span class="style_symbol">(</span>target<span class="style_symbol">)</span><span class="style_symbol">,</span> offsetDistance<span class="style_symbol">)</span> this.pos.z <span class="style_symbol">+</span><span class="style_symbol">=</span> <span class="style_int">50</span> this.fixPos<span class="style_symbol">(</span><span class="style_symbol">)</span> this.fx.setColor<span class="style_symbol">(</span>missileCol<span class="style_symbol">)</span> this.fx.setScale<span class="style_symbol">(</span>this.scale<span class="style_symbol">)</span> this.t.setData<span class="style_symbol">(</span>this castTo <span class="style_type">int</span><span class="style_symbol">)</span> this.t.startPeriodic<span class="style_symbol">(</span>.<span class="style_int">1</span><span class="style_symbol">,</span> function callExpandMissile<span class="style_symbol">)</span> <span class="style_comment">//if dust is activated</span> <span class="style_keyword">if</span> this.dustOn this.createDust<span class="style_symbol">(</span><span class="style_symbol">)</span> function createDust<span class="style_symbol">(</span><span class="style_symbol">)</span> effect x <span class="style_symbol">=</span> AddSpecialEffectTarget<span class="style_symbol">(</span>dustSFX<span class="style_symbol">,</span> u<span class="style_symbol">,</span> <span class="style_string">"origin"</span><span class="style_symbol">)</span> DestroyEffectBJ<span class="style_symbol">(</span>x<span class="style_symbol">)</span> <span class="style_keyword">static</span> function callExpandMissile<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">(</span>GetExpiredTimer<span class="style_symbol">(</span><span class="style_symbol">)</span>.getData<span class="style_symbol">(</span><span class="style_symbol">)</span> castTo TimedBlasts<span class="style_symbol">)</span>.expandMissile<span class="style_symbol">(</span><span class="style_symbol">)</span> function expandMissile<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_keyword">if</span> this.timeSinceLastChannel <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_int">0</span> this.u.setAnimation<span class="style_symbol">(</span>channelIndex<span class="style_symbol">)</span> <span class="style_keyword">if</span> this.timeSinceLastChannel ><span class="style_symbol">=</span> <span class="style_symbol">(</span>.<span class="style_int">18</span><span class="style_symbol">)</span> this.u.setAnimation<span class="style_symbol">(</span>channelIndex<span class="style_symbol">)</span> this.timeSinceLastChannel <span class="style_symbol">-</span><span class="style_symbol">=</span> <span class="style_symbol">(</span>.<span class="style_int">17</span><span class="style_symbol">)</span> this.timeSinceLastChannel <span class="style_symbol">+</span><span class="style_symbol">=</span> ANIMATION_PERIOD this.scale <span class="style_symbol">+</span><span class="style_symbol">=</span> .<span class="style_int">05</span> this.fx.setScale<span class="style_symbol">(</span>this.scale<span class="style_symbol">)</span> <span class="style_keyword">if</span> this.scale ><span class="style_symbol">=</span> endScale <span class="style_keyword">if</span> this.flightOn this.u.setFlyHeight<span class="style_symbol">(</span><span class="style_int">0</span><span class="style_symbol">,</span> lowerRate<span class="style_symbol">)</span> <span class="style_keyword">if</span> this.launchOn this.createLaunchFX<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_keyword">if</span> this.dropOn this.dropSpeed <span class="style_symbol">=</span> realDropSpeed this.setSpeed<span class="style_symbol">(</span>speed<span class="style_symbol">)</span> this.t.release<span class="style_symbol">(</span><span class="style_symbol">)</span> this.u.setAnimation<span class="style_symbol">(</span>launchIndex<span class="style_symbol">)</span> PlaySoundOnUnitBJ<span class="style_symbol">(</span>this.throwSound<span class="style_symbol">,</span> <span class="style_int">70</span><span class="style_symbol">,</span> this.u<span class="style_symbol">)</span> this.missileCast <span class="style_symbol">=</span> <span class="style_keyword">true</span> <span class="style_keyword">if</span> not this.channeling this.u.unpause<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_keyword">if</span> this.clashing this.clashable <span class="style_symbol">=</span> <span class="style_keyword">true</span> <span class="style_comment">//calculate frequency of trail creation</span> function createLaunchFX<span class="style_symbol">(</span><span class="style_symbol">)</span> Fx launch <span class="style_symbol">=</span> new Fx<span class="style_symbol">(</span>fx.getPos2<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">,</span>this.targetAngle<span class="style_symbol">,</span> kameLaunch<span class="style_symbol">)</span> launch.setScale<span class="style_symbol">(</span>launchSize<span class="style_symbol">)</span> doAfter<span class="style_symbol">(</span>.<span class="style_int">5</span><span class="style_symbol">,</span> <span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">-</span>> destroy launch<span class="style_symbol">)</span> function createTrail<span class="style_symbol">(</span><span class="style_symbol">)</span> Fx trail <span class="style_symbol">=</span> new Fx<span class="style_symbol">(</span>fx.getPos3d<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">,</span> this.targetAngle<span class="style_symbol">,</span> trailSFX<span class="style_symbol">)</span> ..setScale<span class="style_symbol">(</span>trailSize<span class="style_symbol">)</span> ..setColor<span class="style_symbol">(</span>trailCol<span class="style_symbol">)</span> <span class="style_keyword">if</span> flightOn <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_keyword">false</span> trail.setZ<span class="style_symbol">(</span><span class="style_int">100</span><span class="style_symbol">)</span> <span class="style_comment">// doAfter(timeDistance, () -> trail.hiddenDestroy())</span> this.trailList.add<span class="style_symbol">(</span>trail<span class="style_symbol">)</span> function createPulse<span class="style_symbol">(</span><span class="style_symbol">)</span> Fx pulse <span class="style_symbol">=</span> new Fx<span class="style_symbol">(</span>fx.getPos3d<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">,</span> this.targetAngle<span class="style_symbol">,</span> pulseSFX<span class="style_symbol">)</span> ..setScale<span class="style_symbol">(</span>pulseSize<span class="style_symbol">)</span> ..setZAngle<span class="style_symbol">(</span><span class="style_symbol">-</span><span class="style_int">5200</span><span class="style_symbol">)</span> ..setColor<span class="style_symbol">(</span>pulseCol<span class="style_symbol">)</span> <span class="style_keyword">if</span> this.flightOn <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_keyword">false</span> pulse.setZ<span class="style_symbol">(</span><span class="style_int">100</span><span class="style_symbol">)</span> <span class="style_comment">// pulse.getDummy().setAnimation(0)</span> doAfter<span class="style_symbol">(</span>timeDistance<span class="style_symbol">,</span> <span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">-</span>> pulse.hiddenDestroy<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">)</span> override function update<span class="style_symbol">(</span><span class="style_symbol">)</span> super.update<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_comment">//should be speed dependent at some level.</span> <span class="style_keyword">if</span> pos.toVec2<span class="style_symbol">(</span><span class="style_symbol">)</span>.distToVecSquared<span class="style_symbol">(</span>target.toVec2<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">)</span> < <span class="style_int">120</span><span class="style_symbol">*</span><span class="style_int">120</span> <span class="style_comment">//timeDistance = 0.15</span> <span class="style_keyword">if</span> this.getSpeed<span class="style_symbol">(</span><span class="style_symbol">)</span> > <span class="style_int">0</span> <span class="style_keyword">if</span> this.trailOn <span class="style_keyword">if</span> this.timeSinceLastTrail > <span class="style_symbol">(</span><span class="style_int">2</span><span class="style_symbol">/</span>speed<span class="style_symbol">)</span> this.createTrail<span class="style_symbol">(</span><span class="style_symbol">)</span> this.timeSinceLastTrail <span class="style_symbol">-</span><span class="style_symbol">=</span> <span class="style_symbol">(</span><span class="style_int">2</span><span class="style_symbol">/</span>speed<span class="style_symbol">)</span> this.timeSinceLastTrail <span class="style_symbol">+</span><span class="style_symbol">=</span> ANIMATION_PERIOD <span class="style_keyword">if</span> this.pulseOn <span class="style_keyword">if</span> this.timeSinceLastPulse > <span class="style_symbol">(</span><span class="style_int">2</span><span class="style_symbol">/</span>speed<span class="style_symbol">)</span> this.createPulse<span class="style_symbol">(</span><span class="style_symbol">)</span> this.timeSinceLastPulse <span class="style_symbol">-</span><span class="style_symbol">=</span> <span class="style_symbol">(</span><span class="style_int">2</span><span class="style_symbol">/</span>speed<span class="style_symbol">)</span> this.timeSinceLastPulse <span class="style_symbol">+</span><span class="style_symbol">=</span> ANIMATION_PERIOD <span class="style_keyword">if</span> not this.clashed <span class="style_keyword">if</span> this.clashable Entity e <span class="style_symbol">=</span> Entity.getFirst<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_keyword">while</span> e <span class="style_symbol">!</span><span class="style_symbol">=</span> null <span class="style_keyword">if</span> e<span class="style_symbol">!</span><span class="style_symbol">=</span> this and this.owner <span class="style_symbol">!</span><span class="style_symbol">=</span> e.owner <span class="style_keyword">if</span> this.owner.isAllyOf<span class="style_symbol">(</span>e.owner<span class="style_symbol">)</span> TimedBlasts blast2 <span class="style_symbol">=</span> e castTo TimedBlasts <span class="style_keyword">if</span> blast2.clashable and not blast2.clashed <span class="style_keyword">if</span> this.pos.distToVecSquared<span class="style_symbol">(</span>e.pos<span class="style_symbol">)</span> < <span class="style_int">40000</span>. print<span class="style_symbol">(</span>this.pos.distToVecSquared<span class="style_symbol">(</span>e.pos<span class="style_symbol">)</span>.toString<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">)</span> <span class="style_keyword">if</span> this.pos.distToVecSquared<span class="style_symbol">(</span>e.pos<span class="style_symbol">)</span> < <span class="style_symbol">(</span><span class="style_int">120</span><span class="style_symbol">*</span><span class="style_int">120</span><span class="style_symbol">)</span> <span class="style_comment">//print("hi6!")</span> this.onHit<span class="style_symbol">(</span>blast2<span class="style_symbol">)</span> e<span class="style_symbol">=</span>e.next <span class="style_keyword">if</span> <span class="style_symbol">(</span><span class="style_symbol">(</span>this.u.getPos<span class="style_symbol">(</span><span class="style_symbol">)</span>.distToVecSquared<span class="style_symbol">(</span>target.toVec2<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">)</span> < <span class="style_int">150</span><span class="style_symbol">*</span><span class="style_int">150</span><span class="style_symbol">)</span> or <span class="style_symbol">(</span>pos.toVec2<span class="style_symbol">(</span><span class="style_symbol">)</span>.distToVecSquared<span class="style_symbol">(</span>target.toVec2<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">)</span> < <span class="style_int">64</span><span class="style_symbol">*</span><span class="style_int">64</span><span class="style_symbol">)</span><span class="style_symbol">)</span> and missileCast for <span class="style_type">unit</span> enemy from ENUM_GROUP..enumUnitsInRange<span class="style_symbol">(</span>pos.toVec2<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">,</span> impactAoe<span class="style_symbol">)</span> <span class="style_keyword">if</span> enemy.isEnemy<span class="style_symbol">(</span>owner<span class="style_symbol">)</span> this.u.damageTarget<span class="style_symbol">(</span>enemy<span class="style_symbol">,</span> damage<span class="style_symbol">)</span> done <span class="style_symbol">=</span> <span class="style_keyword">true</span> terminate<span class="style_symbol">(</span><span class="style_symbol">)</span> function onHit<span class="style_symbol">(</span>TimedBlasts blast2<span class="style_symbol">)</span> boolean winner1 <span class="style_symbol">=</span> <span class="style_keyword">false</span> boolean winner2 <span class="style_symbol">=</span> <span class="style_keyword">false</span> <span class="style_comment">//print("hi7!")</span> this.clashed <span class="style_symbol">=</span> <span class="style_keyword">true</span> blast2.clashed <span class="style_symbol">=</span> <span class="style_keyword">true</span> blast2.setSpeed<span class="style_symbol">(</span><span class="style_int">0</span><span class="style_symbol">)</span> this.setSpeed<span class="style_symbol">(</span><span class="style_int">0</span><span class="style_symbol">)</span> blast2.active <span class="style_symbol">=</span> <span class="style_keyword">false</span> this.active <span class="style_symbol">=</span> <span class="style_keyword">false</span> <span class="style_comment">//this.fx.setScale(endScale+ 1)</span> <span class="style_comment">//blast2.fx.setScale(endScale+ 1)</span> doPeriodically<span class="style_symbol">(</span>.<span class="style_int">25</span><span class="style_symbol">,</span> <span class="style_symbol">(</span>CallbackPeriodic cb<span class="style_symbol">)</span> <span class="style_symbol">-</span>> begin Fx effect1 <span class="style_symbol">=</span> new Fx<span class="style_symbol">(</span>fx.getPos2<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">,</span>this.targetAngle<span class="style_symbol">,</span> iceNova<span class="style_symbol">)</span> ..setScale<span class="style_symbol">(</span><span class="style_int">1</span>.<span class="style_int">8</span><span class="style_symbol">)</span> ..setZ<span class="style_symbol">(</span><span class="style_int">100</span><span class="style_symbol">)</span> ..setZAngle<span class="style_symbol">(</span><span class="style_symbol">-</span><span class="style_int">5200</span><span class="style_symbol">)</span> Fx effect2 <span class="style_symbol">=</span> new Fx<span class="style_symbol">(</span>blast2.fx.getPos2<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">,</span>this.targetAngle<span class="style_symbol">,</span> iceNova<span class="style_symbol">)</span> ..setScale<span class="style_symbol">(</span><span class="style_int">1</span>.<span class="style_int">8</span><span class="style_symbol">)</span> ..setZ<span class="style_symbol">(</span><span class="style_int">100</span><span class="style_symbol">)</span> ..setZAngle<span class="style_symbol">(</span><span class="style_symbol">-</span><span class="style_int">5200</span><span class="style_symbol">)</span> Fx effect5 <span class="style_symbol">=</span> new Fx<span class="style_symbol">(</span><span class="style_symbol">(</span><span class="style_symbol">(</span>fx.getPos2<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">+</span> blast2.fx.getPos2<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">)</span> <span class="style_symbol">*</span>.<span class="style_int">5</span><span class="style_symbol">)</span>.toVec3<span class="style_symbol">(</span><span class="style_symbol">)</span>.addReals<span class="style_symbol">(</span><span class="style_int">0</span><span class="style_symbol">,</span> <span class="style_int">0</span><span class="style_symbol">,</span> <span class="style_int">50</span><span class="style_symbol">)</span><span class="style_symbol">,</span> this.targetAngle<span class="style_symbol">,</span> sparklyExplosion<span class="style_symbol">)</span> ..setScale<span class="style_symbol">(</span><span class="style_int">5</span><span class="style_symbol">)</span> doAfter<span class="style_symbol">(</span>.<span class="style_int">25</span><span class="style_symbol">,</span> <span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">-</span>> begin destroy<span class="style_symbol">(</span>effect1<span class="style_symbol">)</span> destroy<span class="style_symbol">(</span>effect2<span class="style_symbol">)</span> destroy<span class="style_symbol">(</span>effect5<span class="style_symbol">)</span> end<span class="style_symbol">)</span> <span class="style_keyword">if</span> this.u.getMana<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_int">0</span> winner2 <span class="style_symbol">=</span> <span class="style_keyword">true</span> <span class="style_keyword">if</span> blast2.u.getMana<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_int">0</span> winner1 <span class="style_symbol">=</span> <span class="style_keyword">true</span> this.u.setMana<span class="style_symbol">(</span>u.getMana<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">-</span><span class="style_int">1</span><span class="style_symbol">)</span> blast2.u.setMana<span class="style_symbol">(</span>blast2.u.getMana<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">-</span><span class="style_int">2</span><span class="style_symbol">)</span> <span class="style_keyword">if</span> winner1 print<span class="style_symbol">(</span>this.u.getName<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">)</span> blast2.terminate<span class="style_symbol">(</span><span class="style_symbol">)</span> this.target <span class="style_symbol">=</span> blast2.u.getPos3<span class="style_symbol">(</span><span class="style_symbol">)</span> this.setSpeed<span class="style_symbol">(</span>this.speed<span class="style_symbol">)</span> this.active <span class="style_symbol">=</span> <span class="style_keyword">true</span> destroy cb <span class="style_keyword">if</span> winner2 and not winner1 print<span class="style_symbol">(</span>blast2.u.getName<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">)</span> terminate<span class="style_symbol">(</span><span class="style_symbol">)</span> blast2.target <span class="style_symbol">=</span> this.u.getPos3<span class="style_symbol">(</span><span class="style_symbol">)</span> blast2.setSpeed<span class="style_symbol">(</span>blast2.speed<span class="style_symbol">)</span> blast2.active <span class="style_symbol">=</span> <span class="style_keyword">true</span> destroy cb end<span class="style_symbol">)</span> ondestroy <span class="style_keyword">if</span> this.channeling this.u.unpause<span class="style_symbol">(</span><span class="style_symbol">)</span> Fx final <span class="style_symbol">=</span> new Fx<span class="style_symbol">(</span>fx.getPos3d<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">,</span> this.targetAngle<span class="style_symbol">,</span> finalSFX<span class="style_symbol">)</span> final.setScale<span class="style_symbol">(</span><span class="style_int">2</span><span class="style_symbol">)</span> doAfter<span class="style_symbol">(</span>destroyExplode<span class="style_symbol">,</span> <span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">-</span>> final.hiddenDestroy<span class="style_symbol">(</span><span class="style_symbol">)</span><span class="style_symbol">)</span> for i <span class="style_symbol">=</span> <span class="style_int">0</span> to <span class="style_symbol">(</span>this.trailList.getSize<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">-</span><span class="style_int">1</span><span class="style_symbol">)</span> this.trailList.get<span class="style_symbol">(</span>i<span class="style_symbol">)</span>.hiddenDestroy<span class="style_symbol">(</span><span class="style_symbol">)</span> this.done <span class="style_symbol">=</span> <span class="style_keyword">true</span> package Kamehameha import Constants import TimedBlasts constant real originalScale <span class="style_symbol">=</span> .<span class="style_int">2</span> public class Kamehameha extends TimedBlasts construct<span class="style_symbol">(</span><span class="style_type">unit</span> actor<span class="style_symbol">,</span>vec3 pos<span class="style_symbol">,</span> player owner<span class="style_symbol">,</span> vec3 target<span class="style_symbol">,</span> <span class="style_type">int</span> level<span class="style_symbol">)</span> super<span class="style_symbol">(</span>actor<span class="style_symbol">,</span>pos.addReals<span class="style_symbol">(</span><span class="style_int">0</span><span class="style_symbol">,</span> <span class="style_int">0</span><span class="style_symbol">,</span> <span class="style_int">50</span><span class="style_symbol">)</span><span class="style_symbol">,</span>owner<span class="style_symbol">,</span>target<span class="style_symbol">,</span>bigKamehamehaBall<span class="style_symbol">,</span>originalScale<span class="style_symbol">)</span> <span class="style_comment">//if (actor.getTypeId() == 'H001')</span> this.impactAoe <span class="style_symbol">=</span> <span class="style_int">500</span> this.damage <span class="style_symbol">=</span> <span class="style_int">150</span><span class="style_symbol">*</span>level.toReal<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">+</span> <span class="style_symbol">(</span>GetHeroInt<span class="style_symbol">(</span>actor<span class="style_symbol">,</span> <span class="style_keyword">true</span><span class="style_symbol">)</span><span class="style_symbol">*</span><span class="style_int">10</span><span class="style_symbol">)</span> this.trailOn <span class="style_symbol">=</span> <span class="style_keyword">true</span> this.dustOn <span class="style_symbol">=</span> <span class="style_keyword">true</span> this.pulseOn <span class="style_symbol">=</span> <span class="style_keyword">true</span> this.launchOn <span class="style_symbol">=</span> <span class="style_keyword">true</span> <span class="style_type">int</span> actorID <span class="style_symbol">=</span> actor.getTypeId<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_keyword">if</span> actorID <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_int">'H000'</span> this.channelIndex <span class="style_symbol">=</span> <span class="style_int">11</span> this.launchIndex <span class="style_symbol">=</span> <span class="style_int">12</span> this.throwSound <span class="style_symbol">=</span> gg_snd_Kamehameha_Voice <span class="style_keyword">if</span> actorID <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_int">'H005'</span> or actorID <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_int">'H009'</span> this.channelIndex <span class="style_symbol">=</span> <span class="style_int">20</span> this.launchIndex <span class="style_symbol">=</span> <span class="style_int">18</span> <span class="style_keyword">if</span> actorID <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_int">'H00A'</span> this.channelIndex <span class="style_symbol">=</span> <span class="style_int">5</span> this.launchIndex <span class="style_symbol">=</span> <span class="style_int">4</span> <span class="style_keyword">if</span> actorID <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_int">'H001'</span> or actorID <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_int">'H008'</span> this.channelIndex <span class="style_symbol">=</span> <span class="style_int">7</span> this.launchIndex <span class="style_symbol">=</span> <span class="style_int">8</span> this.throwSound <span class="style_symbol">=</span> gg_snd_GohanKame <span class="style_keyword">if</span> actorID <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_int">'H00D'</span> or actorID <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_int">'H00E'</span> or actorID <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_int">'H00F'</span> this.channelIndex <span class="style_symbol">=</span> <span class="style_int">8</span> this.launchIndex <span class="style_symbol">=</span> <span class="style_int">12</span> <span class="style_keyword">if</span> actorID <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_int">'H007'</span> this.channelIndex <span class="style_symbol">=</span> <span class="style_int">9</span> this.launchIndex <span class="style_symbol">=</span> <span class="style_int">13</span> <span class="style_keyword">if</span> actorID <span class="style_symbol">=</span><span class="style_symbol">=</span> <span class="style_int">'H00G'</span> this.channelIndex <span class="style_symbol">=</span> <span class="style_int">12</span> this.launchIndex <span class="style_symbol">=</span> <span class="style_int">11</span> this.speed <span class="style_symbol">=</span> <span class="style_int">32</span> this.endScale <span class="style_symbol">=</span> .<span class="style_int">6</span> this.trailSFX <span class="style_symbol">=</span> bigKamehamehaBall this.trailSize <span class="style_symbol">=</span> .<span class="style_int">3</span> this.pulseSFX <span class="style_symbol">=</span> bluePulse this.launchSFX <span class="style_symbol">=</span> kameLaunch this.launchSize <span class="style_symbol">=</span> <span class="style_int">5</span> this.finalSFX <span class="style_symbol">=</span> bigBlueExplosion this.pulseSize <span class="style_symbol">=</span> <span class="style_int">1</span> this.trailCol <span class="style_symbol">=</span> colorA<span class="style_symbol">(</span><span class="style_int">255</span><span class="style_symbol">,</span><span class="style_int">255</span><span class="style_symbol">,</span><span class="style_int">255</span><span class="style_symbol">,</span><span class="style_int">255</span><span class="style_symbol">)</span> this.clashing <span class="style_symbol">=</span> <span class="style_keyword">true</span> this.channeling <span class="style_symbol">=</span> <span class="style_keyword">true</span> startMissile<span class="style_symbol">(</span><span class="style_symbol">)</span> package AngryKame import Constants import TimedBlasts import ClosureTimers constant real originalScale <span class="style_symbol">=</span> .<span class="style_int">2</span> public class AngryKame extends TimedBlasts construct<span class="style_symbol">(</span><span class="style_type">unit</span> actor<span class="style_symbol">,</span>vec3 pos<span class="style_symbol">,</span> player owner<span class="style_symbol">,</span> vec3 target<span class="style_symbol">,</span> <span class="style_type">int</span> level<span class="style_symbol">)</span> super<span class="style_symbol">(</span>actor<span class="style_symbol">,</span>pos.addReals<span class="style_symbol">(</span><span class="style_int">0</span><span class="style_symbol">,</span> <span class="style_int">0</span><span class="style_symbol">,</span> <span class="style_int">700</span><span class="style_symbol">)</span><span class="style_symbol">,</span>owner<span class="style_symbol">,</span>target<span class="style_symbol">,</span>dummy2<span class="style_symbol">,</span>originalScale<span class="style_symbol">)</span> this.impactAoe <span class="style_symbol">=</span> <span class="style_int">500</span> actor.setFlyHeight<span class="style_symbol">(</span><span class="style_int">700</span><span class="style_symbol">,</span> <span class="style_int">700</span>.<span class="style_symbol">)</span> this.flightOn <span class="style_symbol">=</span> <span class="style_keyword">true</span> this.dropOn <span class="style_symbol">=</span> <span class="style_keyword">true</span> this.offsetDistance <span class="style_symbol">=</span> <span class="style_int">0</span> this.missileCol <span class="style_symbol">=</span> colorA<span class="style_symbol">(</span><span class="style_int">150</span><span class="style_symbol">,</span><span class="style_int">150</span><span class="style_symbol">,</span><span class="style_int">0</span><span class="style_symbol">,</span><span class="style_int">255</span><span class="style_symbol">)</span> this.speed <span class="style_symbol">=</span> <span class="style_int">25</span> this.endScale <span class="style_symbol">=</span> <span class="style_int">1</span>.<span class="style_int">5</span> this.dustSFX <span class="style_symbol">=</span> dustWave this.damage <span class="style_symbol">=</span> <span class="style_int">5000</span><span class="style_symbol">*</span>level.toReal<span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">+</span> <span class="style_symbol">(</span>GetHeroInt<span class="style_symbol">(</span>actor<span class="style_symbol">,</span> <span class="style_keyword">true</span><span class="style_symbol">)</span><span class="style_symbol">*</span><span class="style_int">20</span><span class="style_symbol">)</span> this.finalSFX <span class="style_symbol">=</span> nuclearExplosion this.trailOn <span class="style_symbol">=</span> <span class="style_keyword">true</span> this.dustOn <span class="style_symbol">=</span> <span class="style_keyword">true</span> this.pulseOn <span class="style_symbol">=</span> <span class="style_keyword">true</span> this.launchOn <span class="style_symbol">=</span> <span class="style_keyword">false</span> this.channelIndex <span class="style_symbol">=</span> <span class="style_int">20</span> this.launchIndex <span class="style_symbol">=</span> <span class="style_int">10</span> this.trailSFX <span class="style_symbol">=</span> pinkBall this.trailSize <span class="style_symbol">=</span> .<span class="style_int">6</span> this.launchSFX <span class="style_symbol">=</span> kameLaunch this.launchSize <span class="style_symbol">=</span> <span class="style_int">5</span> this.trailCol <span class="style_symbol">=</span> colorA<span class="style_symbol">(</span><span class="style_int">150</span><span class="style_symbol">,</span><span class="style_int">150</span><span class="style_symbol">,</span><span class="style_int">0</span><span class="style_symbol">,</span><span class="style_int">255</span><span class="style_symbol">)</span> this.lowerRate <span class="style_symbol">=</span> <span class="style_int">300</span>. this.realDropSpeed <span class="style_symbol">=</span> <span class="style_symbol">-</span><span class="style_int">25</span> this.destroyExplode <span class="style_symbol">=</span> <span class="style_int">3</span> this.pulseSFX <span class="style_symbol">=</span> windBlue this.pulseSize <span class="style_symbol">=</span> <span class="style_int">1</span>.<span class="style_int">2</span> this.pulseCol <span class="style_symbol">=</span> colorA<span class="style_symbol">(</span><span class="style_int">150</span><span class="style_symbol">,</span><span class="style_int">150</span><span class="style_symbol">,</span><span class="style_int">0</span><span class="style_symbol">,</span><span class="style_int">255</span><span class="style_symbol">)</span> effect x <span class="style_symbol">=</span> AddSpecialEffectTarget<span class="style_symbol">(</span>kamelightning<span class="style_symbol">,</span> u<span class="style_symbol">,</span> <span class="style_string">"origin"</span><span class="style_symbol">)</span> doAfter<span class="style_symbol">(</span><span class="style_int">1</span>.<span class="style_int">5</span><span class="style_symbol">,</span> <span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">-</span>> begin doAfter<span class="style_symbol">(</span><span class="style_int">1</span><span class="style_symbol">,</span> <span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">-</span>> begin PlaySoundOnUnitBJ<span class="style_symbol">(</span>gg_snd_angrykame<span class="style_symbol">,</span> <span class="style_int">70</span><span class="style_symbol">,</span> this.u<span class="style_symbol">)</span> end<span class="style_symbol">)</span> startMissile<span class="style_symbol">(</span><span class="style_symbol">)</span> fx.setFx<span class="style_symbol">(</span>pinkBall<span class="style_symbol">)</span> end<span class="style_symbol">)</span> doAfter<span class="style_symbol">(</span><span class="style_int">12</span><span class="style_symbol">,</span> <span class="style_symbol">(</span><span class="style_symbol">)</span> <span class="style_symbol">-</span>> begin DestroyEffectBJ<span class="style_symbol">(</span>x<span class="style_symbol">)</span> end<span class="style_symbol">)</span> </pre>
select language
jass
java
delphi
C++
php
GSL
> galaxy
visualBasic
wurst
Text
Markdown
select style
default
bbcode - default
Jasscraft
> jasscraft html
visual
lightweight
lightweightNr
goto line:
Compare with:
text copy window
edit this code
post new code
/* 4 Packages included.. Projectile superclass TimedBlasts (main system) Kamehameha (2d example of TimedBlasts System) AngryKame (3d example of TimedBlasts System TimedBlasts attempts to give a system to create various "timed blasts" that can be customized to create tons of different spells that follow the general layout User begins channeling animation, creating the projectile near them.. after a certain size is reached, the projectile is launched to the target point inflicting damage. If two "clashable" blasts hit each other, the two casters will be in a struggle until one runs out of mana, and the winning blast will change target to its opposing caster unit. *visual example of what this code attempts to achieve in the case of a 3d clashable blast https://www.youtube.com/watch?v=M7i5Z3C5ZOk *note clashable and 3d hasn't been tested/made yet* protected real impactAoe - size of aoe for damage to be done protected real damage - damage to be done protected real endScale - final scale of the blast before launching protected boolean trailOn - creates a trail following the blast as it flies to the target protected boolean dustOn - creates a dust effect around the caster as he fires protected boolean pulseOn - makes the missile pulsate as it flies to the targeted area protected boolean launchOn - creates a launch effect as the missile is launched protected boolean dropOn - if the missile is fired from an aerial position, the missile is lowered to the targetted area protected boolean flightOn - if the missile will be fired from an aerial position protected string trailSFX - specify what SFX will be used for the trail protected string pulseSFX - specify what SFX will be used for the pulse protected string launchSFX - " " protected string finalSFX - " " protected string dustSFX - " " protected real trailSize - size of trail created protected real pulseSize - size of pulses protected real launchSize - size of launch protected colorA missileCol - color of missile protected colorA trailCol = color of trail protected colorA pulseCol = color of pulse protected real speed - speed of missile during travel protected int channelIndex - animation index to channel protected int launchIndex - animation index to launch protected real offsetDistance = 50 - small offset from caster protected real realDropSpeed = -15 if there is a drop, reasonable dropspeed, can be changed private real timeSinceLastTrail = 0 - used to create trail private real timeSinceLastPulse = 0 - used to create pulses private real timeSinceLastChannel = 0 - uses to create channel protected real timeDistance - how long trails and pulses should last, depends on speed, and missile sizes, should be configured to each spell accordingly protected sound throwSound = generic missile size protected real lowerRate = 150. speed that a missile will lower if it is a 3d missile protected real destroyExplode = 1.5 how long the destruction sfx will be played protected boolean clashing - setting if the missile is ready to clash protected boolean clashable - saves true value for clashable until channeling is complete protected boolean clashed - if a missile has clashed, prevents further clashs protected boolean channeling = if a missile is still channeling, it cannot clash yet */ package Projectile import public Entity public class Projectile extends FxEntity // Angles protected angle xyAngle private vec3 startpos private boolean timed = false private boolean ranged = false // Moving Speed private real speed = 0 private real acc = 1.0 protected real dist = 0 private real maxDist = 0 protected real lifespan = 0 protected real dropSpeed = 0 construct( vec3 pos, real radius, player owner, angle xyAngle, string fxpath ) super(pos, radius, owner, xyAngle, fxpath) startpos = pos setXYAngle(xyAngle) active = false function setRanged(real maxDistance) this.maxDist = maxDistance*maxDistance ranged = true function setTimed(real lifespan) this.lifespan = lifespan timed = true function setSpeed(real speed) this.speed = speed //angle.direction(real distance) setVel(vec3(xyAngle.cos()*speed, xyAngle.sin()*speed, dropSpeed)) function setSpeed(real speed, real drop) this.speed = speed //angle.direction(real distance) setVel(vec3(xyAngle.cos()*speed, xyAngle.sin()*speed, drop)) function setAcc(real factor) this.acc = factor function getSpeed() returns real return speed function setXYAngle(angle xyA) this.xyAngle = xyA fx.setXYAngle(xyA) function setZAngle(angle zA) fx.setZAngle(zA) override function update() vel *= acc pos += vel fixPos() if timed lifespan -= ANIMATION_PERIOD if lifespan <= 0 done = true return if ranged if startpos.distToVecSquared(pos) > maxDist done = true package TimedBlasts import Projectile import LinkedListModule import Fx import Constants import ClosureTimers import Terrain import LinkedList public class TimedBlasts extends Projectile use LinkedListModule //Editable values protected real impactAoe protected real damage protected real endScale protected boolean trailOn = false protected boolean dustOn = false protected boolean pulseOn = false protected boolean launchOn = false protected boolean dropOn = false protected boolean flightOn = true protected string trailSFX protected string pulseSFX protected string launchSFX protected string finalSFX protected string dustSFX = dustWave protected real trailSize protected real pulseSize protected real launchSize protected colorA missileCol = colorA(255,255,255,255) protected colorA trailCol = colorA(255,255,255,255) protected colorA pulseCol = colorA(255,255,255,255) protected real speed protected int channelIndex protected int launchIndex protected real offsetDistance = 50 protected real realDropSpeed = -15 private real timeSinceLastTrail = 0 private real timeSinceLastPulse = 0 private real timeSinceLastChannel = 0 protected real timeDistance = 1 protected sound throwSound = gg_snd_kamehameha_fire protected real lowerRate = 150. protected real destroyExplode = 1.5 protected boolean clashing = false protected boolean clashable = false protected boolean clashed = false protected boolean channeling = false protected LinkedList<Fx> trailList = new LinkedList<Fx>() //Instance Variables private vec3 target protected unit u private timer t = getTimer() protected real scale protected angle targetAngle private boolean missileCast = false construct(unit actor,vec3 pos, player owner, vec3 target, string SFX, real originalScale) super(pos.addReals(0, 0, pos.withTerrainZ().z), 0, owner, pos.angleTo2d(target), SFX) this.targetAngle = pos.angleTo2d(target) this.u = actor this.target = target this.u.pause() this.scale = originalScale function startMissile() this.setSpeed(0) this.pos = pos.offset2d(pos.angleTo2d(target), offsetDistance) this.pos.z += 50 this.fixPos() this.fx.setColor(missileCol) this.fx.setScale(this.scale) this.t.setData(this castTo int) this.t.startPeriodic(.1, function callExpandMissile) //if dust is activated if this.dustOn this.createDust() function createDust() effect x = AddSpecialEffectTarget(dustSFX, u, "origin") DestroyEffectBJ(x) static function callExpandMissile() (GetExpiredTimer().getData() castTo TimedBlasts).expandMissile() function expandMissile() if this.timeSinceLastChannel == 0 this.u.setAnimation(channelIndex) if this.timeSinceLastChannel >= (.18) this.u.setAnimation(channelIndex) this.timeSinceLastChannel -= (.17) this.timeSinceLastChannel += ANIMATION_PERIOD this.scale += .05 this.fx.setScale(this.scale) if this.scale >= endScale if this.flightOn this.u.setFlyHeight(0, lowerRate) if this.launchOn this.createLaunchFX() if this.dropOn this.dropSpeed = realDropSpeed this.setSpeed(speed) this.t.release() this.u.setAnimation(launchIndex) PlaySoundOnUnitBJ(this.throwSound, 70, this.u) this.missileCast = true if not this.channeling this.u.unpause() if this.clashing this.clashable = true //calculate frequency of trail creation function createLaunchFX() Fx launch = new Fx(fx.getPos2(),this.targetAngle, kameLaunch) launch.setScale(launchSize) doAfter(.5, () -> destroy launch) function createTrail() Fx trail = new Fx(fx.getPos3d(), this.targetAngle, trailSFX) ..setScale(trailSize) ..setColor(trailCol) if flightOn == false trail.setZ(100) // doAfter(timeDistance, () -> trail.hiddenDestroy()) this.trailList.add(trail) function createPulse() Fx pulse = new Fx(fx.getPos3d(), this.targetAngle, pulseSFX) ..setScale(pulseSize) ..setZAngle(-5200) ..setColor(pulseCol) if this.flightOn == false pulse.setZ(100) // pulse.getDummy().setAnimation(0) doAfter(timeDistance, () -> pulse.hiddenDestroy()) override function update() super.update() //should be speed dependent at some level. if pos.toVec2().distToVecSquared(target.toVec2()) < 120*120 //timeDistance = 0.15 if this.getSpeed() > 0 if this.trailOn if this.timeSinceLastTrail > (2/speed) this.createTrail() this.timeSinceLastTrail -= (2/speed) this.timeSinceLastTrail += ANIMATION_PERIOD if this.pulseOn if this.timeSinceLastPulse > (2/speed) this.createPulse() this.timeSinceLastPulse -= (2/speed) this.timeSinceLastPulse += ANIMATION_PERIOD if not this.clashed if this.clashable Entity e = Entity.getFirst() while e != null if e!= this and this.owner != e.owner if this.owner.isAllyOf(e.owner) TimedBlasts blast2 = e castTo TimedBlasts if blast2.clashable and not blast2.clashed if this.pos.distToVecSquared(e.pos) < 40000. print(this.pos.distToVecSquared(e.pos).toString()) if this.pos.distToVecSquared(e.pos) < (120*120) //print("hi6!") this.onHit(blast2) e=e.next if ((this.u.getPos().distToVecSquared(target.toVec2()) < 150*150) or (pos.toVec2().distToVecSquared(target.toVec2()) < 64*64)) and missileCast for unit enemy from ENUM_GROUP..enumUnitsInRange(pos.toVec2(), impactAoe) if enemy.isEnemy(owner) this.u.damageTarget(enemy, damage) done = true terminate() function onHit(TimedBlasts blast2) boolean winner1 = false boolean winner2 = false //print("hi7!") this.clashed = true blast2.clashed = true blast2.setSpeed(0) this.setSpeed(0) blast2.active = false this.active = false //this.fx.setScale(endScale+ 1) //blast2.fx.setScale(endScale+ 1) doPeriodically(.25, (CallbackPeriodic cb) -> begin Fx effect1 = new Fx(fx.getPos2(),this.targetAngle, iceNova) ..setScale(1.8) ..setZ(100) ..setZAngle(-5200) Fx effect2 = new Fx(blast2.fx.getPos2(),this.targetAngle, iceNova) ..setScale(1.8) ..setZ(100) ..setZAngle(-5200) Fx effect5 = new Fx(((fx.getPos2() + blast2.fx.getPos2()) *.5).toVec3().addReals(0, 0, 50), this.targetAngle, sparklyExplosion) ..setScale(5) doAfter(.25, () -> begin destroy(effect1) destroy(effect2) destroy(effect5) end) if this.u.getMana() == 0 winner2 = true if blast2.u.getMana() == 0 winner1 = true this.u.setMana(u.getMana()-1) blast2.u.setMana(blast2.u.getMana()-2) if winner1 print(this.u.getName()) blast2.terminate() this.target = blast2.u.getPos3() this.setSpeed(this.speed) this.active = true destroy cb if winner2 and not winner1 print(blast2.u.getName()) terminate() blast2.target = this.u.getPos3() blast2.setSpeed(blast2.speed) blast2.active = true destroy cb end) ondestroy if this.channeling this.u.unpause() Fx final = new Fx(fx.getPos3d(), this.targetAngle, finalSFX) final.setScale(2) doAfter(destroyExplode, () -> final.hiddenDestroy()) for i = 0 to (this.trailList.getSize() -1) this.trailList.get(i).hiddenDestroy() this.done = true package Kamehameha import Constants import TimedBlasts constant real originalScale = .2 public class Kamehameha extends TimedBlasts construct(unit actor,vec3 pos, player owner, vec3 target, int level) super(actor,pos.addReals(0, 0, 50),owner,target,bigKamehamehaBall,originalScale) //if (actor.getTypeId() == 'H001') this.impactAoe = 500 this.damage = 150*level.toReal() + (GetHeroInt(actor, true)*10) this.trailOn = true this.dustOn = true this.pulseOn = true this.launchOn = true int actorID = actor.getTypeId() if actorID == 'H000' this.channelIndex = 11 this.launchIndex = 12 this.throwSound = gg_snd_Kamehameha_Voice if actorID == 'H005' or actorID == 'H009' this.channelIndex = 20 this.launchIndex = 18 if actorID == 'H00A' this.channelIndex = 5 this.launchIndex = 4 if actorID == 'H001' or actorID == 'H008' this.channelIndex = 7 this.launchIndex = 8 this.throwSound = gg_snd_GohanKame if actorID == 'H00D' or actorID == 'H00E' or actorID == 'H00F' this.channelIndex = 8 this.launchIndex = 12 if actorID == 'H007' this.channelIndex = 9 this.launchIndex = 13 if actorID == 'H00G' this.channelIndex = 12 this.launchIndex = 11 this.speed = 32 this.endScale = .6 this.trailSFX = bigKamehamehaBall this.trailSize = .3 this.pulseSFX = bluePulse this.launchSFX = kameLaunch this.launchSize = 5 this.finalSFX = bigBlueExplosion this.pulseSize = 1 this.trailCol = colorA(255,255,255,255) this.clashing = true this.channeling = true startMissile() package AngryKame import Constants import TimedBlasts import ClosureTimers constant real originalScale = .2 public class AngryKame extends TimedBlasts construct(unit actor,vec3 pos, player owner, vec3 target, int level) super(actor,pos.addReals(0, 0, 700),owner,target,dummy2,originalScale) this.impactAoe = 500 actor.setFlyHeight(700, 700.) this.flightOn = true this.dropOn = true this.offsetDistance = 0 this.missileCol = colorA(150,150,0,255) this.speed = 25 this.endScale = 1.5 this.dustSFX = dustWave this.damage = 5000*level.toReal() + (GetHeroInt(actor, true)*20) this.finalSFX = nuclearExplosion this.trailOn = true this.dustOn = true this.pulseOn = true this.launchOn = false this.channelIndex = 20 this.launchIndex = 10 this.trailSFX = pinkBall this.trailSize = .6 this.launchSFX = kameLaunch this.launchSize = 5 this.trailCol = colorA(150,150,0,255) this.lowerRate = 300. this.realDropSpeed = -25 this.destroyExplode = 3 this.pulseSFX = windBlue this.pulseSize = 1.2 this.pulseCol = colorA(150,150,0,255) effect x = AddSpecialEffectTarget(kamelightning, u, "origin") doAfter(1.5, () -> begin doAfter(1, () -> begin PlaySoundOnUnitBJ(gg_snd_angrykame, 70, this.u) end) startMissile() fx.setFx(pinkBall) end) doAfter(12, () -> begin DestroyEffectBJ(x) end)