EQL·Parse
esenfrdept

Releases

Every version with what changed and why.

1.26.0

August 23, 2026

Your items, end to end

The «Items» section grows to where it was meant to reach.

In «Your gear», every slot is now a card: what you are wearing, its upgrade level, its four exaltation slots and which item each one came from.

And «Your items» arrives, with everything else: what is in the bank, what is in your bags, and the bags themselves — with a search box, a filter by place and a filter by free slot. Duplicates are shown, because keeping them is a decision and not an oversight.

What you have and what exists, each on its own side

EQL Parse now carries the item catalogue from eqlwiki.com, consulted on 23 August 2026, with that date in plain sight. The program asks nobody for anything while you use it.

Searching answers you twice and separately: how many among your own things, which we read from your inventory, and how many in the catalogue, which we consulted elsewhere. They are never added together, because "you do not have it" and "it does not exist" are not the same thing.

The spellbook the game dumps

If you have used /output spellbook, the «Spells» section reads that file and tells you what it holds: how many spells it declares, when it was dumped, and how many of them your log has no record of. It sits beside what was already on record, and does not mix with it.

And where each thing came from

Loose loot — what you pick up outside a fight — now says where it came from instead of being counted plainly, and mote offerings are counted apart from what you pick up: what leaves your inventory cannot add to what enters it.

Three things this version does NOT know

And they are said, rather than left half done:

  • what it costs to raise an item a level;
  • how far into the current level you are;
  • the effect name is not on every catalogue card: it is on about 1,600 of the 11,092. Where it is missing, nothing is made up.

Objetos y exaltaciones

August 22, 2026

EQL Parse no longer reads only your combat log: it now also reads the inventory the game dumps.

That brings a new section, “Items”, where you see your gear piece by piece with its four exaltation slots: what each slot holds, which one is free, and which one you have not unlocked yet.

And you see which exaltation fired, how many times, and what you were casting at that moment.

If your inventory dump is older than what you are looking at, the app tells you instead of keeping quiet about it.

1.24.0 — lo que destruyes ya se cuenta

August 21, 2026

What you destroy is counted now

When you destroy an item it stops vanishing: it shows in its own column, next to what you have looted. It is not subtracted from your loot — they are two different facts, and subtracting them would give a number that answers neither question.

A missing rung when you consider

There was one /consider answer the app read and threw away, so that creature was left without a level. Not any more.

Dragon Hoard loot, in its place

What comes out of the Dragon Hoard now arrives marked for what it is, and stops mixing in with ordinary loot.

1.23.0 — la ficha del candidato, y el panel que no se movía

August 21, 2026

On opening, it will re-read your log once

It takes about three quarters of a minute — measured: 42 seconds over a log of 1.5 million lines — and you can keep using the app meanwhile. A notice explains it and nothing starts until you accept.

It is needed because the saved fights didn't know which visit to the zone they happened in, and that fact isn't anywhere but in the log. Without it, the respawn ceiling could count gaps between two different entries — where the enemy didn't come back, it was born with the new copy. No combat figure changes.

The timer panel was frozen

It painted once when it opened and stayed still: the countdown didn't move, a death didn't restart it, and the × on a row removed the timer but not the row. It's alive now.

If you wondered why the number never changed, it wasn't you.

A candidate's card, on hover

Hover any row of the Watch an enemy list and its card comes up: where, how many times you have killed it there, its ceiling if it has one, and the level you have seen when considering it — as a range, with how many considers hold it up. Never as a single figure: the same enemy, in the same zone and difficulty, comes up with different levels.

And its loot in two separate blocks: what you have looted, which is measured, and what the wiki says, which we don't have yet and is stated instead of left blank.

Size and transparency, inside the overlay itself

The size slider sits next to the transparency one, in the panel and not in Settings. Each overlay remembers its own.

Ceilings that bounded nothing

A respawn ceiling only holds if both deaths are the same creature. The ones resting on a gap between two different visits are gone, and some change a lot: one said «no more than 280 minutes» and its real ceiling is nine and a half.

1.22.0 — todo lo que has matado, en una lista

August 21, 2026

Everything you have ever killed, in one list

The Watch an enemy tab is no longer empty: it brings the enemies from your history, with their zone and difficulty already filled in. Search by name or by zone, press Watch and the timer is born complete. Nothing to type, and no need to have the creature in front of you.

Each one says how many times it has fallen there and when the last one was, and the ones you already watch come marked. The most recent goes on top: last night's zone is the first without looking for it.

Timers that couldn't find their deaths

In zones with a difficulty, a timer could stay on «Waiting for its first death» forever even if you had killed that enemy there many times — and then it never restarted. It finds them now: they count again, with their observations and their ceiling.

A fourth state: the one that estimates nothing

A timer can know when the enemy died and not know how long it takes to come back. That used to stay mute, or say «It should be there by now», which is claiming something with nothing to claim it from. Now it says the only thing that can be said, and it is a fact: how long it has been since it died.

The panel, sorted by what is about to happen

On top, what the clock says — the ones already due and the ones counting down; below, the ones whose time we don't know. A timer with no estimate is not more urgent than one with twenty seconds left, and it used to come first.

What you type doesn't erase itself

The field for setting the time by hand went back to its previous value if the timer repainted while you were typing. Not any more: what you have touched stays.

1.21.0 — los temporizadores, en un panel encima del juego

August 20, 2026

Timers, in one panel over the game

One panel, all of them inside. It opens as soon as you open the first and closes when you close the last — nothing to remember.

  • sorted by the one that comes back soonest, and the ones already due, on top
  • one line per timer: name, time, and how many gaps hold up its ceiling
  • the × on a line closes that timer, not the window

And if you're in a zone where you have none, it doesn't go blank: it tells you how many you have elsewhere.

Three states, and the third one was missing

A timer that hasn't yet seen its creature die even once doesn't say «it should be there by now»: it says «Waiting for its first death». Saying something ought to be back when we don't even know when it left is making it up.

And it isn't a rare case: it's the state every timer starts in when opened from the overlay.

Set a timer from the overlay

Expand an enemy in the main overlay and the button is there. It doesn't have to be dead — in fact it will usually be alive and hitting you, which is exactly when you remember you want to track it.

The name, the zone and the difficulty come from where you are. Nothing to type.

Every overlay resizes and dims

Drag from any of the four corners. And hovering brings up a transparency slider.

Each overlay remembers its own position, size and transparency, so you adjust one and the other stays as you left it.

1.20.1 — los temporizadores dicen un techo, y si se le ha visto

August 20, 2026

Timers now state a ceiling, and stop guessing

Until now, a timer that reached zero stayed at zero and said nothing more. Now it says two new things, and both are facts measured on your own log:

A ceiling, with the number of gaps holding it up:

no more than 10:35 — 6 observed gaps

That is not «its period is 10:35». It is it has never taken longer than that, which is a different and far safer claim: it comes from subtracting two of its deaths, and between those two deaths fits the period *plus* however long you took to come back. So the real period is that or less. Never more.

That is why the gap count is always beside it: a ceiling resting on a single gap is just as true and far weaker than one resting on six.

And whether it has been seen. Any line in the log that names the creature proves it is there: a hit, a miss, a spell. No need to wait until you kill it.

seen 3s ago, in a combat line → it's there

not seen for 12:00, and its ceiling is 10:35 → it should be there, and you haven't seen it

And the warning that guessed is gone

Where it used to say *«it has been at zero for 3 periods, it may already be there and you missed it»* there is no longer a guess: there is the fact. Either we named it X ago, or we have not named it since its last death.

The «set a timer» panel was unreadable in dark

The «Set a timer» button in Scene opened a panel with a cream background and light text on top. It was written with hardcoded colours, back when light was the default theme. It now uses the theme's own, and reads in both.

1.20.0 — Reapariciones se ve de otra manera

August 20, 2026

Respawns looks different now

The section has been rebuilt from scratch. It used to be a grid of cards; now it is a list of collapsible rows: each timer takes one line, and you open the one you care about. With four or five open you no longer have to scroll.

And with the row closed you see what matters:

  • the enemy's name,
  • the three sources — «yours», «zone» and «seen» — all three, always, without unfolding anything;
  • and the countdown, with a label underneath saying which of the three it comes from.

The one driving the number is filled in; the other two are outlined. That is the one thing on this screen that is not up for negotiation: a number without saying where it comes from is half a fact.

And four controls at the top that were not there

  • a search box, always visible;
  • «Group by zone» or «No grouping», for when your timers are in different places;
  • two filters, «Counting» and «Due», each with its own count inside: the number tells you whether pressing it is worth it;
  • and «Roomy» / «Dense», which tightens the rows.

The «Where each figure comes from» legend explains the three sources once, folds away, and remembers how you left it.

What has not changed

Not one figure. What we have observed still isn't shown as if it were a period: with few observations no number is given, and neither is one for a name with several individuals behind it, because we don't know which one came back. What the card says in that case is how many observations it has and why it is keeping quiet.

And two things that arrived in 1.19.1

In case you missed them, because they are not from this version:

  • you can type in the name field — it used to swallow what you typed;
  • and from a fight, the «Set a timer» button in Scene sets timers on that fight's enemies, with their zone, their difficulty and the exact time of death.

1.19.1 — el temporizador se reinicia, y el crono sale de la pelea

August 20, 2026

The timer restarts when the enemy dies again

And until now it never did. You opened a timer, killed the creature, and the count carried on as it was: you had to close it and open it again to start over. That is fixed, and the count now restarts on its own with every death of that enemy in that zone and that difficulty.

The wiki time is the zone's, and now it says so

The card said "from the wiki" next to the number, and that promised more than there is: that time is the whole zone's, not that creature's. Which is why two different enemies from the same place showed the same figure. The label now reads "the zone repopulates in", which is what the wiki actually states.

You can type in Respawns now

The name field would not let you type: you pressed a key and it vanished. That is fixed, and with it the fight list search box, which lost letters for the same reason. It was one fault in two different places.

Set a timer straight from a fight

A "Set a timer" button in Scene, with a fight open. It unfolds that fight's enemies and you tick the ones you want to watch.

It is a better route than typing the name by hand, and not for convenience: from there come the name exactly as the log wrote it, the zone, the difficulty, and the exact time that enemy died in that fight. Zone and difficulty are part of what tells one timer from another, and typing the name by hand there was no way to set them.

The list hides nothing and says what it cannot do:

  • an enemy that never died still shows, but cannot be ticked: there is nothing to count from;
  • enemy pets do not show, because they do not come back on a timer;
  • the ones that already have a timer are marked, so you don't open the same one twice;
  • and if the same name died twice in the same fight, it tells you they are two different creatures and counts from the last one.

EQL Parse 1.18.0

August 19, 2026

Respawn timers

A new section. You open a timer for whichever enemy you want to watch and it counts down on its own; you close it when you no longer care. No death starts one by itself — with a hundred mobs going down, that would be screen noise and help nobody.

The list is sorted by whichever comes back first, with the ones already due at the very top. And each card says which zone and which difficulty it belongs to, because the same mob in two places does not come back at the same rate.

Where the time comes from, always said

On every card you see the three sources, always all three:

  • yours, if you type it — it overrides everything else;
  • the wiki's, with the page it came from, so you can go and check it;
  • what we are seeing ourselves, which for now only accumulates.

If the wiki's number and what we have seen do not agree, we say so and leave it there. We do not choose for you.

The wiki times are collected zone by zone, from each zone's own page. Four zones do not declare one, and there the card says so rather than making a number up.

The warnings it carries

If an enemy sits at zero for a long time, it warns you: it may already be there and you missed it, or we may not be recognising its death line. Those are two different things and both look the same on screen, so both get named.

And if there are several of that name in the zone, it tells you when you open it, which is when it is useful: the timer will restart when any of them dies, not the one you are watching.

Your side stays your side, even when you swap pets

Someone could show up under «Unidentified» and count towards your side's dps at the same time. It mostly happened with your own pets: summoning a new one made the previous one stop being recognised, and saved fights kept that idea forever.

Now identity is worked out again every time you look, using everything the program has learnt since. Fights saved weeks ago get labelled correctly with no rebuild — 248 fights in the history change. And anyone genuinely unknown still shows as unknown, which is what needs saying.

Zones are no longer split by their difficulty

The difficulty number EQL appends to a zone name was being counted as a different zone. So the encyclopedia showed the same zone several times and the boss census came up short.

Now they are joined: a zone is a zone, and its difficulty is a column. The encyclopedia and the census add up, and each entry carries every difficulty in one place.

Fixes

  • The replay panel crashed if you switched fights while it was loading, and went blank until you left the section and came back.
  • The close button on a timer did not close it.
  • The Respawns section never actually appeared in the first internal tests: the whole thing came up blank.

1.17.0 — el registro decía que te resistían y no lo leíamos

August 19, 2026

What your log already said and we were not reading

Your log writes a line every time an enemy resists one of your spells. The program did not know how to read it. On a real log that is 955 resists of yours thrown away, and with them the answer to a question that does change what you do: *does this spell land on this creature?*

The first time you open it, it asks to re-read your log

This version asks you to rebuild your history: on opening, a banner comes up with two buttons, "Rebuild history" and "Not now". You can leave it for later, but until you do, your saved fights still have no resists in them.

While it re-reads your log from the beginning, you can keep using the program: the window does not freeze, you can switch sections and everything moves normally. The only thing that stands still are the figures, until it finishes.

How long it takes. Measured on a 103.8 MB log: 28 seconds if the file is fresh in the system, 62 if it has to come off the disk. It happens once. What you have now is set aside with a timestamp before anything is touched.

Why it is needed. It is not that your saved fights have a low figure: it is that the row does not exist. A spell that is always resisted never lands, and without landing it never created its entry. The clearest case in a real log: against one enemy, 62 casts, 62 resisted, not one landed — and not one of those 62 lines was stored anywhere. That cannot be fixed by reading the saved data better; you have to go back to the log.

How many times you were resisted, and out of how many tries

In each fight's analysis, per spell and against whom, always with the denominator:

Drain Spirit X          against Coercer T`vala   44 of 44   never lands
Blade Dance             against Coercer T`vala   26 of 26   never lands
Water Elemental Attack  against Coercer T`vala    5 of 31   16%
…

"44 resisted" says nothing: 44 of 44 and 44 of 300 are two different fights and two different decisions. And when something does not land even once, it is said in words — never lands — and not only with a percentage you have to subtract.

Above the table it says how many spells it comes from: "of the 7 you cast against this enemy, 5 were resisted at least once". Without that line, five rows read as though you had cast five things.

And it tells you out loud, which is what the checkbox promised

The "a spell of yours resisted" checkbox has existed since the first version. It had never once fired: zero times across the 1.19 million lines the program did recognise. Anyone who had it ticked had been waiting months for a notice that could not arrive.

It works now, with two modes you choose:

  • One every 20 seconds per spell — the one that comes set.
  • Every one, if you would rather hear them all.

It is throttled by default for a measured reason: in that same fight there were 103 resists out of 129 casts, and 4 of the 7 spells never landed once. "Every one" there means talking over the whole fight.

Two figures on the row that read alike without being alike

The big number for each combatant is a rate — their damage divided by how long the fight lasted — and the percentage beside it is a share — how much of the total they put in. They are divided by different things and answer different questions, and they sat side by side with nothing saying which was which. Now they say so.

The big number has not changed. It is still damage over fight duration, which is what dps means.

And their own window moves up to the visible line: damage divided by the time that combatant spent in the fight. The window runs from the first thing they do or that is done to them, to the last: hitting, missing, healing, absorbing — and being hit — all count, so for whoever is tanking it opens on the first blow they take, not on the first they land. That is the one that answers "did they join late?" — someone arriving halfway reads low on the rate and normal on their window, and with one figure those two cases are indistinguishable. It only shows when it differs.

Also

  • A spell cast at you is now recognised when something of yours blocks it before it arrives: 2,665 lines of a real log that were not read before.

1.16.1 — el cartel ya no ofrece lo que no existe

August 18, 2026

The update notice no longer offers what does not exist

This version fixes one thing, and it is the one that happened to you if you opened the app on the afternoon of 17 August.

What was happening. 1.16.0 was published as the newest version with its notes uploaded and without the installer. The notice appeared in full: "there is a new version", the notes translated into your language, and a button reading Download that led to a page with nothing to download.

What changes. If a version is published and carries no installer, no notice is shown at all. No button, no notes, no promise. And nothing showing up does not mean the check failed: the version is half published, and the notice will appear on its own once it is finished. There is nothing to do on your machine.

And no skip button. That is the part that could not be undone. "Skip this version" is written to your settings, so anyone who got tired of the broken notice and skipped it would have missed the good version once the installer finally went up. Now there is no notice, so there is no button to press: it follows from the shape of the code rather than from remembering to remove it.

What stays the same

If you can update, you are still told. There is a case that looks like this one and is not: when the installer is there but has to be downloaded from the page instead of from the program. That one works, and it still tells you as always.

"Cannot be installed from here" and "there is no installer" are not the same thing, and until now they were written the same way.

Not one figure changes. It does not touch your history, does not ask you to rebuild anything, and does not change how a single fight is measured. It opens just like 1.16.0 and with the same data.

1.16.0 — toda la aplicación en una barra lateral

August 18, 2026

The whole application in one sidebar, and not a single figure has moved

The three tabs at the top —Combat, Alerts and Encyclopedia— are gone. In their place there is a bar on the left with fourteen sections, grouped not by kind of data but by scope: what each number is talking about.

This fight — Scene · By ability · Loot · The log · Analysis

All history — Summary · Enemies · Loot · Progress · Zones · Spells · Deaths

Settings — Alerts · Voice and your side

Why by scope

Loot inside This fight and Loot inside All history are two different questions, and until now you reached both by routes that never said which was which. The first thing you need to know about a number is what it is talking about; now the group it lives in says so before you read it.

And the fight list shows up only where it means something: in the five This fight sections, which are the ones that change when you pick another fight. In the history ones it is not there, and the section takes the full width.

Not a single number changed, and that is the promise

This version computes nothing new and computes nothing differently. It is a move: what was there has been carried somewhere else on screen, whole.

  • It does not ask you to rebuild. Your history stays exactly as it is, and the first launch takes no longer than any other.
  • The same fight shows the same figures as in 1.15.0. If any one of them were different that would not be an improvement: it would be a bug, and that is why it was checked section by section.
  • There are no new features. The ones here are the usual ones, in their place.

It is said this plainly because it is what was promised at the start, not an apology for what is missing.

Two things you do notice

Timers no longer switch off when you change screen. They used to live inside Combat: you went to look something up in the bestiary and the countdown you were watching vanished while it was still running. They belong to the frame now and show in every section.

The replay opens inside Scene, without taking you out of the fight: the header chart steps aside so the same thing is not drawn twice, and the scene mounts right there, with the fight list still beside it.

And the note on the three speeds now gives the calculation. It no longer says what the first one compares against: it says total damage ÷ fight duration, which is what you needed to know.

1.15.0 — el reproductor deja de dibujar lo que no pasó

August 16, 2026

The first time you open it, it re-reads your whole log

This version forces a rebuild. You will see a notice and a progress bar: it is reading your log from the beginning to rebuild your history. It takes a few seconds —measured, 25 s for 75 MB— and it happens once.

Nothing is deleted: the previous files are set aside with a timestamp before anything is touched, and they can be restored.

Why it is needed. This version changes the name stored for each enemy, and the evidence for how it is spelled lives in your log, not in the fights already saved. Re-reading fixes the whole history; without it, only what comes next.

And it is the first version with a licence

EQL Parse is now FSL-1.1-MIT: you may use, copy and modify it for anything that is not competing with it, and every version becomes MIT-licensed two years after release. The full text ships inside the program, under About EQL Parse.

Versions before this one shipped with no explicit licence. That was not a stance, it was an oversight. It is written here because anyone who downloaded one of them deserves to know where they stood.

The replay no longer draws fights that are not yours

Replaying a fight in a busy zone showed figures that were not in your fight: another player's mob, the player, and the blows between them — drawn in their own column as if they were part of yours.

The worst one in the history: a 99-second fight with three combatants that drew thirteen figures, with 468 unrelated blows inside.

Measured over 1,493 fights: 446 drew someone from outside, and 49 drew entire unrelated fights. Now it is 190 and zero. The 190 that remain are the legitimate ones: someone who healed you, or who missed your mob, and was therefore there.

And it no longer greys everyone out on the first second

When an enemy went down, its figure was switched off at second zero of the replay instead of at the second it died. With several enemies, the scene started with everyone grey and stayed that way.

It happened in 80 % of fights. Now each figure goes out when it fell.

Names are spelled the way the game spells them

The Prophet, The Spiroc Lord, The Muglwump and two more were shown with a lowercase article we had put there. EverQuest capitalises the first letter of every line, so the only way to know a name's real spelling is to look at how the game writes it mid-sentence — which is what happens now.

And when we do not know, it says so. Some names you have only ever seen at the start of a line; for those, the spelling is our guess. They carry a note saying exactly that, next to the combatant's row.

«2 slain» is not the same as «at least 3 present»

A fight was titled a shin ghoul knight ×2, which reads as «there were two». That is not what it counts: it counts the ones that went down. Now it says so in those words.

The replay answers the other question —how many there were— and may give a larger number, because it includes the one that never fell. Where both appear, both are shown, each with its own word:

a shin ghoul knight — 2 slain · at least 3 present

Renaming your log no longer loses the hours after it

If you closed the game, renamed eqlog_...txt to start a fresh one, and played for three hours before opening EQL Parse, those three hours were never read. The program remembered which byte it had reached, the new file was shorter, and it sat at the end without saying anything.

It now detects that the file is a different one and reads it from the start.

What another player types no longer counts as damage

If someone typed a line in chat that looked like a hit, the program believed it and added it to the fight. Now a chat line is recognised as chat before anything looks at what is inside the quotation marks.

The reference log has 32,659 chat lines. The confusion could only happen on the ones that never close the quote —a message split across several lines—, which are eight, and none of the eight had a number inside. It could have happened, and it had not.

A correction to these notes

The published version described this fix wrongly. What now reads as a quote is other players writing in your own log; the earlier version said something else, and it was not true. And placed where it was, it looked like a touch-up, when what sat underneath it was the accuracy fix described just above.

Corrected on 18 August 2026. Said out loud rather than changed in silence, because somebody already read the earlier sentence.

1.14.1 — los avisos dicen de dónde salen, y los abatidos que faltaban

August 15, 2026

Alerts now say where they come from

If you opened the alerts tab and saw "Lady Vox" in five places you had not written yourself, the reasonable conclusion was that the phrases came from a wiki. They did not: that trigger matches 33 times in your own log, with six of her spells. What was missing was not the rule — it was saying where it came from.

Every trigger now carries two labels:

  • where it comes from — "factory template", which has not been checked against your log, or "written by you"
  • what it has done — "seen 33 times in your log", and if it has not matched once, it says so

The second one is what turns a promise into a fact: a pattern copied with one word wrong never matches, and until now it looked exactly like one that fires every day.

And it is counted against your whole log, not from the moment you open the app: on startup the re-read counts without speaking. If you change logs, the counter says it is talking about a different one and starts from zero.

The warning that boss templates have to be checked against your own log had been written in the program since day one and appeared on no screen. Now it shows, along with each template's note.

The boss template no longer ships a timer. It carried twelve seconds that nobody had ever timed: the log never writes an enemy spell's recast time on any line, so that number could not be measured by reading. You put it in — you are the one who can take it with a stopwatch.

The kills missing from the bestiary

EverQuest writes an enemy's name capitalised when it opens a sentence — "A shin ghoul knight has been slain" — and lowercase mid-sentence — "You slash a shin ghoul knight". The program joined both forms when counting combatants, but not when counting deaths.

Measured on a real history: of 4,348 kills, 25 never reached the enemy's dossier, and 39 estimated-health samples went with them. orc legionnaire showed fourteen fewer deaths than it had, and its health estimated on half the samples. Nine rows in an enemy's fight list said "survived" about a mob that had died.

Nothing visibly broke, which is why it had been there forever: a lower number does not look any different from a correct one.

It is fixed on reading, so your history comes out right without rebuilding anything.

An enemy that heals itself does not have more health

An enemy healer repairs part of the damage you do, and that is not its health: it is damage undone. The health estimate already subtracted it — measured: 929,772 points of enemy healing, 5 % of the damage you deal them — but the rule that decides whether an enemy is a boss used the figure without subtracting.

Fixed. In your history one enemy changes sides: Cleric of Innoruuk, which took 22,633 with 2,803 of healing along the way — without subtracting it, it crossed the threshold and came out labelled a raid boss.

And two slows that were not being announced

Languid Pace and Instill fell into no category, so "Root and slow" did not warn about them even with the switch on. They are in now, measured: only the ones cast by an enemy are announced — 44 % of them were cast by your own pet — and that comes to two per fight in 9 % of them.

Three other groups of uncategorised spells were looked at — lifetaps, stuns and mana drains — and none of them gets announced: one every eight seconds, or one every two, is not an alert. A voice that talks constantly teaches you not to listen to it.

1.14.0 — una pelea es un grupo de enemigos, no un hueco de silencio

August 15, 2026

This version re-reads your log, and it changes where each fight starts and ends

It goes first because it is what happens the moment you open it: the first launch takes a while, because the whole log is re-read once.

Nothing can be corrected while reading, and not for lack of trying: the boundary between two fights is decided at the moment they are written, so the only way to apply the new model to what you already have is to go back to the log. Nothing is lost — fights.ndjson comes from the log, which is the source — but your history is divided up differently.

You are coming from 1.12.0, and 1.13.0 comes inside this one

1.13.0 never got published: its code exists and its notes exist, but it never had an installer, so nobody has it. Its fixes arrive inside this one, and there are six:

  • the time you were not in control stops counting against you. A fear or a charm leaves the log without a single line of yours, and that was being read as you having wandered off. In your history that is 31 episodes and 251 seconds charged to you that you could not avoid
  • a charmed groupmate stops being an enemy. One hit of theirs was enough to move them to the other side with all their damage behind them; in the worst fight, 55 % of the "enemy damage" was your own group
  • "What this fight does not know", which gathers what a fight cannot know: damage with no owner, damage counted by deduction, and loot with two possible corpses
  • "State changes" in the replay, with what happened to you during the fight and how long each thing lasted
  • "What you resist from it" per enemy and per spell, instead of one loose total
  • and the fights that a fear used to cut in two

The full 1.13.0 notes are on its own version page. What follows is this one's.

We were answering a different question

Until now, "is this the same fight?" was answered with "how long has the log been quiet?". Those are two different questions, and that is why it failed in both directions at once:

  • it cut a fight in two because you spent twenty-five seconds clearing adds
  • and it merged two because the next one started three seconds after the first

Both came from the same place: a gap of silence says nothing about who is fighting you.

What a fight is, now

A fight is a group of enemies whose participation windows overlap. Each enemy has one window, from its first line to its last; as long as one is open, the fight continues.

Put the way it looks from inside the game: five enemies killed in two minutes, all hitting or casting at once, their names appearing interleaved in the log, are one fight. Five killed in two minutes but one at a time, with none of them doing anything while you attack the previous one, are five.

An enemy that dies closes its window immediately: a death is a measurement, not a wait. Only the enemies you get away from need a grace period, and that period is twelve seconds — the 99th percentile of the attack cadence measured in your own log. Of the 19,970 silence gaps of two seconds or more, 99.1 % are shorter than that: they are not a mystery, they are the mob's rhythm.

A sleeping enemy no longer breaks the fight

A mez produces no lines at all: the mob goes quiet and looks like it left. But the log does write that it is asleep, and both ways of waking up.

Those lines were not being read. Your log has 217 mez landings and 353 closing lines — "has been awakened by" and "spell has worn off of" — that went into the unrecognised bin. With them, 202 of the 217 have a window with a written beginning and end.

Now silence explained by a measured state — a mez, a charm, or a stretch where you were not in control of your character — closes no window. And every fight that leans on that keeps a record of which line is holding it up, over which enemy, and how much silence it covered, so it can be argued with instead of believed.

What is not there: root. In 850,171 lines there is not one saying an enemy is rooted, so it cannot be measured and it is not invented.

A nine-minute pull, in nine rows

A real fight from the Ruins of Old Guk: nine and a half minutes, twenty-two kills and nine distinct names, all in a single row of the list. Divided up by the new model:

38 s a bloodthirsty ghoul, a frenzied ghoul 13 s a bloodthirsty ghoul 70 s a zol ghoul knight ×2, a dar ghoul knight 49 s an urd ghoul wizard, a zol ghoul knight ×2, a kor ghoul wizard 20 s a zol ghoul knight 84 s a dar ghoul knight ×2, the ghoul arch magus 148 s a yun ghoul wizard, a dar ghoul knight ×5 22 s a kor ghoul wizard 12 s a wan ghoul knight

Nine rows, nine distinct names. The "×2" kill count does the work: without it, four of those nine would read the same.

And that is why your figures stop being diluted

This is what you notice when you open a fight, and it is not tidiness in the list.

A twenty-seven-minute pull with forty mobs that die in one hit had a "your side dps" divided by all the time you spent walking between them. The number was correct and described nothing. Now each pull has its own figure, and "DPS over the fight" means what it says again.

The same goes for "duration", "Time not hitting" and "DPS over active seconds only": a denominator holding three fights and two walks measures nobody.

A death no longer founds a fight

A death is not a beginning: it is proof of something that was already happening. If the death of an enemy arrives that has not produced a single line in the open fight — a poison finishing on its own, or someone else landing the last blow — it no longer counts as your kill: it is recorded separately, together with how far back its last line was.

In your history that is 21 deaths out of more than four thousand. It is few, and it is said anyway: it was a kill that was not yours, in the title of a fight that was not its own.

How much your history changes

On the reference log, saved fights go from 845 to 1,420, and the median duration drops from 86 to 45 seconds. The number you end up with depends on how much you have played before rebuilding; the difference does not.

But it does not change evenly. In the Plane of Fear, the Plane of Hate, Nagafen's Lair and the Plane of Sky — where you fight one thing at a time — 83 % of the fights come out exactly the same, and 457 become 536. What really gets divided up are the pulls: the places where you chained one after another without a pause, which is where a single row was hiding half an hour.

What this model does, said precisely

It only cuts, except where the log says in as many words that the enemy was still there. On rebuilding, every new fight fits inside one you already had — with ten exceptions out of 845, and all ten can point at the mez or charm line that joins them. Not one of them is joined by a gap of time.

What can only be checked by playing

A fight closes through two paths that do not use the same clock: the log timestamp and the wall clock. Re-reading is one of the two, so the only way to check that they agree is to play a session and re-read it afterwards.

The wall-clock margin goes from three to five seconds because of this change — the new grace period is shorter, so a lag costs more — which means a fight takes five seconds to be called finished on the overlay instead of three. It affects no figure: only when it appears.

1.13.0 — el tiempo que no manejabas deja de contar contra ti (no distribuida)

August 15, 2026

This version re-reads your log, and this time it does not ask

It goes first because it is what happens the moment you open it: the first launch takes a while, because the whole log is re-read once.

1.11.0 corrected as it read, which is why it asked for nothing. This one cannot. Three of the things it fixes were decided at the moment each fight was written, and what was decided while writing cannot be recomposed by reading:

  • the time you were not in control, charged to you as standing still
  • the charmed groupmate, saved on the enemy side
  • the fights cut in two by a fear

Nothing is lost: fights.ndjson is regenerated from the log, which is the source. What does change are your figures, and some boundaries between fights.

The time you were not in control stops counting against you

When an enemy fears you it is not that you stop fighting: it is that you cannot. Under a charm you do not decide either — you hit your own, but you do not choose it. In both cases the log is left without a single combat line of yours, and the program was reading that as if you had gone to check your bags.

The log does write both ends of those stretches, and they were not being read. In your history they are 31 episodes, and 251 seconds that were being charged to you and that you could not avoid. The worst fight goes from 172 to 91 seconds of downtime.

Those stretches are now measured, and they come out of every figure that speaks about you: «Time not hitting», «Good uptime», the denominator of «DPS over active seconds only», «Wrong stance in places» and your cadence. Their duration is not a fact about you either, because you do not decide it.

Along the way two things turned up pulling in opposite directions, and both are gone:

  • short fear gaps were letting you off, because they inflated your cadence and with it the margin you are given
  • and while you were held they kept hitting you, so the denominator of «DPS over active seconds only» grew while the numerator could not

The label comes from a measurement, not from a resemblance. The log line does not give the cause: fear and charm write the same one. What tells them apart is what you did inside, and that is visible — under fear you cannot act at all, so zero actions is fear; charmed you hit your own without deciding it, so one hit on them is charm. If you acted against the enemy it is neither, and then the fight says so instead of picking one.

And one case had to be separated out or it would have ruined this: the keys the game refuses. Inside those stretches there are 24 casts begun that never resolve — no hit, no resist, no interruption. Outside them that same spell does resolve. A cast with no outcome is not an action, it is a denied attempt, and counting it would have turned 10 of the 31 episodes into something else because a hotkey was hammered.

A charmed groupmate stops being an enemy

If someone in your group is charmed and hits you, until now they became an enemy for the whole fight, not just for the exchange. Sides were deduced from who hits whom, and a single blow was enough to move them across with all their damage behind them.

In your history there was friendly fire in five fights, all in the Plane of Fear. In three of them a groupmate ended up on the other side, and in the worst one 55 % of the «enemy damage» was your own group's. It took from you too: the damage that groupmate dealt to the boss did not count under «Your side».

Now what you declared wins. Someone you have said is yours does not change side because one blow says otherwise, and the damage you deal each other is added to no total: it is set aside and counted, by name and in both directions, under «Two of your own fighting each other».

That block is in the fight, above the list of combatants — not in the replay. It says which groupmate fought the group, how many hits, how much damage and between which seconds. The cause is not stated, because the log does not write it on any line. Beside it goes the only thing that is written nearby: the last spell the enemy cast before that stretch, whatever it was, with the seconds of distance. Sometimes it is a charm and sometimes it is one of its own heals, and it is shown just the same — it is a neighbouring fact, not a cause.

«What this fight does not know»

For versions the program had been working out how much it cannot be trusted, and showing it nowhere. Three numbers, measured, stored and mute. Now they are together and in plain sight, because they are the same question:

  • real damage with no owner, which is a damage shield with no possessive; the log attributes it to nobody and it enters no total
  • damage counted as the enemy's on the strength of a deduction rather than a line: the charm that broke when another was chained, which the log never announces
  • loot with two equally possible corpses, where the most recent was chosen

Each one is marked as measured or deduced. This part needed no rebuild: the three numbers were already calculated and stored. All that was missing was reading them.

«State changes», in the replay

Below the timeline there is a track with what happened to you during the fight: «stunned», charms of your own, «No control», absorptions, knockdowns and survival warnings.

Where the log writes both ends of a state, the duration is measured and a bar is drawn from start to finish. Where that bar would not be distinguishable from a dot at the width you have on screen, the dot is drawn — and widening the window turns dots into bars. That is deliberate: the track shows the resolution it has, not one it does not.

A state that was already in place when the fight began, or still in place when it ended, is drawn open on that side. That is different from claiming it lasted that long, which is all that is actually known.

Not every possible state is there, only the ones that say something. Root is read and stored but not drawn: it does not stop you hitting, so it explains no gap in the curve. It was on the track for being frequent, and on a track where everything is marked nothing is marked.

«What you resist from it»

What you resist was a loose total for the fight. That total stays where it was, and now it also goes to each enemy's card, with which of its spells it was — which is what turns «you resisted seven» into something you can use the next time you go down there.

It is not a percentage, and the card says so: a spell landing leaves no line in the log, so what is counted is the times you stopped it and nothing else.

Fights that were cut in two

A long enough stretch without control used to cut the fight, because during a fear there is not a single line of yours and that read as combat having ended. It happened by both routes: the log's own timestamp and the wall clock, which in live play closed even before the notice that you had regained control arrived.

It no longer cuts. On rebuilding, five fights merge with their neighbour and one moves its boundary, so your total drops by four. Which number you end up with depends on how much you have played before rebuilding; the difference does not.

What is still open

Rebuilding does not reproduce your history exactly. Of the ten measured differences between what the wall clock decides and what the log's timestamp decides, seven are closed. The three that remain are launches of the application in the middle of the log, and no clock rule splits those: where a freshly created tracker starts looking, a fight starts.

It is said here because it is better to know it before rebuilding than to discover it afterwards.

1.12.0 — el botín se cuelga de su cadáver, y la moneda por fin cuenta

August 12, 2026

This version asks you to rebuild your history, and rebuilding moves it

This comes first because you need to know it before pressing, not after.

When you open the app a notice will ask you to re-read your log. It is required this time: where each item was attached was decided when it was written, and there is no way to recompose it by reading what is stored more carefully.

And rebuilding does not reproduce your history exactly. A fight is closed using the wall clock while the program is running and using the log's own timestamp when it is re-read, so wherever the gap between two fights is exactly 20 seconds, each path decides differently. Measured on a real history of 708 fights: 700 remain — 698 identical, 10 that merge into the fight next to them and 2 that come out split a different way.

What you had is set aside with a timestamp before anything is touched (fights.ndjson, the index, the encyclopedia and the side files) and can be recovered by copying it back. Nothing is deleted.

This is a known bug, the same one 1.11.0 already warned about, and it is still unfixed. The difference is that that version did not ask you to rebuild and this one does.

What was wrong with loot

It was attached to whichever fight was open when you picked it up, and you loot after killing. Four things come out of that, all measured on a real 55 MB log:

  • 34 items attached to a fight later than the death of the creature they came from. Always forward, never backward, with a median of ten minutes between one fight and the other. You kill, you move on, and ten minutes later you empty the corpse: the item went to whichever fight you were in.
  • 294 items whose moment falls outside their own fight, and were therefore invisible. The replay runs from zero to the fight's duration, so an item picked up after the last blow was never drawn anywhere. That is a third of the fights with loot.
  • 51 items landed somewhere different depending on whether they were recorded live or by re-reading — and they were precisely the boss ones, because a boss has ten items and emptying its corpse takes longer than the twenty seconds the fight needs to close.
  • One loot line with no rule. and stored it in your tradeskill depot appeared once in the whole log and took a whole item with it without anything going off.

And coin from corpses was not stored anywhere: 1,392 lines the program recognised and threw away.

What changes

Each item now goes to the fight where its corpse died, not to whichever was open. Over the 1,901 loot lines of the reference log: 1,884 end up attached to the fight where the creature they came from died, 17 stay loose — because someone else finished that enemy off entirely and that death was never recorded — and none is lost.

The match is by name and by closeness, so it is a deduction and it is said to be one: the log does not number corpses. What is measured is the gap between the death and the pickup, and it appears beside each item. In the three pickups out of 1,901 where two corpses were equally close in different fights, the doubt is marked instead of choosing in silence.

The replay now ends in a new card: "What you picked up". Which items, from which corpse, at what moment, ordered by the instant of pickup. The ones you took with the fight already closed appear there, with their clock time and said outright that the fight had ended — it is the first time they can be seen.

It is not titled "what dropped", and that is not an oversight: the log does not record what anyone else picks up, nor what someone loots from a distant corpse, nor what was left on the floor. It records what you took, and the card is titled accordingly.

And a fight with no loot no longer says one single thing, because they are not the same:

  • enemies fell and no pickup of yours is recorded
  • nothing died, so there was nothing to loot
  • you picked it up, but outside any fight of yours

Coin finally counts, with its moment and summed in copper. It hangs off whichever fight was open rather than off a corpse, because the log line does not say whose it is — and that is written on the card too, next to the figure. They are two different kinds of certainty and they are not shown as if they were one.

And a net for next time

A line ending the program could not read cost a whole item, and no alarm went off.

Now an unknown ending still yields the item and the corpse, and the part that cannot be read travels through, literally, to the card, where you can see it. An item may arrive with an odd piece attached; what it can no longer do is not arrive.

1.11.0 — la postura no mitiga el daño periódico ni el escudo

August 9, 2026

Your saved fights are going to show different numbers. Without you pressing anything

This comes first because it is what will happen the moment you open the app.

1.10.0 asked your permission: a notice appeared, there was a button, and your previous history was set aside with a timestamp before anything was touched. This one does not ask. The correction happens on its own as each fight is read, so the fights you already had will show different figures the first time you open them.

There is nothing to decide and nothing is lost: your fights.ndjson is not touched, the correction happens while reading it. But a history that changes without warning is exactly what this program does not do, so here is the warning. It also appears inside the application, once.

What was wrong

Stance does not reduce damage over time or damage shields, and the program was acting as if it did.

The log stores damage already mitigated, so in order to compare stances against each other the program has to reconstruct what you would have taken with none. That was also being done to damage over time and to damage shields, and measured over a 385,656-line log, stance does not touch them:

  • Nine applications of incoming damage over time cross a stance change with the spell already on you. In all nine the tick value does not move by a single point. Rotting Flesh from a dracoliche crosses Defensive ↔ Channeler in both directions and is worth 100 across all 42 ticks.
  • Damage shields, the same: a spite golem pricks for 18 under Defensive, under Channeler and under Offensive.

Direct spells behave differently — they are mitigated, and with textbook precision. Soul Devour from the Eye of Veeshan hits for 400 under Defensive, 300 under Channeler and 250 under Mage Hunter, across 368 hits and without a single variation. So this was never about giving up on reconstructing magic damage: they were two schools measured separately with two different results.

What it cost: 44,924 points of incoming damage that never existed, across 416 saved fights. And the stance advice was resting on them — 21% of the damage was being counted as avoidable when no stance avoids it.

What changes in what you see

  • Incoming damage goes down in fights that had damage over time or damage shields. That is the figure that was inflated.
  • The advice panel has a new row: how much of the damage that reached you no stance was stopping. It is the ceiling on everything the table below promises, so now it is in plain sight.
  • The verdict stops pretending you held a single stance. If you switched stance during the fight, what you avoided is now worked out band by band. Before, it took whichever stance lasted longest and credited it with the whole fight's damage, and in a fight where you switch around that can invert the advice: it could tell you to change to a stance that would have avoided *less* than what you actually did.
  • The "Wrong stance in places" finding in the analysis moves. Phases are cut when the composition of incoming damage changes, and damage over time was counting as magic: a melee fight with a poison ticking on you was cut as if the boss had switched to burning you.

Your history will end up mixed, and that is correct

Not everything can be corrected by reading. What can: the observed amount is stored alongside the reconstructed one, so undoing the improper reconstruction is an exact copy and happens on its own.

What cannot: the split of damage by the stance you were in for each hit is not on disk. That has to come from re-reading the whole log, and today that cannot be asked for with any guarantee (see below).

Practical consequence: in your older fights you will see "fight saved before damage was split by stance", and in the new ones you will not. That is correct and it is not a bug: it is the program telling you that this particular verdict is worked out against a single stance because that is all that can be done with what is stored. Every fight now carries a number saying which rules its figures were worked out under.

Rebuilding now warns you by itself

If you use store:rebuild, or the rebuild button, you will see a new warning: rebuilding does not reproduce your history exactly.

A fight is closed using the wall clock while the program is running, and using the log's own timestamp when it is rebuilt. Wherever the gap between two fights is exactly 20 seconds, each path decides differently. Measured over 441 real fights: one merges with the next, and both fights' figures change with it.

The previous state is still set aside with a timestamp and can be recovered. But it is better to know before you press than after. This is a known bug and it is pending a fix; until then, this version does not ask you to rebuild.

And a piece of plumbing that showed

Until now a single number answered two questions: "has what gets stored changed?" and "does the log have to be re-read?". For thirteen versions running, both answers were the same, so nobody noticed they were two questions. This is the first version where they disagree.

They are separated now. The consequence is that the test which stops a format change being published without numbering it no longer has any exceptions: before, saying "the format changed but don't rebuild" meant silencing it.

Release notes, inside the application

The update notice has been carrying this text since 1.10.0 and was not showing it anywhere. Now it shows it, folded, before you decide to install. Somebody updating from inside the app should not have to go to the website to read what is about to change.

Going back costs nothing, and it is not an emergency procedure

The correction lives in the code that reads, not in the file: your fights.ndjson keeps the old numbers intact. If you install 1.10.0 over this one, the fights from before you updated go back to showing exactly what they showed, with no backups to restore and nothing to undo.

And the ones you record with this version are not left behind either. Measured over 440 fights written by 1.11.0 and read by 1.10.0: not one error, not one fight losing its advice, not one point of damage lost. Incoming damage comes out identical —3,374,795 on both— and the phase analysis gives exactly the same: 1,820 phases and 183 stance findings on both, zero fights differing.

The one thing the old version cannot do is separate the third bucket: it puts damage over time and damage shields inside "magic", because it only has two. The damage is all there, counted in one drawer fewer. The consequence is that it goes back to counting that damage as avoidable when scoring stances, which is its usual model.

The only thing it does on opening is rebuild its own encyclopedia, which takes under a second and is its normal behaviour.

1.10.0 — la reproducción, el registro con contexto y la actualización desde la aplicación

August 8, 2026

This note is not translated into English: it is shown in Español, as published.

Esta hay que bajarla a mano. La siguiente ya no

Esta versión es la que instala la actualización desde la aplicación, así que no se puede instalar con ella: descarga el instalador de aquí abajo una última vez. A partir de ahora, cuando salga una versión nueva, la aplicación te lo dice, te enseña cuánto ocupa antes de descargar y la instala sola si se lo pides. Nunca sin pedírselo, y si algo no se puede verificar, se queda como está y lo dice.

Si leíste «RECONSTRUYE» y nunca te salió el cartel, era un fallo nuestro

Esto hay que decirlo antes que nada.

Si instalaste alguna versión desde la 1.6.1 y leíste que había que reconstruir pero nunca te salió el cartel, no era que no te tocara: era un fallo nuestro. Esta versión sí lo pide.

El aviso de reconstruir se dispara comparando un número —STORE_VERSION— con el que lleva grabado tu histórico. Ese número no se tocó desde la 1.6.1, y en las trece versiones siguientes el parser y las cuentas cambiaron seis veces. Estas seis lo pedían en sus propias notas, cuatro de ellas en mayúsculas, y la aplicación no lo pidió nunca:

| | Lo que decía su nota | |---|---| | 1.8.0 | «Reconstruye el histórico para que lo del encantado y lo de los nombres…» | | 1.8.1 | «SI JUEGAS EN GRUPO, ACTUALIZA Y RECONSTRUYE» | | 1.8.2 | «si no reconstruiste el histórico entonces, hazlo ahora» | | 1.9.0 | «RECONSTRUYE EL HISTÓRICO para que las peleas viejas tengan sus…» | | 1.9.1 | «RECONSTRUYE EL HISTÓRICO para que las peleas viejas tengan las marcas…» | | 1.9.2 | «SI JUEGAS EN GRUPO Y HAS DECLARADO COMPAÑEROS, ACTUALIZA Y RECONSTRUYE» |

Quien las instaló, leyó eso y no vio ningún cartel concluyó lo razonable: que a él no le tocaba. Y lleva desde entonces con datos que sus propias notas decían que había que rehacer.

Una sola reconstrucción lo pone todo al día, vengas de la versión que vengas: no son migraciones encadenadas que puedan saltarse, es releer tu registro entero con el código de hoy y rehacer el histórico desde cero.

Para que no vuelva a pasar, ahora hay una prueba que compara lo que se guarda con lo que se guardaba, y no deja publicar si cambia sin subir ese número.

Antes de pulsar «Reconstruir»: si borraste o rotaste tu log

La reconstrucción lee el fichero de registro que tienes ahora. Si lo borraste, lo rotaste o lo empezaste de cero, las peleas que ya no estén en él no se recuperan y saldrás con menos peleas que antes.

La aplicación te dice cuántas había y cuántas quedan, y aparta tu histórico anterior con fecha antes de tocar nada, así que siempre se puede volver. Pero mejor saberlo antes de pulsar que después.

Qué arregla reconstruir, esta vez

Sale un cartel arriba. Tarda unos segundos y puedes decir que más tarde. Son dos cosas que no se arreglan releyendo mejor:

  • El daño que te hacías a ti mismo se contaba como daño hecho. En un histórico real eran 2.107 puntos repartidos por nueve peleas, y una de ellas era una pelea entera contra «yourself» que no existió nunca.
  • Ninguna pelea guardada lleva la forma del golpe, que se empieza a contar ahora. Sin reconstruir, el reproductor y las tablas la dan por ausente en todo lo anterior.

La reproducción

Vuelve a ver la pelea segundo a segundo, con los números flotando sobre cada combatiente como en el juego, medidores de dps al estilo del overlay y un panel de texto con lo que pasa un umbral. Se puede pausar, ir a ×2 o ×5 y saltar a cualquier segundo arrastrando sobre la gráfica.

Sale del registro releído, no de las cifras ya sumadas: cada número que ves es una línea de tu fichero. Los que no tienen instante no salen, en vez de colocarlos a ojo.

Debajo de cada enemigo abatido aparece lo que soltó. Y al pasar el ratón por cualquiera, su resumen acumulado hasta ese segundo, no el de la pelea entera.

La barra de casteo, con lo que tardó de verdad

Cada hechizo tiene su duración, y cambia con la postura y con las mejoras. No hay que declararla: sale de tus lanzamientos anteriores en esa misma sesión —la mediana, con ocho lanzamientos como mínimo—. Cuando el registro contradice a la mediana, el exceso se marca en la barra en vez de estirarla en silencio.

Y se distingue «es instantáneo» de «no hay muestra todavía», que no es lo mismo y se contaban igual.

El registro, con lo de justo antes y justo después

Las líneas originales de la pelea sin salir de la aplicación, con su contexto. Si el fichero ya no está o el tramo se salió del rango, lo dice y dice cuál era el rango — en vez de enseñar una caja vacía.

La forma del golpe, en vez del mínimo y el máximo

El mínimo y el máximo de un ataque son las dos únicas cifras de su fila que un solo golpe raro puede mover. Sobre un registro real, un ataque con 557 muestras da 3 / 25 / 60: el mínimo es 0,12 veces la mediana.

Ahora va la mediana con el p10 y el p90, que contestan lo mismo sin que se las lleve un golpe suelto. Y si un ataque tiene dos modas —dos golpes distintos contados como uno— se dice con palabras, no se deja en el dibujo.

Arreglos

  • La dificultad de las zonas. Una zona sin marca es dificultad 0, no «sin asignar». Eran 84 peleas de 410 sin asignar, y se curan al leerlas.
  • El aviso de cambiar de postura no saltaba cuando la mejor era una que no habías usado en esa pelea. Seis Eye of Vesshan en Defensive con Channeler mejor, y ni un aviso.
  • El trío se quedaba pegado. Declarabas SK/SHM/MAGE y seguía enseñando el druida de la sesión anterior.
  • El buscador de combates perdía el foco a cada letra: había que volver a pinchar en el campo para escribir la siguiente.
  • yourself aparecía como combatiente.
  • El tiempo sin pegar se medía contra cero. Con un arma de tres segundos, dos de cada tres segundos no traen daño por construcción, así que el aviso saltaba en el 98,9% de las peleas — o sea, no decía nada. Ahora se mide contra tu propia cadencia, deducida de tus huecos, y salta en el 22,2%.
  • Los hallazgos del análisis dicen si accionan algo. No es lo mismo «esto lo cambias tú» que «esto es tu equipo o tu nivel» que «esto es lo que pasó».

Y la mejor ráfaga

Los diez segundos seguidos en los que más daño pusiste, con su multiplicador contra tu ritmo de la pelea.

---

Página del proyecto: eqlparse.com

1.9.2 — el daño de tus compañeros declarados se descartaba

August 8, 2026

This note is not translated into English: it is shown in Español, as published.

1.9.2 — arreglo: el daño de tus compañeros declarados se descartaba

SI JUEGAS EN GRUPO Y HAS DECLARADO COMPAÑEROS, ACTUALIZA Y RECONSTRUYE.

En una pelea con varios enemigos, cada uno se encarga de unos cuantos y hay bichos que tú no llegas a tocar en toda la pelea. El daño que tus compañeros hacían contra ésos se estaba descartando entero.

En un histórico real: 21.167 puntos recuperados entre dos compañeros. Tus propias cifras no cambian ni un punto — el arreglo recupera lo suyo sin tocar lo tuyo.

Y ALGUNAS PELEAS ESTABAN PARTIDAS EN DOS. Cuando durante unos segundos sólo pegaba tu compañero, esos golpes se tiraban y el hueco parecía que la pelea había terminado. Ahora se mantiene entera.

EL FILTRO SIGUE HACIENDO SU TRABAJO. Un desconocido peleando cerca sigue sin entrar en tus datos: el arreglo sólo vale para quien hayas declarado tú como compañero.

Y RECONSTRUIR EL HISTÓRICO YA TIENE EN CUENTA A TUS COMPAÑEROS, que antes no lo hacía: rehacerlo los ignoraba aunque estuvieran declarados. Enciclopedia, botón al pie.

1.9.1 — cuándo cayó cada enemigo, y dos tablas que enseñaban la mitad

August 8, 2026

This note is not translated into English: it is shown in Español, as published.

1.9.1 — cuándo cayó cada enemigo, y dos tablas que enseñaban la mitad

CUÁNDO CAYÓ CADA UNO

La gráfica de cada pelea lleva ahora una marca por cada enemigo que cae, en el segundo exacto. Entre dos marcas hay, en realidad, peleas distintas que se juntaron en una porque no hubo pausa entre ellas.

Es el primer paso para poder separarlas al mirarlas, en vez de que la decisión se tome al guardar y ya no haya vuelta atrás.

DOS TABLAS DEL RESUMEN ENSEÑABAN MENOS DE LA MITAD

Al resumir muchas peleas a la vez, las tablas de «a quién pegas» y «de quién te llega el daño» estaban recortadas a 15 y 10 nombres. Sobre un histórico de 412 peleas eso escondía el 51% y el 57% del daño, sin decirlo en ninguna parte.

Ahora llegan a 60 —el 89% y el 92%— y lo que aun así no quepa se dice: «y N más». La tabla de habilidades estaba bien y se queda casi igual.

RECONSTRUYE EL HISTÓRICO para que las peleas viejas tengan las marcas de muerte: Enciclopedia, botón al pie.

1.9.0 — qué lanzó cada uno y cuánto tiempo estuvo puesto

August 8, 2026

This note is not translated into English: it is shown in Español, as published.

1.9.0 — qué lanzó cada uno, y cuánto tiempo estuvo puesto

DOS VISTAS NUEVAS DEBAJO DE CADA PELEA

Qué lanzó cada uno. Una fila por lanzador y una raya por lanzamiento, colocada en el segundo en que pasó. Sirve para lo que no se ve en una tabla de totales: si alguien estaba usando lo suyo o tenía la fila medio vacía. Pasa el ratón por una raya y te dice qué fue y cuándo.

Cuánto tiempo estuvo puesto. Para cada cosa que lanzaste, la barra de tiempo que estuvo activa y su porcentaje sobre la pelea. Relanzar antes de que caiga no cuenta dos veces.

Y ANTES SE GUARDABA EL 12% DE LO QUE LANZABAS

Sólo se guardaba el hechizo que la aplicación supiera clasificar —curas, raíces, mez— y se tiraba el resto. De 6.457 lanzamientos tuyos en un histórico real se guardaban 702: justamente faltaban los nukes, que es lo que uno viene a mirar. Ya se guardan todos.

RECONSTRUYE EL HISTÓRICO para que las peleas viejas tengan sus lanzamientos: Enciclopedia, botón al pie. Las nuevas ya salen completas.

LO QUE ESTA APLICACIÓN NO PUEDE MEDIR, Y LO DICE

El tiempo que un buff estuvo puesto se mide desde que lo lanzas hasta que cae. Un buff que te pusieron ANTES de empezar la pelea y seguía al acabar no deja ninguna línea, así que no aparece — ni como 0% ni como 100%.

Y no se mide maná ni vigor. El rendimiento sostenido de un lanzador se lee de tres cosas —cuánto tiempo estuvo puesto el buff, cuánto maná costó y cuánto vigor—, y el registro de EverQuest Legends no da las dos últimas. Esto es la parte que sí se puede medir: el tiempo.

1.8.2 — aguantar como vista propia y las dos velocidades

August 8, 2026

This note is not translated into English: it is shown in Español, as published.

1.8.2 — aguantar como vista propia, y las dos velocidades a la vez

AGUANTAR, COMO ROL

Debajo de las filas de daño hay ahora un bloque que responde a otra pregunta: quién aguantó. Cuánto le llegó a cada uno, cuánto le curaron, cuántos golpes le tiraron y cuántos se quedaron en la armadura —parada, esquiva, contraataque— más lo que absorbió una runa.

Lo que NO dice, y es a propósito: si estuviste cerca de morir. El registro no da la vida de nadie, así que 3.000 recibidos son una tragedia con 3.100 de vida y un paseo con 12.000, y la aplicación no sabe cuál de las dos. No hay barras de peligro ni nada que lo insinúe.

LAS DOS VELOCIDADES

El número grande de cada fila siempre ha sido tu daño partido por la pelea entera: lo que pones en el reloj del grupo. Ahora, al lado, va tu ritmo: el daño partido por los segundos en los que de verdad estabas haciendo algo. Son preguntas distintas — quien entra tarde a una pelea puede tener un ritmo altísimo y haber aportado poco.

Y DOS TIPOS DE GOLPE QUE SE PERDÍAN

Ya venía en la 1.8.1: «smites» y «shoots» no se contaban. Si no reconstruiste el histórico entonces, hazlo ahora — Enciclopedia, al pie.

1.8.1 — arreglo: daño de dos tipos de golpe que se tiraba

August 8, 2026

This note is not translated into English: it is shown in Español, as published.

1.8.1 — arreglo: se estaba tirando el daño de dos tipos de golpe

SI JUEGAS EN GRUPO, ACTUALIZA Y RECONSTRUYE.

Dos verbos de ataque —«smites» y «shoots»— no estaban en la lista que usa la aplicación para reconocer golpes, así que esas líneas se descartaban enteras y su daño no llegaba a ninguna cifra. En un histórico real son 961 líneas y 18.675 puntos.

Lo importante no es el total, es de quién era: casi todo de un mismo compañero de grupo, al que se le venía dando un número más bajo del real en cada pelea sin que pudiera darse cuenta. Para él son 613.528 en vez de 632.203, un 3% de lo suyo.

Si usas paladín, clérigo o arco, o juegas con alguien que lo haga, esto te afectaba.

PARA QUE SE APLIQUE A TUS PELEAS VIEJAS hay que reconstruir el histórico: Enciclopedia, botón al pie. Las nuevas ya salen bien solas.

1.8.0 — el pet encantado, la gráfica legible y la foto del enemigo

August 8, 2026

This note is not translated into English: it is shown in Español, as published.

1.8.0 — el pet encantado, la gráfica que se puede leer y la foto del enemigo

EL ENCANTADO YA NO SE MEZCLA CON EL ENEMIGO

Si juegas de encantador —o llevas un hechizo de charm—, esto es lo gordo. Encantas a un bicho, pelea para ti, y cuando se rompe vuelve a atacarte: el mismo nombre en los dos bandos dentro de la misma pelea. Hasta ahora la aplicación tenía que elegir uno y se equivocaba en la mitad.

Ahora sale en su propia fila, en tu bando, con la marca «(encantado)», y el salvaje del mismo nombre sigue entre los enemigos. Sabes exactamente cuánto hizo el tuyo.

Cuando dos bichos del mismo nombre se pegan entre ellos no hay forma de saber cuál era cuál, y eso NO se reparte a ojo: se dice cuántos golpes y cuánto daño quedan sin atribuir, y al lado una estimación de cuánto sería tuyo, marcada como estimación y sin sumarse a ninguna cifra. En una pelea real de cinco minutos: 9 golpes y 158 de daño de 2.547, un 6%.

Y de paso, encantar ya no te quita tu mascota invocada de la lista.

DOS COSAS QUE ESTABAN MAL Y AFECTAN A TU HISTÓRICO

Algunos enemigos salían partidos en dos filas: una con todo el daño hecho y cero recibido, otra al revés. Pasaba con los que EverQuest escribe sin artículo, porque la primera letra cambia de mayúscula según dónde caiga en la frase. Cuatro nombres en tu histórico, unos 14.800 de daño repartido entre filas que no existían. Ya van juntos.

Y en la gráfica, la línea de puntos —lo que recibes— se dibujaba a su propia escala, así que parecía que recibías tanto como pegabas. Ahora las dos comparten escala y se pueden comparar de verdad.

LA GRÁFICA SE PUEDE LEER

Pasa el ratón por encima y te dice el segundo exacto con lo que hiciste, lo que recibiste y lo que curaste. Y debajo, qué es lo que estás mirando: los picos NO son los golpes más fuertes, son los segundos en los que más daño se acumuló — puede ser un mandoble o cinco pinchazos.

LA FOTO DE CADA ENEMIGO

Sale de la wiki, pequeña al lado del nombre y grande al abrir su expediente. Hoy la tienen 51 de los 196 enemigos de un histórico real. No hay lista fija: se cruza con el índice de la wiki cada semana, así que el bicho que hoy no tiene foto la tendrá en cuanto alguien la suba, sin actualizar la aplicación. Donde no hay, no se pone nada.

Sólo fotos de bicho. Las páginas de la wiki llevan también iconos del botín que sueltan, y poner uno al lado de un nombre sería una imagen que engaña sobre lo que es.

Y EL RECUADRO AL PASAR EL RATÓN SE LEE EN MODO CLARO

Tenía el fondo oscuro en los dos temas, así que en claro sólo se veía el nombre y los datos quedaban invisibles debajo.

Reconstruye el histórico para que lo del encantado y lo de los nombres partidos se apliquen a tus peleas viejas: Enciclopedia, al pie.

1.7.3 — el rótulo del ratón y el cursor en hechizos

August 8, 2026

This note is not translated into English: it is shown in Español, as published.

1.7.3 — arreglo: el rótulo emergente al pasar el ratón, y el cursor en la tabla de hechizos

EL RÓTULO QUE SALE AL PASAR EL RATÓN

Al pasar por encima de una fila de combatientes reventaba por dentro. No se veía nada raro salvo que el rótulo con el detalle no aparecía. Ya sale.

LAS FILAS DE HECHIZOS SE VEN PULSABLES

En «Mis hechizos», las filas abren la ficha de cada hechizo, pero el cursor seguía siendo la flecha y encima parecía que ibas a seleccionar texto. Ahora sale la mano, como en el resto de la enciclopedia.

Repasadas todas: de las veintinueve cosas que se pueden pulsar en la aplicación, ésta era la única que no lo decía. Las celdas «—» de la rejilla de enemigos siguen con la mano porque lo que se pulsa ahí es la fila entera, y las marcas sin pelea que abrir siguen con la flecha, porque no se pueden pulsar.

Nada de esto toca lo guardado.

1.7.2 — arreglo: la ficha del hechizo y la de enemigo

August 7, 2026

This note is not translated into English: it is shown in Español, as published.

1.7.2 — arreglo: la ficha del hechizo salía apilada y la de enemigo no abría

SI TIENES LA 1.7.1, ACTUALIZA. Dos pantallas están rotas en ella.

LA FICHA DE UN ENEMIGO NO ABRÍA. Pulsabas un enemigo en la enciclopedia y no pasaba nada. Fue un fallo mío al preparar la 1.7.1: se perdió un trozo de código por el camino y se publicó así. Ya vuelve.

LA FICHA DE UN HECHIZO SALÍA APILADA. Los seis bloques de dificultad se dibujaban en el mismo sitio, uno encima de otro: el texto se pisaba y las barras se superponían. Los datos estaban bien todos —usos, medias por dificultad, curación—, sólo que no se podían leer. Y el número de peleas de cada bloque salía vacío: ponía «peleas» sin la cifra delante.

Nada de esto tocó lo guardado. Tu histórico está intacto.

QUÉ HAY AHORA PARA QUE NO VUELVA A PASAR

Un comprobador que abre la aplicación de verdad, recorre las pantallas de la enciclopedia, mide dónde queda cada cosa y avisa si algo se sale de su sitio o si una pantalla revienta. Encontró lo de la ficha de enemigo en cuanto se puso en marcha.

Es la respuesta a un tipo de fallo que se repitió tres veces seguidas: los números están bien calculados y lo que falla es dibujarlos, así que ninguna comprobación de las que miran datos lo ve. Había que mirarlo con la aplicación abierta, y ahora se mira sola.

1.7.1 — arreglo: la ficha del hechizo y la progresión no se abrían

August 7, 2026

This note is not translated into English: it is shown in Español, as published.

1.7.1 — arreglo: la ficha del hechizo y la progresión no se abrían

SI INSTALASTE LA 1.6.3 Y AL PULSAR UN HECHIZO O ENTRAR EN PROGRESIÓN NO PASABA NADA, NO ERA QUE FALTARA: ESTABA ROTO.

Dos de las cuatro partes que trajo la enciclopedia en la 1.6.3 —la ficha de cada hechizo y la página de progresión con sus periodos— lanzaban un error al dibujarse y no llegaban a aparecer nunca. Pulsabas la fila y la pantalla se quedaba igual. Ya funcionan, y los datos estaban bien guardados todo este tiempo: no has perdido nada, sólo no se veía.

Y AHORA REVENTAR SE NOTA

Ésa es la parte importante y es la razón de que el fallo durase. Cada pantalla se construye entera y se pone de golpe, así que si algo falla a medias no sale media pantalla ni un hueco: sale la pantalla anterior, sin tocar. No parece una avería, parece que esa parte no está hecha.

La aplicación no tenía ningún aviso de errores. A partir de ahora, si algo revienta al dibujar, sale un recuadro rojo abajo con el error, en qué pantalla pasó y con qué versión, y un botón para copiarlo. Es feo a propósito: un aviso feo que se ve vale más que un fallo elegante que no.

CADA VALOR EN SU COLUMNA, EN ENEMIGOS

Las cinco columnas de dificultad no caían debajo de su cabecera, y cada fila las ponía en un sitio distinto según lo larga que fuera su vida estimada. Ahora coinciden todas.

Y LA ENCICLOPEDIA APROVECHA LA PANTALLA

Estaba limitada a 1200 píxeles de ancho: en un monitor grande dejaba los lados vacíos mientras las cinco dificultades de un enemigo se apretaban unas contra otras. El texto explicativo no se estira, que una línea demasiado larga deja de leerse.

No toca nada guardado. Si vienes de la 1.7.0, tu carpeta de datos sigue donde estaba.

1.7.0 — se llama EQL Parse

August 7, 2026

This note is not translated into English: it is shown in Español, as published.

1.7.0 — se llama EQL Parse

Sólo el nombre, el icono y el crédito. No toca cómo se cuenta nada ni el formato de lo guardado, y tu histórico sigue exactamente donde estaba.

TU CARPETA DE DATOS NO SE MUEVE

Era la condición para hacer el cambio. El nombre de una aplicación de Electron decide dónde guarda las cosas, así que un renombrado hecho a la ligera deja huérfano el histórico de todo el mundo, sin aviso. Aquí el nombre visible se cambia en un campo que sólo lee el instalador; el que fija la carpeta no se ha tocado, ni el identificador que Windows usa para saber que es la misma aplicación. Está comprobado ejecutándolo y hay una guarda en las pruebas para que no se mueva por descuido más adelante.

Si actualizas desde 1.6.x, todo sigue ahí: peleas, enciclopedia, avisos y configuración.

EL ICONO

Dibujado tamaño por tamaño en vez de escalado. A 16 píxeles —que es el tamaño al que lo vas a ver en la barra de tareas— son tres barras y una regla, y nada más; el resto de los detalles sólo aparecen a partir de 32. Un icono escalado a 16 es una mancha.

EL CRÉDITO, Y LA VERSIÓN

Hecha por Campeon Delmundo de <SPAIN> Guild, jugando. El <SPAIN> sale del nombre y se queda en el crédito: son dos cosas distintas, cómo se llama la aplicación y quién la hizo.

Y en el pie hay ahora algo que no estaba: la versión que tienes instalada. Hasta ahora había que mirar el instalador para saberlo.

QUÉ NOTARÁS AL INSTALAR

El instalador se llama EQL-Parse-1.7.0-setup.exe y el acceso directo «EQL Parse». La carpeta de instalación cambia de nombre, así que la anterior se queda; se puede desinstalar desde Windows como siempre. Lo que NO se toca es tu carpeta de datos.

1.6.3 — la enciclopedia completa

August 7, 2026

This note is not translated into English: it is shown in Español, as published.

1.6.3 — la enciclopedia completa: ficha por hechizo, marcas que se abren, periodos y libro

Cuatro partes, y ninguna toca cómo se cuenta el daño. Todo sale del registro: no hay que exportar ningún fichero para tenerla entera.

LO QUE PUEDES CONTRASTAR EN TU PROPIO HISTÓRICO

Abre cualquier hechizo de «Mis hechizos»: verás en qué tramos pega, cuánto crítica y entre qué dos cifras se mueve. Si tiene menos de cinco usos no dibuja serie, a propósito: con tres puntos no hay tendencia, hay tres puntos.

En progresión, cuenta tus tramos. Si alguna vez cambiaste a una clase más baja, la línea baja — y eso no es un retroceso, es cómo funciona EQL. En el histórico con el que se construyó, de diez cambios tres son bajadas. Compara sólo periodos del mismo nivel: ahí, a nivel 50, las medianas salen 129, 122 y 130 y los récords 210, 190 y 293. La mediana no se mueve y el techo sube.

Y baja al final de «Mis hechizos»: está tu libro. Cuántos consta que tienes y cuántos no lanzas nunca. Aquí salieron 84 y 40.

EL HALLAZGO: DIECINUEVE ACUSACIONES FALSAS

Una lista de «hechizos que no usas» con diecinueve que sí usas no da error, sólo miente. La causa era leer del sitio equivocado: lo lanzado se sacaba de las peleas guardadas, así que un buff echado antes de entrar —o una pelea que no se guardó— salía como nunca lanzado. Medido, 59 sin usar leyendo peleas contra 40 leyendo el registro. Ahora cada casteo se anota: 29 hechizos constan usados sólo por ahí.

QUÉ MÁS SE ARREGLÓ

«You purchased 1 Spell: X» no lo cogía ningún patrón: 23 compras que el registro daba y la aplicación tiraba. El respaldo por daño metía «bash», «punch» y «slash» en el libro de hechizos. El uid 0 es un uid válido y convertirlo desde null abría la primera pelea guardada. Y los separadores de clave eran bytes NUL de verdad dentro del fuente, lo que hace que git trate el fichero como binario.

QUÉ NO SE CONSTRUYÓ, Y POR QUÉ

El juego exporta cosas con «/output», y no hace falta ninguna. El libro lo da el registro. El inventario queda como calibración documentada: contra uno real, la regla que deduce qué es equipo acierta 25 de 25. Y es una foto sin fecha, y aquí todo va fechado.

No toca nada guardado salvo añadir spells.ndjson, que se llena solo.

1.6.2 — Copiar la pelea al chat, y los jefes dichos por la wiki

August 7, 2026

English

It asks for no rebuild. Everything here is computed on viewing, not on saving. The only thing it does on its own is ask the wiki which enemies are raid bosses, and only the first time you meet each one.

Copy the fight to the game chat

A button that puts the fight on the clipboard, already written to be pasted. In the overlay, on each fight's header, and in the main window, next to «Analyse» and «Save fight».

It produces two lines, pasted separately, because EQ chat does not honour line breaks:

Lord Nagafen 6m49s - 141.0k (345dps) | Campeon +pet 79184 (194dps 56%) | Kalforgelp 42230 (103dps 30%) | Jarektik 10609 (26dps 8%) | Notarino 8959 (22dps 6%)
vs Lord Nagafen 141.0k - 75.2k (184dps, max 711)

What was measured before writing it

The limit is not 250 characters. That was an assumption. Measured over 6,163 messages from 451 players in the log, the longest written by a person is 491, and the length tail is smooth: no repeated number at the maximum, which is how a client cut gives itself away. The EQL wiki lists the channels and documents no maximum. The budget is 240 and over 325 stored fights the longest line comes to 198 — none had to be trimmed.

What overflows the line is the mobs, not the group. «a worry wraith, a turmoil toad pet, a turmoil toad, a scareling ×2, a shiverback» is 78 characters before naming anybody. So the boss is named and the rest are counted: «Master Yael +3», «5 enemies». Enemy pets do not even appear.

Chat is ASCII. The only non-ASCII character in those 6,163 messages is the «cannot draw this» diamond, eight times. In 359 messages written in Spanish there is not a single accent. So no «·», «×» or «máx», and if a name carries an accent it degrades to its plain letter instead of sending a diamond.

A pet is not another player

Loose and sorted by damage, in chat it looks like someone in the group. And it is not cosmetic: in a real fight, «Campeon 15363 (40%)» with the pet three places below describes two people where there is one. Added up they are 23388, 61%, and the whole split changes order.

So by default it is merged into the owner, marked «+pet» so nobody reads the figure as your damage alone. The other option keeps them apart and labelled:

merged   Campeon +pet 18919 (189dps 79%) | Notarino 5000 (50dps 21%)
apart    Campeon 7225 (72dps 30%) | Gabobtik (Campeon's Pet) 11694 (117dps 49%) | Notarino 5000 (50dps 21%)

The same goes for other people's pets: Jobarn (Notarino's Pet), merged into them and not into you. And when kept apart they sit next to their owner, with the order between groups taken from the combined damage — otherwise someone dealing 3,000 with a pet dealing 11,694 would rank below someone dealing 5,000 while being the biggest contributor.

What is not touched: a pet with no known owner stays loose and unlabelled. Inventing an owner would be worse.

Raid bosses, told by the wiki

A lone enemy in the line does not say whether it was a boss or one of twelve. Now bosses are named and the rest aggregated, and who is a boss is told by the wiki.

«Named Mobs» did not work, and measuring showed it

It was the category that sounded right. Over the 119 enemies of a real log, 96 — 81% — carry it, among them a desert tarantula with 175 health and a vampire bat with 1,723. On that wiki it means «has a page».

The one that discriminates is «Raid Encounters»: 14 enemies, median health 32,005 against 7,769 for the rest. And the list is the one you would expect — Nagafen, Vox, Master Yael, the Spiroc Lord, Eye of Veeshan, Overseer of Air…

Three sources, and you can see which

As with classes and companions:

  • the wiki declares — its page is in «Raid Encounters»;
  • the heuristic deduces while the wiki has not answered, and it is labelled as deduced, with a dashed border;
  • you correct, and your mark overrides both. It can be removed to give the word back to the wiki.

The enemy dossier shows both things: whether it is a boss and where that is known from.

The case that justifies it

the Spiroc Lord carries an article, so name-based deduction rules it out — and it has 32,212 health and is a raid boss. The wiki corrects it and there is no way deduction could do that on its own.

The other way round too: a spite golem has 49,452 health and is not raid. By health it would look like it is.

And an enemy having no wiki page is an answer: it means it is nobody. a fire giant warrior has none.

Also

  • The Encyclopedia footer literally said «enc.rebuild» and «enc.stateLine»: they were untranslated internal keys, in all five languages. Looking for them turned up 13 more across the app. All 18 written, and a new check walks the 517 keys the interface uses and fails if any is missing — or present in fewer than five languages, because then the fallback chain hides it and it only shows in the affected language.
  • The footer now says «141 enemies learned from 325 stored fights», and the «Redo the dossier» button counts the Encyclopedia again by walking the history. It does not re-read the log or touch any fight.
  • In Settings: how pets are treated when copying, how the share is written, and what goes in front of each line.

---

Invitar a un café · Buy me a coffee

1.6.1 — Nada se asigna solo sin poder deshacerlo

August 7, 2026

English

It asks for a history rebuild, and this time it is short to explain: there is a class of loot that was stored nowhere and only shows up by re-reading the log. As always, your current files are moved aside with a timestamp and nothing is deleted.

Nothing gets assigned on its own without being undoable

This release adds no new figures: it removes three places where the program decided for you and would not let you change your mind.

Marking a pet as yours was irreversible

The moment you marked a pet, its row lost every control. The decision could only be undone by editing config.json by hand.

Now the owner dropdown shows up even when it is already yours, with your name selected, and going back to «nobody» releases it. It still does not show on your own character, which is right: you don't assign yourself an owner.

And there was a deeper reason: two doors for the same decision. One told the parser and stored nothing; the other stored and told nobody, and no part of the interface ever called it. That is why marking a pet lasted only as long as the session, and why any declared by an earlier version sat in the config with no button to remove them. Now there is one door, it stores, and Settings has the list of pets you declared yours and the ones you said were not, with a button both ways.

If on opening you see pets you no longer recognise, that is where they are from. They're in Settings, below the companions.

What you say by hand is no longer overridden by detection

You marked a pet and, on summoning another, detection silently withdrew yours. You only have one at a time and withdrawing the previous one is right — except when you had set the previous one yourself. Now what you declared wins, and to remove it there is its row.

With no manual mark the behaviour is the same as always.

Companions: detected from the group channel

There was a comment in the code saying the log gives no group signal at all, «it was looked for and there is nothing». It was false, and for months it stopped anyone seeing what was in plain sight: whoever speaks on the group channel is in your group, and those lines were already being read so they could be spoken aloud.

Measured against a real log, the senders on that channel are exactly the companions already declared by hand, without a single false positive. The guild channel does not count and is not used: a guildmate is not in your group.

Two things that come with it:

  • You can see where each one came fromsaid by you or detected — just like with classes. What you say and what is inferred cannot look the same.
  • Detected ones are removed just like declared ones, and removing is remembered: it will not be proposed again next time that person speaks. There is a separate list in case you change your mind.

Loot picked up with no fight to hang it on

When a companion finishes off a corpse on their own and you loot it, that combat was never yours: the relevance filter only opens a fight for you or your pets. The item had nowhere to go and was lost. There were 5 in the reference log, plus one from a neighbouring case: a fight that opened, had no damage from anyone, was discarded on save — correctly, it describes nothing — and took with it the item picked up inside it.

The obvious fix was tried first: letting a declared companion open a fight. It was measured and it was not the answer. It recovered 3 of 5 and left the door open for a companion's fight while farming across the zone to enter your history as yours, which is exactly what the tests forbid «under no circumstances». It was dropped.

The answer is understanding what this is: picking up an item is an event of yours, not of a fight. The proof you were there is that you picked it up, not that they hit. So it is stored on its own, in its own file, and enters the Loot count stating that it was picked up with no fight.

What it does not do is enter the enemy's dossier or the per-difficulty split, and that is not an oversight: «2 of 11 kills» needs a denominator of your fights, and here there is none. Padding the numerator with a denominator that does not follow it would be inventing a drop rate.

After rebuilding, the reference history reconciles item by item with the log: 775 units in the log, 775 in the store, not one loot line left out.

---

Invitar a un café · Buy me a coffee

1.6.0 — Cuatro cosas que tu histórico no estaba contando

August 7, 2026

English

This release does change what is stored and asks for a history rebuild. It will offer it on first open; it's also in the Encyclopedia footer, «Rebuild». It re-reads your whole log — about five seconds — and moves your current files aside with a timestamp, never deletes them: if anything looks wrong, the old ones are still there as fights.ndjson.<date>.bak.

It's worth doing. What follows had been going uncounted for months, and all of it can be checked against your own history.

Four things your history was not counting

Loot you picked up and it never stored

Out of 683 loot lines in a real log, 98 were lost — 14% — for two different reasons:

  • 83 because they carried a quantity instead of an article. «You looted 2 Phosphorous Powder from…» didn't match a rule that demanded «a» or «an», and the whole line was dropped.
  • 15 because of an ending that had no rule: «and stored it in your currency». Those are Motes, which go to the currency tab instead of the bag. Among them, all 9 Mote of Major Potential picked up in that log, of which not one appeared in the Loot section.

And there was a second fault on top of the first, worse than it: the quantity was not stored. Loot was counted by pickups and not by units, so «2 Bone Chips» was worth one. That error is graver than not reading the line, because a line that isn't read shows up in the unrecognised counter and a «2» counted as «1» is never seen by anyone.

In the reference history, after rebuilding: from 566 to 761 units, 195 recovered, and 16 items that weren't listed at all.

How to see it in yours: open Loot and search «Mote». If you run instances and none show up, or fewer than you remember, these were them.

The deaths each enemy caused you: never counted

The field had existed from the start in every enemy's dossier. It was declared, written to disk and read back on startup. Nobody ever incremented it: a zero was stored and a zero was read.

Fixing it revealed that the record kept each death's victim but not who caused it, so it would have had to be inferred from who the enemy was targeting — and in a fight against three, targeting you is not having finished you. The log does say which one it was («You have been slain by X!»), so that is what's stored now instead of a guess.

In the reference history: 36 deaths attributed, with Lord Nagafen ten times.

How to see it in yours: open any enemy that has killed you. It says so now, and per difficulty.

Invented names in the healing table

This was not a miscounted figure. It was a row with a name and a number, indistinguishable from real data, and that is why it's the one most worth checking your own history for.

A combatant's breakdown has a «who you healed» table. Combatants that do not exist were showing up in it:

| name | fights | healing | |---|---|---| | Campeon over time | 105 | 147,772 | | itself | 58 | 55,895 | | himself | 25 | 34,831 | | herself | 5 | 7,355 |

With your name instead of «Campeon». 140 of 341 fights had at least one.

They are two log forms that were being read as if they were names: the suffix of a heal-over-time tick («You healed Campeon over time for 153…», 1,126 lines) and the pronoun of a self-heal («a worry wraith pet healed himself for 613…», 1,131 lines). Neither is anybody.

And a third, with a different consequence: the log names the enemy as the healer of your own lifetap. «Lord Nagafen healed you for 451 hit points by Leech Touch I» comes right after «Lord Nagafen has taken 451 damage from your Harm Touch X» — it gives you back what you took off it, and the log credits it backwards. 321 lines, padding every boss's healing done with your own.

Fixing the pronoun surfaced a second-order effect that was also moving figures: an enemy's self-healing never reached the enemy, so its estimated health counted it as health it never had. It's discounted now. It changes the figure for 59 of 147 enemies, 3.9% lower overall, and most for the ones that come with a healer: the Spiroc Guardian by 17%, a scareling by 17%.

How to see it in yours: expand any of your own rows in a fight with healing, under «who you healed». If you saw your name twice, one of the two didn't exist.

Loot and resistances, split by difficulty

Each difficulty is practically a different game, and until now health, biggest hit and abilities were already kept apart — but loot and resistances were summed across all five.

Loot cannot be summed. Measured:

a fire giant warrior
  D0   Throwing Boulder ×8, Throwing Boulder +1 ×5
  D1   Throwing Boulder +1 ×11
  D2   Throwing Boulder +2 ×17
  D3   Throwing Boulder +3 ×4

It's the same table stepping up once per difficulty. Summed, it describes a table that exists nowhere.

Resistances are split with their sample size always in view, and greyed below six attempts. Splitting fragments the sample, and «86% lands» from 14 attempts and from 400 read identically unless you say how many.

And the D0 column, which contained East Freeport

There was a line — repeated in five places — turning «difficulty not recorded» into «difficulty 0». The result was that the D0 column of the zone grid contained open world: a column labelled as a measured difficulty that in fact held the absence of measurement.

The real D0 exists and is something else: an instance at base difficulty, which the log writes as plain «Nagafen's Lair - Group», with no number and no tag. It was not assumed — it is measured. Same enemy, same zone and same mode, the health of those instances sits a full step below D1 (median 0.873 over eleven enemies, nine of them between 0.86 and 0.88), and that step is the same size as D1→D2 (0.853) and D2→D3 (0.884).

There are now five measured columns and, separate and labelled for what they are, two more buckets: open world (the zone declares no difficulty because there is none) and zone unknown (fights before the log's first zone line). An absent datum is no longer painted as a measured one.

Five columns, everywhere

  • Enemies is now a grid like Zones. Each cell's number is how many times it fell there, so «I killed it at D0» shows in the D0 column. An empty cell says you have not met it at that difficulty, which is not the same as not having killed it — before, the two looked identical.
  • Loot has difficulty tabs, and each item's «2 of 11» uses that difficulty's kills, not the total.
  • Inside an enemy, all five cards always show, and each opens its own page: its resistances, its health, its biggest hit, its abilities and its loot, with nothing averaged in from the others.

Mode, stored but not splitting the grid

Whether Solo and Group are different enemies at the same difficulty was checked. There is no sample to claim it: on ordinary enemies the measured difference is +6.5%, less than half a difficulty step, and only two bosses with one sample each say otherwise (×2.3 and ×2.7 — left as an open question). Besides, 54% of the log's fights do not declare the mode, so splitting by it would leave most of them in a third «not recorded» bucket, which is exactly the label this release removes.

So mode is stored on each cell and shown there, without being an axis. When there is a sample, the question can be answered with data instead of a hunch; not storing it closed that door.

Also

  • An enemy healing itself now counts as the fight continuing. That line used to be addressed to a name that didn't exist, so it failed the relevance filter and those seconds read as idle: three fights in the reference history were split in two because of it.
  • Loot taken from a corpse finished off entirely by a declared companion has no fight to go to, because the filter only opens a fight for you or your pets. It was 5 items and they vanished silently; they are counted now. The underlying fix comes in the next release.

---

Invitar a un café · Buy me a coffee

1.5.0 — La Enciclopedia completa

August 6, 2026

English

This release changes nothing already stored and asks for no history rebuild. It does do two things once, on first open, and both are expected: it completes the summaries of your stored fights with one new figure — your damage in each, which is what progress needs — and downloads the spell icons from the wiki. The first is stated in the footer line of the Encyclopedia; if you see it there, that is the plan, not a problem. Your log is never re-read and no fight is touched.

The Encyclopedia, complete

All six sections open now. And enemy abilities stop being a section of their own and move to where you look for them: inside each enemy.

Spell icons

Every spell with its icon, pulled from the wiki. They show in the catalogue, in enemy abilities and in the cooldown list.

They're fetched in batches and stored once: after you've seen them, the Encyclopedia works with no network. They're 40×40 and about 2.6 KB, and there are only 150 distinct ones because the classic gem art repeats across spells of the same school.

What has no icon is what isn't a spell: hits, kicks, bashes. You won't see an empty box or a question mark there — there simply is no image, because nothing is missing.

My spells

The catalogue lived behind a button in the combat bar, which is an odd place for something you don't look at during a fight but after it. That button is gone: the section lives in the Encyclopedia and opens with a summary — how many spells, casts, total damage and how much lands — before the same table as always.

And it's built over your whole history, not the range in your filter: here you aren't looking at a session, you're looking at your spells.

Abilities, inside the enemy

Opening an enemy gives you one block per ability with what you have seen it cast: how many times, its biggest hit, and in how many of how many encounters at each difficulty. Below, marked separately, what the wiki says about that specific ability — until now only the enemy's own page was consulted.

The usual distinction: measured first, consulted after, never mixed.

My deaths

Where you fall by zone and difficulty, and every fall with its date.

The enemy shown beside each one is the one that dealt you the most damage in that fight, and it's labelled as such. It is not who landed the killing blow: the log never says which it was, and it may well have been the one that hit you least. Dying twice in one fight counts as two.

My progress

There is no dps-over-time curve, on purpose. It rises when you level and falls when you fight something tougher, so it measures both at once and neither. What compares is the same enemy, at the same difficulty, at the same level.

So there are three things: your marks by level, your best against each enemy with its difficulty and level, and one line per triple that reaches five fights. Below that no line is drawn and it says why — three points are not a trend, they are three points.

Two exclusions it makes and states: fights under 30 seconds, and fights against several enemies, which stay out of the per-enemy split. Your dps in a fight against three is not your dps against any of the three, and splitting it would count it three times.

Also

  • The «Pet of» dropdown works again during a fight in progress. It opened and closed itself before you could pick anyone. The combatant list repaints four times a second and was re-placing every row even when it was already in place; re-placing a row takes it out of the document for an instant, and taking it out loses the focus of whatever is inside. With no focus, the breakdown stopped counting as «in use» and was rebuilt over the top. Now only what has actually moved gets moved.
  • Picking an owner from the range summary called the system once for every time the summary had been drawn that session. The result was the same, but the work multiplied on its own.
  • The catalogue table had its grid pinned at eight columns, and there is a ninth — "effective damage" — that only appears when something doesn't land 100% of the time. The moment it appeared it dropped to a second line and dragged "cooldown" down with it. If everything of yours always lands, that column had never been drawn.

---

Invitar a un café · Buy me a coffee

1.4.0 — Enciclopedia

August 6, 2026

English

This release changes nothing already stored and asks for no history rebuild. The only thing you'll notice is that it takes a second longer the first time: it's building the encyclopedia out of the fights you already have. The footer line of the section says so, and it won't happen again.

Encyclopedia

A new tab, next to Combat and Alerts. Everything you've learned by fighting, arranged so you can look it up later: which enemies live in each zone and difficulty, how much health they have, what they hit you with, what they resist and what they drop.

One rule governs the whole section: nothing is computed when you open it. Each enemy's entry is brought up to date when a fight closes, which is when the data is already in hand. Looking it up is reading, not computing — opening any encyclopedia screen with two thousand stored fights costs two hundredths of a second.

Zones

One row per zone, one column per difficulty, D0 to D4. Click "Plane of Fear · D4" and you get every enemy in that zone at that difficulty you have data on from fighting them, hardest first.

An empty cell is dashed and doesn't say there's nothing there: it says you haven't been in. Those are two different things and they should look different.

D0 is the open world. The log never writes it — an un-instanced zone doesn't say "- Solo 0", it says nothing — but "at what difficulty?" does have an answer. What's stored is still what the log said; the equivalence only applies when grouping.

Enemies

Every one you've met, with a pill for each difficulty you know it at. The health shown is from the highest difficulty where it actually fell, labelled as such; if it never fell at the highest, the lower one is shown, because claiming the higher one would be inventing it.

Difficulties are never averaged. Measured on a real log: Magus Rokyl has 59% more health at D3 than at D2, hits 3.6 times harder, and casts two spells it doesn't have at D2. The average of the two describes one that doesn't exist.

The search finds enemies and zones, and as you type the matches appear as shortcuts: typing "Nag" brings up "Lord Nagafen" and "Nagafen's Lair", each with its own mark. It works entirely from the keyboard: Enter takes the first, Down enters the row, arrows move, Escape goes back.

An enemy

Opening one gives you its full file — estimated health, one card per difficulty, what it resists, what the wiki says, what it hits you with and what it drops — and below it every fight you've had against it. Click one and it opens in the Combat tab.

Loot

Every item, who dropped it and how many times: "2 in 9 kills". That's two measured figures side by side — the times you brought it down and the times it dropped that — not a drop rate: it mixes every difficulty, because the log attributes the item to a name and not to an instance.

And whatever the log attributes to nobody shows up anyway, saying it has no source. A loot list quietly missing items is worse than one with declared gaps.

The entries are learned, not computed

They live in encyclopedia.json next to your history, carrying three marks that detect three different things: their own generation, the generation of the store they were built from, and the last fight folded in. That's enough to notice on their own when they've fallen behind:

  • If they're only missing the fights from while the app was closed, those get folded in at startup and that's it.
  • If you rebuilt the history, the fights moved and it notices: they're rebuilt whole.
  • And if you want to force it, there's a button at the foot of the section and the npm run enc:rebuild command, which also compares the rebuilt entries against the previous ones and warns you if any figure moved.

Rebuilding doesn't re-read your log or touch your fights: it walks the history you already have. With two thousand fights it takes under a second.

Four of the seven cards — My spells, My progress, Enemy abilities and My deaths — are drawn but don't open yet. They carry a dashed rule so you can see it, and they arrive in the next release.

Also

  • The three filters fit on one line again. The groupmate chips grew with each one declared and pushed the range and the enemy out of the bar: with two of them none of the three could be read. They're now a dropdown that takes the same room with two as with twenty, and the summary states which groupmates it's filtering by, which it never did before.
  • The header stops eating its own buttons. With a long zone name the row measured 1,472 px inside an 1,182 px window, and "Change log" and the theme toggle fell off the screen with no way to press them. It was already happening before this release. Now it's the text that gives way and never the buttons, and it's the label that gets truncated rather than the value: you read "Plane of Fear -…", not "ZONE P…".
  • The "merge pets" checkbox had been rendering as a 5 px grey strip with its text overflowing, because of a class name shared with the breakdown bars.

---

Invitar a un café · Buy me a coffee

1.3.1 — Los controles de «quién es quién», donde de verdad se usan

August 6, 2026

English

Usability fixes for 1.3.0. Nothing already stored changes, and no rebuild is needed.

The "who is who" controls are now where you use them. "This is my groupmate" and "Pet of" only appeared when expanding a row inside a single fight. But that question comes up while looking at the split, and the split is in the range summary or in a picked set of fights — where there was nothing to press. They're in both places now.

The dropdown for assigning a pet no longer closes by itself. During a live fight the breakdown is rebuilt four times a second, and rebuilding it destroyed the dropdown: it opened and shut before you could pick anyone. It now stays put while you're using it.

The candidate owners come from the fight you're looking at. They used to come from the live fight even while reviewing a stored one, so it offered people who had nothing to do with it.

And picking yourself as the owner now files the pet with yours instead of with other people's. Those are two separate places on purpose: yours count towards deciding whether a fight is yours, other people's don't.

---

Invitar a un café · Buy me a coffee

1.3.0 — Di quién es quién: compañeros, mascotas ajenas y selección a mano

August 6, 2026

English

This release changes nothing already stored and asks for no rebuild. Just open it.

Three things that answer the same problem: the EQL log never says who is in your group — no invites, no joins, no leaves; it was looked for and it isn't there — nor whose pet is whose once the summon is over, nor which fights make up a session. None of it can be deduced. The only way is for you to say so, and now you can.

Declare your groupmates

Expand someone's row in the combat list and press "This is my groupmate". From then on they stop appearing under "Unidentified", count for certain under "Your side", and you can filter by them. The full list lives in Settings next to the exclusions, and is just as easy to undo: you play with them today and not tomorrow.

Declaring someone moves no number at all. They were already on your side — everyone who isn't an enemy is — and the totals never looked at that mark. All that disappears is the "not known to be yours" label, which is exactly what you stop needing once you say otherwise.

And it applies backwards instantly: declare someone and yesterday's fights reclassify themselves, with no rebuild.

Filter by who you played with

Declared groupmates appear as chips below the range and the enemy. Mark one and you see the fights they were in; mark several and you see the ones where all of them were there.

That distinction matters more than it looks. On a real log: 19 fights with one, 19 with the other, and 18 with both. Comparing the split across the 20 where either was present drags in two fights where one was missing — and then each person's share compares nothing.

Pick a session's fights by hand

Shift+click in the list takes the run from the last one you clicked: two clicks and you have first to last. Ctrl+click adds or removes a single one. A bar appears with "N fights picked" and a button to see them as one.

There's no new screen: it's the same range summary, except now you tell it exactly which fights to add up instead of describing them with a filter. While a selection is active it wins: the range and the enemy take nothing away.

Say whose pet that is

Another player's pet shows up as one more unknown, because in EQL the name changes on every summon. Now, expanding its row, there's a "Pet of:" dropdown listing the players in that fight.

Assigning it labels it and takes it out of "Unidentified" without touching a single figure. If you also tick "Merge pets", each pet folds into its owner — the only way to compare people. On a real log an unassigned pet was taking 20% of a stretch's damage, and that 20% belonged to someone:

unmerged                          merged
  Kalforgelp  23,771  31%           Notarino    30,984  41%  +1 pet
  Campeon     16,557  22%           Kalforgelp  23,771  31%
  Notarino    16,204  21%           Campeon     16,557  22%
  Gobobn      14,780  20%  (of Notarino)

It lasts the session, on purpose: pet names come from a closed list and get recycled between players, so "that one is Notarino's" is only true while it is summoned. Storing it forever would repeat the bug that in 1.2.2 was putting another player's fight into your history.

Also

  • The "Not one of mine" button had been rendering without a border for several releases, due to two colour variables used without being declared.
  • The summary lost the "(of So-and-so)" label and the pet mark as soon as it joined more than one fight.

---

Invitar a un café · Buy me a coffee

1.2.2 — Overlay combate a combate, y dos fallos que ensuciaban el histórico

August 6, 2026

English

This release fixes data already stored. You should rebuild.

Two bugs made the history store things that didn't happen. Both are fixed by re-reading your log: the prompt with the button appears when you open the app, it takes a few seconds, and the old data is kept aside.

1 · If you use the trio table and change trio, your fights could be stored at the wrong level. A later /who saying a different trio was thrown away entirely, classes and level, because the table won. Measured on a real log: the table said level 50 and the /who said 27, and the eight following fights were stored at 50. Level is exactly what separates your best marks, so that made them incomparable. A later /who now ends the declared span: it doesn't contradict what you declared about the past, it terminates it.

2 · If you play with a pet, another player's fight could get into your history. In EQL a pet's name changes on every summon and comes from a closed list, so names get recycled between players. A name that was yours hours ago could reappear as someone else's pet, and since it was never retired, their fight came in as yours. It happened: a whole fight was stored with another player, their pet and an enemy, and your own character in no row at all. Only your current pet counts now.

---

The overlay goes fight by fight

Accumulating the whole session in two columns stopped meaning anything after a while: everything blended into a single fight that never happened.

There's now a fixed strip at the top with your accumulated damage and your dps per kill — how your evening is going, which is the one thing worth keeping between fights. Below it, a stack of fights: the top one is the live fight, or the last one if there is none, expanded with both sides; closed ones sink down collapsed to a single line, expand on click, and eight are kept with scrolling for the rest.

Every figure in a block belongs to that fight: damage, split and share. Inside a closed fight the dps is that fight's, not the session average — putting the session figure there would be labelling it wrongly. The per-kill average is still at the top and in the live fight's breakdown, where it says so.

Reset is now a clean slate: it empties the stack and the running total together.

Contradictions with what you declared are no longer silenced

If you use the trio table and actually change trio, until now there was no way to find out your table had gone stale. It warns you now, in two different ways depending on what can be proven:

  • A spell exclusive to a class that isn't in your trio. Your table still wins and nothing is touched, but you're told and offered the new row. Which of the three classes left cannot be measured, so all three are offered with their last signal and you choose.
  • A later /who saying a different trio. Nothing to guess here: the game gives the whole trio and the level, so it is taken. That's the fix behind the warning above. If the /who confirms the trio and only the level differs, your table still wins.

A spell two classes share still proves nothing, and that is not a bug: Regeneration belongs to both druid and shaman, so casting it doesn't say which one you have.

A fight you never landed a hit in gets a name too

They had none, and the list showed them as "skirmish". In a real store there were eight, and not one was a skirmish: a fire giant and King Tranix landing 4,310 points without taking one, a harpy, a spectre. Those are deaths and escapes, and they're exactly the ones you want to find. Whoever hit you hardest now names them.

---

Invitar a un café · Buy me a coffee

1.2.1 — Las peleas nuevas vuelven a la lista

August 5, 2026

English

If you have more than 60 stored fights, new ones had stopped showing up in the list. None were lost: they were on disk all along. What failed was the display. Update and they appear on their own again — including every fight that was saved while you couldn't see it.

New fights are back in the list. You'd finish a fight, having watched it live — rows, chart, everything — and when it closed it vanished without a trace. Changing the filter brought it back, because touching the filter was the only thing that re-read the history.

The bug was in the signal that said "there's something new to show": it was the length of the recent-fights list, and that list is capped at 60. Once your history passes 60 fights the length is pinned — one enters at the top, one falls off the bottom — and never changes again. The list stopped refreshing itself, and there was no way to notice: the counter at the foot showed a number frozen at startup, so it gave nothing away either.

This dates back to 1.0.2, the release that brought the persistent history, but it only starts to bite once you cross 60 stored fights.

Your data is untouched. This version changes nothing on disk and asks you to rebuild nothing. Open it and you'll see the full history, including every fight stored during all this time without reaching the list.

---

Invitar a un café · Buy me a coffee

1.2.0 — Nivel y trío de clases resueltos, y quién es de los tuyos

August 5, 2026

This note is not translated into English: it is shown in Español, as published.

En EQL puedes cambiar tu trío de clases y el log no lo dice en ninguna parte. Como el nivel efectivo es el de tu clase más baja, un cambio de trío puede hundirlo de 50 a 24 sin dejar rastro. Esta versión lo resuelve, y de paso corrige 19 peleas de mi propio histórico que estaban guardadas con el nivel equivocado.

Nivel y clases: tres fuentes, y un orden entre ellas

1. Lo que declaras a mano — tú estabas allí y el log no. 2. El /who — cierto, pero sólo del instante en que lo escribes. 3. Un hechizo exclusivo — prueba que esa clase estaba activa. Nunca el nivel.

Si lanzas un hechizo que sólo puede lanzar una clase que no consta en tu trío, sale un aviso en pantalla con el nombre del hechizo y de la clase, y te pide un /who. El trío se corrige solo; el nivel se borra, porque ningún hechizo prueba un nivel. Un hechizo compartido por dos clases no prueba nada y se calla.

Diccionario con 461 hechizos exclusivos entre Shadow Knight, Mago, Druida, Chamán y Brujo (esta última parcial), sacados del wiki.

La tabla de tríos

Botón «Cambié de trío» junto a tus clases, no enterrado en ajustes. Para tramos pasados, la tabla completa con fecha, trío y nivel. Tu palabra manda sobre las otras dos fuentes, incluido un /who posterior: ese /who describe un momento posterior, no el tuyo.

El nivel del renglón es opcional: déjalo vacío mientras subes y mandarán las subidas de nivel del log dentro de ese tramo.

Y como lo manual manda, debajo se señalan las veces que tu tabla y el log no dicen lo mismo. No se corrige nada: se enseña, porque si te equivocas al declarar una fecha no hay nada más que te avise.

Quién es de los tuyos

El log de EQL no dice quién va en tu grupo: ni invitaciones, ni entradas, ni salidas.

Lo que sí se puede afirmar, se afirma: quien cura a un enemigo es enemigo, y la regla se propaga al que cura al que cura. El resto —jugadores que hicieron daño real pero de los que no hay ni un /who— va en su propia sección «Sin identificar», ni borrado ni sumado a tu bando. Con un botón «No es de los míos» para los que tú sepas, recordado entre sesiones.

La mascota, que en EQL cambia de nombre en cada invocación, te pide un /pet who leader una vez por nombre y sesión, con casilla para apagarlo.

Corregido: una opción nueva podía llegar apagada en silencio

La configuración de voz se mezclaba con la de fábrica de forma plana, así que cualquier casilla nueva añadida a un grupo ya existente habría llegado desactivada sin decírtelo, aunque su valor por defecto fuese activada.

Aún no había afectado a nadie: los avisos de supervivencia de la 1.1.0 no se vieron tocados, porque un grupo entero que falta sobrevive a esa mezcla. La única víctima habría sido el aviso de mascota de esta misma versión, cazado antes de publicarlo. Si abres Avisos y ves algo desmarcado que no recuerdas haber tocado, ahora ya no volverá a pasar.

Y además

  • La etiqueta del panel decía «clases leídas de tu /who» sobre un trío deducido de un hechizo. Ahora distingue las tres procedencias: leídas de tu /who, de tu tabla de tríos, o deducidas de tus hechizos.
  • Los sin identificar salen aparte también en la lista de la pelea, no sólo en el resumen.
  • Tutorial ampliado explicando por qué hacen falta /who y /pet who leader.
  • 381 comprobaciones automáticas del motor, 57 más que en la 1.1.0.

Al actualizar

Reconstruye el histórico para que las peleas antiguas cojan el nivel corregido: la aplicación te lo ofrece sola, o npm run store:rebuild si trabajas desde el código. Sin eso, lo guardado conserva el nivel con el que se cerró.

1.1.0 — Cifras corregidas, avisos de supervivencia y dificultad de instancia

August 5, 2026

English

This release fixes figures, not just bugs. What you have stored from earlier versions does not describe what happened in your fights. On launch you'll get a notice with a button that re-reads your log and rebuilds it: it takes a few seconds and the previous files are kept aside. It's worth it.

---

Survival alerts

When one second of delay costs you the character, the program says so out loud, cutting through anything else it was saying:

  • Feign Death broken or interrupted. You thought you were down; you're not.
  • Invisibility. EQL has two systems and only one warns before it drops: of 25 cycles measured in a real log, 24 dropped with no warning at all and four lasted under eight seconds. Hence the alert on the drop itself: for Camouflage it is the only signal there is.
  • Levitation. Between 6 and 12 seconds of warning before you fall. In the Plane of Sky, that is the difference.
  • You get summoned, invulnerability ends, you go down.
  • And when your enemies lose track of you, in a normal voice: that's good news, not an alarm.

None of them are deduplicated: if invisibility drops twice in a minute, you hear it twice. Levitation warns twice per run, because the game's third warning arrives in the same second as the fall.

Each alert has its own checkbox under Alerts → Survival.

Instance difficulty in the enemy dossier

EQL instances every zone from D0 to D4 and the enemies genuinely change:

| | D2 Adaptive | D3 Fused | | --- | --- | --- | | Magus Rokyl, estimated health | 14,688 | 23,295 | | Its hardest hit | 204 | 744 |

59% more health and three and a half times the punch. The dossier averaged the two and reported "18,992", a figure describing neither creature. Health and hardest hit are now separated by difficulty.

Resistances are not separated, and that is a measured decision: in the same log they land 100% at both difficulties and the only difference comes from fourteen attempts. Splitting them would break an already small sample for nothing. The dossier says so.

And abilities are no longer presented as its own. In EQL an enemy's secondary classes are rolled per instance, so two encounters with the same name may be different creatures. Lord Nagafen cast all three Druid spells in one fight and none in the next, despite it lasting three minutes: if difficulty were the cause, abilities would be added, never lost. So instead of "its abilities" it now says "what it cast across N encounters", with how many of how many each one showed up in.

Level

In EQL your effective level is that of the lowest class in your trio, so swapping in a low class lowers it outright. Every fight stores the level you had, and your best marks are grouped by it:

   level 50    34 fights   best 210 dps   median 125
   level 27     6 fights   best 177 dps   median  97
   level 25    11 fights   best  65 dps   median  44

Comparing a fight today against the record from when you were higher only tells you that you are no longer at that level.

Fights from before your first /who are shown as level unknown, and it says so. It is not inherited backwards.

Spell catalogue

Everything you have cast, built only from your history: uses, average damage, range, crits, land rate and reuse. It includes EQL's unresistable damage type, which was in the data and unused.

Reuse comes from the "not ready yet" warning, which states the time remaining, not the total: it is a lower bound and says so. And for abilities that leave no trace when used — Companion's Fury warns 283 times that it isn't ready and never once that it was used — it says that whether you make good use of it cannot be known, rather than showing a zero.

---

What was wrong in your history

No deaths were counted at all. Since 1.0.7, the filter that keeps a stranger's fights out of yours was also discarding every death event, because a death doesn't name an attacker and a target but a victim and a killer. Across 55,000 lines of real log: zero enemies killed. Losses, fight names and estimated enemy health went with them. Lord Nagafen's dossier said "no data" where it now says 52,443.

And the ones that were counted, were counted twice. You have been knocked unconscious! is not a death: it is the warning before it, always followed by the real death line. Ten real deaths, twenty counted.

The zone was destroyed in one fight out of four. "You have entered an area where levitation effects do not function" is a sub-area notice inside the Plane of Sky, and it was stored as if it were the zone: it took the real zone with it, and the instance difficulty with that.

Estimated health came out multiplied. When the same mob died three times in one fight, the damage from all three was added up and called "its health".

Duplicated fights. The "read the whole log" checkbox was stored as a preference instead of running once, so every later launch re-read the log and added every fight again. Four launches on the same log gave 4, 4, 8 and 12.

The period summary mixed fights up. Fights were identified by a counter that restarted at 1 on every launch, so today's first fight masked yesterday's: clicking an old fight opened a different one, and the summary read the same recent fight several times while leaving the old ones out. With a single extra day, it reported 1,121,550 where the real sum was 1,165,649.

Inflated resistances. The first spell of each fight never counted as landed, and everything your pet cast counted as resisted but never as landed.

Evasive was calculated wrong

Affects Bard, Monk, Ranger, Beastlord and Rogue.

The EQL wiki is literal: "You have a 95% chance to evade all incoming attacks". Evasive avoids whole attacks, it doesn't reduce the damage of each hit. That 95% sat in the mitigation field, and since the program reconstructs stance-free damage by dividing by what the stance mitigated, every hit taken in Evasive was multiplied by twenty.

It is now scored as what it is: attacks avoided × average damage, both measured from your log. With 100 attacks and 60 landing for 100 damage, Evasive saves 5,500. It used to claim 113,000.

And a limit surfaces that wasn't being stated: while you're in Evasive there is no way to know how much damage would come in without it, because the log doesn't distinguish a stance evade from an ordinary parry. Nothing is claimed there any more.

Also

  • Stance advice now shows both figures: what you actually took and the stance-free reconstruction. And it won't call a verdict on fewer than eight hits taken.
  • The new-version notice works. It had been dead since 1.0.4.
  • The analysis view can be read. It was rebuilt four times a second, so the scroll jumped back to the top as soon as you moved it.
  • The analysis cuts a phase when you actually stop attacking, no longer counts one extra idle second, works out damage lost to misses from your melee hits rather than the average of everything, and no longer calls a slow "seconds not attacking".
  • /who lines from players who are away are now read, with race and guild.
  • The merge-pets toggle no longer throws, and the "See on the wiki" button in the dossier now does something.

For anyone poking at it

npm run store:check      inspects the history without writing anything
npm run store:rebuild    rebuilds it by re-reading the log
npm test                 324 checks

---

Invitar a un café · Buy me a coffee

1.0.7

August 5, 2026

English

The overlay no longer steals focus from the game. That was the cause of the stutter: clicking it made EQ stop being the active window, and the game throttles its frames in the background. The overlay needs no focus — there's nothing to type in it — and now never takes it. The backdrop blur is gone too (it forced the compositor to redraw the whole game every frame), and it refreshes at half the rate of the main window.

If you still get stutter, check Options → Display → Max Background FPS in game: on «Min CPU» EQ drops to a few frames when it loses focus. The warning now appears in the tutorial and the first time you open the overlay.

Overlay rows expand without toggling anything. Hover over it and you can click; move away and clicks go back to the game. Before, only the top bar reclaimed the mouse.

Someone else's fight no longer leaks into yours. The log sees everything happening around you, and a stranger killing mobs ten metres away was landing in your numbers. A fight now only opens if you or your pets are in it, and within it only what touches your side — or someone you're already hitting — counts. Groupmates join automatically by hitting your target.

Fixes

  • The zone was lost on restart after long sessions: the last 512 KB of the log are re-read, and if you'd been in the same zone for hours its entry line fell outside. Zone, stance and invocation are now saved alongside the read position, and a fight that started before the zone was known is completed when it closes.
  • Dps was part of the overlay's repaint signature. Since it changes every second, the column was rebuilt constantly and clicks were lost between repaints; the rate now updates in place.

---

Invitar a un café · Buy me a coffee

1.0.6

August 5, 2026

English

Enemy file. Pick an enemy in the filter and the summary opens its full dossier: estimated health, how it hits you, which of your spells it resists, what it drops and where you've met it. Health comes from the damage it took to drop it — the log gives no health values, so it's a measured bound rather than an official figure, and it says so.

Resistances measured, split by invocation. Every spell of yours an enemy resists is recorded alongside the active invocation. Without that split the average lies: the same spell can land 20% of the time under Inversion and 80% under Over Channel, and the mean of the two describes neither. You'll now know from your own numbers whether the −150 resist adjust is worth it against each mob.

What the wiki says, inside the app. Tactical notes for each mob are pulled from eqlwiki.com. On Lord Nagafen: "Fire and Magic Resists mean everything with this fellow". Cached for a month.

Searchable enemy filter. Type "Nag" and you get Nagafen; type "harpie" and every harpy comes together.

Fixes

  • Stance advice counted your heals as incoming magic damage. The filter checked the amount and the target but not the event type. With a lifetap like Drain Spirit, every point of magic damage you dealt healed you back and inflated incoming magic: that's why it asked for Mage Hunter in pure melee fights.
  • Advice fired on an 8% relative gain alone. It now also needs 1,200 damage in the window, 5 hits taken and 350 points of absolute gain, never fires out of combat, and the recommendation must hold for five seconds.
  • The zone was lost on restart after long sessions. Resuming re-reads the last 512 KB of the log, and if you'd been in the same zone for hours its entry line fell outside that window. Zone, stance and invocation are now saved alongside the read position.
  • Sides are recomputed for fights stored without them: groupmates count as allies for hitting your enemies, and stray mobs stop appearing on your side.
  • Another player's pet is no longer asked about, nor merged into yours.

---

Invitar a un café · Buy me a coffee

1.0.5

August 5, 2026

English

Enemy file. Pick an enemy in the filter and the summary opens its full dossier: estimated health, how it hits you, which of your spells it resists, what it drops and where you've met it. Health comes from the damage it took to drop it — the log gives no health values, so it's a measured bound rather than an official figure, and it says so.

What the wiki says, inside the app. Tactical notes for each mob are pulled from eqlwiki.com and shown next to your own data. On Lord Nagafen: "Fire and Magic Resists mean everything with this fellow". Cached for a month.

Resistances measured in your own fights. Every spell of yours an enemy resists is recorded by name. After a few fights you'll know what actually lands on each mob at your level with your gear — something no database can tell you.

Fixes

  • Stance advice counted your heals as incoming magic damage. The filter checked the amount and the target but not the event type. With a lifetap like Drain Spirit, every point of magic damage you dealt healed you back and inflated incoming magic: that's why it asked for Mage Hunter in pure melee fights.
  • Advice fired on an 8% relative gain alone. It now also needs 1,200 damage in the window, 5 hits taken and 350 points of absolute gain, never fires out of combat, and the recommendation must hold for five seconds.
  • Sides are recomputed for fights stored without them: groupmates count as allies for hitting your enemies, and stray mobs stop appearing on your side.
  • Another player's pet is no longer asked about, nor merged into yours.

---

Invitar a un café · Buy me a coffee

1.0.4

August 4, 2026

English

Update notice. The app checks whether a newer release exists and shows a bar: download, or skip that version. It only informs — nothing is downloaded or installed.

Range summary, expanded. Each combatant now opens on click with the full breakdown across every fight in the period: by ability, by damage type, by target, and who hit you. The merge-pets checkbox sits in the summary header.

Pets. They can be merged into a single row — in EQL they get a new name every summon, and two days of play leave six rows that are the same thing. The list of known pets is kept between sessions, so yesterday's history recognises them too.

Other players' pets. When a groupmate types /pet who leader, their pet is identified and shows as "Rufo (Notarino's pet)". It is never asked about and never merged into yours.

Interface complete in five languages. 244 strings were missing in French, German and Portuguese and fell back to English: stance and invocation notes, class names, the whole analysis, the wizard and the trigger editor.

Fixes

  • The time-range filter did nothing: fights were stored with the import time rather than the fight's own, so every range matched everything.
  • Grix says 'Yes, Master.' claimed the pet as yours. Said out loud it could belong to anyone in the group: it is now only proposed, and confirming it needs /pet who leader.
  • The summary rendered inside the narrow list column and jumped back to the top on scroll.
  • Overlay dps was measured across the whole session. It now goes per enemy killed, from your first hit until it drops, with last-10s and last-20s readings.

---

Invitar a un café · Buy me a coffee

1.0.3

August 4, 2026

English

Range summary. A button under the filters adds up every fight in the selected period into one breakdown: dps, damage, time in combat, kills, losses and healing. Each combatant's abilities are summed across all fights, and a per-enemy block expands to show who on your side contributed what. Dps is measured over seconds in combat, not over elapsed hours.

Loot. Every fight records what dropped, telling apart what you picked up, what auto-sold and what became an upgrade. Hovering an item shows its stat block in the game's own style, pulled from the EQL wiki and cached for a month. Clicking opens its wiki page.

Meaningful dps in the overlay. Measured per enemy killed, from your first hit until it drops, with the session average summing those windows. There are also last-10s and last-20s readings. Rows show damage rather than rate: across half an hour of session, dps over elapsed time means nothing.

Fixes

  • Zone and stance were lost on resume: priming ran after the reader started, so the first fights were born without a zone.
  • A mismatch between modules could break the data push and silently freeze both the window and the overlay.
  • Item icons were blocked by the window's content security policy.

---

Invitar a un café · Buy me a coffee

1.0.2

August 4, 2026

English

Persistent history. Fights are saved to disk and are there the moment you open the app, with no need to re-read the log. Filter by time range (2 h, 12 h, 24 h, 3 days, week, month) and by enemy.

Overlay rebuilt. Two columns, your side on the left and enemies on the right. Damage accumulates across the whole session and only resets when you press the reset button. Rows expand on click, and dead enemies sink to the bottom — the last twenty are kept.

Kill card. When an enemy goes down, a card shows for a few seconds who dealt how much, measured against that specific enemy rather than the whole fight.

Voice picker grouped by language.

Fixes

  • "Group dps" was adding the enemy's damage too. The two sides are now separate.
  • Your deaths are actually counted, and kept apart from enemies killed.
  • Loading history no longer fires voice alerts from old fights.
  • The gate warning only triggers on enemies, not on any player in the zone.
  • Enemy heals were counting yours as well.

---

Invitar a un café · Buy me a coffee

1.0.1

August 4, 2026

English

Full English translation: the advice panel, stance notes, class names and voice alerts.

Fixes

  • Stance advice is calculated on the selected fight, not on whichever one is live.
  • Your deaths are actually counted, and kept apart from enemies killed.
  • The pet-down alert only fires for your own pet.
  • Loading history no longer fires voice alerts from old fights.
  • Enemy heals were counting yours as well.

---

Invitar a un café · Buy me a coffee

1.0.0

August 4, 2026

English

First public release. Real-time combat parser for EverQuest Legends: damage meter, in-game overlay, stance advice, voice alerts and a post-fight breakdown.

Download EQL-Parse-SPAIN-1.0.0-setup.exe from the Assets section below.

Windows will say it doesn't recognise the app. That's normal for unsigned programs: More info → Run anyway.

Before using it, in game

  • Type /log on
  • Options → Filters: set everything damage-related to full detail, yours and other people's. Without this the game never writes your group's damage and the numbers come out as zero.

---

Invitar a un café · Buy me a coffee

All releases on GitHub