AlexKnauth / hollowknight-autosplit-wasm

A cross-platform autosplitter for Hollow Knight that supports Windows, Mac, and Linux
MIT License
4 stars 0 forks source link

Tricky Ghost Splits #57

Closed AlexKnauth closed 5 months ago

AlexKnauth commented 5 months ago
AlexKnauth commented 5 months ago

Ideas from cerpin and slaurent about Vespa:

a hacky fix for the vespa one: check knight coords a timer after hive knight death both are gross

it looks like there's a box around the hiveblood pickup you can enter and leave to trigger vespa a timer could work tbh but would be jank soooo

On patches without Hive Knight, it can just split when essence increments while in Hive_05.

On patches with Hive Knight... I should test how much time can pass between when the player data shows Hive Knight killed, and getting Blessence from Hive Knight. If it's instant, then the "timer" solution could just be checking that at least one tick has passed with Hive Knight dead, and then check for essence incrementing while in Hive_05. I should be able to test that using the EssenceAlways mod.

AlexKnauth commented 5 months ago

It looks like it is pretty instant, as in

  ---
PlayerData dreamOrbs: 903
PlayerData killedHiveKnight: true
  ---
PlayerData dreamOrbs: 904
  ---
AlexKnauth commented 5 months ago

The gladeGhostsKilled field doesn't seem to be working though. With the dream tree there in addition to the ghosts, how else can it be done properly?

AlexKnauth commented 5 months ago

In the Online Hollow Knight Save Editor here: https://bloodorca.github.io/hollow/

{
  ...
  "sceneData": {
    ...
    "persistentBoolItems": [
      ...
      {
        "id": "Ghost revek",
        "sceneName": "RestingGrounds_08",
        "activated": true,
        "semiPersistent": false
      },
      ...
    ],
    ...
  }
}

Is there a way I can access that?

AlexKnauth commented 5 months ago

The possibility of using Scene Data for Revek was already looked at by cerpin and slaurent:

scenedata only updates once you leave the scene completely, aka transition

So I can't use this scene data for Revek directly. I might be able to use it to determine whether every ghost except Revek has been dream nailed on previous visits to the scene, and then just count any essence after that while in the scene as Revek.

That technically would wrongly split it when a runner dream nails all the ghosts except Revek, leaves, re-enters, and then goes past a Revek ready to be dream nailed, activates the dream tree, and then gets essence from the tree instead, but, I think that's the best I can do.

AlexKnauth commented 5 months ago

Video by kamakiller: https://www.youtube.com/@kamakiller, karina%: https://www.youtube.com/watch?v=LbIiqaISSQY, me when karina: https://www.youtube.com/watch?v=4vjoArmgbDk

Apparently Karina is not like the other Glade Ghosts. So given that, what should the OnObtainGhostRevek split do if someone Dream Nails all the ghosts in the glade except Karina, exits the room, and then Dream Nails Revek? Should it only split when all Glade Ghosts have been Dream Nailed including both Revek and Karina?

AlexKnauth commented 5 months ago

At least Dream Nailing Karina alerts Revek so he starts attacking, so she's not completely separate.

AlexKnauth commented 5 months ago

But Dream Nailing all Glade Ghosts except Karina and Revek, and then Dream Nailing Karina, does not alert Revek to attack.

AlexKnauth commented 5 months ago

Idea: track both the number of glade ghosts killed including Karina, and the number of glade ghosts killed excluding Karina. If the number excluding Karina is 17, then Revek is obtainable.

But if the number of glade ghosts killed including Karina is only 17, then it shouldn't split until 2 more essence have been obtained in the Glade, while if the number including Karina is 18, then it can split on 1 more essence obtained in the Glade.