summaryrefslogtreecommitdiff
path: root/src/rfu_union_tool.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rfu_union_tool.c')
-rw-r--r--src/rfu_union_tool.c248
1 files changed, 124 insertions, 124 deletions
diff --git a/src/rfu_union_tool.c b/src/rfu_union_tool.c
index 20b29de9b..132ac7b85 100644
--- a/src/rfu_union_tool.c
+++ b/src/rfu_union_tool.c
@@ -1,8 +1,6 @@
#include "global.h"
#include "event_data.h"
#include "event_object_movement.h"
-#include "event_object_80688E4.h"
-#include "event_object_8097404.h"
#include "field_player_avatar.h"
#include "fieldmap.h"
#include "rfu_union_tool.h"
@@ -10,35 +8,36 @@
#include "task.h"
#include "constants/flags.h"
#include "constants/event_object_movement.h"
-#include "constants/object_events.h"
+#include "constants/union_room.h"
+#include "constants/event_objects.h"
static EWRAM_DATA struct UnionObj * UnionObjWork = NULL;
static EWRAM_DATA u32 sUnionObjRefreshTimer = 0;
static u8 StartUnionObjAnimTask(void);
-static u32 sub_811BBC8(u32 playerIdx, u32 arg1);
-static void sub_811C008(s32 arg0, s32 arg1, u8 arg2);
+static u32 RfuUnionGroupMemberIsInvisible(u32 group, u32 member);
+static void UnionPartnerObjectSetFacing(s32 member, s32 group, u8 direction);
static const u8 sUnionObjectEventGfxIds[][10] = {
[MALE] = {
- OBJECT_EVENT_GFX_COOLTRAINER_M,
- OBJECT_EVENT_GFX_BLACKBELT,
- OBJECT_EVENT_GFX_CAMPER,
- OBJECT_EVENT_GFX_YOUNGSTER,
- OBJECT_EVENT_GFX_BOY,
- OBJECT_EVENT_GFX_BUG_CATCHER,
- OBJECT_EVENT_GFX_MAN,
- OBJECT_EVENT_GFX_ROCKER
+ OBJ_EVENT_GFX_COOLTRAINER_M,
+ OBJ_EVENT_GFX_BLACKBELT,
+ OBJ_EVENT_GFX_CAMPER,
+ OBJ_EVENT_GFX_YOUNGSTER,
+ OBJ_EVENT_GFX_BOY,
+ OBJ_EVENT_GFX_BUG_CATCHER,
+ OBJ_EVENT_GFX_MAN,
+ OBJ_EVENT_GFX_ROCKER
},
[FEMALE] = {
- OBJECT_EVENT_GFX_COOLTRAINER_F,
- OBJECT_EVENT_GFX_CHANNELER,
- OBJECT_EVENT_GFX_PICNICKER,
- OBJECT_EVENT_GFX_LASS,
- OBJECT_EVENT_GFX_WOMAN_1,
- OBJECT_EVENT_GFX_BATTLE_GIRL,
- OBJECT_EVENT_GFX_WOMAN_2,
- OBJECT_EVENT_GFX_BEAUTY
+ OBJ_EVENT_GFX_COOLTRAINER_F,
+ OBJ_EVENT_GFX_CHANNELER,
+ OBJ_EVENT_GFX_PICNICKER,
+ OBJ_EVENT_GFX_LASS,
+ OBJ_EVENT_GFX_WOMAN_1,
+ OBJ_EVENT_GFX_BATTLE_GIRL,
+ OBJ_EVENT_GFX_WOMAN_2,
+ OBJ_EVENT_GFX_BEAUTY
}
};
@@ -69,12 +68,12 @@ static const u8 sOppositeFacingDirection[] = {
[DIR_EAST] = DIR_WEST
};
-static const u8 gUnknown_845711B[] = {
- 1,
- 3,
- 1,
- 4,
- 2
+static const u8 sUnionGroupMemberFacings[] = {
+ DIR_SOUTH,
+ DIR_WEST,
+ DIR_SOUTH,
+ DIR_EAST,
+ DIR_NORTH
};
static const u8 sUnionRoomLocalIds[] = {
@@ -116,19 +115,19 @@ static u8 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id)
return sUnionObjectEventGfxIds[gender][id % 8];
}
-static void GetUnionRoomPlayerFacingCoords(u32 id, u32 dirn, s32 * xp, s32 * yp)
+static void GetUnionRoomPlayerFacingCoords(u32 group, u32 member, s32 * xp, s32 * yp)
{
- *xp = sUnionPartnerCoords[id][0] + sFacingDirectionOffsets[dirn][0] + 7;
- *yp = sUnionPartnerCoords[id][1] + sFacingDirectionOffsets[dirn][1] + 7;
+ *xp = sUnionPartnerCoords[group][0] + sFacingDirectionOffsets[member][0] + 7;
+ *yp = sUnionPartnerCoords[group][1] + sFacingDirectionOffsets[member][1] + 7;
}
-static bool32 sub_811B58C(u32 id, u32 dirn, s32 x, s32 y)
+static bool32 IsUnionRoomPlayerFacingTileAt(u32 group, u32 member, s32 x, s32 y)
{
- if (sUnionPartnerCoords[id][0] + sFacingDirectionOffsets[dirn][0] + 7 != x)
+ if (sUnionPartnerCoords[group][0] + sFacingDirectionOffsets[member][0] + 7 != x)
{
return FALSE;
}
- else if (sUnionPartnerCoords[id][1] + sFacingDirectionOffsets[dirn][1] + 7 != y)
+ else if (sUnionPartnerCoords[group][1] + sFacingDirectionOffsets[member][1] + 7 != y)
{
return FALSE;
}
@@ -188,6 +187,7 @@ static bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * move
}
return TRUE;
}
+
static bool32 TryReleaseUnionRoomPlayerObjectEvent(u32 playerIdx)
{
u8 objectId;
@@ -263,11 +263,11 @@ static const u8 sMovement_UnionPlayerEnter[2] = {
MOVEMENT_ACTION_STEP_END
};
-static bool32 AnimateUnionRoomPlayerSpawn(s8 * a0, u32 playerIdx, struct UnionObj * ptr)
+static bool32 AnimateUnionRoomPlayerSpawn(s8 * state_p, u32 playerIdx, struct UnionObj * ptr)
{
s16 x, y;
- switch (*a0)
+ switch (*state_p)
{
case 0:
if (!is_walking_or_running())
@@ -275,30 +275,30 @@ static bool32 AnimateUnionRoomPlayerSpawn(s8 * a0, u32 playerIdx, struct UnionOb
break;
}
PlayerGetDestCoords(&x, &y);
- if (sub_811B58C(playerIdx, 0, x, y) == TRUE)
+ if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE)
{
break;
}
player_get_pos_including_state_based_drift(&x, &y);
- if (sub_811B58C(playerIdx, 0, x, y) == TRUE)
+ if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE)
{
break;
}
SetUnionRoomPlayerGfx(playerIdx, ptr->gfxId);
CreateUnionRoomPlayerObjectEvent(playerIdx);
ShowUnionRoomPlayer(playerIdx);
- (*a0)++;
+ (*state_p)++;
// fallthrough
case 3: // incorrect?
if (SetUnionRoomPlayerEnterExitMovement(playerIdx, sMovement_UnionPlayerEnter) == 1)
{
- (*a0)++;
+ (*state_p)++;
}
break;
case 2:
if (TryReleaseUnionRoomPlayerObjectEvent(playerIdx))
{
- *a0 = 0;
+ *state_p = 0;
return TRUE;
}
break;
@@ -306,12 +306,12 @@ static bool32 AnimateUnionRoomPlayerSpawn(s8 * a0, u32 playerIdx, struct UnionOb
return FALSE;
}
-static bool32 sub_811B8BC(u32 playerIdx, u32 a1, u32 a2)
+static bool32 SpawnGroupLeader(u32 playerIdx, u32 gender, u32 idMod256)
{
struct UnionObj * ptr = &UnionObjWork[playerIdx];
AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 561)
- ptr->schedAnim = 1;
- ptr->gfxId = GetUnionRoomPlayerGraphicsId(a1, a2);
+ ptr->schedAnim = UNION_ROOM_SPAWN_IN;
+ ptr->gfxId = GetUnionRoomPlayerGraphicsId(gender, idMod256);
if (ptr->state == 0)
{
return TRUE;
@@ -322,11 +322,11 @@ static bool32 sub_811B8BC(u32 playerIdx, u32 a1, u32 a2)
}
}
-static bool32 sub_811B90C(u32 playerIdx)
+static bool32 DespawnGroupLeader(u32 playerIdx)
{
struct UnionObj * ptr = &UnionObjWork[playerIdx];
AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 577)
- ptr->schedAnim = 2;
+ ptr->schedAnim = UNION_ROOM_SPAWN_OUT;
if (ptr->state == 1)
{
return TRUE;
@@ -342,7 +342,7 @@ static void AnimateUnionObj(u32 playerIdx, struct UnionObj * ptr)
switch (ptr->state)
{
case 0:
- if (ptr->schedAnim == 1)
+ if (ptr->schedAnim == UNION_ROOM_SPAWN_IN)
{
ptr->state = 2;
ptr->animState = 0;
@@ -353,7 +353,7 @@ static void AnimateUnionObj(u32 playerIdx, struct UnionObj * ptr)
}
// fallthrough
case 2:
- if (!sub_811BBC8(playerIdx, 0) && ptr->schedAnim == 2)
+ if (!RfuUnionGroupMemberIsInvisible(playerIdx, 0) && ptr->schedAnim == 2)
{
ptr->state = 0;
ptr->animState = 0;
@@ -366,7 +366,7 @@ static void AnimateUnionObj(u32 playerIdx, struct UnionObj * ptr)
}
break;
case 1:
- if (ptr->schedAnim == 2)
+ if (ptr->schedAnim == UNION_ROOM_SPAWN_OUT)
{
ptr->state = 3;
ptr->animState = 0;
@@ -383,7 +383,7 @@ static void AnimateUnionObj(u32 playerIdx, struct UnionObj * ptr)
}
break;
}
- ptr->schedAnim = 0;
+ ptr->schedAnim = UNION_ROOM_SPAWN_NONE;
}
static void Task_AnimateUnionObjs(u8 taskId)
@@ -409,7 +409,7 @@ static u8 StartUnionObjAnimTask(void)
}
}
-static void sub_811BA5C(void)
+static void DestroyAnimateUnionObjsTask(void)
{
u8 taskId = FindTaskIdByFunc(Task_AnimateUnionObjs);
if (taskId < NUM_TASKS)
@@ -418,7 +418,7 @@ static void sub_811BA5C(void)
}
}
-void sub_811BA78(void)
+void DeleteUnionObjWorkAndStopTask(void)
{
s32 i;
for (i = 0; i < 8; i++)
@@ -430,31 +430,31 @@ void sub_811BA78(void)
}
}
UnionObjWork = NULL;
- sub_811BA5C();
+ DestroyAnimateUnionObjsTask();
}
-void sub_811BAAC(u8 * sp8, s32 r9)
+void CreateGroupMemberObjectsInvisible(u8 * sprite_ids, s32 group)
{
- s32 r7;
+ s32 i;
- for (r7 = 0; r7 < 5; r7++)
+ for (i = 0; i < 5; i++)
{
- s32 r5 = 5 * r9 + r7;
- sp8[r5] = sprite_new(OBJECT_EVENT_GFX_MAN, r5 - 0x38, sUnionPartnerCoords[r9][0] + sFacingDirectionOffsets[r7][0], sUnionPartnerCoords[r9][1] + sFacingDirectionOffsets[r7][1], 3, 1);
- sub_8069124(r5 - 0x38, TRUE);
+ s32 obj_id = 5 * group + i;
+ sprite_ids[obj_id] = sprite_new(OBJ_EVENT_GFX_MAN, obj_id - 0x38, sUnionPartnerCoords[group][0] + sFacingDirectionOffsets[i][0], sUnionPartnerCoords[group][1] + sFacingDirectionOffsets[i][1], 3, 1);
+ RfuUnionObjectToggleInvisibility(obj_id - 0x38, TRUE);
}
}
-void sub_811BB40(u8 * r5)
+void DestroyGroupMemberObjects(u8 *spriteIds)
{
s32 i;
for (i = 0; i < 40; i++)
{
- DestroySprite(&gSprites[r5[i]]);
+ DestroySprite(&gSprites[spriteIds[i]]);
}
}
-void sub_811BB68(void)
+void MakeGroupAssemblyAreasPassable(void)
{
s32 i, j, x, y;
for (i = 0; i < 8; i++)
@@ -462,94 +462,94 @@ void sub_811BB68(void)
for (j = 0; j < 5; j++)
{
GetUnionRoomPlayerFacingCoords(i, j, &x, &y);
- sub_8059024(x, y, 0);
+ MapGridSetMetatileImpassabilityAt(x, y, FALSE);
}
}
}
-static u8 sub_811BBA0(u32 r1, u32 unused, struct GFtgtGname * r2)
+static u8 UnionPartnerObjectGetFacing(u32 member, u32 group, struct GFtgtGname * gname)
{
- if (r1 != 0)
+ if (member != 0)
{
- return gUnknown_845711B[r1];
+ return sUnionGroupMemberFacings[member];
}
- else if (r2->unk_0a_0 == 0x45)
+ else if (gname->activity == 0x45)
{
- return 1;
+ return DIR_SOUTH;
}
else
{
- return 4;
+ return DIR_EAST;
}
}
-static u32 sub_811BBC8(u32 a0, u32 a1)
+static u32 RfuUnionGroupMemberIsInvisible(u32 group, u32 member)
{
- return sub_806916C(5 * a0 + a1 - 0x38);
+ return RfuUnionObjectIsInvisible(5 * group + member - 0x38);
}
-static void sub_811BBE0(u32 r5, u32 r6, u8 r8, struct GFtgtGname * r9)
+static void SpawnGroupMember(u32 groupNo, u32 memberNo, u8 direction, struct GFtgtGname * gname)
{
s32 x, y;
- s32 r7 = 5 * r5 + r6;
- if (sub_811BBC8(r5, r6) == 1)
+ s32 objId = 5 * groupNo + memberNo;
+ if (RfuUnionGroupMemberIsInvisible(groupNo, memberNo) == TRUE)
{
- sub_8069124(r7 - 0x38, FALSE);
- sub_80691A4(r7 - 0x38, 1);
+ RfuUnionObjectToggleInvisibility(objId - 0x38, FALSE);
+ RfuUnionObjectStartWarp(objId - 0x38, UNION_ROOM_SPAWN_IN);
}
- sub_8069094(r7 - 0x38, r8);
- sub_811C008(r6, r5, sub_811BBA0(r6, r5, r9));
- GetUnionRoomPlayerFacingCoords(r5, r6, &x, &y);
- sub_8059024(x, y, 1);
+ RfuUnionObjectSetFacingDirection(objId - 0x38, direction);
+ UnionPartnerObjectSetFacing(memberNo, groupNo, UnionPartnerObjectGetFacing(memberNo, groupNo, gname));
+ GetUnionRoomPlayerFacingCoords(groupNo, memberNo, &x, &y);
+ MapGridSetMetatileImpassabilityAt(x, y, TRUE);
}
-static void sub_811BC68(u32 a0, u32 a1)
+static void DespawnGroupMember(u32 group, u32 member)
{
s32 x, y;
- sub_80691A4(5 * a0 + a1 - 0x38, 2);
- GetUnionRoomPlayerFacingCoords(a0, a1, &x, &y);
- sub_8059024(x, y, 0);
+ RfuUnionObjectStartWarp(5 * group + member - 0x38, UNION_ROOM_SPAWN_OUT);
+ GetUnionRoomPlayerFacingCoords(group, member, &x, &y);
+ MapGridSetMetatileImpassabilityAt(x, y, FALSE);
}
-static void sub_811BCA0(u32 r7, struct GFtgtGname * r8)
+static void AssembleGroup(u32 group, struct GFtgtGname * gname)
{
s16 x, y, x2, y2;
s32 i;
PlayerGetDestCoords(&x, &y);
player_get_pos_including_state_based_drift(&x2, &y2);
- if (sub_806916C(5 * r7 - 0x38) == 1)
+ if (RfuUnionObjectIsInvisible(5 * group - 0x38) == TRUE)
{
- if (sub_811B58C(r7, 0, x, y) == TRUE || sub_811B58C(r7, 0, x2, y2) == TRUE)
+ if (IsUnionRoomPlayerFacingTileAt(group, 0, x, y) == TRUE || IsUnionRoomPlayerFacingTileAt(group, 0, x2, y2) == TRUE)
{
return;
}
- sub_811BBE0(r7, 0, GetUnionRoomPlayerGraphicsId(r8->playerGender, r8->unk_00.playerTrainerId[0]), r8);
+ SpawnGroupMember(group, 0, GetUnionRoomPlayerGraphicsId(gname->playerGender, gname->unk_00.playerTrainerId[0]), gname);
}
for (i = 1; i < 5; i++)
{
- if (r8->unk_04[i - 1] == 0)
+ if (gname->child_sprite_gender[i - 1] == 0)
{
- sub_811BC68(r7, i);
+ DespawnGroupMember(group, i);
}
- else if (sub_811B58C(r7, i, x, y) == FALSE && sub_811B58C(r7, i, x2, y2) == FALSE)
+ else if (IsUnionRoomPlayerFacingTileAt(group, i, x, y) == FALSE && IsUnionRoomPlayerFacingTileAt(group, i, x2, y2) == FALSE)
{
- sub_811BBE0(r7, i, GetUnionRoomPlayerGraphicsId((r8->unk_04[i - 1] >> 3) & 1, r8->unk_04[i - 1] & 7), r8);
+ SpawnGroupMember(group, i, GetUnionRoomPlayerGraphicsId((gname->child_sprite_gender[i - 1] >> 3) & 1, gname->child_sprite_gender[i - 1] & 7), gname);
}
}
}
-static void sub_811BDA8(u32 r5, struct GFtgtGname * r4)
+static void SpawnGroupLeaderAndMembers(u32 group, struct GFtgtGname * gname)
{
u32 i;
- switch (r4->unk_0a_0)
+ switch (gname->activity)
{
case 0x40:
case 0x54:
- sub_811B8BC(r5, r4->playerGender, r4->unk_00.playerTrainerId[0]);
+ SpawnGroupLeader(group, gname->playerGender, gname->unk_00.playerTrainerId[0]);
for (i = 0; i < 5; i++)
{
- sub_811BC68(r5, i);
+ DespawnGroupMember(group, i);
}
break;
case 0x41:
@@ -559,70 +559,70 @@ static void sub_811BDA8(u32 r5, struct GFtgtGname * r4)
case 0x51:
case 0x52:
case 0x53:
- sub_811B90C(r5);
- sub_811BCA0(r5, r4);
+ DespawnGroupLeader(group);
+ AssembleGroup(group, gname);
break;
default:
AGB_ASSERT_EX(0, ABSPATH("rfu_union_tool.c"), 979)
}
}
-static void sub_811BE6C(u32 r5, struct GFtgtGname * unused)
+static void DespawnGroupLeaderAndMembers(u32 group, struct GFtgtGname * gname)
{
s32 i;
- sub_811B90C(r5);
+ DespawnGroupLeader(group);
for (i = 0; i < 5; i++)
{
- sub_811BC68(r5, i);
+ DespawnGroupMember(group, i);
}
}
-static void UpdateUnionRoomPlayerSprites(struct UnkStruct_URoom *r0)
+static void UpdateUnionRoomPlayerSprites(struct UnkStruct_URoom * groups)
{
s32 i;
- struct UnkStruct_x20 * r4;
+ struct UnkStruct_x20 * x20_p;
sUnionObjRefreshTimer = 0;
- for (i = 0, r4 = r0->field_0->arr; i < 8; i++)
+ for (i = 0, x20_p = groups->field_0->arr; i < 8; i++)
{
- if (r4[i].field_1A_0 == 1)
+ if (x20_p[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
- sub_811BDA8(i, &r4[i].unk.gname);
+ SpawnGroupLeaderAndMembers(i, &x20_p[i].gname_uname.gname);
}
- else if (r4[i].field_1A_0 == 2)
+ else if (x20_p[i].groupScheduledAnim == UNION_ROOM_SPAWN_OUT)
{
- sub_811BE6C(i, &r4[i].unk.gname);
+ DespawnGroupLeaderAndMembers(i, &x20_p[i].gname_uname.gname);
}
}
}
-void sub_811BECC(struct UnkStruct_URoom *unused)
+void ScheduleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p)
{
sUnionObjRefreshTimer = 300;
}
-void sub_811BEDC(struct UnkStruct_URoom *r2)
+void HandleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p)
{
if (++sUnionObjRefreshTimer > 300)
{
- UpdateUnionRoomPlayerSprites(r2);
+ UpdateUnionRoomPlayerSprites(uroom_p);
}
}
-bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3)
+bool32 RfuUnionTool_GetGroupAndMemberInFrontOfPlayer(struct UnkStruct_Main0 *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds)
{
s16 x, y;
s32 i, j;
- struct UnkStruct_x20 * r4;
+ struct UnkStruct_x20 * x20_p;
if (!is_walking_or_running())
{
return FALSE;
}
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
- for (i = 0, r4 = arg0->arr; i < 8; i++)
+ for (i = 0, x20_p = main0_p->arr; i < 8; i++)
{
for (j = 0; j < 5; j++)
{
- s32 r3 = 5 * i + j;
+ s32 objId = 5 * i + j;
if (x != sUnionPartnerCoords[i][0] + sFacingDirectionOffsets[j][0] + 7)
{
continue;
@@ -631,33 +631,33 @@ bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3)
{
continue;
}
- if (sub_806916C(r3 - 0x38) != 0)
+ if (RfuUnionObjectIsInvisible(objId - 0x38) != 0)
{
continue;
}
- if (sub_8069294(r3 - 0x38) != 0)
+ if (RfuUnionObjectIsWarping(objId - 0x38) != 0)
{
continue;
}
- if (r4[i].field_1A_0 != 1)
+ if (x20_p[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN)
{
continue;
}
- sub_811C008(j, i, sOppositeFacingDirection[GetPlayerFacingDirection()]);
- *arg1 = j;
- *arg2 = i;
+ UnionPartnerObjectSetFacing(j, i, sOppositeFacingDirection[GetPlayerFacingDirection()]);
+ *member_p = j;
+ *group_p = i;
return TRUE;
}
}
return FALSE;
}
-static void sub_811C008(s32 arg0, s32 arg1, u8 arg2)
+static void UnionPartnerObjectSetFacing(s32 member, s32 group, u8 direction)
{
- sub_8069058(5 * arg1 - 0x38 + arg0, arg2);
+ TurnObjectEvent(5 * group - 0x38 + member, direction);
}
-void sub_811C028(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2)
+void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct UnkStruct_Main0 *main0_p)
{
- return sub_811C008(arg0, arg1, sub_811BBA0(arg0, arg1, &arg2->arr[arg1].unk.gname));
+ return UnionPartnerObjectSetFacing(member, group, UnionPartnerObjectGetFacing(member, group, &main0_p->arr[group].gname_uname.gname));
}