Balancing, mob self.-walk

v5stable
Ondřej Hruška 10 years ago
parent 29b831259d
commit a4ccee71ed
  1. 7
      build/Makefile
  2. BIN
      build/stub.jar
  3. 11
      src/mightypork/gamecore/util/math/Calc.java
  4. 6
      src/mightypork/gamecore/util/math/Range.java
  5. 8
      src/mightypork/gamecore/util/math/algo/Sides.java
  6. 6
      src/mightypork/rogue/screens/game/ScreenGame.java
  7. 2
      src/mightypork/rogue/world/entity/Entity.java
  8. 1
      src/mightypork/rogue/world/entity/EntityModule.java
  9. 7
      src/mightypork/rogue/world/entity/impl/BossRatAi.java
  10. 7
      src/mightypork/rogue/world/entity/impl/BrownRatAi.java
  11. 2
      src/mightypork/rogue/world/entity/impl/EntityBossRat.java
  12. 15
      src/mightypork/rogue/world/entity/impl/EntityBrownRat.java
  13. 12
      src/mightypork/rogue/world/entity/impl/EntityGrayRat.java
  14. 7
      src/mightypork/rogue/world/entity/impl/GrayRatAi.java
  15. 10
      src/mightypork/rogue/world/entity/impl/MonsterAi.java
  16. 16
      src/mightypork/rogue/world/gen/LevelGenerator.java
  17. 2
      src/mightypork/rogue/world/gen/ScratchMap.java
  18. 2
      src/mightypork/rogue/world/gen/WorldCreator.java
  19. 2
      src/mightypork/rogue/world/gen/rooms/TreasureRoom.java
  20. 2
      src/mightypork/rogue/world/item/Item.java
  21. 4
      src/mightypork/rogue/world/item/ItemModel.java
  22. 9
      src/mightypork/rogue/world/level/Level.java
  23. 3
      src/mightypork/rogue/world/tile/Tile.java
  24. 3
      src/mightypork/rogue/world/tile/impl/TileBaseSecretDoor.java

@ -22,7 +22,9 @@ $(OUT): $(IN) $(STUB)
unzip $(STUB) -d $(TMP_DIR)
# export
find $(TMP_DIR) -name "*.xcf" -type f -delete
# export
(cd $(TMP_DIR); zip -r9 ./pack.zip .)
mv -f $(TMP_DIR)/pack.zip $(OUT)
chmod +x $(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

Binary file not shown.

@ -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.)

@ -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;
}
}

@ -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)

Loading…
Cancel
Save