stratagus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Stratagus-CVS] stratagus data/ccl/missiles.ccl src/clone/unit....


From: Jimmy Salmon
Subject: [Stratagus-CVS] stratagus data/ccl/missiles.ccl src/clone/unit....
Date: Fri, 26 Sep 2003 16:32:00 -0400

CVSROOT:        /cvsroot/stratagus
Module name:    stratagus
Branch:         
Changes by:     Jimmy Salmon <address@hidden>   03/09/26 16:32:00

Modified files:
        data/ccl       : missiles.ccl 
        src/clone      : unit.c 
        src/include    : missile.h 
        src/missile    : ccl_missile.c missile.c 

Log message:
        Implemented task #2634: Removed Hard Coded Burning

Patches:
Index: stratagus/data/ccl/missiles.ccl
diff -u stratagus/data/ccl/missiles.ccl:1.31 
stratagus/data/ccl/missiles.ccl:1.32
--- stratagus/data/ccl/missiles.ccl:1.31        Fri Jul 11 14:27:04 2003
+++ stratagus/data/ccl/missiles.ccl     Fri Sep 26 16:32:00 2003
@@ -26,7 +26,7 @@
 ;;      along with this program; if not, write to the Free Software
 ;;      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  
USA
 ;;
-;;     $Id: missiles.ccl,v 1.31 2003/07/11 18:27:04 grumbel Exp $
+;;     $Id: missiles.ccl,v 1.32 2003/09/26 20:32:00 jsalmon3 Exp $
 
 ;;     NOTE: the missiles could be sorted for races, but did this make sense?
 
@@ -170,3 +170,10 @@
   'impact-sound "explosion" 'draw-level 50
   'class 'missile-class-hit 'sleep 1 'speed 16 'range 2
   'impact-missile 'missile-impact 'can-hit-owner #t)
+
+
+(define-burning-building
+  '(percent 0 missile missile-big-fire)
+  '(percent 50 missile missile-small-fire)
+  '(percent 75 ) ; no missile
+)
Index: stratagus/src/clone/unit.c
diff -u stratagus/src/clone/unit.c:1.304 stratagus/src/clone/unit.c:1.305
--- stratagus/src/clone/unit.c:1.304    Fri Sep 26 05:15:22 2003
+++ stratagus/src/clone/unit.c  Fri Sep 26 16:32:00 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: unit.c,v 1.304 2003/09/26 09:15:22 mr-russ Exp $
+//     $Id: unit.c,v 1.305 2003/09/26 20:32:00 jsalmon3 Exp $
 
 //@{
 
@@ -3271,21 +3271,12 @@
     if( type->Building && !target->Burning ) {
        int f;
        Missile* missile;
+       MissileType* fire;
 
        f=(100*target->HP)/target->Stats->HitPoints;
-       if( f>75) {
-           ; // No fire for this
-       } else if( f>50 ) {
-           missile=MakeMissile(MissileTypeSmallFire
-                   ,target->X*TileSizeX+(type->TileWidth*TileSizeX)/2
-                   ,target->Y*TileSizeY+(type->TileHeight*TileSizeY)/2
-                   -TileSizeY
-                   ,0,0);
-           missile->SourceUnit=target;
-           target->Burning=1;
-           ++target->Refs;
-       } else {
-           missile=MakeMissile(MissileTypeBigFire
+       fire=MissileBurningBuilding(f);
+       if( fire ) {
+           missile=MakeMissile(fire
                    ,target->X*TileSizeX+(type->TileWidth*TileSizeX)/2
                    ,target->Y*TileSizeY+(type->TileHeight*TileSizeY)/2
                    -TileSizeY
@@ -3962,7 +3953,7 @@
     int InRun, RunStart;
 
     CLprintf(file,"\n;;; -----------------------------------------\n");
-    CLprintf(file,";;; MODULE: units $Id: unit.c,v 1.304 2003/09/26 09:15:22 
mr-russ Exp $\n\n");
+    CLprintf(file,";;; MODULE: units $Id: unit.c,v 1.305 2003/09/26 20:32:00 
jsalmon3 Exp $\n\n");
 
     //
     // Local variables
Index: stratagus/src/include/missile.h
diff -u stratagus/src/include/missile.h:1.64 
stratagus/src/include/missile.h:1.65
--- stratagus/src/include/missile.h:1.64        Sun Sep 21 06:03:56 2003
+++ stratagus/src/include/missile.h     Fri Sep 26 16:32:00 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: missile.h,v 1.64 2003/09/21 10:03:56 mr-russ Exp $
+//     $Id: missile.h,v 1.65 2003/09/26 20:32:00 jsalmon3 Exp $
 
 #ifndef __MISSILE_H__
 #define __MISSILE_H__
@@ -478,6 +478,12 @@
     Missile**  MissileSlot;            /// pointer to missile slot
 };
 
+typedef struct _burning_building_frame_ {
+    int                    Percent;                    /// HP percent
+    MissileType*    Missile;                   /// Missile to draw
+    struct _burning_building_frame_* Next;     /// Next pointer
+} BurningBuildingFrame;
+
 /*----------------------------------------------------------------------------
 --     Variables
 ----------------------------------------------------------------------------*/
@@ -485,12 +491,12 @@
 extern char** MissileTypeWcNames;      /// Mapping wc-number 2 symbol
 
 extern MissileType* MissileTypes;              /// All missile-types
-extern MissileType* MissileTypeSmallFire;      /// Small fire missile-type
-extern MissileType* MissileTypeBigFire;                /// Big fire 
missile-type
 extern MissileType* MissileTypeExplosion;      /// Explosion missile-type
 
 extern const char* MissileClassNames[];                /// Missile class names
 
+extern BurningBuildingFrame *BurningBuildingFrames;  /// Burning building 
frames
+
 /*----------------------------------------------------------------------------
 --     Functions
 ----------------------------------------------------------------------------*/
@@ -525,6 +531,9 @@
 extern void MissileActions(void);
     /// distance from view point to missile
 extern int ViewPointDistanceToMissile(const Missile*);
+
+    /// Get the burning building missile based on hp percent
+extern MissileType* MissileBurningBuilding(int percent);
 
     /// Save missile-types
 extern void SaveMissileTypes(CLFile *);
Index: stratagus/src/missile/ccl_missile.c
diff -u stratagus/src/missile/ccl_missile.c:1.29 
stratagus/src/missile/ccl_missile.c:1.30
--- stratagus/src/missile/ccl_missile.c:1.29    Fri Jul 11 10:35:32 2003
+++ stratagus/src/missile/ccl_missile.c Fri Sep 26 16:32:00 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: ccl_missile.c,v 1.29 2003/07/11 14:35:32 n0body Exp $
+//     $Id: ccl_missile.c,v 1.30 2003/09/26 20:32:00 jsalmon3 Exp $
 
 //@{
 
@@ -198,29 +198,29 @@
     type=NULL;
     x = dx = y = dy = -1;
 
-    while (!gh_null_p (list)) {
-       value = gh_car (list);
-       list = gh_cdr (list);
-
-       if (gh_eq_p (value, gh_symbol2scm ("type"))) {
-           value = gh_car (list);
-           list = gh_cdr (list);
-           str = gh_scm2newstr (value, NULL);
-           type = MissileTypeByIdent (str);
-           free (str);
-       } else if (gh_eq_p (value, gh_symbol2scm ("pos"))) {
-           SCM sublist = gh_car (list);
-           list = gh_cdr (list);
-           x = gh_scm2int (gh_car (sublist));
-           y = gh_scm2int (gh_cadr (sublist));
-       } else if (gh_eq_p (value, gh_symbol2scm ("goal"))) {
-           SCM sublist = gh_car (list);
-           list = gh_cdr (list);
-           dx = gh_scm2int (gh_car (sublist));
-           dy = gh_scm2int (gh_cadr (sublist));
-       } else if (gh_eq_p (value, gh_symbol2scm ("local"))) {
-           DebugCheck (!type);
-           missile = MakeLocalMissile (type, x, y, dx, dy);
+    while (!gh_null_p(list)) {
+       value = gh_car(list);
+       list = gh_cdr(list);
+
+       if (gh_eq_p(value, gh_symbol2scm("type"))) {
+           value = gh_car(list);
+           list = gh_cdr(list);
+           str = gh_scm2newstr(value, NULL);
+           type = MissileTypeByIdent(str);
+           free(str);
+       } else if (gh_eq_p(value, gh_symbol2scm("pos"))) {
+           SCM sublist = gh_car(list);
+           list = gh_cdr(list);
+           x = gh_scm2int(gh_car(sublist));
+           y = gh_scm2int(gh_cadr(sublist));
+       } else if (gh_eq_p(value, gh_symbol2scm("goal"))) {
+           SCM sublist = gh_car(list);
+           list = gh_cdr(list);
+           dx = gh_scm2int(gh_car(sublist));
+           dy = gh_scm2int(gh_cadr(sublist));
+       } else if (gh_eq_p(value, gh_symbol2scm("local"))) {
+           DebugCheck(!type);
+           missile = MakeLocalMissile(type, x, y, dx, dy);
                // we need to reinitialize position parameters - that's because 
of
                // the way InitMissile() (called from MakeLocalMissile()) 
computes
                // them - it works for creating a missile during a game but 
breaks
@@ -230,74 +230,122 @@
                missile->DX = dx;
                missile->DY = dy;
            missile->Local = 1;
-       } else if (gh_eq_p (value, gh_symbol2scm ("global"))) {
+       } else if (gh_eq_p(value, gh_symbol2scm("global"))) {
            DebugCheck (!type);
-           missile = MakeMissile (type, x, y, dx, dy);
+           missile = MakeMissile(type, x, y, dx, dy);
                missile->X = x;
                missile->Y = y;
                missile->DX = dx;
                missile->DY = dy;
            missile->Local = 0;
-       } else if (gh_eq_p (value, gh_symbol2scm ("frame"))) {
-           DebugCheck (!missile);
-           missile->SpriteFrame = gh_scm2int (gh_car (list));
-           list = gh_cdr (list);
-       } else if (gh_eq_p (value, gh_symbol2scm ("state"))) {
-           DebugCheck (!missile);
-           missile->State = gh_scm2int (gh_car (list));
-           list = gh_cdr (list);
-       } else if (gh_eq_p (value, gh_symbol2scm ("wait"))) {
-           DebugCheck (!missile);
-           missile->Wait = gh_scm2int (gh_car (list));
-           list = gh_cdr (list);
-       } else if (gh_eq_p (value, gh_symbol2scm ("delay"))) {
-           DebugCheck (!missile);
-           missile->Delay = gh_scm2int (gh_car (list));
-           list = gh_cdr (list);
-       } else if (gh_eq_p (value, gh_symbol2scm ("source"))) {
-           DebugCheck (!missile);
-           value = gh_car (list);
-           list = gh_cdr (list);
-           str = gh_scm2newstr (value, NULL);
+       } else if (gh_eq_p(value, gh_symbol2scm("frame"))) {
+           DebugCheck(!missile);
+           missile->SpriteFrame = gh_scm2int(gh_car(list));
+           list = gh_cdr(list);
+       } else if (gh_eq_p(value, gh_symbol2scm("state"))) {
+           DebugCheck(!missile);
+           missile->State = gh_scm2int(gh_car(list));
+           list = gh_cdr(list);
+       } else if (gh_eq_p(value, gh_symbol2scm("wait"))) {
+           DebugCheck(!missile);
+           missile->Wait = gh_scm2int(gh_car(list));
+           list = gh_cdr(list);
+       } else if (gh_eq_p (value, gh_symbol2scm("delay"))) {
+           DebugCheck(!missile);
+           missile->Delay = gh_scm2int(gh_car(list));
+           list = gh_cdr(list);
+       } else if (gh_eq_p(value, gh_symbol2scm("source"))) {
+           DebugCheck(!missile);
+           value = gh_car(list);
+           list = gh_cdr(list);
+           str = gh_scm2newstr(value, NULL);
            missile->SourceUnit = UnitSlots[strtol (str+1, 0, 16)];
            free(str);
            ++missile->SourceUnit->Refs;
-       } else if (gh_eq_p (value, gh_symbol2scm ("target"))) {
-           DebugCheck (!missile);
-           value = gh_car (list);
-           list = gh_cdr (list);
-           str = gh_scm2newstr (value, NULL);
+       } else if (gh_eq_p(value, gh_symbol2scm("target"))) {
+           DebugCheck(!missile);
+           value = gh_car(list);
+           list = gh_cdr(list);
+           str = gh_scm2newstr(value, NULL);
            missile->TargetUnit = UnitSlots[strtol (str+1, 0, 16)];
            free(str);
            ++missile->TargetUnit->Refs;
-       } else if (gh_eq_p (value, gh_symbol2scm ("damage"))) {
-           DebugCheck (!missile);
-           missile->Damage = gh_scm2int (gh_car (list));
-           list = gh_cdr (list);
-       } else if (gh_eq_p (value, gh_symbol2scm ("ttl"))) {
-           DebugCheck (!missile);
-           missile->TTL = gh_scm2int (gh_car (list));
-           list = gh_cdr (list);
-       } else if (gh_eq_p (value, gh_symbol2scm ("controller"))) {
-           DebugCheck (!missile);
-           DebugLevel0Fn ("FIXME: no point in reading a pointer value from "
+       } else if (gh_eq_p(value, gh_symbol2scm("damage"))) {
+           DebugCheck(!missile);
+           missile->Damage = gh_scm2int(gh_car(list));
+           list = gh_cdr(list);
+       } else if (gh_eq_p(value, gh_symbol2scm("ttl"))) {
+           DebugCheck(!missile);
+           missile->TTL = gh_scm2int(gh_car(list));
+           list = gh_cdr(list);
+       } else if (gh_eq_p(value, gh_symbol2scm("controller"))) {
+           DebugCheck(!missile);
+           DebugLevel0Fn("FIXME: no point in reading a pointer value from "
                    "a saved game!!\n");
-           //missile->Controller = gh_scm2int (gh_car (list));
+           //missile->Controller = gh_scm2int(gh_car(list));
            missile->Controller = NULL;
-           list = gh_cdr (list);
-       } else if (gh_eq_p (value, gh_symbol2scm ("data"))) {
-           SCM sublist = gh_car (list);
-           list = gh_cdr (list);
-           missile->D = gh_scm2int (gh_car (sublist));
-           sublist = gh_cdr (sublist);
-           missile->Dx = gh_scm2int (gh_car (sublist));
-           sublist = gh_cdr (sublist);
-           missile->Dy = gh_scm2int (gh_car (sublist));
-           sublist = gh_cdr (sublist);
-           missile->Xstep = gh_scm2int (gh_car (sublist));
-           sublist = gh_cdr (sublist);
-           missile->Ystep = gh_scm2int (gh_car (sublist));
+           list = gh_cdr(list);
+       } else if (gh_eq_p(value, gh_symbol2scm("data"))) {
+           SCM sublist = gh_car(list);
+           list = gh_cdr(list);
+           missile->D = gh_scm2int(gh_car(sublist));
+           sublist = gh_cdr(sublist);
+           missile->Dx = gh_scm2int(gh_car(sublist));
+           sublist = gh_cdr(sublist);
+           missile->Dy = gh_scm2int(gh_car(sublist));
+           sublist = gh_cdr(sublist);
+           missile->Xstep = gh_scm2int(gh_car(sublist));
+           sublist = gh_cdr(sublist);
+           missile->Ystep = gh_scm2int(gh_car(sublist));
+       }
+    }
+    return SCM_UNSPECIFIED;
+}
+
+/**
+**     Define burning building missiles.
+**
+**     @param list     .
+*/
+local SCM CclDefineBurningBuilding(SCM list)
+{
+    SCM value;
+    SCM sublist;
+    BurningBuildingFrame **frame;
+    BurningBuildingFrame *next;
+    char *str;
+
+    frame = &BurningBuildingFrames;
+    while (*frame) {
+       next = (*frame)->Next;
+       free(*frame);
+       frame = &next;
+    }
+
+    frame = &BurningBuildingFrames;
+
+    while (!gh_null_p(list)) {
+       sublist = gh_car(list);
+       list = gh_cdr(list);
+
+       *frame = calloc(1, sizeof(BurningBuildingFrame));
+       while (!gh_null_p(sublist)) {
+           value = gh_car(sublist);
+           sublist = gh_cdr(sublist);
+
+           if (gh_eq_p(value, gh_symbol2scm("percent"))) {
+               value = gh_car(sublist);
+               sublist = gh_cdr(sublist);
+               (*frame)->Percent = gh_scm2int(value);
+           } else if (gh_eq_p(value, gh_symbol2scm("missile"))) {
+               value = gh_car(sublist);
+               sublist = gh_cdr(sublist);
+               str = gh_scm2newstr(value, NULL);
+               (*frame)->Missile = MissileTypeByIdent(str);
+               free(str);
+           }
        }
+       frame = &((*frame)->Next);
     }
     return SCM_UNSPECIFIED;
 }
@@ -311,6 +359,7 @@
            CclDefineMissileTypeWcNames);
     gh_new_procedureN("define-missile-type",CclDefineMissileType);
     gh_new_procedureN("missile",CclMissile);
+    gh_new_procedureN("define-burning-building",CclDefineBurningBuilding);
 }
 
 //@}
Index: stratagus/src/missile/missile.c
diff -u stratagus/src/missile/missile.c:1.80 
stratagus/src/missile/missile.c:1.81
--- stratagus/src/missile/missile.c:1.80        Sun Sep 21 06:03:56 2003
+++ stratagus/src/missile/missile.c     Fri Sep 26 16:32:00 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: missile.c,v 1.80 2003/09/21 10:03:56 mr-russ Exp $
+//     $Id: missile.c,v 1.81 2003/09/26 20:32:00 jsalmon3 Exp $
 
 //@{
 
@@ -101,8 +101,6 @@
 /*
 **     Next missile-types are used hardcoded in the source.
 */
-global MissileType* MissileTypeSmallFire;      /// Small fire missile-type
-global MissileType* MissileTypeBigFire;                /// Big fire 
missile-type
     /// missile-type for the explosion missile
 global MissileType* MissileTypeExplosion;
 
@@ -128,6 +126,8 @@
 
 #endif
 
+global BurningBuildingFrame *BurningBuildingFrames;  /// Burning building 
frames
+
 /*----------------------------------------------------------------------------
 --     Functions
 ----------------------------------------------------------------------------*/
@@ -1367,26 +1367,20 @@
            if( ++missile->SpriteFrame
                    ==VideoGraphicFrames(missile->Type->Sprite) ) {
                int f;
+               MissileType* fire;
 
                missile->SpriteFrame=0;
                f=(100*unit->HP)/unit->Stats->HitPoints;
-               if( f>75) {
+               fire = MissileBurningBuilding(f);
+               if( !fire ) {
                    FreeMissile(missile);
                    missile=NULL;
                    unit->Burning=0;
-               } else if( f>50 ) {
-                   if( missile->Type!=MissileTypeSmallFire ) {
-                       missile->X+=missile->Type->Width/2;
-                       missile->Y+=missile->Type->Height/2;
-                       missile->Type=MissileTypeSmallFire;
-                       missile->X-=missile->Type->Width/2;
-                       missile->Y-=missile->Type->Height/2;
-                   }
                } else {
-                   if( missile->Type!=MissileTypeBigFire ) {
+                   if( missile->Type!=fire ) {
                        missile->X+=missile->Type->Width/2;
                        missile->Y+=missile->Type->Height/2;
-                       missile->Type=MissileTypeBigFire;
+                       missile->Type=fire;
                        missile->X-=missile->Type->Width/2;
                        missile->Y-=missile->Type->Height/2;
                    }
@@ -1494,6 +1488,27 @@
 }
 
 /**
+**     Get the burning building missile based on hp percent.
+**
+**     @param percent  HP percent
+*/
+global MissileType* MissileBurningBuilding(int percent)
+{
+    BurningBuildingFrame *frame;
+    BurningBuildingFrame *tmp;
+
+    frame=tmp=BurningBuildingFrames;
+    while( tmp ) {
+       if( percent<tmp->Percent ) {
+           break;
+       }
+       frame=tmp;
+       tmp=tmp->Next;
+    }
+    return frame->Missile;
+}
+
+/**
 **     Save the missile-types to file.
 **
 **     @param file     Output file.
@@ -1507,7 +1522,7 @@
     int i;
 
     CLprintf(file,"\n;;; -----------------------------------------\n");
-    CLprintf(file,";;; MODULE: missile-types $Id: missile.c,v 1.80 2003/09/21 
10:03:56 mr-russ Exp $\n\n");
+    CLprintf(file,";;; MODULE: missile-types $Id: missile.c,v 1.81 2003/09/26 
20:32:00 jsalmon3 Exp $\n\n");
 
     //
     // Original number to internal missile-type name.
@@ -1602,7 +1617,7 @@
     Missile* const* missiles;
 
     CLprintf(file,"\n;;; -----------------------------------------\n");
-    CLprintf(file,";;; MODULE: missiles $Id: missile.c,v 1.80 2003/09/21 
10:03:56 mr-russ Exp $\n\n");
+    CLprintf(file,";;; MODULE: missiles $Id: missile.c,v 1.81 2003/09/26 
20:32:00 jsalmon3 Exp $\n\n");
 
     for( missiles=GlobalMissiles; *missiles; ++missiles ) {
        SaveMissile(*missiles,file);
@@ -1639,8 +1654,6 @@
        }
     }
 
-    MissileTypeSmallFire=MissileTypeByIdent("missile-small-fire");
-    MissileTypeBigFire=MissileTypeByIdent("missile-big-fire");
     MissileTypeExplosion = MissileTypeByIdent("missile-explosion");
 }
 
@@ -1665,9 +1678,6 @@
     free(MissileTypes);
     MissileTypes=NULL;
     NumMissileTypes=0;
-
-    MissileTypeSmallFire=NULL;
-    MissileTypeBigFire=NULL;
 }
 
 /**




reply via email to

[Prev in Thread] Current Thread [Next in Thread]