mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-12 02:44:54 +00:00
Merge commit 'ab2ca85227
' into doc_pause_menu
This commit is contained in:
commit
74c4839f8a
31 changed files with 517 additions and 235 deletions
|
@ -267,7 +267,7 @@ void PreRender_CoverageRgba16ToI8(PreRender* this, Gfx** gfxP, void* img, void*
|
|||
gDPSetOtherMode(gfx++,
|
||||
G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_NONE | G_TL_TILE |
|
||||
G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE,
|
||||
G_AC_NONE | G_ZS_PRIM | G_RM_PASS | G_RM_OPA_CI2);
|
||||
G_AC_NONE | G_ZS_PRIM | G_RM_OPA_CI | G_RM_OPA_CI2);
|
||||
|
||||
// Set the combiner to draw the texture as-is, discarding alpha channel
|
||||
gDPSetCombineLERP(gfx++, 0, 0, 0, TEXEL0, 0, 0, 0, 0, 0, 0, 0, TEXEL0, 0, 0, 0, 0);
|
||||
|
|
68
src/code/gDPLoadTextureBlock_Runtime.inc.c
Normal file
68
src/code/gDPLoadTextureBlock_Runtime.inc.c
Normal file
|
@ -0,0 +1,68 @@
|
|||
#ifndef GDP_LOADTEXTUREBLOCK_RUNTIME_INC_C
|
||||
#define GDP_LOADTEXTUREBLOCK_RUNTIME_INC_C
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#ifndef GDP_LOADTEXTUREBLOCK_RUNTIME_QUALIFIERS
|
||||
#define GDP_LOADTEXTUREBLOCK_RUNTIME_QUALIFIERS
|
||||
#endif
|
||||
|
||||
// The Following arrays must be defined as const in z_lmap_mark.c to appear in rodata
|
||||
|
||||
static GDP_LOADTEXTUREBLOCK_RUNTIME_QUALIFIERS u32 sLoadTextureBlock_siz[] = {
|
||||
G_IM_SIZ_4b,
|
||||
G_IM_SIZ_8b,
|
||||
G_IM_SIZ_16b,
|
||||
G_IM_SIZ_32b,
|
||||
};
|
||||
static GDP_LOADTEXTUREBLOCK_RUNTIME_QUALIFIERS u32 sLoadTextureBlock_siz_LOAD_BLOCK[] = {
|
||||
G_IM_SIZ_4b_LOAD_BLOCK,
|
||||
G_IM_SIZ_8b_LOAD_BLOCK,
|
||||
G_IM_SIZ_16b_LOAD_BLOCK,
|
||||
G_IM_SIZ_32b_LOAD_BLOCK,
|
||||
};
|
||||
static GDP_LOADTEXTUREBLOCK_RUNTIME_QUALIFIERS u32 sLoadTextureBlock_siz_INCR[] = {
|
||||
G_IM_SIZ_4b_INCR,
|
||||
G_IM_SIZ_8b_INCR,
|
||||
G_IM_SIZ_16b_INCR,
|
||||
G_IM_SIZ_32b_INCR,
|
||||
};
|
||||
static GDP_LOADTEXTUREBLOCK_RUNTIME_QUALIFIERS u32 sLoadTextureBlock_siz_SHIFT[] = {
|
||||
G_IM_SIZ_4b_SHIFT,
|
||||
G_IM_SIZ_8b_SHIFT,
|
||||
G_IM_SIZ_16b_SHIFT,
|
||||
G_IM_SIZ_32b_SHIFT,
|
||||
};
|
||||
static GDP_LOADTEXTUREBLOCK_RUNTIME_QUALIFIERS u32 sLoadTextureBlock_siz_BYTES[] = {
|
||||
G_IM_SIZ_4b_BYTES,
|
||||
G_IM_SIZ_8b_BYTES,
|
||||
G_IM_SIZ_16b_BYTES,
|
||||
G_IM_SIZ_32b_BYTES,
|
||||
};
|
||||
static GDP_LOADTEXTUREBLOCK_RUNTIME_QUALIFIERS u32 sLoadTextureBlock_siz_LINE_BYTES[] = {
|
||||
G_IM_SIZ_4b_LINE_BYTES,
|
||||
G_IM_SIZ_8b_LINE_BYTES,
|
||||
G_IM_SIZ_16b_LINE_BYTES,
|
||||
G_IM_SIZ_32b_LINE_BYTES,
|
||||
};
|
||||
|
||||
/**
|
||||
* Implements a version of gDPLoadTextureBlock using table lookups instead of token pasting, to allow values to be
|
||||
* passed into `siz` during runtime.
|
||||
*/
|
||||
#define gDPLoadTextureBlock_Runtime(pkt, timg, fmt, siz, width, height, pal, cms, cmt, masks, maskt, shifts, shiftt) \
|
||||
_DW({ \
|
||||
gDPSetTextureImage(pkt, fmt, sLoadTextureBlock_siz_LOAD_BLOCK[siz], 1, timg); \
|
||||
gDPSetTile(pkt, fmt, sLoadTextureBlock_siz_LOAD_BLOCK[siz], 0, 0, G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, \
|
||||
masks, shifts); \
|
||||
gDPLoadSync(pkt); \
|
||||
gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
|
||||
(((width) * (height) + sLoadTextureBlock_siz_INCR[siz]) >> sLoadTextureBlock_siz_SHIFT[siz]) - 1, \
|
||||
CALC_DXT(width, sLoadTextureBlock_siz_BYTES[siz])); \
|
||||
gDPPipeSync(pkt); \
|
||||
gDPSetTile(pkt, fmt, sLoadTextureBlock_siz[siz], (((width)*sLoadTextureBlock_siz_LINE_BYTES[siz]) + 7) >> 3, \
|
||||
0, G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \
|
||||
gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
|
||||
((height)-1) << G_TEXTURE_IMAGE_FRAC); \
|
||||
})
|
||||
#endif
|
|
@ -298,7 +298,7 @@ void Regs_InitDataImpl(void) {
|
|||
ZREG(10) = 200;
|
||||
ZREG(11) = 0;
|
||||
ZREG(12) = 200;
|
||||
R_PAUSE_SWITCH_PAGE_FRAME_ADVANCE_ON = false;
|
||||
R_PAUSE_PAGE_SWITCH_FRAME_ADVANCE_ON = false;
|
||||
ZREG(14) = 110;
|
||||
ZREG(15) = 56;
|
||||
ZREG(16) = 1;
|
||||
|
@ -328,6 +328,17 @@ void Regs_InitDataImpl(void) {
|
|||
R_C_BTN_COLOR(2) = 0;
|
||||
ZREG(46) = 1;
|
||||
ZREG(47) = 1;
|
||||
|
||||
#if OOT_NTSC
|
||||
R_START_LABEL_DD(0) = 86;
|
||||
R_START_LABEL_DD(1) = 100;
|
||||
R_START_LABEL_WIDTH = 0;
|
||||
R_START_LABEL_HEIGHT = 0;
|
||||
R_START_LABEL_Y(0) = 21;
|
||||
R_START_LABEL_Y(1) = 20;
|
||||
R_START_LABEL_X(0) = 122;
|
||||
R_START_LABEL_X(1) = 120;
|
||||
#else
|
||||
R_START_LABEL_DD(0) = 100;
|
||||
R_START_LABEL_DD(1) = 89;
|
||||
R_START_LABEL_DD(2) = 92;
|
||||
|
@ -337,6 +348,8 @@ void Regs_InitDataImpl(void) {
|
|||
R_START_LABEL_X(0) = 120;
|
||||
R_START_LABEL_X(1) = 119;
|
||||
R_START_LABEL_X(2) = 119;
|
||||
#endif
|
||||
|
||||
R_PAUSE_QUEST_MEDALLION_SHINE_TIME(0) = 1;
|
||||
//! @bug Overlapping reg usage
|
||||
R_C_UP_BTN_X = C_UP_BUTTON_X; // R_PAUSE_QUEST_MEDALLION_SHINE_TIME(1)
|
||||
|
@ -465,6 +478,18 @@ void Regs_InitDataImpl(void) {
|
|||
WREG(5) = 3;
|
||||
R_PAUSE_UI_ANIMS_DURATION = 8;
|
||||
WREG(7) = 0;
|
||||
|
||||
#if OOT_NTSC
|
||||
R_B_LABEL_SCALE(0) = 100;
|
||||
R_B_LABEL_SCALE(1) = 109;
|
||||
R_B_LABEL_X(0) = 151;
|
||||
R_B_LABEL_X(1) = 148;
|
||||
R_B_LABEL_Y(0) = 23;
|
||||
R_B_LABEL_Y(1) = 22;
|
||||
R_A_LABEL_Z(0) = -380;
|
||||
R_A_LABEL_Z(1) = -350;
|
||||
#else
|
||||
// Same as above, although these regs are now unused in PAL versions
|
||||
WREG(8) = 100;
|
||||
WREG(9) = 109;
|
||||
WREG(10) = 151;
|
||||
|
@ -473,6 +498,8 @@ void Regs_InitDataImpl(void) {
|
|||
WREG(13) = 22;
|
||||
WREG(14) = -380;
|
||||
WREG(15) = -350;
|
||||
#endif
|
||||
|
||||
R_PAUSE_CURSOR_LEFT_X = -175;
|
||||
R_PAUSE_CURSOR_RIGHT_X = 155;
|
||||
R_PAUSE_CURSOR_LEFT_RIGHT_Y = 10;
|
||||
|
@ -493,18 +520,20 @@ void Regs_InitDataImpl(void) {
|
|||
WREG(33) = 60;
|
||||
WREG(35) = 0;
|
||||
WREG(36) = 0;
|
||||
WREG(37) = 100;
|
||||
WREG(38) = 99;
|
||||
WREG(39) = 109;
|
||||
|
||||
#if OOT_PAL
|
||||
R_B_LABEL_SCALE(0) = 100;
|
||||
R_B_LABEL_SCALE(1) = 99;
|
||||
R_B_LABEL_SCALE(2) = 109;
|
||||
R_B_LABEL_X(0) = B_BUTTON_X - 9;
|
||||
R_B_LABEL_X(1) = B_BUTTON_X - 11;
|
||||
R_B_LABEL_X(2) = B_BUTTON_X - 12;
|
||||
R_B_LABEL_Y(0) = B_BUTTON_Y + 6;
|
||||
R_B_LABEL_Y(1) = B_BUTTON_Y + 5;
|
||||
R_B_LABEL_Y(2) = B_BUTTON_Y + 5;
|
||||
WREG(46) = -380;
|
||||
WREG(47) = -360;
|
||||
WREG(48) = -350;
|
||||
R_A_LABEL_Z(0) = -380;
|
||||
R_A_LABEL_Z(1) = -360;
|
||||
R_A_LABEL_Z(2) = -350;
|
||||
WREG(49) = -48;
|
||||
WREG(50) = 16;
|
||||
WREG(51) = -62;
|
||||
|
@ -523,6 +552,8 @@ void Regs_InitDataImpl(void) {
|
|||
WREG(64) = -37;
|
||||
WREG(65) = 30;
|
||||
WREG(66) = -50;
|
||||
#endif
|
||||
|
||||
R_DGN_MINIMAP_X = 204;
|
||||
R_DGN_MINIMAP_Y = 140;
|
||||
WREG(87) = 80;
|
||||
|
|
|
@ -83,8 +83,8 @@ void KaleidoSetup_Update(PlayState* play) {
|
|||
// mainState is also overwritten later before being used.
|
||||
pauseCtx->mainState = PAUSE_MAIN_STATE_SWITCHING_PAGE;
|
||||
|
||||
//! @bug REG collision
|
||||
if (R_START_LABEL_DD(0) == 0) {
|
||||
//! @bug REG collision, ZREG(48) is also R_START_LABEL_SCALE for NTSC and R_START_LABEL_DD(0) for PAL
|
||||
if (ZREG(48) == 0) {
|
||||
// Never reached, unused, and the data would be wrong anyway
|
||||
// (scrolling left from this would not bring to the initial page)
|
||||
pauseCtx->eye.x = sKaleidoSetupUnusedEyeX[pauseCtx->pageIndex];
|
||||
|
|
|
@ -22,21 +22,10 @@ typedef struct {
|
|||
/* 0x14 */ void* vramTable;
|
||||
} MapMarkDataOverlay; // size = 0x18
|
||||
|
||||
static u32 sBaseImageSizes[] = { 0, 1, 2, 3 };
|
||||
static u32 sLoadBlockImageSizes[] = { 2, 2, 2, 3 };
|
||||
static u32 sIncrImageSizes[] = { 3, 1, 0, 0 };
|
||||
static u32 sShiftImageSizes[] = { 2, 1, 0, 0 };
|
||||
static u32 sBytesImageSizes[] = { 0, 1, 2, 4 };
|
||||
static u32 sLineBytesImageSizes[] = { 0, 1, 2, 2 };
|
||||
#define GDP_LOADTEXTUREBLOCK_RUNTIME_QUALIFIERS
|
||||
#include "src/code/gDPLoadTextureBlock_Runtime.inc.c"
|
||||
|
||||
#define G_IM_SIZ_MARK sBaseImageSizes[markInfo->imageSize]
|
||||
#define G_IM_SIZ_MARK_LOAD_BLOCK sLoadBlockImageSizes[markInfo->imageSize]
|
||||
#define G_IM_SIZ_MARK_INCR sIncrImageSizes[markInfo->imageSize]
|
||||
#define G_IM_SIZ_MARK_SHIFT sShiftImageSizes[markInfo->imageSize]
|
||||
#define G_IM_SIZ_MARK_BYTES sBytesImageSizes[markInfo->imageSize]
|
||||
#define G_IM_SIZ_MARK_LINE_BYTES sLineBytesImageSizes[markInfo->imageSize]
|
||||
|
||||
static MapMarkInfo sMapMarkInfoTable[] = {
|
||||
MapMarkInfo sMapMarkInfoTable[] = {
|
||||
{ gMapChestIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 8, 32, 32, 1 << 10, 1 << 10 }, // Chest Icon
|
||||
{ gMapBossIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 8, 8, 32, 32, 1 << 10, 1 << 10 }, // Boss Skull Icon
|
||||
};
|
||||
|
@ -109,9 +98,10 @@ void MapMark_DrawForDungeon(PlayState* play) {
|
|||
markInfo = &sMapMarkInfoTable[mapMarkIconData->markType];
|
||||
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPLoadTextureBlock(OVERLAY_DISP++, markInfo->texture, markInfo->imageFormat, G_IM_SIZ_MARK,
|
||||
markInfo->textureWidth, markInfo->textureHeight, 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);
|
||||
gDPLoadTextureBlock_Runtime(OVERLAY_DISP++, markInfo->texture, markInfo->imageFormat,
|
||||
markInfo->imageSize, markInfo->textureWidth, markInfo->textureHeight, 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);
|
||||
|
||||
rectLeft = ((OOT_DEBUG ? GREG(94) : 0) + markPoint->x + 204) << 2;
|
||||
rectTop = ((OOT_DEBUG ? GREG(95) : 0) + markPoint->y + 140) << 2;
|
||||
|
|
|
@ -1303,7 +1303,7 @@ void Message_Decode(PlayState* play) {
|
|||
// Substitute the player name control character for the file's player name.
|
||||
for (playerNameLen = ARRAY_COUNT(gSaveContext.save.info.playerData.playerName); playerNameLen > 0;
|
||||
playerNameLen--) {
|
||||
if (gSaveContext.save.info.playerData.playerName[playerNameLen - 1] != 0x3E) {
|
||||
if (gSaveContext.save.info.playerData.playerName[playerNameLen - 1] != FILENAME_SPACE) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1311,21 +1311,21 @@ void Message_Decode(PlayState* play) {
|
|||
PRINTF("\n名前 = ");
|
||||
for (i = 0; i < playerNameLen; i++) {
|
||||
curChar2 = gSaveContext.save.info.playerData.playerName[i];
|
||||
if (curChar2 == 0x3E) {
|
||||
if (curChar2 == FILENAME_SPACE) {
|
||||
curChar2 = ' ';
|
||||
} else if (curChar2 == 0x40) {
|
||||
} else if (curChar2 == FILENAME_PERIOD) {
|
||||
curChar2 = '.';
|
||||
} else if (curChar2 == 0x3F) {
|
||||
} else if (curChar2 == FILENAME_DASH) {
|
||||
curChar2 = '-';
|
||||
} else if (curChar2 < 0xA) {
|
||||
curChar2 += 0;
|
||||
} else if (curChar2 <= FILENAME_DIGIT('9')) {
|
||||
curChar2 -= FILENAME_DIGIT('0');
|
||||
curChar2 += '0';
|
||||
} else if (curChar2 < 0x24) {
|
||||
curChar2 += 0;
|
||||
curChar2 += '7';
|
||||
} else if (curChar2 < 0x3E) {
|
||||
curChar2 += 0;
|
||||
curChar2 += '=';
|
||||
} else if (curChar2 <= FILENAME_UPPERCASE('Z')) {
|
||||
curChar2 -= FILENAME_UPPERCASE('A');
|
||||
curChar2 += 'A';
|
||||
} else if (curChar2 <= FILENAME_LOWERCASE('z')) {
|
||||
curChar2 -= FILENAME_LOWERCASE('a');
|
||||
curChar2 += 'a';
|
||||
}
|
||||
if (curChar2 != ' ') {
|
||||
Font_LoadChar(font, curChar2 - ' ', charTexIdx);
|
||||
|
|
|
@ -2097,7 +2097,11 @@ void func_80086D5C(s32* buf, u16 size) {
|
|||
}
|
||||
|
||||
void Interface_LoadActionLabel(InterfaceContext* interfaceCtx, u16 action, s16 loadOffset) {
|
||||
#if OOT_NTSC
|
||||
static void* sDoActionTextures[] = { gAttackDoActionJPNTex, gCheckDoActionJPNTex };
|
||||
#else
|
||||
static void* sDoActionTextures[] = { gAttackDoActionENGTex, gCheckDoActionENGTex };
|
||||
#endif
|
||||
|
||||
if (action >= DO_ACTION_MAX) {
|
||||
action = DO_ACTION_NONE;
|
||||
|
@ -2763,15 +2767,17 @@ void Interface_DrawActionLabel(GraphicsContext* gfxCtx, void* texture) {
|
|||
}
|
||||
|
||||
void Interface_DrawItemButtons(PlayState* play) {
|
||||
static void* cUpLabelTextures[] = { gNaviCUpENGTex, gNaviCUpENGTex, gNaviCUpENGTex };
|
||||
static void* cUpLabelTextures[] = LANGUAGE_ARRAY(gNaviCUpJPNTex, gNaviCUpENGTex, gNaviCUpENGTex, gNaviCUpENGTex);
|
||||
static s16 startButtonLeftPos[] = { 132, 130, 130 };
|
||||
InterfaceContext* interfaceCtx = &play->interfaceCtx;
|
||||
Player* player = GET_PLAYER(play);
|
||||
PauseContext* pauseCtx = &play->pauseCtx;
|
||||
s16 temp; // Used as both an alpha value and a button index
|
||||
#if OOT_PAL
|
||||
s16 texCoordScale;
|
||||
s16 width;
|
||||
s16 height;
|
||||
#endif
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx, "../z_parameter.c", 2900);
|
||||
|
||||
|
@ -2812,9 +2818,16 @@ void Interface_DrawItemButtons(PlayState* play) {
|
|||
// Start Button Texture, Color & Label
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 120, 120, interfaceCtx->startAlpha);
|
||||
|
||||
#if OOT_NTSC
|
||||
gSPTextureRectangle(OVERLAY_DISP++, 132 << 2, 17 << 2, (132 + 22) << 2, 39 << 2, G_TX_RENDERTILE, 0, 0,
|
||||
(s32)(1.4277344 * (1 << 10)), (s32)(1.4277344 * (1 << 10)));
|
||||
#else
|
||||
gSPTextureRectangle(OVERLAY_DISP++, startButtonLeftPos[gSaveContext.language] << 2, 17 << 2,
|
||||
(startButtonLeftPos[gSaveContext.language] + 22) << 2, 39 << 2, G_TX_RENDERTILE, 0, 0,
|
||||
(s32)(1.4277344 * (1 << 10)), (s32)(1.4277344 * (1 << 10)));
|
||||
#endif
|
||||
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->startAlpha);
|
||||
gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0);
|
||||
|
@ -2825,6 +2838,16 @@ void Interface_DrawItemButtons(PlayState* play) {
|
|||
DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 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);
|
||||
|
||||
#if OOT_NTSC
|
||||
R_START_LABEL_SCALE = (1 << 10) / (R_START_LABEL_DD(gSaveContext.language) / 100.0f);
|
||||
R_START_LABEL_WIDTH = DO_ACTION_TEX_WIDTH / (R_START_LABEL_DD(gSaveContext.language) / 100.0f);
|
||||
R_START_LABEL_HEIGHT = DO_ACTION_TEX_HEIGHT / (R_START_LABEL_DD(gSaveContext.language) / 100.0f);
|
||||
gSPTextureRectangle(OVERLAY_DISP++, R_START_LABEL_X(gSaveContext.language) << 2,
|
||||
R_START_LABEL_Y(gSaveContext.language) << 2,
|
||||
(R_START_LABEL_X(gSaveContext.language) + R_START_LABEL_WIDTH) << 2,
|
||||
(R_START_LABEL_Y(gSaveContext.language) + R_START_LABEL_HEIGHT) << 2, G_TX_RENDERTILE,
|
||||
0, 0, R_START_LABEL_SCALE, R_START_LABEL_SCALE);
|
||||
#else
|
||||
texCoordScale = (1 << 10) / (R_START_LABEL_DD(gSaveContext.language) / 100.0f);
|
||||
width = DO_ACTION_TEX_WIDTH / (R_START_LABEL_DD(gSaveContext.language) / 100.0f);
|
||||
height = DO_ACTION_TEX_HEIGHT / (R_START_LABEL_DD(gSaveContext.language) / 100.0f);
|
||||
|
@ -2833,6 +2856,7 @@ void Interface_DrawItemButtons(PlayState* play) {
|
|||
(R_START_LABEL_X(gSaveContext.language) + width) << 2,
|
||||
(R_START_LABEL_Y(gSaveContext.language) + height) << 2, G_TX_RENDERTILE, 0, 0,
|
||||
texCoordScale, texCoordScale);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3286,7 +3310,7 @@ void Interface_Draw(PlayState* play) {
|
|||
DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 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);
|
||||
|
||||
R_B_LABEL_DD = (1 << 10) / (WREG(37 + gSaveContext.language) / 100.0f);
|
||||
R_B_LABEL_DD = (1 << 10) / (R_B_LABEL_SCALE(gSaveContext.language) / 100.0f);
|
||||
gSPTextureRectangle(OVERLAY_DISP++, R_B_LABEL_X(gSaveContext.language) << 2,
|
||||
R_B_LABEL_Y(gSaveContext.language) << 2,
|
||||
(R_B_LABEL_X(gSaveContext.language) + DO_ACTION_TEX_WIDTH) << 2,
|
||||
|
@ -3348,7 +3372,7 @@ void Interface_Draw(PlayState* play) {
|
|||
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->aAlpha);
|
||||
gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0);
|
||||
Matrix_Translate(0.0f, 0.0f, WREG(46 + gSaveContext.language) / 10.0f, MTXMODE_NEW);
|
||||
Matrix_Translate(0.0f, 0.0f, R_A_LABEL_Z(gSaveContext.language) / 10.0f, MTXMODE_NEW);
|
||||
Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
|
||||
Matrix_RotateX(interfaceCtx->unk_1F4 / 10000.0f, MTXMODE_APPLY);
|
||||
gSPMatrix(OVERLAY_DISP++, MATRIX_NEW(play->state.gfxCtx, "../z_parameter.c", 3701),
|
||||
|
|
|
@ -1839,7 +1839,7 @@ void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle) {
|
|||
f32 cos;
|
||||
|
||||
// If `ANIM_FLAG_UPDATE_XZ` behaved as expected, it would also be checked here
|
||||
if (skelAnime->moveFlags & ANIM_FLAG_NO_MOVE) {
|
||||
if (skelAnime->moveFlags & ANIM_FLAG_ADJUST_STARTING_POS) {
|
||||
diff->x = diff->z = 0.0f;
|
||||
} else {
|
||||
x = skelAnime->jointTable[0].x;
|
||||
|
@ -1866,7 +1866,7 @@ void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle) {
|
|||
skelAnime->jointTable[0].z = skelAnime->baseTransl.z;
|
||||
|
||||
if (skelAnime->moveFlags & ANIM_FLAG_UPDATE_Y) {
|
||||
if (skelAnime->moveFlags & ANIM_FLAG_NO_MOVE) {
|
||||
if (skelAnime->moveFlags & ANIM_FLAG_ADJUST_STARTING_POS) {
|
||||
diff->y = 0.0f;
|
||||
} else {
|
||||
diff->y = skelAnime->jointTable[0].y - skelAnime->prevTransl.y;
|
||||
|
@ -1879,7 +1879,7 @@ void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle) {
|
|||
skelAnime->prevTransl.y = skelAnime->jointTable[0].y;
|
||||
}
|
||||
|
||||
skelAnime->moveFlags &= ~ANIM_FLAG_NO_MOVE;
|
||||
skelAnime->moveFlags &= ~ANIM_FLAG_ADJUST_STARTING_POS;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -27,23 +27,32 @@ u16 gSramSlotOffsets[] = {
|
|||
static char sZeldaMagic[] = { '\0', '\0', '\0', '\x98', '\x09', '\x10', '\x21', 'Z', 'E', 'L', 'D', 'A' };
|
||||
|
||||
static SavePlayerData sNewSavePlayerData = {
|
||||
{ '\0', '\0', '\0', '\0', '\0', '\0' }, // newf
|
||||
0, // deaths
|
||||
{ 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E }, // playerName
|
||||
0, // n64ddFlag
|
||||
0x30, // healthCapacity
|
||||
0x30, // defense
|
||||
0, // magicLevel
|
||||
MAGIC_NORMAL_METER, // magic
|
||||
0, // rupees
|
||||
0, // swordHealth
|
||||
0, // naviTimer
|
||||
false, // isMagicAcquired
|
||||
0, // unk_1F
|
||||
false, // isDoubleMagicAcquired
|
||||
false, // isDoubleDefenseAcquired
|
||||
0, // bgsFlag
|
||||
0, // ocarinaGameRoundNum
|
||||
{ '\0', '\0', '\0', '\0', '\0', '\0' }, // newf
|
||||
0, // deaths
|
||||
{
|
||||
FILENAME_SPACE,
|
||||
FILENAME_SPACE,
|
||||
FILENAME_SPACE,
|
||||
FILENAME_SPACE,
|
||||
FILENAME_SPACE,
|
||||
FILENAME_SPACE,
|
||||
FILENAME_SPACE,
|
||||
FILENAME_SPACE,
|
||||
}, // playerName
|
||||
0, // n64ddFlag
|
||||
0x30, // healthCapacity
|
||||
0x30, // defense
|
||||
0, // magicLevel
|
||||
MAGIC_NORMAL_METER, // magic
|
||||
0, // rupees
|
||||
0, // swordHealth
|
||||
0, // naviTimer
|
||||
false, // isMagicAcquired
|
||||
0, // unk_1F
|
||||
false, // isDoubleMagicAcquired
|
||||
false, // isDoubleDefenseAcquired
|
||||
0, // bgsFlag
|
||||
0, // ocarinaGameRoundNum
|
||||
{
|
||||
{ ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE }, // buttonItems
|
||||
{ SLOT_NONE, SLOT_NONE, SLOT_NONE }, // cButtonSlots
|
||||
|
@ -155,23 +164,32 @@ void Sram_InitNewSave(void) {
|
|||
}
|
||||
|
||||
static SavePlayerData sDebugSavePlayerData = {
|
||||
{ 'Z', 'E', 'L', 'D', 'A', 'Z' }, // newf
|
||||
0, // deaths
|
||||
{ 0x15, 0x12, 0x17, 0x14, 0x3E, 0x3E, 0x3E, 0x3E }, // playerName ( "LINK" )
|
||||
0, // n64ddFlag
|
||||
0xE0, // healthCapacity
|
||||
0xE0, // health
|
||||
0, // magicLevel
|
||||
MAGIC_NORMAL_METER, // magic
|
||||
150, // rupees
|
||||
8, // swordHealth
|
||||
0, // naviTimer
|
||||
true, // isMagicAcquired
|
||||
0, // unk_1F
|
||||
false, // isDoubleMagicAcquired
|
||||
false, // isDoubleDefenseAcquired
|
||||
0, // bgsFlag
|
||||
0, // ocarinaGameRoundNum
|
||||
{ 'Z', 'E', 'L', 'D', 'A', 'Z' }, // newf
|
||||
0, // deaths
|
||||
{
|
||||
FILENAME_UPPERCASE('L'),
|
||||
FILENAME_UPPERCASE('I'),
|
||||
FILENAME_UPPERCASE('N'),
|
||||
FILENAME_UPPERCASE('K'),
|
||||
FILENAME_SPACE,
|
||||
FILENAME_SPACE,
|
||||
FILENAME_SPACE,
|
||||
FILENAME_SPACE,
|
||||
}, // playerName
|
||||
0, // n64ddFlag
|
||||
0xE0, // healthCapacity
|
||||
0xE0, // health
|
||||
0, // magicLevel
|
||||
MAGIC_NORMAL_METER, // magic
|
||||
150, // rupees
|
||||
8, // swordHealth
|
||||
0, // naviTimer
|
||||
true, // isMagicAcquired
|
||||
0, // unk_1F
|
||||
false, // isDoubleMagicAcquired
|
||||
false, // isDoubleDefenseAcquired
|
||||
0, // bgsFlag
|
||||
0, // ocarinaGameRoundNum
|
||||
{
|
||||
{ ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE }, // buttonItems
|
||||
{ SLOT_NONE, SLOT_NONE, SLOT_NONE }, // cButtonSlots
|
||||
|
|
|
@ -79,7 +79,7 @@ Gfx* VisMono_DesaturateDList(VisMono* this, Gfx* gfx) {
|
|||
gDPSetOtherMode(gfx++,
|
||||
G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_IA16 | G_TL_TILE |
|
||||
G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_1PRIMITIVE,
|
||||
G_AC_NONE | G_ZS_PRIM | GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) | G_RM_CLD_SURF2);
|
||||
G_AC_NONE | G_ZS_PRIM | G_RM_PASS | G_RM_CLD_SURF2);
|
||||
// First color cycle sums texel 1 alpha and texel 0 color
|
||||
// By using IA16 palettes, this means summing A (from the IA16 color texel 1 maps to)
|
||||
// with I (from the IA16 color texel 0 maps to)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue