mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-02-25 07:11:51 -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"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
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_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) \
|
||||
{ \
|
||||
static HOOK_ID hookId = 0; \
|
||||
GameInteractor::Instance->UnregisterGameHookForID<GameInteractor::ShouldVanillaBehavior>(hookId); \
|
||||
GameInteractor::Instance->UnregisterGameHookForID<GameInteractor::OnVanillaBehavior>(hookId); \
|
||||
hookId = 0; \
|
||||
if (condition) { \
|
||||
hookId = REGISTER_VB_SHOULD(id, body); \
|
||||
|
@ -15,7 +15,6 @@
|
||||
#include "soh/Enhancements/nametag.h"
|
||||
#include "soh/Enhancements/timesaver_hook_handlers.h"
|
||||
#include "soh/Enhancements/TimeSavers/TimeSavers.h"
|
||||
#include "soh/Enhancements/cheat_hook_handlers.h"
|
||||
#include "soh/Enhancements/randomizer/hook_handlers.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"
|
||||
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.
|
||||
void SwitchAge() {
|
||||
if (gPlayState == NULL) return;
|
||||
@ -1476,18 +1345,8 @@ void InitMods() {
|
||||
BossRush_RegisterHooks();
|
||||
RandomizerRegisterHooks();
|
||||
TimeSaverRegisterHooks();
|
||||
CheatsRegisterHooks();
|
||||
TimeSavers_Register();
|
||||
RegisterTTS();
|
||||
RegisterInfiniteMoney();
|
||||
RegisterInfiniteHealth();
|
||||
RegisterInfiniteAmmo();
|
||||
RegisterInfiniteMagic();
|
||||
RegisterInfiniteNayrusLove();
|
||||
RegisterInfiniteISG();
|
||||
RegisterEzQPA();
|
||||
RegisterUnrestrictedItems();
|
||||
RegisterFreezeTime();
|
||||
RegisterOcarinaTimeTravel();
|
||||
RegisterAutoSave();
|
||||
RegisterDaytimeGoldSkultullas();
|
||||
|
Loading…
x
Reference in New Issue
Block a user