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 这些参数在代码中的使用可以在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