Example #1
1
 public void initAbilities() throws FileNotFoundException, IOException, SlickException {
   BufferedReader reader = new BufferedReader(new FileReader("res/abilities.txt"));
   String[] values;
   String line;
   Ability ability = new Ability();
   Projectile proj;
   try {
     line = reader.readLine();
     while (line != null) {
       values = line.split(",");
       if (values[0].equals("add")) {
         entity.addAttack(ability, Integer.parseInt(values[1]));
         ability = new Ability();
       } else {
         proj =
             new Projectile(
                 Float.parseFloat(values[0]),
                 Float.parseFloat(values[1]),
                 Float.parseFloat(values[2]),
                 Float.parseFloat(values[3]),
                 new Image(values[4]),
                 entity);
         ability.addProjectile(proj);
       }
       line = reader.readLine();
     }
   } finally {
     reader.close();
   }
 }
Example #2
1
  @Override
  public void update(GameContainer container, int delta) throws SlickException {
    Projectile proj;
    playerNextPos = inputHandler.playerInput(player, container.getInput(), delta, sound);
    entity.update(delta, sound);
    if (!isBlocked(playerNextPos, player.getWidth(), player.getHeight())) {
      player.setCoord(playerNextPos);
    }

    player.logic();

    for (int i = 0; i < projectiles.size(); i++) {
      proj = projectiles.get(i);
      proj.update(delta);
      if (isBlocked(proj.pos, proj.getWidth(), proj.getHeight())) {
        projectiles.remove(i);
        sound.playSound(collisionSound);
      } else if (proj.collidesWith(entity) && proj.getOwner() == player) {
        proj.damage(entity);
        projectiles.remove(i);
      } else if (proj.collidesWith(player) && proj.getOwner() == entity) {
        proj.damage(player);
        projectiles.remove(i);
      }
    }
  }
Example #3
1
  public void render(GameContainer container, Graphics g) throws SlickException {
    int xOffset = -(int) player.getX() + WIDTH / 2;
    int yOffset = -(int) player.getY() + HEIGHT / 2;

    tileMap.render(xOffset, yOffset);
    player.draw(WIDTH, HEIGHT);
    entity.draw(xOffset, yOffset);
    for (int i = 0; i < projectiles.size(); i++) {
      projectiles.get(i).draw(xOffset, yOffset);
    }
    this.drawHealthBar(g, player, xOffset, yOffset);
    this.drawHealthBar(g, entity, xOffset, yOffset);
  }
Example #4
0
  @Override
  public void collide(Entity entity) {
    super.collide(entity);

    if (entity instanceof BasicTile || entity instanceof Player) {
      if (state == BossState.FALL) {
        Assets.boop.play();
        state = BossState.LANDWAIT;
        timer = 0;
        size.getVelocity().set(50, -50);
      }
    }
  }
Example #5
0
  @Override
  public void kill() {
    super.kill();
    fixture.setSensor(false);

    for (int i = 0; i < 10; i++) {
      HPPickup hpp = new HPPickup(0.5f);
      hpp.getBody().setTransform(getBody().getPosition(), 0);
      hpp.getBody().setLinearVelocity(MathUtils.random(-50, 50), MathUtils.random(-50, 50));
      GameScreen.i.getEntities().add(hpp);
    }

    MaxHPPickup mh = new MaxHPPickup(3);
    mh.getBody().setTransform(getBody().getPosition(), 0);
    GameScreen.i.getEntities().add(mh);
  }
Example #6
0
  @Override
  public void update(float delta) {
    super.update(delta);

    xSpring.value = getBody().getPosition().x;

    if (state == BossState.WAITING) {
      xSpring.target = -50;
      getBody().setTransform(-50, 0, 0);

      if (GameScreen.i.getBossState() == GameScreen.BossState.FIGHTING) {
        GameScreen.i.getBoss().setName("");
        state = BossState.COMING;
        GameScreen.i.setFreezeControls(true);
        timer = 0;
      }
    } else if (state == BossState.COMING) {
      float last = timer;
      timer += delta;

      if (timer > 3 && last <= 3) {
        xSpring.target = -15;
        GameScreen.i.getBoss().setName("HEY...");
      }

      if (timer > 6 && last <= 6) {
        xSpring.target = -8;
        GameScreen.i.getBoss().setName("YOU");
        GameScreen.i.getBoss().setHealth(1.05f);
      }

      if (timer > 7 && last <= 7) {
        xSpring.target = -4;
        GameScreen.i.getBoss().setName("YOU SHOULD");
      }

      if (timer > 8 && last <= 8) {
        xSpring.target = 0;
        GameScreen.i.getBoss().setName("YOU SHOULD PROBABLY");
        GameScreen.i.getBoss().setHealth(1.1f);
      }

      if (timer > 11 && last <= 11) {
        GameScreen.i.getBoss().setName("RRRUUUUUUUNNNNNN!!!!");
        GameScreen.i.setFreezeControls(false);
        GameScreen.i.getPlayer().setSpeed(30);
        GameScreen.i.getBoss().setHealth(99999f);
      }
      if (timer > 11.5f) {
        state = BossState.RUN;
      }
    } else if (state == BossState.RUN) {
      float last = timer;
      timer += delta;

      xSpring.target += delta * 20;

      float limit = GameScreen.i.getPlayer().getBody().getPosition().x - 25f;
      if (xSpring.target < limit) {
        xSpring.target = limit + (float) Math.sin(timer * 2) * 2;
      }

      color =
          Palette.HIGHLIGHT
              .cpy()
              .lerp(Palette.HIGHLIGHT2, (float) (0.5f + Math.sin(timer * 6) * 0.5f));
      if (MathUtils.floor(last) != MathUtils.floor(timer)) size.getVelocity().x = 100;
      if (MathUtils.floor(last + 0.5f) != MathUtils.floor(timer + 0.5f))
        size.getVelocity().x = -100;

      float lastSub = subtimer;
      subtimer += delta;
      if (substate == SubState.ROOT) {
        if (subtimer > 2) {
          substate =
              Array.with(
                      // SubState.BULLETS,
                      SubState.SWEEP)
                  .random();
          subtimer = 0;
        }
      } else if (substate == SubState.BULLETS) {
        substate = SubState.ROOT;
      } else if (substate == SubState.SWEEP) {
        if (MathUtils.floor(lastSub * 0.8f) != MathUtils.floor(subtimer * 0.8f)) {
          // BossSweep sweep = new BossSweep(this, MathUtils.random(1, 3) * 2);
          // GameScreen.i.getEntities().add(sweep);
        }

        if (subtimer > 3) {
          subtimer = 0;
          substate = SubState.ROOT;
        }
      }
    }

    xSpring.update(delta);
    getBody().setLinearVelocity(xSpring.velocity, 0);

    if (GameScreen.i.getCollisionTracker().getCollisions().containsKey(fixture)
        && state == BossState.RUN) {
      for (Fixture fix : GameScreen.i.getCollisionTracker().getCollisions().get(fixture)) {
        Object ud = fix.getBody().getUserData();
        if (ud instanceof Player) {
          ((Player) ud).damage(damageOnTouch, getBody().getPosition());
        }
      }
    }
  }
Example #7
0
  @Override
  public void init(GameContainer container) throws SlickException {
    try {
      worldMusic = sound.addSoundToMap("World", "res/Sound/World.wav", sid.getMusicID(0));
      playerAttackSound = sound.addSoundToMap("Attack", "res/Sound/Shoot.wav", sid.getAttackID(0));
      bossAttackSound =
          sound.addSoundToMap("Attack", "res/Sound/Boss_attack.wav", sid.getAttackID(1));
      collisionSound =
          sound.addSoundToMap("Collision", "res/Sound/Collide.wav", sid.getEffectID(0));

    } catch (MalformedURLException e1) {
      e1.printStackTrace();
    }
    sound.loopSound(worldMusic);

    Image[] movementUp = {
      new Image("res/Character1_back.png"),
      new Image("res/Character1_back.png"),
      new Image("res/Character1_back.png"),
      new Image("res/Character1_back.png"),
      new Image("res/Character1_back.png"),
      new Image("res/Character1_back.png"),
      new Image("res/Character1_back.png"),
      new Image("res/Character1_back.png")
    };

    Image[] movementDown = {
      new Image("res/Character1_frontanimation-frame-1.png"),
      new Image("res/Character1_frontanimation-frame-2.png"),
      new Image("res/Character1_frontanimation-frame-3.png"),
      new Image("res/Character1_frontanimation-frame-4.png"),
      new Image("res/Character1_frontanimation-frame-5.png"),
      new Image("res/Character1_frontanimation-frame-6.png"),
      new Image("res/Character1_frontanimation-frame-7.png"),
      new Image("res/Character1_frontanimation-frame-8.png")
    };

    Image[] movementRight = {
      new Image("res/Character1_right.png"),
      new Image("res/Character1_right.png"),
      new Image("res/Character1_right.png"),
      new Image("res/Character1_right.png"),
      new Image("res/Character1_right.png"),
      new Image("res/Character1_right.png"),
      new Image("res/Character1_right.png"),
      new Image("res/Character1_right.png")
    };

    Image[] movementLeft = {
      new Image("res/Character1_left.png"),
      new Image("res/Character1_left.png"),
      new Image("res/Character1_left.png"),
      new Image("res/Character1_left.png"),
      new Image("res/Character1_left.png"),
      new Image("res/Character1_left.png"),
      new Image("res/Character1_left.png"),
      new Image("res/Character1_left.png")
    };

    int duration[] = {100, 100, 100, 100, 100, 100, 100, 100};
    up = new Animation(movementUp, duration, false);
    down = new Animation(movementDown, duration, false);
    left = new Animation(movementLeft, duration, false);
    right = new Animation(movementRight, duration, false);
    Animation[] animList = {up, down, left, right};
    Animation[] bossAnim = {up.copy(), down.copy(), left.copy(), right.copy()};
    player = new Player(new Vector2d(10 * SIZE, 10 * SIZE), animList);
    player.setAttackSound(playerAttackSound);
    entity = new Boss(new Vector2d(25 * SIZE, 25 * SIZE), bossAnim, player);
    entity.setProjectileList(projectiles);
    entity.setAttackSound(bossAttackSound);
    player.setCurrentBoss(entity);

    tileMap = new TiledMap("res/tilemap.tmx");
    blocked = new boolean[tileMap.getWidth()][tileMap.getHeight()];
    try {
      this.initAbilities();
    } catch (IOException e) {
      e.printStackTrace();
    }
    for (int x = 0; x < tileMap.getWidth(); x++) {
      for (int y = 0; y < tileMap.getHeight(); y++) {
        int ID = tileMap.getTileId(x, y, 0);
        String value = tileMap.getTileProperty(ID, "blocked", "false");
        if ("true".equals(value)) {
          blocked[x][y] = true;
        }
      }
    }
  }
Example #8
0
  public static boolean bossBattle(Character player, Boss boss) throws InterruptedException {
    Texts.printIntro(boss);
    while (player.health > 0 && boss.health > 0) {
      int choice = MenuPrints.bossBattleMenu(player, boss);
      boolean won = true;
      Random random = new Random();
      if (choice == 1) // ATTACK
      {
        System.out.println("* Swoosh.");
        int hitchance;
        int hit = 0;
        if (player.stats[2] - boss.stats[2] < 0) hitchance = 2;
        else hitchance = 2 + player.stats[2] - boss.stats[2];
        int hityesorno = random.nextInt(hitchance);
        try {
          hit =
              ((player.playerEqDamage + player.stats[0])
                      * (2 + (random.nextInt(5) / 2))
                      / hityesorno)
                  * hityesorno;
        } catch (ArithmeticException e) {
          hit = 0;
        } // MISS WANT DIVIDED BY ZERO :D
        boss.health = boss.health - hit;
        if (hit == 0) System.out.println(MenuPrints.bossBattleMiss(boss));
        else System.out.println(MenuPrints.bossBattleHit(boss));
        System.out.println("* You hit the " + boss.race + " for " + hit + " points of damage! :D");

        if (boss.stats[2] - player.stats[2] < 0) hitchance = 2;
        else hitchance = 2 + boss.stats[2] - player.stats[2];
        hityesorno = random.nextInt(hitchance);
        try {
          hit =
              ((((boss.stats[0] * (1 + random.nextInt(5)))
                          - (player.playerEqDefense * (1 + random.nextInt(3))))
                      / hityesorno)
                  * hityesorno);
        } catch (ArithmeticException e) {
          hit = 0;
        } // MISS WANT DIVIDED BY ZERO :D
        if (hit < 0) hit = 0;
        player.health = player.health - hit;
        if (hit == 0) System.out.println("* The " + boss.race + " has missed you!");
        else
          System.out.println(
              "* The " + boss.race + " has hit you for " + hit + " points of damage!");
        Thread.sleep(1500);
        for (int i = 0; i < 100; ++i) System.out.println();
      }
      if (choice == 2) // OMNOMNONMONMNONMONNOMNOMNONM
      {
        for (int i = 0; i < 100; ++i) System.out.println();
        MenuPrints.printInventory(player.inventory);
        MenuPrints.inventoryConsumeYN(player);
      }
      if (choice == 3) {
        for (int i = 0; i < 100; ++i) System.out.println();
        Library.writeSpellInventory(player.spellbook, false);
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        for (int i = 0; i < 100; ++i) System.out.println();
        input = input.trim();
        int inputInt = 0;
        try {
          inputInt = Integer.parseInt(input);
        } catch (NumberFormatException e) {
        }
        if (inputInt > 0 && inputInt <= player.spellbook.size()) {
          Spell castedSpell = player.spellbook.get(inputInt - 1);
          if (player.mana >= castedSpell.manacost) {
            player.mana = player.mana - castedSpell.manacost;
            int randommodfier = 1 + (random.nextInt(10) / 10);
            int hit =
                (castedSpell.power * (boss.weakness[castedSpell.element]) / 100) * randommodfier;
            boss.health = boss.health - hit;
            System.out.println("* " + castedSpell.incantation + "...");
            System.out.println(
                "* You hit the " + boss.race + " for " + hit + " points of damage! :D");
            hit =
                (boss.stats[0] * random.nextInt(5)) - (player.playerEqDefense * random.nextInt(3));
            if (hit < 0) {
              hit = 0;
            }
            player.health = player.health - hit;
            if (hit == 0) {
              System.out.println("* The " + boss.race + " has missed you! :D");
            } else {
              System.out.println("* You have been hit for " + hit + " points of damage! D:");
            }
            Thread.sleep(1000);
          } else {
            System.out.println("You need more mana!");
          }
          Thread.sleep(1000);
          for (int i = 0; i < 100; ++i) System.out.println();
        } else {
          for (int i = 0; i < 100; ++i) System.out.println();
          System.out.println("* Nevermind then.");
          Thread.sleep(1000);
          for (int i = 0; i < 100; ++i) System.out.println();
        }
      }
    }
    if (player.health <= 0) {
      won = false;
      for (int i = 0; i < 100; ++i) System.out.println();
      System.out.println("You have been defeated!");
      // DEFEAT MESSAGE
    } else if (boss.health <= 0) {
      for (int i = 0; i < 100; ++i) System.out.println();
      System.out.println("* You have slain " + boss.bossFullName + ", the " + boss.race + " !");
      System.out.println(
          "* You are a true hero, worthy to be written down in the books of history!");
      Thread.sleep(5000);
      for (int i = 0; i < 100; ++i) System.out.println();
      won = true;
      // int phatlewt = 200;
      // System.out.println("* You loot " + phatlewt + " coins from the " + monsterString + ".");
      //          GAME ENDS
      // player.money += phatlewt;
      // REHEAL CHEAT ;D
      // player.experience = player.experience + monster.stats[4]*20;
      // System.out.println("* You gain " + monster.stats[4]*20 + " experience!");
      // while(player.experience>= (100+((player.level*player.level)*100)))
      // {
      //  player.experience = player.experience - (100+((player.level*player.level)*100));
      //  player.levelUp();
      //  System.out.println("* You have gained a level!!! :)");
      //  System.out.println("* Your level now is : " + player.level);// VICCTORY MESSAGE + LOOT
      // }
    }
    return won;
  }
Example #9
0
  @Override
  public void update(float delta) {
    super.update(delta);

    if (state == BossState.WAITING) {
      getBody().setType(BodyDef.BodyType.KinematicBody);
      getBody().setLinearVelocity(0, 0);
      if (GameScreen.i.getBossState() == GameScreen.BossState.FIGHTING) {
        state = BossState.DROPPING;
        upCount = 2;
      }
    } else if (state == BossState.DROPPING) {
      timer += delta;

      centerSpring.getPosition().set(getBody().getPosition());
      centerSpring.getTarget().set(GameScreen.i.getPlayer().getBody().getPosition().x, 20);
      centerSpring.update(delta);
      getBody().setLinearVelocity(centerSpring.getVelocity());

      if (timer > 1) {
        getBody().setType(BodyDef.BodyType.DynamicBody);
        getBody().setLinearVelocity(0, -300);
        size.getVelocity().set(-50, 50);
        state = BossState.FALL;
        fixture.setSensor(false);
      }
    } else if (state == BossState.CENTER) {
      float last = timer;
      timer += delta;
      getBody().setType(BodyDef.BodyType.DynamicBody);

      if (timer > 1) {
        if (last <= 1) {
          Assets.downy.play();
        }
        centerSpring.getPosition().set(getBody().getPosition());
        centerSpring.update(delta);
        getBody().setLinearVelocity(centerSpring.getVelocity());
      }

      getBody().setGravityScale(0);
      if (getBody().getPosition().dst(centerSpring.getTarget()) < 1f) {
        color = Palette.FOREGROUND;
        size.getVelocity().set(-50, -50);
        Assets.shut.play();
        getBody().setType(BodyDef.BodyType.KinematicBody);
        getBody().setLinearVelocity(0, 0);
        getBody().setAngularVelocity(-5);
        state = BossState.FREEZE;
        timer = 0;
      }
    } else if (state == BossState.FREEZE) {
      float last = timer;
      timer += delta;
      if (timer > 1 && last <= 1) {
        size.getVelocity().set(40, 40);

        spawnChasers();
      }

      if (timer > 1) {
        boolean allDead = true;
        for (LivingEntity e : offspring) {
          if (e.health > 0) allDead = false;
        }

        if (allDead) {
          offspring.clear();
          color = Palette.HIGHLIGHT;
          getBody().setType(BodyDef.BodyType.DynamicBody);
          getBody().setGravityScale(0);
          state = BossState.CHASE;
          Assets.ding.play();
          timer = 0;
        }
      }
    } else if (state == BossState.CHASE) {
      timer += delta;

      centerSpring.getTarget().set(GameScreen.i.getPlayer().getBody().getPosition());
      centerSpring.getPosition().set(getBody().getPosition());
      centerSpring.update(delta);
      getBody().setLinearVelocity(centerSpring.getVelocity());

      if (timer > 3) {
        state = BossState.BACKFORTH;
        timer = 0;
      }
    } else if (state == BossState.BACKFORTH) {
      float last = timer;
      timer += delta;

      if (MathUtils.floor(last % 2) != MathUtils.floor(timer % 2)) {
        float direction = MathUtils.floor(last % 2) == 0 ? 1 : -1;
        centerSpring
            .getTarget()
            .set(
                levelCenter + (10 * direction), GameScreen.i.getPlayer().getBody().getPosition().y);
        Assets.boop.play();
      }

      centerSpring.getPosition().set(getBody().getPosition());
      centerSpring.update(delta);
      getBody().setLinearVelocity(centerSpring.getVelocity());
      centerSpring.setFrequency(4);

      if (timer > 5) {
        centerSpring.setFrequency(1);

        upCount = 0;
        state = BossState.UP;
        getBody().setGravityScale(0);
        fixture.setSensor(true);
        getBody().setLinearVelocity(0, 100);
        timer = 0;
      }
    } else if (state == BossState.UP) {
      if (getBody().getPosition().y > 15) {
        getBody().setGravityScale(0);
        state = BossState.DROPPING;
      }
    } else if (state == BossState.LANDWAIT) {
      timer += delta;

      if (timer > 1) {
        if (upCount == 2) {
          state = BossState.CENTER;
          timer = 0;
          centerSpring.getPosition().set(getBody().getPosition());
          centerSpring.getTarget().set(levelCenter, 14);
        } else {
          size.getVelocity().set(-50, 50);
          upCount++;
          state = BossState.UP;
          timer = 0;
          getBody().setLinearVelocity(0, 100);
          fixture.setSensor(true);
          Assets.uppy.play();
        }
      }
    }
  }
Example #10
0
 @Override
 public void render() {
   super.render();
 }
Example #11
0
 @Override
 public void damage(float amount, Vector2 source) {
   if (state != BossState.FREEZE) super.damage(amount, source);
 }
Example #12
0
 @Override
 public void destroy() {
   super.destroy();
 }