Downloads containing ArcaneWeapon9.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 "ArcaneWeapon9.asc"
  2. #include "MLLE-Weapons.asc"
  3. #pragma require "FusionCannon.j2a"
  4. #pragma offer "f_fus1.wav"
  5. #pragma offer "f_fus3.wav"
  6.  
  7. namespace ArcaneWeapons {
  8.         namespace FusionCannon {
  9.                 class Weapon : MLLEWeapons::WeaponInterface {
  10.                         Weapon() {
  11.                                 super(
  12.                                         regularObjectTemplate: MLLEWeapons::ObjectTemplate(
  13.                                                 xSpeed: 5,
  14.                                                 curAnim: jjAnimSets[ANIM::AMMO].firstAnim + 75,
  15.                                                 killAnim: jjAnimSets[ANIM::AMMO].firstAnim + 82,
  16.                                                 frameID: 4,
  17.                                                 var: array<int> = {40,59,0,0,0,1,2|16},
  18.                                                 lightType: LIGHT::POINT2,
  19.                                                 counterEnd: 255
  20.                                         ),
  21.                                         powerupObjectTemplate: MLLEWeapons::ObjectTemplate(
  22.                                                 xSpeed: 5,
  23.                                                 animSpeed: 3,
  24.                                                 curAnim: jjAnimSets[ANIM::AMMO].firstAnim + 75,
  25.                                                 killAnim: jjAnimSets[ANIM::AMMO].firstAnim + 82,
  26.                                                 frameID: 4,
  27.                                                 var: array<int> = {35,32,0,0,0,2,2|16},
  28.                                                 lightType: LIGHT::POINT2,
  29.                                                 counterEnd: 255
  30.                                         ),
  31.                                         animSetFilename: "FusionCannon.j2a",
  32.                                         pickupAnimation: 0,
  33.                                         poweredUpPickupAnimation: 1,
  34.                                         ammoCrateAnimation: 3,
  35.                                         powerupAnimation: 2,
  36.                                         sampleFilenames: array<string> = {"f_fus1.wav", "f_fus3.wav"},
  37.                                         roundsPerPickup: 2,
  38.                                         style: WEAPON::CAPPED,
  39.                                         traits: se::weapon_default_traits | se::weapon_causes_splash_damage | se::weapon_is_super_weapon,
  40.                                         behavior: MLLEWeapons::behaviorFunction(DetermineBehavior)
  41.                                 );
  42.                         }
  43.                         void DetermineBehavior(jjOBJ@ obj, bool powerup) {
  44.                                 if (obj.creatorType == CREATOR::PLAYER)
  45.                                         jjSample(obj.xPos, obj.yPos, Samples[jjRandom() & 1]);
  46.                                 if (obj.eventID == OBJECT::ICEBULLET) obj.eventID = OBJECT::BLASTERBULLET;
  47.                                 obj.var[7] = 0;
  48.                                 obj.behavior = Behavior;
  49.                         }
  50.                 }
  51.                
  52.                 void Behavior(jjOBJ@ obj) {
  53.                         obj.behave(BEHAVIOR::BULLET, obj.state == STATE::EXPLODE);
  54.                        
  55.                         switch (obj.state) {
  56.                                 case STATE::FLY:
  57.                                         for (int i = 0; i < 2; ++i)
  58.                                                 jjDrawSprite(obj.xPos, obj.yPos, ANIM::AMMO, 77, 6, 0, SPRITE::ALPHAMAP, obj.var[0]);
  59.                                        
  60.                                         if (obj.counter % 5 == 0 && !jjLowDetail) {
  61.                                                 jjOBJ@ trail = jjObjects[jjAddObject(OBJECT::EXPLOSION, obj.xPos, obj.yPos, obj.creatorID, obj.creatorType, function(trail){
  62.                                                         trail.behave(BEHAVIOR::EXPLOSION, false);
  63.                                                         jjDrawSpriteFromCurFrame(trail.xPos, trail.yPos, trail.curFrame, trail.direction, SPRITE::TRANSLUCENTSINGLEHUE, trail.var[0]);
  64.                                                 })];
  65.                                                 trail.determineCurAnim(ANIM::AMMO, 12);
  66.                                                 trail.lightType = LIGHT::POINT;
  67.                                                 trail.playerHandling = HANDLING::PARTICLE;
  68.                                                 trail.var[0] = obj.var[1];
  69.                                         }
  70.                                         break;
  71.                                
  72.                                 case STATE::EXPLODE:
  73.                                         if (obj.var[2] == 0) {
  74.                                                 obj.var[2] = 1;
  75.                                                 jjOBJ@ blast = jjObjects[jjAddObject(OBJECT::BULLET, obj.xPos, obj.yPos, obj.creatorID, obj.creatorType, BEHAVIOR::INACTIVE)];
  76.                                                 blast.var[5] = obj.var[5];
  77.                                                 blast.counter = 4 + (obj.var[5] << 3);
  78.                                                 blast.playerHandling = HANDLING::PARTICLE;
  79.                                                 blast.bulletHandling = HANDLING::IGNOREBULLET;
  80.                                                 blast.animSpeed = 1;
  81.                                                 blast.light = 0;
  82.                                                 blast.lightType = LIGHT::RING2;
  83.                                                 blast.behavior = Shockwave;
  84.                                         }
  85.                                         break;
  86.                         }
  87.                 }
  88.                 void Shockwave(jjOBJ@ obj) {
  89.                         obj.light += 3;
  90.                         const int maxDistance = obj.light * obj.light * 16;
  91.                        
  92.                         if (obj.creatorType == CREATOR::PLAYER)
  93.                                 for (int i = 1; i < jjObjectCount; i++) {
  94.                                         jjOBJ@ target = jjObjects[i];
  95.                                         if (target.state == STATE::KILL || target.state == STATE::DONE || target.state == STATE::EXPLODE)
  96.                                                 continue;
  97.                                         const float dx = target.xPos - obj.xPos, dy = target.yPos - obj.yPos;
  98.                                         if (target.var[4] == 0 && (target.behavior == BEHAVIOR::MONITOR || (target.eventID >= OBJECT::BOMBCRATE && target.eventID <= OBJECT::TOASTERAMMO15) || target.eventID == OBJECT::GUNCRATE || target.eventID == OBJECT::GEMCRATE || target.eventID == OBJECT::CARROTCRATE || target.isTarget || target.eventID == OBJECT::DESTRUCTSCENERY)) {
  99.                                                 if (dx * dx + dy * dy < maxDistance) {
  100.                                                         obj.objectHit(target, target.playerHandling == HANDLING::ENEMY? HANDLING::ENEMY : HANDLING::SPECIAL);
  101.                                                         //if (target.playerHandling != HANDLING::ENEMY) target.state = STATE::KILL;
  102.                                                         target.var[4] = 1;
  103.                                                 }
  104.                                         }
  105.                                         else if (target.playerHandling == HANDLING::PICKUP && target.state == STATE::FLOAT) {
  106.                                                 if (dx * dx + dy * dy < maxDistance)
  107.                                                         target.state = STATE::FLOATFALL;
  108.                                         }
  109.                                 }
  110.                        
  111.                         jjPLAYER@ creator = (obj.creatorType == CREATOR::PLAYER) ? jjPlayers[obj.creatorID] : null;
  112.                         if ((jjIsServer || jjGameConnection == GAME::LOCAL) && (jjGameState == GAME::STARTED || jjGameState == GAME::OVERTIME) && !(creator !is null && creator.blink != 0))
  113.                                 for (int i = 0; i < 32; i++)
  114.                                         if (obj.var[8] & 1 << i == 0) {
  115.                                                 jjPLAYER@ victim = jjPlayers[i];
  116.                                                 if (victim.isInGame && victim.health > 0 && (creator is null || creator.isEnemy(victim))) {
  117.                                                         const float dx = victim.xPos - obj.xPos, dy = victim.yPos - obj.yPos;
  118.                                                         if (dx * dx + dy * dy < maxDistance) {
  119.                                                                 victim.hurt(obj.var[5], false, creator);
  120.                                                                 obj.var[8] = obj.var[8] | 1 << i;
  121.                                                         }
  122.                                                 }
  123.                                         }
  124.                        
  125.                         if (--obj.counter == 0)
  126.                                 obj.delete();
  127.                 }
  128.         }
  129. }