Document rfu_union_tool
This commit is contained in:
@@ -6,10 +6,10 @@
|
||||
void FreezeObjectEvents(void);
|
||||
bool8 FreezeObjectEvent(struct ObjectEvent *);
|
||||
void FreezeObjectEventsExceptOne(u8 objEventId);
|
||||
void RfuUnionObjectToggleInvisibility(u8 a0, bool32 a1);
|
||||
u32 RfuUnionObjectIsInvisible(u8 a0);
|
||||
void RfuUnionObjectStartWarp(u8 a0, u8 a1);
|
||||
void RfuUnionObjectSetFacingDirection(u8 a0, u8 a1);
|
||||
bool32 RfuUnionObjectIsWarping(u8 a0);
|
||||
void RfuUnionObjectSetFacingDirection(u8 objectEventId, u8 direction);
|
||||
void RfuUnionObjectToggleInvisibility(u8 objectEventId, bool32 invisible);
|
||||
bool32 RfuUnionObjectIsInvisible(u8 objectEventId);
|
||||
void RfuUnionObjectStartWarp(u8 objectEventId, u8 animNo);
|
||||
bool32 RfuUnionObjectIsWarping(u8 objectEventId);
|
||||
|
||||
#endif // GUARD_EVENT_OBJECT_80688E4_H
|
||||
|
||||
+1
-1
@@ -31,6 +31,6 @@ void sub_8059948(u8 a0, u8 a1);
|
||||
void save_serialize_map(void);
|
||||
u32 sub_8058F1C(u32 original, u8 bit);
|
||||
u32 sub_8058F48(s16 x, s16 y, u8 z);
|
||||
void sub_8059024(s32 x, s32 y, bool32 arg2);
|
||||
void MapGridSetMetatileImpassabilityAt(s32 x, s32 y, bool32 arg2);
|
||||
|
||||
#endif //GUARD_FIELDMAP_H
|
||||
|
||||
+2
-1
@@ -117,7 +117,8 @@ struct GFtgtGnameSub
|
||||
struct __attribute__((packed, aligned(2))) GFtgtGname
|
||||
{
|
||||
struct GFtgtGnameSub unk_00;
|
||||
u8 unk_04[4];
|
||||
u8 unk_04[RFU_CHILD_MAX]; // u8 sprite_idx:3;
|
||||
// u8 gender:1;
|
||||
u16 species:10;
|
||||
u16 type:6;
|
||||
u8 activity:7;
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
|
||||
#include "union_room.h"
|
||||
|
||||
void sub_811C1C8(void);
|
||||
void sub_811BAAC(u8 *spriteIds, s32 arg1);
|
||||
void sub_811BB40(u8 *spriteIds);
|
||||
void sub_811BB68(void);
|
||||
void sub_811BECC(struct UnkStruct_URoom *arg0);
|
||||
void sub_811BEDC(struct UnkStruct_URoom *arg0);
|
||||
bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3);
|
||||
void sub_811C028(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2);
|
||||
u8 ZeroUnionObjWork(struct UnionObj * ptr);
|
||||
void sub_811BA78(void);
|
||||
void DeleteUnionObjWorkAndStopTask(void);
|
||||
void CreateGroupMemberObjectsInvisible(u8 *spriteIds, s32 group);
|
||||
void DestroyGroupMemberObjects(u8 *spriteIds);
|
||||
void MakeGroupAssemblyAreasPassable(void);
|
||||
void ScheduleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p);
|
||||
void HandleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p);
|
||||
bool32 RfuUnionTool_GetGroupAndMemberInFrontOfPlayer(struct UnkStruct_Main0 *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds);
|
||||
void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct UnkStruct_Main0 *main0_p);
|
||||
|
||||
#endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef GUARD_UNION_ROOM_BATTLE_H
|
||||
#define GUARD_UNION_ROOM_BATTLE_H
|
||||
|
||||
void CB2_UnionRoomBattle(void);
|
||||
|
||||
#endif //GUARD_UNION_ROOM_BATTLE_H
|
||||
@@ -524,12 +524,12 @@ void RfuUnionObjectSetFacingDirection(u8 objectEventId, u8 direction)
|
||||
}
|
||||
}
|
||||
|
||||
void RfuUnionObjectToggleInvisibility(u8 objectEventId, bool32 arg1)
|
||||
void RfuUnionObjectToggleInvisibility(u8 objectEventId, bool32 invisible)
|
||||
{
|
||||
u8 spriteId = GetObjectEventSpriteId(objectEventId);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
if (arg1)
|
||||
if (invisible)
|
||||
gSprites[spriteId].tInvisible = TRUE;
|
||||
else
|
||||
gSprites[spriteId].tInvisible = FALSE;
|
||||
@@ -544,12 +544,12 @@ bool32 RfuUnionObjectIsInvisible(u8 objectEventId)
|
||||
return gSprites[spriteId].tInvisible == TRUE;
|
||||
}
|
||||
|
||||
void RfuUnionObjectStartWarp(u8 objectEventId, u8 direction)
|
||||
void RfuUnionObjectStartWarp(u8 objectEventId, u8 animNo)
|
||||
{
|
||||
u8 spriteId = GetObjectEventSpriteId(objectEventId);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteId].tUnionRoomWarpAnimNo = direction;
|
||||
gSprites[spriteId].tUnionRoomWarpAnimNo = animNo;
|
||||
gSprites[spriteId].tUnionRoomWarpAnimState = 0;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -490,7 +490,7 @@ void MapGridSetMetatileEntryAt(s32 x, s32 y, u16 metatile)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8059024(s32 x, s32 y, bool32 arg2)
|
||||
void MapGridSetMetatileImpassabilityAt(s32 x, s32 y, bool32 arg2)
|
||||
{
|
||||
if (x >= 0 && x < VMap.Xsize
|
||||
&& y >= 0 && y < VMap.Ysize)
|
||||
|
||||
+97
-96
@@ -16,8 +16,8 @@ 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 UnionPartnerObjectSetFacing(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] = {
|
||||
@@ -69,12 +69,12 @@ static const u8 sOppositeFacingDirection[] = {
|
||||
[DIR_EAST] = DIR_WEST
|
||||
};
|
||||
|
||||
static const u8 gUnknown_845711B[] = {
|
||||
[DIR_NONE] = DIR_SOUTH,
|
||||
[DIR_SOUTH] = DIR_WEST,
|
||||
[DIR_NORTH] = DIR_SOUTH,
|
||||
[DIR_WEST] = DIR_EAST,
|
||||
[DIR_EAST] = DIR_NORTH
|
||||
static const u8 sUnionGroupMemberFacings[] = {
|
||||
DIR_SOUTH,
|
||||
DIR_WEST,
|
||||
DIR_SOUTH,
|
||||
DIR_EAST,
|
||||
DIR_NORTH
|
||||
};
|
||||
|
||||
static const u8 sUnionRoomLocalIds[] = {
|
||||
@@ -116,19 +116,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 +188,7 @@ static bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * move
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool32 TryReleaseUnionRoomPlayerObjectEvent(u32 playerIdx)
|
||||
{
|
||||
u8 objectId;
|
||||
@@ -263,11 +264,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 +276,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 +307,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->gfxId = GetUnionRoomPlayerGraphicsId(gender, idMod256);
|
||||
if (ptr->state == 0)
|
||||
{
|
||||
return TRUE;
|
||||
@@ -322,7 +323,7 @@ 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)
|
||||
@@ -353,7 +354,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;
|
||||
@@ -409,7 +410,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 +419,7 @@ static void sub_811BA5C(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_811BA78(void)
|
||||
void DeleteUnionObjWorkAndStopTask(void)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < 8; i++)
|
||||
@@ -430,31 +431,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);
|
||||
RfuUnionObjectToggleInvisibility(r5 - 0x38, TRUE);
|
||||
s32 obj_id = 5 * group + i;
|
||||
sprite_ids[obj_id] = sprite_new(OBJECT_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,16 +463,16 @@ 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 UnionPartnerObjectGetFacing(u32 r1, u32 unused, struct GFtgtGname * gname)
|
||||
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 (gname->activity == 0x45)
|
||||
{
|
||||
@@ -483,73 +484,73 @@ static u8 UnionPartnerObjectGetFacing(u32 r1, u32 unused, struct GFtgtGname * gn
|
||||
}
|
||||
}
|
||||
|
||||
static u32 sub_811BBC8(u32 a0, u32 a1)
|
||||
static u32 RfuUnionGroupMemberIsInvisible(u32 group, u32 member)
|
||||
{
|
||||
return RfuUnionObjectIsInvisible(5 * a0 + a1 - 0x38);
|
||||
return RfuUnionObjectIsInvisible(5 * group + member - 0x38);
|
||||
}
|
||||
|
||||
static void sub_811BBE0(u32 r5, u32 r6, u8 r8, struct GFtgtGname * gname)
|
||||
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)
|
||||
{
|
||||
RfuUnionObjectToggleInvisibility(r7 - 0x38, FALSE);
|
||||
RfuUnionObjectStartWarp(r7 - 0x38, 1);
|
||||
RfuUnionObjectToggleInvisibility(objId - 0x38, FALSE);
|
||||
RfuUnionObjectStartWarp(objId - 0x38, 1);
|
||||
}
|
||||
RfuUnionObjectSetFacingDirection(r7 - 0x38, r8);
|
||||
UnionPartnerObjectSetFacing(r6, r5, UnionPartnerObjectGetFacing(r6, r5, gname));
|
||||
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;
|
||||
RfuUnionObjectStartWarp(5 * a0 + a1 - 0x38, 2);
|
||||
GetUnionRoomPlayerFacingCoords(a0, a1, &x, &y);
|
||||
sub_8059024(x, y, 0);
|
||||
RfuUnionObjectStartWarp(5 * group + member - 0x38, 2);
|
||||
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 (RfuUnionObjectIsInvisible(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->unk_04[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->unk_04[i - 1] >> 3) & 1, gname->unk_04[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->activity)
|
||||
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 +560,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 * gname)
|
||||
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].tradeStatus == 1)
|
||||
if (x20_p[i].tradeStatus == 1)
|
||||
{
|
||||
sub_811BDA8(i, &r4[i].unk.gname);
|
||||
SpawnGroupLeaderAndMembers(i, &x20_p[i].unk.gname);
|
||||
}
|
||||
else if (r4[i].tradeStatus == 2)
|
||||
else if (x20_p[i].tradeStatus == 2)
|
||||
{
|
||||
sub_811BE6C(i, &r4[i].unk.gname);
|
||||
DespawnGroupLeaderAndMembers(i, &x20_p[i].unk.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 +632,33 @@ bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (RfuUnionObjectIsInvisible(r3 - 0x38) != 0)
|
||||
if (RfuUnionObjectIsInvisible(objId - 0x38) != 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (RfuUnionObjectIsWarping(r3 - 0x38) != 0)
|
||||
if (RfuUnionObjectIsWarping(objId - 0x38) != 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (r4[i].tradeStatus != 1)
|
||||
if (x20_p[i].tradeStatus != 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
UnionPartnerObjectSetFacing(j, i, sOppositeFacingDirection[GetPlayerFacingDirection()]);
|
||||
*arg1 = j;
|
||||
*arg2 = i;
|
||||
*member_p = j;
|
||||
*group_p = i;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void UnionPartnerObjectSetFacing(s32 arg0, s32 arg1, u8 arg2)
|
||||
static void UnionPartnerObjectSetFacing(s32 member, s32 group, u8 direction)
|
||||
{
|
||||
TurnObjectEvent(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 UnionPartnerObjectSetFacing(arg0, arg1, UnionPartnerObjectGetFacing(arg0, arg1, &arg2->arr[arg1].unk.gname));
|
||||
return UnionPartnerObjectSetFacing(member, group, UnionPartnerObjectGetFacing(member, group, &main0_p->arr[group].unk.gname));
|
||||
}
|
||||
|
||||
+14
-13
@@ -37,6 +37,7 @@
|
||||
#include "trade_scene.h"
|
||||
#include "trainer_card.h"
|
||||
#include "union_room.h"
|
||||
#include "union_room_battle.h"
|
||||
#include "union_room_chat.h"
|
||||
#include "rfu_union_tool.h"
|
||||
#include "union_room_message.h"
|
||||
@@ -104,7 +105,7 @@ static u32 sub_811A748(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1)
|
||||
static u8 sub_811A798(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1, u8 arg2);
|
||||
static void sub_811A81C(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * arg3, u8 arg4, u8 id);
|
||||
static void sub_811A910(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 * arg3, u8 arg4, u8 id);
|
||||
static bool32 sub_811A9B8(void);
|
||||
static bool32 PlayerIsTalkingToUnionRoomAide(void);
|
||||
static u32 sub_811A9FC(s32 a0);
|
||||
static u32 sub_811AA24(struct UnkStruct_x20 * unkX20);
|
||||
static s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 playerGender);
|
||||
@@ -1802,7 +1803,7 @@ static void sub_81175BC(u8 taskId)
|
||||
case 65:
|
||||
case 81:
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
gMain.savedCallback = sub_811C1C8;
|
||||
gMain.savedCallback = CB2_UnionRoomBattle;
|
||||
InitChooseHalfPartyForBattle(2);
|
||||
break;
|
||||
case 1:
|
||||
@@ -2553,11 +2554,11 @@ static void sub_81186E0(u8 taskId)
|
||||
gUnknown_203B058 = 0x40;
|
||||
data->field_20 = sub_8119E84(data->field_C, data->field_4, 9);
|
||||
ZeroUnionObjWork(data->unionObjs);
|
||||
sub_811BB68();
|
||||
MakeGroupAssemblyAreasPassable();
|
||||
data->state = 1;
|
||||
break;
|
||||
case 1:
|
||||
sub_811BAAC(data->spriteIds, taskData[0]);
|
||||
CreateGroupMemberObjectsInvisible(data->spriteIds, taskData[0]);
|
||||
if (++taskData[0] == 8)
|
||||
data->state = 2;
|
||||
break;
|
||||
@@ -2650,14 +2651,14 @@ static void sub_81186E0(u8 taskId)
|
||||
{
|
||||
if (JOY_NEW(A_BUTTON))
|
||||
{
|
||||
if (sub_811BF00(data->field_0, &taskData[0], &taskData[1], data->spriteIds))
|
||||
if (RfuUnionTool_GetGroupAndMemberInFrontOfPlayer(data->field_0, &taskData[0], &taskData[1], data->spriteIds))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
sub_811B298();
|
||||
data->state = 24;
|
||||
break;
|
||||
}
|
||||
else if (sub_811A9B8())
|
||||
else if (PlayerIsTalkingToUnionRoomAide())
|
||||
{
|
||||
sub_80FB008(0x54, 0, 1);
|
||||
PlaySE(SE_PC_LOGIN);
|
||||
@@ -2673,7 +2674,7 @@ static void sub_81186E0(u8 taskId)
|
||||
case 1:
|
||||
PlaySE(SE_TOY_C);
|
||||
case 2:
|
||||
sub_811BECC(data);
|
||||
ScheduleUnionRoomPlayerRefresh(data);
|
||||
break;
|
||||
case 4:
|
||||
data->state = 11;
|
||||
@@ -2682,7 +2683,7 @@ static void sub_81186E0(u8 taskId)
|
||||
sub_80FB008(0x53, sub_811B2D8(data), 0);
|
||||
break;
|
||||
}
|
||||
sub_811BEDC(data);
|
||||
HandleUnionRoomPlayerRefresh(data);
|
||||
}
|
||||
break;
|
||||
case 23:
|
||||
@@ -2750,7 +2751,7 @@ static void sub_81186E0(u8 taskId)
|
||||
if (gReceivedRemoteLinkPlayers == 0)
|
||||
{
|
||||
sub_811B258(FALSE);
|
||||
sub_811C028(taskData[0], taskData[1], data->field_0);
|
||||
UpdateUnionGroupMemberFacing(taskData[0], taskData[1], data->field_0);
|
||||
data->state = 2;
|
||||
}
|
||||
break;
|
||||
@@ -3072,7 +3073,7 @@ static void sub_81186E0(u8 taskId)
|
||||
Free(data->field_C);
|
||||
Free(data->field_4);
|
||||
DestroyTask(data->field_20);
|
||||
sub_811BB40(data->spriteIds);
|
||||
DestroyGroupMemberObjects(data->spriteIds);
|
||||
data->state = 17;
|
||||
break;
|
||||
case 17:
|
||||
@@ -3082,7 +3083,7 @@ static void sub_81186E0(u8 taskId)
|
||||
case 18:
|
||||
if (!UpdatePaletteFade())
|
||||
{
|
||||
sub_811BA78();
|
||||
DeleteUnionObjWorkAndStopTask();
|
||||
DestroyTask(taskId);
|
||||
Free(sUnionRoomMain.uRoom);
|
||||
sub_81179A4();
|
||||
@@ -3273,7 +3274,7 @@ static void sub_81186E0(u8 taskId)
|
||||
if (PrintOnTextbox(&data->textState, gStringVar4))
|
||||
{
|
||||
sub_811B258(TRUE);
|
||||
sub_811C028(taskData[0], taskData[1], data->field_0);
|
||||
UpdateUnionGroupMemberFacing(taskData[0], taskData[1], data->field_0);
|
||||
data->state = 4;
|
||||
}
|
||||
break;
|
||||
@@ -4071,7 +4072,7 @@ static void sub_811A910(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * arg3, u8
|
||||
}
|
||||
}
|
||||
|
||||
static bool32 sub_811A9B8(void)
|
||||
static bool32 PlayerIsTalkingToUnionRoomAide(void)
|
||||
{
|
||||
s16 x, y;
|
||||
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
|
||||
|
||||
@@ -102,7 +102,7 @@ static void sub_811C1B4(void)
|
||||
TransferPlttBuffer();
|
||||
}
|
||||
|
||||
void sub_811C1C8(void)
|
||||
void CB2_UnionRoomBattle(void)
|
||||
{
|
||||
switch (gMain.state)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user