diff options
author | tom-overton <tom.overton@outlook.com> | 2022-05-16 12:23:43 -0700 |
---|---|---|
committer | rafa_99 <raroma09@gmail.com> | 2022-05-16 22:57:36 +0100 |
commit | 4744fe9c8335401805b53578f3739bfc5236a20e (patch) | |
tree | 0ef9739a8a1f6207ddfd0f1737c47f35f9564dcf /src/com/sneed/pkrandom/romhandlers | |
parent | 7b9e41f3a4c7db46d8e138b2aee41c2d652b3a56 (diff) |
Read crit information from moves
Diffstat (limited to 'src/com/sneed/pkrandom/romhandlers')
7 files changed, 194 insertions, 118 deletions
diff --git a/src/com/sneed/pkrandom/romhandlers/Gen1RomHandler.java b/src/com/sneed/pkrandom/romhandlers/Gen1RomHandler.java index 275bd82..bc59cce 100755 --- a/src/com/sneed/pkrandom/romhandlers/Gen1RomHandler.java +++ b/src/com/sneed/pkrandom/romhandlers/Gen1RomHandler.java @@ -466,25 +466,7 @@ public class Gen1RomHandler extends AbstractGBCRomHandler { loadStatChangesFromEffect(moves[trueMoveIndex]);
loadStatusFromEffect(moves[trueMoveIndex]);
-
- switch (moves[i].effectIndex) {
- case Gen1Constants.flinch10PercentEffect:
- moves[i].flinchPercentChance = 10.0;
- break;
-
- case Gen1Constants.flinch30PercentEffect:
- moves[i].flinchPercentChance = 30.0;
- break;
-
- case Gen1Constants.damageAbsorbEffect:
- case Gen1Constants.dreamEaterEffect:
- moves[i].absorbPercent = 50;
- break;
-
- case Gen1Constants.damageRecoilEffect:
- moves[i].recoilPercent = 25;
- break;
- }
+ loadMiscMoveInfoFromEffect(moves[trueMoveIndex]);
}
}
}
@@ -676,6 +658,31 @@ public class Gen1RomHandler extends AbstractGBCRomHandler { }
}
+ private void loadMiscMoveInfoFromEffect(Move move) {
+ switch (move.effectIndex) {
+ case Gen1Constants.flinch10PercentEffect:
+ move.flinchPercentChance = 10.0;
+ break;
+
+ case Gen1Constants.flinch30PercentEffect:
+ move.flinchPercentChance = 30.0;
+ break;
+
+ case Gen1Constants.damageAbsorbEffect:
+ case Gen1Constants.dreamEaterEffect:
+ move.absorbPercent = 50;
+ break;
+
+ case Gen1Constants.damageRecoilEffect:
+ move.recoilPercent = 25;
+ break;
+ }
+
+ if (Gen1Constants.increasedCritMoves.contains(move.number)) {
+ move.criticalChance = CriticalChance.INCREASED;
+ }
+ }
+
private void saveMoves() {
int movesOffset = romEntry.getValue("MoveDataOffset");
for (Move m : moves) {
diff --git a/src/com/sneed/pkrandom/romhandlers/Gen2RomHandler.java b/src/com/sneed/pkrandom/romhandlers/Gen2RomHandler.java index 746b98f..03c57f7 100755 --- a/src/com/sneed/pkrandom/romhandlers/Gen2RomHandler.java +++ b/src/com/sneed/pkrandom/romhandlers/Gen2RomHandler.java @@ -415,7 +415,6 @@ public class Gen2RomHandler extends AbstractGBCRomHandler { if (moves[i].power == 0 && !GlobalConstants.noPowerNonStatusMoves.contains(i)) {
moves[i].category = MoveCategory.STATUS;
}
- moves[i].secondaryEffectChance = ((rom[offs + (i - 1) * 7 + 6] & 0xFF)) / 255.0 * 100;
if (i == Moves.swift) {
perfectAccuracy = (int)moves[i].hitratio;
@@ -443,30 +442,14 @@ public class Gen2RomHandler extends AbstractGBCRomHandler { moves[i].priority = 1;
}
- loadStatChangesFromEffect(moves[i]);
- loadStatusFromEffect(moves[i]);
-
- switch (moves[i].effectIndex) {
- case Gen2Constants.flinchEffect:
- case Gen2Constants.snoreEffect:
- case Gen2Constants.twisterEffect:
- case Gen2Constants.stompEffect:
- moves[i].flinchPercentChance = moves[i].secondaryEffectChance;
- break;
-
- case Gen2Constants.damageAbsorbEffect:
- case Gen2Constants.dreamEaterEffect:
- moves[i].absorbPercent = 50;
- break;
-
- case Gen2Constants.damageRecoilEffect:
- moves[i].recoilPercent = 25;
- break;
- }
+ double secondaryEffectChance = ((rom[offs + (i - 1) * 7 + 6] & 0xFF)) / 255.0 * 100;
+ loadStatChangesFromEffect(moves[i], secondaryEffectChance);
+ loadStatusFromEffect(moves[i], secondaryEffectChance);
+ loadMiscMoveInfoFromEffect(moves[i], secondaryEffectChance);
}
}
- private void loadStatChangesFromEffect(Move move) {
+ private void loadStatChangesFromEffect(Move move, double secondaryEffectChance) {
switch (move.effectIndex) {
case Gen2Constants.noDamageAtkPlusOneEffect:
case Gen2Constants.damageUserAtkPlusOneEffect:
@@ -602,7 +585,7 @@ public class Gen2RomHandler extends AbstractGBCRomHandler { if (move.statChangeMoveType == StatChangeMoveType.DAMAGE_TARGET || move.statChangeMoveType == StatChangeMoveType.DAMAGE_USER) {
for (int i = 0; i < move.statChanges.length; i++) {
if (move.statChanges[i].type != StatChangeType.NONE) {
- move.statChanges[i].percentChance = move.secondaryEffectChance;
+ move.statChanges[i].percentChance = secondaryEffectChance;
if (move.statChanges[i].percentChance == 0.0) {
move.statChanges[i].percentChance = 100.0;
}
@@ -611,7 +594,7 @@ public class Gen2RomHandler extends AbstractGBCRomHandler { }
}
- private void loadStatusFromEffect(Move move) {
+ private void loadStatusFromEffect(Move move, double secondaryEffectChance) {
switch (move.effectIndex) {
case Gen2Constants.noDamageSleepEffect:
case Gen2Constants.toxicEffect:
@@ -670,13 +653,42 @@ public class Gen2RomHandler extends AbstractGBCRomHandler { }
if (move.statusMoveType == StatusMoveType.DAMAGE) {
- move.statusPercentChance = move.secondaryEffectChance;
+ move.statusPercentChance = secondaryEffectChance;
if (move.statusPercentChance == 0.0) {
move.statusPercentChance = 100.0;
}
}
}
+ private void loadMiscMoveInfoFromEffect(Move move, double secondaryEffectChance) {
+ switch (move.effectIndex) {
+ case Gen2Constants.flinchEffect:
+ case Gen2Constants.snoreEffect:
+ case Gen2Constants.twisterEffect:
+ case Gen2Constants.stompEffect:
+ move.flinchPercentChance = secondaryEffectChance;
+ break;
+
+ case Gen2Constants.damageAbsorbEffect:
+ case Gen2Constants.dreamEaterEffect:
+ move.absorbPercent = 50;
+ break;
+
+ case Gen2Constants.damageRecoilEffect:
+ move.recoilPercent = 25;
+ break;
+
+ case Gen2Constants.flailAndReversalEffect:
+ case Gen2Constants.futureSightEffect:
+ move.criticalChance = CriticalChance.NONE;
+ break;
+ }
+
+ if (Gen2Constants.increasedCritMoves.contains(move.number)) {
+ move.criticalChance = CriticalChance.INCREASED;
+ }
+ }
+
private void saveMoves() {
int offs = romEntry.getValue("MoveDataOffset");
for (int i = 1; i <= 251; i++) {
diff --git a/src/com/sneed/pkrandom/romhandlers/Gen3RomHandler.java b/src/com/sneed/pkrandom/romhandlers/Gen3RomHandler.java index 8f3a645..803a975 100755 --- a/src/com/sneed/pkrandom/romhandlers/Gen3RomHandler.java +++ b/src/com/sneed/pkrandom/romhandlers/Gen3RomHandler.java @@ -830,7 +830,6 @@ public class Gen3RomHandler extends AbstractGBRomHandler { moves[i].category = MoveCategory.STATUS; } moves[i].priority = rom[offs + i * 0xC + 7]; - moves[i].secondaryEffectChance = rom[offs + i * 0xC + 5] & 0xFF; int flags = rom[offs + i * 0xC + 8] & 0xFF; moves[i].makesContact = (flags & 1) != 0; @@ -838,30 +837,6 @@ public class Gen3RomHandler extends AbstractGBRomHandler { perfectAccuracy = (int)moves[i].hitratio; } - switch (moves[i].effectIndex) { - case Gen3Constants.flinchEffect: - case Gen3Constants.skyAttackEffect: - case Gen3Constants.snoreEffect: - case Gen3Constants.twisterEffect: - case Gen3Constants.flinchWithMinimizeBonusEffect: - case Gen3Constants.fakeOutEffect: - moves[i].flinchPercentChance = moves[i].secondaryEffectChance; - break; - - case Gen3Constants.damageAbsorbEffect: - case Gen3Constants.dreamEaterEffect: - moves[i].absorbPercent = 50; - break; - - case Gen3Constants.damageRecoil25PercentEffect: - moves[i].recoilPercent = 25; - break; - - case Gen3Constants.damageRecoil33PercentEffect: - moves[i].recoilPercent = 33; - break; - } - if (GlobalConstants.normalMultihitMoves.contains(i)) { moves[i].hitCount = 3; } else if (GlobalConstants.doubleHitMoves.contains(i)) { @@ -870,12 +845,14 @@ public class Gen3RomHandler extends AbstractGBRomHandler { moves[i].hitCount = 2.71; // this assumes the first hit lands } - loadStatChangesFromEffect(moves[i]); - loadStatusFromEffect(moves[i]); + int secondaryEffectChance = rom[offs + i * 0xC + 5] & 0xFF; + loadStatChangesFromEffect(moves[i], secondaryEffectChance); + loadStatusFromEffect(moves[i], secondaryEffectChance); + loadMiscMoveInfoFromEffect(moves[i], secondaryEffectChance); } } - private void loadStatChangesFromEffect(Move move) { + private void loadStatChangesFromEffect(Move move, int secondaryEffectChance) { switch (move.effectIndex) { case Gen3Constants.noDamageAtkPlusOneEffect: case Gen3Constants.noDamageDefPlusOneEffect: @@ -1073,7 +1050,7 @@ public class Gen3RomHandler extends AbstractGBRomHandler { if (move.statChangeMoveType == StatChangeMoveType.DAMAGE_TARGET || move.statChangeMoveType == StatChangeMoveType.DAMAGE_USER) { for (int i = 0; i < move.statChanges.length; i++) { if (move.statChanges[i].type != StatChangeType.NONE) { - move.statChanges[i].percentChance = move.secondaryEffectChance; + move.statChanges[i].percentChance = secondaryEffectChance; if (move.statChanges[i].percentChance == 0.0) { move.statChanges[i].percentChance = 100.0; } @@ -1082,12 +1059,12 @@ public class Gen3RomHandler extends AbstractGBRomHandler { } } - private void loadStatusFromEffect(Move move) { + private void loadStatusFromEffect(Move move, int secondaryEffectChance) { if (move.number == Moves.bounce) { // GF hardcoded this, so we have to as well move.statusMoveType = StatusMoveType.DAMAGE; move.statusType = StatusType.PARALYZE; - move.statusPercentChance = move.secondaryEffectChance; + move.statusPercentChance = secondaryEffectChance; return; } @@ -1114,7 +1091,7 @@ public class Gen3RomHandler extends AbstractGBRomHandler { case Gen3Constants.thunderEffect: case Gen3Constants.blazeKickEffect: case Gen3Constants.poisonFangEffect: - case Gen3Constants.damagePoisonWithIncreasedCritEffect: + case Gen3Constants.poisonTailEffect: move.statusMoveType = StatusMoveType.DAMAGE; break; @@ -1130,7 +1107,7 @@ public class Gen3RomHandler extends AbstractGBRomHandler { case Gen3Constants.damagePoisonEffect: case Gen3Constants.noDamagePoisonEffect: case Gen3Constants.twineedleEffect: - case Gen3Constants.damagePoisonWithIncreasedCritEffect: + case Gen3Constants.poisonTailEffect: move.statusType = StatusType.POISON; break; case Gen3Constants.damageBurnEffect: @@ -1161,13 +1138,52 @@ public class Gen3RomHandler extends AbstractGBRomHandler { } if (move.statusMoveType == StatusMoveType.DAMAGE) { - move.statusPercentChance = move.secondaryEffectChance; + move.statusPercentChance = secondaryEffectChance; if (move.statusPercentChance == 0.0) { move.statusPercentChance = 100.0; } } } + private void loadMiscMoveInfoFromEffect(Move move, int secondaryEffectChance) { + switch (move.effectIndex) { + case Gen3Constants.increasedCritEffect: + case Gen3Constants.blazeKickEffect: + case Gen3Constants.poisonTailEffect: + move.criticalChance = CriticalChance.INCREASED; + break; + + case Gen3Constants.futureSightAndDoomDesireEffect: + case Gen3Constants.spitUpEffect: + move.criticalChance = CriticalChance.NONE; + + case Gen3Constants.flinchEffect: + case Gen3Constants.snoreEffect: + case Gen3Constants.twisterEffect: + case Gen3Constants.flinchWithMinimizeBonusEffect: + case Gen3Constants.fakeOutEffect: + move.flinchPercentChance = secondaryEffectChance; + break; + + case Gen3Constants.skyAttackEffect: + move.criticalChance = CriticalChance.INCREASED; + move.flinchPercentChance = secondaryEffectChance; + + case Gen3Constants.damageAbsorbEffect: + case Gen3Constants.dreamEaterEffect: + move.absorbPercent = 50; + break; + + case Gen3Constants.damageRecoil25PercentEffect: + move.recoilPercent = 25; + break; + + case Gen3Constants.damageRecoil33PercentEffect: + move.recoilPercent = 33; + break; + } + } + private void saveMoves() { int moveCount = romEntry.getValue("MoveCount"); int offs = romEntry.getValue("MoveData"); diff --git a/src/com/sneed/pkrandom/romhandlers/Gen4RomHandler.java b/src/com/sneed/pkrandom/romhandlers/Gen4RomHandler.java index 0422ab2..223ba55 100755 --- a/src/com/sneed/pkrandom/romhandlers/Gen4RomHandler.java +++ b/src/com/sneed/pkrandom/romhandlers/Gen4RomHandler.java @@ -574,7 +574,6 @@ public class Gen4RomHandler extends AbstractDSRomHandler { moves[i].type = Gen4Constants.typeTable[moveData[4] & 0xFF];
moves[i].target = readWord(moveData, 8);
moves[i].category = Gen4Constants.moveCategoryIndices[moveData[2] & 0xFF];
- moves[i].secondaryEffectChance = moveData[7] & 0xFF;
moves[i].priority = moveData[10];
int flags = moveData[11] & 0xFF;
moves[i].makesContact = (flags & 1) != 0;
@@ -591,48 +590,17 @@ public class Gen4RomHandler extends AbstractDSRomHandler { moves[i].hitCount = 2.71; // this assumes the first hit lands
}
- loadStatChangesFromEffect(moves[i]);
- loadStatusFromEffect(moves[i]);
-
- switch (moves[i].effectIndex) {
- case Gen4Constants.flinchEffect:
- case Gen4Constants.skyAttackEffect:
- case Gen4Constants.snoreEffect:
- case Gen4Constants.twisterEffect:
- case Gen4Constants.stompEffect:
- case Gen4Constants.fakeOutEffect:
- case Gen4Constants.fireFangEffect:
- case Gen4Constants.iceFangEffect:
- case Gen4Constants.thunderFangEffect:
- moves[i].flinchPercentChance = moves[i].secondaryEffectChance;
- break;
-
- case Gen4Constants.damageAbsorbEffect:
- case Gen4Constants.dreamEaterEffect:
- moves[i].absorbPercent = 50;
- break;
-
- case Gen4Constants.damageRecoil25PercentEffect:
- moves[i].recoilPercent = 25;
- break;
-
- case Gen4Constants.damageRecoil33PercentEffect:
- case Gen4Constants.flareBlitzEffect:
- case Gen4Constants.voltTackleEffect:
- moves[i].recoilPercent = 33;
- break;
-
- case Gen4Constants.damageRecoil50PercentEffect:
- moves[i].recoilPercent = 50;
- break;
- }
+ int secondaryEffectChance = moveData[7] & 0xFF;
+ loadStatChangesFromEffect(moves[i], secondaryEffectChance);
+ loadStatusFromEffect(moves[i], secondaryEffectChance);
+ loadMiscMoveInfoFromEffect(moves[i], secondaryEffectChance);
}
} catch (IOException e) {
throw new RandomizerIOException(e);
}
}
- private void loadStatChangesFromEffect(Move move) {
+ private void loadStatChangesFromEffect(Move move, int secondaryEffectChance) {
switch (move.effectIndex) {
case Gen4Constants.noDamageAtkPlusOneEffect:
case Gen4Constants.noDamageDefPlusOneEffect:
@@ -845,7 +813,7 @@ public class Gen4RomHandler extends AbstractDSRomHandler { if (move.statChangeMoveType == StatChangeMoveType.DAMAGE_TARGET || move.statChangeMoveType == StatChangeMoveType.DAMAGE_USER) {
for (int i = 0; i < move.statChanges.length; i++) {
if (move.statChanges[i].type != StatChangeType.NONE) {
- move.statChanges[i].percentChance = move.secondaryEffectChance;
+ move.statChanges[i].percentChance = secondaryEffectChance;
if (move.statChanges[i].percentChance == 0.0) {
move.statChanges[i].percentChance = 100.0;
}
@@ -854,7 +822,7 @@ public class Gen4RomHandler extends AbstractDSRomHandler { }
}
- private void loadStatusFromEffect(Move move) {
+ private void loadStatusFromEffect(Move move, int secondaryEffectChance) {
switch (move.effectIndex) {
case Gen4Constants.noDamageSleepEffect:
case Gen4Constants.toxicEffect:
@@ -941,7 +909,7 @@ public class Gen4RomHandler extends AbstractDSRomHandler { }
if (move.statusMoveType == StatusMoveType.DAMAGE) {
- move.statusPercentChance = move.secondaryEffectChance;
+ move.statusPercentChance = secondaryEffectChance;
if (move.statusPercentChance == 0.0) {
if (move.number == Moves.chatter) {
move.statusPercentChance = 1.0;
@@ -952,6 +920,55 @@ public class Gen4RomHandler extends AbstractDSRomHandler { }
}
+ private void loadMiscMoveInfoFromEffect(Move move, int secondaryEffectChance) {
+ switch (move.effectIndex) {
+ case Gen4Constants.razorWindEffect:
+ case Gen4Constants.increasedCritEffect:
+ case Gen4Constants.blazeKickEffect:
+ case Gen4Constants.damagePoisonWithIncreasedCritEffect:
+ move.criticalChance = CriticalChance.INCREASED;
+ break;
+
+ case Gen4Constants.futureSightAndDoomDesireEffect:
+ move.criticalChance = CriticalChance.NONE;
+
+ case Gen4Constants.flinchEffect:
+ case Gen4Constants.snoreEffect:
+ case Gen4Constants.twisterEffect:
+ case Gen4Constants.stompEffect:
+ case Gen4Constants.fakeOutEffect:
+ case Gen4Constants.fireFangEffect:
+ case Gen4Constants.iceFangEffect:
+ case Gen4Constants.thunderFangEffect:
+ move.flinchPercentChance = secondaryEffectChance;
+ break;
+
+ case Gen4Constants.skyAttackEffect:
+ move.criticalChance = CriticalChance.INCREASED;
+ move.flinchPercentChance = secondaryEffectChance;
+ break;
+
+ case Gen4Constants.damageAbsorbEffect:
+ case Gen4Constants.dreamEaterEffect:
+ move.absorbPercent = 50;
+ break;
+
+ case Gen4Constants.damageRecoil25PercentEffect:
+ move.recoilPercent = 25;
+ break;
+
+ case Gen4Constants.damageRecoil33PercentEffect:
+ case Gen4Constants.flareBlitzEffect:
+ case Gen4Constants.voltTackleEffect:
+ move.recoilPercent = 33;
+ break;
+
+ case Gen4Constants.damageRecoil50PercentEffect:
+ move.recoilPercent = 50;
+ break;
+ }
+ }
+
private void loadPokemonStats() {
try {
String pstatsnarc = romEntry.getFile("PokemonStats");
diff --git a/src/com/sneed/pkrandom/romhandlers/Gen5RomHandler.java b/src/com/sneed/pkrandom/romhandlers/Gen5RomHandler.java index 023b861..4791888 100755 --- a/src/com/sneed/pkrandom/romhandlers/Gen5RomHandler.java +++ b/src/com/sneed/pkrandom/romhandlers/Gen5RomHandler.java @@ -559,6 +559,14 @@ public class Gen5RomHandler extends AbstractDSRomHandler { moves[i].target = moveData[20] & 0xFF;
moves[i].category = Gen5Constants.moveCategoryIndices[moveData[2] & 0xFF];
moves[i].priority = moveData[6];
+
+ int critStages = moveData[14] & 0xFF;
+ if (critStages == 6) {
+ moves[i].criticalChance = CriticalChance.GUARANTEED;
+ } else if (critStages > 0) {
+ moves[i].criticalChance = CriticalChance.INCREASED;
+ }
+
int flags = FileFunctions.readFullInt(moveData, 32);
moves[i].makesContact = (flags & 1) != 0;
int qualities = moveData[1];
diff --git a/src/com/sneed/pkrandom/romhandlers/Gen6RomHandler.java b/src/com/sneed/pkrandom/romhandlers/Gen6RomHandler.java index b107b0a..e4c9bde 100644 --- a/src/com/sneed/pkrandom/romhandlers/Gen6RomHandler.java +++ b/src/com/sneed/pkrandom/romhandlers/Gen6RomHandler.java @@ -610,6 +610,14 @@ public class Gen6RomHandler extends Abstract3DSRomHandler { moves[i].target = moveData[20] & 0xFF; moves[i].category = Gen6Constants.moveCategoryIndices[moveData[2] & 0xFF]; moves[i].priority = moveData[6]; + + int critStages = moveData[14] & 0xFF; + if (critStages == 6) { + moves[i].criticalChance = CriticalChance.GUARANTEED; + } else if (critStages > 0) { + moves[i].criticalChance = CriticalChance.INCREASED; + } + int flags = FileFunctions.readFullInt(moveData, 32); moves[i].makesContact = (flags & 1) != 0; int qualities = moveData[1]; diff --git a/src/com/sneed/pkrandom/romhandlers/Gen7RomHandler.java b/src/com/sneed/pkrandom/romhandlers/Gen7RomHandler.java index 1e2ed98..9d4ceb7 100644 --- a/src/com/sneed/pkrandom/romhandlers/Gen7RomHandler.java +++ b/src/com/sneed/pkrandom/romhandlers/Gen7RomHandler.java @@ -682,6 +682,14 @@ public class Gen7RomHandler extends Abstract3DSRomHandler { moves[i].target = moveData[20] & 0xFF; moves[i].category = Gen7Constants.moveCategoryIndices[moveData[2] & 0xFF]; moves[i].priority = moveData[6]; + + int critStages = moveData[14] & 0xFF; + if (critStages == 6) { + moves[i].criticalChance = CriticalChance.GUARANTEED; + } else if (critStages > 0) { + moves[i].criticalChance = CriticalChance.INCREASED; + } + int flags = FileFunctions.readFullInt(moveData, 36); moves[i].makesContact = (flags & 1) != 0; int qualities = moveData[1]; |