Darth Maximius wrote:К Игорю: скажите, что где в записи игры хранится -это секрет? Может, Олега осчастливите? Подскажите ему, пожалуйста, чтобы он не бился головой об стену с утилитой.
Мне не жалко. Ковыряйтесь. Олегу или любому другому, разбирающемуся в программировании, этого будет достаточно, чтобы понять формат файла записи состояния игры. И написать полноценный редактор сейвов если в голову взбредет.
примечание: массив событий и скриптов реально не используются. просто задел на будущее.
// saving game state -------------------------------------------------------- //
procedure save_game_state;
var
F : File;
i,ii: longint;
S : TMap_Massive;
S2: TUnit_Massive;
S3: TTown_Massive;
S6: TAirbase_Massive;
S7: TFort_Massive;
S4: THeader_Scn;
S5: byte;
S8: integer;
S9: word;
S10: TLost_data;
S11: TEvents;
S12: TCurScript;
name_f:string;
begin
// обязательно!!!
config_ai_help_turn[1]:=0;
config_ai_help_turn[2]:=0;
config_ai_help_turn[3]:=0;
config_ai_help_turn[4]:=0;
config_ai_help_turn[5]:=0;
number_ai_help_turn:=0;
name_f:='game' +inttostr(sav_list.current_pos) + '.sav';
//
sell_number:=1;
load_sav_string:=load_sav_texts[47];
form1.logo_at_loading_scenario;
//
load_sav_string2:=load_sav_texts[25];
form1.logo_at_loading_scenario;
// тоже пока временно
Hdr_Massive.x_map_left_top:=x_map;
Hdr_Massive.y_map_left_top:=y_map;
for i:=1 to 321{361}{362}{874}{878}{956} do Hdr_Massive.temporary[i]:=0;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[26];
// запись заголовка сценария
// временный вариант
AssignFile(F,ExtractFilePath(Application.ExeName) + 'save\' + name_f);
FileMode:=2;
Rewrite(F,1);
move(Hdr_Massive, S4, 1024);
BlockWrite(F,S4,1024);
// запись карты
for ii:=0 to map_height-1 do begin
for i:=0 to map_width-1 do begin
with Map_Massive [ii,i] do
begin
S:=Map_Massive[ii,i];
BlockWrite(F,S,9);
end;
end;
form1.logo_at_loading_scenario;
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[27];
form1.logo_at_loading_scenario;
// запись списка типов юнитов для данного сценария
for i:=1 to 2800 do
begin
S5:=list_type_units_scen[i];
BlockWrite(F,S5,1);
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[28];
form1.logo_at_loading_scenario;
// запись списка данных о городах и портах
for ii:=1 to 6000 do begin
with Twn_Massive [ii] do
begin
S3:=Twn_Massive[ii];
BlockWrite(F,S3,50);
end;
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[29];
form1.logo_at_loading_scenario;
// запись списка данных о аэродромах
for ii:=6001 to 8000 do begin
with Arb_Massive [ii] do
begin
S6:=Arb_Massive[ii];
BlockWrite(F,S6,50);
end;
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[30];
form1.logo_at_loading_scenario;
// запись списка данных о фортах
for ii:=8001 to 10000 do begin
with Frt_Massive [ii] do
begin
S7:=Frt_Massive[ii];
BlockWrite(F,S7,50);
end;
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[31];
form1.logo_at_loading_scenario;
// запись списка юнитов
for ii:=0 to 19999 do begin
with Unt_Massive [ii] do
begin
S2:=Unt_Massive[ii];
BlockWrite(F,S2,200);
end;
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[32];
form1.logo_at_loading_scenario;
// запись листа техники для данного сценария
for i:=1 to 3000 do
begin
S5:=list_tech_scen[i];
BlockWrite(F,S5,1);
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[33];
form1.logo_at_loading_scenario;
// запись техники в запасе в быстром пуле
for i:=1 to 114000 do
begin
S8:=fast_pool_tech[i];
BlockWrite(F,S8,4);
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[34];
form1.logo_at_loading_scenario;
// запись техники в запасе в медленном пуле
for i:=1 to 114000 do
begin
S8:=slow_pool_tech[i];
BlockWrite(F,S8,4);
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[35];
form1.logo_at_loading_scenario;
// запись техники в ремонте
for i:=1 to 114000 do
begin
S8:=remont_pool_tech[i];
BlockWrite(F,S8,4);
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[36];
form1.logo_at_loading_scenario;
// запись техники в производстве
for i:=1 to 114000 do
begin
S9:=proizv_pool_tech[i];
BlockWrite(F,S9,2);
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[37];
form1.logo_at_loading_scenario;
// запись массива потерь
for i:=1 to 38 do
begin
S10:=lost_data[i];
BlockWrite(F,S10,200);
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[38];
form1.logo_at_loading_scenario;
// запись массива элитного резерва
for i:=1 to 38 do
begin
S8:=elite_reserv[i];
BlockWrite(F,S8,4);
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[39];
form1.logo_at_loading_scenario;
// запись массива необученного резерва
for i:=1 to 38 do
begin
S8:=conscript_reserv[i];
BlockWrite(F,S8,4);
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[40];
form1.logo_at_loading_scenario;
// запись массива раненых
for i:=1 to 38 do
begin
S8:=wounded_reserv[i];
BlockWrite(F,S8,4);
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[41];
form1.logo_at_loading_scenario;
// запись массива авто на складах
for i:=1 to 38 do
begin
S8:=avto_reserv[i];
BlockWrite(F,S8,4);
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[42];
form1.logo_at_loading_scenario;
// запись массива авто в ремонте
for i:=1 to 38 do
begin
S8:=avto_remont_reserv[i];
BlockWrite(F,S8,4);
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[43];
form1.logo_at_loading_scenario;
// запись массива лошадей в запасе
for i:=1 to 38 do
begin
S8:=horses_reserv[i];
BlockWrite(F,S8,4);
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[44];
form1.logo_at_loading_scenario;
// запись массива пулеметов на складах
for i:=1 to 38 do
begin
S8:=mg_reserv[i];
BlockWrite(F,S8,4);
end;
//
sell_number:=1;
load_sav_string2:=load_sav_texts[45];
form1.logo_at_loading_scenario;
// запись массива событий
for i:=1 to 1024 do
begin
S11:=events_list[i];
BlockWrite(F,S11,256);
end;
// запись массива приказов по производству техники...
for i:=1 to 114000 do
begin
S5:=proizv_orders[i];
BlockWrite(F,S5,1);
end;
// запись массива скриптов для списка из 20000 юнитов...
for i:=1 to 20000 do
begin
S12:=scripts_list[i];
BlockWrite(F,S12,32);
end;
CloseFile(F);
//
sell_number:=1;
load_sav_string2:=load_sav_texts[46];
form1.logo_at_loading_scenario;
// контроль слотов
test_cat2;
end;