Skip to content

Add inline_includes.py script to inline .inc.c files into source assets files#2712

Open
Dragorn421 wants to merge 2 commits into
zeldaret:mainfrom
Dragorn421:add_inline_includes_script
Open

Add inline_includes.py script to inline .inc.c files into source assets files#2712
Dragorn421 wants to merge 2 commits into
zeldaret:mainfrom
Dragorn421:add_inline_includes_script

Conversation

@Dragorn421
Copy link
Copy Markdown
Collaborator

This is very useful when wanting to look at assets without keeping going back and forth between the main source .c and the sub .inc.c files.

Examples:

Details
$ ./tools/assets/inline_includes.py extracted/gc-eu-mq-dbg/assets/objects/object_daiku/object_daiku.c -t 'void*[]' -t FlexSkeletonHeader
Wrote to extracted/gc-eu-mq-dbg/assets/objects/object_daiku/object_daiku.inline.c
#include "object_daiku.h"

#include "array_count.h"
#include "gfx.h"
#include "sys_matrix.h"
#include "ultra64.h"

s16 object_daiku_Anim_000600_06000000_FrameData[] = {
#include "assets/objects/object_daiku/object_daiku_Anim_000600_06000000_FrameData.inc.c"
};

// ...

Vtx object_daiku_Vtx_005230[] = {
#include "assets/objects/object_daiku/object_daiku_Vtx_005230.inc.c"
};

Gfx object_daiku_DL_005490[126] = {
#include "assets/objects/object_daiku/object_daiku_DL_005490.inc.c"
};

// ...

StandardLimb object_daiku_Limb_00790C = {
#include "assets/objects/object_daiku/object_daiku_Limb_00790C.inc.c"
};

void* object_daiku_Skel_007958_06007918_Limbs[] = {
    &object_daiku_Limb_007858, // 0
    &object_daiku_Limb_007864, // 1
    &object_daiku_Limb_007870, // 2
    &object_daiku_Limb_00787C, // 3
    &object_daiku_Limb_007888, // 4
    &object_daiku_Limb_007894, // 5
    &object_daiku_Limb_0078A0, // 6
    &object_daiku_Limb_0078AC, // 7
    &object_daiku_Limb_0078B8, // 8
    &object_daiku_Limb_0078C4, // 9
    &object_daiku_Limb_0078D0, // 10
    &object_daiku_Limb_0078DC, // 11
    &object_daiku_Limb_0078E8, // 12
    &object_daiku_Limb_0078F4, // 13
    &object_daiku_Limb_007900, // 14
    &object_daiku_Limb_00790C, // 15
};

FlexSkeletonHeader object_daiku_Skel_007958 = {
    {
        object_daiku_Skel_007958_06007918_Limbs, // segment
        ARRAY_COUNT(object_daiku_Skel_007958_06007918_Limbs), // limbCount
    }, // sh
    16, // dListCount
};

u8 object_daiku_zeros_007964[12] = { 0 };

s16 object_daiku_Anim_007DE0_06007970_FrameData[] = {
#include "assets/objects/object_daiku/object_daiku_Anim_007DE0_06007970_FrameData.inc.c"
};

// ...
Details
$ ./tools/assets/inline_includes.py extracted/gc-eu-mq-dbg/assets/objects/object_daiku/object_daiku.c
Inline s16[] ? (object_daiku_Anim_000600_06000000_FrameData) [y/n] n
Inline JointIndex[] ? (object_daiku_Anim_000600_06000598_JointIndices) [y/n] y
Inline AnimationHeader ? (object_daiku_Anim_000600) [y/n] y
Inline Vtx[] ? (object_daiku_Vtx_0029E0) [y/n] n
Inline Gfx[] ? (object_daiku_DL_005490) [y/n] y
Inline StandardLimb ? (object_daiku_Limb_007858) [y/n] y
Inline void*[] ? (object_daiku_Skel_007958_06007918_Limbs) [y/n] y
Inline FlexSkeletonHeader ? (object_daiku_Skel_007958) [y/n] y
Inlined types: -t 'JointIndex[]' -t 'Gfx[]' -t 'FlexSkeletonHeader' -t 'StandardLimb' -t 'void*[]' -t 'AnimationHeader'
Wrote to extracted/gc-eu-mq-dbg/assets/objects/object_daiku/object_daiku.inline.c
#include "object_daiku.h"

#include "array_count.h"
#include "gfx.h"
#include "sys_matrix.h"
#include "ultra64.h"

s16 object_daiku_Anim_000600_06000000_FrameData[] = {
#include "assets/objects/object_daiku/object_daiku_Anim_000600_06000000_FrameData.inc.c"
};

JointIndex object_daiku_Anim_000600_06000598_JointIndices[] = {
    {
        0, // x
        15, // y
        0, // z
    }, // 0
    // ...
    {
        0, // x
        0, // y
        687, // z
    }, // 16
};

AnimationHeader object_daiku_Anim_000600 = {
    {
        28, // frameCount
    }, // common
    object_daiku_Anim_000600_06000000_FrameData, // frameData
    object_daiku_Anim_000600_06000598_JointIndices, // jointIndices
    15, // staticIndexMax
};

u64 object_daiku_TLUT_001AC0[] = {
#include "assets/objects/object_daiku/object_daiku_TLUT_001AC0.tlut.rgba16.inc.c"
};

u64 object_daiku_Tex_001CC0[TEX_LEN(u64, object_daiku_Tex_001CC0_WIDTH, object_daiku_Tex_001CC0_HEIGHT, 8)] = {
#include "assets/objects/object_daiku/object_daiku_Tex_001CC0.ci8.tlut_object_daiku_TLUT_001AC0.inc.c"
};

// ...

Vtx object_daiku_Vtx_005230[] = {
#include "assets/objects/object_daiku/object_daiku_Vtx_005230.inc.c"
};

Gfx object_daiku_DL_005490[126] = {
    gsSPMatrix(0x0D000000, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW),
    gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
    gsSPSetGeometryMode(G_LIGHTING),
    gsSPClearGeometryMode(G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR),
    gsSPVertex(&object_daiku_Vtx_0043B0[0], 1, 0),
    gsSPVertex(&object_daiku_Vtx_0043B0[1], 2, 1),
    gsSPVertex(&object_daiku_Vtx_0043B0[3], 6, 3),
    gsSPMatrix(0x0D0001C0, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW),
    gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
    gsDPPipeSync(),
    gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2),
    gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0, PRIMITIVE, 0, COMBINED, 0, 0, 0, 0, COMBINED),
    gsDPSetTextureLUT(G_TT_RGBA16),
    gsDPLoadTLUT_pal256(object_daiku_TLUT_001AC0),
    gsDPLoadTextureBlock(object_daiku_Tex_002920, G_IM_FMT_CI, G_IM_SIZ_8b, object_daiku_Tex_002920_WIDTH,
 object_daiku_Tex_002920_HEIGHT, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_CLAMP, 3, 3, G_TX_NOLOD,
 G_TX_NOLOD),
    gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 0x001C, 0x001C),
    gsDPSetPrimColor(0, 0x80, 255, 255, 255, 255),
    gsSPSetGeometryMode(G_CULL_BACK),
    gsSPVertex(&object_daiku_Vtx_0043B0[9], 6, 9),
    gsSP2Triangles(8, 9, 10, 0, 11, 4, 8, 0),
    gsSP2Triangles(8, 6, 12, 0, 13, 14, 8, 0),
    gsDPPipeSync(),
    // ...
    gsDPPipeSync(),
    gsDPSetTextureLUT(G_TT_RGBA16),
    gsDPLoadTLUT_pal256(object_daiku_TLUT_001AC0),
    gsDPLoadTextureBlock(object_daiku_Tex_001FE0, G_IM_FMT_CI, G_IM_SIZ_8b, object_daiku_Tex_001FE0_WIDTH,
 object_daiku_Tex_001FE0_HEIGHT, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 3, 3, G_TX_NOLOD,
 G_TX_NOLOD),
    gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 0x001C, 0x001C),
    gsSP2Triangles(24, 25, 26, 0, 27, 28, 29, 0),
    gsSPEndDisplayList(),
};

// ...

StandardLimb object_daiku_Limb_007858 = {
    {
        0, // x
        3500, // y
        0, // z
    }, // jointPos
    /* 1 */ LIMB_OBJECT_DAIKU_007864 - 1, // child
    /* 255 */ LIMB_DONE, // sibling
    object_daiku_DL_006CC0, // dList
};

// ...

void* object_daiku_Skel_007958_06007918_Limbs[] = {
    &object_daiku_Limb_007858, // 0
    &object_daiku_Limb_007864, // 1
    &object_daiku_Limb_007870, // 2
    &object_daiku_Limb_00787C, // 3
    &object_daiku_Limb_007888, // 4
    &object_daiku_Limb_007894, // 5
    &object_daiku_Limb_0078A0, // 6
    &object_daiku_Limb_0078AC, // 7
    &object_daiku_Limb_0078B8, // 8
    &object_daiku_Limb_0078C4, // 9
    &object_daiku_Limb_0078D0, // 10
    &object_daiku_Limb_0078DC, // 11
    &object_daiku_Limb_0078E8, // 12
    &object_daiku_Limb_0078F4, // 13
    &object_daiku_Limb_007900, // 14
    &object_daiku_Limb_00790C, // 15
};

FlexSkeletonHeader object_daiku_Skel_007958 = {
    {
        object_daiku_Skel_007958_06007918_Limbs, // segment
        ARRAY_COUNT(object_daiku_Skel_007958_06007918_Limbs), // limbCount
    }, // sh
    16, // dListCount
};

u8 object_daiku_zeros_007964[12] = { 0 };

s16 object_daiku_Anim_007DE0_06007970_FrameData[] = {
#include "assets/objects/object_daiku/object_daiku_Anim_007DE0_06007970_FrameData.inc.c"
};

// ...
Details
$ ./tools/assets/inline_includes.py extracted/gc-eu-mq-db
g/assets/objects/object_daiku/object_daiku.c --link-pngs -t AnimationHeader
Wrote to extracted/gc-eu-mq-dbg/assets/objects/object_daiku/object_daiku.inline.c

Note: file:// URIs are clickable with VSCode!

#include "object_daiku.h"

#include "array_count.h"
#include "gfx.h"
#include "sys_matrix.h"
#include "ultra64.h"

// ...

s16 object_daiku_Anim_001AB0_06000C60_FrameData[] = {
#include "assets/objects/object_daiku/object_daiku_Anim_001AB0_06000C60_FrameData.inc.c"
};

JointIndex object_daiku_Anim_001AB0_06001A48_JointIndices[] = {
#include "assets/objects/object_daiku/object_daiku_Anim_001AB0_06001A48_JointIndices.inc.c"
};

AnimationHeader object_daiku_Anim_001AB0 = {
    {
        59, // frameCount
    }, // common
    object_daiku_Anim_001AB0_06000C60_FrameData, // frameData
    object_daiku_Anim_001AB0_06001A48_JointIndices, // jointIndices
    10, // staticIndexMax
};

u64 object_daiku_TLUT_001AC0[] = {
#include "assets/objects/object_daiku/object_daiku_TLUT_001AC0.tlut.rgba16.inc.c"
};

u64 object_daiku_Tex_001CC0[TEX_LEN(u64, object_daiku_Tex_001CC0_WIDTH, object_daiku_Tex_001CC0_HEIGHT, 8)] = {
// file:///home/dragorn421/Documents/oot/extracted/gc-eu-mq-dbg/assets/objects/object_daiku/object_daiku_Tex_001CC0.ci8.tlut_object_daiku_TLUT_001AC0.png
#include "assets/objects/object_daiku/object_daiku_Tex_001CC0.ci8.tlut_object_daiku_TLUT_001AC0.inc.c"
};

u64 object_daiku_Tex_001D00[TEX_LEN(u64, object_daiku_Tex_001D00_WIDTH, object_daiku_Tex_001D00_HEIGHT, 8)] = {
// file:///home/dragorn421/Documents/oot/extracted/gc-eu-mq-dbg/assets/objects/object_daiku/object_daiku_Tex_001D00.ci8.tlut_object_daiku_TLUT_001AC0.png
#include "assets/objects/object_daiku/object_daiku_Tex_001D00.ci8.tlut_object_daiku_TLUT_001AC0.inc.c"
};

u64 object_daiku_Tex_001E00[TEX_LEN(u64, object_daiku_Tex_001E00_WIDTH, object_daiku_Tex_001E00_HEIGHT, 16)] = {
// file:///home/dragorn421/Documents/oot/extracted/gc-eu-mq-dbg/assets/objects/object_daiku/object_daiku_Tex_001E00.rgba16.png
#include "assets/objects/object_daiku/object_daiku_Tex_001E00.rgba16.inc.c"
};

// ...

@Dragorn421 Dragorn421 force-pushed the add_inline_includes_script branch from 21fb8fc to c5462be Compare May 5, 2026 05:13
@Dragorn421 Dragorn421 force-pushed the add_inline_includes_script branch from c5462be to bc76bf6 Compare May 5, 2026 05:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant