added item editor

This commit is contained in:
Grimm
2022-04-24 20:35:34 +02:00
parent ee1c8a4aaf
commit 098e601313
11 changed files with 1488 additions and 1029 deletions

View File

@@ -14,6 +14,9 @@ public class EditorMainWindow extends JFrame {
BorderLayout layout=new BorderLayout(); BorderLayout layout=new BorderLayout();
setLayout(layout); setLayout(layout);
add(tabs); add(tabs);
tabs.addTab("POI",new PointOfInterestEditor());
tabs.addTab("World",new WorldEditor());
tabs.addTab("Items",new ItemsEditor());
tabs.addTab("Enemies",new EnemyEditor()); tabs.addTab("Enemies",new EnemyEditor());
setVisible(true); setVisible(true);
setSize(800,600); setSize(800,600);

View File

@@ -0,0 +1,115 @@
package forge.adventure.editor;
import forge.adventure.data.EffectData;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
public class EffectEditor extends JComponent {
EffectData currentData;
JTextField name =new JTextField();
JSpinner changeStartCards = new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1));
JSpinner lifeModifier = new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1));
JSpinner moveSpeed = new JSpinner(new SpinnerNumberModel(0f, 0, 1, 0.1f));
TextListEdit startBattleWithCard =new TextListEdit();
JCheckBox colorView =new JCheckBox();
EffectEditor opponent = null;
private boolean updating=false;
public EffectEditor(boolean isOpponentEffect)
{
if(!isOpponentEffect)
opponent=new EffectEditor(true);
setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
JPanel parameters=new JPanel();
parameters.setBorder(BorderFactory.createTitledBorder("Effect"));
parameters.setLayout(new GridLayout(7,2)) ;
parameters.add(new JLabel("Name:")); parameters.add(name);
parameters.add(new JLabel("Start with extra cards:")); parameters.add(changeStartCards);
parameters.add(new JLabel("Change life:")); parameters.add(lifeModifier);
parameters.add(new JLabel("Movement speed:")); parameters.add(moveSpeed);
parameters.add(new JLabel("Start battle with cards:")); parameters.add(startBattleWithCard);
parameters.add(new JLabel("color view:")); parameters.add(colorView);
add(parameters);
if(!isOpponentEffect)
{ add(new JLabel("Opponent:")); add(opponent);}
changeStartCards.addChangeListener(e -> EffectEditor.this.updateEffect());
lifeModifier.addChangeListener(e -> EffectEditor.this.updateEffect());
moveSpeed.addChangeListener(e -> EffectEditor.this.updateEffect());
colorView.addChangeListener(e -> EffectEditor.this.updateEffect());
name.getDocument().addDocumentListener(new DocumentChangeListener(() -> EffectEditor.this.updateEffect()));
startBattleWithCard.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> EffectEditor.this.updateEffect()));
if(opponent!=null)
opponent.addChangeListener(e -> EffectEditor.this.updateEffect());
}
private void updateEffect() {
if(currentData==null||updating)
return;
currentData.name=name.getText();
currentData.changeStartCards=((Integer)changeStartCards.getValue()).intValue();
currentData.lifeModifier= ((Integer)lifeModifier.getValue()).intValue();
currentData.moveSpeed= ((Float)moveSpeed.getValue()).floatValue();
currentData.startBattleWithCard = startBattleWithCard.getList();
currentData.colorView = colorView.isSelected();
currentData.opponent = opponent.currentData;
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
if (listeners != null && listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
public void addChangeListener(ChangeListener l) {
listenerList.add(ChangeListener.class, l);
}
public void setCurrentEffect(EffectData data)
{
if(data==null)
return;
currentData=data;
refresh();
}
public EffectData getCurrentEffect()
{
return currentData;
}
private void refresh() {
setEnabled(currentData!=null);
if(currentData==null)
{
return;
}
updating=true;
name.setText(currentData.name);
lifeModifier.setValue(currentData.lifeModifier);
changeStartCards.setValue(currentData.changeStartCards);
startBattleWithCard.setText(currentData.startBattleWithCard);
colorView.setSelected(currentData.colorView);
moveSpeed.setValue(currentData.moveSpeed);
if(opponent!=null)
opponent.setCurrentEffect(currentData.opponent);
updating=false;
}
}

View File

@@ -3,8 +3,6 @@ package forge.adventure.editor;
import forge.adventure.data.EnemyData; import forge.adventure.data.EnemyData;
import javax.swing.*; import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*; import java.awt.*;
/** /**
@@ -15,6 +13,7 @@ public class EnemyEdit extends JComponent {
JTextField nameField=new JTextField(); JTextField nameField=new JTextField();
JTextField colorField=new JTextField();
JSpinner lifeFiled= new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1)); JSpinner lifeFiled= new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1));
JSpinner spawnRate= new JSpinner(new SpinnerNumberModel(0.0, 0., 1, 0.1)); JSpinner spawnRate= new JSpinner(new SpinnerNumberModel(0.0, 0., 1, 0.1));
JSpinner difficulty= new JSpinner(new SpinnerNumberModel(0.0, 0., 1, 0.1)); JSpinner difficulty= new JSpinner(new SpinnerNumberModel(0.0, 0., 1, 0.1));
@@ -30,7 +29,7 @@ public class EnemyEdit extends JComponent {
{ {
JComponent center=new JComponent() { }; JComponent center=new JComponent() { };
center.setLayout(new GridLayout(8,2)); center.setLayout(new GridLayout(9,2));
center.add(new JLabel("Name:")); center.add(nameField); center.add(new JLabel("Name:")); center.add(nameField);
center.add(new JLabel("Life:")); center.add(lifeFiled); center.add(new JLabel("Life:")); center.add(lifeFiled);
@@ -40,72 +39,24 @@ public class EnemyEdit extends JComponent {
center.add(new JLabel("Deck:")); center.add(deck); center.add(new JLabel("Deck:")); center.add(deck);
center.add(new JLabel("Sprite:")); center.add(atlas); center.add(new JLabel("Sprite:")); center.add(atlas);
center.add(new JLabel("Equipment:")); center.add(equipment); center.add(new JLabel("Equipment:")); center.add(equipment);
center.add(new JLabel("Colors:")); center.add(colorField);
BorderLayout layout=new BorderLayout(); BorderLayout layout=new BorderLayout();
setLayout(layout); setLayout(layout);
add(center,BorderLayout.PAGE_START); add(center,BorderLayout.PAGE_START);
add(rewards,BorderLayout.CENTER); add(rewards,BorderLayout.CENTER);
add(preview,BorderLayout.LINE_START); add(preview,BorderLayout.LINE_START);
equipment.getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() { equipment.getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy()));
@Override atlas.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy()));
public void run() { colorField.getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy()));
EnemyEdit.this.updateEnemy(); nameField.getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy()));
} deck.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy()));
})); lifeFiled.addChangeListener(e -> EnemyEdit.this.updateEnemy());
atlas.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() { speed.addChangeListener(e -> EnemyEdit.this.updateEnemy());
@Override difficulty.addChangeListener(e -> EnemyEdit.this.updateEnemy());
public void run() { spawnRate.addChangeListener(e -> EnemyEdit.this.updateEnemy());
EnemyEdit.this.updateEnemy(); rewards.addChangeListener(e -> EnemyEdit.this.updateEnemy());
} lifeFiled.addChangeListener(e -> EnemyEdit.this.updateEnemy());
}));
nameField.getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
EnemyEdit.this.updateEnemy();
}
}));
deck.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
EnemyEdit.this.updateEnemy();
}
}));
lifeFiled.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
EnemyEdit.this.updateEnemy();
}
});
speed.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
EnemyEdit.this.updateEnemy();
}
});
difficulty.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
EnemyEdit.this.updateEnemy();
}
});
spawnRate.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
EnemyEdit.this.updateEnemy();
}
});
rewards.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
EnemyEdit.this.updateEnemy();
}
});
lifeFiled.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
EnemyEdit.this.updateEnemy();
}
});
refresh(); refresh();
} }
@@ -113,6 +64,7 @@ public class EnemyEdit extends JComponent {
if(currentData==null||updating) if(currentData==null||updating)
return; return;
currentData.name=nameField.getText(); currentData.name=nameField.getText();
currentData.colors=colorField.getText();
currentData.life= (int) lifeFiled.getValue(); currentData.life= (int) lifeFiled.getValue();
currentData.sprite= atlas.getEdit().getText(); currentData.sprite= atlas.getEdit().getText();
if(equipment.getText().isEmpty()) if(equipment.getText().isEmpty())
@@ -141,6 +93,7 @@ public class EnemyEdit extends JComponent {
} }
updating=true; updating=true;
nameField.setText(currentData.name); nameField.setText(currentData.name);
colorField.setText(currentData.colors);
lifeFiled.setValue(currentData.life); lifeFiled.setValue(currentData.life);
atlas.getEdit().setText(currentData.sprite); atlas.getEdit().setText(currentData.sprite);
if(currentData.equipment!=null) if(currentData.equipment!=null)

View File

@@ -0,0 +1,88 @@
package forge.adventure.editor;
import forge.adventure.data.ItemData;
import javax.swing.*;
import java.awt.*;
/**
* Editor class to edit configuration, maybe moved or removed
*/
public class ItemEdit extends JComponent {
ItemData currentData;
JTextField nameField=new JTextField();
JTextField equipmentSlot=new JTextField();
JTextField iconName=new JTextField();
EffectEditor effect=new EffectEditor(false);
JTextField description=new JTextField();
JCheckBox questItem=new JCheckBox();
JSpinner cost= new JSpinner(new SpinnerNumberModel(0, 0, 100000, 1));
private boolean updating=false;
public ItemEdit()
{
setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
JPanel parameters=new JPanel();
parameters.setBorder(BorderFactory.createTitledBorder("Parameter"));
parameters.setLayout(new GridLayout(6,2)) ;
parameters.add(new JLabel("Name:")); parameters.add(nameField);
parameters.add(new JLabel("equipmentSlot:")); parameters.add(equipmentSlot);
parameters.add(new JLabel("description:")); parameters.add(description);
parameters.add(new JLabel("iconName")); parameters.add(iconName);
parameters.add(new JLabel("questItem")); parameters.add(questItem);
parameters.add(new JLabel("cost")); parameters.add(cost);
add(parameters);
add(effect);
nameField.getDocument().addDocumentListener(new DocumentChangeListener(() -> ItemEdit.this.updateItem()));
equipmentSlot.getDocument().addDocumentListener(new DocumentChangeListener(() -> ItemEdit.this.updateItem()));
description.getDocument().addDocumentListener(new DocumentChangeListener(() -> ItemEdit.this.updateItem()));
iconName.getDocument().addDocumentListener(new DocumentChangeListener(() -> ItemEdit.this.updateItem()));
cost.addChangeListener(e -> ItemEdit.this.updateItem());
questItem.addChangeListener(e -> ItemEdit.this.updateItem());
effect.addChangeListener(e -> ItemEdit.this.updateItem());
refresh();
}
private void updateItem() {
if(currentData==null||updating)
return;
currentData.name=nameField.getText();
currentData.equipmentSlot= equipmentSlot.getText();
currentData.effect= effect.getCurrentEffect();
currentData.description=description.getText();
currentData.iconName=iconName.getText();
currentData.questItem=questItem.isSelected();
currentData.cost=((Integer) cost.getValue()).intValue();
}
public void setCurrentItem(ItemData data)
{
currentData=data;
refresh();
}
private void refresh() {
setEnabled(currentData!=null);
if(currentData==null)
{
return;
}
updating=true;
nameField.setText(currentData.name);
effect.setCurrentEffect(currentData.effect);
equipmentSlot.setText(currentData.equipmentSlot);
description.setText(currentData.description);
iconName.setText(currentData.iconName);
questItem.setSelected(currentData.questItem);
cost.setValue(currentData.cost);
updating=false;
}
}

View File

@@ -0,0 +1,128 @@
package forge.adventure.editor;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.JsonWriter;
import forge.adventure.data.ItemData;
import forge.adventure.util.Config;
import forge.adventure.util.Paths;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
public class ItemsEditor extends JComponent {
DefaultListModel<ItemData> model = new DefaultListModel<>();
JList<ItemData> list = new JList<>(model);
JToolBar toolBar = new JToolBar("toolbar");
ItemEdit edit=new ItemEdit();
static SwingAtlas itemAtlas;
public class ItemDataRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if(!(value instanceof ItemData))
return label;
ItemData Item=(ItemData) value;
// Get the renderer component from parent class
label.setText(Item.name);
if(itemAtlas==null)
itemAtlas=new SwingAtlas(Config.instance().getFile(Paths.ITEMS_ATLAS));
if(itemAtlas.has(Item.iconName))
label.setIcon(itemAtlas.get(Item.iconName));
else
{
ImageIcon img=itemAtlas.getAny();
if(img!=null)
label.setIcon(img);
}
return label;
}
}
public void addButton(String name, ActionListener action)
{
JButton newButton=new JButton(name);
newButton.addActionListener(action);
toolBar.add(newButton);
}
public ItemsEditor()
{
list.setCellRenderer(new ItemsEditor.ItemDataRenderer());
list.addListSelectionListener(e -> ItemsEditor.this.updateEdit());
addButton("add", e -> ItemsEditor.this.addItem());
addButton("remove", e -> ItemsEditor.this.remove());
addButton("copy", e -> ItemsEditor.this.copy());
addButton("load", e -> ItemsEditor.this.load());
addButton("save", e -> ItemsEditor.this.save());
BorderLayout layout=new BorderLayout();
setLayout(layout);
add(new JScrollPane(list), BorderLayout.LINE_START);
add(toolBar, BorderLayout.PAGE_START);
add(edit,BorderLayout.CENTER);
load();
}
private void copy() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
ItemData data=new ItemData(model.get(selected));
model.add(model.size(),data);
}
private void updateEdit() {
int selected=list.getSelectedIndex();
if(selected<0)
return;
edit.setCurrentItem(model.get(selected));
}
void save()
{
Array<ItemData> allEnemies=new Array<>();
for(int i=0;i<model.getSize();i++)
allEnemies.add(model.get(i));
Json json = new Json(JsonWriter.OutputType.json);
FileHandle handle = Config.instance().getFile(Paths.ITEMS);
handle.writeString(json.prettyPrint(json.toJson(allEnemies,Array.class, ItemData.class)),false);
}
void load()
{
model.clear();
Array<ItemData> allEnemies=new Array<>();
Json json = new Json();
FileHandle handle = Config.instance().getFile(Paths.ITEMS);
if (handle.exists())
{
Array readEnemies=json.fromJson(Array.class, ItemData.class, handle);
allEnemies = readEnemies;
}
for (int i=0;i<allEnemies.size;i++) {
model.add(i,allEnemies.get(i));
}
}
void addItem()
{
ItemData data=new ItemData();
data.name="Item "+model.getSize();
model.add(model.size(),data);
}
void remove()
{
int selected=list.getSelectedIndex();
if(selected<0)
return;
model.remove(selected);
}
}

View File

@@ -0,0 +1,6 @@
package forge.adventure.editor;
import java.awt.*;
public class PointOfInterestEditor extends Component {
}

View File

@@ -0,0 +1,6 @@
package forge.adventure.editor;
import java.awt.*;
public class WorldEditor extends Component {
}

View File

@@ -20,6 +20,20 @@ public class EffectData implements Serializable {
//Opponent field. //Opponent field.
public EffectData opponent; //Effects to be applied to the opponent's side. public EffectData opponent; //Effects to be applied to the opponent's side.
public EffectData()
{
}
public EffectData(EffectData effect) {
name=effect.name;
lifeModifier=effect.lifeModifier;
changeStartCards=effect.changeStartCards;
startBattleWithCard=effect.startBattleWithCard;
colorView=effect.colorView;
opponent=opponent==null?null:new EffectData(effect.opponent);
}
public Array<IPaperCard> startBattleWithCards() { public Array<IPaperCard> startBattleWithCards() {
Array<IPaperCard> startCards=new Array<>(); Array<IPaperCard> startCards=new Array<>();
if(startBattleWithCard != null) { if(startBattleWithCard != null) {

View File

@@ -23,6 +23,20 @@ public class ItemData {
public String iconName; public String iconName;
public boolean questItem=false; public boolean questItem=false;
public int cost=1000; public int cost=1000;
public ItemData()
{
}
public ItemData(ItemData cpy)
{
name = cpy.name ;
equipmentSlot = cpy.equipmentSlot;
effect = new EffectData(cpy.effect);
description = cpy.description ;
iconName = cpy.iconName ;
questItem = cpy.questItem ;
cost = cpy.cost ;
}
public Sprite sprite() public Sprite sprite()
{ {
@@ -67,4 +81,5 @@ public class ItemData {
result += effect.getDescription(); result += effect.getDescription();
return result; return result;
} }
} }

File diff suppressed because it is too large Load Diff

View File

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