diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-06-29 08:36:18 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-06-29 10:03:06 +0800 |
commit | b566ae26decaa937c72f608044d8ea604c643260 (patch) | |
tree | d6f141d51737b3bacd37a25bc69f43a2236a756c /src | |
parent | 38febc8bafcab19965608e434135c054893dfb68 (diff) |
finished fldeff_dig + fldeff_rocksmash
Diffstat (limited to 'src')
-rw-r--r-- | src/fldeff_dig.c | 49 | ||||
-rw-r--r-- | src/fldeff_rocksmash.c | 138 | ||||
-rw-r--r-- | src/fldeff_strength.c | 4 | ||||
-rw-r--r-- | src/item_use.c | 7 | ||||
-rw-r--r-- | src/map_obj_lock.c | 6 | ||||
-rw-r--r-- | src/quest_log.c | 6 | ||||
-rw-r--r-- | src/quest_log_8150454.c | 4 | ||||
-rw-r--r-- | src/scrcmd.c | 10 |
8 files changed, 206 insertions, 18 deletions
diff --git a/src/fldeff_dig.c b/src/fldeff_dig.c new file mode 100644 index 000000000..b38cac7e0 --- /dev/null +++ b/src/fldeff_dig.c @@ -0,0 +1,49 @@ +#include "global.h" +#include "field_effect.h" +#include "field_player_avatar.h" +#include "fldeff.h" +#include "item_use.h" +#include "overworld.h" +#include "party_menu.h" +#include "sprite.h" +#include "constants/map_objects.h" + +static void hm2_dig(void); +static void sub_80C9AFC(void); + +bool8 SetUpFieldMove_Dig(void) +{ + if (CanUseEscapeRopeOnCurrMap() == TRUE) + { + gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; + gPostMenuFieldCallback = hm2_dig; + return TRUE; + } + return FALSE; +} + +static void hm2_dig(void) +{ + Overworld_ResetStateAfterDigEscRope(); + FieldEffectStart(FLDEFF_USE_DIG); + gFieldEffectArguments[0] = GetCursorSelectionMonId(); +} + +bool8 FldEff_UseDig(void) +{ + u8 taskId = oei_task_add(); + + gTasks[taskId].data[8] = (u32)sub_80C9AFC >> 16; + gTasks[taskId].data[9] = (u32)sub_80C9AFC; + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); + return FALSE; +} + +static void sub_80C9AFC(void) +{ + u8 taskId; + + FieldEffectActiveListRemove(FLDEFF_USE_DIG); + taskId = CreateTask(sub_80A1C44, 8); + gTasks[taskId].data[0] = 0; +} diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c new file mode 100644 index 000000000..7d9203a51 --- /dev/null +++ b/src/fldeff_rocksmash.c @@ -0,0 +1,138 @@ +#include "global.h" +#include "global.fieldmap.h" +#include "field_player_avatar.h" +#include "field_effect.h" +#include "party_menu.h" +#include "malloc.h" +#include "event_data.h" +#include "script.h" +#include "fldeff.h" +#include "event_scripts.h" +#include "field_weather.h" +#include "sound.h" +#include "palette.h" +#include "overworld.h" +#include "wild_encounter.h" +#include "field_map_obj.h" +#include "constants/songs.h" +#include "constants/map_objects.h" + +static void task08_080C9820(u8 taskId); +static void sub_80C98FC(u8 taskId); +static void sub_80C98B0(u8 taskId); +static void sub_80C99A0(u8 taskId); +static void sub_80C9A10(void); +static void sub_80C9A60(void); + +bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId) +{ + u8 mapObjId; + + GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y); + gPlayerFacingPosition.height = PlayerGetZCoord(); + mapObjId = GetFieldObjectIdByXYZ(gPlayerFacingPosition.x, gPlayerFacingPosition.y, gPlayerFacingPosition.height); + if (gMapObjects[mapObjId].graphicsId != graphicsId) + return FALSE; + gSpecialVar_LastTalked = gMapObjects[mapObjId].localId; + return TRUE; +} + +u8 oei_task_add(void) +{ + GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y); + return CreateTask(task08_080C9820, 8); +} + +static void task08_080C9820(u8 taskId) +{ + u8 mapObjId; + + ScriptContext2_Enable(); + gPlayerAvatar.unk6 = TRUE; + mapObjId = gPlayerAvatar.mapObjectId; + if (!FieldObjectIsMovementOverridden(&gMapObjects[mapObjId]) + || FieldObjectClearHeldMovementIfFinished(&gMapObjects[mapObjId])) + { + if (gMapHeader.mapType == MAP_TYPE_UNDERWATER) + { + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + gTasks[taskId].func = sub_80C98FC; + } + else + { + sub_805CB70(); + FieldObjectSetHeldMovement(&gMapObjects[mapObjId], 0x45); + gTasks[taskId].func = sub_80C98B0; + } + } +} + +static void sub_80C98B0(u8 taskId) +{ + if (FieldObjectCheckHeldMovementStatus(&gMapObjects[gPlayerAvatar.mapObjectId]) == TRUE) + { + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + gTasks[taskId].func = sub_80C98FC; + } +} + +static void sub_80C98FC(u8 taskId) +{ + if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) + { + gFieldEffectArguments[1] = GetPlayerFacingDirection(); + if (gFieldEffectArguments[1] == 1) + gFieldEffectArguments[2] = 0; + if (gFieldEffectArguments[1] == 2) + gFieldEffectArguments[2] = 1; + if (gFieldEffectArguments[1] == 3) + gFieldEffectArguments[2] = 2; + if (gFieldEffectArguments[1] == 4) + gFieldEffectArguments[2] = 3; + EventObjectSetGraphicsId(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByCurrentState()); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gFieldEffectArguments[2]); + FieldEffectActiveListRemove(6); + gTasks[taskId].func = sub_80C99A0; + } +} + +static void sub_80C99A0(u8 taskId) +{ + ((void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]))(); + gPlayerAvatar.unk6 = FALSE; + DestroyTask(taskId); +} + +bool8 SetUpFieldMove_RockSmash(void) +{ + if (CheckObjectGraphicsInFrontOfPlayer(/*MAP_OBJ_GFX_BREAKABLE_ROCK*/0x60) == TRUE) + { + gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; + gPostMenuFieldCallback = sub_80C9A10; + return TRUE; + } + return FALSE; +} + +static void sub_80C9A10(void) +{ + gFieldEffectArguments[0] = GetCursorSelectionMonId(); + ScriptContext1_SetupScript(EventScript_FldEffRockSmash); +} + +bool8 FldEff_UseRockSmash(void) +{ + u8 taskId = oei_task_add(); + + gTasks[taskId].data[8] = (u32)sub_80C9A60 >> 16; + gTasks[taskId].data[9] = (u32)sub_80C9A60; + IncrementGameStat(GAME_STAT_USED_ROCK_SMASH); + return FALSE; +} + +static void sub_80C9A60(void) +{ + PlaySE(SE_W145); + FieldEffectActiveListRemove(FLDEFF_USE_ROCK_SMASH); + EnableBothScriptContexts(); +} diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c index 95ba95061..c99d62c29 100644 --- a/src/fldeff_strength.c +++ b/src/fldeff_strength.c @@ -6,13 +6,15 @@ #include "script.h" #include "fldeff.h" #include "event_scripts.h" +#include "constants/songs.h" +#include "constants/map_objects.h" static void FldEff_UseStrength(void); static void sub_80D08A8(void); bool8 SetUpFieldMove_Strength(void) { - if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) || CheckObjectGraphicsInFrontOfPlayer(0x61) != TRUE) + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) || CheckObjectGraphicsInFrontOfPlayer(/*MAP_OBJ_GFX_PUSHABLE_BOULDER*/0x61) != TRUE) { return FALSE; } diff --git a/src/item_use.c b/src/item_use.c index a7146b65e..3653a1699 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -68,7 +68,6 @@ void sub_80A19E8(u8 taskId); void sub_80A1A44(void); void sub_80A1B48(u8 taskId); void sub_80A1C08(u8 taskId); -void sub_80A1C44(u8 taskId); void sub_80A1CAC(void); void sub_80A1CC0(u8 taskId); void sub_80A1D58(void); @@ -557,7 +556,7 @@ void sub_80A1B48(u8 taskId) } } -bool8 sub_80A1B8C(void) +bool8 CanUseEscapeRopeOnCurrMap(void) { if (gMapHeader.escapeRope & 1) return TRUE; @@ -567,7 +566,7 @@ bool8 sub_80A1B8C(void) void ItemUseOutOfBattle_EscapeRope(u8 taskId) { - if (sub_80A1B8C() == TRUE) + if (CanUseEscapeRopeOnCurrMap() == TRUE) { ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, gMapHeader.regionMapSectionId); sItemUseOnFieldCB = sub_80A1C08; @@ -579,7 +578,7 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId) void sub_80A1C08(u8 taskId) { - sub_8054D70(); + Overworld_ResetStateAfterDigEscRope(); sub_80A1A44(); gTasks[taskId].data[0] = 0; DisplayItemMessageOnField(taskId, 2, gStringVar4, sub_80A1C44); diff --git a/src/map_obj_lock.c b/src/map_obj_lock.c index cdd74a5b9..f89819647 100644 --- a/src/map_obj_lock.c +++ b/src/map_obj_lock.c @@ -89,7 +89,7 @@ void LockSelectedMapObject(void) void sub_80696C0(void) { u8 fieldObjectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); - FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[fieldObjectId]); + FieldObjectClearHeldMovementIfFinished(&gMapObjects[fieldObjectId]); sub_80974D8(); UnfreezeMapObjects(); } @@ -98,9 +98,9 @@ void sub_80696F0(void) { u8 fieldObjectId; if (gMapObjects[gSelectedEventObject].active) - FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gSelectedEventObject]); + FieldObjectClearHeldMovementIfFinished(&gMapObjects[gSelectedEventObject]); fieldObjectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); - FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[fieldObjectId]); + FieldObjectClearHeldMovementIfFinished(&gMapObjects[fieldObjectId]); sub_80974D8(); UnfreezeMapObjects(); } diff --git a/src/quest_log.c b/src/quest_log.c index 3fd9d53de..fe83f67e9 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -1705,7 +1705,7 @@ void sub_811246C(struct Sprite *sprite) { if (gUnknown_203AF9A[0][0] != 0xFF) { - sub_8063CA4(mapObject, gUnknown_203AF9A[0][0]); + FieldObjectSetHeldMovement(mapObject, gUnknown_203AF9A[0][0]); gUnknown_203AF9A[0][0] = 0xFF; } if (gUnknown_203AF9A[0][1] != 0xFF) @@ -1719,7 +1719,7 @@ void sub_811246C(struct Sprite *sprite) { if (gUnknown_203AF9A[mapObject->localId][0] != 0xFF) { - sub_8063CA4(mapObject, gUnknown_203AF9A[mapObject->localId][0]); + FieldObjectSetHeldMovement(mapObject, gUnknown_203AF9A[mapObject->localId][0]); gUnknown_203AF9A[mapObject->localId][0] = 0xFF; } sub_8063E28(mapObject, sprite); @@ -1911,7 +1911,7 @@ void sub_8112940(u8 a0, struct UnkStruct_203AE98 *a1, u16 a2) gUnknown_3005E94[gUnknown_203AF98].unk_4 = 0; gUnknown_3005E94[gUnknown_203AF98].unk_6 = 0; gUnknown_3005E94[gUnknown_203AF98].unk_0 = 0; - switch (player_get_direction_lower_nybble()) + switch (GetPlayerFacingDirection()) { case 0: case 1: diff --git a/src/quest_log_8150454.c b/src/quest_log_8150454.c index 8af516e3a..3d61dee72 100644 --- a/src/quest_log_8150454.c +++ b/src/quest_log_8150454.c @@ -115,7 +115,7 @@ void sub_81505C4(u8 taskId) gTasks[taskId].data[0]++; break; case 2: - StartSpriteAnim(sprite, sub_8063500(player_get_direction_lower_nybble())); + StartSpriteAnim(sprite, sub_8063500(GetPlayerFacingDirection())); gTasks[taskId].data[0]++; break; case 3: @@ -173,7 +173,7 @@ void sub_8150794(u8 taskId) void sub_81507BC(struct MapObject * a0, u8 a1) { - sub_805F060(a0, a1); + EventObjectSetGraphicsId(a0, a1); } void sub_81507CC(void) diff --git a/src/scrcmd.c b/src/scrcmd.c index 12b2892bb..d317a78b5 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -807,7 +807,7 @@ bool8 ScrCmd_warpteleport2(struct ScriptContext *ctx) u16 y = VarGet(ScriptReadHalfword(ctx)); Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y); - sub_805DAE4(player_get_direction_lower_nybble()); + sub_805DAE4(GetPlayerFacingDirection()); sub_807E500(); ResetInitialPlayerAvatarState(); return TRUE; @@ -1154,7 +1154,7 @@ bool8 ScrCmd_faceplayer(struct ScriptContext *ctx) if (gMapObjects[gSelectedEventObject].active) { FieldObjectFaceOppositeDirection(&gMapObjects[gSelectedEventObject], - player_get_direction_lower_nybble()); + GetPlayerFacingDirection()); } return FALSE; } @@ -1241,7 +1241,7 @@ bool8 ScrCmd_releaseall(struct ScriptContext *ctx) HideFieldMessageBox(); playerObjectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); - FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[playerObjectId]); + FieldObjectClearHeldMovementIfFinished(&gMapObjects[playerObjectId]); sub_80974D8(); UnfreezeMapObjects(); return FALSE; @@ -1253,9 +1253,9 @@ bool8 ScrCmd_release(struct ScriptContext *ctx) HideFieldMessageBox(); if (gMapObjects[gSelectedEventObject].active) - FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gSelectedEventObject]); + FieldObjectClearHeldMovementIfFinished(&gMapObjects[gSelectedEventObject]); playerObjectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); - FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[playerObjectId]); + FieldObjectClearHeldMovementIfFinished(&gMapObjects[playerObjectId]); sub_80974D8(); UnfreezeMapObjects(); return FALSE; |