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; |