Scene: Implement StageSceneStatePauseMenu (#452)

This commit is contained in:
GRAnimated 2025-03-28 10:51:52 -04:00 committed by GitHub
parent 9230f6f573
commit 9408a62cac
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
19 changed files with 1270 additions and 85 deletions

View file

@ -31527,63 +31527,63 @@ Address,Quality,Size,Name
0x00000071004e9d60,U,000008,_ZNK12_GLOBAL__N_141StageSceneStateOptionNrvWaitEndDecideAnim7executeEPN2al11NerveKeeperE
0x00000071004e9d68,U,000004,_ZN4sead10StrTreeMapILi32EPN2nn4ui2d11TextureInfoEE4NodeD0Ev
0x00000071004e9d6c,U,000032,_ZN4sead10StrTreeMapILi32EPN2nn4ui2d11TextureInfoEE4Node6erase_Ev
0x00000071004e9d8c,U,001204,_ZN24StageSceneStatePauseMenuC1EPKcPN2al5SceneEPNS2_25SimpleLayoutAppearWaitEndEP14GameDataHolderRKNS2_13SceneInitInfoERKNS2_13ActorInitInfoERKNS2_14LayoutInitInfoEPNS2_13WindowConfirmEP16StageSceneLayoutbP31SceneAudioSystemPauseController
0x00000071004ea240,U,000104,_ZN24StageSceneStatePauseMenu6appearEv
0x00000071004ea2a8,U,000308,_ZN24StageSceneStatePauseMenu4killEv
0x00000071004ea3dc,U,000156,_ZN24StageSceneStatePauseMenu13killPauseMenuEv
0x00000071004ea478,U,000100,_ZN24StageSceneStatePauseMenu14killMarioModelEv
0x00000071004ea4dc,U,000076,_ZNK24StageSceneStatePauseMenu14isNeedKillHostEv
0x00000071004ea528,U,000060,_ZN24StageSceneStatePauseMenu11startNormalEv
0x00000071004ea564,U,000012,_ZN24StageSceneStatePauseMenu15startAfterTitleEv
0x00000071004ea570,U,000008,_ZN24StageSceneStatePauseMenu19killAllOptionLayoutEv
0x00000071004ea578,U,000032,_ZNK24StageSceneStatePauseMenu13isEndToCancelEv
0x00000071004ea598,U,000008,_ZNK24StageSceneStatePauseMenu11isEndToHelpEv
0x00000071004ea5a0,U,000012,_ZNK24StageSceneStatePauseMenu10isLoadDataEv
0x00000071004ea5ac,U,000008,_ZNK24StageSceneStatePauseMenu17getSelectedFileIdEv
0x00000071004ea5b4,U,000008,_ZNK24StageSceneStatePauseMenu16isChangeLanguageEv
0x00000071004ea5bc,U,000012,_ZNK24StageSceneStatePauseMenu11getLanguageEv
0x00000071004ea5c8,U,000008,_ZNK24StageSceneStatePauseMenu9isNewGameEv
0x00000071004ea5d0,U,000008,_ZNK24StageSceneStatePauseMenu15isModeSelectEndEv
0x00000071004ea5d8,U,000148,_ZN24StageSceneStatePauseMenu25checkNeedKillByHostAndEndEv
0x00000071004ea66c,U,000024,_ZN24StageSceneStatePauseMenu16startActionMarioEPKc
0x00000071004ea684,U,000008,_ZNK24StageSceneStatePauseMenu13getMarioActorEv
0x00000071004ea68c,U,000080,_ZNK24StageSceneStatePauseMenu12isDrawLayoutEv
0x00000071004ea6dc,U,000076,_ZNK24StageSceneStatePauseMenu16isDrawLayoutMainEv
0x00000071004ea728,U,000164,_ZNK24StageSceneStatePauseMenu18isDrawViewRendererEv
0x00000071004ea7cc,U,000228,_ZNK24StageSceneStatePauseMenu15isDrawChromakeyEv
0x00000071004ea8b0,U,000460,_ZN24StageSceneStatePauseMenu9exeAppearEv
0x00000071004eaa7c,U,000300,_ZN24StageSceneStatePauseMenu9setNormalEv
0x00000071004eaba8,U,000128,_ZN24StageSceneStatePauseMenu16appearMarioModelEv
0x00000071004eac28,U,000280,_ZN24StageSceneStatePauseMenu16updatePlayerPoseEv
0x00000071004ead40,U,000608,_ZN24StageSceneStatePauseMenu7exeWaitEv
0x00000071004eafa0,U,000004,_ZN24StageSceneStatePauseMenu20changeNerveAndReturnEPKN2al5NerveE
0x00000071004eafa4,U,000172,_ZN24StageSceneStatePauseMenu17exeFadeBeforeHelpEv
0x00000071004eb050,U,000440,_ZN24StageSceneStatePauseMenu12exeStartHelpEv
0x00000071004eb208,U,000172,_ZN24StageSceneStatePauseMenu11exeWaitDrawEv
0x00000071004eb2b4,U,000180,_ZN24StageSceneStatePauseMenu6exeEndEv
0x00000071004eb368,U,000288,_ZN24StageSceneStatePauseMenu20exeStartSeparatePlayEv
0x00000071004eb488,U,000232,_ZN24StageSceneStatePauseMenu18exeEndSeparatePlayEv
0x00000071004eb570,U,000240,_ZN24StageSceneStatePauseMenu9exeOptionEv
0x00000071004eb660,U,000140,_ZN24StageSceneStatePauseMenu7exeSaveEv
0x00000071004eb6ec,U,000592,_ZN24StageSceneStatePauseMenu17exeConfirmNewGameEv
0x00000071004eb93c,U,000268,_ZN24StageSceneStatePauseMenu20exeNotExistEmptyFileEv
0x00000071004eba48,U,000008,_ZN24StageSceneStatePauseMenu16startPauseCameraEv
0x00000071004eba50,U,000224,_ZN24StageSceneStatePauseMenu13setAfterTitleEv
0x00000071004ebb30,U,000036,_ZN24StageSceneStatePauseMenuD0Ev
0x00000071004ebb54,U,000008,_ZNK12_GLOBAL__N_133StageSceneStatePauseMenuNrvAppear7executeEPN2al11NerveKeeperE
0x00000071004ebb5c,U,000008,_ZNK12_GLOBAL__N_144StageSceneStatePauseMenuNrvStartSeparatePlay7executeEPN2al11NerveKeeperE
0x00000071004ebb64,U,000008,_ZNK12_GLOBAL__N_142StageSceneStatePauseMenuNrvEndSeparatePlay7executeEPN2al11NerveKeeperE
0x00000071004ebb6c,U,000008,_ZNK12_GLOBAL__N_133StageSceneStatePauseMenuNrvOption7executeEPN2al11NerveKeeperE
0x00000071004ebb74,U,000008,_ZNK12_GLOBAL__N_141StageSceneStatePauseMenuNrvOptionFromHelp7executeEPN2al11NerveKeeperE
0x00000071004ebb7c,U,000008,_ZNK12_GLOBAL__N_131StageSceneStatePauseMenuNrvWait7executeEPN2al11NerveKeeperE
0x00000071004ebb84,U,000008,_ZNK12_GLOBAL__N_130StageSceneStatePauseMenuNrvEnd7executeEPN2al11NerveKeeperE
0x00000071004ebb8c,U,000008,_ZNK12_GLOBAL__N_135StageSceneStatePauseMenuNrvWaitDraw7executeEPN2al11NerveKeeperE
0x00000071004ebb94,U,000008,_ZNK12_GLOBAL__N_131StageSceneStatePauseMenuNrvSave7executeEPN2al11NerveKeeperE
0x00000071004ebb9c,U,000008,_ZNK12_GLOBAL__N_141StageSceneStatePauseMenuNrvConfirmNewGame7executeEPN2al11NerveKeeperE
0x00000071004ebba4,U,000008,_ZNK12_GLOBAL__N_144StageSceneStatePauseMenuNrvNotExistEmptyFile7executeEPN2al11NerveKeeperE
0x00000071004ebbac,U,000008,_ZNK12_GLOBAL__N_141StageSceneStatePauseMenuNrvFadeBeforeHelp7executeEPN2al11NerveKeeperE
0x00000071004ebbb4,U,000008,_ZNK12_GLOBAL__N_136StageSceneStatePauseMenuNrvStartHelp7executeEPN2al11NerveKeeperE
0x00000071004ebbbc,U,000008,_ZNK12_GLOBAL__N_146StageSceneStatePauseMenuNrvStartHelpFromOption7executeEPN2al11NerveKeeperE
0x00000071004e9d8c,O,001204,_ZN24StageSceneStatePauseMenuC1EPKcPN2al5SceneEPNS2_25SimpleLayoutAppearWaitEndEP14GameDataHolderRKNS2_13SceneInitInfoERKNS2_13ActorInitInfoERKNS2_14LayoutInitInfoEPNS2_13WindowConfirmEP16StageSceneLayoutbP31SceneAudioSystemPauseController
0x00000071004ea240,O,000104,_ZN24StageSceneStatePauseMenu6appearEv
0x00000071004ea2a8,O,000308,_ZN24StageSceneStatePauseMenu4killEv
0x00000071004ea3dc,O,000156,_ZN24StageSceneStatePauseMenu13killPauseMenuEv
0x00000071004ea478,O,000100,_ZN24StageSceneStatePauseMenu14killMarioModelEv
0x00000071004ea4dc,O,000076,_ZNK24StageSceneStatePauseMenu14isNeedKillHostEv
0x00000071004ea528,O,000060,_ZN24StageSceneStatePauseMenu11startNormalEv
0x00000071004ea564,O,000012,_ZN24StageSceneStatePauseMenu15startAfterTitleEv
0x00000071004ea570,O,000008,_ZN24StageSceneStatePauseMenu19killAllOptionLayoutEv
0x00000071004ea578,O,000032,_ZNK24StageSceneStatePauseMenu13isEndToCancelEv
0x00000071004ea598,O,000008,_ZNK24StageSceneStatePauseMenu11isEndToHelpEv
0x00000071004ea5a0,O,000012,_ZNK24StageSceneStatePauseMenu10isLoadDataEv
0x00000071004ea5ac,O,000008,_ZNK24StageSceneStatePauseMenu17getSelectedFileIdEv
0x00000071004ea5b4,O,000008,_ZNK24StageSceneStatePauseMenu16isChangeLanguageEv
0x00000071004ea5bc,O,000012,_ZNK24StageSceneStatePauseMenu11getLanguageEv
0x00000071004ea5c8,O,000008,_ZNK24StageSceneStatePauseMenu9isNewGameEv
0x00000071004ea5d0,O,000008,_ZNK24StageSceneStatePauseMenu15isModeSelectEndEv
0x00000071004ea5d8,O,000148,_ZN24StageSceneStatePauseMenu25checkNeedKillByHostAndEndEv
0x00000071004ea66c,O,000024,_ZN24StageSceneStatePauseMenu16startActionMarioEPKc
0x00000071004ea684,O,000008,_ZNK24StageSceneStatePauseMenu13getMarioActorEv
0x00000071004ea68c,O,000080,_ZNK24StageSceneStatePauseMenu12isDrawLayoutEv
0x00000071004ea6dc,O,000076,_ZNK24StageSceneStatePauseMenu16isDrawLayoutMainEv
0x00000071004ea728,O,000164,_ZNK24StageSceneStatePauseMenu18isDrawViewRendererEv
0x00000071004ea7cc,O,000228,_ZNK24StageSceneStatePauseMenu15isDrawChromakeyEv
0x00000071004ea8b0,O,000460,_ZN24StageSceneStatePauseMenu9exeAppearEv
0x00000071004eaa7c,O,000300,_ZN24StageSceneStatePauseMenu9setNormalEv
0x00000071004eaba8,O,000128,_ZN24StageSceneStatePauseMenu16appearMarioModelEv
0x00000071004eac28,O,000280,_ZN24StageSceneStatePauseMenu16updatePlayerPoseEv
0x00000071004ead40,O,000608,_ZN24StageSceneStatePauseMenu7exeWaitEv
0x00000071004eafa0,O,000004,_ZN24StageSceneStatePauseMenu20changeNerveAndReturnEPKN2al5NerveE
0x00000071004eafa4,O,000172,_ZN24StageSceneStatePauseMenu17exeFadeBeforeHelpEv
0x00000071004eb050,O,000440,_ZN24StageSceneStatePauseMenu12exeStartHelpEv
0x00000071004eb208,O,000172,_ZN24StageSceneStatePauseMenu11exeWaitDrawEv
0x00000071004eb2b4,O,000180,_ZN24StageSceneStatePauseMenu6exeEndEv
0x00000071004eb368,O,000288,_ZN24StageSceneStatePauseMenu20exeStartSeparatePlayEv
0x00000071004eb488,O,000232,_ZN24StageSceneStatePauseMenu18exeEndSeparatePlayEv
0x00000071004eb570,O,000240,_ZN24StageSceneStatePauseMenu9exeOptionEv
0x00000071004eb660,O,000140,_ZN24StageSceneStatePauseMenu7exeSaveEv
0x00000071004eb6ec,O,000592,_ZN24StageSceneStatePauseMenu17exeConfirmNewGameEv
0x00000071004eb93c,O,000268,_ZN24StageSceneStatePauseMenu20exeNotExistEmptyFileEv
0x00000071004eba48,O,000008,_ZN24StageSceneStatePauseMenu16startPauseCameraEv
0x00000071004eba50,O,000224,_ZN24StageSceneStatePauseMenu13setAfterTitleEv
0x00000071004ebb30,O,000036,_ZN24StageSceneStatePauseMenuD0Ev
0x00000071004ebb54,O,000008,_ZNK12_GLOBAL__N_133StageSceneStatePauseMenuNrvAppear7executeEPN2al11NerveKeeperE
0x00000071004ebb5c,O,000008,_ZNK12_GLOBAL__N_144StageSceneStatePauseMenuNrvStartSeparatePlay7executeEPN2al11NerveKeeperE
0x00000071004ebb64,O,000008,_ZNK12_GLOBAL__N_142StageSceneStatePauseMenuNrvEndSeparatePlay7executeEPN2al11NerveKeeperE
0x00000071004ebb6c,O,000008,_ZNK12_GLOBAL__N_133StageSceneStatePauseMenuNrvOption7executeEPN2al11NerveKeeperE
0x00000071004ebb74,O,000008,_ZNK12_GLOBAL__N_141StageSceneStatePauseMenuNrvOptionFromHelp7executeEPN2al11NerveKeeperE
0x00000071004ebb7c,O,000008,_ZNK12_GLOBAL__N_131StageSceneStatePauseMenuNrvWait7executeEPN2al11NerveKeeperE
0x00000071004ebb84,O,000008,_ZNK12_GLOBAL__N_130StageSceneStatePauseMenuNrvEnd7executeEPN2al11NerveKeeperE
0x00000071004ebb8c,O,000008,_ZNK12_GLOBAL__N_135StageSceneStatePauseMenuNrvWaitDraw7executeEPN2al11NerveKeeperE
0x00000071004ebb94,O,000008,_ZNK12_GLOBAL__N_131StageSceneStatePauseMenuNrvSave7executeEPN2al11NerveKeeperE
0x00000071004ebb9c,O,000008,_ZNK12_GLOBAL__N_141StageSceneStatePauseMenuNrvConfirmNewGame7executeEPN2al11NerveKeeperE
0x00000071004ebba4,O,000008,_ZNK12_GLOBAL__N_144StageSceneStatePauseMenuNrvNotExistEmptyFile7executeEPN2al11NerveKeeperE
0x00000071004ebbac,O,000008,_ZNK12_GLOBAL__N_141StageSceneStatePauseMenuNrvFadeBeforeHelp7executeEPN2al11NerveKeeperE
0x00000071004ebbb4,O,000008,_ZNK12_GLOBAL__N_136StageSceneStatePauseMenuNrvStartHelp7executeEPN2al11NerveKeeperE
0x00000071004ebbbc,O,000008,_ZNK12_GLOBAL__N_146StageSceneStatePauseMenuNrvStartHelpFromOption7executeEPN2al11NerveKeeperE
0x00000071004ebbc4,U,000140,_ZN28StageSceneStateRaceCountDownC1EPN2al5SceneERKNS0_13ActorInitInfoEPNS0_9LiveActorEP10RaceLayout
0x00000071004ebc50,U,000328,
0x00000071004ebd98,U,000140,_ZN28StageSceneStateRaceCountDownC2EPN2al5SceneERKNS0_13ActorInitInfoEPNS0_9LiveActorEP19RaceCountDownLayout

Can't render this file because it is too large.

View file

@ -11,9 +11,17 @@ class GraphicsContext;
}
namespace al {
class Scene;
void setDepthFuncNearDraw(sead::GraphicsContext* context);
void setDepthFuncFarDraw(sead::GraphicsContext* context);
void setDepthFuncNearDraw(sead::GraphicsContext* context);
void setDepthFuncFarDraw(sead::GraphicsContext* context);
bool getAlphaTestEnable(nn::g3d::MaterialObj* material);
} // namespace al
namespace alGraphicsFunction {
void requestUpdateMaterialInfo(al::Scene*);
void validateGpuStressAnalyzer(al::Scene*);
void invalidateGpuStressAnalyzer(al::Scene*);
} // namespace alGraphicsFunction

View file

@ -24,9 +24,13 @@ public:
void setCameraDirector(CameraDirector*);
void setGraphicsSystemInfo(const GraphicsSystemInfo*);
void set_69(bool val) { _69 = val; }
// incomplete
private:
// missing
void* filler[13];
bool _68;
bool _69;
};
} // namespace al

View file

@ -65,6 +65,66 @@ public:
void updateGraphics();
void preDrawGraphics();
ActorResourceHolder* getActorResourceHolder() const { return mActorResourceHolder; }
AreaObjDirector* getAreaObjDirector() const { return mAreaObjDirector; }
ExecuteDirector* getExecuteDirector() const { return mExecuteDirector; }
GravityHolder* getGravityHolder() const { return mGravityHolder; }
EffectSystem* getEffectSystem() const { return mEffectSystem; }
GraphicsSystemInfo* getGraphicsSystemInfo() const { return mGraphicsSystemInfo; }
DrawBufferDirector* getDrawBufferDirector() const { return mDrawBufferDirector; }
ModelDrawBufferUpdater* getModelDrawBufferUpdater() const { return mModelDrawBufferUpdater; }
ExecuteAsyncExecutorUpdate* getExecutorCore1() const { return mExecutorCore1; }
ExecuteAsyncExecutorUpdate* getExecutorCore2() const { return mExecutorCore2; }
ModelDisplayListController* getModelDisplayListController() const {
return mModelDisplayListController;
}
agl::DrawContext* getSceneDrawContext() const { return mSceneDrawContext; }
LiveActorGroup* getDynamicDrawActorGroup() const { return mDynamicDrawActorGroup; }
CameraDirector* getCameraDirector() const { return mCameraDirector; }
ClippingDirector* getClippingDirector() const { return mClippingDirector; }
CollisionDirector* getCollisionDirector() const { return mCollisionDirector; }
ItemDirectorBase* getItemDirector() const { return mItemDirector; }
PlayerHolder* getPlayerHolder() const { return mPlayerHolder; }
HitSensorDirector* getHitSensorDirector() const { return mHitSensorDirector; }
ScreenPointDirector* getScreenPointDirector() const { return mScreenPointDirector; }
ShadowDirector* getShadowDirector() const { return mShadowDirector; }
StageSwitchDirector* getStageSwitchDirector() const { return mStageSwitchDirector; }
SwitchAreaDirector* getSwitchAreaDirector() const { return mSwitchAreaDirector; }
LiveActorGroup* getLiveActorGroupAllActors() const { return mLiveActorGroupAllActors; }
DemoDirector* getDemoDirector() const { return mDemoDirector; }
GamePadSystem* getGamePadSystem() const { return mGamePadSystem; }
PadRumbleDirector* getPadRumbleDirector() const { return mPadRumbleDirector; }
NatureDirector* getNatureDirector() const { return mNatureDirector; }
ModelGroup* getModelGroup() const { return mModelGroup; }
private:
s32 mMaxActors;
ActorResourceHolder* mActorResourceHolder = nullptr;

View file

@ -0,0 +1,68 @@
#pragma once
#include <container/seadPtrArray.h>
#include "Library/Layout/LayoutActor.h"
namespace al {
class LayoutInitInfo;
class WindowConfirm : public LayoutActor {
public:
enum class SelectionType {
None = -1,
HardKey = 0,
List00 = 1,
List01 = 2,
List02 = 3,
};
enum class Direction {
None = 0,
Up = 1,
Down = 2,
};
struct Selection {
SelectionType selectionType;
SelectionType prevSelectionType;
};
WindowConfirm(const LayoutInitInfo&, const char*, const char*);
void setTxtMessage(const char16*);
void setTxtList(s32, const char16*);
void setListNum(s32);
void setCancelIdx(s32);
void appear() override;
void appearWithChoicingCancel();
bool isNerveEnd();
bool tryEnd();
bool isEnableInput();
bool tryUp();
bool tryDown();
bool tryDecide();
bool tryDecideWithoutEnd();
bool tryCancel();
void setCursorToPane();
bool tryCancelWithoutEnd();
void exeHide();
void exeAppear();
void exeWait();
void exeDecide();
void exeDecideAfter();
void exeEnd();
SelectionType getPrevSelectionType() { return mSelection.prevSelectionType; }
private:
Direction mDirection;
Selection mSelection;
s32 mCancelIdx;
bool mIsDecided;
s32 mCooldown;
sead::PtrArray<LayoutActor> mParListArray;
LayoutActor* mCursorActor;
LayoutActor* mButtonActor;
};
} // namespace al

View file

@ -54,6 +54,16 @@ public:
void initScreenCoverCtrl();
void endInit(const ActorInitInfo&);
StageResourceKeeper* getStageResourceKeeper() const { return mStageResourceKeeper; }
LiveActorKit* getLiveActorKit() const { return mLiveActorKit; }
ScreenCoverCtrl* getScreenCoverCtrl() const { return mScreenCoverCtrl; }
AudioDirector* getAudioDirector() const { return mAudioDirector; }
DrawSystemInfo* getDrawSystemInfo() const { return mDrawSystemInfo; }
private:
void initLiveActorKitImpl(const SceneInitInfo&, s32, s32, s32);

View file

@ -50,30 +50,30 @@ bool isInScreen(const sead::Vector2f&, f32);
bool calcWorldPosFromScreen(sead::Vector3f* output, const sead::Vector2f&, const sead::Matrix34f&,
f32); // Always returns true
void calcWorldPosFromScreenPos(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f,
void calcWorldPosFromScreenPos(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
f32);
void calcWorldPosFromScreenPos(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f,
const sead::Vector3f);
void calcWorldPosFromScreenPos(sead::Vector3f* output, const SceneCameraInfo*, const sead::Vector2f,
f32, s32);
void calcWorldPosFromScreenPos(sead::Vector3f* output, const SceneCameraInfo*, const sead::Vector2f,
const sead::Vector3f, s32);
void calcWorldPosFromScreenPosSub(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f,
void calcWorldPosFromScreenPos(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
const sead::Vector3f&);
void calcWorldPosFromScreenPos(sead::Vector3f* output, const SceneCameraInfo*,
const sead::Vector2f&, f32, s32);
void calcWorldPosFromScreenPos(sead::Vector3f* output, const SceneCameraInfo*,
const sead::Vector2f&, const sead::Vector3f&, s32);
void calcWorldPosFromScreenPosSub(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
f32);
void calcWorldPosFromScreenPosSub(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f,
const sead::Vector3f);
void calcWorldPosFromLayoutPos(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f,
void calcWorldPosFromScreenPosSub(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
const sead::Vector3f&);
void calcWorldPosFromLayoutPos(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
f32);
void calcWorldPosFromLayoutPos(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f,
const sead::Vector3f);
void calcWorldPosFromLayoutPos(sead::Vector3f* output, const SceneCameraInfo*, const sead::Vector2f,
s32, s32);
void calcWorldPosFromLayoutPos(sead::Vector3f* output, const SceneCameraInfo*, const sead::Vector2f,
const sead::Vector3f, s32);
void calcWorldPosFromLayoutPosSub(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f,
void calcWorldPosFromLayoutPos(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
const sead::Vector3f&);
void calcWorldPosFromLayoutPos(sead::Vector3f* output, const SceneCameraInfo*,
const sead::Vector2f&, s32, s32);
void calcWorldPosFromLayoutPos(sead::Vector3f* output, const SceneCameraInfo*,
const sead::Vector2f&, const sead::Vector3f&, s32);
void calcWorldPosFromLayoutPosSub(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
f32);
void calcWorldPosFromLayoutPosSub(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f,
const sead::Vector3f);
void calcWorldPosFromLayoutPosSub(sead::Vector3f* output, const IUseCamera*, const sead::Vector2f&,
const sead::Vector3f&);
void calcScreenPosFromWorldPos(sead::Vector2f* output, const IUseCamera*, const sead::Vector3f&);
void calcScreenPosFromWorldPosSub(sead::Vector2f* output, const IUseCamera*, const sead::Vector3f&);

View file

@ -9,6 +9,7 @@ class IUseAudioKeeper;
class ISeModifier;
class MeInfo;
class SePlayParamList;
class AudioDirector;
void startSe(const IUseAudioKeeper*, const sead::SafeString&);
bool verifySeKeeperNull(const IUseAudioKeeper*, const sead::SafeString&);
@ -59,3 +60,7 @@ void setSeUserSyncParamPtrInt(const IUseAudioKeeper*, const s32*, const char*);
void setSeOutputFromController(SePlayParamList*, s32, bool);
void setSeOutputTvDrcRemoteAll(SePlayParamList*);
} // namespace al
namespace alSeFunction {
void stopAllSe(const al::AudioDirector*, u32);
}

View file

@ -54,6 +54,8 @@ public:
void exeDecideInterval();
void exeDecideEnd();
void setMainMenu(bool isMainMenu) { mIsMainMenu = isMainMenu; }
private:
al::LayoutActor* mLayoutActor;
s32 mMenuItemAmount = 0;

View file

@ -0,0 +1,19 @@
#pragma once
#include <basis/seadTypes.h>
namespace al {
class AudioDirector;
}
class SceneAudioSystemPauseController {
public:
SceneAudioSystemPauseController(al::AudioDirector*);
void update();
void tryResume();
void pause(bool);
void resume(s32);
private:
void* filler[2];
};

View file

@ -1,9 +1,22 @@
#pragma once
#include <math/seadQuat.h>
#include "Library/Scene/Scene.h"
#include "Layout/StageSceneLayout.h"
namespace al {
class LayoutActor;
}
class Shine;
class GameDataHolder;
class MapLayout;
class ProjectItemDirector;
class PlayerActorHakoniwa;
class ProjectDemoDirector;
class StageSceneLayout;
class StageScene : public al::Scene {
public:
StageScene();
@ -27,5 +40,61 @@ public:
};
namespace rs {
void tryStartRaceStage(al::Scene*, GameDataHolder*);
bool updateNormalState(al::Scene*);
void updateEffectSystemEnv(al::Scene*);
bool updateNormalStateExcludeGraphics(al::Scene*);
bool updateBirdCarryMeat(al::Scene*);
void updateKitListExcludePlayer(al::Scene*);
void updateKitListExcludeCamera(al::Scene*);
void updateKitListExcludeCameraDemoChangeWorld(al::Scene*);
void updateKitListPlayerGroupNormal(al::Scene*);
void updateKitListDemoPlayerNoPauseEffect(al::Scene*);
void updateKitListDemoPlayerWithPauseEffect(al::Scene*);
void updateKitListDemoPlayerWithPauseEffectAndCalcAtEndClip(al::Scene*);
void updateKitListDemoNormalNoPauseEffect(al::Scene*);
void updateKitListDemoNormalWithPauseEffect(al::Scene*);
void updateKitListDemoCapWorldOpeninglWithPauseEffect(al::Scene*);
void updateKitListLayout(al::Scene*);
void updateKitListPostNoViewRenderer(al::Scene*);
void updateKitListLayoutIgnorePause(al::Scene*);
void updateKitListLayoutOnlyLayoutScene(al::Scene*);
void updateKitListPostWithPauseNormalEffectAndPlayerEffect(al::Scene*);
void updateKitListPostSnapShot(al::Scene*);
void setScenarioName(al::LayoutActor*, const al::Scene*);
void startTalkMsgTimeBalloonLayout(const al::Scene*);
void endPlayTalkMsgTimeBalloonLayout(const al::Scene*);
void endForceTalkMsgTimeBalloonLayout(const al::Scene*);
void changeDemoCommonProc(al::Scene*, ProjectItemDirector*);
void endDemoCommonProc(al::Scene*, ProjectItemDirector*);
void endDemoNormalShineGet(al::Scene*, ProjectItemDirector*);
bool tryOpenMap(al::IUseNerve*, const al::Scene*, const MapLayout*, const al::Nerve*);
bool tryChangeNextStage(GameDataHolder*, al::Scene*);
al::LiveActor* getPlayerActor(const al::Scene*);
}
void registerGraphicsPreset(const al::Scene*, const char*, const char*, const char*, bool);
void requestGraphicsPreset(const al::Scene*, const char*, const sead::Vector3f&);
void requestGraphicsCubeMap(const al::Scene*, const char*, const char*);
void requestGraphicsPresetAndCubeMap(const al::Scene*, const char*, const char*, const char*);
void requestGraphicsPresetAndCubeMap(const al::Scene*, const char*, const char*, const char*,
const sead::Vector3f&);
void requestGraphicsPresetAndCubeMapFixedAngle(const al::Scene*, const char*, const char*,
const char*);
void registerGraphicsPresetWorldMap(const al::Scene*);
void registerGraphicsPresetShop(const al::Scene*);
void registerGraphicsPresetMoonGet(const al::Scene*);
void registerGraphicsPresetCloset(const al::Scene*);
void registerGraphicsPresetPause(const al::Scene*);
void requestGraphicsPresetAndCubeMapWorldMap(const al::Scene*);
void requestGraphicsPresetAndCubeMapShop(const al::Scene*);
void requestGraphicsPresetAndCubeMapShopNoFixedAngle(const al::Scene*);
void requestGraphicsPresetAndCubeMapMoonGet(const al::Scene*);
void requestGraphicsPresetAndCubeMapMoonGetNoFixedAngle(const al::Scene*);
void requestGraphicsPresetAndCubeMapCloset(const al::Scene*);
void requestGraphicsPresetAndCubeMapClosetNoFixedAngle(const al::Scene*);
void requestGraphicsPresetAndCubeMapPause(const al::Scene*);
void requestGraphicsPresetAndCubeMapPauseNoFixedAngle(const al::Scene*);
void calcQuatPoseCheckpointWarpCap(sead::Quatf*, const sead::Vector3f&, const al::IUseCamera*);
ProjectDemoDirector* getDemoDirector(const al::Scene*);
Shine* getDemoShineActor(const al::Scene*);
bool isExistDemoShine(const al::Scene*);
} // namespace rs

View file

@ -0,0 +1,124 @@
#pragma once
#include "Library/Message/IUseMessageSystem.h"
#include "Library/Nerve/NerveStateBase.h"
namespace al {
class LayoutInitInfo;
class Scene;
class SimpleLayoutAppearWaitEnd;
class MessageSystem;
class WindowConfirm;
} // namespace al
class CommonVerticalList;
class FooterParts;
class GameConfigData;
class GameDataHolder;
class InputSeparator;
class SimpleLayoutMenu;
class WindowConfirmData;
class StageSceneStateOption : public al::HostStateBase<al::Scene>, public al::IUseMessageSystem {
public:
StageSceneStateOption(const char*, al::Scene*, const al::LayoutInitInfo&, FooterParts*,
GameDataHolder*, bool);
void updateConfigDataInfo(const GameConfigData*);
void killAllLayouts();
void init() override;
void appear() override;
void kill() override;
bool isModeSelectEnd() const;
s32 getSelectedFileId() const;
bool isChangeLanguage() const;
void exeOptionTop();
void decide(const al::Nerve*, SimpleLayoutMenu*, CommonVerticalList*);
void exeModeSelectSelecting();
void openConfirm(const al::Nerve*, SimpleLayoutMenu*, CommonVerticalList*);
void cancel(const al::Nerve*, SimpleLayoutMenu*, CommonVerticalList*);
void exeModeSelectSelectingByHelp();
void exeModeSelectConfirmYesNo();
void exeModeSelectConfirmEnd();
void exeConfig();
void endConfig();
void exeDataManager();
void exeSaveDataSelecting();
void updateSaveDataInfo(bool);
void exeSaveDataConfirmYesNo();
void exeSaveDataSaving();
void exeSaveDataSaved();
void exeLoadDataSelecting();
void exeLoadDataConfirmNg();
void exeLoadDataConfirmYesNo();
void exeLoadDataSaving();
void exeDeleteDataSelecting();
void exeDeleteDataConfirmNg();
void exeDeleteDataConfirmYesNo();
void exeDeleteDataDeleting();
void exeDeleteDataDeleted();
void exeLanguageSetting();
void exeLanguageSettingConfirmYesNo();
void exeWaitEndDecideAnim();
void exeWaitEndDecideAnimAndAutoSave();
void exeWaitEndAutoSave();
void exeClose();
void changeNerve(const al::Nerve*, SimpleLayoutMenu*, CommonVerticalList*);
const al::MessageSystem* getMessageSystem() const override;
const char* getLanguage() const { return mLanguage; };
void set_51(bool isTrue) { field_51 = isTrue; }
bool isLoadData() const { return mIsLoadData; }
private:
void* field_28;
void* field_30;
void* field_38;
char* field_40;
char* field_48;
bool field_50;
bool field_51;
FooterParts* mFooterParts;
void* field_60;
SimpleLayoutMenu* field_68;
CommonVerticalList* field_70;
al::SimpleLayoutAppearWaitEnd* field_78;
CommonVerticalList* field_80;
SimpleLayoutMenu* field_88;
CommonVerticalList* field_90;
al::SimpleLayoutAppearWaitEnd* field_98;
FooterParts* field_a0;
SimpleLayoutMenu* field_a8;
CommonVerticalList* mCtrlSettingsList;
SimpleLayoutMenu* field_b8;
CommonVerticalList* field_c0;
SimpleLayoutMenu* field_c8;
void* field_d0;
WindowConfirmData* field_d8;
SimpleLayoutMenu* field_e0;
CommonVerticalList* field_e8;
void* field_f0;
void* field_f8;
void* field_100;
void* field_108;
void* field_110;
void* field_118;
void* field_120;
void* field_128;
void* field_130;
void* field_138;
s32 field_140;
s32 field_144;
SimpleLayoutMenu* field_148;
FooterParts* field_150;
CommonVerticalList* field_158;
al::WindowConfirm* field_160;
const char* mLanguage;
al::Scene* mScene;
GameDataHolder* mGameDataHolder;
bool mIsLoadData;
al::MessageSystem* mMessageSystem;
InputSeparator* mInputSeperator;
};

View file

@ -0,0 +1,710 @@
#include "Scene/StageSceneStatePauseMenu.h"
#include <nn/oe.h>
#include "Library/Base/StringUtil.h"
#include "Library/Bgm/BgmLineFunction.h"
#include "Library/Camera/CameraUtil.h"
#include "Library/Controller/KeyRepeatCtrl.h"
#include "Library/Draw/GraphicsFunction.h"
#include "Library/Effect/EffectSystem.h"
#include "Library/Layout/LayoutActionFunction.h"
#include "Library/Layout/LayoutActorUtil.h"
#include "Library/LiveActor/ActorActionFunction.h"
#include "Library/LiveActor/ActorFlagFunction.h"
#include "Library/LiveActor/ActorInitInfo.h"
#include "Library/LiveActor/ActorInitUtil.h"
#include "Library/LiveActor/ActorMovementFunction.h"
#include "Library/LiveActor/ActorPoseUtil.h"
#include "Library/LiveActor/ActorSceneInfo.h"
#include "Library/LiveActor/LiveActor.h"
#include "Library/LiveActor/LiveActorKit.h"
#include "Library/LiveActor/SubActorKeeper.h"
#include "Library/Math/MathUtil.h"
#include "Library/Message/MessageHolder.h"
#include "Library/Nerve/NerveSetupUtil.h"
#include "Library/Nerve/NerveUtil.h"
#include "Library/Obj/PartsModel.h"
#include "Library/Play/Layout/SimpleLayoutAppearWaitEnd.h"
#include "Library/Play/Layout/WindowConfirm.h"
#include "Library/Play/Layout/WipeSimple.h"
#include "Library/Scene/SceneUtil.h"
#include "Library/Screen/ScreenFunction.h"
#include "Library/Se/SeFunction.h"
#include "Library/System/GameSystemInfo.h"
#include "Project/Scene/SceneInitInfo.h"
#include "Layout/FooterParts.h"
#include "Layout/MenuSelectParts.h"
#include "Layout/StageSceneLayout.h"
#include "Scene/SceneAudioSystemPauseController.h"
#include "Scene/StageScene.h"
#include "Scene/StageSceneStateEndSeparatePlay.h"
#include "Scene/StageSceneStateOption.h"
#include "Scene/StageSceneStateStartSeparatePlay.h"
#include "Sequence/GameSequenceInfo.h"
#include "System/GameDataHolder.h"
#include "System/SaveDataAccessFunction.h"
#include "Util/HelpFunction.h"
#include "Util/InputInterruptTutorialUtil.h"
#include "Util/SpecialBuildUtil.h"
#include "Util/StageInputFunction.h"
namespace {
NERVE_IMPL(StageSceneStatePauseMenu, Appear);
NERVE_IMPL(StageSceneStatePauseMenu, StartSeparatePlay);
NERVE_IMPL(StageSceneStatePauseMenu, EndSeparatePlay);
NERVE_IMPL(StageSceneStatePauseMenu, Option);
NERVE_IMPL_(StageSceneStatePauseMenu, OptionFromHelp, Option);
NERVE_IMPL(StageSceneStatePauseMenu, Wait);
NERVE_IMPL(StageSceneStatePauseMenu, End);
NERVE_IMPL(StageSceneStatePauseMenu, WaitDraw);
NERVE_IMPL(StageSceneStatePauseMenu, Save);
NERVE_IMPL(StageSceneStatePauseMenu, ConfirmNewGame);
NERVE_IMPL(StageSceneStatePauseMenu, NotExistEmptyFile);
NERVE_IMPL(StageSceneStatePauseMenu, FadeBeforeHelp);
NERVE_IMPL(StageSceneStatePauseMenu, StartHelp);
NERVE_IMPL_(StageSceneStatePauseMenu, StartHelpFromOption, StartHelp);
NERVES_MAKE_NOSTRUCT(StageSceneStatePauseMenu, StartHelp);
NERVES_MAKE_STRUCT(StageSceneStatePauseMenu, Appear, StartSeparatePlay, EndSeparatePlay, Option,
OptionFromHelp, Wait, End, WaitDraw, Save, ConfirmNewGame, NotExistEmptyFile,
FadeBeforeHelp, StartHelpFromOption);
} // namespace
StageSceneStatePauseMenu::StageSceneStatePauseMenu(
const char* name, al::Scene* host, al::SimpleLayoutAppearWaitEnd* menuLayout,
GameDataHolder* gameDataHolder, const al::SceneInitInfo& sceneInitInfo,
const al::ActorInitInfo& actorInitInfo, const al::LayoutInitInfo& layoutInitInfo,
al::WindowConfirm* windowConfirm, StageSceneLayout* stageSceneLayout, bool isTitle,
SceneAudioSystemPauseController* sceneAudioSystemPauseController)
: al::HostStateBase<al::Scene>(name, host), mMenuLayout(menuLayout),
mGameDataHolderAccessor(gameDataHolder), mWindowConfirm(windowConfirm),
mStageSceneLayout(stageSceneLayout),
mSceneAudioSystemPauseController(sceneAudioSystemPauseController) {
mMarioActor = new al::LiveActor("メニュー用マリオモデル");
al::initActorWithArchiveName(mMarioActor, actorInitInfo, "MarioHigh", "PauseMenu");
mMarioActor->makeActorDead();
al::PartsModel* capManEyes = new al::PartsModel("メニュー用キャップ目");
al::LiveActor* marioHat = al::getSubActor(mMarioActor, "");
capManEyes->initPartsFixFile(marioHat, actorInitInfo, "CapManHeroHighEyes", nullptr, nullptr);
capManEyes->makeActorDead();
al::onSyncAppearSubActor(marioHat, capManEyes);
al::startAction(capManEyes, "Wait");
mSelectParts = new MenuSelectParts("[ポーズメニュー]選択肢", mMenuLayout, mMarioActor,
layoutInitInfo, cMenuItemAmount + 1);
mMenuGuide = new al::SimpleLayoutAppearWaitEnd("[ポーズメニュー]フッター", "MenuGuide",
layoutInitInfo, nullptr, false);
mMenuRight = new al::SimpleLayoutAppearWaitEnd("[ポーズメニュー]権利", "MenuRight",
layoutInitInfo, nullptr, false);
nn::oe::DisplayVersion displayVersion;
nn::oe::GetDisplayVersion(&displayVersion);
if (al::isEqualString(displayVersion.name, "1.0.0"))
al::hidePane(mMenuRight, "TxtVersion");
else
al::setPaneStringFormat(mMenuRight, "TxtVersion", displayVersion.name);
mFooterParts =
new FooterParts(mMenuGuide, layoutInitInfo,
al::getSystemMessageString(mMenuGuide, "Footer", "MenuMessage_Footer"),
"TxtGuide", "ParFooter");
mMenuGuide->kill();
mMenuWipe = new al::WipeSimple("メニュー黒フェード", "FadeBlack", layoutInitInfo, nullptr);
mMenuWipe->kill();
mHelpWipe = new al::WipeSimple("ヘルプ黒フェード", "FadeBlack", layoutInitInfo, "BeforeWindow");
mHelpWipe->kill();
mPauseCameraCtrl = al::initAndCreatePauseCameraCtrl(getHost(), 10.0f);
mKeyRepeatCtrl = new al::KeyRepeatCtrl();
mKeyRepeatCtrl->init(30, 5);
initNerve(&NrvStageSceneStatePauseMenu.Appear, 4);
al::GamePadSystem* gamePadSystem = sceneInitInfo.gameSysInfo->gamePadSystem;
mStateStartSeparatePlay = new StageSceneStateStartSeparatePlay(
"おすそ分け開始", this, layoutInitInfo, mMenuWipe, gamePadSystem, mFooterParts);
mStateEndSeparatePlay = new StageSceneStateEndSeparatePlay(
"おすそ分け終了", this, layoutInitInfo, mMenuWipe, gamePadSystem);
mStateOption = new StageSceneStateOption("オプション画面", getHost(), layoutInitInfo,
mFooterParts, mGameDataHolderAccessor, isTitle);
al::initNerveState(this, mStateStartSeparatePlay,
&NrvStageSceneStatePauseMenu.StartSeparatePlay, "おすそ分けプレイ開始");
al::initNerveState(this, mStateEndSeparatePlay, &NrvStageSceneStatePauseMenu.EndSeparatePlay,
"おすそ分けプレイ終了");
al::initNerveState(this, mStateOption, &NrvStageSceneStatePauseMenu.Option, "オプション画面");
al::addNerveState(this, mStateOption, &NrvStageSceneStatePauseMenu.OptionFromHelp,
"オプション画面[ヘルプから遷移]");
rs::registerGraphicsPresetPause(getHost());
mHtmlViewer = sceneInitInfo.gameSysInfo->htmlViewer;
}
void StageSceneStatePauseMenu::appear() {
mStartType = StartType::Title;
setDead(false);
if (rs::isModeE3LiveRom()) {
if (rs::isSeparatePlay(getHost()))
al::setNerve(this, &NrvStageSceneStatePauseMenu.EndSeparatePlay);
else
al::setNerve(this, &NrvStageSceneStatePauseMenu.StartSeparatePlay);
return;
}
al::setNerve(this, &NrvStageSceneStatePauseMenu.Appear);
}
void StageSceneStatePauseMenu::kill() {
rs::updateGyroText(getHost());
setDead(true);
killPauseMenu();
killMarioModel(); // redundant as killPauseMenu() already does this
if (!isNeedKillHost() && mSceneAudioSystemPauseController) {
mSceneAudioSystemPauseController->resume(1);
al::endPausePadRumble(getHost());
}
alGraphicsFunction::validateGpuStressAnalyzer(getHost());
}
void StageSceneStatePauseMenu::killPauseMenu() {
mMenuLayout->kill();
mMenuRight->kill();
mMenuGuide->kill();
al::endCameraPause(mPauseCameraCtrl);
killMarioModel();
}
void StageSceneStatePauseMenu::killMarioModel() {
if (mIsShowMarioModel)
al::setNearClipDistance(getHost(), mPrevNearClipDistance, 0);
if (al::isAlive(mMarioActor))
mMarioActor->kill();
}
bool StageSceneStatePauseMenu::isNeedKillHost() const {
return isLoadData() || isNewGame() || isChangeLanguage() || isModeSelectEnd();
}
void StageSceneStatePauseMenu::startNormal() {
mStartType = StartType::Normal;
al::pausePadRumble(getHost());
mSceneAudioSystemPauseController->pause(false);
alGraphicsFunction::invalidateGpuStressAnalyzer(getHost());
}
void StageSceneStatePauseMenu::startAfterTitle() {
mStartType = StartType::AfterTitle;
}
void StageSceneStatePauseMenu::killAllOptionLayout() {
mStateOption->killAllLayouts();
}
bool StageSceneStatePauseMenu::isEndToCancel() const {
return !mSelectParts->isDecideSetting();
}
bool StageSceneStatePauseMenu::isEndToHelp() const {
return false;
}
bool StageSceneStatePauseMenu::isLoadData() const {
return mStateOption->isLoadData();
}
s32 StageSceneStatePauseMenu::getSelectedFileId() const {
return mStateOption->getSelectedFileId();
}
bool StageSceneStatePauseMenu::isChangeLanguage() const {
return mStateOption->isChangeLanguage();
}
const char* StageSceneStatePauseMenu::getLanguage() const {
return mStateOption->getLanguage();
}
bool StageSceneStatePauseMenu::isNewGame() const {
return mIsNewGame;
}
bool StageSceneStatePauseMenu::isModeSelectEnd() const {
return mStateOption->isModeSelectEnd();
}
bool StageSceneStatePauseMenu::checkNeedKillByHostAndEnd() {
if (!isNeedKillHost())
return false;
getHost()->getLiveActorKit()->getEffectSystem()->set_69(false);
mSceneAudioSystemPauseController->resume(0);
alSeFunction::stopAllSe(getHost()->getAudioDirector(), 0);
al::stopAllBgm(getHost(), 0);
return true;
}
void StageSceneStatePauseMenu::startActionMario(const char* actionName) {
mSelectParts->startActionMario(mMarioActor, actionName);
}
al::LiveActor* StageSceneStatePauseMenu::getMarioActor() const {
return mMarioActor;
}
bool StageSceneStatePauseMenu::isDrawLayout() const {
return !al::isNerve(this, &NrvStageSceneStatePauseMenu.Wait) &&
!al::isNerve(this, &NrvStageSceneStatePauseMenu.Appear);
}
bool StageSceneStatePauseMenu::isDrawLayoutMain() const {
return !al::isNerve(this, &NrvStageSceneStatePauseMenu.End) &&
!al::isNerve(this, &NrvStageSceneStatePauseMenu.WaitDraw);
}
bool StageSceneStatePauseMenu::isDrawViewRenderer() const {
if (mStateStartSeparatePlay->isDrawViewRenderer() ||
mStateEndSeparatePlay->isDrawViewRenderer() ||
al::isNerve(this, &NrvStageSceneStatePauseMenu.WaitDraw) ||
al::isNerve(this, &NrvStageSceneStatePauseMenu.End))
return true;
if (al::isNerve(this, &NrvStageSceneStatePauseMenu.Appear))
return al::isDead(mMarioActor);
return false;
}
bool StageSceneStatePauseMenu::isDrawChromakey() const {
if (al::isNerve(this, &NrvStageSceneStatePauseMenu.Appear) ||
al::isNerve(this, &NrvStageSceneStatePauseMenu.Wait) ||
al::isNerve(this, &NrvStageSceneStatePauseMenu.StartSeparatePlay) ||
al::isNerve(this, &NrvStageSceneStatePauseMenu.EndSeparatePlay))
return true;
return !isDrawViewRenderer();
}
void StageSceneStatePauseMenu::exeAppear() {
if (al::isFirstStep(this))
startPauseCamera();
if (al::isStep(this, 1)) {
if (mStartType == StartType::Normal)
setNormal();
if (mStartType == StartType::AfterTitle) {
mMenuRight->appear();
mMenuGuide->appear();
al::startAction(mMenuLayout, "SelectTitle", "Select");
}
}
if (al::isStep(this, 2))
appearMarioModel();
updatePlayerPose();
al::updateKitListPrev(getHost());
if (al::isGreaterEqualStep(this, 2) || !mIsNormal) {
rs::requestGraphicsPresetAndCubeMapPause(getHost());
alGraphicsFunction::requestUpdateMaterialInfo(getHost());
}
al::updateKitList(getHost(), "デモ");
al::updateKitList(getHost(), "シャドウマスク");
al::updateKitList(getHost(), "グラフィックス要求者");
al::updateKitList(getHost(), "2D(ポーズ無視)");
al::updateKitListPost(getHost());
if (al::isGreaterEqualStep(this, 3) && mMenuLayout->isWait())
al::setNerve(this, &NrvStageSceneStatePauseMenu.Wait);
}
void StageSceneStatePauseMenu::setNormal() {
mIsNormal = true;
if (mMenuLayout->isAlive())
mSelectParts->appearWait();
else {
mMenuLayout->appear();
mMenuRight->appear();
mMenuGuide->appear();
}
mSelectParts->appear(cMenuItemAmount);
mSelectParts->setSelectMessage(
MenuSelectParts::Selection::Continue,
al::getSystemMessageString(mMenuLayout, "MenuMessage", "Continue"));
if (rs::isSeparatePlay(getHost()))
mSelectParts->setSelectMessage(
MenuSelectParts::Selection::SeparatePlay,
al::getSystemMessageString(mMenuLayout, "MenuMessage", "EndSeparatePlay"));
else
mSelectParts->setSelectMessage(
MenuSelectParts::Selection::SeparatePlay,
al::getSystemMessageString(mMenuLayout, "MenuMessage", "StartSeparatePlay"));
al::startAction(mMenuLayout, "SelectPause", "Select");
}
void StageSceneStatePauseMenu::appearMarioModel() {
if (!mIsShowMarioModel)
mPrevNearClipDistance = alCameraFunction::getNearClipDistance(getHost(), 0);
al::setNearClipDistance(getHost(), 400.0f, 0);
updatePlayerPose();
mMarioActor->appear();
mIsShowMarioModel = true;
}
void StageSceneStatePauseMenu::updatePlayerPose() {
sead::Vector3f worldPos = sead::Vector3f::zero;
al::calcWorldPosFromLayoutPos(&worldPos, getHost(), {310.0f, -960.0f}, 500.0f);
al::setTrans(mMarioActor, worldPos);
sead::Quatf quat = sead::Quatf::unit;
sead::Vector3f cameraFront = sead::Vector3f::zero;
al::calcCameraFront(&cameraFront, getHost(), 0);
al::makeQuatFrontUp(&quat, -cameraFront, al::getCameraUp(getHost(), 0));
al::rotateQuatYDirDegree(&quat, quat, 360.0f);
al::updatePoseQuat(mMarioActor, quat);
}
void StageSceneStatePauseMenu::exeWait() {
if (mIsNormal) {
if (rs::isSeparatePlay(getHost()))
mSelectParts->setSelectMessage(
MenuSelectParts::Selection::SeparatePlay,
al::getSystemMessageString(mMenuLayout, "MenuMessage", "EndSeparatePlay"));
else
mSelectParts->setSelectMessage(
MenuSelectParts::Selection::SeparatePlay,
al::getSystemMessageString(mMenuLayout, "MenuMessage", "StartSeparatePlay"));
}
al::updateKitListPrev(getHost());
al::updateKitList(getHost(), "カメラ");
rs::requestGraphicsPresetAndCubeMapPause(getHost());
mSelectParts->update();
updatePlayerPose();
al::updateKitList(getHost(), "デモ");
al::updateKitList(getHost(), "シャドウマスク");
al::updateKitList(getHost(), "グラフィックス要求者");
al::updateKitList(getHost(), "2D(ポーズ無視)");
if (mSelectParts->isDecideSave()) {
al::setNerve(this, &NrvStageSceneStatePauseMenu.Save);
}
else if (mSelectParts->isDecideContinue()) {
killMarioModel();
al::endCameraPause(mPauseCameraCtrl);
al::setNerve(this, &NrvStageSceneStatePauseMenu.WaitDraw);
}
else if (mSelectParts->isDecideSeparatePlay()) {
if (rs::isSeparatePlay(getHost()) && !mIsNormal) {
al::setNerve(this, &NrvStageSceneStatePauseMenu.WaitDraw);
return;
}
if (rs::isSeparatePlay(getHost()))
al::setNerve(this, &NrvStageSceneStatePauseMenu.EndSeparatePlay);
else
al::setNerve(this, &NrvStageSceneStatePauseMenu.StartSeparatePlay);
}
else if (mSelectParts->isDecideNewGame()) {
if (mGameDataHolderAccessor->tryFindEmptyFileId() < 0)
al::setNerve(this, &NrvStageSceneStatePauseMenu.NotExistEmptyFile);
else
al::setNerve(this, &NrvStageSceneStatePauseMenu.ConfirmNewGame);
}
else if (mSelectParts->isDecideHelp()) {
al::setNerve(this, &NrvStageSceneStatePauseMenu.FadeBeforeHelp);
}
else if (!isEndToCancel()) {
al::setNerve(this, &NrvStageSceneStatePauseMenu.Option);
}
else
al::updateKitListPost(getHost());
}
void StageSceneStatePauseMenu::changeNerveAndReturn(const al::Nerve* nerve) {
al::setNerve(this, nerve);
}
void StageSceneStatePauseMenu::exeFadeBeforeHelp() {
if (al::isFirstStep(this))
mHelpWipe->startClose(-1);
al::updateKitListPrev(getHost());
al::updateKitList(getHost(), "カメラ");
rs::requestGraphicsPresetAndCubeMapPause(getHost());
al::updateKitList(getHost(), "シャドウマスク");
al::updateKitList(getHost(), "グラフィックス要求者");
al::updateKitList(getHost(), "2D(ポーズ無視)");
al::updateKitListPost(getHost());
if (mHelpWipe->isCloseEnd())
al::setNerve(this, &StartHelp);
}
void StageSceneStatePauseMenu::exeStartHelp() {
al::updateKitListPrev(getHost());
al::updateKitList(getHost(), "カメラ");
rs::requestGraphicsPresetAndCubeMapPause(getHost());
al::updateKitList(getHost(), "シャドウマスク");
al::updateKitList(getHost(), "グラフィックス要求者");
al::updateKitList(getHost(), "2D(ポーズ無視)");
al::updateKitListPost(getHost());
if (al::isFirstStep(this)) {
bool isStartHelpFromOption =
al::isNerve(this, &NrvStageSceneStatePauseMenu.StartHelpFromOption);
bool isSceneStatusInvalidSave = rs::isSceneStatusInvalidSave(getHost());
al::StringTmp<256> helpUrl;
HelpFunction::callHelp(mHtmlViewer, mGameDataHolderAccessor, isStartHelpFromOption,
isSceneStatusInvalidSave, false, &helpUrl);
if (al::isEqualString("http://localhost/ChangeMode", helpUrl.cstr())) {
mStateOption->set_51(true);
al::setNerve(this, &NrvStageSceneStatePauseMenu.OptionFromHelp);
return;
}
mHelpWipe->startOpen(-1);
}
if (mHelpWipe->isOpenEnd()) {
mSelectParts->appearWait();
al::setNerve(this, &NrvStageSceneStatePauseMenu.Wait);
}
}
void StageSceneStatePauseMenu::exeWaitDraw() {
al::updateKitListPrev(getHost());
al::updateKitList(getHost(), "カメラ");
al::updateKitList(getHost(), "シャドウマスク");
al::updateKitList(getHost(), "グラフィックス要求者");
al::updateKitList(getHost(), "2D(ポーズ無視)");
al::updateKitListPost(getHost());
if (al::isFirstStep(this))
alGraphicsFunction::requestUpdateMaterialInfo(getHost());
if (al::isGreaterEqualStep(this, 2))
al::setNerve(this, &NrvStageSceneStatePauseMenu.End);
}
void StageSceneStatePauseMenu::exeEnd() {
al::updateKitListPrev(getHost());
al::updateKitList(getHost(), "カメラ");
al::updateKitList(getHost(), "シャドウマスク");
al::updateKitList(getHost(), "グラフィックス要求者");
al::updateKitList(getHost(), "2D(ポーズ無視)");
al::updateKitListPost(getHost());
if (al::isFirstStep(this)) {
mMenuLayout->end();
mMenuRight->end();
mMenuGuide->end();
}
if (al::isDead(mMenuLayout))
kill();
}
void StageSceneStatePauseMenu::exeStartSeparatePlay() {
if (al::isFirstStep(this)) {
mFooterParts->tryChangeTextFade(
al::getSystemMessageString(mFooterParts, "Footer", "MenuMessage_Footer_SeparatePlay"));
}
al::updateKitListPrev(getHost());
al::updateKitList(getHost(), "カメラ");
if (mStateStartSeparatePlay->isNeedRequestGraphicsPreset())
rs::requestGraphicsPresetAndCubeMapPause(getHost());
al::updateKitList(getHost(), "シャドウマスク");
al::updateKitList(getHost(), "グラフィックス要求者");
al::updateKitList(getHost(), "2D(ポーズ無視)");
al::updateKitListPost(getHost());
if (al::updateNerveState(this)) {
if (mStageSceneLayout)
mStageSceneLayout->setDirtyFlagForPlayGuideMenu();
if (mStateStartSeparatePlay->isCancel() && !rs::isModeE3LiveRom()) {
mSelectParts->appearWait();
al::setNerve(this, &NrvStageSceneStatePauseMenu.Wait);
return;
}
kill();
}
}
void StageSceneStatePauseMenu::exeEndSeparatePlay() {
al::updateKitListPrev(getHost());
al::updateKitList(getHost(), "カメラ");
if (mStateEndSeparatePlay->isNeedRequestGraphicsPreset())
rs::requestGraphicsPresetAndCubeMapPause(getHost());
al::updateKitList(getHost(), "シャドウマスク");
al::updateKitList(getHost(), "グラフィックス要求者");
al::updateKitList(getHost(), "2D(ポーズ無視)");
al::updateKitListPost(getHost());
if (al::updateNerveState(this)) {
if (mStageSceneLayout)
mStageSceneLayout->setDirtyFlagForPlayGuideMenu();
if (mStateEndSeparatePlay->isCancel() && !rs::isModeE3LiveRom()) {
mSelectParts->appearWait();
al::setNerve(this, &NrvStageSceneStatePauseMenu.Wait);
return;
}
kill();
}
}
void StageSceneStatePauseMenu::exeOption() {
al::updateKitListPrev(getHost());
rs::requestGraphicsPresetAndCubeMapPause(getHost());
al::updateKitList(getHost(), "2D(ポーズ無視)");
al::updateKitListPost(getHost());
if (al::updateNerveState(this)) {
if (isChangeLanguage() || isLoadData()) {
kill();
return;
}
mSelectParts->appearWait();
mFooterParts->tryChangeTextFade(
al::getSystemMessageString(mMenuGuide, "Footer", "MenuMessage_Footer"));
if (al::isNerve(this, &NrvStageSceneStatePauseMenu.OptionFromHelp))
al::setNerve(this, &NrvStageSceneStatePauseMenu.StartHelpFromOption);
else
al::setNerve(this, &NrvStageSceneStatePauseMenu.Wait);
}
}
void StageSceneStatePauseMenu::exeSave() {
al::updateKitListPrev(getHost());
rs::requestGraphicsPresetAndCubeMapPause(getHost());
al::updateKitList(getHost(), "2D(ポーズ無視)");
al::updateKitListPost(getHost());
if (al::isFirstStep(this))
SaveDataAccessFunction::startSaveDataWriteWithWindow(mGameDataHolderAccessor);
if (SaveDataAccessFunction::updateSaveDataAccess(mGameDataHolderAccessor, false)) {
mSelectParts->appearWait();
al::setNerve(this, &NrvStageSceneStatePauseMenu.Wait);
}
}
void StageSceneStatePauseMenu::exeConfirmNewGame() {
if (al::isFirstStep(this)) {
mWindowConfirm->setListNum(2);
mWindowConfirm->setTxtMessage(
al::getSystemMessageString(mWindowConfirm, "ConfirmMessage", "NewGame"));
mWindowConfirm->setTxtList(
0, al::getSystemMessageString(mWindowConfirm, "ConfirmMessage", "NewGame_Yes"));
mWindowConfirm->setTxtList(
1, al::getSystemMessageString(mWindowConfirm, "ConfirmMessage", "NewGame_No"));
mWindowConfirm->appear();
mKeyRepeatCtrl->reset();
}
al::updateKitListPrev(getHost());
rs::requestGraphicsPresetAndCubeMapPause(getHost());
al::updateKitList(getHost(), "2D(ポーズ無視)");
al::updateKitListPost(getHost());
mKeyRepeatCtrl->update(rs::isHoldUiUp(getHost()), rs::isHoldUiDown(getHost()));
if (mKeyRepeatCtrl->isUp())
mWindowConfirm->tryUp();
if (mKeyRepeatCtrl->isDown())
mWindowConfirm->tryDown();
al::WindowConfirm::SelectionType selectionType = mWindowConfirm->getPrevSelectionType();
if (rs::isTriggerUiDecide(getHost())) {
if (selectionType == al::WindowConfirm::SelectionType::HardKey)
mWindowConfirm->tryDecideWithoutEnd();
if (selectionType == al::WindowConfirm::SelectionType::List00)
mWindowConfirm->tryCancel();
}
if (rs::isTriggerUiCancel(getHost()))
mWindowConfirm->tryCancel();
if (selectionType == al::WindowConfirm::SelectionType::HardKey &&
mWindowConfirm->isNerveEnd()) {
mWindowConfirm->tryDecide();
s32 emptyFileId = mGameDataHolderAccessor->tryFindEmptyFileId();
mGameDataHolderAccessor->requestSetPlayingFileId(emptyFileId);
mGameDataHolderAccessor->setRequireSave();
mIsNewGame = true;
}
if (selectionType == al::WindowConfirm::SelectionType::List00) {
if (al::isDead(mWindowConfirm)) {
mSelectParts->appearWait();
al::setNerve(this, &NrvStageSceneStatePauseMenu.Wait);
}
}
}
void StageSceneStatePauseMenu::exeNotExistEmptyFile() {
if (al::isFirstStep(this)) {
mWindowConfirm->setListNum(1);
mWindowConfirm->setTxtMessage(
al::getSystemMessageString(mWindowConfirm, "ConfirmMessage", "NotExistEmptyFile"));
mWindowConfirm->appear();
}
al::updateKitListPrev(getHost());
rs::requestGraphicsPresetAndCubeMapPause(getHost());
al::updateKitList(getHost(), "2D(ポーズ無視)");
al::updateKitListPost(getHost());
if (rs::isTriggerUiDecide(getHost()) || rs::isTriggerUiCancel(getHost()))
mWindowConfirm->tryDecide();
if (al::isDead(mWindowConfirm)) {
mSelectParts->appearWait();
al::setNerve(this, &NrvStageSceneStatePauseMenu.Wait);
}
}
void StageSceneStatePauseMenu::startPauseCamera() {
al::startCameraPause(mPauseCameraCtrl);
}
void StageSceneStatePauseMenu::setAfterTitle() {
mIsNormal = false;
mSelectParts->appear(cMenuItemAmount);
mSelectParts->setMainMenu(true);
mSelectParts->setSelectMessage(
MenuSelectParts::Selection::Continue,
al::getSystemMessageString(mMenuLayout, "MenuMessage", "StartGame"));
mSelectParts->setSelectMessage(
MenuSelectParts::Selection::SeparatePlay,
al::getSystemMessageString(mMenuLayout, "MenuMessage", "StartGameSeparatePlay"));
mSelectParts->setSelectMessage(
MenuSelectParts::Selection::NewGame,
al::getSystemMessageString(mMenuLayout, "MenuMessage", "NewGame"));
}

View file

@ -27,17 +27,20 @@ class StageSceneStateStartSeparatePlay;
class StageSceneStatePauseMenu : public al::HostStateBase<al::Scene> {
public:
static const s32 cMenuItemAmount = 5;
enum class StartType { Title, Normal, AfterTitle };
StageSceneStatePauseMenu(const char* name, al::Scene* host,
al::SimpleLayoutAppearWaitEnd* menuLayout,
GameDataHolder* gameDataHolder, const al::SceneInitInfo& sceneInitInfo,
const al::ActorInitInfo& actorInitInfo,
const al::LayoutInitInfo& layoutInitInfo,
al::WindowConfirm* windowConfirm, StageSceneLayout* stageSceneLayout,
bool a11,
bool isTitle,
SceneAudioSystemPauseController* sceneAudioSystemPauseController);
virtual void appear();
virtual void kill();
void appear() override;
void kill() override;
void killPauseMenu();
void killMarioModel();
@ -54,12 +57,15 @@ public:
bool isNewGame() const;
bool isModeSelectEnd() const;
bool checkNeedKillByHostAndEnd();
void startActionMario(const char*);
al::LiveActor* getMarioActor() const;
bool isDrawLayout() const;
bool isDrawLayoutMain() const;
bool isDrawViewRenderer() const;
bool isDrawChromakey() const;
void exeAppear();
void setNormal();
void appearMarioModel();
@ -76,6 +82,7 @@ public:
void exeSave();
void exeConfirmNewGame();
void exeNotExistEmptyFile();
void startPauseCamera();
void setAfterTitle();
@ -87,7 +94,7 @@ private:
MenuSelectParts* mSelectParts = nullptr;
al::WipeSimple* mMenuWipe = nullptr;
al::WipeSimple* mHelpWipe = nullptr;
s32 mStartType = 0;
StartType mStartType = StartType::Title;
StageSceneStateStartSeparatePlay* mStateStartSeparatePlay = nullptr;
StageSceneStateEndSeparatePlay* mStateEndSeparatePlay = nullptr;
StageSceneStateOption* mStateOption = nullptr;
@ -100,7 +107,7 @@ private:
al::KeyRepeatCtrl* mKeyRepeatCtrl = nullptr;
StageSceneLayout* mStageSceneLayout = nullptr;
bool mIsNormal = true;
bool mIsPauseMenu = false;
bool mIsShowMarioModel = false;
f32 mPrevNearClipDistance = 25.0f;
SceneAudioSystemPauseController* mSceneAudioSystemPauseController = nullptr;
al::HtmlViewer* mHtmlViewer = nullptr;

View file

@ -12,6 +12,8 @@ public:
GameDataHolderAccessor(const al::IUseSceneObjHolder*);
GameDataHolderAccessor(const al::SceneObjHolder*);
GameDataHolderAccessor(GameDataHolder* holder) { mData = holder; }
operator GameDataHolder*() const { return mData; }
GameDataHolder* operator->() const { return mData; }

View file

@ -0,0 +1,21 @@
#pragma once
#include <basis/seadTypes.h>
class GameDataHolder;
namespace SaveDataAccessFunction {
void startSaveDataInit(GameDataHolder*);
void startSaveDataInitSync(GameDataHolder*);
void startSaveDataLoadFile(GameDataHolder*);
void startSaveDataReadSync(GameDataHolder*);
void startSaveDataReadAll(GameDataHolder*);
void startSaveDataWrite(GameDataHolder*);
void startSaveDataWriteWithWindow(GameDataHolder*);
void startSaveDataCopyWithWindow(GameDataHolder*, s32, s32);
void startSaveDataDeleteWithWindow(GameDataHolder*, s32);
void startSaveDataWriteSync(GameDataHolder*);
bool updateSaveDataAccess(GameDataHolder*, bool);
bool isEnableSave(const GameDataHolder*);
bool isDoneSave(GameDataHolder*);
} // namespace SaveDataAccessFunction

13
src/Util/HelpFunction.h Normal file
View file

@ -0,0 +1,13 @@
#pragma once
#include <prim/seadSafeString.h>
namespace al {
class HtmlViewer;
}
class GameDataHolderAccessor;
namespace HelpFunction {
void callHelp(const al::HtmlViewer*, GameDataHolderAccessor, bool, bool, bool,
sead::BufferedSafeString*);
}

View file

@ -0,0 +1,62 @@
#pragma once
namespace al {
class IUseSceneObjHolder;
}
class BindInfo;
namespace rs {
bool tryCloseHackTutorial(const al::IUseSceneObjHolder*);
void changeHackTutorialText(const al::IUseSceneObjHolder*, const char*);
void resetHackTutorialText(const al::IUseSceneObjHolder*);
void tryAppearBindTutorial(const al::IUseSceneObjHolder*, const BindInfo&);
bool tryCloseBindTutorial(const al::IUseSceneObjHolder*);
bool tryCloseObjectTutorial(const al::IUseSceneObjHolder*, const char*);
void appearFirstHackTutorialFrog(const al::IUseSceneObjHolder*);
void appearFirstHackTutorialKoopa(const al::IUseSceneObjHolder*);
bool tryAppearObjectTutorial(const al::IUseSceneObjHolder*, const char*);
bool tryAppearObjectTutorialOpening(const al::IUseSceneObjHolder*, const char*, const char*);
bool tryCloseObjectTutorialOpening(const al::IUseSceneObjHolder*, const char*);
bool tryAppearObjectTutorialHipDrop(const al::IUseSceneObjHolder*);
bool tryCloseObjectTutorialHipDrop(const al::IUseSceneObjHolder*);
bool tryAppearObjectTutorialCapThrow(const al::IUseSceneObjHolder*);
bool tryCloseObjectTutorialCapThrow(const al::IUseSceneObjHolder*);
void tryAppearPlayerGrabPoleTutorial(const al::IUseSceneObjHolder*);
void tryClosePlayerGrabPoleTutorial(const al::IUseSceneObjHolder*);
void tryAppearPlayerClimbPoleTutorial(const al::IUseSceneObjHolder*);
void tryClosePlayerClimbPoleTutorial(const al::IUseSceneObjHolder*);
void tryAppearPlayerClimbPoleTopTutorial(const al::IUseSceneObjHolder*);
void tryClosePlayerClimbPoleTopTutorial(const al::IUseSceneObjHolder*);
void tryAppearKoopaCapTutorial(const al::IUseSceneObjHolder*);
void tryAppearKoopaCapTutorialNoMovie(const al::IUseSceneObjHolder*);
void tryCloseKoopaCapTutorial(const al::IUseSceneObjHolder*);
void changeSeparatePlayTutorial(const al::IUseSceneObjHolder*);
void changeSinglePlayTutorial(const al::IUseSceneObjHolder*);
void changeEnableCapTutorial(const al::IUseSceneObjHolder*);
void changeDisableCapTutorial(const al::IUseSceneObjHolder*);
void tryAppearSignboardTutorial(const al::IUseSceneObjHolder*, const char*);
bool isExistSignboardTutorialMovie(const al::IUseSceneObjHolder*, const char*);
void tryCloseSignboardTutorial(const al::IUseSceneObjHolder*);
void tryAppearAmiiboHelpNpcTutorial(const al::IUseSceneObjHolder*);
void tryAppearAmiiboHelpNpcSeparateTutorial(const al::IUseSceneObjHolder*);
bool tryAppearPlayerCameraSubjectiveTutorial(const al::IUseSceneObjHolder*);
void tryClosePlayerCameraSubjectiveTutorial(const al::IUseSceneObjHolder*);
void appearCapMsgTutorial(const al::IUseSceneObjHolder*, const char*);
void closeCapMsgTutorial(const al::IUseSceneObjHolder*);
void appearRaceTutorial(const al::IUseSceneObjHolder*, const char*);
void killRaceTutorial(const al::IUseSceneObjHolder*, const char*);
void appearRaceTutorialTutorial(const al::IUseSceneObjHolder*);
bool isShowTutorial(const al::IUseSceneObjHolder*);
bool isShowObjectTutorial(const al::IUseSceneObjHolder*, const char*);
void hideTutorial(const al::IUseSceneObjHolder*);
void showTutorial(const al::IUseSceneObjHolder*);
void appearTutorialForDemo(const al::IUseSceneObjHolder*);
void killTutorial(const al::IUseSceneObjHolder*);
void updateGyroText(const al::IUseSceneObjHolder*);
} // namespace rs
namespace TimeBalloonFunction {
void appearTimeBalloonTutorial(const al::IUseSceneObjHolder*);
void closeTimeBalloonTutorial(const al::IUseSceneObjHolder*);
} // namespace TimeBalloonFunction

View file

@ -37,7 +37,8 @@ def CHECK(cond, line, message, path):
def common_no_namespace_qualifiers(c, path):
nest_level = []
for line in c.splitlines():
line = line[0:line.find("//")] if "//" in line else line
if "http://" not in line:
line = line[0:line.find("//")] if "//" in line else line
if line.startswith("using namespace"):
match = re.search(r"^using namespace ([^;\s]+);$", line)
if CHECK(lambda a: match, line,