Author Topic: King of Fighters 10th Anniversary Edition Emulation Infos  (Read 52155 times)

Offline James33

  • Expert
  • *****
  • Posts: 532
  • Karma: +3/-0
  • The Mame Man
    • Emulation Zone
King of Fighters 10th Anniversary Edition Emulation Infos
« Reply #75 on: April 08, 2005, 01:22:50 AM »
Quote from: bms888
Your code is very long, I use pvc code for this game.maybe short.^_^

Code: [Select]

// The King of Fighters 10th Anniversary (bootleg / hack)

static struct BurnRomInfo kof10thRomDesc[] = {
{"kf10-p1.bin",  0x800000, 0xB1FD0C43, 1 | BRF_ESS | BRF_PRG }, //  0 68K code (Is supposed to have the text data)

{"kf10-c1a.bin", 0x400000, 0x3BBC0364, 3 | BRF_GRA }, //  1 Sprite data
{"kf10-c2a.bin", 0x400000, 0x91230075, 3 | BRF_GRA }, //  2
{"kf10-c1b.bin", 0x400000, 0xB5ABFC28, 3 | BRF_GRA }, //  3
{"kf10-c2b.bin", 0x400000, 0x6CC4C6E1, 3 | BRF_GRA }, //  4
{"kf10-c3a.bin", 0x400000, 0x5B3D4A16, 3 | BRF_GRA }, //  5
{"kf10-c4a.bin", 0x400000, 0xC6F3419B, 3 | BRF_GRA }, //  6
{"kf10-c3b.bin", 0x400000, 0x9D2BBA19, 3 | BRF_GRA }, //  7
{"kf10-c4b.bin", 0x400000, 0x5A4050CB, 3 | BRF_GRA }, //  8
{"kf10-c5a.bin", 0x400000, 0xA289D1E1, 3 | BRF_GRA }, //  9
{"kf10-c6a.bin", 0x400000, 0xE6494B5D, 3 | BRF_GRA }, //  10
{"kf10-c5b.bin", 0x400000, 0x404FFF02, 3 | BRF_GRA }, //  11
{"kf10-c6b.bin", 0x400000, 0xF2CCFC9E, 3 | BRF_GRA }, //  12
{"kf10-c7a.bin", 0x400000, 0xBE79C5A8, 3 | BRF_GRA }, //  13
{"kf10-c8a.bin", 0x400000, 0xA5952CA4, 3 | BRF_GRA }, //  14
{"kf10-c7b.bin", 0x400000, 0x3FDB3542, 3 | BRF_GRA }, //  15
{"kf10-c8b.bin", 0x400000, 0x661B7A52, 3 | BRF_GRA }, //  16

  {"kf10-m1.bin",  0x020000, 0xF6FAB859, 4 | BRF_ESS | BRF_PRG }, //  17 Z80 code

{"kf10-v1.bin",  0x800000, 0x0FC9A58D, 5 | BRF_SND }, //  18 Sound data (Decrypted data from kof2002)
{"kf10-v2.bin",  0x800000, 0xB8C475A4, 5 | BRF_SND }, //  19
};

STDROMPICKEXT(kof10th, kof10th, neogeo);
STD_ROM_FN(kof10th);

static void kof10th_decode()
{
int i, j, size = 0x800000;
UINT16 *prom = (UINT16*)Neo68KROM;
UINT16 *buf = (UINT16*)malloc(size);
UINT16 *srom = (UINT16*)NeoTextROM+0x20000;

// HappyASR fixed order
memcpy(buf+0x000000/2, prom+0x600000/2, 0x100000);
memcpy(buf+0x100000/2, prom+0x000000/2, 0x600000);

// Re-order the P data
// memcpy(buf+0x000000/2, prom+0x700000/2, 0x100000);
// memcpy(buf+0x100000/2, prom+0x000000/2, 0x400000);
// memcpy(buf+0x500000/2, prom+0x400000/2, 0x200000);

for (i=0;i j=BITSWAP24(i,23,22,21,20,19,18,17,16,15,14,13,12,11,10,1,8,7,6,0,4,3,2,9,5);
prom[j]=buf[i];
}
free(buf);

  for (i=0;i<0x10000/2;i++) {
  srom[i+0x00000/2]=BITSWAP16(prom[i+0x600000/2]^0xf3f3,7,6,0,4,3,2,1,5,15,14,8,12,11,10,9,13);
  srom[i+0x10000/2]=BITSWAP16(prom[i+0x6d0000/2]^0xf3f3,7,6,0,4,3,2,1,5,15,14,8,12,11,10,9,13);
  }
  for (i=0;i<0x4000/2;i++) {
srom[i+0x02000/2]=BITSWAP16(prom[i+0x6c2000/2]^0xf3f3,7,6,0,4,3,2,1,5,15,14,8,12,11,10,9,13);
srom[i+0x12000/2]=BITSWAP16(prom[i+0x612000/2]^0xf3f3,7,6,0,4,3,2,1,5,15,14,8,12,11,10,9,13);
}
for (i=0;i<0x20000/2;i++) {
srom[i+0x40000/2]=BITSWAP16(prom[i+0x600000/2]^0xf3f3,7,6,0,4,3,2,1,5,15,14,8,12,11,10,9,13);
}

memcpy(NeoTextROM+0x80000, NeoTextROM+0x40000, 0x20000);

for (i=0;i<0x40;i++) {
prom[0xe0000/2+i]=((prom[0x531680/2+i]^(0xc11d-0xc0c8))^prom[0x531600/2+i]);
}
for (i=0;i<0x270;i++) {
prom[0xe1000/2+i]=((prom[0x531970/2+i]^(0xc11d-0xc0d9))^prom[0x531700/2+i]);
}

prom[0x00124/2] = 0x000D; // Run code that gives XOR for RAM moves and forces SoftDIPs
prom[0x00126/2] = 0xF7A8; // (how to play off and always teamplay). Also forces USA region.
prom[0x08bf4/2] = 0x4Ef9; // Run code to change 8x8 tiles (needed for neogeo logo tiles)
prom[0x08bf6/2] = 0x000D;
prom[0x08bf8/2] = 0xF980;
prom[0xe1154/2] = 0x125C;
prom[0xdf986/2] = 0x168C;
prom[0xdf998/2] = 0x1668;
prom[0xdd880/2] = 0x4E75;
prom[0xdd89e/2] = 0x4E75;
prom[0xdd8bc/2] = 0x4E75;
}

// Thanks to HappyASR for the info
void __fastcall kf10thWriteByteBankSwitch(unsigned int sekAddress, unsigned char byteValue)
{
pvc_w8(sekAddress,byteValue);
}

void __fastcall kf10thWriteWordBankSwitch(unsigned int sekAddress, unsigned short wordValue)
{
CartRAM[(sekAddress-0x2fe000)/2]=wordValue;
if(sekAddress==0x2ffff0)
SekMapMemory(Neo68KROM+0x100000+wordValue*0x100000,0x200000,0x2fdfff,SM_ROM);
}

static void kof10thMapHandler()
{
// Install BankSwitch handler
SekMapHandler(5, 0x2fe000, 0x2fffff, SM_READ);
SekSetReadWordHandler(5,  pvcReadWordBankSwitch);
SekSetReadByteHandler(5,  pvcReadByteBankSwitch);

SekMapHandler(5, 0x2fe000, 0x2fffff, SM_WRITE);
SekSetWriteWordHandler(5, kf10thWriteWordBankSwitch);
SekSetWriteByteHandler(5, kf10thWriteByteBankSwitch);
}

static int kof10thInit()
{
int nRet;

memset(CartRAM,0,sizeof(CartRAM));

pNeoInitCallback = kof10th_decode;
nNeoTextROMSize = 0x080000; // minor glitches in Neo-Geo logo texts

nRet = NeoInit();
if (nRet == 0) {
kof10thMapHandler();
}
return nRet;
}

struct BurnDriver BurnDrvkof10th = {
"kof10th", "kof2002", "neogeo", "2004",
"The King of Fighters 10th Anniversary (hack)\0", "Hack of \"The King of Fighters 2002\"", "SNK Playmore", "Neo Geo",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_BOOTLEG, 2, HARDWARE_SNK_NEOGEO | HARDWARE_SNK_CUSTOM_BANKING,
NULL, kof10thRomInfo, kof10thRomName, neogeoInputInfo, neogeoDIPInfo,
kof10thInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
nNeoScreenWidth, 224, 4, 3
};



I think what matters most is which is correct .
IQ Forum Member

Offline Xeon

  • Newbies
  • *
  • Posts: 45
  • Karma: +0/-0
  • Member
King of Fighters 10th Anniversary Edition Emulation Infos
« Reply #76 on: April 08, 2005, 09:02:07 AM »
Quote from: FerchogtX
What diff? game play?, hidden moves or what?  :eek:
See ya!!!!! :D

 heres some of the ingame differences i found using bms's P re-ordering code:

the second Kensou has a different fireball attack (along with a different "hit" animation)
the second Ralf, the HCF+K throw move ends differently (which seems weaker as well).
the second K' - has a punch follow-up to his QCF+P move (just press F+P)

probably more but seems mostly related on the moves of the "clone" characters. the code you posted probably brings us what Kawaks can do, and bms's code probably brings to what the real arcade probably did. either ways, thanks all :)

Offline James33

  • Expert
  • *****
  • Posts: 532
  • Karma: +3/-0
  • The Mame Man
    • Emulation Zone
King of Fighters 10th Anniversary Edition Emulation Infos
« Reply #77 on: April 08, 2005, 09:48:25 AM »
So whats the best code for mame on loading the P rom ?
IQ Forum Member

Offline FerchogtX

  • FBNeo Dev
  • ******
  • Posts: 375
  • Karma: +7/-0
  • FB Alpha Team ;)
    • FB Alpha Plus! Web Site
King of Fighters 10th Anniversary Edition Emulation Infos
« Reply #78 on: April 08, 2005, 08:47:16 PM »
Well, the bms code does the same as the one I posted, in adittion to that I talked to some guy ho told me that the real bankswitch is the one I'm using (that was sorted and fixed by IQ_132), kof10th doesn't use PVC bankswitches, and it needs maybe an extra bitswap (like kof2k3up) to enable all that missing features, also Iori has diferent moves...
See ya!!!! :D

Good and evil co-exist because of the balance, lies are not part of it...

FB Alpha Plus! site infos updated, see the latest info clicking on my profile link...

Offline Death Metal

  • Member
  • ***
  • Posts: 121
  • Karma: +3/-0
  • Crimson Blade
King of Fighters 10th Anniversary Edition Emulation Infos
« Reply #79 on: April 08, 2005, 11:26:40 PM »
Do you know of the needed code, Ferch?

Anyway, thanks a lot both of you for what has been posted. ;)

Offline FerchogtX

  • FBNeo Dev
  • ******
  • Posts: 375
  • Karma: +7/-0
  • FB Alpha Team ;)
    • FB Alpha Plus! Web Site
King of Fighters 10th Anniversary Edition Emulation Infos
« Reply #80 on: April 09, 2005, 12:52:29 AM »
Quote from: Death Metal
Do you know of the needed code, Ferch?

Anyway, thanks a lot both of you for what has been posted. ;)

By know I just know that we are missing either patches or bitswap to enable the hidden features, unfortunately the exact code only Razoola Knows it (maybe...) surely the multiarcade bootleggers know the code.
See ya!!! :D

Good and evil co-exist because of the balance, lies are not part of it...

FB Alpha Plus! site infos updated, see the latest info clicking on my profile link...

Offline neo04

  • Jr. Member
  • **
  • Posts: 90
  • Karma: +1/-0
King of Fighters 10th Anniversary Edition Emulation Infos
« Reply #81 on: April 09, 2005, 02:25:40 AM »
what are those hidden features anyway? :)

Offline FerchogtX

  • FBNeo Dev
  • ******
  • Posts: 375
  • Karma: +7/-0
  • FB Alpha Team ;)
    • FB Alpha Plus! Web Site
King of Fighters 10th Anniversary Edition Emulation Infos
« Reply #82 on: April 10, 2005, 06:19:37 AM »
Tested:
Code: [Select]
// Re-order the P data
        memcpy(buf+0x000000/2, prom+0x600000/2, 0x100000);
        memcpy(buf+0x100000/2, prom+0x000000/2, 0x600000);
This enables the changed moves for most charas (at least the clones)
BTW... bms, have you found a way to fix that bug you mention in FBA?
See ya!!!!! :D
« Last Edit: May 10, 2005, 12:30:06 PM by iq_132 »

Good and evil co-exist because of the balance, lies are not part of it...

FB Alpha Plus! site infos updated, see the latest info clicking on my profile link...

Offline Death Metal

  • Member
  • ***
  • Posts: 121
  • Karma: +3/-0
  • Crimson Blade
King of Fighters 10th Anniversary Edition Emulation Infos
« Reply #83 on: April 10, 2005, 02:13:00 PM »
Quote from: FerchogtX
Tested:
Code: [Select]
// Re-order the P data
        memcpy(buf+0x000000/2, prom+0x600000/2, 0x100000);
        memcpy(buf+0x100000/2, prom+0x000000/2, 0x600000);
Asinine question, but where would you insert that? :p
« Last Edit: May 10, 2005, 12:30:16 PM by iq_132 »

Offline James33

  • Expert
  • *****
  • Posts: 532
  • Karma: +3/-0
  • The Mame Man
    • Emulation Zone
King of Fighters 10th Anniversary Edition Emulation Infos
« Reply #84 on: April 10, 2005, 06:27:40 PM »
Quote from: Death Metal
Asinine question, but where would you insert that? :p




Look at FerchogtX driver You will see where it goes .
IQ Forum Member

Offline FerchogtX

  • FBNeo Dev
  • ******
  • Posts: 375
  • Karma: +7/-0
  • FB Alpha Team ;)
    • FB Alpha Plus! Web Site
King of Fighters 10th Anniversary Edition Emulation Infos
« Reply #85 on: April 10, 2005, 07:00:11 PM »
Complete new driver with all changed moves enabled, no bugs found
Code: [Select]
// The King of Fighters 10th Anniversary (bootleg / hack)

static struct BurnRomInfo kof10thRomDesc[] = {
{ "kf10-p1.bin",  0x800000, 0xB1FD0C43, 1 | BRF_ESS | BRF_PRG }, //  0 68K code (Is supposed to have the text data)

{ "kf10-c1a.bin", 0x400000, 0x3BBC0364, 3 | BRF_GRA }, //  1 Sprite data
{ "kf10-c2a.bin", 0x400000, 0x91230075, 3 | BRF_GRA }, //  2
{ "kf10-c1b.bin", 0x400000, 0xB5ABFC28, 3 | BRF_GRA }, //  3
{ "kf10-c2b.bin", 0x400000, 0x6CC4C6E1, 3 | BRF_GRA }, //  4
{ "kf10-c3a.bin", 0x400000, 0x5B3D4A16, 3 | BRF_GRA }, //  5
{ "kf10-c4a.bin", 0x400000, 0xC6F3419B, 3 | BRF_GRA }, //  6
{ "kf10-c3b.bin", 0x400000, 0x9D2BBA19, 3 | BRF_GRA }, //  7
{ "kf10-c4b.bin", 0x400000, 0x5A4050CB, 3 | BRF_GRA }, //  8
{ "kf10-c5a.bin", 0x400000, 0xA289D1E1, 3 | BRF_GRA }, //  9
{ "kf10-c6a.bin", 0x400000, 0xE6494B5D, 3 | BRF_GRA }, //  10
{ "kf10-c5b.bin", 0x400000, 0x404FFF02, 3 | BRF_GRA }, //  11
{ "kf10-c6b.bin", 0x400000, 0xF2CCFC9E, 3 | BRF_GRA }, //  12
{ "kf10-c7a.bin", 0x400000, 0xBE79C5A8, 3 | BRF_GRA }, //  13
{ "kf10-c8a.bin", 0x400000, 0xA5952CA4, 3 | BRF_GRA }, //  14
{ "kf10-c7b.bin", 0x400000, 0x3FDB3542, 3 | BRF_GRA }, //  15
{ "kf10-c8b.bin", 0x400000, 0x661B7A52, 3 | BRF_GRA }, //  16

   { "kf10-m1.bin",  0x020000, 0xF6FAB859, 4 | BRF_ESS | BRF_PRG }, //  17 Z80 code

{ "kf10-v1.bin",  0x800000, 0x0FC9A58D, 5 | BRF_SND }, //  18 Sound data (Decrypted data from kof2002)
{ "kf10-v2.bin",  0x800000, 0xB8C475A4, 5 | BRF_SND }, //  19
};

STDROMPICKEXT(kof10th, kof10th, neogeo);
STD_ROM_FN(kof10th);

// Thanks to IQ_132 for the whole help and drivers
// Thanks to BDiamond for this code
// This is essentially the standard Neo-Geo bankswitch
static void kof10thBankswitch(unsigned int nBank)
{
nBank = 0x100000 + ((nBank & 7) << 20);
if (nBank >= 0x700000) {
nBank = 0x100000;
}
if (nBank != nNeo68KROMBank) {
nNeo68KROMBank = nBank;
SekMapMemory(Neo68KROM + nNeo68KROMBank, 0x200000, 0x2FDFFF, SM_ROM);
}
}

void __fastcall kof10thWriteByteBankswitch(unsigned int sekAddress, unsigned char byteValue)
{
if (sekAddress >= 0x2FFFF0) {
kof10thBankswitch(byteValue);
return;
}
}

void __fastcall kof10thWriteWordBankswitch(unsigned int sekAddress, unsigned short wordValue)
{
if (sekAddress >= 0x2FFFF0) {
kof10thBankswitch(wordValue);
return;
}
}

// Thanks to IQ_132 - http://neosource.1emu.net/
static void kof10thDecrypt()
{
int i,j;
unsigned short *prom = (unsigned short*)Neo68KROM;
unsigned short *buf = (unsigned short*)malloc(0x800000);
unsigned short *srom = (unsigned short*)NeoTextROM + 0x20000;

// Re-order the P data
        memcpy(buf+0x000000/2, prom+0x600000/2, 0x100000);
        memcpy(buf+0x100000/2, prom+0x000000/2, 0x600000);

// decrypt all of the P data
for(i=0;i<0x800000/2;i++) {
j=BITSWAP24(i,23,22,21,20,19,18,17,16,15,14,13,12,11,10,1,8,7,6,0,4,3,2,9,5);
prom[j]=buf[i];
}
free(buf);

  // get 8x8 tiles from P rom, game does this on the fly!
  // bank 1
  for (i=0;i<0x10000/2;i++) {
  srom[i+0x00000/2]=BITSWAP16(prom[i+0x600000/2]^0xf3f3,7,6,0,4,3,2,1,5,15,14,8,12,11,10,9,13);
  srom[i+0x10000/2]=BITSWAP16(prom[i+0x6d0000/2]^0xf3f3,7,6,0,4,3,2,1,5,15,14,8,12,11,10,9,13);
  }
  for (i=0;i<0x4000/2;i++) {
srom[i+0x02000/2]=BITSWAP16(prom[i+0x6c2000/2]^0xf3f3,7,6,0,4,3,2,1,5,15,14,8,12,11,10,9,13);
srom[i+0x12000/2]=BITSWAP16(prom[i+0x612000/2]^0xf3f3,7,6,0,4,3,2,1,5,15,14,8,12,11,10,9,13);
}
// bank 2
for (i=0;i<0x20000/2;i++) {
srom[i+0x40000/2]=BITSWAP16(prom[i+0x600000/2]^0xf3f3,7,6,0,4,3,2,1,5,15,14,8,12,11,10,9,13);
}

memcpy(NeoTextROM+0x80000, NeoTextROM+0x40000, 0x20000);

// Altera protection chip patches these over P ROM
prom[0x00124/2] = 0x000d; // Run code that gives XOR for RAM moves and forces SoftDIPs
prom[0x00126/2] = 0xf7a8; // (how to play off and always teamplay). Also forces USA region.
prom[0x08bf4/2] = 0x4ef9; // Run code to change 8x8 tiles (needed for neogeo logo tiles)
prom[0x08bf6/2] = 0x000d;
prom[0x08bf8/2] = 0xf980;

// remove protection (game has ram mapped to 0xe0000 and 0xf0000 and moves code into it)
for(i=0;i<0x40;i++)
prom[0xe0000/2+i]=((prom[0x531680/2+i]^(0xc11d-0xc0c8))^prom[0x531600/2+i]);
for(i=0;i<0x270;i++)
prom[0xe1000/2+i]=((prom[0x531970/2+i]^(0xc11d-0xc0d9))^prom[0x531700/2+i]);

prom[0xe1154/2] = 0x125c; // fix a jmp offset (was in 0xe0000 range)
prom[0xdf986/2] = 0x168C; // fix a bsr offset (was in 0xe0000 range)
prom[0xdf998/2] = 0x1668; // fix a bsr offset (was in 0xe0000 range)
prom[0xdd880/2] = 0x4e75; // fix level drawing   (from 0xf0000 range)
prom[0xdd89e/2] = 0x4e75; // fix level anim      (from 0xf0000 range)
prom[0xdd8bc/2] = 0x4e75; // fix continue screen (from 0xf0000 range)
}

// Blank P-ROM bank in the following address (similar to cthd2003)
void Neokof10thMapBank()
{
SekMapMemory(Neo68KROM + nNeo68KROMBank, 0x200000, 0x2FDFFF, SM_ROM);
}

static int kof10thInit()
{
int nRet;

pNeoInitCallback = kof10thDecrypt;
pNeoBankswitchCallback = Neokof10thMapBank;
nNeoTextROMSize = 0x080000; // minor glitches in Neo-Geo logo texts

nRet = NeoInit();
if (nRet == 0) {
SekOpen(0);
// Extra RAM
SekMapMemory(Neo68KROM+0x700000, 0x2fe000, 0x2fffff, SM_RAM);

// Bankswitch handler
SekMapHandler(4, 0x2ffff0, 0x2fffff, SM_WRITE);
SekSetWriteWordHandler(4, kof10thWriteWordBankswitch);
SekSetWriteByteHandler(4, kof10thWriteByteBankswitch);

kof10thBankswitch(0);

SekClose();
}
return nRet;
}

struct BurnDriver BurnDrvkof10th = {
"kof10th", "kof2002", "neogeo", "2004",
"The King of Fighters 10th Anniversary - all team battle\0", "Hack of \"The King of Fighters 2002\"", "SNK Playmore / Winter", "Neo Geo",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_BOOTLEG, 2, HARDWARE_SNK_NEOGEO,
NULL, kof10thRomInfo, kof10thRomName, neogeoInputInfo, neogeoDIPInfo,
kof10thInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
nNeoScreenWidth, 224, 4, 3
};
See ya!!!!!! :D
« Last Edit: May 10, 2005, 12:30:27 PM by iq_132 »

Good and evil co-exist because of the balance, lies are not part of it...

FB Alpha Plus! site infos updated, see the latest info clicking on my profile link...

Offline Death Metal

  • Member
  • ***
  • Posts: 121
  • Karma: +3/-0
  • Crimson Blade
King of Fighters 10th Anniversary Edition Emulation Infos
« Reply #86 on: April 10, 2005, 07:53:05 PM »
That's great Ferch! Thanks so much for one more update.

EDIT: The moves did change! :)

Offline iq_132

  • Administrator
  • *****
  • Posts: 3724
  • Karma: +411/-0
  • Definitely not Dink!
    • NeoSource
King of Fighters 10th Anniversary Edition Emulation Infos
« Reply #87 on: April 12, 2005, 04:53:27 PM »
Here is BDiamond's driver :)


Offline Shoometsu

  • Jr. Member
  • **
  • Posts: 66
  • Karma: +0/-0
  • I finally have an avatar XD
King of Fighters 10th Anniversary Edition Emulation Infos
« Reply #88 on: April 12, 2005, 09:07:46 PM »
Quote from: iq_132
Here is BDiamond's driver :)


in this driver there are not extra moves to iori, kensou, terry, etc, all of them are "normal" like in kof2002.... T_T
<- Who are you?

Offline FerchogtX

  • FBNeo Dev
  • ******
  • Posts: 375
  • Karma: +7/-0
  • FB Alpha Team ;)
    • FB Alpha Plus! Web Site
King of Fighters 10th Anniversary Edition Emulation Infos
« Reply #89 on: April 13, 2005, 01:18:31 AM »
IQ... where to call this?
Code: [Select]
void NeoUpdateTextOne(int nOffset, const unsigned char byteValue);This line goes also in neorun.cpp or we have to add the driver exactly as it is in the TXT? just this doubt here XD
See ya!!!!!! :D
P.D. Thanks BDiamond!!!!!!!!
« Last Edit: May 10, 2005, 12:30:47 PM by iq_132 »

Good and evil co-exist because of the balance, lies are not part of it...

FB Alpha Plus! site infos updated, see the latest info clicking on my profile link...