diff --git a/game/game b/game/game index df7ac7c..4cd8bc7 100755 Binary files a/game/game and b/game/game differ diff --git a/game/player.odin b/game/player.odin index 93e8d77..284b920 100644 --- a/game/player.odin +++ b/game/player.odin @@ -79,7 +79,7 @@ handle_player_input :: proc(p:^Player, w:^World) { // Movement dt := rl.GetFrameTime() - move_delay : f32 = 0.2 + move_delay : f32 = 0.0 if p.move_timer > 0 { p.move_timer -= dt } @@ -208,23 +208,9 @@ draw_player :: proc(player:^Player) { will_collide :: proc(direction:InteractDirection, p:^Player, w:^World) -> bool { tile, pos := get_tile_in_direction(direction, p, w) - if tile.type == .SOLID { return true } + // if tile.type == .SOLID { return true } return false } -// will_collide :: proc(w:^World, pos:rl.Vector2) -> bool { -// world_grid_pos := vec2_to_vec2i(pos) -// chunk_pos := world_pos_to_chunk_pos(pos) -// local_pos := get_local_chunk_pos(world_grid_pos) -// chunk := get_chunk(w, chunk_pos) -// tile := get_chunk_tile(chunk, local_pos) - -// #partial switch tile.type { -// case .SOLID: -// return true -// } - -// return false -// } diff --git a/game/terrain.odin b/game/terrain.odin index e2a9d63..b251834 100644 --- a/game/terrain.odin +++ b/game/terrain.odin @@ -65,69 +65,11 @@ get_biome_from_id :: proc(id:u32) -> Biome { return biome_list[id] } -// // Improved biome selection with multiple noise layers and better scaling -// get_biome_type :: proc(world_pos: Vec2i, seed: i64) -> Biome { -// // Use multiple noise scales for different features -// continent_scale := 0.001 // Very large scale features (continents) -// region_scale := 0.005 // Medium scale features (regions) -// local_scale := 0.02 // Local variations -// -// // Use different seed offsets for each noise layer -// continent_seed := seed -// region_seed := seed + 10000 -// moisture_seed := seed + 20000 -// temperature_seed := seed + 30000 -// -// // Generate base continent shapes -// continent := noise.noise_2d(continent_seed, {f64(world_pos.x) * continent_scale, f64(world_pos.y) * continent_scale}) -// // Amplify to get more defined continents -// continent = math.pow(continent * 0.5 + 0.5, 1.5) * 2.0 - 1.0 -// -// // Generate regional variations -// region := noise.noise_2d(region_seed, {f64(world_pos.x) * region_scale, f64(world_pos.y) * region_scale}) -// -// // Generate moisture and temperature maps for biome determination -// moisture := noise.noise_2d(moisture_seed, {f64(world_pos.x) * region_scale, f64(world_pos.y) * region_scale}) -// temperature := noise.noise_2d(temperature_seed, {f64(world_pos.x) * region_scale, f64(world_pos.y) * region_scale}) -// -// // Local variations (small details) -// local_var := noise.noise_2d(seed, {f64(world_pos.x) * local_scale, f64(world_pos.y) * local_scale}) * 0.1 -// -// // Combine all factors with proper weighting -// elevation := continent * 0.7 + region * 0.3 + local_var -// -// // Use temperature and moisture to determine biome type instead of just elevation -// // This creates more natural and varied biome transitions -// -// // Convert noise values to 0-1 range for easier thresholding -// normalized_elevation := elevation * 0.5 + 0.5 -// normalized_moisture := moisture * 0.5 + 0.5 -// normalized_temperature := temperature * 0.5 + 0.5 -// -// // Lakes appear in low elevation areas -// if normalized_elevation < 0.3 { -// return lake_biome -// } -// -// // Deserts appear in hot, dry areas -// if normalized_temperature > 0.6 && normalized_moisture < 0.3 { -// return desert_biome -// } -// -// // Forests need moderate to high moisture -// if normalized_moisture > 0.5 { -// return forest_biome -// } -// -// // Default to grasslands -// return grasslands_biome -// } - get_biome_type :: proc(world_pos: Vec2i, seed: i64) -> Biome { // Use multiple noise scales for different features - continent_scale := 0.001 // Very large scale features (continents) - region_scale := 0.005 // Medium scale features (regions) - local_scale := 0.02 // Local variations + continent_scale := 0.0008 // Very large scale features (continents) + region_scale := 0.007 // Medium scale features (regions) + local_scale := 0.025 // Local variations // Use different seed offsets for each noise layer continent_seed := seed @@ -166,18 +108,12 @@ get_biome_type :: proc(world_pos: Vec2i, seed: i64) -> Biome { return lake_biome } - if normalized_temperature > 0.6 && normalized_moisture < 0.3 { + if normalized_temperature > 0.7 && normalized_moisture < 0.2 { return desert_biome } - // You could also try this alternative approach that uses temperature-moisture balance: - // desert_score := normalized_temperature - normalized_moisture - // if desert_score > 0.3 { - // return desert_biome - // } - // Forests need moderate to high moisture - if normalized_moisture > 0.5 { + if normalized_moisture > 0.55 { return forest_biome } @@ -234,9 +170,9 @@ generate_tile :: proc(pos: Vec2i, seed: i64, biome: Biome) -> Tile { hash_value := hash_noise(pos.x, pos.y, seed) // Use multiple noise scales for natural-looking features - large_scale := 0.02 - medium_scale := 0.05 - small_scale := 0.15 + large_scale := 0.025 + medium_scale := 0.07 + small_scale := 0.20 large_noise := noise.noise_2d(seed, {f64(pos.x) * large_scale, f64(pos.y) * large_scale}) medium_noise := noise.noise_2d(seed + 5000, {f64(pos.x) * medium_scale, f64(pos.y) * medium_scale}) @@ -248,15 +184,15 @@ generate_tile :: proc(pos: Vec2i, seed: i64, biome: Biome) -> Tile { // Different biomes use the noise differently switch biome.type { case .GRASSLAND: - if combined_noise > 0.7 { + if combined_noise > 0.8 { return tree_tile - } else if combined_noise > 0.5 { + } else if combined_noise > 0.2 { return grass_tile } else { return nothing_tile } case .FOREST: - if combined_noise > 0.8 { + if combined_noise > 0.75 { return double_tree_tile } else if combined_noise > 0.4 { return tree_tile @@ -269,7 +205,7 @@ generate_tile :: proc(pos: Vec2i, seed: i64, biome: Biome) -> Tile { cactus_noise := medium_noise * 0.5 + 0.5 // Normalize to 0-1 - if cactus_noise > 0.7 && hash_value > 0.6 { + if cactus_noise > 0.8 && hash_value > 0.65 { return cactus_tile } else if combined_noise > 0.85 { return dead_bush_tile