Subversion Repositories spacemission

Rev

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

Rev 23 Rev 24
Line 8... Line 8...
8
// [OK SVN 19]  Pause wird nicht in Caption geschrieben
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.
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
10
// [OK SVN 21]  DPlayX.dll auskommentieren wegen Windows Meldung
11
// [OK SVN 22]  Vollbild entf.
11
// [OK SVN 22]  Vollbild entf.
12
// [OK SVN 22]  Credits: unDelphiX (micrel.cz/Dx)
12
// [OK SVN 22]  Credits: unDelphiX (micrel.cz/Dx)
13
//              Quellcode optimieren und klassen-namen überdenken
13
// [OK SVN 24]  Quellcode optimieren
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
//              Alle Notizen durchschauen
18
//              Alle Notizen durchschauen
Line 352... Line 352...
352
  MainForm: TMainForm;
352
  MainForm: TMainForm;
353
 
353
 
354
implementation
354
implementation
355
 
355
 
356
uses
356
uses
357
  GamSplash, GamSpeicherung, ComInfo, GamCheat, Global;
357
  GamSplash, GamSpeicherung, ComInfo, GamCheat, Global, MMSystem;
358
 
358
 
359
const
359
const
360
  conleicht = 650 div 60; // 10
360
  conleicht =  650 div 60; // 10
361
  conmittel = 1000 div 60; // 16
361
  conmittel = 1000 div 60; // 16
362
  conschwer = 1350 div 60; // 22
362
  conschwer = 1350 div 60; // 22
363
  conmaster = 2000 div 60; // 33
363
  conmaster = 2000 div 60; // 33
364
  lives = 6;
364
  lives = 6;
365
  DEFAULT_ANIMSPEED = 15/1000;
365
  DEFAULT_ANIMSPEED = 15/1000;
366
 
-
 
367
resourcestring
-
 
368
  FileError = 'Die Datei kann von SpaceMission nicht geöffnet werden!';
366
  ADDITIONAL_ENEMIES_PER_LEVEL = 75;
369
 
367
 
370
{$R *.DFM}
368
{$R *.DFM}
371
 
369
 
372
var
370
var
373
  Crash2, EnemyCounter: integer;
371
  Crash2, EnemyCounter: integer;
Line 378... Line 376...
378
    isButton4, isButton5, isButton6, isButton7, isButton8, isButton9, isButton10, isButton11,
376
    isButton4, isButton5, isButton6, isButton7, isButton8, isButton9, isButton10, isButton11,
379
    isButton12, isButton13, isButton14, isButton15, isButton16, isButton17, isButton18,
377
    isButton12, isButton13, isButton14, isButton15, isButton16, isButton17, isButton18,
380
    isButton19, isButton20, isButton21, isButton22, isButton23, isButton24, isButton25,
378
    isButton19, isButton20, isButton21, isButton22, isButton23, isButton24, isButton25,
381
    isButton26, isButton27, isButton28, isButton29, isButton30, isButton31, isButton32];
379
    isButton26, isButton27, isButton28, isButton29, isButton30, isButton31, isButton32];
382
 
380
 
-
 
381
// https://www.delphipraxis.net/post43515.html
-
 
382
function GetHTML(AUrl: string): string;
-
 
383
var
-
 
384
  databuffer : array[0..4095] of char;
-
 
385
  ResStr : string;
-
 
386
  hSession, hfile: hInternet;
-
 
387
  dwindex,dwcodelen,dwread,dwNumber: cardinal;
-
 
388
  dwcode : array[1..20] of char;
-
 
389
  res    : pchar;
-
 
390
  Str    : pchar;
-
 
391
begin
-
 
392
  ResStr:='';
-
 
393
  if (system.pos('http://',lowercase(AUrl))=0) and
-
 
394
     (system.pos('https://',lowercase(AUrl))=0) then
-
 
395
     AUrl:='http://'+AUrl;
-
 
396
 
-
 
397
  // Hinzugefügt
-
 
398
  application.ProcessMessages;
-
 
399
 
-
 
400
  hSession:=InternetOpen('InetURL:/1.0',
-
 
401
                         INTERNET_OPEN_TYPE_PRECONFIG,
-
 
402
                         nil,
-
 
403
                         nil,
-
 
404
                         0);
-
 
405
  if assigned(hsession) then
-
 
406
  begin
-
 
407
    // Hinzugefügt
-
 
408
    application.ProcessMessages;
-
 
409
 
-
 
410
    hfile:=InternetOpenUrl(
-
 
411
           hsession,
-
 
412
           pchar(AUrl),
-
 
413
           nil,
-
 
414
           0,
-
 
415
           INTERNET_FLAG_RELOAD,
-
 
416
           0);
-
 
417
    dwIndex  := 0;
-
 
418
    dwCodeLen := 10;
-
 
419
 
-
 
420
    // Hinzugefügt
-
 
421
    application.ProcessMessages;
-
 
422
 
-
 
423
    HttpQueryInfo(hfile,
-
 
424
                  HTTP_QUERY_STATUS_CODE,
-
 
425
                  @dwcode,
-
 
426
                  dwcodeLen,
-
 
427
                  dwIndex);
-
 
428
    res := pchar(@dwcode);
-
 
429
    dwNumber := sizeof(databuffer)-1;
-
 
430
    if (res ='200') or (res ='302') then
-
 
431
    begin
-
 
432
      while (InternetReadfile(hfile,
-
 
433
                              @databuffer,
-
 
434
                              dwNumber,
-
 
435
                              DwRead)) do
-
 
436
      begin
-
 
437
 
-
 
438
        // Hinzugefügt
-
 
439
        application.ProcessMessages;
-
 
440
 
-
 
441
        if dwRead =0 then
-
 
442
          break;
-
 
443
        databuffer[dwread]:=#0;
-
 
444
        Str := pchar(@databuffer);
-
 
445
        resStr := resStr + Str;
-
 
446
      end;
-
 
447
    end
-
 
448
    else
-
 
449
      ResStr := 'Status:'+res;
-
 
450
    if assigned(hfile) then
-
 
451
      InternetCloseHandle(hfile);
-
 
452
  end;
-
 
453
 
-
 
454
  // Hinzugefügt
-
 
455
  application.ProcessMessages;
-
 
456
 
-
 
457
  InternetCloseHandle(hsession);
-
 
458
  Result := resStr;
-
 
459
end;
-
 
460
 
-
 
461
 
-
 
462
{ TBackground }
-
 
463
 
-
 
464
procedure TBackground.DoMove(MoveCount: Integer);
-
 
465
var
-
 
466
  ran: integer;
-
 
467
begin
-
 
468
  inherited DoMove(MoveCount);
-
 
469
  X := X - MoveCount*(60/1000)*FSpeed;
-
 
470
  randomize;
-
 
471
  ran := Random(1500);
-
 
472
  if ran = 150 then
-
 
473
  begin
-
 
474
    with TBackgroundSpecial.Create(mainform.SpriteEngine.Engine) do
-
 
475
    begin
-
 
476
      SetMapSize(1, 1);
-
 
477
      Image := mainform.ImageList.Items.Find('Background-Planet1');
-
 
478
      Width := Image.Width;
-
 
479
      Height := Image.Height;
-
 
480
 
-
 
481
      Y := random(mainform.dxdraw.height);
-
 
482
      X := mainform.dxdraw.width;
-
 
483
 
-
 
484
      ran := Random(2);
-
 
485
      if ran = 0 then
-
 
486
      begin
-
 
487
        Z := -20;
-
 
488
        FSpeed := 1.8;
-
 
489
      end
-
 
490
      else if ran = 1 then
-
 
491
      begin
-
 
492
        Z := -40;
-
 
493
        FSpeed := 0.8;
-
 
494
      end
-
 
495
      else if ran = 2 then
-
 
496
      begin
-
 
497
        Z := -60;
-
 
498
        FSpeed := 0.3;
-
 
499
      end;
-
 
500
    end;
-
 
501
  end
-
 
502
  else if ran = 500 then
-
 
503
  begin
-
 
504
    with TBackgroundSpecial.Create(mainform.SpriteEngine.Engine) do
-
 
505
    begin
-
 
506
      SetMapSize(1, 1);
-
 
507
      ran := Random(4);
-
 
508
      if ran = 0 then
-
 
509
        Image := mainform.ImageList.Items.Find('Background-Red')
-
 
510
      else if ran = 1 then
-
 
511
        Image := mainform.ImageList.Items.Find('Background-Blue')
-
 
512
      else if ran = 2 then
-
 
513
        Image := mainform.ImageList.Items.Find('Background-Yellow')
-
 
514
      else if ran = 3 then
383
// TODO: Code komplett überarbeiten. Bessere Ableitungen machen
515
        Image := mainform.ImageList.Items.Find('Hintergrund-Rot');
-
 
516
      Width := Image.Width;
-
 
517
      Height := Image.Height;
-
 
518
 
-
 
519
      Y := random(mainform.dxdraw.height);
-
 
520
      X := mainform.dxdraw.width;
-
 
521
 
-
 
522
      { ran := Random(2);
-
 
523
      if ran = 0 then
-
 
524
      begin
-
 
525
        Z := -20;
-
 
526
        FSpeed := 1.8;
-
 
527
      end
-
 
528
      else if ran = 1 then
-
 
529
      begin
-
 
530
        Z := -40;
-
 
531
        FSpeed := 0.8;
-
 
532
      end
-
 
533
      else if ran = 2 then
-
 
534
      begin }
-
 
535
        Z := -60;
-
 
536
        FSpeed := 0.3;
-
 
537
      { end; }
-
 
538
    end;
-
 
539
  end;
-
 
540
end;
-
 
541
 
-
 
542
{ TBackgroundSpecial }
-
 
543
 
-
 
544
procedure TBackgroundSpecial.DoMove(MoveCount: Integer);
-
 
545
begin
-
 
546
  inherited DoMove(MoveCount);
-
 
547
  X := X - MoveCount*(60/1000)*FSpeed;
-
 
548
  if X<-Width then Dead;
-
 
549
end;
-
 
550
 
-
 
551
{ TExplosion }
-
 
552
 
-
 
553
constructor TExplosion.Create(AParent: TSprite);
-
 
554
begin
-
 
555
  inherited Create(AParent);
-
 
556
  mainform.PlaySound('Explosion', false);
-
 
557
  Image := MainForm.ImageList.Items.Find('Explosion');
-
 
558
  Width := Image.Width;
-
 
559
  Height := Image.Height;
-
 
560
  AnimCount := Image.PatternCount;
-
 
561
  AnimLooped := True;
-
 
562
  AnimSpeed := DEFAULT_ANIMSPEED;
-
 
563
  AnimPos := Random(AnimCount);
-
 
564
end;
-
 
565
 
-
 
566
procedure TExplosion.DoMove(MoveCount: Integer);
-
 
567
begin
-
 
568
  inherited DoMove(MoveCount);
-
 
569
  inc(FCounter, MoveCount);
-
 
570
  if FCounter > 2999 then dead;
-
 
571
end;
-
 
572
 
-
 
573
{ TPlayerSprite }
384
 
574
 
385
constructor TPlayerSprite.Create(AParent: TSprite);
575
constructor TPlayerSprite.Create(AParent: TSprite);
386
begin
576
begin
387
  inherited Create(AParent);
577
  inherited Create(AParent);
388
  Image := MainForm.ImageList.Items.Find('Machine');
578
  Image := MainForm.ImageList.Items.Find('Machine');
Line 507... Line 697...
507
procedure TPlayerSprite.FlyAway;
697
procedure TPlayerSprite.FlyAway;
508
begin
698
begin
509
  FState := pmFlyaway;
699
  FState := pmFlyaway;
510
end;
700
end;
511
 
701
 
512
procedure TMainForm.DXInit;
-
 
513
begin
-
 
514
  try
-
 
515
    Imagelist.Items.LoadFromFile(FDirectory+'DirectX\Graphic.dxg');
-
 
516
    ImageList.Items.MakeColorTable;
-
 
517
    DXDraw.ColorTable := ImageList.Items.ColorTable;
-
 
518
    DXDraw.DefColorTable := ImageList.Items.ColorTable;
-
 
519
    DXDraw.UpdatePalette;
-
 
520
    DXDraw.Finalize;
702
{ TPlayerTamaSprite }
521
    DXDraw.Options := DXDraw.Options - [doFullScreen];
-
 
522
    DXDraw.autosize := true;
-
 
523
    DXDraw.Initialize;
-
 
524
  except
-
 
525
    //Imagelist.Items.clear;
-
 
526
    //application.terminate;
-
 
527
  end;
-
 
528
end;
-
 
529
 
703
 
530
constructor TPlayerTamaSprite.Create(AParent: TSprite; APlayerSprite: TPlayerSprite);
704
constructor TPlayerTamaSprite.Create(AParent: TSprite; APlayerSprite: TPlayerSprite);
531
begin
705
begin
532
  inherited Create(AParent);
706
  inherited Create(AParent);
533
  FPlayerSprite := APlayerSprite;
707
  FPlayerSprite := APlayerSprite;
Line 563... Line 737...
563
  X := X+(800/1000)*MoveCount;
737
  X := X+(800/1000)*MoveCount;
564
  if X>=mainform.dxdraw.surfacewidth then Dead;
738
  if X>=mainform.dxdraw.surfacewidth then Dead;
565
  Collision;
739
  Collision;
566
end;
740
end;
567
 
741
 
568
procedure TBackground.DoMove(MoveCount: Integer);
-
 
569
var
-
 
570
  ran: integer;
-
 
571
begin
-
 
572
  inherited DoMove(MoveCount);
-
 
573
  X := X - MoveCount*(60/1000)*FSpeed;
-
 
574
  randomize;
742
{ TEnemy }
575
  ran := Random(1500);
-
 
576
  if ran = 150 then
-
 
577
  begin
-
 
578
    with TBackgroundSpecial.Create(mainform.SpriteEngine.Engine) do
-
 
579
    begin
-
 
580
      SetMapSize(1, 1);
-
 
581
      Image := mainform.ImageList.Items.Find('Background-Planet1');
-
 
582
      Width := Image.Width;
-
 
583
      Height := Image.Height;
-
 
584
 
743
 
585
      Y := random(mainform.dxdraw.height);
744
constructor TEnemy.Create(AParent: TSprite; ALifes: integer);
586
      X := mainform.dxdraw.width;
-
 
587
 
-
 
588
      ran := Random(2);
-
 
589
      if ran = 0 then
-
 
590
      begin
-
 
591
        Z := -20;
-
 
592
        FSpeed := 1.8;
-
 
593
      end
-
 
594
      else if ran = 1 then
-
 
595
      begin
-
 
596
        Z := -40;
-
 
597
        FSpeed := 0.8;
-
 
598
      end
-
 
599
      else if ran = 2 then
-
 
600
      begin
745
begin
601
        Z := -60;
746
  inherited Create(AParent);
602
        FSpeed := 0.3;
747
  FLife := ALifes;
603
      end;
748
  inc(EnemyCounter);
604
    end;
749
end;
605
  end
-
 
606
  else if ran = 500 then
-
 
607
  begin
-
 
608
    with TBackgroundSpecial.Create(mainform.SpriteEngine.Engine) do
-
 
609
    begin
-
 
610
      SetMapSize(1, 1);
-
 
611
      ran := Random(4);
-
 
612
      if ran = 0 then
-
 
613
        Image := mainform.ImageList.Items.Find('Background-Red')
-
 
614
      else if ran = 1 then
-
 
615
        Image := mainform.ImageList.Items.Find('Background-Blue')
-
 
616
      else if ran = 2 then
-
 
617
        Image := mainform.ImageList.Items.Find('Background-Yellow')
-
 
618
      else if ran = 3 then
-
 
619
        Image := mainform.ImageList.Items.Find('Hintergrund-Rot');
-
 
620
      Width := Image.Width;
-
 
621
      Height := Image.Height;
-
 
622
 
750
 
623
      Y := random(mainform.dxdraw.height);
-
 
624
      X := mainform.dxdraw.width;
-
 
625
 
-
 
626
      { ran := Random(2);
751
destructor TEnemy.Destroy;
627
      if ran = 0 then
-
 
628
      begin
-
 
629
        Z := -20;
-
 
630
        FSpeed := 1.8;
-
 
631
      end
-
 
632
      else if ran = 1 then
-
 
633
      begin
752
begin
634
        Z := -40;
-
 
635
        FSpeed := 0.8;
753
  inherited Destroy;
636
      end
-
 
637
      else if ran = 2 then
-
 
638
      begin }
-
 
639
        Z := -60;
-
 
640
        FSpeed := 0.3;
754
  dec(EnemyCounter);
641
      { end; }
-
 
642
    end;
-
 
643
  end;
-
 
644
end;
755
end;
645
 
756
 
646
procedure TBackgroundSpecial.DoMove(MoveCount: Integer);
757
procedure TEnemy.Hit(AHitStrength: integer = 1);
647
begin
758
begin
648
  inherited DoMove(MoveCount);
759
  Dec(FLife, AHitStrength);
649
  X := X - MoveCount*(60/1000)*FSpeed;
-
 
650
  if X<-Width then Dead;
760
  if FLife<=0 then
651
end;
-
 
652
 
-
 
653
constructor TExplosion.Create(AParent: TSprite);
-
 
654
begin
761
  begin
655
  inherited Create(AParent);
762
    Collisioned := False;
656
  mainform.PlaySound('Explosion', false);
-
 
657
  Image := MainForm.ImageList.Items.Find('Explosion');
-
 
658
  Width := Image.Width;
763
    HitEnemy(True);
659
  Height := Image.Height;
764
  end
660
  AnimCount := Image.PatternCount;
-
 
661
  AnimLooped := True;
765
  else
662
  AnimSpeed := DEFAULT_ANIMSPEED;
-
 
663
  AnimPos := Random(AnimCount);
766
    HitEnemy(False);
664
end;
767
end;
665
 
768
 
666
procedure TExplosion.DoMove(MoveCount: Integer);
769
procedure TEnemy.HitEnemy(ADead: Boolean);
667
begin
770
begin
668
  inherited DoMove(MoveCount);
771
  if ADead then
669
  inc(FCounter, MoveCount);
772
    MainForm.PlaySound('Explosion', False)
-
 
773
  else
670
  if FCounter > 2999 then dead;
774
    MainForm.PlaySound('Hit', False);
671
end;
775
end;
672
 
776
 
-
 
777
{ TEnemyTama }
-
 
778
 
673
constructor TEnemyTama.Create(AParent: TSprite; AEnemySprite: TSprite);
779
constructor TEnemyTama.Create(AParent: TSprite; AEnemySprite: TSprite);
674
begin
780
begin
675
  inherited Create(AParent);
781
  inherited Create(AParent);
676
  FEnemySprite := AEnemySprite;
782
  FEnemySprite := AEnemySprite;
677
  Image := MainForm.ImageList.Items.Find('Bounce2');
783
  Image := MainForm.ImageList.Items.Find('Bounce2');
Line 688... Line 794...
688
  inherited DoMove(MoveCount);
794
  inherited DoMove(MoveCount);
689
  X := X - MoveCount*(600/1000);
795
  X := X - MoveCount*(600/1000);
690
  if X<-Width then Dead;
796
  if X<-Width then Dead;
691
end;
797
end;
692
 
798
 
-
 
799
{ TEnemyMeteor }
-
 
800
 
693
procedure TEnemy.Hit(AHitStrength: integer = 1);
801
constructor TEnemyMeteor.Create(AParent: TSprite; ALifes: integer);
694
begin
802
begin
-
 
803
  inherited Create(AParent, ALifes);
-
 
804
  Image := MainForm.ImageList.Items.Find('Enemy-Meteor');
-
 
805
  Width := Image.Width;
695
  Dec(FLife, AHitStrength);
806
  Height := Image.Height;
-
 
807
  AnimCount := Image.PatternCount;
696
  if FLife<=0 then
808
  AnimLooped := True;
-
 
809
  AnimSpeed := DEFAULT_ANIMSPEED;
-
 
810
  PixelCheck := True;
-
 
811
end;
-
 
812
 
-
 
813
procedure TEnemyMeteor.HitEnemy(ADead: Boolean);
697
  begin
814
begin
698
    Collisioned := False;
-
 
699
    HitEnemy(True);
815
  inherited HitEnemy(False);
700
  end
816
 
701
  else
-
 
702
    HitEnemy(False);
817
  if ADead then Collisioned := True;
703
end;
818
end;
704
 
819
 
705
procedure TEnemy.HitEnemy(ADead: Boolean);
820
procedure TEnemyMeteor.DoMove(MoveCount: Integer);
706
begin
821
begin
707
  if ADead then
-
 
708
    MainForm.PlaySound('Explosion', False)
822
  X := X - MoveCount*(250/1000);
709
  else
-
 
710
    MainForm.PlaySound('Hit', False);
823
  if X < -Width then Dead;
711
end;
824
end;
712
 
825
 
-
 
826
{ TEnemyUFO }
-
 
827
 
713
constructor TEnemyUFO.Create(AParent: TSprite; ALifes: integer);
828
constructor TEnemyUFO.Create(AParent: TSprite; ALifes: integer);
714
begin
829
begin
715
  inherited Create(AParent, ALifes);
830
  inherited Create(AParent, ALifes);
716
  Image := MainForm.ImageList.Items.Find('Enemy-disk');
831
  Image := MainForm.ImageList.Items.Find('Enemy-disk');
717
  Width := Image.Width;
832
  Width := Image.Width;
Line 719... Line 834...
719
  AnimCount := Image.PatternCount;
834
  AnimCount := Image.PatternCount;
720
  AnimLooped := True;
835
  AnimLooped := True;
721
  AnimSpeed := DEFAULT_ANIMSPEED;
836
  AnimSpeed := DEFAULT_ANIMSPEED;
722
end;
837
end;
723
 
838
 
724
constructor TEnemy.Create(AParent: TSprite; ALifes: integer);
-
 
725
begin
-
 
726
  inherited Create(AParent);
-
 
727
  FLife := ALifes;
-
 
728
  inc(EnemyCounter);
-
 
729
end;
-
 
730
 
-
 
731
destructor TEnemy.Destroy;
-
 
732
begin
-
 
733
  inherited Destroy;
-
 
734
  dec(EnemyCounter);
-
 
735
end;
-
 
736
 
-
 
737
procedure TEnemyUFO.HitEnemy(ADead: Boolean);
839
procedure TEnemyUFO.HitEnemy(ADead: Boolean);
738
begin
840
begin
739
  inherited HitEnemy(ADead);
841
  inherited HitEnemy(ADead);
740
 
842
 
741
  if ADead then
843
  if ADead then
Line 755... Line 857...
755
  begin
857
  begin
756
    Inc(MainForm.FScore, 100);
858
    Inc(MainForm.FScore, 100);
757
  end;
859
  end;
758
end;
860
end;
759
 
861
 
760
procedure TEnemyUFO2.DoMove(MoveCount: Integer);
862
procedure TEnemyUFO.DoMove(MoveCount: Integer);
761
begin
863
begin
762
  inherited DoMove(MoveCount);
864
  inherited DoMove(MoveCount);
763
  if FMode=0 then
865
  if FMode=0 then
764
  begin
866
  begin
765
    X := X - MoveCount*(300/1000);
867
    X := X - MoveCount*(300/1000);
766
    Y := Y + Cos256(FCounter div 15)*2;
868
    Y := Y + Cos256(FCounter div 15)*2;
767
    if X<-Width then Dead;
869
    if X<-Width then Dead;
768
    if FCounter-FOldTamaTime>=100 then
-
 
769
    begin
-
 
770
      Inc(FTamaCount);
-
 
771
      with TEnemyTama.Create(Engine, Self) do
-
 
772
      begin
-
 
773
        X := Self.X;
-
 
774
        Y := Self.Y+Self.Height div 2-Height div 2;
-
 
775
        Z := 10;
-
 
776
      end;
-
 
777
      FOldTamaTime := FCounter;
-
 
778
    end;
-
 
779
  end
870
  end
780
  else if FMode=2 then
871
  else if FMode=2 then
781
  begin
872
  begin
782
    X := X - MoveCount*(300/1000);
873
    X := X - MoveCount*(300/1000);
783
    if FCounter>200 then Dead;
874
    if FCounter>200 then Dead;
784
  end;
875
  end;
785
  inc(FCounter, MoveCount);
876
  inc(FCounter, MoveCount);
786
end;
877
end;
787
 
878
 
-
 
879
{ TEnemyUFO2 }
-
 
880
 
-
 
881
constructor TEnemyUFO2.Create(AParent: TSprite; ALifes: integer);
-
 
882
begin
-
 
883
  inherited Create(AParent, ALifes);
-
 
884
  Image := MainForm.ImageList.Items.Find('Enemy-disk2');
-
 
885
  Width := Image.Width;
-
 
886
  Height := Image.Height;
-
 
887
  AnimCount := Image.PatternCount;
-
 
888
  AnimLooped := True;
-
 
889
  AnimSpeed := DEFAULT_ANIMSPEED;
-
 
890
end;
-
 
891
 
788
procedure TEnemyUFO2.HitEnemy(ADead: Boolean);
892
procedure TEnemyUFO2.HitEnemy(ADead: Boolean);
789
begin
893
begin
790
  inherited HitEnemy(ADead);
894
  inherited HitEnemy(ADead);
791
 
895
 
792
  if ADead then
896
  if ADead then
Line 806... Line 910...
806
  begin
910
  begin
807
    Inc(MainForm.FScore, 100);
911
    Inc(MainForm.FScore, 100);
808
  end;
912
  end;
809
end;
913
end;
810
 
914
 
811
constructor TEnemyUFO2.Create(AParent: TSprite; ALifes: integer);
-
 
812
begin
-
 
813
  inherited Create(AParent, ALifes);
-
 
814
  Image := MainForm.ImageList.Items.Find('Enemy-disk2');
-
 
815
  Width := Image.Width;
-
 
816
  Height := Image.Height;
-
 
817
  AnimCount := Image.PatternCount;
-
 
818
  AnimLooped := True;
-
 
819
  AnimSpeed := DEFAULT_ANIMSPEED;
-
 
820
end;
-
 
821
 
-
 
822
procedure TEnemyUFO.DoMove(MoveCount: Integer);
915
procedure TEnemyUFO2.DoMove(MoveCount: Integer);
823
begin
916
begin
824
  inherited DoMove(MoveCount);
917
  inherited DoMove(MoveCount);
825
  if FMode=0 then
918
  if FMode=0 then
826
  begin
919
  begin
827
    X := X - MoveCount*(300/1000);
920
    X := X - MoveCount*(300/1000);
828
    Y := Y + Cos256(FCounter div 15)*2;
921
    Y := Y + Cos256(FCounter div 15)*2;
829
    if X<-Width then Dead;
922
    if X<-Width then Dead;
-
 
923
    if FCounter-FOldTamaTime>=100 then
-
 
924
    begin
-
 
925
      Inc(FTamaCount);
-
 
926
      with TEnemyTama.Create(Engine, Self) do
-
 
927
      begin
-
 
928
        X := Self.X;
-
 
929
        Y := Self.Y+Self.Height div 2-Height div 2;
-
 
930
        Z := 10;
-
 
931
      end;
-
 
932
      FOldTamaTime := FCounter;
-
 
933
    end;
830
  end
934
  end
831
  else if FMode=2 then
935
  else if FMode=2 then
832
  begin
936
  begin
833
    X := X - MoveCount*(300/1000);
937
    X := X - MoveCount*(300/1000);
834
    if FCounter>200 then Dead;
938
    if FCounter>200 then Dead;
835
  end;
939
  end;
836
  inc(FCounter, MoveCount);
940
  inc(FCounter, MoveCount);
837
end;
941
end;
838
 
942
 
-
 
943
{ TEnemyAttacker }
-
 
944
 
839
constructor TEnemyAttacker.Create(AParent: TSprite; ALifes: integer);
945
constructor TEnemyAttacker.Create(AParent: TSprite; ALifes: integer);
840
begin
946
begin
841
  inherited Create(AParent, ALifes);
947
  inherited Create(AParent, ALifes);
842
  Image := MainForm.ImageList.Items.Find('Enemy-Attacker');
948
  Image := MainForm.ImageList.Items.Find('Enemy-Attacker');
843
  Width := Image.Width;
949
  Width := Image.Width;
Line 885... Line 991...
885
    if FCounter>200 then Dead;
991
    if FCounter>200 then Dead;
886
  end;
992
  end;
887
  inc(FCounter, MoveCount);
993
  inc(FCounter, MoveCount);
888
end;
994
end;
889
 
995
 
-
 
996
{ TEnemyAttacker2 }
-
 
997
 
890
constructor TEnemyBoss.Create(AParent: TSprite; ALifes: integer);
998
constructor TEnemyAttacker2.Create(AParent: TSprite; ALifes: integer);
891
begin
999
begin
892
  inherited Create(AParent, ALifes);
1000
  inherited Create(AParent, ALifes);
893
  Image := MainForm.ImageList.Items.Find('Enemy-boss');
1001
  Image := MainForm.ImageList.Items.Find('Enemy-Attacker2');
894
  Width := Image.Width;
1002
  Width := Image.Width;
895
  Height := Image.Height;
1003
  Height := Image.Height;
896
  BossExists := true;
-
 
897
  MainForm.MusicSwitchTrack(mtBoss);
-
 
898
  AnimCount := Image.PatternCount;
1004
  AnimCount := Image.PatternCount;
899
  AnimLooped := True;
1005
  AnimLooped := True;
900
  AnimSpeed := DEFAULT_ANIMSPEED;
1006
  AnimSpeed := DEFAULT_ANIMSPEED;
901
  PixelCheck := True;
1007
  PixelCheck := True;
902
  Collisioned := False;
-
 
903
  MainForm.FBossLife := FLife;
-
 
904
  waiter1 := 0;
-
 
905
  waiter2 := 0;
-
 
906
end;
1008
end;
907
 
1009
 
908
procedure TEnemyBoss.HitEnemy(ADead: Boolean);
1010
procedure TEnemyAttacker2.HitEnemy(ADead: Boolean);
909
begin
1011
begin
910
  inherited HitEnemy(ADead);
1012
  inherited HitEnemy(ADead);
911
 
1013
 
912
  if ADead then
1014
  if ADead then
913
  begin
1015
  begin
914
    FMode := 2;
1016
    FMode := 2;
915
    FCounter := 0;
1017
    FCounter := 0;
916
    Inc(MainForm.FScore, 100000);
1018
    Inc(MainForm.FScore, 5000);
-
 
1019
    Image := MainForm.ImageList.Items.Find('Explosion');
-
 
1020
    Width := Image.Width;
-
 
1021
    Height := Image.Height;
-
 
1022
    AnimCount := Image.PatternCount;
917
    BossExists := false;
1023
    AnimLooped := False;
-
 
1024
    AnimSpeed := DEFAULT_ANIMSPEED;
918
    dec(MainForm.FBossLife);
1025
    AnimPos := 0;
919
  end
1026
  end
920
  else
1027
  else
921
  begin
1028
  begin
922
    Inc(MainForm.FScore, 100);
1029
    Inc(MainForm.FScore, 100);
923
    dec(MainForm.FBossLife);
-
 
924
  end;
1030
  end;
925
end;
1031
end;
926
 
1032
 
927
procedure TEnemyBoss.DoMove(MoveCount: Integer);
1033
procedure TEnemyAttacker2.DoMove(MoveCount: Integer);
928
begin
1034
begin
929
  inherited DoMove(MoveCount);
1035
  inherited DoMove(MoveCount);
930
  if FMode=0 then
1036
  if FMode=0 then
931
  begin
1037
  begin
932
    if X>((mainform.dxdraw.width/4) + (mainform.dxdraw.width/2) - (width/4)){450} then
1038
    if X>((mainform.dxdraw.width/4) + (mainform.dxdraw.width/2) - (width/2)){450} then
933
      X := X - MoveCount*(300/1000)
1039
      X := X - MoveCount*(300/1000)
934
    else
1040
    else
935
    begin
1041
    begin
936
      Collisioned := True;
1042
      Collisioned := True;
937
      FMode := 1;
1043
      FMode := 1;
Line 969... Line 1075...
969
      end;
1075
      end;
970
    end;
1076
    end;
971
  end
1077
  end
972
  else if FMode=2 then
1078
  else if FMode=2 then
973
  begin
1079
  begin
974
    inc(waiter1);
1080
    if FCounter>200 then Dead;
-
 
1081
  end;
975
    if waiter1 = 3 then
1082
  inc(FCounter, MoveCount);
-
 
1083
end;
-
 
1084
 
-
 
1085
{ TEnemyAttacker3 }
-
 
1086
 
-
 
1087
constructor TEnemyAttacker3.Create(AParent: TSprite; ALifes: integer);
976
    begin
1088
begin
-
 
1089
  inherited Create(AParent, ALifes);
-
 
1090
  Image := MainForm.ImageList.Items.Find('Enemy-Attacker3');
977
      waiter1 := 0;
1091
  Width := Image.Width;
-
 
1092
  Height := Image.Height;
-
 
1093
  AnimCount := Image.PatternCount;
978
      inc(waiter2);
1094
  AnimLooped := True;
-
 
1095
  AnimSpeed := DEFAULT_ANIMSPEED;
979
      if waiter2 <= 20 then
1096
  PixelCheck := True;
-
 
1097
end;
-
 
1098
 
-
 
1099
procedure TEnemyAttacker3.HitEnemy(ADead: Boolean);
980
      begin
1100
begin
981
        with TExplosion.Create(Engine) do
1101
  inherited HitEnemy(ADead);
-
 
1102
 
-
 
1103
  if ADead then
982
        begin
1104
  begin
983
          Z := 10;
1105
    FMode := 1;
-
 
1106
    FCounter := 0;
-
 
1107
    Inc(MainForm.FScore, 5000);
-
 
1108
    Image := MainForm.ImageList.Items.Find('Explosion');
984
          X := Self.X+Random(Self.Width)-16;
1109
    Width := Image.Width;
985
          Y := Self.Y+Random(Self.Height)-16;
1110
    Height := Image.Height;
-
 
1111
    AnimCount := Image.PatternCount;
-
 
1112
    AnimLooped := False;
-
 
1113
    AnimSpeed := DEFAULT_ANIMSPEED;
986
        end;
1114
    AnimPos := 0;
987
      end
1115
  end
988
      else
1116
  else
989
      begin
1117
  begin
990
        Inc(MainForm.FScore, 1000);
1118
    Inc(MainForm.FScore, 100);
-
 
1119
  end;
-
 
1120
end;
-
 
1121
 
-
 
1122
procedure TEnemyAttacker3.DoMove(MoveCount: Integer);
-
 
1123
begin
-
 
1124
  inherited DoMove(MoveCount);
-
 
1125
  if FMode=0 then
-
 
1126
  begin
-
 
1127
    X := X - (250/1000)*MoveCount;
-
 
1128
    if X<-Width then Dead;
-
 
1129
    if FCounter-FOldTamaTime>=100 then
-
 
1130
    begin
-
 
1131
      Inc(FTamaCount);
-
 
1132
      with TEnemyTama.Create(Engine, Self) do
-
 
1133
      begin
-
 
1134
        X := Self.X;
-
 
1135
        Y := Self.Y+Self.Height div 2-Height div 2;
991
        FMode := 3;
1136
        Z := 10;
992
      end;
1137
      end;
-
 
1138
      FOldTamaTime := FCounter;
993
    end;
1139
     end;
994
  end
1140
  end
995
  else if FMode=3 then
1141
  else if FMode=1 then
996
  begin
1142
  begin
997
    if FCounter>4000 then Dead;
1143
    if FCounter>200 then Dead;
998
  end;
1144
  end;
999
  inc(FCounter, MoveCount);
1145
  inc(FCounter, MoveCount);
1000
end;
1146
end;
1001
 
1147
 
-
 
1148
{ TEnemyBoss }
-
 
1149
 
1002
constructor TEnemyAttacker2.Create(AParent: TSprite; ALifes: integer);
1150
constructor TEnemyBoss.Create(AParent: TSprite; ALifes: integer);
1003
begin
1151
begin
1004
  inherited Create(AParent, ALifes);
1152
  inherited Create(AParent, ALifes);
1005
  Image := MainForm.ImageList.Items.Find('Enemy-Attacker2');
1153
  Image := MainForm.ImageList.Items.Find('Enemy-boss');
1006
  Width := Image.Width;
1154
  Width := Image.Width;
1007
  Height := Image.Height;
1155
  Height := Image.Height;
-
 
1156
  BossExists := true;
-
 
1157
  MainForm.MusicSwitchTrack(mtBoss);
1008
  AnimCount := Image.PatternCount;
1158
  AnimCount := Image.PatternCount;
1009
  AnimLooped := True;
1159
  AnimLooped := True;
1010
  AnimSpeed := DEFAULT_ANIMSPEED;
1160
  AnimSpeed := DEFAULT_ANIMSPEED;
1011
  PixelCheck := True;
1161
  PixelCheck := True;
-
 
1162
  Collisioned := False;
-
 
1163
  MainForm.FBossLife := FLife;
-
 
1164
  waiter1 := 0;
-
 
1165
  waiter2 := 0;
1012
end;
1166
end;
1013
 
1167
 
1014
procedure TEnemyAttacker2.HitEnemy(ADead: Boolean);
1168
procedure TEnemyBoss.HitEnemy(ADead: Boolean);
1015
begin
1169
begin
1016
  inherited HitEnemy(ADead);
1170
  inherited HitEnemy(ADead);
1017
 
1171
 
1018
  if ADead then
1172
  if ADead then
1019
  begin
1173
  begin
1020
    FMode := 2;
1174
    FMode := 2;
1021
    FCounter := 0;
1175
    FCounter := 0;
1022
    Inc(MainForm.FScore, 5000);
1176
    Inc(MainForm.FScore, 100000);
1023
    Image := MainForm.ImageList.Items.Find('Explosion');
-
 
1024
    Width := Image.Width;
-
 
1025
    Height := Image.Height;
-
 
1026
    AnimCount := Image.PatternCount;
-
 
1027
    AnimLooped := False;
1177
    BossExists := false;
1028
    AnimSpeed := DEFAULT_ANIMSPEED;
-
 
1029
    AnimPos := 0;
1178
    dec(MainForm.FBossLife);
1030
  end
1179
  end
1031
  else
1180
  else
1032
  begin
1181
  begin
1033
    Inc(MainForm.FScore, 100);
1182
    Inc(MainForm.FScore, 100);
-
 
1183
    dec(MainForm.FBossLife);
1034
  end;
1184
  end;
1035
end;
1185
end;
1036
 
1186
 
1037
procedure TEnemyAttacker2.DoMove(MoveCount: Integer);
1187
procedure TEnemyBoss.DoMove(MoveCount: Integer);
1038
begin
1188
begin
1039
  inherited DoMove(MoveCount);
1189
  inherited DoMove(MoveCount);
1040
  if FMode=0 then
1190
  if FMode=0 then
1041
  begin
1191
  begin
1042
    if X>((mainform.dxdraw.width/4) + (mainform.dxdraw.width/2) - (width/2)){450} then
1192
    if X>((mainform.dxdraw.width/4) + (mainform.dxdraw.width/2) - (width/4)){450} then
1043
      X := X - MoveCount*(300/1000)
1193
      X := X - MoveCount*(300/1000)
1044
    else
1194
    else
1045
    begin
1195
    begin
1046
      Collisioned := True;
1196
      Collisioned := True;
1047
      FMode := 1;
1197
      FMode := 1;
Line 1079... Line 1229...
1079
      end;
1229
      end;
1080
    end;
1230
    end;
1081
  end
1231
  end
1082
  else if FMode=2 then
1232
  else if FMode=2 then
1083
  begin
1233
  begin
1084
    if FCounter>200 then Dead;
1234
    inc(waiter1);
1085
  end;
-
 
1086
  inc(FCounter, MoveCount);
1235
    if waiter1 = 3 then
1087
end;
-
 
1088
 
-
 
1089
procedure TEnemyAttacker3.HitEnemy(ADead: Boolean);
-
 
1090
begin
1236
    begin
-
 
1237
      waiter1 := 0;
1091
  inherited HitEnemy(ADead);
1238
      inc(waiter2);
1092
 
-
 
1093
  if ADead then
1239
      if waiter2 <= 20 then
1094
  begin
1240
      begin
1095
    FMode := 1;
-
 
1096
    FCounter := 0;
-
 
1097
    Inc(MainForm.FScore, 5000);
-
 
1098
    Image := MainForm.ImageList.Items.Find('Explosion');
-
 
1099
    Width := Image.Width;
-
 
1100
    Height := Image.Height;
-
 
1101
    AnimCount := Image.PatternCount;
1241
        with TExplosion.Create(Engine) do
1102
    AnimLooped := False;
-
 
1103
    AnimSpeed := DEFAULT_ANIMSPEED;
-
 
1104
    AnimPos := 0;
-
 
1105
  end
-
 
1106
  else
-
 
1107
  begin
1242
        begin
1108
    Inc(MainForm.FScore, 100);
1243
          Z := 10;
1109
  end;
1244
          X := Self.X+Random(Self.Width)-16;
-
 
1245
          Y := Self.Y+Random(Self.Height)-16;
1110
end;
1246
        end;
1111
 
-
 
1112
procedure TEnemyAttacker3.DoMove(MoveCount: Integer);
-
 
1113
begin
-
 
1114
  inherited DoMove(MoveCount);
-
 
1115
  if FMode=0 then
-
 
1116
  begin
1247
      end
1117
    X := X - (250/1000)*MoveCount;
-
 
1118
    if X<-Width then Dead;
-
 
1119
    if FCounter-FOldTamaTime>=100 then
-
 
1120
    begin
1248
      else
1121
      Inc(FTamaCount);
-
 
1122
      with TEnemyTama.Create(Engine, Self) do
-
 
1123
      begin
1249
      begin
1124
        X := Self.X;
1250
        Inc(MainForm.FScore, 1000);
1125
        Y := Self.Y+Self.Height div 2-Height div 2;
-
 
1126
        Z := 10;
1251
        FMode := 3;
1127
      end;
1252
      end;
1128
      FOldTamaTime := FCounter;
-
 
1129
     end;
1253
    end;
1130
  end
1254
  end
1131
  else if FMode=1 then
1255
  else if FMode=3 then
1132
  begin
1256
  begin
1133
    if FCounter>200 then Dead;
1257
    if FCounter>4000 then Dead;
1134
  end;
1258
  end;
1135
  inc(FCounter, MoveCount);
1259
  inc(FCounter, MoveCount);
1136
end;
1260
end;
1137
 
1261
 
1138
constructor TEnemyAttacker3.Create(AParent: TSprite; ALifes: integer);
-
 
1139
begin
-
 
1140
  inherited Create(AParent, ALifes);
-
 
1141
  Image := MainForm.ImageList.Items.Find('Enemy-Attacker3');
-
 
1142
  Width := Image.Width;
-
 
1143
  Height := Image.Height;
-
 
1144
  AnimCount := Image.PatternCount;
-
 
1145
  AnimLooped := True;
1262
{ TMainForm }
1146
  AnimSpeed := DEFAULT_ANIMSPEED;
-
 
1147
  PixelCheck := True;
-
 
1148
end;
-
 
1149
 
1263
 
1150
procedure TMainForm.FormCreate(Sender: TObject);
1264
procedure TMainForm.FormCreate(Sender: TObject);
-
 
1265
resourcestring
-
 
1266
  SFileError = 'Die Datei kann von SpaceMission nicht geöffnet werden!';
1151
var
1267
var
1152
  SavGame: TSaveData;
1268
  SavGame: TSaveData;
1153
begin
1269
begin
1154
  LevelData := TLevelData.Create;
1270
  LevelData := TLevelData.Create;
1155
 
1271
 
Line 1225... Line 1341...
1225
        mainform.FScore := SavGame.FScore;
1341
        mainform.FScore := SavGame.FScore;
1226
        mainform.FLife := SavGame.FLife;
1342
        mainform.FLife := SavGame.FLife;
1227
        mainform.FLevel := SavGame.FLevel;
1343
        mainform.FLevel := SavGame.FLevel;
1228
        mainform.FGameMode := SavGame.FGameMode;
1344
        mainform.FGameMode := SavGame.FGameMode;
1229
      except
1345
      except
1230
        showmessage(FileError);
1346
        showmessage(SFileError);
1231
        GameStartClick(GameStart);
1347
        GameStartClick(GameStart);
1232
        exit;
1348
        exit;
1233
      end;
1349
      end;
1234
    finally
1350
    finally
1235
      FreeAndNil(SavGame);
1351
      FreeAndNil(SavGame);
Line 1259... Line 1375...
1259
    if Assigned(DXTimer.OnActivate) then
1375
    if Assigned(DXTimer.OnActivate) then
1260
      DXTimer.OnActivate(DXTimer);
1376
      DXTimer.OnActivate(DXTimer);
1261
  end;
1377
  end;
1262
end;
1378
end;
1263
 
1379
 
1264
// https://www.delphipraxis.net/post43515.html
-
 
1265
Function GetHTML(AUrl: string): string;
-
 
1266
var
-
 
1267
  databuffer : array[0..4095] of char;
-
 
1268
  ResStr : string;
-
 
1269
  hSession, hfile: hInternet;
1380
procedure TMainForm.DXInit;
1270
  dwindex,dwcodelen,dwread,dwNumber: cardinal;
-
 
1271
  dwcode : array[1..20] of char;
-
 
1272
  res    : pchar;
-
 
1273
  Str    : pchar;
-
 
1274
begin
-
 
1275
  ResStr:='';
-
 
1276
  if (system.pos('http://',lowercase(AUrl))=0) and
-
 
1277
     (system.pos('https://',lowercase(AUrl))=0) then
-
 
1278
     AUrl:='http://'+AUrl;
-
 
1279
 
-
 
1280
  // Hinzugefügt
-
 
1281
  application.ProcessMessages;
-
 
1282
 
-
 
1283
  hSession:=InternetOpen('InetURL:/1.0',
-
 
1284
                         INTERNET_OPEN_TYPE_PRECONFIG,
-
 
1285
                         nil,
-
 
1286
                         nil,
-
 
1287
                         0);
-
 
1288
  if assigned(hsession) then
-
 
1289
  begin
-
 
1290
    // Hinzugefügt
-
 
1291
    application.ProcessMessages;
-
 
1292
 
-
 
1293
    hfile:=InternetOpenUrl(
-
 
1294
           hsession,
-
 
1295
           pchar(AUrl),
-
 
1296
           nil,
-
 
1297
           0,
-
 
1298
           INTERNET_FLAG_RELOAD,
-
 
1299
           0);
-
 
1300
    dwIndex  := 0;
-
 
1301
    dwCodeLen := 10;
-
 
1302
 
-
 
1303
    // Hinzugefügt
-
 
1304
    application.ProcessMessages;
-
 
1305
 
-
 
1306
    HttpQueryInfo(hfile,
-
 
1307
                  HTTP_QUERY_STATUS_CODE,
-
 
1308
                  @dwcode,
-
 
1309
                  dwcodeLen,
-
 
1310
                  dwIndex);
-
 
1311
    res := pchar(@dwcode);
-
 
1312
    dwNumber := sizeof(databuffer)-1;
-
 
1313
    if (res ='200') or (res ='302') then
-
 
1314
    begin
-
 
1315
      while (InternetReadfile(hfile,
-
 
1316
                              @databuffer,
-
 
1317
                              dwNumber,
-
 
1318
                              DwRead)) do
-
 
1319
      begin
1381
begin
1320
 
1382
  try
-
 
1383
    Imagelist.Items.LoadFromFile(FDirectory+'DirectX\Graphic.dxg');
1321
        // Hinzugefügt
1384
    ImageList.Items.MakeColorTable;
1322
        application.ProcessMessages;
1385
    DXDraw.ColorTable := ImageList.Items.ColorTable;
1323
 
-
 
1324
        if dwRead =0 then
1386
    DXDraw.DefColorTable := ImageList.Items.ColorTable;
1325
          break;
1387
    DXDraw.UpdatePalette;
1326
        databuffer[dwread]:=#0;
1388
    DXDraw.Finalize;
1327
        Str := pchar(@databuffer);
1389
    DXDraw.Options := DXDraw.Options - [doFullScreen];
1328
        resStr := resStr + Str;
1390
    DXDraw.autosize := true;
1329
      end;
1391
    DXDraw.Initialize;
1330
    end
1392
  except
1331
    else
-
 
1332
      ResStr := 'Status:'+res;
1393
    //Imagelist.Items.clear;
1333
    if assigned(hfile) then
-
 
1334
      InternetCloseHandle(hfile);
1394
    //application.terminate;
1335
  end;
1395
  end;
1336
 
-
 
1337
  // Hinzugefügt
-
 
1338
  application.ProcessMessages;
-
 
1339
 
-
 
1340
  InternetCloseHandle(hsession);
-
 
1341
  Result := resStr;
-
 
1342
end;
1396
end;
1343
 
1397
 
1344
procedure TMainForm.CheckUpdatesClick(Sender: TObject);
1398
procedure TMainForm.CheckUpdatesClick(Sender: TObject);
1345
var
1399
var
1346
  cont: string;
1400
  cont: string;
Line 1376... Line 1430...
1376
  WriteOptions;
1430
  WriteOptions;
1377
end;
1431
end;
1378
 
1432
 
1379
procedure TMainForm.SoundInit;
1433
procedure TMainForm.SoundInit;
1380
begin
1434
begin
-
 
1435
  if (WaveOutGetNumDevs < 1) or not FileExists(FDirectory+'DirectX\Sound.dxw') then
-
 
1436
  begin
-
 
1437
    OptionSound.Checked := false;
-
 
1438
    OptionSound.Enabled := False;
-
 
1439
    exit;
-
 
1440
  end;
-
 
1441
 
1381
  if OptionSound.Checked then
1442
  if OptionSound.Checked then
1382
  begin
1443
  begin
1383
    if not DXSound.Initialized then
1444
    if not DXSound.Initialized then
1384
    begin
1445
    begin
1385
      try
1446
      try
Line 1396... Line 1457...
1396
 
1457
 
1397
procedure TMainForm.MusicInit;
1458
procedure TMainForm.MusicInit;
1398
var
1459
var
1399
  i: integer;
1460
  i: integer;
1400
begin
1461
begin
-
 
1462
  if (WaveOutGetNumDevs < 1) or not FileExists(FDirectory+'DirectX\Music.dxm') then
-
 
1463
  begin
-
 
1464
    optionmusic.Checked := false;
-
 
1465
    optionmusic.Enabled := False;
-
 
1466
    exit;
-
 
1467
  end;
-
 
1468
 
1401
  try
1469
  try
1402
    dxmusic.Midis.LoadFromFile(FDirectory+'DirectX\Music.dxm');
1470
    dxmusic.Midis.LoadFromFile(FDirectory+'DirectX\Music.dxm');
1403
    for i := 0 to dxmusic.Midis.Count-1 do
1471
    for i := 0 to dxmusic.Midis.Count-1 do
1404
    begin
1472
    begin
1405
      if not dxmusic.Midis.Items[i].IsInitialized then
1473
      if not dxmusic.Midis.Items[i].IsInitialized then
Line 1819... Line 1887...
1819
begin
1887
begin
1820
  LevelData.Clear;
1888
  LevelData.Clear;
1821
  FRestEnemies := 0;
1889
  FRestEnemies := 0;
1822
end;
1890
end;
1823
 
1891
 
1824
const
-
 
1825
  ADDITIONAL_ENEMIES_PER_LEVEL = 75;
-
 
1826
 
-
 
1827
procedure TMainForm.NewLevel(lev: integer);
1892
procedure TMainForm.NewLevel(lev: integer);
1828
resourcestring
1893
resourcestring
1829
  LNG_LEVEL_INVALID = 'Das Level Nr. %d ist ungültig!'+#13#10+'Das Programm wird beendet.';
1894
  LNG_LEVEL_INVALID = 'Das Level Nr. %d ist ungültig!'+#13#10+'Das Programm wird beendet.';
1830
var
1895
var
1831
  act: integer;
1896
  act: integer;
Line 2270... Line 2335...
2270
  master.checked := true;
2335
  master.checked := true;
2271
  FInterval := giMaster;
2336
  FInterval := giMaster;
2272
  writeoptions;
2337
  writeoptions;
2273
end;
2338
end;
2274
 
2339
 
2275
procedure TEnemyMeteor.DoMove(MoveCount: Integer);
-
 
2276
begin
-
 
2277
  X := X - MoveCount*(250/1000);
-
 
2278
  if X < -Width then Dead;
-
 
2279
end;
-
 
2280
 
-
 
2281
procedure TEnemyMeteor.HitEnemy(ADead: Boolean);
-
 
2282
begin
-
 
2283
  inherited HitEnemy(False);
-
 
2284
 
-
 
2285
  if ADead then Collisioned := True;
-
 
2286
end;
-
 
2287
 
-
 
2288
procedure TMainForm.PlayMusic(Name: TMusicTrack);
2340
procedure TMainForm.PlayMusic(Name: TMusicTrack);
2289
begin
2341
begin
2290
  if not OptionMusic.checked then exit;
2342
  if not OptionMusic.checked then exit;
-
 
2343
  if Ord(Name) > dxmusic.Midis.Count then exit;
2291
  dxmusic.Midis.Items[Ord(Name)-1].Play;
2344
  dxmusic.Midis.Items[Ord(Name)-1].Play;
2292
end;
2345
end;
2293
 
2346
 
2294
procedure TMainForm.StopMusic(Name: TMusicTrack);
2347
procedure TMainForm.StopMusic(Name: TMusicTrack);
2295
begin
2348
begin
2296
  if Name = mtNone then exit;
2349
  if Name = mtNone then exit;
-
 
2350
  if Ord(Name) > dxmusic.Midis.Count then exit;
2297
  dxmusic.Midis.Items[Ord(Name)-1].Stop;
2351
  dxmusic.Midis.Items[Ord(Name)-1].Stop;
2298
end;
2352
end;
2299
 
2353
 
2300
procedure TMainForm.ResumeMusic(Name: TMusicTrack);
2354
procedure TMainForm.ResumeMusic(Name: TMusicTrack);
2301
begin
2355
begin
2302
  if not OptionMusic.checked then exit;
2356
  if not OptionMusic.checked then exit;
-
 
2357
  if Ord(Name) > dxmusic.Midis.Count then exit;
2303
  dxmusic.Midis.Items[Ord(Name)-1].Play; // TODO: how to pause/resume instead play/stop
2358
  dxmusic.Midis.Items[Ord(Name)-1].Play; // TODO: how to pause/resume instead play/stop
2304
end;
2359
end;
2305
 
2360
 
2306
procedure TMainForm.PauseMusic(Name: TMusicTrack);
2361
procedure TMainForm.PauseMusic(Name: TMusicTrack);
2307
begin
2362
begin
2308
  if Name = mtNone then exit;
2363
  if Name = mtNone then exit;
-
 
2364
  if Ord(Name) > dxmusic.Midis.Count then exit;
2309
  dxmusic.Midis.Items[Ord(Name)-1].Stop; // TODO: how to pause/resume instead play/stop
2365
  dxmusic.Midis.Items[Ord(Name)-1].Stop; // TODO: how to pause/resume instead play/stop
2310
end;
2366
end;
2311
 
2367
 
2312
constructor TEnemyMeteor.Create(AParent: TSprite; ALifes: integer);
-
 
2313
begin
-
 
2314
  inherited Create(AParent, ALifes);
-
 
2315
  Image := MainForm.ImageList.Items.Find('Enemy-Meteor');
-
 
2316
  Width := Image.Width;
-
 
2317
  Height := Image.Height;
-
 
2318
  AnimCount := Image.PatternCount;
-
 
2319
  AnimLooped := True;
-
 
2320
  AnimSpeed := DEFAULT_ANIMSPEED;
-
 
2321
  PixelCheck := True;
-
 
2322
end;
-
 
2323
 
-
 
2324
procedure TMainForm.SpielstandClick(Sender: TObject);
2368
procedure TMainForm.SpielstandClick(Sender: TObject);
2325
begin
2369
begin
2326
  speicherungform.showmodal;
2370
  speicherungform.showmodal;
2327
end;
2371
end;
2328
 
2372