private void hit( Subject targetSubject, Attack attack, double damageModifier, boolean criticalHit) { double typeModifier = attack.getAttackModifier(targetSubject); double STAB = 1; if (attack.getType().is(type.getType())) { STAB = 1.5; } double randNumber = dice.nextInt(151) / 1000 + 0.85; boolean superEffective = false; boolean notEffective = false; if (typeModifier == 2.0) { superEffective = true; } else if (typeModifier == 0.5) { notEffective = true; } int offence = 1; int defence = 1; offence = (attack.isPracticalAttack()) ? getPracticalOffence() : getTheoreticalOffence(); defence = (attack.isPracticalDefence()) ? targetSubject.getPracticalDefence() : targetSubject.getTheoreticalDefence(); int damage = (int) Math.floor( ((2 * level + 10) * attack.getDamage() * offence * damageAndHpMultiplier / 250 / defence + 2) * damageModifier * randNumber * STAB * typeModifier); String combatText = String.format("%s bruker %s! (%d skade)", nickname, attack.getName(), damage); if (criticalHit) { combatText += " (kritisk treff!)"; } if (superEffective) { combatText += " (kjempeeffektivt!)"; } else if (notEffective) { combatText += " (ikke så veldig effektivt!)"; } DisplayText.add(nickname, combatText); targetSubject.takeDamage(damage); }
public void drawInfo(Graphics g, Image background) { g.drawImage(background, 48, 48, null); drawBig(g, new Vector(118, 140)); String nameString = (getNickName().equals(getName())) ? getName() : String.format("%s (%s)", getNickName(), getName()); g.drawString(nameString, 206, 136); g.drawString("Type: " + getType(), 206, 166); g.drawString("Level: " + getLevel(), 206, 186); g.drawString(String.format("Helse: %d / %d", getHealth(), getTotalHealth()), 206, 206); g.drawString( String.format("Studiepoeng: %d / %d", getExperience(), getNextLevelExperience()), 150, 255); g.drawString("Fart: " + getSpeed(), 150, 275); g.drawString("Treffsikkerhet: " + getAccuracy(), 150, 295); g.drawString("Unnvikelsesevne: " + getEvasion(), 150, 315); g.drawString("Praktisk styrke: " + getPracticalOffence(), 150, 335); g.drawString("Teoretisk styrke: " + getTheoreticalOffence(), 150, 355); g.drawString("Praktisk forsvar: " + getPracticalDefence(), 150, 375); g.drawString("Teoretisk forsvar: " + getTheoreticalDefence(), 150, 395); for (int i = 0; i < attacks.size(); i++) { int baseX = 0; int baseY = 0; switch (i) { case 0: baseX = 337; baseY = 150; break; case 1: baseX = 337; baseY = 288; break; case 2: baseX = 432; baseY = 169; break; case 3: baseX = 432; baseY = 302; break; } Attack attack = attacks.get(i); g.drawLine(baseX - 3, baseY + 2, baseX + 83, baseY + 2); g.drawString(attack.getName(), baseX + 2, baseY - 3); g.drawString("Skade: " + attack.getDamage(), baseX, baseY + 20); g.drawString((attack.isPracticalAttack()) ? "Praktisk" : "Teoretisk", baseX, baseY + 40); g.drawString("Treffevne: " + attack.getAccuracyBonus(), baseX, baseY + 60); g.drawString("" + attack.getType(), baseX, baseY + 80); } }