Rev 14 | Rev 17 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 14 | Rev 15 | ||
---|---|---|---|
Line 16... | Line 16... | ||
16 | // Musik und Sounds optimieren |
16 | // Musik und Sounds optimieren |
17 | // Pausiertes Spiel: Fenster bewegen lässt das Spiel wieder starten |
17 | // Pausiertes Spiel: Fenster bewegen lässt das Spiel wieder starten |
18 | // Zwei Fenster in Taskleiste |
18 | // Zwei Fenster in Taskleiste |
19 | // "Doku" in Hilfemenü einbinden, ggf. auch den Leveleditor ins Menü machen |
19 | // "Doku" in Hilfemenü einbinden, ggf. auch den Leveleditor ins Menü machen |
20 | // Highscore Liste |
20 | // Highscore Liste |
21 | // Multilingual |
21 | // Multilingual (all strings in resourcestrings) |
22 | // Levelconverter entfernen, stattdessen einlesen abwärtskompatibel machen |
22 | // Levelconverter entfernen, stattdessen einlesen abwärtskompatibel machen |
- | 23 | // hintergrundmusik als WAV anstelle MIDI ... new unDelphiX contains DXMusic component for MIDI? |
|
23 | // hintergrundmusik als WAV anstelle MIDI |
24 | // Credits: unDelphiX (micrel.cz/Dx) |
24 | 25 | ||
25 | interface |
26 | interface |
26 | 27 | ||
27 | uses |
28 | uses |
28 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, MMSystem, Dialogs, |
29 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, MMSystem, Dialogs, |
29 | StdCtrls, ExtCtrls, Menus, DIB, DXClass, DXSprite, DXDraws, DXInput, DXSounds, |
30 | StdCtrls, ExtCtrls, Menus, DIB, DXClass, DXSprite, DXDraws, DXInput, DXSounds, |
30 | INIFiles, ShellAPI, wininet, DirectX{$IF CompilerVersion >= 23.0}, |
31 | INIFiles, ShellAPI, wininet, DirectX{$IF CompilerVersion >= 23.0}, |
31 | System.UITypes{$IFEND}, ComLevelReader; |
32 | System.UITypes{$IFEND}, ComLevelReader, ComSaveGameReader; |
32 | 33 | ||
33 | type |
34 | type |
34 | TGameScene = ( |
35 | TGameScene = ( |
35 | gsNone, |
36 | gsNone, |
36 | gsTitle, |
37 | gsTitle, |
Line 303... | Line 304... | ||
303 | FNextScene: TGameScene; |
304 | FNextScene: TGameScene; |
304 | FScore: Integer; |
305 | FScore: Integer; |
305 | FNotSave: boolean; |
306 | FNotSave: boolean; |
306 | FLife: integer; |
307 | FLife: integer; |
307 | FLevel: integer; |
308 | FLevel: integer; |
308 | FMenuItem: integer; |
309 | FGameMode: TGameMode; |
309 | FBossLife: integer; |
310 | FBossLife: integer; |
310 | FRestEnemies: integer; |
311 | FRestEnemies: integer; |
311 | FCheat: boolean; |
312 | FCheat: boolean; |
312 | { VCL-Ersatz } |
313 | { VCL-Ersatz } |
313 | dxdraw: TDxDraw; |
314 | dxdraw: TDxDraw; |
Line 1179... | Line 1180... | ||
1179 | result := WaveOutGetNumDevs > 0; |
1180 | result := WaveOutGetNumDevs > 0; |
1180 | end; |
1181 | end; |
1181 | 1182 | ||
1182 | procedure TMainForm.FormCreate(Sender: TObject); |
1183 | procedure TMainForm.FormCreate(Sender: TObject); |
1183 | var |
1184 | var |
1184 | Ergebnis: string; |
- | |
1185 | daten: textfile; |
1185 | SavGame: TSaveData; |
1186 | ok: boolean; |
- | |
1187 | begin |
1186 | begin |
1188 | LevelData := TLevelData.Create; |
1187 | LevelData := TLevelData.Create; |
1189 | 1188 | ||
1190 | { Beginne VCL-Ersatz } |
1189 | { Beginne VCL-Ersatz } |
1191 | dxtimer := tdxtimer.Create(self); |
1190 | dxtimer := tdxtimer.Create(self); |
Line 1245... | Line 1244... | ||
1245 | SoundInit; |
1244 | SoundInit; |
1246 | MusicInit; |
1245 | MusicInit; |
1247 | ResetLevelData; |
1246 | ResetLevelData; |
1248 | if (paramcount = 0) and (fileexists(paramstr(1))) then // (paramcount > 0) |
1247 | if (paramcount = 0) and (fileexists(paramstr(1))) then // (paramcount > 0) |
1249 | begin |
1248 | begin |
1250 | // TODO: In "ComSavegameReader.pas" auslagern, so wie bei "ComLevelReader.pas" |
- | |
1251 | AssignFile(daten, paramstr(1)); |
1249 | SavGame := TSaveData.Create; |
1252 | Reset(daten); |
1250 | try |
1253 | ok := true; |
1251 | try |
1254 | ReadLN(daten, Ergebnis); |
1252 | SavGame.Load(paramstr(1)); |
1255 | if Ergebnis <> '; SpaceMission '+ProgramVersion then ok := false; |
1253 | mainform.FScore := SavGame.FScore; |
1256 | ReadLN(daten, Ergebnis); |
1254 | mainform.FLife := SavGame.FLife; |
1257 | if ergebnis <> '; SAV-File' then ok := false; |
1255 | mainform.FLevel := SavGame.FLevel; |
1258 | if not ok then |
1256 | mainform.FGameMode := SavGame.FGameMode; |
1259 | begin |
1257 | except |
1260 | showmessage(FileError); |
1258 | showmessage(FileError); |
1261 | CloseFile(daten); |
- | |
1262 | GameStartClick(GameStart); |
1259 | GameStartClick(GameStart); |
1263 | exit; |
1260 | exit; |
1264 | end; |
1261 | end; |
1265 | ReadLN(daten, mainform.FScore); |
- | |
1266 | ReadLN(daten, mainform.FLife); |
- | |
1267 | ReadLN(daten, mainform.Flevel); |
1262 | finally |
1268 | ReadLN(daten, mainform.FMenuItem); |
1263 | FreeAndNil(SavGame); |
1269 | CloseFile(daten); |
1264 | end; |
1270 | mainform.FNextScene := gsNewLevel; |
1265 | mainform.FNextScene := gsNewLevel; |
1271 | exit; |
1266 | exit; |
1272 | end; |
1267 | end; |
1273 | GameStartClick(GameStart); |
1268 | GameStartClick(GameStart); |
1274 | end; |
1269 | end; |
Line 1931... | Line 1926... | ||
1931 | act: integer; |
1926 | act: integer; |
1932 | Enemies: array[1..27] of TEnemyType; |
1927 | Enemies: array[1..27] of TEnemyType; |
1933 | e: TEnemyAdvent; |
1928 | e: TEnemyAdvent; |
1934 | begin |
1929 | begin |
1935 | ResetLevelData; |
1930 | ResetLevelData; |
1936 | if FMenuItem = 2 then |
1931 | if FGameMode = gmRandom then |
1937 | begin |
1932 | begin |
1938 | {$REGION 'Random game'} |
1933 | {$REGION 'Random game'} |
1939 | Enemies[1] := etEnemyAttacker; |
1934 | Enemies[1] := etEnemyAttacker; |
1940 | Enemies[2] := etEnemyMeteor; |
1935 | Enemies[2] := etEnemyMeteor; |
1941 | Enemies[3] := etEnemyUFO; |
1936 | Enemies[3] := etEnemyUFO; |
Line 2022... | Line 2017... | ||
2022 | Logo.DrawWaveX(DXDraw.Surface, trunc((dxdraw.surfaceWidth / 2) - (Logo.Width / 2)), 65, Logo.Width, Logo.Height, 0, |
2017 | Logo.DrawWaveX(DXDraw.Surface, trunc((dxdraw.surfaceWidth / 2) - (Logo.Width / 2)), 65, Logo.Width, Logo.Height, 0, |
2023 | 2, 80, Fangle * 4); |
2018 | 2, 80, Fangle * 4); |
2024 | inc(Fangle); |
2019 | inc(Fangle); |
2025 | with DXDraw.Surface.Canvas do |
2020 | with DXDraw.Surface.Canvas do |
2026 | begin |
2021 | begin |
2027 | if (isDown in MainForm.DXInput.States) and (FMenuItem=1) then FMenuItem := 2; |
2022 | if (isDown in MainForm.DXInput.States) and (FGameMode=gmLevels) then FGameMode := gmRandom; |
2028 | if ((isUp in MainForm.DXInput.States) and (FMenuItem=2)) or (FMenuItem=0) then FMenuItem := 1; |
2023 | if ((isUp in MainForm.DXInput.States) and (FGameMode=gmRandom)) or (FGameMode=gmUnknown) then FGameMode := gmLevels; |
2029 | Brush.Style := bsClear; |
2024 | Brush.Style := bsClear; |
2030 | Font.Size := 30; |
2025 | Font.Size := 30; |
2031 | if FMenuItem = 1 then |
2026 | if FGameMode = gmLevels then |
2032 | begin |
2027 | begin |
2033 | Font.Color := clMaroon; |
2028 | Font.Color := clMaroon; |
2034 | Textout((dxdraw.surfaceWidth div 2)-152, (dxdraw.surfaceheight div 2)-52, 'Normales Spiel'); |
2029 | Textout((dxdraw.surfaceWidth div 2)-152, (dxdraw.surfaceheight div 2)-52, 'Normales Spiel'); |
2035 | Textout((dxdraw.surfaceWidth div 2)-187, (dxdraw.surfaceheight div 2)-52, '>'); |
2030 | Textout((dxdraw.surfaceWidth div 2)-187, (dxdraw.surfaceheight div 2)-52, '>'); |
2036 | Font.Color := clRed; |
2031 | Font.Color := clRed; |
Line 2066... | Line 2061... | ||
2066 | end; |
2061 | end; |
2067 | // Weiter mit Leertaste oder Enter |
2062 | // Weiter mit Leertaste oder Enter |
2068 | if (isButton1 in DXInput.States) or (isButton2 in DXInput.States) then |
2063 | if (isButton1 in DXInput.States) or (isButton2 in DXInput.States) then |
2069 | begin |
2064 | begin |
2070 | FLevel := 1; |
2065 | FLevel := 1; |
2071 | if ((FMenuItem=1) and not fileexists(GetLevelFileName(FLevel))) or ((FMenuItem=2) and (FLevel > 20)) then |
2066 | if ((FGameMode=gmLevels) and not fileexists(GetLevelFileName(FLevel))) or ((FGameMode=gmRandom) and (FLevel > 20)) then |
2072 | begin |
2067 | begin |
2073 | //PlaySound('Frage', False); |
2068 | //PlaySound('Frage', False); |
2074 | exit; |
2069 | exit; |
2075 | end; |
2070 | end; |
2076 | NewLevel(FLevel); |
2071 | NewLevel(FLevel); |
Line 2309... | Line 2304... | ||
2309 | GamePause.enabled := false; |
2304 | GamePause.enabled := false; |
2310 | GameStart.enabled := true; |
2305 | GameStart.enabled := true; |
2311 | Spielgeschwindigkeit.enabled := false; |
2306 | Spielgeschwindigkeit.enabled := false; |
2312 | BossExists := false; |
2307 | BossExists := false; |
2313 | Spielgeschwindigkeit.enabled := false; |
2308 | Spielgeschwindigkeit.enabled := false; |
2314 | if ((FMenuItem=1) and (not fileexists(GetLevelFileName(FLevel)))) or ((FMenuItem=2) and (FLevel > 25)) then |
2309 | if ((FGameMode=gmLevels) and (not fileexists(GetLevelFileName(FLevel)))) or ((FGameMode=gmRandom) and (FLevel > 25)) then |
2315 | begin |
2310 | begin |
2316 | //PlaySound('SceneMov', False); |
2311 | //PlaySound('SceneMov', False); |
2317 | PalleteAnim(RGBQuad(0, 0, 0), 300); |
2312 | PalleteAnim(RGBQuad(0, 0, 0), 300); |
2318 | Sleep(200); |
2313 | Sleep(200); |
2319 | StartScene(gsWin); |
2314 | StartScene(gsWin); |