;//-------------------------------------------------------------------------------- ;// Tyra's standard macros library ;//-------------------------------------------------------------------------------- ;//--------------------------------------------------------- ;// LoadTyraStaticData - Load "Set" gif tag ;//--------------------------------------------------------- #macro LoadTyraStaticData: t_gifSetTagName lq t_gifSetTagName, VU1_SET_GIFTAG_ADDR(vi00) #endmacro ;//--------------------------------------------------------- ;// LoadTyraLightMatrix - Loads single color. Color is placed in 4th slot of Lights matrix ;//--------------------------------------------------------- #macro LoadTyraSingleColor: t_singleColor, t_singleColorEnabled, t_singleColorAddr, t_optionsAddr lq t_singleColor, t_singleColorAddr(vi00) ilw.x t_singleColorEnabled, t_optionsAddr(vi00) #endmacro ;//--------------------------------------------------------- ;// LoadTyraTags - Load lod, texture buffer and clut ;// 1 - GIF tag - texture LOD ;// 2 - GIF tag - texture buffer & CLUT ;//--------------------------------------------------------- #macro LoadTyraTags: t_lodGifTag, t_texBufferClutGifTag, t_lodAddr, t_ClutAddr lq t_lodGifTag, t_lodAddr(vi00) lq t_texBufferClutGifTag, t_ClutAddr(vi00) #endmacro ;//--------------------------------------------------------- ;// LoadTyraBufferTags - Load scales and prim tag ;// 1 - float : X, Y, Z - scale vector that we will use to scale the verts after projecting them, float : W - vert count. ;// 2 - GIF tag - tell GS how many data we will send ;//--------------------------------------------------------- #macro LoadTyraBufferTags: t_scale, t_primTag, t_buffer lq.xyz t_scale, 0(t_buffer) lq t_primTag, 1(t_buffer) #endmacro ;//--------------------------------------------------------- ;// LoadTyraDirectionalLights - Load directions and colors. All are always present ;// - 3 directional lights directions ;// - 3 directional lights colors + ambient color ;//--------------------------------------------------------- #macro LoadTyraDirectionalLights: t_lightMatrix, t_lightDirections, t_lightsColors, t_ambientColor, t_dirOffset, t_colorOffset, t_matrixOffset lq.xyz t_lightMatrix[0], t_matrixOffset+0(vi00) lq.xyz t_lightMatrix[1], t_matrixOffset+1(vi00) lq.xyz t_lightMatrix[2], t_matrixOffset+2(vi00) lq.xyz t_lightDirections[0], t_dirOffset(vi00) lq.xyz t_lightDirections[1], t_dirOffset+1(vi00) lq.xyz t_lightDirections[2], t_dirOffset+2(vi00) lq.xyz t_lightsColors[0], t_colorOffset(vi00) lq.xyz t_lightsColors[1], t_colorOffset+1(vi00) lq.xyz t_lightsColors[2], t_colorOffset+2(vi00) lq.xyz t_ambientColor, t_colorOffset+3(vi00) #endmacro ;//--------------------------------------------------------- ;// StoreTyraGifTags - Store gif tags. ;// Not using sqi instruction, because VCL cannot optimize it. ;// Primtag contains information about how many polys we will send ;//--------------------------------------------------------- #macro StoreTyraGifTags: t_gifSetTag, t_lodGifTag, t_texBufferClutGifTag, t_primTag, t_destAddress sq t_gifSetTag, 0(t_destAddress) sq t_lodGifTag, 1(t_destAddress) sq t_gifSetTag, 2(t_destAddress) sq t_texBufferClutGifTag, 3(t_destAddress) sq t_primTag, 4(t_destAddress) iaddiu t_destAddress, t_destAddress, 5 #endmacro ;//--------------------------------------------------------- ;// CalculateLights - Based on Dr Fortuna's work ;// ;// 1. Transform by the rotation part of the world matrix ;// 2. "Transform" the normal by the light direction matrix ;// 3. Four intensities, one for each light. ;// 4. Clamp the intensity to 0..1 ;// 5. Transform the intensities by the light colour matrix ;// 6. Load 128 and put it into the alpha value ;// 7. Clamp result to 0-128 values ;// 8. And write to the output buffer ;//--------------------------------------------------------- #macro CalculateTyraDirectionalLights: t_outputColor, t_normal, t_lightDirections, t_lightColors, t_lightMatrix, t_ambientColor mul.xyz acc, t_lightMatrix[0], t_normal[x] madd.xyz acc, t_lightMatrix[1], t_normal[y] madd.xyz t_normal, t_lightMatrix[2], t_normal[z] mula.xyz acc, t_lightDirections[0], t_normal[x] madd.xyz acc, t_lightDirections[1], t_normal[y] madd.xyz t_outputColor, t_lightDirections[2], t_normal[z] mini.xyz t_outputColor, t_outputColor, vf00[w] max.xyz t_outputColor, t_outputColor, vf00[x] mula.xyz acc, t_lightColors[0], t_outputColor[x] madda.xyz acc, t_lightColors[1], t_outputColor[y] madda.xyz acc, t_lightColors[2], t_outputColor[z] madd.xyz t_outputColor, t_ambientColor, vf00[w] loi 128 addi.w t_outputColor, vf00, i #endmacro