Skip to content

Commit

Permalink
Functional sardine mode + new menu option
Browse files Browse the repository at this point in the history
  • Loading branch information
Amethyst-szs committed Oct 27, 2022
1 parent f2f3282 commit a9b2c87
Show file tree
Hide file tree
Showing 18 changed files with 659 additions and 57 deletions.
2 changes: 1 addition & 1 deletion MakefileNSO
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ include $(DEVKITPRO)/libnx/switch_rules
#---------------------------------------------------------------------------------
TARGET ?= $(notdir $(CURDIR))$(SMOVER)
BUILD ?= build$(SMOVER)
SOURCES := source/sead/time source/sead source/puppets source/server/hns source/server/gamemode source/server/gamemode/modifiers source/server source/layouts source/states source/cameras source/nx source
SOURCES := source/sead/time source/sead source/puppets source/server/hns source/server/snh source/server/gamemode source/server/gamemode/modifiers source/server source/layouts source/states source/cameras source/nx source
SOURCES += source/al/execute
DATA := data
INCLUDES := include include/sead
Expand Down
5 changes: 2 additions & 3 deletions include/SocketBase.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ class SocketBase {

virtual nn::Result init(const char * ip, u16 port) = 0;
virtual bool closeSocket();
virtual bool tryReconnect();
virtual struct Packet *tryGetPacket();

const char *getStateChar();
u8 getLogState();
Expand All @@ -37,6 +39,3 @@ class SocketBase {

int sock_flags;
};



36 changes: 36 additions & 0 deletions include/layouts/SardineIcon.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#pragma once

#include "al/layout/LayoutActor.h"
#include "al/layout/LayoutInitInfo.h"
#include "al/util/NerveUtil.h"

#include "logger.hpp"
#include "server/gamemode/GameModeTimer.hpp"

// TODO: kill layout if going through loading zone or paused

class SardineIcon : public al::LayoutActor {
public:
SardineIcon(const char* name, const al::LayoutInitInfo& initInfo);

void appear() override;

bool tryStart();
bool tryEnd();

void showSolo();
void showPack();

void exeAppear();
void exeWait();
void exeEnd();

private:
struct SardineInfo* mInfo;
};

namespace {
NERVE_HEADER(SardineIcon, Appear)
NERVE_HEADER(SardineIcon, Wait)
NERVE_HEADER(SardineIcon, End)
}
5 changes: 2 additions & 3 deletions include/server/SocketClient.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ class SocketClient : public SocketBase {
public:
SocketClient(const char *name, sead::Heap *heap);
nn::Result init(const char* ip, u16 port) override;
bool tryReconnect();
bool tryReconnect() override;
bool closeSocket() override;
Packet *tryGetPacket() override;

bool startThreads();
void endThreads();
Expand All @@ -39,8 +40,6 @@ class SocketClient : public SocketBase {
void sendFunc();
void recvFunc();

Packet *tryGetPacket(sead::MessageQueue::BlockType blockType = sead::MessageQueue::BlockType::Blocking);

void printPacket(Packet* packet);
bool isConnected() { return socket_log_state == SOCKET_LOG_CONNECTED; }

Expand Down
31 changes: 17 additions & 14 deletions include/server/gamemode/GameModeBase.hpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
#pragma once

#include <cmath>
#include <math.h>
#include "puppets/PuppetHolder.hpp"
#include "al/actor/ActorInitInfo.h"
#include "al/actor/IUseName.h"
#include "al/scene/Scene.h"
Expand All @@ -11,35 +8,41 @@
#include "game/StageScene/StageScene.h"
#include "layouts/HideAndSeekIcon.h"
#include "prim/seadSafeString.h"
#include "puppets/PuppetHolder.hpp"
#include "server/gamemode/GameModeConfigMenu.hpp"
#include <cmath>
#include <math.h>


// enum for defining game mode types
enum GameMode : s8 {
NONE = -1,
HIDEANDSEEK
HIDEANDSEEK,
SARDINE
};

// struct containing info about the games state for use in gamemodes
struct GameModeInitInfo {
GameModeInitInfo(al::ActorInitInfo* info, al::Scene *scene){
GameModeInitInfo(al::ActorInitInfo* info, al::Scene* scene)
{
mLayoutInitInfo = info->mLayoutInitInfo;
mPlayerHolder = info->mActorSceneInfo.mPlayerHolder;
mSceneObjHolder = info->mActorSceneInfo.mSceneObjHolder;
mScene = scene;

};

void initServerInfo(GameMode mode, PuppetHolder *pupHolder) {
void initServerInfo(GameMode mode, PuppetHolder* pupHolder)
{
mMode = mode;
mPuppetHolder = pupHolder;
}

al::LayoutInitInfo* mLayoutInitInfo;
al::PlayerHolder* mPlayerHolder;
al::SceneObjHolder *mSceneObjHolder;
al::SceneObjHolder* mSceneObjHolder;
al::Scene* mScene;
GameMode mMode = GameMode::NONE;
PuppetHolder *mPuppetHolder;
PuppetHolder* mPuppetHolder;
};

// base class for all gamemodes, must inherit from this to have a functional gamemode
Expand All @@ -54,18 +57,18 @@ class GameModeBase : public al::IUseName, public al::IUseSceneObjHolder {

virtual bool isModeActive() const { return mIsActive; }

virtual void init(GameModeInitInfo const &info);
virtual void init(GameModeInitInfo const& info);

virtual void begin() { mIsActive = true; }
virtual void update();
virtual void end() { mIsActive = false; }

protected:
sead::FixedSafeString<0x10> mName;
al::SceneObjHolder *mSceneObjHolder = nullptr;
al::SceneObjHolder* mSceneObjHolder = nullptr;
GameMode mMode = GameMode::NONE;
StageScene* mCurScene = nullptr;
PuppetHolder *mPuppetHolder = nullptr;
PuppetHolder* mPuppetHolder = nullptr;
bool mIsActive = false;
bool mIsFirstFrame = true;
};
2 changes: 2 additions & 0 deletions include/server/gamemode/GameModeConfigMenuFactory.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

#include "al/factory/Factory.h"
#include "server/hns/HideAndSeekConfigMenu.hpp"
#include "server/snh/SardineConfigMenu.hpp"
#include "server/gamemode/GameModeConfigMenu.hpp"

typedef GameModeConfigMenu* (*createMenu)(const char* name);
Expand All @@ -13,6 +14,7 @@ GameModeConfigMenu* createGameModeConfigMenu(const char* name) {

__attribute((used)) constexpr al::NameToCreator<createMenu> menuTable[] = {
{"HideAndSeek", &createGameModeConfigMenu<HideAndSeekConfigMenu>},
{"Sardine", &createGameModeConfigMenu<SardineConfigMenu>},
};

class GameModeConfigMenuFactory : public al::Factory<createMenu> {
Expand Down
7 changes: 5 additions & 2 deletions include/server/gamemode/GameModeFactory.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include "al/factory/Factory.h"
#include "server/gamemode/GameModeBase.hpp"
#include "server/hns/HideAndSeekMode.hpp"
#include "server/snh/SardineMode.hpp"

typedef GameModeBase* (*createMode)(const char* name);

Expand All @@ -13,11 +14,13 @@ GameModeBase* createGameMode(const char* name)
};

__attribute((used)) constexpr al::NameToCreator<createMode> modeTable[] = {
{"HideAndSeek", &createGameMode<HideAndSeekMode>}
{"HideAndSeek", &createGameMode<HideAndSeekMode>},
{"Sardines", &createGameMode<SardineMode>}
};

constexpr const char* modeNames[] = {
"Hide and Seek"
"Hide and Seek",
"Sardines"
};

class GameModeFactory : public al::Factory<createMode> {
Expand Down
19 changes: 19 additions & 0 deletions include/server/snh/SardineConfigMenu.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#pragma once

#include "server/gamemode/GameModeConfigMenu.hpp"
#include "game/Layouts/CommonVerticalList.h"
#include "server/gamemode/GameModeBase.hpp"

class SardineConfigMenu : public GameModeConfigMenu {
public:
SardineConfigMenu();

void initMenu(const al::LayoutInitInfo &initInfo) override;
const sead::WFixedSafeString<0x200> *getStringData() override;
bool updateMenu(int selectIndex) override;

const int getMenuSize() override { return mItemCount; }

private:
static constexpr int mItemCount = 4;
};
51 changes: 51 additions & 0 deletions include/server/snh/SardineMode.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#pragma once

#include "al/camera/CameraTicket.h"
#include "server/gamemode/GameModeBase.hpp"
#include "server/gamemode/GameModeConfigMenu.hpp"
#include "server/gamemode/GameModeInfoBase.hpp"
#include "server/gamemode/GameModeTimer.hpp"
#include "server/snh/SardineConfigMenu.hpp"
#include "layouts/SardineIcon.h"
#include <math.h>

struct SardineInfo : GameModeInfoBase {
SardineInfo() { mMode = GameMode::SARDINE; }
bool mIsIt = false;
bool mIsUseGravity = false;
bool mIsUseGravityCam = false;
bool mIsTether = true;

GameTime mHidingTime;
};

class SardineMode : public GameModeBase {
public:
SardineMode(const char* name);

void init(GameModeInitInfo const& info) override;

virtual void begin() override;
virtual void update() override;
virtual void end() override;

bool isPlayerIt() const { return mInfo->mIsIt; };

void setPlayerTagState(bool state) { mInfo->mIsIt = state; }

void enableGravityMode() { mInfo->mIsUseGravity = true; }
void disableGravityMode() { mInfo->mIsUseGravity = false; }
bool isUseGravity() const { return mInfo->mIsUseGravity; }

void setCameraTicket(al::CameraTicket* ticket) { mTicket = ticket; }

private:
GameModeTimer* mModeTimer = nullptr;
SardineIcon* mModeLayout = nullptr;
SardineInfo* mInfo = nullptr;
al::CameraTicket* mTicket = nullptr;

float pullDistanceMax = 2250.f;
float pullDistanceMin = 1000.f;
float pullPowerRate = 75.f;
};
3 changes: 2 additions & 1 deletion patches/codehook.slpatch
Original file line number Diff line number Diff line change
Expand Up @@ -99,13 +99,14 @@ B59E28 B seadPrintHook // sead::system::print

// Pause Menu Changes

4EAEC4 B overrideNerveHook // makes any button on pause menu run a specific nerve
// 4EAEC4 B overrideNerveHook // makes any button on pause menu run a specific nerve
4EA104 MOV W2, #5 // update state count to account for new custom state
4EA1F0 BL initNerveStateHook // inits options nerve state and server config state
4EA174 MOV X0, X20 // moves StageSceneStatePauseMenu to first arg
4EA17C NOP // prevents first new of StageSceneStateOption
4EA1A8 BL initStateHook // inits StageSceneStateOption and StageSceneStateServerConfig
4EA1C0 NOP // prevents mStateOption ptr from being overriden
4EAFA4 B overrideHelpFadeNerve

// Gravity hooks

Expand Down
Binary file added romfs/LayoutData/SardineIcon.szs
Binary file not shown.
Binary file not shown.
22 changes: 15 additions & 7 deletions source/hooks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,21 @@ bool registerShineToList(Shine* shineActor) {
return al::isAlive(shineActor);
}

void overrideNerveHook(StageSceneStatePauseMenu* thisPtr, al::Nerve* nrvSet) {

if (al::isPadHoldZL(-1)) {
al::setNerve(thisPtr, &nrvStageSceneStatePauseMenuServerConfig);
} else {
al::setNerve(thisPtr, nrvSet);
}
// void overrideNerveHook(StageSceneStatePauseMenu* thisPtr, al::Nerve* nrvSet) {

// if (al::isPadHoldZL(-1)) {
// al::setNerve(thisPtr, &nrvStageSceneStatePauseMenuServerConfig);
// } else {
// al::setNerve(thisPtr, nrvSet);
// }
// }

void overrideHelpFadeNerve(StageSceneStatePauseMenu* thisPtr)
{
// Set label in menu inside LocalizedData/lang/MessageData/LayoutData/Menu.msbt
thisPtr->exeServerConfig();
al::setNerve(thisPtr, &nrvStageSceneStatePauseMenuServerConfig);
return;
}

StageSceneStateServerConfig *sceneStateServerConfig = nullptr;
Expand Down
Loading

0 comments on commit a9b2c87

Please sign in to comment.