274 lines
11 KiB
C
274 lines
11 KiB
C
/***************************************************************************
|
|
config.c - description
|
|
-------------------
|
|
begin : Tue Feb 13 2001
|
|
copyright : (C) 2001 by Michael Speck
|
|
email : kulkanie@gmx.net
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#include "lbreakout.h"
|
|
|
|
#include <dirent.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
|
|
#include "config.h"
|
|
#include "../common/parser.h"
|
|
|
|
#ifdef _WIN32
|
|
#define MKDIR(d, p) mkdir(d)
|
|
#else
|
|
#define MKDIR mkdir
|
|
#endif
|
|
|
|
Config config;
|
|
|
|
#define CONFIG_FILE_NAME "lbreakout2.conf"
|
|
|
|
/* check if config directory exists; if not create it and set config_dir */
|
|
void config_check_dir()
|
|
{
|
|
char level_dir[512];
|
|
snprintf( config.dir_name, sizeof(config.dir_name)-1, "%s/%s", (getenv( "HOME" )?getenv( "HOME" ):"."), CONFIG_DIR_NAME );
|
|
/* test and create .lgames */
|
|
if ( opendir( config.dir_name ) == 0 ) {
|
|
fprintf( stderr, "couldn't find/open config directory '%s'\n", config.dir_name );
|
|
fprintf( stderr, "attempting to create it... " );
|
|
MKDIR( config.dir_name, S_IRWXU );
|
|
if ( opendir( config.dir_name ) == 0 )
|
|
fprintf( stderr, "failed\n" );
|
|
else
|
|
fprintf( stderr, "ok\n" );
|
|
}
|
|
/* create levels directory */
|
|
sprintf( level_dir, "%s/lbreakout2-levels", config.dir_name );
|
|
MKDIR( level_dir, S_IRWXU );
|
|
/* create themes directory */
|
|
sprintf( level_dir, "%s/lbreakout2-themes", config.dir_name );
|
|
MKDIR( level_dir, S_IRWXU );
|
|
}
|
|
|
|
/* set config to default */
|
|
void config_reset()
|
|
{
|
|
/* levels */
|
|
config.levelset_id_local = 0;
|
|
config.levelset_count_local = 0;
|
|
config.levelset_id_home = 0;
|
|
config.levelset_count_home = 0;
|
|
/* player */
|
|
config.player_count = 1;
|
|
strcpy( config.player_names[0], "Michael" );
|
|
strcpy( config.player_names[1], _("Mr.X") );
|
|
strcpy( config.player_names[2], _("Mr.Y") );
|
|
strcpy( config.player_names[3], _("Mr.Z") );
|
|
/* game */
|
|
config.diff = 2;
|
|
config.startlevel = 0;
|
|
config.rel_warp_limit = 80;
|
|
config.addBonusLevels = 1;
|
|
/* controls */
|
|
config.k_left = SDLK_LEFT;
|
|
config.k_right = SDLK_RIGHT;
|
|
config.k_rfire = SDLK_SPACE;
|
|
config.k_lfire = SDLK_y;
|
|
config.k_return = SDLK_BACKSPACE;
|
|
config.k_turbo = SDLK_x;
|
|
config.k_warp = SDLK_w;
|
|
config.k_maxballspeed = SDLK_c;
|
|
config.grab = 1;
|
|
config.rel_motion = 1;
|
|
config.i_motion_mod = 120;
|
|
config.motion_mod = 1.2;
|
|
config.convex = 1;
|
|
config.linear_corner = 0;
|
|
config.invert = 0;
|
|
config.i_key_speed = 500;
|
|
config.key_speed = 0.5;
|
|
config.random_angle = 1;
|
|
config.maxballspeed_int1000 = 900;
|
|
config.maxballspeed_float = 0.7;
|
|
/* sounds */
|
|
config.sound = 1;
|
|
config.volume = 8;
|
|
config.speech = 1;
|
|
config.badspeech = 0;
|
|
config.audio_buffer_size = 512;
|
|
/* graphics */
|
|
config.anim = 2;
|
|
config.fullscreen = 0;
|
|
config.fade = 1;
|
|
config.bonus_info = 1;
|
|
config.fps = 0;
|
|
config.ball_level = BALL_BELOW_BONUS;
|
|
config.debris_level = DEBRIS_ABOVE_BALL;
|
|
/* various */
|
|
config.use_hints = 1;
|
|
config.return_on_click = 0;
|
|
config.theme_id = 0;
|
|
config.theme_count = 4;
|
|
/* multiplayer */
|
|
strcpy( config.server, "217.160.141.22:8000" );
|
|
strcpy( config.local_port, "8001" );
|
|
strcpy( config.username, _("player") );
|
|
config.mp_diff = 1;
|
|
config.mp_rounds = 1;
|
|
config.mp_balls = 3;
|
|
config.mp_frags = 10;
|
|
config.recv_limit = 500;
|
|
}
|
|
|
|
/* load config */
|
|
void config_load( )
|
|
{
|
|
char *str;
|
|
char file_name[512];
|
|
PData *pd;
|
|
/* set to defaults */
|
|
config_check_dir();
|
|
config_reset();
|
|
/* load config */
|
|
sprintf( file_name, "%s/%s", config.dir_name, CONFIG_FILE_NAME );
|
|
if ( ( pd = parser_read_file( "config", file_name ) ) == 0 ) {
|
|
fprintf( stderr, "%s\n", parser_get_error() );
|
|
return;
|
|
}
|
|
/* assign */
|
|
parser_get_int( pd, "set_id_local", &config.levelset_id_local );
|
|
parser_get_int( pd, "set_count_local", &config.levelset_count_local );
|
|
parser_get_int( pd, "set_id_home", &config.levelset_id_home );
|
|
parser_get_int( pd, "set_count_home", &config.levelset_count_home );
|
|
parser_get_int( pd, "player_count", &config.player_count );
|
|
if ( parser_get_value( pd, "player0", &str, 0 ) )
|
|
strcpy_lt( config.player_names[0], str, 31 );
|
|
if ( parser_get_value( pd, "player1", &str, 0 ) )
|
|
strcpy_lt( config.player_names[1], str, 31 );
|
|
if ( parser_get_value( pd, "player2", &str, 0 ) )
|
|
strcpy_lt( config.player_names[2], str, 31 );
|
|
if ( parser_get_value( pd, "player3", &str, 0 ) )
|
|
strcpy_lt( config.player_names[3], str, 31 );
|
|
parser_get_int( pd, "diff", &config.diff );
|
|
parser_get_int( pd, "starting_level", &config.startlevel );
|
|
parser_get_int( pd, "rel_warp_limit", &config.rel_warp_limit );
|
|
parser_get_int( pd, "add_bonus_levels", &config.addBonusLevels );
|
|
parser_get_int( pd, "left", &config.k_left );
|
|
parser_get_int( pd, "right", &config.k_right );
|
|
parser_get_int( pd, "fire_left", &config.k_lfire );
|
|
parser_get_int( pd, "fire_right", &config.k_rfire );
|
|
parser_get_int( pd, "return", &config.k_return );
|
|
parser_get_int( pd, "turbo", &config.k_turbo );
|
|
parser_get_int( pd, "rel_motion", &config.rel_motion );
|
|
parser_get_int( pd, "grab", &config.grab );
|
|
parser_get_int( pd, "motion_mod", &config.i_motion_mod );
|
|
config.motion_mod = 0.01 * config.i_motion_mod;
|
|
parser_get_int( pd, "convex", &config.convex );
|
|
parser_get_int( pd, "linear_corner", &config.linear_corner );
|
|
parser_get_int( pd, "random_angle", &config.random_angle );
|
|
parser_get_int( pd, "maxballspeed", &config.maxballspeed_int1000 );
|
|
config.maxballspeed_float = (float)config.maxballspeed_int1000 / 1000;
|
|
parser_get_int( pd, "invert", &config.invert );
|
|
parser_get_int( pd, "sound", &config.sound );
|
|
parser_get_int( pd, "volume", &config.volume );
|
|
parser_get_int( pd, "speech", &config.speech );
|
|
parser_get_int( pd, "badspeech", &config.badspeech );
|
|
parser_get_int( pd, "audio_buffer_size", &config.audio_buffer_size );
|
|
parser_get_int( pd, "anim", &config.anim );
|
|
parser_get_int( pd, "fullscreen", &config.fullscreen );
|
|
parser_get_int( pd, "fade", &config.fade );
|
|
parser_get_int( pd, "bonus_info", &config.bonus_info );
|
|
parser_get_int( pd, "fps", &config.fps );
|
|
parser_get_int( pd, "ball_level", &config.ball_level );
|
|
parser_get_int( pd, "debris_level", &config.debris_level );
|
|
parser_get_int( pd, "i_key_speed", &config.i_key_speed );
|
|
config.key_speed = 0.001 * config.i_key_speed;
|
|
parser_get_int( pd, "use_hints", &config.use_hints );
|
|
parser_get_int( pd, "return_on_click", &config.return_on_click );
|
|
parser_get_int( pd, "theme_id", &config.theme_id );
|
|
parser_get_int( pd, "theme_count", &config.theme_count );
|
|
if ( parser_get_value( pd, "server", &str, 0 ) )
|
|
strcpy_lt( config.server, str, 64 );
|
|
if ( parser_get_value( pd, "local_port", &str, 0 ) )
|
|
strcpy_lt( config.local_port, str, 6 );
|
|
if ( parser_get_value( pd, "username", &str, 0 ) )
|
|
strcpy_lt( config.username, str, 15 );
|
|
parser_get_int( pd, "mp_diff", &config.mp_diff );
|
|
parser_get_int( pd, "mp_rounds", &config.mp_rounds );
|
|
parser_get_int( pd, "mp_frags", &config.mp_frags );
|
|
parser_get_int( pd, "mp_balls", &config.mp_balls );
|
|
parser_free( &pd );
|
|
}
|
|
|
|
/* save config */
|
|
void config_save( )
|
|
{
|
|
FILE *file = 0;
|
|
char file_name[512];
|
|
|
|
sprintf( file_name, "%s/%s", config.dir_name, CONFIG_FILE_NAME );
|
|
if ( ( file = fopen( file_name, "w" ) ) == 0 )
|
|
fprintf( stderr, "Cannot access config file '%s' to save settings\n", file_name );
|
|
else {
|
|
fprintf( file, "@\n" );
|
|
fprintf( file, "set_id_local»%i\n", config.levelset_id_local );
|
|
fprintf( file, "set_count_local»%i\n", config.levelset_count_local );
|
|
fprintf( file, "set_id_home»%i\n", config.levelset_id_home );
|
|
fprintf( file, "set_count_home»%i\n", config.levelset_count_home );
|
|
fprintf( file, "player_count»%i\n", config.player_count );
|
|
fprintf( file, "player0»%s\n", config.player_names[0] );
|
|
fprintf( file, "player1»%s\n", config.player_names[1] );
|
|
fprintf( file, "player2»%s\n", config.player_names[2] );
|
|
fprintf( file, "player3»%s\n", config.player_names[3] );
|
|
fprintf( file, "diff»%i\n", config.diff );
|
|
fprintf( file, "starting_level»%i\n", config.startlevel );
|
|
fprintf( file, "rel_warp_limit»%i\n", config.rel_warp_limit );
|
|
fprintf( file, "add_bonus_levels»%i\n", config.addBonusLevels );
|
|
fprintf( file, "left»%i\n", config.k_left );
|
|
fprintf( file, "right»%i\n", config.k_right );
|
|
fprintf( file, "fire_left»%i\n", config.k_lfire );
|
|
fprintf( file, "fire_right»%i\n", config.k_rfire );
|
|
fprintf( file, "return»%i\n", config.k_return );
|
|
fprintf( file, "turbo»%i\n", config.k_turbo );
|
|
fprintf( file, "rel_motion»%i\n", config.rel_motion );
|
|
fprintf( file, "grab»%i\n", config.grab );
|
|
fprintf( file, "motion_mod»%i\n", config.i_motion_mod);
|
|
fprintf( file, "convex»%i\n", config.convex );
|
|
fprintf( file, "linear_corner»%i\n", config.linear_corner );
|
|
fprintf( file, "random_angle»%i\n", config.random_angle );
|
|
fprintf( file, "maxballspeed»%i\n", config.maxballspeed_int1000 );
|
|
fprintf( file, "invert»%i\n", config.invert );
|
|
fprintf( file, "sound»%i\n", config.sound );
|
|
fprintf( file, "volume»%i\n", config.volume );
|
|
fprintf( file, "speech»%i\n", config.speech );
|
|
fprintf( file, "badspeech»%i\n", config.badspeech );
|
|
fprintf( file, "audio_buffer_size»%i\n", config.audio_buffer_size );
|
|
fprintf( file, "anim»%i\n", config.anim );
|
|
fprintf( file, "fullscreen»%i\n", config.fullscreen );
|
|
fprintf( file, "fade»%i\n", config.fade );
|
|
fprintf( file, "bonus_info»%i\n", config.bonus_info );
|
|
fprintf( file, "fps»%i\n", config.fps );
|
|
fprintf( file, "ball_level»%i\n", config.ball_level );
|
|
fprintf( file, "debris_level»%i\n", config.debris_level );
|
|
fprintf( file, "i_key_speed»%i\n", config.i_key_speed );
|
|
fprintf( file, "use_hints»%i\n", config.use_hints );
|
|
fprintf( file, "return_on_click»%i\n", config.return_on_click );
|
|
fprintf( file, "theme_id»%i\n", config.theme_id );
|
|
fprintf( file, "theme_count»%i\n", config.theme_count );
|
|
fprintf( file, "server»%s\n", config.server );
|
|
fprintf( file, "local_port»%s\n", config.local_port );
|
|
fprintf( file, "username»%s\n", config.username );
|
|
fprintf( file, "mp_diff»%i\n", config.mp_diff );
|
|
fprintf( file, "mp_rounds»%i\n", config.mp_rounds );
|
|
fprintf( file, "mp_frags»%i\n", config.mp_frags );
|
|
fprintf( file, "mp_balls»%i\n", config.mp_balls );
|
|
}
|
|
}
|