Subversion Repositories spacemission

Rev

Rev 70 | Rev 85 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 70 Rev 79
1
unit GamSpeicherung;
1
unit GamSpeicherung;
2
 
2
 
3
interface
3
interface
4
 
4
 
5
uses
5
uses
6
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
6
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
7
  StdCtrls, ExtCtrls, Spin{$IF CompilerVersion >= 23.0}, System.UITypes{$IFEND};
7
  StdCtrls, ExtCtrls, Spin{$IF CompilerVersion >= 23.0}, System.UITypes{$IFEND};
8
 
8
 
9
type
9
type
10
  TSpeicherungForm = class(TForm)
10
  TSpeicherungForm = class(TForm)
11
    Bevel1: TBevel;
11
    Bevel1: TBevel;
12
    LadenBtn: TButton;
12
    LadenBtn: TButton;
13
    LoeschenBtn: TButton;
13
    LoeschenBtn: TButton;
14
    AktualisierenBtn: TButton;
14
    AktualisierenBtn: TButton;
15
    SpeichernBtn: TButton;
15
    SpeichernBtn: TButton;
16
    AbbrechenBtn: TButton;
16
    AbbrechenBtn: TButton;
17
    LevelListBox: TListBox;
17
    LevelListBox: TListBox;
18
    Label2: TLabel;
18
    Label2: TLabel;
19
    Label3: TLabel;
19
    Label3: TLabel;
20
    Label1: TLabel;
20
    Label1: TLabel;
21
    LevelName: TEdit;
21
    LevelName: TEdit;
22
    ElPanel1: TPanel;
22
    ElPanel1: TPanel;
23
    li4a: TLabel;
23
    li4a: TLabel;
24
    li1: TLabel;
24
    li1: TLabel;
25
    li3b: TLabel;
25
    li3b: TLabel;
26
    li3a: TLabel;
26
    li3a: TLabel;
27
    li4b: TLabel;
27
    li4b: TLabel;
28
    liu: TLabel;
28
    liu: TLabel;
29
    liw: TLabel;
29
    liw: TLabel;
30
    li2a: TLabel;
30
    li2a: TLabel;
31
    li2b: TLabel;
31
    li2b: TLabel;
32
    procedure LoeschenBtnClick(Sender: TObject);
32
    procedure LoeschenBtnClick(Sender: TObject);
33
    procedure LadenBtnClick(Sender: TObject);
33
    procedure LadenBtnClick(Sender: TObject);
34
    procedure SpeichernBtnClick(Sender: TObject);
34
    procedure SpeichernBtnClick(Sender: TObject);
35
    procedure LevelListBoxClick(Sender: TObject);
35
    procedure LevelListBoxClick(Sender: TObject);
36
    procedure LevelNameChange(Sender: TObject);
36
    procedure LevelNameChange(Sender: TObject);
37
    procedure Button4Click(Sender: TObject);
37
    procedure Button4Click(Sender: TObject);
38
    procedure FormShow(Sender: TObject);
38
    procedure FormShow(Sender: TObject);
39
    procedure DsFancyButton2Click(Sender: TObject);
39
    procedure DsFancyButton2Click(Sender: TObject);
40
    procedure AbbrechenBtnClick(Sender: TObject);
40
    procedure AbbrechenBtnClick(Sender: TObject);
41
    procedure FormHide(Sender: TObject);
41
    procedure FormHide(Sender: TObject);
42
    procedure LevelListBoxDblClick(Sender: TObject);
42
    procedure LevelListBoxDblClick(Sender: TObject);
43
  private
43
  private
44
    function GetSpielstandVerzeichnisSystem: string;
44
    function GetSpielstandVerzeichnisSystem: string;
45
    function GetSpielstandVerzeichnisUser: string;
45
    function GetSpielstandVerzeichnisUser: string;
46
    function GetSaveGameFileName(SpielstandName: string; forceuserdir: boolean): string;
46
    function GetSaveGameFileName(SpielstandName: string; forceuserdir: boolean): string;
47
  public
47
  public
48
    procedure SearchSaves;
48
    procedure SearchSaves;
49
  end;
49
  end;
50
 
50
 
51
var
51
var
52
  SpeicherungForm: TSpeicherungForm;
52
  SpeicherungForm: TSpeicherungForm;
53
 
53
 
54
implementation
54
implementation
55
 
55
 
56
uses
56
uses
57
  Global, GamMain, ComLevelReader;
57
  Global, GamMain, ComLevelReader;
58
 
58
 
59
{$R *.DFM}
59
{$R *.DFM}
60
 
60
 
-
 
61
resourcestring
-
 
62
  SSaveGameFileNotFound = 'Spielstandsdatei nicht gefunden';
-
 
63
  SNa = 'n/a';
-
 
64
  SSaveGameFolder = 'Spielstände';
-
 
65
  SSaveGameSubFolder = 'SpaceMission';
-
 
66
 
61
{ TSpeicherungForm }
67
{ TSpeicherungForm }
62
 
68
 
63
procedure TSpeicherungForm.SearchSaves;
69
procedure TSpeicherungForm.SearchSaves;
64
var
70
var
65
  sr: TSearchRec;
71
  sr: TSearchRec;
66
  res: integer;
72
  res: integer;
67
begin
73
begin
68
  LevelName.text := '';
74
  LevelName.text := '';
69
  LevelListBox.items.clear;
75
  LevelListBox.items.clear;
70
  li1.visible := false;
76
  li1.visible := false;
71
  li2a.visible := false;
77
  li2a.visible := false;
72
  li2b.visible := false;
78
  li2b.visible := false;
73
  li3a.visible := false;
79
  li3a.visible := false;
74
  li3b.visible := false;
80
  li3b.visible := false;
75
  li4a.visible := false;
81
  li4a.visible := false;
76
  li4b.visible := false;
82
  li4b.visible := false;
77
  liu.visible := false;
83
  liu.visible := false;
78
  liw.visible := true;
84
  liw.visible := true;
79
  li1.caption := 'n/a';
85
  li1.caption := SNa;
80
  li2b.caption := 'n/a';
86
  li2b.caption := SNa;
81
  li3b.caption := 'n/a';
87
  li3b.caption := SNa;
82
  li4b.caption := 'n/a';
88
  li4b.caption := SNa;
83
  LadenBtn.enabled := false;
89
  LadenBtn.enabled := false;
84
  LoeschenBtn.enabled := false;
90
  LoeschenBtn.enabled := false;
85
  res := FindFirst(IncludeTrailingPathDelimiter(GetSpielstandVerzeichnisSystem)+'*.sav', 0, sr);
91
  res := FindFirst(IncludeTrailingPathDelimiter(GetSpielstandVerzeichnisSystem)+'*.sav', 0, sr);
86
  try
92
  try
87
    while (res = 0) do
93
    while (res = 0) do
88
    begin
94
    begin
89
      if (sr.name <> '.') and (sr.name <> '..') then
95
      if (sr.name <> '.') and (sr.name <> '..') then
90
        LevelListBox.items.Add(ChangeFileExt(sr.Name, ''));
96
        LevelListBox.items.Add(ChangeFileExt(sr.Name, ''));
91
      res := FindNext(sr);
97
      res := FindNext(sr);
92
    end;
98
    end;
93
  finally
99
  finally
94
    FindClose(sr);
100
    FindClose(sr);
95
  end;
101
  end;
96
  res := FindFirst(IncludeTrailingPathDelimiter(GetSpielstandVerzeichnisUser)+'*.sav', 0, sr);
102
  res := FindFirst(IncludeTrailingPathDelimiter(GetSpielstandVerzeichnisUser)+'*.sav', 0, sr);
97
  try
103
  try
98
    while (res = 0) do
104
    while (res = 0) do
99
    begin
105
    begin
100
      // Anmerkung: Contains() oder IndexOf() sind nicht case-sensitive
106
      // Anmerkung: Contains() oder IndexOf() sind nicht case-sensitive
101
      if (sr.name <> '.') and (sr.name <> '..') and (LevelListBox.Items.IndexOf(ChangeFileExt(sr.Name, ''))=-1) then
107
      if (sr.name <> '.') and (sr.name <> '..') and (LevelListBox.Items.IndexOf(ChangeFileExt(sr.Name, ''))=-1) then
102
        LevelListBox.items.Add(ChangeFileExt(sr.Name, ''));
108
        LevelListBox.items.Add(ChangeFileExt(sr.Name, ''));
103
      res := FindNext(sr);
109
      res := FindNext(sr);
104
    end;
110
    end;
105
  finally
111
  finally
106
    FindClose(sr);
112
    FindClose(sr);
107
  end;
113
  end;
108
  LevelListBox.Sorted := true;
114
  LevelListBox.Sorted := true;
109
end;
115
end;
110
 
116
 
111
procedure TSpeicherungForm.LoeschenBtnClick(Sender: TObject);
117
procedure TSpeicherungForm.LoeschenBtnClick(Sender: TObject);
-
 
118
resourcestring
-
 
119
  SDeleteSaveGame = 'Diesen Spielstand wirklich löschen?';
112
var
120
var
113
  fil: string;
121
  fil: string;
114
begin
122
begin
115
  if LevelListBox.ItemIndex = -1 then exit;
123
  if LevelListBox.ItemIndex = -1 then exit;
116
 
124
 
117
  if MessageDlg('Diesen Spielstand wirklich löschen?', mtConfirmation, mbYesNoCancel, 0) = mrYes then
125
  if MessageDlg(SDeleteSaveGame, mtConfirmation, mbYesNoCancel, 0) = mrYes then
118
  begin
126
  begin
119
    li1.visible := false;
127
    li1.visible := false;
120
    li2a.visible := false;
128
    li2a.visible := false;
121
    li2b.visible := false;
129
    li2b.visible := false;
122
    li3a.visible := false;
130
    li3a.visible := false;
123
    li3b.visible := false;
131
    li3b.visible := false;
124
    li4a.visible := false;
132
    li4a.visible := false;
125
    li4b.visible := false;
133
    li4b.visible := false;
126
    liu.visible := false;
134
    liu.visible := false;
127
    liw.visible := false;
135
    liw.visible := false;
128
    li1.caption := 'n/a';
136
    li1.caption := SNa;
129
    li2b.caption := 'n/a';
137
    li2b.caption := SNa;
130
    li3b.caption := 'n/a';
138
    li3b.caption := SNa;
131
    li4b.caption := 'n/a';
139
    li4b.caption := SNa;
132
    LadenBtn.enabled := false;
140
    LadenBtn.enabled := false;
133
    LoeschenBtn.enabled := false;
141
    LoeschenBtn.enabled := false;
134
    fil := GetSaveGameFileName(LevelListBox.Items.strings[LevelListBox.itemindex], false);
142
    fil := GetSaveGameFileName(LevelListBox.Items.strings[LevelListBox.itemindex], false);
135
    if not fileexists(fil) then raise Exception.Create('Spielstandsdatei nicht gefunden');
143
    if not fileexists(fil) then raise Exception.Create(SSaveGameFileNotFound);
136
    deletefile(fil);
144
    deletefile(fil);
137
    searchsaves;
145
    searchsaves;
138
  end;
146
  end;
139
end;
147
end;
140
 
148
 
141
function TSpeicherungForm.GetSaveGameFileName(SpielstandName: string; forceuserdir: boolean): string;
149
function TSpeicherungForm.GetSaveGameFileName(SpielstandName: string; forceuserdir: boolean): string;
142
var
150
var
143
  usr, sys: string;
151
  usr, sys: string;
144
begin
152
begin
145
  usr := IncludeTrailingPathDelimiter(GetSpielstandVerzeichnisUser) + SpielstandName + '.sav'; // ab SpaceMission 1.2+
153
  usr := IncludeTrailingPathDelimiter(GetSpielstandVerzeichnisUser) + SpielstandName + '.sav'; // ab SpaceMission 1.2+ // do not localize
146
  sys := IncludeTrailingPathDelimiter(GetSpielstandVerzeichnisSystem) + SpielstandName + '.sav'; // alte Versionen von SpaceMission <1.2
154
  sys := IncludeTrailingPathDelimiter(GetSpielstandVerzeichnisSystem) + SpielstandName + '.sav'; // alte Versionen von SpaceMission <1.2 // do not localize
147
  if fileexists(usr) or forceuserdir then exit(usr);
155
  if fileexists(usr) or forceuserdir then exit(usr);
148
  if fileexists(sys) then exit(sys);
156
  if fileexists(sys) then exit(sys);
149
  exit(usr);
157
  exit(usr);
150
end;
158
end;
151
 
159
 
152
procedure TSpeicherungForm.LadenBtnClick(Sender: TObject);
160
procedure TSpeicherungForm.LadenBtnClick(Sender: TObject);
153
var
161
var
154
  SavGame: TSaveData;
162
  SavGame: TSaveData;
155
  fil: string;
163
  fil: string;
156
begin
164
begin
157
  if LevelListBox.ItemIndex = -1 then exit;
165
  if LevelListBox.ItemIndex = -1 then exit;
158
 
166
 
159
  if LevelListBox.items.count = 0 then
167
  if LevelListBox.items.count = 0 then
160
  begin
168
  begin
161
    li1.visible := false;
169
    li1.visible := false;
162
    li2a.visible := false;
170
    li2a.visible := false;
163
    li2b.visible := false;
171
    li2b.visible := false;
164
    li3a.visible := false;
172
    li3a.visible := false;
165
    li3b.visible := false;
173
    li3b.visible := false;
166
    li4a.visible := false;
174
    li4a.visible := false;
167
    li4b.visible := false;
175
    li4b.visible := false;
168
    liu.visible := false;
176
    liu.visible := false;
169
    liw.visible := false;
177
    liw.visible := false;
170
    li1.caption := 'n/a';
178
    li1.caption := SNa;
171
    li2b.caption := 'n/a';
179
    li2b.caption := SNa;
172
    li3b.caption := 'n/a';
180
    li3b.caption := SNa;
173
    li4b.caption := 'n/a';
181
    li4b.caption := SNa;
174
    LadenBtn.enabled := false;
182
    LadenBtn.enabled := false;
175
    LoeschenBtn.enabled := false;
183
    LoeschenBtn.enabled := false;
176
  end;
184
  end;
177
  {if liu.visible or (LevelListBox.items.count=0) then
185
  {if liu.visible or (LevelListBox.items.count=0) then
178
    exit;}
186
    exit;}
179
  SavGame := TSaveData.Create;
187
  SavGame := TSaveData.Create;
180
  try
188
  try
181
    fil := GetSaveGameFileName(LevelListBox.Items.strings[LevelListBox.itemindex], false);
189
    fil := GetSaveGameFileName(LevelListBox.Items.strings[LevelListBox.itemindex], false);
182
    if not fileexists(fil) then raise Exception.Create('Spielstandsdatei nicht gefunden');
190
    if not fileexists(fil) then raise Exception.Create(SSaveGameFileNotFound);
183
    SavGame.LoadFromFile(fil);
191
    SavGame.LoadFromFile(fil);
184
    mainform.FScore := SavGame.Score;
192
    mainform.FScore := SavGame.Score;
185
    mainform.FLife := SavGame.Life;
193
    mainform.FLife := SavGame.Life;
186
    mainform.FLevel := SavGame.Level;
194
    mainform.FLevel := SavGame.Level;
187
    mainform.FGameMode := SavGame.GameMode;
195
    mainform.FGameMode := SavGame.GameMode;
188
    MainForm.FLevelDataAlreadyLoaded := true; // do not call NewLevel() in StartSceneMain
196
    MainForm.FLevelDataAlreadyLoaded := true; // do not call NewLevel() in StartSceneMain
189
    if Assigned(SavGame.LevelData) then
197
    if Assigned(SavGame.LevelData) then
190
    begin
198
    begin
191
      MainForm.LevelData.Assign(SavGame.LevelData);
199
      MainForm.LevelData.Assign(SavGame.LevelData);
192
    end;
200
    end;
193
  finally
201
  finally
194
    FreeAndNil(SavGame);
202
    FreeAndNil(SavGame);
195
  end;
203
  end;
196
  mainform.playsound(smsSceneMov, false);
204
  mainform.playsound(smsSceneMov, false);
197
  mainform.FNextScene := gsNewLevel;
205
  mainform.FNextScene := gsNewLevel;
198
  mainform.FCheat := false;
206
  mainform.FCheat := false;
199
  close;
207
  close;
200
end;
208
end;
201
 
209
 
202
procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
210
procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
-
 
211
resourcestring
-
 
212
  SNoValidSaveGameName = 'Dies ist kein gültiger Spielstandname!';
-
 
213
  SEmptySaveGameName = 'Bitte geben Sie einen Namen für den Spielstand ein';
-
 
214
  SReplaceSaveGame = 'Spielstand ist bereits vorhanden. Ersetzen?';
203
var
215
var
204
  SavGame: TSaveData;
216
  SavGame: TSaveData;
205
  i: integer;
217
  i: integer;
206
begin
218
begin
207
  if Levelname.text = '' then
219
  if Levelname.text = '' then
208
  begin
220
  begin
209
    MessageDlg('Dies ist kein gültiger Spielstandname!', mtError, [mbOK], 0);
221
    MessageDlg(SEmptySaveGameName, mtError, [mbOK], 0);
210
    LevelName.setfocus;
222
    LevelName.setfocus;
211
    exit;
223
    exit;
212
  end;
224
  end;
213
  for i := 1 to length(LevelName.text) do
225
  for i := 1 to length(LevelName.text) do
214
  begin
226
  begin
215
    if (copy(LevelName.text, i, 1) = '\') or
227
    if (copy(LevelName.text, i, 1) = '\') or
216
      (copy(LevelName.text, i, 1) = '/') or
228
      (copy(LevelName.text, i, 1) = '/') or
217
      (copy(LevelName.text, i, 1) = ':') or
229
      (copy(LevelName.text, i, 1) = ':') or
218
      (copy(LevelName.text, i, 1) = '*') or
230
      (copy(LevelName.text, i, 1) = '*') or
219
      (copy(LevelName.text, i, 1) = '?') or
231
      (copy(LevelName.text, i, 1) = '?') or
220
      (copy(LevelName.text, i, 1) = '"') or
232
      (copy(LevelName.text, i, 1) = '"') or
221
      (copy(LevelName.text, i, 1) = '<') or
233
      (copy(LevelName.text, i, 1) = '<') or
222
      (copy(LevelName.text, i, 1) = '>') or
234
      (copy(LevelName.text, i, 1) = '>') or
223
      (copy(LevelName.text, i, 1) = '|') then
235
      (copy(LevelName.text, i, 1) = '|') then
224
    begin
236
    begin
225
      MessageDlg('Dies ist kein gültiger Spielstandname!', mtError, [mbOK], 0);
237
      MessageDlg(SNoValidSaveGameName, mtError, [mbOK], 0);
226
      LevelName.setfocus;
238
      LevelName.setfocus;
227
      exit;
239
      exit;
228
    end;
240
    end;
229
  end;
241
  end;
230
  if LevelListBox.items.IndexOf(LevelName.text) > -1 then
242
  if LevelListBox.items.IndexOf(LevelName.text) > -1 then
231
  begin
243
  begin
232
    if MessageDlg('Spielstand ist bereits vorhanden. Ersetzen?', mtConfirmation, mbYesNoCancel, 0) <> mrYes then
244
    if MessageDlg(SReplaceSaveGame, mtConfirmation, mbYesNoCancel, 0) <> mrYes then
233
      exit;
245
      exit;
234
  end;
246
  end;
235
 
247
 
236
  SavGame := TSaveData.Create;
248
  SavGame := TSaveData.Create;
237
  try
249
  try
238
    SavGame.Score := mainform.FScoreAtLevelStart;//mainform.FScore;
250
    SavGame.Score := mainform.FScoreAtLevelStart;//mainform.FScore;
239
    SavGame.Life := mainform.FLifeAtLevelStart;//mainform.FLife;
251
    SavGame.Life := mainform.FLifeAtLevelStart;//mainform.FLife;
240
    SavGame.Level := mainform.FLevel;
252
    SavGame.Level := mainform.FLevel;
241
    SavGame.GameMode := mainform.FGameMode;
253
    SavGame.GameMode := mainform.FGameMode;
242
    if not Assigned(SavGame.LevelData) then SavGame.LevelData := TLevelData.Create;
254
    if not Assigned(SavGame.LevelData) then SavGame.LevelData := TLevelData.Create;
243
    SavGame.LevelData.Assign(mainForm.LevelData);
255
    SavGame.LevelData.Assign(mainForm.LevelData);
244
    SavGame.SaveToFile(GetSaveGameFileName(LevelName.text, true));
256
    SavGame.SaveToFile(GetSaveGameFileName(LevelName.text, true));
245
  finally
257
  finally
246
    FreeAndNil(SavGame);
258
    FreeAndNil(SavGame);
247
  end;
259
  end;
248
 
260
 
249
  SearchSaves;
261
  SearchSaves;
250
end;
262
end;
251
 
263
 
252
procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
264
procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
-
 
265
resourcestring
-
 
266
  SNoNA = 'n/a';
-
 
267
  SIsNormalLevel = 'Das Level ist ein norm. Level';
-
 
268
  SIsRandomLevel = 'Das Level ist ein Zufallslevel';
-
 
269
  SHasAttachedLevel = '%s mit Karte';
253
var
270
var
254
  SavGame: TSaveData;
271
  SavGame: TSaveData;
255
  Punkte, Leben, Level: integer;
272
  Punkte, Leben, Level: integer;
256
  BeinhaltetLevelDaten: boolean;
273
  BeinhaltetLevelDaten: boolean;
257
  Art: TGameMode;
274
  Art: TGameMode;
258
  fil: string;
275
  fil: string;
259
begin
276
begin
260
  ladenbtn.enabled := true;
277
  ladenbtn.enabled := true;
261
  loeschenbtn.enabled := true;
278
  loeschenbtn.enabled := true;
262
  li1.visible := false;
279
  li1.visible := false;
263
  li2a.visible := false;
280
  li2a.visible := false;
264
  li2b.visible := false;
281
  li2b.visible := false;
265
  li3a.visible := false;
282
  li3a.visible := false;
266
  li3b.visible := false;
283
  li3b.visible := false;
267
  li4a.visible := false;
284
  li4a.visible := false;
268
  li4b.visible := false;
285
  li4b.visible := false;
269
  liu.visible := false;
286
  liu.visible := false;
270
  liw.visible := false;
287
  liw.visible := false;
271
  li1.caption := 'n/a';
288
  li1.caption := SNoNA;
272
  li2b.caption := 'n/a';
289
  li2b.caption := SNoNA;
273
  li3b.caption := 'n/a';
290
  li3b.caption := SNoNA;
274
  li4b.caption := 'n/a';
291
  li4b.caption := SNoNA;
275
  if (LevelListBox.items.count=0) or (LevelListBox.itemindex = -1) then
292
  if (LevelListBox.items.count=0) or (LevelListBox.itemindex = -1) then
276
  begin
293
  begin
277
    ladenbtn.enabled := false;
294
    ladenbtn.enabled := false;
278
    loeschenbtn.enabled := false;
295
    loeschenbtn.enabled := false;
279
    liw.visible := true;
296
    liw.visible := true;
280
    exit;
297
    exit;
281
  end;
298
  end;
282
  LevelName.Text := LevelListBox.Items.strings[LevelListBox.itemindex];
299
  LevelName.Text := LevelListBox.Items.strings[LevelListBox.itemindex];
283
 
300
 
284
  SavGame := TSaveData.Create;
301
  SavGame := TSaveData.Create;
285
  try
302
  try
286
    try
303
    try
287
      fil := GetSaveGameFileName(LevelListBox.Items.strings[LevelListBox.itemindex], false);
304
      fil := GetSaveGameFileName(LevelListBox.Items.strings[LevelListBox.itemindex], false);
288
      if not fileexists(fil) then raise Exception.Create('Spielstandsdatei nicht gefunden');
305
      if not fileexists(fil) then raise Exception.Create(SSaveGameFileNotFound);
289
      SavGame.LoadFromFile(fil);
306
      SavGame.LoadFromFile(fil);
290
      Punkte := SavGame.Score;
307
      Punkte := SavGame.Score;
291
      Leben := SavGame.Life;
308
      Leben := SavGame.Life;
292
      Level := SavGame.Level;
309
      Level := SavGame.Level;
293
      Art := SavGame.GameMode;
310
      Art := SavGame.GameMode;
294
      BeinhaltetLevelDaten := Assigned(SavGame.LevelData);
311
      BeinhaltetLevelDaten := Assigned(SavGame.LevelData);
295
    except
312
    except
296
      liu.visible := true;
313
      liu.visible := true;
297
      ladenbtn.enabled := false;
314
      ladenbtn.enabled := false;
298
      exit;
315
      exit;
299
    end;
316
    end;
300
  finally
317
  finally
301
    FreeAndNil(SavGame);
318
    FreeAndNil(SavGame);
302
  end;
319
  end;
303
  li1.visible := true;
320
  li1.visible := true;
304
  li2a.visible := true;
321
  li2a.visible := true;
305
  li2b.visible := true;
322
  li2b.visible := true;
306
  li3a.visible := true;
323
  li3a.visible := true;
307
  li3b.visible := true;
324
  li3b.visible := true;
308
  li4a.visible := true;
325
  li4a.visible := true;
309
  li4b.visible := true;
326
  li4b.visible := true;
310
  if Art = gmLevels then
327
  if Art = gmLevels then
311
    li1.caption := 'Das Level ist ein norm. Level'
328
    li1.caption := SIsNormalLevel
312
  else
329
  else
313
    li1.caption := 'Das Level ist ein Zufallslevel';
330
    li1.caption := SIsRandomLevel;
314
  if BeinhaltetLevelDaten then
331
  if BeinhaltetLevelDaten then
315
    li1.Caption := li1.Caption + ' mit Karte';
332
    li1.Caption := Format(SHasAttachedLevel, [li1.Caption]);
316
  li3b.caption := inttostr(Level);
333
  li3b.caption := inttostr(Level);
317
  li4b.caption := inttostr(Leben);
334
  li4b.caption := inttostr(Leben);
318
  li2b.caption := inttostr(Punkte);
335
  li2b.caption := inttostr(Punkte);
319
end;
336
end;
320
 
337
 
321
procedure TSpeicherungForm.LevelNameChange(Sender: TObject);
338
procedure TSpeicherungForm.LevelNameChange(Sender: TObject);
322
begin
339
begin
323
  //listbox1.Items.indexof('Level '+spinedit1.text);
340
  //listbox1.Items.indexof('Level '+spinedit1.text);
324
end;
341
end;
325
 
342
 
326
procedure TSpeicherungForm.Button4Click(Sender: TObject);
343
procedure TSpeicherungForm.Button4Click(Sender: TObject);
327
begin
344
begin
328
  mainform.dxtimer.enabled := not mainform.gamepause.checked;
345
  mainform.dxtimer.enabled := not mainform.gamepause.checked;
329
  close;
346
  close;
330
end;
347
end;
331
 
348
 
332
procedure TSpeicherungForm.FormShow(Sender: TObject);
349
procedure TSpeicherungForm.FormShow(Sender: TObject);
333
begin
350
begin
334
  mainform.dxtimer.enabled := false;
351
  mainform.dxtimer.enabled := false;
335
  SearchSaves;
352
  SearchSaves;
336
  if mainform.FNotSave then
353
  if mainform.FNotSave then
337
  begin
354
  begin
338
    label1.enabled := false;
355
    label1.enabled := false;
339
    LevelName.enabled := false;
356
    LevelName.enabled := false;
340
    SpeichernBtn.enabled := false;
357
    SpeichernBtn.enabled := false;
341
  end
358
  end
342
  else
359
  else
343
  begin
360
  begin
344
    label1.enabled := true;
361
    label1.enabled := true;
345
    LevelName.enabled := true;
362
    LevelName.enabled := true;
346
    SpeichernBtn.enabled := true;
363
    SpeichernBtn.enabled := true;
347
  end;
364
  end;
348
end;
365
end;
349
 
366
 
350
function TSpeicherungForm.GetSpielstandVerzeichnisSystem: string;
367
function TSpeicherungForm.GetSpielstandVerzeichnisSystem: string;
351
begin
368
begin
352
  // nicht mehr verwendet seit version 1.2
369
  // nicht mehr verwendet seit version 1.2
353
  result := OwnDirectory + 'Spielstände';
370
  result := OwnDirectory + SSaveGameFolder;
354
end;
371
end;
355
 
372
 
356
function TSpeicherungForm.GetSpielstandVerzeichnisUser: string;
373
function TSpeicherungForm.GetSpielstandVerzeichnisUser: string;
357
begin
374
begin
358
  try
375
  try
359
    result := GetKnownFolderPath(FOLDERID_SavedGames);
376
    result := GetKnownFolderPath(FOLDERID_SavedGames);
360
  except
377
  except
361
    result := '';
378
    result := '';
362
  end;
379
  end;
363
  if result = '' then
380
  if result = '' then
364
  begin
381
  begin
365
    // Pre Vista
382
    // Pre Vista
366
    result := OwnDirectory + 'Spielstände';
383
    result := OwnDirectory + SSaveGameFolder;
367
  end
384
  end
368
  else
385
  else
369
  begin
386
  begin
370
    result := IncludeTrailingPathDelimiter(result);
387
    result := IncludeTrailingPathDelimiter(result);
371
    result := result + 'SpaceMission';
388
    result := result + SSaveGameSubFolder;
372
  end;
389
  end;
373
  result := IncludeTrailingPathDelimiter(result);
390
  result := IncludeTrailingPathDelimiter(result);
374
  ForceDirectories(result);
391
  ForceDirectories(result);
375
end;
392
end;
376
 
393
 
377
procedure TSpeicherungForm.DsFancyButton2Click(Sender: TObject);
394
procedure TSpeicherungForm.DsFancyButton2Click(Sender: TObject);
378
begin
395
begin
379
  SearchSaves;
396
  SearchSaves;
380
end;
397
end;
381
 
398
 
382
procedure TSpeicherungForm.AbbrechenBtnClick(Sender: TObject);
399
procedure TSpeicherungForm.AbbrechenBtnClick(Sender: TObject);
383
begin
400
begin
384
  close;
401
  close;
385
end;
402
end;
386
 
403
 
387
procedure TSpeicherungForm.FormHide(Sender: TObject);
404
procedure TSpeicherungForm.FormHide(Sender: TObject);
388
begin
405
begin
389
  if not mainform.gamepause.checked then mainform.dxtimer.enabled := true;
406
  if not mainform.gamepause.checked then mainform.dxtimer.enabled := true;
390
end;
407
end;
391
 
408
 
392
procedure TSpeicherungForm.LevelListBoxDblClick(Sender: TObject);
409
procedure TSpeicherungForm.LevelListBoxDblClick(Sender: TObject);
393
begin
410
begin
394
  LadenBtn.click;
411
  LadenBtn.click;
395
end;
412
end;
396
 
413
 
397
end.
414
end.
398
 
415
 
399
 
416