7extern Addr imgfx_data_ROM_START;
127Lights2
ImgFXLights = gdSPDefLights2(144, 144, 144, 255, 255, 255, 0, 0, 120, 255, 255, 255, 0, 0, 136);
131 .vscale = { 640, 480, 511, 0 },
132 .vtrans = { 640, 480, 511, 0 },
138 .vscale = { 640, 480, 511, 0 },
139 .vtrans = { 640, 480, 512, 0 },
146 gsSPClearGeometryMode(G_CULL_BOTH | G_LIGHTING),
147 gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
148 gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
149 gsDPSetAlphaCompare(G_AC_NONE),
150 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 18,
151 G_AD_DISABLE | G_CD_DISABLE | G_TC_FILT | G_TF_BILERP | G_TP_PERSP),
152 gsSPEndDisplayList(),
290 (*ImgFXInstances)[i].colorBuf = NULL;
291 (*ImgFXInstances)[i].colorBufCount = 0;
351 if (numAssigned < count) {
368 (*ImgFXInstances)[iPrev].nextIdx = i;
371 (*ImgFXInstances)[i].arrayIdx = i;
376 if (numAssigned == count) {
377 (*ImgFXInstances)[i].nextIdx = -1;
387 (*ImgFXInstances)[idx].flags = 0;
388 (*ImgFXInstances)[idx].nextIdx = -1;
397 next = (*ImgFXInstances)[idx].nextIdx;
400 }
while (next != -1);
417 return &(*ImgFXInstances)[idx];
424 if (state->
vtxBufs[0] != NULL) {
428 if (state->
vtxBufs[1] != NULL) {
432 if (state->
gfxBufs[0] != NULL) {
436 if (state->
gfxBufs[1] != NULL) {
498 oldFlags = state->
flags;
501 state->
flags = oldFlags;
545 && state->
ints.
anim.type == imgfxArg1
546 && state->
ints.
anim.interval == imgfxArg2
547 && state->
ints.
anim.step == imgfxArg3
607 if (imgfxArg1 >= 255 && imgfxArg2 >= 255 && imgfxArg3 >= 255 && imgfxArg4 >= 255) {
610 }
else if (imgfxArg4 >= 255) {
613 }
else if (imgfxArg1 >= 255 && imgfxArg2 >= 255 && imgfxArg3 >= 255) {
623 if (imgfxArg4 == 255.0) {
630 if (imgfxArg1 < state->colorBufCount) {
632 r = (imgfxArg2 & 0xFF000000) >> 24;
633 g = (imgfxArg2 & 0xFF0000) >> 16;
634 b = (imgfxArg2 & 0xFF00) >> 8;
635 a = (imgfxArg2 & 0xFF);
651 if (imgfxArg1 < state->colorBufCount) {
653 r = (imgfxArg2 & 0xFF000000) >> 24;
654 g = (imgfxArg2 & 0xFF0000) >> 16;
655 b = (imgfxArg2 & 0xFF00) >> 8;
656 a = (imgfxArg2 & 0xFF);
680 if (imgfxArg2 >= 255) {
696 (*ImgFXInstances)[idx].flags |= flagBits;
698 (*ImgFXInstances)[idx].flags &= ~flagBits;
707 if (ifxImg->
alpha == 0) {
712 state->
flags |= flagBits;
761 if (state->
ints.
raw[1][2] == 0) {
796 s16 skipModeChange = FALSE;
824 mode1 = renderMode->
mode1;
825 mode2 = renderMode->
mode2;
827 skipModeChange = TRUE;
848 primAlpha = state->
ints.
color.a * ifxImgAlpha;
852 skipModeChange = TRUE;
856 mode1 &= ~CVG_DST_FULL;
857 mode2 &= ~CVG_DST_FULL;
858 mode1 |= (ALPHA_CVG_SEL | IM_RD);
859 mode2 |= (ALPHA_CVG_SEL | IM_RD);
866 if (skipModeChange) {
870 mode1 |= (Z_CMP | Z_UPD);
871 mode2 |= (Z_CMP | Z_UPD);
877 switch (renderType) {
881 gDPSetCombineMode(
gMainGfxPos++, G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM);
888 if (primAlpha <= 0) {
892 gDPSetPrimColor(
gMainGfxPos++, 0, 0, 0, 0, 0, primAlpha);
897 if (primAlpha <= 0) {
900 gDPSetCombineMode(
gMainGfxPos++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
914 if (primAlpha <= 0) {
924 gDPSetCombineMode(
gMainGfxPos++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
925 gSPSetGeometryMode(
gMainGfxPos++, G_SHADE | G_SHADING_SMOOTH);
932 gSPSetGeometryMode(
gMainGfxPos++, G_SHADE | G_SHADING_SMOOTH);
939 gSPSetGeometryMode(
gMainGfxPos++, G_SHADE | G_SHADING_SMOOTH);
945 gDPSetCombineMode(
gMainGfxPos++, G_CC_MODULATEIA, G_CC_MODULATEIA);
946 gSPSetGeometryMode(
gMainGfxPos++, G_SHADE | G_SHADING_SMOOTH);
953 gSPSetGeometryMode(
gMainGfxPos++, G_SHADE | G_SHADING_SMOOTH);
960 gDPSetCombineMode(
gMainGfxPos++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
961 gSPSetGeometryMode(
gMainGfxPos++, G_SHADE | G_LIGHTING | G_SHADING_SMOOTH);
974 gDPSetCombineMode(
gMainGfxPos++, G_CC_DECALRGBA, G_CC_DECALRGBA);
978 primAlpha = state->
ints.
hologram.alphaAmt * ifxImgAlpha;
988 primAlpha = state->
ints.
hologram.alphaAmt * ifxImgAlpha;
992 gDPSetPrimColor(
gMainGfxPos++, 0, 0, 0, 0, 0, primAlpha);
996 if (blendAlpha > 255) {
999 primAlpha = state->
ints.
hologram.alphaAmt * ifxImgAlpha;
1004 gDPSetAlphaCompare(
gMainGfxPos++, G_AC_THRESHOLD);
1005 gDPSetPrimColor(
gMainGfxPos++, 0, 0, 0, 0, 0, primAlpha);
1006 gDPSetBlendColor(
gMainGfxPos++, 0, 0, 0, blendAlpha);
1021 gDPSetCombineMode(
gMainGfxPos++, G_CC_DECALRGBA, G_CC_DECALRGBA);
1100 leftColor = rightColor + 120;
1157 for (i = 0; i <= state->
subdivY; i++) {
1167 for (j = 0; j <= state->
subdivX; vtx++, j++) {
1172 vtx->n.ob[0] = posX;
1173 vtx->n.ob[1] = posY;
1175 vtx->n.tc[0] = ((s32) texU + 256) * 32;
1176 vtx->n.tc[1] = ((s32) texV + 256) * 32;
1199 if (state->
vtxBufs[0] != NULL) {
1203 if (state->
vtxBufs[1] != NULL) {
1207 if (state->
gfxBufs[0] != NULL) {
1211 if (state->
gfxBufs[1] != NULL) {
1213 romEnd = (u8*) state->
gfxBufs[1];
1222 romStart = imgfx_data_ROM_START + (s32)anim->
gfxOffset;
1223 romEnd = romStart + anim->
gfxCount *
sizeof(Gfx);
1230 Gfx* gfxBuffer = state->
gfxBufs[i];
1236 u32 w0 = gfxBuffer[j++].words.w0;
1244 gfxBuffer[j-1].words.w1 = ((((s32) gfxBuffer[j-1].words.w1 - (s32) anim->
keyframesOffset) / 3) * 4) +
1247 }
while (cmd != G_ENDDL);
1255 s32 absKeyframeInterval;
1260 s32 keyframeInterval = state->
ints.
anim.interval;
1261 s32 animStep = state->
ints.
anim.step;
1262 s32 curSubframe = state->
floats.
anim.curFrame;
1268 if (header == NULL) {
1273 state->
flags &= ~IMGFX_FLAG_200;
1279 absKeyframeInterval = abs(keyframeInterval);
1281 nextKeyIdx = curKeyIdx;
1284 nextKeyIdx = curKeyIdx - 1;
1285 if (nextKeyIdx < 0) {
1286 nextKeyIdx = curKeyIdx;
1292 nextKeyIdx = curKeyIdx + 1;
1294 nextKeyIdx = curKeyIdx;
1306 if (keyframeInterval > 1) {
1312 lerpAlpha = (f32) curSubframe / (f32) keyframeInterval;
1313 for (i = 0; i < header->
vtxCount; i++) {
1318 if (keyframeInterval > 1) {
1375 if (nextKeyframe != NULL) {
1383 if (keyframeInterval > 0) {
1385 if (curSubframe >= keyframeInterval) {
1388 if (curKeyIdx < 0) {
1417 }
else if (keyframeInterval < 0) {
1419 curKeyIdx -= absKeyframeInterval;
1420 if (curKeyIdx < 0) {
1433 curKeyIdx += absKeyframeInterval;
1476 && (state->
flags & someFlags)
1488 G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP,
1490 G_TX_NOLOD, G_TX_NOLOD,
1492 gDPSetTile(
gMainGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 0x100, 2, 0,
1493 G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP,
1494 G_TX_NOMASK, G_TX_NOLOD);
1512 && (state->
flags & someFlags)
1532 gSP2Triangles(
gMainGfxPos++, 0, 2, 1, 0, 1, 2, 3, 0);
1543 G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP,
1545 G_TX_NOLOD, G_TX_NOLOD,
1550 && (state->
flags & someFlags)
1561 if (alpha2 == 255) {
1562 gDPSetRenderMode(
gMainGfxPos++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
1564 gDPSetRenderMode(
gMainGfxPos++, G_RM_ZB_XLU_SURF, G_RM_ZB_XLU_SURF2);
1588 gSP2Triangles(
gMainGfxPos++, 0, 2, 1, 0, 1, 2, 3, 0);
1591 if (alpha2 == 255) {
1592 gDPSetRenderMode(
gMainGfxPos++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2);
1594 gDPSetRenderMode(
gMainGfxPos++, G_RM_ZB_XLU_SURF, G_RM_ZB_XLU_SURF2);
1597 gDPSetEnvColor(
gMainGfxPos++, 100, 100, 100, 255);
1598 gDPSetPrimColor(
gMainGfxPos++, 0, 0, 0, 0, 0, alpha2);
1607 && (state->
flags & someFlags)
1620 gSP2Triangles(
gMainGfxPos++, 0, 2, 1, 0, 1, 2, 3, 0);
1640 for (i = 0; i < state->
subdivY; i++) {
1641 for (j = 0; j < state->
subdivX; j++) {
1642 s32 ulIdx = firstVtxIdx + i * (state->
subdivX + 1) + j;
1643 s32 urIdx = firstVtxIdx + i * (state->
subdivX + 1) + j + 1;
1644 s32 llIdx = firstVtxIdx + (i + 1) * (state->
subdivX + 1) + j;
1645 s32 lrIdx = firstVtxIdx + (i + 1) * (state->
subdivX + 1) + j + 1;
1648 && (*ImgFXInstances)[0].arrayIdx != 0
1661 G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP,
1663 G_TX_NOLOD, G_TX_NOLOD,
1665 gDPSetTile(
gMainGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 0x0100, 2, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
1666 gDPSetTileSize(
gMainGfxPos++, 2, 0, 0, 63 << 2, 0);
1690 G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP,
1692 G_TX_NOLOD, G_TX_NOLOD,
1701 gSP2Triangles(
gMainGfxPos++, 0, 2, 1, 0, 1, 2, 3, 0);
1728 G_TX_CLAMP, G_TX_CLAMP, 8, 8, G_TX_NOLOD, G_TX_NOLOD,
1730 gDPSetTile(
gMainGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 0x0100, 2, 0,
1731 G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
1752 G_TX_CLAMP, G_TX_CLAMP, 8, 8, G_TX_NOLOD, G_TX_NOLOD,
1769 gDPSetRenderMode(
gMainGfxPos++, G_RM_ZB_XLU_DECAL, G_RM_ZB_XLU_DECAL2);
1773 gDPSetPrimColor(
gMainGfxPos++, 0, 0, 0, 0, 0, alpha);
1776 gDPSetCombineMode(
gMainGfxPos++, G_CC_MODULATEIA, G_CC_MODULATEIA);
1782 G_TX_WRAP, G_TX_WRAP, shifts, shiftt, G_TX_NOLOD, G_TX_NOLOD,
1789 gDPSetTileSize(
gMainGfxPos++, G_TX_RENDERTILE, uls, ult, lrs, lrt);
1822 while (phase1 > 360.0) {
1827 while (phase2 > 360.0) {
1832 while (phase3 > 360.0) {
1856 for (i = 0; i < amt; i++) {
1857 angle1 = state->
floats.
wavy.phase1 + (angleInc * 45) + (
sign * 180);
1858 angle2 = state->
floats.
wavy.phase2 + (angleInc * 45) + (
sign * 180);
1859 angle3 = state->
floats.
wavy.phase3 + (angleInc * 45) + (
sign * 180);
1875 if (i % (state->
subdivX + 1) == 0) {
1887 for (i = 0; i <= vtxCount; i++) {
@ SPR_SHADING_FLAG_SET_VIEWPORT
@ SPR_SHADING_FLAG_ENABLED
@ IMGFX_RENDER_MULTIPLY_RGBA
@ IMGFX_RENDER_MULTIPLY_SHADE_ALPHA
@ IMGFX_RENDER_MULTIPLY_SHADE_RGB
@ IMGFX_RENDER_OVERLAY_RGBA
@ IMGFX_RENDER_MODULATE_PRIM_RGBA
@ IMGFX_RENDER_MULTIPLY_RGB
@ IMGFX_RENDER_MULTIPLY_SHADE_RGBA
@ IMGFX_RENDER_OVERLAY_RGB
@ IMGFX_RENDER_MODULATE_PRIM_RGB
@ IMGFX_RENDER_MULTIPLY_ALPHA
@ IMGFX_RENDER_MODULATE_SHADE_RGB
@ IMGFX_RENDER_MODULATE_SHADE_RGBA
@ IMGFX_RENDER_COLOR_FILL
@ IMGFX_COLOR_BUF_SET_MULTIPLY
@ IMGFX_COLOR_BUF_SET_MODULATE
@ IMGFX_ANIM_VERTICAL_PIPE_CURL
@ IMGFX_ANIM_HORIZONTAL_PIPE_CURL
@ IMGFX_ANIM_FLUTTER_DOWN
@ IMGFX_ANIM_SHUFFLE_CARDS
@ IMGFX_ANIM_SPIRIT_CAPTURE
@ IMGFX_ANIM_TUTANKOOPA_SWIRL_1
@ IMGFX_ANIM_TUTANKOOPA_SWIRL_2
@ IMGFX_ANIM_CYMBAL_CRUSH
@ IMGFX_ANIM_TUTANKOOPA_GATHER
@ IMGFX_RENDER_NO_OVERRIDE
@ IMGFX_HOLOGRAM_THRESHOLD
@ IMGFX_FLAG_SKIP_TEX_SETUP
@ IMGFX_FLAG_G_CULL_FRONT
@ IMGFX_FLAG_REVERSE_ANIM
@ IMGFX_FLAG_NO_FILTERING
@ IMGFX_FLAG_SKIP_GFX_SETUP
s32 integer_log(s32 number, u32 base)
u32 dma_copy(Addr romStart, Addr romEnd, void *vramDest)
void * _heap_malloc(HeapNode *head, u32 size)
s32 general_heap_free(void *data)
void * heap_malloc(s32 size)
#define gDPScrollMultiTile2_4b(pkt, timg, fmt, width, height, uls, ult, lrs, lrt, pal, cms, cmt, masks, maskt, shifts, shiftt, scrolls, scrollt)
#define gDPScrollTextureTile_4b(pkt, timg, fmt, width, height, uls, ult, lrs, lrt, pal, cms, cmt, masks, maskt, shifts, shiftt, scrolls, scrollt)
struct ImgFXIntVars::@172 wavy
void imgfx_release_instance(u32 idx)
ImgFXState ImgFXInstanceList[MAX_IMGFX_INSTANCES]
void imgfx_wavy_init(ImgFXState *state)
Addr vertical_pipe_curl_header
void imgfx_update_cache(void)
void imgfx_clear_instance_data(ImgFXState *state)
void imgfx_appendGfx_mesh_strip(ImgFXState *, Matrix4f mtx)
Addr shuffle_cards_header
s32 imgfx_get_next_instance(s32 idx)
BSS ImgFXAnimHeader ImgFXAnimHeaders[MAX_IMGFX_INSTANCES]
struct ImgFXIntVars::@170 args
ImgFXAnimHeader * imgfx_load_anim(ImgFXState *state)
void imgfx_mesh_make_strip(ImgFXState *state)
ImgFXWorkingTexture * ImgFXCurrentTexturePtr
struct ImgFXIntVars::@171 anim
ImgFXRenderMode ImgFXRenderModes[]
void imgfx_update_cache_impl(void)
struct ImgFXFloatVars::@176 anim
void imgfx_set_vtx_buf_capacity(s16 arg0)
struct ImgFXIntVars::@173 color
BSS Vtx * ImgFXVtxBuffers[2]
void imgfx_mesh_load_colors(ImgFXState *state)
ImgFXState * imgfx_get_instance(s32 idx)
struct ImgFXFloatVars::@177 wavy
void imgfx_add_to_cache(void *data, s8 usingContextualHeap)
void imgfx_mesh_make_grid(ImgFXState *state)
s32 imgfx_get_free_instances(s32 count)
BSS ImgFXInstanceList * ImgFXInstances
void imgfx_appendGfx_mesh_basic(ImgFXState *, Matrix4f mtx)
s32 imgfx_appendGfx_component(s32 idx, ImgFXTexture *ifxImg, u32 flagBits, Matrix4f mtx)
void imgfx_appendGfx_mesh_anim(ImgFXState *, Matrix4f mtx)
Addr horizontal_pipe_curl_header
void imgfx_set_state_flags(s32 idx, u16 flagBits, s32 mode)
void imgfx_appendGfx_mesh_grid(ImgFXState *, Matrix4f mtx)
@ IMGFX_ANIM_FLAG_ABSOLUTE_COORDS
Addr tutankoopa_gather_header
void imgfx_appendGfx_mesh(ImgFXState *state, Matrix4f mtx)
void imgfx_release_instance_chain(u32 idx)
u16 ImgFXVtxBufferCapacity
Gfx DefaultImgFXSetupGfx[]
void imgfx_update(u32 idx, ImgFXType type, s32 imgfxArg1, s32 imgfxArg2, s32 imgfxArg3, s32 imgfxArg4, s32 flags)
struct ImgFXFloatVars::@178 overlay
void imgfx_init_instance(ImgFXState *state)
Addr tutankoopa_swirl_2_header
void imgfx_cache_instance_data(ImgFXState *state)
struct ImgFXIntVars::@174 hologram
BSS ImgFXCacheEntry ImgFXDataCache[8]
void imgfx_mesh_make_wavy(ImgFXState *state)
BSS ImgFXWorkingTexture ImgFXCurrentTexture
void imgfx_mesh_anim_update(ImgFXState *state)
void imgfx_make_mesh(ImgFXState *state)
Addr tutankoopa_swirl_1_header
Addr spirit_capture_header
struct ImgFXIntVars::@175 overlay
ImgFXVtx * keyframesOffset
#define PM_CC_IMGFX_COLOR_FILL
#define MAX_IMGFX_INSTANCES
#define VIRTUAL_TO_PHYSICAL(addr)
#define PM_CC_IMGFX_HOLOGRAM
void create_shading_palette(Matrix4f mtx, s32 uls, s32 ult, s32 lrs, s32 lrt, s32 alpha, s32)
u8 Addr[]
Linker symbol address, as in ld_addrs.h.
GameStatus * gGameStatusPtr
SpriteShadingProfile * gSpriteShadingProfile
s32 gCurrentDisplayContextIndex
DisplayContext * gDisplayContext