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 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.)
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
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 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.
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.
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
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.
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
DieGo: Adding support for custom ROM/folder icons and improvements for custom skins
lifehackerhansol: Improving support for flashcard autobooting and kernel loading, and libnds32 fork for 32KB DLDI driver support
NightScript: Code cleanup, defining code standards, added flashcard functionality for Wood UI theme, manual pages
ahezard, shutterbug2000 and Rocket Robz: nds-bootstrap (used for launching Nintendo DS(i) ROMs off the SD card)
Alekmaul: AmeDS (used for launching Amstrad CPC ROMs)
Alekmaul & wavemotion: StellaDS, A5200DS, A7800DS, A8DS (used for launching Atari 2600/5200/7800/XEGS ROMs), and ColecoDS (used for launching ColecoVision, MSX, Sord M5, and Sega SG-1000/SC-3000 ROMs)
archiede: SNEmulDS (used for launching SNES ROMs)
Coto: SNEmulDS Revival
chishm: tuna-viDS (used for playing Xvid videos)
Drenn: GameYob (used for launching Gameboy ROMs)
FluBBaOfWard: S8DS (used for launching Sega Master System, Game Gear, SG-1000/SG-3000, and ColecoVision ROMs), NitroGrafx (used for launching PC Engine/TurboGrafx-16 ROMs), NitroSwan (used for launching WonderSwan ROMs), and NGPDS (used for launching Neo Geo Pocket ROMs)
FluBBaOfWard, Coto, and Loopy: nesDS (used for launching NES ROMs)
Apache Thunder: TWL Edition of nesDS
Gericom: FastVideoDSPlayer (used for launching FastVideoDS videos) & GBARunner2 (used for launching GameBoy Advance ROMs outside of the DS Phat/Lite's GBA mode)
therealteamplayer: Hicode+DSP merged builds of GBARunner2 included for DSi/3DS
unresolvedsymbol: rom3M+master "DSL-Enhanced" builds of GBARunner2 included for playing Pokémon: Emerald Version on flashcards
Lordus: jEnesisDS (used for launching Sega Mega Drive/Genesis ROMs)
xonn83: GBMacro version of jEnesisDS
redbug26: CrocoDS (used for launching Amstrad CPC ROMs)
Ryan FB, Rocket Robz, and xonn83: PicoDriveTWL (used for launching large Sega Mega Drive/Genesis ROMs)
wavemotion: Nintellivision/NINTV-DS (used for launching Intellivision ROMs)
Absent-Reality: Intellivision icon
davi: Border for GBC theme (originally for GameYob)
fail0verflow, Fluto, and Arkhandar: Homebrew Channel/Launcher graphics
FlameKat53: Manual icon for DSi theme's SELECT
menu
Mr. Start: Super Nintendo DS splash screen
PW5190: Kirby-themed TWLMenu++ splash screen
spinal_cord: DSi4DS and DSision2 graphics
StarvingArtist: Game Console icons
BlastoiseVeteran: Remastered version of Nintendo DSi Shop music
IkaMusumeYiyaRoxie: General N64 MIDI Soundfont, used for the title splash fanfare on old versions
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.
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
Arabic: Ken Brown, SLG3
Bulgarian: Peter0x44, Tescu
Catalan:
Chinese Simplified: cai_miao, Chris, Forbidden, James-Makoto, R-YaTian, Yukino Song, 曾国立, 天天地地人人, 百地 希留耶
Chinese Traditional: cai_miao, ccccchoho, James-Makoto, Rintim, 奇诺比奥
Czech: Štěpán Dolský
Danish: jonata, Michael Millet, Nadia Pedersen
Dutch: Arthur, guusbuk, Mikosu, Minionguyjpro, Xtremegamer007
French: Arcky, cooolgamer, Dhalian, maximesharp, Ghost0159, Léo, LinuxCat, Martinez, NightScript, SLG3, SombrAbsol, TM-47, Yolopix
German: ariebe9115, Blurry Knight, Christian Schuhmann, Dubsenbert Reaches, Fırat Tay, hehe, İlke Hür Eyiol, Julian, Kazuto, malekairmaroc7, Michael Brey, Oleh Hatsenko, SkilLP, SuperSaiyajinStackZ, Tcm0, TheDude, TM-47, Uriki
Greek: Anestis1403
Hebrew: Barawer, Yaniv Levin
Hungarian: Viktor Varga, ハトヴィング -- ハット
Indonesian: Cyruz Wings, Farid Irwan, heydootdoot, Shiori
Italian: Alessandro Tavolieri, Leonardo Ledda, Mattia, TM-47, Vendicatorealato, xavimel
Japanese: Chromaryu, inucat, Pk11, kuragehime, rinrinrin2002, Rintim, Ronny Chan, Uriki
Korean: DDinghoya, lifehackerhansol, I'm Not Cry, Myebyeol_NOTE, Oleh Hatsenko, 그그기그
Norwegian: Nullified Block
Polish: Avginike, gierkowiec tv, Kipi000, Konrad Borowski, MaksCROWDIN0, Mateusz Tobiasz, Michał Słonina, RedstonekPL, TheCasachii
Portuguese (Brazil): César Memère, Jeff Sousa, themasterf, Victor Coronado
Portuguese (Portugal): bruwyvn, Christopher Rodrigues, Gabz Almeida, jim, joyrv, leteka 1234, Rodrigo Tavares, Tiago Silva, Wodson de Andrade, Wodson de Andrade, Zak
Romanian: Tescu
Russian: Alexey Barsukov, Ckau, manwithnoface, mbhz, MMR Marler, Nikita, Молодая Кукуруза
Ryukyuan: kuragehime
Spanish: Adrin Ramen, Adrian Rodriguez, Allinxter, beta215, ccccmark, dimateos, Kaede159, KplyAsteroid, mschifino, Nicolás Herrera Concha, Nintendo R, nuxa17, Radriant, SofyUchiha, TM-47, Uriki, XxPhoenix1996xX
Swedish: Max Hambraeus, Nullified Block, TM-47, Victor Ahlin, Walter Lindell
Turkish: Alp, Egehan.TWL, Emir, GlideGuy06, Grandmaquil, imbeegboi22, İlke Hür Eyiol, rewix32, rewold20, Yağmur Celep
Ukrainian: Oleh Hatsenko, Mykola Pukhalskyi, TM-47, вухаста гітара
Valencian: tsolo
Vietnamese: Chử Tiến Bình, daicahuyoi Đỗ Minh Hiếu, hotungkhanh, Trương Hồng Sơn