asset downloader & warn when have no psarcs
This commit is contained in:
parent
d850400f00
commit
4d093e7ce8
131
firestar/src/main/java/Bert.form
Normal file
131
firestar/src/main/java/Bert.form
Normal file
|
@ -0,0 +1,131 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="Bert">
|
||||
<grid id="27dc6" binding="frameContainer" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="10" left="25" bottom="0" right="25"/>
|
||||
<constraints>
|
||||
<xy x="20" y="20" width="1156" height="400"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<grid id="59440" layout-manager="GridLayoutManager" row-count="3" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<grid id="1a1a9" layout-manager="GridLayoutManager" row-count="3" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="783ac" class="javax.swing.JLabel">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Select your game version below."/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="e27cc" class="javax.swing.JLabel">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="This will determine what file your mods are deployed to."/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="319fa" class="javax.swing.JLabel">
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value=" If you add/remove DLC in the future, you will need to change this setting again."/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<grid id="23bd7" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="a94bd" class="javax.swing.JButton" binding="cancelbtn">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="2" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Cancel"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="9f9b3" class="javax.swing.JButton" binding="downloadbtn">
|
||||
<constraints>
|
||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="2" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Download"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<grid id="c82fd" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="11210" class="javax.swing.JRadioButton" binding="baseRad">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="6" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<horizontalTextPosition value="10"/>
|
||||
<text value="Base game only, no updates"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="94d8" class="javax.swing.JRadioButton" binding="hdRad">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="5" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<horizontalTextPosition value="10"/>
|
||||
<text value="HD DLC, without Fury"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="69445" class="javax.swing.JRadioButton" binding="patchRad">
|
||||
<constraints>
|
||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="10" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Base game only, 1.04"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="35def" class="javax.swing.JRadioButton" binding="furyRad">
|
||||
<constraints>
|
||||
<grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="9" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<horizontalAlignment value="10"/>
|
||||
<horizontalTextPosition value="11"/>
|
||||
<selected value="true"/>
|
||||
<text value="HD Fury DLC"/>
|
||||
<verticalTextPosition value="0"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
</children>
|
||||
</grid>
|
||||
</children>
|
||||
</grid>
|
||||
</form>
|
243
firestar/src/main/java/Bert.java
Normal file
243
firestar/src/main/java/Bert.java
Normal file
|
@ -0,0 +1,243 @@
|
|||
/*
|
||||
* Firestar Mod Manager
|
||||
* Copyright (C) 2024 bonkmaykr
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
*/
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.*;
|
||||
|
||||
public class Bert implements ActionListener {
|
||||
BufferedImage windowIcon;
|
||||
public JFrame frame = new JFrame();
|
||||
private JPanel frameContainer;
|
||||
private JButton cancelbtn;
|
||||
private JButton downloadbtn;
|
||||
private JRadioButton baseRad;
|
||||
private JRadioButton patchRad;
|
||||
private JRadioButton hdRad;
|
||||
private JRadioButton furyRad;
|
||||
private ButtonGroup radios = new ButtonGroup();
|
||||
|
||||
private JFrame invoker;
|
||||
|
||||
public Bert(JFrame parent) {
|
||||
parent.setEnabled(false);
|
||||
this.invoker = parent;
|
||||
|
||||
frame.add(frameContainer); // initialize window contents -- will be handled by IntelliJ IDEA
|
||||
|
||||
frame.setSize(600, 300); // 1280 800
|
||||
frame.setTitle("Download Assets");
|
||||
frame.setResizable(false);
|
||||
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
|
||||
frame.setLayout(new GridLayout());
|
||||
frame.setLocationRelativeTo(null);
|
||||
frame.setAlwaysOnTop(true);
|
||||
|
||||
radios.add(baseRad);
|
||||
radios.add(patchRad);
|
||||
radios.add(hdRad);
|
||||
radios.add(furyRad);
|
||||
|
||||
cancelbtn.addActionListener(this);
|
||||
downloadbtn.addActionListener(this);
|
||||
|
||||
try {
|
||||
windowIcon = ImageIO.read(Main.class.getResourceAsStream("/titleIcon.png"));
|
||||
frame.setIconImage(windowIcon);
|
||||
} catch (IOException e) {
|
||||
System.out.println("ERROR: Failed to find /resources/titleIcon.png. Window will not have an icon.");
|
||||
}
|
||||
|
||||
frame.setVisible(true);
|
||||
frame.addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e)
|
||||
{
|
||||
parent.setEnabled(true);
|
||||
e.getWindow().dispose();
|
||||
}
|
||||
});
|
||||
|
||||
if (!new File(Main.inpath + "pkg2zip.exe").exists() || !new File(Main.inpath + "psvpfsparser.exe").exists()) {
|
||||
JOptionPane.showMessageDialog(frame, "The decryption tool is missing.\nPlease select \"Get Dependencies\" in the Options menu.", "Error", JOptionPane.ERROR_MESSAGE);
|
||||
invoker.setEnabled(true);
|
||||
frame.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent actionEvent) {
|
||||
if (actionEvent.getSource() == cancelbtn) {
|
||||
invoker.setEnabled(true);
|
||||
frame.dispose();
|
||||
} else if (actionEvent.getSource() == downloadbtn) {
|
||||
int result = JOptionPane.showConfirmDialog(frame, "All existing PSARC dumps will be deleted and replaced by the new ones.\nThis download could take several minutes. Do you want to continue?", "Download Game Assets", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
|
||||
if (result == JOptionPane.NO_OPTION) {return;}
|
||||
System.out.println("User requested download of assets. Deleting existing PSARCs");
|
||||
new File(Main.inpath + "data.psarc").delete();
|
||||
new File(Main.inpath + "data01.psarc").delete();
|
||||
new File(Main.inpath + "data02.psarc").delete();
|
||||
new File(Main.inpath + "dlc1.psarc").delete();
|
||||
new File(Main.inpath + "dlc2.psarc").delete();
|
||||
|
||||
Main.ArcTarget type;
|
||||
Main.ArcKey key;
|
||||
if (baseRad.isSelected()) {
|
||||
type = Main.ArcTarget.BASE;
|
||||
key = Main.ArcKey.BASE;
|
||||
System.out.println("Begin download of data (Game version 1.0)");
|
||||
} else
|
||||
if (patchRad.isSelected()) {
|
||||
type = Main.ArcTarget.LATEST;
|
||||
key = Main.ArcKey.LATEST;
|
||||
System.out.println("Begin download of data02 (Game version 1.04)");
|
||||
} else
|
||||
if (hdRad.isSelected()) {
|
||||
type = Main.ArcTarget.ADDON_HD;
|
||||
key = Main.ArcKey.ADDON_HD;
|
||||
System.out.println("Begin download of dlc1 (HD DLC)");
|
||||
} else
|
||||
if (furyRad.isSelected()) {
|
||||
type = Main.ArcTarget.ADDON_HD_FURY;
|
||||
key = Main.ArcKey.ADDON_HD_FURY;
|
||||
System.out.println("Begin download of dlc2 (Fury DLC)");
|
||||
} else {
|
||||
return; // fire hydrant
|
||||
}
|
||||
|
||||
frame.dispose();
|
||||
invoker.setVisible(false);
|
||||
|
||||
Thread downloaderPopupThread = new Thread(new Runnable() { // run on separate thread to prevent GUI freezing
|
||||
@Override
|
||||
public void run() {
|
||||
// download file
|
||||
boolean downloader = new Fozzie().DownloadFile(type.toString(), Main.inpath, "asset.pkg");
|
||||
if (!downloader) {
|
||||
// cleanup
|
||||
new File(Main.inpath + "asset.pkg").delete();
|
||||
|
||||
// restore controls
|
||||
invoker.setEnabled(true);
|
||||
invoker.setVisible(true);
|
||||
invoker.toFront();
|
||||
invoker.repaint();
|
||||
return;
|
||||
}
|
||||
|
||||
// dump contents
|
||||
System.out.println("Extracting asset.pkg");
|
||||
Process p;
|
||||
try {
|
||||
if (!Main.windows) {p = Runtime.getRuntime().exec(new String[]{"bash","-c","cd " + Main.inpath + ";wine pkg2zip.exe -x asset.pkg " + key.toString()});}
|
||||
else {p = Runtime.getRuntime().exec(new String[]{Main.inpath + "pkg2zip.exe", "-x", "asset.pkg", key.toString()}, null, new File(Main.inpath));
|
||||
InputStream debugin = new BufferedInputStream(p.getInputStream());
|
||||
FileOutputStream debugout = new FileOutputStream(Main.inpath + "log1.txt");
|
||||
int c;
|
||||
while ((c = debugin.read()) != -1) {
|
||||
debugout.write(c);
|
||||
}
|
||||
debugin.close();
|
||||
debugout.close();
|
||||
} //inpath cannot change here
|
||||
p.waitFor();
|
||||
} catch (Exception e) {
|
||||
System.out.println(e.getMessage());
|
||||
JOptionPane.showMessageDialog(invoker, "CRITICAL FAILURE: " + e.getMessage(), "Fatal Error", JOptionPane.ERROR_MESSAGE);
|
||||
new File(Main.inpath + "asset.pkg").delete();
|
||||
invoker.setEnabled(true);
|
||||
invoker.setVisible(true);
|
||||
invoker.toFront();
|
||||
invoker.repaint();
|
||||
return;
|
||||
}
|
||||
|
||||
// decrypt
|
||||
System.out.println("Decrypting asset.pkg");
|
||||
String extracted;
|
||||
String name;
|
||||
if (type == Main.ArcTarget.BASE) {
|
||||
extracted = "app/PCSA00015";
|
||||
name = "data.psarc";
|
||||
} else if (type == Main.ArcTarget.LATEST) {
|
||||
extracted = "patch/PCSA00015";
|
||||
name = "data02.psarc";
|
||||
} else if (type == Main.ArcTarget.ADDON_HD) {
|
||||
extracted = "addcont/PCSA00015/DLC1W2048PACKAGE";
|
||||
name = "dlc1.psarc";
|
||||
} else if (type == Main.ArcTarget.ADDON_HD_FURY) {
|
||||
extracted = "addcont/PCSA00015/DLC2W2048PACKAGE";
|
||||
name = "dlc2.psarc";
|
||||
} else {
|
||||
System.out.println("Internal Error: Bert got dementia. Get a programmer!");
|
||||
JOptionPane.showMessageDialog(invoker, "Internal Error: Bert got dementia. Get a programmer!", "Fatal Error", JOptionPane.ERROR_MESSAGE);
|
||||
new File(Main.inpath + "asset.pkg").delete();
|
||||
new File(Main.inpath + "app/").delete();
|
||||
new File(Main.inpath + "patch/").delete();
|
||||
new File(Main.inpath + "addcont/").delete();
|
||||
invoker.setEnabled(true);
|
||||
invoker.setVisible(true);
|
||||
invoker.toFront();
|
||||
invoker.repaint();
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (!Main.windows) {p = Runtime.getRuntime().exec(new String[]{"bash","-c","cd " + Main.inpath + ";wine psvpfsparser.exe -i " + extracted + " -o ./temp/ -z " + key.toString() + " -f cma.henkaku.xyz"});}
|
||||
else {p = Runtime.getRuntime().exec(new String[]{Main.inpath + "psvpfsparser.exe", "-i", extracted, "-o", "./temp/", "-z", key.toString(), "-f", "cma.henkaku.xyz"}, null, new File(Main.inpath));}
|
||||
p.waitFor();
|
||||
} catch (Exception e) {
|
||||
System.out.println(e.getMessage());
|
||||
JOptionPane.showMessageDialog(invoker, "CRITICAL FAILURE: " + e.getMessage(), "Fatal Error", JOptionPane.ERROR_MESSAGE);
|
||||
new File(Main.inpath + "asset.pkg").delete();
|
||||
new File(Main.inpath + "app/").delete();
|
||||
new File(Main.inpath + "patch/").delete();
|
||||
new File(Main.inpath + "addcont/").delete();
|
||||
invoker.setEnabled(true);
|
||||
invoker.setVisible(true);
|
||||
invoker.toFront();
|
||||
invoker.repaint();
|
||||
return;
|
||||
}
|
||||
|
||||
// stage & cleanup
|
||||
System.out.println("Cleaning up");
|
||||
new File(Main.inpath + "asset.pkg").delete();
|
||||
new File(Main.inpath + "temp/PSP2/" + name).renameTo(new File(Main.inpath + name));
|
||||
Main.deleteDir(new File(Main.inpath + "addcont/"));
|
||||
Main.deleteDir(new File(Main.inpath + "patch/"));
|
||||
Main.deleteDir(new File(Main.inpath + "app/"));
|
||||
Main.deleteDir(new File(Main.inpath + "temp/"));
|
||||
|
||||
// restore controls
|
||||
JOptionPane.showMessageDialog(frame, "Assets downloaded successfully.", "Download Complete", JOptionPane.INFORMATION_MESSAGE);
|
||||
invoker.setEnabled(true);
|
||||
invoker.setVisible(true);
|
||||
invoker.toFront();
|
||||
invoker.repaint();
|
||||
}
|
||||
});
|
||||
downloaderPopupThread.start();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -16,8 +16,10 @@
|
|||
* along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
*/
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.*;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
|
@ -27,6 +29,7 @@ import java.nio.file.Paths;
|
|||
import java.nio.file.StandardCopyOption;
|
||||
|
||||
public class Fozzie {
|
||||
BufferedImage windowIcon;
|
||||
private JFrame frame = new JFrame();
|
||||
public JProgressBar progressBar;
|
||||
private JPanel frameContainer;
|
||||
|
@ -36,21 +39,23 @@ public class Fozzie {
|
|||
private int contentLength;
|
||||
private InputStream inputStream;
|
||||
|
||||
//public File output;
|
||||
|
||||
public boolean backgroundDone = false;
|
||||
|
||||
boolean DownloadFile(String url, String odir, String oname) {
|
||||
//output = o;
|
||||
|
||||
frame.add(frameContainer);
|
||||
frame.setSize(300, 100);
|
||||
frame.setTitle("Firestar Mod Manager");
|
||||
frame.setTitle("Download in Progress");
|
||||
frame.setResizable(false);
|
||||
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
|
||||
frame.setLayout(new GridLayout());
|
||||
frame.setLocationRelativeTo(null);
|
||||
frame.setAlwaysOnTop(true);
|
||||
try {
|
||||
windowIcon = ImageIO.read(Main.class.getResourceAsStream("/titleIcon.png"));
|
||||
frame.setIconImage(windowIcon);
|
||||
} catch (IOException e) {
|
||||
System.out.println("ERROR: Failed to find /resources/titleIcon.png. Window will not have an icon.");
|
||||
}
|
||||
frame.setVisible(true);
|
||||
|
||||
label.setText("Downloading \"" + oname + "\"");
|
||||
|
|
|
@ -31,17 +31,48 @@ public class Main {
|
|||
// Build Information
|
||||
public static final String vstr = "Release 1.3";
|
||||
public static final String vcode = "Tetsuo";
|
||||
public static final int vint = 0;
|
||||
public static final int vint = 1;
|
||||
|
||||
// User Settings
|
||||
// TODO: replace with user preference when config i/o is done
|
||||
// also please double check that outpath is actually valid
|
||||
public static String outpath = System.getProperty("user.home") + "/.firestar/out/"; //game assets location
|
||||
public static String inpath = System.getProperty("user.home") + "/.firestar/"; //game assets location
|
||||
public final static String inpath = System.getProperty("user.home") + "/.firestar/"; //firestar folder -- do not change this
|
||||
public static boolean repatch; //are we in compat mode?
|
||||
public static boolean windows; //True = windows
|
||||
public static int confvint = vint;
|
||||
//public static String psarc; //sdk location
|
||||
|
||||
public enum ArcTarget { // install target for 2048, type used by downloader
|
||||
BASE("http://zeus.dl.playstation.net/cdn/UP9000/PCSA00015_00/NYEoaBGfiWymSEVZKxoyrKyBFsZNoFqxdyAIpZayZYuLLbCAArYrYXjPNhKCfXcONmhIZzZEeArycSrjiJOuNMWuWsDONUxMIQtMk.pkg"),
|
||||
LATEST("http://gs.ww.np.dl.playstation.net/ppkg/np/PCSA00015/PCSA00015_T5/a4b7d9e35ed56e86/UP9000-PCSA00015_00-WIPEOUT2048BASE0-A0104-V0100-059564fcab8ce66d19b5a563e92677e581313205-PE.pkg"),
|
||||
ADDON_HD("http://zeus.dl.playstation.net/cdn/UP9000/PCSA00015_00/JYMqGNXUKqHEyNLjbOgrWcJdnQJUMzgadRFWekbWFBXAwMeGikOyiHkXKogKIfqGhtNwKgmNWwwcrJORmRUTDzylBPwjGVnVjyDfh.pkg"),
|
||||
ADDON_HD_FURY("http://zeus.dl.playstation.net/cdn/UP9000/PCSA00015_00/IAoJQaDpySenBmQCKiqecEPMzSdPfPcdXupxZXLTYYTuRgtsdTaHxbeejwGKRQpjJOKBdMMFzSoeEhsHYxNUasQrEzkZPeBxUEqnp.pkg");
|
||||
|
||||
private final String value;
|
||||
ArcTarget(final String value) {this.value = value;};
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
public enum ArcKey { // install target for 2048, type used by downloader
|
||||
BASE("KO5ifR1dQ+eHBlgi6TI0Bdkf7hng6h8aYmRgYuHkCLQNn/9ufV+01fmzjNSmwuVHnO4dEBuN8cENACqVFcgA"),
|
||||
LATEST("KO5ifR1dQ+eHBlgi6TI0Bdkf7hng6h8aYmRgYuHkCLQNn/9ufV+01fmzjNSmwuVHnO4dEBuN8cENACqVFcgA"),
|
||||
ADDON_HD("KO5ifR1dQ+eHBlgi6TI0Bdnv4uNsGG5kYGIR4Ojs7ejuis9/anXfuudVNvzgdu+9z1z+asJojA9uAACgRhTl"),
|
||||
ADDON_HD_FURY("KO5ifR1dQ+eHBlgi6TI0Bdnv4uNsFG5kYGIR4Ojs7ejuis9/3fydBRm3eCJX7biz/vVTm/2jMT64AQCCYhVy");
|
||||
|
||||
private final String value;
|
||||
ArcKey(final String value) {this.value = value;};
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
public class Mod {
|
||||
public String path; // file name
|
||||
public int version = 1;
|
||||
|
@ -88,15 +119,6 @@ public class Main {
|
|||
fExo2 = new Font("Arial", Font.PLAIN, 12);
|
||||
}
|
||||
|
||||
// download dependencies if we know we haven't been here before
|
||||
// will also need to call this if a needed file is missing before use
|
||||
//
|
||||
// mostly for testing. will move to onboarding screen later
|
||||
if (!new File(System.getProperty("user.home") + "/.firestar/").isDirectory()) {
|
||||
new File(System.getProperty("user.home") + "/.firestar/").mkdirs();
|
||||
downloadDependencies();
|
||||
}
|
||||
|
||||
// check and load configs
|
||||
File fConf = new File(System.getProperty("user.home") + "/.firestar/firestar.conf");
|
||||
if (!fConf.isFile()) {
|
||||
|
@ -127,7 +149,7 @@ public class Main {
|
|||
try {
|
||||
JSONObject container = new JSONObject(new String(Files.readAllBytes(Paths.get(System.getProperty("user.home") + "/.firestar/firestar.conf"))));
|
||||
System.out.println(container.toString()); // debug
|
||||
int confvint = (int) container.get("version"); // used for converting configs between program versions later down the line
|
||||
confvint = (int) container.get("version"); // used for converting configs between program versions later down the line
|
||||
outpath = container.get("2048path").toString();
|
||||
repatch = (boolean) container.get("safemode");
|
||||
windows = (boolean) container.get("isWin32");
|
||||
|
@ -142,7 +164,7 @@ public class Main {
|
|||
try {
|
||||
JSONObject container = new JSONObject(new String(Files.readAllBytes(Paths.get(System.getProperty("user.home") + "/.firestar/firestar.conf"))));
|
||||
System.out.println(container.toString()); // debug
|
||||
int confvint = (int) container.get("version"); // used for converting configs between program versions later down the line
|
||||
confvint = (int) container.get("version"); // used for converting configs between program versions later down the line
|
||||
outpath = container.get("2048path").toString();
|
||||
repatch = (boolean) container.get("safemode");
|
||||
windows = (boolean) container.get("isWin32");
|
||||
|
@ -165,7 +187,15 @@ public class Main {
|
|||
file.delete();
|
||||
}
|
||||
|
||||
public static boolean downloadDependencies () {
|
||||
public static void downloadDependenciesBeforeSetVisible(JFrame invoker) {
|
||||
invoker.setVisible(false);
|
||||
Main.downloadDependencies();
|
||||
invoker.setVisible(true);
|
||||
confvint = vint;
|
||||
Main.writeConf();
|
||||
}
|
||||
|
||||
public static boolean downloadDependencies () { // todo: CHECKSUM!!!! THESE ARE EXECUTABLES!!!!!!!!!!! DON'T ALLOW MALWARE!!!!
|
||||
boolean downloader = new Fozzie().DownloadFile("https://bonkmaykr.worlio.com/http/firestar/firesdk.zip", System.getProperty("user.home") + "/.firestar/", "firesdk.zip");
|
||||
if (!downloader) {return false;}
|
||||
|
||||
|
@ -181,4 +211,8 @@ public class Main {
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean callDownloaderStatically (String url, String folder, String name) {
|
||||
return new Fozzie().DownloadFile(url, folder, name);
|
||||
}
|
||||
}
|
|
@ -176,7 +176,24 @@ public class MissPiggy implements ActionListener {
|
|||
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||
frame.setLayout(new GridLayout());
|
||||
frame.setLocationRelativeTo(null);
|
||||
frame.setVisible(true);
|
||||
|
||||
if (Main.confvint == 0){ // nag
|
||||
int result = JOptionPane.showConfirmDialog(frame, "Firestar needs to download additional software to function. Setup is automatic and will only take a few minutes.\nIf you select NO, you will have to download additional dependencies later on.\n\nContinue?", "Firestar Setup", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
|
||||
if (result == JOptionPane.YES_OPTION) {
|
||||
Thread downloaderPopupThread = new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Main.downloadDependenciesBeforeSetVisible(frame);
|
||||
}
|
||||
});
|
||||
downloaderPopupThread.start();
|
||||
} else {
|
||||
Main.writeConf(); // don't warn again
|
||||
frame.setVisible(true); // no fuck off
|
||||
}
|
||||
} else {
|
||||
frame.setVisible(true); // don't nag
|
||||
}
|
||||
}
|
||||
|
||||
public void InitializeModListStructure() {
|
||||
|
@ -369,6 +386,22 @@ public class MissPiggy implements ActionListener {
|
|||
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
|
||||
frame.setEnabled(false);
|
||||
|
||||
if (!new File(Main.inpath + "psp2psarc.exe").exists()) {
|
||||
JOptionPane.showMessageDialog(frame, "psp2psarc is missing.\nPlease select \"Get Dependencies\" in the Options menu.", "Error", JOptionPane.ERROR_MESSAGE);
|
||||
wrapUpDeployment();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!new File(Main.inpath + "data.psarc").exists() &&
|
||||
!new File(Main.inpath + "data01.psarc").exists() &&
|
||||
!new File(Main.inpath + "data02.psarc").exists() &&
|
||||
!new File(Main.inpath + "dlc1.psarc").exists() &&
|
||||
!new File(Main.inpath + "dlc2.psarc").exists()) {
|
||||
JOptionPane.showMessageDialog(frame, "You have no PSARCs.\nPlease dump your copy of WipEout 2048 or download a PSARC from the Options menu.", "Error", JOptionPane.ERROR_MESSAGE);
|
||||
wrapUpDeployment();
|
||||
return;
|
||||
}
|
||||
|
||||
// start
|
||||
new Gonzo().DeployMods(this);
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ public class Rowlf {
|
|||
"\n" +
|
||||
"Special thanks to:\n" +
|
||||
"ThatOneBonk, for Thallium and for modding help\n" +
|
||||
"Wirlaburla, for web hosting and being awesome\n" +
|
||||
"Wirlaburla, for web hosting and code assistance\n" +
|
||||
"Psygnosis, for making our favorite game ever\n" +
|
||||
"and to all the PSVita hackers who made this possible");
|
||||
informationText.setHighlighter(null);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="Waldorf">
|
||||
<grid id="27dc6" binding="frameContainer" layout-manager="GridLayoutManager" row-count="5" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<grid id="27dc6" binding="frameContainer" layout-manager="GridLayoutManager" row-count="6" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="10" left="25" bottom="10" right="25"/>
|
||||
<constraints>
|
||||
<xy x="20" y="20" width="500" height="400"/>
|
||||
</constraints>
|
||||
|
@ -14,7 +14,7 @@
|
|||
<children>
|
||||
<component id="3d88f" class="javax.swing.JButton" binding="okbtn">
|
||||
<constraints>
|
||||
<grid row="4" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||
<grid row="5" column="2" row-span="1" col-span="1" vsize-policy="6" hsize-policy="6" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Save"/>
|
||||
|
@ -22,7 +22,7 @@
|
|||
</component>
|
||||
<component id="86775" class="javax.swing.JTextField" binding="fOutpath">
|
||||
<constraints>
|
||||
<grid row="3" column="1" row-span="1" col-span="2" vsize-policy="0" hsize-policy="7" anchor="0" fill="1" indent="0" use-parent-layout="false">
|
||||
<grid row="4" column="1" row-span="1" col-span="2" vsize-policy="0" hsize-policy="7" anchor="0" fill="1" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="150" height="-1"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
|
@ -30,7 +30,7 @@
|
|||
</component>
|
||||
<component id="db731" class="javax.swing.JLabel">
|
||||
<constraints>
|
||||
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="4" fill="0" indent="0" use-parent-layout="false"/>
|
||||
<grid row="4" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="4" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Mod Export Path"/>
|
||||
|
@ -38,7 +38,7 @@
|
|||
</component>
|
||||
<component id="50d13" class="javax.swing.JButton" binding="cancelbtn">
|
||||
<constraints>
|
||||
<grid row="4" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||
<grid row="5" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="6" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Cancel"/>
|
||||
|
@ -46,7 +46,7 @@
|
|||
</component>
|
||||
<component id="252b3" class="javax.swing.JButton" binding="resetbtn">
|
||||
<constraints>
|
||||
<grid row="4" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||
<grid row="5" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="6" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Restore Defaults"/>
|
||||
|
@ -54,7 +54,7 @@
|
|||
</component>
|
||||
<component id="e2cd7" class="javax.swing.JLabel">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="3" col-span="1" vsize-policy="0" hsize-policy="0" anchor="4" fill="0" indent="0" use-parent-layout="false"/>
|
||||
<grid row="1" column="0" row-span="3" col-span="1" vsize-policy="0" hsize-policy="0" anchor="4" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value=".firestar Folder"/>
|
||||
|
@ -62,13 +62,49 @@
|
|||
</component>
|
||||
<component id="c68f2" class="javax.swing.JButton" binding="bOpenFolder">
|
||||
<constraints>
|
||||
<grid row="0" column="1" row-span="3" col-span="2" vsize-policy="0" hsize-policy="7" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
<grid row="1" column="1" row-span="3" col-span="2" vsize-policy="0" hsize-policy="7" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<label value="Browse"/>
|
||||
<text value="Browse"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="63b35" class="javax.swing.JLabel">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="4" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Downloads"/>
|
||||
</properties>
|
||||
</component>
|
||||
<grid id="1206c" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="0" column="1" row-span="1" col-span="2" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none">
|
||||
<color color="-16777216"/>
|
||||
</border>
|
||||
<children>
|
||||
<component id="92a60" class="javax.swing.JButton" binding="dwnSDKbtn">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Get Dependencies"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="87ead" class="javax.swing.JButton" binding="dwnARCbtn">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Auto-Download PSARCs"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
</children>
|
||||
</grid>
|
||||
</form>
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
* along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
*/
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
@ -39,6 +37,8 @@ public class Waldorf implements ActionListener {
|
|||
private JTextField fOutpath;
|
||||
private JButton resetbtn;
|
||||
private JButton bOpenFolder;
|
||||
private JButton dwnSDKbtn;
|
||||
private JButton dwnARCbtn;
|
||||
MissPiggy invoker;
|
||||
|
||||
public void Action(MissPiggy inv) {
|
||||
|
@ -65,6 +65,9 @@ public class Waldorf implements ActionListener {
|
|||
resetbtn.addActionListener(this);
|
||||
bOpenFolder.addActionListener(this);
|
||||
|
||||
dwnARCbtn.addActionListener(this);
|
||||
dwnSDKbtn.addActionListener(this);
|
||||
|
||||
fOutpath.setText(Main.outpath);
|
||||
|
||||
frame.setVisible(true);
|
||||
|
@ -91,7 +94,7 @@ public class Waldorf implements ActionListener {
|
|||
invoker.frame.setEnabled(true);
|
||||
frame.dispose();
|
||||
} else
|
||||
if (actionEvent.getSource() == resetbtn) {
|
||||
if (actionEvent.getSource() == resetbtn) { // todo: delete firesdk
|
||||
int result = JOptionPane.showConfirmDialog(frame,"Are you sure you want to redo the initial setup?", "Restore Default Settings", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
|
||||
if (result == JOptionPane.YES_OPTION) {
|
||||
new File(System.getProperty("user.home") + "/.firestar/firestar.conf").delete();
|
||||
|
@ -107,6 +110,21 @@ public class Waldorf implements ActionListener {
|
|||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
} else
|
||||
if (actionEvent.getSource() == dwnARCbtn) {
|
||||
new Bert(invoker.frame);
|
||||
frame.dispose();
|
||||
} else
|
||||
if (actionEvent.getSource() == dwnSDKbtn) {
|
||||
Thread downloaderPopupThread = new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Main.downloadDependenciesBeforeSetVisible(invoker.frame);
|
||||
invoker.frame.setEnabled(true);
|
||||
}
|
||||
});
|
||||
downloaderPopupThread.start();
|
||||
frame.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user