From 4d5fd7c952a734bbfbce912558d896c222859a37 Mon Sep 17 00:00:00 2001 From: Josh Ashton Date: Tue, 29 Nov 2022 17:50:28 -0700 Subject: [PATCH] Implemented read/write of saved characters, currently a Tester.java file tests the ability to save and read saved characters, and the Application has a rudimentary GUI interface to choose to load a specific save file and see information about that character. --- README.md | 58 +++++++++ src/App.java | 3 +- src/BasicNavPanel.java | 17 ++- src/CharacterSheet.java | 135 ++++++++++--------- src/CharacterStats.java | 4 +- src/Charisma.java | 4 +- src/Constitution.java | 4 +- src/CustomTheme.java | 12 -- src/Dexterity.java | 4 +- src/Elf.java | 30 +++-- src/Fighter.java | 13 +- src/FileManager.java | 172 ++++++++++++++++--------- src/GUImanager.java | 92 +++++++++++-- src/ImageInfoPanel.java | 42 ++++++ src/Intelligence.java | 4 +- src/LoadCharacterPanel.java | 64 ++++++++- src/PreviewCharacterSheet.java | 2 - src/Strength.java | 4 +- src/Wisdom.java | 4 +- src/target/App.class | Bin 400 -> 323 bytes src/target/BasicNavPanel.class | Bin 2138 -> 2195 bytes src/target/CharacterSheet.class | Bin 2053 -> 2384 bytes src/target/CharacterStats.class | Bin 1822 -> 1850 bytes src/target/Charisma.class | Bin 1286 -> 1314 bytes src/target/Constitution.class | Bin 1285 -> 1313 bytes src/target/CustomTheme.class | Bin 346 -> 0 bytes src/target/Dexterity.class | Bin 1250 -> 1278 bytes src/target/Elf.class | Bin 1182 -> 1210 bytes src/target/Fighter.class | Bin 1138 -> 1298 bytes src/target/FileManager.class | Bin 2878 -> 4363 bytes src/target/GUImanager.class | Bin 17175 -> 19274 bytes src/target/ImageInfoPanel.class | Bin 3296 -> 3296 bytes src/target/Intelligence.class | Bin 1256 -> 1284 bytes src/target/LoadCharacterPanel.class | Bin 210 -> 1792 bytes src/target/PreviewCharacterSheet.class | Bin 216 -> 0 bytes src/target/SanSalvi.ttf | Bin 41296 -> 0 bytes src/target/Strength.class | Bin 1448 -> 1476 bytes src/target/Wisdom.class | Bin 1244 -> 1272 bytes 38 files changed, 498 insertions(+), 170 deletions(-) delete mode 100644 src/CustomTheme.java delete mode 100644 src/PreviewCharacterSheet.java delete mode 100644 src/target/CustomTheme.class delete mode 100644 src/target/PreviewCharacterSheet.class delete mode 100644 src/target/SanSalvi.ttf diff --git a/README.md b/README.md index 471a5b2..30d18f1 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,60 @@ # Application CSIS 1410 - Group Project + +CURRENT TODO ITEMS: + +**************** CONTENT **************** + + - All PHB classes should be included. + +**************** GUI ******************** + + - Finish GUI panels + + PANELS: + - Race + Upload custom profile picture button. + - Description (needs positioning) + - Spells & Equipment + - Preview + - Load Character/View character + - Save as PDF / Print + + DESCRIPTIONS: + + - Class action scene pictures. + - Ability Scores description text. + - Class descriptions. + - Race descriptions. + +*************** FILES ****************** + +NOTE: user.dir = /home/joshuaashton/Development/misc/dndApp/src + user.home = /home/joshuaashton + +NOTE: user.dir is changed to exe directory by application launch4j. This creates an exe file from .jar. + see Inno Setup Compiler to package .exe and the JRE into a singular installer. + + - Upload custom profile picture. + + - Character sheet from selections. + + - Load existing characters to edit. + + - Save new characters. + + - File directory based upon OS used. + + - Export to PDF. + + - Print + +************** FINAL TOUCHES ********** + + - Generate a random character. + + - Character levels. + + - Spells. + + - Dice roller. diff --git a/src/App.java b/src/App.java index 2f5ae8d..e8df5c2 100644 --- a/src/App.java +++ b/src/App.java @@ -2,9 +2,8 @@ public class App { public static void main(String[] args) { - FileManager data = new FileManager(); + GUImanager gui = new GUImanager(); - GUImanager gui = new GUImanager(data.isReturninguser()); gui.setVisible(true); } diff --git a/src/BasicNavPanel.java b/src/BasicNavPanel.java index f0b2414..a3f8db0 100644 --- a/src/BasicNavPanel.java +++ b/src/BasicNavPanel.java @@ -13,7 +13,16 @@ public class BasicNavPanel extends JPanel implements AppTheme { super(new GridLayout(1, 2, 30, 0)); this.backButton = backButton; - this.continueButton = continueButton; + + if(continueButton == null) { + + this.continueButton = null; + + } else { + + this.continueButton = continueButton; + + } this.continueRequirement = continueRequirement; createNavPanel(); @@ -56,7 +65,11 @@ public class BasicNavPanel extends JPanel implements AppTheme { if (continueRequirement == 0) { - add(continueButton); + if(continueButton != null) { + + add(continueButton); + + } } else { diff --git a/src/CharacterSheet.java b/src/CharacterSheet.java index 8690f9b..6d600a7 100644 --- a/src/CharacterSheet.java +++ b/src/CharacterSheet.java @@ -6,97 +6,113 @@ public class CharacterSheet implements Serializable { private int heightFeet; private int heightInch; private int weight; - private String eye; - private String hair; + private String eyeColor; + private String hairColor; private Race race; - + private ClassTemplate chClass; + private String[] spells; + private String[] equipment; + private String alignment; + private String background; private CharacterStats stats; - /** - * @param name - * @param age - * @param heightFeet - * @param heightInch - * @param weight - * @param eye - * @param hair + /* + * TODO: Need to add the following variables: + * + * - CharacterClass x1 var + * - ChosenSpells xN vars + * - Equipment xN vars + * - Description x3 vars + * + * TOTAL: Minimum 12, + N spells and N equipment + * */ - public CharacterSheet(String name, int age, - int heightFeet, int heightInch, - int weight, String eye, String hair, - Race race, CharacterStats stats) { + + public CharacterSheet( + + String name, + int age, + int heightFeet, + int heightInch, + int weight, + String eyeColor, + String hairColor, + Race race, + ClassTemplate chClass, + String alignment, + String background, + CharacterStats stats + + ) { + this.name = name; this.age = age; this.heightFeet = heightFeet; this.heightInch = heightInch; this.weight = weight; - this.eye = eye; - this.hair = hair; + this.eyeColor = eyeColor; + this.hairColor = hairColor; + this.race = race; + this.chClass = chClass; + this.alignment = alignment; + this.background = background; this.stats = stats; - } - - /** - * Default constructor - */ - public CharacterSheet() { - this.name = "null"; - this.age = 0; - this.heightFeet = 0; - this.heightInch = 0; - this.weight = 0; - this.eye = "null"; - this.hair = "null"; } - /** - * @return the name - */ public String getName() { + return name; + } - /** - * @return the age - */ public int getAge() { + return age; + } - /** - * @return the heightFeet - */ public int getHeightFeet() { + return heightFeet; + } - /** - * @return the heightInch - */ public int getHeightInch() { + return heightInch; + } - /** - * @return the weigth - */ public int getWeight() { + return weight; + } - /** - * @return the eye - */ - public String getEye() { - return eye; + public String getEyeColor() { + + return eyeColor; + } - /** - * @return the hair - */ - public String getHair() { - return hair; + public String getHairColor() { + + return hairColor; + + } + + public Race getRace() { + + return race; + + } + + public ClassTemplate getCharacterClass() { + + return chClass; + } public CharacterStats getStats() { @@ -107,10 +123,11 @@ public class CharacterSheet implements Serializable { @Override public String toString() { - return "name: " + name + " | age: " + age + " | height: " - + heightFeet + "\'" + heightInch + "\" | weight: " - + weight + " | eye: " + eye + " | hair: " + hair - + " | race: " + race.toString() + " | stats: " + stats.toString(); + + String output = "Character name: " + name + "\nAge: " + age + "\nHeight: " + heightFeet + "\'" + heightInch + "\"" + "\nWeight: " + weight + "\nEye Color: " + eyeColor + "\nHair Color: " + hairColor + "\nRace: " + race.toString() + "\nClass: " + chClass.toString() + "\nStats: " + stats.toString(); + + return output; + } } diff --git a/src/CharacterStats.java b/src/CharacterStats.java index 4c12ef7..7237cae 100644 --- a/src/CharacterStats.java +++ b/src/CharacterStats.java @@ -1,4 +1,6 @@ -public class CharacterStats { +import java.io.Serializable; + +public class CharacterStats implements Serializable { private Stats[] stats; diff --git a/src/Charisma.java b/src/Charisma.java index c9dde3a..a749f21 100644 --- a/src/Charisma.java +++ b/src/Charisma.java @@ -1,4 +1,6 @@ -public class Charisma extends Stats { +import java.io.Serializable; + +public class Charisma extends Stats implements Serializable { private int abilityScore; private int abilityScoreModifier; diff --git a/src/Constitution.java b/src/Constitution.java index 36db985..6eec31c 100644 --- a/src/Constitution.java +++ b/src/Constitution.java @@ -1,4 +1,6 @@ -public class Constitution extends Stats { +import java.io.Serializable; + +public class Constitution extends Stats implements Serializable { private int abilityScore; private int abilityScoreModifier; diff --git a/src/CustomTheme.java b/src/CustomTheme.java deleted file mode 100644 index 208d23a..0000000 --- a/src/CustomTheme.java +++ /dev/null @@ -1,12 +0,0 @@ -import java.awt.*; - -public interface CustomTheme { - - public Color background = null; - public Color foreground = null; - - Color getBackground(); - - Color getForeground(); - -} diff --git a/src/Dexterity.java b/src/Dexterity.java index 404e452..81973d9 100644 --- a/src/Dexterity.java +++ b/src/Dexterity.java @@ -1,4 +1,6 @@ -public class Dexterity extends Stats { +import java.io.Serializable; + +public class Dexterity extends Stats implements Serializable { private int abilityScore; private int abilityScoreModifier; diff --git a/src/Elf.java b/src/Elf.java index 1373504..88fb995 100644 --- a/src/Elf.java +++ b/src/Elf.java @@ -1,4 +1,6 @@ -public class Elf implements Race { +import java.io.Serializable; + +public class Elf implements Race, Serializable { private final int speed = 30; private final int maxAge = 750; private String[] traits; @@ -14,57 +16,65 @@ public class Elf implements Race { @Override public String getRace() { - // TODO Auto-generated method stub + return this.getClass().getSimpleName(); + } @Override public int maxAge() { - // TODO Auto-generated method stub + return maxAge; + } @Override public int getSpeed() { - // TODO Auto-generated method stub + return speed; + } @Override public String[] getTraits() { - // TODO Auto-generated method stub + return traits; } @Override public String[] getSkills() { - // TODO Auto-generated method stub + return skills; + } @Override public String[] getLanguages() { - // TODO Auto-generated method stub + return languages; + } @Override public String[] getProficiencies() { - // TODO Auto-generated method stub + return proficiencies; + } @Override public int[] getASI() { - // TODO Auto-generated method stub + return new int[]{1, 1}; + } @Override public String toString() { - // TODO Auto-generated method stub + return this.getClass().getSimpleName(); + } } diff --git a/src/Fighter.java b/src/Fighter.java index f8c7ce5..0b2b7c9 100644 --- a/src/Fighter.java +++ b/src/Fighter.java @@ -1,4 +1,6 @@ -public class Fighter implements ClassTemplate { +import java.io.Serializable; + +public class Fighter implements ClassTemplate, Serializable { private int HP; @@ -7,7 +9,7 @@ public class Fighter implements ClassTemplate { // TODO: This should be the type of die. private int hitDie; - public Fighter(Stats[] stats, int level) { + public Fighter() { } @@ -85,4 +87,11 @@ public class Fighter implements ClassTemplate { return null; } + @Override + public String toString() { + + return this.getClass().getSimpleName(); + + } + } diff --git a/src/FileManager.java b/src/FileManager.java index 75be41b..ee67ff5 100644 --- a/src/FileManager.java +++ b/src/FileManager.java @@ -1,115 +1,163 @@ import java.awt.*; import java.io.*; +import java.util.*; public class FileManager { - private File[] savedCharacters; + private String filepath; + private boolean returningUser; + + private ArrayList saveFiles; + private ArrayList saves; public FileManager() { - findSavedCharacters(); + filepath = System.getProperty("user.dir"); - loadFonts(); + saveFiles = new ArrayList<>(); - } + setSaveFiles(); - private void loadFonts() { + loadFont(); - try { - GraphicsEnvironment ge = - GraphicsEnvironment.getLocalGraphicsEnvironment(); - ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("SanSalvi.ttf"))); - } catch (IOException | FontFormatException e) { - //Handle exception - System.out.println("Error finding font."); - } + } - } + public String getOSFilepath() { - public boolean isReturninguser() { + return filepath; - if (savedCharacters == null) { + } - return false; + public boolean isReturningUser() { - } + return returningUser; - return savedCharacters.length > 0; + } - } + public CharacterSheet readSavedCharacter(int index) { - public CharacterSheet readCharacter(int index) { + return readCharacter(saveFiles.get(index)); - CharacterSheet sheet = null; + } - try { + public void saveCharacter(CharacterSheet completedCharacter) { - FileInputStream fileIn = new FileInputStream("/dndBuilder/" + savedCharacters[index].getPath() + ".dnd"); - ObjectInputStream in = new ObjectInputStream(fileIn); - sheet = (CharacterSheet) in.readObject(); - in.close(); - fileIn.close(); + writeCharacter(completedCharacter); - } catch (IOException i) { + } - i.printStackTrace(); + public ArrayList getSaves() { - } catch (ClassNotFoundException c) { + return saves; - System.out.println("Saved characters not found"); - c.printStackTrace(); + } - } + // TODO: Need to implement. + public void deleteCharacter() { - return sheet; + } - } + private void loadFont() { - public void saveCharacter(CharacterSheet completedCharacter) { + try { - try { + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); - FileOutputStream fileOut = - new FileOutputStream("/dndBuilder/" + completedCharacter.getName().hashCode() + ".dnd"); - ObjectOutputStream out = new ObjectOutputStream(fileOut); - out.writeObject(completedCharacter); - out.close(); - fileOut.close(); + ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File(filepath + "/.resources/SanSalvi.ttf"))); + + } catch(IOException | FontFormatException e) { - } catch (IOException i) { + System.out.println("Filepath of font not found: " + filepath + "/.resources/SanSalvi.ttf does not exist."); - i.printStackTrace(); + } - } + } - findSavedCharacters(); + private void setSaveFiles() { - } + File[] tmp = new File(filepath + "/.savedSheets/").listFiles(); - public void deleteCharacter(int index) { + if(tmp != null) { - File[] tmp = new File[savedCharacters.length - 1]; + for(int i = 0; i < tmp.length; i++) { - for (int i = 0; i < savedCharacters.length; i++) { + saveFiles.add(tmp[i]); - if (i != index) { + } - tmp[i] = savedCharacters[i]; + returningUser = true; - } + } else { - } + returningUser = false; - savedCharacters = tmp; + } - findSavedCharacters(); + saves = new ArrayList<>(); - } + for(File file : saveFiles) { - private void findSavedCharacters() { + saves.add(readCharacter(file)); - savedCharacters = new File("/dndBuilder").listFiles(); + } - } + } + + private CharacterSheet readCharacter(File file) { + + CharacterSheet sheet = null; + + System.out.println("filepath: " + file.getPath()); + + try { + + FileInputStream fileIn = new FileInputStream(file.getPath()); + + ObjectInputStream in = new ObjectInputStream(fileIn); + + sheet = (CharacterSheet) in.readObject(); + + in.close(); + fileIn.close(); + + } catch (IOException | ClassNotFoundException e) { + + System.out.println("No saved characters were found"); + + } + + return sheet; + + } + + private void writeCharacter(CharacterSheet sheet) { + + try( + + FileOutputStream fileOut = new FileOutputStream(filepath + "/.savedSheets/" + sheet.getName() + ".dnd"); + + ObjectOutputStream objOut = new ObjectOutputStream(fileOut); + + ) { + + System.out.println("Inside saving char method."); + + objOut.writeObject(sheet); + + setSaveFiles(); + +System.out.println("Object written to file."); + + } catch (IOException e) { + + System.out.println("ERROR: "); + + e.printStackTrace(); + + System.out.println("\nERROR: Unable to write character sheet object to \n" + filepath + "/.savedSheets"); + + } + + } } diff --git a/src/GUImanager.java b/src/GUImanager.java index 8455776..fc03a34 100644 --- a/src/GUImanager.java +++ b/src/GUImanager.java @@ -1,8 +1,13 @@ import javax.swing.*; import java.awt.*; +import java.util.*; public class GUImanager extends JFrame { + private FileManager fileManager; + private ArrayList saves; + private ArrayList savesButtons; + private static JPanel[] panels; private int lastPanel; private int currentPanel; @@ -25,24 +30,23 @@ public class GUImanager extends JFrame { private String[] backgroundDescriptions; private int[] selectedStats; - - public GUImanager(boolean returningUser) { + public GUImanager() { super("D&D Character Builder"); + fileManager = new FileManager(); frameSetup(); setupPanelInfo(); this.panels = new JPanel[]{ + new MainMenuPanel(createNewCharacterButton(), createRandomCharacterButton(), createLoadButton()), new BasicPanel(createNavPanel(), raceOptions, raceDescriptions, "Step 1: Choose Your Race"), // To choose Race. new BasicPanel(createNavPanel(), classOptions, classDescriptions, "Step 2: Choose Your Class"), // To choose Class. new ChooseAbilityScoresPanel(createNavPanel(1), statOptions, statDescriptions, selectedStats, "Step 3: Choose Your Ability Scores"), - new DescriptionPanel(createNavPanel(), characteristics, alignmentOptions, alignmentDescriptions, backgroundOptions, backgroundDescriptions, "Step 4: Describe your character") + new DescriptionPanel(createNavPanel(), characteristics, alignmentOptions, alignmentDescriptions, backgroundOptions, backgroundDescriptions, "Step 4: Describe your character"), + new LoadCharacterPanel(createBackPanel(), loadableCharacters()), + new ViewCharacterPanel(createBackPanel(), new CharacterSheet("Josh", 21, 5, 8, 180, "Brown", "Dark Brown", new Elf(), new Fighter(), "Neutral", "Nomad", new CharacterStats(9, 15, 12, 10, 13, 10))) }; -/* - this.currentPanel = 0; - this.lastPanel = currentPanel - 1; - this.nextPanel = currentPanel + 1;*/ - if (returningUser) { + if (fileManager.isReturningUser()) { this.currentPanel = 0; @@ -52,6 +56,9 @@ public class GUImanager extends JFrame { } + this.lastPanel = currentPanel - 1; + this.nextPanel = currentPanel + 1; + add(panels[currentPanel]); } @@ -62,7 +69,7 @@ public class GUImanager extends JFrame { setLayout(new BorderLayout()); setPreferredSize(new Dimension(750, 550)); setSize(getPreferredSize()); -// setResizable(false); + setResizable(false); setLocationRelativeTo(null); try { @@ -260,6 +267,12 @@ public class GUImanager extends JFrame { } + private BasicNavPanel createBackPanel() { + + return new BasicNavPanel(createBackButton(), null, 0); + + } + private DefaultButton createBackButton() { DefaultButton button = new DefaultButton("Back"); @@ -305,6 +318,19 @@ public class GUImanager extends JFrame { DefaultButton button = createContinueButton(); button.setText("Create New Character"); + button.addActionListener( + + e -> { + + lastPanel = currentPanel; + currentPanel = 1; + nextPanel = 2; + clearAndReset(); + + } + + ); + return button; } @@ -361,8 +387,7 @@ public class GUImanager extends JFrame { e -> { lastPanel = currentPanel; - currentPanel = 3; - nextPanel = currentPanel + 1; + currentPanel = 5; clearAndReset(); } @@ -373,6 +398,50 @@ public class GUImanager extends JFrame { } + private ArrayList loadableCharacters() { + + System.out.println("Loading characters..."); + + saves = fileManager.getSaves(); + + savesButtons = new ArrayList<>(); + + for(int i = 0; i < saves.size(); i++) { + + savesButtons.add(createLoadNCharacterButton(i)); + + } + + for(int i = 0; i < saves.size(); i++) { + + System.out.println(saves.get(i).toString()); + + } + + return savesButtons; + + } + + private DefaultButton createLoadNCharacterButton(int index) { + + DefaultButton button = new DefaultButton(saves.get(index).getName()); + button.addActionListener( + + e -> { + + lastPanel = currentPanel; + panels[5] = new ViewCharacterPanel(createBackPanel(), saves.get(index)); + currentPanel = 5; + clearAndReset(); + + } + + ); + + return button; + + } + // TODO: Need to implement random character creation. private void createRandomCharacter() { @@ -392,4 +461,5 @@ public class GUImanager extends JFrame { } + } diff --git a/src/ImageInfoPanel.java b/src/ImageInfoPanel.java index fb301ad..283911c 100644 --- a/src/ImageInfoPanel.java +++ b/src/ImageInfoPanel.java @@ -11,6 +11,23 @@ public class ImageInfoPanel extends InfoPanel implements AppTheme { private JLabel[][] portraits; private int lastIndex; + //private JLabel[] savesPortraits; + + //private int numSaveCharacters; + +// TODO: Need to implement +/* + public ImageInfoPanel(int panelIndex, int numSaveCharacters) { + + super(panelIndex); + + this.numSaveCharacters = numSaveCharacters; + this.characterName = characterName; + + createSavesPortraits(); + + } +*/ public ImageInfoPanel(String[] categoryHolder, String[] holderDescriptions, Rectangle[] bounds, int panelIndex) { super(categoryHolder, holderDescriptions, bounds, panelIndex); @@ -43,6 +60,31 @@ public class ImageInfoPanel extends InfoPanel implements AppTheme { } + // TODO: Need to create a separate class/refactor ImageInfoPanel to be multi-purpose. +/* + private void createSavesPortraits() { + + File imagesDir; + + imagesDir = new File("Img/.savesPortraits").listFiles(); + + savesPortraits = new JLabel[imagesDir.length); + + int index = 0; + + for(File file : imagesDir) { + + savesPortraits[index] = image(file); + savesPortraits[index].setOpaque(true); + savesPortraits[index].setBackground(lightBrown); + savesPortraits[index].setBounds(bounds[3]); + + index++; + + } + + } +*/ private void createPortraits() { String category = ""; diff --git a/src/Intelligence.java b/src/Intelligence.java index 2fb6560..f955dea 100644 --- a/src/Intelligence.java +++ b/src/Intelligence.java @@ -1,4 +1,6 @@ -public class Intelligence extends Stats { +import java.io.Serializable; + +public class Intelligence extends Stats implements Serializable { private int abilityScore; private int abilityScoreModifier; diff --git a/src/LoadCharacterPanel.java b/src/LoadCharacterPanel.java index 22ff42d..bdcf3bd 100644 --- a/src/LoadCharacterPanel.java +++ b/src/LoadCharacterPanel.java @@ -1,2 +1,64 @@ -public class LoadCharacterPanel { +import javax.swing.*; +import java.awt.*; +import java.util.*; + +public class LoadCharacterPanel extends JPanel implements AppTheme { + + private ArrayList savedCharacters; + + public LoadCharacterPanel(JPanel nav, ArrayList savedCharacters) { + + super(); + panelSetup(); + + this.savedCharacters = savedCharacters; + + createMasterPanel(); + + add(nav, BorderLayout.SOUTH); + + } + + private void panelSetup() { + + setBackground(lightBrown); + setLayout(new BorderLayout(0, 0)); + + } + + private void createMasterPanel() { + + JLabel title = new JLabel("Load a Character"); + title.setHorizontalAlignment(SwingConstants.CENTER); + title.setFont(headerFont); + title.setForeground(darkestBrown); + + JPanel panel = new JPanel(); + panel.setOpaque(false); + panel.setLayout(null); + //panel.add(buttonPanel()); + // TODO: Need to implement. + //panel.add(portraitPanel()); + + add(buttonPanel(), BorderLayout.NORTH); + + } + + private JPanel buttonPanel() { + + JPanel panel = new JPanel(new GridLayout(savedCharacters.size(), 1, 0, 0)); + panel.setOpaque(false); + + panel.setBackground(lightBrown); + + for(int i = 0; i < savedCharacters.size(); i++) { + + panel.add(savedCharacters.get(i)); + + } + + return panel; + + } + } diff --git a/src/PreviewCharacterSheet.java b/src/PreviewCharacterSheet.java deleted file mode 100644 index 3340459..0000000 --- a/src/PreviewCharacterSheet.java +++ /dev/null @@ -1,2 +0,0 @@ -public class PreviewCharacterSheet { -} diff --git a/src/Strength.java b/src/Strength.java index 5845f20..bdddabe 100644 --- a/src/Strength.java +++ b/src/Strength.java @@ -1,4 +1,6 @@ -public class Strength extends Stats { +import java.io.Serializable; + +public class Strength extends Stats implements Serializable { private int abilityScore; private int abilityScoreModifier; diff --git a/src/Wisdom.java b/src/Wisdom.java index 73532f2..1c818fa 100644 --- a/src/Wisdom.java +++ b/src/Wisdom.java @@ -1,4 +1,6 @@ -public class Wisdom extends Stats { +import java.io.Serializable; + +public class Wisdom extends Stats implements Serializable { private int abilityScore; private int abilityScoreModifier; diff --git a/src/target/App.class b/src/target/App.class index b1059fe79d8f39b5300379642f1140d6db5a4b3d..6af5a2072339757575944519d7cd1e8d7676112c 100644 GIT binary patch delta 194 zcmYLDISRs16r7jEm~RqyJ9`%p1l!ai*cvchgdhR6Fjk(z+{4DkfP#&khZ5&kHnT8q zhIcXFhWdOTF90EWg_=#(e6`pohh&=`6&#ovY92iJ0+pwyD9f|WE)`gVco;dT7uWb4 zz~BOi0vi=#gRV~&vOOvxHwrkjqr1TdM}sPY@1 KO+km=K=%h_Cm1FG delta 289 zcmYL^PfG$(6vcmU{xtb!$};<-WoxyTZ3`kO1l@Z~{$O*AMdb=T;@ h#fqe0uXh=&IM~cr2*eq(Ew@$$Ys6Y&&P4QR`~$P3D=z>5 diff --git a/src/target/BasicNavPanel.class b/src/target/BasicNavPanel.class index 585ce63118a72fdbc4649a667fff85f6d35f09c2..eb09d9fc3478b4aa7bb91a46c53cf03333441ee3 100644 GIT binary patch delta 329 zcmW-cyGjE=6o$WD$DNJ3=3=6RXvCmmc0)EQ1hFtdB$e?(5D~9Y5F||s(MGhh7Um(e zRARJ9ulNc+iJcyV!#Tru{+a)u@0f`{Cso92TsF^I^=8|6>Y{V6I@aAS8U>X69@d`f zk7fJbkbKhMef)fNYCL)A0|eW6mimwFvS?NWC$21 zB+H>FlGwkpP#RBDma;%OSR8R|9-L{Nlk*8p({qZ^IR?nfqk*tfVLwhW5(+B`TQH$6 zPL?J1l2|WGjEvY=?2E~le8-k~ZEkenj{2`8KB$=|U9Xn$WU(TGipZV8g delta 276 zcmWNL%Syvg5Qe|RV@{RY#A+9Ric`CWVt=b{xn(ER`9 sE98Z&%4AJ^>&&x3gH4)jbHom9cIECKH|%rA0Z$x~%7(&i+WTDXA8w;7DgXcg diff --git a/src/target/CharacterSheet.class b/src/target/CharacterSheet.class index d0ca88e02cde1ad6833c79e4fa72ff4c53a30287..c1dda94eebc525004cb02b89eb4b4d66666baaf4 100644 GIT binary patch literal 2384 zcmb_dU31$+6g`^{D{++Xgy7JWv?Mf9Ac3YWZ5#@%X^4xPLY*ei@=?WJY&D8xWTg;Z z7-krL0>h8s0cKE{=>tE2AH{HXWo$<_yntucclYkm-Fx>Q9sTj=v)=){iEODby>=jRad`m;u0=1`OuH=NnmPex%2kYcmwMOuAaJb6=i~L z+%S>FrohaReaI{DN_M#KgjLRXw5QJgZmBb5p1)4-|K;gYg8`CgN)yBJ*NQT5c#U7% z2d-*Gy(V3knNB|J%z$l_UmQC%b>RZv|Cd^H!xNqDJg|!=(Yxh6vMA@5nfhqK@#N0& z(SZzh<6?}840rTfpI#UX*O6q&h67Y<|D)vV@^(}?dB`2SxFuj{o|k{w;a`&$=0@d!&g=N z$mN^9AJ)UbuHBJg)i2jaQ`k@ALwsc5fnwuBfrXX?INlTgP_D%cj|sX()$oH8fgju3 z*#O2tw{5TN%KAdV_YaS2*)C1#I3a#;_oODfz}uM>i(9sxrH!+5w(AxhzVHM1M4;R( ze_kou#=JMx8Y@DBesSRJs6 zKFaSP&mO@=eqq-6-MGYW!euPt3RZBHJJ%?x8@!DybJ|26*BRj!5pj-lw1ScPtzTjM z+zg-6PF2Vj-sQh4ryV-{Qv$k8&~{hocoMopXud0SDhb^s^mbS1OcMHl(D%BQHJdE! z5ut^y(77b^b3*SxWt_Z$`6SdO=q}#x0$oT#1A;!ly)MwzB=jqS`0Z>!??Zh~forN; z9K#&r98(-K9J3sA9P>|ck!B$_t50#|8F_%hN-KOE=o^ybTlAvHpgq{decAyYw#V@? OKIJOS*=Mj(Lgp`zVGB3_ delta 982 zcmZuwO-~b16g`iAQc9ItZ3-3(7SSotA|i-@Xhp$~id14uOw4ODX-CTtXT}eV2`d+_ z40(URAK(HL(S!vnSGaNSuh6ZD@eHj|n{Lj#_rCMaz4uJ!YxLE@(B7||T>vv!*$nN) zJo>ucjv#u&IEJu*wa=$QK>pC4vK!(pZ!T0bNxD*dt3F08#QVi*|Av^2rrtZZslvz zwskvz+v=@P6GipKH|7~fyAuAzcn1W0m>^Elhv#%G#B)-;_D^iQXC!crID!sh54<>v zb|eu&FAmZA1X9F444@ww9LFfq)Ed~=^fxri)D(Q3(LOy5|V&L`Lp(AYV{$%b$M!-#R71hSkV$9|){9b<TT+u-So(jlGP#$KCpLSKZkDZ*#Q&v1U84D}T{-nF*k90STKXeKc4#^N nK8(Oaiis2+^P8B=E;Db#Jg)EzQowcVCT=kcF1dF8&Z4p#NEJfWEU-;@vt5s`#KZsbcTBrz$xN+g$P4@l* z7mBWmxN;@{6vF;=^OWP9YcHY&HbED~ju0p+je0HK^ zMgilSCVqVYx)w zB`!R}SAR32B;x2rCwm!WCBexNMukyP@2CQjmoET%s5#`Rl8Z9Rs;BP>zI!IkXg_y3 z%u*#9=Ri49CmQovga7FixjD2;+9`Uiu)NZ6PmJ>?r6C0jxZP`SrYyT1v;|1hiYyJu rBf&U?d48ZN$`?F3M#LxUDi&B%P{bmmG<1n;4IA7U%r>!&U4(xC+DbhI delta 465 zcmYk2OG^S#7>3_-=9a@W8@phl&cYys77|35g=K1%cCqXp6y(a#NZJKKKOl%{U4NiO zQ7ad%TJ;P1EkV(HW}^)Aez%90^L<_S(Y3$+x*q`MaQtd#<=crI67GhLP1G!GIhet= zf2)0ZI|7!-c*48(1e|iK)ws-`pLRNpj)i@JasOVA+sR71-MqT6aOmIZ=}|yHVh}F< z2bdc$sX6~!kH;3+bD>cU=&;}*6cCF65jM{H2#17=8X^Ia4~PdNbJO#Pl89jf3C@;K zPz0UF7$u|Bo~Z(gS1$mP)FMjM9IF_k>KdtcgkG5RqbXKJEK?PlprNv~i27ACG~Dx? zCQ?RNfqv7BM%2U(;4F8WXMY9hVESYh>uNf}-GMx>P~d(gOfpVkl^=Ky`3u9stoUJH aLxnwwD%Kd)E!X+ivCGP4wub{8A@UE>#5NQF diff --git a/src/target/Charisma.class b/src/target/Charisma.class index ac85426b7db41b5ff6623768fe185dc592eb374e..40ada2947e21f1e3511704461fb2865c82cfb732 100644 GIT binary patch delta 443 zcmZutO)mpc6g}_F)U>ZPF++T7&@xQRpz52ApCA@CVkAwBG$AAwHa22m>HPz13r*Nq zSh4Y=#Cg+&Xk;??+&lNoIq$qX^{CX>_uD&wZEUsFp%`{h66iaPui_{SugMI2m8dAAIg`H34SZM15(O&W(f%i?zZCRd_^!Fg>G@3b->; t`S5@l?4wsWEspIVinjyQn7&S0g}tQ295GAAJl|!ka8m46v5rj){Q#&tE3*Iq delta 389 zcmZvXJx&8L6olv5PBxe*zyjeffrwpx5`LEe0VFEg2#E{OBZ{Qq0u&T9DSQD$O#xCw zK|w`D!x6X%V(b)15wdp1>-YK1^P|19_VefM9l$A0UhJi~Te&Z7S!`n`!fp{YWNu!4 zNYj0*Gjk|daTj{grtMDW`lcJ<$ertK2~b?4D6)~lWbg=r9G0nxd(de+Wi5uG=BWjY zaK*gCmYDGrD^i!R)VJ1Id}sTbisOvdNN@7n N!+zid2Wa6KbH6U`Bg6mz diff --git a/src/target/Constitution.class b/src/target/Constitution.class index d460819fec5b578252454e55c84ad2a87a82b2de..45bc14cca9a9d7cc3c3511ac7d0826298d77f3c4 100644 GIT binary patch delta 444 zcmZutyH3ME5S+CgY%akf2Jt2W5)yEL03p1g;S-=q7lTq5MFORuprJstH1`Gc6hwlC zf+`gs1`7n|n}CN_~F4e*iebVMo30E&)OZ-r#mP_JSzh4p3$K8fj(r7A01R9vN$Vx3JAgvD?8O4lwxx9P2Ej delta 369 zcmZvWy-EW?6ot>-nPlTA30X9{n25L=W8&``H7Z!yMzHk}#3D8+Ei7!)+y@YQ3k9*T zu(Go75quQ!%%%{640F!R+;8r=5AM#n&!4w<04F$pb{C>IGAeI6Y+*aZ&J323X&ih= zSHFW(dmw1)xmj{)e=xWjUWYi;Gm{DQ*2IMs2ok+FX+LGd2$ou;mN3N?VVd7PBvL2TF-NQp1=7#6D>SVr1`;H zV^BvnY524<47JU{JE+nHYx!)6e%X4@6Al42qj$-+c@D^~(@Uf`xOcIabAo;JaD@05 DqC+Ht diff --git a/src/target/CustomTheme.class b/src/target/CustomTheme.class deleted file mode 100644 index 345bea40ae222c3a1fa138704c4374cd7ff7147b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmZ8cOHRWu6r7g?@@Y!b0*f91sojtR@L3S4tEyd4v3F7vQj%CQ4x9^h*98aQP>5$L zp{kaiXPz`~H1qwl`vP!>%McD+A6|?ToDzCj_hwYHdXbGJM7bzlORc(gO-SY&@h(#F zVbV<1O5fPiAVz5KqGzS$Ug@L9;y-OI+A>|{8(A1azm(?Tz;85}9y{(uvwtf>a9h+> zTbX-;JDENayiBb**im+1Ms$ tbUi|hKEQZp5dj8BKo~N=Vze)$Er`eeOKn4V{65g6x5(DHR%AEmNz$8~JJ^jmK^q+$VD=ZOo-4`# delta 358 zcmZvWO-=$q5QSe&4?i;+3={c_kf;L)BPt^(Lc+>(=morji3f05$Iyi)gasxhCaye& zhj59!ZWbiQbm~>Tt}idO48DW#Yq@v_Fva9G9E;w_W8oykDb8}}Z(|>+{>Y~c^v%1L zOa1i{xzfa>0=+f0%pnA^-kat@lOYj&YL=Quz!zbQ`xYvW`Y`1OOJ(VR9cp>Kp=;3D z-%K(?@tK2QgO=#p|Dbd1{zdnQ)?Hf65bJEJiK;Iyv$P4dmmjT3z4POS-4tM`U0$A` p$S&x(Yh!)#>my5q@Te*KfNYnuNA{RKPrAoC$Ix+t3yd&EZ3RPdBcA{O diff --git a/src/target/Elf.class b/src/target/Elf.class index db4ff4d037af465787b306c4c8c4631c54d2841a..5df5c066b78d6d36cde59522abb418d54c791a34 100644 GIT binary patch delta 459 zcmbQoxr>wQ)W2Q(7#J9A8JstAl`%@PGZ-*3h-4*}CF*D9>j$S6WhUliRwX9oOs;3V ztNHrUf$G{*0B>5T4!7}#DqV)(FX`q+| zL~k7LZ#5q!<|x3YCC7O9m?-X#$jy1=1jetXf+b)Hk3h)dWgeV^t~zQJRe~ z)&Qv12CG^zbYnrzx5cVd3tg!lP^le*J&-h+Y{w#t6cVmLF$b(+lmkkcGgtsg zqsi--#j+7br~t(*Au>S2WuZo}YHeYV+JI)8Hc-+Et5Pv^rG`MI)=>NOS;RyU_L&1^ fY=FTEa!C}6ERqaJ%nlJCNHWeq8GE2(m>3)Y2;n3g diff --git a/src/target/Fighter.class b/src/target/Fighter.class index 5e865993fd4770fbce08327d377c32cea257a384..68b77c305fc8bed30e961d533160e92b4a66a2d1 100644 GIT binary patch literal 1298 zcma))TTc@~6vzM50$WOTb_dd$OwpN`D1$O{o3$hJ!N#&bDrMj0zo;=oW`>C^|}`9Gs3DjW=qpDRts7b#k%&@UcY;&!bajU!2q-tlFF>mkt($oj*aVJ?-Ay)Ndlql`< zao7z)rhA)o=RnC`;3w}Xnj1mjC9fjKq&-`+d#pW=$x4xtp<&COzU%8=trO^`tzkyC z2GTdOt!f?BJQm28>#mU|+Nit|m}}{16eu#0D+i3!=!C(0#>kl<`6j*HpdU8XwzmB( z49Bu&+mB_;aXB)W#{#mH=Ww1YmcfOgT#V%`I1Wtkyh!UZrJx*N{Q~is7lBJW?UsS- zGse{sxD4xL@kL6DXT&F-32Q@vDFv?JD$oCOHo{U0&PG~Jk#~jMHC!LfoBcRaUxma< z3T}Yx15QfM3TG*yZfD}rhK+9Kx5LGW+0tl2gYEeWZB@~ICoW$(9b=JY_gg?ar zPDmX10sJV$>&*gE0BJ8XJ2Q_xuV?oAkFVc|=qcUvDMxva3S}x%iBav8&-sqxQLu9~ zJQX9$sPsfe(mrF9Z#0iRI>*TC$RM=Bc;qu$Z7Uwf12LH@ZUv*jQE)>p( z((XxA%8iq5-*Owb4x7h}3T-_`w%V1Ecr}|0g&FXnLZ%W3yC>q2ky9&m#HikAcK_(= zTO*^OwcvV22S&tk!mTx$C;tL#xG+)K5!}vzGdhpdL8{Al-#u=-^WEf;&|XebQywpp zE_`7o+MwM#JQ?8|!KXS}#4CsgTB}7=#RR2tPwAgYrO>P%TW%~w@4uhPX*<+%+qzjrx3!n+BoLA8?1?*E2H`9q9&FPWST24U4wO z!*20Z%EPZv84J(RYU(SAucBTgXKSc#!RO(N555rlj1Q=Qb-#$S1srB{kuIh920TM0 z$3FdLOG(BNby|aU*Z!Yd2XQ$Aw+Ze_hQ8b2*6HeU-~7iVefL3ZWZ)ixyOu%UF1YI% zxX0i&GjJ_%H!^U~!QITj?Ss3OtoPSG+(vVM&E+My?F`%zxZ4@}z6N*4b)vgJ0omH5 AoB#j- diff --git a/src/target/FileManager.class b/src/target/FileManager.class index 279a18efff852b75c454914d333975e4993fb363..9135a6a8a2ec460b1eecd8cdb4a4046206a771e5 100644 GIT binary patch literal 4363 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 literal 2878 zcmaJ@Yf}?f7=8{3Y={deirl2)wSYj>YPCkuN}A@Se&LHBYNrj3PMv;hr$3}WqBE_1&gNpGjFZWp%f9D5&-*^ld(Qs#-|f2q_TjrA zs^C-LS5b``f#v75c`amW)^uoO>b#zG1#0#hmf;Qv_`15sg9xBjK~TjqX})aOF!h*b zY16tRu=1Q?r4rh_o*GPRj+S(FCnFcssi>FMwWh75hHcB`>~gG7(5PZ1Rtc=}cGWJr zp+k-~mo}1_A#2`nY-?7xh@gF1ccXSvGnahZ+0`9=)cUZ3)dF=T6A3^;i-77)8Fokp z5kMPf5}K9J%z2~Vb=3(mu32&F|>#=k+uMr`7yjy`Q*k)caTeaHI&snl+XNkC}g!dSOa~Yzp&4vTm#*K#@ z$96g;w+y@U95?9?;tA|fuv5j8GCd`1Ws3!rIqAx@YAJ!;DxSg~frd<_JUDZvw6)}c zZ0!|jE(R;7BGz2CfJkyOpkhA`&^=XgOmou$tBMLJr>BwnKB!_4&(PhhHlq*PR#J0M z8g81sjH^+G0-Kj2_F=Ar2xEsga%^NqbvNr+tjTOfp1wSuPt$=ERY@^iEi+gedkPBEN|s@1 zR$4u1(>=~TQo5vB8rHl$qlfZGYray4d4br@Wr6GEHCiytJ3XvfDdu=%)V61` zbK!^Uwrr+i;n?LleF^gdPhPHzlt1iZP&3U0mBQok3({LAfsp8@9(bfjEK7I1GSf2( zt_y5>DAc7QQ1FewV~;lFg`5u;>v*nKu~-D3JY3mR*ylCQ=Sv)IV=LI!^(;d41c z-t-o{%x5F~d!Fsgg6~0kWHKE|u0QYO#zwZWL<-OO#$NpM+S%+F|@;uhSSG(+hbZ`}K@+mX% zC-<*r8yB%V2v10F?b~zMcNGTLn%ZD)_yCI+}-CwB9> zm;L?Z?f_5l!yHA~lUZqj?;c^A-f|et+InF>%@ZLXJByg7K{B-sX-Yp=zLR=Er4v#l~>NhmUd;=Zc=tnen zwEqCL*Bf?hPh9nhg?oSZ^!|!nd00hu*Hf0j8G@RmYR*zI8o!t(31ymjHJHm84?-P$ z|DsO8dt&uJo@V)JS^&~V7&6KgJ)V3oQocD{=1%v^Kz;xNHb2NNFrV+UUxjPuNLm*4N@+~u7A zJ?GqW?>+a<4F~!7ci4IS%ZDE$qD5l=bCUji`)(>)X76$CTGKj#x9!^a_s|hOa)DYU}~L^E7EC{#BsLAj4rd)Omy#&&0};L zE1O5e%{nx#H6muXG14A&&^RW~E@Q88?yUH}P^4qlYSrhU@j!1jLXl=O(yf{#%tW1h zRC?XXYRyHHbtpR4Qe12V`I)M$mue%G%fUnVMHqEi#;_?O;&C}^LngjTl5j5+~crX^) zlL$p4ag7!*jcHAodwkWW`<8b`qjA$0h<3+(>%i%x=~OERU&yqk!n!DDq_smVOuA^X zPD>=79t<1t_!=8ay1h=PWwN7CbqpP;o@uNasb=U%%O!?`RzeY5fx4Zca450AH5iSV z@qX)8N$VQn?Ku^V)0&j!EyiBeT`Pw^L#HM=bbdTxBnGL}qSG2UVog?&&qZhIw2oRa zHE}a+1`}pmE12U|CaQ?(VeNt%3?mC8DE(`NW=kQHh)IoMX6w#mUdN2DRR>2srZXn>)~I9S|dnn&d*M zZBjwJ-t5{F#`3MT5~9r4G+?P5w^j~vK7CgXawF4JwVp}_F-doTNruo(I(?sRw&FRZ zNx8Y*s?!hXHq2)zz79K5ECP)-#Lbx6?lwz-+jaUO-60obcPxg8Q~qY+M%j6nPIt@B zJS;T3N4EY*r+Zav#5~t-l{?h^I{lb_0$`)9jmckOJ(Dw?4_lw+_^_v>bUI4Mtg*Re z++!`yEiOotE`=V}sh1wHcID2fc?>hJBFNa6m{lJ_^vAK!IO$P(LK^-gW(Gc&u5i&$ zb$Xhfv7XDF1?->c^c?-%I+a_w&_&Pd^a4GDDUF+n*3fy_h+OodPQRpI!9=vJGvlH2 zWbh((DmL3_FYEMcdc|sV%*lU^e&e9u>hwCjVO{PxtK>C$Q>WjPruOedQ#87}F4DHr zG{X*h%lg7GCjT9J*Fo>;^gf-mCTg?!4_2$TAnzmkql5mW)1R&DwX)B363u^Q~5LwlY^Gc&r;94ItZ7#u_TAKGR3(m62^4}DklM?!?s5(-w7aRx8OWolL zgXX8ag|C1Xq(1VLgSt|MBX0*SOr?wBoMbNop)QsPwTFUcOyeR{ml?60Ml6Iec{DtV zYMaJmnR1thv9Sd;#vzweAL|aaX>^6g6Ts6PjqKLg2hG?Qq+S@k1bSAc3dUXoT9vxF_ylN8 z>cWzfpmS1f6PiHhrH)K|40L`fR(cia>8Vqbz7D!DbxGM9%!^ao%dcTxn)-NZ1M{-f z+-Y|+*QZYSFXgQ`Vl=F0Gt!ah)OZyvuSe{|#KeA$S0l8R<48<|64?EsFsKPFjgf>I z#y)OFg0Q7U=^Jm0c4@p8U~+|r;$4Qu>#WCTjGe!pX=Fd7FBJC~zC@>-W8R3(bujvn z&a*7{%#tL|n!-&X2|lEAE0ecxoFN_CF%2z9QZ(Ly^;*|~!cOS7$_#aMCN#$K&E1qK zw}W-XelxCdCrYb~5N2W*j>;xuUwe1h*AR`iY2_S-y_r4KZsLgaNv9FT(Uxi1W4$!f zyA3;!zCPA%`uet9PGEQHt zY$ytLSVm=04i1N+uywd{6d$neuPn~NiBJ@j_1w#4k13h>O6yBV;VdW$s)i&^0!Lji z8s49PcW@TuNl#*nmZAPFIf1cIS15urgTD=3S75SZ2_$VYQgIOEt&E0u`&OB;sK(z# zwLwO@k%*%Ad&nUgx|h%I5Xft~6WCVT+U0pSqAGQuxl@>h0RMKye za^GXtXH`@932R(+x$`MxYp@)OtFEUlqj~~AYh6@5o}aUBsV?Q?))Q!X!FsE@gkQA2 zK>1hJxSENMmzhREAt{yj3P6-jn5dEC9sC-+HY9Vy#?HUh`E?}1->fOpT>Lwo-$dp9 znz7oed;&)Xzh%8xGu8hNB{uB#!xk`=@!uyc;X0kY7@!xg+hde9f;j2eBj+TC3*y1?PWxk#9ebR2Mm6)TEDu^-Ac5u41 zX6G*C)wR<$OO9e)j1wgo4#rA8;0&Cg8BQc#VuCIv(i?C}B5J2wvawVblVqatcay&fX*A3=OrqSST9` zf??B$A&WpJVk(5ix>$lC*32#5me-2B-$0%QPfs0gDi?k=>swsQR6acCkf5(!Tx)gA zonU=qZtePt;dAwceN&a0DG5C}Y;^5xGs^z&SuUH$Z_=soFWR7SqLQaR%bNF@n8X<=$r8 zA-b8S*a2p3oIl1{CNsV6Jr1$YYMwt6*Vb%2A{3F3&jKh3x#)<+QdO=)9c!n*zKonQ z2bX;^dsY-FwxYybJ+P}%| zc$A6*S-n&e@F&wW0j-npP3fVE)!qkS2NONn2bkuXP=aOE!6b4<^OP7OO>AA{tbuV2TaOb&QZr$y4 z7r320bX^a9yN7OQP0{x-(1NvAzo*SXbPTv%JDQ)L5pY_Z6H5I@FsF4&A=^bCOt`& zoI};@qS-u}PU8})<#IfhRMBEyL`y{jFbhbWLMJuS5qjJ6 zL7F~1jBuDu3uqyo$kx32m#MOF~y#L%USh& zj{gqN7x=GvzHB{)083^hasPm*mjz_KoDE?w=R(@c8pOTql=5EIC4iSlNCYpt0WsI_ zE>L58*`p9fDuhuAVT?j3RtP0F!gw2DqK!~m4w~oX$skTIPXWpI@>CGr%hLeA$cDEb zU$`KtI2YNROKi?Mn{zohm-^kg8AVnoMH-YMjY^R-lp@Vaku_jmJ-~dXVs2H;8x->< z#T-z~Tfp25=0}_XE4*-Ga_xZNHYIqr5;T-xPzjn!umgfy`sT&UA;r8~F?T8EsA4`x zF~?yByxR=|@9qPEclQHf`vAiE5+TVKDhMoF@L#MTE>RGd+7Or75Leg`R{_HCyFD4d zT&bKJUcL)tgqQCD zae4V(5Vx1_2PyROPoP2DfCh(^1}UY%F{MF|(%>PbK`&%r)}tVB!{Z=u!;>J;;HMx? z*#8VDH24_^H266PG*yYA+V}GNlosXmwCJRl#Ygl}7A|F2cX-96q}t`NTGhg%!d`wA`y~Gc z-y2yy{QC#`$H`U4fZSQ|KAPECq?p`UhKP+DM$8E|ycK4|$}^*l=;fq691k~^8yPWD z_KeVJl%>WR-OFzWy!>ttzuz?7|1h5cxE|f5iv!RW#|o2#0Mue&+w0XSWH%4n(@^zycbh`A4YfxfJodk zfaUNRmLNHgB;h7eu8!5d1ufSK@e?rODG1>nkP&Kz4pOMppB5EqF=I$}fwpRVbMT!u zus0MV#~^+d*W2gdkK;6kpQjRjfqeX;TgcqDZ~bo|hq7>{N?wl9oyc5}M%g*jAd6)Z z)!Pr&}YfW!?zK_&_Li5;>& zsIsUZ_y2>n-MSgq@~v3a+o0uk{6Kd$!p#6Qt{NF_mt;&H-H)nL#T=O$X7t4VD^o(- zfh(ZsO4!{%9$tmOSq(H?V=`!GWb~Zu4;-aCvtjL>vUEt64$0Czveb_}7&fUY8k r*od}mVmm&&Wb~KX#Dc!Yj{e47{iUw{(jJuJfOA6SgxD+2rLq4DloRd^ delta 5634 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 diff --git a/src/target/ImageInfoPanel.class b/src/target/ImageInfoPanel.class index 6d1693a6531804f63676dddc81b27b28fe509774..af862c680c35d9687b7ac5c3eaf20e11303e6939 100644 GIT binary patch delta 232 zcmWO1y(@$P0D$q|n=W4G%9ZGZjxM<*WVleupbQ4%CCNwW21#O|IQi-}>L&8lg+htU zjddrvLM6zF<0gVQ=7}jp|?I)ZH ziZg1=ikpkXc`1w9EbCD)WW|_Od25!e+p(c!Q^l4?+n(%tRrGGpr+r@zd^_~(D2O=@ zT9krT`$1YE=yu``t^(&fOXm+K;wX~aP{s#h7Fo*yE delta 232 zcmWNLy-Px29EG13x!9Xs@RDd(@`I2_L5PZOhzLfCSdc@-Eh7+dE~Fwtv7w<+xU-Ak zU@b*+;osrp+AK6R^jpq3!vp7;*)#jy)jEjA!erTNXvbKQ9rXsfWW`w^L69U7Hi(h= zoa-ai+r-Bf0d@r3#b%FH@&XjtW?%9EmoiN%bgA;fAw!ONrN$d4d~nJaXH0~ea?TGI z{8Cp2mny=QisGsy1+`9#5m03D56e$Z%2e4@%KHwC)7Kc>$o~T&+Jw0!&Yg(fv&JK7 OIygLu!L!$2s{I2bA1R^$ diff --git a/src/target/Intelligence.class b/src/target/Intelligence.class index fb6a7814eb4e113ca5812c6cc8e2090c6c3ae404..79fcbbabe223873d131bffb712981ac1a8f4e65f 100644 GIT binary patch delta 444 zcmZut%`O8`7(MsS)O2oZVutwFpruSPsH&f`k$3^IurrcMMw$={3mY42oBI$p7MifJ zu(I+PRubgiAx0e(1qROIt2j!|ql4yU z61S4;_@vd;`{K@v6qd2#U^S0PRP~2=6E%G=_r!+&lA*mNP|%(%=(^Q6B`^)iCx<)@ zB>GcyAdo?cbw;0BrJGsq0@$osRt1;*0KMFoF=SZWOb`Vz6F$LtU?X6D>q$TQtb_kj z{cft!oBK=EuI=sqiW#Tz)X(^iaWcMEF#Oo%Y68r6i2BejUKj}v7HfqO7T^;F!t{(r xs?42{%7sVFU>`rjX>;rZQM?_X%JenTD(odC7KvFhmiVq=os(i$$0oKh@&k{hEX4o- delta 402 zcmZvY%}zow5QWdQ7cNwSa#7I;!FUk_|G1)}Mptfq2z>;fz{I$AGq1q{663;!iHR$p z#D^fp)4EY&nw~Rlzs^ki;697)-PUT$&`erVp zW5K50n3^{2f}CjIW=+6w%%Q{_2G!s(1UYO_Q@yvXyB5z9MASUBfFei2JIscfr+Ct! z3q99+LOfz1@YnKTbDp~VFIt&Jmx#9iqE{j9GZtsrHL~?k*>~Vqz5|=AjA_5?`=@k% zK)sF9hVQHlOYQP0Jyhs|ta30_=aDpQYaf;P% DwPPbn diff --git a/src/target/LoadCharacterPanel.class b/src/target/LoadCharacterPanel.class index be1cabd6cf95114cbee3e77447169148edfba97d..56b09bc3c8d8dd2fb3b25d58592fc7e65d5a6a92 100644 GIT binary patch literal 1792 zcma)6*-{%v6g@2gBSf=_#caXYu|XPPD{*YcvA_w!U?5^iL~wA{meiI8#Ed*@nb^;H z%vac}Pu3-PPUq+;h*l-M|0+%dY_D;l>d`)Ib|Y zJ31H=d*Z41Cet{y>`G>BOW3l;&@pG(mb%9fO{R9@h@sO!oTJMR$UCCESQV})Dd~m* z@wyHyNY$)&((!JN9`rKwHpEkTdbq(bl-Kz(O=ZJE^{Vr>SBXW@sv_-khkV*#0bkL%6PhVF(`IZ@iL zxK7iid;=}{^l2^L0Iq1MuM*GX>S`e83`Y_vhE75V3Sk&O6CJFr3tLpAMlq0n-Ko4N z%32K9G)FRIN=&`-Bn}f9o%1b{EkyO}Ehv{<_VI2ojGcA9p#5KT?1mDyYG{O;9Jg?r zVVF3sIIi{Fv6ZMTkUI7O>B!KQq-wNscR1d|T~e+p1v#@!2g&+V<@5pxXJU?115#HR z1R0!4oGIEr79f7Wv7o)+W#R72M&O15QZsy{ z^^RahH^+w@d8{*Z6`M*qcG$VY$&}Bu^$KKT*d)U?99LBhd_>;9YQG1rRSx`#qkwG# zpK$Ep;mMKK&L$2G>p4-Oi?kZY7Iw8Sk4OUQg`gWE_*}20G|wpw`4z|45EN38q~j2& ze7ud2iaTe zn#%_jH28({uh(^LE#2rCX~$5ZUqruNG+OjxMzDuAnzv)0<~3Sb zLXDajbJbYw+WP< zRXVSsZ&4aXu$I_pp+AjIB6AUOOpzX!FpSIe zMqa^H`bff$?3=9mm47^+nObpEI3@khhtPE_73<6n+Wr_MZiFxVz{z+M>$t8>o zY&MyBnI(3N49psuVeAYXj0{3P`H3mc8Hq)S$t9^p0f~93Ig=-_NKgLFqG87lG!FzA lfe>gSkmLmNWWjs}23D=@42&DW(p*3iBn?r@4WyYEcmR6x8nplb diff --git a/src/target/PreviewCharacterSheet.class b/src/target/PreviewCharacterSheet.class deleted file mode 100644 index e73776d9e218a5212ed4bb27037fb4ad0e1f2c71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 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 DSjQd) diff --git a/src/target/Strength.class b/src/target/Strength.class index e9e44bc6be9ec0269fc9c0aebc6aa6a73e1b3e1f..e84bd5ea6898fdca42954634ad0b77b00635ddba 100644 GIT binary patch delta 536 zcmZvazfJ-{5XQf~0}t*Hs8d&Dr=gTXAUF`SGu1Fau2qezEE6;6TxJRvS z+v~Kiz0*!h-iX`inu&F67^p=skGd>r1FG|O=) zFr-?Yh@FkfmYFRLWvh^>VCGU?CJLRl&M7rGg*vfS|AMM|kvS!5Imc8DoIJtkbNk(e h$%;Ue13n<;GS*N=g+4^0%CCVf?o3A8dS9K`3JP1=~mv<*_JZLwO78nqg=t=}Fzc=a)Q@S;}_KE#4A;KhSr3xeRm zQ%{1gB+f>#7$oe>lKt(>ZZh^CeedJz?H#}gPDkF2=zDnxQx7}XEn+V~8(n>2jis*x zbuNecQYCV%Z&fPL&#LAuLlEmvwY0FpkO(%lKy@+2CxXv)2dfzs+40?knkH33fHG#t z396Vi6!$mjLU)oE6rVT|m~DmZWtBSjFIvf?4Wes*QT=L%SCgdoUdR0^( z=331KlHaHntPFI`0n4R9zPQ8H^`BUsI_;(@456r9ev}?6biqb;qgY=%jlLl~rkelY b;f(Ai=N3BHqPwKGIeOU7IKcsqNY=gqxu7U5 diff --git a/src/target/Wisdom.class b/src/target/Wisdom.class index 92cb73d861b2b2fcfe4d45c3ba89f0d2578897a3..2c745981e1b706d8b7350662d3c90f5db2e19068 100644 GIT binary patch delta 371 zcmcb^`Gb?|)W2Q(7#J9A8EiIknK4SSGbl4Mh-4*}CF*D9>j$S6WhUliRwX9oq)v8V z?BLVqVlZGZWM?qqVNhT&o_vk*2&3ub*-Xxi7L)HYX)#(&=3+KvW@J#BY{M+cs=~m? zpgK8yK%Oj+ z2NGq~+QJ~X2FPG!Kqv)i*TAB58-obCQjj?^VAE75E3k-&A`Ah!R1+%W$)YR^lHp@u z29nx9x9R}hqYYG{1$Le4G`3# zkiP#isXZ3deAU$aWiY!67_K5p^e~vqID{aFbzE>Uluh{tf*KC=JYSvHtYNmaIWa)XTs}9hd z2>q?C->F56fY{;yDavHQR`y1s*{2e7Io82|tP