2006-03-20 17:12:09 +00:00
/*
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
SOFTWARE CORPORATION ( " PARALLAX " ) . PARALLAX , IN DISTRIBUTING THE CODE TO
END - USERS , AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN , GRANTS A
ROYALTY - FREE , PERPETUAL LICENSE TO SUCH END - USERS FOR USE BY SUCH END - USERS
IN USING , DISPLAYING , AND CREATING DERIVATIVE WORKS THEREOF , SO LONG AS
SUCH USE , DISPLAY OR CREATION IS FOR NON - COMMERCIAL , ROYALTY OR REVENUE
FREE PURPOSES . IN NO EVENT SHALL THE END - USER USE THE COMPUTER CODE
CONTAINED HEREIN FOR REVENUE - BEARING PURPOSES . THE END - USER UNDERSTANDS
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE .
COPYRIGHT 1993 - 1999 PARALLAX SOFTWARE CORPORATION . ALL RIGHTS RESERVED .
*/
/*
*
* contains routine ( s ) to read in the configuration file which contains
* game configuration stuff like detail level , sound card , etc
*
*/
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <ctype.h>
2010-09-17 10:44:21 +00:00
2008-04-06 20:23:28 +00:00
# include "config.h"
2006-03-20 17:12:09 +00:00
# include "pstypes.h"
# include "game.h"
2010-06-14 08:13:16 +00:00
# include "songs.h"
2006-03-20 17:12:09 +00:00
# include "kconfig.h"
# include "palette.h"
# include "args.h"
# include "player.h"
# include "mission.h"
# include "physfsx.h"
2008-04-06 20:23:28 +00:00
struct Cfg GameCfg ;
2006-03-20 17:12:09 +00:00
2012-07-22 23:17:54 +00:00
static const char DigiVolumeStr [ ] = " DigiVolume " ;
static const char MusicVolumeStr [ ] = " MusicVolume " ;
static const char ReverseStereoStr [ ] = " ReverseStereo " ;
static const char OrigTrackOrderStr [ ] = " OrigTrackOrder " ;
static const char MusicTypeStr [ ] = " MusicType " ;
static const char CMLevelMusicPlayOrderStr [ ] = " CMLevelMusicPlayOrder " ;
static const char CMLevelMusicTrack0Str [ ] = " CMLevelMusicTrack0 " ;
static const char CMLevelMusicTrack1Str [ ] = " CMLevelMusicTrack1 " ;
static const char CMLevelMusicPathStr [ ] = " CMLevelMusicPath " ;
static const char CMMiscMusic0Str [ ] = " CMMiscMusic0 " ;
static const char CMMiscMusic1Str [ ] = " CMMiscMusic1 " ;
static const char CMMiscMusic2Str [ ] = " CMMiscMusic2 " ;
static const char CMMiscMusic3Str [ ] = " CMMiscMusic3 " ;
static const char CMMiscMusic4Str [ ] = " CMMiscMusic4 " ;
static const char GammaLevelStr [ ] = " GammaLevel " ;
static const char LastPlayerStr [ ] = " LastPlayer " ;
static const char LastMissionStr [ ] = " LastMission " ;
static const char ResolutionXStr [ ] = " ResolutionX " ;
static const char ResolutionYStr [ ] = " ResolutionY " ;
static const char AspectXStr [ ] = " AspectX " ;
static const char AspectYStr [ ] = " AspectY " ;
static const char WindowModeStr [ ] = " WindowMode " ;
static const char TexFiltStr [ ] = " TexFilt " ;
2013-03-03 01:03:33 +00:00
# if defined(DXX_BUILD_DESCENT_II)
2012-07-22 23:17:54 +00:00
static const char MovieTexFiltStr [ ] = " MovieTexFilt " ;
static const char MovieSubtitlesStr [ ] = " MovieSubtitles " ;
2013-03-03 01:03:33 +00:00
# endif
2012-07-22 23:17:54 +00:00
static const char VSyncStr [ ] = " VSync " ;
static const char MultisampleStr [ ] = " Multisample " ;
static const char FPSIndicatorStr [ ] = " FPSIndicator " ;
static const char GrabinputStr [ ] = " GrabInput " ;
2006-03-20 17:12:09 +00:00
int ReadConfigFile ( )
{
PHYSFS_file * infile ;
2013-12-08 18:22:17 +00:00
char * ptr ;
2013-06-08 22:24:17 +00:00
const char * token , * value ;
2006-03-20 17:12:09 +00:00
2008-04-06 20:23:28 +00:00
// set defaults
GameCfg . DigiVolume = 8 ;
2008-05-24 08:59:35 +00:00
GameCfg . MusicVolume = 8 ;
2008-04-06 20:23:28 +00:00
GameCfg . ReverseStereo = 0 ;
2010-06-14 08:13:16 +00:00
GameCfg . OrigTrackOrder = 0 ;
2010-11-21 12:02:58 +00:00
# if defined(__APPLE__) && defined(__MACH__)
GameCfg . MusicType = MUSIC_TYPE_REDBOOK ;
# else
GameCfg . MusicType = MUSIC_TYPE_BUILTIN ;
# endif
2010-06-14 08:13:16 +00:00
GameCfg . CMLevelMusicPlayOrder = MUSIC_CM_PLAYORDER_CONT ;
GameCfg . CMLevelMusicTrack [ 0 ] = - 1 ;
GameCfg . CMLevelMusicTrack [ 1 ] = - 1 ;
2010-09-17 10:14:37 +00:00
memset ( GameCfg . CMLevelMusicPath , 0 , PATH_MAX + 1 ) ;
2010-06-14 08:13:16 +00:00
memset ( GameCfg . CMMiscMusic [ SONG_TITLE ] , 0 , PATH_MAX + 1 ) ;
memset ( GameCfg . CMMiscMusic [ SONG_BRIEFING ] , 0 , PATH_MAX + 1 ) ;
2010-09-26 14:22:55 +00:00
memset ( GameCfg . CMMiscMusic [ SONG_ENDLEVEL ] , 0 , PATH_MAX + 1 ) ;
2010-06-14 08:13:16 +00:00
memset ( GameCfg . CMMiscMusic [ SONG_ENDGAME ] , 0 , PATH_MAX + 1 ) ;
memset ( GameCfg . CMMiscMusic [ SONG_CREDITS ] , 0 , PATH_MAX + 1 ) ;
2010-09-17 10:14:37 +00:00
# if defined(__APPLE__) && defined(__MACH__)
GameCfg . OrigTrackOrder = 1 ;
2013-03-03 01:03:33 +00:00
# if defined(DXX_BUILD_DESCENT_I)
GameCfg . CMLevelMusicPlayOrder = MUSIC_CM_PLAYORDER_LEVEL ;
snprintf ( GameCfg . CMLevelMusicPath , PATH_MAX , " %s " , " descent.m3u " ) ;
snprintf ( GameCfg . CMMiscMusic [ SONG_TITLE ] , PATH_MAX , " %s%s " , PHYSFS_getUserDir ( ) , " Music/iTunes/iTunes Music/Insanity/Descent/02 Primitive Rage.mp3 " ) ;
snprintf ( GameCfg . CMMiscMusic [ SONG_CREDITS ] , PATH_MAX , " %s%s " , PHYSFS_getUserDir ( ) , " Music/iTunes/iTunes Music/Insanity/Descent/05 The Darkness Of Space.mp3 " ) ;
# elif defined(DXX_BUILD_DESCENT_II)
2011-04-18 12:32:36 +00:00
snprintf ( GameCfg . CMLevelMusicPath , PATH_MAX , " %s " , " descent2.m3u " ) ;
snprintf ( GameCfg . CMMiscMusic [ SONG_TITLE ] , PATH_MAX , " %s%s " , PHYSFS_getUserDir ( ) , " Music/iTunes/iTunes Music/Redbook Soundtrack/Descent II, Macintosh CD-ROM/02 Title.mp3 " ) ;
2013-03-03 01:03:33 +00:00
snprintf ( GameCfg . CMMiscMusic [ SONG_CREDITS ] , PATH_MAX , " %s%s " , PHYSFS_getUserDir ( ) , " Music/iTunes/iTunes Music/Redbook Soundtrack/Descent II, Macintosh CD-ROM/03 Crawl.mp3 " ) ;
# endif
2011-04-18 12:32:36 +00:00
snprintf ( GameCfg . CMMiscMusic [ SONG_BRIEFING ] , PATH_MAX , " %s%s " , PHYSFS_getUserDir ( ) , " Music/iTunes/iTunes Music/Insanity/Descent/03 Outerlimits.mp3 " ) ;
snprintf ( GameCfg . CMMiscMusic [ SONG_ENDLEVEL ] , PATH_MAX , " %s%s " , PHYSFS_getUserDir ( ) , " Music/iTunes/iTunes Music/Insanity/Descent/04 Close Call.mp3 " ) ;
snprintf ( GameCfg . CMMiscMusic [ SONG_ENDGAME ] , PATH_MAX , " %s%s " , PHYSFS_getUserDir ( ) , " Music/iTunes/iTunes Music/Insanity/Descent/14 Insanity.mp3 " ) ;
2010-09-17 10:14:37 +00:00
# endif
2008-04-06 20:23:28 +00:00
GameCfg . GammaLevel = 0 ;
memset ( GameCfg . LastPlayer , 0 , CALLSIGN_LEN + 1 ) ;
memset ( GameCfg . LastMission , 0 , MISSION_NAME_LEN + 1 ) ;
GameCfg . ResolutionX = 640 ;
GameCfg . ResolutionY = 480 ;
GameCfg . AspectX = 3 ;
GameCfg . AspectY = 4 ;
GameCfg . WindowMode = 0 ;
GameCfg . TexFilt = 0 ;
2013-03-03 01:03:33 +00:00
# if defined(DXX_BUILD_DESCENT_II)
2010-09-02 13:55:28 +00:00
GameCfg . MovieTexFilt = 0 ;
GameCfg . MovieSubtitles = 0 ;
2013-03-03 01:03:33 +00:00
# endif
2008-04-21 18:39:49 +00:00
GameCfg . VSync = 0 ;
2008-04-22 08:29:29 +00:00
GameCfg . Multisample = 0 ;
2011-02-14 21:27:07 +00:00
GameCfg . FPSIndicator = 0 ;
2010-12-28 18:11:10 +00:00
GameCfg . Grabinput = 1 ;
2010-06-14 08:13:16 +00:00
2006-03-20 17:12:09 +00:00
infile = PHYSFSX_openReadBuffered ( " descent.cfg " ) ;
2007-07-26 23:57:29 +00:00
2006-03-20 17:12:09 +00:00
if ( infile = = NULL ) {
return 1 ;
}
2007-07-26 23:57:29 +00:00
2006-03-20 17:12:09 +00:00
while ( ! PHYSFS_eof ( infile ) )
{
2012-03-28 11:43:35 +00:00
int max_len = PHYSFS_fileLength ( infile ) ; // to be fully safe, assume the whole cfg consists of one big line
2013-12-08 18:22:17 +00:00
RAIIdmem < char > line ;
2013-07-13 02:31:27 +00:00
CALLOC ( line , char , max_len ) ;
2006-03-20 17:12:09 +00:00
PHYSFSX_gets ( infile , line ) ;
ptr = & ( line [ 0 ] ) ;
while ( isspace ( * ptr ) )
ptr + + ;
if ( * ptr ! = ' \0 ' ) {
token = strtok ( ptr , " = " ) ;
value = strtok ( NULL , " = " ) ;
if ( ! value )
value = " " ;
2007-07-26 23:57:29 +00:00
if ( ! strcmp ( token , DigiVolumeStr ) )
2008-04-06 20:23:28 +00:00
GameCfg . DigiVolume = strtol ( value , NULL , 10 ) ;
2008-05-24 08:59:35 +00:00
else if ( ! strcmp ( token , MusicVolumeStr ) )
GameCfg . MusicVolume = strtol ( value , NULL , 10 ) ;
2007-11-06 20:33:22 +00:00
else if ( ! strcmp ( token , ReverseStereoStr ) )
2008-04-06 20:23:28 +00:00
GameCfg . ReverseStereo = strtol ( value , NULL , 10 ) ;
2009-05-06 12:19:28 +00:00
else if ( ! strcmp ( token , OrigTrackOrderStr ) )
GameCfg . OrigTrackOrder = strtol ( value , NULL , 10 ) ;
2010-06-14 08:13:16 +00:00
else if ( ! strcmp ( token , MusicTypeStr ) )
GameCfg . MusicType = strtol ( value , NULL , 10 ) ;
else if ( ! strcmp ( token , CMLevelMusicPlayOrderStr ) )
GameCfg . CMLevelMusicPlayOrder = strtol ( value , NULL , 10 ) ;
else if ( ! strcmp ( token , CMLevelMusicTrack0Str ) )
GameCfg . CMLevelMusicTrack [ 0 ] = strtol ( value , NULL , 10 ) ;
else if ( ! strcmp ( token , CMLevelMusicTrack1Str ) )
GameCfg . CMLevelMusicTrack [ 1 ] = strtol ( value , NULL , 10 ) ;
else if ( ! strcmp ( token , CMLevelMusicPathStr ) ) {
char * p ;
strncpy ( GameCfg . CMLevelMusicPath , value , PATH_MAX ) ;
p = strchr ( GameCfg . CMLevelMusicPath , ' \n ' ) ;
if ( p ) * p = 0 ;
}
else if ( ! strcmp ( token , CMMiscMusic0Str ) ) {
char * p ;
strncpy ( GameCfg . CMMiscMusic [ SONG_TITLE ] , value , PATH_MAX ) ;
p = strchr ( GameCfg . CMMiscMusic [ SONG_TITLE ] , ' \n ' ) ;
if ( p ) * p = 0 ;
}
else if ( ! strcmp ( token , CMMiscMusic1Str ) ) {
char * p ;
strncpy ( GameCfg . CMMiscMusic [ SONG_BRIEFING ] , value , PATH_MAX ) ;
p = strchr ( GameCfg . CMMiscMusic [ SONG_BRIEFING ] , ' \n ' ) ;
if ( p ) * p = 0 ;
}
2010-09-26 14:22:55 +00:00
else if ( ! strcmp ( token , CMMiscMusic2Str ) ) {
char * p ;
strncpy ( GameCfg . CMMiscMusic [ SONG_ENDLEVEL ] , value , PATH_MAX ) ;
p = strchr ( GameCfg . CMMiscMusic [ SONG_ENDLEVEL ] , ' \n ' ) ;
if ( p ) * p = 0 ;
}
2010-06-14 08:13:16 +00:00
else if ( ! strcmp ( token , CMMiscMusic3Str ) ) {
char * p ;
strncpy ( GameCfg . CMMiscMusic [ SONG_ENDGAME ] , value , PATH_MAX ) ;
p = strchr ( GameCfg . CMMiscMusic [ SONG_ENDGAME ] , ' \n ' ) ;
if ( p ) * p = 0 ;
}
else if ( ! strcmp ( token , CMMiscMusic4Str ) ) {
char * p ;
strncpy ( GameCfg . CMMiscMusic [ SONG_CREDITS ] , value , PATH_MAX ) ;
p = strchr ( GameCfg . CMMiscMusic [ SONG_CREDITS ] , ' \n ' ) ;
if ( p ) * p = 0 ;
}
2007-07-26 23:57:29 +00:00
else if ( ! strcmp ( token , GammaLevelStr ) ) {
2008-04-06 20:23:28 +00:00
GameCfg . GammaLevel = strtol ( value , NULL , 10 ) ;
gr_palette_set_gamma ( GameCfg . GammaLevel ) ;
2006-03-20 17:12:09 +00:00
}
2007-07-26 23:57:29 +00:00
else if ( ! strcmp ( token , LastPlayerStr ) ) {
2006-03-20 17:12:09 +00:00
char * p ;
2008-04-06 20:23:28 +00:00
strncpy ( GameCfg . LastPlayer , value , CALLSIGN_LEN ) ;
p = strchr ( GameCfg . LastPlayer , ' \n ' ) ;
2006-03-20 17:12:09 +00:00
if ( p ) * p = 0 ;
}
2007-07-26 23:57:29 +00:00
else if ( ! strcmp ( token , LastMissionStr ) ) {
2006-03-20 17:12:09 +00:00
char * p ;
2008-04-06 20:23:28 +00:00
strncpy ( GameCfg . LastMission , value , MISSION_NAME_LEN ) ;
p = strchr ( GameCfg . LastMission , ' \n ' ) ;
2006-03-20 17:12:09 +00:00
if ( p ) * p = 0 ;
}
2007-07-26 23:57:29 +00:00
else if ( ! strcmp ( token , ResolutionXStr ) )
2008-04-06 20:23:28 +00:00
GameCfg . ResolutionX = strtol ( value , NULL , 10 ) ;
2007-07-26 23:57:29 +00:00
else if ( ! strcmp ( token , ResolutionYStr ) )
2008-04-06 20:23:28 +00:00
GameCfg . ResolutionY = strtol ( value , NULL , 10 ) ;
else if ( ! strcmp ( token , AspectXStr ) )
GameCfg . AspectX = strtol ( value , NULL , 10 ) ;
else if ( ! strcmp ( token , AspectYStr ) )
GameCfg . AspectY = strtol ( value , NULL , 10 ) ;
else if ( ! strcmp ( token , WindowModeStr ) )
GameCfg . WindowMode = strtol ( value , NULL , 10 ) ;
else if ( ! strcmp ( token , TexFiltStr ) )
GameCfg . TexFilt = strtol ( value , NULL , 10 ) ;
2013-03-03 01:03:33 +00:00
# if defined(DXX_BUILD_DESCENT_II)
2010-09-02 13:55:28 +00:00
else if ( ! strcmp ( token , MovieTexFiltStr ) )
GameCfg . MovieTexFilt = strtol ( value , NULL , 10 ) ;
else if ( ! strcmp ( token , MovieSubtitlesStr ) )
GameCfg . MovieSubtitles = strtol ( value , NULL , 10 ) ;
2013-03-03 01:03:33 +00:00
# endif
2008-04-21 18:39:49 +00:00
else if ( ! strcmp ( token , VSyncStr ) )
GameCfg . VSync = strtol ( value , NULL , 10 ) ;
2008-04-22 08:29:29 +00:00
else if ( ! strcmp ( token , MultisampleStr ) )
GameCfg . Multisample = strtol ( value , NULL , 10 ) ;
2011-02-14 21:27:07 +00:00
else if ( ! strcmp ( token , FPSIndicatorStr ) )
GameCfg . FPSIndicator = strtol ( value , NULL , 10 ) ;
2010-12-28 18:11:10 +00:00
else if ( ! strcmp ( token , GrabinputStr ) )
GameCfg . Grabinput = strtol ( value , NULL , 10 ) ;
2006-03-20 17:12:09 +00:00
}
}
PHYSFS_close ( infile ) ;
2008-04-06 20:23:28 +00:00
if ( GameCfg . DigiVolume > 8 ) GameCfg . DigiVolume = 8 ;
2008-05-24 08:59:35 +00:00
if ( GameCfg . MusicVolume > 8 ) GameCfg . MusicVolume = 8 ;
2006-03-20 17:12:09 +00:00
2008-04-06 20:23:28 +00:00
if ( GameCfg . ResolutionX > = 320 & & GameCfg . ResolutionY > = 200 )
Game_screen_mode = SM ( GameCfg . ResolutionX , GameCfg . ResolutionY ) ;
2006-03-20 17:12:09 +00:00
return 0 ;
}
int WriteConfigFile ( )
{
PHYSFS_file * infile ;
2008-04-06 20:23:28 +00:00
GameCfg . GammaLevel = gr_palette_get_gamma ( ) ;
2010-06-14 08:13:16 +00:00
2006-03-20 17:12:09 +00:00
infile = PHYSFSX_openWriteBuffered ( " descent.cfg " ) ;
2007-07-26 23:57:29 +00:00
2006-03-20 17:12:09 +00:00
if ( infile = = NULL ) {
return 1 ;
}
2007-07-26 23:57:29 +00:00
2008-04-06 20:23:28 +00:00
PHYSFSX_printf ( infile , " %s=%d \n " , DigiVolumeStr , GameCfg . DigiVolume ) ;
2008-05-24 08:59:35 +00:00
PHYSFSX_printf ( infile , " %s=%d \n " , MusicVolumeStr , GameCfg . MusicVolume ) ;
2008-04-06 20:23:28 +00:00
PHYSFSX_printf ( infile , " %s=%d \n " , ReverseStereoStr , GameCfg . ReverseStereo ) ;
2009-05-06 12:19:28 +00:00
PHYSFSX_printf ( infile , " %s=%d \n " , OrigTrackOrderStr , GameCfg . OrigTrackOrder ) ;
2010-06-14 08:13:16 +00:00
PHYSFSX_printf ( infile , " %s=%d \n " , MusicTypeStr , GameCfg . MusicType ) ;
PHYSFSX_printf ( infile , " %s=%d \n " , CMLevelMusicPlayOrderStr , GameCfg . CMLevelMusicPlayOrder ) ;
PHYSFSX_printf ( infile , " %s=%d \n " , CMLevelMusicTrack0Str , GameCfg . CMLevelMusicTrack [ 0 ] ) ;
PHYSFSX_printf ( infile , " %s=%d \n " , CMLevelMusicTrack1Str , GameCfg . CMLevelMusicTrack [ 1 ] ) ;
PHYSFSX_printf ( infile , " %s=%s \n " , CMLevelMusicPathStr , GameCfg . CMLevelMusicPath ) ;
PHYSFSX_printf ( infile , " %s=%s \n " , CMMiscMusic0Str , GameCfg . CMMiscMusic [ SONG_TITLE ] ) ;
PHYSFSX_printf ( infile , " %s=%s \n " , CMMiscMusic1Str , GameCfg . CMMiscMusic [ SONG_BRIEFING ] ) ;
2010-09-26 14:22:55 +00:00
PHYSFSX_printf ( infile , " %s=%s \n " , CMMiscMusic2Str , GameCfg . CMMiscMusic [ SONG_ENDLEVEL ] ) ;
2010-06-14 08:13:16 +00:00
PHYSFSX_printf ( infile , " %s=%s \n " , CMMiscMusic3Str , GameCfg . CMMiscMusic [ SONG_ENDGAME ] ) ;
PHYSFSX_printf ( infile , " %s=%s \n " , CMMiscMusic4Str , GameCfg . CMMiscMusic [ SONG_CREDITS ] ) ;
2008-04-06 20:23:28 +00:00
PHYSFSX_printf ( infile , " %s=%d \n " , GammaLevelStr , GameCfg . GammaLevel ) ;
2008-10-28 17:58:54 +00:00
PHYSFSX_printf ( infile , " %s=%s \n " , LastPlayerStr , Players [ Player_num ] . callsign ) ;
PHYSFSX_printf ( infile , " %s=%s \n " , LastMissionStr , GameCfg . LastMission ) ;
2008-04-06 20:23:28 +00:00
PHYSFSX_printf ( infile , " %s=%i \n " , ResolutionXStr , SM_W ( Game_screen_mode ) ) ;
PHYSFSX_printf ( infile , " %s=%i \n " , ResolutionYStr , SM_H ( Game_screen_mode ) ) ;
PHYSFSX_printf ( infile , " %s=%i \n " , AspectXStr , GameCfg . AspectX ) ;
PHYSFSX_printf ( infile , " %s=%i \n " , AspectYStr , GameCfg . AspectY ) ;
PHYSFSX_printf ( infile , " %s=%i \n " , WindowModeStr , GameCfg . WindowMode ) ;
PHYSFSX_printf ( infile , " %s=%i \n " , TexFiltStr , GameCfg . TexFilt ) ;
2013-03-03 01:03:33 +00:00
# if defined(DXX_BUILD_DESCENT_II)
2010-09-02 13:55:28 +00:00
PHYSFSX_printf ( infile , " %s=%i \n " , MovieTexFiltStr , GameCfg . MovieTexFilt ) ;
PHYSFSX_printf ( infile , " %s=%i \n " , MovieSubtitlesStr , GameCfg . MovieSubtitles ) ;
2013-03-03 01:03:33 +00:00
# endif
2008-04-21 18:39:49 +00:00
PHYSFSX_printf ( infile , " %s=%i \n " , VSyncStr , GameCfg . VSync ) ;
2008-04-22 08:29:29 +00:00
PHYSFSX_printf ( infile , " %s=%i \n " , MultisampleStr , GameCfg . Multisample ) ;
2011-02-14 21:27:07 +00:00
PHYSFSX_printf ( infile , " %s=%i \n " , FPSIndicatorStr , GameCfg . FPSIndicator ) ;
2010-12-28 18:11:10 +00:00
PHYSFSX_printf ( infile , " %s=%i \n " , GrabinputStr , GameCfg . Grabinput ) ;
2006-03-20 17:12:09 +00:00
PHYSFS_close ( infile ) ;
return 0 ;
}