Welcome!
Final Burn Neo => FBN Development => Topic started 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.
-
How to completely disable CRC checking.
SRC/BURNER/BZIP.CPP
find this:
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:
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
}
}
-
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.
-
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)
-
Remove the preset bug
Indp.cpp (src\burner)
Replace this :
int UsePreset(bool bMakeDefault)
{
int nGi, nPci, nAnalog = 0;
char szFilename[MAX_PATH] = "config\\preset\\";
with this :
int UsePreset(bool bMakeDefault)
{
int nGi, nPci, nAnalog = 0;
char szFilename[MAX_PATH] = "config\\presets\\";
-
Disable the "Auto-Disable NumLock" when you start FBA (really annoying for me)
main.cpp (src\burner)
Find this :
bNumlockStatus = SetNumLock(false);
return 0;
}
static int AppExit()
{
SetNumLock(bNumlockStatus);
Replace with this :
// 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 :
static bool bNumlockStatus;
with this :
//static bool bNumlockStatus;
And (you can also delete this part, quote it with // if you want to re-add this function)
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 :
//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;
//}
-
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 :
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)
// 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 ;)
-
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
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 :
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 :
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 :
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);
}
}
-
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)
{
...
}
// 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;
}
-
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 :
int CpsRunInit()
{
nGigawing = 0;
nLagObjectPalettes = 0;
Add this :
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 :
// 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 :
// 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);
-
Here's the thread with gogo's post ;)
http://www.ojko.com/phpbb/viewtopic.php?t=2141
-
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 ???
-
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....
-
:(
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
-
Couldn't you just hold the turbo button down??
-
Couldn't you just hold the turbo button down??
Good idea, I forgot this trick :D
-
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:
BMP_SPLASH BITMAP DISCARDABLE "resource/splash.bmp"
add this after:
BMP_SPLASHSC BITMAP DISCARDABLE "resource/splashsc.bmp"
find
CONTROL "BMP_SPLASH",IDC_STATIC,"Static",SS_BITMAP | SS_REALSIZEIMAGE | SS_SUNKEN,1,1,9999,9999
replace with this:
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
-
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??? :)
-
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:
-
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.
-
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.
-
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)
{"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:
// Find 'M' ROM
FindROMs("m ", &pInfo->nSoundOffset, NULL);
add this after:
// 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
-
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.
-
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
-
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
-
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 :)
-
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.
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.
-
Thanks, and welcome to my forum Treble Winner :) :)
-
Btw, here's how I added that to FBA:
src/burn/capcom/dc_ghouls.cpp
Find:
// 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:
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;
}
-
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
-
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.
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.
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
-
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?
-
Excuse me, anyone have a source of Fbavi to match in FBA v0.2.95.23
Edit:
Thanx i dont need anymore.
-
How to completely disable CRC checking.
SRC/BURNER/BZIP.CPP
find this:
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:
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...
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:
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:
-
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:
int OnNotify(HWND, int, NMHDR* lpnmhdr);
Add this after:
void StretchBitmap(HDC, HWND, HBITMAP);
Find this:
static void OnPaint(HWND hWnd)
{
if (hWnd == hScrnWnd) {...
Add this before:
// 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:
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):
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:
-
Works perfectly on Win2k bro :) I'll test on xp as soon as my other PC is networked again.
-
Excellent thank man!!!
See ya!!!!! :biggrin:
-
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:
static void OnPaint(HWND hWnd)
{
if (hWnd == hScrnWnd) {
// paint and validate client area
VidPaint(1);
Add this Before:
// =================================================================
// 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:
case MENU_LANGUAGE_SELECT:
if (UseDialogs()) {
FBALocaliseLoadTemplate();
POST_INITIALISE_MESSAGE;
}
Add this After:
case MENU_SKIN_SELECT:
if (UseDialogs()) {
FBASkinLoad();
POST_INITIALISE_MESSAGE;
}
In src\interface\interface.h:
Find:
extern TCHAR szPlaceHolder[MAX_PATH];
Add this After:
int FBASkinSelectInit(TCHAR* pszSkin);
int FBASkinLoad();
In src\burner\win32\resource.h:
Find:
#define MENU_LANGUAGE_SELECT 10307
Add this After:
#define MENU_SKIN_SELECT 10309
In src\burner\win32\app.rc:
Find:
MENUITEM "Modeless menu", MENU_MODELESS
Add this After:
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
-
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:
-
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
-
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 ^^
-
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...
// 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!!!
-
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
-
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...
// 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:
// 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:
StretchBlt(hDC, 0, 0, re.right, re.bottom, memDC, 0, 0, 608, 448, SRCCOPY);
to:
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:
-
Almost forgot, this can be added to your Dialog code:
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;
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
-
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
-
Added some attribute coding to the Streching Function i have to ThanX FerchogtX for the
info, with that reference i understood and added this...
// 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
-
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...
static TCHAR* szNoSkin = _T("");
and then this is the new code you posted but edited so it dont give convertion errors...
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
-
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...
static TCHAR* szNoSkin = _T("");
and then this is the new code you posted but edited so it dont give convertion errors...
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:
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:
// 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:
-
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...
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
-
Let me check my src's and see if this can be fixed iun another way...
See ya!!!!
-
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:
#define IDS_SOUND_VOLUMESET (IDS_STRING + 131)
AFTER THAT ADD:
#define IDS_SOUND_MUTE (IDS_STRING + 132)
#define IDS_SOUND_MUTE_OFF (IDS_STRING + 133)
IN BURNER/WIN32/RUN.CPP
FIND:
case VK_OEM_PLUS: {
TCHAR buffer[15];
nAudVolume += 100;
BEFORE THAT ADD:
// '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:
IDS_SOUND_VOLUMESET "volume %03i %%"
AFTER THAT ADD:
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
-
If somebody can make the code work in only one key this would be Great...
IN BURNER/WIN32/RUN.CPP
FIND:
static bool bShowFPS = false;
AFTER THAT ADD:
static bool bMute = false;
FIND:
case VK_OEM_PLUS: {
TCHAR buffer[15];
nAudVolume += 100;
ADD THIS BEFORE:
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......
-
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
-
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
-
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:
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
-
Nice stuff you guys are working on. :) I wonder what you'll come up with next.
-
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.
// 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);
}
-
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....
-
I added a variable "nOldAudVolume" to save current sound volume before mute.
When the sound muted, push Alt+ or Alt- will be no effect.
// '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;
......
}
-
How to completely disable CRC checking.
SRC/BURNER/BZIP.CPP
find this:
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:
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:
#define IDC_SEL_ASCIIONLY 20063
ADD this after
#define IDC_SEL_NOCRC 20130
------
in src\burner\win32\sel.cpp
Find:
#define ASCIIONLY (1 << 19)
ADD this after
#define NOCRC (1 << 20)
Find:
CheckDlgButton(hSelDlg, IDC_SEL_ASCIIONLY, nLoadMenuShowX & ASCIIONLY ? BST_CHECKED : BST_UNCHECKED);
ADD this after
CheckDlgButton(hSelDlg, IDC_SEL_NOCRC, nLoadMenuShowX & NOCRC ? BST_CHECKED : BST_UNCHECKED);
Find:
case IDC_SEL_ASCIIONLY:
nLoadMenuShowX ^= ASCIIONLY;
RebuildEverything();
break;
ADD this after
case IDC_SEL_NOCRC:
nLoadMenuShowX ^= NOCRC;
bRescanRoms = true; //update the game selection screen
CreateROMInfo();
RebuildEverything();
break;
------
in src\burner\bzip.cpp
Find:
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
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:
CONTROL "Use only Latin text",IDC_SEL_ASCIIONLY,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,76,241,100,14
REPLACE with this
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 :
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
-
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:
-
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:
-
Hi,
Changelog of FBA-xxx Pro 1.12
- 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 ^_^
-
// 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;
}
}
-
Thanks :biggrin:
-
// 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
-
I think adding this to MACHINE_RESET( neogeo ) will work
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;
}
}
-
Thanks IQ :D
I put it in the DRIVER INT :) It seems to work there just a few small changes .
/* 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 );
}
}
-
// 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?
-
Yup, that's exactly what it does.
Right after this:
// Load the BIOS ROMs
if (nBIOS >= 0) {
BurnLoadRom(Neo68KBIOS, 0x00080 + nBIOS, 1);
} else {
BurnLoadRom(Neo68KBIOS, 0x00080 + 6, 1);
}
-
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...
IDS_FIRSTRUN1 "This appears to be the first time you run %s v%.20s.\n\n"
Add this before...
IDS_SOUND_TRACK_CHANGE "track 0x0%x"
In src/burner/win32/resource_string.h :
Search for...
#define IDS_ERR_DISK_TOOOLD (IDS_ERROR + 154)
Add this after...
#define IDS_SOUND_TRACK_CHANGE (IDS_STRING + 170)
In src/burner/burner.h :
Search for...
// gami.cpp
extern struct GameInp* GameInp;
add this before...
// run.cpp
extern void NeoZ80Cmd(UINT16 sound_code);
In src/burner/win32/run.cpp :
Search for...
int bRunPause = 0;
int bAltPause = 0;
Add this before...
int nNeoTrack = 0x0720;
int nNeoTrackDef = 0x0720;
Search for...
case 'T': {
if (kNetGame && hwndChat == NULL) {
if (AppMessage(&Msg)) {
ActivateChat();
}
}
break;
}
Add this after...
// 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...
if (nGame >= 0) {
Add this after...
nNeoTrack = 0x0720;
Search for...
case MENU_QUIT:
Add this after...
nNeoTrack = 0x0720;
In src/burn/neogeo/neo_run.cpp :
Search for...
unsigned char NeoReset = 0, NeoSystem = 0;
Add this after...
void NeoZ80Cmd(UINT16 sound_code);
Search for...
unsigned char __fastcall neogeoReadByte(unsigned int sekAddress)
Add this before...
void NeoZ80Cmd(UINT16 sound_code) {
SendSoundCommand(sound_code);
}
In src/burner/win32/burner_win32.h :
Search for...
// run.cpp
Add this after...
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!
-
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:
-
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:
-
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 :)
-
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:
-
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:
-
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:
-
Absolutely fantastic work! I'm glad to see something like this in FBA. :)
-
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:
-
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:
-
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++;
-
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:
-
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:
-
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!
-
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:
-
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:
-
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".
-
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!
-
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?