Skip to content

Commit 87f83bd

Browse files
committed
Manager: Add legendary challenge mode
1 parent af88060 commit 87f83bd

File tree

12 files changed

+65
-9
lines changed

12 files changed

+65
-9
lines changed

ArcdpsLogManager/ArcdpsLogManager.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
Each new log data update causes a revision increase.
1818
See LogDataUpdater for the updates.
1919
-->
20-
<Version>1.11.0.1</Version>
20+
<Version>1.11.0.2</Version>
2121
</PropertyGroup>
2222
<ItemGroup>
2323
<PackageReference Include="DebounceThrottle" Version="2.0.0" />

ArcdpsLogManager/CHANGELOG.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ This is the full changelog of the arcdps Log Manager.
1313
- oh, and it has a detailed history
1414
- relies on your logs, does not use the API
1515
- Added Cosmic Observatory CM detection
16-
- Added Temple of Febe CM detection
16+
- Added Temple of Febe CM/LM detection
17+
- Added filtering for Legendary Challenge Mode encounters (Temple of Febe)
1718

1819
#### Fixes
1920
- Fixed dps.report uploads failing when hitting the rate limit

ArcdpsLogManager/Controls/Filters/LogFilterPanel.cs

+12-4
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,15 @@ public LogFilterPanel(LogCache logCache, ApiData apiData, LogDataProcessor logPr
6464
var normalModeCheckBox = new CheckBox {Text = "Normal"};
6565
normalModeCheckBox.CheckedBinding.Bind(this, x => x.Filters.ShowNormalModeLogs);
6666
BindEnabled(normalModeCheckBox);
67-
var challengeModeCheckBox = new CheckBox {Text = "Challenge"};
68-
challengeModeCheckBox.CheckedBinding.Bind(this, x => x.Filters.ShowChallengeModeLogs);
69-
BindEnabled(challengeModeCheckBox);
7067
var emboldenedCheckBox = new CheckBox {Text = "Emboldened"};
7168
emboldenedCheckBox.CheckedBinding.Bind(this, x => x.Filters.ShowEmboldenedModeLogs);
7269
BindEnabled(emboldenedCheckBox);
70+
var challengeModeCheckBox = new CheckBox {Text = "Challenge"};
71+
challengeModeCheckBox.CheckedBinding.Bind(this, x => x.Filters.ShowChallengeModeLogs);
72+
BindEnabled(challengeModeCheckBox);
73+
var legendaryModeCheckBox = new CheckBox {Text = "Legendary"};
74+
legendaryModeCheckBox.CheckedBinding.Bind(this, x => x.Filters.ShowLegendaryChallengeModeLogs);
75+
BindEnabled(legendaryModeCheckBox);
7376

7477
var nonFavoritesCheckBox = new CheckBox {Text = "☆ Non-favorites"};
7578
nonFavoritesCheckBox.CheckedBinding.Bind(this, x => x.Filters.ShowNonFavoriteLogs);
@@ -177,10 +180,15 @@ public LogFilterPanel(LogCache logCache, ApiData apiData, LogDataProcessor logPr
177180
BeginHorizontal();
178181
{
179182
Add(normalModeCheckBox);
180-
Add(challengeModeCheckBox);
181183
Add(emboldenedCheckBox);
182184
}
183185
EndHorizontal();
186+
BeginHorizontal();
187+
{
188+
Add(challengeModeCheckBox);
189+
Add(legendaryModeCheckBox);
190+
}
191+
EndHorizontal();
184192
}
185193
EndGroup();
186194
BeginGroup("Date", new Padding(4, 0, 4, 2), spacing: new Size(4, 4));

ArcdpsLogManager/Controls/LogDetailPanel.cs

+1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public LogData LogData
6363
EncounterMode.Unknown => "",
6464
EncounterMode.Normal => "",
6565
EncounterMode.Challenge => "Challenge Mode",
66+
EncounterMode.LegendaryChallenge => "Legendary Challenge Mode",
6667
EncounterMode.Emboldened1 => "Emboldened 1",
6768
EncounterMode.Emboldened2 => "Emboldened 2",
6869
EncounterMode.Emboldened3 => "Emboldened 3",

ArcdpsLogManager/Logs/Filters/LogFilters.cs

+13
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public sealed class LogFilters : ILogFilter, INotifyPropertyChanged
2525
private bool showEmboldenedLogs = true;
2626
private bool showNormalModeLogs = true;
2727
private bool showChallengeModeLogs = true;
28+
private bool showLegendaryChallengeModeLogs = true;
2829
private bool showNonFavoriteLogs = true;
2930
private bool showFavoriteLogs = true;
3031
private DateTime? minDateTime = null;
@@ -164,6 +165,17 @@ public bool ShowChallengeModeLogs
164165
OnPropertyChanged();
165166
}
166167
}
168+
169+
public bool ShowLegendaryChallengeModeLogs
170+
{
171+
get => showLegendaryChallengeModeLogs;
172+
set
173+
{
174+
if (value == showLegendaryChallengeModeLogs) return;
175+
showLegendaryChallengeModeLogs = value;
176+
OnPropertyChanged();
177+
}
178+
}
167179

168180
public bool ShowNonFavoriteLogs
169181
{
@@ -322,6 +334,7 @@ private bool FilterByEncounterMode(LogData log)
322334
return (log.EncounterMode == EncounterMode.Normal && ShowNormalModeLogs) ||
323335
(log.EncounterMode == EncounterMode.Unknown && ShowNormalModeLogs) ||
324336
(log.EncounterMode == EncounterMode.Challenge && ShowChallengeModeLogs) ||
337+
(log.EncounterMode == EncounterMode.LegendaryChallenge && ShowLegendaryChallengeModeLogs) ||
325338
(log.EncounterMode.IsEmboldened() && ShowEmboldenedModeLogs);
326339
}
327340

ArcdpsLogManager/Logs/Updates/LogDataUpdater.cs

+3
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,9 @@ x.Profession is Profession.Thief or Profession.Engineer or Profession.Ranger
190190
"Fix success detection for Cosmic Observatory"),
191191
// When adding a new update, you need to increase the revision (last value) of the version in the .csproj file
192192
// unless the version changes more significantly, in that case it can be reset to 0.
193+
new LogUpdate(log => log.ParsingVersion < new Version(1, 11, 0, 2)
194+
&& log.Encounter == Encounter.TempleOfFebe,
195+
"Add support for Temple of Febe Legendary CM"),
193196
};
194197

195198
public IEnumerable<LogUpdateList> GetUpdates(IEnumerable<LogData> logs)

ArcdpsLogManager/Sections/Clears/MultipartEncounter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,6 @@ public bool IsChallengeModeSatisfiedBy(IEnumerable<LogData> logs)
5656
{
5757
return Encounters.All(encounter => logs.Any(log =>
5858
log.ParsingStatus == ParsingStatus.Parsed && log.EncounterResult == EncounterResult.Success && log.Encounter == encounter &&
59-
log.EncounterMode == EncounterMode.Challenge));
59+
log.EncounterMode is EncounterMode.Challenge or EncounterMode.LegendaryChallenge));
6060
}
6161
}

ArcdpsLogManager/Sections/Clears/NormalEncounter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,6 @@ public bool IsSatisfiedBy(IEnumerable<LogData> logs)
6868
public bool IsChallengeModeSatisfiedBy(IEnumerable<LogData> logs)
6969
{
7070
return logs.Any(log => log.ParsingStatus == ParsingStatus.Parsed && log.EncounterResult == EncounterResult.Success && log.Encounter == Encounter &&
71-
log.EncounterMode == EncounterMode.Challenge);
71+
log.EncounterMode is EncounterMode.Challenge or EncounterMode.LegendaryChallenge);
7272
}
7373
}

ArcdpsLogManager/Sections/LogList.cs

+2
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ private GridView<LogData> ConstructLogGridView(LogDetailPanel detailPanel, Multi
165165
{
166166
switch (x.EncounterMode)
167167
{
168+
case EncounterMode.LegendaryChallenge:
169+
return "LM";
168170
case EncounterMode.Challenge:
169171
return "CM";
170172
case EncounterMode.Normal:

EVTCAnalytics/GameData/GameBuilds.cs

+8
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,13 @@ public static class GameBuilds
1414
/// The release of Cosmic Observatory Challenge Mode, which revamped the health of the normal mode as well.
1515
/// </summary>
1616
public static int CosmicObservatoryCMRelease = 153978;
17+
18+
/// <summary>
19+
/// The Temple of Febe Challenge Mode health fix unifying the health in first phase and in later phases.
20+
/// </summary>
21+
/// <remarks>
22+
/// Note that there were more health changes to this encounter, make sure this is what you mean.
23+
/// </remarks>
24+
public static int TempleOfFebeHealthFix = 158968;
1725
}
1826
}

EVTCAnalytics/Processing/EncounterDataProvider.cs

+17-1
Original file line numberDiff line numberDiff line change
@@ -634,8 +634,24 @@ private IEncounterData GetPvEEncounterData(Encounter encounter, Agent mainTarget
634634
}
635635
case Encounter.TempleOfFebe:
636636
{
637+
// NM: before CM release 47,188,800, after CM release: 53,087,400
638+
// CM: on release 106,174,800 first phase, second phase 159M
639+
// CM: after first fix 130,064,136 in all phases
640+
// CM: made easier at 106,174,800 health (2024-03-19)
641+
// Legendary Challenge: keeps 130,064,136 (introduced in 2024-03-19)
642+
643+
// Achievements were given retroactively, so we count everything above 106,174,800
644+
// as legendary challenge even before its introduction
637645
return GetDefaultBuilder(encounter, mainTarget)
638-
.WithModes(new AgentHealthModeDeterminer(mainTarget, 60_000_000))
646+
.WithModes(new ConditionalModeDeterminer(
647+
// The first version of CM with varying health is also recognized as legendary challenge.
648+
// There were no publicly known kills of this fight, but it makes sense to recognize
649+
// the attempts as the legendary version.
650+
(gameBuild != null && gameBuild < GameBuilds.TempleOfFebeHealthFix,
651+
new AgentHealthModeDeterminer(mainTarget, 60_000_000, EncounterMode.LegendaryChallenge)),
652+
(true, new FallbackModeDeterminer(
653+
new AgentHealthModeDeterminer(mainTarget, 107_000_000, EncounterMode.LegendaryChallenge),
654+
new AgentHealthModeDeterminer(mainTarget, 60_000_000, EncounterMode.Challenge)))))
639655
.Build();
640656
}
641657
default:

EVTCAnalytics/Processing/Encounters/Modes/EncounterMode.cs

+4
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ public enum EncounterMode
3838
/// 5 stacks of Emboldened (easy mode; extra stats).
3939
/// </summary>
4040
Emboldened5,
41+
/// <summary>
42+
/// A harder version of a challenge mode.
43+
/// </summary>
44+
LegendaryChallenge,
4145
}
4246

4347
public static class EncounterModeExtensions

0 commit comments

Comments
 (0)