From 014f3668eb47b1576bdc182b1db00417f9938cf1 Mon Sep 17 00:00:00 2001 From: Treeki Date: Thu, 27 Sep 2012 00:51:43 +0200 Subject: added untested support for world change nodes --- src/koopatlas/hud.cpp | 50 ++++++++++++++++++++++++++++++++++++------- src/koopatlas/hud.h | 9 ++++++-- src/koopatlas/mapdata.cpp | 16 ++++++++++++++ src/koopatlas/mapdata.h | 17 ++++++++++++++- src/koopatlas/pathmanager.cpp | 32 +++++++++++++++++++++++++-- 5 files changed, 111 insertions(+), 13 deletions(-) (limited to 'src/koopatlas') diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp index c9124d2..4f4ce2f 100644 --- a/src/koopatlas/hud.cpp +++ b/src/koopatlas/hud.cpp @@ -84,6 +84,9 @@ int dWMHud_c::onCreate() { layoutLoaded = true; willShowHeader = false; + willShowFooter = false; + + loadFooterInfo(); if (!dScKoopatlas_c::instance->pathManager.isMoving) enteredNode(); @@ -110,7 +113,13 @@ int dWMHud_c::onExecute() { if (willShowHeader && (!(layout.isAnimOn(SHOW_HEADER)))) { willShowHeader = false; loadHeaderInfo(); - playShowHeaderAnim(); + playShowAnim(SHOW_HEADER); + } + + if (willShowFooter && (!(layout.isAnimOn(SHOW_FOOTER)))) { + willShowFooter = false; + loadFooterInfo(); + playShowAnim(SHOW_FOOTER); } updatePressableButtonThingies(); @@ -134,19 +143,19 @@ int dWMHud_c::onDraw() { -void dWMHud_c::playShowHeaderAnim() { +void dWMHud_c::playShowAnim(int id) { if (!this || !this->layoutLoaded) return; - layout.enableNonLoopAnim(SHOW_HEADER); + layout.enableNonLoopAnim(id); } -void dWMHud_c::playHideHeaderAnim() { +void dWMHud_c::playHideAnim(int id) { if (!this || !this->layoutLoaded) return; - if (!layout.isAnimOn(SHOW_HEADER)) { - layout.enableNonLoopAnim(SHOW_HEADER, true); + if (!layout.isAnimOn(id)) { + layout.enableNonLoopAnim(id, true); } - layout.grpHandlers[SHOW_HEADER].frameCtrl.flags = 3; // NO_LOOP | REVERSE + layout.grpHandlers[id].frameCtrl.flags = 3; // NO_LOOP | REVERSE } @@ -222,6 +231,26 @@ void dWMHud_c::loadHeaderInfo() { } +void dWMHud_c::loadFooterInfo() { + SaveBlock *save = GetSaveFile()->GetBlock(-1); + + wchar_t convertedWorldName[36]; + int i; + for (i = 0; i < 36; i++) { + convertedWorldName[i] = save->newerWorldName[i]; + if (convertedWorldName[i] == 0) + break; + } + convertedWorldName[35] = 0; + + WorldName->SetString(convertedWorldName); + WorldNameS->SetString(convertedWorldName); + + WorldName->colour1 = save->hudTextColour[0]; + WorldName->colour2 = save->hudTextColour[1]; +} + + void dWMHud_c::enteredNode(dKPNode_s *node) { if (node == 0) @@ -240,12 +269,17 @@ void dWMHud_c::leftNode() { if ((layout.isAnimOn(SHOW_HEADER) && (layout.grpHandlers[SHOW_HEADER].frameCtrl.flags & 2)) || (!layout.isAnimOn(SHOW_HEADER))) { // currently being shown, OR fully shown already - playHideHeaderAnim(); + playHideAnim(SHOW_HEADER); } } } +void dWMHud_c::hideAndShowFooter() { + willShowFooter = true; + playHideAnim(SHOW_FOOTER); +} + void dWMHud_c::setupLives() { static const int LogicalPlayerIDs[] = {0,1,3,2}; diff --git a/src/koopatlas/hud.h b/src/koopatlas/hud.h index e507aea..deac84f 100644 --- a/src/koopatlas/hud.h +++ b/src/koopatlas/hud.h @@ -21,11 +21,13 @@ class dWMHud_c : public dBase_c { void enteredNode(dKPNode_s *node = 0); void leftNode(); + void hideAndShowFooter(); + void setupLives(); private: - void playShowHeaderAnim(); - void playHideHeaderAnim(); + void playShowAnim(int id); + void playHideAnim(int id); void loadHeaderInfo(); bool willShowHeader; @@ -34,6 +36,9 @@ class dWMHud_c : public dBase_c { int displayedControllerType; void updatePressableButtonThingies(); + void loadFooterInfo(); + bool willShowFooter; + nw4r::lyt::Pane *N_IconPosXP_00[4]; diff --git a/src/koopatlas/mapdata.cpp b/src/koopatlas/mapdata.cpp index 52a7937..29c6a23 100644 --- a/src/koopatlas/mapdata.cpp +++ b/src/koopatlas/mapdata.cpp @@ -205,6 +205,12 @@ void dKPMapData_c::fixup() { fixRef(data->unlockData); fixRef(data->sectors); fixRef(data->backgroundName); + if (data->version >= 2) { + fixRef(data->worlds); + for (int i = 0; i < data->worldCount; i++) { + fixRef(data->worlds[i].name); + } + } for (int iLayer = 0; iLayer < data->layerCount; iLayer++) { dKPLayer_s *layer = fixRef(data->layers[iLayer]); @@ -280,6 +286,16 @@ void dKPMapData_c::fixup() { } +const dKPWorldDef_s *dKPMapData_c::findWorldDef(int id) { + for (int i = 0; i < data->worldCount; i++) { + if (data->worlds[i].key == id) + return &data->worlds[i]; + } + + return 0; +} + + /****************************************************************************** * Generic Layer ******************************************************************************/ diff --git a/src/koopatlas/mapdata.h b/src/koopatlas/mapdata.h index bc0c599..f7194ef 100644 --- a/src/koopatlas/mapdata.h +++ b/src/koopatlas/mapdata.h @@ -53,7 +53,7 @@ struct dKPPath_s; struct dKPNode_s { enum NodeTypes { - PASS_THROUGH, STOP, LEVEL, CHANGE + PASS_THROUGH, STOP, LEVEL, CHANGE, WORLD_CHANGE }; short x, y; @@ -79,6 +79,7 @@ struct dKPNode_s { union { struct { u8 levelNumber[2]; bool hasSecret; }; struct { const char *destMap; u8 thisID, foreignID, transition, _; }; + struct { u8 worldID, __[3]; }; }; dKPPath_s *getAnyExit() { @@ -187,6 +188,15 @@ struct dKPLayer_s { int findNodeID(dKPNode_s *node); }; +struct dKPWorldDef_s { + const char *name; + GXColor fsTextColours[2]; + GXColor fsHintColours[2]; + GXColor hudTextColours[2]; + s16 hudHintH, hudHintS, hudHintL; + u8 key, trackID; +}; + struct dKPMapFile_s { u32 magic; int version; @@ -202,6 +212,9 @@ struct dKPMapFile_s { dKPLayer_s::sector_s *sectors; const char *backgroundName; + + dKPWorldDef_s *worlds; + int worldCount; }; class dKPMapData_c { @@ -253,6 +266,8 @@ class dKPMapData_c { dKPNodeExtra_c *levelNodeExtraArray; + const dKPWorldDef_s *findWorldDef(int id) const; + dKPMapData_c(); bool load(const char *filename); ~dKPMapData_c(); diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp index e42246e..2401e04 100644 --- a/src/koopatlas/pathmanager.cpp +++ b/src/koopatlas/pathmanager.cpp @@ -573,8 +573,8 @@ void dWMPathManager_c::moveThroughPath() { if (to->type == dKPNode_s::LEVEL) { // Always stop on levels reallyStop = true; - } else if (to->type == dKPNode_s::CHANGE) { - // Never stop on entrances + } else if (to->type == dKPNode_s::CHANGE || to->type == dKPNode_s::WORLD_CHANGE) { + // Never stop on entrances or on world changes reallyStop = false; } else if (to->type == dKPNode_s::PASS_THROUGH) { // If there's only one exit here, then stop even though @@ -590,6 +590,34 @@ void dWMPathManager_c::moveThroughPath() { reallyStop = true; } + if (to->type == dKPNode_s::WORLD_CHANGE) { + // Set the current world info + SaveBlock *save = GetSaveFile()->GetBlock(-1); + + OSReport("Activating world change %d\n", to->worldID); + dKPWorldDef_s *world = dScKoopatlas_c::instance->mapData.findWorldDef(to->worldID); + if (world) { + OSReport("Found!\n"); + strncpy(save->newerWorldName, world->name, 36); + save->newerWorldName[35] = 0; + save->currentMapMusic = world->trackID; + + for (int i = 0; i < 2; i++) { + save->fsTextColours[i] = world->fsTextColours[i]; + save->fsHintColours[i] = world->fsHintColours[i]; + save->hudTextColours[i] = world->hudTextColours[i]; + } + + save->hudHintH = world->hudHintH; + save->hudHintS = world->hudHintS; + save->hudHintL = world->hudHintL; + + dWMHud_c::instance->hideAndShowFooter(); + } else { + OSReport("Not found!\n"); + } + } + if (to->type == dKPNode_s::CHANGE) { // Go to another map -- cgit v1.2.3 From 411c5a8e210b5cbca330a5438e2406dbe1ffecab Mon Sep 17 00:00:00 2001 From: Treeki Date: Thu, 27 Sep 2012 04:40:34 +0200 Subject: made world changes work, and HUD colourising and other fun things --- src/koopatlas/hud.cpp | 158 ++++++++++++++++++++++++++++++++++++++++-- src/koopatlas/hud.h | 21 +++++- src/koopatlas/mapdata.cpp | 2 +- src/koopatlas/pathmanager.cpp | 11 +-- 4 files changed, 177 insertions(+), 15 deletions(-) (limited to 'src/koopatlas') diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp index 4f4ce2f..84329bf 100644 --- a/src/koopatlas/hud.cpp +++ b/src/koopatlas/hud.cpp @@ -1,5 +1,146 @@ #include "koopatlas/hud.h" + +dTexMapColouriser_c::dTexMapColouriser_c() { + texmap = 0; + original = 0; + mine = 0; +} + +void *EGG__Heap__alloc(unsigned long size, int unk, void *heap); +void EGG__Heap__free(void *ptr, void *heap); + +dTexMapColouriser_c::~dTexMapColouriser_c() { + resetAndClear(); +} + +void dTexMapColouriser_c::resetAndClear() { + texmap = 0; + if (mine) { + EGG__Heap__free(mine, 0); + mine = 0; + } +} + +void dTexMapColouriser_c::setTexMap(nw4r::lyt::TexMap *tm) { + OSReport("Colourising TexMap: %p (w:%d h:%d)\n", tm, tm->width, tm->height); + if (texmap) + resetAndClear(); + + if (tm->mBits.textureFormat != GX_TF_IA8) { + OSReport("Warning: Trying to colourise image whose format is %d not GX_TF_IA8\n", tm->mBits.textureFormat); + } + + texmap = tm; + original = (u16*)tm->image; + mine = (u16*)EGG__Heap__alloc(tm->width * tm->height * 4, 0x20, mHeap::gameHeaps[2]); + tm->image = mine; + tm->mBits.textureFormat = GX_TF_RGBA8; +} + +void dTexMapColouriser_c::applyAlso(nw4r::lyt::TexMap *tm) { + if (!texmap) { + setTexMap(tm); + } else { + tm->image = mine; + tm->mBits.textureFormat = GX_TF_RGBA8; + } +} + +inline static float hslValue(float n1, float n2, float hue) { + if (hue > 6.0f) + hue -= 6.0f; + else if (hue < 0.0f) + hue += 6.0f; + + if (hue < 1.0f) + return n1 + (n1 - n1) * hue; + else if (hue < 3.0f) + return n2; + else if (hue < 4.0f) + return n1 + (n2 - n1) * (4.0f - hue); + else + return n1; +} + +void dTexMapColouriser_c::colourise(int h, int s, int l) { + if (!mine) + return; + + int width = texmap->width, height = texmap->height; + int texelW = width / 4, texelH = height / 4; + + u16 *source = original, *dest = mine; + + float hueParam = h / 360.0f; + float satParam = s / 100.0f; + float lumParam = l / 100.0f; + + for (int texelY = 0; texelY < texelH; texelY++) { + for (int texelX = 0; texelX < texelW; texelX++) { + for (int y = 0; y < 4; y++) { + for (int x = 0; x < 4; x++) { + u8 intensity = *source & 0xFF; + u8 alpha = *source >> 8; + + u8 r, g, b; + + // This is a hack + if (alpha < 250) { + r = g = b = intensity; + } else { + // converting from GIMP's colourise code... + // h and s are always the same + // l is the only thing we need to touch: + // we get the luminance from the source pixel + // (which, conveniently, is the intensity) + // manipulate it using the passed l and then + // convert the whole thing to RGB + + float lum = intensity / 255.0f; + + // manipulate it + if (l > 0) { + lum = lum * (1.0f - lumParam); + lum += (1.0f - (1.0f - lumParam)); + } else if (l < 0) { + lum = lum * (lumParam + 1.0f); + } + + // make it RGB + + if (s == 0) { + r = g = b = lum*255.0f; + } else { + float m1, m2; + if (lum <= 0.5f) + m2 = lum * (1.0f + satParam); + else + m2 = lum + satParam - lum * satParam; + + m1 = 2.0f * lum - m2; + + r = hslValue(m1, m2, hueParam * 6.0f + 2.0) * 255.0f; + g = hslValue(m1, m2, hueParam * 6.0f) * 255.0f; + b = hslValue(m1, m2, hueParam * 6.0f - 2.0) * 255.0f; + } + } + + // now write it + dest[0] = (alpha<<8)|r; + dest[16] = (g<<8)|b; + + source++; + dest++; + } + } + + dest += 16; + } + } +} + + dWMHud_c *dWMHud_c::instance = 0; dWMHud_c *dWMHud_c::build() { @@ -63,13 +204,13 @@ int dWMHud_c::onCreate() { layout.getPanes(paneNames, &N_IconPosXP_00[0], 4); static const char *pictureNames[] = { - "Header_Centre", "Header_Right", + "Header_Centre", "Header_Right", "Footer", "NormalExitFlag", "SecretExitFlag", "StarCoinOn0", "StarCoinOn1", "StarCoinOn2", "P_marioFace_00", "P_luigiFace_00", "P_BkinoFace_00", "P_YkinoFace_00" }; - layout.getPictures(pictureNames, &Header_Centre, 11); + layout.getPictures(pictureNames, &Header_Centre, 12); static const char *textBoxNames[] = { "LevelName", "LevelNameS", @@ -81,6 +222,10 @@ int dWMHud_c::onCreate() { }; layout.getTextBoxes(textBoxNames, &LevelName, 11); + headerCol.setTexMap(Header_Right->material->texMaps); + headerCol.applyAlso(Header_Centre->material->texMaps); + footerCol.setTexMap(Footer->material->texMaps); + layoutLoaded = true; willShowHeader = false; @@ -228,6 +373,9 @@ void dWMHud_c::loadHeaderInfo() { totalWidth = 270.0f; Header_Centre->size.x = totalWidth; Header_Right->trans.x = totalWidth; + + SaveBlock *save = GetSaveFile()->GetBlock(-1); + headerCol.colourise(save->hudHintH, save->hudHintS, save->hudHintL); } @@ -246,8 +394,10 @@ void dWMHud_c::loadFooterInfo() { WorldName->SetString(convertedWorldName); WorldNameS->SetString(convertedWorldName); - WorldName->colour1 = save->hudTextColour[0]; - WorldName->colour2 = save->hudTextColour[1]; + WorldName->colour1 = save->hudTextColours[0]; + WorldName->colour2 = save->hudTextColours[1]; + + footerCol.colourise(save->hudHintH, save->hudHintS, save->hudHintL); } diff --git a/src/koopatlas/hud.h b/src/koopatlas/hud.h index deac84f..c0079af 100644 --- a/src/koopatlas/hud.h +++ b/src/koopatlas/hud.h @@ -3,6 +3,23 @@ #include "koopatlas/core.h" +// Colourises an IA8 texture +class dTexMapColouriser_c { + public: + dTexMapColouriser_c(); + ~dTexMapColouriser_c(); + + void resetAndClear(); + void setTexMap(nw4r::lyt::TexMap *tm); + void applyAlso(nw4r::lyt::TexMap *tm); + void colourise(int h, int s, int l); + + private: + nw4r::lyt::TexMap *texmap; + u16 *original; + u16 *mine; +}; + class dWMHud_c : public dBase_c { public: dWMHud_c(); @@ -39,12 +56,14 @@ class dWMHud_c : public dBase_c { void loadFooterInfo(); bool willShowFooter; + dTexMapColouriser_c headerCol, footerCol; + nw4r::lyt::Pane *N_IconPosXP_00[4]; nw4r::lyt::Picture - *Header_Centre, *Header_Right, + *Header_Centre, *Header_Right, *Footer, *NormalExitFlag, *SecretExitFlag, *StarCoinOn[3], *P_marioFace_00, *P_luigiFace_00, diff --git a/src/koopatlas/mapdata.cpp b/src/koopatlas/mapdata.cpp index 29c6a23..d4f9d0c 100644 --- a/src/koopatlas/mapdata.cpp +++ b/src/koopatlas/mapdata.cpp @@ -286,7 +286,7 @@ void dKPMapData_c::fixup() { } -const dKPWorldDef_s *dKPMapData_c::findWorldDef(int id) { +const dKPWorldDef_s *dKPMapData_c::findWorldDef(int id) const { for (int i = 0; i < data->worldCount; i++) { if (data->worlds[i].key == id) return &data->worlds[i]; diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp index 2401e04..896707a 100644 --- a/src/koopatlas/pathmanager.cpp +++ b/src/koopatlas/pathmanager.cpp @@ -566,7 +566,7 @@ void dWMPathManager_c::moveThroughPath() { isJumping = false; timer = 0.0; - SpammyReport("reached path end (%p)\n", to); + SpammyReport("reached path end (%p) with type %d\n", to, to->type); bool reallyStop = false; @@ -595,7 +595,7 @@ void dWMPathManager_c::moveThroughPath() { SaveBlock *save = GetSaveFile()->GetBlock(-1); OSReport("Activating world change %d\n", to->worldID); - dKPWorldDef_s *world = dScKoopatlas_c::instance->mapData.findWorldDef(to->worldID); + const dKPWorldDef_s *world = dScKoopatlas_c::instance->mapData.findWorldDef(to->worldID); if (world) { OSReport("Found!\n"); strncpy(save->newerWorldName, world->name, 36); @@ -653,13 +653,6 @@ void dWMPathManager_c::moveThroughPath() { save->current_path_node = pathLayer->findNodeID(to); if (!calledEnteredNode) dWMHud_c::instance->enteredNode(); - - if (to->type == dKPNode_s::LEVEL) { - NWRWorld nWorld = NewerWorldForLevelID(to->levelNumber[0], to->levelNumber[1]); - if (nWorld != UNKNOWN_WORLD) { - save->currentNewerWorld = (u8)nWorld; - } - } } else { startMovementTo(to->getOppositeAvailableExitTo(currentPath)); SpammyReport("passthrough node, continuing to next path\n"); -- cgit v1.2.3 From e30d836af369f251f83375dd9a9dbab435ee61f1 Mon Sep 17 00:00:00 2001 From: Treeki Date: Thu, 27 Sep 2012 05:25:01 +0200 Subject: world change nodes now don't activate if you're already at that world --- src/koopatlas/pathmanager.cpp | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) (limited to 'src/koopatlas') diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp index 896707a..97d9265 100644 --- a/src/koopatlas/pathmanager.cpp +++ b/src/koopatlas/pathmanager.cpp @@ -597,22 +597,26 @@ void dWMPathManager_c::moveThroughPath() { OSReport("Activating world change %d\n", to->worldID); const dKPWorldDef_s *world = dScKoopatlas_c::instance->mapData.findWorldDef(to->worldID); if (world) { - OSReport("Found!\n"); - strncpy(save->newerWorldName, world->name, 36); - save->newerWorldName[35] = 0; - save->currentMapMusic = world->trackID; - - for (int i = 0; i < 2; i++) { - save->fsTextColours[i] = world->fsTextColours[i]; - save->fsHintColours[i] = world->fsHintColours[i]; - save->hudTextColours[i] = world->hudTextColours[i]; - } + if (strncmp(save->newerWorldName, world->name, 36) == 0) { + OSReport("Already here\n"); + } else { + OSReport("Found!\n"); + strncpy(save->newerWorldName, world->name, 36); + save->newerWorldName[35] = 0; + save->currentMapMusic = world->trackID; + + for (int i = 0; i < 2; i++) { + save->fsTextColours[i] = world->fsTextColours[i]; + save->fsHintColours[i] = world->fsHintColours[i]; + save->hudTextColours[i] = world->hudTextColours[i]; + } - save->hudHintH = world->hudHintH; - save->hudHintS = world->hudHintS; - save->hudHintL = world->hudHintL; + save->hudHintH = world->hudHintH; + save->hudHintS = world->hudHintS; + save->hudHintL = world->hudHintL; - dWMHud_c::instance->hideAndShowFooter(); + dWMHud_c::instance->hideAndShowFooter(); + } } else { OSReport("Not found!\n"); } -- cgit v1.2.3 From 261cd42b5eaad3add529a7464410fcb256fefeab Mon Sep 17 00:00:00 2001 From: Treeki Date: Thu, 27 Sep 2012 06:20:55 +0200 Subject: draw order fix --- src/koopatlas/hud.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/koopatlas') diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp index 84329bf..907f02c 100644 --- a/src/koopatlas/hud.cpp +++ b/src/koopatlas/hud.cpp @@ -228,6 +228,8 @@ int dWMHud_c::onCreate() { layoutLoaded = true; + layout.drawOrder = 0; + willShowHeader = false; willShowFooter = false; -- cgit v1.2.3 From cd2ceff21f680a7d33b43a6926b4e556e81d625b Mon Sep 17 00:00:00 2001 From: Treeki Date: Thu, 27 Sep 2012 15:35:54 +0200 Subject: fixed a possible crash bug where the HUD was accessed before it was created --- src/koopatlas/hud.cpp | 2 ++ src/koopatlas/pathmanager.cpp | 9 +++++---- 2 files changed, 7 insertions(+), 4 deletions(-) (limited to 'src/koopatlas') diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp index 907f02c..892186e 100644 --- a/src/koopatlas/hud.cpp +++ b/src/koopatlas/hud.cpp @@ -246,6 +246,8 @@ int dWMHud_c::onCreate() { int dWMHud_c::onDelete() { + dWMHud_c::instance = 0; + if (!layoutLoaded) return true; diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp index 97d9265..6134dc6 100644 --- a/src/koopatlas/pathmanager.cpp +++ b/src/koopatlas/pathmanager.cpp @@ -368,7 +368,7 @@ void dWMPathManager_c::startMovementTo(dKPPath_s *path) { SpammyReport("moving to path %p [%d,%d to %d,%d]\n", path, path->start->x, path->start->y, path->end->x, path->end->y); if (!path->isAvailable) { return; } - if (currentNode) + if (currentNode && dWMHud_c::instance) dWMHud_c::instance->leftNode(); calledEnteredNode = false; @@ -545,7 +545,7 @@ void dWMPathManager_c::moveThroughPath() { float distToEnd = VECMag(&toEndVec); //OSReport("Distance: %f; To:%d,%d; Player:%f,%f; Diff:%f,%f\n", distToEnd, to->x, to->y, player->pos.x, player->pos.y, toEndVec.x, toEndVec.y); - if (distToEnd < 64.0f) { + if (distToEnd < 64.0f && dWMHud_c::instance) { calledEnteredNode = true; dWMHud_c::instance->enteredNode(to); } @@ -615,7 +615,8 @@ void dWMPathManager_c::moveThroughPath() { save->hudHintS = world->hudHintS; save->hudHintL = world->hudHintL; - dWMHud_c::instance->hideAndShowFooter(); + if (dWMHud_c::instance) + dWMHud_c::instance->hideAndShowFooter(); } } else { OSReport("Not found!\n"); @@ -655,7 +656,7 @@ void dWMPathManager_c::moveThroughPath() { SaveBlock *save = GetSaveFile()->GetBlock(-1); save->current_path_node = pathLayer->findNodeID(to); - if (!calledEnteredNode) + if (!calledEnteredNode && dWMHud_c::instance) dWMHud_c::instance->enteredNode(); } else { startMovementTo(to->getOppositeAvailableExitTo(currentPath)); -- cgit v1.2.3 From b216a278d3fdc1f13285e3907cd4f27de1555eeb Mon Sep 17 00:00:00 2001 From: Treeki Date: Thu, 27 Sep 2012 15:47:24 +0200 Subject: fuck it I can't be assed to make lives reset only when needed --- src/koopatlas/hud.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/koopatlas') diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp index 892186e..5293933 100644 --- a/src/koopatlas/hud.cpp +++ b/src/koopatlas/hud.cpp @@ -271,6 +271,7 @@ int dWMHud_c::onExecute() { playShowAnim(SHOW_FOOTER); } + setupLives(); // FUCK IT updatePressableButtonThingies(); layout.execAnimations(); -- cgit v1.2.3 From 0fc70778c02671e64b8360b7ebdbb0e8c29f0a05 Mon Sep 17 00:00:00 2001 From: Treeki Date: Thu, 27 Sep 2012 16:58:28 +0200 Subject: star coin count, need to fix this --- src/koopatlas/hud.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/koopatlas') diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp index 5293933..90e769e 100644 --- a/src/koopatlas/hud.cpp +++ b/src/koopatlas/hud.cpp @@ -274,6 +274,10 @@ int dWMHud_c::onExecute() { setupLives(); // FUCK IT updatePressableButtonThingies(); + int scCount = getStarCoinCount(); + int scLength = 3; + WriteNumberToTextBox(&scCount, &scLength, StarCoinCounter, false); + layout.execAnimations(); layout.update(); -- cgit v1.2.3 From 81ef1a8b7f7d63c72b92f779d73a8b2b0f8158c1 Mon Sep 17 00:00:00 2001 From: Treeki Date: Thu, 27 Sep 2012 23:29:46 +0200 Subject: new levelinfo format and a couple of fixes --- src/koopatlas/core.cpp | 10 +++++----- src/koopatlas/hud.cpp | 16 +++++++++++++--- src/koopatlas/hud.h | 4 +++- src/koopatlas/pathmanager.cpp | 9 +++++++-- src/koopatlas/pathmanager.h | 1 + src/koopatlas/starcoin.cpp | 2 +- 6 files changed, 30 insertions(+), 12 deletions(-) (limited to 'src/koopatlas') diff --git a/src/koopatlas/core.cpp b/src/koopatlas/core.cpp index c20d715..cb13119 100644 --- a/src/koopatlas/core.cpp +++ b/src/koopatlas/core.cpp @@ -970,13 +970,13 @@ void dScKoopatlas_c::startLevel(dLevelInfo_c::entry_s *entry) { sl.unk4 = 0; sl.purpose = 0; - sl.world1 = entry->world; - sl.world2 = entry->world; - sl.level1 = entry->level; - sl.level2 = entry->level; + sl.world1 = entry->worldSlot; + sl.world2 = entry->worldSlot; + sl.level1 = entry->levelSlot; + sl.level2 = entry->levelSlot; // hopefully this will fix the Star Coin issues - SetSomeConditionShit(entry->world, entry->level, 2); + SetSomeConditionShit(entry->worldSlot, entry->levelSlot, 2); ActivateWipe(WIPE_MARIO); diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp index 90e769e..667feb2 100644 --- a/src/koopatlas/hud.cpp +++ b/src/koopatlas/hud.cpp @@ -156,6 +156,7 @@ dWMHud_c *dWMHud_c::build() { dWMHud_c::dWMHud_c() { layoutLoaded = false; displayedControllerType = -1; + isFooterVisible = false; } enum WMHudAnimation { @@ -267,6 +268,7 @@ int dWMHud_c::onExecute() { if (willShowFooter && (!(layout.isAnimOn(SHOW_FOOTER)))) { willShowFooter = false; + isFooterVisible = true; loadFooterInfo(); playShowAnim(SHOW_FOOTER); } @@ -310,13 +312,15 @@ void dWMHud_c::playHideAnim(int id) { layout.enableNonLoopAnim(id, true); } layout.grpHandlers[id].frameCtrl.flags = 3; // NO_LOOP | REVERSE + if (id == SHOW_FOOTER) + isFooterVisible = false; } void dWMHud_c::loadHeaderInfo() { dLevelInfo_c *levelInfo = &dScKoopatlas_c::instance->levelInfo; - dLevelInfo_c::entry_s *infEntry = levelInfo->search( + dLevelInfo_c::entry_s *infEntry = levelInfo->searchBySlot( nodeForHeader->levelNumber[0]-1, nodeForHeader->levelNumber[1]-1); if (infEntry == 0) { @@ -434,9 +438,15 @@ void dWMHud_c::leftNode() { } -void dWMHud_c::hideAndShowFooter() { +void dWMHud_c::hideFooter() { + if (isFooterVisible) + playHideAnim(SHOW_FOOTER); +} + +void dWMHud_c::showFooter() { willShowFooter = true; - playHideAnim(SHOW_FOOTER); + if (isFooterVisible) + playHideAnim(SHOW_FOOTER); } diff --git a/src/koopatlas/hud.h b/src/koopatlas/hud.h index c0079af..05ad07c 100644 --- a/src/koopatlas/hud.h +++ b/src/koopatlas/hud.h @@ -38,7 +38,8 @@ class dWMHud_c : public dBase_c { void enteredNode(dKPNode_s *node = 0); void leftNode(); - void hideAndShowFooter(); + void hideFooter(); + void showFooter(); void setupLives(); @@ -55,6 +56,7 @@ class dWMHud_c : public dBase_c { void loadFooterInfo(); bool willShowFooter; + bool isFooterVisible; dTexMapColouriser_c headerCol, footerCol; diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp index 8a05ea4..c691a89 100644 --- a/src/koopatlas/pathmanager.cpp +++ b/src/koopatlas/pathmanager.cpp @@ -628,8 +628,13 @@ void dWMPathManager_c::moveThroughPath() { save->hudHintL = world->hudHintL; if (dWMHud_c::instance) - dWMHud_c::instance->hideAndShowFooter(); + dWMHud_c::instance->showFooter(); } + } else if (to->worldID == 0) { + OSReport("No world\n"); + save->newerWorldName[0] = 0; + if (dWMHud_c::instance) + dWMHud_c::instance->hideFooter(); } else { OSReport("Not found!\n"); } @@ -710,7 +715,7 @@ void dWMPathManager_c::activatePoint() { isEnteringLevel = true; levelStartWait = 40; - enteredLevel = dScKoopatlas_c::instance->levelInfo.search(w, l); + enteredLevel = dScKoopatlas_c::instance->levelInfo.searchBySlot(w, l); } } diff --git a/src/koopatlas/pathmanager.h b/src/koopatlas/pathmanager.h index 5579f66..a1d916d 100644 --- a/src/koopatlas/pathmanager.h +++ b/src/koopatlas/pathmanager.h @@ -9,6 +9,7 @@ #endif #include "koopatlas/mapdata.h" +#include "levelinfo.h" extern "C" void *SoundRelatedClass; extern "C" void *MapSoundPlayer(void *SoundClass, int soundID, int unk); diff --git a/src/koopatlas/starcoin.cpp b/src/koopatlas/starcoin.cpp index 3842f87..4366895 100644 --- a/src/koopatlas/starcoin.cpp +++ b/src/koopatlas/starcoin.cpp @@ -238,7 +238,7 @@ void dWMStarCoin::LoadCoinsForWorld(int world) { if (levelArray[world][l][i]) { levelNum--; dLevelInfo_c *li = &dScKoopatlas_c::instance->levelInfo; - dLevelInfo_c::entry_s *entry = li->search(world, levelNum); + dLevelInfo_c::entry_s *entry = li->searchBySlot(world, levelNum); setText(li->getNameForLevel(entry), levelPane); totalCoins += 3; -- cgit v1.2.3 From 35dd657c71814377774ffbdc16158eda05a22ba9 Mon Sep 17 00:00:00 2001 From: Treeki Date: Fri, 28 Sep 2012 00:33:10 +0200 Subject: untested automatically moving elements and world numbers --- src/koopatlas/hud.cpp | 72 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 61 insertions(+), 11 deletions(-) (limited to 'src/koopatlas') diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp index 667feb2..3d2eb04 100644 --- a/src/koopatlas/hud.cpp +++ b/src/koopatlas/hud.cpp @@ -345,31 +345,81 @@ void dWMHud_c::loadHeaderInfo() { LevelNameS->SetString(convertedLevelName); // LEVEL NUMBER - wchar_t levelNumber[6]; - levelNumber[0] = '0' + nodeForHeader->levelNumber[0]; + static const wchar_t *numberKinds[] = { + // 0-19 are handled by code + L"A", // 20, alternate + L"Tower", // 21, tower + L"Tower2", // 22, tower 2 + L"Castle", // 23, castle + L"Fortress", // 24, fortress + L"FCastle", // 25, final castle + L"Train", // 26, train + L"Airship", // 27, airship + L"Palace", // 28, switch palace + L"House", // 29, yoshi's house + L"Key1", // 30, key 1 + L"Key2", // 31, key 2 + L"Key3", // 32, key 3 + L"Key4", // 33, key 4 + L"Key5", // 34, key 5 + L"Key6", // 35, key 6 + }; + + int origWN = nodeForHeader->levelNumber[0]; + int origWL = nodeForHeader->levelNumber[1]; + + wchar_t levelNumber[16]; + levelNumber[0] = (origWN >= 10) ? (origWN-10+'A') : (origWN+'0'); levelNumber[1] = '-'; - if (nodeForHeader->levelNumber[1] >= 10) { - levelNumber[2] = '0' + (nodeForHeader->levelNumber[1] / 10); - levelNumber[3] = '0' + (nodeForHeader->levelNumber[1] % 10); + if (origWL > 20) { + wcscpy(&levelNumber[2], numberKinds[origWL-20]); + } else if (origWL >= 10) { + levelNumber[2] = '1'; + levelNumber[3] = ('0' - 10) + origWL; levelNumber[4] = 0; } else { - levelNumber[2] = '0' + nodeForHeader->levelNumber[1]; + levelNumber[2] = '0' + origWL; levelNumber[3] = 0; } LevelNumber->SetString(levelNumber); LevelNumberS->SetString(levelNumber); + nw4r::ut::TextWriter tw2; + tw2.font = LevelNumber->font; + tw2.SetFontSize(LevelNumber->fontSizeX, LevelNumber->fontSizeY); + tw2.lineSpace = LevelNumber->lineSpace; + tw2.charSpace = LevelNumber->charSpace; + if (LevelNumber->tagProc != 0) + tw2.tagProcessor = LevelNumber->tagProc; + + float spacing = 4.0f; + float currentPos = tw2.CalcStringWidth(levelNumber, wcslen(levelNumber)); + currentPos += LevelNumber->trans.x + spacing; + // INFO int w = nodeForHeader->levelNumber[0] - 1; int l = nodeForHeader->levelNumber[1] - 1; u32 conds = GetSaveFile()->GetBlock(-1)->GetLevelCondition(w, l); + + NormalExitFlag->trans.x = currentPos; NormalExitFlag->SetVisible(conds & COND_NORMAL); + if (conds & COND_NORMAL) + currentPos += NormalExitFlag->size.x + spacing; + + SecretExitFlag->trans.x = currentPos; SecretExitFlag->SetVisible(conds & COND_SECRET); - StarCoinOn[0]->SetVisible(conds & COND_COIN1); - StarCoinOn[1]->SetVisible(conds & COND_COIN2); - StarCoinOn[2]->SetVisible(conds & COND_COIN3); + if (conds & COND_SECRET) + currentPos += SecretExitFlag->size.x + spacing; + + for (int i = 0; i < 3; i++) { + bool flag = (conds & (COND_COIN1 << i)); + StarCoinOn[i]->trans.x = currentPos; + StarCoinOn[i]->SetVisible(flag); + if (flag) + currentPos += StarCoinOn[i]->size.x + spacing; + } // SIZE THING nw4r::ut::TextWriter tw; @@ -382,8 +432,8 @@ void dWMHud_c::loadHeaderInfo() { float width = tw.CalcStringWidth(convertedLevelName, charCount); float totalWidth = width + LevelName->trans.x - 20.0f; - if (totalWidth < 270.0f) - totalWidth = 270.0f; + if (totalWidth < currentPos) + totalWidth = currentPos; Header_Centre->size.x = totalWidth; Header_Right->trans.x = totalWidth; -- cgit v1.2.3 From 908766204ce347afd46ed179a9a40e1adadf41b2 Mon Sep 17 00:00:00 2001 From: Treeki Date: Fri, 28 Sep 2012 02:13:00 +0200 Subject: Disabled spammy debugging --- src/koopatlas/core.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/koopatlas') diff --git a/src/koopatlas/core.h b/src/koopatlas/core.h index 41fba45..cfac014 100644 --- a/src/koopatlas/core.h +++ b/src/koopatlas/core.h @@ -18,7 +18,7 @@ #include "koopatlas/pathmanager.h" #define WM_DEBUGGING -#define WM_SPAMMY_DEBUGGING +//#define WM_SPAMMY_DEBUGGING #ifdef WM_DEBUGGING #define MapReport OSReport -- cgit v1.2.3 From 324f2f2b3b8dff9c6b9c297390c8307d181dac87 Mon Sep 17 00:00:00 2001 From: Treeki Date: Fri, 28 Sep 2012 02:14:22 +0200 Subject: various fixes to stuff on map HUD --- src/koopatlas/hud.cpp | 18 ++++++++---------- src/koopatlas/hud.h | 1 + 2 files changed, 9 insertions(+), 10 deletions(-) (limited to 'src/koopatlas') diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp index 3d2eb04..5379019 100644 --- a/src/koopatlas/hud.cpp +++ b/src/koopatlas/hud.cpp @@ -207,11 +207,12 @@ int dWMHud_c::onCreate() { static const char *pictureNames[] = { "Header_Centre", "Header_Right", "Footer", "NormalExitFlag", "SecretExitFlag", + "StarCoinOff0", "StarCoinOff1", "StarCoinOff2", "StarCoinOn0", "StarCoinOn1", "StarCoinOn2", "P_marioFace_00", "P_luigiFace_00", "P_BkinoFace_00", "P_YkinoFace_00" }; - layout.getPictures(pictureNames, &Header_Centre, 12); + layout.getPictures(pictureNames, &Header_Centre, 15); static const char *textBoxNames[] = { "LevelName", "LevelNameS", @@ -277,8 +278,7 @@ int dWMHud_c::onExecute() { updatePressableButtonThingies(); int scCount = getStarCoinCount(); - int scLength = 3; - WriteNumberToTextBox(&scCount, &scLength, StarCoinCounter, false); + WriteNumberToTextBox(&scCount, StarCoinCounter, false); layout.execAnimations(); layout.update(); @@ -393,9 +393,8 @@ void dWMHud_c::loadHeaderInfo() { if (LevelNumber->tagProc != 0) tw2.tagProcessor = LevelNumber->tagProc; - float spacing = 4.0f; float currentPos = tw2.CalcStringWidth(levelNumber, wcslen(levelNumber)); - currentPos += LevelNumber->trans.x + spacing; + currentPos += LevelNumber->trans.x + 12.0f; // INFO int w = nodeForHeader->levelNumber[0] - 1; @@ -406,19 +405,18 @@ void dWMHud_c::loadHeaderInfo() { NormalExitFlag->trans.x = currentPos; NormalExitFlag->SetVisible(conds & COND_NORMAL); if (conds & COND_NORMAL) - currentPos += NormalExitFlag->size.x + spacing; + currentPos += NormalExitFlag->size.x; SecretExitFlag->trans.x = currentPos; SecretExitFlag->SetVisible(conds & COND_SECRET); if (conds & COND_SECRET) - currentPos += SecretExitFlag->size.x + spacing; + currentPos += SecretExitFlag->size.x; for (int i = 0; i < 3; i++) { bool flag = (conds & (COND_COIN1 << i)); - StarCoinOn[i]->trans.x = currentPos; StarCoinOn[i]->SetVisible(flag); - if (flag) - currentPos += StarCoinOn[i]->size.x + spacing; + StarCoinOff[i]->trans.x = currentPos; + currentPos += StarCoinOff[i]->size.x + 4.0f; } // SIZE THING diff --git a/src/koopatlas/hud.h b/src/koopatlas/hud.h index 05ad07c..5996b88 100644 --- a/src/koopatlas/hud.h +++ b/src/koopatlas/hud.h @@ -67,6 +67,7 @@ class dWMHud_c : public dBase_c { nw4r::lyt::Picture *Header_Centre, *Header_Right, *Footer, *NormalExitFlag, *SecretExitFlag, + *StarCoinOff[3], *StarCoinOn[3], *P_marioFace_00, *P_luigiFace_00, *P_BkinoFace_00, *P_YkinoFace_00; -- cgit v1.2.3 From 4bc93995778096106a3214fcd29dab7ff6e144c7 Mon Sep 17 00:00:00 2001 From: Treeki Date: Fri, 28 Sep 2012 03:09:54 +0200 Subject: HUD numbers are now working --- src/koopatlas/hud.cpp | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) (limited to 'src/koopatlas') diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp index 5379019..3255af8 100644 --- a/src/koopatlas/hud.cpp +++ b/src/koopatlas/hud.cpp @@ -192,7 +192,7 @@ int dWMHud_c::onCreate() { layout.disableAllAnimations(); layout.enableNonLoopAnim(SHOW_LIVES); - layout.enableNonLoopAnim(SHOW_FOOTER); + layout.resetAnim(SHOW_FOOTER); layout.resetAnim(SHOW_HEADER); static const char *tbNames[2] = {"MenuButtonInfo", "ItemsButtonInfo"}; @@ -236,6 +236,8 @@ int dWMHud_c::onCreate() { willShowFooter = false; loadFooterInfo(); + SaveBlock *save = GetSaveFile()->GetBlock(-1); + willShowFooter = (save->newerWorldName[0] != 0); if (!dScKoopatlas_c::instance->pathManager.isMoving) enteredNode(); @@ -347,14 +349,17 @@ void dWMHud_c::loadHeaderInfo() { // LEVEL NUMBER static const wchar_t *numberKinds[] = { // 0-19 are handled by code + // To insert a picturefont character: + // \x0B\x01YY\xZZZZ + // YY is the character code, ZZZZ is ignored L"A", // 20, alternate - L"Tower", // 21, tower - L"Tower2", // 22, tower 2 - L"Castle", // 23, castle - L"Fortress", // 24, fortress - L"FCastle", // 25, final castle + L"\x0B\x012F\xBEEF", // 21, tower + L"\x0B\x012F\xBEEF" L"2", // 22, tower 2 + L"\x0B\x012E\xBEEF", // 23, castle + L"\x0B\x012F\xBEEF", // 24, fortress + L"\x0B\x013D\xBEEF", // 25, final castle L"Train", // 26, train - L"Airship", // 27, airship + L"\x0B\x0132\xBEEF", // 27, airship L"Palace", // 28, switch palace L"House", // 29, yoshi's house L"Key1", // 30, key 1 @@ -365,8 +370,8 @@ void dWMHud_c::loadHeaderInfo() { L"Key6", // 35, key 6 }; - int origWN = nodeForHeader->levelNumber[0]; - int origWL = nodeForHeader->levelNumber[1]; + int origWN = infEntry->displayWorld; + int origWL = infEntry->displayLevel; wchar_t levelNumber[16]; levelNumber[0] = (origWN >= 10) ? (origWN-10+'A') : (origWN+'0'); @@ -383,6 +388,16 @@ void dWMHud_c::loadHeaderInfo() { } LevelNumber->SetString(levelNumber); + + // make the picture shadowy + int sidx = 0; + while (levelNumber[sidx]) { + if (levelNumber[sidx] == 11) { + levelNumber[sidx+1] = 0x200 | (levelNumber[sidx+1]&0xFF); + sidx += 2; + } + sidx++; + } LevelNumberS->SetString(levelNumber); nw4r::ut::TextWriter tw2; -- cgit v1.2.3 From 69bfd1aa1b0a3e24160f4fe9fd583664cc23b2c9 Mon Sep 17 00:00:00 2001 From: Treeki Date: Fri, 28 Sep 2012 03:10:06 +0200 Subject: final WorldDef update hopefully --- src/koopatlas/mapdata.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/koopatlas') diff --git a/src/koopatlas/mapdata.h b/src/koopatlas/mapdata.h index f7194ef..a0beb4d 100644 --- a/src/koopatlas/mapdata.h +++ b/src/koopatlas/mapdata.h @@ -193,8 +193,11 @@ struct dKPWorldDef_s { GXColor fsTextColours[2]; GXColor fsHintColours[2]; GXColor hudTextColours[2]; - s16 hudHintH, hudHintS, hudHintL; + u8 hudHintH; + s8 hudHintS, hudHintL; u8 key, trackID; + u8 worldID; + u8 padding1, padding2; }; struct dKPMapFile_s { -- cgit v1.2.3 From ae8aa681d1f431ee163ba2907616cb8409433c36 Mon Sep 17 00:00:00 2001 From: Treeki Date: Fri, 28 Sep 2012 05:56:05 +0200 Subject: HUD now only shows star coins for real levels, and fixed a bug --- src/koopatlas/core.cpp | 3 --- src/koopatlas/hud.cpp | 13 +++++++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'src/koopatlas') diff --git a/src/koopatlas/core.cpp b/src/koopatlas/core.cpp index cb13119..a48a565 100644 --- a/src/koopatlas/core.cpp +++ b/src/koopatlas/core.cpp @@ -975,9 +975,6 @@ void dScKoopatlas_c::startLevel(dLevelInfo_c::entry_s *entry) { sl.level1 = entry->levelSlot; sl.level2 = entry->levelSlot; - // hopefully this will fix the Star Coin issues - SetSomeConditionShit(entry->worldSlot, entry->levelSlot, 2); - ActivateWipe(WIPE_MARIO); DoStartLevel(GetGameMgr(), &sl); diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp index 3255af8..7bc69a6 100644 --- a/src/koopatlas/hud.cpp +++ b/src/koopatlas/hud.cpp @@ -346,6 +346,9 @@ void dWMHud_c::loadHeaderInfo() { LevelName->SetString(convertedLevelName); LevelNameS->SetString(convertedLevelName); + // a hack because I don't feel like editing the rlyt + LevelName->size.x = LevelNameS->size.x = 400.0f; + // LEVEL NUMBER static const wchar_t *numberKinds[] = { // 0-19 are handled by code @@ -427,11 +430,17 @@ void dWMHud_c::loadHeaderInfo() { if (conds & COND_SECRET) currentPos += SecretExitFlag->size.x; + // are star coins enabled or not? + bool haveSC = (infEntry->flags & 2); + for (int i = 0; i < 3; i++) { bool flag = (conds & (COND_COIN1 << i)); StarCoinOn[i]->SetVisible(flag); - StarCoinOff[i]->trans.x = currentPos; - currentPos += StarCoinOff[i]->size.x + 4.0f; + StarCoinOff[i]->SetVisible(haveSC); + if (haveSC) { + StarCoinOff[i]->trans.x = currentPos; + currentPos += StarCoinOff[i]->size.x + 4.0f; + } } // SIZE THING -- cgit v1.2.3 From b3c37e5a9ef81250d6554fcbb8089154b4940c9f Mon Sep 17 00:00:00 2001 From: Treeki Date: Fri, 28 Sep 2012 05:58:20 +0200 Subject: tiny bug in the HUD header hide animation fixed --- src/koopatlas/hud.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/koopatlas') diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp index 7bc69a6..2401a04 100644 --- a/src/koopatlas/hud.cpp +++ b/src/koopatlas/hud.cpp @@ -501,7 +501,7 @@ void dWMHud_c::leftNode() { if (layout.grpHandlers[SHOW_HEADER].frameCtrl.currentFrame > 0.1f) { // not hidden - if ((layout.isAnimOn(SHOW_HEADER) && (layout.grpHandlers[SHOW_HEADER].frameCtrl.flags & 2)) + if ((layout.isAnimOn(SHOW_HEADER) && !(layout.grpHandlers[SHOW_HEADER].frameCtrl.flags & 2)) || (!layout.isAnimOn(SHOW_HEADER))) { // currently being shown, OR fully shown already playHideAnim(SHOW_HEADER); -- cgit v1.2.3