Downloads containing olcnoct.j2as

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Nocturne Blackraptor Battle 7.2 Download file

File preview

  1. #include "MLLE-Include-1.4.asc"
  2. const bool MLLESetupSuccessful = MLLE::Setup();
  3. #pragma require "olcnoct-MLLE-Data-3.j2l"
  4. #pragma require "olcnoct-MLLE-Data-2.j2l"
  5. #pragma require "olcnoct-MLLE-Data-1.j2l"
  6. #pragma require "olcnoct.j2l"
  7. #pragma require "HauntedH1.j2t"
  8. #pragma require "nocturne-xtra.j2t"
  9. #pragma require "InfernoN.j2t"
  10. #pragma require "MedvioS.j2t"
  11. #pragma require "Medivo2.j2t"
  12. #pragma require "Waz18.j2t"
  13. #pragma require "Gothic 1.23.j2t"
  14. #pragma require "syringe.j2a"
  15. #pragma require "bell.wav"
  16.  
  17. class BackgroundBat {
  18.         float xPos;
  19.         float yPos;
  20.         int direction;
  21.         bool active;
  22.         int offset;
  23.         float scale;
  24.        
  25.         BackgroundBat(float xPos, float yPos) {
  26.                 this.xPos = xPos;
  27.                 this.yPos = yPos;
  28.                 this.direction = jjRandom() % 2 == 0 ? 1 : -1;
  29.                 this.active = true;
  30.                 this.offset = jjRandom() % 7;
  31.                 this.scale = ((jjRandom() % 15) + 25)/100.0;
  32.         }
  33.  
  34.         void draw(jjCANVAS@ canvas) {
  35.                 canvas.drawResizedSprite(int(xPos),int(yPos),ANIM::BAT,0,jjGameTicks/7+offset,scale,scale,SPRITE::SINGLECOLOR,0);
  36.         }
  37.        
  38.         void update() {
  39.                 yPos -= 0.75;
  40.                 if(jjRandom() % 100 == 0) {
  41.                         direction *= -1;
  42.                 }
  43.                 xPos += direction;
  44.         }
  45. }
  46.  
  47. array<BackgroundBat@> bats(200);
  48.  
  49. void makeBat(float xPos, float yPos) {
  50.         for(uint i = 0; i < bats.length; i++) {
  51.                 if(bats[i] is null || !bats[i].active) {
  52.                         @bats[i] = @BackgroundBat(xPos,yPos);
  53.                         return;
  54.                 } else {
  55.                         continue;
  56.                 }
  57.         }
  58. }
  59.  
  60. float ACC_CONST = .005;
  61. float devanSpotX = 15.5*32;
  62. float devanSpotY = 2*32;
  63. float devanPosX = devanSpotX+50;
  64. float devanPosY = devanSpotY-15;
  65. float devanSpeedX = 0;
  66. float devanSpeedY = 0;
  67. float devanAccX = ACC_CONST;
  68. float devanAccY = -ACC_CONST;
  69. float devDir = 0;
  70. float turnTime = -1;
  71.  
  72. class HangingBat {
  73.         private float xPos;
  74.         private float yPos;
  75.         private int direction;
  76.         private int animPos = -1;
  77.         private int tick = 0;
  78.         private int color = 170;
  79.        
  80.         HangingBat(float xPos, float yPos, int direction) {
  81.                 this.xPos = xPos;
  82.                 this.yPos = yPos;
  83.                 this.direction = direction;
  84.         }
  85.        
  86.         HangingBat(float xPos, float yPos, int direction, int color) {
  87.                 this.xPos = xPos;
  88.                 this.yPos = yPos;
  89.                 this.direction = direction;
  90.                 this.color = color;
  91.         }
  92.        
  93.         void draw(jjCANVAS@ canvas) {
  94.                 if(animPos == -1) {
  95.                         if(jjRandom() % 700 == 0) {
  96.                                 animPos = 0;
  97.                                 tick = 0;
  98.                         }
  99.                 }
  100.                 canvas.drawSprite(xPos, yPos, ANIM::BAT, 2, animPos, direction, SPRITE::PALSHIFT,color);
  101.                 if(animPos != -1 && tick++ > 7) {
  102.                         tick = 0;
  103.                         animPos++;
  104.                         if(animPos > 8) {
  105.                                 animPos = -1;
  106.                         }
  107.                 }
  108.         }
  109. }
  110.  
  111. array<HangingBat@> hangingBats4();
  112. array<HangingBat@> hangingBats5();
  113.  
  114. void onDrawLayer4(jjPLAYER@ player, jjCANVAS@ canvas) {
  115.         for(uint i = 0; i < hangingBats4.length; i++) {
  116.                 hangingBats4[i].draw(canvas);
  117.         }
  118. }
  119.  
  120. void onDrawLayer5(jjPLAYER@ player, jjCANVAS@ canvas) {
  121.         for(uint i = 0; i < hangingBats5.length; i++) {
  122.                 hangingBats5[i].draw(canvas);
  123.         }
  124. }
  125.  
  126.  
  127. void onDrawLayer7(jjPLAYER@ player, jjCANVAS@ canvas) {
  128.         int oldDir = devDir;
  129.         if(devanPosX > devanSpotX) {
  130.                 devanAccX = -ACC_CONST;
  131.                 devDir = -1;
  132.         }
  133.         else {
  134.                 devanAccX = ACC_CONST;
  135.                 devDir = 1;
  136.         }
  137.         if(devanPosY > devanSpotY) devanAccY = -ACC_CONST;
  138.         else devanAccY = ACC_CONST;
  139.         if(devDir != oldDir) {
  140.                 turnTime = 0;
  141.         }
  142.         devanSpeedX+=devanAccX;
  143.         devanSpeedY+=devanAccY;
  144.         devanPosX+=devanSpeedX;
  145.         devanPosY+=devanSpeedY;
  146.        
  147.         if(turnTime < 0)
  148.                 canvas.drawResizedSprite(devanPosX, devanPosY, ANIM::DEVILDEVAN, 5, jjGameTicks/7, devDir*0.5, 0.5, SPRITE::SINGLECOLOR,0);
  149.         else {
  150.                 canvas.drawResizedSprite(devanPosX, devanPosY, ANIM::DEVILDEVAN, 9, turnTime/7, devDir*0.5, 0.5, SPRITE::SINGLECOLOR,0);
  151.                 turnTime++;
  152.                 if(turnTime > 77)
  153.                         turnTime = -1;
  154.         }
  155.        
  156.         for(uint i = 0; i < bats.length; i++) {
  157.                 BackgroundBat@ bat = @bats[i];
  158.                 if(bat !is null && bat.active) {
  159.                         bat.update();
  160.                         bat.draw(canvas);
  161.                         if(bat.yPos < -400) {
  162.                                 bat.active = false;
  163.                         }
  164.                        
  165.                 }
  166.         }
  167. }
  168.  
  169. void onLevelLoad() {
  170.         jjAnimSets[ANIM::CUSTOM[0]].allocate(array<uint> = {1, 4, 3});
  171.         jjPIXELMAP bell(0,0,140,140,4);
  172.         bell.save(jjAnimFrames[jjAnimations[jjAnimSets[ANIM::CUSTOM[0]]]]);
  173.         jjAnimFrames[jjAnimations[jjAnimSets[ANIM::CUSTOM[0]]]].hotSpotX = -70;
  174.         jjAnimFrames[jjAnimations[jjAnimSets[ANIM::CUSTOM[0]]]].hotSpotY = 0;
  175.        
  176.         jjAnimSets[ANIM::DEVILDEVAN].load();
  177.         for (uint i = 0; i < 11; ++i) {
  178.                 jjAnimFrames[jjAnimations[jjAnimSets[ANIM::DEVILDEVAN] + 9] + i].hotSpotX -= 19 - int(5 - i/2);
  179.                 jjAnimFrames[jjAnimations[jjAnimSets[ANIM::DEVILDEVAN] + 9] + i].hotSpotY -= 10;
  180.         }
  181.         jjAnimSets[ANIM::HATTER].load();
  182.         jjAnimSets[ANIM::MONKEY].load();
  183.         jjAnimSets[ANIM::CUSTOM[28]].load(0, "Syringe.j2a");
  184.        
  185.         jjAnimations[jjAnimSets[ANIM::AMMO] + 62] = jjAnimations[jjAnimSets[ANIM::CUSTOM[28]] + 0];
  186.         jjAnimations[jjAnimSets[ANIM::AMMO] + 61] = jjAnimations[jjAnimSets[ANIM::CUSTOM[28]] + 1];
  187.         jjAnimations[jjAnimSets[ANIM::PLUS_COMMON] + 0] = jjAnimations[jjAnimSets[ANIM::CUSTOM[28]] + 3]; //gun 8 crate
  188.  
  189.         jjObjectPresets[OBJECT::FIREBALLBULLET].behavior = jjObjectPresets[OBJECT::FIREBALLBULLETPU].behavior = BloodSpear();
  190.         jjObjectPresets[OBJECT::FIREBALLBULLET].ySpeed = -1.5;
  191.         jjObjectPresets[OBJECT::FIREBALLBULLET].xSpeed = 8;
  192.         jjObjectPresets[OBJECT::FIREBALLBULLET].counterEnd = 85;
  193.         jjObjectPresets[OBJECT::FIREBALLBULLET].var[6] = 0;
  194.         jjObjectPresets[OBJECT::FIREBALLBULLETPU].ySpeed = -2;
  195.         jjObjectPresets[OBJECT::FIREBALLBULLETPU].xSpeed = 8.5;
  196.         jjObjectPresets[OBJECT::FIREBALLBULLETPU].counterEnd = 95;
  197.         jjObjectPresets[OBJECT::FIREBALLBULLETPU].var[6] = 8;
  198.         jjObjectPresets[OBJECT::GUN8POWERUP].determineCurAnim(ANIM::CUSTOM[28], 2, true);
  199.         jjObjectPresets[OBJECT::GUN8POWERUP].determineCurFrame();
  200.         jjEnforceLighting = LIGHT::COMPLETE;
  201.         jjWeapons[WEAPON::GUN8].gradualAim = false;
  202.         jjWeapons[WEAPON::GUN8].defaultSample = false;
  203.         jjWeapons[WEAPON::GUN8].replacedByBubbles = true;              
  204.        
  205.         hangingBats4.insertLast(HangingBat(92.3*32, int(16.5*32),-1));
  206.         hangingBats4.insertLast(HangingBat(94.5*32, int(15.5*32),1));
  207.         hangingBats4.insertLast(HangingBat(96.5*32, int(14.5*32),1));
  208.         hangingBats4.insertLast(HangingBat(98.8*32, int(13.5*32),-1));
  209.         hangingBats4.insertLast(HangingBat(102.2*32, int(11.5*32),-1));
  210.         hangingBats4.insertLast(HangingBat(103.8*32, int(11.5*32),1));
  211.         hangingBats4.insertLast(HangingBat(107.2*32, int(13.5*32),1));
  212.         hangingBats4.insertLast(HangingBat(111.5*32, int(15.5*32),-1));
  213.         hangingBats4.insertLast(HangingBat(114.5*32, int(16.5*32),1));
  214.         hangingBats4.insertLast(HangingBat(117.8*32, int(17.5*32),1));
  215.         hangingBats4.insertLast(HangingBat(87.6*32, int(17.5*32),1));
  216.         hangingBats4.insertLast(HangingBat(88.4*32, int(17.5*32),-1));
  217.         hangingBats4.insertLast(HangingBat(156*32, int(26.5*32),1));
  218.         hangingBats4.insertLast(HangingBat(158*32, int(26.5*32),-1));
  219.         hangingBats4.insertLast(HangingBat(166*32, int(26.5*32),1));
  220.         hangingBats4.insertLast(HangingBat(168*32, int(26.5*32),-1,190));
  221.         hangingBats4.insertLast(HangingBat(170*32, int(26.5*32),1));
  222.        
  223.         hangingBats5.insertLast(HangingBat(100.5*32, int(12.2*32),1));
  224.         hangingBats5.insertLast(HangingBat(109*32, int(14.5*32),-1));
  225.         hangingBats5.insertLast(HangingBat(115.3*32, int(16.7*32),-1));
  226.         hangingBats5.insertLast(HangingBat(105.5*32, int(12.2*32),-1));
  227.         hangingBats5.insertLast(HangingBat(97.2*32, int(14.2*32),-1));
  228.         hangingBats5.insertLast(HangingBat(122.5*32, int(21.7*32),-1));
  229.         hangingBats5.insertLast(HangingBat(160*32, int(26.7*32),1));
  230. }
  231.  
  232. void onLevelReload() {
  233.         jjEnforceLighting = LIGHT::COMPLETE;
  234. }
  235.  
  236. void onLevelBegin() {
  237.         jjAnimSets[ANIM::BAT].load();
  238.         if(!jjSampleIsLoaded(SOUND::ZDOG_WAF3)) {
  239.                 jjSampleLoad(SOUND::ZDOG_WAF3,"Bell.wav");
  240.         }
  241.        
  242. }
  243.  
  244.  
  245. uint64 timeSec() {return jjUnixTimeSec();}
  246.  
  247. int nextBats = 4500;
  248. int bellTimer = -1;
  249. void onMain() {
  250.         for (int i = 1; i < jjObjectCount; i++) {
  251.                 jjOBJ@ obj = jjObjects[i];
  252.                 if (obj.eventID == OBJECT::RFPOWERUP || obj.eventID == OBJECT::TOASTERPOWERUP) {
  253.                         obj.xPos = obj.xOrg + 16;
  254.                 }
  255.         }
  256.         if(jjGameTicks == nextBats) {
  257.                 nextBats += (3500 + jjRandom() % 1000);
  258.                 uint x = uint(jjRandom() % jjResolutionWidth/3.0) + uint(jjResolutionWidth/3.0);
  259.                 for(uint i = 0; i < 40; i++) {
  260.                         makeBat(x,300 + jjRandom() % 400);
  261.                 }
  262.         }
  263.         if(timeSec() % 3600 == 0) {
  264.                 bellTimer = 0;
  265.         }
  266.         if(bellTimer > -1) {
  267.                 int angle = 0;
  268.                 bellTimer++;
  269.                 if(bellTimer == 70 || bellTimer == 280 || bellTimer == 490) {
  270.                         jjSamplePriority(SOUND::ZDOG_WAF3);
  271.                 }
  272.                
  273.                 if(bellTimer < 70) {
  274.                         angle = -bellTimer;
  275.                 } else if(bellTimer < 280) {
  276.                         angle = -70 + (bellTimer-70)*(2.0/3.0);
  277.                 } else if(bellTimer < 490) {
  278.                         angle = 70 - (bellTimer-280)*(2.0/3.0);
  279.                 } else if(bellTimer < 600) {
  280.                         angle = -70 + (bellTimer-490)*(2.0/3.0);
  281.                 } else {
  282.                         bellTimer = -1;
  283.                 }
  284.                 jjDrawRotatedSprite(74.6*70,14.3*70,ANIM::CUSTOM[0],0,0,angle,1,1,SPRITE::BRIGHTNESS,50,5);
  285.                
  286.         } else {
  287.                 jjDrawRotatedSprite(74.6*70,14.3*70,ANIM::CUSTOM[0],0,0,0,1,1,SPRITE::BRIGHTNESS,50,5);
  288.         }
  289.         /*if(jjGameTicks == 100 || jjGameTicks == 100 + 3*70 || jjGameTicks == 100 + 6*70) {//if(timeSec() % 3600 == 0) {
  290.                 jjSamplePriority(SOUND::ZDOG_WAF3);
  291.         }*/
  292.         /*if(timeMs() 3600000 < 8000) {
  293.                 jjDrawRotatedSprite(
  294.         }*/
  295.        
  296.         //jjDrawResizedSprite(p.xPos,p.yPos,ANIM::DEVILDEVAN,5,jjGameTicks/7,5,5);
  297.        
  298.         if(jjRandom() % 2 == 0) {
  299.                 makeBlood(28.35*72,11.48*72);
  300.                 makeBlood(28.34*72,11.48*72);
  301.         } else {
  302.                 makeBlood(29.46*72,11.48*72);
  303.                 makeBlood(29.47*72,11.48*72);
  304.         }
  305.         //if(jjRandom() % 2 == 0) {
  306.                 makeBlood(28.9*72,11.73*72);
  307.                 makeBlood(28.91*72,11.73*72);
  308.                 makeBlood(28.92*72,11.73*72);
  309.                 makeBlood(28.93*72,11.73*72);
  310.         //}
  311. }
  312.  
  313. void makeBlood(float xPos, float yPos) {
  314.         jjPARTICLE@ blood = jjAddParticle(PARTICLE::ICETRAIL);
  315.         blood.xPos = xPos;
  316.         blood.yPos = yPos;
  317.         blood.xSpeed = 0;
  318.         blood.ySpeed = 1;
  319.         blood.icetrail.color = 24;
  320.         blood.icetrail.colorStop = 32;
  321. }
  322.  
  323.  
  324. class BloodSpear : jjBEHAVIORINTERFACE {
  325.         void onBehave(jjOBJ@ obj) {
  326.                 obj.behave(BEHAVIOR::BULLET, false);
  327.                 obj.var[0] = int(atan2(-obj.ySpeed, obj.xSpeed) * (512.f * 0.318309886142228f));
  328.                
  329.                 if (obj.counter == 1 && obj.state == STATE::FLY && jjPlayers[obj.creatorID].isLocal) {
  330.                         jjSample(jjPlayers[obj.creatorID].xPos, jjPlayers[obj.creatorID].yPos, SOUND::HATTER_PTOEI, 0, obj.eventID == OBJECT::FIREBALLBULLETPU? 19000:20000);
  331.                 }
  332.                
  333.                 if (obj.state == STATE::FLY) {
  334.                         jjDrawRotatedSprite(obj.xPos, obj.yPos, ANIM::HATTER, 3, jjGameTicks >> 2, obj.var[0], 2, 1, SPRITE::SINGLEHUE, obj.eventID == OBJECT::FIREBALLBULLETPU? 15:24);
  335.                         switch (obj.direction) {
  336.                                 case 1: obj.xSpeed -= 0.1; obj.ySpeed += 0.1; break;
  337.                                 case -1: obj.xSpeed += 0.1; obj.ySpeed += 0.1; break;
  338.                         }
  339.                         if (obj.xSpeed == 0) obj.ySpeed += 0.15;
  340.                        
  341.                         jjPARTICLE@ blood = jjAddParticle(PARTICLE::ICETRAIL);
  342.                         blood.xPos = obj.xPos;
  343.                         blood.yPos = obj.yPos;
  344.                         blood.icetrail.color = obj.eventID == OBJECT::FIREBALLBULLETPU? 16:24;
  345.                         blood.icetrail.colorStop = obj.eventID == OBJECT::FIREBALLBULLETPU? 24:32;
  346.                 }
  347.                
  348.                 if (obj.state == STATE::EXPLODE) {
  349.                         jjDrawSprite(obj.xPos, obj.yPos, ANIM::MONKEY, 1, obj.curFrame, obj.direction, SPRITE::SINGLEHUE, obj.eventID == OBJECT::FIREBALLBULLETPU? 15:24);
  350.                         if (obj.var[1] < 27) {
  351.                                 if (obj.var[1] == 1) jjSample(obj.xPos, obj.yPos, SOUND::HATTER_SPLOUT, 0, 20000);
  352.                                 obj.var[1] = obj.var[1] + 1;
  353.                         }
  354.                         if (obj.var[1] == 27) {
  355.                                 obj.var[1] = 0;
  356.                                 obj.delete();
  357.                         }
  358.                 }
  359.                
  360.         }
  361. }
  362.  
  363. void onPlayer(jjPLAYER@ play) {
  364.         float MaxHealth = jjMaxHealth + 1;
  365.         float Health = play.health + 1;
  366.         float healthratio = MaxHealth / Health;
  367.  
  368.         if (healthratio < 1.3) jjWeapons[WEAPON::GUN8].spread = SPREAD::NORMAL;
  369.         if (healthratio >= 1.3 && healthratio < 2) jjWeapons[WEAPON::GUN8].spread = SPREAD::RFNORMAL;
  370.         if (healthratio >= 2) jjWeapons[WEAPON::GUN8].spread = SPREAD::RFPU;
  371. }
  372.