Fixed rect alignment causing issues in horseback target practice
This commit is contained in:
parent
af165cb21c
commit
18be149b7b
|
@ -628,16 +628,9 @@ void Interface_Draw(PlayState* play) {
|
||||||
Interface_DrawPerfectLetters(play);
|
Interface_DrawPerfectLetters(play);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @recomp If carrots are being drawn, use default alignment and shift up
|
// @recomp Align left and shift up for minigame icons (carrot icons use an extended gbi texrect to ignore this state).
|
||||||
if (interfaceCtx->unk_212 == DO_ACTION_FASTER) {
|
gEXSetRectAlign(OVERLAY_DISP++, G_EX_ORIGIN_LEFT, G_EX_ORIGIN_LEFT, 0, -margin_reduction * 4, 0, -margin_reduction * 4);
|
||||||
gEXSetRectAlign(OVERLAY_DISP++, G_EX_ORIGIN_NONE, G_EX_ORIGIN_NONE, 0, -margin_reduction * 4, 0, -margin_reduction * 4);
|
gEXSetViewportAlign(OVERLAY_DISP++, G_EX_ORIGIN_LEFT, 0, -margin_reduction * 4);
|
||||||
gEXSetViewportAlign(OVERLAY_DISP++, G_EX_ORIGIN_NONE, 0, -margin_reduction * 4);
|
|
||||||
}
|
|
||||||
// @recomp Otherwise align left and shift up
|
|
||||||
else {
|
|
||||||
gEXSetRectAlign(OVERLAY_DISP++, G_EX_ORIGIN_LEFT, G_EX_ORIGIN_LEFT, 0, -margin_reduction * 4, 0, -margin_reduction * 4);
|
|
||||||
gEXSetViewportAlign(OVERLAY_DISP++, G_EX_ORIGIN_LEFT, 0, -margin_reduction * 4);
|
|
||||||
}
|
|
||||||
Interface_SetOrthoView(interfaceCtx);
|
Interface_SetOrthoView(interfaceCtx);
|
||||||
|
|
||||||
Interface_DrawMinigameIcons(play);
|
Interface_DrawMinigameIcons(play);
|
||||||
|
@ -755,6 +748,132 @@ void Interface_Draw(PlayState* play) {
|
||||||
CLOSE_DISPS(play->state.gfxCtx);
|
CLOSE_DISPS(play->state.gfxCtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern u64 gCarrotIconTex[];
|
||||||
|
extern u64 gBeaverRingIconTex[];
|
||||||
|
extern u64 gSwordTrainingLogIconTex[];
|
||||||
|
extern u64 gFishermanMinigameTorchIconTex[];
|
||||||
|
extern u64 gArcheryScoreIconTex[];
|
||||||
|
extern u16 sMinigameScoreDigits[];
|
||||||
|
|
||||||
|
// @recomp Patched to draw the carrot icons with an extended gbi texrect so they don't inherit the current origin.
|
||||||
|
void Interface_DrawMinigameIcons(PlayState* play) {
|
||||||
|
InterfaceContext* interfaceCtx = &play->interfaceCtx;
|
||||||
|
s16 i;
|
||||||
|
s16 numDigitsDrawn;
|
||||||
|
s16 rectX;
|
||||||
|
s16 rectY;
|
||||||
|
s16 width;
|
||||||
|
s16 height;
|
||||||
|
|
||||||
|
OPEN_DISPS(play->state.gfxCtx);
|
||||||
|
|
||||||
|
Gfx_SetupDL39_Overlay(play->state.gfxCtx);
|
||||||
|
|
||||||
|
if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
|
||||||
|
// Carrots rendering if the action corresponds to riding a horse
|
||||||
|
if (interfaceCtx->unk_212 == DO_ACTION_FASTER) {
|
||||||
|
// Load Carrot Icon
|
||||||
|
gDPLoadTextureBlock(OVERLAY_DISP++, gCarrotIconTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 16, 16, 0,
|
||||||
|
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
|
||||||
|
G_TX_NOLOD, G_TX_NOLOD);
|
||||||
|
|
||||||
|
rectX = 110;
|
||||||
|
rectY = (interfaceCtx->minigameState != MINIGAME_STATE_NONE) ? 200 : 56;
|
||||||
|
|
||||||
|
// Draw 6 carrots
|
||||||
|
for (i = 1; i < 7; i++, rectX += 16) {
|
||||||
|
// Carrot Color (based on availability)
|
||||||
|
if ((interfaceCtx->numHorseBoosts == 0) || (interfaceCtx->numHorseBoosts < i)) {
|
||||||
|
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 150, 255, interfaceCtx->aAlpha);
|
||||||
|
} else {
|
||||||
|
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->aAlpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
// @recomp Draw the carrot icons with an extended gbi texrect, using none as the origin to override the current alignment.
|
||||||
|
gEXTextureRectangle(OVERLAY_DISP++, G_EX_ORIGIN_NONE, G_EX_ORIGIN_NONE, rectX << 2, rectY << 2, (rectX + 16) << 2, (rectY + 16) << 2,
|
||||||
|
G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) {
|
||||||
|
gDPPipeSync(OVERLAY_DISP++);
|
||||||
|
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
|
||||||
|
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
|
||||||
|
width = 24;
|
||||||
|
height = 16;
|
||||||
|
rectX = 20;
|
||||||
|
if (gSaveContext.save.saveInfo.playerData.healthCapacity > 0xA0) {
|
||||||
|
rectY = 75; // two rows of hearts
|
||||||
|
} else {
|
||||||
|
rectY = 67; // one row of hearts
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 1)) {
|
||||||
|
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->bAlpha);
|
||||||
|
gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255);
|
||||||
|
gDPLoadTextureBlock(OVERLAY_DISP++, gBeaverRingIconTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 24, 16, 0,
|
||||||
|
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
|
||||||
|
G_TX_NOLOD, G_TX_NOLOD);
|
||||||
|
} else if (play->sceneId == SCENE_DOUJOU) {
|
||||||
|
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 140, 50, interfaceCtx->bAlpha);
|
||||||
|
gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255);
|
||||||
|
gDPLoadTextureBlock(OVERLAY_DISP++, gSwordTrainingLogIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0,
|
||||||
|
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
|
||||||
|
G_TX_NOLOD, G_TX_NOLOD);
|
||||||
|
} else if (play->sceneId == SCENE_30GYOSON) {
|
||||||
|
width = 16;
|
||||||
|
height = 30;
|
||||||
|
rectX = 24;
|
||||||
|
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 100, 75, interfaceCtx->bAlpha);
|
||||||
|
gDPSetEnvColor(OVERLAY_DISP++, 55, 55, 0, 255);
|
||||||
|
gDPLoadTextureBlock(OVERLAY_DISP++, gFishermanMinigameTorchIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 30, 0,
|
||||||
|
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
|
||||||
|
G_TX_NOLOD, G_TX_NOLOD);
|
||||||
|
} else {
|
||||||
|
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->bAlpha);
|
||||||
|
gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255);
|
||||||
|
gDPLoadTextureBlock(OVERLAY_DISP++, gArcheryScoreIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 24, 16, 0,
|
||||||
|
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++, (rectX << 2), (rectY << 2), ((rectX + width) << 2),
|
||||||
|
((rectY + height) << 2), G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
|
||||||
|
gDPPipeSync(OVERLAY_DISP++);
|
||||||
|
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->bAlpha);
|
||||||
|
gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0,
|
||||||
|
0, PRIMITIVE, 0);
|
||||||
|
|
||||||
|
if (play->sceneId == SCENE_30GYOSON) {
|
||||||
|
rectX += 20;
|
||||||
|
if (gSaveContext.save.saveInfo.playerData.healthCapacity > 0xA0) {
|
||||||
|
rectY = 87; // two rows of hearts
|
||||||
|
} else {
|
||||||
|
rectY = 79; // one row of hearts
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
rectX += 26;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0, numDigitsDrawn = 0; i < 4; i++) {
|
||||||
|
if ((sMinigameScoreDigits[i] != 0) || (numDigitsDrawn != 0) || (i >= 3)) {
|
||||||
|
OVERLAY_DISP =
|
||||||
|
Gfx_DrawTexRectI8(OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * sMinigameScoreDigits[i])),
|
||||||
|
8, 0x10, rectX, rectY - 2, 9, 0xFA, 0x370, 0x370);
|
||||||
|
rectX += 9;
|
||||||
|
numDigitsDrawn++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gDPPipeSync(OVERLAY_DISP++);
|
||||||
|
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CLOSE_DISPS(play->state.gfxCtx);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
extern s16 sTextboxWidth;
|
extern s16 sTextboxWidth;
|
||||||
extern s16 sTextboxHeight;
|
extern s16 sTextboxHeight;
|
||||||
extern s16 sTextboxTexWidth;
|
extern s16 sTextboxTexWidth;
|
||||||
|
|
Loading…
Reference in New Issue