From ebf6797678b58aa558ab933fd3f5931fcf0406b9 Mon Sep 17 00:00:00 2001 From: belugas Date: Mon, 24 Apr 2006 21:10:56 +0000 Subject: [PATCH] (svn r4568) CodeChange : Bring definitions and uses of DrawTypesStructures toguether. --- industry_cmd.c | 56 +++++------------------------------------- sprite.h | 15 +++++++++++ table/build_industry.h | 16 ++++++++++++ table/industry_land.h | 15 ++++++++++- table/town_land.h | 2 +- table/unmovable_land.h | 10 ++++++++ town_cmd.c | 30 ++++++---------------- unmovable_cmd.c | 13 +--------- 8 files changed, 70 insertions(+), 87 deletions(-) diff --git a/industry_cmd.c b/industry_cmd.c index ff66bfd984..9da3044cdb 100644 --- a/industry_cmd.c +++ b/industry_cmd.c @@ -20,6 +20,8 @@ #include "economy.h" #include "sound.h" #include "variables.h" +#include "table/industry_land.h" +#include "table/build_industry.h" enum { /* Max industries: 64000 (8 * 8000) */ @@ -47,52 +49,6 @@ void ShowIndustryViewWindow(int industry); void BuildOilRig(TileIndex tile); void DeleteOilRig(TileIndex tile); -typedef struct DrawIndustryTileStruct { - uint32 sprite_1; - uint32 sprite_2; - - byte subtile_x:4; - byte subtile_y:4; - byte width:4; - byte height:4; - byte dz; - byte proc; -} DrawIndustryTileStruct; - - -typedef struct DrawIndustrySpec1Struct { - byte x; - byte image_1; - byte image_2; - byte image_3; -} DrawIndustrySpec1Struct; - -typedef struct DrawIndustrySpec4Struct { - byte image_1; - byte image_2; - byte image_3; -} DrawIndustrySpec4Struct; - -typedef struct IndustryTileTable { - TileIndexDiffC ti; - IndustryGfx gfx; -} IndustryTileTable; - -typedef struct IndustrySpec { - const IndustryTileTable *const *table; - byte num_table; - byte a,b,c; - CargoID produced_cargo[2]; - byte production_rate[2]; - CargoID accepts_cargo[3]; - byte check_proc; -} IndustrySpec; - -#include "table/industry_land.h" -#include "table/build_industry.h" - - - static const IndustryType _industry_close_mode[IT_END] = { /* COAL_MINE */ INDUSTRYLIFE_PRODUCTION, /* POWER_STATION */ INDUSTRYLIFE_NOT_CLOSABLE, @@ -367,7 +323,7 @@ static IndustryDrawTileProc * const _industry_draw_tile_procs[5] = { static void DrawTile_Industry(TileInfo *ti) { const Industry* ind; - const DrawIndustryTileStruct *dits; + const DrawBuildingsTileStruct *dits; byte z; uint32 image, ormod; @@ -378,7 +334,7 @@ static void DrawTile_Industry(TileInfo *ti) /* Retrieve pointer to the draw industry tile struct */ dits = &_industry_draw_tile_data[GetIndustryGfx(ti->tile) << 2 | GetIndustryConstructionStage(ti->tile)]; - image = dits->sprite_1; + image = dits->ground; if (image & PALETTE_MODIFIER_COLOR && (image & PALETTE_SPRITE_MASK) == 0) image |= ormod; @@ -394,7 +350,7 @@ static void DrawTile_Industry(TileInfo *ti) } /* Add industry on top of the ground? */ - image = dits->sprite_2; + image = dits->building; if (image != 0) { if (image & PALETTE_MODIFIER_COLOR && (image & PALETTE_SPRITE_MASK) == 0) image |= ormod; @@ -413,7 +369,7 @@ static void DrawTile_Industry(TileInfo *ti) } { - int proc = dits->proc - 1; + int proc = dits->draw_proc - 1; if (proc >= 0) _industry_draw_tile_procs[proc](ti); } } diff --git a/sprite.h b/sprite.h index f665fb0d58..1af416e1d3 100644 --- a/sprite.h +++ b/sprite.h @@ -22,6 +22,21 @@ typedef struct DrawTileSprites { const DrawTileSeqStruct* seq; } DrawTileSprites; +/** + * This structure is the same for both Industries and Houses. + * Buildings here reference a general type of construction + */ +typedef struct DrawBuildingsTileStruct { + SpriteID ground; + SpriteID building; + byte subtile_x:4; + byte subtile_y:4; + byte width:4; + byte height:4; + byte dz; + byte draw_proc; /* this allows to specify a special drawing procedure.*/ +} DrawBuildingsTileStruct; + // Iterate through all DrawTileSeqStructs in DrawTileSprites. #define foreach_draw_tile_seq(idx, list) for (idx = list; ((byte) idx->delta_x) != 0x80; idx++) diff --git a/table/build_industry.h b/table/build_industry.h index 44d83040f5..82741b7819 100644 --- a/table/build_industry.h +++ b/table/build_industry.h @@ -1,5 +1,21 @@ /* $Id$ */ + +typedef struct IndustryTileTable { + TileIndexDiffC ti; + IndustryGfx gfx; +} IndustryTileTable; + +typedef struct IndustrySpec { + const IndustryTileTable *const *table; + byte num_table; + byte a,b,c; + CargoID produced_cargo[2]; + byte production_rate[2]; + CargoID accepts_cargo[3]; + byte check_proc; +} IndustrySpec; + #define MK(x,y, m) {{x, y}, m} #define MKEND {{-0x80, 0}, 0} diff --git a/table/industry_land.h b/table/industry_land.h index 08543df1c1..9844d66dfe 100644 --- a/table/industry_land.h +++ b/table/industry_land.h @@ -1,8 +1,21 @@ /* $Id$ */ +typedef struct DrawIndustrySpec1Struct { + byte x; + byte image_1; + byte image_2; + byte image_3; +} DrawIndustrySpec1Struct; + +typedef struct DrawIndustrySpec4Struct { + byte image_1; + byte image_2; + byte image_3; +} DrawIndustrySpec4Struct; + #define M(s1, s2, sx, sy, w, h, dz, p) { s1, s2, sx, sy, w - 1, h - 1, dz, p } -static const DrawIndustryTileStruct _industry_draw_tile_data[700] = { +static const DrawBuildingsTileStruct _industry_draw_tile_data[700] = { M( 0xf54, 0x7db, 7, 0, 9, 9, 10, 0), M( 0xf54, 0x7dc, 7, 0, 9, 9, 30, 0), M( 0xf54, 0x7dd, 7, 0, 9, 9, 30, 0), diff --git a/table/town_land.h b/table/town_land.h index 9225761fd4..c9a940fb86 100644 --- a/table/town_land.h +++ b/table/town_land.h @@ -28,7 +28,7 @@ enum { */ #define M(s1, s2, sx, sy, w, h, dz, p) {s1, s2, sx, sy, w - 1, h - 1, dz, p} -static const DrawTownTileStruct _town_draw_tile_data[] = { +static const DrawBuildingsTileStruct _town_draw_tile_data[] = { M( 0xf54, 0x58d, 0, 0, 14, 14, 8, 0), M( 0xf54, 0x58e, 0, 0, 14, 14, 60, 0), M( 0xf54, 0x58f, 0, 0, 14, 14, 60, 0), diff --git a/table/unmovable_land.h b/table/unmovable_land.h index 15c2263331..490c4564b2 100644 --- a/table/unmovable_land.h +++ b/table/unmovable_land.h @@ -1,5 +1,15 @@ /* $Id$ */ +typedef struct DrawTileUnmovableStruct { + uint16 image; + byte subcoord_x; + byte subcoord_y; + byte width; + byte height; + byte z_size; + byte unused; +} DrawTileUnmovableStruct; + #define TILE_SEQ_END() { 0x80, 0, 0, 0, 0, 0, 0 } static const DrawTileUnmovableStruct _draw_tile_unmovable_data[] = { diff --git a/town_cmd.c b/town_cmd.c index 359c780b7e..ca92b1b284 100644 --- a/town_cmd.c +++ b/town_cmd.c @@ -26,6 +26,7 @@ #include "water_map.h" #include "variables.h" #include "bridge.h" +#include "table/town_land.h" enum { /* Max towns: 64000 (8 * 8000) */ @@ -54,21 +55,6 @@ static bool BuildTownHouse(Town *t, TileIndex tile); static void ClearTownHouse(Town *t, TileIndex tile); static void DoBuildTownHouse(Town *t, TileIndex tile); -typedef struct DrawTownTileStruct { - SpriteID sprite_1; - SpriteID sprite_2; - - byte subtile_x:4; - byte subtile_y:4; - byte width:4; - byte height:4; - byte dz; - byte proc; -} DrawTownTileStruct; - -#include "table/town_land.h" - - static void TownDrawHouseLift(const TileInfo *ti) { AddChildSpriteScreen(SPR_LIFT, 14, 60 - GetLiftPosition(ti->tile)); @@ -82,22 +68,20 @@ static TownDrawTileProc * const _town_draw_tile_procs[1] = { static void DrawTile_Town(TileInfo *ti) { - const DrawTownTileStruct *dcts; + const DrawBuildingsTileStruct *dcts; byte z; uint32 image; /* Retrieve pointer to the draw town tile struct */ { /* this "randomizes" on the (up to) 4 variants of a building */ - byte gfx = GetHouseType(ti->tile); - byte stage = GetHouseBuildingStage(ti->tile); uint variant; variant = ti->x >> 4; variant ^= ti->x >> 6; variant ^= ti->y >> 4; variant -= ti->y >> 6; variant &= 3; - dcts = &_town_draw_tile_data[gfx << 4 | variant << 2 | stage]; + dcts = &_town_draw_tile_data[GetHouseType(ti->tile) << 4 | variant << 2 | GetHouseBuildingStage(ti->tile)]; } z = ti->z; @@ -105,15 +89,15 @@ static void DrawTile_Town(TileInfo *ti) /* Add bricks below the house? */ if (ti->tileh != SLOPE_FLAT) { AddSortableSpriteToDraw(SPR_FOUNDATION_BASE + ti->tileh, ti->x, ti->y, 16, 16, 7, z); - AddChildSpriteScreen(dcts->sprite_1, 31, 1); + AddChildSpriteScreen(dcts->ground, 31, 1); z += TILE_HEIGHT; } else { /* Else draw regular ground */ - DrawGroundSprite(dcts->sprite_1); + DrawGroundSprite(dcts->ground); } /* Add a house on top of the ground? */ - image = dcts->sprite_2; + image = dcts->building; if (image != 0) { if (_display_opt & DO_TRANS_BUILDINGS) MAKE_TRANSPARENT(image); @@ -129,7 +113,7 @@ static void DrawTile_Town(TileInfo *ti) } { - int proc = dcts->proc - 1; + int proc = dcts->draw_proc - 1; if (proc >= 0) _town_draw_tile_procs[proc](ti); } diff --git a/unmovable_cmd.c b/unmovable_cmd.c index e6faf9a6b1..cc97512a78 100644 --- a/unmovable_cmd.c +++ b/unmovable_cmd.c @@ -17,6 +17,7 @@ #include "sprite.h" #include "unmovable_map.h" #include "variables.h" +#include "table/unmovable_land.h" /** Destroy a HQ. * During normal gameplay you can only implicitely destroy a HQ when you are @@ -119,18 +120,6 @@ int32 CmdBuildCompanyHQ(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) return cost; } -typedef struct DrawTileUnmovableStruct { - uint16 image; - byte subcoord_x; - byte subcoord_y; - byte width; - byte height; - byte z_size; - byte unused; -} DrawTileUnmovableStruct; - -#include "table/unmovable_land.h" - static void DrawTile_Unmovable(TileInfo *ti) { uint32 image, ormod;