fixed game hud

This commit is contained in:
Grimm
2022-04-15 13:16:37 +02:00
50 changed files with 12017 additions and 808 deletions

View File

@@ -2054,7 +2054,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|| keyword.equals("Split second") || keyword.equals("Sunburst") || keyword.equals("Split second") || keyword.equals("Sunburst")
|| keyword.equals("Suspend") // for the ones without amount || keyword.equals("Suspend") // for the ones without amount
|| keyword.equals("Foretell") // for the ones without cost || keyword.equals("Foretell") // for the ones without cost
|| keyword.equals("Hideaway") || keyword.equals("Ascend") || keyword.equals("Totem armor") || keyword.equals("Ascend") || keyword.equals("Totem armor")
|| keyword.equals("Battle cry") || keyword.equals("Devoid") || keyword.equals("Riot") || keyword.equals("Battle cry") || keyword.equals("Devoid") || keyword.equals("Riot")
|| keyword.equals("Daybound") || keyword.equals("Nightbound") || keyword.equals("Daybound") || keyword.equals("Nightbound")
|| keyword.equals("Friends forever")) { || keyword.equals("Friends forever")) {
@@ -2084,7 +2084,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|| keyword.startsWith("Fabricate") || keyword.startsWith("Soulshift") || keyword.startsWith("Bushido") || keyword.startsWith("Fabricate") || keyword.startsWith("Soulshift") || keyword.startsWith("Bushido")
|| keyword.startsWith("Crew") || keyword.startsWith("Tribute") || keyword.startsWith("Absorb") || keyword.startsWith("Crew") || keyword.startsWith("Tribute") || keyword.startsWith("Absorb")
|| keyword.startsWith("Graft") || keyword.startsWith("Fading") || keyword.startsWith("Vanishing") || keyword.startsWith("Graft") || keyword.startsWith("Fading") || keyword.startsWith("Vanishing")
|| keyword.startsWith("Afterlife") || keyword.startsWith("Afterlife") || keyword.startsWith("Hideaway")
|| keyword.startsWith("Afflict") || keyword.startsWith ("Poisonous") || keyword.startsWith("Rampage") || keyword.startsWith("Afflict") || keyword.startsWith ("Poisonous") || keyword.startsWith("Rampage")
|| keyword.startsWith("Renown") || keyword.startsWith("Annihilator") || keyword.startsWith("Devour")) { || keyword.startsWith("Renown") || keyword.startsWith("Annihilator") || keyword.startsWith("Devour")) {
final String[] k = keyword.split(":"); final String[] k = keyword.split(":");
@@ -2144,17 +2144,19 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
sbLong.append(keyword); sbLong.append(keyword);
sbLong.append(" (").append(Keyword.getInstance("Offering:" + offeringType).getReminderText()).append(")"); sbLong.append(" (").append(Keyword.getInstance("Offering:" + offeringType).getReminderText()).append(")");
} else if (keyword.startsWith("Equip") || keyword.startsWith("Fortify") || keyword.startsWith("Outlast") } else if (keyword.startsWith("Equip") || keyword.startsWith("Fortify") || keyword.startsWith("Outlast")
|| keyword.startsWith("Unearth") || keyword.startsWith("Scavenge") || keyword.startsWith("Spectacle") || keyword.startsWith("Unearth") || keyword.startsWith("Scavenge")
|| keyword.startsWith("Evoke") || keyword.startsWith("Bestow") || keyword.startsWith("Dash") || keyword.startsWith("Spectacle") || keyword.startsWith("Evoke")
|| keyword.startsWith("Surge") || keyword.startsWith("Transmute") || keyword.startsWith("Suspend") || keyword.startsWith("Bestow") || keyword.startsWith("Dash") || keyword.startsWith("Surge")
|| keyword.equals("Undaunted") || keyword.startsWith("Monstrosity") || keyword.startsWith("Embalm") || keyword.startsWith("Transmute") || keyword.startsWith("Suspend")
|| keyword.startsWith("Level up") || keyword.equals("Prowess") || keyword.startsWith("Eternalize") || keyword.equals("Undaunted") || keyword.startsWith("Monstrosity")
|| keyword.startsWith("Reinforce") || keyword.startsWith("Champion") || keyword.startsWith("Prowl") || keyword.startsWith("Embalm") || keyword.startsWith("Level up") || keyword.equals("Prowess")
|| keyword.startsWith("Amplify") || keyword.startsWith("Ninjutsu") || keyword.startsWith("Adapt") || keyword.startsWith("Eternalize") || keyword.startsWith("Reinforce")
|| keyword.startsWith("Champion") || keyword.startsWith("Prowl") || keyword.startsWith("Adapt")
|| keyword.startsWith("Amplify") || keyword.startsWith("Ninjutsu") || keyword.startsWith("Saga")
|| keyword.startsWith("Transfigure") || keyword.startsWith("Aura swap") || keyword.startsWith("Transfigure") || keyword.startsWith("Aura swap")
|| keyword.startsWith("Cycling") || keyword.startsWith("TypeCycling") || keyword.startsWith("Cycling") || keyword.startsWith("TypeCycling")
|| keyword.startsWith("Encore") || keyword.startsWith("Mutate") || keyword.startsWith("Dungeon") || keyword.startsWith("Encore") || keyword.startsWith("Mutate") || keyword.startsWith("Dungeon")
|| keyword.startsWith("Class") || keyword.startsWith("Saga") || keyword.startsWith("Blitz")) { || keyword.startsWith("Class") || keyword.startsWith("Blitz")) {
// keyword parsing takes care of adding a proper description // keyword parsing takes care of adding a proper description
} else if (keyword.equals("Unblockable")) { } else if (keyword.equals("Unblockable")) {
sbLong.append(getName()).append(" can't be blocked.\r\n"); sbLong.append(getName()).append(" can't be blocked.\r\n");

View File

@@ -1334,10 +1334,8 @@ public class CardFactoryUtil {
List<Trigger> triggers = Lists.newArrayList(); List<Trigger> triggers = Lists.newArrayList();
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self"); sb.append("Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Secondary$ True | ");
sb.append("| TriggerDescription$ Hideaway ").append(n).append(" (When CARDNAME enters the battlefield, "); sb.append("TriggerDescription$ Hideaway ").append(n).append(" (").append(inst.getReminderText()).append(")");
sb.append("look at the top ").append(Lang.getNumeral(Integer.valueOf(n))).append(" cards of your library, exile one face down");
sb.append(", then put the rest on the bottom of your library.)");
final Trigger hideawayTrigger = TriggerHandler.parseTrigger(sb.toString(), card, intrinsic); final Trigger hideawayTrigger = TriggerHandler.parseTrigger(sb.toString(), card, intrinsic);
String hideawayDig = "DB$ Dig | Defined$ You | DigNum$ " + n + " | DestinationZone$ Exile | ExileFaceDown$ True | RememberChanged$ True"; String hideawayDig = "DB$ Dig | Defined$ You | DigNum$ " + n + " | DestinationZone$ Exile | ExileFaceDown$ True | RememberChanged$ True";

View File

@@ -95,7 +95,7 @@ public enum Keyword {
HASTE("Haste", SimpleKeyword.class, true, "This creature can attack and {T} as soon as it comes under your control."), HASTE("Haste", SimpleKeyword.class, true, "This creature can attack and {T} as soon as it comes under your control."),
HAUNT("Haunt", SimpleKeyword.class, false, "When this is put into a graveyard, exile it haunting target creature."), HAUNT("Haunt", SimpleKeyword.class, false, "When this is put into a graveyard, exile it haunting target creature."),
HEXPROOF("Hexproof", Hexproof.class, false, "This can't be the target of %s spells or abilities your opponents control."), HEXPROOF("Hexproof", Hexproof.class, false, "This can't be the target of %s spells or abilities your opponents control."),
HIDEAWAY("Hideaway", KeywordWithAmount.class, false, "When this permanent enters the battlefield, look at the top %d cards of your library, exile one face down, then put the rest on the bottom of your library."), HIDEAWAY("Hideaway", KeywordWithAmount.class, false, "When this permanent enters the battlefield, look at the top {%d:card} of your library, exile one face down, then put the rest on the bottom of your library."),
HORSEMANSHIP("Horsemanship", SimpleKeyword.class, true, "This creature can't be blocked except by creatures with horsemanship."), HORSEMANSHIP("Horsemanship", SimpleKeyword.class, true, "This creature can't be blocked except by creatures with horsemanship."),
IMPROVISE("Improvise", SimpleKeyword.class, true, "Your artifacts can help cast this spell. Each artifact you tap after you're done activating mana abilities pays for {1}."), IMPROVISE("Improvise", SimpleKeyword.class, true, "Your artifacts can help cast this spell. Each artifact you tap after you're done activating mana abilities pays for {1}."),
INDESTRUCTIBLE("Indestructible", SimpleKeyword.class, true, "Effects that say \"destroy\" don't destroy this."), INDESTRUCTIBLE("Indestructible", SimpleKeyword.class, true, "Effects that say \"destroy\" don't destroy this."),

View File

@@ -53,7 +53,7 @@ public abstract class KeywordInstance<T extends KeywordInstance<?>> implements K
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
while (m.find()) { while (m.find()) {
m.appendReplacement(sb, Lang.nounWithNumeral(m.group(1), m.group(2))); m.appendReplacement(sb, Lang.nounWithNumeralExceptOne(m.group(1), m.group(2)));
} }
m.appendTail(sb); m.appendTail(sb);
return sb.toString(); return sb.toString();

View File

@@ -281,6 +281,9 @@ public class PhaseHandler implements java.io.Serializable {
break; break;
case DRAW: case DRAW:
for (Player p : game.getPlayers()) {
p.resetNumDrawnThisDrawStep();
}
playerTurn.drawCard(); playerTurn.drawCard();
for (Player p : game.getPlayers()) { for (Player p : game.getPlayers()) {
if (p.isOpponentOf(playerTurn) && if (p.isOpponentOf(playerTurn) &&

View File

@@ -1406,9 +1406,12 @@ public class Player extends GameEntity implements Comparable<Player> {
return CardCollection.combine(getCardsIn(Player.ALL_ZONES), getCardsIn(ZoneType.Stack), inboundTokens); return CardCollection.combine(getCardsIn(Player.ALL_ZONES), getCardsIn(ZoneType.Stack), inboundTokens);
} }
public final void resetNumDrawnThisDrawStep() {
numDrawnThisDrawStep = 0;
}
public final void resetNumDrawnThisTurn() { public final void resetNumDrawnThisTurn() {
numDrawnThisTurn = 0; numDrawnThisTurn = 0;
numDrawnThisDrawStep = 0;
view.updateNumDrawnThisTurn(this); view.updateNumDrawnThisTurn(this);
} }

View File

@@ -87,10 +87,16 @@ public class TriggerDrawn extends Trigger {
} }
} }
if (hasParam("NotFirstCardInDrawStep")) { if (hasParam("FirstCardInDrawStep")) {
final Player p = ((Player)runParams.get(AbilityKey.Player)); final Player p = ((Player)runParams.get(AbilityKey.Player));
if (p.numDrawnThisDrawStep() == 1 && game.getPhaseHandler().is(PhaseType.DRAW, p)) { if (getParam("FirstCardInDrawStep").equals("True")) {
return false; if (!game.getPhaseHandler().is(PhaseType.DRAW, p) || p.numDrawnThisDrawStep() > 1) {
return false;
}
} else {
if (p.numDrawnThisDrawStep() == 1 && game.getPhaseHandler().is(PhaseType.DRAW, p)) {
return false;
}
} }
} }

View File

@@ -1,116 +1,36 @@
package forge.adventure.character; package forge.adventure.character;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Json;
import forge.adventure.data.DialogData;
import forge.adventure.stage.MapStage; import forge.adventure.stage.MapStage;
import forge.adventure.util.Config; import forge.adventure.util.MapDialog;
import forge.adventure.util.Controls;
import forge.adventure.util.Current;
/** /**
* Map actor that will open the Shop on collision * Map actor that will show a text message with optional choices
*/ */
public class DialogActor extends MapActor{ public class DialogActor extends MapActor {
private final MapStage stage; private final MapStage stage;
private final String dialogPath;
private final TextureRegion textureRegion; private final TextureRegion textureRegion;
private final MapDialog dialog;
public DialogActor(MapStage stage, int id, String S, TextureRegion textureRegion) {
public DialogActor(MapStage stage, int id, String dialog, TextureRegion textureRegion)
{
super(id); super(id);
this.stage = stage; this.stage = stage;
this.dialogPath = dialog; dialog = new MapDialog(S, stage, id);
this.textureRegion = textureRegion; this.textureRegion = textureRegion;
} }
@Override @Override
public void onPlayerCollide() public void onPlayerCollide() {
{ stage.resetPosition();
Json json = new Json(); stage.showDialog();
FileHandle handle = Config.instance().getFile(dialogPath); dialog.activate();
if (handle.exists()) {
Array<DialogData> data = json.fromJson(Array.class, DialogData.class, handle);
stage.resetPosition();
stage.showDialog();
for(DialogData dialog:data)
{
if(isConditionOk(dialog.condition))
{
loadDialog(dialog);
}
}
}
}
private void loadDialog(DialogData dialog) {
setEffects(dialog.effect);
stage.getDialog().getContentTable().clear();
stage.getDialog().getButtonTable().clear();
stage.getDialog().text((dialog.text));
if(dialog.options!=null)
{
for(DialogData option:dialog.options)
{
if( isConditionOk(option.condition) )
{
stage.getDialog().getButtonTable().add(Controls.newTextButton(option.name,() -> {
loadDialog(option);
}));
}
}
stage.showDialog();
}
else
{
stage.hideDialog();
}
}
void setEffects(DialogData.EffectData[] data)
{
if(data==null)
return ;
for(DialogData.EffectData effectData:data)
{
Current.player().removeItem(effectData.removeItem);
if(effectData.deleteMapObject<0)
stage.deleteObject(getObjectId());
else if(effectData.deleteMapObject>0)
stage.deleteObject(effectData.deleteMapObject);
}
}
boolean isConditionOk(DialogData.ConditionData[] data)
{
if(data==null)
return true;
for(DialogData.ConditionData condition:data)
{
if(condition.item!=null && !condition.item.equals(""))
{
if(!Current.player().hasItem(condition.item))
{
return false;
}
}
}
return true;
} }
@Override @Override
public void draw(Batch batch, float alpha) { public void draw(Batch batch, float alpha) {
batch.draw(textureRegion, getX(), getY(), getWidth(), getHeight());
batch.draw(textureRegion,getX(),getY(),getWidth(),getHeight()); super.draw(batch, alpha);
super.draw(batch,alpha);
} }
} }

View File

@@ -0,0 +1,29 @@
package forge.adventure.character;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import forge.adventure.stage.MapStage;
/**
* DummySprite
* Solid map entity. Cannot move or be interacted with, but can be removed from events.
*/
public class DummySprite extends MapActor {
private final TextureRegion textureRegion;
private final MapStage stage;
public DummySprite(int id, TextureRegion textureRegion, MapStage stage) {
super(id);
this.textureRegion = textureRegion;
this.stage = stage;
}
@Override
public void onPlayerCollide() { stage.resetPosition(); }
@Override
public void draw(Batch batch, float alpha) {
batch.draw(textureRegion, getX(), getY(), getWidth(), getHeight());
super.draw(batch, alpha);
}
}

View File

@@ -7,6 +7,7 @@ import com.badlogic.gdx.utils.Array;
import forge.adventure.data.EnemyData; import forge.adventure.data.EnemyData;
import forge.adventure.data.RewardData; import forge.adventure.data.RewardData;
import forge.adventure.util.Current; import forge.adventure.util.Current;
import forge.adventure.util.MapDialog;
import forge.adventure.util.Reward; import forge.adventure.util.Reward;
/** /**
@@ -16,6 +17,7 @@ import forge.adventure.util.Reward;
public class EnemySprite extends CharacterSprite { public class EnemySprite extends CharacterSprite {
EnemyData data; EnemyData data;
private int id; private int id;
public MapDialog dialog;
public EnemySprite(EnemyData enemyData) { public EnemySprite(EnemyData enemyData) {
super(enemyData.sprite); super(enemyData.sprite);
@@ -48,11 +50,10 @@ public class EnemySprite extends CharacterSprite {
public Array<Reward> getRewards() { public Array<Reward> getRewards() {
Array<Reward> ret=new Array<Reward>(); Array<Reward> ret=new Array<Reward>();
if(data.rewards==null) if(data.rewards == null)
return ret; return ret;
for(RewardData rdata:data.rewards) for(RewardData rdata:data.rewards) {
{ ret.addAll(rdata.generate(false,(Current.latestDeck()!=null? Current.latestDeck().getMain().toFlatList():null)));
ret.addAll(rdata.generate(false,Current.latestDeck()!=null? Current.latestDeck().getMain().toFlatList():null,data.equipment));
} }
return ret; return ret;
} }

View File

@@ -94,6 +94,10 @@ public class MapActor extends Actor {
} }
public int getId(){
return objectId;
}
public boolean collideWith(MapActor other) { public boolean collideWith(MapActor other) {
return collideWith(other.boundingRect()); return collideWith(other.boundingRect());
} }

View File

@@ -1,18 +1,28 @@
package forge.adventure.data; package forge.adventure.data;
/**
* Dialog Data JSON loader class.
* Carries all text, branches and effects of dialogs.
*/
public class DialogData { public class DialogData {
public EffectData[] effect; public EffectData[] effect; //List of effects to cause when the dialog shows.
public ConditionData[] condition; public ConditionData[] condition; //List of conditions for the action to show.
public String name; public String name; //Text to display when action is listed as a button.
public String text; public String text; //The text body.
public DialogData[] options; public String loctext; //References a localized string.
public DialogData[] options; //
static public class EffectData { static public class EffectData {
public String removeItem; public String removeItem; //Remove item name from inventory.
public int deleteMapObject; public String addItem; //Add item name to inventory.
public int deleteMapObject = 0; //Remove ID from the map. -1 for self.
public int battleWithActorID = 0; //Start a battle with enemy ID. -1 for self if possible.
} }
static public class ConditionData { static public class ConditionData {
public String item; public String item;
public int flag = 0; //Check for a local dungeon flag.
public int actorID = 0; //Check for an actor ID.
public boolean not = false; //Reverse the result of a condition ("actorID":"XX" + "not":true => true if XX is not in the map.)
} }
} }

View File

@@ -0,0 +1,68 @@
package forge.adventure.data;
import com.badlogic.gdx.utils.Array;
import forge.item.IPaperCard;
import forge.item.PaperCard;
import forge.item.PaperToken;
import forge.model.FModel;
public class EffectData {
//Duel effects.
public int lifeModifier = 0; //Amount to add to starting Life.
public int changeStartCards = 0; //Amount to add to starting hand size.
public String[] startBattleWithCard; //Cards that start in the Battlefield.
//Map only effects.
public float moveSpeed = 1.0f; //Change of movement speed. Map only.
//Opponent field.
public EffectData opponent; //Effects to be applied to the opponent's side.
public Array<IPaperCard> startBattleWithCards() {
Array<IPaperCard> startCards=new Array<>();
if(startBattleWithCard != null) {
for (String name:startBattleWithCard) {
PaperCard C = FModel.getMagicDb().getCommonCards().getCard(name);
if(C != null)
startCards.add(C);
else {
PaperToken T = FModel.getMagicDb().getAllTokens().getToken(name);
if (T != null) startCards.add(T);
else System.err.print("Can not find card \"" + name + "\"\n");
}
}
}
return startCards;
}
public String cardNames() {
String ret = "";
Array<IPaperCard> array=startBattleWithCards();
for(int i =0;i<array.size;i++) {
ret+=array.get(i).toString();
if(i!=array.size-1) ret+=" , ";
}
return ret;
}
public String getDescription() {
String description = "";
if(this.lifeModifier != 0)
description += "Life: " + ((this.lifeModifier > 0) ? "+" : "") + this.lifeModifier + "\n";
if(this.startBattleWithCard != null && this.startBattleWithCard.length != 0)
description+="Cards on battlefield: \n" + this.cardNames() + "\n";
if(this.moveSpeed!=0 && this.moveSpeed != 1)
description+="Movement speed: " + ((this.lifeModifier > 0) ? "+" : "") + Math.round((this.moveSpeed-1.f)*100) + "%\n";
if(this.changeStartCards != 0)
description+="Starting hand: " + this.changeStartCards + "\n";
if(this.opponent != null) {
String oppEffect=this.opponent.getDescription();
if(oppEffect != "") {
description += "Gives Opponent:\n";
description += oppEffect;
}
}
return description;
}
}

View File

@@ -7,8 +7,6 @@ import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Json; import com.badlogic.gdx.utils.Json;
import forge.adventure.util.Config; import forge.adventure.util.Config;
import forge.adventure.util.Paths; import forge.adventure.util.Paths;
import forge.item.IPaperCard;
import forge.model.FModel;
import static forge.adventure.util.Paths.ITEMS_ATLAS; import static forge.adventure.util.Paths.ITEMS_ATLAS;
@@ -20,16 +18,10 @@ import static forge.adventure.util.Paths.ITEMS_ATLAS;
public class ItemData { public class ItemData {
public String name; public String name;
public String equipmentSlot; public String equipmentSlot;
public int lifeModifier=0; public EffectData effect;
public int changeStartCards=0;
public String[] startBattleWithCard;
public String iconName; public String iconName;
public float moveSpeed=1.0f;
public boolean questItem=false; public boolean questItem=false;
public int cost=1000; public int cost=1000;
//not an item on it owns but effects will be applied to the opponent
public ItemData opponent;
public Sprite sprite() public Sprite sprite()
{ {
@@ -64,56 +56,12 @@ public class ItemData {
return null; return null;
} }
public Array<IPaperCard> startBattleWithCards() {
Array<IPaperCard> startCards=new Array<>();
if(startBattleWithCard!=null)
{
for (String name:startBattleWithCard)
{
if(FModel.getMagicDb().getCommonCards().contains(name))
startCards.add(FModel.getMagicDb().getCommonCards().getCard(name));
else if (FModel.getMagicDb().getAllTokens().containsRule(name))
startCards.add(FModel.getMagicDb().getAllTokens().getToken(name));
else
{
System.err.print("Can not find card "+name+"\n");
}
}
}
return startCards;
}
public String cardNames() {
String ret="";
Array<IPaperCard> array=startBattleWithCards();
for(int i =0;i<array.size;i++)
{
ret+=array.get(i).toString();
if(i!=array.size-1)
ret+=" , ";
}
return ret;
}
public String getDescription() { public String getDescription() {
String description = ""; String description = "";
if(this.equipmentSlot != null && !this.equipmentSlot.equals("")) if(this.equipmentSlot != null && !this.equipmentSlot.isEmpty())
description += "Slot: " + this.equipmentSlot + "\n"; description += "Slot: " + this.equipmentSlot + "\n";
if(this.lifeModifier != 0) if(effect != null)
description += "Life: " + ((this.lifeModifier > 0) ? "+" : "") + this.lifeModifier + "\n"; description += effect.getDescription();
if(this.startBattleWithCard != null && this.startBattleWithCard.length != 0)
description+="Cards on battlefield: \n" + this.cardNames() + "\n";
if(this.moveSpeed!=0 && this.moveSpeed != 1)
description+="Movement speed: " + ((this.lifeModifier > 0) ? "+" : "") + Math.round((this.moveSpeed-1.f)*100) + "%\n";
if(this.changeStartCards != 0)
description+="Starting hand: " + this.changeStartCards + "\n";
if(this.opponent != null) {
String oppEffect=this.opponent.getDescription();
if(oppEffect != "") {
description += "Gives Opponent:\n";
description += oppEffect;
}
}
return description; return description;
} }
} }

View File

@@ -69,9 +69,9 @@ public class RewardData {
private static Iterable<PaperCard> allEnemyCards; private static Iterable<PaperCard> allEnemyCards;
public Array<Reward> generate(boolean isForEnemy) public Array<Reward> generate(boolean isForEnemy)
{ {
return generate(isForEnemy,null,null); return generate(isForEnemy, null);
} }
public Array<Reward> generate(boolean isForEnemy,Iterable<PaperCard> cards,String[] enemyItems) public Array<Reward> generate(boolean isForEnemy,Iterable<PaperCard> cards)
{ {
if(allCards==null) if(allCards==null)
{ {
@@ -127,17 +127,6 @@ public class RewardData {
} }
} }
break; break;
case "enemyItems":
if(enemyItems==null)return ret;
for(int i=0;i<count+addedCount;i++)
{
ret.add(new Reward(ItemData.getItem(enemyItems[WorldSave.getCurrentSave().getWorld().getRandom().nextInt(enemyItems.length)])));
}
for(PaperCard card: CardUtil.generateCards(cards,this, count+addedCount))
{
ret.add(new Reward(card));
}
break;
case "deckCard": case "deckCard":
if(cards==null)return ret; if(cards==null)return ret;
for(PaperCard card: CardUtil.generateCards(cards,this, count+addedCount)) for(PaperCard card: CardUtil.generateCards(cards,this, count+addedCount))

View File

@@ -418,12 +418,10 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
public float equipmentSpeed() { public float equipmentSpeed() {
float factor=1.0f; float factor=1.0f;
for(String name:equippedItems.values()) for(String name:equippedItems.values()) {
{
ItemData data=ItemData.getItem(name); ItemData data=ItemData.getItem(name);
if(data.moveSpeed!=0.0) if(data.effect.moveSpeed > 0.0) { //Avoid negative speeds. It would be silly.
{ factor*=data.effect.moveSpeed;
factor*=data.moveSpeed;
} }
} }
return factor; return factor;

View File

@@ -6,6 +6,7 @@ import forge.Forge;
import forge.LobbyPlayer; import forge.LobbyPlayer;
import forge.adventure.character.EnemySprite; import forge.adventure.character.EnemySprite;
import forge.adventure.character.PlayerSprite; import forge.adventure.character.PlayerSprite;
import forge.adventure.data.EffectData;
import forge.adventure.data.ItemData; import forge.adventure.data.ItemData;
import forge.adventure.player.AdventurePlayer; import forge.adventure.player.AdventurePlayer;
import forge.adventure.util.Config; import forge.adventure.util.Config;
@@ -40,6 +41,7 @@ public class DuelScene extends ForgeScene {
EnemySprite enemy; EnemySprite enemy;
PlayerSprite player; PlayerSprite player;
RegisteredPlayer humanPlayer; RegisteredPlayer humanPlayer;
private EffectData dungeonEffect;
public DuelScene() { public DuelScene() {
@@ -57,6 +59,7 @@ public class DuelScene extends ForgeScene {
@Override @Override
public void run() { public void run() {
SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS); //start background music SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS); //start background music
dungeonEffect = null;
Scene last = Forge.switchToLast(); Scene last = Forge.switchToLast();
if (last instanceof HudScene) { if (last instanceof HudScene) {
@@ -68,17 +71,14 @@ public class DuelScene extends ForgeScene {
} }
void addItemEffects(RegisteredPlayer player,Array<ItemData> items) void addEffects(RegisteredPlayer player,Array<EffectData> effects) {
{ if( effects == null ) return;
if(items==null) //Apply various effects.
return;
int lifeMod=0; int lifeMod=0;
int changeStartCards=0; int changeStartCards=0;
Array<IPaperCard> startCards=new Array<>(); Array<IPaperCard> startCards=new Array<>();
for(ItemData data:items) for(EffectData data:effects) {
{
lifeMod+=data.lifeModifier; lifeMod+=data.lifeModifier;
changeStartCards+= data.changeStartCards; changeStartCards+= data.changeStartCards;
startCards.addAll(data.startBattleWithCards()); startCards.addAll(data.startBattleWithCards());
@@ -88,6 +88,10 @@ public class DuelScene extends ForgeScene {
player.setStartingHand(player.getStartingHand()+changeStartCards); player.setStartingHand(player.getStartingHand()+changeStartCards);
} }
public void setDungeonEffect(EffectData E) {
dungeonEffect = E;
}
@Override @Override
public void enter() { public void enter() {
@@ -97,7 +101,7 @@ public class DuelScene extends ForgeScene {
List<RegisteredPlayer> players = new ArrayList<>(); List<RegisteredPlayer> players = new ArrayList<>();
Deck playerDeck=(Deck)AdventurePlayer.current().getSelectedDeck().copyTo("PlayerDeckCopy"); Deck playerDeck=(Deck)AdventurePlayer.current().getSelectedDeck().copyTo("PlayerDeckCopy");
int missingCards= Config.instance().getConfigData().minDeckSize-playerDeck.getMain().countAll(); int missingCards= Config.instance().getConfigData().minDeckSize-playerDeck.getMain().countAll();
if(missingCards>0) if( missingCards > 0 ) //Replace unknown cards for a Wastes.
playerDeck.getMain().add("Wastes",missingCards); playerDeck.getMain().add("Wastes",missingCards);
humanPlayer = RegisteredPlayer.forVariants(2, appliedVariants,playerDeck, null, false, null, null); humanPlayer = RegisteredPlayer.forVariants(2, appliedVariants,playerDeck, null, false, null, null);
LobbyPlayer playerObject = GamePlayerUtil.getGuiPlayer(); LobbyPlayer playerObject = GamePlayerUtil.getGuiPlayer();
@@ -117,29 +121,36 @@ public class DuelScene extends ForgeScene {
Array<ItemData> playerItems=new Array<>(); Array<EffectData> playerEffects = new Array<>();
Array<ItemData> oppItems=new Array<>(); Array<EffectData> oppEffects = new Array<>();
for(String playerItem:Current.player().getEquippedItems()) //Collect and add items effects first.
{ for(String playerItem:Current.player().getEquippedItems()) {
ItemData item=ItemData.getItem(playerItem); ItemData item=ItemData.getItem(playerItem);
playerItems.add(item); playerEffects.add(item.effect);
if(item.opponent !=null) if(item.effect.opponent != null) oppEffects.add(item.effect.opponent);
oppItems.add(item.opponent);
} }
if(enemy.getData().equipment!=null) if(enemy.getData().equipment!=null) {
{ for(String oppItem:enemy.getData().equipment) {
for(String oppItem:enemy.getData().equipment)
{
ItemData item=ItemData.getItem(oppItem); ItemData item=ItemData.getItem(oppItem);
oppItems.add(item); oppEffects.add(item.effect);
if(item.opponent !=null) if(item.effect.opponent !=null) playerEffects.add(item.effect.opponent);
playerItems.add(item.opponent);
} }
} }
addItemEffects(humanPlayer,playerItems); //Collect and add player blessings.
addItemEffects(aiPlayer,oppItems);
//Collect and add enemy effects (same as blessings but for individual enemies).
//Collect and add dungeon-wide effects.
if(dungeonEffect != null) {
oppEffects.add(dungeonEffect);
if (dungeonEffect.opponent != null)
playerEffects.add(dungeonEffect.opponent);
}
addEffects(humanPlayer,playerEffects);
addEffects(aiPlayer,oppEffects);
players.add(humanPlayer); players.add(humanPlayer);
players.add(aiPlayer); players.add(aiPlayer);
@@ -163,10 +174,10 @@ public class DuelScene extends ForgeScene {
} }
}); });
hostedMatch.startMatch(rules, appliedVariants, players, guiMap); hostedMatch.startMatch(rules, appliedVariants, players, guiMap);
MatchController.instance.setGameView(hostedMatch.getGameView()); MatchController.instance.setGameView(hostedMatch.getGameView());
for (final Player p : hostedMatch.getGame().getPlayers()) { for (final Player p : hostedMatch.getGame().getPlayers()) {
if (p.getController() instanceof PlayerControllerHuman) { if (p.getController() instanceof PlayerControllerHuman) {
final PlayerControllerHuman humanController = (PlayerControllerHuman) p.getController(); final PlayerControllerHuman humanController = (PlayerControllerHuman) p.getController();

View File

@@ -12,12 +12,16 @@ import com.badlogic.gdx.utils.viewport.ScalingViewport;
import forge.Forge; import forge.Forge;
import forge.adventure.character.MapActor; import forge.adventure.character.MapActor;
import forge.adventure.character.PlayerSprite; import forge.adventure.character.PlayerSprite;
import forge.adventure.data.PointOfInterestData;
import forge.adventure.pointofintrest.PointOfInterest;
import forge.adventure.scene.Scene; import forge.adventure.scene.Scene;
import forge.adventure.scene.SceneType; import forge.adventure.scene.SceneType;
import forge.adventure.scene.TileMapScene; import forge.adventure.scene.TileMapScene;
import forge.adventure.util.Current; import forge.adventure.util.Current;
import forge.adventure.world.WorldSave; import forge.adventure.world.WorldSave;
import forge.gui.GuiBase; import forge.gui.GuiBase;
import forge.util.MyRandom;
import forge.localinstance.properties.ForgePreferences; import forge.localinstance.properties.ForgePreferences;
import forge.model.FModel; import forge.model.FModel;
@@ -194,6 +198,13 @@ public abstract class GameStage extends Stage {
setDebugAll(true); setDebugAll(true);
player.setBoundDebug(true); player.setBoundDebug(true);
} }
if (keycode == Input.Keys.F2) {
TileMapScene S = ((TileMapScene)SceneType.TileMapScene.instance);
PointOfInterestData P = PointOfInterestData.getPointOfInterest("DEBUGZONE");
PointOfInterest PoI = new PointOfInterest(P,new Vector2(0,0), MyRandom.getRandom());
S.load(PoI);
Forge.switchScene(S);
}
if (keycode == Input.Keys.F11) { if (keycode == Input.Keys.F11) {
debugCollision(false); debugCollision(false);
for (Actor actor : foregroundSprites.getChildren()) { for (Actor actor : foregroundSprites.getChildren()) {

View File

@@ -16,20 +16,17 @@ import com.badlogic.gdx.scenes.scene2d.Group;
import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Dialog; import com.badlogic.gdx.scenes.scene2d.ui.Dialog;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.ScreenUtils; import com.badlogic.gdx.utils.ScreenUtils;
import com.badlogic.gdx.utils.SerializationException;
import forge.Forge; import forge.Forge;
import forge.adventure.character.*; import forge.adventure.character.*;
import forge.adventure.data.RewardData; import forge.adventure.data.*;
import forge.adventure.data.ShopData;
import forge.adventure.data.WorldData;
import forge.adventure.pointofintrest.PointOfInterestChanges; import forge.adventure.pointofintrest.PointOfInterestChanges;
import forge.adventure.scene.DuelScene; import forge.adventure.scene.DuelScene;
import forge.adventure.scene.RewardScene; import forge.adventure.scene.RewardScene;
import forge.adventure.scene.SceneType; import forge.adventure.scene.SceneType;
import forge.adventure.util.Config; import forge.adventure.util.*;
import forge.adventure.util.Controls;
import forge.adventure.util.Current;
import forge.adventure.util.Reward;
import forge.adventure.world.WorldSave; import forge.adventure.world.WorldSave;
import forge.screens.TransitionScreen; import forge.screens.TransitionScreen;
import forge.sound.SoundEffectType; import forge.sound.SoundEffectType;
@@ -67,14 +64,18 @@ public class MapStage extends GameStage {
private Stage dialogStage; private Stage dialogStage;
private boolean dialogOnlyInput; private boolean dialogOnlyInput;
private EffectData effect;
public boolean getDialogOnlyInput() { public boolean getDialogOnlyInput() {
return dialogOnlyInput; return dialogOnlyInput;
} }
public Dialog getDialog() { public Dialog getDialog() {
return dialog; return dialog;
} }
public void clearIsInMap() { public void clearIsInMap() {
isInMap = false; isInMap = false;
effect = null;
GameHUD.getInstance().showHideMap(true); GameHUD.getInstance().showHideMap(true);
} }
public void draw (Batch batch) { public void draw (Batch batch) {
@@ -83,9 +84,7 @@ public class MapStage extends GameStage {
//update camera after all layers got drawn //update camera after all layers got drawn
if (!getRoot().isVisible()) return; if (!getRoot().isVisible()) return;
getRoot().draw(batch, 1); getRoot().draw(batch, 1);
} }
public MapLayer getSpriteLayer() { public MapLayer getSpriteLayer() {
@@ -181,6 +180,17 @@ public class MapStage extends GameStage {
} }
private void effectDialog(EffectData E){
dialog.getContentTable().clear();
dialog.getButtonTable().clear();
String text = "Strange magical energies flow within this place...\nAll opponents get:\n";
text += E.getDescription();
dialog.text(text);
dialog.getButtonTable().add(Controls.newTextButton("OK", this::hideDialog));
dialog.setKeepWithinStage(true);
showDialog();
}
public void loadMap(TiledMap map, String sourceMap) { public void loadMap(TiledMap map, String sourceMap) {
isLoadingMatch = false; isLoadingMatch = false;
isInMap = true; isInMap = true;
@@ -199,6 +209,18 @@ public class MapStage extends GameStage {
setBounds(width * tileWidth, height * tileHeight); setBounds(width * tileWidth, height * tileHeight);
collision = new ArrayList[(int) width][(int) height]; collision = new ArrayList[(int) width][(int) height];
//Load dungeon effects.
if( map.getProperties().get("dungeonEffect") != null && !map.getProperties().get("dungeonEffect").toString().isEmpty()){
Json json = new Json();
try { effect = json.fromJson(EffectData.class, map.getProperties().get("dungeonEffect").toString()); }
catch(SerializationException E) {
//JSON parsing could fail. Since this an user written part, assume failure is possible (it happens).
System.err.printf("[%s] while loading JSON file for dialog actor. JSON:\n%s\nUsing a default dialog.", E.getMessage(), map.getProperties().get("dungeonEffect").toString());
effect = json.fromJson(EffectData.class, "");
}
effectDialog(effect);
}
GetPlayer().stop(); GetPlayer().stop();
for (MapLayer layer : map.getLayers()) { for (MapLayer layer : map.getLayers()) {
@@ -254,12 +276,22 @@ public class MapStage extends GameStage {
addMapActor(obj, entry); addMapActor(obj, entry);
break; break;
case "reward": case "reward":
RewardSprite R = new RewardSprite(id, prop.get("reward").toString(), prop.get("sprite").toString()); if (prop.get("reward") != null) {
addMapActor(obj, R); RewardSprite R = new RewardSprite(id, prop.get("reward").toString(), prop.get("sprite").toString());
addMapActor(obj, R);
}
break; break;
case "enemy": case "enemy":
EnemySprite mob = new EnemySprite(id, WorldData.getEnemy(prop.get("enemy").toString())); EnemySprite mob = new EnemySprite(id, WorldData.getEnemy(prop.get("enemy").toString()));
addMapActor(obj, mob); addMapActor(obj, mob);
if(prop.get("dialog") != null && !prop.get("dialog").toString().isEmpty()) {
mob.dialog = new MapDialog(prop.get("dialog").toString(), this, mob.getId());
}
break;
case "dummy": //Does nothing. Mostly obstacles to be removed by ID by switches or such.
TiledMapTileMapObject obj2 = (TiledMapTileMapObject) obj;
DummySprite D = new DummySprite(id, obj2.getTextureRegion(), this);
addMapActor(obj, D);
break; break;
case "inn": case "inn":
addMapActor(obj, new OnCollide(new Runnable() { addMapActor(obj, new OnCollide(new Runnable() {
@@ -278,13 +310,11 @@ public class MapStage extends GameStage {
})); }));
break; break;
case "dialog": case "dialog":
if(obj instanceof TiledMapTileMapObject) if(obj instanceof TiledMapTileMapObject) {
{
TiledMapTileMapObject tiledObj = (TiledMapTileMapObject) obj; TiledMapTileMapObject tiledObj = (TiledMapTileMapObject) obj;
DialogActor dialog = new DialogActor(this, id, prop.get("dialog").toString(),tiledObj.getTextureRegion()); DialogActor dialog = new DialogActor(this, id, prop.get("dialog").toString(), tiledObj.getTextureRegion());
addMapActor(obj, dialog); addMapActor(obj, dialog);
} }
break; break;
case "shop": case "shop":
String shopList = prop.get("shopList").toString(); String shopList = prop.get("shopList").toString();
@@ -304,7 +334,7 @@ public class MapStage extends GameStage {
continue; continue;
ShopData data = shops.get(WorldSave.getCurrentSave().getWorld().getRandom().nextInt(shops.size)); ShopData data = shops.get(WorldSave.getCurrentSave().getWorld().getRandom().nextInt(shops.size));
Array<Reward> ret = new Array<Reward>(); Array<Reward> ret = new Array<>();
for (RewardData rdata : new Array.ArrayIterator<>(data.rewards)) { for (RewardData rdata : new Array.ArrayIterator<>(data.rewards)) {
ret.addAll(rdata.generate(false)); ret.addAll(rdata.generate(false));
} }
@@ -328,6 +358,7 @@ public class MapStage extends GameStage {
public boolean exit() { public boolean exit() {
isLoadingMatch = false; isLoadingMatch = false;
effect = null; //Reset dungeon effects.
clearIsInMap(); clearIsInMap();
Forge.switchScene(SceneType.GameScene.instance); Forge.switchScene(SceneType.GameScene.instance);
return true; return true;
@@ -374,7 +405,22 @@ public class MapStage extends GameStage {
} }
} }
return false; return false;
}
public boolean lookForID(int id){
for(MapActor A : new Array.ArrayIterator<>(actors)){
if(A.getId() == id)
return true;
}
return false;
}
public EnemySprite getEnemyByID(int id) {
for(MapActor A : new Array.ArrayIterator<>(actors)){
if(A instanceof EnemySprite && A.getId() == id)
return ((EnemySprite) A);
}
return null;
} }
protected void getReward() { protected void getReward() {
@@ -398,41 +444,14 @@ public class MapStage extends GameStage {
if (actor instanceof EnemySprite) { if (actor instanceof EnemySprite) {
EnemySprite mob = (EnemySprite) actor; EnemySprite mob = (EnemySprite) actor;
currentMob = mob; currentMob = mob;
if (mob.getData().deck == null || mob.getData().deck.isEmpty()) { if (mob.dialog != null){ //This enemy has something to say. Display a dialog like if it was a DialogActor.
currentMob.setAnimation(CharacterSprite.AnimationTypes.Death); resetPosition();
Gdx.input.vibrate(50); showDialog();
startPause(0.3f, new Runnable() { mob.dialog.activate();
@Override } else { //Duel the enemy.
public void run() { beginDuel(mob);
MapStage.this.getReward();
}
});
break;
} else {
player.setAnimation(CharacterSprite.AnimationTypes.Attack);
mob.setAnimation(CharacterSprite.AnimationTypes.Attack);
Gdx.input.vibrate(50);
Forge.setCursor(null, Forge.magnifyToggle ? "1" : "2");
SoundSystem.instance.play(SoundEffectType.ManaBurn, false);
if (!isLoadingMatch) {
isLoadingMatch = true;
Forge.setTransitionScreen(new TransitionScreen(new Runnable() {
@Override
public void run() {
Forge.clearTransitionScreen();
}
}, ScreenUtils.getFrameBufferTexture(), true, false));
}
startPause(0.5f, new Runnable() {
@Override
public void run() {
((DuelScene) SceneType.DuelScene.instance).setEnemy(mob);
((DuelScene) SceneType.DuelScene.instance).setPlayer(player);
Forge.switchScene(SceneType.DuelScene.instance);
}
});
break;
} }
break;
} else if (actor instanceof RewardSprite) { } else if (actor instanceof RewardSprite) {
Gdx.input.vibrate(50); Gdx.input.vibrate(50);
startPause(0.1f, new Runnable() { startPause(0.1f, new Runnable() {
@@ -452,6 +471,34 @@ public class MapStage extends GameStage {
} }
} }
public void beginDuel(EnemySprite mob){
if(mob == null) return;
currentMob = mob;
player.setAnimation(CharacterSprite.AnimationTypes.Attack);
mob.setAnimation(CharacterSprite.AnimationTypes.Attack);
Gdx.input.vibrate(50);
Forge.setCursor(null, Forge.magnifyToggle ? "1" : "2");
SoundSystem.instance.play(SoundEffectType.ManaBurn, false);
if (!isLoadingMatch) {
isLoadingMatch = true;
Forge.setTransitionScreen(new TransitionScreen(new Runnable() {
@Override
public void run() {
Forge.clearTransitionScreen();
}
}, ScreenUtils.getFrameBufferTexture(), true, false));
}
startPause(0.4f, new Runnable() {
@Override
public void run() {
DuelScene S = ((DuelScene) SceneType.DuelScene.instance);
S.setEnemy(mob);
S.setPlayer(player);
if(isInMap && effect != null) S.setDungeonEffect(effect);
Forge.switchScene(SceneType.DuelScene.instance);
}
});
}
public void setPointOfInterest(PointOfInterestChanges change) { public void setPointOfInterest(PointOfInterestChanges change) {
changes = change; changes = change;
@@ -461,8 +508,6 @@ public class MapStage extends GameStage {
return isInMap; return isInMap;
} }
public void showDialog() { public void showDialog() {
dialog.show(dialogStage); dialog.show(dialogStage);
dialogOnlyInput=true; dialogOnlyInput=true;

View File

@@ -0,0 +1,129 @@
package forge.adventure.util;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.SerializationException;
import forge.Forge;
import forge.adventure.data.DialogData;
import forge.adventure.stage.MapStage;
/**
* MapDialog
* Implements a dialogue/event tree for dialogs.
*/
public class MapDialog {
private final MapStage stage;
private Array<DialogData> data;
private final int parentID;
static private final String defaultJSON = "[\n" +
" {\n" +
" \"effect\":[],\n" +
" \"name\":\"Error\",\n" +
" \"text\":\"This is a fallback dialog.\\nPlease check Forge logs for errors.\",\n" +
" \"condition\":[],\n" +
" \"options\":[\n" +
" { \"name\":\"OK\" }\n" +
" ]\n" +
" }\n" +
"]";
public MapDialog(String S, MapStage ST, int parentID) {
this.stage = ST;
this.parentID = parentID;
Json json = new Json();
if (S.isEmpty()){
System.err.print("Dialog error. Dialog property is empty.\n");
this.data = json.fromJson(Array.class, DialogData.class, defaultJSON);
return;
}
try { data = json.fromJson(Array.class, DialogData.class, S); }
catch(SerializationException E){
//JSON parsing could fail. Since this an user written part, assume failure is possible (it happens).
System.err.printf("[%s] while loading JSON file for dialog actor. JSON:\n%s\nUsing a default dialog.", E.getMessage(), S);
this.data = json.fromJson(Array.class, DialogData.class, defaultJSON);
}
}
private void loadDialog(DialogData dialog) {
setEffects(dialog.effect);
stage.getDialog().getContentTable().clear();
stage.getDialog().getButtonTable().clear();
String text;
if(dialog.loctext != null && !dialog.loctext.isEmpty()){ //Check for localized string, otherwise print text.
text = Forge.getLocalizer().getMessage(dialog.loctext);
} else {
text = dialog.text;
}
int charCount = 0;
stage.getDialog().text(text);
if(dialog.options != null) {
for(DialogData option:dialog.options) {
if( isConditionOk(option.condition) ) {
charCount += option.name.length();
if(charCount > 35){ //Gross hack.
stage.getDialog().getButtonTable().row();
charCount = 0;
}
stage.getDialog().getButtonTable().add(Controls.newTextButton(option.name,() -> loadDialog(option)));
}
}
stage.showDialog();
}
else {
stage.hideDialog();
}
}
public void activate() {
for(DialogData dialog:data) {
if(isConditionOk(dialog.condition)) {
loadDialog(dialog);
}
}
}
void setEffects(DialogData.EffectData[] data) {
if(data==null) return;
for(DialogData.EffectData E:data) {
if (E.removeItem != null){
Current.player().removeItem(E.removeItem);
}
if (E.addItem != null){
Current.player().addItem(E.addItem);
}
if (E.deleteMapObject != 0){
if(E.deleteMapObject < 0) stage.deleteObject(parentID);
else stage.deleteObject(E.deleteMapObject);
}
if (E.battleWithActorID != 0){
if(E.battleWithActorID < 0) stage.beginDuel(stage.getEnemyByID(parentID));
else stage.beginDuel(stage.getEnemyByID(E.battleWithActorID));
}
}
}
boolean isConditionOk(DialogData.ConditionData[] data) {
if(data==null) return true;
for(DialogData.ConditionData condition:data) {
if(condition.item != null && !condition.item.isEmpty()) { //Check for item.
if(!Current.player().hasItem(condition.item)) {
if(!condition.not) return false; //Only return on a false.
} else if(condition.not) return false;
}
if(condition.actorID != 0) { //Check for actor ID.
if(!stage.lookForID(condition.actorID)){
if(!condition.not) return false; //Same as above.
} else if(condition.not) return false;
}
}
return true;
}
}

View File

@@ -250,13 +250,13 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
else else
drawable.setMinSize(Scene.getIntendedWidth() * 0.95f, Scene.getIntendedWidth()* RewardScene.CARD_WIDTH_TO_HEIGHT * 0.95f); drawable.setMinSize(Scene.getIntendedWidth() * 0.95f, Scene.getIntendedWidth()* RewardScene.CARD_WIDTH_TO_HEIGHT * 0.95f);
toolTipImage = new Image(drawable); toolTipImage = new Image(drawable);
tooltip = new Tooltip<Image>(toolTipImage); tooltip = new Tooltip<>(toolTipImage);
holdTooltip = new HoldTooltip(new Image(drawable)); holdTooltip = new HoldTooltip(new Image(drawable));
tooltip.setInstant(true); tooltip.setInstant(true);
if (GuiBase.isAndroid()) if (frontSideUp()) {
addListener(holdTooltip); if (GuiBase.isAndroid()) addListener(holdTooltip);
else else addListener(tooltip);
addListener(tooltip); }
generatedTooltip = result; //Dispose of this later. generatedTooltip = result; //Dispose of this later.
} }

View File

@@ -1,19 +0,0 @@
[{
"effect":[],
"name":"",
"text":"A big black gate is blocking the path",
"condition":[],
"options":[
{
"name":"go away"
},
{
"name":"unlock with black key",
"condition":[{"item":"Black Key"}],
"text":"The gate is unlocked",
"options":[{"name":"continue","effect":[{"removeItem":"Black Key","deleteMapObject":-1}]}]
}
]
}
]

View File

@@ -1,19 +0,0 @@
[{
"effect":[],
"name":"",
"text":"A big blue gate is blocking the path",
"condition":[],
"options":[
{
"name":"go away"
},
{
"name":"unlock with blue key",
"condition":[{"item":"Blue Key"}],
"text":"The gate is unlocked",
"options":[{"name":"continue","effect":[{"removeItem":"Blue Key","deleteMapObject":-1}]}]
}
]
}
]

View File

@@ -1,19 +0,0 @@
[{
"effect":[],
"name":"",
"text":"A big gate is blocking the path",
"condition":[],
"options":[
{
"name":"go away"
},
{
"name":"unlock with strange key",
"condition":[{"item":"Strange Key"}],
"text":"The gate is unlocked",
"options":[{"name":"continue","effect":[{"removeItem":"Strange Key","deleteMapObject":-1}]}]
}
]
}
]

View File

@@ -1,19 +0,0 @@
[{
"effect":[],
"name":"",
"text":"A big green gate is blocking the path",
"condition":[],
"options":[
{
"name":"go away"
},
{
"name":"unlock with green key",
"condition":[{"item":"Green Key"}],
"text":"The gate is unlocked",
"options":[{"name":"continue","effect":[{"removeItem":"Green Key","deleteMapObject":-1}]}]
}
]
}
]

View File

@@ -1,19 +0,0 @@
[{
"effect":[],
"name":"",
"text":"A big red gate is blocking the path",
"condition":[],
"options":[
{
"name":"go away"
},
{
"name":"unlock with red key",
"condition":[{"item":"Red Key"}],
"text":"The gate is unlocked",
"options":[{"name":"continue","effect":[{"removeItem":"Red Key","deleteMapObject":-1}]}]
}
]
}
]

View File

@@ -1,19 +0,0 @@
[{
"effect":[],
"name":"",
"text":"A big white gate is blocking the path",
"condition":[],
"options":[
{
"name":"go away"
},
{
"name":"unlock with white key",
"condition":[{"item":"White Key"}],
"text":"The gate is unlocked",
"options":[{"name":"continue","effect":[{"removeItem":"White Key","deleteMapObject":-1}]}]
}
]
}
]

View File

@@ -3,13 +3,13 @@
"height": 4300, "height": 4300,
"width": 2 "width": 2
}, },
"activeFile": "map/barbariancamp_2.tmx", "activeFile": "tileset/main.tsx",
"automapping.whileDrawing": false, "automapping.whileDrawing": false,
"expandedProjectPaths": [ "expandedProjectPaths": [
"map/main_story",
"tileset", "tileset",
"obj", "obj",
"map" "map",
"map/main_story"
], ],
"file.lastUsedOpenFilter": "All Files (*)", "file.lastUsedOpenFilter": "All Files (*)",
"fileStates": { "fileStates": {
@@ -46,11 +46,11 @@
} }
}, },
"map/barbariancamp_2.tmx": { "map/barbariancamp_2.tmx": {
"scale": 4, "scale": 1.5,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 366.875, "x": 217.66666666666666,
"y": 101.5 "y": 180
} }
}, },
"map/barbariancamp_3.tmx": { "map/barbariancamp_3.tmx": {
@@ -1421,6 +1421,14 @@
"y": 319.33333333333326 "y": 319.33333333333326
} }
}, },
"map/debug_map.tmx": {
"scale": 8,
"selectedLayer": 3,
"viewCenter": {
"x": 132.8125,
"y": 159.375
}
},
"map/djinnpalace_1.tmx": { "map/djinnpalace_1.tmx": {
"scale": 4, "scale": 4,
"selectedLayer": 5, "selectedLayer": 5,
@@ -2054,11 +2062,11 @@
} }
}, },
"map/main_story/black_castle.tmx": { "map/main_story/black_castle.tmx": {
"scale": 3.7663541666666664, "scale": 2,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 218.380949746937, "x": 233.25,
"y": 134.34742926680866 "y": 311
} }
}, },
"map/main_story/blue_castle.tmx": { "map/main_story/blue_castle.tmx": {
@@ -2070,11 +2078,11 @@
} }
}, },
"map/main_story/colorless_castle.tmx": { "map/main_story/colorless_castle.tmx": {
"scale": 2, "scale": 3,
"selectedLayer": 1, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 260.25, "x": 179.5,
"y": 311.5 "y": 358
} }
}, },
"map/main_story/crypt.tmx": { "map/main_story/crypt.tmx": {
@@ -2087,26 +2095,26 @@
}, },
"map/main_story/final_castle.tmx": { "map/main_story/final_castle.tmx": {
"scale": 2, "scale": 2,
"selectedLayer": 4, "selectedLayer": 2,
"viewCenter": { "viewCenter": {
"x": 222.25, "x": 266.25,
"y": 141.5 "y": 554
} }
}, },
"map/main_story/green_castle.tmx": { "map/main_story/green_castle.tmx": {
"scale": 3, "scale": 3,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 214.5, "x": 218.5,
"y": 151 "y": 308
} }
}, },
"map/main_story/red_castle.tmx": { "map/main_story/red_castle.tmx": {
"scale": 2, "scale": 2,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 249.75, "x": 272.25,
"y": 195 "y": 328
} }
}, },
"map/main_story/unbenannt.tmx": { "map/main_story/unbenannt.tmx": {
@@ -2121,8 +2129,8 @@
"scale": 2, "scale": 2,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 238.75, "x": 228.75,
"y": 217 "y": 304.5
} }
}, },
"map/maze_1.tmx": { "map/maze_1.tmx": {
@@ -2695,18 +2703,18 @@
"scale": 2, "scale": 2,
"selectedLayer": 5, "selectedLayer": 5,
"viewCenter": { "viewCenter": {
"x": 480, "x": 479.75,
"y": 272 "y": 272
} }
}, },
"tileset/buildings.tsx": { "tileset/buildings.tsx": {
"scaleInDock": 2, "scaleInDock": 0.75,
"scaleInEditor": 2 "scaleInEditor": 2
}, },
"tileset/main.tsx": { "tileset/main.tsx": {
"dynamicWrapping": false, "dynamicWrapping": false,
"scaleInDock": 2, "scaleInDock": 1.5,
"scaleInEditor": 8 "scaleInEditor": 0.75
} }
}, },
"map.height": 60, "map.height": 60,
@@ -2716,95 +2724,25 @@
"map.tileWidth": 16, "map.tileWidth": 16,
"map.width": 90, "map.width": 90,
"openFiles": [ "openFiles": [
"map/main_story/final_castle.tmx", "map/debug_map.tmx",
"tileset/main.tsx",
"tileset/buildings.tsx", "tileset/buildings.tsx",
"map/portal_1G2.tmx", "tileset/main.tsx"
"map/island_town.tmx",
"map/mountain_town.tmx",
"map/forest_town.tmx",
"map/waste_town.tmx",
"map/swamp_town.tmx",
"map/plains_town.tmx",
"map/main_story/colorless_castle.tmx",
"map/main_story/blue_castle.tmx",
"map/aerie_1.tmx",
"map/cave_13.tmx",
"map/cave_14.tmx",
"map/cave_15.tmx",
"map/cave_16.tmx",
"map/cave_16B.tmx",
"map/cave_23B10.tmx",
"map/cave_23B2.tmx",
"map/cave_23B4.tmx",
"map/cave_23C5.tmx",
"map/cave_3.tmx",
"map/cave_25.tmx",
"map/cave_25B.tmx",
"map/cave_25C.tmx",
"map/cave_9.tmx",
"map/cave_8.tmx",
"map/cave_7.tmx",
"map/cave_4.tmx",
"map/crypt.tmx",
"map/crypt_2.tmx",
"map/crypt_3.tmx",
"map/crypt_4.tmx",
"map/crypt_5.tmx",
"map/djinnpalace_1.tmx",
"map/djinnpalace_2.tmx",
"map/djinnpalace_3.tmx",
"map/djinnpalace_3B.tmx",
"map/elftown.tmx",
"map/evilgrove_1.tmx",
"map/evilgrove_2.tmx",
"map/evilgrove_3.tmx",
"map/factory_1.tmx",
"map/factory_2.tmx",
"map/factory_3.tmx",
"map/factory_4.tmx",
"map/evilgrove_4.tmx",
"map/evilgrove_5.tmx",
"map/magetower_5.tmx",
"map/magetower_6.tmx",
"map/magetower_7.tmx",
"map/vampirecastle_4.tmx",
"map/portal_2.tmx",
"map/portal_2C.tmx",
"map/portal_2C2.tmx",
"map/portal_2D.tmx",
"map/portal_2E.tmx",
"map/portal_2F.tmx",
"map/portal_2G.tmx",
"map/cave_23I2.tmx",
"map/cave_23G4.tmx",
"map/cave_23E6.tmx",
"map/cave_23C8.tmx",
"map/cave_23B1.tmx",
"map/cave_2.tmx",
"map/cave_16BL2U.tmx",
"map/cave_16BL1.tmx",
"map/cave_1.tmx",
"map/catlair_3.tmx",
"map/catlair_2.tmx",
"map/catlair_1.tmx",
"map/barbariancamp_2.tmx"
], ],
"project": "main.tiled-project", "project": "main.tiled-project",
"property.type": "string", "property.type": "string",
"recentFiles": [ "recentFiles": [
"map/main_story/final_castle.tmx", "map/debug_map.tmx",
"tileset/main.tsx",
"tileset/buildings.tsx", "tileset/buildings.tsx",
"map/portal_1G2.tmx", "tileset/main.tsx",
"map/island_town.tmx", "map/main_story/white_castle.tmx",
"map/mountain_town.tmx", "map/main_story/final_castle.tmx",
"map/forest_town.tmx", "map/main_story/black_castle.tmx",
"map/waste_town.tmx", "map/main_story/red_castle.tmx",
"map/swamp_town.tmx", "map/main_story/green_castle.tmx",
"map/plains_town.tmx", "map/main_story/blue_castle.tmx",
"map/main_story/colorless_castle.tmx", "map/main_story/colorless_castle.tmx",
"map/main_story/blue_castle.tmx" "map/barbariancamp_2.tmx",
"map/portal_1G2.tmx"
], ],
"resizeMap.removeObjects": true, "resizeMap.removeObjects": true,
"textEdit.monospace": true "textEdit.monospace": true

View File

@@ -0,0 +1,167 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.8" tiledversion="1.8.4" orientation="orthogonal" renderorder="right-down" width="30" height="30" tilewidth="16" tileheight="16" infinite="0" nextlayerid="6" nextobjectid="84">
<editorsettings>
<export format="tmx"/>
</editorsettings>
<properties>
<property name="dungeonEffect">{
&quot;startBattleWithCard&quot;: [ &quot;Recycle&quot; ],
&quot;opponent&quot;: {
&quot;startBattleWithCard&quot;: [ &quot;Recycle&quot; ],
}
}</property>
</properties>
<tileset firstgid="1" source="../tileset/main.tsx"/>
<tileset firstgid="6321" source="../tileset/buildings.tsx"/>
<layer id="1" name="Background" width="30" height="30">
<data encoding="base64" compression="zlib">
eJztzaENADAIADBuIFnC/5dxCnoegaiobmVEASzp9/MCANw1XzWdLQ==
</data>
</layer>
<layer id="2" name="Ground" width="30" height="30">
<data encoding="base64" compression="zlib">
eJyTEGBgkBjFGFgaiLdhwVI0tlcSRAthYvFRe6mKa/kZGKqAuJofYl8llF/DT1t70f1Na3/S015pKI2eZ0Bi26H2bsUiT2nekoTS6ACbGDZAbliQam+jJANDkyR17IWFGQyg85HBXKCd86hkLyVg1N5RewfaXuQyiZ72UhOQY+9IiV9S7FUiID9qL3EY1pZCxvjsRVdLzTYXPnupZQchu5HtpbWdyHEPspfSdh0A9Qp8zA==
</data>
</layer>
<layer id="3" name="Foreground" width="30" height="30">
<properties>
<property name="spriteLayer" type="bool" value="true"/>
</properties>
<data encoding="base64" compression="zlib">
eJxjYBg4oCAAweh8ZDFyzECmiVFDin2EzMBnJjY1pNpNrF8Gyr+Ewp3S+EW3Axt/FFAXkJpudgDV7RRA0ITkcakbCDCQaYuc/DEKRsEoGAWjYBSMglFAKQAAIRMR9g==
</data>
</layer>
<objectgroup id="4" name="Objects">
<object id="47" template="../obj/gold.tx" x="96" y="224"/>
<object id="49" template="../obj/gold.tx" x="176" y="224"/>
<object id="50" template="../obj/enemy.tx" x="112" y="192" width="64" height="64">
<properties>
<property name="enemy" value="Emrakul"/>
</properties>
</object>
<object id="51" template="../obj/entry_up.tx" x="209" y="480">
<properties>
<property name="teleport" value=""/>
</properties>
</object>
<object id="52" template="../obj/gate.tx" x="208" y="384">
<properties>
<property name="dialog">[
{
&quot;effect&quot;:[],
&quot;name&quot;:&quot;ABC&quot;,
&quot;text&quot;:&quot;I am a big gate. Greetings.&quot;,
&quot;loctext&quot;:&quot;&quot;,
&quot;condition&quot;:[],
&quot;options&quot;:[ { &quot;name&quot;:&quot;Okay...&quot; } ]
}
]</property>
</properties>
</object>
<object id="54" template="../obj/treasure.tx" x="320" y="176">
<properties>
<property name="reward">[
{
&quot;type&quot;: &quot;life&quot;,
&quot;count&quot;: 3
}
]
</property>
<property name="sprite" value="sprites/3life.atlas"/>
</properties>
</object>
<object id="69" template="../obj/treasure.tx" x="192" y="352"/>
<object id="74" template="../obj/treasure.tx" x="224" y="352"/>
<object id="70" template="../obj/booster.tx" x="32" y="336"/>
<object id="72" template="../obj/booster.tx" x="224" y="320"/>
<object id="71" template="../obj/gold.tx" x="48" y="352"/>
<object id="73" template="../obj/gold.tx" x="224" y="288"/>
<object id="78" template="../obj/gate.tx" x="144" y="208" visible="0">
<properties>
<property name="dialog">[
{
&quot;effect&quot;:[],
&quot;name&quot;:&quot;ABC&quot;,
&quot;text&quot;:&quot;EMRAKUL\nDon't mind me, just chilling.&quot;,
&quot;loctext&quot;:&quot;&quot;,
&quot;condition&quot;:[],
&quot;options&quot;:[ { &quot;name&quot;:&quot;It happens.&quot; } ]
}
]</property>
</properties>
</object>
<object id="79" template="../obj/gate.tx" x="128" y="208" visible="0">
<properties>
<property name="dialog">[
{
&quot;effect&quot;:[],
&quot;name&quot;:&quot;ABC&quot;,
&quot;text&quot;:&quot;EMRAKUL\nDon't mind me, just chilling.&quot;,
&quot;loctext&quot;:&quot;&quot;,
&quot;condition&quot;:[],
&quot;options&quot;:[ { &quot;name&quot;:&quot;It happens.&quot; } ]
}
]</property>
</properties>
</object>
<object id="80" template="../obj/enemy.tx" x="96" y="304">
<properties>
<property name="dialog">[
{
&quot;effect&quot;:[],
&quot;name&quot;:&quot;ABC&quot;,
&quot;text&quot;:&quot;I am an elf. I do elf things like hugging trees and being pretty.&quot;,
&quot;loctext&quot;:&quot;&quot;,
&quot;condition&quot;:[],
&quot;options&quot;:[
{ &quot;name&quot;:&quot;OK&quot; },
{
&quot;name&quot;:&quot;Fight me, elf!&quot;,
&quot;text&quot;: &quot;Gladly.&quot;,
&quot;options&quot;: [ { &quot;name&quot;: &quot;I FEAR NOTHING!!?&quot;, &quot;effect&quot;: [ { &quot;battleWithActorID&quot;: -1 } ]} ]
},
{
&quot;name&quot;:&quot;I wanna fight Emrakul over there!&quot;,
&quot;condition&quot;: [ { &quot;actorID&quot;: 50 } ],
&quot;text&quot;: &quot;Really? Oh well... your funeral.\nHEY EMMY! THIS DUDE WANTS TO DANCE!&quot;,
&quot;options&quot;: [ { &quot;name&quot;: &quot;WAIT IT WAS A JOKE!!!&quot;, &quot;effect&quot;: [ { &quot;battleWithActorID&quot;: 50 } ]} ]
},
{
&quot;name&quot;:&quot;I wanna fight Emrakul over there!&quot;,
&quot;condition&quot;: [ { &quot;actorID&quot;: 50, &quot;not&quot;: true } ],
&quot;text&quot;: &quot;She left. Crying. You monster.&quot;,
&quot;options&quot;: [ { &quot;name&quot;: &quot;Sorry...&quot; } ]
},
{
&quot;name&quot;:&quot;That's cool dude.&quot;,
&quot;condition&quot;: [ { &quot;item&quot;: &quot;Treasure&quot;, &quot;not&quot;: true } ],
&quot;effect&quot;: [ { &quot;addItem&quot;: &quot;Treasure&quot; } ],
&quot;text&quot;: &quot;You get it. Take this.&quot;,
&quot;options&quot;: [ { &quot;name&quot;: &quot;Thanks bro.&quot; } ]
},
{
&quot;name&quot;:&quot;Can you open that hidden wall?&quot;,
&quot;condition&quot;: [ { &quot;actorID&quot;: 83 } ],
&quot;text&quot;: &quot;Since you asked nicely, I shall.&quot;,
&quot;options&quot;: [ { &quot;name&quot;: &quot;Thanks bro.&quot;, &quot;effect&quot;: [ { &quot;deleteMapObject&quot;: 83 } ]} ]
}
]
}
]</property>
<property name="enemy" value="Elf"/>
<property name="permanent" type="bool" value="true"/>
</properties>
</object>
<object id="81" template="../obj/enemy.tx" x="288" y="224">
<properties>
<property name="enemy" value="Goblin"/>
</properties>
</object>
<object id="82" template="../obj/enemy.tx" gid="2147491275" x="272" y="224">
<properties>
<property name="enemy" value="Goblin"/>
</properties>
</object>
<object id="83" template="../obj/gate.tx" type="dummy" gid="3651" x="64" y="336" width="16" height="16"/>
</objectgroup>
</map>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<map version="1.8" tiledversion="1.8.4" orientation="orthogonal" renderorder="right-down" width="30" height="30" tilewidth="16" tileheight="16" infinite="0" nextlayerid="6" nextobjectid="65"> <map version="1.8" tiledversion="1.8.4" orientation="orthogonal" renderorder="right-down" width="30" height="30" tilewidth="16" tileheight="16" infinite="0" nextlayerid="6" nextobjectid="69">
<editorsettings> <editorsettings>
<export target="wastetown..tmx" format="tmx"/> <export target="wastetown..tmx" format="tmx"/>
</editorsettings> </editorsettings>
@@ -43,7 +43,26 @@
</object> </object>
<object id="52" template="../../obj/gate.tx" x="208" y="448"> <object id="52" template="../../obj/gate.tx" x="208" y="448">
<properties> <properties>
<property name="dialog" value="dialogs/colorless_door.json"/> <property name="dialog">[
{
&quot;effect&quot;:[],
&quot;name&quot;:&quot;ABC&quot;,
&quot;text&quot;:&quot;A big gate is blocking the path.&quot;,
&quot;loctext&quot;:&quot;&quot;,
&quot;condition&quot;:[],
&quot;options&quot;:[
{ &quot;name&quot;:&quot;go away&quot; },
{
&quot;name&quot;:&quot;unlock with strange key&quot;,
&quot;condition&quot;:[ { &quot;item&quot;:&quot;Strange Key&quot;} ],
&quot;text&quot;:&quot;The gate is unlocked&quot;,
&quot;options&quot;:[
{&quot;name&quot;:&quot;continue&quot;,&quot;effect&quot;: [ { &quot;removeItem&quot;:&quot;Strange Key&quot;,&quot;deleteMapObject&quot;:-1 } ] }
]
}
]
}
]</property>
</properties> </properties>
</object> </object>
<object id="54" template="../../obj/treasure.tx" x="208" y="80"> <object id="54" template="../../obj/treasure.tx" x="208" y="80">

View File

@@ -4,7 +4,7 @@
<export target="wastetown..tmx" format="tmx"/> <export target="wastetown..tmx" format="tmx"/>
</editorsettings> </editorsettings>
<tileset firstgid="1" source="../../tileset/main.tsx"/> <tileset firstgid="1" source="../../tileset/main.tsx"/>
<tileset firstgid="4425" source="../../tileset/buildings.tsx"/> <tileset firstgid="6321" source="../../tileset/buildings.tsx"/>
<layer id="1" name="Background" width="30" height="114"> <layer id="1" name="Background" width="30" height="114">
<data encoding="base64" compression="zlib"> <data encoding="base64" compression="zlib">
eJztw8EJAAAMA6H7dn/IvF1EwV1NVVVVVVVVVVVVVVVV1R62fUyd eJztw8EJAAAMA6H7dn/IvF1EwV1NVVVVVVVVVVVVVVVV1R62fUyd
@@ -68,27 +68,117 @@
</object> </object>
<object id="56" template="../../obj/gate.tx" x="208" y="1680"> <object id="56" template="../../obj/gate.tx" x="208" y="1680">
<properties> <properties>
<property name="dialog" value="dialogs/red_door.json"/> <property name="dialog">[{
&quot;effect&quot;:[],
&quot;name&quot;:&quot;&quot;,
&quot;text&quot;:&quot;A big red gate is blocking the path&quot;,
&quot;condition&quot;:[],
&quot;options&quot;:[
{ &quot;name&quot;:&quot;go away&quot; },
{
&quot;name&quot;:&quot;unlock with red key&quot;,
&quot;condition&quot;:[ { &quot;item&quot;: &quot;Red Key&quot; } ],
&quot;text&quot;:&quot;The gate is unlocked&quot;,
&quot;options&quot;:[
{
&quot;name&quot;:&quot;continue&quot;,&quot;effect&quot;:[{&quot;removeItem&quot;:&quot;Red Key&quot;,&quot;deleteMapObject&quot;:-1}]
}
]
}
]
}]</property>
</properties> </properties>
</object> </object>
<object id="57" template="../../obj/gate.tx" x="208" y="1440"> <object id="57" template="../../obj/gate.tx" x="208" y="1440">
<properties> <properties>
<property name="dialog" value="dialogs/blue_door.json"/> <property name="dialog">[{
&quot;effect&quot;:[],
&quot;name&quot;:&quot;&quot;,
&quot;text&quot;:&quot;A big blue gate is blocking the path&quot;,
&quot;condition&quot;:[],
&quot;options&quot;:[
{
&quot;name&quot;:&quot;go away&quot;
},
{
&quot;name&quot;:&quot;unlock with blue key&quot;,
&quot;condition&quot;:[{&quot;item&quot;:&quot;Blue Key&quot;}],
&quot;text&quot;:&quot;The gate is unlocked&quot;,
&quot;options&quot;:[{&quot;name&quot;:&quot;continue&quot;,&quot;effect&quot;:[{&quot;removeItem&quot;:&quot;Blue Key&quot;,&quot;deleteMapObject&quot;:-1}]}]
}
]
}
]</property>
</properties> </properties>
</object> </object>
<object id="58" template="../../obj/gate.tx" x="208" y="1216"> <object id="58" template="../../obj/gate.tx" x="208" y="1216">
<properties> <properties>
<property name="dialog" value="dialogs/green_door.json"/> <property name="dialog">[{
&quot;effect&quot;:[],
&quot;name&quot;:&quot;&quot;,
&quot;text&quot;:&quot;A big green gate is blocking the path&quot;,
&quot;condition&quot;:[],
&quot;options&quot;:[
{
&quot;name&quot;:&quot;go away&quot;
},
{
&quot;name&quot;:&quot;unlock with green key&quot;,
&quot;condition&quot;:[{&quot;item&quot;:&quot;Green Key&quot;}],
&quot;text&quot;:&quot;The gate is unlocked&quot;,
&quot;options&quot;:[{&quot;name&quot;:&quot;continue&quot;,&quot;effect&quot;:[{&quot;removeItem&quot;:&quot;Green Key&quot;,&quot;deleteMapObject&quot;:-1}]}]
}
]
}
]</property>
</properties> </properties>
</object> </object>
<object id="59" template="../../obj/gate.tx" x="208" y="992"> <object id="59" template="../../obj/gate.tx" x="208" y="992">
<properties> <properties>
<property name="dialog" value="dialogs/white_door.json"/> <property name="dialog">[{
&quot;effect&quot;:[],
&quot;name&quot;:&quot;&quot;,
&quot;text&quot;:&quot;A big white gate is blocking the path&quot;,
&quot;condition&quot;:[],
&quot;options&quot;:[
{
&quot;name&quot;:&quot;go away&quot;
},
{
&quot;name&quot;:&quot;unlock with white key&quot;,
&quot;condition&quot;:[{&quot;item&quot;:&quot;White Key&quot;}],
&quot;text&quot;:&quot;The gate is unlocked&quot;,
&quot;options&quot;:[{&quot;name&quot;:&quot;continue&quot;,&quot;effect&quot;:[{&quot;removeItem&quot;:&quot;White Key&quot;,&quot;deleteMapObject&quot;:-1}]}]
}
]
}
]</property>
</properties> </properties>
</object> </object>
<object id="60" template="../../obj/gate.tx" x="208" y="768"> <object id="60" template="../../obj/gate.tx" x="208" y="768">
<properties> <properties>
<property name="dialog" value="dialogs/black_door.json"/> <property name="dialog">[{
&quot;effect&quot;:[],
&quot;name&quot;:&quot;&quot;,
&quot;text&quot;:&quot;A big black gate is blocking the path&quot;,
&quot;condition&quot;:[],
&quot;options&quot;:[
{
&quot;name&quot;:&quot;go away&quot;
},
{
&quot;name&quot;:&quot;unlock with black key&quot;,
&quot;condition&quot;:[{&quot;item&quot;:&quot;Black Key&quot;}],
&quot;text&quot;:&quot;The gate is unlocked&quot;,
&quot;options&quot;:[{&quot;name&quot;:&quot;continue&quot;,&quot;effect&quot;:[{&quot;removeItem&quot;:&quot;Black Key&quot;,&quot;deleteMapObject&quot;:-1}]}]
}
]
}
]</property>
</properties> </properties>
</object> </object>
<object id="62" template="../../obj/treasure.tx" x="208" y="80"> <object id="62" template="../../obj/treasure.tx" x="208" y="80">

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<template>
<tileset firstgid="1" source="../tileset/buildings.tsx"/>
<object name="Dummy" type="dummy" gid="1307" width="16" height="16">
<properties>
<property name="sprite" value=""/>
</properties>
</object>
</template>

View File

@@ -3,7 +3,16 @@
<tileset firstgid="1" source="../tileset/main.tsx"/> <tileset firstgid="1" source="../tileset/main.tsx"/>
<object name="Gate" type="dialog" gid="4125" width="16" height="16"> <object name="Gate" type="dialog" gid="4125" width="16" height="16">
<properties> <properties>
<property name="dialog" value=""/> <property name="dialog">[
{
&quot;effect&quot;:[],
&quot;name&quot;:&quot;ABC&quot;,
&quot;text&quot;:&quot;I am a big gate. Greetings.&quot;,
&quot;loctext&quot;:&quot;&quot;,
&quot;condition&quot;:[],
&quot;options&quot;:[ { &quot;name&quot;:&quot;Okay...&quot; } ]
}
]</property>
</properties> </properties>
</object> </object>
</template> </template>

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

View File

@@ -0,0 +1,102 @@
info face="MiKrollFantasyBig" size=12 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=2 padding=1,1,1,1 spacing=0,0
common lineHeight=28 base=21 scaleW=506 scaleH=39 pages=1 packed=0 alphaChnl=0 redChnl=0 greenChnl=0 blueChnl=0
page id=0 file="MiKrollFantasyBig.png"
chars count=97
char id=0 x=2 y=2 width=9 height=22 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=0
char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=-1 xadvance=10 page=0 chnl=0
char id=33 x=289 y=2 width=2 height=12 xoffset=-1 yoffset=9 xadvance=4 page=0 chnl=0
char id=34 x=332 y=26 width=6 height=4 xoffset=-1 yoffset=9 xadvance=8 page=0 chnl=0
char id=35 x=124 y=26 width=10 height=10 xoffset=-1 yoffset=11 xadvance=12 page=0 chnl=0
char id=36 x=129 y=2 width=8 height=12 xoffset=-1 yoffset=11 xadvance=10 page=0 chnl=0
char id=37 x=278 y=26 width=8 height=8 xoffset=-1 yoffset=13 xadvance=10 page=0 chnl=0
char id=38 x=136 y=26 width=10 height=10 xoffset=-1 yoffset=11 xadvance=12 page=0 chnl=0
char id=39 x=344 y=26 width=2 height=4 xoffset=-1 yoffset=9 xadvance=4 page=0 chnl=0
char id=40 x=37 y=2 width=4 height=14 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=0
char id=41 x=43 y=2 width=4 height=14 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=0
char id=42 x=288 y=26 width=6 height=6 xoffset=-1 yoffset=9 xadvance=8 page=0 chnl=0
char id=43 x=296 y=26 width=6 height=6 xoffset=-1 yoffset=13 xadvance=8 page=0 chnl=0
char id=44 x=340 y=26 width=2 height=4 xoffset=-1 yoffset=19 xadvance=4 page=0 chnl=0
char id=45 x=366 y=26 width=4 height=2 xoffset=-1 yoffset=15 xadvance=6 page=0 chnl=0
char id=46 x=362 y=26 width=2 height=2 xoffset=-1 yoffset=19 xadvance=4 page=0 chnl=0
char id=47 x=77 y=2 width=6 height=14 xoffset=-1 yoffset=7 xadvance=8 page=0 chnl=0
char id=48 x=303 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=49 x=395 y=2 width=6 height=12 xoffset=-1 yoffset=9 xadvance=8 page=0 chnl=0
char id=50 x=385 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=51 x=375 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=52 x=363 y=2 width=10 height=12 xoffset=-1 yoffset=9 xadvance=12 page=0 chnl=0
char id=53 x=353 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=54 x=343 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=55 x=333 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=56 x=323 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=57 x=313 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=58 x=221 y=2 width=2 height=12 xoffset=-1 yoffset=9 xadvance=4 page=0 chnl=0
char id=59 x=33 y=2 width=2 height=14 xoffset=-1 yoffset=9 xadvance=4 page=0 chnl=0
char id=60 x=112 y=26 width=10 height=10 xoffset=-1 yoffset=11 xadvance=12 page=0 chnl=0
char id=61 x=304 y=26 width=6 height=6 xoffset=-1 yoffset=13 xadvance=8 page=0 chnl=0
char id=62 x=98 y=26 width=12 height=10 xoffset=-1 yoffset=11 xadvance=14 page=0 chnl=0
char id=63 x=267 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=64 x=85 y=2 width=14 height=14 xoffset=-1 yoffset=7 xadvance=16 page=0 chnl=0
char id=65 x=109 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=66 x=119 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=67 x=143 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=68 x=153 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=69 x=163 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=70 x=173 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=71 x=183 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=72 x=193 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=73 x=203 y=2 width=6 height=12 xoffset=-1 yoffset=9 xadvance=8 page=0 chnl=0
char id=74 x=211 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=75 x=225 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=76 x=235 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=77 x=245 y=2 width=10 height=12 xoffset=-1 yoffset=9 xadvance=12 page=0 chnl=0
char id=78 x=257 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=79 x=277 y=2 width=10 height=12 xoffset=-1 yoffset=9 xadvance=12 page=0 chnl=0
char id=80 x=293 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=81 x=21 y=2 width=10 height=14 xoffset=-1 yoffset=9 xadvance=12 page=0 chnl=0
char id=82 x=403 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=83 x=423 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=84 x=433 y=2 width=10 height=12 xoffset=-1 yoffset=9 xadvance=12 page=0 chnl=0
char id=85 x=445 y=2 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=86 x=455 y=2 width=10 height=12 xoffset=-1 yoffset=9 xadvance=12 page=0 chnl=0
char id=87 x=473 y=2 width=10 height=12 xoffset=-1 yoffset=9 xadvance=12 page=0 chnl=0
char id=88 x=485 y=2 width=10 height=12 xoffset=-1 yoffset=9 xadvance=12 page=0 chnl=0
char id=89 x=10 y=26 width=10 height=12 xoffset=-1 yoffset=9 xadvance=12 page=0 chnl=0
char id=90 x=22 y=26 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=91 x=49 y=2 width=4 height=14 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=0
char id=92 x=101 y=2 width=6 height=14 xoffset=-1 yoffset=7 xadvance=8 page=0 chnl=0
char id=93 x=55 y=2 width=4 height=14 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=0
char id=94 x=324 y=26 width=6 height=4 xoffset=-1 yoffset=9 xadvance=8 page=0 chnl=0
char id=95 x=352 y=26 width=8 height=2 xoffset=-1 yoffset=19 xadvance=10 page=0 chnl=0
char id=96 x=348 y=26 width=2 height=4 xoffset=-1 yoffset=9 xadvance=4 page=0 chnl=0
char id=97 x=250 y=26 width=8 height=8 xoffset=-1 yoffset=13 xadvance=10 page=0 chnl=0
char id=98 x=32 y=26 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=99 x=270 y=26 width=6 height=8 xoffset=-1 yoffset=13 xadvance=8 page=0 chnl=0
char id=100 x=56 y=26 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=101 x=148 y=26 width=8 height=8 xoffset=-1 yoffset=13 xadvance=10 page=0 chnl=0
char id=102 x=90 y=26 width=6 height=12 xoffset=-1 yoffset=9 xadvance=8 page=0 chnl=0
char id=103 x=80 y=26 width=8 height=12 xoffset=-1 yoffset=13 xadvance=10 page=0 chnl=0
char id=104 x=70 y=26 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=105 x=66 y=26 width=2 height=12 xoffset=-1 yoffset=9 xadvance=4 page=0 chnl=0
char id=106 x=13 y=2 width=6 height=16 xoffset=-1 yoffset=9 xadvance=8 page=0 chnl=0
char id=107 x=46 y=26 width=8 height=12 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=0
char id=108 x=42 y=26 width=2 height=12 xoffset=-1 yoffset=9 xadvance=4 page=0 chnl=0
char id=109 x=158 y=26 width=10 height=8 xoffset=-1 yoffset=13 xadvance=12 page=0 chnl=0
char id=110 x=170 y=26 width=8 height=8 xoffset=-1 yoffset=13 xadvance=10 page=0 chnl=0
char id=111 x=180 y=26 width=8 height=8 xoffset=-1 yoffset=13 xadvance=10 page=0 chnl=0
char id=112 x=0 y=26 width=8 height=12 xoffset=-1 yoffset=13 xadvance=10 page=0 chnl=0
char id=113 x=497 y=2 width=8 height=12 xoffset=-1 yoffset=13 xadvance=10 page=0 chnl=0
char id=114 x=190 y=26 width=6 height=8 xoffset=-1 yoffset=13 xadvance=8 page=0 chnl=0
char id=115 x=198 y=26 width=8 height=8 xoffset=-1 yoffset=13 xadvance=10 page=0 chnl=0
char id=116 x=467 y=2 width=4 height=12 xoffset=-1 yoffset=9 xadvance=6 page=0 chnl=0
char id=117 x=208 y=26 width=8 height=8 xoffset=-1 yoffset=13 xadvance=10 page=0 chnl=0
char id=118 x=218 y=26 width=8 height=8 xoffset=-1 yoffset=13 xadvance=10 page=0 chnl=0
char id=119 x=228 y=26 width=10 height=8 xoffset=-1 yoffset=13 xadvance=12 page=0 chnl=0
char id=120 x=240 y=26 width=8 height=8 xoffset=-1 yoffset=13 xadvance=10 page=0 chnl=0
char id=121 x=413 y=2 width=8 height=12 xoffset=-1 yoffset=13 xadvance=10 page=0 chnl=0
char id=122 x=260 y=26 width=8 height=8 xoffset=-1 yoffset=13 xadvance=10 page=0 chnl=0
char id=123 x=61 y=2 width=6 height=14 xoffset=-1 yoffset=7 xadvance=8 page=0 chnl=0
char id=124 x=139 y=2 width=2 height=12 xoffset=-1 yoffset=9 xadvance=4 page=0 chnl=0
char id=125 x=69 y=2 width=6 height=14 xoffset=-1 yoffset=7 xadvance=8 page=0 chnl=0
char id=126 x=312 y=26 width=10 height=6 xoffset=-1 yoffset=13 xadvance=12 page=0 chnl=0
char id=160 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=21 xadvance=10 page=0 chnl=0
kernings count=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,4 +1,18 @@
{ {
"com.badlogic.gdx.graphics.g2d.BitmapFont": {
"big": {
"file": "LanaPixelCJK.fnt"
},
"black": {
"file": "LanaPixelCJK.fnt"
},
"blackbig": {
"file": "LanaPixelCJK.fnt"
},
"default": {
"file": "LanaPixelCJK.fnt"
}
},
"com.badlogic.gdx.graphics.Color": { "com.badlogic.gdx.graphics.Color": {
"RGBA_0_0_0_255": { "RGBA_0_0_0_255": {
"r": 0, "r": 0,

View File

@@ -1,4 +1,4 @@
Lathiss.png lathiss.png
size: 128,112 size: 128,112
format: RGBA8888 format: RGBA8888
filter: Nearest,Nearest filter: Nearest,Nearest
@@ -41,4 +41,4 @@ Death
size: 32, 32 size: 32, 32
Death Death
xy: 96, 80 xy: 96, 80
size: 32, 32 size: 32, 32

View File

@@ -1,489 +1,692 @@
[ [
{ {
"name": "Sol Ring", "name": "Sol Ring",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"startBattleWithCard" : ["Sol Ring"], "iconName": "SolRing",
"iconName" :"SolRing" "effect": {
}, "startBattleWithCard": [
{ "Sol Ring"
"name": "Mox Emerald", ]
"equipmentSlot": "Neck", }
"startBattleWithCard" : ["Mox Emerald"], },
"iconName" :"MoxEmerald" {
}, "name": "Mox Emerald",
{ "equipmentSlot": "Neck",
"name": "Black Lotus", "iconName": "MoxEmerald",
"equipmentSlot": "Right", "effect": {
"startBattleWithCard" : ["Black Lotus"], "startBattleWithCard": [
"iconName" :"BlackLotus" "Mox Emerald"
}, ]
}
},
{
"name": "Black Lotus",
"equipmentSlot": "Right",
"iconName": "BlackLotus",
"effect": {
"startBattleWithCard": [
"Black Lotus"
]
}
},
{ {
"name": "Mox Jet", "name": "Mox Jet",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"startBattleWithCard" : ["Mox Jet"], "iconName": "MoxJet",
"iconName" :"MoxJet" "effect": {
"startBattleWithCard": [
"Mox Jet"
]
}
}, },
{ {
"name": "Mox Pearl", "name": "Mox Pearl",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"startBattleWithCard" : ["Mox Pearl"], "iconName": "MoxPearl",
"iconName" :"MoxPearl" "effect": {
"startBattleWithCard": [
"Mox Pearl"
]
}
}, },
{ {
"name": "Mox Ruby", "name": "Mox Ruby",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"startBattleWithCard" : ["Mox Ruby"], "iconName": "MoxRuby",
"iconName" :"MoxRuby" "effect": {
"startBattleWithCard": [
"Mox Ruby"
]
}
}, },
{ {
"name": "Mox Sapphire", "name": "Mox Sapphire",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"startBattleWithCard" : ["Mox Sapphire"], "iconName": "MoxSapphire",
"iconName" :"MoxSapphire" "effect": {
"startBattleWithCard": [
"Mox Sapphire"
]
}
},
{
"name": "Battle Standard",
"equipmentSlot": "Left",
"iconName": "BattleStandard",
"effect": {
"lifeModifier": -1,
"startBattleWithCard": [
"r_1_1_goblin"
]
}
},
{
"name": "Life Amulet",
"equipmentSlot": "Neck",
"iconName": "LifeAmulet",
"effect": {
"lifeModifier": 2
}
},
{
"name": "Red Key",
"iconName": "RedKey",
"questItem": true
},
{
"name": "White Key",
"iconName": "WhiteKey",
"questItem": true
},
{
"name": "Blue Key",
"iconName": "BlueKey",
"questItem": true
},
{
"name": "Green Key",
"iconName": "GreenKey",
"questItem": true
},
{
"name": "Black Key",
"iconName": "BlackKey",
"questItem": true
},
{
"name": "Strange Key",
"iconName": "StrangeKey",
"questItem": true
}, },
{
"name": "Battle Standard",
"equipmentSlot": "Left",
"lifeModifier": -1,
"startBattleWithCard" : ["r_1_1_goblin"],
"iconName" :"BattleStandard"
} ,
{
"name": "Life Amulet",
"equipmentSlot": "Neck",
"lifeModifier": 2,
"iconName" :"LifeAmulet"
} ,
{
"name": "Red Key",
"questItem": true,
"iconName" :"RedKey"
} ,
{
"name": "White Key",
"questItem": true,
"iconName" :"WhiteKey"
},
{
"name": "Blue Key",
"questItem": true,
"iconName" :"BlueKey"
},
{
"name": "Green Key",
"questItem": true,
"iconName" :"GreenKey"
},
{
"name": "Black Key",
"questItem": true,
"iconName" :"BlackKey"
},
{
"name": "Strange Key",
"questItem": true,
"iconName" :"StrangeKey"
}
,
{ {
"name": "Steel Sword", "name": "Steel Sword",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"startBattleWithCard" : ["Greatsword"], "iconName": "SteelSword",
"iconName" :"SteelSword" "effect": {
} "startBattleWithCard": [
, "Greatsword"
]
}
},
{ {
"name": "Axt", "name": "Axt",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"startBattleWithCard" : ["Bonesplitter"], "iconName": "SteelAxt",
"iconName" :"SteelAxt" "effect": {
} "startBattleWithCard": [
, "Bonesplitter"
]
}
},
{ {
"name": "Steel Boots", "name": "Steel Boots",
"equipmentSlot": "Boots", "equipmentSlot": "Boots",
"lifeModifier": 1, "iconName": "SteelBoots",
"moveSpeed" : 1.2, "cost": 500,
"iconName" :"SteelBoots" , "effect": {
"cost" :500 "lifeModifier": 1,
} "moveSpeed": 1.2
, }
},
{ {
"name": "Steel Shield", "name": "Steel Shield",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["w_0_3_wall_defender"], "iconName": "SteelShield",
"iconName" :"SteelShield", "cost": 500,
"cost" :500 "effect": {
} "startBattleWithCard": [
, "w_0_3_wall_defender"
]
}
},
{ {
"name": "Steel Armor", "name": "Steel Armor",
"equipmentSlot": "Body", "equipmentSlot": "Body",
"lifeModifier": 3, "cost": 500,
"iconName" :"SteelArmor" , "iconName": "SteelArmor",
"cost" :500 "effect": {
} "lifeModifier": 3
, }
},
{ {
"name": "Leather Boots", "name": "Leather Boots",
"equipmentSlot": "Boots", "equipmentSlot": "Boots",
"moveSpeed" : 1.15, "iconName": "LeatherBoots",
"iconName" :"LeatherBoots" "effect": {
} "moveSpeed": 1.15
, }
},
{ {
"name": "Jungle Shield", "name": "Jungle Shield",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["g_0_1_plant"], "iconName": "JungleShield",
"iconName" :"JungleShield" "effect": {
} "startBattleWithCard": [
, "g_0_1_plant"
]
}
},
{ {
"name": "Dagger", "name": "Dagger",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"startBattleWithCard" : ["Spare Dagger"], "iconName": "Dagger",
"iconName" :"Dagger" "effect": {
} "startBattleWithCard": [
, "Spare Dagger"
]
}
},
{ {
"name": "Cheat", "name": "Cheat",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"startBattleWithCard" : ["Blightsteel Colossus","Lightning Greaves"], "iconName": "Goose",
"iconName" :"Goose" "effect": {
} "startBattleWithCard": [
, "Blightsteel Colossus",
"Lightning Greaves"
]
}
},
{ {
"name": "Aladdin's Ring", "name": "Aladdin's Ring",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["Aladdin's Ring"], "iconName": "AladdinsRing",
"iconName" :"AladdinsRing" "effect": {
} "startBattleWithCard": [
, "Aladdin's Ring"
]
}
},
{ {
"name": "Spell Book", "name": "Spell Book",
"iconName": "SpellBook",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"changeStartCards" : 1, "effect": {
"iconName" :"SpellBook" "changeStartCards": 1
}
}, },
{ {
"name": "Cursed Ring", "name": "Cursed Ring",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["c_0_1_a_goblin_construct_noblock_ping","c_0_1_a_goblin_construct_noblock_ping","c_0_1_a_goblin_construct_noblock_ping"], "iconName": "CursedRing",
"iconName" :"CursedRing" "effect": {
"startBattleWithCard": [
"c_0_1_a_goblin_construct_noblock_ping",
"c_0_1_a_goblin_construct_noblock_ping",
"c_0_1_a_goblin_construct_noblock_ping"
]
}
}, },
{ {
"name": "Mithril Boots", "name": "Mithril Boots",
"equipmentSlot": "Boots", "equipmentSlot": "Boots",
"lifeModifier": 2, "iconName": "MithrilBoots",
"moveSpeed" : 1.3, "cost": 1500,
"iconName" :"MithrilBoots" , "effect": {
"cost" :1500 "lifeModifier": 2,
} "moveSpeed": 1.3
, }
},
{ {
"name": "Mithril Shield", "name": "Mithril Shield",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["c_0_4_a_wall_defender"], "iconName": "MithrilShield",
"iconName" :"MithrilShield" , "cost": 1500,
"cost" :1500 "effect": {
} "startBattleWithCard": [
, "c_0_4_a_wall_defender"
]
}
},
{ {
"name": "Mithril Armor", "name": "Mithril Armor",
"equipmentSlot": "Body", "equipmentSlot": "Body",
"lifeModifier": 5, "iconName": "MithrilArmor",
"iconName" :"MithrilArmor" , "cost": 1500,
"cost" :1500 "effect": {
"lifeModifier": 5
}
}, },
{ {
"name": "Death Ring", "name": "Death Ring",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"opponent":{ "iconName": "DeathRing",
"startBattleWithCard" : ["c_0_1_a_goblin_construct_noblock_ping","c_0_1_a_goblin_construct_noblock_ping","c_0_1_a_goblin_construct_noblock_ping"]}, "effect": {
"iconName" :"DeathRing" "opponent": {
"startBattleWithCard": [
"c_0_1_a_goblin_construct_noblock_ping",
"c_0_1_a_goblin_construct_noblock_ping",
"c_0_1_a_goblin_construct_noblock_ping"
]
}
}
}, },
{ {
"name": "Flame Sword", "name": "Flame Sword",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"opponent":{ "iconName": "FlameSword",
"lifeModifier" : -5 "effect": {
}, "opponent": {
"iconName" :"FlameSword" "lifeModifier": -5
} }
, }
},
{ {
"name": "Mirror Shield", "name": "Mirror Shield",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["Mirror Shield"], "iconName": "MirrorShield",
"iconName" :"MirrorShield" "effect": {
} "startBattleWithCard": [
, "Mirror Shield"
]
}
},
{ {
"name": "Dungeon Map", "name": "Dungeon Map",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["Dungeon Map"], "iconName": "DungeonMap",
"iconName" :"DungeonMap" "effect": {
} "startBattleWithCard": [
, "Dungeon Map"
]
}
},
{ {
"name": "Aladdin's Lamp", "name": "Aladdin's Lamp",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["Aladdin's Lamp"], "iconName": "AladdinsLamp",
"iconName" :"AladdinsLamp" "effect": {
} "startBattleWithCard": [
, "Aladdin's Lamp"
]
}
},
{ {
"name": "Heart-Piercer", "name": "Heart-Piercer",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"startBattleWithCard" : ["Heart-Piercer Bow"], "iconName": "CompositeBow",
"iconName" :"CompositeBow" "effect": {
} "startBattleWithCard": [
, "Heart-Piercer Bow"
]
}
},
{ {
"name": "Wood Bow", "name": "Wood Bow",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"startBattleWithCard" : ["Fyndhorn Bow"], "iconName": "WoodBow",
"iconName" :"WoodBow" "effect": {
"startBattleWithCard": [ "Fyndhorn Bow" ]
}
}, },
{ {
"name": "Sandals", "name": "Sandals",
"equipmentSlot": "Boots", "equipmentSlot": "Boots",
"moveSpeed" : 1.1, "iconName": "Sandals",
"iconName" :"Sandals" "effect": {
"moveSpeed": 1.1
}
}, },
{ {
"name": "Gold Boots", "name": "Gold Boots",
"equipmentSlot": "Boots", "equipmentSlot": "Boots",
"lifeModifier": 2, "iconName": "GoldBoots",
"moveSpeed" : 1.3, "effect": {
"iconName" :"GoldBoots" "lifeModifier": 2,
} "moveSpeed": 1.3
, }
},
{ {
"name": "Gold Shield", "name": "Gold Shield",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"lifeModifier": 3, "iconName": "GoldShield",
"iconName" :"GoldShield" "effect": {
} "lifeModifier": 3
, }
},
{ {
"name": "Gold Armor", "name": "Gold Armor",
"equipmentSlot": "Body", "equipmentSlot": "Body",
"lifeModifier": 4, "iconName": "GoldArmor",
"iconName" :"GoldArmor" "effect": {
"lifeModifier": 4
}
}, },
{ {
"name": "Dark Boots", "name": "Dark Boots",
"equipmentSlot": "Boots", "equipmentSlot": "Boots",
"startBattleWithCard" : ["Clattering Augur"], "iconName": "DarkBoots",
"lifeModifier": -2, "effect": {
"moveSpeed" : 1.3, "startBattleWithCard": [
"iconName" :"DarkBoots" "Clattering Augur"
} ],
, "lifeModifier": -2,
"moveSpeed": 1.3
}
},
{ {
"name": "Dark Shield", "name": "Dark Shield",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["Barrier of Bones"], "iconName": "DarkShield",
"lifeModifier": -3, "effect": {
"iconName" :"DarkShield" "startBattleWithCard": [
} "Barrier of Bones"
, ],
"lifeModifier": -3
}
},
{ {
"name": "Dark Armor", "name": "Dark Armor",
"equipmentSlot": "Body", "equipmentSlot": "Body",
"startBattleWithCard" : ["Skeletal Snake"], "iconName": "DarkArmor",
"lifeModifier": -4, "effect": {
"iconName" :"DarkArmor" "startBattleWithCard": [
"Skeletal Snake"
],
"lifeModifier": -4
}
}, },
{ {
"name": "Blood Vial", "name": "Blood Vial",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["c_a_blood_draw"], "iconName": "Blood",
"iconName" :"Blood" "effect": {
"startBattleWithCard": [
"c_a_blood_draw"
]
}
}, },
{ {
"name": "Charm", "name": "Charm",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["c_a_clue_draw"], "iconName": "Clue",
"iconName" :"Clue" "effect": {
"startBattleWithCard": [
"c_a_clue_draw"
]
}
}, },
{ {
"name": "Snack", "name": "Snack",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["c_a_food_sac"], "iconName": "Cheese",
"iconName" :"Cheese" "effect": {
"startBattleWithCard": [
"c_a_food_sac"
]
}
}, },
{ {
"name": "Change", "name": "Change",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["c_a_gold_draw"], "iconName": "Gold",
"iconName" :"Gold" "effect": {
"startBattleWithCard": [
"c_a_gold_draw"
]
}
}, },
{ {
"name": "Treasure", "name": "Treasure",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["c_a_treasure_sac"], "iconName": "Treasure",
"iconName" :"Treasure" "effect": {
"startBattleWithCard": [
"c_a_treasure_sac"
]
}
}, },
{ {
"name": "Magic Shard", "name": "Magic Shard",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["c_e_shard_draw"], "iconName": "Shard",
"iconName" :"Shard" "effect": {
} "startBattleWithCard": [
, "c_e_shard_draw"
]
}
},
{ {
"name": "Mad Staff", "name": "Mad Staff",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"startBattleWithCard" : ["Power Struggle"], "iconName": "MadStaff",
"iconName" :"MadStaff" "effect": {
} "startBattleWithCard": [
, "Power Struggle"
]
}
},
{ {
"name": "Dark Amulet", "name": "Dark Amulet",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"startBattleWithCard" : ["Necropolis of Azar"], "iconName": "DarkAmulet",
"iconName" :"DarkAmulet" "effect": {
} "startBattleWithCard": [
, "Necropolis of Azar"
]
}
},
{ {
"name": "Pandora's Box", "name": "Pandora's Box",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["Pandora's Box"], "iconName": "PandorasBox",
"iconName" :"PandorasBox" "effect": {
} "startBattleWithCard": [
, "Pandora's Box"
]
}
},
{ {
"name": "Disrupting Scepter", "name": "Disrupting Scepter",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"startBattleWithCard" : ["Disrupting Scepter"], "iconName": "DisruptingScepter",
"iconName" :"DisruptingScepter" "effect": {
} "startBattleWithCard": [
, "Disrupting Scepter"
]
}
},
{ {
"name": "Entrancing Lyre", "name": "Entrancing Lyre",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["Entrancing Lyre"], "iconName": "EntrancingLyre",
"iconName" :"EntrancingLyre" "effect": {
} "startBattleWithCard": [
, "Entrancing Lyre"
]
}
},
{ {
"name": "Heavy Arbalest", "name": "Heavy Arbalest",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"startBattleWithCard" : ["Heavy Arbalest"], "iconName": "HeavyArbalest",
"iconName" :"HeavyArbalest" "effect": {
} "startBattleWithCard": [
, "Heavy Arbalest"
]
}
},
{ {
"name": "Ring of Three Wishes", "name": "Ring of Three Wishes",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["Ring of Three Wishes"], "iconName": "RingofThreeWishes",
"iconName" :"RingofThreeWishes" "effect": {
} "startBattleWithCard": [
, "Ring of Three Wishes"
]
}
},
{ {
"name": "The Blackstaff of Waterdeep", "name": "The Blackstaff of Waterdeep",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"startBattleWithCard" : ["The Blackstaff of Waterdeep"], "iconName": "TheBlackstaffofWaterdeep",
"iconName" :"TheBlackstaffofWaterdeep" "effect": {
} "startBattleWithCard": [
, "The Blackstaff of Waterdeep"
]
}
},
{ {
"name": "Unerring Sling", "name": "Unerring Sling",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"startBattleWithCard" : ["Unerring Sling"], "iconName": "UnerringSling",
"iconName" :"UnerringSling" "effect": {
} "startBattleWithCard": [
, "Unerring Sling"
]
}
},
{ {
"name": "Jeweled Amulet", "name": "Jeweled Amulet",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"startBattleWithCard" : ["Jeweled Amulet"], "iconName": "JeweledAmulet",
"iconName" :"JeweledAmulet" "effect": {
} "startBattleWithCard": [
, "Jeweled Amulet"
]
}
},
{ {
"name": "Traveler's Amulet", "name": "Traveler's Amulet",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"startBattleWithCard" : ["Traveler's Amulet"], "iconName": "TravelersAmulet",
"iconName" :"TravelersAmulet" "effect": {
} "startBattleWithCard": [
, "Traveler's Amulet"
]
}
},
{ {
"name": "Relic Amulet", "name": "Relic Amulet",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"startBattleWithCard" : ["Relic Amulet"], "iconName": "RelicAmulet",
"iconName" :"RelicAmulet" "effect": {
} "startBattleWithCard": [
, "Relic Amulet"
]
}
},
{ {
"name": "Amulet of Kroog", "name": "Amulet of Kroog",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"startBattleWithCard" : ["Amulet of Kroog"], "iconName": "AmuletofKroog",
"iconName" :"AmuletofKroog" "effect": {
} "startBattleWithCard": [
, "Amulet of Kroog"
]
}
},
{ {
"name": "Amulet of Vigor", "name": "Amulet of Vigor",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"startBattleWithCard" : ["Amulet of Vigor"], "iconName": "AmuletofVigor",
"iconName" :"AmuletofVigor" "effect": {
} "startBattleWithCard": [
, "Amulet of Vigor"
]
}
},
{ {
"name": "Veilstone Amulet", "name": "Veilstone Amulet",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"startBattleWithCard" : ["Veilstone Amulet"], "iconName": "VeilstoneAmulet",
"iconName" :"VeilstoneAmulet" "effect": {
} "startBattleWithCard": [
, "Veilstone Amulet"
]
}
},
{ {
"name": "Jandor's Ring", "name": "Jandor's Ring",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["Jandor's Ring"], "iconName": "JandorsRing",
"iconName" :"JandorsRing" "effect": {
"startBattleWithCard": [
"Jandor's Ring"
]
}
}, },
{ {
"name": "Jinxed Ring", "name": "Jinxed Ring",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"opponent":{ "iconName": "JinxedRing",
"startBattleWithCard" : ["Jinxed Ring"]}, "effect": {
"iconName" :"JinxedRing" "opponent": {
} "startBattleWithCard": [
, "Jinxed Ring"
]
}
}
},
{ {
"name": "Nine-Ringed Bo", "name": "Nine-Ringed Bo",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"startBattleWithCard" : ["Nine-Ringed Bo"], "iconName": "Nine-RingedBo",
"iconName" :"Nine-RingedBo" "effect": {
} "startBattleWithCard": [
, "Nine-Ringed Bo"
]
}
},
{ {
"name": "Ring of Immortals", "name": "Ring of Immortals",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["Ring of Immortals"], "iconName": "RingofImmortals",
"iconName" :"RingofImmortals" "effect": {
} "startBattleWithCard": [
, "Ring of Immortals"
]
}
},
{ {
"name": "Prism Ring", "name": "Prism Ring",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["Prism Ring"], "iconName": "PrismRing",
"iconName" :"PrismRing" "effect": {
} "startBattleWithCard": [
, "Prism Ring"
]
}
},
{ {
"name": "Ring of Renewal", "name": "Ring of Renewal",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["Ring of Renewal"], "iconName": "RingofRenewal",
"iconName" :"RingofRenewal" "effect": {
} "startBattleWithCard": [
, "Ring of Renewal"
]
}
},
{ {
"name": "Kite Shield", "name": "Kite Shield",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"startBattleWithCard" : ["Kite Shield"], "iconName": "KiteShield",
"iconName" :"KiteShield" "effect": {
"startBattleWithCard": [
"Kite Shield"
]
}
} }
] ]

View File

@@ -1685,6 +1685,14 @@
"sprite": "CatLair", "sprite": "CatLair",
"map": "maps/map/catlair_3.tmx" "map": "maps/map/catlair_3.tmx"
}, },
{
"name": "DEBUGZONE",
"count": 0,
"radiusFactor": 5.0,
"spriteAtlas": "maps/tileset/buildings.atlas",
"sprite": "WurmPond",
"map": "maps/map/debug_map.tmx"
},
{ {
"name": "WurmPond", "name": "WurmPond",
"count": 2, "count": 2,

View File

@@ -0,0 +1,9 @@
Name:Wiretapping
ManaCost:4 U
Types:Enchantment
K:Hideaway:5
T:Mode$ Drawn | ValidCard$ Card.YouOwn | FirstCardInDrawStep$ True | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever you draw your first card during each of your draw steps, draw a card. Then if you have nine or more cards in hand, you may play the exiled card without paying its mana cost.
SVar:TrigDraw:DB$ Draw | SubAbility$ DBPlay
SVar:DBPlay:DB$ Play | ConditionPresent$ Card.IsRemembered | ConditionZone$ Exile | ConditionCheckSVar$ X | ConditionSVarCompare$ GE9 | Defined$ Remembered | Amount$ All | Controller$ You | WithoutManaCost$ True | Optional$ True
SVar:X:Count$InYourHand
Oracle:Hideaway 5 (When this enchantment enters the battlefield, look at the top five cards of your library, exile one face down, then put the rest on the bottom in a random order.)\nWhenever you draw your first card during each of your draw steps, draw a card. Then if you have nine or more cards in hand, you may play the exiled card without paying its mana cost.

View File

@@ -3,8 +3,8 @@ ManaCost:2 G U R
Types:Legendary Creature Snake Leviathan Types:Legendary Creature Snake Leviathan
PT:3/5 PT:3/5
K:Flying K:Flying
T:Mode$ Drawn | ValidCard$ Card.OppOwn | NotFirstCardInDrawStep$ True | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever an opponent draws a card except the first one they draw in each of their draw steps, create a 1/1 green Snake creature token. T:Mode$ Drawn | ValidCard$ Card.OppOwn | FirstCardInDrawStep$ False | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever an opponent draws a card except the first one they draw in each of their draw steps, create a 1/1 green Snake creature token.
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ g_1_1_snake | TokenOwner$ You SVar:TrigToken:DB$ Token | TokenScript$ g_1_1_snake
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you and that player each draw that many cards. T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you and that player each draw that many cards.
SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ X | SubAbility$ DBDraw SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ X | SubAbility$ DBDraw
SVar:DBDraw:DB$ Draw | Defined$ TriggeredTarget | NumCards$ X SVar:DBDraw:DB$ Draw | Defined$ TriggeredTarget | NumCards$ X

View File

@@ -1851,7 +1851,7 @@ lblChooseASpecificCard=Wähle einen {0} Kartenname.
lblPlayerPickedChosen={0} wählt {1} lblPlayerPickedChosen={0} wählt {1}
#ChooseColorEffect.java #ChooseColorEffect.java
lblChooseAColor=Wähle eine Farbe lblChooseAColor=Wähle eine Farbe
lblChooseNColors=Wähle {0} Farbe(n) lblChooseNColors=Wähle {0} Farbe(n) (Klicken dann CTRL/CMD + klicken)
lblAtLastChooseNumColors=Wähle {0} oder mehr Farbe(n) lblAtLastChooseNumColors=Wähle {0} oder mehr Farbe(n)
lblChooseSpecifiedRangeColors=Wähle {0} bis {1} Farbe(n) lblChooseSpecifiedRangeColors=Wähle {0} bis {1} Farbe(n)
#ChooseDirectionEffect.java #ChooseDirectionEffect.java

View File

@@ -1852,7 +1852,7 @@ lblChooseASpecificCard=Choose a {0} card name.
lblPlayerPickedChosen={0} picked {1} lblPlayerPickedChosen={0} picked {1}
#ChooseColorEffect.java #ChooseColorEffect.java
lblChooseAColor=Choose a color lblChooseAColor=Choose a color
lblChooseNColors=Choose {0} color lblChooseNColors=Choose {0} colors (click, then CTRL/CMD + click)
lblAtLastChooseNumColors=Choose {0} or more color lblAtLastChooseNumColors=Choose {0} or more color
lblChooseSpecifiedRangeColors=Choose {0} to {1} color lblChooseSpecifiedRangeColors=Choose {0} to {1} color
#ChooseDirectionEffect.java #ChooseDirectionEffect.java

View File

@@ -1850,7 +1850,7 @@ lblChooseASpecificCard=Elige un nombre de carta {0}.
lblPlayerPickedChosen={0} escogió {1} lblPlayerPickedChosen={0} escogió {1}
#ChooseColorEffect.java #ChooseColorEffect.java
lblChooseAColor=Elige un color lblChooseAColor=Elige un color
lblChooseNColors=Elige {0} colores lblChooseNColors=Elige {0} colores (Clic entonces CTRL/CMD + clic)
lblAtLastChooseNumColors=Elige {0} o más colores lblAtLastChooseNumColors=Elige {0} o más colores
lblChooseSpecifiedRangeColors=Elige entre {0} y {1} colores lblChooseSpecifiedRangeColors=Elige entre {0} y {1} colores
#ChooseDirectionEffect.java #ChooseDirectionEffect.java

View File

@@ -1849,7 +1849,7 @@ lblChooseASpecificCard=Scegli il nome di una carta {0}.
lblPlayerPickedChosen={0} ha scelto {1} lblPlayerPickedChosen={0} ha scelto {1}
#ChooseColorEffect.java #ChooseColorEffect.java
lblChooseAColor=Scegli un colore lblChooseAColor=Scegli un colore
lblChooseNColors=Scegli {0} colori lblChooseNColors=Scegli {0} colori (cliccare, quindi CTRL/CMD + clic)
lblAtLastChooseNumColors=Scegli {0} o più colori lblAtLastChooseNumColors=Scegli {0} o più colori
lblChooseSpecifiedRangeColors=Scegli da {0} a {1} colori lblChooseSpecifiedRangeColors=Scegli da {0} a {1} colori
#ChooseDirectionEffect.java #ChooseDirectionEffect.java

View File

@@ -1849,7 +1849,7 @@ lblChooseASpecificCard={0}カード名 1つを選ぶ
lblPlayerPickedChosen={0}が {1}を選択した lblPlayerPickedChosen={0}が {1}を選択した
#ChooseColorEffect.java #ChooseColorEffect.java
lblChooseAColor=色 1色を選ぶ lblChooseAColor=色 1色を選ぶ
lblChooseNColors=色 {0}色を選ぶ lblChooseNColors=色 {0}色を選ぶ クリックしてからCtrl / CMD +クリック)
lblAtLastChooseNumColors=色 {0}色以上を選ぶ lblAtLastChooseNumColors=色 {0}色以上を選ぶ
lblChooseSpecifiedRangeColors=色 {0}{1}色を選ぶ lblChooseSpecifiedRangeColors=色 {0}{1}色を選ぶ
#ChooseDirectionEffect.java #ChooseDirectionEffect.java

View File

@@ -1911,7 +1911,7 @@ lblChooseASpecificCard=Escolha o nome da carta {0}.
lblPlayerPickedChosen={0} escolheu {1} lblPlayerPickedChosen={0} escolheu {1}
#ChooseColorEffect.java #ChooseColorEffect.java
lblChooseAColor=Escolha uma cor lblChooseAColor=Escolha uma cor
lblChooseNColors=Escolha {0} cor lblChooseNColors=Escolha {0} cores (clique então CTRL/CMD + clique)
lblAtLastChooseNumColors=Escolha {0} ou mais cores lblAtLastChooseNumColors=Escolha {0} ou mais cores
lblChooseSpecifiedRangeColors=Escolha {0} a {1} cor lblChooseSpecifiedRangeColors=Escolha {0} a {1} cor
#ChooseDirectionEffect.java #ChooseDirectionEffect.java

View File

@@ -1853,7 +1853,7 @@ lblChooseASpecificCard=选择一个{0}牌名
lblPlayerPickedChosen={0}选取了{1} lblPlayerPickedChosen={0}选取了{1}
#ChooseColorEffect.java #ChooseColorEffect.java
lblChooseAColor=选择一个颜色 lblChooseAColor=选择一个颜色
lblChooseNColors=选择{0}个颜色 lblChooseNColors=选择{0}个颜色 点击然后ctrl / cmd +点击)
lblAtLastChooseNumColors=选择{0}或更多颜色 lblAtLastChooseNumColors=选择{0}或更多颜色
lblChooseSpecifiedRangeColors=选择{0}到{1}种颜色 lblChooseSpecifiedRangeColors=选择{0}到{1}种颜色
#ChooseDirectionEffect.java #ChooseDirectionEffect.java
@@ -2862,4 +2862,4 @@ lblEdit=编辑
lblWinProper= lblWinProper=
lblLossProper=失利 lblLossProper=失利
lblWinLossRatio=赢得损失比率 lblWinLossRatio=赢得损失比率
lblHeal=愈合 lblHeal=愈合