New rule modifiers

This commit is contained in:
Anuken 2019-04-04 00:03:19 -04:00
parent 6de4af727b
commit 148f272500
28 changed files with 91 additions and 15 deletions

View File

@ -505,6 +505,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI (Red Team) Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = 웨이브
rules.enemyCheat = 무한 AI 자원
rules.pvp = PvP
rules.unitdrops = 유닛 드롭
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = 적 코어 건설 금지구역:[LIGHT_GRAY] (타일)
rules.respawntime = 리스폰 시간:[LIGHT_GRAY] (초)
rules.wavespacing = 웨이브 간격:[LIGHT_GRAY] (초)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Хвилі
rules.enemyCheat = Нескінченні ресурси для ШІ
rules.pvp = PvP
rules.unitdrops = Падіння бойових одиниць
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Радіус заборони будування для Ворожого Ядра:[LIGHT_GRAY] (плитки)
rules.respawntime = Час відродження:[LIGHT_GRAY] (sec)
rules.wavespacing = Інтервал хвиль:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -494,6 +494,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)

View File

@ -131,6 +131,17 @@ public class Bullet extends SolidEntity implements DamageTrait, ScaleTrait, Pool
this.data = data;
}
public float damageMultiplier(){
if(owner instanceof Unit){
return type.damage * ((Unit) owner).getDamageMultipler();
}
if(owner instanceof Lightning && data instanceof Float){
return (Float)data;
}
return 1f;
}
@Override
public void absorb(){
supressCollision = true;
@ -144,16 +155,7 @@ public class Bullet extends SolidEntity implements DamageTrait, ScaleTrait, Pool
@Override
public float damage(){
//todo hacky way to get damage, refactor
if(owner instanceof Unit){
return type.damage * ((Unit) owner).getDamageMultipler();
}
if(owner instanceof Lightning && data instanceof Float){
return (Float)data;
}
return type.damage;
return type.damage * damageMultiplier();
}
@Override

View File

@ -125,7 +125,7 @@ public abstract class BulletType extends Content{
}
if(splashDamageRadius > 0){
Damage.damage(b.getTeam(), x, y, splashDamageRadius, splashDamage);
Damage.damage(b.getTeam(), x, y, splashDamageRadius, splashDamage * b.damageMultiplier());
}
}

View File

@ -217,7 +217,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
@Override
public float maxHealth(){
return type.health;
return type.health * Vars.state.rules.unitHealthMultiplier;
}
@Override

View File

@ -91,6 +91,11 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
player.mech = (player.isMobile ? Mechs.starterMobile : Mechs.starterDesktop);
}
@Override
public float getDamageMultipler(){
return status.getDamageMultiplier() * state.rules.playerDamageMultiplier;
}
@Override
public void hitbox(Rectangle rectangle){
rectangle.setSize(mech.hitsize).setCenter(x, y);

View File

@ -28,6 +28,9 @@ public enum RulePreset{
respawnTime = 60 * 10;
buildCostMultiplier = 0.5f;
buildSpeedMultiplier = 2f;
playerDamageMultiplier = 0.5f;
unitBuildSpeedMultiplier = 3f;
unitHealthMultiplier = 2f;
}});
private final Supplier<Rules> rules;

View File

@ -19,6 +19,12 @@ public class Rules{
public boolean pvp;
/**Whether enemy units drop random items on death.*/
public boolean unitDrops;
/**How fast unit pads build units.*/
public float unitBuildSpeedMultiplier = 1f;
/**How much health units start with.*/
public float unitHealthMultiplier = 1f;
/**How much damage player mechs deal.*/
public float playerDamageMultiplier = 1f;
/**Multiplier for buildings for the player.*/
public float buildCostMultiplier = 1f;
/**Multiplier for building speed.*/

View File

@ -43,6 +43,9 @@ public class CustomRulesDialog extends FloatingDialog{
main.row();
number("$rules.buildcostmultiplier", f -> rules.buildCostMultiplier = f, () -> rules.buildCostMultiplier);
number("$rules.buildspeedmultiplier", f -> rules.buildSpeedMultiplier = f, () -> rules.buildSpeedMultiplier);
number("$rules.unitbuildspeedmultiplier", f -> rules.unitBuildSpeedMultiplier = f, () -> rules.unitBuildSpeedMultiplier);
number("$rules.unithealthmultiplier", f -> rules.unitHealthMultiplier = f, () -> rules.unitHealthMultiplier);
number("$rules.playerdamagemultiplier", f -> rules.playerDamageMultiplier = f, () -> rules.playerDamageMultiplier);
number("$rules.enemycorebuildradius", f -> rules.enemyCoreBuildRadius = f*tilesize, () -> Math.min(rules.enemyCoreBuildRadius/tilesize, 200));
number("$rules.respawntime", f -> rules.respawnTime = f*60f, () -> rules.respawnTime/60f);
number("$rules.wavespacing", f -> rules.waveSpacing = f*60f, () -> rules.waveSpacing/60f);

View File

@ -31,7 +31,7 @@ import io.anuke.mindustry.world.Tile;
import static io.anuke.mindustry.Vars.*;
public class BlockInventoryFragment extends Fragment{
private final static float holdWithdraw = 40f;
private final static float holdWithdraw = 20f;
private Table table;
private Tile tile;

View File

@ -176,8 +176,8 @@ public class UnitFactory extends Block{
if(!tile.isEnemyCheat()){
//player-made spawners have default behavior
if(entity.cons.valid()){
entity.time += entity.delta() * entity.speedScl;
entity.buildTime += entity.delta() * entity.power.satisfaction;
entity.time += entity.delta() * entity.speedScl * Vars.state.rules.unitBuildSpeedMultiplier;
entity.buildTime += entity.delta() * entity.power.satisfaction * Vars.state.rules.unitBuildSpeedMultiplier;
entity.speedScl = Mathf.lerpDelta(entity.speedScl, 1f, 0.05f);
}else{
entity.speedScl = Mathf.lerpDelta(entity.speedScl, 0f, 0.05f);