(svn r4181) CodeChange : Replaced [G/S]etMapExtraBits by [G/S]etTropicZone. Although it was an accessor, nor his usage nor the values were clear.

pull/155/head
belugas 19 years ago
parent 1f17d91b47
commit 1b28d92fc8

@ -603,13 +603,13 @@ static void TileLoopClearDesert(TileIndex tile)
{ {
if (IsClearGround(tile, CL_DESERT)) return; if (IsClearGround(tile, CL_DESERT)) return;
if (GetMapExtraBits(tile) == 1) { if (GetTropicZone(tile) == TROPICZONE_DESERT) {
SetClearGroundDensity(tile, CL_DESERT, 3); SetClearGroundDensity(tile, CL_DESERT, 3);
} else { } else {
if (GetMapExtraBits(tile + TileDiffXY( 1, 0)) != 1 && if (GetTropicZone(tile + TileDiffXY( 1, 0)) != TROPICZONE_DESERT &&
GetMapExtraBits(tile + TileDiffXY(-1, 0)) != 1 && GetTropicZone(tile + TileDiffXY(-1, 0)) != TROPICZONE_DESERT &&
GetMapExtraBits(tile + TileDiffXY( 0, 1)) != 1 && GetTropicZone(tile + TileDiffXY( 0, 1)) != TROPICZONE_DESERT &&
GetMapExtraBits(tile + TileDiffXY( 0, -1)) != 1) GetTropicZone(tile + TileDiffXY( 0, -1)) != TROPICZONE_DESERT)
return; return;
SetClearGroundDensity(tile, CL_DESERT, 1); SetClearGroundDensity(tile, CL_DESERT, 1);
} }

@ -1031,7 +1031,7 @@ static void ChopLumberMillTrees(Industry *i)
SndPlayTileFx(SND_38_CHAINSAW, tile); SndPlayTileFx(SND_38_CHAINSAW, tile);
DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR); DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
SetMapExtraBits(tile, 0); SetTropicZone(tile, TROPICZONE_INVALID);
i->cargo_waiting[0] = min(0xffff, i->cargo_waiting[0] + 45); i->cargo_waiting[0] = min(0xffff, i->cargo_waiting[0] + 45);
@ -1181,7 +1181,7 @@ static bool CheckNewIndustry_Farm(TileIndex tile, int type)
static bool CheckNewIndustry_Plantation(TileIndex tile, int type) static bool CheckNewIndustry_Plantation(TileIndex tile, int type)
{ {
if (GetMapExtraBits(tile) == 1) { if (GetTropicZone(tile) == TROPICZONE_DESERT) {
_error_message = STR_0239_SITE_UNSUITABLE; _error_message = STR_0239_SITE_UNSUITABLE;
return false; return false;
} }
@ -1191,7 +1191,7 @@ static bool CheckNewIndustry_Plantation(TileIndex tile, int type)
static bool CheckNewIndustry_Water(TileIndex tile, int type) static bool CheckNewIndustry_Water(TileIndex tile, int type)
{ {
if (GetMapExtraBits(tile) != 1) { if (GetTropicZone(tile) != TROPICZONE_DESERT) {
_error_message = STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT; _error_message = STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT;
return false; return false;
} }
@ -1201,7 +1201,7 @@ static bool CheckNewIndustry_Water(TileIndex tile, int type)
static bool CheckNewIndustry_Lumbermill(TileIndex tile, int type) static bool CheckNewIndustry_Lumbermill(TileIndex tile, int type)
{ {
if (GetMapExtraBits(tile) != 2) { if (GetTropicZone(tile) != TROPICZONE_RAINFOREST) {
_error_message = STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST; _error_message = STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST;
return false; return false;
} }

@ -590,7 +590,7 @@ static void CreateDesertOrRainForest(void)
if (TileHeight(t) >= 4 || IsTileType(t, MP_WATER)) break; if (TileHeight(t) >= 4 || IsTileType(t, MP_WATER)) break;
} }
if (data == endof(_make_desert_or_rainforest_data)) if (data == endof(_make_desert_or_rainforest_data))
SetMapExtraBits(tile, 1); SetTropicZone(tile, TROPICZONE_DESERT);
} }
for (i = 0; i != 256; i++) for (i = 0; i != 256; i++)
@ -603,7 +603,7 @@ static void CreateDesertOrRainForest(void)
if (IsTileType(t, MP_CLEAR) && IsClearGround(t, CL_DESERT)) break; if (IsTileType(t, MP_CLEAR) && IsClearGround(t, CL_DESERT)) break;
} }
if (data == endof(_make_desert_or_rainforest_data)) if (data == endof(_make_desert_or_rainforest_data))
SetMapExtraBits(tile, 2); SetTropicZone(tile, TROPICZONE_RAINFOREST);
} }
} }

@ -1814,7 +1814,7 @@ static void TileLoop_Track(TileIndex tile)
break; break;
case LT_DESERT: case LT_DESERT:
if (GetMapExtraBits(tile) == 1) { /* convert into desert? */ if (GetTropicZone(tile) == TROPICZONE_DESERT) { /* convert into desert? */
new_ground = RAIL_GROUND_ICE_DESERT; new_ground = RAIL_GROUND_ICE_DESERT;
goto modify_me; goto modify_me;
} }

@ -920,7 +920,7 @@ static void TileLoop_Road(TileIndex tile)
break; break;
case LT_DESERT: case LT_DESERT:
if (GetMapExtraBits(tile) == 1 && !(_m[tile].m4 & 0x80)) { if (GetTropicZone(tile) == TROPICZONE_DESERT && !(_m[tile].m4 & 0x80)) {
_m[tile].m4 |= 0x80; _m[tile].m4 |= 0x80;
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
} }

@ -55,7 +55,7 @@ static void GenerateDesertArea(TileIndex end, TileIndex start)
_generating_world = true; _generating_world = true;
BEGIN_TILE_LOOP(tile, size_x, size_y, TileXY(sx, sy)) { BEGIN_TILE_LOOP(tile, size_x, size_y, TileXY(sx, sy)) {
if (GetTileType(tile) != MP_WATER) { if (GetTileType(tile) != MP_WATER) {
SetMapExtraBits(tile, (_ctrl_pressed) ? 0 : 1); SetTropicZone(tile, (_ctrl_pressed) ? TROPICZONE_INVALID : TROPICZONE_DESERT);
DoCommandP(tile, 0, 0, NULL, CMD_LANDSCAPE_CLEAR); DoCommandP(tile, 0, 0, NULL, CMD_LANDSCAPE_CLEAR);
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
} }

@ -3,18 +3,6 @@
#include "stdafx.h" #include "stdafx.h"
#include "tile.h" #include "tile.h"
void SetMapExtraBits(TileIndex tile, byte bits)
{
assert(tile < MapSize());
SB(_m[tile].extra, 0, 2, bits & 3);
}
uint GetMapExtraBits(TileIndex tile)
{
assert(tile < MapSize());
return GB(_m[tile].extra, 0, 2);
}
/** Converts the heights of 4 corners into a tileh, and returns the minimum height of the tile /** Converts the heights of 4 corners into a tileh, and returns the minimum height of the tile
* @param n,w,e,s the four corners * @param n,w,e,s the four corners
* @param h uint pointer to write the height to * @param h uint pointer to write the height to

@ -20,9 +20,11 @@ typedef enum TileTypes {
MP_UNMOVABLE, MP_UNMOVABLE,
} TileType; } TileType;
typedef enum TropicZones {
void SetMapExtraBits(TileIndex tile, byte flags); TROPICZONE_INVALID = 0,
uint GetMapExtraBits(TileIndex tile); TROPICZONE_DESERT = 1,
TROPICZONE_RAINFOREST = 2,
} TropicZone;
uint GetTileh(uint n, uint w, uint e, uint s, uint *h); uint GetTileh(uint n, uint w, uint e, uint s, uint *h);
uint GetTileSlope(TileIndex tile, uint *h); uint GetTileSlope(TileIndex tile, uint *h);
@ -106,4 +108,27 @@ static inline bool IsTileOwner(TileIndex tile, Owner owner)
return GetTileOwner(tile) == owner; return GetTileOwner(tile) == owner;
} }
/**
* Set the tropic zone
* @param tile the tile to set the zone of
* @param type the new type
* @pre assert(tile < MapSize());
*/
static inline void SetTropicZone(TileIndex tile, TropicZone type)
{
assert(tile < MapSize());
SB(_m[tile].extra, 0, 2, type);
}
/**
* Get the tropic zone
* @param tile the tile to get the zone of
* @pre assert(tile < MapSize());
* @return the zone type
*/
static inline TropicZone GetTropicZone(TileIndex tile)
{
assert(tile < MapSize());
return (TropicZone)GB(_m[tile].extra, 0, 2);
}
#endif /* TILE_H */ #endif /* TILE_H */

@ -1762,7 +1762,7 @@ static void UpdateTownGrowRate(Town *t)
if (TilePixelHeight(t->xy) >= _opt.snow_line && t->act_food == 0 && t->population > 90) if (TilePixelHeight(t->xy) >= _opt.snow_line && t->act_food == 0 && t->population > 90)
return; return;
} else if (_opt.landscape == LT_DESERT) { } else if (_opt.landscape == LT_DESERT) {
if (GetMapExtraBits(t->xy) == 1 && (t->act_food==0 || t->act_water==0) && t->population > 60) if (GetTropicZone(t->xy) == TROPICZONE_DESERT && (t->act_food==0 || t->act_water==0) && t->population > 60)
return; return;
} }

@ -26,10 +26,10 @@ static TreeType GetRandomTreeType(TileIndex tile, uint seed)
return seed * TR_COUNT_SUB_ARCTIC / 256 + TR_SUB_ARCTIC; return seed * TR_COUNT_SUB_ARCTIC / 256 + TR_SUB_ARCTIC;
case LT_DESERT: case LT_DESERT:
switch (GetMapExtraBits(tile)) { switch (GetTropicZone(tile)) {
case 0: return seed * TR_COUNT_SUB_TROPICAL / 256 + TR_SUB_TROPICAL; case TROPICZONE_INVALID: return seed * TR_COUNT_SUB_TROPICAL / 256 + TR_SUB_TROPICAL;
case 1: return (seed > 12) ? TR_INVALID : TR_CACTUS; case TROPICZONE_DESERT: return (seed > 12) ? TR_INVALID : TR_CACTUS;
default: return seed * TR_COUNT_RAINFOREST / 256 + TR_RAINFOREST; default: return seed * TR_COUNT_RAINFOREST / 256 + TR_RAINFOREST;
} }
default: default:
@ -105,7 +105,7 @@ void PlaceTreesRandomly(void)
do { do {
uint32 r = Random(); uint32 r = Random();
TileIndex tile = RandomTileSeed(r); TileIndex tile = RandomTileSeed(r);
if (IsTileType(tile, MP_CLEAR) && GetMapExtraBits(tile) == 2) { if (IsTileType(tile, MP_CLEAR) && GetTropicZone(tile) == TROPICZONE_RAINFOREST) {
PlaceTree(tile, r); PlaceTree(tile, r);
} }
} while (--i); } while (--i);
@ -208,7 +208,7 @@ int32 CmdPlantTree(int ex, int ey, uint32 flags, uint32 p1, uint32 p2)
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
if (_game_mode == GM_EDITOR && IS_INT_INSIDE(treetype, TR_RAINFOREST, TR_CACTUS)) if (_game_mode == GM_EDITOR && IS_INT_INSIDE(treetype, TR_RAINFOREST, TR_CACTUS))
SetMapExtraBits(tile, 2); SetTropicZone(tile, TROPICZONE_RAINFOREST);
} }
cost += _price.build_trees; cost += _price.build_trees;
break; break;
@ -376,15 +376,15 @@ static void AnimateTile_Trees(TileIndex tile)
static void TileLoopTreesDesert(TileIndex tile) static void TileLoopTreesDesert(TileIndex tile)
{ {
switch (GetMapExtraBits(tile)) { switch (GetTropicZone(tile)) {
case 1: case TROPICZONE_DESERT:
if (GetTreeGround(tile) != TR_SNOW_DESERT) { if (GetTreeGround(tile) != TR_SNOW_DESERT) {
SetTreeGroundDensity(tile, TR_SNOW_DESERT, 3); SetTreeGroundDensity(tile, TR_SNOW_DESERT, 3);
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
} }
break; break;
case 2: { case TROPICZONE_RAINFOREST: {
static const SoundFx forest_sounds[] = { static const SoundFx forest_sounds[] = {
SND_42_LOON_BIRD, SND_42_LOON_BIRD,
SND_43_LION, SND_43_LION,
@ -396,6 +396,8 @@ static void TileLoopTreesDesert(TileIndex tile)
if (CHANCE16I(1, 200, r)) SndPlayTileFx(forest_sounds[GB(r, 16, 2)], tile); if (CHANCE16I(1, 200, r)) SndPlayTileFx(forest_sounds[GB(r, 16, 2)], tile);
break; break;
} }
default: break;
} }
} }
@ -452,7 +454,9 @@ static void TileLoop_Trees(TileIndex tile)
switch (GetTreeGrowth(tile)) { switch (GetTreeGrowth(tile)) {
case 3: /* regular sized tree */ case 3: /* regular sized tree */
if (_opt.landscape == LT_DESERT && GetTreeType(tile) != TR_CACTUS && GetMapExtraBits(tile) == 1) { if (_opt.landscape == LT_DESERT &&
GetTreeType(tile) != TR_CACTUS &&
GetTropicZone(tile) == TROPICZONE_DESERT) {
AddTreeGrowth(tile, 1); AddTreeGrowth(tile, 1);
} else { } else {
switch (GB(Random(), 0, 3)) { switch (GB(Random(), 0, 3)) {
@ -526,7 +530,7 @@ void OnTick_Trees(void)
/* place a tree at a random rainforest spot */ /* place a tree at a random rainforest spot */
if (_opt.landscape == LT_DESERT && if (_opt.landscape == LT_DESERT &&
(r = Random(), tile = RandomTileSeed(r), GetMapExtraBits(tile) == 2) && (r = Random(), tile = RandomTileSeed(r), GetTropicZone(tile) == TROPICZONE_RAINFOREST) &&
IsTileType(tile, MP_CLEAR) && IsTileType(tile, MP_CLEAR) &&
(ct = GetClearGround(tile), ct == CL_GRASS || ct == CL_ROUGH) && (ct = GetClearGround(tile), ct == CL_GRASS || ct == CL_ROUGH) &&
(tree = GetRandomTreeType(tile, GB(r, 24, 8))) != TR_INVALID) { (tree = GetRandomTreeType(tile, GB(r, 24, 8))) != TR_INVALID) {

@ -1225,7 +1225,7 @@ static void TileLoop_TunnelBridge(TileIndex tile)
break; break;
case LT_DESERT: case LT_DESERT:
if (GetMapExtraBits(tile) == 1 && !(_m[tile].m4 & 0x80)) { if (GetTropicZone(tile) == TROPICZONE_DESERT && !(_m[tile].m4 & 0x80)) {
_m[tile].m4 |= 0x80; _m[tile].m4 |= 0x80;
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
} }

Loading…
Cancel
Save