J'ai étudié un peu le code source de DOOM. Je vais vous dire comment ça se passe là-dedans.
D_DoomMain contient toutes les fonctions d'ouverture / sauvegarde / chargement, ainsi qu'un tas d'autres choses. Comme il est dit au début du fichier,
// 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.
Fondamentalement, le fichier entier est plein de M_CheckParm
s du début à la fin. C'est en cela que consiste le D_DoomLoop. C'est une boucle massive (quelque chose comme 1000-2000 lignes de long).
Puisque votre question est «Comment puis-je écrire? Je vais juste coller quelques morceaux de code qui se réfèrent à gamesaves, de D_DoomMain:
voici les instructions où ce truc est utilisé, à la toute fin de la boucle.
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
Voici la fonction qui accède aux chaînes, que vous trouvez dispersées dans le code:
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;
}
}
Vous avez également un fichier appelé p_savegame.c avec des éléments qui enregistreront toutes les données associées à l'utilisateur (quelles armes vous avez, où vous êtes à quel niveau, etc.).
Et enfin, vous avez le fichier qui charge les données de sauvegarde dans un scénario de jeu, sans doute le plus complexe de tous, car il charge également tout le reste. Celui-ci s'appelle p_setup.c et se trouve dans le même répertoire.
Cela a bien fonctionné pour moi de cat
tous ces éléments dans un tampon de texte et pipe
ce texte sendmail
à ma propre adresse e-mail. De cette façon, je peux le lire à des moments étranges de la journée et utiliser «trouver» lorsque je veux rechercher des choses comme «comment DOOM charge-t-il un jeu». Le code est bien commenté.