Skip to content

Commit

Permalink
removed prophecy content
Browse files Browse the repository at this point in the history
In 3.17 (Siege of the Atlas) prophecy content has been removed from the game.
  • Loading branch information
Xeverous committed Feb 4, 2022
1 parent 66e8e62 commit 0107a37
Show file tree
Hide file tree
Showing 26 changed files with 24 additions and 181 deletions.
4 changes: 2 additions & 2 deletions doc/user/actual_filter_quirks.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ Given that:
These are not bugs, but may be viewed as such if understood incorrectly.

- Resonators fall into `"Delve Stackable Socketable Currency"`, `"Stackable Socketable Currency"`, `"Socketable Currency"` and `"Currency"` class conditions but not into `"Stackable Currency"`. This may seem inconsistent with how other supersets of item classes are handled - other supersets either do work (`"Axes"` vs `"Two Hand Axes"`) or error when loading (`"Two Axes"`). This is because some strings may be substrings of another class name - if unsure about class name validity use `==` and the game client will error if it is not a proper full class name.
- There is no `"Currency"` class. All semingly such items are classified exactly as `"Stackable Currency"`, even if they do not stack in game (eg Prophecies). Note that `Class "Currency"` works because it uses substring-based matching by default - `Class == "Currency"` will fail.
- There is no `"Currency"` class. All semingly such items are classified exactly as `"Stackable Currency"`, even if they do not stack in game (e.g. now removed Prophecies). Note that `Class "Currency"` works because it uses substring-based matching by default - `Class == "Currency"` will fail.

Other:

- Quest items must be filtered with an explicit item class (`Class "Quest Items"`). This is intended, not a bug.
- Disabled Prophecies cannot drop and cannot be filtered. Also intended.
- Disabled Prophecies cannot drop and cannot be filtered. Also intended. As of 3.17 (Siege of the Atlas) prophecy content has been removed.

## bugs

Expand Down
7 changes: 2 additions & 5 deletions doc/user/filter_spirit_tutorial.md
Original file line number Diff line number Diff line change
Expand Up @@ -719,7 +719,6 @@ Price [CMP] Integer
```
Class [EQ] (None | String)+
BaseType [EQ] (None | String)+
Prophecy [EQ] (None | String)+
EnchantmentPassiveNode [EQ] (None | String)+
HasExplicitMod [==] | CMPInteger (None | String)+
Expand All @@ -740,7 +739,7 @@ SetAlertSound (String | Integer | ShaperVoiceLine) [Integer]

One of the core fancy features of FS.

Write a block just as you would normally write it, but add an `Autogen <query_name>` condition. Autogeneration will place strings into `BaseType ==` (`Prophecy ==` in case of prophecies) condition, based on data provided by websites such as poe.ninja or poe.watch.
Write a block just as you would normally write it, but add an `Autogen <query_name>` condition. Autogeneration will place strings into `BaseType ==` condition, based on data provided by websites such as poe.ninja or poe.watch.

- You need to select a specific league when downloading the prices. If you play on multiple leagues, generate a filter for each.
- The `Class` condition must either not exist or match autogenerated item class. Some autogenerations will also check for other conditions that would conflict with autogenerated items (such as `GemLevel` for `currency`).
Expand All @@ -755,7 +754,6 @@ Available queries:
- `fragments`
- `delirium_orbs`
- `cards`
- `prophecies`
- `essences`
- `fossils`
- `resonators`
Expand Down Expand Up @@ -805,7 +803,6 @@ Some implementation notes:
- `gems` do not report alternate quality gems, for these reasons:
- prices are unstable, often with low confidence
- filters do not recognize alternate quality gems by the name (`BaseType == "Divergent Berserk"` is not accepted); instead they use `GemQualityType` condition
- `prophecies` do not report certain drop-disabled prophecies, even if they are valuable - for some reason game rejects filters with such names

Examples:

Expand Down Expand Up @@ -1143,4 +1140,4 @@ $leveling_caster = $leveling $caster
# both statements semantically equivalent
ShowDiscard $leveling $caster
ShowDiscard $leveling_caster
```
```
1 change: 0 additions & 1 deletion doc/user/how_filters_work.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ BaseWard [CMP] Integer+
Class [EQ] String+
BaseType [EQ] String+
Prophecy [EQ] String+
EnchantmentPassiveNode [EQ] String+
HasInfluence [EQ] None | Influence+
Expand Down
7 changes: 3 additions & 4 deletions doc/user/loot_properties.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,17 +70,16 @@ This includes:
- Harvest currency (`Facetor's Lens`, `Infused Engineer's Orb`)
- Ritual currency (`Ritual Splinter`, `Ritual Vessel`) but not `Blood-filled Vessel`
- Heist currency (`Prime Regrading Lens`, `Secondary Regrading Lens`, `Tempering Orb`, `Tailoring Orb`, `Rogue's Marker`)
- itemised prophecies
- ~~itemised prophecies~~ (removed in 3.17)
- `Stacked Deck`

Notes:

- High `DropLevel` does not strictly correlate with currency value. Some low-value currencies require high drop levels (`Simple Sextant` - `68`) and some high-value currencies require low drop levels (`Exalted Orb` - `35`).
- In Harvest league it was possible to obtain specific currency (`Gemcutter's Prism`) in stack size of `0`. Item filters correctly detect this.
- Anything that can stack (outside special stash tabs) is `"Stackable Currency"`.
- Some items can not stack (`Facetor's Lens`, prophecies) but still are classified as such. This is intentional (see point below).
- There is no `"Currency"` class. All are `"Stackable Currency"`. `Class "Currency"` works because without `==` it requires only a substring match, not a 1:1 match.
- Prophecies can be caught by `Prophecy` condition which works for them the same way as `BaseType`.
- Some items can not stack (e.g. `Facetor's Lens`) but still are classified as such. This is intentional (see point below).
- There is no `"Currency"` class. All are `"Stackable Currency"`. `Class "Currency"` works because without `==` it requires only a substring match, not an exact match.

```
DropLevel >= 1 # many are 1 but also many start at very high levels
Expand Down
1 change: 0 additions & 1 deletion src/gui/fs/gui/windows/filter/debug_state.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,6 @@ void debug_state::recompute(const parser::parse_metadata& metadata)
color_line_by_condition_result(cs.socket_group, metadata, _line_colors);
color_line_by_condition_result(cs.has_explicit_mod, metadata, _line_colors);
color_line_by_condition_result(cs.has_enchantment, metadata, _line_colors);
color_line_by_condition_result(cs.prophecy, metadata, _line_colors);
color_line_by_condition_result(cs.enchantment_passive_node, metadata, _line_colors);
color_line_by_condition_result(cs.enchantment_passive_num, metadata, _line_colors);
color_line_by_condition_result(cs.has_influence, metadata, _line_colors);
Expand Down
10 changes: 0 additions & 10 deletions src/gui/fs/gui/windows/filter/item_tooltip.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ void draw_item_tooltip_first_column()
ImGui::Text("%s:", kw::enchantment_passive_node);
ImGui::TextDisabled("HasAnnointment:");

ImGui::Text("%s:", kw::prophecy);
ImGui::Text("%s:", kw::identified);
ImGui::Text("%s:", kw::corrupted);
ImGui::Text("%s:", kw::mirrored);
Expand Down Expand Up @@ -146,15 +145,6 @@ void draw_item_tooltip_second_column(const lang::item& itm)
ImGui::TextDisabled(str_not_implemented);
ImGui::TextDisabled(str_not_implemented);

if (itm.is_prophecy) {
// string here because filters expect this string
// for unknown reason, Prophecy is not a boolean condition
ImGui::TextUnformatted(itm.base_type.c_str());
}
else {
ImGui::TextUnformatted("-");
}

const auto output_boolean = [](bool value) {
namespace kw = lang::keywords::rf;

Expand Down
2 changes: 0 additions & 2 deletions src/lib/fs/compiler/compiler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -374,8 +374,6 @@ verify_autogen(
return verify_autogen_singular(autogen.origin, conditions, cn::essences, diagnostics);
case cat_t::cards:
return verify_autogen_singular(autogen.origin, conditions, cn::divination_card, diagnostics);
case cat_t::prophecies:
return verify_autogen_singular(autogen.origin, conditions, cn::prophecies, diagnostics);
case cat_t::vials:
return verify_autogen_singular(autogen.origin, conditions, cn::vials, diagnostics);

Expand Down
6 changes: 0 additions & 6 deletions src/lib/fs/compiler/detail/conditions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -226,12 +226,6 @@ add_string_array_condition(
set.base_type,
diagnostics);
}
case lang::string_array_condition_property::prophecy: {
return add_non_range_condition(
lang::strings_condition{std::move(strings), is_exact_match, condition_origin},
set.prophecy,
diagnostics);
}
case lang::string_array_condition_property::enchantment_passive_node: {
return add_non_range_condition(
lang::strings_condition{std::move(strings), is_exact_match, condition_origin},
Expand Down
4 changes: 0 additions & 4 deletions src/lib/fs/generator/make_item_filter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -302,10 +302,6 @@ make_filter_block(
result_block.conditions.base_type = make_condition_base_type_basic(item_price_data.divination_cards);
result_block.conditions.class_ = make_condition_class(cn::divination_card);
break;
case lang::item_category::prophecies:
result_block.conditions.prophecy = make_condition_base_type_basic(item_price_data.prophecies);
result_block.conditions.class_ = make_condition_class(cn::prophecies);
break;
case lang::item_category::essences:
result_block.conditions.base_type = make_condition_base_type_basic(item_price_data.essences);
result_block.conditions.class_ = make_condition_class(cn::essences);
Expand Down
1 change: 0 additions & 1 deletion src/lib/fs/lang/condition_properties.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ enum class string_array_condition_property
{
class_,
base_type,
prophecy,
enchantment_passive_node
};

Expand Down
2 changes: 0 additions & 2 deletions src/lib/fs/lang/condition_set.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,6 @@ void condition_set::generate(std::ostream& output_stream) const

output_strings_condition(class_, kw::class_, output_stream);
output_strings_condition(base_type, kw::base_type, output_stream);
output_strings_condition(prophecy, kw::prophecy, output_stream);
output_strings_condition(enchantment_passive_node, kw::enchantment_passive_node, output_stream);

output_ranged_strings_condition(has_explicit_mod, kw::has_explicit_mod, output_stream);
Expand Down Expand Up @@ -387,7 +386,6 @@ bool condition_set::is_valid() const

return is_valid_strings_condition(class_)
&& is_valid_strings_condition(base_type)
&& is_valid_strings_condition(prophecy)
&& is_valid_strings_condition(enchantment_passive_node)
&& is_valid_ranged_strings_condition(has_explicit_mod)
&& is_valid_ranged_strings_condition(has_enchantment);
Expand Down
3 changes: 0 additions & 3 deletions src/lib/fs/lang/condition_set.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,6 @@ struct condition_set
integer_range_condition width;
std::optional<ranged_strings_condition> has_explicit_mod;
std::optional<ranged_strings_condition> has_enchantment;
std::optional<strings_condition> prophecy;
std::optional<strings_condition> enchantment_passive_node;
std::optional<influences_condition> has_influence;
std::optional<gem_quality_type_condition> gem_quality_type;
Expand Down Expand Up @@ -358,7 +357,6 @@ struct condition_set_match_result
&& is_not_failure(socket_group)
&& is_not_failure(has_explicit_mod)
&& is_not_failure(has_enchantment)
&& is_not_failure(prophecy)
&& is_not_failure(enchantment_passive_node)
&& is_not_failure(has_influence)
&& is_not_failure(gem_quality_type)
Expand Down Expand Up @@ -403,7 +401,6 @@ struct condition_set_match_result
std::optional<condition_match_result> socket_group;
std::optional<condition_match_result> has_explicit_mod;
std::optional<condition_match_result> has_enchantment;
std::optional<condition_match_result> prophecy;
std::optional<condition_match_result> enchantment_passive_node;
std::optional<condition_match_result> has_influence;
std::optional<condition_match_result> gem_quality_type;
Expand Down
2 changes: 0 additions & 2 deletions src/lib/fs/lang/item.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ namespace item_class_names {
constexpr auto scrolls_generic = currency_stackable;
constexpr auto scrolls_harbinger = currency_stackable;
constexpr auto remnant_of_corruption = currency_stackable;
constexpr auto prophecies = currency_stackable;
constexpr auto essences = currency_stackable;
constexpr auto fossils = currency_stackable;
constexpr auto oils = currency_stackable;
Expand Down Expand Up @@ -506,7 +505,6 @@ struct item
// these 2 should be overwritten whenever an item is created - size 0x0 makes no sense
int height = 0;
int width = 0;
bool is_prophecy = false; // if true, base type has an additional meaning (Prophecy condition)

/*
* "seemingly optional" fields
Expand Down
25 changes: 0 additions & 25 deletions src/lib/fs/lang/item_filter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,27 +129,6 @@ test_ranged_strings_condition(
}
}

[[nodiscard]] std::optional<condition_match_result>
test_prophecy_condition(
const std::optional<strings_condition>& opt_condition,
const item& itm)
{
if (!opt_condition)
return std::nullopt;
/*
* Prophecy condition is a bit different. It is not a boolean condition nor does it check
* for "Prophecy" class. Instead it treats the item base type name as the prophecy name.
* If the item is an itemised prophecy, then the base type is compared (as if in BaseType
* condition), otherwise condition fails.
*/
const strings_condition& condition = *opt_condition;

if (!itm.is_prophecy)
return condition_match_result::failure(condition.origin);

return test_strings_condition_impl(condition, itm.base_type);
}

[[nodiscard]] std::optional<condition_match_result>
test_influences_condition(
const std::optional<influences_condition>& opt_condition,
Expand Down Expand Up @@ -469,8 +448,6 @@ item_style default_item_style(const item& itm)
result.text_color = color_action{color{integer{ 14}, integer{186}, integer{255}, integer{255}}, {}};
else if (itm.class_ == item_class_names::gems_active || itm.class_ == item_class_names::gems_support)
result.text_color = color_action{color{integer{ 27}, integer{162}, integer{155}, integer{255}}, {}};
else if (itm.is_prophecy)
result.text_color = color_action{color{integer{181}, integer{ 75}, integer{255}, integer{255}}, {}};
else if (itm.class_ == item_class_names::quest_items)
result.text_color = color_action{color{integer{ 74}, integer{230}, integer{ 58}, integer{255}}, {}};
// maps are both in these class names and in rarities - border color is the same as text color
Expand Down Expand Up @@ -587,8 +564,6 @@ item_filtering_result pass_item_through_filter(const item& itm, const item_filte
cs_result.has_explicit_mod = test_ranged_strings_condition(cs.has_explicit_mod, itm.explicit_mods);
cs_result.has_enchantment = test_ranged_strings_condition(cs.has_enchantment, itm.enchantments_labyrinth);

cs_result.prophecy = test_prophecy_condition(cs.prophecy, itm);

cs_result.has_influence = test_influences_condition(cs.has_influence, itm.influence);

cs_result.is_identified = test_boolean_condition(cs.is_identified, itm.is_identified);
Expand Down
2 changes: 0 additions & 2 deletions src/lib/fs/lang/keywords.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ namespace rf
constexpr auto width = "Width";
constexpr auto has_explicit_mod = "HasExplicitMod";
constexpr auto has_enchantment = "HasEnchantment";
constexpr auto prophecy = "Prophecy";
constexpr auto has_influence = "HasInfluence";
constexpr auto stack_size = "StackSize";
constexpr auto gem_level = "GemLevel";
Expand Down Expand Up @@ -178,7 +177,6 @@ namespace sf
constexpr auto bases = "bases";
constexpr auto cards = "cards"; // 2.0 - The Awakening (Warbands + Tempest)
// constexpr auto enchants_helmet = "enchants_helmet"; // 2.2 - Perandus league (also Ascendancy)
constexpr auto prophecies = "prophecies"; // 2.3 - Prophecy league
constexpr auto essences = "essences"; // 2.4 - Essence league (also Atlas of Worlds)
constexpr auto leaguestones = "leaguestones"; // 2.6 - Legacy league
// constexpr auto pieces = "pieces"; // 3.0 - Harbinger league (also Fall of Oriath) (merged into uniques)
Expand Down
5 changes: 1 addition & 4 deletions src/lib/fs/lang/loot/item_database.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -724,6 +724,7 @@ bool item_database::parse(std::string_view items_metadata_json, log::logger& log
utility::starts_with(filename, "BreachFragment") /* skip old Breachstones */
|| utility::ends_with(filename, "Complete") /* skip complete sets */
|| utility::starts_with(filename, "ProphecyFragment") /* skip old prophecy keys */
|| utility::starts_with(filename, "CurrencyProphecyFragment") /* skip - prophecy content was removed in 3.17 */
|| utility::starts_with(filename, "ShaperFragment") /* skip old Shaper fragments */
|| utility::starts_with(filename, "VaalFragment") /* skip old Atziri and Ubr Atziri fragments */
|| filename == "FragmentPantheonFlask" /* skip old Divine Vessel */)
Expand Down Expand Up @@ -757,9 +758,6 @@ bool item_database::parse(std::string_view items_metadata_json, log::logger& log
else if (utility::starts_with(filename, "CurrencyUberElderFragment")) {
map_fragments.uber_elder_fragments.push_back(std::move(*elem_item));
}
else if (utility::starts_with(filename, "CurrencyProphecyFragment")) {
map_fragments.prophecy_fragments.push_back(std::move(*elem_item));
}
else if (utility::starts_with(filename, "CurrencyLegionFragment")) {
map_fragments.legion_fragments.push_back(std::move(*elem_item));
}
Expand Down Expand Up @@ -932,7 +930,6 @@ log::message_stream& operator<<(log::message_stream& stream, const item_database
"uber elder fragments: " << db.map_fragments.uber_elder_fragments.size() << "\n"
"atziri fragments: " << db.map_fragments.atziri_fragments.size() << "\n"
"uber atziri fragments: " << db.map_fragments.uber_atziri_fragments.size() << "\n"
"prophecy fragments: " << db.map_fragments.prophecy_fragments.size() << "\n"
"legion fragments: " << db.map_fragments.legion_fragments.size() << "\n"
"breachstones: " << db.map_fragments.breachstones.size() << "\n"
"simulacrum: " << log_opt(db.map_fragments.simulacrum) << "\n"
Expand Down
1 change: 0 additions & 1 deletion src/lib/fs/lang/loot/item_database.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,6 @@ struct map_fragments_database
std::vector<elementary_item> uber_elder_fragments;
std::vector<elementary_item> atziri_fragments;
std::vector<elementary_item> uber_atziri_fragments;
std::vector<elementary_item> prophecy_fragments; // aka Pale Court keys
std::vector<elementary_item> legion_fragments; // aka Emblems
std::vector<elementary_item> breachstones;

Expand Down
Loading

0 comments on commit 0107a37

Please sign in to comment.