Add Roc's Feather (custom item) to Rando Item Pool (#6035)

This adds Roc's as a fully implemented item into the randomizer pool. When both Roc's and Nayru's is found, you can swap between them on the pause menu

Many people have contributed to this over time, so huge shoutout to:
- kentonm, this item is directly inspired by their Roc's Feather from their romhack Indigo. Also provided me with their GI model, icon texture and animation to use.
- PurpleHato, for providing the images for the item name shown on the kaleidoscope.
- Dana The Elf, providing another custom animation for the item.
- Reppan, for helping to tweak the animation and exporting the GI model for me.
This commit is contained in:
aMannus
2026-01-10 13:59:32 +01:00
committed by GitHub
parent 5bbc32c2d1
commit 14a6bc1f85
50 changed files with 626 additions and 23 deletions

View File

@@ -3,6 +3,7 @@
#include "textures/icon_item_static/icon_item_static.h"
#include "textures/icon_item_24_static/icon_item_24_static.h"
#include "textures/parameter_static/parameter_static.h"
#include <soh_assets.h>
// Bit Flag array in which gBitFlags[n] is literally (1 << n)
u32 gBitFlags[] = {
@@ -168,6 +169,35 @@ void* gItemIcons[] = {
gOcarinaBtnIconCLeftTex,
gOcarinaBtnIconCRightTex,
gOcarinaBtnIconATex,
// Push down array to reach newly added item IDs
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
// Start custom items
gRocsFeatherTex,
};
// Used to map item IDs to inventory slots

View File

@@ -2463,6 +2463,12 @@ u8 Item_Give(PlayState* play, u8 item) {
}
}
return Return_Item(item, MOD_NONE, ITEM_NONE);
} else if (item == ITEM_NAYRUS_LOVE && Randomizer_GetSettingValue(RSK_ROCS_FEATHER)) {
Flags_SetRandomizerInf(RAND_INF_OBTAINED_NAYRUS_LOVE);
if (INV_CONTENT(ITEM_NAYRUS_LOVE) == ITEM_NONE) {
INV_CONTENT(ITEM_NAYRUS_LOVE) = ITEM_NAYRUS_LOVE;
}
return Return_Item(item, MOD_NONE, ITEM_NONE);
}
returnItem = gSaveContext.inventory.items[slot];

View File

@@ -594,6 +594,10 @@ void Play_Init(GameState* thisx) {
gSlotAgeReqs[SLOT_TRADE_CHILD] = AGE_REQ_CHILD;
}
// Handle Rocs Feather requiement
gItemAgeReqs[ITEM_ROCS_FEATHER] = AGE_REQ_NONE;
gSlotAgeReqs[SLOT_NAYRUS_LOVE] = AGE_REQ_NONE;
func_800304DC(play, &play->actorCtx, play->linkActorEntry);
while (!func_800973FC(play, &play->roomCtx)) {