From 2cb5bcb856b6926784ef15ea7de3f28a1b70ada2 Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Thu, 2 Feb 2023 12:49:18 +0100 Subject: [PATCH] Added support for setting the clear color to a generic sky color. This is very basic and it does exacerbate the gaps between polygons on some maps, but at least we get to have something of a sky. --- display.c | 13 +++++++++++-- display.h | 1 + main.c | 1 + ps1bsp.h | 6 ++++++ test.ps1bsp | Bin 447675 -> 447687 bytes world.c | 1 + world.h | 2 ++ 7 files changed, 22 insertions(+), 2 deletions(-) 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 c8c5d8c41d578891237a234f52b100ca7e0a216b..23c2221e3f1bc33264e641e2e243fb81a8a7fe14 100755 GIT binary patch delta 37993 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

BnvTuAm>XxXoEh^`cr~h!np{!)ciY~A- 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 C-`{Ki delta 38011 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, 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;