1 /* $Id: kmine.c,v 1.6 2005-01-25 20:46:55 schaffner Exp $ */
3 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
4 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
5 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
6 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
7 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
8 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
9 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
10 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
11 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
12 COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
17 * Functions to change entire mines.
22 static char rcsid[] = "$Id: kmine.c,v 1.6 2005-01-25 20:46:55 schaffner Exp $";
41 #include "texpage.h" // For texpage_goto_first
51 #define MINESAVE_CRIPPLED 0
53 char mine_filename[PATH_MAX] = "*.MIN";
54 char sit_filename[PATH_MAX] = "*.SIT";
56 #define MAX_NAME_LENGTH PATH_MAX
58 // See if filename f contains an extent. If not, add extent ext.
59 void checkforext( char * f, char *ext )
63 for (i=1; i<MAX_NAME_LENGTH; i++ ) {
67 if ((f[i] == ' ') || (f[i]==0) ) {
87 // See if filename f contains an extent. If not, add extent ext.
88 void set_extension( char * f, char *ext )
92 for (i=1; i<MAX_NAME_LENGTH-4; i++ ) {
93 if ((f[i]=='.') || (f[i] == ' ') || (f[i]==0) ) {
104 #if MINESAVE_CRIPPLED
107 char ErrorMessage[200];
109 sprintf( ErrorMessage, "Save Mine not available in demo version.\n");
110 MessageBox( -2, -2, 1, ErrorMessage, "Ok" );
115 #if !MINESAVE_CRIPPLED
119 // med_save_mine("TEMP.MIN");
120 if (ui_get_filename( mine_filename, "*.MIN", "SAVE MINE" ))
122 checkforext(mine_filename, "MIN");
123 if (med_save_mine(mine_filename))
135 texpage_goto_first();
137 LargeView.ev_matrix = vmd_identity_matrix; //FrontView.ev_matrix;
138 set_view_target_from_segment(Cursegp);
139 vm_vec_make(&Seg_scale,DEFAULT_X_SIZE,DEFAULT_Y_SIZE,DEFAULT_Z_SIZE);
140 Update_flags = UF_WORLD_CHANGED;
141 SetPlayerFromCurseg();
142 SetPlayerPosition(); //say default is permanant position
147 gamestate_not_restored = 0;
150 Game_mode = GM_UNKNOWN;
151 Current_level_num = 0; //0 means not a real game
159 char * MenuItems[] = { "New mine",
165 x = MenuX( -1, -1, 5, MenuItems );
181 Update_flags = UF_ALL;
187 // -----------------------------------------------------------------------------
188 // returns 1 if error, else 0
189 int med_load_situation(char * filename)
191 if (filename[0] == 97)
196 //@@ CFILE * LoadFile;
197 //@@ char mine_name[MAX_NAME_LENGTH];
198 //@@ char dir_name[_MAX_DIR];
199 //@@ char mine_path[MAX_NAME_LENGTH];
203 //@@ LoadFile = cfopen( filename, "rt" );
204 //@@ if (!LoadFile) {
205 //@@ char ErrorMessage[200];
207 //@@ sprintf( ErrorMessage, "ERROR: Unable to open %s\n", filename );
208 //@@ MessageBox( -2, -2, 1, ErrorMessage, "Ok" );
212 //@@ fscanf(LoadFile, "%s", &mine_name);
213 //@@ mprintf((0, "Mine name = [%s]\n", mine_name));
215 //@@ _splitpath(filename,mine_path,dir_name,NULL,NULL);
216 //@@ strcat(mine_path,dir_name);
217 //@@ strcat(mine_path,mine_name);
219 //@@ mprintf((0, "Mine path = [%s]\n", mine_path));
221 //@@ med_load_mine(mine_path);
223 //@@ fscanf(LoadFile, "%x %x %x", &pos.x, &pos.y, &pos.z);
224 //@@ mprintf((0, "Load Position = %8x %8x %8x\n", pos.x, pos.y, pos.z));
225 //@@ mprintf((0, "\n"));
227 //@@ fscanf(LoadFile, "%x %x %x", &mat[0], &mat[1], &mat[2]);
228 //@@ mprintf((0, "%8x %8x %8x\n", mat[0], mat[1], mat[2]));
230 //@@ fscanf(LoadFile, "%x %x %x", &mat[3], &mat[4], &mat[5]);
231 //@@ mprintf((0, "%8x %8x %8x\n", mat[3], mat[4], mat[5]));
233 //@@ fscanf(LoadFile, "%x %x %x", &mat[6], &mat[7], &mat[8]);
234 //@@ mprintf((0, "%8x %8x %8x\n", mat[6], mat[7], mat[8]));
235 //@@ mprintf((0, "\n"));
237 //@@ fscanf(LoadFile, "%i\n", &ConsoleObject->segnum);
239 //@@ cfclose( LoadFile );
241 //@@ ConsoleObject->pos = pos;
242 //@@ ConsoleObject->orient.m1 = mat[0]; ConsoleObject->orient.m2 = mat[1]; ConsoleObject->orient.m3 = mat[2];
243 //@@ ConsoleObject->orient.m4 = mat[3]; ConsoleObject->orient.m5 = mat[4]; ConsoleObject->orient.m6 = mat[5];
244 //@@ ConsoleObject->orient.m7 = mat[6]; ConsoleObject->orient.m8 = mat[7]; ConsoleObject->orient.m9 = mat[8];
249 // -----------------------------------------------------------------------------
250 int med_save_situation(char * filename)
253 char mine_name[MAX_NAME_LENGTH];
255 SaveFile = cfopen( filename, "wt" );
257 char ErrorMessage[200];
259 sprintf( ErrorMessage, "ERROR: Unable to open %s\n", filename );
260 MessageBox( -2, -2, 1, ErrorMessage, "Ok" );
265 // strcpy(mine_name, filename);
266 _splitpath(filename, NULL, NULL, mine_name, NULL);
267 set_extension(mine_name, "min");
268 fprintf(SaveFile, "%s\n", mine_name);
270 // Write player position.
271 fprintf(SaveFile, "%x %x %x\n",(unsigned int) ConsoleObject->pos.x,(unsigned int) ConsoleObject->pos.y,(unsigned int) ConsoleObject->pos.z);
273 // Write player orientation.
274 fprintf(SaveFile, "%8x %8x %8x\n",(unsigned int) ConsoleObject->orient.rvec.x,(unsigned int) ConsoleObject->orient.rvec.y,(unsigned int) ConsoleObject->orient.rvec.z);
275 fprintf(SaveFile, "%8x %8x %8x\n",(unsigned int) ConsoleObject->orient.uvec.x,(unsigned int) ConsoleObject->orient.uvec.y,(unsigned int) ConsoleObject->orient.uvec.z);
276 fprintf(SaveFile, "%8x %8x %8x\n",(unsigned int) ConsoleObject->orient.fvec.x,(unsigned int) ConsoleObject->orient.fvec.y,(unsigned int) ConsoleObject->orient.fvec.z);
277 fprintf(SaveFile, "%i\n", ConsoleObject->segnum);
279 mprintf((0, "Save Position = %8x %8x %8x\n", ConsoleObject->pos.x, ConsoleObject->pos.y, ConsoleObject->pos.z));
282 mprintf((0, "%8x %8x %8x\n", ConsoleObject->orient.rvec.x, ConsoleObject->orient.rvec.y, ConsoleObject->orient.rvec.z));
283 mprintf((0, "%8x %8x %8x\n", ConsoleObject->orient.uvec.x, ConsoleObject->orient.uvec.y, ConsoleObject->orient.uvec.z));
284 mprintf((0, "%8x %8x %8x\n", ConsoleObject->orient.fvec.x, ConsoleObject->orient.fvec.y, ConsoleObject->orient.fvec.z));
292 // -----------------------------------------------------------------------------
293 int SaveSituation(void)
295 if (ui_get_filename( sit_filename, "*.SIT", "Save Situation" )) {
296 set_extension(sit_filename, "MIN");
297 if (med_save_mine(sit_filename)) {
298 mprintf((0, "Unable to save mine in SaveSituation.\n"));
302 set_extension(sit_filename, "SIT");
303 if (med_save_situation(sit_filename))
310 // -----------------------------------------------------------------------------
311 // Load a situation file which consists of x,y,z, orientation matrix, mine name.
312 int LoadSituation(void)
315 if (ui_get_filename( sit_filename, "*.sit", "Load Situation" )) {
316 checkforext(sit_filename, "SIT");
317 if (med_load_situation(sit_filename))
319 // set_view_target_from_segment(Cursegp);
320 Update_flags = UF_WORLD_CHANGED;
321 // SetPlayerFromCurseg();