130 exit(@SpritesData[GetSprite(sprite, SDsprite)]); |
130 exit(@SpritesData[GetSprite(sprite, SDsprite)]); |
131 end; |
131 end; |
132 |
132 |
133 procedure DrawVisualGears(Layer: LongWord); |
133 procedure DrawVisualGears(Layer: LongWord); |
134 var Gear: PVisualGear; |
134 var Gear: PVisualGear; |
135 tinted: boolean; |
135 tinted, speedlessFlakes: boolean; |
136 tmp: real; |
136 tmp: real; |
137 i: LongInt; |
137 i: LongInt; |
138 sprite: TSprite; |
138 sprite: TSprite; |
139 spriteData: PSpriteData; |
139 spriteData: PSpriteData; |
140 begin |
140 begin |
|
141 if SuddenDeathDmg then |
|
142 speedlessFlakes:= (vobSDVelocity = 0) |
|
143 else |
|
144 speedlessFlakes:= (vobVelocity = 0); |
|
145 |
141 case Layer of |
146 case Layer of |
142 // this layer is very distant in the background when stereo |
147 // this layer is very distant in the background when stereo |
143 0: begin |
148 0: begin |
144 Gear:= VisualGearLayers[0]; |
149 Gear:= VisualGearLayers[0]; |
145 while Gear <> nil do |
150 while Gear <> nil do |
152 end; |
157 end; |
153 vgtFlake: begin |
158 vgtFlake: begin |
154 sprite:= GetSprite(sprFlake, sprSDFlake); |
159 sprite:= GetSprite(sprFlake, sprSDFlake); |
155 if cFlattenFlakes then |
160 if cFlattenFlakes then |
156 begin |
161 begin |
157 if vobSDVelocity = 0 then |
162 if speedlessFlakes then |
158 DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
163 DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
159 else |
164 else |
160 DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle); |
165 DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle); |
161 end |
166 end |
162 else |
167 else |
163 begin |
168 begin |
164 if vobSDVelocity = 0 then |
169 if speedlessFlakes then |
165 DrawTextureF(SpritesData[sprite].Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height) |
170 DrawTextureF(SpritesData[sprite].Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height) |
166 else |
171 else |
167 DrawTextureRotatedF(SpritesData[sprite].Texture, Gear^.Scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height, Gear^.Angle); |
172 DrawTextureRotatedF(SpritesData[sprite].Texture, Gear^.Scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height, Gear^.Angle); |
168 end; |
173 end; |
169 end; |
174 end; |
182 if Gear^.Tint <> $FFFFFFFF then |
187 if Gear^.Tint <> $FFFFFFFF then |
183 Tint(Gear^.Tint); |
188 Tint(Gear^.Tint); |
184 case Gear^.Kind of |
189 case Gear^.Kind of |
185 vgtFlake: begin |
190 vgtFlake: begin |
186 sprite:= GetSprite(sprFlake, sprSDFlake); |
191 sprite:= GetSprite(sprFlake, sprSDFlake); |
187 if vobSDVelocity = 0 then |
192 if speedlessFlakes then |
188 DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
193 DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
189 else |
194 else |
190 DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle); |
195 DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle); |
191 end; |
196 end; |
192 vgtSmokeTrace: if Gear^.State < 8 then |
197 vgtSmokeTrace: if Gear^.State < 8 then |
244 Tint(Gear^.Tint); |
249 Tint(Gear^.Tint); |
245 case Gear^.Kind of |
250 case Gear^.Kind of |
246 (* |
251 (* |
247 vgtFlake: begin |
252 vgtFlake: begin |
248 sprite:= GetSprite(sprFlake, sprSDFlake); |
253 sprite:= GetSprite(sprFlake, sprSDFlake); |
249 if vobSDVelocity = 0 then |
254 if speedlessFlakes then |
250 DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
255 DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
251 else |
256 else |
252 DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle) |
257 DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle) |
253 end;*) |
258 end;*) |
254 vgtSpeechBubble: begin |
259 vgtSpeechBubble: begin |
354 vgtBulletHit: DrawSpriteRotatedF(sprBulletHit, round(Gear^.X) + WorldDx - 0, round(Gear^.Y) + WorldDy - 0, 7 - (Gear^.FrameTicks div 50), 1, Gear^.Angle); |
359 vgtBulletHit: DrawSpriteRotatedF(sprBulletHit, round(Gear^.X) + WorldDx - 0, round(Gear^.Y) + WorldDy - 0, 7 - (Gear^.FrameTicks div 50), 1, Gear^.Angle); |
355 end; |
360 end; |
356 case Gear^.Kind of |
361 case Gear^.Kind of |
357 vgtFlake: begin |
362 vgtFlake: begin |
358 spriteData:= GetSpriteData(sprFlake, sprSDFlake); |
363 spriteData:= GetSpriteData(sprFlake, sprSDFlake); |
359 if vobSDVelocity = 0 then |
364 if speedlessFlakes then |
360 DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height) |
365 DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height) |
361 else |
366 else |
362 DrawTextureRotatedF(spriteData^.Texture, Gear^.Scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height, Gear^.Angle); |
367 DrawTextureRotatedF(spriteData^.Texture, Gear^.Scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height, Gear^.Angle); |
363 end; |
368 end; |
364 vgtCircle: if gear^.Angle = 1 then |
369 vgtCircle: if gear^.Angle = 1 then |
386 spriteData:= GetSpriteData(sprCloud, sprSDCloud); |
391 spriteData:= GetSpriteData(sprCloud, sprSDCloud); |
387 DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height); |
392 DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height); |
388 end; |
393 end; |
389 vgtFlake: begin |
394 vgtFlake: begin |
390 spriteData:= GetSpriteData(sprFlake, sprSDFlake); |
395 spriteData:= GetSpriteData(sprFlake, sprSDFlake); |
391 if vobSDVelocity = 0 then |
396 if speedlessFlakes then |
392 DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height) |
397 DrawTextureF(spriteData^.Texture, Gear^.Scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height) |
393 else |
398 else |
394 DrawTextureRotatedF(spriteData^.Texture, Gear^.Scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height, Gear^.Angle); |
399 DrawTextureRotatedF(spriteData^.Texture, Gear^.Scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, spriteData^.Width, spriteData^.Height, Gear^.Angle); |
395 end; |
400 end; |
396 end; |
401 end; |
411 sprite:= GetSprite(sprCloud, sprSDCloud); |
416 sprite:= GetSprite(sprCloud, sprSDCloud); |
412 DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame); |
417 DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame); |
413 end; |
418 end; |
414 vgtFlake: begin |
419 vgtFlake: begin |
415 sprite:= GetSprite(sprFlake, sprSDFlake); |
420 sprite:= GetSprite(sprFlake, sprSDFlake); |
416 if vobSDVelocity = 0 then |
421 if speedlessFlakes then |
417 DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
422 DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
418 else |
423 else |
419 DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle); |
424 DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle); |
420 end; |
425 end; |
421 end; |
426 end; |
432 if Gear^.Tint <> $FFFFFFFF then |
437 if Gear^.Tint <> $FFFFFFFF then |
433 Tint(Gear^.Tint); |
438 Tint(Gear^.Tint); |
434 case Gear^.Kind of |
439 case Gear^.Kind of |
435 vgtFlake: begin |
440 vgtFlake: begin |
436 sprite:= GetSprite(sprFlake, sprSDFlake); |
441 sprite:= GetSprite(sprFlake, sprSDFlake); |
437 if vobSDVelocity = 0 then |
442 if speedlessFlakes then |
438 DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
443 DrawSprite(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
439 else |
444 else |
440 DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle) |
445 DrawSpriteRotatedF(sprite, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle) |
441 end; |
446 end; |
442 vgtNoPlaceWarn: |
447 vgtNoPlaceWarn: |