diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 7edd13cd2..c784c2906 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,9 @@ D1X-Rebirth Changelog +20090822 +-------- +main/ai.h, main/state.c: Make state.c more similar between D1X and D2X + 20090810 -------- arch/sdl/window.c, main/automap.c, main/game.c, main/inferno.c, main/multi.c: Make the game screen into a 'window', handling events through event_process diff --git a/main/ai.h b/main/ai.h index 330a8dcb8..da733596f 100644 --- a/main/ai.h +++ b/main/ai.h @@ -96,4 +96,7 @@ extern void ai_init_boss_for_ship(void); extern int Boss_been_hit; extern fix AI_proc_time; +extern int ai_save_state(PHYSFS_file * fp); +extern int ai_restore_state(PHYSFS_file *fp, int version); + #endif diff --git a/main/state.c b/main/state.c index ae33c05cb..26c888eaa 100644 --- a/main/state.c +++ b/main/state.c @@ -7,7 +7,7 @@ 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. +AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. */ @@ -17,12 +17,12 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. * */ - #include #include #include #include +#include "pstypes.h" #include "inferno.h" #include "segment.h" #include "textures.h" @@ -30,6 +30,7 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "object.h" #include "gamemine.h" #include "error.h" +#include "gamefont.h" #include "gameseg.h" #include "switch.h" #include "game.h" @@ -56,13 +57,11 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "pcx.h" #include "u_mem.h" #include "args.h" -//added 6/15/99 - Owen Evans -#include "strutil.h" -//end added -#include "gamefont.h" +#include "ai.h" +#include "state.h" #include "multi.h" #ifdef OGL -#include "ogl_init.h" +#include "gr.h" #endif #include "physfsx.h" @@ -83,15 +82,12 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #define THUMBNAIL_H 50 #define DESC_LENGTH 20 -extern int ai_save_state( PHYSFS_file * fp ); -extern int ai_restore_state( PHYSFS_file * fp ); - extern int Do_appearance_effect; extern fix Fusion_next_sound_time; extern int Laser_rapid_fire, Ugly_robot_cheat, Ugly_robot_texture; extern int Physics_cheat_flag; -extern int Lunacy; +extern int Lunacy; extern void do_lunacy_on(void); extern void do_lunacy_off(void); @@ -105,6 +101,7 @@ char dgss_id[4] = "DGSS"; uint state_game_id; +//------------------------------------------------------------------- void state_callback(int nitems,newmenu_item * items, int * last_key, int citem) { nitems = nitems; @@ -208,7 +205,7 @@ int state_get_savegame_filename(char * fname, char * dsc, char * caption ) } sc_last_item = -1; - choice = newmenu_do3( NULL, caption, NUM_SAVES+1, m, state_callback, state_default_item+1, NULL, -1, -1 ); + choice = newmenu_do3( NULL, caption, NUM_SAVES+1, m, state_callback, state_default_item + 1, NULL, -1, -1 ); for (i=0; i 0) { - sprintf( fname, filename[choice-1] ); + strcpy( fname, filename[choice-1] ); if ( dsc != NULL ) strcpy( dsc, desc[choice-1] ); state_default_item = choice - 1; return choice; @@ -362,12 +359,13 @@ int state_save_old_game(int slotnum, char * sg_name, player * sg_player, } +// ----------------------------------------------------------------------------------- int state_save_all(int between_levels) { - int rval; - char filename[128], desc[DESC_LENGTH+1]; + int rval; + char filename[128], desc[DESC_LENGTH+1]; -#ifndef SHAREWARE +#ifdef NETWORK if ( Game_mode & GM_MULTI ) { return 0; } @@ -391,30 +389,37 @@ int state_save_all(int between_levels) int state_save_all_sub(char *filename, char *desc, int between_levels) { int i,j; - PHYSFS_file * fp; + PHYSFS_file *fp; grs_canvas * cnv; ubyte *pal; #ifdef OGL GLint gl_draw_buffer; #endif + #ifndef NDEBUG + if (GameArg.SysUsePlayersDir && strncmp(filename, "Players/", 8)) + Int3(); + #endif + fp = PHYSFSX_openWriteBuffered(filename); if ( !fp ) { + nm_messagebox(NULL, 1, TXT_OK, "Error writing savegame.\nPossibly out of disk\nspace."); start_time(); return 0; } //Save id - PHYSFS_write( fp, dgss_id, sizeof(char)*4, 1 ); + PHYSFS_write(fp, dgss_id, sizeof(char) * 4, 1); //Save version i = STATE_VERSION; - PHYSFS_write( fp, &i, sizeof(int), 1 ); + PHYSFS_write(fp, &i, sizeof(int), 1); //Save description - PHYSFS_write( fp, desc, sizeof(char)*DESC_LENGTH, 1 ); + PHYSFS_write(fp, desc, sizeof(char) * DESC_LENGTH, 1); // Save the current screen shot... + cnv = gr_create_canvas( THUMBNAIL_W, THUMBNAIL_H ); if ( cnv ) { @@ -429,7 +434,7 @@ int state_save_all_sub(char *filename, char *desc, int between_levels) render_frame(0); -#ifdef OGL +#if defined(OGL) buf = d_malloc(THUMBNAIL_W * THUMBNAIL_H * 3); glGetIntegerv(GL_DRAW_BUFFER, &gl_draw_buffer); glReadBuffer(gl_draw_buffer); @@ -443,9 +448,10 @@ int state_save_all_sub(char *filename, char *desc, int between_levels) } d_free(buf); #endif + pal = gr_palette; - PHYSFS_write( fp,cnv->cv_bitmap.bm_data, THUMBNAIL_W * THUMBNAIL_H, 1); + PHYSFS_write(fp, cnv->cv_bitmap.bm_data, THUMBNAIL_W * THUMBNAIL_H, 1); gr_set_current_canvas(cnv_save); gr_free_canvas( cnv ); @@ -454,40 +460,35 @@ int state_save_all_sub(char *filename, char *desc, int between_levels) { ubyte color = 0; for ( i=0; i Last_level || - next_level < 0 || next_level > Last_level) { - nm_messagebox( NULL, 1, "Ok", "Error!\nCannot load level %d\nThe shareware version only supports savegames of shareware levels!", - between_levels? next_level:current_level); - PHYSFS_close(fp); - return 0; - } -#endif //Restore GameTime PHYSFS_read(fp, &GameTime, sizeof(fix), 1); @@ -727,13 +721,14 @@ int state_restore_all_sub(char *filename) PHYSFS_read(fp, &Difficulty_level, sizeof(int), 1); // Restore the cheats enabled flag + PHYSFS_read(fp, &Cheats_enabled, sizeof(int), 1); PHYSFS_read(fp, &Game_turbo_mode, sizeof(int), 1); if ( !between_levels ) { Do_appearance_effect = 0; // Don't do this for middle o' game stuff. - ObjectStartLocation = PHYSFS_tell( fp ); + ObjectStartLocation = PHYSFS_tell(fp); RetryObjectLoading: //Clear out all the objects from the lvl file for (segnum=0; segnum <= Highest_segment_index; segnum++) @@ -744,7 +739,7 @@ RetryObjectLoading: PHYSFS_read(fp, &i, sizeof(int), 1); Highest_object_index = i-1; if ( !BogusSaturnShit ) - PHYSFS_read(fp, Objects, sizeof(object)*i, 1); + PHYSFS_read(fp, Objects, sizeof(object) * i, 1); else { ubyte tmp_object[sizeof(object)]; for (i=0; i<=Highest_object_index; i++ ) { @@ -801,7 +796,7 @@ RetryObjectLoading: } } } - + //Restore door info PHYSFS_read(fp, &i, sizeof(int), 1); Num_open_doors = i; @@ -867,7 +862,7 @@ RetryObjectLoading: PHYSFS_close(fp); // Load in bitmaps, etc.. -// piggy_load_level_data();//already used page_in_textures in StartNewLevelSub, so no need for this here. -MPM +//!! piggy_load_level_data(); //already done by StartNewLevelSub() return 1; }