DOOM Open Source Release配置系统:从命令行参数到配置文件

DOOM Open Source Release配置系统:从命令行参数到配置文件

DOOM Open Source Release配置系统:从命令行参数到配置文件

【免费下载链接】DOOM DOOM Open Source Release 项目地址: https://gitcode.com/gh_mirrors/do/DOOM

你是否在启动DOOM时经常忘记各种参数的作用?是否希望能够保存自己的个性化设置而不必每次手动输入命令?本文将带你深入了解DOOM Open Source Release的配置系统,从命令行参数解析到配置文件的读写,让你轻松掌握游戏配置的方方面面。读完本文后,你将能够:理解DOOM配置系统的工作原理、熟练使用常用命令行参数、自定义并管理配置文件,以及解决常见的配置问题。

命令行参数解析机制

DOOM的命令行参数解析是通过M_CheckParm函数实现的,该函数位于linuxdoom-1.10/m_argv.c文件中。它的工作原理非常简单:遍历所有命令行参数,查找与指定参数匹配的项,并返回其位置。

int M_CheckParm (char *check)

{

int i;

for (i = 1;i

{

if ( !strcasecmp(check, myargv[i]) )

return i;

}

return 0;

}

这个函数会忽略大小写进行比较,因此-nomonsters和-NoMonsters会被视为相同的参数。如果找到了匹配的参数,它会返回该参数在命令行中的位置(从1开始计数),否则返回0。

参数解析流程

DOOM的参数解析流程可以用以下流程图表示:

常用命令行参数

DOOM提供了丰富的命令行参数来定制游戏体验。以下是一些最常用的参数及其功能:

参数功能描述使用场景-nomonsters禁用所有怪物想要探索地图而不受攻击时-respawn怪物死后会重生增加游戏难度-fast怪物移动和攻击速度加快挑战更高难度-deathmatch死亡竞赛模式多人游戏时-skill 设置游戏难度(1-5)根据自己水平调整难度-warp 直接跳转到第e章第m关测试特定关卡或快速通关-file 加载自定义WAD文件玩第三方地图或MOD-record 录制游戏演示分享精彩游戏过程-playdemo 播放游戏演示观看录制的游戏过程

这些参数在代码中的使用可以在d_main.c中找到,例如:

nomonsters = M_CheckParm ("-nomonsters");

respawnparm = M_CheckParm ("-respawn");

fastparm = M_CheckParm ("-fast");

devparm = M_CheckParm ("-devparm");

if (M_CheckParm ("-altdeath"))

deathmatch = 2;

else if (M_CheckParm ("-deathmatch"))

deathmatch = 1;

配置文件系统

为了避免每次启动游戏都输入大量命令行参数,DOOM提供了配置文件支持。配置文件系统的实现主要在m_misc.c中。

默认配置定义

DOOM的默认配置在defaults结构体数组中定义,包含了各种可配置项的名称、存储位置、默认值等信息:

default_t defaults[] =

{

{"mouse_sensitivity",&mouseSensitivity, 5},

{"sfx_volume",&snd_SfxVolume, 8},

{"music_volume",&snd_MusicVolume, 8},

{"show_messages",&showMessages, 1},

{"use_mouse",&usemouse, 1},

{"mouseb_fire",&mousebfire,0},

{"mouseb_strafe",&mousebstrafe,1},

{"mouseb_forward",&mousebforward,2},

// ... 更多配置项

};

加载配置文件

M_LoadDefaults函数负责加载配置文件。它首先设置所有配置项的默认值,然后检查是否通过-config参数指定了自定义配置文件:

i = M_CheckParm ("-config");

if (i && i

{

defaultfile = myargv[i+1];

printf (" default file: %s\n",defaultfile);

}

else

defaultfile = basedefault;

如果没有指定,则使用默认的配置文件路径。然后函数会尝试打开配置文件并解析其中的设置:

f = fopen (defaultfile, "r");

if (f)

{

while (!feof(f))

{

if (fscanf (f, "%79s %[^\n]\n", def, strparm) == 2)

{

// 解析配置项并应用

}

}

fclose (f);

}

保存配置文件

当你在游戏中修改了设置,DOOM会通过M_SaveDefaults函数将当前配置保存到文件中:

void M_SaveDefaults (void)

{

int i;

int v;

FILE* f;

f = fopen (defaultfile, "w");

if (!f)

return; // 无法写入文件,但不报错

for (i=0 ; i

{

if (defaults[i].defaultvalue > -0xfff

&& defaults[i].defaultvalue < 0xfff)

{

v = *defaults[i].location;

fprintf (f,"%s\t\t%i\n",defaults[i].name,v);

} else {

fprintf (f,"%s\t\t\"%s\"\n",defaults[i].name,

* (char **) (defaults[i].location));

}

}

fclose (f);

}

参数与配置文件的优先级

在DOOM中,配置的优先级从高到低依次为:命令行参数 > 配置文件 > 默认值。这意味着如果你在命令行中指定了某个参数,它会覆盖配置文件中的相应设置;如果配置文件中没有该设置,则会使用默认值。

例如,如果你在配置文件中设置了sfx_volume = 5,但在命令行中使用了-sfx_volume 8,那么最终的音效音量会是8而不是5。

这种优先级机制在g_game.c中的代码得到体现:

if (M_CheckParm("-cdrom"))

cdrom = true;

即使配置文件中设置了cdrom = false,命令行中的-cdrom参数仍然会覆盖这个设置。

高级配置技巧

创建自定义配置文件

虽然DOOM会自动保存配置,但你也可以手动创建和编辑配置文件。只需创建一个文本文件,按照以下格式添加配置项:

mouse_sensitivity 7

sfx_volume 9

music_volume 6

screenblocks 10

detaillevel 2

然后在启动时使用-config参数指定这个文件:doom -config myconfig.txt

批量管理配置

如果你经常在不同的配置之间切换(例如,有时想玩原版游戏,有时想玩MOD),可以创建多个配置文件,如vanilla.cfg、modded.cfg等,然后根据需要加载不同的配置文件。

命令行参数组合使用

你可以同时使用多个命令行参数来实现特定的游戏设置。例如,以下命令会启动一个快速游戏,直接跳转到第二关,并且禁用怪物:

doom -fast -warp 1 2 -nomonsters

总结与展望

DOOM的配置系统虽然简单,但功能强大,为玩家提供了灵活的游戏定制选项。通过命令行参数和配置文件的结合使用,你可以打造完全符合自己喜好的游戏体验。

随着DOOM源代码的不断发展,未来可能会有更多高级的配置选项被添加进来,例如图形效果设置、控制方式自定义等。但即使是现在的配置系统,也已经能够满足大多数玩家的需求。

希望本文能帮助你更好地理解和使用DOOM的配置系统。现在,去定制你自己的DOOM体验吧!如果你有任何配置相关的问题或发现了新的配置技巧,欢迎在社区中分享和讨论。

【免费下载链接】DOOM DOOM Open Source Release 项目地址: https://gitcode.com/gh_mirrors/do/DOOM

相关推荐

张仪是哪个朝代的人
best365网页版登录官方网

张仪是哪个朝代的人

📅 10-04 👁️ 531
合作市全部美食推荐
365bet官方网投

合作市全部美食推荐

📅 07-25 👁️ 4598
蠲免的解释
365体育官网登录入口

蠲免的解释

📅 07-11 👁️ 6389
32岁巴雷拉领衔,乌拉圭3-0完胜秘鲁提前晋级世界杯正赛
best365网页版登录官方网

32岁巴雷拉领衔,乌拉圭3-0完胜秘鲁提前晋级世界杯正赛

📅 09-22 👁️ 3053
5分钟搞定的玉米面粥
365体育官网登录入口

5分钟搞定的玉米面粥

📅 07-03 👁️ 1956
卡西欧aw590价格
best365网页版登录官方网

卡西欧aw590价格

📅 08-26 👁️ 6352
驴牌是什么牌子?驴牌包包是什么意思
365体育官网登录入口

驴牌是什么牌子?驴牌包包是什么意思

📅 09-19 👁️ 428