NDS Engine

[ Downloads | DevTools | Custom devtools | Changelog/Screenshots | Thanks ]

I'm currently working on a simple 3D engine for the Nintendo DS writen in C++ using DevkitPro and libnds.

This project goal is to write an all-around game engine.  The game chosen to develop is a simple 3D snowboard game.

 

Download

 

1 run on a real NDS and no$gba
2
Picking only work on a real NDS
3 Require dldi support(dldi patch) to work on a NDS

 

Dev Tools

This is a list of software used to develop the engine.

Cross-Compiler and tools:

Librarys:

Developpement Environment:

Content creation:

 

Custom dev tools

In the process to make this project I started building tools to "bake" the resources to minimize the loading at run-time and produce better textures.

  • Gimp plugin that add new "save as" target for each type spported :
    • Save image to NDS A3I5 (palletted, 8bit: 3bit alpha and 5bit index)
    • Save image to NDS A5I3 (palletted, 8bit: 5bit alpha and 3bit index)
    • Save image to NDS RGB16  (palletted, 4bit index - 16 colors)
    • Save image to NDS RGB256  (palletted, 8bit index - 256 colors)
    • Save image to NDS RGB  (raw 15bit)
    • Save image to NDS RGBA  (raw 15bit + 1bit alpha)

 

Changelog

Version 0.03.1 (13 mars 2009):

  • Added a message management system to make communication between systems easier
  • Added code to make buttons work. Both with touch and D-Pad/A (using a technique a bit like GUI "tab order")
  • Created nice transitions between the main menu and the credits page
  • Created 3D models for a tree and a basic snowboarder
    (warning: low-poly programmer art!)

models

Version 0.03 (5 mars 2009):

  • Added interpolators for better scene animation management
  • Fixed texture transparency bug
  • Created graphics for the game and a basic menu animation
  • Added support for all texture types exported from my gimp plugin (A3I5, A5I3, RGB16, RGB256, RGB, RGBA), this saves a lot of texture's video memory !
  • TODO:
    • make better font for buttons...
    • create hookup method for the buttons

v0.3

Version 0.02f (13 feb 2009):

  • Added UI component (button with text)
  • Changed texture loading method to use an embedded fs (NitroFS) instead of compiling the resources in the rom.
  • Added support for A3I5 texture format, but more work on the alpha need to be done...

Version 0.02e:

  •  Added picking on the bottom 3D screen.
    • Picking use a technique of second rendering (only drawing pickable objects) with a smaller viewport (4x4) around the clicked area.
  • Added a new texture memory manager as the one in libnds does not permit removing a single texture (based on libnitro's code, but there is still a lot of work to be done)
  • Started a UI system using 3D sub-system ( text on button is coming on the next iteration :D )

UI v0.02e, very basic :)

Picking example (with a cellular camera, sorry for the bad picture :D ):

Picking!

Version 0.02d:

  • Dual-3D mode, now both screens can be used to display a 3D scene

Dual 3D

Version 0.02c:

  • Added a splashcreen
  • Refactoring:
    • Extraction of the DS GL render to make it modular
    • Extraction the scene management so we now can change the current scene
  • Changed texture management so that a size can be specified to have different texture size depending on the need, this saved a LOT of video memory (it's extremely limited on the DS...)
  • Better video memory managing (vbank assignments)

Weirdfox splashscreen to the engine

Version 0.02b:

  • Textures on mesh now works :)

The engine now supports textures

Version 0.02a:

  • the engine use a simple scenegraph
  • support for basic sounds and music based on the maxmod library
  • Can use mesh exported from Blender

Scenegraph

 

Thanks

Thanks to the DevkitPro team and community for the help and tools: