mirror of
https://github.com/izzy2lost/2ship2harkinian-Android.git
synced 2026-06-19 01:20:08 -07:00
Support hud editor overrides for kaleido equip animations (#238)
* Support hud editor overrides for kaleido equip animations * use mask style * add missing unset * update to support dpad equip animation
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
|
||||
#include "HudEditor.h"
|
||||
#include "macros.h"
|
||||
|
||||
extern "C" int16_t OTRGetRectDimensionFromLeftEdge(float v);
|
||||
extern "C" int16_t OTRGetRectDimensionFromRightEdge(float v);
|
||||
@@ -13,13 +14,13 @@ HudEditorElement hudEditorElements[HUD_EDITOR_ELEMENT_MAX] = {
|
||||
HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_C_RIGHT, "C-Right Button", "CRight", 271, 18, 255, 240, 0, 255),
|
||||
HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_A, "A Button", "A", 191, 18, 100, 200, 255, 255),
|
||||
HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_C_UP, "C-Up Button", "CUp", 254, 16, 255, 240, 0, 255),
|
||||
HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_D_PAD, "D-Pad", "DPad", 271, 55, 255, 255, 255, 255),
|
||||
HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_START, "Start Button", "Start", 136, 17, 255, 130, 60, 255),
|
||||
HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_MAGIC_METER, "Magic", "Magic", 18, 34, 0, 200, 0, 255),
|
||||
HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_HEARTS, "Hearts", "Hearts", 30, 26, 255, 70, 50, 255),
|
||||
HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_RUPEE_COUNTER, "Rupees", "Rupees", 26, 206, 200, 255, 100, 255),
|
||||
HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_KEY_COUNTER, "Keys", "Keys", 26, 190, 255, 255, 255, 255),
|
||||
HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_SKULLTULA_COUNTER, "Skulltulas", "Skulltulas", 26, 190, 255, 255, 255, 255),
|
||||
HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_D_PAD, "D-Pad", "DPad", 271, 55, 255, 255, 255, 255),
|
||||
};
|
||||
|
||||
extern "C" bool HudEditor_ShouldOverrideDraw() {
|
||||
@@ -30,6 +31,42 @@ extern "C" void HudEditor_SetActiveElement(HudEditorElementID id) {
|
||||
hudEditorActiveElement = id;
|
||||
}
|
||||
|
||||
extern "C" void HudEditor_ModifyKaleidoEquipAnimValues(s16* ulx, s16* uly, s16* shrinkRate) {
|
||||
// Normalize the kaleido matrix values to screen rectangle dimensions
|
||||
*ulx = (*ulx / 10) + (SCREEN_WIDTH / 2);
|
||||
*uly = (SCREEN_HEIGHT / 2) - (*uly / 10);
|
||||
|
||||
s16 offsetFromBaseX = *ulx - hudEditorElements[hudEditorActiveElement].defaultX;
|
||||
s16 offsetFromBaseY = *uly - hudEditorElements[hudEditorActiveElement].defaultY;
|
||||
*ulx = CVarGetInteger(hudEditorElements[hudEditorActiveElement].xCvar,
|
||||
hudEditorElements[hudEditorActiveElement].defaultX) +
|
||||
(offsetFromBaseX * CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f));
|
||||
*uly = CVarGetInteger(hudEditorElements[hudEditorActiveElement].yCvar,
|
||||
hudEditorElements[hudEditorActiveElement].defaultY) +
|
||||
(offsetFromBaseY * CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f));
|
||||
|
||||
if (CVarGetInteger(hudEditorElements[hudEditorActiveElement].modeCvar, HUD_EDITOR_ELEMENT_MODE_VANILLA) == HUD_EDITOR_ELEMENT_MODE_MOVABLE_LEFT) {
|
||||
*ulx = OTRGetRectDimensionFromLeftEdge(*ulx);
|
||||
} else if (CVarGetInteger(hudEditorElements[hudEditorActiveElement].modeCvar, HUD_EDITOR_ELEMENT_MODE_VANILLA) == HUD_EDITOR_ELEMENT_MODE_MOVABLE_RIGHT) {
|
||||
*ulx = OTRGetRectDimensionFromRightEdge(*ulx);
|
||||
}
|
||||
|
||||
// Adjust the values to match the kaleido matrix (origin 0,0 at center of screen, +y going up)
|
||||
*ulx -= SCREEN_WIDTH / 2;
|
||||
// *uly = SCREEN_HEIGHT - *uly;
|
||||
*uly = (SCREEN_HEIGHT / 2) - *uly;
|
||||
|
||||
// Scale by 10 for kaleido animation logic
|
||||
*ulx *= 10;
|
||||
*uly *= 10;
|
||||
|
||||
float scale = CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f);
|
||||
// 320 is the vanilla start size, and 280 is the vanilla end size (or 160 for dpad)
|
||||
// So we apply the scale to 280 and subtract to get the shrink rate
|
||||
int16_t endAnimSize = hudEditorActiveElement == HUD_EDITOR_ELEMENT_D_PAD ? 160 : 280;
|
||||
*shrinkRate = 320 - (s16)(endAnimSize * scale);
|
||||
}
|
||||
|
||||
extern "C" void HudEditor_ModifyDrawValues(s16* rectLeft, s16* rectTop, s16* rectWidth, s16* rectHeight, s16* dsdx, s16* dtdy) {
|
||||
s16 offsetFromBaseX = *rectLeft - hudEditorElements[hudEditorActiveElement].defaultX;
|
||||
s16 offsetFromBaseY = *rectTop - hudEditorElements[hudEditorActiveElement].defaultY;
|
||||
@@ -101,13 +138,13 @@ void HudEditorWindow::DrawElement() {
|
||||
CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_C_RIGHT].modeCvar, HUD_EDITOR_ELEMENT_MODE_MOVABLE_RIGHT);
|
||||
CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_A].modeCvar, HUD_EDITOR_ELEMENT_MODE_MOVABLE_RIGHT);
|
||||
CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_C_UP].modeCvar, HUD_EDITOR_ELEMENT_MODE_MOVABLE_RIGHT);
|
||||
CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_D_PAD].modeCvar, HUD_EDITOR_ELEMENT_MODE_MOVABLE_RIGHT);
|
||||
CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_START].modeCvar, HUD_EDITOR_ELEMENT_MODE_MOVABLE_RIGHT);
|
||||
CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_MAGIC_METER].modeCvar, HUD_EDITOR_ELEMENT_MODE_MOVABLE_LEFT);
|
||||
CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_HEARTS].modeCvar, HUD_EDITOR_ELEMENT_MODE_MOVABLE_LEFT);
|
||||
CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_RUPEE_COUNTER].modeCvar, HUD_EDITOR_ELEMENT_MODE_MOVABLE_LEFT);
|
||||
CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_KEY_COUNTER].modeCvar, HUD_EDITOR_ELEMENT_MODE_MOVABLE_LEFT);
|
||||
CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_SKULLTULA_COUNTER].modeCvar, HUD_EDITOR_ELEMENT_MODE_MOVABLE_LEFT);
|
||||
CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_D_PAD].modeCvar, HUD_EDITOR_ELEMENT_MODE_MOVABLE_RIGHT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,13 +29,13 @@ typedef enum {
|
||||
HUD_EDITOR_ELEMENT_C_RIGHT,
|
||||
HUD_EDITOR_ELEMENT_A,
|
||||
HUD_EDITOR_ELEMENT_C_UP,
|
||||
HUD_EDITOR_ELEMENT_D_PAD,
|
||||
HUD_EDITOR_ELEMENT_START,
|
||||
HUD_EDITOR_ELEMENT_MAGIC_METER,
|
||||
HUD_EDITOR_ELEMENT_HEARTS,
|
||||
HUD_EDITOR_ELEMENT_RUPEE_COUNTER,
|
||||
HUD_EDITOR_ELEMENT_KEY_COUNTER,
|
||||
HUD_EDITOR_ELEMENT_SKULLTULA_COUNTER,
|
||||
HUD_EDITOR_ELEMENT_D_PAD,
|
||||
HUD_EDITOR_ELEMENT_MAX,
|
||||
} HudEditorElementID;
|
||||
|
||||
@@ -49,6 +49,7 @@ typedef enum {
|
||||
|
||||
void HudEditor_SetActiveElement(HudEditorElementID id);
|
||||
bool HudEditor_ShouldOverrideDraw();
|
||||
void HudEditor_ModifyKaleidoEquipAnimValues(s16* ulx, s16* uly, s16* shrinkRate);
|
||||
void HudEditor_ModifyDrawValues(s16* rectLeft, s16* rectTop, s16* rectWidth, s16* rectHeight, s16* dsdx, s16* dtdy);
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
#include "z_kaleido_scope.h"
|
||||
#include "interface/parameter_static/parameter_static.h"
|
||||
|
||||
#include "BenGui/HudEditor.h"
|
||||
|
||||
s16 sEquipState = EQUIP_STATE_MAGIC_ARROW_GROW_ORB;
|
||||
|
||||
// Timer to hold magic arrow icon over magic arrow slot before moving when equipping.
|
||||
@@ -782,16 +784,16 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
|
||||
}
|
||||
}
|
||||
|
||||
s16 sCButtonPosX[] = {
|
||||
s16 sCButtonPosX[] = {
|
||||
660, 900, 1140,
|
||||
// #region 2S2H [Dpad]
|
||||
1340, 860, 1100, 1100
|
||||
1350, 1030, 1190, 1190
|
||||
// #endregion
|
||||
};
|
||||
s16 sCButtonPosY[] = {
|
||||
s16 sCButtonPosY[] = {
|
||||
1100, 920, 1100,
|
||||
// #region 2S2H [Dpad]
|
||||
620, 620, 440, 760
|
||||
570, 570, 410, 730
|
||||
// #endregion
|
||||
};
|
||||
|
||||
@@ -1499,13 +1501,46 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) {
|
||||
return;
|
||||
}
|
||||
|
||||
// #region 2S2H [Cosmetic] Track the C button position vanilla values or HUD editor adjusted values
|
||||
s16 cButtonPosX = sCButtonPosX[pauseCtx->equipTargetCBtn];
|
||||
s16 cButtonPosY = sCButtonPosY[pauseCtx->equipTargetCBtn];
|
||||
|
||||
HudEditor_SetActiveElement(pauseCtx->equipTargetCBtn < 3 ? HUD_EDITOR_ELEMENT_C_LEFT + pauseCtx->equipTargetCBtn
|
||||
: HUD_EDITOR_ELEMENT_D_PAD);
|
||||
|
||||
if (sEquipState == EQUIP_STATE_MOVE_TO_C_BTN && HudEditor_ShouldOverrideDraw()) {
|
||||
s16 equipAnimShrinkRate = 40;
|
||||
HudEditor_ModifyKaleidoEquipAnimValues(&cButtonPosX, &cButtonPosY, &equipAnimShrinkRate);
|
||||
|
||||
// Override the anim shrink rate at the beginning (value is 320)
|
||||
if (pauseCtx->equipAnimScale == 320) {
|
||||
pauseCtx->equipAnimShrinkRate = equipAnimShrinkRate;
|
||||
}
|
||||
|
||||
if (CVarGetInteger(hudEditorElements[hudEditorActiveElement].modeCvar, HUD_EDITOR_ELEMENT_MODE_VANILLA) ==
|
||||
HUD_EDITOR_ELEMENT_MODE_HIDDEN) {
|
||||
pauseCtx->equipAnimScale = 0;
|
||||
pauseCtx->equipAnimShrinkRate = 0;
|
||||
}
|
||||
} else if (sEquipState == EQUIP_STATE_MOVE_TO_C_BTN && pauseCtx->equipTargetCBtn >= 3) {
|
||||
// Equips to DPad need to shrink fast to be have a final smaller size (16px),
|
||||
// So we override the anim shrink rate at the beginning (value is 320)
|
||||
if (pauseCtx->equipAnimScale == 320) {
|
||||
pauseCtx->equipAnimShrinkRate = 160;
|
||||
}
|
||||
}
|
||||
|
||||
HudEditor_SetActiveElement(HUD_EDITOR_ELEMENT_NONE);
|
||||
// #endregion
|
||||
|
||||
if (sEquipState == EQUIP_STATE_MAGIC_ARROW_MOVE_TO_BOW_SLOT) {
|
||||
bowItemVtx = &pauseCtx->itemVtx[SLOT_BOW * 4];
|
||||
offsetX = ABS_ALT(pauseCtx->equipAnimX - bowItemVtx->v.ob[0] * 10) / sEquipAnimTimer;
|
||||
offsetY = ABS_ALT(pauseCtx->equipAnimY - bowItemVtx->v.ob[1] * 10) / sEquipAnimTimer;
|
||||
} else {
|
||||
offsetX = ABS_ALT(pauseCtx->equipAnimX - sCButtonPosX[pauseCtx->equipTargetCBtn]) / sEquipAnimTimer;
|
||||
offsetY = ABS_ALT(pauseCtx->equipAnimY - sCButtonPosY[pauseCtx->equipTargetCBtn]) / sEquipAnimTimer;
|
||||
// 2S2H [Cosmetic] Use position vars from above
|
||||
offsetX = ABS_ALT(pauseCtx->equipAnimX - cButtonPosX) / sEquipAnimTimer;
|
||||
offsetY = ABS_ALT(pauseCtx->equipAnimY - cButtonPosY) / sEquipAnimTimer;
|
||||
}
|
||||
|
||||
if ((pauseCtx->equipTargetItem >= 0xB5) && (pauseCtx->equipAnimAlpha < 254)) {
|
||||
@@ -1537,13 +1572,14 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) {
|
||||
}
|
||||
} else {
|
||||
// target is the c button
|
||||
if (pauseCtx->equipAnimX >= sCButtonPosX[pauseCtx->equipTargetCBtn]) {
|
||||
// 2S2H [Cosmetic] Use position vars from above
|
||||
if (pauseCtx->equipAnimX >= cButtonPosX) {
|
||||
pauseCtx->equipAnimX -= offsetX;
|
||||
} else {
|
||||
pauseCtx->equipAnimX += offsetX;
|
||||
}
|
||||
|
||||
if (pauseCtx->equipAnimY >= sCButtonPosY[pauseCtx->equipTargetCBtn]) {
|
||||
if (pauseCtx->equipAnimY >= cButtonPosY) {
|
||||
pauseCtx->equipAnimY -= offsetY;
|
||||
} else {
|
||||
pauseCtx->equipAnimY += offsetY;
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
#include "z_kaleido_scope.h"
|
||||
#include "interface/parameter_static/parameter_static.h"
|
||||
|
||||
#include "BenGui/HudEditor.h"
|
||||
|
||||
s16 sMaskEquipState = EQUIP_STATE_MAGIC_ARROW_GROW_ORB;
|
||||
|
||||
// Timer to hold magic arrow icon over magic arrow slot before moving when equipping.
|
||||
@@ -683,16 +685,16 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
|
||||
}
|
||||
}
|
||||
|
||||
s16 sMaskCButtonPosX[] = {
|
||||
s16 sMaskCButtonPosX[] = {
|
||||
660, 900, 1140,
|
||||
// #region 2S2H
|
||||
1340, 860, 1100, 1100
|
||||
1350, 1030, 1190, 1190
|
||||
// #endregion
|
||||
};
|
||||
s16 sMaskCButtonPosY[] = {
|
||||
s16 sMaskCButtonPosY[] = {
|
||||
1100, 920, 1100,
|
||||
// #region 2S2H
|
||||
620, 620, 440, 760
|
||||
570, 570, 410, 730
|
||||
// #endregion
|
||||
};
|
||||
|
||||
@@ -1028,6 +1030,38 @@ void KaleidoScope_UpdateMaskEquip(PlayState* play) {
|
||||
return;
|
||||
}
|
||||
|
||||
// #region 2S2H [Cosmetic] Track the C button position vanilla values or HUD editor adjusted values
|
||||
s16 maskCButtonPosX = sMaskCButtonPosX[pauseCtx->equipTargetCBtn];
|
||||
s16 maskCButtonPosY = sMaskCButtonPosY[pauseCtx->equipTargetCBtn];
|
||||
|
||||
HudEditor_SetActiveElement(pauseCtx->equipTargetCBtn < 3 ? HUD_EDITOR_ELEMENT_C_LEFT + pauseCtx->equipTargetCBtn
|
||||
: HUD_EDITOR_ELEMENT_D_PAD);
|
||||
|
||||
if (sMaskEquipState == EQUIP_STATE_MOVE_TO_C_BTN && HudEditor_ShouldOverrideDraw()) {
|
||||
s16 equipAnimShrinkRate = 40;
|
||||
HudEditor_ModifyKaleidoEquipAnimValues(&maskCButtonPosX, &maskCButtonPosY, &equipAnimShrinkRate);
|
||||
|
||||
// Override the anim shrink rate at the beginning (value is 320)
|
||||
if (pauseCtx->equipAnimScale == 320) {
|
||||
pauseCtx->equipAnimShrinkRate = equipAnimShrinkRate;
|
||||
}
|
||||
|
||||
if (CVarGetInteger(hudEditorElements[hudEditorActiveElement].modeCvar, HUD_EDITOR_ELEMENT_MODE_VANILLA) ==
|
||||
HUD_EDITOR_ELEMENT_MODE_HIDDEN) {
|
||||
pauseCtx->equipAnimScale = 0;
|
||||
pauseCtx->equipAnimShrinkRate = 0;
|
||||
}
|
||||
} else if (sMaskEquipState == EQUIP_STATE_MOVE_TO_C_BTN && pauseCtx->equipTargetCBtn >= 3) {
|
||||
// Equips to DPad need to shrink fast to be have a final smaller size (16px),
|
||||
// So we override the anim shrink rate at the beginning (value is 320)
|
||||
if (pauseCtx->equipAnimScale == 320) {
|
||||
pauseCtx->equipAnimShrinkRate = 160;
|
||||
}
|
||||
}
|
||||
|
||||
HudEditor_SetActiveElement(HUD_EDITOR_ELEMENT_NONE);
|
||||
// #endregion
|
||||
|
||||
if (sMaskEquipState == EQUIP_STATE_MAGIC_ARROW_MOVE_TO_BOW_SLOT) {
|
||||
//! Note: Copied from OoT when `SLOT_BOW` was still valued at 3.
|
||||
// Due to a shift, `SLOT_ARROW_ICE` now occupies slot 3 but this value was not updated
|
||||
@@ -1036,8 +1070,9 @@ void KaleidoScope_UpdateMaskEquip(PlayState* play) {
|
||||
offsetX = ABS_ALT(pauseCtx->equipAnimX - bowItemVtx->v.ob[0] * 10) / sMaskEquipAnimTimer;
|
||||
offsetY = ABS_ALT(pauseCtx->equipAnimY - bowItemVtx->v.ob[1] * 10) / sMaskEquipAnimTimer;
|
||||
} else {
|
||||
offsetX = ABS_ALT(pauseCtx->equipAnimX - sMaskCButtonPosX[pauseCtx->equipTargetCBtn]) / sMaskEquipAnimTimer;
|
||||
offsetY = ABS_ALT(pauseCtx->equipAnimY - sMaskCButtonPosY[pauseCtx->equipTargetCBtn]) / sMaskEquipAnimTimer;
|
||||
// 2S2H [Cosmetic] Use position vars from above
|
||||
offsetX = ABS_ALT(pauseCtx->equipAnimX - maskCButtonPosX) / sMaskEquipAnimTimer;
|
||||
offsetY = ABS_ALT(pauseCtx->equipAnimY - maskCButtonPosY) / sMaskEquipAnimTimer;
|
||||
}
|
||||
|
||||
if ((pauseCtx->equipTargetItem >= 0xB5) && (pauseCtx->equipAnimAlpha < 254)) {
|
||||
@@ -1069,13 +1104,14 @@ void KaleidoScope_UpdateMaskEquip(PlayState* play) {
|
||||
}
|
||||
} else {
|
||||
// target is the c button
|
||||
if (pauseCtx->equipAnimX >= sMaskCButtonPosX[pauseCtx->equipTargetCBtn]) {
|
||||
// 2S2H [Cosmetic] Use position vars from above
|
||||
if (pauseCtx->equipAnimX >= maskCButtonPosX) {
|
||||
pauseCtx->equipAnimX -= offsetX;
|
||||
} else {
|
||||
pauseCtx->equipAnimX += offsetX;
|
||||
}
|
||||
|
||||
if (pauseCtx->equipAnimY >= sMaskCButtonPosY[pauseCtx->equipTargetCBtn]) {
|
||||
if (pauseCtx->equipAnimY >= maskCButtonPosY) {
|
||||
pauseCtx->equipAnimY -= offsetY;
|
||||
} else {
|
||||
pauseCtx->equipAnimY += offsetY;
|
||||
|
||||
Reference in New Issue
Block a user