mirror of
https://github.com/vcmi/vcmi.git
synced 2026-06-19 22:57:37 +02:00
- New creatures now work in game (more or less)
- Parsing of def info for new creatures - Fixed crash caused by neutral faction vs native terrain check
This commit is contained in:
@@ -148,9 +148,10 @@ std::string CCreature::nodeName() const
|
|||||||
|
|
||||||
bool CCreature::isItNativeTerrain(int terrain) const
|
bool CCreature::isItNativeTerrain(int terrain) const
|
||||||
{
|
{
|
||||||
assert(vstd::contains(VLC->townh->factions, faction));
|
if (faction > -1)
|
||||||
//not good handler dependency
|
return VLC->townh->factions[faction].nativeTerrain == terrain;
|
||||||
return VLC->townh->factions[faction].nativeTerrain == terrain;
|
else
|
||||||
|
return VLC->townh->factions[0].nativeTerrain == terrain; //FIXME: handle neutral faction properly
|
||||||
}
|
}
|
||||||
|
|
||||||
int readNumber(int & befi, int & i, int andame, std::string & buf) //helper function for void CCreatureHandler::loadCreatures() and loadUnitAnimInfo()
|
int readNumber(int & befi, int & i, int andame, std::string & buf) //helper function for void CCreatureHandler::loadCreatures() and loadUnitAnimInfo()
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ public:
|
|||||||
std::string abilityText; //description of abilities
|
std::string abilityText; //description of abilities
|
||||||
std::string abilityRefs; //references to abilities, in text format
|
std::string abilityRefs; //references to abilities, in text format
|
||||||
std::string animDefName;
|
std::string animDefName;
|
||||||
|
std::string advMapDef; //for new creatures only
|
||||||
si32 idNumber;
|
si32 idNumber;
|
||||||
si8 faction; //-1 = neutral
|
si8 faction; //-1 = neutral
|
||||||
ui8 doubleWide;
|
ui8 doubleWide;
|
||||||
@@ -102,7 +103,7 @@ public:
|
|||||||
& cost & upgradeNames & upgrades
|
& cost & upgradeNames & upgrades
|
||||||
& fightValue & AIValue & growth & hordeGrowth
|
& fightValue & AIValue & growth & hordeGrowth
|
||||||
& ammMin & ammMax & level
|
& ammMin & ammMax & level
|
||||||
& abilityText & abilityRefs & animDefName
|
& abilityText & abilityRefs & animDefName & advMapDef
|
||||||
& idNumber & faction
|
& idNumber & faction
|
||||||
|
|
||||||
& timeBetweenFidgets & walkAnimationTime & attackAnimationTime & flightAnimationDistance
|
& timeBetweenFidgets & walkAnimationTime & attackAnimationTime & flightAnimationDistance
|
||||||
|
|||||||
+16
-3
@@ -1,5 +1,6 @@
|
|||||||
#include "StdInc.h"
|
#include "StdInc.h"
|
||||||
#include "CModHandler.h"
|
#include "CModHandler.h"
|
||||||
|
#include "CDefObjInfoHandler.h"
|
||||||
#include "JsonNode.h"
|
#include "JsonNode.h"
|
||||||
#include "Filesystem/CResourceLoader.h"
|
#include "Filesystem/CResourceLoader.h"
|
||||||
#include "Filesystem/ISimpleResourceLoader.h"
|
#include "Filesystem/ISimpleResourceLoader.h"
|
||||||
@@ -69,7 +70,7 @@ void CModHandler::loadConfigFromFile (std::string name)
|
|||||||
|
|
||||||
//TODO: read mods from Mods/ folder
|
//TODO: read mods from Mods/ folder
|
||||||
|
|
||||||
auto & configList = CResourceHandler::get()->getResourcesWithName (ResourceID("CONFIG/MODS/HOTA/MOD", EResType::TEXT));
|
auto & configList = CResourceHandler::get()->getResourcesWithName (ResourceID("CONFIG/mod.json"));
|
||||||
|
|
||||||
BOOST_FOREACH(auto & entry, configList)
|
BOOST_FOREACH(auto & entry, configList)
|
||||||
{
|
{
|
||||||
@@ -109,7 +110,6 @@ void CModHandler::saveConfigToFile (std::string name)
|
|||||||
CCreature * CModHandler::loadCreature (const JsonNode &node)
|
CCreature * CModHandler::loadCreature (const JsonNode &node)
|
||||||
{
|
{
|
||||||
CCreature * cre = new CCreature();
|
CCreature * cre = new CCreature();
|
||||||
cre->idNumber = creatures.size();
|
|
||||||
const JsonNode *value; //optional value
|
const JsonNode *value; //optional value
|
||||||
|
|
||||||
//TODO: ref name?
|
//TODO: ref name?
|
||||||
@@ -161,7 +161,8 @@ CCreature * CModHandler::loadCreature (const JsonNode &node)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cre->level = node["level"].Float();
|
cre->level = node["level"].Float();
|
||||||
cre->faction = -1; //TODO: node["faction"].String() to id or just node["faction"].Float();
|
cre->faction = -1; //neutral
|
||||||
|
//TODO: node["faction"].String() to id or just node["faction"].Float();
|
||||||
cre->fightValue = node["fightValue"].Float();
|
cre->fightValue = node["fightValue"].Float();
|
||||||
cre->AIValue = node["aiValue"].Float();
|
cre->AIValue = node["aiValue"].Float();
|
||||||
cre->growth = node["growth"].Float();
|
cre->growth = node["growth"].Float();
|
||||||
@@ -174,6 +175,10 @@ CCreature * CModHandler::loadCreature (const JsonNode &node)
|
|||||||
cre->addBonus(vec["min"].Float(), Bonus::CREATURE_DAMAGE, 1);
|
cre->addBonus(vec["min"].Float(), Bonus::CREATURE_DAMAGE, 1);
|
||||||
cre->addBonus(vec["max"].Float(), Bonus::CREATURE_DAMAGE, 2);
|
cre->addBonus(vec["max"].Float(), Bonus::CREATURE_DAMAGE, 2);
|
||||||
|
|
||||||
|
auto amounts = node ["advMapAmount"];
|
||||||
|
cre->ammMin = amounts["min"].Float();
|
||||||
|
cre->ammMax = amounts["max"].Float();
|
||||||
|
|
||||||
//optional
|
//optional
|
||||||
value = &node["upgrades"];
|
value = &node["upgrades"];
|
||||||
if (!value->isNull())
|
if (!value->isNull())
|
||||||
@@ -232,6 +237,7 @@ CCreature * CModHandler::loadCreature (const JsonNode &node)
|
|||||||
{
|
{
|
||||||
cre->missleFrameAngles[i++] = angle.Float();
|
cre->missleFrameAngles[i++] = angle.Float();
|
||||||
}
|
}
|
||||||
|
cre->advMapDef = graphics["map"].String();
|
||||||
//TODO: we need to know creature id to add it
|
//TODO: we need to know creature id to add it
|
||||||
//FIXME: creature handler is not yet initialized
|
//FIXME: creature handler is not yet initialized
|
||||||
//VLC->creh->idToProjectile[cre->idNumber] = "PLCBOWX.DEF";
|
//VLC->creh->idToProjectile[cre->idNumber] = "PLCBOWX.DEF";
|
||||||
@@ -264,11 +270,18 @@ void CModHandler::recreateHandlers()
|
|||||||
|
|
||||||
BOOST_FOREACH (auto creature, creatures)
|
BOOST_FOREACH (auto creature, creatures)
|
||||||
{
|
{
|
||||||
|
creature->idNumber = VLC->creh->creatures.size(); //calculate next index for every used creature
|
||||||
VLC->creh->creatures.push_back (creature);
|
VLC->creh->creatures.push_back (creature);
|
||||||
//TODO: use refName?
|
//TODO: use refName?
|
||||||
//if (creature->nameRef.size())
|
//if (creature->nameRef.size())
|
||||||
// VLC->creh->nameToID[creature->nameRef] = creature->idNumber;
|
// VLC->creh->nameToID[creature->nameRef] = creature->idNumber;
|
||||||
VLC->creh->nameToID[creature->nameSing] = creature->idNumber;
|
VLC->creh->nameToID[creature->nameSing] = creature->idNumber;
|
||||||
|
|
||||||
|
//generate adventure map object info & graphics
|
||||||
|
CGDefInfo* nobj = new CGDefInfo();
|
||||||
|
nobj = VLC->dobjinfo->gobjs[GameConstants::CREI_TYPE][0]; //copy all typical properties
|
||||||
|
nobj->name = creature->advMapDef; //change only def name (?)
|
||||||
|
VLC->dobjinfo->gobjs[GameConstants::CREI_TYPE][creature->idNumber] = nobj;
|
||||||
}
|
}
|
||||||
BOOST_FOREACH (auto creature, VLC->creh->creatures) //populate upgrades described with string
|
BOOST_FOREACH (auto creature, VLC->creh->creatures) //populate upgrades described with string
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user