Downloads containing ArcaneWeapon7.asc

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Anniversary Bash 23 levels Jazz2Online Multiple N/A Download file
JJ2+ Only: violetclm DOM Episodes I... Violet CLM Custom / Concept N/A Download file
Custom Weapons...Featured Download Violet CLM Other 10 Download file

File preview

  1. #pragma require "ArcaneWeapon7.asc"
  2. #include "MLLE-Weapons.asc"
  3. #pragma require "Lightningrod.j2a"
  4. #pragma require "ZAPFIZZ1.wav"
  5. #pragma require "ZAPFIZZ2.wav"
  6.  
  7. namespace ArcaneWeapons {
  8.         namespace LightningRod {
  9.                 class Weapon : MLLEWeapons::WeaponInterface {
  10.                         Weapon() {
  11.                                 super(
  12.                                         regularObjectTemplate: MLLEWeapons::ObjectTemplate(
  13.                                                 playerHandling: HANDLING::PARTICLE,
  14.                                                 curAnim: 0,
  15.                                                 counterEnd: 255,
  16.                                                 lightType: LIGHT::POINT,
  17.                                                 light: 10,
  18.                                                 state: STATE::FALL
  19.                                         ),
  20.                                         animSetFilename: "Lightningrod.j2a",
  21.                                         pickupAnimation: 0,
  22.                                         ammoCrateAnimation: 5,
  23.                                         apply: MLLEWeapons::applyFunction(LoadCustomFireSounds),
  24.                                         roundsPerPickup: 1,
  25.                                         spread: SPREAD::ICE,
  26.                                         behavior: function(obj, powerup) {
  27.                                                 jjSample(obj.xPos, obj.yPos, SOUND::COMMON_MONITOR, 0, 12500);
  28.                                                 obj.behavior = Behavior;
  29.                                                 if (powerup && (AlternatingPowerupDirection = !AlternatingPowerupDirection)) {
  30.                                                         obj.ySpeed = -6;
  31.                                                         obj.yAcc = -8;
  32.                                                         obj.direction = SPRITE::FLIPV;
  33.                                                 } else {
  34.                                                         obj.ySpeed = 6;
  35.                                                         obj.yAcc = 8;
  36.                                                 }
  37.                                                 if (!powerup) obj.age = 120; //reduced lifetime
  38.                                                 else obj.var[6] = 8;
  39.                                         }
  40.                                 );
  41.                         }
  42.                         bool LoadCustomFireSounds(uint, se::WeaponHook@, jjSTREAM@ parameter) {
  43.                                 if (parameter !is null && !parameter.isEmpty()) {
  44.                                         bool customFireSounds;
  45.                                         parameter.pop(customFireSounds);
  46.                                         if (!customFireSounds)
  47.                                                 return true;
  48.                                 } //else continue, loading the sounds by default if no parameter is provided
  49.                                 jjSampleLoad(SOUND::COMMON_ELECTRICHIT, "ZAPFIZZ1.wav");
  50.                                 jjSampleLoad(SOUND::COMMON_ELECTRIC2, "ZAPFIZZ2.wav");
  51.                                 return true;
  52.                         }
  53.                 }
  54.                 bool AlternatingPowerupDirection;
  55.                
  56.                 void Behavior(jjOBJ@ obj) {
  57.                         jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction);
  58.                        
  59.                         if (obj.state == STATE::FALL) {
  60.                                 if (!jjMaskedHLine(int(obj.xPos - 8), 16, int(obj.yPos + obj.yAcc))) {
  61.                                         obj.yPos += obj.ySpeed;
  62.                                 } else {
  63.                                         jjSample(obj.xPos, obj.yPos, SOUND::COMMON_LANDCAN1, 0, 30000);
  64.                                         obj.state = STATE::LAND;
  65.                                         obj.lightType = LIGHT::BRIGHT;
  66.                                         if (jjGameMode == GAME::CTF && obj.creatorType == CREATOR::PLAYER) {
  67.                                                 switch (jjPlayers[obj.creatorID].team) {
  68.                                                         case TEAM::BLUE: obj.curAnim += 1; break;
  69.                                                         case TEAM::RED: obj.curAnim += 2; break;
  70.                                                         case TEAM::YELLOW: obj.curAnim += 3; break;
  71.                                                         case TEAM::GREEN: obj.curAnim += 4; break;
  72.                                                 }
  73.                                         } else
  74.                                                 obj.curAnim += 1; //blue by default
  75.                                 }
  76.                         } else {
  77.                                 if (++obj.age % 20 == 0) {
  78.                                         for (int i = -4; i <= 4; i += 4) {
  79.                                                 int id = jjAddObject(OBJECT::LIGHTNINGSHIELDBULLET, obj.xPos, obj.yPos - 12, obj.creatorID, CREATOR::PLAYER, function(obj) { obj.behave(BEHAVIOR::BULLET, false); });
  80.                                                 if (id != 0) {
  81.                                                         jjOBJ@ zap = jjObjects[id];
  82.                                                         zap.lightType = LIGHT::NONE;
  83.                                                         zap.counterEnd = 6;
  84.                                                         zap.animSpeed = MLLEWeapons::HelpfulBulletFunctions::IsPowerup(obj) ? 2 : 1;
  85.                                                         zap.direction = i;
  86.                                                         zap.lightType = LIGHT::NONE;
  87.                                                         zap.playerHandling = obj.creatorType == CREATOR::PLAYER ? HANDLING::PLAYERBULLET : HANDLING::ENEMYBULLET;
  88.                                                         zap.var[3] = obj.var[3];
  89.                                                         zap.var[6] = obj.var[6];
  90.                                                         zap.xSpeed = i;
  91.                                                         zap.xAcc = 0;
  92.                                                         zap.ySpeed = 0;
  93.                                                         zap.yAcc = 0;
  94.                                                         if (i == 0) zap.ySpeed = -4;
  95.                                                 }
  96.                                         }
  97.                                 }
  98.                        
  99.                                 if (obj.age == 420) {
  100.                                         obj.particlePixelExplosion(0);
  101.                                         obj.delete();
  102.                                 } else {
  103.                                         obj.curFrame = jjAnimations[obj.curAnim] + ((jjGameTicks / 10) & 1);
  104.                                 }
  105.                         }
  106.                 }
  107.         }
  108. }