diff options
Diffstat (limited to 'src/poweruphax.cpp')
-rw-r--r-- | src/poweruphax.cpp | 44 |
1 files changed, 31 insertions, 13 deletions
diff --git a/src/poweruphax.cpp b/src/poweruphax.cpp index 91481af..42f42ae 100644 --- a/src/poweruphax.cpp +++ b/src/poweruphax.cpp @@ -35,17 +35,26 @@ dHammerSuitRenderer_c::dHammerSuitRenderer_c() { } dHammerSuitRenderer_c::~dHammerSuitRenderer_c() { } void dHammerSuitRenderer_c::setup(dPlayerModelHandler_c *handler) { + setup(handler, 0); +} + +void dHammerSuitRenderer_c::setup(dPlayerModelHandler_c *handler, int sceneID) { victim = (dPlayerModel_c*)handler->mdlClass; allocator.link(-1, GameHeaps[0], 0, 0x20); nw4r::g3d::ResFile rf(getResource("hammerM", "g3d/suit.brres")); - helmet.setup(rf.GetResMdl("helmet"), &allocator, 0, 1, 0); - SetupTextures_MapObj(&helmet, 0); + if (victim->player_id_1 <= 1) { + helmet.setup(rf.GetResMdl((victim->player_id_1 == 0) ? "marioHelmet" : "luigiHelmet"), &allocator, 0, 1, 0); + SetupTextures_MapObj(&helmet, sceneID); + } - shell.setup(rf.GetResMdl("shell"), &allocator, 0, 1, 0); - SetupTextures_MapObj(&shell, 0); + const char *shellNames[] = { + "shell", "shell", "shell", "shell", "shell" + }; + shell.setup(rf.GetResMdl(shellNames[victim->player_id_1]), &allocator, 0, 1, 0); + SetupTextures_MapObj(&shell, sceneID); allocator.unlink(); @@ -55,23 +64,33 @@ void dHammerSuitRenderer_c::setup(dPlayerModelHandler_c *handler) { (nw4r::g3d::ResMdl*)(((u32)victimModel->scnObj) + 0xE8); //headNodeID = playerResMdl->GetResNode("player_head").GetID(); - headNodeID = playerResMdl->GetResNode("face_1").GetID(); + if (victim->player_id_1 <= 1) + headNodeID = playerResMdl->GetResNode("face_1").GetID(); rootNodeID = playerResMdl->GetResNode("skl_root").GetID(); + + thing = 0; } void dHammerSuitRenderer_c::draw() { if (victim->powerup_id != 7) return; - // Materials: 2=hair 3=hat; Modes: BACK=visible ALL=invisible - SetCullModeForMaterial(&victim->getCurrentModel()->head, 3, GX_CULL_ALL); + if (victim->player_id_1 <= 1) { + // Materials: 2=hair 3=hat; Modes: BACK=visible ALL=invisible + SetCullModeForMaterial(&victim->getCurrentModel()->head, 3, GX_CULL_ALL); + thing += 80; + + Mtx headMtx; + victimModel->getMatrixForNode(headNodeID, headMtx); + mMtx *thing2 = (mMtx*)(&headMtx); + thing2->applyRotationZ(&thing); - Mtx headMtx; - victimModel->getMatrixForNode(headNodeID, headMtx); + helmet.setDrawMatrix(headMtx); + helmet.setScale(1.0f, 1.0f, 1.0f); + helmet.calcWorld(false); - helmet.setDrawMatrix(headMtx); - helmet.setScale(1.0f, 1.0f, 1.0f); - helmet.calcWorld(false); + helmet.scheduleForDrawing(); + } Mtx rootMtx; victimModel->getMatrixForNode(rootNodeID, rootMtx); @@ -80,7 +99,6 @@ void dHammerSuitRenderer_c::draw() { shell.setScale(1.0f, 1.0f, 1.0f); shell.calcWorld(false); - helmet.scheduleForDrawing(); shell.scheduleForDrawing(); } |