Downloads containing ArcaneWeapon3.asc

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Lori FortressFeatured Download Primpy Single player 8.7 Download file
Custom Weapons...Featured Download Violet CLM Other 10 Download file

File preview

  1. #pragma require "ArcaneWeapon3.asc"
  2. #include "MLLE-Weapons.asc"
  3. #pragma require "CosmicDust.j2a"
  4. #pragma offer "lowind.wav"
  5.  
  6. namespace ArcaneWeapons {
  7.         namespace CosmicDuster {
  8.                 class Weapon : MLLEWeapons::WeaponInterface {
  9.                         Weapon() {
  10.                                 super(
  11.                                         regularObjectTemplate: MLLEWeapons::ObjectTemplate(
  12.                                                 xSpeed: 1,      //needed for direction
  13.                                                 xAcc: 1,        //
  14.                                                 curAnim: 1,
  15.                                                 lightType: LIGHT::BRIGHT,
  16.                                                 light: 8,
  17.                                                 counterEnd: 180,
  18.                                                 freeze: 200,
  19.                                                 state: STATE::SLEEP,
  20.                                                 var: array<int> = {120, 72, 60}
  21.                                         ),
  22.                                         powerupObjectTemplate: MLLEWeapons::ObjectTemplate(
  23.                                                 xSpeed: 1,
  24.                                                 xAcc: 1,
  25.                                                 lightType: LIGHT::BRIGHT,
  26.                                                 light: 12,
  27.                                                 counterEnd: 180,
  28.                                                 freeze: 254,
  29.                                                 state: STATE::SLEEP,
  30.                                                 var: array<int> = {160, 34, 80}
  31.                                         ),
  32.                                         animSetFilename: "CosmicDust.j2a",
  33.                                         pickupAnimation: 2,
  34.                                         poweredUpPickupAnimation: 1,
  35.                                         ammoCrateAnimation: 3,
  36.                                         powerupAnimation: 4,
  37.                                         style: WEAPON::POPCORN,
  38.                                         multiplier: 16,
  39.                                         traits: se::weapon_is_effective_against_all_targets | se::weapon_supports_mouse_aim | se::weapon_works_in_all_modes | se::weapon_has_all_pickups | se::weapon_inflicts_status_condition | se::weapon_freezes_objects | se::weapon_melts_ice,
  40.                                         apply: MLLEWeapons::applyFunction(LoadCustomFireSound),
  41.                                         behavior: function(obj, powerup) { if (obj.direction == 0) obj.direction = 1; obj.behavior = Behavior; }
  42.                                 );
  43.                         }
  44.                         uint getMaxDamage(bool powerup) const override { return 0; }
  45.                         bool LoadCustomFireSound(uint, se::WeaponHook@, jjSTREAM@ parameter) {
  46.                                 if (parameter !is null && !parameter.isEmpty()) {
  47.                                         bool customFireSound;
  48.                                         parameter.pop(customFireSound);
  49.                                         if (!customFireSound)
  50.                                                 return true;
  51.                                 } //else continue, loading the sound by default if no parameter is provided
  52.                                 jjSampleLoad(SOUND::COMMON_FLAMER, "lowind.wav");
  53.                                 return true;
  54.                         }
  55.                 }
  56.                
  57.                 void Behavior(jjOBJ@ obj) {
  58.                         if (obj.state != STATE::EXPLODE && ++obj.counter < int(obj.counterEnd)) {
  59.                                 float xOrg, yOrg;
  60.                                 if (obj.creatorType == CREATOR::PLAYER) {
  61.                                         jjPLAYER@ creator = jjPlayers[obj.creatorID];
  62.                                         xOrg = creator.xPos; yOrg = creator.yPos;
  63.                                 } else {
  64.                                         jjOBJ@ creator = jjObjects[obj.creatorID];
  65.                                         if (creator.isActive) {
  66.                                                 xOrg = creator.xPos; yOrg = creator.yPos;
  67.                                         } else {
  68.                                                 xOrg = obj.xOrg; yOrg = obj.yOrg;
  69.                                         }
  70.                                 }
  71.                                
  72.                                 obj.var[4] = obj.var[4] - (5 * obj.direction);
  73.                                                
  74.                                 obj.xPos = xOrg + obj.var[0]*jjSin(obj.counter*12) * obj.direction;
  75.                                 obj.yPos = yOrg - obj.var[2]*jjCos(obj.counter*12);
  76.                                
  77.                                 for (int i = 0; i < 2; ++i)
  78.                                         jjDrawRotatedSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.var[4], 1, 1, SPRITE::ALPHAMAP, obj.var[1]);
  79.                         } else {
  80.                                 obj.delete();
  81.                         }
  82.                 }
  83.         }
  84. }