Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

VitaGrafix: Difference between revisions

From GameBrew
No edit summary
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{#seo:
|title=Vita Homebrew Apps (Plugins) - GameBrew!
|title_mode=append
|image=vitagrafixvita.jpg
|image_alt=VitaGrafix
}}
{{Infobox Vita Homebrews
{{Infobox Vita Homebrews
|title=VitaGrafix
|title=VitaGrafix
|image=vitagrafixvita.jpg
|image=vitagrafix2.png
|description=Change games resolution/FPS cap.
|description=Change games resolution/FPS cap.
|author=Electry
|author=Electry
Line 14: Line 8:
|version=5.0.2
|version=5.0.2
|license=GPL-3.0
|license=GPL-3.0
|download=https://dlhb.gamebrew.org/vitahomebrews/vitagrafixvita.7z
|download=https://dlhb.gamebrew.org/vitahomebrews/vitagrafixvita.7z?k33p0fil35
|website=
|website=https://github.com/Electry/VitaGrafix/wiki/
|source=https://github.com/Electry/VitaGrafix
|source=https://github.com/Electry/VitaGrafix
}}
}}
'''VitaGrafix''' is allowing user to change games resolution/FPS cap.
{{#seo:
|title=Vita Homebrew Apps (Plugins) - GameBrew
|title_mode=append
|image=vitagrafix2.png
|image_alt=VitaGrafix
}}


==What is VitaGrafix?==
VitaGrafix is a taiHEN plugin that allows you to change resolution and FPS cap of PS Vita games (to get better visuals, higher FPS or longer battery life).
VitaGrafix is a taiHEN plugin that allows you to change resolution and FPS cap of PS Vita games (to get better visuals, higher FPS or longer battery life).


VitaGrafix was originally, in it’s early days, based on [https://github.com/Rinnegatamante/vitaRescale vitaRescale] by Rinnegatamante (which was unfortunately quickly abandoned), with hardcoded patches only for a dozen of games.
VitaGrafix was originally, in it’s early days, based on [https://github.com/Rinnegatamante/vitaRescale vitaRescale] by Rinnegatamante, with hardcoded patches only for a dozen of games.
 
The project has evolved quite a bit since then. It is now an independent taiHEN plugin with custom interpreter to easily support user-made patches.
 
The official [https://github.com/Electry/VitaGrafixPatchlist patchlist] contains support for over 50 games.


'''Note: Per-game patches are required. Some are easy to patch, others plainly impossible.'''
The project has evolved quite a bit since then. It is now an independent taiHEN plugin with custom interpreter to easily support user-made patches. The official [https://github.com/Electry/VitaGrafixPatchlist patchlist] contains support for over 50 games.


==What VitaGrafix does==
It patches eboot.bin executable on game start-up, allowing us to alter game's graphics initialization and runtime code. Because each game does this differently, per-game patches are required.
It patches eboot.bin executable on game start-up, allowing us to alter game’s graphics initialization and runtime code. Because each game does this differently, per-game patches are required.


==Media==
'''Note:''' Per-game patches are required. Some are easy to patch, others plainly impossible.
<youtube>LdrVZkVJ19c</youtube>


==Screenshots==
==Installation==
https://dlhb.gamebrew.org/vitahomebrews/vitagrafixvita-01.jpg
Download latest VitaGrafix.suprx and [[IoPlus Vita|ioPlus.skprx]] (v0.1).
https://dlhb.gamebrew.org/vitahomebrews/vitagrafixvita-02.jpg


==How To Install VitaGrafix==
If ux0:tai/config.txt file does exist:
# Download latest ''VitaGrafix.suprx'' on gamebrew or from the [https://github.com/Electry/VitaGrafix/releases releases] section and ''ioPlus.skprx'' '''(v0.1)''' from [[ioPlus Vita]]
*Copy VitaGrafix.suprx and ioPlus.skprx to ux0:tai/ directory.
# If ''ux0:tai/config.txt'' file does exist
*Open ux0:tai/config.txt in a text editor and add following lines to the file
## Copy ''VitaGrafix.suprx'' and ''ioPlus.skprx'' to ''ux0:tai/'' directory
*KERNEL
## Open ''ux0:tai/config.txt'' in a text editor
ux0:tai/ioPlus.skprx
## Add following lines to the file
*ALL
ux0:tai/VitaGrafix.suprx


<pre>*KERNEL
Otherwise (e.g. if you are using SD2VITA mounted as ux0):
ux0:tai/ioPlus.skprx
*Copy VitaGrafix.suprx and ioPlus.skprx to ur0:tai/ directory.
*ALL
*Open ur0:tai/config.txt in a text editor and add following lines to the file.
ux0:tai/VitaGrafix.suprx</pre>
*KERNEL
ur0:tai/ioPlus.skprx
*ALL
ur0:tai/VitaGrafix.suprx


<ol start="3">
Then create ux0:data/VitaGrafix/ folder.
<li>Otherwise (e.g. if you are using SD2VITA mounted as ux0)
<ol>
<li>Copy ''VitaGrafix.suprx'' and ''ioPlus.skprx'' to ''ur0:tai/'' directory</li>
<li>Open ''ur0:tai/config.txt'' in a text editor</li>
<li>Add following lines to the file</li></ol>
</li></ol>


<pre>*KERNEL
Download patchlist.txt from [https://github.com/Electry/VitaGrafixPatchlist here] and move it to the folder.
ur0:tai/ioPlus.skprx
*ALL
ur0:tai/VitaGrafix.suprx</pre>


<ol start="4">
Create and open ux0:data/VitaGrafix/config.txt file.
<li>Create ''ux0:data/VitaGrafix/'' folder</li>
<li>Download patchlist.txt from [https://github.com/Electry/VitaGrafixPatchlist HERE] and move it to the folder</li>
<li>Create and open ''ux0:data/VitaGrafix/config.txt'' file</li>
<li>Add games to the config you wish to apply patches for (refer to your patchlist.txt)</li></ol>


==VitaGrafix's Configuration==
Add games to the config you wish to apply patches for (refer to your patchlist.txt).
You can configure every game separately using unified configuration file.<br />
<code>ux0:data/VitaGrafix/config.txt</code>


=== MAIN section ===
==User guide==
* This section applies to all games, unless specific entry for a game exists. Available options are listed below.
===Resources===
 
* [https://github.com/Electry/VitaGrafix/wiki/ VitaGrafix wiki].
<pre>[MAIN]
* [https://github.com/Electry/VitaGrafixPatchlist Official patchlist and compatibility table].
# Same options as in GAME section are permitted here.</pre>
* [[VitaGrafix Configurator]].
 
=== GAME section ===
* This section applies to a single game. These options override the [MAIN] section (for that game). Each game supports different options! Refer to the compatibility table of your patchlist.txt
 
==== Example: ====
<pre>[PCSA00001]
# options...</pre>
 
'''TIP:''' Because collections share one TITLE ID for multiple games, you might want to configure each game individually. To do that you need to specify game's .self path/name (and optionally NID). If you're not sure what those are, check ''patchlist.txt'', it uses the same ''header'' format.
 
<pre>[PCSA00001, GOW1.self, 0x12345678]</pre>
 
{|
!align="center"| ↑
!
!
|-
|align="center"| '''PCSA00001'''
| game's TITLE ID
| required
|-
|align="center"| '''GOW1.self'''
| a part of executable's full path
| optional
|-
|align="center"| '''0x12345678'''
| main module NID, 8 hex digits with '0x' prefix
| optional
|}


==Patchlist For VitaGrafix ==
===Example config.txt===
Collection of [https://github.com/Electry/VitaGrafixPatchlist patches for VitaGrafix] below.
Below is a config.txt example that can be used as a guide for your game.


=== How To Install VitaGrafix's Patchlist===
<pre>
# Download raw '''[https://raw.githubusercontent.com/Electry/VitaGrafixPatchlist/master/patchlist.txt patchlist.txt]'''
# This is a comment.
#* optionally download files in '''[https://github.com/Electry/VitaGrafixPatchlist/tree/master/patch patch/]''' folder, these are separated due to their larger size (100+ lines for one game)
# The Legend of Heroes: Trails of Cold Steel II [JP 1.03]
# Copy it to ''ux0:/data/VitaGrafix/''
[PCSG00354] # Game title ID
#* ''patch/'' files go into ''ux0:/data/VitaGrafix/patch/''
IB=640x352 # Set IB to 960x544 or less
# Configure your game by editing ''ux0:/data/VitaGrafix/config.txt'' or by using [[Vitagrafix Configurator Vita|VitaGrafixConfigurator]]
FPS=60 # FPS value can be selected from 60, 30, 20
MSAA=4x # select MSAA from 4x, 2x, 1x (no AA)


=== Supported games ===
{|
!width="1%"|
!width="16%"| Game
!width="16%"| Title ID(s)
!width="16%"| Supported features
!width="16%"| Game defaults
!width="16%"| Notes..............
|-
|
| Assassin's Creed III: Liberation
| PCSB00074<br />
PCSE00053<br />
PCSG00116
| Internal res.<br />
FPS cap.
| 720x408<br />
30
|
|-
|
| Asphalt: Injection
| PCSB00040<br />
PCSE00007
| Framebuffer<br />
FPS cap
| 720x408<br />
50
|
|-
|
| Atelier Firis: The Alchemist and the Mysterious Journey
| PCSB01087<br />
PCSE01044<br />
PCSG00929<br />
PCSH10026
| Internal res.
| 960x442
|
|-
|
| Atelier Lydie &amp; Soeur: Fushigi na Kaiga no Renkinjutsu Samurai
| PCSG01116
| Internal res.
| 960x442
|
|-
|
| Atelier Shallie Plus: Alchemists of the Dusk Sea
| PCSB01043<br />
PCSE00998<br />
PCSG00821
| Internal res.
| 960x408
|
|-
|
| Atelier Sophie: The Alchemist of the Mysterious Book
| PCSB00973<br />
PCSE00892<br />
PCSG00694<br />
PCSH00220
| Internal res.
| 960x442
|
|-
|
| Blue Reflection: Maboroshi ni Mau - Shoujo no Ken
| PCSG00987
| Internal res.
| 960x442
|
|-
|
| Borderlands 2
| PCSF00570<br />
PCSF00576<br />
PCSE00383<br />
PCSG00400
| Framebuffer
| 960x544
|
|-
|
| Catherine: Full Body
| PCSG01179
| Internal res.
| 720x408
|
|-
|
| Dead or Alive 5 Plus
| PCSB00296<br />
PCSE00235<br />
PCSG00167
| Internal res.
| 720x408
|
|-
|
| Dead or Alive Xtreme 3: Venus
| PCSG00773<br />
PCSH00250<br />
PCSH00281
| 2x Internal res.
| 736x416, 640x368
|
|-
|
| Deception IV: Blood Ties<br />
Kagero: Darkside Princess
| PCSB00499<br />
PCSE00401<br />
PCSG00304
| 3x Internal res.
| 960x544, 720x408, 640x368
|
|-
|
| Deception IV: The Nightmare Princess<br />
Kagero: Mou Hitori no Princess
| PCSB00829<br />
PCSE00743<br />
PCSG00565
| 3x Internal res.
| 960x544, 720x408, 640x368
|
|-
|
| Disney Epic Mickey 2: The Power of Two
| PCSF00308<br />
PCSF00309<br />
PCSA00110
| Internal res.
| 720x408
|
|-
|
| Dragon Ball Z: Battle of Z
| PCSB00396<br />
PCSE00305<br />
PCSG00213
| Internal res.
| 704x448
|
|-
|
| Dragon Quest Builders
| PCSB00981<br />
PCSE00912<br />
PCSG00697<br />
PCSH00221
| Internal res.<br />
FPS cap
| 720x408<br />
60
|
|-
|
| Dungeon Hunter: Alliance
| PCSB00041<br />
PCSE00008
| Internal res.
| 702x408
|
|-
|
| Fantasy Hero: Unsigned Legacy
| PCSB00663<br />
PCSE00536<br />
PCSG00280<br />
PCSH00157
| Framebuffer
| 720x408
|
|-
|
| Fate/EXTELLA (The Umbral Star)
| PCSB01030<br />
PCSE00928<br />
PCSH00299<br />
PCSG00600
| Internal res.
| 720x408
|
|-
|
| Fate/EXTELLA LINK
| PCSE01254<br />
PCSG01091<br />
PCSH10121
| Internal res.
| 720x408
|
|-
|
| F1 2011
| PCSB00027<br />
PCSE00002
| Internal res.
| 640x384
|
|-
|
| God of War Collection
| PCSF00438<br />
PCSA00126<br />
PCSC00059
| Framebuffer<br />
FPS cap
| 720x408<br />
30
|
|-
|
| Gundam Breaker 2
| PCSG00412<br />
PCSH00132
| Internal res.
| 720x408
|
|-
|
| Hatsune Miku: Project Diva f
| PCSB00419<br />
PCSE00326<br />
PCSG00074
| Internal res.<br />
FPS cap
| 640x352<br />
30
| [https://github.com/Electry/VitaGrafix/issues/120 #120], [https://github.com/Electry/VitaGrafix/issues/81 #81]
|-
|
| Hatsune Miku: Project Diva f 2nd
| PCSB00554<br />
PCSE00434<br />
PCSG00205<br />
PCSH00088
| Internal res.<br />
FPS cap
| 720x408<br />
30
| [https://github.com/Electry/VitaGrafix/issues/120 #120], [https://github.com/Electry/VitaGrafix/issues/80 #80]
|-
|
| Hatsune Miku: Project Diva X
| PCSB01007<br />
PCSE00867<br />
PCSH00176<br />
PCSG00683
| Internal res.
| 720x408
|
|-
|
| Helldivers
| PCSF00465<br />
PCSA00134<br />
PCSC00078<br />
PCSD00086<br />
PCSD00097
| Framebuffer
| 960x544
| [https://github.com/Electry/VitaGrafixPatchlist/issues/82 #82]
|-
|
| I am Setsuna
| PCSG00756
| FPS cap
| 30
|
|-
|
| Injustice: Gods Among Us
| PCSB00356<br />
PCSE00271
| Framebuffer
| 720x408
| [https://github.com/Electry/VitaGrafixPatchlist/issues/82 #82]
|-
|
| Jak and Daxter: The Precursor Legacy
| PCSF00247<br />
PCSF00248<br />
PCSA00080
| Framebuffer<br />
FPS cap
| 720x408<br />
20
|
|-
|
| Jak II
| PCSF00247<br />
PCSF00249<br />
PCSA00080
| Framebuffer
| 720x408
|
|-
|
| Jak 3
| PCSF00247<br />
PCSF00250<br />
PCSA00080
| Framebuffer
| 720x408
|
|-
|
| J-Stars Victory Vs
| PCSG00300
| Internal res.
| 768x448
|
|-
|
| J-Stars Victory Vs+
| PCSB00713<br />
PCSE00595<br />
PCSH00136
| Internal res.
| 768x448
|
|-
|
| Kidou Senshi Gundam Seed: Battle Destiny
| PCSG00040
| Internal res.<br />
FPS cap
| 704x384<br />
30
|
|-
|
| Killzone: Mercenary
| PCSF00243<br />
PCSF00403<br />
PCSA00107<br />
PCSC00045<br />
PCSD00071
| Internal res.<br />
FPS cap
| Dynamic<br />
30
|
|-
|
| LEGO Batman 3: Beyond Gotham
| PCSB00563<br />
PCSE00442
| Internal res.
| 640x368
|
|-
|
| LEGO Harry Potter: Years 5–7
| PCSB00103<br />
PCSE00057
| Framebuffer
| 640x368
| [https://github.com/Electry/VitaGrafixPatchlist/issues/3 #3]
|-
|
| LEGO Jurassic World
| PCSB00703<br />
PCSE00587
| Internal res.
| 640x368
|
|-
|
| LEGO Marvel Super Heroes: Universe in Peril
| PCSB00315<br />
PCSE00250
| Internal res.
| 640x368
|
|-
|
| LEGO Marvel's Avengers
| PCSB00764<br />
PCSE00670
| Internal res.
| 640x368
|
|-
|
| LEGO Ninjago: Shadow of Ronin
| PCSB00706<br />
PCSE00534
| Internal res.
| 640x368
|
|-
|
| LEGO Star Wars: The Force Awakens
| PCSB00877<br />
PCSE00791
| Internal res.
| 640x368
|
|-
|
| LEGO The Hobbit
| PCSB00503<br />
PCSE00390
| Internal res.
| 640x368
|
|-
|
| LittleBigPlanet
| PCSF00021<br />
PCSA00017<br />
PCSC00013<br />
PCSD00006
| Internal res.
| 720x408
| [https://github.com/Electry/VitaGrafix/issues/24 #24]
|-
|
| Lumines: Electronic Symphony
| PCSB00061<br />
PCSE00009<br />
PCSG00014
| FPS cap
| 30
|
|-
|
| Macross Delta Scramble
| PCSG00947
| Internal res.
| 800x448
|
|-
|
| Mahouka Koukou no Rettousei: Out of Order
| PCSG00456
| Internal res.<br />
FPS cap
| 720x408<br />
30
|
|-
|
| Minecraft: PlayStation Vita Edition
| PCSB00560<br />
PCSE00491<br />
PCSG00302
| Framebuffer<br />
FPS cap
| 720x408<br />
60
|
|-
|
| Miracle Girls Festival
| PCSG00610
| Internal res.
| 720x408
|
|-
|
| MotoGP 13
| PCSB00316<br />
PCSE00409
| Internal res.
| 704x448
|
|-
|
| MotoGP 14
| PCSB00498<br />
PCSE00529
| Internal res.
| 704x448
|
|-
|
| MUD - FIM Motocross World Championship
| PCSB00182<br />
PCSE00219
| Internal res.
| 704x448
|
|-
|
| MXGP: The Official Motocross Videogame
| PCSB00470<br />
PCSE00530
| Internal res.
| 704x448
|
|-
|
| Need for Speed: Most Wanted
| PCSB00183<br />
PCSE00089<br />
PCSG00106
| Internal res.
| 640x368
|
|-
|
| Nelke to Densetsu no Renkinjutsushi Tachi: Aratana Daichi no Atelier
| PCSG01223
| Internal res.
| 960x442
|
|-
|
| Ninja Gaiden Sigma 2 Plus
| PCSB00294<br />
PCSE00233<br />
PCSG00157
| 2x Internal res.
| 864x480, 640x416
|
|-
|
| Oddworld: Munch's Oddysee HD
| PCSB00275<br />
PCSE00369
| FPS cap
| 30
|
|-
|
| One Piece: Burning Blood
| PCSB00893<br />
PCSE00808<br />
PCSH00202
| Internal res.
| 704x384
|
|-
|
| Persona 4 Golden
| PCSB00245<br />
PCSE00120<br />
PCSG00004<br />
PCSG00563<br />
PCSH00021
| Internal res.
| 840x476
|
|-
|
| Phantasy Star Nova
| PCSG00351<br />
PCSH00143
| Internal res.
| 960x544
|
|-
|
| Project Root
| PCSB00650<br />
PCSE00486<br />
PCSG00783
| FPS cap
| 30
|
|-
|
| Puella Magi Madoka Magica: The Battle Pentagram
| PCSG00214
| Internal res.<br />
FPS cap
| 704x448<br />
30
|
|-
|
| Ratchet &amp; Clank
| PCSF00484<br />
PCSF00482<br />
PCSA00133
| Framebuffer
| 720x408
|
|-
|
| Ratchet &amp; Clank 2: Locked and Loaded / Going Commando
| PCSF00485<br />
PCSF00482<br />
PCSA00133
| Framebuffer
| 720x408
|
|-
|
| Ratchet &amp; Clank 3 / Up Your Arsenal
| PCSF00486<br />
PCSF00482<br />
PCSA00133
| Framebuffer
| 720x408
|
|-
|
| Ratchet &amp; Clank: QForce / Full Frontal Assault
| PCSF00191<br />
PCSA00086<br />
PCSC00041
| Framebuffer
| 720x408
|
|-
|
| Resident Evil: Revelations 2
| PCSF00728<br />
PCSE00608<br />
PCSG00594<br />
PCSH00187
| Internal res.
| 720x408
|
|-
|
| RESOGUN
| PCSF00262<br />
PCSA00103<br />
PCSC00088
| Framebuffer
| 720x408
|
|-
|
| Ridge Racer
| PCSB00048<br />
PCSE00001<br />
PCSG00001
| Internal res.
| 720x408
|
|-
|
| Sly Cooper and the Thievius Raccoonus
| PCSF00269<br />
PCSF00338<br />
PCSA00095<br />
PCSA00096<br />
| Framebuffer<br />
FPS cap
| 720x408<br />
30
|
|-
|
| Sly Cooper 2: Band of Thieves
| PCSF00270<br />
PCSF00338<br />
PCSA00095<br />
PCSA00097<br />
| Framebuffer<br />
FPS cap
| 960x544<br />
30
|
|-
|
| Sly Cooper 3: Honor Among Thieves
| PCSF00271<br />
PCSF00338<br />
PCSA00095<br />
PCSA00098<br />
| Framebuffer<br />
FPS cap
| 960x544<br />
30
|
|-
|
| Sly Cooper: Thieves in Time
| PCSF00156<br />
PCSF00206<br />
PCSF00207<br />
PCSF00208<br />
PCSF00209<br />
PCSA00068
| FPS cap
| 30
|
|-
|
| Soul Sacrifice
| PCSF00178<br />
PCSA00092<br />
PCSD00065<br />
PCSC00039
| Internal res.
| 720x408
|
|-
|
| Soul Sacrifice Delta
| PCSF00532<br />
PCSA00152<br />
PCSD00079<br />
PCSC00049
| Internal res.
| 720x408
|
|-
|
| Spy Hunter
| PCSB00166<br />
PCSE00068
| Framebuffer<br />
FPS cap<br />
MSAA
| 640x368<br />
30<br />
4x
|
|-
|
| SteamWorld Heist
| PCSB00693<br />
PCSE00583
| FPS cap
| 30
|
|-
|
| Street Fighter X Tekken
| PCSB00144<br />
PCSE00005<br />
PCSG00063
| Internal res.
| 640x480
|
|-
|
| Summon Night 6: Lost Borders
| PCSB01013<br />
PCSE00951<br />
PCSG00827<br />
PCSH00225
| MSAA
| 2x
|
|-
|
| Supremacy MMA: Unrestricted
| PCSE00012
| Internal res.
| 720x408
|
|-
|
| The Amazing Spider-Man
| PCSB00428<br />
PCSE00333
| Internal res.<br />
FPS cap
| 704x400<br />
60
|
|-
|
| The Legend of Heroes: Trails of Cold Steel<br />
Eiyuu Densetsu: Sen no Kiseki
| PCSB00866<br />
PCSE00786<br />
PCSG00195<br />
PCSH00074
| Internal res.
| 720x408
|
|-
|
| The Legend of Heroes: Trails of Cold Steel II<br />
Eiyuu Densetsu: Sen no Kiseki II
| PCSB01016<br />
PCSE00896<br />
PCSG00354<br />
PCSH00075
| Internal res.<br />
MSAA
| 720x408<br />
2x
|
|-
|
| The LEGO Movie Videogame
| PCSB00553<br />
PCSE00353
| Internal res.
| 640x368
|
|-
|
| Tokyo Xanadu
| PCSB01062<br />
PCSE00893<br />
PCSG00608<br />
PCSH10009
| Internal res.<br />
MSAA
| 720x408<br />
2x
|
|-
|
| Ukiyo no Roushi
| PCSG00480
| Internal res.<br />
FPS cap
| 704x384<br />
30
|
|-
|
| Urban Trial Freestyle
| PCSB00038<br />
PCSE00051<br />
PCSG00231
| Framebuffer
| 720x408
|
|-
|
| Utawarerumono: Mask of Deception / Itsuwari no Kamen
| PCSB01093<br />
PCSE00959<br />
PCSG00617
| Internal res.
| 672x384
|
|-
|
| Utawarerumono: Mask of Truth / Futari no Hakuoro
| PCSB01145<br />
PCSE01102<br />
PCSG00838
| Internal res.
| 672x384
|
|-
|
| Utawarerumono: Chiriyuku Mono he no Komoriuta
| PCSG01079
| Internal res.
| 672x384
|
|-
|
| Valhalla Knights 3
| PCSB00432<br />
PCSE00244<br />
PCSG00076
| Internal res.
| 640x384
|
|-
|
| Valhalla Knights 3 GOLD
| PCSG00307
| Internal res.<br />
FPS cap
| 640x384<br />
30
|
|-
|
| Wipeout 2048
| PCSF00007<br />
PCSA00015<br />
PCSC00006<br />
PCSD00005
| 14x Internal res.<br />
FPS cap
| up to 960x544<br />
30
|
|-
|
| World of Final Fantasy
| PCSB00951<br />
PCSE00880<br />
PCSH00223<br />
PCSG00709
| Internal res.
| 640x384
|
|-
|
| WRC 3: FIA World Rally Championship
| PCSB00204<br />
PCSE00242
| Internal res.
| 704x448
|
|-
|
| WRC 4: FIA World Rally Championship
| PCSB00345<br />
PCSE00411<br />
PCSG00376
| Internal res.
| 704x448
|
|-
|
| WRC 5: FIA World Rally Championship
| PCSB00762<br />
PCSE00667
| Framebuffer
| 960x544
|
|-
|
| Ys: Memories of Celceta
| PCSB00497<br />
PCSE00245<br />
PCSH00181<br />
PCSG00105
| Internal res.
| 720x408
|
|-
|
| Ys Origin
| PCSB01081<br />
PCSE01033<br />
PCSH10049
| FPS cap
| 30
|
|-
|
| Ys VIII: Lacrimosa of Dana
| PCSB01128<br />
PCSE01103<br />
PCSG00881<br />
PCSH00297
| 3x Internal res.<br />
FPS cap
| 960x512, 840x476, 720x320<br />
30
|
|}
=== Supported games (patch/) ===
These require ''patchlist.txt'' as well as additional files located in ''patch/'' folder.
{|
!width="16%"|
!width="16%"| Game
!width="16%"| Title ID(s)
!width="16%"| Supported features
!width="16%"| Game defaults
!width="16%"| Notes..............
|-
|
| Mortal Kombat
| PCSB00106<br />
PCSE00023
| Framebuffer
| 640x368
| [https://raw.githubusercontent.com/Electry/VitaGrafixPatchlist/master/patch/PCSB00106.txt PCSB00106.txt]<br />
[https://raw.githubusercontent.com/Electry/VitaGrafixPatchlist/master/patch/PCSE00023.txt PCSE00023.txt]
|-
|
| Uncharted: Golden Abyss
| PCSF00001<br />
PCSF00012<br />
PCSA00029<br />
PCSD00001
| Internal res.
| 768x384
| [https://raw.githubusercontent.com/Electry/VitaGrafixPatchlist/master/patch/PCSF00001.txt PCSF00001.txt]
|}
* no known issues
* playable, but with some minor issues (check ''[https://github.com/Electry/VitaGrafixPatchlist/issues Issues]'' section)
Adding support for each and every game requires manual disassembly of game's binary to find addresses in the game code where the resolution is set. Some are easy to patch, others plainly impossible.
=== FAQ ===
* Encountered a bug? Feel free to open a Github issue [https://github.com/Electry/VitaGrafixPatchlist/issues here].
* Found a new patch? I'll gladly include it in here :) Just open a new issue or create a merge request.
=== Available options When Using VitaGrafix ===
The format is <code>OPTION=VALUE</code>, each on a separate line.
{|
!align="center" width="25%"| option
!width="25%"| description
!width="25%"| valid values
!width="25%"| default
|-
|align="center"| ENABLED
| Enables/disables game modifications (and OSD).
| '''ON:''' <code>1</code>, <code>on</code> or <code>true</code><br />
'''OFF:''' <code>0</code>, <code>off</code> or <code>false</code>
| '''ON'''
|-
|align="center"| OSD
| Enables/disables the small overlay that is<br />
shown during first few seconds when starting a game.
| '''ON:''' <code>1</code>, <code>on</code> or <code>true</code><br />
'''OFF:''' <code>0</code>, <code>off</code> or <code>false</code>
| '''ON'''
|-
|align="center"| LOG
| Enables/disables logging<br />
(to ''ux0:data/VitaGrafix/log.txt'' file)
| '''ON:''' <code>1</code>, <code>on</code> or <code>true</code><br />
'''OFF:''' <code>0</code>, <code>off</code> or <code>false</code>
| '''ON'''
|-
|align="center"| FB
| Framebuffer resolution
| '''ON:'''<br />
<code>960x544</code><br />
<code>720x408</code><br />
<code>640x368</code><br />
<br />
'''OFF:'''<br />
<code>0</code>, <code>off</code> or <code>false</code>
| '''OFF'''
|-
|align="center"| IB
| Internal buf. resolution
| '''ON:'''<br />
<code>WxH</code> where:<br />
''1 &lt;= '''W''' &lt;= 960''<br />
''1 &lt;= '''H''' &lt;= 544''<br />
<br />
If patch supports multiple res.<br />
(e.g. dyn. res. scaling) use:<br />
<code>WxH,WxH,...</code><br />
<br />
'''OFF:'''<br />
<code>0</code>, <code>off</code> or <code>false</code>
| '''OFF'''
|-
|align="center"| FPS
| Frames per second cap (upper limit)
| '''ON:'''<br />
<code>60</code><br />
<code>30</code><br />
<code>20</code><br />
<br />
'''OFF:'''<br />
<code>0</code>, <code>off</code> or <code>false</code>
| '''OFF'''
|-
|align="center"| MSAA
| Multisample anti-aliasing
| '''ON:'''<br />
<code>4x</code><br />
<code>2x</code><br />
<code>1x</code> (no AA)<br />
<br />
'''OFF:'''<br />
<code>0</code>, <code>off</code> or <code>false</code>
| '''OFF'''
|}
'''TIP:''' If you leave some options out, the plugin will use their default values.<br />
'''TIP:''' If patch supports multiple '''IB''' res. and you don't specify them all, the last <code>WxH</code> will be used for those that would go after. It is therefore perfectly fine to just use <code>IB=960x544</code> to set them all to 960x544 (e.g. to disable dynamic res. scaling) in such situations.
=== Comments ===
Comments always start with ''#'' character. They can, but don't need to be on a separate line.
<pre># This is a comment
[PCSA00001] # This is also a valid comment
...</pre>
=== Example config.txt ===
<pre>[MAIN]
# Set default options for all games
# Set default options for all games
[MAIN]
FB=960x544
FB=960x544
IB=960x544
IB=960x544
FPS=60
FPS=60
MSAA=4x
MSAA=4x
</pre>


# Persona 4 Golden [EU], disable osd
===Available options===
# Notice that IB=960x544 is redundant here as it is
The format for config.txt is OPTION=VALUE, each on a separate line.
#  the same resolution as the 'fallback' one in [MAIN] section above.
#  This of course doesn't cause any harm.
[PCSB00245]
OSD=0
IB=960x544
 
# Ninja Gaiden Sigma 2 Plus, uses dynamic resolution scaling
#  and switches between two specified IB resolutions when patched
#  (based on framerate)
# Override the [MAIN] IB resolution(s) for this game.
[PCSB00294]
IB=960x544,720x408
 
# LittleBigPlanet res. patch introduces some glitches,
#  let's disable it here.
[PCSA00017]
ENABLED=0
 
# GoW 2 won't reach 60 FPS @ 960x544 very often, so let's
#  keep it locked to 30 (default FPS cap).
[PCSF00438, GOW2.self]
FPS=OFF
 
# I think you get what this does by now.
[PCSB00204]
IB=OFF</pre>
 
==Advanced - The VG Language==
To facilitate user-made game patches without having to recompile the whole plugin, a domain specific language was created. Similar, but somewhat simplified to that of VitaCheat.
 
Written in ''patchlist.txt'', patches are parsed and applied during game boot-up.


=== Section header ===
{| class="wikitable"  style="width: 900px;"
A patch for each game starts with a header. Header identifies SKU/region (TITLE ID), the executable name (because several “collections” use the same TITLE ID for multiple games in their series) and the game version (indirectly, in a form of module NID).
!style="width: 10%;"| Option
 
!style="width: 40%;"|Description
<pre>[PCSA00001, eboot.bin, 0x12345678]</pre>
!style="width: 40%;"|Valid values
 
!style="width: 10%;"|Default
{|
!align="center"|
!
!
|-
|-
|align="center"| '''PCSA00001'''
!rowspan="2"|ENABLED
| game's TITLE ID
|rowspan="2"|Enables/disables game modifications (and OSD).
| required
|ON: 1, on or true
|rowspan="2"|ON
|-
|-
|align="center"| '''eboot.bin'''
|OFF: 0, off or false
| a part of executable's full path
| recommended
|-
|align="center"| '''0x12345678'''
| main module NID, 8 hex digits with '0x' prefix
| recommended
|}
 
<br />
 
Executable name/path is used to differentiate between games that share a single TITLE ID (e.g. collections).
 
NID is used to inform user about potentional version mismatch (e.g. when game gets a new update), instead of applying patches to wrong/old memory addresses and then crashing.
 
If multiple regions/SKUs share the same offsets, having to duplicate patches would be wasteful. You can freely stack multiple headers after each other, like shown below. Patches will then be applied for all matching games/regions.
 
<pre>[PCSA00001, eboot.bin, 0x12345678]
[PCSB00023, eboot.bin, 0x87654321]
...</pre>
 
=== Feature type ===
Header is followed by patch feature/type marking. This indicates that subsequent patches shall only be applied if user has enabled said feature in their configuration file.
 
Use one of the following:
 
<pre>@FB
@IB
@FPS
@MSAA</pre>
 
=== Patches ===
The rules for patches are simple. Each patched memory location is on a separate line, starts with a relative address (segment:offset) followed by the new value.
 
<pre>0:0x1234 0xDEADBEEF</pre>
 
=== Datatypes ===
VitaGrafix internally always works with one of the following datatypes:
 
* Primitive types:
** '''int''' (32-bit signed integer)
** '''uint''' (32-bit unsigned integer)
** '''float''' (32-bit floating point number)
* Raw type:
** '''bytes''' (size up to 32 B)
 
You can cast between those types freely using casting functions (see '''Explicit type conversion''').
 
==== Immediate values are always parsed as ====
* '''int''' – when <code>+</code> or <code>-</code> sign precedes 1 or more decimal digits (with no space inbetween)
** OK - <code>+1</code>, <code>-1</code>
** KO - <code>+ 1</code>
* '''uint''' – when:
** hex number is prefixed with <code>0x</code> or <code>0X</code>
** octal number is prefixed with <code>0</code>
** decimal integer does not have prefix or suffix
** OK - <code>0xCAFE</code>, <code>0876</code>, <code>123</code>
** KO - <code>CAFE</code>
* '''float''' – when 1 or more decimal digits (optionally with preceding <code>+</code> or <code>-</code> sign) are followed by:
** <code>.</code> and optionally:
*** 1 or more digits after the decimal point and optionally <code>f</code>
*** <code>f</code>
** <code>f</code>
** OK - <code>1.</code>, <code>1.2</code>, <code>1.2f</code>, <code>1f</code>, <code>1.f</code>, <code>-1.0</code>, <code>-2f</code>, <code>+123.4f</code>
** KO - <code>.1</code>, <code>.1f</code>, <code>1 . 0 f</code>
* '''bytes''' – when 1 or more (up to 32) 8-bit hex values (without the 0x prefix) are followed by <code>r</code>
** OK - <code>DEADr</code>, <code>DE AD r</code>
** KO - <code>DEAD</code>, <code>0xDEADr</code>, <code>0xDE 0xAD r</code>
 
=== Implicit type conversion ===
The interpreter makes use of implicit conversion when necessary. This is done when applying '''infix operator''' or '''math function''' (arity &gt;= 2) to following operand types (in no particular order):
 
{|
!align="center"| operand 1
!align="center"| operand 2, 3, ...
!
!align="center"| result
! example
|-
|align="center"| '''float'''
|align="center"| '''int''' or '''uint'''
| all casted to '''float'''
|align="center"| '''float'''
| <code>100 / 2.0</code> equals <code>50.0</code>
|-
|align="center"| '''int'''
|align="center"| '''uint'''
| all casted to '''int'''
|align="center"| '''int'''
| <code>100 / -2</code> equals <code>-50</code>
|-
|align="center"| '''uint'''
|align="center"| '''uint'''
| ONLY if result is &lt; 0
|align="center"| '''int'''
| <code>1 - 2</code> equals <code>-1</code>
|-
|align="center"| any
|align="center"| any
| ONLY when applying <code>.</code> (concat)
|align="center"| '''bytes'''
| <code>1 . 2</code> equals <code>0100000002000000r</code>
|}
 
=== Explicit type conversion ===
While working with values, changing the datatype manually might sometimes be desirable.
 
To convert value of any type to one of the primitive types use following functions:
 
{|
! function
!align="center"| argument type
!align="center"| result type
! example
|-
|-
| int(value)
!rowspan="2"|OSD
|align="center"| any
|rowspan="2"|Enables/disables the small overlay that is shown during first few seconds when starting a game.
|align="center"| '''int'''
|ON: 1, on or true
| <code>int(-2.0)</code> equals <code>-2</code>
|rowspan="2"|ON
|-
|-
| uint(value)
|OFF: 0, off or false
|align="center"| any
|align="center"| '''uint'''
| <code>uint(FFr)</code> equals <code>255</code>
|-
|-
| float(value)
!rowspan="2"|LOG
|align="center"| any
|rowspan="2"|Enables/disables logging (to ux0:data/VitaGrafix/log.txt file).
|align="center"| '''float'''
|ON: 1, on or true
| <code>float(2)</code> equals <code>2.0</code>
|rowspan="2"|ON
|}
 
To convert value of any type to raw type use:
 
{|
! function
!align="center"| argument type
!align="center"| result type
!align="center"| result size (B)
! example
|-
|-
| int8(value)
|OFF: 0, off or false
|align="center"| any
|align="center"| '''bytes'''
|align="center"| 1
| <code>int8(-128)</code> equals <code>80 r</code>
|-
|-
| int16(value)
!rowspan="2"|FB
|align="center"| any
|rowspan="2"|Framebuffer resolution.
|align="center"| '''bytes'''
|ON:960x544, 720x408, 640x368
|align="center"| 2
|rowspan="2"|OFF
| <code>int16(-32768)</code> equals <code>00 80 r</code>
|-
|-
| int32(value)
|OFF: 0, off or false
|align="center"| any
|align="center"| '''bytes'''
|align="center"| 4
| <code>int32(-2147483648)</code> equals <code>00 00 00 80 r</code>
|-
|-
| uint8(value)
!rowspan="2"|IB
|align="center"| any
|rowspan="2"|Internal buffer resolution.
|align="center"| '''bytes'''
|ON: WxH (where: 1 <= W <= 960, 1 <= H <= 544).<br>If patch supports multiple res. (e.g. dyn. res. scaling) use: WxH,WxH,...
|align="center"| 1
|rowspan="2"|OFF
| <code>uint8(255)</code> equals <code>FF r</code>
|-
|-
| uint16(value)
|OFF: 0, off or false
|align="center"| any
|align="center"| '''bytes'''
|align="center"| 2
| <code>uint16(65535)</code> equals <code>FF FF r</code>
|-
|-
| uint32(value)
!rowspan="2"|FPS
|align="center"| any
|rowspan="2"|Frames per second cap (upper limit).
|align="center"| '''bytes'''
|ON: 60, 30, 20
|align="center"| 4
|rowspan="2"|OFF
| <code>uint32(4294967295)</code> equals <code>FF FF FF FF r</code>
|-
|-
| fl32(value)
|OFF: 0, off or false
|align="center"| any
|align="center"| '''bytes'''
|align="center"| 4
| <code>fl32(12345.0)</code> equals <code>00 E4 40 46 r</code>
|}
 
If you don't wish to cast the value, but rather just reinterpret bytes, use:
 
{|
! function
!align="center"| value type
!align="center"| result type
!align="center"| result size (B)
! example
|-
|-
| raw(value)
!rowspan="2"|MSAA
|align="center"| any
|rowspan="2"|Multisample anti-aliasing.
|align="center"| '''bytes'''
|ON: 4x, 2x, 1x (no AA)
|align="center"| sizeof(''value'')
|rowspan="2"|OFF
| <code>raw(1.0 &gt;&gt; 16)</code> equals <code>80 3F 00 00 r</code>
|-
|-
| rawn(value, n)
|OFF: 0, off or false
|align="center"| any
|align="center"| '''bytes'''
|align="center"| ''n''
| <code>rawn(1.0 &gt;&gt; 16, 2)</code> equals <code>80 3F r</code>
|}
|}


=== Infix operators ===
Tips:
*If you leave some options out, the plugin will use their default values.
*If patch supports multiple IB res. and you don't specify them all, the last WxH will be used for those that would go after. It is therefore perfectly fine to just use IB=960x544 to set them all to 960x544 (e.g. to disable dynamic res. scaling) in such situations.


Operator precedence is honored, order is similar to C-like languages. Brackets (parentheses) are allowed and evaluated first.
==Screenshots==
 
https://dlhb.gamebrew.org/vitahomebrews/vitagrafix3.png
{|
!align="center"| operator
!align="center"| operand type
! description
! example
|-
|align="center"| +
|align="center"| primitive
| addition
| <code>1 + 2</code> equals <code>3</code>
|-
|align="center"| -
|align="center"| primitive
| subtraction
| <code>1 - 2</code> equals <code>-1</code>
|-
|align="center"| *
|align="center"| primitive
| multiplication
| <code>2 * 3</code> equals <code>6</code>
|-
|align="center"| /
|align="center"| primitive
| division
| <code>3 / 2.0</code> equals <code>1.5</code>
|-
|align="center"| %
|align="center"| '''int''' or '''uint'''
| modulo (division remainder)
| <code>123 % 23</code> equals <code>8</code>
|-
|align="center"| |
|align="center"| primitive
| bitwise OR
| <code>14 | 5</code> equals <code>15</code>
|-
|align="center"| ^
|align="center"| primitive
| bitwise XOR
| <code>14 ^ 5</code> equals <code>11</code>
|-
|align="center"| &amp;
|align="center"| primitive
| bitwise AND
| <code>14 &amp; 5</code> equals <code>4</code>
|-
|align="center"| &lt;&lt;
|align="center"| primitive
| bitwise left shift
| <code>14 &gt;&gt; 2</code> equals <code>3</code>
|-
|align="center"| &gt;&gt;
|align="center"| primitive
| bitwise right shift
| <code>14 &lt;&lt; 2</code> equals <code>56</code>
|-
|align="center"| .
|align="center"| raw
| concatenation
| <code>DEr . ADr</code> equals <code>DE AD r</code>
|-
|align="center"| *
|align="center"| primitive '''*''' raw
| raw repeat
| <code>nop * 2</code> equals <code>00 BF 00 BF r</code>
|}
 
=== Math functions ===
{|
! function
! description
! example
|-
| abs(value)
| absolute ''value''
| <code>abs(-1.0)</code> equals <code>1.0</code>
|-
| acos(rad)
| arc cosine (inverse cosine) in radians
| <code>acos(-0.5)</code> equals <code>2.094395</code>
|-
| align(value, al)
| aligns ''value'' to a multiple of ''al''
| <code>align(720, 32)</code> equals <code>736</code>
|-
| asin(rad)
| arc sine (inverse sine) in radians
| <code>asin(0.5)</code> equals <code>0.523599</code>
|-
| atan(rad)
| arc tangent (inverse tangent) in radians
| <code>atan(1.0)</code> equals <code>0.785398</code>
|-
| atan2(y, x)
| arc tangent of ''y''/''x'' in radians
| <code>atan2(0.5, 0.4)</code> equals <code>0.896055</code>
|-
| ceil(value)
| nearest integer greater than ''value''
| <code>ceil(1.23)</code> equals <code>2.0</code>
|-
| cos(rad)
| cosine in radians
| <code>cos(0.5)</code> equals <code>0.877583</code>
|-
| cosh(rad)
| hyperbolic cosine in radians
| <code>cosh(0.5)</code> equals <code>1.127626</code>
|-
| exp(value)
| exponential (Euler's number) raised to ''value''
| <code>exp(2.0)</code> equals <code>7.389056</code>
|-
| floor(value)
| nearest integer lesser than ''value''
| <code>floor(1.23)</code> equals <code>1.0</code>
|-
| ln(value)
| natural logarithm of ''value''
| <code>ln(10.0)</code> equals <code>2.302585</code>
|-
| log10(value)
| base 10 logarithm of ''value''
| <code>log10(10.0)</code> equals <code>1.0</code>
|-
| min(a, b)
| the smaller of ''a'' and ''b''
| <code>min(123, 23)</code> equals <code>23</code>
|-
| max(a, b)
| the greater of ''a'' and ''b''
| <code>max(123, 23)</code> equals <code>123</code>
|-
| pow(base, power)
| ''base'' raised to the ''power''
| <code>pow(2, 4)</code> equals <code>16</code>
|-
| round(value)
| nearest integer to ''value'' (0.5 rounds up)
| <code>round(1.23)</code> equals <code>1.0</code>
|-
| sin(rad)
| sine in radians
| <code>sin(0.5)</code> equals <code>0.479426</code>
|-
| sinh(rad)
| hyperbolic sine in radians
| <code>sinh(0.5)</code> equals <code>0.521095</code>
|-
| sqrt(value)
| square root of ''value''
| <code>sqrt(10.0)</code> equals <code>3.162278</code>
|-
| tan(rad)
| tangent in radians
| <code>tan(0.5)</code> equals <code>0.546302</code>
|-
| tanh(rad)
| hyperbolic tangent in radians
| <code>tanh(0.5)</code> equals <code>0.462117</code>
|}
 
=== Math constants ===
{|
! constant
! description
! defined as
|-
| pi
| The number π
| <code>3.141593</code>
|-
| e
| Euler's number
| <code>2.718282</code>
|}
 
=== User configuration macros ===
These return values based on user configuration entry (in ''config.txt'') for current game.
 
{|
! macro
! description
! config option
|-
| fb_w
| Framebuffer width in pixels
| FB
|-
| fb_h
| Framebuffer height in pixels
| FB
|-
| ib_w
| Internal buf. width in pixels
| IB
|-
| ib_h
| Internal buf. height in pixels
| IB
|-
| ib_wi(index)
| Internal buf. width in pixels (indexed from 0)
| IB (multiple)
|-
| ib_hi(index)
| Internal buf. height in pixels (indexed from 0)
| IB (multiple)
|-
| vblank
| Vertical blanking interval (1 for 60Hz, 2 for 30, etc...)
| FPS
|-
| msaa
| SceGxmMultisampleMode (0 for no MSAA, 1 for 2x, 2 for 4x)
| MSAA
|}
 
== Instruction encoders ==
These encode few of the commonly used instructions. Result type is always raw, size depends on encoder. All are unconditional.
 
Register arguments are expected to be decimal integers.<br />
'''ARM''' within '''0 &lt;= ''reg'' &lt;= 14''' range, where 0 denotes R0 or A1, 13 = SP and 14 = LR.<br />
'''VFP''' within '''0 &lt;= ''reg'' &lt;= 31''' range, where 0 denotes S0.
 
{|
!width="25%"| encoder
!width="25%"| description
!align="center" width="25%"| instr. set<br />
(enc.)
!align="center" width="25%"| size (B)
|-
| t1_mov(reg, imm)
| Insert an immediate value to a register.<br />
<br />
<code>MOV &lt;Rd&gt;,#&lt;imm8&gt;</code><br />
<br />
''reg'' - destination<br />
''imm'' - immediate value (up to 8-bit)
|align="center"| Thumb<br />
(T1)
|align="center"| 2
|-
| t2_mov(sf, reg, imm)
| Insert an immediate value to a register.<br />
<br />
<code>MOV{S}.W &lt;Rd&gt;,#&lt;const&gt;</code><br />
<br />
''sf'' - set condition flags (0 = MOV.W, 1 = MOVS.W)<br />
''reg'' - destination<br />
''imm'' - immediate value ([http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204j/Cihbeage.html#Cjachigd constant])
|align="center"| Thumb-2<br />
(T2)
|align="center"| 4
|-
| t3_mov(reg, imm)
| Insert an immediate value to a register.<br />
<br />
<code>MOVW &lt;Rd&gt;,#&lt;imm16&gt;</code><br />
<br />
''reg'' - destination<br />
''imm'' - immediate value (up to 16-bit)
|align="center"| Thumb-2<br />
(T3)
|align="center"| 4
|-
| t1_movt(reg, imm)
| Insert 16-bit immediate value to the top halfword of a register.<br />
Bottom halfword is not affected.<br />
<br />
<code>MOVT &lt;Rd&gt;,#&lt;imm16&gt;</code><br />
<br />
''reg'' - destination<br />
''imm'' - immediate value (up to 16-bit)
|align="center"| Thumb-2<br />
(T1)
|align="center"| 4
|-
| mov32(reg, imm, gap)
| Pseduo-instruction, generates MOVW, MOVT pair,<br />
allows you to load any 32-bit value into a register.<br />
<br />
<code>MOVW &lt;Rd&gt;,#&lt;imm16&gt;</code><br />
<code>...</code><br />
<code>MOVT &lt;Rd&gt;,#&lt;imm16&gt;</code><br />
<br />
''reg'' - destination<br />
''imm'' - immediate value (up to 32-bit)<br />
''gap'' - gap size (in bytes) between MOVW and MOVT (max. 24 B)
|align="center"| Thumb-2<br />
(T3 + T1)
|align="center"| 4 + ''gap'' + 4
|-
| a1_mov(sf, reg, imm)
| Insert an immediate value to a register.<br />
<br />
<code>MOV{S} &lt;Rd&gt;,#&lt;const&gt;</code><br />
<br />
''sf'' - set condition flags (0 = MOV, 1 = MOVS)<br />
''reg'' - destination<br />
''imm'' - immediate value ([http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204j/Cihbeage.html#Cjachigd constant])
|align="center"| Arm<br />
(A1)
|align="center"| 4
|-
| a2_mov(reg, imm)
| Insert an immediate value to a register.<br />
<br />
<code>MOVW &lt;Rd&gt;,#&lt;imm16&gt;</code><br />
<br />
''reg'' - destination<br />
''imm'' - immediate value (up to 16-bit)
|align="center"| Arm<br />
(A2)
|align="center"| 4
|-
| t2_vmov(reg, imm)
| Insert a floating-point immediate value in a single-precision register.<br />
<br />
<code>VMOV.F32 &lt;Sd&gt;, #&lt;imm&gt;</code><br />
<br />
''reg'' - destination (VFP)<br />
''imm'' - float immediate (+/-n * 2^-r, 16 &lt;= n &lt;= 31, 0 &lt;= r &lt;= 7)
|align="center"| VFPv3<br />
(T2/A2)
|align="center"| 4
|-
| bkpt
| Breakpoint (enter debug state).<br />
<br />
<code>BKPT #0</code>
|align="center"| Thumb<br />
(T1)
|align="center"| 2
|-
| nop
| No operation.<br />
<br />
<code>NOP</code>
|align="center"| Thumb-2<br />
(T1)
|align="center"| 2
|}
 
== Comments ==
Comments always start with ''#'' character. They can, but don't need to be on a separate line.
 
<pre># This is a comment
[PCSA00001, eboot.bin, 0x12345678] # This is also a valid comment
...</pre>
 
=== Backwards compatibility with v4.x ===
All older patches are compatible with v5.x, however, support for the old syntax/style might be dropped in future versions. It is highly advised to use the new syntax for new patches.


==== Changes: ====
https://dlhb.gamebrew.org/vitahomebrews/vitagrafix4.png
'''v4.x''': <code>nop()</code> and <code>bkpt()</code> encoders must have brackets<br />
'''v5.x''': <code>nop</code> and <code>bkpt</code> encoders are classified as ''constants'', ''constants'' do not have brackets<br />
'''example''':
 
* <code>nop()</code> =&gt; <code>nop</code>
 
'''v4.x''': no support for math operators/fns/precedence, macros start with '''&lt;''' and end with '''&gt;'''<br />
'''v5.x''': infix operators and math ''functions'' are available<br />
'''example''':
 
* <code>&lt;+,1,2&gt;</code> =&gt; <code>1 + 2</code>
* <code>&lt;*,&lt;&amp;,&lt;+,&lt;fb_w&gt;,31&gt;,0xFFFFFFE0&gt;,4&gt;</code> =&gt; <code>align(fb_w, 32) * 4</code>
 
'''v4.x''': config-option macros start with '''&lt;''' and end with '''&gt;'''<br />
'''v5.x''': config-option macros are used just like regular ''constants'' and ''functions''<br />
'''example''':
 
* <code>&lt;fb_w&gt;</code> =&gt; <code>fb_w</code>
* <code>&lt;ib_w&gt;</code> =&gt; <code>ib_w</code>
* <code>&lt;ib_w,2&gt;</code> =&gt; <code>ib_wi(2)</code>
 
'''v4.x''': no extra spaces are allowed, comments have to be on a separate line<br />
'''v5.x''': spaces are ignored, anything after ''#'' too (until EOL)<br />
'''example''':
 
* <code>t2_mov(1,1,&lt;fb_w&gt;)</code> =&gt; <code>t2_mov(1, 1, fb_w)</code>
* <code># Comment</code><br />
<code>0:0x1234 nop</code> is valid just like <code>0:0x1234 nop # Comment</code>
 
'''v4.x''': '''bytes()''' is used to parse raw bytes<br />
'''v5.x''': '''r''' suffix is used to parse raw bytes, '''raw()''' is used for reinterpreting/conversion<br />
'''example''':
 
* <code>bytes(DE AD BE EF)</code> =&gt; <code>DEADBEEF r</code>
 
'''and more...'''
 
=== Examples ===
Here are some examples of valid patches.
 
<pre>[PCSF00243,eboot.bin]            # Killzone Mercenary [EU 1.12]
[PCSF00403,eboot.bin]            # Killzone Mercenary [EU 1.12]
[PCSA00107,eboot.bin,0x0F9D3B7C] # Killzone Mercenary [US 1.12]
[PCSC00045,eboot.bin]            # Killzone Mercenary [JP 1.12]
[PCSD00071,eboot.bin]            # Killzone Mercenary [ASIA 1.12]
@IB
0:0x15A5C8 nop *4
1:0xD728 uint32(ib_w) . uint32(ib_h)
1:0xD730 uint32(ib_w) . uint32(ib_h)</pre>
 
<pre># God of War Collection [EU 1.00]
[PCSF00438,GOW1.self,0x8638ffed]
@FB
0:0x9E212 t2_mov(1, 4, fb_w)
0:0x9E21A t2_mov(1, 2, fb_h)
0:0x9F0F0 t2_mov(1, 0, fb_w)
0:0x9F0F8 t2_mov(1, 1, fb_h)
0:0xA31C6 t2_mov(1, 7, fb_w)
0:0xA31CC t2_mov(1, 1, fb_h)
0:0xCEF06 t2_mov(1, 0, fb_w)
0:0xCEF0E t2_mov(1, 2, fb_h)
0:0xA1098 t2_mov(1, 14, fb_h)
@FPS
0:0x9E228 t1_mov(0, vblank)</pre>
 
<pre># LEGO Star Wars: The Force Awakens [EU 1.00]
[PCSB00877,eboot.bin]
@IB
0:0x2241C4 t2_mov(1, 1, 0xA00000)
0:0x1F313E t2_mov(1, 4, ib_w)
0:0x1F3144 t2_mov(1, 5, ib_h)
1:0x4650 uint32(ib_w) . uint32(ib_h)
# Fix touchscreen/touchpad pos calc
0:0x223AF6 t2_mov(0, 0, 640) . nop *3
0:0x223B36 t2_mov(0, 0, 368) . nop *3</pre>
 
=== IO/patcher/syntax errors ===
The parser will try to warn you if you make a mistake. Nevertheless, it isn't perfect so you shouldn't rely on it.
 
==== Example: ====
https://dlhb.gamebrew.org/vitahomebrews/vitagrafix_errors.png


==Changelog==
==Changelog==
'''(v.5.0.2)'''
'''v5.0.2'''
* Fixed a bug where "Your game version is not supported" message would not appear if you had a different game version to that of a patch
* Fixed a bug where "Your game version is not supported" message would not appear if you had a different game version to that of a patch.


'''(v.5.0.1)'''
'''v5.0.1'''
* Fixed bug where last IB res. in config.txt was not propagated, causing crash in multi-res. games (e.g. those with dynamic scaling such as Wipeout 2048)
* Fixed bug where last IB res. in config.txt was not propagated, causing crash in multi-res. games (e.g. those with dynamic scaling such as Wipeout 2048).
* Added support for manual redirection to alternate patch file (aka. !USE directive in patchlist.txt)
* Added support for manual redirection to alternate patch file (aka. !USE directive in patchlist.txt).


'''(v.5.0.0)'''
'''v5.0.0'''
* Vastly improved UX (UI, logging, error reporting, etc...)
*Vastly improved UX (UI, logging, error reporting, etc...).
*Rewritten parser/interpreter from scratch - revamped patchlist.txt syntax (compatible with v4.x patches)
*Rewritten parser/interpreter from scratch - revamped patchlist.txt syntax (compatible with v4.x patches).
*Added support for per-self headers in config.txt
*Added support for per-self headers in config.txt.
**Now you can use separate options for each game in "collections" with single Title ID (e.g. GoW 1/2)
**Now you can use separate options for each game in "collections" with single Title ID (e.g. GoW 1/2).
*Added internal log buffer - reduced game startup times due to I/O stall
*Added internal log buffer - reduced game startup times due to I/O stall.
*Added config.txt option to disable logging altogether
*Added config.txt option to disable logging altogether.
*Added support for 20 FPS option in config.txt
*Added support for 20 FPS option in config.txt.
*Added support for individual per-game patchlists (e.g. ux0:data/VitaGrafix/patch/PCSF00001.txt)
*Added support for individual per-game patchlists (e.g. ux0:data/VitaGrafix/patch/PCSF00001.txt).
*Added support for inline comments on the same line as code
*Added support for inline comments on the same line as code.
*Bug fixes
*Bug fixes.


'''(v.4.1.1)'''
'''v4.1.1'''
*Fixed bug where [MAIN] options were ignored in some occasions.
*Fixed bug where [MAIN] options were ignored in some occasions.
*Minor UI QoL improvements
*Minor UI QoL improvements.
*Config/patchlist parsing is now case-insensitive
*Config/patchlist parsing is now case-insensitive.
*[MAIN] accepts same options as GAME section - the latter takes precedence if both are present. You can set your FB/IB/FPS/etc.. in [MAIN], those will be used as default values.
*[MAIN] accepts same options as GAME section - the latter takes precedence if both are present. You can set your FB/IB/FPS/etc.. in [MAIN], those will be used as default values.
*Added support for Arm A2 MOVW encoding (a2_mov) in patchlist.txt
*Added support for Arm A2 MOVW encoding (a2_mov) in patchlist.txt.


'''(v.4.0)'''
'''v4.0'''
* Hardcoded patches were removed, which means, updates to VitaGrafix plugin in the future will only bring new feature support / bug fixes.
* Hardcoded patches were removed, which means, updates to VitaGrafix plugin in the future will only bring new feature support / bug fixes.
* All game related stuff, new game support, fixes, etc... will be available here: VitaGrafixPatchlist (changelog)
* All game related stuff, new game support, fixes, etc... will be available here: VitaGrafixPatchlist (changelog).
* Download patchlist.txt (or make your own) and place it in ux0:data/VitaGrafix/
* Download patchlist.txt (or make your own) and place it in ux0:data/VitaGrafix/.


'''(v.3.2)'''
'''v3.2'''
*Game support:
 
**Wipeout 2048 [EU/US/JP/ASIA] - 14x IB resolution - game uses dynamic res. scaling, you can specify up to 14 IB resolutions to override the default ones (or just 1 to disable the scaling completely)
Game support:
**Fate/EXTELLA LINK [JP/ASIA] - IB resolution
*Wipeout 2048 [EU/US/JP/ASIA] - 14x IB resolution - game uses dynamic res. scaling, you can specify up to 14 IB resolutions to override the default ones (or just 1 to disable the scaling completely).
**Assassin's Creed III: Liberation [EU/US] - IB resolution + FPS cap
*Fate/EXTELLA LINK [JP/ASIA] - IB resolution.
*Assassin's Creed III: Liberation [EU/US] - IB resolution + FPS cap.


Thanks to @FormerNoob:
Thanks to @FormerNoob:
*The Legend of Heroes: Trails of Cold Steel [EU/US/JP/ASIA] - IB resolution
*The Legend of Heroes: Trails of Cold Steel [EU/US/JP/ASIA] - IB resolution.
*The Legend of Heroes: Trails of Cold Steel II [EU/US/JP/ASIA] - IB resolution
*The Legend of Heroes: Trails of Cold Steel II [EU/US/JP/ASIA] - IB resolution.
*Dead or Alive Xtreme 3: Venus [JP/ASIA] - 2x IB resolution - uses dynamic scaling
*Dead or Alive Xtreme 3: Venus [JP/ASIA] - 2x IB resolution - uses dynamic scaling.


Thanks to @nigelweng:
Thanks to @nigelweng:
*Resident Evil: Revelations 2 [EU/US/JP] - IB resolution
*Resident Evil: Revelations 2 [EU/US/JP] - IB resolution.


 
'''v3.1.1'''
'''(v.3.1.1)'''
*Fixed bug where Jak & Daxter Collection [EU/US] would show 'game version unsupported' message in the game shell (Jak 1, 2, 3 game selection menu).
*Fixed bug where Jak & Daxter Collection [EU/US] would show 'game version unsupported' message in the game shell (Jak 1, 2, 3 game selection menu).
*Fixed crash when only one IB resolution was specified for Ninja Gaiden Sigma 2 Plus.
*Fixed crash when only one IB resolution was specified for Ninja Gaiden Sigma 2 Plus.
Line 1,951: Line 202:
*Fixed log messages line feed.
*Fixed log messages line feed.


'''(v.3.1)'''
'''v3.1'''
* New game support:
*The plugin now uses ioPlus v0.1. You will need to install ioPlus.skprx in order to use this version.
**Sly Cooper Collection (1, 2, 3) [EU/US] - FB res. + FPS cap
*All game options (IB/FB/FPS) are now OFF by default. You will need to either configure them manually or using [https://github.com/Kirezar/VitaGrafixConfigurator VitaGrafixConfigurator].
**Sly Cooper Thieves in Time [EU/US] - FPS cap
 
**Ninja Gaiden Sigma 2 Plus [EU/US/JP] - 2x IB res. (game uses dynamic scaling, you need to specify two res. e.g. IB=960x544,720x408)
New game support:
**Dragon Quest Builders [EU/US/JP/ASIA] - FPS cap (you can force 30 FPS lock)
*Sly Cooper Collection (1, 2, 3) [EU/US] - FB res. + FPS cap
**Ratchet & Clank Collection (1, 2, 3) [EU/US] - FB res.
*Sly Cooper Thieves in Time [EU/US] - FPS cap
**Ratchet & Clank Full Frontal Assault / QForce [EU/US] - FB res.
*Ninja Gaiden Sigma 2 Plus [EU/US/JP] - 2x IB res. (game uses dynamic scaling, you need to specify two res. e.g. IB=960x544,720x408)
**Utawarerumono: Chiriyuku Mono he no Komoriuta [JP] - IB res.
*Dragon Quest Builders [EU/US/JP/ASIA] - FPS cap (you can force 30 FPS lock)
**Dragon Ball Z: Battle of Z [EU/US/JP] - IB res.
*Ratchet & Clank Collection (1, 2, 3) [EU/US] - FB res.
*Ratchet & Clank Full Frontal Assault / QForce [EU/US] - FB res.
*Utawarerumono: Chiriyuku Mono he no Komoriuta [JP] - IB res.
*Dragon Ball Z: Battle of Z [EU/US/JP] - IB res.


New region support:
New region support:
Line 1,966: Line 220:


Fixes:
Fixes:
*LEGO Star Wars: The Force Awakens [EU/US] - now playable at 960x544 without crashes
*LEGO Star Wars: The Force Awakens [EU/US] - now playable at 960x544 without crashes.


Known issues:
Known issues:
*Ratchet & Clank 2 + 3 has some UI clipping issues. #16
*Ratchet & Clank 2 + 3 has some UI clipping issues. #16.
 
'''v2.4'''


'''(v.2.4)'''
Game support:
* Game support
*Added Hatsune Miku: Project Diva f [EUR/USA/JPN] internal res. patch
**Added Hatsune Miku: Project Diva f [EUR/USA/JPN] internal res. patch
*Added Hatsune Miku: Project Diva f 2nd [EUR/USA/JPN/ASA] internal res. + FPS cap patch
**Added Hatsune Miku: Project Diva f 2nd [EUR/USA/JPN/ASA] internal res. + FPS cap patch
*Added Hatsune Miku: Project Diva X [EUR/USA/ASA] internal res. patch
**Added Hatsune Miku: Project Diva X [EUR/USA/ASA] internal res. patch
*Added The Amazing Spider-Man [EUR] internal res. + FPS cap patch
**Added The Amazing Spider-Man [EUR] internal res. + FPS cap patch
*Added Sly Cooper and the Thievius Raccoonus [USA] framebuffer res. + FPS cap patch
**Added Sly Cooper and the Thievius Raccoonus [USA] framebuffer res. + FPS cap patch
*Fixed the issue in Killzone: Mercenary where (controller) input didn't work at >59 fps.
**Fixed the issue in Killzone: Mercenary where (controller) input didn't work at >59 fps.


Known issues
Known issues:
*The Amazing Spider-Man: Only few IB resolutions work properly. 960x544 causes GPU crash in some areas.
*The Amazing Spider-Man: Only few IB resolutions work properly. 960x544 causes GPU crash in some areas.


'''(v.2.3)'''
'''v2.3'''
* Game support
 
**Added MotoGP 13 [EUR/USA] internal res. patch
Game support:
**Added MotoGP 14 [USA] internal res. patch
*Added MotoGP 13 [EUR/USA] internal res. patch.
**Added WRC 5 [EUR] framebuffer res. patch
*Added MotoGP 14 [USA] internal res. patch.
**Added Utawarerumono: Mask of Deception [EUR] internal res. patch
*Added WRC 5 [EUR] framebuffer res. patch.
**Added Utawarerumono: Mask of Truth [EUR/USA/JPN] internal res. patch
*Added Utawarerumono: Mask of Deception [EUR] internal res. patch.
**Added Dragon Quest Builders [EUR/USA/JPN/ASA] internal res. patch
*Added Utawarerumono: Mask of Truth [EUR/USA/JPN] internal res. patch.
*Added Dragon Quest Builders [EUR/USA/JPN/ASA] internal res. patch.
 
'''v2.2'''


'''(v.2.2)'''
Game support:
* Game support
*Added Ridge Racer [EUR/USA/JPN] internal res. patch.
**Added Ridge Racer [EUR/USA/JPN] internal res. patch.
*Added Utawarerumono: Mask of Deception [USA/JPN] internal res. patch.
**Added Utawarerumono: Mask of Deception [USA/JPN] internal res. patch.
*Added World of Final Fantasy [JPN] internal res. patch.
**Added World of Final Fantasy [JPN] internal res. patch.
*Added Dead or Alive 5 Plus [EUR/USA/JPN] internal res. patch.
**Added Dead or Alive 5 Plus [EUR/USA/JPN] internal res. patch.
*Added Miracle Girls Festival [JPN] internal res. patch.
**Added Miracle Girls Festival [JPN] internal res. patch.
*Added Jak and Daxter Collection [EUR/USA] framebuffer res. patch.
**Added Jak and Daxter Collection [EUR/USA] framebuffer res. patch.
*Added Hatsune Miku: Project Diva f [EUR/USA/JPN] FPS cap patch.
**Added Hatsune Miku: Project Diva f [EUR/USA/JPN] FPS cap patch.


Known issues
Known issues:
*World of Final Fantasy: Only few resolutions work properly. Default has been changed to 800x480 (known working res.).
*World of Final Fantasy: Only few resolutions work properly. Default has been changed to 800x480 (known working res.).
*LEGO Star Wars: The Force Awakens: Crashes at native res (when opening pause menu, and possibly at other times too). Default has been changed to 720x408 (still higher than original 640x384).
*LEGO Star Wars: The Force Awakens: Crashes at native res (when opening pause menu, and possibly at other times too). Default has been changed to 720x408 (still higher than original 640x384).
Line 2,008: Line 265:
*Hatsune Miku: Project Diva f: 60 FPS doubles menu animations speed. Gameplay remains normal.
*Hatsune Miku: Project Diva f: 60 FPS doubles menu animations speed. Gameplay remains normal.


'''(v.2.1)'''
'''v2.1'''
* Game support
 
**Added F1 2011 [EUR] internal resolution patch
Game support:
**Added LittleBigPlanet [EUR/USA/JPN/ASA] internal resolution patch
*Added F1 2011 [EUR] internal resolution patch.
**Added Borderlands 2 [EUR/USA] framebuffer resolution patch
*Added LittleBigPlanet [EUR/USA/JPN/ASA] internal resolution patch.
**Added Asphalt: Injection [EUR/USA] internal resolution patch
*Added Borderlands 2 [EUR/USA] framebuffer resolution patch.
**Added LEGO Star Wars: The Force Awakens [EUR/USA] internal resolution patch
*Added Asphalt: Injection [EUR/USA] internal resolution patch.
**Added World of Final Fantasy [EUR/USA/ASA] internal resolution patch
*Added LEGO Star Wars: The Force Awakens [EUR/USA] internal resolution patch.
*Added World of Final Fantasy [EUR/USA/ASA] internal resolution patch.


'''(v.2.0)'''
'''v2.0'''
* Game support:
**Added Killzone Mercenary [EUR/USA/JPN/ASA] internal resolution patch
**Added WRC 3 [EUR] internal resolution patch*
**Added WRC 4 [EUR/USA] internal resolution patch*
**Added Persona 4 Golden [JPN] (PCSG00004) internal resolution patch
**Added God of War Collection [EUR/USA/JPN] framebuffer resolution + FPS cap patch (GoW 1 + 2)
**Added MUD - FIM Motocross World Championship [EUR] internal resolution patch
**Added MXGP: The Official Motocross Videogame [EUR/USA] internal resolution patch


Thanks to InquisitionImplied for finding the HEX edits
Game support:
*Added Killzone Mercenary [EUR/USA/JPN/ASA] internal resolution patch.
*Added WRC 3 [EUR] internal resolution patch*.
*Added WRC 4 [EUR/USA] internal resolution patch*.
*Added Persona 4 Golden [JPN] (PCSG00004) internal resolution patch.
*Added God of War Collection [EUR/USA/JPN] framebuffer resolution + FPS cap patch (GoW 1 + 2).
*Added MUD - FIM Motocross World Championship [EUR] internal resolution patch.
*Added MXGP: The Official Motocross Videogame [EUR/USA] internal resolution patch.
*(Thanks to InquisitionImplied for finding the HEX edits.)


'''(v.1.3.1)'''
'''v1.3.1'''
* Fixed P4G offsets for JPN+ASA (hopefully)
* Fixed P4G offsets for JPN+ASA (hopefully).


'''(v.1.3)'''
'''v1.3'''
* Added Persona 4 Golden 476p -> 544p 3D resolution hack for ASA (PCSH00021). (thanks to /u/kane159)
* Added Persona 4 Golden 476p -> 544p 3D resolution hack for ASA (PCSH00021) (thanks to /u/kane159).
* The plugin now shows OSD for a few seconds after starting the game.
* The plugin now shows OSD for a few seconds after starting the game..


'''(v.1.2)'''
'''v1.2'''
* Added Persona 4 Golden 476p -> 544p 3D resolution hack for USA + JPN versions
* Added Persona 4 Golden 476p -> 544p 3D resolution hack for USA + JPN versions.


'''(v.1.1)'''
'''v1.1'''
* Added Persona 4 Golden [EUR] 476p -> 544p 3D resolution hack
* Added Persona 4 Golden [EUR] 476p -> 544p 3D resolution hack.


'''(v.1.0)'''
'''v1.0'''
* Add Killzone Mercenary 60 fps patch
* Add Killzone Mercenary 60 fps patch.


==Credits==
==Credits==
I'd like to thank the following people who made this possible:
Thanks to:
*Team Molecule for [https://henkaku.xyz/ HENkaku]/[[Taihen Vita|taiHEN]]
*Team Molecule for [https://henkaku.xyz/ HENkaku]/[https://tai.henkaku.xyz/ taiHEN].
*Rinnegatamante for [https://github.com/Rinnegatamante/vitaRescale vitaRescale]
*[https://github.com/Rinnegatamante Rinnegatamante] for [https://github.com/Rinnegatamante/vitaRescale vitaRescale].
*dots_tb for [[ioPlus Vita]]
*[https://github.com/dots-tb dots_tb] for [https://github.com/CelesteBlue-dev/PSVita-RE-tools/tree/master/ioPlus/ioPlus-0.1 ioPlus Vita].
*[https://www.youtube.com/user/IgiFactor Gontko Productions] for the VitaGrafix logo
*[https://www.youtube.com/user/IgiFactor Gontko Productions] for the VitaGrafix logo.
*all the supporters and patch-makers :)
*All the supporters and patch-makers.


== External links ==
==External links==
* Github - https://github.com/Electry/VitaGrafix
* GitHub - https://github.com/Electry/VitaGrafix
* VitaDB - https://vitadb.rinnegatamante.it/#/info/396
* VitaDB - https://vitadb.rinnegatamante.it/#/info/396
* VitaGrafixPatchlist - https://github.com/Electry/VitaGrafixPatchlist
* VitaGrafixPatchlist - https://github.com/Electry/VitaGrafixPatchlist

Latest revision as of 06:57, 30 Ocak 2024

VitaGrafix
Vitagrafix2.png
General
AuthorElectry
TypePlugins
Version5.0.2
LicenseGPL-3.0
Last Updated2019/12/29
Links
Download
Website
Source


VitaGrafix is a taiHEN plugin that allows you to change resolution and FPS cap of PS Vita games (to get better visuals, higher FPS or longer battery life).

VitaGrafix was originally, in it’s early days, based on vitaRescale by Rinnegatamante, with hardcoded patches only for a dozen of games.

The project has evolved quite a bit since then. It is now an independent taiHEN plugin with custom interpreter to easily support user-made patches. The official patchlist contains support for over 50 games.

It patches eboot.bin executable on game start-up, allowing us to alter game's graphics initialization and runtime code. Because each game does this differently, per-game patches are required.

Note: Per-game patches are required. Some are easy to patch, others plainly impossible.

Installation

Download latest VitaGrafix.suprx and ioPlus.skprx (v0.1).

If ux0:tai/config.txt file does exist:

  • Copy VitaGrafix.suprx and ioPlus.skprx to ux0:tai/ directory.
  • Open ux0:tai/config.txt in a text editor and add following lines to the file
*KERNEL
ux0:tai/ioPlus.skprx
*ALL
ux0:tai/VitaGrafix.suprx

Otherwise (e.g. if you are using SD2VITA mounted as ux0):

  • Copy VitaGrafix.suprx and ioPlus.skprx to ur0:tai/ directory.
  • Open ur0:tai/config.txt in a text editor and add following lines to the file.
*KERNEL
ur0:tai/ioPlus.skprx
*ALL
ur0:tai/VitaGrafix.suprx

Then create ux0:data/VitaGrafix/ folder.

Download patchlist.txt from here and move it to the folder.

Create and open ux0:data/VitaGrafix/config.txt file.

Add games to the config you wish to apply patches for (refer to your patchlist.txt).

User guide

Resources

Example config.txt

Below is a config.txt example that can be used as a guide for your game.

# This is a comment.
# The Legend of Heroes: Trails of Cold Steel II [JP 1.03]
[PCSG00354] # Game title ID
IB=640x352 # Set IB to 960x544 or less
FPS=60 # FPS value can be selected from 60, 30, 20
MSAA=4x # select MSAA from 4x, 2x, 1x (no AA)

# Set default options for all games
[MAIN]
FB=960x544
IB=960x544
FPS=60
MSAA=4x

Available options

The format for config.txt is OPTION=VALUE, each on a separate line.

Option Description Valid values Default
ENABLED Enables/disables game modifications (and OSD). ON: 1, on or true ON
OFF: 0, off or false
OSD Enables/disables the small overlay that is shown during first few seconds when starting a game. ON: 1, on or true ON
OFF: 0, off or false
LOG Enables/disables logging (to ux0:data/VitaGrafix/log.txt file). ON: 1, on or true ON
OFF: 0, off or false
FB Framebuffer resolution. ON:960x544, 720x408, 640x368 OFF
OFF: 0, off or false
IB Internal buffer resolution. ON: WxH (where: 1 <= W <= 960, 1 <= H <= 544).
If patch supports multiple res. (e.g. dyn. res. scaling) use: WxH,WxH,...
OFF
OFF: 0, off or false
FPS Frames per second cap (upper limit). ON: 60, 30, 20 OFF
OFF: 0, off or false
MSAA Multisample anti-aliasing. ON: 4x, 2x, 1x (no AA) OFF
OFF: 0, off or false

Tips:

  • If you leave some options out, the plugin will use their default values.
  • If patch supports multiple IB res. and you don't specify them all, the last WxH will be used for those that would go after. It is therefore perfectly fine to just use IB=960x544 to set them all to 960x544 (e.g. to disable dynamic res. scaling) in such situations.

Screenshots

vitagrafix3.png

vitagrafix4.png

Changelog

v5.0.2

  • Fixed a bug where "Your game version is not supported" message would not appear if you had a different game version to that of a patch.

v5.0.1

  • Fixed bug where last IB res. in config.txt was not propagated, causing crash in multi-res. games (e.g. those with dynamic scaling such as Wipeout 2048).
  • Added support for manual redirection to alternate patch file (aka. !USE directive in patchlist.txt).

v5.0.0

  • Vastly improved UX (UI, logging, error reporting, etc...).
  • Rewritten parser/interpreter from scratch - revamped patchlist.txt syntax (compatible with v4.x patches).
  • Added support for per-self headers in config.txt.
    • Now you can use separate options for each game in "collections" with single Title ID (e.g. GoW 1/2).
  • Added internal log buffer - reduced game startup times due to I/O stall.
  • Added config.txt option to disable logging altogether.
  • Added support for 20 FPS option in config.txt.
  • Added support for individual per-game patchlists (e.g. ux0:data/VitaGrafix/patch/PCSF00001.txt).
  • Added support for inline comments on the same line as code.
  • Bug fixes.

v4.1.1

  • Fixed bug where [MAIN] options were ignored in some occasions.
  • Minor UI QoL improvements.
  • Config/patchlist parsing is now case-insensitive.
  • [MAIN] accepts same options as GAME section - the latter takes precedence if both are present. You can set your FB/IB/FPS/etc.. in [MAIN], those will be used as default values.
  • Added support for Arm A2 MOVW encoding (a2_mov) in patchlist.txt.

v4.0

  • Hardcoded patches were removed, which means, updates to VitaGrafix plugin in the future will only bring new feature support / bug fixes.
  • All game related stuff, new game support, fixes, etc... will be available here: VitaGrafixPatchlist (changelog).
  • Download patchlist.txt (or make your own) and place it in ux0:data/VitaGrafix/.

v3.2

Game support:

  • Wipeout 2048 [EU/US/JP/ASIA] - 14x IB resolution - game uses dynamic res. scaling, you can specify up to 14 IB resolutions to override the default ones (or just 1 to disable the scaling completely).
  • Fate/EXTELLA LINK [JP/ASIA] - IB resolution.
  • Assassin's Creed III: Liberation [EU/US] - IB resolution + FPS cap.

Thanks to @FormerNoob:

  • The Legend of Heroes: Trails of Cold Steel [EU/US/JP/ASIA] - IB resolution.
  • The Legend of Heroes: Trails of Cold Steel II [EU/US/JP/ASIA] - IB resolution.
  • Dead or Alive Xtreme 3: Venus [JP/ASIA] - 2x IB resolution - uses dynamic scaling.

Thanks to @nigelweng:

  • Resident Evil: Revelations 2 [EU/US/JP] - IB resolution.

v3.1.1

  • Fixed bug where Jak & Daxter Collection [EU/US] would show 'game version unsupported' message in the game shell (Jak 1, 2, 3 game selection menu).
  • Fixed crash when only one IB resolution was specified for Ninja Gaiden Sigma 2 Plus.
  • Fixed issue where World of Final Fantasy would not show any special effects at 960x544 (hopefully).
  • Fixed log messages line feed.

v3.1

  • The plugin now uses ioPlus v0.1. You will need to install ioPlus.skprx in order to use this version.
  • All game options (IB/FB/FPS) are now OFF by default. You will need to either configure them manually or using VitaGrafixConfigurator.

New game support:

  • Sly Cooper Collection (1, 2, 3) [EU/US] - FB res. + FPS cap
  • Sly Cooper Thieves in Time [EU/US] - FPS cap
  • Ninja Gaiden Sigma 2 Plus [EU/US/JP] - 2x IB res. (game uses dynamic scaling, you need to specify two res. e.g. IB=960x544,720x408)
  • Dragon Quest Builders [EU/US/JP/ASIA] - FPS cap (you can force 30 FPS lock)
  • Ratchet & Clank Collection (1, 2, 3) [EU/US] - FB res.
  • Ratchet & Clank Full Frontal Assault / QForce [EU/US] - FB res.
  • Utawarerumono: Chiriyuku Mono he no Komoriuta [JP] - IB res.
  • Dragon Ball Z: Battle of Z [EU/US/JP] - IB res.

New region support:

  • Borderlands 2 [EU-2] (PCSF00576) - FB res.

Fixes:

  • LEGO Star Wars: The Force Awakens [EU/US] - now playable at 960x544 without crashes.

Known issues:

  • Ratchet & Clank 2 + 3 has some UI clipping issues. #16.

v2.4

Game support:

  • Added Hatsune Miku: Project Diva f [EUR/USA/JPN] internal res. patch
  • Added Hatsune Miku: Project Diva f 2nd [EUR/USA/JPN/ASA] internal res. + FPS cap patch
  • Added Hatsune Miku: Project Diva X [EUR/USA/ASA] internal res. patch
  • Added The Amazing Spider-Man [EUR] internal res. + FPS cap patch
  • Added Sly Cooper and the Thievius Raccoonus [USA] framebuffer res. + FPS cap patch
  • Fixed the issue in Killzone: Mercenary where (controller) input didn't work at >59 fps.

Known issues:

  • The Amazing Spider-Man: Only few IB resolutions work properly. 960x544 causes GPU crash in some areas.

v2.3

Game support:

  • Added MotoGP 13 [EUR/USA] internal res. patch.
  • Added MotoGP 14 [USA] internal res. patch.
  • Added WRC 5 [EUR] framebuffer res. patch.
  • Added Utawarerumono: Mask of Deception [EUR] internal res. patch.
  • Added Utawarerumono: Mask of Truth [EUR/USA/JPN] internal res. patch.
  • Added Dragon Quest Builders [EUR/USA/JPN/ASA] internal res. patch.

v2.2

Game support:

  • Added Ridge Racer [EUR/USA/JPN] internal res. patch.
  • Added Utawarerumono: Mask of Deception [USA/JPN] internal res. patch.
  • Added World of Final Fantasy [JPN] internal res. patch.
  • Added Dead or Alive 5 Plus [EUR/USA/JPN] internal res. patch.
  • Added Miracle Girls Festival [JPN] internal res. patch.
  • Added Jak and Daxter Collection [EUR/USA] framebuffer res. patch.
  • Added Hatsune Miku: Project Diva f [EUR/USA/JPN] FPS cap patch.

Known issues:

  • World of Final Fantasy: Only few resolutions work properly. Default has been changed to 800x480 (known working res.).
  • LEGO Star Wars: The Force Awakens: Crashes at native res (when opening pause menu, and possibly at other times too). Default has been changed to 720x408 (still higher than original 640x384).
  • LittleBigPlanet: Particles don't render correctly at native res. Default has been changed to OFF.
  • Hatsune Miku: Project Diva f: 60 FPS doubles menu animations speed. Gameplay remains normal.

v2.1

Game support:

  • Added F1 2011 [EUR] internal resolution patch.
  • Added LittleBigPlanet [EUR/USA/JPN/ASA] internal resolution patch.
  • Added Borderlands 2 [EUR/USA] framebuffer resolution patch.
  • Added Asphalt: Injection [EUR/USA] internal resolution patch.
  • Added LEGO Star Wars: The Force Awakens [EUR/USA] internal resolution patch.
  • Added World of Final Fantasy [EUR/USA/ASA] internal resolution patch.

v2.0

Game support:

  • Added Killzone Mercenary [EUR/USA/JPN/ASA] internal resolution patch.
  • Added WRC 3 [EUR] internal resolution patch*.
  • Added WRC 4 [EUR/USA] internal resolution patch*.
  • Added Persona 4 Golden [JPN] (PCSG00004) internal resolution patch.
  • Added God of War Collection [EUR/USA/JPN] framebuffer resolution + FPS cap patch (GoW 1 + 2).
  • Added MUD - FIM Motocross World Championship [EUR] internal resolution patch.
  • Added MXGP: The Official Motocross Videogame [EUR/USA] internal resolution patch.
  • (Thanks to InquisitionImplied for finding the HEX edits.)

v1.3.1

  • Fixed P4G offsets for JPN+ASA (hopefully).

v1.3

  • Added Persona 4 Golden 476p -> 544p 3D resolution hack for ASA (PCSH00021) (thanks to /u/kane159).
  • The plugin now shows OSD for a few seconds after starting the game..

v1.2

  • Added Persona 4 Golden 476p -> 544p 3D resolution hack for USA + JPN versions.

v1.1

  • Added Persona 4 Golden [EUR] 476p -> 544p 3D resolution hack.

v1.0

  • Add Killzone Mercenary 60 fps patch.

Credits

Thanks to:

External links

Advertising: