Implement a quest system and job board

- The job board is loosely based on Exile III's job board; the dialog is converted from the one contained as a relic of E3 in BoE
- Quest system is loosely based on a mix of Exile III jobs and Blades of Avernum quests
- Talking to a monster (even a hostile one) can now trigger an arbitrary special node

Dialog engine:
- LED's now support wrapped labels
This commit is contained in:
2015-02-01 01:30:15 -05:00
parent db627e54a8
commit 4efcb08932
35 changed files with 714 additions and 52 deletions

View File

@@ -189,6 +189,34 @@ static void writeScenarioToXml(ticpp::Printer&& data) {
data.CloseElement("item");
}
data.CloseElement("specials");
for(size_t i = 0; i < scenario.quests.size(); i++) {
cQuest& quest = scenario.quests[i];
data.OpenElement("quest");
data.PushAttribute("start-with", boolstr(quest.flags / 10));
if(quest.deadline >= 0) {
data.OpenElement("deadline");
data.PushAttribute("relative", boolstr(quest.flags % 10));
if(quest.event >= 0)
data.PushAttribute("waive-if", quest.event);
data.PushText(quest.deadline);
data.CloseElement("deadline");
}
if(quest.xp > 0 || quest.gold > 0) {
data.OpenElement("reward");
if(quest.xp > 0)
data.PushAttribute("xp", quest.xp);
if(quest.gold > 0)
data.PushAttribute("gold", quest.gold);
data.CloseElement("reward");
}
if(quest.bank1 >= 0)
data.PushElement("bank", quest.bank1);
if(quest.bank2 >= 0)
data.PushElement("bank", quest.bank2);
data.PushElement("name", quest.name);
data.PushElement("description", quest.descr);
data.CloseElement("quest");
}
for(int i = 0; i < 20; i++) {
if(scenario.scenario_timer_times[i] > 0) {
data.OpenElement("timer");