Merge branch 'Card-Forge:master' into master

This commit is contained in:
TabletopGeneral
2023-07-08 07:08:27 -04:00
committed by GitHub
51 changed files with 2966 additions and 150 deletions

View File

@@ -570,7 +570,7 @@ public class AiBlockController {
// Try to block a Menace attacker with two blockers, neither of which will die // Try to block a Menace attacker with two blockers, neither of which will die
for (final Card attacker : attackersLeft) { for (final Card attacker : attackersLeft) {
if (CombatUtil.getMinNumBlockersForAttacker(attacker, combat.getDefenderPlayerByAttacker(attacker)) <= 1) { if (CombatUtil.getMinNumBlockersForAttacker(attacker, combat.getDefenderPlayerByAttacker(attacker)) != 2) {
continue; continue;
} }
@@ -741,19 +741,17 @@ public class AiBlockController {
combat.addBlocker(attacker, blocker); combat.addBlocker(attacker, blocker);
usedBlockers.add(blocker); usedBlockers.add(blocker);
if (CombatUtil.canAttackerBeBlockedWithAmount(attacker, usedBlockers.size(), combat)) { if (CombatUtil.canAttackerBeBlockedWithAmount(attacker, usedBlockers.size(), combat)) {
attackersLeft.remove(attacker);
usedBlockers.clear();
break; break;
} }
} }
} }
if (CombatUtil.canAttackerBeBlockedWithAmount(attacker, usedBlockers.size(), combat)) {
attackersLeft.remove(attacker);
} else {
for (Card blocker : usedBlockers) { for (Card blocker : usedBlockers) {
combat.removeBlockAssignment(attacker, blocker); combat.removeBlockAssignment(attacker, blocker);
} }
} }
} }
}
/** Reinforce blockers blocking attackers with trample (should only be made if life is in danger) */ /** Reinforce blockers blocking attackers with trample (should only be made if life is in danger) */
private void reinforceBlockersAgainstTrample(final Combat combat) { private void reinforceBlockersAgainstTrample(final Combat combat) {
@@ -767,10 +765,7 @@ public class AiBlockController {
tramplingAttackers = CardLists.filter(tramplingAttackers, Predicates.not(changesPTWhenBlocked(true))); tramplingAttackers = CardLists.filter(tramplingAttackers, Predicates.not(changesPTWhenBlocked(true)));
for (final Card attacker : tramplingAttackers) { for (final Card attacker : tramplingAttackers) {
boolean staticAssignCombatDamageAsUnblocked = StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker); if (CombatUtil.getMinNumBlockersForAttacker(attacker, combat.getDefenderPlayerByAttacker(attacker)) > combat.getBlockers(attacker).size()) {
if (CombatUtil.getMinNumBlockersForAttacker(attacker, combat.getDefenderPlayerByAttacker(attacker)) > combat.getBlockers(attacker).size()
|| attacker.hasKeyword("CARDNAME can't be blocked unless all creatures defending player controls block it.")) {
continue; continue;
} }
@@ -800,7 +795,7 @@ public class AiBlockController {
} }
} }
if (staticAssignCombatDamageAsUnblocked) { if (!needsMoreChumpBlockers || StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(attacker)) {
continue; continue;
} }
@@ -935,8 +930,6 @@ public class AiBlockController {
CardLists.sortByPowerAsc(chumpPWDefenders); CardLists.sortByPowerAsc(chumpPWDefenders);
if (!chumpPWDefenders.isEmpty()) { if (!chumpPWDefenders.isEmpty()) {
for (final Card attacker : attackers) { for (final Card attacker : attackers) {
GameEntity def = combat.getDefenderByAttacker(attacker);
if (def instanceof Card && threatenedPWs.contains(def)) {
if (attacker.hasKeyword(Keyword.TRAMPLE)) { if (attacker.hasKeyword(Keyword.TRAMPLE)) {
// don't bother trying to chump a trampling creature // don't bother trying to chump a trampling creature
continue; continue;
@@ -945,11 +938,13 @@ public class AiBlockController {
// already blocked by something, no need to chump // already blocked by something, no need to chump
continue; continue;
} }
GameEntity def = combat.getDefenderByAttacker(attacker);
if (def instanceof Card && threatenedPWs.contains(def)) {
Card blockerDecided = null; Card blockerDecided = null;
for (final Card blocker : chumpPWDefenders) { for (final Card blocker : chumpPWDefenders) {
if (CombatUtil.canBlock(attacker, blocker, combat)) { if (CombatUtil.canBlock(attacker, blocker, combat)) {
combat.addBlocker(attacker, blocker); combat.addBlocker(attacker, blocker);
pwsWithChumpBlocks.add((Card) combat.getDefenderByAttacker(attacker)); pwsWithChumpBlocks.add((Card) def);
chosenChumpBlockers.add(blocker); chosenChumpBlockers.add(blocker);
blockerDecided = blocker; blockerDecided = blocker;
blockersLeft.remove(blocker); blockersLeft.remove(blocker);
@@ -962,9 +957,9 @@ public class AiBlockController {
// check to see if we managed to cover all the blockers of the planeswalker; if not, bail // check to see if we managed to cover all the blockers of the planeswalker; if not, bail
for (final Card pw : pwsWithChumpBlocks) { for (final Card pw : pwsWithChumpBlocks) {
CardCollection pwAttackers = combat.getAttackersOf(pw); CardCollection pwAttackers = combat.getAttackersOf(pw);
if (!pwAttackers.isEmpty()) {
CardCollection pwDefenders = new CardCollection(); CardCollection pwDefenders = new CardCollection();
boolean isFullyBlocked = true; boolean isFullyBlocked = true;
if (!pwAttackers.isEmpty()) {
int damageToPW = 0; int damageToPW = 0;
for (Card pwAtk : pwAttackers) { for (Card pwAtk : pwAttackers) {
if (!combat.getBlockers(pwAtk).isEmpty()) { if (!combat.getBlockers(pwAtk).isEmpty()) {

View File

@@ -23,7 +23,10 @@ import forge.game.ability.effects.CharmEffect;
import forge.game.card.*; import forge.game.card.*;
import forge.game.card.CardPredicates.Presets; import forge.game.card.CardPredicates.Presets;
import forge.game.combat.Combat; import forge.game.combat.Combat;
import forge.game.cost.*; import forge.game.cost.Cost;
import forge.game.cost.CostEnlist;
import forge.game.cost.CostPart;
import forge.game.cost.CostPartMana;
import forge.game.keyword.Keyword; import forge.game.keyword.Keyword;
import forge.game.keyword.KeywordInterface; import forge.game.keyword.KeywordInterface;
import forge.game.mana.Mana; import forge.game.mana.Mana;
@@ -257,9 +260,6 @@ public class PlayerControllerAi extends PlayerController {
public boolean confirmTrigger(WrappedAbility wrapper) { public boolean confirmTrigger(WrappedAbility wrapper) {
final SpellAbility sa = wrapper.getWrappedAbility(); final SpellAbility sa = wrapper.getWrappedAbility();
//final Trigger regtrig = wrapper.getTrigger(); //final Trigger regtrig = wrapper.getTrigger();
if (ComputerUtilAbility.getAbilitySourceName(sa).equals("Deathmist Raptor")) {
return true;
}
if (wrapper.isMandatory()) { if (wrapper.isMandatory()) {
return true; return true;
} }

View File

@@ -75,6 +75,9 @@ public class ChooseGenericEffectAi extends SpellAbilityAi {
} }
return true; // perhaps the opponent(s) had Sigarda, Heron's Grace or another effect giving hexproof in play, still play the creature as 6/6 return true; // perhaps the opponent(s) had Sigarda, Heron's Grace or another effect giving hexproof in play, still play the creature as 6/6
} }
if (ComputerUtilAbility.getAbilitySourceName(sa).equals("Deathmist Raptor")) {
return true;
}
return super.doTriggerAINoCost(aiPlayer, sa, mandatory); return super.doTriggerAINoCost(aiPlayer, sa, mandatory);
} }

View File

@@ -1,7 +1,5 @@
package forge.ai.ability; package forge.ai.ability;
import java.util.List;
import forge.ai.*; import forge.ai.*;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType; import forge.game.ability.ApiType;
@@ -17,6 +15,8 @@ import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerType; import forge.game.trigger.TriggerType;
import forge.util.MyRandom; import forge.util.MyRandom;
import java.util.List;
public class FightAi extends SpellAbilityAi { public class FightAi extends SpellAbilityAi {
@Override @Override
protected boolean checkAiLogic(final Player ai, final SpellAbility sa, final String aiLogic) { protected boolean checkAiLogic(final Player ai, final SpellAbility sa, final String aiLogic) {
@@ -31,10 +31,6 @@ public class FightAi extends SpellAbilityAi {
// everything is defined or targeted above, can't do anything there unless a specific logic is set // everything is defined or targeted above, can't do anything there unless a specific logic is set
if (sa.hasParam("Defined") && !sa.usesTargeting()) { if (sa.hasParam("Defined") && !sa.usesTargeting()) {
// TODO extend Logic for cards like Arena // TODO extend Logic for cards like Arena
if ("Grothama".equals(sa.getParam("AILogic"))) { // Grothama, All-Devouring
return SpecialCardAi.GrothamaAllDevouring.consider(ai, sa);
}
return true; return true;
} }
@@ -120,6 +116,11 @@ public class FightAi extends SpellAbilityAi {
@Override @Override
protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) {
final String aiLogic = sa.getParamOrDefault("AILogic", "");
if (aiLogic.equals("Grothama")) {
return mandatory ? true : SpecialCardAi.GrothamaAllDevouring.consider(ai, sa);
}
if (checkApiLogic(ai, sa)) { if (checkApiLogic(ai, sa)) {
return true; return true;
} }

View File

@@ -394,7 +394,7 @@ public abstract class SpellAbilityEffect {
public static void addForgetOnMovedTrigger(final Card card, final String zone) { public static void addForgetOnMovedTrigger(final Card card, final String zone) {
String trig = "Mode$ ChangesZone | ValidCard$ Card.IsRemembered | Origin$ " + zone + " | ExcludedDestinations$ Stack,Exile | Destination$ Any | TriggerZones$ Command | Static$ True"; String trig = "Mode$ ChangesZone | ValidCard$ Card.IsRemembered | Origin$ " + zone + " | ExcludedDestinations$ Stack,Exile | Destination$ Any | TriggerZones$ Command | Static$ True";
String trig2 = "Mode$ Exiled | ValidCard$ Card.IsRemembered | TriggerZones$ Command | Static$ True"; String trig2 = "Mode$ Exiled | ValidCard$ Card.IsRemembered | ValidCause$ SpellAbility.!EffectSource | TriggerZones$ Command | Static$ True";
final Trigger parsedTrigger = TriggerHandler.parseTrigger(trig, card, true); final Trigger parsedTrigger = TriggerHandler.parseTrigger(trig, card, true);
final Trigger parsedTrigger2 = TriggerHandler.parseTrigger(trig2, card, true); final Trigger parsedTrigger2 = TriggerHandler.parseTrigger(trig2, card, true);

View File

@@ -73,20 +73,9 @@ public class TriggerExiled extends Trigger {
return false; return false;
} }
if (hasParam("ValidCause")) { if (!matchesValidParam("ValidCause", runParams.get(AbilityKey.Cause))) {
if (!runParams.containsKey(AbilityKey.Cause)) {
return false; return false;
} }
SpellAbility cause = (SpellAbility) runParams.get(AbilityKey.Cause);
if (cause == null) {
return false;
}
if (!matchesValid(cause, getParam("ValidCause").split(","))) {
if (!matchesValid(cause.getHostCard(), getParam("ValidCause").split(","))) {
return false;
}
}
}
return true; return true;
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 490 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

View File

@@ -0,0 +1,7 @@
Name:Hallowed Sigil
ManaCost:no cost
Colors:white
Types:Enchantment
A:AB$ Pump | Cost$ PayShards<4> T | ValidTgts$ Creature.YouCtrl | KW$ Hexproof | SubAbility$ Eject | ActivationLimit$ 1 | SpellDescription$ Target creature you control gains hexproof until end of turn. Exile Hallowed Sigil.
SVar:Eject:DB$ ChangeZone | Defined$ Self | Origin$ Battlefield | Destination$ Exile
Oracle:{M},{T}:Target creature you control gains hexproof until end of turn. Exile Hallowed Sigil.

View File

@@ -0,0 +1,8 @@
Name:Sigil of Torment
ManaCost:no cost
Colors:black
Types:Enchantment
A:AB$ Destroy | Cost$ 4 B T PayShards<5> | ValidTgts$ Creature | TgtPrompt$ Select target creature | ActivationLimit$ 1 | SubAbility$ DBLifeGain | SpellDescription$ Destroy target creature. You gain 3 life. Exile Sigil of Torment.
SVar:DBLifeGain:DB$ GainLife | Defined$ You | LifeAmount$ 3 | SubAbility$ Eject
SVar:Eject:DB$ ChangeZone | Defined$ Self | Origin$ Battlefield | Destination$ Exile
Oracle:{M},{T}: Destroy target creature. You gain 3 life. Exile Sigil of Torment.

View File

@@ -0,0 +1,8 @@
Name:Power of Valyx
ManaCost:no cost
Colors:black
Types:Enchantment
K:Hexproof
A:AB$ Destroy | Cost$ 4 B T Sac<1/Creature.YouCtrl/creature you control>| ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBLifeGain | SpellDescription$ Destroy target creature. You gain 3 life.
SVar:DBLifeGain:DB$ GainLife | Defined$ You | LifeAmount$ 3
Oracle:{M},{T}, Sacrifice a creature: Destroy target creature. You gain 3 life.

View File

@@ -0,0 +1,23 @@
[metadata]
Name=valyx
[Main]
3 Damnation|MM3|1
2 Deathrender|CNS|1
2 Deathrender|LRW|1
1 Doomed Dissenter|DBL|1
2 Doomed Dissenter|GN3|1
1 Ecstatic Awakener|DBL|1
2 Ecstatic Awakener|MID|1
3 Indulgent Tormentor|PM15|1
3 Lord of the Void|GTC|1
4 Mark of the Oni|BOK|1
3 Murder|CMR|1
1 Phyrexian Reclamation|C15|1
1 Phyrexian Reclamation|J22|1
2 Reaper from the Abyss|J22|1
3 Sign in Blood|SCD|1
1 Skirsdag High Priest|C14|1
2 Skirsdag High Priest|J22|1
19 Swamp|MOM|1
1 Swamp|MOM|3
4 Westvale Abbey|SOI|1

View File

@@ -0,0 +1,48 @@
[metadata]
Name=cultist
[Avatar]
[Main]
2 Bloodgift Demon|SCD|1
2 Bloodsoaked Champion|CLB|1
2 Bloodsoaked Champion|NCC|1
2 Demon of Catastrophes|J22|1
1 Doomed Dissenter|BBD|1
1 Doomed Dissenter|MB1|1
2 Ecstatic Awakener|DBL|1
2 Ecstatic Awakener|MID|1
2 Feaster of Fools|MH1|1
1 Grave Pact|10E|1
2 Grave Pact|CM2|1
1 Grave Pact|COM|1
2 Graven Archfiend|YSNC|1
1 Grim Haruspex|C19|1
1 Grim Haruspex|CLB|1
2 Harvester of Souls|CN2|1
2 Herald of Torment|BNG|1
1 Murder|CMR|1
2 Murder|SNC|1
2 Sign in Blood|ARC|1
1 Sign in Blood|STA|1
4 Skirsdag High Priest|2XM|1
11 Swamp|MOM|1
2 Swamp|SHM|1
2 Swamp|SHM|2
5 Swamp|SHM|3
2 Swamp|SHM|4
[Sideboard]
2 Culling Dais|2XM|1
2 Furnace Celebration|CMR|1
4 Glaring Spotlight|GTC|1
2 Grim Return|M14|1
1 Lord of the Void|GTC|1
2 Ravenous Demon|DKA|1
2 Reaper from the Abyss|C14|1
[Planes]
[Schemes]
[Conspiracy]
[Dungeon]

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.10" tiledversion="1.10.1" name="desertbuildingtiles" tilewidth="16" tileheight="16" tilecount="1036" columns="28">
<image source="../tileset/desertbuildingtiles.png" width="448" height="592"/>
</tileset>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<map version="1.10" tiledversion="1.10.1" orientation="orthogonal" renderorder="right-down" width="64" height="64" tilewidth="16" tileheight="16" infinite="0" nextlayerid="16" nextobjectid="47"> <map version="1.10" tiledversion="1.10.1" orientation="orthogonal" renderorder="right-down" width="64" height="64" tilewidth="16" tileheight="16" infinite="0" nextlayerid="16" nextobjectid="48">
<tileset firstgid="1" name="autotiles" tilewidth="16" tileheight="16" tilecount="432" columns="12"> <tileset firstgid="1" name="autotiles" tilewidth="16" tileheight="16" tilecount="432" columns="12">
<image source="../../world/tilesets/autotiles.png" width="192" height="576"/> <image source="../../world/tilesets/autotiles.png" width="192" height="576"/>
</tileset> </tileset>
@@ -518,7 +518,82 @@
</tile> </tile>
</tileset> </tileset>
<tileset firstgid="10581" source="../tileset/buildings.tsx"/> <tileset firstgid="10581" source="../tileset/buildings.tsx"/>
<tileset firstgid="12373" source="../tileset/buildings.tsx"/> <tileset firstgid="12373" source="../tileset/buildings-nocollide.tsx"/>
<objectgroup id="7" name="Invisible">
<object id="4" template="../obj/exit.tx" name="Hekma" x="8" y="0" width="1016" height="1" visible="0"/>
<object id="5" template="../obj/exit.tx" name="Hekma" x="1023" y="-1" width="1" height="1025" visible="0"/>
<object id="6" template="../obj/exit.tx" name="Hekma" x="0" y="1018" width="1022" height="6" visible="0"/>
<object id="7" template="../obj/exit.tx" name="Hekma" x="0" y="0" width="4" height="1016" visible="0"/>
<object id="25" template="../obj/shop.tx" x="721" y="80" width="14" height="14" visible="0">
<properties>
<property name="signXOffset" type="float" value="3"/>
<property name="signYOffset" type="float" value="8"/>
</properties>
</object>
<object id="26" template="../obj/shop.tx" x="721" y="192" width="14" height="14" visible="0">
<properties>
<property name="signXOffset" type="float" value="3"/>
<property name="signYOffset" type="float" value="8"/>
</properties>
</object>
<object id="27" template="../obj/shop.tx" x="673" y="144" width="14" height="14" visible="0">
<properties>
<property name="signXOffset" type="float" value="3"/>
<property name="signYOffset" type="float" value="8"/>
</properties>
</object>
<object id="33" template="../obj/shop.tx" x="641" y="96" width="14" height="14" visible="0">
<properties>
<property name="signXOffset" type="float" value="3"/>
<property name="signYOffset" type="float" value="8"/>
</properties>
</object>
<object id="28" template="../obj/shop.tx" x="753" y="63" width="14" height="13" visible="0">
<properties>
<property name="signXOffset" type="float" value="3"/>
<property name="signYOffset" type="float" value="8"/>
</properties>
</object>
<object id="31" template="../obj/shop.tx" x="833" y="48" width="14" height="15" visible="0">
<properties>
<property name="signXOffset" type="float" value="3"/>
<property name="signYOffset" type="float" value="8"/>
</properties>
</object>
<object id="29" template="../obj/shop.tx" x="769" y="128" width="14" height="14" visible="0">
<properties>
<property name="signXOffset" type="float" value="3"/>
<property name="signYOffset" type="float" value="8"/>
</properties>
</object>
<object id="30" template="../obj/inn.tx" x="721" y="128" width="14" height="16" visible="0"/>
<object id="36" template="../obj/portal.tx" x="709" y="333" visible="1">
<properties>
<property name="direction" value="left"/>
<property name="portalState" value="active"/>
<property name="teleport" value="../common/maps/map/naktamun.tmx"/>
<property name="teleportObjectId" value="37"/>
</properties>
</object>
<object id="37" template="../obj/portal.tx" x="653" y="349" visible="1">
<properties>
<property name="direction" value="right"/>
<property name="portalState" value="active"/>
<property name="teleport" value="../common/maps/map/naktamun.tmx"/>
<property name="teleportObjectId" value="36"/>
</properties>
</object>
<object id="38" template="../obj/waypoint.tx" x="150" y="396" visible="0"/>
<object id="8" template="../obj/entry_down.tx" x="592" y="32" width="16" height="16" visible="1"/>
<object id="47" template="../obj/portal.tx" name="Training Area" x="144" y="417" visible="1">
<properties>
<property name="direction" value="down"/>
<property name="portalState" value="active"/>
<property name="teleport" value="../common/maps/map/naktamun/gym.tmx"/>
<property name="teleportObjectId" value="1"/>
</properties>
</object>
</objectgroup>
<layer id="1" name="Ground" width="64" height="64" locked="1"> <layer id="1" name="Ground" width="64" height="64" locked="1">
<data encoding="csv"> <data encoding="csv">
74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,4657,32,4184,4184,4184,4184,4184,4184,4184,32,4657,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74, 74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,4657,32,4184,4184,4184,4184,4184,4184,4184,32,4657,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,
@@ -933,73 +1008,6 @@
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</data> </data>
</layer> </layer>
<objectgroup id="7" name="Invisible">
<object id="4" template="../obj/exit.tx" name="Hekma" x="8" y="0" width="1016" height="1" visible="0"/>
<object id="5" template="../obj/exit.tx" name="Hekma" x="1023" y="-1" width="1" height="1025" visible="0"/>
<object id="6" template="../obj/exit.tx" name="Hekma" x="0" y="1018" width="1022" height="6" visible="0"/>
<object id="7" template="../obj/exit.tx" name="Hekma" x="0" y="0" width="4" height="1016" visible="0"/>
<object id="25" template="../obj/shop.tx" x="721" y="80" width="14" height="14" visible="0">
<properties>
<property name="signXOffset" type="float" value="3"/>
<property name="signYOffset" type="float" value="8"/>
</properties>
</object>
<object id="26" template="../obj/shop.tx" x="721" y="192" width="14" height="14" visible="0">
<properties>
<property name="signXOffset" type="float" value="3"/>
<property name="signYOffset" type="float" value="8"/>
</properties>
</object>
<object id="27" template="../obj/shop.tx" x="673" y="144" width="14" height="14" visible="0">
<properties>
<property name="signXOffset" type="float" value="3"/>
<property name="signYOffset" type="float" value="8"/>
</properties>
</object>
<object id="33" template="../obj/shop.tx" x="641" y="96" width="14" height="14" visible="0">
<properties>
<property name="signXOffset" type="float" value="3"/>
<property name="signYOffset" type="float" value="8"/>
</properties>
</object>
<object id="28" template="../obj/shop.tx" x="753" y="63" width="14" height="13" visible="0">
<properties>
<property name="signXOffset" type="float" value="3"/>
<property name="signYOffset" type="float" value="8"/>
</properties>
</object>
<object id="31" template="../obj/shop.tx" x="833" y="48" width="14" height="15" visible="0">
<properties>
<property name="signXOffset" type="float" value="3"/>
<property name="signYOffset" type="float" value="8"/>
</properties>
</object>
<object id="29" template="../obj/shop.tx" x="769" y="128" width="14" height="14" visible="0">
<properties>
<property name="signXOffset" type="float" value="3"/>
<property name="signYOffset" type="float" value="8"/>
</properties>
</object>
<object id="30" template="../obj/inn.tx" x="721" y="128" width="14" height="16" visible="0"/>
<object id="36" template="../obj/portal.tx" x="709" y="333" visible="1">
<properties>
<property name="direction" value="left"/>
<property name="portalState" value="active"/>
<property name="teleport" value="../common/maps/map/naktamun.tmx"/>
<property name="teleportObjectId" value="37"/>
</properties>
</object>
<object id="37" template="../obj/portal.tx" x="653" y="349" visible="1">
<properties>
<property name="direction" value="right"/>
<property name="portalState" value="active"/>
<property name="teleport" value="../common/maps/map/naktamun.tmx"/>
<property name="teleportObjectId" value="36"/>
</properties>
</object>
<object id="38" template="../obj/waypoint.tx" x="150" y="396" visible="0"/>
<object id="8" template="../obj/entry_down.tx" x="592" y="32" width="16" height="16" visible="1"/>
</objectgroup>
<objectgroup id="15" name="Enemies"> <objectgroup id="15" name="Enemies">
<object id="42" template="../obj/enemy.tx" name="Khenra" x="137" y="396"> <object id="42" template="../obj/enemy.tx" name="Khenra" x="137" y="396">
<properties> <properties>
@@ -1052,7 +1060,7 @@
] ]
} }
]</property> ]</property>
<property name="enemy" value="Master White Wizard"/> <property name="enemy" value="Warrior"/>
</properties> </properties>
</object> </object>
<object id="45" template="../obj/enemy.tx" name="Mummy" gid="2147495535" x="151" y="396" width="16" height="16"> <object id="45" template="../obj/enemy.tx" name="Mummy" gid="2147495535" x="151" y="396" width="16" height="16">
@@ -1061,6 +1069,5 @@
<property name="waypoints" value="38"/> <property name="waypoints" value="38"/>
</properties> </properties>
</object> </object>
<object id="46" template="../obj/portal.tx" name="Training Area" x="144" y="416"/>
</objectgroup> </objectgroup>
</map> </map>

View File

@@ -1,9 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<map version="1.10" tiledversion="1.10.1" orientation="orthogonal" renderorder="right-down" width="100" height="50" tilewidth="16" tileheight="16" infinite="0" nextlayerid="6" nextobjectid="20"> <map version="1.10" tiledversion="1.10.1" orientation="orthogonal" renderorder="right-down" width="100" height="50" tilewidth="16" tileheight="16" infinite="0" nextlayerid="6" nextobjectid="20">
<tileset firstgid="1" source="autotiles.tsx"/> <tileset firstgid="1" source="../autotiles.tsx"/>
<tileset firstgid="433" source="../tileset/main.tsx"/> <tileset firstgid="433" source="../../tileset/main.tsx"/>
<tileset firstgid="10545" source="desertbuildingtiles.tsx"/> <tileset firstgid="10545" source="../../tileset/desertbuildingtiles.tsx"/>
<tileset firstgid="11581" source="../tileset/buildings.tsx"/> <tileset firstgid="11581" source="../../tileset/buildings.tsx"/>
<objectgroup id="3" name="Hidden Objects" locked="1">
<object id="1" template="../../obj/portal.tx" x="672" y="333" width="16" height="16" visible="1">
<properties>
<property name="direction" value="up"/>
<property name="portalState" value="active"/>
<property name="teleport" value="../common/maps/map/naktamun.tmx"/>
<property name="teleportObjectId" value="47"/>
</properties>
</object>
</objectgroup>
<layer id="1" name="Ground" width="100" height="50" locked="1"> <layer id="1" name="Ground" width="100" height="50" locked="1">
<data encoding="csv"> <data encoding="csv">
2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452, 2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,
@@ -58,14 +68,6 @@
2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452 2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452,2452
</data> </data>
</layer> </layer>
<objectgroup id="3" name="Hidden Objects" locked="1">
<object id="1" template="../obj/portal.tx" x="671.5" y="351.5">
<properties>
<property name="direction" value="up"/>
</properties>
</object>
<object id="10" template="../obj/entry_up.tx" x="672" y="352"/>
</objectgroup>
<layer id="2" name="Buildings" width="100" height="50" locked="1"> <layer id="2" name="Buildings" width="100" height="50" locked="1">
<properties> <properties>
<property name="spriteLayer" type="bool" value="true"/> <property name="spriteLayer" type="bool" value="true"/>
@@ -178,37 +180,37 @@
</data> </data>
</layer> </layer>
<objectgroup id="4" name="Enemies" locked="1"> <objectgroup id="4" name="Enemies" locked="1">
<object id="12" template="../obj/enemy.tx" name="Falcon-headed Aven Initiate" x="592" y="320"> <object id="12" template="../../obj/enemy.tx" name="Falcon-headed Aven Initiate" x="592" y="320">
<properties> <properties>
<property name="enemy" value="Falcon-headed Aven Warrior"/> <property name="enemy" value="Falcon-headed Aven Warrior"/>
</properties> </properties>
</object> </object>
<object id="13" template="../obj/enemy.tx" name="Ibis-headed Aven Initiate" x="592" y="272"> <object id="13" template="../../obj/enemy.tx" name="Ibis-headed Aven Initiate" x="592" y="272">
<properties> <properties>
<property name="enemy" value="Ibis-headed Aven Warrior"/> <property name="enemy" value="Ibis-headed Aven Warrior"/>
</properties> </properties>
</object> </object>
<object id="14" template="../obj/enemy.tx" name="Minotaur Initiate" x="592" y="224"> <object id="14" template="../../obj/enemy.tx" name="Minotaur Initiate" x="592" y="224">
<properties> <properties>
<property name="enemy" value="Amonkhet Minotaur Warrior"/> <property name="enemy" value="Amonkhet Minotaur Warrior"/>
</properties> </properties>
</object> </object>
<object id="15" template="../obj/enemy.tx" name="Khenra Initiate" x="752" y="224"> <object id="15" template="../../obj/enemy.tx" name="Khenra Initiate" x="752" y="224">
<properties> <properties>
<property name="enemy" value="Khenra Warrior"/> <property name="enemy" value="Khenra Warrior"/>
</properties> </properties>
</object> </object>
<object id="16" template="../obj/enemy.tx" name="Naga Initiate" x="752" y="272"> <object id="16" template="../../obj/enemy.tx" name="Naga Initiate" x="752" y="272">
<properties> <properties>
<property name="enemy" value="Naga Warrior"/> <property name="enemy" value="Naga Warrior"/>
</properties> </properties>
</object> </object>
<object id="17" template="../obj/enemy.tx" name="Human Initiate" x="752" y="320"> <object id="17" template="../../obj/enemy.tx" name="Human Initiate" x="752" y="320">
<properties> <properties>
<property name="enemy" value="Warrior"/> <property name="enemy" value="Warrior"/>
</properties> </properties>
</object> </object>
<object id="18" template="../obj/enemy.tx" name="Anointed" x="672" y="224"> <object id="18" template="../../obj/enemy.tx" name="Anointed" x="672" y="224">
<properties> <properties>
<property name="enemy" value="Mummy"/> <property name="enemy" value="Mummy"/>
</properties> </properties>

View File

@@ -0,0 +1,196 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="30" height="22" tilewidth="16" tileheight="16" infinite="0" nextlayerid="9" nextobjectid="90">
<editorsettings>
<export target="wastetown..tmx" format="tmx"/>
</editorsettings>
<tileset firstgid="1" source="../tileset/main.tsx"/>
<tileset firstgid="10113" source="../tileset/buildings.tsx"/>
<layer id="6" name="Collision" width="30" height="22">
<data encoding="base64" compression="zlib">
eJzt1dEJgCAQBmAfDW6DaJxs1GiEapxoj4o8uEwl9ZSIfriX5Pz4oUhVQqiXjxnOu1xxuTnj6/tF12WU6kt7x74nId66TwNC1HA9x2cLs40mNWzuES6bmkcmOAfPzGcctmmGJMW27WG3Wfcb4d7Xtx/rltj/+5brO8i43V6mf0vUftI31XTZvnCZITa3SW2cTt/fZvwf2XzTjc0GSO1G/w==
</data>
</layer>
<layer id="1" name="Background" width="30" height="22">
<data encoding="base64" compression="zlib">
eJxjYBhZwI2TeEyJXkrwcLD3CTvxGARIUT+KR/EoHsWjeBSP4sGFARkE62E=
</data>
</layer>
<layer id="2" name="Ground" width="30" height="22">
<data encoding="base64" compression="zlib">
eJzt1M0NgzAMBWDfOCSZIHQI1imz0K7VH9img5AIWaRRRZ4NgqqqpXeAyHwxikL0/fWq3nOUu5cdncYfP++aulk8uSvprbMgPa0jetg5sdLns9vO5fVoPu3yP7sDtmRexERt1JWYiI24GrNkI+5JaXJ55bx/97fdIeRqdGYX+nqlWyttNj99V3JPSuwlU3pPonbJlLqpfTFTeA+dmd+VTI2b9/BZ94r9pxkBhlPcCw==
</data>
</layer>
<layer id="7" name="Ornamental Walls" width="30" height="22">
<data encoding="base64" compression="zlib">
eJzt1TEOgCAQBMCrkQ9YGZ+KPNVY+wUbL8ELGljW7ja5hkCmgA0ibTnn+vydmuGuu2j2ILJNz1GzXDsC31zj974l8uxWk2n3miwbMa2NuiNx1923c2gXtINI0B6ivR+xGWavzTStrZPvu0vmj2KaNsm4eeDdXx51O/I=
</data>
</layer>
<layer id="3" name="Clutter" width="30" height="22">
<properties>
<property name="spriteLayer" type="bool" value="true"/>
</properties>
<data encoding="base64" compression="zlib">
eJxjYBgFo2AU0AtIazEwyGihimlqMjBoadLWXnOgnRZo9roC7XSjsb3I4J8k/eyiF2hD4yvwQLAiD4Qvz4MQw6dvqAJi/TtUwWj8Du/4xQYKNPHzRwFuAABfLAtS
</data>
</layer>
<layer id="8" name="Overhang" width="30" height="22">
<data encoding="base64" compression="zlib">
eJxjYBgFo2BkAwWegXbBKBgFo2AUjIJRMLQBAEtjAC0=
</data>
</layer>
<objectgroup id="4" name="Objects">
<object id="38" template="../obj/entry_up.tx" x="208.333" y="350.665">
<properties>
<property name="teleport" value=""/>
</properties>
</object>
<object id="50" template="../obj/enemy.tx" x="208.402" y="144.809">
<properties>
<property name="enemy" value="High Cultist"/>
<property name="reward">[
{
&quot;type&quot;: &quot;item&quot;,
&quot;probability&quot;: 1,
&quot;count&quot;: 1,
&quot;itemName&quot;: &quot;Cultist's Key&quot;
}
]
</property>
<property name="threatRange" type="int" value="30"/>
</properties>
</object>
<object id="66" template="../obj/treasure.tx" x="224" y="95.5">
<properties>
<property name="reward">[{
&quot;type&quot;: &quot;randomCard&quot;,
&quot;count&quot;: 2,
&quot;colors&quot;: [ &quot;colorID&quot; ]
},{
&quot;type&quot;: &quot;randomCard&quot;,
&quot;count&quot;: 1,
&quot;probability&quot;: 0.5,
&quot;rarity&quot;: [ &quot;rare&quot; ],
&quot;colors&quot;: [ &quot;colorID&quot; ]
},{
&quot;type&quot;: &quot;randomCard&quot;,
&quot;count&quot;: 3,
&quot;addMaxCount&quot;: 2
}]</property>
</properties>
</object>
<object id="67" template="../obj/booster.tx" x="224.25" y="80.25">
<properties>
<property name="reward">[
{
&quot;editions&quot;: [ &quot;SOI&quot;, &quot;EMN&quot;, &quot;MID&quot;, &quot;VOW&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 10,
&quot;rarity&quot;: [ &quot;Common&quot; ]
},
{
&quot;editions&quot;: [ &quot;SOI&quot;, &quot;EMN&quot;, &quot;MID&quot;, &quot;VOW&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 3,
&quot;rarity&quot;: [ &quot;Uncommon&quot; ]
},
{
&quot;editions&quot;: [ &quot;SOI&quot;, &quot;EMN&quot;, &quot;MID&quot;, &quot;VOW&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 1,
&quot;rarity&quot;: [ &quot;Rare&quot;, &quot;Mythic Rare&quot; ]
}
]
</property>
</properties>
</object>
<object id="68" template="../obj/enemy.tx" x="172" y="205.5">
<properties>
<property name="enemy" value="False Monk"/>
<property name="threatRange" type="int" value="40"/>
</properties>
</object>
<object id="69" template="../obj/enemy.tx" x="174" y="236.5">
<properties>
<property name="enemy" value="False Monk"/>
<property name="threatRange" type="int" value="40"/>
</properties>
</object>
<object id="70" template="../obj/enemy.tx" x="170" y="270">
<properties>
<property name="enemy" value="False Monk"/>
<property name="threatRange" type="int" value="40"/>
</properties>
</object>
<object id="71" template="../obj/enemy.tx" x="243" y="270">
<properties>
<property name="enemy" value="False Monk"/>
<property name="threatRange" type="int" value="40"/>
</properties>
</object>
<object id="72" template="../obj/enemy.tx" x="243.5" y="235">
<properties>
<property name="enemy" value="False Monk"/>
<property name="threatRange" type="int" value="40"/>
</properties>
</object>
<object id="73" template="../obj/enemy.tx" x="243" y="204.5">
<properties>
<property name="enemy" value="False Monk"/>
<property name="threatRange" type="int" value="40"/>
</properties>
</object>
<object id="74" template="../obj/enemy.tx" x="120" y="182">
<properties>
<property name="enemy" value="False Knight"/>
<property name="threatRange" type="int" value="50"/>
<property name="waypoints" value="78,83,79,81,80,82,77,76"/>
</properties>
</object>
<object id="75" template="../obj/enemy.tx" x="300.5" y="186">
<properties>
<property name="enemy" value="False Knight"/>
<property name="threatRange" type="int" value="50"/>
<property name="waypoints" value="81,80,82,77,76,78,83,79"/>
</properties>
</object>
<object id="76" template="../obj/waypoint.tx" x="124" y="216"/>
<object id="77" template="../obj/waypoint.tx" x="121.5" y="267"/>
<object id="78" template="../obj/waypoint.tx" x="134.5" y="165.5"/>
<object id="79" template="../obj/waypoint.tx" x="281.5" y="171"/>
<object id="80" template="../obj/waypoint.tx" x="293" y="268"/>
<object id="81" template="../obj/waypoint.tx" x="301" y="215.5"/>
<object id="82" template="../obj/waypoint.tx" x="208" y="270"/>
<object id="83" template="../obj/waypoint.tx" x="209" y="175.5"/>
<object id="84" template="../obj/enemy.tx" x="207.5" y="224.5">
<properties>
<property name="enemy" value="False Knight"/>
<property name="threatRange" type="int" value="50"/>
<property name="waypoints" value="83,82"/>
</properties>
</object>
<object id="85" template="../obj/manashards.tx" x="98.5" y="224"/>
<object id="86" template="../obj/gate.tx" x="207.75" y="124.5" width="16.4999" height="22">
<properties>
<property name="dialog">[{
&quot;text&quot;:&quot;This door is locked&quot;,
&quot;options&quot;:[
{ &quot;name&quot;:&quot;Leave&quot; },
{
&quot;name&quot;:&quot;Unlock with Cultist's Key&quot;,
&quot;condition&quot;:[{&quot;item&quot;:&quot;Cultist's Key&quot;}],
&quot;text&quot;:&quot;The gate is unlocked.&quot;,
&quot;options&quot;:[{&quot;name&quot;:&quot;Continue.&quot;, &quot;action&quot;:[ {&quot;deleteMapObject&quot;:-1},{&quot;removeItem&quot;:&quot;Cultist's Key&quot;}]} ]
}
]
}]</property>
</properties>
</object>
<object id="87" template="../obj/manashards.tx" x="321.5" y="217.75"/>
<object id="88" template="../obj/manashards.tx" x="192.25" y="128.5"/>
<object id="89" template="../obj/entry_up.tx" gid="1073753167" x="192.087" y="64" rotation="0">
<properties>
<property name="teleport" value="../common/maps/map/unhallowed_abbey_2F.tmx"/>
</properties>
</object>
</objectgroup>
</map>

View File

@@ -0,0 +1,411 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="30" height="19" tilewidth="16" tileheight="16" infinite="0" nextlayerid="8" nextobjectid="117">
<editorsettings>
<export target="wastetown..tmx" format="tmx"/>
</editorsettings>
<properties>
<property name="dungeonEffect" value=""/>
</properties>
<tileset firstgid="1" source="../tileset/main.tsx"/>
<tileset firstgid="10113" source="../tileset/buildings.tsx"/>
<tileset firstgid="11905" source="../tileset/DarkAbbeyTiles.tsx"/>
<layer id="6" name="Collision" width="30" height="19">
<data encoding="base64" compression="zlib">
eJxjYBi8wI2TMKaFnU8JmPuYynYTYye17SbFTmrZjctOdDOx2UGJ3SB903gxMUh8Nw9x6si1FxsAmYmPj6yfHLuxhScuc7DJDXV76aUfpG8lB3l6l3NQnpdgdhMbzpTaiW43MfZSy050u/EBatuJbDe+dEurOgnZHnz84WgvtcIWAIOHLCo=
</data>
</layer>
<layer id="1" name="Background" width="30" height="19">
<data encoding="base64" compression="zlib">
eJx7ws7A8GQI4UJ54jE1zCAVD4Sd+Oynt33UjD9y7B6u4QyzE91uevkRXYxe4YzN/8MtXvHZTUt34Ms/tPY/NrMHMv8OZN1ArDtM+BhQQBM3+XaBzCIFIwNS9Q4GDAAw7Fue
</data>
</layer>
<layer id="2" name="Ground" width="30" height="19">
<data encoding="base64" compression="zlib">
eJzV1F0KwkAMBOB9788F2tIzCD2NnsIDqNeqtb2bK7IQFpvMBFcwMBS2bL/koZnrEOYfpM+C3Dk1ISz1fo7N99z0/mU+4lOrO2Az8yImaqMuYyI24npMy0bcQZjn0U5enXPeQZkV6aGEm2ytp1KuVaXcQ4e5U8u5W8yt8s16ifdW57y9007mp+8ye5KxNZPdk6htmawr7Wv1jvxP05lletz8jtwRbP8ybGn78R/qCRGT22E=
</data>
</layer>
<layer id="7" name="Ornamental Walls" width="30" height="19">
<data encoding="base64" compression="zlib">
eJzl1G0OQDAMBuD+ZnoFcRXBwdzFvTDugcwSZsOqPhJv0tik2xM/CuCbkQFAGR5XH/CbidjviwWffdbktF1mFaky11y26zszXO9T3PZom+p2450S18/JLWYrR+Xa+q64tjTjne3s1qj2Puep7t3n/+hSZ0HPICXUOfT913DYHKavzWmatq5llu85TTM294m86ZpFzQDLEj8K
</data>
</layer>
<layer id="3" name="Clutter" width="30" height="19">
<properties>
<property name="spriteLayer" type="bool" value="true"/>
</properties>
<data encoding="base64" compression="zlib">
eJxjYBgFo2AUDDZQKE89sx5rMjA80SRdjlLwH2SuFulyo4A0MBq/o2AU4AcAe0YOPQ==
</data>
</layer>
<objectgroup id="4" name="Objects">
<object id="66" template="../obj/treasure.tx" x="256.447" y="95.763">
<properties>
<property name="reward">[{
&quot;type&quot;: &quot;randomCard&quot;,
&quot;count&quot;: 2,
&quot;colors&quot;: [ &quot;colorID&quot; ]
},{
&quot;type&quot;: &quot;randomCard&quot;,
&quot;count&quot;: 1,
&quot;probability&quot;: 0.5,
&quot;rarity&quot;: [ &quot;rare&quot; ],
&quot;colors&quot;: [ &quot;colorID&quot; ]
},{
&quot;type&quot;: &quot;randomCard&quot;,
&quot;count&quot;: 3,
&quot;addMaxCount&quot;: 2
}]</property>
</properties>
</object>
<object id="75" template="../obj/enemy.tx" x="291.571" y="166.141">
<properties>
<property name="enemy" value="Demon"/>
<property name="threatRange" type="int" value="30"/>
<property name="waypoints" value="100,101,99"/>
</properties>
</object>
<object id="83" template="../obj/waypoint.tx" x="193.014" y="286.598"/>
<object id="86" template="../obj/entry_up.tx" x="208.316" y="175.684">
<properties>
<property name="teleport" value="../common/maps/map/unhallowed_abbey_1F.tmx"/>
</properties>
</object>
<object id="87" template="../obj/booster.tx" x="272.228" y="95.7719">
<properties>
<property name="reward">[
{
&quot;editions&quot;: [ &quot;VOW&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 10,
&quot;rarity&quot;: [ &quot;Common&quot; ]
},
{
&quot;editions&quot;: [ &quot;VOW&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 3,
&quot;rarity&quot;: [ &quot;Uncommon&quot; ]
},
{
&quot;editions&quot;: [ &quot;VOW&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 1,
&quot;rarity&quot;: [ &quot;Rare&quot;, &quot;Mythic Rare&quot; ]
}
]
</property>
</properties>
</object>
<object id="88" template="../obj/treasure.tx" x="240.333" y="47.6667">
<properties>
<property name="reward">[{
&quot;type&quot;: &quot;randomCard&quot;,
&quot;count&quot;: 2,
&quot;colors&quot;: [ &quot;colorID&quot; ]
},{
&quot;type&quot;: &quot;randomCard&quot;,
&quot;count&quot;: 1,
&quot;probability&quot;: 0.5,
&quot;rarity&quot;: [ &quot;rare&quot; ],
&quot;colors&quot;: [ &quot;colorID&quot; ]
},{
&quot;type&quot;: &quot;randomCard&quot;,
&quot;count&quot;: 3,
&quot;addMaxCount&quot;: 2
}]</property>
</properties>
</object>
<object id="89" template="../obj/booster.tx" x="257.333" y="47.3333">
<properties>
<property name="reward">[
{
&quot;editions&quot;: [ &quot;MID&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 10,
&quot;rarity&quot;: [ &quot;Common&quot; ]
},
{
&quot;editions&quot;: [ &quot;MID&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 3,
&quot;rarity&quot;: [ &quot;Uncommon&quot; ]
},
{
&quot;editions&quot;: [ &quot;MID&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 1,
&quot;rarity&quot;: [ &quot;Rare&quot;, &quot;Mythic Rare&quot; ]
}
]
</property>
</properties>
</object>
<object id="90" template="../obj/treasure.tx" x="175.667" y="48.3333">
<properties>
<property name="reward">[{
&quot;type&quot;: &quot;randomCard&quot;,
&quot;count&quot;: 2,
&quot;colors&quot;: [ &quot;colorID&quot; ]
},{
&quot;type&quot;: &quot;randomCard&quot;,
&quot;count&quot;: 1,
&quot;probability&quot;: 0.5,
&quot;rarity&quot;: [ &quot;rare&quot; ],
&quot;colors&quot;: [ &quot;colorID&quot; ]
},{
&quot;type&quot;: &quot;randomCard&quot;,
&quot;count&quot;: 3,
&quot;addMaxCount&quot;: 2
}]</property>
</properties>
</object>
<object id="91" template="../obj/treasure.tx" x="144.333" y="95">
<properties>
<property name="reward">[{
&quot;type&quot;: &quot;randomCard&quot;,
&quot;count&quot;: 2,
&quot;colors&quot;: [ &quot;colorID&quot; ]
},{
&quot;type&quot;: &quot;randomCard&quot;,
&quot;count&quot;: 1,
&quot;probability&quot;: 0.5,
&quot;rarity&quot;: [ &quot;rare&quot; ],
&quot;colors&quot;: [ &quot;colorID&quot; ]
},{
&quot;type&quot;: &quot;randomCard&quot;,
&quot;count&quot;: 3,
&quot;addMaxCount&quot;: 2
}]</property>
</properties>
</object>
<object id="92" template="../obj/booster.tx" x="127.667" y="94">
<properties>
<property name="reward">[
{
&quot;editions&quot;: [ &quot;SOI&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 10,
&quot;rarity&quot;: [ &quot;Common&quot; ]
},
{
&quot;editions&quot;: [ &quot;SOI&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 3,
&quot;rarity&quot;: [ &quot;Uncommon&quot; ]
},
{
&quot;editions&quot;: [ &quot;SOI&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 1,
&quot;rarity&quot;: [ &quot;Rare&quot;, &quot;Mythic Rare&quot; ]
}
]
</property>
</properties>
</object>
<object id="93" template="../obj/booster.tx" x="159" y="47">
<properties>
<property name="reward">[
{
&quot;editions&quot;: [ &quot;EMN&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 10,
&quot;rarity&quot;: [ &quot;Common&quot; ]
},
{
&quot;editions&quot;: [ &quot;EMN&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 3,
&quot;rarity&quot;: [ &quot;Uncommon&quot; ]
},
{
&quot;editions&quot;: [ &quot;EMN&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 1,
&quot;rarity&quot;: [ &quot;Rare&quot;, &quot;Mythic Rare&quot; ]
}
]
</property>
</properties>
</object>
<object id="94" template="../obj/enemy.tx" x="208.666" y="270.394">
<properties>
<property name="enemy" value="Demon"/>
<property name="threatRange" type="int" value="30"/>
<property name="waypoints" value="98,97,83"/>
</properties>
</object>
<object id="95" template="../obj/enemy.tx" x="122.212" y="172.727">
<properties>
<property name="enemy" value="Demon"/>
<property name="threatRange" type="int" value="30"/>
<property name="waypoints" value="104,102,103"/>
</properties>
</object>
<object id="97" template="../obj/waypoint.tx" x="192.727" y="255.455"/>
<object id="98" template="../obj/waypoint.tx" x="223.091" y="255.455"/>
<object id="99" template="../obj/waypoint.tx" x="288.545" y="127.273"/>
<object id="100" template="../obj/waypoint.tx" x="287.636" y="192"/>
<object id="101" template="../obj/waypoint.tx" x="319.091" y="159.273"/>
<object id="102" template="../obj/waypoint.tx" x="97.4545" y="159.636"/>
<object id="103" template="../obj/waypoint.tx" x="126.545" y="127.455"/>
<object id="104" template="../obj/waypoint.tx" x="125.636" y="200.909"/>
<object id="108" name="Ward" class="dialog" gid="11912" x="192.063" y="128.292" width="48" height="16">
<properties>
<property name="dialog">[{
&quot;text&quot;:&quot;A translucent, shimmering red field blocks your path. Pained screams echo through the room behind you.&quot;,
&quot;options&quot;:[
{ &quot;name&quot;:&quot;Leave.&quot; }
]
}]</property>
</properties>
</object>
<object id="109" name="Sacrifice1" class="dialog" gid="11905" x="159.667" y="123.333" width="16" height="16">
<properties>
<property name="dialog">[
{
&quot;text&quot;:&quot;A captive lies tied to the altar. Glowing red runes encircle them.&quot;,
&quot;options&quot;:[
{
&quot;text&quot;:&quot;As the third captive is freed, you hear the sound of shattering as the barrier in the center of the chamber fails. Time to end this.&quot;,
&quot;action&quot;:[{&quot;deleteMapObject&quot;:-1},{&quot;advanceMapFlag&quot;:&quot;gate&quot;}],
&quot;name&quot;:&quot;Free them.&quot;
&quot;options&quot;:[{
&quot;condition&quot;:[{&quot;getMapFlag&quot;:{&quot;key&quot;:&quot;gate&quot;,&quot;op&quot;:&quot;&gt;=&quot;,&quot;val&quot;:3}}],
&quot;action&quot;:[{&quot;deleteMapObject&quot;:108}],
&quot;name&quot;:&quot;ok&quot; }]
},
{ &quot;name&quot;:&quot;Leave.&quot; }
]
}
]</property>
</properties>
</object>
<object id="110" name="Sacrifice2" class="dialog" gid="11906" x="256.667" y="123.667" width="16" height="16">
<properties>
<property name="dialog">[
{
&quot;text&quot;:&quot;A captive lies tied to the altar. Glowing red runes encircle them.&quot;,
&quot;options&quot;:[
{
&quot;text&quot;:&quot;As the third captive is freed, you hear the sound of shattering as the barrier in the center of the chamber fails. Time to end this.&quot;,
&quot;action&quot;:[{&quot;deleteMapObject&quot;:-1},{&quot;advanceMapFlag&quot;:&quot;gate&quot;}],
&quot;name&quot;:&quot;Free them.&quot;
&quot;options&quot;:[{
&quot;condition&quot;:[{&quot;getMapFlag&quot;:{&quot;key&quot;:&quot;gate&quot;,&quot;op&quot;:&quot;&gt;=&quot;,&quot;val&quot;:3}}],
&quot;action&quot;:[{&quot;deleteMapObject&quot;:108}],
&quot;name&quot;:&quot;ok&quot; }]
},
{ &quot;name&quot;:&quot;Leave.&quot; }
]
}
]</property>
</properties>
</object>
<object id="111" name="Sacrifice3" class="dialog" gid="11907" x="224" y="285.333" width="16" height="16">
<properties>
<property name="dialog">[
{
&quot;text&quot;:&quot;A captive lies tied to the altar. Glowing red runes encircle them.&quot;,
&quot;options&quot;:[
{
&quot;text&quot;:&quot;As the third captive is freed, you hear the sound of shattering as the barrier in the center of the chamber fails. Time to end this.&quot;,
&quot;action&quot;:[{&quot;deleteMapObject&quot;:-1},{&quot;advanceMapFlag&quot;:&quot;gate&quot;}],
&quot;name&quot;:&quot;Free them.&quot;
&quot;options&quot;:[{
&quot;condition&quot;:[{&quot;getMapFlag&quot;:{&quot;key&quot;:&quot;gate&quot;,&quot;op&quot;:&quot;&gt;=&quot;,&quot;val&quot;:3}}],
&quot;action&quot;:[{&quot;deleteMapObject&quot;:108}],
&quot;name&quot;:&quot;ok&quot; }]
},
{ &quot;name&quot;:&quot;Leave.&quot; }
]
}
]</property>
</properties>
</object>
<object id="113" template="../obj/dialog.tx" x="209.364" y="114.091" width="13.8182" height="13.3636">
<properties>
<property name="dialog">[{
&quot;text&quot;:&quot;*The large, imposing demon before you smirks*\n Ah, so you must be the one who's been freeing my sacrifices...and the volunteer to be my new one. Tell me, mortal, as your last words that aren't a howl of pain - why challenge me?&quot;,
&quot;options&quot;:[{
&quot;name&quot;:&quot;Because you're a monster, and you should be stopped!&quot;,
&quot;text&quot;:&quot;*The demon sneers.*\n Ah, a noble *hero*. I should have guessed. Your kind die like anyone else when your power runs dry - allow me to demonstrate!&quot;,
&quot;options&quot;:[{
&quot;name&quot;:&quot;End&quot;,
&quot;action&quot;:[{&quot;deleteMapObject&quot;:113}]
}]
},
{
&quot;name&quot;:&quot;I want power. I'll take it from what's left of you.&quot;,
&quot;text&quot;:&quot;*The demon chuckles.*\n I'll commend your ambition, if not your sense. Fight hard enough, and I might let you replace that failure you dealt with upstairs.&quot;,
&quot;options&quot;:[{
&quot;name&quot;:&quot;End&quot;,
&quot;action&quot;:[{&quot;deleteMapObject&quot;:113}]
}]
},
{
&quot;name&quot;:&quot;Honestly, you just looked like you'd be a good fight.&quot;,
&quot;text&quot;:&quot;*The demon blinks in surprise, then laughs.*\n Well, if that's what you seek, you'll find more than you bargained for here. I hope you enjoy the last battle of your life, *mortal*.&quot;,
&quot;options&quot;:[{
&quot;name&quot;:&quot;End&quot;,
&quot;action&quot;:[{&quot;deleteMapObject&quot;:113}]
}]
},
{
&quot;name&quot;:&quot;...&quot;,
&quot;text&quot;:&quot;*The fiend's eyes narrow.*\n Too scared for words? So be it, mortal. You'll die all the same.&quot;,
&quot;options&quot;:[{
&quot;name&quot;:&quot;End&quot;,
&quot;action&quot;:[{&quot;deleteMapObject&quot;:113}]
}]
}]
}]</property>
</properties>
</object>
<object id="116" template="../obj/enemy.tx" x="203.566" y="96.2358" width="24" height="24">
<properties>
<property name="defeatDialog">[{
&quot;text&quot;:&quot;*With a snarl of pain, the demon collapses to the floor.* \n Congratulations, mortal, you've bested me. In exchange for my life, I offer a lesson - the same killing power I wield.&quot;,
&quot;options&quot;:[{
&quot;name&quot;:&quot;I have no need for power from something as vile as you. Die!&quot;,
&quot;text&quot;:&quot;*The demon's eyes widen in fear.* \n No! I will not be destroyed by- \n *A final blast of power reduces him to mana in the air of this place, and something clatters to the ground. A holy symbol of this place - or rather, what it once was. As the unholy energy around it fades, you can still feel magic coursing through it.*&quot;
&quot;options&quot;:[{
&quot;name&quot;:&quot;End&quot;,
&quot;action&quot;:[{&quot;addItem&quot;:&quot;Hallowed Sigil&quot;},{&quot;deleteMapObject&quot;:116}]
}]
},
{
&quot;name&quot;:&quot;If you knew anything worth teaching me directly, I wouldn't have been able to defeat you.&quot;,
&quot;text&quot;:&quot;*The demon's eyes widen in fear.* \n No! I will not be destroyed by- \n *A final blast of power reduces him to mana in the air of this place, and something clatters to the ground. A holy symbol of this place - or rather, what it once was. As the unholy energy around it fades, you can still feel magic coursing through it.*&quot;
&quot;options&quot;:[{
&quot;name&quot;:&quot;End&quot;,
&quot;action&quot;:[{&quot;addItem&quot;:&quot;Hallowed Sigil&quot;},{&quot;deleteMapObject&quot;:116}]
}]
},
{
&quot;name&quot;:&quot;...Very well, even a monster like you deserves mercy. *Once.*&quot;,
&quot;text&quot;:&quot;*The demon smiles, moving his hand in an arcane gesture.* \n *As you unconsciously mimic it, you feel a dark, repulsive power crystallize in your hand. \n *The demon smiles as he begins to fade into a cloud of smoke.* \n Very well, mortal. My power is yours to wield...until next time.&quot;
&quot;options&quot;:[{
&quot;name&quot;:&quot;End&quot;,
&quot;action&quot;:[{&quot;addItem&quot;:&quot;Unhallowed Sigil&quot;},{&quot;deleteMapObject&quot;:116}]
}]
},
{
&quot;name&quot;:&quot;As you should. I'll take your offer.&quot;,
&quot;text&quot;:&quot;*The demon smiles, moving his hand in an arcane gesture.* \n *As you unconsciously mimic it, you feel a dark, repulsive power crystallize in your hand. \n *The demon smiles as he begins to fade into a cloud of smoke.* \n Very well, mortal. My power is yours to wield...until next time.&quot;
&quot;options&quot;:[{
&quot;name&quot;:&quot;End&quot;,
&quot;action&quot;:[{&quot;addItem&quot;:&quot;Unhallowed Sigil&quot;},{&quot;deleteMapObject&quot;:116}]
}]
}]
}]
</property>
<property name="effect">{ &quot;startBattleWithCard&quot;: [ &quot;Mox Jet&quot;, &quot;Power of Valyx&quot;]
}</property>
<property name="enemy" value="Valyx Feaster of Torment"/>
</properties>
</object>
</objectgroup>
</map>

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 B

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.9" tiledversion="1.9.2" name="DarkAbbeyTiles" tilewidth="16" tileheight="16" tilecount="30" columns="6">
<image source="DarkAbbeyTiles.png" width="96" height="80"/>
</tileset>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1,68 @@
valyx.png
size: 136,96
format: RGBA8888
filter: Nearest,Nearest
repeat: none
Avatar
xy: 0, 0
size: 16, 16
Idle
xy: 0, 16
size: 24, 24
Idle
xy: 24, 16
size: 24, 24
Idle
xy: 48, 16
size: 24, 24
Idle
xy: 72, 16
size: 24, 24
Walk
xy: 0, 40
size: 24, 24
Walk
xy: 24, 40
size: 24, 24
Walk
xy: 48, 40
size: 24, 24
Walk
xy: 72, 40
size: 24, 24
Attack
xy: 0, 64
size: 24, 24
Attack
xy: 24, 64
size: 24, 24
Attack
xy: 48, 64
size: 24, 24
Attack
xy: 72, 64
size: 24, 24
Hit
xy: 0, 88
size: 24, 24
Hit
xy: 24, 88
size: 24, 24
Hit
xy: 48, 88
size: 24, 24
Hit
xy: 72, 88
size: 24, 24
Death
xy: 0, 112
size: 24, 24
Death
xy: 24, 112
size: 24, 24
Death
xy: 48, 112
size: 24, 24
Death
xy: 72, 112
size: 24, 24

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -0,0 +1,68 @@
false_knight.png
size: 64,96
format: RGBA8888
filter: Nearest,Nearest
repeat: none
Avatar
xy: 0, 0
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 16, 16
size: 16, 16
Idle
xy: 32, 16
size: 16, 16
Idle
xy: 48, 16
size: 16, 16
Walk
xy: 0, 32
size: 16, 16
Walk
xy: 16, 32
size: 16, 16
Walk
xy: 32, 32
size: 16, 16
Walk
xy: 48, 32
size: 16, 16
Attack
xy: 0, 48
size: 16, 16
Attack
xy: 16, 48
size: 16, 16
Attack
xy: 32, 48
size: 16, 16
Attack
xy: 48, 48
size: 16, 16
Hit
xy: 0, 64
size: 16, 16
Hit
xy: 16, 64
size: 16, 16
Hit
xy: 32, 64
size: 16, 16
Hit
xy: 48, 64
size: 16, 16
Death
xy: 0, 80
size: 16, 16
Death
xy: 16, 80
size: 16, 16
Death
xy: 32, 80
size: 16, 16
Death
xy: 48, 80
size: 16, 16

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -0,0 +1,68 @@
false_monk.png
size: 64,96
format: RGBA8888
filter: Nearest,Nearest
repeat: none
Avatar
xy: 0, 0
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 16, 16
size: 16, 16
Idle
xy: 32, 16
size: 16, 16
Idle
xy: 48, 16
size: 16, 16
Walk
xy: 0, 32
size: 16, 16
Walk
xy: 16, 32
size: 16, 16
Walk
xy: 32, 32
size: 16, 16
Walk
xy: 48, 32
size: 16, 16
Attack
xy: 0, 48
size: 16, 16
Attack
xy: 16, 48
size: 16, 16
Attack
xy: 32, 48
size: 16, 16
Attack
xy: 48, 48
size: 16, 16
Hit
xy: 0, 64
size: 16, 16
Hit
xy: 16, 64
size: 16, 16
Hit
xy: 32, 64
size: 16, 16
Hit
xy: 48, 64
size: 16, 16
Death
xy: 0, 80
size: 16, 16
Death
xy: 16, 80
size: 16, 16
Death
xy: 32, 80
size: 16, 16
Death
xy: 48, 80
size: 16, 16

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1,68 @@
high_cultist.png
size: 64,96
format: RGBA8888
filter: Nearest,Nearest
repeat: none
Avatar
xy: 0, 0
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 16, 16
size: 16, 16
Idle
xy: 32, 16
size: 16, 16
Idle
xy: 48, 16
size: 16, 16
Walk
xy: 0, 32
size: 16, 16
Walk
xy: 16, 32
size: 16, 16
Walk
xy: 32, 32
size: 16, 16
Walk
xy: 48, 32
size: 16, 16
Attack
xy: 0, 48
size: 16, 16
Attack
xy: 16, 48
size: 16, 16
Attack
xy: 32, 48
size: 16, 16
Attack
xy: 48, 48
size: 16, 16
Hit
xy: 0, 64
size: 16, 16
Hit
xy: 16, 64
size: 16, 16
Hit
xy: 32, 64
size: 16, 16
Hit
xy: 48, 64
size: 16, 16
Death
xy: 0, 80
size: 16, 16
Death
xy: 16, 80
size: 16, 16
Death
xy: 32, 80
size: 16, 16
Death
xy: 48, 80
size: 16, 16

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -468,4 +468,9 @@ CartoucheOfAmbition
CartoucheOfZeal CartoucheOfZeal
xy:320,240 xy:320,240
size:16,16 size:16,16
HallowedSigil
xy:320,256
size:16,16
UnhallowedSigil
xy:320,272
size:16,16

Binary file not shown.

Before

Width:  |  Height:  |  Size: 273 KiB

After

Width:  |  Height:  |  Size: 272 KiB

View File

@@ -43,8 +43,8 @@
"x": 0.5, "x": 0.5,
"y": 0.5, "y": 0.5,
"structureAtlasPath": "world/tilesets/terrain.atlas", "structureAtlasPath": "world/tilesets/terrain.atlas",
"sourcePath": "world/models/fill.png", "sourcePath": "world/structures/models/fill.png",
"maskPath": "world/masks/fill.png", "maskPath": "world/structures/masks/fill.png",
"height": 0.99, "height": 0.99,
"width": 0.9, "width": 0.9,
"periodicOutput": false, "periodicOutput": false,

View File

@@ -32,8 +32,8 @@
"x": 0.5, "x": 0.5,
"y": 0.5, "y": 0.5,
"structureAtlasPath": "world/structures/structures.atlas", "structureAtlasPath": "world/structures/structures.atlas",
"sourcePath": "world/models/fill.png", "sourcePath": "world/structures/models/fill.png",
"maskPath": "world/masks/fill.png", "maskPath": "world/structures/masks/fill.png",
"height": 0.99, "height": 0.99,
"width": 0.9, "width": 0.9,
"periodicOutput": false, "periodicOutput": false,

View File

@@ -107,7 +107,8 @@
"CaveW6", "CaveW6",
"OrthodoxyBasilica", "OrthodoxyBasilica",
"Nahiri Encampment", "Nahiri Encampment",
"MageTower White" "MageTower White",
"UnhallowedAbbey"
], ],
"structures": [ "structures": [
{ {

View File

@@ -7840,6 +7840,168 @@
"BiomeWhite" "BiomeWhite"
] ]
}, },
{
"name": "False Knight",
"sprite": "sprites/enemy/humanoid/human/knight/false_knight.atlas",
"deck": [
"decks/standard/death_knight.dck"
],
"ai": "",
"spawnRate": 1,
"difficulty": 0.1,
"speed": 30,
"life": 18,
"rewards": [
{
"type": "deckCard",
"probability": 1,
"count": 2,
"addMaxCount": 4,
"rarity": [
"common"
]
},
{
"type": "deckCard",
"probability": 0.5,
"count": 1,
"addMaxCount": 2,
"rarity": [
"uncommon"
],
"cardTypes": [
"Creature",
"Artifact",
"Enchantment",
"Instant",
"Sorcery"
]
},
{
"type": "deckCard",
"probability": 0.25,
"count": 1,
"addMaxCount": 1,
"rarity": [
"rare",
"mythicrare"
],
"cardTypes": [
"Creature",
"Artifact",
"Enchantment",
"Instant",
"Sorcery"
]
},
{
"type": "deckCard",
"probability": 0.1,
"count": 1,
"rarity": [
"rare"
],
"cardTypes": [
"Land"
]
},
{
"type": "gold",
"probability": 0.3,
"count": 10,
"addMaxCount": 90
}
],
"colors": "B",
"questTags": [
"Disguised",
"Soldier",
"Human",
"Knight",
"Unholy",
"IdentityBlack"
]
},
{
"name": "False Monk",
"sprite": "sprites/enemy/humanoid/human/warlock/false_monk.atlas",
"deck": [
"decks/standard/cultist.dck"
],
"randomizeDeck": false,
"spawnRate": 1,
"difficulty": 0.1,
"speed": 24,
"life": 15,
"rewards": [
{
"type": "deckCard",
"probability": 1
"count": 2,
"addMaxCount": 2,
"rarity": [
"common"
]
},
{
"type": "deckCard",
"probability": 0.5,
"count": 1,
"addMaxCount": 1,
"rarity": [
"uncommon"
],
"cardTypes": [
"Creature",
"Artifact",
"Enchantment",
"Instant",
"Sorcery"
]
},
{
"type": "deckCard",
"probability": 0.25,
"count": 1,
"addMaxCount": 1,
"rarity": [
"rare",
"mythicrare"
],
"cardTypes": [
"Creature",
"Artifact",
"Enchantment",
"Instant",
"Sorcery"
]
},
{
"type": "deckCard",
"probability": 0.1,
"count": 1,
"rarity": [
"rare"
],
"cardTypes": [
"Land"
]
},
{
"type": "gold",
"probability": 0.3,
"count": 10,
"addMaxCount": 90
}
],
"colors": "B",
"questTags": [
"Human",
"Disguised",
"Unholy",
"IdentityBlack",
]
},
{ {
"name": "Farmer", "name": "Farmer",
"nameOverride": "", "nameOverride": "",
@@ -11673,6 +11835,86 @@
null null
] ]
}, },
{
"name": "High Cultist",
"sprite": "sprites/enemy/humanoid/human/warlock/high_cultist.atlas",
"deck": [
"decks/standard/cultist.dck"
],
"randomizeDeck": false,
"spawnRate": 1,
"difficulty": 0.1,
"speed": 24,
"life": 30,
"rewards": [
{
"type": "deckCard",
"probability": 1,
"count": 2,
"addMaxCount": 4,
"rarity": [
"common"
]
},
{
"type": "deckCard",
"probability": 0.5,
"count": 1,
"addMaxCount": 2,
"rarity": [
"uncommon"
],
"cardTypes": [
"Creature",
"Artifact",
"Enchantment",
"Instant",
"Sorcery"
]
},
{
"type": "deckCard",
"probability": 0.25,
"count": 1,
"addMaxCount": 1,
"rarity": [
"rare",
"mythicrare"
],
"cardTypes": [
"Creature",
"Artifact",
"Enchantment",
"Instant",
"Sorcery"
]
},
{
"type": "deckCard",
"probability": 0.1,
"count": 1,
"rarity": [
"rare"
],
"cardTypes": [
"Land"
]
},
{
"type": "gold",
"probability": 0.3,
"count": 10,
"addMaxCount": 90
}
],
"colors": "B",
"questTags": [
"Human",
"Disguised",
"Unholy",
"IdentityBlack",
]
},
{ {
"name": "High Elf", "name": "High Elf",
"sprite": "sprites/enemy/humanoid/elf/druid_2.atlas", "sprite": "sprites/enemy/humanoid/elf/druid_2.atlas",
@@ -21035,6 +21277,69 @@
"BiomeRed" "BiomeRed"
] ]
}, },
{
"name": "Valyx Feaster of Torment",
"sprite": "sprites/enemy/fiend/valyx.atlas",
"deck": [
"decks/miniboss/valyx.dck"
],
"ai": "",
"spawnRate": 1,
"difficulty": 0.1,
"speed": 31,
"life": 80,
"rewards": [
{
"type": "deckCard",
"probability": 1,
"count": 2,
"addMaxCount": 4,
"rarity": [
"common"
]
},
{
"type": "deckCard",
"probability": 1,
"count": 2,
"addMaxCount": 2,
"rarity": [
"uncommon"
],
"cardTypes": [
"Creature",
"Artifact",
"Enchantment",
"Instant",
"Sorcery"
]
},
{
"type": "deckCard",
"probability": 1,
"count": 2,
"addMaxCount": 1,
"rarity": [
"rare",
"mythicrare"
],
"cardTypes": [
"Creature",
"Artifact",
"Enchantment",
"Instant",
"Sorcery"
]
}
],
"colors": "B",
"questTags": [
"Demon",
"Humanoid",
"Unholy",
"IdentityBlack"
]
},
{ {
"name": "Vampire", "name": "Vampire",
"sprite": "sprites/enemy/undead/vampire.atlas", "sprite": "sprites/enemy/undead/vampire.atlas",

View File

@@ -1234,5 +1234,32 @@
"Slobad's Iron Boots" "Slobad's Iron Boots"
] ]
} }
},
{
"name": "Hallowed Sigil",
"description": "Turn a creature hexproof until end of turn.",
"equipmentSlot": "Neck",
"iconName": "HallowedSigil",
"effect": {
"startBattleWithCard": [
"Hallowed Sigil"
]
}
},
{
"name": "Unhallowed Sigil",
"description": "Devour the life of an enemy creature, killing it.",
"equipmentSlot": "Right",
"iconName": "UnhallowedSigil",
"effect": {
"startBattleWithCard": [
"Sigil of Torment"
]
}
},
{
"name": "Cultist's Key",
"iconName": "StrangeKey",
"questItem": true
} }
] ]

View File

@@ -3130,6 +3130,18 @@
"Planeswalker" "Planeswalker"
] ]
}, },
{
"name": "UnhallowedAbbey",
"type": "dungeon",
"count": 1,
"spriteAtlas": "maps/tileset/buildings.atlas",
"sprite": "Monastery",
"map": "../common/maps/map/unhallowed_abbey_1F.tmx",
"radiusFactor": 0.8,
"questTags": [
"UnhallowedAbbey"
]
},
{ {
"name": "VampireCastle", "name": "VampireCastle",
"type": "dungeon", "type": "dungeon",

View File

@@ -1,7 +1,7 @@
Name:Scepter of Celebration Name:Scepter of Celebration
ManaCost:2 G ManaCost:2 G
Types:Artifact Equipment Types:Artifact Equipment
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddKeyword$ Trample | Description$ Equipped creature gets +2/+2 and has trample. S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddKeyword$ Trample | Description$ Equipped creature gets +2/+0 and has trample.
T:Mode$ DamageDone | ValidSource$ Card.EquippedBy | Execute$ TrigToken | CombatDamage$ True | ValidTarget$ Player | TriggerZones$ Battlefield | TriggerDescription$ Whenever equipped creature deals combat damage to a player, create that many 1/1 green and white Citizen creature tokens. T:Mode$ DamageDone | ValidSource$ Card.EquippedBy | Execute$ TrigToken | CombatDamage$ True | ValidTarget$ Player | TriggerZones$ Battlefield | TriggerDescription$ Whenever equipped creature deals combat damage to a player, create that many 1/1 green and white Citizen creature tokens.
SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ gw_1_1_citizen SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ gw_1_1_citizen
SVar:X:TriggerCount$DamageAmount SVar:X:TriggerCount$DamageAmount

View File

@@ -4,7 +4,7 @@ Types:Legendary Creature Horse
PT:1/4 PT:1/4
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigFood | TriggerDescription$ When CARDNAME enters the battlefield, create two Food tokens. (Theyre artifacts with "{2}, Sacrifice this artifact: You gain 3 life.") T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigFood | TriggerDescription$ When CARDNAME enters the battlefield, create two Food tokens. (Theyre artifacts with "{2}, Sacrifice this artifact: You gain 3 life.")
SVar:TrigFood:DB$ Token | TokenAmount$ 2 | TokenScript$ c_a_food_sac | TokenOwner$ You SVar:TrigFood:DB$ Token | TokenAmount$ 2 | TokenScript$ c_a_food_sac | TokenOwner$ You
A:AB$ Effect | Cost$ Sac<2/Food> | ValidTgts$ Creature.YouCtrl | RememberObjects$ Targeted | StaticAbilities$ CombatDamageToughness | ForgetOnMoved$ Battlefield | TgtPrompt$ Select target creature you control | SpellDescription$ Until end of turn, target creature you control assigns combat damage equal to its toughness rather than its power. A:AB$ Effect | Cost$ Sac<1/Food> | ValidTgts$ Creature.YouCtrl | RememberObjects$ Targeted | StaticAbilities$ CombatDamageToughness | ForgetOnMoved$ Battlefield | TgtPrompt$ Select target creature you control | SpellDescription$ Until end of turn, target creature you control assigns combat damage equal to its toughness rather than its power.
SVar:CombatDamageToughness:Mode$ CombatDamageToughness | ValidCard$ Card.IsRemembered | Description$ This creature assigns combat damage equal to its toughness rather than its power. SVar:CombatDamageToughness:Mode$ CombatDamageToughness | ValidCard$ Card.IsRemembered | Description$ This creature assigns combat damage equal to its toughness rather than its power.
DeckHas:Ability$Token|LifeGain|Sacrifice & Type$Food DeckHas:Ability$Token|LifeGain|Sacrifice & Type$Food
DeckHints:Type$Food|Treefolk|Wall DeckHints:Type$Food|Treefolk|Wall

View File

@@ -0,0 +1,11 @@
Name:Grima, Saruman's Footman
ManaCost:2 U B
Types:Legendary Creature Human Advisor
PT:1/4
S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | Description$ CARDNAME can't be blocked.
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDigUntil | TriggerZones$ Battlefield | TriggerDescription$ Whenever NICKNAME deals combat damage to a player, that player exiles cards from the top of their library until they exile an instant or sorcery card. You may cast that card without paying its mana cost. Then that player puts the exiled cards that weren't cast this way on the bottom of their library in a random order.
SVar:TrigDigUntil:DB$ DigUntil | Defined$ TriggeredTarget | Valid$ Instant,Sorcery | ValidDescription$ instant or sorcery | FoundDestination$ Exile | RevealedDestination$ Exile | RememberFound$ True | IsCurse$ True | SubAbility$ DBPlay
SVar:DBPlay:DB$ Play | ValidZone$ Exile | Valid$ Instant.IsRemembered,Sorcery.IsRemembered | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | ForgetPlayed$ True | SubAbility$ DBRestRandomOrder
SVar:DBRestRandomOrder:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Exile | Destination$ Library | LibraryPosition$ -1 | RandomOrder$ True | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
Oracle:Grima, Saruman's Footman can't be blocked.\nWhenever Grima deals combat damage to a player, that player exiles cards from the top of their library until they exile an instant or sorcery card. You may cast that card without paying its mana cost. Then that player puts the exiled cards that weren't cast this way on the bottom of their library in a random order.

View File

@@ -0,0 +1,14 @@
Name:Gwaihir, Greatest of the Eagles
ManaCost:4 W
Types:Legendary Creature Bird Noble
PT:5/5
K:Flying
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever NICKNAME attacks, target attacking creature gains flying until end of turn.
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.attacking | TgtPrompt$ Select target attacking creature | KW$ Flying
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ LifeGained | SVarCompare$ GE3 | Execute$ TrigToken | TriggerDescription$ At the beginning of your end step, if you gained 3 or more life this turn, create a 3/3 white Bird creature token with flying and "Whenever this creature attacks, target attacking creature gains flying until end of turn."
SVar:TrigToken:DB$ Token | TokenScript$ w_3_3_bird_flying_attacks
SVar:LifeGained:Count$LifeYouGainedThisTurn
SVar:HasAttackEffect:TRUE
DeckHints:Ability$LifeGain
DeckHas:Ability$Token
Oracle:Flying\nWhenever Gwaihir attacks, target attacking creature gains flying until end of turn.\nAt the beginning of your end step, if you gained 3 or more life this turn, create a 3/3 white Bird creature token with flying and "Whenever this creature attacks, target attacking creature gains flying until end of turn."

View File

@@ -0,0 +1,11 @@
Name:Haldir, Lorien Lieutenant
ManaCost:X G
Types:Legendary Creature Elf Soldier
PT:0/0
K:Vigilance
K:etbCounter:P1P1:X
SVar:X:Count$xPaid
A:AB$ PumpAll | Cost$ 5 G | ValidCards$ Creature.Elf+StrictlyOther+YouCtrl | NumAtt$ Y | NumDef$ Y | KW$ Vigilance | SpellDescription$ Until end of turn, other Elves you control gain vigilance and get +1/+1 for each +1/+1 counter on NICKNAME.
SVar:Y:Count$CardCounters.P1P1
DeckHas:Ability$Counters
Oracle:Haldir, Lorien Lieutenant enters the battlefield with X +1/+1 counters on it.\nVigilance\n{5}{G}: Until end of turn, other Elves you control gain vigilance and get +1/+1 for each +1/+1 counter on Haldir.

View File

@@ -0,0 +1,12 @@
Name:Lobelia, Defender of Bag End
ManaCost:2 B
Types:Legendary Creature Halfling Citizen
PT:2/2
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When NICKNAME enters the battlefield, look at the top card of each opponent's library and exile those cards face down.
SVar:TrigExile:DB$ Dig | DigNum$ 1 | ChangeNum$ All | Defined$ Opponent | DestinationZone$ Exile | ExileFaceDown$ True
A:AB$ Charm | Cost$ T Sac<1/Artifact> | Choices$ DBEffect,DBLoseGain
SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | SpellDescription$ Until end of turn, you may play a card exiled with NICKNAME without paying its mana cost.
SVar:STPlay:Mode$ Continuous | MayPlay$ True | WithoutManaCost$ True | Affected$ Card.ExiledWithEffectSource | AffectedZone$ Exile | MayPlayLimit$ 1
SVar:DBLoseGain:DB$ LoseLife | Defined$ Opponent | LifeAmount$ 2 | SubAbility$ DBGain2 | SpellDescription$ Each opponent loses 2 life and you gain 2 life.
SVar:DBGain2:DB$ GainLife | Defined$ You | LifeAmount$ 2
Oracle:When Lobelia enters the battlefield, look at the top card of each opponent's library and exile those cards face down.\n{T}, Sacrifice an artifact: Choose one —\n• Until end of turn, you may play a card exiled with Lobelia without paying its mana cost.\n• Each opponent loses 2 life and you gain 2 life.

View File

@@ -0,0 +1,12 @@
Name:Lord of the Nazgul
ManaCost:3 U B
Types:Legendary Creature Wraith Noble
PT:4/4
K:Flying
S:Mode$ Continuous | Affected$ Creature.Wraith+YouCtrl | AddKeyword$ Protection from Ringbearers | Description$ Wraiths you control have protection from Ring-bearers.
T:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever you cast an instant or sorcery spell, create a 3/3 black Wraith creature token with menace. Then if you control nine or more Wraiths, Wraiths you control have base power and toughness 9/9 until end of turn.
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ b_3_3_wraith_menace | TokenOwner$ You | SubAbility$ DBAnimateAll
SVar:DBAnimateAll:DB$ AnimateAll | ValidCards$ Wraith.YouCtrl | Power$ 9 | Toughness$ 9 | ConditionPresent$ Card.Wraith+YouCtrl | ConditionCompare$ GE9
SVar:BuffedBy:Instant,Sorcery
DeckHints:Type$Wraith
Oracle:Flying\nWraiths you control have protection from Ring-bearers.\nWhenever you cast an instant or sorcery spell, create a 3/3 black Wraith creature token with menace. Then if you control nine or more Wraiths, Wraiths you control have base power and toughness 9/9 until end of turn.

View File

@@ -0,0 +1,13 @@
Name:Shelob, Dread Weaver
ManaCost:3 B
Types:Legendary Creature Spider Demon
PT:3/3
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.OppCtrl+nonToken | TriggerZones$ Battlefield | Execute$ TrigExile | TriggerDescription$ Whenever a nontoken creature an opponent controls dies, exile it.
SVar:TrigExile:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Exile
A:AB$ PutCounter | Cost$ 2 B ExiledMoveToGrave<1/Creature.ExiledWithSource> | CounterType$ P1P1 | CounterNum$ 2 | SubAbility$ TrigDraw | SpellDescription$ Put two +1/+1 counters on NICKNAME.
SVar:TrigDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card.
A:AB$ ChangeZone | Cost$ X 1 B | TgtPrompt$ Select target creature | Origin$ Exile | Destination$ Battlefield | Tapped$ True | ValidTgts$ Creature.ExiledWithSource+cmcEQX | Hidden$ True | Mandatory$ True | ChangeNum$ 1 | GainControl$ True | SpellDescription$ Put target creature card with mana value X exiled with NICKNAME onto the battlefield tapped under your control.
SVar:X:Count$xPaid
SVar:PlayMain1:TRUE
DeckHas:Ability$Counters
Oracle:Whenever a nontoken creature an opponent controls dies, exile it.\n{2}{B}, Put a creature card exiled with Shelob, Dread Weaver into its owner's graveyard: Put two +1/+1 counters on Shelob. Draw a card.\n{X}{1}{B}: Put target creature card with mana value X exiled with Shelob onto the battlefield tapped under your control.

View File

@@ -0,0 +1,7 @@
Name:Wraith Token
ManaCost:no cost
Types:Creature Wraith
Colors:black
PT:3/3
K:Menace
Oracle:Menace

View File

@@ -0,0 +1,10 @@
Name:Bird Token
ManaCost:no cost
Types:Creature Bird
Colors:white
PT:3/3
K:Flying
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever this creature attacks, target attacking creature gains flying until end of turn.
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.attacking | TgtPrompt$ Select target attacking creature | KW$ Flying
SVar:HasAttackEffect:TRUE
Oracle:Flying\nWhenever this creature attacks, target attacking creature gains flying until end of turn.