Sur le fait que les tags puissent avoir un identifiant numérique, c'est certainement une bonne idée en termes de performances. Ça évitera de toujours se traîner une string qui consomme des caractères pour rien, vu que ce sera souvent les mêmes. Les tags pourraient être des "pseudo-singletons", gérés dans un registre quelque part (peudo, parce qu'il y aura clairement plusieurs instances de la classe CTags, singleton, parce que pour un nom donné, il n'y en aura qu'un seul).
Je suis moins fan de l'idée de travailler directement avec l'id pour plusieurs raisons :
- comme tu l'as dit, ça oblige à connaître les ids et c'est moins parlant qu'un nom. Mais ça se contourne facilement en déclarant des constantes.
- ça verrouille le système et du côté scripting, j'aimerais qu'on ait la souplesse d'utiliser des tags non-prévus. On peut vouloir tagguer certains persos comme "puants" après leur avoir jeté un sort de chou-fleur, par exemple. Et ce tag ferait s'éloigner la plupart des autres personnages.
Donc une solution qui ménage la chèvre et le chou (fleur) serait de gérer un registre dynamique des tags, avec des ids alloués dynamiquement, mais avec un jeu de tags "système" prédéfinis (héros, ennemi, trésor, je ne sais quoi...). Ensuite, pour les fonctions qui manipulent les tags, on peut prévoir de les écrire en double : une qui prend l'id (plus rapide) et une qui prend le nom (plus souple mais oblige à retrouver d'abord l'id dans le registre, une sorte de DNS).
Pour le fichier de description des entités, ça me paraît pas mal. Comme c'est un fichier qui sera probablement lu une seule fois, la perf n'est peut-être pas une priorité. On pourrait se contenter de lister les noms de tags associés à une entité (sans les ids) et laisser le code retrouver l'id. Autre idée au passage, ce format de fichier pourraît être utilisé comme format de sauvegarde...
Peut-on assigner plusieurs tags : oui, il faut. L'intérêt majeur du tag, dans mon esprit, c'est vraiment de pouvoir grouper de façon souple des entités pour n'importe quel besoin : les adeptes de la secte X, les amis des chats, les gens qui sont beaux. Ces catégories ne sont pas exclusives. Ou encore les objets magiques, les objets en bois, les objets lourds...
Les groupes, je ne pense pas qu'on en ait besoin. Ça fait la même chose que les tags, en moins souple. Ça peut éventuellement amener de la perf, mais on n'en est pas là. Si on pond un système de tags efficace, ça devrait suffire.
D'autres avis ?