func_8005DE9C OK func_8005D8AC disassembled

This commit is contained in:
mzxrules 2020-04-03 18:04:45 -04:00
parent 347c03000d
commit d0e076778e
3 changed files with 67 additions and 50 deletions

View File

@ -17,11 +17,6 @@ glabel D_8013ABDC
# EUC-JP: | Index exceeded and cannot be added
.balign 4
glabel D_8013AC18
.asciz "CollisionCheck_setOCLine():\n"
# EUC-JP: | Index exceeded and cannot be added
.balign 4
.text
glabel func_8005DD5C
/* AD4EFC 8005DD5C 27BDFFE0 */ addiu $sp, $sp, -0x20
@ -112,44 +107,3 @@ glabel func_8005DD5C
/* AD5030 8005DE90 8FB10018 */ lw $s1, 0x18($sp)
/* AD5034 8005DE94 03E00008 */ jr $ra
/* AD5038 8005DE98 27BD0020 */ addiu $sp, $sp, 0x20
/* AD503C 8005DE9C 27BDFFE8 */ addiu $sp, $sp, -0x18
/* AD5040 8005DEA0 AFBF0014 */ sw $ra, 0x14($sp)
/* AD5044 8005DEA4 AFA40018 */ sw $a0, 0x18($sp)
/* AD5048 8005DEA8 AFA60020 */ sw $a2, 0x20($sp)
/* AD504C 8005DEAC 0C03034A */ jal func_800C0D28
/* AD5050 8005DEB0 AFA5001C */ sw $a1, 0x1c($sp)
/* AD5054 8005DEB4 24010001 */ li $at, 1
/* AD5058 8005DEB8 14410003 */ bne $v0, $at, .L8005DEC8
/* AD505C 8005DEBC 8FA7001C */ lw $a3, 0x1c($sp)
/* AD5060 8005DEC0 10000016 */ b .L8005DF1C
/* AD5064 8005DEC4 2402FFFF */ li $v0, -1
.L8005DEC8:
/* AD5068 8005DEC8 8FA40018 */ lw $a0, 0x18($sp)
/* AD506C 8005DECC 8FA50020 */ lw $a1, 0x20($sp)
/* AD5070 8005DED0 0C0174E9 */ jal func_8005D3A4
/* AD5074 8005DED4 AFA7001C */ sw $a3, 0x1c($sp)
/* AD5078 8005DED8 8FA7001C */ lw $a3, 0x1c($sp)
/* AD507C 8005DEDC 3C048014 */ lui $a0, %hi(D_8013AC18) # $a0, 0x8014
/* AD5080 8005DEE0 8FAE0020 */ lw $t6, 0x20($sp)
/* AD5084 8005DEE4 8CE3028C */ lw $v1, 0x28c($a3)
/* AD5088 8005DEE8 28610003 */ slti $at, $v1, 3
/* AD508C 8005DEEC 14200005 */ bnez $at, .L8005DF04
/* AD5090 8005DEF0 00037880 */ sll $t7, $v1, 2
/* AD5094 8005DEF4 0C00084C */ jal osSyncPrintf
/* AD5098 8005DEF8 2484AC18 */ addiu $a0, %lo(D_8013AC18) # addiu $a0, $a0, -0x53e8
/* AD509C 8005DEFC 10000007 */ b .L8005DF1C
/* AD50A0 8005DF00 2402FFFF */ li $v0, -1
.L8005DF04:
/* AD50A4 8005DF04 00EFC021 */ addu $t8, $a3, $t7
/* AD50A8 8005DF08 AF0E0290 */ sw $t6, 0x290($t8)
/* AD50AC 8005DF0C 8CF9028C */ lw $t9, 0x28c($a3)
/* AD50B0 8005DF10 00601025 */ move $v0, $v1
/* AD50B4 8005DF14 27280001 */ addiu $t0, $t9, 1
/* AD50B8 8005DF18 ACE8028C */ sw $t0, 0x28c($a3)
.L8005DF1C:
/* AD50BC 8005DF1C 8FBF0014 */ lw $ra, 0x14($sp)
/* AD50C0 8005DF20 27BD0018 */ addiu $sp, $sp, 0x18
/* AD50C4 8005DF24 03E00008 */ jr $ra
/* AD50C8 8005DF28 00000000 */ nop

View File

@ -784,8 +784,8 @@ typedef struct
/* 0x0D0 */ Collider* colAc[60];
/* 0x1C0 */ s32 colOcCount;
/* 0x1C4 */ Collider* colOc[50];
/* 0x28C */ s32 unkCount;
/* 0x290 */ Collider* unk290[3];
/* 0x28C */ s32 colOcLineCount;
/* 0x290 */ Collider* colOcLine[3];
} CollisionCheckContext; // size = 0x29C SubGlobalContext11E60

View File

@ -923,7 +923,12 @@ s32 func_8005D1E0(GlobalContext* globalCtx, Collider* collision)
#pragma GLOBAL_ASM("asm/non_matchings/code/z_collision_check/func_8005D334.s")
s32 func_8005D3A4(GlobalContext* globalContext, UNK_PTR line);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_collision_check/func_8005D3A4.s")
//s32 func_8005D3A4(s32 arg0, void* arg1) {
// arg1->unk18 = (u16)(arg1->unk18 & 0xFFFE);
// return 1;
//}
void func_8005D40C(GlobalContext* globalCtx, CollisionCheckContext* check);
void func_8005D3BC(GlobalContext* globalCtx, CollisionCheckContext* check) {
@ -947,7 +952,7 @@ void func_8005D40C(GlobalContext* globalCtx, CollisionCheckContext* check) {
check->colAtCount = 0;
check->colAcCount = 0;
check->colOcCount = 0;
check->unkCount = 0;
check->colOcLineCount = 0;
for (c = check->colAt; c < check->colAt + 50; c++) {
*c = NULL;
}
@ -960,7 +965,7 @@ void func_8005D40C(GlobalContext* globalCtx, CollisionCheckContext* check) {
*c = NULL;
}
for (c = check->unk290; c < check->unk290 + 3; c++) {
for (c = check->colOcLine; c < check->colOcLine + 3; c++) {
*c = NULL;
}
}
@ -1026,8 +1031,49 @@ s32 Actor_CollisionCheck_SetAT(GlobalContext* globalCtx, CollisionCheckContext*
return index;
}
#ifdef NON_MATCHING
//CollisionCheck_setAT_SAC()
s32 func_8005D8AC(GlobalContext* globalCtx, CollisionCheckContext* check, Collider* collider, s32 index) {
s32 result;
if (collider->type >= 4) {
__assert("pcl_obj->data_type <= CL_DATA_LBL_SWRD", "../z_collision_check.c", 3037);
}
//index = (s32)index;
result = index;
if (func_800C0D28(globalCtx) == 1) {
return -1;
}
//index = temp_a3;
(*&D_8011DEF8[collider->type])(globalCtx, collider);
if (collider->actor != NULL) {
if (collider->actor->update == NULL) {
return -1;
}
}
if (check->unk2 & 1) {
if (index >= check->colAtCount) {
osSyncPrintf("CollisionCheck_setAT_SAC():全データ数より大きいところに登録しようとしている。\n");
//EUC-JP: 全データ数より大きいところに登録しようとしている。 | You are trying to register a location that is larger than the total number of data.
return -1;
}
result = index;
check->colAt[index] = collider;
}
else {
if (check->colAtCount >= 50) {
osSyncPrintf("CollisionCheck_setAT():インデックスがオーバーして追加不能\n");
return -1;
}
result = check->colAtCount;
check->colAt[check->colAtCount++] = collider;
}
return result;
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_collision_check/func_8005D8AC.s")
#endif // DEBUG
s32 Actor_CollisionCheck_SetAC(GlobalContext* globalCtx, CollisionCheckContext* check, Collider* collider) {
s32 index;
@ -1092,6 +1138,23 @@ s32 Actor_CollisionCheck_SetOT(GlobalContext* globalCtx, CollisionCheckContext*
#pragma GLOBAL_ASM("asm/non_matchings/code/z_collision_check/func_8005DD5C.s")
s32 func_8005DE9C(GlobalContext* globalCtx, CollisionCheckContext* check, UNK_PTR collider) {
s32 index;
if (func_800C0D28(globalCtx) == 1) {
return -1;
}
func_8005D3A4(globalCtx, collider);
if (check->colOcLineCount >= 3) {
osSyncPrintf("CollisionCheck_setOCLine():インデックスがオーバして追加不能\n");
return -1;
}
index = check->colOcLineCount;
check->colOcLine[check->colOcLineCount++] = collider;
return index;
}
s32 func_8005DF2C(ColliderBody* body) {
if ((body->toucherFlags & 1) == 0) {
return 1;