102#define WORLD_TEXTURE_MEMORY_SIZE 0x20000
103#define BATTLE_TEXTURE_MEMORY_SIZE 0x8000
592 1.000000, 0.000000, 0.000000, 0.000000,
593 0.000000, 1.000000, 0.000000, 0.000000,
594 0.000000, 0.000000, 1.000000, 0.000000,
595 0.000000, 0.000000, 0.000000, 1.000000
605#define DEPTH_EXPONENT_MASK 0xE000
606#define DEPTH_MANTISSA_MASK 0x1FFC
607#define DEPTH_DZ_MASK 0x0003
609#define DEPTH_EXPONENT_SHIFT 13
610#define DEPTH_MANTISSA_SHIFT 2
611#define DEPTH_DZ_SHIFT 0
634#define MAX_VIEWPORT_DEPTH (2 * 32 * ((G_MAXZ / 2)))
1391 modelNode =
model->modelNode;
1393 if (
model->textureID != 0) {
1407 renderMode =
model->renderMode;
1436 switch ((
u32)(
model->customGfxIndex >> 4)) {
1460 if (
model->groupData !=
nullptr) {
1462 if (
model->groupData->lightingGroup !=
nullptr) {
1463 switch (
model->groupData->numLights) {
1497 if (
prop !=
nullptr) {
1504 (shift >> 12) & 0xF, (shift >> 16) & 0xF,
1536 if (auxCombineType >= 3) {
1557 switch (renderMode) {
1624 switch (renderMode) {
1688 switch (renderMode) {
1759 switch (renderMode) {
1823 switch (renderMode) {
1899 switch (renderMode) {
1948 customGfxIndex = (
model->customGfxIndex & 0xF) * 2;
2016 handle->palette =
nullptr;
2028 handle->auxPalette =
nullptr;
2033 handle->auxPalette =
nullptr;
2034 handle->auxRaster =
nullptr;
2059 (*gCurrentModelTreeNodeInfo)[
TreeIterPos].textureID = 0;
2073 while (header->
mainW /
d >= 16 && header->
mainH /
d > 0) {
2082 while (header->
mainW /
d >= 8 && header->
mainH /
d > 0) {
2090 while (header->
mainW /
d >= 4 && header->
mainH /
d > 0) {
2099 while (header->
mainW /
d >= 2 && header->
mainH /
d > 0) {
2157 (*gCurrentModelTreeNodeInfo)[
TreeIterPos].textureID = 0;
2188 if (
strcmp(header->
name,
"end_of_textures") == 0) {
2203 while (header->
mainW /
d >= 16 && header->
mainH /
d > 0) {
2212 while (header->
mainW /
d >= 8 && header->
mainH /
d > 0) {
2220 while (header->
mainW /
d >= 4 && header->
mainH /
d > 0) {
2229 while (header->
mainW /
d >= 2 && header->
mainH /
d > 0) {
2285 s32 numProperties =
node->numProperties;
2289 for (i = 0; i < numProperties; i++, propertyList++) {
2290 if (propertyList->
key == key) {
2291 return propertyList;
2300 if (
model->groupData !=
nullptr) {
2301 s32 numChildren =
model->groupData->numChildren;
2303 if (numChildren != 0) {
2306 for (i = 0; i < numChildren; i++) {
2349 s32 numChildren =
model->groupData->numChildren;
2351 if (numChildren != 0) {
2355 for (i = 0; i < numChildren; i++) {
2393 (*gCurrentModels)[i] = 0;
2397 (*gCurrentTransformGroups)[i] = 0;
2401 (*gCurrentCustomModelGfxPtr)[i] = 0;
2402 (*gCurrentCustomModelGfxBuildersPtr)[i] = 0;
2408 (*gCurrentModelTreeNodeInfo)[i].modelIndex = -1;
2409 (*gCurrentModelTreeNodeInfo)[i].treeDepth = 0;
2410 (*gCurrentModelTreeNodeInfo)[i].textureID = 0;
2460 if (
model !=
nullptr) {
2463 bb->halfSizeX = (
bb->maxX -
bb->minX) * 0.5;
2464 bb->halfSizeY = (
bb->maxY -
bb->minY) * 0.5;
2465 bb->halfSizeZ = (
bb->maxZ -
bb->minZ) * 0.5;
2481 if (
prop !=
nullptr) {
2486 if (
prop !=
nullptr) {
2491 (
bb->minX +
bb->maxX) * 0.5f,
2493 (
bb->minZ +
bb->maxZ) * 0.5f,
2510 model->modelNode =
bp->mdlNode;
2511 model->groupData =
bp->groupData;
2512 model->matrixFreshness = 0;
2516 if (
prop !=
nullptr) {
2517 model->texPannerID =
prop->data.s & 0xF;
2528 if (
prop !=
nullptr) {
2534 if (
prop !=
nullptr) {
2541 model->textureVariation = 0;
2548 model->bakedMtx =
nullptr;
2554 model->finalMtx =
nullptr;
2556 if (
prop !=
nullptr) {
2559 x = (
bb->minX +
bb->maxX) * 0.5f;
2560 y = (
bb->minY +
bb->maxY) * 0.5f;
2561 z = (
bb->minZ +
bb->maxZ) * 0.5f;
2566 if (
model->bakedMtx !=
nullptr) {
2570 model->center.x = x;
2571 model->center.y = y;
2572 model->center.z = z;
2575 x =
bb->maxX -
bb->minX;
2576 y =
bb->maxY -
bb->minY;
2577 z =
bb->maxZ -
bb->minZ;
2578 bb->halfSizeX = x * 0.5;
2579 bb->halfSizeY = y * 0.5;
2580 bb->halfSizeZ = z * 0.5;
2582 if (
model->bakedMtx ==
nullptr && x < 100.0f && y < 100.0f && z < 100.0f) {
2600 model = (*gCurrentModels)[i];
2603 if (
model->matrixFreshness != 0) {
2607 if (
model->matrixFreshness == 0) {
2622 model->matrixFreshness = 2;
2637 mX = (
bb->minX +
bb->maxX) * 0.5f;
2638 mY = (
bb->minY +
bb->maxY) * 0.5f;
2639 mZ = (
bb->minZ +
bb->maxZ) * 0.5f;
2655 mtg = (*gCurrentTransformGroups)[i];
2658 if (
mtg->matrixFreshness != 0) {
2661 mtg->matrixFreshness--;
2662 if (
mtg->matrixFreshness == 0) {
2664 mtg->savedMtx = *
mtg->finalMtx;
2672 mtg->finalMtx = &
mtg->savedMtx;
2677 mtg->matrixFreshness = 2;
2681 if (
mtg->bakedMtx ==
nullptr) {
2692 mtgX = (
bb->minX +
bb->maxX) * 0.5f;
2693 mtgY = (
bb->minY +
bb->maxY) * 0.5f;
2694 mtgZ = (
bb->minZ +
bb->maxZ) * 0.5f;
2717 f32 centerX, centerY, centerZ;
2730#define TEST_POINT_VISIBILITY \
2731 outX = (m00 * xComp) + (m10 * yComp) + (m20 * zComp) + m30; \
2732 outY = (m01 * xComp) + (m11 * yComp) + (m21 * zComp) + m31; \
2733 outZ = (m02 * xComp) + (m12 * yComp) + (m22 * zComp) + m32; \
2734 outW = (m03 * xComp) + (m13 * yComp) + (m23 * zComp) + m33; \
2735 if (outW == 0.0f) { \
2739 outW = 1.0f / outW; \
2740 xComp = outX * outW; \
2741 yComp = outY * outW; \
2742 zComp = outZ * outW; \
2743 if (zComp > -1.0f && xComp >= -1.0f && xComp <= 1.0f && yComp >= -1.0f && yComp <= 1.0f) { \
2766 model = (*gCurrentModels)[i];
2767 if (
model ==
nullptr) {
2770 if (
model->flags == 0) {
2787 centerY =
model->center.y;
2788 centerZ =
model->center.z;
2821 if (
bbx != 0.0f &&
bby != 0.0f) {
2835 if (
bbx != 0.0f &&
bbz != 0.0f) {
2842 if (
bby != 0.0f &&
bbz != 0.0f) {
2849 if (
bbx != 0.0f &&
bby != 0.0f &&
bbz != 0.0f) {
2929 for (i =
model->modelID - 1; i >= 0; i--) {
2947 if (numChildren != 0) {
2950 for (i = 0; i < numChildren; i++,
TreeIterPos++) {
2966 if (
prop !=
nullptr) {
2988 if (
node !=
nullptr) {
3002 if (
node->groupData !=
nullptr) {
3006 if (
node->groupData->transformMatrix !=
nullptr) {
3010 numChildren =
node->groupData->numChildren;
3011 if (numChildren != 0) {
3012 for (i = 0; i < numChildren; i++) {
3017 if (
node->groupData->transformMatrix !=
nullptr) {
3057 s32 mainWrapW, mainWrapH;
3058 s32 auxWrapW, auxWrapH;
3103 if (palette !=
nullptr) {
3110 if (palette !=
nullptr || auxPalette !=
nullptr) {
3112 if (palette !=
nullptr) {
3119 if (auxPalette !=
nullptr) {
3152 switch (mainBitDepth) {
3177 switch (mainBitDepth) {
3229 switch (mainBitDepth) {
3255 switch (mainBitDepth) {
3282 switch (auxBitDepth) {
3341 if (
model->groupData !=
nullptr &&
model->groupData->numChildren != 0) {
3344 if (
model->groupData->transformMatrix !=
nullptr) {
3352 if (
prop ==
nullptr) {
3359 for (i = 0; i <
model->groupData->numChildren; i++) {
3365 (*gCurrentModelTreeNodeInfo)[
TreeIterPos].modelIndex = -1;
3366 (*gCurrentModelTreeNodeInfo)[
TreeIterPos].treeDepth = treeDepth;
3382 (*gCurrentModelTreeNodeInfo)[i].modelIndex = -1;
3383 (*gCurrentModelTreeNodeInfo)[i].treeDepth = treeDepth + 1;
3389 (*gCurrentModelTreeNodeInfo)[
TreeIterPos].treeDepth = treeDepth;
3397 u8 modelIndex = (*gCurrentModelTreeNodeInfo)[treeIndex].modelIndex;
3399 if (modelIndex != (
u8)-1) {
3407 if (
model !=
nullptr &&
model->modelID == treeIndex) {
3421 if (
group !=
nullptr &&
group->groupModelID == modelID) {
3434 *centerX =
model->center.x;
3435 *centerY =
model->center.y;
3436 *centerZ =
model->center.z;
3440 if (
bb !=
nullptr) {
3441 *sizeX =
bb->halfSizeX;
3442 *sizeY =
bb->halfSizeY;
3443 *sizeZ =
bb->halfSizeZ;
3445 *sizeX = *sizeY = *sizeZ = 0.0f;
3477 if (
node->groupData !=
nullptr) {
3478 numChildren =
node->groupData->numChildren;
3479 if (numChildren != 0) {
3480 for (i = 0; i < numChildren; i++) {
3534 newMtg->groupModelID = modelID;
3537 newMtg->matrixFreshness = 0;
3538 newMtg->bakedMtx =
nullptr;
3551 if (
prop !=
nullptr) {
3557 if (
prop !=
nullptr) {
3564 if (
bb !=
nullptr) {
3565 x = (
bb->minX +
bb->maxX) * 0.5f;
3566 y = (
bb->minY +
bb->maxY) * 0.5f;
3567 z = (
bb->minZ +
bb->maxZ) * 0.5f;
3572 if (
newMtg->bakedMtx !=
nullptr) {
3589 for (i =
group->minChildModelIndex; i <=
group->maxChildModelIndex; i++) {
3594 if (
model->bakedMtx !=
nullptr) {
3606 for (i =
group->minChildModelIndex; i <=
group->maxChildModelIndex; i++) {
3611 if (
model->bakedMtx !=
nullptr) {
3636 s32 modelIndex = (*gCurrentModelTreeNodeInfo)[treeIndex].modelIndex;
3643 s32 treeDepth = (*gCurrentModelTreeNodeInfo)[treeIndex].treeDepth;
3644 for (i = treeIndex - 1; i >= 0; i--) {
3649 siblingIndex = (*gCurrentModelTreeNodeInfo)[i].modelIndex;
3680 if (
model !=
nullptr) {
3695 s32 modelIndex = (*gCurrentModelTreeNodeInfo)[groupModelID].modelIndex;
3702 s32 treeDepth = (*gCurrentModelTreeNodeInfo)[groupModelID].treeDepth;
3703 for (i = groupModelID - 1; i >= 0; i--) {
3708 siblingIndex = (*gCurrentModelTreeNodeInfo)[i].modelIndex;
3721 if (customGfxIndex < 0) {
3745 if (
model !=
nullptr) {
3758 if (
model !=
nullptr) {
3809 model->texPannerID = texPannerID;
3829 if (customGfxIndex == -1) {
3830 customGfxIndex =
model->customGfxIndex & 0xF;
3837 model->customGfxIndex = (customGfxIndex & 0xF) + ((
tintType & 0xF) << 4);
3841 (*gCurrentCustomModelGfxPtr)[customGfxIndex * 2] =
pre;
3842 (*gCurrentCustomModelGfxPtr)[customGfxIndex * 2 + 1] =
post;
3846 (*gCurrentCustomModelGfxBuildersPtr)[customGfxIndex * 2] =
pre;
3847 (*gCurrentCustomModelGfxBuildersPtr)[customGfxIndex * 2 + 1] =
post;
3860 preFunc = (*gCurrentCustomModelGfxBuildersPtr)[i * 2];
3863 (*gCurrentCustomModelGfxPtr)[i * 2] =
gMainGfxPos;
3868 postFunc = (*gCurrentCustomModelGfxBuildersPtr)[i * 2 + 1];
3870 (*gCurrentCustomModelGfxPtr)[i * 2 + 1] =
gMainGfxPos;
3887 if (mtx ==
nullptr) {
3972 if (gfx ==
nullptr) {
3985 if (baseAddr !=
nullptr) {
4020 arg2->words.w0 =
w0;
4021 arg2->words.w1 = (
u32)
w1;
4030 for (i = 0; i < num *
sizeof(*src); i++) {
4031 ((
u8*)dest)[i] = ((
u8*)
src)[i];
4060 copy->gfxCopy[i] =
nullptr;
4061 copy->vtxCopy[i] =
nullptr;
4067 copy->numVertices = numVertices;
4083 Gfx* gfxCopy =
mlvc->gfxCopy[selector];
4137 dlist =
model->modelNode->displayData->displayList;
4140 cmd = dlist->words.w0 >> 0x18;
4229 for (i = 0; i <
sp18; i++) {
4233 if (arg2 !=
nullptr) {
4234 var_f10 = (arg2[0][0] *
ob0) + (arg2[1][0] *
ob1) + (arg2[2][0] *
ob2) + arg2[3][0];
4235 var_f6_2 = (arg2[0][2] *
ob0) + (arg2[1][2] *
ob1) + (arg2[2][2] *
ob2) + arg2[3][2];
4244 }
else if (
tc0 > 0.0f) {
4250 }
else if (
tc1 > 0.0f) {
4313 if (depthQueryID < 0) {
4423 if (depthQueryID < 0) {
4506 offset = (offset >> 6) << 6;
4522 model = (*modelList)[i];
4524 if (
model !=
nullptr) {
4559 ret->appendGfxArg =
task->appendGfxArg;
4560 ret->appendGfx =
task->appendGfx;
4573 void (*appendGfx)(
void*);
4585#define LESS(i, j) taskList[sorted[i]].dist < taskList[sorted[j]].dist
4586#define SWAP(i, j) tmp = sorted[i], sorted[i] = sorted[j], sorted[j] = tmp
4592#define LESS(i, j) taskList[sorted[i]].dist > taskList[sorted[j]].dist
4617 appendGfx(
task->appendGfxArg);
4634 appendGfx(
task->appendGfxArg);
BSS s32 PopupMenu_SelectedIndex
#define queue_render_task
#define mdl_draw_hidden_panel_surface
#define mdl_get_shroud_tint_params
#define ASSERT(condition)
@ TRANSFORM_GROUP_FLAG_INACTIVE
@ TRANSFORM_GROUP_FLAG_HIDDEN
@ TRANSFORM_GROUP_FLAG_VALID
@ TRANSFORM_GROUP_FLAG_MATRIX_DIRTY
@ TRANSFORM_GROUP_FLAG_IGNORE_MATRIX
@ MODEL_FLAG_DO_BOUNDS_CULLING
@ MODEL_FLAG_IGNORE_MATRIX
@ MODEL_FLAG_HAS_LOCAL_VERTEX_COPY
@ MODEL_FLAG_USES_CUSTOM_GFX
@ MODEL_FLAG_TRANSFORM_GROUP_MEMBER
@ MODEL_FLAG_MATRIX_DIRTY
@ MODEL_FLAG_HAS_TEX_PANNER
@ RENDER_TASK_FLAG_REFLECT_FLOOR
@ RENDER_TASK_FLAG_ENABLED
@ MODEL_GROUP_OTHERS_VISIBLE
@ RENDER_MODE_ALPHATEST_ONESIDED
@ RENDER_MODE_SURFACE_OPA_NO_ZB
@ RENDER_MODE_SURFACE_XLU_LAYER3
@ RENDER_MODE_DECAL_XLU_NO_AA
@ RENDER_MODE_SURFACE_XLU_LAYER2
@ RENDER_MODE_SURFACE_XLU_NO_AA
@ RENDER_MODE_SURF_SOLID_AA_ZB_LAYER0
@ RENDER_MODE_INTERSECTING_XLU
@ RENDER_MODE_PASS_THROUGH
@ RENDER_MODE_SURFACE_OPA_NO_AA
@ RENDER_MODE_SURFACE_XLU_NO_ZB
@ RENDER_MODE_DECAL_OPA_NO_AA
@ RENDER_MODE_SURFACE_XLU_NO_ZB_BEHIND
@ RENDER_MODE_SURFACE_OPA_NO_ZB_BEHIND
@ RENDER_MODE_SURFACE_XLU_ZB_ZUPD
@ RENDER_MODE_DECAL_XLU_AHEAD
@ RENDER_MODE_ALPHATEST_NO_ZB_BEHIND
@ RENDER_MODE_INTERSECTING_OPA
@ RENDER_MODE_SURFACE_OPA
@ RENDER_MODE_CLOUD_NO_ZB
@ RENDER_MODES_LAST_OPAQUE
@ RENDER_MODE_ALPHATEST_NO_ZB
@ RENDER_MODE_SURFACE_XLU_LAYER1
@ RENDER_MODE_SURFACE_XLU_AA_ZB_ZUPD
@ RENDER_MODE_CLOUD_NO_ZCMP
@ GLOBAL_OVERRIDES_ENABLE_FLOOR_REFLECTION
u32 dma_copy(Addr romStart, Addr romEnd, void *vramDest)
void * heap_malloc(s32 size)
#define gDPScrollMultiTile(pkt, timg, tmem, rtile, fmt, siz, width, height, uls, ult, lrs, lrt, pal, cms, cmt, masks, maskt, shifts, shiftt, scrolls, scrollt)
#define gDPScrollTextureBlockHalfHeight_4b(pkt, timg, fmt, width, height, pal, cms, cmt, masks, maskt, shifts, shiftt, scrolls, scrollt, shifts2, shiftt2)
#define gDPScrollTextureBlockHalfHeight(pkt, timg, fmt, siz, width, height, pal, cms, cmt, masks, maskt, shifts, shiftt, scrolls, scrollt, shifts2, shiftt2)
#define gDPScrollMultiTile_4b(pkt, timg, tmem, rtile, fmt, width, height, uls, ult, lrs, lrt, pal, cms, cmt, masks, maskt, shifts, shiftt, scrolls, scrollt)
int printf(const char *restrict fmt,...)
Gfx Gfx_RM3_SURFACE_OPA[]
#define DEPTH_MANTISSA_SHIFT
Gfx * mdl_get_copied_gfx(s32 copyIndex)
void func_8011B1D8(ModelNode *node)
void render_transform_group(void *group)
ModelCustomGfxList * gCurrentCustomModelGfxPtr
void clone_model(u16 srcModelID, u16 newModelID)
void mdl_set_shroud_tint_params(u8 r, u8 g, u8 b, u8 a)
Gfx Gfx_RM2_INTERSECTING_OPA_NO_AA[]
BSS s32 texPannerMainV[MAX_TEX_PANNERS]
s32 is_model_center_visible(u16 modelID, s32 depthQueryID, f32 *screenX, f32 *screenY)
BSS s8 bBackgroundTintMode
void enable_transform_group(u16 modelID)
void mdl_local_gfx_copy_vertices(Vtx *src, s32 num, Vtx *dest)
s32 get_transform_group_index(s32 modelID)
Gfx Gfx_RM2_DECAL_XLU_NO_AA[]
Gfx Gfx_RM3_SURFACE_XLU_NO_ZB[]
Gfx Gfx_RM2_SURFACE_XLU_NO_ZB[]
s32 get_model_list_index_from_tree_index(s32 treeIndex)
Gfx Gfx_RM2_INTERSECTING_XLU[]
Gfx Gfx_RM2_INTERSECTING_OPA[]
void render_transform_group_node(ModelNode *node)
BSS ModelTreeInfoList wModelTreeNodeInfo
ModelNode ** gCurrentModelTreeRoot
Gfx Gfx_RM1_CLOUD_NO_ZB[]
void func_80117D00(Model *model)
void init_model_data(void)
BSS s32 texPannerAuxV[MAX_TEX_PANNERS]
void clear_render_tasks(void)
Gfx Gfx_RM3_INTERSECTING_OPA_NO_AA[]
void clear_model_data(void)
Gfx Gfx_RM1_PASS_THROUGH[]
Gfx Gfx_RM1_INTERSECTING_OPA_NO_AA[]
BSS s8 wBackgroundTintMode
#define BATTLE_TEXTURE_MEMORY_SIZE
void mdl_project_tex_coords(s32 modelID, Gfx *outGfx, Matrix4f arg2, Vtx *arg3)
void set_tex_panner(Model *model, s32 texPannerID)
void mdl_reset_transform_flags(void)
Gfx Gfx_RM1_SURFACE_XLU[]
void set_world_fog_color(s32 r, s32 g, s32 b, s32 a)
BSS ModelNode * bModelTreeRoot
Gfx Gfx_RM2_SURFACE_OPA_NO_ZB[]
void mdl_get_vertex_count(Gfx *gfx, s32 *numVertices, Vtx **baseVtx, s32 *gfxCount, Vtx *baseAddr)
Gfx Gfx_RM2_DECAL_OPA_NO_AA[]
Gfx Gfx_RM1_SURFACE_XLU_AA_ZB_ZUPD[]
TextureHandle TextureHandles[128]
void mdl_calculate_model_sizes(void)
Model * get_model_from_list_index(s32 listIndex)
#define WORLD_TEXTURE_MEMORY_SIZE
Gfx Gfx_RM3_PASS_THROUGH[]
#define DEPTH_MANTISSA_MASK
Gfx Gfx_RM2_SURFACE_XLU[]
Gfx Gfx_RM3_SURFACE_OPA_NO_ZB[]
BSS ModelTransformGroupList bTransformGroups
Gfx Gfx_RM2_SURFACE_XLU_NO_AA[]
Gfx Gfx_RM3_DECAL_OPA_NO_AA[]
void disable_world_fog(void)
BSS ModelTreeInfoList bModelTreeNodeInfo
Gfx Gfx_RM2_ALPHATEST_NO_ZB[]
Gfx Gfx_RM2_SURFACE_OPA[]
BSS ModelLocalVertexCopyList bModelLocalVtxBuffers
void mdl_set_all_tint_type(s32 tintType)
void load_data_for_models(ModelNode *rootModel, s32 texturesOffset, s32 size)
void load_next_model_textures(ModelNode *model, s32 romOffset, s32 texSize)
void load_model_transforms(ModelNode *model, ModelNode *parent, Matrix4f mdlTxMtx, s32 treeDepth)
BSS FogSettings bFogSettings
s32 is_world_fog_enabled(void)
BSS s32 RenderTaskCount[3]
void set_custom_gfx_builders(s32 customGfxIndex, ModelCustomGfxBuilderFunc pre, ModelCustomGfxBuilderFunc post)
BSS ModelNode * wModelTreeRoot
void mdl_get_remap_tint_params(u8 *primR, u8 *primG, u8 *primB, u8 *envR, u8 *envG, u8 *envB)
void disable_transform_group(u16 modelID)
BSS ModelNode * mtg_FoundModelNode
Gfx SolidCombineModes[][5]
u8 * gBackgroundTintModePtr
void mdl_make_transform_group(u16 modelID)
void load_texture_variants(u32 romOffset, s32 textureID, s32 baseOffset, s32 size)
void appendGfx_model_group(void *model)
void set_custom_gfx(s32 customGfxIndex, Gfx *pre, Gfx *post)
void * mdl_get_next_texture_address(s32 size)
Gfx Gfx_RM3_ALPHATEST_ONESIDED[]
Gfx Gfx_RM2_PASS_THROUGH[]
BSS s32 RenderTaskListIdx
BSS ModelCustomGfxBuilderList bCustomModelGfxBuilders
Gfx Gfx_RM1_SURFACE_OPA_NO_ZB[]
s32 mdl_get_child_count(ModelNode *model)
void build_custom_gfx(void)
BSS RenderTask * RenderTaskLists[3]
@ TEX_COMBINE_AUX_SHARED_1
@ TEX_COMBINE_MAIN_ONLY_2
@ TEX_COMBINE_MAIN_ONLY_0
@ TEX_COMBINE_MAIN_ONLY_1
@ TEX_COMBINE_AUX_SHARED_0
@ TEX_COMBINE_AUX_SHARED_2
DepthFloatFactors DepthFloatLookupTable[]
void load_texture_by_name(ModelNodeProperty *propertyName, s32 romOffset, s32 size)
BSS s32 texPannerAuxU[MAX_TEX_PANNERS]
ModelCustomGfxBuilderList * gCurrentCustomModelGfxBuildersPtr
void enable_world_fog(void)
Gfx Gfx_RM2_SURFACE_OPA_NO_AA[]
Gfx Gfx_RM3_SURFACE_OPA_NO_AA[]
void mdl_group_set_custom_gfx(u16 groupModelID, s32 customGfxIndex, s32 tintType, b32 invertSelection)
void mdl_set_remap_tint_params(u8 maxR, u8 maxG, u8 maxB, u8 minR, u8 minG, u8 minB)
ModelTransformGroupList * gCurrentTransformGroups
void set_mdl_custom_gfx_set(Model *model, s32 customGfxIndex, u32 tintType)
Gfx Gfx_RM2_SURFACE_XLU_AA_ZB_ZUPD[]
s32 is_identity_fixed_mtx(Mtx *mtx)
void mdl_get_depth_tint_params(u8 *primR, u8 *primG, u8 *primB, u8 *primA, u8 *fogR, u8 *fogG, u8 *fogB, s32 *fogStart, s32 *fogEnd)
Gfx Gfx_RM3_SURFACE_XLU_NO_AA[]
void set_aux_pan_v(s32 texPannerID, s32 value)
void mdl_make_local_vertex_copy(s32 copyIndex, u16 modelID, s32 isMakingCopy)
void set_world_fog_dist(s32 start, s32 end)
Addr BattleEntityHeapBottom
void set_main_pan_u(s32 texPannerID, s32 value)
Gfx Gfx_RM1_INTERSECTING_XLU[]
Gfx Gfx_RM2_CLOUD_NO_ZB[]
Gfx Gfx_RM1_SURFACE_OPA[]
Gfx Gfx_RM3_DECAL_XLU_NO_AA[]
Gfx Gfx_RM3_INTERSECTING_XLU[]
BSS FogSettings * gFogSettings
void mdl_create_model(ModelBlueprint *bp, s32 unused)
Gfx Gfx_RM3_INTERSECTING_OPA[]
Gfx Gfx_RM1_SURFACE_XLU_ZB_ZUPD[]
ModelTreeInfoList * gCurrentModelTreeNodeInfo
Gfx Gfx_RM1_DECAL_OPA_NO_AA[]
void mdl_load_all_textures(ModelNode *rootModel, s32 romOffset, s32 size)
void set_aux_pan_u(s32 texPannerID, s32 value)
BSS ModelCustomGfxList bCustomModelGfx
#define MAX_VIEWPORT_DEPTH
Gfx Gfx_RM2_ALPHATEST_ONESIDED[]
void mdl_local_gfx_update_vtx_pointers(Gfx *nodeDlist, Vtx *baseVtx, Gfx *arg2, Vtx *arg3)
OPTIMIZE_OFAST void execute_render_tasks(void)
Gfx AlphaTestCombineModes[][5]
Gfx Gfx_RM1_ALPHATEST_ONESIDED[]
BSS void * TextureHeapPos
void get_world_fog_color(s32 *r, s32 *g, s32 *b, s32 *a)
BSS FogSettings wFogSettings
BSS ModelLocalVertexCopyList wModelLocalVtxBuffers
ModelList * gCurrentModels
void make_texture_gfx(TextureHeader *, Gfx **, IMG_PTR raster, PAL_PTR palette, IMG_PTR auxRaster, PAL_PTR auxPalette, u8, u8, u16, u16)
void set_main_pan_v(s32 texPannerID, s32 value)
Gfx Gfx_RM1_SURFACE_XLU_NO_ZB[]
void load_texture_impl(u32 romOffset, TextureHandle *handle, TextureHeader *header, s32 mainSize, s32 mainPalSize, s32 auxSize, s32 auxPalSize)
BSS u16 mtg_SearchModelID
BSS ModelCustomGfxBuilderList wCustomModelGfxBuilders
Gfx Gfx_RM3_SURFACE_XLU_AA_ZB_ZUPD[]
Gfx Gfx_RM1_ALPHATEST_NO_ZB[]
ModelNodeProperty * get_model_property(ModelNode *node, ModelPropertyKeys key)
void mdl_get_copied_vertices(s32 copyIndex, Vtx **firstVertex, Vtx **copiedVertices, s32 *numCopied)
void appendGfx_model(void *data)
Gfx Gfx_RM1_SURFACE_XLU_NO_AA[]
void get_world_fog_distance(s32 *start, s32 *end)
void mdl_update_transform_matrices(void)
Gfx Gfx_RM1_CLOUD_NO_ZCMP[]
BSS ModelTransformGroupList wTransformGroups
BSS ModelLocalVertexCopyList * gCurrentModelLocalVtxBuffers
BSS s32 texPannerMainU[MAX_TEX_PANNERS]
#define DEPTH_EXPONENT_SHIFT
s32 RenderTaskBasePriorities[]
BSS u16 DepthCopyBuffer[16]
BSS ModelCustomGfxList wCustomModelGfx
Gfx Gfx_RM1_DECAL_XLU_NO_AA[]
@ RENDER_CLASS_1CYC_SHROUD
@ RENDER_CLASS_2CYC_DEPTH
@ RENDER_CLASS_1CYC_DEPTH
@ RENDER_CLASS_2CYC_SHROUD
@ RENDER_CLASS_FOG_SHROUD
void mdl_group_set_visibility(u16 treeIndex, s32 flags, s32 mode)
Gfx Gfx_RM3_ALPHATEST_NO_ZB[]
Gfx Gfx_RM1_INTERSECTING_OPA[]
Gfx Gfx_RM3_SURFACE_XLU[]
void get_model_center_and_size(u16 modelID, f32 *centerX, f32 *centerY, f32 *centerZ, f32 *sizeX, f32 *sizeY, f32 *sizeZ)
ModelTransformGroup * get_transform_group(s32 index)
#define TEST_POINT_VISIBILITY
Gfx Gfx_RM1_SURFACE_OPA_NO_AA[]
Gfx Gfx_RM3_CLOUD_NO_ZB[]
void mdl_set_depth_tint_params(u8 primR, u8 primG, u8 primB, u8 primA, u8 fogR, u8 fogG, u8 fogB, s32 fogStart, s32 fogEnd)
ModelLocalVertexCopy * ModelLocalVertexCopyList[16]
ModelCustomGfxBuilderFunc ModelCustomGfxBuilderList[32]
void(* ModelCustomGfxBuilderFunc)(s32 index)
struct ModelNode ** childList
ModelTransformGroup * ModelTransformGroupList[4]
ModelDisplayData * displayData
@ EXTRA_TILE_AUX_INDEPENDENT
@ EXTRA_TILE_AUX_SAME_AS_MAIN
ModelTreeInfo ModelTreeInfoList[0x200]
struct ModelGroupData * groupData
Gfx * ModelCustomGfxList[32]
@ MODEL_PROP_KEY_BOUNDING_BOX
@ MODEL_PROP_KEY_GROUP_INFO
@ MODEL_PROP_KEY_TEXTURE_NAME
@ MODEL_PROP_KEY_RENDER_MODE
BSS RenderTask ClearRenderTaskLists[3][0x100]
#define NUM_RENDER_TASK_LISTS
#define QSORT(Q_N, Q_LESS, Q_SWAP)
#define RDP_MATRIX( Ax, Bx, Cx, Dx, Ay, By, Cy, Dy, Az, Bz, Cz, Dz, Aw, Bw, Cw, Dw)
#define PM_CC_TEX_COMBINE_3C
#define PM_CC_TEX_COMBINE_3B
#define PM_CC_ALT_INTERFERENCE
#define PM_CC_TINT_REMAP_SHADE_ALPHA
#define PM_CC_TEX_COMBINE_3A
#define PM_CC2_MULTIPLY_SHADE
#define PM_CC_TINT_REMAP_NO_SHADE
#define PM_CC_TINT_DEPTH_NO_SHADE
#define PM_CC_TINT_DEPTH_MIPMAPS
#define MAX_MODEL_TRANSFORM_GROUPS
#define PM_CC_TINT_REMAP_NOTEX
#define PM_CC_TINT_DEPTH_NOTEX
void(* appendGfx)(void *)
u8 Addr[]
Linker symbol address, as in ld_addrs.h.
GameStatus * gGameStatusPtr
DisplayContext * gDisplayContext