mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 02:38:02 +00:00
Compare commits
1 Commits
migrate-sp
...
cantTarget
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
71676a2781 |
@@ -442,9 +442,11 @@ public class CountersPutAi extends CountersAi {
|
||||
}
|
||||
sa.addDividedAllocation(c, amount);
|
||||
return decision;
|
||||
} else if (!hasSacCost) {
|
||||
// for Sacrifice costs, evaluate further to see if it's worth using the ability before the card dies
|
||||
return decision;
|
||||
} else {
|
||||
if (!hasSacCost) {
|
||||
// for Sacrifice costs, evaluate further to see if it's worth using the ability before the card dies
|
||||
return decision;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -682,12 +684,14 @@ public class CountersPutAi extends CountersAi {
|
||||
|| (sa.getRootAbility().isTrigger() && !sa.getRootAbility().isOptionalTrigger());
|
||||
|
||||
if (sa.usesTargeting()) {
|
||||
CardCollection list;
|
||||
CardCollection list = null;
|
||||
|
||||
if (sa.isCurse()) {
|
||||
list = ai.getOpponents().getCardsIn(ZoneType.Battlefield);
|
||||
} else {
|
||||
list = new CardCollection(ai.getCardsIn(ZoneType.Battlefield));
|
||||
}
|
||||
|
||||
list = CardLists.getTargetableCards(list, sa);
|
||||
|
||||
if (list.isEmpty() && isMandatoryTrigger) {
|
||||
@@ -703,8 +707,9 @@ public class CountersPutAi extends CountersAi {
|
||||
|| sa.getTargets().isEmpty()) {
|
||||
sa.resetTargets();
|
||||
return new AiAbilityDecision(0, AiPlayDecision.TargetingFailed);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (sa.isCurse()) {
|
||||
@@ -747,6 +752,8 @@ public class CountersPutAi extends CountersAi {
|
||||
final SpellAbility root = sa.getRootAbility();
|
||||
final Card source = sa.getHostCard();
|
||||
final String aiLogic = sa.getParamOrDefault("AILogic", "");
|
||||
boolean preferred = true;
|
||||
CardCollection list;
|
||||
final String amountStr = sa.getParamOrDefault("CounterNum", "1");
|
||||
final boolean divided = sa.isDividedAsYouChoose();
|
||||
final int amount = AbilityUtils.calculateAmount(source, amountStr, sa);
|
||||
@@ -768,11 +775,11 @@ public class CountersPutAi extends CountersAi {
|
||||
AiAbilityDecision decision = doChargeToCMCLogic(ai, sa);
|
||||
if (decision.willingToPlay()) {
|
||||
return decision;
|
||||
}
|
||||
if (mandatory) {
|
||||
} else if (mandatory) {
|
||||
return new AiAbilityDecision(50, AiPlayDecision.MandatoryPlay);
|
||||
} else {
|
||||
return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi);
|
||||
}
|
||||
return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi);
|
||||
}
|
||||
|
||||
if (!sa.usesTargeting()) {
|
||||
@@ -823,19 +830,19 @@ public class CountersPutAi extends CountersAi {
|
||||
}
|
||||
}
|
||||
|
||||
sa.resetTargets();
|
||||
|
||||
Iterable<Card> filteredField;
|
||||
if (sa.isCurse()) {
|
||||
filteredField = ai.getOpponents().getCardsIn(ZoneType.Battlefield);
|
||||
list = ai.getOpponents().getCardsIn(ZoneType.Battlefield);
|
||||
} else {
|
||||
filteredField = ai.getCardsIn(ZoneType.Battlefield);
|
||||
list = new CardCollection(ai.getCardsIn(ZoneType.Battlefield));
|
||||
}
|
||||
CardCollection list = CardLists.getTargetableCards(filteredField, sa);
|
||||
list = ComputerUtil.filterAITgts(sa, ai, list, false);
|
||||
int totalTargets = list.size();
|
||||
boolean preferred = true;
|
||||
list = CardLists.getTargetableCards(list, sa);
|
||||
|
||||
// Filter AI-specific targets if provided
|
||||
list = ComputerUtil.filterAITgts(sa, ai, list, false);
|
||||
|
||||
int totalTargets = list.size();
|
||||
|
||||
sa.resetTargets();
|
||||
while (sa.canAddMoreTarget()) {
|
||||
if (mandatory) {
|
||||
// When things are mandatory, gotta handle a little differently
|
||||
@@ -872,21 +879,27 @@ public class CountersPutAi extends CountersAi {
|
||||
if (choice == null && mandatory) {
|
||||
choice = Aggregates.random(list);
|
||||
}
|
||||
} else if (type.equals("M1M1")) {
|
||||
choice = ComputerUtilCard.getWorstCreatureAI(list);
|
||||
} else {
|
||||
choice = Aggregates.random(list);
|
||||
if (type.equals("M1M1")) {
|
||||
choice = ComputerUtilCard.getWorstCreatureAI(list);
|
||||
} else {
|
||||
choice = Aggregates.random(list);
|
||||
}
|
||||
}
|
||||
} else if (preferred) {
|
||||
list = ComputerUtil.getSafeTargets(ai, sa, list);
|
||||
choice = chooseBoonTarget(list, type);
|
||||
if (choice == null && mandatory) {
|
||||
choice = Aggregates.random(list);
|
||||
}
|
||||
} else if (type.equals("P1P1")) {
|
||||
choice = ComputerUtilCard.getWorstCreatureAI(list);
|
||||
} else {
|
||||
choice = Aggregates.random(list);
|
||||
if (preferred) {
|
||||
list = ComputerUtil.getSafeTargets(ai, sa, list);
|
||||
choice = chooseBoonTarget(list, type);
|
||||
if (choice == null && mandatory) {
|
||||
choice = Aggregates.random(list);
|
||||
}
|
||||
} else {
|
||||
if (type.equals("P1P1")) {
|
||||
choice = ComputerUtilCard.getWorstCreatureAI(list);
|
||||
} else {
|
||||
choice = Aggregates.random(list);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (choice != null && divided) {
|
||||
int alloc = Math.max(amount / totalTargets, 1);
|
||||
@@ -1081,7 +1094,8 @@ public class CountersPutAi extends CountersAi {
|
||||
Player ai = sa.getActivatingPlayer();
|
||||
GameEntity e = (GameEntity) params.get("Target");
|
||||
// for Card try to select not useless counter
|
||||
if (e instanceof Card c) {
|
||||
if (e instanceof Card) {
|
||||
Card c = (Card) e;
|
||||
if (c.getController().isOpponentOf(ai)) {
|
||||
if (options.contains(CounterEnumType.M1M1) && !c.hasKeyword(Keyword.UNDYING)) {
|
||||
return CounterEnumType.M1M1;
|
||||
@@ -1098,7 +1112,8 @@ public class CountersPutAi extends CountersAi {
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (e instanceof Player p) {
|
||||
} else if (e instanceof Player) {
|
||||
Player p = (Player) e;
|
||||
if (p.isOpponentOf(ai)) {
|
||||
if (options.contains(CounterEnumType.POISON)) {
|
||||
return CounterEnumType.POISON;
|
||||
@@ -1232,8 +1247,9 @@ public class CountersPutAi extends CountersAi {
|
||||
if (numCtrs < optimalCMC) {
|
||||
// If the AI has less counters than the optimal CMC, it should play the ability.
|
||||
return new AiAbilityDecision(100, AiPlayDecision.WillPlay);
|
||||
} else {
|
||||
// If the AI has enough counters or more than the optimal CMC, it should not play the ability.
|
||||
return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi);
|
||||
}
|
||||
// If the AI has enough counters or more than the optimal CMC, it should not play the ability.
|
||||
return new AiAbilityDecision(0, AiPlayDecision.CantPlayAi);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -639,7 +639,7 @@ public final class CardEdition implements Comparable<CardEdition> {
|
||||
* name - grouping #3
|
||||
* artist name - grouping #5
|
||||
*/
|
||||
"(^(.?[0-9A-Z-]+\\S?[A-Z☇]*)\\s)?([^@]*)( @(.*))?$"
|
||||
"(^(.?[0-9A-Z-]+\\S?[A-Z]*)\\s)?([^@]*)( @(.*))?$"
|
||||
);
|
||||
|
||||
ListMultimap<String, EditionEntry> cardMap = ArrayListMultimap.create();
|
||||
|
||||
@@ -577,6 +577,9 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
}
|
||||
|
||||
public final boolean payLife(final int lifePayment, final SpellAbility cause, final boolean effect) {
|
||||
return payLife(lifePayment, cause, effect, null);
|
||||
}
|
||||
public final boolean payLife(final int lifePayment, final SpellAbility cause, final boolean effect, Map<AbilityKey, Object> params) {
|
||||
// fast check for pay zero life
|
||||
if (lifePayment <= 0) {
|
||||
cause.setPaidLife(0);
|
||||
@@ -596,6 +599,9 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
if (cause.isReplacementAbility() && effect) {
|
||||
replaceParams.putAll(cause.getReplacingObjects());
|
||||
}
|
||||
if (params != null) {
|
||||
replaceParams.putAll(params);
|
||||
}
|
||||
switch (getGame().getReplacementHandler().run(ReplacementType.PayLife, replaceParams)) {
|
||||
case Replaced:
|
||||
return true;
|
||||
|
||||
@@ -83,8 +83,6 @@ public class StaticAbilityCantTarget {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else if (stAb.hasParam("AffectedZone")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
final Card source = spellAbility.getHostCard();
|
||||
|
||||
@@ -22,6 +22,7 @@ import java.util.Map;
|
||||
import com.google.common.collect.Iterables;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardLists;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.util.Localizer;
|
||||
|
||||
@@ -59,8 +60,17 @@ public class TriggerAttackerBlocked extends Trigger {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!matchesValidParam("ValidBlocker", runParams.get(AbilityKey.Blockers))) {
|
||||
return false;
|
||||
if (hasParam("ValidBlocker")) {
|
||||
@SuppressWarnings("unchecked")
|
||||
int count = CardLists.getValidCardCount(
|
||||
(Iterable<Card>) runParams.get(AbilityKey.Blockers),
|
||||
getParam("ValidBlocker"),
|
||||
getHostCard().getController(), getHostCard(), this
|
||||
);
|
||||
|
||||
if (count == 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -1,770 +0,0 @@
|
||||
{
|
||||
"a32x":{
|
||||
"CPU":"2x Cortex-A76 @ 2GHz 6x Cortex-A55 @ 2GHz",
|
||||
"SoC":"MediaTek Dimensity 720 (MT6853)"
|
||||
},
|
||||
"angler":{
|
||||
"CPU":"4x Cortex-A57 @ 1.95GHz 4x Cortex-A53 @ 1.55GHz",
|
||||
"SoC":"Snapdragon 810 MSM8994"
|
||||
},
|
||||
"ane":{
|
||||
"CPU":"4x Cortex-A54 @ 2.3GHz 4x Cortex-A54 @ 1.7GHz",
|
||||
"SoC":"HiSilicon Kirin 659"
|
||||
},
|
||||
"amar_row_wifi":{
|
||||
"CPU":"8x Cortex-A53 @ 1.8GHz",
|
||||
"SoC":"Mediatek MT8768"
|
||||
},
|
||||
"atlas":{
|
||||
"CPU":"-",
|
||||
"SoC":"Intel(R) Core(TM) i5-8200Y @ 1.3GHz"
|
||||
},
|
||||
"apq8084":{
|
||||
"CPU":"4x Krait 450 @ 2.65GHz",
|
||||
"SoC":"Snapdragon 805 APQ8084"
|
||||
},
|
||||
"atoll":{
|
||||
"CPU":"2x Kryo 465 Gold @ 2.3GHz 6x Kryo 465 Silver @ 1.8GHz",
|
||||
"SoC":"Snapdragon 720G (SM7125)"
|
||||
},
|
||||
"art-l29":{
|
||||
"CPU":"4x Cortex-A73 @ 2.2GHz 4x Cortex-A53 @ 1.7GHz",
|
||||
"SoC":"HiSilicon Kirin 710F"
|
||||
},
|
||||
"baylake":{
|
||||
"CPU":"Atom Z3745 @ 1.3GHz",
|
||||
"SoC":"Intel Atom Z3745"
|
||||
},
|
||||
"begonia":{
|
||||
"CPU":"2x Cortex-176 @ 2GHz 6x Cortex-A55 @ 2GHz",
|
||||
"SoC":"MediaTek Helios G90T MT6785T"
|
||||
},
|
||||
"blueline":{
|
||||
"CPU":"4x Kryo 385 Gold @ 2.8GHz 4x Kryo 385 Silver @ 1.75GHz",
|
||||
"SoC":"Snapdragon 845"
|
||||
},
|
||||
"bullhead":{
|
||||
"CPU":"4x Cortex-A57 @ 1.8GHz 4x Cortex-A53 @ 1.44GHz",
|
||||
"SoC":"Snapdragon 808"
|
||||
},
|
||||
"capri":{
|
||||
"CPU":"2x Cortex-A9 @ 1.2GHz",
|
||||
"SoC":"Broadcom BCM28155"
|
||||
},
|
||||
"cepheus":{
|
||||
"CPU":"1x Kryo 485 Gold @ 2.8GHz 3x Kryo 485 Gold @ 2.4GHz 4x Kryo 485 Silver @ 1.7GHz",
|
||||
"SoC":"Snapdragon 855 SM8150"
|
||||
},
|
||||
"cheryl":{
|
||||
"CPU":"4x Kryo 280 HP @ 2.45GHz 4x Kryo 280 LP @ 1.9GHz",
|
||||
"SoC":"Snapdragon 835 MSM8998"
|
||||
},
|
||||
"cheryl2":{
|
||||
"CPU":"4x Kryo 385 Gold @ 2.8GHz 4x Kryo 385 Silver @ 1.8GHz",
|
||||
"SoC":"Snapdragon 845 SDM845"
|
||||
},
|
||||
"cheetah":{
|
||||
"CPU":"2x Cortex-X1 @ 2.8GHz 2x Cortex-A78 @ 2.3GHz 4x Cortex-A55 @ 1.8GHz",
|
||||
"SoC":"Google Tensor G2 (GS201)"
|
||||
},
|
||||
"comet":{
|
||||
"CPU":"1x Cortex-X4 @ 31.GHz 3x Cortex-A720 @ 2.6GHz 4x Cortex-A520 @ 1.95GHz",
|
||||
"SoC":"Google Tensor G4 (GS401)"
|
||||
},
|
||||
"eureka":{
|
||||
"CPU":"6x Cortex-A78C @ 2.3 GHz",
|
||||
"SoC":"Snapdragon XR2 Gen 2 (SM8550)"
|
||||
},
|
||||
"felix":{
|
||||
"CPU":"2x Cortex-X1 @ 2.8GHz 2x Cortex-A78 @ 2.3GHz 4x Cortex-A55 @ 1.8GHz",
|
||||
"SoC":"Google Tensor G2 (GS201)"
|
||||
},
|
||||
"tangorpro":{
|
||||
"CPU":"2x Cortex-X1 @ 2.8GHz 2x Cortex-A78 @ 2.3GHz 4x Cortex-A55 @ 1.8GHz",
|
||||
"SoC":"Google Tensor G2 (GS201)"
|
||||
},
|
||||
"codina":{
|
||||
"CPU":"2x Cortex-A9 @ 1.0GHz",
|
||||
"SoC":"NovaThor U8500"
|
||||
},
|
||||
"clovertrail":{
|
||||
"CPU":"2x Atom Z2560 @ 1.6GHz",
|
||||
"SoC":"Intel Atom Z2560"
|
||||
},
|
||||
"clt":{
|
||||
"CPU":"4x Cortex-A73 @ 2.36GHz 4x Cortex-A53 @ 1.8GHz",
|
||||
"SoC":"HiSilicon Kirin 970"
|
||||
},
|
||||
"els":{
|
||||
"CPU":"4x Cortex-A76 @ 2.8GHz 4x Cortex-A55 @ 1.9GHz",
|
||||
"SoC":"HiSilicon Kirin 990 5G"
|
||||
},
|
||||
"dandelion":{
|
||||
"CPU":"8x Cortex-A54 @ 1.5GHz",
|
||||
"SoC":"MediaTek Helio G25 (MT6762G)"
|
||||
},
|
||||
"darcy":{
|
||||
"CPU":"4x ARM Cortex-A53 4x ARM Cortex-A57",
|
||||
"SoC":"nVIDIA Tegra X1 T210"
|
||||
},
|
||||
"db8520h":{
|
||||
"CPU":"2x Cortex-A9 @ 1.0GHz",
|
||||
"SoC":"NovaThor U8500"
|
||||
},
|
||||
"dragon":{
|
||||
"CPU":"4x Cortex-A57 @ 1.9GHz 4x Cortex-A53 @ 1.3GHz",
|
||||
"SoC":"nVIDIA Tegra X1 T210"
|
||||
},
|
||||
"douglas":{
|
||||
"CPU":"4x Cortex-A53 @ 1.3GHz",
|
||||
"SoC":"MediaTek MT8163"
|
||||
},
|
||||
"eeepad":{
|
||||
"CPU":"4x Atom Z2520 @ 1.2GHz",
|
||||
"SoC":"Intel Atom Z2520"
|
||||
},
|
||||
"endeavoru":{
|
||||
"CPU":"4x Cortex-A9 @ 1.5GHz 1x Cortex-A9 @ 0.5GHz",
|
||||
"SoC":"nVIDIA Tegra 3 AP33"
|
||||
},
|
||||
"eml":{
|
||||
"CPU":"4x Cortex-A73 @ 2.36GHz 4x Cortex-A53 @ 1.8GHz",
|
||||
"SoC":"HiSilicon Kirin 970"
|
||||
},
|
||||
"eve":{
|
||||
"CPU":"i5-7Y56 @ 1.2GHz",
|
||||
"SoC":"Ambel Lake-Y / Kaby Lake-U/Y"
|
||||
},
|
||||
"eva-l19":{
|
||||
"CPU":"4x Cortex-A72 @ 2.5GHz 4x Cortex-A53 @ 1.8GHz",
|
||||
"SoC":"HiSilicon Kirin 955"
|
||||
},
|
||||
"exynos990":{
|
||||
"CPU":"4x Cortex-A55 @ 2GHz 2x Cortex-A76 @ 2.5GHz 2x Exynos M5 @ 2.7GHz",
|
||||
"SoC":"Exynos 990"
|
||||
},
|
||||
"exynos9611":{
|
||||
"CPU":"4x Cortex-A73 @ 2.3GHz 4x Cortex-A53 @ 1.7GHz",
|
||||
"SoC":"Exynos 7 Octa (9611)"
|
||||
},
|
||||
"exynos2100":{
|
||||
"CPU":"1x Cortex-X1 @ 2.9GHz 3x Cortex-A78 @ 2.8GHz 4x Cortex-A55 @ 2.2GHz",
|
||||
"SoC":"Exynos 2100"
|
||||
},
|
||||
"exynos9810":{
|
||||
"CPU":"4x Exynos M3 @ 2.7GHz 4x Cortex-A55 @ 1.8GHz",
|
||||
"SoC":"Exynos 9 (9810)"
|
||||
},
|
||||
"exynos9820":{
|
||||
"CPU":"2 Exynos M4 @ 2.7GHz 2x Cortex-A75 @ 2.3GHz 4x Cortex-A55 @ 1.9GHz",
|
||||
"SoC":"Exynos 9 (9820)"
|
||||
},
|
||||
"ford":{
|
||||
"CPU":"4x Cortex-A7 @ 1.3GHz",
|
||||
"SoC":"MediaTek MT8127"
|
||||
},
|
||||
"flo":{
|
||||
"CPU":"4x Krait 300 @ 1.5GHz",
|
||||
"SoC":"Snapdragon 600 APQ8064-FLO"
|
||||
},
|
||||
"flame":{
|
||||
"CPU":"1x Kryo 485 Gold @ 2.8GHz 3x Kryo 485 Gold @ 2.4GHz 4x Kryo 485 Silver @ 1.7GHz",
|
||||
"SoC":"Snapdragon 855 SM8150"
|
||||
},
|
||||
"fleur":{
|
||||
"CPU":"2x Cortex-A76 @ 2GHz 6x Cortex-A55 @ 2GHz",
|
||||
"SoC":"MediaTek Helio G96 (MT6781)"
|
||||
},
|
||||
"flounder":{
|
||||
"CPU":"2x nVidia Denver @ 2.5GHz",
|
||||
"SoC":"nVIDIA Tegra K1 T132"
|
||||
},
|
||||
"g3u":{
|
||||
"CPU":"2x Cortex-A5 @ 1.0GHz",
|
||||
"SoC":"Snapdragon S4 Play MSM8225"
|
||||
},
|
||||
"gee":{
|
||||
"CPU":"4x Krait 300 @ 1.5GHz",
|
||||
"SoC":"Snapdragon S4 Pro APQ8064"
|
||||
},
|
||||
"grouper":{
|
||||
"CPU":"4x Cortex-A9 @ 1.3GHz 1x Cortex-A9 @ 0.5GHz",
|
||||
"SoC":"nVIDIA Tegra 3 T30L"
|
||||
},
|
||||
"hammerhead":{
|
||||
"CPU":"4x Krait 400 @ 2.26GHz",
|
||||
"SoC":"Snapdragon 800 MSM8974"
|
||||
},
|
||||
"hawaii_ss_kylepro":{
|
||||
"CPU":"2x Cortex-A9 @ 1.2GHz",
|
||||
"SoC":"Broadcom BCM21664T"
|
||||
},
|
||||
"herring":{
|
||||
"CPU":"1x Cortex-A8 @ 1.0GHz",
|
||||
"SoC":"Exynos 3 Single 3110"
|
||||
},
|
||||
"hollywood":{
|
||||
"CPU":"4x Kryo 280 HP @ 2.4GHz 4x Kryo 280 LP @ 1.9GHz",
|
||||
"SoC":"Snapdragon XR2"
|
||||
},
|
||||
"k6853v1_64_titan":{
|
||||
"CPU":"2x Cortex-A76 @ 2Ghz 6x Cortex-A55 @ 2GHz",
|
||||
"SoC":"MediaTek Dimensity 720 (MT6853)"
|
||||
},
|
||||
"kalama":{
|
||||
"CPU":"1x Cortex-X3 @ 3.3GHz 2x Cortex-A710 @ 2.8GHz 2x Cortex-A715 @ 2.8GHz 3x Cortex-A510 @ 2.0GHz",
|
||||
"SoC":"Snapdragon 8 Gen 2 (SM8550)"
|
||||
},
|
||||
"kona":{
|
||||
"CPU":"1x Cortex-A77 @ 3.1GHz 3x Cortex-A77 @ 2.4GHz 4x Kryo 585 Silver @ 1.8GHz",
|
||||
"SoC":"Snapdragon 865 SM8250"
|
||||
},
|
||||
"kohaku":{
|
||||
"CPU":"i5-10210U @ 1.6GHz",
|
||||
"SoC":"Comet Lake-U"
|
||||
},
|
||||
"lahaina":{
|
||||
"CPU":"1x Cortex-X1 @ 2.8GHz 3x Cortex-A78 @ 2.4GHz 4x Cortex-A55 @ 1.8GHz",
|
||||
"SoC":"Snapdragon 888"
|
||||
},
|
||||
"liara":{
|
||||
"CPU":"5 Compute cores 2C+3G",
|
||||
"SoC":"AMD A4-9120C Radeon R4"
|
||||
},
|
||||
"lito":{
|
||||
"CPU":"2x Cortex-A77 @ 2.1GHz 6x Kryo 560 Silver @ 1.7GHz",
|
||||
"SoC":"Snapdragon 690 SM6350"
|
||||
},
|
||||
"lya":{
|
||||
"CPU":"2x Cortex-A76 @ 2.6GHz 2x Cortex-A76 @ 1.9GHz 4x Cortex-A55 @ 1.8GHz",
|
||||
"SoC":"HiSilicon Kirin 980"
|
||||
},
|
||||
"lyo-l01":{
|
||||
"CPU":"4x Cortex-153 @ 1.3GHz",
|
||||
"SoC":"MediaTek MT6735"
|
||||
},
|
||||
"mako":{
|
||||
"CPU":"4x Krait @ 1.5GHz",
|
||||
"SoC":"Snapdragon S4 Pro APQ8064"
|
||||
},
|
||||
"marlin":{
|
||||
"CPU":"2x Kryo HP @ 2.15GHz 2x Kryo @ 1.6GHz",
|
||||
"SoC":"Snapdragon 821 MSM8996 Pro"
|
||||
},
|
||||
"med":{
|
||||
"CPU":"8x Cortex-A54 @ 1.5GHz",
|
||||
"SoC":"MediaTek MT6762R"
|
||||
},
|
||||
"mocha":{
|
||||
"CPU":"4x Cortex-A15 @2.2GHz",
|
||||
"SoC":"nVIDIA Tegra K1 T124"
|
||||
},
|
||||
"msm8225":{
|
||||
"CPU":"2x Cortex-A5 @ 1.2GHz",
|
||||
"SoC":"Snapdragon S4 MSM8225"
|
||||
},
|
||||
"msm8226":{
|
||||
"CPU":"4x Cortex-A7 @ 1.19GHz",
|
||||
"SoC":"Snapdragon 400 MSM8226"
|
||||
},
|
||||
"msm8625":{
|
||||
"CPU":"2x Cortex-A5 @ 1.2GHz",
|
||||
"SoC":"Snapdragon S4 MSM8625"
|
||||
},
|
||||
"MSM8227":{
|
||||
"CPU":"2x Krait @ 1GHz",
|
||||
"SoC":"Snapdragon S4 Plus MSM8227"
|
||||
},
|
||||
"msm8627":{
|
||||
"CPU":"2x Krait @ 1GHz",
|
||||
"SoC":"Snapdragon S4 Plus MSM8627"
|
||||
},
|
||||
"apq8030":{
|
||||
"CPU":"2x Krait @ 1.2GHz",
|
||||
"SoC":"Snapdragon S4 Plus APQ8030"
|
||||
},
|
||||
"msm8230":{
|
||||
"CPU":"2x Krait @ 1.2GHz",
|
||||
"SoC":"Snapdragon S4 Plus MSM8230"
|
||||
},
|
||||
"msm8660_surf":{
|
||||
"CPU":"2x Scorpion @ 1.5GHz",
|
||||
"SoC":"Snapdragon S3 MSM8260"
|
||||
},
|
||||
"msm8630":{
|
||||
"CPU":"2x Krait @ 1.2GHz",
|
||||
"SoC":"Snapdragon S4 Plus MSM8630"
|
||||
},
|
||||
"msm8930":{
|
||||
"CPU":"2x Krait @ 1.2GHz",
|
||||
"SoC":"Snapdragon S4 Plus MSM8930"
|
||||
},
|
||||
"msm8937":{
|
||||
"CPU":"4x Cortex-A53 @ 1.4GHz",
|
||||
"SoC":"Snapdragon 425 MSM8917"
|
||||
},
|
||||
"apq8060a":{
|
||||
"CPU":"2x Krait @ 1.5GHz",
|
||||
"SoC":"Snapdragon S4 Plus APQ8060A"
|
||||
},
|
||||
"msm8260a":{
|
||||
"CPU":"2x Krait @ 1.5GHz",
|
||||
"SoC":"Snapdragon S4 Plus MSM8260A"
|
||||
},
|
||||
"msm8660a":{
|
||||
"CPU":"2x Krait @ 1.5GHz",
|
||||
"SoC":"Snapdragon S4 Plus MSM8660A"
|
||||
},
|
||||
"msm8960":{
|
||||
"CPU":"2x Krait @ 1.5GHz",
|
||||
"SoC":"Snapdragon S4 Plus MSM8960"
|
||||
},
|
||||
"msm8260a-pro":{
|
||||
"CPU":"2x Krait 300 @ 1.7GHz",
|
||||
"SoC":"Snapdragon S4 Pro MSM8260A Pro"
|
||||
},
|
||||
"msm8960t":{
|
||||
"CPU":"2x Krait 300 @ 1.7GHz",
|
||||
"SoC":"Snapdragon S4 Pro MSM8960T"
|
||||
},
|
||||
"msm8960t-pro":{
|
||||
"CPU":"2x Krait 300 @ 1.7GHz",
|
||||
"SoC":"Snapdragon S4 Pro MSM8960T Pro"
|
||||
},
|
||||
"msm8960ab":{
|
||||
"CPU":"2x Krait 300 @ 1.7GHz",
|
||||
"SoC":"Snapdragon S4 Pro MSM8960AB"
|
||||
},
|
||||
"msm8960dt":{
|
||||
"CPU":"2x Krait 300 @ 1.7GHz",
|
||||
"SoC":"Snapdragon S4 Pro MSM8960DT"
|
||||
},
|
||||
"apq8064":{
|
||||
"CPU":"4x Krait 300 @ 1.5GHz",
|
||||
"SoC":"Snapdragon 600 APQ8064"
|
||||
},
|
||||
"msm8916":{
|
||||
"CPU":"4x Cortex-A53 @ 1.2GHz",
|
||||
"SoC":"Snapdragon 410 MSM8916"
|
||||
},
|
||||
"msm8953":{
|
||||
"CPU":"8x Cortex-A53 @ 2.0GHz",
|
||||
"SoC":"Snapdragon 625 MSM8953"
|
||||
},
|
||||
"msm8952":{
|
||||
"CPU":"8x Cortex-A53 @ 1.2GHz",
|
||||
"SoC":"Snapdragon 617 MSM8952"
|
||||
},
|
||||
"msm8956":{
|
||||
"CPU":"2x Cortex-A72 @ 1.8GHz 4x Cortex-A53 @ 1.4GHz",
|
||||
"SoC":"Snapdragon 650 MSM8956"
|
||||
},
|
||||
"msm8974":{
|
||||
"CPU":"4x Krait 400 @ 2.15GHz",
|
||||
"SoC":"Snapdragon 800 MSM8974"
|
||||
},
|
||||
"msm8974pro-ab":{
|
||||
"CPU":"4x Krait 400 @ 2.26GHz",
|
||||
"SoC":"Snapdragon 801 MSM8974PRO-AB"
|
||||
},
|
||||
"msm8974pro-ac":{
|
||||
"CPU":"4x Krait 400 @ 2.45GHz",
|
||||
"SoC":"Snapdragon 801 MSM8974AC"
|
||||
},
|
||||
"msm8976":{
|
||||
"CPU":"4x Cortex-A53 @ 1.4GHz 4x Cortex-A72 @ 1.8GHz",
|
||||
"SoC":"Snapdragon 652 MSM8976"
|
||||
},
|
||||
"msm8976pro":{
|
||||
"CPU":"4x Cortex-A53 @ 1.4GHz 4x Cortex-A72 @ 1.9GHz",
|
||||
"SoC":"Snapdragon 653 MSM8976 Pro"
|
||||
},
|
||||
"msm8992":{
|
||||
"CPU":"4x Cortex-A57 @ 1.8GHz 4x Cortex-A53 @ 1.4GHz",
|
||||
"SoC":"Snapdragon 808 MSM8992"
|
||||
},
|
||||
"msm8994":{
|
||||
"CPU":"4x Cortex-A57 @ 1.95GHz 4x Cortex-A53 @ 1.5GHz",
|
||||
"SoC":"Snapdragon 810 MSM8994"
|
||||
},
|
||||
"msm8996":{
|
||||
"CPU":"2x Kryo HP @ 1.8GHz 2x Kryo LP @ 1.36GHz",
|
||||
"SoC":"Snapdragon 820 MSM8996"
|
||||
},
|
||||
"msm8996pro":{
|
||||
"CPU":"2x Kryo HP @ 2.34GHz 2x Kryo LP @ 2.18GHz",
|
||||
"SoC":"Snapdragon 821 MSM8996 Pro"
|
||||
},
|
||||
"msm8998":{
|
||||
"CPU":"4x Kryo 280 HP @ 2.4GHz 4x Kryo 280 LP @ 1.9GHz",
|
||||
"SoC":"Snapdragon 835 MSM8998"
|
||||
},
|
||||
"msmnile":{
|
||||
"CPU":"1x Kryo 485 Gold @ 2.8GHz 3x Kryo 485 Gold @ 2.4GHz 4x Kryo 485 Silver @ 1.8GHz",
|
||||
"SoC":"Snapdragon 855 SM8150"
|
||||
},
|
||||
"mt6795t":{
|
||||
"CPU":"8x Cortex-A53 @ 2.1GHz",
|
||||
"SoC":"MediaTek Helio X10 MT6795T"
|
||||
},
|
||||
"mt6797m":{
|
||||
"CPU":"2x Cortex-A72 @ 2.1GHz 4x Cortex-A53 @ 1.85GHz 4x Cortex-A53 @ 1.4GHz",
|
||||
"SoC":"MediaTek Helio X20 MT6797M"
|
||||
},
|
||||
"mt6750t":{
|
||||
"CPU":"8x Cortex-A53 @ 1.5GHz",
|
||||
"SoC":"MediaTek MT6750T"
|
||||
},
|
||||
"mx5":{
|
||||
"CPU":"8x Cortex-A53 @ 2.1GHz",
|
||||
"SoC":"MediaTek Helio X10 MT6795T"
|
||||
},
|
||||
"mtk6575":{
|
||||
"CPU":"1x Cortex-A9 @ 1.0GHz",
|
||||
"SoC":"MediaTek MT6575"
|
||||
},
|
||||
"noh":{
|
||||
"CPU":"4x Cortex-A77 @ 3.1GHz 4x Cortex-A55 @ 2.0GHz",
|
||||
"SoC":"HiSilicon Kirin 9000"
|
||||
},
|
||||
"sdm710":{
|
||||
"CPU":"2x Kryo 385 Gold @ 2.2GHz 6x Kryo 385 Silver @ 1.7GHz",
|
||||
"SoC":"Snapdragon 710 SDM710"
|
||||
},
|
||||
"sdm845":{
|
||||
"CPU":"4x Kryo 385 Gold @ 2.8GHz 4x Kryo 385 Silver @ 1.7GHz",
|
||||
"SoC":"Snapdragon 845 SDM845"
|
||||
},
|
||||
"monterey":{
|
||||
"CPU":"4x Kryo 280 HP @ 2.45GHz 4x Kryo 280 LP @ 1.9GHz",
|
||||
"SoC":"Snapdragon 835 MSM8998"
|
||||
},
|
||||
"oriole":{
|
||||
"CPU":"2x Cortex-X1 @ 2.8GHz 2x Cortex-A76 @ 2.2GHz 4x Cortex-A55 @ 1.8GHz",
|
||||
"SoC":"Google Tensor (Whitechapel)"
|
||||
},
|
||||
"oppo6779_18073":{
|
||||
"CPU":"2x Cortex-A75 @ 2.2GHz 6x Cortex-A55 @ 2GHz",
|
||||
"SoC":"Mediatek MT6779 Helio P90"
|
||||
},
|
||||
"gt-p7510":{
|
||||
"CPU":"2x Cortex-A9 @ 1.0GHz",
|
||||
"SoC":"nVIDIA Tegra 2 T20"
|
||||
},
|
||||
"pacific":{
|
||||
"CPU":"2x @ 2.1GHz 2x @ 1.6GHz",
|
||||
"SoC":"Snapdragon 820E Embedded"
|
||||
},
|
||||
"piranha":{
|
||||
"CPU":"2x Cortex-A9 @ 1.0GHz",
|
||||
"SoC":"Texas Instruments OMAP4430"
|
||||
},
|
||||
"pro5":{
|
||||
"CPU":"4xCortex-56 @ 2.1GHz 4x Cortex-53 @ 1.5GHz",
|
||||
"SoC":"Exynos 7 Octa 7420"
|
||||
},
|
||||
"pro7plus":{
|
||||
"CPU":"2x Cortex-A73 @ 2.6GHz 4x Cortex-A53 @ 2.2GHz 4x Cortex-A35 @ 1.9GHz",
|
||||
"SoC":"MediaTek Helio X30 MT6799"
|
||||
},
|
||||
"pxa986":{
|
||||
"CPU":"2x Cortex-A9 @ 1.2GHz",
|
||||
"SoC":"Marvell PXA988"
|
||||
},
|
||||
"pxa19xx":{
|
||||
"CPU":"4x Cortex-A53 @ 1.25GHz",
|
||||
"SoC":"Maxvell Armada PXA1908"
|
||||
},
|
||||
"rhea_ss_corsicass":{
|
||||
"CPU":"1x Cortex-A9 @ 0.9GHz",
|
||||
"SoC":"Broadcom BCM21654"
|
||||
},
|
||||
"panther":{
|
||||
"CPU":"1x Cortex-X1 @ 2.8GHz 2x Cortex-A78 @ 2.3GHz 4x Cortex-A55 @ 1.8GHz",
|
||||
"SoC":"Google Tensor G2"
|
||||
},
|
||||
"prada":{
|
||||
"CPU":"4x Cortex-A53 @ 1.4 GHz 4x Cortex-A53 @ 1.1GHz",
|
||||
"SoC":"Snapdragon 430 MSM8937"
|
||||
},
|
||||
"pro6plus":{
|
||||
"CPU":"4x Exynos M1 @ 1.97GHz 4x Cortex-A53 @ 1.48GHz",
|
||||
"SoC":"Exynos 8 Octa 8890"
|
||||
},
|
||||
"universal3110":{
|
||||
"CPU":"1x Cortex-A8 @ 1.2GHz",
|
||||
"SoC":"Exynos 3 Single 3110"
|
||||
},
|
||||
"universal9820":{
|
||||
"CPU":"2x Exynos M4 @ 2.7GHz 2x Cortex-A75 @ 2.3GHz 4x Cortex-A55 @ 1.95GHz",
|
||||
"SoC":"Exynos 9 9820"
|
||||
},
|
||||
"redfin":{
|
||||
"CPU":"2x Kryo 475 Gold @ 2.4GHz 2x Kryo 475 Gold 2.2GHz 6x Kryo 475 Silver @ 1.8GHz ",
|
||||
"SoC":"Snapdragon 765/765G"
|
||||
},
|
||||
"s5e9925":{
|
||||
"CPU":"1x Cortex-X2 @ 2.8GHZ 3x Cortex-A710 @ 2.5GHz 4x Cortex-A510 @ 1.8GHz",
|
||||
"SoC":"Exynos 2200"
|
||||
},
|
||||
"saturn":{
|
||||
"CPU":"4x Krait 450 @ 2.45GHz",
|
||||
"SoC":"Snapdragon 805 APQ8084"
|
||||
},
|
||||
"sailfish":{
|
||||
"CPU":"2x Kryo HP @ 2.15GHz 2x Kryo @ 1.6GHz",
|
||||
"SoC":"Snapdragon 821 MSM8996 Pro"
|
||||
},
|
||||
"sdm660":{
|
||||
"CPU":"4x Kryo 260 HP @ 2.2GHz 4x Kryo 260 LP @ 1.8GHz",
|
||||
"SoC":"Snapdragon 660"
|
||||
},
|
||||
"sc-02b":{
|
||||
"CPU":"1x Cortex-A8 @ 1.2GHz",
|
||||
"SoC":"Exynos 3 Single 3110"
|
||||
},
|
||||
"sch-i905":{
|
||||
"CPU":"2x Cortex-A9 @ 1.0GHz",
|
||||
"SoC":"nVIDIA Tegra 2 T20"
|
||||
},
|
||||
"sc7730s":{
|
||||
"CPU":"4x Cortex-A7 @ 1.3GHz",
|
||||
"SoC":"Spreadtrum SC7730S"
|
||||
},
|
||||
"shamu":{
|
||||
"CPU":"4x Krai 450 @ 2.65GHz",
|
||||
"SoC":"Snapdragon 805 APQ8084AB"
|
||||
},
|
||||
"shiba":{
|
||||
"CPU":"1x Cortex-X3 @ 2.9GHz 4x Cortex-A715 @ 2.3GHz 4x Cortex-A510 @ 1.7GHz",
|
||||
"SoC":"Google Tensor G3 (GS301)"
|
||||
},
|
||||
"sm6150":{
|
||||
"CPU":"2x Kryo 460 Gold @ 2GHz 6x 460 Kryo Silver @ 1.7GHz",
|
||||
"SoC":"Snapdragon 675 SM6150"
|
||||
},
|
||||
"smdkc110":{
|
||||
"CPU":"1x Cortex-A8 @ 1.2GHz",
|
||||
"SoC":"Exynos 3 Single 3110"
|
||||
},
|
||||
"sun":{
|
||||
"CPU":"2x Oryon @ 4.5GHz 6x Oryon @ 3.5GHz",
|
||||
"SoC":"Snapdragon 9 Elite (SM8750)"
|
||||
},
|
||||
"ums512_25c10": {
|
||||
"CPU":"2 Cortex-A75 @2GHz 6x Cortex-A55 @ 2 GHz",
|
||||
"SoC":"Unisoc Tiger T618"
|
||||
},
|
||||
"universal3250":{
|
||||
"CPU":"2x Cortex-A7 @ 1.0GHz",
|
||||
"SoC":"Exynos 2 Dual 3250"
|
||||
},
|
||||
"universal3470":{
|
||||
"CPU":"4x Cortex-A7 @ 1.4GHz",
|
||||
"SoC":"Exynos 3 Quad 3470"
|
||||
},
|
||||
"universal3475":{
|
||||
"CPU":"4x Cortex-A7 @ 1.3GHz",
|
||||
"SoC":"Exynos 3 Quad 3475"
|
||||
},
|
||||
"universal4210":{
|
||||
"CPU":"2x Cortex-A9 @ 1.4GHz",
|
||||
"SoC":"Exynos 4 Dual 4210"
|
||||
},
|
||||
"universal4212":{
|
||||
"CPU":"2x Cortex-A9 @ 1.5GHz",
|
||||
"SoC":"Exynos 4 Dual 4212"
|
||||
},
|
||||
"universal4412":{
|
||||
"CPU":"4x Cortex-A9 @ 1.4GHz",
|
||||
"SoC":"Exynos 4 Quad 4412"
|
||||
},
|
||||
"smdk4x12":{
|
||||
"CPU":"4x Cortex-A9 @ 1.4GHz",
|
||||
"SoC":"Exynos 4 Quad 4412"
|
||||
},
|
||||
"universal4415":{
|
||||
"CPU":"4x Cortex-A9 @ 1.5GHz",
|
||||
"SoC":"Exynos 4 Quad 4415"
|
||||
},
|
||||
"universal5250":{
|
||||
"CPU":"2x Cortex-A15 @ 1.7GHz",
|
||||
"SoC":"Exynos 5 Dual 5250"
|
||||
},
|
||||
"universal5260":{
|
||||
"CPU":"2x Cortex-A15 @ 1.7GHz 4x Cortex-A7 @ 1.3GHz",
|
||||
"SoC":"Exynos 5 Hexa 5260"
|
||||
},
|
||||
"universal5410":{
|
||||
"CPU":"4x Cortex-A15 @ 1.6GHz 4x Cortex-A7 @ 1.2GHz",
|
||||
"SoC":"Exynos 5 Octa 5410"
|
||||
},
|
||||
"universal5420":{
|
||||
"CPU":"4x Cortex-A15 @ 1.9GHz 4x Cortex-A7 @ 1.3GHz",
|
||||
"SoC":"Exynos 5 Octa 5420"
|
||||
},
|
||||
"universal5422":{
|
||||
"CPU":"4x Cortex-A15 @ 2.1GHz 4x Cortex-A7 @ 1.5GHz",
|
||||
"SoC":"Exynos 5 Octa 5422"
|
||||
},
|
||||
"universal5430":{
|
||||
"CPU":"4x Cortex-A15 @ 1.8GHz 4x Cortex-A7 @ 1.3GHz",
|
||||
"SoC":"Exynos 5 Octa 5430"
|
||||
},
|
||||
"universal5800":{
|
||||
"CPU":"4x Cortex-A15 @ 2.0GHz 4x Cortex-A7 @ 1.3GHz",
|
||||
"SoC":"Exynos 5 Octa 5800"
|
||||
},
|
||||
"universal5433":{
|
||||
"CPU":"4x Cortex-A57 @ 1.9GHz 4x Cortex-A53 @ 1.3GHz",
|
||||
"SoC":"Exynos 7 Octa 5433"
|
||||
},
|
||||
"universal7420":{
|
||||
"CPU":"4x Cortex-A57 @ 2.1GHz 4x Cortex-A53 @ 1.5GHz",
|
||||
"SoC":"Exynos 7 Octa 7420"
|
||||
},
|
||||
"universal7570":{
|
||||
"CPU":"8x Cortex-A53 @ 1.4GHz",
|
||||
"SoC":"Exynos 7 Quad 7570"
|
||||
},
|
||||
"universal7580":{
|
||||
"CPU":"8x Cortex-A53 @ 1.6GHz",
|
||||
"SoC":"Exynos 7 Octa 7580"
|
||||
},
|
||||
"universal7870":{
|
||||
"CPU":"8x Cortex-A53 @ 1.6GHz",
|
||||
"SoC":"Exynos 7 Octa 7870"
|
||||
},
|
||||
"universal7880":{
|
||||
"CPU":"8x Cortex-A53 @ 1.9GHz",
|
||||
"SoC":"Exynos 7 Octa 7880"
|
||||
},
|
||||
"universal7872":{
|
||||
"CPU":"2x Cortex-A73 @ 2.0GHz 4x Cortex-A53 @ 1.6GHz",
|
||||
"SoC":"Exynos 7 Hexa 7872"
|
||||
},
|
||||
"universal7885":{
|
||||
"CPU":"2x Cortex-A73 @ 2.2GHz 6x Cortex-A53 @ 1.6GHz",
|
||||
"SoC":"Exynos 7 Octa 7885"
|
||||
},
|
||||
"universal8890":{
|
||||
"CPU":"4x Cortex-A53 @ 1.6GHz 4x Samsung Exynos M1 @ 2.6GHz",
|
||||
"SoC":"Exynos 8 Octa 8890"
|
||||
},
|
||||
"universal8895":{
|
||||
"CPU":"4x Samsung Exynos M1 @ 2.3GHz 4x Cortex-A53 @ 1.6GHz",
|
||||
"SoC":"Exynos 9 Octa 8895"
|
||||
},
|
||||
"universal9810":{
|
||||
"CPU":"4x Samsung Exynos M3 @ 2.8GHz 4x Cortex-A55 @ 1.7GHz",
|
||||
"SoC":"Exynos 9 Series 9810"
|
||||
},
|
||||
"universal9825":{
|
||||
"CPU":"2x Samsung Exynos M4 @ 2.7GHz 2x Cortex-A75 @ 2.4GHz 4x Cortex-A55 @ 1.9GHz",
|
||||
"SoC":"Exynos 9 Series 9825"
|
||||
},
|
||||
"ville":{
|
||||
"CPU":"2x Krait @ 1.5GHz",
|
||||
"SoC":"Snapdragon S4 MSM8290"
|
||||
},
|
||||
"vog":{
|
||||
"CPU":"2x Cortex-A76 @ 2.6GHz 2x Cortex-A76 @ 1.9GHz 4x Cortex-A55 @ 1.8GHz",
|
||||
"SoC":"HiSilicon Kirin 980"
|
||||
},
|
||||
"venus":{
|
||||
"CPU":"1x Cortex-X1 @ 2.8GHz 3x Cortex-A78 @ 2.4GHz 4x Cortex-A55 @ 1.8GHz",
|
||||
"SoC":"Snapdragon 888 SM8350"
|
||||
},
|
||||
"vtr":{
|
||||
"CPU":"4x Cortex-A73 @ 2.4GHz 4x Cortex-A53 @ 1.8GHz",
|
||||
"SoC":"HiSilicon Kirin 960"
|
||||
},
|
||||
"taimen":{
|
||||
"CPU":"4x Kryo 280 HP @ 2.45GHz 4x Kryo 280 LP @ 1.9GHz",
|
||||
"SoC":"Snapdragon 835 MSM8998"
|
||||
},
|
||||
"tn8":{
|
||||
"CPU":"4x Cortex-A15 @2.2GHz",
|
||||
"SoC":"nVIDIA Tegra K1 T124"
|
||||
},
|
||||
"taro":{
|
||||
"CPU":"1x Cortex-X2 @ 3GHz 3x Cortex-A710 @ 2.5GHz 4x Cortex-A510 @ 1.8GHz",
|
||||
"SoC":"Snapdragon 8 Gen 1 (SM8450)"
|
||||
},
|
||||
"thebes":{
|
||||
"CPU":"2x Cortex-A15 @ 1.5GHz 2x Cortex-A7 @ 1.2GHz",
|
||||
"SoC":"MediaTek MT8135"
|
||||
},
|
||||
"trinket":{
|
||||
"CPU":"4x Kryo 260 HP @ 2GHz 4x Kryo 260 LP @ 1.8GHz",
|
||||
"SoC":"Snapdragon 665 SM6125"
|
||||
},
|
||||
"tuna":{
|
||||
"CPU":"2x Cortex-A9 @ 1.2GHz",
|
||||
"SoC":"TI OMAP 4460"
|
||||
},
|
||||
"vu2kt":{
|
||||
"CPU":"2x Krait @ 1.5GHz",
|
||||
"SoC":"Snapdragon S4 Plus MSM8960"
|
||||
},
|
||||
"walleye":{
|
||||
"CPU":"4x Kryo 280 HP @ 2.45GHz 4x Kryo 280 LP @ 1.9GHz",
|
||||
"SoC":"Snapdragon 835 MSM8998"
|
||||
},
|
||||
"wikipad":{
|
||||
"CPU":"4x Cortex-A9 @ 1.3GHz 1x Cortex-A9 @ 0.5GHz",
|
||||
"SoC":"nVIDIA Tegra 3 T30L"
|
||||
},
|
||||
"qc_reference_phone":{
|
||||
"CPU":"2x Kryo HP @ 2.15GHz 2x Kryo LP @ 1.36GHz",
|
||||
"SoC":"Snapdragon 820 MSM8996"
|
||||
},
|
||||
"z4u":{
|
||||
"CPU":"4x Cortex-A5 @ 1.2GHz",
|
||||
"SoC":"Snapdragon 200 MSM8225Q"
|
||||
},
|
||||
"zs600kl":{
|
||||
"CPU":"4x Kryo 385 Gold @ 3GHz 4x Kryo 385 Silver @ 1.8GHz",
|
||||
"SoC":"Snapdragon 845"
|
||||
},
|
||||
"mt6765v":{
|
||||
"CPU":"4x Cortex-A53 @ 2.3GHz 4x Cortex-A53 @ 1.8GHz",
|
||||
"SoC":"Mediatek MT6765G Helio G35 (12 nm)"
|
||||
},
|
||||
"k65v1_64_bsp_titan_rat":{
|
||||
"CPU":"4x Cortex-A53 @ 2.3GHz 4x Cortex-A53 @ 1.8GHz",
|
||||
"SoC":"Mediatek MT6765 Helio P35 (12nm)"
|
||||
},
|
||||
"careena":{
|
||||
"CPU":"AMD 670F00h",
|
||||
"SoC":"AMD A4-9120C RADEON R4, 5 COMPUTE CORES 2C+3G"
|
||||
},
|
||||
"sion":{
|
||||
"CPU":"i3-8130U CPU 2.2GHz SoC",
|
||||
"SoC":"i3-8130U CPU 2,2 GHz soc"
|
||||
},
|
||||
"biloba":{
|
||||
"CPU":"2x Cortex-A75 @ 2.0GHz 6x Cortex-A55 @ 1.8GHz",
|
||||
"SoC":"Mediatek MT6769Z Helio G85 (12nm)"
|
||||
},
|
||||
"ele":{
|
||||
"CPU":"2x Cortex-A76 @ 2.6GHz 2x Cortex-A76 @ 1.9GHz 4x Cortex-A55 @ 1.8GHz",
|
||||
"SoC":"Kirin 980 (7 nm)"
|
||||
},
|
||||
"krane":{
|
||||
"CPU":"4x Cortex-A73 @ 2.0GHz + 4x Cortex-A53 @ 2.0GHz",
|
||||
"SoC":"MediaTekHelio P60T (12nm)"
|
||||
},
|
||||
"pineapple":{
|
||||
"CPU":"1x Cortex-X4 @ 3.3GHz 3x Cortex-A720 @ 3.2GHz 2x Cortex-A720 @ 2.6GHz 4x Cortex-A520 @ 2.3GHz",
|
||||
"SoC":"Qualcomm SM8650-AB Snapdragon 8 Gen 3"
|
||||
},
|
||||
"s5e9945":{
|
||||
"CPU":"1x Cortex-X4 @ 3.2GHz 2x Cortex-A720 @ 2.9GHz 3x Cortex-A720 @ 2.6GHz 4x Cortex-A520 @ 2.0GHz",
|
||||
"SoC":"Exynos 2400"
|
||||
},
|
||||
"a12":{
|
||||
"CPU":"4x Cortex-A53 @ 2.35GHz 4x Cortex-A53 @ 1.8GHz",
|
||||
"SoC":"MediaTek Helio P35 (MT6765)"
|
||||
}
|
||||
}
|
||||
@@ -67,12 +67,10 @@ import forge.util.ThreadUtil;
|
||||
import io.sentry.protocol.Device;
|
||||
import io.sentry.protocol.OperatingSystem;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.json.JSONObject;
|
||||
import org.jupnp.DefaultUpnpServiceConfiguration;
|
||||
import org.jupnp.android.AndroidUpnpServiceConfiguration;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
|
||||
@@ -190,26 +188,7 @@ public class Main extends AndroidApplication {
|
||||
|
||||
boolean permissiongranted = checkPermission();
|
||||
Gadapter = new AndroidAdapter(getContext());
|
||||
String cpu = "";
|
||||
String soc = "";
|
||||
boolean getChipset = false;
|
||||
// database.json source: https://github.com/xTheEc0/Android-Device-Hardware-Specs-Database
|
||||
try {
|
||||
InputStream is = getAssets().open("database.json");
|
||||
int size = is.available();
|
||||
byte[] buffer = new byte[size];
|
||||
is.read(buffer);
|
||||
is.close();
|
||||
JSONObject db = new JSONObject(new String(buffer, StandardCharsets.UTF_8));
|
||||
JSONObject board = db.getJSONObject(Build.BOARD);
|
||||
cpu = board.get("CPU").toString();
|
||||
soc = board.get("SoC").toString();
|
||||
getChipset = true;
|
||||
} catch (Exception e) {
|
||||
cpu = getCpuName();
|
||||
soc = Build.BOARD;
|
||||
getChipset = false;
|
||||
}
|
||||
|
||||
// Device Info
|
||||
Device device = new Device();
|
||||
device.setId(Build.ID);
|
||||
@@ -218,8 +197,8 @@ public class Main extends AndroidApplication {
|
||||
device.setBrand(Build.BRAND);
|
||||
device.setManufacturer(Build.MANUFACTURER);
|
||||
device.setMemorySize(memInfo.totalMem);
|
||||
device.setCpuDescription(cpu);
|
||||
device.setChipset(soc);
|
||||
device.setCpuDescription(getCpuName());
|
||||
device.setChipset(Build.HARDWARE + " " + Build.BOARD);
|
||||
// OS Info
|
||||
OperatingSystem os = new OperatingSystem();
|
||||
os.setName("Android");
|
||||
@@ -227,7 +206,7 @@ public class Main extends AndroidApplication {
|
||||
os.setBuild(Build.DISPLAY);
|
||||
os.setRawDescription(getAndroidOSName());
|
||||
|
||||
initForge(Gadapter, new HWInfo(device, os, getChipset), permissiongranted, totalMemory, isTabletDevice(getContext()));
|
||||
initForge(Gadapter, new HWInfo(device, os), permissiongranted, totalMemory, isTabletDevice(getContext()));
|
||||
}
|
||||
|
||||
private void crossfade(View contentView, View previousView) {
|
||||
|
||||
@@ -51,7 +51,7 @@ public class GameLauncher {
|
||||
os.setBuild(si.getOperatingSystem().getVersionInfo().getBuildNumber());
|
||||
os.setRawDescription(si.getOperatingSystem() + " x" + si.getOperatingSystem().getBitness());
|
||||
totalRAM = Math.round(si.getHardware().getMemory().getTotal() / 1024f / 1024f);
|
||||
hw = new HWInfo(device, os, false);
|
||||
hw = new HWInfo(device, os);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ public class SaveFileData extends HashMap<String, byte[]> {
|
||||
objStream.flush();
|
||||
put(key, stream.toByteArray());
|
||||
} catch (IOException e) {
|
||||
put("IOException", e.toString().getBytes());
|
||||
captureException(e, key, subData);
|
||||
}
|
||||
}
|
||||
@@ -34,7 +33,6 @@ public class SaveFileData extends HashMap<String, byte[]> {
|
||||
objStream.flush();
|
||||
put(key, stream.toByteArray());
|
||||
} catch (IOException e) {
|
||||
put("IOException", e.toString().getBytes());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@@ -47,7 +45,6 @@ public class SaveFileData extends HashMap<String, byte[]> {
|
||||
objStream.flush();
|
||||
put(key, stream.toByteArray());
|
||||
} catch (IOException e) {
|
||||
put("IOException", e.toString().getBytes());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@@ -60,7 +57,6 @@ public class SaveFileData extends HashMap<String, byte[]> {
|
||||
objStream.flush();
|
||||
put(key, stream.toByteArray());
|
||||
} catch (IOException e) {
|
||||
put("IOException", e.toString().getBytes());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@@ -73,7 +69,6 @@ public class SaveFileData extends HashMap<String, byte[]> {
|
||||
objStream.flush();
|
||||
put(key, stream.toByteArray());
|
||||
} catch (IOException e) {
|
||||
put("IOException", e.toString().getBytes());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@@ -86,7 +81,6 @@ public class SaveFileData extends HashMap<String, byte[]> {
|
||||
objStream.flush();
|
||||
put(key, stream.toByteArray());
|
||||
} catch (IOException e) {
|
||||
put("IOException", e.toString().getBytes());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@@ -101,7 +95,6 @@ public class SaveFileData extends HashMap<String, byte[]> {
|
||||
stream.flush();
|
||||
put(key, stream.toByteArray());
|
||||
} catch (IOException e) {
|
||||
put("IOException", e.toString().getBytes());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@@ -114,7 +107,6 @@ public class SaveFileData extends HashMap<String, byte[]> {
|
||||
objStream.flush();
|
||||
put(key, stream.toByteArray());
|
||||
} catch (IOException e) {
|
||||
put("IOException", e.toString().getBytes());
|
||||
captureException(e, key, subData);
|
||||
}
|
||||
}
|
||||
@@ -127,7 +119,6 @@ public class SaveFileData extends HashMap<String, byte[]> {
|
||||
objStream.flush();
|
||||
put(key, stream.toByteArray());
|
||||
} catch (IOException e) {
|
||||
put("IOException", e.toString().getBytes());
|
||||
captureException(e, key, subData);
|
||||
}
|
||||
}
|
||||
@@ -141,7 +132,6 @@ public class SaveFileData extends HashMap<String, byte[]> {
|
||||
objStream.flush();
|
||||
put(key, stream.toByteArray());
|
||||
} catch (IOException e) {
|
||||
put("IOException", e.toString().getBytes());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@@ -157,7 +147,6 @@ public class SaveFileData extends HashMap<String, byte[]> {
|
||||
objStream.flush();
|
||||
put(key, stream.toByteArray());
|
||||
} catch (IOException e) {
|
||||
put("IOException", e.toString().getBytes());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,50 +26,53 @@ import java.util.zip.InflaterInputStream;
|
||||
/**
|
||||
* Represents everything that will be saved, like the player and the world.
|
||||
*/
|
||||
public class WorldSave {
|
||||
public class WorldSave {
|
||||
|
||||
static final public int AUTO_SAVE_SLOT = -1;
|
||||
static final public int QUICK_SAVE_SLOT = -2;
|
||||
static final public int INVALID_SAVE_SLOT = -3;
|
||||
static final WorldSave currentSave = new WorldSave();
|
||||
static final public int AUTO_SAVE_SLOT =-1;
|
||||
static final public int QUICK_SAVE_SLOT =-2;
|
||||
static final public int INVALID_SAVE_SLOT =-3;
|
||||
static final WorldSave currentSave=new WorldSave();
|
||||
public WorldSaveHeader header = new WorldSaveHeader();
|
||||
private final AdventurePlayer player = new AdventurePlayer();
|
||||
private final World world = new World();
|
||||
private final PointOfInterestChanges.Map pointOfInterestChanges = new PointOfInterestChanges.Map();
|
||||
private final AdventurePlayer player=new AdventurePlayer();
|
||||
private final World world=new World();
|
||||
private final PointOfInterestChanges.Map pointOfInterestChanges= new PointOfInterestChanges.Map();
|
||||
|
||||
|
||||
private final SignalList onLoadList = new SignalList();
|
||||
private final SignalList onLoadList=new SignalList();
|
||||
|
||||
public final World getWorld() {
|
||||
public final World getWorld()
|
||||
{
|
||||
return world;
|
||||
}
|
||||
|
||||
public AdventurePlayer getPlayer() {
|
||||
public AdventurePlayer getPlayer()
|
||||
{
|
||||
return player;
|
||||
}
|
||||
|
||||
public void onLoad(Runnable run) {
|
||||
public void onLoad(Runnable run)
|
||||
{
|
||||
onLoadList.add(run);
|
||||
}
|
||||
|
||||
public PointOfInterestChanges getPointOfInterestChanges(String id) {
|
||||
if (!pointOfInterestChanges.containsKey(id))
|
||||
pointOfInterestChanges.put(id, new PointOfInterestChanges());
|
||||
public PointOfInterestChanges getPointOfInterestChanges(String id)
|
||||
{
|
||||
if(!pointOfInterestChanges.containsKey(id))
|
||||
pointOfInterestChanges.put(id,new PointOfInterestChanges());
|
||||
return pointOfInterestChanges.get(id);
|
||||
}
|
||||
|
||||
static public boolean load(int currentSlot) {
|
||||
|
||||
String fileName = WorldSave.getSaveFile(currentSlot);
|
||||
if (!new File(fileName).exists())
|
||||
if(!new File(fileName).exists())
|
||||
return false;
|
||||
new File(getSaveDir()).mkdirs();
|
||||
try {
|
||||
try (FileInputStream fos = new FileInputStream(fileName);
|
||||
InflaterInputStream inf = new InflaterInputStream(fos);
|
||||
ObjectInputStream oos = new ObjectInputStream(inf)) {
|
||||
try(FileInputStream fos = new FileInputStream(fileName);
|
||||
InflaterInputStream inf = new InflaterInputStream(fos);
|
||||
ObjectInputStream oos = new ObjectInputStream(inf))
|
||||
{
|
||||
currentSave.header = (WorldSaveHeader) oos.readObject();
|
||||
SaveFileData mainData = (SaveFileData) oos.readObject();
|
||||
SaveFileData mainData=(SaveFileData)oos.readObject();
|
||||
currentSave.player.load(mainData.readSubData("player"));
|
||||
GamePlayerUtil.getGuiPlayer().setName(currentSave.player.getName());
|
||||
try {
|
||||
@@ -92,11 +95,9 @@ public class WorldSave {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean isSafeFile(String name) {
|
||||
return filenameToSlot(name) != INVALID_SAVE_SLOT;
|
||||
return filenameToSlot(name)!= INVALID_SAVE_SLOT;
|
||||
}
|
||||
|
||||
static public int filenameToSlot(String name) {
|
||||
if (name.equals("auto_save.sav"))
|
||||
return AUTO_SAVE_SLOT;
|
||||
@@ -130,10 +131,10 @@ public class WorldSave {
|
||||
public static WorldSave generateNewWorld(String name, boolean male, int race, int avatarIndex, ColorSet startingColorIdentity, DifficultyData diff, AdventureModes mode, int customDeckIndex, CardEdition starterEdition, long seed) {
|
||||
currentSave.world.generateNew(seed);
|
||||
currentSave.pointOfInterestChanges.clear();
|
||||
boolean chaos = mode == AdventureModes.Chaos;
|
||||
boolean custom = mode == AdventureModes.Custom;
|
||||
Deck starterDeck = Config.instance().starterDeck(startingColorIdentity, diff, mode, customDeckIndex, starterEdition);
|
||||
currentSave.player.create(name, starterDeck, male, race, avatarIndex, chaos, custom, diff);
|
||||
boolean chaos=mode==AdventureModes.Chaos;
|
||||
boolean custom=mode==AdventureModes.Custom;
|
||||
Deck starterDeck = Config.instance().starterDeck(startingColorIdentity,diff,mode,customDeckIndex,starterEdition);
|
||||
currentSave.player.create(name, starterDeck, male, race, avatarIndex, chaos, custom, diff);
|
||||
currentSave.player.setWorldPosY((int) (currentSave.world.getData().playerStartPosY * currentSave.world.getData().height * currentSave.world.getTileSize()));
|
||||
currentSave.player.setWorldPosX((int) (currentSave.world.getData().playerStartPosX * currentSave.world.getData().width * currentSave.world.getTileSize()));
|
||||
currentSave.onLoadList.emit();
|
||||
@@ -141,103 +142,46 @@ public class WorldSave {
|
||||
}
|
||||
|
||||
public boolean autoSave() {
|
||||
return save("auto save" + SaveLoadScene.instance().getSaveFileSuffix(), AUTO_SAVE_SLOT);
|
||||
return save("auto save"+ SaveLoadScene.instance().getSaveFileSuffix(),AUTO_SAVE_SLOT);
|
||||
}
|
||||
|
||||
public boolean quickSave() {
|
||||
return save("quick save" + SaveLoadScene.instance().getSaveFileSuffix(), QUICK_SAVE_SLOT);
|
||||
return save("quick save"+ SaveLoadScene.instance().getSaveFileSuffix(),QUICK_SAVE_SLOT);
|
||||
}
|
||||
|
||||
public boolean quickLoad() {
|
||||
return load(QUICK_SAVE_SLOT);
|
||||
}
|
||||
|
||||
public boolean save(String text, int currentSlot) {
|
||||
header.name = text;
|
||||
|
||||
String fileName = WorldSave.getSaveFile(currentSlot);
|
||||
String oldFileName = fileName.replace(".sav", ".old");
|
||||
new File(getSaveDir()).mkdirs();
|
||||
File currentFile = new File(fileName);
|
||||
File backupFile = new File(oldFileName);
|
||||
if (currentFile.exists())
|
||||
currentFile.renameTo(backupFile);
|
||||
|
||||
try {
|
||||
try (FileOutputStream fos = new FileOutputStream(fileName);
|
||||
DeflaterOutputStream def = new DeflaterOutputStream(fos);
|
||||
ObjectOutputStream oos = new ObjectOutputStream(def)) {
|
||||
SaveFileData player = currentSave.player.save();
|
||||
SaveFileData world = currentSave.world.save();
|
||||
SaveFileData worldStage = WorldStage.getInstance().save();
|
||||
SaveFileData poiChanges = currentSave.pointOfInterestChanges.save();
|
||||
|
||||
String message = getExceptionMessage(player, world, worldStage, poiChanges);
|
||||
if (!message.isEmpty()) {
|
||||
oos.close();
|
||||
fos.close();
|
||||
restoreBackup(oldFileName, fileName);
|
||||
announceError(message);
|
||||
return true;
|
||||
}
|
||||
|
||||
SaveFileData mainData = new SaveFileData();
|
||||
mainData.store("player", player);
|
||||
mainData.store("world", world);
|
||||
mainData.store("worldStage", worldStage);
|
||||
mainData.store("pointOfInterestChanges", poiChanges);
|
||||
|
||||
if (mainData.readString("IOException") != null) {
|
||||
oos.close();
|
||||
fos.close();
|
||||
restoreBackup(oldFileName, fileName);
|
||||
announceError("Please check forge.log for errors.");
|
||||
return true;
|
||||
}
|
||||
|
||||
header.saveDate = new Date();
|
||||
try(FileOutputStream fos = new FileOutputStream(fileName);
|
||||
DeflaterOutputStream def= new DeflaterOutputStream(fos);
|
||||
ObjectOutputStream oos = new ObjectOutputStream(def))
|
||||
{
|
||||
header.saveDate= new Date();
|
||||
oos.writeObject(header);
|
||||
SaveFileData mainData=new SaveFileData();
|
||||
mainData.store("player",currentSave.player.save());
|
||||
mainData.store("world",currentSave.world.save());
|
||||
mainData.store("worldStage", WorldStage.getInstance().save());
|
||||
mainData.store("pointOfInterestChanges",currentSave.pointOfInterestChanges.save());
|
||||
|
||||
oos.writeObject(mainData);
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
restoreBackup(oldFileName, fileName);
|
||||
announceError("Please check forge.log for errors.");
|
||||
return true;
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
|
||||
Config.instance().getSettingData().lastActiveSave = WorldSave.filename(currentSlot);
|
||||
Config.instance().saveSettings();
|
||||
if (backupFile.exists())
|
||||
backupFile.delete();
|
||||
return true;
|
||||
}
|
||||
|
||||
public void restoreBackup(String oldFilename, String currentFilename) {
|
||||
File f = new File(currentFilename);
|
||||
if (f.exists())
|
||||
f.delete();
|
||||
File b = new File(oldFilename);
|
||||
if (b.exists())
|
||||
b.renameTo(new File(currentFilename));
|
||||
}
|
||||
|
||||
public String getExceptionMessage(SaveFileData... datas) {
|
||||
StringBuilder message = new StringBuilder();
|
||||
|
||||
for (SaveFileData data : datas) {
|
||||
String s = data.readString("IOException");
|
||||
if (s != null)
|
||||
message.append(s).append("\n");
|
||||
}
|
||||
|
||||
return message.toString();
|
||||
}
|
||||
|
||||
private void announceError(String message) {
|
||||
currentSave.player.getCurrentGameStage().setExtraAnnouncement("Error Saving File!\n" + message);
|
||||
}
|
||||
|
||||
public void clearChanges() {
|
||||
pointOfInterestChanges.clear();
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Coal Hill School
|
||||
ManaCost:no cost
|
||||
Types:Plane Earth
|
||||
T:Mode$ SpellCast | ValidCard$ Card.Historic | Execute$ TrigDraw | TriggerZones$ Command | TriggerDescription$ Whenever a player casts a historic spell, that player draws a card. (Artifacts, legendaries, and Sagas are historic.)
|
||||
SVar:TrigDraw:DB$ Draw | Defined$ TriggeredActivator | NumCards$ 1
|
||||
SVar:TrigDraw:DB$ Draw | Defined$ TriggeredPlayer | NumCards$ 1
|
||||
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ TrigReturn | TriggerDescription$ Whenever chaos ensues, return target historic card from your graveyard to your hand.
|
||||
SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Card.Historic+YouOwn | TgtPrompt$ Select target historic card
|
||||
DeckHints:Type$Artifact|Saga|Legendary
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Phyrexian Reaper
|
||||
ManaCost:4 B
|
||||
Types:Creature Phyrexian Zombie
|
||||
PT:3/3
|
||||
T:Mode$ AttackerBlockedByCreature | ValidCard$ Card.Self | ValidBlocker$ Creature.Green | Execute$ TrigDestroyBlocker | TriggerDescription$ Whenever CARDNAME becomes blocked by a green creature, destroy that creature. It can't be regenerated.
|
||||
T:Mode$ AttackerBlocked | ValidCard$ Card.Self | ValidBlocker$ Creature.Green | Execute$ TrigDestroyBlocker | TriggerDescription$ Whenever CARDNAME becomes blocked by a green creature, destroy that creature. It can't be regenerated.
|
||||
SVar:TrigDestroyBlocker:DB$ Destroy | Defined$ TriggeredBlockerLKICopy | NoRegen$ True
|
||||
Oracle:Whenever Phyrexian Reaper becomes blocked by a green creature, destroy that creature. It can't be regenerated.
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:3 B
|
||||
Types:Creature Phyrexian Minion
|
||||
PT:2/2
|
||||
K:Flying
|
||||
T:Mode$ AttackerBlockedByCreature | ValidCard$ Card.Self | ValidBlocker$ Creature.White | Execute$ TrigDestroyBlocker | TriggerDescription$ Whenever CARDNAME becomes blocked by a white creature, destroy that creature. It can't be regenerated.
|
||||
T:Mode$ AttackerBlocked | ValidCard$ Card.Self | ValidBlocker$ Creature.White | Execute$ TrigDestroyBlocker | TriggerDescription$ Whenever CARDNAME becomes blocked by a white creature, destroy that creature. It can't be regenerated.
|
||||
SVar:TrigDestroyBlocker:DB$ Destroy | Defined$ TriggeredBlockerLKICopy | NoRegen$ True
|
||||
AI:RemoveDeck:Random
|
||||
Oracle:Flying\nWhenever Phyrexian Slayer becomes blocked by a white creature, destroy that creature. It can't be regenerated.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Recruit Instructor
|
||||
ManaCost:R W
|
||||
Types:Creature Mouse Warrior
|
||||
PT:1/1
|
||||
T:Mode$ AttackersDeclared | ValidAttackers$ Card.Self | Execute$ TrigDraft | TriggerZones$ Battlefield | TriggerDescription$ Whenever this creature attacks, draft a card from CARDNAME's spellbook.
|
||||
T:Mode$ AttackersDeclared | ValidAttackers$ Self | Execute$ TrigDraft | TriggerZones$ Battlefield | TriggerDescription$ Whenever this creature attacks, draft a card from CARDNAME's spellbook.
|
||||
SVar:TrigDraft:DB$ Draft | Spellbook$ Angelfire Ignition,Barge In,Become Brutes,Boon of Safety,Cheeky House-Mouse,Crumb and Get It,Defiant Strike,Embercleave,Feather of Flight,Mabel's Mettle,Might of the Meek,Moment of Heroism,Unleash Fury,War Squeak
|
||||
T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | FirstTime$ True | Execute$ TrigToken | TriggerDescription$ Valiant — Whenever CARDNAME becomes the target of a spell or ability you control for the first time each turn, create a 1/1 white Mouse creature token.
|
||||
SVar:TrigToken:DB$ Token | TokenScript$ w_1_1_mouse | TokenAmount$ 1 | TokenOwner$ You
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:2 U
|
||||
Types:Creature Human Wizard
|
||||
PT:3/2
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ When CARDNAME enters, look at the top three cards of your library. You may put one of those cards back on top of your library. Put the rest into your graveyard.
|
||||
SVar:TrigDig:DB$ Dig | DigNum$ 3 | ChangeNum$ 1 | ChangeValid$ Card | DestinationZone2$ Graveyard | DestinationZone$ Library | LibraryPosition$ 0 | Optional$ True | NoReveal$ True
|
||||
SVar:TrigDig:DB$ Dig | DigNum$ 3 | ChangeNum$ 1 | ChangeValid$ Card | DestinationZone2$ Graveyard | DestinationZone$ Library | LibraryPosition$ 0 | Optional$ True
|
||||
DeckHas:Ability$Graveyard
|
||||
DeckHints:Ability$Graveyard
|
||||
Oracle:When Sage of Days enters, look at the top three cards of your library. You may put one of those cards back on top of your library. Put the rest into your graveyard.
|
||||
|
||||
@@ -2,8 +2,8 @@ Name:The Reaver Cleaver
|
||||
ManaCost:2 R
|
||||
Types:Legendary Artifact Equipment
|
||||
K:Equip:3
|
||||
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Trample | AddTrigger$ TrigDamageDone | Description$ Equipped creature gets +1/+1 and has trample and "Whenever this creature deals combat damage to a player or planeswalker, create that many Treasure tokens."
|
||||
SVar:TrigDamageDone:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player,Planeswalker | CombatDamage$ True | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever this creature deals combat damage to a player or planeswalker, create that many Treasure tokens.
|
||||
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Trample | Description$ Equipped creature gets +1/+1 and has trample.
|
||||
T:Mode$ DamageDone | ValidSource$ Creature.EquippedBy | ValidTarget$ Player,Planeswalker | CombatDamage$ True | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever this creature deals combat damage to a player or planeswalker, create that many Treasure tokens.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ c_a_treasure_sac | TokenOwner$ You
|
||||
SVar:X:TriggerCount$DamageAmount
|
||||
DeckHas:Ability$Token & Type$Treasure|Artifact
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user