74 currentInfo->name = node.
getProperty(
"name",
_(
"unnamed"));
76 currentInfo->setTargetCursorSize(node.
getProperty(
"targetCursor",
"medium"));
77 currentInfo->setHoverCursor(node.
getProperty(
"hoverCursor",
"attack"));
79 currentInfo->targetSelection = node.
getProperty(
"targetSelection",
true);
83 for (
auto spriteNode : node.
children())
85 if (spriteNode.name() ==
"sprite")
88 currentSprite.
sprite = spriteNode.textContent();
89 currentSprite.
variant = spriteNode.getProperty(
"variant", 0);
91 else if (spriteNode.name() ==
"sound")
93 std::string
event = spriteNode.getProperty(
"event", std::string());
94 const std::string soundFile { spriteNode.textContent() };
100 else if (event ==
"miss")
104 else if (event ==
"hurt")
108 else if (event ==
"die")
114 Log::info(
"MonsterDB: Warning, sound effect %s for "
115 "unknown event %s of monster %s in %s",
116 soundFile.c_str(), event.c_str(),
117 currentInfo->name.c_str(),
121 else if (spriteNode.name() ==
"attack")
124 const int id = spriteNode.getProperty(
"id", 0);
126 attack.
effectId = spriteNode.getProperty(
"effect-id", -1);
128 spriteNode.getProperty(
"hit-effect-id",
131 spriteNode.getProperty(
"critical-hit-effect-id",
134 spriteNode.getProperty(
"missile-particle",
"");
136 attack.
action = spriteNode.getProperty(
"action",
"attack");
138 currentInfo->addAttack(
id, std::move(attack));
140 else if (spriteNode.name() ==
"particlefx")
142 display.
particles.emplace_back(spriteNode.textContent());
146 mMonsterInfos[node.
getProperty(
"id", 0) + mMonsterIdOffset] = currentInfo;