; Here the position and uv coors are scaled and written back into the input buffer ; The prelight is modified by the ambient light, surface properties and material colour, and then written back too ; prelight = prelight*colScale + ambient*ambSurfProp Decompress: NOP LQ.xyz VF03, buildingAmbient(VI00) NOP LQ.x VF04, vuSDsurfProps(VI00) ; -- ambient property NOP LOI 255 NOP IADD VI02, VI00, VI01 ; -- start of buffer NOP LQ.xyz VF06, (vertexSize*0+0)(VI02) ; -- load pos[0] SUB.w VF03, VF00, VF00 LQ.xy VF14, (vertexSize*0+1)(VI02) ; -- load uv[0] MULx.xyz VF03, VF03, VF04 LQ.xyzw VF09, (vertexSize*0+2)(VI02) ; ambient*surfProp -- load rbga[0] MAXi.xyzw VF04, VF00, I NOP ITOF0.xyz VF06, VF06 LQ.xyz VF10, (vertexSize*1+0)(VI02) ; -- load pos[1] ITOF0.xy VF08, VF14 LQ.xy VF11, (vertexSize*1+1)(VI02) ; -- load uv[1] ITOF0.xyzw VF14, VF09 NOP MULAw.xyzw ACC, VF03, VF00 LQ.xyzw VF01, vuSDcolScale(VI00) ; ACC <- ambient -- load material colour ITOF0.xyz VF10, VF10 LQ.xyzw VF09, (vertexSize*1+2)(VI02) ; -- load rgba[0] ITOF0.xy VF11, VF11 LOI 0.000244141 ; -- vertex scale 1/4096 ADDi.x VF05, VF00, I NOP MADD.xyzw VF15, VF14, VF01 NOP ; -- amb + prelight*mat ITOF0.xyzw VF09, VF09 NOP MULAw.xyzw ACC, VF03, VF00 LOI 0.0078125 ; -- vertex scale 1/128 MULi.xyz VF06, VF06, I NOP ; -- scale pos[0] MULx.xy VF07, VF08, VF05 NOP ; -- scale uv[0] MINI.xyzw VF08, VF15, VF04 LQ.xyz VF12, (vertexSize*2+0)(VI02) ; clamp rgba[0] MADD.xyzw VF09, VF09, VF01 LQ.xy VF13, (vertexSize*2+1)(VI02) MULi.xyz VF10, VF10, I LQ.xyzw VF14, (vertexSize*2+2)(VI02) MULx.xy VF11, VF11, VF05 NOP DecompressLoop: ITOF0.xyz VF16, VF12 SQ.xyz VF06, (vertexSize*0+0)(VI02) ; -- store scaled pos[0] ITOF0.xyzw VF21, VF14 SQ.xy VF07, (vertexSize*0+1)(VI02) ; -- store scaled uv[0] ITOF0.xy VF18, VF13 IADDIU VI03, VI02, vertexSize MULAw.xyzw ACC, VF03, VF00 LQ.xyz VF19, (vertexSize*3+0)(VI02) MULi.xyz VF17, VF16, I LQ.xy VF20, (vertexSize*3+1)(VI02) MADD.xyzw VF16, VF21, VF01 LQ.xyzw VF21, (vertexSize*3+2)(VI02) MINI.xyzw VF15, VF09, VF04 IBEQ VI03, VI10, DecompressEnd MULx.xy VF18, VF18, VF05 SQ.xyzw VF08, (vertexSize*0+2)(VI02) ; -- store rgba[0] ITOF0.xyz VF12, VF19 SQ.xy VF11, (vertexSize*0+1)(VI03) ITOF0.xy VF08, VF20 SQ.xyz VF10, (vertexSize*0+0)(VI03) ITOF0.xyzw VF14, VF21 IADDIU VI02, VI03, vertexSize MULi.xyz VF22, VF12, I LQ.xy VF09, (vertexSize*3+1)(VI03) MULx.xy VF23, VF08, VF05 LQ.xyzw VF12, (vertexSize*3+2)(VI03) MULAw.xyzw ACC, VF03, VF00 LQ.xyz VF08, (vertexSize*3+0)(VI03) MADD.xyzw VF14, VF14, VF01 IBEQ VI02, VI10, DecompressEnd MINI.xyzw VF13, VF16, VF04 SQ.xyzw VF15, (vertexSize*0+2)(VI03) ITOF0.xy VF07, VF09 LQ.xyz VF16, (vertexSize*3+0)(VI02) ITOF0.xyz VF06, VF08 LQ.xy VF19, (vertexSize*3+1)(VI02) ITOF0.xyzw VF15, VF12 LQ.xyzw VF20, (vertexSize*3+2)(VI02) MULAw.xyzw ACC, VF03, VF00 IADDIU VI03, VI02, vertexSize MULx.xy VF07, VF07, VF05 SQ.xyz VF17, (vertexSize*0+0)(VI02) MULi.xyz VF06, VF06, I SQ.xy VF18, (vertexSize*0+1)(VI02) MADD.xyzw VF15, VF15, VF01 IBEQ VI03, VI10, DecompressEnd MINI.xyzw VF21, VF14, VF04 SQ.xyzw VF13, (vertexSize*0+2)(VI02) ITOF0.xyz VF09, VF16 LQ.xyz VF12, (vertexSize*3+0)(VI03) ITOF0.xy VF11, VF19 LQ.xy VF13, (vertexSize*3+1)(VI03) ITOF0.xyzw VF20, VF20 IADDIU VI02, VI03, vertexSize MULAw.xyzw ACC, VF03, VF00 LQ.xyzw VF14, (vertexSize*3+2)(VI03) MINI.xyzw VF08, VF15, VF04 SQ.xyz VF22, (vertexSize*0+0)(VI03) MULi.xyz VF10, VF09, I SQ.xy VF23, (vertexSize*0+1)(VI03) MADD.xyzw VF09, VF20, VF01 IBNE VI02, VI10, DecompressLoop MULx.xy VF11, VF11, VF05 SQ.xyzw VF21, (vertexSize*0+2)(VI03) DecompressEnd: