Subversion Repositories spacemission

Rev

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

Rev 64 Rev 72
Line 53... Line 53...
53
    Hilfe1: TMenuItem;
53
    Hilfe1: TMenuItem;
54
    N3: TMenuItem;
54
    N3: TMenuItem;
55
    AufUpdatesprfen1: TMenuItem;
55
    AufUpdatesprfen1: TMenuItem;
56
    N4: TMenuItem;
56
    N4: TMenuItem;
57
    WasgibtesNeues1: TMenuItem;
57
    WasgibtesNeues1: TMenuItem;
-
 
58
    Enemy8: TRadioButton;
58
    procedure DXDrawFinalize(Sender: TObject);
59
    procedure DXDrawFinalize(Sender: TObject);
59
    procedure DXDrawInitialize(Sender: TObject);
60
    procedure DXDrawInitialize(Sender: TObject);
60
    procedure FormCreate(Sender: TObject);
61
    procedure FormCreate(Sender: TObject);
61
    procedure DXTimerTimer(Sender: TObject; LagCount: Integer);
62
    procedure DXTimerTimer(Sender: TObject; LagCount: Integer);
62
    procedure BeendenClick(Sender: TObject);
63
    procedure BeendenClick(Sender: TObject);
Line 167... Line 168...
167
  if AEnemyType = etEnemyAttacker3 then Image := MainForm.GetSpriteGraphic(smgEnemyAttacker3);
168
  if AEnemyType = etEnemyAttacker3 then Image := MainForm.GetSpriteGraphic(smgEnemyAttacker3);
168
  if AEnemyType = etEnemyMeteor then Image := MainForm.GetSpriteGraphic(smgEnemyMeteor);
169
  if AEnemyType = etEnemyMeteor then Image := MainForm.GetSpriteGraphic(smgEnemyMeteor);
169
  if AEnemyType = etEnemyUFO then Image := MainForm.GetSpriteGraphic(smgEnemyDisk);
170
  if AEnemyType = etEnemyUFO then Image := MainForm.GetSpriteGraphic(smgEnemyDisk);
170
  if AEnemyType = etEnemyUFO2 then Image := MainForm.GetSpriteGraphic(smgEnemyDisk2);
171
  if AEnemyType = etEnemyUFO2 then Image := MainForm.GetSpriteGraphic(smgEnemyDisk2);
171
  if AEnemyType = etEnemyBoss then Image := MainForm.GetSpriteGraphic(smgEnemyBoss);
172
  if AEnemyType = etEnemyBoss then Image := MainForm.GetSpriteGraphic(smgEnemyBoss);
-
 
173
  if AEnemyType = etItemMedikit then Image := MainForm.GetSpriteGraphic(smgItemMedikit);
172
 
174
 
173
  if AEnemyType = etEnemyMeteor then FLives := 0 else FLives := ALives;
175
  if not EnemyTypeHasLives(AEnemyType) then
-
 
176
    FLives := 0
-
 
177
  else
-
 
178
    FLives := ALives;
174
  FEnemyType := AEnemyType;
179
  FEnemyType := AEnemyType;
175
  Width := Image.Width;
180
  Width := Image.Width;
176
  Height := Image.Height;
181
  Height := Image.Height;
177
  PixelCheck := True;
182
  PixelCheck := True;
178
end;
183
end;
Line 556... Line 561...
556
end;
561
end;
557
 
562
 
558
procedure TMainForm.DXDrawMouseDown(Sender: TObject; Button: TMouseButton;
563
procedure TMainForm.DXDrawMouseDown(Sender: TObject; Button: TMouseButton;
559
  Shift: TShiftState; X, Y: Integer);
564
  Shift: TShiftState; X, Y: Integer);
560
var
565
var
-
 
566
  i: TEnemyType;
561
  i, j, k, l, ex, ey: integer;
567
  j, k, l, ex, ey: integer;
562
  ok, breaked: boolean;
568
  ok, breaked: boolean;
563
begin
569
begin
564
  ex := trunc(x/RasterW) * RasterW;
570
  ex := trunc(x/RasterW) * RasterW;
565
  ey := trunc(y/RasterH) * RasterH;
571
  ey := trunc(y/RasterH) * RasterH;
566
  EnemyCreateSprite(ex, ey, SelectedEnemyType, LivesEdit.Value);
572
  EnemyCreateSprite(ex, ey, SelectedEnemyType, LivesEdit.Value);
Line 571... Line 577...
571
    ok := true;
577
    ok := true;
572
    if (SelectedEnemyType = etEnemyBoss) and boss then
578
    if (SelectedEnemyType = etEnemyBoss) and boss then
573
      ok := false // boss already exists
579
      ok := false // boss already exists
574
    else
580
    else
575
    begin
581
    begin
576
      for i := 1 to NumEnemyTypes do
582
      for i := Low(TEnemyType) to High(TEnemyType) do
577
      begin
583
      begin
578
        for j := 0 to MaxPossibleEnemyLives do
584
        for j := 0 to MaxPossibleEnemyLives do
579
        begin
585
        begin
580
          if boss then
586
          if boss then
581
          begin
587
          begin
Line 591... Line 597...
591
              end;
597
              end;
592
              if not ok then break;
598
              if not ok then break;
593
            end;
599
            end;
594
            if not ok then break;
600
            if not ok then break;
595
          end;
601
          end;
596
          if LevData.IndexOfEnemy(ex + (ScrollP * RasterW), ey, TEnemyType(i), j) <> -1 then
602
          if LevData.IndexOfEnemy(ex + (ScrollP * RasterW), ey, i, j) <> -1 then
597
          begin
603
          begin
598
            ok := false;
604
            ok := false;
599
            break;
605
            break;
600
          end;
606
          end;
601
        end;
607
        end;
602
        if not ok then break;
608
        if not ok then break;
603
      end;
609
      end;
604
    end;
610
    end;
605
    if ok then
611
    if ok then
606
    begin
612
    begin
607
      if SelectedEnemyType <> etEnemyMeteor then
613
      if EnemyTypeHasLives(SelectedEnemyType) then
608
        LevData.AddEnemy(ex + (ScrollP * RasterW), ey, SelectedEnemyType, LivesEdit.Value)
614
        LevData.AddEnemy(ex + (ScrollP * RasterW), ey, SelectedEnemyType, LivesEdit.Value)
609
      else
615
      else
610
        LevData.AddEnemy(ex + (ScrollP * RasterW), ey, SelectedEnemyType, 0);
616
        LevData.AddEnemy(ex + (ScrollP * RasterW), ey, SelectedEnemyType, 0);
611
      inc(NumEnemys);
617
      inc(NumEnemys);
612
      if SelectedEnemyType = etEnemyBoss then boss := true;
618
      if SelectedEnemyType = etEnemyBoss then boss := true;
Line 614... Line 620...
614
    else beep;
620
    else beep;
615
  end
621
  end
616
  { Löschen }
622
  { Löschen }
617
  else if Button = mbRight then
623
  else if Button = mbRight then
618
  begin
624
  begin
619
    for i := 1 to NumEnemyTypes do
625
    for i := Low(TEnemyType) to High(TEnemyType) do
620
    begin
626
    begin
621
      for j := 0 to MaxPossibleEnemyLives do
627
      for j := 0 to MaxPossibleEnemyLives do
622
      begin
628
      begin
623
        if boss and (TEnemyType(i) = etEnemyBoss) then
629
        if boss and (i = etEnemyBoss) then
624
        begin
630
        begin
625
          for k := 0 to 3 do
631
          for k := 0 to 3 do
626
          begin
632
          begin
627
            for l := 0 to 1 do
633
            for l := 0 to 1 do
628
            begin
634
            begin
629
              if LevData.IndexOfEnemy(ex + ((ScrollP - k) * RasterW), ey - (RasterH * l), TEnemyType(i), j) <> -1 then
635
              if LevData.IndexOfEnemy(ex + ((ScrollP - k) * RasterW), ey - (RasterH * l), i, j) <> -1 then
630
              begin
636
              begin
631
                LevData.DeleteEnemy(ex + ((ScrollP - k) * RasterW), ey - (RasterH * l), TEnemyType(i), j);
637
                LevData.DeleteEnemy(ex + ((ScrollP - k) * RasterW), ey - (RasterH * l), i, j);
632
                Boss := false;
638
                Boss := false;
633
                dec(NumEnemys);
639
                dec(NumEnemys);
634
                breaked := true;
640
                breaked := true;
635
                break;
641
                break;
636
              end;
642
              end;
637
            end;
643
            end;
638
            if breaked then break;
644
            if breaked then break;
639
          end;
645
          end;
640
        end;
646
        end;
641
        if LevData.IndexOfEnemy(ex + (ScrollP * RasterW), ey, TEnemyType(i), j) <> -1 then
647
        if LevData.IndexOfEnemy(ex + (ScrollP * RasterW), ey, i, j) <> -1 then
642
        begin
648
        begin
643
          LevData.DeleteEnemy(ex + (ScrollP * RasterW), ey, TEnemyType(i), j);
649
          LevData.DeleteEnemy(ex + (ScrollP * RasterW), ey, i, j);
644
          if TEnemyType(i) = etEnemyBoss then Boss := false;
650
          if i = etEnemyBoss then Boss := false;
645
          dec(NumEnemys);
651
          dec(NumEnemys);
646
          breaked := true;
652
          breaked := true;
647
          break;
653
          break;
648
        end;
654
        end;
649
      end;
655
      end;
Line 658... Line 664...
658
var
664
var
659
  et: TEnemyType;
665
  et: TEnemyType;
660
begin
666
begin
661
  et := SelectedEnemyType;
667
  et := SelectedEnemyType;
662
  Image1.Left := -(87 * (Ord(et) - 1)) + 1;
668
  Image1.Left := -(87 * (Ord(et) - 1)) + 1;
663
  LivesEdit.Enabled := et <> etEnemyMeteor;
669
  LivesEdit.Enabled := EnemyTypeHasLives(et);
664
  LivesLabel.Enabled := et <> etEnemyMeteor;
670
  LivesLabel.Enabled := EnemyTypeHasLives(et);
665
end;
671
end;
666
 
672
 
667
procedure TMainForm.EnemyCreateSprite(x, y: integer; AEnemyType: TEnemyType; ALives: integer);
673
procedure TMainForm.EnemyCreateSprite(x, y: integer; AEnemyType: TEnemyType; ALives: integer);
668
var
674
var
669
  Enemy: TSprite;
675
  Enemy: TSprite;
Line 739... Line 745...
739
resourcestring
745
resourcestring
740
  status_info = 'Zeigen Sie mit dem Mauszeiger auf eine Einheit, um deren Eigenschaften anzuzeigen...';
746
  status_info = 'Zeigen Sie mit dem Mauszeiger auf eine Einheit, um deren Eigenschaften anzuzeigen...';
741
  status_lives = 'Leben: ';
747
  status_lives = 'Leben: ';
742
  status_nolives = 'Einheit hat keine Lebensangabe';
748
  status_nolives = 'Einheit hat keine Lebensangabe';
743
var
749
var
-
 
750
  i: TEnemyType;
744
  ex, ey, i, j, k, l: integer;
751
  ex, ey, j, k, l: integer;
745
  lifes: integer;
752
  lifes: integer;
746
  enemyType: TEnemyType;
753
  enemyType: TEnemyType;
747
  enemyName: string;
754
  enemyName: string;
748
  breaked: boolean;
755
  breaked: boolean;
749
begin
756
begin
Line 755... Line 762...
755
  ex := trunc(x/RasterW) * RasterW;
762
  ex := trunc(x/RasterW) * RasterW;
756
  ey := trunc(y/RasterH) * RasterH;
763
  ey := trunc(y/RasterH) * RasterH;
757
  lifes := -1;
764
  lifes := -1;
758
  enemyType := etUnknown;
765
  enemyType := etUnknown;
759
  breaked := false;
766
  breaked := false;
760
  for i := 1 to NumEnemyTypes do
767
  for i := Low(TEnemyType) to High(TEnemyType) do
761
  begin
768
  begin
762
    for j := 0 to MaxPossibleEnemyLives do
769
    for j := 0 to MaxPossibleEnemyLives do
763
    begin
770
    begin
764
      if boss and (TEnemyType(i) = etEnemyBoss) then
771
      if boss and (i = etEnemyBoss) then
765
      begin
772
      begin
766
        for k := 0 to 3 do
773
        for k := 0 to 3 do
767
        begin
774
        begin
768
          for l := 0 to 1 do
775
          for l := 0 to 1 do
769
          begin
776
          begin
770
            if LevData.IndexOfEnemy(ex + ((ScrollP - k) * RasterW), ey - (RasterH * l), TEnemyType(i), j) <> -1 then
777
            if LevData.IndexOfEnemy(ex + ((ScrollP - k) * RasterW), ey - (RasterH * l), i, j) <> -1 then
771
            begin
778
            begin
772
              lifes := j;
779
              lifes := j;
773
              breaked := true;
780
              breaked := true;
774
              break;
781
              break;
775
            end;
782
            end;
776
          end;
783
          end;
777
          if breaked then break;
784
          if breaked then break;
778
        end;
785
        end;
779
      end;
786
      end;
780
      if (breaked = false) and (LevData.IndexOfEnemy(ex + (ScrollP * RasterW), ey, TEnemyType(i), j) <> -1) then
787
      if (breaked = false) and (LevData.IndexOfEnemy(ex + (ScrollP * RasterW), ey, i, j) <> -1) then
781
      begin
788
      begin
782
        lifes := j;
789
        lifes := j;
783
        enemyType := TEnemyType(i);
790
        enemyType := i;
784
        breaked := true;
791
        breaked := true;
785
        break;
792
        break;
786
      end;
793
      end;
787
    end;
794
    end;
788
    if breaked then break;
795
    if breaked then break;
Line 794... Line 801...
794
    else if Ord(enemyType) = 3 then enemyName := Enemy3.Caption
801
    else if Ord(enemyType) = 3 then enemyName := Enemy3.Caption
795
    else if Ord(enemyType) = 4 then enemyName := Enemy4.Caption
802
    else if Ord(enemyType) = 4 then enemyName := Enemy4.Caption
796
    else if Ord(enemyType) = 5 then enemyName := Enemy5.Caption
803
    else if Ord(enemyType) = 5 then enemyName := Enemy5.Caption
797
    else if Ord(enemyType) = 6 then enemyName := Enemy6.Caption
804
    else if Ord(enemyType) = 6 then enemyName := Enemy6.Caption
798
    else if Ord(enemyType) = 7 then enemyName := Enemy7.Caption
805
    else if Ord(enemyType) = 7 then enemyName := Enemy7.Caption
-
 
806
    else if Ord(enemyType) = 8 then enemyName := Enemy8.Caption
799
    else enemyName := '???';
807
    else enemyName := '???';
800
    if lifes > 0 then
808
    if lifes > 0 then
801
      StatusBar.SimpleText := ' ' + enemyName + ' - ' + status_lives + inttostr(lifes)
809
      StatusBar.SimpleText := ' ' + enemyName + ' - ' + status_lives + inttostr(lifes)
802
    else
810
    else
803
      StatusBar.SimpleText := ' ' + enemyName + ' - ' + status_nolives;
811
      StatusBar.SimpleText := ' ' + enemyName + ' - ' + status_nolives;
Line 831... Line 839...
831
  else if Enemy3.Checked then result := etEnemyAttacker3
839
  else if Enemy3.Checked then result := etEnemyAttacker3
832
  else if Enemy4.Checked then result := etEnemyMeteor
840
  else if Enemy4.Checked then result := etEnemyMeteor
833
  else if Enemy5.Checked then result := etEnemyUFO
841
  else if Enemy5.Checked then result := etEnemyUFO
834
  else if Enemy6.Checked then result := etEnemyUFO2
842
  else if Enemy6.Checked then result := etEnemyUFO2
835
  else if Enemy7.Checked then result := etEnemyBoss
843
  else if Enemy7.Checked then result := etEnemyBoss
-
 
844
  else if Enemy8.Checked then result := etItemMedikit
836
  else result := etUnknown;
845
  else result := etUnknown;
837
end;
846
end;
838
 
847
 
839
end.
848
end.
840
 
849