Downloads containing ab24btl19.j2as

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Anniversary Bash 24 Battle PurpleJazz Battle N/A Download file

File preview

  1. const bool MLLESetupSuccessful = MLLE::Setup(array<MLLEWeaponApply@> = {null, null, se::RollerMLLEWrapper(), null, null, SzmolWeaponPack::PetrolBomb::Weapon(), null, se::EnergyBlastMLLEWrapper(), ArcaneWeapons::FusionCannon::Weapon()}); ///@MLLE-Generated
  2. #include "MLLE-Include-1.5w.asc" ///@MLLE-Generated
  3. #pragma require "ab24btl19-MLLE-Data-1.j2l" ///@MLLE-Generated
  4. #pragma require "ab24btl19.j2l" ///@MLLE-Generated
  5. #include "ArcaneWeapon9.asc" ///@MLLE-Generated
  6. #pragma require "ArcaneWeapon9.asc" ///@MLLE-Generated
  7. #include "SEenergyblast-mlle.asc" ///@MLLE-Generated
  8. #pragma require "SEenergyblast-mlle.asc" ///@MLLE-Generated
  9. #include "petrolBomb.asc" ///@MLLE-Generated
  10. #pragma require "petrolBomb.asc" ///@MLLE-Generated
  11. #include "SEroller-mlle.asc" ///@MLLE-Generated
  12. #pragma require "SEroller-mlle.asc" ///@MLLE-Generated
  13.  
  14. /*******************************
  15. A 2021 Mystic Legends Release!
  16. http://www.mysticlegends.org
  17. /******************************/
  18.  
  19. ///@SaveAndRunArgs -server -battle
  20. #include "TrueColor v13.asc"
  21. #pragma require "mlreign-cable-green.png"
  22.  
  23. void onLevelLoad() {
  24.         TrueColor::ProcessPalette();
  25.         TrueColor::Bitmap("mlreign-cable-green.png").saveToAnimFrames(jjAnimations[jjAnimSets[ANIM::SPIKEBOLL].allocate(array<uint>={TrueColor::NumberOfFramesPerImage})]);
  26.        
  27.         //begin rain
  28.         jjANIMATION@ anim = jjAnimations[jjAnimSets[ANIM::COMMON].firstAnim + 2];
  29.         for (uint frameID = 0; frameID < anim.frameCount; ++frameID) {
  30.                 jjANIMFRAME@ frame = jjAnimFrames[anim.firstFrame + frameID];          
  31.                 jjPIXELMAP rain(2,48);
  32.                 for (uint y = 0; y < rain.height; ++y) {
  33.                         if (y < 32) {
  34.                                 rain[0,y] = 159;
  35.                         }
  36.                         else {
  37.                                 rain[0,y] = 192;
  38.                         }
  39.                 }
  40.                 rain.save(frame);              
  41.                 frame.hotSpotX = -frame.width/2;
  42.                 frame.hotSpotY = -frame.height;
  43.         }      
  44.  
  45.         for (uint animID = 2; animID <= 3; ++animID) { //ANIM::COMMON, which houses the rain animations, actually has four different animations, but only the last two are of interest here
  46.                 jjANIMATION@ animX = jjAnimations[jjAnimSets[ANIM::COMMON].firstAnim + animID];
  47.                 for (uint frameID = 0; frameID < animX.frameCount; ++frameID) {
  48.                         jjANIMFRAME@ frame = jjAnimFrames[animX.firstFrame + frameID];
  49.                         jjPIXELMAP image(frame); //Pass a jjANIMFRAME@ to a jjPIXELMAP constructor, and the resulting pixel map will use the width, height, and image of that jjANIMFRAME.
  50.                         for (uint x = 0; x < image.width; ++x) //Boilerplate looping code for accessing every pixel in the map.
  51.                                 for (uint y = 0; y < image.height; ++y)
  52.                                         if (image[x,y] != 0) //For pixel maps, color 0 is transparent.
  53.                                                 image[x,y] = 16 + (image[x,y] & 7); //162 is one of the brightest colors in the Medivo palette's wall tile gradient. Most sprites use the sprite color section of the palette, which organizes colors in groups of 8, so you can use &7 on a color to get basically its brightness without its particular gradient.
  54.                         image.save(frame); //An essential last step, or the changes will only have been made to the jjPIXELMAP, not the jjANIMFRAME, and the player won't end up seeing anything change.
  55.                 }
  56.         }
  57. }
  58.  
  59. int everyOtherFlame = 0;
  60. namespace SzmolWeaponPack {
  61.         namespace PetrolBomb {
  62.                 class MyPetrol : Weapon {
  63.                         void addFlames(float x, float y, uint16 crID, CREATOR::Type crType, bool send) const override {
  64.                                 Weapon::addFlames(x,y,crID,crType,send);
  65.                                 for (uint objectID = jjObjectCount; --objectID != 0;) {
  66.                                         jjOBJ@ bullet = jjObjects[objectID];
  67.                                         if (bullet.behavior == bombFlame) {
  68.                                                 //use a different behavior (which interacts with tornado guns) but also spawn fewer/faster flames to reduce lag a bit with so much petrol ammo
  69.                                                 if ((everyOtherFlame ^= 1) == 1) {
  70.                                                         bullet.behavior = myFlame;
  71.                                                         bullet.age += 456;
  72.                                                 } else
  73.                                                         bullet.delete();
  74.                                         }
  75.                                 }
  76.                         }
  77.                 }
  78.                 void myFlame(jjOBJ@ obj) {
  79.                         bombFlame(obj);
  80.                         //jjAlert("wew");
  81.                         if (obj.xSpeed == 0 && obj.ySpeed == 0) {
  82.                                 if (jjGameTicks & 3 == 0)
  83.                                         for (uint objectID = jjObjectCount; --objectID != 0;) {
  84.                                                 jjOBJ@ bullet = jjObjects[objectID];
  85.                                                 /*if (bullet.behavior == ArcaneWeapons::TornadoGun::Behavior && obj.doesCollide(bullet)) {
  86.                                                         obj.xSpeed = bullet.xSpeed;
  87.                                                         obj.ySpeed = bullet.ySpeed * 3;
  88.                                                         obj.age /= 2;
  89.                                                         obj.var[0] = 1;
  90.                                                         break;
  91.                                                 }*/
  92.                                         }
  93.                         } else if (obj.var[0] == 1 && jjGameTicks & 7 == 0) {
  94.                                 jjOBJ@ fire = jjObjects[jjAddObject(OBJECT::TOASTERBULLET, obj.xPos, obj.yPos, obj.creatorID, obj.creatorType)];
  95.                                 fire.xSpeed = obj.xAcc = 0;
  96.                                 fire.ySpeed = abs(obj.xSpeed);
  97.                         }
  98.                 }
  99.         }
  100. }
  101.  
  102. void onDrawLayer4(jjPLAYER@ player, jjCANVAS@ layer) {
  103.         if (!jjLowDetail && jjColorDepth == 16) {
  104.                 TrueColor::DrawCanvasSprite(layer, 21*32, 27*32, ANIM::SPIKEBOLL, 0, 0);
  105.                 TrueColor::DrawCanvasSprite(layer, 54*32, 58*32, ANIM::SPIKEBOLL, 0, 0);
  106.         }
  107. }
  108.  
  109. void onMain() {
  110.         jjIsSnowing = !jjLowDetail;
  111.        
  112.         jjLayerYOffset[1] = -16 + jjCos(jjGameTicks*8)*7;
  113.         jjLayerYOffset[2] = -16 + jjSin(jjGameTicks*7)*7;
  114.        
  115.         for (int i = 0; i < 1024; i++) {
  116.                 jjPARTICLE@ particle = jjParticles[i];
  117.                 if (particle.type == PARTICLE::RAIN) {
  118.                         particle.xSpeed = 0;
  119.                         particle.ySpeed = jjLocalPlayers[0].ySpeed < 0? 12 : int(12 + jjLocalPlayers[0].ySpeed);
  120.                 }
  121.         }
  122. }
  123.  
  124. int loopsDone = 0;
  125. void onFunction0(jjPLAYER@ play) {
  126.         if (play.warpID == 0) {
  127.                 jjChat("/me has fallen into slime...");
  128.                 play.warpToTile(48, 32);
  129.                 loopsDone = 0;         
  130.         }
  131. }
  132.  
  133. void onFunction1(jjPLAYER@ play) {
  134.         if (loopsDone < 5) {   
  135.                 if (jjRandom()%5 > 0) {
  136.                         jjSample(play.xPos, play.yPos, SOUND::BILSBOSS_ZIP, 45, 4000+(loopsDone*1500));
  137.                         play.showText("1#@@@@@@|B|||||||a|||||||d |||||||l|||||||u|||||||c|||||||k|||||||.|||||||.|||||||.");
  138.                 }
  139.                 else {
  140.                         play.showText("1#@@@@@@|L|||||||u|||||||c|||||||k|||||||y|||||||.|||||||.|||||||.");
  141.                         loopsDone = 0;         
  142.                         play.warpToID(jjRandom()%4 + 10);
  143.                 }
  144.         }
  145.         else {
  146.                 play.showText("1#@@@@@@|E|||||||n|||||||o|||||||u|||||||g|||||||h |||||||t|||||||o|||||||r|||||||t|||||||u|||||||r|||||||e|||||||.|||||||.|||||||.");
  147.                 loopsDone = 0;
  148.                 play.warpToID(jjRandom()%4 + 10);
  149.         }
  150.         loopsDone++; //wrong, but who cares
  151. }
  152.  
  153. void onPlayer(jjPLAYER@ play) {
  154.         if (play.yPos >= 0) {
  155.                 //Wherein "skill 3" means "MP Only"
  156.                 int skill = jjParameterGet(uint16(play.xPos/32), uint16(play.yPos/32), -4, 2); 
  157.                 if (skill == 3) {
  158.                         play.noFire = true;
  159.                 }
  160.                 else {
  161.                         play.noFire = false;
  162.                 }
  163.         }
  164. }
  165.  
  166. void onPlayerInput(jjPLAYER@ player) {
  167.         MLLE::WeaponHook.processPlayerInput(player);
  168. }
  169.  
  170. bool onDrawAmmo(jjPLAYER@ player, jjCANVAS@ canvas) {
  171.         return MLLE::WeaponHook.drawAmmo(player, canvas);
  172. }
  173.  
  174. void onReceive(jjSTREAM&in packet, int fromClientID) {
  175.         MLLE::WeaponHook.processPacket(packet, fromClientID);
  176. }