Subversion Repositories spacemission

Rev

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

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