Compare commits

..

2 Commits

Author SHA1 Message Date
Zukero
547f76de33 Merge branch 'master' into git_integration
Conflicts:
	.classpath
	src/com/gpl/rpg/atcontentstudio/ATContentStudio.java
2018-09-28 09:48:36 +02:00
Zukero
6701d9784d Added JGit libs and deps in classpath. Update to Java 8 needed. 2017-10-20 17:22:25 +02:00
46 changed files with 3107 additions and 3438 deletions

View File

@@ -5,7 +5,7 @@
<classpathentry kind="src" path="hacked-libtiled"/> <classpathentry kind="src" path="hacked-libtiled"/>
<classpathentry kind="src" path="siphash-zackehh/src/main/java"/> <classpathentry kind="src" path="siphash-zackehh/src/main/java"/>
<classpathentry kind="src" path="minify"/> <classpathentry kind="src" path="minify"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.8.0_152"/>
<classpathentry kind="lib" path="lib/jide-oss.jar"/> <classpathentry kind="lib" path="lib/jide-oss.jar"/>
<classpathentry kind="lib" path="lib/json_simple-1.1.jar"/> <classpathentry kind="lib" path="lib/json_simple-1.1.jar"/>
<classpathentry kind="lib" path="lib/junit-4.10.jar"/> <classpathentry kind="lib" path="lib/junit-4.10.jar"/>
@@ -14,6 +14,19 @@
<classpathentry kind="lib" path="lib/ui.jar"/> <classpathentry kind="lib" path="lib/ui.jar"/>
<classpathentry kind="lib" path="lib/bsh-2.0b4.jar"/> <classpathentry kind="lib" path="lib/bsh-2.0b4.jar"/>
<classpathentry kind="lib" path="lib/jsoup-1.10.2.jar" sourcepath="lib/jsoup-1.10.2-sources.jar"/> <classpathentry kind="lib" path="lib/jsoup-1.10.2.jar" sourcepath="lib/jsoup-1.10.2-sources.jar"/>
<classpathentry kind="lib" path="lib/AndorsTrainer_v0.1.5.jar"/> <classpathentry kind="lib" path="lib/AndorsTrainer_v0.1.4.jar"/>
<classpathentry kind="lib" path="lib/JGit/commons-codec-1.6.jar"/>
<classpathentry kind="lib" path="lib/JGit/commons-logging-1.1.3.jar"/>
<classpathentry kind="lib" path="lib/JGit/httpclient-4.3.6.jar"/>
<classpathentry kind="lib" path="lib/JGit/httpcore-4.3.3.jar"/>
<classpathentry kind="lib" path="lib/JGit/JavaEWAH-1.1.6.jar"/>
<classpathentry kind="lib" path="lib/JGit/jsch-0.1.54.jar"/>
<classpathentry kind="lib" path="lib/JGit/jzlib-1.0.7.jar"/>
<classpathentry kind="lib" path="lib/JGit/org.eclipse.jgit-4.9.0.201710071750-r.jar">
<attributes>
<attribute name="javadoc_location" value="jar:platform:/resource/ATContentStudio/lib/JGit/org.eclipse.jgit-4.9.0.201710071750-r-javadoc.jar!/"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="lib/JGit/slf4j-api-1.7.2.jar"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
</classpath> </classpath>

View File

@@ -1,11 +1,12 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6 org.eclipse.jdt.core.compiler.source=1.8

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jardesc> <jardesc>
<jar path="ATContentStudio/ATCS_v0.6.19.jar"/> <jar path="ATContentStudio/ATCS_v0.6.14.jar"/>
<options buildIfNeeded="true" compress="true" descriptionLocation="/ATContentStudio/ATCS_JAR.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/> <options buildIfNeeded="true" compress="true" descriptionLocation="/ATContentStudio/ATCS_JAR.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
<storedRefactorings deprecationInfo="true" structuralOnly="false"/> <storedRefactorings deprecationInfo="true" structuralOnly="false"/>
<selectedProjects/> <selectedProjects/>

View File

@@ -913,8 +913,7 @@ public class TMXMapReader
private class MapEntityResolver implements EntityResolver private class MapEntityResolver implements EntityResolver
{ {
public InputSource resolveEntity(String publicId, String systemId) { public InputSource resolveEntity(String publicId, String systemId) {
if (systemId.equals("http://mapeditor.org/dtd/1.0/map.dtd") || if (systemId.equals("http://mapeditor.org/dtd/1.0/map.dtd")) {
systemId.equals("https://mapeditor.org/dtd/1.0/map.dtd")) {
return new InputSource(TMXMapReader.class.getResourceAsStream( return new InputSource(TMXMapReader.class.getResourceAsStream(
"resources/map.dtd")); "resources/map.dtd"));
} }

View File

@@ -47,9 +47,6 @@ import java.util.Vector;
import java.util.zip.DeflaterOutputStream; import java.util.zip.DeflaterOutputStream;
import java.util.zip.GZIPOutputStream; import java.util.zip.GZIPOutputStream;
import com.gpl.rpg.atcontentstudio.model.GameSource.Type;
import com.gpl.rpg.atcontentstudio.model.maps.TMXMapSet;
import tiled.core.AnimatedTile; import tiled.core.AnimatedTile;
import tiled.core.Map; import tiled.core.Map;
import tiled.core.MapLayer; import tiled.core.MapLayer;
@@ -153,7 +150,7 @@ public class TMXMapWriter
} }
private void writeMap(Map map, XMLWriter w, String wp) throws IOException { private void writeMap(Map map, XMLWriter w, String wp) throws IOException {
w.writeDocType("map", null, "https://mapeditor.org/dtd/1.0/map.dtd"); w.writeDocType("map", null, "http://mapeditor.org/dtd/1.0/map.dtd");
w.startElement("map"); w.startElement("map");
w.writeAttribute("version", "1.0"); w.writeAttribute("version", "1.0");
@@ -241,15 +238,7 @@ public class TMXMapWriter
} else { } else {
w.startElement("tileset"); w.startElement("tileset");
w.writeAttribute("firstgid", getFirstGidForTileset(set)); w.writeAttribute("firstgid", getFirstGidForTileset(set));
if (set.sheet != null && set.sheet.parent.getDataType() == Type.source) { w.writeAttribute("source", getRelativePath(wp, source));
String fileName = set.getName();
if (fileName.length() > 3 && !(fileName.substring(fileName.length() - 4).equalsIgnoreCase(".png"))) {
fileName += ".png";
}
w.writeAttribute("source", (TMXMapSet.DEFAULT_REL_PATH_TO_DRAWABLE + fileName).replace("\\", "/"));
} else {
w.writeAttribute("source", getRelativePath(wp, source));
}
if (set.getBaseDir() != null) { if (set.getBaseDir() != null) {
w.writeAttribute("basedir", set.getBaseDir()); w.writeAttribute("basedir", set.getBaseDir());
} }
@@ -290,15 +279,7 @@ public class TMXMapWriter
if (tileBitmapFile != null) { if (tileBitmapFile != null) {
w.startElement("image"); w.startElement("image");
if (set.sheet != null && set.sheet.parent.getDataType() == Type.source) { w.writeAttribute("source", getRelativePath(wp, tileBitmapFile));
String fileName = set.getName();
if (fileName.length() > 3 && !(fileName.substring(fileName.length() - 4).equalsIgnoreCase(".png"))) {
fileName += ".png";
}
w.writeAttribute("source", (TMXMapSet.DEFAULT_REL_PATH_TO_DRAWABLE + fileName).replace("\\", "/"));
} else {
w.writeAttribute("source", getRelativePath(wp, tileBitmapFile));
}
if (set.sheetDimensions != null) { if (set.sheetDimensions != null) {
w.writeAttribute("width", set.sheetDimensions.width); w.writeAttribute("width", set.sheetDimensions.width);
w.writeAttribute("height", set.sheetDimensions.height); w.writeAttribute("height", set.sheetDimensions.height);

Binary file not shown.

Binary file not shown.

BIN
lib/JGit/JavaEWAH-1.1.6.jar Executable file

Binary file not shown.

BIN
lib/JGit/commons-codec-1.6.jar Executable file

Binary file not shown.

Binary file not shown.

BIN
lib/JGit/httpclient-4.3.6.jar Executable file

Binary file not shown.

BIN
lib/JGit/httpcore-4.3.3.jar Executable file

Binary file not shown.

BIN
lib/JGit/jsch-0.1.54.jar Executable file

Binary file not shown.

BIN
lib/JGit/jzlib-1.0.7.jar Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
lib/JGit/slf4j-api-1.7.2.jar Executable file

Binary file not shown.

View File

@@ -1 +1 @@
v0.6.19 v0.6.14

View File

@@ -1,8 +1,8 @@
!include MUI2.nsh !include MUI2.nsh
!define VERSION "0.6.19" !define VERSION "0.6.14"
!define TRAINER_VERSION "0.1.5" !define TRAINER_VERSION "0.1.4"
!define JAVA_BIN "java" !define JAVA_BIN "javaw"
Name "Andor's Trail Content Studio v${VERSION}" Name "Andor's Trail Content Studio v${VERSION}"
OutFile "ATCS_v${VERSION}_Setup.exe" OutFile "ATCS_v${VERSION}_Setup.exe"
@@ -83,16 +83,16 @@ Section install
FileClose $9 FileClose $9
SetOutPath "$INSTDIR\lib\" SetOutPath "$INSTDIR\lib\"
file "C:\AT\ATCS_source\lib\jide-oss.jar" file "jide-oss.jar"
file "C:\AT\ATCS_source\lib\ui.jar" file "ui.jar"
file "C:\AT\ATCS_source\lib\AndorsTrainer_v${TRAINER_VERSION}.jar" file "AndorsTrainer_v${TRAINER_VERSION}.jar"
file "C:\AT\ATCS_source\lib\junit-4.10.jar" file "junit-4.10.jar"
file "C:\AT\ATCS_source\lib\json_simple-1.1.jar" file "json_simple-1.1.jar"
file "C:\AT\temp\ATCS_v0.6.19\ATCS_v${VERSION}.jar" file "ATCS_v${VERSION}.jar"
file "C:\AT\ATCS_source\lib\rsyntaxtextarea.jar" file "rsyntaxtextarea.jar"
file "C:\AT\ATCS_source\lib\prefuse.jar" file "prefuse.jar"
file "C:\AT\ATCS_source\lib\bsh-2.0b4.jar" file "bsh-2.0b4.jar"
file "C:\AT\ATCS_source\lib\jsoup-1.10.2.jar" file "jsoup-1.10.2.jar"
SetOutPath $INSTDIR SetOutPath $INSTDIR

View File

@@ -1,89 +1,64 @@
atcs.spritesheet.actorconditions_1.category=actorcondition atcs.spritesheet.actorconditions_1.category=actorcondition
atcs.spritesheet.actorconditions_2.category=actorcondition atcs.spritesheet.actorconditions_2.category=actorcondition
atcs.spritesheet.actorconditions_japozero.category=actorcondition atcs.spritesheet.actorconditions_japozero.category=actorcondition
atcs.spritesheet.actorconditions_omi1.category=actorcondition
atcs.spritesheet.actorconditions_omi2.category=actorcondition
atcs.spritesheet.effect_blood3.animate=true
atcs.spritesheet.effect_blood4.animate=true
atcs.spritesheet.effect_bluetentacle.animate=true
atcs.spritesheet.effect_heal2.animate=true
atcs.spritesheet.effect_miss1.animate=true
atcs.spritesheet.effect_poison1.animate=true
atcs.spritesheet.effect_tometik1.animate=true
atcs.spritesheet.effect_tometik2.animate=true
atcs.spritesheet.items_armours.category=item atcs.spritesheet.items_armours.category=item
atcs.spritesheet.items_armours_2.category=item atcs.spritesheet.items_armours_2.category=item
atcs.spritesheet.items_armours_3.category=item atcs.spritesheet.items_armours_3.category=item
atcs.spritesheet.items_books.category=item atcs.spritesheet.items_weapons.category=item
atcs.spritesheet.items_consumables.category=item atcs.spritesheet.items_weapons_2.category=item
atcs.spritesheet.items_consumables_omi1.category=item atcs.spritesheet.items_weapons_3.category=item
atcs.spritesheet.items_feygard1.category=item
atcs.spritesheet.items_g03_package_omi1.category=item
atcs.spritesheet.items_japozero.category=item
atcs.spritesheet.items_jewelry.category=item atcs.spritesheet.items_jewelry.category=item
atcs.spritesheet.items_rings_1.category=item
atcs.spritesheet.items_necklaces_1.category=item
atcs.spritesheet.items_consumables.category=item
atcs.spritesheet.items_japozero.category=item
atcs.spritesheet.items_books.category=item
atcs.spritesheet.items_misc.category=item atcs.spritesheet.items_misc.category=item
atcs.spritesheet.items_misc_2.category=item atcs.spritesheet.items_misc_2.category=item
atcs.spritesheet.items_misc_3.category=item atcs.spritesheet.items_misc_3.category=item
atcs.spritesheet.items_misc_4.category=item atcs.spritesheet.items_misc_4.category=item
atcs.spritesheet.items_misc_5.category=item atcs.spritesheet.items_misc_5.category=item
atcs.spritesheet.items_misc_6.category=item atcs.spritesheet.items_misc_6.category=item
atcs.spritesheet.items_necklaces_1.category=item
atcs.spritesheet.items_omgeeky.category=item
atcs.spritesheet.items_omi2.category=item
atcs.spritesheet.items_phoenix01.category=item
atcs.spritesheet.items_reterski_1.category=item atcs.spritesheet.items_reterski_1.category=item
atcs.spritesheet.items_rijackson_1.category=item
atcs.spritesheet.items_rings_1.category=item
atcs.spritesheet.items_tometik1.category=item atcs.spritesheet.items_tometik1.category=item
atcs.spritesheet.items_tometik2.category=item atcs.spritesheet.items_tometik2.category=item
atcs.spritesheet.items_tometik3.category=item atcs.spritesheet.items_tometik3.category=item
atcs.spritesheet.items_weapons.category=item
atcs.spritesheet.items_weapons_2.category=item
atcs.spritesheet.items_weapons_3.category=item
atcs.spritesheet.monsters_armor1.category=monster atcs.spritesheet.monsters_armor1.category=monster
atcs.spritesheet.monsters_arulirs.category=monster
atcs.spritesheet.monsters_dogs.category=monster atcs.spritesheet.monsters_dogs.category=monster
atcs.spritesheet.monsters_eye1.category=monster atcs.spritesheet.monsters_eye1.category=monster
atcs.spritesheet.monsters_eye2.category=monster atcs.spritesheet.monsters_eye2.category=monster
atcs.spritesheet.monsters_eye3.category=monster atcs.spritesheet.monsters_eye3.category=monster
atcs.spritesheet.monsters_eye4.category=monster atcs.spritesheet.monsters_eye4.category=monster
atcs.spritesheet.monsters_fatboy73.category=monster
atcs.spritesheet.monsters_ghost1.category=monster atcs.spritesheet.monsters_ghost1.category=monster
atcs.spritesheet.monsters_hydra1.category=monster
atcs.spritesheet.monsters_gisons.category=monster atcs.spritesheet.monsters_hydra1.sizex=64
atcs.spritesheet.monsters_guynmart.category=monster atcs.spritesheet.monsters_hydra1.sizey=64
atcs.spritesheet.monsters_insects.category=monster atcs.spritesheet.monsters_insects.category=monster
atcs.spritesheet.monsters_karvis1.category=monster
atcs.spritesheet.monsters_karvis2.category=monster
atcs.spritesheet.monsters_ld1.category=monster
atcs.spritesheet.monsters_ld2.category=monster
atcs.spritesheet.monsters_liches.category=monster atcs.spritesheet.monsters_liches.category=monster
atcs.spritesheet.monsters_mage.category=monster atcs.spritesheet.monsters_mage.category=monster
atcs.spritesheet.monsters_mage2.category=monster atcs.spritesheet.monsters_mage2.category=monster
atcs.spritesheet.monsters_maksiu1.category=monster
atcs.spritesheet.monsters_man1.category=monster atcs.spritesheet.monsters_man1.category=monster
atcs.spritesheet.monsters_men.category=monster atcs.spritesheet.monsters_men.category=monster
atcs.spritesheet.monsters_men2.category=monster atcs.spritesheet.monsters_men2.category=monster
atcs.spritesheet.monsters_misc.category=monster atcs.spritesheet.monsters_misc.category=monster
atcs.spritesheet.monsters_omi1.category=monster
atcs.spritesheet.monsters_omi1_b.category=monster
atcs.spritesheet.monsters_omi2.category=monster
atcs.spritesheet.monsters_phoenix01.category=monster
atcs.spritesheet.monsters_rats.category=monster atcs.spritesheet.monsters_rats.category=monster
atcs.spritesheet.monsters_redshrike1.category=monster
atcs.spritesheet.monsters_rltiles1.category=monster
atcs.spritesheet.monsters_rltiles2.category=monster
atcs.spritesheet.monsters_rltiles3.category=monster
atcs.spritesheet.monsters_rltiles4.category=monster
atcs.spritesheet.monsters_rogue1.category=monster atcs.spritesheet.monsters_rogue1.category=monster
atcs.spritesheet.monsters_skeleton1.category=monster atcs.spritesheet.monsters_skeleton1.category=monster
atcs.spritesheet.monsters_skeleton2.category=monster atcs.spritesheet.monsters_skeleton2.category=monster
atcs.spritesheet.monsters_snakes.category=monster atcs.spritesheet.monsters_snakes.category=monster
atcs.spritesheet.monsters_warrior1.category=monster
atcs.spritesheet.monsters_wraiths.category=monster
atcs.spritesheet.monsters_zombie1.category=monster
atcs.spritesheet.monsters_zombie2.category=monster
atcs.spritesheet.monsters_karvis1.category=monster
atcs.spritesheet.monsters_karvis2.category=monster
atcs.spritesheet.monsters_rltiles1.category=monster
atcs.spritesheet.monsters_rltiles2.category=monster
atcs.spritesheet.monsters_rltiles3.category=monster
atcs.spritesheet.monsters_rltiles4.category=monster
atcs.spritesheet.monsters_redshrike1.category=monster
atcs.spritesheet.monsters_ld1.category=monster
atcs.spritesheet.monsters_ld2.category=monster
atcs.spritesheet.monsters_tometik1.category=monster atcs.spritesheet.monsters_tometik1.category=monster
atcs.spritesheet.monsters_tometik2.category=monster atcs.spritesheet.monsters_tometik2.category=monster
atcs.spritesheet.monsters_tometik3.category=monster atcs.spritesheet.monsters_tometik3.category=monster
@@ -94,27 +69,20 @@ atcs.spritesheet.monsters_tometik7.category=monster
atcs.spritesheet.monsters_tometik8.category=monster atcs.spritesheet.monsters_tometik8.category=monster
atcs.spritesheet.monsters_tometik9.category=monster atcs.spritesheet.monsters_tometik9.category=monster
atcs.spritesheet.monsters_tometik10.category=monster atcs.spritesheet.monsters_tometik10.category=monster
atcs.spritesheet.monsters_warrior1.category=monster
atcs.spritesheet.monsters_unknown.category=monster
atcs.spritesheet.monsters_wraiths.category=monster
atcs.spritesheet.monsters_zombie1.category=monster
atcs.spritesheet.monsters_zombie2.category=monster
atcs.spritesheet.monsters_bosses_2x2.category=monster
atcs.spritesheet.monsters_bosses_2x2.sizex=64
atcs.spritesheet.monsters_bosses_2x2.sizey=64
atcs.spritesheet.monsters_cyclops.category=monster
atcs.spritesheet.monsters_cyclops.sizex=64
atcs.spritesheet.monsters_cyclops.sizey=96
atcs.spritesheet.monsters_demon1.category=monster atcs.spritesheet.monsters_demon1.category=monster
atcs.spritesheet.monsters_demon1.sizex=64 atcs.spritesheet.monsters_demon1.sizex=64
atcs.spritesheet.monsters_demon1.sizey=64 atcs.spritesheet.monsters_demon1.sizey=64
atcs.spritesheet.monsters_demon2.category=monster atcs.spritesheet.monsters_demon2.category=monster
atcs.spritesheet.monsters_demon2.sizex=64 atcs.spritesheet.monsters_demon2.sizex=64
atcs.spritesheet.monsters_demon2.sizey=64 atcs.spritesheet.monsters_demon2.sizey=64
atcs.spritesheet.monsters_giantbasilisk.category=monster atcs.spritesheet.monsters_cyclops.category=monster
atcs.spritesheet.monsters_giantbasilisk.sizex=64 atcs.spritesheet.monsters_cyclops.sizex=64
atcs.spritesheet.monsters_giantbasilisk.sizey=64 atcs.spritesheet.monsters_cyclops.sizey=96
atcs.spritesheet.monsters_hydra1.category=monster atcs.spritesheet.effect_blood3.animate=true
atcs.spritesheet.monsters_hydra1.sizex=64 atcs.spritesheet.effect_blood4.animate=true
atcs.spritesheet.monsters_hydra1.sizey=64 atcs.spritesheet.effect_bluetentacle.animate=true
atcs.spritesheet.effect_heal2.animate=true
atcs.spritesheet.effect_poison1.animate=true
atcs.spritesheet.effect_tometik1.animate=true
atcs.spritesheet.effect_tometik2.animate=true
atcs.spritesheet.monsters_guynmart.category=monster

View File

@@ -32,6 +32,17 @@ import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener; import javax.swing.event.HyperlinkListener;
import javax.swing.plaf.FontUIResource; import javax.swing.plaf.FontUIResource;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.attributes.AttributesNodeProvider;
import org.eclipse.jgit.internal.storage.file.FileRepository;
import org.eclipse.jgit.lib.ObjectDatabase;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.RefDatabase;
import org.eclipse.jgit.lib.ReflogReader;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.StoredConfig;
import prefuse.data.expression.parser.ExpressionParser; import prefuse.data.expression.parser.ExpressionParser;
import com.gpl.rpg.atcontentstudio.model.Workspace; import com.gpl.rpg.atcontentstudio.model.Workspace;
@@ -43,7 +54,7 @@ import com.gpl.rpg.atcontentstudio.ui.WorkspaceSelector;
public class ATContentStudio { public class ATContentStudio {
public static final String APP_NAME = "Andor's Trail Content Studio"; public static final String APP_NAME = "Andor's Trail Content Studio";
public static final String APP_VERSION = "v0.6.19"; public static final String APP_VERSION = "v0.6.14";
public static final String CHECK_UPDATE_URL = "https://andorstrail.com/static/ATCS_latest"; public static final String CHECK_UPDATE_URL = "https://andorstrail.com/static/ATCS_latest";
public static final String DOWNLOAD_URL = "https://andorstrail.com/viewtopic.php?f=6&t=4806"; public static final String DOWNLOAD_URL = "https://andorstrail.com/viewtopic.php?f=6&t=4806";
@@ -73,6 +84,19 @@ public class ATContentStudio {
} }
} }
// try {
// Git git = new Git(new FileRepository("/home/xxx/git_repos/andors-trail/.git/"));
// List<Ref> branches = git.branchList().call();
// for (Ref branch : branches) {
// System.out.println(branch.getName());
// }
// } catch (IOException e1) {
// e1.printStackTrace();
// } catch (GitAPIException e1) {
// e1.printStackTrace();
// }
ConfigCache.init(); ConfigCache.init();
try { try {

View File

@@ -11,10 +11,6 @@ import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
import java.io.StringReader; import java.io.StringReader;
import java.io.StringWriter; import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Enumeration; import java.util.Enumeration;
@@ -78,8 +74,6 @@ import com.gpl.rpg.atcontentstudio.utils.FileUtils;
public class Project implements ProjectTreeNode, Serializable { public class Project implements ProjectTreeNode, Serializable {
private static final long serialVersionUID = 4807454973303366758L; private static final long serialVersionUID = 4807454973303366758L;
private static final String drawablePath = TMXMapSet.DEFAULT_REL_PATH_TO_DRAWABLE.replace("\\", "/");
//Every instance field that is not transient will be saved in this file. //Every instance field that is not transient will be saved in this file.
public static final String SETTINGS_FILE = ".project"; public static final String SETTINGS_FILE = ".project";
@@ -1085,16 +1079,10 @@ public class Project implements ProjectTreeNode, Serializable {
public void run() { public void run() {
Notification.addInfo("Exporting project \""+name+"\" as "+target.getAbsolutePath()); Notification.addInfo("Exporting project \""+name+"\" as "+target.getAbsolutePath());
File tmpDir; File tmpDir = exportProjectToTmpDir();
try {
tmpDir = exportProjectToTmpDir();
FileUtils.writeToZip(tmpDir, target);
FileUtils.deleteDir(tmpDir);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
FileUtils.writeToZip(tmpDir, target);
FileUtils.deleteDir(tmpDir);
Notification.addSuccess("Project \""+name+"\" exported as "+target.getAbsolutePath()); Notification.addSuccess("Project \""+name+"\" exported as "+target.getAbsolutePath());
} }
@@ -1108,16 +1096,10 @@ public class Project implements ProjectTreeNode, Serializable {
public void run() { public void run() {
Notification.addInfo("Exporting project \""+name+"\" into "+target.getAbsolutePath()); Notification.addInfo("Exporting project \""+name+"\" into "+target.getAbsolutePath());
File tmpDir; File tmpDir = exportProjectToTmpDir();
try {
tmpDir = exportProjectToTmpDir();
FileUtils.copyOver(tmpDir, target);
FileUtils.deleteDir(tmpDir);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
FileUtils.copyOver(tmpDir, target);
FileUtils.deleteDir(tmpDir);
Notification.addSuccess("Project \""+name+"\" exported into "+target.getAbsolutePath()); Notification.addSuccess("Project \""+name+"\" exported into "+target.getAbsolutePath());
} }
@@ -1125,7 +1107,7 @@ public class Project implements ProjectTreeNode, Serializable {
}); });
} }
public File exportProjectToTmpDir() throws IOException { public File exportProjectToTmpDir() {
File tmpDir = new File(baseFolder, "tmp"); File tmpDir = new File(baseFolder, "tmp");
FileUtils.deleteDir(tmpDir); FileUtils.deleteDir(tmpDir);
tmpDir.mkdir(); tmpDir.mkdir();
@@ -1157,12 +1139,12 @@ public class Project implements ProjectTreeNode, Serializable {
writtenFiles = new LinkedList<String>(); writtenFiles = new LinkedList<String>();
for (File createdMapFile : createdContent.gameMaps.mapFolder.listFiles()) { for (File createdMapFile : createdContent.gameMaps.mapFolder.listFiles()) {
if (createdMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue; if (createdMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue;
copyTmxConverted(createdMapFile.toPath(), Paths.get(tmpMapDir.getAbsolutePath(), createdMapFile.getName())); FileUtils.copyFile(createdMapFile, new File(tmpMapDir, createdMapFile.getName()));
writtenFiles.add(createdMapFile.getName()); writtenFiles.add(createdMapFile.getName());
} }
for (File alteredMapFile : alteredContent.gameMaps.mapFolder.listFiles()) { for (File alteredMapFile : alteredContent.gameMaps.mapFolder.listFiles()) {
if (alteredMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue; if (alteredMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue;
copyTmxConverted(alteredMapFile.toPath(), Paths.get(tmpMapDir.getAbsolutePath(), alteredMapFile.getName())); FileUtils.copyFile(alteredMapFile, new File(tmpMapDir, alteredMapFile.getName()));
writtenFiles.add(alteredMapFile.getName()); writtenFiles.add(alteredMapFile.getName());
} }
writtenFilesPerDataType.put(TMXMap.class, writtenFiles); writtenFilesPerDataType.put(TMXMap.class, writtenFiles);
@@ -1195,16 +1177,6 @@ public class Project implements ProjectTreeNode, Serializable {
return tmpDir; return tmpDir;
} }
private void copyTmxConverted(Path from, Path to) throws IOException {
String xml = new String(Files.readAllBytes(from), StandardCharsets.UTF_8);
xml = xml.replace("../../altered/spritesheets/", drawablePath);
xml = xml.replace("../../created/spritesheets/", drawablePath);
xml = xml.replace("../spritesheets/", drawablePath);
xml = xml.replace("../spritesheets/", drawablePath);
Files.write(to, xml.getBytes(StandardCharsets.UTF_8));
}
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public List<String> writeDataDeltaForDataType(GameDataCategory<? extends JSONElement> created, GameDataCategory<? extends JSONElement> altered, GameDataCategory<? extends JSONElement> source, Class<? extends JSONElement> gdeClass, File targetFolder) { public List<String> writeDataDeltaForDataType(GameDataCategory<? extends JSONElement> created, GameDataCategory<? extends JSONElement> altered, GameDataCategory<? extends JSONElement> source, Class<? extends JSONElement> gdeClass, File targetFolder) {
List<String> filenamesToWrite = new LinkedList<String>(); List<String> filenamesToWrite = new LinkedList<String>();

View File

@@ -29,7 +29,6 @@ public class ActorCondition extends JSONElement {
//public String id; inherited. //public String id; inherited.
public String icon_id; public String icon_id;
public String display_name; public String display_name;
public String description;
// Available from parsed state // Available from parsed state
public ACCategory category = null; public ACCategory category = null;
@@ -158,7 +157,6 @@ public class ActorCondition extends JSONElement {
@Override @Override
public void parse(Map aCondJson) { public void parse(Map aCondJson) {
if (aCondJson.get("description") != null) this.description = (String) aCondJson.get("description");
if (aCondJson.get("category") != null) this.category = ACCategory.valueOf((String) aCondJson.get("category")); if (aCondJson.get("category") != null) this.category = ACCategory.valueOf((String) aCondJson.get("category"));
this.positive = JSONElement.getInteger((Number) aCondJson.get("isPositive")); this.positive = JSONElement.getInteger((Number) aCondJson.get("isPositive"));
Map abilityEffect = (Map) aCondJson.get("abilityEffect"); Map abilityEffect = (Map) aCondJson.get("abilityEffect");
@@ -268,7 +266,6 @@ public class ActorCondition extends JSONElement {
clone.state = this.state; clone.state = this.state;
clone.id = this.id; clone.id = this.id;
clone.display_name = this.display_name; clone.display_name = this.display_name;
clone.description = this.description;
clone.icon_id = this.icon_id; clone.icon_id = this.icon_id;
clone.category = this.category; clone.category = this.category;
clone.positive = this.positive; clone.positive = this.positive;
@@ -297,7 +294,6 @@ public class ActorCondition extends JSONElement {
jsonAC.put("id", this.id); jsonAC.put("id", this.id);
if (this.icon_id != null) jsonAC.put("iconID", this.icon_id); if (this.icon_id != null) jsonAC.put("iconID", this.icon_id);
if (this.display_name != null) jsonAC.put("name", this.display_name); if (this.display_name != null) jsonAC.put("name", this.display_name);
if (this.description != null) jsonAC.put("description", this.description);
if (this.category != null) jsonAC.put("category", this.category.toString()); if (this.category != null) jsonAC.put("category", this.category.toString());
if (this.positive != null && this.positive == 1) jsonAC.put("isPositive", this.positive); 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.stacking != null && this.stacking == 1) jsonAC.put("isStacking", this.stacking);

View File

@@ -36,7 +36,7 @@ public class Droplist extends JSONElement {
public static class DroppedItem { public static class DroppedItem {
//Available from parsed state; //Available from parsed state;
public String item_id = null; public String item_id = null;
public String chance = null; public Double chance = null;
public Integer quantity_min = null; public Integer quantity_min = null;
public Integer quantity_max = null; public Integer quantity_max = null;
@@ -114,8 +114,7 @@ public class Droplist extends JSONElement {
Map droppedItemJson = (Map)droppedItemJsonObj; Map droppedItemJson = (Map)droppedItemJsonObj;
DroppedItem droppedItem = new DroppedItem(); DroppedItem droppedItem = new DroppedItem();
droppedItem.item_id = (String) droppedItemJson.get("itemID"); droppedItem.item_id = (String) droppedItemJson.get("itemID");
//if (droppedItemJson.get("chance") != null) droppedItem.chance = JSONElement.parseChance(droppedItemJson.get("chance").toString()); if (droppedItemJson.get("chance") != null) droppedItem.chance = JSONElement.parseChance(droppedItemJson.get("chance").toString());
droppedItem.chance = (String) droppedItemJson.get("chance");
Map droppedItemQtyJson = (Map) droppedItemJson.get("quantity"); Map droppedItemQtyJson = (Map) droppedItemJson.get("quantity");
if (droppedItemQtyJson != null) { if (droppedItemQtyJson != null) {
droppedItem.quantity_min = JSONElement.getInteger((Number) droppedItemQtyJson.get("min")); droppedItem.quantity_min = JSONElement.getInteger((Number) droppedItemQtyJson.get("min"));
@@ -218,8 +217,7 @@ public class Droplist extends JSONElement {
} else if (droppedItem.item_id != null) { } else if (droppedItem.item_id != null) {
droppedItemJson.put("itemID", droppedItem.item_id); droppedItemJson.put("itemID", droppedItem.item_id);
} }
//if (droppedItem.chance != null) droppedItemJson.put("chance", JSONElement.printJsonChance(droppedItem.chance)); if (droppedItem.chance != null) droppedItemJson.put("chance", JSONElement.printJsonChance(droppedItem.chance));
if (droppedItem.chance != null) droppedItemJson.put("chance", droppedItem.chance);
if (droppedItem.quantity_min != null || droppedItem.quantity_max != null) { if (droppedItem.quantity_min != null || droppedItem.quantity_max != null) {
Map quantityJson = new LinkedHashMap(); Map quantityJson = new LinkedHashMap();
droppedItemJson.put("quantity", quantityJson); droppedItemJson.put("quantity", quantityJson);

View File

@@ -83,7 +83,6 @@ public class Item extends JSONElement {
public Integer increase_block_chance = null; public Integer increase_block_chance = null;
public Integer increase_damage_resistance = null; public Integer increase_damage_resistance = null;
public Double critical_multiplier = null; public Double critical_multiplier = null;
public Integer damage_modifier = null;
} }
public static class ConditionEffect { public static class ConditionEffect {
@@ -203,7 +202,6 @@ public class Item extends JSONElement {
//TODO correct game data, to unify format. //TODO correct game data, to unify format.
// this.equip_effect.critical_multiplier = JSONElement.getDouble((Number) equipEffect.get("setCriticalMultiplier")); // this.equip_effect.critical_multiplier = JSONElement.getDouble((Number) equipEffect.get("setCriticalMultiplier"));
if (equipEffect.get("setCriticalMultiplier") != null) this.equip_effect.critical_multiplier = JSONElement.getDouble(Double.parseDouble(equipEffect.get("setCriticalMultiplier").toString())); if (equipEffect.get("setCriticalMultiplier") != null) this.equip_effect.critical_multiplier = JSONElement.getDouble(Double.parseDouble(equipEffect.get("setCriticalMultiplier").toString()));
this.equip_effect.damage_modifier = JSONElement.getInteger((Number) equipEffect.get("setNonWeaponDamageModifier"));
List conditionsJson = (List) equipEffect.get("addedConditions"); List conditionsJson = (List) equipEffect.get("addedConditions");
if (conditionsJson != null && !conditionsJson.isEmpty()) { if (conditionsJson != null && !conditionsJson.isEmpty()) {
@@ -218,7 +216,6 @@ public class Item extends JSONElement {
} }
} }
Map hitEffect = (Map) itemJson.get("hitEffect"); Map hitEffect = (Map) itemJson.get("hitEffect");
if (hitEffect != null) { if (hitEffect != null) {
this.hit_effect = new HitEffect(); this.hit_effect = new HitEffect();
@@ -429,7 +426,6 @@ public class Item extends JSONElement {
clone.has_manual_price = this.has_manual_price; clone.has_manual_price = this.has_manual_price;
if (this.equip_effect != null) { if (this.equip_effect != null) {
clone.equip_effect = new EquipEffect(); clone.equip_effect = new EquipEffect();
clone.equip_effect.damage_modifier = this.equip_effect.damage_modifier;
clone.equip_effect.critical_multiplier = this.equip_effect.critical_multiplier; clone.equip_effect.critical_multiplier = this.equip_effect.critical_multiplier;
clone.equip_effect.damage_boost_max = this.equip_effect.damage_boost_max; clone.equip_effect.damage_boost_max = this.equip_effect.damage_boost_max;
clone.equip_effect.damage_boost_min = this.equip_effect.damage_boost_min; clone.equip_effect.damage_boost_min = this.equip_effect.damage_boost_min;
@@ -646,7 +642,6 @@ public class Item extends JSONElement {
if (this.equip_effect.increase_block_chance != null) equipEffectJson.put("increaseBlockChance", this.equip_effect.increase_block_chance); if (this.equip_effect.increase_block_chance != null) equipEffectJson.put("increaseBlockChance", this.equip_effect.increase_block_chance);
if (this.equip_effect.increase_damage_resistance != null) equipEffectJson.put("increaseDamageResistance", this.equip_effect.increase_damage_resistance); if (this.equip_effect.increase_damage_resistance != null) equipEffectJson.put("increaseDamageResistance", this.equip_effect.increase_damage_resistance);
if (this.equip_effect.critical_multiplier != null) equipEffectJson.put("setCriticalMultiplier", this.equip_effect.critical_multiplier); if (this.equip_effect.critical_multiplier != null) equipEffectJson.put("setCriticalMultiplier", this.equip_effect.critical_multiplier);
if (this.equip_effect.damage_modifier != null) equipEffectJson.put("setNonWeaponDamageModifier", this.equip_effect.damage_modifier);
if (this.equip_effect.conditions != null) { if (this.equip_effect.conditions != null) {
List conditionsJson = new ArrayList(); List conditionsJson = new ArrayList();
equipEffectJson.put("addedConditions", conditionsJson); equipEffectJson.put("addedConditions", conditionsJson);

View File

@@ -38,16 +38,11 @@ public abstract class JSONElement extends GameDataElement {
for (Object obj : gameDataElements) { for (Object obj : gameDataElements) {
Map jsonObj = (Map)obj; Map jsonObj = (Map)obj;
String id = (String) jsonObj.get("id"); String id = (String) jsonObj.get("id");
try {
if (id != null && id.equals(this.id )) { if (id != null && id.equals(this.id )) {
this.parse(jsonObj); this.parse(jsonObj);
this.state = State.parsed; this.state = State.parsed;
break; break;
} }
}
catch(Exception e){
System.out.println("Error in ID: " + id);
}
} }
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
Notification.addError("Error while parsing JSON file "+jsonFile.getAbsolutePath()+": "+e.getMessage()); Notification.addError("Error while parsing JSON file "+jsonFile.getAbsolutePath()+": "+e.getMessage());
@@ -58,10 +53,6 @@ public abstract class JSONElement extends GameDataElement {
} catch (ParseException e) { } catch (ParseException e) {
Notification.addError("Error while parsing JSON file "+jsonFile.getAbsolutePath()+": "+e.getMessage()); Notification.addError("Error while parsing JSON file "+jsonFile.getAbsolutePath()+": "+e.getMessage());
e.printStackTrace(); e.printStackTrace();
} catch (IllegalArgumentException e) {
System.out.println(id);
Notification.addError("Error while parsing JSON file "+jsonFile.getAbsolutePath()+": "+e.getMessage());
e.printStackTrace();
} finally { } finally {
if (reader != null) if (reader != null)
try { try {

View File

@@ -26,13 +26,10 @@ public class Requirement extends JSONElement {
countedItemTypes.add(RequirementType.inventoryRemove); countedItemTypes.add(RequirementType.inventoryRemove);
countedItemTypes.add(RequirementType.inventoryKeep); countedItemTypes.add(RequirementType.inventoryKeep);
countedItemTypes.add(RequirementType.usedItem); countedItemTypes.add(RequirementType.usedItem);
countedItemTypes.add(RequirementType.wear);
countedItemTypes.add(RequirementType.wearRemove);
COMPATIBLE_TYPES.put(RequirementType.inventoryRemove, countedItemTypes); COMPATIBLE_TYPES.put(RequirementType.inventoryRemove, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.inventoryKeep, countedItemTypes); COMPATIBLE_TYPES.put(RequirementType.inventoryKeep, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.usedItem, countedItemTypes); COMPATIBLE_TYPES.put(RequirementType.usedItem, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.wear, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.wearRemove, countedItemTypes);
} }
//Available from parsed state //Available from parsed state
@@ -57,10 +54,7 @@ public class Requirement extends JSONElement {
spentGold, spentGold,
consumedBonemeals, consumedBonemeals,
hasActorCondition, hasActorCondition,
factionScore, factionScore
random,
factionScoreEquals,
wearRemove
} }
public enum SkillID { public enum SkillID {
@@ -85,7 +79,6 @@ public class Requirement extends JSONElement {
,resistancePhysical // lowers chance to get negative active conditions by monsters (Physical Capacity like Minor fatigue) ,resistancePhysical // lowers chance to get negative active conditions by monsters (Physical Capacity like Minor fatigue)
,resistanceBlood // lowers chance to get negative active conditions by monsters (Blood Disorder like Weak Poison) ,resistanceBlood // lowers chance to get negative active conditions by monsters (Blood Disorder like Weak Poison)
,shadowBless ,shadowBless
,sporeImmunity
,crit1 // lowers atk ability ,crit1 // lowers atk ability
,crit2 // lowers def ability ,rejuvenation // Reduces magnitudes of conditions ,crit2 // lowers def ability ,rejuvenation // Reduces magnitudes of conditions
,rejuvenation // Reduces magnitudes of conditions ,rejuvenation // Reduces magnitudes of conditions
@@ -97,7 +90,6 @@ public class Requirement extends JSONElement {
,weaponProficiencyAxe ,weaponProficiencyAxe
,weaponProficiencyBlunt ,weaponProficiencyBlunt
,weaponProficiencyUnarmed ,weaponProficiencyUnarmed
,weaponProficiencyPole
,armorProficiencyShield ,armorProficiencyShield
,armorProficiencyUnarmored ,armorProficiencyUnarmored
,armorProficiencyLight ,armorProficiencyLight
@@ -112,21 +104,9 @@ public class Requirement extends JSONElement {
@Override @Override
public String getDesc() { public String getDesc() {
String obj_id = "";
if (required_obj_id != null)
{
obj_id = required_obj_id;
if (type != null && type == RequirementType.random){
obj_id = " Chance " + obj_id + (required_obj_id.contains("/") ? "" : "%");
}
else {
obj_id += ":";
}
}
return ((negated != null && negated) ? "NOT " : "") return ((negated != null && negated) ? "NOT " : "")
+(type == null ? "" : type.toString()+":") +(type == null ? "" : type.toString()+":")
+obj_id +(required_obj_id == null ? "" : required_obj_id+":")
+(required_value == null ? "" : required_value.toString()); +(required_value == null ? "" : required_value.toString());
} }
@@ -173,7 +153,6 @@ public class Requirement extends JSONElement {
case inventoryRemove: case inventoryRemove:
case usedItem: case usedItem:
case wear: case wear:
case wearRemove:
this.required_obj = proj.getItem(required_obj_id); this.required_obj = proj.getItem(required_obj_id);
break; break;
case killedMonster: case killedMonster:
@@ -194,8 +173,6 @@ public class Requirement extends JSONElement {
case spentGold: case spentGold:
case timerElapsed: case timerElapsed:
case factionScore: case factionScore:
case factionScoreEquals:
case random:
break; break;
} }
if (this.required_obj != null) this.required_obj.addBacklink((GameDataElement) this.parent); if (this.required_obj != null) this.required_obj.addBacklink((GameDataElement) this.parent);
@@ -248,12 +225,6 @@ public class Requirement extends JSONElement {
required_obj_id = null; required_obj_id = null;
required_value = null; required_value = null;
} }
if(destType==RequirementType.random)
{
required_obj_id = "50/100";
}
type = destType; type = destType;
} }

View File

@@ -95,9 +95,7 @@ public class ReplaceArea extends MapObject {
if (oldSchoolRequirement && Requirement.RequirementType.questProgress.equals(requirement.type) && (requirement.negated == null || !requirement.negated)) { if (oldSchoolRequirement && Requirement.RequirementType.questProgress.equals(requirement.type) && (requirement.negated == null || !requirement.negated)) {
tmxObject.setName(requirement.required_obj_id+":"+((requirement.required_value == null) ? "" : Integer.toString(requirement.required_value))); tmxObject.setName(requirement.required_obj_id+":"+((requirement.required_value == null) ? "" : Integer.toString(requirement.required_value)));
} else { } else {
if (requirement.type != null) { tmxObject.getProperties().setProperty("requireType", requirement.type.toString());
tmxObject.getProperties().setProperty("requireType", requirement.type.toString());
}
if (requirement.required_obj != null) { if (requirement.required_obj != null) {
tmxObject.getProperties().setProperty("requireId", requirement.required_obj.id); tmxObject.getProperties().setProperty("requireId", requirement.required_obj.id);
} else if (requirement.required_obj_id != null) { } else if (requirement.required_obj_id != null) {

View File

@@ -11,7 +11,7 @@ import com.gpl.rpg.atcontentstudio.ui.DefaultIcons;
public class SpawnArea extends MapObject { public class SpawnArea extends MapObject {
public int quantity = 1; public int quantity = 1;
public int respawnSpeed = 10; public int spawnchance = 10;
public boolean active = true; public boolean active = true;
public boolean ignoreAreas = false; public boolean ignoreAreas = false;
public String spawngroup_id; public String spawngroup_id;
@@ -21,8 +21,8 @@ public class SpawnArea extends MapObject {
if (obj.getProperties().getProperty("quantity") != null) { if (obj.getProperties().getProperty("quantity") != null) {
this.quantity = Integer.parseInt(obj.getProperties().getProperty("quantity")); this.quantity = Integer.parseInt(obj.getProperties().getProperty("quantity"));
} }
if (obj.getProperties().getProperty("respawnspeed") != null) { if (obj.getProperties().getProperty("spawnchance") != null) {
this.respawnSpeed = Integer.parseInt(obj.getProperties().getProperty("respawnspeed")); this.spawnchance = Integer.parseInt(obj.getProperties().getProperty("spawnchance"));
} }
if (obj.getProperties().getProperty("active") != null) { if (obj.getProperties().getProperty("active") != null) {
this.active = Boolean.parseBoolean(obj.getProperties().getProperty("active")); this.active = Boolean.parseBoolean(obj.getProperties().getProperty("active"));
@@ -82,8 +82,8 @@ public class SpawnArea extends MapObject {
if (quantity != 1) { if (quantity != 1) {
tmxObject.getProperties().setProperty("quantity", Integer.toString(quantity)); tmxObject.getProperties().setProperty("quantity", Integer.toString(quantity));
} }
if (respawnSpeed != 10) { if (spawnchance != 10) {
tmxObject.getProperties().setProperty("respawnspeed", Integer.toString(respawnSpeed)); tmxObject.getProperties().setProperty("spawnchance", Integer.toString(spawnchance));
} }
if (!this.active) { if (!this.active) {
tmxObject.getProperties().setProperty("active", Boolean.toString(active)); tmxObject.getProperties().setProperty("active", Boolean.toString(active));
@@ -92,4 +92,5 @@ public class SpawnArea extends MapObject {
tmxObject.getProperties().setProperty("ignoreAreas", Boolean.toString(ignoreAreas)); tmxObject.getProperties().setProperty("ignoreAreas", Boolean.toString(ignoreAreas));
} }
} }
} }

View File

@@ -258,7 +258,7 @@ public class TMXMap extends GameDataElement {
if (getDataType() == GameSource.Type.source) { if (getDataType() == GameSource.Type.source) {
writer.writeMap(tmxMap, baos, tmxFile.getAbsolutePath()); writer.writeMap(tmxMap, baos, tmxFile.getAbsolutePath());
} else { } else {
writer.writeMap(tmxMap, baos, ((TMXMapSet)this.parent).mapFolder.getAbsolutePath()+File.separator+"placeholder.tmx"); writer.writeMap(tmxMap, baos, getProject().baseContent.gameMaps.mapFolder.getAbsolutePath()+File.separator+"placeholder.tmx");
} }
} catch (Exception e) { } catch (Exception e) {
Notification.addError("Error while converting map "+getDesc()+" to XML: "+e.getMessage()); Notification.addError("Error while converting map "+getDesc()+" to XML: "+e.getMessage());

View File

@@ -100,7 +100,7 @@ public class TMXMapSet implements ProjectTreeNode {
while(getProject().open) { while(getProject().open) {
try { try {
watchService = FileSystems.getDefault().newWatchService(); watchService = FileSystems.getDefault().newWatchService();
/*WatchKey watchKey = */folderPath.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_CREATE); /*WatchKey watchKey = */folderPath.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY);
WatchKey wk; WatchKey wk;
validService: while(getProject().open) { validService: while(getProject().open) {
wk = watchService.poll(10, TimeUnit.SECONDS); wk = watchService.poll(10, TimeUnit.SECONDS);

View File

@@ -1,12 +1,9 @@
package com.gpl.rpg.atcontentstudio.model.tools.i18n; package com.gpl.rpg.atcontentstudio.model.tools.i18n;
import java.io.File; import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer; import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@@ -20,7 +17,7 @@ public class PoPotWriter {
public static void writePoFile(Map<String, List<String>> stringsResources, Map<String, String> translations, File destination) { public static void writePoFile(Map<String, List<String>> stringsResources, Map<String, String> translations, File destination) {
try { try {
Writer fw = new OutputStreamWriter(new FileOutputStream(destination), StandardCharsets.UTF_8); FileWriter fw = new FileWriter(destination);
if (translations.get("") != null) { if (translations.get("") != null) {
fw.write(translations.get("")); fw.write(translations.get(""));
writeEndOfEntry(fw); writeEndOfEntry(fw);

View File

@@ -28,7 +28,6 @@ public class PotGenerator {
for (ActorCondition ac : gsrc.gameData.actorConditions) { for (ActorCondition ac : gsrc.gameData.actorConditions) {
pushString(stringsResources, resourcesStrings, ac.display_name, getPotContextComment(ac)); pushString(stringsResources, resourcesStrings, ac.display_name, getPotContextComment(ac));
pushString(stringsResources, resourcesStrings, ac.description, getPotContextComment(ac)+":description");
} }
for (Dialogue d : gsrc.gameData.dialogues ) { for (Dialogue d : gsrc.gameData.dialogues ) {

View File

@@ -26,9 +26,7 @@ public class AboutEditor extends Editor {
private static final long serialVersionUID = 6230549148222457139L; private static final long serialVersionUID = 6230549148222457139L;
public static final String WELCOME_STRING = public static final String WELCOME_STRING =
"<html><head>" + "<html><body>" +
"<meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html; charset=UTF-8\\\" />" +
"</head><body>" +
"<table><tr valign=\"top\">" + "<table><tr valign=\"top\">" +
"<td><img src=\""+ATContentStudio.class.getResource("/com/gpl/rpg/atcontentstudio/img/atcs_border_banner.png")+"\"/></td>" + "<td><img src=\""+ATContentStudio.class.getResource("/com/gpl/rpg/atcontentstudio/img/atcs_border_banner.png")+"\"/></td>" +
"<td><font size=+1>Welcome to "+ATContentStudio.APP_NAME+" "+ATContentStudio.APP_VERSION+"</font><br/>" + "<td><font size=+1>Welcome to "+ATContentStudio.APP_NAME+" "+ATContentStudio.APP_VERSION+"</font><br/>" +
@@ -37,24 +35,23 @@ public class AboutEditor extends Editor {
"<b>Right click on the left area or use the \"File\" menu to create a project.</b><br/>" + "<b>Right click on the left area or use the \"File\" menu to create a project.</b><br/>" +
"<br/>" + "<br/>" +
"Play <a href=\"https://play.google.com/store/apps/details?id=com.gpl.rpg.AndorsTrail\">Andor's Trail</a> for free on your Android device.<br/>" + "Play <a href=\"https://play.google.com/store/apps/details?id=com.gpl.rpg.AndorsTrail\">Andor's Trail</a> for free on your Android device.<br/>" +
"Visit <a href=\"https://andorstrail.com/\">the official forum</a> to give or receive help.<br/>" + "Visit <a href=\"http://andorstrail.com/\">the official forum</a> to give or receive help.<br/>" +
"Open the project's <a href=\"https://github.com/Zukero/andors-trail/\">GitHub project page</a> to check out the game's source code.<br/>" + "Open the project's <a href=\"https://github.com/Zukero/andors-trail/\">GitHub project page</a> to check out the game's source code.<br/>" +
"<br/>" + "<br/>" +
"For content creation help, make sure to use the following resources:<br/>" + "For content creation help, make sure to use the following resources:<br/>" +
"<a href=\"https://andorstrail.com/viewtopic.php?f=6&t=4560\">The contribution guide on the forums</a><br/>" + "<a href=\"http://andorstrail.com/viewtopic.php?f=6&t=4560\">The contribution guide on the forums</a><br/>" +
"<a href=\"https://andorstrail.com/wiki/doku.php?id=andors_trail_wiki:developer_section\">The developer section of the Andor's Trail wiki</a><br/>" + "<a href=\"http://andorstrail.com/wiki/doku.php?id=andors_trail_wiki:developer_section\">The developer section of the Andor's Trail wiki</a><br/>" +
"<a href=\"https://docs.google.com/document/d/1BwWD1tLgPcmA2bwudrVnOc6f2dkPLFCjWdn7tXlIp5g\">The design outline document on Google Drive/Docs</a><br/>" + "<a href=\"https://docs.google.com/document/d/1BwWD1tLgPcmA2bwudrVnOc6f2dkPLFCjWdn7tXlIp5g\">The design outline document on Google Drive/Docs</a><br/>" +
"<br/>" + "<br/>" +
"<font size=+1>Credits:</font><br/>" + "<font size=+1>Credits:</font><br/>" +
"<br/>" + "<br/>" +
"Author: <a href=\"https://andorstrail.com/memberlist.php?mode=viewprofile&u=2875\">Zukero</a><br/>" + "Author: <a href=\"http://andorstrail.com/memberlist.php?mode=viewprofile&u=2875\">Zukero</a><br/>" +
"Licence: <a href=\"http://www.gnu.org/licenses/gpl-3.0.html\">GPL v3</a><br/>" + "Licence: <a href=\"http://www.gnu.org/licenses/gpl-3.0.html\">GPL v3</a><br/>" +
"Sources are included in this package and on <a href=\"https://github.com/Zukero/ATCS\">GitHub</a>.<br/>" + "Sources are included in this package and on <a href=\"https://github.com/Zukero/ATCS\">GitHub</a>.<br/>" +
"<br/>" + "<br/>" +
"Contributors: <br/>" + "Contributors: <br/>" +
"Quentin Delvallet<br/>" + "Quentin Delvallet<br/>" +
"Žižkin<br/>" + "<EFBFBD>i<EFBFBD>kin<br/>" +
"Gonk<br/>" +
"<br/>" + "<br/>" +
"This project uses the following libraries:<br/>" + "This project uses the following libraries:<br/>" +
"<a href=\"http://code.google.com/p/json-simple/\">JSON.simple</a> by Yidong Fang & Chris Nokleberg.<br/>" + "<a href=\"http://code.google.com/p/json-simple/\">JSON.simple</a> by Yidong Fang & Chris Nokleberg.<br/>" +
@@ -82,7 +79,7 @@ public class AboutEditor extends Editor {
"<a href=\"https://jsoup.org/\">jsoup</a> by Jonathan Hedley<br/>" + "<a href=\"https://jsoup.org/\">jsoup</a> by Jonathan Hedley<br/>" +
"License: <a href=\"https://jsoup.org/license\">MIT License</a><br/>" + "License: <a href=\"https://jsoup.org/license\">MIT License</a><br/>" +
"<br/>" + "<br/>" +
"A slightly modified version of <a href=\"https://launchpad.net/po-parser\">General PO Parser</a> by Bal<61>zs T<>th<br/>" + "A slightly modified version of <a href=\"https://launchpad.net/po-parser\">General PO Parser</a> by Bal<61>zs T<>th<br/>" +
"License: <a href=\"http://www.gnu.org/licenses/gpl-3.0.html\">GPL v3</a><br/>" + "License: <a href=\"http://www.gnu.org/licenses/gpl-3.0.html\">GPL v3</a><br/>" +
"<br/>" + "<br/>" +
"A slightly modified version of <a href=\"www.whoischarles.com\">Minify.java</a> by Charles Bihis<br/>" + "A slightly modified version of <a href=\"www.whoischarles.com\">Minify.java</a> by Charles Bihis<br/>" +

View File

@@ -348,138 +348,6 @@ public abstract class Editor extends JPanel implements ProjectElementListener {
return spinner; return spinner;
} }
private static final String percent = "%";
private static final String ratio = "x/y";
public static JComponent addChanceField(JPanel pane, String label, String initialValue, String defaultValue, boolean editable, final FieldUpdateListener listener) {
int defaultChance = 1;
int defaultMaxChance = 100;
if (defaultValue != null) {
if (defaultValue.contains("/")) {
int c = defaultValue.indexOf('/');
try { defaultChance = Integer.parseInt(defaultValue.substring(0, c)); } catch (NumberFormatException nfe) {};
try { defaultMaxChance = Integer.parseInt(defaultValue.substring(c+1)); } catch (NumberFormatException nfe) {};
} else {
try { defaultChance = Integer.parseInt(defaultValue); } catch (NumberFormatException nfe) {};
}
}
boolean currentFormIsRatio = true;
int chance = defaultChance;
int maxChance = defaultMaxChance;
if (initialValue != null) {
if (initialValue.contains("/")) {
int c = initialValue.indexOf('/');
try { chance = Integer.parseInt(initialValue.substring(0, c)); } catch (NumberFormatException nfe) {};
try { maxChance = Integer.parseInt(initialValue.substring(c+1)); } catch (NumberFormatException nfe) {};
} else {
try {
chance = Integer.parseInt(initialValue);
currentFormIsRatio = false;
} catch (NumberFormatException nfe) {};
}
}
final JPanel tfPane = new JPanel();
tfPane.setLayout(new JideBoxLayout(tfPane, JideBoxLayout.LINE_AXIS, 6));
JLabel tfLabel = new JLabel(label);
tfPane.add(tfLabel, JideBoxLayout.FIX);
final JComboBox<String> entryTypeBox = new JComboBox<String>(new String[] {percent, ratio});
if (currentFormIsRatio) {
entryTypeBox.setSelectedItem(ratio);
} else {
entryTypeBox.setSelectedItem(percent);
}
entryTypeBox.setEnabled(editable);
tfPane.add(entryTypeBox, JideBoxLayout.FIX);
/////////////////////////////////////////////////////////////////////////////////////////////////// make sure "chance" is between 1 and 100. If lower than 1 get 1. If higher than 100, get chance/maxChance * 100... Then do the same with defaultChance, in case no value exist.
final SpinnerNumberModel percentModel = new SpinnerNumberModel(initialValue != null ? ((chance > 1 ? chance : 1) < 100 ? chance : (chance * 100 / maxChance)) : ((defaultChance > 1 ? defaultChance : 1) < 100 ? defaultChance : (defaultChance * 100 / defaultMaxChance)) , 1, 100, 1);
final SpinnerNumberModel ratioChanceModel = new SpinnerNumberModel(initialValue != null ? chance : defaultChance, 1, Integer.MAX_VALUE, 1);
final JSpinner chanceSpinner = new JSpinner(currentFormIsRatio ? ratioChanceModel : percentModel);
if (!currentFormIsRatio) ((JSpinner.DefaultEditor)chanceSpinner.getEditor()).getTextField().setHorizontalAlignment(JTextField.LEFT);
chanceSpinner.setEnabled(editable);
((DefaultFormatter)((NumberEditor)chanceSpinner.getEditor()).getTextField().getFormatter()).setCommitsOnValidEdit(true);
tfPane.add(chanceSpinner, JideBoxLayout.FLEXIBLE);
final JLabel ratioLabel = new JLabel("/");
tfPane.add(ratioLabel, JideBoxLayout.FIX);
final JSpinner maxChanceSpinner = new JSpinner(new SpinnerNumberModel(initialValue != null ? maxChance : defaultMaxChance, 1, Integer.MAX_VALUE, 1));
((JSpinner.DefaultEditor)maxChanceSpinner.getEditor()).getTextField().setHorizontalAlignment(JTextField.LEFT);
maxChanceSpinner.setEnabled(editable);
((DefaultFormatter)((NumberEditor)maxChanceSpinner.getEditor()).getTextField().getFormatter()).setCommitsOnValidEdit(true);
tfPane.add(maxChanceSpinner, JideBoxLayout.FLEXIBLE);
if (!currentFormIsRatio) {
ratioLabel.setVisible(false);
maxChanceSpinner.setVisible(false);
tfPane.revalidate();
tfPane.repaint();
}
final JButton nullify = new JButton(new ImageIcon(DefaultIcons.getNullifyIcon()));
tfPane.add(nullify, JideBoxLayout.FIX);
nullify.setEnabled(editable);
pane.add(tfPane, JideBoxLayout.FIX);
entryTypeBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (entryTypeBox.getSelectedItem() == percent) {
int chance = ((Integer)chanceSpinner.getValue());
int maxChance = ((Integer)maxChanceSpinner.getValue());
chance *= 100;
chance /= maxChance;
chance = Math.max(0, Math.min(100, chance));
chanceSpinner.setModel(percentModel);
chanceSpinner.setValue(chance);
((JSpinner.DefaultEditor)chanceSpinner.getEditor()).getTextField().setHorizontalAlignment(JTextField.LEFT);
ratioLabel.setVisible(false);
maxChanceSpinner.setVisible(false);
tfPane.revalidate();
tfPane.repaint();
listener.valueChanged(chanceSpinner, chanceSpinner.getValue().toString());
} else if (entryTypeBox.getSelectedItem() == ratio) {
int chance = ((Integer)chanceSpinner.getValue());
chanceSpinner.setModel(ratioChanceModel);
chanceSpinner.setValue(chance);
maxChanceSpinner.setValue(100);
ratioLabel.setVisible(true);
maxChanceSpinner.setVisible(true);
tfPane.revalidate();
tfPane.repaint();
listener.valueChanged(chanceSpinner, chanceSpinner.getValue().toString() + "/" + maxChanceSpinner.getValue().toString());
}
}
});
chanceSpinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if (entryTypeBox.getSelectedItem() == percent) {
listener.valueChanged(chanceSpinner, chanceSpinner.getValue().toString());
} else if (entryTypeBox.getSelectedItem() == ratio) {
listener.valueChanged(chanceSpinner, chanceSpinner.getValue().toString() + "/" + maxChanceSpinner.getValue().toString());
}
}
});
maxChanceSpinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
listener.valueChanged(chanceSpinner, chanceSpinner.getValue().toString() + "/" + maxChanceSpinner.getValue().toString());
}
});
nullify.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
chanceSpinner.setValue(1);
listener.valueChanged(chanceSpinner, null);
}
});
return chanceSpinner;
}
// public static JSpinner addDoubleField(JPanel pane, String label, Double initialValue, boolean editable) { // public static JSpinner addDoubleField(JPanel pane, String label, Double initialValue, boolean editable) {
// return addDoubleField(pane, label, initialValue, editable, nullListener); // return addDoubleField(pane, label, initialValue, editable, nullListener);
// } // }

View File

@@ -30,7 +30,6 @@ public class ActorConditionEditor extends JSONElementEditor {
private JButton acIcon; private JButton acIcon;
private JTextField idField; private JTextField idField;
private JTextField nameField; private JTextField nameField;
private JTextField descriptionField;
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
private JComboBox categoryBox; private JComboBox categoryBox;
private IntegerBasedCheckBox positiveBox; private IntegerBasedCheckBox positiveBox;
@@ -82,7 +81,6 @@ public class ActorConditionEditor extends JSONElementEditor {
idField = addTextField(pane, "Internal ID: ", ac.id, ac.writable, listener); idField = addTextField(pane, "Internal ID: ", ac.id, ac.writable, listener);
nameField = addTranslatableTextField(pane, "Display name: ", ac.display_name, ac.writable, listener); nameField = addTranslatableTextField(pane, "Display name: ", ac.display_name, ac.writable, listener);
descriptionField = addTranslatableTextField(pane, "Description: ", ac.description, ac.writable, listener);
categoryBox = addEnumValueBox(pane, "Category: ", ActorCondition.ACCategory.values(), ac.category, ac.writable, listener); categoryBox = addEnumValueBox(pane, "Category: ", ActorCondition.ACCategory.values(), ac.category, ac.writable, listener);
positiveBox = addIntegerBasedCheckBox(pane, "Positive", ac.positive, ac.writable, listener); positiveBox = addIntegerBasedCheckBox(pane, "Positive", ac.positive, ac.writable, listener);
stackingBox = addIntegerBasedCheckBox(pane, "Stacking", ac.stacking, ac.writable, listener); stackingBox = addIntegerBasedCheckBox(pane, "Stacking", ac.stacking, ac.writable, listener);
@@ -174,10 +172,6 @@ public class ActorConditionEditor extends JSONElementEditor {
ActorConditionEditor.this.name = aCond.getDesc(); ActorConditionEditor.this.name = aCond.getDesc();
aCond.childrenChanged(new ArrayList<ProjectTreeNode>()); aCond.childrenChanged(new ArrayList<ProjectTreeNode>());
ATContentStudio.frame.editorChanged(ActorConditionEditor.this); ATContentStudio.frame.editorChanged(ActorConditionEditor.this);
}else if (source == descriptionField) {
aCond.description = (String) value;
aCond.childrenChanged(new ArrayList<ProjectTreeNode>());
ATContentStudio.frame.editorChanged(ActorConditionEditor.this);
} else if (source == acIcon) { } else if (source == acIcon) {
aCond.icon_id = (String) value; aCond.icon_id = (String) value;
aCond.childrenChanged(new ArrayList<ProjectTreeNode>()); aCond.childrenChanged(new ArrayList<ProjectTreeNode>());

View File

@@ -123,7 +123,7 @@ public class DialogueEditor extends JSONElementEditor {
private MyComboBox requirementObj; private MyComboBox requirementObj;
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
private JComboBox requirementSkill; private JComboBox requirementSkill;
private JComponent requirementObjId; private JTextField requirementObjId;
private JComponent requirementValue; private JComponent requirementValue;
private BooleanBasedCheckBox requirementNegated; private BooleanBasedCheckBox requirementNegated;
@@ -722,11 +722,6 @@ public class DialogueEditor extends JSONElementEditor {
requirementObjId = null; requirementObjId = null;
requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener); requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener);
break; break;
case random:
requirementObj = null;
requirementObjId = addChanceField(pane, "Chance: ", requirement.required_obj_id, "50/100", writable, listener);
requirementValue = null;
break;
case hasActorCondition: case hasActorCondition:
requirementObj = addActorConditionBox(pane, project, "Actor Condition: ", (ActorCondition) requirement.required_obj, writable, listener); requirementObj = addActorConditionBox(pane, project, "Actor Condition: ", (ActorCondition) requirement.required_obj, writable, listener);
requirementObjId = null; requirementObjId = null;
@@ -735,8 +730,6 @@ public class DialogueEditor extends JSONElementEditor {
case inventoryKeep: case inventoryKeep:
case inventoryRemove: case inventoryRemove:
case usedItem: case usedItem:
case wear:
case wearRemove:
requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener); requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener);
requirementObjId = null; requirementObjId = null;
requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener); requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener);
@@ -772,10 +765,10 @@ public class DialogueEditor extends JSONElementEditor {
requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener); requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener);
requirementValue = addIntegerField(pane, "Minimum score: ", requirement.required_value, true, writable, listener); requirementValue = addIntegerField(pane, "Minimum score: ", requirement.required_value, true, writable, listener);
break; break;
case factionScoreEquals: case wear:
requirementObj = null; requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener);
requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener); requirementObjId = null;
requirementValue = addIntegerField(pane, "Exact value: ", requirement.required_value, true, writable, listener); requirementValue = null;
break; break;
} }
requirementNegated = addBooleanBasedCheckBox(pane, "Negate this requirement.", requirement.negated, writable, listener); requirementNegated = addBooleanBasedCheckBox(pane, "Negate this requirement.", requirement.negated, writable, listener);
@@ -1176,7 +1169,7 @@ public class DialogueEditor extends JSONElementEditor {
label.setIcon(new ImageIcon(DefaultIcons.getBonemealIcon())); label.setIcon(new ImageIcon(DefaultIcons.getBonemealIcon()));
} else if (req.type == Requirement.RequirementType.timerElapsed) { } else if (req.type == Requirement.RequirementType.timerElapsed) {
label.setIcon(new ImageIcon(DefaultIcons.getTimerIcon())); label.setIcon(new ImageIcon(DefaultIcons.getTimerIcon()));
} else if (req.type == Requirement.RequirementType.factionScore || req.type == Requirement.RequirementType.factionScoreEquals) { } else if (req.type == Requirement.RequirementType.factionScore) {
label.setIcon(new ImageIcon(DefaultIcons.getAlignmentIcon())); label.setIcon(new ImageIcon(DefaultIcons.getAlignmentIcon()));
} }
if (req.type == null) { if (req.type == null) {

View File

@@ -50,7 +50,7 @@ public class DroplistEditor extends JSONElementEditor {
private DroppedItemsListModel droppedItemsListModel; private DroppedItemsListModel droppedItemsListModel;
private JSpinner qtyMinField; private JSpinner qtyMinField;
private JSpinner qtyMaxField; private JSpinner qtyMaxField;
private JComponent chanceField; private JSpinner chanceField;
public DroplistEditor(Droplist droplist) { public DroplistEditor(Droplist droplist) {
super(droplist, droplist.getDesc(), droplist.getIcon()); super(droplist, droplist.getDesc(), droplist.getIcon());
@@ -142,7 +142,7 @@ public class DroplistEditor extends JSONElementEditor {
itemCombo = addItemBox(pane, proj, "Item: ", di.item, writable, listener); itemCombo = addItemBox(pane, proj, "Item: ", di.item, writable, listener);
qtyMinField = addIntegerField(pane, "Quantity min: ", di.quantity_min, false, writable, listener); qtyMinField = addIntegerField(pane, "Quantity min: ", di.quantity_min, false, writable, listener);
qtyMaxField = addIntegerField(pane, "Quantity max: ", di.quantity_max, false, writable, listener); qtyMaxField = addIntegerField(pane, "Quantity max: ", di.quantity_max, false, writable, listener);
chanceField = addChanceField(pane, "Chance: ", di.chance, "100", writable, listener);//addDoubleField(pane, "Chance: ", di.chance, writable, listener); chanceField = addDoubleField(pane, "Chance: ", di.chance, writable, listener);
} }
pane.revalidate(); pane.revalidate();
pane.repaint(); pane.repaint();
@@ -221,9 +221,9 @@ public class DroplistEditor extends JSONElementEditor {
Droplist.DroppedItem di = (Droplist.DroppedItem)value; Droplist.DroppedItem di = (Droplist.DroppedItem)value;
if (di.item != null) { if (di.item != null) {
label.setIcon(new ImageIcon(di.item.getIcon())); label.setIcon(new ImageIcon(di.item.getIcon()));
label.setText(di.chance+(di.chance != null && di.chance.contains("/") ? "" : "%")+" to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item.getDesc()); label.setText(di.chance+"% to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item.getDesc());
} else if (!isNull(di)) { } else if (!isNull(di)) {
label.setText(di.chance+(di.chance != null && di.chance.contains("/") ? "" : "%")+" to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item_id); label.setText(di.chance+"% to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item_id);
} else { } else {
label.setText("New, undefined, dropped item."); label.setText("New, undefined, dropped item.");
} }
@@ -283,7 +283,7 @@ public class DroplistEditor extends JSONElementEditor {
selectedItem.quantity_max = (Integer) value; selectedItem.quantity_max = (Integer) value;
droppedItemsListModel.itemChanged(selectedItem); droppedItemsListModel.itemChanged(selectedItem);
} else if (source == chanceField) { } else if (source == chanceField) {
selectedItem.chance = (String) value; selectedItem.chance = (Double) value;
droppedItemsListModel.itemChanged(selectedItem); droppedItemsListModel.itemChanged(selectedItem);
} }

View File

@@ -82,7 +82,6 @@ public class ItemEditor extends JSONElementEditor {
private JSpinner equipBoostBC; private JSpinner equipBoostBC;
private JSpinner equipBoostCS; private JSpinner equipBoostCS;
private JSpinner equipSetCM; private JSpinner equipSetCM;
private JSpinner equipSetDM;
private JSpinner equipBoostDR; private JSpinner equipBoostDR;
private JSpinner equipIncMoveCost; private JSpinner equipIncMoveCost;
private JSpinner equipIncUseCost; private JSpinner equipIncUseCost;
@@ -218,7 +217,6 @@ public class ItemEditor extends JSONElementEditor {
} }
equipDmgMin = addIntegerField(equipEffectPane, "Attack Damage min: ", equipEffect.damage_boost_min, true, item.writable, listener); equipDmgMin = addIntegerField(equipEffectPane, "Attack Damage min: ", equipEffect.damage_boost_min, true, item.writable, listener);
equipDmgMax = addIntegerField(equipEffectPane, "Attack Damage max: ", equipEffect.damage_boost_max, true, item.writable, listener); equipDmgMax = addIntegerField(equipEffectPane, "Attack Damage max: ", equipEffect.damage_boost_max, true, item.writable, listener);
equipSetDM = addIntegerField(equipEffectPane, "Damage modifier %: ", equipEffect.damage_modifier, 100, false, item.writable, listener);
equipBoostHP = addIntegerField(equipEffectPane, "Boost max HP: ", equipEffect.max_hp_boost, true, item.writable, listener); equipBoostHP = addIntegerField(equipEffectPane, "Boost max HP: ", equipEffect.max_hp_boost, true, item.writable, listener);
equipBoostAP = addIntegerField(equipEffectPane, "Boost max AP: ", equipEffect.max_ap_boost, true, item.writable, listener); equipBoostAP = addIntegerField(equipEffectPane, "Boost max AP: ", equipEffect.max_ap_boost, true, item.writable, listener);
equipBoostAC = addIntegerField(equipEffectPane, "Boost attack chance: ", equipEffect.increase_attack_chance, true, item.writable, listener); equipBoostAC = addIntegerField(equipEffectPane, "Boost attack chance: ", equipEffect.increase_attack_chance, true, item.writable, listener);
@@ -1433,7 +1431,6 @@ public class ItemEditor extends JSONElementEditor {
public static boolean isNull(Item.EquipEffect effect) { public static boolean isNull(Item.EquipEffect effect) {
if (effect.conditions != null) return false; if (effect.conditions != null) return false;
if (effect.critical_multiplier != null) return false; if (effect.critical_multiplier != null) return false;
if (effect.damage_modifier != null) return false;
if (effect.damage_boost_max != null) return false; if (effect.damage_boost_max != null) return false;
if (effect.damage_boost_min != null) return false; if (effect.damage_boost_min != null) return false;
if (effect.increase_attack_chance != null) return false; if (effect.increase_attack_chance != null) return false;
@@ -1622,10 +1619,6 @@ public class ItemEditor extends JSONElementEditor {
equipEffect.critical_multiplier = (Double) value; equipEffect.critical_multiplier = (Double) value;
updatePrice = true; updatePrice = true;
updateEquip = true; updateEquip = true;
} else if (source == equipSetDM) {
equipEffect.damage_modifier = (Integer) value;
updatePrice = true;
updateEquip = true;
} else if (source == equipBoostDR) { } else if (source == equipBoostDR) {
equipEffect.increase_damage_resistance = (Integer) value; equipEffect.increase_damage_resistance = (Integer) value;
updatePrice = true; updatePrice = true;

View File

@@ -161,7 +161,6 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
private JComboBox evaluateTriggerBox; private JComboBox evaluateTriggerBox;
private JSpinner quantityField; private JSpinner quantityField;
private JSpinner respawnSpeedField;
private JCheckBox spawnActiveForNewGame; private JCheckBox spawnActiveForNewGame;
private JCheckBox spawnIgnoreAreas; private JCheckBox spawnIgnoreAreas;
private JTextField spawngroupField; private JTextField spawngroupField;
@@ -174,7 +173,7 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
private JPanel requirementParamsPane; private JPanel requirementParamsPane;
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
private JComboBox requirementObj; private JComboBox requirementObj;
private JComponent requirementObjId; private JTextField requirementObjId;
private JComponent requirementValue; private JComponent requirementValue;
private BooleanBasedCheckBox requirementNegated; private BooleanBasedCheckBox requirementNegated;
@@ -630,7 +629,6 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
areaField = addTextField(pane, "Spawn area ID: ", ((SpawnArea)selected).name, ((TMXMap)target).writable, listener); areaField = addTextField(pane, "Spawn area ID: ", ((SpawnArea)selected).name, ((TMXMap)target).writable, listener);
spawngroupField = addTextField(pane, "Spawn group ID: ", ((SpawnArea)selected).spawngroup_id, ((TMXMap)target).writable, listener); spawngroupField = addTextField(pane, "Spawn group ID: ", ((SpawnArea)selected).spawngroup_id, ((TMXMap)target).writable, listener);
quantityField = addIntegerField(pane, "Number of spawned NPCs: ", ((SpawnArea)selected).quantity, false, ((TMXMap)target).writable, listener); quantityField = addIntegerField(pane, "Number of spawned NPCs: ", ((SpawnArea)selected).quantity, false, ((TMXMap)target).writable, listener);
respawnSpeedField = addIntegerField(pane, "Respawn-Speed of NPCs: ", ((SpawnArea)selected).respawnSpeed, false, ((TMXMap)target).writable, listener);
spawnActiveForNewGame = addBooleanBasedCheckBox(pane, "Active in a new game: ", ((SpawnArea)selected).active, ((TMXMap)target).writable, listener); spawnActiveForNewGame = addBooleanBasedCheckBox(pane, "Active in a new game: ", ((SpawnArea)selected).active, ((TMXMap)target).writable, listener);
spawnIgnoreAreas = addBooleanBasedCheckBox(pane, "Monsters can walk on other game objects: ", ((SpawnArea)selected).ignoreAreas, ((TMXMap)target).writable, listener); spawnIgnoreAreas = addBooleanBasedCheckBox(pane, "Monsters can walk on other game objects: ", ((SpawnArea)selected).ignoreAreas, ((TMXMap)target).writable, listener);
npcListModel = new SpawnGroupNpcListModel((SpawnArea) selected); npcListModel = new SpawnGroupNpcListModel((SpawnArea) selected);
@@ -677,11 +675,6 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
requirementObjId = null; requirementObjId = null;
requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener); requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener);
break; break;
case random:
requirementObj = null;
requirementObjId = addChanceField(pane, "Chance: ", requirement.required_obj_id, "50/100", writable, listener);
requirementValue = null;
break;
case hasActorCondition: case hasActorCondition:
requirementObj = addActorConditionBox(pane, project, "Actor Condition: ", (ActorCondition) requirement.required_obj, writable, listener); requirementObj = addActorConditionBox(pane, project, "Actor Condition: ", (ActorCondition) requirement.required_obj, writable, listener);
requirementObjId = null; requirementObjId = null;
@@ -690,8 +683,6 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
case inventoryKeep: case inventoryKeep:
case inventoryRemove: case inventoryRemove:
case usedItem: case usedItem:
case wear:
case wearRemove:
requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener); requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener);
requirementObjId = null; requirementObjId = null;
requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener); requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener);
@@ -726,10 +717,10 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener); requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener);
requirementValue = addIntegerField(pane, "Minimum score: ", requirement.required_value, true, writable, listener); requirementValue = addIntegerField(pane, "Minimum score: ", requirement.required_value, true, writable, listener);
break; break;
case factionScoreEquals: case wear:
requirementObj = null; requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener);
requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener); requirementObjId = null;
requirementValue = addIntegerField(pane, "Exact value: ", requirement.required_value, true, writable, listener); requirementValue = null;
break; break;
} }
} }
@@ -2051,11 +2042,6 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
SpawnArea area = (SpawnArea) selectedMapObject; SpawnArea area = (SpawnArea) selectedMapObject;
area.quantity = (Integer) value; area.quantity = (Integer) value;
} }
} else if (source == respawnSpeedField) {
if (selectedMapObject instanceof SpawnArea) {
SpawnArea area = (SpawnArea) selectedMapObject;
area.respawnSpeed = (Integer) value;
}
} else if (source == spawnActiveForNewGame) { } else if (source == spawnActiveForNewGame) {
if (selectedMapObject instanceof SpawnArea) { if (selectedMapObject instanceof SpawnArea) {
SpawnArea area = (SpawnArea) selectedMapObject; SpawnArea area = (SpawnArea) selectedMapObject;
@@ -2332,14 +2318,11 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
if (!activeReplacements.containsKey(area)) { if (!activeReplacements.containsKey(area)) {
activeReplacements.put(area, true); activeReplacements.put(area, true);
} }
for (ReplaceArea.Replacement repl : area.replacements) {
if(area.replacements != null) { if (replacementsForLayer.get(repl.sourceLayer) == null) {
for (ReplaceArea.Replacement repl : area.replacements) { replacementsForLayer.put(repl.sourceLayer, new ArrayList<ReplaceArea>());
if (replacementsForLayer.get(repl.sourceLayer) == null) { }
replacementsForLayer.put(repl.sourceLayer, new ArrayList<ReplaceArea>()); replacementsForLayer.get(repl.sourceLayer).add(area);
}
replacementsForLayer.get(repl.sourceLayer).add(area);
}
} }
} }
} }
@@ -2472,10 +2455,10 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
return false; return false;
} }
JLabel noTileGround = new JLabel("None", new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)), SwingConstants.LEFT); JLabel noTileGround = new JLabel(new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)));
JLabel noTileObjects = new JLabel("None", new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)), SwingConstants.LEFT); JLabel noTileObjects = new JLabel(new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)));
JLabel noTileAbove = new JLabel("None", new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)), SwingConstants.LEFT); JLabel noTileAbove = new JLabel(new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)));
JLabel noTileTop = new JLabel("None", new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)), SwingConstants.LEFT); JLabel noTileTop = new JLabel(new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)));
{ {
noTileGround.setPreferredSize(new Dimension(32, 32)); noTileGround.setPreferredSize(new Dimension(32, 32));
noTileObjects.setPreferredSize(new Dimension(32, 32)); noTileObjects.setPreferredSize(new Dimension(32, 32));
@@ -2500,19 +2483,16 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
JPanel content = new JPanel(); JPanel content = new JPanel();
content.setLayout(new JideBoxLayout(content, JideBoxLayout.PAGE_AXIS)); content.setLayout(new JideBoxLayout(content, JideBoxLayout.PAGE_AXIS));
if (tooltippedTile != null) { if (tooltippedTile != null) {
tiled.core.Tile tile; Image tile;
Image tileImage;
JLabel label; JLabel label;
if (top != null && top.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) { if (top != null && top.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) {
tile = top.getTileAt(tooltippedTile.x, tooltippedTile.y); tile = top.getTileAt(tooltippedTile.x, tooltippedTile.y).getImage();
tileImage = tile.getImage();
} else { } else {
tile = null; tile = null;
tileImage = null;
} }
if (tileImage != null) { if (tile != null) {
label = new JLabel(tile.getTileSet().getName(), new ImageIcon(tileImage), SwingConstants.LEFT); label = new JLabel(new ImageIcon(tile));
label.setPreferredSize(new Dimension(32,32)); label.setPreferredSize(new Dimension(32,32));
content.add(label, JideBoxLayout.FIX); content.add(label, JideBoxLayout.FIX);
//Fix when (if?) Top is advertised publicly. //Fix when (if?) Top is advertised publicly.
@@ -2521,14 +2501,12 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
} }
if (above != null && above.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) { if (above != null && above.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) {
tile = above.getTileAt(tooltippedTile.x, tooltippedTile.y); tile = above.getTileAt(tooltippedTile.x, tooltippedTile.y).getImage();
tileImage = tile.getImage();
} else { } else {
tile = null; tile = null;
tileImage = null;
} }
if (tileImage != null) { if (tile != null) {
label = new JLabel(tile.getTileSet().getName(), new ImageIcon(tileImage), SwingConstants.LEFT); label = new JLabel(new ImageIcon(tile));
label.setPreferredSize(new Dimension(32,32)); label.setPreferredSize(new Dimension(32,32));
content.add(label, JideBoxLayout.FIX); content.add(label, JideBoxLayout.FIX);
} else { } else {
@@ -2536,14 +2514,12 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
} }
if (objects != null && objects.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) { if (objects != null && objects.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) {
tile = objects.getTileAt(tooltippedTile.x, tooltippedTile.y); tile = objects.getTileAt(tooltippedTile.x, tooltippedTile.y).getImage();
tileImage = tile.getImage();
} else { } else {
tile = null; tile = null;
tileImage = null;
} }
if (tileImage != null) { if (tile != null) {
label = new JLabel(tile.getTileSet().getName(), new ImageIcon(tileImage), SwingConstants.LEFT); label = new JLabel(new ImageIcon(tile));
label.setPreferredSize(new Dimension(32,32)); label.setPreferredSize(new Dimension(32,32));
content.add(label, JideBoxLayout.FIX); content.add(label, JideBoxLayout.FIX);
} else { } else {
@@ -2551,14 +2527,12 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
} }
if (ground != null && ground.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) { if (ground != null && ground.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) {
tile = ground.getTileAt(tooltippedTile.x, tooltippedTile.y); tile = ground.getTileAt(tooltippedTile.x, tooltippedTile.y).getImage();
tileImage = tile.getImage();
} else { } else {
tile = null; tile = null;
tileImage = null;
} }
if (tileImage != null) { if (tile != null) {
label = new JLabel(tile.getTileSet().getName(), new ImageIcon(tileImage), SwingConstants.LEFT); label = new JLabel(new ImageIcon(tile));
label.setPreferredSize(new Dimension(32,32)); label.setPreferredSize(new Dimension(32,32));
content.add(label, JideBoxLayout.FIX); content.add(label, JideBoxLayout.FIX);
} else { } else {

View File

@@ -521,6 +521,16 @@ public class WorldMapView extends JComponent implements Scrollable {
} }
worldmap.getProject().getMap(id).addBacklink(worldmap); worldmap.getProject().getMap(id).addBacklink(worldmap);
} }
List<String> toRemove = new ArrayList<String>();
for (String s : worldmap.labels.keySet()) {
if (!mapLocations.containsKey(s)) {
toRemove.add(s);
}
}
for (String s : toRemove) {
worldmap.labels.remove(s);
}
} }
} }

View File

@@ -1,20 +1,29 @@
package com.gpl.rpg.atcontentstudio.ui.sprites; package com.gpl.rpg.atcontentstudio.ui.sprites;
import java.awt.*; import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.swing.*;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JToggleButton;
import javax.swing.ScrollPaneConstants;
import com.gpl.rpg.atcontentstudio.ATContentStudio; import com.gpl.rpg.atcontentstudio.ATContentStudio;
import com.gpl.rpg.atcontentstudio.model.Project; import com.gpl.rpg.atcontentstudio.model.Project;
import com.gpl.rpg.atcontentstudio.model.sprites.Spritesheet; import com.gpl.rpg.atcontentstudio.model.sprites.Spritesheet;
import com.gpl.rpg.atcontentstudio.model.sprites.Spritesheet.Category; import com.gpl.rpg.atcontentstudio.model.sprites.Spritesheet.Category;
import com.gpl.rpg.atcontentstudio.utils.SpriteUtils;
public class SpriteChooser extends JDialog { public class SpriteChooser extends JDialog {
@@ -25,8 +34,8 @@ public class SpriteChooser extends JDialog {
private static final int STD_HEIGHT = 32; private static final int STD_HEIGHT = 32;
private static final int MAX_PER_ROW = 10; private static final int MAX_PER_ROW = 10;
public static Map<Project, Map<Spritesheet.Category, SpriteChooser>> cache = new LinkedHashMap<Project, Map<Spritesheet.Category, SpriteChooser>>(); public static Map<Project, Map<Spritesheet.Category, SpriteChooser>> cache = new LinkedHashMap<Project, Map<Spritesheet.Category,SpriteChooser>>();
public static Map<Project, Map<Spritesheet.Category, List<Spritesheet>>> cacheValidator = new LinkedHashMap<Project, Map<Category, List<Spritesheet>>>(); public static Map<Project, Map<Spritesheet.Category, List<Spritesheet>>> cacheValidator = new LinkedHashMap<Project, Map<Category,List<Spritesheet>>>();
public static SpriteChooser getChooser(Project proj, Spritesheet.Category category) { public static SpriteChooser getChooser(Project proj, Spritesheet.Category category) {
@@ -37,13 +46,13 @@ public class SpriteChooser extends JDialog {
cache.get(proj).put(category, new SpriteChooser(proj, category)); cache.get(proj).put(category, new SpriteChooser(proj, category));
} else { } else {
List<Spritesheet> spritesheets = new ArrayList<Spritesheet>(); List<Spritesheet> spritesheets = new ArrayList<Spritesheet>();
for (int i = 0; i < proj.getSpritesheetCount(); i++) { for (int i=0; i<proj.getSpritesheetCount(); i++) {
Spritesheet sheet = proj.getSpritesheet(i); Spritesheet sheet = proj.getSpritesheet(i);
if (sheet.category == category) { if (sheet.category == category) {
spritesheets.add(sheet); spritesheets.add(sheet);
} }
} }
if (!spritesheets.equals(cacheValidator.get(proj).get(category))) { if ( !spritesheets.equals(cacheValidator.get(proj).get(category)) ) {
cache.get(proj).put(category, new SpriteChooser(proj, category)); cache.get(proj).put(category, new SpriteChooser(proj, category));
} }
} }
@@ -69,7 +78,7 @@ public class SpriteChooser extends JDialog {
setTitle("Select a sprite"); setTitle("Select a sprite");
setModalityType(ModalityType.APPLICATION_MODAL); setModalityType(ModalityType.APPLICATION_MODAL);
List<Spritesheet> spritesheets = new ArrayList<Spritesheet>(); List<Spritesheet> spritesheets = new ArrayList<Spritesheet>();
for (int i = 0; i < proj.getSpritesheetCount(); i++) { for (int i=0; i<proj.getSpritesheetCount(); i++) {
Spritesheet sheet = proj.getSpritesheet(i); Spritesheet sheet = proj.getSpritesheet(i);
if (sheet.category == category) { if (sheet.category == category) {
spritesheets.add(sheet); spritesheets.add(sheet);
@@ -97,15 +106,11 @@ public class SpriteChooser extends JDialog {
Point nextFreeSlot = new Point(0, 0); Point nextFreeSlot = new Point(0, 0);
int i; int i;
BufferedImage img; Image img;
group = new ButtonGroup(); group = new ButtonGroup();
//For every sprite find a free space in panel:
for (Spritesheet sheet : spritesheets) { for (Spritesheet sheet : spritesheets) {
i = -1; i = 0;
while ((img = sheet.getImage(++i)) != null) { while ((img = sheet.getImage(i)) != null) {
if (SpriteUtils.checkIsImageEmpty(img)) {
continue;
}
IconButton button = new IconButton(img, sheet.id, i); IconButton button = new IconButton(img, sheet.id, i);
group.add(button); group.add(button);
if (sheet.spriteWidth == STD_WIDTH && sheet.spriteHeight == STD_HEIGHT) { if (sheet.spriteWidth == STD_WIDTH && sheet.spriteHeight == STD_HEIGHT) {
@@ -115,7 +120,7 @@ public class SpriteChooser extends JDialog {
c.gridx = 0; c.gridx = 0;
c.gridy++; c.gridy++;
} }
nextFreeSlot.setLocation(c.gridx, c.gridy); nextFreeSlot.setLocation(c.gridx, c.gridy);
} else { } else {
c.gridwidth = (sheet.spriteWidth / STD_WIDTH) + (sheet.spriteWidth % STD_WIDTH == 0 ? 0 : 1); c.gridwidth = (sheet.spriteWidth / STD_WIDTH) + (sheet.spriteWidth % STD_WIDTH == 0 ? 0 : 1);
c.gridheight = (sheet.spriteHeight / STD_HEIGHT) + (sheet.spriteHeight % STD_HEIGHT == 0 ? 0 : 1); c.gridheight = (sheet.spriteHeight / STD_HEIGHT) + (sheet.spriteHeight % STD_HEIGHT == 0 ? 0 : 1);
@@ -126,19 +131,13 @@ public class SpriteChooser extends JDialog {
for (int y = c.gridy; y < c.gridy + c.gridwidth; y++) { for (int y = c.gridy; y < c.gridy + c.gridwidth; y++) {
if (reservedSlots.contains(new Point(x, y))) { if (reservedSlots.contains(new Point(x, y))) {
slotOk = false; slotOk = false;
break;
} }
} }
if (!slotOk) {
break;
}
} }
if (c.gridx + c.gridwidth > MAX_PER_ROW) { if (slotOk && c.gridx + c.gridwidth > MAX_PER_ROW) {
c.gridx = 0; c.gridx = 0;
c.gridy++; c.gridy++;
slotOk = false; slotOk = false;
} else if (!slotOk) {
c.gridx++;
} }
} }
pane.add(button, c); pane.add(button, c);
@@ -158,8 +157,9 @@ public class SpriteChooser extends JDialog {
c.gridx = 0; c.gridx = 0;
c.gridy++; c.gridy++;
} }
nextFreeSlot.setLocation(c.gridx, c.gridy); nextFreeSlot.setLocation(c.gridx, c.gridy);
} }
i++;
} }
} }
@@ -232,12 +232,12 @@ public class SpriteChooser extends JDialog {
super(new ImageIcon(img)); super(new ImageIcon(img));
this.sheetId = sheetId; this.sheetId = sheetId;
this.spriteIndex = spriteIndex; this.spriteIndex = spriteIndex;
setToolTipText(sheetId + ":" + spriteIndex); setToolTipText(sheetId+":"+spriteIndex);
addActionListener(new ActionListener() { addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if (IconButton.this.isSelected()) { if (IconButton.this.isSelected()) {
selectedIconId = IconButton.this.sheetId + ":" + IconButton.this.spriteIndex; selectedIconId = IconButton.this.sheetId+":"+IconButton.this.spriteIndex;
SpriteChooser.this.setVisible(false); SpriteChooser.this.setVisible(false);
SpriteChooser.this.dispose(); SpriteChooser.this.dispose();
if (listener != null) listener.iconSelected(selectedIconId); if (listener != null) listener.iconSelected(selectedIconId);

View File

@@ -37,7 +37,7 @@ public class ItemsTableView extends ElementTableView {
@Override @Override
public int getColumnCount() { public int getColumnCount() {
return 43; return 33;
} }
@Override @Override
@@ -62,30 +62,20 @@ public class ItemsTableView extends ElementTableView {
case 16: return "On kill - AP min"; case 16: return "On kill - AP min";
case 17: return "On kill - AP max"; case 17: return "On kill - AP max";
case 18: return "On kill - # conditions"; case 18: return "On kill - # conditions";
case 19: return "On hit recv - HP min"; case 19: return "AD min";
case 20: return "On hit recv - HP max"; case 20: return "AD max";
case 21: return "On hit recv - AP min"; case 21: return "Max HP";
case 22: return "On hit recv - AP max"; case 22: return "Max AP";
case 23: return "On hit recv - # conditions"; case 23: return "Attack cost";
case 24: return "On hit recv - Tgt HP min"; case 24: return "AC";
case 25: return "On hit recv - Tgt HP max"; case 25: return "BC";
case 26: return "On hit recv - Tgt AP min"; case 26: return "DR";
case 27: return "On hit recv - Tgt AP max"; case 27: return "CS";
case 28: return "AD min"; case 28: return "CM";
case 29: return "AD max"; case 29: return "Move cost";
case 30: return "Damage modifier %"; case 30: return "Use cost";
case 31: return "Max HP"; case 31: return "Reequip cost";
case 32: return "Max AP"; case 32: return "# conditions";
case 33: return "Attack cost";
case 34: return "AC";
case 35: return "BC";
case 36: return "DR";
case 37: return "CS";
case 38: return "CM";
case 39: return "Move cost";
case 40: return "Use cost";
case 41: return "Reequip cost";
case 42: return "# conditions";
} }
return null; return null;
} }
@@ -113,30 +103,20 @@ public class ItemsTableView extends ElementTableView {
case 16: return Integer.class;//"On kill - AP min"; case 16: return Integer.class;//"On kill - AP min";
case 17: return Integer.class;//"On kill - AP max"; case 17: return Integer.class;//"On kill - AP max";
case 18: return Integer.class;//"On kill - # conditions"; case 18: return Integer.class;//"On kill - # conditions";
case 19: return Integer.class;//"On hit recv - HP min"; case 19: return Integer.class;//"AD min";
case 20: return Integer.class;//"On hit recv - HP max"; case 20: return Integer.class;//"AD max";
case 21: return Integer.class;//"On hit recv - AP min"; case 21: return Integer.class;//"Max HP";
case 22: return Integer.class;//"On hit recv - AP max"; case 22: return Integer.class;//"Max AP";
case 23: return Integer.class;//"On hit recv - # conditions"; case 23: return Integer.class;//"Attack cost";
case 24: return Integer.class;//"On hit recv - Tgt HP min"; case 24: return Integer.class;//"AC";
case 25: return Integer.class;//"On hit recv - Tgt HP max"; case 25: return Integer.class;//"BC";
case 26: return Integer.class;//"On hit recv - Tgt AP min"; case 26: return Integer.class;//"DR";
case 27: return Integer.class;//"On hit recv - Tgt AP max"; case 27: return Integer.class;//"CS";
case 28: return Integer.class;//"AD min"; case 28: return Double.class;//"CM";
case 29: return Integer.class;//"AD max"; case 29: return Integer.class;//"Move cost";
case 30: return Integer.class;//"Damage modifier"; case 30: return Integer.class;//"Use cost";
case 31: return Integer.class;//"Max HP"; case 31: return Integer.class;//"Reequip cost";
case 32: return Integer.class;//"Max AP"; case 32: return Integer.class;//"# conditions";
case 33: return Integer.class;//"Attack cost";
case 34: return Integer.class;//"AC";
case 35: return Integer.class;//"BC";
case 36: return Integer.class;//"DR";
case 37: return Integer.class;//"CS";
case 38: return Double.class;//"CM";
case 39: return Integer.class;//"Move cost";
case 40: return Integer.class;//"Use cost";
case 41: return Integer.class;//"Reequip cost";
case 42: return Integer.class;//"# conditions";
} }
return null; return null;
} }
@@ -197,30 +177,20 @@ public class ItemsTableView extends ElementTableView {
case 16: return (!canUse && item.kill_effect != null) ? item.kill_effect.ap_boost_min : null;//"On kill - AP min"; case 16: return (!canUse && item.kill_effect != null) ? item.kill_effect.ap_boost_min : null;//"On kill - AP min";
case 17: return (!canUse && item.kill_effect != null) ? item.kill_effect.ap_boost_max : null;//"On kill - AP max"; case 17: return (!canUse && item.kill_effect != null) ? item.kill_effect.ap_boost_max : null;//"On kill - AP max";
case 18: return (!canUse && item.kill_effect != null && item.kill_effect.conditions_source != null) ? item.kill_effect.conditions_source.size() : null;//"On kill - # conditions"; case 18: return (!canUse && item.kill_effect != null && item.kill_effect.conditions_source != null) ? item.kill_effect.conditions_source.size() : null;//"On kill - # conditions";
case 19: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.hp_boost_min : null;//"On hit recv - HP min"; case 19: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_boost_min : null;//"AD min";
case 20: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.hp_boost_max : null;//"On hit recv - HP max"; case 20: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_boost_max : null;//"AD max";
case 21: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.ap_boost_min : null;//"On hit recv - AP min"; case 21: return (canEquip && item.equip_effect != null) ? item.equip_effect.max_hp_boost : null;//"Max HP";
case 22: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.ap_boost_max : null;//"On hit recv - AP max"; case 22: return (canEquip && item.equip_effect != null) ? item.equip_effect.max_ap_boost : null;//"Max AP";
case 23: return (!canUse && item.hit_received_effect != null && item.hit_received_effect.conditions_source != null) ? item.hit_received_effect.conditions_source.size() : null;//"On hit recv - # conditions"; case 23: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_attack_cost : null;//"Attack cost";
case 24: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.hp_boost_min : null;//"On hit recv - Tgt HP min"; case 24: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_attack_chance : null;//"AC";
case 25: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.hp_boost_max : null;//"On hit recv - Tgt HP max"; case 25: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_block_chance : null;//"BC";
case 26: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.ap_boost_min : null;//"On hit recv - Tgt AP min"; case 26: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_damage_resistance : null;//"DR";
case 27: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.ap_boost_max : null;//"On hit recv - Tgt AP max"; case 27: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_critical_skill : null;//"CS";
case 28: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_boost_min : null;//"AD min"; case 28: return (canEquip && item.equip_effect != null) ? item.equip_effect.critical_multiplier : null;//"CM";
case 29: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_boost_max : null;//"AD max"; case 29: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_move_cost : null;//"Move cost";
case 30: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_modifier : null;//"Damage modifier"; case 30: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_use_item_cost : null;//"Use cost";
case 31: return (canEquip && item.equip_effect != null) ? item.equip_effect.max_hp_boost : null;//"Max HP"; case 31: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_reequip_cost : null;//"Reequip cost";
case 32: return (canEquip && item.equip_effect != null) ? item.equip_effect.max_ap_boost : null;//"Max AP"; case 32: return (canEquip && item.equip_effect != null && item.equip_effect.conditions != null) ? item.equip_effect.conditions.size() : null;//"# conditions";
case 33: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_attack_cost : null;//"Attack cost";
case 34: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_attack_chance : null;//"AC";
case 35: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_block_chance : null;//"BC";
case 36: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_damage_resistance : null;//"DR";
case 37: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_critical_skill : null;//"CS";
case 38: return (canEquip && item.equip_effect != null) ? item.equip_effect.critical_multiplier : null;//"CM";
case 39: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_move_cost : null;//"Move cost";
case 40: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_use_item_cost : null;//"Use cost";
case 41: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_reequip_cost : null;//"Reequip cost";
case 42: return (canEquip && item.equip_effect != null && item.equip_effect.conditions != null) ? item.equip_effect.conditions.size() : null;//"# conditions";
} }
return null; return null;
} }

View File

@@ -1,34 +0,0 @@
package com.gpl.rpg.atcontentstudio.utils;
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
public final class SpriteUtils {
/**
* Check if the image is empty (transparent )
*
* @param img The image to check
* @return true if the image is empty
*/
public static boolean checkIsImageEmpty(BufferedImage img) {
int width = img.getWidth(null);
int height = img.getHeight(null);
WritableRaster raster = img.getAlphaRaster();
if (raster == null) {
return false;
}
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
//get pixel alpha value
int alpha = raster.getSample(x, y, 0);
//if alpha is not 0 then the pixel is not transparent
if (alpha != 0) {
return false;
}
}
}
//no non-transparent pixel found
return true;
}
}

View File

@@ -12,8 +12,6 @@ import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.Vector; import java.util.Vector;
public class POParser public class POParser
@@ -62,9 +60,11 @@ public class POParser
POFile result = null; POFile result = null;
try try
{ {
BufferedReader br = Files.newBufferedReader(file.toPath(), StandardCharsets.UTF_8); FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
result = parse(br); result = parse(br);
br.close(); br.close();
fr.close();
} }
catch (java.io.FileNotFoundException e) catch (java.io.FileNotFoundException e)
{ {