Downloads containing mo4a_4-5.j2as

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Mystery of the Four... chandie Single player 6.6 Download file

File preview

  1. const bool MLLESetupSuccessful = MLLE::Setup(array<MLLEWeaponApply@> = {null, null, null, WeaponVMega::Voranj::Weapon(), WeaponVMega::Backfire::Weapon(), null, ArcaneWeapons::FusionCannon::Weapon(), SzmolWeaponPack::PetrolBomb::Weapon(), ArcaneWeapons::MortarLauncher::Weapon()}); ///@MLLE-Generated
  2. #include "MLLE-Include-1.5w.asc" ///@MLLE-Generated
  3. #pragma require "mo4a_4-5.j2l" ///@MLLE-Generated
  4. #include "ArcaneWeapon4.asc" ///@MLLE-Generated
  5. #pragma require "ArcaneWeapon4.asc" ///@MLLE-Generated
  6. #include "petrolBomb.asc" ///@MLLE-Generated
  7. #pragma require "petrolBomb.asc" ///@MLLE-Generated
  8. #include "ArcaneWeapon9.asc" ///@MLLE-Generated
  9. #pragma require "ArcaneWeapon9.asc" ///@MLLE-Generated
  10. #include "WeaponVMega5.asc" ///@MLLE-Generated
  11. #pragma require "WeaponVMega5.asc" ///@MLLE-Generated
  12. #include "WeaponVMega8.asc" ///@MLLE-Generated
  13. #pragma require "WeaponVMega8.asc" ///@MLLE-Generated
  14. #include "HH18savegems.asc"
  15.  
  16. int i,u=1,c=1;
  17. bool onDrawHealth(jjPLAYER@ player, jjCANVAS@ canvas) {
  18.     return false;
  19. }
  20.  
  21. bool onDrawLives(jjPLAYER@ player, jjCANVAS@ canvas) {return true;}
  22.  
  23. void onLevelLoad() {
  24.         gem::restorePlayerGems();
  25.         jjLevelName = ("");
  26.         jjObjectPresets[OBJECT::TUFBOSS].behavior = MegaBilsy();
  27.         jjObjectPresets[OBJECT::TUFBOSS].energy = 100;
  28.         jjObjectPresets[OBJECT::TUFBOSS].playerHandling = HANDLING::ENEMY;
  29.         jjObjectPresets[OBJECT::TUFBOSS].bulletHandling = HANDLING::HURTBYBULLET;
  30.         jjObjectPresets[OBJECT::TUFBOSS].deactivates = false;
  31.         jjObjectPresets[OBJECT::TUFBOSS].scriptedCollisions = false;
  32.  
  33.         jjObjectPresets[OBJECT::DEMON].behavior = DemonGhost();
  34.         jjObjectPresets[OBJECT::DEMON].scriptedCollisions = true;
  35.  
  36.         jjObjectPresets[OBJECT::BEES].behavior = FallingIce();
  37.         jjObjectPresets[OBJECT::BEES].playerHandling = HANDLING::SPECIAL;
  38.         jjObjectPresets[OBJECT::BEES].bulletHandling = HANDLING::IGNOREBULLET;
  39.         jjObjectPresets[OBJECT::BEES].scriptedCollisions = true;
  40.         jjObjectPresets[OBJECT::BEES].determineCurFrame();     
  41.  
  42.         jjObjectPresets[OBJECT::FIREBALLBULLET].playerHandling = HANDLING::ENEMY;
  43.  
  44.         jjObjectPresets[OBJECT::FRUITPLATFORM].scriptedCollisions = true;
  45.         jjObjectPresets[OBJECT::FRUITPLATFORM].behavior = Lava();
  46.         jjObjectPresets[OBJECT::FRUITPLATFORM].playerHandling = HANDLING::SPECIAL;
  47.         jjObjectPresets[OBJECT::FRUITPLATFORM].bulletHandling = HANDLING::IGNOREBULLET;
  48.         jjObjectPresets[OBJECT::FRUITPLATFORM].deactivates = false;
  49.  
  50.         jjObjectPresets[OBJECT::GRASSPLATFORM].scriptedCollisions = true;
  51.         jjObjectPresets[OBJECT::GRASSPLATFORM].behavior = SpikeBump();
  52.         jjObjectPresets[OBJECT::GRASSPLATFORM].deactivates = false;
  53.  
  54.         jjObjectPresets[OBJECT::FREEZEENEMIES].behavior = TimeFreezer();
  55.         jjObjectPresets[OBJECT::FREEZEENEMIES].scriptedCollisions = true;
  56.  
  57.         jjObjectPresets[OBJECT::BILSY].behavior = DevanTank();
  58.         jjObjectPresets[OBJECT::BILSY].playerHandling = HANDLING::SPECIAL;
  59.         jjObjectPresets[OBJECT::BILSY].bulletHandling = HANDLING::HURTBYBULLET;
  60.         jjObjectPresets[OBJECT::BILSY].determineCurFrame();
  61.         jjObjectPresets[OBJECT::BILSY].scriptedCollisions = false;
  62.         jjObjectPresets[OBJECT::BILSY].energy = 100;
  63.  
  64.         jjANIMATION@ tankAnim = jjAnimations[jjObjectPresets[OBJECT::BILSY].curAnim];
  65.  
  66.         for (uint i = 0; i < tankAnim.frameCount; ++i)
  67.                 jjAnimFrames[tankAnim.firstFrame + i].coldSpotY = -95;
  68.  
  69.  
  70. }
  71.  
  72. bool DevanDefeated = false;
  73.  
  74. void onFunction1(jjPLAYER@ p){
  75.  
  76.                 p.boss= jjAddObject(OBJECT::BILSY, 20*32, 12*32);
  77.                 jjOBJ@ boss = jjObjects[p.boss];
  78.                 p.bossActivated = true;
  79.                 jjEnabledASFunctions[1] = false;
  80. }
  81.  
  82. class DevanTank : jjBEHAVIORINTERFACE {
  83.         void onBehave(jjOBJ@ obj) {
  84.         jjANIMATION@ anim = jjAnimations[jjObjectPresets[OBJECT::BILSY].curAnim];
  85.         anim.frameCount = 1;
  86.         jjANIMFRAME@ frame = jjAnimFrames[anim.firstFrame];
  87.         jjPIXELMAP tank(0, 24*32, 3*32, 3*32, 5);
  88.         tank.save(frame);
  89.         frame.hotSpotY = -102;
  90.         frame.hotSpotX = -32;
  91.  
  92.         jjPLAYER@ play = jjLocalPlayers[0];
  93.         if (obj.energy <=0)
  94.         {       obj.state = STATE::KILL;
  95.                 obj.behave(BEHAVIOR::EXPLOSION);
  96.                 obj.delete();
  97.                 DevanDefeated = true;
  98.                 p.boss= jjAddObject(OBJECT::TUFBOSS, 12*32, 3*32);
  99.                 jjOBJ@ boss = jjObjects[p.boss];
  100.                 p.bossActivated = true;
  101.         }
  102.                 switch (obj.state) {
  103.         case STATE::START:
  104.         u=(jjRandom() & 3);
  105.                 obj.frameID = obj.counter/5;           
  106.                 obj.putOnGround(true); 
  107.                 obj.yPos = jjSin(10)*10 + obj.yPos;
  108.         if (++obj.counter == 55){
  109.                 jjPARTICLE@ particle = jjAddParticle(PARTICLE::STRING);
  110.                 if (particle !is null) {
  111.                 particle.xPos = obj.xPos-20;
  112.                 particle.yPos = obj.yPos;
  113.                 }
  114.                
  115.                 particle.ySpeed = -0.4;
  116.                
  117.         }      
  118.                 if ((obj.findNearestPlayer(600*600) > -1) && ++obj.counter > 55)
  119.                 {obj.state = STATE::WALK; obj.counter = 0;}
  120.                 break;
  121.         case STATE::WALK:
  122.         obj.behave(BEHAVIOR::WALKINGENEMY);
  123.  
  124.         {
  125.  
  126. jjANIMATION@ anim = jjAnimations[jjObjectPresets[OBJECT::BILSY].curAnim];
  127.         anim.frameCount = 1;
  128.         jjANIMFRAME@ frame = jjAnimFrames[anim.firstFrame];
  129.         jjPIXELMAP tankopen(0, 24*32, 3*32, 3*32, 5);
  130.         tankopen.save(frame);
  131.         frame.hotSpotY = -102;
  132.  
  133.                 if (obj.counter >= 180)
  134.                 {obj.counter = 0; }
  135.                 obj.counter++;
  136.                 if (u==0||u==1)
  137.                 {if (++obj.counter < 165){
  138.                         obj.xSpeed= (1)*obj.direction;
  139.                         if (obj.counter == 10){
  140.                         jjSample(obj.xPos, obj.yPos, SOUND::DEVILDEVAN_WINGSOUT);}
  141.                         if (obj.justHit == 0)
  142.                          
  143.                         {jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::NORMAL);}
  144.                        
  145.                                                 }
  146.   else
  147.                         {obj.frameID = obj.counter = 0;
  148.                         obj.state = STATE::IDLE;}
  149.                         }
  150.                         else if (u==2||u==3)
  151.                         {if (++obj.counter < 180){
  152.                         obj.xSpeed= (2)*obj.direction;
  153.                         jjSample(obj.xPos, obj.yPos, SOUND::DEVILDEVAN_WINGSOUT);
  154.                         }
  155.                         else
  156.                         {
  157.                         obj.state = STATE::IDLE;}
  158.  
  159.                                                 if (obj.justHit == 0)
  160.                         {jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::NORMAL);}
  161.                        
  162.                         }
  163.  
  164.        
  165.                 break;
  166.         }
  167.        
  168.                 case STATE::ACTION:
  169.  
  170.  
  171.                 c=((jjRandom() & 5)-2.5);
  172.  
  173.                 if (++obj.counter < 10) {
  174. jjSample(obj.xPos, obj.yPos, SOUND::COMMON_METALHIT);
  175. jjANIMATION@ anim = jjAnimations[jjObjectPresets[OBJECT::BILSY].curAnim];
  176.         anim.frameCount = 1;
  177.         jjANIMFRAME@ frame = jjAnimFrames[anim.firstFrame];
  178.         jjPIXELMAP tank(0, 30*32, 3*32, 3*32, 5);
  179.         tank.save(frame);
  180.         frame.hotSpotY = -102;
  181. obj.putOnGround(true);
  182. jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::NORMAL);
  183.  
  184.  
  185.                         obj.determineCurFrame();               
  186.  
  187.                         obj.frameID = obj.counter/5;
  188.                         jjOBJ@ bullet = jjObjects[jjAddObject(OBJECT::BOMB, obj.xPos + 25 * obj.direction, obj.yPos - 90, obj.creatorID, obj.creatorType)];
  189.                                 bullet.playerHandling = HANDLING::SPECIAL;
  190.                                 bullet.bulletHandling = HANDLING::IGNOREBULLET;
  191.                                 bullet.state = STATE::FLY;
  192.                                 bullet.ySpeed = -10;
  193.                                         int xspeedd = (jjRandom() & 9);
  194.                                         bullet.xSpeed = 6.2*obj.direction;
  195.                                         int yspeedd = (jjRandom() & 6);
  196.                                         bullet.ySpeed = yspeedd - 3;
  197.                                         bullet.counterEnd = 55;
  198.  
  199.  
  200.  
  201.                        
  202.                 } else {
  203.          {obj.state = STATE::IDLE;}
  204.                                 obj.counter=0;
  205.                 }
  206.                
  207.                 break;
  208.  
  209.         case STATE::FREEZE:
  210.                         if (obj.freeze > 0) {
  211.                                 obj.draw();
  212.                                 obj.freeze -= 4;
  213.                         }
  214.                         if (obj.freeze < 4) {
  215.                                 obj.unfreeze(0);
  216.                                 obj.state = obj.oldState;
  217.                         }
  218.                         break;
  219.         case STATE::DEACTIVATE:
  220.                 obj.deactivate();
  221.                 break;
  222.         case STATE::DONE:
  223.  
  224.  
  225.                
  226.                 obj.frameID = obj.counter/20;
  227.                 jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::NORMAL);
  228.         ++obj.counter;
  229.         if (++obj.counter>89) {
  230.         obj.energy = 100;}
  231.                         if (++obj.counter>90) {
  232.         obj.state = STATE::START;
  233.  
  234.                 obj.counter==0;                
  235.                 }
  236.                 break;
  237.  
  238.         case STATE::IDLE:
  239.                 obj.frameID = obj.counter/5;
  240.  
  241. obj.putOnGround(true);
  242.                
  243.                 if (obj.justHit == 0)
  244.                 jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::NORMAL);
  245.                 else
  246.                  
  247.                         if (obj.var[0] == 0) { obj.var[0] = 1; }
  248.                         switch (jjRandom() & 3) {
  249.                        
  250.                                 case 0:
  251.                                
  252.                                         obj.state = STATE::ATTACK;
  253.                                         obj.counter = 0;
  254.                                         break;
  255.                                
  256.                                 case 1:
  257.                                         obj.state = STATE::ACTION;
  258.                                         obj.counter = 0;
  259.                                         break;
  260.  
  261.                                 case 2:
  262.                                         obj.state = STATE::WALK;
  263.                                         obj.counter = 0;
  264.                                         break;
  265.                                
  266.                                        
  267.                         }
  268.                
  269.                 break;
  270.  
  271.         case STATE::ATTACK:
  272.  
  273.                 if (++obj.counter <20) {
  274. if (++obj.frameID >= 0)
  275.  
  276. jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::NORMAL);
  277. obj.putOnGround(true);
  278.                 if(++obj.counter ==10)
  279. {                       obj.frameID = obj.counter/5;
  280.                                         jjOBJ@ bullet = jjObjects[obj.fireBullet(OBJECT::FIREBALLBULLET)];
  281.                                
  282.                                 bullet.killAnim = bullet.determineCurAnim(ANIM::AMMO, 4, false);
  283.                                 bullet.playerHandling = HANDLING::ENEMYBULLET;
  284.                                 bullet.bulletHandling = HANDLING::IGNOREBULLET;
  285.                                 bullet.state = STATE::FLY;
  286.                                 bullet.ySpeed = (-(jjRandom() & 2));
  287.                                 bullet.xPos = obj.xPos+80*obj.direction;
  288.                                 bullet.yPos = obj.yPos-65;      
  289.                                 bullet.animSpeed = 1;
  290.                                 jjSample(obj.xPos, obj.yPos, SOUND::AMMO_FIREGUN2A, 6000);}
  291.                        
  292.                 } else {
  293.                         obj.state = STATE::IDLE;
  294.                 }
  295.                 break;
  296.         }
  297.  
  298. obj.draw();
  299.        
  300. }
  301. }
  302.  
  303. bool Boss = false;
  304.  
  305.  
  306.  
  307. int earth = 0;
  308. int fire = 0;
  309. int water = 0;
  310.  
  311.  
  312. void onMain() {
  313. gem::deleteCollectedGems();
  314. if(jjKey[9] && jjKey[0x51]) {
  315. p.morphTo(CHAR::JAZZ, false);
  316. }
  317. if(jjKey[9] && jjKey[0x57]) {
  318. p.morphTo(CHAR::SPAZ, false);
  319. }
  320. if(jjKey[9] && jjKey[0x45]) {
  321. p.morphTo(CHAR::LORI, false);
  322. }
  323. }
  324.  
  325.  
  326. class DemonGhost: jjBEHAVIORINTERFACE {
  327.  
  328.         void onBehave(jjOBJ@ obj) {
  329.                 if(fire < jjGameTicks)
  330.                         {obj.behavior = BEHAVIOR::BURNING;
  331.                         obj.delete();}
  332.                 else
  333.                         obj.behave(BEHAVIOR::WALKINGENEMY, false);
  334.                         obj.bulletHandling = HANDLING::IGNOREBULLET;
  335.                         obj.playerHandling = HANDLING::SPECIAL;
  336.                         obj.determineCurAnim(ANIM::DEMON, 2);
  337.                         jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::TRANSLUCENTSINGLEHUE, 72);
  338.                         obj.xSpeed = 5*obj.direction;
  339.                         if (jjMaskedVLine(obj.xSpeed > 0 ? obj.xPos + 16 : obj.xPos - 16, obj.yPos, 1))
  340.                         {obj.direction = obj.xSpeed = -obj.xSpeed;}
  341.         }
  342.  
  343.         bool onObjectHit(jjOBJ@ obj, jjOBJ@ bullet, jjPLAYER@ p, int force) {          
  344.                 if(p !is null && force >= -1)
  345.                         p.hurt();
  346.                 return true;
  347.         }
  348. }
  349.  
  350.  
  351. class TimeFreezer : jjBEHAVIORINTERFACE {
  352.  
  353.         void onBehave(jjOBJ@ obj) {
  354.                 obj.behave(BEHAVIOR::PICKUP);
  355.                 obj.lightType = LIGHT::LASER;
  356.                 obj.light = 100;
  357.         }
  358.         bool onObjectHit(jjOBJ@ obj, jjOBJ@ bullet, jjPLAYER@ p, int force) {          
  359.                 jjNxt();
  360.                 gem::saveGemData();    
  361.                 jjSwitchTrigger(25);
  362.                 obj.behavior = BEHAVIOR::EXPLOSION2;
  363.                 jjSample(obj.xPos, obj.yPos, SOUND::MENUSOUNDS_TYPEENTER, 1000);
  364.  
  365.                 return true;
  366.         }
  367. }
  368.  
  369. bool startrush = false;
  370. bool readytorush = false;
  371.  
  372. void onPlayer(jjPLAYER@ p) {
  373.  
  374.         gem::trackPlayerGems(p);
  375.         gem::upgradeHealth(p);
  376.  
  377.         if(p.food == 100 && jjKey[0x52] == false && startrush == false)
  378.                 {p.showText("@@@@@@@@@@@@@@@@Press 'R' when you need to use Sugar Rush!", STRING::MEDIUM);
  379.                 p.startSugarRush(0);
  380.                 startrush = true;
  381.                 readytorush = true;}
  382.  
  383.         if(readytorush == true)
  384.                 {p.food = 100;}
  385.  
  386.         if(p.food == 100 && jjKey[0x52])
  387.                 {p.startSugarRush(1400);
  388.                 p.food = 0;
  389.                 readytorush = false;
  390.                 startrush = false;
  391.         }
  392.  
  393.  
  394. if (p.idle > 5 && p.xPos >180*32 && (p.keyLeft || p.keyRight || p.keyJump || p.keyFire))
  395.                 {spike = false;}
  396.  
  397. if(p.coins == 0)
  398. {p.coins += 3;}
  399. if(spring > jjGameTicks)
  400. {p.ySpeed = -10;}
  401.  
  402.         for (int i = 1; i < jjObjectCount; i++) {
  403.                 jjOBJ@ o = jjObjects[i];
  404.                 if (o.isActive && o.eventID == OBJECT::SEEKERAMMO3 && p.ammo[WEAPON::SEEKER] < 1) {
  405.                         o.state = STATE::KILL;}
  406.         }
  407.         for (int i = 1; i < jjObjectCount; i++) {
  408.                 jjOBJ@ o = jjObjects[i];
  409.                 if (o.isActive && o.eventID == OBJECT::RFAMMO3 && p.ammo[WEAPON::RF] < 1) {
  410.                         o.state = STATE::KILL;}
  411.         }
  412.         for (int i = 1; i < jjObjectCount; i++) {
  413.                 jjOBJ@ o = jjObjects[i];
  414.                 if (o.isActive && o.eventID == OBJECT::TNTAMMO3 && p.ammo[WEAPON::TNT] < 1) {
  415.                         o.state = STATE::KILL;}
  416.         }
  417.         for (int i = 1; i < jjObjectCount; i++) {
  418.                 jjOBJ@ o = jjObjects[i];
  419.                 if (o.isActive && o.eventID == OBJECT::GUN9AMMO3 && p.ammo[WEAPON::GUN9] < 1) {
  420.                         o.state = STATE::KILL;}
  421.         }
  422.         for (int i = 1; i < jjObjectCount; i++) {
  423.                 jjOBJ@ o = jjObjects[i];
  424.                 if (o.isActive && o.eventID == OBJECT::SEEKERPOWERUP && p.ammo[WEAPON::SEEKER] < 1) {
  425.                         o.state = STATE::KILL;}
  426.         }
  427.         for (int i = 1; i < jjObjectCount; i++) {
  428.                 jjOBJ@ o = jjObjects[i];
  429.                 if (o.isActive && o.eventID == OBJECT::RFPOWERUP && p.ammo[WEAPON::RF] < 1) {
  430.                         o.state = STATE::KILL;}
  431.         }
  432.         for (int i = 1; i < jjObjectCount; i++) {
  433.                 jjOBJ@ o = jjObjects[i];
  434.                 if (o.isActive && o.eventID == OBJECT::TNTPOWERUP && p.ammo[WEAPON::TNT] < 1) {
  435.                         o.state = STATE::KILL;}
  436.         }
  437.         for (int i = 1; i < jjObjectCount; i++) {
  438.                 jjOBJ@ o = jjObjects[i];
  439.                 if (o.isActive && o.eventID == OBJECT::GUN9POWERUP && p.ammo[WEAPON::GUN9] < 1) {
  440.                         o.state = STATE::KILL;}
  441.         }
  442.  
  443. }
  444.  
  445. int spring = 0;
  446. bool spike = false;
  447. class SpikeBump : jjBEHAVIORINTERFACE {
  448.  
  449. void onBehave(jjOBJ@ obj) {
  450.  
  451.         switch (obj.state) {
  452.                 case STATE::START:
  453.                         obj.determineCurFrame();
  454.                         obj.state = STATE::FLY;
  455.  
  456.                 case STATE::FLY:
  457.                         obj.playerHandling = HANDLING::SPECIAL;
  458.                         obj.deactivates = false;
  459.                         if (jjMaskedVLine(obj.xSpeed > 0 ? obj.xPos + 16 : obj.xPos - 16, obj.yPos, 1)) {
  460.                                 obj.direction = obj.xSpeed = -obj.xSpeed;
  461.                         }
  462.                        
  463.                         if(obj.xPos > p.xPos + 64 || obj.xPos < p.xPos - 64 || obj.yPos > p.yPos + 64 || obj.yPos < p.yPos - 64)
  464.                         {obj.determineCurAnim(ANIM::BOLLPLAT, 0);
  465.                         jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::PALSHIFT, -8);
  466.                         obj.determineCurFrame();}
  467.                         else {jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::PALSHIFT, -24);}
  468.                         break;
  469.  
  470.                
  471.         }
  472. }
  473.  
  474.         bool onObjectHit(jjOBJ@ obj, jjOBJ@ bullet, jjPLAYER@ play, int force) {
  475.                 if(bullet is null && play !is null && (force == -1 || force == 1))
  476.                         {spring = jjGameTicks + 1*61;
  477.                         obj.determineCurAnim(ANIM::BOLLPLAT, 0);
  478.                         jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::PALSHIFT, -24);
  479.                         obj.determineCurFrame();
  480.                         p.buttstomp = 121;
  481.                         jjSample(obj.xPos, obj.yPos, SOUND::PINBALL_BELL, 1000);}
  482.                 if(force == 0 && spring < jjGameTicks)
  483.                         {play.hurt();
  484.                         obj.determineCurAnim(ANIM::SPIKEBOLL, 0);  
  485.                         obj.determineCurFrame();
  486.                         if(spike == false)
  487.                         {jjSample(obj.xPos, obj.yPos, SOUND::COMMON_METALHIT, 1000);}
  488.                         spike = true;}
  489.                 return true;
  490.                 }
  491.  
  492. }
  493.  
  494. class Lava : jjBEHAVIORINTERFACE {
  495. void onBehave(jjOBJ@ obj) {
  496. jjANIMATION@ anim = jjAnimations[jjObjectPresets[OBJECT::FRUITPLATFORM].curAnim];
  497.         anim.frameCount = 1;
  498.         jjANIMFRAME@ frame = jjAnimFrames[anim.firstFrame];
  499.         jjPIXELMAP lava(0, 15*32, 29*32, 9*32, 5);
  500.         lava.save(frame);
  501.         frame.hotSpotX = -60;
  502.                
  503. switch (obj.state) {
  504.                 case STATE::START:
  505.                         obj.ySpeed = 0;
  506.                         obj.state = STATE::FLY;
  507.                         obj.beSolid();
  508.                         obj.yPos = 15*32;
  509.                 case STATE::FLY:
  510.                 ++obj.counter;
  511. jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::NORMAL);
  512.                         if(p.yPos==obj.yPos-32){
  513.                                 p.health = 0;
  514. }
  515.                 obj.xPos = jjSin(obj.counter*4)*4 + obj.xOrg;
  516.                 if(earth > jjGameTicks && obj.yPos > 13*32)
  517.                 {obj.ySpeed = -0.3;
  518.                 obj.yPos = obj.yPos + obj.ySpeed;}
  519.                 if(earth > jjGameTicks && obj.yPos < 13*32)
  520.                 {obj.ySpeed = -0.2;
  521.                 obj.yPos = obj.yPos + obj.ySpeed;}
  522.                 if(earth < jjGameTicks && obj.yPos <15*32)
  523.                 {obj.ySpeed = 6.5;
  524.                 obj.yPos = obj.yPos + obj.ySpeed;}             
  525.                 if(earth < jjGameTicks && obj.yPos == 15*32)
  526.                 {obj.state = STATE::START;
  527.                 obj.ySpeed = 0;}
  528.                
  529.                         obj.beSolid();
  530.                         obj.deactivates = false;
  531.                
  532.  
  533.                         break;
  534.  
  535.         }
  536.  
  537. }
  538. bool onObjectHit(jjOBJ@ obj, jjOBJ@ bullet, jjPLAYER@ play, int force) {
  539. p.health = 0;
  540. return true;
  541. }
  542. }
  543.  
  544. class FallingIce : jjBEHAVIORINTERFACE {
  545.         void onBehave(jjOBJ@ enemy) {
  546.         if(water <jjGameTicks || water == 0)
  547.         {enemy.deactivates = true;}
  548.  
  549.         else if(water > jjGameTicks) switch (enemy.state) {
  550.                 case STATE::START:
  551.         enemy.frameID = enemy.counter/8;
  552.         enemy.determineCurFrame();     
  553.  
  554.                 ++enemy.counter;
  555.  
  556.                 if (jjRandom() & 63 == 0) {
  557.                         jjOBJ@ obj = jjObjects[enemy.fireBullet(OBJECT::BULLET)];
  558.  
  559.                         obj.behavior = BEHAVIOR::BULLET;
  560.                         obj.determineCurAnim(ANIM::AMMO, 30);
  561.                         obj.lightType = LIGHT::POINT;
  562.                         jjSample(enemy.xPos, enemy.yPos, SOUND::COMMON_PLOP2);
  563.                         obj.playerHandling = HANDLING::ENEMY;
  564.                         obj.bulletHandling = HANDLING::IGNOREBULLET;
  565.                         obj.killAnim = jjObjectPresets[OBJECT::ICEBULLET].killAnim;
  566.                         obj.ySpeed = 6;
  567.                         obj.counterEnd = 100;
  568.  
  569.                 }
  570.                 else if (jjRandom() & 63 == 0) {
  571.                         jjOBJ@ objj = jjObjects[enemy.fireBullet(OBJECT::BULLET)];
  572.                         objj.xPos = enemy.xPos + 2;
  573.                         objj.behavior = BEHAVIOR::BULLET;
  574.                         objj.determineCurAnim(ANIM::AMMO, 30);
  575.                         objj.lightType = LIGHT::POINT;
  576.                         jjSample(enemy.xPos, enemy.yPos, SOUND::COMMON_PLOP2);
  577.                         objj.playerHandling = HANDLING::ENEMY;
  578.                         objj.bulletHandling = HANDLING::IGNOREBULLET;
  579.                         objj.killAnim = jjObjectPresets[OBJECT::ICEBULLET].killAnim;
  580.                         objj.ySpeed = 6;
  581.                         objj.counterEnd = 100; }
  582.  
  583.         }
  584.         jjANIMATION@ anim = jjAnimations[jjObjectPresets[OBJECT::BEES].curAnim];
  585.         anim.frameCount = 1;
  586.         jjANIMFRAME@ frame = jjAnimFrames[anim.firstFrame];
  587.         jjPIXELMAP pump(0, 28*32, 4*32, 2*32, 5);
  588.         pump.save(frame);
  589.         frame.hotSpotX = -32;
  590.         if (enemy.justHit == 0)
  591.  
  592.                 jjDrawSpriteFromCurFrame(enemy.xPos, enemy.yPos, enemy.curFrame, enemy.direction, SPRITE::TRANSLUCENT);
  593.         else
  594.                 enemy.draw();
  595.  
  596. }      
  597.         bool onObjectHit(jjOBJ@ obj, jjOBJ@ bullet, jjPLAYER@ p, int force) {
  598.         if(p !is null && force >= -1) {
  599.         p.hurt();
  600.         }
  601.         return true;
  602.         }
  603. }
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610. class MegaBilsy: jjBEHAVIORINTERFACE {
  611.         void onBehave(jjOBJ@ boss) {
  612.         if(DevanDefeated == false)
  613.         {boss.state == STATE::FLY;}    
  614.         jjPLAYER@ play = jjLocalPlayers[0];
  615.         if (boss.energy <= 0) {
  616.         jjAddObject(OBJECT::FREEZEENEMIES, boss.xPos, boss.yPos-32);
  617.                 boss.state = STATE::KILL;
  618.                 boss.delete();
  619.                 }
  620.                
  621.         if(DevanDefeated == true) switch (boss.state) {
  622.         case STATE::START:
  623.         earth = 0;
  624.         water = 0;
  625.         fire = 0;
  626.          if (++boss.counter >= 0&&++boss.counter <= 400)
  627.                 {boss.determineCurFrame();
  628.                         boss.frameID = boss.counter/22;}
  629.         boss.determineCurAnim(ANIM::BILSBOSS, 1);
  630.         boss.direction = (jjLocalPlayers[0].xPos < boss.xPos) ? -1 : 1;
  631.          if (++boss.counter > 400&&++boss.counter <= 1200)
  632.         {boss.determineCurFrame();
  633.         boss.frameID = boss.counter/40;
  634.         boss.determineCurAnim(ANIM::BILSBOSS, 4);}     
  635.                
  636.  
  637.                
  638.                 boss.determineCurFrame();
  639.                 boss.frameID = boss.counter/5;
  640.                 if (boss.justHit == 0)
  641.                 jjDrawSpriteFromCurFrame(boss.xPos, boss.yPos, boss.curFrame, boss.direction, SPRITE::SINGLEHUE, 72);
  642.                 else boss.draw();
  643.                 boss.putOnGround(true);
  644.                
  645.  
  646.                
  647.                 if (++boss.counter > 600) {
  648.                 boss.state = STATE::IDLE;
  649.                 boss.counter == 0;}
  650.                 break;
  651.                
  652.         case STATE::DONE:
  653.        
  654.                
  655.                         if (++boss.counter>100) {
  656.                        
  657.         jjAddObject(OBJECT::FREEZEENEMIES, boss.xPos, boss.yPos);
  658.                 }
  659.         break;
  660.                         case STATE::KILL:
  661.         case STATE::DEACTIVATE:
  662.                 boss.deactivate();
  663.                 break;
  664.  
  665.         case STATE::IDLE:
  666.                 boss.frameID = boss.counter/5;
  667.                 boss.determineCurFrame();
  668.                 switch (jjRandom() & 3) {
  669.                 case 0:
  670.                         boss.state = STATE::FIRE; //fire
  671.                         boss.direction = (jjLocalPlayers[0].xPos < boss.xPos) ? -1 : 1;
  672.                         boss.determineCurAnim(ANIM::BILSBOSS, 0);
  673.                         if (boss.justHit == 0)
  674.                         jjDrawSpriteFromCurFrame(boss.xPos, boss.yPos, boss.curFrame, boss.direction, SPRITE::PALSHIFT, 0);
  675.                         else boss.draw();      
  676.                         boss.counter = 0;
  677.                         break;
  678.                 case 1:
  679.                         boss.state = STATE::ATTACK; //earth
  680.                         boss.direction = (jjLocalPlayers[0].xPos < boss.xPos) ? -1 : 1;
  681.                         boss.determineCurAnim(ANIM::BILSBOSS, 0);
  682.                         boss.counter = 0;
  683.                         if (boss.justHit == 0)
  684.                         jjDrawSpriteFromCurFrame(boss.xPos, boss.yPos, boss.curFrame, boss.direction, SPRITE::PALSHIFT, -8);
  685.                         else boss.draw();      
  686.                         break;
  687.                 case 2:
  688.                         boss.state = STATE::ACTION; //water
  689.                         boss.direction = (jjLocalPlayers[0].xPos < boss.xPos) ? -1 : 1;
  690.                         boss.determineCurAnim(ANIM::BILSBOSS, 0);
  691.                         if (boss.justHit == 0)
  692.                         jjDrawSpriteFromCurFrame(boss.xPos, boss.yPos, boss.curFrame, boss.direction, SPRITE::PALSHIFT, -8);
  693.                         else boss.draw();      
  694.                         boss.counter = 0;
  695.                         break;
  696. }
  697.                 break;
  698.         case STATE::FADEOUT:
  699.                  if (++boss.counter < 50) {
  700.                         boss.frameID = boss.counter / 5;
  701.                         boss.determineCurAnim(ANIM::BILSBOSS, 2);                      
  702.                         jjDrawSpriteFromCurFrame(boss.xPos, boss.yPos, boss.curFrame, boss.direction, SPRITE::SINGLEHUE, 72);
  703.                         boss.playerHandling = HANDLING::PLAYERBULLET;
  704.                         boss.bulletHandling = HANDLING::IGNOREBULLET;                          
  705.                         boss.determineCurFrame();
  706.                         }
  707.                         if (++boss.counter == 1200) {
  708.  
  709.                         boss.state = STATE::FADEIN;
  710.                         boss.playerHandling = HANDLING::ENEMY;
  711.                         boss.bulletHandling = HANDLING::HURTBYBULLET;                  
  712.                         boss.xPos = boss.xAcc;
  713.                         boss.yPos = boss.yAcc - 10;
  714.                         boss.direction = (jjLocalPlayers[0].xPos < boss.xPos) ? -1 : 1;
  715.                         boss.determineCurFrame();
  716.                         boss.putOnGround(true);
  717.                         return;
  718.                 }
  719.                 break;
  720.         case STATE::FADEIN:
  721.                 for (int i = 1; i < jjObjectCount; i++) {
  722.                 jjOBJ@ o = jjObjects[i];
  723.                 if (o.isActive && o.eventID == OBJECT::GRASSPLATFORM)
  724.                         {o.delete();}
  725.                 }
  726.                 if (++boss.counter < 40) {
  727.                         boss.frameID = boss.counter / 5;
  728.                         boss.determineCurFrame();
  729.                         jjDrawSpriteFromCurFrame(boss.xPos, boss.yPos, boss.curFrame, boss.direction, SPRITE::SINGLEHUE, 72);
  730.                 } else {
  731.  
  732.                         boss.frameID = 0;
  733.                         boss.counter = 0;
  734.                         boss.state = STATE::START;
  735.  
  736.                 }
  737.                 break;
  738.         case STATE::FIRE:
  739.  
  740.                 if (++boss.counter < 90) {
  741.                 if(++boss.counter > 70)
  742.                 {fire = jjGameTicks + 590;}
  743.                         if(boss.counter == 50){
  744.                         jjOBJ@ obj = jjObjects[boss.fireBullet(OBJECT::BLASTERBULLET)];
  745.                         obj.behavior = BEHAVIOR::BILSYBULLET;
  746.                         obj.determineCurAnim(ANIM::BILSBOSS, 3);
  747.                         jjSample(boss.xPos, boss.yPos, SOUND::AMMO_BMP2);
  748.                         obj.playerHandling = HANDLING::ENEMYBULLET;
  749.                         obj.bulletHandling = HANDLING::IGNOREBULLET;
  750.                         obj.yPos = boss.yPos -40;
  751.                         obj.xPos = boss.xPos + 1*boss.direction;
  752.                         obj.energy = 1;
  753.                         obj.xSpeed = -8*boss.direction;
  754.                                 if (p.xPos < boss.xPos) obj.direction = -1;
  755.                                 else obj.direction = 1;
  756.                                 obj.ySpeed = 2;
  757.                         obj.counterEnd = 100;
  758.                                 jjOBJ@ o = jjObjects[boss.fireBullet(OBJECT::FIREBALLBULLET)];
  759.                                         o.bulletHandling = HANDLING::IGNOREBULLET;
  760.                                         o.determineCurAnim(ANIM::AMMO, 15);
  761.                                         o.lightType = LIGHT::POINT;
  762.                                         o.xPos = boss.xPos-62*p.direction;
  763.                                         o.yPos = boss.yPos-12;  
  764.                                         o.xAcc = .12;
  765.                                         int xspeed = (jjRandom() & 3);
  766.                                         o.xSpeed = xspeed*p.direction;
  767.                                         int yspeed = (jjRandom() & 6);
  768.                                         o.ySpeed = yspeed + 8* p.direction;
  769.                                         o.counterEnd = 155;
  770.                                 jjOBJ@ ob = jjObjects[boss.fireBullet(OBJECT::FIREBALLBULLET)];
  771.                                         ob.bulletHandling = HANDLING::IGNOREBULLET;
  772.                                         ob.determineCurAnim(ANIM::AMMO, 15);
  773.                                         ob.lightType = LIGHT::POINT;
  774.                                         ob.xPos = 40;
  775.                                         ob.yPos = boss.yPos-12;        
  776.                                         ob.xAcc = .12;
  777.                                         ob.xSpeed = 20;
  778.                                         int yyspeed = (jjRandom() & 4);
  779.                                         ob.ySpeed = yyspeed + 8* p.direction;
  780.                                         ob.counterEnd = 755;
  781.                                 jjOBJ@ objj = jjObjects[boss.fireBullet(OBJECT::FIREBALLBULLET)];
  782.                                         objj.bulletHandling = HANDLING::IGNOREBULLET;
  783.                                         objj.determineCurAnim(ANIM::AMMO, 15);
  784.                                         objj.lightType = LIGHT::POINT;
  785.                                         objj.xPos = 23*32;
  786.                                         objj.yPos = boss.yPos-12;      
  787.                                         objj.xAcc = .12;
  788.                                         objj.xSpeed = -20;
  789.                                         int yyyspeed = (jjRandom() & 1);
  790.                                         objj.ySpeed = yyyspeed + 8* p.direction;
  791.                                         objj.counterEnd = 755;
  792.                         }
  793.                                 if(++boss.counter > 88)
  794.                                         {jjAddObject(OBJECT::DEMON, 13*32, 9*32);}
  795.                 boss.frameID = boss.counter / 5;
  796.                 boss.determineCurFrame();
  797.                 if (boss.justHit == 0)
  798.                 {jjDrawSpriteFromCurFrame(boss.xPos, boss.yPos, boss.curFrame, boss.direction, SPRITE::PALSHIFT, 0);}
  799.                 else {boss.draw();}
  800.                 break; 
  801.                 }      
  802.                 else {
  803.                         boss.state = STATE::FADEOUT;
  804.                         if (boss.justHit == 0)
  805.                         {jjDrawSpriteFromCurFrame(boss.xPos, boss.yPos, boss.curFrame, boss.direction, SPRITE::PALSHIFT, 0);}
  806.                         else {boss.draw();}
  807.                         boss.counter = 0;
  808.                         boss.xAcc = play.xPos;
  809.                         boss.yAcc = play.yPos;
  810.                 }              
  811.                 break; 
  812.         case STATE::ATTACK:
  813.                 if (++boss.counter < 90) {
  814.                        
  815.                 if(++boss.counter > 70)
  816.                 {earth = jjGameTicks + 580;}
  817.                         if(boss.counter == 50){
  818.                         jjAddObject(OBJECT::GRASSPLATFORM, 11*32, 9*32);
  819.                         jjOBJ@ obj = jjObjects[boss.fireBullet(OBJECT::BLASTERBULLET)];
  820.  
  821.                         obj.determineCurAnim(ANIM::DEVILDEVAN, 17);
  822.                         jjSample(boss.xPos, boss.yPos, SOUND::AMMO_BMP2);
  823.                         obj.playerHandling = HANDLING::ENEMYBULLET;
  824.                         obj.bulletHandling = HANDLING::IGNOREBULLET;
  825.                         obj.yPos = boss.yPos -40;
  826.                         obj.xPos = boss.xPos + 1*boss.direction;
  827.                         obj.energy = 1;
  828.                         obj.ySpeed = 65;
  829.                         obj.xSpeed = -15*boss.direction;
  830.                                 if (p.xPos < boss.xPos) obj.direction = -1;
  831.                                 else obj.direction = 1;
  832.                                 obj.ySpeed = 2;
  833.                         obj.counterEnd = 100;
  834.                         }
  835.                 boss.frameID = boss.counter / 5;
  836.                 boss.determineCurFrame();
  837.                 if (boss.justHit == 0)
  838.                 {jjDrawSpriteFromCurFrame(boss.xPos, boss.yPos, boss.curFrame, boss.direction, SPRITE::PALSHIFT, -8);}
  839.                 else {boss.draw();}
  840.                 break; 
  841.                 }      
  842.                 else {
  843.                         boss.state = STATE::FADEOUT;
  844.                         if (boss.justHit == 0)
  845.                         {jjDrawSpriteFromCurFrame(boss.xPos, boss.yPos, boss.curFrame, boss.direction, SPRITE::PALSHIFT, -8);}
  846.                         else {boss.draw();}
  847.                         boss.counter = 0;
  848.                         boss.xAcc = play.xPos;
  849.                         boss.yAcc = play.yPos;
  850.                 }              
  851.                 break; 
  852.         case STATE::ACTION:
  853.                 if (++boss.counter < 90) {
  854.                 if(++boss.counter < 70)
  855.                 {water = jjGameTicks + 590;}
  856.                         if(boss.counter == 50){                
  857.                         jjOBJ@ obj = jjObjects[boss.fireBullet(OBJECT::BLASTERBULLET)];
  858.                         obj.behavior = BEHAVIOR::BULLET;
  859.                         obj.determineCurAnim(ANIM::PINKPLAT, 1);
  860.                         jjSample(boss.xPos, boss.yPos, SOUND::AMMO_BMP2);
  861.                         obj.playerHandling = HANDLING::ENEMYBULLET;
  862.                         obj.bulletHandling = HANDLING::IGNOREBULLET;
  863.                         obj.energy = 1;
  864.                         obj.points = 5;
  865.                         obj.ySpeed = -16;
  866.                         obj.counterEnd = 100;
  867.                         }
  868.  
  869.                 boss.frameID = boss.counter / 5;
  870.                 boss.determineCurFrame();
  871.                 if (boss.justHit == 0)
  872.                 {jjDrawSpriteFromCurFrame(boss.xPos, boss.yPos, boss.curFrame, boss.direction, SPRITE::PALSHIFT, 8);}
  873.                 else {boss.draw();}
  874.                 break; 
  875.                 }      
  876.                 else {
  877.  
  878.                         boss.state = STATE::FADEOUT;
  879.                         if (boss.justHit == 0)
  880.                         {jjDrawSpriteFromCurFrame(boss.xPos, boss.yPos, boss.curFrame, boss.direction, SPRITE::PALSHIFT, 8);}
  881.                         else {boss.draw();}
  882.                         boss.counter = 0;
  883.                         boss.xAcc = play.xPos;
  884.                         boss.yAcc = play.yPos;
  885.                 }              
  886.                 break; 
  887.  
  888. }
  889. }
  890.  
  891.  
  892. }
  893.  
  894. void onLevelReload(){
  895.         gem::restorePlayerGems();
  896.         jjLocalPlayers[0].lives++;
  897.         earth = 0;
  898.         fire = 0;
  899.         water = 0;
  900.         DevanDefeated = false;
  901.         Boss = false;
  902.         jjEnabledASFunctions[1] = true;
  903. }
  904.  
  905.  
  906. bool onDrawAmmo(jjPLAYER@ player, jjCANVAS@ canvas) {
  907.         return MLLE::WeaponHook.drawAmmo(player, canvas);
  908. }
  909.  
  910. void onReceive(jjSTREAM&in packet, int fromClientID) {
  911.         MLLE::WeaponHook.processPacket(packet, fromClientID);
  912. }
  913.