Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ Property names and file references are included so each item is easy to find.
- [x] Player verbs — C crouches with ledge protection, F5 toggles a collision-aware third-person camera, and middle-click (or B) picks the targeted block. Survival selects owned blocks only; Creative grants a full stack. Actions are declared in `project.godot`; all three keyboard bindings appear in Controls.

Gameplay verification: `player_survival_verify.gd`, `inventory_crafting_verify.gd`, `inventory_ui_verify.gd`, `item_drops_verify.gd`, and `gameplay_integration_verify.gd` cover the new contracts. Rendered Forward+ smoke checks exercised inventory, recipe crafting, chest transfers, furnace smelting, camera toggle, effects, death and respawn. Flat-world water generation now stays dry in full/LOD data, preventing spawn-time drowning (`worldgen_water_verify.gd`).
- [ ] Functional blocks — stairs, slabs, doors, ladders, signs, and block rotation so builds are not cube-only
- [ ] Sleeping and spawn points — a bed that skips the night through `DayNightCycle`, sets the respawn point, and is blocked while raining or threatened
- [x] Functional blocks — appended byte-safe voxel state IDs preserve four-way rotation without changing the region format; stairs, top/bottom slabs, paired two-block doors, wall ladders, freestanding signs, and low beds use shape-specific render/collision meshes. Placement derives rotation from player facing (and attachment face for ladders/slabs), doors toggle both persisted halves, ladders are pass-through and climbable, state variants drop/pick their canonical inventory item, and all six families have Survival recipes while hidden states stay out of the Creative catalog. Crafting tables, chests, furnaces, doors, ladders, signs, and beds now use a dedicated generated 64 px texture set under `assets/placeholders/functional/` instead of generic wood/stone faces. `tools/functional_blocks_verify.gd` pins state mapping, texture wiring, geometry/collision, recipes, and canonical drops
- [x] Sleeping and spawn points — interacting with a bed at night skips to `DayNightCycle.SUNRISE_HOUR`, stores a validated nearby safe respawn in the existing persisted player state, and flushes immediately. Daytime, rain/snow storms, and the world threat-query hook block sleep with HUD feedback; the hook defaults to no threats until the planned mob/entity system installs its nearby-hostile query. `tools/functional_blocks_verify.gd` covers clock and threat contracts
- [ ] Mobs and combat — passive and hostile creatures with light/biome/time spawning rules, pathfinding, and melee combat; no entity system exists beyond the player
- [x] Fly boost — holding Ctrl while flying multiplies fly speed and acceleration 5x (`player/player.gd` `FLY_BOOST_MULTIPLIER`); pause menu controls updated
- [x] Terrain-carving explosives — TNT (5-block radius) and nuke (18-block radius) are placeable hotbar blocks with generated placeholder textures; flint and steel is a tool-only item that right-click activates either block immediately. `VoxelWorld.carve_sphere()` persists every removed voxel while batching each affected chunk remesh once, preserves bedrock, and skips unloaded/LOD terrain. `tools/explosives_verify.tscn` covers activation, radii, persistence, sphere bounds, unbreakable blocks, and item signaling
Expand Down
12 changes: 12 additions & 0 deletions assets/placeholders/functional/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Functional block textures

These 64 px placeholder textures are generated specifically for RedotCraft by
`tools/gen_functional_textures.gd`. They distinguish crafting, storage,
furnaces, doors, ladders, signs, and beds from generic wood and stone while
remaining visually compatible with the existing voxel placeholder pack.

Regenerate from the repository root:

```sh
redot --headless --path . --script res://tools/gen_functional_textures.gd
```
Binary file added assets/placeholders/functional/bed_bottom.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions assets/placeholders/functional/bed_bottom.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://blr7mncu5uphm"
path="res://.godot/imported/bed_bottom.png-e636a2b00e916fa823fb1e838b6662d6.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/placeholders/functional/bed_bottom.png"
dest_files=["res://.godot/imported/bed_bottom.png-e636a2b00e916fa823fb1e838b6662d6.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added assets/placeholders/functional/bed_side.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions assets/placeholders/functional/bed_side.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://03qi4s456osd"
path="res://.godot/imported/bed_side.png-2f9605a279acbf0e04ffa1494b008619.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/placeholders/functional/bed_side.png"
dest_files=["res://.godot/imported/bed_side.png-2f9605a279acbf0e04ffa1494b008619.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added assets/placeholders/functional/bed_top.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions assets/placeholders/functional/bed_top.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://dlf2evqecsdb8"
path="res://.godot/imported/bed_top.png-0d5b24202ed13a9c041e5a7a6008f815.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/placeholders/functional/bed_top.png"
dest_files=["res://.godot/imported/bed_top.png-0d5b24202ed13a9c041e5a7a6008f815.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added assets/placeholders/functional/chest_bottom.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions assets/placeholders/functional/chest_bottom.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://bf2enltr4qfgy"
path="res://.godot/imported/chest_bottom.png-d0805795eed322ea8cf1ee565c157c49.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/placeholders/functional/chest_bottom.png"
dest_files=["res://.godot/imported/chest_bottom.png-d0805795eed322ea8cf1ee565c157c49.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added assets/placeholders/functional/chest_side.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions assets/placeholders/functional/chest_side.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://sk0tixpjhm5h"
path="res://.godot/imported/chest_side.png-7fe6681533c6f38bba230e4e448a6c03.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/placeholders/functional/chest_side.png"
dest_files=["res://.godot/imported/chest_side.png-7fe6681533c6f38bba230e4e448a6c03.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added assets/placeholders/functional/chest_top.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions assets/placeholders/functional/chest_top.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://t8vbry1ndhbh"
path="res://.godot/imported/chest_top.png-72000fbea43cce52fc3c68d744d9e5fa.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/placeholders/functional/chest_top.png"
dest_files=["res://.godot/imported/chest_top.png-72000fbea43cce52fc3c68d744d9e5fa.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added assets/placeholders/functional/crafting_bottom.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions assets/placeholders/functional/crafting_bottom.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://dfvlwrv8lb8f6"
path="res://.godot/imported/crafting_bottom.png-5214b5ee3c97a34bcb116a1b4acc4f5e.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/placeholders/functional/crafting_bottom.png"
dest_files=["res://.godot/imported/crafting_bottom.png-5214b5ee3c97a34bcb116a1b4acc4f5e.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added assets/placeholders/functional/crafting_side.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions assets/placeholders/functional/crafting_side.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://cmd8xfugav8i0"
path="res://.godot/imported/crafting_side.png-5e7831cf53a40a3ed12f9e913b40235f.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/placeholders/functional/crafting_side.png"
dest_files=["res://.godot/imported/crafting_side.png-5e7831cf53a40a3ed12f9e913b40235f.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added assets/placeholders/functional/crafting_top.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions assets/placeholders/functional/crafting_top.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://dj1784od2144x"
path="res://.godot/imported/crafting_top.png-378c242c540f52a75a70e9ff21ff6107.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/placeholders/functional/crafting_top.png"
dest_files=["res://.godot/imported/crafting_top.png-378c242c540f52a75a70e9ff21ff6107.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added assets/placeholders/functional/door_lower.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading