From 241759fdb1d691d54e70f1171ee9180734467c21 Mon Sep 17 00:00:00 2001
From: johns <>
Date: Sat, 20 May 2000 23:09:40 +0000
Subject: [PATCH] Prepared new video API for sprites. Corrected some missile
 sizes.

---
 src/stratagus/oldmissile.cpp | 88 ++++++++++++++++++++++++++++++++----
 1 file changed, 78 insertions(+), 10 deletions(-)

diff --git a/src/stratagus/oldmissile.cpp b/src/stratagus/oldmissile.cpp
index da8639f4e..d37def5ce 100644
--- a/src/stratagus/oldmissile.cpp
+++ b/src/stratagus/oldmissile.cpp
@@ -218,7 +218,7 @@ global MissileType MissileTypes[MissileTypeMax] = {
 { MissileTypeType,
     "missile-exorcism",
     "exorcism.png",
-    32,32,
+    48,48,
     { NULL },
     MissileClassPointToPoint,	
     1,
@@ -226,7 +226,7 @@ global MissileType MissileTypes[MissileTypeMax] = {
 { MissileTypeType,
     "missile-heal-effect",
     "heal effect.png",
-    32,32,
+    48,48,
     { NULL },
     MissileClassPointToPoint,	
     1,
@@ -242,7 +242,7 @@ global MissileType MissileTypes[MissileTypeMax] = {
 { MissileTypeType,
     "missile-rune",
     "rune.png",
-    32,32,
+    16,16,
     { NULL },
     MissileClassStayWithDelay,	
     1,
@@ -431,8 +431,13 @@ global void LoadMissileSprites(void)
 	    buf=alloca(strlen(file)+9+1);
 	    file=strcat(strcpy(buf,"graphic/"),file);
 	    ShowLoadProgress("\tMissile %s\n",file);
+#ifdef NEW_VIDEO
+	    MissileTypes[i].Sprite=LoadSprite(
+		    file,MissileTypes[i].Width,MissileTypes[i].Height);
+#else
 	    MissileTypes[i].RleSprite=LoadRleSprite(
 		    file,MissileTypes[i].Width,MissileTypes[i].Height);
+#endif
 	}
     }
 
@@ -455,8 +460,13 @@ global void LoadMissileSprites(void)
     }
 
     MissileTypeSmallFire=MissileTypeByIdent("missile-small-fire");
+#ifdef NEW_VIDEO
+    // FIXME: FIXME: FIXME: very diry hack
+    MissileTypeSmallFire->Sprite->NumFrames=6;
+#else
     // FIXME: FIXME: FIXME: very diry hack
     MissileTypeSmallFire->RleSprite->NumFrames=6;
+#endif
     MissileTypeBigFire=MissileTypeByIdent("missile-big-fire");
 }
 
@@ -728,14 +738,23 @@ local int MissileVisible(const Missile* missile)
 /**
 **	Draw missile.
 */
-global void DrawMissile(const MissileType* type,int frame,int x,int y)
+global void DrawMissile(const MissileType* type,unsigned frame,int x,int y)
 {
+#ifdef NEW_VIDEO
+    // FIXME: This is a hack for mirrored sprites
+    if( frame&128 ) {
+	VideoDrawClipX(type->Sprite,frame&127,x,y);
+    } else {
+	VideoDrawClip(type->Sprite,frame,x,y);
+    }
+#else
     // FIXME: This is a hack for mirrored sprites
     if( frame&128 ) {
 	DrawRleSpriteClippedX(type->RleSprite,frame&127,x,y);
     } else {
 	DrawRleSpriteClipped(type->RleSprite,frame,x,y);
     }
+#endif
 }
 
 /**
@@ -1030,13 +1049,23 @@ global void MissileActions(void)
 		    //	Animate missile, cycle through frames
 		    //
 		    missile->Frame+=5;		// FIXME: frames pro row
+#ifdef NEW_VIDEO
+		    if( (missile->Frame&127)
+			    >=VideoGraphicFrames(missile->Type->Sprite) ) {
+			missile->Frame-=
+				VideoGraphicFrames(missile->Type->Sprite);
+		    }
+		    DebugLevel3("Frame %d of %d\n"
+			    ,missile->Frame
+			    ,VideoGraphicFrames(missile->Type->Sprite));
+#else
 		    if( (missile->Frame&127)
 			    >=missile->Type->RleSprite->NumFrames ) {
 			missile->Frame-=missile->Type->RleSprite->NumFrames;
 		    }
 		    DebugLevel3("Frame %d of %d\n"
-			,missile->Frame
-			,missile->Type->RleSprite->NumFrames);
+			,missile->Frame,missile->Type->RleSprite->NumFrames);
+#endif
 		}
 		break;
 
@@ -1079,14 +1108,23 @@ global void MissileActions(void)
 		    //	Animate missile, cycle through frames
 		    //
 		    missile->Frame+=5;		// FIXME: frames pro row
+#ifdef NEW_VIDEO
+		    if( (missile->Frame&127)
+			    >=VideoGraphicFrames(missile->Type->Sprite) ) {
+			missile->Frame-=
+				VideoGraphicFrames(missile->Type->Sprite);
+		    }
+		    DebugLevel3("Frame %d of %d\n"
+			    ,missile->Frame
+			    ,VideoGraphicFrames(missile->Type->Sprite));
+#else
 		    if( (missile->Frame&127)
 			    >=missile->Type->RleSprite->NumFrames ) {
 			missile->Frame-=missile->Type->RleSprite->NumFrames;
 		    }
 		    DebugLevel3("Frame %d of %d\n"
-			,missile->Frame
-			,missile->Type->RleSprite->NumFrames);
-
+			,missile->Frame,missile->Type->RleSprite->NumFrames);
+#endif
 		}
 		break;
 
@@ -1097,20 +1135,36 @@ global void MissileActions(void)
 		    //	Animate hit
 		    //
 		    missile->Frame+=5;	// FIXME: frames pro row
+#ifdef NEW_VIDEO
+		    if( (missile->Frame&127)
+			    >=VideoGraphicFrames(missile->Type->Sprite) ) {
+			MissileHit(missile);
+			missile->Type=MissileFree;
+		    }
+#else
 		    if( (missile->Frame&127)
 			    >=missile->Type->RleSprite->NumFrames ) {
 			MissileHit(missile);
 			missile->Type=MissileFree;
 		    }
+#endif
 		}
 		break;
 
 	    case MissileClassStayWithDelay:
 		missile->Wait=missile->Type->Speed;
+#ifdef NEW_VIDEO
+		if( ++missile->Frame
+			==VideoGraphicFrames(missile->Type->Sprite) ) {
+		    MissileHit(missile);
+		    missile->Type=MissileFree;
+		}
+#else
 		if( ++missile->Frame==missile->Type->RleSprite->NumFrames ) {
 		    MissileHit(missile);
 		    missile->Type=MissileFree;
 		}
+#endif
 		break;
 
 	    case MissileClassCycleOnce:
@@ -1121,11 +1175,19 @@ global void MissileActions(void)
 			++missile->State;
 			break;
 		    case 1:
+#ifdef NEW_VIDEO
+			if( ++missile->Frame
+				==VideoGraphicFrames(missile->Type->Sprite) ) {
+			    --missile->Frame;
+			    ++missile->State;
+			}
+#else
 			if( ++missile->Frame
 				==missile->Type->RleSprite->NumFrames ) {
 			    --missile->Frame;
 			    ++missile->State;
 			}
+#endif
 			break;
 		    case 3:
 			if( !missile->Frame-- ) {
@@ -1138,7 +1200,13 @@ global void MissileActions(void)
 
 	    case MissileClassFire:
 		missile->Wait=missile->Type->Speed;
-		if( ++missile->Frame==missile->Type->RleSprite->NumFrames ) {
+#ifdef NEW_VIDEO
+		if( ++missile->Frame
+			==VideoGraphicFrames(missile->Type->Sprite) )
+#else
+		if( ++missile->Frame==missile->Type->RleSprite->NumFrames )
+#endif
+		{
 		    int f;
 		    Unit* unit;