Trochę przestudiowałem kod źródłowy DOOM. Powiem ci, jak się tam robi.
D_DoomMain zawiera wszystkie funkcje open / save / load, a także mnóstwo innych rzeczy. Jak napisano na początku pliku,
// DESCRIPTION:
// DOOM main program (D_DoomMain) and game loop (D_DoomLoop),
// plus functions to determine game mode (shareware, registered),
// parse command line parameters, configure game parameters (turbo),
// and call the startup functions.
Zasadniczo cały plik jest pełen M_CheckParm
od początku do końca. Z tego składa się D_DoomLoop. To jedna ogromna pętla (około 1000-2000 linii).
Ponieważ twoje pytanie brzmi: „Jak mogę pisać?” Wkleję tylko fragmenty kodu odnoszące się do zapisów gier z D_DoomMain:
oto stwierdzenia, w których te rzeczy są używane, na samym końcu pętli.
p = M_CheckParm ("-loadgame");
if (p && p < myargc-1)
{
if (M_CheckParm("-cdrom"))
sprintf(file, "c:\\doomdata\\"SAVEGAMENAME"%c.dsg",myargv[p+1][0]);
else
sprintf(file, SAVEGAMENAME"%c.dsg",myargv[p+1][0]);
G_LoadGame (file);
}
if ( gameaction != ga_loadgame )
{
if (autostart || netgame)
G_InitNew (startskill, startepisode, startmap);
else
D_StartTitle (); // start up intro loop
}
D_DoomLoop (); // never returns
Oto funkcja, która uzyskuje dostęp do ciągów znaków, które są rozproszone w całym kodzie:
void M_ReadSaveStrings(void)
{
int handle;
int count;
int i;
char name[256];
for (i = 0;i < load_end;i++)
{
if (M_CheckParm("-cdrom"))
sprintf(name,"c:\\doomdata\\"SAVEGAMENAME"%d.dsg",i);
else
sprintf(name,SAVEGAMENAME"%d.dsg",i);
handle = open (name, O_RDONLY | 0, 0666);
if (handle == -1)
{
strcpy(&savegamestrings[i][0],EMPTYSTRING);
LoadMenu[i].status = 0;
continue;
}
count = read (handle, &savegamestrings[i], SAVESTRINGSIZE);
close (handle);
LoadMenu[i].status = 1;
}
}
Masz również plik o nazwie p_savegame.c z rzeczami, które zapiszą wszystkie dane związane z użytkownikiem (jaką masz broń, gdzie jesteś na jakim poziomie itp.).
I w końcu masz plik, który ładuje dane zapisu do scenariusza gry, prawdopodobnie najbardziej skomplikowany ze wszystkich, ponieważ ładuje także wszystko inne. Ten nazywa się p_setup.c i znajduje się w tym samym katalogu.
Dla mnie cat
wszystko działało dobrze w buforze tekstowym i pipe
ten tekst sendmail
na mój własny adres e-mail. W ten sposób mogę go przeczytać w dziwnych momentach dnia i użyć „znajdź”, kiedy chcę szukać rzeczy takich jak „jak DOOM ładuje grę”. Kod jest dobrze skomentowany.