He estudiado un poco el código fuente de DOOM. Te diré cómo se hace allí.
D_DoomMain contiene todas las funciones de abrir / guardar / cargar, así como muchas otras cosas. Como dice al principio del archivo,
// 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.
Básicamente, todo el archivo está lleno de M_CheckParm
s de principio a fin. En eso consiste el D_DoomLoop. Es un bucle masivo (algo así como 1000-2000 líneas de largo).
Dado que su pregunta es '¿Cómo puedo escribir?' Solo voy a pegar algunos bits de código que se refieren a los juegos guardados, de D_DoomMain:
Aquí están las declaraciones donde se usan esas cosas, al final del ciclo.
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
Aquí está la función que accede a las cadenas, que encontrará dispersas en todo el código:
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;
}
}
También tienes un archivo llamado p_savegame.c con cosas que guardarán todos los datos asociados al usuario (qué armas tienes, dónde estás en qué nivel, etc.).
Y finalmente tienes el archivo que carga los datos del juego guardado en un escenario de juego, posiblemente el más complejo de todos, porque también carga todo lo demás. Ese se llama p_setup.c, y se encuentra en el mismo directorio.
Me funcionó bien para cat
todos estos en un búfer de texto y pipe
ese texto sendmail
a mi propia dirección de correo electrónico. De esa manera puedo leerlo en los momentos extraños del día, y usar 'buscar' cuando quiero buscar cosas como 'cómo DOOM carga un juego'. El código está bien comentado.