Downloads containing Randomizer.mut

Downloads
Name Author Game Mode Rating
JJ2+ Only: Randomizer FawFul Mutator N/A Download file

File preview

  1. /************************************/
  2. /*Randomizer Script by FawFuL and SE*/
  3. /************************************/
  4.  
  5. int counter = 50;
  6.  
  7. array<CHAR::Char> Characters = {CHAR::JAZZ, CHAR::SPAZ};
  8. array<uint8> weapons(jjLocalPlayerCount);
  9. const array<OBJECT::Object> shieldsToRandomize = {OBJECT::FIRESHIELD, OBJECT::WATERSHIELD, OBJECT::PLASMASHIELD, OBJECT::LASERSHIELD};
  10. const array<OBJECT::Object> possibleShieldsToBecome = {OBJECT::FIRESHIELD, OBJECT::WATERSHIELD, OBJECT::PLASMASHIELD, OBJECT::LASERSHIELD};
  11. const int shieldAnimID = jjObjectPresets[shieldsToRandomize[0]].curAnim;
  12. const array<array<uint8>> ammoPickups = {
  13.         {
  14.                 OBJECT::FASTFIRE,       OBJECT::BOUNCERAMMO3,   OBJECT::ICEAMMO3,
  15.                 OBJECT::SEEKERAMMO3,    OBJECT::RFAMMO3,        OBJECT::TOASTERAMMO3,
  16.                 OBJECT::TNTAMMO3,       OBJECT::GUN8AMMO3,      OBJECT::GUN9AMMO3,
  17.                 OBJECT::STOPWATCH,      OBJECT::STOPWATCH,      OBJECT::STOPWATCH,
  18.                 OBJECT::STOPWATCH
  19.         },
  20.         {
  21.                 0,                      OBJECT::BOUNCERAMMO15,  OBJECT::ICEAMMO15,
  22.                 OBJECT::SEEKERAMMO15,   OBJECT::RFAMMO15,       OBJECT::TOASTERAMMO15,
  23.                 0,                      0,                      0,
  24.                 0,                      0,                      0,
  25.                 0
  26.         },
  27.         {
  28.                 OBJECT::BLASTERPOWERUP, OBJECT::BOUNCERPOWERUP, OBJECT::ICEPOWERUP,
  29.                 OBJECT::SEEKERPOWERUP,  OBJECT::RFPOWERUP,      OBJECT::TOASTERPOWERUP,
  30.                 0,                      OBJECT::GUN8POWERUP,    OBJECT::GUN9POWERUP,
  31.                 OBJECT::FIRESHIELD,     OBJECT::WATERSHIELD,    OBJECT::LIGHTNINGSHIELD,
  32.                 OBJECT::LASERSHIELD
  33.         }
  34. };
  35.  
  36. void onLevelLoad() {
  37.         counter = 50;
  38.        
  39.         for (uint i = 0; i < possibleShieldsToBecome.length; ++i) {
  40.         jjEventSet(0, i, possibleShieldsToBecome[i]);
  41.         }
  42.         jjObjectPresets[OBJECT::STOPWATCH].scriptedCollisions = true;
  43.         jjObjectPresets[OBJECT::FIRESHIELD].scriptedCollisions = true;
  44.         jjObjectPresets[OBJECT::WATERSHIELD].scriptedCollisions = true;
  45.         jjObjectPresets[OBJECT::LIGHTNINGSHIELD].scriptedCollisions = true;
  46.         jjObjectPresets[OBJECT::LASERSHIELD].scriptedCollisions = true;
  47.         jjAnimSets[ANIM::PLUS_COMMON].load();
  48. }
  49.  
  50. void onLevelBegin() {
  51.         if (jjIsTSF) Characters.insertLast(CHAR::LORI);
  52.         jjSugarRushAllowed = true;
  53.         for (int i = 1; i <= 9; i++) {
  54.         jjWeapons[i].allowed = jjWeapons[i].allowedPowerup = true;
  55.         }
  56.         for (int i = jjObjectCount - 1; i >= 1; --i) {
  57.                 jjOBJ@ obj = jjObjects[i];
  58.                 if (obj.curAnim == shieldAnimID && obj.creator == CREATOR::LEVEL && obj.xOrg < 32)
  59.         obj.delete();  
  60.         }      
  61. }
  62.  
  63. void onMain() {
  64.         int weapon = jjLocalPlayers[0].shieldType == 0 ? jjLocalPlayers[0].currWeapon - 1 : jjLocalPlayers[0].shieldType + 8;
  65.         for (int i = 1; i < jjObjectCount; i++) {
  66.                 jjOBJ@ obj = jjObjects[i];
  67.                 if (obj.isActive && obj.eventID != 0) {
  68.                         const array<uint8>@ ammoSet;
  69.                         for (uint j = 0; j < ammoPickups.length(); j++) {
  70.                                 if (ammoPickups[j].find(obj.eventID) >= 0) {
  71.                                         @ammoSet = ammoPickups[j];
  72.                                         break;
  73.                                 }
  74.                         }
  75.                         if (ammoSet !is null && !(obj.eventID == OBJECT::FASTFIRE && obj.special == 0)) {
  76.                                 obj.special = 1;
  77.                                 if (ammoSet is ammoPickups[1])
  78.                                         obj.var[2] = ammoPickups[0][weapon];
  79.                                 else
  80.                                         obj.var[3] = weapon;
  81.                                 if (ammoSet[weapon] != 0) {
  82.                                         obj.eventID = ammoSet[weapon];
  83.                                         if (obj.eventID == OBJECT::LASERSHIELD)
  84.                                                 obj.determineCurAnim(ANIM::PLUS_COMMON, 2);
  85.                                         else
  86.                                                 obj.curAnim = jjObjectPresets[obj.eventID].curAnim;
  87.                                         if (obj.playerHandling != HANDLING::DELAYEDPICKUP)
  88.                                                 obj.scriptedCollisions = jjObjectPresets[obj.eventID].scriptedCollisions;
  89.                                         obj.determineCurFrame();
  90.                                 } else {
  91.                                         switch (weapon) {
  92.                                                 case 6: obj.determineCurAnim(ANIM::PICKUPS, 59); break;
  93.                                                 case 7: obj.determineCurAnim(ANIM::PLUS_COMMON, 0); break;
  94.                                                 case 8: obj.determineCurAnim(ANIM::PLUS_COMMON, 1); break;
  95.                                                 default: obj.determineCurAnim(ANIM::PICKUPS, 5);
  96.                                         }
  97.                                 }
  98.                                 obj.determineCurFrame();
  99.                         }
  100.                 }
  101.         }
  102. }
  103.  
  104. void onPlayer(jjPLAYER@ play) {
  105.         jjCHARACTER@ char = jjCharacters[play.charCurr];
  106.  
  107.         if (play.blink == -210 && play.shieldTime > 0) {
  108.         play.shieldTime = play.shieldTime - 10*70;
  109.         }
  110.        
  111.         char.canRun = true;
  112.        
  113.         if (play.charCurr == CHAR::FROG) play.jumpStrength = -20; else play.jumpStrength = -10;
  114.  
  115.  
  116.         if (play.shieldTime > 30*70) play.shieldTime = 30*70;
  117.         //Seperate value for laser
  118.         if (play.shieldTime > 30*70 && play.shieldType == SHIELD::LASER) play.shieldTime = 30*70;
  119.  
  120.         play.currWeapon = weapons[play.localPlayerID];
  121.        
  122.         if (play.blink == -260 || --counter == 0) {
  123.                 if (jjRandom()%100 < 10) {
  124.                         play.morphTo(CHAR::BIRD2);
  125.                 } else  {
  126.                         play.morphTo(Characters[jjRandom()%Characters.length()]);
  127.         }
  128.  
  129.                 if (jjRandom()%100 < 5) {
  130.                 jjSamplePriority(SOUND::EPICLOGO_EPIC2);
  131.                 jjSamplePriority(SOUND::INTRO_BOEM1);
  132.                         switch(play.charCurr) {
  133.                         case CHAR::JAZZ: jjSamplePriority(SOUND::JAZZSOUNDS_JUMMY); break;
  134.                         case CHAR::SPAZ: jjSamplePriority(SOUND::SPAZSOUNDS_HAPPY); break;
  135.                         case CHAR::LORI: jjSamplePriority(SOUND::LORISOUNDS_WEHOO); break;
  136.                         }
  137.         switch(jjRandom()%4) {
  138.                 case 0: play.shieldType = SHIELD::FIRE;
  139.                         play.shieldTime = 30*70;
  140.                         play.currWeapon = WEAPON::BLASTER;
  141.                         jjAlert("1|||FIRE!", false, STRING::MEDIUM); break;
  142.                 case 1: play.shieldType = SHIELD::BUBBLE;
  143.                         play.shieldTime = 30*70;
  144.                         play.currWeapon = WEAPON::BLASTER;
  145.                         jjAlert("1||BUBBLE!", false, STRING::MEDIUM); break;
  146.                 case 2: play.shieldType = SHIELD::LIGHTNING;
  147.                         play.shieldTime = 30*70;
  148.                         play.currWeapon = WEAPON::BLASTER;
  149.                         jjAlert("1|||||||LIGHTNING!", false, STRING::MEDIUM); break;
  150.                 case 3: play.shieldType = SHIELD::LASER;
  151.                         play.shieldTime = 15*70;
  152.                         play.currWeapon = WEAPON::BLASTER;
  153.                         jjAlert("1|||||LASER!", false, STRING::MEDIUM); break;
  154.                         }
  155.         weapons[play.localPlayerID] = play.currWeapon;
  156.                 }      
  157.         else {
  158.                 jjSamplePriority(SOUND::COMMON_GLASS2);
  159.         if (jjRandom()%100 < 2) {
  160.                         play.morphTo(CHAR::FROG);
  161.                         play.startSugarRush(200*70);
  162.                         play.shieldType = SHIELD::LASER;
  163.                         play.shieldTime = 20*70;
  164.                         jjAlert("1||||||||FROG!", false, STRING::MEDIUM);
  165.                         play.currWeapon = WEAPON::BLASTER;
  166.                         }      
  167.         else {
  168.         switch(jjRandom()%9) {
  169.                 case 0: play.powerup[1] = true;
  170.                         jjAlert("1|||||BLASTER!", false, STRING::MEDIUM);
  171.                         play.currWeapon = WEAPON::BLASTER; break;
  172.                 case 1: play.ammo[2]=50;
  173.                         play.powerup[2] = true;
  174.                         jjAlert("1||||BOUNCER!", false, STRING::MEDIUM);
  175.                         play.currWeapon = WEAPON::BOUNCER;  break;
  176.                 case 2: play.ammo[3]=50;
  177.                         play.powerup[3] = true;
  178.                         jjAlert("1||||||ICE!", false, STRING::MEDIUM);
  179.                         play.currWeapon = WEAPON::ICE; break;
  180.                 case 3: play.ammo[4]=50;
  181.                         play.powerup[4] = true;
  182.                         jjAlert("1|||S|||||||E|E|||||||K|E|||||||R|S|||||||!", false, STRING::MEDIUM);
  183.                         play.currWeapon = WEAPON::SEEKER; break;
  184.                 case 4: play.ammo[5]=50;
  185.                         play.powerup[5] = true;
  186.                         jjAlert("1|RF!", false, STRING::MEDIUM);
  187.                         play.currWeapon = WEAPON::RF; break;
  188.                 case 5: play.ammo[6]=50;  
  189.                         play.powerup[6] = true;
  190.                         jjAlert("1|||T|O|||||||A|S|||||||T|E|||||||R|!", false, STRING::MEDIUM);
  191.                         play.currWeapon = WEAPON::TOASTER; break;
  192.                 case 6: play.ammo[7]=50;  
  193.                         jjAlert("1|||T||||||N||T||||||!", false, STRING::MEDIUM);
  194.                         play.currWeapon = WEAPON::TNT; break;
  195.                 case 7: play.ammo[8]=50;
  196.                         play.powerup[8] = true;
  197.                         if (jjAllowsFireball) {
  198.                         jjAlert("1@@@@@@|||||F||||||I||R||||||E||B||||||A||L||||||L||!", false, STRING::MEDIUM);
  199.                         } else {
  200.                         jjAlert("1@@@@@@|||||P||||||E||P||||||P||E||||||R||!", false, STRING::MEDIUM);
  201.                         }              
  202.                         play.currWeapon = WEAPON::GUN8; break;
  203.                 case 8: play.ammo[9]=50;
  204.                         play.powerup[9] = true;
  205.                         jjAlert("1@@@@@@|||ELECTRO BLASTER!", false, STRING::MEDIUM);
  206.                         play.currWeapon = WEAPON::GUN9; break;
  207.                         }
  208.         }      
  209.         weapons[play.localPlayerID] = play.currWeapon;
  210.                 }
  211.         }
  212. }
  213.  
  214. void onObjectHit(jjOBJ@ obj, jjOBJ@ bullet, jjPLAYER@ player, int force) {
  215.         if (player !is null) {
  216.                 int shield = 0;
  217.                 switch (obj.eventID) {
  218.                         case OBJECT::STOPWATCH:
  219.                                 if (player.shieldType != 0)
  220.                                         player.shieldTime += 35;
  221.                                 obj.frameID = 0;
  222.                                 obj.behavior = BEHAVIOR::EXPLOSION2;
  223.                                 jjSample(obj.xPos, obj.yPos, SOUND::COMMON_PICKUP1);
  224.                                 break;
  225.                         case OBJECT::FIRESHIELD:
  226.                                 if (shield == 0)
  227.                                         shield = SHIELD::FIRE;
  228.                         case OBJECT::WATERSHIELD:
  229.                                 if (shield == 0)
  230.                                     shield = SHIELD::WATER;
  231.                         case OBJECT::LIGHTNINGSHIELD:
  232.                                 if (shield == 0)
  233.                                         shield = SHIELD::LIGHTNING;
  234.                         case OBJECT::LASERSHIELD:
  235.                                 if (shield == 0)
  236.                                         shield = SHIELD::LASER;
  237.                                 if (force != 0 && (obj.state != STATE::KILL || bullet !is null)) {
  238.                                         player.shieldTime += 70;
  239.                                         player.shieldType = shield;
  240.                                         player.currWeapon = WEAPON::BLASTER;
  241.                                         obj.energy = 0;
  242.                                         obj.state = STATE::KILL;
  243.                                         if (bullet !is null && bullet.var[6] & 16 == 0)
  244.                                                 bullet.state = STATE::EXPLODE;
  245.                                         jjSample(player.xPos, player.yPos, SOUND::COMMON_GLASS2);
  246.                                         jjSample(obj.xPos, obj.yPos, SOUND::COMMON_SHIELD1);
  247.                                 }
  248.                                 break;
  249.                 }
  250.         }
  251. }
  252.  
  253.  
  254. void onPlayerInput(jjPLAYER@ player) {
  255.                 if (player.ammo[WEAPON::CURRENT] == 0) player.keyFire = false;
  256. }