--------------------------------------------------
---- LIST PROJECTS AND GET INDICES ---------------
--------------------------------------------------
import com.gpl.rpg.atcontentstudio.model.Workspace;
import com.gpl.rpg.atcontentstudio.model.ProjectTreeNode;
for (ProjectTreeNode proj : Workspace.activeWorkspace.projects) {
print(proj.getDesc()+" - "+Workspace.activeWorkspace.projects.indexOf(proj));
--------------------------------------------------
---- LIST PROJECTS AND SHOW SOURCE DIR -----------
--------------------------------------------------
import com.gpl.rpg.atcontentstudio.model.Workspace;
import com.gpl.rpg.atcontentstudio.model.ProjectTreeNode;
import com.gpl.rpg.atcontentstudio.model.Project;
for (ProjectTreeNode proj : Workspace.activeWorkspace.projects) {
if (proj instanceof Project) {
print(Workspace.activeWorkspace.projects.indexOf(proj)+" - "+proj.getDesc()+" - "+proj.baseContent.baseFolder.getAbsolutePath());
print(Workspace.activeWorkspace.projects.indexOf(proj)+" - "+proj.getDesc()+" - [Open project to look up source path]");
--------------------------------------------------
---- CHANGE PROJECT SOURCE DIR -------------------
--------------------------------------------------
import com.gpl.rpg.atcontentstudio.model.Workspace;
import com.gpl.rpg.atcontentstudio.model.ProjectTreeNode;
import com.gpl.rpg.atcontentstudio.model.Project;
proj = Workspace.activeWorkspace.projects.get(0);
proj.baseContent.baseFolder = new File("/path/to/new/folder");
--------------------------------------------------
---- QUEST COMPLETION TEST -----------------------
--------------------------------------------------
import com.gpl.rpg.atcontentstudio.model.Workspace;
proj = Workspace.activeWorkspace.projects.get(0);
for(quest : proj.baseContent.gameData.quests) {
print(quest.id+"\t--> "+quest.name);
completing_stages_count = 0;
for (stage : quest.stages) {
if (stage.finishes_quest != null && stage.finishes_quest != 0) {
completing_stages_count++;
if (completing_stages_count == 0) {
print("ALERT: Impossible to finish this quest");
} else if (completing_stages_count == 1) {
print("\tThere is 1 way to complete this quest");
print("\tThere are "+completing_stages_count+" ways to complete this quest");
--------------------------------------------------
---- SEARCH IN DIALOGUES AND REPLIES -------------
--------------------------------------------------
import com.gpl.rpg.atcontentstudio.*;
import com.gpl.rpg.atcontentstudio.model.*;
import com.gpl.rpg.atcontentstudio.model.gamedata.*;
proj = Workspace.activeWorkspace.projects.get(1);
String searched = "my brother";
for (int i = 0; i < proj.getDialogueCount(); i++) {
Dialogue dial = proj.getDialogue(i);
if (dial == null || dial.message == null) continue;
if (dial.replies == null || dial.replies.isEmpty()) continue;
for (reply : dial.replies) {
if (reply.text == null) continue;
if (reply.text.indexOf(searched) > 0) {
print("-----Match in reply-------");
print("- "+dial.message);
if (reply.next_phrase != null && reply.next_phrase.message != null) {
print("- "+reply.next_phrase.message);
if (dial.message.indexOf(searched) > 0) {
print("-----Match in dialogue ----");
print("- "+dial.message);
print ("-------------------------");
print (dial_count+" match(es) in dialogues");
print (repl_count+" match(es) in replies");
print ("-------------------------");
--------------------------------------------------
---- SEARCH IN MAP NAMES -------------------------
--------------------------------------------------
import com.gpl.rpg.atcontentstudio.*;
import com.gpl.rpg.atcontentstudio.model.*;
import com.gpl.rpg.atcontentstudio.model.gamedata.*;
import com.gpl.rpg.atcontentstudio.model.maps.*;
proj = Workspace.activeWorkspace.projects.get(1);
String searched = "church";
for (int i = 0; i < proj.getMapCount(); i++) {
TMXMap map = proj.getMap(i);
if (map == null || map.id == null) continue;
if (map.id.indexOf(searched) > 0) {
print ("-------------------------");
print (repl_count+" match(es)");
print ("-------------------------");
--------------------------------------------------
---- SPAWN AREAS WITH DUPLICATE IDS --------------
--------------------------------------------------
import com.gpl.rpg.atcontentstudio.*;
import com.gpl.rpg.atcontentstudio.model.*;
import com.gpl.rpg.atcontentstudio.model.gamedata.*;
import com.gpl.rpg.atcontentstudio.model.maps.*;
import java.util.LinkedList;
proj = Workspace.activeWorkspace.projects.get(1);
for (int i = 0; i < proj.getMapCount(); i++) {
TMXMap map = proj.getMap(i);
if (map == null || map.groups == null) continue;
List spawnAreaNames = new LinkedList();
for(MapObjectGroup group : map.groups) {
if (group.mapObjects == null || group.mapObjects.isEmpty()) continue;
for (MapObject obj : group.mapObjects) {
if (!(obj instanceof SpawnArea)) continue;
if (spawnAreaNames.contains(obj.name)) {
print(map.id+" -> "+obj.name);
spawnAreaNames.add(obj.name);
--------------------------------------------------
---- REMOVE DUPLICATE IDS IN SPAWN AREAS ---------
--------------------------------------------------
import com.gpl.rpg.atcontentstudio.*;
import com.gpl.rpg.atcontentstudio.model.*;
import com.gpl.rpg.atcontentstudio.model.gamedata.*;
import com.gpl.rpg.atcontentstudio.model.maps.*;
import java.util.LinkedHashMap;
import java.io.FileWriter;
proj = Workspace.activeWorkspace.projects.get(1);
for (int i = 0; i < proj.getMapCount(); i++) {
TMXMap map = proj.getMap(i);
if (map == null || map.groups == null) continue;
Map spawnAreaNames = new LinkedHashMap();
for(MapObjectGroup group : map.groups) {
if (group.mapObjects == null || group.mapObjects.isEmpty()) continue;
for (MapObject obj : group.mapObjects) {
if (!(obj instanceof SpawnArea)) continue;
if (spawnAreaNames.containsKey(obj.name)) {
int index = ((Integer)spawnAreaNames.get(obj.name)) + 1;
spawnAreaNames.put(obj.name,index);
obj.name = obj.name+"_"+index;
print(map.id+" -> "+obj.name);
spawnAreaNames.put(obj.name,0);
File tmxFile = new File("/tmp/maps/"+map.id+".tmx");
FileWriter w = new FileWriter(tmxFile);
--------------------------------------------------
---- RESAVE EVERYTHING ---------------------------
--------------------------------------------------
import com.gpl.rpg.atcontentstudio.*;
import com.gpl.rpg.atcontentstudio.model.*;
import com.gpl.rpg.atcontentstudio.model.gamedata.*;
Project proj = Workspace.activeWorkspace.projects.get(4);
print("Project - "+proj.getDesc());
for (ProjectTreeNode category : proj.baseContent.gameData.children()) {
print("\tCategory - "+category.getDesc());
for (ProjectTreeNode element : category.children()) {
print("\t\t"+element.id);
if (proj.getGameDataElement(element.getClass(), element.id) == element) {
proj.makeWritable(element);
element = proj.getGameDataElement(element.getClass(), element.id);
--------------------------------------------------
---- SCAN DEPENDENCIES ---------------------------
--------------------------------------------------
import com.gpl.rpg.atcontentstudio.*;
import com.gpl.rpg.atcontentstudio.model.*;
import com.gpl.rpg.atcontentstudio.ui.tools.*;
import com.gpl.rpg.atcontentstudio.model.gamedata.*;
proj = Workspace.activeWorkspace.projects.get(1);
print("Project: "+proj.getDesc());
obj = proj.getQuest("roots_love");
print("Obj: "+obj.getDesc());
dependencies = GDEVisitor.findDependencies(obj, false);
for (dependency : dependencies) {
print(dependency.getDataType().toString()+"/"+dependency.getClass().getSimpleName()+"/"+dependency.id);