First review

This commit is contained in:
Narr the Reg 2026-04-21 19:00:15 -06:00
parent 0da5b54368
commit ed10e891a9
2 changed files with 13 additions and 6 deletions

View file

@ -10,7 +10,7 @@
#include "System/GameDataFunction.h"
#include "Util/StageLayoutFunction.h"
QuestInfo::QuestInfo() {}
QuestInfo::QuestInfo() = default;
void QuestInfo::clear() {
mQuestNo = -1;
@ -66,6 +66,7 @@ void QuestInfo::init(const al::PlacementInfo& placementInfo, al::SceneObjHolder*
}
rs::makeMessageLabel(&mScenarioName, placementInfo, "ScenarioName");
// NOTE: variable format string
mStageName.format(rs::getPlacementStageName(this, placementInfo));
}
@ -78,6 +79,7 @@ void QuestInfo::setLabel(const char* label) {
}
void QuestInfo::copy(const QuestInfo* quest) {
// BUG: does not copy `mIsInvalid
mTrans.set(quest->getTrans());
mQuestNo = quest->getQuestNo();
mIsMainQuest = quest->isMainQuest();
@ -90,7 +92,8 @@ void QuestInfo::copy(const QuestInfo* quest) {
}
void QuestInfo::end() {
mIsInvalid = !GameDataFunction::isWorldCity(this) || mQuestNo != 8;
// NOTE: special handling to story moon in Metro's festival
mIsInvalid = !(GameDataFunction::isWorldCity(this) && mQuestNo == 8);
}
bool QuestInfo::isEqual(const QuestInfo* quest) const {

View file

@ -54,7 +54,7 @@ void QuestInfoHolder::initAfterPlacementQuestObj(s32 questNo) {
foundQuestNo = questNo;
if (currentQuestNo == i && mQuests[j].isMainQuest()) {
if (hasMainQuest | mQuests[j].getScenarioName().isEmpty())
if (mQuests[j].getScenarioName().isEmpty() || hasMainQuest)
mIsMainQuest[i] = true;
else
hasMainQuest = true;
@ -67,6 +67,7 @@ void QuestInfoHolder::initAfterPlacementQuestObj(s32 questNo) {
else
clearMainQuest();
// NOTE: special case for Metro festival's story moon
if (GameDataFunction::isWorldCity(mQuests) && mActiveMainQuestNo == 8 &&
GameDataFunction::getScenarioNoPlacement(mQuests) != 7 &&
GameDataFunction::getScenarioNoPlacement(mQuests) != 11) {
@ -112,7 +113,7 @@ QuestInfo* QuestInfoHolder::registerQuestInfo(const QuestInfo* quest) {
}
void QuestInfoHolder::validateQuest(const QuestInfo* quest) {
// BUG: No bounds checking. Will soflock if entry is not found.
// BUG: No bounds checking. Will softlock if entry is not found.
for (s32 i = 0; true; i++) {
if (mQuests[i].isEqual(quest)) {
mQuests[i].setInvalid(false);
@ -297,6 +298,7 @@ void validateQuest(const QuestInfo* quest) {
void invalidateQuest(const QuestInfo* quest) {
if (!quest)
return;
getQuestInfoHolder(quest)->invalidateQuest(quest);
}
@ -310,9 +312,11 @@ s32 getActiveQuestNum(const al::IUseSceneObjHolder* holder) {
s32 getActiveQuestNumForMap(const al::IUseSceneObjHolder* holder) {
s32 questNum = getActiveQuestNum(holder);
bool isWorldSnow = GameDataFunction::isWorldSnow(holder);
return (1 < questNum) & isWorldSnow ? 1 : questNum;
if (GameDataFunction::isWorldSnow(holder))
return sead::Mathi::clampMax(questNum, 1);
return questNum;
}
bool isActiveQuestAllEqualNo(const al::IUseSceneObjHolder* holder) {