Subversion Repositories spacemission

Rev

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

Rev 1 Rev 2
1
unit LevSpeicherung;
1
unit LevSpeicherung;
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, ComCtrls;
7
  StdCtrls, ExtCtrls, Spin, ComCtrls;
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
    ElPanel1: TPanel;
21
    ElPanel1: TPanel;
22
    li3a: TLabel;
22
    li3a: TLabel;
23
    li1b: TLabel;
23
    li1b: TLabel;
24
    li1a: TLabel;
24
    li1a: TLabel;
25
    li2b: TLabel;
25
    li2b: TLabel;
26
    li2a: TLabel;
26
    li2a: TLabel;
27
    li3b: TLabel;
27
    li3b: TLabel;
28
    liu: TLabel;
28
    liu: TLabel;
29
    liw: TLabel;
29
    liw: TLabel;
30
    SpinEditEdt: TEdit;
30
    SpinEditEdt: TEdit;
31
    SpinEdit: TUpDown;
31
    SpinEdit: TUpDown;
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 Button4Click(Sender: TObject);
36
    procedure Button4Click(Sender: TObject);
37
    procedure FormShow(Sender: TObject);
37
    procedure FormShow(Sender: TObject);
38
    procedure DsFancyButton2Click(Sender: TObject);
38
    procedure DsFancyButton2Click(Sender: TObject);
39
    procedure AbbrechenBtnClick(Sender: TObject);
39
    procedure AbbrechenBtnClick(Sender: TObject);
40
    procedure LevelNameChange(Sender: TObject);
40
    procedure LevelNameChange(Sender: TObject);
41
    procedure LevelListBoxDblClick(Sender: TObject);
41
    procedure LevelListBoxDblClick(Sender: TObject);
42
    procedure FormHide(Sender: TObject);
42
    procedure FormHide(Sender: TObject);
43
    procedure SpinEditClick(Sender: TObject; Button: TUDBtnType);
43
    procedure SpinEditClick(Sender: TObject; Button: TUDBtnType);
44
    procedure SpinEditEdtKeyPress(Sender: TObject; var Key: Char);
44
    procedure SpinEditEdtKeyPress(Sender: TObject; var Key: Char);
45
    procedure SpinEditEdtChange(Sender: TObject);
45
    procedure SpinEditEdtChange(Sender: TObject);
46
  public
46
  public
47
    procedure SearchLevels;
47
    procedure SearchLevels;
48
    function RightStr(str: string; count: integer): string;
48
    function RightStr(str: string; count: integer): string;
49
    function Filter(n: integer; s: string): string;
49
    function Filter(n: integer; s: string): string;
50
  end;
50
  end;
51
 
51
 
52
var
52
var
53
  SpeicherungForm: TSpeicherungForm;
53
  SpeicherungForm: TSpeicherungForm;
54
 
54
 
55
const
-
 
56
  FCompVersion = '1.0';
-
 
57
 
-
 
58
implementation
55
implementation
59
 
56
 
60
uses
57
uses
61
  LevMain;
58
  Global, LevMain;
62
 
59
 
63
{$R *.DFM}
60
{$R *.DFM}
64
 
61
 
65
procedure TSpeicherungForm.SearchLevels;
62
procedure TSpeicherungForm.SearchLevels;
66
var
63
var
67
  {sr: TSearchRec;
64
  {sr: TSearchRec;
68
  res: integer;}
65
  res: integer;}
69
  i: integer;
66
  i: integer;
70
begin
67
begin
71
  //SpinEdit.Value := 1;
68
  //SpinEdit.Value := 1;
72
  LevelListBox.items.clear;
69
  LevelListBox.items.clear;
73
  li1a.visible := false;
70
  li1a.visible := false;
74
  li2a.visible := false;
71
  li2a.visible := false;
75
  li3a.visible := false;
72
  li3a.visible := false;
76
  li1b.visible := false;
73
  li1b.visible := false;
77
  li2b.visible := false;
74
  li2b.visible := false;
78
  li3b.visible := false;
75
  li3b.visible := false;
79
  liw.visible := true;
76
  liw.visible := true;
80
  LadenBtn.enabled := false;
77
  LadenBtn.enabled := false;
81
  LoeschenBtn.enabled := false;
78
  LoeschenBtn.enabled := false;
82
  {res := FindFirst(mainform.fdirectory+'Levels\*.lev', 0, sr);
79
  {res := FindFirst(mainform.fdirectory+'Levels\*.lev', 0, sr);
83
  try
80
  try
84
    while (res = 0) do
81
    while (res = 0) do
85
    begin
82
    begin
86
      if (sr.name <> '.') and (sr.name <> '..') then
83
      if (sr.name <> '.') and (sr.name <> '..') then
87
        LevelListBox.items.Add(copy(sr.Name, 0, length(sr.name)-4));
84
        LevelListBox.items.Add(copy(sr.Name, 0, length(sr.name)-4));
88
      res := FindNext(sr);
85
      res := FindNext(sr);
89
    end;
86
    end;
90
  finally
87
  finally
91
    FindClose(sr);
88
    FindClose(sr);
92
  end;}
89
  end;}
93
  for i := 1 to 9999 do
90
  for i := 1 to 9999 do
94
  begin
91
  begin
95
    if fileexists(mainform.fdirectory+'Levels\Level '+inttostr(i)+'.lev') then
92
    if fileexists(fdirectory+'Levels\Level '+inttostr(i)+'.lev') then
96
      LevelListBox.items.Add('Level ' + inttostr(i));
93
      LevelListBox.items.Add('Level ' + inttostr(i));
97
  end;
94
  end;
98
end;
95
end;
99
 
96
 
100
procedure TSpeicherungForm.LoeschenBtnClick(Sender: TObject);
97
procedure TSpeicherungForm.LoeschenBtnClick(Sender: TObject);
101
var
98
var
102
  Markiert: boolean;
99
  Markiert: boolean;
103
  i: integer;
100
  i: integer;
104
begin
101
begin
105
  Markiert := false;
102
  Markiert := false;
106
  for i := 0 to LevelListBox.items.Count-1 do
103
  for i := 0 to LevelListBox.items.Count-1 do
107
  begin
104
  begin
108
    if LevelListBox.Selected[i] then Markiert := true;
105
    if LevelListBox.Selected[i] then Markiert := true;
109
  end;
106
  end;
110
  if not Markiert then exit;
107
  if not Markiert then exit;
111
  if MessageDlg('Dieses Level wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
108
  if MessageDlg('Dieses Level wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
112
  begin
109
  begin
113
    li1a.visible := false;
110
    li1a.visible := false;
114
    li2a.visible := false;
111
    li2a.visible := false;
115
    li3a.visible := false;
112
    li3a.visible := false;
116
    li1b.visible := false;
113
    li1b.visible := false;
117
    li2b.visible := false;
114
    li2b.visible := false;
118
    li3b.visible := false;
115
    li3b.visible := false;
119
    liu.visible := false;
116
    liu.visible := false;
120
    liw.visible := true;
117
    liw.visible := true;
121
    LadenBtn.enabled := false;
118
    LadenBtn.enabled := false;
122
    LoeschenBtn.enabled := false;
119
    LoeschenBtn.enabled := false;
123
    deletefile(mainform.FDirectory+'Levels\'+
120
    deletefile(FDirectory+'Levels\'+
124
      LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
121
      LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
125
    SearchLevels;
122
    SearchLevels;
126
  end;
123
  end;
127
end;
124
end;
128
 
125
 
129
procedure TSpeicherungForm.LadenBtnClick(Sender: TObject);
126
procedure TSpeicherungForm.LadenBtnClick(Sender: TObject);
130
var
127
var
131
  Markiert: boolean;
128
  Markiert: boolean;
132
  i, TempArtMain, TempLiveMain: integer;
129
  i, TempArtMain, TempLiveMain: integer;
133
  SavGame: textfile;
130
  SavGame: textfile;
134
  Ergebnis: array[1..5] of string;
131
  Ergebnis: array[1..5] of string;
135
begin
132
begin
136
  Markiert := false;
133
  Markiert := false;
137
  for i := 0 to LevelListBox.items.Count-1 do
134
  for i := 0 to LevelListBox.items.Count-1 do
138
  begin
135
  begin
139
    if LevelListBox.Selected[i] then Markiert := true;
136
    if LevelListBox.Selected[i] then Markiert := true;
140
  end;
137
  end;
141
  if not Markiert then exit;
138
  if not Markiert then exit;
142
  if LevelListBox.items.count = 0 then
139
  if LevelListBox.items.count = 0 then
143
  begin
140
  begin
144
    li1a.visible := false;
141
    li1a.visible := false;
145
    li2a.visible := false;
142
    li2a.visible := false;
146
    li3a.visible := false;
143
    li3a.visible := false;
147
    li1b.visible := false;
144
    li1b.visible := false;
148
    li2b.visible := false;
145
    li2b.visible := false;
149
    li3b.visible := false;
146
    li3b.visible := false;
150
    liw.visible := true;
147
    liw.visible := true;
151
    LadenBtn.enabled := false;
148
    LadenBtn.enabled := false;
152
    LoeschenBtn.enabled := false;
149
    LoeschenBtn.enabled := false;
153
  end;
150
  end;
154
  // Da Button bei ungültigen Level deaktiviert wird, ist das nicht mehr nötig.
151
  // Da Button bei ungültigen Level deaktiviert wird, ist das nicht mehr nötig.
155
  {if liu.visible or (LevelListBox.items.count=0) then
152
  {if liu.visible or (LevelListBox.items.count=0) then
156
    exit;}
153
    exit;}
157
  // Vorbereiten
154
  // Vorbereiten
158
  MainForm.DestroyLevel;
155
  MainForm.DestroyLevel;
159
  MainForm.LevChanged := false;
156
  MainForm.LevChanged := false;
160
  // Öffnen
157
  // Öffnen
161
  AssignFile(SavGame, mainform.FDirectory+'Levels\'+
158
  AssignFile(SavGame, FDirectory+'Levels\'+
162
    LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
159
    LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
163
  Reset(SavGame);
160
  Reset(SavGame);
164
  // Laden
161
  // Laden
165
  ReadLN(SavGame); // --> Copyrightinfo
162
  ReadLN(SavGame); // --> Copyrightinfo
166
  ReadLN(SavGame); // --> Copyrightinfo
163
  ReadLN(SavGame); // --> Copyrightinfo
167
  ReadLN(SavGame, Ergebnis[5]); // --> Länge der Karte
164
  ReadLN(SavGame, Ergebnis[5]); // --> Länge der Karte
168
  MainForm.ScrollBar.Max := strtoint(Ergebnis[5]);
165
  MainForm.ScrollBar.Max := strtoint(Ergebnis[5]);
169
  MainForm.Enemys.Clear;
166
  MainForm.Enemys.Clear;
170
  TempArtMain := MainForm.ArtChecked;
167
  TempArtMain := MainForm.ArtChecked;
171
  TempLiveMain := MainForm.LiveEdit;
168
  TempLiveMain := MainForm.LiveEdit;
172
  while not seekEoF(SavGame) do
169
  while not seekEoF(SavGame) do
173
  begin
170
  begin
174
    ReadLN(SavGame, Ergebnis[3]);
171
    ReadLN(SavGame, Ergebnis[3]);
175
    ReadLN(SavGame, Ergebnis[1]);
172
    ReadLN(SavGame, Ergebnis[1]);
176
    ReadLN(SavGame, Ergebnis[2]);
173
    ReadLN(SavGame, Ergebnis[2]);
177
    ReadLN(SavGame, Ergebnis[4]);
174
    ReadLN(SavGame, Ergebnis[4]);
178
    MainForm.EnemyAdd(strtoint(Ergebnis[1]), strtoint(Ergebnis[2]), strtoint(Ergebnis[3]), strtoint(Ergebnis[4]));
175
    MainForm.EnemyAdd(strtoint(Ergebnis[1]), strtoint(Ergebnis[2]), strtoint(Ergebnis[3]), strtoint(Ergebnis[4]));
179
    MainForm.ArtChecked := strtoint(Ergebnis[3]);
176
    MainForm.ArtChecked := strtoint(Ergebnis[3]);
180
    MainForm.LiveEdit := strtoint(Ergebnis[4]);
177
    MainForm.LiveEdit := strtoint(Ergebnis[4]);
181
    MainForm.EnemyCreate(strtoint(Ergebnis[1]), strtoint(Ergebnis[2]));
178
    MainForm.EnemyCreate(strtoint(Ergebnis[1]), strtoint(Ergebnis[2]));
182
    inc(MainForm.NumEnemys);
179
    inc(MainForm.NumEnemys);
183
    if Ergebnis[3] = '7' then MainForm.Boss := true;
180
    if Ergebnis[3] = '7' then MainForm.Boss := true;
184
  end;
181
  end;
185
  MainForm.LiveEdit := TempLiveMain;
182
  MainForm.LiveEdit := TempLiveMain;
186
  MainForm.ArtChecked := TempArtMain;
183
  MainForm.ArtChecked := TempArtMain;
187
  // Schließen
184
  // Schließen
188
  CloseFile(SavGame);
185
  CloseFile(SavGame);
189
  // Nacharbeiten
186
  // Nacharbeiten
190
  MainForm.AnzeigeAct;
187
  MainForm.AnzeigeAct;
191
  close;
188
  close;
192
end;
189
end;
193
 
190
 
194
function TSpeicherungForm.RightStr(str: string; count: integer): string;
191
function TSpeicherungForm.RightStr(str: string; count: integer): string;
195
begin
192
begin
196
  result := copy(str, length(str)-(count-1), count);
193
  result := copy(str, length(str)-(count-1), count);
197
end;
194
end;
198
 
195
 
199
function TSpeicherungForm.Filter(n: integer; s: string): string;
196
function TSpeicherungForm.Filter(n: integer; s: string): string;
200
var
197
var
201
  i, last: integer;
198
  i, last: integer;
202
  start, start2: boolean;
199
  start, start2: boolean;
203
  temp: string;
200
  temp: string;
204
begin
201
begin
205
  last := 0;
202
  last := 0;
206
  start := false;
203
  start := false;
207
  start2 := false;
204
  start2 := false;
208
  temp := '';
205
  temp := '';
209
  if n = 1 then
206
  if n = 1 then
210
  begin
207
  begin
211
    for i := 1 to length(s)+1 do
208
    for i := 1 to length(s)+1 do
212
    begin
209
    begin
213
      if copy(s, i, 1) = '-' then
210
      if copy(s, i, 1) = '-' then
214
      begin
211
      begin
215
        last := i;
212
        last := i;
216
        break;
213
        break;
217
      end;
214
      end;
218
    end;
215
    end;
219
    temp := copy(s, 1, last-1);
216
    temp := copy(s, 1, last-1);
220
  end;
217
  end;
221
  if n = 2 then
218
  if n = 2 then
222
  begin
219
  begin
223
    for i := 1 to length(s)+1 do
220
    for i := 1 to length(s)+1 do
224
    begin
221
    begin
225
      if start2 then start := true;
222
      if start2 then start := true;
226
      if copy(s, i, 1) = '-' then start2 := true;
223
      if copy(s, i, 1) = '-' then start2 := true;
227
      if (copy(s, i, 1) = ':') and start then break;
224
      if (copy(s, i, 1) = ':') and start then break;
228
      if start then temp := temp + copy(s, i, 1)
225
      if start then temp := temp + copy(s, i, 1)
229
    end;
226
    end;
230
  end;
227
  end;
231
  if n = 3 then
228
  if n = 3 then
232
  begin
229
  begin
233
    for i := 1 to length(s)+1 do
230
    for i := 1 to length(s)+1 do
234
    begin
231
    begin
235
      if start2 then start := true;
232
      if start2 then start := true;
236
      if copy(s, i, 1) = ':' then start2 := true;
233
      if copy(s, i, 1) = ':' then start2 := true;
237
      if (copy(s, i, 1) = '(') and start then break;
234
      if (copy(s, i, 1) = '(') and start then break;
238
      if start then temp := temp + copy(s, i, 1)
235
      if start then temp := temp + copy(s, i, 1)
239
    end;
236
    end;
240
  end;
237
  end;
241
  if n = 4 then
238
  if n = 4 then
242
  begin
239
  begin
243
    for i := 1 to length(s)+1 do
240
    for i := 1 to length(s)+1 do
244
    begin
241
    begin
245
      if start2 then start := true;
242
      if start2 then start := true;
246
      if copy(s, i, 1) = '(' then start2 := true;
243
      if copy(s, i, 1) = '(' then start2 := true;
247
      if (copy(s, i, 1) = ')') and start then break;
244
      if (copy(s, i, 1) = ')') and start then break;
248
      if start then temp := temp + copy(s, i, 1)
245
      if start then temp := temp + copy(s, i, 1)
249
    end;
246
    end;
250
  end;
247
  end;
251
  result := temp;
248
  result := temp;
252
end;
249
end;
253
 
250
 
254
procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
251
procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
255
var
252
var
256
  SavGame: textfile;
253
  SavGame: textfile;
257
  i, j: integer;
254
  i, j: integer;
258
  puffer: string;
255
  puffer: string;
259
begin
256
begin
260
  if mainform.Enemys.count = 0 then
257
  if mainform.Enemys.count = 0 then
261
  begin
258
  begin
262
    MessageDlg('Das Level ist leer!', mtError, [mbOK], 0);
259
    MessageDlg('Das Level ist leer!', mtError, [mbOK], 0);
263
    SpinEdit.SetFocus;
260
    SpinEdit.SetFocus;
264
    exit;
261
    exit;
265
  end;
262
  end;
266
  {for i := 0 to length(LevelName.text) do
263
  {for i := 0 to length(LevelName.text) do
267
  begin
264
  begin
268
    if (copy(LevelName.text, i, 1) = '\') or
265
    if (copy(LevelName.text, i, 1) = '\') or
269
      (copy(LevelName.text, i, 1) = '/') or
266
      (copy(LevelName.text, i, 1) = '/') or
270
      (copy(LevelName.text, i, 1) = ':') or
267
      (copy(LevelName.text, i, 1) = ':') or
271
      (copy(LevelName.text, i, 1) = '*') or
268
      (copy(LevelName.text, i, 1) = '*') or
272
      (copy(LevelName.text, i, 1) = '?') or
269
      (copy(LevelName.text, i, 1) = '?') or
273
      (copy(LevelName.text, i, 1) = '"') or
270
      (copy(LevelName.text, i, 1) = '"') or
274
      (copy(LevelName.text, i, 1) = '<') or
271
      (copy(LevelName.text, i, 1) = '<') or
275
      (copy(LevelName.text, i, 1) = '>') or
272
      (copy(LevelName.text, i, 1) = '>') or
276
      (copy(LevelName.text, i, 1) = '|') then
273
      (copy(LevelName.text, i, 1) = '|') then
277
    begin
274
    begin
278
      MessageDlg('Dies ist kein gültiger Levelname!', mtError, [mbOK], 0);
275
      MessageDlg('Dies ist kein gültiger Levelname!', mtError, [mbOK], 0);
279
      LevelName.SetFocus;
276
      LevelName.SetFocus;
280
      exit;
277
      exit;
281
    end;
278
    end;
282
  end;}
279
  end;}
283
  if LevelListBox.items.IndexOf('Level ' + inttostr(SpinEdit.Position)) > -1 then
280
  if LevelListBox.items.IndexOf('Level ' + inttostr(SpinEdit.Position)) > -1 then
284
  begin
281
  begin
285
    if MessageDlg('Level ist bereits vorhanden. Ersetzen?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then
282
    if MessageDlg('Level ist bereits vorhanden. Ersetzen?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then
286
      exit;
283
      exit;
287
  end;
284
  end;
288
  // Öffnen oder erstellen
285
  // Öffnen oder erstellen
289
  AssignFile(SavGame, mainform.FDirectory+'Levels\Level '+inttostr(SpinEdit.Position)+'.lev');
286
  AssignFile(SavGame, FDirectory+'Levels\Level '+inttostr(SpinEdit.Position)+'.lev');
290
  Rewrite(SavGame);
287
  Rewrite(SavGame);
291
  // Sortierung
288
  // Sortierung
292
  for j := 0 to mainform.enemys.Count - 2 do
289
  for j := 0 to mainform.enemys.Count - 2 do
293
  begin
290
  begin
294
    for i := 0 to mainform.enemys.Count - 2 do
291
    for i := 0 to mainform.enemys.Count - 2 do
295
    begin
292
    begin
296
      if strtoint(filter(1, mainform.enemys.Strings[i])) > strtoint(filter(1, mainform.enemys.Strings[i + 1])) then
293
      if strtoint(filter(1, mainform.enemys.Strings[i])) > strtoint(filter(1, mainform.enemys.Strings[i + 1])) then
297
      begin
294
      begin
298
        puffer := mainform.enemys.Strings[i];
295
        puffer := mainform.enemys.Strings[i];
299
        mainform.enemys.Strings[i] := mainform.enemys.Strings[i + 1];
296
        mainform.enemys.Strings[i] := mainform.enemys.Strings[i + 1];
300
        mainform.enemys.Strings[i + 1] := puffer;
297
        mainform.enemys.Strings[i + 1] := puffer;
301
      end;
298
      end;
302
    end;
299
    end;
303
  end;
300
  end;
304
  // Speichern
301
  // Speichern
305
  WriteLN(SavGame, '; SpaceMission ' + FCompVersion);
302
  WriteLN(SavGame, '; SpaceMission ' + FCompVersion);
306
  WriteLN(SavGame, '; LEV-File');
303
  WriteLN(SavGame, '; LEV-File');
307
  WriteLN(SavGame, inttostr(MainForm.ScrollBar.Max)); // --> Länge der Karte
304
  WriteLN(SavGame, inttostr(MainForm.ScrollBar.Max)); // --> Länge der Karte
308
  for i := 0 to mainform.enemys.count-1 do
305
  for i := 0 to mainform.enemys.count-1 do
309
  begin
306
  begin
310
    WriteLN(SavGame, filter(3, mainform.enemys.Strings[i]));
307
    WriteLN(SavGame, filter(3, mainform.enemys.Strings[i]));
311
    WriteLN(SavGame, filter(1, mainform.enemys.Strings[i]));
308
    WriteLN(SavGame, filter(1, mainform.enemys.Strings[i]));
312
    WriteLN(SavGame, filter(2, mainform.enemys.Strings[i]));
309
    WriteLN(SavGame, filter(2, mainform.enemys.Strings[i]));
313
    WriteLN(SavGame, filter(4, mainform.enemys.Strings[i]));
310
    WriteLN(SavGame, filter(4, mainform.enemys.Strings[i]));
314
  end;
311
  end;
315
  // Schließen
312
  // Schließen
316
  CloseFile(SavGame);
313
  CloseFile(SavGame);
317
  // Nacharbeiten
314
  // Nacharbeiten
318
  MainForm.LevChanged := false;
315
  MainForm.LevChanged := false;
319
  MainForm.AnzeigeAct;
316
  MainForm.AnzeigeAct;
320
  SearchLevels;
317
  SearchLevels;
321
end;
318
end;
322
 
319
 
323
procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
320
procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
324
var
321
var
325
  Ergebnis, boss, l, temp: string;
322
  Ergebnis, boss, l, temp: string;
326
  SavGame: textfile;
323
  SavGame: textfile;
327
  x, a: integer;
324
  x, a: integer;
328
begin
325
begin
329
  li1a.visible := false;
326
  li1a.visible := false;
330
  li2a.visible := false;
327
  li2a.visible := false;
331
  li3a.visible := false;
328
  li3a.visible := false;
332
  li1b.visible := false;
329
  li1b.visible := false;
333
  li2b.visible := false;
330
  li2b.visible := false;
334
  li3b.visible := false;
331
  li3b.visible := false;
335
  liu.visible := false;
332
  liu.visible := false;
336
  liw.visible := false;
333
  liw.visible := false;
337
  if (LevelListBox.items.count=0) or (LevelListBox.itemindex = -1) then
334
  if (LevelListBox.items.count=0) or (LevelListBox.itemindex = -1) then
338
  begin
335
  begin
339
    ladenbtn.enabled := false;
336
    ladenbtn.enabled := false;
340
    loeschenbtn.enabled := false;
337
    loeschenbtn.enabled := false;
341
    liw.visible := true;
338
    liw.visible := true;
342
    exit;
339
    exit;
343
  end;
340
  end;
344
  temp := LevelListBox.Items.strings[LevelListBox.itemindex];
341
  temp := LevelListBox.Items.strings[LevelListBox.itemindex];
345
  SpinEdit.Position := strtoint(RightStr(temp, length(temp)-6));
342
  SpinEdit.Position := strtoint(RightStr(temp, length(temp)-6));
346
  AssignFile(SavGame, mainform.FDirectory+'Levels\'+
343
  AssignFile(SavGame, FDirectory+'Levels\'+
347
    LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
344
    LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
348
  Reset(SavGame);
345
  Reset(SavGame);
349
  ReadLN(SavGame, Ergebnis);
346
  ReadLN(SavGame, Ergebnis);
350
  if Ergebnis <> '; SpaceMission '+FCompVersion then
347
  if Ergebnis <> '; SpaceMission '+FCompVersion then
351
  begin
348
  begin
352
    liu.visible := true;
349
    liu.visible := true;
353
    LadenBtn.enabled := false;
350
    LadenBtn.enabled := false;
354
    CloseFile(SavGame);
351
    CloseFile(SavGame);
355
    exit;
352
    exit;
356
  end;
353
  end;
357
  ReadLN(SavGame, Ergebnis);
354
  ReadLN(SavGame, Ergebnis);
358
  if Ergebnis <> '; LEV-File' then
355
  if Ergebnis <> '; LEV-File' then
359
  begin
356
  begin
360
    liu.visible := true;
357
    liu.visible := true;
361
    LadenBtn.enabled := false;
358
    LadenBtn.enabled := false;
362
    CloseFile(SavGame);
359
    CloseFile(SavGame);
363
    exit;
360
    exit;
364
  end;
361
  end;
365
  ReadLN(SavGame, l);
362
  ReadLN(SavGame, l);
366
  x := 0;
363
  x := 0;
367
  a := 0;
364
  a := 0;
368
  boss := 'Nein';
365
  boss := 'Nein';
369
  while not SeekEOF(SavGame) do
366
  while not SeekEOF(SavGame) do
370
  begin
367
  begin
371
    ReadLN(SavGame, Ergebnis);
368
    ReadLN(SavGame, Ergebnis);
372
    inc(a);
369
    inc(a);
373
    if a = 5 then a := 1;
370
    if a = 5 then a := 1;
374
    if (a = 1) and (Ergebnis = '7') then boss := 'Ja';
371
    if (a = 1) and (Ergebnis = '7') then boss := 'Ja';
375
    inc(x);
372
    inc(x);
376
  end;
373
  end;
377
  CloseFile(SavGame);
374
  CloseFile(SavGame);
378
  if a <> 4 then
375
  if a <> 4 then
379
  begin
376
  begin
380
    liu.visible := true;
377
    liu.visible := true;
381
    LadenBtn.enabled := false;
378
    LadenBtn.enabled := false;
382
  end
379
  end
383
  else
380
  else
384
  begin
381
  begin
385
    li1a.visible := true;
382
    li1a.visible := true;
386
    li2a.visible := true;
383
    li2a.visible := true;
387
    li3a.visible := true;
384
    li3a.visible := true;
388
    li1b.visible := true;
385
    li1b.visible := true;
389
    li2b.visible := true;
386
    li2b.visible := true;
390
    li3b.visible := true;
387
    li3b.visible := true;
391
    LadenBtn.enabled := true;
388
    LadenBtn.enabled := true;
392
    LoeschenBtn.enabled := true;
389
    LoeschenBtn.enabled := true;
393
    li1b.caption := inttostr(trunc(x / 4));
390
    li1b.caption := inttostr(trunc(x / 4));
394
    li2b.caption := boss;
391
    li2b.caption := boss;
395
    li3b.caption := l + ' Felder';
392
    li3b.caption := l + ' Felder';
396
  end;
393
  end;
397
end;
394
end;
398
 
395
 
399
procedure TSpeicherungForm.Button4Click(Sender: TObject);
396
procedure TSpeicherungForm.Button4Click(Sender: TObject);
400
begin
397
begin
401
  close;
398
  close;
402
end;
399
end;
403
 
400
 
404
procedure TSpeicherungForm.FormShow(Sender: TObject);
401
procedure TSpeicherungForm.FormShow(Sender: TObject);
405
begin
402
begin
406
  mainform.dxtimer.enabled := false;
403
  mainform.dxtimer.enabled := false;
407
  SearchLevels;
404
  SearchLevels;
408
end;
405
end;
409
 
406
 
410
procedure TSpeicherungForm.DsFancyButton2Click(Sender: TObject);
407
procedure TSpeicherungForm.DsFancyButton2Click(Sender: TObject);
411
begin
408
begin
412
  SearchLevels;
409
  SearchLevels;
413
end;
410
end;
414
 
411
 
415
procedure TSpeicherungForm.AbbrechenBtnClick(Sender: TObject);
412
procedure TSpeicherungForm.AbbrechenBtnClick(Sender: TObject);
416
begin
413
begin
417
  close;
414
  close;
418
end;
415
end;
419
 
416
 
420
procedure TSpeicherungForm.LevelNameChange(Sender: TObject);
417
procedure TSpeicherungForm.LevelNameChange(Sender: TObject);
421
begin
418
begin
422
  {...}
419
  {...}
423
end;
420
end;
424
 
421
 
425
procedure TSpeicherungForm.LevelListBoxDblClick(Sender: TObject);
422
procedure TSpeicherungForm.LevelListBoxDblClick(Sender: TObject);
426
begin
423
begin
427
  LadenBtn.click;
424
  LadenBtn.click;
428
end;
425
end;
429
 
426
 
430
procedure TSpeicherungForm.FormHide(Sender: TObject);
427
procedure TSpeicherungForm.FormHide(Sender: TObject);
431
begin
428
begin
432
  mainform.dxtimer.enabled := true;
429
  mainform.dxtimer.enabled := true;
433
end;
430
end;
434
 
431
 
435
procedure TSpeicherungForm.SpinEditClick(Sender: TObject;
432
procedure TSpeicherungForm.SpinEditClick(Sender: TObject;
436
  Button: TUDBtnType);
433
  Button: TUDBtnType);
437
begin
434
begin
438
  SpinEditEdt.Text := inttostr(SpinEdit.position);
435
  SpinEditEdt.Text := inttostr(SpinEdit.position);
439
end;
436
end;
440
 
437
 
441
procedure TSpeicherungForm.SpinEditEdtKeyPress(Sender: TObject;
438
procedure TSpeicherungForm.SpinEditEdtKeyPress(Sender: TObject;
442
  var Key: Char);
439
  var Key: Char);
443
begin
440
begin
444
  if not (Key in [#13, #08, '0'..'9']) then
441
  if not (Key in [#13, #08, '0'..'9']) then
445
    Key := #0;
442
    Key := #0;
446
end;
443
end;
447
 
444
 
448
procedure TSpeicherungForm.SpinEditEdtChange(Sender: TObject);
445
procedure TSpeicherungForm.SpinEditEdtChange(Sender: TObject);
449
begin
446
begin
450
  SpinEdit.Position := strtoint(SpinEditEdt.text);
447
  SpinEdit.Position := strtoint(SpinEditEdt.text);
451
end;
448
end;
452
 
449
 
453
end.
450
end.
454
 
451
 
455
 
452