Downloads containing forestwheel.j2as

Downloads
Name Author Game Mode Rating
JJ2+ Only: Forest Wheel (updated)Featured Download Violet CLM Multiple 9.4 Download file

File preview

  1. const int NUMBEROFPLATFORMS = 24;
  2. const int LENGTH = 22;
  3. const int MORPHBEAMHEIGHT = 51;
  4.  
  5. int GameTimer = 0;
  6. int RedScore = 0;
  7. int BlueScore = 0;
  8.  
  9. array<jjOBJ@> SmokeTunnel(MORPHBEAMHEIGHT);
  10. array<int> TimeTillNextAbleToMorph(4, 0);
  11.  
  12. bool MorphBeam = false;
  13. bool SpikePlatforms = false;
  14. int DevilDevan = 0;
  15.  
  16. array<int> Prices =
  17.         {100, 90, 80, 75, 70, 65, 60, 55, 50, 50, 50, 50, 50, 50, 50, 50,
  18.         25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  19.         25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  20.         25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  21.         25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  22.         25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  23.         25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  24.         25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  25.         25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  26.         25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  27.         25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  28.         25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  29.         25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  30.         25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  31.         25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
  32.         25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25};
  33.  
  34. bool AdjustedSuckerTubes = false;
  35.  
  36. void onLevelLoad() {
  37.         for (int i = 1; i < 2560; ++i) {
  38.                 if (i >= 510 && jjGameConnection == GAME::LOCAL) break;
  39.                 jjDeleteObject(i);
  40.         }
  41.         for (int i = 0; i < NUMBEROFPLATFORMS; ++i) { //this loop is kind of ugly, alas.
  42.                 jjOBJ@ o = jjObjects[jjAddObject(OBJECT::GRASSPLATFORM, 40*32,27*32)];
  43.                 o.state = STATE::ACTION;
  44.                 o.var[1] = -1;
  45.                 o.var[2] = LENGTH;
  46.                 o.frameID = 0;
  47.                 o.determineCurFrame();
  48.                 o.var[0] = i * (1024/NUMBEROFPLATFORMS);
  49.                 o.var[5] = o.var[1];
  50.                 o.counter = jjGameTicks;
  51.                 o.var[4] = jjGameTicks*o.var[1]+o.var[0];
  52.                 o.noHit = 1;
  53.                 if ((i & 1) == 0) {
  54.                         @o = jjObjects[jjAddObject(OBJECT::GRASSPLATFORM, 40*32,27*32)];
  55.                         o.state = STATE::ACTION;
  56.                         o.var[1] = 2;
  57.                         o.var[2] = LENGTH / 2;
  58.                         o.frameID = 0;
  59.                         o.determineCurFrame();
  60.                         o.var[0] = i * (1024/NUMBEROFPLATFORMS);
  61.                         o.var[5] = o.var[1];
  62.                         o.counter = jjGameTicks;
  63.                         o.var[4] = jjGameTicks*o.var[1]+o.var[0];
  64.                         o.noHit = 1;
  65.                 }
  66.         }
  67.         jjObjectPresets[OBJECT::APPLE].lightType = LIGHT::BRIGHT; //the morph beam
  68.         jjObjectPresets[OBJECT::APPLE].light = 18;
  69.         jjObjectPresets[OBJECT::APPLE].objType = 8;
  70.         jjObjectPresets[OBJECT::APPLE].eventID = OBJECT::COPTER;        //use copters and .fly as signal to morph, since
  71.         jjObjectPresets[OBJECT::APPLE].var[4] = 1;                      //copters aren't destroyed when used, and change
  72.         jjObjectPresets[OBJECT::APPLE].noHit = 1 | 8;                   //the jjPLAYER in a way AngelScript can detect
  73.         jjObjectPresets[OBJECT::APPLE].state = STATE::IDLE; //doesn't display a sprite
  74.         jjObjectPresets[OBJECT::ELECTROBULLET].objType = 9; //not treated as a bullet
  75.         jjObjectPresets[OBJECT::ELECTROBULLETPU].objType = 9; //not treated as a bullet
  76.         jjObjectPresets[OBJECT::DEVILDEVAN].var[7] = 1; //devil form boolean
  77.         jjObjectPresets[OBJECT::DEVILDEVAN].state = STATE::FLY;
  78.         jjObjectPresets[OBJECT::DEVILDEVAN].energy = 0; //unkillable
  79.         jjObjectPresets[OBJECT::DEVILDEVAN].noHit = 1 + 4 + 8; //unhurtable -- ricochet -- unfreezable
  80.         jjObjectPresets[OBJECT::DEVILDEVAN].determineCurAnim(ANIM::DEVILDEVAN, 8); //flying
  81. }
  82.  
  83. void onMain() {
  84.         if (!AdjustedSuckerTubes) {
  85.                 if (jjGameState == GAME::STARTED && jjGameTicks > 10) { //some initial time for setup, just in case
  86.                         AdjustedSuckerTubes = true;
  87.                         if (jjGameMode != GAME::CTF) { //remove all the Bank Robbery tiles/events
  88.                                 jjEventSet(3,23, 0);
  89.                                 jjEventSet(76,23, 0);
  90.                                 jjTileSet(3, 38,4, 0);
  91.                                 jjTileSet(3, 41,4, 0);
  92.                                 for (int y = 0; y < 6; ++y)
  93.                                         for (int x = 24; x < 50; ++x) {
  94.                                                 jjEventSet(x,y, 0);
  95.                                                 jjTileSet(4, x,y, 0);
  96.                                         }
  97.                                 for (int i = 1; i < jjObjectCount; ++i) {
  98.                                         jjOBJ@ o = jjObjects[i];
  99.                                         if (o.isActive && (o.eventID == OBJECT::PULSELIGHT)) {
  100.                                                 jjDeleteObject(i);
  101.                                                 o.eventID = 0; //just to be safe
  102.                                         }
  103.                                 }
  104.                         }
  105.                         if (!jjIsServer) {
  106.                                 jjParameterSet(2,23, 15, 1, 1);
  107.                                 jjParameterSet(77,23, 15, 1, 1);
  108.                         }
  109.                         else if (jjGameMode == GAME::CTF)
  110.                                 jjChat("/maxscore 255");
  111.                 } else if ((jjIsServer || jjIsAdmin) && (jjGameTicks & 511) == 2) {
  112.                         p.showText("@@@@@@Turn on Trigger 0 to enable the morph beam!@@Turn on Trigger 1 to enable spike platforms,@or Trigger 2 to enable Devan Shell!@@@@In Bank Robbery, turn on Trigger 3 to@limit the coin intake to STANDING players.");
  113.                 }
  114.         } else {
  115.                 if (jjIsServer) {
  116.                         if (jjGameMode == GAME::CTF) {
  117.                                 int newRedScore = RedScore;
  118.                                 int newBlueScore = BlueScore;
  119.                                 for (int i = 1; i < jjObjectCount; ++i) {
  120.                                         jjOBJ@ o = jjObjects[i];
  121.                                         if (o.isActive && o.eventID == OBJECT::ELECTROBULLET) {
  122.                                                 jjDeleteObject(i);
  123.                                                 o.eventID = 0; //since I'm not checking isActive
  124.                                                 ++newBlueScore;
  125.                                         } else if (o.isActive && o.eventID == OBJECT::ELECTROBULLETPU) {
  126.                                                 jjDeleteObject(i);
  127.                                                 o.eventID = 0; //just to be safe
  128.                                                 ++newRedScore;
  129.                                         }
  130.                                 }
  131.                                 if (newRedScore > 254) { newRedScore = 254; jjChat("/redscore 254"); jjChat("/stop"); }
  132.                                 else if (newRedScore > RedScore) {
  133.                                         RedScore = newRedScore;
  134.                                         jjChat("/redscore " + RedScore);
  135.                                 }
  136.                                 if (newBlueScore > 254) { newBlueScore = 254; jjChat("/bluescore 254");  jjChat("/stop"); }
  137.                                 else if (newBlueScore > BlueScore) {
  138.                                         BlueScore = newBlueScore;
  139.                                         jjChat("/bluescore " + BlueScore);
  140.                                 }
  141.                         }
  142.                 } else {
  143.                         ++GameTimer;
  144.                         if (jjTriggers[0]) {
  145.                                 if (!MorphBeam) {
  146.                                         MorphBeam = true;
  147.                                         for (int i = 0; i < MORPHBEAMHEIGHT; ++i)
  148.                                                 @SmokeTunnel[i] =  jjObjects[jjAddObject(OBJECT::APPLE, 40*32,i*32)];
  149.                                 }
  150.                                 else for (int i = 0; i < MORPHBEAMHEIGHT; ++i) {
  151.                                         SmokeTunnel[i].xPos = SmokeTunnel[i].xOrg + jjSin(GameTimer/2) * 1024 + jjSin(GameTimer*5) * i * 8;
  152.                                         SmokeTunnel[i].var[4] = 1;
  153.                                 }
  154.                         }
  155.                         if (jjTriggers[1] != SpikePlatforms) {
  156.                                 if (SpikePlatforms = jjTriggers[1]) {
  157.                                         for (int i = 1; i < jjObjectCount; ++i) {
  158.                                                 jjOBJ@ o = jjObjects[i];
  159.                                                 if (o.eventID == OBJECT::GRASSPLATFORM) {
  160.                                                         o.eventID = OBJECT::SPIKEPLATFORM;
  161.                                                         o.curAnim = jjObjectPresets[OBJECT::SPIKEPLATFORM].curAnim;
  162.                                                         o.determineCurFrame();
  163.                                                 }
  164.                                         }
  165.                                 } else {
  166.                                         for (int i = 1; i < jjObjectCount; ++i) {
  167.                                                 jjOBJ@ o = jjObjects[i];
  168.                                                 if (o.eventID == OBJECT::SPIKEPLATFORM) {
  169.                                                         o.eventID = OBJECT::GRASSPLATFORM;
  170.                                                         o.curAnim = jjObjectPresets[OBJECT::GRASSPLATFORM].curAnim;
  171.                                                         o.determineCurFrame();
  172.                                                 }
  173.                                         }
  174.                                 }
  175.                         }
  176.                         if (jjTriggers[2] == (DevilDevan == 0 || jjObjects[DevilDevan].eventID != OBJECT::DEVILDEVAN)) {
  177.                                 if (jjTriggers[2]) {
  178.                                         DevilDevan = jjAddObject(OBJECT::DEVILDEVAN, 40*32, -64);
  179.                                 } else {
  180.                                         if (jjObjects[DevilDevan].eventID == OBJECT::DEVILDEVAN) //just to be sure
  181.                                                 jjDeleteObject(DevilDevan);
  182.                                         DevilDevan = 0;
  183.                                 }
  184.                         } else if (DevilDevan != 0) {
  185.                                 if (jjObjects[DevilDevan].counter == 0) { //in a mood to target someone
  186.                                         ++jjObjects[DevilDevan].counter;
  187.                                         jjObjects[DevilDevan].var[5] = jjLocalPlayers[0].playerID; //new target, same as the old target
  188.                                 }
  189.                                 if (GameTimer & 7 == 0) { //don't need to check this one very often
  190.                                         for (int i = 1; i < jjObjectCount; ++i) {
  191.                                                 jjOBJ@ o = jjObjects[i];
  192.                                                 if (o.eventID == 20 && o.animSpeed == 1) {
  193.                                                         o.animSpeed = 2;
  194.                                                         o.counterEnd += 200;
  195.                                                         o.ySpeed = 5;
  196.                                                         o.xSpeed = o.direction * 5;
  197.                                                 }
  198.                                         }
  199.                                 }
  200.                         }
  201.                         if (jjGameMode == GAME::CTF) for (int i = 1; i < jjObjectCount; ++i) {
  202.                                 jjOBJ@ o = jjObjects[i];
  203.                                 if (o.isActive && (o.eventID == OBJECT::ELECTROBULLET || o.eventID == OBJECT::ELECTROBULLETPU)) {
  204.                                         jjDeleteObject(i);
  205.                                         o.eventID = 0; //just to be safe
  206.                                 }
  207.                         }
  208.                 }
  209.         }
  210. }
  211.  
  212. void onFunction0() {
  213.         if (jjGameState == GAME::STARTED && p.testForCoins(Prices[0])) {
  214.                 string result = "@@@1You paid "+ formatInt(Prices[0], "1") + " coins!";
  215.                 int timesScored = 1;
  216.                 p.powerup[9] = p.teamRed;
  217.                 p.fireBullet(9, false, false, DIRECTION::UP); //simplest way of communicating to the server
  218.                 while (p.testForCoins(Prices[timesScored])) {
  219.                         if (timesScored < 22) result += "@You paid "+ formatInt(Prices[timesScored], "1") + " coins!";
  220.                         p.fireBullet(9, false, false, DIRECTION::UP);
  221.                         ++timesScored;
  222.                 }
  223.                 if (p.teamRed)
  224.                         jjChat("/me scored |||" + formatInt(timesScored, "1") + " |||||point" + ( (timesScored == 1) ? "!" : "s!"));
  225.                 else
  226.                         jjChat("/me scored ||||" + formatInt(timesScored, "1") + " ||||point" + ( (timesScored == 1) ? "!" : "s!"));
  227.                 p.showText(result);
  228.                 p.health = 1;//jjMaxHealth;
  229.         }
  230. }
  231.  
  232. void onPlayer() {
  233.         if (p.fly > 0) {
  234.                 p.fly = FLIGHT::NONE;
  235.                 if (TimeTillNextAbleToMorph[p.localPlayerID] == 0) {
  236.                         p.morph(true, true);
  237.                         jjSample(p.xPos, p.yPos, SOUND::COMMON_HOLYFLUT);
  238.                         jjSample(p.xPos, p.yPos, SOUND::COMMON_BUBBLGN1);
  239.                         TimeTillNextAbleToMorph[p.localPlayerID] = 70; //one second
  240.                 }
  241.         }
  242.         if (TimeTillNextAbleToMorph[p.localPlayerID] > 0)
  243.                 --TimeTillNextAbleToMorph[p.localPlayerID];
  244.         if (!jjIsServer && jjGameState == GAME::STARTED && jjGameMode == GAME::CTF && (GameTimer & 7) == 1 && p.xPos >= 4*32 && p.xPos <= 76*32 && (!jjTriggers[3] || p.platform > 0)) {
  245.                 jjAddObject(OBJECT::SILVERCOIN, p.xPos, p.yPos);
  246.         }
  247. }