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();
setLayout(layout);
add(tabs);
tabs.addTab("POI",new PointOfInterestEditor());
tabs.addTab("World",new WorldEditor());
tabs.addTab("Items",new ItemsEditor());
tabs.addTab("Enemies",new EnemyEditor());
setVisible(true);
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 javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
/**
@@ -15,6 +13,7 @@ public class EnemyEdit extends JComponent {
JTextField nameField=new JTextField();
JTextField colorField=new JTextField();
JSpinner lifeFiled= new JSpinner(new SpinnerNumberModel(0, 0, 1000, 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));
@@ -30,7 +29,7 @@ public class EnemyEdit extends 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("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("Sprite:")); center.add(atlas);
center.add(new JLabel("Equipment:")); center.add(equipment);
center.add(new JLabel("Colors:")); center.add(colorField);
BorderLayout layout=new BorderLayout();
setLayout(layout);
add(center,BorderLayout.PAGE_START);
add(rewards,BorderLayout.CENTER);
add(preview,BorderLayout.LINE_START);
equipment.getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
EnemyEdit.this.updateEnemy();
}
}));
atlas.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
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();
}
});
equipment.getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy()));
atlas.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy()));
colorField.getDocument().addDocumentListener(new DocumentChangeListener(() -> 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());
speed.addChangeListener(e -> EnemyEdit.this.updateEnemy());
difficulty.addChangeListener(e -> EnemyEdit.this.updateEnemy());
spawnRate.addChangeListener(e -> EnemyEdit.this.updateEnemy());
rewards.addChangeListener(e -> EnemyEdit.this.updateEnemy());
lifeFiled.addChangeListener(e -> EnemyEdit.this.updateEnemy());
refresh();
}
@@ -113,6 +64,7 @@ public class EnemyEdit extends JComponent {
if(currentData==null||updating)
return;
currentData.name=nameField.getText();
currentData.colors=colorField.getText();
currentData.life= (int) lifeFiled.getValue();
currentData.sprite= atlas.getEdit().getText();
if(equipment.getText().isEmpty())
@@ -141,6 +93,7 @@ public class EnemyEdit extends JComponent {
}
updating=true;
nameField.setText(currentData.name);
colorField.setText(currentData.colors);
lifeFiled.setValue(currentData.life);
atlas.getEdit().setText(currentData.sprite);
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.
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() {
Array<IPaperCard> startCards=new Array<>();
if(startBattleWithCard != null) {

View File

@@ -23,6 +23,20 @@ public class ItemData {
public String iconName;
public boolean questItem=false;
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()
{
@@ -67,4 +81,5 @@ public class ItemData {
result += effect.getDescription();
return result;
}
}

File diff suppressed because it is too large Load Diff

View File

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