Downloads containing HH17_Level03.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. #include "HH17Enemies.asc"
  2. #pragma require "SExmas.j2a"
  3. #pragma require "HH17_XmasPalette.pal"
  4.  
  5. class MusicalAirboard : jjBEHAVIORINTERFACE {
  6.     void onBehave(jjOBJ@ obj) {
  7.         obj.state = STATE::FLOAT;
  8.         obj.behave(BEHAVIOR::PICKUP);
  9.     }
  10.     bool onObjectHit(jjOBJ@ obj, jjOBJ@ bullet, jjPLAYER@ player, int force) {
  11.         jjMusicLoad("bonus3.j2b");
  12.         player.fly = FLIGHT::AIRBOARD;
  13.         obj.behavior = BEHAVIOR::EXPLOSION2;
  14.         jjSample(obj.xPos, obj.yPos, SOUND::COMMON_PICKUP1);
  15.        
  16.         return true;
  17.     }
  18. }
  19.  
  20. class Imitation : jjBEHAVIORINTERFACE {
  21.         private uint8 eventID;
  22.         private jjBEHAVIOR behavior;
  23.         Imitation(uint8 realEventID, uint8 fakeEventID) {
  24.                 jjOBJ@ obj = jjObjectPresets[realEventID];
  25.                 eventID = obj.eventID;
  26.                 behavior = obj.behavior;
  27.                 obj.eventID = fakeEventID;
  28.                 obj.behavior = this;
  29.         }
  30.         void onBehave(jjOBJ@ obj) override {
  31.                 if (obj.state == STATE::DEACTIVATE)
  32.                         obj.eventID = eventID;
  33.                 obj.behave(behavior);
  34.         }
  35. }
  36.  
  37. class GiftBox : jjBEHAVIORINTERFACE {
  38.         void destroy(jjOBJ@ obj) {
  39.                 jjSample(obj.xPos, obj.yPos, SOUND::COMMON_WOOD1);
  40.                 {
  41.                         int id = jjAddObject(OBJECT::EXPLOSION, obj.xPos, obj.yPos);
  42.                         if (id != 0) {
  43.                                 jjOBJ@ other = jjObjects[id];
  44.                                 other.determineCurAnim(ANIM::PICKUPS, 4);
  45.                         }
  46.                 }
  47.                 for (int i = jjRandom() & 7 | 8; i-- != 0;) {
  48.                         int id = jjAddObject(OBJECT::SHARD, obj.xPos, obj.yPos);
  49.                         if (id != 0) {
  50.                                 jjOBJ@ other = jjObjects[id];
  51.                                 other.determineCurAnim(ANIM::PICKUPS, 93 + (jjRandom() & 1));
  52.                         }
  53.                 }
  54.                 obj.yPos -= 8.f;
  55.                 for (int i = obj.var[1]; i-- != 0;) {
  56.                         int id = jjAddObject(obj.var[0], obj.xPos, obj.yPos);
  57.                         if (id != 0) {
  58.                                 jjOBJ@ other = jjObjects[id];
  59.                                 if (other.playerHandling == HANDLING::PICKUP) {
  60.                                         int angle = (jjRandom() & 255) + 128;
  61.                                         other.xSpeed = jjCos(angle) * 5.f;
  62.                                         other.ySpeed = jjSin(angle) * -3.f;
  63.                                 } else if (other.playerHandling == HANDLING::SPECIAL) {
  64.                                         other.deactivates = false;
  65.                                 }
  66.                         }
  67.                 }
  68.                 obj.clearPlatform();
  69.                 obj.delete();
  70.         }
  71.         void onBehave(jjOBJ@ obj) override {
  72.                 switch (obj.state) {
  73.                         case STATE::START:
  74.                                 {
  75.                                         uint16 x = int(obj.xOrg) >>> 5;
  76.                                         uint16 y = int(obj.yOrg) >>> 5;
  77.                                         obj.var[0] = jjParameterGet(x, y, 0, 8);
  78.                                         obj.var[1] = jjParameterGet(x, y, 8, 4);
  79.                                         obj.curAnim += jjParameterGet(x, y, 12, 2);
  80.                                         obj.determineCurFrame();
  81.                                         obj.bulletHandling = HANDLING::DESTROYBULLET;
  82.                                         obj.scriptedCollisions = true;
  83.                                 }
  84.                                 break;
  85.                         case STATE::FALL:
  86.                                 obj.var[2] = 1;
  87.                                 break;
  88.                         case STATE::FREEZE:
  89.                         case STATE::SLEEP:
  90.                                 if (obj.var[2] != 0) {
  91.                                         destroy(obj);
  92.                                         return;
  93.                                 }
  94.                 }
  95.                 obj.behave(BEHAVIOR::MONITOR);
  96.         }
  97.         bool onObjectHit(jjOBJ@, jjOBJ@, jjPLAYER@, int) {
  98.                 return true;
  99.         }
  100.         bool onIsSolid(jjOBJ@) {
  101.                 return true;
  102.         }
  103. }
  104.  
  105. void onFunction0(jjPLAYER@ player) {
  106.     jjMusicLoad("Christmas-X-Core_JJ2.it");
  107.     player.fly = FLIGHT::NONE;
  108. }
  109.  
  110. void onLevelLoad() {
  111.  
  112.         HH17::setEnemy(OBJECT::MONKEY);
  113.         HH17::setEnemy(OBJECT::DRAGON);
  114.         HH17::setEnemy(OBJECT::RAVEN);
  115.         HH17::setEnemy(OBJECT::DEMON);
  116.         HH17::setEnemy(OBJECT::DOGGYDOGG);
  117.         HH17::setEnemy(OBJECT::BAT);
  118.         HH17::setEnemy(OBJECT::FLOATSUCKER);
  119.         HH17::setEnemy(OBJECT::SUCKER);
  120.         HH17::setEnemy(OBJECT::CRAB);
  121.  
  122.         jjObjectPresets[OBJECT::AIRBOARD].behavior = MusicalAirboard();
  123.         jjObjectPresets[OBJECT::AIRBOARD].scriptedCollisions = true;
  124.        
  125.         Imitation(OBJECT::TACO, OBJECT::MILK);
  126.         uint src = jjAnimSets[ANIM::CUSTOM[255]].load(0, "SExmas.j2a");
  127.         uint dest = jjAnimSets[ANIM::PICKUPS];
  128.         for (int i = 0; i < 95; i++) {
  129.                 const jjANIMATION@ anim = jjAnimations[src + i];
  130.                 if (anim.frameCount != 0)
  131.                         jjAnimations[dest + i] = anim;
  132.         }
  133.         jjAnimSets[ANIM::BRIDGE].load(1, "SExmas.j2a");
  134.         jjAnimSets[ANIM::CUSTOM[0]].load(2, "SExmas.j2a");
  135.         jjObjectPresets[OBJECT::BOMBCRATE].behavior = GiftBox();
  136.         jjObjectPresets[OBJECT::BOMBCRATE].determineCurAnim(ANIM::CUSTOM[0], 0);
  137.        
  138.         jjAnimSets[ANIM::SPIKEBOLL].load(3, "SExmas.j2a");
  139.         jjAnimSets[ANIM::SPIKEBOLL3D].load(3, "SExmas.j2a");
  140.         jjAnimSets[ANIM::SPIKEPLAT].load(4, "SExmas.j2a");
  141.         jjObjectPresets[OBJECT::SPIKEBOLL].killAnim = jjObjectPresets[OBJECT::SPIKEBOLL].determineCurAnim(ANIM::SPIKEBOLL, 0) + 1;
  142.         jjObjectPresets[OBJECT::SPIKEBOLL3D].killAnim = jjObjectPresets[OBJECT::SPIKEBOLL3D].determineCurAnim(ANIM::SPIKEBOLL3D, 0) + 1;
  143.         jjObjectPresets[OBJECT::SPIKEPLATFORM].killAnim = jjObjectPresets[OBJECT::SPIKEPLATFORM].determineCurAnim(ANIM::SPIKEPLAT, 0) + 1;
  144.  
  145.         jjPalette.load("HH17_XmasPalette.pal");
  146.         jjPalette.apply();
  147. }
  148.  
  149. void onLevelReload() {
  150.     HH17::processEnemyColors(); //ensure that enemy colors are still displaying correctly when the level reloads after death
  151.     jjMusicLoad("Christmas-X-Core_JJ2.it");
  152.         onLevelLoad();
  153. }
  154.  
  155. void onMain() {
  156.     HH17::handleEnemyProjectiles(); //this is required to handle the modifications to enemy bullets from the Monkeys and Dragons
  157. }