diff --git a/display.c b/display.c index 09d51f4..dffca76 100644 --- a/display.c +++ b/display.c @@ -45,6 +45,8 @@ u_long *curOT; // video mode and widescreen options to maintain a consistent aspect ratio. VECTOR aspect_scale = { SCREENWIDTH * ONE / 320, ONE, ONE }; +P_COLOR clearColor = { 0 }; + u_short polyCount; u_char enableTexturing = 1; u_char enableVsync = 0; @@ -141,8 +143,8 @@ void display_reset(int mode, u_char interlaced, u_char widescreen, int *outScree disp[0].screen.h = disp[1].screen.h = screenHeight; // Set and enable clear color - setRGB0(&draw[0], 0, 0, 0); - setRGB0(&draw[1], 0, 0, 0); + setColor0(&draw[0], clearColor.color); + setColor0(&draw[1], clearColor.color); draw[0].isbg = 1; draw[0].dtd = 1; draw[1].isbg = 1; @@ -154,6 +156,13 @@ void display_reset(int mode, u_char interlaced, u_char widescreen, int *outScree *outScreenHeight = screenHeight; } +void display_setClearColor(u_char color[4]) +{ + clearColor = *((P_COLOR*)color); + setColor0(&draw[0], clearColor.color); + setColor0(&draw[1], clearColor.color); +} + void display_start() { curOT = ot[db]; diff --git a/display.h b/display.h index 5e72c31..153d7b6 100644 --- a/display.h +++ b/display.h @@ -16,6 +16,7 @@ extern u_char enableTexturing; void display_init(); void display_reset(int mode, u_char interlaced, u_char widescreen, int *outScreenHeight); +void display_setClearColor(u_char color[4]); void display_start(); void display_finish(); diff --git a/main.c b/main.c index 7ac33ef..60b9582 100644 --- a/main.c +++ b/main.c @@ -53,6 +53,7 @@ int main(int argc, const char *argv[]) input_process(); display_start(); + display_setClearColor(world.worldSpawn->skyColor); u_short fps = time_getFrameRate(); FntPrint(-1, "Time: %d, frame: %d, delta time: %3d, fps: %d.%02d\n", (time_getRealTime() * 1000) >> 12, time_getFrameNumber(), time_getDeltaTime(), fps >> 8, ((fps & 0xFF) * 100) >> 8); diff --git a/ps1bsp.h b/ps1bsp.h index c872937..3ee06db 100755 --- a/ps1bsp.h +++ b/ps1bsp.h @@ -28,6 +28,7 @@ typedef struct { u_short version; + ps1bsp_dentry_t worldSpawn; ps1bsp_dentry_t textures; ps1bsp_dentry_t vertices; ps1bsp_dentry_t polygons; @@ -42,6 +43,11 @@ typedef struct ps1bsp_dentry_t models; } ps1bsp_header_t; +typedef struct +{ + unsigned char skyColor[4]; +} ps1bsp_worldspawn_t; + typedef struct { unsigned short tpage; // Texture page in PS1 VRAM (precalculated when generating the texture atlas) diff --git a/test.ps1bsp b/test.ps1bsp index c8c5d8c..23c2221 100755 Binary files a/test.ps1bsp and b/test.ps1bsp differ diff --git a/world.c b/world.c index b320055..bcd6fac 100644 --- a/world.c +++ b/world.c @@ -39,6 +39,7 @@ void world_load(const u_long *data, world_t *world) ps1bsp_header_t* header = (ps1bsp_header_t*)bytes; + LOAD_CHUNK(ps1bsp_worldspawn_t, world->worldSpawn, world->numTextures, bytes, header->worldSpawn); LOAD_CHUNK(ps1bsp_texture_t, world->textures, world->numTextures, bytes, header->textures); LOAD_CHUNK(ps1bsp_vertex_t, world->vertices, world->numVertices, bytes, header->vertices); LOAD_CHUNK(ps1bsp_polygon_t, world->polygons, world->numPolygons, bytes, header->polygons); diff --git a/world.h b/world.h index cd796bc..a8bf541 100644 --- a/world.h +++ b/world.h @@ -5,6 +5,8 @@ typedef struct { + ps1bsp_worldspawn_t *worldSpawn; + u_short numTextures; ps1bsp_texture_t *textures;