diff --git a/config/schemas/spell.json b/config/schemas/spell.json index 659a26150..cd2b55843 100644 --- a/config/schemas/spell.json +++ b/config/schemas/spell.json @@ -190,38 +190,37 @@ "description" : "Various flags", "additionalProperties" : false, "properties" : { - "indifferent" : { - "type" : "boolean", - "description" : "Spell is indifferent for target" - }, - "negative" : { - "type" : "boolean", - "description" : "Spell is negative for target" - }, - "positive" : { - "type" : "boolean", - "description" : "Spell is positive for target" - }, - "damage" : { - "type" : "boolean", - "description" : "Spell does damage (direct or indirect)" - }, - "offensive" : { - "type" : "boolean", - "description" : "Spell does direct damage (implicitly sets damage and negative)" - }, - "rising" : { - "type" : "boolean", - "description" : "Rising spell (implicitly sets positive)" - }, - "special" : { - "type" : "boolean", - "description" : "Special spell. Can be given only by BonusType::SPELL" - }, - "nonMagical" : { + "indifferent" : { "type" : "boolean", - "description" : "Non-magical ability. Usually used by some creatures. Should not be affected by sorcery and generic magic resistance. School resistances apply. Examples: dendroid bind, efreet fire shield." - } + "description" : "Spell is indifferent for target" + }, + "negative" : { + "type" : "boolean", + "description" : "Spell is negative for target" + }, + "positive" : { + "type" : "boolean", + "description" : "Spell is positive for target" + }, + "damage" : { + "type" : "boolean", + "description" : "Spell does damage (direct or indirect)" + }, + "offensive" : { + "type" : "boolean", + "description" : "Spell does direct damage (implicitly sets damage and negative)" + }, + "rising" : { + "type" : "boolean", + "description" : "Rising spell (implicitly sets positive)" + }, + "special" : { + "type" : "boolean", + "description" : "Special spell. Can be given only by BonusType::SPELL" + }, + "nonMagical" : { + "type" : "boolean", + "description" : "Non-magical ability. Usually used by some creatures. Should not be affected by sorcery and generic magic resistance. School resistances apply. Examples: dendroid bind, efreet fire shield." } } }, @@ -315,5 +314,5 @@ "type" : "boolean", "description" : "If true, spell won't be available on a map without water" } - }, + } } diff --git a/docs/modders/Game_Identifiers.md b/docs/modders/Game_Identifiers.md new file mode 100644 index 000000000..be3ae9865 --- /dev/null +++ b/docs/modders/Game_Identifiers.md @@ -0,0 +1,778 @@ +< [Documentation](../Readme.md) / [Modding](Readme.md) / Game Identifiers + +## List of all game identifiers + +This is a list of all game identifiers available to modders. Note that only identifiers from base game have been included. For identifiers from mods please look up corresponding mod + +### artifact + +- artifact.admiralsHat +- artifact.ambassadorsSash +- artifact.ammoCart +- artifact.amuletOfTheUndertaker +- artifact.angelFeatherArrows +- artifact.angelWings +- artifact.angelicAlliance +- artifact.armageddonsBlade +- artifact.armorOfTheDamned +- artifact.armorOfWonder +- artifact.armsOfLegion +- artifact.badgeOfCourage +- artifact.ballista +- artifact.birdOfPerception +- artifact.blackshardOfTheDeadKnight +- artifact.bootsOfLevitation +- artifact.bootsOfPolarity +- artifact.bootsOfSpeed +- artifact.bowOfElvenCherrywood +- artifact.bowOfTheSharpshooter +- artifact.bowstringOfTheUnicornsMane +- artifact.breastplateOfBrimstone +- artifact.breastplateOfPetrifiedWood +- artifact.bucklerOfTheGnollKing +- artifact.capeOfConjuring +- artifact.capeOfVelocity +- artifact.cardsOfProphecy +- artifact.catapult +- artifact.celestialNecklaceOfBliss +- artifact.centaurAxe +- artifact.charmOfMana +- artifact.cloakOfTheUndeadKing +- artifact.cloverOfFortune +- artifact.collarOfConjuring +- artifact.cornucopia +- artifact.crestOfValor +- artifact.crownOfDragontooth +- artifact.crownOfTheSupremeMagi +- artifact.deadMansBoots +- artifact.diplomatsRing +- artifact.dragonScaleArmor +- artifact.dragonScaleShield +- artifact.dragonWingTabard +- artifact.dragonboneGreaves +- artifact.elixirOfLife +- artifact.emblemOfCognizance +- artifact.endlessBagOfGold +- artifact.endlessPurseOfGold +- artifact.endlessSackOfGold +- artifact.equestriansGloves +- artifact.everflowingCrystalCloak +- artifact.everpouringVialOfMercury +- artifact.eversmokingRingOfSulfur +- artifact.firstAidTent +- artifact.garnitureOfInterference +- artifact.glyphOfGallantry +- artifact.goldenBow +- artifact.grail +- artifact.greaterGnollsFlail +- artifact.headOfLegion +- artifact.hellstormHelmet +- artifact.helmOfChaos +- artifact.helmOfHeavenlyEnlightenment +- artifact.helmOfTheAlabasterUnicorn +- artifact.hourglassOfTheEvilHour +- artifact.inexhaustibleCartOfLumber +- artifact.inexhaustibleCartOfOre +- artifact.ladybirdOfLuck +- artifact.legsOfLegion +- artifact.lionsShieldOfCourage +- artifact.loinsOfLegion +- artifact.mysticOrbOfMana +- artifact.necklaceOfDragonteeth +- artifact.necklaceOfOceanGuidance +- artifact.necklaceOfSwiftness +- artifact.ogresClubOfHavoc +- artifact.orbOfDrivingRain +- artifact.orbOfInhibition +- artifact.orbOfSilt +- artifact.orbOfTempestuousFire +- artifact.orbOfTheFirmament +- artifact.orbOfVulnerability +- artifact.pendantOfCourage +- artifact.pendantOfDeath +- artifact.pendantOfDispassion +- artifact.pendantOfFreeWill +- artifact.pendantOfHoliness +- artifact.pendantOfLife +- artifact.pendantOfNegativity +- artifact.pendantOfSecondSight +- artifact.pendantOfTotalRecall +- artifact.powerOfTheDragonFather +- artifact.quietEyeOfTheDragon +- artifact.recantersCloak +- artifact.redDragonFlameTongue +- artifact.ribCage +- artifact.ringOfConjuring +- artifact.ringOfInfiniteGems +- artifact.ringOfLife +- artifact.ringOfTheMagi +- artifact.ringOfTheWayfarer +- artifact.ringOfVitality +- artifact.sandalsOfTheSaint +- artifact.scalesOfTheGreaterBasilisk +- artifact.seaCaptainsHat +- artifact.sentinelsShield +- artifact.shacklesOfWar +- artifact.shieldOfTheDamned +- artifact.shieldOfTheDwarvenLords +- artifact.shieldOfTheYawningDead +- artifact.skullHelmet +- artifact.speculum +- artifact.spellBook +- artifact.spellScroll +- artifact.spellbindersHat +- artifact.sphereOfPermanence +- artifact.spiritOfOppression +- artifact.spyglass +- artifact.statesmansMedal +- artifact.statueOfLegion +- artifact.stillEyeOfTheDragon +- artifact.stoicWatchman +- artifact.surcoatOfCounterpoise +- artifact.swordOfHellfire +- artifact.swordOfJudgement +- artifact.talismanOfMana +- artifact.targOfTheRampagingOgre +- artifact.thunderHelmet +- artifact.titansCuirass +- artifact.titansGladius +- artifact.titansThunder +- artifact.tomeOfAirMagic +- artifact.tomeOfEarthMagic +- artifact.tomeOfFireMagic +- artifact.tomeOfWaterMagic +- artifact.torsoOfLegion +- artifact.tunicOfTheCyclopsKing +- artifact.unusedArtifact1 +- artifact.unusedArtifact2 +- artifact.unusedArtifact3 +- artifact.vampiresCowl +- artifact.vialOfDragonBlood +- artifact.vialOfLifeblood +- artifact.wizardsWell + +### battlefield + +- battlefield.clover_field +- battlefield.cursed_ground +- battlefield.dirt_birches +- battlefield.dirt_hills +- battlefield.dirt_pines +- battlefield.evil_fog +- battlefield.fiery_fields +- battlefield.grass_hills +- battlefield.grass_pines +- battlefield.holy_ground +- battlefield.lava +- battlefield.lucid_pools +- battlefield.magic_clouds +- battlefield.magic_plains +- battlefield.rocklands +- battlefield.rough +- battlefield.sand_mesas +- battlefield.sand_shore +- battlefield.ship +- battlefield.ship_to_ship +- battlefield.snow_mountains +- battlefield.snow_trees +- battlefield.subterranean +- battlefield.swamp_trees + +### creature + +- creature.airElemental +- creature.airElementals +- creature.ammoCart +- creature.ancientBehemoth +- creature.angel +- creature.apprenticeGremlin +- creature.archDevil +- creature.archMage +- creature.archangel +- creature.archer +- creature.arrowTower +- creature.azureDragon +- creature.ballista +- creature.basilisk +- creature.battleDwarf +- creature.behemoth +- creature.beholder +- creature.blackDragon +- creature.blackKnight +- creature.boar +- creature.boneDragon +- creature.catapult +- creature.cavalier +- creature.centaur +- creature.centaurCaptain +- creature.cerberus +- creature.champion +- creature.chaosHydra +- creature.crusader +- creature.crystalDragon +- creature.cyclop +- creature.cyclopKing +- creature.demon +- creature.dendroidGuard +- creature.dendroidSoldier +- creature.devil +- creature.diamondGolem +- creature.dragonFly +- creature.dreadKnight +- creature.dwarf +- creature.earthElemental +- creature.efreet +- creature.efreetSultan +- creature.enchanter +- creature.enchanters +- creature.energyElemental +- creature.evilEye +- creature.fairieDragon +- creature.familiar +- creature.fireDragonFly +- creature.fireElemental +- creature.firebird +- creature.firstAidTent +- creature.genie +- creature.ghostDragon +- creature.giant +- creature.gnoll +- creature.gnollMarauder +- creature.goblin +- creature.goblinWolfRider +- creature.goblins +- creature.gog +- creature.goldDragon +- creature.goldGolem +- creature.gorgon +- creature.grandElf +- creature.greaterBasilisk +- creature.greenDragon +- creature.gremlin +- creature.griffin +- creature.halberdier +- creature.halfling +- creature.harpy +- creature.harpyHag +- creature.hellHound +- creature.hobgoblin +- creature.hobgoblinWolfRider +- creature.hornedDemon +- creature.hydra +- creature.iceElemental +- creature.imp +- creature.infernalTroglodyte +- creature.ironGolem +- creature.lich +- creature.lightCrossbowman +- creature.lizardWarrior +- creature.lizardman +- creature.mage +- creature.magicElemental +- creature.magmaElemental +- creature.magog +- creature.manticore +- creature.marksman +- creature.masterGenie +- creature.masterGremlin +- creature.medusa +- creature.medusaQueen +- creature.mightyGorgon +- creature.minotaur +- creature.minotaurKing +- creature.monk +- creature.mummy +- creature.naga +- creature.nagaQueen +- creature.nomad +- creature.obsidianGargoyle +- creature.ogre +- creature.ogreMage +- creature.orc +- creature.orcChieftain +- creature.peasant +- creature.pegasus +- creature.phoenix +- creature.pikeman +- creature.pitFiend +- creature.pitLord +- creature.pixie +- creature.pixies +- creature.powerLich +- creature.primitiveLizardman +- creature.psychicElemental +- creature.redDragon +- creature.roc +- creature.rogue +- creature.royalGriffin +- creature.rustDragon +- creature.scorpicore +- creature.serpentFly +- creature.sharpshooter +- creature.sharpshooters +- creature.silverPegasus +- creature.skeleton +- creature.skeletonWarrior +- creature.sprite +- creature.stoneGargoyle +- creature.stoneGolem +- creature.stormElemental +- creature.swordsman +- creature.thunderbird +- creature.titan +- creature.troglodyte +- creature.troll +- creature.unicorn +- creature.unused122 +- creature.unused124 +- creature.unused126 +- creature.unused128 +- creature.vampire +- creature.vampireLord +- creature.walkingDead +- creature.warUnicorn +- creature.waterElemental +- creature.waterElementals +- creature.wight +- creature.woodElf +- creature.wraith +- creature.wyvern +- creature.wyvernMonarch +- creature.zealot +- creature.zombie +- creature.zombieLord + +### faction + +- faction.castle +- faction.conflux +- faction.dungeon +- faction.fortress +- faction.inferno +- faction.necropolis +- faction.neutral +- faction.rampart +- faction.stronghold +- faction.tower + +### hero + +- hero.adela +- hero.adelaide +- hero.adrienne +- hero.aenain +- hero.aeris +- hero.aine +- hero.aislinn +- hero.ajit +- hero.alagar +- hero.alamar +- hero.alkin +- hero.andra +- hero.arlach +- hero.ash +- hero.astral +- hero.axsis +- hero.ayden +- hero.boragus +- hero.brissa +- hero.broghild +- hero.bron +- hero.caitlin +- hero.calh +- hero.calid +- hero.catherine +- hero.charna +- hero.christian +- hero.ciele +- hero.clancy +- hero.clavius +- hero.coronius +- hero.cragHack +- hero.cuthbert +- hero.cyra +- hero.dace +- hero.damacon +- hero.daremyth +- hero.darkstorn +- hero.deemer +- hero.dessa +- hero.dracon +- hero.drakon +- hero.edric +- hero.elleshar +- hero.erdamon +- hero.fafner +- hero.fiona +- hero.fiur +- hero.galthran +- hero.gelare +- hero.gelu +- hero.gem +- hero.geon +- hero.gerwulf +- hero.gird +- hero.gretchin +- hero.grindan +- hero.gundula +- hero.gunnar +- hero.gurnisson +- hero.halon +- hero.ignatius +- hero.ignissa +- hero.ingham +- hero.inteus +- hero.iona +- hero.isra +- hero.ivor +- hero.jabarkas +- hero.jaegar +- hero.jeddite +- hero.jenova +- hero.josephine +- hero.kalt +- hero.kilgor +- hero.korbac +- hero.krellion +- hero.kyrre +- hero.labetha +- hero.lacus +- hero.lordHaart +- hero.lorelei +- hero.loynis +- hero.luna +- hero.malcom +- hero.malekith +- hero.marius +- hero.melodia +- hero.mephala +- hero.merist +- hero.mirlanda +- hero.moandor +- hero.monere +- hero.mutare +- hero.mutareDrake +- hero.nagash +- hero.neela +- hero.nimbus +- hero.nymus +- hero.octavia +- hero.olema +- hero.oris +- hero.orrin +- hero.pasis +- hero.piquedram +- hero.pyre +- hero.rashka +- hero.rion +- hero.rissa +- hero.roland +- hero.rosic +- hero.ryland +- hero.sandro +- hero.sanya +- hero.saurug +- hero.sephinroth +- hero.septienna +- hero.serena +- hero.shakti +- hero.shiva +- hero.sirMullich +- hero.solmyr +- hero.sorsha +- hero.straker +- hero.styg +- hero.sylvia +- hero.synca +- hero.tamika +- hero.tazar +- hero.terek +- hero.thane +- hero.thant +- hero.theodorus +- hero.thorgrim +- hero.thunar +- hero.tiva +- hero.torosar +- hero.tyraxor +- hero.tyris +- hero.ufretin +- hero.uland +- hero.undeadHaart +- hero.valeska +- hero.verdish +- hero.vey +- hero.vidomina +- hero.vokial +- hero.voy +- hero.wystan +- hero.xarfax +- hero.xeron +- hero.xsi +- hero.xyron +- hero.yog +- hero.zubin +- hero.zydar + +### heroClass + +- heroClass.alchemist +- heroClass.barbarian +- heroClass.battlemage +- heroClass.beastmaster +- heroClass.cleric +- heroClass.deathknight +- heroClass.demoniac +- heroClass.druid +- heroClass.elementalist +- heroClass.heretic +- heroClass.knight +- heroClass.necromancer +- heroClass.overlord +- heroClass.planeswalker +- heroClass.ranger +- heroClass.warlock +- heroClass.witch +- heroClass.wizard + +### playerColor + +- playerColor.blue +- playerColor.green +- playerColor.orange +- playerColor.pink +- playerColor.purple +- playerColor.red +- playerColor.tan +- playerColor.teal + +### primSkill + +Deprected, please use primarySkill instead + +- primSkill.attack +- primSkill.defence +- primSkill.knowledge +- primSkill.spellpower + +### primarySkill + +- primarySkill.attack +- primarySkill.defence +- primarySkill.knowledge +- primarySkill.spellpower + +### resource + +- resource.crystal +- resource.gems +- resource.gold +- resource.mercury +- resource.mithril +- resource.ore +- resource.sulfur +- resource.wood + +### river + +- river.iceRiver +- river.lavaRiver +- river.mudRiver +- river.waterRiver + +### road + +- road.cobblestoneRoad +- road.dirtRoad +- road.gravelRoad + +### secondarySkill + +- secondarySkill.airMagic +- secondarySkill.archery +- secondarySkill.armorer +- secondarySkill.artillery +- secondarySkill.ballistics +- secondarySkill.diplomacy +- secondarySkill.eagleEye +- secondarySkill.earthMagic +- secondarySkill.estates +- secondarySkill.fireMagic +- secondarySkill.firstAid +- secondarySkill.intelligence +- secondarySkill.leadership +- secondarySkill.learning +- secondarySkill.logistics +- secondarySkill.luck +- secondarySkill.mysticism +- secondarySkill.navigation +- secondarySkill.necromancy +- secondarySkill.offence +- secondarySkill.pathfinding +- secondarySkill.resistance +- secondarySkill.scholar +- secondarySkill.scouting +- secondarySkill.sorcery +- secondarySkill.tactics +- secondarySkill.waterMagic +- secondarySkill.wisdom + +### skill + +Deprected, please use secondarySkill instead + +- skill.airMagic +- skill.archery +- skill.armorer +- skill.artillery +- skill.ballistics +- skill.diplomacy +- skill.eagleEye +- skill.earthMagic +- skill.estates +- skill.fireMagic +- skill.firstAid +- skill.intelligence +- skill.leadership +- skill.learning +- skill.logistics +- skill.luck +- skill.mysticism +- skill.navigation +- skill.necromancy +- skill.offence +- skill.pathfinding +- skill.resistance +- skill.scholar +- skill.scouting +- skill.sorcery +- skill.tactics +- skill.waterMagic +- skill.wisdom + +### spell + +- spell.acidBreath +- spell.acidBreathDamage +- spell.age +- spell.airElemental +- spell.airShield +- spell.animateDead +- spell.antiMagic +- spell.armageddon +- spell.berserk +- spell.bind +- spell.bless +- spell.blind +- spell.bloodlust +- spell.castleMoat +- spell.castleMoatTrigger +- spell.catapultShot +- spell.chainLightning +- spell.clone +- spell.counterstrike +- spell.cure +- spell.curse +- spell.cyclopsShot +- spell.deathCloud +- spell.deathRipple +- spell.deathStare +- spell.destroyUndead +- spell.dimensionDoor +- spell.disease +- spell.disguise +- spell.dispel +- spell.dispelHelpful +- spell.disruptingRay +- spell.dungeonMoat +- spell.dungeonMoatTrigger +- spell.earthElemental +- spell.earthquake +- spell.fireElemental +- spell.fireShield +- spell.fireWall +- spell.fireWallTrigger +- spell.fireball +- spell.firstAid +- spell.fly +- spell.forceField +- spell.forgetfulness +- spell.fortressMoat +- spell.fortressMoatTrigger +- spell.fortune +- spell.frenzy +- spell.frostRing +- spell.haste +- spell.hypnotize +- spell.iceBolt +- spell.implosion +- spell.inferno +- spell.infernoMoat +- spell.infernoMoatTrigger +- spell.landMine +- spell.landMineTrigger +- spell.lightningBolt +- spell.magicArrow +- spell.magicMirror +- spell.meteorShower +- spell.mirth +- spell.misfortune +- spell.necropolisMoat +- spell.necropolisMoatTrigger +- spell.paralyze +- spell.poison +- spell.prayer +- spell.precision +- spell.protectAir +- spell.protectEarth +- spell.protectFire +- spell.protectWater +- spell.quicksand +- spell.rampartMoat +- spell.rampartMoatTrigger +- spell.removeObstacle +- spell.resurrection +- spell.sacrifice +- spell.scuttleBoat +- spell.shield +- spell.slayer +- spell.slow +- spell.sorrow +- spell.stoneGaze +- spell.stoneSkin +- spell.strongholdMoat +- spell.strongholdMoatTrigger +- spell.summonBoat +- spell.summonDemons +- spell.teleport +- spell.thunderbolt +- spell.titanBolt +- spell.towerMoat +- spell.townPortal +- spell.viewAir +- spell.viewEarth +- spell.visions +- spell.waterElemental +- spell.waterWalk +- spell.weakness + +### spellSchool + +- spellSchool.air +- spellSchool.any +- spellSchool.earth +- spellSchool.fire +- spellSchool.water + +### terrain + +- terrain.dirt +- terrain.grass +- terrain.lava +- terrain.rock +- terrain.rough +- terrain.sand +- terrain.snow +- terrain.subterra +- terrain.swamp +- terrain.water diff --git a/docs/modders/Translations.md b/docs/modders/Translations.md index a4533d864..23b378797 100644 --- a/docs/modders/Translations.md +++ b/docs/modders/Translations.md @@ -48,6 +48,7 @@ VCMI contains several new strings, to cover functionality not existing in Heroes - In-game texts, most noticeably - in-game settings menu. - Game Launcher - Map Editor +- Android Launcher Before you start, make sure that you have copy of VCMI source code. If you are not familiar with git, you can use Github Desktop to clone VCMI repository. @@ -72,6 +73,13 @@ VCMI Launcher and Map Editor use translation system provided by Qt framework so Translation of Map Editor is identical, except for location of translation files. Open `/editor/translation/` instead to translate Map Editor +TODO: how to test translation locally + +### Translation of Android Launcher + +TODO +see https://github.com/vcmi/vcmi/blob/develop/android/vcmi-app/src/main/res/values/strings.xml + ### Submitting changes Once you have finished with translation you need to submit these changes to vcmi team using git or Github Desktop diff --git a/lib/modding/IdentifierStorage.cpp b/lib/modding/IdentifierStorage.cpp index 0cf1b9f22..a797ebb78 100644 --- a/lib/modding/IdentifierStorage.cpp +++ b/lib/modding/IdentifierStorage.cpp @@ -355,16 +355,45 @@ void CIdentifierStorage::finalize() errorsFound = true; } + debugDumpIdentifiers(); + if (errorsFound) - { - for(const auto & object : registeredObjects) - { - logMod->trace("%s : %s -> %d", object.second.scope, object.first, object.second.id); - } logMod->error("All known identifiers were dumped into log file"); - } + assert(errorsFound == false); state = ELoadingState::FINISHED; + +} + +void CIdentifierStorage::debugDumpIdentifiers() +{ + logMod->trace("List of all registered objects:"); + + std::map> objectList; + + for(const auto & object : registeredObjects) + { + size_t categoryLength = object.first.find('.'); + assert(categoryLength != std::string::npos); + + std::string objectCategory = object.first.substr(0, categoryLength); + std::string objectName = object.first.substr(categoryLength + 1); + + objectList[objectCategory].push_back("[" + object.second.scope + "] " + objectName); + } + + for(auto & category : objectList) + boost::range::sort(category.second); + + for(const auto & category : objectList) + { + logMod->trace(""); + logMod->trace("### %s", category.first); + logMod->trace(""); + + for(const auto & entry : category.second) + logMod->trace("- " + entry); + } } VCMI_LIB_NAMESPACE_END diff --git a/lib/modding/IdentifierStorage.h b/lib/modding/IdentifierStorage.h index 562b1d064..004d724c7 100644 --- a/lib/modding/IdentifierStorage.h +++ b/lib/modding/IdentifierStorage.h @@ -65,6 +65,9 @@ class DLL_LINKAGE CIdentifierStorage ELoadingState state = ELoadingState::LOADING; + /// Helper method that dumps all registered identifier into log file + void debugDumpIdentifiers(); + /// Check if identifier can be valid (camelCase, point as separator) static void checkIdentifier(std::string & ID);