Nilorea Library
C utilities for networking, threading, graphics
n_games.c
Go to the documentation of this file.
1
9#include "nilorea/n_games.h"
10
16{
17 if( !(*game) )
18 {
19 Malloc( (*game), GAME_ENV, 1 );
20 if( !(*game ) )
21 {
22 n_log( LOG_ERR, "Could not allocate a new game env" );
23 return FALSE ;
24 }
25 }
26 (*game) -> BLUR = 1 ;
27 (*game) -> fade_value = 20 ;
28 (*game) -> DONE = 0 ;
29 (*game) -> GFX_CONFIG_MODE = GFX_DIRECTX_WIN ;
30 (*game) -> CPU_MODE = CPU_USE_FULL ;
31 (*game) -> nb_min_particles = 0 ;
32 (*game) -> loop_time = 0 ;
33 (*game) -> draw_time = 0 ;
34 (*game) -> logic_time = 0 ;
35 (*game) -> wait_for_slowing_down_cpu = 0 ;
36 (*game) -> GFX_UPDATE_RATE = 20000 ;
37 (*game) -> LOGIC_RATE = 10000 ;
38 (*game) -> real_framerate = 0 ;
39 (*game) -> draw_time = 0 ;
40 (*game) -> score = 0 ;
41 (*game) -> lifes = 100 ;
42 (*game) -> level = 1 ;
43 (*game) -> x = 0 ;
44 (*game) -> y = 0 ;
45 (*game) -> z = 0 ;
46 (*game) -> left_attack = 0 ;
47 (*game) -> right_attack = 0 ;
48 (*game) -> scrbuf = NULL ;
49
50 return TRUE;
51} /* init_game_env */
52
53
54
59{
60 if( (*game) )
61 {
62 if( (*game) -> scrbuf )
63 destroy_bitmap( (*game) -> scrbuf );
64 Free( (*game ) );
65 }
66} /* destroy_game_env */
67
68
69
75GAME_ENV *load_game_config( char *config_name )
76{
77 FILE *config = NULL ;
78 char strbuf[ 1024 ] = "" ;
79
80 /* CONFIGURATION STAGE */
81 config = fopen( config_name, "rt" );
82
83 if( !config )
84 {
85 n_log( LOG_ERR, "Error %s opening %s !", strerror( errno ), config_name );
86 return NULL ;
87 }
88
89 GAME_ENV *game = NULL ;
90 init_game_env( &game );
91 if( !game )
92 {
93 n_log( LOG_ERR, "Error allocating a new game object for %s !", config_name );
94 goto error ;
95 }
96
97 if( fgets( strbuf, 1024, config ) == NULL ) /*error reading comment*/
98 {
99 n_log( LOG_ERR, "FATAL ERROR: Can not read comment ( line 1 ) in config.txt file !" );
100 goto error ;
101 }
102
103 if( fgets( strbuf, 1024, config ) == NULL )
104 {
105 n_log( LOG_ERR, "FATAL ERROR: Can not read GFX_CONFIG_MODE in config.txt file !" );
106 goto error ;
107 }
108 int it = 0 ;
109 while( it < 1024 && strbuf[ it ] != '\0' )
110 {
111 if( strbuf[ it ] == '\n' )
112 strbuf[ it ] = '\0' ;
113 it ++ ;
114 }
115
116 if( strcmp( strbuf, "GFX_AUTODETECT" ) == 0 )
117 game -> GFX_CONFIG_MODE = GFX_AUTODETECT;
118 else if( strcmp( strbuf, "GFX_AUTODETECT_WINDOWED" ) == 0 )
119 game -> GFX_CONFIG_MODE = GFX_AUTODETECT_WINDOWED;
120 else if( ustrcmp( strbuf, "GFX_DIRECTX_WIN" ) == 0 )
121 game -> GFX_CONFIG_MODE = GFX_DIRECTX_WIN;
122 else if( ustrcmp( strbuf, "GFX_DIRECTX" ) == 0 )
123 game -> GFX_CONFIG_MODE = GFX_DIRECTX;
124 else
125 {
126 n_log( LOG_NOTICE, "WARNING: NO USABLE GFX_MODE LOADED FROM CONFIG FILE ! USING DEFAULT GFX_DIRECTX_WIN! tmpstr:\"%s\"", strbuf );
127 game -> GFX_CONFIG_MODE = GFX_DIRECTX_WIN;
128 }
129
130 if( fgets( strbuf, 1024, config ) == NULL ) /*error reading comment*/
131 {
132 n_log( LOG_ERR, "FATAL ERROR: Can not read comment ( line 3 ) in config.txt file !" );
133 goto error ;
134 }
135
136 if( fgets( strbuf, 1024, config ) == NULL )
137 {
138 n_log( LOG_ERR, "FATAL ERROR: Can not read CPU_MODE in config.txt file ! \n");
139 goto error ;
140 }
141
142 if( strncmp( strbuf, "CPU_USE_FULL", 12 ) == 0 )
143 game -> CPU_MODE = CPU_USE_FULL;
144 else if( strncmp( strbuf, "CPU_USE_NICE", 12 ) == 0 )
145 game -> CPU_MODE = CPU_USE_NICE;
146 else if( strncmp( strbuf, "CPU_USE_LESS", 12 ) == 0 )
147 game -> CPU_MODE = CPU_USE_LESS;
148 else
149 n_log( LOG_NOTICE, "WARNING: NO USABLE CPU_MODE LOADED FROM CONFIG FILE ! USING DEFAULT CPU_FULL_USE !\n" );
150
151
152 if( fgets( strbuf, 1024, config ) == NULL ) /*error reading comment*/
153 {
154 n_log( LOG_ERR, "FATAL ERROR: Can not read comment ( line 7 ) in config.txt file !" );
155 goto error ;
156 }
157
158 if( fgets( strbuf, 1024, config ) == NULL )
159 {
160 n_log( LOG_ERR, "FATAL ERROR: Can not read nb_min_particles in config.txt file !");
161 goto error ;
162 }
163 game -> nb_min_particles = strtol( strbuf, NULL, 10 );
164 if( game -> nb_min_particles < 10 )
165 game -> nb_min_particles = 10 ;
166
167 if( fgets( strbuf, 1024, config ) == NULL ) /*error reading comment*/
168 {
169 n_log( LOG_ERR, "FATAL ERROR: Can not read comment ( line 9 ) in config.txt file !" );
170 goto error ;
171 }
172
173 if( fgets( strbuf, 1024, config ) == NULL )
174 {
175 n_log( LOG_ERR, "FATAL ERROR: Can not read DRAWING_UPDATE_RATE in config.txt file !");
176 goto error ;
177 }
178
179 game -> GFX_UPDATE_RATE = strtol( strbuf, NULL, 10 );
180
181 if( game -> GFX_UPDATE_RATE < 0 )
182 {
183 n_log( LOG_NOTICE, "WARNING: You can not have a negative or zero GFX_UPDATE_RATE\nDefault value ( 20000 ) will be used" );
184 game -> GFX_UPDATE_RATE = 20000;
185 }
186 else if( game -> GFX_UPDATE_RATE > 1000000 )
187 {
188 n_log( LOG_NOTICE, "WARNING: You would not want to have a 1 second GFX_UPDATE_RATE, no ?\nDefault value ( 20000 ) will be used" );
189 game -> GFX_UPDATE_RATE = 20000;
190 }
191
192 if( fgets( strbuf, 1024, config ) == NULL ) /*error reading comment*/
193 {
194 n_log( LOG_ERR, "FATAL ERROR: Can not read comment ( line 11 ) in config.txt file ! \n");
195 goto error ;
196 }
197
198 if( fgets( strbuf, 1024, config ) == NULL )
199 {
200 n_log( LOG_ERR, "FATAL ERROR: Can not read LOGIC_RATE in config.txt file !");
201 goto error ;
202 }
203
204 game -> LOGIC_RATE = strtol( strbuf, NULL, 10 );
205
206 if( game -> LOGIC_RATE < 0 )
207 {
208 n_log( LOG_NOTICE, "WARNING: You can not have a negative or zero LOGIC_RATE\nDefault value ( 10000 ) will be used" );
209 game -> LOGIC_RATE = 10000;
210 }
211 else
212 {
213 if( game -> LOGIC_RATE > 1000000 )
214 {
215 n_log( LOG_NOTICE, "WARNING: You would not want to have a 1 second LOGIC_RATE, no ?\nDefault value ( 10000 ) will be used" );
216 game -> LOGIC_RATE = 20000;
217 }
218 }
219 fclose( config );
220 goto clean ;
221
222error:
223 destroy_game_env( &game );
224
225clean:
226
227 return game ;
228} /* destroy_game_env */
#define Malloc(__ptr, __struct, __size)
Malloc Handler to get errors and set to 0.
Definition: n_common.h:183
#define Free(__ptr)
Free Handler to get errors.
Definition: n_common.h:256
void destroy_game_env(GAME_ENV **game)
Definition: n_games.c:58
#define CPU_USE_LESS
wait more
Definition: n_games.h:30
#define CPU_USE_FULL
full use of CPU
Definition: n_games.h:26
GAME_ENV * load_game_config(char *config_name)
load a config from file
Definition: n_games.c:75
int init_game_env(GAME_ENV **game)
Definition: n_games.c:15
#define CPU_USE_NICE
let the other process have some times
Definition: n_games.h:28
Game Environment structure.
Definition: n_games.h:34
#define n_log(__LEVEL__,...)
Logging function wrapper to get line and func.
Definition: n_log.h:74
#define LOG_ERR
error conditions
Definition: n_log.h:58
#define LOG_NOTICE
normal but significant condition
Definition: n_log.h:62
Games helpers functions.