Hollow Knight – Do Monster Kills Before Getting the Journal Count?

hollow-knight

In Hollow Knight, do the monster kills you do before you get Hunter's journal count to the required number of kills to unlock said enemy's entry?

Best Answer

Yes they do, although it's unclear to me from which point on exactly. Looking at the disassembly and memory search of the linear section where the list of all enemy kills is stored during runtime shows a clear picture. Here is an small excerpt (there seems to be an unbelievable amount of different monsters in this lovely game) of this memory section on my OSX running the game:

rw- 0x1868C1800 0
rw- 0x1868C1808 0
rw- 0x1868C1810 15
rw- 0x1868C1818 0
rw- 0x1868C1820 0
rw- 0x1868C1828 0
rw- 0x1868C1830 18
rw- 0x1868C1838 1
rw- 0x1868C1840 0
rw- 0x1868C1848 15
rw- 0x1868C1850 0
rw- 0x1868C1858 0
rw- 0x1868C1860 0
rw- 0x1868C1868 0
rw- 0x1868C1870 0
rw- 0x1868C1878 3
rw- 0x1868C1880 20
rw- 0x1868C1888 0
rw- 0x1868C1890 0
rw- 0x1868C1898 10
rw- 0x1868C18A0 17
rw- 0x1868C18A8 1
rw- 0x1868C18B0 20
rw- 0x1868C18B8 0
rw- 0x1868C18C0 35
rw- 0x1868C18C8 10
rw- 0x1868C18D0 0
rw- 0x1868C18D8 0
rw- 0x1868C18E0 10
rw- 0x1868C18E8 10
rw- 0x1868C18F0 0
rw- 0x1868C18F8 1
rw- 0x1868C1900 0

As you can see I haven't really slaughtered all enemies yet, let alone found all foes (as the list is linear in the stack with 8 byte jumps per enemy and I can look up the byte offset from a known kill count, in my current game for example I have no corresponding monster entry in the game UI for the count of 0x1868C18C0, while I do have one for 0x1868C18B8 and 0x1868C18C8 showing up right after each other). Looking at the disassembly of the code-path while executed, the best I could come up with is the following (pseudo code):

class Enemy {
  Enemy e          { uponInstantiation := Game.generateObject() }
  int maxKillCount { uponInstantiation :=    15 }
  int curKillCount { uponInstantiation :=     0 }
  boolean inUIList { uponInstantiation := false }

  function onEnemyDies() {
    e.incKillCount()
    if (Game.getPlayer().hasHuntersJournal()) {
      if (!e.inUIList) {
        e.inUIList = true
      }
      if (e.curKillCount < e.maxKillCount) {
        e.showEnemyInUI(e.maxKillCount - e.curKillCount)
      } else {
        e.showEnemyTextInUIAfterKillCountEqualsMax()
      }
    }
  }

  function incKillCount() {
    e.curKillCount < e.maxKillCount ? e.curKillCount++ : e.maxKillCount;
  }
}

Judging from the first and last entry in my UI list of monsters, there is a clean 8 byte jump span of 132 entries from lowest found kill count in the stack to the highest one, and I have barely discovered 100 of the monsters in my current state of the game. I'm really looking forward to discovering more ;).