Downloads containing ab22ctf20.j2as

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Anniversary Bash 22 levels Jazz2Online Multiple N/A Download file

File preview

  1. const bool MLLESetupSuccessful = MLLE::Setup(array<MLLEWeaponApply@> = {null, null, WeaponVMega::IceCloud::Weapon(), SzmolWeaponPack::LockOnMissile::Weapon(), se::FireworkMLLEWrapper(), null, null, null, null}); ///@MLLE-Generated
  2. #include "MLLE-Include-1.5w.asc" ///@MLLE-Generated
  3. #pragma require "ab22ctf20.j2l" ///@MLLE-Generated
  4. #include "SEfirework-mlle.asc" ///@MLLE-Generated
  5. #pragma require "SEfirework-mlle.asc" ///@MLLE-Generated
  6. #include "lockOnMissile.asc" ///@MLLE-Generated
  7. #pragma require "lockOnMissile.asc" ///@MLLE-Generated
  8. #include "WeaponVMega3.asc" ///@MLLE-Generated
  9. #pragma require "WeaponVMega3.asc" ///@MLLE-Generated
  10.  
  11. jjPAL Blue;
  12. void onLevelLoad() {
  13.         for (uint i = 0; i < 4; ++i)
  14.                 jjAddObject(OBJECT::GRASSPLATFORM, jjLayerWidth[4] * 16, jjLayerHeight[4] * 16, i, CREATOR::LEVEL, GreatWheel);
  15.                
  16.         jjUseLayer8Speeds = true;
  17.         jjTexturedBGTexture = TEXTURE::WTF;
  18.        
  19.         Blue = MLLE::Palette;
  20.         array<uint8> blueRanges = {96, 111, 160, 167, 176, 240};
  21.         for (uint start = 0; start < blueRanges.length; start += 2)
  22.                 for (uint i = blueRanges[start]; i <= blueRanges[start + 1]; ++i)
  23.                         Blue.color[i].swizzle(COLOR::BLUE, COLOR::GREEN, COLOR::RED);
  24.                        
  25.         jjObjectPresets[OBJECT::SILVERCOIN].scriptedCollisions = true;
  26.         jjObjectPresets[OBJECT::SILVERCOIN].behavior = One();
  27.        
  28.         jjObjectPresets[OBJECT::CARROT].behavior = MoveRight;
  29.         jjObjectPresets[OBJECT::BANANA].behavior = LeafMaker;
  30.         jjObjectPresets[OBJECT::BANANA].playerHandling = HANDLING::PARTICLE;
  31.        
  32.         jjANIMFRAME@ searchlight = jjAnimFrames[jjAnimations[jjAnimSets[ANIM::BIRD]]];
  33.         jjPIXELMAP(700).save(searchlight);
  34.         searchlight.hotSpotX = -16;
  35.         searchlight.hotSpotY = -31;
  36.        
  37.         const array<uint16> tilesWithWrongRedColor = {
  38.                 450,451,452,453,
  39.                 460,461,462,463,
  40.                 470,471,472,473,
  41.                 653,663,
  42.                 683,684,685,686,
  43.                 778,779,
  44.                 488,489,
  45.         };
  46.         for (uint tileID = 0; tileID < tilesWithWrongRedColor.length; ++tileID)  {
  47.                 jjPIXELMAP waterfall(tilesWithWrongRedColor[tileID]);
  48.                 for (uint x = 0; x < 32; ++x)
  49.                         for (uint y = 0; y < 32; ++y)
  50.                                 if (waterfall[x,y] == 24)
  51.                                         waterfall[x,y] = 160;
  52.                 waterfall.save(tilesWithWrongRedColor[tileID], true);
  53.         }
  54.        
  55.         auto layers = jjLayerOrderGet();
  56.        
  57.         uint buildingTilesBeginning = jjTileCount; //let's cater to 5.6's slower FPS for sprite mode layers
  58.         for (uint i = 0; i < 7; ++i) {
  59.                 jjLAYER@ moreBuildings = jjLayersFromLevel(jjLevelFileName, array<uint> = {6}, buildingTilesBeginning - 421)[0];
  60.                 moreBuildings.xSpeed += i / 80.f;
  61.                 moreBuildings.ySpeed += i / 96.f;
  62.                 moreBuildings.yOffset -= i * 85;
  63.                 moreBuildings.xOffset = i * 530;
  64.                 layers.insertAt(5, moreBuildings);
  65.                 const uint8 singleColor = 238 - i * 10;
  66.                 for (uint tileID = 421; tileID <= 430; ++tileID) {
  67.                         jjPIXELMAP buildingTile(tileID);
  68.                         for (uint x = 0; x < 32; ++x)
  69.                                 for (uint y = 0; y < 32; ++y)
  70.                                         if (buildingTile[x,y] != 0)
  71.                                                 buildingTile[x,y] = singleColor;
  72.                         buildingTile.save(buildingTilesBeginning++);
  73.                 }
  74.         }
  75.         jjLayerHasTiles[6] = false;
  76.        
  77.         for (uint i = 0; i < 5; ++i) {
  78.                 jjLAYER moreFog(MLLE::GetLayer("Fog"));
  79.                 moreFog.xAutoSpeed += i / 10.f;
  80.                 moreFog.yOffset -= i * 26;
  81.                 moreFog.spriteParam = 32;
  82.                 moreFog.spriteMode = SPRITE::BLEND_NORMAL;
  83.                 layers.insertAt(0, moreFog);
  84.         }
  85.         jjLayerOrderSet(layers);
  86. }
  87.  
  88. array<float> LastWheelX(4);
  89. //array<float> LastWheelY(4);
  90. void GreatWheel(jjOBJ@ obj) {
  91.         if (obj.state == STATE::START) {
  92.                 obj.counter = obj.creatorID << 8;
  93.                 obj.curFrame = jjAnimations[jjAnimSets[ANIM::GRASSPLAT]];
  94.                 obj.state = STATE::ROTATE;
  95.                 obj.playerHandling = HANDLING::PARTICLE;
  96.         }
  97.         const auto lastX = obj.xPos, lastY = obj.yPos;
  98.         const int radius = 78 * 32 + 10;
  99.        
  100.         for (uint i = 0; i < radius; i += 25)
  101.                 jjDrawSpriteFromCurFrame(obj.xOrg + jjSin(obj.counter) * i, obj.yOrg + jjCos(obj.counter) * i, obj.curFrame + 1, 1, SPRITE::NORMAL,0, 5);
  102.         jjDrawSpriteFromCurFrame(lastX, lastY, obj.curFrame);
  103.        
  104.         if (obj.counterEnd != 0)
  105.                 --obj.counterEnd;
  106.         else {
  107.                 if (jjLocalPlayers[0].teamRed)
  108.                         obj.counter -= 1;
  109.                 else
  110.                         obj.counter += 1;
  111.                 if (obj.counter & 255 == 0)
  112.                         obj.counterEnd = 200;
  113.                 else if (obj.counter & 127 == 0)
  114.                         obj.counterEnd = 120;
  115.         }
  116.         obj.xPos = obj.xOrg + jjSin(obj.counter) * radius;
  117.         obj.yPos = obj.yOrg + jjCos(obj.counter) * radius;
  118.         obj.bePlatform(lastX, lastY);
  119.         LastWheelX[obj.creatorID] = lastX;
  120.         //LastWheelY[obj.creatorID] = lastY;
  121. }
  122.  
  123. void onFunction0(jjPLAYER@ play, uint8 angle) {
  124.         if (!play.noclipMode && play.testForCoins(1)) {
  125.                 play.noclipMode = true;
  126.                 switch (angle & 3) {
  127.                         case 0:
  128.                                 play.xSpeed = 10;
  129.                                 play.ySpeed = 0;
  130.                                 play.yPos = (int(play.yPos) & ~31) + 16;
  131.                                 break;
  132.                         case 1:
  133.                                 play.xSpeed = 0;
  134.                                 play.ySpeed = 10;
  135.                                 play.xPos = (int(play.xPos) & ~31) + 16;
  136.                                 break;
  137.                         case 2:
  138.                                 play.xSpeed = -10;
  139.                                 play.ySpeed = 0;
  140.                                 play.yPos = (int(play.yPos) & ~31) + 16;
  141.                                 break;
  142.                         case 3:
  143.                                 play.xSpeed = 0;
  144.                                 play.ySpeed = -10;
  145.                                 play.xPos = (int(play.xPos) & ~31) + 16;
  146.                                 break;
  147.                 }
  148.                 jjSample(play.xPos, play.yPos, SOUND::COMMON_COIN);
  149.                 play.noFire = false; //jail
  150.                 play.fly = FLIGHT::NONE; //copters
  151.         }
  152. }
  153.  
  154. array<bool> LaterWarp(jjLocalPlayerCount);
  155. array<bool> OnRight(jjLocalPlayerCount, true);
  156. const float BottomRightnessDetectionRange = (jjLayerHeight[4] - 15) * 32;
  157. const float LevelCenter = jjLayerWidth[4] * 16;
  158. void onPlayer(jjPLAYER@ play) {
  159.         MLLE::WeaponHook.processPlayer(play);
  160.        
  161.         if (play.yPos > 256 && play.yPos < BottomRightnessDetectionRange) {
  162.                 const bool wasOnRight = OnRight[play.localPlayerID];
  163.                 OnRight[play.localPlayerID] = play.xPos > LevelCenter;
  164.                 if (jjLocalPlayerCount == 1 && wasOnRight != OnRight[play.localPlayerID]) {
  165.                         (wasOnRight ? Blue : MLLE::Palette).apply();
  166.                         jjSetFadeColors(111);
  167.                 }
  168.         }
  169.        
  170.         if (play.platform != 0 && !play.keyJump) {
  171.                 const jjOBJ@ plat = jjObjects[play.platform];
  172.                 if (plat.counterEnd == 0 && plat.behavior == GreatWheel) {
  173.                         const auto platX = LastWheelX[plat.creatorID];
  174.                         if (play.xPos > platX + 5)
  175.                                 play.keyLeft = true;
  176.                         else if (play.xPos < platX - 5)
  177.                                 play.keyRight = true;
  178.                 }
  179.         }
  180.        
  181.         if (play.flag != 0)
  182.                 play.coins = 1;
  183. }
  184. void onFunction1(jjPLAYER@ play) {
  185.         if (play.warpID <= 0) {
  186.                 uint8 warpID;
  187.                 if (!LaterWarp[play.localPlayerID]) {
  188.                         LaterWarp[play.localPlayerID] = true;
  189.                         warpID = play.teamRed ? 2 : 1;
  190.                         play.showText("@@@@Tubes can only be used@if you have a coin@or a flag!");
  191.                 } else {
  192.                         warpID =
  193.                                 OnRight[play.localPlayerID] ?
  194.                                         play.teamRed ?
  195.                                                 2 : //red player
  196.                                                 4 : //red jail
  197.                                         play.teamRed ?
  198.                                                 3 : //blue jail
  199.                                                 1   //blue player
  200.                         ;
  201.                         if (warpID >= 3) { //jail
  202.                                 play.noFire = true;
  203.                                 for (int i = WEAPON::BLASTER; i <= WEAPON::GUN9; ++i)
  204.                                         play.powerup[i] = false;
  205.                                 play.showText("@@@@You were on the other team's@side of the map, so@you're going to jail.");
  206.                         }
  207.                 }
  208.                 play.warpToID(warpID);
  209.                 play.coins = 0;
  210.         }
  211. }
  212.  
  213. class One : jjBEHAVIORINTERFACE {
  214.         void onBehave(jjOBJ@ obj) {
  215.                 obj.behave(BEHAVIOR::PICKUP, false);
  216.                 obj.xPos = obj.xOrg;
  217.                 obj.yPos = obj.yOrg;
  218.                 const auto yPos = obj.yPos + ::jjSin((((obj.objectID << 3) + ::jjGameTicks) << (obj.yPos > ::jjWaterLevel ? 1 : 4)) + (int(obj.xPos) << 4)) * 4.f;
  219.                 for (int i = 0; i < jjLocalPlayerCount; ++i) {
  220.                         const jjPLAYER@ play = jjLocalPlayers[i];
  221.                         jjDrawSpriteFromCurFrame(
  222.                                 obj.xPos, yPos,
  223.                                 obj.curFrame, obj.direction,
  224.                                 play.coins == 0 ? SPRITE::NORMAL : SPRITE::TRANSLUCENT,
  225.                                 0,4,4,
  226.                                 play.playerID);
  227.                 }
  228.         }
  229.         bool onObjectHit(jjOBJ@ obj, jjOBJ@ bull, jjPLAYER@ play, int force) {
  230.                 if (bull is null) {
  231.                         if (play.isLocal) {
  232.                                 if (play.coins != 0)
  233.                                         return true;
  234.                                 jjSample(play.xPos, play.yPos, SOUND::COMMON_COIN);
  235.                                 play.coins = 1;
  236.                         }
  237.                         obj.scriptedCollisions = false;
  238.                         obj.playerHandling = HANDLING::EXPLOSION;
  239.                         obj.behavior = BEHAVIOR::EXPLOSION2;
  240.                 }
  241.                 return true;
  242.         }
  243. }
  244.  
  245. void onMain() {
  246.         MLLE::WeaponHook.processMain();
  247.         if (!jjLowDetail)
  248.                 for (int i = 0; i < 1024; ++i)
  249.                         if (jjParticles[i].xPos < 64)
  250.                                 jjParticles[i].type = PARTICLE::INACTIVE;
  251. }
  252.  
  253. bool onDrawAmmo(jjPLAYER@ player, jjCANVAS@ canvas) {
  254.         if (player.isLocal && player.coins != 0 && player.flag == 0)
  255.                 canvas.drawSprite(jjSubscreenWidth - 10, jjSubscreenHeight-10, ANIM::PICKUPS, 84, jjGameTicks >> 2);
  256.         return MLLE::WeaponHook.drawAmmo(player, canvas);
  257. }
  258.  
  259. void MoveRight(jjOBJ@ obj) {
  260.         if (jjTileGet(3, int(obj.xOrg) >> 5, int(obj.yOrg) >> 5) == 0)
  261.                 obj.xPos += 16;
  262.         obj.behavior = BEHAVIOR::PICKUP;
  263. }
  264. void LeafMaker(jjOBJ@ obj) {
  265.         if (obj.counter == 0) {
  266.                 const uint random = jjRandom();
  267.                 if (!jjLowDetail) {
  268.                         jjPARTICLE@ leaf = jjAddParticle(PARTICLE::LEAF);
  269.                         if (leaf !is null) {
  270.                                 leaf.xPos = obj.xPos + (random & 63) - 32;
  271.                                 leaf.yPos = obj.yPos + ((random >> 6) & 63) - 32;
  272.                                 leaf.xSpeed = (jjSin(jjGameTicks >> 2) - 0.5) * 8;
  273.                                 leaf.ySpeed = 1.25;
  274.                                 leaf.leaf.frame = (random >> 12) & 31;
  275.                                 leaf.leaf.height = (random >> 17) & 7;
  276.                         }
  277.                 }
  278.                 obj.counter = (random >> 20) & 127;
  279.         } else --obj.counter;
  280. }
  281.  
  282. void onDrawLayer7(jjPLAYER@, jjCANVAS@ canvas) {
  283.         canvas.drawRotatedSprite(208, 98, ANIM::BIRD,0,0, int(jjSin(jjGameTicks << 2) * 80), 1,11, SPRITE::TRANSLUCENTTILE);
  284.         canvas.drawTile(192, 96, 422);
  285. }