Merge conflicts
@@ -169,7 +169,6 @@ public class QuestStageEdit extends FormPanel {
|
|||||||
switch(objectiveType.getSelectedItem().toString()){
|
switch(objectiveType.getSelectedItem().toString()){
|
||||||
case "Arena":
|
case "Arena":
|
||||||
arenaLabel.setVisible(true);
|
arenaLabel.setVisible(true);
|
||||||
nyi.setVisible(true);
|
|
||||||
poiPane.setVisible(true);
|
poiPane.setVisible(true);
|
||||||
anyPOI.setVisible(true);
|
anyPOI.setVisible(true);
|
||||||
here.setVisible(true);
|
here.setVisible(true);
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ public class ImmediateTriggerEffect extends SpellAbilityEffect {
|
|||||||
protected String getStackDescription(SpellAbility sa) {
|
protected String getStackDescription(SpellAbility sa) {
|
||||||
if (sa.hasParam("TriggerDescription")) {
|
if (sa.hasParam("TriggerDescription")) {
|
||||||
return sa.getParam("TriggerDescription");
|
return sa.getParam("TriggerDescription");
|
||||||
|
} else if (sa.hasParam("SpellDescription")) {
|
||||||
|
return sa.getParam("SpellDescription");
|
||||||
}
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
|
|||||||
@@ -256,9 +256,10 @@ public class PlayEffect extends SpellAbilityEffect {
|
|||||||
if (sa.hasParam("ShowCardToActivator")) {
|
if (sa.hasParam("ShowCardToActivator")) {
|
||||||
game.getAction().revealTo(tgtCard, controller);
|
game.getAction().revealTo(tgtCard, controller);
|
||||||
}
|
}
|
||||||
|
String prompt = sa.hasParam("CastTransformed") ? "lblDoYouWantPlayCardTransformed" : "lblDoYouWantPlayCard";
|
||||||
if (singleOption && sa.getTargetCard() == null)
|
if (singleOption && sa.getTargetCard() == null)
|
||||||
sa.setPlayEffectCard(tgtCard);// show card to play rather than showing the source card
|
sa.setPlayEffectCard(tgtCard);// show card to play rather than showing the source card
|
||||||
if (singleOption && !controller.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantPlayCard", CardTranslation.getTranslatedName(tgtCard.getName())), null)) {
|
if (singleOption && !controller.getController().confirmAction(sa, null, Localizer.getInstance().getMessage(prompt, CardTranslation.getTranslatedName(tgtCard.getName())), null)) {
|
||||||
if (wasFaceDown) {
|
if (wasFaceDown) {
|
||||||
tgtCard.turnFaceDownNoUpdate();
|
tgtCard.turnFaceDownNoUpdate();
|
||||||
tgtCard.updateStateForView();
|
tgtCard.updateStateForView();
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ public class CardDamageHistory {
|
|||||||
private boolean creatureGotBlockedThisCombat = false;
|
private boolean creatureGotBlockedThisCombat = false;
|
||||||
|
|
||||||
private List<GameEntity> attackedThisTurn = Lists.newArrayList();
|
private List<GameEntity> attackedThisTurn = Lists.newArrayList();
|
||||||
|
private boolean attackedBattleThisTurn = false;
|
||||||
|
|
||||||
private final List<Player> creatureAttackedLastTurnOf = Lists.newArrayList();
|
private final List<Player> creatureAttackedLastTurnOf = Lists.newArrayList();
|
||||||
private final List<Player> NotAttackedSinceLastUpkeepOf = Lists.newArrayList();
|
private final List<Player> NotAttackedSinceLastUpkeepOf = Lists.newArrayList();
|
||||||
@@ -59,6 +60,12 @@ public class CardDamageHistory {
|
|||||||
|
|
||||||
if (defender != null) {
|
if (defender != null) {
|
||||||
attackedThisTurn.add(defender);
|
attackedThisTurn.add(defender);
|
||||||
|
if (defender instanceof Card) {
|
||||||
|
final Card def = (Card) defender;
|
||||||
|
if (def.isBattle()) {
|
||||||
|
attackedBattleThisTurn = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@@ -84,6 +91,9 @@ public class CardDamageHistory {
|
|||||||
public final boolean hasAttackedThisTurn(GameEntity e) {
|
public final boolean hasAttackedThisTurn(GameEntity e) {
|
||||||
return this.attackedThisTurn.contains(e);
|
return this.attackedThisTurn.contains(e);
|
||||||
}
|
}
|
||||||
|
public final boolean hasAttackedBattleThisTurn() {
|
||||||
|
return this.attackedBattleThisTurn;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* Setter for the field <code>creatureAttackedLastTurn</code>.
|
* Setter for the field <code>creatureAttackedLastTurn</code>.
|
||||||
@@ -272,6 +282,7 @@ public class CardDamageHistory {
|
|||||||
|
|
||||||
public void newTurn() {
|
public void newTurn() {
|
||||||
attackedThisTurn.clear();
|
attackedThisTurn.clear();
|
||||||
|
attackedBattleThisTurn = false;
|
||||||
damagedThisCombat.clear();
|
damagedThisCombat.clear();
|
||||||
damageDoneThisTurn.clear();
|
damageDoneThisTurn.clear();
|
||||||
|
|
||||||
|
|||||||
@@ -218,6 +218,14 @@ public class CardProperty {
|
|||||||
|| !sourceController.getOpponents().contains(card.getProtectingPlayer())) {
|
|| !sourceController.getOpponents().contains(card.getProtectingPlayer())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
} else if (property.startsWith("ProtectedBy")) {
|
||||||
|
if (card.getProtectingPlayer() == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
final List<Player> lp = AbilityUtils.getDefinedPlayers(source, property.substring(12), spellAbility);
|
||||||
|
if (!lp.contains(card.getProtectingPlayer())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} else if (property.startsWith("DefendingPlayer")) {
|
} else if (property.startsWith("DefendingPlayer")) {
|
||||||
Player p = property.endsWith("Ctrl") ? controller : card.getOwner();
|
Player p = property.endsWith("Ctrl") ? controller : card.getOwner();
|
||||||
if (!game.getPhaseHandler().inCombat()) {
|
if (!game.getPhaseHandler().inCombat()) {
|
||||||
@@ -1242,6 +1250,10 @@ public class CardProperty {
|
|||||||
if (card.getDamageHistory().getCreatureAttacksThisTurn() == 0) {
|
if (card.getDamageHistory().getCreatureAttacksThisTurn() == 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
} else if (property.startsWith("attackedBattleThisTurn")) {
|
||||||
|
if (!card.getDamageHistory().hasAttackedBattleThisTurn()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} else if (property.startsWith("attackedYouThisTurn")) {
|
} else if (property.startsWith("attackedYouThisTurn")) {
|
||||||
if (!card.getDamageHistory().hasAttackedThisTurn(sourceController)) {
|
if (!card.getDamageHistory().hasAttackedThisTurn(sourceController)) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -61,6 +61,24 @@ public class Mana {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!sourceCard.equals(m2.sourceCard)) {
|
||||||
|
if (addsKeywords(null) != m2.addsKeywords(null)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (addsCounters(null) != m2.addsCounters(null)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (mp.isCannotCounterPaidWith() != mp2.isCannotCounterPaidWith()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (mp.getTriggersWhenSpent() != mp2.getTriggersWhenSpent()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (mp.isPersistentMana() != mp2.isPersistentMana()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return mp == mp2 || (mp.getManaRestrictions().equals(mp2.getManaRestrictions()) && mp.getExtraManaRestriction().equals(mp2.getExtraManaRestriction()));
|
return mp == mp2 || (mp.getManaRestrictions().equals(mp2.getManaRestrictions()) && mp.getExtraManaRestriction().equals(mp2.getExtraManaRestriction()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -226,6 +226,10 @@ public class AbilityManaPart implements java.io.Serializable {
|
|||||||
return source.isValid(cannotCounterSpell, sourceCard.getController(), sourceCard, null);
|
return source.isValid(cannotCounterSpell, sourceCard.getController(), sourceCard, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isCannotCounterPaidWith() {
|
||||||
|
return null != cannotCounterSpell;
|
||||||
|
}
|
||||||
|
|
||||||
public void addNoCounterEffect(SpellAbility saBeingPaid) {
|
public void addNoCounterEffect(SpellAbility saBeingPaid) {
|
||||||
final Game game = sourceCard.getGame();
|
final Game game = sourceCard.getGame();
|
||||||
final Card eff = new Card(game.nextCardId(), game);
|
final Card eff = new Card(game.nextCardId(), game);
|
||||||
|
|||||||
@@ -44,17 +44,29 @@ public class DialogActor extends CharacterSprite {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
dialog.addQuestAcceptedListener(listen);
|
dialog.addQuestAcceptedListener(listen);
|
||||||
|
|
||||||
|
ChangeListener finished = new ChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void changed(ChangeEvent changeEvent, Actor actor) {
|
||||||
|
removeFromMap();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
dialog.addDialogCompleteListener(finished);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void acceptQuest(){
|
public void acceptQuest(){
|
||||||
Current.player().addQuest(questData);
|
Current.player().addQuest(questData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void removeFromMap() { dialog = null; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayerCollide() {
|
public void onPlayerCollide() {
|
||||||
stage.resetPosition();
|
if (dialog != null) {
|
||||||
stage.showDialog();
|
stage.resetPosition();
|
||||||
dialog.activate();
|
stage.showDialog();
|
||||||
|
dialog.activate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import forge.util.MyRandom;
|
|||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -55,7 +54,7 @@ public class EnemySprite extends CharacterSprite {
|
|||||||
public float threatRange = 0.0f;
|
public float threatRange = 0.0f;
|
||||||
public float fleeRange = 0.0f;
|
public float fleeRange = 0.0f;
|
||||||
public boolean ignoreDungeonEffect = false;
|
public boolean ignoreDungeonEffect = false;
|
||||||
public UUID questStageID;
|
public String questStageID;
|
||||||
|
|
||||||
public EnemySprite(EnemyData enemyData) {
|
public EnemySprite(EnemyData enemyData) {
|
||||||
this(0,enemyData);
|
this(0,enemyData);
|
||||||
|
|||||||
@@ -175,6 +175,8 @@ public class AdventureQuestData implements Serializable {
|
|||||||
public void initializeStage(AdventureQuestStage stage){
|
public void initializeStage(AdventureQuestStage stage){
|
||||||
if (stage == null || stage.objective == null) return;
|
if (stage == null || stage.objective == null) return;
|
||||||
|
|
||||||
|
stage.initialize();
|
||||||
|
|
||||||
switch (stage.objective){
|
switch (stage.objective){
|
||||||
case Clear:
|
case Clear:
|
||||||
stage.setTargetPOI(poiTokens);
|
stage.setTargetPOI(poiTokens);
|
||||||
@@ -311,7 +313,7 @@ public class AdventureQuestData implements Serializable {
|
|||||||
EnemyData toUse = generateTargetEnemyData(stage);
|
EnemyData toUse = generateTargetEnemyData(stage);
|
||||||
toUse.lifetime = stage.count1;
|
toUse.lifetime = stage.count1;
|
||||||
EnemySprite toReturn = new EnemySprite(toUse);
|
EnemySprite toReturn = new EnemySprite(toUse);
|
||||||
toReturn.questStageID = stage.questStageID;
|
toReturn.questStageID = stage.stageID.toString();
|
||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@@ -394,6 +396,34 @@ public class AdventureQuestData implements Serializable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateArenaComplete(boolean winner){
|
||||||
|
for (AdventureQuestStage stage: stages) {
|
||||||
|
if(failed)
|
||||||
|
break;
|
||||||
|
stage.updateArenaComplete(winner);
|
||||||
|
failed = failed || stage.getStatus() == AdventureQuestController.QuestStatus.Failed;
|
||||||
|
}
|
||||||
|
if (!failed)
|
||||||
|
updateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateStatus(){
|
||||||
|
for (AdventureQuestStage stage: stages) {
|
||||||
|
switch (stage.getStatus()) {
|
||||||
|
case Complete:
|
||||||
|
continue;
|
||||||
|
case Failed:
|
||||||
|
failed = true;
|
||||||
|
break;
|
||||||
|
case None:
|
||||||
|
case Inactive:
|
||||||
|
case Active:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
completed = true;
|
||||||
|
}
|
||||||
|
|
||||||
public DialogData getPrologue() {
|
public DialogData getPrologue() {
|
||||||
if (!prologueDisplayed) {
|
if (!prologueDisplayed) {
|
||||||
prologueDisplayed = true;
|
prologueDisplayed = true;
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ import java.util.*;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class AdventureQuestStage implements Serializable {
|
public class AdventureQuestStage implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 12042023L;
|
||||||
|
|
||||||
public int id;
|
public int id;
|
||||||
private AdventureQuestController.QuestStatus status = AdventureQuestController.QuestStatus.Inactive;
|
private AdventureQuestController.QuestStatus status = AdventureQuestController.QuestStatus.Inactive;
|
||||||
public String name = "";
|
public String name = "";
|
||||||
@@ -45,7 +48,13 @@ public class AdventureQuestStage implements Serializable {
|
|||||||
public String POIToken; //If defined, ignore tags input and use the target POI from a different stage's objective instead.
|
public String POIToken; //If defined, ignore tags input and use the target POI from a different stage's objective instead.
|
||||||
private transient boolean inTargetLocation = false;
|
private transient boolean inTargetLocation = false;
|
||||||
|
|
||||||
public UUID questStageID = UUID.randomUUID();
|
public UUID stageID;
|
||||||
|
|
||||||
|
public void initialize(){
|
||||||
|
if (stageID == null){
|
||||||
|
stageID = UUID.randomUUID();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void checkPrerequisites() {
|
public void checkPrerequisites() {
|
||||||
//Todo - implement
|
//Todo - implement
|
||||||
@@ -287,7 +296,20 @@ public class AdventureQuestStage implements Serializable {
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AdventureQuestStage(){}
|
public void updateArenaComplete(boolean winner){
|
||||||
|
if (this.objective == AdventureQuestController.ObjectiveTypes.Arena)
|
||||||
|
{
|
||||||
|
if (inTargetLocation){
|
||||||
|
if (winner){
|
||||||
|
status = AdventureQuestController.QuestStatus.Complete;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdventureQuestStage(){
|
||||||
|
|
||||||
|
}
|
||||||
public AdventureQuestStage(AdventureQuestStage other){
|
public AdventureQuestStage(AdventureQuestStage other){
|
||||||
this.status = other.status;
|
this.status = other.status;
|
||||||
this.prologueDisplayed = other.prologueDisplayed;
|
this.prologueDisplayed = other.prologueDisplayed;
|
||||||
@@ -320,6 +342,7 @@ public class AdventureQuestStage implements Serializable {
|
|||||||
this.POITags = other.POITags;
|
this.POITags = other.POITags;
|
||||||
this.targetEnemyData = other.targetEnemyData;
|
this.targetEnemyData = other.targetEnemyData;
|
||||||
this.deliveryItem = other.deliveryItem;
|
this.deliveryItem = other.deliveryItem;
|
||||||
this.questStageID = other.questStageID;
|
// if (this.stageID == null)
|
||||||
|
// this.stageID = other.stageID;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import java.util.*;
|
|||||||
* Class that represents the player (not the player sprite)
|
* Class that represents the player (not the player sprite)
|
||||||
*/
|
*/
|
||||||
public class AdventurePlayer implements Serializable, SaveFileContent {
|
public class AdventurePlayer implements Serializable, SaveFileContent {
|
||||||
public static final int NUMBER_OF_DECKS=10;
|
public static final int NUMBER_OF_DECKS = 10;
|
||||||
// Player profile data.
|
// Player profile data.
|
||||||
private String name;
|
private String name;
|
||||||
private int heroRace;
|
private int heroRace;
|
||||||
@@ -44,53 +44,57 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
// Game data.
|
// Game data.
|
||||||
private float worldPosX;
|
private float worldPosX;
|
||||||
private float worldPosY;
|
private float worldPosY;
|
||||||
private int gold = 0;
|
private int gold = 0;
|
||||||
private int maxLife= 20;
|
private int maxLife = 20;
|
||||||
private int life = 20;
|
private int life = 20;
|
||||||
private int shards = 0;
|
private int shards = 0;
|
||||||
private EffectData blessing; //Blessing to apply for next battle.
|
private EffectData blessing; //Blessing to apply for next battle.
|
||||||
private final PlayerStatistic statistic = new PlayerStatistic();
|
private final PlayerStatistic statistic = new PlayerStatistic();
|
||||||
private final Map<String, Byte> questFlags = new HashMap<>();
|
private final Map<String, Byte> questFlags = new HashMap<>();
|
||||||
|
|
||||||
private final Array<String> inventoryItems=new Array<>();
|
private final Array<String> inventoryItems = new Array<>();
|
||||||
private final HashMap<String,String> equippedItems=new HashMap<>();
|
private final HashMap<String, String> equippedItems = new HashMap<>();
|
||||||
private List<AdventureQuestData> quests= new ArrayList<>();
|
private final List<AdventureQuestData> quests = new ArrayList<>();
|
||||||
|
|
||||||
// Fantasy/Chaos mode settings.
|
// Fantasy/Chaos mode settings.
|
||||||
private boolean fantasyMode = false;
|
private boolean fantasyMode = false;
|
||||||
private boolean announceFantasy = false;
|
private boolean announceFantasy = false;
|
||||||
private boolean usingCustomDeck = false;
|
private boolean usingCustomDeck = false;
|
||||||
private boolean announceCustom = false;
|
private boolean announceCustom = false;
|
||||||
|
|
||||||
// Signals
|
// Signals
|
||||||
final SignalList onLifeTotalChangeList = new SignalList();
|
final SignalList onLifeTotalChangeList = new SignalList();
|
||||||
final SignalList onShardsChangeList = new SignalList();
|
final SignalList onShardsChangeList = new SignalList();
|
||||||
final SignalList onGoldChangeList = new SignalList();
|
final SignalList onGoldChangeList = new SignalList();
|
||||||
final SignalList onPlayerChangeList = new SignalList();
|
final SignalList onPlayerChangeList = new SignalList();
|
||||||
final SignalList onEquipmentChange = new SignalList();
|
final SignalList onEquipmentChange = new SignalList();
|
||||||
final SignalList onBlessing = new SignalList();
|
final SignalList onBlessing = new SignalList();
|
||||||
|
|
||||||
public AdventurePlayer() { clear(); }
|
public AdventurePlayer() {
|
||||||
|
clear();
|
||||||
|
}
|
||||||
|
|
||||||
public PlayerStatistic getStatistic(){ return statistic; }
|
public PlayerStatistic getStatistic() {
|
||||||
|
return statistic;
|
||||||
|
}
|
||||||
|
|
||||||
private void clearDecks() {
|
private void clearDecks() {
|
||||||
for(int i=0; i < NUMBER_OF_DECKS; i++) decks[i] = new Deck(Forge.getLocalizer().getMessage("lblEmptyDeck"));
|
for (int i = 0; i < NUMBER_OF_DECKS; i++) decks[i] = new Deck("Empty Deck");
|
||||||
deck = decks[0];
|
deck = decks[0];
|
||||||
selectedDeckIndex = 0;
|
selectedDeckIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clear() {
|
private void clear() {
|
||||||
//Ensure sensitive gameplay data is properly reset between games.
|
//Ensure sensitive gameplay data is properly reset between games.
|
||||||
//Reset all properties HERE.
|
//Reset all properties HERE.
|
||||||
fantasyMode = false;
|
fantasyMode = false;
|
||||||
announceFantasy = false;
|
announceFantasy = false;
|
||||||
usingCustomDeck = false;
|
usingCustomDeck = false;
|
||||||
blessing = null;
|
blessing = null;
|
||||||
gold = 0;
|
gold = 0;
|
||||||
maxLife = 20;
|
maxLife = 20;
|
||||||
life = 20;
|
life = 20;
|
||||||
shards = 0;
|
shards = 0;
|
||||||
clearDecks();
|
clearDecks();
|
||||||
inventoryItems.clear();
|
inventoryItems.clear();
|
||||||
equippedItems.clear();
|
equippedItems.clear();
|
||||||
@@ -106,33 +110,33 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
return WorldSave.getCurrentSave().getPlayer();
|
return WorldSave.getCurrentSave().getPlayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
private final CardPool cards=new CardPool();
|
private final CardPool cards = new CardPool();
|
||||||
private final ItemPool<InventoryItem> newCards=new ItemPool<>(InventoryItem.class);
|
private final ItemPool<InventoryItem> newCards = new ItemPool<>(InventoryItem.class);
|
||||||
|
|
||||||
public void create(String n, Deck startingDeck, boolean male, int race, int avatar, boolean isFantasy, boolean isUsingCustomDeck, DifficultyData difficultyData) {
|
public void create(String n, Deck startingDeck, boolean male, int race, int avatar, boolean isFantasy, boolean isUsingCustomDeck, DifficultyData difficultyData) {
|
||||||
clear();
|
clear();
|
||||||
announceFantasy = fantasyMode = isFantasy; //Set Chaos mode first.
|
announceFantasy = fantasyMode = isFantasy; //Set Chaos mode first.
|
||||||
announceCustom = usingCustomDeck = isUsingCustomDeck;
|
announceCustom = usingCustomDeck = isUsingCustomDeck;
|
||||||
|
|
||||||
deck = startingDeck;
|
deck = startingDeck;
|
||||||
decks[0] = deck;
|
decks[0] = deck;
|
||||||
|
|
||||||
cards.addAllFlat(deck.getAllCardsInASinglePool().toFlatList());
|
cards.addAllFlat(deck.getAllCardsInASinglePool().toFlatList());
|
||||||
|
|
||||||
this.difficultyData.startingLife = difficultyData.startingLife;
|
this.difficultyData.startingLife = difficultyData.startingLife;
|
||||||
this.difficultyData.staringMoney = difficultyData.staringMoney;
|
this.difficultyData.staringMoney = difficultyData.staringMoney;
|
||||||
this.difficultyData.startingDifficulty = difficultyData.startingDifficulty;
|
this.difficultyData.startingDifficulty = difficultyData.startingDifficulty;
|
||||||
this.difficultyData.name = difficultyData.name;
|
this.difficultyData.name = difficultyData.name;
|
||||||
this.difficultyData.spawnRank = difficultyData.spawnRank;
|
this.difficultyData.spawnRank = difficultyData.spawnRank;
|
||||||
this.difficultyData.enemyLifeFactor = difficultyData.enemyLifeFactor;
|
this.difficultyData.enemyLifeFactor = difficultyData.enemyLifeFactor;
|
||||||
this.difficultyData.sellFactor = difficultyData.sellFactor;
|
this.difficultyData.sellFactor = difficultyData.sellFactor;
|
||||||
this.difficultyData.shardSellRatio = difficultyData.shardSellRatio;
|
this.difficultyData.shardSellRatio = difficultyData.shardSellRatio;
|
||||||
|
|
||||||
gold = difficultyData.staringMoney;
|
gold = difficultyData.staringMoney;
|
||||||
name = n;
|
name = n;
|
||||||
heroRace = race;
|
heroRace = race;
|
||||||
avatarIndex = avatar;
|
avatarIndex = avatar;
|
||||||
isFemale = !male;
|
isFemale = !male;
|
||||||
|
|
||||||
setColorIdentity(DeckProxy.getColorIdentity(deck));
|
setColorIdentity(DeckProxy.getColorIdentity(deck));
|
||||||
|
|
||||||
@@ -146,12 +150,13 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setSelectedDeckSlot(int slot) {
|
public void setSelectedDeckSlot(int slot) {
|
||||||
if(slot>=0&&slot<NUMBER_OF_DECKS) {
|
if (slot >= 0 && slot < NUMBER_OF_DECKS) {
|
||||||
selectedDeckIndex = slot;
|
selectedDeckIndex = slot;
|
||||||
deck = decks[selectedDeckIndex];
|
deck = decks[selectedDeckIndex];
|
||||||
setColorIdentity(DeckProxy.getColorIdentity(deck));
|
setColorIdentity(DeckProxy.getColorIdentity(deck));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateDifficulty(DifficultyData diff) {
|
public void updateDifficulty(DifficultyData diff) {
|
||||||
maxLife = diff.startingLife;
|
maxLife = diff.startingLife;
|
||||||
this.difficultyData.startingShards = diff.startingShards;
|
this.difficultyData.startingShards = diff.startingShards;
|
||||||
@@ -167,28 +172,71 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Getters
|
//Getters
|
||||||
public int getSelectedDeckIndex() { return selectedDeckIndex; }
|
public int getSelectedDeckIndex() {
|
||||||
public Deck getSelectedDeck() { return deck; }
|
return selectedDeckIndex;
|
||||||
public Array<String> getItems() { return inventoryItems; }
|
}
|
||||||
public Deck getDeck(int index) { return decks[index]; }
|
|
||||||
public CardPool getCards() { return cards; }
|
|
||||||
public String getName() { return name; }
|
|
||||||
public float getWorldPosX() { return worldPosX; }
|
|
||||||
public float getWorldPosY() { return worldPosY; }
|
|
||||||
public int getGold() { return gold; }
|
|
||||||
public int getLife() { return life; }
|
|
||||||
public int getMaxLife() { return maxLife; }
|
|
||||||
public int getShards() { return shards; }
|
|
||||||
public @Null EffectData getBlessing() { return blessing; }
|
|
||||||
|
|
||||||
public Collection<String> getEquippedItems() { return equippedItems.values(); }
|
public Deck getSelectedDeck() {
|
||||||
public ItemPool<InventoryItem> getNewCards() { return newCards; }
|
return deck;
|
||||||
|
}
|
||||||
|
|
||||||
public ColorSet getColorIdentity(){
|
public Array<String> getItems() {
|
||||||
|
return inventoryItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Deck getDeck(int index) {
|
||||||
|
return decks[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
public CardPool getCards() {
|
||||||
|
return cards;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getWorldPosX() {
|
||||||
|
return worldPosX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getWorldPosY() {
|
||||||
|
return worldPosY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getGold() {
|
||||||
|
return gold;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLife() {
|
||||||
|
return life;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMaxLife() {
|
||||||
|
return maxLife;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getShards() {
|
||||||
|
return shards;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Null EffectData getBlessing() {
|
||||||
|
return blessing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<String> getEquippedItems() {
|
||||||
|
return equippedItems.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemPool<InventoryItem> getNewCards() {
|
||||||
|
return newCards;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ColorSet getColorIdentity() {
|
||||||
return colorIdentity;
|
return colorIdentity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getColorIdentityLong(){
|
public String getColorIdentityLong() {
|
||||||
return colorIdentity.toString();
|
return colorIdentity.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,62 +245,61 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
public void setWorldPosX(float worldPosX) {
|
public void setWorldPosX(float worldPosX) {
|
||||||
this.worldPosX = worldPosX;
|
this.worldPosX = worldPosX;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWorldPosY(float worldPosY) {
|
public void setWorldPosY(float worldPosY) {
|
||||||
this.worldPosY = worldPosY;
|
this.worldPosY = worldPosY;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setColorIdentity(String C){
|
public void setColorIdentity(String C) {
|
||||||
colorIdentity= ColorSet.fromNames(C.toCharArray());
|
colorIdentity = ColorSet.fromNames(C.toCharArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setColorIdentity(ColorSet set){
|
public void setColorIdentity(ColorSet set) {
|
||||||
this.colorIdentity = set;
|
this.colorIdentity = set;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load(SaveFileData data) {
|
public void load(SaveFileData data) {
|
||||||
clear(); //Reset player data.
|
clear(); //Reset player data.
|
||||||
this.statistic.load(data.readSubData("statistic"));
|
this.statistic.load(data.readSubData("statistic"));
|
||||||
this.difficultyData.startingLife=data.readInt("startingLife");
|
this.difficultyData.startingLife = data.readInt("startingLife");
|
||||||
this.difficultyData.staringMoney=data.readInt("staringMoney");
|
this.difficultyData.staringMoney = data.readInt("staringMoney");
|
||||||
this.difficultyData.startingDifficulty=data.readBool("startingDifficulty");
|
this.difficultyData.startingDifficulty = data.readBool("startingDifficulty");
|
||||||
this.difficultyData.name=data.readString("difficultyName");
|
this.difficultyData.name = data.readString("difficultyName");
|
||||||
this.difficultyData.enemyLifeFactor=data.readFloat("enemyLifeFactor");
|
this.difficultyData.enemyLifeFactor = data.readFloat("enemyLifeFactor");
|
||||||
this.difficultyData.sellFactor=data.readFloat("sellFactor");
|
this.difficultyData.sellFactor = data.readFloat("sellFactor");
|
||||||
if(this.difficultyData.sellFactor==0)
|
if (this.difficultyData.sellFactor == 0)
|
||||||
this.difficultyData.sellFactor=0.2f;
|
this.difficultyData.sellFactor = 0.2f;
|
||||||
|
|
||||||
this.difficultyData.shardSellRatio=data.readFloat("sellFactor");
|
this.difficultyData.shardSellRatio = data.readFloat("sellFactor");
|
||||||
if(this.difficultyData.shardSellRatio==0)
|
if (this.difficultyData.shardSellRatio == 0)
|
||||||
this.difficultyData.shardSellRatio=0.8f;
|
this.difficultyData.shardSellRatio = 0.8f;
|
||||||
|
|
||||||
name = data.readString("name");
|
name = data.readString("name");
|
||||||
heroRace = data.readInt("heroRace");
|
heroRace = data.readInt("heroRace");
|
||||||
avatarIndex = data.readInt("avatarIndex");
|
avatarIndex = data.readInt("avatarIndex");
|
||||||
isFemale = data.readBool("isFemale");
|
isFemale = data.readBool("isFemale");
|
||||||
if(data.containsKey("colorIdentity"))
|
if (data.containsKey("colorIdentity"))
|
||||||
setColorIdentity(data.readString("colorIdentity"));
|
setColorIdentity(data.readString("colorIdentity"));
|
||||||
else
|
else
|
||||||
colorIdentity = ColorSet.ALL_COLORS;
|
colorIdentity = ColorSet.ALL_COLORS;
|
||||||
|
|
||||||
gold = data.readInt("gold");
|
gold = data.readInt("gold");
|
||||||
maxLife = data.readInt("maxLife");
|
maxLife = data.readInt("maxLife");
|
||||||
life = data.readInt("life");
|
life = data.readInt("life");
|
||||||
shards = data.containsKey("shards")?data.readInt("shards"):0;
|
shards = data.containsKey("shards") ? data.readInt("shards") : 0;
|
||||||
worldPosX = data.readFloat("worldPosX");
|
worldPosX = data.readFloat("worldPosX");
|
||||||
worldPosY = data.readFloat("worldPosY");
|
worldPosY = data.readFloat("worldPosY");
|
||||||
|
|
||||||
if(data.containsKey("blessing")) blessing = (EffectData)data.readObject("blessing");
|
if (data.containsKey("blessing")) blessing = (EffectData) data.readObject("blessing");
|
||||||
|
|
||||||
if(data.containsKey("inventory")) {
|
if (data.containsKey("inventory")) {
|
||||||
String[] inv=(String[])data.readObject("inventory");
|
String[] inv = (String[]) data.readObject("inventory");
|
||||||
//Prevent items with wrong names from getting through. Hell breaks loose if it causes null pointers.
|
//Prevent items with wrong names from getting through. Hell breaks loose if it causes null pointers.
|
||||||
//This only needs to be done on load.
|
//This only needs to be done on load.
|
||||||
for(String i : inv){
|
for (String i : inv) {
|
||||||
if(ItemData.getItem(i) != null) inventoryItems.add(i);
|
if (ItemData.getItem(i) != null) inventoryItems.add(i);
|
||||||
else {
|
else {
|
||||||
System.err.printf("Cannot find item name %s\n", i);
|
System.err.printf("Cannot find item name %s\n", i);
|
||||||
//Allow official© permission for the player to get a refund. We will allow it this time.
|
//Allow official© permission for the player to get a refund. We will allow it this time.
|
||||||
@@ -261,15 +308,15 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(data.containsKey("equippedSlots") && data.containsKey("equippedItems")) {
|
if (data.containsKey("equippedSlots") && data.containsKey("equippedItems")) {
|
||||||
String[] slots=(String[])data.readObject("equippedSlots");
|
String[] slots = (String[]) data.readObject("equippedSlots");
|
||||||
String[] items=(String[])data.readObject("equippedItems");
|
String[] items = (String[]) data.readObject("equippedItems");
|
||||||
|
|
||||||
assert(slots.length==items.length);
|
assert (slots.length == items.length);
|
||||||
//Like above, prevent items with wrong names. If it triggered in inventory it'll trigger here as well.
|
//Like above, prevent items with wrong names. If it triggered in inventory it'll trigger here as well.
|
||||||
for(int i=0;i<slots.length;i++) {
|
for (int i = 0; i < slots.length; i++) {
|
||||||
if(ItemData.getItem(items[i]) != null)
|
if (ItemData.getItem(items[i]) != null)
|
||||||
equippedItems.put(slots[i],items[i]);
|
equippedItems.put(slots[i], items[i]);
|
||||||
else {
|
else {
|
||||||
System.err.printf("Cannot find equip name %s\n", items[i]);
|
System.err.printf("Cannot find equip name %s\n", items[i]);
|
||||||
}
|
}
|
||||||
@@ -277,19 +324,19 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
deck = new Deck(data.readString("deckName"));
|
deck = new Deck(data.readString("deckName"));
|
||||||
deck.getMain().addAll(CardPool.fromCardList(Lists.newArrayList((String[])data.readObject("deckCards"))));
|
deck.getMain().addAll(CardPool.fromCardList(Lists.newArrayList((String[]) data.readObject("deckCards"))));
|
||||||
if(data.containsKey("sideBoardCards"))
|
if (data.containsKey("sideBoardCards"))
|
||||||
deck.getOrCreate(DeckSection.Sideboard).addAll(CardPool.fromCardList(Lists.newArrayList((String[])data.readObject("sideBoardCards"))));
|
deck.getOrCreate(DeckSection.Sideboard).addAll(CardPool.fromCardList(Lists.newArrayList((String[]) data.readObject("sideBoardCards"))));
|
||||||
|
|
||||||
if(data.containsKey("questFlagsKey") && data.containsKey("questFlagsValue")){
|
if (data.containsKey("questFlagsKey") && data.containsKey("questFlagsValue")) {
|
||||||
String[] keys = (String[]) data.readObject("questFlagsKey");
|
String[] keys = (String[]) data.readObject("questFlagsKey");
|
||||||
Byte[] values = (Byte[]) data.readObject("questFlagsValue");
|
Byte[] values = (Byte[]) data.readObject("questFlagsValue");
|
||||||
assert( keys.length == values.length );
|
assert (keys.length == values.length);
|
||||||
for( int i = 0; i < keys.length; i++){
|
for (int i = 0; i < keys.length; i++) {
|
||||||
questFlags.put(keys[i], values[i]);
|
questFlags.put(keys[i], values[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(data.containsKey("quests")){
|
if (data.containsKey("quests")) {
|
||||||
quests.clear();
|
quests.clear();
|
||||||
Object[] q = (Object[]) data.readObject("quests");
|
Object[] q = (Object[]) data.readObject("quests");
|
||||||
if (q != null) {
|
if (q != null) {
|
||||||
@@ -298,24 +345,24 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i=0;i<NUMBER_OF_DECKS;i++) {
|
for (int i = 0; i < NUMBER_OF_DECKS; i++) {
|
||||||
if(!data.containsKey("deck_name_" + i)) {
|
if (!data.containsKey("deck_name_" + i)) {
|
||||||
if(i==0) decks[i] = deck;
|
if (i == 0) decks[i] = deck;
|
||||||
else decks[i] = new Deck(Forge.getLocalizer().getMessage("lblEmptyDeck"));
|
else decks[i] = new Deck("Empty Deck");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
decks[i] = new Deck(data.readString("deck_name_"+i));
|
decks[i] = new Deck(data.readString("deck_name_" + i));
|
||||||
decks[i].getMain().addAll(CardPool.fromCardList(Lists.newArrayList((String[])data.readObject("deck_"+i))));
|
decks[i].getMain().addAll(CardPool.fromCardList(Lists.newArrayList((String[]) data.readObject("deck_" + i))));
|
||||||
if(data.containsKey("sideBoardCards_"+i))
|
if (data.containsKey("sideBoardCards_" + i))
|
||||||
decks[i].getOrCreate(DeckSection.Sideboard).addAll(CardPool.fromCardList(Lists.newArrayList((String[])data.readObject("sideBoardCards_"+i))));
|
decks[i].getOrCreate(DeckSection.Sideboard).addAll(CardPool.fromCardList(Lists.newArrayList((String[]) data.readObject("sideBoardCards_" + i))));
|
||||||
}
|
}
|
||||||
setSelectedDeckSlot(data.readInt("selectedDeckIndex"));
|
setSelectedDeckSlot(data.readInt("selectedDeckIndex"));
|
||||||
cards.addAll(CardPool.fromCardList(Lists.newArrayList((String[])data.readObject("cards"))));
|
cards.addAll(CardPool.fromCardList(Lists.newArrayList((String[]) data.readObject("cards"))));
|
||||||
|
|
||||||
fantasyMode = data.containsKey("fantasyMode") ? data.readBool("fantasyMode") : false;
|
fantasyMode = data.containsKey("fantasyMode") && data.readBool("fantasyMode");
|
||||||
announceFantasy = data.containsKey("announceFantasy") ? data.readBool("announceFantasy") : false;
|
announceFantasy = data.containsKey("announceFantasy") && data.readBool("announceFantasy");
|
||||||
usingCustomDeck = data.containsKey("usingCustomDeck") ? data.readBool("usingCustomDeck") : false;
|
usingCustomDeck = data.containsKey("usingCustomDeck") && data.readBool("usingCustomDeck");
|
||||||
announceCustom = data.containsKey("announceCustom") ? data.readBool("announceCustom") : false;
|
announceCustom = data.containsKey("announceCustom") && data.readBool("announceCustom");
|
||||||
|
|
||||||
onLifeTotalChangeList.emit();
|
onLifeTotalChangeList.emit();
|
||||||
onShardsChangeList.emit();
|
onShardsChangeList.emit();
|
||||||
@@ -325,53 +372,53 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SaveFileData save() {
|
public SaveFileData save() {
|
||||||
SaveFileData data= new SaveFileData();
|
SaveFileData data = new SaveFileData();
|
||||||
|
|
||||||
data.store("statistic",this.statistic.save());
|
data.store("statistic", this.statistic.save());
|
||||||
data.store("startingLife",this.difficultyData.startingLife);
|
data.store("startingLife", this.difficultyData.startingLife);
|
||||||
data.store("staringMoney",this.difficultyData.staringMoney);
|
data.store("staringMoney", this.difficultyData.staringMoney);
|
||||||
data.store("startingDifficulty",this.difficultyData.startingDifficulty);
|
data.store("startingDifficulty", this.difficultyData.startingDifficulty);
|
||||||
data.store("difficultyName",this.difficultyData.name);
|
data.store("difficultyName", this.difficultyData.name);
|
||||||
data.store("enemyLifeFactor",this.difficultyData.enemyLifeFactor);
|
data.store("enemyLifeFactor", this.difficultyData.enemyLifeFactor);
|
||||||
data.store("sellFactor",this.difficultyData.sellFactor);
|
data.store("sellFactor", this.difficultyData.sellFactor);
|
||||||
data.store("shardSellRatio", this.difficultyData.shardSellRatio);
|
data.store("shardSellRatio", this.difficultyData.shardSellRatio);
|
||||||
|
|
||||||
data.store("name",name);
|
data.store("name", name);
|
||||||
data.store("heroRace",heroRace);
|
data.store("heroRace", heroRace);
|
||||||
data.store("avatarIndex",avatarIndex);
|
data.store("avatarIndex", avatarIndex);
|
||||||
data.store("isFemale",isFemale);
|
data.store("isFemale", isFemale);
|
||||||
data.store("colorIdentity", colorIdentity.getColor());
|
data.store("colorIdentity", colorIdentity.getColor());
|
||||||
|
|
||||||
data.store("fantasyMode",fantasyMode);
|
data.store("fantasyMode", fantasyMode);
|
||||||
data.store("announceFantasy",announceFantasy);
|
data.store("announceFantasy", announceFantasy);
|
||||||
data.store("usingCustomDeck", usingCustomDeck);
|
data.store("usingCustomDeck", usingCustomDeck);
|
||||||
data.store("announceCustom", announceCustom);
|
data.store("announceCustom", announceCustom);
|
||||||
|
|
||||||
data.store("worldPosX",worldPosX);
|
data.store("worldPosX", worldPosX);
|
||||||
data.store("worldPosY",worldPosY);
|
data.store("worldPosY", worldPosY);
|
||||||
data.store("gold",gold);
|
data.store("gold", gold);
|
||||||
data.store("life",life);
|
data.store("life", life);
|
||||||
data.store("maxLife",maxLife);
|
data.store("maxLife", maxLife);
|
||||||
data.store("shards",shards);
|
data.store("shards", shards);
|
||||||
data.store("deckName",deck.getName());
|
data.store("deckName", deck.getName());
|
||||||
|
|
||||||
data.storeObject("inventory",inventoryItems.toArray(String.class));
|
data.storeObject("inventory", inventoryItems.toArray(String.class));
|
||||||
|
|
||||||
ArrayList<String> slots=new ArrayList<>();
|
ArrayList<String> slots = new ArrayList<>();
|
||||||
ArrayList<String> items=new ArrayList<>();
|
ArrayList<String> items = new ArrayList<>();
|
||||||
for (Map.Entry<String,String> entry : equippedItems.entrySet()) {
|
for (Map.Entry<String, String> entry : equippedItems.entrySet()) {
|
||||||
slots.add(entry.getKey());
|
slots.add(entry.getKey());
|
||||||
items.add(entry.getValue());
|
items.add(entry.getValue());
|
||||||
}
|
}
|
||||||
data.storeObject("equippedSlots",slots.toArray(new String[0]));
|
data.storeObject("equippedSlots", slots.toArray(new String[0]));
|
||||||
data.storeObject("equippedItems",items.toArray(new String[0]));
|
data.storeObject("equippedItems", items.toArray(new String[0]));
|
||||||
|
|
||||||
data.storeObject("blessing", blessing);
|
data.storeObject("blessing", blessing);
|
||||||
|
|
||||||
//Save quest flags.
|
//Save quest flags.
|
||||||
ArrayList<String> questFlagsKey = new ArrayList<>();
|
ArrayList<String> questFlagsKey = new ArrayList<>();
|
||||||
ArrayList<Byte> questFlagsValue = new ArrayList<>();
|
ArrayList<Byte> questFlagsValue = new ArrayList<>();
|
||||||
for(Map.Entry<String, Byte> entry : questFlags.entrySet()){
|
for (Map.Entry<String, Byte> entry : questFlags.entrySet()) {
|
||||||
questFlagsKey.add(entry.getKey());
|
questFlagsKey.add(entry.getKey());
|
||||||
questFlagsValue.add(entry.getValue());
|
questFlagsValue.add(entry.getValue());
|
||||||
}
|
}
|
||||||
@@ -379,17 +426,17 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
data.storeObject("questFlagsValue", questFlagsValue.toArray(new Byte[0]));
|
data.storeObject("questFlagsValue", questFlagsValue.toArray(new Byte[0]));
|
||||||
data.storeObject("quests", quests.toArray());
|
data.storeObject("quests", quests.toArray());
|
||||||
|
|
||||||
data.storeObject("deckCards",deck.getMain().toCardList("\n").split("\n"));
|
data.storeObject("deckCards", deck.getMain().toCardList("\n").split("\n"));
|
||||||
if(deck.get(DeckSection.Sideboard)!=null)
|
if (deck.get(DeckSection.Sideboard) != null)
|
||||||
data.storeObject("sideBoardCards",deck.get(DeckSection.Sideboard).toCardList("\n").split("\n"));
|
data.storeObject("sideBoardCards", deck.get(DeckSection.Sideboard).toCardList("\n").split("\n"));
|
||||||
for(int i=0;i<NUMBER_OF_DECKS;i++) {
|
for (int i = 0; i < NUMBER_OF_DECKS; i++) {
|
||||||
data.store("deck_name_"+i,decks[i].getName());
|
data.store("deck_name_" + i, decks[i].getName());
|
||||||
data.storeObject("deck_"+i,decks[i].getMain().toCardList("\n").split("\n"));
|
data.storeObject("deck_" + i, decks[i].getMain().toCardList("\n").split("\n"));
|
||||||
if(decks[i].get(DeckSection.Sideboard)!=null)
|
if (decks[i].get(DeckSection.Sideboard) != null)
|
||||||
data.storeObject("sideBoardCards_"+i,decks[i].get(DeckSection.Sideboard).toCardList("\n").split("\n"));
|
data.storeObject("sideBoardCards_" + i, decks[i].get(DeckSection.Sideboard).toCardList("\n").split("\n"));
|
||||||
}
|
}
|
||||||
data.store("selectedDeckIndex",selectedDeckIndex);
|
data.store("selectedDeckIndex", selectedDeckIndex);
|
||||||
data.storeObject("cards",cards.toCardList("\n").split("\n"));
|
data.storeObject("cards", cards.toCardList("\n").split("\n"));
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
@@ -421,7 +468,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
addGold(reward.getCount());
|
addGold(reward.getCount());
|
||||||
break;
|
break;
|
||||||
case Item:
|
case Item:
|
||||||
if(reward.getItem()!=null)
|
if (reward.getItem() != null)
|
||||||
inventoryItems.add(reward.getItem().name);
|
inventoryItems.add(reward.getItem().name);
|
||||||
break;
|
break;
|
||||||
case Life:
|
case Life:
|
||||||
@@ -434,29 +481,31 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void addGold(int goldCount) {
|
private void addGold(int goldCount) {
|
||||||
gold+=goldCount;
|
gold += goldCount;
|
||||||
onGoldChangeList.emit();
|
onGoldChangeList.emit();
|
||||||
}
|
}
|
||||||
public void onShardsChange(Runnable o) {
|
|
||||||
|
public void onShardsChange(Runnable o) {
|
||||||
onShardsChangeList.add(o);
|
onShardsChangeList.add(o);
|
||||||
o.run();
|
o.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onLifeChange(Runnable o) {
|
public void onLifeChange(Runnable o) {
|
||||||
onLifeTotalChangeList.add(o);
|
onLifeTotalChangeList.add(o);
|
||||||
o.run();
|
o.run();
|
||||||
}
|
}
|
||||||
public void onPlayerChanged(Runnable o) {
|
|
||||||
|
public void onPlayerChanged(Runnable o) {
|
||||||
onPlayerChangeList.add(o);
|
onPlayerChangeList.add(o);
|
||||||
o.run();
|
o.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onEquipmentChanged(Runnable o) {
|
public void onEquipmentChanged(Runnable o) {
|
||||||
onEquipmentChange.add(o);
|
onEquipmentChange.add(o);
|
||||||
o.run();
|
o.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onGoldChange(Runnable o) {
|
public void onGoldChange(Runnable o) {
|
||||||
onGoldChangeList.add(o);
|
onGoldChangeList.add(o);
|
||||||
o.run();
|
o.run();
|
||||||
}
|
}
|
||||||
@@ -490,46 +539,55 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int falseLifeCost() {
|
public int falseLifeCost() {
|
||||||
int ret = 200 + (int)(50 * getStatistic().winLossRatio());
|
int ret = 200 + (int) (50 * getStatistic().winLossRatio());
|
||||||
return ret < 0?250:ret;
|
return ret < 0 ? 250 : ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void heal(int amount) {
|
public void heal(int amount) {
|
||||||
life = Math.min(life + amount, maxLife);
|
life = Math.min(life + amount, maxLife);
|
||||||
onLifeTotalChangeList.emit();
|
onLifeTotalChangeList.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void heal(float percent) {
|
public void heal(float percent) {
|
||||||
life = Math.min(life + (int)(maxLife*percent), maxLife);
|
life = Math.min(life + (int) (maxLife * percent), maxLife);
|
||||||
onLifeTotalChangeList.emit();
|
onLifeTotalChangeList.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean defeated() {
|
public boolean defeated() {
|
||||||
gold= (int) (gold-(gold*difficultyData.goldLoss));
|
gold = (int) (gold - (gold * difficultyData.goldLoss));
|
||||||
int newLife=(int)(life-(maxLife*difficultyData.lifeLoss));
|
int newLife = (int) (life - (maxLife * difficultyData.lifeLoss));
|
||||||
life=Math.max(1,newLife);
|
life = Math.max(1, newLife);
|
||||||
onLifeTotalChangeList.emit();
|
onLifeTotalChangeList.emit();
|
||||||
onGoldChangeList.emit();
|
onGoldChangeList.emit();
|
||||||
return newLife < 1;
|
return newLife < 1;
|
||||||
//If true, the player would have had 0 or less, and thus is actually "defeated" if the caller cares about it
|
//If true, the player would have had 0 or less, and thus is actually "defeated" if the caller cares about it
|
||||||
}
|
}
|
||||||
|
|
||||||
public void win() {
|
public void win() {
|
||||||
Current.player().addShards(1);
|
Current.player().addShards(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addMaxLife(int count) {
|
public void addMaxLife(int count) {
|
||||||
maxLife += count;
|
maxLife += count;
|
||||||
life += count;
|
life += count;
|
||||||
onLifeTotalChangeList.emit();
|
onLifeTotalChangeList.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void giveGold(int price) {
|
public void giveGold(int price) {
|
||||||
takeGold(-price);
|
takeGold(-price);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void takeGold(int price) {
|
public void takeGold(int price) {
|
||||||
gold -= price;
|
gold -= price;
|
||||||
onGoldChangeList.emit();
|
onGoldChangeList.emit();
|
||||||
//play sfx
|
//play sfx
|
||||||
SoundSystem.instance.play(SoundEffectType.CoinsDrop, false);
|
SoundSystem.instance.play(SoundEffectType.CoinsDrop, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addShards(int number) {
|
public void addShards(int number) {
|
||||||
takeShards(-number);
|
takeShards(-number);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void takeShards(int number) {
|
public void takeShards(int number) {
|
||||||
shards -= number;
|
shards -= number;
|
||||||
onShardsChangeList.emit();
|
onShardsChangeList.emit();
|
||||||
@@ -542,7 +600,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
onShardsChangeList.emit();
|
onShardsChangeList.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addBlessing(EffectData bless){
|
public void addBlessing(EffectData bless) {
|
||||||
blessing = bless;
|
blessing = bless;
|
||||||
onBlessing.emit();
|
onBlessing.emit();
|
||||||
}
|
}
|
||||||
@@ -552,53 +610,76 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
onBlessing.emit();
|
onBlessing.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasBlessing(String name){ //Checks for a named blessing.
|
public boolean hasBlessing(String name) { //Checks for a named blessing.
|
||||||
//It is not necessary to name all blessings, only the ones you'd want to check for.
|
//It is not necessary to name all blessings, only the ones you'd want to check for.
|
||||||
if(blessing == null) return false;
|
if (blessing == null) return false;
|
||||||
if(blessing.name.equals(name)) return true;
|
return blessing.name.equals(name);
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isFantasyMode(){
|
public boolean isFantasyMode() {
|
||||||
return fantasyMode;
|
return fantasyMode;
|
||||||
}
|
}
|
||||||
public boolean isUsingCustomDeck(){
|
|
||||||
|
public boolean isUsingCustomDeck() {
|
||||||
return usingCustomDeck;
|
return usingCustomDeck;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasAnnounceFantasy(){
|
public boolean hasAnnounceFantasy() {
|
||||||
return announceFantasy;
|
return announceFantasy;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearAnnounceFantasy(){
|
public void clearAnnounceFantasy() {
|
||||||
announceFantasy = false;
|
announceFantasy = false;
|
||||||
}
|
}
|
||||||
public boolean hasAnnounceCustom(){
|
|
||||||
|
public boolean hasAnnounceCustom() {
|
||||||
return announceCustom;
|
return announceCustom;
|
||||||
}
|
}
|
||||||
public void clearAnnounceCustom(){
|
|
||||||
|
public void clearAnnounceCustom() {
|
||||||
announceCustom = false;
|
announceCustom = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasColorView() {
|
public boolean hasColorView() {
|
||||||
for(String name:equippedItems.values()) {
|
for (String name : equippedItems.values()) {
|
||||||
ItemData data=ItemData.getItem(name);
|
ItemData data = ItemData.getItem(name);
|
||||||
if(data != null && data.effect.colorView) return true;
|
if (data != null && data.effect != null && data.effect.colorView) return true;
|
||||||
}
|
}
|
||||||
if(blessing != null) {
|
if (blessing != null) {
|
||||||
if(blessing.colorView) return true;
|
return blessing.colorView;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ItemData getEquippedAbility1() {
|
||||||
|
for (String name : equippedItems.values()) {
|
||||||
|
ItemData data = ItemData.getItem(name);
|
||||||
|
if (data != null && "Ability1".equalsIgnoreCase(data.equipmentSlot)) {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemData getEquippedAbility2() {
|
||||||
|
for (String name : equippedItems.values()) {
|
||||||
|
ItemData data = ItemData.getItem(name);
|
||||||
|
if (data != null && "Ability2".equalsIgnoreCase(data.equipmentSlot)) {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public int bonusDeckCards() {
|
public int bonusDeckCards() {
|
||||||
int result = 0;
|
int result = 0;
|
||||||
for(String name:equippedItems.values()) {
|
for (String name : equippedItems.values()) {
|
||||||
ItemData data=ItemData.getItem(name);
|
ItemData data = ItemData.getItem(name);
|
||||||
if(data != null && data.effect.cardRewardBonus > 0) result += data.effect.cardRewardBonus;
|
if (data != null && data.effect != null && data.effect.cardRewardBonus > 0)
|
||||||
|
result += data.effect.cardRewardBonus;
|
||||||
}
|
}
|
||||||
if(blessing != null) {
|
if (blessing != null) {
|
||||||
if(blessing.cardRewardBonus > 0) result += blessing.cardRewardBonus;
|
if (blessing.cardRewardBonus > 0) result += blessing.cardRewardBonus;
|
||||||
}
|
}
|
||||||
return Math.min(result, 3);
|
return Math.min(result, 3);
|
||||||
}
|
}
|
||||||
@@ -607,50 +688,52 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
return difficultyData;
|
return difficultyData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renameDeck( String text) {
|
public void renameDeck(String text) {
|
||||||
deck = (Deck)deck.copyTo(text);
|
deck = (Deck) deck.copyTo(text);
|
||||||
decks[selectedDeckIndex]=deck;
|
decks[selectedDeckIndex] = deck;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int cardSellPrice(PaperCard card) {
|
public int cardSellPrice(PaperCard card) {
|
||||||
return (int)(CardUtil.getCardPrice(card)*difficultyData.sellFactor);
|
return (int) (CardUtil.getCardPrice(card) * difficultyData.sellFactor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sellCard(PaperCard card, Integer result) {
|
public void sellCard(PaperCard card, Integer result) {
|
||||||
float price = CardUtil.getCardPrice(card) * result;
|
float price = CardUtil.getCardPrice(card) * result;
|
||||||
price *= difficultyData.sellFactor;
|
price *= difficultyData.sellFactor;
|
||||||
cards.remove(card, result);
|
cards.remove(card, result);
|
||||||
addGold((int)price);
|
addGold((int) price);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeItem(String name) {
|
public void removeItem(String name) {
|
||||||
if(name == null || name.equals("")) return;
|
if (name == null || name.equals("")) return;
|
||||||
inventoryItems.removeValue(name,false);
|
inventoryItems.removeValue(name, false);
|
||||||
if(equippedItems.values().contains(name) && !inventoryItems.contains(name,false)) {
|
if (equippedItems.values().contains(name) && !inventoryItems.contains(name, false)) {
|
||||||
equippedItems.values().remove(name);
|
equippedItems.values().remove(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void equip(ItemData item) {
|
public void equip(ItemData item) {
|
||||||
if(equippedItems.get(item.equipmentSlot) != null && equippedItems.get(item.equipmentSlot).equals(item.name)) {
|
if (equippedItems.get(item.equipmentSlot) != null && equippedItems.get(item.equipmentSlot).equals(item.name)) {
|
||||||
equippedItems.remove(item.equipmentSlot);
|
equippedItems.remove(item.equipmentSlot);
|
||||||
} else {
|
} else {
|
||||||
equippedItems.put(item.equipmentSlot,item.name);
|
equippedItems.put(item.equipmentSlot, item.name);
|
||||||
}
|
}
|
||||||
onEquipmentChange.emit();
|
onEquipmentChange.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String itemInSlot(String key) { return equippedItems.get(key); }
|
public String itemInSlot(String key) {
|
||||||
|
return equippedItems.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
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 != null && data.effect.moveSpeed > 0.0) //Avoid negative speeds. It would be silly.
|
if (data != null && data.effect != null && data.effect.moveSpeed > 0.0) //Avoid negative speeds. It would be silly.
|
||||||
factor*=data.effect.moveSpeed;
|
factor *= data.effect.moveSpeed;
|
||||||
}
|
}
|
||||||
if(blessing != null) { //If a blessing gives speed, take it into account.
|
if (blessing != null) { //If a blessing gives speed, take it into account.
|
||||||
if(blessing.moveSpeed > 0.0)
|
if (blessing.moveSpeed > 0.0)
|
||||||
factor *= blessing.moveSpeed;
|
factor *= blessing.moveSpeed;
|
||||||
}
|
}
|
||||||
return factor;
|
return factor;
|
||||||
@@ -658,19 +741,20 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
|
|
||||||
public float goldModifier(boolean sale) {
|
public float goldModifier(boolean sale) {
|
||||||
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 != null && data.effect.goldModifier > 0.0) //Avoid negative modifiers.
|
if (data != null && data.effect != null && data.effect.goldModifier > 0.0) //Avoid negative modifiers.
|
||||||
factor *= data.effect.goldModifier;
|
factor *= data.effect.goldModifier;
|
||||||
}
|
}
|
||||||
if(blessing != null) { //If a blessing gives speed, take it into account.
|
if (blessing != null) { //If a blessing gives speed, take it into account.
|
||||||
if(blessing.goldModifier > 0.0)
|
if (blessing.goldModifier > 0.0)
|
||||||
factor *= blessing.goldModifier;
|
factor *= blessing.goldModifier;
|
||||||
}
|
}
|
||||||
if(sale) return Math.max(1.0f + (1.0f - factor), 2.5f);
|
if (sale) return Math.max(1.0f + (1.0f - factor), 2.5f);
|
||||||
return Math.max(factor, 0.25f);
|
return Math.max(factor, 0.25f);
|
||||||
}
|
}
|
||||||
public float goldModifier(){
|
|
||||||
|
public float goldModifier() {
|
||||||
return goldModifier(false);
|
return goldModifier(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -679,8 +763,8 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean addItem(String name) {
|
public boolean addItem(String name) {
|
||||||
ItemData item=ItemData.getItem(name);
|
ItemData item = ItemData.getItem(name);
|
||||||
if(item==null)
|
if (item == null)
|
||||||
return false;
|
return false;
|
||||||
inventoryItems.add(name);
|
inventoryItems.add(name);
|
||||||
return true;
|
return true;
|
||||||
@@ -688,45 +772,48 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
|
|
||||||
|
|
||||||
// Quest functions.
|
// Quest functions.
|
||||||
public void setQuestFlag(String key, int value){
|
public void setQuestFlag(String key, int value) {
|
||||||
questFlags.put(key, (byte) value);
|
questFlags.put(key, (byte) value);
|
||||||
}
|
}
|
||||||
public void advanceQuestFlag(String key){
|
|
||||||
if(questFlags.get(key) != null){
|
public void advanceQuestFlag(String key) {
|
||||||
|
if (questFlags.get(key) != null) {
|
||||||
questFlags.put(key, (byte) (questFlags.get(key) + 1));
|
questFlags.put(key, (byte) (questFlags.get(key) + 1));
|
||||||
} else {
|
} else {
|
||||||
questFlags.put(key, (byte) 1);
|
questFlags.put(key, (byte) 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public boolean checkQuestFlag(String key){
|
|
||||||
|
public boolean checkQuestFlag(String key) {
|
||||||
return questFlags.get(key) != null;
|
return questFlags.get(key) != null;
|
||||||
}
|
}
|
||||||
public int getQuestFlag(String key){
|
|
||||||
|
public int getQuestFlag(String key) {
|
||||||
return (int) questFlags.getOrDefault(key, (byte) 0);
|
return (int) questFlags.getOrDefault(key, (byte) 0);
|
||||||
}
|
}
|
||||||
public void resetQuestFlags(){
|
|
||||||
|
public void resetQuestFlags() {
|
||||||
questFlags.clear();
|
questFlags.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addQuest(String questID){
|
public void addQuest(String questID) {
|
||||||
int id = Integer.parseInt(questID);
|
int id = Integer.parseInt(questID);
|
||||||
addQuest(id);
|
addQuest(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addQuest(int questID){
|
public void addQuest(int questID) {
|
||||||
AdventureQuestData toAdd = AdventureQuestController.instance().generateQuest(questID);
|
AdventureQuestData toAdd = AdventureQuestController.instance().generateQuest(questID);
|
||||||
|
|
||||||
if (toAdd != null){
|
if (toAdd != null) {
|
||||||
addQuest(toAdd);
|
addQuest(toAdd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addQuest(AdventureQuestData q){
|
public void addQuest(AdventureQuestData q) {
|
||||||
//TODO: add a config flag for this
|
//TODO: add a config flag for this
|
||||||
boolean autoTrack = true;
|
boolean autoTrack = true;
|
||||||
for (AdventureQuestData existing : quests){
|
for (AdventureQuestData existing : quests) {
|
||||||
if (autoTrack && existing.isTracked)
|
if (autoTrack && existing.isTracked) {
|
||||||
{
|
|
||||||
autoTrack = false;
|
autoTrack = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -739,23 +826,21 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
|
|||||||
return quests;
|
return quests;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getEnemyDeckNumber(String enemyName, int maxDecks){
|
public int getEnemyDeckNumber(String enemyName, int maxDecks) {
|
||||||
int deckNumber = 0;
|
int deckNumber = 0;
|
||||||
if (statistic.getWinLossRecord().get(enemyName)!=null)
|
if (statistic.getWinLossRecord().get(enemyName) != null) {
|
||||||
{
|
int playerWins = statistic.getWinLossRecord().get(enemyName).getKey();
|
||||||
int playerWins = statistic.getWinLossRecord().get(enemyName).getKey();
|
int enemyWins = statistic.getWinLossRecord().get(enemyName).getValue();
|
||||||
int enemyWins = statistic.getWinLossRecord().get(enemyName).getValue();
|
if (playerWins > enemyWins) {
|
||||||
if (playerWins > enemyWins){
|
int deckNumberAfterAlgorithmOutput = (int) ((playerWins - enemyWins) * (difficultyData.enemyLifeFactor / 3));
|
||||||
int deckNumberAfterAlgorithmOutput = (int)((playerWins-enemyWins) * (difficultyData.enemyLifeFactor / 3));
|
if (deckNumberAfterAlgorithmOutput < maxDecks) {
|
||||||
if (deckNumberAfterAlgorithmOutput < maxDecks){
|
deckNumber = deckNumberAfterAlgorithmOutput;
|
||||||
deckNumber = deckNumberAfterAlgorithmOutput;
|
} else {
|
||||||
}
|
deckNumber = maxDecks - 1;
|
||||||
else {
|
}
|
||||||
deckNumber = maxDecks-1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
return deckNumber;
|
||||||
return deckNumber;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeQuest(AdventureQuestData quest) {
|
public void removeQuest(AdventureQuestData quest) {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import forge.adventure.data.EnemyData;
|
|||||||
import forge.adventure.data.WorldData;
|
import forge.adventure.data.WorldData;
|
||||||
import forge.adventure.stage.GameHUD;
|
import forge.adventure.stage.GameHUD;
|
||||||
import forge.adventure.stage.IAfterMatch;
|
import forge.adventure.stage.IAfterMatch;
|
||||||
|
import forge.adventure.stage.MapStage;
|
||||||
import forge.adventure.stage.WorldStage;
|
import forge.adventure.stage.WorldStage;
|
||||||
import forge.adventure.util.*;
|
import forge.adventure.util.*;
|
||||||
import forge.gui.FThreads;
|
import forge.gui.FThreads;
|
||||||
@@ -116,6 +117,8 @@ public class ArenaScene extends UIScene implements IAfterMatch {
|
|||||||
doneButton.layout();
|
doneButton.layout();
|
||||||
startButton.setDisabled(true);
|
startButton.setDisabled(true);
|
||||||
arenaStarted = false;
|
arenaStarted = false;
|
||||||
|
AdventureQuestController.instance().updateArenaComplete(false);
|
||||||
|
AdventureQuestController.instance().showQuestDialogs(MapStage.getInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startDialog() {
|
private void startDialog() {
|
||||||
@@ -193,6 +196,8 @@ public class ArenaScene extends UIScene implements IAfterMatch {
|
|||||||
startButton.setDisabled(true);
|
startButton.setDisabled(true);
|
||||||
doneButton.setText("[%80]" + Forge.getLocalizer().getMessage("lblDone"));
|
doneButton.setText("[%80]" + Forge.getLocalizer().getMessage("lblDone"));
|
||||||
doneButton.layout();
|
doneButton.layout();
|
||||||
|
AdventureQuestController.instance().updateArenaComplete(true);
|
||||||
|
AdventureQuestController.instance().showQuestDialogs(MapStage.getInstance());
|
||||||
}
|
}
|
||||||
if (!Forge.isLandscapeMode())
|
if (!Forge.isLandscapeMode())
|
||||||
drawArena();//update
|
drawArena();//update
|
||||||
|
|||||||
@@ -39,11 +39,11 @@ public class InventoryScene extends UIScene {
|
|||||||
public InventoryScene() {
|
public InventoryScene() {
|
||||||
super(Forge.isLandscapeMode() ? "ui/inventory.json" : "ui/inventory_portrait.json");
|
super(Forge.isLandscapeMode() ? "ui/inventory.json" : "ui/inventory_portrait.json");
|
||||||
equipOverlay = Forge.getAssets().getTexture(Config.instance().getFile(Paths.ITEMS_EQUIP));
|
equipOverlay = Forge.getAssets().getTexture(Config.instance().getFile(Paths.ITEMS_EQUIP));
|
||||||
ui.onButtonPress("return", () -> done());
|
ui.onButtonPress("return", this::done);
|
||||||
leave = ui.findActor("return");
|
leave = ui.findActor("return");
|
||||||
ui.onButtonPress("delete", () -> showConfirm());
|
ui.onButtonPress("delete", this::showConfirm);
|
||||||
ui.onButtonPress("equip", () -> equip());
|
ui.onButtonPress("equip", this::equip);
|
||||||
ui.onButtonPress("use", () -> use());
|
ui.onButtonPress("use", this::use);
|
||||||
equipButton = ui.findActor("equip");
|
equipButton = ui.findActor("equip");
|
||||||
useButton = ui.findActor("use");
|
useButton = ui.findActor("use");
|
||||||
useButton.setDisabled(true);
|
useButton.setDisabled(true);
|
||||||
@@ -299,7 +299,6 @@ public class InventoryScene extends UIScene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Button createInventorySlot() {
|
public Button createInventorySlot() {
|
||||||
ImageButton button = new ImageButton(Controls.getSkin(), "item_frame");
|
return new ImageButton(Controls.getSkin(), "item_frame");
|
||||||
return button;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package forge.adventure.scene;
|
package forge.adventure.scene;
|
||||||
|
|
||||||
import com.badlogic.gdx.Input;
|
|
||||||
import com.badlogic.gdx.graphics.Texture;
|
import com.badlogic.gdx.graphics.Texture;
|
||||||
import com.badlogic.gdx.scenes.scene2d.Group;
|
import com.badlogic.gdx.scenes.scene2d.Group;
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
||||||
@@ -32,7 +31,7 @@ public class MapViewScene extends UIScene {
|
|||||||
super(Forge.isLandscapeMode() ? "ui/map.json" : "ui/map_portrait.json");
|
super(Forge.isLandscapeMode() ? "ui/map.json" : "ui/map_portrait.json");
|
||||||
|
|
||||||
|
|
||||||
ui.onButtonPress("done", () -> done());
|
ui.onButtonPress("done", this::done);
|
||||||
|
|
||||||
scroll = ui.findActor("map");
|
scroll = ui.findActor("map");
|
||||||
Group table=new Group();
|
Group table=new Group();
|
||||||
@@ -78,13 +77,4 @@ public class MapViewScene extends UIScene {
|
|||||||
super.enter();
|
super.enter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean keyPressed(int keycode) {
|
|
||||||
if (keycode == Input.Keys.ESCAPE || keycode == Input.Keys.BACK || keycode == Input.Keys.BUTTON_B) {
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,12 +22,12 @@ import com.github.tommyettinger.textra.TextraButton;
|
|||||||
import com.github.tommyettinger.textra.TextraLabel;
|
import com.github.tommyettinger.textra.TextraLabel;
|
||||||
import com.github.tommyettinger.textra.TypingLabel;
|
import com.github.tommyettinger.textra.TypingLabel;
|
||||||
import forge.Forge;
|
import forge.Forge;
|
||||||
|
import forge.adventure.data.ItemData;
|
||||||
import forge.adventure.player.AdventurePlayer;
|
import forge.adventure.player.AdventurePlayer;
|
||||||
import forge.adventure.scene.*;
|
import forge.adventure.scene.*;
|
||||||
import forge.adventure.util.*;
|
import forge.adventure.util.*;
|
||||||
import forge.adventure.world.WorldSave;
|
import forge.adventure.world.WorldSave;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.gui.FThreads;
|
|
||||||
import forge.gui.GuiBase;
|
import forge.gui.GuiBase;
|
||||||
import forge.localinstance.properties.ForgePreferences;
|
import forge.localinstance.properties.ForgePreferences;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
@@ -51,16 +51,15 @@ public class GameHUD extends Stage {
|
|||||||
private final Touchpad touchpad;
|
private final Touchpad touchpad;
|
||||||
private final Console console;
|
private final Console console;
|
||||||
float TOUCHPAD_SCALE = 70f, referenceX;
|
float TOUCHPAD_SCALE = 70f, referenceX;
|
||||||
boolean isHiding = false, isShowing = false;
|
|
||||||
float opacity = 1f;
|
float opacity = 1f;
|
||||||
private boolean debugMap, updatelife;
|
private boolean debugMap, updatelife;
|
||||||
|
|
||||||
private final Dialog dialog;
|
private final Dialog dialog;
|
||||||
private boolean dialogOnlyInput;
|
private boolean dialogOnlyInput;
|
||||||
private final Array<TextraButton> dialogButtonMap = new Array<>();
|
private final Array<TextraButton> dialogButtonMap = new Array<>();
|
||||||
|
private final Array<TextraButton> abilityButtonMap = new Array<>();
|
||||||
private final Array<String> questKeys = new Array<>();
|
private final Array<String> questKeys = new Array<>();
|
||||||
private String lifepointsTextColor = "";
|
private String lifepointsTextColor = "";
|
||||||
private TextraButton selectedKey;
|
|
||||||
private final ScrollPane scrollPane;
|
private final ScrollPane scrollPane;
|
||||||
|
|
||||||
private GameHUD(GameStage gameStage) {
|
private GameHUD(GameStage gameStage) {
|
||||||
@@ -80,7 +79,7 @@ public class GameHUD extends Stage {
|
|||||||
avatarborder = ui.findActor("avatarborder");
|
avatarborder = ui.findActor("avatarborder");
|
||||||
deckActor = ui.findActor("deck");
|
deckActor = ui.findActor("deck");
|
||||||
openMapActor = ui.findActor("openmap");
|
openMapActor = ui.findActor("openmap");
|
||||||
ui.onButtonPress("openmap", () -> GameHUD.this.openMap());
|
ui.onButtonPress("openmap", this::openMap);
|
||||||
menuActor = ui.findActor("menu");
|
menuActor = ui.findActor("menu");
|
||||||
referenceX = menuActor.getX();
|
referenceX = menuActor.getX();
|
||||||
logbookActor = ui.findActor("logbook");
|
logbookActor = ui.findActor("logbook");
|
||||||
@@ -113,11 +112,11 @@ public class GameHUD extends Stage {
|
|||||||
ui.addActor(touchpad);
|
ui.addActor(touchpad);
|
||||||
|
|
||||||
avatar = ui.findActor("avatar");
|
avatar = ui.findActor("avatar");
|
||||||
ui.onButtonPress("menu", () -> menu());
|
ui.onButtonPress("menu", this::menu);
|
||||||
ui.onButtonPress("inventory", () -> openInventory());
|
ui.onButtonPress("inventory", this::openInventory);
|
||||||
ui.onButtonPress("logbook", () -> logbook());
|
ui.onButtonPress("logbook", this::logbook);
|
||||||
ui.onButtonPress("deck", () -> openDeck());
|
ui.onButtonPress("deck", this::openDeck);
|
||||||
ui.onButtonPress("exittoworldmap", () -> exitToWorldMap());
|
ui.onButtonPress("exittoworldmap", this::exitToWorldMap);
|
||||||
lifePoints = ui.findActor("lifePoints");
|
lifePoints = ui.findActor("lifePoints");
|
||||||
shards = ui.findActor("shards");
|
shards = ui.findActor("shards");
|
||||||
money = ui.findActor("money");
|
money = ui.findActor("money");
|
||||||
@@ -131,6 +130,7 @@ public class GameHUD extends Stage {
|
|||||||
addActor(scrollPane);
|
addActor(scrollPane);
|
||||||
AdventurePlayer.current().onLifeChange(() -> lifePoints.setText("[%95][+Life]" + lifepointsTextColor + " " + AdventurePlayer.current().getLife() + "/" + AdventurePlayer.current().getMaxLife()));
|
AdventurePlayer.current().onLifeChange(() -> lifePoints.setText("[%95][+Life]" + lifepointsTextColor + " " + AdventurePlayer.current().getLife() + "/" + AdventurePlayer.current().getMaxLife()));
|
||||||
AdventurePlayer.current().onShardsChange(() -> shards.setText("[%95][+Shards] " + AdventurePlayer.current().getShards()));
|
AdventurePlayer.current().onShardsChange(() -> shards.setText("[%95][+Shards] " + AdventurePlayer.current().getShards()));
|
||||||
|
AdventurePlayer.current().onEquipmentChanged(this::updateAbility);
|
||||||
|
|
||||||
WorldSave.getCurrentSave().getPlayer().onGoldChange(() -> money.setText("[%95][+Gold] " + String.valueOf(AdventurePlayer.current().getGold())));
|
WorldSave.getCurrentSave().getPlayer().onGoldChange(() -> money.setText("[%95][+Gold] " + String.valueOf(AdventurePlayer.current().getGold())));
|
||||||
addActor(ui);
|
addActor(ui);
|
||||||
@@ -144,7 +144,7 @@ public class GameHUD extends Stage {
|
|||||||
avatarborder.addListener(new ConsoleToggleListener());
|
avatarborder.addListener(new ConsoleToggleListener());
|
||||||
gamehud.addListener(new ConsoleToggleListener());
|
gamehud.addListener(new ConsoleToggleListener());
|
||||||
}
|
}
|
||||||
WorldSave.getCurrentSave().onLoad(() -> GameHUD.this.enter());
|
WorldSave.getCurrentSave().onLoad(this::enter);
|
||||||
eventTouchDown = new InputEvent();
|
eventTouchDown = new InputEvent();
|
||||||
eventTouchDown.setPointer(-1);
|
eventTouchDown.setPointer(-1);
|
||||||
eventTouchDown.setType(InputEvent.Type.touchDown);
|
eventTouchDown.setType(InputEvent.Type.touchDown);
|
||||||
@@ -158,6 +158,8 @@ public class GameHUD extends Stage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void logbook() {
|
private void logbook() {
|
||||||
|
if (console.isVisible())
|
||||||
|
console.toggle();
|
||||||
Forge.switchScene(QuestLogScene.instance(Forge.getCurrentScene()));
|
Forge.switchScene(QuestLogScene.instance(Forge.getCurrentScene()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -230,7 +232,6 @@ public class GameHUD extends Stage {
|
|||||||
touchpad.setBounds(touch.x - TOUCHPAD_SCALE / 2, touch.y - TOUCHPAD_SCALE / 2, TOUCHPAD_SCALE, TOUCHPAD_SCALE);
|
touchpad.setBounds(touch.x - TOUCHPAD_SCALE / 2, touch.y - TOUCHPAD_SCALE / 2, TOUCHPAD_SCALE, TOUCHPAD_SCALE);
|
||||||
touchpad.setVisible(true);
|
touchpad.setVisible(true);
|
||||||
touchpad.setResetOnTouchUp(true);
|
touchpad.setResetOnTouchUp(true);
|
||||||
hideButtons();
|
|
||||||
return super.touchDown(screenX, screenY, pointer, button);
|
return super.touchDown(screenX, screenY, pointer, button);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -333,6 +334,41 @@ public class GameHUD extends Stage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void updateAbility() {
|
||||||
|
for (TextraButton button : abilityButtonMap) {
|
||||||
|
button.remove();
|
||||||
|
}
|
||||||
|
abilityButtonMap.clear();
|
||||||
|
setAbilityButton(AdventurePlayer.current().getEquippedAbility1());
|
||||||
|
setAbilityButton(AdventurePlayer.current().getEquippedAbility2());
|
||||||
|
float x = Forge.isLandscapeMode() ? 426f : 216f;
|
||||||
|
float y = 10f;
|
||||||
|
float w = 45f;
|
||||||
|
float h = 35f;
|
||||||
|
for (TextraButton button : abilityButtonMap) {
|
||||||
|
button.getColor().a = opacity;
|
||||||
|
button.setSize(w, h);
|
||||||
|
button.setPosition(x, y);
|
||||||
|
y += h + 10f;
|
||||||
|
addActor(button);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setAbilityButton(ItemData data) {
|
||||||
|
if (data != null) {
|
||||||
|
TextraButton button = Controls.newTextButton("[%120][+" + data.iconName + "][+Shards]" + data.shardsNeeded, () -> {
|
||||||
|
boolean isInPoi = MapStage.getInstance().isInMap();
|
||||||
|
if (!(isInPoi && data.usableInPoi || !isInPoi && data.usableOnWorldMap))
|
||||||
|
return;
|
||||||
|
if (data.shardsNeeded > Current.player().getShards())
|
||||||
|
return;
|
||||||
|
Current.player().addShards(-data.shardsNeeded);
|
||||||
|
ConsoleCommandInterpreter.getInstance().command(data.commandOnUse);
|
||||||
|
});
|
||||||
|
abilityButtonMap.add(button);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Pair<FileHandle, Music> audio = null;
|
private Pair<FileHandle, Music> audio = null;
|
||||||
|
|
||||||
public void playAudio() {
|
public void playAudio() {
|
||||||
@@ -368,12 +404,12 @@ public class GameHUD extends Stage {
|
|||||||
public void act(float delta) {
|
public void act(float delta) {
|
||||||
super.act(delta);
|
super.act(delta);
|
||||||
if (fade < targetfade) {
|
if (fade < targetfade) {
|
||||||
fade += (delta/2);
|
fade += (delta / 2);
|
||||||
if (fade > targetfade)
|
if (fade > targetfade)
|
||||||
fade = targetfade;
|
fade = targetfade;
|
||||||
fadeAudio(fade);
|
fadeAudio(fade);
|
||||||
} else if (fade > targetfade) {
|
} else if (fade > targetfade) {
|
||||||
fade -= (delta/2);
|
fade -= (delta / 2);
|
||||||
if (fade < targetfade)
|
if (fade < targetfade)
|
||||||
fade = targetfade;
|
fade = targetfade;
|
||||||
fadeAudio(fade);
|
fadeAudio(fade);
|
||||||
@@ -436,15 +472,21 @@ public class GameHUD extends Stage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void openDeck() {
|
private void openDeck() {
|
||||||
|
if (console.isVisible())
|
||||||
|
console.toggle();
|
||||||
Forge.switchScene(DeckSelectScene.instance());
|
Forge.switchScene(DeckSelectScene.instance());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openInventory() {
|
private void openInventory() {
|
||||||
|
if (console.isVisible())
|
||||||
|
console.toggle();
|
||||||
WorldSave.getCurrentSave().header.createPreview();
|
WorldSave.getCurrentSave().header.createPreview();
|
||||||
Forge.switchScene(InventoryScene.instance());
|
Forge.switchScene(InventoryScene.instance());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void exitToWorldMap() {
|
private void exitToWorldMap() {
|
||||||
|
if (console.isVisible())
|
||||||
|
console.toggle();
|
||||||
if (!GameScene.instance().isNotInWorldMap()) //prevent showing this dialog to WorldMap
|
if (!GameScene.instance().isNotInWorldMap()) //prevent showing this dialog to WorldMap
|
||||||
return;
|
return;
|
||||||
dialog.getButtonTable().clear();
|
dialog.getButtonTable().clear();
|
||||||
@@ -471,6 +513,8 @@ public class GameHUD extends Stage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void menu() {
|
private void menu() {
|
||||||
|
if (console.isVisible())
|
||||||
|
console.toggle();
|
||||||
gameStage.openMenu();
|
gameStage.openMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -479,6 +523,11 @@ public class GameHUD extends Stage {
|
|||||||
actor.setVisible(visible);
|
actor.setVisible(visible);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setDisabled(Actor actor, boolean enable) {
|
||||||
|
if (actor != null && actor instanceof Button)
|
||||||
|
((Button) actor).setDisabled(enable);
|
||||||
|
}
|
||||||
|
|
||||||
private void setAlpha(Actor actor, boolean visible) {
|
private void setAlpha(Actor actor, boolean visible) {
|
||||||
if (actor != null) {
|
if (actor != null) {
|
||||||
if (visible)
|
if (visible)
|
||||||
@@ -498,7 +547,7 @@ public class GameHUD extends Stage {
|
|||||||
setVisibility(shards, visible);
|
setVisibility(shards, visible);
|
||||||
setVisibility(money, visible);
|
setVisibility(money, visible);
|
||||||
setVisibility(blank, visible);
|
setVisibility(blank, visible);
|
||||||
setVisibility(exitToWorldMapActor, GameScene.instance().isNotInWorldMap());
|
setDisabled(exitToWorldMapActor, !GameScene.instance().isNotInWorldMap());
|
||||||
setAlpha(avatarborder, visible);
|
setAlpha(avatarborder, visible);
|
||||||
setAlpha(avatar, visible);
|
setAlpha(avatar, visible);
|
||||||
setAlpha(deckActor, visible);
|
setAlpha(deckActor, visible);
|
||||||
@@ -506,6 +555,9 @@ public class GameHUD extends Stage {
|
|||||||
setAlpha(logbookActor, visible);
|
setAlpha(logbookActor, visible);
|
||||||
setAlpha(inventoryActor, visible);
|
setAlpha(inventoryActor, visible);
|
||||||
setAlpha(exitToWorldMapActor, visible);
|
setAlpha(exitToWorldMapActor, visible);
|
||||||
|
for (TextraButton button : abilityButtonMap) {
|
||||||
|
setAlpha(button, visible);
|
||||||
|
}
|
||||||
opacity = visible ? 1f : 0.4f;
|
opacity = visible ? 1f : 0.4f;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -528,11 +580,6 @@ public class GameHUD extends Stage {
|
|||||||
if (keycode == Input.Keys.BACK) {
|
if (keycode == Input.Keys.BACK) {
|
||||||
if (console.isVisible()) {
|
if (console.isVisible()) {
|
||||||
console.toggle();
|
console.toggle();
|
||||||
} else {
|
|
||||||
if (menuActor.isVisible())
|
|
||||||
hideButtons();
|
|
||||||
else
|
|
||||||
showButtons();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (console.isVisible())
|
if (console.isVisible())
|
||||||
@@ -571,38 +618,6 @@ public class GameHUD extends Stage {
|
|||||||
}, 0.10f);
|
}, 0.10f);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void hideButtons() {
|
|
||||||
if (isShowing)
|
|
||||||
return;
|
|
||||||
if (isHiding)
|
|
||||||
return;
|
|
||||||
isHiding = true;
|
|
||||||
deckActor.addAction(Actions.sequence(Actions.fadeOut(0.10f), Actions.hide(), Actions.moveTo(deckActor.getX() + deckActor.getWidth(), deckActor.getY())));
|
|
||||||
inventoryActor.addAction(Actions.sequence(Actions.fadeOut(0.15f), Actions.hide(), Actions.moveTo(inventoryActor.getX() + inventoryActor.getWidth(), inventoryActor.getY())));
|
|
||||||
logbookActor.addAction(Actions.sequence(Actions.fadeOut(0.20f), Actions.hide(), Actions.moveTo(logbookActor.getX() + logbookActor.getWidth(), logbookActor.getY())));
|
|
||||||
menuActor.addAction(Actions.sequence(Actions.fadeOut(0.25f), Actions.hide(), Actions.moveTo(menuActor.getX() + menuActor.getWidth(), menuActor.getY())));
|
|
||||||
if (GameScene.instance().isNotInWorldMap())
|
|
||||||
exitToWorldMapActor.addAction(Actions.sequence(Actions.fadeOut(0.2f), Actions.hide(), Actions.moveTo(exitToWorldMapActor.getX() + exitToWorldMapActor.getWidth(), exitToWorldMapActor.getY())));
|
|
||||||
FThreads.delayInEDT(300, () -> isHiding = false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showButtons() {
|
|
||||||
if (console.isVisible())
|
|
||||||
return;
|
|
||||||
if (isHiding)
|
|
||||||
return;
|
|
||||||
if (isShowing)
|
|
||||||
return;
|
|
||||||
isShowing = true;
|
|
||||||
menuActor.addAction(Actions.sequence(Actions.delay(0.1f), Actions.parallel(Actions.show(), Actions.alpha(opacity, 0.1f), Actions.moveTo(referenceX, menuActor.getY(), 0.25f))));
|
|
||||||
logbookActor.addAction(Actions.sequence(Actions.delay(0.15f), Actions.parallel(Actions.show(), Actions.alpha(opacity, 0.1f), Actions.moveTo(referenceX, logbookActor.getY(), 0.25f))));
|
|
||||||
inventoryActor.addAction(Actions.sequence(Actions.delay(0.2f), Actions.parallel(Actions.show(), Actions.alpha(opacity, 0.1f), Actions.moveTo(referenceX, inventoryActor.getY(), 0.25f))));
|
|
||||||
deckActor.addAction(Actions.sequence(Actions.delay(0.25f), Actions.parallel(Actions.show(), Actions.alpha(opacity, 0.1f), Actions.moveTo(referenceX, deckActor.getY(), 0.25f))));
|
|
||||||
if (GameScene.instance().isNotInWorldMap())
|
|
||||||
exitToWorldMapActor.addAction(Actions.sequence(Actions.delay(0.25f), Actions.parallel(Actions.show(), Actions.alpha(opacity, 0.1f), Actions.moveTo(referenceX, exitToWorldMapActor.getY(), 0.25f))));
|
|
||||||
FThreads.delayInEDT(300, () -> isShowing = false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDebug(boolean b) {
|
public void setDebug(boolean b) {
|
||||||
debugMap = b;
|
debugMap = b;
|
||||||
}
|
}
|
||||||
@@ -626,13 +641,12 @@ public class GameHUD extends Stage {
|
|||||||
public boolean act(float v) {
|
public boolean act(float v) {
|
||||||
if (exitDungeon) {
|
if (exitDungeon) {
|
||||||
MapStage.getInstance().exitDungeon();
|
MapStage.getInstance().exitDungeon();
|
||||||
exitToWorldMapActor.setVisible(false);
|
setDisabled(exitToWorldMapActor, true);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
dialogOnlyInput = false;
|
dialogOnlyInput = false;
|
||||||
selectedKey = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void selectNextDialogButton() {
|
private void selectNextDialogButton() {
|
||||||
@@ -677,18 +691,9 @@ public class GameHUD extends Stage {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean longPress(Actor actor, float x, float y) {
|
public boolean longPress(Actor actor, float x, float y) {
|
||||||
hideButtons();
|
|
||||||
console.toggle();
|
console.toggle();
|
||||||
return super.longPress(actor, x, y);
|
return super.longPress(actor, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void tap(InputEvent event, float x, float y, int count, int button) {
|
|
||||||
super.tap(event, x, y, count, button);
|
|
||||||
//show menu buttons if double tapping the avatar, for android devices without visible navigation buttons
|
|
||||||
if (count > 1)
|
|
||||||
showButtons();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateMusic() {
|
public void updateMusic() {
|
||||||
|
|||||||
@@ -361,7 +361,7 @@ public class WorldStage extends GameStage implements SaveFileContent {
|
|||||||
List<String> names = (List<String>) data.readObject("names");
|
List<String> names = (List<String>) data.readObject("names");
|
||||||
List<Float> x = (List<Float>) data.readObject("x");
|
List<Float> x = (List<Float>) data.readObject("x");
|
||||||
List<Float> y = (List<Float>) data.readObject("y");
|
List<Float> y = (List<Float>) data.readObject("y");
|
||||||
List<UUID> questStageIDs = (List<UUID>) data.readObject("questStageIDs");
|
List<String> questStageIDs = (List<String>) data.readObject("questStageIDs");
|
||||||
for (int i = 0; i < timeouts.size(); i++) {
|
for (int i = 0; i < timeouts.size(); i++) {
|
||||||
EnemySprite sprite = new EnemySprite(WorldData.getEnemy(names.get(i)));
|
EnemySprite sprite = new EnemySprite(WorldData.getEnemy(names.get(i)));
|
||||||
sprite.setX(x.get(i));
|
sprite.setX(x.get(i));
|
||||||
@@ -393,7 +393,7 @@ public class WorldStage extends GameStage implements SaveFileContent {
|
|||||||
List<String> names = new ArrayList<>();
|
List<String> names = new ArrayList<>();
|
||||||
List<Float> x = new ArrayList<>();
|
List<Float> x = new ArrayList<>();
|
||||||
List<Float> y = new ArrayList<>();
|
List<Float> y = new ArrayList<>();
|
||||||
List<UUID> questStageIDs = new ArrayList<>();
|
List<String> questStageIDs = new ArrayList<>();
|
||||||
for (Pair<Float, EnemySprite> enemy : enemies) {
|
for (Pair<Float, EnemySprite> enemy : enemies) {
|
||||||
timeouts.add(enemy.getKey());
|
timeouts.add(enemy.getKey());
|
||||||
names.add(enemy.getValue().getData().name);
|
names.add(enemy.getValue().getData().name);
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import forge.util.Aggregates;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class AdventureQuestController implements Serializable {
|
public class AdventureQuestController implements Serializable {
|
||||||
|
|
||||||
@@ -84,9 +83,9 @@ public class AdventureQuestController implements Serializable {
|
|||||||
questStage.epilogueDisplayed = true;
|
questStage.epilogueDisplayed = true;
|
||||||
dialogQueue.add(questStage.epilogue);
|
dialogQueue.add(questStage.epilogue);
|
||||||
}
|
}
|
||||||
// if (questStage.getStatus() != QuestStatus.Complete){
|
if (questStage.getStatus() != QuestStatus.Complete){
|
||||||
// break;
|
break;
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (quest.failed){
|
if (quest.failed){
|
||||||
@@ -263,6 +262,12 @@ public class AdventureQuestController implements Serializable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateArenaComplete(boolean winner){
|
||||||
|
for(AdventureQuestData currentQuest: Current.player().getQuests()) {
|
||||||
|
currentQuest.updateArenaComplete(winner);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public AdventureQuestData generateQuest(int id){
|
public AdventureQuestData generateQuest(int id){
|
||||||
AdventureQuestData generated = null;
|
AdventureQuestData generated = null;
|
||||||
for (AdventureQuestData template: allQuests) {
|
for (AdventureQuestData template: allQuests) {
|
||||||
@@ -287,7 +292,7 @@ public class AdventureQuestController implements Serializable {
|
|||||||
public void rematchQuestSprite(EnemySprite sprite){
|
public void rematchQuestSprite(EnemySprite sprite){
|
||||||
for (AdventureQuestData q : Current.player().getQuests()){
|
for (AdventureQuestData q : Current.player().getQuests()){
|
||||||
for (AdventureQuestStage s : q.stages){
|
for (AdventureQuestStage s : q.stages){
|
||||||
if (sprite.questStageID != null && sprite.questStageID.equals(s.questStageID)){
|
if (sprite.questStageID != null && sprite.questStageID.equals(s.stageID.toString())){
|
||||||
s.setTargetSprite(sprite);
|
s.setTargetSprite(sprite);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
27
forge-gui/res/adventure/Shandalar/decks/bat.dck
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
[metadata]
|
||||||
|
Name=bat
|
||||||
|
[Avatar]
|
||||||
|
|
||||||
|
[Main]
|
||||||
|
4 Basilica Screecher|GTC|1
|
||||||
|
4 Blight Keeper|J22|1
|
||||||
|
4 Blighted Bat|AKH|1
|
||||||
|
4 Bloodhunter Bat|JMP|1
|
||||||
|
4 Dirge Bat|IKO|1
|
||||||
|
4 Duskhunter Bat|MM2|1
|
||||||
|
4 Murder|M13|1
|
||||||
|
4 Sinister Strength|PLS|1
|
||||||
|
6 Swamp|J22|1
|
||||||
|
8 Swamp|J22|2
|
||||||
|
10 Swamp|J22|3
|
||||||
|
4 Unholy Strength|30A|1
|
||||||
|
[Sideboard]
|
||||||
|
|
||||||
|
[Planes]
|
||||||
|
|
||||||
|
[Schemes]
|
||||||
|
|
||||||
|
[Conspiracy]
|
||||||
|
|
||||||
|
[Dungeon]
|
||||||
|
|
||||||
34
forge-gui/res/adventure/Shandalar/decks/darkenchanter.dck
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
[metadata]
|
||||||
|
Name=darkenchanter
|
||||||
|
[Avatar]
|
||||||
|
|
||||||
|
[Main]
|
||||||
|
4 Bayou|OLGC|1
|
||||||
|
4 Cartouche of Ambition|AKR|1
|
||||||
|
4 Doomwake Giant|C15|1
|
||||||
|
4 Eidolon of Blossoms|JOU|1
|
||||||
|
1 Forest|ELD|1
|
||||||
|
2 Forest|ELD|3
|
||||||
|
1 Forest|ELD|4
|
||||||
|
4 Gnarled Scarhide|JOU|1
|
||||||
|
4 Grim Guardian|JOU|1
|
||||||
|
4 Necroblossom Snarl|STX|1
|
||||||
|
4 Oubliette|2XM|1
|
||||||
|
4 Overgrown Tomb|SLD|1
|
||||||
|
1 Swamp|ELD|2
|
||||||
|
2 Swamp|ELD|4
|
||||||
|
4 Trial of Ambition|MB1|1
|
||||||
|
4 Verdant Catacombs|SLU|1
|
||||||
|
3 Verduran Enchantress|SLD|1
|
||||||
|
4 Wild Growth|AFC|1
|
||||||
|
2 Yavimaya Enchantress|TD0|1
|
||||||
|
[Sideboard]
|
||||||
|
|
||||||
|
[Planes]
|
||||||
|
|
||||||
|
[Schemes]
|
||||||
|
|
||||||
|
[Conspiracy]
|
||||||
|
|
||||||
|
[Dungeon]
|
||||||
|
|
||||||
12
forge-gui/res/adventure/Shandalar/decks/drossgladiator.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name":"Dross Gladiator",
|
||||||
|
"template":
|
||||||
|
{
|
||||||
|
"count":60,
|
||||||
|
"colors":["Black"],
|
||||||
|
"tribe":"Phyrexian",
|
||||||
|
"tribeCards":1.0,
|
||||||
|
"tribeSynergyCards":0.40,
|
||||||
|
"rares":0.25
|
||||||
|
}
|
||||||
|
}
|
||||||
12
forge-gui/res/adventure/Shandalar/decks/drossgrimnarch.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name":"Dross Grimnarch",
|
||||||
|
"template":
|
||||||
|
{
|
||||||
|
"count":60,
|
||||||
|
"colors":["Black, Blue"],
|
||||||
|
"tribe":"Phyrexian",
|
||||||
|
"tribeCards":1.0,
|
||||||
|
"tribeSynergyCards":0.40,
|
||||||
|
"rares":0.4
|
||||||
|
}
|
||||||
|
}
|
||||||
32
forge-gui/res/adventure/Shandalar/decks/sandgolem.dck
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
[metadata]
|
||||||
|
Name=sandgolem
|
||||||
|
[Avatar]
|
||||||
|
|
||||||
|
[Main]
|
||||||
|
4 Char-Rumbler|TSR|1
|
||||||
|
4 Choking Sands|VMA|1
|
||||||
|
4 Mountain|KLD|1
|
||||||
|
3 Mountain|KLD|2
|
||||||
|
5 Mountain|KLD|3
|
||||||
|
5 Plains|KLD|1
|
||||||
|
5 Plains|KLD|2
|
||||||
|
2 Plains|KLD|3
|
||||||
|
3 Sand Golem|MIR|1
|
||||||
|
4 Sand Strangler|AKR|1
|
||||||
|
4 Sandblast|HOU|1
|
||||||
|
1 Sandstone Oracle|IMA|1
|
||||||
|
2 Sandstone Warrior|TPR|1
|
||||||
|
2 Shock|DDN|1
|
||||||
|
4 Tectonic Giant|AFC|1
|
||||||
|
4 Thunder Spirit|PRM|1
|
||||||
|
4 Viashino Sandstalker|VIS|1
|
||||||
|
[Sideboard]
|
||||||
|
|
||||||
|
[Planes]
|
||||||
|
|
||||||
|
[Schemes]
|
||||||
|
|
||||||
|
[Conspiracy]
|
||||||
|
|
||||||
|
[Dungeon]
|
||||||
|
|
||||||
27
forge-gui/res/adventure/Shandalar/decks/sandwurm.dck
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
[metadata]
|
||||||
|
Name=sandwurm
|
||||||
|
[Avatar]
|
||||||
|
|
||||||
|
[Main]
|
||||||
|
4 Beneath the Sands|MB1|1
|
||||||
|
4 Dirtcowl Wurm|TMP|1
|
||||||
|
7 Forest|IKO|1
|
||||||
|
8 Forest|IKO|2
|
||||||
|
9 Forest|IKO|3
|
||||||
|
4 Greater Sandwurm|IKO|1
|
||||||
|
4 Rampant Growth|NCC|1
|
||||||
|
4 Roar of the Wurm|DDS|1
|
||||||
|
4 Sandwurm Convergence|CLB|1
|
||||||
|
4 Spined Wurm|S00|1
|
||||||
|
4 Symbiotic Wurm|VMA|1
|
||||||
|
4 Teething Wurmlet|BRO|1
|
||||||
|
[Sideboard]
|
||||||
|
|
||||||
|
[Planes]
|
||||||
|
|
||||||
|
[Schemes]
|
||||||
|
|
||||||
|
[Conspiracy]
|
||||||
|
|
||||||
|
[Dungeon]
|
||||||
|
|
||||||
40
forge-gui/res/adventure/Shandalar/decks/swamptroll.dck
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[metadata]
|
||||||
|
Name=swamptroll
|
||||||
|
[Avatar]
|
||||||
|
|
||||||
|
[Main]
|
||||||
|
4 Charnel Troll|GRN|1
|
||||||
|
4 Clackbridge Troll|ELD|1
|
||||||
|
4 Eat to Extinction|THB|1
|
||||||
|
2 Feasting Troll King|ELD|1
|
||||||
|
1 Forest|ELD|1
|
||||||
|
1 Forest|ELD|2
|
||||||
|
3 Forest|ELD|4
|
||||||
|
4 Gluttonous Troll|ELD|1
|
||||||
|
2 Grismold, the Dreadsower|C19|1
|
||||||
|
1 Gyome, Master Chef|C21|1
|
||||||
|
4 Haunted Mire|DMU|1
|
||||||
|
2 Hunted Troll|RAV|1
|
||||||
|
3 Infernal Grasp|MID|1
|
||||||
|
4 Jungle Hollow|KTK|1
|
||||||
|
1 Nature's Claim|IMA|1
|
||||||
|
2 Old-Growth Troll|KHM|1
|
||||||
|
3 Swamp|ELD|1
|
||||||
|
1 Swamp|ELD|2
|
||||||
|
2 Swamp|ELD|3
|
||||||
|
1 Swamp|ELD|4
|
||||||
|
4 Tainted Wood|C15|1
|
||||||
|
2 Taste of Death|ELD|1
|
||||||
|
2 Thrun, Breaker of Silence|ONE|1
|
||||||
|
1 Thrun, the Last Troll|MBS|1
|
||||||
|
2 Varolz, the Scar-Striped|DGM|1
|
||||||
|
[Sideboard]
|
||||||
|
|
||||||
|
[Planes]
|
||||||
|
|
||||||
|
[Schemes]
|
||||||
|
|
||||||
|
[Conspiracy]
|
||||||
|
|
||||||
|
[Dungeon]
|
||||||
|
|
||||||
31
forge-gui/res/adventure/Shandalar/decks/witch.dck
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
[metadata]
|
||||||
|
Name=witch
|
||||||
|
[Avatar]
|
||||||
|
|
||||||
|
[Main]
|
||||||
|
2 Accursed Witch|SOI|1
|
||||||
|
2 Cast Down|DOM|1
|
||||||
|
4 Cuombajj Witches|CMR|1
|
||||||
|
4 Curse of Leeches|MID|1
|
||||||
|
4 Cursebound Witch|YMID|1
|
||||||
|
1 Cut Down|DMU|1
|
||||||
|
4 Kindly Stranger|SOI|1
|
||||||
|
4 Sedgemoor Witch|STX|1
|
||||||
|
20 Swamp|ELD|2
|
||||||
|
1 Tempting Witch|JMP|1
|
||||||
|
2 The Cauldron of Eternity|ELD|1
|
||||||
|
2 The Hourglass Coven|HBG|1
|
||||||
|
2 Veinwitch Coven|C21|1
|
||||||
|
2 Witch of the Moors|JMP|1
|
||||||
|
4 Witch's Cottage|ELD|1
|
||||||
|
2 Witch's Vengeance|ELD|1
|
||||||
|
[Sideboard]
|
||||||
|
|
||||||
|
[Planes]
|
||||||
|
|
||||||
|
[Schemes]
|
||||||
|
|
||||||
|
[Conspiracy]
|
||||||
|
|
||||||
|
[Dungeon]
|
||||||
|
|
||||||
@@ -71,7 +71,6 @@
|
|||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Golem"/>
|
<property name="enemy" value="Golem"/>
|
||||||
<property name="threatRange" type="int" value="30"/>
|
<property name="threatRange" type="int" value="30"/>
|
||||||
<property name="waypoints" value="90,91,96,91"/>
|
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="72" template="../obj/gold.tx" x="330.667" y="179.333"/>
|
<object id="72" template="../obj/gold.tx" x="330.667" y="179.333"/>
|
||||||
|
|||||||
@@ -1,81 +1,72 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="36" height="24" tilewidth="16" tileheight="16" infinite="0" nextlayerid="8" nextobjectid="86">
|
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="58" height="46" tilewidth="16" tileheight="16" infinite="0" nextlayerid="9" nextobjectid="174">
|
||||||
<editorsettings>
|
<editorsettings>
|
||||||
<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="10113" source="../tileset/buildings.tsx"/>
|
<tileset firstgid="10113" source="../tileset/buildings.tsx"/>
|
||||||
<layer id="6" name="Collision" width="36" height="24">
|
<tileset firstgid="11905" source="../tileset/FarmFood.tsx"/>
|
||||||
|
<layer id="8" name="Tilelaag 5" width="58" height="46">
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
eJzNVkEOgDAI4+rH/P+TjJ4Wso4iDVuTxaTRUcpkmJndl314n+OacYrl4Tkfe8b9icG8i7iqF6yeyJsVx9YOfYvyX3mDkPGbyQ/FUKOyp1JPVLNuPQp06jkx90ot1WDO106tUZ/qhqInKnFa3VT3RjU++5916WFidZ4h1pusnyptSAvLd+lBc6NaU6UGu3sTM+tV92fmy6gvZWf32T4ZrSMemJc8zA==
|
eJztlkEOAyEIRWfbTU/TM/T+R2pYmBgrI+CnVfAlTdpMR3mi4HXF5/34dwT+kGN0z+IY2bN2zOAZlTaPUV0zeLZex3NvMuxZ4s4vmvfI09v19fz+IJDGX557u67g+Yuc9jxHc0qfa2L39ORyeDenxMGaI6/eM/Js5+n1B662zMaK2sujM8k5jVxRvRIxjqT2oByRrghPq6smXitIz5m105zbNv+WOaRw+dSeScvebmP39ORcJf+z7F2Up/adgtVTy12P0o7h4YmsnWW83nfpu7O9VDMuom56xWyB4kDd6Q+H1VjxzKFB1+NVsdyFdl0TjWf9ezdPAnnnXZ2IThwZHIkMjkQGR8Lqt9u6WGPNsg+ILJ4F7l7hNdcKvTBLfnf0rO+1GfkAgp943Q==
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<layer id="1" name="Background" width="36" height="24">
|
<layer id="1" name="Background" width="58" height="46">
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
eJxbwM7AsGAUw/F/NuqZtRgJD7RbRvHQxQyDwA3IeOEgcMMoHsWjeBQTiys5B8besgGyFxdmIlH9MVZUeiDxJQbsbqMUk2sOtrildziB3ICM6WXvQix209MNgyE9UgMDAG2aMkY=
|
eJzt2FEKgkAQgOEhyPBiHknwtZMk3aUDdCFjIUGiomR3Znbnf/jxTedzxxfHXmQkIiIiouYbnlnPoeVs3Tr0MaxRnK9e6zm0rNYzUOxuR/sZNLqc7GfQ6OxghlpLO+KpVp1L59953ZTD6NXJ3uKs2SlBnHMQZ5S9xYkTJ06cfp3Th2fX6vz3GbU6D072Nv1bS/dfr5bdRec8c1n33ieXSd68r1wz7q3E2f3iLNX8xaTxfZZyWe+u1XmWcD4Asxqt6Q==
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<layer id="2" name="Ground" width="36" height="24">
|
<layer id="2" name="Ground" width="58" height="46">
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
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
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<layer id="3" name="Clutter" width="36" height="24">
|
<layer id="3" name="Clutter" width="58" height="46">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="spriteLayer" type="bool" value="true"/>
|
<property name="spriteLayer" type="bool" value="true"/>
|
||||||
</properties>
|
</properties>
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
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
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<layer id="7" name="Tilelaag 5" width="36" height="24">
|
<layer id="7" name="ClutterBis" width="58" height="46">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="spriteLayer" type="bool" value="true"/>
|
<property name="spriteLayer" type="bool" value="true"/>
|
||||||
</properties>
|
</properties>
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
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
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<objectgroup id="4" name="Objects">
|
<objectgroup id="4" name="Objects">
|
||||||
<object id="38" template="../obj/entry_up.tx" x="256" y="377.5">
|
<object id="38" template="../obj/entry_up.tx" x="431.488" y="720.508">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="teleport" value=""/>
|
<property name="teleport" value=""/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="49" template="../obj/gold.tx" x="107.705" y="136.536"/>
|
<object id="49" template="../obj/gold.tx" x="283.705" y="488.536"/>
|
||||||
<object id="53" template="../obj/enemy.tx" x="271.708" y="215.489" width="16" height="17.6724">
|
<object id="55" template="../obj/manashards.tx" x="193.653" y="436.398"/>
|
||||||
<properties>
|
<object id="56" template="../obj/enemy.tx" x="588.474" y="442.344" width="16" height="17.6724">
|
||||||
<property name="effect">{ "startBattleWithCardInCommandZone": [ "Grolnok's Boss Effect"]
|
|
||||||
}</property>
|
|
||||||
<property name="enemy" value="Grolnok"/>
|
|
||||||
<property name="threatRange" type="int" value="60"/>
|
|
||||||
<property name="waypoints" value="85,83,84,65"/>
|
|
||||||
</properties>
|
|
||||||
</object>
|
|
||||||
<object id="55" template="../obj/manashards.tx" x="17.6527" y="84.3978"/>
|
|
||||||
<object id="56" template="../obj/enemy.tx" x="390.5" y="99.9971" width="16" height="17.6724">
|
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Frog"/>
|
<property name="enemy" value="Frog"/>
|
||||||
<property name="threatRange" type="int" value="60"/>
|
<property name="threatRange" type="int" value="60"/>
|
||||||
<property name="waypoints" value="82,71"/>
|
<property name="waypoints" value="82,71,137"/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="57" template="../obj/enemy.tx" x="453.333" y="44.4971" width="16" height="17.6724">
|
<object id="57" template="../obj/enemy.tx" x="685.774" y="309.541" width="16" height="17.6724">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Insect"/>
|
<property name="enemy" value="Raven"/>
|
||||||
<property name="threatRange" type="int" value="60"/>
|
<property name="threatRange" type="int" value="60"/>
|
||||||
<property name="waypoints" value="71,64,72,63,68,66,65,67"/>
|
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="58" template="../obj/enemy.tx" x="6.667" y="107.83" width="16" height="17.6724">
|
<object id="58" template="../obj/enemy.tx" x="322.167" y="477.33" width="16" height="17.6724">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Insect"/>
|
<property name="enemy" value="Insect"/>
|
||||||
<property name="spriteLayer" type="bool" value="true"/>
|
<property name="spriteLayer" type="bool" value="true"/>
|
||||||
<property name="threatRange" type="int" value="60"/>
|
<property name="threatRange" type="int" value="60"/>
|
||||||
<property name="waypoints" value="71,64,72,63,68,66,65,67"/>
|
<property name="waypoints" value="71,64,72,63,66,65,67"/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="59" template="../obj/booster.tx" x="31" y="15.3333">
|
<object id="59" template="../obj/booster.tx" x="34" y="61.833">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="reward">[
|
<property name="reward">[
|
||||||
{
|
{
|
||||||
@@ -100,8 +91,8 @@
|
|||||||
</property>
|
</property>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="60" template="../obj/manashards.tx" x="484.667" y="18"/>
|
<object id="60" template="../obj/manashards.tx" x="799.563" y="393.051"/>
|
||||||
<object id="61" template="../obj/treasure.tx" x="467.333" y="138.667">
|
<object id="61" template="../obj/treasure.tx" x="606.111" y="211.151">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="reward">[{
|
<property name="reward">[{
|
||||||
"type": "randomCard",
|
"type": "randomCard",
|
||||||
@@ -117,46 +108,348 @@
|
|||||||
<property name="spawn.Hard" type="bool" value="false"/>
|
<property name="spawn.Hard" type="bool" value="false"/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="63" template="../obj/waypoint.tx" x="318.667" y="41.6667"/>
|
<object id="63" template="../obj/waypoint.tx" x="494.667" y="393.667"/>
|
||||||
<object id="64" template="../obj/waypoint.tx" x="493.667" y="258"/>
|
<object id="64" template="../obj/waypoint.tx" x="669.667" y="610"/>
|
||||||
<object id="65" template="../obj/waypoint.tx" x="313.5" y="187.333"/>
|
<object id="65" template="../obj/waypoint.tx" x="489.5" y="539.333"/>
|
||||||
<object id="66" template="../obj/waypoint.tx" x="80" y="162.333"/>
|
<object id="66" template="../obj/waypoint.tx" x="256" y="514.333"/>
|
||||||
<object id="67" template="../obj/waypoint.tx" x="398.167" y="385.333"/>
|
<object id="67" template="../obj/waypoint.tx" x="574.167" y="737.333"/>
|
||||||
<object id="68" template="../obj/waypoint.tx" x="123" y="38"/>
|
<object id="68" template="../obj/waypoint.tx" x="299" y="390"/>
|
||||||
<object id="69" template="../obj/waypoint.tx" x="40" y="72"/>
|
<object id="69" template="../obj/waypoint.tx" x="216" y="424"/>
|
||||||
<object id="70" template="../obj/waypoint.tx" x="554" y="103"/>
|
<object id="70" template="../obj/waypoint.tx" x="875.117" y="271.323"/>
|
||||||
<object id="71" template="../obj/waypoint.tx" x="413" y="148"/>
|
<object id="71" template="../obj/waypoint.tx" x="598" y="507"/>
|
||||||
<object id="72" template="../obj/waypoint.tx" x="473" y="330"/>
|
<object id="72" template="../obj/waypoint.tx" x="649" y="682"/>
|
||||||
<object id="73" template="../obj/enemy.tx" x="32" y="285.164" width="16" height="17.6724">
|
<object id="73" template="../obj/enemy.tx" x="565.5" y="493.664" width="16" height="17.6724">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Insect"/>
|
<property name="enemy" value="Insect"/>
|
||||||
<property name="threatRange" type="int" value="60"/>
|
<property name="threatRange" type="int" value="60"/>
|
||||||
<property name="waypoints" value="71,64,72,63,68,66,65,67"/>
|
<property name="waypoints" value="66,68,63,72,64,71"/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="74" template="../obj/enemy.tx" x="123.5" y="146.164" width="16" height="17.6724">
|
<object id="74" template="../obj/enemy.tx" x="303.5" y="497.664" width="16" height="17.6724">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Frog"/>
|
<property name="enemy" value="Frog"/>
|
||||||
<property name="threatRange" type="int" value="60"/>
|
<property name="threatRange" type="int" value="60"/>
|
||||||
<property name="waypoints" value="75,66"/>
|
<property name="waypoints" value="75,83,66"/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="75" template="../obj/waypoint.tx" x="175" y="129"/>
|
<object id="75" template="../obj/waypoint.tx" x="351" y="481"/>
|
||||||
<object id="76" template="../obj/collision.tx" x="-16" y="-2.5415" width="16" height="388.083"/>
|
<object id="76" template="../obj/collision.tx" x="-15.1423" y="0.580737" width="16" height="733.444"/>
|
||||||
<object id="77" template="../obj/collision.tx" x="577.5" y="-25.5415" width="16" height="410.083"/>
|
<object id="77" template="../obj/collision.tx" x="930.049" y="-1.31779" width="16" height="736.453"/>
|
||||||
<object id="78" template="../obj/collision.tx" x="71.75" y="-15.5" width="524.5" height="16"/>
|
<object id="78" template="../obj/collision.tx" x="-4.76435" y="-17.3014" width="932.462" height="16"/>
|
||||||
<object id="79" template="../obj/collision.tx" x="70.25" y="384.5" width="524.5" height="16"/>
|
<object id="79" template="../obj/collision.tx" x="-12.1117" y="736.5" width="961.301" height="16"/>
|
||||||
<object id="80" template="../obj/enemy.tx" x="496.5" y="236.164" width="16" height="17.6724">
|
<object id="80" template="../obj/enemy.tx" x="672.5" y="588.164" width="16" height="17.6724">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Frog"/>
|
<property name="enemy" value="Frog"/>
|
||||||
<property name="threatRange" type="int" value="60"/>
|
<property name="threatRange" type="int" value="60"/>
|
||||||
<property name="waypoints" value="64,72,81"/>
|
<property name="waypoints" value="64,72,81"/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="81" template="../obj/waypoint.tx" x="456.5" y="211"/>
|
<object id="81" template="../obj/waypoint.tx" x="632.5" y="563"/>
|
||||||
<object id="82" template="../obj/waypoint.tx" x="455" y="82"/>
|
<object id="82" template="../obj/waypoint.tx" x="637" y="454.5"/>
|
||||||
<object id="83" template="../obj/waypoint.tx" x="214.5" y="236.5"/>
|
<object id="83" template="../obj/waypoint.tx" x="371.509" y="582.873"/>
|
||||||
<object id="84" template="../obj/waypoint.tx" x="247" y="166.5"/>
|
<object id="84" template="../obj/waypoint.tx" x="423" y="518.5"/>
|
||||||
<object id="85" template="../obj/waypoint.tx" x="298.5" y="265"/>
|
<object id="85" template="../obj/waypoint.tx" x="474.5" y="617"/>
|
||||||
|
<object id="86" template="../obj/booster.tx" x="3.6353" y="736.721">
|
||||||
|
<properties>
|
||||||
|
<property name="reward">[
|
||||||
|
{
|
||||||
|
"editions": [ "DMR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 10,
|
||||||
|
"rarity": [ "Common" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "DMR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Uncommon" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "DMR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 1,
|
||||||
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="88" template="../obj/collision.tx" x="139.03" y="643.332" width="113.725" height="91.9653"/>
|
||||||
|
<object id="89" template="../obj/collision.tx" x="0.814872" y="460.453" width="77.8525" height="158.787"/>
|
||||||
|
<object id="90" template="../obj/enemy.tx" x="522.046" y="411.39" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Raven"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="91" template="../obj/booster.tx" x="822.664" y="409.21">
|
||||||
|
<properties>
|
||||||
|
<property name="reward">[
|
||||||
|
{
|
||||||
|
"editions": [ "DMR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 10,
|
||||||
|
"rarity": [ "Common" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "DMR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Uncommon" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "DMR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 1,
|
||||||
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="92" template="../obj/booster.tx" x="640.944" y="143.099">
|
||||||
|
<properties>
|
||||||
|
<property name="reward">[
|
||||||
|
{
|
||||||
|
"editions": [ "DMR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 10,
|
||||||
|
"rarity": [ "Common" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "DMR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Uncommon" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "DMR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 1,
|
||||||
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="93" template="../obj/waypoint.tx" x="615.968" y="105.659"/>
|
||||||
|
<object id="94" template="../obj/waypoint.tx" x="527.834" y="163.235"/>
|
||||||
|
<object id="95" template="../obj/waypoint.tx" x="551.893" y="264.912"/>
|
||||||
|
<object id="96" template="../obj/waypoint.tx" x="623.756" y="189.913"/>
|
||||||
|
<object id="97" template="../obj/enemy.tx" x="437.589" y="580.997" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Frog"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
<property name="waypoints" value="85,65,84,83"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="98" template="../obj/treasure.tx" x="453.907" y="261.283">
|
||||||
|
<properties>
|
||||||
|
<property name="reward">[{
|
||||||
|
"type": "randomCard",
|
||||||
|
"count": 1,
|
||||||
|
"rarity": [ "rare", "mythic rare" ],
|
||||||
|
"colors": [ "colorID" ]
|
||||||
|
},{
|
||||||
|
"type": "randomCard",
|
||||||
|
"count": 4,
|
||||||
|
"rarity": [ "uncommon" ],
|
||||||
|
"addMaxCount": 2
|
||||||
|
}]</property>
|
||||||
|
<property name="spawn.Hard" type="bool" value="false"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="101" template="../obj/enemy.tx" x="116" y="124.164" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="effect">{ "startBattleWithCard": [ "Asceticism","Grismold, the Dreadsower"]
|
||||||
|
}</property>
|
||||||
|
<property name="enemy" value="Swamp Troll"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="102" template="../obj/enemy.tx" x="374" y="49.6638" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Flying Witch"/>
|
||||||
|
<property name="threatRange" type="int" value="30"/>
|
||||||
|
<property name="waypoints" value="166,144,69,144,166"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="104" template="../obj/waypoint.tx" x="373.5" y="91.5"/>
|
||||||
|
<object id="107" template="../obj/waypoint.tx" x="349" y="332"/>
|
||||||
|
<object id="108" template="../obj/waypoint.tx" x="299.5" y="130.5"/>
|
||||||
|
<object id="109" template="../obj/waypoint.tx" x="406" y="221.5"/>
|
||||||
|
<object id="111" template="../obj/waypoint.tx" x="326.5" y="271"/>
|
||||||
|
<object id="124" template="../obj/enemy.tx" x="578.5" y="113.664" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Witch"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
<property name="waypoints" value="93,127,96,128,96,127,93,129"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="125" template="../obj/enemy.tx" x="774" y="96.164" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Witch"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
<property name="waypoints" value="134,135"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="126" template="../obj/enemy.tx" x="603.5" y="40.1638" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Witch"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
<property name="waypoints" value="130,132,133"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="127" template="../obj/waypoint.tx" x="657" y="130"/>
|
||||||
|
<object id="128" template="../obj/waypoint.tx" x="565" y="191"/>
|
||||||
|
<object id="129" template="../obj/waypoint.tx" x="553.5" y="107.5"/>
|
||||||
|
<object id="130" template="../obj/waypoint.tx" x="531" y="40"/>
|
||||||
|
<object id="131" template="../obj/waypoint.tx" x="418.5" y="99.5"/>
|
||||||
|
<object id="132" template="../obj/waypoint.tx" x="642.5" y="45.5"/>
|
||||||
|
<object id="133" template="../obj/waypoint.tx" x="730" y="36.5"/>
|
||||||
|
<object id="134" template="../obj/waypoint.tx" x="791" y="71.5"/>
|
||||||
|
<object id="135" template="../obj/waypoint.tx" x="760" y="153.5"/>
|
||||||
|
<object id="136" template="../obj/waypoint.tx" x="734.5" y="232"/>
|
||||||
|
<object id="137" template="../obj/waypoint.tx" x="550" y="442.5"/>
|
||||||
|
<object id="139" template="../obj/waypoint.tx" x="-1" y="319.5"/>
|
||||||
|
<object id="140" template="../obj/waypoint.tx" x="51.5" y="322.5"/>
|
||||||
|
<object id="141" template="../obj/waypoint.tx" x="49" y="396"/>
|
||||||
|
<object id="142" template="../obj/waypoint.tx" x="112" y="401.5"/>
|
||||||
|
<object id="143" template="../obj/waypoint.tx" x="113" y="622"/>
|
||||||
|
<object id="144" template="../obj/waypoint.tx" x="113" y="485"/>
|
||||||
|
<object id="145" template="../obj/manashards.tx" x="32" y="76"/>
|
||||||
|
<object id="146" template="../obj/manashards.tx" x="720" y="126"/>
|
||||||
|
<object id="147" template="../obj/gold.tx" x="306.5" y="288.5"/>
|
||||||
|
<object id="148" template="../obj/enemy.tx" x="51.5" y="709.164" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Lich"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="150" template="../obj/gold.tx" x="905.5" y="227.5"/>
|
||||||
|
<object id="151" template="../obj/gold.tx" x="790.5" y="375.5"/>
|
||||||
|
<object id="152" template="../obj/gold.tx" x="708" y="196"/>
|
||||||
|
<object id="153" template="../obj/gold.tx" x="807" y="375.5"/>
|
||||||
|
<object id="154" template="../obj/booster.tx" x="496.5" y="269">
|
||||||
|
<properties>
|
||||||
|
<property name="reward">[
|
||||||
|
{
|
||||||
|
"editions": [ "DMR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 10,
|
||||||
|
"rarity": [ "Common" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "DMR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Uncommon" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "DMR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 1,
|
||||||
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="155" template="../obj/enemy.tx" x="473" y="300.664" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="effect">{ "startBattleWithCard": [ "Enchantress's Presence"]
|
||||||
|
}</property>
|
||||||
|
<property name="enemy" value="Dark Enchanter"/>
|
||||||
|
<property name="reward">[
|
||||||
|
{
|
||||||
|
"type": "item",
|
||||||
|
"probability": 1,
|
||||||
|
"count": 1,
|
||||||
|
"itemName": "Rusty Old Key"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</property>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="156" template="../obj/collision.tx" x="427.769" y="190" width="71.462" height="45"/>
|
||||||
|
<object id="158" template="../obj/enemy.tx" x="787.5" y="431.164" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Gorgon"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="159" template="../obj/door_up.tx" x="680.493" y="222.665" width="23.9816" height="16.6705" rotation="359.74">
|
||||||
|
<properties>
|
||||||
|
<property name="direction" value="up"/>
|
||||||
|
<property name="teleport" value="maps/map/grolnok_f1.tmx"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="160" template="../obj/enemy.tx" x="48.5" y="356.164" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Vampire"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
<property name="waypoints" value="141,142,141,140,139,140"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="161" template="../obj/enemy.tx" x="283.5" y="155.664" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Bat"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
<property name="waypoints" value="164,166,107,109,95"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="162" template="../obj/enemy.tx" x="137" y="250.164" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Bat"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
<property name="waypoints" value="166,107,165,164"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="163" template="../obj/waypoint.tx" x="230" y="242"/>
|
||||||
|
<object id="164" template="../obj/waypoint.tx" x="230" y="152.5"/>
|
||||||
|
<object id="165" template="../obj/waypoint.tx" x="381.5" y="179"/>
|
||||||
|
<object id="166" template="../obj/waypoint.tx" x="194.5" y="317"/>
|
||||||
|
<object id="167" template="../obj/enemy.tx" x="871.5" y="299.164" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Spider"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="169" template="../obj/enemy.tx" x="859" y="676.664" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Dark Knight"/>
|
||||||
|
<property name="threatRange" type="int" value="40"/>
|
||||||
|
<property name="waypoints" value="170,171"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="170" template="../obj/waypoint.tx" x="912.5" y="675"/>
|
||||||
|
<object id="171" template="../obj/waypoint.tx" x="755" y="671"/>
|
||||||
|
<object id="172" template="../obj/booster.tx" x="457" y="577.5">
|
||||||
|
<properties>
|
||||||
|
<property name="reward">[
|
||||||
|
{
|
||||||
|
"editions": [ "DMR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 10,
|
||||||
|
"rarity": [ "Common" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "DMR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Uncommon" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "DMR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="173" template="../obj/collision.tx" x="500.638" y="705.017" width="335.725" height="31.4653"/>
|
||||||
</objectgroup>
|
</objectgroup>
|
||||||
</map>
|
</map>
|
||||||
|
|||||||
156
forge-gui/res/adventure/Shandalar/maps/map/grolnok_f1.tmx
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="30" height="30" tilewidth="16" tileheight="16" infinite="0" nextlayerid="19" nextobjectid="189">
|
||||||
|
<editorsettings>
|
||||||
|
<export format="tmx"/>
|
||||||
|
</editorsettings>
|
||||||
|
<tileset firstgid="1" source="../tileset/main.tsx"/>
|
||||||
|
<tileset firstgid="10113" source="../tileset/buildings.tsx"/>
|
||||||
|
<layer id="17" name="Collision" width="30" height="30">
|
||||||
|
<data encoding="base64" compression="zlib">
|
||||||
|
eJxjYEAAN04EJgeQqg/ZPhM+0jCyXmIxue6kBIzaS397QeljIOwdSuFMrv7B4F96AmrZ+4ECe4dSuqK2G0gBHxgGLpznkVH3UcNeUgHMLkrqeWrYC8PzOFHl0QGx4cooysDABMW46n1sZuOzFxdG9xc57SZCbZhpBNoy6PqJBejpDpd+XHLk+pdYe4nRTwogNZ9h8y817QXFm6YEgg2Tp4e92Nj42snk2kusemqUQfjSKDY+tco9XOUZsX0QagJq2gsAMiw9tA==
|
||||||
|
</data>
|
||||||
|
</layer>
|
||||||
|
<layer id="13" name="background" width="30" height="30">
|
||||||
|
<data encoding="base64" compression="zlib">
|
||||||
|
eJzF10sOgjAQBuBGF9U1j7jRHcdQ48ZbqAuPpRGNh3DrisTbeAN1AhOGUfuihUn+iND2K5WEKkSzBon/2FYR+UnXXijXtJ9P17SvTYVYQxu3bRsXt4/qw92MhJhJIe6a8NJd11Um7W2TeZm4pvZTlPHpor1V+KFc7vNQdyrr8y71y/0XdMHaOXoubiab/bp093E/rm4dfPmmc7Ot9Vjv4nXVPC+W+xtwIa+43h/RY8yVfedtho5untTHh6R8fvB9Qe8dzp+q9vCJ70fX+4VxzlVyhQvnwFul3y6Ohb+dqXublKEuBF1wMHi/aPt0qcPTpYtrDDmy52yZursw7iNqjk9DC58jarVxC4VL93a+3PlnnRYsqv9AfF1d3dB93wGw61A=
|
||||||
|
</data>
|
||||||
|
</layer>
|
||||||
|
<layer id="18" name="Tilelaag 4" width="30" height="30">
|
||||||
|
<properties>
|
||||||
|
<property name="spriteLayer" type="bool" value="true"/>
|
||||||
|
</properties>
|
||||||
|
<data encoding="base64" compression="zlib">
|
||||||
|
eJzdlsFKw0AQhkdL2fbiRVtzU7AWvPcqHvQg+AxaxKM+hs/gRan0QawW8UEU9FrfQHcZhozTTTLdDlH84YMJu803u9mSDNYABr/ESgdgtSYandx77+vzjTQ04fPHid6i+5X1ofHetJEtB3DctGHb6b3vfv6TW44ZINN/4D3042ctpC5vcE5cPvfB10eR+aneokyZk3h0OGbhnRV4X/3YVQPgE5BLX7+xPsPvPpp6L++/zEtrJi+t1dIr0Xo5KftMyDMjvbHnSmtexBvOKP1PYgxbufe0ZF5govQumpf1+fMtqfKmJHhDRu2cOryxkF++r7h3vxt/P1uF3/egW/4NMjb0hlR981DumPcrYf9Hom+tV2a3h1ywHkJ90keqkup97iHSq02qN8Vl6d3L5uvrTTvvbcF53sl+1tr1L7tenuAkLL1y//oZIq+tvZb5K95vDh8hYA==
|
||||||
|
</data>
|
||||||
|
</layer>
|
||||||
|
<objectgroup id="12" name="Kopie van Objects" opacity="0.9" offsetx="3.15789" offsety="7.89474">
|
||||||
|
<object id="140" template="../obj/treasure.tx" x="308.807" y="387.623">
|
||||||
|
<properties>
|
||||||
|
<property name="reward">[{
|
||||||
|
"type": "randomCard",
|
||||||
|
"count": 1,
|
||||||
|
"rarity": [ "rare", "mythic rare" ],
|
||||||
|
"colors": [ "colorID" ]
|
||||||
|
},{
|
||||||
|
"type": "randomCard",
|
||||||
|
"count": 4,
|
||||||
|
"rarity": [ "uncommon" ],
|
||||||
|
"addMaxCount": 2
|
||||||
|
}]</property>
|
||||||
|
<property name="spawn.Hard" type="bool" value="false"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="166" template="../obj/manashards.tx" x="328.662" y="387.554"/>
|
||||||
|
<object id="167" template="../obj/booster.tx" x="302.266" y="347.927">
|
||||||
|
<properties>
|
||||||
|
<property name="reward">[
|
||||||
|
{
|
||||||
|
"editions": [ "HBG" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 10,
|
||||||
|
"rarity": [ "Common" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "HBG" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Uncommon" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "HBG" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="168" template="../obj/gate.tx" gid="3221229597" x="287.624" y="361.405" width="13.6923" height="20.7576" rotation="90.4687" visible="1">
|
||||||
|
<properties>
|
||||||
|
<property name="dialog">[{
|
||||||
|
"text":"This door is locked",
|
||||||
|
"options":[
|
||||||
|
{ "name":"go away" },
|
||||||
|
{
|
||||||
|
"name":"unlock with Grolnoks Key",
|
||||||
|
"condition":[{"item":"Grolnoks Key"}],
|
||||||
|
"text":"The gate is unlocked",
|
||||||
|
"options":[{"name":"continue", "action":[ {"deleteMapObject":-1},{"removeItem":"Grolnoks Key"}]} ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}]</property>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="170" template="../obj/door_down.tx" x="115.686" y="405.017" width="20.0022" height="20.8327" rotation="0.284412">
|
||||||
|
<properties>
|
||||||
|
<property name="direction" value="left"/>
|
||||||
|
<property name="teleport" value="maps/map/grolnok.tmx"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="177" template="../obj/booster.tx" x="326.782" y="347.092">
|
||||||
|
<properties>
|
||||||
|
<property name="reward">[
|
||||||
|
{
|
||||||
|
"editions": [ "AFR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 10,
|
||||||
|
"rarity": [ "Common" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "AFR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Uncommon" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "AFR" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="181" template="../obj/enemy.tx" x="221.421" y="353.28" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Wild Rat"/>
|
||||||
|
<property name="threatRange" type="int" value="20"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="182" template="../obj/enemy.tx" x="247.038" y="149.581" width="16" height="17.6724">
|
||||||
|
<properties>
|
||||||
|
<property name="effect">{ "startBattleWithCardInCommandZone": [ "Grolnok's Boss Effect"]
|
||||||
|
}</property>
|
||||||
|
<property name="enemy" value="Grolnok"/>
|
||||||
|
<property name="reward">[
|
||||||
|
{
|
||||||
|
"type": "item",
|
||||||
|
"probability": 1,
|
||||||
|
"count": 1,
|
||||||
|
"itemName": "Grolnoks Key"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</property>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="183" template="../obj/gate.tx" gid="3221229597" x="221.022" y="337.886" width="15.7579" height="22.3749" rotation="359.183">
|
||||||
|
<properties>
|
||||||
|
<property name="dialog">[{
|
||||||
|
"text":"This door is locked",
|
||||||
|
"options":[
|
||||||
|
{ "name":"go away" },
|
||||||
|
{
|
||||||
|
"name":"unlock with Rusty Old Key",
|
||||||
|
"condition":[{"item":"Rusty Old Key"}],
|
||||||
|
"text":"The gate is unlocked",
|
||||||
|
"options":[{"name":"continue", "action":[ {"deleteMapObject":-1},{"removeItem":"Rusty Old Key"}]} ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}]</property>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
</objectgroup>
|
||||||
|
</map>
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
<object id="62" template="../obj/gold.tx" x="144.5" y="64.25"/>
|
<object id="62" template="../obj/gold.tx" x="144.5" y="64.25"/>
|
||||||
<object id="65" template="../obj/enemy.tx" x="128.25" y="192.75">
|
<object id="65" template="../obj/enemy.tx" x="128.25" y="192.75">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Magma Elemental"/>
|
<property name="enemy" value="Magma Fire Elemental"/>
|
||||||
<property name="threatRange" type="int" value="40"/>
|
<property name="threatRange" type="int" value="40"/>
|
||||||
<property name="waypoints" value="70,74,71,69"/>
|
<property name="waypoints" value="70,74,71,69"/>
|
||||||
</properties>
|
</properties>
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
</object>
|
</object>
|
||||||
<object id="67" template="../obj/enemy.tx" x="251.75" y="65.75">
|
<object id="67" template="../obj/enemy.tx" x="251.75" y="65.75">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Magma Elemental"/>
|
<property name="enemy" value="Magma Fire Elemental"/>
|
||||||
<property name="threatRange" type="int" value="40"/>
|
<property name="threatRange" type="int" value="40"/>
|
||||||
<property name="waypoints" value="75,70,69,71,72"/>
|
<property name="waypoints" value="75,70,69,71,72"/>
|
||||||
</properties>
|
</properties>
|
||||||
|
|||||||
@@ -178,16 +178,6 @@
|
|||||||
"rounds":3,
|
"rounds":3,
|
||||||
"entryFee":100,
|
"entryFee":100,
|
||||||
"rewards": [[
|
"rewards": [[
|
||||||
{
|
|
||||||
"type": "card",
|
|
||||||
"probability": 1,
|
|
||||||
"count":2,
|
|
||||||
"rarity": [
|
|
||||||
"Mythic Rare"
|
|
||||||
],
|
|
||||||
"colors": ["green"]
|
|
||||||
}
|
|
||||||
],[
|
|
||||||
{
|
{
|
||||||
"type": "gold",
|
"type": "gold",
|
||||||
"probability": 1,
|
"probability": 1,
|
||||||
@@ -199,6 +189,16 @@
|
|||||||
"count": 1,
|
"count": 1,
|
||||||
"itemNames": ["Dungeon Map","Mad Staff","Gold Boots","Disrupting Scepter"]
|
"itemNames": ["Dungeon Map","Mad Staff","Gold Boots","Disrupting Scepter"]
|
||||||
}
|
}
|
||||||
|
],[
|
||||||
|
{
|
||||||
|
"type": "card",
|
||||||
|
"probability": 1,
|
||||||
|
"count":2,
|
||||||
|
"rarity": [
|
||||||
|
"Rare","Mythic Rare"
|
||||||
|
],
|
||||||
|
"colors": ["green"]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
}</property>
|
}</property>
|
||||||
|
|||||||
@@ -154,16 +154,6 @@
|
|||||||
"rounds":3,
|
"rounds":3,
|
||||||
"entryFee":100,
|
"entryFee":100,
|
||||||
"rewards": [[
|
"rewards": [[
|
||||||
{
|
|
||||||
"type": "card",
|
|
||||||
"probability": 1,
|
|
||||||
"count":2,
|
|
||||||
"rarity": [
|
|
||||||
"Mythic Rare"
|
|
||||||
],
|
|
||||||
"colors": ["blue"]
|
|
||||||
}
|
|
||||||
],[
|
|
||||||
{
|
{
|
||||||
"type": "gold",
|
"type": "gold",
|
||||||
"probability": 1,
|
"probability": 1,
|
||||||
@@ -175,6 +165,16 @@
|
|||||||
"count": 1,
|
"count": 1,
|
||||||
"itemNames": ["Mithril Armor","Mithril Shield","Mithril Boots","Dagger"]
|
"itemNames": ["Mithril Armor","Mithril Shield","Mithril Boots","Dagger"]
|
||||||
}
|
}
|
||||||
|
],[
|
||||||
|
{
|
||||||
|
"type": "card",
|
||||||
|
"probability": 1,
|
||||||
|
"count":2,
|
||||||
|
"rarity": [
|
||||||
|
"Rare","Mythic Rare"
|
||||||
|
],
|
||||||
|
"colors": ["blue"]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
}</property>
|
}</property>
|
||||||
|
|||||||
@@ -160,16 +160,6 @@
|
|||||||
"rounds":3,
|
"rounds":3,
|
||||||
"entryFee":100,
|
"entryFee":100,
|
||||||
"rewards": [[
|
"rewards": [[
|
||||||
{
|
|
||||||
"type": "card",
|
|
||||||
"probability": 1,
|
|
||||||
"count":2,
|
|
||||||
"rarity": [
|
|
||||||
"Mythic Rare"
|
|
||||||
],
|
|
||||||
"colors": ["red"]
|
|
||||||
}
|
|
||||||
],[
|
|
||||||
{
|
{
|
||||||
"type": "gold",
|
"type": "gold",
|
||||||
"probability": 1,
|
"probability": 1,
|
||||||
@@ -181,6 +171,16 @@
|
|||||||
"count": 1,
|
"count": 1,
|
||||||
"itemNames": ["Aladdin's Ring","Axt","Ring of Immortals","Jandor's Ring"]
|
"itemNames": ["Aladdin's Ring","Axt","Ring of Immortals","Jandor's Ring"]
|
||||||
}
|
}
|
||||||
|
],[
|
||||||
|
{
|
||||||
|
"type": "card",
|
||||||
|
"probability": 1,
|
||||||
|
"count":2,
|
||||||
|
"rarity": [
|
||||||
|
"Rare","Mythic Rare"
|
||||||
|
],
|
||||||
|
"colors": ["red"]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
}</property>
|
}</property>
|
||||||
|
|||||||
@@ -153,16 +153,6 @@
|
|||||||
"rounds":3,
|
"rounds":3,
|
||||||
"entryFee":100,
|
"entryFee":100,
|
||||||
"rewards": [[
|
"rewards": [[
|
||||||
{
|
|
||||||
"type": "card",
|
|
||||||
"probability": 1,
|
|
||||||
"count":2,
|
|
||||||
"rarity": [
|
|
||||||
"Mythic Rare"
|
|
||||||
],
|
|
||||||
"colors": ["white"]
|
|
||||||
}
|
|
||||||
],[
|
|
||||||
{
|
{
|
||||||
"type": "gold",
|
"type": "gold",
|
||||||
"probability": 1,
|
"probability": 1,
|
||||||
@@ -175,6 +165,17 @@
|
|||||||
"count": 1,
|
"count": 1,
|
||||||
"itemNames": ["Gold Armor","Gold Shield","Gold Boots","Bronze Sword"]
|
"itemNames": ["Gold Armor","Gold Shield","Gold Boots","Bronze Sword"]
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type": "card",
|
||||||
|
"probability": 1,
|
||||||
|
"count":2,
|
||||||
|
"rarity": [
|
||||||
|
"Rare","Mythic Rare"
|
||||||
|
],
|
||||||
|
"colors": ["white"]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
}</property>
|
}</property>
|
||||||
|
|||||||
@@ -82,16 +82,6 @@
|
|||||||
"rounds":3,
|
"rounds":3,
|
||||||
"entryFee":100,
|
"entryFee":100,
|
||||||
"rewards": [[
|
"rewards": [[
|
||||||
{
|
|
||||||
"type": "card",
|
|
||||||
"probability": 1,
|
|
||||||
"count":2,
|
|
||||||
"rarity": [
|
|
||||||
"Mythic Rare"
|
|
||||||
],
|
|
||||||
"colors": ["black"]
|
|
||||||
}
|
|
||||||
],[
|
|
||||||
{
|
{
|
||||||
"type": "gold",
|
"type": "gold",
|
||||||
"probability": 1,
|
"probability": 1,
|
||||||
@@ -103,6 +93,17 @@
|
|||||||
"count": 1,
|
"count": 1,
|
||||||
"itemNames": ["Death Ring","Dark Armor","Dark Shield","Dark Boots"]
|
"itemNames": ["Death Ring","Dark Armor","Dark Shield","Dark Boots"]
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type": "card",
|
||||||
|
"probability": 1,
|
||||||
|
"count":2,
|
||||||
|
"rarity": [
|
||||||
|
"Rare","Mythic Rare"
|
||||||
|
],
|
||||||
|
"colors": ["black"]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
}</property>
|
}</property>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="50" height="27" tilewidth="16" tileheight="16" infinite="0" nextlayerid="9" nextobjectid="65">
|
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="50" height="27" tilewidth="16" tileheight="16" infinite="0" nextlayerid="9" nextobjectid="87">
|
||||||
<editorsettings>
|
<editorsettings>
|
||||||
<export target="wastetown..tmx" format="tmx"/>
|
<export target="wastetown..tmx" format="tmx"/>
|
||||||
</editorsettings>
|
</editorsettings>
|
||||||
@@ -12,12 +12,12 @@
|
|||||||
</layer>
|
</layer>
|
||||||
<layer id="7" name="Background" width="50" height="27">
|
<layer id="7" name="Background" width="50" height="27">
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
eJzV1jsOwjAMBmAvCMFZWDghG2PPwmm6lqOgDFEt41cSp0kjWUKomP+r08d6AViN+lx9NXJZBsmxjY39t0odKf9ZHSlzzn/meWQHnoXX4bmucP+SanFIfWoNUY7NYdH60H6e3O/bXrUGarEcpf1K78dRlhZH/j3OK513zVFrAejjkAweR8tcAH3GuUv2lJY959cs0Y7aKj3/kqPlGo9wcDOwHAtz/EiHZMAObZ/N4tAsX9hLm9UsDmrB3z/u/HGco8YS7ZDqydzzIi0jHXR+1DKj42U8g6hj1n2VHB7LLNe5Zen1P0c7evU+0hHxXj7KoT3nZ3do2XtZoh3WuxNXS7An0pDX0bNJ6weoMmc/
|
eJzN1jEOwjAMBdAsCMFZWDhhN8aehdN0DUdBFaoaIvv7x7ghljyURolfnZQup5QWI59nLv8ZlqF2jBotjpGDceT0yZHD42hxMecKzZdBehzS3BGG0qHNyzgyYUGO+h5T9+OyJ/u8rTGWg50TOVBYFmk/S/dZh3Y+cvquV3vuyNFikdaPdmgGxuG15Oq6rFsyaP1FtW/1I0u0g0nkYJ+/5mhZPynXvzikHliOWRjvPR8RDs1QOtA++/X9G+VAllfaE/VqFEdtKX+/XeVxkgNZtHWjHVrehXeexzKio+5fbenpYGIdPymO0lM6eu+rFscEvjPL3jBrRjlaTNu41YHus3O3GqOz3lue8PQqOq2z66m/lwP9z0euc4QD1X6UJdphfTtJOQd7Ig1b9O7NGm9yDuQI
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<layer id="2" name="Ground" width="50" height="27">
|
<layer id="2" name="Ground" width="50" height="27">
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
eJztl81OwkAQxxcxoa0fT+CNCF58CS9+xMRz1fAoHA34CL6BHwffiKMRvGMxJM6knex00i3tMqQk+k/+AdrtMr/OzmxrjL/eO9vjddR07P8cf5dDjtdSExxx25jbtv3+tGtNx7eRgwvjXoCTLP6FiDtp+7FocxTNi4pZ3A+h21osWhz8N+WAS8Y/C4z5Cux5H5ZNcPB1LxlQFH8vMuYT4j+DY90oz/LTEAep6P6jpoG97zwXnOUxtOOrcvDYNThiR+0Sw3GUv++SpQ8+idLxdzDHd418aNW5KwekUZgyfAQ2Xl7bUuusqXU4liv+V95vkhYHSoNjDv9777mH8bohNdmvilhwnQ+yY9fZ/AMxrhcV96u6LJr9ap7FTcZaHbbSc9NOfpxk6Wc8vr1Xu+9KHe2kn1Mxf1H+kMen96I0OPbg2n3wAfjQMY/kQFH+iKen1Ht99QzXvoBfwW+OecawXm4c52Ru6jKgNDjOIcYL8CX4KnCPw5yctqy55qKu6mrT9UHCvRI5ynrQhLmuNskhnxdHgX33kO9NE+PPofn+4Yq9TK49okrf4NLmWPWcVSTKD1eVviGlxcEZ6FkD9+hZSd1zJYy/at/g0uJYMoZxmHc3Kr+WlHj0KZRcV7/dmzZ4
|
eJzdl0tOwzAQhl2K1CQ8TsAO0bLhEmx4CIl1AfUoLFHLEbgBjwW3QrTsS4oqMaNk5MnIaRJnkiB+aURJbOf/PH4a46/3gX+00V7X+i8cqLY5yrTbxjhrgmETj5a64Bj3jbnp299P2zbo+V/k4ELfK4g49b8SvuO+H4s2h6td1Jj5fgjzQ4tFi4P/Tzngkv4XgTFfgX3vw9IEBx/3kgFF/oeRMZ/g/xSeHUZZlp+OOEiu/kfNA9vvPBec5TG05atwkHcNjnHO3EUhw1GU7XfJMoI4jpLyt9DGd0UOjXzk5YA0DROGj8D65XNbqs6YqsOxLviu7G+SFgdKg2MJ373z3MP4vCF1uV65WHCcT9JnV2n7E1FuGLnXq6osmuvVMvVNgXP1vpe8mw+y5STLKOXxXXubPrcfbCV/56J9V/6Qp87a28b9Q3KgKH/EM1Rae5vUDMbLdc43ZG6qMqDavA9iTk567ndLMa+qqi0O3CuRw/eOUaQmOeR5cRrYu0ede5OU9v0cVXTW5crbI3bAyy7EHsR+CV/aHEXnLJcoP1zP4OUF4hXiraQvLQ7OQGcN3KMXweZ6pJjxn0Gdc4gLiMuS9bU41oxhFmbjMNpclxR7zhc5rn4B6FMAyQ==
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<layer id="3" name="Clutter" width="50" height="27">
|
<layer id="3" name="Clutter" width="50" height="27">
|
||||||
@@ -25,36 +25,121 @@
|
|||||||
<property name="spriteLayer" type="bool" value="true"/>
|
<property name="spriteLayer" type="bool" value="true"/>
|
||||||
</properties>
|
</properties>
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
eJxjYBgFo2AUjIJRMFJAOe9Au4A4UI7MRnJzKZBdPYT8AMPo4uggj4v27iEXgNwbqMXAEKSF6qdyJPmhAnKBfsjTQhVDj6PB6J8yaJrPJZBOhkLc4Evr2PL2YPQDCJQQWQ7B8g5I/RpO2rqJEtDCiEqjA1jeWQv0wzogVhGkn9toAbyB6fAg0A8bgX5ZP4jjhRCA+cMfSCcIDbRryAOgci0O6PZ4IH49iOvC4Qbuo+HhDv4wD7QLiAMLCbhzsPkDV7vEngW3nsHkB3x1uQcBvYPFH9jaVVewhH8p1K+DsS1SihQPZUjss+z0cwMAagwq4A==
|
eJxjYBgY0MKHiQfafmrj4eAHeviFFPtIdRM9/UIv82npl4FMv7Qym16AFnbSwsxyXtLsphYg1bxyZDaSm0uB7Goi/YBuNzX8Q4o55UgYXRwd5HGRZj+lfiHVH4FaDAxBWqh+KkeSJ9d+evoDBHKBfsjTQhVDjyNS/EMvf5RB03wugXRCTtzQO3/gS+vY8ja9/YBsHj5QQmQ5BMs7IPVrOImzl57+gKtlRKXRASzvrAX6YR0QqwhSx16i3EaD+twbmA4PAv2wEeiX9TjiZSj5wx9IJwjRx15q9x9A5Voc0O3xQPwaT/kwmPxBbl6ldfuUFH/cx6KeVLMHGyAlTgerHxYyI9hDwf3I7ZKz7Ai2PQtuPX+YccvRG6DX5QZAP+RxQNgeBPQOFn9ga1chxwUMlEL9SqgtMhCgFCkeypDY2PxBKwAAKZqgGA==
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<objectgroup id="4" name="Objects">
|
<objectgroup id="4" name="Objects">
|
||||||
<object id="38" template="../obj/entry_up.tx" x="368.667" y="432.333">
|
<object id="38" template="../obj/entry_up.tx" x="385.956" y="430.172">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="teleport" value=""/>
|
<property name="teleport" value=""/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="54" template="../obj/enemy.tx" x="262.332" y="206.667">
|
<object id="54" template="../obj/enemy.tx" x="290.426" y="219.634">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Crab"/>
|
<property name="enemy" value="Crab"/>
|
||||||
|
<property name="threatRange" type="int" value="40"/>
|
||||||
|
<property name="waypoints" value="85,86"/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="57" template="../obj/enemy.tx" x="388.5" y="381">
|
<object id="57" template="../obj/enemy.tx" x="369.05" y="240.529">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Water Elemental"/>
|
<property name="enemy" value="Water Elemental"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="60" template="../obj/treasure.tx" x="485.073" y="231.023"/>
|
<object id="60" template="../obj/treasure.tx" x="485.073" y="231.023"/>
|
||||||
<object id="61" template="../obj/gold.tx" x="327.927" y="214.977"/>
|
<object id="61" template="../obj/gold.tx" x="401.404" y="198.409"/>
|
||||||
<object id="62" template="../obj/enemy.tx" x="375.677" y="184.811">
|
<object id="62" template="../obj/enemy.tx" x="375.677" y="184.811">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Bird"/>
|
<property name="enemy" value="Bird"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="63" template="../obj/enemy.tx" x="485.76" y="250.144">
|
<object id="63" template="../obj/enemy.tx" x="485.76" y="250.144">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Bird"/>
|
<property name="enemy" value="Bird"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
|
<object id="65" template="../obj/manashards.tx" x="493.373" y="283.747"/>
|
||||||
|
<object id="66" template="../obj/booster.tx" x="422.778" y="200.185">
|
||||||
|
<properties>
|
||||||
|
<property name="reward">[
|
||||||
|
{
|
||||||
|
"editions": [ "EXO" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 10,
|
||||||
|
"rarity": [ "Common" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "EXO" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Uncommon" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "EXO" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="67" template="../obj/booster.tx" x="259.255" y="226.118">
|
||||||
|
<properties>
|
||||||
|
<property name="reward">[
|
||||||
|
{
|
||||||
|
"editions": [ "STH" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 10,
|
||||||
|
"rarity": [ "Common" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "STH" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Uncommon" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "STH" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="68" template="../obj/gold.tx" x="442.948" y="205.948"/>
|
||||||
|
<object id="69" template="../obj/enemy.tx" x="456.635" y="326.249">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Jellyfish"/>
|
||||||
|
<property name="threatRange" type="int" value="40"/>
|
||||||
|
<property name="waypoints" value="84,72,73,74,77,83"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="71" template="../obj/enemy.tx" x="447.27" y="399.006">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Pirate"/>
|
||||||
|
<property name="threatRange" type="int" value="20"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="72" template="../obj/waypoint.tx" x="320" y="320"/>
|
||||||
|
<object id="73" template="../obj/waypoint.tx" x="189.38" y="314.723"/>
|
||||||
|
<object id="74" template="../obj/waypoint.tx" x="182.896" y="57.5531"/>
|
||||||
|
<object id="75" template="../obj/waypoint.tx" x="517.145" y="40.2644"/>
|
||||||
|
<object id="76" template="../obj/waypoint.tx" x="267.179" y="35.9422"/>
|
||||||
|
<object id="77" template="../obj/waypoint.tx" x="703.719" y="161.285"/>
|
||||||
|
<object id="78" template="../obj/waypoint.tx" x="605.03" y="85.6473"/>
|
||||||
|
<object id="79" template="../obj/waypoint.tx" x="663.379" y="115.903"/>
|
||||||
|
<object id="80" template="../obj/waypoint.tx" x="664.099" y="246.288"/>
|
||||||
|
<object id="81" template="../obj/waypoint.tx" x="664.82" y="315.443"/>
|
||||||
|
<object id="82" template="../obj/waypoint.tx" x="620.878" y="350.021"/>
|
||||||
|
<object id="83" template="../obj/waypoint.tx" x="490.492" y="366.589"/>
|
||||||
|
<object id="84" template="../obj/waypoint.tx" x="420.616" y="331.291"/>
|
||||||
|
<object id="85" template="../obj/waypoint.tx" x="284.468" y="248.45"/>
|
||||||
|
<object id="86" template="../obj/waypoint.tx" x="324.808" y="188.659"/>
|
||||||
</objectgroup>
|
</objectgroup>
|
||||||
</map>
|
</map>
|
||||||
|
|||||||
@@ -1,23 +1,18 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.5" tiledversion="1.7.2" orientation="orthogonal" renderorder="right-down" width="50" height="50" tilewidth="16" tileheight="16" infinite="0" nextlayerid="7" nextobjectid="59">
|
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="50" height="50" tilewidth="16" tileheight="16" infinite="0" nextlayerid="8" nextobjectid="152">
|
||||||
<editorsettings>
|
<editorsettings>
|
||||||
<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="3477" source="../tileset/buildings.tsx"/>
|
<tileset firstgid="10113" source="../tileset/buildings.tsx"/>
|
||||||
<layer id="6" name="Collision" width="50" height="50">
|
|
||||||
<data encoding="base64" compression="zlib">
|
|
||||||
eJzt2MEJgDAQAMEUECtQGzOVqtibOdACFCOr7MB9E5bkdaVLacltZq0T5kbnnzPVhvG468v6bAeJHSx2sNjBYgeLHSx2sNjBYgeLHSx2sNhxzbkvC1uD+3yP+0r3/JlvdcT+dchtGoL/isUOFjtY7GCxg8UOFjtY7GCxg8UOlugYfjI7HCk/rg==
|
|
||||||
</data>
|
|
||||||
</layer>
|
|
||||||
<layer id="1" name="Background" width="50" height="50">
|
<layer id="1" name="Background" width="50" height="50">
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
eJzt1yEOACAMADEsH0fuzVgEIQiSAamoGmI3R9RSYqINZvPV+wy37qXjTEvWDXTo0KFDhw4d/3Zk7KJjr+OF/wcAAAAAAAB36k/HeTg=
|
eJzt17sJgDAYRWErMYuJO9lbZhLnCo5hJajERzSY688pvkqFe9IEvasqHzGsxJ6fvV+C6i468rSUOgM66KCDDjrooMNuR4ktdNzr+MP/xxf6eqsV2JSidfHN6h0pm5Vbjs7/SiewPUdHENi+73j6rVrLG39sGZvyG2ix2TI57XvEwhkvHZZagsCOXCy1AAAAAAD0zHEheMc=
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<layer id="2" name="Ground" width="50" height="50">
|
<layer id="2" name="Ground" width="50" height="50">
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
eJzVWllOw0AM7WdzuBSUizbQ3oqW5gjEUi0sy+PxFkKflB/IeLzNG9vp9Xg4nAb5eV+fDEYm702R97X+70p0+V6fj6N9L74en8/1b/eEHed1/UJk3Ya+PNDlRvTx+nHa0IaIPmDPpaMD7MHjhevAD5INsGZen4cx1hhjaxy8QD9B7s0NeyQbIr6VZFWA62PNnez5w729a1pyIjYgOO+ALdYcA0wO+zWbp8HHGxwtTrPoRn2ovX9+nr9Fec9y/qO2aOeF54FmC5efvbu8tmj7Ud7CdVpOU/ne3I3YonG09D68Y80Jepdl7zELtuJV6qdMbiFfVHFlFFE/cb5YEv5GWZV+sPhV4pXT8BsX6e7XgDneqhu8+s9P/Xp5xutMypFonydXpRogYg+vma35Qc9Ypv5txdfji2zNDBgTNgBa8fXoktUB9UAdtB7OI8erS5UOU9E9hPpEdMG4ZuupqntuqzsTgBz/yqBc8KrgfBaV8Rh8PXs1OCdGZWR73SqgPZn11r5Hq232rkcB6IseN45K3LB3z9ZhFFvU7L0aid7bVfmJvtFmXF4sHT23OGtS/52RezbWm3xf6e739g98VpWZvfGaV6tNJqOtVl1a8x1vfcTl9Go1fF/jvcnpV48OGifQu8rih14dFqmB6exJs8Hab1bWnN5ZSm9/b5yrIOmVqY/4/G+vOTwg48/oHICuzfR6FFFu5bzqXU9rlYqaOdLL8zhYZ73S+qp73KsDYGS2e/ioNRPKzgIinBj9niJ9F8vMRGg/95eQ5kARn9BZaaavzSA7y5Fietm5D4sgM9v7b5BiWvlte88+W/vOawH9/lN1N0d8gtwX5b1oXdKT6fUt7O35vQHfr6r/nUlcIzKtvzfgqOzlK34D9gMJRs0E
|
eJzVWllOw0AM7Rc0hwugXIZjNbS9FYX2CMSiFpbl8XgLgSfND2Q83vLGdnre73ZPg7xelpXByOQ9K/Lel/+diS6fy3rb28/i+3Edl799JOw4LPtvRNZl6MsDXS5EH68fpxVtiOgD9pw6OsAZPF64D/wg2QB75mVdjbHGGFvj4AX6CXJvbtgj2RDxrSSrAlwfa+5k3z8827unJSdiA4LzDthizTHA5LBfs3kafLzB0eI0i27Uh9rzh/v7d1Oes7z/UVu094XngWYLl5+9u7y2aOdR3sJ9Wk5T+d7cjdiicbT0PDxjzQl6l2XvMQvW4lXqp0xuIV9UcWUUUT9xvrgl/I2yKv1g8avEK0/DT1yku18D5nirbvDqP9/16+UZrzMpR6J9nlyVaoCIPbxmtuYHfccy9W8rvh5fZGtmwJiwAdCKr0eXrA6oB+qg9XAeOV5dqnSYiu4h1CeiC8Y1W09V3XNr3ZkA5Pj/DMoFa+L1YT3ZnM+iMq6Dr2evBufEqIxsr1sFtCez39r3aLXN1vUoAH3R48ZRiRv27tk6jGKNmr1XIx0fv1dlfqJvtBmXF5RTJD3XeNek/jsj92CsN/m50t3v7R/4rCoze+M1r1abTEZbrbq05jve+ojL6dVq+LzGe5PTrx4dNE6gd5XFD706LFID09mTZoO136ysOb2zlN753jhXQdIrUx/x+d9Wc3hAxp/ROQDdm+n1KKLcynnVu5/WKhU1c6SX53Gwznql/VX3uFcHwMhs9/BRayaUnQVEODH6PUX6LpaZidB+7jchzYEiPqGz0kxfm0F2liPF9LRxHxZBZrb31yDFtPLb9pZ9tvad1wL6/afqbo74BLkvynvRuqQn0+tbONvzewN+XlX/O5O4RmRaf2/AUdnLV/wG7Av74c5G
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<layer id="3" name="Clutter" width="50" height="50">
|
<layer id="3" name="Clutter" width="50" height="50">
|
||||||
@@ -25,33 +20,272 @@
|
|||||||
<property name="spriteLayer" type="bool" value="true"/>
|
<property name="spriteLayer" type="bool" value="true"/>
|
||||||
</properties>
|
</properties>
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
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
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<objectgroup id="4" name="Objects">
|
<objectgroup id="4" name="Objects">
|
||||||
<object id="50" template="../obj/enemy.tx" x="455.333" y="335.167">
|
<object id="50" template="../obj/enemy.tx" x="468.333" y="324.667">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Griffin"/>
|
<property name="enemy" value="Sand Golem"/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="51" template="../obj/treasure.tx" x="431.833" y="431.833"/>
|
<object id="51" template="../obj/treasure.tx" x="459" y="479"/>
|
||||||
<object id="52" template="../obj/gold.tx" x="418.667" y="426.834"/>
|
<object id="53" template="../obj/enemy.tx" x="310.583" y="440.917">
|
||||||
<object id="53" template="../obj/enemy.tx" x="345.75" y="383.917">
|
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Griffin"/>
|
<property name="enemy" value="Griffin"/>
|
||||||
|
<property name="threatRange" type="int" value="20"/>
|
||||||
|
<property name="waypoints" value="110,82,75,71"/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="54" template="../obj/enemy.tx" x="390.584" y="427.916">
|
<object id="54" template="../obj/enemy.tx" x="407.751" y="441.583">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Griffin"/>
|
<property name="enemy" value="Griffin"/>
|
||||||
|
<property name="threatRange" type="int" value="40"/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
<object id="56" template="../obj/entry_down.tx" x="385" y="16.6667"/>
|
<object id="56" template="../obj/entry_down.tx" x="384.016" y="18.6342"/>
|
||||||
<object id="57" template="../obj/gold.tx" x="418.667" y="437.333"/>
|
<object id="58" template="../obj/enemy.tx" x="322" y="306.917">
|
||||||
<object id="58" template="../obj/enemy.tx" x="404.333" y="427.917">
|
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Griffin"/>
|
<property name="enemy" value="Griffin"/>
|
||||||
|
<property name="threatRange" type="int" value="40"/>
|
||||||
</properties>
|
</properties>
|
||||||
</object>
|
</object>
|
||||||
|
<object id="59" template="../obj/enemy.tx" x="145.802" y="183.221">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Sandwurm"/>
|
||||||
|
<property name="threatRange" type="int" value="20"/>
|
||||||
|
<property name="waypoints" value="112,108,109,110,111"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="60" template="../obj/enemy.tx" x="561.495" y="298.815">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Scorpion"/>
|
||||||
|
<property name="threatRange" type="int" value="20"/>
|
||||||
|
<property name="waypoints" value="69,66,68"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="61" template="../obj/enemy.tx" x="639.495" y="255.815">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Vulture"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="62" template="../obj/enemy.tx" x="54.8411" y="429.189">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Scorpion"/>
|
||||||
|
<property name="threatRange" type="int" value="20"/>
|
||||||
|
<property name="waypoints" value="80,81,82,83,84"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="64" template="../obj/enemy.tx" x="689" y="560.5">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Vulture"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="66" template="../obj/waypoint.tx" x="626.5" y="390"/>
|
||||||
|
<object id="67" template="../obj/waypoint.tx" x="781" y="203.5"/>
|
||||||
|
<object id="68" template="../obj/waypoint.tx" x="769" y="339"/>
|
||||||
|
<object id="69" template="../obj/waypoint.tx" x="612" y="322.5"/>
|
||||||
|
<object id="71" template="../obj/waypoint.tx" x="712.5" y="174"/>
|
||||||
|
<object id="72" template="../obj/waypoint.tx" x="647.5" y="161"/>
|
||||||
|
<object id="73" template="../obj/waypoint.tx" x="605.5" y="231.5"/>
|
||||||
|
<object id="74" template="../obj/enemy.tx" x="677" y="502">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Scorpion"/>
|
||||||
|
<property name="threatRange" type="int" value="20"/>
|
||||||
|
<property name="waypoints" value="75,76,75,78,77,78"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="75" template="../obj/waypoint.tx" x="752" y="512"/>
|
||||||
|
<object id="76" template="../obj/waypoint.tx" x="752.5" y="579"/>
|
||||||
|
<object id="77" template="../obj/waypoint.tx" x="597" y="563"/>
|
||||||
|
<object id="78" template="../obj/waypoint.tx" x="599.5" y="504.5"/>
|
||||||
|
<object id="79" template="../obj/enemy.tx" x="371.5" y="630">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Sandwurm"/>
|
||||||
|
<property name="threatRange" type="int" value="40"/>
|
||||||
|
<property name="waypoints" value="79,75,76,77"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="80" template="../obj/waypoint.tx" x="20" y="431.5"/>
|
||||||
|
<object id="81" template="../obj/waypoint.tx" x="167" y="436.5"/>
|
||||||
|
<object id="82" template="../obj/waypoint.tx" x="160" y="614"/>
|
||||||
|
<object id="83" template="../obj/waypoint.tx" x="1.5" y="602"/>
|
||||||
|
<object id="84" template="../obj/waypoint.tx" x="24" y="505"/>
|
||||||
|
<object id="85" template="../obj/enemy.tx" x="79" y="544">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Griffin"/>
|
||||||
|
<property name="threatRange" type="int" value="60"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="86" template="../obj/enemy.tx" x="118" y="751.5">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Sand Wurm"/>
|
||||||
|
<property name="threatRange" type="int" value="40"/>
|
||||||
|
<property name="waypoints" value="79,75,76,77"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="87" template="../obj/enemy.tx" x="579.5" y="699.5">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Sandwurm"/>
|
||||||
|
<property name="threatRange" type="int" value="40"/>
|
||||||
|
<property name="waypoints" value="79,75,76,77"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="88" template="../obj/waypoint.tx" x="211" y="749.5"/>
|
||||||
|
<object id="89" template="../obj/waypoint.tx" x="217.5" y="583.5"/>
|
||||||
|
<object id="90" template="../obj/waypoint.tx" x="261" y="410.5"/>
|
||||||
|
<object id="91" template="../obj/waypoint.tx" x="330.5" y="543.5"/>
|
||||||
|
<object id="92" template="../obj/waypoint.tx" x="340" y="716.5"/>
|
||||||
|
<object id="93" template="../obj/waypoint.tx" x="505.5" y="602"/>
|
||||||
|
<object id="94" template="../obj/waypoint.tx" x="488" y="703"/>
|
||||||
|
<object id="95" template="../obj/waypoint.tx" x="568" y="757.5"/>
|
||||||
|
<object id="96" template="../obj/waypoint.tx" x="668.5" y="656.5"/>
|
||||||
|
<object id="97" template="../obj/waypoint.tx" x="744.5" y="671.5"/>
|
||||||
|
<object id="98" template="../obj/waypoint.tx" x="739.5" y="733.5"/>
|
||||||
|
<object id="99" template="../obj/manashards.tx" x="530" y="482.5"/>
|
||||||
|
<object id="100" template="../obj/manashards.tx" x="709.5" y="788"/>
|
||||||
|
<object id="101" template="../obj/booster.tx" x="445.5" y="781">
|
||||||
|
<properties>
|
||||||
|
<property name="reward">[
|
||||||
|
{
|
||||||
|
"editions": [ "PCY" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 10,
|
||||||
|
"rarity": [ "Common" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "PCY" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Uncommon" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "PCY" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="103" template="../obj/gold.tx" x="75" y="571.5"/>
|
||||||
|
<object id="104" template="../obj/booster.tx" x="428.5" y="404.167">
|
||||||
|
<properties>
|
||||||
|
<property name="reward">[
|
||||||
|
{
|
||||||
|
"editions": [ "NEM" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 10,
|
||||||
|
"rarity": [ "Common" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "NEM" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Uncommon" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "NEM" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="105" template="../obj/booster.tx" x="482.5" y="431">
|
||||||
|
<properties>
|
||||||
|
<property name="reward">[
|
||||||
|
{
|
||||||
|
"editions": [ "TMP" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 10,
|
||||||
|
"rarity": [ "Common" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "TMP" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Uncommon" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "TMP" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="106" template="../obj/enemy.tx" x="378.5" y="377">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Sand Golem"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="108" template="../obj/waypoint.tx" x="38" y="247.5"/>
|
||||||
|
<object id="109" template="../obj/waypoint.tx" x="3.5" y="157.5"/>
|
||||||
|
<object id="110" template="../obj/waypoint.tx" x="123.5" y="105.5"/>
|
||||||
|
<object id="111" template="../obj/waypoint.tx" x="211.5" y="106.5"/>
|
||||||
|
<object id="112" template="../obj/waypoint.tx" x="200.5" y="232"/>
|
||||||
|
<object id="113" template="../obj/enemy.tx" x="571" y="127">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Sandwurm"/>
|
||||||
|
<property name="threatRange" type="int" value="20"/>
|
||||||
|
<property name="waypoints" value="118,115,72,71,67"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="114" template="../obj/waypoint.tx" x="509.5" y="244"/>
|
||||||
|
<object id="115" template="../obj/waypoint.tx" x="514" y="104.5"/>
|
||||||
|
<object id="116" template="../obj/waypoint.tx" x="345" y="237"/>
|
||||||
|
<object id="117" template="../obj/waypoint.tx" x="352.5" y="84"/>
|
||||||
|
<object id="118" template="../obj/waypoint.tx" x="472" y="85.5"/>
|
||||||
|
<object id="119" template="../obj/enemy.tx" x="190" y="675">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Sandwurm"/>
|
||||||
|
<property name="threatRange" type="int" value="40"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="120" template="../obj/enemy.tx" x="443" y="732">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Sand Wurm"/>
|
||||||
|
<property name="threatRange" type="int" value="40"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="121" template="../obj/enemy.tx" x="561" y="427">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Griffin"/>
|
||||||
|
<property name="threatRange" type="int" value="40"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="122" template="../obj/collision.tx" x="-2.6505" y="-18" width="803.301" height="16"/>
|
||||||
|
<object id="123" template="../obj/collision.tx" x="-2.6505" y="801" width="801.301" height="16"/>
|
||||||
|
<object id="124" template="../obj/collision.tx" x="800.35" y="-17" width="24.301" height="832"/>
|
||||||
|
<object id="125" template="../obj/collision.tx" x="-26.1505" y="-24" width="24.301" height="832"/>
|
||||||
|
<object id="126" template="../obj/collision.tx" x="299.85" y="286" width="8.301" height="171"/>
|
||||||
|
<object id="128" template="../obj/collision.tx" x="309.849" y="443.75" width="22.301" height="13.5"/>
|
||||||
|
<object id="129" template="../obj/collision.tx" x="330.349" y="446.75" width="22.301" height="13.5"/>
|
||||||
|
<object id="132" template="../obj/collision.tx" x="383.349" y="510.25" width="22.301" height="44.5"/>
|
||||||
|
<object id="133" template="../obj/collision.tx" x="392.849" y="544.75" width="47.301" height="23"/>
|
||||||
|
<object id="134" template="../obj/collision.tx" x="428.849" y="529.75" width="48.301" height="13.5"/>
|
||||||
|
<object id="135" template="../obj/collision.tx" x="468.349" y="496.75" width="69.301" height="31"/>
|
||||||
|
<object id="137" template="../obj/collision.tx" x="563.35" y="385.25" width="22.301" height="110.5"/>
|
||||||
|
<object id="139" template="../obj/collision.tx" x="399.849" y="482.75" width="84.801" height="5.5"/>
|
||||||
|
<object id="140" template="../obj/collision.tx" x="482.849" y="446.25" width="17.801" height="13.5"/>
|
||||||
|
<object id="141" template="../obj/collision.tx" x="346.349" y="364.75" width="6.301" height="59.5"/>
|
||||||
|
<object id="142" template="../obj/collision.tx" x="347.349" y="416.75" width="22.301" height="13.5"/>
|
||||||
|
<object id="143" template="../obj/collision.tx" x="360.349" y="426.75" width="7.801" height="13.5"/>
|
||||||
|
<object id="144" template="../obj/collision.tx" x="366.349" y="433.75" width="15.801" height="11"/>
|
||||||
|
<object id="145" template="../obj/collision.tx" x="377.849" y="441.75" width="4.801" height="26.5"/>
|
||||||
|
<object id="146" template="../obj/collision.tx" x="384.849" y="468.75" width="14.801" height="13.5"/>
|
||||||
|
<object id="147" template="../obj/collision.tx" x="376.35" y="319.75" width="6.301" height="43.5"/>
|
||||||
|
<object id="148" template="../obj/collision.tx" x="297.849" y="279.75" width="70.301" height="4"/>
|
||||||
|
<object id="149" template="../obj/collision.tx" x="395.849" y="313.75" width="70.301" height="7"/>
|
||||||
|
<object id="150" template="../obj/collision.tx" x="493.35" y="314.75" width="41.801" height="4"/>
|
||||||
|
<object id="151" template="../obj/collision.tx" x="399.599" y="378.25" width="84.801" height="5.5"/>
|
||||||
</objectgroup>
|
</objectgroup>
|
||||||
</map>
|
</map>
|
||||||
|
|||||||
123
forge-gui/res/adventure/Shandalar/maps/map/phyrexian_black1.tmx
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="31" height="17" tilewidth="16" tileheight="16" infinite="0" nextlayerid="10" nextobjectid="90">
|
||||||
|
<editorsettings>
|
||||||
|
<export target="wastetown..tmx" format="tmx"/>
|
||||||
|
</editorsettings>
|
||||||
|
<tileset firstgid="1" source="../tileset/main.tsx"/>
|
||||||
|
<tileset firstgid="10113" source="../tileset/buildings.tsx"/>
|
||||||
|
<tileset firstgid="11905" source="../tileset/DrossPitTiles.tsx"/>
|
||||||
|
<layer id="6" name="Collision" width="31" height="17">
|
||||||
|
<data encoding="base64" compression="zlib">
|
||||||
|
eJzVlM0NgCAMRrkYT3YZo67nEuJc6ia6gHAgYG1JIWBik+8g1L7+Bd0opQWqYRJubfYOtL5g596XZM9t/L7kfHLYEzOfEbyvJC98ZmNQ96EG47N0Sp3gtZrvHmR9wTvGGVXfAW+OzWcjfGM15FqP8h0i+WOTssO+4v5iNp4DJ2kPuHnj/lJzSFFobt8pP66eC55xJLxUdsn3l/rH7WjNdy2MH9uL2uxSffwD+wZNG6DH
|
||||||
|
</data>
|
||||||
|
</layer>
|
||||||
|
<layer id="1" name="Background" width="31" height="17">
|
||||||
|
<data encoding="base64" compression="zlib">
|
||||||
|
eJzr1mNgaBkg3D0E7N7BA6FBAJkeCH8PpN0DFd9N3APnXmqE96jdI89uctL5QNs9UGXLqN30t5taGACvMGLt
|
||||||
|
</data>
|
||||||
|
</layer>
|
||||||
|
<layer id="3" name="Clutter" width="31" height="17">
|
||||||
|
<properties>
|
||||||
|
<property name="spriteLayer" type="bool" value="true"/>
|
||||||
|
</properties>
|
||||||
|
<data encoding="base64" compression="zlib">
|
||||||
|
eJxjYGBg6NYbGAwCU4H0FBx4Mo3t7oHS2EDXCLF7r97A2X2MjnaD0tN0GoU5chrGlmYJAUrsRg7PaVjcQS+7sZk5kHY3QXEfAXXk4GYk85FxI5K/sbnxvB7ldhOTx7DZfWMA7aZGmA8FuwmlC1raPRAYAAIpNm8=
|
||||||
|
</data>
|
||||||
|
</layer>
|
||||||
|
<layer id="2" name="Walls" width="31" height="17">
|
||||||
|
<properties>
|
||||||
|
<property name="spriteLayer" type="bool" value="true"/>
|
||||||
|
</properties>
|
||||||
|
<data encoding="base64" compression="zlib">
|
||||||
|
eJxjYBgFo2Dwgvl6DAztWPACPdrb3Q+0ow2IZyLhDiCeSEW7D+Lw3yws9oDcMwNN3SEK3HIKqHcCDozNbnQ1pymw+zJauOILX2zxcIUG8Y8tfLHFAy3AChzhsZIOdo+CUUAOAAA9nDWk
|
||||||
|
</data>
|
||||||
|
</layer>
|
||||||
|
<layer id="8" name="Archway" width="31" height="17">
|
||||||
|
<data encoding="base64" compression="zlib">
|
||||||
|
eJxjYBgFo2AUjIJRMApGwSggHgAACDwAAQ==
|
||||||
|
</data>
|
||||||
|
</layer>
|
||||||
|
<objectgroup id="4" name="Objects">
|
||||||
|
<object id="38" template="../obj/entry_left.tx" x="0.706867" y="162.682"/>
|
||||||
|
<object id="48" template="../obj/treasure.tx" x="432.239" y="155.641"/>
|
||||||
|
<object id="50" template="../obj/enemy.tx" x="96.485" y="173.992">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Dross Gladiator"/>
|
||||||
|
<property name="threatRange" value="45"/>
|
||||||
|
<property name="waypoints" value="82,81,80,83,84,88,70,79,87,83"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="54" template="../obj/enemy.tx" x="399.841" y="149.68">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Dross Grimnarch"/>
|
||||||
|
<property name="threatRange" value="50"/>
|
||||||
|
<property name="waypoints" value=""/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="75" template="../obj/booster.tx" x="449.75" y="143.25">
|
||||||
|
<properties>
|
||||||
|
<property name="reward">[
|
||||||
|
{
|
||||||
|
"editions": [ "ONE" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 10,
|
||||||
|
"rarity": [ "Common" ]
|
||||||
|
"colors": [ "black" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "ONE" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 3,
|
||||||
|
"rarity": [ "Uncommon" ]
|
||||||
|
"colors": [ "black" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"editions": [ "ONE" ],
|
||||||
|
"type": "card",
|
||||||
|
"count": 1,
|
||||||
|
"rarity": [ "Rare", "Mythic Rare" ]
|
||||||
|
"colors": [ "black" ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="76" template="../obj/treasure.tx" x="432" y="143"/>
|
||||||
|
<object id="85" template="../obj/enemy.tx" x="216.75" y="165.25">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Dross Gladiator"/>
|
||||||
|
<property name="threatRange" value="50"/>
|
||||||
|
<property name="waypoints" value="66,78,65,77"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="86" template="../obj/enemy.tx" x="276" y="105.25">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Dross Gladiator"/>
|
||||||
|
<property name="threatRange" value="50"/>
|
||||||
|
<property name="waypoints" value="65,78,66,77"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
<object id="89" template="../obj/enemy.tx" x="47.75" y="87.5">
|
||||||
|
<properties>
|
||||||
|
<property name="enemy" value="Dross Gladiator"/>
|
||||||
|
<property name="threatRange" value="45"/>
|
||||||
|
<property name="waypoints" value="88,87,79,70,88,84,83,82,81,80,83,84"/>
|
||||||
|
</properties>
|
||||||
|
</object>
|
||||||
|
</objectgroup>
|
||||||
|
<objectgroup id="7" name="Waypoints">
|
||||||
|
<object id="65" template="../obj/waypoint.tx" x="295" y="107"/>
|
||||||
|
<object id="66" template="../obj/waypoint.tx" x="218" y="185"/>
|
||||||
|
<object id="70" template="../obj/waypoint.tx" x="44" y="61"/>
|
||||||
|
<object id="77" template="../obj/waypoint.tx" x="218" y="107"/>
|
||||||
|
<object id="78" template="../obj/waypoint.tx" x="295" y="185"/>
|
||||||
|
<object id="79" template="../obj/waypoint.tx" x="84" y="61"/>
|
||||||
|
<object id="80" template="../obj/waypoint.tx" x="80" y="236"/>
|
||||||
|
<object id="81" template="../obj/waypoint.tx" x="114" y="236"/>
|
||||||
|
<object id="82" template="../obj/waypoint.tx" x="114" y="175"/>
|
||||||
|
<object id="83" template="../obj/waypoint.tx" x="80" y="175"/>
|
||||||
|
<object id="84" template="../obj/waypoint.tx" x="54.75" y="162"/>
|
||||||
|
<object id="87" template="../obj/waypoint.tx" x="84" y="118"/>
|
||||||
|
<object id="88" template="../obj/waypoint.tx" x="44" y="118"/>
|
||||||
|
</objectgroup>
|
||||||
|
</map>
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
<tileset firstgid="11905" source="../tileset/Copperhost_Tiles.tsx"/>
|
<tileset firstgid="11905" source="../tileset/Copperhost_Tiles.tsx"/>
|
||||||
<layer id="6" name="Collision" width="29" height="34">
|
<layer id="6" name="Collision" width="29" height="34">
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
eJztllsKxSAMRN1A3Uwfd6W3XVfbDRU/hBBMjDoVCg7ky9bD5IXODQX9p/7M2Tt3GWP1OKZVKObJvGzk3h87u0FMLuob5SvXM28wLT0Theop6iN43gvjIHmqYZb0bIqDYs6Z3LUy+ZzQmdDOWphSPUPNtLMWppRb7c436nkKeUQxpZppUVtPy+xZZGUuXo7UHdr3S4FPS96ixu77/u6L6rn7osbuq2f23H0oWZkpb1vmX/7ORbx3c95Rb87BbGc+/yCvUQ==
|
eJztlksOgzAMRLPpsrkMlJ60cC7gQlUWkSw3dhw8gCplJK8CeRr/lBC6kj7P65lDDGEzxivimFahmCvzMpF73+xsBzG5qG+Ur1rPnMG09EwWqqeoj+R5boyF5OkIs6VnSxwUc6jkzsvkc0JnQjvzMKV6ppppZx6mlFvtzjPquQp5RDGlmmlxtJ6W2bPIyhyjHKU7tO/HBp+WvGX13ff/uy/ryt2Xdcfumx+/0XefjemVlVnyNlX+5e9cxHu35h315uxMP/MLiOKyFQ==
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<layer id="1" name="Background" width="29" height="34">
|
<layer id="1" name="Background" width="29" height="34">
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
</object>
|
</object>
|
||||||
<object id="118" template="../obj/enemy.tx" x="277.693" y="226.745">
|
<object id="118" template="../obj/enemy.tx" x="277.693" y="226.745">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Magma Elemental"/>
|
<property name="enemy" value="Magma Fire Elemental"/>
|
||||||
<property name="spawn.Easy" type="bool" value="false"/>
|
<property name="spawn.Easy" type="bool" value="false"/>
|
||||||
<property name="spawn.Normal" type="bool" value="true"/>
|
<property name="spawn.Normal" type="bool" value="true"/>
|
||||||
<property name="threatRange" type="int" value="40"/>
|
<property name="threatRange" type="int" value="40"/>
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
</object>
|
</object>
|
||||||
<object id="150" template="../obj/enemy.tx" x="213.842" y="94.272">
|
<object id="150" template="../obj/enemy.tx" x="213.842" y="94.272">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Magma Elemental"/>
|
<property name="enemy" value="Magma Fire Elemental"/>
|
||||||
<property name="spawn.Hard" type="bool" value="true"/>
|
<property name="spawn.Hard" type="bool" value="true"/>
|
||||||
<property name="threatRange" type="int" value="40"/>
|
<property name="threatRange" type="int" value="40"/>
|
||||||
<property name="waypoints" value="174,173"/>
|
<property name="waypoints" value="174,173"/>
|
||||||
@@ -95,7 +95,7 @@
|
|||||||
</object>
|
</object>
|
||||||
<object id="169" template="../obj/enemy.tx" x="360.842" y="71.6053">
|
<object id="169" template="../obj/enemy.tx" x="360.842" y="71.6053">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="enemy" value="Magma Elemental"/>
|
<property name="enemy" value="Magma Fire Elemental"/>
|
||||||
<property name="spawn.Hard" type="bool" value="true"/>
|
<property name="spawn.Hard" type="bool" value="true"/>
|
||||||
<property name="threatRange" type="int" value="40"/>
|
<property name="threatRange" type="int" value="40"/>
|
||||||
<property name="waypoints" value="175,176,177,176"/>
|
<property name="waypoints" value="175,176,177,176"/>
|
||||||
|
|||||||
BIN
forge-gui/res/adventure/Shandalar/maps/tileset/DrossPitTiles.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<tileset version="1.9" tiledversion="1.9.2" name="DrossPitTiles" tilewidth="16" tileheight="16" tilecount="99" columns="9">
|
||||||
|
<image source="DrossPitTiles.png" width="144" height="176"/>
|
||||||
|
</tileset>
|
||||||
BIN
forge-gui/res/adventure/Shandalar/maps/tileset/FarmFood.png
Normal file
|
After Width: | Height: | Size: 161 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<tileset version="1.9" tiledversion="1.9.2" name="FarmFood" tilewidth="16" tileheight="16" tilecount="1024" columns="32">
|
||||||
|
<image source="FarmFood.png" width="512" height="512"/>
|
||||||
|
</tileset>
|
||||||
@@ -12,3 +12,6 @@ GitLabSmall
|
|||||||
CopperhostForest
|
CopperhostForest
|
||||||
xy: 64,0
|
xy: 64,0
|
||||||
size: 32, 32
|
size: 32, 32
|
||||||
|
DrossOutpost
|
||||||
|
xy: 96,0
|
||||||
|
size: 32, 32
|
||||||
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 744 KiB After Width: | Height: | Size: 747 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
@@ -8,40 +8,40 @@ Avatar
|
|||||||
size: 16, 16
|
size: 16, 16
|
||||||
Idle
|
Idle
|
||||||
xy: 00, 11
|
xy: 00, 11
|
||||||
size: 32, 20
|
size: 32, 21
|
||||||
Idle
|
Idle
|
||||||
xy: 32, 11
|
xy: 32, 11
|
||||||
size: 32, 20
|
size: 32, 21
|
||||||
Idle
|
Idle
|
||||||
xy: 64, 11
|
xy: 64, 11
|
||||||
size: 32, 20
|
size: 32, 21
|
||||||
Idle
|
Idle
|
||||||
xy: 96, 11
|
xy: 96, 11
|
||||||
size: 32, 20
|
size: 32, 21
|
||||||
Walk
|
Walk
|
||||||
xy: 0, 40
|
xy: 0, 40
|
||||||
size: 32, 20
|
size: 32, 24
|
||||||
Walk
|
Walk
|
||||||
xy: 32, 40
|
xy: 32, 40
|
||||||
size: 32, 22
|
size: 32, 24
|
||||||
Walk
|
Walk
|
||||||
xy: 64, 40
|
xy: 64, 40
|
||||||
size: 32, 22
|
size: 32, 24
|
||||||
Walk
|
Walk
|
||||||
xy: 96, 40
|
xy: 96, 40
|
||||||
size: 32, 22
|
size: 32, 24
|
||||||
Walk
|
Walk
|
||||||
xy: 128, 40
|
xy: 128, 40
|
||||||
size: 32, 22
|
size: 32, 24
|
||||||
Walk
|
Walk
|
||||||
xy: 160, 40
|
xy: 160, 40
|
||||||
size: 32, 22
|
size: 32, 24
|
||||||
Walk
|
Walk
|
||||||
xy: 192, 40
|
xy: 192, 40
|
||||||
size: 32, 22
|
size: 32, 24
|
||||||
Walk
|
Walk
|
||||||
xy: 224, 40
|
xy: 224, 40
|
||||||
size: 32, 22
|
size: 32, 24
|
||||||
Attack
|
Attack
|
||||||
xy: 0, 64
|
xy: 0, 64
|
||||||
size: 32, 32
|
size: 32, 32
|
||||||
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,98 @@
|
|||||||
|
frogboss.png
|
||||||
|
size: 1152,512
|
||||||
|
format: RGBA8888
|
||||||
|
filter: Nearest,Nearest
|
||||||
|
repeat: none
|
||||||
|
Avatar
|
||||||
|
xy: 33, 273
|
||||||
|
size: 39, 28
|
||||||
|
Idle
|
||||||
|
xy: 18,14
|
||||||
|
size: 65, 50
|
||||||
|
Idle
|
||||||
|
xy: 114,14
|
||||||
|
size: 65, 50
|
||||||
|
Idle
|
||||||
|
xy: 210,14
|
||||||
|
size: 65, 50
|
||||||
|
Idle
|
||||||
|
xy: 306,14
|
||||||
|
size: 65, 50
|
||||||
|
Idle
|
||||||
|
xy: 402,14
|
||||||
|
size: 65, 50
|
||||||
|
Walk
|
||||||
|
xy: 18, 68
|
||||||
|
size: 70, 60
|
||||||
|
Walk
|
||||||
|
xy: 114, 68
|
||||||
|
size: 70, 60
|
||||||
|
Walk
|
||||||
|
xy: 210, 68
|
||||||
|
size: 70, 60
|
||||||
|
Walk
|
||||||
|
xy: 306, 68
|
||||||
|
size: 70, 60
|
||||||
|
Walk
|
||||||
|
xy: 402, 68
|
||||||
|
size: 70, 60
|
||||||
|
Walk
|
||||||
|
xy: 498, 68
|
||||||
|
size: 70, 60
|
||||||
|
Walk
|
||||||
|
xy: 594, 68
|
||||||
|
size: 70, 60
|
||||||
|
Walk
|
||||||
|
xy: 690, 68
|
||||||
|
size: 70, 60
|
||||||
|
Walk
|
||||||
|
xy: 786, 68
|
||||||
|
size: 70, 60
|
||||||
|
Walk
|
||||||
|
xy: 882, 68
|
||||||
|
size: 70, 60
|
||||||
|
Walk
|
||||||
|
xy: 978, 68
|
||||||
|
size: 70, 60
|
||||||
|
Walk
|
||||||
|
xy: 1074, 68
|
||||||
|
size: 70, 60
|
||||||
|
Attack
|
||||||
|
xy: 18, 200
|
||||||
|
size: 78, 57
|
||||||
|
Attack
|
||||||
|
xy: 114, 200
|
||||||
|
size: 78, 57
|
||||||
|
Attack
|
||||||
|
xy: 210, 200
|
||||||
|
size: 78, 57
|
||||||
|
Attack
|
||||||
|
xy: 306, 200
|
||||||
|
size: 78, 57
|
||||||
|
Death
|
||||||
|
xy: 18,462
|
||||||
|
size: 70, 50
|
||||||
|
Death
|
||||||
|
xy: 114,462
|
||||||
|
size: 70, 50
|
||||||
|
Death
|
||||||
|
xy: 210,462
|
||||||
|
size: 70, 50
|
||||||
|
Death
|
||||||
|
xy: 306,462
|
||||||
|
size: 70, 50
|
||||||
|
Death
|
||||||
|
xy: 402,462
|
||||||
|
size: 70, 50
|
||||||
|
Death
|
||||||
|
xy: 498,462
|
||||||
|
size: 70, 50
|
||||||
|
Death
|
||||||
|
xy: 594,462
|
||||||
|
size: 70, 50
|
||||||
|
Death
|
||||||
|
xy: 690,462
|
||||||
|
size: 70, 50
|
||||||
|
Death
|
||||||
|
xy: 786,462
|
||||||
|
size: 70, 50
|
||||||
BIN
forge-gui/res/adventure/Shandalar/sprites/boss/frogboss.png
Normal file
|
After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,20 @@
|
|||||||
|
oozeboss.png
|
||||||
|
size: 64,16
|
||||||
|
format: RGBA8888
|
||||||
|
filter: Nearest,Nearest
|
||||||
|
repeat: none
|
||||||
|
Avatar
|
||||||
|
xy: 1,1
|
||||||
|
size: 15, 14
|
||||||
|
Idle
|
||||||
|
xy: 0, 0
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 16, 0
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 32, 0
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 48, 0
|
||||||
|
size: 16, 16
|
||||||
BIN
forge-gui/res/adventure/Shandalar/sprites/boss/oozeboss.png
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
@@ -42,30 +42,30 @@ Walk
|
|||||||
Walk
|
Walk
|
||||||
xy: 1168, 140
|
xy: 1168, 140
|
||||||
size: 80, 50
|
size: 80, 50
|
||||||
Attack
|
|
||||||
xy: 48, 230
|
|
||||||
size: 80, 50
|
|
||||||
Attack
|
Attack
|
||||||
xy: 208, 230
|
xy: 40, 208
|
||||||
size: 80, 50
|
size: 130, 80
|
||||||
Attack
|
|
||||||
xy: 368, 230
|
|
||||||
size: 80, 50
|
|
||||||
Attack
|
Attack
|
||||||
xy: 528, 230
|
xy: 200, 208
|
||||||
size: 80, 50
|
size: 130, 80
|
||||||
Attack
|
|
||||||
xy: 688, 230
|
|
||||||
size: 80, 50
|
|
||||||
Attack
|
Attack
|
||||||
xy: 848, 230
|
xy: 360, 208
|
||||||
size: 80, 50
|
size: 130, 80
|
||||||
Attack
|
Attack
|
||||||
xy: 1008, 230
|
xy: 520, 208
|
||||||
size: 80, 50
|
size: 130, 80
|
||||||
|
Attack
|
||||||
|
xy: 680, 208
|
||||||
|
size: 130, 80
|
||||||
|
Attack
|
||||||
|
xy: 840, 208
|
||||||
|
size: 130, 80
|
||||||
|
Attack
|
||||||
|
xy: 1000, 208
|
||||||
|
size: 130, 80
|
||||||
Death
|
Death
|
||||||
xy: 48, 430
|
xy: 48, 430
|
||||||
size: 16, 50
|
size: 100, 50
|
||||||
Death
|
Death
|
||||||
xy: 208, 430
|
xy: 208, 430
|
||||||
size: 100,50
|
size: 100,50
|
||||||
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
@@ -7,50 +7,50 @@ Avatar
|
|||||||
xy: 20, 10
|
xy: 20, 10
|
||||||
size: 12, 13
|
size: 12, 13
|
||||||
Idle
|
Idle
|
||||||
xy: 0, 7
|
xy: 0, 5
|
||||||
size: 32, 25
|
size: 32, 27
|
||||||
Idle
|
Idle
|
||||||
xy: 32, 7
|
xy: 32, 5
|
||||||
size: 32, 25
|
size: 32, 27
|
||||||
Idle
|
Idle
|
||||||
xy: 64, 7
|
xy: 64, 5
|
||||||
size: 32, 25
|
size: 32, 27
|
||||||
Idle
|
Idle
|
||||||
xy: 96, 7
|
xy: 96, 5
|
||||||
size: 32, 25
|
size: 32, 27
|
||||||
Idle
|
Idle
|
||||||
xy: 128, 7
|
xy: 128, 5
|
||||||
size: 32, 25
|
size: 32, 27
|
||||||
Idle
|
Idle
|
||||||
xy: 160, 7
|
xy: 160, 5
|
||||||
size: 32, 25
|
size: 32, 27
|
||||||
Idle
|
Idle
|
||||||
xy: 192, 7
|
xy: 192, 5
|
||||||
size: 32, 25
|
size: 32, 27
|
||||||
Walk
|
Walk
|
||||||
xy: 0, 41
|
xy: 0, 37
|
||||||
size: 32, 25
|
size: 32, 27
|
||||||
Walk
|
Walk
|
||||||
xy: 32,41
|
xy: 32,37
|
||||||
size: 32, 25
|
size: 32, 27
|
||||||
Walk
|
Walk
|
||||||
xy: 64, 41
|
xy: 64, 37
|
||||||
size: 32, 25
|
size: 32, 27
|
||||||
Walk
|
Walk
|
||||||
xy: 96, 41
|
xy: 96, 37
|
||||||
size: 32, 25
|
size: 32, 27
|
||||||
Walk
|
Walk
|
||||||
xy: 128, 41
|
xy: 128, 37
|
||||||
size: 32, 25
|
size: 32, 27
|
||||||
Walk
|
Walk
|
||||||
xy: 160, 41
|
xy: 160, 37
|
||||||
size: 32, 25
|
size: 32, 27
|
||||||
Walk
|
Walk
|
||||||
xy: 192, 41
|
xy: 192, 37
|
||||||
size: 32, 25
|
size: 32, 27
|
||||||
Walk
|
Walk
|
||||||
xy: 224, 41
|
xy: 224, 37
|
||||||
size: 32, 25
|
size: 32, 27
|
||||||
Attack
|
Attack
|
||||||
xy: 0, 96
|
xy: 0, 96
|
||||||
size: 32, 32
|
size: 32, 32
|
||||||
@@ -83,7 +83,4 @@ Death
|
|||||||
size: 32, 32
|
size: 32, 32
|
||||||
Death
|
Death
|
||||||
xy: 64, 128
|
xy: 64, 128
|
||||||
size: 32, 32
|
size: 32, 32
|
||||||
Death
|
|
||||||
xy: 96, 128
|
|
||||||
size: 32, 32
|
|
||||||
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
56
forge-gui/res/adventure/Shandalar/sprites/crab.atlas
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
crab.png
|
||||||
|
size: 128,128
|
||||||
|
format: RGBA8888
|
||||||
|
filter: Nearest,Nearest
|
||||||
|
repeat: none
|
||||||
|
Avatar
|
||||||
|
xy: 41, 111
|
||||||
|
size: 15, 16
|
||||||
|
Idle
|
||||||
|
xy: 5,16
|
||||||
|
size: 20, 16
|
||||||
|
Idle
|
||||||
|
xy: 37,16
|
||||||
|
size: 20, 16
|
||||||
|
Idle
|
||||||
|
xy: 69,16
|
||||||
|
size: 20, 16
|
||||||
|
Idle
|
||||||
|
xy: 101,16
|
||||||
|
size: 20, 16
|
||||||
|
Walk
|
||||||
|
xy: 5,48
|
||||||
|
size: 21, 16
|
||||||
|
Walk
|
||||||
|
xy: 37,48
|
||||||
|
size: 21, 16
|
||||||
|
Walk
|
||||||
|
xy: 69,48
|
||||||
|
size: 21, 16
|
||||||
|
Walk
|
||||||
|
xy: 101,48
|
||||||
|
size: 21, 16
|
||||||
|
Attack
|
||||||
|
xy: 6,112
|
||||||
|
size: 20, 16
|
||||||
|
Attack
|
||||||
|
xy: 38,112
|
||||||
|
size: 20, 16
|
||||||
|
Attack
|
||||||
|
xy: 70,112
|
||||||
|
size: 20, 16
|
||||||
|
Attack
|
||||||
|
xy: 102,112
|
||||||
|
size: 20, 16
|
||||||
|
Death
|
||||||
|
xy: 5, 80
|
||||||
|
size: 21, 16
|
||||||
|
Death
|
||||||
|
xy: 37, 80
|
||||||
|
size: 21, 16
|
||||||
|
Death
|
||||||
|
xy: 69, 80
|
||||||
|
size: 21, 16
|
||||||
|
Death
|
||||||
|
xy: 102, 80
|
||||||
|
size: 21, 16
|
||||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
@@ -31,29 +31,29 @@ Idle
|
|||||||
xy: 230, 17
|
xy: 230, 17
|
||||||
size: 20, 15
|
size: 20, 15
|
||||||
Walk
|
Walk
|
||||||
xy: 6, 108
|
xy: 5, 112
|
||||||
size: 25, 20
|
size: 25, 16
|
||||||
Walk
|
Walk
|
||||||
xy: 38, 108
|
xy: 37, 112
|
||||||
size: 25, 20
|
size: 25, 16
|
||||||
Walk
|
Walk
|
||||||
xy: 70, 108
|
xy: 69, 112
|
||||||
size: 25, 20
|
size: 25, 16
|
||||||
Walk
|
Walk
|
||||||
xy: 102,108
|
xy: 101,112
|
||||||
size: 25, 20
|
size: 25, 16
|
||||||
Walk
|
Walk
|
||||||
xy: 134, 108
|
xy: 133, 112
|
||||||
size: 25, 20
|
size: 25, 16
|
||||||
Walk
|
Walk
|
||||||
xy: 166,108
|
xy: 165,112
|
||||||
size: 25, 20
|
size: 25, 16
|
||||||
Walk
|
Walk
|
||||||
xy: 198, 108
|
xy: 197, 112
|
||||||
size: 25, 20
|
size: 25, 16
|
||||||
Walk
|
Walk
|
||||||
xy: 230,108
|
xy: 229,112
|
||||||
size: 25, 20
|
size: 25, 16
|
||||||
Attack
|
Attack
|
||||||
xy: 0, 172
|
xy: 0, 172
|
||||||
size: 32, 20
|
size: 32, 20
|
||||||
@@ -66,9 +66,9 @@ Attack
|
|||||||
Death
|
Death
|
||||||
xy: 0, 204
|
xy: 0, 204
|
||||||
size: 32, 20
|
size: 32, 20
|
||||||
Attack
|
Death
|
||||||
xy: 32, 204
|
xy: 32, 204
|
||||||
size: 32, 20
|
size: 32, 20
|
||||||
Attack
|
Death
|
||||||
xy: 64, 204
|
xy: 64, 204
|
||||||
size: 32, 20
|
size: 32, 20
|
||||||
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
@@ -8,7 +8,7 @@ Avatar
|
|||||||
size: 14, 12
|
size: 14, 12
|
||||||
Idle
|
Idle
|
||||||
xy: 7,8
|
xy: 7,8
|
||||||
size: 20, 20
|
size: 22, 20
|
||||||
Idle
|
Idle
|
||||||
xy: 39,8
|
xy: 39,8
|
||||||
size: 22, 20
|
size: 22, 20
|
||||||
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
@@ -0,0 +1,68 @@
|
|||||||
|
drossgladiator.png
|
||||||
|
size: 64,96
|
||||||
|
format: RGBA8888
|
||||||
|
filter: Nearest,Nearest
|
||||||
|
repeat: none
|
||||||
|
Avatar
|
||||||
|
xy: 0, 0
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 0, 16
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 16, 16
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 32, 16
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 48, 16
|
||||||
|
size: 16, 16
|
||||||
|
Walk
|
||||||
|
xy: 0, 32
|
||||||
|
size: 16, 16
|
||||||
|
Walk
|
||||||
|
xy: 16, 32
|
||||||
|
size: 16, 16
|
||||||
|
Walk
|
||||||
|
xy: 32, 32
|
||||||
|
size: 16, 16
|
||||||
|
Walk
|
||||||
|
xy: 48, 32
|
||||||
|
size: 16, 16
|
||||||
|
Attack
|
||||||
|
xy: 0, 48
|
||||||
|
size: 16, 16
|
||||||
|
Attack
|
||||||
|
xy: 16, 48
|
||||||
|
size: 16, 16
|
||||||
|
Attack
|
||||||
|
xy: 32, 48
|
||||||
|
size: 16, 16
|
||||||
|
Attack
|
||||||
|
xy: 48, 48
|
||||||
|
size: 16, 16
|
||||||
|
Hit
|
||||||
|
xy: 0, 64
|
||||||
|
size: 16, 16
|
||||||
|
Hit
|
||||||
|
xy: 16, 64
|
||||||
|
size: 16, 16
|
||||||
|
Hit
|
||||||
|
xy: 32, 64
|
||||||
|
size: 16, 16
|
||||||
|
Hit
|
||||||
|
xy: 48, 64
|
||||||
|
size: 16, 16
|
||||||
|
Death
|
||||||
|
xy: 0, 80
|
||||||
|
size: 16, 16
|
||||||
|
Death
|
||||||
|
xy: 16, 80
|
||||||
|
size: 16, 16
|
||||||
|
Death
|
||||||
|
xy: 32, 80
|
||||||
|
size: 16, 16
|
||||||
|
Death
|
||||||
|
xy: 48, 80
|
||||||
|
size: 16, 16
|
||||||
BIN
forge-gui/res/adventure/Shandalar/sprites/drossgladiator.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
@@ -0,0 +1,68 @@
|
|||||||
|
drossgrimnarch.png
|
||||||
|
size: 64,96
|
||||||
|
format: RGBA8888
|
||||||
|
filter: Nearest,Nearest
|
||||||
|
repeat: none
|
||||||
|
Avatar
|
||||||
|
xy: 0, 0
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 0, 16
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 16, 16
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 32, 16
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 48, 16
|
||||||
|
size: 16, 16
|
||||||
|
Walk
|
||||||
|
xy: 0, 32
|
||||||
|
size: 16, 16
|
||||||
|
Walk
|
||||||
|
xy: 16, 32
|
||||||
|
size: 16, 16
|
||||||
|
Walk
|
||||||
|
xy: 32, 32
|
||||||
|
size: 16, 16
|
||||||
|
Walk
|
||||||
|
xy: 48, 32
|
||||||
|
size: 16, 16
|
||||||
|
Attack
|
||||||
|
xy: 0, 48
|
||||||
|
size: 16, 16
|
||||||
|
Attack
|
||||||
|
xy: 16, 48
|
||||||
|
size: 16, 16
|
||||||
|
Attack
|
||||||
|
xy: 32, 48
|
||||||
|
size: 16, 16
|
||||||
|
Attack
|
||||||
|
xy: 48, 48
|
||||||
|
size: 16, 16
|
||||||
|
Hit
|
||||||
|
xy: 0, 64
|
||||||
|
size: 16, 16
|
||||||
|
Hit
|
||||||
|
xy: 16, 64
|
||||||
|
size: 16, 16
|
||||||
|
Hit
|
||||||
|
xy: 32, 64
|
||||||
|
size: 16, 16
|
||||||
|
Hit
|
||||||
|
xy: 48, 64
|
||||||
|
size: 16, 16
|
||||||
|
Death
|
||||||
|
xy: 0, 80
|
||||||
|
size: 16, 16
|
||||||
|
Death
|
||||||
|
xy: 16, 80
|
||||||
|
size: 16, 16
|
||||||
|
Death
|
||||||
|
xy: 32, 80
|
||||||
|
size: 16, 16
|
||||||
|
Death
|
||||||
|
xy: 48, 80
|
||||||
|
size: 16, 16
|
||||||
BIN
forge-gui/res/adventure/Shandalar/sprites/drossgrimnarch.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
53
forge-gui/res/adventure/Shandalar/sprites/dungeon/bat.atlas
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
bat.png
|
||||||
|
size: 80,72
|
||||||
|
format: RGBA8888
|
||||||
|
filter: Nearest,Nearest
|
||||||
|
repeat: none
|
||||||
|
Avatar
|
||||||
|
xy: 66, 1
|
||||||
|
size: 12, 9
|
||||||
|
Idle
|
||||||
|
xy: 0, 0
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 16, 0
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 32, 0
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 48, 0
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 64, 0
|
||||||
|
size: 16, 16
|
||||||
|
Walk
|
||||||
|
xy: 0, 24
|
||||||
|
size: 16, 16
|
||||||
|
Walk
|
||||||
|
xy: 16, 24
|
||||||
|
size: 16, 16
|
||||||
|
Walk
|
||||||
|
xy: 32, 24
|
||||||
|
size: 16, 16
|
||||||
|
Walk
|
||||||
|
xy: 48, 24
|
||||||
|
size: 16, 16
|
||||||
|
Walk
|
||||||
|
xy: 64, 24
|
||||||
|
size: 16, 16
|
||||||
|
Death
|
||||||
|
xy: 0, 50
|
||||||
|
size: 16, 20
|
||||||
|
Death
|
||||||
|
xy: 16, 50
|
||||||
|
size: 16, 20
|
||||||
|
Death
|
||||||
|
xy: 32, 50
|
||||||
|
size: 16, 20
|
||||||
|
Death
|
||||||
|
xy: 48, 50
|
||||||
|
size: 16, 20
|
||||||
|
Death
|
||||||
|
xy: 62, 50
|
||||||
|
size: 16, 20
|
||||||
BIN
forge-gui/res/adventure/Shandalar/sprites/dungeon/bat.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
@@ -1,56 +0,0 @@
|
|||||||
crab.png
|
|
||||||
size: 128,128
|
|
||||||
format: RGBA8888
|
|
||||||
filter: Nearest,Nearest
|
|
||||||
repeat: none
|
|
||||||
Avatar
|
|
||||||
xy: 41, 111
|
|
||||||
size: 15, 16
|
|
||||||
Idle
|
|
||||||
xy: 5,22
|
|
||||||
size: 22, 10
|
|
||||||
Idle
|
|
||||||
xy: 37, 22
|
|
||||||
size: 22, 10
|
|
||||||
Idle
|
|
||||||
xy: 69, 22
|
|
||||||
size: 22, 10
|
|
||||||
Idle
|
|
||||||
xy: 101, 22
|
|
||||||
size: 22, 10
|
|
||||||
Walk
|
|
||||||
xy: 6, 54
|
|
||||||
size: 22, 10
|
|
||||||
Walk
|
|
||||||
xy: 37, 54
|
|
||||||
size: 22, 10
|
|
||||||
Walk
|
|
||||||
xy: 69, 54
|
|
||||||
size: 22, 10
|
|
||||||
Walk
|
|
||||||
xy: 101, 54
|
|
||||||
size: 22, 10
|
|
||||||
Attack
|
|
||||||
xy: 0, 96
|
|
||||||
size: 32, 32
|
|
||||||
Attack
|
|
||||||
xy: 32, 96
|
|
||||||
size: 32, 32
|
|
||||||
Attack
|
|
||||||
xy: 64, 96
|
|
||||||
size: 32, 32
|
|
||||||
Attack
|
|
||||||
xy: 96, 96
|
|
||||||
size: 32, 32
|
|
||||||
Death
|
|
||||||
xy: 0, 64
|
|
||||||
size: 32, 32
|
|
||||||
Death
|
|
||||||
xy: 32, 64
|
|
||||||
size: 32, 32
|
|
||||||
Death
|
|
||||||
xy: 64, 64
|
|
||||||
size: 32, 32
|
|
||||||
Death
|
|
||||||
xy: 96, 64
|
|
||||||
size: 32, 32
|
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
witch.png
|
||||||
|
size: 320,192
|
||||||
|
format: RGBA8888
|
||||||
|
filter: Nearest,Nearest
|
||||||
|
repeat: none
|
||||||
|
Avatar
|
||||||
|
xy: 72,38
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 4, 7
|
||||||
|
size: 25, 25
|
||||||
|
Idle
|
||||||
|
xy: 36, 7
|
||||||
|
size: 25, 25
|
||||||
|
Idle
|
||||||
|
xy: 68, 7
|
||||||
|
size: 25, 25
|
||||||
|
Idle
|
||||||
|
xy: 100, 7
|
||||||
|
size: 25, 25
|
||||||
|
Walk
|
||||||
|
xy: 0, 160
|
||||||
|
size: 32, 32
|
||||||
|
Walk
|
||||||
|
xy: 32, 160
|
||||||
|
size: 32, 32
|
||||||
|
Walk
|
||||||
|
xy: 64, 160
|
||||||
|
size: 32, 32
|
||||||
|
Walk
|
||||||
|
xy: 96, 160
|
||||||
|
size: 32, 32
|
||||||
|
Attack
|
||||||
|
xy: 0, 68
|
||||||
|
size: 32, 28
|
||||||
|
Attack
|
||||||
|
xy: 32, 68
|
||||||
|
size: 32, 28
|
||||||
|
Attack
|
||||||
|
xy: 64, 68
|
||||||
|
size: 32, 28
|
||||||
|
Attack
|
||||||
|
xy: 96, 68
|
||||||
|
size: 32, 28
|
||||||
|
Attack
|
||||||
|
xy: 128, 68
|
||||||
|
size: 32, 28
|
||||||
|
Attack
|
||||||
|
xy: 160, 68
|
||||||
|
size: 32, 28
|
||||||
|
Attack
|
||||||
|
xy: 192, 68
|
||||||
|
size: 32, 28
|
||||||
|
Attack
|
||||||
|
xy: 224, 68
|
||||||
|
size: 32, 28
|
||||||
|
Death
|
||||||
|
xy: 4, 132
|
||||||
|
size: 25, 28
|
||||||
|
Death
|
||||||
|
xy: 36, 132
|
||||||
|
size: 25, 28
|
||||||
|
Death
|
||||||
|
xy: 68, 132
|
||||||
|
size: 25, 28
|
||||||
|
Death
|
||||||
|
xy: 100, 132
|
||||||
|
size: 25, 28
|
||||||
|
Death
|
||||||
|
xy: 132, 132
|
||||||
|
size: 25, 28
|
||||||
|
Death
|
||||||
|
xy: 164, 132
|
||||||
|
size: 25, 28
|
||||||
|
Death
|
||||||
|
xy: 196, 132
|
||||||
|
size: 25, 28
|
||||||
|
Death
|
||||||
|
xy: 228, 132
|
||||||
|
size: 25, 28
|
||||||
|
Death
|
||||||
|
xy: 260, 132
|
||||||
|
size: 25, 28
|
||||||
|
Death
|
||||||
|
xy: 292, 132
|
||||||
|
size: 25, 28
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
frogboss.png
|
|
||||||
size: 86,600
|
|
||||||
format: RGBA8888
|
|
||||||
filter: Nearest,Nearest
|
|
||||||
repeat: none
|
|
||||||
Avatar
|
|
||||||
xy: 23, 150
|
|
||||||
size: 45, 45
|
|
||||||
Idle
|
|
||||||
xy: 0, 0
|
|
||||||
size: 86, 50
|
|
||||||
Idle
|
|
||||||
xy: 0, 50
|
|
||||||
size: 86, 50
|
|
||||||
Idle
|
|
||||||
xy: 0, 100
|
|
||||||
size: 86, 50
|
|
||||||
Idle
|
|
||||||
xy: 0, 150
|
|
||||||
size: 86, 50
|
|
||||||
Idle
|
|
||||||
xy: 0, 200
|
|
||||||
size: 86, 50
|
|
||||||
Idle
|
|
||||||
xy: 0, 250
|
|
||||||
size: 86, 50
|
|
||||||
Walk
|
|
||||||
xy: 0, 300
|
|
||||||
size: 86, 50
|
|
||||||
Walk
|
|
||||||
xy: 0, 350
|
|
||||||
size: 86, 50
|
|
||||||
Walk
|
|
||||||
xy: 0, 400
|
|
||||||
size: 86, 50
|
|
||||||
Walk
|
|
||||||
xy: 0, 450
|
|
||||||
size: 86, 50
|
|
||||||
Walk
|
|
||||||
xy: 0, 500
|
|
||||||
size: 86, 50
|
|
||||||
Walk
|
|
||||||
xy: 0, 550
|
|
||||||
size: 86, 50
|
|
||||||
|
Before Width: | Height: | Size: 5.8 KiB |
@@ -7,29 +7,50 @@ Avatar
|
|||||||
xy: 278, 214
|
xy: 278, 214
|
||||||
size: 22, 19
|
size: 22, 19
|
||||||
Idle
|
Idle
|
||||||
xy: 10,27
|
xy: 10,0
|
||||||
size: 38,37
|
size: 38,64
|
||||||
Idle
|
Idle
|
||||||
xy: 74,27
|
xy: 74,0
|
||||||
size: 38,37
|
size: 38,64
|
||||||
Idle
|
Idle
|
||||||
xy: 138,27
|
xy: 138,0
|
||||||
size: 38,37
|
size: 38,64
|
||||||
Idle
|
Idle
|
||||||
xy: 202,27
|
xy: 202,0
|
||||||
size: 38,37
|
size: 38,64
|
||||||
|
Idle
|
||||||
|
xy: 10,256
|
||||||
|
size: 38,64
|
||||||
|
Idle
|
||||||
|
xy: 74,256
|
||||||
|
size: 38,64
|
||||||
|
Idle
|
||||||
|
xy: 138,256
|
||||||
|
size: 38,64
|
||||||
|
Idle
|
||||||
|
xy: 202,256
|
||||||
|
size: 38,64
|
||||||
|
Idle
|
||||||
|
xy: 266,256
|
||||||
|
size: 38,64
|
||||||
|
Idle
|
||||||
|
xy: 330,256
|
||||||
|
size: 38,64
|
||||||
|
Idle
|
||||||
|
xy: 202,256
|
||||||
|
size: 38,64
|
||||||
Walk
|
Walk
|
||||||
xy: 0, 64
|
xy: 0, 89
|
||||||
size: 64, 64
|
size: 64, 39
|
||||||
Walk
|
Walk
|
||||||
xy: 64, 64
|
xy: 64, 89
|
||||||
size: 64, 64
|
size: 64, 39
|
||||||
Walk
|
Walk
|
||||||
xy: 128, 64
|
xy: 128, 89
|
||||||
size: 64, 64
|
size: 64, 39
|
||||||
Walk
|
Walk
|
||||||
xy: 192, 64
|
xy: 192, 89
|
||||||
size: 64, 64
|
size: 64, 39
|
||||||
Attack
|
Attack
|
||||||
xy: 0, 320
|
xy: 0, 320
|
||||||
size: 64, 64
|
size: 64, 64
|
||||||
|
|||||||
@@ -14,10 +14,10 @@ Idle
|
|||||||
size: 47, 35
|
size: 47, 35
|
||||||
Idle
|
Idle
|
||||||
xy: 138, 28
|
xy: 138, 28
|
||||||
size: 46, 36
|
size: 47, 36
|
||||||
Idle
|
Idle
|
||||||
xy: 202, 28
|
xy: 202, 28
|
||||||
size: 46, 36
|
size: 47, 36
|
||||||
Walk
|
Walk
|
||||||
xy: 8, 156
|
xy: 8, 156
|
||||||
size: 46, 36
|
size: 46, 36
|
||||||
@@ -43,7 +43,7 @@ Walk
|
|||||||
xy: 456, 156
|
xy: 456, 156
|
||||||
size: 46, 36
|
size: 46, 36
|
||||||
Attack
|
Attack
|
||||||
xy: 0, 192
|
xy: 8, 192
|
||||||
size: 64, 64
|
size: 64, 64
|
||||||
Attack
|
Attack
|
||||||
xy: 64, 192
|
xy: 64, 192
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
oozeboss.png
|
|
||||||
size: 246,91
|
|
||||||
format: RGBA8888
|
|
||||||
filter: Nearest,Nearest
|
|
||||||
repeat: none
|
|
||||||
Avatar
|
|
||||||
xy: 83,57
|
|
||||||
size: 34, 25
|
|
||||||
Idle
|
|
||||||
xy: 0, 0
|
|
||||||
size: 64, 40
|
|
||||||
Idle
|
|
||||||
xy: 64, 0
|
|
||||||
size: 64, 40
|
|
||||||
Idle
|
|
||||||
xy: 128, 0
|
|
||||||
size: 64, 40
|
|
||||||
Idle
|
|
||||||
xy: 192,0
|
|
||||||
size: 50, 40
|
|
||||||
|
Before Width: | Height: | Size: 6.6 KiB |
@@ -0,0 +1,20 @@
|
|||||||
|
sandelemental.png
|
||||||
|
size: 64,16
|
||||||
|
format: RGBA8888
|
||||||
|
filter: Nearest,Nearest
|
||||||
|
repeat: none
|
||||||
|
Avatar
|
||||||
|
xy: 3, 0
|
||||||
|
size: 10, 10
|
||||||
|
Idle
|
||||||
|
xy: 0, 0
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 16, 00
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 32, 00
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 48, 00
|
||||||
|
size: 16, 16
|
||||||
|
After Width: | Height: | Size: 9.4 KiB |
@@ -0,0 +1,83 @@
|
|||||||
|
sandwurm.png
|
||||||
|
size: 256,256
|
||||||
|
format: RGBA8888
|
||||||
|
filter: Nearest,Nearest
|
||||||
|
repeat: none
|
||||||
|
Avatar
|
||||||
|
xy: 103, 77
|
||||||
|
size: 16, 16
|
||||||
|
Idle
|
||||||
|
xy: 0, 12
|
||||||
|
size: 32, 20
|
||||||
|
Idle
|
||||||
|
xy: 32, 12
|
||||||
|
size: 32, 20
|
||||||
|
Idle
|
||||||
|
xy: 64, 12
|
||||||
|
size: 32, 20
|
||||||
|
Idle
|
||||||
|
xy: 96, 12
|
||||||
|
size: 32, 20
|
||||||
|
Idle
|
||||||
|
xy: 128, 12
|
||||||
|
size: 32, 20
|
||||||
|
Idle
|
||||||
|
xy: 160, 12
|
||||||
|
size: 32, 20
|
||||||
|
Idle
|
||||||
|
xy: 192, 12
|
||||||
|
size: 32, 20
|
||||||
|
Idle
|
||||||
|
xy: 224, 12
|
||||||
|
size: 32, 20
|
||||||
|
Walk
|
||||||
|
xy: 0, 39
|
||||||
|
size: 32, 25
|
||||||
|
Walk
|
||||||
|
xy: 32, 39
|
||||||
|
size: 32, 25
|
||||||
|
Walk
|
||||||
|
xy: 64, 39
|
||||||
|
size: 32, 25
|
||||||
|
Walk
|
||||||
|
xy: 96, 39
|
||||||
|
size: 32, 25
|
||||||
|
Walk
|
||||||
|
xy: 128, 39
|
||||||
|
size: 32, 25
|
||||||
|
Walk
|
||||||
|
xy: 160, 39
|
||||||
|
size: 32, 25
|
||||||
|
Walk
|
||||||
|
xy: 192, 39
|
||||||
|
size: 32, 25
|
||||||
|
Walk
|
||||||
|
xy: 224, 39
|
||||||
|
size: 32, 25
|
||||||
|
Attack
|
||||||
|
xy: 0, 70
|
||||||
|
size: 32, 26
|
||||||
|
Attack
|
||||||
|
xy: 32, 70
|
||||||
|
size: 32, 26
|
||||||
|
Attack
|
||||||
|
xy: 64, 70
|
||||||
|
size: 32, 26
|
||||||
|
Attack
|
||||||
|
xy: 96, 70
|
||||||
|
size: 32, 26
|
||||||
|
Death
|
||||||
|
xy: 0, 105
|
||||||
|
size: 32, 23
|
||||||
|
Death
|
||||||
|
xy: 32, 105
|
||||||
|
size: 32, 23
|
||||||
|
Death
|
||||||
|
xy: 64, 105
|
||||||
|
size: 32, 23
|
||||||
|
Death
|
||||||
|
xy: 96, 105
|
||||||
|
size: 32, 23
|
||||||
|
Death
|
||||||
|
xy: 128, 105
|
||||||
|
size: 32, 23
|
||||||