C
Cyberman
Guest
I've been twiddling with some code to get these to work, however my main problem appears to be
Micky's palette selection:
Cyb's palette selection:
They both look wrong to be honest. However Zangan doesn't have lighting and too much camera control so Hmmm. Anyhow I'm pretty sure I have the pallete selection wrong for both cases.
Code: [Select]
- Misalignment of textured sections while processing the UV information
Incorrect palettes being selected
Micky's palette selection:
Cyb's palette selection:
They both look wrong to be honest. However Zangan doesn't have lighting and too much camera control so Hmmm. Anyhow I'm pretty sure I have the pallete selection wrong for both cases.
Code: [Select]
Code:
BM = Image1->Picture->Bitmap; Image1->Width = 256; Image1->Height= 256; BM->Width = 768; BM->Height= 256; TIM(BM, Dat + Offsets[*Sections - 1]); Image1->Width = BM->Width; Image1->Height= BM->Height; XOff = 0; for(Index = 0; Index < 3; Index++) { if(Textures[Index].ImageData != NULL) { delete Textures[Index].ImageData; } // create 256x256 textures Textures[Index].ImageData = (GLubyte *)new RGBA[256*256]; } // we use 3 seperate textures for (Index = 1; Index < (*Sections -1); Index++) { VertC = (int *)(Dat + Offsets[Index]); Verts = (PSX_FF7_VERTEX *)(VertC + 1); TriP = (PSX_FF7_PCNT *)&Verts[*VertC/8]; TTriangles = (PSX_FF7_TTRI *)(TriP + 1); QuadP = (PSX_FF7_PCNT *)&TTriangles[TriP->Count]; TQuads = (PSX_FF7_TQUAD *)(QuadP + 1); XOff = ((TriP->TPage & 0x0E) - 6)<<7; for (PIndex = 0; PIndex < TriP->Count; PIndex++) { TTri = TTriangles[Index]; TX = TTri.U0; TY = TTri.V0; TW = TX;//TTri.U0; TH = TW;//TTri.V0; //if (TTri.U0 < TX) TX = TTri.U0; if (TTri.U1 < TX) TX = TTri.U1; if (TTri.U2 < TX) TX = TTri.U2; //if (TTri.U0 > TW) TW = TTri.U0; if (TTri.U1 > TW) TW = TTri.U1; if (TTri.U2 > TW) TW = TTri.U2; //if (TTri.V0 < TY) TY = TTri.V0; if (TTri.V1 < TY) TY = TTri.V1; if (TTri.V2 < TY) TY = TTri.V2; //if (TTri.V0 > TH) TH = TTri.V0; if (TTri.V1 > TH) TH = TTri.V1; if (TTri.V2 > TH) TH = TTri.V2; // Micky's method //PalIdx = (TTri.PAL >> 6) & 7; // Cyb's Method PalIdx = (TTri.PAL >> 7) & 7; if (PalIdx != CPal) CPal = PalIdx; //TW+=XOff; //TX+=XOff; TIM( BM, Dat + Offsets[*Sections - 1], &Textures[XOff>>8], //(GLubyte *)NULL,//Textures[0].ImageData, TX + XOff, TY, TW + XOff, TH //TY + XOff, TX, //TH + XOff, TW ); //Model->Add } XOff = ((QuadP->TPage & 0x0E)-6) << 7; for (PIndex = 0; PIndex < QuadP->Count; PIndex++) { TQuad = TQuads[Index]; TX = TQuad.U0; TY = TQuad.V0; TW = TX;//TQuad.U0; TH = TY;//TQuad.V0; //if (TQuad.U0 < TX) TX = TQuad.U0; if (TQuad.U1 < TX) TX = TQuad.U1; if (TQuad.U2 < TX) TX = TQuad.U2; if (TQuad.U3 < TX) TX = TQuad.U3; //if (TQuad.U0 > TW) TW = TQuad.U0; if (TQuad.U1 > TW) TW = TQuad.U1; if (TQuad.U2 > TW) TW = TQuad.U2; if (TQuad.U3 > TW) TW = TQuad.U3; //if (TQuad.V0 < TY) TY = TQuad.V0; if (TQuad.V1 < TY) TY = TQuad.V1; if (TQuad.V2 < TY) TY = TQuad.V2; if (TQuad.V3 < TY) TY = TQuad.V3; //if (TQuad.V0 > TH) TH = TQuad.V0; if (TQuad.V1 > TH) TH = TQuad.V1; if (TQuad.V2 > TH) TH = TQuad.V2; if (TQuad.V3 > TH) TH = TQuad.V3; // Micky's method //PalIdx = (TQuad.PAL >> 6) & 7; // Cyb's Method PalIdx = (TQuad.PAL >> 7) & 7; if (PalIdx != CPal) CPal = PalIdx; //TW+=XOff; //TX+=XOff; TIM( BM, Dat + Offsets[*Sections - 1], &Textures[XOff>>8], //(GLubyte *)NULL,//Textures[0].ImageData, TX + XOff, TY, TW + XOff, TH //TY + XOff, TX, //TH + XOff, TW ); } }