Downloads containing weaponMega.asc

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Anniversary Bash 20 Levels Jazz2Online Multiple N/A Download file
TSF with JJ2+ Only: Mt. CinderFeatured Download PurpleJazz Capture the flag 9 Download file
TSF with JJ2+ Only: Press GardenFeatured Download SmokeNC Battle 9.2 Download file
JJ2+ Only: Weapon MegaFeatured Download Violet CLM Mutator 10 Download file

File preview

  1. #pragma require "weaponMega.asc"
  2. #pragma require "weaponMega.j2a"
  3.  
  4. jjOBJ@ GetWeaponObjectConstant(WEAPON::Weapon weaponID, bool powerup) {
  5.         switch (weaponID) {
  6.                 case WEAPON::BLASTER:
  7.                         return jjObjectPresets[!powerup ? OBJECT::BLASTERBULLET : OBJECT::BLASTERBULLETPU];
  8.                 case WEAPON::BOUNCER:
  9.                         return jjObjectPresets[!powerup ? OBJECT::BOUNCERBULLET : OBJECT::BOUNCERBULLETPU];
  10.                 case WEAPON::ICE:
  11.                         return jjObjectPresets[!powerup ? OBJECT::ICEBULLET : OBJECT::ICEBULLETPU];
  12.                 case WEAPON::SEEKER:
  13.                         return jjObjectPresets[!powerup ? OBJECT::SEEKERBULLET : OBJECT::SEEKERBULLETPU];
  14.                 case WEAPON::RF:
  15.                         return jjObjectPresets[!powerup ? OBJECT::RFBULLET : OBJECT::RFBULLETPU];
  16.                 case WEAPON::TOASTER:
  17.                         return jjObjectPresets[!powerup ? OBJECT::TOASTERBULLET : OBJECT::TOASTERBULLETPU];
  18.                 case WEAPON::TNT:
  19.                         return jjObjectPresets[OBJECT::TNT];
  20.                 case WEAPON::GUN8:
  21.                         return jjObjectPresets[!powerup ? OBJECT::FIREBALLBULLET : OBJECT::FIREBALLBULLETPU];
  22.                 case WEAPON::GUN9:
  23.                         return jjObjectPresets[!powerup ? OBJECT::ELECTROBULLET : OBJECT::ELECTROBULLETPU];
  24.         }
  25.         return jjObjectPresets[0];
  26. }
  27. BEHAVIOR::Behavior GetWeaponBehaviorConstant(WEAPON::Weapon weaponID, bool powerup) {
  28.         switch (weaponID) {
  29.                 case WEAPON::BLASTER:
  30.                         return BEHAVIOR::BULLET;
  31.                 case WEAPON::BOUNCER:
  32.                         return !powerup ? BEHAVIOR::BOUNCERBULLET : BEHAVIOR::BOUNCERBULLETPU;
  33.                 case WEAPON::ICE:
  34.                         return !powerup ? BEHAVIOR::BULLET : BEHAVIOR::ICEBULLETPU;
  35.                 case WEAPON::SEEKER:
  36.                         return BEHAVIOR::SEEKERBULLET;
  37.                 case WEAPON::RF:
  38.                         return BEHAVIOR::RFBULLET;
  39.                 case WEAPON::TOASTER:
  40.                         return BEHAVIOR::TOASTERBULLET;
  41.                 case WEAPON::TNT:
  42.                         return BEHAVIOR::TNT;
  43.                 case WEAPON::GUN8:
  44.                         return BEHAVIOR::BULLET;
  45.                 case WEAPON::GUN9:
  46.                         return BEHAVIOR::ELECTROBULLET;
  47.         }
  48.         return BEHAVIOR::Behavior(0);
  49. }
  50.  
  51. ANIM::Set findCustomAnimID(WEAPON::Weapon weaponID) {
  52.         uint customAnimID = 0;
  53.         while (jjAnimSets[ANIM::CUSTOM[customAnimID]].firstAnim != 0)
  54.                 ++customAnimID;
  55.        
  56.         jjAnimSets[ANIM::CUSTOM[customAnimID]].load(weaponID - 1, "weaponMega.j2a");
  57.         return ANIM::CUSTOM[customAnimID];
  58. }
  59.  
  60. jjOBJ@ Preset1, Preset2;
  61. ANIM::Set AnimSet;
  62. bool SafeToReplaceWeapon(WEAPON::Weapon weaponID) {
  63.         if (!(
  64.                 GetWeaponObjectConstant(weaponID, false).behavior == GetWeaponBehaviorConstant(weaponID, false) &&
  65.                 GetWeaponObjectConstant(weaponID, true ).behavior == GetWeaponBehaviorConstant(weaponID, true )
  66.         ))
  67.                 return false;
  68.         @Preset1 = GetWeaponObjectConstant(weaponID, false);
  69.         @Preset2 = GetWeaponObjectConstant(weaponID, true);
  70.         AnimSet = findCustomAnimID(weaponID);
  71.         return true;
  72. }
  73.  
  74. abstract class WeaponMega : jjBEHAVIORINTERFACE {
  75.         jjOBJ@ obj;
  76.        
  77.         void onBehave(jjOBJ@){}
  78.        
  79.         int getBulletAngle() const {
  80.                 return int(atan2(
  81.                                 (obj.xSpeed >= 0) ? obj.ySpeed : -obj.ySpeed,
  82.                                 abs(obj.xSpeed)
  83.                 ) * -512.0 * 0.318309886142228);
  84.         }
  85.         int getBulletDirection() const {
  86.                 if (obj.xSpeed >= 0)
  87.                         return 1;
  88.                 return -1;
  89.         }
  90.         void drawAngledBullet() const {
  91.                 jjDrawRotatedSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, getBulletAngle(), getBulletDirection());
  92.         }
  93.         void onDraw(jjOBJ@) {
  94.                 if (obj.isActive)
  95.                         drawAngledBullet();
  96.         }
  97.         bool maskedPixelAtBullet() const {
  98.                 return jjMaskedPixel(int(obj.xPos), int(obj.yPos));
  99.         }
  100.         bool isPowerup() const {
  101.                 return (obj.var[6] & 8) == 8;
  102.         }
  103.         void blast(uint animID) {
  104.                 obj.killAnim = animID;
  105.                 obj.state = STATE::EXPLODE;
  106.                 obj.behavior = BEHAVIOR::RFBULLET;
  107.                 obj.behave(BEHAVIOR::DEFAULT, false);
  108.         }
  109.         bool playerIsEnemy(const jjPLAYER@ other) const {
  110.                 if (obj.creatorType != CREATOR::PLAYER)
  111.                         return false;
  112.                 const jjPLAYER@ parent = jjPlayers[obj.creatorID];
  113.                
  114.                 return parent.isEnemy(other);
  115.         }
  116.         int getNearestEnemy(uint maxDistance, bool canBeFlickering = false) const {
  117.                 int nearestPlayerID = -1;
  118.                 if (!canBeFlickering && jjGameState != GAME::STARTED && jjGameState != GAME::OVERTIME)
  119.                         return -1;
  120.                 uint minDistance = maxDistance;
  121.                 for (uint i = 0; i < 32; ++i) {
  122.                         const jjPLAYER@ potentialEnemy = jjPlayers[i];
  123.                         if (!potentialEnemy.isInGame)
  124.                                 continue;
  125.                         if (!canBeFlickering && potentialEnemy.blink != 0)
  126.                                 continue;
  127.                         const float dx = potentialEnemy.xPos - obj.xPos, dy = potentialEnemy.yPos - obj.yPos;
  128.                         const uint distance = uint(sqrt(dx * dx + dy * dy));
  129.                         if (distance < minDistance && playerIsEnemy(potentialEnemy)) {
  130.                                 minDistance = distance;
  131.                                 nearestPlayerID = i;
  132.                         }
  133.                 }
  134.                 return nearestPlayerID;
  135.         }
  136. }
  137.  
  138. const float LevelRight = float(jjLayerWidth[4] * 32);
  139. const float LevelBottom = float(jjLayerHeight[4] * 32);
  140.