Downloads containing FlashBang.asc

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Anniversary Bash 24 Battle PurpleJazz Battle N/A Download file
JJ2+ Only: RAID: Mirrow LegendsFeatured Download Violet CLM Battle 8.5 Download file
Custom Weapons...Featured Download Violet CLM Other 10 Download file

File preview

  1. #pragma require "FlashBang.asc"
  2. #include "MLLE-Weapons.asc"
  3. #pragma require "FlashBang.j2a"
  4.  
  5. namespace FlashBang {
  6.         class Weapon : MLLEWeapons::WeaponInterface {
  7.                 Weapon() {
  8.                         super(
  9.                                 regularObjectTemplate: MLLEWeapons::ObjectTemplate(
  10.                                         xSpeed: 6,
  11.                                         xAcc: 0.125,
  12.                                         ySpeed: -4,
  13.                                         playerHandling: HANDLING::PARTICLE,
  14.                                         killAnim: 1,
  15.                                         curAnim: 0,
  16.                                         var: array<int> = {0,0,0,0,0, 90},
  17.                                         lightType: LIGHT::POINT,
  18.                                         counterEnd: 90
  19.                                 ),
  20.                                 powerupObjectTemplate: MLLEWeapons::ObjectTemplate(
  21.                                         xSpeed: 8,
  22.                                         xAcc: 0.1875,
  23.                                         ySpeed: -4,
  24.                                         playerHandling: HANDLING::PARTICLE,
  25.                                         killAnim: 1,
  26.                                         curAnim: 2,
  27.                                         var: array<int> = {0,0,0,0,0, 180},
  28.                                         lightType: LIGHT::POINT,
  29.                                         counterEnd: 90
  30.                                 ),
  31.                                 animSetFilename: "FlashBang.j2a",
  32.                                 pickupAnimation: 0,
  33.                                 poweredUpPickupAnimation: 2,
  34.                                 powerupAnimation: 3,
  35.                                 traits: (se::weapon_default_traits | se::weapon_causes_splash_damage | se::weapon_inflicts_status_condition) ^ se::weapon_deals_damage,
  36.                                 behavior: function(obj, powerup) {
  37.                                         if (obj.creatorType == CREATOR::PLAYER && jjPlayers[obj.creatorID].isLocal) {
  38.                                                 jjSample(obj.xPos, obj.yPos, SOUND::LABRAT_EYE3, 42, 0);
  39.                                                 jjSample(obj.xPos, obj.yPos, SOUND::COMMON_ITEMTRE, 42, 0);
  40.                                         }
  41.                                         if (obj.eventID == OBJECT::ICEBULLET) obj.eventID = OBJECT::FIREBALLBULLET;
  42.                                         obj.behavior = Behavior;
  43.                                 }
  44.                         );
  45.                 }
  46.                 uint getMaxDamage(bool powerup) const override { return 0; }
  47.         }
  48.        
  49.         void Behavior(jjOBJ@ obj) {
  50.                 obj.behave(BEHAVIOR::BULLET);
  51.                
  52.                 if (obj.state == STATE::FLY) {
  53.                         if (obj.ySpeed < 8 && obj.xSpeed != 0)
  54.                                 obj.ySpeed += 0.25;
  55.                 } else if (obj.state == STATE::EXPLODE && obj.var[2] == 0) {
  56.                         obj.var[2] = 1;
  57.                         jjOBJ@ blast = jjObjects[jjAddObject(OBJECT::BULLET, obj.xPos, obj.yPos, obj.creatorID, obj.creatorType, Shockwave)];
  58.                         blast.counter = 0;
  59.                         blast.var[5] = obj.var[5];
  60.                         blast.animSpeed = MLLEWeapons::HelpfulBulletFunctions::IsPowerup(obj) ? 2 : 1;
  61.                         blast.playerHandling = HANDLING::PARTICLE;
  62.                         blast.bulletHandling = HANDLING::IGNOREBULLET;
  63.                         blast.lightType = LIGHT::RING2;
  64.                         blast.light = 0;
  65.                 }
  66.         }
  67.         void Shockwave(jjOBJ@ obj) {
  68.                 obj.light += 3;
  69.                 const int maxDistance = obj.light * obj.light * 16;
  70.                
  71.                 if (obj.creatorType == CREATOR::PLAYER)
  72.                         for (int i = 1; i < jjObjectCount; i++) {
  73.                                 jjOBJ@ target = jjObjects[i];
  74.                                 if (target.state == STATE::KILL || target.state == STATE::DONE || target.state == STATE::EXPLODE)
  75.                                         continue;
  76.                                 const float dx = target.xPos - obj.xPos, dy = target.yPos - obj.yPos;
  77.                                 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)) {
  78.                                         if (dx * dx + dy * dy < maxDistance) {
  79.                                                 obj.objectHit(target, target.playerHandling == HANDLING::ENEMY? HANDLING::ENEMY : HANDLING::SPECIAL);
  80.                                                 //if (target.playerHandling != HANDLING::ENEMY) target.state = STATE::KILL;
  81.                                                 target.var[4] = 1;
  82.                                         }
  83.                                 }
  84.                                 else if (target.playerHandling == HANDLING::PICKUP && target.state == STATE::FLOAT) {
  85.                                         if (dx * dx + dy * dy < maxDistance)
  86.                                                 target.state = STATE::FLOATFALL;
  87.                                 }
  88.                         }
  89.                
  90.                 if ((jjGameState == GAME::STARTED || jjGameState == GAME::OVERTIME)) {
  91.                         for (int i = 0; i < jjLocalPlayerCount; i++)
  92.                                 if (obj.var[8] & 1 << i == 0) {
  93.                                         jjPLAYER@ victim = jjLocalPlayers[i];
  94.                                         if (victim.isInGame && victim.health > 0 && victim.blink == 0 && MLLEWeapons::HelpfulBulletFunctions::PlayerIsEnemy(obj, victim)) {
  95.                                                 const float dx = victim.xPos - obj.xPos, dy = victim.yPos - obj.yPos;
  96.                                                 if (dx * dx + dy * dy < maxDistance) {
  97.                                                         victim.stoned = obj.var[5];
  98.                                                         jjObjects[jjAddObject(0,0, OBJECT::SHARD, victim.playerID, CREATOR::OBJECT, Flash)].playerHandling = HANDLING::PARTICLE;
  99.                                                         obj.var[8] = obj.var[8] | 1 << i;
  100.                                                 }
  101.                                         }
  102.                                 }
  103.                 }
  104.                
  105.                 if (++obj.counter == 14)
  106.                         obj.delete();
  107.         }
  108.        
  109.         void Flash(jjOBJ@ obj) { //doing this effect as an object behavior to minimize unnecessary hooks, thereby maximizing flexibility of use
  110.                 if (++obj.age == 20)
  111.                         obj.delete();
  112.                 else {
  113.                         const jjPLAYER@ play = jjPlayers[obj.creatorID];
  114.                         jjDrawRectangle(play.cameraX - 32, play.cameraY - 32, jjSubscreenWidth + 64, jjSubscreenHeight + 64, 15, SPRITE::BLEND_NORMAL, obj.age * 12, -101, 4, obj.creatorID);
  115.                 }
  116.         }
  117. }