Downloads containing blgsand.j2as

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Sand CastleFeatured Download Rysice Capture the flag 9 Download file

File preview

  1. const bool MLLESetupSuccessful = MLLE::Setup(); ///@MLLE-Generated
  2. #include "MLLE-Include-1.5.asc" ///@MLLE-Generated
  3. #pragma require "blgsand-MLLE-Data-1.j2l" ///@MLLE-Generated
  4. #pragma require "Damn1.j2t" ///@MLLE-Generated
  5. #pragma require "blgsand.j2l" ///@MLLE-Generated
  6. array<CustomParticle> particles2(255);
  7. array<Fish@> fishCount;
  8. array<int> crabs(5);
  9. bool crabPacketIsSent = false;
  10. enum packet_type {crabPacket};
  11.  
  12. // Author Input
  13. int fishLimit = 8; // This is the biggest amount of fish you may possibly see on-screen,edit this however you want (negative values are treated as "infinite").
  14. int colorEndFade = 15; // This is highest amount of how much the textured background will shift it's colors (originalRGB + colorEndFade)
  15. // Author input
  16.  
  17. void onLevelLoad() {
  18.         jjUseLayer8Speeds = true;
  19.         jjLayers[2].spriteMode = SPRITE::BLEND_NORMAL;
  20.         jjLayers[2].spriteParam = 255;
  21.         jjAnimSets[ANIM::FISH].load();
  22.         jjObjectPresets[OBJECT::CRAB].scriptedCollisions = true;
  23.         jjObjectPresets[OBJECT::CRAB].playerHandling = HANDLING::SPECIAL;
  24.         jjObjectPresets[OBJECT::CRAB].isTarget = false;
  25.         jjObjectPresets[OBJECT::CRAB].isBlastable = false;
  26.         jjObjectPresets[OBJECT::CRAB].triggersTNT = false;
  27.         jjObjectPresets[OBJECT::CRAB].isFreezable = false;
  28.         jjObjectPresets[OBJECT::CRAB].bulletHandling = HANDLING::IGNOREBULLET;
  29.         jjObjectPresets[OBJECT::CRAB].behavior = Crab();
  30.         flagSprite();
  31.         //coloredBridge();
  32. }
  33.  
  34. void onLevelReload() {
  35.         crabPacketIsSent = false;
  36. }
  37.  
  38. void onReceive(jjSTREAM &in packet, int clientID) {
  39.         uint8 type;    
  40.         packet.pop(type);
  41.         if (jjIsServer) {
  42.                 switch (type) {
  43.                         case crabPacket: {
  44.                                 array<int> crabColor(5);
  45.                                 jjSTREAM replyPacket;
  46.                                 replyPacket.push(uint8(crabPacket));
  47.                                 for (int i = 0;i < 5;i++) {
  48.                                         crabColor[i] = jjObjects[crabs[i]].var[0];
  49.                                         replyPacket.push(crabColor[i]);
  50.                                 }
  51.                                 jjSendPacket(replyPacket, clientID);
  52.                         }      
  53.                         break;
  54.                 }
  55.         }  else {
  56.                 switch (type) {
  57.                         case crabPacket: {
  58.                                 array<int> crabColor(5);
  59.                                 for (int i = 0;i < 5;i++) {
  60.                                         packet.pop(crabColor[i]);
  61.                                         jjObjects[crabs[i]].var[0] = crabColor[i];
  62.                                 }
  63.                         }
  64.                         break; 
  65.                 }
  66.         }
  67.  }
  68.  
  69. void flagSprite() {
  70.         jjANIMATION@ flag = jjAnimations[jjObjectPresets[OBJECT::CTFBASE].curAnim];
  71.         jjANIMATION@ apple = jjAnimations[jjAnimSets[ANIM::PICKUPS].firstAnim + 78];
  72.         apple.frameCount = flag.frameCount;
  73.         for (uint i = 0; i < flag.frameCount; ++i) {
  74.                 jjANIMFRAME@ frame = jjAnimFrames[flag + i];
  75.                 jjANIMFRAME@ frame2 = jjAnimFrames[apple + i];
  76.                 frame2.coldSpotX = frame.coldSpotX;
  77.                 frame2.coldSpotY = frame.coldSpotY;
  78.                 frame2.hotSpotX = frame.hotSpotX;
  79.                 frame2.hotSpotY = frame.hotSpotY;
  80.                 jjPIXELMAP image(frame);
  81.                 for (uint x = 0; x < image.width; ++x)
  82.                         for (uint y = 0; y < image.height; ++y)
  83.                                 if (image[x,y] & ~7 == 24)
  84.                                         image[x,y] = 160 + ((image[x,y] & 7)*2);
  85.                 image.save(frame2);
  86.         }
  87. }
  88.  
  89. void coloredBridge() {
  90.         jjANIMATION@ bridge = jjAnimations[jjAnimSets[ANIM::BRIDGE].firstAnim + 1];
  91.         for (uint i = 0; i < bridge.frameCount; ++i) {
  92.                 jjANIMFRAME@ frame = jjAnimFrames[bridge + i];
  93.                 jjPIXELMAP image(frame);
  94.                 for (uint x = 0; x < image.width; ++x)
  95.                         for (uint y = 0; y < image.height; ++y)
  96.                                 if (image[x,y] & ~7 == 64)
  97.                                         image[x,y] = 96 + ((image[x,y] & 7));
  98.                 image.save(frame);
  99.         }
  100. }
  101. void onPlayer(jjPLAYER@ play) {
  102.         if (play.yPos >= 0) {
  103.                 int skill = jjParameterGet(uint16(play.xPos/32), uint16(play.yPos/32), -4, 2);
  104.                 int event = jjEventGet(uint16(play.xPos/32), uint16(play.yPos/32));
  105.                 if (skill == 3 && event != 196) {
  106.                         if (jjLayers[2].spriteParam > 64) {
  107.                                 jjLayers[2].spriteParam = jjLayers[2].spriteParam - 10;
  108.                         }
  109.                 }
  110.                 else if (jjLayers[2].spriteParam != 255) {
  111.                         jjLayers[2].spriteParam = jjLayers[2].spriteParam + 10;
  112.                 }
  113.         }
  114. }
  115.  
  116. int fishID = 0;
  117. void spawnFish() {
  118.         int fishNR = availableFish();
  119.         if (fishNR != -1) {
  120.                 Fish@ fish = fishCount[fishNR];
  121.                 bool rightNew = (jjRandom() % 2 == 0? false : true);
  122.                 fish.right = rightNew;
  123.                 fish.xPos = (rightNew ? 0 : (fish.deadEnd));
  124.                 fish.distance = int(jjRandom() % 35);
  125.                 fish.xSpeed = 0.1;
  126.                 fish.color = int(jjRandom() % 8)*8;
  127.                 fish.active = true;
  128.         } else {
  129.                 if (fishID < fishLimit || fishLimit < 0) {
  130.                         Fish newFish;
  131.                         newFish.id = fishID;
  132.                         fishCount.insertLast(@newFish);
  133.                         fishID++;
  134.                 }
  135.         }
  136. }
  137.  
  138.  
  139. int originalRed = jjGetFadeColors().red;
  140. int originalGreen = jjGetFadeColors().green;
  141. int originalBlue = jjGetFadeColors().blue;
  142.  
  143. void animateSun() {
  144.         array<int> RGB = {0,0,0};
  145.         array<int> oRGB = {originalRed,originalGreen,originalBlue};
  146.         for (int i = 0;i < 3;i++) {
  147.                 RGB[i] = oRGB[i] + int(abs(jjCos((jjGameTicks) % 1024)*colorEndFade));
  148.                 if (RGB[i] < 0) {
  149.                         RGB[i] = 0;
  150.                 } else
  151.                 if (RGB[i] > 255) {
  152.                 RGB[i] = 255;
  153.                 }
  154.         }
  155.         jjSetFadeColors(RGB[0],RGB[1],RGB[2]);
  156. }
  157. void onMain() {
  158.         if (jjGameTicks % 10 == 0) {
  159.                 if (jjRandom() % 100 > 90) {
  160.                         spawnFish();
  161.                 }
  162.         }
  163.        
  164.          animateSun();
  165.        
  166.         if (jjGameTicks > 70 && !crabPacketIsSent) {
  167.                 int crab = 0;
  168.                 for (int i = 0;i < jjObjectCount;i++) {
  169.                         jjOBJ@ o = jjObjects[i];
  170.                         if (o.eventID == OBJECT::CRAB) {
  171.                                 crabs[crab] = o.objectID;
  172.                                 crab++;
  173.                         }
  174.                 }
  175.                 if (!jjIsServer) {
  176.                         jjSTREAM packet;
  177.                         packet.push(uint8(crabPacket));
  178.                         jjSendPacket(packet);
  179.                 }
  180.                 crabPacketIsSent = true;
  181.         }
  182.         for (int i = 0;i < int(particles2.length - 1);i++) {
  183.                 CustomParticle@ particle = particles2[i];
  184.                 particle.running();
  185.         }
  186.         if (jjGameTicks % 70 == 0) {           
  187.                 int random1 = (jjRandom() % 10);
  188.                 int random2 = (jjRandom() % 6);
  189.                 int random3 = (jjRandom() % 12);
  190.                 int random4 = (jjRandom() % 15);
  191.                 int random5 = (jjRandom() % 4);
  192.                 int random9 = (jjRandom() % 8);
  193.                 int offset = (jjRandom() % 32);
  194.                 array<int> locations1y  = {68,68,68,71,71,72,72,72,72,72};
  195.                 array<int> locations3y  = {58,58,58,58,58,58,56,56,56,56,56,56};
  196.                 array<int> locations4y  = {56,56,56,56,57,58,58,58,57,57,57,57,57,57,57};
  197.                 array<int> locations5x  = {114,115,115,116};
  198.                 spawnCustomParticles(30*32 - offset + (random1*32),locations1y[random1]*32,0,0.5,5);
  199.                 spawnCustomParticles(61*32 - offset + (random2*32),59*32,0,0.5,5);
  200.                 spawnCustomParticles(74*32 - offset + (random3*32),locations3y[random3]*32,0,0.5,5);
  201.                 spawnCustomParticles(84*32 - offset + (random4*32),locations4y[random4]*32,0,0.5,5);
  202.                 spawnCustomParticles(locations5x[random5]*32 - offset,(57*32) - (random5*32),0,0.5,5);
  203.                 spawnCustomParticles(152*32 + (random1*32) - offset,58*32,0,0.5,5);
  204.                 spawnCustomParticles(76*32 + ((jjRandom() % 9)*32) - offset,67*32,0,0.5,5);
  205.                 spawnCustomParticles(104*32 + ((jjRandom() % 13)*32) - offset,70*32,0,0.5,5);
  206.                 spawnCustomParticles(124*32 + ((jjRandom() % 8)*32) - offset,73*32,0,0.5,5);
  207.                 spawnCustomParticles(141*32 + (random9*32) - offset,69*32 - 16,0,0.5,5);
  208.         }
  209. }
  210.  
  211. void onDrawLayer4(jjPLAYER@ player, jjCANVAS@ canvas) {
  212.         canvas.drawResizedSprite(34*32 - 4,57*32 - 5,ANIM::PICKUPS,78,(jjGameTicks % (8*10)/10),5,5);
  213.         canvas.drawResizedSprite(63*32 - 4,55*32 - 5,ANIM::PICKUPS,78,(jjGameTicks % (8*10)/10),4,3.8);
  214.         canvas.drawResizedSprite(108*32 - 4,38*32 - 5,ANIM::PICKUPS,78,(jjGameTicks % (8*10)/10),6.3,4.5);
  215.         canvas.drawResizedSprite(156*32 - 4,52*32 - 5,ANIM::PICKUPS,78,(jjGameTicks % (8*10)/10),5,4);
  216. }
  217.  
  218. void onDrawLayer7(jjPLAYER@ player, jjCANVAS@ canvas) {
  219.         array<Fish> fish(fishCount.length());
  220.         array<int> distances(fishCount.length());
  221.         for (int i = 0;i < int(fishCount.length());i++) {
  222.                 fish[i] = fishCount[i];
  223.         }
  224.         fish.sortAsc();
  225.         for (int i = 0;i < int(fishCount.length());i++) {
  226.                 if (fish[i].active) {  
  227.                         float size = 0.1 + (fish[i].distance*0.01);
  228.                         canvas.drawResizedSprite(int(fish[i].xPos),485 + fish[i].distance,ANIM::FISH,1,(jjGameTicks % 60)/10,((size)*(!fish[i].right? -1 : 1)),size,SPRITE::PALSHIFT,-16 + fish[i].color);
  229.                         canvas.drawResizedSprite(int(fish[i].xPos),485 + fish[i].distance,ANIM::FISH,1,(jjGameTicks % 60)/10,((size)*(!fish[i].right? -1 : 1)),size,SPRITE::TRANSLUCENTCOLOR,32);
  230.                         if (fish[i].distance <= 17) {
  231.                                 canvas.drawResizedSprite(int(fish[i].xPos),485 + fish[i].distance,ANIM::FISH,1,(jjGameTicks % 60)/10,((size)*(!fish[i].right? -1 : 1)),size,SPRITE::TRANSLUCENTCOLOR,32);
  232.                         }
  233.                         //canvas.drawString(fish[i].xPos,485 + fish[i].distance,"" + fish[i].id);
  234.                 }
  235.                 fishCount[i].main();
  236.         }
  237.         //canvas.drawResizedSprite(250,485,ANIM::FISH,1,(jjGameTicks % 60)/10,0.3,0.3,SPRITE::SHADOW);
  238.         //canvas.drawResizedSprite(250,520,ANIM::FISH,1,(jjGameTicks % 60)/10,0.5,0.5,SPRITE::SHADOW);
  239. }
  240.  
  241.  
  242. class Crab : jjBEHAVIORINTERFACE {
  243.         void onBehave(jjOBJ@ obj) {
  244.                 if (obj.state == STATE::START) {
  245.                         if (jjIsServer) {
  246.                                 obj.var[0] = 8 + ((jjRandom() % 20)*8);
  247.                         }
  248.                 }
  249.                         obj.behave(BEHAVIOR::WALKINGENEMY);
  250.         }
  251.         void onDraw(jjOBJ@ obj) {
  252.                 jjDrawResizedSpriteFromCurFrame(obj.xPos,obj.yPos,obj.curFrame,obj.direction,1,SPRITE::SINGLEHUE,obj.var[0]);
  253.         }
  254. }
  255.  
  256. class CustomParticle {
  257.         int countDown,layer;
  258.         float xPos,yPos,xSpeed,ySpeed;
  259.         bool active;
  260.         void running() {
  261.                 if (active) {
  262.                         if (countDown > 0) {
  263.                                 countDown--;
  264.                         }
  265.                         if (yPos < 0 || xPos < 0) {
  266.                                 countDown = 0;
  267.                                 xPos = 32;
  268.                                 yPos = 32;
  269.                         }
  270.                         jjDrawRotatedSprite(xPos,yPos,ANIM::AMMO,4,0,255 - countDown,countDown*0.004,countDown*0.004,SPRITE::SINGLEHUE,112,layer);
  271.                         xPos += xSpeed;
  272.                         yPos += ySpeed;
  273.                 }
  274.                 if (countDown <= 0) {
  275.                         active = false;
  276.                         countDown = 0;
  277.                 }
  278.         }
  279. }
  280.  
  281. class Fish {
  282.         int id,distance,deadEnd,color;
  283.         float xPos,xSpeed;
  284.         bool right,active;
  285.        
  286.         Fish() {
  287.                 this.right = (jjRandom() % 2 == 0? true : false);
  288.                 this.deadEnd = jjResolutionWidth + 32;
  289.                 this.xPos = (right? 0 : (deadEnd));
  290.                 this.distance = 1 + int(jjRandom() % 35);
  291.                 this.color = int(jjRandom() % 8)*8;
  292.                 this.xSpeed = 0.1;
  293.                 this.active = true;
  294.         }
  295.        
  296.         void main() {
  297.                 if (active) {
  298.                         xPos += (xSpeed + (distance*0.01))*(right? 1 : -1);
  299.                 }
  300.                 if (((xPos > deadEnd && right) || (xPos < 0 && !right)) && active) {
  301.                         active = false;
  302.                 }
  303.         }
  304.        
  305.         int opCmp(const Fish&in other) const {
  306.         return int(distance - other.distance);
  307.     }
  308. }
  309.  
  310. void spawnCustomParticles(float xPos,float yPos,float xSpeed,float ySpeed,int layer) {
  311.         CustomParticle@ particle = particles2[availableParticles()];
  312.         particle.xPos = xPos;
  313.         particle.yPos = yPos;
  314.         particle.layer = layer;
  315.         particle.countDown = 255;
  316.         particle.active = true;
  317.         particle.xSpeed = xSpeed;
  318.         particle.ySpeed = ySpeed;
  319. }
  320.  
  321. int availableParticles() {
  322.         for (int i = 0;i < int(particles2.length - 1);i++)
  323.                 if (particles2[i].active != true) {
  324.                         return i;
  325.                 }
  326.         return 0;
  327. }
  328.  
  329. int availableFish() {
  330.         for (int i = 0;i < int(fishCount.length - 1);i++)
  331.                 if (fishCount[i].active != true) {
  332.                         return i;
  333.                 }
  334.         return -1;
  335. }