Subversion Repositories spacemission

Compare Revisions

Regard whitespace Rev 26 → Rev 27

/LevMain.pas
1,9 → 1,5
unit LevMain;
 
// TODO 2024:
// - Wenn man ein Level "X" lädt, und dann Verwalten wieder öffnet, sollte diese Level-Nummer vorgeschlagen werden, sodass man direkt Speichern klicken kann
// - Remove "Source edit" form
 
interface
 
uses
46,7 → 42,6
SLabel4a: TLabel;
SLabel4b: TLabel;
LivesLabel: TLabel;
Quelltext1: TMenuItem;
StatusBar: TStatusBar;
N1: TMenuItem;
Spielfelderweitern1: TMenuItem;
65,12 → 60,10
procedure DXDrawMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure EnemyClick(Sender: TObject);
procedure EnemyAdd(x, y, art, lives: integer);
procedure NeuClick(Sender: TObject);
procedure DXDrawMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Quelltext1Click(Sender: TObject);
procedure Spielfelderweitern1Click(Sender: TObject);
procedure ScrollBarScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
82,7 → 75,7
dxdraw: tdxdraw;
{ Variablen }
FMenuItem: integer;
Enemys: TStrings;
LevData: TLevelData;
ScrollP: integer;
AltScrollPos: integer;
Boss: boolean;
90,8 → 83,7
NumEnemys: integer;
function SelectedEnemyType: TEnemyType;
{ Level-Routinen }
procedure EnemyCreate(x, y: integer); overload;
procedure EnemyCreate(x, y: integer; AEnemyType: TEnemyType; ALives: integer); overload;
procedure EnemyCreateSprite(x, y: integer; AEnemyType: TEnemyType; ALives: integer);
procedure DestroyLevel;
procedure AnzeigeAct;
{ Initialisiations-Routinen }
108,7 → 100,7
implementation
 
uses
Global, LevSplash, LevSpeicherung, ComInfo, LevSource, LevOptions;
Global, LevSplash, LevSpeicherung, ComInfo, LevOptions;
 
const
RasterW = 48;
150,8 → 142,7
FXCor := trunc(x) + (MainForm.ScrollP * RasterW);
FCorInit := true;
end;
if MainForm.Enemys.IndexOf(floattostr(FXCor)+'-'+floattostr(y)+':'+
inttostr(Ord(FEnemyType))+'('+inttostr(FLives)+')') = -1 then dead;
if MainForm.LevData.IndexOfEnemy(FXCor, integer(round(Y)), FEnemyType, FLives) = -1 then dead;
X := FXCor - (MainForm.ScrollP * RasterW);
end;
 
262,7 → 253,7
 
procedure TMainForm.FormDestroy(Sender: TObject);
begin
Enemys.Free;
LevData.Free;
//spriteengine.Free;
dxtimer.Free;
imagelist.Free;
349,7 → 340,7
{var
i, j: Integer;}
begin
Enemys := TStringList.create;
LevData := TLevelData.create;
sleep(500);
//PlayerSprite
with TBackground.Create(SpriteEngine.Engine) do
470,7 → 461,7
begin
ex := trunc(x/RasterW) * RasterW;
ey := trunc(y/RasterH) * RasterH;
EnemyCreate(ex, ey);
EnemyCreateSprite(ex, ey, SelectedEnemyType, LivesEdit.Value);
breaked := false;
{ Setzen }
if Button = mbLeft then
480,7 → 471,7
ok := false // boss already exists
else
begin
for i := 1 to 7 do
for i := 1 to NumEnemyTypes do
begin
for j := 0 to 999 do
begin
490,7 → 481,7
begin
for l := 0 to 1 do
begin
if Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':7('+inttostr(j)+')') <> -1 then
if LevData.IndexOfEnemy(ex + ((ScrollP - k) * RasterW), ey - (RasterH * l), etEnemyBoss, j) <> -1 then
begin
ok := false;
break;
500,8 → 491,7
end;
if not ok then break;
end;
if Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
inttostr(i)+'('+inttostr(j)+')') <> -1 then
if LevData.IndexOfEnemy(ex + (ScrollP * RasterW), ey, TEnemyType(i), j) <> -1 then
begin
ok := false;
break;
513,11 → 503,9
if ok then
begin
if SelectedEnemyType <> etEnemyMeteor then
Enemys.Add(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
inttostr(Ord(SelectedEnemyType))+'('+inttostr(LivesEdit.Value)+')')
LevData.AddEnemy(ex + (ScrollP * RasterW), ey, SelectedEnemyType, LivesEdit.Value)
else
Enemys.Add(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
inttostr(Ord(SelectedEnemyType))+'(0)');
LevData.AddEnemy(ex + (ScrollP * RasterW), ey, SelectedEnemyType, 0);
inc(NumEnemys);
if SelectedEnemyType = etEnemyBoss then boss := true;
end
526,19 → 514,19
{ Löschen }
else if Button = mbRight then
begin
for i := 1 to 7 do
for i := 1 to NumEnemyTypes do
begin
for j := 0 to 999 do
begin
if boss and (i = 7) then
if boss and (TEnemyType(i) = etEnemyBoss) then
begin
for k := 0 to 3 do
begin
for l := 0 to 1 do
begin
if Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':'+inttostr(i)+'('+inttostr(j)+')') <> -1 then
if LevData.IndexOfEnemy(ex + ((ScrollP - k) * RasterW), ey - (RasterH * l), TEnemyType(i), j) <> -1 then
begin
Enemys.Delete(Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':'+inttostr(i)+'('+inttostr(j)+')'));
LevData.DeleteEnemy(ex + ((ScrollP - k) * RasterW), ey - (RasterH * l), TEnemyType(i), j);
Boss := false;
dec(NumEnemys);
breaked := true;
548,12 → 536,10
if breaked then break;
end;
end;
if Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
inttostr(i)+'('+inttostr(j)+')') <> -1 then
if LevData.IndexOfEnemy(ex + (ScrollP * RasterW), ey, TEnemyType(i), j) <> -1 then
begin
Enemys.Delete(Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+
':'+inttostr(i)+'('+inttostr(j)+')'));
if i = 7 then Boss := false;
LevData.DeleteEnemy(ex + (ScrollP * RasterW), ey, TEnemyType(i), j);
if TEnemyType(i) = etEnemyBoss then Boss := false;
dec(NumEnemys);
breaked := true;
break;
576,7 → 562,7
LivesLabel.Enabled := et <> etEnemyMeteor;
end;
 
procedure TMainForm.EnemyCreate(x, y: integer; AEnemyType: TEnemyType; ALives: integer);
procedure TMainForm.EnemyCreateSprite(x, y: integer; AEnemyType: TEnemyType; ALives: integer);
var
Enemy: TSprite;
begin
585,16 → 571,12
Enemy.y := y;
end;
 
procedure TMainForm.EnemyCreate(x, y: integer);
begin
EnemyCreate(x, y, SelectedEnemyType, LivesEdit.Value);
end;
 
procedure TMainForm.DestroyLevel;
begin
ScrollBar.Position := 0; // this doesn't call ScrollBarScroll()
ScrollP := 0;
Enemys.Clear;
LevData.Clear;
ScrollBar.Max := MainForm.LevData.LevelEditorLength;
NumEnemys := 0;
Boss := false;
LevChanged := true;
623,11 → 605,6
end;
end;
 
procedure TMainForm.EnemyAdd(x, y, art, lives: integer);
begin
Enemys.Add(inttostr(x)+'-'+inttostr(y)+':'+inttostr(art)+'('+inttostr(lives)+')');
end;
 
procedure TMainForm.NeuClick(Sender: TObject);
begin
if MessageDlg('Level wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
641,7 → 618,10
status_lives = 'Leben: ';
status_nolives = 'Einheit hat keine Lebensangabe';
var
ex, ey, i, j, k, l, wert: integer;
ex, ey, i, j, k, l: integer;
lifes: integer;
enemyType: TEnemyType;
enemyName: string;
breaked: boolean;
begin
if sender <> DxDraw then
651,21 → 631,22
end;
ex := trunc(x/RasterW) * RasterW;
ey := trunc(y/RasterH) * RasterH;
wert := -1;
lifes := -1;
enemyType := etUnknown;
breaked := false;
for i := 1 to 7 do
for i := 1 to NumEnemyTypes do
begin
for j := 0 to 999 do
begin
if boss and (i = 7) then
if boss and (TEnemyType(i) = etEnemyBoss) then
begin
for k := 0 to 3 do
begin
for l := 0 to 1 do
begin
if Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':'+inttostr(i)+'('+inttostr(j)+')') <> -1 then
if LevData.IndexOfEnemy(ex + ((ScrollP - k) * RasterW), ey - (RasterH * l), TEnemyType(i), j) <> -1 then
begin
wert := j;
lifes := j;
breaked := true;
break;
end;
673,10 → 654,10
if breaked then break;
end;
end;
if (breaked = false) and (Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
inttostr(i)+'('+inttostr(j)+')') <> -1) then
if (breaked = false) and (LevData.IndexOfEnemy(ex + (ScrollP * RasterW), ey, TEnemyType(i), j) <> -1) then
begin
wert := j;
lifes := j;
enemyType := TEnemyType(i);
breaked := true;
break;
end;
683,12 → 664,20
end;
if breaked then break;
end;
if wert <> -1 then
if lifes <> -1 then
begin
if wert > 0 then
StatusBar.SimpleText := ' ' + status_lives + inttostr(wert)
if Ord(enemyType) = 1 then enemyName := Enemy1.Caption
else if Ord(enemyType) = 2 then enemyName := Enemy2.Caption
else if Ord(enemyType) = 3 then enemyName := Enemy3.Caption
else if Ord(enemyType) = 4 then enemyName := Enemy4.Caption
else if Ord(enemyType) = 5 then enemyName := Enemy5.Caption
else if Ord(enemyType) = 6 then enemyName := Enemy6.Caption
else if Ord(enemyType) = 7 then enemyName := Enemy7.Caption
else enemyName := '???';
if lifes > 0 then
StatusBar.SimpleText := ' ' + enemyName + ' - ' + status_lives + inttostr(lifes)
else
StatusBar.SimpleText := ' ' + status_nolives;
StatusBar.SimpleText := ' ' + enemyName + ' - ' + status_nolives;
end
else
StatusBar.SimpleText := ' ' + status_info;
700,12 → 689,6
CanClose := MessageDlg('Beenden ohne abspeichern?', mtConfirmation, [mbYes, mbNo], 0) = mrYes;
end;
 
procedure TMainForm.Quelltext1Click(Sender: TObject);
begin
SourceForm.Aktualisieren;
SourceForm.showmodal;
end;
 
procedure TMainForm.Spielfelderweitern1Click(Sender: TObject);
begin
LevelForm.Aktualisieren;