{"id":22510992,"url":"https://github.com/frankischilling/kernelcraft","last_synced_at":"2026-01-29T11:40:42.928Z","repository":{"id":263664386,"uuid":"891107133","full_name":"frankischilling/kernelcraft","owner":"frankischilling","description":"basic Minecraft clone using C and OpenGL","archived":false,"fork":false,"pushed_at":"2026-01-23T15:24:52.000Z","size":1364,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-24T02:32:30.418Z","etag":null,"topics":["c","opengl","voxel","voxel-engine","voxel-game"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/frankischilling.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-11-19T18:32:27.000Z","updated_at":"2026-01-13T16:54:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"92acc43f-3340-40aa-880f-68788ff5d21e","html_url":"https://github.com/frankischilling/kernelcraft","commit_stats":null,"previous_names":["frankischilling/kernelcraft"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/frankischilling/kernelcraft","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frankischilling%2Fkernelcraft","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frankischilling%2Fkernelcraft/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frankischilling%2Fkernelcraft/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frankischilling%2Fkernelcraft/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/frankischilling","download_url":"https://codeload.github.com/frankischilling/kernelcraft/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frankischilling%2Fkernelcraft/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28876772,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-29T10:31:27.438Z","status":"ssl_error","status_checked_at":"2026-01-29T10:31:01.017Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","opengl","voxel","voxel-engine","voxel-game"],"created_at":"2024-12-07T02:07:40.853Z","updated_at":"2026-01-29T11:40:42.912Z","avatar_url":"https://github.com/frankischilling.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kernelcraft\n\n![Screenshot](./img/game.png)\n\nScreenshot of version v0.0.2\n\n\n![Screenshot](./img/textures.png)\n\nScreenshot of version v0.0.4\n\n## Project Philosophy\n\nkernelcraft aims to create a basic Minecraft clone using C and OpenGL. The primary focus is on understanding the fundamentals of 3D graphics programming and game development. By building a simple voxel-based game, we explore concepts such as rendering, world generation, and user interaction. The project is designed to be a learning tool, emphasizing clean code, modular design, and efficient use of resources. In the future I plan on adding features and designs that are more similar to CubeWorld.\n\n## Libraries Used\n\n- **OpenGL**: A cross-platform graphics API used for rendering 2D and 3D vector graphics.\n- **GLFW**: A library for creating windows, receiving input, and handling events. It simplifies the process of setting up an OpenGL context.\n- **GLEW**: The OpenGL Extension Wrangler Library, which helps in managing OpenGL extensions.\n- **GLUT**: The OpenGL Utility Toolkit, used for rendering text and other utilities.\n- **stb_image**: A single-file public domain library for loading images in various formats.\n\n## Project Structure\n\n- **src/**: Contains the source code for the project.\n  - **main.c**: The entry point of the application. It initializes the OpenGL context and handles the main rendering loop.\n  - **assets/**: Contains assets like shaders and textures.\n  - **graphics/**: Contains rendering-related code.\n    - **cube.c**: Handles the creation and rendering of cube objects.\n    - **camera.c**: Manages camera movement and orientation.\n    - **hud.c**: Provides a basic hud and debug management system.\n    - **shader.c**: Handles shader loading and compilation.\n    - **frustum.c**: Implements frustum culling for optimization.\n    - **texture.c**: Implements texture loading and binding.\n  - **math/**: Contains mathematical operations and utilities.\n    - **math.c**: Implements vector and matrix operations, as well as Perlin noise generation.\n  - **world/**: Contains world generation and management code.\n    - **world.c**: Manages world generation and updates, including biome interpolation and terrain height calculation.\n  - **utils/**: Contains utility functions and input handling.\n    - **inputs.c**: Handles keyboard and mouse input processing.\n    - **text.c**: Utility functions for rendering text.\n    - **raycast.c**: Simple raycasting utility.\n\n## Features\n\n- **Rendering**:\n  - Basic rendering of cubes with lighting effects using shaders.\n  - Frustum culling for optimization.\n  - Dynamic text rendering for displaying FPS and biome information.\n\n- **World Generation**:\n  - Procedural terrain generation using Perlin noise.\n  - Biome interpolation for varied terrain features.\n  - Basic block types: air, grass, dirt, and stone.\n\n- **User Interaction**:\n  - Camera controls for navigation.\n  - Mouse input for looking around.\n\n## Getting Started\n\n### Install Dependencies\n\nEnsure you have OpenGL, GLFW, GLEW, and GLUT installed on your Linux system. Here are the installation instructions for Arch Linux:\n\n- **Arch Linux**:\n  ```bash\n  sudo pacman -S glfw-wayland glew freeglut\n  ```\n  or if you are using X11:\n  ```bash\n  sudo pacman -S glfw-x11 glew freeglut\n  ```\n\n  ## Set the XDG_RUNTIME_DIR environment variable\n\n  ```bash\n  echo 'export XDG_RUNTIME_DIR=/run/user/$(id -u)' \u003e\u003e ~/.bashrc\n  ```\n\n### Build the Project\n\nUse the provided `Makefile` to compile the source files. Run `make` in the project root directory.\n\n### Run the Application\n\nExecute the compiled binary to start the game.\n\n### Stuck??\n\nUse the ESC key to be able to use the cursor again.\n\n## Roadmap\n\n### Phase 1: Core Engine Development\n- **Basic Rendering**:\n  - [x] Set up OpenGL context and render a simple cube\n  - [x] Implement a basic camera system for navigation\n  - [x] Basic render distance\n  - [x] Implement frustum culling for basic optimization\n  - [x] Implement occlusion culling for better optimization **MAIN FOCUS**\n  - [x] Implement chunk-based rendering system\n  - [x] Add basic shaders for lighting and shadows\n  - [ ] Implement basic post-processing effects\n  - [x] Add support for different render modes (wireframe, solid)\n  - [ ] Create debug visualization tools\n    - [ ] FPS, ticks, visible faces, visble cubes, how many are rendered out of total\n  - [ ] Optimize render batching and draw calls\n\n- **World Generation**:\n  - [x] Create a flat terrain using cubes\n  - [x] Implement basic Perlin noise for height variation\n    - [x] Increased world size to 256x256\n    - [x] Enhanced terrain with more octaves and adjusted noise parameters\n  - [x] Basic sine wave for height variation\n  - [x] Add support for different cube types (dirt, stone, grass, etc.)\n    - [x] Before textures, use different colors to represent different blocks\n  - [x] Add multiple layers (dirt, stone, bedrock)\n  - [x] Implement basic biome system **(To be enhanced with a more detailed biome system)**\n  - [ ] Randomly generated worlds with different seeds\n  - [ ] Add cave generation using 3D noise\n  - [ ] Add trees\n  - [ ] Create water system with basic fluid physics\n  - [ ] Expand world size **(Planned for later phases)**\n\n- **User Interaction**:\n  - [x] Implement basic controls for player movement\n  - [x] Add mouse controls for looking around\n  - [ ] Add block placement and destruction\n  - [ ] Implement collision detection\n  - [ ] Add player physics (gravity, jumping)\n  - [ ] Create raycast system for block selection\n\n### Phase 2: Graphics and Performance\n- **Graphics Enhancements**:\n  - [x] Implement texture mapping and UV coordinates\n    - [x] Fix grass texture mapping using the grass top for the top, and sides.\n  - [wip] Implement texture atlas system\n    - [x] Create atlas image from textures using a Python script.\n    - [ ] Integrate texture atlas into rendering pipeline\n  - [ ] Add support for transparency and alpha blending\n  - [ ] Add support for skyboxes and clouds \n  - [ ] Add advanced lighting systems (ambient occlusion, dynamic shadows)\n  - [ ] Add day/night cycle\n    - [ ] Within the system implement tick based time\n  - [ ] Create particle system for effects\n  - [ ] Implement weather effects (rain, snow)\n  - [ ] Create water shader with reflections and refractions\n  - [ ] Add support for different camera modes (first person, third person)\n  - [ ] Add support for CRT screen effects, curvature, scanlines, chromatic aberration, and vignette\n\n- **Optimization**:\n  - [ ] Implement voxel-like meshes using OpenGL meshes\n  - [ ] Implement greedy meshing for chunk rendering to reduce draw calls\n  - [ ] Add level of detail (LOD) system for distant chunks\n  - [ ] Optimize memory usage for chunk storage\n  - [ ] Implement multithreaded chunk generation for smoother performance\n  - [ ] Add chunk compression to reduce memory footprint\n  - [ ] Create efficient chunk serialization and deserialization system\n\n### Phase 3: Gameplay Features\n- **World Interaction**:\n  - [ ] Add inventory system\n  - [ ] Implement crafting system\n  - [ ] Create a basic UI system for inventory and crafting\n  - [ ] Add health and hunger mechanics\n  - [ ] Implement tool durability\n  - [ ] Add block metadata system for more complex interactions\n\n- **Entity System**:\n  - [ ] Create a basic entity framework for mobs and animals\n  - [ ] Add passive mobs (e.g., animals)\n  - [ ] Implement hostile mobs\n  - [ ] Add pathfinding system for mob navigation\n  - [ ] Create AI behavior system for entities\n  - [ ] Implement mob spawning mechanics based on biomes and environment\n\n### Phase 4: Advanced Features\n- **Multiplayer**:\n  - [ ] Implement basic networking architecture\n  - [ ] Add client-server communication protocols\n  - [ ] Create player synchronization for multiplayer experiences\n  - [ ] Implement chunk synchronization across clients\n  - [ ] Add a basic chat system for player communication\n  - [ ] Create player authentication and session management\n\n- **World Management**:\n  - [ ] Add world saving and loading functionality\n  - [ ] Implement seed-based world generation for reproducible worlds\n  - [ ] Create a world backup and recovery system\n  - [ ] Add world settings and configuration options for customization\n  - [ ] Implement a world border system to limit exploration\n\n- **Modding Support**:\n  - [ ] Create a basic mod API to allow community extensions\n  - [ ] Implement a resource pack system for custom textures and sounds\n  - [ ] Add scripting support for dynamic content creation\n  - [ ] Create a mod loading and management system\n  - [ ] Add a configuration API for mod settings and options\n\n### Phase 5: Polish and Extra Features\n- **Audio System**:\n  - [ ] Implement a basic sound engine for ambient sounds and effects\n  - [ ] Add ambient sounds corresponding to different biomes and environments\n  - [ ] Create a music system for background tracks\n  - [ ] Add positional audio for immersive experiences\n  - [ ] Implement sound effects for player actions and environmental interactions\n\n- **Visual Effects**:\n  - [ ] Add screen effects such as damage flashes and underwater visuals\n  - [ ] Implement block breaking and placement animations\n  - [ ] Create item pickup and drop animations\n  - [ ] Add status effect visuals for player buffs and debuffs\n  - [ ] Implement environmental effects like fog and dynamic lighting\n\n- **Quality of Life**:\n  - [ ] Add a key binding system for customizable controls\n  - [ ] Create a settings menu for graphics, audio, and control configurations\n  - [ ] Implement performance options to cater to different hardware capabilities\n  - [ ] Add accessibility features such as colorblind modes and adjustable UI sizes\n  - [ ] Create a tutorial system to guide new players through the game mechanics\n\n- **Miscellaneous**:\n  - [ ] Add a comprehensive logging system for debugging and analytics\n  - [ ] Create detailed documentation for developers and users\n  - [ ] Add unique mobs like Fire Bugs with special abilities\n  - [ ] Introduce special characters like Tony Chase as unique mobs\n    - [ ] Implement special funny Tony sounds when he gets hit or dies\n  - [ ] Add additional mobs such as Goblins with distinct behaviors\n  - [ ] Introduce unique blocks like the Cupid Sponge for special interactions\n\n### Phase 6: Testing and Deployment\n- **Testing**:\n  - [ ] Conduct thorough playtesting to identify and fix bugs\n  - [ ] Implement automated testing for critical game systems\n  - [ ] Optimize performance across different hardware configurations\n  - [ ] Gather user feedback to guide further development\n\n- **Deployment**:\n  - [ ] Prepare installation packages for various operating systems\n  - [ ] Set up distribution channels for the game\n  - [ ] Implement update mechanisms for seamless patching\n  - [ ] Launch the game and monitor for post-release issues\n\n## License\n\nThis project is licensed under the GNU General Public License v3.0. See the LICENSE file for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrankischilling%2Fkernelcraft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrankischilling%2Fkernelcraft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrankischilling%2Fkernelcraft/lists"}