Skip to content

Commit 9d447ee

Browse files
author
Bytekeeper
committed
According to Amkmairdor (@discord) - only inner splash damage affects burrowed units; also prevent burrowed units from retreating
1 parent 9e6cfae commit 9d447ee

File tree

3 files changed

+28
-11
lines changed

3 files changed

+28
-11
lines changed

src/main/java/org/bk/ass/AgentUtil.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,21 +60,17 @@ public static void dealRadialSplashDamage(
6060
}
6161

6262
private static void applySplashDamage(Weapon weapon, Agent mainTarget, Agent splashTarget) {
63-
if (splashTarget == mainTarget
64-
|| splashTarget.burrowed
65-
|| splashTarget.isFlyer != mainTarget.isFlyer) {
63+
if (splashTarget == mainTarget || splashTarget.isFlyer != mainTarget.isFlyer) {
6664
return;
6765
}
6866

6967
int distanceSquared = distanceSquared(splashTarget, mainTarget);
70-
if (distanceSquared <= weapon.outerSplashRadiusSquared) {
68+
if (distanceSquared <= weapon.innerSplashRadiusSquared) {
69+
applyDamage(splashTarget, weapon.damageType, weapon.damageShifted, weapon.hits);
70+
} else if (!splashTarget.burrowed) {
7171
if (distanceSquared <= weapon.medianSplashRadiusSquared) {
72-
if (distanceSquared <= weapon.innerSplashRadiusSquared) {
73-
applyDamage(splashTarget, weapon.damageType, weapon.damageShifted, weapon.hits);
74-
} else {
75-
applyDamage(splashTarget, weapon.damageType, weapon.damageShifted / 2, weapon.hits);
76-
}
77-
} else {
72+
applyDamage(splashTarget, weapon.damageType, weapon.damageShifted / 2, weapon.hits);
73+
} else if (distanceSquared <= weapon.outerSplashRadiusSquared) {
7874
applyDamage(splashTarget, weapon.damageType, weapon.damageShifted / 4, weapon.hits);
7975
}
8076
}
@@ -106,7 +102,7 @@ public static void dealLineSplashDamage(
106102
+ weapon.innerSplashRadiusSquared;
107103
for (int i = enemies.size() - 1; i >= 0; i--) {
108104
Agent enemy = enemies.get(i);
109-
if (enemy == mainTarget || enemy.burrowed || enemy.isFlyer != mainTarget.isFlyer) {
105+
if (enemy == mainTarget || enemy.isFlyer != mainTarget.isFlyer) {
110106
continue;
111107
}
112108
int enemyDistSq = distanceSquared(enemy, source);

src/main/java/org/bk/ass/RetreatBehavior.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public boolean simUnit(
1515
}
1616

1717
static boolean simFlee(Agent agent, UnorderedCollection<Agent> enemies) {
18+
if (agent.burrowed) return false;
1819
Agent selectedEnemy = null;
1920
int selectedDistanceSquared = Integer.MAX_VALUE;
2021
for (int i = enemies.size() - 1; i >= 0; i--) {

src/test/java/org/bk/ass/SimulatorTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,26 @@ void lurkerVsTwoOpposingMarinesSingleFrame() {
143143
assertThat(simulator.getAgentsA()).extracting("health").contains(20, 40);
144144
}
145145

146+
@Test
147+
void tankVsBurrowedZerglings() {
148+
// GIVEN
149+
simulator.addAgentA(factory.of(UnitType.Terran_Siege_Tank_Siege_Mode));
150+
simulator.addAgentB(factory.of(UnitType.Zerg_Hydralisk).setX(384).setBurrowed(true));
151+
simulator.addAgentB(factory.of(UnitType.Zerg_Hydralisk).setX(394).setBurrowed(true));
152+
simulator.addAgentB(factory.of(UnitType.Zerg_Hydralisk).setX(404).setBurrowed(true));
153+
simulator.addAgentB(factory.of(UnitType.Zerg_Hydralisk).setX(404));
154+
155+
// WHEN
156+
simulator.simulate(1);
157+
158+
// THEN
159+
assertThat(simulator.getAgentsB()).extracting("health")
160+
.contains(80, // out of inner splash range while burrowed
161+
62, // direct hit
162+
62, // inner splash hit burrowed
163+
71); // unburrowed, inside outer splash
164+
}
165+
146166
@Test
147167
void lurkerVsTwoMarinesSingleFrame() {
148168
// GIVEN

0 commit comments

Comments
 (0)