Subversion Repositories spacemission

Rev

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

Rev 21 Rev 22
Line 1... Line 1...
1
unit GamMain;
1
unit GamMain;
2
 
2
 
3
// TODO unDelphiX auf GitHub
-
 
4
// - Dokumente als MarkDown
-
 
5
// - dxmEdit + dxwEdit fixes
-
 
6
// (GIT OK) - Dplay disable
-
 
7
 
-
 
8
// TODO 2024 Review
3
// TODO 2024 Review
9
// ----------------
4
// ----------------
10
//              Quellcode optimieren und klassen-namen überdenken
-
 
11
// [OK SVN 12]  Form Screen center anstelle Desktop Center
5
// [OK SVN 12]  Form Screen center anstelle Desktop Center
-
 
6
// [OK SVN 17]  Levelconverter entfernen, stattdessen einlesen abwärtskompatibel machen
-
 
7
// [OK SVN 18]  MCI hangs a lot! Use new unDelphiX DXMusic component for MIDI!
-
 
8
// [OK SVN 19]  Pause wird nicht in Caption geschrieben
-
 
9
// [OK SVN 19]  Wenn man pause gemacht hat und fenster wechselt und wieder zurückwechselt, ist pause aufgehoben.
-
 
10
// [OK SVN 21]  DPlayX.dll auskommentieren wegen Windows Meldung
12
//              Vollbild entf.
11
// [OK SVN 22]  Vollbild entf.
13
// [OK SVN 21]  DPlayX.dll auskommentieren => OK!
12
// [OK SVN 22]  Credits: unDelphiX (micrel.cz/Dx)
-
 
13
//              Quellcode optimieren und klassen-namen überdenken
14
//              EV CodeSign
14
//              EV CodeSign
15
//              Spielstände usw. "Spiele" Ordner speichern, Config in Registry sichern, etc.
15
//              Spielstände usw. "Spiele" Ordner speichern, Config in Registry sichern, etc.
16
//              Neue Einheiten => Medikit, Ufo das im Kreis fliegt und nicht weggeht
16
//              Neue Einheiten => Medikit, Ufo das im Kreis fliegt und nicht weggeht
17
//              Bei Pause => Entweder alles grau werden lassen
17
//              Bei Pause => Entweder alles grau werden lassen
18
// [OK SVN 19]  Pause wird nicht in Caption geschrieben
-
 
19
// [OK SVN 19]  Wenn man pause gemacht hat und fenster wechselt und wieder zurückwechselt, ist pause aufgehoben.
-
 
20
//              Alle Notizen durchschauen
18
//              Alle Notizen durchschauen
21
//              Boss schwieriger machen: Er soll auch nach links und rechts gehen?
19
//              Boss schwieriger machen: Er soll auch nach links und rechts gehen?
22
//              Cooldown für Laser?
20
//              Cooldown für Laser?
23
//              Improve Sound effects
21
//              Improve Sound effects
24
// [OK SVN 18]  MCI hangs a lot! Use new unDelphiX DXMusic component for MIDI!
-
 
25
//              Zwei Fenster in Taskleiste
22
//              Zwei Fenster in Taskleiste
26
//              "Doku" in Hilfemenü einbinden, ggf. auch den Leveleditor ins Menü machen
23
//              "Doku" in Hilfemenü einbinden, ggf. auch den Leveleditor ins Menü machen
27
//              Highscore Liste
24
//              Highscore Liste
28
//              Multilingual (all strings in resourcestrings)
25
//              Multilingual (all strings in resourcestrings)
29
// [OK SVN 17]  Levelconverter entfernen, stattdessen einlesen abwärtskompatibel machen
-
 
30
//              Credits: unDelphiX (micrel.cz/Dx)
-
 
31
 
26
 
32
interface
27
interface
33
 
28
 
34
uses
29
uses
35
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
30
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Line 225... Line 220...
225
    Spiel: TMenuItem;
220
    Spiel: TMenuItem;
226
    GameStart: TMenuItem;
221
    GameStart: TMenuItem;
227
    GamePause: TMenuItem;
222
    GamePause: TMenuItem;
228
    Beenden: TMenuItem;
223
    Beenden: TMenuItem;
229
    Einstellungen: TMenuItem;
224
    Einstellungen: TMenuItem;
230
    OptionFullScreen: TMenuItem;
-
 
231
    OptionMusic: TMenuItem;
225
    OptionMusic: TMenuItem;
232
    Leer2: TMenuItem;
226
    Leer2: TMenuItem;
233
    Leer4: TMenuItem;
-
 
234
    Hilfe: TMenuItem;
227
    Hilfe: TMenuItem;
235
    OptionSound: TMenuItem;
228
    OptionSound: TMenuItem;
236
    Leer3: TMenuItem;
229
    Leer3: TMenuItem;
237
    Spielstand: TMenuItem;
230
    Spielstand: TMenuItem;
238
    Leer5: TMenuItem;
231
    Leer5: TMenuItem;
239
    Neustart: TMenuItem;
232
    Neustart: TMenuItem;
240
    OptionBreitbild: TMenuItem;
-
 
241
    Spielgeschwindigkeit: TMenuItem;
233
    Spielgeschwindigkeit: TMenuItem;
242
    Leicht: TMenuItem;
234
    Leicht: TMenuItem;
243
    Mittel: TMenuItem;
235
    Mittel: TMenuItem;
244
    Schwer: TMenuItem;
236
    Schwer: TMenuItem;
245
    Informationen: TMenuItem;
237
    Informationen: TMenuItem;
Line 252... Line 244...
252
    procedure DXDrawInitialize(Sender: TObject);
244
    procedure DXDrawInitialize(Sender: TObject);
253
    procedure FormCreate(Sender: TObject);
245
    procedure FormCreate(Sender: TObject);
254
    procedure DXTimerTimer(Sender: TObject; LagCount: Integer);
246
    procedure DXTimerTimer(Sender: TObject; LagCount: Integer);
255
    procedure DXTimerActivate(Sender: TObject);
247
    procedure DXTimerActivate(Sender: TObject);
256
    procedure DXTimerDeactivate(Sender: TObject);
248
    procedure DXTimerDeactivate(Sender: TObject);
257
    procedure OptionFullScreenClick(Sender: TObject);
-
 
258
    procedure DXDrawInitializing(Sender: TObject);
249
    procedure DXDrawInitializing(Sender: TObject);
259
    procedure GameStartClick(Sender: TObject);
250
    procedure GameStartClick(Sender: TObject);
260
    procedure GamePauseClick(Sender: TObject);
251
    procedure GamePauseClick(Sender: TObject);
261
    procedure BeendenClick(Sender: TObject);
252
    procedure BeendenClick(Sender: TObject);
262
    procedure OptionSoundClick(Sender: TObject);
253
    procedure OptionSoundClick(Sender: TObject);
263
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
-
 
264
    procedure OptionMusicClick(Sender: TObject);
254
    procedure OptionMusicClick(Sender: TObject);
265
    procedure SpielstandClick(Sender: TObject);
255
    procedure SpielstandClick(Sender: TObject);
266
    procedure NeustartClick(Sender: TObject);
256
    procedure NeustartClick(Sender: TObject);
267
    procedure OptionBreitbildClick(Sender: TObject);
-
 
268
    procedure LeichtClick(Sender: TObject);
257
    procedure LeichtClick(Sender: TObject);
269
    procedure MittelClick(Sender: TObject);
258
    procedure MittelClick(Sender: TObject);
270
    procedure SchwerClick(Sender: TObject);
259
    procedure SchwerClick(Sender: TObject);
271
    procedure FormShow(Sender: TObject);
260
    procedure FormShow(Sender: TObject);
272
    procedure InformationenClick(Sender: TObject);
261
    procedure InformationenClick(Sender: TObject);
Line 524... Line 513...
524
    Imagelist.Items.LoadFromFile(FDirectory+'DirectX\Graphic.dxg');
513
    Imagelist.Items.LoadFromFile(FDirectory+'DirectX\Graphic.dxg');
525
    ImageList.Items.MakeColorTable;
514
    ImageList.Items.MakeColorTable;
526
    DXDraw.ColorTable := ImageList.Items.ColorTable;
515
    DXDraw.ColorTable := ImageList.Items.ColorTable;
527
    DXDraw.DefColorTable := ImageList.Items.ColorTable;
516
    DXDraw.DefColorTable := ImageList.Items.ColorTable;
528
    DXDraw.UpdatePalette;
517
    DXDraw.UpdatePalette;
529
    OptionBreitBild.enabled := OptionFullScreen.checked;
-
 
530
    DXDraw.Finalize;
518
    DXDraw.Finalize;
531
    if OptionFullScreen.Checked then
-
 
532
    begin
-
 
533
      if not (doFullScreen in DXDraw.Options) then StoreWindow;
-
 
534
      DXDraw.Options := DXDraw.Options + [doFullScreen];
-
 
535
    end
-
 
536
    else
-
 
537
    begin
-
 
538
      if doFullScreen in DXDraw.Options then RestoreWindow;
-
 
539
      DXDraw.Options := DXDraw.Options - [doFullScreen];
519
    DXDraw.Options := DXDraw.Options - [doFullScreen];
540
    end;
-
 
541
    if not OptionBreitBild.checked then
-
 
542
    begin
-
 
543
      dxdraw.autosize := false;
-
 
544
      dxdraw.Top := 0;
-
 
545
      dxdraw.Left := 0;
-
 
546
      dxdraw.width := mainform.ClientWidth;
-
 
547
      dxdraw.height := mainform.ClientHeight;
-
 
548
      dxdraw.surfacewidth := mainform.ClientWidth;
-
 
549
      dxdraw.surfaceheight := mainform.ClientHeight;
-
 
550
    end
-
 
551
    else dxdraw.autosize := true;
520
    DXDraw.autosize := true;
552
    DXDraw.Initialize;
521
    DXDraw.Initialize;
553
  except
522
  except
554
    //Imagelist.Items.clear;
523
    //Imagelist.Items.clear;
555
    //application.terminate;
524
    //application.terminate;
556
  end;
525
  end;
Line 1269... Line 1238...
1269
    exit;
1238
    exit;
1270
  end;
1239
  end;
1271
  GameStartClick(GameStart);
1240
  GameStartClick(GameStart);
1272
end;
1241
end;
1273
 
1242
 
1274
procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
-
 
1275
  Shift: TShiftState);
-
 
1276
begin
-
 
1277
  if (ssAlt in Shift) and (Key=VK_RETURN) then
-
 
1278
    OptionFullScreenClick(OptionFullScreen);
-
 
1279
end;
-
 
1280
 
-
 
1281
procedure TMainForm.GameStartClick(Sender: TObject);
1243
procedure TMainForm.GameStartClick(Sender: TObject);
1282
begin
1244
begin
1283
  StartScene(gsTitle);
1245
  StartScene(gsTitle);
1284
end;
1246
end;
1285
 
1247
 
Line 1405... Line 1367...
1405
procedure TMainForm.BeendenClick(Sender: TObject);
1367
procedure TMainForm.BeendenClick(Sender: TObject);
1406
begin
1368
begin
1407
  close;
1369
  close;
1408
end;
1370
end;
1409
 
1371
 
1410
procedure TMainForm.OptionFullScreenClick(Sender: TObject);
-
 
1411
begin
-
 
1412
  OptionFullScreen.Checked := not OptionFullScreen.Checked;
-
 
1413
  DXInit;
-
 
1414
  writeoptions;
-
 
1415
end;
-
 
1416
 
-
 
1417
procedure TMainForm.OptionSoundClick(Sender: TObject);
1372
procedure TMainForm.OptionSoundClick(Sender: TObject);
1418
begin
1373
begin
1419
  OptionSound.Checked := not OptionSound.Checked;
1374
  OptionSound.Checked := not OptionSound.Checked;
1420
  SoundInit;
1375
  SoundInit;
1421
  WriteOptions;
1376
  WriteOptions;
Line 1552... Line 1507...
1552
  try
1507
  try
1553
    if OptionMusic.checked then INIDatei.WriteBool('Settings', 'Music', true)
1508
    if OptionMusic.checked then INIDatei.WriteBool('Settings', 'Music', true)
1554
      else INIDatei.WriteBool('Settings', 'Music', false);
1509
      else INIDatei.WriteBool('Settings', 'Music', false);
1555
    if OptionSound.checked then INIDatei.WriteBool('Settings', 'Sound', true)
1510
    if OptionSound.checked then INIDatei.WriteBool('Settings', 'Sound', true)
1556
      else INIDatei.WriteBool('Settings', 'Sound', false);
1511
      else INIDatei.WriteBool('Settings', 'Sound', false);
1557
    if OptionFullScreen.checked then INIDatei.WriteBool('Settings', 'FullScreen', true)
-
 
1558
      else INIDatei.WriteBool('Settings', 'FullScreen', false);
-
 
1559
    if OptionBreitbild.checked then INIDatei.WriteBool('Settings', 'ScreenAutoSize', true)
-
 
1560
      else INIDatei.WriteBool('Settings', 'ScreenAutoSize', false);
-
 
1561
    if FInterval = giLeicht then INIDatei.WriteInteger('Settings', 'Speed', 1);
1512
    if FInterval = giLeicht then INIDatei.WriteInteger('Settings', 'Speed', 1);
1562
    if FInterval = giMittel then INIDatei.WriteInteger('Settings', 'Speed', 2);
1513
    if FInterval = giMittel then INIDatei.WriteInteger('Settings', 'Speed', 2);
1563
    if FInterval = giSchwer then INIDatei.WriteInteger('Settings', 'Speed', 3);
1514
    if FInterval = giSchwer then INIDatei.WriteInteger('Settings', 'Speed', 3);
1564
    if FInterval = giMaster then INIDatei.WriteInteger('Settings', 'Speed', 4);
1515
    if FInterval = giMaster then INIDatei.WriteInteger('Settings', 'Speed', 4);
1565
  finally
1516
  finally
Line 1573... Line 1524...
1573
begin
1524
begin
1574
  INIDatei := TIniFile.Create(FDirectory+'Einstellungen\SpaceMission.ini');
1525
  INIDatei := TIniFile.Create(FDirectory+'Einstellungen\SpaceMission.ini');
1575
  try
1526
  try
1576
    optionmusic.checked := INIDatei.ReadBool('Settings', 'Music', true);
1527
    optionmusic.checked := INIDatei.ReadBool('Settings', 'Music', true);
1577
    optionsound.checked := INIDatei.ReadBool('Settings', 'Sound', true);
1528
    optionsound.checked := INIDatei.ReadBool('Settings', 'Sound', true);
1578
    optionfullscreen.checked := INIDatei.ReadBool('Settings', 'fullscreen', false);
-
 
1579
    OptionBreitBild.checked := INIDatei.ReadBool('Settings', 'ScreenAutoSize', true);
-
 
1580
    if INIDatei.ReadInteger('Settings', 'Speed', 2) = 1 then
1529
    if INIDatei.ReadInteger('Settings', 'Speed', 2) = 1 then
1581
    begin
1530
    begin
1582
      FInterval := giLeicht;
1531
      FInterval := giLeicht;
1583
      Leicht.checked := true;
1532
      Leicht.checked := true;
1584
    end;
1533
    end;
Line 2393... Line 2342...
2393
  EnemyCounter := 0;
2342
  EnemyCounter := 0;
2394
  StartScene(gsMain);
2343
  StartScene(gsMain);
2395
  MusicSwitchTrack(mtGame);
2344
  MusicSwitchTrack(mtGame);
2396
end;
2345
end;
2397
 
2346
 
2398
procedure TMainForm.OptionBreitbildClick(Sender: TObject);
-
 
2399
begin
-
 
2400
  OptionBreitbild.Checked := not OptionBreitbild.Checked;
-
 
2401
  DXInit;
-
 
2402
  writeoptions;
-
 
2403
end;
-
 
2404
 
-
 
2405
procedure TMainForm.LeichtClick(Sender: TObject);
2347
procedure TMainForm.LeichtClick(Sender: TObject);
2406
begin
2348
begin
2407
  leicht.checked := true;
2349
  leicht.checked := true;
2408
  FInterval := giLeicht;
2350
  FInterval := giLeicht;
2409
  writeoptions;
2351
  writeoptions;