Downloads containing HH17_level05.j2as

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Holiday Hare '17Featured Download ShadowGPW Single player 8.8 Download file

File preview

  1. #pragma require "CandionV.j2t"
  2. #pragma require "SExmas.j2a"
  3. #pragma require "hh17enemies.asc"
  4. #include "hh17enemies.asc"
  5.  
  6. /*** Copypasted and adapted by Slaz, tree background by Violet CLM, xmas sprites by Sir Ementaler  ***/
  7. /*** Feel free to use/edit this script like I did :P ***/
  8.  
  9. class Imitation : jjBEHAVIORINTERFACE {
  10.         private uint8 eventID;
  11.         private jjBEHAVIOR behavior;
  12.         Imitation(uint8 realEventID, uint8 fakeEventID) {
  13.                 jjOBJ@ obj = jjObjectPresets[realEventID];
  14.                 eventID = obj.eventID;
  15.                 behavior = obj.behavior;
  16.                 obj.eventID = fakeEventID;
  17.                 obj.behavior = this;
  18.         }
  19.         void onBehave(jjOBJ@ obj) override {
  20.                 if (obj.state == STATE::DEACTIVATE)
  21.                         obj.eventID = eventID;
  22.                 obj.behave(behavior);
  23.         }
  24. }
  25.  
  26. class GiftBox : jjBEHAVIORINTERFACE {
  27.         void destroy(jjOBJ@ obj) {
  28.                 jjSample(obj.xPos, obj.yPos, SOUND::COMMON_WOOD1);
  29.                 {
  30.                         int id = jjAddObject(OBJECT::EXPLOSION, obj.xPos, obj.yPos);
  31.                         if (id != 0) {
  32.                                 jjOBJ@ other = jjObjects[id];
  33.                                 other.determineCurAnim(ANIM::PICKUPS, 4);
  34.                         }
  35.                 }
  36.                 for (int i = jjRandom() & 7 | 8; i-- != 0;) {
  37.                         int id = jjAddObject(OBJECT::SHARD, obj.xPos, obj.yPos);
  38.                         if (id != 0) {
  39.                                 jjOBJ@ other = jjObjects[id];
  40.                                 other.determineCurAnim(ANIM::PICKUPS, 93 + (jjRandom() & 1));
  41.                         }
  42.                 }
  43.                 obj.yPos -= 8.f;
  44.                 for (int i = obj.var[1]; i-- != 0;) {
  45.                         int id = jjAddObject(obj.var[0], obj.xPos, obj.yPos);
  46.                         if (id != 0) {
  47.                                 jjOBJ@ other = jjObjects[id];
  48.                                 if (other.playerHandling == HANDLING::PICKUP) {
  49.                                         int angle = (jjRandom() & 255) + 128;
  50.                                         other.xSpeed = jjCos(angle) * 5.f;
  51.                                         other.ySpeed = jjSin(angle) * -3.f;
  52.                                 } else if (other.playerHandling == HANDLING::SPECIAL) {
  53.                                         other.deactivates = false;
  54.                                 }
  55.                         }
  56.                 }
  57.                 obj.clearPlatform();
  58.                 obj.delete();
  59.         }
  60.         void onBehave(jjOBJ@ obj) override {
  61.                 switch (obj.state) {
  62.                         case STATE::START:
  63.                                 {
  64.                                         uint16 x = int(obj.xOrg) >>> 5;
  65.                                         uint16 y = int(obj.yOrg) >>> 5;
  66.                                         obj.var[0] = jjParameterGet(x, y, 0, 8);
  67.                                         obj.var[1] = jjParameterGet(x, y, 8, 4);
  68.                                         obj.curAnim += jjParameterGet(x, y, 12, 2);
  69.                                         obj.determineCurFrame();
  70.                                         obj.bulletHandling = HANDLING::DESTROYBULLET;
  71.                                         obj.scriptedCollisions = true;
  72.                                 }
  73.                                 break;
  74.                         case STATE::FALL:
  75.                                 obj.var[2] = 1;
  76.                                 break;
  77.                         case STATE::FREEZE:
  78.                         case STATE::SLEEP:
  79.                                 if (obj.var[2] != 0) {
  80.                                         destroy(obj);
  81.                                         return;
  82.                                 }
  83.                 }
  84.                 obj.behave(BEHAVIOR::MONITOR);
  85.         }
  86.         bool onObjectHit(jjOBJ@, jjOBJ@, jjPLAYER@, int) {
  87.                 return true;
  88.         }
  89.         bool onIsSolid(jjOBJ@) {
  90.                 return true;
  91.         }
  92. }
  93.  
  94. const uint levelWidth = jjLayerWidth[4];
  95. const uint levelHeight = jjLayerHeight[4];
  96.  
  97. void onLevelLoad() {
  98.         HH17::setEnemy(OBJECT::BAT);
  99.         HH17::setEnemy(OBJECT::FENCER);
  100.         HH17::setEnemy(OBJECT::ROTATINGROCK);
  101.        
  102.         array<uint8> paletteColorMapping(256);
  103.         for (int i = 22; i < 88; ++i)
  104.                 paletteColorMapping[i] = i + 0;
  105.         for (int i = 96; i < 112; ++i)
  106.                 paletteColorMapping[i] = i + 54;
  107.        
  108.         const int oldTileCount = jjTileCount;
  109.         jjTilesFromTileset("CandionV.j2t", 570, 250, paletteColorMapping);
  110.        
  111.         jjUseLayer8Speeds = true;
  112.         jjTexturedBGTexture = TEXTURE::WISETYNESS;
  113.        
  114.         Imitation(OBJECT::TACO, OBJECT::MILK);
  115.         uint src = jjAnimSets[ANIM::CUSTOM[255]].load(0, "SExmas.j2a");
  116.         uint dest = jjAnimSets[ANIM::PICKUPS];
  117.         for (int i = 0; i < 95; i++) {
  118.                 const jjANIMATION@ anim = jjAnimations[src + i];
  119.                 if (anim.frameCount != 0)
  120.                         jjAnimations[dest + i] = anim;
  121.         }
  122.         jjAnimSets[ANIM::BRIDGE].load(1, "SExmas.j2a");
  123.         jjAnimSets[ANIM::CUSTOM[0]].load(2, "SExmas.j2a");
  124.         jjObjectPresets[OBJECT::BOMBCRATE].behavior = GiftBox();
  125.         jjObjectPresets[OBJECT::BOMBCRATE].determineCurAnim(ANIM::CUSTOM[0], 0);
  126.        
  127.         jjPAL standard;
  128.         standard.load("CandionV.j2t");
  129.         jjPalette.copyFrom(16, 40, 16, standard, 1);
  130.         jjPalette.copyFrom(59, 37, 59, standard, 1);
  131.         jjPalette.apply();
  132.        
  133.         array<jjLAYER@> layerOrder = {jjLayers[1], jjLayers[2], jjLayers[3], jjLayers[4], jjLayers[5], jjLayers[6]};
  134.        
  135.         {
  136.                 jjLAYER bigTrees(4, 8), smallTrees(4, 5);
  137.                 bigTrees.tileWidth = smallTrees.tileWidth = true;
  138.                 bigTrees.limitVisibleRegion = smallTrees.limitVisibleRegion = true;
  139.                 bigTrees.yOffset = -230; smallTrees.yOffset = -350;
  140.                 bigTrees.generateSettableTileArea();
  141.                 smallTrees.generateSettableTileArea();
  142.                 for (uint x = 0; x < 4; ++x) {
  143.                         for (int y = 0; y < bigTrees.height; ++y) {
  144.                                 if (y < 3) { if (!(y == 0 && x > 1))
  145.                                         bigTrees.tileSet(x, y, 728 + (x & 1) + (y - x/2) * 10);
  146.                                 } else
  147.                                         bigTrees.tileSet(x, y, 748 + (x & 1));
  148.                         }
  149.                         for (int y = 0; y < smallTrees.height; ++y) {
  150.                                 if (y < 2)
  151.                                         smallTrees.tileSet(x, y, 726 + (x & 1) + (y * 10));
  152.                                 else
  153.                                         smallTrees.tileSet(x, y, 736);
  154.                         }
  155.                 }
  156.                 for (uint i = 0; i < 8; ++i) {
  157.                         jjLAYER trees(i < 5 ? bigTrees : smallTrees);
  158.                         trees.ySpeed = 0.13 - i * 0.02;
  159.                         trees.xSpeed = 0.3 - i * 0.024;
  160.                         trees.xOffset = jjRandom();
  161.                         trees.yOffset += (i < 5) ? int(i*60) : (210 + int(i*30));
  162.                         layerOrder.insertLast(@trees);
  163.                 }
  164.         }
  165.        
  166.         layerOrder.insertLast(jjLayers[7]);
  167.         jjLAYER secondCastle(jjLayers[7]);
  168.         secondCastle.yOffset = 48;
  169.         secondCastle.ySpeed *= 0.85;;
  170.         secondCastle.xSpeed *= 0.90;
  171.         layerOrder.insertLast(@secondCastle);
  172.        
  173.         layerOrder.insertLast(jjLayers[8]);
  174.         jjLayerOrderSet(layerOrder);
  175. }
  176.  
  177. void onLevelReload() {
  178.         HH17::processEnemyColors();
  179.         jjPAL standard;
  180.         standard.load("CandionV.j2t");
  181.         jjPalette.copyFrom(16, 40, 16, standard, 1);
  182.         jjPalette.copyFrom(59, 37, 59, standard, 1);
  183.         jjPalette.apply();
  184. }