1 /* $Id: kgame.c,v 1.6 2005-06-22 08:58:11 chris 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 * Game Loading editor functions
22 static char rcsid[] = "$Id: kgame.c,v 1.6 2005-06-22 08:58:11 chris Exp $";
39 char game_filename[PATH_MAX] = "*.RL2";
41 extern void checkforext( char * f, char *ext );
43 void checkforgamext( char * f )
47 for (i=1; i<strlen(f); i++ )
49 if (f[i]=='.') return;
51 if ((f[i]==' '||f[i]==0) )
73 //these variables store the "permanant" player position, which overrides
74 //whatever the player's position happens to be when the game is saved
75 int Perm_player_segnum=-1; //-1 means position not set
76 vms_vector Perm_player_position;
77 vms_matrix Perm_player_orient;
79 //set the player's "permanant" position from the current position
80 int SetPlayerPosition()
82 Perm_player_position = ConsoleObject->pos;
83 Perm_player_orient = ConsoleObject->orient;
84 Perm_player_segnum = ConsoleObject->segnum;
86 editor_status("Player initial position set");
91 // returns 1 if successful
92 // returns 0 if unsuccessful
97 if (gamestate_not_restored) {
98 sprintf( Message, "Game State has not been restored...\nContinue?\n");
99 if (MessageBox( -2, -2, 2, Message, "NO", "Yes" )==1)
103 if (ui_get_filename( game_filename, "*.RL2", "SAVE GAME" )) {
105 vms_vector save_pos = ConsoleObject->pos;
106 vms_matrix save_orient = ConsoleObject->orient;
107 int save_segnum = ConsoleObject->segnum;
109 checkforgamext(game_filename);
111 if (Perm_player_segnum > Highest_segment_index)
112 Perm_player_segnum = -1;
114 if (Perm_player_segnum!=-1) {
115 if (get_seg_masks(&Perm_player_position, Perm_player_segnum, 0, __FILE__, __LINE__).centermask == 0)
117 ConsoleObject->pos = Perm_player_position;
118 obj_relink(ConsoleObject-Objects,Perm_player_segnum);
119 ConsoleObject->orient = Perm_player_orient;
122 Perm_player_segnum=-1; //position was bogus
124 saved_flag=save_level(game_filename);
125 if (Perm_player_segnum!=-1) {
126 int found_save_segnum;
128 if (save_segnum > Highest_segment_index)
131 ConsoleObject->pos = save_pos;
132 found_save_segnum = find_point_seg(&save_pos,save_segnum);
133 if (found_save_segnum == -1) {
134 compute_segment_center(&save_pos, &(Segments[save_segnum]));
135 found_save_segnum = save_segnum;
138 obj_relink(ConsoleObject-Objects,found_save_segnum);
139 ConsoleObject->orient = save_orient;
148 // returns 1 if successful
149 // returns 0 if unsuccessful
153 if (ui_get_filename( game_filename, "*.RL2", "LOAD GAME" ))
155 checkforgamext(game_filename);
156 if (load_level(game_filename))
158 Current_level_num = 0; //not a real level
159 gamestate_not_restored = 0;
160 Update_flags = UF_WORLD_CHANGED;
161 Perm_player_position = ConsoleObject->pos;
162 Perm_player_orient = ConsoleObject->orient;
163 Perm_player_segnum = ConsoleObject->segnum;
169 //called whenever a new mine is created, so new mine doesn't get name
170 //of last saved mine as default
173 strcpy(game_filename,"*.LVL");