Adventure updates

Clear quests on New Game+
Small cleanup tweaks to town layouts
Added (big) signs to capitals for arena and spellsmith.
Quests can now be tagged with sources, allowing generation in specific towns / biomes.
NPC arena matches are now weighted on relative HP rather than 50/50 odds.
Removed invisible collision wall in Maze_1.tmx, gave threat range to nearby enemy instead.
This commit is contained in:
jjayers99
2023-04-14 07:55:38 -04:00
parent c71c5874b3
commit 92ec69e095
24 changed files with 430 additions and 83 deletions

View File

@@ -97,7 +97,7 @@ public class EnemyEdit extends FormPanel {
existingModel = QuestController.getInstance().getEnemyTags(true);
existingModel = QuestController.getInstance().getEnemyTags();
existingTags.setModel(existingModel);
@@ -243,7 +243,7 @@ public class EnemyEdit extends FormPanel {
private void filterExisting(DefaultListModel<String> filter){
DefaultListModel<String> toReturn = new DefaultListModel<>();
for (Enumeration<String> e = QuestController.getInstance().getEnemyTags(true).elements(); e.hasMoreElements();){
for (Enumeration<String> e = QuestController.getInstance().getEnemyTags().elements(); e.hasMoreElements();){
String toTest = e.nextElement();
if (toTest != null & !filter.contains(toTest)){
toReturn.addElement(toTest);

View File

@@ -90,7 +90,7 @@ public class PointOfInterestEdit extends JComponent {
existingModel = QuestController.getInstance().getPOITags(true);
existingModel = QuestController.getInstance().getPOITags();
existingTags.setModel(existingModel);
@@ -231,7 +231,7 @@ public class PointOfInterestEdit extends JComponent {
private void filterExisting(DefaultListModel<String> filter){
DefaultListModel<String> toReturn = new DefaultListModel<>();
for (Enumeration<String> e = QuestController.getInstance().getPOITags(true).elements(); e.hasMoreElements();){
for (Enumeration<String> e = QuestController.getInstance().getPOITags().elements(); e.hasMoreElements();){
String toTest = e.nextElement();
if (toTest != null & !filter.contains(toTest)){
toReturn.addElement(toTest);

View File

@@ -24,6 +24,7 @@ public class QuestController {
public final DefaultListModel<String> questPOITags = new DefaultListModel<>();
private final DefaultListModel<PointOfInterestData> allPOI = new DefaultListModel<>();
private final DefaultListModel<EnemyData> allEnemies = new DefaultListModel<>();
private final DefaultListModel<String> questSourceTags = new DefaultListModel<>();
private final DefaultListModel<AdventureQuestData> allQuests = new DefaultListModel<>();
@@ -43,21 +44,13 @@ public class QuestController {
load();
}
public DefaultListModel<String> getEnemyTags(boolean includeQuest){
public DefaultListModel<String> getEnemyTags(){
DefaultListModel<String> toReturn = new DefaultListModel<>();
for (int i = 0; i < enemyTags.size(); i++){
toReturn.removeElement(enemyTags.get(i));
toReturn.addElement(enemyTags.get(i));
}
if (includeQuest){
for (int i = 0; i < questEnemyTags.size(); i++)
{
toReturn.removeElement(questEnemyTags.get(i));
toReturn.addElement(questEnemyTags.get(i));
}
}
List<Object> sortedObjects = Arrays.stream(toReturn.toArray()).sorted().collect(Collectors.toList());
toReturn.clear();
@@ -69,19 +62,31 @@ public class QuestController {
return toReturn;
}
public DefaultListModel<String> getPOITags(boolean includeQuest){
public DefaultListModel<String> getPOITags(){
DefaultListModel<String> toReturn = new DefaultListModel<>();
for (int i = 0; i < POITags.size(); i++){
toReturn.removeElement(POITags.get(i));
toReturn.addElement(POITags.get(i));
}
if (includeQuest){
for (int i = 0; i < questEnemyTags.size(); i++)
{
toReturn.removeElement(questEnemyTags.get(i));
toReturn.addElement(questEnemyTags.get(i));
}
List<Object> sortedObjects = Arrays.stream(toReturn.toArray()).sorted().collect(Collectors.toList());
toReturn.clear();
for (Object sortedObject : sortedObjects) {
toReturn.addElement((String) sortedObject);
}
return toReturn;
}
public DefaultListModel<String> getSourceTags(){
DefaultListModel<String> toReturn = new DefaultListModel<>();
for (int i = 0; i < questSourceTags.size(); i++)
{
toReturn.removeElement(questSourceTags.get(i));
toReturn.addElement(questSourceTags.get(i));
}
List<Object> sortedObjects = Arrays.stream(toReturn.toArray()).sorted().collect(Collectors.toList());
@@ -101,6 +106,7 @@ public class QuestController {
questPOITags.clear();
questEnemyTags.clear();
questTags.clear();
questSourceTags.clear();
for (int i=0;i<allEnemies.size();i++) {
for (String tag : allEnemies.get(i).questTags)
@@ -122,12 +128,6 @@ public class QuestController {
for (int i=0;i<allQuests.size();i++) {
for (String tag : allQuests.get(i).questTags)
{
questTags.removeElement(tag); //Ensure uniqueness
if (tag!= null)
questTags.addElement(tag);
}
for (String tag : allQuests.get(i).questEnemyTags)
{
questEnemyTags.removeElement(tag); //Ensure uniqueness
@@ -140,6 +140,14 @@ public class QuestController {
if (tag!= null)
questPOITags.addElement(tag);
}
for (String tag : allQuests.get(i).questSourceTags)
{
questSourceTags.removeElement(tag); //Ensure uniqueness
if (tag!= null)
questSourceTags.addElement(tag);
}
}
}
@@ -195,12 +203,6 @@ public class QuestController {
allQuests.add(i,template);
for (String tag : template.questTags)
{
questTags.removeElement(tag); //Ensure uniqueness
if (tag!= null)
questTags.addElement(tag);
}
for (String tag : template.questEnemyTags)
{
questEnemyTags.removeElement(tag); //Ensure uniqueness
@@ -213,6 +215,12 @@ public class QuestController {
if (tag!= null)
questPOITags.addElement(tag);
}
for (String tag : template.questSourceTags)
{
questSourceTags.removeElement(tag); //Ensure uniqueness
if (tag!= null)
questSourceTags.addElement(tag);
}
}
}

View File

@@ -3,6 +3,12 @@ package forge.adventure.editor;
import forge.adventure.data.AdventureQuestData;
import javax.swing.*;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Enumeration;
public class QuestEdit extends FormPanel {
AdventureQuestData currentData;
@@ -24,6 +30,13 @@ public class QuestEdit extends FormPanel {
public DialogEditor declineEditor = new DialogEditor();
private boolean updating=false;
JTextField manualEntry = new JTextField(20);
DefaultListModel<String> existingModel = new DefaultListModel<>();
DefaultListModel<String> selectedTagModel = new DefaultListModel<>();
JList<String> existingTags;
JList<String> selectedTags;
JPanel tags = new JPanel();
public QuestEdit()
{
@@ -46,6 +59,125 @@ public class QuestEdit extends FormPanel {
tabs.add("Epilogue",getEpilogueTab());
tabs.add("Failure Dialog", getFailureTab());
tabs.add("Decline Dialog",getDeclineTab());
tabs.add("Quest Sources", getSourcesTab());
existingTags = new JList<>();
existingTags.getInputMap(JList.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
KeyStroke.getKeyStroke("ENTER"), "addSelected");
existingTags.getActionMap().put("addSelected", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
addSelected();
int index = existingTags.getSelectedIndex();
String selectedItem = existingTags.getSelectedValue();
if (selectedItem != null) {
selectedTagModel.addElement(selectedItem);
existingTags.grabFocus();
existingTags.setSelectedIndex(index<existingModel.size()?index:index-1);
}
}
});
existingModel = QuestController.getInstance().getSourceTags();
existingTags.setModel(existingModel);
selectedTags = new JList<>();
selectedTagModel = new DefaultListModel<>();
selectedTags.setModel(selectedTagModel);
selectedTags.getModel().addListDataListener(new ListDataListener() {
@Override
public void intervalAdded(ListDataEvent e) {
doUpdate();
}
@Override
public void intervalRemoved(ListDataEvent e) {
doUpdate();
}
@Override
public void contentsChanged(ListDataEvent e) {
doUpdate();
}
});
JButton select = new JButton("Select");
select.addActionListener(q -> addSelected());
JButton add = new JButton("Manual Add");
add.addActionListener(q -> manualAdd(selectedTagModel));
JButton remove = new JButton("Remove Item");
remove.addActionListener(q -> removeSelected());
tags.setLayout(new BorderLayout());
JPanel left = new JPanel();
left.setLayout(new BorderLayout());
left.add(new JLabel("Tags already in use"), BorderLayout.NORTH);
JScrollPane listScroller = new JScrollPane(existingTags);
listScroller.setMinimumSize(new Dimension(400, 800));
left.add(listScroller, BorderLayout.CENTER);
tags.add(left, BorderLayout.WEST);
FormPanel tagEdit = new FormPanel();
tagEdit.setLayout(new BorderLayout());
FormPanel mappedTags = new FormPanel();
mappedTags.setLayout(new BorderLayout());
mappedTags.add(new JLabel("Tags Mapped to this object"), BorderLayout.NORTH);
JScrollPane listScroller2 = new JScrollPane(selectedTags);
listScroller2.setMinimumSize(new Dimension(400, 800));
mappedTags.add(listScroller2, BorderLayout.CENTER);
tagEdit.add(mappedTags,BorderLayout.EAST);
JPanel controlPanel = new JPanel();
controlPanel.add(select);
controlPanel.add(add);
controlPanel.add(manualEntry);
manualEntry.getInputMap(JList.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
KeyStroke.getKeyStroke("ENTER"), "addTyped");
manualEntry.getActionMap().put("addTyped", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (!manualEntry.getText().trim().isEmpty()) {
manualAdd(selectedTagModel);
manualEntry.grabFocus();
}
}
});
controlPanel.add(remove);
tagEdit.add(controlPanel, BorderLayout.CENTER);
tags.add(tagEdit,BorderLayout.CENTER);
JTextArea right1 = new JTextArea("This is really just to pad some space\n" +
"but also to explain the use of tags.\n" +
"Rather than adding 100's of object names\n" +
"to every quest definition, instead we will\n"+
"categorize enemies and points of interest with\n"+
"tags and reference those categories in quests");
right1.setEnabled(false);
tags.add(right1, BorderLayout.EAST);
name.getDocument().addDocumentListener(new DocumentChangeListener(QuestEdit.this::updateQuest));
description.getDocument().addDocumentListener(new DocumentChangeListener(QuestEdit.this::updateQuest));
@@ -59,10 +191,60 @@ public class QuestEdit extends FormPanel {
failureEditor.addChangeListener(e -> QuestEdit.this.updateQuest());
declineEditor.addChangeListener(e -> QuestEdit.this.updateQuest());
stages.addChangeListener(e -> QuestEdit.this.updateQuest());
selectedTagModel.addListDataListener(new ListDataListener() {
@Override
public void intervalAdded(ListDataEvent e) {
QuestEdit.this.updateQuest();
}
@Override
public void intervalRemoved(ListDataEvent e) {
QuestEdit.this.updateQuest();
}
@Override
public void contentsChanged(ListDataEvent e) {
QuestEdit.this.updateQuest();
}
});
refresh();
}
private void doUpdate(){
QuestEdit.this.updateQuest();
}
private void addSelected(){
if (existingTags.getSelectedIndex()>-1)
selectedTagModel.addElement(existingTags.getModel().getElementAt(existingTags.getSelectedIndex()));
doUpdate();
}
private void removeSelected(){
if (selectedTags.getSelectedIndex()>-1)
selectedTagModel.remove(selectedTags.getSelectedIndex());
doUpdate();
}
private void filterExisting(DefaultListModel<String> filter){
DefaultListModel<String> toReturn = new DefaultListModel<>();
for (Enumeration<String> e = QuestController.getInstance().getSourceTags().elements(); e.hasMoreElements();){
String toTest = e.nextElement();
if (toTest != null & !filter.contains(toTest)){
toReturn.addElement(toTest);
}
}
existingTags.setModel(toReturn);
}
private void manualAdd(DefaultListModel<String> model){
if (!manualEntry.getText().trim().isEmpty())
model.addElement(manualEntry.getText().trim());
manualEntry.setText("");
doUpdate();
}
protected void updateQuest() {
if(currentData==null||updating)
return;
@@ -78,6 +260,15 @@ public class QuestEdit extends FormPanel {
currentData.epilogue = epilogueEditor.getDialogData();
currentData.failureDialog = failureEditor.getDialogData();
currentData.declinedDialog = declineEditor.getDialogData();
ArrayList<String> tags = new ArrayList<>();
for (Enumeration<String> e = selectedTagModel.elements(); e.hasMoreElements();){
tags.add(e.nextElement());
}
currentData.questSourceTags = tags.toArray(currentData.questSourceTags);
QuestController.getInstance().refresh();
filterExisting(selectedTagModel);
}
public void setCurrentQuest(AdventureQuestData data)
@@ -108,6 +299,13 @@ public class QuestEdit extends FormPanel {
failureEditor.loadData(currentData.failureDialog);
declineEditor.loadData(currentData.declinedDialog);
selectedTagModel.clear();
for(String val : currentData.questSourceTags) {
if (val != null)
selectedTagModel.addElement(val);
}
filterExisting(selectedTagModel);
updating=false;
}
@@ -164,4 +362,13 @@ public class QuestEdit extends FormPanel {
stagesTab.add(center);
return stagesTab;
}
public JPanel getSourcesTab(){
JPanel sourcesTab = new JPanel();
sourcesTab.setLayout(new BoxLayout(sourcesTab, BoxLayout.Y_AXIS));
FormPanel center = new FormPanel();
center.add(tags);
sourcesTab.add(center);
return sourcesTab;
}
}

View File

@@ -77,10 +77,10 @@ public class QuestTagSelector extends JComponent {
selectedItems.clear();
if (useEnemyTags){
allItems = QuestController.getInstance().getEnemyTags(true);
allItems = QuestController.getInstance().getEnemyTags();
}
else if (usePOITags) {
allItems = QuestController.getInstance().getPOITags(true);
allItems = QuestController.getInstance().getPOITags();
}
unselectedList.setModel(allItems);
for (int i=0;i<allItems.size();i++){

View File

@@ -43,7 +43,7 @@ public class AdventureQuestData implements Serializable {
public String rewardDescription = "";
public AdventureQuestStage[] stages = new AdventureQuestStage[0];
public String[] questTags = new String[0];
public String[] questSourceTags = new String[0];
public String[] questEnemyTags = new String[0];
public String[] questPOITags = new String[0];
private transient EnemySprite targetEnemySprite = null;
@@ -83,7 +83,7 @@ public class AdventureQuestData implements Serializable {
for (int i = 0; i < stages.length; i++){
stages[i] = new AdventureQuestStage(data.stages[i]);
}
questTags = data.questTags.clone();
questSourceTags = data.questSourceTags.clone();
questPOITags = data.questPOITags.clone();
questEnemyTags = data.questEnemyTags.clone();
targetPoI = data.targetPoI;

View File

@@ -164,7 +164,8 @@ public class ArenaScene extends UIScene implements IAfterMatch {
Array<ArenaRecord> winners = new Array<>();
Array<EnemySprite> winnersEnemies = new Array<>();
for (int i = 0; i < fighters.size - 2; i += 2) {
boolean leftWon = rand.nextBoolean();
int matchHP = enemies.get(i).getData().life + enemies.get(i+1).getData().life;
boolean leftWon = rand.nextInt(matchHP) < enemies.get(i).getData().life;
if (leftWon) {
winners.add(fighters.get(i));
winnersEnemies.add(enemies.get(i));

View File

@@ -241,6 +241,7 @@ public class SaveLoadScene extends UIScene {
Current.player().updateDifficulty(Config.instance().getConfigData().difficulties[difficulty.getSelectedIndex()]);
Current.player().setWorldPosY((int) (WorldSave.getCurrentSave().getWorld().getData().playerStartPosY * WorldSave.getCurrentSave().getWorld().getData().height * WorldSave.getCurrentSave().getWorld().getTileSize()));
Current.player().setWorldPosX((int) (WorldSave.getCurrentSave().getWorld().getData().playerStartPosX * WorldSave.getCurrentSave().getWorld().getData().width * WorldSave.getCurrentSave().getWorld().getTileSize()));
Current.player().getQuests().clear();
SoundSystem.instance.changeBackgroundTrack();
Forge.switchScene(GameScene.instance());
} else {

View File

@@ -351,9 +351,24 @@ public class AdventureQuestController implements Serializable {
ret.offerDialog = response;
return ret;
}
//todo - Make use of questOrigin in selecting appropriate quests
//todo - Should quest availability be weighted instead of uniform?
nextQuestDate.put(pointID, LocalDate.now().toEpochDay());
ret = new AdventureQuestData(Aggregates.random(allSideQuests));
Array<AdventureQuestData> validSideQuests = new Array<>();
for (AdventureQuestData option : allSideQuests){
if (option.questSourceTags.length == 0)
validSideQuests.add(option);
for (int i = 0; i < option.questSourceTags.length; i++){
if (option.questSourceTags[i] != null && option.questSourceTags[i].equals(questOrigin)){
validSideQuests.add(option);
break;
}
}
}
if (validSideQuests.size > 0)
ret = new AdventureQuestData(Aggregates.random(validSideQuests));
else
ret = new AdventureQuestData(Aggregates.random(allSideQuests));
ret.sourceID = pointID;
ret.initialize();
return ret;

View File

@@ -13,7 +13,7 @@
</layer>
<layer id="2" name="Ground" width="30" height="17">
<data encoding="base64" compression="zlib">
eJxjYBgFQwHosw+MvWeB9pby0s78SWwMDJOx4AtI/tXHwSYHlBHwy1l2wmxagHPsCL/nciDYeRwQeULuJhfQyl/Y0ow+jvCEiaPTlAJYmF4gEKfoNKX2Z0PjLAcpHs9jiV90GhbX1AS0TrfIoIQXQdPTXmQwai9xAADlPiO/
eJxjYBgFQwHosw+MvWeB9pby0s78SWwMDJOx4AtI/tXHwSYHlBHwy1l2wmxagHPsCL/nciDYeRwQeULuJhfQyl/IaQZmhz6O8NRnx05TCmBheoFAnKLTlNoPMycHKR7PY4lfdBoW1+SCbCz6aZ1ukUEJL4Kmp73IYNRe4gAA1fMlZw==
</data>
</layer>
<layer id="3" name="Foreground" width="30" height="17">
@@ -21,12 +21,12 @@
<property name="spriteLayer" type="bool" value="true"/>
</properties>
<data encoding="base64" compression="zlib">
eJxjYKAfKORgYCgC4mIOOloKBPycDAwCQCzISV97KQWdWgwMXVoQtrEOA4OJDu3s2qjOwLBJHcJeCrRzGRDrDZLwQvY7NcMhl4s8uZEI9I3I02cNTEc2BNIwTBydphUgFLfLuBkYDMn0L0z/YAUmUH8ZUOC/4QiusDMwXGWnv70DUR+CAABO1BOr
eJxjYKAfKORgYCgC4mIOOloKBPycDAwCQCzISV97KQWdWgwMXVoQtrEOA4OJDu3s2qjOwLBJHcJeCrRzGRDrDZLwQvY7NcMhl4s8uaEIrIHxaaNFvn59I8rdgCvuYOLoNK0Aobhdxs3AYEgF/9IbgNxNCJhA/WUwBP1HS3CFnYHhKjv97R2I+hAEAFsEE6s=
</data>
</layer>
<layer id="5" name="AboveSprites" width="30" height="17">
<data encoding="base64" compression="zlib">
eJxjYBgFpABxHQYGCR3amT9VnYFhmjqE3anFwNClRTu7SAXIfqd1OIwC6gJ5YDpSgKYlXHEHE0enR8EoGAXDCwAAl/AHJQ==
eJxjYBgFpABxHQYGCR3amT9VnYFhmjqE3anFwNClRTu7SAXIfqd1OAxXIA+MT4UBjlNccQcTR6dHwSgYBcMLAADc2Acl
</data>
</layer>
<objectgroup id="4" name="Objects">
@@ -80,13 +80,13 @@
</properties>
</object>
<object id="47" template="../obj/inn.tx" x="215" y="82"/>
<object id="48" template="../obj/shop.tx" x="176" y="192">
<object id="48" template="../obj/shop.tx" x="173.75" y="209.75" width="20.75" height="18.75">
<properties>
<property name="commonShopList" value="Island"/>
<property name="noRestock" type="bool" value="true"/>
</properties>
</object>
<object id="50" template="../obj/quest.tx" x="176" y="162">
<object id="50" template="../obj/quest.tx" x="158.5" y="146.25" width="33.75" height="36">
<properties>
<property name="questtype" value="island_town_generic"/>
</properties>

View File

@@ -12,7 +12,7 @@
</layer>
<layer id="2" name="Ground" width="30" height="17">
<data encoding="base64" compression="zlib">
eJxjYBgFQwHosw+MvWeB9pby0s78SWwMDJOx4AtI/tXHwSYHlBHwy1l2wmxagHPsCL/nciDYeRwQeULuJhfQyl/Y0ow+jvCEiaPTlAJYmF4gEKfoNKX2Z0PjLAcpHs9jiV90GhbX1AS0TrfIoIQXQdPTXmQwai9xAADlPiO/
eJxjYBgFQwHosw+MvWeB9pby0s78SWwMDJOx4AtI/tXHwSYHlBHwy1l2wmxagHPsCL/nciDYeRwQeULuJhfQyl/IaQZmhz6O8NRnx05TCmBheoFAnKLTlNoPMycHKR7PY4lfdBoW1+SCbCz6aZ1ukUEJL4Kmp73IYNRe4gAA1fMlZw==
</data>
</layer>
<layer id="3" name="Foreground" width="30" height="17">
@@ -20,12 +20,12 @@
<property name="spriteLayer" type="bool" value="true"/>
</properties>
<data encoding="base64" compression="zlib">
eJxjYKAfKORgYCgC4mIOOloKBPycDAwCQCzISV97KQWdWgwMXVoQtrEOA4OJDu3s2qjOwLBJHcJeCrRzGRDrDZLwQvY7NcMhl4s8uZEInmiQp88amI5s0NLwWTSzYOLoNLXBS6i9hOJ2GTdl9lCqfxTQH1xhZ2C4yk5/eweiPgQBAMi+FTE=
eJxjYKAfKORgYCgC4mIOOloKBPycDAwCQCzISV97KQWdWgwMXVoQtrEOA4OJDu3s2qjOwLBJHcJeCrRzGRDrDZLwQvY7NcMhl4s8uaEIrIHxaaNFvv4nGpS7ARZ3ZzWwi6PT1AYvofYSittl3NS3mx5gqLp7MIAr7AwMV9npb+9A1IcgAADU7hUx
</data>
</layer>
<layer id="5" name="AboveSprites" width="30" height="17">
<data encoding="base64" compression="zlib">
eJxjYBgFpABxHQYGCR3amT9VnYFhmjqE3anFwNClRTu7SAXIfqd1OIwC7OCEBnn65IHpSAGalnDFHUwcnR4Fo2AUDC8AAJuECBU=
eJxjYBgFpABxHQYGCR3amT9VnYFhmjqE3anFwNClRTu7SAXIfqd1OAxXIA+MTwUK4vSEBuVuwBV3MHF0ehSMglEwvAAA4GwIFQ==
</data>
</layer>
<objectgroup id="4" name="Objects">
@@ -79,13 +79,13 @@
</properties>
</object>
<object id="47" template="../obj/inn.tx" x="215" y="82"/>
<object id="48" template="../obj/shop.tx" x="176" y="192">
<object id="48" template="../obj/shop.tx" x="173.75" y="209.75" width="20.75" height="18.75">
<properties>
<property name="commonShopList" value="Island"/>
<property name="noRestock" type="bool" value="true"/>
</properties>
</object>
<object id="52" template="../obj/quest.tx" x="176" y="162">
<object id="52" template="../obj/quest.tx" x="158.5" y="146.25" width="33.75" height="36">
<properties>
<property name="questtype" value="island_town_identity"/>
</properties>

View File

@@ -13,7 +13,7 @@
</layer>
<layer id="2" name="Ground" width="30" height="17">
<data encoding="base64" compression="zlib">
eJxjYBgFQwHosw+MvWeB9pby0s78SWwMDJOx4AtI/tXHwSYHlBHwy1l2wmxagHPsCL/nciDYeRwQeULuJhfQyl/Y0ow+jvCEiaPTlAJYmF4gEKfoNKX2Z0PjLAcpHs9jiV90GhbX1AS0TrfIoIQXQdPTXmQwai9xAADlPiO/
eJxjYBgFQwHosw+MvWeB9pby0s78SWwMDJOx4AtI/tXHwSYHlBHwy1l2wmxagHPsCL/nciDYeRwQeULuJhfQyl/IaQZmhz6O8NRnx05TCmBheoFAnKLTlNoPMycHKR7PY4lfdBoW1+SCbCz6aZ1ukUEJL4Kmp73IYNRe4gAA1fMlZw==
</data>
</layer>
<layer id="3" name="Foreground" width="30" height="17">
@@ -21,12 +21,12 @@
<property name="spriteLayer" type="bool" value="true"/>
</properties>
<data encoding="base64" compression="zlib">
eJxjYKAfKORgYCgC4mIO+tn5n4mBgZ+TgUEAiAU56WcvzG5SwVR1BoZp6hB2pxYDQ5cWhG2sw8BgokM9t6GDjUA7N0HtXQq0cxkQ69E5vHABZL9TMxxyuciTG0og3Qi3XAoeOWoBa2A6ssGRhmH2w8TRaVoBQnG7jJsy8ynVPwroD66wMzBcBWIGZvraS+/6EAYAMd8XYg==
eJxjYKAfKORgYCgC4mIO+tn5n4mBgZ+TgUEAiAU56WcvzG5SwVR1BoZp6hB2pxYDQ5cWhG2sw8BgokM9t6GDjUA7N0HtXQq0cxkQ69E5vHABZL9TMxxyuciTG0og3QhCWwPj00YLVS7FiL5uQY87mP0wcXSaVoBQ3C7jpp3dtARD1d2DAVxhZ2C4CsQMzPS1l971IQwAAD4PF2I=
</data>
</layer>
<layer id="5" name="AboveSprites" width="30" height="17">
<data encoding="base64" compression="zlib">
eJxjYBgFpABxHQYGCR362NWpxcDQpUUfu4gByH6nZziMAsqBPDAdKUDTEq64g4mj06NgFIyC4QUAK4MFrA==
eJxjYBgFpABxHQYGCR362NWpxcDQpUUfu4gByH6nZzgMJyAPjE+FAY5TXHEHE0enR8EoGAXDCwAAcGsFrA==
</data>
</layer>
<objectgroup id="4" name="Objects">
@@ -80,13 +80,13 @@
</properties>
</object>
<object id="47" template="../obj/inn.tx" x="215" y="82"/>
<object id="48" template="../obj/shop.tx" x="176" y="192">
<object id="48" template="../obj/shop.tx" x="173.75" y="209.75" width="20.75" height="18.75">
<properties>
<property name="commonShopList" value="Island"/>
<property name="noRestock" type="bool" value="true"/>
</properties>
</object>
<object id="52" template="../obj/quest.tx" x="176" y="162">
<object id="52" template="../obj/quest.tx" x="158.5" y="146.25" width="33.75" height="36">
<properties>
<property name="questtype" value="island_town_tribal"/>
</properties>

View File

@@ -18,7 +18,7 @@
</layer>
<layer id="6" name="Ground2" width="40" height="40">
<data encoding="base64" compression="zlib">
eJzNmEtOwzAQhr0CpBa14nWBQiiEFbCDi7CnUPa8LgCFFeIAcAZAXADaAqLiFJyANxsQExGr02HGjp209JdGysNxvow944mDvFIhWAA2DdYPmop5wthKYA2wZp/w1YFjMmaM2O7BNgtKbfWJbRfajHpMR4pKjfaJjRXbfmwSvgmw83+yccKHNcLcmxbmRy2n1AGyw1zn/f0c/5xNHAN3z9Z/PY6nhhBXveDT76jMm/ssMTxHcH4cX1sjzy/MKbU413mt7MinmHeaRL+nBf588MhVLnzRGGLGatg+5nxAvwczY82iY+1b3c6FLwthvskE7bvBx/mS4+NE57YL31r4t42POMY7oW0vxvcEgvG0bG/XDb4rv9caheeHD1/Vkv+yVBr/1YS1LK1w/k7Dp2vGqN55g9h5t8TPF8zBb8d56MJXIe+vZ1TDmnJ72vioGWqWJyh2nqWCJ6F8+HCu0j6M6tqrfPZz0ZWPy617+d+5GHbhfyrN+OL5WBd8uASL/3JcAHxA+08hhtaF61muH5gRz8dwMNnzWDpmfPmmLIx4rKtDUJ8O/NrGkBunC59Ul7zA2LwKY01jW6oDpL7TjC+t07FwXEtxk2TtTsp3Y+lHYpXiRusWHa/MmBmaCdgrpP6mYl7hnHvWhfVXrwUmPk62/zm6DnLtV4U+MIP+zqR8pWGZKTAjW7kkvoDh2/Xcz4mUdo9pp2DnS7Ofk9UeEze+Z0W3vZxLdHxR/NvHpWN/56Q/6j9fPZbN577i+GjO+U9l5T8X6fIVr3sNpl2U+649+ZLkkpZ7tx21uWYLe+w/uq95wDBR66V0zuA4AuQzfP4DEgnvlw==
eJzNmEtO40AQhnsFSAlKxOsCARMwK2AHF2FPIOxnBi4AgRXiAHAGQFwAkgAi4hScgNcMmxlNWbiVSlHVLzshv1SSH+325+qu6nJHRaVisAhsHmwYNJfyxKlVwFpg7SHhawLHbMqYsD2A/Sgp9XNI7Fepy6jHdKKs1OSQ2FS568c24ZsBu/gmmyZ8WBPMvXlhfjQKSh0iOyr03j8o8M/ZxDFw92z9N9N4aglxNQg+/Y7asrnPCsNzDOcn6bUt8vzKklKrS73Xqp58inmnSfR7OuDPx4Bc5cOXjCFmrMfdY84H9HswM9YiOta+1e18+PIQ5pt1aN8PPs6XHB8nOrd9+Lbir21CxDHeC20HMb6nEIxnVXu7fvBdh73WKDw/QvjqlvyXp7L4ryGsZVmF83cWPl0zJvXOO8TOb4f4+Qvz8J/HXPThq5H3N3OqYU25PWt8NAw1yzMUOy9SweOoED6cq7QPk7r2upj/XPTl43LrfvFzLsZ9+J/KMr54PjYFH67B4r+eFgB/oP2HEEPbwvU81w/MiOdjPOr2PJaOmVC+OQsjHuv6GNSnI5+2M+bH6cMn1SWvMDZvwljT2JbqAKnvLONL63QsHNdS3Lis3a58t5Z+JFYpbrTu0PHGgpmh7cBeI/U3FfMK79yzLay/ei0w8XGy/c/RdZBrvyn0gRn0d7ryVcZlpsiMbOWS+CKGby9wPydR1j2m3ZKdL8t+Tl57TNz4npf99nKu0PFl+WsfV579XZD+qP9C9VQ1n4eK46M55zuVl/98pMtXvO61mHZJ7rsJ5HPJJR3/bntqc80WD9h/dF/zkGGiNkjpnMFxRMhn+Pw/CN3vlw==
</data>
</layer>
<layer id="3" name="Walls" width="40" height="40">
@@ -31,7 +31,7 @@
</layer>
<layer id="5" name="Overlay" width="40" height="40">
<data encoding="base64" compression="zlib">
eJzt1EsKgCAUBdC7g4Y1q1lirrHf5lpB/xaT0DCKIOuF3QOCjny+jwAR0TWhASIjHYUs5sAd5tKtSgG1ko7CHfbH94wZMGXSUTxDqt/aFOjS9++l98QaSPS2n+38LJ7MkI9/9NGbeluz4WbdfMwXEf1THgCFXWUgHcleo87PRPRfKyQjEbs=
eJzt1DkOgzAQBdB/A0rShQ7L0HE/tobcg9yFE5CE5TBYookUSBBBDMt/kiVbLjyeGRsgIprG9oGLLx2FLOZgOczlshIFpEo6it9yU/P7hLqzP7an8oDak45iviwAbsHwnlS/lS7wcNc/l9Zz1YCj+3lj3k+74zf07oh/9NidnqZmrz/rdsR8EdE5hRYQmRFb0pF8KtT3NRGdVwdj7hTP
</data>
</layer>
<objectgroup id="4" name="Objects">
@@ -139,7 +139,7 @@
<property name="uncommonShopList" value="Dinosaur4Green,Wolf4Green,Sliver4Green,Multicolor8Green"/>
</properties>
</object>
<object id="71" template="../../obj/arena.tx" x="359" y="290">
<object id="71" template="../../obj/arena.tx" x="375" y="290">
<properties>
<property name="arena">{

View File

@@ -5,14 +5,15 @@
</editorsettings>
<tileset firstgid="1" source="../../tileset/main.tsx"/>
<tileset firstgid="10113" source="../../tileset/buildings.tsx"/>
<tileset firstgid="11905" source="../../tileset/buildings-nocollide.tsx"/>
<layer id="1" name="Background" width="40" height="40">
<data encoding="base64" compression="zlib">
eJzNmEtOwzAQhrPIoxdhyUMFjsMJYAE36BGgbdpTcRmgtGwqMkp+MRnG9jhxCpVGVVPF/vzPwx5viix7z7PspuzbR/NsU/wP2zZ2l/et/gMOrhPX57/wcY7a8TyGD+t9U+JjSJy4+F4a++qe7xs7NLYM6E92W/5el7Trsr8GHy9xHBzzg92lG7FZeKy8sfkH9qVgwjhP1Xg2yTk2l9bN96po13tRtvyfiRmHaKn5kjhpHC2XUnBaGX1xVjty/VSMoRw4Vq1NwWdhDGkzNR/iaEz9IL6zBHXGZ7LGWdl2eVt/qBalzGNtjtD+q713zupBakbfvmXh47mbutbsHFwxviWmddHnjdGQGJ67PQo5Rt+Hzi/cn8RE+/UYDa7KuNiAPo9Vn49+0zrx/7z80WFovaX5Hqow307EFM4/nA9nGxlrWNMQvprNt/a8X7MzxmvDMZu54wH7PMaL8Y/Ug7QLsfGYJc77qn3POp/MQZo7FOs181GITc4F/11G1HbScOuJRfrgPIs4GppPqyLeX5xJqxf0OVb9c32Mbq64tdYkMPEc4z0AzgNjmDQ+i4b73F2zkZupzyqIX8t6fX3QWD9qhnpmHVfjs65tiMWcHV2+nersHsPni7sp+eAv5J4rh333FvweIbVh/4JRvyoZQzk7NaPUifvLwnZKRtITGlpqnezjUaen5MT+MDf2ldp9w1Racs34+VTTS+at7JNTatn1QQvf/R36Dd9+qOU5cXY9xILMwou+DL2HL84kR+3Qx5pLId/H5KTk097V7gBjxrT4wDpWqvvvlHza/e435SQojA==
eJzNmF1OwzAMx/vQj12ERz40xnE4ATzADXYE2JbtVFwGKBsvE7FaC9c4idMmY5OsaZ2a/GL77zjZVkXxURbFoh7ap322rc7Ddtbuy6GZf+CgfqL+ORc+ymEcz2P4cL3vQn6MyRMX36u17/753trB2irgf7C7+u+6uN3WwzX4eIHj4Jgf2V1+AzYNj5Y3Vn/IvmJMOM5zM52Nc07V0sZ+r6tuvVd1x/+VmHGML6VYAieMI2kpBaeW0ZdnxqH1UzGGNHBsOsvBp2EM+SY3H+bRlPoBfBcJ6ozPeI3TsrVlV3+gFqXUsTRHaP+V3rsk9SA1o2/f0vBR7aauNa2DKya2wLSphrwxPgSGl36PQo3B96GPC40nMMF+PcUHN3VcbqB/npohH/yGdeL/8/rXD2PrLcz32IT5WpZT2P9QPuxteK7hmsbwGTLfxvO+IT3Gm+WYzdz5gPs8jhcTH+4P8F2IjeYscD403Xva+bgGYe5QrhsSoxAbnwvjdx1R28GHO08uwgf7WcyjsXpaV/HxokxSvYDPsRn29TF+c+WttiYhE9UYPQNgPzCFSfIj9Lohxn3prtmozVy9iiZPfOegqXGUDLW/6PURGl/i09SMsRbTO7pim6t3j+Hz5V1OPowXas+lD9+9Bb1HSG24f6FJGg5pNjcj9xONl4btlIy0DmpqHT/HY53OyYn7w1x5rpTuG3L5kvqM9qeSv7hu+Tk5pS/7c9DSd3+H5w1TyXz0P56X/RliCabhxXMZnj18ecY5jMM/Wi2FYh+jSc4nvSvdAcaMqYmBdqxU998p+aT73R87migp
</data>
</layer>
<layer id="2" name="Ground" width="40" height="40">
<data encoding="base64" compression="zlib">
eJzVWEtOwzAQ9SI1iAr1cwMQC1ilnIJLIMS+IEBC3If+1KogroDYp1yCg2CLDJ1OZmwnTlN40ogm2Jnn+ctK/S8c95Q66e2ahYyrvlLX/d3pPxJs89wsDRF7uyawZXydbj5rbc6si+vSRKnzxL23CWSGw2cS/r5plOHXJF3wK/CYqU2fNmk/To3V3zb8DvTP30Ei/x4wsVgnaKynuf6FkZuWX+aIK5dLZcDlGPWVfV6V8N+Q4cnZs0x+a+QbayvMBfTdtvi9M/J8ecbzjLEl2Ah8GMKFq3mub8fkT5Zzk3hJezidUyPLmviNBF1jI5OK/Ch88RECly46S6RJsaZQP0dQKSBlcsIF8BeW2No89+jjYm/EL/fyG8dR/QXMXmV700Sv6wbk+9RROyAepFx32a4Kv5B9I7IuJgagt8IZQ8to6Lkov9C6CRii3umrAdLM4tJp48HGgo0Brf25SPuelAccwNZ41grRmaEzLXKuuBfFzNrYNmCLNuKEdWqhHmb5OWBdnaBxBhxXwkzIcchIjcVnDq1HUAfo3Ib5vaB3uP7h2ZBySxneVWoGtQuet/B8BPGGuWHfDpBe2M99s0q9mWh5Jl4lm/pAsG+BL8A1Z8fMCxzvuS72NSq+Ga2u3ocBdQD3NY6Xr8/Vgf2ANdSWUs2AVzDvN4khmg/qjKMY2Hl6ip7/yp2GBBe/x0P/fleowr3gRcf9jTvz/3tGHjprfq41oXhizmO5SfeXgGXX9Awib0Zeu2t+y/wdXWfX+FD2frlMfcL+rVpW3g23jy3df9eRH9u6/4YeHHtvQfENf1fcDQ==
eJzVWEtOwzAQNVJqEBX0cwMQC1ilnIJLIMS+IEBC3If+1KogroDYt9yAFVdgjy06dDqZsZ04TeFJI5pgZ57nLyv1v3DYUuqotWkWMi7aSl22N6f/QLDNY7U0RGxvmsCa8Xm8+qy1ObPOrksTpU4T994qMDMc3pPw91UjD78q6YJfgcdIrfq0Svtxaqz+uuG3q3/+dhL5d4eJxTJBYz1d6J8Yuar5ZYy4crmUB1yOUV/Z53kO/3UZnpw98+S3Rr6xtsJcQN91jd87Is/nJzzPGFuCjcCHIVy4muf6dkz+zBbcJF7SHk7n0Mi0JH49QVffyKAgPwpffITApYvOEmmSrSnUzxFUMkiZnHAB/IUltjaPPfq42Ovxy738+nFUfwGzV97eNNDLugH5PnTUDogHKdddtivCL2Rfj6yLiQHorXDG0DIaei7KL7RuArqod/pqgDSzuHTaeLCxYGNAa38u0r4n5QEHsDWetUJ0ztCZJguuuBfFzNrYNmCLOuKEdWqhHgJgXZmgcQYc58JMiDl8EZ5cPITWI6gDdG7D/J7QO1z/8GyI7fOxpdT+jv/MIaB2wfMWno8g3jA37NsO0gv7uW8WqTcDLc/E82RVHwj2LfAFuObsmHmB4z3W2b5GxTejldX7MKAO4L7G8fL1uTLAhHIG1JZSzYBXMO9XiS6aD8qMoxjYeXqInv/KnYYEF7/7Pf9+V6jCveBZw/2NG/P/W0buGkt+rjWheGDOY7lJ95eAadP0DCIvRp6bS37TxTu6zq7xIe/9cp76hP1btKy8Gm5va7r/LiM/1nX/DT049t6C4hvBmdqg
</data>
</layer>
<layer id="8" name="Bridges" width="40" height="40">
@@ -22,7 +23,7 @@
</layer>
<layer id="6" name="Ground2" width="40" height="40">
<data encoding="base64" compression="zlib">
eJztlU0OQDAUhN9xcAXuhHPgFH5K2Pk5kYN4i25EF0SbtsyXvIUumjHTdogAAKZoI6Iuur8O/ECVX8zfCbI2zh/8/OI/riHRFtpW4Re+9EcaEGVy8sC2misFayrlVIb0vclEsKZezuCgf8AeJu96zfs2ir0Fr/UOvS8uMbIv0wNvZu68xfPee3MGXesq8G129OcJ+GEfnRkgTwD0cABSpCk/
eJztlT0SQDAUhF/jLrgCd8I5UDmC/6HzcyIH8Yo0hoIhkrDfzCukiLUrWSIAgCxKl6hyz68DMzjKz+NnH1lL5w9+fvEbJ4dodlSrMAtT+iOwiUIxka1azZ6YNSViUkn67mRSs6ZGTKuhf0AdMs96zvsWB3vXvNZodL+cIbPeeU/HvvQXvBm480bDe+/OP6hbV4Fvs6A/N8AP9TyZAfIE4BlWYdkp1w==
</data>
</layer>
<layer id="3" name="Walls" width="40" height="40">
@@ -35,7 +36,7 @@
</layer>
<layer id="5" name="Overlay" width="40" height="40">
<data encoding="base64" compression="zlib">
eJxjYBgFo2DogBMaqPxOLQaGLi1MddjE0fWOgsELsMWfPJCvQGRcjwLyASXhOZB5jBS7h2OamanJwDBLc6BdMbQAKfXHKMAN8oF5rwCKC2lUBlASJ91AN/VAce9oO2AUIAFa5vV2oLkdWMzuBor1UMnOwdiupcRN/cBwmUBC2EwH1nkzhni9R0kaHK2rRgE9wWAsbwYSjIbHwANqxsFofGKCOn4GhnoobuAfaNeMglFAHQAAkqgpdw==
eJxjYBgFo2DogBMaqPxOLQaGLi1MddjE0fWOgsELsMWfPJCvQGRcjwLyASXhOZB5jBS7h2OamanJwDBLc6BdMbQAKfXHKMAN8oF5rwCKC2lUBlASJ91AN/VAce9oO2AUIAFa5vV2oLkdWMzuBor1UMnOwdiupcRN/cBwmUBC2EwH1nkz6FDvtRsD49KYfP2LgXqX4NBPSRocratGAT3BYCxvBhKMhsfAA2rGwWh8YoI6fgaGeihu4B9o14yCUUAdAADsPiyZ
</data>
</layer>
<objectgroup id="4" name="Objects">

View File

@@ -13,7 +13,7 @@
</layer>
<layer id="2" name="Ground" width="40" height="40">
<data encoding="base64" compression="zlib">
eJzVmUtv00AQx7exVETU+NLYNyCc8iDiFQoHuCD4BIUz9DvAqSCRlguPEohoC4grfIIWDnyLgsIZKjgRmgRQzuywu/J4vbteO25qRhqts7se//wfP9aTqkvI41LU16gLW/EIue+xdlXye9SP+8HcGo3XcEnEFguEPHEIGdF2zH2P+lMn8AEaE/5QwfagFD7GMZ8xQFuh3uZcFT/MZrKhgumZE50zQg7zq26Yq645f2yg4xHK9b1sxwbW4fr8KkTHutIcwQatTjPZ1tG20NGk3ZkZNaOsmTyv44RzbquZrT23nKfilw2uWbgPNqhv5sxflJiWwNei2p3LmS/wfEJe88wH9r/xXaD+ccp+PgEfHpuWmRgOms89kY6vN0+I72Xrn+ejfJeL6fg8L3utREz3bKCdiW/9gPgw46T69Wo0LzW2/aNJSL8ZPe472vce9f+s07VKne9D2349HPPNYUIOcd+dkG8WxTL5W4s5Wx5rrxaZfuI9PI3rD/IUZyImngucafhulZPdm9sWc26XAz64N0wM/bl4bbPWT9iXYpBznX7wrbA3t798gypdt1eD3zMNQgqN6Dwdg2p9lbV+cr9qXlK+U/QcT/Pz/E2fDX/480HXL457kY5d4uNb9Hmz3WT9d1us72aL/b7Dfy+1zHyq9R+M2T5TsF8pqvu/Sv27CfSLG0tiIm8fZsP9y1wjodmypB1om5TPJqe4H/MluY9NDKaxSfIr8ol1XJK0uyFpOs38prH94sNrRPz+UK3zsuJ7leA7Fd6n4nsV9NuQ+m39ZcmeL41DPNU6bpJ4eefTrQ/ywveI1yB33PTfrT3efuJ8O1J/Wod4sH75Vg7qeKqaEtSQritqdiqTny+qfV/bhfpnkN/VmFrjUFNTtOGDfdccQq4VmGPWk5r6WhdtQ37bnppxkceEmrHuGDZ8Y1SvFXFs8wH5XeG15LbEiOvFA3QMk5YqPlwPHyNOzNglURPXhqglH/XDOg5RLFF3j9NAxzeSOE3nKecNuEQtvoLqyqpaNa6/y3VkFV/H8N+BrKFgw1qA/wXqmqpm
eJzVmUtv00AQx7exVETU+NI4NyCc8qDiFQoHuCD4BIUz9DvAqSCRlguPEohoC4grfIIWDnyLgsIZKjgRmgRQuDJT78rj9Xq9fjQ1I4023p2Of/5P7KynNZuxx6Wgr4ILW3YYu++444rk98CPV7zYOuRr2ixgCwXGnliMjWAcc98Ff2p5PiBrwh8q2B6U/Oc4VnEZcKyCtzlXteJn09lQwfTMCsaMiGN8zfZzNUKunxrqeAS4vpfN2NA6XJ9fheBaV4oRbDiGaSbbGvksdNRpd2ZKzShrJsd1LH/NTTUzteeGcSp+2fA7i/fBOvhGzvxFydUS+Vqg3bmc+TyvJ9Y1z3xo/xvfBfCPE/bzMfjo2qRMx3DQfPaJZHy9WcYqTrb+eTbId7mYjM+BfH/nstUKc+5pdtbTTse3FsGXtdGcgjGNfsJ6dahN3f38AzTtS7q+g+P3ZO5nA/YqDR4PY7/hz/nmMGOHuO+k5JsmuXT+1iBm03HHq0VXP/E7nFY/E8M6RZnISWORMwnfrXK8e3PLIOZ22ePDe0PH0J+J1jZr/YR9KXo1D9MP3xV2Z/aXb1CDfXvNO55qMlZoBuPCGFT7q6z1k+dVcXH5TsE1nubX+RueDX/48yFsXpz3Iqxd4uub8LzZmnPn77bcuZst9/gOP15s6flU+z9cM32mUL9SVM9/leZ3YugXtRbHRN0+TPvnl7hGQrMlSTvUNi6fSU3pPOWLcx/rGHRraeor6kl1XJS0uyFpOsn6JrH94qN7RPr7odrnZcX3KsZ7Kv6eivdV1G9dmjf1lyVzviSO+VT7uDT58s4Xtj/IC98j3oPctpO/t/b4+InzbUvzSR3z4f7lW9nr46l6SthDuq7o2alMfr6o/va1Wao9w/quRPQahyE9RRM+/NtVi7FrBdcp68mQ/lqXfMb6th014wLPiT3jsHOY8I1Jv1bkMa0H1neZ95LbEiPtFw/IOXRaqvhoP3xMOCljlwVNfDdEL/loxa/jkOQSffcoDcL4RhKn7jrluiGX6MVXSV9Z1aum/Xe5j6zi62j+dyBrKNioFuj/AOUjq4k=
</data>
</layer>
<layer id="6" name="Ground2" width="40" height="40">
@@ -26,12 +26,12 @@
<property name="spriteLayer" type="bool" value="true"/>
</properties>
<data encoding="base64" compression="zlib">
eJztwQENAAAAwqD3T20PBxQAAAAAAMCXARkAAAE=
eJztzgENADAIA7B5QuSRjQxO0ipoAgDAL14lXdsLAAAAuG8Ag6wBdg==
</data>
</layer>
<layer id="5" name="Overlay" width="40" height="40">
<data encoding="base64" compression="zlib">
eJzt1O8JgzAQh+HfBo5gv2nEGatb+GeTdolaLdQFdA4PbLFgP0hBRPs+EHI5ErgQchIAAMDxXELpGo7xLZaqeL6nsFz5kb87qXavMzZXbv06gb1pAukRTOvO/kn/B3/laXds3fL4zY+kUzTGmfWb/EsvwvZ+fV8Ac2dPSmyk3taVYA28L4C9GQDl9SK0
eJzt1EsKwjAUheGzgy7BztoUZ92fugsfU91E3YT1AboB3UKnXqiitJMqXGrx/yDkJoRwQkgkAACAz1TjvhN0U6TSNq3rnWUuG7mXNl69ze2DdAiP9daXwSfXOpc2uc/egLdjIp2S1/hq7+Tm9FZ+ydnOeAnd66dRJsVZXc/tv1kM5P/8N9/eL4C2SSRNrc2ivpPAA/cLYGju2YIlhA==
</data>
</layer>
<objectgroup id="4" name="Objects">
@@ -99,7 +99,7 @@
<property name="uncommonShopList" value="Wolf4Red,Sliver4Red,Knight4Red,Soldier4Red,Dinosaur4Red,Ogre4Red,Multicolor8Red"/>
</properties>
</object>
<object id="53" template="../../obj/spellsmith.tx" x="152" y="258"/>
<object id="53" template="../../obj/spellsmith.tx" x="168" y="258"/>
<object id="55" template="../../obj/shop.tx" x="366" y="433">
<properties>
<property name="commonShopList" value="Mountain"/>
@@ -114,7 +114,7 @@
</object>
<object id="59" template="../../obj/entry_left.tx" x="337" y="627" width="16" height="89.9726" rotation="0"/>
<object id="60" template="../../obj/entry_right.tx" x="266" y="623" width="16" height="88"/>
<object id="61" template="../../obj/arena.tx" x="200" y="258">
<object id="61" template="../../obj/arena.tx" x="216" y="258">
<properties>
<property name="arena">{

View File

@@ -31,7 +31,7 @@
</layer>
<layer id="5" name="Overlay" width="40" height="40">
<data encoding="base64" compression="zlib">
eJxjYBgFo2AUUALMNRgYLIDYUmOgXTIKsIHr2gwMN7QH2hWooENzoF0wCmgBBLUYGIS0BtoVIxsYAvOWEY78JQ+MGwWk+JEGsmVwxJe4DgODhA5+Nja1hIAvnrxvDXSLDZp7LEbT04gEtEp/17Sxs3GJYVMzCkbBSAF1/AwM9UDcwD/QLsEEi5jx84caKDDAzx8swHKQtt+HSviNglEwUGAwl+ejYBSMAvoBAFbjF4A=
eJzt1kEKwjAQBdAPHqDoRkFBl7XJQu3CFr2Cd/EE6s6eQz2TehxnqbaNiKST4n8QSEIWn0ymFCCiXyxjIJORx9pJ/DumQJFqp/jOzQB3o53iVTHVTkA+dBOgl2inKDtb4GK1UzRjLr21qOmvsdRm8lSfocxHNfXqy30NrHtedfaTjaP3V5Jl/ZYnC/A9kX++3t/VVM/r9qrOEP2LXQTsZRwi7SRlp4573TbbmXsdijzQ//e23B+RlpC/50TUnAdcVxqU
</data>
</layer>
<objectgroup id="4" name="Objects">

View File

@@ -5,6 +5,7 @@
</editorsettings>
<tileset firstgid="1" source="../../tileset/main.tsx"/>
<tileset firstgid="10113" source="../../tileset/buildings.tsx"/>
<tileset firstgid="11905" source="../../tileset/buildings-nocollide.tsx"/>
<layer id="1" name="Background" width="40" height="40">
<data encoding="base64" compression="zlib">
eJztw7ENAAAMAiB3l/5/rX80kNBLqqqqqqqq+ugA4iKowQ==
@@ -17,7 +18,7 @@
</layer>
<layer id="6" name="Ground2" width="40" height="40">
<data encoding="base64" compression="zlib">
eJztV0tOwzAQHQk2iZtcoWFJrgArRIPoniPAPShXgZYeClRacw88aqwMlv9x06rKk0ZxHNvzMs/jD8CIESPOBe8FwMeRbFm4+d2VAI2wn4FtJuy+9OPn0y41fP2m4LfLAX7zsD5D8ntlAG8srE9ffiExofy+aoDvOszvi6W9iR/6XGXmfpQ/tp2JcuNp2K9v/NaZXTP6Hfll4j132ILtn1eT/vxc8aP8XP8isSBtVL8mjWk71Iy39pB3mnHl2SjfsWz7Fxe/eW3mSNtNRdyriVkf+o1le02xjiWInwmx6wtqKmMm84PGlyuGdcjPlB9zD31duBFj3NYdJ1d+0HhXRJsU+aEDzRnKzzc/YvzKdhciLpdtbExllZ9NX1VnWo5Z/3bKmDofppyleSXzRqerfI/Rl/pQc1j6qBQeOk19tT50/ur2NJ77r4WHmH8Ua6KjGm/U7+k6LT+6d5jmH63DOIXmbCy/z6Kbf7o1S1fP2vU59v6yKvz4bQLvDVzYtuz2j01bF3MH2QbO+8f6/9MG25lZHcdnvFBuz44xXeevlNxiEHPnGBIxe+6QcOl7bNDz3yni1OfftD2HjBhxTvgDGpfgIw==
eJztV0tOwzAQHQk2iZtcoWFJrgArRIPoniPAPShXgZYeClRacw88aqwMlv9x06rKk0ZxHNvzMs/jD8CIESPOBe8FwMeRbFm4+d2VAI2wn4FtJuy+9OPn0y41fP2m4LfLAX7zsD5D8ntlAG8srE9ffiExkfy+aoDvOpzfi6WPiR/6XGXmfpQ/tp2JcuNp2K9v/NaZXTP6Hfll4j132ILtn1eT/vxc8aP8XP8isSBtVL8mjWk71Iy39pB3mnHl2SjfsWz7Fxe/eW3mSNtNRdyriVkf+o1le02xjiWInwmx6wtqKmMm84PGlyuGdcjPlB9zD31duBFj3NYdJ1d+0HhXRJsU+aEDzRnKzzc/YvzKdhciLpdtbExllZ9NX1VnWo5Z/3bKmDofppyleSXzRqerfI/Rl/pQc1j6qBQeOk19tT50/ur2NJ77r4WHmH8Ua6KjGm/U7+k6LT+6d5jmH63DOIXmbCy/z6Kbf7o1S1fP2vU59v6yKvz4bQLvDVzYtuz2j01bF3MH2QbO+8f6/9MG25lZHcdnvFBuz44xXeevlNxiEHPnGBIxe+6QcOl7bNDz3yni1OfftD2HjBhxTvgDItPgIw==
</data>
</layer>
<layer id="3" name="Walls" width="40" height="40">
@@ -30,12 +31,12 @@
</layer>
<layer id="5" name="Overlay" width="40" height="40">
<data encoding="base64" compression="zlib">
eJzt0sEJg0AQheHXgSWYm6ztRGOqibZmLqYHc0kuWkbmEGHBJeTgsiT+HwizD4SBeRIAAOkcS6kq13lv2dXLB5tv3nt00t3F3w9rtd3hFLhZY9k5kGNbfve/mfcmtw4efriHMe872T+z+zwjnkchPYvUW6RD/7C4ZFL7/ros9TYAAODfvQDOSyqr
eJzt0s0JwkAQhuGvg5Sgt7BLbinF32rUm/ahjehFe9CLXkwZzkEhGhGFLIP6PrAw88HCwIwEAEB681JalM28F6V+vM/W1m8esq31u1q2D9IhtD/nJ5aFtCp8Z/AwsD0MYzMfWTZ+kqNd9dt/p/43HbvB7hffYcr9nu1PFV7XSOeYS6fcewo/3B9uJpk0vb5Z5j0NAAD4dRedmS2/
</data>
</layer>
<objectgroup id="4" name="Objects">
<object id="47" template="../../obj/inn.tx" x="361" y="371"/>
<object id="53" template="../../obj/spellsmith.tx" x="392" y="194"/>
<object id="53" template="../../obj/spellsmith.tx" x="376" y="194"/>
<object id="55" template="../../obj/shop.tx" x="416" y="402">
<properties>
<property name="commonShopList" value="Swamp"/>

View File

@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.5" tiledversion="1.7.2" orientation="orthogonal" renderorder="right-down" width="30" height="17" tilewidth="16" tileheight="16" infinite="0" nextlayerid="7" nextobjectid="55">
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="30" height="17" tilewidth="16" tileheight="16" infinite="0" nextlayerid="7" nextobjectid="55">
<editorsettings>
<export target="wastetown..tmx" format="tmx"/>
</editorsettings>
<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="30" height="17">
<data encoding="base64" compression="zlib">
eJxjYBgFo2AUjIJRAAN7eAbG3iheys3YC3R7PTfl5pAKooFu3z1A4TYKSAcAGL8Dsg==
eJxjYBgFo2AUjIJRMBzAXh4Ghnpu+tsbzcvAsJuH/vaOAvIAAN0IAoM=
</data>
</layer>
<layer id="1" name="Background" width="30" height="17">
@@ -41,9 +41,10 @@
</properties>
</object>
<object id="51" template="../obj/treasure.tx" x="384.492" y="232.777"/>
<object id="53" template="../obj/enemy.tx" x="382.233" y="183.963">
<object id="53" template="../obj/enemy.tx" x="386.233" y="183.963">
<properties>
<property name="enemy" value="Minotaur"/>
<property name="threatRange" type="int" value="20"/>
</properties>
</object>
<object id="54" template="../obj/gold.tx" x="170" y="78.6667"/>

View File

@@ -21,12 +21,12 @@
<property name="spriteLayer" type="bool" value="true"/>
</properties>
<data encoding="base64" compression="zlib">
eJxjYBgFQwXsYGFgkMaDd7FQph8X/saKas4uNgYGeS0GBgUtCD+UFdMuZIAsr2uEaRYMZGoyMGQB8Xp1BoYN6hAxPaB6Yx0GBhMgPsvOwGANtNOGBHthekEAmQ0DepwMDK1AO9uAWJ8d1X05HAwMk4HuO88OofM4iLcXZBYMILORwVl2VBqu3gi7ODH2wtwMwhdw2HsOzT+43EWsvV9YUdMgsn7kMMcljhy/yHxC9qK78SyOMMclro8W/jA+qfYih3kuEhuWbtDFYWwYTWy6QgbIYY5eBoD8Q0peR8/f5ABY+JPiB2qAUXvJAwAGckIl
eJxjYBgFQwXsYGFgkMaDd7FQph8X/saKas4uNgYGeS0GBgUtCD+UFdMuZIAsr2uEaRYMZGoyMGQB8Xp1BoYN6hAxYx0GBhMdCPssOwODNdBOGyDWMyLOXmT9yGwY0ONkYGgF2tkGxPrsqO7L4WBgmAx033l2CJ3HQbx/QWbBADIbGZxlR6Xh6o2wixNjL8zNIHwBh73n0PyDy13E2vuFFTUNIutHjz9s4jA2TB7GJ2QvuhvP4ghzXOL6aOEP45NqL3KY5yKxYekGXRzGhtHEpitkgBzm6GUAyD+k5HX0/E0OgIU/KX6gBhi1lzwAAABuQiU=
</data>
</layer>
<layer id="5" name="AboveSprites" width="30" height="17">
<data encoding="base64" compression="zlib">
eJxjYBgFowA7mKzOwDBFHcEX12FgkNAhzyxkvZSYMwrIA7jCHF+8jMbTKBgFwxMAAMK5BSc=
eJxjYBgFowA7mKzOwDBFHcIW12FgkNAh3yxk/ZSaNQpIB7jCHF+8jMbTKBgFwxMAAMTVBSc=
</data>
</layer>
<objectgroup id="4" name="Objects">

View File

@@ -20,12 +20,12 @@
<property name="spriteLayer" type="bool" value="true"/>
</properties>
<data encoding="base64" compression="zlib">
eJxjYBgFQwXsYGFgkMaDd7FQph8X/saKas4uNlR+KJo8OsAnj2xWpiYDQxYQr1dnYNigjhA31mFgMAHis+wMDNZaDAw2WsTbC9OLbA4y0ONkYGgF2tkGxPrsqHI5HAwMk4HuO88OofM4iLcX2Sx0c2HgLDsqjUse2VxC9sLcDMIXcJh7Ds0/lNr7hRU1DSLrRw5zkPgrDUxx5PhF5hOyF92NZ3GEOS5xfbTwh/FJtRc5zHOR2LB0gy4OY8NoYtMVMkAOc/QyAOQfUvI6ev4mB8DCnxQ/UAOM2kseAAD38kEl
eJxjYBgFQwXsYGFgkMaDd7FQph8X/saKas4uNlR+KJo8OsAnj2xWpiYDQxYQr1dnYNigDhEz1mFgMNGBsM+yMzBYazEw2GgRby+yfmQ2DOhxMjC0Au1sA2J9dlS5HA4GhslA951nh9B5HMTbi2wWurkwcJYdlcYlj2wuIXthbgbhCzjMPYfmH0rt/cKKmgaR9aPH3ysNTHEYG6YPxidkL7obz+IIc1zi+mjhD+OTai9ymOcisWHpBl0cxobRxKYrZIAc5uhlAMg/pOR19PxNDoCFPyl+oAYYtZc8AAD67kEl
</data>
</layer>
<layer id="5" name="AboveSprites" width="30" height="17">
<data encoding="base64" compression="zlib">
eJxjYBgFowA7mKzOwDBFHcEX12FgkNCBsOW1GBgUtIg3C1kvMnsU0Aegh/k5DUxxdDWj8TQKRsHwBADmvgaw
eJxjYBgFowA7mKzOwDBFHcIW12FgkNBByMlrMTAoaBFvFrJ+dLNGAe0Bepif08AUR1czGk+jYBQMTwAA6NoGsA==
</data>
</layer>
<objectgroup id="4" name="Objects">

View File

@@ -21,12 +21,12 @@
<property name="spriteLayer" type="bool" value="true"/>
</properties>
<data encoding="base64" compression="zlib">
eJy9VF0OwUAQ/qhazuAAUhFNyhvXcASE4BY8eXMQHsUdisOIR2zTTMyOLG3Yfsl0Zna68+3M/gDF4V52m7/kpbrsmeObQH+8t9+d4uGg1kMFaHyQY+W3+Ta5+WaeY9X0hyIu8SnOc031Ps207JrAXssoAsZaum2gpyVWQL8FDFrZeWluAm4TOnVgpTnXQZp/Er1i8xqw1es7q1Qva9l5Q/Xyuc0RK1Pb4jzvN15acyIXS96TqOdX3qtvnkE+n/fcNs73l/vfeOUaY0vPbeOh6D/5eXl5zxfMpnMjx8kmnfVccfCeyzcgqSfPXZf3Ow/oTaf+Uw3yDXYFzlsUp+QtEv/ifQLOoEZF
eJy9VF0OwUAQ/qhqncEBpCKa4I1rOAJCcAuevDkIj+IOxWHEI1aaSWeHrTZsv2Q6szPd+XZmf4DicC/bzV9yYl12dP8mUB/n7XereFio9VAB6ilyrPw23yQ3Fxh3kjzHqp536KbzpsV5rqnap5mSXQPYKxkpzm4L6LXieOQB/SYwaGbn5fO5TWjXgJXiXAdx/gmrc+4DW7W+sxfrpZ+dN/SSMbc5Ik/XpjjP+42X1vySiyHvSdTzK+/V1c8gny/375OfbIrT+BuvXGNk6LnJH4r+0zgvL+/5gtl0bqSfbNJZzxUH77l8A1715Lnrtxy8EvSmU/+pBvkG2wLnLYpT8haJf/E+ARjrRkU=
</data>
</layer>
<layer id="5" name="AboveSprites" width="30" height="17">
<data encoding="base64" compression="zlib">
eJxjYBgFowA7mKzOwDBFHcEX12FgkNCBsOW1GBgUtIg3C1kvMnsU0AfgCnN88TIaT6NgFAxPAAAOuQW6
eJxjYBgFowA7mKzOwDBFHcIW12FgkNBByMlrMTAoaBFvFrJ+dLNGAe0BrjDHFy+j8TQKRsHwBAAQ1QW6
</data>
</layer>
<objectgroup id="4" name="Objects">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 240 KiB

After

Width:  |  Height:  |  Size: 241 KiB

View File

@@ -215,6 +215,11 @@
},
"POIToken": ""
}
],
"questSourceTags": [
"waste_town_generic",
"waste_town_tribal",
"waste_town_identity"
]
},
{
@@ -697,6 +702,11 @@
},
"POIToken": ""
}
],
"questSourceTags": [
"waste_town_generic",
"waste_town_identity",
"waste_town_tribal"
]
},
{
@@ -934,6 +944,12 @@
"epilogue": {},
"POIToken": ""
}
],
"questSourceTags": [
"forest_town_generic",
"forest_town_identity",
"forest_town_tribal",
"forest_capital"
]
},
{
@@ -1181,6 +1197,12 @@
"epilogue": {},
"POIToken": ""
}
],
"questSourceTags": [
"swamp_town_generic",
"swamp_town_identity",
"swamp_town_tribal",
"swamp_capital"
]
},
{
@@ -1577,6 +1599,12 @@
"epilogue": {},
"POIToken": ""
}
],
"questSourceTags": [
"plains_town_generic",
"plains_town_identity",
"plains_town_tribal",
"plains_capital"
]
},
{
@@ -1588,9 +1616,6 @@
"text": "Stepping out of the cool shade of the local tavern, you find yourself face to face with a Viashino adorned in tribal garb.",
"options": [
{
"action": [
null
],
"name": "\"...Can I help you?\"",
"text": "\"Shaman Izka hunts defilers of sacred sands. You will help.\"",
"options": [
@@ -1788,6 +1813,12 @@
"epilogue": {},
"POIToken": ""
}
],
"questSourceTags": [
"mountain_town_generic",
"mountain_town_identity",
"mountain_town_tribal",
"mountain_capital"
]
},
{
@@ -2090,6 +2121,12 @@
"epilogue": {},
"POIToken": ""
}
],
"questSourceTags": [
"island_town_generic",
"island_town_identity",
"island_town_tribal",
"island_capital"
]
},
{
@@ -2364,6 +2401,11 @@
"epilogue": {},
"POIToken": ""
}
],
"questSourceTags": [
"waste_town_generic",
"waste_town_tribal",
"waste_town_identity"
]
},
{
@@ -2767,6 +2809,12 @@
"epilogue": {},
"POIToken": ""
}
],
"questSourceTags": [
"forest_town_generic",
"forest_town_identity",
"forest_town_tribal",
"forest_capital"
]
},
{
@@ -3189,6 +3237,12 @@
"epilogue": {},
"POIToken": ""
}
],
"questSourceTags": [
"plains_town_generic",
"plains_town_identity",
"plains_town_tribal",
"plains_capital"
]
},
{
@@ -3620,6 +3674,12 @@
"epilogue": {},
"POIToken": ""
}
],
"questSourceTags": [
"swamp_town_generic",
"swamp_town_identity",
"swamp_town_tribal",
"swamp_capital"
]
},
{
@@ -3936,6 +3996,12 @@
"epilogue": {},
"POIToken": ""
}
],
"questSourceTags": [
"mountain_town_generic",
"mountain_town_identity",
"mountain_town_tribal",
"mountain_capital"
]
},
{
@@ -4165,6 +4231,12 @@
"epilogue": {},
"POIToken": ""
}
],
"questSourceTags": [
"island_town_generic",
"island_town_identity",
"island_town_tribal",
"island_capital"
]
},
{
@@ -4398,6 +4470,11 @@
"epilogue": {},
"POIToken": ""
}
],
"questSourceTags": [
"waste_town_generic",
"waste_town_identity",
"waste_town_tribal"
]
},
{
@@ -4662,6 +4739,12 @@
"epilogue": {},
"POIToken": ""
}
],
"questSourceTags": [
"swamp_town_generic",
"swamp_town_identity",
"swamp_town_tribal",
"swamp_capital"
]
},
{
@@ -4858,6 +4941,12 @@
"failureDialog": {},
"POIToken": ""
}
],
"questSourceTags": [
"island_town_generic",
"island_town_identity",
"island_town_tribal",
"island_capital"
]
},
{
@@ -5112,6 +5201,12 @@
"failureDialog": {},
"POIToken": ""
}
],
"questSourceTags": [
"forest_capital",
"forest_town_generic",
"forest_town_identity",
"forest_town_tribal"
]
},
{
@@ -5369,6 +5464,12 @@
"failureDialog": {},
"POIToken": ""
}
],
"questSourceTags": [
"plains_capital",
"plains_town_generic",
"plains_town_identity",
"plains_town_tribal"
]
},
{
@@ -5509,6 +5610,11 @@
"failureDialog": {},
"POIToken": ""
}
],
"questSourceTags": [
"waste_town_generic",
"waste_town_identity",
"waste_town_tribal"
]
},
{
@@ -5665,6 +5771,12 @@
"failureDialog": {},
"POIToken": ""
}
],
"questSourceTags": [
"mountain_town_generic",
"mountain_town_identity",
"mountain_town_tribal",
"mountain_capital"
]
}
]