From d2dcf3250ea5e9e2197c8f640d2a2cf8c963f74d Mon Sep 17 00:00:00 2001 From: Treeki Date: Thu, 23 Feb 2012 05:40:10 +0100 Subject: added water BG to World Maps --- src/koopatlas/camera.cpp | 25 ++++++++++++------------- src/koopatlas/map.cpp | 36 +++++++++++++++++++++++++++++++++--- src/koopatlas/map.h | 6 ++++++ src/koopatlas/mapdata.cpp | 7 ++++++- src/koopatlas/mapdata.h | 2 ++ src/koopatlas/pathmanager.cpp | 2 +- src/koopatlas/player.cpp | 2 +- 7 files changed, 61 insertions(+), 19 deletions(-) diff --git a/src/koopatlas/camera.cpp b/src/koopatlas/camera.cpp index 9efbcd6..87547d9 100644 --- a/src/koopatlas/camera.cpp +++ b/src/koopatlas/camera.cpp @@ -70,30 +70,29 @@ int dWorldCamera_c::onDelete() { int dWorldCamera_c::onExecute() { int heldButtons = Remocon_GetButtons(GetActiveRemocon()); if (heldButtons & WPAD_MINUS) { - int nowPressed = Remocon_GetPressed(GetActiveRemocon()); bool change = false; - if (nowPressed & WPAD_LEFT) { - currentX -= 16; + if (heldButtons & WPAD_LEFT) { + currentX -= 8.0f; change = true; } - if (nowPressed & WPAD_RIGHT) { - currentX += 16; + if (heldButtons & WPAD_RIGHT) { + currentX += 8.0f; change = true; } - if (nowPressed & WPAD_UP) { - currentY += 16; + if (heldButtons & WPAD_UP) { + currentY += 8.0f; change = true; } - if (nowPressed & WPAD_DOWN) { - currentY -= 16; + if (heldButtons & WPAD_DOWN) { + currentY -= 8.0f; change = true; } - if (nowPressed & WPAD_B) { - zoomLevel -= 0.02; + if (heldButtons & WPAD_B) { + zoomLevel -= 0.10f; change = true; } - if (nowPressed & WPAD_A) { - zoomLevel += 0.02; + if (heldButtons & WPAD_A) { + zoomLevel += 0.10f; change = true; } if (change) { diff --git a/src/koopatlas/map.cpp b/src/koopatlas/map.cpp index ac7cc51..4600556 100644 --- a/src/koopatlas/map.cpp +++ b/src/koopatlas/map.cpp @@ -52,14 +52,44 @@ int dWMMap_c::onCreate() { else OSReport(":(\n"); + bgMatrix.translation(1140.0f, -2910.0f, -500.0f); + s16 rot = 0x4000; + bgMatrix.applyRotationX(&rot); + + allocator.link(-1, GameHeaps[0], 0, 0x20); + nw4r::g3d::ResFile rf(dScKoopatlas_c::instance->mapData.bgLoader.buffer); + rf.CheckRevision(); + rf.Init(); + rf.Bind(rf); + + // Todo: Check flags. 0x32C definitely supports texsrt + nw4r::g3d::ResMdl modelRes = rf.GetResMdl("KpBG"); + nw4r::g3d::ResAnmTexSrt anmRes = rf.GetResAnmTexSrt("KpBG"); + + bgModel.setup(modelRes, &allocator, 0x32C, 1, 0); + bgSrtAnm.setup(modelRes, anmRes, &allocator, 0, 1); + bgSrtAnm.bindEntry(&bgModel, anmRes, 0, 0); + bgModel.bindAnim(&bgSrtAnm, 0.0f); + + allocator.unlink(); + return true; } int dWMMap_c::onDelete() { return true; } -int dWMMap_c::onExecute() { return true; } +int dWMMap_c::onExecute() { + bgSrtAnm.process(); + + bgModel.setDrawMatrix(bgMatrix); + bgModel.setScale(1.0f, 1.0f, 1.0f); + bgModel.calcWorld(false); + + return true; +} int dWMMap_c::onDraw() { renderer.scheduleForDrawing(); + bgModel.scheduleForDrawing(); return true; } @@ -81,13 +111,13 @@ void dWMMap_c::renderer_c::drawLayers() { dKPMapData_c *dataCls = &dScKoopatlas_c::instance->mapData; dKPMapFile_s *data = dataCls->data; - baseZ = -100 - (2 * data->layerCount); + baseZ = -100.0f - (2 * data->layerCount); beginRendering(); for (int iLayer = data->layerCount - 1; iLayer >= 0; iLayer--) { dKPLayer_s *layer = data->layers[iLayer]; - renderMtx[2][3] += 2; + renderMtx[2][3] += 2.0f; TileReport("Checking layer %d with type %d\n", iLayer, layer->type); if (layer->type == dKPLayer_s::OBJECTS) diff --git a/src/koopatlas/map.h b/src/koopatlas/map.h index c74384f..72dd2d5 100644 --- a/src/koopatlas/map.h +++ b/src/koopatlas/map.h @@ -59,6 +59,12 @@ class dWMMap_c : public dBase_c { renderer_c renderer; + mHeapAllocator_c allocator; + m3d::mdl_c bgModel; + m3d::anmTexSrt_c bgSrtAnm; + mMtx bgMatrix; + S16Vec thing; + static dWMMap_c *build(); static dWMMap_c *instance; }; diff --git a/src/koopatlas/mapdata.cpp b/src/koopatlas/mapdata.cpp index fb09f1b..5b38126 100644 --- a/src/koopatlas/mapdata.cpp +++ b/src/koopatlas/mapdata.cpp @@ -50,7 +50,10 @@ bool dKPMapData_c::load(const char *filename) { if (!fixedUp) fixup(); - return loadTilesets(); + bool didLoadTilesets = loadTilesets(); + bool didLoadBG = (bgLoader.load("/Maps/Water.brres") != 0); + + return didLoadTilesets && didLoadBG; } bool dKPMapData_c::loadTilesets() { @@ -88,6 +91,8 @@ void dKPMapData_c::unloadTilesets() { delete[] tilesetLoaders; } + + bgLoader.unload(); } void dKPMapData_c::fixup() { diff --git a/src/koopatlas/mapdata.h b/src/koopatlas/mapdata.h index f9aa545..e75925d 100644 --- a/src/koopatlas/mapdata.h +++ b/src/koopatlas/mapdata.h @@ -193,6 +193,8 @@ class dKPMapData_c { dKPMapFile_s *data; dKPLayer_s *pathLayer; + dDvdLoader_c bgLoader; + dKPMapData_c(); bool load(const char *filename); ~dKPMapData_c(); diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp index 30f4920..609b3a2 100644 --- a/src/koopatlas/pathmanager.cpp +++ b/src/koopatlas/pathmanager.cpp @@ -83,7 +83,7 @@ void dWMPathManager_c::moveThroughPath() { Vec move = (Vec){to->x - from->x, to->y - from->y, 0}; VECNormalize(&move, &move); - VECScale(&move, &move, 1.5); + VECScale(&move, &move, 3.0f); daWMPlayer_c *player = daWMPlayer_c::instance; diff --git a/src/koopatlas/player.cpp b/src/koopatlas/player.cpp index 2255eb7..c89535f 100644 --- a/src/koopatlas/player.cpp +++ b/src/koopatlas/player.cpp @@ -15,7 +15,7 @@ int daWMPlayer_c::onCreate() { pos = (Vec){0.0f,0.0f,3000.0f}; rot = (S16Vec){0,0,0}; - scale = (Vec){1.0f,1.0f,1.0f}; + scale = (Vec){1.6f,1.6f,1.6f}; current_param = 0; -- cgit v1.2.3