6 Commits

Author SHA1 Message Date
099278cfd2 changed version string 2024-07-01 14:53:13 -05:00
c372ff315e style changes 2024-07-01 14:53:13 -05:00
5f0de49399 update oobe, remove unimplemented back button 2024-07-01 14:53:13 -05:00
96aa9ca54e Update README.md 2024-07-01 05:36:42 -04:00
420308ad42 Update README.md 2024-07-01 05:35:36 -04:00
b38707afe5 Update README.md 2024-06-30 19:41:35 -04:00
6 changed files with 91 additions and 40 deletions

View File

@@ -1,44 +1,25 @@
![](https://files.worlio.com/users/bonkmaykr/http/git/embed/firestar.png) ![](https://files.worlio.com/users/bonkmaykr/http/git/embed/firestar.png)
Firestar is a mod manager for WipEout 2048 which automatically handles sorting mods by priority and repacking game assets based on selected add-on packs. It runs on a desktop/laptop computer and aims to allow easy installation of mods for users who have only a surface level understanding of hacking the PSVita. Firestar is a mod manager for WipEout 2048 which automatically handles sorting mods by priority and repacking game assets based on selected add-on packs. It runs on a desktop/laptop computer and aims to allow easy installation of mods for users who have only a surface level understanding of hacking the PSVita.
# about 95% complete
**What works:**
- Managing mods (install, add, delete, toggle on/off)
- Cross-platform support
**What doesn't work yet:**
- settings screen
- misc. tools (pack creator, soundtrack mod generator...)
- initial setup screen can still be a bit arduous for vita newbies
## Video Tutorial: [>> CLICK HERE <<](https://www.youtube.com/watch?v=Bi9fpqR2Ulw) ## Video Tutorial: [>> CLICK HERE <<](https://www.youtube.com/watch?v=Bi9fpqR2Ulw)
![](https://files.worlio.com/users/bonkmaykr/http/git/embed/firestar_window.png) ![](https://files.worlio.com/users/bonkmaykr/http/git/embed/firestar_window.png)
# Installation
- **Windows & Mac:** Grab the Portable ZIP from the [Releases](https://git.worlio.com/bonkmaykr/firestar/releases) page and run the JAR file.
- **Linux:** Install one of the packages from the [Releases](https://git.worlio.com/bonkmaykr/firestar/releases) page:
- Ubuntu, Mint, PopOS: `sudo dpkg -i firestar_ver_arch.deb` or `gdebi firestar_ver_arch.deb`
- Fedora, Mageia, OpenSUSE, AlmaLinux: `sudo rpm -i firestar-ver-arch.rpm`
- Arch, EndeavourOS, CachyOS, Steam Deck: `sudo pacman -U firestar-ver-arch.pkg.tar.zst`
# System Requirements # System Requirements
- You will need a computer running Microsoft Windows, or any POSIX-compliant desktop operating system such as Mac OS X, Linux, BSD, or MINIX (Firestar does not run directly on the PSVita). ***Wayland support has not been tested.*** - You will need a computer running Microsoft Windows, or any POSIX-compliant desktop operating system such as Mac OS X, Linux, BSD, or MINIX (Firestar does not run directly on the PSVita). ***Wayland support has not been tested.***
- You will also need the Java Runtime Environment installed, at least version 17 or newer. Non-Windows systems will require WINE to be installed for some functionality. - You will also need the Java Runtime Environment installed, at least version 17 or newer. Non-Windows systems will require WINE to be installed for some functionality.
- Please run Firestar on an EXT or NTFS partition as some of the larger file operations it performs may cause glitches in certain filesystems used on memory cards. Do NOT install Firestar directly to your PSVita's storage. - Please run Firestar on an EXT or NTFS partition as some of the larger file operations it performs may cause glitches in certain filesystems used on memory cards. Do NOT install Firestar directly to your PSVita's storage.
# Mod File Structure
Mod files are contained inside of ZIP archives with the metadata being stored inside of the archive's embedded comments. The "data" folder inside contains the actual game assets for repacking.
Next to it at root level a pack.png will be supplied for displaying your mod's icon in later versions of Firestar. This feature is currently unimplemented.
Later versions of Firestar will have a built-in tool to handle these for you, since some archive programs don't make it easy enough to do by hand.
Typical mod metadata will look something like this:
```json
{
"version": 1,
"friendlyName": "Custom soundtrack",
"loaderversion": 0,
"author": "bonkmaykr",
"description": "I need sugar"
}
```
# FAQ # FAQ
## (Non-Windows) Do I need WINE? And why? ## (Non-Windows) Do I need WINE? And why?
Yes. psp2psarc.exe is a Windows-only tool. Firestar can run natively on the system but it needs WINE in order to pack the game assets. Yes. psp2psarc.exe is a Windows-only tool (also like super proprietary... sorry). Firestar can run natively on the system but it needs WINE in order to pack the game assets.
**If you are on Mac OS X you will need an older OS version that is still compatible with 32-bit applications.** **If you are on Mac OS X you will need an older OS version that is still compatible with 32-bit applications.**
## Why do I need a leaked Playstation SDK? ## Why do I need a leaked Playstation SDK?

BIN
resources/exo2.ttf Normal file

Binary file not shown.

View File

@@ -210,9 +210,8 @@ public class Kermit implements ActionListener {
document.setParagraphAttributes(0, document.getLength(), align, false); document.setParagraphAttributes(0, document.getLength(), align, false);
//dialogText.setText("Aww Fiddlesticks, what now?"); //dialogText.setText("Aww Fiddlesticks, what now?");
dialogText.setText("WELCOME TO FIRESTAR\n\n" + dialogText.setText("WELCOME TO FIRESTAR\n\n" +
"This initial setup guide will help you prepare your Playstation Vita, Playstation TV, or Vita3K emulator to play WipEout mods. You will be asked a series of questions to help Firestar decide the most optimal installation method for you.\n\n" + "This initial setup guide will help you prepare your Playstation Vita, Playstation TV, or Vita3K emulator to play WipEout mods.\n\n Before continuing, please read the decryption guide at:\nhttps://git.worlio.com/bonkmaykr/firestar/wiki/Decrypting-Original-PSARC-Files\nsince you will need these files in order to use Firestar.\n\n" +
"If you encounter any issues while using Firestar you may contact the author at bonkmaykr@screwgravity.net\n\n" + "If you encounter any issues while using Firestar you may contact the author at bonkmaykr@screwgravity.net");
"DISCLAIMER: This program is free software licensed under the GNU General Public License version 3.0. You may share this program and it's source code so long as you extend the same rights to others. The developers of this software are never responsible for any damage to your game console and Firestar is provided to you without any warranty or legal guarantee. By using Firestar, you agree to these terms. For more information, visit https://www.gnu.org/licenses/gpl-3.0.en.html");
frame.add(dialogText); frame.add(dialogText);
frame.setSize(600, 400); frame.setSize(600, 400);
@@ -231,7 +230,7 @@ public class Kermit implements ActionListener {
button.setBounds(292, 343, 300, 30); button.setBounds(292, 343, 300, 30);
frame.add(button); frame.add(button);
button3.setVisible(true); button3.setVisible(false);
button3.setBounds(0, 343, 292, 30); button3.setBounds(0, 343, 292, 30);
frame.add(button3); frame.add(button3);
@@ -351,7 +350,7 @@ public class Kermit implements ActionListener {
button.setBounds(292, 343, 300, 30); button.setBounds(292, 343, 300, 30);
frame.add(button); frame.add(button);
button3.setVisible(true); button3.setVisible(false);
button3.setBounds(0, 343, 292, 30); button3.setBounds(0, 343, 292, 30);
frame.add(button3); frame.add(button3);
@@ -391,7 +390,7 @@ public class Kermit implements ActionListener {
button.setBounds(292, 343, 300, 30); button.setBounds(292, 343, 300, 30);
frame.add(button); frame.add(button);
button3.setVisible(true); button3.setVisible(false);
button3.setBounds(0, 343, 292, 30); button3.setBounds(0, 343, 292, 30);
frame.add(button3); frame.add(button3);
@@ -405,7 +404,7 @@ public class Kermit implements ActionListener {
dialogText.setText("You're almost done!\n\n" + dialogText.setText("You're almost done!\n\n" +
"Please move all of your original PSARC files for WipEout (base game, patches, and HD Fury DLC) to the config folder and press Next when you are done.\n" + "Please move all of your original PSARC files for WipEout (base game, patches, and HD Fury DLC) to the config folder and press Next when you are done.\n" +
"Firestar will use these to generate new PSARCs in place of the old ones.\n\n" + "Firestar will use these to generate new PSARCs in place of the old ones.\n\n" +
"If you play on a real console, you will need to use VitaShell (remember to \"Open Decrypted\"). Check /app, /patch, and /addcont. Getting all of them is important since WipEout always loads them in a specific order and which ones you have determines where Firestar can compress the modified files to."); "If you do not already have these files, please read:\nhttps://git.worlio.com/bonkmaykr/firestar/wiki/Decrypting-Original-PSARC-Files\nto acquire them.");
frame.add(dialogText); frame.add(dialogText);
//pathInput.setVisible(true); //pathInput.setVisible(true);
@@ -449,7 +448,7 @@ public class Kermit implements ActionListener {
StyleConstants.setAlignment(align, StyleConstants.ALIGN_CENTER); StyleConstants.setAlignment(align, StyleConstants.ALIGN_CENTER);
document.setParagraphAttributes(0, document.getLength(), align, false); document.setParagraphAttributes(0, document.getLength(), align, false);
dialogText.setText("Firestar is ready!\n\n" + dialogText.setText("Firestar is ready!\n\n" +
"For technical support, email\nbonkmaykr@screwgravity.net."); "For technical support, see Help > Manual.");
frame.add(dialogText); frame.add(dialogText);
button.setVisible(true); button.setVisible(true);

View File

@@ -18,14 +18,16 @@
import org.json.*; import org.json.*;
import java.awt.*;
import java.io.*; import java.io.*;
import java.nio.file.*; import java.nio.file.*;
import java.util.*; import java.util.*;
import java.util.List;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
public class Main { public class Main {
// Build Information // Build Information
public static final String vstr = "Release 1.0"; public static final String vstr = "Release 1.1";
public static final String vcode = "Dekka"; public static final String vcode = "Dekka";
public static final int vint = 0; public static final int vint = 0;
@@ -54,6 +56,9 @@ public class Main {
// Mods // Mods
public static List<Mod> Mods = new ArrayList<Mod>(); public static List<Mod> Mods = new ArrayList<Mod>();
// UI Global Assets
public static Font fExo2;
public static void main(String[] args) { public static void main(String[] args) {
// license string // license string
System.out.printf("FIRESTAR MOD MANAGER for WipEout 2048\nversion " + vstr + " (codename " + vcode + ") major " + vint + "\n" + System.out.printf("FIRESTAR MOD MANAGER for WipEout 2048\nversion " + vstr + " (codename " + vcode + ") major " + vint + "\n" +
@@ -73,6 +78,14 @@ public class Main {
"along with this program. If not, see https://www.gnu.org/licenses/.\n\n\n\n"); "along with this program. If not, see https://www.gnu.org/licenses/.\n\n\n\n");
//begin //begin
// load global assets
try {
fExo2 = Font.createFont(Font.TRUETYPE_FONT, new File(System.getProperty("user.dir") + "/resources/exo2.ttf"));
} catch (Exception e) {
System.out.println("Font \"Exo 2\" is missing!");
fExo2 = new Font("Arial", Font.PLAIN, 12);
}
// check and load configs // check and load configs
File fConf = new File(System.getProperty("user.home") + "/.firestar/firestar.conf"); File fConf = new File(System.getProperty("user.home") + "/.firestar/firestar.conf");
if (!fConf.isFile()) { if (!fConf.isFile()) {

View File

@@ -5,7 +5,10 @@
<constraints> <constraints>
<xy x="20" y="20" width="500" height="400"/> <xy x="20" y="20" width="500" height="400"/>
</constraints> </constraints>
<properties/> <properties>
<background color="-1"/>
<foreground color="-592129"/>
</properties>
<border type="none"/> <border type="none"/>
<children> <children>
<grid id="6cdb1" binding="descriptionContainer" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1"> <grid id="6cdb1" binding="descriptionContainer" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
@@ -17,7 +20,10 @@
<maximum-size width="300" height="-1"/> <maximum-size width="300" height="-1"/>
</grid> </grid>
</constraints> </constraints>
<properties/> <properties>
<background color="-526337"/>
<foreground color="-592129"/>
</properties>
<border type="line" title="Description"/> <border type="line" title="Description"/>
<children> <children>
<component id="a9cee" class="javax.swing.JTextPane" binding="descriptionField"> <component id="a9cee" class="javax.swing.JTextPane" binding="descriptionField">
@@ -38,7 +44,10 @@
<constraints> <constraints>
<grid row="0" column="1" row-span="2" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/> <grid row="0" column="1" row-span="2" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
</constraints> </constraints>
<properties/> <properties>
<background color="-526337"/>
<foreground color="-526337"/>
</properties>
<border type="line" title="Mods List" title-justification="1" title-position="2"> <border type="line" title="Mods List" title-justification="1" title-position="2">
<font/> <font/>
</border> </border>
@@ -64,7 +73,10 @@
<maximum-size width="300" height="200"/> <maximum-size width="300" height="200"/>
</grid> </grid>
</constraints> </constraints>
<properties/> <properties>
<background color="-526337"/>
<foreground color="-657921"/>
</properties>
<border type="line" title="Actions"/> <border type="line" title="Actions"/>
<children> <children>
<component id="3cd60" class="javax.swing.JButton" binding="toggleButton" default-binding="true"> <component id="3cd60" class="javax.swing.JButton" binding="toggleButton" default-binding="true">
@@ -75,6 +87,10 @@
</grid> </grid>
</constraints> </constraints>
<properties> <properties>
<background color="-15128227"/>
<borderPainted value="false"/>
<font name="Exo 2" style="1"/>
<foreground color="-657921"/>
<text value="Toggle"/> <text value="Toggle"/>
</properties> </properties>
</component> </component>
@@ -86,6 +102,10 @@
</grid> </grid>
</constraints> </constraints>
<properties> <properties>
<background color="-15128227"/>
<borderPainted value="false"/>
<font name="Exo 2" style="1"/>
<foreground color="-657921"/>
<text value="Move Up"/> <text value="Move Up"/>
</properties> </properties>
</component> </component>
@@ -98,6 +118,11 @@
</grid> </grid>
</constraints> </constraints>
<properties> <properties>
<alignmentX value="0.0"/>
<background color="-15128227"/>
<borderPainted value="false"/>
<font name="Exo 2" style="1"/>
<foreground color="-657921"/>
<text value="Delete"/> <text value="Delete"/>
</properties> </properties>
</component> </component>
@@ -110,6 +135,10 @@
</grid> </grid>
</constraints> </constraints>
<properties> <properties>
<background color="-15128227"/>
<borderPainted value="false"/>
<font name="Exo 2" style="1"/>
<foreground color="-592129"/>
<text value="Move Down"/> <text value="Move Down"/>
</properties> </properties>
</component> </component>
@@ -120,6 +149,10 @@
</grid> </grid>
</constraints> </constraints>
<properties> <properties>
<background color="-15128227"/>
<borderPainted value="false"/>
<font name="Exo 2" style="1"/>
<foreground color="-592129"/>
<text value="Options"/> <text value="Options"/>
</properties> </properties>
</component> </component>
@@ -130,6 +163,10 @@
</grid> </grid>
</constraints> </constraints>
<properties> <properties>
<background color="-15128227"/>
<borderPainted value="false"/>
<font name="Exo 2" style="1"/>
<foreground color="-526337"/>
<text value="Import"/> <text value="Import"/>
</properties> </properties>
</component> </component>
@@ -141,6 +178,10 @@
</grid> </grid>
</constraints> </constraints>
<properties> <properties>
<background color="-15128227"/>
<borderPainted value="false"/>
<font name="Exo 2" style="1"/>
<foreground color="-657921"/>
<text value="Deploy"/> <text value="Deploy"/>
</properties> </properties>
</component> </component>

View File

@@ -152,6 +152,23 @@ public class MissPiggy implements ActionListener {
} catch (IOException e) { } catch (IOException e) {
System.out.println("ERROR: Failed to find /resources/titleIcon.png. Window will not have an icon."); System.out.println("ERROR: Failed to find /resources/titleIcon.png. Window will not have an icon.");
} }
menuBar.setBackground(new Color(25, 41, 93));
fileMenu.setForeground(new Color(255, 255, 255));
fileMenu.setFont(Main.fExo2.deriveFont(Font.BOLD).deriveFont(12f));
toolsMenu.setForeground(new Color(255, 255, 255));
toolsMenu.setFont(Main.fExo2.deriveFont(Font.BOLD).deriveFont(12f));
helpMenu.setForeground(new Color(255, 255, 255));
helpMenu.setFont(Main.fExo2.deriveFont(Font.BOLD).deriveFont(12f));
toggleButton.setFont(Main.fExo2.deriveFont(Font.BOLD).deriveFont(12f));
deleteButton1.setFont(Main.fExo2.deriveFont(Font.BOLD).deriveFont(12f));
moveDownButton.setFont(Main.fExo2.deriveFont(Font.BOLD).deriveFont(12f));
moveUpButton.setFont(Main.fExo2.deriveFont(Font.BOLD).deriveFont(12f));
optionsButton.setFont(Main.fExo2.deriveFont(Font.BOLD).deriveFont(12f));
importButton.setFont(Main.fExo2.deriveFont(Font.BOLD).deriveFont(12f));
deployButton.setFont(Main.fExo2.deriveFont(Font.BOLD).deriveFont(12f));
frame.setSize(800, 600); // 1280 800 frame.setSize(800, 600); // 1280 800
frame.setMinimumSize(new Dimension(640,480)); frame.setMinimumSize(new Dimension(640,480));
frame.setTitle("Firestar Mod Manager"); frame.setTitle("Firestar Mod Manager");