diff --git a/include/save.h b/include/save.h index 62d3a87e..f63a2976 100644 --- a/include/save.h +++ b/include/save.h @@ -51,7 +51,9 @@ typedef struct { /*0x086*/ u8 filler86[0x2]; /*0x088*/ PlayerRoomStatus saved_status; /**< Player room status. */ /*0x0A8*/ Stats stats; /**< Player stats. */ - /*0x0D0*/ u8 fillerD0[0x48]; + /*0x0D0*/ u8 fillerD0[0x46]; + /*0x116*/ u8 didAllFusions; + /*0x117*/ u8 unk117; /*0x118*/ u8 unk118[0x13]; /*0x12B*/ u8 unk12B[0x16]; /*0x141*/ u8 unk141[128]; diff --git a/src/code_0805436C.c b/src/code_0805436C.c index 1e6a0243..4b8473bb 100644 --- a/src/code_0805436C.c +++ b/src/code_0805436C.c @@ -226,6 +226,7 @@ u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) { ptr3 = &gUnk_0800143C[r1]; #endif } + // vector addition, s0 = ptr4 + ptr2 + ptr3 sub_08000F14(s0.a, ptr4->a, ptr2->a, ptr3->a); if (gSave.stats.health <= 8) { s0.s.hearts += 5; @@ -242,12 +243,16 @@ u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) { ptr2 = &gUnk_08001A1C[0]; r0 = gSave.stats.hasAllFigurines; ptr3 = ptr2; + // don't drop shells anymore if (r0 != 0) { ptr2++; } - if (gSave.fillerD0[0x46] != 0) { + // don't drop kinstones anymore + if (gSave.didAllFusions != 0) { ptr3 += 2; } + // vector addition, s0 = s0 + ptr2 + ptr3 + // returns sum over s0 r4 = sub_08000F2C(s0.a, s0.a, ptr2->a, ptr3->a); r2 = Random(); r5 = (r2 >> 0x18); @@ -268,7 +273,7 @@ u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) { } } } - return 0; + return ITEM_NONE; } u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter) { diff --git a/src/droptables.c b/src/droptables.c index 3ca5ae6e..c381618d 100644 --- a/src/droptables.c +++ b/src/droptables.c @@ -1067,6 +1067,7 @@ const Droptable gUnk_0800191C[] = { } }, }; +// special treatment for shells and kinstones after finishing figurines/fusions const Droptable gUnk_08001A1C[] = { // nop { {