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 |