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.
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: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 ofIsBadXXXPtryears ago, as its for Win16 compat...) on one quest object and then invoke the callback on a different quest object.