Welcome!

Final Burn Neo => FBN Development => Topic started by: iq_132 on November 12, 2004, 02:04:10 PM

Title: _[ FinalBurn Alpha: Tips and Tricks ]_
Post by: iq_132 on November 12, 2004, 02:04:10 PM
Add any misc. tips or tricks you have for FBA code to this thread.
Title: FBA Tips and Tricks
Post by: iq_132 on November 12, 2004, 02:05:49 PM
How to completely disable CRC checking.

SRC/BURNER/BZIP.CPP

find this:
Code: [Select]
if (List[nFind].nLen == ri.nLen) {
if (ri.nCrc) { // If we know the CRC
if (List[nFind].nCrc != ri.nCrc) { // Length okay, but CRC wrong
RomFind[i].nState = 2;
}
}

replace with this:
Code: [Select]
if (List[nFind].nLen == ri.nLen) {
if (ri.nCrc) { // If we know the CRC
if (List[nFind].nCrc != ri.nCrc) { // Length okay, but CRC wrong
RomFind[i].nState = 1; // Changed 2 to 1
}
}
Title: FBA Tips and Tricks
Post by: iq_132 on November 12, 2004, 02:26:53 PM
Here's the source to add avi support to FBA (version 029498).

Just extract the files to your fba source directory.

All credits to Gangta (for the original avi source), JAVH (for these files), and the FBA team for the original FBA source.
Title: FBA Tips and Tricks
Post by: iq_132 on November 12, 2004, 02:36:13 PM
How to disable the splash screen.

SRC\BURNER\MAIN.CPP

find this:

// #define DONT_DISPLAY_SPLASH

replace with this:

#define DONT_DISPLAY_SPLASH

(just remove the two // in front of it)
Title: FBA Tips and Tricks
Post by: Badablek on November 13, 2004, 03:48:02 AM
Remove the preset bug

Indp.cpp (src\burner)

Replace this :

Code: [Select]

int UsePreset(bool bMakeDefault)
{
int nGi, nPci, nAnalog = 0;
char szFilename[MAX_PATH] = "config\\preset\\";


with this :

Code: [Select]

int UsePreset(bool bMakeDefault)
{
int nGi, nPci, nAnalog = 0;
char szFilename[MAX_PATH] = "config\\presets\\";
Title: FBA Tips and Tricks
Post by: Badablek on November 13, 2004, 04:00:31 AM
Disable the "Auto-Disable NumLock" when you start FBA (really annoying for me)

main.cpp (src\burner)

Find this :

Code: [Select]

bNumlockStatus = SetNumLock(false);

return 0;
}

static int AppExit()
{
SetNumLock(bNumlockStatus);


Replace with this :

Code: [Select]

// bNumlockStatus = SetNumLock(false);

return 0;
}

static int AppExit()
{
// SetNumLock(bNumlockStatus);


And if you don't want a warning when compiling (bool bNumLockStatus defined but not used), you can also replace this :

Code: [Select]

static bool bNumlockStatus;


with this :

Code: [Select]

//static bool bNumlockStatus;


And (you can also delete this part, quote it with // if you want to re-add this function)

Code: [Select]

bool SetNumLock(bool bState)
{
BYTE keyState[256];

GetKeyboardState(keyState);
if ((bState && !(keyState[VK_NUMLOCK] & 1)) || (!bState && (keyState[

VK_NUMLOCK] & 1))) {
keybd_event(VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY, 0 );

keybd_event(VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,

0);
}

return keyState[VK_NUMLOCK] & 1;
}


with this :

Code: [Select]

//bool SetNumLock(bool bState)
//{
// BYTE keyState[256];
//
// GetKeyboardState(keyState);
// if ((bState && !(keyState[VK_NUMLOCK] & 1)) || (!bState && (keyState[VK_NUMLOCK] & 1))) {
// keybd_event(VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY, 0 );
//
// keybd_event(VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
// }
//
// return keyState[VK_NUMLOCK] & 1;
//}
Title: FBA Tips and Tricks
Post by: Badablek on November 13, 2004, 04:07:56 AM
Disable the mangling (did i spell it right IQ ?? :D ) (not a check box to disable it, just disable it for "life")

sel.cpp (src\burner)

Find this :

Code: [Select]
if (strnicmp(szOldName, "the ", 4) == 0) {
int x = 0, y = 0;
while (szOldName[x] && szOldName[x] != '(') {
x++;
}
y = x;
while (y && szOldName[y - 1] == ' ') {
y--;
}
strncpy(pszName, szOldName + 4, y - 4);
sprintf(pszName + y - 4, ", the %s", szOldName + x);
} else {
strcpy(pszName, szOldName);
}

Replace with this (or remove it)

Code: [Select]
// if (strnicmp(szOldName, "the ", 4) == 0) {
// int x = 0, y = 0;
// while (szOldName[x] && szOldName[x] != '(') {
// x++;
// }
// y = x;
// while (y && szOldName[y - 1] == ' ') {
// y--;
// }
// strncpy(pszName, szOldName + 4, y - 4);
// sprintf(pszName + y - 4, ", the %s", szOldName + x);
// } else {
strcpy(pszName, szOldName);
// }

No more King of fighters 94', The  :rolleyes:

you can also add a checkbox to enable/disable the mangling, ©iq_132  ;)
Title: FBA Tips and Tricks
Post by: Badablek on November 13, 2004, 04:36:33 AM
Add 4 extra rompath (already added in the original FBA, but only 4 rompath can be set with the Win32 interface, the 4 extra rompath have to be set by editing the ini file....really annoying)

app.rc (src\burner)

Find this

Code: [Select]

IDD_ROMSDIR DIALOGEX 0, 0, 271, 120
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Edit ROM paths"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK", IDOK, 215, 100, 50, 14
    GROUPBOX    "", IDC_STATIC, 3, 0, 264, 94
    RTEXT           "Path #1:", IDC_STATIC, 9, 11, 32, 12, SS_CENTERIMAGE
    CONTROL         "", IDC_STATIC, "Static", SS_WHITERECT, 44, 10, 158, 14, WS_EX_STATICEDGE
    CONTROL         "", IDC_ROMSDIR_EDIT1, "Edit", ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 45, 13, 154, 10
    PUSHBUTTON      "Browse...",IDC_ROMSDIR_BR1, 209, 10, 50, 14
    RTEXT           "Path #2:", IDC_STATIC, 9, 32, 32, 12, SS_CENTERIMAGE
    CONTROL         "", IDC_STATIC, "Static", SS_WHITERECT, 44, 31, 158, 14, WS_EX_STATICEDGE
    CONTROL         "", IDC_ROMSDIR_EDIT2, "Edit", ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 45, 34, 154, 10
    PUSHBUTTON      "Browse...",IDC_ROMSDIR_BR2, 209, 31, 50, 14
    RTEXT           "Path #3:", IDC_STATIC, 9, 53, 32, 12, SS_CENTERIMAGE
    CONTROL         "", IDC_STATIC, "Static", SS_WHITERECT, 44, 52, 158, 14, WS_EX_STATICEDGE
    CONTROL         "", IDC_ROMSDIR_EDIT3, "Edit", ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 45, 55, 154, 10
    PUSHBUTTON      "Browse...",IDC_ROMSDIR_BR3, 209, 52, 50, 14
    RTEXT           "Path #4:", IDC_STATIC, 9, 74, 32, 12, SS_CENTERIMAGE
    CONTROL         "", IDC_STATIC, "Static", SS_WHITERECT, 44, 73, 158, 14, WS_EX_STATICEDGE
    CONTROL         "", IDC_ROMSDIR_EDIT4, "Edit", ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 45, 76, 154, 10
    PUSHBUTTON      "Browse...",IDC_ROMSDIR_BR4, 209, 73, 50, 14
    PUSHBUTTON    "Cancel", IDCANCEL, 160, 100, 50, 14
END


with this :

Code: [Select]

IDD_ROMSDIR DIALOGEX 0, 0, 271, 220
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Configuration des répertoires"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,215,200,50,14
    GROUPBOX        "",IDC_STATIC,3,0,264,188
    RTEXT           "#1:",IDC_STATIC,9,11,32,12,SS_CENTERIMAGE
    CONTROL         "",IDC_STATIC,"Static",SS_WHITERECT,44,10,158,14,
                    WS_EX_STATICEDGE
    EDITTEXT        IDC_ROMSDIR_EDIT1,45,13,154,10,ES_AUTOHSCROLL | NOT
                    WS_BORDER
    PUSHBUTTON      "Browse...",IDC_ROMSDIR_BR1,209,10,50,14
    RTEXT           "#2:",IDC_STATIC,9,32,32,12,SS_CENTERIMAGE
    CONTROL         "",IDC_STATIC,"Static",SS_WHITERECT,44,31,158,14,
                    WS_EX_STATICEDGE
    EDITTEXT        IDC_ROMSDIR_EDIT2,45,34,154,10,ES_AUTOHSCROLL | NOT
                    WS_BORDER
    PUSHBUTTON      "Browse...",IDC_ROMSDIR_BR2,209,31,50,14
    RTEXT           "#3:",IDC_STATIC,9,53,32,12,SS_CENTERIMAGE
    CONTROL         "",IDC_STATIC,"Static",SS_WHITERECT,44,52,158,14,
                    WS_EX_STATICEDGE
    EDITTEXT        IDC_ROMSDIR_EDIT3,45,55,154,10,ES_AUTOHSCROLL | NOT
                    WS_BORDER
    PUSHBUTTON      "Browse...",IDC_ROMSDIR_BR3,209,52,50,14
    RTEXT           "#4:",IDC_STATIC,9,74,32,12,SS_CENTERIMAGE
    CONTROL         "",IDC_STATIC,"Static",SS_WHITERECT,44,73,158,14,
                    WS_EX_STATICEDGE
    EDITTEXT        IDC_ROMSDIR_EDIT4,45,76,154,10,ES_AUTOHSCROLL | NOT
                    WS_BORDER
    PUSHBUTTON      "Browse...",IDC_ROMSDIR_BR4,209,73,50,14
    RTEXT           "#5:",IDC_STATIC,9,95,32,12,SS_CENTERIMAGE
    CONTROL         "",IDC_STATIC,"Static",SS_WHITERECT,44,94,158,14,
                    WS_EX_STATICEDGE
    EDITTEXT        IDC_ROMSDIR_EDIT5,45,97,154,10,ES_AUTOHSCROLL | NOT
                    WS_BORDER
    PUSHBUTTON      "Browse...",IDC_ROMSDIR_BR5,209,94,50,14
    RTEXT           "#6:",IDC_STATIC,9,116,32,12,SS_CENTERIMAGE
    CONTROL         "",IDC_STATIC,"Static",SS_WHITERECT,44,115,158,14,
                    WS_EX_STATICEDGE
    EDITTEXT        IDC_ROMSDIR_EDIT6,45,118,154,10,ES_AUTOHSCROLL | NOT
                    WS_BORDER
    PUSHBUTTON      "Browse...",IDC_ROMSDIR_BR6,209,115,50,14
    RTEXT           "#7:",IDC_STATIC,9,137,32,12,SS_CENTERIMAGE
    CONTROL         "",IDC_STATIC,"Static",SS_WHITERECT,44,136,158,14,
                    WS_EX_STATICEDGE
    EDITTEXT        IDC_ROMSDIR_EDIT7,45,139,154,10,ES_AUTOHSCROLL | NOT
                    WS_BORDER
    PUSHBUTTON      "Browse...",IDC_ROMSDIR_BR7,209,136,50,14
    RTEXT           "#8:",IDC_STATIC,9,158,32,12,SS_CENTERIMAGE
    CONTROL         "",IDC_STATIC,"Static",SS_WHITERECT,44,157,158,14,
                    WS_EX_STATICEDGE
    EDITTEXT        IDC_ROMSDIR_EDIT8,45,160,154,10,ES_AUTOHSCROLL | NOT
                    WS_BORDER
    PUSHBUTTON      "Browse...",IDC_ROMSDIR_BR8,209,157,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,160,200,50,14
END


AND (the extra rompath are added but not activated, so we'll activate them now)

roms.cpp (src\burner)

Replace this :

Code: [Select]

case WM_COMMAND:

if (LOWORD(wParam) == IDOK) {

for (int i = 0; i < 4; i++) {
if (GetDlgItemText(hDlg, IDC_ROMSDIR_EDIT1 + i, buffer, sizeof(buffer)) && lstrcmp(szAppRomPaths[i], buffer)) {
chOk = true;
lstrcpy(szAppRomPaths[i], buffer);
}
}


with this :

Code: [Select]

case WM_COMMAND:

if (LOWORD(wParam) == IDOK) {

for (int i = 0; i < 8; i++) {
if (GetDlgItemText(hDlg, IDC_ROMSDIR_EDIT1 + i, buffer, sizeof(buffer)) && lstrcmp(szAppRomPaths[i], buffer)) {
chOk = true;
lstrcpy(szAppRomPaths[i], buffer);
}
}
Title: FBA Tips and Tricks
Post by: iq_132 on November 14, 2004, 09:13:28 PM
Nice stuff badablek ;)


Here's the code to fix loading of irregular P roms (ms5plus, etc)
Code changes by Netbug

Replace this whole section in neogeo.cpp:

int NeoLoadCode(int nOffset, int nNum, unsigned char* pDest)
{
...
}

Code: [Select]
// This function loads the 68K ROMs (netbug)
int NeoLoadCode(int nOffset, int nNum, unsigned char* pDest)
{
int nRomSize = 0;
unsigned char* pROM = pDest;
struct BurnRomInfo ri;

// Load the ROMs
for (int i = 0; i < nNum; i++) {
  ri.nType = 0;
      ri.nLen = 0;
      BurnDrvGetRomInfo(&ri,nOffset+i);
      nRomSize =ri.nLen;
   
if (BurnLoadRom(pROM, nOffset + i, 1)) {
return 1;
}

pROM +=nRomSize;

BurnDrvGetRomInfo(&ri, nOffset + i);
// Swap the blocks in the ROM if needed.
if (BurnDrvGetHardwareCode() & HARDWARE_SNK_SWAPP && i && ri.nLen == 0x400000) {
for (unsigned int k = 0; k < (ri.nLen >> 1); k++) {
unsigned char n = pROM[k];
pROM[k] = pROM[k + (ri.nLen >> 1)];
pROM[k + (ri.nLen >> 1)] = n;
}
}

// Swap the blocks in the ROM if needed.
if (BurnDrvGetHardwareCode() & HARDWARE_SNK_SWAPP && nRomSize == 0x200000) {
for (int j = 0; j < nNum; j++) {
for (int k = 0; k < (nRomSize >> 1); k++) {
unsigned char n = pDest[k];
pDest[k] = pDest[k + (nRomSize >> 1)];
pDest[k + (nRomSize >> 1)] = n;
}
}
}
}

return 0;
}
Title: FBA Tips and Tricks
Post by: Badablek on November 15, 2004, 04:56:22 AM
Remove lagging when playing CPS1 after CPS2 (can't remember who gave this some days ago before all threads go to trash, a big thanks to him)

cps_run.cpp (src\burn\capcom)

Find this :

Code: [Select]


int CpsRunInit()
{
nGigawing = 0;
nLagObjectPalettes = 0;


Add this :

Code: [Select]


int CpsRunInit()
{
nCpsCyclesSegment[0] = 0;
nGigawing = 0;
nLagObjectPalettes = 0;


As far as I remember, you said to put this code nCpsCyclesSegment[0] = 0; in the reset routine of CPS games, but this works only if you press F3 after loading the game, so I put it in the Init routine of CPS games (maybe I'm wrong as I can't remember exactly  ;) )

Remove the "No sound" bug for some CPS1 games (Ghouls 'n' ghost, etc....), like for CPS1/CPS2 lagging, can't remember who gave this piece of code, I only remember that Gogoackman started a thread 'bout that, but the FBA team said I was incorrect (400% overclock, but hey it's working ^^)

Find this :

Code: [Select]

// Run sound chips for this section

if (Cps1Qs == 1) {
nStart = i << 8;
nEnd = (i + 1) << 8;

QsndSectRun(nStart,nEnd);
} else {
for (int j = 0; j < 4; j++) {
nStart = ((i << 2) + j) << 6;
nEnd = ((i << 2) + j + 1) << 6;

nCpsCyclesSegment[1] = (((i << 2) + j + 1) * nCpsZ80Cycles) >> 4;

nCpsCyclesDone[1] += ZetRun(nCpsCyclesSegment[1] - nCpsCyclesDone[1]);

PsmSect(nStart, nEnd);


Replace with this :

Code: [Select]

// Run sound chips for this section

if (Cps1Qs == 1) {
nStart = i << 8;
nEnd = (i + 1) << 8;

QsndSectRun(nStart,nEnd);
} else {
for (int j = 0; j < 4; j++) {
nStart = ((i << 2) + j) << 6;
nEnd = ((i << 2) + j + 1) << 6;

nCpsCyclesSegment[1] = ((((i << 2) + j + 1) << 2) * nCpsZ80Cycles) >> 4; //fix cps1 sound

nCpsCyclesDone[1] += ZetRun(nCpsCyclesSegment[1] - nCpsCyclesDone[1]);

PsmSect(nStart, nEnd);
Title: FBA Tips and Tricks
Post by: iq_132 on November 15, 2004, 05:03:15 AM
Here's the thread with gogo's post ;)
http://www.ojko.com/phpbb/viewtopic.php?t=2141
Title: FBA Tips and Tricks
Post by: Badablek on November 15, 2004, 05:19:03 AM
This is it  :D

But I'm surprised, first time I tried this piece of code, I was unable to compile FBA........now it's working  :confused:

The most important is that it's working very well now  :cool:

IQ, little question, some CPS1 games are really sloooooooooooooow to load (Ghouls 'n' Ghost for example), is there any trick in order to bypass the hardware test ???
Title: FBA Tips and Tricks
Post by: NJ7 on November 15, 2004, 11:50:18 AM
Sorry, but I'm sure you're gonna have to go through the hardware test....that's the way that game is in any emulator....
Title: FBA Tips and Tricks
Post by: Badablek on November 15, 2004, 12:48:03 PM
:(

it would be great to have some "speed up the hardware test" like we have on any PC motherboard ^^
the most important is that we can play those great games, even if the loading is irritating  :D
Title: FBA Tips and Tricks
Post by: iq_132 on November 15, 2004, 05:31:40 PM
Couldn't you just hold the turbo button down??
Title: FBA Tips and Tricks
Post by: Badablek on November 16, 2004, 06:13:58 AM
Quote from: iq_132
Couldn't you just hold the turbo button down??


Good idea, I forgot this trick  :D
Title: FBA Tips and Tricks
Post by: Shoometsu on November 24, 2004, 03:23:29 PM
how to separate the splash screen img and the background image (1st code change here, not so much, but useful, I think, cool when used with enable/disable splash code)

app.rc

find:
Code: [Select]
BMP_SPLASH BITMAP  DISCARDABLE     "resource/splash.bmp"

add this after:

Code: [Select]
BMP_SPLASHSC BITMAP  DISCARDABLE     "resource/splashsc.bmp"
 
find

Code: [Select]
CONTROL         "BMP_SPLASH",IDC_STATIC,"Static",SS_BITMAP | SS_REALSIZEIMAGE | SS_SUNKEN,1,1,9999,9999

replace with this:

Code: [Select]
CONTROL         "BMP_SPLASHSC",IDC_STATIC,"Static",SS_BITMAP | SS_REALSIZEIMAGE | SS_SUNKEN,1,1,9999,9999

note: now you also need to have an image file called splashsc.bmp in your resource\ folder
Title: Ok.
Post by: KingHanco on December 16, 2004, 07:03:46 AM
What is the most important tips that I needed??? :)

Afraid to try any of these coding here on this part of the post.

Are those safe???

Which one that I really need to code in the FBA??? :)
Title: FBA Tips and Tricks
Post by: Badablek on December 16, 2004, 01:12:09 PM
Quote from: KingHanco
What is the most important tips that I needed??? :)

Afraid to try any of these coding here on this part of the post.

Are those safe???

Which one that I really need to code in the FBA??? :)


[really useful/needed]
-Preset bug, just ONE little bit added, really useful and safe ^^
-Add 4 extra rom path, if you have one folder for one type of roms, safe
-Remove (not the good way as FBA team said....but it works) the CPS1 lag after CPS2 launched and re-add sound for some CPS1 games (Ghouls n ghosts, etc...)
Change CPS1/CPS2 checkbox to separate CPS1 and CPS2 checkboxes
-Disable the splash screen (crashes some computers, do not disappear for others, useless....as we know that we are launching FBA, no need to show us the splash screen ;-) )

[Useful]
-Disable or make an ON/OFF checkbox for the annoying mangling option
-Disable the CRC check (not needed if you have changed the d_neogeo.cpp with your romset)

[Useful+ (IMO)]
-Remove the "Disable Numlock", really annoying if you use a laptop
-Change key settings for Volume+/- (the key combinaison do not work on french keyboards, so i put Volume+ on Page Up, Volume- on PageDown)
-Remove the "crash key" (ALT+C) that makes a instant Guru Meditation (probably useful for debugging, but not for a public release)

[Useful- (IMO)]
-Avi support (seems this function do NOT work on FAT32 HDD  :( , It never worked for me.....)

Every change is safe if you take some precautions, like making a backup of each file you modify, and add one thing by one, do not try to implement more than one change/trick at a time, else you won't know where is the prob if it doesn't compile anymore....

ps : as you can see, every trick here is useful (IMO)  :cool:
Title: Ok.
Post by: KingHanco on December 16, 2004, 11:27:16 PM
Here is what I added.

1. Disable CRC checking.

2. Disable the splash screen.

3. The preset bug have been fixs. Renamed to presets.

4. Added 4 extra rompath. 8 total now.

5. Remove the "No sound" bug for some CPS1 games (Ghouls 'n' ghost, etc....), like for CPS1/CPS2 lagging.

6. Fix loading of irregular P roms (ms5plus, etc).
These are great so far!!!

I made a "Readme New Stuffs.txt" file and paste this in it to show what have been change.
Title: FBA Tips and Tricks
Post by: DragonKeeper on January 08, 2005, 11:09:29 PM
Can someone please tell me how to change the default Window Size? Its always at 'Auto' to start off with... is there any way to make it 'Single' by default? thanks.
Title: FBA Tips and Tricks
Post by: FerchogtX on January 11, 2005, 11:18:16 PM
Fix for 265-262/262d.m1 ROMs loading in FBA
if you try to load this in FBA and you get no sound (like i got some time ago)

Code: [Select]
{"265-262d.m1",0x020000, 0x2fb0a8a5, 0x10}, // 10 Z80 code (Decrypted)
{"265-262.m1", 0x020000, 0x1d5aab51, 0x10}, // 11 Z80 code

look for this in neo_run.cpp:

Code: [Select]
// Find 'M' ROM
FindROMs("m ", &pInfo->nSoundOffset, NULL);

add this after:

Code: [Select]
// Fix for kof2001, this loads the 265-262.m1 ROM
if (strcmp(BurnDrvText(0), "kof2001") == 0 || strcmp(BurnDrvText(0), "kof2k1nd") == 0) {
FindROMs("26", &pInfo->nSoundOffset, NULL);
}

with that, kof2001 will have sound with the new decrypted m1 from Razoola
See ya!!!!! :D
Title: FBA Tips and Tricks
Post by: Xeon on January 12, 2005, 01:25:20 AM
i dont get it, why dont you just load the decrypted m1 alone? cant it work by itself?

i havent tried updating anything in FBA since those 20+ games changed though.
Title: FBA Tips and Tricks
Post by: FerchogtX on January 12, 2005, 09:22:03 PM
Quote from: Xeon
i dont get it, why dont you just load the decrypted m1 alone? cant it work by itself?

i havent tried updating anything in FBA since those 20+ games changed though.

That can be done if your set is decrypted C, if is an original encrypted you MUST load the m1d and then the m1, anyway without this both encrypted or decrypted won't work so... that's the point of this fix, you can use both or just the decrypted rom
See ya!!!!! :D
Title: FBA Tips and Tricks
Post by: X-or on January 12, 2005, 09:33:08 PM
Quote from: Xeon
i dont get it, why dont you just load the decrypted m1 alone? cant it work by itself?

i havent tried updating anything in FBA since those 20+ games changed though.


we keep m1 (enc) for reference
when the m1 code will be figured out, we will remove the decrypted version
in mame I use the macros ROM_LOAD_OPTIONAL for m1 if I reload a m1d over
that way the game start even if you don't have the m1
I dunno if fba has something similar tho
Title: FBA Tips and Tricks
Post by: Xeon on January 15, 2005, 06:36:04 AM
Quote from: FerchogtX
That can be done if your set is decrypted C, if is an original encrypted you MUST load the m1d and then the m1, anyway without this both encrypted or decrypted won't work so... that's the point of this fix, you can use both or just the decrypted rom
See ya!!!!! :D

 i just tried, and youre right 265-262d.m1 wont work alone. thanks for the fix :)
Title: FBA Tips and Tricks
Post by: Barry Harris on February 16, 2005, 05:28:57 AM
Quote from: Badablek
IQ, little question, some CPS1 games are really sloooooooooooooow to load (Ghouls 'n' Ghost for example), is there any trick in order to bypass the hardware test ???


It's possible to patch out the memory test in Ghouls 'n' Ghosts. Here is the code from MAME's vidhrdw/cps1.c. Obviously the code is commented in MAME but here it is.

Code: [Select]
else if (strcmp(gamename, "ghouls" )==0)
{
/* Patch out self-test... it takes forever */
UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1);
rom[0x61964/2] = 0x4ef9;
rom[0x61966/2] = 0x0000;
rom[0x61968/2] = 0x0400;
}


You can get the relevant rom location to patch from this.
Title: FBA Tips and Tricks
Post by: iq_132 on February 16, 2005, 07:32:11 AM
Thanks, and welcome to my forum Treble Winner :) :)
Title: FBA Tips and Tricks
Post by: iq_132 on February 17, 2005, 12:07:36 AM
Btw, here's how I added that to FBA:

src/burn/capcom/dc_ghouls.cpp

Find:
Code: [Select]
 // Load program roms
  nRet=BurnLoadRom(CpsRom+0x000001,0,2); if (nRet!=0) return 1;
  nRet=BurnLoadRom(CpsRom+0x000000,1,2); if (nRet!=0) return 1;
  nRet=BurnLoadRom(CpsRom+0x040001,2,2); if (nRet!=0) return 1;
  nRet=BurnLoadRom(CpsRom+0x040000,3,2); if (nRet!=0) return 1;
  nRet=BurnLoadRom(CpsRom+0x080000,4,1); if (nRet!=0) return 1;
  BurnByteswap(CpsRom+0x080000,0x080000);

Add this after:
Code: [Select]
 if (!strcmp(BurnDrvGetTextA(DRV_NAME), "ghouls"))
  {
/* Patch out self-test... it takes forever */
unsigned short *rom = (unsigned short *)CpsRom;
rom[0x61964/2] = 0x4ef9;
rom[0x61966/2] = 0x0000;
rom[0x61968/2] = 0x0400;
  }
Title: FBA Tips and Tricks
Post by: iq_132 on March 08, 2005, 01:46:02 PM
Here's a tip to make compiling FBA 0.2.95.23 much quicker

Find this line in "makefile"
FORCE_UPDATE = 1
Replace it with this:
#FORCE_UPDATE = 1
Title: FBA Tips and Tricks
Post by: Badablek on March 08, 2005, 03:19:59 PM
Quote from: Treble Winner
It's possible to patch out the memory test in Ghouls 'n' Ghosts. Here is the code from MAME's vidhrdw/cps1.c. Obviously the code is commented in MAME but here it is.

Code: [Select]
else if (strcmp(gamename, "ghouls" )==0)
{
/* Patch out self-test... it takes forever */
UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1);
rom[0x61964/2] = 0x4ef9;
rom[0x61966/2] = 0x0000;
rom[0x61968/2] = 0x0400;
}


You can get the relevant rom location to patch from this.


Quote from: IQ 132
Btw, here's how I added that to FBA:

src/burn/capcom/dc_ghouls.cpp

Find:

Code:
  // Load program roms
  nRet=BurnLoadRom(CpsRom+0x000001,0,2); if (nRet!=0) return 1;
  nRet=BurnLoadRom(CpsRom+0x000000,1,2); if (nRet!=0) return 1;
  nRet=BurnLoadRom(CpsRom+0x040001,2,2); if (nRet!=0) return 1;
  nRet=BurnLoadRom(CpsRom+0x040000,3,2); if (nRet!=0) return 1;
  nRet=BurnLoadRom(CpsRom+0x080000,4,1); if (nRet!=0) return 1;
  BurnByteswap(CpsRom+0x080000,0x080000);
Add this after:

Code:
  if (!strcmp(BurnDrvGetTextA(DRV_NAME), "ghouls"))
  {
   /* Patch out self-test... it takes forever */
   unsigned short *rom = (unsigned short *)CpsRom;
   rom[0x61964/2] = 0x4ef9;
   rom[0x61966/2] = 0x0000;
   rom[0x61968/2] = 0x0400;
  }


Thx  :D  :D

[EDIT]

Works great, if you have any other self test bypass patches, feel free to write them :D
Title: FBA Tips and Tricks
Post by: bms888 on March 09, 2005, 01:06:32 AM
Anyone can tell me how to change this MAME code MRA16_RAM  & MWA16_RAM to FBA,thx.

In that means, how to define MRA16_RAM & MWA16_RAM in FBA?
Title: FBA Tips and Tricks
Post by: XorXe on April 20, 2005, 12:58:14 AM
Excuse me, anyone have a source of Fbavi to match in FBA v0.2.95.23

Edit:

Thanx i dont need anymore.
Title: Re: FBA Tips and Tricks
Post by: Shoometsu on May 26, 2005, 05:37:32 PM
How to completely disable CRC checking.

SRC/BURNER/BZIP.CPP

find this:
Code: [Select]
if (List[nFind].nLen == ri.nLen) {
if (ri.nCrc) { // If we know the CRC
if (List[nFind].nCrc != ri.nCrc) { // Length okay, but CRC wrong
RomFind[i].nState = 2;
}
}

replace with this:
Code: [Select]
if (List[nFind].nLen == ri.nLen) {
if (ri.nCrc) { // If we know the CRC
if (List[nFind].nCrc != ri.nCrc) { // Length okay, but CRC wrong
RomFind[i].nState = [color=red]1; // Changed 2 to 1[/color]
}
}

what about if we disable the size check with the crc check? sometimes we have different crcs due to a size mismatch...

Code: [Select]

if (List[nFind].nLen == ri.nLen) {
if (ri.nCrc) { // If we know the CRC
if (List[nFind].nCrc != ri.nCrc) { // Length okay, but CRC wrong
RomFind[i].nState = 2;
}
}
} else {
if (List[nFind].nLen < ri.nLen) {
RomFind[i].nState = 3; // Too small
} else {
RomFind[i].nState = 4; // Too big
}
}

replace with this:

Code: [Select]

if (List[nFind].nLen == ri.nLen) {
if (ri.nCrc) { // If we know the CRC
if (List[nFind].nCrc != ri.nCrc) { // Length okay, but CRC wrong
if (nLoadMenuShowX & CRCCHECK) {
RomFind[i].nState = 1;
} else {
RomFind[i].nState = 2;
}
}
}
} else {
if (nLoadMenuShowX & CRCCHECK) {
ri.nLen = List[nFind].nLen;
RomFind[i].nState = 1;
} else {
if (List[nFind].nLen < ri.nLen) {
RomFind[i].nState = 3; // Too small
} else {
RomFind[i].nState = 4; // Too big
}
}
}


note: this code considers that you have the disable crc check with checkbox option :wink:
Title: Re: FBA Tips and Tricks
Post by: FerchogtX on July 20, 2005, 11:02:42 PM
Hi guys... I have something that maybe more of one will like (I'm loving my WINAPI manual XD):
In src\burner\win32\scrn.cpp:
Find:
Code: [Select]
int OnNotify(HWND, int, NMHDR* lpnmhdr);Add this after:
Code: [Select]
void StretchBitmap(HDC, HWND, HBITMAP);Find this:
Code: [Select]
static void OnPaint(HWND hWnd)
{
if (hWnd == hScrnWnd) {...
Add this before:
Code: [Select]
// This is for background image, performs the needed stretching
// for avoiding the use of more images for this :)
void StretchBitmap(HDC hDC, HWND hWnd, HBITMAP hBitmap)
{
HDC memDC; BITMAP bm; RECT re;

memDC = CreateCompatibleDC(hDC);
SelectObject(memDC, hBitmap);
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
GetClientRect(hWnd, &re);
if (bMenuEnabled) {
StretchBlt(hDC, 0, 25, re.right, re.bottom-25, memDC, 0, 0, 304, 224, SRCCOPY);
} else {
StretchBlt(hDC, 0, 0, re.right, re.bottom, memDC, 0, 0, 304, 224, SRCCOPY);
}
DeleteDC(memDC);
}
Now, replace the whole OnPaint function with this one:
Code: [Select]
static void OnPaint(HWND hWnd)
{
if (hWnd == hScrnWnd) {

// paint and validate client area
VidPaint(1);

// Win9x-ME plataforms has problems with the preview blitter option.
// Anyway this is a "hotfix" for this problem, this seems to be
// related to some options that only Win2000-XP builds can handle.
// This consists only in enable the posibility of loading a bitmap
// as a background for the aplication, something old I know, also
// performs an stretching to the image to fit the client size. Is
// the best I can do for this odd OSes (including mine XD)
// Almost forgot to mention... you have to disable the "Preview
// blitter" option to enable this only if you use win9x or ME OS.
if (!bDrvOkay && !bVidUsePlaceholder) {
HBITMAP hBitmap;
PAINTSTRUCT ps;
if (_tcslen(szPlaceHolder)) {
//hBitmap = LoadBitmap(hAppInst, szPlaceHolder);
hBitmap = (HBITMAP)LoadImage(hAppInst, szPlaceHolder, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
} else {
hBitmap = LoadBitmap(hAppInst, _T("BMP_SPLASH"));
}
HDC hDC = BeginPaint(hWnd, &ps);
StretchBitmap(hDC, hWnd, hBitmap);
}

// draw menu
if (!nVidFullscreen) {
RedrawWindow(hRebar, NULL, NULL, RDW_FRAME | RDW_UPDATENOW | RDW_ALLCHILDREN);
}
}
}
do the same with the OnClose and OnDestroy functions (replace them with this):
Code: [Select]
static void OnClose(HWND)
{
HBITMAP hBitmap;

if (_tcslen(szPlaceHolder)) {
//hBitmap = LoadBitmap(hAppInst, szPlaceHolder);
hBitmap = (HBITMAP)LoadImage(hAppInst, szPlaceHolder, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
} else {
hBitmap = LoadBitmap(hAppInst, _T("BMP_SPLASH"));
}
DeleteObject(hBitmap);
PostQuitMessage(0); // Quit the program if the window is closed
}

static void OnDestroy(HWND)
{
HBITMAP hBitmap;

if (_tcslen(szPlaceHolder)) {
//hBitmap = LoadBitmap(hAppInst, szPlaceHolder);
hBitmap = (HBITMAP)LoadImage(hAppInst, szPlaceHolder, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
} else {
hBitmap = LoadBitmap(hAppInst, _T("BMP_SPLASH"));
}
DeleteObject(hBitmap);
VidExit(); // Stop using video with the Window
hScrnWnd = NULL; // Make sure handle is not used again
}
If you see the comment you will know that you have to disable the "Preview blitter" option to see the skin in win9x and ME, this has to work for this win versions and win2000 and XP... I'm not really sure if this goes with this last 2... but if anyone can test this on XP and 2000 I'll be thankfull, if you can test both using the preview blitter option and disabling it.
See ya!!!!! :biggrin:
Title: Re: FBA Tips and Tricks
Post by: iq_132 on July 21, 2005, 11:12:44 PM
Works perfectly on Win2k bro :)  I'll test on xp as soon as my other PC is networked again.
Title: Re: FBA Tips and Tricks
Post by: FerchogtX on July 25, 2005, 08:07:21 PM
Excellent thank man!!!
See ya!!!!! :biggrin:
Title: Select from a Dialog Box a Skin (.BMP File)
Post by: CaptainCPS on August 09, 2005, 02:28:14 PM
Im back (with dsl connection thanx god!!! xD)...

I will post a add on for the FerchogtX HotFix that btw, its working on WinXP ^^
thanX FerchogtX ^^

This will Let you Select from a Dialog Box a Skin (.BMP File) from anywhere on your PC
this option will be accesible in the MISC Submenu of FBA ^^

Ok here we go!

In src\burner\win32\scrn.cpp:

Find:

Code: [Select]
static void OnPaint(HWND hWnd)
{
if (hWnd == hScrnWnd) {

// paint and validate client area
VidPaint(1);

Add this Before:

Code: [Select]
// =================================================================
// Start Select Placeholder Skin (.BMP) Code (by CaptainCPS-X)

// Function to Save the Selected Placeholder Skin to INI (path)
int FBASkinSelectInit(TCHAR* pszSkin)
{

if (pszSkin) {
_tcsncpy(szPlaceHolder, pszSkin, sizeof(szPlaceHolder) / sizeof(TCHAR));
}

return 0;
}

// Function to Bring up the Dialog box to load a skin!
static void MakeOfn()
{
memset(&ofn, 0, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hScrnWnd;
ofn.lpstrFilter = _T("FB Alpha Placeholder Skin (*.bmp)\0*.bmp\0\0");
ofn.lpstrFile = szChoice;
ofn.nMaxFile = sizeof(szChoice) / sizeof(TCHAR);
ofn.lpstrInitialDir = _T(".\\skins");
ofn.Flags = OFN_NOCHANGEDIR | OFN_HIDEREADONLY;
ofn.lpstrDefExt = _T("bmp");

return;
}

// This will call the Dialog Box Function and do everything else
int FBASkinLoad()
{
_stprintf(szChoice, _T("skin"));
MakeOfn();
ofn.lpstrTitle = _T("Select PlaceHolder Skin");
ofn.Flags |= OFN_OVERWRITEPROMPT;

int bOldPause = bRunPause;
bRunPause = 1;

int nRet = GetOpenFileName(&ofn);
bRunPause = bOldPause;

if (nRet == 0) {
return 1;
}
return FBASkinSelectInit(szChoice); // Save the selected Skin to INI (path)
}
// End Select Placeholder Skin (.BMP) Code
// =============================================================================

Find:
Code: [Select]
case MENU_LANGUAGE_SELECT:
if (UseDialogs()) {
FBALocaliseLoadTemplate();
POST_INITIALISE_MESSAGE;
}

Add this After:
Code: [Select]
case MENU_SKIN_SELECT:
if (UseDialogs()) {
FBASkinLoad();
POST_INITIALISE_MESSAGE;
}

In src\interface\interface.h:

Find:

Code: [Select]
extern TCHAR szPlaceHolder[MAX_PATH];
Add this After:

Code: [Select]
int FBASkinSelectInit(TCHAR* pszSkin);
int FBASkinLoad();

In src\burner\win32\resource.h:

Find:
Code: [Select]
#define MENU_LANGUAGE_SELECT            10307

Add this After:
Code: [Select]
#define MENU_SKIN_SELECT            10309

In src\burner\win32\app.rc:

Find:
Code: [Select]
        MENUITEM "Modeless menu",               MENU_MODELESS

Add this After:
Code: [Select]
        MENUITEM SEPARATOR
        MENUITEM "Select PlaceHolder Skin...",       MENU_SKIN_SELECT

And That's All!! ^^ I hope you like that so you dont have to edit the
 INI each time you want to put a different Skin (BMP)

Please tell me if you like it, or if it have a bug, its one of my first succeded coding ^^
(Im taking a self-teach with a huge C/C++/C# Book) and i hope i add more stuff
to FBA like a animated Skin (Gif Support) or a GFX Animation like Zsnes (Ex. snow falling etc)
^^...and a Show multiple preview images instead of the Title screen only...so more Dirs
will be added like MAME32....when you click on the preview image change so it
show ''title -> in game img -> etc...maybe a flyer showing....but well thats what i will
be trying to add by the moment ^^

SeeYaa!!
:-D
Title: Re: FBA Tips and Tricks
Post by: FerchogtX on August 09, 2005, 10:22:02 PM
Hey!!! looks great! somewhere else had a code that enabled the posibility of loading a random skin... I hope that i can figure out that or either that appear sometime XD
See ya!!!!! :biggrin:
Title: Re: FBA Tips and Tricks
Post by: Cookie Monstruo on August 10, 2005, 12:17:13 PM
is there a way to fix that thing where when you click outside the screen or you click on file, the sound makes a horrible buzzing noise because the sound just stops instead of going into a pause
Title: Re: FBA Tips and Tricks
Post by: Badablek on August 10, 2005, 03:11:49 PM
is there a way to fix that thing where when you click outside the screen or you click on file, the sound makes a horrible buzzing noise because the sound just stops instead of going into a pause

I don't know how to do that, but it's a good idea, if someone can make a fix for that ^^
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on August 11, 2005, 10:25:33 AM
FerchogtX i want your help man i know you can do this...

I found out with the blitter preview deactivated and using a smaller image than 608 x 448
(in my case i usa that size) but if i select a 304 x 224 image it will not stretch...

I think i need a alternate code for this...so it will stretch any image size...

Code: [Select]
// This is for background image, performs the needed stretching
// for avoiding the use of more images for this :)
void StretchBitmap(HDC hDC, HWND hWnd, HBITMAP hBitmap)
{
HDC memDC; BITMAP bm; RECT re;

memDC = CreateCompatibleDC(hDC);
SelectObject(memDC, hBitmap);
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
GetClientRect(hWnd, &re);
if (bMenuEnabled) {
StretchBlt(hDC, 0, 25, re.right, re.bottom-25, memDC, 0, 0, 608, 448, SRCCOPY);
} else {
StretchBlt(hDC, 0, 0, re.right, re.bottom, memDC, 0, 0, 608, 448, SRCCOPY);
}
DeleteDC(memDC);


I hope you understand what i mean ^^ ...

Thanx in advance ...i tryied to do alternate code but doesnt work :-(

SeeYaa!!!
Title: Re: Select from a Dialog Box a Skin (.BMP File)
Post by: JiMMy_PaGe on August 15, 2005, 01:24:14 PM
Im back (with dsl connection thanx god!!! xD)...

I will post a add on for the FerchogtX HotFix that btw, its working on WinXP ^^
thanX FerchogtX ^^

This will Let you Select from a Dialog Box a Skin (.BMP File) from anywhere on your PC
this option will be accesible in the MISC Submenu of FBA ^^

Ok here we go!

And That's All!! ^^ I hope you like that so you dont have to edit the
 INI each time you want to put a different Skin (BMP)

Please tell me if you like it, or if it have a bug, its one of my first succeded coding ^^
(Im taking a self-teach with a huge C/C++/C# Book) and i hope i add more stuff
to FBA like a animated Skin (Gif Support) or a GFX Animation like Zsnes (Ex. snow falling etc)
^^...and a Show multiple preview images instead of the Title screen only...so more Dirs
will be added like MAME32....when you click on the preview image change so it
show ''title -> in game img -> etc...maybe a flyer showing....but well thats what i will
be trying to add by the moment ^^

SeeYaa!!
:-D
Great code bro, congratulations  :wink:
I will test it tonight, thanks for the code  :biggrin:
C ya
Title: Re: FBA Tips and Tricks
Post by: FerchogtX on August 15, 2005, 10:17:52 PM
FerchogtX i want your help man i know you can do this...

I found out with the blitter preview deactivated and using a smaller image than 608 x 448
(in my case i usa that size) but if i select a 304 x 224 image it will not stretch...

I think i need a alternate code for this...so it will stretch any image size...

Code: [Select]
// This is for background image, performs the needed stretching
// for avoiding the use of more images for this :)
void StretchBitmap(HDC hDC, HWND hWnd, HBITMAP hBitmap)
{
HDC memDC; BITMAP bm; RECT re;

memDC = CreateCompatibleDC(hDC);
SelectObject(memDC, hBitmap);
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
GetClientRect(hWnd, &re);
if (bMenuEnabled) {
StretchBlt(hDC, 0, 25, re.right, re.bottom-25, memDC, 0, 0, 608, 448, SRCCOPY);
} else {
StretchBlt(hDC, 0, 0, re.right, re.bottom, memDC, 0, 0, 608, 448, SRCCOPY);
}
DeleteDC(memDC);


I hope you understand what i mean ^^ ...

Thanx in advance ...i tryied to do alternate code but doesnt work :-(

SeeYaa!!!
Here a lil' explanation of how stretchBlt works:
This function stretches a bitmap to fill a desired area of screen in the function you have some parameters that can help you to understand how it works:
Code: [Select]
// Function:
StretchBlt(hDC, 0, 0, re.right, re.bottom, memDC, 0, 0, 608, 448, SRCCOPY);
1.- The handler for the DC object
2.- X Top corner of destination rectangle (client area)
3.- Y Top corner of destination rectangle
4.- X position in destination rectangle
5.- Y position in destination rectangle
6.- Handler for converted DC object
7.- X position of source image
8.- Y position of source image
9.- and 10.- Width and Height of the image
11.- Parameter for creating the image

Now with this I can tell you that if the image is smaller that the stablished size this will not work... in that case i suppose that you can use this instead, using of course your PAINTSTRUCT data... for instance
from:
Code: [Select]
StretchBlt(hDC, 0, 0, re.right, re.bottom, memDC, 0, 0, 608, 448, SRCCOPY);to:
Code: [Select]
StretchBlt(hDC, 0, 0, re.right, re.bottom, memDC, 0, 0, bm.width, bm.height, SRCCOPY);What does this mean? that you can use any size of image, StretchBlt will determine from the BITMAP structure which width and height does the bitmap has (remember that bm is the member of that structure)
This can be done for the bMenuEnabled case and the else statement and it should work
See ya!!!!!! :biggrin:
Title: Re: FBA Tips and Tricks
Post by: FerchogtX on August 15, 2005, 10:24:16 PM
Almost forgot, this can be added to your Dialog code:
Code: [Select]
case MENU_SKIN_UNLOAD:
_tcsncpy(szPlaceHolder, "", sizeof(szPlaceHolder) / sizeof(TCHAR));
MessageBox(hScrnWnd, _T("Reseting skin to default skin"), _T(APP_TITLE) _T(" Info"), MB_OK | MB_ICONINFORMATION);
POST_INITIALISE_MESSAGE;
break;
Code: [Select]
Dont forget to add the definition in resource.h
See ya!!!!!! :biggrin:
P.D. This will reset the skin if you aren't happy with the actual one without need of editiong manually the ini
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on August 16, 2005, 12:18:08 AM
ThanX FerchogtX!!! For all the explanation, i understand what you said about the bitman ^^
i will test the code and i think that will work i just dont have to much experience with bitmans
im starting with C++ ...but i hope i get better ^^

Really ThanX for the code and the Unload AddOn ^^....

SeeYaa Man!!! i was missing you already xDDD
:-D
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on August 16, 2005, 01:07:14 AM
Added some attribute coding to the Streching Function i have to ThanX FerchogtX for the
info, with that reference i understood and added this...

Code: [Select]
// This is for background image, performs the needed stretching
// for avoiding the use of more images for this :)
// Extra Stretch Code for any BMP Size by CaptainCPS-X
// Made posible ThanX to FerchogtX Info about BMP attributes
void StretchBitmap(HDC hDC, HWND hWnd, HBITMAP hBitmap)
{
HDC memDC; BITMAP bm; RECT re;
memDC = CreateCompatibleDC(hDC);
SelectObject(memDC, hBitmap);
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);

//Basic bitman attributes
long width=bm.bmWidth;
long height=bm.bmHeight;

//Prepare the bitmap attributes
BITMAPINFO bmInfo;
memset(&bmInfo.bmiHeader,0,sizeof(BITMAPINFOHEADER));
bmInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmInfo.bmiHeader.biWidth=width;
bmInfo.bmiHeader.biHeight=height;
bmInfo.bmiHeader.biPlanes=1;
bmInfo.bmiHeader.biBitCount=24;

GetClientRect(hWnd, &re);
if (bMenuEnabled) {
StretchBlt(hDC, 0, 25, re.right, re.bottom-25, memDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
} else {
StretchBlt(hDC, 0, 0, re.right, re.bottom, memDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
}
DeleteDC(memDC);
}

I hope you like it ^^ now every Bitman image size Works !!!! ThanX FerchogtX! ^^

SeeYaa!!!
:-D
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on August 16, 2005, 12:58:48 PM
I added the unload code and it gave me errors about a conversion of a CHAR to WCHAR cant be
done or something like that so i removed the blank and put ''szNoSkin''...

just check this code...

Add this in the top of scrn.cpp...

Code: [Select]
static TCHAR* szNoSkin = _T("");
and then this is the new code you posted but edited so it dont give convertion errors...

Code: [Select]
case MENU_SKIN_UNLOAD: // ThanX to FerchogtX for the code
_tcsncpy(szPlaceHolder, szNoSkin, sizeof(szPlaceHolder) / sizeof(TCHAR));
MessageBox(hScrnWnd, _T("Reseting Skin to default skin"), _T(APP_TITLE) _T(" Info"), MB_OK | MB_ICONINFORMATION);
POST_INITIALISE_MESSAGE;
break;

SeeYaa!!! ^^
:-D
Title: Re: FBA Tips and Tricks
Post by: FerchogtX on August 16, 2005, 09:08:29 PM
I added the unload code and it gave me errors about a conversion of a CHAR to WCHAR cant be
done or something like that so i removed the blank and put ''szNoSkin''...

just check this code...

Add this in the top of scrn.cpp...

Code: [Select]
static TCHAR* szNoSkin = _T("");
and then this is the new code you posted but edited so it dont give convertion errors...

Code: [Select]
case MENU_SKIN_UNLOAD: // ThanX to FerchogtX for the code
_tcsncpy(szPlaceHolder, szNoSkin, sizeof(szPlaceHolder) / sizeof(TCHAR));
MessageBox(hScrnWnd, _T("Reseting Skin to default skin"), _T(APP_TITLE) _T(" Info"), MB_OK | MB_ICONINFORMATION);
POST_INITIALISE_MESSAGE;
break;

SeeYaa!!! ^^
:-D
XD you don't have to do that, just change the "" with _T("")... here the fix:
Code: [Select]
case MENU_SKIN_UNLOAD: // ThanX to FerchogtX for the code
_tcsncpy(szPlaceHolder, _T(""), sizeof(szPlaceHolder) / sizeof(TCHAR));
MessageBox(hScrnWnd, _T("Reseting Skin to default skin"), _T(APP_TITLE) _T(" Info"), MB_OK | MB_ICONINFORMATION);
POST_INITIALISE_MESSAGE;
break;
BTW here a shortened version of your bitmap code:
Code: [Select]
// This is for background image, performs the needed stretching
// for avoiding the use of more images for this :)
// Extra Stretch Code for any BMP Size by CaptainCPS-X
// Made posible ThanX to FerchogtX Info about BMP attributes
void StretchBitmap(HDC hDC, HWND hWnd, HBITMAP hBitmap)
{
HDC memDC; BITMAP bm; RECT re;

memDC = CreateCompatibleDC(hDC);
SelectObject(memDC, hBitmap);
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
GetClientRect(hWnd, &re);
if (bMenuEnabled) {
StretchBlt(hDC, 0, 25, re.right, re.bottom-25, memDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
// StretchBlt(hDC, 0, 25, re.right, re.bottom-25, memDC, 0, 0, 304, 224, SRCCOPY);
} else {
StretchBlt(hDC, 0, 0, re.right, re.bottom, memDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
// StretchBlt(hDC, 0, 0, re.right, re.bottom, memDC, 0, 0, 304, 224, SRCCOPY);
}
DeleteDC(memDC);
}
You maybe will ask, why you deleted the other atributes? because you don't need them at all, CreateCompatibleDC converts your resource into a handler that can be used to do what you need here, when you declare the BITMAP structure, also the atributes are declared (in an implicit way) so the only thing you need is to change the sixes into bm.bmWidth and bm.bmHeight, in WinAPI this is very usefull sometimes because saves a lot of code, instead of re-writting all ther structure again.
See ya!!!!!! :biggrin:
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on August 17, 2005, 01:21:05 AM
ThanX FerchogtX! :-D ^^u... man im fighting with a code for loading other type of images but
i give up for now wheeuuu im tired of thinking and searching references on the net X___X

btw, im using the Turbo mode you have on your build of FBA Plus!, and i was having Guru Meditation
when i toggle to fullscreen mode with turbo on...

i did this to the MENU_FULL code so it will turn off the Turbo when going fullscreen and it not give
the guru meditation error anymore...

its simple...im not talking about something so special but this will fix the guru thing...

Code: [Select]
case MENU_FULL:
if (bDrvOkay || nVidFullscreen) {
nVidFullscreen = !nVidFullscreen;
bAppDoFast = 0;
POST_INITIALISE_MESSAGE;
}
return;

as you see i added... ''bAppDoFast = 0;'' so it turn off the turbo when goin fullscreen :-)

What do you think, is good or its better to fix the guru error in other way??

SeeYaa!!!
:-D

Title: Re: FBA Tips and Tricks
Post by: FerchogtX on August 18, 2005, 12:30:02 PM
Let me check my src's and see if this can be fixed iun another way...
See ya!!!!
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on August 20, 2005, 04:13:12 PM
Im back with something usefull ^^...Sound Volume Disabling while playing a Game...this doent
have to do with the Samplerate at all...this work with volume controls...

Well here i go... :-D

IN BURNER/WIN32/RESOURCE_STRING.H

FIND:

Code: [Select]
#define IDS_SOUND_VOLUMESET (IDS_STRING + 131)
AFTER THAT ADD:

Code: [Select]
#define IDS_SOUND_MUTE (IDS_STRING + 132)
#define IDS_SOUND_MUTE_OFF (IDS_STRING + 133)

IN BURNER/WIN32/RUN.CPP

FIND:

Code: [Select]
case VK_OEM_PLUS: {
TCHAR buffer[15];

nAudVolume += 100;

BEFORE THAT ADD:

Code: [Select]
// 'Silence' & 'Sound Restored' Code (added by CaptainCPS-X)
case 'S': {
TCHAR buffer[15];

nAudVolume -= 10000;
if (GetAsyncKeyState(VK_CONTROL) & 0x80000000) {
nAudVolume -= 10000;
}

if (nAudVolume < 0) {
nAudVolume = 0;
}
if (AudSoundSetVolume() == 0) {
VidSNewShortMsg(FBALoadStringEx(hAppInst, IDS_SOUND_NOVOLUME, true));
} else {
_stprintf(buffer, FBALoadStringEx(hAppInst, IDS_SOUND_MUTE, true), nAudVolume / 100);
VidSNewShortMsg(buffer);
}
break;
}

case 'R': {

nAudVolume += 10000;
if (GetAsyncKeyState(VK_CONTROL) & 0x80000000) {
nAudVolume += 10000;
}

if (nAudVolume > 10000) {
nAudVolume = 10000;
}
if (AudSoundSetVolume() == 0) {
VidSNewShortMsg(FBALoadStringEx(hAppInst, IDS_SOUND_NOVOLUME, true));
} else {
VidSNewShortMsg(FBALoadStringEx(hAppInst, IDS_SOUND_MUTE_OFF, true));
}
break;
}

IN BURNER/WIN32/STRING.RC

FIND:

Code: [Select]
IDS_SOUND_VOLUMESET "volume %03i %%"
AFTER THAT ADD:

Code: [Select]
IDS_SOUND_MUTE "Silence"
IDS_SOUND_MUTE_OFF "Sound Restored"

I hope you like that ^^ (here are some images)

(http://jezeronline.com/images/mgfba7x/mgfba7x_01.jpg)

(http://jezeronline.com/images/mgfba7x/mgfba7x_02.jpg)

If somebody can make the code work in only one key this would be Great...

Actually the keys are...

Alt + S (Silence)
Alt + R (Sound Restored)

I just want this only in Alt + S, like the Turbo Option in F1 key...i hope you understand what i mean
^^

SeeYaa All!!
:-D
Title: Re: FBA Tips and Tricks
Post by: Badablek on August 20, 2005, 06:26:14 PM
Quote
If somebody can make the code work in only one key this would be Great...


IN BURNER/WIN32/RUN.CPP

FIND:
Code: [Select]
static bool bShowFPS = false;
AFTER THAT ADD:
Code: [Select]
static bool bMute = false;
FIND:
Code: [Select]
case VK_OEM_PLUS: {
TCHAR buffer[15];

nAudVolume += 100;

ADD THIS BEFORE:
Code: [Select]
case 'S': {
TCHAR buffer[15];
bMute = !bMute;
if (bMute) {
nAudVolume -= 10000;
nAudVolume = 0; //force volume to 0%
_stprintf(buffer, FBALoadStringEx(hAppInst, IDS_SOUND_MUTE, true), nAudVolume / 100);
} else {
nAudVolume += 10000;
nAudVolume = 10000; //force volume to 100%
_stprintf(buffer, FBALoadStringEx(hAppInst, IDS_SOUND_MUTE_OFF, true), nAudVolume / 100);
}
VidSNewShortMsg(buffer);
AudSoundSetVolume();
break;
}

enjoy ^^

this is my first "real code", maybe it can be done in another way....but it works great for me ^^

ps : nice idea this "Mute function" CaptainCPS-X :biggrin:

[EDIT]

Seems to work, but if I mute the sound then try to increase the sound with ALT + PAGEUP, then the Mute/UnMute function do not work anymore :(

[EDIT2]

Just need to force the volume to 0% or 100% before muting/Unmuting and this bug is gone......
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on August 20, 2005, 09:10:09 PM
ThanX Badablek :-D.. I will test out the modified code you posted ^^, i think the
vol % problem can be fixed...

I will check it and tell you if i fix it ^^...

SeeYaa!!
:-D
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on August 20, 2005, 09:25:13 PM
Badablek the code is fine....its going good i did what you say about the Bug but i dont have
the problem you talk....i tried different ways and It work just fine ^^...

Ah other thing i saw in you post... youre saying when you press ALT + PAGEUP but thats not
the key to Up the volume... its ALT + (+) and to lower is ALT + (-) ....plus and negative signs
but i tried ALT + PAGEUP and ALT + PAGEDOWN and they dont do anything...maybe youre
confuced ^^

but hey!..ThanX again for making it work on one Key only! :-D

SeeYaa!!!
:-D
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on August 20, 2005, 09:38:47 PM
This one is for FerchogtX ^^... hey man i did a fix in the 'Save Preview AddOn' you have
on FB Alpha plus! and now it advance one frame After Saving the Preview,
this means that when you Pause the Game and you press SHIFT + F12 you will see the text
''Preview Saved''...and Not see the Screen just there without telling you about that. :-D...

Before doing this Run a Game in your actual build of FBAP and Pause the game, and then
Press 'SHIFT + F12' then you will see what i mean , there is No Text telling you Saved Something ^^...

Here is the modified code so just replace the old:

Code: [Select]
case MENU_SAVEPREV: {
if(bDrvOkay) {
int status = MakePreview();
if (!status) {
VidSNewShortMsg(FBALoadStringEx(hAppInst, IDS_PREV_SAVED, true), 0x00FF00);
// Advance a frame after Saving the Preview
VidFrame();
VidPaint(0);
if (bRunPause) {
memset(nAudNextSound, 0, nAudSegLen << 2); // Write silence into the buffer
}
} else {
VidSNewShortMsg(FBALoadStringEx(hAppInst, IDS_PREV_ERROR, true), 0xFF3F3F);
}
}
return;
}

SeeYaa!!
:-D
Title: Re: FBA Tips and Tricks
Post by: iq_132 on August 20, 2005, 10:11:25 PM
Nice stuff you guys are working on. :) I wonder what you'll come up with next.
Title: Re: FBA Tips and Tricks
Post by: Leaf on August 20, 2005, 10:48:04 PM
Thanks, CaptainCPS-X. Your posts are very useful and I added them all. ^_^
I use Visual Style under WinXP, I found the menu height was not 25, so I changed StretchBitmap function to this, now the bitmap fills full the screen.

Code: [Select]
// This is for background image, performs the needed stretching
// for avoiding the use of more images for this :)
// Extra Stretch Code for any BMP Size by CaptainCPS-X
// Made posible ThanX to FerchogtX Info about BMP attributes
void StretchBitmap(HDC hDC, HWND hWnd, HBITMAP hBitmap)
{
HDC memDC; BITMAP bm; RECT re; RECT reMenu;
memDC = CreateCompatibleDC(hDC);
HGDIOBJ hOldObj = SelectObject(memDC, hBitmap);
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);

// get menu height
HMENU hMenu = FBALoadMenu(hAppInst, MAKEINTRESOURCE(IDR_MENU));
GetMenuItemRect(hWnd, hMenu, 0, &reMenu);
long mH = reMenu.bottom - reMenu.top;

GetClientRect(hWnd, &re);
if (bMenuEnabled) {
StretchBlt(hDC, 0, mH, re.right, re.bottom-mH, memDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
} else {
StretchBlt(hDC, 0, 0, re.right, re.bottom, memDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
}
SelectObject(memDC, hOldObj);
DeleteDC(memDC);
}
Title: Re: FBA Tips and Tricks
Post by: Badablek on August 21, 2005, 04:08:56 AM
Quote
Ah other thing i saw in you post... youre saying when you press ALT + PAGEUP but thats not
the key to Up the volume... its ALT + (+) and to lower is ALT + (-) ....plus and negative signs
but i tried ALT + PAGEUP and ALT + PAGEDOWN and they dont do anything...maybe youre
confuced ^^

I changed the keys for Volume Up and down, as the original keys do not work for me (maybe because I'm using a french keyboard  :confused:)


The bug appears if I do not set the sound volume to 0 or 100% before using the mute function.....If I mute the sound, then I increase the volume to 100% (with ALT + (+) or ALT + PAGEUP for me  :wink:), then if I press again S, it doesn't do anything......this is why in my code, I set the volume to 0 or 100%

Try to put // in front of nAudVolume = 0; and nAudVolume = 100; then the bug will appear....
Title: Re: FBA Tips and Tricks
Post by: Leaf on August 21, 2005, 07:49:25 AM
I added a variable "nOldAudVolume" to save current sound volume before mute.
When the sound muted, push Alt+ or Alt- will be no effect.
Code: [Select]
// 'Silence' & 'Sound Restored' Code (added by CaptainCPS-X)
case 'S': {
TCHAR buffer[15];
bMute = !bMute;

if (bMute) {
nAudVolume = 0;// mute sound
_stprintf(buffer, FBALoadStringEx(hAppInst, IDS_SOUND_MUTE, true), nAudVolume / 100);
} else {
nAudVolume = nOldAudVolume;// restore volume
_stprintf(buffer, FBALoadStringEx(hAppInst, IDS_SOUND_MUTE_OFF, true), nAudVolume / 100);
}
if (AudSoundSetVolume() == 0) {
VidSNewShortMsg(FBALoadStringEx(hAppInst, IDS_SOUND_NOVOLUME, true));
} else {
VidSNewShortMsg(buffer);
}
break;
}

case VK_OEM_PLUS: {
if (bMute) break; // if mute, not do this

......
nOldAudVolume = nAudVolume;
......
}
case VK_OEM_MINUS: {
if (bMute) break; // if mute, not do this

                                                                                                                                ......
nOldAudVolume = nAudVolume;
......
}
Title: Re: FBA Tips and Tricks
Post by: Badablek on August 21, 2005, 07:58:24 AM
How to completely disable CRC checking.

SRC/BURNER/BZIP.CPP

find this:
Code: [Select]
if (List[nFind].nLen == ri.nLen) {
if (ri.nCrc) { // If we know the CRC
if (List[nFind].nCrc != ri.nCrc) { // Length okay, but CRC wrong
RomFind[i].nState = 2;
}
}

replace with this:
Code: [Select]
if (List[nFind].nLen == ri.nLen) {
if (ri.nCrc) { // If we know the CRC
if (List[nFind].nCrc != ri.nCrc) { // Length okay, but CRC wrong
RomFind[i].nState = [color=red]1; // Changed 2 to 1[/color]
}
}

Why not adding a check box in order to enable/disable the No CRC check :

in src\burner\win32\resource.h

Find:

Code: [Select]
#define IDC_SEL_ASCIIONLY 20063
ADD this after

Code: [Select]
#define IDC_SEL_NOCRC 20130
------

in src\burner\win32\sel.cpp

Find:

Code: [Select]
#define ASCIIONLY (1 << 19)
ADD this after

Code: [Select]
#define NOCRC (1 << 20)
Find:

Code: [Select]
CheckDlgButton(hSelDlg, IDC_SEL_ASCIIONLY, nLoadMenuShowX & ASCIIONLY ? BST_CHECKED : BST_UNCHECKED);
ADD this after

Code: [Select]
CheckDlgButton(hSelDlg, IDC_SEL_NOCRC, nLoadMenuShowX & NOCRC ? BST_CHECKED : BST_UNCHECKED);
Find:

Code: [Select]
case IDC_SEL_ASCIIONLY:
nLoadMenuShowX ^= ASCIIONLY;
RebuildEverything();
break;

ADD this after

Code: [Select]
case IDC_SEL_NOCRC:
nLoadMenuShowX ^= NOCRC;
bRescanRoms = true; //update the game selection screen
CreateROMInfo();
RebuildEverything();
break;

------

in src\burner\bzip.cpp

Find:

Code: [Select]
if (List[nFind].nLen == ri.nLen) {
if (ri.nCrc) { // If we know the CRC
if (List[nFind].nCrc != ri.nCrc) { // Length okay, but CRC wrong
RomFind[i].nState = 2;
}
}

REPLACE with this

Code: [Select]
if (List[nFind].nLen == ri.nLen) {
if (ri.nCrc) { // If we know the CRC
if (List[nFind].nCrc != ri.nCrc) { // Length okay, but CRC wrong
if (nLoadMenuShowX & NOCRC) {
RomFind[i].nState = 1;
} else {
RomFind[i].nState = 2;
}
}
}

------

in src\burner\win32\app.rc

Find:

Code: [Select]
CONTROL "Use only Latin text",IDC_SEL_ASCIIONLY,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,76,241,100,14
REPLACE with this

Code: [Select]
CONTROL "Use only Latin text",IDC_SEL_ASCIIONLY,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,76,241,80,14
CONTROL "No CRC check",IDC_SEL_NOCRC,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,156,241,60,14

Now you have the choice to enable or disable the CRC check.

ps :

Code: [Select]
case IDC_SEL_NOCRC:
nLoadMenuShowX ^= NOCRC;
bRescanRoms = true; //update the game selection screen
CreateROMInfo();
RebuildEverything();
break;

bRescanRoms = true;
CreateROMInfo();

this rescans the romset in order to update the icon in front of games that are bad (wrong CRC), so if the NO CRC option is enabled, it removes the red icon in front of the games that have bad crc....

(http://img399.imageshack.us/img399/3161/nocrc1ft.th.jpg) (http://img399.imageshack.us/my.php?image=nocrc1ft.jpg)

[EDIT]

hmmm, the "code" feature of the forum do not like tabulation :(

#define IDC_SEL_ASCIIONLY         20063
Title: Re: FBA Tips and Tricks
Post by: Badablek on August 21, 2005, 08:17:01 AM
what about if we disable the size check with the crc check? sometimes we have different crcs due to a size mismatch...

note: this code considers that you have the disable crc check with checkbox option :wink:

ooops....it seems this feature was already done by someone else  :biggrin:

BTW I learn to write some code, even if it was already done  :smilie:
Title: Re: FBA Tips and Tricks
Post by: Shoometsu on August 22, 2005, 10:00:34 PM
yeah , the disble crc and the checkbox for this where developed for someone else, I just changed the crc check to ignore a size mismatch error too :biggrin:

if anoter one have done this before I don't know, because I've never seen this before, so I've posted it (yeah, I don't browse by chinese forums,  I won't understand anything) :redface:
Title: Re: FBA Tips and Tricks
Post by: Badablek on April 18, 2006, 06:18:14 AM
Hi,

Changelog of FBA-xxx Pro 1.12
Quote
- Patched out HW test in Neo-Geo games. (removes ugly green screen on boot) (by iq_132)


Any chance to post the trick to disable the Neogeo Hardware Test ? It sounds very interesting ^_^
Title: Re: FBA Tips and Tricks
Post by: iq_132 on April 18, 2006, 07:33:00 PM
Code: [Select]
// Hacks for Neo-Geo BIOS
for (int i = 0x10000; i < 0x12000; i+=2) {
if ((*((unsigned short*)(Neo68KBIOS + i + 0)) == 0x4EBA) && (*((unsigned short*)(Neo68KBIOS + i + 4)) == 0x13C0) &&
    (*((unsigned short*)(Neo68KBIOS + i + 6)) == 0x003A) && (*((unsigned short*)(Neo68KBIOS + i + 8)) == 0x001D) &&
    (*((unsigned short*)(Neo68KBIOS + i + 10)) == 0x5206) && (*((unsigned short*)(Neo68KBIOS + i + 12)) == 0x41F9) &&
    (*((unsigned short*)(Neo68KBIOS + i + 14)) == 0x00D0))
{
// Remove memory check for now
*((unsigned short*)(Neo68KBIOS + i + 0x000)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x002)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x016)) = 0x4EF9;
*((unsigned short*)(Neo68KBIOS + i + 0x018)) = 0x00C1;
*((unsigned short*)(Neo68KBIOS + i + 0x01A)) = 0x006A + (i&0xFFFF);

// Patch Calendar errors
*((unsigned short*)(Neo68KBIOS + i + 0x114)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x116)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x11C)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x11E)) = 0x4E71;

// Patch checksum test
*((unsigned short*)(Neo68KBIOS + i + 0x162)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x164)) = 0x4E71;

i = 0x12001;
}
}
Title: Re: FBA Tips and Tricks
Post by: Badablek on April 19, 2006, 07:08:11 AM
Thanks  :biggrin:
Title: Re: FBA Tips and Tricks
Post by: James33 on April 20, 2006, 06:56:13 AM
Code: [Select]
// Hacks for Neo-Geo BIOS
for (int i = 0x10000; i < 0x12000; i+=2) {
if ((*((unsigned short*)(Neo68KBIOS + i + 0)) == 0x4EBA) && (*((unsigned short*)(Neo68KBIOS + i + 4)) == 0x13C0) &&
    (*((unsigned short*)(Neo68KBIOS + i + 6)) == 0x003A) && (*((unsigned short*)(Neo68KBIOS + i + 8)) == 0x001D) &&
    (*((unsigned short*)(Neo68KBIOS + i + 10)) == 0x5206) && (*((unsigned short*)(Neo68KBIOS + i + 12)) == 0x41F9) &&
    (*((unsigned short*)(Neo68KBIOS + i + 14)) == 0x00D0))
{
// Remove memory check for now
*((unsigned short*)(Neo68KBIOS + i + 0x000)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x002)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x016)) = 0x4EF9;
*((unsigned short*)(Neo68KBIOS + i + 0x018)) = 0x00C1;
*((unsigned short*)(Neo68KBIOS + i + 0x01A)) = 0x006A + (i&0xFFFF);

// Patch Calendar errors
*((unsigned short*)(Neo68KBIOS + i + 0x114)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x116)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x11C)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x11E)) = 0x4E71;

// Patch checksum test
*((unsigned short*)(Neo68KBIOS + i + 0x162)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x164)) = 0x4E71;

i = 0x12001;
}
}


Hi IQ is there a Mame conversion for this ? hehe

EDIT: Never mind I worked it out :P
Title: Re: FBA Tips and Tricks
Post by: iq_132 on April 22, 2006, 07:58:40 PM
I think adding this to MACHINE_RESET( neogeo ) will work

Code: [Select]
UINT16 *bios16 = (UINT16*)memory_region( REGION_USER1 );

// Hacks for Neo-Geo BIOS
for (int i = 0x10000; i < 0x12000; i+=2) {
if ((bios16[(i + 0)/2] == 0x4EBA)  && (bios16[(i + 4)/2] == 0x13C0) &&
    (bios16[(i + 6)/2] == 0x003A)  && (bios16[(i + 8)/2] == 0x001D) &&
    (bios16[(i + 10)/2] == 0x5206) && (bios16[(i + 12)/2] == 0x41F9) &&
    (bios16[(i + 14)/2] == 0x00D0))
{
// Remove memory check for now
bios16[(i + 0x000)/2] = 0x4E71;
bios16[(i + 0x002)/2] = 0x4E71;
bios16[(i + 0x016)/2] = 0x4EF9;
bios16[(i + 0x018)/2] = 0x00C1;
bios16[(i + 0x01A)/2] = 0x006A + (i&0xFFFF);

// Patch Calendar errors
bios16[(i + 0x114)/2] = 0x4E71;
bios16[(i + 0x116)/2] = 0x4E71;
bios16[(i + 0x11C)/2] = 0x4E71;
bios16[(i + 0x11E)/2] = 0x4E71;

// Patch checksum test
bios16[(i + 0x162)/2] = 0x4E71;
bios16[(i + 0x164)/2] = 0x4E71;

i = 0x12001;
}
}
Title: Re: FBA Tips and Tricks
Post by: James33 on April 23, 2006, 09:01:08 AM
Thanks IQ :D
I put it in the DRIVER INT :)  It seems to work there just a few small changes .

Code: [Select]
/* This function is only called once per game. */
DRIVER_INIT( neogeo )
{
extern struct YM2610interface neogeo_ym2610_interface;
UINT16 *mem16 = (UINT16 *)memory_region(REGION_CPU1);
UINT16 *bios16 = (UINT16*)memory_region( REGION_USER1 );
int i;
int tileno,numtiles;

numtiles = memory_region_length(REGION_GFX3)/128;
for (tileno = 0;tileno < numtiles;tileno++)
{
unsigned char swap[128];
UINT8 *gfxdata;
int x,y;
unsigned int pen;

gfxdata = &memory_region(REGION_GFX3)[128 * tileno];

memcpy(swap,gfxdata,128);

for (y = 0;y < 16;y++)
{
UINT32 dw;

dw = 0;
for (x = 0;x < 8;x++)
{
pen  = ((swap[64 + 4*y + 3] >> x) & 1) << 3;
pen |= ((swap[64 + 4*y + 1] >> x) & 1) << 2;
pen |= ((swap[64 + 4*y + 2] >> x) & 1) << 1;
pen |= (swap[64 + 4*y   ] >> x) & 1;
dw |= pen << 4*x;
}
*(gfxdata++) = dw>>0;
*(gfxdata++) = dw>>8;
*(gfxdata++) = dw>>16;
*(gfxdata++) = dw>>24;

dw = 0;
for (x = 0;x < 8;x++)
{
pen  = ((swap[4*y + 3] >> x) & 1) << 3;
pen |= ((swap[4*y + 1] >> x) & 1) << 2;
pen |= ((swap[4*y + 2] >> x) & 1) << 1;
pen |= (swap[4*y ] >> x) & 1;
dw |= pen << 4*x;
}
*(gfxdata++) = dw>>0;
*(gfxdata++) = dw>>8;
*(gfxdata++) = dw>>16;
*(gfxdata++) = dw>>24;
}
}

if (memory_region(REGION_SOUND2))
{
logerror("using memory region %d for Delta T samples\n",REGION_SOUND2);
neogeo_ym2610_interface.pcmromb = REGION_SOUND2;
}
else
{
logerror("using memory region %d for Delta T samples\n",REGION_SOUND1);
neogeo_ym2610_interface.pcmromb = REGION_SOUND1;
}

/* Allocate ram banks */
neogeo_ram16 = auto_malloc (0x10000);
memory_set_bankptr(1, neogeo_ram16);

/* Set the biosbank */
memory_set_bankptr(3, memory_region(REGION_USER1));

/* Set the 2nd ROM bank */
if (memory_region_length(REGION_CPU1) > 0x100000)
neogeo_set_cpu1_second_bank(0x100000);
else
neogeo_set_cpu1_second_bank(0x000000);

/* Set the sound CPU ROM banks */
neogeo_init_cpu2_setbank();

/* Allocate and point to the memcard - bank 5 */
neogeo_memcard = auto_malloc(0x800);
memset(neogeo_memcard, 0, 0x800);

mem16 = (UINT16 *)memory_region(REGION_USER1);


/* irritating maze uses a trackball */
if (!strcmp(Machine->gamedrv->name,"irrmaze"))
neogeo_has_trackball = 1;
else
neogeo_has_trackball = 0;

// Hacks for Neo-Geo BIOS
for( i = 0x10000; i < 0x12000; i+=2) {
if ((bios16[(i + 0)/2] == 0x4EBA)  && (bios16[(i + 4)/2] == 0x13C0) &&
    (bios16[(i + 6)/2] == 0x003A)  && (bios16[(i + 8)/2] == 0x001D) &&
    (bios16[(i + 10)/2] == 0x5206) && (bios16[(i + 12)/2] == 0x41F9) &&
    (bios16[(i + 14)/2] == 0x00D0))
{
// Remove memory check for now
bios16[(i + 0x000)/2] = 0x4E71;
bios16[(i + 0x002)/2] = 0x4E71;
bios16[(i + 0x016)/2] = 0x4EF9;
bios16[(i + 0x018)/2] = 0x00C1;
bios16[(i + 0x01A)/2] = 0x006A + (i&0xFFFF);

// Patch Calendar errors
bios16[(i + 0x114)/2] = 0x4E71;
bios16[(i + 0x116)/2] = 0x4E71;
bios16[(i + 0x11C)/2] = 0x4E71;
bios16[(i + 0x11E)/2] = 0x4E71;

// Patch checksum test
bios16[(i + 0x162)/2] = 0x4E71;
bios16[(i + 0x164)/2] = 0x4E71;

i = 0x12001;
}
}

{ /* info from elsemi, this is how nebula works, is there a better way in mame? */
UINT8* gamerom = memory_region(REGION_CPU1);
neogeo_game_vectors = auto_malloc (0x80);
memcpy( neogeo_game_vectors, gamerom, 0x80 );
}
}
Title: Re: FBA Tips and Tricks
Post by: Death Metal on January 12, 2007, 04:20:38 PM
Code: [Select]
// Hacks for Neo-Geo BIOS
for (int i = 0x10000; i < 0x12000; i+=2) {
if ((*((unsigned short*)(Neo68KBIOS + i + 0)) == 0x4EBA) && (*((unsigned short*)(Neo68KBIOS + i + 4)) == 0x13C0) &&
    (*((unsigned short*)(Neo68KBIOS + i + 6)) == 0x003A) && (*((unsigned short*)(Neo68KBIOS + i + 8)) == 0x001D) &&
    (*((unsigned short*)(Neo68KBIOS + i + 10)) == 0x5206) && (*((unsigned short*)(Neo68KBIOS + i + 12)) == 0x41F9) &&
    (*((unsigned short*)(Neo68KBIOS + i + 14)) == 0x00D0))
{
// Remove memory check for now
*((unsigned short*)(Neo68KBIOS + i + 0x000)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x002)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x016)) = 0x4EF9;
*((unsigned short*)(Neo68KBIOS + i + 0x018)) = 0x00C1;
*((unsigned short*)(Neo68KBIOS + i + 0x01A)) = 0x006A + (i&0xFFFF);

// Patch Calendar errors
*((unsigned short*)(Neo68KBIOS + i + 0x114)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x116)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x11C)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x11E)) = 0x4E71;

// Patch checksum test
*((unsigned short*)(Neo68KBIOS + i + 0x162)) = 0x4E71;
*((unsigned short*)(Neo68KBIOS + i + 0x164)) = 0x4E71;

i = 0x12001;
}
}
Oh, IQ, where exactly would I have to insert those, please? I think those patch that annoying green screen for Neo-Geo games?
Title: Re: FBA Tips and Tricks
Post by: iq_132 on January 12, 2007, 04:33:12 PM
Yup, that's exactly what it does.

Right after this:

Code: [Select]
// Load the BIOS ROMs
if (nBIOS >= 0) {
BurnLoadRom(Neo68KBIOS, 0x00080 + nBIOS, 1);
} else {
BurnLoadRom(Neo68KBIOS, 0x00080 +     6, 1);
}
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on March 01, 2007, 03:26:44 AM
Lets give a litle life to this thread hehe ^^...

NeoGeo Music Changer Extra Feature

Note: Just changes Music on some NeoGeo games, If somebody manage to get more games to change the music somehow, I will apreciate the help =) , this code works kinda like WinKawaks because it have the same problems with neogeo music.

*When updating with the new code be carefull with the 'After' and 'Before', make sure you put the code where it goes  :wink:

Ok lets start...

First of all, do a backup of this files :

- src/burner/win32/string.rc
- src/burner/win32/resource_string.h
- src/burner/burner.h
- src/burner/win32/run.cpp
- src/burner/win32/scrn.cpp
- src/burn/neogeo/neo_run.cpp
- src/burner/win32/burner_win32.h


Now we can really start! ^^...

In src/burner/win32/string.rc :

Search for...

Code: [Select]
    IDS_FIRSTRUN1 "This appears to be the first time you run %s v%.20s.\n\n"

Add this before...

Code: [Select]
    IDS_SOUND_TRACK_CHANGE "track 0x0%x"

In src/burner/win32/resource_string.h :

Search for...

Code: [Select]
#define IDS_ERR_DISK_TOOOLD (IDS_ERROR  + 154)

Add this after...

Code: [Select]
#define IDS_SOUND_TRACK_CHANGE (IDS_STRING + 170)

In src/burner/burner.h :

Search for...

Code: [Select]
// gami.cpp
extern struct GameInp* GameInp;

add this before...

Code: [Select]
// run.cpp
extern void NeoZ80Cmd(UINT16 sound_code);

In src/burner/win32/run.cpp :

Search for...

Code: [Select]
int bRunPause = 0;
int bAltPause = 0;

Add this before...

Code: [Select]
int nNeoTrack = 0x0720;
int nNeoTrackDef = 0x0720;

Search for...

Code: [Select]
case 'T': {
if (kNetGame && hwndChat == NULL) {
if (AppMessage(&Msg)) {
ActivateChat();
}
}
break;
}

Add this after...

Code: [Select]
    // Next Track
case VK_PRIOR: {

TCHAR buffer[15];
if ((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_SNK_NEOGEO)
{
if (nNeoTrack >= nNeoTrackDef && nNeoTrack <= 0x07FF)
{
nNeoTrack++;
NeoZ80Cmd(nNeoTrack);
_stprintf(buffer, FBALoadStringEx(hAppInst, IDS_SOUND_TRACK_CHANGE, true), nNeoTrack);
VidSNewShortMsg(buffer);
}
else
{
nNeoTrack = nNeoTrackDef;
NeoZ80Cmd(nNeoTrack);
_stprintf(buffer, FBALoadStringEx(hAppInst, IDS_SOUND_TRACK_CHANGE, true), nNeoTrack);
VidSNewShortMsg(buffer);
}
}
break;
}
// Previous Track
case VK_NEXT: {

TCHAR buffer[15];
if ((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_SNK_NEOGEO)
{
if (nNeoTrack >= nNeoTrackDef && nNeoTrack <= 0x07FF)
{
nNeoTrack--;
NeoZ80Cmd(nNeoTrack);
_stprintf(buffer, FBALoadStringEx(hAppInst, IDS_SOUND_TRACK_CHANGE, true), nNeoTrack);
VidSNewShortMsg(buffer);
}
else
{
nNeoTrack = nNeoTrackDef;
NeoZ80Cmd(nNeoTrack);
_stprintf(buffer, FBALoadStringEx(hAppInst, IDS_SOUND_TRACK_CHANGE, true), nNeoTrack);
VidSNewShortMsg(buffer);
}
}
break;
}
// Reset track to 0x0720
case VK_HOME: {

TCHAR buffer[15];
if ((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_SNK_NEOGEO)
{
nNeoTrack = nNeoTrackDef;
NeoZ80Cmd(nNeoTrack);
_stprintf(buffer, FBALoadStringEx(hAppInst, IDS_SOUND_TRACK_CHANGE, true), nNeoTrack);
VidSNewShortMsg(buffer);
}
break;
}

In src/burner/win32/scrn.cpp :

Search for...

Code: [Select]
if (nGame >= 0) {

Add this after...

Code: [Select]
nNeoTrack = 0x0720;

Search for...

Code: [Select]
case MENU_QUIT:

Add this after...

Code: [Select]
nNeoTrack = 0x0720;

In src/burn/neogeo/neo_run.cpp :

Search for...

Code: [Select]
unsigned char NeoReset = 0, NeoSystem = 0;

Add this after...

Code: [Select]
void NeoZ80Cmd(UINT16 sound_code);

Search for...

Code: [Select]
unsigned char __fastcall neogeoReadByte(unsigned int sekAddress)

Add this before...

Code: [Select]
void NeoZ80Cmd(UINT16 sound_code) {
SendSoundCommand(sound_code);
}

In src/burner/win32/burner_win32.h :

Search for...

Code: [Select]
// run.cpp

Add this after...

Code: [Select]
extern int nNeoTrack;
extern int nNeoTrackDef;

Well thats it !! If you want to test something after that, Kof98 is one of the games that works with the music changer code

I hope this code turns out to be useful for some of you ^^

SeeYaa!!
:biggrin:

PS: Well this is all for now lol, have to get a sleep ^^..Take Care all!
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on March 01, 2007, 03:41:30 AM
Here is a little pic of the code posted before working =)...

I forgot to mention how to use the feature hehe...

PAGEUP -> Next Track
PAGEDOWN - > Previous Track
HOME -> Reset to 0x0720 Default Track


SeeYaa!
:biggrin:
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on March 03, 2007, 12:39:56 AM
Posting here to let you know I managed to Change CPS-1 Music Tracks too!!  :biggrin: (needs a little adjustments because some sounds keep playing when there are no more music tracks)

Im gonna post the code soon, Im trying to change CPS-2 music tracks too, but QSound seems to be a little more complicated  :p

SeeYaa!!
:biggrin:
Title: Re: FBA Tips and Tricks
Post by: iq_132 on March 03, 2007, 12:46:56 PM
Excellent :)  Here's some code to parse Nebula track list files if you're interested.
I haven't tested it since I converted it to work in unicode, but it should work fine.
I'd be sweet to see it display the track title & number while you're playing them :)
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on March 04, 2007, 01:34:38 AM
Excellent :)  Here's some code to parse Nebula track list files if you're interested.
I haven't tested it since I converted it to work in unicode, but it should work fine.
I'd be sweet to see it display the track title & number while you're playing them :)


ThanX IQ! i gave a look at the code and it seems pretty good, i will be working on that and as soon as I get progress i let you know here  :wink:

SeeYaa!
 :biggrin:
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on March 04, 2007, 03:13:39 AM
Im back with progress hehe  :biggrin: ...

the current code i modified to change tracks needs some adjustments, but its simple to do and for tomorrow if everything is allright then I will post how to implement all in FBA  :wink:

for now in my test build to load / parse the .dat file containing the tracklist, I press enter when the game is loaded...then I press PGUP, PGDOWN to change tracks...of course this can be simplified and automatic, I just did it like that to check out the function and because im impatient some times lol  :biggrin:

I attached a pic showing the new improved Soundtrack Changer + Song title
(Really ThanX IQ! *CaptainCPS-X gives a handshake to IQ :p)

SeeYaa!
 :biggrin:
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on March 04, 2007, 05:10:49 AM
Done changes to NeoGeo Sountrack changing and now its working with the new code too (needs cleaning but I do it after I get a sleep, its 6:16AM and have to sleep @__@ )

A pic is attached for preview with Kof98  :wink:

SeeYaa!
:biggrin:
Title: Re: FBA Tips and Tricks
Post by: iq_132 on March 04, 2007, 09:00:23 AM
Absolutely fantastic work! I'm glad to see something like this in FBA. :)
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on March 04, 2007, 12:17:49 PM
Absolutely fantastic work! I'm glad to see something like this in FBA. :)

Yeah ^^, ...now im trying to make the display message wider because some titles are not displaying completely, I attached a picture with the little problem with the Titles...(the thing is that i dont know exactly where the displayed text size is defined, for now i only found how to change the Font size in 'vid_directx_support.cpp')

SeeYaa!
 :biggrin:
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on March 04, 2007, 09:03:36 PM
IQ I need a little help...it may be simple but as a padawan in coding  :p i dont know how to clean the parsed tracklist, the problem i got right now is that when a game is loaded, the tracklist is auto-loaded too, BUT, when I start another game the new tracklist is affected by the previous loaded one...and as a result if the previous titles where 10 characters long, and the new loaded one is 6..then there will be 4 letters from the other titles (something like that)....I dont know if i explain this well but here is an example (titles are examples too)...

1st loaded game -> Street Fighter 2 :

* track 1 =  Ryu's Theme

2nd loaded game -> King of Fighters 98 :

* track 1 = Coin'

The -> ' is not supposed to be there on the second loaded game (kof98)

Im doing a compressed pack of the changed files (R8 version of FBA extras) so I dont have to put an extensive explanation, if anyone wants to add the features to FBA, they only have to update the last official src with this one  :smilie:

I hope you can help me with this little prob with titles IQ , and really ThanX in advance  :wink:

SeeYaa!
:biggrin:
Title: Re: FBA Tips and Tricks
Post by: iq_132 on March 04, 2007, 11:50:21 PM
I think it's a mistake in my code :S

         szTracks->szName[nLen-5] = '\0';

should probably be:

         szTracks->szName[nLen-6] = '\0';


I'd also suggest adding
         szTracks->nTrack = 0;

after
         szTracks++;
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on March 05, 2007, 12:14:30 AM
I think it's a mistake in my code :S

         szTracks->szName[nLen-5] = '\0';

should probably be:

         szTracks->szName[nLen-6] = '\0';


I'd also suggest adding
         szTracks->nTrack = 0;

after
         szTracks++;

ThanX man! I will check with this code, btw, I posted the R8 version of FBA Extras  :wink:

SeeYaa!
 :biggrin:
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on March 05, 2007, 12:24:49 AM
Hey IQ!, Im posting just to let you know the code fixed the issue, now it displays the Title just fine  :wink:

now the next thing i will try to fix is the width of the area where the Title is displayed, maybe i'll do a exclusive function for showing the Song title message.

SeeYaa!
 :biggrin:
Title: Re: FBA Tips and Tricks
Post by: Leaf on March 05, 2007, 04:07:26 AM
Hi, CaptainCPS-X. Thanks for the nice feature.
I like the CPS1/2 games BGM. (for neogeo I can use uni-bios to listen.:P)

I reorganize the tracklist code of your fba_src_029665_ex_R8u1 source.
Maybe it's the better for understanding.  :biggrin:
SeeYaa!
Title: Re: FBA Tips and Tricks
Post by: CaptainCPS on March 05, 2007, 04:24:10 AM
Hi, CaptainCPS-X. Thanks for the nice feature.
I like the CPS1/2 games BGM. (for neogeo I can use uni-bios to hear.:P)

I reorganize the tracklist code of your fba_src_029665_ex_R8u1 source.
Maybe it's the better for understanding.  :biggrin:
SeeYaa!

ThanX Leaf! nice job, when i finish the testing I will make some use of this for the next release of FBA Extras

SeeYaa!!
 :biggrin:
Title: Re: FBA Tips and Tricks
Post by: Ramza126 on January 18, 2008, 06:15:08 AM
Here's the source to add avi support to FBA (version 029498).

Just extract the files to your fba source directory.

All credits to Gangta (for the original avi source), JAVH (for these files), and the FBA team for the original FBA source.

Is it possible to record avi in the new FBA R15? Using this file? I don't understand it and I really want to record avi of 3rd strike. Where do these files go? Thanks :cool:
Title: Re: _[ FinalBurn Alpha: Tips and Tricks ]_
Post by: KaaMoS on January 18, 2008, 04:17:32 PM
Yeah ^^, ...now im trying to make the display message wider because some titles are not displaying completely, I attached a picture with the little problem with the Titles...(the thing is that i dont know exactly where the displayed text size is defined, for now i only found how to change the Font size in 'vid_directx_support.cpp')

SeeYaa!
 :biggrin:


Well, could you put the messages position...
...on (http://img525.imageshack.us/img525/6710/ibhj6.png) (Down/Left)
...or (http://img99.imageshack.us/img99/8614/iaey9.png) (Up/Left) edge of screen?

With this, you can fix a part of the larger messages problem... and I agree, the text size is out of bounds; I hope that you can  solve this "natural error".
Title: Re: _[ FinalBurn Alpha: Tips and Tricks ]_
Post by: LittleKaneda on February 27, 2008, 04:29:59 AM
how can you get the "Select a Game" screen to show up while in fullscreen mode?
I don't know anything about writing the code but my question sounds pretty heavy.

it would be a nice "tip and trick" though  :p

actually, since I didn't contribute anything, maybe I shouldn't have posted in this thread!
Title: Re: FBA Tips and Tricks
Post by: Ave Satanas on December 05, 2008, 10:13:44 PM
Here's the source to add avi support to FBA (version 029498).

Just extract the files to your fba source directory.

All credits to Gangta (for the original avi source), JAVH (for these files), and the FBA team for the original FBA source.



Can this be done with nFBA?