This commit is contained in:
fgsfds committed 2023-08-16 10:53:02 +02:00
commit fedcbb8917
6 files changed
+180 -188

No files matched your search

+8 -8
View File
@@ -493,7 +493,7 @@ char *menuResolveDialogTitle(struct menudialogdef *dialogdef)
return menuResolveText(dialogdef->title, dialogdef); return menuResolveText(dialogdef->title, dialogdef);
} }
void func0f0f15a4(struct menuitem *item, s32 *arg1) void menuGetItemBlocksRequired(struct menuitem *item, s32 *numwords)
{ {
switch (item->type) { switch (item->type) {
case MENUITEMTYPE_SLIDER: case MENUITEMTYPE_SLIDER:
@@ -501,31 +501,31 @@ void func0f0f15a4(struct menuitem *item, s32 *arg1)
case MENUITEMTYPE_RANKING: case MENUITEMTYPE_RANKING:
case MENUITEMTYPE_14: case MENUITEMTYPE_14:
case MENUITEMTYPE_18: case MENUITEMTYPE_18:
*arg1 = 1; *numwords = 1;
break; break;
#if VERSION < VERSION_PAL_BETA #if VERSION < VERSION_PAL_BETA
case MENUITEMTYPE_SCROLLABLE: case MENUITEMTYPE_SCROLLABLE:
#endif #endif
case MENUITEMTYPE_MARQUEE: case MENUITEMTYPE_MARQUEE:
case MENUITEMTYPE_CONTROLLER: case MENUITEMTYPE_CONTROLLER:
*arg1 = 2; *numwords = 2;
break; break;
case MENUITEMTYPE_LIST: case MENUITEMTYPE_LIST:
#if VERSION >= VERSION_PAL_BETA #if VERSION >= VERSION_PAL_BETA
case MENUITEMTYPE_SCROLLABLE: case MENUITEMTYPE_SCROLLABLE:
#endif #endif
*arg1 = 3; *numwords = 3;
break; break;
case MENUITEMTYPE_DROPDOWN: case MENUITEMTYPE_DROPDOWN:
*arg1 = 4; *numwords = 4;
break; break;
case MENUITEMTYPE_PLAYERSTATS: case MENUITEMTYPE_PLAYERSTATS:
*arg1 = 5; *numwords = 5;
break; break;
case MENUITEMTYPE_KEYBOARD: case MENUITEMTYPE_KEYBOARD:
case MENUITEMTYPE_10: case MENUITEMTYPE_10:
case MENUITEMTYPE_16: case MENUITEMTYPE_16:
*arg1 = 3; *numwords = 3;
break; break;
} }
} }
@@ -890,7 +890,7 @@ void func0f0f1d6c(struct menudialogdef *dialogdef, struct menudialog *dialog, st
} }
numblocksthisitem = -1; numblocksthisitem = -1;
func0f0f15a4(item, &numblocksthisitem); menuGetItemBlocksRequired(item, &numblocksthisitem);
if (numblocksthisitem != -1) { if (numblocksthisitem != -1) {
menu->rows[rowindex].blockindex = blockindex; menu->rows[rowindex].blockindex = blockindex;
+86 -86
View File
@@ -114,7 +114,7 @@ s32 menuitem0f0e5d2c(s32 arg0, struct menuitem *item)
return s1; return s1;
} }
s16 menuitem0f0e5ef8(s16 arg0, struct menuitem *item) s16 menuitemListGetOffsetY(s16 optionindex, struct menuitem *item)
{ {
union handlerdata data; union handlerdata data;
bool done; bool done;
@@ -125,8 +125,8 @@ s16 menuitem0f0e5ef8(s16 arg0, struct menuitem *item)
return 0; return 0;
} }
if (arg0 < 0) { if (optionindex < 0) {
arg0 = 0; optionindex = 0;
} }
data.list.value = 0; data.list.value = 0;
@@ -134,7 +134,7 @@ s16 menuitem0f0e5ef8(s16 arg0, struct menuitem *item)
item->handler(MENUOP_GETOPTGROUPCOUNT, item, &data); item->handler(MENUOP_GETOPTGROUPCOUNT, item, &data);
if (data.list.value == 0) { if (data.list.value == 0) {
return arg0 * g_LineHeight; return optionindex * g_LineHeight;
} }
done = false; done = false;
@@ -146,14 +146,14 @@ s16 menuitem0f0e5ef8(s16 arg0, struct menuitem *item)
for (data.list.value = 0; !done && data.list.values32 < numgroups; data.list.value++) { for (data.list.value = 0; !done && data.list.values32 < numgroups; data.list.value++) {
item->handler(MENUOP_GETGROUPSTARTINDEX, item, &data); item->handler(MENUOP_GETGROUPSTARTINDEX, item, &data);
if (arg0 >= data.list.groupstartindex) { if (optionindex >= data.list.groupstartindex) {
numlines++; numlines++;
} else { } else {
done = true; done = true;
} }
} }
return arg0 * g_LineHeight + numlines * LINEHEIGHT; return optionindex * g_LineHeight + numlines * LINEHEIGHT;
} }
Gfx *menuitemListRenderHeader(Gfx *gdl, s16 x1, s16 y1, s16 width, s16 arg4, s16 height, char *text, struct menudialog *dialog) Gfx *menuitemListRenderHeader(Gfx *gdl, s16 x1, s16 y1, s16 width, s16 arg4, s16 height, char *text, struct menudialog *dialog)
@@ -301,7 +301,7 @@ Gfx *menuitemListRender(Gfx *gdl, struct menurendercontext *context)
halfheight /= g_LineHeight; halfheight /= g_LineHeight;
halfheight *= g_LineHeight; halfheight *= g_LineHeight;
itemdata->unk06 = context->height; itemdata->viewheight = context->height;
if (context->item->type == MENUITEMTYPE_DROPDOWN || context->item->type == MENUITEMTYPE_PLAYERSTATS) { if (context->item->type == MENUITEMTYPE_DROPDOWN || context->item->type == MENUITEMTYPE_PLAYERSTATS) {
gdl = menugfxDrawDropdownBackground(gdl, context->x, context->y, context->x + context->width, context->y + context->height); gdl = menugfxDrawDropdownBackground(gdl, context->x, context->y, context->x + context->width, context->y + context->height);
@@ -329,8 +329,8 @@ Gfx *menuitemListRender(Gfx *gdl, struct menurendercontext *context)
context->item->handler(MENUOP_GETOPTIONCOUNT, context->item, &sp15c); context->item->handler(MENUOP_GETOPTIONCOUNT, context->item, &sp15c);
numoptions = sp15c.list.value; numoptions = sp15c.list.value;
tmp = itemdata->unk00 - halfheight; tmp = itemdata->curoffsety - halfheight;
firstonscreenoptionindex = menuitem0f0e5d2c(itemdata->unk00 - halfheight, context->item); firstonscreenoptionindex = menuitem0f0e5d2c(itemdata->curoffsety - halfheight, context->item);
y = context->y + tmp; y = context->y + tmp;
gdl = text0f153628(gdl); gdl = text0f153628(gdl);
@@ -339,7 +339,7 @@ Gfx *menuitemListRender(Gfx *gdl, struct menurendercontext *context)
sp15c.list.unk04 = 0; sp15c.list.unk04 = 0;
s4 = menuitem0f0e5ef8(optionindex, context->item) + halfheight - itemdata->unk00; s4 = menuitemListGetOffsetY(optionindex, context->item) + halfheight - itemdata->curoffsety;
sp14c.list.value = 0; sp14c.list.value = 0;
sp14c.list.unk0c = 0; sp14c.list.unk0c = 0;
@@ -452,7 +452,7 @@ Gfx *menuitemListRender(Gfx *gdl, struct menurendercontext *context)
colour |= 0xffffff00; colour |= 0xffffff00;
} }
if (optionindex == itemdata->unk02 && context->focused) { if (optionindex == itemdata->index && context->focused) {
u32 spb0; u32 spb0;
u32 weight = menuGetSinOscFrac(40.0f) * 255.0f; u32 weight = menuGetSinOscFrac(40.0f) * 255.0f;
@@ -485,7 +485,7 @@ Gfx *menuitemListRender(Gfx *gdl, struct menurendercontext *context)
renderdata.y = context->y + s4; renderdata.y = context->y + s4;
renderdata.width = context->width; renderdata.width = context->width;
renderdata.colour = colour; renderdata.colour = colour;
renderdata.unk10 = optionindex == itemdata->unk02; renderdata.unk10 = optionindex == itemdata->index;
sp94left = renderdata.x; sp94left = renderdata.x;
sp90top = renderdata.y; sp90top = renderdata.y;
@@ -683,40 +683,40 @@ bool menuitemListTick(struct menuitem *item, struct menuinputs *inputs, u32 tick
} }
if (item->type == MENUITEMTYPE_DROPDOWN || item->type == MENUITEMTYPE_PLAYERSTATS) { if (item->type == MENUITEMTYPE_DROPDOWN || item->type == MENUITEMTYPE_PLAYERSTATS) {
min = data->list.unk06 / 2; min = data->list.viewheight / 2;
min = min / g_LineHeight; min = min / g_LineHeight;
min *= g_LineHeight; min *= g_LineHeight;
data->list.unk04 = menuitem0f0e5ef8(data->list.unk02, item); data->list.targetoffsety = menuitemListGetOffsetY(data->list.index, item);
if (data->list.unk04 < min) { if (data->list.targetoffsety < min) {
data->list.unk04 = min; data->list.targetoffsety = min;
} }
item->handler(MENUOP_GETOPTIONCOUNT, item, &handlerdata); item->handler(MENUOP_GETOPTIONCOUNT, item, &handlerdata);
max = handlerdata.list2.unk02 * g_LineHeight - data->list.unk06 + min; max = (s16) handlerdata.list.value * g_LineHeight - data->list.viewheight + min;
if (data->list.unk04 > max) { if (data->list.targetoffsety > max) {
data->list.unk04 = max; data->list.targetoffsety = max;
} }
} }
if (data->list.unk00 != data->list.unk04) { if (data->list.curoffsety != data->list.targetoffsety) {
f0 = data->list.unk00; f0 = data->list.curoffsety;
prev = data->list.unk00; prev = data->list.curoffsety;
for (i = 0; i < g_Vars.diffframe60; i++) { for (i = 0; i < g_Vars.diffframe60; i++) {
f0 = data->list.unk04 * (PAL ? 0.404f : 0.35f) + (PAL ? 0.59599995613098f : 0.65f) * f0; f0 = data->list.targetoffsety * (PAL ? 0.404f : 0.35f) + (PAL ? 0.59599995613098f : 0.65f) * f0;
} }
data->list.unk00 = f0; data->list.curoffsety = f0;
if (data->list.unk00 != data->list.unk04 && prev == data->list.unk00) { if (data->list.curoffsety != data->list.targetoffsety && prev == data->list.curoffsety) {
if (data->list.unk00 < data->list.unk04) { if (data->list.curoffsety < data->list.targetoffsety) {
data->list.unk00++; data->list.curoffsety++;
} else { } else {
data->list.unk00--; data->list.curoffsety--;
} }
} }
} }
@@ -727,27 +727,27 @@ bool menuitemListTick(struct menuitem *item, struct menuinputs *inputs, u32 tick
if (handlerdata.list.value) { if (handlerdata.list.value) {
last = handlerdata.list.value - 1; last = handlerdata.list.value - 1;
if (data->list.unk02 > last) { if (data->list.index > last) {
data->list.unk02 = last; data->list.index = last;
data->list.unk04 = menuitem0f0e5ef8(data->list.unk02, item); data->list.targetoffsety = menuitemListGetOffsetY(data->list.index, item);
} }
if (inputs->updown) { if (inputs->updown) {
prev2 = data->list.unk02; prev2 = data->list.index;
data->list.unk02 += inputs->updown; data->list.index += inputs->updown;
if (data->list.unk02 < 0) { if (data->list.index < 0) {
data->list.unk02 = handlerdata.list.value - 1; data->list.index = handlerdata.list.value - 1;
} }
if (data->list.unk02 >= (s16)handlerdata.list.value) { if (data->list.index >= (s16)handlerdata.list.value) {
data->list.unk02 = 0; data->list.index = 0;
} }
data->list.unk04 = menuitem0f0e5ef8(data->list.unk02, item); data->list.targetoffsety = menuitemListGetOffsetY(data->list.index, item);
if (prev2 != data->list.unk02) { if (prev2 != data->list.index) {
handlerdata.list.value = data->list.unk02; handlerdata.list.value = data->list.index;
item->handler(MENUOP_LISTITEMFOCUS, item, &handlerdata); item->handler(MENUOP_LISTITEMFOCUS, item, &handlerdata);
menuPlaySound(MENUSOUND_SUBFOCUS); menuPlaySound(MENUSOUND_SUBFOCUS);
@@ -755,7 +755,7 @@ bool menuitemListTick(struct menuitem *item, struct menuinputs *inputs, u32 tick
} }
if (inputs->select) { if (inputs->select) {
handlerdata.list.value = data->list.unk02; handlerdata.list.value = data->list.index;
handlerdata.list.unk04 = 0; handlerdata.list.unk04 = 0;
if (inputs->start) { if (inputs->start) {
@@ -775,7 +775,7 @@ bool menuitemListTick(struct menuitem *item, struct menuinputs *inputs, u32 tick
} }
} }
tmp = data->list.unk02; tmp = data->list.index;
handlerdata.list.value = tmp; handlerdata.list.value = tmp;
handlerdata.list.unk04 = 1; handlerdata.list.unk04 = 1;
handlerdata.list.unk0c = tmp; handlerdata.list.unk0c = tmp;
@@ -784,8 +784,8 @@ bool menuitemListTick(struct menuitem *item, struct menuinputs *inputs, u32 tick
item->handler(MENUOP_25, item, &handlerdata); item->handler(MENUOP_25, item, &handlerdata);
if (handlerdata.list.unk0c != handlerdata.list.value) { if (handlerdata.list.unk0c != handlerdata.list.value) {
data->list.unk02 = handlerdata.list.value; data->list.index = handlerdata.list.value;
data->list.unk04 = menuitem0f0e5ef8(data->list.unk02, item); data->list.targetoffsety = menuitemListGetOffsetY(data->list.index, item);
} }
return true; return true;
@@ -797,8 +797,8 @@ void menuitemDropdownInit(struct menuitem *item, union menuitemdata *data)
union handlerdata handlerdata; union handlerdata handlerdata;
union handlerdata handlerdata2; union handlerdata handlerdata2;
data->dropdown.unk00 = 0; data->dropdown.list.curoffsety = 0;
data->dropdown.unk02 = 0; data->dropdown.list.index = 0;
data->dropdown.unk08 = 0; data->dropdown.unk08 = 0;
data->dropdown.unk0a = 0; data->dropdown.unk0a = 0;
@@ -816,7 +816,7 @@ void menuitemDropdownInit(struct menuitem *item, union menuitemdata *data)
item->handler(MENUOP_GETSELECTEDINDEX, item, &handlerdata); item->handler(MENUOP_GETSELECTEDINDEX, item, &handlerdata);
if (handlerdata.dropdown.value < 0xffff) { if (handlerdata.dropdown.value < 0xffff) {
data->dropdown.unk02 = handlerdata.dropdown.value; data->dropdown.list.index = (u16) handlerdata.dropdown.value;
} else { } else {
// The value won't fit in unk02. // The value won't fit in unk02.
// Maybe MENUOP_25 is getting a scaled-down value? // Maybe MENUOP_25 is getting a scaled-down value?
@@ -825,10 +825,10 @@ void menuitemDropdownInit(struct menuitem *item, union menuitemdata *data)
handlerdata.dropdown.unk04 = 0; handlerdata.dropdown.unk04 = 0;
item->handler(MENUOP_25, item, &handlerdata); item->handler(MENUOP_25, item, &handlerdata);
data->dropdown.unk02 = handlerdata.dropdown.value; data->dropdown.list.index = handlerdata.dropdown.value;
} }
data->dropdown.unk04 = menuitem0f0e5ef8(data->dropdown.unk02, item); data->dropdown.list.targetoffsety = menuitemListGetOffsetY(data->dropdown.list.index, item);
item->handler(MENUOP_LISTITEMFOCUS, item, &handlerdata); item->handler(MENUOP_LISTITEMFOCUS, item, &handlerdata);
} }
@@ -2269,7 +2269,7 @@ Gfx *menuitemSliderRender(Gfx *gdl, struct menurendercontext *context)
if (context->item->handler != NULL) { if (context->item->handler != NULL) {
context->item->handler(MENUOP_GETSLIDER, context->item, &data); context->item->handler(MENUOP_GETSLIDER, context->item, &data);
slidervalue = data.slider.unk02; slidervalue = (s16) data.slider.value;
} else { } else {
slidervalue = 0; slidervalue = 0;
} }
@@ -2393,7 +2393,7 @@ bool menuitemSliderTick(struct menuitem *item, struct menudialog *dialog, struct
if (tickflags & MENUTICKFLAG_DIALOGISDIMMED) { if (tickflags & MENUTICKFLAG_DIALOGISDIMMED) {
if (item->handler) { if (item->handler) {
item->handler(MENUOP_GETSLIDER, item, &handlerdata); item->handler(MENUOP_GETSLIDER, item, &handlerdata);
index = (s16)handlerdata.slider.value; index = (s16) handlerdata.slider.value;
} else { } else {
index = 0; index = 0;
} }
@@ -2402,20 +2402,20 @@ bool menuitemSliderTick(struct menuitem *item, struct menudialog *dialog, struct
&& g_Menus[g_MpPlayerNum].xrepeatmode == MENUREPEATMODE_SLOW) { && g_Menus[g_MpPlayerNum].xrepeatmode == MENUREPEATMODE_SLOW) {
index = index + inputs->leftright; index = index + inputs->leftright;
} else { } else {
f0 = data->slider.unk00 / 1000.0f; f0 = data->slider.multiplier / 1000.0f;
f0 = (f0 * 100.0f) / item->param3; f0 = f0 * 100.0f / item->param3;
#if VERSION >= VERSION_PAL_BETA #if VERSION >= VERSION_PAL_BETA
f0 = f0 + inputs->leftrightheld * g_Vars.diffframe60freal; f0 = f0 + inputs->leftrightheld * g_Vars.diffframe60freal;
#else #else
f0 = f0 + inputs->leftrightheld * g_Vars.diffframe60; f0 = f0 + inputs->leftrightheld * g_Vars.diffframe60;
#endif #endif
f0 = (item->param3 * f0) / 100.0f; f0 = item->param3 * f0 / 100.0f;
tmp = f0; tmp = f0;
f0 -= tmp; f0 -= tmp;
index += tmp; index += tmp;
data->slider.unk00 = f0 * 1000.0f; data->slider.multiplier = f0 * 1000.0f;
} }
if (inputs->xaxis < 0) { if (inputs->xaxis < 0) {
@@ -2431,8 +2431,8 @@ bool menuitemSliderTick(struct menuitem *item, struct menudialog *dialog, struct
index = index + inputs->leftright; index = index + inputs->leftright;
} }
} else { } else {
f0 = data->slider.unk00 / 1000.0f; f0 = data->slider.multiplier / 1000.0f;
f0 = (f0 * 100.0f) / item->param3; f0 = f0 * 100.0f / item->param3;
if (inputs->xaxis < 0) { if (inputs->xaxis < 0) {
f2 = -f14; f2 = -f14;
@@ -2441,7 +2441,7 @@ bool menuitemSliderTick(struct menuitem *item, struct menudialog *dialog, struct
} }
if (f2 > 20) { if (f2 > 20) {
f2 = (f2 - 20) * 0.0625f; f2 = (f2 - 20) / 16.0f;
#if VERSION >= VERSION_PAL_BETA #if VERSION >= VERSION_PAL_BETA
f2 *= g_Vars.diffframe60freal; f2 *= g_Vars.diffframe60freal;
#else #else
@@ -2455,11 +2455,11 @@ bool menuitemSliderTick(struct menuitem *item, struct menudialog *dialog, struct
} }
} }
f0 = (item->param3 * f0) / 100.0f; f0 = item->param3 * f0 / 100.0f;
tmp = f0; tmp = f0;
f0 -= tmp; f0 -= tmp;
index += tmp; index += tmp;
data->slider.unk00 = f0 * 1000.0f; data->slider.multiplier = f0 * 1000.0f;
} }
if (index < 0) { if (index < 0) {
@@ -2492,7 +2492,7 @@ bool menuitemSliderTick(struct menuitem *item, struct menudialog *dialog, struct
void menuitemSliderInit(union menuitemdata *data) void menuitemSliderInit(union menuitemdata *data)
{ {
data->slider.unk00 = 0; data->slider.multiplier = 0;
} }
Gfx *menuitemCarouselRender(Gfx *gdl, struct menurendercontext *context) Gfx *menuitemCarouselRender(Gfx *gdl, struct menurendercontext *context)
@@ -2870,20 +2870,20 @@ Gfx *menuitemScrollableRender(Gfx *gdl, struct menurendercontext *context)
x = context->x + 3; x = context->x + 3;
y = context->y + 3; y = context->y + 3;
gdl = textRenderProjected(gdl, &x, &y, headingtext, g_CharsHandelGothicSm, g_FontHandelGothicSm, gdl = textRenderProjected(gdl, &x, &y, headingtext, g_CharsHandelGothicSm, g_FontHandelGothicSm,
0x000000ff, context->width - 4, context->height - 4, -data->unk00, 0); 0x000000ff, context->width - 4, context->height - 4, -data->scrolloffset, 0);
// Heading text (red) // Heading text (red)
x = context->x + 2; x = context->x + 2;
y = context->y + 2; y = context->y + 2;
gdl = textRenderProjected(gdl, &x, &y, headingtext, g_CharsHandelGothicSm, g_FontHandelGothicSm, gdl = textRenderProjected(gdl, &x, &y, headingtext, g_CharsHandelGothicSm, g_FontHandelGothicSm,
0xff4444ff, context->width - 4, context->height - 4, -data->unk00, 0); 0xff4444ff, context->width - 4, context->height - 4, -data->scrolloffset, 0);
// Body text // Body text
x = menuIsScrollableUnscrollable(context->item) ? context->x + 5 : context->x + 12; x = menuIsScrollableUnscrollable(context->item) ? context->x + 5 : context->x + 12;
y = context->y + 2; y = context->y + 2;
gdl = textRenderProjected(gdl, &x, &y, bodytext, g_CharsHandelGothicSm, g_FontHandelGothicSm, gdl = textRenderProjected(gdl, &x, &y, bodytext, g_CharsHandelGothicSm, g_FontHandelGothicSm,
colour, context->width - 4, context->height - 1, -data->unk00, 0); colour, context->width - 4, context->height - 1, -data->scrolloffset, 0);
return text0f153780(gdl); return text0f153780(gdl);
} }
@@ -2893,9 +2893,9 @@ bool menuitemScrollableTick(struct menuitem *item, struct menudialog *dialog, st
u32 stack; u32 stack;
#if VERSION >= VERSION_PAL_BETA #if VERSION >= VERSION_PAL_BETA
if ((s16)dialog->height != data->scrollable.unk06 || data->scrollable.unk08 != g_LanguageId) { if ((s16)dialog->height != data->scrollable.dialogheight || data->scrollable.language != g_LanguageId) {
#else #else
if ((s16)dialog->height != data->scrollable.unk06) { if ((s16)dialog->height != data->scrollable.dialogheight) {
#endif #endif
char wrapped[8000] = ""; char wrapped[8000] = "";
char *rawtext; char *rawtext;
@@ -2907,7 +2907,7 @@ bool menuitemScrollableTick(struct menuitem *item, struct menudialog *dialog, st
s16 rowheight; s16 rowheight;
#if VERSION >= VERSION_PAL_BETA #if VERSION >= VERSION_PAL_BETA
data->scrollable.unk08 = g_LanguageId; data->scrollable.language = g_LanguageId;
#endif #endif
dialogFindItem(dialog, item, &rowindex, &colindex); dialogFindItem(dialog, item, &rowindex, &colindex);
@@ -2929,17 +2929,17 @@ bool menuitemScrollableTick(struct menuitem *item, struct menudialog *dialog, st
textMeasure(&height, &width, wrapped, g_CharsHandelGothicSm, g_FontHandelGothicSm, 0); textMeasure(&height, &width, wrapped, g_CharsHandelGothicSm, g_FontHandelGothicSm, 0);
data->scrollable.unk04 = height - rowheight + 5; data->scrollable.maxscrolloffset = height - rowheight + 5;
if (data->scrollable.unk04 < -10) { if (data->scrollable.maxscrolloffset < -10) {
data->scrollable.unk04 = -10; data->scrollable.maxscrolloffset = -10;
} }
data->scrollable.unk06 = dialog->height; data->scrollable.dialogheight = dialog->height;
} }
if (menuIsScrollableUnscrollable(item)) { if (menuIsScrollableUnscrollable(item)) {
data->scrollable.unk00 = 0; data->scrollable.scrolloffset = 0;
} else if (tickflags & MENUTICKFLAG_ITEMISFOCUSED) { } else if (tickflags & MENUTICKFLAG_ITEMISFOCUSED) {
f32 floatval; f32 floatval;
s32 intval = 0; s32 intval = 0;
@@ -2970,14 +2970,14 @@ bool menuitemScrollableTick(struct menuitem *item, struct menudialog *dialog, st
#else #else
intval += inputs->updownheld * 2 * g_Vars.diffframe60; intval += inputs->updownheld * 2 * g_Vars.diffframe60;
#endif #endif
data->scrollable.unk00 += intval; data->scrollable.scrolloffset += intval;
if (data->scrollable.unk00 < -10) { if (data->scrollable.scrolloffset < -10) {
data->scrollable.unk00 = -10; data->scrollable.scrolloffset = -10;
} }
if (data->scrollable.unk00 > data->scrollable.unk04) { if (data->scrollable.scrolloffset > data->scrollable.maxscrolloffset) {
data->scrollable.unk00 = data->scrollable.unk04; data->scrollable.scrolloffset = data->scrollable.maxscrolloffset;
} }
} }
@@ -2986,8 +2986,8 @@ bool menuitemScrollableTick(struct menuitem *item, struct menudialog *dialog, st
void menuitemScrollableInit(union menuitemdata *data) void menuitemScrollableInit(union menuitemdata *data)
{ {
data->scrollable.unk06 = -1; data->scrollable.dialogheight = -1;
data->scrollable.unk00 = -10; data->scrollable.scrolloffset = -10;
} }
Gfx *menuitemMarqueeRender(Gfx *gdl, struct menurendercontext *context) Gfx *menuitemMarqueeRender(Gfx *gdl, struct menurendercontext *context)
@@ -3162,7 +3162,7 @@ Gfx *menuitemMarqueeRender(Gfx *gdl, struct menurendercontext *context)
textRestoreBlends(); textRestoreBlends();
data->unk04 = context->width; data->viewwidth = context->width;
return gdl; return gdl;
} }
@@ -3177,7 +3177,7 @@ bool menuitemMarqueeTick(struct menuitem *item, union menuitemdata *data)
struct fontchar *font1; struct fontchar *font1;
struct font *font2; struct font *font2;
s32 increment; s32 increment;
u16 sum = 0; u16 texthash = 0;
char *text = menuResolveParam2Text(item); char *text = menuResolveParam2Text(item);
s32 limit; s32 limit;
@@ -3201,17 +3201,17 @@ bool menuitemMarqueeTick(struct menuitem *item, union menuitemdata *data)
i = 0; i = 0;
while (text[i] != '\0') { while (text[i] != '\0') {
sum += text[i]; texthash += text[i];
i++; i++;
} }
if (data->marquee.sum != sum) { if (data->marquee.texthash != texthash) {
data->marquee.totalmoved = 0; data->marquee.totalmoved = 0;
data->marquee.sum = sum; data->marquee.texthash = texthash;
} }
textMeasure(&textheight, &textwidth, text, font1, font2, 0); textMeasure(&textheight, &textwidth, text, font1, font2, 0);
limit = data->marquee.unk04 + textwidth; limit = data->marquee.viewwidth + textwidth;
increment = g_Vars.diffframe60 / 2; increment = g_Vars.diffframe60 / 2;
if (increment <= 0) { if (increment <= 0) {
@@ -3230,7 +3230,7 @@ bool menuitemMarqueeTick(struct menuitem *item, union menuitemdata *data)
void menuitemMarqueeInit(union menuitemdata *data) void menuitemMarqueeInit(union menuitemdata *data)
{ {
data->marquee.totalmoved = 0; data->marquee.totalmoved = 0;
data->marquee.unk04 = 50; data->marquee.viewwidth = 50;
data->marquee.unk06 = 0; data->marquee.unk06 = 0;
} }
+47 -47
View File
@@ -25,62 +25,62 @@ u32 setupGetCmdLength(u32 *cmd)
#endif #endif
switch ((u8)PD_BE32(cmd[0])) { switch ((u8)PD_BE32(cmd[0])) {
case OBJTYPE_CHR: return 11; case OBJTYPE_CHR: return sizeof(struct packedchr) / sizeof(u32);
case OBJTYPE_DOOR: return 55; case OBJTYPE_DOOR: return sizeof(struct doorobj) / sizeof(u32);
case OBJTYPE_DOORSCALE: return 2; case OBJTYPE_DOORSCALE: return sizeof(struct doorscaleobj) / sizeof(u32);
case OBJTYPE_BASIC: return 23; case OBJTYPE_BASIC: return sizeof(struct defaultobj) / sizeof(u32);
case OBJTYPE_DEBRIS: return 23; case OBJTYPE_DEBRIS: return sizeof(struct debrisobj) / sizeof(u32);
case OBJTYPE_GLASS: return 24; case OBJTYPE_GLASS: return sizeof(struct glassobj) / sizeof(u32);
case OBJTYPE_TINTEDGLASS: return 26; case OBJTYPE_TINTEDGLASS: return sizeof(struct tintedglassobj) / sizeof(u32);
case OBJTYPE_SAFE: return 23; case OBJTYPE_SAFE: return sizeof(struct safeobj) / sizeof(u32);
case OBJTYPE_GASBOTTLE: return 23; case OBJTYPE_GASBOTTLE: return sizeof(struct gasbottleobj) / sizeof(u32);
case OBJTYPE_KEY: return 24; case OBJTYPE_KEY: return sizeof(struct keyobj) / sizeof(u32);
case OBJTYPE_ALARM: return 23; case OBJTYPE_ALARM: return sizeof(struct alarmobj) / sizeof(u32);
case OBJTYPE_CCTV: return 49; case OBJTYPE_CCTV: return sizeof(struct cctvobj) / sizeof(u32);
case OBJTYPE_AMMOCRATE: return 24; case OBJTYPE_AMMOCRATE: return sizeof(struct ammocrateobj) / sizeof(u32);
case OBJTYPE_WEAPON: return 26; case OBJTYPE_WEAPON: return sizeof(struct weaponobj) / sizeof(u32);
case OBJTYPE_SINGLEMONITOR: return 53; case OBJTYPE_SINGLEMONITOR: return sizeof(struct singlemonitorobj) / sizeof(u32);
case OBJTYPE_MULTIMONITOR: return 140; case OBJTYPE_MULTIMONITOR: return sizeof(struct multimonitorobj) / sizeof(u32);
case OBJTYPE_HANGINGMONITORS: return 23; case OBJTYPE_HANGINGMONITORS: return sizeof(struct hangingmonitorsobj) / sizeof(u32);
case OBJTYPE_AUTOGUN: return 43; case OBJTYPE_AUTOGUN: return sizeof(struct autogunobj) / sizeof(u32);
case OBJTYPE_LINKGUNS: return 2; case OBJTYPE_LINKGUNS: return sizeof(struct linkgunsobj) / sizeof(u32);
case OBJTYPE_HAT: return 23; case OBJTYPE_HAT: return sizeof(struct hatobj) / sizeof(u32);
case OBJTYPE_GRENADEPROB: return 2; case OBJTYPE_GRENADEPROB: return sizeof(struct grenadeprobobj) / sizeof(u32);
case OBJTYPE_LINKLIFTDOOR: return 5; case OBJTYPE_LINKLIFTDOOR: return sizeof(struct linkliftdoorobj) / sizeof(u32);
case OBJTYPE_SAFEITEM: return 5; case OBJTYPE_SAFEITEM: return sizeof(struct safeitemobj) / sizeof(u32);
case OBJTYPE_MULTIAMMOCRATE: return 42; case OBJTYPE_MULTIAMMOCRATE: return sizeof(struct multiammocrateobj) / sizeof(u32);
case OBJTYPE_SHIELD: return 26; case OBJTYPE_SHIELD: return sizeof(struct shieldobj) / sizeof(u32);
case OBJTYPE_TAG: return 4; case OBJTYPE_TAG: return sizeof(struct tag) / sizeof(u32);
case OBJTYPE_RENAMEOBJ: return 10; case OBJTYPE_RENAMEOBJ: return sizeof(struct textoverride) / sizeof(u32);
case OBJTYPE_BEGINOBJECTIVE: return 4; case OBJTYPE_BEGINOBJECTIVE: return sizeof(struct objective) / sizeof(u32);
case OBJTYPE_ENDOBJECTIVE: return 1; case OBJTYPE_ENDOBJECTIVE: return 1;
case OBJECTIVETYPE_DESTROYOBJ: return 2; case OBJECTIVETYPE_DESTROYOBJ: return 2;
case OBJECTIVETYPE_COMPFLAGS: return 2; case OBJECTIVETYPE_COMPFLAGS: return 2;
case OBJECTIVETYPE_FAILFLAGS: return 2; case OBJECTIVETYPE_FAILFLAGS: return 2;
case OBJECTIVETYPE_COLLECTOBJ: return 2; case OBJECTIVETYPE_COLLECTOBJ: return 2;
case OBJECTIVETYPE_THROWOBJ: return 2; case OBJECTIVETYPE_THROWOBJ: return 2;
case OBJECTIVETYPE_HOLOGRAPH: return 4; case OBJECTIVETYPE_HOLOGRAPH: return sizeof(struct criteria_holograph) / sizeof(u32);
case OBJECTIVETYPE_1F: return 1; case OBJECTIVETYPE_1F: return 1;
case OBJECTIVETYPE_ENTERROOM: return 4; case OBJECTIVETYPE_ENTERROOM: return sizeof(struct criteria_roomentered) / sizeof(u32);
case OBJECTIVETYPE_THROWINROOM: return 5; case OBJECTIVETYPE_THROWINROOM: return sizeof(struct criteria_throwinroom) / sizeof(u32);
case OBJTYPE_22: return 1; case OBJTYPE_22: return 1;
case OBJTYPE_BRIEFING: return 4; case OBJTYPE_BRIEFING: return sizeof(struct briefingobj) / sizeof(u32);
case OBJTYPE_PADLOCKEDDOOR: return 4; case OBJTYPE_PADLOCKEDDOOR: return sizeof(struct padlockeddoorobj) / sizeof(u32);
case OBJTYPE_TRUCK: return 34; case OBJTYPE_TRUCK: return sizeof(struct truckobj) / sizeof(u32);
case OBJTYPE_HELI: return 35; case OBJTYPE_HELI: return sizeof(struct heliobj) / sizeof(u32);
case OBJTYPE_TANK: return 32; case OBJTYPE_TANK: return 32;
case OBJTYPE_CAMERAPOS: return 7; case OBJTYPE_CAMERAPOS: return sizeof(struct cameraposobj) / sizeof(u32);
case OBJTYPE_LIFT: return 37; case OBJTYPE_LIFT: return sizeof(struct liftobj) / sizeof(u32);
case OBJTYPE_CONDITIONALSCENERY: return 5; case OBJTYPE_CONDITIONALSCENERY: return sizeof(struct linksceneryobj) / sizeof(u32);
case OBJTYPE_BLOCKEDPATH: return 4; case OBJTYPE_BLOCKEDPATH: return sizeof(struct blockedpathobj) / sizeof(u32);
case OBJTYPE_HOVERBIKE: return 56; case OBJTYPE_HOVERBIKE: return sizeof(struct hoverbikeobj) / sizeof(u32);
case OBJTYPE_HOVERPROP: return 39; case OBJTYPE_HOVERPROP: return sizeof(struct hoverpropobj) / sizeof(u32);
case OBJTYPE_FAN: return 29; case OBJTYPE_FAN: return sizeof(struct fanobj) / sizeof(u32);
case OBJTYPE_HOVERCAR: return 38; case OBJTYPE_HOVERCAR: return sizeof(struct hovercarobj) / sizeof(u32);
case OBJTYPE_CHOPPER: return 58; case OBJTYPE_CHOPPER: return sizeof(struct chopperobj) / sizeof(u32);
case OBJTYPE_PADEFFECT: return 3; case OBJTYPE_PADEFFECT: return sizeof(struct padeffectobj) / sizeof(u32);
case OBJTYPE_MINE: return 26; case OBJTYPE_MINE: return sizeof(struct weaponobj) / sizeof(u32);
case OBJTYPE_ESCASTEP: return 27; case OBJTYPE_ESCASTEP: return sizeof(struct escalatorobj) / sizeof(u32);
} }
#if VERSION < VERSION_NTSC_1_0 #if VERSION < VERSION_NTSC_1_0
+1 -1
View File
@@ -32,7 +32,7 @@ void func0f0f1494(void);
char *menuResolveText(uintptr_t thing, void *dialogoritem); char *menuResolveText(uintptr_t thing, void *dialogoritem);
char *menuResolveParam2Text(struct menuitem *item); char *menuResolveParam2Text(struct menuitem *item);
char *menuResolveDialogTitle(struct menudialogdef *dialogdef); char *menuResolveDialogTitle(struct menudialogdef *dialogdef);
void func0f0f15a4(struct menuitem *item, s32 *arg1); void menuGetItemBlocksRequired(struct menuitem *item, s32 *arg1);
void menuCalculateItemSize(struct menuitem *item, s16 *width, s16 *height, struct menudialog *dialog); void menuCalculateItemSize(struct menuitem *item, s16 *width, s16 *height, struct menudialog *dialog);
void func0f0f1d6c(struct menudialogdef *dialogdef, struct menudialog *dialog, struct menu *menu); void func0f0f1d6c(struct menudialogdef *dialogdef, struct menudialog *dialog, struct menu *menu);
void dialog0f0f1ef4(struct menudialog *dialog); void dialog0f0f1ef4(struct menudialog *dialog);
+1 -1
View File
@@ -5,7 +5,7 @@
#include "types.h" #include "types.h"
s32 menuitem0f0e5d2c(s32 arg0, struct menuitem *item); s32 menuitem0f0e5d2c(s32 arg0, struct menuitem *item);
s16 menuitem0f0e5ef8(s16 arg0, struct menuitem *item); s16 menuitemListGetOffsetY(s16 optionindex, struct menuitem *item);
Gfx *menuitemListRenderHeader(Gfx *gdl, s16 x1, s16 y1, s16 width, s16 arg4, s16 height, char *text, struct menudialog *dialog); Gfx *menuitemListRenderHeader(Gfx *gdl, s16 x1, s16 y1, s16 width, s16 arg4, s16 height, char *text, struct menudialog *dialog);
Gfx *menuitemListOverlay(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2); Gfx *menuitemListOverlay(Gfx *gdl, s16 x, s16 y, s16 x2, s16 y2);
Gfx *menuitemListRender(Gfx *gdl, struct menurendercontext *context); Gfx *menuitemListRender(Gfx *gdl, struct menurendercontext *context);
+37 -45
View File
@@ -1544,6 +1544,10 @@ struct keyobj { // objtype 0x04
u32 keyflags; u32 keyflags;
}; };
struct alarmobj { // objtype 0x05
struct defaultobj base;
};
struct cctvobj { // objtype 0x06 struct cctvobj { // objtype 0x06
struct defaultobj base; struct defaultobj base;
@@ -1678,6 +1682,10 @@ struct linkgunsobj { // objtype 0x0e
s16 offset2; s16 offset2;
}; };
struct debrisobj { // objtype 0x0f
struct defaultobj base;
};
struct hatobj { // objtype 0x11 struct hatobj { // objtype 0x11
struct defaultobj base; struct defaultobj base;
}; };
@@ -1710,6 +1718,7 @@ struct shieldobj { // objtype 0x15
struct defaultobj base; struct defaultobj base;
/*0x5c*/ f32 initialamount; /*0x5c*/ f32 initialamount;
/*0x60*/ f32 amount; /*0x60*/ f32 amount;
/*0x64*/ u32 unk64;
}; };
struct tag { // objtype 0x16 struct tag { // objtype 0x16
@@ -1736,6 +1745,10 @@ struct briefingobj { // objtype 0x23
struct briefingobj *next; struct briefingobj *next;
}; };
struct gasbottleobj { // objtype 0x24
struct defaultobj base;
};
struct padlockeddoorobj { // objtype 0x26 struct padlockeddoorobj { // objtype 0x26
u32 unk00; u32 unk00;
struct doorobj *door; struct doorobj *door;
@@ -1782,7 +1795,7 @@ struct glassobj { // objtype 0x2a
}; };
struct safeobj { // objtype 0x2b struct safeobj { // objtype 0x2b
u32 unk00; struct defaultobj base;
}; };
struct safeitemobj { struct safeitemobj {
@@ -3259,15 +3272,19 @@ struct menuitemdata_controller {
s8 prevmode; s8 prevmode;
}; };
struct menuitemdata_list {
s16 curoffsety;
s16 index;
s16 targetoffsety;
s16 viewheight;
};
struct menuitemdata_dropdown { struct menuitemdata_dropdown {
u16 unk00; struct menuitemdata_list list;
u16 unk02; u16 unk08; // unused
s16 unk04; u16 unk0a; // unused
u16 unk06;
u16 unk08;
u16 unk0a;
s16 scrolloffset; s16 scrolloffset;
u16 unk0e; u16 unk0e; // unused
}; };
struct menuitemdata_keyboard { struct menuitemdata_keyboard {
@@ -3278,18 +3295,11 @@ struct menuitemdata_keyboard {
u8 capseffective : 1; // Same as above, but inverted if holding L or R u8 capseffective : 1; // Same as above, but inverted if holding L or R
}; };
struct menuitemdata_list {
s16 unk00;
s16 unk02;
s16 unk04;
s16 unk06;
};
struct menuitemdata_marquee { struct menuitemdata_marquee {
u16 totalmoved; u16 totalmoved;
u16 sum; u16 texthash;
u16 unk04; u16 viewwidth;
u16 unk06; u16 unk06; // unused
}; };
struct menuitemdata_ranking { struct menuitemdata_ranking {
@@ -3297,15 +3307,17 @@ struct menuitemdata_ranking {
}; };
struct menuitemdata_scrollable { struct menuitemdata_scrollable {
s16 unk00; s16 scrolloffset;
s16 unk02; s16 unk02; // unused
s16 unk04; s16 maxscrolloffset;
s16 unk06; s16 dialogheight;
s16 unk08; #if VERSION >= VERSION_PAL_BETA
s16 language;
#endif
}; };
struct menuitemdata_slider { struct menuitemdata_slider {
s16 unk00; s16 multiplier;
}; };
union menuitemdata { union menuitemdata {
@@ -3355,27 +3367,8 @@ struct handlerdata_list {
s32 unk0c; s32 unk0c;
}; };
struct handlerdata_list2 {
s16 unk00;
s16 unk02;
u32 unk04;
u32 unk08;
u32 unk0c;
};
struct handlerdata_slider { struct handlerdata_slider {
union { u32 value;
u32 value;
struct {
#ifdef PLATFORM_BIG_ENDIAN
s16 unk00;
u16 unk02;
#else
s16 unk02;
u16 unk00;
#endif
};
};
char *label; char *label;
}; };
@@ -3409,7 +3402,6 @@ union handlerdata {
struct handlerdata_carousel carousel; struct handlerdata_carousel carousel;
struct handlerdata_checkbox checkbox; struct handlerdata_checkbox checkbox;
struct handlerdata_list list; struct handlerdata_list list;
struct handlerdata_list2 list2;
struct handlerdata_dropdown dropdown; struct handlerdata_dropdown dropdown;
struct handlerdata_keyboard keyboard; struct handlerdata_keyboard keyboard;
struct handlerdata_label label; struct handlerdata_label label;