Add Hud Editor support for Minimaps (#402)

* Hud Editor support for minimaps

* minimap blue color
This commit is contained in:
Archez
2024-05-22 09:05:05 -05:00
committed by Garrett Cox
parent 72625182a4
commit 5aa2d17460
3 changed files with 232 additions and 27 deletions
+36 -5
View File
@@ -15,6 +15,7 @@ HudEditorElement hudEditorElements[HUD_EDITOR_ELEMENT_MAX] = {
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_MINIMAP, "Minimap", "Minimap", 295, 220, 0, 255, 255, 160),
HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_START, "Start Button", "Start", 136, 17, 255, 130, 60, 255),
HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_HEARTS, "Hearts", "Hearts", 30, 26, 255, 70, 50, 255),
HUD_EDITOR_ELEMENT(HUD_EDITOR_ELEMENT_MAGIC_METER, "Magic", "Magic", 18, 34, 0, 200, 0, 255),
@@ -27,13 +28,35 @@ HudEditorElement hudEditorElements[HUD_EDITOR_ELEMENT_MAX] = {
};
extern "C" bool HudEditor_ShouldOverrideDraw() {
return hudEditorActiveElement != HUD_EDITOR_ELEMENT_NONE && CVarGetInteger(hudEditorElements[hudEditorActiveElement].modeCvar, HUD_EDITOR_ELEMENT_MODE_VANILLA) != HUD_EDITOR_ELEMENT_MODE_VANILLA;
return hudEditorActiveElement != HUD_EDITOR_ELEMENT_NONE &&
CVarGetInteger(hudEditorElements[hudEditorActiveElement].modeCvar, HUD_EDITOR_ELEMENT_MODE_VANILLA) !=
HUD_EDITOR_ELEMENT_MODE_VANILLA;
}
extern "C" void HudEditor_SetActiveElement(HudEditorElementID id) {
hudEditorActiveElement = id;
}
extern "C" bool HudEditor_IsActiveElementHidden() {
return hudEditorActiveElement != HUD_EDITOR_ELEMENT_NONE
? CVarGetInteger(hudEditorElements[hudEditorActiveElement].modeCvar, HUD_EDITOR_ELEMENT_MODE_VANILLA) ==
HUD_EDITOR_ELEMENT_MODE_HIDDEN
: false;
}
extern "C" f32 HudEditor_GetActiveElementScale() {
return hudEditorActiveElement != HUD_EDITOR_ELEMENT_NONE
? CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f)
: 1.0f;
}
extern "C" void HudEditor_ModifyRectPosValuesFromBase(s16 baseX, s16 baseY, s16* rectLeft, s16* rectTop) {
s16 offsetFromBaseX = *rectLeft - baseX;
s16 offsetFromBaseY = *rectTop - baseY;
*rectLeft = baseX + (offsetFromBaseX * CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f));
*rectTop = baseY + (offsetFromBaseY * CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f));
}
extern "C" void HudEditor_ModifyRectPosValues(s16* rectLeft, s16* rectTop) {
s16 offsetFromBaseX = *rectLeft - hudEditorElements[hudEditorActiveElement].defaultX;
s16 offsetFromBaseY = *rectTop - hudEditorElements[hudEditorActiveElement].defaultY;
@@ -53,6 +76,16 @@ extern "C" void HudEditor_ModifyRectPosValues(s16* rectLeft, s16* rectTop) {
}
}
extern "C" void HudEditor_ModifyRectSizeValues(s16* rectWidth, s16* rectHeight) {
*rectWidth *= CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f);
*rectHeight *= CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f);
}
extern "C" void HudEditor_ModifyTextureStepValues(s16* dsdx, s16* dtdy) {
*dsdx /= CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f);
*dtdy /= CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f);
}
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);
@@ -78,10 +111,7 @@ extern "C" void HudEditor_ModifyKaleidoEquipAnimValues(s16* ulx, s16* uly, s16*
extern "C" void HudEditor_ModifyDrawValuesFromBase(s16 baseX, s16 baseY, s16* rectLeft, s16* rectTop, s16* rectWidth,
s16* rectHeight, s16* dsdx, s16* dtdy) {
s16 offsetFromBaseX = *rectLeft - baseX;
s16 offsetFromBaseY = *rectTop - baseY;
*rectLeft = baseX + (offsetFromBaseX * CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f));
*rectTop = baseY + (offsetFromBaseY * CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f));
HudEditor_ModifyRectPosValuesFromBase(baseX, baseY, rectLeft, rectTop);
*rectWidth *= CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f);
*rectHeight *= CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f);
@@ -153,6 +183,7 @@ void HudEditorWindow::DrawElement() {
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_MINIMAP].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_HEARTS].modeCvar, HUD_EDITOR_ELEMENT_MODE_MOVABLE_LEFT);
CVarSetInteger(hudEditorElements[HUD_EDITOR_ELEMENT_MAGIC_METER].modeCvar, HUD_EDITOR_ELEMENT_MODE_MOVABLE_LEFT);
+6
View File
@@ -30,6 +30,7 @@ typedef enum {
HUD_EDITOR_ELEMENT_A,
HUD_EDITOR_ELEMENT_C_UP,
HUD_EDITOR_ELEMENT_D_PAD,
HUD_EDITOR_ELEMENT_MINIMAP,
HUD_EDITOR_ELEMENT_START,
HUD_EDITOR_ELEMENT_HEARTS,
HUD_EDITOR_ELEMENT_MAGIC_METER,
@@ -52,7 +53,12 @@ typedef enum {
void HudEditor_SetActiveElement(HudEditorElementID id);
bool HudEditor_ShouldOverrideDraw();
bool HudEditor_IsActiveElementHidden();
f32 HudEditor_GetActiveElementScale();
void HudEditor_ModifyRectPosValuesFromBase(s16 baseX, s16 baseY, s16* rectLeft, s16* rectTop);
void HudEditor_ModifyRectPosValues(s16* rectLeft, s16* rectTop);
void HudEditor_ModifyRectSizeValues(s16* rectWidth, s16* rectHeight);
void HudEditor_ModifyTextureStepValues(s16* dsdx, s16* dtdy);
void HudEditor_ModifyKaleidoEquipAnimValues(s16* ulx, s16* uly, s16* shrinkRate);
void HudEditor_ModifyDrawValuesFromBase(s16 baseX, s16 baseY, s16* rectLeft, s16* rectTop, s16* rectWidth, s16* rectHeight, s16* dsdx, s16* dtdy);
void HudEditor_ModifyDrawValues(s16* rectLeft, s16* rectTop, s16* rectWidth, s16* rectHeight, s16* dsdx, s16* dtdy);
+190 -22
View File
@@ -8,6 +8,7 @@
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
#include "BenPort.h"
#include "BenGui/HudEditor.h"
void MapDisp_DestroyMapI(PlayState* play);
void MapDisp_InitMapI(PlayState* play);
@@ -317,8 +318,29 @@ void MapDisp_DrawMinimapRoom(PlayState* play, TexturePtr texture, s32 x, s32 y,
dsdx = (mapDataRoom->flags & MAP_DATA_ROOM_FLIP_X) ? dsdx_temp & 0xFFFF : dsdx_temp;
dtdy = (mapDataRoom->flags & MAP_DATA_ROOM_FLIP_Y) ? dtdy_temp : dtdy_temp & 0xFFFF;
gSPTextureRectangle(OVERLAY_DISP++, x << 2, y << 2, (texWidth + x) << 2, (y + texHeight) << 2, G_TX_RENDERTILE, s,
t, dsdx, dtdy);
// #region 2S2H [Cosmetic] Hud Editor minimap texture
if (HudEditor_ShouldOverrideDraw()) {
dsdx = 512;
dtdy = 512;
// Base position is already set, now we just handle the texture size and step
HudEditor_ModifyRectSizeValues(&texWidth, &texHeight);
HudEditor_ModifyTextureStepValues(&dsdx, &dtdy);
// Apply texture flipping to scaled value like above
dsdx_temp = ((mapDataRoom->flags & MAP_DATA_ROOM_FLIP_X) ? -1 : 1) * (dsdx << 1);
dtdy_temp = ((mapDataRoom->flags & MAP_DATA_ROOM_FLIP_Y) ? 1 : -1) * (dtdy << 1);
dsdx = (mapDataRoom->flags & MAP_DATA_ROOM_FLIP_X) ? dsdx_temp & 0xFFFF : dsdx_temp;
dtdy = (mapDataRoom->flags & MAP_DATA_ROOM_FLIP_Y) ? dtdy_temp : dtdy_temp & 0xFFFF;
gSPWideTextureRectangle(OVERLAY_DISP++, x << 2, y << 2, (texWidth + x) << 2, (y + texHeight) << 2,
G_TX_RENDERTILE, s, t, dsdx, dtdy);
} else {
// #endregion
gSPTextureRectangle(OVERLAY_DISP++, x << 2, y << 2, (texWidth + x) << 2, (y + texHeight) << 2, G_TX_RENDERTILE,
s, t, dsdx, dtdy);
}
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -392,7 +414,22 @@ void MapDisp_Minimap_DrawActorIcon(PlayState* play, Actor* actor) {
sMapDisp.minimapCurY - sMapDisp.minimapBaseY + texOffsetY;
}
if ((posX > 0) && (posX < 0x3FF) && (posY > 0) && (posY < 0x3FF)) {
// 2S2H [Cosmetic] Widescreen support
if ((posX > OTRGetRectDimensionFromLeftEdge(0)) && (posX < 0x3FF) && (posY > 0) && (posY < 0x3FF)) {
// #region 2S2H [Cosmetic] Hud Editor override actor values and use them below
s16 squareWidth = actor->id == ACTOR_EN_BOX ? 4 : 1;
s16 squareHeight = actor->id == ACTOR_EN_BOX ? 4 : 1;
s16 dsdx = 512;
s16 dtdy = 512;
if (HudEditor_ShouldOverrideDraw()) {
HudEditor_ModifyDrawValuesFromBase(sMapDisp.minimapCurX, sMapDisp.minimapCurY, &posX, &posY, &squareWidth,
&squareHeight, &dsdx, &dtdy);
// Texture rectangles can't be smaller than 1 unit
squareWidth = MAX(squareWidth, 1);
squareHeight = MAX(squareHeight, 1);
}
// #endregion
OPEN_DISPS(play->state.gfxCtx);
if ((actor->category == ACTORCAT_PLAYER) && (actor->flags & ACTOR_FLAG_80000000)) {
@@ -414,6 +451,12 @@ void MapDisp_Minimap_DrawActorIcon(PlayState* play, Actor* actor) {
}
Matrix_RotateYF(compassRot / 10.0f, MTXMODE_APPLY);
Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY);
// #region 2S2H [Cosmetic] Hud Editor yellow compass matrix scale on x and z
if (HudEditor_ShouldOverrideDraw()) {
f32 elemScale = HudEditor_GetActiveElementScale();
Matrix_Scale(elemScale, 1.0f, elemScale, MTXMODE_APPLY);
}
// #endregion
gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 255, 0, play->interfaceCtx.minimapAlpha);
gSPDisplayList(OVERLAY_DISP++, gCompassArrowDL);
@@ -430,8 +473,15 @@ void MapDisp_Minimap_DrawActorIcon(PlayState* play, Actor* actor) {
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
G_TX_NOLOD, G_TX_NOLOD);
gSPTextureRectangle(OVERLAY_DISP++, (posX - 4) << 2, (posY - 4) << 2, (posX + 4) << 2, (posY + 4) << 2,
G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
// #region 2S2H [Cosmetic] Hud Editor chest icons
if (HudEditor_ShouldOverrideDraw()) {
gSPWideTextureRectangle(OVERLAY_DISP++, (posX - squareWidth) << 2, (posY - squareHeight) << 2,
(posX + squareWidth) << 2, (posY + squareHeight) << 2, G_TX_RENDERTILE, 0, 0,
dsdx << 1, dtdy << 1);
} else {
gSPTextureRectangle(OVERLAY_DISP++, (posX - 4) << 2, (posY - 4) << 2, (posX + 4) << 2, (posY + 4) << 2,
G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
}
} else {
Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
@@ -439,8 +489,16 @@ void MapDisp_Minimap_DrawActorIcon(PlayState* play, Actor* actor) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sMinimapActorCategoryColors[actor->category].r,
sMinimapActorCategoryColors[actor->category].g,
sMinimapActorCategoryColors[actor->category].b, play->interfaceCtx.minimapAlpha);
gSPTextureRectangle(OVERLAY_DISP++, (posX - 1) << 2, (posY - 1) << 2, (posX + 1) << 2, (posY + 1) << 2,
G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001);
// #region 2S2H [Cosmetic] Hud Editor actor dots
if (HudEditor_ShouldOverrideDraw()) {
gSPWideTextureRectangle(OVERLAY_DISP++, (posX - squareWidth) << 2, (posY - squareHeight) << 2,
(posX + squareWidth) << 2, (posY + squareHeight) << 2, G_TX_RENDERTILE, 0,
0, dsdx << 1, dtdy << 1);
} else {
gSPTextureRectangle(OVERLAY_DISP++, (posX - 1) << 2, (posY - 1) << 2, (posX + 1) << 2,
(posY + 1) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001);
}
}
}
CLOSE_DISPS(play->state.gfxCtx);
@@ -527,7 +585,9 @@ void MapDisp_Minimap_DrawDoorActor(PlayState* play, Actor* actor) {
sMapDisp.minimapBaseY) +
texOffsetY;
}
if ((posX > 0) && (posX < 0x3FF) && (posY > 0) && (posY < 0x3FF)) {
// 2S2H [Cosmetic] Widescreen support
if ((posX > OTRGetRectDimensionFromLeftEdge(0)) && (posX < 0x3FF) && (posY > 0) && (posY < 0x3FF)) {
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL39_Overlay(play->state.gfxCtx);
@@ -552,12 +612,31 @@ void MapDisp_Minimap_DrawDoorActor(PlayState* play, Actor* actor) {
MapDisp_GetMapScale(mapDataRoom, &scaleTemp);
scale = scaleTemp;
}
if (scale <= 50) {
gSPTextureRectangle(OVERLAY_DISP++, (posX - 2) << 2, (posY - 2) << 2, (posX + 2) << 2,
(posY + 2) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001);
// #region 2S2H [Cosmetic] Hud Editor door dots
if (HudEditor_ShouldOverrideDraw()) {
s16 squareWidth = scale <= 50 ? 2 : 1;
s16 squareHeight = scale <= 50 ? 2 : 1;
HudEditor_ModifyRectPosValuesFromBase(sMapDisp.minimapCurX, sMapDisp.minimapCurY, &posX, &posY);
HudEditor_ModifyRectSizeValues(&squareWidth, &squareHeight);
// Text rectangles can't be smaller than 1 unit
squareWidth = MAX(squareWidth, 1);
squareHeight = MAX(squareHeight, 1);
gSPWideTextureRectangle(OVERLAY_DISP++, (posX - squareWidth) << 2, (posY - squareHeight) << 2,
(posX + squareWidth) << 2, (posY + squareHeight) << 2, G_TX_RENDERTILE, 0,
0, 0x0001, 0x0001);
} else {
gSPTextureRectangle(OVERLAY_DISP++, (posX - 1) << 2, (posY - 1) << 2, (posX + 1) << 2,
(posY + 1) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001);
// #endregion
if (scale <= 50) {
gSPTextureRectangle(OVERLAY_DISP++, (posX - 2) << 2, (posY - 2) << 2, (posX + 2) << 2,
(posY + 2) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001);
} else {
gSPTextureRectangle(OVERLAY_DISP++, (posX - 1) << 2, (posY - 1) << 2, (posX + 1) << 2,
(posY + 1) << 2, G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001);
}
}
}
@@ -917,6 +996,26 @@ void MapDisp_Update(PlayState* play) {
s16 targetY;
if ((sMapDisp.mapDataScene != NULL) && (sSceneNumRooms != 0)) {
// #region 2S2H [Cosmetic] Hud Editor minimap base position
// This value is used to determine the relative positioning for all the other elements
HudEditor_SetActiveElement(HUD_EDITOR_ELEMENT_MINIMAP);
if (HudEditor_ShouldOverrideDraw()) {
s32 width;
s32 height;
MapDataRoom* mapDataRoom = &sMapDisp.mapDataScene->rooms[sMapDisp.curRoom];
if (mapDataRoom != NULL && mapDataRoom->mapId != MAP_DATA_NO_MAP) {
MapDisp_GetMapTexDim(mapDataRoom, &width, &height);
sMapDisp.minimapBaseX = 295;
sMapDisp.minimapBaseY = 220;
HudEditor_ModifyRectPosValues(&sMapDisp.minimapBaseX, &sMapDisp.minimapBaseY);
// We don't want to scale width/height here, it will happen later when the texture is drawn
sMapDisp.minimapBaseX -= width;
sMapDisp.minimapBaseY -= height;
}
}
// #endregion
sMapDisp.pauseMapCurStorey = DUNGEON_FLOOR_INDEX_0 - pauseCtx->cursorMapDungeonItem;
if (sMapDisp.prevRoom != -1) {
if (sMapDisp.swapAnimTimer > 0) {
@@ -941,7 +1040,13 @@ void MapDisp_Update(PlayState* play) {
}
} else {
sMapDisp.swapAnimTimer = 0;
// #region 2S2H [Cosmetic] Hud Editor assign the values so that hud editor updates on the fly
sMapDisp.minimapCurX = sMapDisp.minimapBaseX;
sMapDisp.minimapCurY = sMapDisp.minimapBaseY;
}
hudEditorActiveElement = HUD_EDITOR_ELEMENT_NONE;
}
}
@@ -985,6 +1090,25 @@ void MapDisp_SwapRooms(s16 nextRoom) {
MapDisp_GetMapTexDim(nextMapDataRoom, &width, &height);
sMapDisp.minimapBaseX = 295 - width;
sMapDisp.minimapBaseY = 220 - height;
// #region 2S2H [Cosmetic] Hud Editor minimap base position
// This value is used to determine the relative positioning for all the other elements
HudEditor_SetActiveElement(HUD_EDITOR_ELEMENT_MINIMAP);
f32 elemScale = HudEditor_GetActiveElementScale();
if (HudEditor_ShouldOverrideDraw()) {
sMapDisp.minimapBaseX = 295;
sMapDisp.minimapBaseY = 220;
HudEditor_ModifyRectPosValues(&sMapDisp.minimapBaseX, &sMapDisp.minimapBaseY);
// We don't want to scale width/height here, it will happen later when the texture is drawn
sMapDisp.minimapBaseX -= width;
sMapDisp.minimapBaseY -= height;
// Scale the offset for use with the room swap animation
offsetX *= elemScale;
offsetY *= elemScale;
}
// #endregion
if (sMapDisp.prevRoom != -1) {
prevMapDataRoom = &sMapDisp.mapDataScene->rooms[sMapDisp.prevRoom];
if (prevMapDataRoom->mapId == MAP_DATA_NO_MAP) {
@@ -1009,17 +1133,37 @@ void MapDisp_SwapRooms(s16 nextRoom) {
MapDisp_GetMapScale(nextMapDataRoom, &scaleTemp);
scale = scaleTemp;
}
sMapDisp.minimapPrevX =
TRUNCF_BINANG(((f32)offsetX + (((f32)prevMapDataRoom->centerX - (f32)nextMapDataRoom->centerX) *
(1.0f / scale))) -
(f32)prevOffsetX);
sMapDisp.minimapPrevY =
TRUNCF_BINANG(((f32)offsetY + (((f32)prevMapDataRoom->centerZ - (f32)nextMapDataRoom->centerZ) *
(1.0f / scale))) -
(f32)prevOffsetY);
// #region 2S2H [Cosmetic] Hud Editor room swap animation init calculation
if (HudEditor_ShouldOverrideDraw()) {
prevOffsetX *= elemScale;
prevOffsetY *= elemScale;
sMapDisp.minimapPrevX = TRUNCF_BINANG(
((f32)offsetX +
(((f32)prevMapDataRoom->centerX - (f32)nextMapDataRoom->centerX) * (1.0f / scale) * elemScale)) -
(f32)prevOffsetX);
sMapDisp.minimapPrevY = TRUNCF_BINANG(
((f32)offsetY +
(((f32)prevMapDataRoom->centerZ - (f32)nextMapDataRoom->centerZ) * (1.0f / scale) * elemScale)) -
(f32)prevOffsetY);
} else {
// #endregion
sMapDisp.minimapPrevX =
TRUNCF_BINANG(((f32)offsetX + (((f32)prevMapDataRoom->centerX - (f32)nextMapDataRoom->centerX) *
(1.0f / scale))) -
(f32)prevOffsetX);
sMapDisp.minimapPrevY =
TRUNCF_BINANG(((f32)offsetY + (((f32)prevMapDataRoom->centerZ - (f32)nextMapDataRoom->centerZ) *
(1.0f / scale))) -
(f32)prevOffsetY);
}
sMapDisp.minimapCurX = minimapBaseX - sMapDisp.minimapPrevX;
sMapDisp.minimapCurY = minimapBaseY - sMapDisp.minimapPrevY;
}
hudEditorActiveElement = HUD_EDITOR_ELEMENT_NONE;
} else {
sMapDisp.minimapPrevX = sMapDisp.minimapPrevY = 0;
sMapDisp.minimapCurX = sMapDisp.minimapBaseX;
@@ -1096,7 +1240,13 @@ void MapDisp_Minimap_DrawRedCompassIcon(PlayState* play, s32 x, s32 z, s32 rot)
(sMapDisp.minimapCurY - sMapDisp.minimapBaseY) + texOffsetY;
}
if ((posX > 0) && (posX < 0x3FF) && (posY > 0) && (posY < 0x3FF)) {
// 2S2H [Cosmetic] Widescreen support
if ((posX > OTRGetRectDimensionFromLeftEdge(0)) && (posX < 0x3FF) && (posY > 0) && (posY < 0x3FF)) {
// 2S2H [Cosmetic] Hud Editor red compass position
if (HudEditor_ShouldOverrideDraw()) {
HudEditor_ModifyRectPosValuesFromBase(sMapDisp.minimapCurX, sMapDisp.minimapCurY, &posX, &posY);
}
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL42_Overlay(play->state.gfxCtx);
@@ -1113,6 +1263,12 @@ void MapDisp_Minimap_DrawRedCompassIcon(PlayState* play, s32 x, s32 z, s32 rot)
}
Matrix_RotateYF(rot / 10.0f, MTXMODE_APPLY);
Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY);
// #region 2S2H [Cosmetic] Hud Editor red compass scale the matrix in x and z
if (HudEditor_ShouldOverrideDraw()) {
f32 elemScale = HudEditor_GetActiveElementScale();
Matrix_Scale(elemScale, 1.0f, elemScale, MTXMODE_APPLY);
}
// #endregion
gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(OVERLAY_DISP++, 0, 255, 200, 0, 0, play->interfaceCtx.minimapAlpha);
gSPDisplayList(OVERLAY_DISP++, gCompassArrowDL);
@@ -1175,6 +1331,16 @@ s32 MapDisp_AreRoomsSameStorey(s32 curRoom, s32 prevRoom) {
void MapDisp_DrawMinimap(PlayState* play, s32 playerInitX, s32 playerInitZ, s32 playerInitDir) {
PauseContext* pauseCtx = &play->pauseCtx;
// #region 2S2H [Cosmetic] Hud Editor support for the minimap
// The active element is set and unset in this paraent method, so that all the child functions
// can use ShouldOverrideDraw
HudEditor_SetActiveElement(HUD_EDITOR_ELEMENT_MINIMAP);
if (HudEditor_ShouldOverrideDraw() && HudEditor_IsActiveElementHidden()) {
hudEditorActiveElement = HUD_EDITOR_ELEMENT_NONE;
return;
}
// #endregion
if ((sMapDisp.mapDataScene != NULL) && ((s32)pauseCtx->state <= PAUSE_STATE_OPENING_2) && !R_MINIMAP_DISABLED &&
(play->interfaceCtx.minimapAlpha != 0)) {
if (!MapDisp_IsLocationMinimapBlocked(play) && (sSceneNumRooms != 0)) {
@@ -1198,6 +1364,8 @@ void MapDisp_DrawMinimap(PlayState* play, s32 playerInitX, s32 playerInitZ, s32
}
}
}
hudEditorActiveElement = HUD_EDITOR_ELEMENT_NONE;
}
void MapDisp_ResetIMap(void) {