Skip to content

[Vanilla Bugs] Broken quest sequence callbacks #229

Description

@Necrolis

After noticing an issue in ACT1Q2_SeqCallback, I did a full audit of all the quest sequence callbacks, and noticed what seems to be a couple of different bugs:

ACT1Q1_SeqCallback 0x6FC98330 Bug(?): pQuest->pfSeqFilter(pQuest)
ACT1Q2_SeqCallback 0x6FC98DD0 Bug: pQuest->pfSeqFilter(pQuest), but verifies pQuestData->pfSeqFilter
ACT1Q3_SeqCallback 0x6FC99B80 Bug: pQuest->pfSeqFilter(pQuest), but verifies pQuestData->pfSeqFilter
ACT1Q4_SeqCallback 0x6FC9BFF0 Bug: pQuest->pfSeqFilter(pQuest), but verifies pQuestData->pfSeqFilter
ACT1Q5_SeqCallback 0x6FC9D970 Bug: pQuest->pfSeqFilter(pQuest), but verifies pQuestData->pfSeqFilter
ACT1Q6_SeqCallback 0x6FC9EE70 N/A

ACT2Q1_SeqCallback 0x6FC9FFA0 pQuestData->pfSeqFilter(pQuest)
ACT2Q3_SeqCallback 0x6FCA1CA0 pQuestData->pfSeqFilter(pQuest)
ACT2Q4_SeqCallback 0x6FCA3160 pQuestData->pfSeqFilter(pQuest)
ACT2Q6_SeqCallback 0x6FCA5880 pQuestData->pfSeqFilter(pQuest)

ACT3Q1_SeqCallback 0x6FCA79A0 pQuestData->pfSeqFilter(pQuest)
ACT3Q2_SeqCallback 0x6FCA8360 pQuestData->pfSeqFilter(pQuest)
ACT3Q3_SeqCallback 0x6FCA9990 pQuestData->pfSeqFilter(pQuest)
ACT3Q4_SeqCallback 0x6FCAAB10 Bug: Verifies pQuestData->pfSeqFilter but invokes pQuestData17->pfSeqFilter(pQuestData17)
ACT3Q5_SeqCallback 0x6FCABB50 pQuestData->pfSeqFilter(pQuest)
ACT3Q6_SeqCallback 0x6FCACF50 N/A

ACT4Q1_SeqCallback 0x6FCADA00 Bug, Inverted: verifies pQuest->pfSeqFilter but invokes pQuestData->pfSeqFilter(pQuest), should verify pQuestData->pfSeqFilter
ACT4Q2_SeqCallback 0x6FCAE750 N/A
ACT4Q3_SeqCallback 0x6FCB05C0 Bug, Inverted: verifies pQuest->pfSeqFilter but invokes pQuestData->pfSeqFilter(pQuest), should verify pQuestData->pfSeqFilter

ACT5Q1_SeqCallback 0x6FCB1BA0 pQuestData->pfSeqFilter(pQuest)
ACT5Q2_SeqCallback 0x6FCB2A20 pQuestData->pfSeqFilter(pQuest)
ACT5Q3_SeqCallback 0x6FCB3A90 pQuestData->pfSeqFilter(pQuest)
ACT5Q4_SeqCallback 0x6FCB5EE0 pQuestData->pfSeqFilter(pQuest)
ACT5Q5_SeqCallback 0x6FCB79F0 pQuestData->pfSeqFilter(pQuest)
ACT5Q6_SeqCallback 0x6FCB8FD0 N/A

First and foremost the pattern (and logical usage) should be pQuestData->pfSeqFilter(pQuest) however all the quests in act 1 seem to invoke their sequence callback on themselves; this is very likely a bug but could also be a weird change to architecture.

However the definite bugs are the functions that call IsBadCodePtr (which should really be a nullptr check given the deprecation of IsBadXXXPtr years ago, as its for Win16 compat...) on one quest object and then invoke the callback on a different quest object.

Metadata

Metadata

Assignees

No one assigned

    Labels

    vanilla-bugA bug that was already present in the original game

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions