diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index 5318a077..94c790ee 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -1719,21 +1719,30 @@ static void on_10(shared_ptr c, uint16_t, uint32_t, const string& data) // always the download quest menu. (Episode 3 does actually have // online quests, but they're served via a server data request // instead of the file download paradigm that other versions use.) - vector> quests; + uint32_t ep3_category_id = 0; + size_t num_ep3_categories = 0; for (const auto& category : s->quest_category_index->categories) { if (category.flags & QuestCategoryIndex::Category::Flag::EP3_DOWNLOAD) { - quests = s->quest_index->filter(category.category_id, c->quest_version()); - break; + ep3_category_id = category.category_id; + num_ep3_categories++; } } - send_quest_menu(c, MenuID::QUEST, quests, true); - } else { - uint8_t flags = QuestCategoryIndex::Category::Flag::DOWNLOAD; - if (c->version() == GameVersion::DC || c->version() == GameVersion::PC) { - flags |= QuestCategoryIndex::Category::Flag::HIDE_ON_PRE_V3; + if (num_ep3_categories == 1) { + auto quests = s->quest_index->filter(ep3_category_id, c->quest_version()); + send_quest_menu(c, MenuID::QUEST, quests, true); + break; } - send_quest_menu(c, MenuID::QUEST_FILTER, s->quest_category_index, flags); } + + // Not Episode 3, or there are multiple Episode 3 download categories; + // send the categories menu instead + uint8_t flags = (c->flags & Client::Flag::IS_EPISODE_3) + ? QuestCategoryIndex::Category::Flag::EP3_DOWNLOAD + : QuestCategoryIndex::Category::Flag::DOWNLOAD; + if (c->version() == GameVersion::DC || c->version() == GameVersion::PC) { + flags |= QuestCategoryIndex::Category::Flag::HIDE_ON_PRE_V3; + } + send_quest_menu(c, MenuID::QUEST_FILTER, s->quest_category_index, flags); break; } diff --git a/system/config.example.json b/system/config.example.json index 3889f57a..8e7c1549 100644 --- a/system/config.example.json +++ b/system/config.example.json @@ -482,7 +482,8 @@ [0x10, "q", "gv2", "The Military's Hero", "$E$CG-Heathcliff Flowen-\n$C6Quests that follow\nthe Episode 2\nstoryline"], [0x10, "q", "gv4", "The Meteor Impact Incident", "$E$C6Quests that follow\nthe Episode 4\nstoryline"], [0x20, "q", "dl", "Download", "$E$C6Quests to download\nto your Memory Card"], - [0x40, "e", "", "Download", "$E$C6Quests to download\nto your Memory Card"], + [0x40, "e", "dlt", "Trial Download", "$E$C6Quests to download\nto your Memory Card\nfrom Episode 3\nTrial Edition"], + [0x40, "e", "dl", "Download", "$E$C6Quests to download\nto your Memory Card"], ], // Cheat mode behavior. There are three values: diff --git a/system/ep3/maps/e765-dlt-gc3.mnm b/system/ep3/maps/e765-dlt-gc3.mnm new file mode 120000 index 00000000..5e782af3 --- /dev/null +++ b/system/ep3/maps/e765-dlt-gc3.mnm @@ -0,0 +1 @@ +../../quests/e765-dlt-gc3.mnm \ No newline at end of file diff --git a/system/ep3/maps/e765-gc3.mnmd b/system/ep3/maps/e765-gc3.mnmd deleted file mode 120000 index 283cee88..00000000 --- a/system/ep3/maps/e765-gc3.mnmd +++ /dev/null @@ -1 +0,0 @@ -../../quests/e765-gc3.mnmd \ No newline at end of file diff --git a/system/ep3/maps/e901-dl-gc3.mnm b/system/ep3/maps/e901-dl-gc3.mnm new file mode 120000 index 00000000..d4b126a3 --- /dev/null +++ b/system/ep3/maps/e901-dl-gc3.mnm @@ -0,0 +1 @@ +../../quests/e901-dl-gc3.mnm \ No newline at end of file diff --git a/system/ep3/maps/e901-gc3.mnm b/system/ep3/maps/e901-gc3.mnm deleted file mode 120000 index 3caf5b1a..00000000 --- a/system/ep3/maps/e901-gc3.mnm +++ /dev/null @@ -1 +0,0 @@ -../../quests/e901-gc3.mnm \ No newline at end of file diff --git a/system/ep3/maps/e903-dl-gc3.mnm b/system/ep3/maps/e903-dl-gc3.mnm new file mode 120000 index 00000000..3805059a --- /dev/null +++ b/system/ep3/maps/e903-dl-gc3.mnm @@ -0,0 +1 @@ +../../quests/e903-dl-gc3.mnm \ No newline at end of file diff --git a/system/ep3/maps/e903-gc3.mnm b/system/ep3/maps/e903-gc3.mnm deleted file mode 120000 index cc361d5d..00000000 --- a/system/ep3/maps/e903-gc3.mnm +++ /dev/null @@ -1 +0,0 @@ -../../quests/e903-gc3.mnm \ No newline at end of file diff --git a/system/ep3/maps/e904-dl-gc3.mnm b/system/ep3/maps/e904-dl-gc3.mnm new file mode 120000 index 00000000..5d64d31e --- /dev/null +++ b/system/ep3/maps/e904-dl-gc3.mnm @@ -0,0 +1 @@ +../../quests/e904-dl-gc3.mnm \ No newline at end of file diff --git a/system/ep3/maps/e904-gc3.mnm b/system/ep3/maps/e904-gc3.mnm deleted file mode 120000 index 1845a1b1..00000000 --- a/system/ep3/maps/e904-gc3.mnm +++ /dev/null @@ -1 +0,0 @@ -../../quests/e904-gc3.mnm \ No newline at end of file diff --git a/system/ep3/maps/e905-dl-gc3.mnm b/system/ep3/maps/e905-dl-gc3.mnm new file mode 120000 index 00000000..35cff1c6 --- /dev/null +++ b/system/ep3/maps/e905-dl-gc3.mnm @@ -0,0 +1 @@ +../../quests/e905-dl-gc3.mnm \ No newline at end of file diff --git a/system/ep3/maps/e905-gc3.mnm b/system/ep3/maps/e905-gc3.mnm deleted file mode 120000 index 332a7fa1..00000000 --- a/system/ep3/maps/e905-gc3.mnm +++ /dev/null @@ -1 +0,0 @@ -../../quests/e905-gc3.mnm \ No newline at end of file diff --git a/system/ep3/maps/e906-dl-gc3.mnm b/system/ep3/maps/e906-dl-gc3.mnm new file mode 120000 index 00000000..9abc1083 --- /dev/null +++ b/system/ep3/maps/e906-dl-gc3.mnm @@ -0,0 +1 @@ +../../quests/e906-dl-gc3.mnm \ No newline at end of file diff --git a/system/ep3/maps/e906-gc3.mnm b/system/ep3/maps/e906-gc3.mnm deleted file mode 120000 index a26fa843..00000000 --- a/system/ep3/maps/e906-gc3.mnm +++ /dev/null @@ -1 +0,0 @@ -../../quests/e906-gc3.mnm \ No newline at end of file diff --git a/system/ep3/maps/e907-dl-gc3.mnm b/system/ep3/maps/e907-dl-gc3.mnm new file mode 120000 index 00000000..560a13e2 --- /dev/null +++ b/system/ep3/maps/e907-dl-gc3.mnm @@ -0,0 +1 @@ +../../quests/e907-dl-gc3.mnm \ No newline at end of file diff --git a/system/ep3/maps/e907-gc3.mnm b/system/ep3/maps/e907-gc3.mnm deleted file mode 120000 index 5101540d..00000000 --- a/system/ep3/maps/e907-gc3.mnm +++ /dev/null @@ -1 +0,0 @@ -../../quests/e907-gc3.mnm \ No newline at end of file diff --git a/system/ep3/maps/e908-dl-gc3.mnm b/system/ep3/maps/e908-dl-gc3.mnm new file mode 120000 index 00000000..b62ce610 --- /dev/null +++ b/system/ep3/maps/e908-dl-gc3.mnm @@ -0,0 +1 @@ +../../quests/e908-dl-gc3.mnm \ No newline at end of file diff --git a/system/ep3/maps/e908-gc3.mnm b/system/ep3/maps/e908-gc3.mnm deleted file mode 120000 index cd442f34..00000000 --- a/system/ep3/maps/e908-gc3.mnm +++ /dev/null @@ -1 +0,0 @@ -../../quests/e908-gc3.mnm \ No newline at end of file diff --git a/system/quests/e765-gc3.mnm b/system/quests/e765-dlt-gc3.mnm similarity index 100% rename from system/quests/e765-gc3.mnm rename to system/quests/e765-dlt-gc3.mnm diff --git a/system/quests/e901-gc3.mnm b/system/quests/e901-dl-gc3.mnm similarity index 100% rename from system/quests/e901-gc3.mnm rename to system/quests/e901-dl-gc3.mnm diff --git a/system/quests/e903-gc3.mnm b/system/quests/e903-dl-gc3.mnm similarity index 100% rename from system/quests/e903-gc3.mnm rename to system/quests/e903-dl-gc3.mnm diff --git a/system/quests/e904-gc3.mnm b/system/quests/e904-dl-gc3.mnm similarity index 100% rename from system/quests/e904-gc3.mnm rename to system/quests/e904-dl-gc3.mnm diff --git a/system/quests/e905-gc3.mnm b/system/quests/e905-dl-gc3.mnm similarity index 100% rename from system/quests/e905-gc3.mnm rename to system/quests/e905-dl-gc3.mnm diff --git a/system/quests/e906-gc3.mnm b/system/quests/e906-dl-gc3.mnm similarity index 100% rename from system/quests/e906-gc3.mnm rename to system/quests/e906-dl-gc3.mnm diff --git a/system/quests/e907-gc3.mnm b/system/quests/e907-dl-gc3.mnm similarity index 100% rename from system/quests/e907-gc3.mnm rename to system/quests/e907-dl-gc3.mnm diff --git a/system/quests/e908-gc3.mnm b/system/quests/e908-dl-gc3.mnm similarity index 100% rename from system/quests/e908-gc3.mnm rename to system/quests/e908-dl-gc3.mnm