2010-11-07 04:45:10 +00:00
/* ZZ Open GL graphics plugin
* Copyright ( c ) 2009 - 2010 zeydlitz @ gmail . com , arcum42 @ gmail . com
* Based on Zerofrog ' s ZeroGS KOSMOS ( c ) 2005 - 2008
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA
*/
2010-11-07 05:51:54 +00:00
# include "Util.h"
2010-11-07 04:45:10 +00:00
# include "ZZHacks.h"
# include "ZZLog.h"
int CurrentHack = 0 ;
// A list of what bit controls each of the current hacks.
u32 hackList [ HACK_NUMBER ] =
{
0 , // No hack
1 , //GAME_TEXTURETARGS,
2 , //GAME_AUTORESET,
3 , //GAME_INTERLACE2X,
4 , //GAME_TEXAHACK,
5 , //GAME_NOTARGETRESOLVE,
6 , //GAME_EXACTCOLOR,
//7 //GAME_NOCOLORCLAMP,
//8 //GAME_FFXHACK,
9 , //GAME_NOALPHAFAIL,
10 , //GAME_NODEPTHUPDATE,
11 , //GAME_QUICKRESOLVE1,
12 , //GAME_NOQUICKRESOLVE,
13 , //GAME_NOTARGETCLUT,
14 , //GAME_NOSTENCIL,
15 , //GAME_NODEPTHRESOLVE,
16 , //GAME_FULL16BITRES,
17 , //GAME_RESOLVEPROMOTED,
18 , //GAME_FASTUPDATE,
19 , //GAME_NOALPHATEST,
20 , //GAME_DISABLEMRTDEPTH,
//21 //GAME_32BITTARGS,
//22 //GAME_PATH3HACK,
//23 //GAME_DOPARALLELCTX,
24 , //GAME_XENOSPECHACK,
//25 //GAME_PARTIALPOINTERS,
26 , //GAME_PARTIALDEPTH,
27 , //GAME_REGETHACK,
28 , //GAME_GUSTHACK,
29 , //GAME_NOLOGZ,
30 , //GAME_AUTOSKIPDRAW
} ;
char hackDesc [ 32 ] [ 64 ] =
{
" No hack " ,
" Texture targs " ,
" Auto reset " ,
" Interlace 2x " ,
" Texa " ,
" No target resolve " ,
" Exact color " ,
" No color clamp " ,
" Final Fantasy X " ,
" No alpha fail " ,
" No depth update " ,
" Quick resolve 1 " ,
" No Quick resolve " ,
" No target clut " ,
" No stencil " ,
" VSS " ,
" No depth resolve " ,
" Full 16 bit resolution " ,
" Resolve promoted " ,
" Fast update " ,
" No alpha test " ,
" Disable mrt depth " ,
" Args 32 bit " ,
" " ,
" Parallel context " ,
" Xenosaga spec " ,
" Partial pointers " ,
" Partial depth " ,
" Reget " ,
" Gust " ,
" No logz " ,
" Automatic skip draw "
} ;
struct hacks
{
bool enabled ;
char shortDesc [ 64 ] ;
char longDesc [ 256 ] ;
} ;
hacks hack_list [ 32 ] =
{
{ true , " No hack " , " No hack " } ,
{ true , " Texture targs " , " Tex Target checking - 00000001 \n Lego Racers " } ,
{ true , " Auto reset " , " Auto reset targs - 00000002 \n Use when game is slow and toggling AA fixes it. Samurai Warriors. (Automatically on for Shadow Hearts) " } ,
{ true , " Interlace 2x " , " Interlace 2X - 00000004 \n Fixes 2x bigger screen. Gradius 3. " } ,
{ false , " Texa " , " " } ,
{ true , " No target resolve " , " No target resolves - 00000010 \n Stops all resolving of targets. Try this first for really slow games. (Automatically on for Dark Cloud 1.) " } ,
{ true , " Exact color " , " Exact color testing - 00000020 \n Fixes overbright or shadow/black artifacts. Crash 'n Burn. " } ,
{ false , " No color clamp " , " No color clamping - 00000040 \n Speeds up games, but might be too bright or too dim. " } ,
{ false , " Final Fantasy X " , " " } ,
{ false , " No alpha fail " , " Alpha Fail hack - 00000100 \n Remove vertical stripes or other coloring artifacts. Breaks Persona 4 and MGS3. (Automatically on for Sonic Unleashed, Shadow the Hedgehog, & Ghost in the Shell.) " } ,
{ true , " No depth update " , " Disable depth updates - 00000200 " } ,
{ true , " Quick resolve 1 " , " Resolve Hack #1 - 00000400 \n Speeds some games. Kingdom Hearts. " } ,
{ true , " No Quick resolve " , " Resolve Hack #2 - 00000800 \n Shadow Hearts, Urbz. Destroys FFX. " } ,
{ true , " No target clut " , " No target CLUT - 00001000 \n Resident Evil 4, or foggy scenes. " } ,
{ true , " No stencil " , " Disable stencil buffer - 00002000 \n Usually safe to do for simple scenes. Harvest Moon. " } ,
{ false , " VSS " , " " } ,
{ true , " No depth resolve " , " No depth resolve - 00008000 \n Might give z buffer artifacts. " } ,
{ true , " Full 16 bit resolution " , " Full 16 bit resolution - 00010000 \n Use when half the screen is missing. " } ,
{ true , " Resolve promoted " , " Resolve Hack #3 - 00020000 \n Neopets " } ,
{ true , " Fast update " , " Fast Update - 00040000 \n Speeds some games. Needed for Sonic Unleashed. Okami. " } ,
{ true , " No alpha test " , " Disable alpha testing - 00080000 " } ,
{ true , " Disable mrt depth " , " Enable Multiple RTs - 00100000 " } ,
{ false , " Args 32 bit " , " " } ,
{ false , " Path3 " , " " } ,
{ false , " Parallel context " , " " } ,
{ true , " Xenosaga spec " , " Specular Highlights - 01000000 \n Makes graphics faster by removing highlights. (Automatically on for Xenosaga, Okami, & Okage.) " } ,
{ false , " Partial pointers " , " Partial targets - 02000000 " } ,
{ true , " Partial depth " , " Partial depth - 04000000 " } ,
{ false , " Reget " , " " } ,
{ true , " Gust " , " Gust fix - 10000000. Makes gust games cleaner and faster. (Automatically on for most Gust games) " } ,
{ true , " No logz " , " No logarithmic Z - 20000000. Could decrease number of Z-artifacts. " } ,
{ true , " Automatic skip draw " , " Remove blur effect on some games \n Slow games. " }
} ;
void ReportHacks ( gameHacks hacks )
{
for ( int i = 0 ; i < 32 ; i + + )
{
if ( hacks . _u32 & ( 1 < < i ) )
{
ZZLog : : WriteLn ( " '%s' hack enabled. " , hackDesc [ i + 1 ] ) ;
}
}
}
void ListHacks ( )
{
if ( ( ! conf . disableHacks ) & & ( conf . def_hacks . _u32 ! = 0 ) )
{
ZZLog : : WriteLn ( " Auto-enabling these hacks: " ) ;
ReportHacks ( conf . def_hacks ) ;
}
if ( conf . hacks . _u32 ! = 0 )
{
ZZLog : : WriteLn ( " You've manually enabled these hacks: " ) ;
ReportHacks ( conf . hacks ) ;
}
}
void DisplayHack ( int hack )
{
ZZLog : : WriteToScreen2 ( " ***%d %s " , hack , hackDesc [ hackList [ hack ] ] ) ;
}
void ChangeCurrentHack ( int hack )
{
FUNCLOG
conf . hacks . _u32 & = ! ( hackList [ CurrentHack ] ) ;
conf . hacks . _u32 | = hackList [ hack ] ;
DisplayHack ( hack ) ;
CurrentHack = hack ;
SaveConfig ( ) ;
}