diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-06-07 21:14:40 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-06-07 21:14:40 -0400 |
commit | 3da6d1f0007a61e808a57bd33a5068a1a241bf5f (patch) | |
tree | 9f35c9520ffc1ad6803891aa943e9fddae55f8ca | |
parent | e4ccb588f4104e7b800d1a18927536617e0e284a (diff) |
okay this isn't fly, but wtf is it? whatever it is, it's finished
-rwxr-xr-x | asm/field_effect.s | 337 | ||||
-rwxr-xr-x | src/field_effect.c | 142 |
2 files changed, 136 insertions, 343 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s index cad14c42e..1b4fb59fc 100755 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -6,343 +6,6 @@ .text - thumb_func_start sub_8086C94 -sub_8086C94: @ 8086C94 - push {lr} - bl sub_8053E90 - bl pal_fill_for_map_transition - bl ScriptContext2_Enable - ldr r0, _08086CB4 @ =sub_8086CBC - movs r1, 0 - bl CreateTask - ldr r1, _08086CB8 @ =gUnknown_0300485C - movs r0, 0 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08086CB4: .4byte sub_8086CBC -_08086CB8: .4byte gUnknown_0300485C - thumb_func_end sub_8086C94 - - thumb_func_start sub_8086CBC -sub_8086CBC: @ 8086CBC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08086CEC @ =gTasks - adds r4, r1, r0 - ldr r5, _08086CF0 @ =gUnknown_0839F300 -_08086CCE: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _08086CCE - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08086CEC: .4byte gTasks -_08086CF0: .4byte gUnknown_0839F300 - thumb_func_end sub_8086CBC - - thumb_func_start sub_8086CF4 -sub_8086CF4: @ 8086CF4 - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - bl CameraObjectReset2 - ldr r0, _08086D54 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08086D58 @ =gMapObjects - adds r4, r0 - movs r0, 0x4 - bl GetFaceDirectionAnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl FieldObjectSetSpecialAnim - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl PlayerGetDestCoords - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r1, r0, 24 - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0x10 - strh r0, [r5, 0xA] - cmp r1, 0x6B - bne _08086D5C - movs r1, 0x1 - movs r0, 0x3 - strh r0, [r5, 0x8] - b _08086D5E - .align 2, 0 -_08086D54: .4byte gPlayerAvatar -_08086D58: .4byte gMapObjects -_08086D5C: - movs r1, 0 -_08086D5E: - adds r0, r1, 0 - bl sub_80B4824 - movs r0, 0x1 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8086CF4 - - thumb_func_start sub_8086D70 -sub_8086D70: @ 8086D70 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _08086DA8 @ =gPlayerAvatar - ldrb r0, [r0, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08086DAC @ =gSprites - adds r4, r0 - movs r0, 0xA - ldrsh r1, [r5, r0] - movs r0, 0x84 - bl Cos - strh r0, [r4, 0x24] - movs r0, 0xA - ldrsh r1, [r5, r0] - movs r0, 0x94 - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08086DA8: .4byte gPlayerAvatar -_08086DAC: .4byte gSprites - thumb_func_end sub_8086D70 - - thumb_func_start sub_8086DB0 -sub_8086DB0: @ 8086DB0 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r0, _08086E08 @ =gPlayerAvatar - ldrb r1, [r0, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086E0C @ =gSprites - adds r5, r0, r1 - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0x84 - bl Cos - strh r0, [r5, 0x24] - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0x94 - bl Sin - strh r0, [r5, 0x26] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08086DEE - ldrh r0, [r4, 0xA] - subs r0, 0x1 - strh r0, [r4, 0xA] -_08086DEE: - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08086DFE - strh r0, [r5, 0x24] - strh r0, [r5, 0x26] - movs r0, 0x5 - strh r0, [r4, 0x8] -_08086DFE: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08086E08: .4byte gPlayerAvatar -_08086E0C: .4byte gSprites - thumb_func_end sub_8086DB0 - - thumb_func_start sub_8086E10 -sub_8086E10: @ 8086E10 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _08086E48 @ =gPlayerAvatar - ldrb r0, [r0, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08086E4C @ =gSprites - adds r4, r0 - movs r0, 0xA - ldrsh r1, [r5, r0] - movs r0, 0x7C - bl Cos - strh r0, [r4, 0x24] - movs r0, 0xA - ldrsh r1, [r5, r0] - movs r0, 0x76 - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08086E48: .4byte gPlayerAvatar -_08086E4C: .4byte gSprites - thumb_func_end sub_8086E10 - - thumb_func_start sub_8086E50 -sub_8086E50: @ 8086E50 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r0, _08086EA8 @ =gPlayerAvatar - ldrb r1, [r0, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086EAC @ =gSprites - adds r5, r0, r1 - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0x7C - bl Cos - strh r0, [r5, 0x24] - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0x76 - bl Sin - strh r0, [r5, 0x26] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08086E8E - ldrh r0, [r4, 0xA] - subs r0, 0x1 - strh r0, [r4, 0xA] -_08086E8E: - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08086EA0 - strh r0, [r5, 0x24] - strh r0, [r5, 0x26] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08086EA0: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08086EA8: .4byte gPlayerAvatar -_08086EAC: .4byte gSprites - thumb_func_end sub_8086E50 - - thumb_func_start sub_8086EB0 -sub_8086EB0: @ 8086EB0 - push {r4,lr} - adds r4, r0, 0 - bl sub_80B4850 - lsls r0, 24 - cmp r0, 0 - bne _08086ECC - bl sub_80B483C - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - b _08086ECE -_08086ECC: - movs r0, 0 -_08086ECE: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8086EB0 - - thumb_func_start sub_8086ED4 -sub_8086ED4: @ 8086ED4 - push {r4,lr} - ldr r0, _08086F20 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086F24 @ =gMapObjects - adds r4, r0, r1 - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _08086F18 - bl CameraObjectReset1 - bl ScriptContext2_Disable - movs r0, 0x4 - bl GetGoSpeed0AnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl FieldObjectSetSpecialAnim - ldr r0, _08086F28 @ =sub_8086CBC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_08086F18: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08086F20: .4byte gPlayerAvatar -_08086F24: .4byte gMapObjects -_08086F28: .4byte sub_8086CBC - thumb_func_end sub_8086ED4 - thumb_func_start FldEff_UseWaterfall FldEff_UseWaterfall: @ 8086F2C push {r4,lr} diff --git a/src/field_effect.c b/src/field_effect.c index 664e59ecf..f3319169f 100755 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1076,11 +1076,19 @@ bool8 sub_80869F8(struct Task *task) void sub_8086A68(u8); extern const bool8 (*gUnknown_0839F2E8[6])(struct Task *); +extern const bool8 (*gUnknown_0839F300[7])(struct Task *); extern void sub_80B4824(u8); +extern void sub_8053FF8(void); +extern void fade_8080918(void); + void sub_8086B98(struct Task *); void sub_8086BE4(struct Task *); void sub_8086C30(void); void sub_8086C40(void); +bool8 sub_8054034(void); +void sub_8086C94(void); +void sub_80B483C(void); +void sub_8086CBC(u8); void sub_8086A2C(u8 a0, u8 priority) { @@ -1190,12 +1198,6 @@ void sub_8086BE4(struct Task *task) } } -extern void sub_8053FF8(void); -extern void fade_8080918(void); -bool8 sub_8054034(void); -void sub_8086C94(void); -void sub_80B483C(void); - void sub_8086C30(void) { sub_8053FF8(); @@ -1213,3 +1215,131 @@ void sub_8086C40(void) DestroyTask(FindTaskIdByFunc(sub_8086A68)); } } + +void sub_8086C94(void) +{ + sub_8053E90(); + pal_fill_for_map_transition(); + ScriptContext2_Enable(); + CreateTask(sub_8086CBC, 0); + gUnknown_0300485C = NULL; +} + +void sub_8086CBC(u8 taskId) +{ + struct Task *task; + task = &gTasks[taskId]; + while (gUnknown_0839F300[task->data[0]](task)); +} + +bool8 sub_8086CF4(struct Task *task) +{ + struct MapObject *mapObject; + s16 x; + s16 y; + u8 behavior; + CameraObjectReset2(); + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(DIR_EAST)); + PlayerGetDestCoords(&x, &y); + behavior = MapGridGetMetatileBehaviorAt(x, y); + task->data[0]++; + task->data[1] = 16; + if (behavior == 0x6b) + { + behavior = 1; + task->data[0] = 3; + } else + { + behavior = 0; + } + sub_80B4824(behavior); + return TRUE; +} + +bool8 sub_8086D70(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x84, task->data[1]); + sprite->pos2.y = Sin(0x94, task->data[1]); + task->data[0]++; + return FALSE; +} + +bool8 sub_8086DB0(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x84, task->data[1]); + sprite->pos2.y = Sin(0x94, task->data[1]); + task->data[2]++; + if (task->data[2] & 1) + { + task->data[1]--; + } + if (task->data[1] == 0) + { + sprite->pos2.x = 0; + sprite->pos2.y = 0; + task->data[0] = 5; + } + return FALSE; +} + +bool8 sub_8086E10(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x7c, task->data[1]); + sprite->pos2.y = Sin(0x76, task->data[1]); + task->data[0]++; + return FALSE; +} + +bool8 sub_8086E50(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x7c, task->data[1]); + sprite->pos2.y = Sin(0x76, task->data[1]); + task->data[2]++; + if (task->data[2] & 1) + { + task->data[1]--; + } + if (task->data[1] == 0) + { + sprite->pos2.x = 0; + sprite->pos2.y = 0; + task->data[0]++; + } + return FALSE; +} + +extern bool8 sub_80B4850(void); + +bool8 sub_8086EB0(struct Task *task) +{ + if (sub_80B4850()) + { + return FALSE; + } + sub_80B483C(); + task->data[0]++; + return TRUE; +} + +bool8 sub_8086ED4(struct Task *task) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + CameraObjectReset1(); + ScriptContext2_Disable(); + FieldObjectSetSpecialAnim(mapObject, GetGoSpeed0AnimId(DIR_EAST)); + DestroyTask(FindTaskIdByFunc(sub_8086CBC)); + } + return FALSE; +} |