mirror of
https://github.com/krystalgamer/spidey-decomp.git
synced 2025-02-17 03:18:13 +00:00
PCGfx_DrawQuad2D
This commit is contained in:
parent
3d19d640e1
commit
3f0bf8d00f
17
DXsound.cpp
17
DXsound.cpp
@ -1224,7 +1224,7 @@ INLINE void renderScene(void)
|
||||
g_D3DDevice7->DrawPrimitive(
|
||||
D3DPT_TRIANGLEFAN,
|
||||
324,
|
||||
&pPoly->field_10,
|
||||
&pPoly->field_10[0],
|
||||
pPoly->field_C,
|
||||
0);
|
||||
|
||||
@ -1251,7 +1251,7 @@ void validate_DXsound(void)
|
||||
|
||||
void validate_DXPOLY(void)
|
||||
{
|
||||
VALIDATE_SIZE(DXPOLY, 0x14);
|
||||
VALIDATE_SIZE(DXPOLY, 0xF0);
|
||||
|
||||
VALIDATE(DXPOLY, pNext, 0x0);
|
||||
VALIDATE(DXPOLY, field_4, 0x4);
|
||||
@ -1261,3 +1261,16 @@ void validate_DXPOLY(void)
|
||||
VALIDATE(DXPOLY, field_C, 0xC);
|
||||
VALIDATE(DXPOLY, field_10, 0x10);
|
||||
}
|
||||
|
||||
void validate_SDXPolyField(void)
|
||||
{
|
||||
VALIDATE_SIZE(SDXPolyField, 0x1C);
|
||||
|
||||
VALIDATE(SDXPolyField, field_0, 0x0);
|
||||
VALIDATE(SDXPolyField, field_4, 0x4);
|
||||
VALIDATE(SDXPolyField, field_8, 0x8);
|
||||
VALIDATE(SDXPolyField, field_C, 0xC);
|
||||
VALIDATE(SDXPolyField, field_10, 0x10);
|
||||
VALIDATE(SDXPolyField, field_14, 0x14);
|
||||
VALIDATE(SDXPolyField, field_18, 0x18);
|
||||
}
|
||||
|
16
DXsound.h
16
DXsound.h
@ -21,6 +21,17 @@ typedef void* DIDEVICEINSTANCEA;
|
||||
*/
|
||||
#endif
|
||||
|
||||
struct SDXPolyField
|
||||
{
|
||||
float field_0;
|
||||
float field_4;
|
||||
float field_8;
|
||||
float field_C;
|
||||
u32 field_10;
|
||||
float field_14;
|
||||
float field_18;
|
||||
};
|
||||
|
||||
struct DXPOLY
|
||||
{
|
||||
DXPOLY* pNext;
|
||||
@ -28,7 +39,9 @@ struct DXPOLY
|
||||
u16 mBlendMode;
|
||||
u16 field_A;
|
||||
DWORD field_C;
|
||||
char field_10;
|
||||
SDXPolyField field_10[4];
|
||||
|
||||
u8 padBottom[0x6D];
|
||||
};
|
||||
|
||||
|
||||
@ -94,5 +107,6 @@ EXPORT extern LPDIRECTINPUT8 g_pDI;
|
||||
|
||||
void validate_DXsound(void);
|
||||
void validate_DXPOLY(void);
|
||||
void validate_SDXPolyField(void);
|
||||
|
||||
#endif
|
||||
|
176
PCGfx.cpp
176
PCGfx.cpp
@ -10,6 +10,23 @@
|
||||
|
||||
#include <cmath>
|
||||
|
||||
EXPORT i8 gPcGfxBrightnessValues[256];
|
||||
|
||||
EXPORT u8 gProcessTextureRelated;
|
||||
EXPORT u16 gChosenBlendingMode;
|
||||
EXPORT u16 gProcessedTextureFlags;
|
||||
|
||||
EXPORT i32 gUseTextureRelated = 0x0FFFFFFFF;
|
||||
EXPORT DCGfx_BlendingMode gTextureBlendingMode;
|
||||
|
||||
EXPORT i32 gPcGfxBlendModeRelated;
|
||||
EXPORT DXPOLY gDxPolys[15360];
|
||||
|
||||
EXPORT float gRenderInitOne[3] = { 10.0f, 8048.0f, 276.0f };
|
||||
EXPORT float gRenderInitTwo[2] = { 8038.0f, 1.9624f };
|
||||
|
||||
EXPORT i32 gPcGfxDrawRelated = 1;
|
||||
EXPORT i32 gPcGfxSlotNumber = 0x0FFFFFFFF;
|
||||
|
||||
EXPORT u8 gIsRenderSettingE = 1;
|
||||
EXPORT u8 gNonRendderSettingE;
|
||||
@ -85,10 +102,152 @@ void PCGfx_DrawQPoly3D(float,float,float,float,float,u32,float,float,float,float
|
||||
printf("PCGfx_DrawQPoly3D(float,float,float,float,float,u32,float,float,float,float,float,u32,float,float,float,float,float,u32,float,float,float,float,float,u32)");
|
||||
}
|
||||
|
||||
// @MEDIUMTODO
|
||||
void PCGfx_DrawQuad2D(float,float,float,float,float,float,float,float,u32,float,bool)
|
||||
// @NotOk
|
||||
// missing low graphics
|
||||
// might be wrong too
|
||||
void PCGfx_DrawQuad2D(
|
||||
float a1,
|
||||
float a2,
|
||||
float a3,
|
||||
float a4,
|
||||
float a5,
|
||||
float a6,
|
||||
float a7,
|
||||
float a8,
|
||||
u32 color,
|
||||
float a10,
|
||||
bool)
|
||||
{
|
||||
printf("PCGfx_DrawQuad2D(float,float,float,float,float,float,float,float,u32,float,bool)");
|
||||
gPcGfxDrawRelated &= 0xFFFFFFFB;
|
||||
|
||||
if (a10 <= 6.0f)
|
||||
gPcGfxSlotNumber = a10;
|
||||
|
||||
float v13 = a10;
|
||||
if (a10 < 0.0f)
|
||||
v13 = v13 * a10 + gRenderInitOne[1];
|
||||
else
|
||||
v13 = v13 * a10 + gRenderInitOne[0];
|
||||
|
||||
float v24 = v13;
|
||||
print_if_false(v24 > 0.0f, "invalid zOffset!");
|
||||
|
||||
SDXPolyField *pDxPolyFields[4];
|
||||
SDXPolyField dxPolyFields[4];
|
||||
|
||||
dxPolyFields[0].field_18 = a6;
|
||||
dxPolyFields[0].field_4 = a2;
|
||||
dxPolyFields[1].field_4 = a2;
|
||||
dxPolyFields[0].field_10 = color;
|
||||
dxPolyFields[1].field_10 = color;
|
||||
dxPolyFields[2].field_10 = color;
|
||||
dxPolyFields[3].field_10 = color;
|
||||
dxPolyFields[0].field_0 = a1;
|
||||
dxPolyFields[0].field_14 = a5;
|
||||
dxPolyFields[3].field_0 = a1;
|
||||
dxPolyFields[3].field_14 = a5;
|
||||
pDxPolyFields[2] = &dxPolyFields[2];
|
||||
|
||||
float v27 = (v24 - gRenderInitOne[0]) / gRenderInitTwo[0];
|
||||
dxPolyFields[0].field_8 = v27;
|
||||
dxPolyFields[1].field_8 = v27;
|
||||
dxPolyFields[2].field_8 = v27;
|
||||
dxPolyFields[3].field_8 = v27;
|
||||
|
||||
pDxPolyFields[0] = dxPolyFields;
|
||||
pDxPolyFields[3] = &dxPolyFields[3];
|
||||
|
||||
float v32 = gRenderInitOne[2] / v24;
|
||||
dxPolyFields[0].field_C = v32;
|
||||
dxPolyFields[1].field_C = v32;
|
||||
dxPolyFields[2].field_C = v32;
|
||||
dxPolyFields[3].field_C = v32;
|
||||
|
||||
float v28 = a1 + a3;
|
||||
dxPolyFields[1].field_0 = v28;
|
||||
dxPolyFields[2].field_0 = v28;
|
||||
pDxPolyFields[1] = &dxPolyFields[1];
|
||||
|
||||
float v25 = a5 + a7;
|
||||
dxPolyFields[1].field_14 = v25;
|
||||
dxPolyFields[1].field_18 = a6;
|
||||
dxPolyFields[2].field_14 = v25;
|
||||
|
||||
float v29 = a2 + a4;
|
||||
dxPolyFields[2].field_4 = v29;
|
||||
dxPolyFields[3].field_4 = v29;
|
||||
|
||||
float v30 = a6 + a8;
|
||||
dxPolyFields[2].field_18 = v30;
|
||||
dxPolyFields[3].field_18 = v30;
|
||||
|
||||
if (gEndSceneRelatedTwo >= 15360)
|
||||
{
|
||||
gEndSceneRelatedTwo++;
|
||||
return;
|
||||
}
|
||||
|
||||
float v26 = 0.0;
|
||||
DXPOLY* v16 = &gDxPolys[gEndSceneRelatedTwo++];
|
||||
i32 v31 = gPcGfxBlendModeRelated;
|
||||
|
||||
if (gLowGraphics)
|
||||
{
|
||||
// @FIXME: TODO
|
||||
}
|
||||
else
|
||||
{
|
||||
LPDIRECTDRAWSURFACE7 Direct3DTexture;
|
||||
if (gUseTextureRelated < 0)
|
||||
Direct3DTexture = 0;
|
||||
else
|
||||
Direct3DTexture = PCTex_GetDirect3DTexture(gUseTextureRelated);
|
||||
v16->field_4 = Direct3DTexture;
|
||||
v16->mBlendMode = gChosenBlendingMode;
|
||||
v16->field_A = gProcessedTextureFlags;
|
||||
v16->field_C = 4;
|
||||
|
||||
SDXPolyField **v21 = pDxPolyFields;
|
||||
SDXPolyField *v22 = v16->field_10;
|
||||
|
||||
for (i32 i = 0; i < 4; i++)
|
||||
{
|
||||
memcpy(&v22[i], v21[i], sizeof(SDXPolyField));
|
||||
|
||||
i32 v23;
|
||||
if (gProcessTextureRelated)
|
||||
v23 = 128;
|
||||
else
|
||||
v23 = (v22[i].field_10 >> 24) & 0xFF;
|
||||
|
||||
v22[i].field_10 =
|
||||
gPcGfxBrightnessValues[v22[i].field_10 & 0xFF] |
|
||||
gPcGfxBrightnessValues[(v22[i].field_10 >> 8) & 0xFF] << 8 |
|
||||
gPcGfxBrightnessValues[(v22[i].field_10 >> 16) & 0xFF] << 16 |
|
||||
v23 << 24;
|
||||
|
||||
if (v22[i].field_8 < 0.0f)
|
||||
{
|
||||
v22[i].field_8 = 0.0f;
|
||||
}
|
||||
else if (v22[i].field_8 > 0.99989998f)
|
||||
{
|
||||
v22[i].field_8 = 0.99989998f;
|
||||
v26 = v22[i].field_8;
|
||||
}
|
||||
else if (v26 < v22[i].field_8)
|
||||
{
|
||||
v26 = v22[i].field_8;
|
||||
}
|
||||
}
|
||||
if ( gChosenBlendingMode )
|
||||
{
|
||||
v31 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
DXPOLY_DrawPoly(v16, gPcGfxSlotNumber, v31, v26);
|
||||
gPcGfxSlotNumber = -1;
|
||||
}
|
||||
|
||||
// @MEDIUMTODO
|
||||
@ -184,10 +343,6 @@ EXPORT i32 gBlendingModes[DCGfx_BlendingMode_MAX + 1] =
|
||||
0, 1, 2, 3, 4
|
||||
};
|
||||
|
||||
EXPORT u8 gProcessTextureRelated;
|
||||
EXPORT u16 gChosenBlendingMode;
|
||||
EXPORT u16 gProcessedTextureFlags;
|
||||
|
||||
// @NotOk
|
||||
// missing low graphics stuff
|
||||
void PCGfx_ProcessTexture(
|
||||
@ -243,9 +398,6 @@ void PCGfx_ProcessTexture(
|
||||
}
|
||||
}
|
||||
|
||||
EXPORT float gRenderInitOne[3] = { 10.0f, 8048.0f, 276.0f };
|
||||
EXPORT float gRenderInitTwo[2] = { 8038.0f, 1.9624f };
|
||||
|
||||
// @Ok
|
||||
// @Matching
|
||||
void PCGfx_RenderInit(float a1, float a2, float a3)
|
||||
@ -300,7 +452,6 @@ void PCGfx_RenderModelPreview(
|
||||
PCGfx_EndScene(1);
|
||||
}
|
||||
|
||||
EXPORT i8 gPcGfxBrightnessValues[256];
|
||||
EXPORT float gPcGfxBrightnessPower[8] =
|
||||
{
|
||||
0.80000001f,
|
||||
@ -415,9 +566,6 @@ INLINE void PCGfx_SetSkyColor(u32 a1)
|
||||
DXPOLY_SetBackgroundColor(a1 | 0xFF000000);
|
||||
}
|
||||
|
||||
EXPORT i32 gUseTextureRelated = 0x0FFFFFFFF;
|
||||
EXPORT DCGfx_BlendingMode gTextureBlendingMode;
|
||||
|
||||
// @Ok
|
||||
// @Matching
|
||||
void PCGfx_UseTexture(i32 a1, DCGfx_BlendingMode a2)
|
||||
|
14
main.cpp
14
main.cpp
@ -1,6 +1,6 @@
|
||||
#include "non_win32.h"
|
||||
|
||||
// #define BOOT_GAME
|
||||
#define BOOT_GAME
|
||||
|
||||
#include "main.h"
|
||||
#include "ob.h"
|
||||
@ -80,6 +80,8 @@
|
||||
#include "pack.h"
|
||||
#include "pal.h"
|
||||
#include "db.h"
|
||||
#include "ps2m3d.h"
|
||||
#include "PCGfx.h"
|
||||
|
||||
extern int FAIL_VALIDATION;
|
||||
|
||||
@ -98,9 +100,14 @@ void SpideyMain(void)
|
||||
{
|
||||
while(1)
|
||||
{
|
||||
gWideScreen = 16;
|
||||
DXPOLY_SetBackgroundColor(0xFF800080);
|
||||
DXPOLY_BeginScene();
|
||||
DXPOLY_EndScene(true);
|
||||
gWideScreen = 16;
|
||||
PCGfx_BeginScene(1, -1);
|
||||
gWideScreen = 16;
|
||||
M3d_RenderCleanup();
|
||||
gWideScreen = 16;
|
||||
PCGfx_EndScene(1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -408,6 +415,7 @@ i32 validate(void)
|
||||
validate_tag_S_Pal();
|
||||
validate_SViewport();
|
||||
validate_SDoubleBuffer();
|
||||
validate_SDXPolyField();
|
||||
|
||||
puts("[*] Validation done!");
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user