Subversion Repositories spacemission

Rev

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

Rev 15 Rev 17
Line 28... Line 28...
28
    procedure Clear;
28
    procedure Clear;
29
    procedure Load(filename: string);
29
    procedure Load(filename: string);
30
    procedure Save(filename: string);
30
    procedure Save(filename: string);
31
  end;
31
  end;
32
 
32
 
-
 
33
function GetLevelFileName(lev: integer): string;
-
 
34
 
33
implementation
35
implementation
34
 
36
 
35
uses
37
uses
36
  SysUtils, Classes;
38
  SysUtils, StrUtils, Classes, Global;
-
 
39
 
-
 
40
function GetLevelFileName(lev: integer): string;
-
 
41
begin
-
 
42
  result := FDirectory+'Levels\Lev'+inttostr(lev)+'A1.lev'; // Version 0.2 Level Files
-
 
43
  if not FileExists(Result) then
-
 
44
    result := FDirectory+'Levels\Level '+inttostr(lev)+'.lev'; // Version 0.3+ Level Files
-
 
45
end;
37
 
46
 
38
{ TLevelData }
47
{ TLevelData }
39
 
48
 
40
procedure TLevelData.Clear;
49
procedure TLevelData.Clear;
41
begin
50
begin
Line 43... Line 52...
43
  LevelEditorLength := 0;
52
  LevelEditorLength := 0;
44
end;
53
end;
45
 
54
 
46
procedure TLevelData.Load(filename: string);
55
procedure TLevelData.Load(filename: string);
47
var
56
var
48
  sl: TStringList;
57
  sl, sl2: TStringList;
49
  curline: integer;
58
  curline: integer;
50
  ergebniss: string;
59
  ergebnis: string;
51
  e: TEnemyAdvent;
60
  e: TEnemyAdvent;
-
 
61
  z, act: integer;
-
 
62
  i, j: integer;
-
 
63
  temp: string;
-
 
64
  m: array[1..6] of tstrings;
52
begin
65
begin
53
  sl := TStringList.Create;
66
  sl := TStringList.Create;
54
  try
67
  try
-
 
68
    if EndsText('A1.lev', filename) then
-
 
69
    begin
-
 
70
      {$REGION 'Backwards compatibility level format 0.2 (split into 5-6 files)'}
-
 
71
      m[1] := TStringList.create;
-
 
72
      m[2] := TStringList.create;
-
 
73
      m[3] := TStringList.create;
-
 
74
      m[4] := TStringList.create;
-
 
75
      m[5] := TStringList.create;
-
 
76
      m[6] := TStringList.create;
-
 
77
      try
-
 
78
        for i := 1 to 6 do
-
 
79
        begin
-
 
80
          filename[Length(filename)-4] := IntToStr(i)[1]; // ...A2.sav, ...A3.sav, etc.
-
 
81
          if FileExists(filename) then
-
 
82
            m[i].loadfromfile(filename);
-
 
83
        end;
-
 
84
        m[1].strings[0] := '-624';
-
 
85
        if m[6].Text = '' then m[6].Text := '30000';
-
 
86
 
-
 
87
        sl.Add('; SpaceMission 0.3');
-
 
88
        sl.Add(temp);
-
 
89
        for j := 0 to m[1].count-2 do
-
 
90
        begin
-
 
91
          for i := 0 to m[1].count-2 do
-
 
92
          begin
-
 
93
            if strtoint(m[1].strings[i]) > strtoint(m[1].strings[i+1]) then
-
 
94
            begin
-
 
95
              m[1].exchange(i, i+1);
-
 
96
              m[2].exchange(i, i+1);
-
 
97
              m[3].exchange(i, i+1);
-
 
98
              m[4].exchange(i, i+1);
-
 
99
              m[5].exchange(i, i+1);
-
 
100
            end;
-
 
101
          end;
-
 
102
        end;
-
 
103
        for i := 0 to m[3].count-1 do
-
 
104
        begin
-
 
105
          for j := 1 to 4 do
-
 
106
          begin
-
 
107
            if j = 1 then sl.Add(m[3].strings[i]);
-
 
108
            if j = 2 then sl.Add(m[1].strings[i]);
-
 
109
            if j = 3 then sl.Add(m[2].strings[i]);
-
 
110
            if j = 4 then sl.Add(m[4].strings[i]);
-
 
111
          end;
-
 
112
        end;
-
 
113
      finally
-
 
114
        FreeAndNil(m[1]);
-
 
115
        FreeAndNil(m[2]);
-
 
116
        FreeAndNil(m[3]);
-
 
117
        FreeAndNil(m[4]);
-
 
118
        FreeAndNil(m[5]);
-
 
119
        FreeAndNil(m[6]);
-
 
120
      end;
-
 
121
      {$ENDREGION}
-
 
122
    end
-
 
123
    else
-
 
124
    begin
55
    sl.LoadFromFile(filename);
125
      sl.LoadFromFile(filename);
-
 
126
    end;
-
 
127
 
-
 
128
    if sl.Strings[0] = '; SpaceMission 0.3' then
-
 
129
    begin
-
 
130
      {$REGION 'Backwards compatibility level format 0.3'}
-
 
131
      sl.Strings[0] := '; SpaceMission 0.4';
-
 
132
      sl.Insert(1, '; SAV-File');
-
 
133
      {$ENDREGION}
-
 
134
    end;
-
 
135
 
-
 
136
    if sl.Strings[0] = '; SpaceMission 0.4' then
-
 
137
    begin
-
 
138
      {$REGION 'Backwards compatibility level format 0.4'}
-
 
139
      sl2 := TStringList.Create;
-
 
140
      try
-
 
141
        z := 0;
56
    curline := 0;
142
        act := 0;
-
 
143
        while z < sl.Count do
-
 
144
        begin
-
 
145
          inc(z);
-
 
146
          if z > 2 then inc(act);
-
 
147
          if act = 5 then act := 1;
-
 
148
          ergebnis := sl.Strings[z-1];
-
 
149
          if ergebnis = '; SpaceMission 0.4' then
-
 
150
            sl2.Add('; SpaceMission 1.0')
-
 
151
          else
-
 
152
          begin
-
 
153
            if (ergebnis = '30000') and (z = 3) then
-
 
154
              sl2.Add('1200')
-
 
155
            else
-
 
156
            begin
-
 
157
              //if not (((ergebnis = '0') and (z = 4)) or ((ergebnis = '-624') and (z = 5)) or ((ergebnis = '222') and (z = 6)) or ((ergebnis = '3') and (z = 7))) then
-
 
158
              if (z < 4) or (z > 7) then
-
 
159
              begin
-
 
160
                if act = 4 then
-
 
161
                  sl2.Add(inttostr(strtoint(ergebnis) + 32 - (5 * (strtoint(ergebnis) div 37))))
-
 
162
                else
-
 
163
                  sl2.Add(Ergebnis);
-
 
164
              end;
-
 
165
            end;
-
 
166
          end;
-
 
167
        end;
-
 
168
        sl.Text := sl2.Text;
-
 
169
      finally
-
 
170
        FreeAndNil(sl2);
-
 
171
      end;
-
 
172
      {$ENDREGION}
-
 
173
    end;
57
 
174
 
58
    ergebniss := sl.Strings[curline]; Inc(curline);
-
 
59
    if ergebniss = '; SpaceMission 1.0' then
175
    if sl.Strings[0] = '; SpaceMission 1.0' then
60
    begin
176
    begin
61
      ergebniss := sl.Strings[curline]; Inc(curline);
177
      {$REGION 'Level format 1.0'}
62
      if ergebniss <> '; LEV-File' then
178
      if sl.Strings[1]  <> '; LEV-File' then
63
      begin
179
      begin
64
        raise Exception.Create('Dies ist keine SpaceMission Level-Datei');
180
        raise Exception.Create('Dies ist keine SpaceMission Level-Datei');
65
      end;
181
      end;
66
 
182
 
67
      ergebniss := sl.Strings[curline]; Inc(curline);
-
 
68
      LevelEditorLength := StrToInt(ergebniss);
183
      LevelEditorLength := StrToInt(sl.Strings[2]);
69
 
184
 
-
 
185
      curline := 3;
70
      while curline < sl.Count do
186
      while curline < sl.Count do
71
      begin
187
      begin
72
        ergebniss := sl.Strings[curline]; Inc(curline);
188
        ergebnis := sl.Strings[curline]; Inc(curline);
73
        e.enemyType := TEnemyType(strtoint(ergebniss));
189
        e.enemyType := TEnemyType(strtoint(ergebnis));
74
        ergebniss := sl.Strings[curline]; Inc(curline);
190
        ergebnis := sl.Strings[curline]; Inc(curline);
75
        e.x := strtoint(ergebniss);
191
        e.x := strtoint(ergebnis);
76
        ergebniss := sl.Strings[curline]; Inc(curline);
192
        ergebnis := sl.Strings[curline]; Inc(curline);
77
        e.y := strtoint(ergebniss);
193
        e.y := strtoint(ergebnis);
78
        ergebniss := sl.Strings[curline]; Inc(curline);
194
        ergebnis := sl.Strings[curline]; Inc(curline);
79
        e.lifes := strtoint(ergebniss);
195
        e.lifes := strtoint(ergebnis);
80
 
196
 
81
        SetLength(EnemyAdventTable, Length(EnemyAdventTable)+1);
197
        SetLength(EnemyAdventTable, Length(EnemyAdventTable)+1);
82
        EnemyAdventTable[Length(EnemyAdventTable)-1] := e;
198
        EnemyAdventTable[Length(EnemyAdventTable)-1] := e;
83
      end;
199
      end;
-
 
200
      {$ENDREGION}
84
    end
201
    end
85
    else
202
    else
86
    begin
203
    begin
87
      // TODO: Support 0.2, 0.3, 0.4
-
 
88
      raise Exception.CreateFmt('Level-Format "%s" nicht unterstützt', [Copy(ergebniss, 3, Length(ergebniss)-2)]);
204
      raise Exception.CreateFmt('Level-Format "%s" nicht unterstützt', [Copy(ergebnis, 3, Length(ergebnis)-2)]);
89
    end;
205
    end;
90
  finally
206
  finally
91
    FreeAndNil(sl);
207
    FreeAndNil(sl);
92
  end;
208
  end;
93
end;
209
end;