Make Surfaces Float
This commit is contained in:
@@ -22,7 +22,7 @@ BUILD_DIR := build
|
|||||||
DIST_DIR := dist
|
DIST_DIR := dist
|
||||||
ALL_DIRS := $(addprefix $(BUILD_DIR)/,$(SRC_DIRS))
|
ALL_DIRS := $(addprefix $(BUILD_DIR)/,$(SRC_DIRS))
|
||||||
|
|
||||||
LIB_FILE := $(DIST_DIR)/libsm64.so
|
LIB_FILE := $(DIST_DIR)/sm64.so
|
||||||
LIB_H_FILE := $(DIST_DIR)/include/libsm64.h
|
LIB_H_FILE := $(DIST_DIR)/include/libsm64.h
|
||||||
TEST_FILE := run-test
|
TEST_FILE := run-test
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ ifdef WINDOWS_BUILD
|
|||||||
LIB_FILE := $(DIST_DIR)/sm64.dll
|
LIB_FILE := $(DIST_DIR)/sm64.dll
|
||||||
TEST_FILE := $(DIST_DIR)/run-test.exe
|
TEST_FILE := $(DIST_DIR)/run-test.exe
|
||||||
else ifdef MACOS_BUILD
|
else ifdef MACOS_BUILD
|
||||||
LIB_FILE := $(DIST_DIR)/libsm64.dylib
|
LIB_FILE := $(DIST_DIR)/sm64.dylib
|
||||||
endif
|
endif
|
||||||
|
|
||||||
DUMMY := $(shell mkdir -p $(ALL_DIRS) build/test build/test/gl33core build/test/gl20 src/decomp/mario $(DIST_DIR)/include)
|
DUMMY := $(shell mkdir -p $(ALL_DIRS) build/test build/test/gl33core build/test/gl20 src/decomp/mario $(DIST_DIR)/include)
|
||||||
@@ -89,12 +89,12 @@ test/level.c: ./import-test-collision.py
|
|||||||
test/main.cpp test/gl20/gl20_renderer.c test/gl33core/gl33core_renderer.c: test/level.c
|
test/main.cpp test/gl20/gl20_renderer.c test/gl33core/gl33core_renderer.c: test/level.c
|
||||||
|
|
||||||
$(BUILD_DIR)/test/%.o: test/%.c
|
$(BUILD_DIR)/test/%.o: test/%.c
|
||||||
@$(CC) $(CFLAGS) -MM -MP -MT $@ -MF $(BUILD_DIR)/test/$*.d $<
|
@$(CC) $(CFLAGS) -I src/decomp/include -MM -MP -MT $@ -MF $(BUILD_DIR)/test/$*.d $<
|
||||||
$(CC) -c $(CFLAGS) -o $@ $<
|
$(CC) -c $(CFLAGS) -I src/decomp/include -o $@ $<
|
||||||
|
|
||||||
$(BUILD_DIR)/test/%.o: test/%.cpp
|
$(BUILD_DIR)/test/%.o: test/%.cpp
|
||||||
@$(CXX) $(CFLAGS) -MM -MP -MT $@ -MF $(BUILD_DIR)/test/$*.d $<
|
@$(CXX) $(CFLAGS) -I src/decomp/include -MM -MP -MT $@ -MF $(BUILD_DIR)/test/$*.d $<
|
||||||
$(CXX) -c $(CFLAGS) -o $@ $<
|
$(CXX) -c $(CFLAGS) -I src/decomp/include -std=c++17 -o $@ $<
|
||||||
|
|
||||||
$(TEST_FILE): $(LIB_FILE) $(TEST_OBJS)
|
$(TEST_FILE): $(LIB_FILE) $(TEST_OBJS)
|
||||||
ifdef WINDOWS_BUILD
|
ifdef WINDOWS_BUILD
|
||||||
|
|||||||
@@ -8,9 +8,9 @@
|
|||||||
/**
|
/**
|
||||||
* Iterate through the list of ceilings and find the first ceiling over a given point.
|
* Iterate through the list of ceilings and find the first ceiling over a given point.
|
||||||
*/
|
*/
|
||||||
static struct SM64SurfaceCollisionData *find_ceil_from_list( s32 x, s32 y, s32 z, f32 *pheight) {
|
static struct SM64SurfaceCollisionData *find_ceil_from_list( f32 x, f32 y, f32 z, f32 *pheight) {
|
||||||
register struct SM64SurfaceCollisionData *surf;
|
register struct SM64SurfaceCollisionData *surf;
|
||||||
register s32 x1, z1, x2, z2, x3, z3;
|
register f32 x1, z1, x2, z2, x3, z3;
|
||||||
struct SM64SurfaceCollisionData *ceil = NULL;
|
struct SM64SurfaceCollisionData *ceil = NULL;
|
||||||
|
|
||||||
ceil = NULL;
|
ceil = NULL;
|
||||||
@@ -83,9 +83,9 @@ static struct SM64SurfaceCollisionData *find_ceil_from_list( s32 x, s32 y, s32 z
|
|||||||
/**
|
/**
|
||||||
* Iterate through the list of floors and find the first floor under a given point.
|
* Iterate through the list of floors and find the first floor under a given point.
|
||||||
*/
|
*/
|
||||||
static struct SM64SurfaceCollisionData *find_floor_from_list( s32 x, s32 y, s32 z, f32 *pheight) {
|
static struct SM64SurfaceCollisionData *find_floor_from_list( f32 x, f32 y, f32 z, f32 *pheight) {
|
||||||
register struct SM64SurfaceCollisionData *surf;
|
register struct SM64SurfaceCollisionData *surf;
|
||||||
register s32 x1, z1, x2, z2, x3, z3;
|
register f32 x1, z1, x2, z2, x3, z3;
|
||||||
f32 nx, ny, nz;
|
f32 nx, ny, nz;
|
||||||
f32 oo;
|
f32 oo;
|
||||||
f32 height;
|
f32 height;
|
||||||
|
|||||||
+6
-6
@@ -30,7 +30,7 @@ struct SM64Surface
|
|||||||
int16_t type;
|
int16_t type;
|
||||||
int16_t force;
|
int16_t force;
|
||||||
uint16_t terrain;
|
uint16_t terrain;
|
||||||
int32_t vertices[3][3];
|
float vertices[3][3]; // world-space coordinates
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SM64MarioInputs
|
struct SM64MarioInputs
|
||||||
@@ -115,11 +115,11 @@ struct SM64SurfaceCollisionData
|
|||||||
int16_t force;
|
int16_t force;
|
||||||
int8_t flags;
|
int8_t flags;
|
||||||
int8_t room;
|
int8_t room;
|
||||||
int32_t lowerY; // libsm64: 32 bit
|
float lowerY;
|
||||||
int32_t upperY; // libsm64: 32 bit
|
float upperY;
|
||||||
int32_t vertex1[3]; // libsm64: 32 bit
|
float vertex1[3];
|
||||||
int32_t vertex2[3]; // libsm64: 32 bit
|
float vertex2[3];
|
||||||
int32_t vertex3[3]; // libsm64: 32 bit
|
float vertex3[3];
|
||||||
struct {
|
struct {
|
||||||
float x;
|
float x;
|
||||||
float y;
|
float y;
|
||||||
|
|||||||
+13
-13
@@ -93,17 +93,17 @@ static void engine_surface_from_lib_surface( struct SM64SurfaceCollisionData *su
|
|||||||
{
|
{
|
||||||
int16_t type = libSurf->type;
|
int16_t type = libSurf->type;
|
||||||
int16_t force = libSurf->force;
|
int16_t force = libSurf->force;
|
||||||
s32 x1 = libSurf->vertices[0][0];
|
f32 x1 = libSurf->vertices[0][0];
|
||||||
s32 y1 = libSurf->vertices[0][1];
|
f32 y1 = libSurf->vertices[0][1];
|
||||||
s32 z1 = libSurf->vertices[0][2];
|
f32 z1 = libSurf->vertices[0][2];
|
||||||
s32 x2 = libSurf->vertices[1][0];
|
f32 x2 = libSurf->vertices[1][0];
|
||||||
s32 y2 = libSurf->vertices[1][1];
|
f32 y2 = libSurf->vertices[1][1];
|
||||||
s32 z2 = libSurf->vertices[1][2];
|
f32 z2 = libSurf->vertices[1][2];
|
||||||
s32 x3 = libSurf->vertices[2][0];
|
f32 x3 = libSurf->vertices[2][0];
|
||||||
s32 y3 = libSurf->vertices[2][1];
|
f32 y3 = libSurf->vertices[2][1];
|
||||||
s32 z3 = libSurf->vertices[2][2];
|
f32 z3 = libSurf->vertices[2][2];
|
||||||
|
|
||||||
s32 maxY, minY;
|
f32 maxY, minY;
|
||||||
f32 nx, ny, nz;
|
f32 nx, ny, nz;
|
||||||
f32 mag;
|
f32 mag;
|
||||||
|
|
||||||
@@ -158,9 +158,9 @@ static void engine_surface_from_lib_surface( struct SM64SurfaceCollisionData *su
|
|||||||
|
|
||||||
if (mag < 0.0001) {
|
if (mag < 0.0001) {
|
||||||
DEBUG_PRINT("ERROR: normal magnitude is very close to zero:");
|
DEBUG_PRINT("ERROR: normal magnitude is very close to zero:");
|
||||||
DEBUG_PRINT("v1 %i %i %i", x1, y1, z1 );
|
DEBUG_PRINT("v1 %f %f %f", x1, y1, z1 );
|
||||||
DEBUG_PRINT("v2 %i %i %i", x2, y2, z2 );
|
DEBUG_PRINT("v2 %f %f %f", x2, y2, z2 );
|
||||||
DEBUG_PRINT("v3 %i %i %i", x3, y3, z3 );
|
DEBUG_PRINT("v3 %f %f %f", x3, y3, z3 );
|
||||||
surface->isValid = 0;
|
surface->isValid = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-1
@@ -56,6 +56,17 @@ float lerp(float a, float b, float amount)
|
|||||||
return a + (b - a) * amount;
|
return a + (b - a) * amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void DebugPrint(const char *message)
|
||||||
|
{
|
||||||
|
if (message == nullptr)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("[SM64] %s\n", message);
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
|
||||||
int main( void )
|
int main( void )
|
||||||
{
|
{
|
||||||
size_t romSize;
|
size_t romSize;
|
||||||
@@ -73,9 +84,13 @@ int main( void )
|
|||||||
sm64_global_terminate();
|
sm64_global_terminate();
|
||||||
sm64_global_init( rom, texture );
|
sm64_global_init( rom, texture );
|
||||||
sm64_audio_init(rom);
|
sm64_audio_init(rom);
|
||||||
|
|
||||||
|
// sm64_register_debug_print_function(DebugPrint);
|
||||||
|
|
||||||
sm64_static_surfaces_load( surfaces, surfaces_count );
|
sm64_static_surfaces_load( surfaces, surfaces_count );
|
||||||
int32_t marioId = sm64_mario_create( 0, 1000, 0 );
|
int32_t marioId = sm64_mario_create( 0, 1000, 0 );
|
||||||
|
|
||||||
|
printf("MarioID: %i\n", marioId);
|
||||||
free( rom );
|
free( rom );
|
||||||
|
|
||||||
RenderState renderState;
|
RenderState renderState;
|
||||||
@@ -94,7 +109,7 @@ int main( void )
|
|||||||
renderer = &gl20_renderer;
|
renderer = &gl20_renderer;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
context_init( "libsm64", 800, 600, major, minor );
|
context_init( "libsm64", 1280, 720, major, minor );
|
||||||
renderer->init( &renderState, texture );
|
renderer->init( &renderState, texture );
|
||||||
|
|
||||||
struct SM64MarioInputs marioInputs;
|
struct SM64MarioInputs marioInputs;
|
||||||
|
|||||||
Reference in New Issue
Block a user