diff --git a/src/cpu_type.h b/src/cpu_type.h new file mode 100644 index 0000000..138b7fe --- /dev/null +++ b/src/cpu_type.h @@ -0,0 +1,8 @@ +#pragma once + +#ifdef WIN32 + #define DL_INT_SIZE int32_t +#endif +#ifdef WIN64 + #define DL_INT_SIZE int64_t +#endif \ No newline at end of file diff --git a/src/decomp/game/object_stuff.c b/src/decomp/game/object_stuff.c index f5e1bdc..e0f4615 100644 --- a/src/decomp/game/object_stuff.c +++ b/src/decomp/game/object_stuff.c @@ -81,8 +81,12 @@ static struct Object *allocate_object(void) { obj->numCollidedObjs = 0; for (i = 0; i < 0x50; i++) { +#ifdef _WIN32 obj->rawData.asS32[i] = 0; +#endif +#ifdef _WIN64 obj->ptrData.asVoidPtr[i] = NULL; +#endif } obj->unused1 = 0; diff --git a/src/gfx_adapter.c b/src/gfx_adapter.c index 9265b0e..3698c2b 100644 --- a/src/gfx_adapter.c +++ b/src/gfx_adapter.c @@ -7,6 +7,7 @@ #include "gfx_adapter.h" #include "gfx_adapter_commands.h" #include "load_tex_data.h" +#include "cpu_type.h" static Mat4 s_curMatrix; static float s_curColor[3]; @@ -41,7 +42,7 @@ static void convert_uv_to_atlas( float *atlas_uv_out, short tc[] ) static void process_display_list( void *dl ) { - int64_t *ptr = (int64_t *)dl; + DL_INT_SIZE *ptr = (DL_INT_SIZE *)dl; Vtx *vdata = NULL; for( ;; ) @@ -50,19 +51,19 @@ static void process_display_list( void *dl ) { case GFXCMD_VertexData: { - UNUSED int64_t v = *ptr++; - UNUSED int64_t n = *ptr++; - UNUSED int64_t v0 = *ptr++; + UNUSED DL_INT_SIZE v = *ptr++; + UNUSED DL_INT_SIZE n = *ptr++; + UNUSED DL_INT_SIZE v0 = *ptr++; vdata = (Vtx*)v; break; } case GFXCMD_Triangle: { - int64_t v00 = *ptr++; - int64_t v01 = *ptr++; - int64_t v02 = *ptr++; - UNUSED int64_t flag0 = *ptr++; + DL_INT_SIZE v00 = *ptr++; + DL_INT_SIZE v01 = *ptr++; + DL_INT_SIZE v02 = *ptr++; + UNUSED DL_INT_SIZE flag0 = *ptr++; short x0 = vdata[v00].v.ob[0], y0 = vdata[v00].v.ob[1], z0 = vdata[v00].v.ob[2]; short x1 = vdata[v01].v.ob[0], y1 = vdata[v01].v.ob[1], z1 = vdata[v01].v.ob[2]; @@ -129,8 +130,8 @@ static void process_display_list( void *dl ) case GFXCMD_Light: { - int64_t l = *ptr++; - int64_t n = *ptr++; + DL_INT_SIZE l = *ptr++; + DL_INT_SIZE n = *ptr++; if( n == 1 ) { @@ -145,9 +146,9 @@ static void process_display_list( void *dl ) case GFXCMD_Texture: { - int64_t s = *ptr++; - int64_t t = *ptr++; - int64_t on = *ptr++; + DL_INT_SIZE s = *ptr++; + DL_INT_SIZE t = *ptr++; + DL_INT_SIZE on = *ptr++; s_scaleS = (uint16_t)s; s_scaleT = (uint16_t)t; @@ -158,7 +159,7 @@ static void process_display_list( void *dl ) case GFXCMD_SetTextureImage: { - int64_t i = *ptr++; + DL_INT_SIZE i = *ptr++; s_textureIndex = (int)i; s_texWidth = mario_tex_widths[s_textureIndex]; @@ -169,8 +170,8 @@ static void process_display_list( void *dl ) case GFXCMD_SetTileSize: { - int64_t uls = *ptr++; - int64_t ult = *ptr++; + DL_INT_SIZE uls = *ptr++; + DL_INT_SIZE ult = *ptr++; ptr++; // lrs ptr++; // lrt @@ -182,7 +183,7 @@ static void process_display_list( void *dl ) case GFXCMD_SubDisplayList: { - int64_t dl = *ptr++; + DL_INT_SIZE dl = *ptr++; process_display_list( (void*)dl ); break; } diff --git a/src/gfx_macros.h b/src/gfx_macros.h index 35b2988..e85bb65 100644 --- a/src/gfx_macros.h +++ b/src/gfx_macros.h @@ -2,6 +2,7 @@ #include "decomp/include/types.h" #include "gfx_adapter_commands.h" +#include "cpu_type.h" /* * Vertex (set up for use with colors) @@ -74,11 +75,13 @@ typedef struct { #define G_OFF 0 #define G_TEXTURE_IMAGE_FRAC 2 +typedef DL_INT_SIZE Gfx; + #define gdSPDefLights1(ar,ag,ab,r1,g1,b1,x1,y1,z1) {{{ {ar,ag,ab},0,{ar,ag,ab},0}}, {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}} } #define gsSPVertex(v, n, v0) \ GFXCMD_VertexData, \ - (int64_t)v, n, v0 + (DL_INT_SIZE)v, n, v0 #define gsSP2Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \ GFXCMD_Triangle, \ @@ -95,11 +98,11 @@ typedef struct { #define gsSPDisplayList(dl) \ GFXCMD_SubDisplayList, \ - (int64_t)dl + (DL_INT_SIZE)dl #define gsSPLight(l, n) \ GFXCMD_Light, \ - (int64_t)l, n + (DL_INT_SIZE)l, n #define gsSPTexture(s, t, level, tile, on) \ GFXCMD_Texture, \ @@ -123,6 +126,4 @@ typedef struct { #define gsDPTileSync() (GFXCMD_None) #define gsDPSetTile(fmt, siz, line, tmem, tile, palette, cmt, maskt, shiftt, cms, masks, shifts) (GFXCMD_None) #define gsDPLoadBlock(tile, uls, ult, lrs, dxt) (GFXCMD_None) -#define gsDPLoadSync() (GFXCMD_None) - -typedef int64_t Gfx; \ No newline at end of file +#define gsDPLoadSync() (GFXCMD_None) \ No newline at end of file