Skip to content

Commit

Permalink
1.6 (training hall fix)
Browse files Browse the repository at this point in the history
  • Loading branch information
tukkek committed Jul 15, 2016
1 parent 064d055 commit 858ee7b
Show file tree
Hide file tree
Showing 11 changed files with 154 additions and 108 deletions.
4 changes: 4 additions & 0 deletions javelin/Javelin.java
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,10 @@ public static String getDayPeriod() {
* @return Hour of the day, from 0 to 23.
*/
public static long getHour() {
if (Squad.active == null) {
/* all training */
return 0;
}
return Squad.active.hourselapsed % 24;
}

Expand Down
37 changes: 19 additions & 18 deletions javelin/controller/challenge/factor/quality/BreathFactor.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package javelin.controller.challenge.factor.quality;

import javelin.controller.challenge.factor.CrFactor;
import javelin.controller.upgrade.BreathWeaponUpgrade;
import javelin.controller.upgrade.BreathUpgrade;
import javelin.controller.upgrade.UpgradeHandler;
import javelin.model.unit.Monster;
import javelin.model.unit.abilities.BreathWeapon;
Expand Down Expand Up @@ -44,27 +44,28 @@ public float calculate(final Monster monster) {

@Override
public void listupgrades(UpgradeHandler handler) {
handler.fire.add(new BreathWeaponUpgrade(
new BreathWeapon("cone of magma", BreathArea.CONE, 10, 1, 4, 0,
SavingThrow.REFLEXES, 13, .5f, true)));
handler.water.add(new BreathWeaponUpgrade(
/* Too weak, doesnt resolve to positive CR */
// handler.fire.add(new BreathUpgrade(
// new BreathWeapon("cone of magma", BreathArea.CONE, 10, 1, 4, 0,
// SavingThrow.REFLEXES, 13, .5f, true)));
handler.water.add(new BreathUpgrade(
new BreathWeapon("caustic liquid", BreathArea.CONE, 15, 1, 8, 0,
SavingThrow.REFLEXES, 12, .5f, true)));

handler.evil.add(new BreathWeaponUpgrade(
new BreathWeapon("acid", BreathArea.LINE, 80, 12, 4, 0,
SavingThrow.REFLEXES, 23, .5f, true)));
handler.wind.add(new BreathWeaponUpgrade(
new BreathWeapon("lightning", BreathArea.LINE, 100, 12, 8, 0,
SavingThrow.REFLEXES, 25, .5f, true)));
handler.fire.add(new BreathWeaponUpgrade(
new BreathWeapon("fire", BreathArea.CONE, 50, 12, 10, 0,
SavingThrow.REFLEXES, 25, .5f, true)));
handler.earth.add(new BreathWeaponUpgrade(
handler.evil
.add(new BreathUpgrade(new BreathWeapon("acid", BreathArea.LINE,
80, 12, 4, 0, SavingThrow.REFLEXES, 23, .5f, true)));
handler.wind.add(
new BreathUpgrade(new BreathWeapon("lightning", BreathArea.LINE,
100, 12, 8, 0, SavingThrow.REFLEXES, 25, .5f, true)));
handler.fire
.add(new BreathUpgrade(new BreathWeapon("fire", BreathArea.CONE,
50, 12, 10, 0, SavingThrow.REFLEXES, 25, .5f, true)));
handler.earth.add(new BreathUpgrade(
new BreathWeapon("corrosive gas", BreathArea.CONE, 50, 12, 6, 0,
SavingThrow.REFLEXES, 25, .5f, true)));
handler.wind.add(new BreathWeaponUpgrade(
new BreathWeapon("cold", BreathArea.CONE, 40, 6, 6, 0,
SavingThrow.REFLEXES, 23, .5f, true)));
handler.wind
.add(new BreathUpgrade(new BreathWeapon("cold", BreathArea.CONE,
40, 6, 6, 0, SavingThrow.REFLEXES, 23, .5f, true)));
}
}
4 changes: 1 addition & 3 deletions javelin/controller/fight/TempleEncounter.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import javelin.model.unit.Combatant;
import javelin.model.world.location.dungeon.Dungeon;
import javelin.model.world.location.dungeon.temple.Temple;
import javelin.model.world.location.unique.MercenariesGuild;
import javelin.view.screen.BattleScreen;
import tyrant.mikera.engine.RPG;

Expand All @@ -37,8 +36,7 @@ public int getel(int teamel) {
@Override
public void enhance(List<Combatant> foes) {
while (ChallengeRatingCalculator.calculateel(foes) < temple.el) {
Combatant foe = RPG.pick(foes);
MercenariesGuild.upgradeunit(foe, temple.realm);
Combatant.upgradeweakest(foes, temple.realm);
}
}

Expand Down
34 changes: 1 addition & 33 deletions javelin/controller/fight/TrainingSession.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,14 @@

import java.util.ArrayList;

import javelin.Javelin;
import javelin.controller.Weather;
import javelin.controller.terrain.map.Arena;
import javelin.controller.upgrade.UpgradeHandler;
import javelin.controller.upgrade.feat.FeatUpgrade;
import javelin.model.BattleMap;
import javelin.model.state.BattleState;
import javelin.model.unit.Combatant;
import javelin.model.unit.Squad;
import javelin.model.world.location.Location;
import javelin.model.world.location.unique.TrainingHall;
import javelin.view.screen.BattleScreen;
import tyrant.mikera.engine.RPG;

/**
* A {@link Fight} that happens inside the {@link TrainingHall}.
Expand Down Expand Up @@ -44,33 +39,6 @@ public void onEnd(BattleScreen screen, ArrayList<Combatant> originalTeam,
if (!BattleMap.victory) {
return;
}
hall.currentlevel += 1;
boolean done = hall.currentlevel - 1 >= TrainingHall.EL.length;
String prefix;
if (done) {
prefix = "This has been the final lesson.\n\n";
} else {
prefix = "Congratulations, you've graduated this level!\n\n";
}
Combatant student = Squad.active.members
.get(Javelin.choose(prefix + "Which student will learn a feat?",
Squad.active.members, true, true));
ArrayList<FeatUpgrade> feats = UpgradeHandler.singleton.getfeats();
ArrayList<FeatUpgrade> options = new ArrayList<FeatUpgrade>();
while (options.size() < 3 && !feats.isEmpty()) {
FeatUpgrade f = RPG.pick(feats);
feats.remove(f);
if (!options.contains(f)
&& f.upgrade(student.clone().clonesource())) {
options.add(f);
}
}
options.get(Javelin.choose("Learn which feat?", options, true, true))
.upgrade(student);
if (done) {
hall.remove();
} else {
hall.generategarrison();
}
hall.level();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,10 @@ private static boolean validatecreature(Combatant invitee,
* enemies).
*/
public static int getmaxenemynumber() {
if (Squad.active == null) {
/* all training */
return 4 + 5;
}
return Squad.active.members.size() + 5;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,14 @@
*
* @author alex
*/
public class BreathWeaponUpgrade extends Upgrade {
public class BreathUpgrade extends Upgrade {
final private BreathWeapon breath;

public BreathWeaponUpgrade(BreathWeapon breathp) {
/**
* @param breathp
* Breath to apply.
*/
public BreathUpgrade(BreathWeapon breathp) {
super("Breath weapon: " + breathp.description);
breath = breathp;
}
Expand All @@ -24,6 +28,9 @@ public String info(Combatant m) {

@Override
public boolean apply(Combatant m) {
if (breath.damage[0] > m.source.hd.count()) {
return false;
}
for (BreathWeapon b : m.source.breaths) {
if (b.description.equals(breath.description)) {
return false;
Expand Down
7 changes: 4 additions & 3 deletions javelin/controller/upgrade/NaturalArmor.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,13 @@ public String info(final Combatant m) {
@Override
public boolean apply(final Combatant c) {
Monster m = c.source;
if (m.armor >= target || m.ac + 10 < target) {
int newac = m.ac + target - m.armor;
if (target < m.armor || newac > m.ac + 10
|| newac > m.dexterity + m.constitution) {
return false;
}
int delta = target - m.armor;
m.armor = target;
m.ac += delta;
m.ac = newac;
return true;
}
}
7 changes: 7 additions & 0 deletions javelin/controller/upgrade/damage/Damage.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,13 @@ public boolean apply(final Combatant m) {
if (all.isEmpty()) {
return false;
}
for (final List<Attack> sequence : all) {
for (final Attack a : sequence) {
if (a.damage[0] + 1 > m.source.hd.count()) {
return false;
}
}
}
for (final List<Attack> sequence : all) {
for (final Attack a : sequence) {
a.damage[0] += 1;
Expand Down
49 changes: 49 additions & 0 deletions javelin/model/unit/Combatant.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,17 @@
import javelin.controller.action.Defend;
import javelin.controller.action.ai.MeleeAttack;
import javelin.controller.ai.BattleAi;
import javelin.controller.challenge.ChallengeRatingCalculator;
import javelin.controller.exception.RepeatTurn;
import javelin.controller.old.Game;
import javelin.controller.old.Game.Delay;
import javelin.controller.upgrade.BreathUpgrade;
import javelin.controller.upgrade.Spell;
import javelin.controller.upgrade.Upgrade;
import javelin.controller.upgrade.UpgradeHandler;
import javelin.model.BattleMap;
import javelin.model.Cloneable;
import javelin.model.Realm;
import javelin.model.TeamContainer;
import javelin.model.condition.Charging;
import javelin.model.condition.Condition;
Expand Down Expand Up @@ -650,4 +655,48 @@ public Combatant clonesource() {
source = source.clone();
return this;
}

/**
* Updates {@link Monster#challengeRating} internally.
*
* @param r
* Applies one {@link Upgrade} from this set to the given
* {@link Combatant}.
* @return
* @return <code>true</code> if an upgrade has been successfully applied.
* @see Upgrade#upgrade(Combatant)
*/
public boolean upgrade(Realm r) {
Upgrade upgrade = RPG.pick(new ArrayList<Upgrade>(
UpgradeHandler.singleton.getfullupgrades(r)));
if (upgrade instanceof BreathUpgrade) {
/* TODO Breaths are pretty CPU intensive right now so avoid them */
return false;
}
if (!upgrade.upgrade(this)) {
return false;
}
if (upgrade.purchaseskills) {
source.purchaseskills(upgrade).upgradeautomatically();
}
ChallengeRatingCalculator.calculateCr(source);
return true;
}

/**
* @param garrison
* Upgrades the weakest member of this group.
* @see #upgrade(Realm)
*/
public static void upgradeweakest(List<Combatant> garrison, Realm r) {
Combatant weakest = null;
for (Combatant sensei : garrison) {
ChallengeRatingCalculator.calculateCr(sensei.source);
if (weakest == null
|| sensei.source.challengeRating < weakest.source.challengeRating) {
weakest = sensei;
}
}
weakest.upgrade(r);
}
}
28 changes: 1 addition & 27 deletions javelin/model/world/location/unique/MercenariesGuild.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@
import javelin.controller.challenge.ChallengeRatingCalculator;
import javelin.controller.challenge.RewardCalculator;
import javelin.controller.old.Game;
import javelin.controller.upgrade.BreathWeaponUpgrade;
import javelin.controller.upgrade.Upgrade;
import javelin.controller.upgrade.UpgradeHandler;
import javelin.model.Realm;
import javelin.model.unit.Combatant;
import javelin.model.unit.Monster;
Expand Down Expand Up @@ -68,7 +65,7 @@ void generatemercenary() {
}
int tries = 0;
while (c.source.challengeRating < cr) {
upgradeunit(c, r);
c.upgrade(r);
tries += 1;
if (tries >= 100) {
return;
Expand All @@ -78,29 +75,6 @@ void generatemercenary() {
all.add(c);
}

/**
* Updates {@link Monster#challengeRating} internally.
*
* @param r
* Applies one {@link Upgrade} from this set to the given
* {@link Combatant}.
*/
static public void upgradeunit(Combatant c, Realm r) {
Upgrade upgrade = RPG.pick(new ArrayList<Upgrade>(
UpgradeHandler.singleton.getfullupgrades(r)));
if (upgrade instanceof BreathWeaponUpgrade) {
/* TODO Breaths are pretty CPU intensive right now so avoid them */
return;
}
if (!upgrade.upgrade(c)) {
return;
}
if (upgrade.purchaseskills) {
c.source.purchaseskills(upgrade).upgradeautomatically();
}
ChallengeRatingCalculator.calculateCr(c.source);
}

@Override
public boolean interact() {
if (!super.interact()) {
Expand Down
Loading

0 comments on commit 858ee7b

Please sign in to comment.