[RANDO]: Stop spawn overrides from pretending to be jiggies - #358
Conversation
|
My concern here is why is this all of a sudden an issue? What changed after the Rando PR that causes this crash to occur in the first place? |
Decomp pass 5 converted a lot of code out into structs for actors and updates. I do not think there is any regression, but a change in code behavior. I will see if I can confirm a specific trace for this instance. |
|
All good, just curiosity in case this is something that we should have caught at some point during Rando development haha |
|
If during your testing whatever was shot out of the cannon happened to be a jiggy, it would not go through this crash path. That's a possibility too isn't it? |
|
In true Rando testing fashion, we shot EVERYTHING out of that cannon. It's oddly satisfying |
|
Well, I'll have to walk back my original theory for why this happened. It's true that Problem is, the substituted note doesn't touch Will keep digging. |
Seen in TTC Lobby after hitting the witch switch for the cannon jiggy and then transitioning to that map. In short,
func_803333DCwrites the jiggy id into the overridden actor'slocaland installsjiggy_freeon it--because it's originally a jiggy. This in turn corrupts the overridden actor, who has its own code to run. It reuseslocalfor its own state, so whenjiggy_freeruns,chjiggy_getJiggyIdreads back garbage. That meansjiggylist_list[garbage]happens, and we get an OOB indirect call and an OOBmarker = 0write. This corrupts the heap and crashes.New VB:
VB_OVERRIDE_JIGGY_ACTOR_LINKexists for the express purpose of early returning when the overridden spawn is not a jiggy.