[Top][All Lists]
[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;
}
/**
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Stratagus-CVS] stratagus data/ccl/missiles.ccl src/clone/unit....,
Jimmy Salmon <=