diff --git a/src/include/missile.h b/src/include/missile.h index cde508292..d3857c1cc 100644 --- a/src/include/missile.h +++ b/src/include/missile.h @@ -400,6 +400,8 @@ enum _missile_class_ { struct _missile_type_ { char* Ident; ///< missile name int Transparency; ///< missile transparency possible value is 50 (later 25 and 75) + int Width; ///< missile width in pixels + int Height; ///< missile height in pixels int DrawLevel; ///< Level to draw missile at int SpriteFrames; ///< number of sprite frames in graphic int NumDirections; ///< number of directions missile can face diff --git a/src/stratagus/missile.cpp b/src/stratagus/missile.cpp index d1b10e042..bcfe0719f 100644 --- a/src/stratagus/missile.cpp +++ b/src/stratagus/missile.cpp @@ -270,10 +270,10 @@ static Missile* NewLocalMissile(void) static Missile* InitMissile(Missile* missile, MissileType* mtype, int sx, int sy, int dx, int dy) { - missile->X = sx - mtype->G->Width / 2; - missile->Y = sy - mtype->G->Height / 2; - missile->DX = dx - mtype->G->Width / 2; - missile->DY = dy - mtype->G->Height / 2; + missile->X = sx - mtype->Width / 2; + missile->Y = sy - mtype->Height / 2; + missile->DX = dx - mtype->Width / 2; + missile->DY = dy - mtype->Height / 2; missile->SourceX = missile->X; missile->SourceY = missile->Y; missile->Type = mtype; @@ -566,8 +566,8 @@ static void GetMissileMapArea(const Missile* missile, int* sx, int* sy, #define Bound(x, y) (x) < 0 ? 0 : ((x) > (y) ? (y) : (x)) *sx = Bound(missile->X / TileSizeX, TheMap.Width - 1); *sy = Bound(missile->Y / TileSizeY, TheMap.Height - 1); - *ex = Bound((missile->X + missile->Type->G->Width) / TileSizeX, TheMap.Width - 1); - *ey = Bound((missile->Y + missile->Type->G->Height) / TileSizeY, TheMap.Height - 1); + *ex = Bound((missile->X + missile->Type->Width) / TileSizeX, TheMap.Width - 1); + *ey = Bound((missile->Y + missile->Type->Height) / TileSizeY, TheMap.Height - 1); #undef Bound } @@ -812,8 +812,8 @@ static int PointToPointMissile(Missile* missile) missile->X = missile->SourceX + xstep * missile->CurrentStep / 1024; missile->Y = missile->SourceY + ystep * missile->CurrentStep / 1024; if (missile->Type->SmokeMissile && missile->CurrentStep) { - x = missile->X + missile->Type->G->Width / 2; - y = missile->Y + missile->Type->G->Height / 2; + x = missile->X + missile->Type->Width / 2; + y = missile->Y + missile->Type->Height / 2; MakeMissile(missile->Type->SmokeMissile, x, y, x, y); } return 0; @@ -864,8 +864,8 @@ static int ParabolicMissile(Missile* missile) missile->Y += Z * ZprojToY / 64; MissileNewHeadingFromXY(missile, missile->X - orig_x, missile->Y - orig_y); if (missile->Type->SmokeMissile && missile->CurrentStep) { - x = missile->X + missile->Type->G->Width / 2; - y = missile->Y + missile->Type->G->Height / 2; + x = missile->X + missile->Type->Width / 2; + y = missile->Y + missile->Type->Height / 2; MakeMissile(missile->Type->SmokeMissile, x, y, x, y); } return 0; @@ -950,8 +950,8 @@ void MissileHit(Missile* missile) PlayMissileSound(missile, missile->Type->ImpactSound.Sound); } - x = missile->X + missile->Type->G->Width / 2; - y = missile->Y + missile->Type->G->Height / 2; + x = missile->X + missile->Type->Width / 2; + y = missile->Y + missile->Type->Height / 2; // // The impact generates a new missile. @@ -1212,8 +1212,8 @@ int ViewPointDistanceToMissile(const Missile* missile) int x; int y; - x = (missile->X + missile->Type->G->Width / 2) / TileSizeX; - y = (missile->Y + missile->Type->G->Height / 2) / TileSizeY; // pixel -> tile + x = (missile->X + missile->Type->Width / 2) / TileSizeX; + y = (missile->Y + missile->Type->Height / 2) / TileSizeY; // pixel -> tile return ViewPointDistance(x, y); } @@ -1581,11 +1581,11 @@ void MissileActionFire(Missile* missile) unit->Burning = 0; } else { if (missile->Type != fire) { - missile->X += missile->Type->G->Width / 2; - missile->Y += missile->Type->G->Height / 2; + missile->X += missile->Type->Width / 2; + missile->Y += missile->Type->Height / 2; missile->Type = fire; - missile->X -= missile->Type->G->Width / 2; - missile->Y -= missile->Type->G->Height / 2; + missile->X -= missile->Type->Width / 2; + missile->Y -= missile->Type->Height / 2; } } } @@ -1758,8 +1758,8 @@ void MissileActionWhirlwind(Missile* missile) // // Center of the tornado // - x = (missile->X + TileSizeX / 2 + missile->Type->G->Width / 2) / TileSizeX; - y = (missile->Y + TileSizeY + missile->Type->G->Height / 2) / TileSizeY; + x = (missile->X + TileSizeX / 2 + missile->Type->Width / 2) / TileSizeX; + y = (missile->Y + TileSizeY + missile->Type->Height / 2) / TileSizeY; #if 0 Unit* table[UnitMax]; diff --git a/src/stratagus/script_missile.cpp b/src/stratagus/script_missile.cpp index e48dfb3fc..e5cec471e 100644 --- a/src/stratagus/script_missile.cpp +++ b/src/stratagus/script_missile.cpp @@ -71,8 +71,6 @@ static int CclDefineMissileType(lua_State* l) MissileType* mtype; unsigned i; char* file; - int w; - int h; if (lua_gettop(l) != 2 || !lua_istable(l, 2)) { LuaError(l, "incorrect argument"); @@ -102,7 +100,6 @@ static int CclDefineMissileType(lua_State* l) mtype->SplashFactor = 100; file = NULL; - w = h = 0; // // Parse the arguments @@ -117,10 +114,10 @@ static int CclDefineMissileType(lua_State* l) LuaError(l, "incorrect argument"); } lua_rawgeti(l, -1, 1); - w = LuaToNumber(l, -1); + mtype->Width = LuaToNumber(l, -1); lua_pop(l, 1); lua_rawgeti(l, -1, 2); - h = LuaToNumber(l, -1); + mtype->Height = LuaToNumber(l, -1); lua_pop(l, 1); } else if (!strcmp(value, "Frames")) { mtype->SpriteFrames = LuaToNumber(l, -1); @@ -178,7 +175,7 @@ static int CclDefineMissileType(lua_State* l) } if (file) { - mtype->G = NewGraphic(file, w, h); + mtype->G = NewGraphic(file, mtype->Width, mtype->Height); } return 0;