Subversion Repositories spacemission

Compare Revisions

Regard whitespace Rev 30 → Rev 31

/GamMain.pas
24,7 → 24,7
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Menus, DIB, DXClass, DXSprite, DXDraws, DXInput, DXSounds,
ShellAPI, wininet, DirectX{$IF CompilerVersion >= 23.0},
System.UITypes{$IFEND}, ComLevelReader, ComSaveGameReader, DirectMusic;
System.UITypes{$IFEND}, ComLevelReader, ComSaveGameReader, DirectMusic, Global;
 
type
TGameScene = (
43,26 → 43,6
giMaster
);
 
TMusicTrack = (
mtNone,
mtBoss, // dxmusic.Midi[0]
mtGame, // dxmusic.Midi[1]
mtScene, // ...
mtTitle
);
 
{TSoundFile = (
sfNone,
sfSceneMov,
sfExplosion,
sfHit,
sfShoot,
sfDanger,
sfEnde,
sfFrage,
sfLevIntro
);}
 
TBackground = class(TBackgroundSprite)
strict private
FSpeed: Double;
283,7 → 263,7
ProgrammGestartet: boolean;
FInterval: TGameInterval;
FScene: TGameScene;
FMusic: TMusicTrack;
FMusic: TSpaceMissionMusicTrack;
FBlink: DWORD;
FBlinkTime: DWORD;
FFrame, FAngle, FCounter, FEnemyAdventPos: Integer;
332,13 → 312,15
procedure NewLevel(lev: integer);
procedure ResetLevelData;
{ Musik-Routinen }
procedure MusicSwitchTrack(Name: TMusicTrack);
procedure PlayMusic(Name: TMusicTrack);
procedure StopMusic(Name: TMusicTrack);
procedure ResumeMusic(Name: TMusicTrack);
procedure PauseMusic(Name: TMusicTrack);
procedure MusicSwitchTrack(Name: TSpaceMissionMusicTrack);
procedure PlayMusic(Name: TSpaceMissionMusicTrack);
procedure StopMusic(Name: TSpaceMissionMusicTrack);
procedure ResumeMusic(Name: TSpaceMissionMusicTrack);
procedure PauseMusic(Name: TSpaceMissionMusicTrack);
{ Sound-Routinen }
procedure PlaySound(Name: string; Wait: Boolean);
procedure PlaySound(Sound: TSpaceMissionSound; Wait: Boolean);
{ Grafik-Routinen }
function GetSpriteGraphic(Sprite: TSpaceMissionGraphicSprite): TPictureCollectionItem;
{ Initialisiations-Routinen }
procedure DXInit;
procedure SoundInit;
357,7 → 339,7
implementation
 
uses
GamSplash, GamSpeicherung, ComInfo, GamCheat, Global, MMSystem, Registry;
GamSplash, GamSpeicherung, ComInfo, GamCheat, MMSystem, Registry;
 
const
conleicht = 650 div 60; // 10
477,7 → 459,7
with TBackgroundSpecial.Create(mainform.SpriteEngine.Engine) do
begin
SetMapSize(1, 1);
Image := mainform.ImageList.Items.Find('Background-Planet1');
Image := MainForm.GetSpriteGraphic(smgBackgroundPlanet1);
Width := Image.Width;
Height := Image.Height;
 
509,13 → 491,13
SetMapSize(1, 1);
ran := Random(4);
if ran = 0 then
Image := mainform.ImageList.Items.Find('Background-Red')
Image := MainForm.GetSpriteGraphic(smgBackgroundRed)
else if ran = 1 then
Image := mainform.ImageList.Items.Find('Background-Blue')
Image := MainForm.GetSpriteGraphic(smgBackgroundBlue)
else if ran = 2 then
Image := mainform.ImageList.Items.Find('Background-Yellow')
Image := MainForm.GetSpriteGraphic(smgBackgroundYellow)
else if ran = 3 then
Image := mainform.ImageList.Items.Find('Hintergrund-Rot');
Image := MainForm.GetSpriteGraphic(smgHintergrundRot);
Width := Image.Width;
Height := Image.Height;
 
556,8 → 538,8
constructor TExplosion.Create(AParent: TSprite);
begin
inherited Create(AParent);
mainform.PlaySound('Explosion', false);
Image := MainForm.ImageList.Items.Find('Explosion');
mainform.PlaySound(smsExplosion, false);
Image := MainForm.GetSpriteGraphic(smgExplosion);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
579,7 → 561,7
begin
inherited Create(AParent);
State := pesEntering;
Image := MainForm.ImageList.Items.Find('Machine');
Image := MainForm.GetSpriteGraphic(smgMachine);
Width := Image.Width;
Height := Image.Height;
X := -70{20};
601,12 → 583,12
Crash := true;
if MainForm.Flife=0 then
begin
MainForm.PlaySound('Explosion', false);
MainForm.PlaySound(smsExplosion, false);
Collisioned := false;
FCounter := 0;
State := pesDead;
Done := false;
Image := MainForm.ImageList.Items.Find('Explosion');
Image := MainForm.GetSpriteGraphic(smgExplosion);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
619,7 → 601,7
begin
if not crashsound then
begin
MainForm.PlaySound('Hit', False);
MainForm.PlaySound(smsHit, False);
crashsound := true;
end;
end;
671,7 → 653,7
if FCounter>1500 then
begin
MainForm.FNextScene := gsGameOver;
MainForm.PlaySound('SceneMov', false);
MainForm.PlaySound(smsSceneMov, false);
MainForm.PalleteAnim(RGBQuad(0, 0, 0), 300);
Sleep(200);
end;
684,7 → 666,7
Dead;
inc(mainform.FLevel);
MainForm.FNextScene := gsNewLevel;
MainForm.PlaySound('SceneMov', false);
MainForm.PlaySound(smsSceneMov, false);
MainForm.PalleteAnim(RGBQuad(0, 0, 0), 300);
end;
end
707,7 → 689,7
begin
inherited Create(AParent);
FPlayerSprite := APlayerSprite;
Image := MainForm.ImageList.Items.Find('Bounce');
Image := MainForm.GetSpriteGraphic(smgBounce);
Z := 2;
Width := Image.Width;
Height := Image.Height;
714,7 → 696,7
AnimCount := Image.PatternCount;
AnimLooped := True;
AnimSpeed := DEFAULT_ANIMSPEED;
MainForm.PlaySound('Shoot', False);
MainForm.PlaySound(smsShoot, False);
end;
 
destructor TPlayerTamaSprite.Destroy;
771,9 → 753,9
procedure TEnemy.HitEnemy(ADead: Boolean);
begin
if ADead then
MainForm.PlaySound('Explosion', False)
MainForm.PlaySound(smsExplosion, False)
else
MainForm.PlaySound('Hit', False);
MainForm.PlaySound(smsHit, False);
end;
 
{ TEnemyTama }
782,13 → 764,13
begin
inherited Create(AParent);
FEnemySprite := AEnemySprite;
Image := MainForm.ImageList.Items.Find('Bounce2');
Image := MainForm.GetSpriteGraphic(smgBounce2);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := True;
AnimSpeed := DEFAULT_ANIMSPEED;
MainForm.PlaySound('Shoot', False);
MainForm.PlaySound(smsShoot, False);
end;
 
procedure TEnemyTama.DoMove(MoveCount: Integer);
804,7 → 786,7
begin
inherited Create(AParent, ALifes);
State := pesNormal;
Image := MainForm.ImageList.Items.Find('Enemy-Meteor');
Image := MainForm.GetSpriteGraphic(smgEnemyMeteor);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
832,7 → 814,7
begin
inherited Create(AParent, ALifes);
State := pesNormal;
Image := MainForm.ImageList.Items.Find('Enemy-disk');
Image := MainForm.GetSpriteGraphic(smgEnemyDisk);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
849,7 → 831,7
State := pesDead;
FCounter := 0;
Inc(MainForm.FScore, 1000);
Image := MainForm.ImageList.Items.Find('Explosion');
Image := MainForm.GetSpriteGraphic(smgExplosion);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
890,7 → 872,7
begin
inherited Create(AParent, ALifes);
State := pesNormal;
Image := MainForm.ImageList.Items.Find('Enemy-disk2');
Image := MainForm.GetSpriteGraphic(smgEnemyDisk2);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
907,7 → 889,7
State := pesDead;
FCounter := 0;
Inc(MainForm.FScore, 1000);
Image := MainForm.ImageList.Items.Find('Explosion');
Image := MainForm.GetSpriteGraphic(smgExplosion);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
959,7 → 941,7
begin
inherited Create(AParent, ALifes);
State := pesNormal;
Image := MainForm.ImageList.Items.Find('Enemy-Attacker');
Image := MainForm.GetSpriteGraphic(smgEnemyAttacker);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
977,7 → 959,7
State := pesDead;
FCounter := 0;
Inc(MainForm.FScore, 1000);
Image := MainForm.ImageList.Items.Find('Explosion');
Image := MainForm.GetSpriteGraphic(smgExplosion);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
1017,7 → 999,7
begin
inherited Create(AParent, ALifes);
State := pesEntering;
Image := MainForm.ImageList.Items.Find('Enemy-Attacker2');
Image := MainForm.GetSpriteGraphic(smgEnemyAttacker2);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
1035,7 → 1017,7
State := pesDead;
FCounter := 0;
Inc(MainForm.FScore, 5000);
Image := MainForm.ImageList.Items.Find('Explosion');
Image := MainForm.GetSpriteGraphic(smgExplosion);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
1111,7 → 1093,7
begin
inherited Create(AParent, ALifes);
State := pesNormal;
Image := MainForm.ImageList.Items.Find('Enemy-Attacker3');
Image := MainForm.GetSpriteGraphic(smgEnemyAttacker3);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
1129,7 → 1111,7
State := pesDead;
FCounter := 0;
Inc(MainForm.FScore, 5000);
Image := MainForm.ImageList.Items.Find('Explosion');
Image := MainForm.GetSpriteGraphic(smgExplosion);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
1179,11 → 1161,11
begin
inherited Create(AParent, ALifes);
State := pesEntering;
Image := MainForm.ImageList.Items.Find('Enemy-boss');
Image := MainForm.GetSpriteGraphic(smgEnemyBoss);
Width := Image.Width;
Height := Image.Height;
BossExists := true;
MainForm.MusicSwitchTrack(mtBoss);
MainForm.MusicSwitchTrack(smmBoss);
AnimCount := Image.PatternCount;
AnimLooped := True;
AnimSpeed := DEFAULT_ANIMSPEED;
1397,6 → 1379,15
StartScene(gsTitle);
end;
 
function TMainForm.GetSpriteGraphic(
Sprite: TSpaceMissionGraphicSprite): TPictureCollectionItem;
begin
if (Sprite<>smgNone) and (imagelist.Items.Count >= Ord(Sprite)) then
result := imagelist.Items.Items[Ord(Sprite)-1]
else
result := nil;
end;
 
procedure TMainForm.GamePauseClick(Sender: TObject);
begin
GamePause.Checked := not GamePause.Checked;
1416,7 → 1407,7
procedure TMainForm.DXInit;
begin
try
Imagelist.Items.LoadFromFile(FDirectory+'DirectX\Graphic.dxg');
Imagelist.Items.LoadFromFile(OwnDirectory+'DirectX\Graphics.dxg');
ImageList.Items.MakeColorTable;
DXDraw.ColorTable := ImageList.Items.ColorTable;
DXDraw.DefColorTable := ImageList.Items.ColorTable;
1468,7 → 1459,7
 
procedure TMainForm.SoundInit;
begin
if (WaveOutGetNumDevs < 1) or not FileExists(FDirectory+'DirectX\Sound.dxw') then
if (WaveOutGetNumDevs < 1) or not FileExists(OwnDirectory+'DirectX\Sound.dxw') then
begin
OptionSound.Checked := false;
OptionSound.Enabled := False;
1481,7 → 1472,7
begin
try
DXSound.Initialize;
WaveList.Items.LoadFromFile(FDirectory+'DirectX\Sound.dxw');
WaveList.Items.LoadFromFile(OwnDirectory+'DirectX\Sound.dxw');
except
OptionSound.enabled := False;
WaveList.items.clear;
1495,7 → 1486,7
var
i: integer;
begin
if (WaveOutGetNumDevs < 1) or not FileExists(FDirectory+'DirectX\Music.dxm') then
if (WaveOutGetNumDevs < 1) or not FileExists(OwnDirectory+'DirectX\Music.dxm') then
begin
optionmusic.Checked := false;
optionmusic.Enabled := False;
1503,7 → 1494,7
end;
 
try
dxmusic.Midis.LoadFromFile(FDirectory+'DirectX\Music.dxm');
dxmusic.Midis.LoadFromFile(OwnDirectory+'DirectX\Music.dxm');
for i := 0 to dxmusic.Midis.Count-1 do
begin
if not dxmusic.Midis.Items[i].IsInitialized then
1666,13 → 1657,13
end;
end;
 
procedure TMainForm.PlaySound(Name: string; Wait: Boolean);
procedure TMainForm.PlaySound(Sound: TSpaceMissionSound; Wait: Boolean);
begin
if (OptionSound.Checked) and (OptionSound.Enabled) then
WaveList.Items.Find(Name).Play(Wait);
if (Sound<>smsNone) and (OptionSound.Checked) and (OptionSound.Enabled) and (WaveList.Items.Count >= Ord(Sound)) then
WaveList.Items.Items[Ord(Sound)-1].Play(Wait);
end;
 
procedure TMainForm.MusicSwitchTrack(Name: TMusicTrack);
procedure TMainForm.MusicSwitchTrack(Name: TSpaceMissionMusicTrack);
begin
if (not mainform.active) and (mainform.visible) then //1st Programmstart
exit;
1767,7 → 1758,7
GameStart.enabled := false;
Spielgeschwindigkeit.enabled := false;
mainform.Visible := true;
MusicSwitchTrack(mtTitle);
MusicSwitchTrack(smmTitle);
end;
 
procedure TMainForm.StartSceneMain;
1778,7 → 1769,7
FCounter := 0;
NewLevel(FLevel);
BossExists := false;
MusicSwitchTrack(mtGame);
MusicSwitchTrack(smmGame);
FEnemyAdventPos := 0;
FFrame := -4;
PlayerSprite := TPlayerSprite.Create(SpriteEngine.Engine);
1785,7 → 1776,7
with TBackground.Create(SpriteEngine.Engine) do
begin
SetMapSize(1, 1);
Image := mainform.ImageList.Items.Find('Star3');
Image := MainForm.GetSpriteGraphic(smgStar3);
Z := -13;
Y := 40;
Speed := 1 / 2;
1794,7 → 1785,7
with TBackground.Create(SpriteEngine.Engine) do
begin
SetMapSize(1, 1);
Image := mainform.ImageList.Items.Find('Star2');
Image := MainForm.GetSpriteGraphic(smgStar2);
Z := -12;
Y := 30;
Speed := 1;
1803,7 → 1794,7
with TBackground.Create(SpriteEngine.Engine) do
begin
SetMapSize(1, 1);
Image := mainform.ImageList.Items.Find('Star1');
Image := MainForm.GetSpriteGraphic(smgStar1);
Z := -11;
Y := 10;
Speed := 2;
1873,7 → 1864,7
Spielgeschwindigkeit.enabled := false;
Neustart.enabled := false;
GamePause.enabled := false;
MusicSwitchTrack(mtScene);
MusicSwitchTrack(smmScene);
BossExists := false;
end;
 
1885,7 → 1876,7
Spielgeschwindigkeit.enabled := false;
Neustart.enabled := false;
GamePause.enabled := false;
MusicSwitchTrack(mtScene);
MusicSwitchTrack(smmScene);
BossExists := false;
end;
 
1990,7 → 1981,7
end;
e.enemyType := etEnemyBoss;
e.x := lev*75*30{O_o} div lev;
e.y := (dxdraw.surfaceheight div 2) - (MainForm.ImageList.Items.Find('Enemy-boss').height div 2);
e.y := (dxdraw.surfaceheight div 2) - (MainForm.GetSpriteGraphic(smgEnemyBoss).height div 2);
e.lifes := lev*5;
LevelData.EnemyAdventTable[lev*ADDITIONAL_ENEMIES_PER_LEVEL] := e;
Assert(FRestEnemies = Length(LevelData.EnemyAdventTable));
2018,7 → 2009,7
Logo: TPictureCollectionItem;
begin
DXDraw.Surface.Fill(0);
Logo := ImageList.Items.Find('Logo');
Logo := GetSpriteGraphic(smgLogo);
{Logo.DrawWaveX(DXDraw.Surface, (dxdraw.surfaceWidth div 2) - 181, 65, Logo.Width, Logo.Height, 0,
Trunc(16 - Cos256(FBlink div 60) * 16), 32, -FBlink div 5);}
Logo.DrawWaveX(DXDraw.Surface, trunc((dxdraw.surfaceWidth / 2) - (Logo.Width / 2)), 65, Logo.Width, Logo.Height, 0,
2075,7 → 2066,7
exit;
end;
NewLevel(FLevel);
PlaySound('SceneMov', False);
PlaySound(smsSceneMov, False);
PalleteAnim(RGBQuad(0, 0, 0), 300);
Sleep(200);
StartScene(gsMain);
2254,7 → 2245,7
// Weiter mit Leertaste oder Enter
if (isButton1 in DXInput.States) or (isButton2 in DXInput.States) then
begin
PlaySound('SceneMov', False);
PlaySound(smsSceneMov, False);
PalleteAnim(RGBQuad(0, 0, 0), 300);
Sleep(200);
StartScene(gsTitle);
2290,7 → 2281,7
// Weiter mit Leertaste oder Enter
if (isButton1 in DXInput.States) or (isButton2 in DXInput.States) then
begin
PlaySound('SceneMov', False);
PlaySound(smsSceneMov, False);
PalleteAnim(RGBQuad(0, 0, 0), 300);
Sleep(200);
StartScene(gsTitle);
2316,7 → 2307,7
StartScene(gsWin);
exit;
end;
MusicSwitchTrack(mtScene);
MusicSwitchTrack(smmScene);
end;
 
procedure TMainForm.EndSceneNewLevel;
2348,7 → 2339,7
// Weiter mit Leertaste oder Enter
if (isButton1 in DXInput.States) or (isButton2 in DXInput.States) then
begin
PlaySound('SceneMov', False);
PlaySound(smsSceneMov, False);
PalleteAnim(RGBQuad(0, 0, 0), 300);
Sleep(200);
StartScene(gsMain);
2376,7 → 2367,7
writeoptions;
end;
 
procedure TMainForm.PlayMusic(Name: TMusicTrack);
procedure TMainForm.PlayMusic(Name: TSpaceMissionMusicTrack);
begin
if not OptionMusic.checked then exit;
if Ord(Name) > dxmusic.Midis.Count then exit;
2383,14 → 2374,14
dxmusic.Midis.Items[Ord(Name)-1].Play;
end;
 
procedure TMainForm.StopMusic(Name: TMusicTrack);
procedure TMainForm.StopMusic(Name: TSpaceMissionMusicTrack);
begin
if Name = mtNone then exit;
if Name = smmNone then exit;
if Ord(Name) > dxmusic.Midis.Count then exit;
dxmusic.Midis.Items[Ord(Name)-1].Stop;
end;
 
procedure TMainForm.ResumeMusic(Name: TMusicTrack);
procedure TMainForm.ResumeMusic(Name: TSpaceMissionMusicTrack);
begin
if not OptionMusic.checked then exit;
if Ord(Name) > dxmusic.Midis.Count then exit;
2397,9 → 2388,9
dxmusic.Midis.Items[Ord(Name)-1].Play; // TODO: how to pause/resume instead play/stop
end;
 
procedure TMainForm.PauseMusic(Name: TMusicTrack);
procedure TMainForm.PauseMusic(Name: TSpaceMissionMusicTrack);
begin
if Name = mtNone then exit;
if Name = smmNone then exit;
if Ord(Name) > dxmusic.Midis.Count then exit;
dxmusic.Midis.Items[Ord(Name)-1].Stop; // TODO: how to pause/resume instead play/stop
end;
2416,7 → 2407,7
FScore := 0;
EnemyCounter := 0;
StartScene(gsMain);
MusicSwitchTrack(mtGame);
MusicSwitchTrack(smmGame);
end;
 
procedure TMainForm.LeichtClick(Sender: TObject);