Downloads containing ArcaneWeapon2.asc

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: BioMess Rysice Battle N/A Download file
TSF with JJ2+ Only: Lori FortressFeatured Download Primpy Single player 8.9 Download file
Custom Weapons...Featured Download Violet CLM Other 10 Download file

File preview

  1. #pragma require "ArcaneWeapon2.asc"
  2. #include "MLLE-Weapons.asc"
  3. #pragma require "Meteor.j2a"
  4. #pragma offer "expmine.wav"
  5.  
  6. namespace ArcaneWeapons {
  7.         namespace MeteorGun {
  8.                 SOUND::Sample FireSound = SOUND::COMMON_LAND1;
  9.                 class Weapon : MLLEWeapons::WeaponInterface {
  10.                         bool LittleRocksNormal = true, LittleRocksPowerup = true;
  11.                         Weapon() {
  12.                                 super(
  13.                                         regularObjectTemplate: MLLEWeapons::ObjectTemplate(
  14.                                                 xSpeed: 5,
  15.                                                 xAcc: 0.15,
  16.                                                 yAcc: 0.2415527344f,
  17.                                                 special: -1,
  18.                                                 killAnim: jjAnimSets[ANIM::AMMO].firstAnim + 4,
  19.                                                 lightType: LIGHT::POINT,
  20.                                                 light: 10,
  21.                                                 curAnim: 1,
  22.                                                 counterEnd: (70*3)/2
  23.                                         ),
  24.                                         powerupObjectTemplate: MLLEWeapons::ObjectTemplate(
  25.                                                 xSpeed: 5,
  26.                                                 xAcc: 0.1,
  27.                                                 yAcc: 0.2915527344f,
  28.                                                 special: -1,
  29.                                                 killAnim: jjAnimSets[ANIM::AMMO].firstAnim + 5,
  30.                                                 lightType: LIGHT::BRIGHT,
  31.                                                 light: 10,
  32.                                                 curAnim: 0,
  33.                                                 counterEnd: (70*3)/2,
  34.                                                 animSpeed: 2
  35.                                         ),
  36.                                         animSetFilename: "Meteor.j2a",
  37.                                         pickupAnimation: 2,
  38.                                         poweredUpPickupAnimation: 1,
  39.                                         ammoCrateAnimation: 3,
  40.                                         powerupAnimation: 4,
  41.                                         sampleFilenames: array<string> = {"expmine.wav"},
  42.                                         style: WEAPON::MISSILE,
  43.                                         behavior: MLLEWeapons::behaviorFunction(DetermineBehavior),
  44.                                         apply: MLLEWeapons::applyFunction(DetermineLittleRocks),
  45.                                         onMain: ResizeSparks
  46.                                 );
  47.                         }
  48.                
  49.                         bool DetermineLittleRocks(uint, se::WeaponHook@, jjSTREAM@ parameter) {
  50.                                 if (SamplesLoaded[0]) FireSound = Samples[0];
  51.                                 if (parameter !is null && parameter.getSize() >= 2) {
  52.                                         parameter.pop(LittleRocksNormal);
  53.                                         parameter.pop(LittleRocksPowerup);
  54.                                 }
  55.                                 return true;
  56.                         }
  57.                         void DetermineBehavior(jjOBJ@ obj, bool powerup) {
  58.                                 if (obj.eventID == OBJECT::ICEBULLET)
  59.                                         obj.eventID = OBJECT::BLASTERBULLET;
  60.                                 if (abs(obj.ySpeed) > abs(obj.xSpeed))
  61.                                         obj.yAcc += 0.4;
  62.                                 if (!(powerup ? LittleRocksPowerup : LittleRocksNormal))
  63.                                         obj.var[2] = 1;
  64.                                 obj.behavior = jjVOIDFUNCOBJ(Behavior);
  65.                         }
  66.                         void Behavior(jjOBJ@ obj) const {
  67.                                 obj.behave(BEHAVIOR::BULLET, obj.state == STATE::EXPLODE);
  68.                                 const bool powerup = MLLEWeapons::HelpfulBulletFunctions::IsPowerup(obj);
  69.                                
  70.                                 if (obj.state != STATE::EXPLODE) {
  71.                                         if (obj.counter == 1 && obj.creatorType == CREATOR::PLAYER) {
  72.                                                 const jjPLAYER@ creator = jjPlayers[obj.creatorID];
  73.                                                 if (creator.isLocal) {
  74.                                                         jjSample(creator.xPos, creator.yPos, FireSound, 42, !powerup ? 22000 : 20000);
  75.                                                 }
  76.                                         }
  77.                                         obj.age += obj.direction == 0 ? 10 : 10 * obj.direction;
  78.                                        
  79.                                         jjDrawRotatedSprite(obj.xPos, obj.yPos, SetID, !powerup? 1:0, 0, -obj.age, 1, 1, !powerup || obj.var[4] == 1? SPRITE::SINGLEHUE : SPRITE::NORMAL, 72);
  80.                                        
  81.                                         if (powerup && obj.var[4] == 0) {
  82.                                                 jjDrawRotatedSprite(obj.xPos, obj.yPos, SetID, 0, 0, -obj.age, 1, 1, SPRITE::TRANSLUCENTSINGLEHUE, 40);
  83.                                                 jjPARTICLE@ cinders = jjAddParticle(PARTICLE::FIRE);
  84.                                                 if (cinders !is null) {
  85.                                                         cinders.xPos = int(obj.xPos - 8) + jjRandom()%17;
  86.                                                         cinders.yPos = int(obj.yPos - 8) + jjRandom()%17;
  87.                                                 }
  88.                                         }
  89.                                        
  90.                                         if (obj.yPos > jjWaterLevel) {
  91.                                                 obj.var[4] = 1;
  92.                                                 obj.xSpeed *= 0.875;
  93.                                                 obj.ySpeed *= 0.875;
  94.                                         }
  95.                                        
  96.                                         if (obj.ySpeed > 8) obj.ySpeed = 8;
  97.                                 } else {
  98.                                         obj.age = 0;
  99.                                         if (obj.var[2] == 0) {
  100.                                                 jjSample(obj.xPos, obj.yPos, SOUND::COMMON_BENZIN1, 0, 0);
  101.                                                 obj.var[2] = 1;
  102.                                                
  103.                                                 for (int i = -1; i <= 1; i+= 2) {
  104.                                                         jjOBJ@ rock = jjObjects[jjAddObject(OBJECT::SHARD, int(obj.xPos + (i * 12)), int(obj.yPos - 8), obj.creatorID, CREATOR::PLAYER, Rock)];
  105.                                                         rock.determineCurAnim(SetID, powerup ? 0 : 1);
  106.                                                         rock.playerHandling = obj.creatorType == CREATOR::PLAYER ? HANDLING::PLAYERBULLET : HANDLING::ENEMYBULLET;
  107.                                                         rock.var[3] = obj.var[3];
  108.                                                         rock.var[4] = obj.var[4];
  109.                                                         rock.var[6] = obj.var[6];
  110.                                                         rock.animSpeed = obj.animSpeed;
  111.                                                         rock.special = powerup? 40:72;
  112.                                                         rock.direction = i;
  113.                                                         rock.xSpeed = 6 * i;
  114.                                                         rock.ySpeed = -3;
  115.                                                         rock.state = STATE::FLY;
  116.                                                         rock.lightType = LIGHT::POINT;
  117.                                                         rock.light = 10;
  118.                                                         rock.counterEnd = (70*3)/2;
  119.                                                         rock.killAnim = jjAnimSets[ANIM::AMMO].firstAnim + 4;
  120.                                                 }
  121.                                         }
  122.                                 }
  123.                         }
  124.                 }
  125.  
  126.                 void Rock(jjOBJ@ obj) {
  127.                         obj.behave(BEHAVIOR::BULLET, obj.state == STATE::EXPLODE);
  128.                        
  129.                         if (obj.state == STATE::FLY) {
  130.                                 obj.age += obj.direction == 0? 10 : 10 * obj.direction;
  131.                                 jjDrawRotatedSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, -obj.age, 0.5,0.5, SPRITE::SINGLEHUE, obj.special);
  132.                                
  133.                                 switch (obj.direction) {
  134.                                         case 1: obj.xSpeed -= 0.05; obj.ySpeed += 0.1; break;
  135.                                         case -1: obj.xSpeed += 0.05; obj.ySpeed += 0.1; break;
  136.                                 }
  137.                                
  138.                                 if (obj.yPos > jjWaterLevel) {
  139.                                         obj.var[4] = 1;
  140.                                         obj.xSpeed = obj.xSpeed * 0.875;
  141.                                         obj.ySpeed = obj.ySpeed * 0.875;
  142.                                 }
  143.                         }
  144.                 }
  145.                
  146.                 void ResizeSparks(int) {
  147.                         for (int i = 0; i < 1024; i++) {
  148.                                 jjPARTICLE@ particle = jjParticles[i];
  149.                                 if (particle.type == PARTICLE::FIRE)
  150.                                         particle.fire.size = particle.fire.color == 40? 3:2;
  151.                         }
  152.                 }
  153.         }
  154. }