diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/fossil_specials.c | 432 |
1 files changed, 58 insertions, 374 deletions
diff --git a/src/fossil_specials.c b/src/fossil_specials.c index 432ea5246..3ff2767c7 100644 --- a/src/fossil_specials.c +++ b/src/fossil_specials.c @@ -684,62 +684,69 @@ void sub_81BED50(u8 taskId) } #endif // NONMATCHING -#ifdef NONMATCHING void sub_81BF028(u8 taskId) { - u8 spriteId, zero; - u16 count, rand1, rand2, temp, switch_val; - u16 count2; - u32 count3; - + u16 i; + u16 j; u8 *buffer; - struct SpriteTemplate fossilTemplate; -; - switch_val = gTasks[taskId].data[0] - 1; - switch(switch_val) + + switch(gTasks[taskId].data[0]) { - case 0: + case 1: gUnknown_0203CF0C = (struct Struct203CF0C *)AllocZeroed(0x14); - gUnknown_0203CF0C->frameImageTiles = (u8 *)AllocZeroed(ROOT_FOSSIL_GFX_TILE_LENGTH); - gUnknown_0203CF0C->frameImage = (struct DynamicSpriteFrameImage *)AllocZeroed(0x8); - gUnknown_0203CF0C->unkC = (u16 *)AllocZeroed(ROOT_FOSSIL_GFX_PALETTE_LENGTH << 1); + gUnknown_0203CF0C->frameImageTiles = (u8 *)AllocZeroed(0x80); + gUnknown_0203CF0C->frameImage = (struct DynamicSpriteFrameImage *) AllocZeroed(0x8); + gUnknown_0203CF0C->unkC = (u16 *)AllocZeroed(0x200); gUnknown_0203CF0C->unk10 = 0; break; - case 1: - buffer = gUnknown_0203CF0C->frameImageTiles; - for(count = 0; count <= (ROOT_FOSSIL_GFX_TILE_LENGTH - 1); count++, buffer++) - *buffer = gRootFossil_Gfx[count]; - break; case 2: - gUnknown_0203CF0C->frameImage->data = gUnknown_0203CF0C->frameImageTiles; - gUnknown_0203CF0C->frameImage->size = ROOT_FOSSIL_GFX_TILE_LENGTH; + { + buffer = gUnknown_0203CF0C->frameImageTiles; + for(i = 0; i < 0x80; i++, buffer++) + *buffer = gRootFossil_Gfx[i]; + } break; case 3: - fossilTemplate = gUnknown_08617E00; - fossilTemplate.images = (struct SpriteFrameImage *)(gUnknown_0203CF0C->frameImage); - - spriteId = CreateSprite(&fossilTemplate, 128, -10, 1); - gUnknown_0203CF0C->spriteId = spriteId; - zero = 0; - gSprites[gUnknown_0203CF0C->spriteId].centerToCornerVecX = zero; - gSprites[gUnknown_0203CF0C->spriteId].data[0] = gSprites[gUnknown_0203CF0C->spriteId].pos1.x; - gSprites[gUnknown_0203CF0C->spriteId].data[1] = 1; - case 4: - for(count = 0; count <= (ROOT_FOSSIL_GFX_PALETTE_LENGTH -1); count++) - gUnknown_0203CF0C->unkC[count] = count; + gUnknown_0203CF0C->frameImage->data = gUnknown_0203CF0C->frameImageTiles; + gUnknown_0203CF0C->frameImage->size = 0x80; break; - case 5: - for(count = 0; count <= ((ROOT_FOSSIL_GFX_PALETTE_LENGTH <<1) -1); count++) + case 4: { - rand1 = Random() & 0xFF; - rand2 = Random() & 0xFF; - temp = gUnknown_0203CF0C->unkC[rand2]; - gUnknown_0203CF0C->unkC[rand2] = gUnknown_0203CF0C->unkC[rand1]; - gUnknown_0203CF0C->unkC[rand1] = temp; + u8 spriteId, zero; + struct SpriteTemplate fossilTemplate; + + fossilTemplate = gUnknown_08617E00; + fossilTemplate.images = (struct SpriteFrameImage *)(gUnknown_0203CF0C->frameImage); + spriteId = CreateSprite(&fossilTemplate, 128, -16, 1); + gUnknown_0203CF0C->spriteId = spriteId; + zero = 0; + gSprites[gUnknown_0203CF0C->spriteId].centerToCornerVecX = zero; + gSprites[gUnknown_0203CF0C->spriteId].data[0] = gSprites[gUnknown_0203CF0C->spriteId].pos1.x; + gSprites[gUnknown_0203CF0C->spriteId].data[1] = 1; } - gSprites[gUnknown_0203CF0C->spriteId].callback = sub_81BF248; + case 5: + for(i = 0; i < 0x100; i++) + gUnknown_0203CF0C->unkC[i] = i; break; case 6: + { + u16 rand1, rand2, temp; + + j = 0x1FF; + for(i = 0; i <= j; i++) + { + + rand1 = Random() % 0x100; + rand2 = Random() % 0x100; + j = 0x1FF; + temp = gUnknown_0203CF0C->unkC[rand2]; + gUnknown_0203CF0C->unkC[rand2] = gUnknown_0203CF0C->unkC[rand1]; + gUnknown_0203CF0C->unkC[rand1] = temp; + } + gSprites[gUnknown_0203CF0C->spriteId].callback = sub_81BF248; + break; + } + case 7: if(gSprites[gUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy) return; DestroySprite(&gSprites[gUnknown_0203CF0C->spriteId]); @@ -752,353 +759,30 @@ void sub_81BF028(u8 taskId) Free(gUnknown_0203CF0C); gUnknown_0203CF0C = NULL; break; - case 7: + case 8: EnableBothScriptContexts(); } - gTasks[taskId].data[0]++; + ++gTasks[taskId].data[0]; } -#else -ASM_DIRECT -void sub_81BF028(u8 taskId) -{ - asm("\n\ - .syntax unified\n\ - sub_81BF028: @ 81BF028\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - sub sp, 0x18\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - ldr r1, =gTasks\n\ - lsls r0, r7, 2\n\ - adds r0, r7\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x8]\n\ - subs r0, 0x1\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x7\n\ - bls _081BF04C\n\ - b _081BF228\n\ - _081BF04C:\n\ - lsls r0, 2\n\ - ldr r1, =_081BF060\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .pool\n\ - .align 2, 0\n\ - _081BF060:\n\ - .4byte _081BF080\n\ - .4byte _081BF0B4\n\ - .4byte _081BF0DC\n\ - .4byte _081BF0F0\n\ - .4byte _081BF148\n\ - .4byte _081BF170\n\ - .4byte _081BF1CC\n\ - .4byte _081BF224\n\ - _081BF080:\n\ - ldr r4, =gUnknown_0203CF0C\n\ - movs r0, 0x14\n\ - bl AllocZeroed\n\ - str r0, [r4]\n\ - movs r0, 0x80\n\ - bl AllocZeroed\n\ - ldr r1, [r4]\n\ - str r0, [r1]\n\ - movs r0, 0x8\n\ - bl AllocZeroed\n\ - ldr r1, [r4]\n\ - str r0, [r1, 0x4]\n\ - movs r0, 0x80\n\ - lsls r0, 2\n\ - bl AllocZeroed\n\ - ldr r1, [r4]\n\ - str r0, [r1, 0xC]\n\ - movs r0, 0\n\ - strh r0, [r1, 0x10]\n\ - b _081BF228\n\ - .pool\n\ - _081BF0B4:\n\ - ldr r0, =gUnknown_0203CF0C\n\ - ldr r0, [r0]\n\ - ldr r1, [r0]\n\ - movs r5, 0\n\ - ldr r2, =gRootFossil_Gfx\n\ - _081BF0BE:\n\ - adds r0, r5, r2\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - adds r1, 0x1\n\ - cmp r5, 0x7F\n\ - bls _081BF0BE\n\ - b _081BF228\n\ - .pool\n\ - _081BF0DC:\n\ - ldr r0, =gUnknown_0203CF0C\n\ - ldr r0, [r0]\n\ - ldr r1, [r0, 0x4]\n\ - ldr r0, [r0]\n\ - str r0, [r1]\n\ - movs r0, 0x80\n\ - strh r0, [r1, 0x4]\n\ - b _081BF228\n\ - .pool\n\ - _081BF0F0:\n\ - mov r1, sp\n\ - ldr r0, =gUnknown_08617E00\n\ - ldm r0!, {r2-r4}\n\ - stm r1!, {r2-r4}\n\ - ldm r0!, {r2-r4}\n\ - stm r1!, {r2-r4}\n\ - ldr r4, =gUnknown_0203CF0C\n\ - ldr r0, [r4]\n\ - ldr r0, [r0, 0x4]\n\ - str r0, [sp, 0xC]\n\ - movs r2, 0x10\n\ - negs r2, r2\n\ - mov r0, sp\n\ - movs r1, 0x80\n\ - movs r3, 0x1\n\ - bl CreateSprite\n\ - ldr r1, [r4]\n\ - movs r3, 0\n\ - strb r0, [r1, 0x8]\n\ - ldr r2, =gSprites\n\ - ldr r0, [r4]\n\ - ldrb r1, [r0, 0x8]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - adds r0, 0x28\n\ - strb r3, [r0]\n\ - ldr r3, [r4]\n\ - ldrb r1, [r3, 0x8]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldrh r1, [r0, 0x20]\n\ - strh r1, [r0, 0x2E]\n\ - ldrb r1, [r3, 0x8]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - movs r1, 0x1\n\ - strh r1, [r0, 0x30]\n\ - _081BF148:\n\ - movs r5, 0\n\ - ldr r2, =gUnknown_0203CF0C\n\ - _081BF14C:\n\ - ldr r0, [r2]\n\ - ldr r1, [r0, 0xC]\n\ - lsls r0, r5, 1\n\ - adds r0, r1\n\ - strh r5, [r0]\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, 0xFF\n\ - bls _081BF14C\n\ - b _081BF228\n\ - .pool\n\ - _081BF170:\n\ - movs r5, 0\n\ - movs r6, 0xFF\n\ - ldr r0, =0x000001ff\n\ - mov r8, r0\n\ - _081BF178:\n\ - bl Random\n\ - adds r4, r6, 0\n\ - ands r4, r0\n\ - bl Random\n\ - adds r1, r6, 0\n\ - ands r1, r0\n\ - ldr r0, =gUnknown_0203CF0C\n\ - ldr r3, [r0]\n\ - ldr r0, [r3, 0xC]\n\ - lsls r1, 1\n\ - adds r1, r0\n\ - ldrh r2, [r1]\n\ - lsls r4, 1\n\ - adds r4, r0\n\ - ldrh r0, [r4]\n\ - strh r0, [r1]\n\ - strh r2, [r4]\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, r8\n\ - bls _081BF178\n\ - ldr r2, =gSprites\n\ - ldrb r1, [r3, 0x8]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r2, 0x1C\n\ - adds r0, r2\n\ - ldr r1, =sub_81BF248\n\ - str r1, [r0]\n\ - b _081BF228\n\ - .pool\n\ - _081BF1CC:\n\ - ldr r3, =gSprites\n\ - ldr r5, =gUnknown_0203CF0C\n\ - ldr r0, [r5]\n\ - ldrb r1, [r0, 0x8]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r2, r0, 2\n\ - adds r0, r3, 0\n\ - adds r0, 0x1C\n\ - adds r0, r2, r0\n\ - ldr r1, [r0]\n\ - ldr r0, =SpriteCallbackDummy\n\ - cmp r1, r0\n\ - bne _081BF238\n\ - adds r0, r2, r3\n\ - bl DestroySprite\n\ - ldr r0, [r5]\n\ - ldr r0, [r0, 0xC]\n\ - bl Free\n\ - ldr r0, [r5]\n\ - movs r4, 0\n\ - str r4, [r0, 0xC]\n\ - ldr r0, [r0, 0x4]\n\ - bl Free\n\ - ldr r0, [r5]\n\ - str r4, [r0, 0x4]\n\ - ldr r0, [r0]\n\ - bl Free\n\ - ldr r0, [r5]\n\ - str r4, [r0]\n\ - bl Free\n\ - str r4, [r5]\n\ - b _081BF228\n\ - .pool\n\ - _081BF224:\n\ - bl EnableBothScriptContexts\n\ - _081BF228:\n\ - ldr r0, =gTasks\n\ - lsls r1, r7, 2\n\ - adds r1, r7\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldrh r0, [r1, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r1, 0x8]\n\ - _081BF238:\n\ - add sp, 0x18\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided"); -} -#endif // NONMATCHING -#ifdef NONMATCHING void sub_81BF248(struct Sprite *sprite) { - - u16 x; - u8 *buffer; - u8 count; - - if(gUnknown_0203CF0C->unk10 > 0xFF) + if (gUnknown_0203CF0C->unk10 > 0xFF) { sprite->callback = SpriteCallbackDummy; - return; } - if(sprite->pos1.y > 0x5F) + else if (sprite->pos1.y >= 0x60) { - count = 0; - do + u8 i; + for (i = 0; i < 2; i++) { - buffer = gUnknown_0203CF0C->frameImageTiles; - x = gUnknown_0203CF0C->unk10; - gUnknown_0203CF0C->unk10 = x+1; - sub_81BF2B8(buffer, gUnknown_0203CF0C->unkC[x], 0, 0x10, 0); - count++; + sub_81BF2B8(gUnknown_0203CF0C->frameImageTiles, gUnknown_0203CF0C->unkC[gUnknown_0203CF0C->unk10++], 0, 16, 0); } - while(count <= 1); - - StartSpriteAnim(sprite, 0x0); + StartSpriteAnim(sprite, 0); } else + { sprite->pos1.y++; + } } - -#else -ASM_DIRECT -void sub_81BF248(struct Sprite *sprite) -{ - asm("\n\ - .syntax unified\n\ - push {r4,r5,lr}\n\ - sub sp, 0x4\n\ - adds r5, r0, 0\n\ - ldr r0, =gUnknown_0203CF0C\n\ - ldr r0, [r0]\n\ - ldrh r0, [r0, 0x10]\n\ - cmp r0, 0xFF\n\ - bls _081BF268\n\ - ldr r0, =SpriteCallbackDummy\n\ - str r0, [r5, 0x1C]\n\ - b _081BF2B0\n\ - .pool\n\ - _081BF268:\n\ - ldrh r1, [r5, 0x22]\n\ - movs r2, 0x22\n\ - ldrsh r0, [r5, r2]\n\ - cmp r0, 0x5F\n\ - ble _081BF2AC\n\ - movs r4, 0\n\ - _081BF274:\n\ - ldr r0, =gUnknown_0203CF0C\n\ - ldr r3, [r0]\n\ - ldr r0, [r3]\n\ - ldrh r1, [r3, 0x10]\n\ - adds r2, r1, 0x1\n\ - strh r2, [r3, 0x10]\n\ - lsls r1, 16\n\ - ldr r2, [r3, 0xC]\n\ - lsrs r1, 15\n\ - adds r1, r2\n\ - ldrh r1, [r1]\n\ - movs r2, 0\n\ - str r2, [sp]\n\ - movs r3, 0x10\n\ - bl sub_81BF2B8\n\ - adds r0, r4, 0x1\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0x1\n\ - bls _081BF274\n\ - adds r0, r5, 0\n\ - movs r1, 0\n\ - bl StartSpriteAnim\n\ - b _081BF2B0\n\ - .pool\n\ - _081BF2AC:\n\ - adds r0, r1, 0x1\n\ - strh r0, [r5, 0x22]\n\ - _081BF2B0:\n\ - add sp, 0x4\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided"); -} -#endif // NONMATCHING |