Compare commits

...

4 Commits

Author SHA1 Message Date
Zukero
baa027bc41 Version 0.5.1 with bugfixes and support for map color filter changes as
dialogue reward.
2017-02-23 18:54:01 +01:00
Zukero
8f2e835e9c Fixed nasty and stupid bug about Actor Conditions' JSON format
(isStacking and isPositive)
2017-02-21 19:23:27 +01:00
Zukero
8333fe3621 Added support for the upcoming script reward "changeColorFilter" 2017-01-25 19:11:45 +01:00
Zukero
291808a564 Naive attempt at Tiled integration. Very primitive yet. Requires Java7
!! for symlink creation.
2017-01-20 18:38:44 +01:00
15 changed files with 94 additions and 23 deletions

View File

@@ -11,6 +11,6 @@
<classpathentry kind="lib" path="lib/rsyntaxtextarea.jar"/>
<classpathentry kind="lib" path="lib/ui.jar"/>
<classpathentry kind="lib" path="lib/bsh-2.0b4.jar"/>
<classpathentry kind="lib" path="lib/AndorsTrainer_v0.1.2.jar"/>
<classpathentry kind="lib" path="lib/AndorsTrainer_v0.1.3.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
start "" "javaw.exe" -Xmx512M -cp "lib\ATCS_v0.5.0.jar;lib\jide-oss.jar;lib\ui.jar;lib\junit-4.10.jar;lib\json_simple-1.1.jar;lib\rsyntaxtextarea.jar;lib\prefuse.jar;lib\AndorsTrainer_v0.1.2.jar;lib\bsh-2.0b4.jar" com.gpl.rpg.atcontentstudio.ATContentStudio
start "" "javaw.exe" -Xmx512M -cp "lib\ATCS_v0.5.1.jar;lib\jide-oss.jar;lib\ui.jar;lib\junit-4.10.jar;lib\json_simple-1.1.jar;lib\rsyntaxtextarea.jar;lib\prefuse.jar;lib\AndorsTrainer_v0.1.3.jar;lib\bsh-2.0b4.jar" com.gpl.rpg.atcontentstudio.ATContentStudio

View File

@@ -1,2 +1,2 @@
#!/bin/bash
java -Xmx512M -cp lib/AndorsTrainer_v0.1.2.jar:lib/ATCS_v0.5.0.jar:lib/prefuse.jar:lib/json_simple-1.1.jar:lib/jide-oss.jar:lib/ui.jar:lib/junit-4.10.jar:lib/rsyntaxtextarea.jar:lib/bsh-2.0b4.jar com.gpl.rpg.atcontentstudio.ATContentStudio
java -Xmx512M -cp lib/AndorsTrainer_v0.1.3.jar:lib/ATCS_v0.5.1.jar:lib/prefuse.jar:lib/json_simple-1.1.jar:lib/jide-oss.jar:lib/ui.jar:lib/junit-4.10.jar:lib/rsyntaxtextarea.jar:lib/bsh-2.0b4.jar com.gpl.rpg.atcontentstudio.ATContentStudio

View File

@@ -1,6 +1,6 @@
!include MUI2.nsh
!define VERSION "0.5.0"
!define VERSION "0.5.1"
!define JAVA_BIN "java"
Name "Andor's Trail Content Studio v${VERSION}"
@@ -63,7 +63,7 @@ Section install
SetOutPath "$INSTDIR\lib\"
file "jide-oss.jar"
file "ui.jar"
file "AndorsTrainer_v0.1.2.jar"
file "AndorsTrainer_v0.1.3.jar"
file "junit-4.10.jar"
file "json_simple-1.1.jar"
file "ATCS_v${VERSION}.jar"
@@ -93,10 +93,11 @@ Section uninstall
Delete "$INSTDIR\lib\ui.jar"
Delete "$INSTDIR\lib\junit-4.10.jar"
Delete "$INSTDIR\lib\json_simple-1.1.jar"
Delete "$INSTDIR\lib\AndorsTrainer_v0.1.2.jar"
Delete "$INSTDIR\lib\AndorsTrainer_v0.1.3.jar"
Delete "$INSTDIR\lib\ATCS_v${VERSION}.jar"
Delete "$INSTDIR\lib\rsyntaxtextarea.jar"
Delete "$INSTDIR\lib\prefuse.jar"
Delete "$INSTDIR\lib\bsh-2.0b4.jar"
RMDir "$INSTDIR\lib\"
Delete "$INSTDIR\ATCS.ico"
Delete "$INSTDIR\ATCS.cmd"

View File

@@ -22,7 +22,7 @@ import com.gpl.rpg.atcontentstudio.ui.WorkspaceSelector;
public class ATContentStudio {
public static final String APP_NAME = "Andor's Trail Content Studio";
public static final String APP_VERSION = "v0.5.0";
public static final String APP_VERSION = "v0.5.1";
public static boolean STARTED = false;
public static StudioFrame frame = null;

View File

@@ -147,7 +147,7 @@ public class ActorCondition extends JSONElement {
public void parse(Map aCondJson) {
if (aCondJson.get("category") != null) this.category = ACCategory.valueOf((String) aCondJson.get("category"));
this.positive = JSONElement.getInteger((Number) aCondJson.get("positive"));
this.positive = JSONElement.getInteger((Number) aCondJson.get("isPositive"));
Map abilityEffect = (Map) aCondJson.get("abilityEffect");
if (abilityEffect != null) {
this.constant_ability_effect = new AbilityEffect();
@@ -269,8 +269,8 @@ public class ActorCondition extends JSONElement {
if (this.icon_id != null) jsonAC.put("iconID", this.icon_id);
if (this.display_name != null) jsonAC.put("name", this.display_name);
if (this.category != null) jsonAC.put("category", this.category.toString());
if (this.positive != null && this.positive == 1) jsonAC.put("positive", this.positive);
if (this.stacking != null && this.stacking == 1) jsonAC.put("stacking", this.stacking);
if (this.positive != null && this.positive == 1) jsonAC.put("isPositive", this.positive);
if (this.stacking != null && this.stacking == 1) jsonAC.put("isStacking", this.stacking);
if (this.round_effect != null) {
Map jsonRound = new LinkedHashMap();
if (this.round_effect.visual_effect != null) jsonRound.put("visualEffectID", this.round_effect.visual_effect);

View File

@@ -64,7 +64,8 @@ public class Dialogue extends JSONElement {
removeSpawnArea,
deactivateSpawnArea,
activateMapObjectGroup,
deactivateMapObjectGroup
deactivateMapObjectGroup,
changeMapFilter
}
}
@@ -244,6 +245,7 @@ public class Dialogue extends JSONElement {
case spawnAll:
case removeSpawnArea:
case deactivateSpawnArea:
case changeMapFilter:
reward.map = reward.map_name != null ? proj.getMap(reward.map_name) : null;
break;
case actorCondition:

View File

@@ -39,6 +39,7 @@ public class TMXMap extends GameDataElement {
public static final String WALKABLE_LAYER_NAME = "Walkable";
public enum ColorFilter {
none,
black20,
black40,
black60,

View File

@@ -2,6 +2,10 @@ package com.gpl.rpg.atcontentstudio.model.maps;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -17,12 +21,14 @@ import com.gpl.rpg.atcontentstudio.model.Project;
import com.gpl.rpg.atcontentstudio.model.Project.ResourceSet;
import com.gpl.rpg.atcontentstudio.model.ProjectTreeNode;
import com.gpl.rpg.atcontentstudio.model.gamedata.GameDataSet;
import com.gpl.rpg.atcontentstudio.model.sprites.SpriteSheetSet;
import com.gpl.rpg.atcontentstudio.ui.DefaultIcons;
public class TMXMapSet implements ProjectTreeNode {
public static final String DEFAULT_REL_PATH_IN_SOURCE = "res/xml/";
public static final String DEFAULT_REL_PATH_IN_PROJECT = "maps/";
public static final String DEFAULT_REL_PATH_IN_SOURCE = "res"+File.separator+"xml"+File.separator;
public static final String DEFAULT_REL_PATH_IN_PROJECT = "maps"+File.separator;
public static final String DEFAULT_REL_PATH_TO_DRAWABLE = ".."+File.separator+"drawable"+File.separator;
public static final String GAME_MAPS_ARRAY_NAME = "loadresource_maps";
public static final String DEBUG_SUFFIX = "_debug";
@@ -44,6 +50,15 @@ public class TMXMapSet implements ProjectTreeNode {
if (!this.mapFolder.exists()) {
this.mapFolder.mkdirs();
}
Path target = Paths.get(getProject().baseContent.gameSprites.drawableFolder.getAbsolutePath());
Path link = Paths.get(new File(mapFolder.getAbsolutePath()+File.separator+DEFAULT_REL_PATH_TO_DRAWABLE).getAbsolutePath());
if (!Files.exists(link)) {
try {
Files.createSymbolicLink(link, target);
} catch (IOException e) {
e.printStackTrace();
}
}
}
this.tmxMaps = new ArrayList<TMXMap>();

View File

@@ -429,20 +429,24 @@ public class WorkspaceActions {
}
@Override
public synchronized void putValue(String key, Object value) {
public void putValue(String key, Object value) {
PropertyChangeEvent event = new PropertyChangeEvent(this, key, values.get(key), value);
values.put(key, value);
for (PropertyChangeListener l : listeners) {
l.propertyChange(event);
synchronized(listeners) {
for (PropertyChangeListener l : listeners) {
l.propertyChange(event);
}
}
}
@Override
public synchronized void setEnabled(boolean b) {
public void setEnabled(boolean b) {
PropertyChangeEvent event = new PropertyChangeEvent(this, "enabled", isEnabled(), b);
enabled = b;
for (PropertyChangeListener l : listeners) {
l.propertyChange(event);
synchronized(listeners) {
for (PropertyChangeListener l : listeners) {
l.propertyChange(event);
}
}
}
@@ -454,13 +458,17 @@ public class WorkspaceActions {
private Set<PropertyChangeListener> listeners = new HashSet<PropertyChangeListener>();
@Override
public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
listeners.add(listener);
public void addPropertyChangeListener(PropertyChangeListener listener) {
synchronized(listeners) {
listeners.add(listener);
}
}
@Override
public synchronized void removePropertyChangeListener(PropertyChangeListener listener) {
listeners.remove(listener);
public void removePropertyChangeListener(PropertyChangeListener listener) {
synchronized(listeners) {
listeners.remove(listener);
}
}
}

View File

@@ -91,6 +91,7 @@ public class DialogueEditor extends JSONElementEditor {
private JPanel rewardsParamsPane;
private MyComboBox rewardMap;
private JTextField rewardObjId;
private JComboBox rewardObjIdCombo;
private MyComboBox rewardObj;
private JSpinner rewardValue;
@@ -360,6 +361,14 @@ public class DialogueEditor extends JSONElementEditor {
case deactivateMapObjectGroup:
rewardMap = addMapBox(pane, ((Dialogue)target).getProject(), "Map Name: ", reward.map, writable, listener);
rewardObjId = addTextField(pane, "Group ID: ", reward.reward_obj_id, writable, listener);
rewardObjIdCombo = null;
rewardObj = null;
rewardValue = null;
break;
case changeMapFilter:
rewardMap = addMapBox(pane, ((Dialogue)target).getProject(), "Map Name: ", reward.map, writable, listener);
rewardObjId = null;
rewardObjIdCombo = addEnumValueBox(pane, "Color Filter", TMXMap.ColorFilter.values(), reward.reward_obj_id != null ? TMXMap.ColorFilter.valueOf(reward.reward_obj_id) : TMXMap.ColorFilter.none, writable, listener);
rewardObj = null;
rewardValue = null;
break;
@@ -368,30 +377,35 @@ public class DialogueEditor extends JSONElementEditor {
case spawnAll:
rewardMap = addMapBox(pane, ((Dialogue)target).getProject(), "Map Name: ", reward.map, writable, listener);
rewardObjId = addTextField(pane, "Area ID: ", reward.reward_obj_id, writable, listener);
rewardObjIdCombo = null;
rewardObj = null;
rewardValue = null;
break;
case actorCondition:
rewardMap = null;
rewardObjId = null;
rewardObjIdCombo = null;
rewardObj = addActorConditionBox(pane, ((Dialogue)target).getProject(), "Actor Condition: ", (ActorCondition) reward.reward_obj, writable, listener);
rewardValue = addIntegerField(pane, "Duration: ", reward.reward_value, false, writable, listener);
break;
case alignmentChange:
rewardMap = null;
rewardObjId = addTextField(pane, "Faction: ", reward.reward_obj_id, writable, listener);
rewardObjIdCombo = null;
rewardObj = null;
rewardValue = addIntegerField(pane, "Value: ", reward.reward_value, true, writable, listener);
break;
case createTimer:
rewardMap = null;
rewardObjId = addTextField(pane, "Timer ID: ", reward.reward_obj_id, writable, listener);
rewardObjIdCombo = null;
rewardObj = null;
rewardValue = null;
break;
case dropList:
rewardMap = null;
rewardObjId = null;
rewardObjIdCombo = null;
rewardObj = addDroplistBox(pane, ((Dialogue)target).getProject(), "Droplist: ", (Droplist) reward.reward_obj, writable, listener);
rewardValue = null;
break;
@@ -404,12 +418,14 @@ public class DialogueEditor extends JSONElementEditor {
case questProgress:
rewardMap = null;
rewardObjId = null;
rewardObjIdCombo = null;
rewardObj = addQuestBox(pane, ((Dialogue)target).getProject(), "Quest: ", (Quest) reward.reward_obj, writable, listener);
rewardValue = addIntegerField(pane, "Step ID: ", reward.reward_value, false, writable, listener);
break;
case skillIncrease:
rewardMap = null;
rewardObjId = addTextField(pane, "Skill ID: ", reward.reward_obj_id, writable, listener);
rewardObjIdCombo = null;
rewardObj = null;
rewardValue = null;
break;
@@ -819,6 +835,10 @@ public class DialogueEditor extends JSONElementEditor {
label.setText("Respawn all monsters in spawnarea area "+rewardObjDesc+" on map "+reward.map_name);
label.setIcon(new ImageIcon(DefaultIcons.getNPCIcon()));
break;
case changeMapFilter:
label.setText("Change map filter to "+rewardObjDesc+" on map "+reward.map_name);
label.setIcon(new ImageIcon(DefaultIcons.getReplaceIcon()));
break;
}
} else {
label.setText("New, undefined reward");
@@ -1100,6 +1120,9 @@ public class DialogueEditor extends JSONElementEditor {
} else if (source == rewardObjId) {
selectedReward.reward_obj_id = rewardObjId.getText();
rewardsListModel.itemChanged(selectedReward);
} else if (source == rewardObjIdCombo) {
selectedReward.reward_obj_id = rewardObjIdCombo.getSelectedItem().toString();
rewardsListModel.itemChanged(selectedReward);
} else if (source == rewardObj) {
if (selectedReward.reward_obj != null) {
selectedReward.reward_obj.removeBacklink(dialogue);

View File

@@ -92,6 +92,15 @@ public class MapColorFilters {
0.00f, 0.00f, 0.00f, 1.0f, 0.0f
});
break;
case none:
f=1f;
newComp = new MatrixComposite(new float[]{
f, 0.00f, 0.00f, 0.0f, 0.0f,
0.00f, f, 0.00f, 0.0f, 0.0f,
0.00f, 0.00f, f, 0.0f, 0.0f,
0.00f, 0.00f, 0.00f, 1.0f, 0.0f
});
break;
default:
break;

View File

@@ -18,6 +18,7 @@ import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
@@ -1604,6 +1605,17 @@ public class TMXMapEditor extends Editor {
savePane.add(gdeIcon, JideBoxLayout.FIX);
savePane.setLayout(new JideBoxLayout(savePane, JideBoxLayout.LINE_AXIS, 6));
if (map.writable) {
gdeIcon.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
Runtime.getRuntime().exec(new String[]{"tiled",map.tmxFile.getAbsolutePath()});
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
if (map.getDataType() == GameSource.Type.altered) {
savePane.add(message = new JLabel(ALTERED_MESSAGE), JideBoxLayout.FIX);
} else if (map.getDataType() == GameSource.Type.created) {