Rename tons of structs because we aren't using the z_ prefix anymore ;_;

This commit is contained in:
rozlette
2019-11-14 00:52:31 -06:00
parent b1938991fa
commit a09a799eef
15 changed files with 748 additions and 748 deletions
+11 -11
View File
@@ -6,23 +6,23 @@
// This file is most likely En_A_Obj
UNK_RET EnAObj_Init(void* a0, UNK_TYPE a1) {
z_ActorEnAObj* s0 = (z_ActorEnAObj*)a0;
ActorEnAObj* s0 = (ActorEnAObj*)a0;
s0->base.textId = ((s0->base.variable >> 8) & 0xFF) | 0x300;
s0->base.variable = (s0->base.variable & 0xFF) - 9;
Lib_ApplyActorInitVars((z_Actor*)s0, (z_ActorInitVar*)&D_801ADEAC);
Lib_ApplyActorInitVars((Actor*)s0, (ActorInitVar*)&D_801ADEAC);
func_800B3BA4(&s0->base.unkBC, 0, (UNK_PTR)&func_800B3FC0, 12);
Collision_InitCylinder(a1, &s0->collision, (z_Actor*)s0, &D_801ADE80);
Collision_CylinderMoveToActor((z_Actor*)s0, &s0->collision);
Collision_InitCylinder(a1, &s0->collision, (Actor*)s0, &D_801ADE80);
Collision_CylinderMoveToActor((Actor*)s0, &s0->collision);
s0->base.unkA0.unk16 = 255;
s0->update = (actor_func)EnAObj_Update1;
}
UNK_RET EnAObj_Fini(z_ActorEnAObj* a0, z_GlobalContext* a1) {
z_ColCylinder* a2 = &a0->collision;
UNK_RET EnAObj_Fini(ActorEnAObj* a0, GlobalContext* a1) {
ColCylinder* a2 = &a0->collision;
Collision_FiniCylinder(a1, a2);
}
UNK_RET EnAObj_Update1(z_ActorEnAObj* a0, UNK_TYPE a1) {
UNK_RET EnAObj_Update1(ActorEnAObj* a0, UNK_TYPE a1) {
s16 v0;
s32 v1;
if (func_800B84D0(a0, a1) != 0) {
@@ -36,18 +36,18 @@ UNK_RET EnAObj_Update1(z_ActorEnAObj* a0, UNK_TYPE a1) {
}
}
UNK_RET EnAObj_Update2(z_ActorEnAObj* a0) {
UNK_RET EnAObj_Update2(ActorEnAObj* a0) {
if (func_800B867C(a0) != 0) {
a0->update = (actor_func)EnAObj_Update1;
}
}
UNK_RET EnAObj_Main(z_ActorEnAObj* a0, UNK_TYPE a1) {
(a0->update)((z_Actor*)a0, (z_GlobalContext*)a1);
UNK_RET EnAObj_Main(ActorEnAObj* a0, UNK_TYPE a1) {
(a0->update)((Actor*)a0, (GlobalContext*)a1);
func_800B675C(a0, 0x42340000);
Collision_AddOT(a1, a1 + 0x18884, &a0->collision);
}
UNK_RET EnAObj_Draw(z_ActorEnAObj* a0, UNK_TYPE a1) {
UNK_RET EnAObj_Draw(ActorEnAObj* a0, UNK_TYPE a1) {
func_800BDFC0(a1, D_801ADEB0[a0->base.variable], a1, a0);
}
+2 -2
View File
@@ -3,7 +3,7 @@
UNK_RET func_800BF9A0(UNK_TYPE a0, UNK_TYPE a1) {
s32 i;
z_ActorOverlayTableEntry* s0;
ActorOverlayTableEntry* s0;
UNK_TYPE v1;
func_8008439C(-2, 0);
@@ -19,7 +19,7 @@ UNK_RET func_800BF9A0(UNK_TYPE a0, UNK_TYPE a1) {
UNK_TYPE func_800BFA78(UNK_TYPE a0, UNK_TYPE a1) {
s32 i;
z_ActorOverlayTableEntry* v0 = &D_801AEFD0;
ActorOverlayTableEntry* v0 = &D_801AEFD0;
UNK_TYPE t1;
UNK_TYPE a2;
UNK_TYPE a0_2 = a0;
+1 -1
View File
@@ -259,7 +259,7 @@ GLOBAL_ASM("./asm/nonmatching/z_actor/func_800B8898.asm")
GLOBAL_ASM("./asm/nonmatching/z_actor/func_800B8934.asm")
UNK_TYPE Actor_HasParent(z_Actor* actor, z_GlobalContext* ctxt) {
UNK_TYPE Actor_HasParent(Actor* actor, GlobalContext* ctxt) {
if (actor->parent != NULL) {
return 1;
} else {
+21 -21
View File
@@ -1,12 +1,12 @@
#include <ultra64.h>
#include <global.h>
void EffectSS_Init(z_GlobalContext* ctxt, s32 numEntries) {
void EffectSS_Init(GlobalContext* ctxt, s32 numEntries) {
u32 i;
z_LoadedParticleEntry* iter;
z_ParticleOverlayTableEntry* iter2;
LoadedParticleEntry* iter;
ParticleOverlayTableEntry* iter2;
EffectSS2Info.data_table = (z_LoadedParticleEntry*)GameStateHeap_AllocFromEnd(&ctxt->commonVars.heap, numEntries * sizeof(z_LoadedParticleEntry));
EffectSS2Info.data_table = (LoadedParticleEntry*)GameStateHeap_AllocFromEnd(&ctxt->commonVars.heap, numEntries * sizeof(LoadedParticleEntry));
EffectSS2Info.searchIndex = 0;
EffectSS2Info.size = numEntries;
@@ -19,10 +19,10 @@ void EffectSS_Init(z_GlobalContext* ctxt, s32 numEntries) {
}
}
void EffectSS_Clear(z_GlobalContext* ctxt) {
void EffectSS_Clear(GlobalContext* ctxt) {
u32 i;
z_LoadedParticleEntry* iter;
z_ParticleOverlayTableEntry* iter2;
LoadedParticleEntry* iter;
ParticleOverlayTableEntry* iter2;
void* addr;
EffectSS2Info.data_table = NULL;
@@ -44,11 +44,11 @@ void EffectSS_Clear(z_GlobalContext* ctxt) {
}
}
z_LoadedParticleEntry* EffectSS_GetTable() {
LoadedParticleEntry* EffectSS_GetTable() {
return EffectSS2Info.data_table;
}
void EffectSS_Delete(z_LoadedParticleEntry* a0) {
void EffectSS_Delete(LoadedParticleEntry* a0) {
if (a0->flags & 0x2) {
func_801A72CC((UNK_PTR)&a0->position);
}
@@ -60,7 +60,7 @@ void EffectSS_Delete(z_LoadedParticleEntry* a0) {
EffectSS_ResetLoadedParticleEntry(a0);
}
void EffectSS_ResetLoadedParticleEntry(z_LoadedParticleEntry* particle) {
void EffectSS_ResetLoadedParticleEntry(LoadedParticleEntry* particle) {
u32 i;
particle->type = 0x27;
@@ -152,7 +152,7 @@ GLOBAL_ASM("./asm/nonmatching/z_effect_soft_sprite/EffectSS_FindFreeSpace.asm")
#endif
void EffectSS_Copy(z_GlobalContext* ctxt, z_LoadedParticleEntry* a1) {
void EffectSS_Copy(GlobalContext* ctxt, LoadedParticleEntry* a1) {
u32 index;
if (func_8016A01C(ctxt) != 1) {
if (EffectSS_FindFreeSpace(a1->priority, &index) == 0) {
@@ -164,12 +164,12 @@ void EffectSS_Copy(z_GlobalContext* ctxt, z_LoadedParticleEntry* a1) {
#ifdef NONMATCHING
void EffectSS_LoadParticle(z_GlobalContext* ctxt, u32 type, u32 priority, void* initData) {
void EffectSS_LoadParticle(GlobalContext* ctxt, u32 type, u32 priority, void* initData) {
u32 index;
u32 initRet;
u32 overlaySize;
z_ParticleOverlayInfo* overlayInfo;
z_ParticleOverlayTableEntry* entry = &particleOverlayTable[type];
ParticleOverlayInfo* overlayInfo;
ParticleOverlayTableEntry* entry = &particleOverlayTable[type];
if (EffectSS_FindFreeSpace(priority, &index) != 0) {
return;
@@ -193,7 +193,7 @@ void EffectSS_LoadParticle(z_GlobalContext* ctxt, u32 type, u32 priority, void*
// XXX this should use a0, but it doesn't
if (entry->overlayInfo != NULL) {
overlayInfo = (z_ParticleOverlayInfo*)(-(entry->vramStart - entry->loadedRamAddr) + (u32)entry->overlayInfo);
overlayInfo = (ParticleOverlayInfo*)(-(entry->vramStart - entry->loadedRamAddr) + (u32)entry->overlayInfo);
} else {
overlayInfo = NULL;
}
@@ -222,8 +222,8 @@ GLOBAL_ASM("./asm/nonmatching/z_effect_soft_sprite/EffectSS_LoadParticle.asm")
// XXX regalloc is wrong
#ifdef NONMATCHING
void EffectSS_UpdateParticle(z_GlobalContext* ctxt, u32 index) {
z_LoadedParticleEntry* particle = &EffectSS2Info.data_table[index];
void EffectSS_UpdateParticle(GlobalContext* ctxt, u32 index) {
LoadedParticleEntry* particle = &EffectSS2Info.data_table[index];
if (particle->update != NULL) {
particle->velocity.x += particle->acceleration.x;
@@ -244,7 +244,7 @@ GLOBAL_ASM("./asm/nonmatching/z_effect_soft_sprite/EffectSS_UpdateParticle.asm")
#endif
void EffectSS_UpdateAllParticles(z_GlobalContext* ctxt) {
void EffectSS_UpdateAllParticles(GlobalContext* ctxt) {
s32 i;
for (i = 0; i < EffectSS2Info.size; i++) {
@@ -265,8 +265,8 @@ void EffectSS_UpdateAllParticles(z_GlobalContext* ctxt) {
// XXX regalloc is wrong
#ifdef NONMATCHING
void EffectSS_DrawParticle(z_GlobalContext* ctxt, s32 index) {
z_LoadedParticleEntry* entry = &EffectSS2Info.data_table[index];
void EffectSS_DrawParticle(GlobalContext* ctxt, s32 index) {
LoadedParticleEntry* entry = &EffectSS2Info.data_table[index];
if (entry->draw != 0) {
(*entry->draw)(ctxt);
}
@@ -278,7 +278,7 @@ GLOBAL_ASM("./asm/nonmatching/z_effect_soft_sprite/EffectSS_DrawParticle.asm")
#endif
void EffectSS_DrawAllParticles(z_GlobalContext* ctxt) {
void EffectSS_DrawAllParticles(GlobalContext* ctxt) {
UNK_TYPE s0;
s32 i;
+40 -40
View File
@@ -255,7 +255,7 @@ s16 Lib_randStride_s(s16 a0, s16 a1, s16 a2) {
return (s16)(randZeroOne() * a2) * a1 + a0;
}
UNK_RET Lib_CopyVec3f(z_Vector3f* dst, z_Vector3f* src) {
UNK_RET Lib_CopyVec3f(Vector3f* dst, Vector3f* src) {
f32 x = src->x;
f32 y = src->y;
f32 z = src->z;
@@ -265,7 +265,7 @@ UNK_RET Lib_CopyVec3f(z_Vector3f* dst, z_Vector3f* src) {
dst->z = z;
}
UNK_RET Lib_CopyVec3s(z_Vector3s* dst, z_Vector3s* src) {
UNK_RET Lib_CopyVec3s(Vector3s* dst, Vector3s* src) {
s16 x = src->x;
s16 y = src->y;
s16 z = src->z;
@@ -275,7 +275,7 @@ UNK_RET Lib_CopyVec3s(z_Vector3s* dst, z_Vector3s* src) {
dst->z = z;
}
UNK_RET Lib_ToVec3f(z_Vector3f* dst, z_Vector3s* src) {
UNK_RET Lib_ToVec3f(Vector3f* dst, Vector3s* src) {
f32 x = src->x;
f32 y = src->y;
f32 z = src->z;
@@ -285,7 +285,7 @@ UNK_RET Lib_ToVec3f(z_Vector3f* dst, z_Vector3s* src) {
dst->z = z;
}
UNK_RET Lib_ToVec3s(z_Vector3s* dst, z_Vector3f* src) {
UNK_RET Lib_ToVec3s(Vector3s* dst, Vector3f* src) {
f32 x = src->x;
f32 y = src->y;
f32 z = src->z;
@@ -295,55 +295,55 @@ UNK_RET Lib_ToVec3s(z_Vector3s* dst, z_Vector3f* src) {
dst->z = z;
}
UNK_RET Lib_AddVec3f(z_Vector3f* a0, z_Vector3f* a1, z_Vector3f* a2) {
UNK_RET Lib_AddVec3f(Vector3f* a0, Vector3f* a1, Vector3f* a2) {
a2->x = a0->x + a1->x;
a2->y = a0->y + a1->y;
a2->z = a0->z + a1->z;
}
UNK_RET Lib_SubVec3f(z_Vector3f* a0, z_Vector3f* a1, z_Vector3f* a2) {
UNK_RET Lib_SubVec3f(Vector3f* a0, Vector3f* a1, Vector3f* a2) {
a2->x = a0->x - a1->x;
a2->y = a0->y - a1->y;
a2->z = a0->z - a1->z;
}
UNK_RET Lib_SubVec3sToVec3f(z_Vector3f* a0, z_Vector3s* a1, z_Vector3s* a2) {
UNK_RET Lib_SubVec3sToVec3f(Vector3f* a0, Vector3s* a1, Vector3s* a2) {
a0->x = a1->x - a2->x;
a0->y = a1->y - a2->y;
a0->z = a1->z - a2->z;
}
UNK_RET Lib_ScaleInPlaceVec3f(z_Vector3f* a0, f32 a1) {
UNK_RET Lib_ScaleInPlaceVec3f(Vector3f* a0, f32 a1) {
a0->x *= a1;
a0->y *= a1;
a0->z *= a1;
}
UNK_RET Lib_ScaleVec3f(z_Vector3f* a0, f32 a1, z_Vector3f* a2) {
UNK_RET Lib_ScaleVec3f(Vector3f* a0, f32 a1, Vector3f* a2) {
a2->x = a0->x * a1;
a2->y = a0->y * a1;
a2->z = a0->z * a1;
}
UNK_RET Lib_LerpVec3f(z_Vector3f* a0, z_Vector3f* a1, f32 a2, z_Vector3f* a3) {
UNK_RET Lib_LerpVec3f(Vector3f* a0, Vector3f* a1, f32 a2, Vector3f* a3) {
a3->x = (a1->x - a0->x) * a2 + a0->x;
a3->y = (a1->y - a0->y) * a2 + a0->y;
a3->z = (a1->z - a0->z) * a2 + a0->z;
}
UNK_RET Lib_AddScaledVec3f(z_Vector3f* a0, z_Vector3f* a1, f32 a2, z_Vector3f* a3) {
UNK_RET Lib_AddScaledVec3f(Vector3f* a0, Vector3f* a1, f32 a2, Vector3f* a3) {
a3->x = a1->x * a2 + a0->x;
a3->y = a1->y * a2 + a0->y;
a3->z = a1->z * a2 + a0->z;
}
UNK_RET Lib_ModifyRandScaled(z_Vector3f* a0, f32 a1, z_Vector3f* a2) {
UNK_RET Lib_ModifyRandScaled(Vector3f* a0, f32 a1, Vector3f* a2) {
a2->x = randPlusMinusPoint5Scaled(a1) + a0->x;
a2->y = randPlusMinusPoint5Scaled(a1) + a0->y;
a2->z = randPlusMinusPoint5Scaled(a1) + a0->z;
}
void Lib_ScaledNormalizedDifferenceVec3f(z_Vector3f* a0, z_Vector3f* a1, f32 a2, z_Vector3f* a3) {
void Lib_ScaledNormalizedDifferenceVec3f(Vector3f* a0, Vector3f* a1, f32 a2, Vector3f* a3) {
f32 f0 = Lib_DistanceAndDifferenceVec3f(a0, a1, a3);
f32 f2;
@@ -358,24 +358,24 @@ void Lib_ScaledNormalizedDifferenceVec3f(z_Vector3f* a0, z_Vector3f* a1, f32 a2,
a3->z *= f2;
}
f32 Lib_DistanceVec3f(z_Vector3f* a0, z_Vector3f* a1) {
z_Vector3f sp1C;
f32 Lib_DistanceVec3f(Vector3f* a0, Vector3f* a1) {
Vector3f sp1C;
Lib_SubVec3f(a1, a0, &sp1C);
return sqrtf((sp1C.x * sp1C.x) + (sp1C.y * sp1C.y) + (sp1C.z * sp1C.z));
}
f32 Lib_DistanceAndDifferenceVec3f(z_Vector3f* a0, z_Vector3f* a1, z_Vector3f* a2) {
f32 Lib_DistanceAndDifferenceVec3f(Vector3f* a0, Vector3f* a1, Vector3f* a2) {
Lib_SubVec3f(a1, a0, a2);
return sqrtf((a2->x * a2->x) + (a2->y * a2->y) + (a2->z * a2->z));
}
f32 Lib_DistanceXZVec3f(z_Vector3f* a0, z_Vector3f* a1) {
f32 Lib_DistanceXZVec3f(Vector3f* a0, Vector3f* a1) {
f32 dx = a1->x - a0->x;
f32 dz = a1->z - a0->z;
return sqrtf((dx * dx) + (dz * dz));
}
f32 Lib_DistanceAndDifferenceXZVec3f(z_Vector3f* a0, z_Vector3f* a1, f32* a2, f32* a3) {
f32 Lib_DistanceAndDifferenceXZVec3f(Vector3f* a0, Vector3f* a1, f32* a2, f32* a3) {
*a2 = a1->x - a0->x;
*a3 = a1->z - a0->z;
return sqrtf((*a2 * *a2) + (*a3 * *a3));
@@ -383,7 +383,7 @@ f32 Lib_DistanceAndDifferenceXZVec3f(z_Vector3f* a0, z_Vector3f* a1, f32* a2, f3
#ifdef NONMATCHING
UNK_RET Lib_PushAwayXZVec3f(z_Vector3f* a0, z_Vector3f* a1, f32 a2) {
UNK_RET Lib_PushAwayXZVec3f(Vector3f* a0, Vector3f* a1, f32 a2) {
f32 sp24;
f32 sp20;
f32 f0 = Lib_DistanceAndDifferenceXZVec3f(a1, a0, &sp24, &sp20);
@@ -405,60 +405,60 @@ GLOBAL_ASM("./asm/nonmatching/z_lib/Lib_PushAwayXZVec3f.asm")
#endif
f32 Lib_DistanceYVec3f(z_Vector3f* a0, z_Vector3f* a1) {
f32 Lib_DistanceYVec3f(Vector3f* a0, Vector3f* a1) {
return a1->y - a0->y;
}
UNK_TYPE Lib_YawVec3f(z_Vector3f* a0, z_Vector3f* a1) {
UNK_TYPE Lib_YawVec3f(Vector3f* a0, Vector3f* a1) {
f32 f14 = a1->x - a0->x;
f32 f12 = a1->z - a0->z;
return atans_flip(f12, f14);
}
UNK_TYPE Lib_PitchVec3f(z_Vector3f* a0, z_Vector3f* a1) {
UNK_TYPE Lib_PitchVec3f(Vector3f* a0, Vector3f* a1) {
return atans_flip(Lib_DistanceXZVec3f(a0, a1), a0->y - a1->y);
}
void Lib_ApplyActorInitVars(z_Actor* a0, z_ActorInitVar* a1) {
void Lib_ApplyActorInitVars(Actor* a0, ActorInitVar* a1) {
do {
D_801BE960[a1->type]((u8*)a0, a1);
} while ((a1++)->cont);
}
UNK_RET Lib_ApplyActorInitVarByte1(u8* a0, z_ActorInitVar* a1) {
UNK_RET Lib_ApplyActorInitVarByte1(u8* a0, ActorInitVar* a1) {
*(u8*)(a0 + a1->offset) = (u8)(a1->value);
}
UNK_RET Lib_ApplyActorInitVarByte2(u8* a0, z_ActorInitVar* a1) {
UNK_RET Lib_ApplyActorInitVarByte2(u8* a0, ActorInitVar* a1) {
*(u8*)(a0 + a1->offset) = (u8)(a1->value);
}
UNK_RET Lib_ApplyActorInitVarShort1(u8* a0, z_ActorInitVar* a1) {
UNK_RET Lib_ApplyActorInitVarShort1(u8* a0, ActorInitVar* a1) {
*(u16*)(a0 + a1->offset) = (u16)(a1->value);
}
UNK_RET Lib_ApplyActorInitVarShort2(u8* a0, z_ActorInitVar* a1) {
UNK_RET Lib_ApplyActorInitVarShort2(u8* a0, ActorInitVar* a1) {
*(u16*)(a0 + a1->offset) = (u16)(a1->value);
}
UNK_RET Lib_ApplyActorInitVarWord1(u8* a0, z_ActorInitVar* a1) {
UNK_RET Lib_ApplyActorInitVarWord1(u8* a0, ActorInitVar* a1) {
*(u32*)(a0 + a1->offset) = (u32)(a1->value);
}
UNK_RET Lib_ApplyActorInitVarWord2(u8* a0, z_ActorInitVar* a1) {
UNK_RET Lib_ApplyActorInitVarWord2(u8* a0, ActorInitVar* a1) {
*(u32*)(a0 + a1->offset) = (u32)(a1->value);
}
UNK_RET Lib_ApplyActorInitVarFloat(u8* a0, z_ActorInitVar* a1) {
UNK_RET Lib_ApplyActorInitVarFloat(u8* a0, ActorInitVar* a1) {
*(f32*)(a0 + a1->offset) = (f32)(a1->value);
}
UNK_RET Lib_ApplyActorInitVarFloat1000th(u8* a0, z_ActorInitVar* a1) {
UNK_RET Lib_ApplyActorInitVarFloat1000th(u8* a0, ActorInitVar* a1) {
*(f32*)(a0 + a1->offset) = (f32)(a1->value) / 1000;
}
UNK_RET Lib_ApplyActorInitVarVector3f(u8* a0, z_ActorInitVar* a1) {
z_Vector3f* v0 = (z_Vector3f*)(a0 + a1->offset);
UNK_RET Lib_ApplyActorInitVarVector3f(u8* a0, ActorInitVar* a1) {
Vector3f* v0 = (Vector3f*)(a0 + a1->offset);
f32 f0 = (f32)(a1->value);
v0->z = f0;
@@ -466,8 +466,8 @@ UNK_RET Lib_ApplyActorInitVarVector3f(u8* a0, z_ActorInitVar* a1) {
v0->x = f0;
}
UNK_RET Lib_ApplyActorInitVarVector3f1000th(u8* a0, z_ActorInitVar* a1) {
z_Vector3f* v0 = (z_Vector3f*)(a0 + a1->offset);
UNK_RET Lib_ApplyActorInitVarVector3f1000th(u8* a0, ActorInitVar* a1) {
Vector3f* v0 = (Vector3f*)(a0 + a1->offset);
f32 f0 = (f32)(a1->value) / 1000;
v0->z = f0;
@@ -475,8 +475,8 @@ UNK_RET Lib_ApplyActorInitVarVector3f1000th(u8* a0, z_ActorInitVar* a1) {
v0->x = f0;
}
UNK_RET Lib_ApplyActorInitVarVector3s(u8* a0, z_ActorInitVar* a1) {
z_Vector3s* v0 = (z_Vector3s*)(a0 + a1->offset);
UNK_RET Lib_ApplyActorInitVarVector3s(u8* a0, ActorInitVar* a1) {
Vector3s* v0 = (Vector3s*)(a0 + a1->offset);
s16 v1 = (s16)(a1->value);
v0->z = v1;
@@ -600,7 +600,7 @@ UNK_RET func_801000F4(UNK_TYPE a0, u16 a1) {
func_8019F1C0(a0, a1);
}
void Lib_TranslateAndRotateYVec3f(z_Vector3f* a0, s16 a1, z_Vector3f* a2, z_Vector3f* a3) {
void Lib_TranslateAndRotateYVec3f(Vector3f* a0, s16 a1, Vector3f* a2, Vector3f* a3) {
f32 sp1C;
f32 f0;
@@ -626,8 +626,8 @@ GLOBAL_ASM("./asm/nonmatching/z_lib/Lib_LerpRGB.asm")
#endif
f32 Lib_PushAwayVec3f(z_Vector3f* a0, z_Vector3f* a1, f32 a2) {
z_Vector3f sp24;
f32 Lib_PushAwayVec3f(Vector3f* a0, Vector3f* a1, f32 a2) {
Vector3f sp24;
f32 f2;
f32 f0;