diff options
author | PikalaxALT <pikalax1@gmail.com> | 2017-06-09 11:07:49 -0400 |
---|---|---|
committer | PikalaxALT <pikalax1@gmail.com> | 2017-06-09 11:07:49 -0400 |
commit | 14e1400cfdf8cddc4839164fdcc9f5506764a455 (patch) | |
tree | b4148393db6f82533593eea8664585f379456a92 | |
parent | 77c679492c15a5b30e4338d2366c2958d7cff4d9 (diff) |
Field Effect first half of lavaridge gym fall down
-rwxr-xr-x | asm/field_effect.s | 341 | ||||
-rwxr-xr-x | src/field_effect.c | 182 |
2 files changed, 118 insertions, 405 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s index 24300044f..74ea6190d 100755 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -6,347 +6,6 @@ .text - thumb_func_start sub_80871B8 -sub_80871B8: @ 80871B8 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r0, _080871CC @ =sub_80871D0 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080871CC: .4byte sub_80871D0 - thumb_func_end sub_80871B8 - - thumb_func_start sub_80871D0 -sub_80871D0: @ 80871D0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r6, _08087218 @ =gUnknown_0839F33C - ldr r2, _0808721C @ =gTasks - ldr r5, _08087220 @ =gPlayerAvatar - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080871E4: - movs r0, 0x8 - ldrsh r3, [r4, r0] - lsls r3, 2 - adds r3, r6 - ldrb r0, [r5, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _08087224 @ =gMapObjects - adds r1, r0 - ldrb r0, [r5, 0x4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _08087228 @ =gSprites - adds r2, r0 - ldr r3, [r3] - adds r0, r4, 0 - bl _call_via_r3 - lsls r0, 24 - cmp r0, 0 - bne _080871E4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08087218: .4byte gUnknown_0839F33C -_0808721C: .4byte gTasks -_08087220: .4byte gPlayerAvatar -_08087224: .4byte gMapObjects -_08087228: .4byte gSprites - thumb_func_end sub_80871D0 - - thumb_func_start sub_808722C -sub_808722C: @ 808722C - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl FreezeMapObjects - bl CameraObjectReset2 - movs r0, 0 - bl SetCameraPanningCallback - ldr r0, _08087260 @ =gPlayerAvatar - movs r2, 0x1 - strb r2, [r0, 0x6] - ldrb r0, [r5, 0x3] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r5, 0x3] - strh r2, [r4, 0xA] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08087260: .4byte gPlayerAvatar - thumb_func_end sub_808722C - - thumb_func_start sub_8087264 -sub_8087264: @ 8087264 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0 - bl SetCameraPanning - ldrh r0, [r4, 0xA] - negs r0, r0 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7 - ble _08087290 - movs r0, 0 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08087290: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8087264 - - thumb_func_start sub_8087298 -sub_8087298: @ 8087298 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0 - strh r0, [r2, 0x26] - movs r0, 0x1 - strh r0, [r4, 0xE] - ldr r3, _080872E0 @ =gUnknown_0202FF84 - movs r5, 0x10 - ldrsh r0, [r1, r5] - str r0, [r3] - movs r5, 0x12 - ldrsh r0, [r1, r5] - str r0, [r3, 0x4] - adds r0, r2, 0 - adds r0, 0x43 - ldrb r0, [r0] - subs r0, 0x1 - str r0, [r3, 0x8] - ldrb r0, [r2, 0x5] - lsls r0, 28 - lsrs r0, 30 - str r0, [r3, 0xC] - movs r0, 0x32 - bl FieldEffectStart - movs r0, 0xB2 - bl PlaySE - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080872E0: .4byte gUnknown_0202FF84 - thumb_func_end sub_8087298 - - thumb_func_start sub_80872E4 -sub_80872E4: @ 80872E4 - push {r4-r7,lr} - adds r4, r0, 0 - adds r6, r1, 0 - adds r5, r2, 0 - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0 - bl SetCameraPanning - ldrh r0, [r4, 0xA] - negs r2, r0 - strh r2, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r1, r0, 0x1 - strh r1, [r4, 0xC] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0x11 - bgt _0808731E - movs r0, 0x1 - ands r1, r0 - cmp r1, 0 - bne _08087330 - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x3 - bgt _08087330 - lsls r0, r2, 1 - b _0808732E -_0808731E: - movs r0, 0x4 - ands r1, r0 - cmp r1, 0 - bne _08087330 - lsls r0, r2, 16 - cmp r0, 0 - ble _08087330 - asrs r0, 17 -_0808732E: - strh r0, [r4, 0xA] -_08087330: - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x6 - ble _0808737C - adds r0, r5, 0 - adds r0, 0x29 - movs r1, 0 - ldrsb r1, [r0, r1] - lsls r2, r1, 17 - negs r2, r2 - movs r7, 0x26 - ldrsh r3, [r5, r7] - movs r7, 0x22 - ldrsh r0, [r5, r7] - adds r0, r1 - ldr r1, _08087374 @ =gSpriteCoordOffsetY - movs r7, 0 - ldrsh r1, [r1, r7] - adds r0, r1 - asrs r2, 16 - adds r0, r2 - cmn r3, r0 - ble _08087378 - ldrh r0, [r5, 0x26] - ldrh r1, [r4, 0xE] - subs r0, r1 - strh r0, [r5, 0x26] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0x7 - bgt _0808737C - adds r0, r1, 0x1 - strh r0, [r4, 0xE] - b _0808737C - .align 2, 0 -_08087374: .4byte gSpriteCoordOffsetY -_08087378: - movs r0, 0x1 - strh r0, [r4, 0x10] -_0808737C: - ldrh r2, [r4, 0x12] - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080873BA - movs r7, 0x26 - ldrsh r1, [r5, r7] - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - bge _080873BA - adds r0, r2, 0x1 - strh r0, [r4, 0x12] - ldrb r0, [r6, 0x3] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r6, 0x3] - ldrb r1, [r5, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - orrs r0, r2 - strb r0, [r5, 0x5] - adds r2, r5, 0 - adds r2, 0x42 - ldrb r1, [r2] - movs r0, 0x3F - ands r0, r1 - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] -_080873BA: - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080873D0 - movs r7, 0x10 - ldrsh r0, [r4, r7] - cmp r0, 0 - beq _080873D0 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080873D0: - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80872E4 - - thumb_func_start sub_80873D8 -sub_80873D8: @ 80873D8 - push {r4,lr} - adds r4, r0, 0 - bl sub_8053FF8 - bl fade_8080918 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80873D8 - - thumb_func_start sub_80873F4 -sub_80873F4: @ 80873F4 - push {lr} - ldr r0, _08087434 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0808742C - bl sub_8054034 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808742C - bl warp_in - ldr r1, _08087438 @ =gUnknown_0300485C - ldr r0, _0808743C @ =mapldr_080851BC - str r0, [r1] - ldr r0, _08087440 @ =CB2_LoadMap - bl SetMainCallback2 - ldr r0, _08087444 @ =sub_80871D0 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0808742C: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08087434: .4byte gPaletteFade -_08087438: .4byte gUnknown_0300485C -_0808743C: .4byte mapldr_080851BC -_08087440: .4byte CB2_LoadMap -_08087444: .4byte sub_80871D0 - thumb_func_end sub_80873F4 - thumb_func_start mapldr_080851BC mapldr_080851BC: @ 8087448 push {lr} diff --git a/src/field_effect.c b/src/field_effect.c index af6f5a36a..320c61b29 100755 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -928,16 +928,13 @@ bool8 sub_8086854(struct Task *task) // gUnknown_0839F2CC[1] return FALSE; } -#ifdef NONMATCHING bool8 sub_8086870(struct Task *task) // gUnknown_0839F2CC[2] { struct Sprite *sprite; s16 centerToCornerVecY; - int ctcvy; sprite = &gSprites[gPlayerAvatar.spriteId]; - centerToCornerVecY = sprite->centerToCornerVecY; - ctcvy = -(centerToCornerVecY << 17); - sprite->pos2.y = -((sprite->pos1.y + centerToCornerVecY + gSpriteCoordOffsetY) + (ctcvy >> 16)); + centerToCornerVecY = -(sprite->centerToCornerVecY << 1); + sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY); task->data[1] = 1; task->data[2] = 0; gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 0; @@ -945,65 +942,6 @@ bool8 sub_8086870(struct Task *task) // gUnknown_0839F2CC[2] task->data[0]++; return FALSE; } -#else -__attribute__((naked)) -bool8 sub_8086870(struct Task *task) // gUnknown_0839F2CC[2] -{ - asm_unified("\tpush {r4-r6,lr}\n" - "\tadds r5, r0, 0\n" - "\tldr r6, _080868D4 @ =gPlayerAvatar\n" - "\tldrb r0, [r6, 0x4]\n" - "\tlsls r2, r0, 4\n" - "\tadds r2, r0\n" - "\tlsls r2, 2\n" - "\tldr r0, _080868D8 @ =gSprites\n" - "\tadds r2, r0\n" - "\tadds r0, r2, 0\n" - "\tadds r0, 0x29\n" - "\tmovs r4, 0\n" - "\tldrsb r4, [r0, r4] @ =gSprites[gPlayerAvatar.spriteId].centerToCornerVecY\n" - "\tlsls r0, r4, 17\n" - "\tnegs r0, r0\n" - "\tldrh r1, [r2, 0x22] @ =gSprites[gPlayerAvatar.spriteId].pos1.y\n" - "\tldr r3, _080868DC @ =gSpriteCoordOffsetY\n" - "\tadds r1, r4\n" - "\tldrh r3, [r3]\n" - "\tadds r1, r3\n" - "\tasrs r0, 16\n" - "\tadds r0, r1\n" - "\tnegs r0, r0\n" - "\tmovs r1, 0\n" - "\tstrh r0, [r2, 0x26]\n" - "\tmovs r0, 0x1\n" - "\tstrh r0, [r5, 0xA]\n" - "\tstrh r1, [r5, 0xC]\n" - "\tldr r2, _080868E0 @ =gMapObjects\n" - "\tldrb r0, [r6, 0x5]\n" - "\tlsls r1, r0, 3\n" - "\tadds r1, r0\n" - "\tlsls r1, 2\n" - "\tadds r1, r2\n" - "\tldrb r2, [r1, 0x1]\n" - "\tmovs r0, 0x21\n" - "\tnegs r0, r0\n" - "\tands r0, r2\n" - "\tstrb r0, [r1, 0x1]\n" - "\tmovs r0, 0x2B\n" - "\tbl PlaySE\n" - "\tldrh r0, [r5, 0x8]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r5, 0x8]\n" - "\tmovs r0, 0\n" - "\tpop {r4-r6}\n" - "\tpop {r1}\n" - "\tbx r1\n" - "\t.align 2, 0\n" - "_080868D4: .4byte gPlayerAvatar\n" - "_080868D8: .4byte gSprites\n" - "_080868DC: .4byte gSpriteCoordOffsetY\n" - "_080868E0: .4byte gMapObjects"); -} -#endif bool8 sub_80868E4(struct Task *task) { @@ -1465,3 +1403,119 @@ bool8 dive_3_unknown(struct Task *task) } return FALSE; } + +void sub_80871D0(u8); +extern const bool8 (*gUnknown_0839F33C[6])(struct Task *, struct MapObject *, struct Sprite *); +void mapldr_080851BC(void); + +void sub_80871B8(u8 priority) +{ + CreateTask(sub_80871D0, priority); +} + +void sub_80871D0(u8 taskId) +{ + while (gUnknown_0839F33C[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId])); +} + +bool8 sub_808722C(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + FreezeMapObjects(); + CameraObjectReset2(); + SetCameraPanningCallback(NULL); + gPlayerAvatar.unk6 = 1; + mapObject->mapobj_bit_26 = 1; + task->data[1] = 1; + task->data[0]++; + return TRUE; +} + +bool8 sub_8087264(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + SetCameraPanning(0, task->data[1]); + task->data[1] = -task->data[1]; + task->data[2]++; + if (task->data[2] > 7) + { + task->data[2] = 0; + task->data[0]++; + } + return FALSE; +} + +bool8 sub_8087298(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->pos2.y = 0; + task->data[3] = 1; + gUnknown_0202FF84[0] = mapObject->coords2.x; + gUnknown_0202FF84[1] = mapObject->coords2.y; + gUnknown_0202FF84[2] = sprite->subpriority - 1; + gUnknown_0202FF84[3] = sprite->oam.priority; + FieldEffectStart(FLDEFF_LAVARIDGE_GYM_WARP); + PlaySE(SE_W153); + task->data[0]++; + return TRUE; +} + +bool8 sub_80872E4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + s16 centerToCornerVecY; + SetCameraPanning(0, task->data[1]); + if (task->data[1] = -task->data[1], ++task->data[2] <= 17) + { + if (!(task->data[2] & 1) && (task->data[1] <= 3)) + { + task->data[1] <<= 1; + } + } else if (!(task->data[2] & 4) && (task->data[1] > 0)) + { + task->data[1] >>= 1; + } + if (task->data[2] > 6) + { + centerToCornerVecY = -(sprite->centerToCornerVecY << 1); + if (sprite->pos2.y > -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY)) + { + sprite->pos2.y -= task->data[3]; + if (task->data[3] <= 7) + { + task->data[3]++; + } + } else + { + task->data[4] = 1; + } + } + if (task->data[5] == 0 && sprite->pos2.y < -0x10) + { + task->data[5]++; + mapObject->mapobj_bit_26 = 1; + sprite->oam.priority = 1; + sprite->subspriteMode = 2; + } + if (task->data[1] == 0 && task->data[4] != 0) + { + task->data[0]++; + } + return FALSE; +} + +bool8 sub_80873D8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8053FF8(); + fade_8080918(); + task->data[0]++; + return FALSE; +} + +bool8 sub_80873F4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + if (!gPaletteFade.active && sub_8054034() == TRUE) + { + warp_in(); + gUnknown_0300485C = mapldr_080851BC; + SetMainCallback2(CB2_LoadMap); + DestroyTask(FindTaskIdByFunc(sub_80871D0)); + } + return FALSE; +} |