Subversion Repositories spacemission

Rev

Rev 70 | Rev 85 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 70 Rev 79
Line 56... Line 56...
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;
Line 74... Line 80...
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
Line 107... Line 113...
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
 
Line 165... Line 173...
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;
Line 198... Line 206...
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
Line 220... Line 232...
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
Line 248... Line 260...
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;
Line 266... Line 283...
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;
Line 283... Line 300...
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;
Line 306... Line 323...
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
 
Line 348... Line 365...
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
Line 361... Line 378...
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