Downloads containing hh17_level04.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 "MLLE-Include-1.4.asc"
  2. const bool MLLESetupSuccessful = MLLE::Setup();
  3. #pragma require "hh17_level04-MLLE-Data-2.j2l"
  4. #pragma require "hh17_level04-MLLE-Data-1.j2l"
  5. #pragma require "hh17_level04.j2l"
  6. #pragma require "cksigil.j2t"
  7. #pragma require "eyes.j2t"
  8. #pragma require "DiambXmas.j2t"
  9. #include "Jazz1Enemies v03.asc"
  10. #include "hh17enemies.asc"
  11. #pragma require "Dreamland.j2t"
  12. #pragma require "ICInfernoI.j2t"
  13. #pragma require "EasterWinter.j2t"
  14. #pragma offer "Underground.ogg"
  15.  
  16.  
  17.  //Sir Ementaler's Xmas Replacers
  18. class Imitation : jjBEHAVIORINTERFACE {
  19.         private uint8 eventID;
  20.         private jjBEHAVIOR behavior;
  21.         Imitation(uint8 realEventID, uint8 fakeEventID) {
  22.                 jjOBJ@ obj = jjObjectPresets[realEventID];
  23.                 eventID = obj.eventID;
  24.                 behavior = obj.behavior;
  25.                 obj.eventID = fakeEventID;
  26.                 obj.behavior = this;
  27.         }
  28.         void onBehave(jjOBJ@ obj) override {
  29.                 if (obj.state == STATE::DEACTIVATE)
  30.                         obj.eventID = eventID;
  31.                 obj.behave(behavior);
  32.         }
  33. }
  34.  
  35. //Sir Ementaler's Gift Boxes
  36. class GiftBox : jjBEHAVIORINTERFACE {
  37.         void destroy(jjOBJ@ obj) {
  38.                 jjSample(obj.xPos, obj.yPos, SOUND::COMMON_WOOD1);
  39.                 {
  40.                         int id = jjAddObject(OBJECT::EXPLOSION, obj.xPos, obj.yPos);
  41.                         if (id != 0) {
  42.                                 jjOBJ@ other = jjObjects[id];
  43.                                 other.determineCurAnim(ANIM::PICKUPS, 4);
  44.                         }
  45.                 }
  46.                 for (int i = jjRandom() & 7 | 8; i-- != 0;) {
  47.                         int id = jjAddObject(OBJECT::SHARD, obj.xPos, obj.yPos);
  48.                         if (id != 0) {
  49.                                 jjOBJ@ other = jjObjects[id];
  50.                                 other.determineCurAnim(ANIM::PICKUPS, 93 + (jjRandom() & 1));
  51.                         }
  52.                 }
  53.                 obj.yPos -= 8.f;
  54.                 for (int i = obj.var[1]; i-- != 0;) {
  55.                         int id = jjAddObject(obj.var[0], obj.xPos, obj.yPos);
  56.                         if (id != 0) {
  57.                                 jjOBJ@ other = jjObjects[id];
  58.                                 if (other.playerHandling == HANDLING::PICKUP) {
  59.                                         int angle = (jjRandom() & 255) + 128;
  60.                                         other.xSpeed = jjCos(angle) * 5.f;
  61.                                         other.ySpeed = jjSin(angle) * -3.f;
  62.                                 } else if (other.playerHandling == HANDLING::SPECIAL) {
  63.                                         other.deactivates = false;
  64.                                 }
  65.                         }
  66.                 }
  67.                 obj.clearPlatform();
  68.                 obj.delete();
  69.         }
  70.         void onBehave(jjOBJ@ obj) override {
  71.                 switch (obj.state) {
  72.                         case STATE::START:
  73.                                 {
  74.                                         uint16 x = int(obj.xOrg) >>> 5;
  75.                                         uint16 y = int(obj.yOrg) >>> 5;
  76.                                         obj.var[0] = jjParameterGet(x, y, 0, 8);
  77.                                         obj.var[1] = jjParameterGet(x, y, 8, 4);
  78.                                         obj.curAnim += jjParameterGet(x, y, 12, 2);
  79.                                         obj.determineCurFrame();
  80.                                         obj.bulletHandling = HANDLING::DESTROYBULLET;
  81.                                         obj.scriptedCollisions = true;
  82.                                 }
  83.                                 break;
  84.                         case STATE::FALL:
  85.                                 obj.var[2] = 1;
  86.                                 break;
  87.                         case STATE::FREEZE:
  88.                         case STATE::SLEEP:
  89.                                 if (obj.var[2] != 0) {
  90.                                         destroy(obj);
  91.                                         return;
  92.                                 }
  93.                 }
  94.                 obj.behave(BEHAVIOR::MONITOR);
  95.         }
  96.         bool onObjectHit(jjOBJ@, jjOBJ@, jjPLAYER@, int) {
  97.                 return true;
  98.         }
  99.         bool onIsSolid(jjOBJ@) {
  100.                 return true;
  101.         }
  102. }
  103.  
  104.  
  105. void onLevelLoad() {
  106.         jjObjectPresets[OBJECT::DEMON].determineCurFrame();
  107.         jjObjectPresets[OBJECT::DEMON].energy = 3;
  108.         jjObjectPresets[OBJECT::DEMON].behavior = IceDaemon;
  109.         jjObjectPresets[OBJECT::DEMON].xSpeed = 2.5;
  110.         jjObjectPresets[OBJECT::DEMON].isFreezable = false;
  111.         Jazz1::MakeEnemy(OBJECT::DRAGONFLY, Jazz1::Enemies::Holidaius_Devil);
  112.         jjObjectPresets[OBJECT::DRAGONFLY].behavior = BlackDaemon;
  113.         jjObjectPresets[OBJECT::DRAGONFLY].determineCurFrame();
  114.         jjObjectPresets[OBJECT::DRAGONFLY].energy = 2;
  115.         jjObjectPresets[OBJECT::DRAGONFLY].bulletHandling = HANDLING::HURTBYBULLET;
  116.         jjObjectPresets[OBJECT::DRAGONFLY].playerHandling = HANDLING::ENEMY;
  117.         jjObjectPresets[OBJECT::DRAGONFLY].isTarget = true;
  118.         jjObjectPresets[OBJECT::BEEBOY].determineCurFrame();
  119.         jjObjectPresets[OBJECT::BEEBOY].behavior = Locust;
  120.         jjObjectPresets[OBJECT::RAPIER].determineCurFrame();
  121.         jjObjectPresets[OBJECT::RAPIER].behavior = Revenant;
  122.         //jjObjectPresets[OBJECT::BEE].determineCurFrame();
  123.         //jjObjectPresets[OBJECT::BEE].behavior = SnowBee;
  124.         jjObjectPresets[OBJECT::BUTTERFLY].determineCurFrame();
  125.         jjObjectPresets[OBJECT::BUTTERFLY].bulletHandling = HANDLING::IGNOREBULLET;
  126.         //jjObjectPresets[OBJECT::BUTTERFLY].playerHandling = HANDLING::ENEMYBULLET;
  127.         jjObjectPresets[OBJECT::BUTTERFLY].scriptedCollisions = true;
  128.         jjObjectPresets[OBJECT::BUTTERFLY].isTarget = false;
  129.         jjObjectPresets[OBJECT::BUTTERFLY].determineCurAnim(ANIM::ROCK,0);
  130.         jjObjectPresets[OBJECT::BUTTERFLY].frameID = 1;
  131.         jjObjectPresets[OBJECT::BUTTERFLY].energy = 999; //It's supposed to be invincible to melee attacks but I got lazy and couldn't get it to work in time...
  132.         jjObjectPresets[OBJECT::BUTTERFLY].behavior = RockyB;
  133.         jjObjectPresets[OBJECT::FASTFIRE].behavior = FastFire;
  134.         HH17::setEnemy(OBJECT::DRAGON);
  135.         HH17::setEnemy(OBJECT::TUFTURT);
  136.         HH17::setEnemy(OBJECT::RAVEN);
  137.         HH17::setEnemy(OBJECT::LABRAT);
  138.         HH17::setEnemy(OBJECT::SKELETON);
  139.         HH17::setEnemy(OBJECT::FLOATSUCKER);
  140.         HH17::setEnemy(OBJECT::SUCKER);
  141.         HH17::setEnemy(OBJECT::MONKEY);
  142.         HH17::setEnemy(OBJECT::STANDMONKEY);
  143.         if (jjDifficulty >= 2) HH17::setEnemy(OBJECT::DEMON);
  144.         jjAnimSets[ANIM::SKELETON].load();
  145.         jjEnforceLighting = LIGHT::COMPLETE;
  146.         //Sir Ementaler's Xmas Replacers
  147.         Imitation(OBJECT::TACO, OBJECT::MILK);
  148.         uint src = jjAnimSets[ANIM::CUSTOM[255]].load(0, "SExmas.j2a");
  149.         uint dest = jjAnimSets[ANIM::PICKUPS];
  150.         for (int i = 0; i < 95; i++) {
  151.                 const jjANIMATION@ anim = jjAnimations[src + i];
  152.                 if (anim.frameCount != 0)
  153.                         jjAnimations[dest + i] = anim;
  154.         }
  155.         jjAnimSets[ANIM::BRIDGE].load(1, "SExmas.j2a");
  156.         jjAnimSets[ANIM::CUSTOM[0]].load(2, "SExmas.j2a");
  157.         jjObjectPresets[OBJECT::BOMBCRATE].behavior = GiftBox();
  158.         jjObjectPresets[OBJECT::BOMBCRATE].determineCurAnim(ANIM::CUSTOM[0], 0);
  159.  
  160.         jjAnimSets[ANIM::SPIKEBOLL].load(3, "SExmas.j2a");
  161.         jjAnimSets[ANIM::SPIKEBOLL3D].load(3, "SExmas.j2a");
  162.         jjAnimSets[ANIM::SPIKEPLAT].load(4, "SExmas.j2a");
  163.         jjObjectPresets[OBJECT::SPIKEBOLL].killAnim = jjObjectPresets[OBJECT::SPIKEBOLL].determineCurAnim(ANIM::SPIKEBOLL, 0) + 1;
  164.         jjObjectPresets[OBJECT::SPIKEBOLL3D].killAnim = jjObjectPresets[OBJECT::SPIKEBOLL3D].determineCurAnim(ANIM::SPIKEBOLL3D, 0) + 1;
  165.         jjObjectPresets[OBJECT::SPIKEPLATFORM].killAnim = jjObjectPresets[OBJECT::SPIKEPLATFORM].determineCurAnim(ANIM::SPIKEPLAT, 0) + 1;
  166.  
  167.         Jazz1::MakeEnemy(OBJECT::DOGGYDOGG, Jazz1::Enemies::Holidaius_BlueDog);
  168.         jjObjectPresets[OBJECT::DOGGYDOGG].xSpeed = 2.5;
  169. }
  170.  
  171. void onLevelReload() {
  172.         HH17::processEnemyColors();
  173.         jjEnforceLighting = LIGHT::COMPLETE;
  174.         if (jjDifficulty >= 2) HH17::setEnemy(OBJECT::DEMON);
  175. }
  176.  
  177.  
  178. void onMain() {
  179.     HH17::handleEnemyProjectiles(); //this is required to handle the modifications to enemy bullets from the Monkeys and Dragons [PJ]
  180. }
  181.  
  182.  
  183.  
  184. void onDrawLayer4(jjPLAYER@ play, jjCANVAS@ canvas) {
  185.         canvas.drawSprite(363*32, 161*32, ANIM::SKELETON, 2, 12, -1, SPRITE::NORMAL, 1);
  186.         canvas.drawSprite(48*32, 95*32, ANIM::SKELETON, 2, 4, 0, SPRITE::NORMAL, 1);
  187.         canvas.drawSprite(51*32, 95*32, ANIM::SKELETON, 1, 2, 0, SPRITE::NORMAL, 1);
  188.         canvas.drawSprite(60*32, 71*32, ANIM::SKELETON, 1, 2, 0, SPRITE::NORMAL, 1);
  189.         canvas.drawSprite(52*32, 118*32, ANIM::SKELETON, 1, 2, -1, SPRITE::NORMAL, 1);
  190. }
  191.  
  192.  
  193. void onFunction13(jjPLAYER@ player) {
  194.                 player.showText("@@@@*splat*");
  195.                 jjSamplePriority(SOUND::MONKEY_SPLUT);
  196. }
  197.  
  198. void RockyB(jjOBJ@ obj) {
  199.                 obj.behave(BEHAVIOR::BUTTERFLY,false);
  200.                 jjDrawResizedSprite(obj.xPos, obj.yPos, ANIM::ROCK, 0, 0, 1, 1, SPRITE::NORMAL,1);
  201.                 }
  202.  
  203. void Locust(jjOBJ@ obj) {
  204.                 obj.behave(BEHAVIOR::BEEBOY,false);
  205.                 //jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::NEONGLOW, 6); //Ghostly White
  206.                 jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::NEONGLOW, 9);
  207.                 jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::SINGLECOLOR, obj.justHit > 0? 24 : 1);
  208. }
  209.  
  210. void Revenant(jjOBJ@ obj) {
  211.                 obj.behave(BEHAVIOR::RAPIER,false);
  212.                 jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::NEONGLOW, 0);
  213. }
  214.  
  215. void IceDaemon(jjOBJ@ obj) {
  216.                 if (jjDifficulty == 2) {
  217.                
  218.                 } else {
  219.                 obj.behave(BEHAVIOR::DEMON,false);
  220.                 jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::TINTED, 14);
  221.                 jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::FROZEN, 1);
  222. }
  223. }
  224.  
  225. /*void SnowBee(jjOBJ@ obj) {
  226.                 obj.behave(BEHAVIOR::BEE,false);
  227.                 jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::PALSHIFT, 231);  Meh.
  228. }*/
  229.  
  230. void BlackDaemon(jjOBJ@ obj) {
  231.                 if (obj.state == STATE::KILL) {
  232.                 obj.delete();
  233.                 } else {
  234.                 obj.behave(BEHAVIOR::DRAGONFLY,false);
  235.                 jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::NEONGLOW, 14, obj.justHit > 0? 24 : 6);      
  236.                 jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::NEONGLOW, 14);
  237.                 if (obj.state == STATE::KILL) {
  238.                 obj.delete();
  239.                 }
  240.                
  241.                 }
  242. }
  243.  
  244. void FastFire(jjOBJ@ obj) {
  245.                  obj.delete();
  246.                 }
  247.  
  248. void onFunction20(jjPLAYER@ player) {
  249.         player.showText("@@@Someone once said that time is a flat circle@@and everything that transpires, @@all of the horrible and wondrous things@@will happen over and over again in an eternal recurrence.@@A tunnel without end...");
  250. }
  251.  
  252. void onFunction12(jjPLAYER@ player) {
  253.         jjMusicLoad("night18.xm");
  254. }
  255.  
  256. void onFunction14(jjPLAYER@ player) {
  257.         p.lighting = 0;
  258.         p.warpToID(42);
  259.         jjMusicLoad("Underground.ogg");
  260. }
  261.  
  262. void onFunction30(jjPLAYER@ player) {
  263.         jjMusicLoad("night18.xm");
  264. }
  265.  
  266. void onFunction31(jjPLAYER@ player) {
  267.         if (jjDifficulty == 2) {
  268.         jjMusicLoad("Underground.ogg");
  269.         }
  270.         else if (jjDifficulty == 3) {
  271.         jjMusicLoad("Underground.ogg");
  272.         }
  273.         else {
  274.         player.showText("I dreamt about falling in a vast abyss...");
  275.         if (!jjTriggers[13]) {
  276.         p.lighting = 95;
  277.         p.warpToID(56);
  278.         }
  279.         else {
  280.         p.lighting = 95;
  281.         p.warpToID(55);
  282. }      
  283. }
  284.  
  285. }
  286.  
  287. void onFunction32(jjPLAYER@ player) {
  288.         player.showText("@@@@This map survived: 3x Level Corruption, 1x Tileset Corruption@And a computer fire!@@Happy Holidays! ~Blacky");
  289. }