Downloads containing ezobsidian.j2as

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Obsidian CaveFeatured Download PurpleJazz Capture the flag 8.7 Download file

File preview

  1. const bool MLLESetupSuccessful = MLLE::Setup(array<MLLEWeaponApply@> = {null, null, NapsWeapons::AntiGravityBouncer(), null, null, null, null, null, null}); ///@MLLE-Generated
  2. #include "MLLE-Include-1.5w.asc" ///@MLLE-Generated
  3. #pragma require "ezobsidian-MLLE-Data-1.j2l" ///@MLLE-Generated
  4. #pragma require "ezobsidian.j2l" ///@MLLE-Generated
  5. #include "AntiGravBouncers.asc" ///@MLLE-Generated
  6. #pragma require "AntiGravBouncers.asc" ///@MLLE-Generated
  7. #pragma require "lavaflow.wav"
  8.  
  9. int sample;
  10.  
  11. void onLevelLoad() {
  12.         generateCustomSpringSprites(jjAnimSets[ANIM::CUSTOM[1]], array<uint> = {40});
  13.         turnIntoCustomSpring(jjObjectPresets[OBJECT::FROZENSPRING], 0, 19.f, false);
  14.        
  15.         jjUseLayer8Speeds = true;
  16.         jjTexturedBGFadePositionY = 0.5;
  17.        
  18.         jjSetWaterLevel(70.5*32, true);
  19.         jjSetWaterGradient(136,55,155, 18,4,32);
  20.         jjWaterLighting = WATERLIGHT::GLOBAL;
  21.        
  22.         jjANIMATION@ anim = jjAnimations[jjAnimSets[ANIM::BRIDGE] + 3];
  23.         for (uint j = 0; j < anim.frameCount; j++) {
  24.                 jjANIMFRAME@ frame = jjAnimFrames[anim + j];
  25.                 jjPIXELMAP sprite(frame);
  26.                 for (uint x = 0; x < sprite.width; ++x) {
  27.                         for (uint y = 0; y < sprite.height; ++y) {
  28.                                 if (sprite[x,y] >= 40 && sprite[x,y] <= 47) sprite[x,y] = 96 + (sprite[x,y]&7)*2;
  29.                         }
  30.                 }
  31.                 sprite.save(frame);
  32.         }
  33.        
  34.         if (jjGameMode == GAME::SP) {
  35.                 jjLocalPlayers[0].warpToTile(14,54);
  36.         }
  37.        
  38.         jjObjectPresets[OBJECT::STEAM].behavior = Steam();
  39.        
  40.         jjSampleLoad(SOUND::WIND_WIND2A, "lavaflow.wav");
  41.        
  42.         jjPAL standard; //we need to declare an instance of jjPAL before we can load any new palettes
  43.         standard.load("Diam2.j2t"); //since everyone most likely has this tileset in their JJ2 folder
  44.         jjPalette.copyFrom(16, 40, 16, standard, 1);
  45.         jjPalette.copyFrom(59, 37, 59, standard, 1); //don't copy over entries 56-58 as they are unused by the JJ2 sprite palette, and replacing them could have unwanted side effects if they are utilised in the tileset
  46.         jjPalette.apply();
  47. }
  48.  
  49. void onLevelReload() {
  50.         if (jjGameMode == GAME::SP) {
  51.                 jjLocalPlayers[0].warpToTile(14,54);
  52.         }
  53.         jjPalette.apply();
  54. }
  55.  
  56. class Steam : jjBEHAVIORINTERFACE {
  57.         void onBehave(jjOBJ@ obj) {
  58.                 obj.behave(jjLowDetail && jjGameTicks > 1? BEHAVIOR::INACTIVE : BEHAVIOR::STEAM);
  59.         }
  60. }
  61.  
  62.  
  63. jjANIMSET@ customSpringSprite;
  64. array<int> fastCustomSpringSpeeds(jjLocalPlayerCount);
  65. bool generateCustomSpringSprites(jjANIMSET@ anim, const array<uint> &in colors) {
  66.         int length = colors.length();
  67.         bool success = (@customSpringSprite = anim).allocate(array<uint>(length * 3, 5)) !is null;
  68.         if (success) {
  69.                 uint srcSet = jjAnimSets[ANIM::SPRING];
  70.                 for (int i = 0; i < length; i++) {
  71.                         uint color = colors[i];
  72.                         uint destAnimOffset = anim + i * 3;
  73.                         for (int j = 0; j < 3; j++) {
  74.                                 uint srcAnim = jjAnimations[srcSet + j];
  75.                                 uint destAnim = jjAnimations[destAnimOffset + j];
  76.                                 for (int k = 0; k < 5; k++) {
  77.                                         jjPIXELMAP image(jjAnimFrames[destAnim + k] = jjAnimFrames[srcAnim + k]);
  78.                                         int width = image.width;
  79.                                         int height = image.height;
  80.                                         for (int l = 0; l < height; l++) {
  81.                                                 for (int m = 0; m < width; m++) {
  82.                                                         int pixel = image[m, l];
  83.                                                         if (pixel >= 32 && pixel < 40)
  84.                                                                 image[m, l] = color + (pixel & 7);
  85.                                                 }
  86.                                         }
  87.                                         if (!image.save(jjAnimFrames[destAnim + k]))
  88.                                                 return false;
  89.                                 }
  90.                         }
  91.                 }
  92.         }
  93.         return success;
  94. }
  95. void initializeCustomSpring(jjOBJ@ obj) {
  96.         int anim = obj.curAnim;
  97.         obj.behave(obj.behavior = BEHAVIOR::SPRING, false);
  98.         if (obj.curAnim != anim) {
  99.                 obj.curAnim = anim + 2;
  100.                 obj.determineCurFrame();
  101.         }
  102.         obj.draw();
  103. }
  104. void turnIntoCustomSpring(jjOBJ@ obj, uint color, float power, bool horizontal) {
  105.         if (horizontal) {
  106.                 obj.xSpeed = power;
  107.                 obj.ySpeed = 0.f;
  108.         } else {
  109.                 obj.xSpeed = 0.f;
  110.                 obj.ySpeed = -power;
  111.                 if (obj.state == STATE::START && obj.creatorType == CREATOR::LEVEL) {
  112.                         int x = int(obj.xPos) >> 5;
  113.                         int y = int(obj.yPos) >> 5;
  114.                         if (jjParameterGet(x, y, 0, 1) != 0) {
  115.                                 jjParameterSet(x, y, 0, 1, 0);
  116.                                 obj.yPos -= 4.f;
  117.                                 obj.ySpeed = power;
  118.                         }
  119.                 }
  120.         }
  121.         obj.behavior = initializeCustomSpring;
  122.         obj.curAnim = customSpringSprite + color * 3 + (horizontal ? 1 : 0);
  123.         obj.energy = obj.frameID = obj.freeze = obj.justHit = obj.light = obj.points = 0;
  124.         obj.isBlastable = obj.isTarget = obj.scriptedCollisions = obj.triggersTNT = false;
  125.         obj.deactivates = obj.isFreezable = true;
  126.         obj.bulletHandling = HANDLING::IGNOREBULLET;
  127.         obj.playerHandling = HANDLING::SPECIAL;
  128.         obj.lightType = LIGHT::NORMAL;
  129.         obj.determineCurFrame();
  130. }
  131.  
  132.  
  133. void onPlayer(jjPLAYER@ play) {
  134.        
  135.         play.lightType = LIGHT::FLICKER;
  136. }
  137.  
  138. void offsetObj(jjOBJ@ obj, float x_Org, float y_Org, float x_Offset, float y_Offset) {
  139.     if ((obj.xOrg/32) > (x_Org - 1) && (obj.xOrg/32) < (x_Org + 1) && (obj.yOrg/32) > (y_Org - 1) && (obj.yOrg/32) < (y_Org + 1)) {
  140.         obj.xPos = obj.xOrg + x_Offset;
  141.         obj.yPos = obj.yOrg + y_Offset;
  142.     }
  143. }
  144.  
  145. void onMain() {
  146.         for (int i = 1; i < jjObjectCount; i++) {
  147.                 jjOBJ@ obj = jjObjects[i];
  148.                 if (obj.isActive && obj.eventID == OBJECT::COPTER && obj.state == STATE::FLY) {
  149.                         obj.counter = 0;
  150.                         if (obj.var[4] == 0)
  151.                                 obj.state = STATE::DONE;
  152.                 }
  153.                 if (obj.eventID == OBJECT::FROZENSPRING) {
  154.                         offsetObj(obj, 29, 25, 8, 16);
  155.                         offsetObj(obj, 49, 34, -8, 16);
  156.                         offsetObj(obj, 81, 34, 8, 16);
  157.                         offsetObj(obj, 101, 25, -8, 16);
  158.                 }
  159.                
  160.         }
  161.        
  162.         if (!jjLowDetail && jjGameTicks > 1) {
  163.                 jjPARTICLE@ cinders = jjAddParticle(PARTICLE::SMOKE);
  164.                 cinders.xPos = (jjRandom()% 32) * jjLayerWidth[4];
  165.                 cinders.yPos = jjWaterLevel - (jjRandom()% 256);
  166.                 cinders.ySpeed = -1;
  167.                 sample = jjSampleLooped(jjLocalPlayers[0].xPos, jjLocalPlayers[0].yPos, SOUND::WIND_WIND2A, sample, 52, 0);
  168.         }
  169.        
  170.         jjLayers[1].yOffset = (71*32) - jjWaterLevel;
  171.         jjLayers[1].hasTiles = jjLowDetail;
  172.         jjWaterLayer = jjLowDetail? 99:1;
  173.        
  174. }
  175. bool onDrawAmmo(jjPLAYER@ player, jjCANVAS@ canvas) {
  176.         return MLLE::WeaponHook.drawAmmo(player, canvas);
  177. }
  178.