diff options
author | tom-overton <tom.overton@outlook.com> | 2022-05-20 04:40:06 -0700 |
---|---|---|
committer | rafa_99 <raroma09@gmail.com> | 2022-05-20 20:36:27 +0100 |
commit | c5bf1fc29e858ad219cf056f3ba5e98e582c72f6 (patch) | |
tree | af76c36627c957694b2e13f65a371a5c5f1dca18 | |
parent | bfe122305683e28fbd70d117996e084661b3c402 (diff) |
Read trap/bind information from moves
13 files changed, 81 insertions, 30 deletions
diff --git a/src/com/sneed/pkrandom/constants/Gen2Constants.java b/src/com/sneed/pkrandom/constants/Gen2Constants.java index 4ca383b..1f7aa71 100644 --- a/src/com/sneed/pkrandom/constants/Gen2Constants.java +++ b/src/com/sneed/pkrandom/constants/Gen2Constants.java @@ -77,14 +77,16 @@ public class Gen2Constants { noDamageDefPlusOneEffect = 11, noDamageSpAtkPlusOneEffect = 13, noDamageEvasionPlusOneEffect = 16, noDamageAtkMinusOneEffect = 18, noDamageDefMinusOneEffect = 19, noDamageSpeMinusOneEffect = 20, noDamageAccuracyMinusOneEffect = 23, noDamageEvasionMinusOneEffect = 24, flinchEffect = 31, toxicEffect = 33, - damageRecoilEffect = 48, noDamageConfusionEffect = 49, noDamageAtkPlusTwoEffect = 50, noDamageDefPlusTwoEffect = 51, - noDamageSpePlusTwoEffect = 52, noDamageSpDefPlusTwoEffect = 54, noDamageAtkMinusTwoEffect = 58, - noDamageDefMinusTwoEffect = 59, noDamageSpeMinusTwoEffect = 60, noDamageSpDefMinusTwoEffect = 62, noDamagePoisonEffect = 66, - noDamageParalyzeEffect = 67, damageAtkMinusOneEffect = 68, damageDefMinusOneEffect = 69, damageSpeMinusOneEffect = 70, - damageSpDefMinusOneEffect = 72, damageAccuracyMinusOneEffect = 73, damageConfusionEffect = 76, twineedleEffect = 77, - snoreEffect = 92, flailAndReversalEffect = 102, swaggerEffect = 118, damageBurnAndThawUserEffect = 125, - damageUserDefPlusOneEffect = 138, damageUserAtkPlusOneEffect = 139, damageUserAllPlusOneEffect = 140, - twisterEffect = 146, futureSightEffect = 148, stompEffect = 150, thunderEffect = 152, defenseCurlEffect = 156; + bindingEffect = 42, damageRecoilEffect = 48, noDamageConfusionEffect = 49, noDamageAtkPlusTwoEffect = 50, + noDamageDefPlusTwoEffect = 51, noDamageSpePlusTwoEffect = 52, noDamageSpDefPlusTwoEffect = 54, + noDamageAtkMinusTwoEffect = 58, noDamageDefMinusTwoEffect = 59, noDamageSpeMinusTwoEffect = 60, + noDamageSpDefMinusTwoEffect = 62, noDamagePoisonEffect = 66, noDamageParalyzeEffect = 67, + damageAtkMinusOneEffect = 68, damageDefMinusOneEffect = 69, damageSpeMinusOneEffect = 70, + damageSpDefMinusOneEffect = 72, damageAccuracyMinusOneEffect = 73, damageConfusionEffect = 76, + twineedleEffect = 77, snoreEffect = 92, flailAndReversalEffect = 102, trappingEffect = 106, + swaggerEffect = 118, damageBurnAndThawUserEffect = 125, damageUserDefPlusOneEffect = 138, + damageUserAtkPlusOneEffect = 139, damageUserAllPlusOneEffect = 140, twisterEffect = 146, + futureSightEffect = 148, stompEffect = 150, thunderEffect = 152, defenseCurlEffect = 156; // Taken from critical_hit_moves.asm; we could read this from the ROM, but it's easier to hardcode it. public static final List<Integer> increasedCritMoves = Arrays.asList(Moves.karateChop, Moves.razorWind, Moves.razorLeaf, diff --git a/src/com/sneed/pkrandom/constants/Gen3Constants.java b/src/com/sneed/pkrandom/constants/Gen3Constants.java index 34dd4a9..20af00d 100644 --- a/src/com/sneed/pkrandom/constants/Gen3Constants.java +++ b/src/com/sneed/pkrandom/constants/Gen3Constants.java @@ -190,14 +190,15 @@ public class Gen3Constants { noDamageDefPlusOneEffect = 11, noDamageSpAtkPlusOneEffect = 13, noDamageEvasionPlusOneEffect = 16, noDamageAtkMinusOneEffect = 18, noDamageDefMinusOneEffect = 19, noDamageSpeMinusOneEffect = 20, noDamageAccuracyMinusOneEffect = 23, noDamageEvasionMinusOneEffect = 24, flinchEffect = 31, toxicEffect = 33, - increasedCritEffect = 43, damageRecoil25PercentEffect = 48, noDamageConfusionEffect = 49, noDamageAtkPlusTwoEffect = 50, - noDamageDefPlusTwoEffect = 51, noDamageSpePlusTwoEffect = 52, noDamageSpAtkPlusTwoEffect = 53, - noDamageSpDefPlusTwoEffect = 54, noDamageAtkMinusTwoEffect = 58, noDamageDefMinusTwoEffect = 59, - noDamageSpeMinusTwoEffect = 60, noDamageSpDefMinusTwoEffect = 62, noDamagePoisonEffect = 66, - noDamageParalyzeEffect = 67, damageAtkMinusOneEffect = 68, damageDefMinusOneEffect = 69, - damageSpeMinusOneEffect = 70, damageSpAtkMinusOneEffect = 71, damageSpDefMinusOneEffect = 72, - damageAccuracyMinusOneEffect = 73, skyAttackEffect = 75, damageConfusionEffect = 76, twineedleEffect = 77, - snoreEffect = 92, minimizeEffect = 108, swaggerEffect = 118, damageBurnAndThawUserEffect = 125, + bindingEffect = 42, increasedCritEffect = 43, damageRecoil25PercentEffect = 48, noDamageConfusionEffect = 49, + noDamageAtkPlusTwoEffect = 50, noDamageDefPlusTwoEffect = 51, noDamageSpePlusTwoEffect = 52, + noDamageSpAtkPlusTwoEffect = 53, noDamageSpDefPlusTwoEffect = 54, noDamageAtkMinusTwoEffect = 58, + noDamageDefMinusTwoEffect = 59, noDamageSpeMinusTwoEffect = 60, noDamageSpDefMinusTwoEffect = 62, + noDamagePoisonEffect = 66, noDamageParalyzeEffect = 67, damageAtkMinusOneEffect = 68, + damageDefMinusOneEffect = 69, damageSpeMinusOneEffect = 70, damageSpAtkMinusOneEffect = 71, + damageSpDefMinusOneEffect = 72, damageAccuracyMinusOneEffect = 73, skyAttackEffect = 75, + damageConfusionEffect = 76, twineedleEffect = 77, snoreEffect = 92, trappingEffect = 106, + minimizeEffect = 108, swaggerEffect = 118, damageBurnAndThawUserEffect = 125, damageUserDefPlusOneEffect = 138, damageUserAtkPlusOneEffect = 139, damageUserAllPlusOneEffect = 140, twisterEffect = 146, futureSightAndDoomDesireEffect = 148, flinchWithMinimizeBonusEffect = 150, thunderEffect = 152, defenseCurlEffect = 156, fakeOutEffect = 158, spitUpEffect = 161, flatterEffect = 166, noDamageBurnEffect = 167, diff --git a/src/com/sneed/pkrandom/constants/Gen4Constants.java b/src/com/sneed/pkrandom/constants/Gen4Constants.java index 14af49b..e62af6d 100644 --- a/src/com/sneed/pkrandom/constants/Gen4Constants.java +++ b/src/com/sneed/pkrandom/constants/Gen4Constants.java @@ -686,17 +686,18 @@ public class Gen4Constants { noDamageDefPlusOneEffect = 11, noDamageSpAtkPlusOneEffect = 13, noDamageEvasionPlusOneEffect = 16, noDamageAtkMinusOneEffect = 18, noDamageDefMinusOneEffect = 19, noDamageSpeMinusOneEffect = 20, noDamageAccuracyMinusOneEffect = 23, noDamageEvasionMinusOneEffect = 24, flinchEffect = 31, toxicEffect = 33, - razorWindEffect = 39, increasedCritEffect = 43, damageRecoil25PercentEffect = 48, noDamageConfusionEffect = 49, - noDamageAtkPlusTwoEffect = 50, noDamageDefPlusTwoEffect = 51, noDamageSpePlusTwoEffect = 52, - noDamageSpAtkPlusTwoEffect = 53, noDamageSpDefPlusTwoEffect = 54, noDamageAtkMinusTwoEffect = 58, - noDamageDefMinusTwoEffect = 59, noDamageSpeMinusTwoEffect = 60, noDamageSpDefMinusTwoEffect = 62, - noDamagePoisonEffect = 66, noDamageParalyzeEffect = 67, damageAtkMinusOneEffect = 68, - damageDefMinusOneEffect = 69, damageSpeMinusOneEffect = 70, damageSpAtkMinusOneEffect = 71, - damageSpDefMinusOneEffect = 72, damageAccuracyMinusOneEffect = 73, skyAttackEffect = 75, - damageConfusionEffect = 76, twineedleEffect = 77, snoreEffect = 92, minimizeEffect = 108, swaggerEffect = 118, - damageBurnAndThawUserEffect = 125, damageUserDefPlusOneEffect = 138, damageUserAtkPlusOneEffect = 139, - damageUserAllPlusOneEffect = 140, twisterEffect = 146, futureSightAndDoomDesireEffect = 148, stompEffect = 150, - thunderEffect = 152, defenseCurlEffect = 156, fakeOutEffect = 158, flatterEffect = 166, noDamageBurnEffect = 167, + razorWindEffect = 39, bindingEffect = 42, increasedCritEffect = 43, damageRecoil25PercentEffect = 48, + noDamageConfusionEffect = 49, noDamageAtkPlusTwoEffect = 50, noDamageDefPlusTwoEffect = 51, + noDamageSpePlusTwoEffect = 52, noDamageSpAtkPlusTwoEffect = 53, noDamageSpDefPlusTwoEffect = 54, + noDamageAtkMinusTwoEffect = 58, noDamageDefMinusTwoEffect = 59, noDamageSpeMinusTwoEffect = 60, + noDamageSpDefMinusTwoEffect = 62, noDamagePoisonEffect = 66, noDamageParalyzeEffect = 67, + damageAtkMinusOneEffect = 68, damageDefMinusOneEffect = 69, damageSpeMinusOneEffect = 70, + damageSpAtkMinusOneEffect = 71, damageSpDefMinusOneEffect = 72, damageAccuracyMinusOneEffect = 73, + skyAttackEffect = 75, damageConfusionEffect = 76, twineedleEffect = 77, snoreEffect = 92, + trappingEffect = 106, minimizeEffect = 108, swaggerEffect = 118, damageBurnAndThawUserEffect = 125, + damageUserDefPlusOneEffect = 138, damageUserAtkPlusOneEffect = 139, damageUserAllPlusOneEffect = 140, + twisterEffect = 146, futureSightAndDoomDesireEffect = 148, stompEffect = 150, thunderEffect = 152, + defenseCurlEffect = 156, fakeOutEffect = 158, flatterEffect = 166, noDamageBurnEffect = 167, chargeEffect = 174, damageUserAtkAndDefMinusOneEffect = 182, damageRecoil33PercentEffect = 198, teeterDanceEffect = 199, blazeKickEffect = 200, poisonFangEffect = 202, damageUserSpAtkMinusTwoEffect = 204, noDamageAtkAndDefMinusOneEffect = 205, noDamageDefAndSpDefPlusOneEffect = 206, noDamageAtkAndDefPlusOneEffect = 208, diff --git a/src/com/sneed/pkrandom/constants/Gen5Constants.java b/src/com/sneed/pkrandom/constants/Gen5Constants.java index c17f295..e7630e4 100644 --- a/src/com/sneed/pkrandom/constants/Gen5Constants.java +++ b/src/com/sneed/pkrandom/constants/Gen5Constants.java @@ -156,6 +156,8 @@ public class Gen5Constants { }
}
+ public static final int trappingEffect = 106;
+
public static final int noDamageStatusQuality = 1, noDamageStatChangeQuality = 2, damageStatusQuality = 4,
noDamageStatusAndStatChangeQuality = 5, damageTargetDebuffQuality = 6, damageUserBuffQuality = 7,
damageAbsorbQuality = 8;
diff --git a/src/com/sneed/pkrandom/constants/Gen6Constants.java b/src/com/sneed/pkrandom/constants/Gen6Constants.java index f4b11bc..f72a925 100644 --- a/src/com/sneed/pkrandom/constants/Gen6Constants.java +++ b/src/com/sneed/pkrandom/constants/Gen6Constants.java @@ -192,6 +192,9 @@ public class Gen6Constants { } } + public static final int noDamageTargetTrappingEffect = 106, noDamageFieldTrappingEffect = 354, + damageAdjacentFoesTrappingEffect = 373; + public static final int noDamageStatusQuality = 1, noDamageStatChangeQuality = 2, damageStatusQuality = 4, noDamageStatusAndStatChangeQuality = 5, damageTargetDebuffQuality = 6, damageUserBuffQuality = 7, damageAbsorbQuality = 8; diff --git a/src/com/sneed/pkrandom/constants/Gen7Constants.java b/src/com/sneed/pkrandom/constants/Gen7Constants.java index ec6f80f..16d58e1 100644 --- a/src/com/sneed/pkrandom/constants/Gen7Constants.java +++ b/src/com/sneed/pkrandom/constants/Gen7Constants.java @@ -216,6 +216,9 @@ public class Gen7Constants { } } + public static final int noDamageTargetTrappingEffect = 106, noDamageFieldTrappingEffect = 354, + damageAdjacentFoesTrappingEffect = 373, damageTargetTrappingEffect = 384; + public static final int noDamageStatusQuality = 1, noDamageStatChangeQuality = 2, damageStatusQuality = 4, noDamageStatusAndStatChangeQuality = 5, damageTargetDebuffQuality = 6, damageUserBuffQuality = 7, damageAbsorbQuality = 8; diff --git a/src/com/sneed/pkrandom/pokemon/Move.java b/src/com/sneed/pkrandom/pokemon/Move.java index 712e7ef..944d607 100755 --- a/src/com/sneed/pkrandom/pokemon/Move.java +++ b/src/com/sneed/pkrandom/pokemon/Move.java @@ -52,6 +52,7 @@ public class Move { public boolean makesContact; public boolean isPunchMove; public boolean isSoundMove; + public boolean isTrapMove; // True for both binding moves (like Wrap) and trapping moves (like Mean Look) public int effectIndex; public int target; public double hitCount = 1; // not saved, only used in randomized move powers. diff --git a/src/com/sneed/pkrandom/romhandlers/Gen2RomHandler.java b/src/com/sneed/pkrandom/romhandlers/Gen2RomHandler.java index 03c57f7..faf7e87 100755 --- a/src/com/sneed/pkrandom/romhandlers/Gen2RomHandler.java +++ b/src/com/sneed/pkrandom/romhandlers/Gen2RomHandler.java @@ -682,6 +682,11 @@ public class Gen2RomHandler extends AbstractGBCRomHandler { case Gen2Constants.futureSightEffect:
move.criticalChance = CriticalChance.NONE;
break;
+
+ case Gen2Constants.bindingEffect:
+ case Gen2Constants.trappingEffect:
+ move.isTrapMove = true;
+ break;
}
if (Gen2Constants.increasedCritMoves.contains(move.number)) {
diff --git a/src/com/sneed/pkrandom/romhandlers/Gen3RomHandler.java b/src/com/sneed/pkrandom/romhandlers/Gen3RomHandler.java index fe851c3..79ed94b 100755 --- a/src/com/sneed/pkrandom/romhandlers/Gen3RomHandler.java +++ b/src/com/sneed/pkrandom/romhandlers/Gen3RomHandler.java @@ -1182,6 +1182,11 @@ public class Gen3RomHandler extends AbstractGBRomHandler { case Gen3Constants.damageRecoil33PercentEffect: move.recoilPercent = 33; break; + + case Gen3Constants.bindingEffect: + case Gen3Constants.trappingEffect: + move.isTrapMove = true; + break; } } diff --git a/src/com/sneed/pkrandom/romhandlers/Gen4RomHandler.java b/src/com/sneed/pkrandom/romhandlers/Gen4RomHandler.java index 28d9e69..2064a89 100755 --- a/src/com/sneed/pkrandom/romhandlers/Gen4RomHandler.java +++ b/src/com/sneed/pkrandom/romhandlers/Gen4RomHandler.java @@ -968,6 +968,11 @@ public class Gen4RomHandler extends AbstractDSRomHandler { case Gen4Constants.damageRecoil50PercentEffect:
move.recoilPercent = 50;
break;
+
+ case Gen4Constants.bindingEffect:
+ case Gen4Constants.trappingEffect:
+ move.isTrapMove = true;
+ break;
}
}
diff --git a/src/com/sneed/pkrandom/romhandlers/Gen5RomHandler.java b/src/com/sneed/pkrandom/romhandlers/Gen5RomHandler.java index 8048fb7..37bf291 100755 --- a/src/com/sneed/pkrandom/romhandlers/Gen5RomHandler.java +++ b/src/com/sneed/pkrandom/romhandlers/Gen5RomHandler.java @@ -551,6 +551,7 @@ public class Gen5RomHandler extends AbstractDSRomHandler { moves[i].name = moveNames.get(i);
moves[i].number = i;
moves[i].internalId = i;
+ moves[i].effectIndex = readWord(moveData, 16);
moves[i].hitratio = (moveData[4] & 0xFF);
moves[i].power = moveData[3] & 0xFF;
moves[i].pp = moveData[5] & 0xFF;
@@ -567,10 +568,12 @@ public class Gen5RomHandler extends AbstractDSRomHandler { moves[i].criticalChance = CriticalChance.INCREASED;
}
+ int internalStatusType = readWord(moveData, 8);
int flags = FileFunctions.readFullInt(moveData, 32);
moves[i].makesContact = (flags & 0x001) != 0;
moves[i].isPunchMove = (flags & 0x080) != 0;
moves[i].isSoundMove = (flags & 0x100) != 0;
+ moves[i].isTrapMove = (moves[i].effectIndex == Gen5Constants.trappingEffect || internalStatusType == 8);
int qualities = moveData[1];
int recoilOrAbsorbPercent = moveData[18];
if (qualities == Gen5Constants.damageAbsorbQuality) {
@@ -618,7 +621,6 @@ public class Gen5RomHandler extends AbstractDSRomHandler { moves[i].statChanges[statChange].percentChance = moveData[27 + statChange];
}
- int internalStatusType = readWord(moveData, 8);
// Exclude status types that aren't in the StatusType enum.
if (internalStatusType < 7) {
moves[i].statusType = StatusType.values()[internalStatusType];
diff --git a/src/com/sneed/pkrandom/romhandlers/Gen6RomHandler.java b/src/com/sneed/pkrandom/romhandlers/Gen6RomHandler.java index f11dfd3..bf6c813 100644 --- a/src/com/sneed/pkrandom/romhandlers/Gen6RomHandler.java +++ b/src/com/sneed/pkrandom/romhandlers/Gen6RomHandler.java @@ -602,6 +602,7 @@ public class Gen6RomHandler extends Abstract3DSRomHandler { moves[i].name = moveNames.get(i); moves[i].number = i; moves[i].internalId = i; + moves[i].effectIndex = readWord(moveData, 16); moves[i].hitratio = (moveData[4] & 0xFF); moves[i].power = moveData[3] & 0xFF; moves[i].pp = moveData[5] & 0xFF; @@ -618,10 +619,20 @@ public class Gen6RomHandler extends Abstract3DSRomHandler { moves[i].criticalChance = CriticalChance.INCREASED; } + int internalStatusType = readWord(moveData, 8); int flags = FileFunctions.readFullInt(moveData, 32); moves[i].makesContact = (flags & 0x001) != 0; moves[i].isPunchMove = (flags & 0x080) != 0; moves[i].isSoundMove = (flags & 0x100) != 0; + moves[i].isTrapMove = internalStatusType == 8; + switch (moves[i].effectIndex) { + case Gen6Constants.noDamageTargetTrappingEffect: + case Gen6Constants.noDamageFieldTrappingEffect: + case Gen6Constants.damageAdjacentFoesTrappingEffect: + moves[i].isTrapMove = true; + break; + } + int qualities = moveData[1]; int recoilOrAbsorbPercent = moveData[18]; if (qualities == Gen6Constants.damageAbsorbQuality) { @@ -673,7 +684,6 @@ public class Gen6RomHandler extends Abstract3DSRomHandler { moves[i].statChanges[statChange].percentChance = moveData[27 + statChange]; } - int internalStatusType = readWord(moveData, 8); // Exclude status types that aren't in the StatusType enum. if (internalStatusType < 7) { moves[i].statusType = StatusType.values()[internalStatusType]; diff --git a/src/com/sneed/pkrandom/romhandlers/Gen7RomHandler.java b/src/com/sneed/pkrandom/romhandlers/Gen7RomHandler.java index 440af77..8f256c2 100644 --- a/src/com/sneed/pkrandom/romhandlers/Gen7RomHandler.java +++ b/src/com/sneed/pkrandom/romhandlers/Gen7RomHandler.java @@ -674,6 +674,7 @@ public class Gen7RomHandler extends Abstract3DSRomHandler { moves[i].name = moveNames.get(i); moves[i].number = i; moves[i].internalId = i; + moves[i].effectIndex = readWord(moveData, 16); moves[i].hitratio = (moveData[4] & 0xFF); moves[i].power = moveData[3] & 0xFF; moves[i].pp = moveData[5] & 0xFF; @@ -690,10 +691,21 @@ public class Gen7RomHandler extends Abstract3DSRomHandler { moves[i].criticalChance = CriticalChance.INCREASED; } + int internalStatusType = readWord(moveData, 8); int flags = FileFunctions.readFullInt(moveData, 36); moves[i].makesContact = (flags & 0x001) != 0; moves[i].isPunchMove = (flags & 0x080) != 0; moves[i].isSoundMove = (flags & 0x100) != 0; + moves[i].isTrapMove = internalStatusType == 8; + switch (moves[i].effectIndex) { + case Gen7Constants.noDamageTargetTrappingEffect: + case Gen7Constants.noDamageFieldTrappingEffect: + case Gen7Constants.damageAdjacentFoesTrappingEffect: + case Gen7Constants.damageTargetTrappingEffect: + moves[i].isTrapMove = true; + break; + } + int qualities = moveData[1]; int recoilOrAbsorbPercent = moveData[18]; if (qualities == Gen7Constants.damageAbsorbQuality) { @@ -745,7 +757,6 @@ public class Gen7RomHandler extends Abstract3DSRomHandler { moves[i].statChanges[statChange].percentChance = moveData[27 + statChange]; } - int internalStatusType = readWord(moveData, 8); // Exclude status types that aren't in the StatusType enum. if (internalStatusType < 7) { moves[i].statusType = StatusType.values()[internalStatusType]; |