Downloads containing fusioncannon.mut

Downloads
Name Author Game Mode Rating
JJ2+ Only: Arcane WeaponsFeatured Download PurpleJazz Mutator 10 Download file

File preview

  1. #pragma name "Fusion Cannon"
  2. #pragma require "FusionCannon.j2a"
  3. #pragma require "f_fus1.wav"
  4. #pragma require "f_fus3.wav"
  5.  
  6. bool gameIsActive() {
  7.         return jjGameState == GAME::STARTED || jjGameState == GAME::OVERTIME;
  8. }
  9.  
  10. void onLevelLoad() {
  11.         jjAnimSets[ANIM::CUSTOM[29]].load(0, "FusionCannon.j2a");
  12.         jjAnimations[jjAnimSets[ANIM::AMMO] + 68] = jjAnimations[jjAnimSets[ANIM::CUSTOM[29]] + 0];
  13.         jjAnimations[jjAnimSets[ANIM::AMMO] + 67] = jjAnimations[jjAnimSets[ANIM::CUSTOM[29]] + 1];
  14.         jjAnimations[jjAnimSets[ANIM::PLUS_COMMON] + 1] = jjAnimations[jjAnimSets[ANIM::CUSTOM[29]] + 3]; //gun 9 crate
  15.  
  16.         jjObjectPresets[OBJECT::ELECTROBULLET].behavior = jjObjectPresets[OBJECT::ELECTROBULLETPU].behavior = FusionCannon();
  17.         jjObjectPresets[OBJECT::ELECTROBULLET].counterEnd = jjObjectPresets[OBJECT::ELECTROBULLETPU].counterEnd = 255;
  18.         jjObjectPresets[OBJECT::ELECTROBULLET].eventID = jjObjectPresets[OBJECT::BLASTERBULLET].eventID;
  19.         jjObjectPresets[OBJECT::ELECTROBULLET].eventID = jjObjectPresets[OBJECT::BLASTERBULLETPU].eventID;
  20.         jjObjectPresets[OBJECT::ELECTROBULLET].killAnim = jjObjectPresets[OBJECT::ELECTROBULLETPU].killAnim = jjObjectPresets[OBJECT::ICEBULLET].killAnim;
  21.         jjObjectPresets[OBJECT::ELECTROBULLET].var[6] = 2 + 16;
  22.         jjObjectPresets[OBJECT::ELECTROBULLETPU].var[6] = 2 + 8 + 16;
  23.  
  24.         jjObjectPresets[OBJECT::GUN9AMMO3].behavior = FusionPickup();
  25.         jjObjectPresets[OBJECT::GUN9AMMO3].determineCurFrame();
  26.         jjObjectPresets[OBJECT::GUN9AMMO3].scriptedCollisions = true;
  27.        
  28.         jjObjectPresets[OBJECT::GUN9POWERUP].determineCurAnim(ANIM::CUSTOM[29], 2);
  29.         jjObjectPresets[OBJECT::GUN9POWERUP].determineCurFrame();
  30.        
  31.         jjWeapons[WEAPON::GUN9].style = WEAPON::CAPPED;
  32.         jjWeapons[WEAPON::GUN9].maximum = 25;
  33.        
  34.         jjSampleLoad(SOUND::AMMO_LASER2, "f_fus1.wav");
  35.         jjSampleLoad(SOUND::AMMO_LASER3, "f_fus3.wav");
  36. }
  37.  
  38. class FusionCannon : jjBEHAVIORINTERFACE {
  39.         void onBehave(jjOBJ@ obj) {
  40.                 obj.behave(BEHAVIOR::BULLET, obj.state == STATE::EXPLODE? true:false);
  41.                 jjPLAYER@ creator = jjPlayers[obj.creatorID];
  42.                
  43.                 obj.var[5] = obj.eventID == OBJECT::ELECTROBULLETPU? 2:1;
  44.                
  45.                 switch (obj.state) {
  46.                         case STATE::START:
  47.                                 obj.state = STATE::FLY;
  48.                         break;
  49.                        
  50.                         case STATE::FLY:
  51.                                 obj.var[11] = obj.xSpeed > 0? 5 : obj.xSpeed < 0? -5 : 0;
  52.                                 obj.xSpeed = obj.var[11];
  53.                                 obj.ySpeed = obj.var[11] == 0? -4:0;
  54.                                
  55.                                 jjDrawSprite(obj.xPos, obj.yPos, ANIM::AMMO, 77, 6, 0, SPRITE::ALPHAMAP, obj.eventID == OBJECT::ELECTROBULLETPU? 35:40);
  56.                                 jjDrawSprite(obj.xPos, obj.yPos, ANIM::AMMO, 77, 6, 0, SPRITE::ALPHAMAP, obj.eventID == OBJECT::ELECTROBULLETPU? 35:40);
  57.                                
  58.                                 if (obj.counter % 5 == 0 && !jjLowDetail) {
  59.                                         ColoredTrail temp;
  60.                                         jjOBJ@ trail = jjObjects[jjAddObject(OBJECT::EXPLOSION, int(obj.xPos - jjCos(obj.var[0])), int(obj.yPos - jjSin(obj.var[0])), obj.creatorID, CREATOR::PLAYER, jjVOIDFUNCOBJ(temp.onBehave))];
  61.                                         trail.determineCurAnim(ANIM::AMMO, 12);
  62.                                         trail.lightType = LIGHT::POINT;
  63.                                         trail.playerHandling = HANDLING::PARTICLE;
  64.                                         trail.bulletHandling = HANDLING::IGNOREBULLET;
  65.                                         trail.isBlastable = false;
  66.                                         trail.var[0] = obj.eventID == OBJECT::ELECTROBULLETPU? 32:59;
  67.                                 }
  68.                                
  69.                         break;
  70.                        
  71.                         case STATE::EXPLODE:
  72.                                 if (obj.var[2] == 0) {
  73.                                         Shockwave temp;
  74.                                         jjOBJ@ blast = jjObjects[jjAddObject(OBJECT::BULLET, obj.xPos, obj.yPos, obj.creatorID, CREATOR::PLAYER, jjVOIDFUNCOBJ(temp.onBehave))];
  75.                                         obj.var[2] = 1;
  76.                                         blast.var[2] = 1;
  77.                                         blast.var[5] = obj.var[5];
  78.                                 }
  79.                         break;
  80.                 }
  81.         }
  82. }
  83.  
  84. class Shockwave : jjBEHAVIORINTERFACE {
  85.         void onBehave(jjOBJ@ obj) {
  86.                 jjPLAYER@ creator = jjPlayers[obj.creatorID];
  87.                
  88.                 obj.playerHandling = HANDLING::PARTICLE;
  89.                 obj.bulletHandling = HANDLING::IGNOREBULLET;
  90.                 obj.animSpeed = 1;
  91.                
  92.                 if (obj.var[2] == 1) {
  93.                         obj.lightType = obj.var[2] == 1? LIGHT::RING2 : LIGHT::NONE;
  94.                         obj.var[0] = obj.var[0] + 1;
  95.                         obj.light += 3;
  96.                         obj.var[4] = obj.light * 4;
  97.                        
  98.                         for (int i = 1; i < jjObjectCount; i++) {
  99.                                 jjOBJ@ target = jjObjects[i];
  100.                                 float dx = target.xPos - obj.xPos, dy = target.yPos - obj.yPos;
  101.                                 if ((target.eventID == OBJECT::TNT || target.behavior == BEHAVIOR::MONITOR || target.behavior == BEHAVIOR::AMMO15 || target.eventID == OBJECT::GUNCRATE || target.eventID == OBJECT::GEMCRATE || target.eventID == OBJECT::CARROTCRATE || target.playerHandling == HANDLING::ENEMY || target.eventID == OBJECT::DESTRUCTSCENERY) && target.var[4] == 0) {
  102.                                         if (dx * dx + dy * dy < obj.var[4] * obj.var[4]) {
  103.                                                 if (target.eventID != OBJECT::TNT) {
  104.                                                         obj.objectHit(target, target.bulletHandling == HANDLING::HURTBYBULLET? HANDLING::ENEMY : HANDLING::SPECIAL);
  105.                                                         if (target.playerHandling != HANDLING::ENEMY) target.state = STATE::KILL;
  106.                                                 }
  107.                                                 else target.state = STATE::EXPLODE;
  108.                                                 if (target.playerHandling != HANDLING::ENEMY) target.var[4] = 1;
  109.                                         }
  110.                                         else target.var[4] = 0;
  111.                                 }
  112.                                 else if ((target.behavior == BEHAVIOR::PICKUP || target.eventID == OBJECT::TNTAMMO3 || target.eventID == OBJECT::GUN9AMMO3) && target.state == STATE::FLOAT) {
  113.                                         if (dx * dx + dy * dy < obj.var[4] * obj.var[4])
  114.                                                 target.state = STATE::FLOATFALL;
  115.                                 }
  116.                                 else if (target.playerHandling == HANDLING::ENEMY && target.state != STATE::KILL) {
  117.                                         if (dx * dx + dy * dy < obj.var[4] * obj.var[4]) {
  118.                                                 if (obj.var[8] & 1 << i == 0) {
  119.                                                         obj.energy -= 1;
  120.                                                         obj.var[8] = obj.var[8] | 1 << i;
  121.                                                 }
  122.                                         }
  123.                                 }
  124.                         }
  125.                        
  126.                         if (jjIsServer && gameIsActive()) {
  127.                                 for (int i = 0; i < 32; i++) {
  128.                                         jjPLAYER@ player = jjPlayers[i];
  129.                                         if (
  130.                                                 player.isActive && player.isInGame && player.health > 0 && player !is creator && creator.blink == 0 &&
  131.                                                         (jjGameMode != GAME::CTF || jjFriendlyFire || player.team != creator.team)
  132.                                         ) {
  133.                                                 float dx = player.xPos - obj.xPos, dy = player.yPos - obj.yPos;
  134.                                                 if (dx * dx + dy * dy < obj.var[4] * obj.var[4]) {
  135.                                                         if (obj.var[8] & 1 << i == 0) {
  136.                                                                 player.hurt(obj.var[5], false, creator);
  137.                                                                 obj.var[8] = obj.var[8] | 1 << i;
  138.                                                         }
  139.                                                 }
  140.                                         }
  141.                                 }
  142.                         }
  143.                 }
  144.                
  145.                 if (obj.var[0] == 20) {
  146.                         obj.var[0] = 0;
  147.                         obj.var[2] = 0;
  148.                         obj.var[4] = 0;
  149.                         obj.delete();
  150.                 }
  151.         }
  152. }
  153.  
  154. class ColoredTrail : jjBEHAVIORINTERFACE {
  155.         void onBehave(jjOBJ@ obj) {
  156.                 obj.behave(BEHAVIOR::EXPLOSION, false);
  157.                 if (obj.isActive) jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::TRANSLUCENTSINGLEHUE, obj.var[0]);
  158.         }
  159. }
  160.  
  161. class FusionPickup : jjBEHAVIORINTERFACE {
  162.         void onBehave(jjOBJ@ obj) {
  163.                 obj.behave(BEHAVIOR::PICKUP);
  164.         }
  165.         bool onObjectHit(jjOBJ@ obj, jjOBJ@ bullet, jjPLAYER@ play, int force) {
  166.                 if (play.ammo[WEAPON::GUN9] < jjWeapons[WEAPON::GUN9].maximum) {
  167.                         if (play.isLocal) {
  168.                                 play.ammo[WEAPON::GUN9] = play.ammo[WEAPON::GUN9] + 2;
  169.                                 if (jjAutoWeaponChange && play.ammo[WEAPON::GUN9] < 1) play.currWeapon = WEAPON::GUN9;
  170.                                 jjSample(obj.xPos, obj.yPos, SOUND::COMMON_PICKUPW1, 0, 0);
  171.                         }
  172.                         obj.behavior = BEHAVIOR::EXPLOSION2;
  173.                         obj.scriptedCollisions = false;
  174.                         obj.frameID = 0;
  175.                 }
  176.                 return true;
  177.         }
  178. }
  179.  
  180. void onPlayer(jjPLAYER@ play) {
  181.         jjEnforceLighting = LIGHT::BASIC;
  182.         if (play.ammo[WEAPON::GUN9] > 25) play.ammo[WEAPON::GUN9] = 25;
  183. }