summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/fileselect.S5
-rw-r--r--src/koopatlas/pathmanager.cpp17
2 files changed, 18 insertions, 4 deletions
diff --git a/src/fileselect.S b/src/fileselect.S
index 5847201..25b1805 100644
--- a/src/fileselect.S
+++ b/src/fileselect.S
@@ -160,6 +160,11 @@ chosenWName:
li r5, 0
bl InsertIntIntoTextBox1
+.extern ResetAllCompletionCandidates__Fv
+.extern ClearOldPathAvailabilityData__Fv
+ bl ResetAllCompletionCandidates__Fv
+ bl ClearOldPathAvailabilityData__Fv
+
lwz r22, 0x24(r1)
lwz r21, 0x28(r1)
lwz r20, 0x2C(r1)
diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp
index ad39c69..697b9fb 100644
--- a/src/koopatlas/pathmanager.cpp
+++ b/src/koopatlas/pathmanager.cpp
@@ -18,6 +18,7 @@ bool CanFinishAllCoins = false;
bool CanFinishAllExits = false;
bool CanFinishEverything = false;
void ResetAllCompletionCandidates() {
+ // This is called by File Select, btw
MaybeFinishingLevel[0] = 0xFF;
LastLevelPlayed[0] = 0xFF;
CanFinishCoins = false;
@@ -273,15 +274,23 @@ void dWMPathManager_c::setup() {
static u8 *PathAvailabilityData = 0;
static u8 *NodeAvailabilityData = 0;
-dWMPathManager_c::~dWMPathManager_c() {
- bool entering8_25 = (MaybeFinishingLevel[0] == 7) && (MaybeFinishingLevel[1] == 24);
- if (PathAvailabilityData && !isEnteringLevel && !entering8_25) {
+void ClearOldPathAvailabilityData() {
+ // This is called by File Select
+ if (PathAvailabilityData) {
delete[] PathAvailabilityData;
PathAvailabilityData = 0;
-
+ }
+ if (NodeAvailabilityData) {
delete[] NodeAvailabilityData;
NodeAvailabilityData = 0;
}
+}
+
+dWMPathManager_c::~dWMPathManager_c() {
+ bool entering8_25 = (MaybeFinishingLevel[0] == 7) && (MaybeFinishingLevel[1] == 24);
+ if (!isEnteringLevel && !entering8_25) {
+ ClearOldPathAvailabilityData();
+ }
if (isEnteringLevel) {
ResetAllCompletionCandidates();