Dans Hollow Knight, les monstres que vous tuez avant d'obtenir le journal de Hunter comptent-ils dans le nombre de monstres requis pour débloquer l'entrée dudit ennemi ?
Réponse
Trop de publicités?Oui, mais je ne sais pas exactement à partir de quel point. En regardant le désassemblage et la recherche en mémoire de la section linéaire où la liste de tous les ennemis tués est stockée pendant l'exécution, on voit une image claire. Voici un petit extrait (il semble y avoir une quantité incroyable de monstres différents dans ce beau jeu) de cette section mémoire sur mon OSX qui exécute le jeu :
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
Comme vous pouvez le voir, je n'ai pas encore vraiment massacré tous les ennemis, et je n'ai pas encore trouvé tous les ennemis (comme la liste est linéaire dans la pile avec des sauts de 8 octets par ennemi et je peux rechercher le décalage d'octet à partir d'un nombre de tués connu, dans mon jeu actuel par exemple, je n'ai pas d'entrée de monstre correspondante dans l'interface utilisateur du jeu pour le compte de 0x1868C18C0
alors que j'en ai une pour 0x1868C18B8
y 0x1868C18C8
qui apparaissent juste après l'autre). En regardant le désassemblage du chemin de code lors de son exécution, le mieux que j'ai pu trouver est le suivant (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;
}
}
À en juger par la première et la dernière entrée de ma liste de monstres de l'interface utilisateur, il y a un saut de 8 octets de 132 entrées entre le nombre de tués le plus bas de la pile et le plus élevé, et j'ai à peine découvert 100 des monstres dans mon état actuel du jeu. J'ai vraiment hâte d'en découvrir plus ;).