diff --git a/all.h b/all.h index d4025cdc1032b2f462a88f0100666398eeb2d8b7..7e978f8887e3c813dd618680ab2075d3a830bf4e 100644 --- a/all.h +++ b/all.h @@ -78,9 +78,9 @@ Texture2D tex; } CachedTexture; // Asset Module -Texture2D GetTexture(const char *name); -void UnloadAssets(void); -Font LoadFontVFS(const char *path, int fontSize); +Texture2D get_texture(const char *name); +void unload_assets(void); +Font load_font_vfs(const char *path, int fontSize); // Map Module typedef struct { @@ -88,15 +88,15 @@ Model *models; int count; } MapState; -bool LoadMap(const char *filename); -void UnloadMap(void); -bool CheckMapCollision(Vector3 start, Vector3 end, RayCollision *outCollision); -Map ParseMap(const char *filename); -void FreeMap(Map map); +bool load_map(const char *filename); +void unload_map(void); +bool check_map_collision(Vector3 start, Vector3 end, RayCollision *outCollision); +Map parse_map(const char *filename); +void free_map(Map map); // Menu Module -void UpdateMenu(void); -void DrawMenu(void); +void update_menu(void); +void draw_menu(void); // Player Module typedef enum { @@ -117,7 +117,7 @@ float horizontal_speed; float camera_offset_y; // Vertical offset for stair smoothing } PlayerState; -void UpdatePlayer(void); +void update_player(void); // Game State Module typedef enum { @@ -142,20 +142,20 @@ } GameState; extern GameState game; -void InitGame(void); -void SetMap(const char *path); -void UpdateGame(void); -void DrawGame(void); +void init_game(void); +void set_map(const char *path); +void update_game(void); +void draw_game(void); // Geometry Helpers -Plane PlaneFromPoints(Vector3 p1, Vector3 p2, Vector3 p3); -void PolyFree(Polygon p); -Polygon PolyClip(Polygon poly, Plane plane); -Polygon CreateLargeQuad(Plane plane); -Vector2 GetUV(Vector3 p, MapPlane *mp, Plane plane); +Plane plane_from_points(Vector3 p1, Vector3 p2, Vector3 p3); +void poly_free(Polygon p); +Polygon poly_clip(Polygon poly, Plane plane); +Polygon create_large_quad(Plane plane); +Vector2 get_uv(Vector3 p, MapPlane *mp, Plane plane); // Interface -void DrawCrosshair(void); -void DrawDebugInfo(void); +void draw_crosshair(void); +void draw_debug_info(void); #endif diff --git a/assets.c b/assets.c index 0b1f66c021ed6f0a81805d7dd33f51549a89870e..9a71cdd35824ddb861da1f3c88f44dd06c6e86c3 100644 --- a/assets.c +++ b/assets.c @@ -6,7 +6,7 @@ #include static array(CachedTexture) texture_cache; -Texture2D GetTexture(const char *name) { +Texture2D get_texture(const char *name) { if (texture_cache.data == NULL) { array_init(texture_cache); } @@ -62,14 +62,14 @@ return tex; } -void UnloadAssets(void) { +void unload_assets(void) { for (int i = 0; i < texture_cache.length; i++) { UnloadTexture(texture_cache.data[i].tex); } array_clear(texture_cache); } -Font LoadFontVFS(const char *path, int fontSize) { +Font load_font_vfs(const char *path, int fontSize) { size_t size = 0; void *data = vfs_read(path, &size); if (data) { diff --git a/game.c b/game.c index d1149b4dcccee274e4ce7d51249ffc1d37a15a7d..f48563d8928607246fa5a444c196e3bcdd7a8b31 100644 --- a/game.c +++ b/game.c @@ -4,10 +4,10 @@ #include GameState game; -void InitGame(void) { +void init_game(void) { memset(&game, 0, sizeof(game)); - game.font_ui = LoadFontVFS(UI_FONT_PATH, UI_FONT_SIZE); + game.font_ui = load_font_vfs(UI_FONT_PATH, UI_FONT_SIZE); game.mode = STATE_MENU; game.cursor_captured = false; EnableCursor(); @@ -23,12 +23,12 @@ game.camera.fovy = PLAYER_FOV; game.camera.projection = CAMERA_PERSPECTIVE; } -void SetMap(const char *path) { +void set_map(const char *path) { strncpy(game.map_path, path, sizeof(game.map_path) - 1); game.map_path[sizeof(game.map_path) - 1] = '\0'; } -void UpdateGame(void) { +void update_game(void) { if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)) { game.cursor_captured = !game.cursor_captured; if (game.cursor_captured) DisableCursor(); @@ -46,10 +46,10 @@ SetTargetFPS(game.target_fps); } } - UpdatePlayer(); + update_player(); } -void DrawGame(void) { +void draw_game(void) { BeginDrawing(); ClearBackground(DARKGRAY); @@ -62,8 +62,8 @@ } EndMode3D(); - DrawCrosshair(); - DrawDebugInfo(); + draw_crosshair(); + draw_debug_info(); EndDrawing(); } diff --git a/interface.c b/interface.c index 58d8721dc5844312b6a5f2e7e9475b793be140a5..98039db648afe3446ccbf1db3ac8492060afc3f9 100644 --- a/interface.c +++ b/interface.c @@ -1,13 +1,13 @@ #include "all.h" -void DrawCrosshair(void) { +void draw_crosshair(void) { int screenWidth = GetScreenWidth(); int screenHeight = GetScreenHeight(); DrawLine(screenWidth / 2 - 10, screenHeight / 2, screenWidth / 2 + 10, screenHeight / 2, GREEN); DrawLine(screenWidth / 2, screenHeight / 2 - 10, screenWidth / 2, screenHeight / 2 + 10, GREEN); } -void DrawDebugInfo(void) { +void draw_debug_info(void) { DrawTextEx(game.font_ui, TextFormat("%i FPS", GetFPS()), (Vector2){ 10, 10 }, 20, 2, GREEN); DrawTextEx(game.font_ui, TextFormat("VSync: %s", game.vsync ? "ON" : "OFF"), (Vector2){ 10, 35 }, 20, 2, GREEN); DrawTextEx(game.font_ui, TextFormat("Speed: %.0f", game.player.horizontal_speed), (Vector2){ 10, 60 }, 20, 2, GREEN); diff --git a/main.c b/main.c index cc96b3b2fdc27b32f9541c5c04efc58e399f4e35..d791a81393fb9e21b09c740acaf8699a336b5ee3 100644 --- a/main.c +++ b/main.c @@ -54,10 +54,10 @@ int monitor = GetCurrentMonitor(); SetWindowPosition((GetMonitorWidth(monitor) - GetScreenWidth()) / 2, (GetMonitorHeight(monitor) - GetScreenHeight()) / 2); vfs_init(VFS_DATA_PAK); - InitGame(); + init_game(); game.screen_width = width; game.screen_height = height; - SetMap(map_path.data); + set_map(map_path.data); if (target_fps >= 0) { game.target_fps = target_fps; @@ -69,7 +69,7 @@ SetTargetFPS(GetMonitorRefreshRate(monitor)); } if (skip_title) { - if (LoadMap(game.map_path)) { + if (load_map(game.map_path)) { game.mode = STATE_PLAYING; game.cursor_captured = true; DisableCursor(); @@ -81,21 +81,21 @@ while (!WindowShouldClose()) { // Global Map Switching (Debug/Demo) if (IsKeyPressed(KEY_ONE)) { - if (LoadMap("maps/demo1.map")) { + if (load_map("maps/demo1.map")) { game.mode = STATE_PLAYING; game.cursor_captured = true; DisableCursor(); } } if (IsKeyPressed(KEY_TWO)) { - if (LoadMap("maps/demo2.map")) { + if (load_map("maps/demo2.map")) { game.mode = STATE_PLAYING; game.cursor_captured = true; DisableCursor(); } } if (IsKeyPressed(KEY_THREE)) { - if (LoadMap("maps/demo3.map")) { + if (load_map("maps/demo3.map")) { game.mode = STATE_PLAYING; game.cursor_captured = true; DisableCursor(); @@ -105,18 +105,18 @@ // Game State Switcher switch (game.mode) { case STATE_MENU: - UpdateMenu(); - DrawMenu(); + update_menu(); + draw_menu(); break; case STATE_PLAYING: - UpdateGame(); - DrawGame(); + update_game(); + draw_game(); break; } } - UnloadMap(); - UnloadAssets(); + unload_map(); + unload_assets(); vfs_shutdown(); CloseWindow(); sb_free(&map_path); diff --git a/map.c b/map.c index 4e2b83cc1c16d774802f4b79e92ecc5be96a049c..4f9a1319c94340dd1f4269cb27c215d4047f42e4 100644 --- a/map.c +++ b/map.c @@ -74,7 +74,7 @@ map_expect(p, ')'); return (Vector3){ x, z, -y }; } -Map ParseMap(const char *filename) { +Map parse_map(const char *filename) { size_t size; char *data = (char *)vfs_read(filename, &size); Map map = { 0 }; @@ -153,7 +153,7 @@ vfs_free(data); return map; } -void FreeMap(Map map) { +void free_map(Map map) { for (int i = 0; i < map.entity_count; i++) { MapEntity *e = &map.entities[i]; if (e->properties) free(e->properties); @@ -165,18 +165,18 @@ } if (map.entities) free(map.entities); } -Plane PlaneFromPoints(Vector3 p1, Vector3 p2, Vector3 p3) { +Plane plane_from_points(Vector3 p1, Vector3 p2, Vector3 p3) { Vector3 v1 = Vector3Subtract(p2, p1); Vector3 v2 = Vector3Subtract(p3, p1); Vector3 normal = Vector3Normalize(Vector3CrossProduct(v1, v2)); return (Plane){ normal, Vector3DotProduct(normal, p1) }; } -void PolyFree(Polygon p) { +void poly_free(Polygon p) { if (p.verts) free(p.verts); } -Polygon PolyClip(Polygon poly, Plane plane) { +Polygon poly_clip(Polygon poly, Plane plane) { if (poly.count == 0) return poly; array(Vector3) out_verts; @@ -215,7 +215,7 @@ res.count = (int)out_verts.length; return res; } -Polygon CreateLargeQuad(Plane plane) { +Polygon create_large_quad(Plane plane) { Vector3 n = plane.normal; Vector3 up = (fabsf(n.y) < 0.999f) ? (Vector3){ 0, 1, 0 } : (Vector3){ 1, 0, 0 }; Vector3 right = Vector3Normalize(Vector3CrossProduct(up, n)); @@ -235,7 +235,7 @@ return poly; } -Vector2 GetUV(Vector3 p, MapPlane *mp, Plane plane) { +Vector2 get_uv(Vector3 p, MapPlane *mp, Plane plane) { Vector3 n = plane.normal; Vector3 up = (fabsf(n.y) < 0.999f) ? (Vector3){ 0, 1, 0 } : (Vector3){ 1, 0, 0 }; Vector3 right = Vector3Normalize(Vector3CrossProduct(up, n)); @@ -247,7 +247,7 @@ return (Vector2){ u / 64.0f, v / 64.0f }; } -void UnloadMap(void) { +void unload_map(void) { if (game.map.models) { for (int i = 0; i < game.map.count; i++) { UnloadModel(game.map.models[i]); @@ -258,16 +258,16 @@ game.map.count = 0; } } -bool LoadMap(const char *filename) { +bool load_map(const char *filename) { TraceLog(LOG_INFO, "Loading map: %s", filename); - Map map = ParseMap(filename); + Map map = parse_map(filename); if (map.entity_count == 0) { TraceLog(LOG_ERROR, "Failed to load map or map is empty: %s", filename); return false; } - UnloadMap(); + unload_map(); array(TextureGroup) groups; array_init(groups); @@ -316,18 +316,18 @@ for (int j = 0; j < e->brush_count; j++) { MapBrush *brush = &e->brushes[j]; for (int p_idx = 0; p_idx < brush->plane_count; p_idx++) { MapPlane *mp = &brush->planes[p_idx]; - Plane plane = PlaneFromPoints(mp->p[0], mp->p[1], mp->p[2]); + Plane plane = plane_from_points(mp->p[0], mp->p[1], mp->p[2]); if (Vector3Length(plane.normal) < 0.5f) continue; - Polygon poly = CreateLargeQuad(plane); + Polygon poly = create_large_quad(plane); for (int k = 0; k < brush->plane_count; k++) { if (p_idx == k) continue; - Plane clipPlane = PlaneFromPoints(brush->planes[k].p[0], brush->planes[k].p[1], brush->planes[k].p[2]); + Plane clipPlane = plane_from_points(brush->planes[k].p[0], brush->planes[k].p[1], brush->planes[k].p[2]); if (Vector3Length(clipPlane.normal) < 0.5f) continue; - Polygon next = PolyClip(poly, clipPlane); - PolyFree(poly); + Polygon next = poly_clip(poly, clipPlane); + poly_free(poly); poly = next; } @@ -355,9 +355,9 @@ Vector3 v2 = poly.verts[v]; array_push(group->vertices, v0.x); array_push(group->vertices, v0.y); array_push(group->vertices, v0.z); array_push(group->vertices, v1.x); array_push(group->vertices, v1.y); array_push(group->vertices, v1.z); array_push(group->vertices, v2.x); array_push(group->vertices, v2.y); array_push(group->vertices, v2.z); - Vector2 uv0 = GetUV(v0, mp, plane); - Vector2 uv1 = GetUV(v1, mp, plane); - Vector2 uv2 = GetUV(v2, mp, plane); + Vector2 uv0 = get_uv(v0, mp, plane); + Vector2 uv1 = get_uv(v1, mp, plane); + Vector2 uv2 = get_uv(v2, mp, plane); array_push(group->texcoords, uv0.x); array_push(group->texcoords, uv0.y); array_push(group->texcoords, uv1.x); array_push(group->texcoords, uv1.y); array_push(group->texcoords, uv2.x); array_push(group->texcoords, uv2.y); @@ -367,7 +367,7 @@ array_push(group->normals, out_normal.x); array_push(group->normals, out_normal.y); array_push(group->normals, out_normal.z); array_push(group->normals, out_normal.x); array_push(group->normals, out_normal.y); array_push(group->normals, out_normal.z); } } - PolyFree(poly); + poly_free(poly); } } } @@ -390,7 +390,7 @@ mesh.normals = (float *)malloc(g->normals.length * sizeof(float)); memcpy(mesh.normals, g->normals.data, g->normals.length * sizeof(float)); UploadMesh(&mesh, false); Model model = LoadModelFromMesh(mesh); - model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = GetTexture(g->texture); + model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = get_texture(g->texture); array_push(final_models, model); array_free(g->vertices); array_free(g->texcoords); @@ -401,12 +401,12 @@ game.map.models = final_models.data; game.map.count = (int)final_models.length; array_free(groups); - FreeMap(map); + free_map(map); TraceLog(LOG_INFO, "Processed %d brushes into %d models", total_brushes, game.map.count); return true; } -bool CheckMapCollision(Vector3 start, Vector3 end, RayCollision *outCollision) { +bool check_map_collision(Vector3 start, Vector3 end, RayCollision *outCollision) { Vector3 diff = Vector3Subtract(end, start); float maxDist = Vector3Length(diff); if (maxDist < 0.001f) return false; diff --git a/maps/demo4.map b/maps/demo4.map new file mode 100644 index 0000000000000000000000000000000000000000..0b8101030cfe966fa51fef8da7c94e26118ffd18 --- /dev/null +++ b/maps/demo4.map @@ -0,0 +1,65 @@ +// Game: Stalag +// Format: Standard +// entity 0 +{ +"classname" "worldspawn" +// brush 0 +{ +( -128 -80 -16 ) ( -128 -79 -16 ) ( -128 -80 -15 ) __TB_empty -16 0 0 1 1 +( -64 -80 -16 ) ( -64 -80 -15 ) ( -63 -80 -16 ) __TB_empty 0 0 0 1 1 +( -64 -80 -16 ) ( -63 -80 -16 ) ( -64 -79 -16 ) __TB_empty 0 16 0 1 1 +( 64 48 0 ) ( 64 49 0 ) ( 65 48 0 ) __TB_empty 0 16 0 1 1 +( 64 656 16 ) ( 65 656 16 ) ( 64 656 17 ) __TB_empty 0 0 0 1 1 +( 64 48 16 ) ( 64 48 17 ) ( 64 49 16 ) __TB_empty -16 0 0 1 1 +} +// brush 1 +{ +( -128 -80 0 ) ( -128 -79 0 ) ( -128 -80 1 ) interior/interior_wall_003 0 0 0 1 1 +( -128 -80 0 ) ( -128 -80 1 ) ( -127 -80 0 ) interior/interior_wall_003 0 0 0 1 1 +( -128 -80 0 ) ( -127 -80 0 ) ( -128 -79 0 ) interior/interior_wall_003 0 0 0 1 1 +( -112 48 112 ) ( -112 49 112 ) ( -111 48 112 ) interior/interior_wall_003 0 0 0 1 1 +( -112 656 16 ) ( -111 656 16 ) ( -112 656 17 ) interior/interior_wall_003 0 0 0 1 1 +( -112 48 16 ) ( -112 48 17 ) ( -112 49 16 ) interior/interior_wall_003 0 0 0 1 1 +} +// brush 2 +{ +( 48 -80 0 ) ( 48 -79 0 ) ( 48 -80 1 ) interior/interior_wall_003 0 0 0 1 1 +( 48 -80 0 ) ( 48 -80 1 ) ( 49 -80 0 ) interior/interior_wall_003 0 0 0 1 1 +( 48 -80 0 ) ( 49 -80 0 ) ( 48 -79 0 ) interior/interior_wall_003 0 0 0 1 1 +( 64 48 112 ) ( 64 49 112 ) ( 65 48 112 ) interior/interior_wall_003 0 0 0 1 1 +( 64 656 16 ) ( 65 656 16 ) ( 64 656 17 ) interior/interior_wall_003 0 0 0 1 1 +( 64 48 16 ) ( 64 48 17 ) ( 64 49 16 ) interior/interior_wall_003 0 0 0 1 1 +} +// brush 3 +{ +( 48 480 112 ) ( 48 481 112 ) ( 47 480 113 ) interior/interior_wall_001 0 0 90 1 1 +( 48 480 112 ) ( 47 480 113 ) ( 49 480 112 ) interior/interior_wall_001 16 6.4000015 0 1 1.25 +( 48 480 112 ) ( 49 480 112 ) ( 48 481 112 ) interior/interior_wall_001 0 0 0 1 1 +( 32 656 144 ) ( 32 657 144 ) ( 33 656 144 ) interior/interior_wall_001 0 0 0 1 1 +( 48 656 128 ) ( 49 656 128 ) ( 47 656 129 ) interior/interior_wall_001 16 6.4000015 0 1 1.25 +( 48 656 128 ) ( 47 656 129 ) ( 48 657 128 ) interior/interior_wall_001 0 -16 90 1 1 +} +// brush 4 +{ +( -112 480 128 ) ( -111 480 129 ) ( -112 479 128 ) interior/interior_wall_001 -16 -16 270 1 1 +( -112 480 128 ) ( -113 480 128 ) ( -111 480 129 ) interior/interior_wall_001 -16 6.4000015 180 1 -1.25 +( -112 656 112 ) ( -113 656 112 ) ( -112 655 112 ) interior/interior_wall_001 0 16 180 1 1 +( -96 480 144 ) ( -96 479 144 ) ( -97 480 144 ) interior/interior_wall_001 0 16 180 1 1 +( -112 656 112 ) ( -111 656 113 ) ( -113 656 112 ) interior/interior_wall_001 -16 6.4000015 180 1 -1.25 +( -112 656 112 ) ( -112 655 112 ) ( -111 656 113 ) interior/interior_wall_001 -16 0 270 1 1 +} +// brush 5 +{ +( -96 480 144 ) ( -96 481 144 ) ( -96 480 145 ) interior/interior_wall_001 0 0 0 1 1 +( -96 480 144 ) ( -96 480 145 ) ( -95 480 144 ) interior/interior_wall_001 0 0 0 1 1 +( -96 480 144 ) ( -95 480 144 ) ( -96 481 144 ) interior/interior_wall_001 0 0 0 1 1 +( 32 656 160 ) ( 32 657 160 ) ( 33 656 160 ) interior/interior_wall_001 0 0 0 1 1 +( 32 656 160 ) ( 33 656 160 ) ( 32 656 161 ) interior/interior_wall_001 0 0 0 1 1 +( 32 656 160 ) ( 32 656 161 ) ( 32 657 160 ) interior/interior_wall_001 0 0 0 1 1 +} +} +// entity 1 +{ +"classname" "info_player_start" +"origin" "-32 624 16" +} diff --git a/menu.c b/menu.c index c1db1f71dce9cc0872522917b8d9dbf07cdd4f43..f3eb7f5195d26a15dfa9517ddbfaf953a5f9944e 100644 --- a/menu.c +++ b/menu.c @@ -1,8 +1,8 @@ #include "all.h" -void UpdateMenu(void) { +void update_menu(void) { if (IsKeyPressed(KEY_ENTER)) { - if (LoadMap(game.map_path)) { + if (load_map(game.map_path)) { game.mode = STATE_PLAYING; game.cursor_captured = true; DisableCursor(); @@ -10,7 +10,7 @@ } } } -void DrawMenu(void) { +void draw_menu(void) { BeginDrawing(); ClearBackground(BLACK); diff --git a/player.c b/player.c index 88b0e6c5459acd069166d16e2e98e7105160127a..17bc9ccd8ddc532a010eb415c0f8ae6aad50d734 100644 --- a/player.c +++ b/player.c @@ -59,7 +59,7 @@ float dist = Vector3Length(remainingMove) + PLAYER_RADIUS; Vector3 end = Vector3Add(start, Vector3Scale(dir, dist)); RayCollision col; - if (CheckMapCollision(start, end, &col)) { + if (check_map_collision(start, end, &col)) { float adjustedDist = col.distance - PLAYER_RADIUS; if (adjustedDist < closestHit.distance) { closestHit = col; @@ -99,7 +99,7 @@ if (verticalMove < 0) { Vector3 start = vStart; Vector3 end = Vector3Add(vStart, (Vector3){0, verticalMove - eyeHeight, 0}); RayCollision vCol; - if (CheckMapCollision(start, end, &vCol) && vCol.normal.y > 0.5f) { + if (check_map_collision(start, end, &vCol) && vCol.normal.y > 0.5f) { game.player.pos.y = vCol.point.y + eyeHeight; game.player.velocity.y = 0; game.player.is_grounded = true; @@ -112,7 +112,7 @@ Vector3 start = vStart; float headHeight = PLAYER_HEIGHT - PLAYER_EYE_HEIGHT; Vector3 end = Vector3Add(vStart, (Vector3){0, verticalMove + headHeight, 0}); RayCollision vCol; - if (CheckMapCollision(start, end, &vCol)) { + if (check_map_collision(start, end, &vCol)) { game.player.pos.y = vCol.point.y - headHeight - 1.0f; game.player.velocity.y = 0; } else { @@ -123,7 +123,7 @@ } else { Vector3 start = vStart; Vector3 end = Vector3Add(vStart, (Vector3){0, -eyeHeight - 2.0f, 0}); RayCollision vCol; - if (CheckMapCollision(start, end, &vCol) && vCol.normal.y > 0.5f) { + if (check_map_collision(start, end, &vCol) && vCol.normal.y > 0.5f) { game.player.is_grounded = true; if (vCol.distance < eyeHeight + 1.0f) { game.player.pos.y = vCol.point.y + eyeHeight; @@ -170,7 +170,7 @@ game.player.velocity = (Vector3){0, 0, 0}; game.player.is_grounded = false; } -void UpdatePlayer(void) { +void update_player(void) { float dt = GetFrameTime(); Vector3 oldPos = game.player.pos; @@ -189,7 +189,7 @@ if (game.player.crouch_amount > 0.1f) { Vector3 headPos = game.player.pos; Vector3 headEnd = Vector3Add(headPos, (Vector3){0, PLAYER_HEIGHT - PLAYER_EYE_HEIGHT + PLAYER_CROUCH_OFFSET, 0}); RayCollision col; - if (CheckMapCollision(headPos, headEnd, &col)) { + if (check_map_collision(headPos, headEnd, &col)) { canStand = false; } } diff --git a/textures/interior/interior_wall.xcf b/textures/interior/interior_wall.xcf new file mode 100644 index 0000000000000000000000000000000000000000..bbe128a9aaa061ab70adc60debdf22cc1fc85624 Binary files /dev/null and b/textures/interior/interior_wall.xcf differ diff --git a/textures/interior/interior_wall_001.png b/textures/interior/interior_wall_001.png new file mode 100644 index 0000000000000000000000000000000000000000..9ec4a362be319c2a232e222736c5a411983db1b1 Binary files /dev/null and b/textures/interior/interior_wall_001.png differ diff --git a/textures/interior/interior_wall_002.png b/textures/interior/interior_wall_002.png new file mode 100644 index 0000000000000000000000000000000000000000..f735b94617843cc7c61500889cfadcf290f2616a Binary files /dev/null and b/textures/interior/interior_wall_002.png differ diff --git a/textures/interior/interior_wall_003.png b/textures/interior/interior_wall_003.png new file mode 100644 index 0000000000000000000000000000000000000000..4a73a603d52dbe8aacb9a488675c77cab6f80019 Binary files /dev/null and b/textures/interior/interior_wall_003.png differ diff --git a/textures/palette.xcf b/textures/palette.xcf new file mode 100644 index 0000000000000000000000000000000000000000..189b85a2d768c329972f13c82ce44c2bafea882b Binary files /dev/null and b/textures/palette.xcf differ