diff options
Diffstat (limited to '')
| -rw-r--r-- | src/koopatlas/core.cpp | 5 | ||||
| -rw-r--r-- | src/koopatlas/core.h | 2 | ||||
| -rw-r--r-- | src/koopatlas/hud.cpp | 15 | ||||
| -rw-r--r-- | src/koopatlas/pathmanager.cpp | 24 | 
4 files changed, 31 insertions, 15 deletions
diff --git a/src/koopatlas/core.cpp b/src/koopatlas/core.cpp index c67226e..36e594a 100644 --- a/src/koopatlas/core.cpp +++ b/src/koopatlas/core.cpp @@ -181,6 +181,10 @@ bool WMInit_LoadResources2(void *ptr) {  		wm->mapPath = wm->getMapNameForIndex(wm->currentMapID);  		if (wm->mapPath == 0)  			wm->mapPath = wm->getMapNameForIndex(0); +		if (!strcmp(wm->mapPath, "/Maps/WSEL.kpbin")) +			wm->warpZoneHacks = true; +		else +			wm->warpZoneHacks = false;  		OSReport("Load map: %s\n", wm->mapPath);  	} @@ -1042,6 +1046,7 @@ int dScKoopatlas_c::getIndexForMapName(const char *name) {  void dScKoopatlas_c::showSaveWindow() { +	hud->hideAll();  	state.setState(&StateID_SaveOpen);  	YESNO_TYPE(yesNoWindow) = 1;  	YESNO_VISIBLE(yesNoWindow) = 1; diff --git a/src/koopatlas/core.h b/src/koopatlas/core.h index 788ad62..a55624d 100644 --- a/src/koopatlas/core.h +++ b/src/koopatlas/core.h @@ -115,6 +115,8 @@ class dScKoopatlas_c : public dScene_c {  		bool isFirstPlay;  		void startMusic(); +		bool warpZoneHacks; +  		u32 iterateMapList(u32(*callback)(u32,const char *,int,int), u32 userData, int *ptrIndex = 0);  		const char *getMapNameForIndex(int index);  		int getIndexForMapName(const char *name); diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp index 6166d64..157821b 100644 --- a/src/koopatlas/hud.cpp +++ b/src/koopatlas/hud.cpp @@ -1,8 +1,6 @@  #include "koopatlas/hud.h"  #include <newer.h> - -  dWMHud_c *dWMHud_c::instance = 0;  dWMHud_c *dWMHud_c::build() { @@ -109,7 +107,7 @@ int dWMHud_c::onCreate() {  		loadFooterInfo();  		SaveBlock *save = GetSaveFile()->GetBlock(-1); -		willShowFooter = (save->newerWorldName[0] != 0); +		willShowFooter = (save->newerWorldName[0] != 0) && (save->hudHintH != 2000);  		if (!dScKoopatlas_c::instance->pathManager.isMoving)  			enteredNode(); @@ -303,7 +301,7 @@ void dWMHud_c::loadHeaderInfo() {  	Header_Right->trans.x = totalWidth;  	SaveBlock *save = GetSaveFile()->GetBlock(-1); -	headerCol.colourise(save->hudHintH, save->hudHintS, save->hudHintL); +	headerCol.colourise(save->hudHintH%1000, save->hudHintS, save->hudHintL);  } @@ -325,20 +323,13 @@ void dWMHud_c::loadFooterInfo() {  	WorldName->colour1 = save->hudTextColours[0];  	WorldName->colour2 = save->hudTextColours[1]; -	footerCol.colourise(save->hudHintH, save->hudHintS, save->hudHintL); +	footerCol.colourise(save->hudHintH%1000, save->hudHintS, save->hudHintL);  	// figure out if stars are needed  	// Star 0: world is complete  	// Star 1: all exits complete  	// Star 2: all star coins obtained -	static int lastLevelIDs[] = { -		-1, /*no world*/ -		27, 27, 27, 27, 27, 27, 27, 25, -		-1, /*no end level in W9*/ -		24, 24, 24, 3, 5 -	}; -  	bool starVisibility[3];  	starVisibility[0] = false; diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp index 7f4b754..435c6f1 100644 --- a/src/koopatlas/pathmanager.cpp +++ b/src/koopatlas/pathmanager.cpp @@ -753,7 +753,7 @@ void dWMPathManager_c::moveThroughPath(int pressedDir) {  			// Quick check: do we *actually* need to stop on this node?  			// If it's a junction with more than two exits, but only two are open,  			// take the opposite open one -			if (to->getExitCount() > 2 && to->getAvailableExitCount() == 2) +			if (!dScKoopatlas_c::instance->warpZoneHacks && to->getExitCount() > 2 && to->getAvailableExitCount() == 2)  				reallyStop = false;  			else  				reallyStop = true; @@ -791,8 +791,26 @@ void dWMPathManager_c::moveThroughPath(int pressedDir) {  				save->titleScreenWorld = world->titleScreenWorld;  				save->titleScreenLevel = world->titleScreenLevel; -				if (visiblyChange && dWMHud_c::instance) -					dWMHud_c::instance->showFooter(); +				bool wzHack = false; +				if (dScKoopatlas_c::instance->warpZoneHacks) { +					save->hudHintH += 1000; + +					if (world->worldID > 0) { +						dLevelInfo_c *linfo = &dLevelInfo_c::s_info; +						dLevelInfo_c::entry_s *lastLevel = linfo->searchByDisplayNum(world->worldID-1, lastLevelIDs[world->worldID-1]); +						if (lastLevel) { +							wzHack = !(save->GetLevelCondition(lastLevel->worldSlot,lastLevel->levelSlot) & COND_NORMAL); +						} +					} +				} + +				if (wzHack) { +					save->hudHintH = 2000; +					dWMHud_c::instance->hideFooter(); +				} else { +					if (visiblyChange && dWMHud_c::instance) +						dWMHud_c::instance->showFooter(); +				}  				dKPMusic::play(world->trackID);  | 
