mirror of
https://github.com/izzy2lost/2ship2harkinian-Android.git
synced 2026-06-19 01:20:08 -07:00
Add fast mask transformation enhancement (#244)
This commit is contained in:
@@ -309,6 +309,7 @@ void DrawEnhancementsMenu() {
|
||||
}
|
||||
|
||||
if (UIWidgets::BeginMenu("Masks")) {
|
||||
UIWidgets::CVarCheckbox("Fast Transformation", "gEnhancements.Masks.FastTransformation");
|
||||
UIWidgets::CVarCheckbox("Fierce Deity's Mask Anywhere", "gEnhancements.Masks.FierceDeitysAnywhere", {
|
||||
.tooltip = "Allow using Fierce Deity's mask outside of boss rooms."
|
||||
});
|
||||
|
||||
@@ -9,6 +9,7 @@ void InitEnhancements() {
|
||||
RegisterEndOfCycleSaveHooks();
|
||||
|
||||
// Masks
|
||||
RegisterFastTransformation();
|
||||
RegisterFierceDeityAnywhere();
|
||||
|
||||
// Restorations
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "Cycle/EndOfCycle.h"
|
||||
#include "Masks/FierceDeityAnywhere.h"
|
||||
#include "Restorations/SideRoll.h"
|
||||
#include "Masks/FastTransformation.h"
|
||||
#include "TimeSavers/TimeSavers.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -33,6 +33,7 @@ typedef enum {
|
||||
GI_VB_PLAY_ENTRANCE_CS,
|
||||
GI_VB_DISABLE_FD_MASK,
|
||||
GI_VB_PATCH_SIDEROLL,
|
||||
GI_VB_PREVENT_MASK_TRANSFORMATION_CS,
|
||||
} GIVanillaBehavior;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
#include <libultraship/bridge.h>
|
||||
#include "Enhancements/GameInteractor/GameInteractor.h"
|
||||
|
||||
extern "C" {
|
||||
#include <z64.h>
|
||||
#include <macros.h>
|
||||
extern PlayState* gPlayState;
|
||||
extern SaveContext gSaveContext;
|
||||
extern ActorOverlay gActorOverlayTable[ACTOR_ID_MAX];
|
||||
extern s16 gPlayerFormObjectIds[PLAYER_FORM_MAX];
|
||||
void Player_PlaySfx(Player* player, u16 sfxId);
|
||||
void PlayerCall_Init(Actor* thisx, PlayState* play);
|
||||
void PlayerCall_Update(Actor* thisx, PlayState* play);
|
||||
void PlayerCall_Draw(Actor* thisx, PlayState* play);
|
||||
void TransitionFade_SetColor(void* thisx, u32 color);
|
||||
}
|
||||
|
||||
void RegisterFastTransformation() {
|
||||
REGISTER_VB_SHOULD(GI_VB_PREVENT_MASK_TRANSFORMATION_CS, {
|
||||
if (CVarGetInteger("gEnhancements.Masks.FastTransformation", 0)) {
|
||||
*should = true;
|
||||
Player* player = GET_PLAYER(gPlayState);
|
||||
|
||||
// This was mostly copied directly from func_8012301C within z_player_lib.c
|
||||
s16 objectId = gPlayerFormObjectIds[GET_PLAYER_FORM];
|
||||
|
||||
gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId = objectId;
|
||||
func_8012F73C(&gPlayState->objectCtx, player->actor.objectSlot, objectId);
|
||||
player->actor.objectSlot = Object_GetSlot(&gPlayState->objectCtx, GAMEPLAY_KEEP);
|
||||
|
||||
s32 objectSlot = Object_GetSlot(&gPlayState->objectCtx, gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId);
|
||||
player->actor.objectSlot = objectSlot;
|
||||
player->actor.shape.rot.z = GET_PLAYER_FORM + 1;
|
||||
player->actor.init = PlayerCall_Init;
|
||||
player->actor.update = PlayerCall_Update;
|
||||
player->actor.draw = PlayerCall_Draw;
|
||||
gSaveContext.save.equippedMask = PLAYER_MASK_NONE;
|
||||
|
||||
TransitionFade_SetColor(&gPlayState->unk_18E48, 0x000000);
|
||||
R_TRANS_FADE_FLASH_ALPHA_STEP = -1;
|
||||
Player_PlaySfx(GET_PLAYER(gPlayState), NA_SE_SY_TRANSFORM_MASK_FLASH);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef MASKS_FAST_TRANSFORMATION_H
|
||||
#define MASKS_FAST_TRANSFORMATION_H
|
||||
|
||||
void RegisterFastTransformation();
|
||||
|
||||
#endif // MASKS_FAST_TRANSFORMATION_H
|
||||
@@ -18097,6 +18097,8 @@ void Player_Action_86(Player* this, PlayState* play) {
|
||||
struct_8085D910* sp4C = D_8085D910;
|
||||
s32 sp48 = false;
|
||||
|
||||
if (GameInteractor_Should(GI_VB_PREVENT_MASK_TRANSFORMATION_CS, false, NULL)) return;
|
||||
|
||||
func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_MASK_TRANSFORMATION]);
|
||||
sPlayerControlInput = play->state.input;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user