All Projects → daveruiz → Doom Nano

daveruiz / Doom Nano

A 3d raycast engine for Arduino

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Doom Nano

Mundus
A 3D world/level editor built with Java, Kotlin & libGDX.
Stars: ✭ 164 (+90.7%)
Mutual labels:  game, engine, 3d
Geotic
Entity Component System library for javascript
Stars: ✭ 97 (+12.79%)
Mutual labels:  game, engine, performance
Gamedev Resources
🎮 🎲 A wonderful list of Game Development resources.
Stars: ✭ 2,054 (+2288.37%)
Mutual labels:  game, engine, 3d
Vu
Virtual Universe 3D Engine
Stars: ✭ 183 (+112.79%)
Mutual labels:  game, engine, 3d
Vulkust
An engine for Vulkan in Rust, tries to implement modern graphic features. (suspended for now)
Stars: ✭ 64 (-25.58%)
Mutual labels:  game, engine, 3d
Vue Babylonjs
A ready-to-go 3d environment for Vue.js using Babylon.js
Stars: ✭ 356 (+313.95%)
Mutual labels:  game, engine, 3d
Engine
A basic cross-platform 3D game engine
Stars: ✭ 208 (+141.86%)
Mutual labels:  game, engine, 3d
Exengine
A C99 3D game engine
Stars: ✭ 391 (+354.65%)
Mutual labels:  game, engine, 3d
Korge
KorGE Game Engine. Multiplatform Kotlin Game Engine
Stars: ✭ 780 (+806.98%)
Mutual labels:  game, engine
Veloren
[Mirror] An open world, open source voxel RPG inspired by Dwarf Fortress and Cube World
Stars: ✭ 868 (+909.3%)
Mutual labels:  game, 3d
Glumpy
Python+Numpy+OpenGL: fast, scalable and beautiful scientific visualization
Stars: ✭ 882 (+925.58%)
Mutual labels:  game, engine
Coffee
An opinionated 2D game engine for Rust
Stars: ✭ 771 (+796.51%)
Mutual labels:  game, engine
Etherealengine
C++ Game Engine and Editor
Stars: ✭ 653 (+659.3%)
Mutual labels:  game, engine
Buttons And Boxes
A Sokoban-esque puzzle game developed in unity 3D in 2016
Stars: ✭ 17 (-80.23%)
Mutual labels:  game, 3d
Entitas Csharp
Entitas is a super fast Entity Component System (ECS) Framework specifically made for C# and Unity
Stars: ✭ 5,393 (+6170.93%)
Mutual labels:  game, performance
Pioneer
A game of lonely space adventure
Stars: ✭ 979 (+1038.37%)
Mutual labels:  game, 3d
Clash Royale Clone
A Unity clone of Supercell's Clash of Clans spin-off mobile game Clash Royale with possibly some twists.
Stars: ✭ 43 (-50%)
Mutual labels:  game, 3d
Renderhelp
⚡️ 可编程渲染管线实现,帮助初学者学习渲染
Stars: ✭ 494 (+474.42%)
Mutual labels:  engine, 3d
Teleball
Build your own Arduino based retro handheld game console
Stars: ✭ 21 (-75.58%)
Mutual labels:  game, arduino
Opentomb
An open-source Tomb Raider 1-5 engine remake
Stars: ✭ 1,035 (+1103.49%)
Mutual labels:  game, engine

doom-nano

A 3d raycast engine for Arduino

See it in action:

Just experimenting with an Arduino Nano I bought some time ago. This chip is very limited in process and memory: 16Mhz, only 32kb for program memory and 2kb of RAM, of which 1kb is entirely used for the screen. Most of problems I´m facing currently are about memory. CPU clock might be a problem too, but can be more or less avoided having more memory for calculation shortcuts. Despite of all those limitations it´s capable to run at up to 14 FPS. Probably can be optimized and structured much better. Will try to keep learning and improve it.

To be clear. This is not an actual Doom game, just picked some sprites from it (and simplified a lot). The rendering engine is more like a Wolfeistein 3D. The Doom idea came because I started this building the fancy melt-screen effect (included in an early version, but not anymore).

Hardware I used:

  • A protoboard
  • An Arduino nano V3 (ATmega328P)
  • An OLED Display (i2c 128x64)
  • 4 buttons
  • 4 10k ohms resistors (Optional. You can use internal pull-up resistor by uncommenting the #define USE_INPUT_PULLUPS from constants.h file)

Resources:

Current status:

  • The map rendering is working nicely. Even I was able to add a depth effect by using different dithering patterns, depending on the distance to the view.
  • Sprites are working too, though has some issues hiding them behind walls because memory limitations (the z-buffer precision has been limited a lot to make it smaller).
  • You can move through the map, collide with walls, collect items and interact with enemies. I could also add the jogging effect, like Doom´s one.
  • The enemies AI, despite is very simple, I think works very well and it´s enough for the purpose of the game. Looks very similar to Imp enemy from original Doom.
  • For the HUD, I realized that the native print from Adafruit's library uses too much memory. So I've implemented my custom text rendering methods and a custom font which includes only needed characters and some icons.
  • Currently I´m using 99% of program memory, which doesn´t let me adds more code. I need to research how to optimize it to make it smaller.
  • FPS and memory consumption has been improved using a slim and customized version of the SSD1306 lib from Adafruit. Thanks @miracoly
  • Now it has a basic sound support through Pin 9. Thanks again @miracoly!

(I'd like) To do:

  • Make possible kill enemies.
  • Doors and locked doors.
  • A game over screen.
  • Add more sprites, decorative elements, etc.
  • Textures? Very performance expensive. I don't think so.
  • Make code looks nicer! Move all to pure c++.
  • Sound/Music? Hmmm I wish so, but...

More screens (outdated):

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].