mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-02-25 15:21:52 -05:00
Move some cheats to Shipinit (#4819)
* Infinite ammo * Infinite health * Infinite magic * Infinite money * Infinite Nayru's love * Unrestricted items * Freeze time * Easy QPA * Easy ISG * Deku stick cheats * Moon jump cleanup * Update Ammo.cpp * Address reviews
This commit is contained in:
parent
ce289c0be9
commit
a46cfff438
27
soh/soh/Enhancements/Cheats/DekuStick.cpp
Normal file
27
soh/soh/Enhancements/Cheats/DekuStick.cpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#include <libultraship/bridge.h>
|
||||||
|
#include "soh/Enhancements/enhancementTypes.h"
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/ShipInit.hpp"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
extern PlayState* gPlayState;
|
||||||
|
#include "macros.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CVAR_DEKU_STICK_NAME CVAR_CHEAT("DekuStick")
|
||||||
|
#define CVAR_DEKU_STICK_DEFAULT DEKU_STICK_NORMAL
|
||||||
|
#define CVAR_DEKU_STICK_VALUE CVarGetInteger(CVAR_DEKU_STICK_NAME, CVAR_DEKU_STICK_DEFAULT)
|
||||||
|
|
||||||
|
void RegisterDekuStickCheats() {
|
||||||
|
COND_VB_SHOULD(VB_DEKU_STICK_BREAK, CVAR_DEKU_STICK_VALUE != DEKU_STICK_NORMAL, { *should = false; });
|
||||||
|
COND_VB_SHOULD(VB_DEKU_STICK_BURN_OUT, CVAR_DEKU_STICK_VALUE != DEKU_STICK_NORMAL, { *should = false; });
|
||||||
|
COND_VB_SHOULD(VB_DEKU_STICK_BURN_DOWN, CVAR_DEKU_STICK_VALUE != DEKU_STICK_NORMAL, { *should = false; });
|
||||||
|
COND_VB_SHOULD(VB_DEKU_STICK_BE_ON_FIRE, CVAR_DEKU_STICK_VALUE == DEKU_STICK_UNBREAKABLE_AND_ALWAYS_ON_FIRE, {
|
||||||
|
Player* player = GET_PLAYER(gPlayState);
|
||||||
|
player->unk_860 = 200; // Keeps the stick's flame lit
|
||||||
|
player->unk_85C = 1.0f; // Ensures the stick is the proper length
|
||||||
|
*should = true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static RegisterShipInitFunc initFunc(RegisterDekuStickCheats, { CVAR_DEKU_STICK_NAME });
|
27
soh/soh/Enhancements/Cheats/EasyISG.cpp
Normal file
27
soh/soh/Enhancements/Cheats/EasyISG.cpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#include <libultraship/bridge.h>
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/ShipInit.hpp"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
extern PlayState* gPlayState;
|
||||||
|
#include "macros.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CVAR_EASY_ISG_NAME CVAR_CHEAT("EasyISG")
|
||||||
|
#define CVAR_EASY_ISG_DEFAULT 0
|
||||||
|
#define CVAR_EASY_ISG_VALUE CVarGetInteger(CVAR_EASY_ISG_NAME, CVAR_EASY_ISG_DEFAULT)
|
||||||
|
|
||||||
|
void OnGameFrameUpdateEasyISG() {
|
||||||
|
if (!GameInteractor::IsSaveLoaded(true)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player* player = GET_PLAYER(gPlayState);
|
||||||
|
player->meleeWeaponState = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterEasyISG() {
|
||||||
|
COND_HOOK(OnGameFrameUpdate, CVAR_EASY_ISG_VALUE, OnGameFrameUpdateEasyISG);
|
||||||
|
}
|
||||||
|
|
||||||
|
static RegisterShipInitFunc initFunc(RegisterEasyISG, { CVAR_EASY_ISG_NAME });
|
28
soh/soh/Enhancements/Cheats/EasyQPA.cpp
Normal file
28
soh/soh/Enhancements/Cheats/EasyQPA.cpp
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#include <libultraship/bridge.h>
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/ShipInit.hpp"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
extern PlayState* gPlayState;
|
||||||
|
#include "macros.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CVAR_EASY_QPA_NAME CVAR_CHEAT("EasyQPA")
|
||||||
|
#define CVAR_EASY_QPA_DEFAULT 0
|
||||||
|
#define CVAR_EASY_QPA_VALUE CVarGetInteger(CVAR_EASY_QPA_NAME, CVAR_EASY_QPA_DEFAULT)
|
||||||
|
|
||||||
|
void OnGameFrameUpdateEasyQPA() {
|
||||||
|
if (!GameInteractor::IsSaveLoaded(true)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player* player = GET_PLAYER(gPlayState);
|
||||||
|
player->meleeWeaponQuads[0].info.toucher.dmgFlags = 0x16171617;
|
||||||
|
player->meleeWeaponQuads[1].info.toucher.dmgFlags = 0x16171617;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterEasyQPA() {
|
||||||
|
COND_HOOK(OnGameFrameUpdate, CVAR_EASY_QPA_VALUE, OnGameFrameUpdateEasyQPA);
|
||||||
|
}
|
||||||
|
|
||||||
|
static RegisterShipInitFunc initFunc(RegisterEasyQPA, { CVAR_EASY_QPA_NAME });
|
39
soh/soh/Enhancements/Cheats/FreezeTime.cpp
Normal file
39
soh/soh/Enhancements/Cheats/FreezeTime.cpp
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#include <libultraship/bridge.h>
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/ShipInit.hpp"
|
||||||
|
#include "z64save.h"
|
||||||
|
|
||||||
|
extern "C" SaveContext gSaveContext;
|
||||||
|
|
||||||
|
#define CVAR_FREEZE_TIME_NAME CVAR_CHEAT("FreezeTime")
|
||||||
|
#define CVAR_FREEZE_TIME_DEFAULT 0
|
||||||
|
#define CVAR_FREEZE_TIME_VALUE CVarGetInteger(CVAR_FREEZE_TIME_NAME, CVAR_FREEZE_TIME_DEFAULT)
|
||||||
|
|
||||||
|
#define CVAR_PREV_TIME_NAME CVAR_GENERAL("PrevTime")
|
||||||
|
#define CVAR_PREV_TIME_DEFAULT -1
|
||||||
|
#define CVAR_PREV_TIME_VALUE CVarGetInteger(CVAR_PREV_TIME_NAME, CVAR_PREV_TIME_DEFAULT)
|
||||||
|
|
||||||
|
void OnGameFrameUpdateFreezeTime() {
|
||||||
|
if (!GameInteractor::IsSaveLoaded(true)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CVAR_PREV_TIME_VALUE == CVAR_PREV_TIME_DEFAULT) {
|
||||||
|
CVarSetInteger(CVAR_PREV_TIME_NAME, gSaveContext.dayTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
gSaveContext.dayTime = CVAR_PREV_TIME_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterFreezeTime() {
|
||||||
|
static HOOK_ID hookId = 0;
|
||||||
|
GameInteractor::Instance->UnregisterGameHook<GameInteractor::OnGameFrameUpdate>(hookId);
|
||||||
|
hookId = 0;
|
||||||
|
if (CVAR_FREEZE_TIME_VALUE) {
|
||||||
|
hookId = GameInteractor::Instance->RegisterGameHook<GameInteractor::OnGameFrameUpdate>(OnGameFrameUpdateFreezeTime);
|
||||||
|
} else {
|
||||||
|
CVarClear(CVAR_PREV_TIME_NAME);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static RegisterShipInitFunc initFunc(RegisterFreezeTime, { CVAR_FREEZE_TIME_NAME });
|
35
soh/soh/Enhancements/Cheats/Infinite/Ammo.cpp
Normal file
35
soh/soh/Enhancements/Cheats/Infinite/Ammo.cpp
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#include <libultraship/bridge.h>
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/ShipInit.hpp"
|
||||||
|
#include "z64save.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
extern SaveContext gSaveContext;
|
||||||
|
#include "variables.h"
|
||||||
|
#include "macros.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CVAR_INFINITE_AMMO_NAME CVAR_CHEAT("InfiniteAmmo")
|
||||||
|
#define CVAR_INFINITE_AMMO_DEFAULT 0
|
||||||
|
#define CVAR_INFINITE_AMMO_VALUE CVarGetInteger(CVAR_INFINITE_AMMO_NAME, CVAR_INFINITE_AMMO_DEFAULT)
|
||||||
|
|
||||||
|
void OnGameFrameUpdateInfiniteAmmo() {
|
||||||
|
if (!GameInteractor::IsSaveLoaded(true)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
AMMO(ITEM_STICK) = CUR_CAPACITY(UPG_STICKS);
|
||||||
|
AMMO(ITEM_NUT) = CUR_CAPACITY(UPG_NUTS);
|
||||||
|
AMMO(ITEM_BOMB) = CUR_CAPACITY(UPG_BOMB_BAG);
|
||||||
|
AMMO(ITEM_BOW) = CUR_CAPACITY(UPG_QUIVER);
|
||||||
|
AMMO(ITEM_SLINGSHOT) = CUR_CAPACITY(UPG_BULLET_BAG);
|
||||||
|
if (INV_CONTENT(ITEM_BOMBCHU) != ITEM_NONE) {
|
||||||
|
AMMO(ITEM_BOMBCHU) = 50;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterInfiniteAmmo() {
|
||||||
|
COND_HOOK(OnGameFrameUpdate, CVAR_INFINITE_AMMO_VALUE, OnGameFrameUpdateInfiniteAmmo);
|
||||||
|
}
|
||||||
|
|
||||||
|
static RegisterShipInitFunc initFunc(RegisterInfiniteAmmo, { CVAR_INFINITE_AMMO_NAME });
|
24
soh/soh/Enhancements/Cheats/Infinite/Health.cpp
Normal file
24
soh/soh/Enhancements/Cheats/Infinite/Health.cpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include <libultraship/bridge.h>
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/ShipInit.hpp"
|
||||||
|
#include "z64save.h"
|
||||||
|
|
||||||
|
extern "C" SaveContext gSaveContext;
|
||||||
|
|
||||||
|
#define CVAR_INFINITE_HEALTH_NAME CVAR_CHEAT("InfiniteHealth")
|
||||||
|
#define CVAR_INFINITE_HEALTH_DEFAULT 0
|
||||||
|
#define CVAR_INFINITE_HEALTH_VALUE CVarGetInteger(CVAR_INFINITE_HEALTH_NAME, CVAR_INFINITE_HEALTH_DEFAULT)
|
||||||
|
|
||||||
|
void OnGameFrameUpdateInfiniteHealth() {
|
||||||
|
if (!GameInteractor::IsSaveLoaded(true)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
gSaveContext.health = gSaveContext.healthCapacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterInfiniteHealth() {
|
||||||
|
COND_HOOK(OnGameFrameUpdate, CVAR_INFINITE_HEALTH_VALUE, OnGameFrameUpdateInfiniteHealth);
|
||||||
|
}
|
||||||
|
|
||||||
|
static RegisterShipInitFunc initFunc(RegisterInfiniteHealth, { CVAR_INFINITE_HEALTH_NAME });
|
24
soh/soh/Enhancements/Cheats/Infinite/Magic.cpp
Normal file
24
soh/soh/Enhancements/Cheats/Infinite/Magic.cpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include <libultraship/bridge.h>
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/ShipInit.hpp"
|
||||||
|
#include "z64save.h"
|
||||||
|
|
||||||
|
extern "C" SaveContext gSaveContext;
|
||||||
|
|
||||||
|
#define CVAR_INFINITE_MAGIC_NAME CVAR_CHEAT("InfiniteMagic")
|
||||||
|
#define CVAR_INFINITE_MAGIC_DEFAULT 0
|
||||||
|
#define CVAR_INFINITE_MAGIC_VALUE CVarGetInteger(CVAR_INFINITE_MAGIC_NAME, CVAR_INFINITE_MAGIC_DEFAULT)
|
||||||
|
|
||||||
|
void OnGameFrameUpdateInfiniteMagic() {
|
||||||
|
if (!GameInteractor::IsSaveLoaded(true)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
gSaveContext.magic = gSaveContext.magicLevel * MAGIC_NORMAL_METER;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterInfiniteMagic() {
|
||||||
|
COND_HOOK(OnGameFrameUpdate, CVAR_INFINITE_MAGIC_VALUE, OnGameFrameUpdateInfiniteMagic);
|
||||||
|
}
|
||||||
|
|
||||||
|
static RegisterShipInitFunc initFunc(RegisterInfiniteMagic, { CVAR_INFINITE_MAGIC_NAME });
|
32
soh/soh/Enhancements/Cheats/Infinite/Money.cpp
Normal file
32
soh/soh/Enhancements/Cheats/Infinite/Money.cpp
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#include <libultraship/bridge.h>
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/ShipInit.hpp"
|
||||||
|
#include "z64save.h"
|
||||||
|
#include "variables.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
extern SaveContext gSaveContext;
|
||||||
|
extern s32 Flags_GetRandomizerInf(RandomizerInf flag);
|
||||||
|
#include "macros.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CVAR_INFINITE_MONEY_NAME CVAR_CHEAT("InfiniteMoney")
|
||||||
|
#define CVAR_INFINITE_MONEY_DEFAULT 0
|
||||||
|
#define CVAR_INFINITE_MONEY_VALUE CVarGetInteger(CVAR_INFINITE_MONEY_NAME, CVAR_INFINITE_MONEY_DEFAULT)
|
||||||
|
|
||||||
|
void OnGameFrameUpdateInfiniteMoney() {
|
||||||
|
if (
|
||||||
|
!GameInteractor::IsSaveLoaded(true) ||
|
||||||
|
(IS_RANDO && !Flags_GetRandomizerInf(RAND_INF_HAS_WALLET))
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
gSaveContext.rupees = CUR_CAPACITY(UPG_WALLET);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterInfiniteMoney() {
|
||||||
|
COND_HOOK(OnGameFrameUpdate, CVAR_INFINITE_MONEY_VALUE, OnGameFrameUpdateInfiniteMoney);
|
||||||
|
}
|
||||||
|
|
||||||
|
static RegisterShipInitFunc initFunc(RegisterInfiniteMoney, { CVAR_INFINITE_MONEY_NAME });
|
24
soh/soh/Enhancements/Cheats/Infinite/NayrusLove.cpp
Normal file
24
soh/soh/Enhancements/Cheats/Infinite/NayrusLove.cpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include <libultraship/bridge.h>
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/ShipInit.hpp"
|
||||||
|
#include "z64save.h"
|
||||||
|
|
||||||
|
extern "C" SaveContext gSaveContext;
|
||||||
|
|
||||||
|
#define CVAR_INFINITE_NAYRUS_LOVE_NAME CVAR_CHEAT("InfiniteNayru")
|
||||||
|
#define CVAR_INFINITE_NAYRUS_LOVE_DEFAULT 0
|
||||||
|
#define CVAR_INFINITE_NAYRUS_LOVE_VALUE CVarGetInteger(CVAR_INFINITE_NAYRUS_LOVE_NAME, CVAR_INFINITE_NAYRUS_LOVE_DEFAULT)
|
||||||
|
|
||||||
|
void OnGameFrameUpdateInfiniteNayrusLove() {
|
||||||
|
if (!GameInteractor::IsSaveLoaded(true)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
gSaveContext.nayrusLoveTimer = 0x44B;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterInfiniteNayrusLove() {
|
||||||
|
COND_HOOK(OnGameFrameUpdate, CVAR_INFINITE_NAYRUS_LOVE_VALUE, OnGameFrameUpdateInfiniteNayrusLove);
|
||||||
|
}
|
||||||
|
|
||||||
|
static RegisterShipInitFunc initFunc(RegisterInfiniteNayrusLove, { CVAR_INFINITE_NAYRUS_LOVE_NAME });
|
@ -3,11 +3,11 @@
|
|||||||
#include "soh/ShipInit.hpp"
|
#include "soh/ShipInit.hpp"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include "macros.h"
|
|
||||||
extern PlayState* gPlayState;
|
extern PlayState* gPlayState;
|
||||||
|
#include "macros.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CVAR_MOON_JUMP_NAME "gCheats.MoonJumpOnL"
|
#define CVAR_MOON_JUMP_NAME CVAR_CHEAT("MoonJumpOnL")
|
||||||
#define CVAR_MOON_JUMP_DEFAULT 0
|
#define CVAR_MOON_JUMP_DEFAULT 0
|
||||||
#define CVAR_MOON_JUMP_VALUE CVarGetInteger(CVAR_MOON_JUMP_NAME, CVAR_MOON_JUMP_DEFAULT)
|
#define CVAR_MOON_JUMP_VALUE CVarGetInteger(CVAR_MOON_JUMP_NAME, CVAR_MOON_JUMP_DEFAULT)
|
||||||
|
|
||||||
|
26
soh/soh/Enhancements/Cheats/UnrestrictedItems.cpp
Normal file
26
soh/soh/Enhancements/Cheats/UnrestrictedItems.cpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#include <libultraship/bridge.h>
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/ShipInit.hpp"
|
||||||
|
|
||||||
|
extern "C" PlayState* gPlayState;
|
||||||
|
|
||||||
|
#define CVAR_UNRESTRICTED_ITEMS_NAME CVAR_CHEAT("NoRestrictItems")
|
||||||
|
#define CVAR_UNRESTRICTED_ITEMS_DEFAULT 0
|
||||||
|
#define CVAR_UNRESTRICTED_ITEMS_VALUE CVarGetInteger(CVAR_UNRESTRICTED_ITEMS_NAME, CVAR_UNRESTRICTED_ITEMS_DEFAULT)
|
||||||
|
|
||||||
|
void OnGameFrameUpdateUnrestrictedItems() {
|
||||||
|
if (!GameInteractor::IsSaveLoaded(true)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// do not allow the use of sun's song even with the cheat
|
||||||
|
u8 sunsBackup = gPlayState->interfaceCtx.restrictions.sunsSong;
|
||||||
|
memset(&gPlayState->interfaceCtx.restrictions, 0, sizeof(gPlayState->interfaceCtx.restrictions));
|
||||||
|
gPlayState->interfaceCtx.restrictions.sunsSong = sunsBackup;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterUnrestrictedItems() {
|
||||||
|
COND_HOOK(OnGameFrameUpdate, CVAR_UNRESTRICTED_ITEMS_VALUE, OnGameFrameUpdateUnrestrictedItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
static RegisterShipInitFunc initFunc(RegisterUnrestrictedItems, { CVAR_UNRESTRICTED_ITEMS_NAME });
|
@ -1,58 +0,0 @@
|
|||||||
#include <libultraship/bridge.h>
|
|
||||||
#include "soh/OTRGlobals.h"
|
|
||||||
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
|
||||||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
|
||||||
#include "soh/Enhancements/enhancementTypes.h"
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
#include "macros.h"
|
|
||||||
#include "variables.h"
|
|
||||||
|
|
||||||
extern SaveContext gSaveContext;
|
|
||||||
extern PlayState* gPlayState;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CheatsOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) {
|
|
||||||
switch (id) {
|
|
||||||
case VB_DEKU_STICK_BREAK: {
|
|
||||||
if (CVarGetInteger(CVAR_CHEAT("DekuStick"), DEKU_STICK_NORMAL) != DEKU_STICK_NORMAL) {
|
|
||||||
*should = false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case VB_DEKU_STICK_BE_ON_FIRE: {
|
|
||||||
if (CVarGetInteger(CVAR_CHEAT("DekuStick"), DEKU_STICK_NORMAL) == DEKU_STICK_UNBREAKABLE_AND_ALWAYS_ON_FIRE) {
|
|
||||||
Player* player = GET_PLAYER(gPlayState);
|
|
||||||
player->unk_860 = 200; // Keeps the stick's flame lit
|
|
||||||
player->unk_85C = 1.0f; // Ensures the stick is the proper length
|
|
||||||
*should = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case VB_DEKU_STICK_BURN_OUT: {
|
|
||||||
if (CVarGetInteger(CVAR_CHEAT("DekuStick"), DEKU_STICK_NORMAL) != DEKU_STICK_NORMAL) {
|
|
||||||
*should = false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case VB_DEKU_STICK_BURN_DOWN: {
|
|
||||||
if (CVarGetInteger(CVAR_CHEAT("DekuStick"), DEKU_STICK_NORMAL) != DEKU_STICK_NORMAL) {
|
|
||||||
*should = false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint32_t onVanillaBehaviorHook = 0;
|
|
||||||
void CheatsRegisterHooks() {
|
|
||||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnLoadGame>([](int32_t fileNum) mutable {
|
|
||||||
|
|
||||||
GameInteractor::Instance->UnregisterGameHook<GameInteractor::OnVanillaBehavior>(onVanillaBehaviorHook);
|
|
||||||
onVanillaBehaviorHook = 0;
|
|
||||||
onVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook<GameInteractor::OnVanillaBehavior>(CheatsOnVanillaBehaviorHandler);
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
#ifndef CHEAT_HOOK_HANDLERS_H
|
|
||||||
#define CHEAT_HOOK_HANDLERS_H
|
|
||||||
|
|
||||||
void CheatsRegisterHooks();
|
|
||||||
|
|
||||||
#endif // CHEAT_HOOK_HANDLERS_H
|
|
@ -633,7 +633,7 @@ struct HookInfo {
|
|||||||
#define COND_VB_SHOULD(id, condition, body) \
|
#define COND_VB_SHOULD(id, condition, body) \
|
||||||
{ \
|
{ \
|
||||||
static HOOK_ID hookId = 0; \
|
static HOOK_ID hookId = 0; \
|
||||||
GameInteractor::Instance->UnregisterGameHookForID<GameInteractor::ShouldVanillaBehavior>(hookId); \
|
GameInteractor::Instance->UnregisterGameHookForID<GameInteractor::OnVanillaBehavior>(hookId); \
|
||||||
hookId = 0; \
|
hookId = 0; \
|
||||||
if (condition) { \
|
if (condition) { \
|
||||||
hookId = REGISTER_VB_SHOULD(id, body); \
|
hookId = REGISTER_VB_SHOULD(id, body); \
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
#include "soh/Enhancements/nametag.h"
|
#include "soh/Enhancements/nametag.h"
|
||||||
#include "soh/Enhancements/timesaver_hook_handlers.h"
|
#include "soh/Enhancements/timesaver_hook_handlers.h"
|
||||||
#include "soh/Enhancements/TimeSavers/TimeSavers.h"
|
#include "soh/Enhancements/TimeSavers/TimeSavers.h"
|
||||||
#include "soh/Enhancements/cheat_hook_handlers.h"
|
|
||||||
#include "soh/Enhancements/randomizer/hook_handlers.h"
|
#include "soh/Enhancements/randomizer/hook_handlers.h"
|
||||||
#include "objects/object_gi_compass/object_gi_compass.h"
|
#include "objects/object_gi_compass/object_gi_compass.h"
|
||||||
|
|
||||||
@ -68,136 +67,6 @@ static const ALIGN_ASSET(2) char tokinoma_room_0DL_007A70[] = dtokinoma_room_0DL
|
|||||||
#define dtokinoma_room_0DL_007FD0 "__OTR__scenes/shared/tokinoma_scene/tokinoma_room_0DL_007FD0"
|
#define dtokinoma_room_0DL_007FD0 "__OTR__scenes/shared/tokinoma_scene/tokinoma_room_0DL_007FD0"
|
||||||
static const ALIGN_ASSET(2) char tokinoma_room_0DL_007FD0[] = dtokinoma_room_0DL_007FD0;
|
static const ALIGN_ASSET(2) char tokinoma_room_0DL_007FD0[] = dtokinoma_room_0DL_007FD0;
|
||||||
|
|
||||||
void RegisterInfiniteMoney() {
|
|
||||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnGameFrameUpdate>([]() {
|
|
||||||
if (!GameInteractor::IsSaveLoaded(true)) return;
|
|
||||||
if (CVarGetInteger(CVAR_CHEAT("InfiniteMoney"), 0) != 0 && (!IS_RANDO || Flags_GetRandomizerInf(RAND_INF_HAS_WALLET))) {
|
|
||||||
if (gSaveContext.rupees < CUR_CAPACITY(UPG_WALLET)) {
|
|
||||||
gSaveContext.rupees = CUR_CAPACITY(UPG_WALLET);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void RegisterInfiniteHealth() {
|
|
||||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnGameFrameUpdate>([]() {
|
|
||||||
if (!GameInteractor::IsSaveLoaded(true)) return;
|
|
||||||
if (CVarGetInteger(CVAR_CHEAT("InfiniteHealth"), 0) != 0) {
|
|
||||||
if (gSaveContext.health < gSaveContext.healthCapacity) {
|
|
||||||
gSaveContext.health = gSaveContext.healthCapacity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void RegisterInfiniteAmmo() {
|
|
||||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnGameFrameUpdate>([]() {
|
|
||||||
if (!GameInteractor::IsSaveLoaded(true)) return;
|
|
||||||
if (CVarGetInteger(CVAR_CHEAT("InfiniteAmmo"), 0) != 0) {
|
|
||||||
// Deku Sticks
|
|
||||||
if (AMMO(ITEM_STICK) < CUR_CAPACITY(UPG_STICKS)) {
|
|
||||||
AMMO(ITEM_STICK) = CUR_CAPACITY(UPG_STICKS);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deku Nuts
|
|
||||||
if (AMMO(ITEM_NUT) < CUR_CAPACITY(UPG_NUTS)) {
|
|
||||||
AMMO(ITEM_NUT) = CUR_CAPACITY(UPG_NUTS);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bombs
|
|
||||||
if (AMMO(ITEM_BOMB) < CUR_CAPACITY(UPG_BOMB_BAG)) {
|
|
||||||
AMMO(ITEM_BOMB) = CUR_CAPACITY(UPG_BOMB_BAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fairy Bow (Ammo)
|
|
||||||
if (AMMO(ITEM_BOW) < CUR_CAPACITY(UPG_QUIVER)) {
|
|
||||||
AMMO(ITEM_BOW) = CUR_CAPACITY(UPG_QUIVER);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fairy Slingshot (Ammo)
|
|
||||||
if (AMMO(ITEM_SLINGSHOT) < CUR_CAPACITY(UPG_BULLET_BAG)) {
|
|
||||||
AMMO(ITEM_SLINGSHOT) = CUR_CAPACITY(UPG_BULLET_BAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bombchus (max: 50, no upgrades)
|
|
||||||
if (INV_CONTENT(ITEM_BOMBCHU) == ITEM_BOMBCHU && AMMO(ITEM_BOMBCHU) < 50) {
|
|
||||||
AMMO(ITEM_BOMBCHU) = 50;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void RegisterInfiniteMagic() {
|
|
||||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnGameFrameUpdate>([]() {
|
|
||||||
if (!GameInteractor::IsSaveLoaded(true)) return;
|
|
||||||
if (CVarGetInteger(CVAR_CHEAT("InfiniteMagic"), 0) != 0) {
|
|
||||||
if (gSaveContext.isMagicAcquired && gSaveContext.magic != (gSaveContext.isDoubleMagicAcquired + 1) * 0x30) {
|
|
||||||
gSaveContext.magic = (gSaveContext.isDoubleMagicAcquired + 1) * 0x30;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void RegisterInfiniteNayrusLove() {
|
|
||||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnGameFrameUpdate>([]() {
|
|
||||||
if (!GameInteractor::IsSaveLoaded(true)) return;
|
|
||||||
if (CVarGetInteger(CVAR_CHEAT("InfiniteNayru"), 0) != 0) {
|
|
||||||
gSaveContext.nayrusLoveTimer = 0x44B;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void RegisterInfiniteISG() {
|
|
||||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnGameFrameUpdate>([]() {
|
|
||||||
if (!GameInteractor::IsSaveLoaded(true)) return;
|
|
||||||
|
|
||||||
if (CVarGetInteger(CVAR_CHEAT("EasyISG"), 0) != 0) {
|
|
||||||
Player* player = GET_PLAYER(gPlayState);
|
|
||||||
player->meleeWeaponState = 1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//Permanent quick put away (QPA) glitched damage value
|
|
||||||
void RegisterEzQPA() {
|
|
||||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnGameFrameUpdate>([]() {
|
|
||||||
if (!GameInteractor::IsSaveLoaded(true)) return;
|
|
||||||
|
|
||||||
if (CVarGetInteger(CVAR_CHEAT("EasyQPA"), 0) != 0) {
|
|
||||||
Player* player = GET_PLAYER(gPlayState);
|
|
||||||
player->meleeWeaponQuads[0].info.toucher.dmgFlags = 0x16171617;
|
|
||||||
player->meleeWeaponQuads[1].info.toucher.dmgFlags = 0x16171617;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void RegisterUnrestrictedItems() {
|
|
||||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnGameFrameUpdate>([]() {
|
|
||||||
if (!GameInteractor::IsSaveLoaded(true)) return;
|
|
||||||
|
|
||||||
if (CVarGetInteger(CVAR_CHEAT("NoRestrictItems"), 0) != 0) {
|
|
||||||
u8 sunsBackup = gPlayState->interfaceCtx.restrictions.sunsSong;
|
|
||||||
memset(&gPlayState->interfaceCtx.restrictions, 0, sizeof(gPlayState->interfaceCtx.restrictions));
|
|
||||||
gPlayState->interfaceCtx.restrictions.sunsSong = sunsBackup;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void RegisterFreezeTime() {
|
|
||||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnGameFrameUpdate>([]() {
|
|
||||||
if (CVarGetInteger(CVAR_CHEAT("FreezeTime"), 0) != 0) {
|
|
||||||
if (CVarGetInteger(CVAR_GENERAL("PrevTime"), -1) == -1) {
|
|
||||||
CVarSetInteger(CVAR_GENERAL("PrevTime"), gSaveContext.dayTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t prevTime = CVarGetInteger(CVAR_GENERAL("PrevTime"), gSaveContext.dayTime);
|
|
||||||
gSaveContext.dayTime = prevTime;
|
|
||||||
} else {
|
|
||||||
CVarClear(CVAR_GENERAL("PrevTime"));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Switches Link's age and respawns him at the last entrance he entered.
|
/// Switches Link's age and respawns him at the last entrance he entered.
|
||||||
void SwitchAge() {
|
void SwitchAge() {
|
||||||
if (gPlayState == NULL) return;
|
if (gPlayState == NULL) return;
|
||||||
@ -1476,18 +1345,8 @@ void InitMods() {
|
|||||||
BossRush_RegisterHooks();
|
BossRush_RegisterHooks();
|
||||||
RandomizerRegisterHooks();
|
RandomizerRegisterHooks();
|
||||||
TimeSaverRegisterHooks();
|
TimeSaverRegisterHooks();
|
||||||
CheatsRegisterHooks();
|
|
||||||
TimeSavers_Register();
|
TimeSavers_Register();
|
||||||
RegisterTTS();
|
RegisterTTS();
|
||||||
RegisterInfiniteMoney();
|
|
||||||
RegisterInfiniteHealth();
|
|
||||||
RegisterInfiniteAmmo();
|
|
||||||
RegisterInfiniteMagic();
|
|
||||||
RegisterInfiniteNayrusLove();
|
|
||||||
RegisterInfiniteISG();
|
|
||||||
RegisterEzQPA();
|
|
||||||
RegisterUnrestrictedItems();
|
|
||||||
RegisterFreezeTime();
|
|
||||||
RegisterOcarinaTimeTravel();
|
RegisterOcarinaTimeTravel();
|
||||||
RegisterAutoSave();
|
RegisterAutoSave();
|
||||||
RegisterDaytimeGoldSkultullas();
|
RegisterDaytimeGoldSkultullas();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user