Downloads containing ArcaneWeapon6.asc

Downloads
Name Author Game Mode Rating
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 "ArcaneWeapon6.asc"
  2. #include "MLLE-Weapons.asc"
  3. #pragma require "TornadoGun.j2a"
  4.  
  5. namespace ArcaneWeapons {
  6.         namespace TornadoGun {
  7.                 class Weapon : MLLEWeapons::WeaponInterface {
  8.                         bool ShouldHurt = true;
  9.                         Weapon() {
  10.                                 super(
  11.                                         regularObjectTemplate: MLLEWeapons::ObjectTemplate(
  12.                                                 xSpeed: 4,
  13.                                                 xAcc: 0.075,
  14.                                                 yAcc: -0.1,
  15.                                                 curAnim: 0,
  16.                                                 special: -1,
  17.                                                 killAnim: jjAnimSets[ANIM::AMMO].firstAnim + 82,
  18.                                                 counterEnd: 110,
  19.                                                 light: LIGHT::POINT,
  20.                                                 var: array<int> = {0, 64*64, 5}
  21.                                         ),
  22.                                         powerupObjectTemplate: MLLEWeapons::ObjectTemplate(
  23.                                                 xSpeed: 6,
  24.                                                 xAcc: 0.075,
  25.                                                 yAcc: -0.1,
  26.                                                 animSpeed: 2,
  27.                                                 curAnim: 1,
  28.                                                 special: -1,
  29.                                                 killAnim: jjAnimSets[ANIM::AMMO].firstAnim + 82,
  30.                                                 counterEnd: 120,
  31.                                                 light: LIGHT::POINT2,
  32.                                                 var: array<int> = {0, 96*96, 10}
  33.                                         ),
  34.                                         animSetFilename: "TornadoGun.j2a",
  35.                                         pickupAnimation: 3,
  36.                                         poweredUpPickupAnimation: 2,
  37.                                         ammoCrateAnimation: 5,
  38.                                         powerupAnimation: 4,
  39.                                         apply: MLLEWeapons::applyFunction(DetermineDanger),
  40.                                         traits: se::weapon_default_traits | se::weapon_increases_mobility, //increases mobility of opponents, anyway
  41.                                         behavior: MLLEWeapons::behaviorFunction(DetermineBehavior)
  42.                                 );
  43.                         }
  44.                         bool DetermineDanger(uint, se::WeaponHook@, jjSTREAM@ parameter) {
  45.                                 if (parameter !is null && parameter.getSize() >= 1)
  46.                                         parameter.pop(ShouldHurt);
  47.                                 return true;
  48.                         }
  49.                         void DetermineBehavior(jjOBJ@ obj, bool powerup) const {
  50.                                 if (obj.creatorType == CREATOR::PLAYER && jjPlayers[obj.creatorID].isLocal) {
  51.                                         const int frequency = powerup ? 30000 : 25000;
  52.                                         jjSample(obj.xPos, obj.yPos, SOUND::INTRO_BLOW, 48, frequency);
  53.                                         jjSample(obj.xPos, obj.yPos, SOUND::COMMON_BIRDFLY, 48, frequency);
  54.                                 }
  55.                                 if (obj.eventID == OBJECT::ICEBULLET) obj.eventID = OBJECT::BLASTERBULLET;
  56.                                 if (!ShouldHurt) obj.playerHandling = HANDLING::PARTICLE;//for ground force and such
  57.                                 obj.behavior = Behavior;
  58.                         }
  59.                 }
  60.                
  61.                 void Behavior(jjOBJ@ obj) {
  62.                         obj.behave(BEHAVIOR::BULLET);
  63.                         if (obj.state == STATE::FLY && jjGameState == GAME::STARTED || jjGameState == GAME::OVERTIME)
  64.                                 for (int lpid = 0; lpid < jjLocalPlayerCount; ++lpid) {
  65.                                         jjPLAYER@ victim = jjLocalPlayers[lpid];
  66.                                         if (victim.blink == 0 && MLLEWeapons::HelpfulBulletFunctions::PlayerIsEnemy(obj, victim)) {
  67.                                                 const float pdx = victim.xPos - obj.xPos, pdy = victim.yPos - obj.yPos;
  68.                                                 if (pdx * pdx + pdy * pdy < obj.var[1]) {
  69.                                                         const float speedAdjustment = obj.var[2] * 0.5;
  70.                                                         victim.ySpeed -= speedAdjustment;
  71.                                                         victim.xSpeed += speedAdjustment * MLLEWeapons::HelpfulBulletFunctions::GetDirection(obj);
  72.                                                 }
  73.                                         }
  74.                                 }
  75.                         else if (obj.state == STATE::EXPLODE && obj.var[0] == 0) {
  76.                                 obj.var[0] = 1;
  77.                                 jjSample(obj.xPos, obj.yPos, SOUND::COMMON_SWISH4, 36, 15000);
  78.                         }
  79.                 }
  80.         }
  81. }