Subversion Repositories spacemission

Rev

Rev 3 | Rev 6 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3 Rev 4
1
unit LevMain;
1
unit LevMain;
2
 
2
 
3
interface
3
interface
4
 
4
 
5
uses
5
uses
6
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, MMSystem,
6
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, MMSystem,
7
  Dialogs, StdCtrls, ExtCtrls, Menus, DIB, DXClass, DXSprite, DXDraws,
7
  Dialogs, StdCtrls, ExtCtrls, Menus, DIB, DXClass, DXSprite, DXDraws,
8
  DXSounds, Spin, ComCtrls;
8
  DXSounds, Spin, ComCtrls, System.UITypes, WinAPI.DirectDraw;
9
 
9
 
10
type
10
type
11
  TMainForm = class(TDXForm)
11
  TMainForm = class(TDXForm)
12
    MainMenu: TMainMenu;
12
    MainMenu: TMainMenu;
13
    Spiel: TMenuItem;
13
    Spiel: TMenuItem;
14
    Beenden: TMenuItem;
14
    Beenden: TMenuItem;
15
    Hilfe: TMenuItem;
15
    Hilfe: TMenuItem;
16
    Mitarbeiter: TMenuItem;
-
 
17
    Leer1: TMenuItem;
16
    Leer1: TMenuItem;
18
    Level: TMenuItem;
17
    Level: TMenuItem;
19
    Informationen: TMenuItem;
18
    Informationen: TMenuItem;
20
    Leer2: TMenuItem;
-
 
21
    Enemy1: TRadioButton;
19
    Enemy1: TRadioButton;
22
    Enemy2: TRadioButton;
20
    Enemy2: TRadioButton;
23
    Enemy3: TRadioButton;
21
    Enemy3: TRadioButton;
24
    Enemy4: TRadioButton;
22
    Enemy4: TRadioButton;
25
    Enemy5: TRadioButton;
23
    Enemy5: TRadioButton;
26
    Enemy6: TRadioButton;
24
    Enemy6: TRadioButton;
27
    Enemy7: TRadioButton;
25
    Enemy7: TRadioButton;
28
    ScrollBar: TScrollBar;
26
    ScrollBar: TScrollBar;
29
    Bevel1: TBevel;
27
    Bevel1: TBevel;
30
    Bevel2: TBevel;
28
    Bevel2: TBevel;
31
    SelLabel: TLabel;
29
    SelLabel: TLabel;
32
    SelPanel: TPanel;
30
    SelPanel: TPanel;
33
    Bevel3: TBevel;
31
    Bevel3: TBevel;
34
    SLabel1a: TLabel;
32
    SLabel1a: TLabel;
35
    SLabel2a: TLabel;
33
    SLabel2a: TLabel;
36
    SLabel1b: TLabel;
34
    SLabel1b: TLabel;
37
    SLabel2b: TLabel;
35
    SLabel2b: TLabel;
38
    SLabel0: TLabel;
36
    SLabel0: TLabel;
39
    Neu: TMenuItem;
37
    Neu: TMenuItem;
40
    Image1: TImage;
38
    Image1: TImage;
41
    SLabel3a: TLabel;
39
    SLabel3a: TLabel;
42
    SLabel3b: TLabel;
40
    SLabel3b: TLabel;
43
    SLabel4a: TLabel;
41
    SLabel4a: TLabel;
44
    SLabel4b: TLabel;
42
    SLabel4b: TLabel;
45
    LivesLabel: TLabel;
43
    LivesLabel: TLabel;
46
    Quelltext1: TMenuItem;
44
    Quelltext1: TMenuItem;
47
    StatusBar: TStatusBar;
45
    StatusBar: TStatusBar;
48
    N1: TMenuItem;
46
    N1: TMenuItem;
49
    Spielfelderweitern1: TMenuItem;
47
    Spielfelderweitern1: TMenuItem;
50
    LivesEdt: TEdit;
48
    LivesEdt: TEdit;
51
    Lives: TUpDown;
49
    Lives: TUpDown;
52
    procedure DXDrawFinalize(Sender: TObject);
50
    procedure DXDrawFinalize(Sender: TObject);
53
    procedure DXDrawInitialize(Sender: TObject);
51
    procedure DXDrawInitialize(Sender: TObject);
54
    procedure FormCreate(Sender: TObject);
52
    procedure FormCreate(Sender: TObject);
55
    procedure DXTimerTimer(Sender: TObject; LagCount: Integer);
53
    procedure DXTimerTimer(Sender: TObject; LagCount: Integer);
56
    procedure BeendenClick(Sender: TObject);
54
    procedure BeendenClick(Sender: TObject);
57
    procedure FormDestroy(Sender: TObject);
55
    procedure FormDestroy(Sender: TObject);
58
    procedure MitarbeiterClick(Sender: TObject);
-
 
59
    procedure LevelClick(Sender: TObject);
56
    procedure LevelClick(Sender: TObject);
60
    procedure FormShow(Sender: TObject);
57
    procedure FormShow(Sender: TObject);
61
    procedure InformationenClick(Sender: TObject);
58
    procedure InformationenClick(Sender: TObject);
62
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
59
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
63
    procedure DXDrawMouseDown(Sender: TObject; Button: TMouseButton;
60
    procedure DXDrawMouseDown(Sender: TObject; Button: TMouseButton;
64
      Shift: TShiftState; X, Y: Integer);
61
      Shift: TShiftState; X, Y: Integer);
65
    procedure EnemyClick(Sender: TObject);
62
    procedure EnemyClick(Sender: TObject);
66
    procedure EnemyAdd(x, y, art, lives: integer);
63
    procedure EnemyAdd(x, y, art, lives: integer);
67
    procedure NeuClick(Sender: TObject);
64
    procedure NeuClick(Sender: TObject);
68
    procedure DXDrawMouseMove(Sender: TObject; Shift: TShiftState; X,
65
    procedure DXDrawMouseMove(Sender: TObject; Shift: TShiftState; X,
69
      Y: Integer);
66
      Y: Integer);
70
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
67
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
71
    procedure Quelltext1Click(Sender: TObject);
68
    procedure Quelltext1Click(Sender: TObject);
72
    procedure Spielfelderweitern1Click(Sender: TObject);
69
    procedure Spielfelderweitern1Click(Sender: TObject);
73
    procedure ScrollBarScroll(Sender: TObject; ScrollCode: TScrollCode;
70
    procedure ScrollBarScroll(Sender: TObject; ScrollCode: TScrollCode;
74
      var ScrollPos: Integer);
71
      var ScrollPos: Integer);
75
    procedure LivesClick(Sender: TObject; Button: TUDBtnType);
72
    procedure LivesClick(Sender: TObject; Button: TUDBtnType);
76
    procedure LivesEdtKeyPress(Sender: TObject; var Key: Char);
73
    procedure LivesEdtKeyPress(Sender: TObject; var Key: Char);
77
    procedure LivesEdtChange(Sender: TObject);
74
    procedure LivesEdtChange(Sender: TObject);
78
  public
75
  public
79
    { VCL-Ersatz }
76
    { VCL-Ersatz }
80
    spriteengine: tdxspriteengine;
77
    spriteengine: tdxspriteengine;
81
    dxtimer: tdxtimer;
78
    dxtimer: tdxtimer;
82
    imagelist: tdximagelist;
79
    imagelist: tdximagelist;
83
    dxdraw: tdxdraw;
80
    dxdraw: tdxdraw;
84
    { Variablen }
81
    { Variablen }
85
    FMenuItem: integer;
82
    FMenuItem: integer;
86
    Enemys: TStrings;
83
    Enemys: TStrings;
87
    ArtChecked: integer;
84
    ArtChecked: integer;
88
    LiveEdit: integer;
85
    LiveEdit: integer;
89
    ScrollP: integer;
86
    ScrollP: integer;
90
    AltScrollPos: integer;
87
    AltScrollPos: integer;
91
    Boss: boolean;
88
    Boss: boolean;
92
    LevChanged: boolean;
89
    LevChanged: boolean;
93
    NumEnemys: integer;
90
    NumEnemys: integer;
94
    { Level-Routinen }
91
    { Level-Routinen }
95
    procedure EnemyCreate(x, y: integer);
92
    procedure EnemyCreate(x, y: integer);
96
    procedure DestroyLevel;
93
    procedure DestroyLevel;
97
    procedure AnzeigeAct;
94
    procedure AnzeigeAct;
98
    { Initialisiations-Routinen }
95
    { Initialisiations-Routinen }
99
    procedure DXInit;
96
    procedure DXInit;
100
    procedure ProgramInit;
97
    procedure ProgramInit;
101
    { Farb-Routinen }
98
    { Farb-Routinen }
102
    function ComposeColor(Dest, Src: TRGBQuad; Percent: Integer): TRGBQuad;
99
    function ComposeColor(Dest, Src: TRGBQuad; Percent: Integer): TRGBQuad;
103
    procedure PalleteAnim(Col: TRGBQuad; Time: Integer);
100
    procedure PalleteAnim(Col: TRGBQuad; Time: Integer);
104
    { Sonstiges }
101
    { Sonstiges }
105
    procedure LivesChange(newval: integer);
102
    procedure LivesChange(newval: integer);
106
  end;
103
  end;
107
 
104
 
108
var
105
var
109
  MainForm: TMainForm;
106
  MainForm: TMainForm;
110
 
107
 
111
implementation
108
implementation
112
 
109
 
113
uses
110
uses
114
  Global, LevSplash, LevSpeicherung, ComText, ComInfo, LevSource, LevOptions;
111
  Global, LevSplash, LevSpeicherung, ComInfo, LevSource, LevOptions;
115
 
112
 
116
const
113
const
117
  FileError = 'Die Datei kann von SpaceMission nicht geöffnet werden!';
114
  FileError = 'Die Datei kann von SpaceMission nicht geöffnet werden!';
118
  status_info = ' Zeigen Sie mit dem Mauszeiger auf eine Einheit, um deren Eigenschaften anzuzeigen...';
115
  status_info = ' Zeigen Sie mit dem Mauszeiger auf eine Einheit, um deren Eigenschaften anzuzeigen...';
119
  status_lives = ' Leben: ';
116
  status_lives = ' Leben: ';
120
  status_nolives = ' Einheit hat keine Lebensangabe';
117
  status_nolives = ' Einheit hat keine Lebensangabe';
121
  RasterW = 48;
118
  RasterW = 48;
122
  RasterH = 32;
119
  RasterH = 32;
123
 
120
 
124
{$R *.DFM}
121
{$R *.DFM}
125
 
122
 
126
{$R WindowsXP.res}
-
 
127
 
-
 
128
type
123
type
129
  TBackground = class(TBackgroundSprite)
124
  TBackground = class(TBackgroundSprite)
130
  protected
125
  protected
131
    procedure DoMove(MoveCount: Integer); override;
126
    procedure DoMove(MoveCount: Integer); override;
132
  end;
127
  end;
133
 
128
 
134
  TEnemy = class(TImageSprite)
129
  TEnemy = class(TImageSprite)
135
  private
130
  private
136
    Lives: integer;
131
    Lives: integer;
137
    Art: integer;
132
    Art: integer;
138
    XCor: integer;
133
    XCor: integer;
139
    CorInit: boolean;
134
    CorInit: boolean;
140
  protected
135
  protected
141
    procedure DoMove(MoveCount: Integer); override;
136
    procedure DoMove(MoveCount: Integer); override;
142
  public
137
  public
143
    constructor Create(AParent: TSprite); override;
138
    constructor Create(AParent: TSprite); override;
144
  end;
139
  end;
145
 
140
 
146
procedure TMainForm.DXInit;
141
procedure TMainForm.DXInit;
147
begin
142
begin
148
  Imagelist.Items.LoadFromFile(FDirectory+'DirectX\Graphic.dxg');
143
  Imagelist.Items.LoadFromFile(FDirectory+'DirectX\Graphic.dxg');
149
  ImageList.Items.MakeColorTable;
144
  ImageList.Items.MakeColorTable;
150
  DXDraw.ColorTable := ImageList.Items.ColorTable;
145
  DXDraw.ColorTable := ImageList.Items.ColorTable;
151
  DXDraw.DefColorTable := ImageList.Items.ColorTable;
146
  DXDraw.DefColorTable := ImageList.Items.ColorTable;
152
  DXDraw.UpdatePalette;
147
  DXDraw.UpdatePalette;
153
  DXDraw.Initialize;
148
  DXDraw.Initialize;
154
end;
149
end;
155
 
150
 
156
procedure TEnemy.DoMove(MoveCount: Integer);
151
procedure TEnemy.DoMove(MoveCount: Integer);
157
begin
152
begin
158
  if not CorInit then
153
  if not CorInit then
159
  begin
154
  begin
160
    XCor := trunc(x) + (MainForm.ScrollP * RasterW);
155
    XCor := trunc(x) + (MainForm.ScrollP * RasterW);
161
    CorInit := true;
156
    CorInit := true;
162
  end;
157
  end;
163
  if MainForm.Enemys.IndexOf(floattostr(XCor)+'-'+floattostr(y)+':'+
158
  if MainForm.Enemys.IndexOf(floattostr(XCor)+'-'+floattostr(y)+':'+
164
    inttostr(Art)+'('+inttostr(Lives)+')') = -1 then dead;
159
    inttostr(Art)+'('+inttostr(Lives)+')') = -1 then dead;
165
  X := XCor - (MainForm.ScrollP * RasterW);
160
  X := XCor - (MainForm.ScrollP * RasterW);
166
end;
161
end;
167
 
162
 
168
procedure TBackground.DoMove(MoveCount: Integer);
163
procedure TBackground.DoMove(MoveCount: Integer);
169
begin
164
begin
170
  X := -(MainForm.ScrollP * RasterW);
165
  X := -(MainForm.ScrollP * RasterW);
171
end;
166
end;
172
 
167
 
173
constructor TEnemy.Create(AParent: TSprite);
168
constructor TEnemy.Create(AParent: TSprite);
174
begin
169
begin
175
  inherited Create(AParent);
170
  inherited Create(AParent);
176
  if MainForm.ArtChecked = 1 then Image := MainForm.ImageList.Items.Find('Enemy-Attacker');
171
  if MainForm.ArtChecked = 1 then Image := MainForm.ImageList.Items.Find('Enemy-Attacker');
177
  if MainForm.ArtChecked = 2 then Image := MainForm.ImageList.Items.Find('Enemy-Attacker2');
172
  if MainForm.ArtChecked = 2 then Image := MainForm.ImageList.Items.Find('Enemy-Attacker2');
178
  if MainForm.ArtChecked = 3 then Image := MainForm.ImageList.Items.Find('Enemy-Attacker3');
173
  if MainForm.ArtChecked = 3 then Image := MainForm.ImageList.Items.Find('Enemy-Attacker3');
179
  if MainForm.ArtChecked = 4 then Image := MainForm.ImageList.Items.Find('Enemy-Meteor');
174
  if MainForm.ArtChecked = 4 then Image := MainForm.ImageList.Items.Find('Enemy-Meteor');
180
  if MainForm.ArtChecked = 5 then Image := MainForm.ImageList.Items.Find('Enemy-Disk');
175
  if MainForm.ArtChecked = 5 then Image := MainForm.ImageList.Items.Find('Enemy-Disk');
181
  if MainForm.ArtChecked = 6 then Image := MainForm.ImageList.Items.Find('Enemy-Disk2');
176
  if MainForm.ArtChecked = 6 then Image := MainForm.ImageList.Items.Find('Enemy-Disk2');
182
  if MainForm.ArtChecked = 7 then Image := MainForm.ImageList.Items.Find('Enemy-Boss');
177
  if MainForm.ArtChecked = 7 then Image := MainForm.ImageList.Items.Find('Enemy-Boss');
183
  if MainForm.ArtChecked = 4 then Lives := 0 else Lives := MainForm.LiveEdit;
178
  if MainForm.ArtChecked = 4 then Lives := 0 else Lives := MainForm.LiveEdit;
184
  Art := MainForm.ArtChecked;
179
  Art := MainForm.ArtChecked;
185
  Width := Image.Width;
180
  Width := Image.Width;
186
  Height := Image.Height;
181
  Height := Image.Height;
187
  PixelCheck := True;
182
  PixelCheck := True;
188
end;
183
end;
189
 
184
 
190
procedure TMainForm.FormCreate(Sender: TObject);
185
procedure TMainForm.FormCreate(Sender: TObject);
191
var
186
var
192
  Ergebnis: string;
187
  Ergebnis: string;
193
  daten: textfile;
188
  daten: textfile;
194
  ok: boolean;
189
  ok: boolean;
195
begin
190
begin
196
  { VCL-Ersatz start }
191
  { VCL-Ersatz start }
197
  dxtimer := tdxtimer.create(self);
192
  dxtimer := tdxtimer.create(self);
198
  dxtimer.Interval := 100;
193
  dxtimer.Interval := 100;
199
  dxtimer.ActiveOnly := false;
194
  dxtimer.ActiveOnly := false;
200
  dxtimer.Enabled := false;
195
  dxtimer.Enabled := false;
201
  dxtimer.OnTimer := DxTimerTimer;
196
  dxtimer.OnTimer := DxTimerTimer;
202
 
197
 
203
  dxdraw := tdxdraw.Create(self);
198
  dxdraw := tdxdraw.Create(self);
204
  dxdraw.Parent := self;
199
  dxdraw.Parent := self;
205
  dxdraw.Left := 0;
200
  dxdraw.Left := 0;
206
  dxdraw.Top := 0;
201
  dxdraw.Top := 0;
207
  dxdraw.Width := 640;
202
  dxdraw.Width := 640;
208
  dxdraw.Height := 480;
203
  dxdraw.Height := 480;
209
  dxdraw.AutoInitialize := False;
204
  dxdraw.AutoInitialize := False;
210
  dxdraw.AutoSize := False;
205
  dxdraw.AutoSize := False;
211
  dxdraw.Color := clBlack;
206
  dxdraw.Color := clBlack;
212
  dxdraw.Display.BitCount := 24;
207
  dxdraw.Display.BitCount := 24;
213
  dxdraw.Display.FixedBitCount := False;
208
  dxdraw.Display.FixedBitCount := False;
214
  dxdraw.Display.FixedRatio := False;
209
  dxdraw.Display.FixedRatio := False;
215
  dxdraw.Display.FixedSize := False;
210
  dxdraw.Display.FixedSize := False;
216
  dxdraw.Display.Height := 600;
211
  dxdraw.Display.Height := 600;
217
  dxdraw.Display.Width := 800;
212
  dxdraw.Display.Width := 800;
218
  dxdraw.Options := [doAllowReboot, doWaitVBlank, doAllowPalette256, doCenter, doRetainedMode, doHardware, doSelectDriver];
213
  dxdraw.Options := [doAllowReboot, doWaitVBlank, doAllowPalette256, doCenter, {doRetainedMode,} doHardware, doSelectDriver];
219
  dxdraw.OnFinalize := DXDrawFinalize;
214
  dxdraw.OnFinalize := DXDrawFinalize;
220
  dxdraw.OnInitialize := DXDrawInitialize;
215
  dxdraw.OnInitialize := DXDrawInitialize;
221
  dxdraw.ParentShowHint := False;
216
  dxdraw.ParentShowHint := False;
222
  dxdraw.ShowHint := False;
217
  dxdraw.ShowHint := False;
223
  dxdraw.TabOrder := 0;
218
  dxdraw.TabOrder := 0;
224
  dxdraw.OnMouseDown := DXDrawMouseDown;
219
  dxdraw.OnMouseDown := DXDrawMouseDown;
225
  dxdraw.OnMouseMove := DXDrawMouseMove;
220
  dxdraw.OnMouseMove := DXDrawMouseMove;
226
 
221
 
227
  spriteengine := tdxspriteengine.create(self);
222
  spriteengine := tdxspriteengine.create(self);
228
  spriteengine.DXDraw := dxdraw;
223
  spriteengine.DXDraw := dxdraw;
229
 
224
 
230
  imagelist := tdximagelist.create(self);
225
  imagelist := tdximagelist.create(self);
231
  imagelist.DXDraw := dxdraw;
226
  imagelist.DXDraw := dxdraw;
232
 
227
 
233
  { VCL-Ersatz ende }
228
  { VCL-Ersatz ende }
234
 
229
 
235
  ArtChecked := 1;
230
  ArtChecked := 1;
236
  LiveEdit := 1;
231
  LiveEdit := 1;
237
  // Leeres Level am Anfang braucht keine Beenden-Bestätigung.
232
  // Leeres Level am Anfang braucht keine Beenden-Bestätigung.
238
  // LevChanged := true;
233
  // LevChanged := true;
239
 
234
 
240
  //Application.Title := 'SpaceMission '+ProgramVersion+' - Leveleditor';
235
  //Application.Title := 'SpaceMission '+ProgramVersion+' - Leveleditor';
241
  Caption := 'SpaceMission '+ProgramVersion+' - Leveleditor';
236
  Caption := 'SpaceMission '+ProgramVersion+' - Leveleditor';
242
  DXInit;
237
  DXInit;
243
  if (paramcount > 0) and (fileexists(paramstr(1))) then
238
  if (paramcount > 0) and (fileexists(paramstr(1))) then
244
  begin
239
  begin
245
    AssignFile(daten, paramstr(1));
240
    AssignFile(daten, paramstr(1));
246
    Reset(daten);
241
    Reset(daten);
247
    ok := true;
242
    ok := true;
248
    ReadLN(daten, Ergebnis);
243
    ReadLN(daten, Ergebnis);
249
    if Ergebnis <> '; SpaceMission '+FCompVersion then ok := false;
244
    if Ergebnis <> '; SpaceMission '+FCompVersion then ok := false;
250
    ReadLN(daten, Ergebnis);
245
    ReadLN(daten, Ergebnis);
251
    if ergebnis <> '; LEV-File' then ok := false;
246
    if ergebnis <> '; LEV-File' then ok := false;
252
    if not ok then
247
    if not ok then
253
    begin
248
    begin
254
      showmessage(FileError);
249
      showmessage(FileError);
255
      CloseFile(daten);
250
      CloseFile(daten);
256
      ProgramInit;
251
      ProgramInit;
257
      exit;
252
      exit;
258
    end;
253
    end;
259
    { Laden }
254
    { Laden }
260
    CloseFile(daten);
255
    CloseFile(daten);
261
    exit;
256
    exit;
262
  end;
257
  end;
263
  if fileexists(fdirectory+'Bilder\Auswahl.bmp') then
258
  if fileexists(fdirectory+'Bilder\Auswahl.bmp') then
264
    Image1.Picture.LoadFromFile(fdirectory+'Bilder\Auswahl.bmp');
259
    Image1.Picture.LoadFromFile(fdirectory+'Bilder\Auswahl.bmp');
265
  {else
260
  {else
266
    SelPanel.visible := false;}
261
    SelPanel.visible := false;}
267
  ProgramInit;
262
  ProgramInit;
268
end;
263
end;
269
 
264
 
270
procedure TMainForm.FormDestroy(Sender: TObject);
265
procedure TMainForm.FormDestroy(Sender: TObject);
271
begin
266
begin
272
  Enemys.Free;
267
  Enemys.Free;
273
  //spriteengine.Free;
268
  //spriteengine.Free;
274
  dxtimer.Free;
269
  dxtimer.Free;
275
  imagelist.Free;
270
  imagelist.Free;
276
  dxdraw.free;
271
  dxdraw.free;
277
end;
272
end;
278
 
273
 
279
procedure TMainForm.BeendenClick(Sender: TObject);
274
procedure TMainForm.BeendenClick(Sender: TObject);
280
begin
275
begin
281
  close;
276
  close;
282
end;
277
end;
283
 
278
 
284
procedure TMainForm.DXDrawInitialize(Sender: TObject);
279
procedure TMainForm.DXDrawInitialize(Sender: TObject);
285
begin
280
begin
286
  DXTimer.Enabled := True;
281
  DXTimer.Enabled := True;
287
end;
282
end;
288
 
283
 
289
procedure TMainForm.DXDrawFinalize(Sender: TObject);
284
procedure TMainForm.DXDrawFinalize(Sender: TObject);
290
begin
285
begin
291
  DXTimer.Enabled := False;
286
  DXTimer.Enabled := False;
292
end;
287
end;
293
 
288
 
294
procedure TMainForm.DXTimerTimer(Sender: TObject; LagCount: Integer);
289
procedure TMainForm.DXTimerTimer(Sender: TObject; LagCount: Integer);
295
begin
290
begin
296
  if not DXDraw.CanDraw then exit;
291
  if not DXDraw.CanDraw then exit;
297
  LagCount := 1000 div 60;
292
  LagCount := 1000 div 60;
298
  SpriteEngine.Move(LagCount);
293
  SpriteEngine.Move(LagCount);
299
  SpriteEngine.Dead;
294
  SpriteEngine.Dead;
300
  DxDraw.Surface.Fill(0);
295
  DxDraw.Surface.Fill(0);
301
  SpriteEngine.Draw;
296
  SpriteEngine.Draw;
302
  DXDraw.Flip;
297
  DXDraw.Flip;
303
end;
298
end;
304
 
299
 
305
function TMainForm.ComposeColor(Dest, Src: TRGBQuad; Percent: Integer): TRGBQuad;
300
function TMainForm.ComposeColor(Dest, Src: TRGBQuad; Percent: Integer): TRGBQuad;
306
begin
301
begin
307
  with Result do
302
  with Result do
308
  begin
303
  begin
309
    rgbRed := Src.rgbRed+((Dest.rgbRed-Src.rgbRed)*Percent div 256);
304
    rgbRed := Src.rgbRed+((Dest.rgbRed-Src.rgbRed)*Percent div 256);
310
    rgbGreen := Src.rgbGreen+((Dest.rgbGreen-Src.rgbGreen)*Percent div 256);
305
    rgbGreen := Src.rgbGreen+((Dest.rgbGreen-Src.rgbGreen)*Percent div 256);
311
    rgbBlue := Src.rgbBlue+((Dest.rgbBlue-Src.rgbBlue)*Percent div 256);
306
    rgbBlue := Src.rgbBlue+((Dest.rgbBlue-Src.rgbBlue)*Percent div 256);
312
    rgbReserved := 0;
307
    rgbReserved := 0;
313
  end;
308
  end;
314
end;
309
end;
315
 
310
 
316
procedure TMainForm.PalleteAnim(Col: TRGBQuad; Time: Integer);
311
procedure TMainForm.PalleteAnim(Col: TRGBQuad; Time: Integer);
317
var
312
var
318
  i: Integer;
313
  i: Integer;
319
  t, t2: DWORD;
314
  t, t2: DWORD;
320
  ChangePalette: Boolean;
315
  ChangePalette: Boolean;
321
  c: Integer;
316
  c: Integer;
322
begin
317
begin
323
  if DXDraw.Initialized then
318
  if DXDraw.Initialized then
324
  begin
319
  begin
325
    c := DXDraw.Surface.ColorMatch(RGB(Col.rgbRed, Col.rgbGreen, Col.rgbBlue));
320
    c := DXDraw.Surface.ColorMatch(RGB(Col.rgbRed, Col.rgbGreen, Col.rgbBlue));
326
    ChangePalette := False;
321
    ChangePalette := False;
327
    if DXDraw.CanPaletteAnimation then
322
    if DXDraw.CanPaletteAnimation then
328
    begin
323
    begin
329
      t := GetTickCount;
324
      t := GetTickCount;
330
      while Abs(GetTickCount-t)<Time do
325
      while Abs(GetTickCount-t)<Time do
331
      begin
326
      begin
332
        t2 := Trunc(Abs(GetTickCount-t)/Time*255);
327
        t2 := Trunc(Abs(GetTickCount-t)/Time*255);
333
        for i := 0 to 255 do
328
        for i := 0 to 255 do
334
          DXDraw.ColorTable[i] := ComposeColor(Col, DXDraw.DefColorTable[i], t2);
329
          DXDraw.ColorTable[i] := ComposeColor(Col, DXDraw.DefColorTable[i], t2);
335
        DXDraw.UpdatePalette;
330
        DXDraw.UpdatePalette;
336
        ChangePalette := True;
331
        ChangePalette := True;
337
      end;
332
      end;
338
    end else
333
    end else
339
      Sleep(Time);
334
      Sleep(Time);
340
    for i := 0 to 4 do
335
    for i := 0 to 4 do
341
    begin
336
    begin
342
      DXDraw.Surface.Fill(c);
337
      DXDraw.Surface.Fill(c);
343
      DXDraw.Flip;
338
      DXDraw.Flip;
344
    end;
339
    end;
345
    if ChangePalette then
340
    if ChangePalette then
346
    begin
341
    begin
347
      DXDraw.ColorTable := DXDraw.DefColorTable;
342
      DXDraw.ColorTable := DXDraw.DefColorTable;
348
      DXDraw.UpdatePalette;
343
      DXDraw.UpdatePalette;
349
    end;
344
    end;
350
    DXDraw.Surface.Fill(c);
345
    DXDraw.Surface.Fill(c);
351
    DXDraw.Flip;
346
    DXDraw.Flip;
352
  end;
347
  end;
353
end;
348
end;
354
 
349
 
355
procedure TMainForm.ProgramInit;
350
procedure TMainForm.ProgramInit;
356
{var
351
{var
357
  i, j: Integer;}
352
  i, j: Integer;}
358
begin
353
begin
359
  Enemys := TStringList.create;
354
  Enemys := TStringList.create;
360
  sleep(500);
355
  sleep(500);
361
  //PlayerSprite
356
  //PlayerSprite
362
  with TBackground.Create(SpriteEngine.Engine) do
357
  with TBackground.Create(SpriteEngine.Engine) do
363
  begin
358
  begin
364
    SetMapSize(1, 1);
359
    SetMapSize(1, 1);
365
    Image := mainform.ImageList.Items.Find('Star3');
360
    Image := mainform.ImageList.Items.Find('Star3');
366
    Z := -13;
361
    Z := -13;
367
    Y := 40;
362
    Y := 40;
368
    Tile := True;
363
    Tile := True;
369
  end;
364
  end;
370
  with TBackground.Create(SpriteEngine.Engine) do
365
  with TBackground.Create(SpriteEngine.Engine) do
371
  begin
366
  begin
372
    SetMapSize(1, 1);
367
    SetMapSize(1, 1);
373
    Image := mainform.ImageList.Items.Find('Star2');
368
    Image := mainform.ImageList.Items.Find('Star2');
374
    Z := -12;
369
    Z := -12;
375
    Y := 30;
370
    Y := 30;
376
    Tile := True;
371
    Tile := True;
377
  end;
372
  end;
378
  with TBackground.Create(SpriteEngine.Engine) do
373
  with TBackground.Create(SpriteEngine.Engine) do
379
  begin
374
  begin
380
    SetMapSize(1, 1);
375
    SetMapSize(1, 1);
381
    Image := mainform.ImageList.Items.Find('Star1');
376
    Image := mainform.ImageList.Items.Find('Star1');
382
    Z := -11;
377
    Z := -11;
383
    Y := 10;
378
    Y := 10;
384
    Tile := True;
379
    Tile := True;
385
  end;
380
  end;
386
  with TBackground.Create(SpriteEngine.Engine) do
381
  with TBackground.Create(SpriteEngine.Engine) do
387
  begin
382
  begin
388
    SetMapSize(1, 1);
383
    SetMapSize(1, 1);
389
    Image := mainform.ImageList.Items.Find('Matrix');
384
    Image := mainform.ImageList.Items.Find('Matrix');
390
    Z := -10;
385
    Z := -10;
391
    Tile := True;
386
    Tile := True;
392
  end;
387
  end;
393
  {with TBackground.Create(SpriteEngine.Engine) do
388
  {with TBackground.Create(SpriteEngine.Engine) do
394
  begin
389
  begin
395
    SetMapSize(200, 10);
390
    SetMapSize(200, 10);
396
    Y := 10;
391
    Y := 10;
397
    Z := -13;
392
    Z := -13;
398
    FSpeed := 1 / 2;
393
    FSpeed := 1 / 2;
399
    Tile := True;
394
    Tile := True;
400
    for i := 0 to MapHeight-1 do
395
    for i := 0 to MapHeight-1 do
401
    begin
396
    begin
402
      for j := 0 to MapWidth-1 do
397
      for j := 0 to MapWidth-1 do
403
      begin
398
      begin
404
        Chips[j, i] := Image.PatternCount-Random(Image.PatternCount div 8);
399
        Chips[j, i] := Image.PatternCount-Random(Image.PatternCount div 8);
405
        if Random(100)<95 then Chips[j, i] := -1;
400
        if Random(100)<95 then Chips[j, i] := -1;
406
      end;
401
      end;
407
    end;
402
    end;
408
  end;
403
  end;
409
  with TBackground.Create(SpriteEngine.Engine) do
404
  with TBackground.Create(SpriteEngine.Engine) do
410
  begin
405
  begin
411
    SetMapSize(200, 10);
406
    SetMapSize(200, 10);
412
    Y := 30;
407
    Y := 30;
413
    Z := -12;
408
    Z := -12;
414
    FSpeed := 1;
409
    FSpeed := 1;
415
    Tile := True;
410
    Tile := True;
416
    for i := 0 to MapHeight-1 do
411
    for i := 0 to MapHeight-1 do
417
    begin
412
    begin
418
      for j := 0 to MapWidth-1 do
413
      for j := 0 to MapWidth-1 do
419
      begin
414
      begin
420
        Chips[j, i] := Image.PatternCount-Random(Image.PatternCount div 4);
415
        Chips[j, i] := Image.PatternCount-Random(Image.PatternCount div 4);
421
        if Random(100)<95 then Chips[j, i] := -1;
416
        if Random(100)<95 then Chips[j, i] := -1;
422
      end;
417
      end;
423
    end;
418
    end;
424
  end;
419
  end;
425
  with TBackground.Create(SpriteEngine.Engine) do
420
  with TBackground.Create(SpriteEngine.Engine) do
426
  begin
421
  begin
427
    SetMapSize(200, 10);
422
    SetMapSize(200, 10);
428
    Y := 40;
423
    Y := 40;
429
    Z := -11;
424
    Z := -11;
430
    FSpeed := 2;
425
    FSpeed := 2;
431
    Tile := True;
426
    Tile := True;
432
    for i := 0 to MapHeight-1 do
427
    for i := 0 to MapHeight-1 do
433
    begin
428
    begin
434
      for j := 0 to MapWidth-1 do
429
      for j := 0 to MapWidth-1 do
435
      begin
430
      begin
436
        Chips[j, i] := Image.PatternCount-Random(Image.PatternCount div 2);
431
        Chips[j, i] := Image.PatternCount-Random(Image.PatternCount div 2);
437
        if Random(100)<95 then Chips[j, i] := -1;
432
        if Random(100)<95 then Chips[j, i] := -1;
438
      end;
433
      end;
439
    end;
434
    end;
440
  end;}
435
  end;}
441
  PalleteAnim(RGBQuad(0, 0, 0), 300);
436
  PalleteAnim(RGBQuad(0, 0, 0), 300);
442
  mainform.Visible := true;
437
  mainform.Visible := true;
443
end;
438
end;
444
 
-
 
445
procedure TMainForm.MitarbeiterClick(Sender: TObject);
-
 
446
begin
-
 
447
  if not fileexists(fdirectory+'Texte\Mitwirkende.txt') then
-
 
448
  begin
-
 
449
    MessageDLG('Die Datei "Texte\Mitwirkende.txt" ist nicht mehr vorhanden. Die Aktion wird abgebrochen!',
-
 
450
      mtWarning, [mbOK], 0);
-
 
451
    exit;
-
 
452
  end;
-
 
453
 
-
 
454
  TextForm.memo1.lines.loadfromfile(FDirectory+'Texte\Mitwirkende.txt');
-
 
455
  mainform.dxtimer.enabled := false;
-
 
456
  TextForm.showmodal;
-
 
457
  mainform.dxtimer.enabled := true;
-
 
458
end;
-
 
459
 
439
 
460
procedure TMainForm.LevelClick(Sender: TObject);
440
procedure TMainForm.LevelClick(Sender: TObject);
461
begin
441
begin
462
  speicherungform.showmodal;
442
  speicherungform.showmodal;
463
end;
443
end;
464
 
444
 
465
procedure TMainForm.FormShow(Sender: TObject);
445
procedure TMainForm.FormShow(Sender: TObject);
466
begin
446
begin
467
  SplashForm.Hide;
447
  SplashForm.Hide;
468
  SplashForm.Free;
448
  SplashForm.Free;
469
 
449
 
470
  dxtimer.Enabled := true;
450
  dxtimer.Enabled := true;
471
  dxtimer.ActiveOnly := true;
451
  dxtimer.ActiveOnly := true;
472
end;
452
end;
473
 
453
 
474
procedure TMainForm.InformationenClick(Sender: TObject);
454
procedure TMainForm.InformationenClick(Sender: TObject);
475
begin
455
begin
476
  mainform.dxtimer.enabled := false;
456
  mainform.dxtimer.enabled := false;
477
  InfoForm.showmodal;
457
  InfoForm.showmodal;
478
  mainform.dxtimer.enabled := true;
458
  mainform.dxtimer.enabled := true;
479
end;
459
end;
480
 
460
 
481
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
461
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
482
begin
462
begin
483
  SpriteEngine.Engine.Clear;
463
  SpriteEngine.Engine.Clear;
484
  DXTimer.Enabled := False;
464
  DXTimer.Enabled := False;
485
end;
465
end;
486
 
466
 
487
procedure TMainForm.DXDrawMouseDown(Sender: TObject; Button: TMouseButton;
467
procedure TMainForm.DXDrawMouseDown(Sender: TObject; Button: TMouseButton;
488
  Shift: TShiftState; X, Y: Integer);
468
  Shift: TShiftState; X, Y: Integer);
489
var
469
var
490
  i, j, k, l, ex, ey: integer;
470
  i, j, k, l, ex, ey: integer;
491
  ok, breaked: boolean;
471
  ok, breaked: boolean;
492
begin
472
begin
493
  ex := trunc(x/RasterW) * RasterW;
473
  ex := trunc(x/RasterW) * RasterW;
494
  ey := trunc(y/RasterH) * RasterH;
474
  ey := trunc(y/RasterH) * RasterH;
495
  EnemyCreate(ex, ey);
475
  EnemyCreate(ex, ey);
496
  breaked := false;
476
  breaked := false;
497
  { Setzen }
477
  { Setzen }
498
  if Button = mbLeft then
478
  if Button = mbLeft then
499
  begin
479
  begin
500
    ok := true;
480
    ok := true;
501
    if (ArtChecked = 7) and boss then ok := false
481
    if (ArtChecked = 7) and boss then ok := false
502
    else
482
    else
503
    begin
483
    begin
504
      for i := 1 to 7 do
484
      for i := 1 to 7 do
505
      begin
485
      begin
506
        for j := 0 to 999 do
486
        for j := 0 to 999 do
507
        begin
487
        begin
508
          if boss then
488
          if boss then
509
          begin
489
          begin
510
            for k := 0 to 3 do
490
            for k := 0 to 3 do
511
            begin
491
            begin
512
              for l := 0 to 1 do
492
              for l := 0 to 1 do
513
              begin
493
              begin
514
                if Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':7('+inttostr(j)+')') <> -1 then
494
                if Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':7('+inttostr(j)+')') <> -1 then
515
                begin
495
                begin
516
                  ok := false;
496
                  ok := false;
517
                  break;
497
                  break;
518
                end;
498
                end;
519
              end;
499
              end;
520
              if not ok then break;
500
              if not ok then break;
521
            end;
501
            end;
522
            if not ok then break;
502
            if not ok then break;
523
          end;
503
          end;
524
          if Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
504
          if Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
525
            inttostr(i)+'('+inttostr(j)+')') <> -1 then
505
            inttostr(i)+'('+inttostr(j)+')') <> -1 then
526
          begin
506
          begin
527
            ok := false;
507
            ok := false;
528
            break;
508
            break;
529
          end;
509
          end;
530
        end;
510
        end;
531
        if not ok then break;
511
        if not ok then break;
532
      end;
512
      end;
533
    end;
513
    end;
534
    if ok then
514
    if ok then
535
    begin
515
    begin
536
      if ArtChecked <> 4 then
516
      if ArtChecked <> 4 then
537
        Enemys.Add(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
517
        Enemys.Add(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
538
          inttostr(ArtChecked)+'('+inttostr(LiveEdit)+')')
518
          inttostr(ArtChecked)+'('+inttostr(LiveEdit)+')')
539
      else
519
      else
540
        Enemys.Add(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
520
        Enemys.Add(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
541
          inttostr(ArtChecked)+'(0)');
521
          inttostr(ArtChecked)+'(0)');
542
      inc(NumEnemys);
522
      inc(NumEnemys);
543
      if ArtChecked = 7 then boss := true;
523
      if ArtChecked = 7 then boss := true;
544
    end
524
    end
545
    else beep;
525
    else beep;
546
  end
526
  end
547
  { Löschen }
527
  { Löschen }
548
  else if Button = mbRight then
528
  else if Button = mbRight then
549
  begin
529
  begin
550
    for i := 1 to 7 do
530
    for i := 1 to 7 do
551
    begin
531
    begin
552
      for j := 0 to 999 do
532
      for j := 0 to 999 do
553
      begin
533
      begin
554
        if boss and (i = 7) then
534
        if boss and (i = 7) then
555
        begin
535
        begin
556
          for k := 0 to 3 do
536
          for k := 0 to 3 do
557
          begin
537
          begin
558
            for l := 0 to 1 do
538
            for l := 0 to 1 do
559
            begin
539
            begin
560
              if Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':'+inttostr(i)+'('+inttostr(j)+')') <> -1 then
540
              if Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':'+inttostr(i)+'('+inttostr(j)+')') <> -1 then
561
              begin
541
              begin
562
                Enemys.Delete(Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':'+inttostr(i)+'('+inttostr(j)+')'));
542
                Enemys.Delete(Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':'+inttostr(i)+'('+inttostr(j)+')'));
563
                Boss := false;
543
                Boss := false;
564
                dec(NumEnemys);
544
                dec(NumEnemys);
565
                breaked := true;
545
                breaked := true;
566
                break;
546
                break;
567
              end;
547
              end;
568
            end;
548
            end;
569
            if breaked then break;
549
            if breaked then break;
570
          end;
550
          end;
571
        end;
551
        end;
572
        if Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
552
        if Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
573
          inttostr(i)+'('+inttostr(j)+')') <> -1 then
553
          inttostr(i)+'('+inttostr(j)+')') <> -1 then
574
        begin
554
        begin
575
          Enemys.Delete(Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+
555
          Enemys.Delete(Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+
576
            ':'+inttostr(i)+'('+inttostr(j)+')'));
556
            ':'+inttostr(i)+'('+inttostr(j)+')'));
577
          if i = 7 then Boss := false;
557
          if i = 7 then Boss := false;
578
          dec(NumEnemys);
558
          dec(NumEnemys);
579
          breaked := true;
559
          breaked := true;
580
          break;
560
          break;
581
        end;
561
        end;
582
      end;
562
      end;
583
      if breaked then break;
563
      if breaked then break;
584
    end;
564
    end;
585
  end;
565
  end;
586
  LevChanged := true;
566
  LevChanged := true;
587
  AnzeigeAct;
567
  AnzeigeAct;
588
end;
568
end;
589
 
569
 
590
procedure TMainForm.EnemyClick(Sender: TObject);
570
procedure TMainForm.EnemyClick(Sender: TObject);
591
begin
571
begin
592
  if sender = Enemy1 then ArtChecked := 1;
572
  if sender = Enemy1 then ArtChecked := 1;
593
  if sender = Enemy2 then ArtChecked := 2;
573
  if sender = Enemy2 then ArtChecked := 2;
594
  if sender = Enemy3 then ArtChecked := 3;
574
  if sender = Enemy3 then ArtChecked := 3;
595
  if sender = Enemy4 then ArtChecked := 4;
575
  if sender = Enemy4 then ArtChecked := 4;
596
  if sender = Enemy5 then ArtChecked := 5;
576
  if sender = Enemy5 then ArtChecked := 5;
597
  if sender = Enemy6 then ArtChecked := 6;
577
  if sender = Enemy6 then ArtChecked := 6;
598
  if sender = Enemy7 then ArtChecked := 7;
578
  if sender = Enemy7 then ArtChecked := 7;
599
  Image1.Left := -(87 * (ArtChecked - 1)) + 1;
579
  Image1.Left := -(87 * (ArtChecked - 1)) + 1;
600
  Lives.Enabled := sender <> Enemy4;
580
  Lives.Enabled := sender <> Enemy4;
601
  LivesLabel.Enabled := sender <> Enemy4;
581
  LivesLabel.Enabled := sender <> Enemy4;
602
  if sender = Enemy4 then LivesEdt.Font.Color := clBtnShadow // andere farbe?
582
  if sender = Enemy4 then LivesEdt.Font.Color := clBtnShadow // andere farbe?
603
    else LivesEdt.Font.Color := clWindowText;
583
    else LivesEdt.Font.Color := clWindowText;
604
end;
584
end;
605
 
585
 
606
procedure TMainForm.EnemyCreate(x, y: integer);
586
procedure TMainForm.EnemyCreate(x, y: integer);
607
var
587
var
608
  Enemy: TSprite;
588
  Enemy: TSprite;
609
begin
589
begin
610
  Enemy := TEnemy.Create(SpriteEngine.Engine);
590
  Enemy := TEnemy.Create(SpriteEngine.Engine);
611
  Enemy.x := x;
591
  Enemy.x := x;
612
  Enemy.y := y;
592
  Enemy.y := y;
613
end;
593
end;
614
 
594
 
615
procedure TMainForm.DestroyLevel;
595
procedure TMainForm.DestroyLevel;
616
begin
596
begin
617
  ScrollBar.Position := 0;
597
  ScrollBar.Position := 0;
618
  Enemys.Clear;
598
  Enemys.Clear;
619
  NumEnemys := 0;
599
  NumEnemys := 0;
620
  Boss := false;
600
  Boss := false;
621
  LevChanged := true;
601
  LevChanged := true;
622
  Lives.Position := 1;
602
  Lives.Position := 1;
623
  LivesChange(Lives.Position);
603
  LivesChange(Lives.Position);
624
  Enemy1.Checked := true;
604
  Enemy1.Checked := true;
625
  EnemyClick(Enemy1);
605
  EnemyClick(Enemy1);
626
  AnzeigeAct;
606
  AnzeigeAct;
627
end;
607
end;
628
 
608
 
629
procedure TMainForm.AnzeigeAct;
609
procedure TMainForm.AnzeigeAct;
630
begin
610
begin
631
  SLabel1b.Caption := inttostr(NumEnemys);
611
  SLabel1b.Caption := inttostr(NumEnemys);
632
  if Boss then SLabel2b.Caption := 'Ja' else SLabel2b.Caption := 'Nein';
612
  if Boss then SLabel2b.Caption := 'Ja' else SLabel2b.Caption := 'Nein';
633
  SLabel3b.Caption := inttostr(ScrollBar.Max);
613
  SLabel3b.Caption := inttostr(ScrollBar.Max);
634
  if LevChanged then
614
  if LevChanged then
635
  begin
615
  begin
636
    SLabel4a.Font.Color := $00000096;
616
    SLabel4a.Font.Color := $00000096;
637
    SLabel4b.Font.Color := $00000096;
617
    SLabel4b.Font.Color := $00000096;
638
    SLabel4b.Caption := 'Nein';
618
    SLabel4b.Caption := 'Nein';
639
  end
619
  end
640
  else
620
  else
641
  begin
621
  begin
642
    SLabel4a.Font.Color := $00009600;
622
    SLabel4a.Font.Color := $00009600;
643
    SLabel4b.Font.Color := $00009600;
623
    SLabel4b.Font.Color := $00009600;
644
    SLabel4b.Caption := 'Ja';
624
    SLabel4b.Caption := 'Ja';
645
  end;
625
  end;
646
end;
626
end;
647
 
627
 
648
procedure TMainForm.EnemyAdd(x, y, art, lives: integer);
628
procedure TMainForm.EnemyAdd(x, y, art, lives: integer);
649
begin
629
begin
650
  Enemys.Add(inttostr(x)+'-'+inttostr(y)+':'+inttostr(art)+'('+inttostr(lives)+')');
630
  Enemys.Add(inttostr(x)+'-'+inttostr(y)+':'+inttostr(art)+'('+inttostr(lives)+')');
651
end;
631
end;
652
 
632
 
653
procedure TMainForm.NeuClick(Sender: TObject);
633
procedure TMainForm.NeuClick(Sender: TObject);
654
begin
634
begin
655
  if MessageDlg('Level wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
635
  if MessageDlg('Level wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
656
    DestroyLevel;
636
    DestroyLevel;
657
end;
637
end;
658
 
638
 
659
procedure TMainForm.DXDrawMouseMove(Sender: TObject; Shift: TShiftState; X,
639
procedure TMainForm.DXDrawMouseMove(Sender: TObject; Shift: TShiftState; X,
660
  Y: Integer);
640
  Y: Integer);
661
var
641
var
662
  ex, ey, i, j, k, l, wert: integer;
642
  ex, ey, i, j, k, l, wert: integer;
663
  breaked: boolean;
643
  breaked: boolean;
664
begin
644
begin
665
  if sender <> DxDraw then
645
  if sender <> DxDraw then
666
  begin
646
  begin
667
    StatusBar.SimpleText := status_info;
647
    StatusBar.SimpleText := status_info;
668
    exit;
648
    exit;
669
  end;
649
  end;
670
  ex := trunc(x/RasterW) * RasterW;
650
  ex := trunc(x/RasterW) * RasterW;
671
  ey := trunc(y/RasterH) * RasterH;
651
  ey := trunc(y/RasterH) * RasterH;
672
  wert := -1;
652
  wert := -1;
673
  breaked := false;
653
  breaked := false;
674
  for i := 1 to 7 do
654
  for i := 1 to 7 do
675
  begin
655
  begin
676
    for j := 0 to 999 do
656
    for j := 0 to 999 do
677
    begin
657
    begin
678
      if boss and (i = 7) then
658
      if boss and (i = 7) then
679
      begin
659
      begin
680
        for k := 0 to 3 do
660
        for k := 0 to 3 do
681
        begin
661
        begin
682
          for l := 0 to 1 do
662
          for l := 0 to 1 do
683
          begin
663
          begin
684
            if Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':'+inttostr(i)+'('+inttostr(j)+')') <> -1 then
664
            if Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':'+inttostr(i)+'('+inttostr(j)+')') <> -1 then
685
            begin
665
            begin
686
              wert := j;
666
              wert := j;
687
              breaked := true;
667
              breaked := true;
688
              break;
668
              break;
689
            end;
669
            end;
690
          end;
670
          end;
691
          if breaked then break;
671
          if breaked then break;
692
        end;
672
        end;
693
      end;
673
      end;
694
      if (breaked = false) and (Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
674
      if (breaked = false) and (Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
695
        inttostr(i)+'('+inttostr(j)+')') <> -1) then
675
        inttostr(i)+'('+inttostr(j)+')') <> -1) then
696
      begin
676
      begin
697
        wert := j;
677
        wert := j;
698
        breaked := true;
678
        breaked := true;
699
        break;
679
        break;
700
      end;
680
      end;
701
    end;
681
    end;
702
    if breaked then break;
682
    if breaked then break;
703
  end;
683
  end;
704
  if wert <> -1 then
684
  if wert <> -1 then
705
  begin
685
  begin
706
    if wert > 0 then
686
    if wert > 0 then
707
      StatusBar.SimpleText := status_lives + inttostr(wert)
687
      StatusBar.SimpleText := status_lives + inttostr(wert)
708
    else
688
    else
709
      StatusBar.SimpleText := status_nolives;
689
      StatusBar.SimpleText := status_nolives;
710
  end
690
  end
711
  else
691
  else
712
    StatusBar.SimpleText := status_info;
692
    StatusBar.SimpleText := status_info;
713
end;
693
end;
714
 
694
 
715
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
695
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
716
begin
696
begin
717
  if LevChanged then
697
  if LevChanged then
718
    CanClose := MessageDlg('Beenden ohne abspeichern?', mtConfirmation, [mbYes, mbNo], 0) = mrYes;
698
    CanClose := MessageDlg('Beenden ohne abspeichern?', mtConfirmation, [mbYes, mbNo], 0) = mrYes;
719
end;
699
end;
720
 
700
 
721
procedure TMainForm.Quelltext1Click(Sender: TObject);
701
procedure TMainForm.Quelltext1Click(Sender: TObject);
722
begin
702
begin
723
  SourceForm.Aktualisieren;
703
  SourceForm.Aktualisieren;
724
  SourceForm.showmodal;
704
  SourceForm.showmodal;
725
end;
705
end;
726
 
706
 
727
procedure TMainForm.Spielfelderweitern1Click(Sender: TObject);
707
procedure TMainForm.Spielfelderweitern1Click(Sender: TObject);
728
begin
708
begin
729
  LevelForm.Aktualisieren;
709
  LevelForm.Aktualisieren;
730
  LevelForm.showmodal;
710
  LevelForm.showmodal;
731
end;
711
end;
732
 
712
 
733
procedure TMainForm.ScrollBarScroll(Sender: TObject;
713
procedure TMainForm.ScrollBarScroll(Sender: TObject;
734
  ScrollCode: TScrollCode; var ScrollPos: Integer);
714
  ScrollCode: TScrollCode; var ScrollPos: Integer);
735
begin
715
begin
736
  ScrollP := ScrollPos;
716
  ScrollP := ScrollPos;
737
end;
717
end;
738
 
718
 
739
procedure TMainForm.LivesChange(newval: integer);
719
procedure TMainForm.LivesChange(newval: integer);
740
begin
720
begin
741
  LiveEdit := newval;
721
  LiveEdit := newval;
742
  livesedt.Text := inttostr(LiveEdit);
722
  livesedt.Text := inttostr(LiveEdit);
743
  lives.Position := newval;
723
  lives.Position := newval;
744
end;
724
end;
745
 
725
 
746
procedure TMainForm.LivesClick(Sender: TObject; Button: TUDBtnType);
726
procedure TMainForm.LivesClick(Sender: TObject; Button: TUDBtnType);
747
begin
727
begin
748
  LivesChange(lives.Position);
728
  LivesChange(lives.Position);
749
end;
729
end;
750
 
730
 
751
procedure TMainForm.LivesEdtKeyPress(Sender: TObject; var Key: Char);
731
procedure TMainForm.LivesEdtKeyPress(Sender: TObject; var Key: Char);
752
begin
732
begin
753
  if not (Key in [#13, #08, '0'..'9']) then
733
  if not (Key in [#13, #08, '0'..'9']) then
754
    Key := #0;
734
    Key := #0;
755
end;
735
end;
756
 
736
 
757
procedure TMainForm.LivesEdtChange(Sender: TObject);
737
procedure TMainForm.LivesEdtChange(Sender: TObject);
758
begin
738
begin
759
  LivesChange(strtoint(livesedt.text));
739
  LivesChange(strtoint(livesedt.text));
760
end;
740
end;
761
 
741
 
762
end.
742
end.
763
 
743
 
764
 
744