Rev 71 | Rev 74 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 71 | Rev 72 | ||
---|---|---|---|
Line 50... | Line 50... | ||
50 | procedure DoMove(MoveCount: Integer); override; |
50 | procedure DoMove(MoveCount: Integer); override; |
51 | public |
51 | public |
52 | constructor Create(AParent: TSprite); override; |
52 | constructor Create(AParent: TSprite); override; |
53 | end; |
53 | end; |
54 | 54 | ||
55 | TPlayerOrEnemyState = ( |
55 | TPlayerOrEnemyOrItemState = ( |
56 | pesUnknown, |
56 | pesUnknown, |
57 | pesNormal, |
57 | pesNormal, |
58 | pesExploding, // only boss, as preparation of pesDead |
58 | pesExploding, // only boss, as preparation of pesDead |
59 | pesDead, |
59 | pesDead, |
60 | pesDeadVanished, |
60 | pesDeadVanished, |
61 | pesFlyaway, // only player at mission end |
61 | pesFlyaway, // only player at mission end |
62 | pesEntering, |
62 | pesEntering, |
63 | pesHovering // only some kind of enemies |
63 | pesHovering // only some kind of enemies |
64 | ); |
64 | ); |
65 | 65 | ||
66 | TPlayerOrEnemy = class abstract (TImageSprite) |
66 | TPlayerOrEnemyOrItem = class abstract (TImageSprite) |
67 | strict protected |
67 | strict protected |
68 | State: TPlayerOrEnemyState; |
68 | State: TPlayerOrEnemyOrItemState; |
69 | end; |
69 | end; |
70 | 70 | ||
71 | TPlayerSprite = class(TPlayerOrEnemy) |
71 | TPlayerSprite = class(TPlayerOrEnemyOrItem) |
72 | private |
72 | private |
73 | FTamaCount: Integer; // accessed by TPlayerTamaSprite.Destroy |
73 | FTamaCount: Integer; // accessed by TPlayerTamaSprite.Destroy |
74 | strict private |
74 | strict private |
75 | FCounter: Integer; |
75 | FCounter: Integer; |
76 | FOldTamaTime: Integer; |
76 | FOldTamaTime: Integer; |
Line 93... | Line 93... | ||
93 | constructor Create(AParent: TSprite; APlayerSprite: TPlayerSprite); reintroduce; |
93 | constructor Create(AParent: TSprite; APlayerSprite: TPlayerSprite); reintroduce; |
94 | destructor Destroy; override; |
94 | destructor Destroy; override; |
95 | end; |
95 | end; |
96 | 96 | ||
97 | TEnemyClass = class of TEnemy; |
97 | TEnemyClass = class of TEnemy; |
98 | TEnemy = class abstract (TPlayerOrEnemy) |
98 | TEnemy = class abstract (TPlayerOrEnemyOrItem) |
99 | strict protected |
99 | strict protected |
100 | FCounter: Integer; |
100 | FCounter: Integer; |
101 | FLife: integer; |
101 | FLife: integer; |
102 | procedure HitEnemy(ADead: Boolean); virtual; |
102 | procedure HitEnemy(ADead: Boolean); virtual; |
103 | public |
103 | public |
Line 190... | Line 190... | ||
190 | procedure HitEnemy(ADead: Boolean); override; |
190 | procedure HitEnemy(ADead: Boolean); override; |
191 | public |
191 | public |
192 | constructor Create(AParent: TSprite; ALifes: integer); override; |
192 | constructor Create(AParent: TSprite; ALifes: integer); override; |
193 | end; |
193 | end; |
194 | 194 | ||
- | 195 | TItemClass = class of TItem; |
|
- | 196 | TItem = class abstract (TPlayerOrEnemyOrItem) |
|
- | 197 | strict protected |
|
- | 198 | procedure DoMove(MoveCount: Integer); override; |
|
- | 199 | public |
|
- | 200 | procedure Collected; virtual; |
|
- | 201 | end; |
|
- | 202 | ||
- | 203 | TItemMedikit = class(TItem) |
|
- | 204 | public |
|
- | 205 | procedure Collected; override; |
|
- | 206 | constructor Create(AParent: TSprite); override; |
|
- | 207 | end; |
|
- | 208 | ||
195 | TMainForm = class(TDXForm) |
209 | TMainForm = class(TDXForm) |
196 | MainMenu: TMainMenu; |
210 | MainMenu: TMainMenu; |
197 | Spiel: TMenuItem; |
211 | Spiel: TMenuItem; |
198 | GameStart: TMenuItem; |
212 | GameStart: TMenuItem; |
199 | GamePause: TMenuItem; |
213 | GamePause: TMenuItem; |
Line 471... | Line 485... | ||
471 | end; |
485 | end; |
472 | 486 | ||
473 | procedure TPlayerSprite.DoCollision(Sprite: TSprite; var Done: Boolean); |
487 | procedure TPlayerSprite.DoCollision(Sprite: TSprite; var Done: Boolean); |
474 | begin |
488 | begin |
475 | if mainform.FCheat then exit; |
489 | if mainform.FCheat then exit; |
- | 490 | if (Sprite is TItem) then |
|
- | 491 | begin |
|
- | 492 | TItem(Sprite).Collected; |
|
- | 493 | end |
|
476 | if (Sprite is TEnemy) or (Sprite is TEnemyTama) then |
494 | else if (Sprite is TEnemy) or (Sprite is TEnemyTama) then |
477 | begin |
495 | begin |
478 | if not mainform.crash then |
496 | if not mainform.crash then |
479 | begin |
497 | begin |
480 | dec(MainForm.FLife); |
498 | dec(MainForm.FLife); |
481 | mainform.Crash := true; |
499 | mainform.Crash := true; |
Line 1172... | Line 1190... | ||
1172 | end; |
1190 | end; |
1173 | end; |
1191 | end; |
1174 | inc(FCounter, MoveCount); |
1192 | inc(FCounter, MoveCount); |
1175 | end; |
1193 | end; |
1176 | 1194 | ||
- | 1195 | { TItem } |
|
- | 1196 | ||
- | 1197 | procedure TItem.Collected; |
|
- | 1198 | begin |
|
- | 1199 | MainForm.PlaySound(smsItemCollected, false); |
|
- | 1200 | Dead; |
|
- | 1201 | end; |
|
- | 1202 | ||
- | 1203 | procedure TItem.DoMove(MoveCount: Integer); |
|
- | 1204 | begin |
|
- | 1205 | X := X - MoveCount*(250/1000); |
|
- | 1206 | if X < -Width then Dead; |
|
- | 1207 | end; |
|
- | 1208 | ||
- | 1209 | { TItemMedikit } |
|
- | 1210 | ||
- | 1211 | procedure TItemMedikit.Collected; |
|
- | 1212 | begin |
|
- | 1213 | Inc(MainForm.FLife); |
|
- | 1214 | inherited; |
|
- | 1215 | end; |
|
- | 1216 | ||
- | 1217 | constructor TItemMedikit.Create(AParent: TSprite); |
|
- | 1218 | begin |
|
- | 1219 | inherited Create(AParent); |
|
- | 1220 | State := pesNormal; |
|
- | 1221 | Image := MainForm.GetSpriteGraphic(smgItemMedikit); |
|
- | 1222 | Width := Image.Width; |
|
- | 1223 | Height := Image.Height; |
|
- | 1224 | AnimCount := Image.PatternCount; |
|
- | 1225 | AnimLooped := True; |
|
- | 1226 | AnimSpeed := DEFAULT_ANIMSPEED; |
|
- | 1227 | PixelCheck := True; |
|
- | 1228 | end; |
|
- | 1229 | ||
1177 | { TMainForm } |
1230 | { TMainForm } |
1178 | 1231 | ||
1179 | procedure TMainForm.FormCreate(Sender: TObject); |
1232 | procedure TMainForm.FormCreate(Sender: TObject); |
1180 | begin |
1233 | begin |
1181 | Randomize; |
1234 | Randomize; |
Line 1799... | Line 1852... | ||
1799 | var |
1852 | var |
1800 | act: integer; |
1853 | act: integer; |
1801 | Enemies: array[1..27] of TEnemyType; |
1854 | Enemies: array[1..27] of TEnemyType; |
1802 | numEnemies: integer; |
1855 | numEnemies: integer; |
1803 | e: TEnemyAdvent; |
1856 | e: TEnemyAdvent; |
1804 | bossPosition: integer; |
1857 | bossPosition, medikitPosition: integer; |
1805 | levFile: TLevelFile; |
1858 | levFile: TLevelFile; |
1806 | begin |
1859 | begin |
1807 | ResetLevelData; |
1860 | ResetLevelData; |
1808 | if FGameMode = gmRandom then |
1861 | if FGameMode = gmRandom then |
1809 | begin |
1862 | begin |
Line 1891... | Line 1944... | ||
1891 | e.x := LevelData.EnemyAdventTable[bossPosition-1].x; |
1944 | e.x := LevelData.EnemyAdventTable[bossPosition-1].x; |
1892 | e.y := (dxdraw.surfaceheight div 2) - (MainForm.GetSpriteGraphic(smgEnemyBoss).height div 2); |
1945 | e.y := (dxdraw.surfaceheight div 2) - (MainForm.GetSpriteGraphic(smgEnemyBoss).height div 2); |
1893 | e.lifes := lev*5; |
1946 | e.lifes := lev*5; |
1894 | LevelData.EnemyAdventTable[bossPosition] := e; |
1947 | LevelData.EnemyAdventTable[bossPosition] := e; |
1895 | end; |
1948 | end; |
- | 1949 | ||
- | 1950 | medikitPosition := 0; |
|
- | 1951 | LevelData.EnemyAdventTable[medikitPosition].enemyType := etItemMedikit; |
|
- | 1952 | LevelData.EnemyAdventTable[medikitPosition].lifes := 0; |
|
- | 1953 | ||
1896 | {$ENDREGION} |
1954 | {$ENDREGION} |
1897 | end |
1955 | end |
1898 | else |
1956 | else |
1899 | begin |
1957 | begin |
1900 | {$REGION 'Normal game'} |
1958 | {$REGION 'Normal game'} |
Line 2048... | Line 2106... | ||
2048 | end; |
2106 | end; |
2049 | 2107 | ||
2050 | procedure TMainForm.SceneMain; |
2108 | procedure TMainForm.SceneMain; |
2051 | var |
2109 | var |
2052 | Enemy: TSprite; |
2110 | Enemy: TSprite; |
2053 | spriteClass: TEnemyClass; |
2111 | spriteClass: TClass; |
2054 | tmpEnemyAnzeige: integer; |
2112 | tmpEnemyAnzeige: integer; |
2055 | begin |
2113 | begin |
2056 | case FInterval of |
2114 | case FInterval of |
2057 | giLeicht: SpriteEngine.Move(conleicht); |
2115 | giLeicht: SpriteEngine.Move(conleicht); |
2058 | giMittel: SpriteEngine.Move(conmittel); |
2116 | giMittel: SpriteEngine.Move(conmittel); |
Line 2076... | Line 2134... | ||
2076 | etEnemyAttacker3: spriteClass := TEnemyAttacker3; |
2134 | etEnemyAttacker3: spriteClass := TEnemyAttacker3; |
2077 | etEnemyMeteor: spriteClass := TEnemyMeteor; |
2135 | etEnemyMeteor: spriteClass := TEnemyMeteor; |
2078 | etEnemyUFO: spriteClass := TEnemyUFO; |
2136 | etEnemyUFO: spriteClass := TEnemyUFO; |
2079 | etEnemyUFO2: spriteClass := TEnemyUFO2; |
2137 | etEnemyUFO2: spriteClass := TEnemyUFO2; |
2080 | etEnemyBoss: spriteClass := TEnemyBoss; |
2138 | etEnemyBoss: spriteClass := TEnemyBoss; |
- | 2139 | etItemMedikit: spriteClass := TItemMedikit; |
|
2081 | end; |
2140 | end; |
2082 | if spriteClass <> nil then |
2141 | if spriteClass <> nil then |
2083 | begin |
2142 | begin |
- | 2143 | Enemy := nil; |
|
- | 2144 | if spriteClass.InheritsFrom(TEnemy) then |
|
2084 | Enemy := spriteClass.Create(SpriteEngine.Engine, lifes); |
2145 | Enemy := TEnemyClass(spriteClass).Create(SpriteEngine.Engine, lifes) |
- | 2146 | else if spriteClass.InheritsFrom(TItem) then |
|
- | 2147 | Enemy := TItemClass(spriteClass).Create(SpriteEngine.Engine) |
|
- | 2148 | else |
|
- | 2149 | Assert(False); |
|
2085 | Enemy.x := dxdraw.surfacewidth; |
2150 | Enemy.x := dxdraw.surfacewidth; |
2086 | //Enemy.y := y; |
2151 | //Enemy.y := y; |
2087 | if y <> 0 then |
2152 | if y <> 0 then |
2088 | Enemy.y := dxdraw.surfaceheight / (480{maximale Bandbreite im alten Format} / y) |
2153 | Enemy.y := dxdraw.surfaceheight / (480{maximale Bandbreite im alten Format} / y) |
2089 | else |
2154 | else |