Nitro Engine

From GameBrew
Nitro Engine
Nitroengine.png
General
AuthorAntonioND
TypeGame engine
Version0.11.0
LicenseMixed
Last Updated2024/03/02
Links
Download
Website
Source

Nitro Engine is a 3D engine for DS. The objective of this is to make 3D more easily than using libnds normal funcions. It uses libnds and you can load models and textures from FAT (or EFS, or NitroFS).

Nitro Engine doesn't support any of the 2D hardware of the DS. In order to use the 2D hardware you can use libnds directly, or you can use a library like NFlib. There is an example of how to integrate Nitro Engine and NFlib in the same project here.

A setup guide can be found on the GitHub page.

Features

  • Support for static models, converted from OBJ files.
  • Support for animated models, thanks to the DSMA library, which converts MD5 models (with skeletal animation) into a format that can be rendered with hardware acceleration. It can also blend two animations together (for transitions).
  • Support for all format of textures (even compressed textures, but the converter included in this repository doesn't support them yet).
  • Dual 3D (render 3D to both screens, but at 30 FPS instead of 60 FPS).
  • Functions to render 2D images accelerated by 3D hardware.
  • Basic text system.
  • Basic GUI elements like buttons and scrollbars.
  • Basic physic system: Axis-aligned bounding boxes (AABB) only.

Screenshots

nitroengine2.pngnitroengine3.png

Example screenshots.

Compatibility

Some effects does not work in emulators.

Changelog

0.11.0 2024/03/02

  • Added a rich text system. This allows the user to draw non-monospaced text, and it's based on BMFont. An example has been added to show how to use it to render text. It can render
  • text by using one quad per character, or by rendering to a texture which is then drawn as a single quad.
  • Fix "properties" typo. This involves renaming some functions, but compatibilty definitions have been added.
  • Update calls to GRF libnds functions after their prototypes have changed.
  • Cleanup setup of dual 3D modes that involve setting up 2D sprites to be used as a framebuffer.
  • Now the size of a sprite is set to the size of the material it is assigned. It can be modified later as usual.

0.10.0 2024/01/28

  • Create variants of NE_Process() and NE_ProcessDual() that can pass an argument to the screen draw callbacks.
  • Add function to load textures in GRF format (BlocksDS only).
  • Add functions to load compressed textures (Texel 4x4 format).
  • Add examples to load assets from the filesystem, both in binary and GRF function.
  • Cleanup code style: Use stdint types, turn some functions static inline...
  • Remove unneeded call to DC_FlushAll().
  • obj2dl: Improve error message. Fix vertical coordinates being flipped.
  • img2ds: Deprecate it except for generating DEPTHBMP binaries.
  • The makefile for BlocksDS now installs the tools to /opt/blockds/external, not only the library and headers.
  • Migrate all examples to using grit instead of img2ds.

0.9.1 2023/11/12

  • Update Makefiles to build on BlocksDS.
  • Fix functions used to load assets from FAT.

0.9.0 2023/10/19

  • Introduce two new dual 3D modes. They are resilient and they will always show the same output on both screens even if the framerate drops. This isn't the case with the previous dual 3D mode.
  • Fix 2D projection used to display 3D sprites. The Y coordinate didn't work correctly for numbers close to 192. This means that an ugly hack to apply an offset to the texture coordinates of 2D polygons is no longer needed.
  • Fix initialization of the library. Sometimes, depending on the loader, the game would start in a different time in the screen rendering cycle. This would swap the images of the screens until the framerate dropped when loading assets, for example.
  • The code that switches between screens in dual 3D mode has been more reliable. Nitro Engine now swaps screens after they are actually drawn, not in the vertical blanking interrupt handler, when it switched every frame even if no new frame had been drawn by the game.
  • Switch a lot of assert() in the library into permanent runtime checks. Several functions now return error codes instead of not returning any value.
  • Use safe DMA copy functions if the libnds of the toolchain provides them (they are only available in BlocksDS at the moment).
  • The library now supports sending display lists to the GPU in different ways to work around a hardware bug in the ARM9 DMA when it is set to GFX FIFO mode.
  • Fix debug build of the library.
  • Fix build of the NFlib template with devkitPro libraries.
  • Update examples and add some more, particularly about comparisons between dual 3D modes.

0.8.2 2023/04/21

  • Decouple mesh objects from model objects. This simplifies cloning models.
  • Previously it was needed to preserve the original object as long as you wanted to use the clones. Now, it can be deleted and Nitro Engine won't free the mesh until all clones have been deleted.
  • Support vertex color commands in obj2dl. This can't be used at the same time as normals.
  • Improve examples. A script has been added to convert all assets used by the examples. Also, the NFlib example has been updated to work with upstream NFlib.
  • Support BlocksDS.
  • A few minor fixes.

0.8.1 2022/11/10

  • Add support for compressed textures.
  • Add example that combines NFlib and Nitro Engine to have good 2D hardware support.
  • Support specular properties in materials.
  • Add a few enums to help editor autocompletion features.
  • Rename a few functions and deprecate the old names (the old names still work).

0.8.0 2022/10/21

Models and textures:

  • Add support for MD5 animated models (thanks to https://github.com/AntonioND/dsma-library): Introduce tool md5_to_dsma to convert them to a format that Nitro Engine can use.
  • Add support for OBJ static models: Introduce tool obj2dl to convert them to a format that Nitro Engine can use.
  • Introduce tool img2ds to convert images in many popular formats (PNG, JPG, BMP, etc) to DS textures (PNG is still recommended over other formats, as it supports alpha better than other formats).
  • Drop support for MD2 models (static or animated).
  • Remove NDS Model Exporter, Nitro Texture Converter, md2_to_bin and md2_to_nea. The animation system has been refactored (but NEA files don't work anymore, so you need to update your code anyway).

General:

  • Huge cleanup of code style of the codebase.
  • Cleanup of all examples. Add the original assets and textures used in all examples to the repository, along scripts to convert them to the formats used by Nitro Engine.
  • Implement a better way to have debug and release builds of the library.

Notes:

  • You can still use textures converted with Nitro Texture Converter or NDS Model Exporter, and you can still use any model exported with NDS Model Exporter or md2_to_bin. However, support for NEA files has been removed (it had awful performance, and it was just a bad way to do things), so any file converted by md2_to_nea won't work anymore.
  • The reason to replace most tools is that several people had issues building them. All the new tools are written in Python, so they don't need to be compiled.

0.7.0 2019/06/14

  • Major cleanup of code.
  • Clarify license.
  • Reworked tools to build under Linux and Windows.

0.6.1 2011/09/01

  • Fixed identation in all code. Now it isn't a pain to read it.
  • A few warnings fixed (related to libnds new versions).

0.6.0 2009/06/30

  • The functions used to modify textures and palettes now return a pointer to the data so that you can modify them easily.
  • Each material can have different propierties (amient, diffuse...). You can set the default ones, the propierties each new material will have, and then you can set each material's propierties individually.
  • New texture and palette allocation system, it is faster and better. * Defragmenting functions don't work now, will fix them for the next version.
  • Added a debug system. You can compile Nitro Engine in "debug mode" and it will send error messages to the function you want. Once you have finished debugging or whatever, just recompile Nitro Engine without debug mode.
  • Window system renamed to Sprite system. You can set a rotation and a scale for each one.
  • The most important thing, the animation system has been improved, and now animated models are drawn using linear interpolation (you can disable it, anyway).
  • As a result, the converters are modified, so you'll have to convert yout animated models again.

0.5.1 2009/01/28

  • Minor bugfixes.

0.5.0 2009/01/05

  • Text system and camera system optimized. New functions for the camera system.
  • NE_TextPrintBox and NE_TextPrintBoxFree slightly changed. They can limit the text drawn to a number of characters set by the coder.
  • Some functions made internal. Don't use them unless you know what you are doing.
  • Fixed (?) at least the 2D projection.
  • HBL effects fixed.
  • Touch test functions.
  • NE_UPDATE_INPUT removed.
  • It now supports any BMP size, and BMP with 4 bits of depth.
  • Arrays made pointers, so there is more memory free when you are not using Nitro Engine. You can also configure the number of objects of each systems you are going to use.
  • NE_TextPalette replaced by NE_Palette.
  • You can clone materials to use the same texture with different colors. This doesn't have the problems of cloning models.
  • Added functions to remove all palettes and textures.
  • Fixed NE_End().
  • NE can free all memory used by it, and the coder can tell NE how much memory to use.
  • Texture drawing system improved a bit.
  • NE_PolyFormat simplified.
  • Some bugfixes, code reorganized, define lists converted into enums.
  • Clear bitmap supported, this is used to display an bitmap as rear plane. Each pixel can have different depth. This needs 2 VRAM banks to work.
  • Solved some problems with 2D system and culling.
  • Nomad NDS_Texture_Converter is no longer included, if you want it, look for it in google.
  • Made and added Nitro Texture Converter. Open source, and it exports various levels of alpha in the textures that can handle it. It does only accept PNG files.
  • NE now accepts any texture size. NE_SIZE_XXX defines removed as they are not needed now.
  • Added a couple of examples.

0.4.2 2008/12/14

  • Fixed 2D system (textures were displaying wrong on 2D quads) and text system (paletted textures sometimes were drawn without palette).
  • Compiled MD2_2_NEA, MD2_2_BIN and bin2nea to work in linux. Thanks to nintendork32.
  • Added a couple of examples.

0.4.1 2008/12/12

  • LOTS OF BUGFIXES. Specially, UV coordinates swapping fixed.
  • Added a function to draw on RGBA textures.
  • Fixed MD2_2_NEA and MD2_2_BIN. You'll have to convert again your models.
  • Updated to work with latest libnds. There is a define in case you want to use an older version.

0.4.0 2008/10/15

  • Added MD2_2_NEA <converts an MD2 model into a NEA file that can used by Nitro Engine> and MD2_2_BIN <Converts the first frame of an MD2 model into a display list>. Display lists created are really optimized.
  • Updated DisplayList_Fixer. Now it can remove normal commands too.
  • Added a text system. It can use fonts of any size.
  • Added some simple API functions (buttons, check boxes, radio buttons and slide bars).
  • Fixed 2D projection.
  • Removed some internal unused functions to save space, and made 'inline' some of the rest.
  • Functions that used float parameters modified so they use integers now. You can still use some wrappers if you want to use floats. This will let the compiler try to optimize the code.
  • Animated and static models are now the same. You can move, rotate, etc them with the same functions.
  • Now, you can 'clone' models so you can save a lot of RAM if they are repeated.
  • Renamed lots of model functions. Take a look at new examples or documentation.
  • NE_Color struct removed (don't even know why it is created).
  • Examples updated to work with last version and added examples of clonning models, API and text system.
  • libnds' console is not inited with Nitro Engine. You will have to init it yourself with NE_InitConsole or libnds' functions.

0.3.0 2008/09/16

  • Support for animated models (NEA format) and a program to make a new NEA file from many models (in bin format).
  • 2D over 3D system. You can draw easily quads (with or without texture) as if they were drawn using 2D.
  • Basic physics engine (gravity, friction and collitions). It does only support bounding boxes for now.
  • Added a function to delete all models, animated or not.
  • Window system, very simple. Will make some API functions in next versions.
  • Nitro Engine compiled as a library to include it easier in projects and save space.
  • Examples folder organized a bit and added some new examples.
  • Nitro Engine is now licensed under the BSD license.

0.2.0 2008/08/31

  • Added effects like fog and shading, functions to load bmp files and convert them in textures and more examples.

0.1 2008/08/24

  • Released first version of Nitro Engine
  • Includes 2 examples, documentation, tools to export models from the PC, the license and full source.

Credits

  • Joat, Dovoto and WinterMute for libnds.
  • WinterMute for devkitPro and devkitARM.
  • Chishm for libfat and DLDI.
  • The guys of gbadev for the help.
  • Martin for No$gba and gbatek.
  • Kasikiare for NDSModelExporter.
  • PadrinatoR for NDS_Mesh_Converter.
  • Ti-Ra-Nog for testing the engine.
  • Judelco for the big logo.
  • Serede for the small logo.

External links

Advertising: