mirror of https://github.com/pmret/papermario.git
731 lines
20 KiB
C
731 lines
20 KiB
C
#include "common.h"
|
|
|
|
typedef struct LavaReset {
|
|
/* 0x00 */ s32 colliderID;
|
|
/* 0x04 */ Vec3f pos;
|
|
} LavaReset; // size = 0x10;
|
|
|
|
extern LavaReset* gLavaResetList;
|
|
extern s32 D_802DADA4;
|
|
|
|
ApiStatus TranslateModel(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 modelIndex = get_variable(script, *args++);
|
|
f32 x;
|
|
f32 y;
|
|
f32 z;
|
|
Model* model;
|
|
|
|
modelIndex = get_model_list_index_from_tree_index(modelIndex);
|
|
x = get_float_variable(script, *args++);
|
|
y = get_float_variable(script, *args++);
|
|
z = get_float_variable(script, *args++);
|
|
model = get_model_from_list_index(modelIndex);
|
|
|
|
if (!(model->flags & 0x400)) {
|
|
guTranslateF(model->transformMatrix, x, y, z);
|
|
model->flags |= 0x1400;
|
|
} else {
|
|
Matrix4f mtx;
|
|
|
|
guTranslateF(mtx, x, y, z);
|
|
guMtxCatF(mtx, model->transformMatrix, model->transformMatrix);
|
|
}
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus RotateModel(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 var1 = get_variable(script, *args++);
|
|
s32 modelListIndex = get_model_list_index_from_tree_index(var1);
|
|
f32 a = get_float_variable(script, *args++);
|
|
f32 x = get_float_variable(script, *args++);
|
|
f32 y = get_float_variable(script, *args++);
|
|
f32 z = get_float_variable(script, *args++);
|
|
Model* model = get_model_from_list_index(modelListIndex);
|
|
|
|
if (!(model->flags & 0x400)) {
|
|
guRotateF(model->transformMatrix, a, x, y, z);
|
|
model->flags |= 0x1400;
|
|
} else {
|
|
Matrix4f mtx;
|
|
|
|
guRotateF(mtx, a, x, y, z);
|
|
guMtxCatF(mtx, model->transformMatrix, model->transformMatrix);
|
|
}
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus ScaleModel(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 modelIndex = get_variable(script, *args++);
|
|
f32 x;
|
|
f32 y;
|
|
f32 z;
|
|
Model* model;
|
|
|
|
modelIndex = get_model_list_index_from_tree_index(modelIndex);
|
|
x = get_float_variable(script, *args++);
|
|
y = get_float_variable(script, *args++);
|
|
z = get_float_variable(script, *args++);
|
|
model = get_model_from_list_index(modelIndex);
|
|
|
|
if (!(model->flags & 0x400)) {
|
|
guScaleF(model->transformMatrix, x, y, z);
|
|
model->flags |= 0x1400;
|
|
} else {
|
|
Matrix4f mtx;
|
|
|
|
guScaleF(mtx, x, y, z);
|
|
guMtxCatF(mtx, model->transformMatrix, model->transformMatrix);
|
|
}
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus GetModelIndex(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
Bytecode modelID = get_variable(script, *args++);
|
|
Bytecode index = *args++;
|
|
|
|
set_variable(script, index, get_model_list_index_from_tree_index(modelID));
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus InvalidateModelTransform(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
Bytecode modelID = get_variable(script, *args++);
|
|
Model* model = get_model_from_list_index(get_model_list_index_from_tree_index(modelID));
|
|
|
|
model->flags &= ~0x400;
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus CloneModel(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
Bytecode srcModelID = get_variable(script, *args++);
|
|
Bytecode newModelID = get_variable(script, *args++);
|
|
|
|
clone_model(srcModelID, newModelID);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus GetModelCenter(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
f32 centerX;
|
|
f32 centerY;
|
|
f32 centerZ;
|
|
f32 sizeX;
|
|
f32 sizeY;
|
|
f32 sizeZ;
|
|
|
|
get_model_center_and_size(get_variable(script, *args++), ¢erX, ¢erY, ¢erZ, &sizeX, &sizeY,
|
|
&sizeZ);
|
|
script->varTable[0] = centerX;
|
|
script->varTable[1] = centerY;
|
|
script->varTable[2] = centerZ;
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetTexPanner(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 treeIndex = get_variable(script, *args++);
|
|
s32 var2 = get_variable(script, *args++);
|
|
Model* model = get_model_from_list_index(get_model_list_index_from_tree_index(treeIndex));
|
|
|
|
set_tex_panner(model, var2);
|
|
model->flags |= 0x800;
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetCustomGfxEnabled(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
Bytecode treeIndex = get_variable(script, *args++);
|
|
Bytecode enable = get_variable(script, *args++);
|
|
Model* model = get_model_from_list_index(get_model_list_index_from_tree_index(treeIndex));
|
|
|
|
if (enable) {
|
|
model->flags |= 0x10;
|
|
} else {
|
|
model->flags &= ~0x10;
|
|
}
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetModelCustomGfx(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 treeIndex = get_variable(script, *args++);
|
|
s32 var2 = get_variable(script, *args++);
|
|
s32 var3 = get_variable(script, *args++);
|
|
Model* model;
|
|
|
|
treeIndex = get_model_list_index_from_tree_index(treeIndex);
|
|
model = get_model_from_list_index(treeIndex);
|
|
|
|
set_mdl_custom_gfx_set(model, var2, var3);
|
|
if (var2 != -1) {
|
|
model->flags |= 0x10;
|
|
}
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetModelTexVariant(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
Bytecode treeIndex = get_variable(script, *args++);
|
|
Bytecode var2 = get_variable(script, *args++);
|
|
|
|
get_model_from_list_index(get_model_list_index_from_tree_index(treeIndex))->unk_A9 = var2;
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus EnableTexPanning(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 treeIndex = get_variable(script, *args++);
|
|
s32 flag = get_variable(script, *args++);
|
|
Model* model = get_model_from_list_index(get_model_list_index_from_tree_index(treeIndex));
|
|
|
|
if (flag) {
|
|
model->flags |= 0x800;
|
|
} else {
|
|
model->flags &= ~0x800;
|
|
}
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus EnableModel(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 listIndex = get_model_list_index_from_tree_index(get_variable(script, *args++));
|
|
Bytecode flag = get_variable(script, *args++);
|
|
Model* model = get_model_from_list_index(listIndex);
|
|
|
|
if (flag != 0) {
|
|
model->flags &= ~0x2;
|
|
} else {
|
|
model->flags |= 0x2;
|
|
}
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetGroupEnabled(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
Bytecode var1 = get_variable(script, *args++);
|
|
Bytecode var2 = get_variable(script, *args++);
|
|
|
|
func_8011B7C0(var1, 2, var2);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetTexPanOffset(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
Bytecode var1 = get_variable(script, *args++);
|
|
Bytecode var2 = get_variable(script, *args++);
|
|
Bytecode var3 = get_variable(script, *args++);
|
|
Bytecode var4 = get_variable(script, *args++);
|
|
|
|
if (var2 == 0) {
|
|
set_main_pan_u(var1, var3);
|
|
set_main_pan_v(var1, var4);
|
|
} else {
|
|
set_aux_pan_u(var1, var3);
|
|
set_aux_pan_v(var1, var4);
|
|
}
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetCustomGfx(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 var1 = get_variable(script, *args++);
|
|
s32 var2 = get_variable(script, *args++);
|
|
s32 var3 = get_variable(script, *args++);
|
|
|
|
set_custom_gfx(var1, var2, var3);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetCustomGfxBuilders(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 var1 = get_variable(script, *args++);
|
|
s32 var2 = get_variable(script, *args++);
|
|
s32 var3 = get_variable(script, *args++);
|
|
|
|
set_custom_gfx_builders(var1, var2, var3);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetModelFlags(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 modelIndex;
|
|
s32 a1;
|
|
s32 enable;
|
|
Model* model;
|
|
|
|
modelIndex = get_variable(script, *args++);
|
|
modelIndex = get_model_list_index_from_tree_index(modelIndex);
|
|
a1 = *args++;
|
|
enable = get_variable(script, *args++);
|
|
model = get_model_from_list_index(modelIndex);
|
|
|
|
if (enable) {
|
|
model->flags |= a1;
|
|
} else {
|
|
model->flags &= ~a1;
|
|
}
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
INCLUDE_ASM(s32, "evt/map_api", apply_transform_to_children);
|
|
|
|
ApiStatus MakeTransformGroup(Evt* script, s32 isInitialCall) {
|
|
make_transform_group((u16)get_variable(script, *script->ptrReadPos));
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetTransformGroupEnabled(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
u16 var1 = get_variable(script, *args++);
|
|
s32 var2 = get_variable(script, *args++);
|
|
|
|
if (var2 != 0) {
|
|
enable_transform_group(var1);
|
|
} else {
|
|
disable_transform_group(var1);
|
|
}
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus TranslateGroup(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 var1 = get_variable(script, *args);
|
|
s32 index = get_transform_group_index(var1);
|
|
ModelTransformGroup* transformGroup;
|
|
f32 x, y, z;
|
|
|
|
if (index == -1) {
|
|
apply_transform_to_children(TranslateModel, script);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
args++;
|
|
|
|
x = get_float_variable(script, *args++);
|
|
y = get_float_variable(script, *args++);
|
|
z = get_float_variable(script, *args++);
|
|
|
|
transformGroup = get_transform_group(index);
|
|
|
|
index = transformGroup->flags & 0x400; // TODO fix weird match
|
|
if (!index) {
|
|
guTranslateF(transformGroup->matrixB, x, y, z);
|
|
transformGroup->flags |= 0x1400;
|
|
} else {
|
|
Matrix4f mtx;
|
|
|
|
guTranslateF(mtx, x, y, z);
|
|
guMtxCatF(mtx, transformGroup->matrixB, transformGroup->matrixB);
|
|
}
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus RotateGroup(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 index = get_transform_group_index(get_variable(script, *args));
|
|
ModelTransformGroup* transformGroup;
|
|
f32 a, x, y, z;
|
|
|
|
if (index == -1) {
|
|
apply_transform_to_children(RotateModel, script);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
args++;
|
|
|
|
a = get_float_variable(script, *args++);
|
|
x = get_float_variable(script, *args++);
|
|
y = get_float_variable(script, *args++);
|
|
z = get_float_variable(script, *args++);
|
|
|
|
transformGroup = get_transform_group(index);
|
|
|
|
if (!(transformGroup->flags & 0x400)) {
|
|
guRotateF(transformGroup->matrixB, a, x, y, z);
|
|
transformGroup->flags |= 0x1400;
|
|
} else {
|
|
Matrix4f mtx;
|
|
|
|
guRotateF(mtx, a, x, y, z);
|
|
guMtxCatF(mtx, transformGroup->matrixB, transformGroup->matrixB);
|
|
}
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus ScaleGroup(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 var1 = get_variable(script, *args);
|
|
s32 index = get_transform_group_index(var1);
|
|
ModelTransformGroup* transformGroup;
|
|
f32 x, y, z;
|
|
|
|
if (index == -1) {
|
|
apply_transform_to_children(ScaleModel, script);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
args++;
|
|
|
|
x = get_float_variable(script, *args++);
|
|
y = get_float_variable(script, *args++);
|
|
z = get_float_variable(script, *args++);
|
|
|
|
transformGroup = get_transform_group(index);
|
|
|
|
index = transformGroup->flags & 0x400; // TODO fix weird match
|
|
if (!(index)) {
|
|
guScaleF(transformGroup->matrixB, x, y, z);
|
|
transformGroup->flags |= 0x1400;
|
|
} else {
|
|
Matrix4f mtx;
|
|
|
|
guScaleF(mtx, x, y, z);
|
|
guMtxCatF(mtx, transformGroup->matrixB, transformGroup->matrixB);
|
|
}
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus GetTransformGroup(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 var1 = get_variable(script, *args++);
|
|
Bytecode var2 = *args++;
|
|
|
|
set_variable(script, var2, get_transform_group_index(var1));
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus EnableGroup(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 index = get_transform_group_index(get_variable(script, *args));
|
|
s32 flagUnset;
|
|
ModelTransformGroup* transformGroup;
|
|
|
|
if (index == -1) {
|
|
apply_transform_to_children(EnableModel, script);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
args++;
|
|
|
|
flagUnset = get_variable(script, *args++);
|
|
transformGroup = get_transform_group(index);
|
|
|
|
for (index = transformGroup->minChildModelIndex; index <= transformGroup->maxChildModelIndex; index++) {
|
|
Model* model = get_model_from_list_index(index);
|
|
if (flagUnset) {
|
|
model->flags &= ~0x2;
|
|
} else {
|
|
model->flags |= 0x2;
|
|
}
|
|
}
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus MakeLocalVertexCopy(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 var1 = get_variable(script, *args++);
|
|
u16 var2 = get_variable(script, *args++);
|
|
s32 var3 = get_variable(script, *args++);
|
|
|
|
mdl_make_local_vertex_copy(var1, var2, var3);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
void modify_collider_family_flags(s32 index, s32 flags, s32 mode) {
|
|
Collider* collider = &gCollisionData.colliderList[index];
|
|
|
|
if (collider->nextSibling >= 0) {
|
|
modify_collider_family_flags(collider->nextSibling, flags, mode);
|
|
}
|
|
|
|
if (collider->firstChild >= 0) {
|
|
modify_collider_family_flags(collider->firstChild, flags, mode);
|
|
}
|
|
|
|
switch (mode) {
|
|
case 0:
|
|
collider->flags |= flags;
|
|
break;
|
|
case 1:
|
|
collider->flags &= ~flags;
|
|
break;
|
|
case 2:
|
|
collider->flags = flags;
|
|
break;
|
|
case 3:
|
|
collider->flags &= ~0xFF;
|
|
collider->flags |= flags & 0xFF;
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
ApiStatus ModifyColliderFlags(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 mode = get_variable(script, *args++);
|
|
s32 index = get_variable(script, *args++);
|
|
s32 flags = get_variable(script, *args++);
|
|
Collider* collider = &gCollisionData.colliderList[index];
|
|
|
|
if (collider->firstChild >= 0) {
|
|
modify_collider_family_flags(collider->firstChild, flags, mode);
|
|
}
|
|
|
|
switch (mode) {
|
|
case 0:
|
|
collider->flags |= flags;
|
|
break;
|
|
case 1:
|
|
collider->flags &= ~flags;
|
|
break;
|
|
case 2:
|
|
collider->flags = flags;
|
|
break;
|
|
case 3:
|
|
collider->flags &= ~0xFF;
|
|
collider->flags |= flags & 0xFF;
|
|
break;
|
|
}
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus ResetFromLava(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
CollisionStatus* collisionStatus = &gCollisionStatus;
|
|
Collider* collider;
|
|
LavaReset* lavaReset;
|
|
|
|
if (isInitialCall) {
|
|
lavaReset = gLavaResetList = get_variable(script, *args++);
|
|
|
|
while (TRUE) {
|
|
if (lavaReset->colliderID == -1) {
|
|
break;
|
|
}
|
|
collider = &gCollisionData.colliderList[lavaReset->colliderID];
|
|
if (collider->firstChild >= 0) {
|
|
modify_collider_family_flags(collider->firstChild, 0x100, 0);
|
|
}
|
|
collider->flags |= 0x100;
|
|
lavaReset++;
|
|
}
|
|
|
|
D_802DADA4 = -1;
|
|
}
|
|
|
|
if (!(collisionStatus->currentFloor & 0x4000)) {
|
|
collider = &gCollisionData.colliderList[collisionStatus->currentFloor];
|
|
if (collider->flags & 0x100) {
|
|
D_802DADA4 = collisionStatus->currentFloor;
|
|
return ApiStatus_BLOCK;
|
|
}
|
|
}
|
|
|
|
return ApiStatus_BLOCK;
|
|
}
|
|
|
|
s32 get_lava_reset_pos(f32* outX, f32* outY, f32* outZ) {
|
|
Vec4f *temp_v0;
|
|
s32 temp_a0;
|
|
LavaReset* lavaReset = gLavaResetList;
|
|
|
|
if (D_802DADA4 == -1) {
|
|
temp_v0 = &(*get_current_map_header()->entryList)[gGameStatusPtr->entryID];
|
|
*outX = temp_v0->x;
|
|
*outY = temp_v0->y;
|
|
*outZ = temp_v0->z;
|
|
return -1;
|
|
}
|
|
|
|
while (TRUE) {
|
|
if (lavaReset->colliderID == -1) {
|
|
break;
|
|
}
|
|
|
|
if (lavaReset->colliderID == D_802DADA4) {
|
|
*outX = lavaReset->pos.x;
|
|
*outY = lavaReset->pos.y;
|
|
*outZ = lavaReset->pos.z;
|
|
return 1;
|
|
}
|
|
lavaReset++;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
ApiStatus GetColliderCenter(Evt* script, s32 isInitialCall) {
|
|
f32 x, y, z;
|
|
|
|
get_collider_center(get_variable(script, *script->ptrReadPos), &x, &y, &z);
|
|
|
|
script->varTable[0] = x;
|
|
script->varTable[1] = y;
|
|
script->varTable[2] = z;
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus ParentColliderToModel(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s16 colliderID = get_variable(script, *args++);
|
|
s32 treeIndex = get_variable(script, *args++);
|
|
|
|
parent_collider_to_model(colliderID, get_model_list_index_from_tree_index(treeIndex));
|
|
update_collider_transform(colliderID);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus UpdateColliderTransform(Evt* script, s32 isInitialCall) {
|
|
update_collider_transform(get_variable(script, *script->ptrReadPos));
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
void set_zone_enabled(s32 zoneID, s32 enabled) {
|
|
TempSetZoneEnabled* unkStruct = &D_800D91D4[zoneID];
|
|
|
|
if (unkStruct->id1 >= 0) {
|
|
set_zone_enabled(unkStruct->id1, enabled);
|
|
}
|
|
if (unkStruct->id2 >= 0) {
|
|
set_zone_enabled(unkStruct->id2, enabled);
|
|
}
|
|
|
|
switch (enabled) {
|
|
case 0:
|
|
unkStruct->flags |= 0x10000;
|
|
break;
|
|
case 1:
|
|
unkStruct->flags &= ~0x10000;
|
|
break;
|
|
}
|
|
}
|
|
|
|
ApiStatus SetZoneEnabled(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 idx = get_variable(script, *args++);
|
|
s32 enabled = get_variable(script, *args++);
|
|
TempSetZoneEnabled* unkStruct = &D_800D91D4[idx];
|
|
|
|
if (unkStruct->id2 >= 0) {
|
|
set_zone_enabled(unkStruct->id2, enabled);
|
|
}
|
|
|
|
switch (enabled) {
|
|
case FALSE:
|
|
unkStruct->flags |= 0x10000;
|
|
break;
|
|
case TRUE:
|
|
unkStruct->flags &= ~0x10000;
|
|
break;
|
|
}
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
void goto_map(Evt* script, s32 mode) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s16 mapID;
|
|
s16 areaID;
|
|
s16 mapTransitionEffect = 0;
|
|
|
|
if (mode == 2) {
|
|
areaID = get_variable(script, *args++);
|
|
mapID = get_variable(script, *args++);
|
|
} else {
|
|
get_map_IDs_by_name(get_variable(script, *args++), &areaID, &mapID);
|
|
}
|
|
|
|
gGameStatusPtr->areaID = areaID;
|
|
gGameStatusPtr->mapID = mapID;
|
|
gGameStatusPtr->entryID = get_variable(script, *args++);
|
|
|
|
if (mode == 1) {
|
|
mapTransitionEffect = get_variable(script, *args++);
|
|
}
|
|
|
|
set_map_transition_effect(mapTransitionEffect);
|
|
set_game_mode(5);
|
|
}
|
|
|
|
ApiStatus GotoMap(Evt* script, s32 isInitialCall) {
|
|
goto_map(script, 0);
|
|
return ApiStatus_DONE1;
|
|
}
|
|
|
|
ApiStatus GotoMapSpecial(Evt* script, s32 isInitialCall) {
|
|
goto_map(script, 1);
|
|
return ApiStatus_DONE1;
|
|
}
|
|
|
|
ApiStatus GotoMapByID(Evt* script, s32 isInitialCall) {
|
|
goto_map(script, 2);
|
|
return ApiStatus_DONE1;
|
|
}
|
|
|
|
ApiStatus GetEntryID(Evt* script, s32 isInitialCall) {
|
|
set_variable(script, *script->ptrReadPos, gGameStatusPtr->entryID);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus GetMapID(Evt* script, s32 isInitialCall) {
|
|
set_variable(script, *script->ptrReadPos, gGameStatusPtr->mapID);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus GetLoadType(Evt* script, s32 isInitialCall) {
|
|
set_variable(script, *script->ptrReadPos, gGameStatusPtr->loadType != 0);
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus SetRenderMode(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 treeIndex = get_variable(script, *args++);
|
|
s8 renderMode = get_variable(script, *args++);
|
|
|
|
get_model_from_list_index(get_model_list_index_from_tree_index(treeIndex))->renderMode = renderMode;
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus PlaySoundAtModel(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 modelID = get_variable(script, *args++);
|
|
SoundID soundID = get_variable(script, *args++);
|
|
s32 var3 = get_variable(script, *args++);
|
|
f32 x, y, z;
|
|
f32 sx, sy, sz;
|
|
|
|
get_model_center_and_size(modelID, &x, &y, &z, &sx, &sy, &sz);
|
|
sfx_play_sound_at_position(soundID, var3, x, y, z);
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|
|
|
|
ApiStatus PlaySoundAtCollider(Evt* script, s32 isInitialCall) {
|
|
Bytecode* args = script->ptrReadPos;
|
|
s32 colliderID = get_variable(script, *args++);
|
|
SoundID soundID = get_variable(script, *args++);
|
|
s32 var3 = get_variable(script, *args++);
|
|
f32 x, y, z;
|
|
|
|
get_collider_center(colliderID, &x, &y, &z);
|
|
sfx_play_sound_at_position(soundID, var3, x, y, z);
|
|
|
|
return ApiStatus_DONE2;
|
|
}
|