diff options
Diffstat (limited to 'src/koopatlas')
-rw-r--r-- | src/koopatlas/core.cpp | 2 | ||||
-rw-r--r-- | src/koopatlas/map.cpp | 96 | ||||
-rw-r--r-- | src/koopatlas/map.h | 4 | ||||
-rw-r--r-- | src/koopatlas/mapdata.cpp | 70 | ||||
-rw-r--r-- | src/koopatlas/mapdata.h | 7 | ||||
-rw-r--r-- | src/koopatlas/pathmanager.cpp | 4 |
6 files changed, 88 insertions, 95 deletions
diff --git a/src/koopatlas/core.cpp b/src/koopatlas/core.cpp index 5f06d61..6b1f290 100644 --- a/src/koopatlas/core.cpp +++ b/src/koopatlas/core.cpp @@ -141,7 +141,7 @@ bool WMInit_LoadSIAnims(void *ptr) { DVD_LoadFile(GetDVDClass(), "WorldMap", "SI_propeller", 0); DVD_LoadFile(GetDVDClass(), "WorldMap", "SI_star", 0); DVD_LoadFile(GetDVDClass(), "Object", "I_hammer", 0); - DVD_LoadFile(GetDVDClass(), "WorldMap", "cobCourse", 0); + DVD_LoadFile(GetDVDClass(), "Object", "cobCourse", 0); return true; } diff --git a/src/koopatlas/map.cpp b/src/koopatlas/map.cpp index f9403ba..a03d819 100644 --- a/src/koopatlas/map.cpp +++ b/src/koopatlas/map.cpp @@ -63,25 +63,6 @@ int dWMMap_c::onCreate() { bgSrtAnm.bindEntry(&bgModel, anmRes, 0, 0); bgModel.bindAnim(&bgSrtAnm, 0.0f); - - nw4r::g3d::ResFile rg(getResource("cobCourse", "g3d/model.brres")); - renderer.nodeModel.setup(rg.GetResMdl("cobCourse"), &allocator, 0x224, 1, 0); - - // nw4r::g3d::ResFile rg(dScKoopatlas_c::instance->mapData.nodeLoader.buffer); - // rg.CheckRevision(); - // rg.Init(); - // rg.Bind(rg); - - // nw4r::g3d::ResMdl mdl = rg.GetResMdl("cobCourse"); - // nw4r::g3d::ResAnmVis anmResVis = rg.GetResAnmVis("cobCourse"); - - // renderer.nodeModel.setup(mdl, &allocator, 0x224, 1, 0); - renderer.nodeMatrix.identity(); - // renderer.nodeColor.setup(mdl, anmResVis, &allocator, 0); - // renderer.nodeColor.bind(&renderer.nodeModel, anmResVis, 0); - // renderer.nodeModel.bindAnim(&renderer.nodeColor, 0.0f); - SetupTextures_MapObj(&renderer.nodeModel, 0); - allocator.unlink(); return true; @@ -100,21 +81,6 @@ int dWMMap_c::onExecute() { int dWMMap_c::onDraw() { - short rz = 0x6000; - short rx = 0x4000; - short ry = 0x8000; - - // Node rotation (0x6000, 0x4000, 0x8000) - // Node Position (node->x, -node->y + 4.0, 498.0) - // Node Scale (0.8) - renderer.nodeMatrix.translation(384.0, -504.0 + 4.0, 498.0); - renderer.nodeMatrix.applyRotationYXZ(&ry, &rx, &rz); - renderer.nodeModel.setDrawMatrix(renderer.nodeMatrix); - renderer.nodeModel.setScale(0.8f, 0.8f, 0.8f); - renderer.nodeModel.calcWorld(false); - - renderer.nodeModel.scheduleForDrawing(); - renderer.scheduleForDrawing(); bgModel.scheduleForDrawing(); @@ -485,57 +451,27 @@ void dWMMap_c::renderer_c::renderDoodadLayer(dKPLayer_s *layer) { } void dWMMap_c::renderer_c::renderPathLayer(dKPLayer_s *layer) { - // return; for (int i = 0; i < layer->nodeCount; i++) { dKPNode_s *node = layer->nodes[i]; - // int world = node->levelNumber[0]; - // int level = node->levelNumber[1]; - - // SaveBlock *save = GetSaveFile()->GetBlock(-1); - // u32 conds = save->GetLevelCondition(world-1, level-1); - - // bool isUnlocked = true; - // bool exitComplete = false; - // bool secretComplete = false; - - // if (conds & 0x10) - // exitComplete = true; - // if (conds & 0x20) - // secretComplete = true; - - // // Is it unlocked? - // if (!isUnlocked) - // node->color.setCurrentFrame(0); // Black - - // // Is it complete? - // else if ((exitComplete) || (secretComplete)) - // // Does it have two exits? - // if ((node->hasSecret) && ((!exitComplete) || (!secretComplete))) - // node->color.setCurrentFrame(2); // Yellow - - // // All exits are complete - // else - // node->color.setCurrentFrame(1); // Blue - - // // Not complete after all - // else - // node->color.setCurrentFrame(3); // Red - if (node->type == dKPNode_s::LEVEL) { - float nx = (float)node->x; - float ny = (float)node->y; - - // OSReport("Rendering the node @ %f, %f", nx, ny); - - // nodeMatrix.translation(node->x, node->y, 498.0); - // nodeMatrix.applyRotationYXZ(0, 0, 0); - // nodeModel.setDrawMatrix(nodeMatrix); - // nodeModel.setScale(1.0f, 1.0f, 1.0f); - // nodeModel.calcWorld(false); - - // nodeModel.scheduleForDrawing(); + // OSReport("Node Extra: %x", node->extra); + // float nx = (float)node->x; + // float ny = (float)node->y; + // OSReport("Node Extra: %x, model: %x, matrix: %x, pos: %f, %f", node->extra, node->extra->model, node->extra->matrix, nx, ny); + + short rz = 0x6000; + short rx = 0x4000; + short ry = 0x8000; + + node->extra->matrix.translation(node->x, -node->y + 4.0, 498.0); + node->extra->matrix.applyRotationYXZ(&ry, &rx, &rz); + node->extra->model.setDrawMatrix(node->extra->matrix); + node->extra->model.setScale(0.8f, 0.8f, 0.8f); + node->extra->model.calcWorld(false); + + node->extra->model.scheduleForDrawing(); } } } diff --git a/src/koopatlas/map.h b/src/koopatlas/map.h index 9616f5c..e951a41 100644 --- a/src/koopatlas/map.h +++ b/src/koopatlas/map.h @@ -36,10 +36,6 @@ class dWMMap_c : public dBase_c { void drawOpa(); void drawXlu(); - m3d::mdl_c nodeModel; - m3d::anmVis_c nodeColor; - mMtx nodeMatrix; - private: void drawLayers(); diff --git a/src/koopatlas/mapdata.cpp b/src/koopatlas/mapdata.cpp index 7fd2d17..f65d038 100644 --- a/src/koopatlas/mapdata.cpp +++ b/src/koopatlas/mapdata.cpp @@ -21,6 +21,71 @@ bool dKPNode_s::isUnlocked() { return false; } +void dKPNode_s::setupNodeExtra() { + int world = this->levelNumber[0]; + int level = this->levelNumber[1]; + + SaveBlock *save = GetSaveFile()->GetBlock(-1); + u32 conds = save->GetLevelCondition(world-1, level-1); + + bool isUnlocked = this->isUnlocked(); + bool exitComplete = false; + bool secretComplete = false; + + if (conds & 0x10) + exitComplete = true; + if (conds & 0x20) + secretComplete = true; + + const char *colour; + + // Is it unlocked? + if (!isUnlocked) + colour = "g3d/black.brres"; + + // Is it a one time level? + else if ((level >= 30) && (level <= 37)) { + // Is it complete? + if (exitComplete) + colour = "g3d/yellow.brres"; + + // It's still available + else + colour = "g3d/green.brres"; + } + + // Is it a shop? + else if (level == 41) + const char *colour = "g3d/shop.brres"; + + // Is it complete? + else if ((exitComplete) || (secretComplete)) { + // Does it have two exits? + if ((this->hasSecret) && (!exitComplete) && (!secretComplete)) + colour = "g3d/blue.brres"; + + // Does it have one exit? + else if ((!this->hasSecret) && (exitComplete)) + colour = "g3d/blue.brres"; + + // All exits are complete + else + colour = "g3d/purple.brres"; + } + // Not complete after all + else + colour = "g3d/red.brres"; + + // model time + this->extra->mallocator.link(-1, GameHeaps[0], 0, 0x20); + + nw4r::g3d::ResFile rg(getResource("cobCourse", colour)); + this->extra->model.setup(rg.GetResMdl("cobCourse"), &this->extra->mallocator, 0x224, 1, 0); + this->extra->matrix.identity(); + SetupTextures_MapObj(&this->extra->model, 0); + + this->extra->mallocator.unlink(); +} int dKPLayer_s::findNodeID(dKPNode_s *node) { for (int i = 0; i < nodeCount; i++) @@ -58,9 +123,8 @@ bool dKPMapData_c::load(const char *filename) { bool didLoadTilesets = loadTilesets(); bool didLoadBG = (bgLoader.load("/Maps/Water.brres") != 0); - bool didLoadNode = nodeLoader.load("/Maps/visCobCourse.brres"); - return didLoadTilesets && didLoadBG && didLoadNode; + return didLoadTilesets && didLoadBG; } bool dKPMapData_c::loadTilesets() { @@ -98,7 +162,6 @@ void dKPMapData_c::unloadTilesets() { } bgLoader.unload(); - nodeLoader.unload(); } void dKPMapData_c::fixup() { @@ -173,6 +236,7 @@ void dKPMapData_c::fixup() { for (int nodeIdx = 0; nodeIdx < pathLayer->nodeCount; nodeIdx++) { if (pathLayer->nodes[nodeIdx]->type == dKPNode_s::LEVEL) { pathLayer->nodes[nodeIdx]->extra = &levelNodeExtraArray[extraIdx]; + pathLayer->nodes[nodeIdx]->setupNodeExtra(); extraIdx++; } } diff --git a/src/koopatlas/mapdata.h b/src/koopatlas/mapdata.h index 6739086..f3739a0 100644 --- a/src/koopatlas/mapdata.h +++ b/src/koopatlas/mapdata.h @@ -76,9 +76,9 @@ struct dKPNode_s { // The union is placed at the very end so we can leave out padding in the // kpbin union { - struct { u8 levelNumber[2]; }; + // struct { u8 levelNumber[2]; }; // FORWARDS COMPATIBILITY: - // struct { u8 levelNumber[2]; bool hasSecret; }; + struct { u8 levelNumber[2]; bool hasSecret; }; struct { const char *destMap; u8 thisID, foreignID, transition, _; }; }; @@ -90,6 +90,7 @@ struct dKPNode_s { } bool isUnlocked(); + void setupNodeExtra(); dKPPath_s *getOppositeExitTo(dKPPath_s *path); }; @@ -213,7 +214,6 @@ class dKPMapData_c { dKPLayer_s *pathLayer; dDvdLoader_c bgLoader; - dDvdLoader_c nodeLoader; dKPNodeExtra_c *levelNodeExtraArray; @@ -226,6 +226,7 @@ class dKPMapData_c { // Currently only available for LEVEL nodes class dKPNodeExtra_c { public: + mHeapAllocator_c mallocator; mMtx matrix; m3d::mdl_c model; }; diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp index cfdf2b7..7457f99 100644 --- a/src/koopatlas/pathmanager.cpp +++ b/src/koopatlas/pathmanager.cpp @@ -46,7 +46,6 @@ void dWMPathManager_c::setup() { } if (!found) { - OSReport("Couldn't find target node %d!\n", changeID); currentNode = pathLayer->nodes[0]; mustComplainToMapCreator = true; } @@ -67,7 +66,6 @@ void dWMPathManager_c::setup() { for (int i = 0; i < pathLayer->pathCount; i++) { dKPPath_s *path = pathLayer->paths[i]; - OSReport("Path unlocked by %d-%d, unlock type %d, is available %d", path->unlockLevelNumber[0], path->unlockLevelNumber[1], path->unlockType, path->isAvailable); if (path->unlockType > 0) { u32 conds = save->GetLevelCondition(path->unlockLevelNumber[0] - 1, path->unlockLevelNumber[1] - 1); @@ -297,8 +295,6 @@ void dWMPathManager_c::moveThroughPath() { else { a = timer; } player->jumpOffset = -sin(a * 3.14 / len) * top; - OSReport("%f = sin(%f * 3.14 / %f) * %f", player->jumpOffset, a, len, top); - timer -= move.y; } |