Rando: Infinite upgrades (Rando V3) (#3942)

* Infinite Upgrades

* Add "Condensed Progressive"

* VB & fix build

* Update settings.cpp
This commit is contained in:
Pepe20129 2024-07-22 18:54:14 +02:00 committed by GitHub
commit 3bcd93428e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 499 additions and 50 deletions

View file

@ -2768,6 +2768,8 @@ u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) {
if (INV_CONTENT(ITEM_BOMBCHU) == ITEM_NONE) {
INV_CONTENT(ITEM_BOMBCHU) = ITEM_BOMBCHU;
AMMO(ITEM_BOMBCHU) = 20;
} else if (Randomizer_GetSettingValue(RSK_INFINITE_UPGRADES)) {
Flags_SetRandomizerInf(RAND_INF_HAS_INFINITE_BOMBCHUS);
} else {
AMMO(ITEM_BOMBCHU) += AMMO(ITEM_BOMBCHU) < 5 ? 10 : 5;
if (AMMO(ITEM_BOMBCHU) > 50) {
@ -2796,6 +2798,46 @@ u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) {
return Return_Item_Entry(giEntry, RG_NONE);
}
if (item == RG_QUIVER_INF) {
Flags_SetRandomizerInf(RAND_INF_HAS_INFINITE_QUIVER);
return Return_Item_Entry(giEntry, RG_NONE);
}
if (item == RG_BOMB_BAG_INF) {
Flags_SetRandomizerInf(RAND_INF_HAS_INFINITE_BOMB_BAG);
return Return_Item_Entry(giEntry, RG_NONE);
}
if (item == RG_BULLET_BAG_INF) {
Flags_SetRandomizerInf(RAND_INF_HAS_INFINITE_BULLET_BAG);
return Return_Item_Entry(giEntry, RG_NONE);
}
if (item == RG_STICK_UPGRADE_INF) {
Flags_SetRandomizerInf(RAND_INF_HAS_INFINITE_STICK_UPGRADE);
return Return_Item_Entry(giEntry, RG_NONE);
}
if (item == RG_NUT_UPGRADE_INF) {
Flags_SetRandomizerInf(RAND_INF_HAS_INFINITE_NUT_UPGRADE);
return Return_Item_Entry(giEntry, RG_NONE);
}
if (item == RG_MAGIC_INF) {
Flags_SetRandomizerInf(RAND_INF_HAS_INFINITE_MAGIC_METER);
return Return_Item_Entry(giEntry, RG_NONE);
}
if (item == RG_BOMBCHU_INF) {
Flags_SetRandomizerInf(RAND_INF_HAS_INFINITE_BOMBCHUS);
return Return_Item_Entry(giEntry, RG_NONE);
}
if (item == RG_WALLET_INF) {
Flags_SetRandomizerInf(RAND_INF_HAS_INFINITE_MONEY);
return Return_Item_Entry(giEntry, RG_NONE);
}
if (item == RG_SKELETON_KEY) {
Flags_SetRandomizerInf(RAND_INF_HAS_SKELETON_KEY);
return Return_Item_Entry(giEntry, RG_NONE);
@ -3578,21 +3620,23 @@ void Interface_UpdateMagicBar(PlayState* play) {
break;
case MAGIC_STATE_CONSUME:
gSaveContext.magic -= 2;
if (gSaveContext.magic <= 0) {
gSaveContext.magic = 0;
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_1;
if (CVarGetInteger(CVAR_COSMETIC("Consumable.MagicBorder.Changed"), 0)) {
sMagicBorder = CVarGetColor24(CVAR_COSMETIC("Consumable.MagicBorder.Value"), sMagicBorder_ori);
} else {
sMagicBorder = sMagicBorder_ori;
}
} else if (gSaveContext.magic == gSaveContext.magicTarget) {
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_1;
if (CVarGetInteger(CVAR_COSMETIC("Consumable.MagicBorder.Changed"), 0)) {
sMagicBorder = CVarGetColor24(CVAR_COSMETIC("Consumable.MagicBorder.Value"), sMagicBorder_ori);
} else {
sMagicBorder = sMagicBorder_ori;
if (!Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_MAGIC_METER)) {
gSaveContext.magic -= 2;
if (gSaveContext.magic <= 0) {
gSaveContext.magic = 0;
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_1;
if (CVarGetInteger(CVAR_COSMETIC("Consumable.MagicBorder.Changed"), 0)) {
sMagicBorder = CVarGetColor24(CVAR_COSMETIC("Consumable.MagicBorder.Value"), sMagicBorder_ori);
} else {
sMagicBorder = sMagicBorder_ori;
}
} else if (gSaveContext.magic == gSaveContext.magicTarget) {
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_1;
if (CVarGetInteger(CVAR_COSMETIC("Consumable.MagicBorder.Changed"), 0)) {
sMagicBorder = CVarGetColor24(CVAR_COSMETIC("Consumable.MagicBorder.Value"), sMagicBorder_ori);
} else {
sMagicBorder = sMagicBorder_ori;
}
}
}
case MAGIC_STATE_METER_FLASH_1:
@ -3756,6 +3800,7 @@ void Interface_DrawMagicBar(PlayState* play) {
s16 magicBarY;
Color_RGB8 magicbar_yellow = {250,250,0}; //Magic bar being used
Color_RGB8 magicbar_green = {R_MAGIC_FILL_COLOR(0),R_MAGIC_FILL_COLOR(1),R_MAGIC_FILL_COLOR(2)}; //Magic bar fill
Color_RGB8 magicbar_blue = {0,0,200};//Infinite magic bar
if (CVarGetInteger(CVAR_COSMETIC("Consumable.MagicActive.Changed"), 0)) {
magicbar_yellow = CVarGetColor24(CVAR_COSMETIC("Consumable.MagicActive.Value"), magicbar_yellow);
@ -3763,6 +3808,9 @@ void Interface_DrawMagicBar(PlayState* play) {
if (CVarGetInteger(CVAR_COSMETIC("Consumable.Magic.Changed"), 0)) {
magicbar_green = CVarGetColor24(CVAR_COSMETIC("Consumable.Magic.Value"), magicbar_green);
}
if (CVarGetInteger("gCosmetics.Consumable_MagicInfinite.Changed", 0)) {
magicbar_blue = CVarGetColor24("gCosmetics.Consumable_MagicInfinite.Value", magicbar_blue);
}
OPEN_DISPS(play->state.gfxCtx);
@ -3870,14 +3918,26 @@ void Interface_DrawMagicBar(PlayState* play) {
// Fill the rest of the bar with the normal magic color
gDPPipeSync(OVERLAY_DISP++);
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, magicbar_green.r, magicbar_green.g, magicbar_green.b, interfaceCtx->magicAlpha);
if (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_MAGIC_METER)) {
// Blue magic
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, magicbar_blue.r, magicbar_blue.g, magicbar_blue.b, interfaceCtx->magicAlpha);
} else {
// Green magic (default)
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, magicbar_green.r, magicbar_green.g, magicbar_green.b, interfaceCtx->magicAlpha);
}
gSPWideTextureRectangle(OVERLAY_DISP++, rMagicFillX << 2, (magicBarY + 3) << 2,
(rMagicFillX + gSaveContext.magicTarget) << 2, (magicBarY + 10) << 2, G_TX_RENDERTILE,
0, 0, 1 << 10, 1 << 10);
} else {
// Fill the whole bar with the normal magic color
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, magicbar_green.r, magicbar_green.g, magicbar_green.b, interfaceCtx->magicAlpha);
if (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_MAGIC_METER)) {
// Blue magic
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, magicbar_blue.r, magicbar_blue.g, magicbar_blue.b, interfaceCtx->magicAlpha);
} else {
// Green magic (default)
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, magicbar_green.r, magicbar_green.g, magicbar_green.b, interfaceCtx->magicAlpha);
}
gDPLoadMultiBlock_4b(OVERLAY_DISP++, gMagicMeterFillTex, 0, G_TX_RENDERTILE, G_IM_FMT_I, 16, 16, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
@ -5021,10 +5081,25 @@ void Interface_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) {
i = gSaveContext.equips.buttonItems[button];
if ((i == ITEM_STICK) || (i == ITEM_NUT) || (i == ITEM_BOMB) || (i == ITEM_BOW) ||
((i >= ITEM_BOW_ARROW_FIRE) && (i <= ITEM_BOW_ARROW_LIGHT)) || (i == ITEM_SLINGSHOT) || (i == ITEM_BOMBCHU) ||
(i == ITEM_BEAN)) {
if (
GameInteractor_Should(
VB_DRAW_AMMO_COUNT,
(
(i == ITEM_STICK) ||
(i == ITEM_NUT) ||
(i == ITEM_BOMB) ||
(i == ITEM_BOW) ||
(
(i >= ITEM_BOW_ARROW_FIRE) &&
(i <= ITEM_BOW_ARROW_LIGHT)
) ||
(i == ITEM_SLINGSHOT) ||
(i == ITEM_BOMBCHU) ||
(i == ITEM_BEAN)
),
&i
)
) {
if ((i >= ITEM_BOW_ARROW_FIRE) && (i <= ITEM_BOW_ARROW_LIGHT)) {
i = ITEM_BOW;
}
@ -5297,8 +5372,8 @@ void Interface_Draw(PlayState* play) {
if (fullUi) {
s16 PosX_RC;
s16 PosY_RC;
//when not having a wallet in rando, don't calculate the ruppe icon
if (!IS_RANDO || Flags_GetRandomizerInf(RAND_INF_HAS_WALLET)) {
//when not having a wallet (or infinite money) in rando, don't calculate the ruppe icon
if (!IS_RANDO || (Flags_GetRandomizerInf(RAND_INF_HAS_WALLET) && !Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_MONEY))) {
// Rupee Icon
if (CVarGetInteger(CVAR_ENHANCEMENT("DynamicWalletIcon"), 0)) {
switch (CUR_UPG_VALUE(UPG_WALLET)) {