Downloads containing weaponVMega7.asc

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Malice in WonderlandFeatured Download Loon Battle 9.9 Download file
TSF with JJ2+ Only: Anniversary Bash 23 levels Jazz2Online Multiple N/A Download file
Custom Weapons...Featured Download Violet CLM Other 10 Download file

File preview

  1. #pragma require "weaponVMega7.asc"
  2. #include "MLLE-Weapons.asc"
  3. #pragma require "weaponVMega.j2a"
  4.  
  5. namespace WeaponVMega {
  6.         namespace GravityWell {
  7.                 class Weapon : MLLEWeapons::WeaponInterface {
  8.                         Weapon() {
  9.                                 super(
  10.                                         regularObjectTemplate: MLLEWeapons::ObjectTemplate(
  11.                                                 state: STATE::IDLE,
  12.                                                 counterEnd: 175,
  13.                                                 isBlastable: false,
  14.                                                 var: array<int> = {0,0,0,0,0,0,16}
  15.                                         ),
  16.                                         powerupObjectTemplate: MLLEWeapons::ObjectTemplate(
  17.                                                 state: STATE::IDLE,
  18.                                                 counterEnd: 234,
  19.                                                 isBlastable: false,
  20.                                                 var: array<int> = {0,0,0,0,0,0,16}
  21.                                         ),
  22.                                         animSetFilename: "weaponVMega.j2a",
  23.                                         animSetID: 6,
  24.                                         pickupAnimation: 1,
  25.                                         poweredUpPickupAnimation: 2,
  26.                                         style: WEAPON::MISSILE,
  27.                                         traits: se::weapon_default_traits | se::weapon_causes_splash_damage | se::weapon_inflicts_status_condition,
  28.                                         behavior: function(obj, powerup) { obj.eventID = OBJECT::BULLET; obj.behavior = Behavior; }
  29.                                 );
  30.                         }
  31.                 }
  32.                 void Behavior(jjOBJ@ obj) {
  33.                         obj.frameID = ++obj.counter / 7;
  34.                         obj.age = jjSampleLooped(obj.xPos, obj.yPos, SOUND::COMMON_MONITOR, obj.age, 63, 5000);
  35.                        
  36.                         const bool regular = !MLLEWeapons::HelpfulBulletFunctions::IsPowerup(obj);
  37.                        
  38.                         if (--obj.counterEnd == 0) {
  39.                                 jjSample(obj.xPos, obj.yPos, SOUND::COMMON_SHLDOF3);
  40.                                 obj.particlePixelExplosion(regular ? 88 : 24);
  41.                                 obj.delete();
  42.                         } else {
  43.                                 float d, dx, dy;
  44.                                 const float m = regular ? 290 : 320;
  45.                                 for (uint i = jjObjectCount; --i != 0; ) {
  46.                                         jjOBJ@ other = jjObjects[i];
  47.                                         if (other.isActive && other.eventID <= OBJECT::BULLET && other.isBlastable && other.state != STATE::EXPLODE && (other.creatorType != CREATOR::PLAYER || MLLEWeapons::HelpfulBulletFunctions::PlayerIsEnemy(obj, jjPlayers[other.creator]))) {
  48.                                                 if (withinRange(obj, other.xPos, other.yPos, d, dx, dy, m)) {
  49.                                                         const float angle = atan2(dy, dx);
  50.                                                         other.xSpeed += 64 / d * cos(angle);
  51.                                                         other.ySpeed += 64 / d * sin(angle);
  52.                                                 }
  53.                                         }
  54.                                 }
  55.                                 for (uint i = 0; i < 32; ++i) {
  56.                                         jjPLAYER@ other = jjPlayers[i];
  57.                                         if (other.isInGame && other.blink == 0 && (obj.creatorType != CREATOR::PLAYER || jjPlayers[obj.creatorID].isEnemy(other))) {
  58.                                                 if (withinRange(obj, other.xPos, other.yPos, d, dx, dy, m)) {
  59.                                                         const float angle = atan2(dy, dx);
  60.                                                         other.xSpeed += 24 / d * cos(angle);
  61.                                                         other.ySpeed += 14 / d * sin(angle);
  62.                                                 }
  63.                                         }
  64.                                 }
  65.                                 if (obj.frameID <= 6) {
  66.                                         obj.curFrame = jjAnimations[obj.curAnim] + obj.frameID;
  67.                                         jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, 1, SPRITE::PALSHIFT, regular ? 0 : 192);
  68.                                 } else {
  69.                                         while (obj.frameID > 6) obj.frameID -= 3;
  70.                                         obj.curFrame = jjAnimations[obj.curAnim] + obj.frameID;
  71.                                         jjDrawRotatedSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, (obj.counter - 7*7) * (obj.xSpeed >= 0 ? -32 : 32), 1,1, SPRITE::PALSHIFT, regular ? 0 : 192);
  72.                                         obj.lightType = LIGHT::RING2;
  73.                                         obj.light = (regular ? 15 : 22) - (obj.counter & 7) * 2;
  74.                                 }
  75.                         }
  76.                 }
  77.                 bool withinRange(const jjOBJ@ obj, float x, float y, float &out d, float &out dx, float &out dy, float m) {
  78.                         dx = obj.xPos - x;
  79.                         dy = obj.yPos - y;
  80.                         return (d = sqrt(dx * dx + dy * dy)) < m;
  81.                 }
  82.         }
  83. }