The first commit
This commit is contained in:
327
src/core2/code_C89C0.c
Normal file
327
src/core2/code_C89C0.c
Normal file
@@ -0,0 +1,327 @@
|
||||
#include <ultra64.h>
|
||||
#include "functions.h"
|
||||
#include "variables.h"
|
||||
|
||||
extern void func_8032F64C(f32[3], s32);
|
||||
extern void func_80323240(struct56s *, f32, f32[3]);
|
||||
extern f32 func_80323F74(struct56s *, f32, f32);
|
||||
extern f32 func_80256AB4(f32, f32, f32, f32);
|
||||
|
||||
typedef struct {
|
||||
s32 unk0;
|
||||
s32 unk4; //bool
|
||||
s32 unk8;
|
||||
f32 unkC[3];
|
||||
f32 unk18;
|
||||
s32 unk1C;
|
||||
f32 unk20;
|
||||
f32 unk24;
|
||||
f32 unk28;
|
||||
f32 unk2C;
|
||||
}Struct_core2_C89C0_1;
|
||||
|
||||
typedef struct {
|
||||
ActorMarker *unk0;
|
||||
Struct_core2_C89C0_1 *unk4;
|
||||
f32 unk8[3];
|
||||
f32 unk14;
|
||||
f32 unk18;
|
||||
f32 unk1C;
|
||||
f32 unk20;
|
||||
f32 unk24[3];
|
||||
f32 unk30;
|
||||
f32 unk34;
|
||||
f32 unk38;
|
||||
}Struct_core2_C89C0_0;
|
||||
|
||||
/* .rodata */
|
||||
extern f32 D_80379300;
|
||||
extern f32 D_80379304;
|
||||
extern f32 D_80379308;
|
||||
extern f64 D_80379310;
|
||||
extern f32 D_80379318;
|
||||
extern f64 D_80379320;
|
||||
extern f32 D_80379328;
|
||||
extern f32 D_8037932C;
|
||||
extern f32 D_80379330;
|
||||
|
||||
/* .bss */
|
||||
extern struct {
|
||||
void *unk0; //2D_fish_bin
|
||||
void *unk4; //green_ball_bin
|
||||
Struct_core2_C89C0_1 *unk8;
|
||||
Struct_core2_C89C0_1 *unkC;
|
||||
Struct_core2_C89C0_1 *unk10;
|
||||
Struct_core2_C89C0_0 *unk14;
|
||||
Struct_core2_C89C0_0 *unk18;
|
||||
Struct_core2_C89C0_0 *unk1C;
|
||||
}D_80386150;
|
||||
|
||||
/* .code */
|
||||
void func_8034F950(Struct_core2_C89C0_0 *arg0) {
|
||||
f32 sp7C[3];
|
||||
f32 sp70[3];
|
||||
f32 temp_f0;
|
||||
s32 i;
|
||||
|
||||
sp7C[0] = arg0->unk4->unkC[0] + arg0->unk24[0];
|
||||
sp7C[1] = arg0->unk4->unkC[1] + arg0->unk24[1];
|
||||
sp7C[2] = arg0->unk4->unkC[2] + arg0->unk24[2];
|
||||
sp7C[0] -= arg0->unk8[0];
|
||||
sp7C[1] -= arg0->unk8[1];
|
||||
sp7C[2] -= arg0->unk8[2];
|
||||
|
||||
for(i = 0; i < 3; i++){
|
||||
sp7C[i] += randf2(-40.0f, 40.0f);
|
||||
if (i != 1) {
|
||||
arg0->unk24[i] += randf2(-40.0f, 40.0f);
|
||||
arg0->unk24[i] = (arg0->unk24[i] > 100.0f) ? 100.0f : arg0->unk24[i];
|
||||
arg0->unk24[i] = (arg0->unk24[i] < -100.0f) ? -100.0f : arg0->unk24[i];
|
||||
}
|
||||
}
|
||||
temp_f0 = gu_sqrtf(sp7C[0]*sp7C[0] + sp7C[1]*sp7C[1] + sp7C[2]*sp7C[2]);
|
||||
arg0->unk34 = (temp_f0 > 200.0f) ? 1.0f : (f32)(temp_f0 / 200.0);
|
||||
sp70[0] = -1.0f;
|
||||
sp70[1] = 0.0f;
|
||||
sp70[2] = 0.0f;
|
||||
ml_vec3f_yaw_rotate_copy(sp70, sp70, arg0->unk14);
|
||||
ml_vec3f_normalize(sp7C);
|
||||
if ((sp70[0]*sp7C[0] + sp70[1]*sp7C[1] + sp70[2]*sp7C[2]) < 0.0f) {
|
||||
arg0->unk34 = randf2(D_80379300, D_80379304);
|
||||
arg0->unk30 = randf2(0.5f, 1.0f);
|
||||
} else {
|
||||
arg0->unk30 = (randf2(D_80379308, 1.0f) * func_80256AB4(sp70[0], sp70[2], sp7C[0], sp7C[2]));
|
||||
}
|
||||
arg0->unk30 = (arg0->unk30 > 1.0f) ? 1.0f : arg0->unk30;
|
||||
arg0->unk30 = (arg0->unk30 < -1.0f) ? -1.0f : arg0->unk30;
|
||||
|
||||
if (sp7C[1] > 0.0f) {
|
||||
arg0->unk38 = (f32) (sp7C[1] / 10.0f);
|
||||
if (arg0->unk38 > 1.0f) {
|
||||
arg0->unk38 = 1.0f;
|
||||
}
|
||||
} else if (sp7C[1] < 0.0f) {
|
||||
arg0->unk38 = (f32) (sp7C[1] / 10.0f);
|
||||
if (arg0->unk38 < -1.0f) {
|
||||
arg0->unk38 = -1.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Actor* func_8034FCDC(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx) {
|
||||
f32 sp2C[3];
|
||||
Struct_core2_C89C0_0 *sp28;
|
||||
|
||||
sp28 = D_80386150.unk14 + marker->actrArrayIdx;
|
||||
if (sp28->unk4->unk4 == 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
sp2C[0] = 0.0f;
|
||||
sp2C[1] = sp28->unk14;
|
||||
sp2C[2] = 0.0f;
|
||||
set_model_render_mode(2);
|
||||
func_803391A4(gfx, mtx, sp28->unk8, sp2C, sp28->unk18 * D_80379310, NULL, D_80386150.unk0);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifndef NONMATCHING
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_C89C0/func_8034FDA0.s")
|
||||
#else
|
||||
void func_8034FDA0(s32 arg0) {
|
||||
s32 sp34;
|
||||
s32 sp24;
|
||||
|
||||
if (D_80386150.unkC == D_80386150.unk10) {
|
||||
sp34 = D_80386150.unkC - D_80386150.unk8;
|
||||
sp24 = sp34 * 2;
|
||||
D_80386150.unk8 = (Struct_core2_C89C0_1*) realloc(D_80386150.unk8, sp24 * sizeof(Struct_core2_C89C0_1));
|
||||
D_80386150.unkC = D_80386150.unk8 + sp34;
|
||||
D_80386150.unk10 = D_80386150.unk8 + sp24;
|
||||
}
|
||||
D_80386150.unkC->unk0 = 1;
|
||||
D_80386150.unkC->unk4 = 0;
|
||||
D_80386150.unkC->unk8 = 0x14;
|
||||
D_80386150.unkC->unk18 = 1000.0f;
|
||||
D_80386150.unkC->unk1C = arg0;
|
||||
D_80386150.unkC->unk20 = 10.0f;
|
||||
D_80386150.unkC->unk24 = 20.0f;
|
||||
D_80386150.unkC->unk28 = D_80379318;
|
||||
D_80386150.unkC->unk2C = 0.0f;
|
||||
func_80323240(func_80342038(D_80386150.unkC->unk1C), D_80386150.unkC->unk2C, D_80386150.unkC->unkC);
|
||||
D_80386150.unkC++;
|
||||
}
|
||||
#endif
|
||||
|
||||
void func_8034FEE0(Struct_core2_C89C0_1 *arg0) {
|
||||
s32 sp2C;
|
||||
s32 sp20;
|
||||
|
||||
if (D_80386150.unk18 == D_80386150.unk1C) {
|
||||
sp2C = D_80386150.unk18 - D_80386150.unk14;
|
||||
sp20 = sp2C * 2;
|
||||
D_80386150.unk14 = (Struct_core2_C89C0_0 *) realloc(D_80386150.unk14, sp20 * sizeof(Struct_core2_C89C0_0));
|
||||
D_80386150.unk18 = D_80386150.unk14 + sp2C;
|
||||
D_80386150.unk1C = D_80386150.unk14 + sp20;
|
||||
}
|
||||
D_80386150.unk18->unk4 = arg0;
|
||||
D_80386150.unk18->unk8[0] = arg0->unkC[0];
|
||||
D_80386150.unk18->unk8[1] = arg0->unkC[1];
|
||||
D_80386150.unk18->unk8[2] = arg0->unkC[2];
|
||||
D_80386150.unk18->unk14 = 0.0f;
|
||||
D_80386150.unk18->unk18 = randf2(1.0f, 2.0f);
|
||||
D_80386150.unk18->unk1C = 0.0f;
|
||||
D_80386150.unk18->unk20 = 0.0f;
|
||||
D_80386150.unk18->unk24[0] = randf2(-100.0f, 100.0f);
|
||||
D_80386150.unk18->unk24[1] = randf2(-100.0f, 100.0f);
|
||||
D_80386150.unk18->unk24[2] = randf2(-100.0f, 100.0f);
|
||||
D_80386150.unk18->unk0 = func_8032FBE4(D_80386150.unk18->unk8, &func_8034FCDC, 1, 0x46);
|
||||
D_80386150.unk18->unk0->collidable = FALSE;
|
||||
D_80386150.unk18->unk0->actrArrayIdx = D_80386150.unk18 - D_80386150.unk14;
|
||||
D_80386150.unk18++;
|
||||
}
|
||||
|
||||
void func_803500D8(Gfx **gfx, Mtx **mtx, Vtx **vtx){}
|
||||
|
||||
void func_803500E8(void) {
|
||||
s32 i;
|
||||
Struct_core2_C89C0_0 *var_s0;
|
||||
|
||||
if (D_80386150.unk0 != NULL) {
|
||||
for(var_s0 = D_80386150.unk14; var_s0 < D_80386150.unk18; var_s0++) {
|
||||
marker_free(var_s0->unk0);
|
||||
}
|
||||
assetcache_release(D_80386150.unk0);
|
||||
assetcache_release(D_80386150.unk4);
|
||||
free(D_80386150.unk8);
|
||||
free(D_80386150.unk14);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifndef NONMATCHING
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_C89C0/func_80350174.s")
|
||||
#else
|
||||
void func_80350174(void) {
|
||||
s32 temp_t6;
|
||||
s32 temp_t7;
|
||||
s32 temp_v0_3;
|
||||
s32 var_s0;
|
||||
s32 var_s0_2;
|
||||
void *temp_v0;
|
||||
void *temp_v0_2;
|
||||
s32 i;
|
||||
|
||||
|
||||
for(i = 0x31; i != 0x36; i++){
|
||||
if (func_80341F64(i))
|
||||
break;
|
||||
}
|
||||
if(i >= 0x36){
|
||||
D_80386150.unk0 = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
D_80386150.unk0 = assetcache_get(0x87C); //ASSET_87C_2D_FISH
|
||||
D_80386150.unk4 = assetcache_get(0x7BC); //ASSET_7BC_GREEN_BALL
|
||||
D_80386150.unk8 = malloc(0x60);
|
||||
D_80386150.unkC = D_80386150.unk8;
|
||||
D_80386150.unk10 = (s32)D_80386150.unk8 + 0x60;
|
||||
D_80386150.unk14 = malloc(2*sizeof(Struct_core2_C89C0_0));
|
||||
D_80386150.unk18 = D_80386150.unk14;
|
||||
D_80386150.unk1C = (s32)D_80386150.unk14 + 2*sizeof(Struct_core2_C89C0_0);
|
||||
for(i = 0x31; i < 0x36; i++){
|
||||
temp_v0_3 = func_80341F2C(i);
|
||||
if (temp_v0_3 >= 0)
|
||||
func_8034FDA0(temp_v0_3);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef NONMATCHING
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_C89C0/func_80350250.s")
|
||||
#else
|
||||
void func_80350250(void) {
|
||||
f32 sp7C[3];
|
||||
f32 sp70[3];
|
||||
f32 temp_f22;
|
||||
Struct_core2_C89C0_1 *var_s0;
|
||||
Struct_core2_C89C0_0 *var_s0_2;
|
||||
|
||||
temp_f22 = time_getDelta();
|
||||
if ((D_80386150.unk0 != 0) && (func_80334904() == 2)) {
|
||||
player_getPosition(sp7C);
|
||||
for(var_s0 = D_80386150.unk8; var_s0 < D_80386150.unkC; var_s0++) {
|
||||
var_s0->unk4 = (ml_vec3f_distance(var_s0->unkC, sp7C) < 2000.0f);
|
||||
if (var_s0->unk4) {
|
||||
if (var_s0->unk8 > 0) {
|
||||
var_s0->unk28 -= temp_f22;
|
||||
if (var_s0->unk28 <= 0.0f) {
|
||||
var_s0->unk28 = randf2(0.01f, 0.2f);
|
||||
func_8034FEE0((void *) var_s0);
|
||||
var_s0->unk8--;
|
||||
}
|
||||
}
|
||||
var_s0->unk18 = randf2(0.0f, 10000.0f);
|
||||
var_s0->unk24 -= temp_f22;
|
||||
if (var_s0->unk24 <= 0.0f) {
|
||||
var_s0->unk24 = randf2(10.0f, 20.0f);
|
||||
if (0.05 < var_s0->unk2C) {
|
||||
var_s0->unk2C -= 0.05;
|
||||
}
|
||||
}
|
||||
var_s0->unk20 = (f32) (var_s0->unk20 - temp_f22);
|
||||
if (var_s0->unk20 <= 0.0f) {
|
||||
if (var_s0->unk0 == 0) {
|
||||
var_s0->unk0 = (randf() >= 0.5) ? 1 : -1;
|
||||
var_s0->unk20 = randf2(20.0f, 40.0f);
|
||||
} else {
|
||||
var_s0->unk0 = 0;
|
||||
var_s0->unk20 = randf2(5.0f, 10.0f);
|
||||
}
|
||||
}
|
||||
var_s0->unk2C = func_80323F74(func_80342038(var_s0->unk1C), var_s0->unk2C, (f32) var_s0->unk0 * var_s0->unk18 * temp_f22);
|
||||
var_s0->unk2C = (var_s0->unk2C < 0.0f) ? 1.0f - var_s0->unk2C : var_s0->unk2C;
|
||||
var_s0->unk2C = (var_s0->unk2C >= 1.0f) ? var_s0->unk2C - 1.0f : var_s0->unk2C;
|
||||
func_80323240(func_80342038(var_s0->unk1C), var_s0->unk2C, var_s0->unkC);
|
||||
}
|
||||
}
|
||||
|
||||
for(var_s0_2 = D_80386150.unk14; var_s0_2 < D_80386150.unk18; var_s0_2++) {
|
||||
if (var_s0_2->unk4->unk4 != 0) {
|
||||
func_8034F950(var_s0_2);
|
||||
var_s0_2->unk1C += var_s0_2->unk34 * (3.0f - var_s0_2->unk18) * 100.0f * temp_f22;
|
||||
var_s0_2->unk20 += var_s0_2->unk38 * (3.0f - var_s0_2->unk18) * 20.0f * temp_f22;
|
||||
var_s0_2->unk14 += var_s0_2->unk30 * (3.0f - var_s0_2->unk18) * 180.0f * temp_f22;
|
||||
if (var_s0_2->unk1C > 0.0f) {
|
||||
var_s0_2->unk1C -= var_s0_2->unk1C * temp_f22;
|
||||
if (var_s0_2->unk1C < 0.0f) {
|
||||
var_s0_2->unk1C = 0.0f;
|
||||
}
|
||||
}
|
||||
var_s0_2->unk20 = var_s0_2->unk20 - var_s0_2->unk20 * temp_f22;
|
||||
sp70[0] = -var_s0_2->unk1C * temp_f22;
|
||||
sp70[1] = sp70[2] = 0.0f;
|
||||
ml_vec3f_yaw_rotate_copy(&sp70, &sp70, var_s0_2->unk14);
|
||||
var_s0_2->unk8[0] = var_s0_2->unk8[0] + sp70[0];
|
||||
var_s0_2->unk8[1] = var_s0_2->unk8[1] + sp70[1];
|
||||
var_s0_2->unk8[2] = var_s0_2->unk8[2] + sp70[2];
|
||||
var_s0_2->unk8[1] = var_s0_2->unk20 * temp_f22;
|
||||
func_8032F64C(var_s0_2->unk8, var_s0_2->unk0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void func_803506DC(void){
|
||||
s32 sp1C = D_80386150.unk8;
|
||||
s32 sp18 = D_80386150.unk14;
|
||||
D_80386150.unk8 = (Struct_core2_C89C0_1 *)defrag(sp1C);
|
||||
D_80386150.unkC = ((s32)D_80386150.unkC - (s32)sp1C) + (s32)D_80386150.unk8;
|
||||
D_80386150.unk10 = ((s32)D_80386150.unk10 - (s32)sp1C) + (s32)D_80386150.unk8;
|
||||
D_80386150.unk14 = (Struct_core2_C89C0_0 *)defrag(D_80386150.unk14);
|
||||
D_80386150.unk18 = ((s32)D_80386150.unk18 - (s32)sp18) + (s32)D_80386150.unk14;
|
||||
D_80386150.unk1C = ((s32)D_80386150.unk1C - (s32)sp18) + (s32)D_80386150.unk14;
|
||||
}
|
Reference in New Issue
Block a user