diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 00000000..30cf57ed
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Ignored default folder with query files
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 00000000..3c623d49
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 00000000..ca338c25
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 00000000..35eb1ddf
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/battle/entity/Entity.java b/battle/entity/Entity.java
index 34b40ef7..97e8fd51 100755
--- a/battle/entity/Entity.java
+++ b/battle/entity/Entity.java
@@ -955,6 +955,7 @@ private void add(POISON ws) {
if (ws.type.unstackable)
list.removeIf(e -> e.type.unstackable && type(e) == type(ws));
ws.prob = 0; // used as counter
+
list.add(ws);
getMax();
}
@@ -962,7 +963,10 @@ private void add(POISON ws) {
private void damage(int dmg, int type) {
type &= 3;
long mul = type == 0 ? 100 : type == 1 ? e.maxH : type == 2 ? e.health : (e.maxH - e.health);
+
e.damage += mul * dmg / 100;
+
+
}
private void getMax() {
@@ -1125,7 +1129,24 @@ private void doRevive(int c) {
deadAnim += ea.getEAnim(ZombieEff.REVIVE).len();
e.status[P_REVIVE][1] = deadAnim;
int maxR = maxRevHealth();
- e.health = e.maxH * maxR / 100;
+
+ // set how much health to revive with
+ long reviveHealth = e.maxH * maxR / 100;
+
+ // if revive health exceeds max health, update the max health
+ if (reviveHealth > e.maxH)
+ {
+ e.maxH = reviveHealth;
+ e.health = e.maxH;
+ }
+
+ // otherwise set health as normal
+ else
+ {
+ e.health = reviveHealth;
+ }
+
+
if (c == 1)
e.status[P_REVIVE][0]--;
else if (c == 2)
@@ -1438,6 +1459,12 @@ public void update() {
*/
private boolean killCounted = false;
+
+ /**
+ * Damage to use for poison
+ */
+ private int poisonDamage = 0;
+
/**
* cooldown timer for regeneration ability
*/
@@ -1455,6 +1482,12 @@ protected Entity(StageBasis b, MaskEntity de, EAnimU ea, float atkMagnif, float
maxCurrentShield = currentShield = (int) (de.getProc().DEMONSHIELD.hp * hpMagnif);
shieldMagnification = hpMagnif;
regentimer = getProc().HPREGEN.interval;
+
+ // scale poison damage with mag if option is enabled, otherwise keep poison damage to set value
+ poisonDamage = de.getProc().POISON.damage;
+ if (de.getProc().POISON.type.scaleWithBuff) {
+ poisonDamage = (int) (((float) poisonDamage) * atkMagnif);
+ }
}
protected Entity(StageBasis b, MaskEntity de, EAnimU ea, float lvMagnif, float tAtk, float tHP, PCoin pc, Level lv) {
@@ -1478,6 +1511,7 @@ protected Entity(StageBasis b, MaskEntity de, EAnimU ea, float lvMagnif, float t
status[P_REVIVE][0] = getProc().REVIVE.count;
status[P_DMGCUT][0] = getProc().DMGCUT.type.magnif ? (int) (lvMagnif * getProc().DMGCUT.dmg) : getProc().DMGCUT.dmg;
status[P_DMGCAP][0] = getProc().DMGCAP.type.magnif ? (int) (lvMagnif * getProc().DMGCAP.dmg) : getProc().DMGCAP.dmg;
+
presetStatus(lvMagnif);
presetSealedProcs();
maxCurrentShield = currentShield = (int) (de.getProc().DEMONSHIELD.hp * lvMagnif);
@@ -1825,6 +1859,7 @@ private void processProcs(AttackAb atk) {
if (!(ctargetable(atk.trait, atk.attacker, false) || (receive(-1) && atk.SPtr) || (receive(1) && !atk.SPtr)))
return;
+
boolean cannonResist = atk.canon > 0 && getProc().IMUCANNON.exists() && (atk.canon & getProc().IMUCANNON.type) > 0;
if (atk.getProc().POIATK.mult > 0) {
int rst = getProc().IMUPOIATK.mult;
@@ -1992,8 +2027,10 @@ private void processProcs(AttackAb atk) {
ws.time = ws.time * (100 - res) / 100;
+ ws.damage = atk.attacker.poisonDamage;
+
if (atk.atk != 0 && ws.type.modifAffected)
- ws.damage = (int) (ws.damage * (float) getDamage(atk, atk.atk) / atk.atk);
+ ws.damage = (int) (atk.attacker.poisonDamage * (float) getDamage(atk, atk.atk) / atk.atk);
pois.add(ws);
anim.getEff(P_POISON);
diff --git a/common.iml b/common.iml
new file mode 100644
index 00000000..cd8d4e29
--- /dev/null
+++ b/common.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/util/Data.java b/util/Data.java
index 67b1007d..99fae4a1 100755
--- a/util/Data.java
+++ b/util/Data.java
@@ -194,6 +194,8 @@ public static class TYPE extends IntType {
public boolean ignoreMetal;
@Order(3)
public boolean modifAffected;
+ @Order(4)
+ public boolean scaleWithBuff;
}
@Order(0)
diff --git a/util/lang/Editors.java b/util/lang/Editors.java
index 2af648c7..decf3137 100644
--- a/util/lang/Editors.java
+++ b/util/lang/Editors.java
@@ -384,7 +384,9 @@ else if (t.mult == 0)
t.type.range_type = 0;
t.type.revive_non_zombie = false;
} else {
- t.health = MathUtil.clip(t.health, 1, 100);
+ // min revive health should be 1% with no upper cap
+ t.health = Math.max(1, t.health);
+
t.time = Math.max(t.time, 1);
if (!t.type.revive_others) {
t.dis_0 = t.dis_1 = 0;
@@ -494,6 +496,7 @@ else if (t.mult == 0)
t.type.unstackable = false;
t.type.ignoreMetal = false;
t.type.modifAffected = false;
+ t.type.scaleWithBuff = false;
} else {
t.time = Math.max(1, t.time);
t.itv = Math.max(1, t.itv);
diff --git a/util/lang/assets/proc.json b/util/lang/assets/proc.json
index 513c8da5..43c2f134 100644
--- a/util/lang/assets/proc.json
+++ b/util/lang/assets/proc.json
@@ -792,6 +792,10 @@
"type.modifAffected": {
"name": "Consider Abilities",
"tooltip": "Toggle this to make poison damage affected by damage-modifying abilities such as strong against or critical."
+ },
+ "type.scaleWithBuff": {
+ "name": "Scale With Buff",
+ "tooltip": "Toggle this to make the damage increase with magnifications. Works best with burn."
}
}
},