mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-20 20:23:03 +02:00
Moved hardcoded terrain palette-cycling animations to config
This commit is contained in:
parent
4911cf0bd4
commit
3bce245780
@ -145,16 +145,8 @@ void MapRendererTerrain::renderTile(IMapRendererContext & context, Canvas & targ
|
||||
|
||||
const auto & image = storage.find(terrainIndex, rotationIndex, imageIndex);
|
||||
|
||||
if(mapTile.terType->getId() == ETerrainId::LAVA)
|
||||
{
|
||||
image->shiftPalette(246, 9, context.terrainImageIndex(9));
|
||||
}
|
||||
|
||||
if(mapTile.terType->getId() == ETerrainId::WATER)
|
||||
{
|
||||
image->shiftPalette(229, 12, context.terrainImageIndex(12));
|
||||
image->shiftPalette(242, 14, context.terrainImageIndex(14));
|
||||
}
|
||||
for( auto const & element : mapTile.terType->paletteAnimation)
|
||||
image->shiftPalette(element.start, element.length, context.terrainImageIndex(element.length));
|
||||
|
||||
target.draw(image, Point(0, 0));
|
||||
}
|
||||
@ -163,7 +155,7 @@ uint8_t MapRendererTerrain::checksum(IMapRendererContext & context, const int3 &
|
||||
{
|
||||
const TerrainTile & mapTile = context.getMapTile(coordinates);
|
||||
|
||||
if(mapTile.terType->getId() == ETerrainId::LAVA || mapTile.terType->getId() == ETerrainId::WATER)
|
||||
if(!mapTile.terType->paletteAnimation.empty())
|
||||
return context.terrainImageIndex(250);
|
||||
return 0xff - 1;
|
||||
}
|
||||
@ -188,23 +180,8 @@ void MapRendererRiver::renderTile(IMapRendererContext & context, Canvas & target
|
||||
|
||||
const auto & image = storage.find(terrainIndex, rotationIndex, imageIndex);
|
||||
|
||||
if(mapTile.riverType->getId() == River::WATER_RIVER)
|
||||
{
|
||||
image->shiftPalette(183, 12, context.terrainImageIndex(12));
|
||||
image->shiftPalette(195, 6, context.terrainImageIndex(6));
|
||||
}
|
||||
|
||||
if(mapTile.riverType->getId() == River::MUD_RIVER)
|
||||
{
|
||||
image->shiftPalette(228, 12, context.terrainImageIndex(12));
|
||||
image->shiftPalette(183, 6, context.terrainImageIndex(6));
|
||||
image->shiftPalette(240, 6, context.terrainImageIndex(6));
|
||||
}
|
||||
|
||||
if(mapTile.riverType->getId() == River::LAVA_RIVER)
|
||||
{
|
||||
image->shiftPalette(240, 9, context.terrainImageIndex(9));
|
||||
}
|
||||
for( auto const & element : mapTile.riverType->paletteAnimation)
|
||||
image->shiftPalette(element.start, element.length, context.terrainImageIndex(element.length));
|
||||
|
||||
target.draw(image, Point(0, 0));
|
||||
}
|
||||
@ -213,9 +190,7 @@ uint8_t MapRendererRiver::checksum(IMapRendererContext & context, const int3 & c
|
||||
{
|
||||
const TerrainTile & mapTile = context.getMapTile(coordinates);
|
||||
|
||||
if(mapTile.riverType->getId() == River::WATER_RIVER ||
|
||||
mapTile.riverType->getId() == River::MUD_RIVER ||
|
||||
mapTile.riverType->getId() == River::LAVA_RIVER)
|
||||
if(!mapTile.riverType->paletteAnimation.empty())
|
||||
return context.terrainImageIndex(250);
|
||||
return 0xff-1;
|
||||
}
|
||||
|
@ -1,34 +1,46 @@
|
||||
{
|
||||
"waterRiver":
|
||||
{
|
||||
"index": 1,
|
||||
"text" : "Water river",
|
||||
"shortIdentifier": "rw", //must be 2 characters
|
||||
"tilesFilename": "clrrvr",
|
||||
"delta": "clrdelt"
|
||||
},
|
||||
"iceRiver":
|
||||
{
|
||||
"index": 2,
|
||||
"text" : "Ice river",
|
||||
"shortIdentifier": "ri",
|
||||
"tilesFilename": "icyrvr",
|
||||
"delta": "icedelt"
|
||||
},
|
||||
"mudRiver":
|
||||
{
|
||||
"index": 3,
|
||||
"text" : "Mud river",
|
||||
"shortIdentifier": "rm",
|
||||
"tilesFilename": "mudrvr",
|
||||
"delta": "muddelt"
|
||||
},
|
||||
"lavaRiver":
|
||||
{
|
||||
"index": 4,
|
||||
"text" : "Lava river",
|
||||
"shortIdentifier": "rl",
|
||||
"tilesFilename": "lavrvr",
|
||||
"delta": "lavdelt"
|
||||
}
|
||||
"waterRiver":
|
||||
{
|
||||
"index": 1,
|
||||
"text" : "Water river",
|
||||
"shortIdentifier": "rw", //must be 2 characters
|
||||
"tilesFilename": "clrrvr",
|
||||
"delta": "clrdelt",
|
||||
"paletteAnimation" : [
|
||||
{ "start" : 183, "length" : 12 },
|
||||
{ "start" : 195, "length" : 6 }
|
||||
]
|
||||
},
|
||||
"iceRiver":
|
||||
{
|
||||
"index": 2,
|
||||
"text" : "Ice river",
|
||||
"shortIdentifier": "ri",
|
||||
"tilesFilename": "icyrvr",
|
||||
"delta": "icedelt"
|
||||
},
|
||||
"mudRiver":
|
||||
{
|
||||
"index": 3,
|
||||
"text" : "Mud river",
|
||||
"shortIdentifier": "rm",
|
||||
"tilesFilename": "mudrvr",
|
||||
"delta": "muddelt",
|
||||
"paletteAnimation" : [
|
||||
{ "start" : 228, "length" : 12 },
|
||||
{ "start" : 183, "length" : 6 },
|
||||
{ "start" : 240, "length" : 6 }
|
||||
]
|
||||
},
|
||||
"lavaRiver":
|
||||
{
|
||||
"index": 4,
|
||||
"text" : "Lava river",
|
||||
"shortIdentifier": "rl",
|
||||
"tilesFilename": "lavrvr",
|
||||
"delta": "lavdelt",
|
||||
"paletteAnimation" : [
|
||||
{ "start" : 240, "length" : 9 }
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -27,6 +27,23 @@
|
||||
"type" : "string",
|
||||
"description" : "Name of file with river delta graphics"
|
||||
},
|
||||
"paletteAnimation" : {
|
||||
"type" : "array",
|
||||
"description" : "If defined, terrain will be animated using palette color cycling effect",
|
||||
"items" :
|
||||
{
|
||||
"type" : "object",
|
||||
"additionalProperties" : false,
|
||||
"properties" : {
|
||||
"start" : {
|
||||
"type" : "number"
|
||||
},
|
||||
"length" : {
|
||||
"type" : "number"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"index" :
|
||||
{
|
||||
"type" : "number",
|
||||
|
@ -47,6 +47,23 @@
|
||||
"type" : "string",
|
||||
"description" : "River type which should be used for that terrain"
|
||||
},
|
||||
"paletteAnimation" : {
|
||||
"type" : "array",
|
||||
"description" : "If defined, terrain will be animated using palette color cycling effect",
|
||||
"items" :
|
||||
{
|
||||
"type" : "object",
|
||||
"additionalProperties" : false,
|
||||
"properties" : {
|
||||
"start" : {
|
||||
"type" : "number"
|
||||
},
|
||||
"length" : {
|
||||
"type" : "number"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"battleFields" :
|
||||
{
|
||||
"type" : "array",
|
||||
|
@ -122,7 +122,10 @@
|
||||
"battleFields" : ["lava"],
|
||||
"rockTerrain" : "rock",
|
||||
"horseSound" : "horse07",
|
||||
"horseSoundPenalty" : "horse27"
|
||||
"horseSoundPenalty" : "horse27",
|
||||
"paletteAnimation" : [
|
||||
{ "start" : 246, "length" : 9 }
|
||||
]
|
||||
},
|
||||
"water" :
|
||||
{
|
||||
@ -139,6 +142,10 @@
|
||||
"terrainViewPatterns" : "water",
|
||||
"horseSound" : "horse08",
|
||||
"horseSoundPenalty" : "horse08",
|
||||
"paletteAnimation" : [
|
||||
{ "start" : 229, "length" : 12 },
|
||||
{ "start" : 242, "length" : 12 }
|
||||
],
|
||||
"sounds": {
|
||||
"ambient": ["LOOPOCEA"]
|
||||
}
|
||||
|
@ -40,6 +40,15 @@ RiverType * RiverTypeHandler::loadFromJson(
|
||||
info->shortIdentifier = json["shortIdentifier"].String();
|
||||
info->deltaName = json["delta"].String();
|
||||
|
||||
for(const auto & t : json["paletteAnimation"].Vector())
|
||||
{
|
||||
RiverPaletteAnimation element{
|
||||
static_cast<int>(t["start"].Integer()),
|
||||
static_cast<int>(t["length"].Integer())
|
||||
};
|
||||
info->paletteAnimation.push_back(element);
|
||||
}
|
||||
|
||||
VLC->generaltexth->registerString(scope, info->getNameTextID(), json["text"].String());
|
||||
|
||||
return info;
|
||||
|
@ -17,6 +17,20 @@
|
||||
|
||||
VCMI_LIB_NAMESPACE_BEGIN
|
||||
|
||||
struct DLL_LINKAGE RiverPaletteAnimation
|
||||
{
|
||||
/// index of first color to cycle
|
||||
int32_t start;
|
||||
/// total numbers of colors to cycle
|
||||
int32_t length;
|
||||
|
||||
template <typename Handler> void serialize(Handler& h, const int version)
|
||||
{
|
||||
h & start;
|
||||
h & length;
|
||||
}
|
||||
};
|
||||
|
||||
class DLL_LINKAGE RiverType : public EntityT<RiverId>
|
||||
{
|
||||
friend class RiverTypeHandler;
|
||||
@ -39,6 +53,8 @@ public:
|
||||
std::string shortIdentifier;
|
||||
std::string deltaName;
|
||||
|
||||
std::vector<RiverPaletteAnimation> paletteAnimation;
|
||||
|
||||
RiverType();
|
||||
|
||||
template <typename Handler> void serialize(Handler& h, const int version)
|
||||
@ -48,6 +64,7 @@ public:
|
||||
h & modScope;
|
||||
h & deltaName;
|
||||
h & id;
|
||||
h & paletteAnimation;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -73,6 +73,15 @@ TerrainType * TerrainTypeHandler::loadFromJson( const std::string & scope, const
|
||||
});
|
||||
}
|
||||
|
||||
for(const auto & t : json["paletteAnimation"].Vector())
|
||||
{
|
||||
TerrainPaletteAnimation element{
|
||||
static_cast<int>(t["start"].Integer()),
|
||||
static_cast<int>(t["length"].Integer())
|
||||
};
|
||||
info->paletteAnimation.push_back(element);
|
||||
}
|
||||
|
||||
info->shortIdentifier = json["shortIdentifier"].String();
|
||||
assert(info->shortIdentifier.length() == 2);
|
||||
|
||||
|
@ -18,6 +18,21 @@
|
||||
|
||||
VCMI_LIB_NAMESPACE_BEGIN
|
||||
|
||||
struct DLL_LINKAGE TerrainPaletteAnimation
|
||||
{
|
||||
/// index of first color to cycle
|
||||
int32_t start;
|
||||
/// total numbers of colors to cycle
|
||||
int32_t length;
|
||||
|
||||
template <typename Handler> void serialize(Handler& h, const int version)
|
||||
{
|
||||
h & start;
|
||||
h & length;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class DLL_LINKAGE TerrainType : public EntityT<TerrainId>
|
||||
{
|
||||
friend class TerrainTypeHandler;
|
||||
@ -57,6 +72,8 @@ public:
|
||||
std::string horseSound;
|
||||
std::string horseSoundPenalty;
|
||||
|
||||
std::vector<TerrainPaletteAnimation> paletteAnimation;
|
||||
|
||||
TerrainId rockTerrain;
|
||||
RiverId river;
|
||||
int moveCost;
|
||||
@ -87,6 +104,7 @@ public:
|
||||
h & terrainViewPatterns;
|
||||
h & rockTerrain;
|
||||
h & river;
|
||||
h & paletteAnimation;
|
||||
|
||||
h & id;
|
||||
h & moveCost;
|
||||
|
@ -14,8 +14,8 @@
|
||||
|
||||
VCMI_LIB_NAMESPACE_BEGIN
|
||||
|
||||
const ui32 SERIALIZATION_VERSION = 823;
|
||||
const ui32 MINIMAL_SERIALIZATION_VERSION = 823;
|
||||
const ui32 SERIALIZATION_VERSION = 824;
|
||||
const ui32 MINIMAL_SERIALIZATION_VERSION = 824;
|
||||
const std::string SAVEGAME_MAGIC = "VCMISVG";
|
||||
|
||||
class CHero;
|
||||
|
Loading…
Reference in New Issue
Block a user