mirror of
https://github.com/pret/pokeruby.git
synced 2026-10-08 17:51:12 -04:00
shadow_minimize.c: match CreateMinimizeSprite
This is the same as the pokeemerald function, except that matrixNum is signed. Also bring name consistency in shadow_minimize.c with pokeemerald, too.
This commit is contained in:
@@ -8,14 +8,14 @@ extern s16 gBattleAnimArgs[];
|
||||
extern u8 gBattleAnimAttacker;
|
||||
extern u8 gBattleAnimTarget;
|
||||
|
||||
static void sub_80D04E0(u8 taskId);
|
||||
void sub_80D0614(struct Task* task, u8 taskId);
|
||||
void sub_80D0704(struct Sprite* sprite);
|
||||
static void AnimTask_Minimize_Step(u8 taskId);
|
||||
void CreateMinimizeSprite(struct Task* task, u8 taskId);
|
||||
void ClonedMinimizeSprite_Step(struct Sprite* sprite);
|
||||
|
||||
// shadow_minimize (the minimizing-like shadow over the Pokemon effect.)
|
||||
// Used in Minimize.
|
||||
|
||||
void sub_80D0488(u8 taskId)
|
||||
void AnimTask_Minimize(u8 taskId)
|
||||
{
|
||||
struct Task* task = &gTasks[taskId];
|
||||
u8 spriteId = GetAnimBattlerSpriteId(0);
|
||||
@@ -28,17 +28,17 @@ void sub_80D0488(u8 taskId)
|
||||
task->data[5] = 0;
|
||||
task->data[6] = 0;
|
||||
task->data[7] = GetBattlerSubpriority(gBattleAnimAttacker);
|
||||
task->func = sub_80D04E0;
|
||||
task->func = AnimTask_Minimize_Step;
|
||||
}
|
||||
|
||||
void sub_80D04E0(u8 taskId)
|
||||
void AnimTask_Minimize_Step(u8 taskId)
|
||||
{
|
||||
struct Task* task = &gTasks[taskId];
|
||||
switch (task->data[1])
|
||||
{
|
||||
case 0:
|
||||
if (task->data[2] == 0 || task->data[2] == 3 || task->data[2] == 6)
|
||||
sub_80D0614(task, taskId);
|
||||
CreateMinimizeSprite(task, taskId);
|
||||
task->data[2]++;
|
||||
task->data[4] += 0x28;
|
||||
obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0);
|
||||
@@ -97,164 +97,40 @@ void sub_80D04E0(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
void sub_80D0614(struct Task* task, u8 taskId)
|
||||
void CreateMinimizeSprite(struct Task* task, u8 taskId)
|
||||
{
|
||||
s16 r8 = duplicate_obj_of_side_rel2move_in_transparent_mode(0);
|
||||
if (r8 >= 0)
|
||||
s16 matrixNum; // u16 in Emerald
|
||||
s16 spriteId = duplicate_obj_of_side_rel2move_in_transparent_mode(0);
|
||||
|
||||
if (spriteId >= 0)
|
||||
{
|
||||
u8 r6 = AllocOamMatrix();
|
||||
if (r6 == 0xFF)
|
||||
matrixNum = AllocOamMatrix();
|
||||
if (matrixNum == 0xFF)
|
||||
{
|
||||
obj_delete_but_dont_free_vram(&gSprites[r8]);
|
||||
obj_delete_but_dont_free_vram(&gSprites[spriteId]);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
gSprites[r8].oam.objMode = ST_OAM_OBJ_BLEND;
|
||||
gSprites[r8].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
|
||||
gSprites[r8].affineAnimPaused = TRUE;
|
||||
r6 &= 0x1f;
|
||||
|
||||
gSprites[r8].oam.matrixNum = r6; // need to inhibit optimizing out the mov r0, 0x3f / neg r0, r0
|
||||
// current code does subs r0, #94 (0x1f - 94 = 0xc1, !0x3f = 0xc1)
|
||||
gSprites[r8].subpriority = task->data[7] - task->data[3];
|
||||
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
|
||||
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
|
||||
gSprites[spriteId].affineAnimPaused = TRUE;
|
||||
gSprites[spriteId].oam.matrixNum = matrixNum;
|
||||
gSprites[spriteId].subpriority = task->data[7] - task->data[3];
|
||||
task->data[3]++;
|
||||
task->data[6]++;
|
||||
gSprites[r8].data[0] = 16;
|
||||
gSprites[r8].data[1] = taskId;
|
||||
gSprites[r8].data[2] = 6;
|
||||
gSprites[r8].callback = sub_80D0704;
|
||||
obj_id_set_rotscale(r8, task->data[4], task->data[4], 0);
|
||||
gSprites[r8].oam.affineMode = 1;
|
||||
CalcCenterToCornerVec(&gSprites[r8], gSprites[r8].oam.shape, gSprites[r8].oam.size, gSprites[r8].oam.affineMode);
|
||||
gSprites[spriteId].data[0] = 16;
|
||||
gSprites[spriteId].data[1] = taskId;
|
||||
gSprites[spriteId].data[2] = 6;
|
||||
gSprites[spriteId].callback = ClonedMinimizeSprite_Step;
|
||||
obj_id_set_rotscale(spriteId, task->data[4], task->data[4], 0);
|
||||
gSprites[spriteId].oam.affineMode = 1;
|
||||
CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode);
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void sub_80D0614(struct Task* task, u8 taskId)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r9\n\
|
||||
mov r6, r8\n\
|
||||
push {r6,r7}\n\
|
||||
adds r7, r0, 0 @r7 is task\n\
|
||||
lsls r1, 24\n\
|
||||
lsrs r1, 24\n\
|
||||
mov r9, r1 @r9 is taskId\n\
|
||||
movs r0, 0\n\
|
||||
bl duplicate_obj_of_side_rel2move_in_transparent_mode\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
mov r8, r0\n\
|
||||
lsls r0, 16\n\
|
||||
asrs r4, r0, 16\n\
|
||||
cmp r4, 0\n\
|
||||
blt _080D06EE @jump to bottom\n\
|
||||
bl AllocOamMatrix\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r6, r0, 24\n\
|
||||
cmp r6, 0xFF\n\
|
||||
bne _080D0658\n\
|
||||
lsls r0, r4, 4\n\
|
||||
adds r0, r4\n\
|
||||
lsls r0, 2\n\
|
||||
ldr r1, _080D0654 @ =gSprites\n\
|
||||
adds r0, r1\n\
|
||||
bl obj_delete_but_dont_free_vram\n\
|
||||
b _080D06EE @ jump to bottom\n\
|
||||
.align 2, 0\n\
|
||||
_080D0654: .4byte gSprites\n\
|
||||
_080D0658:\n\
|
||||
ldr r5, _080D06FC @ =gSprites\n\
|
||||
lsls r3, r4, 4\n\
|
||||
adds r3, r4\n\
|
||||
lsls r3, 2\n\
|
||||
adds r4, r3, r5\n\
|
||||
ldrb r1, [r4, 0x1]\n\
|
||||
movs r0, 0xD\n\
|
||||
negs r0, r0\n\
|
||||
ands r0, r1\n\
|
||||
movs r1, 0x4\n\
|
||||
orrs r0, r1\n\
|
||||
movs r1, 0x3\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r4, 0x1]\n\
|
||||
adds r2, r4, 0\n\
|
||||
adds r2, 0x2C\n\
|
||||
ldrb r0, [r2]\n\
|
||||
movs r1, 0x80\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r2]\n\
|
||||
movs r0, 0x1F\n\
|
||||
ands r6, r0\n\
|
||||
lsls r2, r6, 1\n\
|
||||
ldrb r1, [r4, 0x3]\n\
|
||||
movs r0, 0x3F\n\
|
||||
negs r0, r0\n\
|
||||
ands r0, r1\n\
|
||||
orrs r0, r2\n\
|
||||
strb r0, [r4, 0x3]\n\
|
||||
ldrb r0, [r7, 0x16]\n\
|
||||
ldrb r1, [r7, 0xE]\n\
|
||||
subs r0, r1\n\
|
||||
adds r1, r4, 0\n\
|
||||
adds r1, 0x43\n\
|
||||
strb r0, [r1]\n\
|
||||
ldrh r0, [r7, 0xE]\n\
|
||||
adds r0, 0x1\n\
|
||||
strh r0, [r7, 0xE]\n\
|
||||
ldrh r0, [r7, 0x14]\n\
|
||||
adds r0, 0x1\n\
|
||||
strh r0, [r7, 0x14]\n\
|
||||
movs r0, 0x10\n\
|
||||
strh r0, [r4, 0x2E]\n\
|
||||
mov r0, r9\n\
|
||||
strh r0, [r4, 0x30]\n\
|
||||
movs r0, 0x6\n\
|
||||
strh r0, [r4, 0x32]\n\
|
||||
adds r5, 0x1C\n\
|
||||
adds r3, r5\n\
|
||||
ldr r0, _080D0700 @ =sub_80D0704\n\
|
||||
str r0, [r3]\n\
|
||||
mov r1, r8 @duplicate_obj_of_side_rel2move_in_transparent_mode(0)\n\
|
||||
lsls r0, r1, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
movs r1, 0x10\n\
|
||||
ldrsh r2, [r7, r1]\n\
|
||||
adds r1, r2, 0\n\
|
||||
movs r3, 0\n\
|
||||
bl obj_id_set_rotscale\n\
|
||||
ldrb r0, [r4, 0x1]\n\
|
||||
movs r3, 0x4\n\
|
||||
negs r3, r3\n\
|
||||
ands r3, r0\n\
|
||||
movs r0, 0x1\n\
|
||||
orrs r3, r0\n\
|
||||
strb r3, [r4, 0x1]\n\
|
||||
lsrs r1, r3, 6\n\
|
||||
ldrb r2, [r4, 0x3]\n\
|
||||
lsrs r2, 6\n\
|
||||
lsls r3, 30\n\
|
||||
lsrs r3, 30\n\
|
||||
adds r0, r4, 0\n\
|
||||
bl CalcCenterToCornerVec\n\
|
||||
_080D06EE:\n\
|
||||
pop {r3,r4}\n\
|
||||
mov r8, r3\n\
|
||||
mov r9, r4\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.align 2, 0\n\
|
||||
_080D06FC: .4byte gSprites\n\
|
||||
_080D0700: .4byte sub_80D0704\n\
|
||||
.syntax divided\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
void sub_80D0704(struct Sprite* sprite)
|
||||
void ClonedMinimizeSprite_Step(struct Sprite* sprite)
|
||||
{
|
||||
if (--sprite->data[0] == 0)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user