Compare commits
10 Commits
e0f9060f60
...
21647b3f83
Author | SHA1 | Date |
---|---|---|
Síle Ekaterin Liszka | 21647b3f83 | |
Síle Ekaterin Liszka | a7885d5862 | |
Síle Ekaterin Liszka | 92b45f09d9 | |
Síle Ekaterin Liszka | 774ac71c94 | |
Síle Ekaterin Liszka | f08859eac7 | |
Síle Ekaterin Liszka | f3d5776401 | |
Síle Ekaterin Liszka | b2f8512a2a | |
Síle Ekaterin Liszka | 3507652ba9 | |
Síle Ekaterin Liszka | 4f793c02b4 | |
Síle Ekaterin Liszka | 59edafcccd |
3
.mailmap
|
@ -1 +1,2 @@
|
|||
Sheila Aman <sheila@vulpine.house> Kiyoshi Aman <kiyoshi.aman@gmail.com>
|
||||
Síle Ekaterin Liszka <sheila@vulpine.house> Kiyoshi Aman <kiyoshi.aman@gmail.com>
|
||||
Síle Ekaterin Liszka <sheila@vulpine.house> Sheila Aman
|
||||
|
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.8 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
|
@ -0,0 +1,101 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Exdeath readme</title>
|
||||
<style>
|
||||
body {
|
||||
width: 60vw;
|
||||
margin: 0 auto;
|
||||
}
|
||||
@media (prefers-color-scheme: light) {
|
||||
body {
|
||||
color: #000;
|
||||
background-color: #F2F2F2;
|
||||
}
|
||||
a:link, a:visited {
|
||||
color: #05B;
|
||||
}
|
||||
a:hover, a:active {
|
||||
color: #50B;
|
||||
}
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body {
|
||||
color: #BBB;
|
||||
background-color: #000;
|
||||
}
|
||||
a:link, a:visited {
|
||||
color: #5BF;
|
||||
}
|
||||
a:hover, a:active {
|
||||
color: #B5F;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<head>
|
||||
<body>
|
||||
<h2>Exdeath</h2>
|
||||
<p>Exdeath is a patch compactor, a tool that applies multiple patches to a single target file. You will need the US version of the Gameboy Advance release, which you can find through your favourite search engine. </p>
|
||||
<p>The program should have the following file layout:</p>
|
||||
<ul>
|
||||
<li><tt>Exdeath.exe</tt> — the program itself.</li>
|
||||
<li><tt>libgcc_s_seh-1.dll</tt> — base library for programs built with GCC for Windows.</li>
|
||||
<li><tt>libstdc++-6.dll</tt> — base library for C++ programs.</li>
|
||||
<li><tt>libwinpthread-1.dll</tt> — library for threaded execution.</li>
|
||||
<li><tt>modes/</tt> — This directory contains patches which alter Final Fantasy V Advance gameplay significantly.</li>
|
||||
<li><tt>ned/</tt> — This directory contains patches which replace Neo Exdeath graphics.</li>
|
||||
<li><tt>platforms/qwindows.dll</tt> — Qt 6 platform library for Windows.</li>
|
||||
<li><tt>Qt6Core.dll</tt> — Qt 6 core library.</li>
|
||||
<li><tt>Qt6Gui.dll</tt> — Qt 6 GUI library.</li>
|
||||
<li><tt>Qt6Widgets.dll</tt> — Qt 6 widgets library.</li>
|
||||
<li><tt>readme.html</tt> — This document, which you are reading now.</li>
|
||||
<li><tt>readme.balance.html</tt> — Documentation for Ian's Rebalance patch.</li>
|
||||
<li><tt>readme.waddle.html</tt> — Documentation for The Great Waddler's Balance patch.</li>
|
||||
</ul>
|
||||
<p>This version provides the following features:</p>
|
||||
<h3>Main</h3>
|
||||
<p>The real meat of the program: the patches. As of 0.10.0, only the base game is built in to Exdeath. You can add more modes by placing them in the <tt>modes/</tt> directory. No support is provided for mode patches which did not come with Exdeath, however.</p>
|
||||
<ul>
|
||||
<li><b>Base</b>:<ul>
|
||||
<li>None — The base game.</li>
|
||||
<li><a href="http://jeffludwig.com/ff5a/download.php">Custom Classes</a> — A different remixed version by ludmeister.</li>
|
||||
<li><a href="readme.balance.html">Ian's Rebalance</a> — A remixed version that has a more subtle touch than the other three.</li>
|
||||
<li><a href="https://www.dropbox.com/s/rvf9l3pwbkelu42/ffvamod-doc.txt?dl=0">Balance</a> — A remixed version which adds the Hero Job and changes things up.</li>
|
||||
<li><a href="readme.waddle.html">Waddler Rebalance</a> — Yet another remixed version which aims to pump up some underwhelming Jobs without altering overall balance too much.</li>
|
||||
</ul></li>
|
||||
<li><b>Unlocked Jobs</b>: Unlocks all jobs directly out of the gate. Half of <a href="https://www.dropbox.com/s/ldlmpoepxk5nxgl/fiesta.ups?dl=0">wormsofcan's Fiesta patch</a>.</li>
|
||||
<li><b>FFT-style Portraits</b>: As the name implies, this option replaces the portraits with edited Final Fantasy Tactics portraits. (missing attribution, sorry.)</li>
|
||||
<li><b>Sound Restoration</b>: The <a href="http://www.romhacking.net/hacks/563/">Sound Restoration</a> hack modifies the soundfont and corrects some slow-down issues. It can cause artifacting, however. Older versions of VisualBoyAdvance will require the GBA BIOS file in order to run normally with this option.</li>
|
||||
<li><b>Save Config</b>: Saves your current configuration, including the ROM location. This configuration will be automatically loaded on next run.</li>
|
||||
</ul>
|
||||
<h3>Randomization</h3>
|
||||
<p>Randomizable components. Note that, as of 0.10.0, you can add your own Neo Exdeath patches by placing them in the <tt>ned/</tt> directory.</p>
|
||||
<ul>
|
||||
<li><b>Seed</b>: A number used to set the random number generator to a known state. The range accepted is 0 through 2<sup>31</sup> – 1, inclusive. Default value is the current time in seconds since 1 January 1970 00:00 UTC, divided by 3600.</li>
|
||||
<li><b>Neo ExDeath</b>: Pick graphics for the final boss.</li>
|
||||
<li><b>Abilities</b>: Shuffles abilities such that all Jobs learn five abilities and have a randomized command.</li>
|
||||
</ul>
|
||||
<h3>Innate abilities</h3>
|
||||
<p>Each checkbox applies the listed innate ability to all Jobs.</p>
|
||||
<h3>Multipliers</h3>
|
||||
<p>Multiply experience, ability point, or gil awards from battle. Experience and gil are hard-capped at 65,535 and ability points are hard-capped at 255, regardless of multiplier.</p>
|
||||
<h2>Notes</h2>
|
||||
<p>The 'Unlocked Jobs' patch includes a patch that allows <b>!Combine</b> ammo to drop prior to unlocking the sealed weapons. This alters the drop tables for the following enemies:</p>
|
||||
<ul>
|
||||
<li>Buckshot:<ul>
|
||||
<li>Black Flame</li>
|
||||
<li>Birostris</li>
|
||||
<li>Elm Gigas</li>
|
||||
</ul></li>
|
||||
<li>Blastshot:<ul>
|
||||
<li>Blood Slime</li>
|
||||
<li>Executor</li>
|
||||
</ul></li>
|
||||
<li>Blitzshot:<ul>
|
||||
<li>Mummy</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
HEADERS += src/exdeath.hh src/data.hh src/randodata.hh src/randomizer.hh src/fiesta.hh
|
||||
SOURCES += src/exdeath.cc src/main.cc src/randomizer.cc src/fiesta.cc
|
||||
HEADERS += src/exdeath.hh src/data.hh src/randodata.hh src/randomizer.hh src/fiesta.hh src/patch.hh
|
||||
SOURCES += src/exdeath.cc src/main.cc src/randomizer.cc src/fiesta.cc src/patch.cc
|
||||
RESOURCES += patches.qrc
|
||||
|
||||
CONFIG += release
|
||||
|
|
Before Width: | Height: | Size: 24 KiB |
85
patches.qrc
|
@ -3,10 +3,6 @@
|
|||
<qresource>
|
||||
<file>patches/fixnames.ips</file>
|
||||
<file>patches/unlock.ips</file>
|
||||
<file>patches/Ian's Balance Patch.ips</file>
|
||||
<file>patches/balance.ips</file>
|
||||
<file>patches/custom_classes.ips</file>
|
||||
<file>patches/waddle.ips</file>
|
||||
<file>patches/portraits.ips</file>
|
||||
<file>patches/sound_restoration.ips</file>
|
||||
<file>patches/xp/2x.ips</file>
|
||||
|
@ -20,86 +16,5 @@
|
|||
<file>patches/gil/8x.ips</file>
|
||||
<file>gallery/ned/random.png</file>
|
||||
<file>gallery/ned/vanilla.png</file>
|
||||
<file>patches/ned/abs_vir.ips</file>
|
||||
<file>gallery/ned/abs_vir.png</file>
|
||||
<file>patches/ned/barf.ips</file>
|
||||
<file>gallery/ned/barf.png</file>
|
||||
<file>patches/ned/biolizard.ips</file>
|
||||
<file>gallery/ned/biolizard.png</file>
|
||||
<file>patches/ned/BizarroParty.ips</file>
|
||||
<file>gallery/ned/BizarroParty.png</file>
|
||||
<file>patches/ned/cactuar.ips</file>
|
||||
<file>gallery/ned/cactuar.png</file>
|
||||
<file>patches/ned/cad.ips</file>
|
||||
<file>gallery/ned/cad.png</file>
|
||||
<file>patches/ned/chaos.ips</file>
|
||||
<file>gallery/ned/chaos.png</file>
|
||||
<file>patches/ned/chomp.ips</file>
|
||||
<file>gallery/ned/chomp.png</file>
|
||||
<file>patches/ned/classic.ips</file>
|
||||
<file>patches/ned/emperor.ips</file>
|
||||
<file>gallery/ned/emperor.png</file>
|
||||
<file>patches/ned/fancy.ips</file>
|
||||
<file>gallery/ned/fancy.png</file>
|
||||
<file>patches/ned/fiend_ned.ips</file>
|
||||
<file>gallery/ned/fiend_ned.png</file>
|
||||
<file>patches/ned/FiestaParty.ips</file>
|
||||
<file>gallery/ned/FiestaParty.png</file>
|
||||
<file>patches/ned/flammie1.ips</file>
|
||||
<file>gallery/ned/flammie1.png</file>
|
||||
<file>patches/ned/flammie2.ips</file>
|
||||
<file>gallery/ned/flammie2.png</file>
|
||||
<file>patches/ned/flavortown.ips</file>
|
||||
<file>gallery/ned/flavortown.png</file>
|
||||
<file>patches/ned/flanders.ips</file>
|
||||
<file>gallery/ned/flanders.png</file>
|
||||
<file>patches/ned/fly.ips</file>
|
||||
<file>gallery/ned/fly.png</file>
|
||||
<file>patches/ned/godzilla.ips</file>
|
||||
<file>gallery/ned/godzilla.png</file>
|
||||
<file>patches/ned/Jace.ips</file>
|
||||
<file>gallery/ned/Jace.png</file>
|
||||
<file>patches/ned/kefka.ips</file>
|
||||
<file>gallery/ned/kefka.png</file>
|
||||
<file>patches/ned/lavos-spawn.ips</file>
|
||||
<file>gallery/ned/lavos-spawn.png</file>
|
||||
<file>patches/ned/Majima.ips</file>
|
||||
<file>gallery/ned/Majima.png</file>
|
||||
<file>patches/ned/MajimaFlipped.ips</file>
|
||||
<file>gallery/ned/MajimaFlipped.png</file>
|
||||
<file>patches/ned/mechagodzilla.ips</file>
|
||||
<file>gallery/ned/mechagodzilla.png</file>
|
||||
<file>patches/ned/metroid.ips</file>
|
||||
<file>gallery/ned/metroid.png</file>
|
||||
<file>patches/ned/neo-x-death.ips</file>
|
||||
<file>gallery/ned/neo-x-death.png</file>
|
||||
<file>patches/ned/NeoExChonk.ips</file>
|
||||
<file>gallery/ned/NeoExChonk.png</file>
|
||||
<file>patches/ned/neoexduck.ips</file>
|
||||
<file>gallery/ned/neoexduck.png</file>
|
||||
<file>patches/ned/NeoExDesert.ips</file>
|
||||
<file>gallery/ned/NeoExDesert.png</file>
|
||||
<file>patches/ned/nero_exdeath.ips</file>
|
||||
<file>gallery/ned/nero_exdeath.png</file>
|
||||
<file>patches/ned/omega_cannon.ips</file>
|
||||
<file>gallery/ned/omega_cannon.png</file>
|
||||
<file>patches/ned/pad.ips</file>
|
||||
<file>gallery/ned/pad.png</file>
|
||||
<file>patches/ned/rs3boss.ips</file>
|
||||
<file>gallery/ned/rs3boss.png</file>
|
||||
<file>patches/ned/shaq.ips</file>
|
||||
<file>gallery/ned/shaq.png</file>
|
||||
<file>patches/ned/targetned.ips</file>
|
||||
<file>gallery/ned/targetned.png</file>
|
||||
<file>patches/ned/thomas.ips</file>
|
||||
<file>gallery/ned/thomas.png</file>
|
||||
<file>patches/ned/train.ips</file>
|
||||
<file>gallery/ned/train.png</file>
|
||||
<file>patches/ned/tree.ips</file>
|
||||
<file>gallery/ned/tree.png</file>
|
||||
<file>patches/ned/yiazmat.ips</file>
|
||||
<file>gallery/ned/yiazmat.png</file>
|
||||
<file>patches/ned/Zeromus.ips</file>
|
||||
<file>gallery/ned/Zeromus.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
124
readme.html
|
@ -1,124 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Exdeath 0.2 readme</title>
|
||||
<style>
|
||||
body {
|
||||
width: 60vw;
|
||||
margin: 0 auto;
|
||||
}
|
||||
@media (prefers-color-scheme: light) {
|
||||
body {
|
||||
color: #000;
|
||||
background-color: #F2F2F2;
|
||||
}
|
||||
a:link, a:visited {
|
||||
color: #05B;
|
||||
}
|
||||
a:hover, a:active {
|
||||
color: #50B;
|
||||
}
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body {
|
||||
color: #BBB;
|
||||
background-color: #000;
|
||||
}
|
||||
a:link, a:visited {
|
||||
color: #5BF;
|
||||
}
|
||||
a:hover, a:active {
|
||||
color: #B5F;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<head>
|
||||
<body>
|
||||
<h2>Exdeath</h2>
|
||||
<p>Exdeath is a patch compactor, a tool that applies multiple patches to a single target file. You will need the US version of the Gameboy Advance release, which you can find through your favourite search engine. This version provides the following features:</p>
|
||||
<h3>Main</h3>
|
||||
<p>The real meat of the program: the patches.</p>
|
||||
<ul>
|
||||
<li><b>Base</b>:<ul>
|
||||
<li>None — The base game.</li>
|
||||
<li><a href="readme.waddle.html">Waddle Rebalance</a> — Yet another remixed version which aims to pump up some underwhelming Jobs without altering overall balance too much.</li>
|
||||
<li><a href="https://www.dropbox.com/s/rvf9l3pwbkelu42/ffvamod-doc.txt?dl=0">Balance</a> — A remixed version which adds the Hero Job and changes things up.</li>
|
||||
<li><a href="http://jeffludwig.com/ff5a/download.php">Custom Classes</a> — A different remixed version by ludmeister.</li>
|
||||
</ul></li>
|
||||
<li><b>Unlocked Jobs</b>: Unlocks all jobs directly out of the gate. Half of <a href="https://www.dropbox.com/s/ldlmpoepxk5nxgl/fiesta.ups?dl=0">wormsofcan's Fiesta patch</a>.</li>
|
||||
<li><b>FFT-style Portraits</b>: As the name implies, this option replaces the portraits with edited Final Fantasy Tactics portraits. (missing attribution, sorry.)</li>
|
||||
<li><b>Sound Restoration</b>: The <a href="http://www.romhacking.net/hacks/563/">Sound Restoration</a> hack modifies the soundfont and corrects some slow-down issues. It can cause artifacting, however. Older versions of VisualBoyAdvance will require the GBA BIOS file in order to run normally with this option.</li>
|
||||
<li><b>Save Config</b>: Saves your current configuration, including the ROM location. This configuration will be automatically loaded on next run.</li>
|
||||
</ul>
|
||||
<h3>Randomization</h3>
|
||||
<p>Randomizable components.</p>
|
||||
<ul>
|
||||
<li><b>Seed</b>: A number used to set the random number generator to a known state. The range accepted is 0 through 2<sup>31</sup> – 1, inclusive. Default value is the current time in seconds since 1 January 1970 00:00 UTC, divided by 3600.</li>
|
||||
<li><b>Neo ExDeath</b>: Pick graphics for the final boss.<ul>
|
||||
<li>Random: Chooses a random NED.</li>
|
||||
<li>Vanilla: The original.</li>
|
||||
<li>Absolute Virtue: From Final Fantasy XI: Chains of Promathia.</li>
|
||||
<li>Barf: From Earthbound.</li>
|
||||
<li>Biolizard: A biolizard from Sonic Adventure 2.</li>
|
||||
<li>Cactuar: Jumbotender/gigantuar from Final Fantasy VI Advance.</li>
|
||||
<li>Chain Chomp: From the Mario series.</li>
|
||||
<li>Chaos: From Final Fantasy I: Dawn of Souls.</li>
|
||||
<!--<li>Classic: Assembled from Final Fantasy I bosses.</li>-->
|
||||
<li>Cloud of Darkness: From Final Fantasy III.</li>
|
||||
<li>Doomtrain: From Final Fantasy VI.</li>
|
||||
<li>Emperor: From Final Fantasy II.</li>
|
||||
<li>Fat Chocobo: From Final Fantasy VII.</li>
|
||||
<li>Fiends: From Final Fantasy IV.</li>
|
||||
<li>Flammie: From Secret of Mana; the Mana Beast versions.</li>
|
||||
<li>Fly: From Breath of Fire 2.</li>
|
||||
<li>Godzilla: From Super Godzilla.</li>
|
||||
<li>Guy Fieri: From AFK.</li>
|
||||
<li>Jace: From Magic: the Gathering.</li>
|
||||
<li>Kefka: From Final Fantasy VI.</li>
|
||||
<li>Lavos Spawn: From Chrono Trigger.</li>
|
||||
<li>Majima: From Yakuza VIII.</li>
|
||||
<li>Majima (flipped): Above, but flipped.</li>
|
||||
<li>MechaGodzilla: From Super Godzilla.</li>
|
||||
<li>Metroid: From Super Metroid.</li>
|
||||
<li>Neo ExDesert: From this very game.</li>
|
||||
<li>Neo ExDuck: From "A Duck Amuck".</li>
|
||||
<li>Neo X Death: From The Matrix, Megaman X, and Super Castlevania IV.</li>
|
||||
<li>Neon Exdeath: From the Mobile/PC port of Final Fantasy V.</li>
|
||||
<li>Nero Exdeath: Did you know that the critically-acclaimed MMORPG Final Fantasy XIV has an expanded free trial? you can play through the entirety of "A Realm Reborn" and the award-winning "Heavensward" expansion up to level 60 for <b>free</b> with no restriction on playtime.</li>
|
||||
<li>Omega Larboard Cannon: From Final Fantasy XIV.</li>
|
||||
<li>Puzzle & Dragon: From the Puzzle And Dragon crossover.</li>
|
||||
<li>Romancing SaGa 3 Boss: Guess where.</li>
|
||||
<li>Shaq: Himself.</li>
|
||||
<li>Stupid Sexy Flanders: From The Simpsons.</li>
|
||||
<li>Territorial Oak: From Earthbound?</li>
|
||||
<li>Warriors of Light: From a Japanese artist who flippped the perspective of the fight with Gilgamesh and Enkidu on the ship.</li>
|
||||
<li>Warriors of Light (fiesta): Above, but edited to resemble a more normal Fiesta party.</li>
|
||||
<li>Yiazmat: From Final Fantasy: Record Keeper.</li>
|
||||
</ul></li>
|
||||
<li><b>Abilities</b>: Shuffles abilities such that all Jobs learn five abilities and have a randomized command.</li>
|
||||
</ul>
|
||||
<p>There is one graphic present that will not be enumerated. You'll know it when you see it.</p>
|
||||
<h3>Innate abilities</h3>
|
||||
<p>Each checkbox applies the listed innate ability to all Jobs.</p>
|
||||
<h3>Multipliers</h3>
|
||||
<p>Multiply experience, ability point, or gil awards from battle. Experience and gil are hard-capped at 65,535 and ability points are hard-capped at 255, regardless of multiplier.</p>
|
||||
<h2>Notes</h2>
|
||||
<p>The 'Unlocked Jobs' mode includes a patch that allows <b>!Combine</b> ammo to drop prior to unlocking the sealed weapons. This alters the drop tables for the following enemies:</p>
|
||||
<ul>
|
||||
<li>Buckshot:<ul>
|
||||
<li>Black Flame</li>
|
||||
<li>Birostris</li>
|
||||
<li>Elm Gigas</li>
|
||||
</ul></li>
|
||||
<li>Blastshot:<ul>
|
||||
<li>Blood Slime</li>
|
||||
<li>Executor</li>
|
||||
</ul></li>
|
||||
<li>Blitzshot:<ul>
|
||||
<li>Mummy</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
|
126
src/exdeath.cc
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Sheila Aman.
|
||||
* Copyright (c) 2023, Síle Ekaterin Liszka.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -27,8 +27,10 @@
|
|||
|
||||
#include <QApplication>
|
||||
#include <QTextStream>
|
||||
#include <iostream>
|
||||
|
||||
#include "exdeath.hh"
|
||||
#include "patch.hh"
|
||||
|
||||
#include <cstring>
|
||||
#include <cstdlib>
|
||||
|
@ -36,7 +38,7 @@
|
|||
#include <ctime>
|
||||
#include <climits>
|
||||
|
||||
Exdeath::Exdeath(QSettings *cfg, QWidget *parent) : QWidget(parent) {
|
||||
Exdeath::Exdeath(QSettings *cfg, QList<QPair<QString,QString> > modes, QList<QPair<QString,QString> > NEDs, QWidget *parent) : QWidget(parent) {
|
||||
error = new QErrorMessage();
|
||||
filename = nullptr;
|
||||
_cfg = cfg;
|
||||
|
@ -51,15 +53,15 @@ Exdeath::Exdeath(QSettings *cfg, QWidget *parent) : QWidget(parent) {
|
|||
layColumns->addLayout(layLeft);
|
||||
layColumns->addLayout(layRight);
|
||||
|
||||
initMain();
|
||||
initRandom();
|
||||
initMain(modes);
|
||||
initRandom(NEDs);
|
||||
initInnates();
|
||||
initMulti();
|
||||
initPreview();
|
||||
initConfig();
|
||||
|
||||
connect(btnROM, &QPushButton::clicked, this, &Exdeath::btnROM_clicked);
|
||||
connect(selMode, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &Exdeath::selMode_index);
|
||||
connect(selMode, QOverload<int>::of(&QComboBox::activated), this, &Exdeath::selMode_index);
|
||||
connect(selNED, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &Exdeath::selNED_index);
|
||||
connect(btnApply, &QPushButton::clicked, this, &Exdeath::btnApply_clicked);
|
||||
connect(btnSave, &QPushButton::clicked, this, &Exdeath::btnSave_clicked);
|
||||
|
@ -67,7 +69,7 @@ Exdeath::Exdeath(QSettings *cfg, QWidget *parent) : QWidget(parent) {
|
|||
|
||||
Exdeath::~Exdeath() {}
|
||||
|
||||
void Exdeath::initMain(void) {
|
||||
void Exdeath::initMain(QList<QPair<QString,QString> > modes) {
|
||||
layMain = new QGridLayout(this);
|
||||
grpMain = new QGroupBox("Main");
|
||||
grpMain->setLayout(layMain);
|
||||
|
@ -79,10 +81,12 @@ void Exdeath::initMain(void) {
|
|||
txtMode = new QLabel("Mode:");
|
||||
selMode = new QComboBox();
|
||||
selMode->addItem("Base");
|
||||
selMode->addItem("Ian's Balance", "Ian's Balance Patch.ips");
|
||||
selMode->addItem("Waddler Rebalance", "waddle.ips");
|
||||
selMode->addItem("Balance", "balance.ips");
|
||||
selMode->addItem("Custom Classes", "custom_classes.ips");
|
||||
|
||||
for (int i = 0; i < modes.size(); i++) {
|
||||
QPair<QString,QString> file = modes.at(i);
|
||||
|
||||
selMode->addItem(file.first, file.second);
|
||||
}
|
||||
|
||||
txtUnlock = new QLabel("Unlock Jobs:");
|
||||
chkUnlock = new QCheckBox("Yes");
|
||||
|
@ -111,7 +115,7 @@ void Exdeath::initMain(void) {
|
|||
layMain->addWidget(btnSave, 5, 1);
|
||||
}
|
||||
|
||||
void Exdeath::initRandom(void) {
|
||||
void Exdeath::initRandom(QList<QPair<QString,QString> > NEDs) {
|
||||
layRandom = new QFormLayout(this);
|
||||
grpRandom = new QGroupBox("Randomization");
|
||||
grpRandom->setLayout(layRandom);
|
||||
|
@ -127,47 +131,11 @@ void Exdeath::initRandom(void) {
|
|||
selNED->addItem("Random", "random");
|
||||
selNED->addItem("Vanilla", "vanilla");
|
||||
selNED->setCurrentIndex(1);
|
||||
selNED->addItem("Absolute Virtue", "abs_vir");
|
||||
selNED->addItem("Barf", "barf");
|
||||
selNED->addItem("Biolizard", "biolizard");
|
||||
selNED->addItem("Cactuar", "cactuar");
|
||||
selNED->addItem("Chain Chomp", "chomp");
|
||||
//selNED->addItem("Classic", "classic");
|
||||
selNED->addItem("Chaos", "chaos");
|
||||
selNED->addItem("Cloud of Darkness", "cad");
|
||||
selNED->addItem("Doomtrain", "train");
|
||||
selNED->addItem("Emperor", "emperor");
|
||||
selNED->addItem("Fat Chocobo", "NeoExChonk");
|
||||
selNED->addItem("Fiends", "fiend_ned");
|
||||
selNED->addItem("Flammie (1)", "flammie1");
|
||||
selNED->addItem("Flammie (2)", "flammie2");
|
||||
selNED->addItem("Fly", "fly");
|
||||
selNED->addItem("Godzilla", "godzilla");
|
||||
selNED->addItem("Guy Fieri", "flavortown");
|
||||
selNED->addItem("Jace", "Jace");
|
||||
selNED->addItem("Lavos Spawn", "lavos-spawn");
|
||||
selNED->addItem("Kefka", "kefka");
|
||||
selNED->addItem("Majima", "Majima");
|
||||
selNED->addItem("Majima (flipped)", "MajimaFlipped");
|
||||
selNED->addItem("MechaGodzilla", "mechagodzilla");
|
||||
selNED->addItem("Metroid", "metroid");
|
||||
selNED->addItem("Neo X Death", "neo-x-death");
|
||||
selNED->addItem("Neo ExDesert", "NeoExDesert");
|
||||
selNED->addItem("Neo ExDuck", "neoexduck");
|
||||
selNED->addItem("Neon ExDeath", "fancy");
|
||||
selNED->addItem("Nero Exdeath", "nero_exdeath");
|
||||
selNED->addItem("Omega Larboard Cannon", "omega_cannon");
|
||||
selNED->addItem("Puzzle & Dragon", "pad");
|
||||
selNED->addItem("Romancing SaGa 3 Boss", "rs3boss");
|
||||
selNED->addItem("Shaq", "shaq");
|
||||
selNED->addItem("Stupid Sexy Flanders", "flanders");
|
||||
selNED->addItem("TargetNED", "targetned");
|
||||
selNED->addItem("Territorial Oak", "tree");
|
||||
selNED->addItem("Thomas the Tank Engine", "thomas");
|
||||
selNED->addItem("Warriors of Light", "BizarroParty");
|
||||
selNED->addItem("Warriors of Light (Fiesta)", "FiestaParty");
|
||||
selNED->addItem("Yiazmat", "yiazmat");
|
||||
selNED->addItem("Zeromus", "Zeromus");
|
||||
for (int i = 0; i < NEDs.size(); i++) {
|
||||
QPair<QString,QString> file = NEDs.at(i);
|
||||
|
||||
selNED->addItem(file.first, file.second);
|
||||
}
|
||||
layRandom->addRow("Neo ExDeath:", selNED);
|
||||
|
||||
chkRandom = new QCheckBox("Yes");
|
||||
|
@ -282,7 +250,7 @@ void Exdeath::initConfig(void) {
|
|||
}
|
||||
// don't load config from old versions.
|
||||
if (version.compare(cfgVersion) != 0) {
|
||||
out << "doesn't match!\n";
|
||||
std::cout << "doesn't match!\n";
|
||||
return;
|
||||
}
|
||||
QString temp = _cfg->value("rom/filename", "").toString();
|
||||
|
@ -311,40 +279,30 @@ void Exdeath::initConfig(void) {
|
|||
}
|
||||
|
||||
void Exdeath::selNED_index(int idx) {
|
||||
imgPreview = new QPixmap(":/gallery/ned/" + selNED->itemData(idx).toString() + ".png");
|
||||
QString filename = selNED->itemData(idx).toString();
|
||||
if (filename == "random") {
|
||||
filename = ":/gallery/ned/random.png";
|
||||
} else if (filename == "vanilla") {
|
||||
filename = ":/gallery/ned/vanilla.png";
|
||||
} else {
|
||||
filename += ".png";
|
||||
}
|
||||
imgPreview = new QPixmap(filename);
|
||||
txtPreview->setPixmap(*imgPreview);
|
||||
}
|
||||
|
||||
void Exdeath::selMode_index(int idx) {
|
||||
bool random_ok = false;
|
||||
bool unlock_ok = false;
|
||||
bool innate_ok = false;
|
||||
bool sound_ok = false;
|
||||
bool ned_ok = false;
|
||||
if (idx == 0) return;
|
||||
int ret = QMessageBox::warning(
|
||||
this,
|
||||
tr("Exdeath"),
|
||||
tr("Using a mode other than Base may cause innate abilities, ability randomization, or Neo Exdeath graphic changes to break the game.\nAre you sure you want to do this?"),
|
||||
QMessageBox::Yes | QMessageBox::No
|
||||
);
|
||||
|
||||
if (idx < 3) {
|
||||
unlock_ok = true;
|
||||
innate_ok = true;
|
||||
sound_ok = true;
|
||||
ned_ok = true;
|
||||
if (ret == QMessageBox::No) {
|
||||
selMode->setCurrentIndex(0);
|
||||
}
|
||||
if (idx <= 1) {
|
||||
random_ok = true;
|
||||
}
|
||||
|
||||
chkRandom->setEnabled(random_ok);
|
||||
|
||||
chkUnlock->setEnabled(unlock_ok);
|
||||
chkSound->setEnabled(sound_ok);
|
||||
|
||||
selNED->setEnabled(ned_ok);
|
||||
|
||||
chkPassages->setEnabled(innate_ok);
|
||||
chkPitfalls->setEnabled(innate_ok);
|
||||
chkLiteStep->setEnabled(innate_ok);
|
||||
chkDash->setEnabled(innate_ok);
|
||||
chkLearning->setEnabled(innate_ok);
|
||||
innates_enabled = innate_ok;
|
||||
}
|
||||
|
||||
void Exdeath::btnSave_clicked(bool trigger) {
|
||||
|
@ -410,7 +368,11 @@ void Exdeath::btnApply_clicked(bool trigger) {
|
|||
QString output = QFileDialog::getSaveFileName(
|
||||
this,
|
||||
"Select target ROM image",
|
||||
#ifdef __WIN32__
|
||||
QApplication::applicationDirPath(),
|
||||
#else
|
||||
QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation)[0],
|
||||
#endif
|
||||
"GBA ROM images (*.gba)"
|
||||
);
|
||||
QFile::copy(filename, output);
|
||||
|
@ -422,7 +384,7 @@ void Exdeath::btnApply_clicked(bool trigger) {
|
|||
patches << ":/patches/fixnames.ips";
|
||||
|
||||
if (mode > 0) {
|
||||
patches << ":/patches/" + selMode->itemData(mode).toString();
|
||||
patches << selMode->itemData(mode).toString();
|
||||
}
|
||||
if (chkUnlock->isChecked() && chkUnlock->isEnabled()) {
|
||||
patches << ":/patches/unlock.ips";
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
#include <QGroupBox>
|
||||
#include <QIODevice>
|
||||
#include <QLabel>
|
||||
#include <QList>
|
||||
#include <QMessageBox>
|
||||
#include <QPixmap>
|
||||
#include <QPushButton>
|
||||
#include <QRadioButton>
|
||||
|
@ -32,7 +34,7 @@
|
|||
|
||||
class Exdeath : public QWidget {
|
||||
public:
|
||||
Exdeath(QSettings *cfg, QWidget *parent = nullptr);
|
||||
Exdeath(QSettings *cfg, QList<QPair<QString,QString> > modes, QList<QPair<QString,QString> > NEDs, QWidget *parent = nullptr);
|
||||
~Exdeath();
|
||||
|
||||
private:
|
||||
|
@ -105,9 +107,9 @@ private:
|
|||
QPixmap *imgPreview;
|
||||
|
||||
// Initialization
|
||||
void initMain(void);
|
||||
void initMain(QList<QPair<QString,QString> > modes);
|
||||
void initInnates(void);
|
||||
void initRandom(void);
|
||||
void initRandom(QList<QPair<QString,QString> > NEDs);
|
||||
void initMulti(void);
|
||||
void initPreview(void);
|
||||
void initConfig(void);
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
/*
|
||||
* Copyright (c) 202BER, Sheila Aman.
|
||||
* Copyright (c) 2023, Síle Ekaterin Liszka.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
|
|
17
src/main.cc
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Sheila Aman.
|
||||
* Copyright (c) 2023, Síle Ekaterin Liszka.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -26,8 +26,10 @@
|
|||
*/
|
||||
|
||||
#include "exdeath.hh"
|
||||
#include "patch.hh"
|
||||
|
||||
#include <QApplication>
|
||||
#include <iostream>
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
QApplication *app = new QApplication(argc, argv);
|
||||
|
@ -35,10 +37,19 @@ int main(int argc, char **argv) {
|
|||
QApplication::setOrganizationDomain("aerdan.org");
|
||||
QApplication::setApplicationName("Exdeath");
|
||||
QApplication::setApplicationDisplayName("Exdeath");
|
||||
QApplication::setApplicationVersion("0.9.1");
|
||||
QApplication::setApplicationVersion("0.10.0");
|
||||
|
||||
#ifdef __WIN32__
|
||||
QString path = QApplication::applicationDirPath();
|
||||
#else
|
||||
QString path = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation)[0];
|
||||
#endif
|
||||
QDir dir = QDir(path);
|
||||
QList<QPair<QString,QString> > modes = getPatchList(dir, PatchType::Mode);
|
||||
QList<QPair<QString,QString> > NEDs = getPatchList(dir, PatchType::NED);
|
||||
|
||||
QSettings *cfg = new QSettings();
|
||||
Exdeath *win = new Exdeath(cfg);
|
||||
Exdeath *win = new Exdeath(cfg, modes, NEDs);
|
||||
|
||||
win->show();
|
||||
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Síle Ekaterin Liszka.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the software nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "patch.hh"
|
||||
|
||||
QList<QPair<QString,QString> > getPatchList(QDir dir, PatchType type) {
|
||||
QList<QPair<QString,QString> > list;
|
||||
|
||||
if (!dir.exists()) {
|
||||
return list;
|
||||
}
|
||||
if (type == PatchType::Mode) {
|
||||
dir.cd("modes");
|
||||
if (!dir.exists()) {
|
||||
return list;
|
||||
}
|
||||
} else if (type == PatchType::NED) {
|
||||
dir.cd("ned");
|
||||
if (!dir.exists()) {
|
||||
return list;
|
||||
}
|
||||
}
|
||||
dir.setFilter(QDir::Files | QDir::Readable);
|
||||
dir.setSorting(QDir::Name);
|
||||
|
||||
QFileInfoList files = dir.entryInfoList();
|
||||
|
||||
for (int i = 0; i < files.size(); i++) {
|
||||
QFileInfo file = files.at(i);
|
||||
|
||||
if (file.suffix() == "ips") {
|
||||
QString filename = file.canonicalPath() + "/" + file.completeBaseName() + ".ips";
|
||||
QPair<QString,QString> pair = {file.completeBaseName(), filename};
|
||||
|
||||
list.append(pair);
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|