Balancing, mob self.-walk

This commit is contained in:
Ondřej Hruška
2014-05-13 02:36:17 +02:00
parent 29b831259d
commit a4ccee71ed
24 changed files with 80 additions and 64 deletions
+5
View File
@@ -22,6 +22,8 @@ $(OUT): $(IN) $(STUB)
unzip $(STUB) -d $(TMP_DIR)
find $(TMP_DIR) -name "*.xcf" -type f -delete
# export
(cd $(TMP_DIR); zip -r9 ./pack.zip .)
mv -f $(TMP_DIR)/pack.zip $(OUT)
@@ -34,5 +36,8 @@ $(OUT): $(IN) $(STUB)
run: $(OUT)
java -jar $(OUT)
clean:
rm -rf $(OUT)
deploy: $(OUT)
cp -f $(OUT) /home/ondra/Dokumenty/Dropbox/Public/Rogue
BIN
View File
Binary file not shown.
+6 -3
View File
@@ -382,7 +382,7 @@ public class Calc {
}
}
private static Random rand = new Random();
public static final Random rand = new Random();
public static double sphereSurface(double radius)
@@ -670,11 +670,14 @@ public class Calc {
public static int randInt(Random rand, int low, int high)
{
int range = high - low + 1;
if (range < 1) range = 1;
int range = Math.abs(high - low) + 1;
return low + rand.nextInt(range);
}
public static int randInt(int low, int high)
{
return randInt(rand, low, high);
}
/**
* Get ordinal version of numbers (1 = 1st, 5 = 5th etc.)
+2 -4
View File
@@ -19,8 +19,6 @@ public class Range {
private double min = 0;
private double max = 1;
private static Random rand = new Random();
/**
* Implicit range constructor 0-1
@@ -76,7 +74,7 @@ public class Range {
*/
public int randInt()
{
return (int) (Math.round(min) + rand.nextInt((int) (Math.round(max) - Math.round(min)) + 1));
return Calc.randInt(Calc.rand, (int)Math.round(min), (int)Math.round(min));
}
@@ -87,7 +85,7 @@ public class Range {
*/
public double randDouble()
{
return min + rand.nextDouble() * (max - min);
return min + Calc.rand.nextDouble() * (max - min);
}
@@ -1,5 +1,7 @@
package mightypork.gamecore.util.math.algo;
import mightypork.gamecore.util.math.Calc;
public class Sides {
@@ -67,4 +69,10 @@ public class Sides {
{
return (byte) (1 << (7 - i));
}
public static Step randomCardinal()
{
return CARDINAL_SIDES[Calc.randInt(0, 3)];
}
}
@@ -9,6 +9,7 @@ import mightypork.gamecore.gui.ActionGroup;
import mightypork.gamecore.gui.screens.LayeredScreen;
import mightypork.gamecore.input.KeyStroke;
import mightypork.gamecore.input.Keys;
import mightypork.gamecore.util.math.Calc;
import mightypork.rogue.Config;
import mightypork.rogue.world.PlayerFacade;
import mightypork.rogue.world.WorldProvider;
@@ -28,7 +29,6 @@ public class ScreenGame extends LayeredScreen {
WORLD, INV;
}
private final Random rand = new Random();
private InvLayer invLayer;
private HudLayer hudLayer;
@@ -44,7 +44,7 @@ public class ScreenGame extends LayeredScreen {
public void execute()
{
final PlayerFacade pl = WorldProvider.get().getPlayer();
if (pl.isDead()) return;
if (pl.isDead() || pl.getWorld().isPaused()) return;
pl.tryToEatSomeFood();
}
};
@@ -147,7 +147,7 @@ public class ScreenGame extends LayeredScreen {
@Override
public void run()
{
WorldProvider.get().createWorld(rand.nextLong());
WorldProvider.get().createWorld(Calc.rand.nextLong());
}
});
@@ -34,8 +34,6 @@ public abstract class Entity implements IonObjBundled, Updateable, DelegatingCli
private Level level;
private final EntityModel model;
protected final Random rand = new Random();
/** Entity ID */
private int entityId = -1;
@@ -18,7 +18,6 @@ import mightypork.gamecore.util.ion.IonObjBundled;
public abstract class EntityModule implements IonObjBundled, Updateable {
protected final Entity entity;
protected static final Random rand = new Random();
public EntityModule(Entity entity)
@@ -1,6 +1,7 @@
package mightypork.rogue.world.entity.impl;
import mightypork.gamecore.util.math.Calc;
import mightypork.rogue.world.entity.AiTimer;
import mightypork.rogue.world.entity.Entity;
@@ -21,21 +22,21 @@ public class BossRatAi extends GrayRatAi {
{
super(entity);
setAttackTime(0.6);
setAttackTime(0.7);
}
@Override
protected int getAttackStrength()
{
return 5 + rand.nextInt(4);
return Calc.randInt(5, 11);
}
@Override
protected int getPreyAbandonDistance()
{
return 15 + rand.nextInt(4);
return Calc.randInt(15, 18);
}
@@ -1,6 +1,7 @@
package mightypork.rogue.world.entity.impl;
import mightypork.gamecore.util.math.Calc;
import mightypork.rogue.world.entity.Entity;
@@ -18,20 +19,20 @@ public class BrownRatAi extends GrayRatAi {
@Override
protected double getScanRadius()
{
return isSleeping() ? 3 + rand.nextInt(3) : 5 + rand.nextInt(3);
return isSleeping() ? Calc.randInt(3, 5) : Calc.randInt(5, 8);
}
@Override
protected int getAttackStrength()
{
return 2 + rand.nextInt(3);
return Calc.randInt(2, 5);
}
@Override
protected int getPreyAbandonDistance()
{
return 11 + rand.nextInt(4);
return Calc.randInt(11, 14);
}
}
@@ -32,7 +32,7 @@ public class EntityBossRat extends Entity {
health.setHealthMax(80);
health.setHealth(80);
health.setHitCooldownTime(0.35);
health.setHitCooldownTime(0.33);
}
@@ -28,11 +28,11 @@ public class EntityBrownRat extends Entity {
addModule("ai", ai);
pos.addMoveListener(ai);
pos.setStepTime(0.39); // faster than gray rat
pos.setStepTime(0.38); // faster than gray rat
setDespawnDelay(1);
health.setHealthMax(14);
health.setHealth(Calc.randInt(rand, 8, 14)); // tougher to kill
health.setHealthMax(20);
health.setHealth(Calc.randInt(12, 20)); // tougher to kill
health.setHitCooldownTime(0.35); // a bit longer than gray rat
}
@@ -67,17 +67,12 @@ public class EntityBrownRat extends Entity {
{
// drop rat stuff
if (rand.nextInt(7) == 0) {
getLevel().dropNear(getCoord(), Items.BONE.createItemDamaged(10));
return;
}
if (rand.nextInt(3) == 0) {
if (Calc.rand.nextInt(2) == 0) {
getLevel().dropNear(getCoord(), Items.MEAT.createItem());
return;
}
if (rand.nextInt(6) == 0) {
if (Calc.rand.nextInt(4) == 0) {
getLevel().dropNear(getCoord(), Items.CHEESE.createItem());
return;
}
@@ -32,7 +32,7 @@ public class EntityGrayRat extends Entity {
setDespawnDelay(1);
health.setHealthMax(6);
health.setHealth(Calc.randInt(rand, 4, 6));
health.setHealth(Calc.randInt(4, 6));
health.setHitCooldownTime(0.3);
}
@@ -67,18 +67,18 @@ public class EntityGrayRat extends Entity {
{
// drop rat stuff
if (rand.nextInt(4) == 0) {
if (Calc.rand.nextInt(6) == 0) {
getLevel().dropNear(getCoord(), Items.BONE.createItemDamaged(40));
return;
}
if (rand.nextInt(6) == 0) {
getLevel().dropNear(getCoord(), Items.MEAT.createItem());
if (Calc.rand.nextInt(3) == 0) {
getLevel().dropNear(getCoord(), Items.CHEESE.createItem());
return;
}
if (rand.nextInt(3) == 0) {
getLevel().dropNear(getCoord(), Items.CHEESE.createItem());
if (Calc.rand.nextInt(3) == 0) {
getLevel().dropNear(getCoord(), Items.MEAT.createItem());
return;
}
}
@@ -1,6 +1,7 @@
package mightypork.rogue.world.entity.impl;
import mightypork.gamecore.util.math.Calc;
import mightypork.rogue.world.entity.Entity;
@@ -19,7 +20,7 @@ public class GrayRatAi extends MonsterAi {
@Override
protected double getScanRadius()
{
return isSleeping() ? 2 + rand.nextInt(3) : 4 + rand.nextInt(3);
return isSleeping() ? Calc.randInt(2, 4) : Calc.randInt(4, 6);
}
@@ -33,14 +34,14 @@ public class GrayRatAi extends MonsterAi {
@Override
protected int getAttackStrength()
{
return 1 + (rand.nextInt(5) == 0 ? 1 : 0);
return 1 + (Calc.rand.nextInt(5) == 0 ? 1 : 0);
}
@Override
protected int getPreyAbandonDistance()
{
return 8 + rand.nextInt(4);
return Calc.randInt(8, 11);
}
@@ -6,7 +6,9 @@ import java.util.List;
import mightypork.gamecore.util.annot.DefaultImpl;
import mightypork.gamecore.util.ion.IonBundle;
import mightypork.gamecore.util.math.Calc;
import mightypork.gamecore.util.math.algo.Coord;
import mightypork.gamecore.util.math.algo.Sides;
import mightypork.gamecore.util.math.algo.Step;
import mightypork.gamecore.util.math.algo.pathfinding.PathFinder;
import mightypork.gamecore.util.math.algo.pathfinding.PathFinderProxy;
@@ -205,6 +207,10 @@ public class MonsterAi extends EntityModule implements EntityMoveListener {
if (noDoorPath == null) return; // cant reach, give up
startChasing(prey);
} else {
if(Calc.rand.nextBoolean()) {
entity.pos.addStep(Sides.randomCardinal());
}
}
}
@@ -317,14 +323,14 @@ public class MonsterAi extends EntityModule implements EntityMoveListener {
@DefaultImpl
protected double getScanRadius()
{
return sleeping ? 1 + rand.nextInt(3) : 4 + rand.nextInt(4); // For override
return sleeping ? Calc.randInt(1, 3) : Calc.randInt(4, 8); // For override
}
@DefaultImpl
protected int getPreyAbandonDistance()
{
return 5 + rand.nextInt(4); // For override
return Calc.randInt(5, 8); // For override
}
@@ -43,7 +43,7 @@ public class LevelGenerator {
if (rand.nextInt(6) > 0) map.addRoom(Rooms.DEAD_END, false);
}
for (int i = 0; i < Calc.randInt(rand, 1, level / 3); i++) {
for (int i = 0; i < Calc.randInt(rand, 1, (int)Math.ceil(level / 2D)); i++) {
map.addRoom(Rooms.TREASURE, false);
}
@@ -86,13 +86,13 @@ public class LevelGenerator {
}
if (level == 4) {
map.putItemInMap(Items.HAMMER.createItemDamaged(60), 100);
map.putItemInMap(Items.HAMMER.createItemDamaged(40), 100);
}
// entities - random rats
for (int i = 0; i < Calc.randInt(rand, (int) (3 + level * 1.5), 3 + level * 3); i++) {
for (int i = 0; i < Calc.randInt(rand, 2 + level * 2, 5 + level * 3); i++) {
Entity e;
if (level > 2 && rand.nextInt(level - 2 + 1) != 0) {
@@ -101,7 +101,15 @@ public class LevelGenerator {
e = Entities.RAT_GRAY.createEntity();
}
map.putEntityInMap(e, 20);
map.putEntityInMap(e, 30);
if(rand.nextInt(6+level/2)==0) {
map.putItemInMap(Items.CHEESE.createItem(), 10);
}
if(rand.nextInt(6)==0) {
map.putItemInMap(Items.MEAT.createItem(), 10);
}
}
@@ -639,7 +639,7 @@ public class ScratchMap {
{
if (!isIn(pos)) return false;
if (pos.dist(enterPoint) < 5) return false; // protected distance.
if (pos.dist(enterPoint) < 4) return false; // protected distance.
final Tile t = getTile(pos);
if (!t.isWalkable()) return false;
@@ -8,7 +8,7 @@ import mightypork.rogue.world.World;
public class WorldCreator {
public static final Random rand = new Random();
public static Random rand = new Random();
public static World createWorld(long seed)
@@ -27,7 +27,7 @@ public class TreasureRoom extends SecretRoom {
map.putItemInArea(Items.ROCK.createItemDamaged(30), min, max, 50);
}
for (int i = 0; i < Calc.randInt(rand, 0, 2); i++) {
for (int i = 0; i < Calc.randInt(rand, 0, 3); i++) {
map.putItemInArea(Items.MEAT.createItem(), min, max, 50);
}
@@ -21,8 +21,6 @@ public abstract class Item implements IonObjBlob {
private int amount = 1;
private int uses = 1;
protected static final Random rand = new Random();
public Item(ItemModel model)
{
@@ -20,8 +20,6 @@ public final class ItemModel {
public final int id;
public final Class<? extends Item> itemClass;
public static final Random rand = new Random();
public ItemModel(int id, Class<? extends Item> item)
{
@@ -68,7 +66,7 @@ public final class ItemModel {
public Item createItemDamaged(int minimalHealthPercent)
{
final Item item = createItem();
item.setRemainingUses(Calc.randInt(rand, (int) Math.ceil(item.getMaxUses() * (minimalHealthPercent / 100D)), item.getMaxUses()));
item.setRemainingUses(Calc.randInt((int) Math.ceil(item.getMaxUses() * (minimalHealthPercent / 100D)), item.getMaxUses()));
return item;
}
}
+4 -5
View File
@@ -14,6 +14,7 @@ import mightypork.gamecore.util.ion.IonBundle;
import mightypork.gamecore.util.ion.IonInput;
import mightypork.gamecore.util.ion.IonObjBinary;
import mightypork.gamecore.util.ion.IonOutput;
import mightypork.gamecore.util.math.Calc;
import mightypork.gamecore.util.math.algo.Coord;
import mightypork.gamecore.util.math.algo.Sides;
import mightypork.gamecore.util.math.algo.Step;
@@ -98,8 +99,6 @@ public class Level implements BusAccess, Updateable, DelegatingClient, Toggleabl
}
};
private static final Random rand = new Random();
public static final int ION_MARK = 53;
private static final Comparator<Entity> ENTITY_RENDER_CMP = new EntityRenderComparator();
@@ -361,13 +360,13 @@ public class Level implements BusAccess, Updateable, DelegatingClient, Toggleabl
// closer
for (int i = 0; i < 20; i++) {
final Coord c = pos.add(-1 + rand.nextInt(3), -1 + rand.nextInt(3));
final Coord c = pos.add(Calc.randInt(-1, 1), Calc.randInt(-1, 1));
if (addEntity(entity, c)) return true;
}
// further
for (int i = 0; i < 20; i++) {
final Coord c = pos.add(-2 + rand.nextInt(5), -2 + rand.nextInt(5));
final Coord c = pos.add(Calc.randInt(-2, 2),Calc.randInt(-2, 2));
if (addEntity(entity, c)) return true;
}
@@ -699,7 +698,7 @@ public class Level implements BusAccess, Updateable, DelegatingClient, Toggleabl
if (getTile(coord).dropItem(itm)) return true;
for (int i = 0; i < 6; i++) {
final Coord c = coord.add(-1 + rand.nextInt(3), -1 + rand.nextInt(3));
final Coord c = coord.add(Calc.randInt(-1, 1), Calc.randInt(-1, 1));
if (getTile(c).dropItem(itm)) return true;
}
@@ -29,9 +29,6 @@ public abstract class Tile implements BusAccess, IonObjBlob {
// tmp extras
public final TileGenData genData = new TileGenData();
/** RNG for random stuff in tiles */
protected static final Random rand = new Random();
public final TileModel model;
// temporary flag for map.
@@ -6,6 +6,7 @@ import java.io.IOException;
import mightypork.gamecore.resources.textures.TxSheet;
import mightypork.gamecore.util.ion.IonInput;
import mightypork.gamecore.util.ion.IonOutput;
import mightypork.gamecore.util.math.Calc;
import mightypork.gamecore.util.math.color.Color;
import mightypork.gamecore.util.math.color.pal.RGB;
import mightypork.rogue.world.tile.TileModel;
@@ -14,7 +15,7 @@ import mightypork.rogue.world.tile.TileType;
public abstract class TileBaseSecretDoor extends TileBaseDoor {
private int clicks = 2 + rand.nextInt(2);
private int clicks = Calc.randInt(2, 3);
public TileBaseSecretDoor(TileModel model, TxSheet secret, TxSheet closed, TxSheet open)