1 /* 2 * Seven Kingdoms: Ancient Adversaries 3 * 4 * Copyright 1997,1998 Enlight Software Ltd. 5 * 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 * 19 */ 20 21 #ifdef DEBUG 22 #include <OSYS.h> 23 #include <OMISC.h> 24 #include <OMOUSE.h> 25 #include <OMOUSE2.h> 26 #include <stdio.h> 27 28 #define MAX_SEED_TABLE_SIZE 10 * 4000 29 static long random_seed_backup_table[MAX_SEED_TABLE_SIZE]; 30 static int random_seed_writen_pos; 31 static int random_seed_backup_pos; 32 static int random_seed_backup_table_data_size; 33 static char file_opened_flag = 0; 34 static long match_seed; 35 36 37 //-------- Begin of function Sys::sp_create_seed_file --------// sp_create_seed_file(char * filename)38void Sys::sp_create_seed_file(char *filename) 39 { 40 seedCompareFile.file_create(filename); 41 //debug_seed_status_flag = 2; // 1 for saving, 2 for comparing 42 //random_seed_backup_pos = 0; 43 random_seed_writen_pos = 0; 44 45 file_opened_flag = 1; 46 } 47 //--------- End of function Sys::sp_create_seed_file ---------// 48 49 50 //-------- Begin of function Sys::sp_close_seed_file --------// sp_close_seed_file()51void Sys::sp_close_seed_file() 52 { 53 seedCompareFile.file_close(); 54 //debug_seed_status_flag = NO_DEBUG_SYN; 55 //random_seed_backup_pos = 0; 56 57 file_opened_flag = 0; 58 sp_seed_pos_reset(); 59 } 60 //--------- End of function Sys::sp_close_seed_file ---------// 61 62 63 //-------- Begin of function Sys::sp_load_seed_file --------// sp_load_seed_file()64void Sys::sp_load_seed_file() 65 { 66 //debug_seed_status_flag = NO_DEBUG_SYN; 67 68 File headerFile; 69 headerFile.file_open("nhead.rs"); 70 71 long firstSeed; 72 if(headerFile.file_size() >= sizeof(long)*2) 73 { 74 firstSeed = headerFile.file_get_long(); 75 if(match_seed) // internal loading 76 { 77 // do nothing 78 int debug = 0; 79 } 80 else // load from user action 81 { 82 if(misc.get_random_seed() != firstSeed) 83 return; // seed file don't match the save game 84 } 85 } 86 else 87 return; // seed file don't match the save game 88 89 if(!seedCompareFile.file_open("nseed.rs")) 90 return; 91 92 random_seed_backup_pos = 0; 93 //debug_seed_status_flag = DEBUG_SYN_AUTO_LOAD; 94 95 random_seed_backup_table_data_size = headerFile.file_get_long(); // read the table size 96 headerFile.file_close(); 97 98 //------------ read the table content ------------// 99 for(int i=0; i<random_seed_backup_table_data_size; i++) 100 random_seed_backup_table[i] = seedCompareFile.file_get_long(); 101 102 file_opened_flag = 1; 103 } 104 //--------- End of function Sys::sp_load_seed_file ---------// 105 106 107 //-------- Begin of function Sys::sp_record_match_seed --------// sp_record_match_seed()108void Sys::sp_record_match_seed() 109 { 110 match_seed = misc.get_random_seed(); 111 } 112 //--------- End of function Sys::sp_record_match_seed ---------// 113 114 115 //-------- Begin of function Sys::sp_record_seed --------// sp_record_seed()116void Sys::sp_record_seed() 117 { 118 random_seed_backup_table[random_seed_backup_pos] = misc.get_random_seed(); 119 random_seed_backup_pos++; 120 } 121 //--------- End of function Sys::sp_record_seed ---------// 122 123 124 //-------- Begin of function Sys::sp_write_seed --------// sp_write_seed()125void Sys::sp_write_seed() 126 { 127 if(random_seed_backup_pos==0) 128 return; 129 130 if(file_opened_flag==0) 131 return; 132 133 /* 134 seedCompareFile.file_put_long(match_seed); 135 seedCompareFile.file_put_long(random_seed_backup_pos); 136 137 for(int i=0; i<random_seed_backup_pos; i++) 138 seedCompareFile.file_put_long(random_seed_backup_table[i]); 139 */ 140 141 File headerFile; 142 headerFile.file_create("nhead.rs"); 143 headerFile.file_put_long(match_seed); 144 headerFile.file_put_long(random_seed_writen_pos + random_seed_backup_pos); 145 headerFile.file_close(); 146 147 if(random_seed_writen_pos==0) 148 { 149 for(int i=0; i<random_seed_backup_pos; i++) 150 seedCompareFile.file_put_long(random_seed_backup_table[i]); 151 } 152 else 153 { 154 seedCompareFile.file_seek(0L, SEEK_END); 155 for(int i=0; i<random_seed_backup_pos; i++) 156 seedCompareFile.file_put_long(random_seed_backup_table[i]); 157 } 158 159 random_seed_writen_pos += random_seed_backup_pos; 160 random_seed_backup_pos = 0; 161 } 162 //--------- End of function Sys::sp_write_seed ---------// 163 164 165 //-------- Begin of function Sys::sp_compare_seed --------// sp_compare_seed()166void Sys::sp_compare_seed() 167 { 168 if(file_opened_flag==0) 169 return; 170 171 long gameSeed, saveSeed; 172 173 gameSeed = misc.get_random_seed(); 174 saveSeed = random_seed_backup_table[random_seed_backup_pos]; 175 176 if(random_seed_backup_pos>130) 177 int debug = 0; 178 179 if( gameSeed != saveSeed ) 180 err.run( "Error: random seeds not sync." ); 181 182 random_seed_backup_pos++; 183 184 if(random_seed_backup_pos>=random_seed_backup_table_data_size) 185 { 186 sp_close_seed_file(); 187 //debug_seed_status_flag = 0; 188 if(debug_seed_status_flag==DEBUG_SYN_AUTO_LOAD) 189 //debug_seed_status_flag = DENUG_SYN_AUTO_SAVE; 190 // DIK_LBRACKET = 0x1A 191 mouse.add_key_event(0x1A, misc.get_time()); // save seed for comparison 192 else 193 debug_seed_status_flag = NO_DEBUG_SYN; 194 } 195 } 196 //--------- End of function Sys::sp_compare_seed ---------// 197 198 199 //-------- Begin of function Sys::sp_seed_pos_reset --------// sp_seed_pos_reset()200void Sys::sp_seed_pos_reset() 201 { 202 random_seed_backup_pos = 0; 203 } 204 //--------- End of function Sys::sp_seed_pos_reset ---------// 205 206 207 //-------- Begin of function Sys::sp_seed_pos_set --------// sp_seed_pos_set(int pos)208void Sys::sp_seed_pos_set(int pos) 209 { 210 random_seed_backup_pos = pos; 211 } 212 //--------- End of function Sys::sp_seed_pos_set ---------// 213 #endif 214