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 |