Downloads containing meteorgun.mut

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

File preview

  1. #pragma name "Meteor Gun"
  2. #pragma require "Meteor.j2a"
  3. #pragma require "expmine.wav"
  4.  
  5. void onLevelLoad() {
  6.         jjAnimSets[ANIM::CUSTOM[22]].load(0, "Meteor.j2a");
  7.  
  8.         jjAnimations[jjAnimSets[ANIM::AMMO] + 24] = jjAnimations[jjAnimSets[ANIM::CUSTOM[22]] + 1];
  9.         jjAnimations[jjAnimSets[ANIM::AMMO] + 25] = jjAnimations[jjAnimSets[ANIM::CUSTOM[2]] + 2];
  10.        
  11.         jjObjectPresets[OBJECT::BOUNCERBULLET].behavior = jjObjectPresets[OBJECT::BOUNCERBULLETPU].behavior = Meteor();
  12.         jjObjectPresets[OBJECT::BOUNCERBULLET].special = jjObjectPresets[OBJECT::BOUNCERBULLET].determineCurAnim(ANIM::CUSTOM[22], 1);
  13.         jjObjectPresets[OBJECT::BOUNCERBULLETPU].special = jjObjectPresets[OBJECT::BOUNCERBULLETPU].determineCurAnim(ANIM::CUSTOM[22], 0);
  14.         jjObjectPresets[OBJECT::BOUNCERBULLET].ySpeed = jjObjectPresets[OBJECT::BOUNCERBULLETPU].ySpeed = jjObjectPresets[OBJECT::BLASTERBULLET].ySpeed;
  15.         jjObjectPresets[OBJECT::BOUNCERBULLETPU].killAnim = jjObjectPresets[OBJECT::SEEKERBULLET].killAnim;
  16.         jjObjectPresets[OBJECT::BOUNCERBULLET].lightType = LIGHT::POINT;
  17.         jjObjectPresets[OBJECT::BOUNCERBULLETPU].lightType = LIGHT::BRIGHT;
  18.         jjObjectPresets[OBJECT::BOUNCERBULLET].light = jjObjectPresets[OBJECT::BOUNCERBULLETPU].light = 10;
  19.        
  20.         jjObjectPresets[OBJECT::BOUNCERAMMO15].determineCurAnim(ANIM::CUSTOM[22], 3);
  21.         jjObjectPresets[OBJECT::BOUNCERAMMO15].determineCurFrame();
  22.        
  23.         jjObjectPresets[OBJECT::BOUNCERPOWERUP].determineCurAnim(ANIM::CUSTOM[22], 4);
  24.         jjObjectPresets[OBJECT::BOUNCERPOWERUP].determineCurFrame();
  25.        
  26.         jjWeapons[WEAPON::BOUNCER].defaultSample = false;
  27.         jjWeapons[WEAPON::BOUNCER].style = WEAPON::MISSILE;
  28.        
  29.         jjSampleLoad(SOUND::ORANGE_BOEMR, "expmine.wav");
  30. }
  31.  
  32. class Meteor : jjBEHAVIORINTERFACE {
  33.         void onBehave(jjOBJ@ obj) {
  34.                 obj.behave(BEHAVIOR::BULLET, obj.state == STATE::EXPLODE? true:false);
  35.                 jjPLAYER@ creator = jjPlayers[obj.creatorID];
  36.                
  37.                 if (obj.state != STATE::EXPLODE) {
  38.                         if (obj.counter == 1 && creator.isLocal) {
  39.                                 jjSample(creator.xPos, creator.yPos, SOUND::ORANGE_BOEMR, 42, obj.eventID == OBJECT::BOUNCERBULLET? 22000 : 20000);
  40.                                 obj.var[2] = 0;
  41.                         }
  42.                         obj.age += obj.direction == 0? 10 : 10 * obj.direction;
  43.                        
  44.                         jjDrawRotatedSprite(obj.xPos, obj.yPos, ANIM::CUSTOM[22], obj.eventID == OBJECT::BOUNCERBULLET? 1:0, 0, -obj.age, 1, 1, obj.eventID == OBJECT::BOUNCERBULLET || obj.var[4] == 1? SPRITE::SINGLEHUE : SPRITE::NORMAL, 72);
  45.                        
  46.                         jjPARTICLE@ smoke = jjAddParticle(PARTICLE::SMOKE);
  47.                         if (smoke !is null) {
  48.                                 smoke.xPos = smoke.xPos;
  49.                                 smoke.yPos = smoke.yPos;
  50.                         }
  51.                        
  52.                         if (obj.eventID == OBJECT::BOUNCERBULLETPU && obj.var[4] == 0) {
  53.                                 jjDrawRotatedSprite(obj.xPos, obj.yPos, ANIM::CUSTOM[22], 0, 0, -obj.age, 1, 1, SPRITE::TRANSLUCENTSINGLEHUE, 40);
  54.                                 jjPARTICLE@ cinders = jjAddParticle(PARTICLE::FIRE);
  55.                                 if (cinders !is null) {
  56.                                         cinders.xPos = int(obj.xPos - 8) + jjRandom()%17;
  57.                                         cinders.yPos = int(obj.yPos - 8) + jjRandom()%17;
  58.                                 }
  59.                         }
  60.                        
  61.                         if (obj.yPos > jjWaterLevel) {
  62.                                 obj.var[4] = 1;
  63.                                 obj.xSpeed = obj.xSpeed * 0.875;
  64.                                 obj.ySpeed = obj.ySpeed * 0.875;
  65.                         }
  66.                
  67.                         switch (obj.direction) {
  68.                                 case 1: obj.xSpeed -= obj.eventID == OBJECT::BOUNCERBULLET? 0.1:0.15; obj.ySpeed += obj.eventID == OBJECT::BOUNCERBULLET? 0.15:0.2; break;
  69.                                 case -1: obj.xSpeed += obj.eventID == OBJECT::BOUNCERBULLET? 0.1:0.15; obj.ySpeed += obj.eventID == OBJECT::BOUNCERBULLET? 0.15:0.2; break;
  70.                         }
  71.                        
  72.                         if (obj.xSpeed == 0) obj.ySpeed += 0.4;
  73.                         if (obj.ySpeed > 8) obj.ySpeed = 8;
  74.                        
  75.  
  76.                        
  77.                 } else {
  78.                         obj.age = 0;
  79.                         if (obj.var[2] == 0) {
  80.                                 jjSample(obj.xPos, obj.yPos, SOUND::COMMON_BENZIN1, 0, 0);
  81.                                 obj.var[2] = 1;
  82.                                
  83.                                 if (obj.eventID == OBJECT::BOUNCERBULLETPU) {
  84.                                         for (int i = -1; i <= 1; i+= 2) {
  85.                                         Rock temp;
  86.                                                 jjOBJ@ rock = jjObjects[jjAddObject(OBJECT::SHARD, int(obj.xPos + (i * 12)), int(obj.yPos - 8), obj.creatorID, CREATOR::PLAYER, jjVOIDFUNCOBJ(temp.onBehave))];
  87.                                                 rock.determineCurAnim(ANIM::CUSTOM[22], 1);
  88.                                                 rock.playerHandling = HANDLING::PLAYERBULLET;
  89.                                                 rock.var[3] = 2;
  90.                                                 rock.var[4] = obj.var[4];
  91.                                                 rock.var[6] = 8;
  92.                                                 rock.animSpeed = 2;
  93.                                                 rock.direction = i;
  94.                                                 rock.xSpeed = 6 * i;
  95.                                                 rock.ySpeed = -3;
  96.                                                 rock.state = STATE::FLY;
  97.                                                 rock.lightType = LIGHT::POINT;
  98.                                                 rock.light = 10;
  99.                                                 rock.counterEnd = jjObjectPresets[OBJECT::BOUNCERBULLET].counterEnd;
  100.                                                 rock.killAnim = jjObjectPresets[OBJECT::BOUNCERBULLET].killAnim;
  101.                                         }
  102.                                 }
  103.                         }
  104.                 }
  105.         }
  106. }
  107.  
  108. class Rock : jjBEHAVIORINTERFACE {
  109.         void onBehave(jjOBJ@ obj) {
  110.                 obj.behave(BEHAVIOR::BULLET, obj.state == STATE::EXPLODE? true:false);
  111.                
  112.                 if (obj.state == STATE::FLY) {
  113.                         obj.age += obj.direction == 0? 10 : 10 * obj.direction;
  114.                         jjDrawRotatedSprite(obj.xPos, obj.yPos, ANIM::CUSTOM[22], 1, 0, -obj.age, 1, 1, obj.var[4] == 1? SPRITE::SINGLEHUE : SPRITE::NORMAL, 72);
  115.                        
  116.                         switch (obj.direction) {
  117.                                 case 1: obj.xSpeed -= 0.05; obj.ySpeed += 0.1; break;
  118.                                 case -1: obj.xSpeed += 0.05; obj.ySpeed += 0.1; break;
  119.                         }
  120.                        
  121.                         if (obj.yPos > jjWaterLevel) {
  122.                                 obj.var[4] = 1;
  123.                                 obj.xSpeed = obj.xSpeed * 0.875;
  124.                                 obj.ySpeed = obj.ySpeed * 0.875;
  125.                         }
  126.                        
  127.                         jjPARTICLE@ smoke = jjAddParticle(PARTICLE::SMOKE);
  128.                         if (smoke !is null) {
  129.                                 smoke.xPos = obj.xPos;
  130.                                 smoke.yPos = obj.yPos;
  131.                         }
  132.                        
  133.                 }
  134.                
  135.         }
  136. }
  137.  
  138. void onMain() {
  139.         for (int i = 0; i < 1024; i++) {
  140.                 jjPARTICLE@ particle = jjParticles[i];
  141.                 if (particle.type == PARTICLE::FIRE) {
  142.                         particle.fire.size = particle.fire.color == 40? 3:2;
  143.                 }
  144.         }
  145. }
  146.