mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	Moved hardcoded terrain palette-cycling animations to config
This commit is contained in:
		| @@ -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; | ||||
| } | ||||
|   | ||||
| @@ -5,7 +5,11 @@ | ||||
| 		"text" : "Water river", | ||||
| 		"shortIdentifier": "rw", //must be 2 characters | ||||
| 		"tilesFilename": "clrrvr", | ||||
|         "delta": "clrdelt" | ||||
| 		"delta": "clrdelt", | ||||
| 		"paletteAnimation" : [ | ||||
| 			{ "start" : 183, "length" : 12 }, | ||||
| 			{ "start" : 195, "length" : 6 } | ||||
| 		] | ||||
| 	}, | ||||
| 	"iceRiver": | ||||
| 	{ | ||||
| @@ -21,7 +25,12 @@ | ||||
| 		"text" : "Mud river", | ||||
| 		"shortIdentifier": "rm", | ||||
| 		"tilesFilename": "mudrvr", | ||||
|         "delta": "muddelt" | ||||
| 		"delta": "muddelt", | ||||
| 		"paletteAnimation" : [ | ||||
| 			{ "start" : 228, "length" : 12 }, | ||||
| 			{ "start" : 183, "length" : 6 }, | ||||
| 			{ "start" : 240, "length" : 6 } | ||||
| 		] | ||||
| 	}, | ||||
| 	"lavaRiver": | ||||
| 	{ | ||||
| @@ -29,6 +38,9 @@ | ||||
| 		"text" : "Lava river", | ||||
| 		"shortIdentifier": "rl", | ||||
| 		"tilesFilename": "lavrvr", | ||||
|         "delta": "lavdelt" | ||||
| 		"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; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user