/TWiLightMenu

DSi Menu replacement for DS/DSi/3DS/2DS

Primary LanguageC++GNU General Public License v3.0GPL-3.0


GBAtemp Thread Discord Server Build status on GitHub Actions Localized on Crowdin

TWiLight Menu++ is an open-source DSi Menu upgrade/replacement for the Nintendo DSi, the Nintendo 3DS, and Nintendo DS flashcards. It can launch Nintendo DS(i), SNES, NES, GameBoy (Color), GameBoy Advance, Sega GameGear/Master System, SG-1000/SC-3000 & Mega Drive/Genesis, Atari 2600/5200/7800/XEGS, MSX, Intellivision, Neo Geo Pocket, Sord M5, PC Engine/TurboGrafx-16, WonderSwan, and ColecoVision ROMs, as well as DSTWO plugins (if you use a DSTWO).

Compiling

Setting up

Compiling this app requires devkitPro's devkitARM, libnds, grit, and mmutil. These can be installed using devkitPro pacman with the following command:

sudo dkp-pacman -S nds-dev

(Note: Command will vary by OS, sudo may not be needed and it may be just pacman instead.)

Cloning

The repository contains submodules, so you need to clone recursively:

git clone --recursive https://github.com/DS-Homebrew/TWiLightMenu.git

If you cloned without pulling the submodules, you may update them afterwards:

git submodule update --init --recursive

Building

Once you have devkitPro's toolchains installed you can build the entirety of TWiLight Menu++ by simply running make package in the root of the repository. If you only want to build a specific part of TWiLight Menu++ you can cd to that folder and run make dist.

Once it finishes building, the output files will be in the 7zfile folder following the same directory structure as the official TWiLightMenu.7z builds.

Using Docker

Using the included Docker image, you can easily compile TWiLight Menu++ without having to manually set up the required version of devkitARM using the provided PowerShell (.ps1) scripts.

The script accepts make arguments as well. For example, .\compile_docker.ps1 clean will clean the directories of all the compiled code. If you would like to build all artifacts, run .\compile_docker.ps1 package.

Please note that Docker compilation is not compatible with native compilation on Windows. You should run .\compile_docker.ps1 clean to clean the artifacts before attempting to build with Docker. If a notification appears asking you to share your drive, you must choose to enable drive sharing for Docker to work on Windows.

Manual Pages

The manual pages are stored in a separate repository and downloaded from a release when building TWiLight Menu++. For more information, see the twilight-manual repository.

Subfolders

TWiLight Menu++ is composed of multiple "sub-projects" which all work together to create the DSi Menu replacement. Most subfolders in the repository contain their own code which will compile a xxx.nds file, which is generally copied to /_nds/TWiLightMenu/xxx.srldr inside the 7z file (or 7zfile folder).

  • 3dssplash: opens 3ds and cia files (?)
    • Compiled to /_nds/TWiLightMenu/3dssplash.srldr
  • booter: main entrypoint, the first file loaded by the console if using SD-card or CFW
    • Creates /BOOT.nds and /title/00030004/53524c41/content/00000000.app (same file).
  • booter_fc: main entrypoint for flashcards
    • Creates _DS_MENU.dat, dsedgei.dat, akmenu4.nds, _DSMENU.nds, SCFW.SC and others.
  • gbapatcher
  • imageview: image viewer similar to DSi camera (gif, png, bmp)
    • /_nds/TWiLightMenu/imageview.srldr
  • manual: instruction manual for TWiLight Menu++
    • Creates /_nds/TWiLightMenu/manual.srldr
  • quickmenu: DS Lite menu, the old classic ui
    • Creates /_nds/TWiLightMenu/mainmenu.srldr
  • resources: merges the antipiracy and widescreen patches into a package file
    • /_nds/TWiLightMenu/extras/apfix.pck and /_nds/TWiLightMenu/extras/widescreen.pck
  • romsel_aktheme: menu for the Wood UI theme
    • Creates /_nds/TWiLightMenu/akmenu.srldr
  • romsel_dsimenutheme: menu for the DSi theme used by "Nintendo DSi", "Nintendo 3DS", "SEGA Saturn", and "Homebrew Launcher"
    • Creates /_nds/TWiLightMenu/dsimenu.srldr
  • romsel_r4theme: menu for the R4 theme used by "R4 Original" and "Gameboy Color"
    • Creates /_nds/TWiLightMenu/r4menu.srldr
  • settings: settings menu
    • Creates /_nds/TWiLightMenu/settings.srldr
  • slot1launch:
    • Creates /_nds/TWiLightMenu/slot1launch.srldr
  • title: boot splash screen (Nintendo logo by default)
    • Creates /_nds/TWiLightMenu/main.srldr

Translating

You can help translate TWiLight Menu++ on the Crowdin project. If you'd like to request a new language be added then please ask on the Discord server.

Credits

Main Developers

  • Rocket Robz: Lead Developer
  • chyyran: Porting the akMenu/Wood UI to TWiLight Menu++ & adding the ability to load sub-themes off the SD card for DSi/3DS themes
  • Pk11: Adding the ability to load skins off the SD card for the R4 theme, implemented sorting & made manuals use PNG, improved font rendering, providing a custom background for Unlaunch, managing translations, and various bug fixes

Secondary Developers

  • DieGo: Adding support for custom ROM/folder icons and improvements for custom skins
  • lifehackerhansol: Improving support for flashcard autobooting and kernel loading
  • NightScript: Code cleanup, defining code standards, added flashcard functionality for Wood UI theme, manual pages

App Launchers

Graphics & Themes

Music

  • BlastoiseVeteran: Remastered version of Nintendo DSi Shop music
  • IkaMusumeYiyaRoxie: General N64 MIDI Soundfont, used for the title splash fanfare on old versions

Sound

  • dbry: Xtreme Quality IMA-ADPCM decoder code from adpcm-xq.
  • Firexploit: 3DS UI sounds for the 3DS theme, which some are also used in the DSi theme.

Others

  • ahezard: NDMA code from nds-bootstrap
  • Another World & Yellow Wood Goblin: The original akMenu/Wood UI
  • Arisotura: ROM list from melonDS, and BIOS dumper code from dsibiosdumper
  • Dartz150: Provided fix for Iridion II & Top Gun: Combat Zones GBA games
  • devkitPro: Code used in nds-hb-menu, and the use of the bootloader, devkitARM, libnds, and libfat
  • edo9300: DS Phat check code
  • Gericom, TrolleyDave, and FAST6191: GBA SRAM-patching code, used in gbapatcher (SRAM patching thread at GBAtemp)
  • Gericom & profi200: GBA color correction code, used in GBARunner3
  • Nikokaro: Found no-tilt patches for WarioWare: Twisted!, and Yoshi Topsy-Turvy. (GBAtemp thread)
  • profi200: Improved SD code from fastboot3DS
  • RadDude McCoolguy, fintogive, KazoWAR, Vague Rant, gamemasterplc, Rocket Robz, ChampionLeake, DeadSkullzJr, spellboundtriangle, LedyBacer: Widescreen cheats
  • retrogamefan & Rudolph: Included AP-patches for nds-bootstrap
    • enler: Fixing AP-patch for Pokemon Black 2 (Japan) for DS⁽ⁱ⁾ mode compatibility
    • Rocket Robz: Fixing some DS⁽ⁱ⁾-Enhanced game AP-patches for DS⁽ⁱ⁾ mode compatibility
  • SNBeast: Unlaunch patches
  • Taiju Yamada: Code used to bypass R4i-SDHC boot file protection

Translators