DOOM 소스 코드를 조금 공부했습니다. 거기서 어떻게하는지 알려 드리겠습니다.
D_DoomMain에는 많은 다른 것들뿐만 아니라 모든 열기 / 저장 /로드 기능이 포함되어 있습니다. 파일의 시작 부분에서 말했듯이
// 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.
기본적으로 전체 파일은 M_CheckParm
처음부터 끝까지 s 로 가득 합니다. 이것이 D_DoomLoop의 구성입니다. 하나의 거대한 루프입니다 (1000-2000 줄 길이).
귀하의 질문은 '어떻게 쓸 수 있습니까?'입니다. D_DoomMain에서 게임 저장을 나타내는 몇 가지 코드를 붙여 넣을 것입니다.
다음은 루프의 맨 끝에서 해당 항목이 사용되는 문장입니다.
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
코드 전체에 흩어져있는 문자열에 액세스하는 함수는 다음과 같습니다.
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;
}
}
또한 p_savegame.c라는 파일이 있으며 모든 사용자 관련 데이터 (어떤 무기를 가지고 있는지, 어느 레벨에 있는지 등)를 저장합니다.
마지막으로 저장 게임 데이터를 게임 시나리오에로드하는 파일이 있습니다. 그 이름은 p_setup.c이며 같은 디렉토리에 있습니다.
그것은 cat
모두 텍스트 버퍼로, pipe
그 텍스트 sendmail
는 내 자신의 이메일 주소 로 잘 작동했습니다 . 그렇게하면 하루 중 이상한 순간에 그것을 읽을 수 있으며 'DOOM은 어떻게 게임을로드합니까?'와 같은 것을 찾고 싶을 때 '찾기'를 사용하십시오. 코드는 주석이 잘되어 있습니다.