// User patch for CD-ROM CLASSICS GOLD EDITION of Privateer and Righteous
// Fire.
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
FILE *FP;
int i;
long FileEnd;
void main (void)
{
cprintf("\r\nChecking the TRE files for Privateer and Righteous Fire ...\r\n");
// Check the two TRE files
// Open PRIV.TRE, display an error and exit if the file is not found
if ((FP=fopen("PRIV.TRE","r+b"))==NULL)
{
cprintf("\a\r\nMISSING PRIV.TRE");
fcloseall();
exit(0);
}
// Determine how many bytes are in the file
fseek(FP,0L,SEEK_END);
FileEnd=ftell(FP);
// Check the file size, abort if incorrect
if (FileEnd!=89486108L)
{
cprintf("\a\r\nPRIV.TRE MUST BE 89,486,108 BYTES IN LENGTH");
fcloseall();
exit (0);
}
// close the file
fclose (FP);
// Open RF.TRE, display an error and exit if the file is not found
if ((FP=fopen("RF.TRE","r+b"))==NULL)
{
cprintf("\a\r\nMISSING RF.TRE");
fcloseall();
exit(0);
}
// Determine how many bytes are in the file
fseek(FP,0L,SEEK_END);
FileEnd=ftell(FP);
// Check the file size, abort if incorrect
if (FileEnd!=72960246L)
{
cprintf("\a\r\nRF.TRE MUST BE 72,960,246 BYTES IN LENGTH");
fcloseall();
exit (0);
}
// Close the file
fclose (FP);
// disable asteroids in Privateer
cprintf("\r\nDisabling 40 of the 46 asteroid fields in Privateer ...\r\n");
// Open PRIV.TRE for modifications
if ((FP=fopen("PRIV.TRE","r+b"))==NULL)
{
cprintf("\a\r\nERROR in opening PRIV.TRE");
fcloseall();
exit(0);
}
fseek(FP,0x0069F537L,SEEK_SET); // 17-AR N2
fputc(0,FP);
fseek(FP,0x006A1CEDL,SEEK_SET); // BP Alpha N2
fputc(0,FP);
fseek(FP,0x006A2D99L,SEEK_SET); // BP Tango N2
fputc(0,FP);
fseek(FP,0x006A2DD1L,SEEK_SET); // BP Tango N4
fputc(0,FP);
fseek(FP,0x006A35DBL,SEEK_SET); // Capella N2 Drake Pirate Base
fputc(0,FP);
fseek(FP,0x006A4C9FL,SEEK_SET); // Crab-12 Hidden
fputc(0,FP);
fseek(FP,0x006A6133L,SEEK_SET); // Famine N4
fputc(0,FP);
fseek(FP,0x006B2543L,SEEK_SET); // Nexus N3 Macabee Mining Base
fputc(0,FP);
fseek(FP,0x006B30D3L,SEEK_SET); // Nitir N3
fputc(0,FP);
fseek(FP,0x006B4E43L,SEEK_SET); // Palan N2
fputc(0,FP);
fseek(FP,0x006B5695L,SEEK_SET); // Pender's Star N2
fputc(0,FP);
fseek(FP,0x006B5CD5L,SEEK_SET); // Pentonville N1 Oakham Pirate Base
fputc(0,FP);
fseek(FP,0x006B73E5L,SEEK_SET); // Pestilence N2
fputc(0,FP);
fseek(FP,0x006B837BL,SEEK_SET); // Prasepe N3 Saratov Mining Base
fputc(0,FP);
fseek(FP,0x006B8FE3L,SEEK_SET); // Pyrenees N6 Basque Mining Base
fputc(0,FP);
fseek(FP,0x006B98B3L,SEEK_SET); // Ragnarok N1 jump to BP Alpha
fputc(0,FP);
fseek(FP,0x006B98F5L,SEEK_SET); // Ragnarok N3 Mjolnar Agri Planet
fputc(0,FP);
fseek(FP,0x006BAD0DL,SEEK_SET); // Regallis N5 Kroneker Mining Base
fputc(0,FP);
fseek(FP,0x006BB9CDL,SEEK_SET); // Rikel N1 Jump to New Detroit
fputc(0,FP);
fseek(FP,0x006BB9F5L,SEEK_SET); // Rikel N2 Jump to Midgard
fputc(0,FP);
fseek(FP,0x006BBA31L,SEEK_SET); // Rikel N4 Vishnu Mining Base
fputc(0,FP);
fseek(FP,0x006BBA4BL,SEEK_SET); // Rikel N5 jump to 44-P-1M
fputc(0,FP);
fseek(FP,0x006BBA95L,SEEK_SET); // Rikel H3 Hidden 3
fputc(0,FP);
fseek(FP,0x006BC0F3L,SEEK_SET); // Rygannon N3 jump to Delta
fputc(0,FP);
fseek(FP,0x006BDEA3L,SEEK_SET); // Sherwood N3 Tuck's Pirate Base
fputc(0,FP);
fseek(FP,0x006BEFDBL,SEEK_SET); // Telar N2 Megiddo Pirate Base
fputc(0,FP);
fseek(FP,0x006C1127L,SEEK_SET); // Delta N2
fputc(0,FP);
fseek(FP,0x006C114BL,SEEK_SET); // Delta N4
fputc(0,FP);
fseek(FP,0x006C170BL,SEEK_SET); // Gamma N1 jump to Beta
fputc(0,FP);
fseek(FP,0x006C1739L,SEEK_SET); // Gamma N3
fputc(0,FP);
fseek(FP,0x006C174BL,SEEK_SET); // Gamma N4
fputc(0,FP);
fseek(FP,0x006C175DL,SEEK_SET); // Gamma N5 jump to Delta Prime
fputc(0,FP);
fseek(FP,0x006C1D15L,SEEK_SET); // Beta N2
fputc(0,FP);
fseek(FP,0x006C1D39L,SEEK_SET); // Beta N4
fputc(0,FP);
fseek(FP,0x006C1D4FL,SEEK_SET); // Beta N5 jump to Gamma
fputc(0,FP);
fseek(FP,0x006C268BL,SEEK_SET); // Valhalla N1 Valkyrie Mining Base
fputc(0,FP);
fseek(FP,0x006C3649L,SEEK_SET); // War N1 jump to Pestilence
fputc(0,FP);
fseek(FP,0x006C3683L,SEEK_SET); // War N3 jump to Troy
fputc(0,FP);
fseek(FP,0x006C3E59L,SEEK_SET); // Xytani N2
fputc(0,FP);
fseek(FP,0x006C3E95L,SEEK_SET); // Xytani Hidden
fputc(0,FP);
// close PRIV.TRE
fclose (FP);
// disable asteroids in Righteous Fire
cprintf("Disabling 46 of the 52 asteroid fields in Righteous Fire ...\r\n");
// Open RF.TRE for modifications
if ((FP=fopen("RF.TRE","r+b"))==NULL)
{
cprintf("\a\r\nERROR in opening RF.TRE");
fcloseall();
exit(0);
}
fseek(FP,0x00771370L,SEEK_SET); // 17-AR N2
fputc(0,FP);
fseek(FP,0x00773C10L,SEEK_SET); // BP Alpha N2
fputc(0,FP);
fseek(FP,0x00773C42L,SEEK_SET); // BP Alpha N4
fputc(0,FP);
fseek(FP,0x00774CE4L,SEEK_SET); // BP Tango N2
fputc(0,FP);
fseek(FP,0x00774D1CL,SEEK_SET); // BP Tango N4
fputc(0,FP);
fseek(FP,0x00775526L,SEEK_SET); // Capella N2 Drake Pirate Base
fputc(0,FP);
fseek(FP,0x00776BEAL,SEEK_SET); // Crab-12 Hidden
fputc(0,FP);
fseek(FP,0x0077807EL,SEEK_SET); // Famine N4
fputc(0,FP);
fseek(FP,0x0078448EL,SEEK_SET); // Nexus N3 Macabee Mining Base
fputc(0,FP);
fseek(FP,0x0078501EL,SEEK_SET); // Nitir N3
fputc(0,FP);
fseek(FP,0x00786D8EL,SEEK_SET); // Palan N2
fputc(0,FP);
fseek(FP,0x007875E0L,SEEK_SET); // Pender's Star N2
fputc(0,FP);
fseek(FP,0x00787C20L,SEEK_SET); // Pentonville N1 Oakham Pirate Base
fputc(0,FP);
fseek(FP,0x00789330L,SEEK_SET); // Pestilence N2
fputc(0,FP);
fseek(FP,0x0078A2C6L,SEEK_SET); // Prasepe N3 Saratov Mining Base
fputc(0,FP);
fseek(FP,0x0078AF2EL,SEEK_SET); // Pyrenees N6 Basque Mining Base
fputc(0,FP);
fseek(FP,0x0078B7FEL,SEEK_SET); // Ragnarok N1 jump to BP Alpha
fputc(0,FP);
fseek(FP,0x0078B840L,SEEK_SET); // Ragnarok N3 Mjolnar Agri Planet
fputc(0,FP);
fseek(FP,0x0078CC6CL,SEEK_SET); // Regallis N5 Kroneker Mining Base
fputc(0,FP);
fseek(FP,0x0078D974L,SEEK_SET); // Rikel N1 jump to New Detroit
fputc(0,FP);
fseek(FP,0x0078D99CL,SEEK_SET); // Rikel N2 jump to Midgard
fputc(0,FP);
fseek(FP,0x0078D9D8L,SEEK_SET); // Rikel N4 Vishnu Mining Base
fputc(0,FP);
fseek(FP,0x0078D9F2L,SEEK_SET); // Rikel N5 jump to 44-P-1M
fputc(0,FP);
fseek(FP,0x0078DA3CL,SEEK_SET); // Rikel H3 Hidden 3
fputc(0,FP);
fseek(FP,0x0078DA52L,SEEK_SET); // Rikel HJ Hidden jump to Eden
fputc(0,FP);
fseek(FP,0x0078E0AEL,SEEK_SET); // Rygannon N3 jump to Delta
fputc(0,FP);
fseek(FP,0x0078FE5EL,SEEK_SET); // Sherwood N3 Tuck's Pirate Base
fputc(0,FP);
fseek(FP,0x00790F96L,SEEK_SET); // Telar N2 Megiddo Pirate Base
fputc(0,FP);
fseek(FP,0x007930E2L,SEEK_SET); // Delta N2
fputc(0,FP);
fseek(FP,0x00793106L,SEEK_SET); // Delta N4
fputc(0,FP);
fseek(FP,0x007936C6L,SEEK_SET); // Gamma N1 jump to Beta
fputc(0,FP);
fseek(FP,0x007936F4L,SEEK_SET); // Gamma N3
fputc(0,FP);
fseek(FP,0x00793706L,SEEK_SET); // Gamma N4
fputc(0,FP);
fseek(FP,0x00793718L,SEEK_SET); // Gamma N5 jump to Delta Prime
fputc(0,FP);
fseek(FP,0x00793CD0L,SEEK_SET); // Beta N2
fputc(0,FP);
fseek(FP,0x00793CF4L,SEEK_SET); // Beta N4
fputc(0,FP);
fseek(FP,0x00793D0AL,SEEK_SET); // Beta N5 jump to Gamma
fputc(0,FP);
fseek(FP,0x00794672L,SEEK_SET); // Valhalla N1 Valkyrie Mining Base
fputc(0,FP);
fseek(FP,0x00795646L,SEEK_SET); // War N1 jump to Pestilence
fputc(0,FP);
fseek(FP,0x00795680L,SEEK_SET); // War N3 jump to Troy
fputc(0,FP);
fseek(FP,0x00795E56L,SEEK_SET); // Xytani N2
fputc(0,FP);
fseek(FP,0x00795E92L,SEEK_SET); // Xytani Hidden
fputc(0,FP);
fseek(FP,0x0079738CL,SEEK_SET); // Eden Hidden (coded internally as N3)
fputc(0,FP);
fseek(FP,0x0079739EL,SEEK_SET); // Eden Hidden (coded internally as N4)
fputc(0,FP);
fseek(FP,0x007973B0L,SEEK_SET); // Eden Hidden (coded internally as N5)
fputc(0,FP);
fseek(FP,0x007973C2L,SEEK_SET); // Eden Hidden (coded internally as H3)
fputc(0,FP);
// close RF.TRE
fclose(FP);
// modify ship performance in Privateer
// Open PRIV.TRE for modifications
if ((FP=fopen("PRIV.TRE","r+b"))==NULL)
{
cprintf("\a\r\nERROR in opening PRIV.TRE");
fcloseall();
exit(0);
}
// Scout
fseek(FP,0x0092666CL,SEEK_SET);
fputc(1,FP);fputc(0,FP);fputc(0,FP);fputc(0,FP);
fputc(3,FP);fputc(0,FP);fputc(0,FP);fputc(0,FP);
fputc(1,FP);fputc(0,FP);fputc(0,FP);fputc(0,FP);
fputc(11,FP);fputc(0,FP);fputc(0,FP);fputc(0,FP);
fputc(3,FP);fputc(0,FP);fputc(0,FP);fputc(0,FP);
fputc(5,FP);fputc(0,FP);
cprintf("\r\nPrivateer: Steltek Scout flight performance severely reduced.\r\n");
// Drone
fseek(FP,0x009264A8L,SEEK_SET);
fputc(19,FP);fputc(1,FP);fputc(0,FP);fputc(0,FP);
fputc(44,FP);fputc(1,FP);fputc(0,FP);fputc(0,FP);
fputc(95,FP);fputc(0,FP);fputc(0,FP);fputc(0,FP);
fputc(105,FP);fputc(0,FP);fputc(0,FP);fputc(0,FP);
fputc(97,FP);fputc(0,FP);fputc(0,FP);fputc(0,FP);
fputc(144,FP);fputc(1,FP);
cprintf("Privateer: Steltek Drone flight performance reduced.\r\n");
// close PRIV.TRE
fclose (FP);
// modify ship performance in Righteous Fire
// Open RF.TRE for modifications
if ((FP=fopen("RF.TRE","r+b"))==NULL)
{
cprintf("\a\r\nERROR in opening RF.TRE");
fcloseall();
exit(0);
}
// Salthi
fseek(FP,0x009FC22CL,SEEK_SET);
fputc(19,FP);fputc(1,FP);fputc(0,FP);fputc(0,FP);
fputc(44,FP);fputc(1,FP);fputc(0,FP);fputc(0,FP);
fputc(95,FP);fputc(0,FP);fputc(0,FP);fputc(0,FP);
fputc(105,FP);fputc(0,FP);fputc(0,FP);fputc(0,FP);
fputc(97,FP);fputc(0,FP);fputc(0,FP);fputc(0,FP);
fputc(144,FP);fputc(1,FP);
cprintf("Righteous Fire: Salthi flight performance reduced.\r\n");
// close RF.TRE
fclose (FP);
// modify Palan Nav 4 in Privateer
// Open PRIV.TRE for modifications
if ((FP=fopen("PRIV.TRE","r+b"))==NULL)
{
cprintf("\a\r\nERROR in opening PRIV.TRE");
fcloseall();
exit(0);
}
// Change the 12 Bounty Hunter pilots in orbit around palan for PRIV.TRE
fseek(FP,0x006B4620L,SEEK_SET);
for (i=1;i<13;i++)
{
fprintf(FP,"%s","COM_DF");
fputc(0,FP);
fputc(0,FP);
}
// Change the 12 Demons in orbit around palan for PRIV.TRE
for (i=0;i<12;i++)
{
fseek(FP,(0x006B4A85L+(i*46)),SEEK_SET);
fprintf(FP,"%s","TALNTYPETALRELIG");
}
cprintf("\r\nPrivateer: Bounty Hunter Demons at Palan changed to Retro Talons.\r\n");
// close PRIV.TRE
fclose (FP);
// modify Palan Nav 4 in Righteous Fire
// Open RF.TRE for modifications
if ((FP=fopen("RF.TRE","r+b"))==NULL)
{
cprintf("\a\r\nERROR in opening RF.TRE");
fcloseall();
exit(0);
}
// Change the 12 Bounty Hunter pilots in orbit around palan for RF.TRE
fseek(FP,0x0078656BL,SEEK_SET);
for (i=1;i<13;i++)
{
fprintf(FP,"%s","COM_DF");
fputc(0,FP);
fputc(0,FP);
}
// Change the 12 Demons in orbit around palan for RF.TRE
for (i=0;i<12;i++)
{
fseek(FP,(0x007869D0L+(i*46)),SEEK_SET);
fprintf(FP,"%s","TALNTYPETALRELIG");
}
cprintf("Righteous Fire: Bounty Hunter Demons at Palan changed to Retro Talons.\r\n");
// close RF.TRE
fclose (FP);
fcloseall();
}