sprite1 memcpy(&PPSClPS2xyz,&RxClPS2xyz,sizeof(RxClusterDefinition)); PPSClPS2xyz.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2rgba,&RxClPS2rgba,sizeof(RxClusterDefinition)); PPSClPS2rgba.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_1,&RxClPS2user1,sizeof(RxClusterDefinition)); PPSClPS2_1.defaultAttributes = CL_V4_32; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_2,&RxClPS2user2,sizeof(RxClusterDefinition)); PPSClPS2_2.defaultAttributes = CL_V4_16; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_DONT_FILL; RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2xyz, CL_XYZ); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2rgba, CL_RGBA); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_1, CL_USER1); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_2, CL_USER2); RxPipelineNodePS2AllMatSetTriangleVUBufferSizes(nodePS2AllMat, 4, 0x1E, 0x1E/3); RxPipelineNodePS2AllMatSetVIFOffset(nodePS2AllMat, 0x78); codeArray[TRANSNFOG|TRANSNCL |TRANSSTRIP |TRANSPER]=&sprite1_0; codeArray[TRANSFOG |TRANSNCL |TRANSSTRIP |TRANSPER]=&sprite1_1; sprite2 memcpy(&PPSClPS2xyz,&RxClPS2xyz,sizeof(RxClusterDefinition)); PPSClPS2xyz.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2rgba,&RxClPS2rgba,sizeof(RxClusterDefinition)); PPSClPS2rgba.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_1,&RxClPS2user1,sizeof(RxClusterDefinition)); PPSClPS2_1.defaultAttributes = CL_V4_32; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_2,&RxClPS2user2,sizeof(RxClusterDefinition)); PPSClPS2_2.defaultAttributes = CL_V4_16; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_DONT_FILL; RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2xyz, CL_XYZ); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2rgba, CL_RGBA); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_1, CL_USER1); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_2, CL_USER2); RxPipelineNodePS2AllMatSetTriangleVUBufferSizes(nodePS2AllMat, 4, 0x10, 0x10/3); RxPipelineNodePS2AllMatSetVIFOffset(nodePS2AllMat, 0x40); codeArray[TRANSNFOG|TRANSNCL |TRANSSTRIP |TRANSPER]=&sprite2_0; sprite3 memcpy(&PPSClPS2xyz,&RxClPS2xyz,sizeof(RxClusterDefinition)); PPSClPS2xyz.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2rgba,&RxClPS2rgba,sizeof(RxClusterDefinition)); PPSClPS2rgba.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_1,&RxClPS2user1,sizeof(RxClusterDefinition)); PPSClPS2_1.defaultAttributes = CL_V3_32; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_2,&RxClPS2user2,sizeof(RxClusterDefinition)); PPSClPS2_2.defaultAttributes = CL_V3_32; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_3,&RxClPS2user3,sizeof(RxClusterDefinition)); PPSClPS2_3.defaultAttributes = CL_V4_32; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_DONT_FILL; RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2xyz, CL_XYZ); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2rgba, CL_RGBA); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_1, CL_USER1); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_2, CL_USER2); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_3, CL_USER3); RxPipelineNodePS2AllMatSetTriangleVUBufferSizes(nodePS2AllMat, 5, 0x1C, 0x1C/3); RxPipelineNodePS2AllMatSetVIFOffset(nodePS2AllMat, 0x8C); codeArray[TRANSNFOG|TRANSNCL |TRANSSTRIP |TRANSPER]=&sprite3_0; codeArray[TRANSFOG |TRANSNCL |TRANSSTRIP |TRANSPER]=&sprite3_1; sprite4 memcpy(&PPSClPS2xyz,&RxClPS2xyz,sizeof(RxClusterDefinition)); PPSClPS2xyz.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2xyzw,&RxClPS2xyzw,sizeof(RxClusterDefinition)); PPSClPS2xyzw.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2xyzw.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2xyzw.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2xyzw.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2rgba,&RxClPS2rgba,sizeof(RxClusterDefinition)); PPSClPS2rgba.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_1,&RxClPS2user1,sizeof(RxClusterDefinition)); PPSClPS2_1.defaultAttributes = CL_V3_32; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_2,&RxClPS2user2,sizeof(RxClusterDefinition)); PPSClPS2_2.defaultAttributes = CL_V3_32; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_3,&RxClPS2user3,sizeof(RxClusterDefinition)); PPSClPS2_3.defaultAttributes = CL_V4_32; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_4,&RxClPS2user4,sizeof(RxClusterDefinition)); PPSClPS2_4.defaultAttributes = CL_V4_32; PPSClPS2_4.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_4.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_4.defaultAttributes |= CL_ATTRIB_DONT_FILL; RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2xyz, CL_XYZ); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2xyzw, CL_XYZW); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2rgba, CL_RGBA); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_1, CL_USER1); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_2, CL_USER2); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_3, CL_USER3); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_4, CL_USER4); RxPipelineNodePS2AllMatSetTriangleVUBufferSizes(nodePS2AllMat, 7, 0xC, 0xC/3); RxPipelineNodePS2AllMatSetVIFOffset(nodePS2AllMat, 0x54); codeArray[TRANSNFOG|TRANSNCL |TRANSSTRIP |TRANSPER]=&sprite4_0; codeArray[TRANSFOG |TRANSNCL |TRANSSTRIP |TRANSPER]=&sprite4_1; sprite5 memcpy(&PPSClPS2xyz,&RxClPS2xyz,sizeof(RxClusterDefinition)); PPSClPS2xyz.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2xyzw,&RxClPS2xyzw,sizeof(RxClusterDefinition)); PPSClPS2xyzw.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2xyzw.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2xyzw.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2xyzw.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2rgba,&RxClPS2rgba,sizeof(RxClusterDefinition)); PPSClPS2rgba.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_1,&RxClPS2user1,sizeof(RxClusterDefinition)); PPSClPS2_1.defaultAttributes = CL_V3_32; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_2,&RxClPS2user2,sizeof(RxClusterDefinition)); PPSClPS2_2.defaultAttributes = CL_V3_32; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_3,&RxClPS2user3,sizeof(RxClusterDefinition)); PPSClPS2_3.defaultAttributes = CL_V4_32; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_4,&RxClPS2user4,sizeof(RxClusterDefinition)); PPSClPS2_4.defaultAttributes = CL_V4_32; PPSClPS2_4.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_4.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_4.defaultAttributes |= CL_ATTRIB_DONT_FILL; RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2xyz, CL_XYZ); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2xyzw, CL_XYZW); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2rgba, CL_RGBA); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_1, CL_USER1); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_2, CL_USER2); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_3, CL_USER3); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_4, CL_USER4); RxPipelineNodePS2AllMatSetTriangleVUBufferSizes(nodePS2AllMat, 7, 0x19, 0x19/3); RxPipelineNodePS2AllMatSetVIFOffset(nodePS2AllMat, 0xAF); codeArray[TRANSNFOG|TRANSNCL |TRANSSTRIP |TRANSPER]=&sprite5_0; sprite6 memcpy(&PPSClPS2xyz,&RxClPS2xyz,sizeof(RxClusterDefinition)); PPSClPS2xyz.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2xyzw,&RxClPS2xyzw,sizeof(RxClusterDefinition)); PPSClPS2xyzw.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2xyzw.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2xyzw.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2xyzw.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2uv2,&RxClPS2uv2,sizeof(RxClusterDefinition)); PPSClPS2uv2.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2uv2.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2uv2.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2uv2.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2rgba,&RxClPS2rgba,sizeof(RxClusterDefinition)); PPSClPS2rgba.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_1,&RxClPS2user1,sizeof(RxClusterDefinition)); PPSClPS2_1.defaultAttributes = CL_V4_16; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_2,&RxClPS2user2,sizeof(RxClusterDefinition)); PPSClPS2_2.defaultAttributes = CL_V4_8 | CL_USN; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_3,&RxClPS2user3,sizeof(RxClusterDefinition)); PPSClPS2_3.defaultAttributes = CL_V4_8 | CL_USN; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_DONT_FILL; RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2xyz, CL_XYZ); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2xyzw, CL_XYZW); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2uv2, CL_UV2); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2rgba, CL_RGBA); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_1, CL_USER1); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_2, CL_USER2); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_3, CL_USER3); RxPipelineNodePS2AllMatSetTriangleVUBufferSizes(nodePS2AllMat, 7, 0x1E, 0x1E/3); RxPipelineNodePS2AllMatSetVIFOffset(nodePS2AllMat, 0xD2); codeArray[TRANSNFOG|TRANSNCL |TRANSSTRIP |TRANSPER]=&sprite6_0; codeArray[TRANSFOG |TRANSNCL |TRANSSTRIP |TRANSPER]=&sprite6_1; sprite7 memcpy(&PPSClPS2xyz,&RxClPS2xyz,sizeof(RxClusterDefinition)); PPSClPS2xyz.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2xyz.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2xyzw,&RxClPS2xyzw,sizeof(RxClusterDefinition)); PPSClPS2xyzw.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2xyzw.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2xyzw.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2xyzw.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2uv2,&RxClPS2uv2,sizeof(RxClusterDefinition)); PPSClPS2uv2.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2uv2.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2uv2.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2uv2.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2rgba,&RxClPS2rgba,sizeof(RxClusterDefinition)); PPSClPS2rgba.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_1,&RxClPS2user1,sizeof(RxClusterDefinition)); PPSClPS2_1.defaultAttributes = CL_V4_16; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_2,&RxClPS2user2,sizeof(RxClusterDefinition)); PPSClPS2_2.defaultAttributes = CL_V4_8 | CL_USN; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_3,&RxClPS2user3,sizeof(RxClusterDefinition)); PPSClPS2_3.defaultAttributes = CL_V4_8 | CL_USN; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2uv,&RxClPS2uv,sizeof(RxClusterDefinition)); PPSClPS2normal.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2normal.defaultAttributes &= ~CL_ATTRIB_REQUIRED; PPSClPS2normal.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2normal.defaultAttributes |= CL_ATTRIB_PLACEHOLDER; PPSClPS2normal.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2normal,&RxClPS2normal,sizeof(RxClusterDefinition)); PPSClPS2normal.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2normal.defaultAttributes &= ~CL_ATTRIB_REQUIRED; PPSClPS2normal.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2normal.defaultAttributes |= CL_ATTRIB_PLACEHOLDER; PPSClPS2normal.defaultAttributes |= CL_ATTRIB_DONT_FILL; RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2xyz, CL_XYZ); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2xyzw, CL_XYZW); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2uv, CL_UV); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2uv2, CL_UV2); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2rgba, CL_RGBA); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2normal, CL_NORMAL); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_1, CL_USER1); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_2, CL_USER2); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_3, CL_USER3); RxPipelineNodePS2AllMatSetTriangleVUBufferSizes(nodePS2AllMat, 9, 0x16, 0x16/3); RxPipelineNodePS2AllMatSetVIFOffset(nodePS2AllMat, 0xC6); codeArray[TRANSNFOG|TRANSNCL |TRANSSTRIP |TRANSPER]=&sprite7_0; water memcpy(&PPSClPS2xyzw,&RxClPS2xyz,sizeof(RxClusterDefinition)); PPSClPS2xyzw.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2xyzw.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2xyzw.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2xyzw.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2rgba,&RxClPS2rgba,sizeof(RxClusterDefinition)); PPSClPS2rgba.defaultAttributes &= ~CL_ATTRIB_OPAQUE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2rgba.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_1,&RxClPS2user1,sizeof(RxClusterDefinition)); PPSClPS2_1.defaultAttributes = CL_V4_32; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_1.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_2,&RxClPS2user2,sizeof(RxClusterDefinition)); PPSClPS2_2.defaultAttributes = CL_V4_32; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_2.defaultAttributes |= CL_ATTRIB_DONT_FILL; memcpy(&PPSClPS2_3,&RxClPS2user3,sizeof(RxClusterDefinition)); PPSClPS2_3.defaultAttributes = CL_V4_32; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_WRITE; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_REQUIRED; PPSClPS2_3.defaultAttributes |= CL_ATTRIB_DONT_FILL; RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2xyzw, CL_XYZW); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2rgba, CL_RGBA); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_1, CL_USER1); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_2, CL_USER2); RxPipelineNodePS2AllMatGenerateCluster(nodePS2AllMat, &PPSClPS2_3, CL_USER3); RxPipelineNodePS2AllMatSetTriangleVUBufferSizes(nodePS2AllMat, 5, 0xC, 0x4/3); RxPipelineNodePS2AllMatSetVIFOffset(nodePS2AllMat, 0x3C); codeArray[TRANSNFOG|TRANSNCL |TRANSSTRIP |TRANSPER]=&water_0; codeArray[TRANSFOG |TRANSNCL |TRANSSTRIP |TRANSPER]=&water_1; codeArray[TRANSNFOG|TRANSCLIP|TRANSSTRIP |TRANSPER]=&water_2; codeArray[TRANSFOG |TRANSCLIP|TRANSSTRIP |TRANSPER]=&water_3;