Skip to content

Commit 93c5131

Browse files
committed
bodyprog: func_80089A30
1 parent cd7952c commit 93c5131

2 files changed

Lines changed: 93 additions & 1 deletion

File tree

include/bodyprog/bodyprog.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,17 @@ typedef struct _s_8002AC04
216216
u32 field_C_28 : 3;
217217
u32 field_C_31 : 1;
218218
} func_80089DF0_data;
219+
struct
220+
{
221+
u8 funcIdx_4;
222+
u8 field_5_0 : 5;
223+
u32 field_5_5 : 1;
224+
u32 field_5_6 : 1;
225+
u32 field_5_7 : 1;
226+
u16 field_6;
227+
s32 field_8;
228+
u32 field_C;
229+
} func_80089A30_data;
219230
} field_4;
220231
} s_8002AC04;
221232
STATIC_ASSERT_SIZEOF(s_8002AC04, 16);

src/bodyprog/bodyprog_80085D78.c

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1950,7 +1950,88 @@ void func_800899BC(s_SysWork_2514* arg0, s32 arg1) // 0x800899BC
19501950
}
19511951
}
19521952

1953-
INCLUDE_ASM("asm/bodyprog/nonmatchings/bodyprog_80085D78", func_80089A30); // 0x80089A30
1953+
bool func_80089A30(s_SysWork_2514* arg0, s_func_8009ECCC* arg1, s_8002AC04* arg2, u32* arg3) // 0x80089A30
1954+
{
1955+
s32 temp_s3;
1956+
s_SysWork_2514_18* next;
1957+
s_SysWork_2514_18* head;
1958+
s_SysWork_2514_18* current;
1959+
s_func_8009ECCC* ptr;
1960+
1961+
ptr = arg1;
1962+
1963+
if (arg0 == NULL)
1964+
{
1965+
return false;
1966+
}
1967+
1968+
if (arg2 == NULL)
1969+
{
1970+
return false;
1971+
}
1972+
1973+
if (arg2->field_4.funcIdx_4 != 0)
1974+
{
1975+
return false;
1976+
}
1977+
1978+
temp_s3 = arg2->field_4.func_80089A30_data.field_8;
1979+
1980+
if (arg2->field_4.func_80089A30_data.field_5_5 || arg2->field_4.func_80089A30_data.field_5_6)
1981+
{
1982+
current = arg0->head_18.next_0;
1983+
head = &arg0->head_18;
1984+
1985+
if (arg2->field_4.func_80089A30_data.field_5_5)
1986+
{
1987+
while (current != head)
1988+
{
1989+
if (current->field_C == temp_s3)
1990+
{
1991+
if (ptr != NULL)
1992+
{
1993+
ptr->field_10 = NULL;
1994+
}
1995+
return false;
1996+
}
1997+
current = current->next_0;
1998+
}
1999+
}
2000+
else
2001+
{
2002+
while (current != head)
2003+
{
2004+
next = current->next_0;
2005+
if ((ptr == NULL || current != ptr) && current->field_C == temp_s3)
2006+
{
2007+
func_8009EC1C(arg0, current);
2008+
}
2009+
current = next;
2010+
}
2011+
}
2012+
}
2013+
2014+
if (ptr == NULL)
2015+
{
2016+
ptr = func_8009ECCC(arg0, arg2->field_4.func_80089A30_data.field_C);
2017+
if (ptr == NULL)
2018+
{
2019+
return false;
2020+
}
2021+
ptr->field_14_16 = *arg3;
2022+
}
2023+
2024+
ptr->field_10 = arg2->field_0;
2025+
ptr->field_14_0 = 0;
2026+
ptr->field_C = temp_s3;
2027+
2028+
if (arg2->field_4.func_80089A30_data.field_5_7)
2029+
{
2030+
ptr->field_1C = arg2->field_4.func_80089A30_data.field_6;
2031+
}
2032+
2033+
return true;
2034+
}
19542035

19552036
bool func_80089BB8(s_SysWork_2514* arg0, s_func_8009ECCC* arg1, s_8002AC04* arg2, u32* arg3) // 0x80089BB8
19562037
{

0 commit comments

Comments
 (0)