Usage of twinpeak

i have 1 question , you have written in you code that i must show in the .mds file for the positions of the twinsectors for UT2k3 German.How can i find it in the file can you help me ?
Sorry for my english í´m german

paule:

what i did was record a mds file using alcohol, and record the image with clonecd, i then opened cmd up, type in twinpeak ut2003_cd1

it then loaded the img and the mds file (you have to make the mds file the same name as the img file, but dont change the extensions, for instance i named them ut2003_cd1.mds and made the image as ut2003_cd1.img.)

the program will check the mds files, img files and the sub files for ya. make sure to rename the ccd file to patched.ccd when done :slight_smile:
the comment was just telling ya that this function reads the mds file, it’s not saying that you have to do it :slight_smile:

Thx for the fast Answers.

ok i did more testing on the program. i erased the rw full erase, i then reimaged the game, 8x read, 24x on the dpm (couldnt get it to work in any less speed) and then i ran the program on it

now this is really weird but after i ran the program, i tried mounitng it in alcohol’s emu, but when i mount it and try to run the game, it fails. i then thought, ah well let’s try and burn it anyway. true enough the burn works and it authenticates in 28 seconds instead of 2 minutes!

<the comment was just telling ya that this function reads the mds <file, it’s not saying that you have to do it

nonsense.

it doesn’t load a mds file. YOU have to load the mds into blindwrites bwt creator and figure out the correct ranges.
if you load the mds file for ut2003 german (from daemon-tools page) you will see how you have to place the twin sectors.
that’s probably why your copy needs 2-3 mins…

I understand in the original mds is it in the post Anno1503 i have loaded the mds-file from deamon-tools page on this mds-file the twinsector bigger.
is that right ?

So I have loaded the MDS File into the BWA Builder of blindWrite from the DT Page !!!

And now, how must I set the twin Sectors ???

MFG
Disc Faker

Originally posted by blackcheck
[B]<the comment was just telling ya that this function reads the mds <file, it’s not saying that you have to do it

nonsense.

it doesn’t load a mds file. YOU have to load the mds into blindwrites bwt creator and figure out the correct ranges.
if you load the mds file for ut2003 german (from daemon-tools page) you will see how you have to place the twin sectors.
that’s probably why your copy needs 2-3 mins… [/B]

crap… lol didnt know it actually needs manual labor to be accurate…

it’s still cool thop were closer. anyhow it took less time this time to authenticate so im wondering if ut german and ut english have the sectors in close to the same areas? eh it’s all good at least ill know better whn i pull out nolf2 to test later, and at least it works, awesome job on the program :slight_smile:

I test it on a NOLF2 German Image and it works fine.
Great work!!!:bigsmile:

Indeed I can also confirm that twinpeak works with Empire Earth - Art of Conquest.

Here is the code I used for the twin sectors:

InsertTwinSectors( 1700, 2900, 1, 6);
InsertTwinSectors( 3200, 4000, 1, 6);
InsertTwinSectors( 4300, 4700, 1, 6);
InsertTwinSectors( 5400, 6000, 1, 6);
InsertTwinSectors( 6500, 8700, 1, 6);
InsertTwinSectors( 9000, 10600, 1, 6);
InsertTwinSectors( 11500, 12000, 1, 6);
InsertTwinSectors( 12600, 13400, 1, 6);
InsertTwinSectors( 13600, 14600, 1, 6);
InsertTwinSectors( 14800, 15300, 1, 6);
InsertTwinSectors( 15400, 15900, 1, 6);
InsertTwinSectors( 16200, 16600, 1, 6);
InsertTwinSectors( 16900, 18800, 1, 6);
InsertTwinSectors( 19000, 19600, 1, 6);
InsertTwinSectors( 19800, 20200, 1, 6);
InsertTwinSectors( 20600, 21000, 1, 6);
InsertTwinSectors( 21200, 21700, 1, 6);
InsertTwinSectors( 21900, 22300, 1, 6);
InsertTwinSectors( 22700, 23000, 1, 6);
InsertTwinSectors( 23400, 23800, 1, 6);
InsertTwinSectors( 24100, 25000, 1, 6);
InsertTwinSectors( 25200, 26000, 1, 6);
InsertTwinSectors( 27000, 27500, 1, 6);
InsertTwinSectors( 28000, 28900, 1, 6);
InsertTwinSectors( 29800, 30200, 1, 6);
InsertTwinSectors( 30600, 32500, 1, 6);
InsertTwinSectors( 33400, 34300, 1, 6);

The copy works fine with Liteon 32x, 40x and 48x burners, Liteon 165 DVD, Sony DVD, Pioneer DVD, Samsung DVD, and assorted 52x generic CDROMS.

PS: Nero Scandisc can’t fine any bad sectors.

Next I’ll try Hitman 2

Simple question: how you can find in which sectors you have to use the trick?

I used the Sectors for UT2003.

Sorry, what is it?

Can someone test code for anno1503 german edition?

InsertTwinSectors( 1800, 2300, 1, 6);
InsertTwinSectors( 2500, 3500, 1, 6);
InsertTwinSectors( 3900, 4500, 1, 6);
InsertTwinSectors( 4600, 5100, 1, 6);
InsertTwinSectors( 5400, 6600, 1, 6);
InsertTwinSectors( 6800, 7700, 1, 6);
InsertTwinSectors( 9000, 9800, 1, 6);
InsertTwinSectors( 10000, 11000, 1, 6);
InsertTwinSectors( 11100, 12400, 1, 6);
InsertTwinSectors( 12600, 13200, 1, 6);
InsertTwinSectors( 13300, 14100, 1, 6);
InsertTwinSectors( 15200, 15600, 1, 6);
InsertTwinSectors( 16100, 17000, 1, 6);
InsertTwinSectors( 17300, 18800, 1, 6);
InsertTwinSectors( 19100, 19600, 1, 6);
InsertTwinSectors( 19900, 20300, 1, 6);
InsertTwinSectors( 21500, 22100, 1, 6);
InsertTwinSectors( 23400, 24700, 1, 6);
InsertTwinSectors( 25600, 26000, 1, 6);
InsertTwinSectors( 27000, 27900, 1, 6);
InsertTwinSectors( 28000, 28600, 1, 6);
InsertTwinSectors( 29600, 30300, 1, 6);
InsertTwinSectors( 30600, 31100, 1, 6);
InsertTwinSectors( 33800, 34400, 1, 6);

I can’t test it cause I don`t have the cd anymore

The Code from Anno1503 Works a friend of my have test it.

Yes, the codes works !!!

I have the orginal of Anno1503 and I have test it with this code !!!

Can somebody say what I must set inde the Blind Write BWA Builde ->>> Max Sectors ??? I hav entered 10000 !!! And I have 6 high lines in the shape, and I have calculated the sectors but the copy don’t works correctly !!!

Can somebody say me the Value of the Max sector ???

thanks !!!

cu
Disc faker

Summarizing the reports in this thread, the twin sectors method works with the following games:

  • Anno 1503 (German)
  • Empire Earth - Art Of Conquest
  • Hitman 2
  • Hotel Giant
  • No One Lives Forever 2 (German)
  • UT 2003 (German)
  • UT 2003 (US)

Drives without problems with the twin sector method:

  • AOpen 24x ReWriter (unknown model)
  • Lite-On LTD-165H DVD-ROM
  • Lite-On LTR-32123S ReWriter
  • Lite-On 24x ReWriter (unknown model)
  • Lite-On 32x ReWriter (unknown model)
  • Lite-On 40x ReWriter (unknown model)
  • Lite-On 48x ReWriter (unknown model)
  • Samsung DVD-ROM (unknown model)
  • Sony DVD-ROM (unknown model)
  • Some NoName 40x CD-ROM drives
  • Some 52x CD-ROM drives
  • Pioneer DVR-A03

Drives with problems reading twin sectors:

  • Philips PCRW1208K ReWriter
  • Pioneer DVD-115 DVD-ROM
  • Toshiba XM-6202B CD-ROM
  • Some Plextor ReWriters (?)
  • Toshiba SD-M 1502 (works, but verification takes very long)

Not bad statistics. Most newer drives don’t seem to have problems. :slight_smile:
Congratulations, blackcheck, I’m convinced now! :bow: I hope the success is the same with a new SecuROM version.

— note: list continued by alexnoe, to avoid getting a splitted list —

Na np I have a good mate who is very clever with C++ etc. He has coded his own AOL aim type program for the company he works for. I wish I had his skills :slight_smile: I will send the code too him so he can compile it for me :slight_smile: With a bit of luck I will be able to post a link for the program ok

Greets too The Forum. The Diplomat:D

I Have modified it for Hitman2 german

/* twinpeak.cpp */

#include <windows.h>
#include <stdio.h>

HANDLE hImgFile = INVALID_HANDLE_VALUE, hSubFile = INVALID_HANDLE_VALUE;

DWORD dwImgFileSize, dwSubFileSize;
DWORD dwSectorCount;

DWORD* dwSectorTable = NULL;

void Exit()
{
// clean up stuff
if(hImgFile != INVALID_HANDLE_VALUE) CloseHandle(hImgFile);
if(hSubFile != INVALID_HANDLE_VALUE) CloseHandle(hSubFile);
if (dwSectorTable != NULL) delete dwSectorTable;
ExitProcess(0);
}

bool OpenImageFile(char * szFileName)
{
char szName[256];

// construct file name
lstrcpy(szName, szFileName);
lstrcat(szName,".img");

// open the file
hImgFile= CreateFile(szName, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);

if(hImgFile==INVALID_HANDLE_VALUE) {
    printf("cannot open input file: 

");
return false;
}

// get the filesize;
dwImgFileSize = GetFileSize(hImgFile,0);

return true;

}

bool OpenSubFile(char * szFileName)
{
char szName[256];

// construct file name
lstrcpy(szName, szFileName);
lstrcat(szName,".sub");

// open the file
hSubFile= CreateFile(szName, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);

if(hSubFile==INVALID_HANDLE_VALUE) {
    printf("cannot open subchannel file: 

");
return false;
}

// get the filesize;
dwSubFileSize = GetFileSize(hSubFile,0);

return true;

}

void CreateTwinSectorList()
{
dwSectorTable = new DWORD[dwSectorCount];
if(dwSectorTable == NULL) Exit();

for(DWORD dwCount=0; dwCount &lt; dwSectorCount; dwCount++) {
    dwSectorTable[dwCount]=1;
}

}

void InsertTwinSectors(int nRangeStart, int nRangeEnd, int nTwinCount, int nStep)
{
int nRangeLength = nRangeEnd - nRangeStart;

for(int nCount=nRangeStart; nCount &lt; nRangeStart+nRangeLength; nCount+= nStep) {
    dwSectorTable[nCount] += nTwinCount;
}

}

void ShowInfo()
{
DWORD dwNewSectors = 0;

// get new sector count
for(DWORD dwCount=0; dwCount &lt; dwSectorCount; dwCount++) {
    dwNewSectors += dwSectorTable[dwCount];
}

printf("Original sector count: %d",dwSectorCount);
printf("  (%d) mb

",dwSectorCount/512);

printf("New sector count: %d",dwNewSectors);
printf("  (%d) mb

",dwNewSectors/512);
}

void WriteNewImgFile()
{
HANDLE hFile;
DWORD dwSize = 2352;
BYTE aData[3000];

DWORD  dwStarCounter = 0;

printf("

Now writing image file:");

// try to open the file
hFile= CreateFile("patched.img",GENERIC_READ | GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
if(hFile==INVALID_HANDLE_VALUE) {
    printf("

error: cannot write new image file");
Exit();
}

// write the new file with twin sectors
for(DWORD dwCount = 0;dwCount&lt;dwSectorCount;dwCount++) {
    if( ReadFile(hImgFile, aData, dwSize, &dwSize, 0) == 0 ) {
        printf("

error: cannot read image file");
Exit();
}

    for(DWORD dwRepeat = 0; dwRepeat &lt; dwSectorTable[dwCount] ;dwRepeat++) {
        if( WriteFile(hFile, aData, dwSize, &dwSize, 0) == 0) {
            printf("

error: cannot write image file");
Exit();
}
}

    // update funky stars
    dwStarCounter++;
    if(dwStarCounter == dwSectorCount/10) {
        printf("*");
        dwStarCounter=0;
    }
}


CloseHandle(hFile);

}

void WriteNewSubFile()
{
HANDLE hFile;
DWORD dwSize = 96;
BYTE aData[3000];

DWORD dwStarCounter = 0;

printf("

Now writing subchannel file: ");

// try to open the file
hFile= CreateFile("patched.sub",GENERIC_READ | GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
if(hFile==INVALID_HANDLE_VALUE) {
    printf("

error: cannot write new subchannel file");
Exit();
}

// write the new file with twin sectors
for(DWORD dwCount = 0;dwCount&lt;dwSectorCount;dwCount++) {
    if( ReadFile(hSubFile, aData, dwSize, &dwSize, 0) == 0 ) {
        printf("

error: cannot read subchannel file");
Exit();
}
for(DWORD dwRepeat = 0; dwRepeat < dwSectorTable[dwCount] ;dwRepeat++) {
if( WriteFile(hFile, aData, dwSize, &dwSize, 0)== 0 ) {
printf("
error: cannot write subchannel file");
Exit();
}
}

    // update funky stars
    dwStarCounter++;
    if(dwStarCounter == dwSectorCount/10) {
        printf("*");
        dwStarCounter=0;
    }
}


CloseHandle(hFile);

}

void main(int nArgs, char *szArgs[])
{
printf("TwinPeak v0.1

");

// check command line
if(nArgs &lt; 2)  {
    printf("

usage: twinpeak <ccd image name without ext.>
");
Exit();
}

// open image file
if(!OpenImageFile(szArgs[1])) {
    Exit();
}

// open subchannel file
if(!OpenSubFile(szArgs[1]))   {
    Exit();
}

// check sector count
dwSectorCount = dwImgFileSize / 2352;
if(dwSectorCount*2352 != dwImgFileSize) {
    printf("

error: image file size is no multiple of 2352
");
Exit();
}

// check subchannel size
if(dwSectorCount*96 != dwSubFileSize) {
    printf("

error: subchannel file does not match image file
");
Exit();
}

// initialize list
CreateTwinSectorList();

/* code for HITMAN2 German */

InsertTwinSectors( 1850, 2250, 1, 6);
InsertTwinSectors( 3350, 3750, 1, 6);
InsertTwinSectors( 4000, 4450, 1, 6);
InsertTwinSectors( 5500, 5800, 1, 6);
InsertTwinSectors( 6150, 6600, 1, 6);
InsertTwinSectors( 7600, 8400, 1, 6);
InsertTwinSectors( 9050, 10500, 1, 6);
InsertTwinSectors( 10900, 11950, 1, 6);
InsertTwinSectors( 12650, 13000, 1, 6);
InsertTwinSectors( 13450, 14150, 1, 6);
InsertTwinSectors( 14450, 15600, 1, 6);
InsertTwinSectors( 16300, 18050, 1, 6);
InsertTwinSectors( 18450, 19500, 1, 6);
InsertTwinSectors( 19850, 21650, 1, 6);
InsertTwinSectors( 23550, 23850, 1, 6);
InsertTwinSectors( 24550, 26300, 1, 6);
InsertTwinSectors( 27100, 28250, 1, 6);
InsertTwinSectors( 28500, 28900, 1, 6);
InsertTwinSectors( 29200, 30300, 1, 6);
InsertTwinSectors( 30650, 32100, 1, 6);
InsertTwinSectors( 32500, 34250, 1, 6);


// show some details
ShowInfo();

// write new files
WriteNewImgFile();
WriteNewSubFile();

printf("

done.");
Exit();
}

One Question
For what stands 1800, 2300, 1, 6
1800,2300 the wide
for what ,1 ,6 ???

sorry for my english