core2/levelspecificflags.c done
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
<text x="22.0" y="14">core2</text>
|
||||
</g>
|
||||
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
|
||||
<text x="78.5" y="15" fill="#010101" fill-opacity=".3">82.1806%</text>
|
||||
<text x="77.5" y="14">82.1806%</text>
|
||||
<text x="78.5" y="15" fill="#010101" fill-opacity=".3">82.2258%</text>
|
||||
<text x="77.5" y="14">82.2258%</text>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
@@ -17,7 +17,7 @@
|
||||
<text x="75.0" y="14">Banjo-Kazooie (us.v10)</text>
|
||||
</g>
|
||||
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
|
||||
<text x="184.5" y="15" fill="#010101" fill-opacity=".3">84.7583%</text>
|
||||
<text x="183.5" y="14">84.7583%</text>
|
||||
<text x="184.5" y="15" fill="#010101" fill-opacity=".3">84.7842%</text>
|
||||
<text x="183.5" y="14">84.7842%</text>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -1165,16 +1165,17 @@ void func_80328478(f32 arg0[3], f32 arg1, f32 arg2){
|
||||
#ifndef NONMATCHING
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_9E370/func_80328508.s")
|
||||
#else
|
||||
int func_80328508(Actor * arg0, u32 arg1){
|
||||
bool func_80328508(Actor * arg0, u32 arg1){
|
||||
ActorAnimationInfo *animInfo;
|
||||
|
||||
arg0->state = arg1;
|
||||
if(!arg0->unk18)
|
||||
if(arg0->unk18 == NULL)
|
||||
return 0;
|
||||
else{
|
||||
|
||||
animInfo = &arg0->unk18[arg1];
|
||||
if(animInfo->index){
|
||||
if(!arg0->animctrl){
|
||||
|
||||
if(animInfo->index != NULL){
|
||||
if(arg0->animctrl == NULL){
|
||||
arg0->animctrl = animctrl_new(0);
|
||||
animctrl_reset(arg0->animctrl);
|
||||
}
|
||||
@@ -1189,7 +1190,7 @@ int func_80328508(Actor * arg0, u32 arg1){
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@@ -4,33 +4,68 @@
|
||||
|
||||
void levelSpecificFlags_set(arg0, arg1);
|
||||
|
||||
|
||||
//levelSpecificFlags
|
||||
u32 D_80383320;
|
||||
u32 D_80383324;
|
||||
u8 D_80383328[8];
|
||||
/* .bss */
|
||||
struct{
|
||||
u32 unk0;
|
||||
u32 unk4;
|
||||
u8 unk8[8];
|
||||
}D_80383320;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core2/levelspecificflags/_levelSpecificFlags_calcCRC1.s")
|
||||
/* .code */
|
||||
u32 _levelSpecificFlags_calcCRC1(void) {
|
||||
s32 scrambled_ptr;
|
||||
u8 *ptr;
|
||||
u32 var_a3;
|
||||
u32 var_v1;
|
||||
u32 var_v0;
|
||||
|
||||
var_v1 = 0x05C9EC23;
|
||||
scrambled_ptr = (((s32) &D_80383320.unk8 & 0x55555555) * 2) + ((u32) ((s32) &D_80383320.unk8 & 0xAAAAAAAA) >> 1);
|
||||
ptr = (((scrambled_ptr & 0x55555555) * 2) | ((u32) (scrambled_ptr & 0xAAAAAAAA) >> 1));
|
||||
var_v0 = 8;
|
||||
for(var_a3 = 0; var_a3 < var_v0; var_a3++){
|
||||
var_v1 = ((((var_v1 + ptr[var_a3]) & 0x7F) << 0x14) ^ (var_v1 >> 7)) ^ (ptr[var_a3] * 0xD);
|
||||
}
|
||||
return var_v1;
|
||||
}
|
||||
|
||||
void _levelSpecificFlags_updateCRC1(void) {
|
||||
s32 temp_a0;
|
||||
|
||||
temp_a0 = (s32) &D_80383320 ^ ((((s32) &D_80383320 >> 8) & 0xFF0000) + (((s32) &D_80383320 & 0xFF) << 8));
|
||||
temp_a0 = (s32) &D_80383320.unk0 ^ ((((s32) &D_80383320.unk0 >> 8) & 0xFF0000) + (((s32) &D_80383320.unk0 & 0xFF) << 8));
|
||||
*(u32 *)((((u32) (temp_a0 & 0xFF000000) >> 8) + ((temp_a0 << 8) & 0xFF00)) ^ temp_a0) = _levelSpecificFlags_calcCRC1();
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core2/levelspecificflags/_levelSpecificFlags_calcCRC2.s")
|
||||
s32 _levelSpecificFlags_calcCRC2(void) {
|
||||
s32 temp_t7;
|
||||
s32 var_v1;
|
||||
u32 var_a2;
|
||||
u8 *scrambled_ptr;
|
||||
u8 temp_t9;
|
||||
u32 var_v0;
|
||||
|
||||
var_v1 = 0x03F2F59A;
|
||||
var_v0 = 8;
|
||||
scrambled_ptr = ((((((((s32) &D_80383320.unk8 >> 0x10) & 0xFFFF) ^ 0x195D) * 0x2F) / 0x2F) << 0x10)
|
||||
+ (((((s32) &D_80383320.unk8 & 0xFFFF) ^ 0xA832) << 0xD) / 0x2000))
|
||||
^ 0x195DA832;
|
||||
for(var_a2 = 0; var_a2 < var_v0; var_a2++){
|
||||
var_v1 += (var_a2 + 7) * scrambled_ptr[var_a2];
|
||||
};
|
||||
return var_v1;
|
||||
}
|
||||
|
||||
void _levelSpecificFlags_updateCRC2(void) {
|
||||
*(u32 *)(((((s32) (((((s32) &D_80383324 >> 0x10) & 0xFFFF) ^ 0x195D) * 0x2F) / 0x2F) << 0x10) + ((s32) ((((s32) &D_80383324 & 0xFFFF) ^ 0xA832) << 0xD) / 0x2000)) ^ 0x195DA832) = _levelSpecificFlags_calcCRC2();
|
||||
*(u32 *)(((((s32) (((((s32) &D_80383320.unk4 >> 0x10) & 0xFFFF) ^ 0x195D) * 0x2F) / 0x2F) << 0x10) + ((s32) ((((s32) &D_80383320.unk4 & 0xFFFF) ^ 0xA832) << 0xD) / 0x2000)) ^ 0x195DA832) = _levelSpecificFlags_calcCRC2();
|
||||
}
|
||||
|
||||
s32 levelSpecificFlags_get(s32 i){
|
||||
return func_803200A4(D_80383328, i);
|
||||
return func_803200A4(D_80383320.unk8, i);
|
||||
}
|
||||
|
||||
s32 levelSpecificFlags_getN(s32 i, s32 n){
|
||||
return func_803200E4(D_80383328, i, n);
|
||||
return func_803200E4(D_80383320.unk8, i, n);
|
||||
}
|
||||
|
||||
s32 levelSpecificFlags_getSet(s32 arg0, s32 arg1){
|
||||
@@ -39,16 +74,23 @@ s32 levelSpecificFlags_getSet(s32 arg0, s32 arg1){
|
||||
return retVal;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core2/levelspecificflags/levelSpecificFlags_clear.s")
|
||||
void levelSpecificFlags_clear(void){
|
||||
s32 i;
|
||||
for(i = 0; i < 8; i++){
|
||||
D_80383320.unk8[i] = 0;
|
||||
}
|
||||
_levelSpecificFlags_updateCRC1();
|
||||
_levelSpecificFlags_updateCRC2();
|
||||
}
|
||||
|
||||
void levelSpecificFlags_set(s32 index, s32 val){
|
||||
func_8032015C(&D_80383328, index, val);
|
||||
func_8032015C(&D_80383320.unk8, index, val);
|
||||
_levelSpecificFlags_updateCRC1();
|
||||
_levelSpecificFlags_updateCRC2();
|
||||
}
|
||||
|
||||
void levelSpecificFlags_setN(s32 index, s32 val, s32 n){
|
||||
func_803201C8(&D_80383328, index, val, n);
|
||||
func_803201C8(&D_80383320.unk8, index, val, n);
|
||||
_levelSpecificFlags_updateCRC1();
|
||||
_levelSpecificFlags_updateCRC2();
|
||||
}
|
||||
@@ -56,10 +98,10 @@ void levelSpecificFlags_setN(s32 index, s32 val, s32 n){
|
||||
s32 levelSpecificFlags_validateCRC1(void) {
|
||||
s32 temp_a0;
|
||||
|
||||
temp_a0 = (((s32) &D_80383320 & 0x55555555) * 2) + ((u32) ((s32) &D_80383320 & 0xAAAAAAAA) >> 1);
|
||||
temp_a0 = (((s32) &D_80383320.unk0 & 0x55555555) * 2) + ((u32) ((s32) &D_80383320.unk0 & 0xAAAAAAAA) >> 1);
|
||||
return _levelSpecificFlags_calcCRC1() == *(u32*)(((temp_a0 & 0x55555555) * 2) | ((u32) (temp_a0 & 0xAAAAAAAA) >> 1));
|
||||
}
|
||||
|
||||
s32 levelSpecificFlags_validateCRC2(void){
|
||||
return _levelSpecificFlags_calcCRC2() == *(u32 *)((s32)&D_80383324 ^ 0x7EDDF5F4 ^ 0x7BEF9D80 ^ 0x5326874);
|
||||
return _levelSpecificFlags_calcCRC2() == *(u32 *)((s32)&D_80383320.unk4 ^ 0x7EDDF5F4 ^ 0x7BEF9D80 ^ 0x5326874);
|
||||
}
|
@@ -312,7 +312,7 @@ segments:
|
||||
- [0x9A580, c, code_9A580] #DONE
|
||||
- [0x9A740, c, code_9A740] #DONE
|
||||
- [0x9A9D0, c, code_9A9D0] #DONE
|
||||
- [0x9AD00, c, levelspecificflags]
|
||||
- [0x9AD00, c, levelspecificflags] #DONE
|
||||
- [0x9B180, c, code_9B180] #DONE
|
||||
- [0x9B650, c, code_9B650] #DONE
|
||||
- [0x9B990, c, code_9B990] #DONE
|
||||
|
Reference in New Issue
Block a user