Ich habe den DOOM-Quellcode ein bisschen studiert. Ich sage dir, wie es dort gemacht wird.
D_DoomMain enthält alle Funktionen zum Öffnen, Speichern und Laden sowie eine Reihe anderer Dinge. Wie es am Anfang der Datei steht,
// 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.
Grundsätzlich ist die gesamte Datei M_CheckParm
von Anfang bis Ende voller s. Daraus besteht die D_DoomLoop. Es ist eine massive Schleife (etwa 1000-2000 Zeilen lang).
Da ist deine Frage 'Wie kann ich schreiben?' Ich werde nur ein paar Code-Teile einfügen, die sich auf gamesaves beziehen, von D_DoomMain:
Hier sind die Anweisungen, wo das Zeug verwendet wird, ganz am Ende der Schleife.
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
Hier ist die Funktion, die auf die Zeichenfolgen zugreift, die im gesamten Code verteilt sind:
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;
}
}
Sie haben auch eine Datei mit dem Namen p_savegame.c, in der alle benutzerbezogenen Daten gespeichert werden (welche Waffen Sie haben, wo Sie sich in welchem Level befinden usw.).
Und schließlich haben Sie die Datei, die Spieledaten in ein Spielszenario lädt, das wohl komplexeste von allen, weil es auch alles andere lädt. Diese Datei heißt p_setup.c und befindet sich im selben Verzeichnis.
Es hat für mich gut geklappt, cat
diese alle in einen Textpuffer und pipe
diesen Text sendmail
an meine eigene E-Mail-Adresse zu senden. Auf diese Weise kann ich es in ungeraden Momenten des Tages durchlesen und 'find' verwenden, wenn ich nach Dingen wie 'Wie lädt DOOM ein Spiel?' Suchen möchte. Der Code ist gut kommentiert.