├── .gitignore
├── LICENSE
├── PokEditor.iml
├── README.md
├── WinLaF.jar
├── pom.xml
└── src
└── main
├── java
└── io
│ └── github
│ └── turtleisaac
│ └── pokeditor
│ ├── DataManager.java
│ ├── Main.java
│ ├── framework
│ ├── ArrayModifier.java
│ ├── ArrayProcessor.java
│ ├── BitStream.java
│ ├── BitVector.java
│ ├── CsvReader.java
│ ├── Directory.java
│ ├── InvalidStringException.java
│ ├── JarClassLoader.java
│ ├── SheetException.java
│ ├── SheetExceptionFactory.java
│ └── XmlReader.java
│ ├── gui
│ ├── ConsoleWindow.java
│ ├── ConsoleWindow.jfd
│ ├── EditorComboBox.java
│ ├── PokeditorManager.java
│ ├── editors
│ │ ├── data
│ │ │ ├── DefaultDataEditor.java
│ │ │ ├── DefaultDataEditorPanel.java
│ │ │ ├── DefaultDataEditorPanel.jfd
│ │ │ ├── EditorDataModel.java
│ │ │ └── formats
│ │ │ │ ├── pokemon_sprite
│ │ │ │ ├── PokemonSpriteEditor.java
│ │ │ │ └── PokemonSpriteEditor.jfd
│ │ │ │ ├── scripts
│ │ │ │ ├── ScriptDocument.java
│ │ │ │ ├── ScriptPane.java
│ │ │ │ └── field
│ │ │ │ │ ├── FieldScriptEditor.java
│ │ │ │ │ └── FieldScriptEditor.jfd
│ │ │ │ └── trainer_sprite
│ │ │ │ ├── TrainerSpriteEditor.java
│ │ │ │ └── TrainerSpriteEditor.jfd
│ │ └── general
│ │ │ ├── GeneralEditorPanel.java
│ │ │ ├── GeneralEditorPanel.jfd
│ │ │ └── starters
│ │ │ ├── StarterEditor.java
│ │ │ └── StarterEditor.jfd
│ └── sheets
│ │ ├── DefaultSheetPanel.java
│ │ ├── DefaultSheetPanel.jfd
│ │ ├── FindDialog.java
│ │ ├── FindDialog.jfd
│ │ └── tables
│ │ ├── DefaultTable.java
│ │ ├── FormatModel.java
│ │ ├── FrozenColumnTable.java
│ │ ├── cells
│ │ ├── CellTypes.java
│ │ ├── editors
│ │ │ ├── BitfieldComboBoxEditor.java
│ │ │ ├── CheckBoxEditor.java
│ │ │ ├── ComboBoxCellEditor.java
│ │ │ └── NumberOnlyCellEditor.java
│ │ └── renderers
│ │ │ ├── BitfieldStringCellRenderer.java
│ │ │ ├── CheckBoxRenderer.java
│ │ │ ├── DefaultSheetCellRenderer.java
│ │ │ ├── IndexedStringCellRenderer.java
│ │ │ └── MultiLineTableHeaderRenderer.java
│ │ └── formats
│ │ ├── EvolutionsTable.java
│ │ ├── ItemsTable.java
│ │ ├── LearnsetsTable.java
│ │ ├── MovesTable.java
│ │ ├── PersonalTable.java
│ │ └── TmCompatibilityTable.java
│ ├── gui_old
│ ├── CircleButton.java
│ ├── JCheckboxTree.java
│ ├── JRoundButton.java
│ ├── editors
│ │ ├── encounters
│ │ │ ├── SearchResultsFrame.java
│ │ │ ├── SearchResultsFrame.jfd
│ │ │ ├── johto
│ │ │ │ └── JohtoEncounterPanel.jfd
│ │ │ └── sinnoh
│ │ │ │ └── SinnohEncounterPanel.jfd
│ │ └── trainers
│ │ │ ├── SmogonFrame.java
│ │ │ ├── SmogonFrame.jfd
│ │ │ ├── TrainerPanel.jfd
│ │ │ ├── TrainerPokemonPanel.jfd
│ │ │ ├── classes
│ │ │ ├── ClassPanel.java
│ │ │ └── ClassPanel.jfd
│ │ │ └── text
│ │ │ ├── TrainerTextEntryPanel.java
│ │ │ ├── TrainerTextEntryPanel.jfd
│ │ │ ├── TrainerTextFrame.java
│ │ │ └── TrainerTextFrame.jfd
│ └── tutorial
│ │ ├── TutorialFrame.java
│ │ └── TutorialFrame.jfd
│ └── utilities
│ └── TrainerPersonalityCalculator.java
└── resources
└── pokeditor
├── icons
├── arrowdown.png
├── arrowleft.png
├── arrowright.png
├── arrowup.png
├── background.png
├── black.png
├── black2.png
├── building_editor.png
├── clearflag.png
├── closemsg.png
├── cross.png
├── diamond.png
├── dualslot_encounters.png
├── egg.png
├── error.png
├── event_editor.png
├── folder_warning.png
├── give_badge.png
├── give_pokedex.png
├── give_pokegear.png
├── give_shoes.png
├── giveitem.png
├── givemom.png
├── good_rod_encounters.png
├── health_opponent.png
├── health_you.png
├── heartgold.png
├── icon.png
├── legendary_battle.png
├── map_editor.png
├── map_header.png
├── matrix_editor.png
├── message.png
├── money.png
├── old_rod_encounters.png
├── open_file.png
├── pearl.png
├── platform_opponent.png
├── platform_you.png
├── platinum.png
├── pokeball.png
├── pokéradar_encounters.png
├── radio_encounters.png
├── rock_smash_encounters.png
├── save_rom.png
├── script_editor.png
├── setflag.png
├── shadow_large.png
├── shadow_medium.png
├── shadow_small.png
├── soulsilver.png
├── super_rod_encounters.png
├── svg
│ ├── clipboard-copy.svg
│ ├── copy.svg
│ ├── list-search.svg
│ ├── row-insert-bottom.svg
│ ├── row-remove.svg
│ ├── table-export.svg
│ └── table-import.svg
├── symbol_female.png
├── symbol_male.png
├── takeitem.png
├── takemom.png
├── takemoney.png
├── text_bar.png
├── text_editor.png
├── texture_background.png
├── tick.png
├── tileset_editor.png
├── trainer_battle.png
├── underwater_background.png
├── walking_encounters_dppt.png
├── walking_encounters_hgss.png
├── white.png
├── white2.png
├── wild_battle.png
└── wild_editor.png
├── sheet_panel.properties
├── sheet_strings.properties
├── sheet_strings_fr.properties
└── sheet_strings_zh.properties
/.gitignore:
--------------------------------------------------------------------------------
1 | /src/META-INF/
2 | /button.png
3 | /Platinum.nds
4 | /pokeditor_config
5 | /TestProject.nds
6 | /lib/
7 | /Master Template Projects/
8 | /NewProject/
9 | /out/
10 | /PokEditor/
11 | /Program Files/
12 | /releases/
13 | /roms/
14 | /PokEditor/
15 | /doNotInclude/
16 | /extracted/
17 | /Found/
18 | /Gen 5 Editing Information/
19 | /GoogleSheetsAPI/out/
20 |
--------------------------------------------------------------------------------
/PokEditor.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # PokEditor v3
2 |
3 | **Author: Turtleisaac**
4 |
5 | Multifunctional in-depth editor for Pokémon Gen IV (4) game data.
6 |
7 | Written entirely in Java and is completely OS-agnostic.
8 |
9 | **Java 20 is required.** Newer versions may work, but if older classes have been deprecated or removed in those versions, then it may not work for those higher versions of Java.
10 | * The majority of the backend can be found in my other library, [PokEditor-Core](https://github.com/turtleisaac/PokEditor-Core).
11 | * Also powered by my other libraries, [Nds4j](https://github.com/turtleisaac/Nds4j) and [Nds4j-ToolUI](https://github.com/turtleisaac/Nds4j-ToolUI).
12 | * This tool is still in active development and will receive periodic updates as improvements are made and bugs are found, time permitting.
13 | * Please join [this Discord server](https://discord.gg/zAtqJDW2jC) for help with using PokEditor v3 or for help with any questions relating to Pokémon Gen 4 and 5 hacking.
14 | * Currently can be used in English and has partial French and Chinese support.
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | # Usage
24 |
25 | Builds are available in the [Releases page here on GitHub](https://github.com/turtleisaac/PokEditor/releases). Simply download the most recent release, unzip the zip file, and double click the file contained within with the name **PokEditor.jar**!
26 |
27 | Unlike prior versions of PokEditor, v3 is intended to fully be used within the tool. No more exporting sheets or editing them elsewhere. Additionally, there is very little effort required by the user to get it set up this time around. No more annoying sheets setup process, it should just automatically load everything into the sheets the instant you open a project.
28 |
29 | # List of Spreadsheet-Based Editors
30 |
31 | * Personal Data Editor
32 |
33 | * TM Learnset Editor)
34 |
35 | * Level-Up Learnset Editor
36 |
37 | [//]: # ()
38 | [//]: # (* Encounter Editor (also has a GUI-based editor) (currently incomplete))
39 |
40 | * Evolutions Editor
41 |
42 | [//]: # ()
43 | [//]: # (* Item Editor)
44 |
45 | * Move Editor
46 |
47 | [//]: # ()
48 | [//]: # (* Move Tutor Editor (moves taught and compatibility))
49 |
50 | [//]: # ()
51 | [//]: # (* Baby Form Editor (what hatches from an egg))
52 |
53 | [//]: # ()
54 | [//]: # (* Trainer Editor (also has a GUI-based editor))
55 |
56 | # GUI-Based Editors
57 |
58 | [//]: # ()
59 | [//]: # (* Trainer Editor)
60 |
61 | [//]: # ( * Trainer Text Editor)
62 |
63 | [//]: # ( * Nature & IV Calculator)
64 |
65 | [//]: # ( * Smogon Format Team Import/Export)
66 |
67 | * Pokémon Sprite Editor
68 |
69 | [//]: # ( * Palette Editor)
70 |
71 | [//]: # ( * Sprite XY-Coordinate Placement Editor)
72 |
73 | [//]: # ( * Sprite Shadow Placement Editor)
74 |
75 | [//]: # ( * Sprite Shadow Size Editor)
76 |
77 | [//]: # ( * Send-out Movement/Animation Editor)
78 |
--------------------------------------------------------------------------------
/WinLaF.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/turtleisaac/PokEditor/21584a153bb0de0673cfed7e5b62905053927a73/WinLaF.jar
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | io.github.turtleisaac
8 | PokEditor
9 | 3.0-SNAPSHOT
10 |
11 |
12 | 20
13 | 20
14 | UTF-8
15 |
16 |
17 |
18 |
19 | org.junit.jupiter
20 | junit-jupiter
21 | 5.9.2
22 | test
23 |
24 |
25 | junit
26 | junit
27 | 4.13.2
28 | test
29 |
30 |
31 | org.assertj
32 | assertj-core
33 | 3.24.2
34 | test
35 |
36 |
37 |
38 |
39 | com.formdev
40 | flatlaf
41 | 3.2.1
42 |
43 |
44 |
45 |
46 | com.formdev
47 | flatlaf-intellij-themes
48 | 3.2.1
49 |
50 |
51 |
52 | com.formdev
53 | flatlaf-extras
54 | 3.2.1
55 |
56 |
57 |
58 | com.github.weisj
59 | jsvg
60 | 1.2.0
61 |
62 |
63 |
64 |
65 | com.miglayout
66 | miglayout
67 | 3.7.4
68 |
69 |
70 |
71 |
72 | com.jidesoft
73 | jide-oss
74 | 3.6.18
75 |
76 |
77 |
78 |
79 | org.eclipse.jgit
80 | org.eclipse.jgit
81 | 6.7.0.202309050840-r
82 |
83 |
84 |
85 | com.fasterxml.jackson.dataformat
86 | jackson-dataformat-xml
87 | 2.15.2
88 |
89 |
90 |
91 | com.google.inject
92 | guice
93 | 7.0.0
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | io.github.turtleisaac
107 | Nds4j
108 | 0.1.0
109 |
110 |
111 | io.github.turtleisaac
112 | PokEditor-Core
113 | 1.0-SNAPSHOT
114 |
115 |
116 | io.github.turtleisaac
117 | Nds4j-ToolUI
118 | 1.0-SNAPSHOT
119 |
120 |
121 | io.github.turtleisaac
122 | VariableTracker
123 | 1.0-SNAPSHOT
124 |
125 |
126 |
127 |
128 |
129 |
130 | io.github.turtleisaac
131 | WinLaF
132 | 1.0.0
133 | system
134 | ${project.basedir}/WinLaF.jar
135 |
136 |
137 |
138 |
--------------------------------------------------------------------------------
/src/main/java/io/github/turtleisaac/pokeditor/Main.java:
--------------------------------------------------------------------------------
1 | package io.github.turtleisaac.pokeditor;
2 |
3 | import com.formdev.flatlaf.intellijthemes.*;
4 | import io.github.turtleisaac.nds4j.ui.ProgramType;
5 | import io.github.turtleisaac.nds4j.ui.Tool;
6 | import io.github.turtleisaac.pokeditor.gui.PokeditorManager;
7 | import io.github.turtleisaac.pokeditor.gui.ConsoleWindow;
8 |
9 | import java.io.IOException;
10 | import java.nio.charset.StandardCharsets;
11 |
12 | /**
13 | * @author turtleisaac
14 | */
15 | public class Main
16 | {
17 | private static ConsoleWindow console;
18 | private static final String jokesPath = "/pokeditor/jokes.txt";
19 |
20 | public static void main(String[] args) throws IOException
21 | {
22 | String[] mainMenuJokes = new String(Main.class.getResourceAsStream(jokesPath).readAllBytes(), StandardCharsets.UTF_8).split("\n");
23 |
24 | // Locale.setDefault(Locale.CHINA);
25 | Tool tool = Tool.create();
26 | tool.setType(ProgramType.PROJECT)
27 | .setName("PokEditor")
28 | .setVersion("3.1.1")
29 | // .setFlavorText("Did you know that Jay likes Moemon?")
30 | .setFlavorText(mainMenuJokes[(int) (Math.random()*(mainMenuJokes.length))])
31 | .setAuthor("Developed by Turtleisaac")
32 | .setGitEnabled(true)
33 | .addLookAndFeel(new FlatArcOrangeIJTheme())
34 | .addLookAndFeel(new FlatDarkPurpleIJTheme())
35 | // .addLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel())
36 | .addGame("Pokémon Platinum", "CPU")
37 | .addGame("Pokémon HeartGold","IPK")
38 | .addGame("Pokémon SoulSilver","IPG")
39 | .addPanelManager(() -> new PokeditorManager(tool))
40 | .init();
41 | }
42 | }
--------------------------------------------------------------------------------
/src/main/java/io/github/turtleisaac/pokeditor/framework/ArrayModifier.java:
--------------------------------------------------------------------------------
1 | package io.github.turtleisaac.pokeditor.framework;
2 |
3 | import java.util.Arrays;
4 |
5 | public class ArrayModifier
6 | {
7 | public static Object[][] trim(Object[][] arr, int rows, int cols)
8 | {
9 | arr= Arrays.copyOfRange(arr,rows,arr.length);
10 |
11 | for(int i= 0; i < arr.length; i++)
12 | {
13 | // System.out.println(Arrays.toString(arr[i]));
14 | arr[i]= Arrays.copyOfRange(arr[i], cols, arr[i].length);
15 | // System.out.println(Arrays.toString(arr[i]) + "\n");
16 | }
17 |
18 | return arr;
19 | }
20 |
21 | public static Object[] getColumn(Object[][] arr, int col)
22 | {
23 | Object[] ret= new Object[arr.length];
24 | Arrays.fill(ret, "");
25 | for(int i= 0; i < arr.length; i++)
26 | {
27 | if (col >= arr[i].length)
28 | break;
29 |
30 | ret[i]= arr[i][col];
31 | }
32 |
33 | return ret;
34 | }
35 |
36 | public static String[] accommodateLength(String[] arr, int targetLength)
37 | {
38 | arr= Arrays.copyOf(arr,targetLength);
39 |
40 | for(int i= 0; i < arr.length; i++)
41 | {
42 | if(arr[i] == null)
43 | arr[i]= "" + i;
44 | }
45 |
46 | return arr;
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/main/java/io/github/turtleisaac/pokeditor/framework/ArrayProcessor.java:
--------------------------------------------------------------------------------
1 | package io.github.turtleisaac.pokeditor.framework;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Arrays;
5 | import java.util.List;
6 |
7 | public class ArrayProcessor
8 | {
9 | private List