Subversion Repositories spacemission

Rev

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