From 135a52ec8fe48c5a902e1241250596e8f5359844 Mon Sep 17 00:00:00 2001 From: Super Hackio Date: Wed, 14 Aug 2024 16:54:37 -0700 Subject: [PATCH] MarioMeter at 100% --- csv/Screen.csv | 22 ++++---- data/Game.json | 2 +- data/json/Screen.json | 2 +- docs/PROGRESS.md | 2 +- docs/lib/Game/Screen.md | 2 +- docs/lib/Game/Screen/MarioMeter.md | 24 ++++----- include/Game/Screen/MarioMeter.hpp | 28 ++++++++++ include/Game/Screen/MeterLayout.hpp | 67 +++++++++++++++++++++++ include/Game/Screen/SuddenDeathMeter.hpp | 57 ++++++++++++++++++++ source/Game/Screen/MarioMeter.cpp | 69 ++++++++++++++++++++++++ 10 files changed, 248 insertions(+), 27 deletions(-) create mode 100644 include/Game/Screen/MarioMeter.hpp create mode 100644 include/Game/Screen/MeterLayout.hpp create mode 100644 include/Game/Screen/SuddenDeathMeter.hpp create mode 100644 source/Game/Screen/MarioMeter.cpp diff --git a/csv/Screen.csv b/csv/Screen.csv index 91303f96..899f756e 100644 --- a/csv/Screen.csv +++ b/csv/Screen.csv @@ -1462,17 +1462,17 @@ execute__Q222@unnamed@Manual2P_cpp@27Manual2PNrvScrollRightAfterCFP5Spine,Manual execute__Q222@unnamed@Manual2P_cpp@22Manual2PNrvScrollRightCFP5Spine,Manual2P.o,Screen.a,false execute__Q222@unnamed@Manual2P_cpp@15Manual2PNrvWaitCFP5Spine,Manual2P.o,Screen.a,false execute__Q222@unnamed@Manual2P_cpp@17Manual2PNrvAppearCFP5Spine,Manual2P.o,Screen.a,false -__ct__10MarioMeterFPCc,MarioMeter.o,Screen.a,false -initLifeCount__10MarioMeterFl,MarioMeter.o,Screen.a,false -setLifeCount__10MarioMeterFl,MarioMeter.o,Screen.a,false -powerUp__10MarioMeterFv,MarioMeter.o,Screen.a,false -requestForceAppearHPMeter__10MarioMeterFv,MarioMeter.o,Screen.a,false -requestPlayerMoving__10MarioMeterFv,MarioMeter.o,Screen.a,false -requestPlayerStopped__10MarioMeterFv,MarioMeter.o,Screen.a,false -activate__10MarioMeterFv,MarioMeter.o,Screen.a,false -deactivate__10MarioMeterFv,MarioMeter.o,Screen.a,false -__dt__10MarioMeterFv,MarioMeter.o,Screen.a,false -init__10MarioMeterFRC12JMapInfoIter,MarioMeter.o,Screen.a,false +__ct__10MarioMeterFPCc,MarioMeter.o,Screen.a,true +initLifeCount__10MarioMeterFl,MarioMeter.o,Screen.a,true +setLifeCount__10MarioMeterFl,MarioMeter.o,Screen.a,true +powerUp__10MarioMeterFv,MarioMeter.o,Screen.a,true +requestForceAppearHPMeter__10MarioMeterFv,MarioMeter.o,Screen.a,true +requestPlayerMoving__10MarioMeterFv,MarioMeter.o,Screen.a,true +requestPlayerStopped__10MarioMeterFv,MarioMeter.o,Screen.a,true +activate__10MarioMeterFv,MarioMeter.o,Screen.a,true +deactivate__10MarioMeterFv,MarioMeter.o,Screen.a,true +__dt__10MarioMeterFv,MarioMeter.o,Screen.a,true +init__10MarioMeterFRC12JMapInfoIter,MarioMeter.o,Screen.a,true __ct__13MarioSubMeterFPCc,MarioSubMeter.o,Screen.a,true setBeeLifeRatio__13MarioSubMeterFf,MarioSubMeter.o,Screen.a,true setWaterLifeRatio__13MarioSubMeterFf,MarioSubMeter.o,Screen.a,true diff --git a/data/Game.json b/data/Game.json index d1518108..f673f095 100644 --- a/data/Game.json +++ b/data/Game.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, "label": "Game", - "message": "15.961%", + "message": "15.977%", "color": "blue" } \ No newline at end of file diff --git a/data/json/Screen.json b/data/json/Screen.json index 4949f088..c64d293e 100644 --- a/data/json/Screen.json +++ b/data/json/Screen.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, "label": "Screen", - "message": "8.187%", + "message": "8.406%", "color": "yellow" } \ No newline at end of file diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 77d35b04..fc3d6680 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -21,7 +21,7 @@ | [RhythmLib](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/RhythmLib.md) | 1.2661566868900025% | | [Ride](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/Ride.md) | 6.181993549748319% | | [Scene](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/Scene.md) | 17.116530156366345% | -| [Screen](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/Screen.md) | 8.187081008324295% | +| [Screen](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/Screen.md) | 8.406622845419024% | | [Speaker](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/Speaker.md) | 54.75241889584519% | | [System](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/System.md) | 14.730098411770436% | | [Util](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/Util.md) | 10.090099514848767% | diff --git a/docs/lib/Game/Screen.md b/docs/lib/Game/Screen.md index 0c5dcd5e..3a61ae40 100644 --- a/docs/lib/Game/Screen.md +++ b/docs/lib/Game/Screen.md @@ -80,7 +80,7 @@ | [LogoFader.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/Screen/LogoFader.md) | 0.0% | 0 / 18 | 0.0% | :x: | [LuigiLetter.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/Screen/LuigiLetter.md) | 0.0% | 0 / 20 | 0.0% | :x: | [Manual2P.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/Screen/Manual2P.md) | 0.0% | 0 / 30 | 0.0% | :x: -| [MarioMeter.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/Screen/MarioMeter.md) | 0.0% | 0 / 11 | 0.0% | :x: +| [MarioMeter.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/Screen/MarioMeter.md) | 100.0% | 11 / 11 | 100.0% | :white_check_mark: | [MarioSubMeter.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/Screen/MarioSubMeter.md) | 100.0% | 10 / 10 | 100.0% | :white_check_mark: | [MessageTagSkipTagProcessor.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/Screen/MessageTagSkipTagProcessor.md) | 37.5% | 3 / 13 | 23.076923076923077% | :eight_pointed_black_star: | [MeterLayout.o](https://github.com/shibbo/Petari/blob/master/docs/lib/Game/Screen/MeterLayout.md) | 0.0% | 0 / 53 | 0.0% | :x: diff --git a/docs/lib/Game/Screen/MarioMeter.md b/docs/lib/Game/Screen/MarioMeter.md index 603c6933..00f2ef82 100644 --- a/docs/lib/Game/Screen/MarioMeter.md +++ b/docs/lib/Game/Screen/MarioMeter.md @@ -5,18 +5,18 @@ | :white_check_mark: | Function is completed. -# 0 / 11 Completed -- (0.0%) +# 11 / 11 Completed -- (100.0%) # MarioMeter.o | Symbol | Decompiled? | | ------------- | ------------- | -| `__ct__10MarioMeterFPCc` | :x: | -| `initLifeCount__10MarioMeterFl` | :x: | -| `setLifeCount__10MarioMeterFl` | :x: | -| `powerUp__10MarioMeterFv` | :x: | -| `requestForceAppearHPMeter__10MarioMeterFv` | :x: | -| `requestPlayerMoving__10MarioMeterFv` | :x: | -| `requestPlayerStopped__10MarioMeterFv` | :x: | -| `activate__10MarioMeterFv` | :x: | -| `deactivate__10MarioMeterFv` | :x: | -| `__dt__10MarioMeterFv` | :x: | -| `init__10MarioMeterFRC12JMapInfoIter` | :x: | +| `__ct__10MarioMeterFPCc` | :white_check_mark: | +| `initLifeCount__10MarioMeterFl` | :white_check_mark: | +| `setLifeCount__10MarioMeterFl` | :white_check_mark: | +| `powerUp__10MarioMeterFv` | :white_check_mark: | +| `requestForceAppearHPMeter__10MarioMeterFv` | :white_check_mark: | +| `requestPlayerMoving__10MarioMeterFv` | :white_check_mark: | +| `requestPlayerStopped__10MarioMeterFv` | :white_check_mark: | +| `activate__10MarioMeterFv` | :white_check_mark: | +| `deactivate__10MarioMeterFv` | :white_check_mark: | +| `__dt__10MarioMeterFv` | :white_check_mark: | +| `init__10MarioMeterFRC12JMapInfoIter` | :white_check_mark: | diff --git a/include/Game/Screen/MarioMeter.hpp b/include/Game/Screen/MarioMeter.hpp new file mode 100644 index 00000000..3935404d --- /dev/null +++ b/include/Game/Screen/MarioMeter.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include "Game/NameObj/NameObj.hpp" + +class MeterLayout; +class SuddenDeathMeter; + +class MarioMeter : public NameObj { +public: + MarioMeter(const char *); + + virtual ~MarioMeter(); + + virtual void init(const JMapInfoIter &rIter); + + void initLifeCount(s32); + void setLifeCount(s32); + void powerUp(); + void requestForceAppearHPMeter(); + void requestPlayerMoving(); + void requestPlayerStopped(); + void activate(); + void deactivate(); + + MeterLayout *mHitPointMeter; // _C + SuddenDeathMeter* mSuddenDeathMeter; // _10 + bool mUseSuddenDeath; // _14 +}; \ No newline at end of file diff --git a/include/Game/Screen/MeterLayout.hpp b/include/Game/Screen/MeterLayout.hpp new file mode 100644 index 00000000..84278d08 --- /dev/null +++ b/include/Game/Screen/MeterLayout.hpp @@ -0,0 +1,67 @@ +#pragma once + +#include "Game/LiveActor/Nerve.hpp" +#include "Game/Screen/LayoutActor.hpp" +#include "JSystem/JGeometry/TVec.hpp" + +class CountUpPaneRumbler; + +class MeterLayout : public LayoutActor { +public: + MeterLayout(const char *, const char *); + + virtual ~MeterLayout(); + + virtual void init(const JMapInfoIter &rIter); + virtual void control(); + + void requestActive(); + void requestDeactivate(); + void requestPowerUp(); + void requestForceAppear(); + void requestPlayerMoving(); + void requestPlayerStopped(); + void initCount(s32); + void setCount(s32); + void exeAppear(); + void exeWaitStart(); + void exeWait(); + void exePowerUp(); + void exeMeterMove(); + void exeCounterMove(); + void exeRecover(); + void exeDamage(); + void exeBreakMeter(); + void exeZeroMeter(); + void exeZeroMeterBreak(); + void calcMarioHeadPosition(TVec2f *) const; + void calcPowerUpMeterBasePosition(TVec2f *) const; + void setAnimBase(); + void setCountAnimFrame(); + void setRecoveryCountAnimFrame(); + + CountUpPaneRumbler* mCountUpPaneRumbler; // _20 + s32 _24; // _24 + s32 _28; // _28 + TVec2f mFollowPos; // _2C + TVec2f mFollowPosW; // _34 + TVec2f _38; // _38 + s32 mCount; // _44 + f32 _48; // _48 + f32 _4C; // _4C +}; + +namespace NrvMeterLayout { + NERVE_DECL_NULL(MeterLayoutNrvHide); + NERVE_DECL_EXE(MeterLayoutNrvAppear, MeterLayout, Appear); + NERVE_DECL_EXE(MeterLayoutNrvWait, MeterLayout, Wait); + NERVE_DECL_EXE(MeterLayoutNrvWaitStart, MeterLayout, WaitStart); + NERVE_DECL_EXE(MeterLayoutNrvPowerUp, MeterLayout, PowerUp); + NERVE_DECL_EXE(MeterLayoutNrvMeterMove, MeterLayout, MeterMove); + NERVE_DECL_EXE(MeterLayoutNrvCounterMove, MeterLayout, CounterMove); + NERVE_DECL_EXE(MeterLayoutNrvRecover, MeterLayout, Recover); + NERVE_DECL_EXE(MeterLayoutNrvDamage, MeterLayout, Damage); + NERVE_DECL_EXE(MeterLayoutNrvBreakMeter, MeterLayout, BreakMeter); + NERVE_DECL_EXE(MeterLayoutNrvZeroMeter, MeterLayout, ZeroMeter); + NERVE_DECL_EXE(MeterLayoutNrvZeroMeterBreak, MeterLayout, ZeroMeterBreak); +} // namespace NrvMeterLayout \ No newline at end of file diff --git a/include/Game/Screen/SuddenDeathMeter.hpp b/include/Game/Screen/SuddenDeathMeter.hpp new file mode 100644 index 00000000..b9f3899d --- /dev/null +++ b/include/Game/Screen/SuddenDeathMeter.hpp @@ -0,0 +1,57 @@ +#pragma once + +#include "Game/LiveActor/Nerve.hpp" +#include "Game/Screen/LayoutActor.hpp" +#include "JSystem/JGeometry/TVec.hpp" + +class CountUpPaneRumbler; + +class SuddenDeathMeter : public LayoutActor { +public: + SuddenDeathMeter(const char *, const char *); + + virtual ~SuddenDeathMeter(); + + virtual void init(const JMapInfoIter &rIter); + virtual void control(); + + void requestActive(); + void requestDeactivate(); + void requestPowerUp(); + void requestForceAppear(); + void requestPlayerMoving(); + void exeAppear(); + void exeWait(); + void exePowerUp(); + void exeMeterMove(); + void exeCounterMove(); + void exeBreakMeter(); + void exeZeroMeter(); + void exeZeroMeterBreak(); + void initCount(s32); + void setCount(s32); + void calcMarioHeadPosition(TVec2f *) const; + void calcPowerUpMeterBasePosition(TVec2f *) const; + void setPowerUpMeterPosition(const TVec2f &); + void setAnimBase(); + void setCountAnimFrame(); + void setRecoveryCountAnimFrame(); + + CountUpPaneRumbler *mCountUpPaneRumbler; // _20 + TVec2f mFollowPosW; // _24 + TVec2f _2C; // _2C + s32 mCount; // _34 + f32 _38; // _38 + f32 _3C; // _3C +}; + +namespace NrvSuddenDeathMeter { + NERVE_DECL_EXE(SuddenDeathMeterNrvAppear, SuddenDeathMeter, Appear); + NERVE_DECL_EXE(SuddenDeathMeterNrvWait, SuddenDeathMeter, Wait); + NERVE_DECL_EXE(SuddenDeathMeterNrvPowerUp, SuddenDeathMeter, PowerUp); + NERVE_DECL_EXE(SuddenDeathMeterNrvMeterMove, SuddenDeathMeter, MeterMove); + NERVE_DECL_EXE(SuddenDeathMeterNrvCounterMove, SuddenDeathMeter, CounterMove); + NERVE_DECL_EXE(SuddenDeathMeterNrvBreakMeter, SuddenDeathMeter, BreakMeter); + NERVE_DECL_EXE(SuddenDeathMeterNrvZeroMeter, SuddenDeathMeter, ZeroMeter); + NERVE_DECL_EXE(SuddenDeathMeterNrvZeroMeterBreak, SuddenDeathMeter, ZeroMeterBreak); +} // namespace NrvSuddenDeathMeter \ No newline at end of file diff --git a/source/Game/Screen/MarioMeter.cpp b/source/Game/Screen/MarioMeter.cpp new file mode 100644 index 00000000..176f45c5 --- /dev/null +++ b/source/Game/Screen/MarioMeter.cpp @@ -0,0 +1,69 @@ +#include "Game/Screen/MarioMeter.hpp" +#include "Game/Screen/MeterLayout.hpp" +#include "Game/Screen/SuddenDeathMeter.hpp" +#include "Game/Util/ObjUtil.hpp" + +MarioMeter::MarioMeter(const char *pName) : NameObj(pName) { + mHitPointMeter = nullptr; + mSuddenDeathMeter = nullptr; + mUseSuddenDeath = false; +} + +void MarioMeter::initLifeCount(s32 life) { + if (life == 1) { + mUseSuddenDeath = true; + mSuddenDeathMeter->initCount(life); + mHitPointMeter->kill(); + } + else { + mUseSuddenDeath = false; + mHitPointMeter->initCount(life); + mSuddenDeathMeter->kill(); + } +} + +void MarioMeter::setLifeCount(s32 life) { + mUseSuddenDeath ? mSuddenDeathMeter->setCount(life) : mHitPointMeter->setCount(life); +} + +void MarioMeter::powerUp() { + if (mUseSuddenDeath) { + MR::requestMovementOn(mSuddenDeathMeter); + mSuddenDeathMeter->requestPowerUp(); + } + else { + MR::requestMovementOn(mHitPointMeter); + mHitPointMeter->requestPowerUp(); + } +} + +void MarioMeter::requestForceAppearHPMeter() { + mUseSuddenDeath ? mSuddenDeathMeter->requestForceAppear() : mHitPointMeter->requestForceAppear(); +} + +void MarioMeter::requestPlayerMoving() { + mUseSuddenDeath ? mSuddenDeathMeter->requestPlayerMoving() : mHitPointMeter->requestPlayerMoving(); +} + +void MarioMeter::requestPlayerStopped() { + mUseSuddenDeath ? mSuddenDeathMeter->requestPlayerMoving() : mHitPointMeter->requestPlayerStopped(); +} + +void MarioMeter::activate() { + mUseSuddenDeath ? mSuddenDeathMeter->requestActive() : mHitPointMeter->requestActive(); +} + +void MarioMeter::deactivate() { + mUseSuddenDeath ? mSuddenDeathMeter->requestDeactivate() : mHitPointMeter->requestDeactivate(); +} + +MarioMeter::~MarioMeter() { + +} + +void MarioMeter::init(const JMapInfoIter &rIter) { + mHitPointMeter = new MeterLayout("通常HPメーター", "HitPointMeter"); + mHitPointMeter->initWithoutIter(); + mSuddenDeathMeter = new SuddenDeathMeter("サドンデスHPメーター", "SuddenDeathMeter"); + mSuddenDeathMeter->initWithoutIter(); +} \ No newline at end of file