Example #1
0
  public void bumpInto(int x, int y) {
    byte block = level.getBlock(x, y);
    if (((Level.TILE_BEHAVIORS[block & 0xff]) & Level.BIT_PICKUPABLE) > 0) {
      Mario.getCoin();
      sound.play(
          Art.samples[Art.SAMPLE_GET_COIN], new FixedSoundSource(x * 16 + 8, y * 16 + 8), 1, 1, 1);
      level.setBlock(x, y, (byte) 0);
      addSprite(new CoinAnim(x, y + 1));

      // TODO no idea when this happens... maybe remove coin count
      if (recorder != null) recorder.recordCoin();
    }

    for (Sprite sprite : sprites) {
      sprite.bumpCheck(x, y);
    }
  }
Example #2
0
  public void render(Graphics g, float alpha) {
    int xCam = (int) (mario.xOld + (mario.x - mario.xOld) * alpha) - 160;
    int yCam = (int) (mario.yOld + (mario.y - mario.yOld) * alpha) - 120;
    // int xCam = (int) (xCamO + (this.xCam - xCamO) * alpha);
    //        int yCam = (int) (yCamO + (this.yCam - yCamO) * alpha);
    if (xCam < 0) xCam = 0;
    if (yCam < 0) yCam = 0;
    if (xCam > level.getWidth() * 16 - 320) xCam = level.getWidth() * 16 - 320;
    if (yCam > level.getHeight() * 16 - 240) yCam = level.getHeight() * 16 - 240;

    //      g.drawImage(Art.background, 0, 0, null);

    for (int i = 0; i < 2; i++) {
      bgLayer[i].setCam(xCam, yCam);
      bgLayer[i].render(g, tick, alpha);
    }

    g.translate(-xCam, -yCam);
    for (Sprite sprite : sprites) {
      if (sprite.layer == 0) sprite.render(g, alpha);
    }
    g.translate(xCam, yCam);

    //////////// THIS RENDERS THE LEVEL
    layer.setCam(xCam, yCam);
    layer.render(g, tick, paused ? 0 : alpha);
    layer.renderExit0(g, tick, paused ? 0 : alpha, mario.winTime == 0);
    //////////// END OF LEVEL RENDER

    //////////// RENDERS SPRITES
    g.translate(-xCam, -yCam);
    for (Sprite sprite : sprites) {
      if (sprite.layer == 1) sprite.render(g, alpha);
    }
    g.translate(xCam, yCam);
    g.setColor(Color.BLACK);
    layer.renderExit1(g, tick, paused ? 0 : alpha);
    //////////// END OF SPRITE RENDERING

    drawStringDropShadow(g, "MARIO " + df.format(Mario.lives), 0, 0, 7);
    //        drawStringDropShadow(g, "00000000", 0, 1, 7);

    drawStringDropShadow(g, "COIN", 14, 0, 7);
    drawStringDropShadow(g, " " + df.format(Mario.coins), 14, 1, 7);

    drawStringDropShadow(g, "WORLD", 24, 0, 7);
    drawStringDropShadow(g, " " + Mario.levelString, 24, 1, 7);

    drawStringDropShadow(g, "TIME", 35, 0, 7);
    int time = (timeLeft + 15 - 1) / 15;
    if (time < 0) time = 0;
    drawStringDropShadow(g, " " + df2.format(time), 35, 1, 7);

    renderDirectionArrow(g);

    if (startTime > 0) {
      float t = startTime + alpha - 2;
      t = t * t * 0.6f;
      renderBlackout(g, 160, 120, (int) (t));
    }
    //        mario.x>level.xExit*16
    if (mario.winTime > 0) {
      float t = mario.winTime + alpha;
      t = t * t * 0.2f;

      if (t > 0) {
        if (recorder != null) {
          recorder.stopRecord();
          recorder.levelWon();
          //                	recorder.printAll();
        }
      }

      if (t > 900) {

        winActions();
        return;

        //              replayer = new Replayer(recorder.getBytes());
        //                init();
      }

      renderBlackout(
          g, (int) (mario.xDeathPos - xCam), (int) (mario.yDeathPos - yCam), (int) (320 - t));
    }

    if (mario.deathTime > 0) {
      g.setColor(Color.BLACK);
      float t = mario.deathTime + alpha;
      t = t * t * 0.4f;

      if (t > 0 && Mario.lives <= 0) {
        if (recorder != null) {
          recorder.stopRecord();
        }
      }

      if (t > 1800) {
        Mario.lives--;
        deathActions();
      }

      renderBlackout(
          g, (int) (mario.xDeathPos - xCam), (int) (mario.yDeathPos - yCam), (int) (320 - t));
    }
  }
Example #3
0
 public void addSprite(Sprite sprite) {
   spritesToAdd.add(sprite);
   sprite.tick();
 }
Example #4
0
  public void tick() {
    timeLeft--;

    if (widthArrow < 0) {
      widthArrow *= -1;
      tipWidthArrow *= -1;

      xPositionsArrow =
          new int[] {
            xArrow + -widthArrow / 2,
            xArrow + widthArrow / 2 - tipWidthArrow,
            xArrow + widthArrow / 2 - tipWidthArrow,
            xArrow + widthArrow / 2,
            xArrow + widthArrow / 2 - tipWidthArrow,
            xArrow + widthArrow / 2 - tipWidthArrow,
            xArrow + -widthArrow / 2
          };
      yPositionsArrow =
          new int[] {
            yArrow + -heightArrow / 4,
            yArrow + -heightArrow / 4,
            yArrow + -heightArrow / 2,
            yArrow + 0,
            yArrow + heightArrow / 2,
            yArrow + heightArrow / 4,
            yArrow + heightArrow / 4
          };
    }

    if (timeLeft == 0) {
      mario.dieTime();
    }

    xCamO = xCam;
    yCamO = yCam;

    if (startTime > 0) {
      startTime++;
    }

    float targetXCam = mario.x - 160;

    xCam = targetXCam;

    if (xCam < 0) xCam = 0;
    if (xCam > level.getWidth() * 16 - 320) xCam = level.getWidth() * 16 - 320;

    /*      if (recorder != null)
    {
    recorder.addTick(mario.getKeyMask());
    }

    if (replayer!=null)
    {
    mario.setKeys(replayer.nextTick());
    }*/

    fireballsOnScreen = 0;

    for (Sprite sprite : sprites) {
      if (sprite != mario) {
        float xd = sprite.x - xCam;
        float yd = sprite.y - yCam;
        if (xd < -64 || xd > 320 + 64 || yd < -64 || yd > 240 + 64) {
          removeSprite(sprite);
        } else {
          if (sprite instanceof Fireball) {
            fireballsOnScreen++;
          }
        }
      }
    }

    if (paused) {
      for (Sprite sprite : sprites) {
        if (sprite == mario) {
          sprite.tick();
        } else {
          sprite.tickNoMove();
        }
      }
    } else {

      tick++;
      level.tick();

      boolean hasShotCannon = false;
      int xCannon = 0;

      for (int x = (int) xCam / 16 - 1; x <= (int) (xCam + layer.width) / 16 + 1; x++)
        for (int y = (int) yCam / 16 - 1; y <= (int) (yCam + layer.height) / 16 + 1; y++) {
          int dir = 0;

          if (x * 16 + 8 > mario.x + 16) dir = -1;
          if (x * 16 + 8 < mario.x - 16) dir = 1;

          SpriteTemplate st = level.getSpriteTemplate(x, y);

          if (st != null) {
            if (st.lastVisibleTick != tick - 1) {
              if (st.sprite == null || !sprites.contains(st.sprite)) {
                st.spawn(this, x, y, dir);
              }
            }

            st.lastVisibleTick = tick;
          }

          if (dir != 0) {
            byte b = level.getBlock(x, y);
            if (((Level.TILE_BEHAVIORS[b & 0xff]) & Level.BIT_ANIMATED) > 0) {
              if ((b % 16) / 4 == 3 && b / 16 == 0) {
                if ((tick - x * 2) % 100 == 0) {
                  xCannon = x;
                  for (int i = 0; i < 8; i++) {
                    addSprite(
                        new Sparkle(
                            x * 16 + 8,
                            y * 16 + (int) (Math.random() * 16),
                            (float) Math.random() * dir,
                            0,
                            0,
                            1,
                            5));
                  }
                  addSprite(new BulletBill(this, x * 16 + 8 + dir * 8, y * 16 + 15, dir));
                  hasShotCannon = true;
                }
              }
            }
          }
        }

      if (hasShotCannon) {
        sound.play(
            Art.samples[Art.SAMPLE_CANNON_FIRE],
            new FixedSoundSource(xCannon * 16, yCam + 120),
            1,
            1,
            1);
      }

      for (Sprite sprite : sprites) {
        sprite.tick();
      }

      for (Sprite sprite : sprites) {
        sprite.collideCheck();
      }

      for (Shell shell : shellsToCheck) {
        for (Sprite sprite : sprites) {
          if (sprite != shell && !shell.dead) {
            if (sprite.shellCollideCheck(shell)) {
              if (mario.carried == shell && !shell.dead) {
                mario.carried = null;
                shell.die();
              }
            }
          }
        }
      }
      shellsToCheck.clear();

      for (Fireball fireball : fireballsToCheck) {
        for (Sprite sprite : sprites) {
          if (sprite != fireball && !fireball.dead) {
            if (sprite.fireballCollideCheck(fireball)) {
              fireball.die();
            }
          }
        }
      }
      fireballsToCheck.clear();
    }

    sprites.addAll(0, spritesToAdd);
    sprites.removeAll(spritesToRemove);
    spritesToAdd.clear();
    spritesToRemove.clear();

    // TODO: THIS IS TEST FLIP
    //        if(keys[Mario.KEY_UP] && tick%2 == 0)
    //        	level.startFlipping = true;

    //        if(level.canFlip)
    //        	flip();
  }