Kinstone fusion
Matching a half-medallion with a character's other half, which sets off an event somewhere in the world.
On this page
Kinstone fusion pairs a piece Link carries with a character’s matching piece. In The Minish Cap, each fuser has its own percent chance to offer, rolled in the one call read when the Blade Brothers are set up, and some offers are drawn from a shared pool of 181.
- Chance offerThe Legend of Zelda: The Minish Cap (2004). Each fuser offers with its own percent chance, rolled on each call.1
Games
| Game | Year | How | Note |
|---|---|---|---|
| The Legend of Zelda: The Minish Cap | 2004 | Chance offer | each fuser offers with its own percent chance, rolled on each call |
Every claim about this mechanic, by game (1)
References
- ^ abEach Kinstone fuser in The Minish Cap has a data entry whose second byte, which the decompilers call its stability, is the percent chance it offers a fusion:
GetFusionToOfferreturns no fusion when that byte is at mostRandom() % 100, none before Link has the Kinstone Bag, and none before the story's progress reaches the entry's first byte. The one call the atlas read is in the Blade Brothers' first action, which sets them up. An entry of0xFFin a fuser's list stands for a shared fusion: from a random start among 18, the first not yet fused. In the US ROM's table, of the 119 fusers after entry 0, 77 have 100, 20 have 50, 21 have 30, and one has 60 (computed).Codezeldaret/tmc · “Legend of Zelda, The - The Minish Cap (USA)”revisedHow we know
1235 fuserId = GetFuserId(entity); 1236 fuserData = gUnk_08001DCC[fuserId]; 1237 if (GetInventoryValue(ITEM_KINSTONE_BAG) == 0 || fuserData[0] > gSave.global_progress) { 1238 return KINSTONE_NONE;
src/common.c lines 1235–1239 at 6fb6dfb · upstream ↗ 1257 if (offeredFusion == KINSTONE_RANDOM) { // random shared fusion 1258 offeredFusion = GetRandomSharedFusion(fuserData);
src/common.c lines 1257–1259 at 6fb6dfb · upstream ↗ 1274 randomMood = Random(); 1275 fuserStability = fuserData[1]; 1276 if (fuserStability <= randomMood % 100) { 1277 return KINSTONE_NONE; // fickleness
src/common.c lines 1274–1278 at 6fb6dfb · upstream ↗ 1943const u8 SharedFusions[] = { ⋮ 1948u32 GetRandomSharedFusion(u8* fuserData) { 1949 s32 r = (s32)Random() % 18; 1950 u32 i; 1951 for (i = 0; i < 18; ++i) { 1952 u32 kinstoneId = SharedFusions[r]; 1953 if (!CheckKinstoneFused(kinstoneId)) 1954 return kinstoneId; 1955 r = (r + 1) % 18; ⋮ 1957 return KINSTONE_JUST_FUSED;
src/common.c lines 1943–1958 at 6fb6dfb · upstream ↗ 154 KINSTONE_RANDOM = 0xFF,include/kinstone.h line 154 at 6fb6dfb · upstream ↗ 314void sub_08068AFC(BladeBrothersEntity* this) { 315 super->action = 1; 316 super->spriteSettings.draw = 1; 317 this->fusionOffer = GetFusionToOffer(super);
src/npc/bladeBrothers.c lines 314–317 at 6fb6dfb · upstream ↗ 307gUnk_08001DCC:: @ 08001DCC 308 .4byte gUnk_08001FAC 309 .4byte gUnk_08001FB4
asm/src/code_08001A7C.s lines 307–309 at 6fb6dfb · upstream ↗ In the cartridge (“Legend of Zelda, The - The Minish Cap (USA)”): the fusers' pointer table, 120 words, the first pointing at 0x08001FAC where the table ends; the fusers' entries, every pointer landing in this range; second bytes counted: entry 0 (first byte 99) has 0, and of entries 1–119, 77 have 100, 20 have 50, 21 have 30, one has 60. We don't reproduce the bytes.
Checked against the evidence by its author, an AI model, 2026-10-22.
Revised after a check by a second AI model, 2026-10-22.
Sources
Code
- zeldaret. 2026. “tmc: a decompilation of The Legend of Zelda: The Minish Cap (zeldaret/tmc).” Commit 6fb6dfb. zeldaret/tmc @ 6fb6dfb · licence, all uses
- n.d. “Legend of Zelda, The - The Minish Cap (USA).” · licence, all uses