aboutsummaryrefslogtreecommitdiff
path: root/CHANGELOG.md
blob: 3605fef26a54866bb60aeb0f83796b2989f26204 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
# Changelog

All notable changes to this project will be documented in this file.

## Unreleased
### Added
- Raw statechange definitions for `STATRESET`, `EXTENSION`,
  `APIDELAYED`, `INSTANCESTART`, `RATEHEALTH`,
  `LAST90BEFOREDOWN`, `EFFECT`, `IDTOGUID`, `LOGNPCUPDATE`,
  `IDLEEVENT`, `EXTENSIONCOMBAT`, `FRACTALSCALE`, `EFFECT2`,
  `RULESET`, `SQUADMARKER`, `ARCBUILD`, `GLIDER` and `STUNBREAK`.
- The `gamemode::Ruleset` enum.
- New `EventKinds`:
  - `EventKind::BarrierUpdate`
  - `EventKind::StatReset`
  - `EventKind::InstanceStart`
  - `EventKind::LogNpcUpdate`
  - `EventKind::FractalScale`
  - `EventKind::Ruleset`
  - `EventKind::SquadMarker`
  - `EventKind::ArcBuild`
  - `EventKind::Glider`
  - `EventKind::Stunbreak`
- A `PartialOrd` implementation for `gamemode::Encounter`.
- `{Boss, Encounter}::Kanaxai`
- Visions of Eternity elite specializations

### Changed
- `FromRawEventError::UnexpectedReplInfo` is now `UnexpectedInternalEvent`.

## 0.7.3 - 2022-05-11
### Added
- Support for CM detection in the Xunlai Jade Junkyard strike (Ankka)

## 0.7.2 - 2022-04-20
### Added
- Support for Aetherblade Hideout logs with the Challenge Mote active:
  - Success detection for CM logs
  - CM detection

### Fixed
- Success detection for Mai Trin logs that ended before the Echo of Scarlet
  Briar spawned.

## 0.7.1 - 2022-04-01
### Added
- Various analyzers for the End of Dragons strike missions:
  - `analyzers::strikes::CaptainMaiTrin`
  - `analyzers::strikes::Ankka`
  - `analyzers::strikes::MinisterLi`
  - `analyzers::strikes::Dragonvoid`

### Fixed
- Success/failure detection for the End of Dragons strike missions.
- Some Dragonvoid logs not being recognized as such.

## 0.7.0 - 2022-03-10
### Added
- `EliteSpec`s for the new End of Dragons specializations
- `Boss` and `Encounter` for the new strikes
  - `{Boss, Encounter}::CaptainMaiTrin`
  - `{Boss, Encounter}::Ankka`
  - `{Boss, Encounter}::MinisterLi`
  - `{Boss, Encounter}::Dragonvoid`

## 0.6.1 - 2021-11-25
### Added
- `Encounter::TwistedCastle` to identify twisted castle logs.

## 0.6.0 - 2021-11-19
### Added
- Boss and encounter definitions for the training golems (`StandardKittyGolem`,
  `MediumKittyGolem`, `LargeKittyGolem`).
- Missing encounters and bosses:
  - `Encounter::BanditTrio` (`Boss::Berg`, `Boss::Zane`, `Boss::Narella`)
  - `Encounter::RiverOfSouls` (no bosses)
  - `Encounter::BrokenKing` (`Boss::BrokenKing`)
  - `Encounter::EaterOfSouls` (`Boss::EaterOfSouls`)
  - `Encounter::StatueOfDarkness` (`Boss::EyeOfJudgment` and `Boss::EyeOfFate`)
- `Log::is_generic` to check whether a log is generic (WvW).
- `gamedata::GameMode` and the `Encounter::game_mode` and `Log::game_mode`
  methods.
- `FromRawEventError::UnknownLanguage` has been added to deal with an invalid
  language byte.
- The `CbtStateChange::BarrierUpdate` and `CbtResult::Breakbar` low-level
  variants.
- The `EventKind::{BuffInitial, StackActive, StackReset}` events.

### Changes
- Internal changes that lead to some small speedups, especially in the
  *Soulless Horror* outcome analyzer (~50x speedup) as well as most other
  analyzers (up to a 2.77x speedup).
- An internal parsing change to speed up log processing (by around 50%).
- `EventKind` has been marked non-exhaustive.

### Fixed
- `evtclib` will no longer choke on WvW logs where player names might not contain the expected
  information.

## 0.5.0 - 2020-10-07
### Added
- `Boss::Ai` to represent Ai, Keeper of the Peak in the Sunqua Peak fractal.
- `analyzers::fractal::Ai` with logic to determine CM and outcome of the
  Sunqua Peak CM fight.
- `Log::gadgets` to retrieve all gadget agents.
- `Log::build_id` to retrieve the game's build id.
- The `serde` optional feature to enable (de)serialization of API types.
- `Encounter::from_header_id` to convert a header ID from arcdps to the correct
  encounter.

### Changed
- `gamedata::Boss` has been split in `gamedata::Boss` and `gamedata::Encounter`
  - `Encounter::VoiceOfTheFallen` is now `Encounter::SuperKodanBrothers`
  - `Encounter::LargosTwins` is now `Encounter::TwinLargos`
  - `Boss::Xera2`, `Boss::Nikare`, `Boss::Kenut`, `Boss::ClawOfTheFallen` and
    `Boss::VoiceOfTheFallen` have been introduced
- `gamedata::Boss` is no longer re-exported as `evtclib::Boss`, instead
  `evtclib::Encounter` is exported.
- Renamed `Log::npcs` to `Log::characters` to have consistent naming.

### Fixed
- Some edge cases where raid success was not detected (as long as the fight was
  rewarded).

### Removed
- Various `*_ID` constants from `gamedata`: `XERA_PHASE2_ID`, `NIKARE_ID`,
  `KENUT_ID`, `VOICE_OF_THE_FALLEN_ID` and `CLAW_OF_THE_FALLEN_ID`.

## 0.4.3 - 2020-09-21
### Added
- `gamedata::VOICE_OF_THE_FALLEN_ID` and `gamedata::CLAW_OF_THE_FALLEN_ID`.

### Fixed
- Handling of log files with "Claw of the Fallen" as the encounter id.
- Both bosses are now returned for the "Voice & Claw of the Fallen" strike
  mission.
- Fixed CM detection for Skorvald logs done after the 2020-09-15 patch
  (introduction of Sunqua Peak).

## 0.4.2 - 2020-08-28
### Fixed
- Removed leftover debug output ("First aware: ...") from the Deimos analyzer.

## 0.4.1 - 2020-08-17
### Added
- `Log::errors` as a convenience function.

### Fixed
- Fixed the conversion from `CBTS_ERROR` to `EventKind::Error` not having the
  correct text.

## 0.4.0 - 2020-07-24
### Added
- A variant for `CBTS_TAG`.
- The function `Log::span` to get the duration of a log.
- Analyzers to detect fight outcomes and challenge motes in a fight-dependent
  way.
- `gamedata::KENUT_ID` and `gamedata::NIKARE_ID` for the Largos Twins' IDs.

### Fixed
- `Log::is_boss` and `Log::boss_agents` now properly work with both Largos in
  the Twin Largos fight.

### Removed
- `CmTrigger` and `Boss::cm_trigger`, as that is now handled by analyzers.

## 0.3.3 - 2020-05-25
### Added
- Variants for `CBTS_BREAKBARSTATE`, `CBTS_BREAKBARPERCENT` and `CBTS_ERROR`.
- `EventKind::Error` as the higher-level part for `CBTS_ERROR`.
- Equivalents for the  `e_attribute` and `e_buffcategory` enums.

### Changed
- Invalid state changes no longer cause the parser to choke, instead they are
  ignored in `parse_events`.

## 0.3.2 - 2020-05-12
### Added
- Support for determining Challenge Motes.
  - `evtclib::gamedata::CmTrigger` along with
    `evtclib::gamedata::Boss::cm_trigger`.
  - `evtclib::Log::is_cm`.
- Convenience methods `evtclib::process_stream` and `evtclib::process_file`.
- `Display` implementation for `Boss`, `Profession` and `EliteSpec`.

## 0.3.1 - 2020-05-04
### Added
- Implement `FromStr` for `Profession` and `EliteSpec`.

### Changed
- Removed dependency on `fnv`.

## 0.3.0 - 2020-05-02
### Added
- Implement standard traits `Debug`, `Default`, `PartialEq`, `Eq` and `Hash`
  for raw types in `evtclib::raw`.
- Implement `From<Evtc>` for `PartialEvtc`.

### Changed
- Parsing functions now take their input by-value.
- `evtclib::Event` now provides getters instead of public fields.

## 0.2.0 - 2020-04-29
### Added
- `Hash`, `PartialEq` and `Eq` implementations for `Agent`.
- `Hash` implementation for `WeaponSet` and `Activation`.
- `evtclib::gamedata::{Profession, EliteSpec}` to make dealing with
  profession/elite specialization ids easier.
- `evtclib::Log::encounter` to automatically convert the ID to the right
  `Boss`.
- `evtclib::raw::cstr_up_to_nul` to make dealing with the embedded strings
  easier.
- Handling for `CBTS_VELOCITY`, `CBTS_POSITION`, `CBTS_FACING`, `CBTS_MAPID`,
  `CBTS_ATTACKTARGET` and `CBTS_TARGETABLE` events.
- Convenience methods to `Log`: `local_start_timestamp`, `local_end_timestamp`,
  `was_rewarded`.

### Changed
- `evtclib::statistics::gamedata` is now called `evtclib::gamedata`, and the
  list of boons has been removed.
- `evtclib::Agent` now takes a `Kind` parameter which make some methods more
  ergonomical to use.
- `evtclib::Agent{Name, Kind}` have been reworked:
  - They have been consolidated into a single `AgentKind`, which also contains
    the name.
  - Three new structs `Player`, `Gadget` and `Character` have been added
    instead of embedding the fields directly into the enum.
  - `Player::profession()` and `Player::elite()` now use the new `Profession`
    and `EliteSpec` enums.
- `evtclib::Log::boss_id()` has been renamed `encounter_id`.
- `evtclib::EvtcError::Utf8Error` has changed the inner type from
  `FromUtf8Error` to `Utf8Error`.
- The submodule `evtclib::event` is now publicly accessible.
- Structs are now converted using `TryFrom` instead of our custom `from_raw`
  method.

### Fixed
- Fixes for parsing `evtclib::gamedata::Boss`:
  - "soulless horror" will now be parsed correctly as `Boss::SoullessHorror`.
  - "largos twins" will now be parsed correctly as `Boss::LargosTwins`.
  - "ensolyss of the endless torment" will now be parsed correctly as
    `Boss::Ensolyss`.
  - "kodans" will now be parsed as `Boss::VoiceOfTheFallen`.
  - "conjured amalgamate" will now be parsed correctly as
    `Boss::ConjuredAmalgamate`. The typo in "conjured almagamate" has been
    fixed.

### Removed
- Removed `evtclib::statistics` submodule, see `08465ea` for the rationale.
- Removed all feature flags, so the crate can now be used on stable.
- Removed `Eq` from `evtclib::Event` & `evtclib::EventKind`.
- `main.rs` is gone.

### Unsafe
- An unsafe one-liner has been added in `Agent::transmute`. Rationale and a
  comment about safety can be found in the source.