How to Create DSi/3DS Themes
To make a TWiLight Menu++ theme, you will need an image editor capable of exporting .png
files, 16 BPP .bmp
files or .png
files, and 4 BPP .bmp
files. Idealmente, también deberías poder reordenar manualmente la paleta de colores de una imagen. GIMP is recommended and will be used for this guide, as it’s capable of everything needed.
Parte 1: Descargar las imágenes de ejemplo #
The first thing you should do is download the example themes. These can be used as a base for your theme and are already in the correct format, so if you have issues later on, you can compare with these.
Parte 2: Editar las imágenes #
Download and install GIMP
- Otros editores de imágenes como Photoshop también podrían funcionar, pero se usará GIMP en esta guía
Once installed, open GIMP and select Windows
-> Dockable Dialogs
-> Colormap
. Esto abre la ventana del mapa de colores, que nos será útil a la hora de editar la paleta de la imagen.
Ahora puedes abrir la imagen que quieras editar en GIMP y continuar con la sección de más abajo, dependiendo de la carpeta en la que se encuentre la imagen. Ten en cuenta que TWiLight Menu++ es exigente con el formato exacto de las imágenes, y que este varía segun la carpeta en la que esté, así que asegúrate de exportar tal como lo dice la guía.
Background textures (background
folder) #
These can be PNG files or 16-bit (A1 R5 G5 B5
or X1 R5 G5 B5
) BMP files.
- Si vas a usar imágenes en formato BMP, puedes establecerlos a 16 bits en la sección Opciones Avanzadas al exportar. Es posible que requieras hacer esto cada vez que exportes una imagen en formato BMP
Textura | Descripción |
---|---|
top | La textura de fondo de la pantalla superior |
top_photo | The top screen background texture when a photo is being shown |
bottom | La textura de fondo de la pantalla inferior cuando el cursor no está sobre ningún icono |
bottom_ds | Para el tema Nintendo 3DS, la textura de fondo de la pantalla inferior cuando el cursor no está sobre ningún icono en una consola DS Phat/Lite |
bottom_macro | Para el tema Nintendo DSi, la textura de fondo de la pantalla inferior cuando el cursor no está sobre ningún icono en el modo Macro |
bottom_bubble | La textura de fondo de la pantalla inferior cuando el cursor está sobre algún icono |
bottom_bubble_ds | Para el tema Nintendo 3DS, la textura de fondo de la pantalla inferior cuando el cursor está sobre algún icono en una consola DS Phat/Lite |
bottom_bubble_macro | Para el tema Nintendo DSi, la textura de fondo cuando el cursor está sobre algún icono en el modo Macro |
bottom_moving | Para el tema Nintendo DSi, la textura de fondo de la pantalla inferior cuando se está moviendo un icono de sitio |
bottom_moving_macro | For the DSi theme, the background texture when moving an icon while using Macro Mode |
Battery textures (battery
folder) #
Estas imágenes deben tener formato PNG. Los píxeles transparentes se verán como tal, pero solamente píxeles 100% transparentes funcionarán.
Textura | Descripción/Notas |
---|---|
battery0 | Flashes with battery1 when the battery is very low |
battery1 | Los que acaban de 0 a 4 son usandos en modo DSi |
battery1purple | Purple icons are used when Power LED color is set to Purple in settings |
battery2 | |
battery2purple | |
battery3 | |
battery3purple | |
battery4 | |
battery4purple | |
batterycharge | |
batterychargeblink | Flashes with batterycharge while charging |
batteryfull | Usado en modo DS en las consolas DSi y 3DS |
batteryfullDS | Usado en DS Phat/Lite |
batterylow | Usado en modo DS |
Paletted textures (grf
folder) #
These must be 4 BPP (16 color) BMP files.
To edit these in GIMP, select Image
-> Mode
-> RGB
to allow changing colors, then when done changing colors, select Image
-> Mode
-> Indexed...
to convert back to paletted. When switching to indexed, ensure that Generate optimum palette
is checked and Maximum number of colors
is set to 16
.
Note: Some images in the DSi theme have their palettes overridden based on the user’s profile color. If editing the colors of these ensure that the UserPalette
option for it in the theme.ini
is set to 0
.
Después de convertir a modo indexado, ve a la ventana del mapa de colores y asegúrate de que el color transparente (#FF00FF) es el color #0 en el mapa de colores. If it isn’t, right click in the colormap and select Rearrange Colormap...
then move the transparent color to be the first color in the colormap and select OK
.
If there are fewer than 16 colors in your final colormap, press the +
button at the bottom of the colormap dialog until you have 16 colors.
When exporting, it’s recommended to check the Do not write color space information
box under the Compatibility Options
dropdown.
Textura | Descripción |
---|---|
bips | Los puntos mostrados en la barra de desplazamiento en la parte de abajo (tema DSI) |
box | La texture de la caja, tanto llena como vacía (tema DSi) |
box_empty | La textura mostrada para un espacio vacío (tema 3DS) |
box_full | La textura mostrada para una caja con un ícono (tema 3DS) |
brace | La textura mostrada antes del primer icono y después del último (tema DSi) |
bubble | La parte inferior de la burbuja que se dibuja encima del borde de la caja de INICIO o la caja de iconos |
button_arrow | Las texturas de las flechas en ambos lados de la barra de desplazamiento (tema DSi) |
cornerbutton | Los botones que se muestra en el menú SELECT (Tema DSi) (El nombre se debe a un uso antiguo) |
cursor | El borde que indica el icono seleccionado, con cuadros de animación (Tema 3DS) |
dialogbox | El fondo del cuadro de dialogo |
folder | El icono de las carpetas |
icon_a26 | El icono para los juegos de la consola Atari 2600 |
icon_col | El icono para los juegos de la consola Colecovision |
icon_gb | El icono para los juegos de la consola Game Boy |
icon_gba | El icono para los juegos de la consola Game Boy Advance |
icon_gbamode | El icono para el modo GBA nativo |
icon_gg | El icono para los juegos de la consola Game Gear |
icon_img | El icono para imágenes en formato BMP, GIF, y PNG |
icon_int | El icono para los juegos de la consola Intellivision |
icon_m5 | El icono para los juegos de la consola Sord M5 |
icon_manual | El icono para el manual |
icon_md | El icono para los juegos de la consola Mega Drive |
icon_nes | El icono para los juegos de la consola NES |
icon_ngp | El icono para los juegos de la consola Neo Geo Pocket |
icon_pce | El icono para los juegos de la PC Engine/TurboGrafx-16 |
icon_plg | El icono para los plugins de DSTWO |
icon_settings | El icono para los ajustes de Nintendo DSi |
icon_sg | El icono para los juegos de la consola Sega SG-1000 |
icon_sms | El icono para los juegos de la consola Sega Master System |
icon_snes | El icono para los juegos de la consola SNES |
icon_unk | El icono que se muestra cuando un juego no tiene icono propio |
icon_ws | El icono para los juegos de la consola WonderSwan |
launch_dot | Los puntos mostrados cuando se inicia un juego (Tema DSi) |
moving_arrow | La flecha que se muestra cuando se está moviendo un juego de sitio (Tema DSi) |
progress | La animación de carga, con 8 cuadros de movimiento |
scroll_window | La parte de la barra inferior que muestra los iconos visibles |
small_cart | Los iconos que se muestra en la parte superior de la pantalla táctil (Tema 3DS) y en el menú SELECT (Tema DSi) |
start_border | El borde que indica el icono seleccionado, con cuadros de animación (Tema DSi) |
start_text | El texto que se muestra en el marco de selección (Tema DSi) |
wirelessicons | Los iconos que se muestran para indicar que un juego tiene soporte para conexión inalámbrica |
DS Classic Menu textures (quickmenu
folder) #
Estas imágenes deben tener formato PNG.
Textura | Descripción |
---|---|
bottombg | El fondo de la pantalla inferior |
phat_topbg | El fondo de la pantalla superior en una DS Phat |
topbg | El fondo de la pantalla superior en cualquier otro modelo |
UI textures (ui
folder) #
Estas imágenes deben tener formato PNG. Los píxeles transparentes se verán como tal, pero solamente píxeles 100% transparentes funcionarán. Si hay un pixel transparente en cualquiera de las texturas, deberá ser transparente en todas para que pueda sobrescribirse correctamente.
Textura | Descripción |
---|---|
Lshoulder | La textura para el botón L |
Lshoulder_greyed | La textura para el botón L cuando no haya más páginas a la izquierda |
Lshoulder_photo | El hombro izquierdo cuando se muestran una foto |
Lshoulder_photo_greyed | El hombro izquierdo sin páginas a la izquierda y una foto que se muestra |
Rshoulder | La textura para el botón R |
Rshoulder_greyed | La textura para el botón R cuando no haya más páginas a la derecha |
Rshoulder_photo | El hombro derecho cuando se muestran un foto |
Rshoulder_photo_greyed | El hombro derecho sin páginas a la izquierda y una foto que se muestra |
Video texture (video
folder) #
Only used for the 3DS theme, 3dsRotatingCubes.rvid
is a Rocket Video file. For more information on converting videos to rvid, read Converting a video to .rvid on the Vid2RVID wiki. Si no quieres que esto se muestre, puedes borrar el archivo.
Volume textures (volume
folder) #
Estas texturas se muestra solamente en modo DSi.
Estas imágenes deben tener formato PNG. Los píxeles transparentes se verán como tal, pero solamente píxeles 100% transparentes funcionarán.
Textura | Descripción/Notas |
---|---|
volume0 | En 0 el volumen está silenciado, en 4 está al máximo |
volume1 | |
volume2 | |
volume3 | |
volume4 |
Theme configuration (theme.ini
file) #
You may configure various options on how the theme is drawn in the theme.ini
to accommodate larger graphics or different layouts. For true/false options, 0
is false, and 1
is true. Los parámetros sin valor en el campo Por Defecto no son usadas en ese tema en concreto.
Valor | Descripción/Notas | Por Defecto (3DS) | Por Defecto (DSi) |
---|---|---|---|
StartBorderRenderY | La posición vertical inicial del marco de selección | 92 | 81 |
StartBorderSpriteW | El ancho de la textura del marco de selección. Ten en cuenta que la textura del marco de selección mide exactamente la mitad del marco completo | 32 | 32 |
StartBorderSpriteH | La altura de la textura del marco de selección | 64 | 80 |
StartTextRenderY | La posición vertical inicial de texto de inicio | 143 | 143 |
BubbleTipRenderX | La posición horizontal de la punta de la burbuja que se muestra sobre el marco de selección | 125 | 122 |
BubbleTipRenderY | La posición vertical de la punta de la burbuja que se muestra sobre el marco de selección | 98 | 80 |
BubbleTipSpriteW | El ancho de la textura de la punta de la burbuja | 7 | 11 |
BubbleTipSpriteH | La altura de la textura de la punta de la burbuja | 7 | 8 |
TitleboxRenderY | La posición vertical inicial del cuadro de texto que muestra el título | 96 | 85 |
TitleboxTextY | La posición vertical inicial del texto de título | 55 | 30 |
TitleboxTextW | La anchura máxima del texto de título | 200 | 240 |
TitleboxTextLarge | Si se usa o no la fuente grande para el texto de título | 0 | 1 |
TitleboxMaxLines | El número máximo de líneas que tendrá el texto de título | 3 | 4 |
VolumeRenderX | La posición horizontal en la pantalla superior en la que se dibujará el icono de volumen | 4 | 4 |
VolumeRenderY | La posición vertical en la pantalla superior en la que se dibujará el icono de volumen | 5 | 5 |
ShoulderLRenderX | La posición horizontal en la pantalla superior en la que se dibujará la textura del botón L | 0 | 0 |
ShoulderLRenderY | La posición vertical en la pantalla superior en la que se dibujará la textura del botón L | 172 | 172 |
ShoulderRRenderX | La posición horizontal en la pantalla superior en la que se dibujará la textura del botón R | 178 | 178 |
ShoulderRRenderY | La posición vertical en la pantalla superior en la que se dibujará la textura del botón R | 172 | 172 |
BatteryRenderX | La posición horizontal en la pantalla superior en la que se dibujará el icono de batería | 235 | 235 |
BatteryRenderY | La posición vertical en la pantalla superior en la que se dibujará el icono de batería | 5 | 5 |
UsernameRenderX | La posición horizontal en la pantalla superior en la que se dibujará el nombre de usuario | 28 | 28 |
UsernameRenderY | La posición vertical en la pantalla superior en la que se dibujará el nombre de usuario | 15 | 15 |
UsernameRenderXDS | La posición horizontal en la pantalla superior en la que se dibujará el nombre de usuario al usar una DS Phat/Lite | 4 | 4 |
DateRenderX | The X position on the top screen to draw the date text | 162 | 162 |
DateRenderY | The Y position on the top screen to draw the date text | 7 | 7 |
TimeRenderX | The X position on the top screen to draw the time text | 200 | 200 |
TimeRenderY | The Y position on the top screen to draw the time text | 7 | 7 |
PurpleBatteryAvailable | Whether or not to use the purple battery icons when Power LED color is set to Purple in settings | 1 | 1 |
FontPalette1 | El color transparente de la fuente, no se usa en la fuentes por defecto | 0x0000 | 0x0000 |
FontPalette2 | The colors of the font, use this site to convert | 0xDEF7 | 0xDEF7 |
FontPalette3 | 0xC631 | 0xC631 | |
FontPalette4 | 0xA108 | 0xA108 | |
FontPaletteDateTime1 | El color transparente de la fuente para la fecha y la hora | 0x0000 | 0x0000 |
FontPaletteDateTime2 | El color de la fuente para la fecha y la hora | 0xDEF7 | 0xA529 |
FontPaletteDateTime3 | 0xC631 | 0xBDEF | |
FontPaletteDateTime4 | 0xA108 | 0xD6B5 | |
FontPaletteTitlebox1 | El color transparente de la fuente del título de la ROM | 0x0000 | 0x0000 |
FontPaletteTitlebox2 | El color de la fuente para el título de la ROM | 0xDEF7 | 0xDEF7 |
FontPaletteTitlebox3 | 0xC631 | 0xC631 | |
FontPaletteTitlebox4 | 0xA108 | 0xA108 | |
FontPaletteDialog1 | El color transparente de la fuente para los cuadros emergentes | 0x0000 | 0x0000 |
FontPaletteDialog2 | El color de la fuente para los cuadros emergentes | 0xDEF7 | 0xDEF7 |
FontPaletteDialog3 | 0xC631 | 0xC631 | |
FontPaletteDialog4 | 0xA108 | 0xA108 | |
FontPaletteOverlay1 | El color transparente de la fuente para el texto superpuesto | 0x0000 | 0x0000 |
FontPaletteOverlay2 | El color de la fuente para el texto superpuesto | 0xDEF7 | 0xDEF7 |
FontPaletteOverlay3 | 0xC631 | 0xC631 | |
FontPaletteOverlay4 | 0xA108 | 0xA108 | |
FontPaletteUsername1 | El color transparente de la fuente para el nombre de usuario | 0x0000 | 0x0000 |
FontPaletteUsername2 | El color de la fuente para el nombre de usuario | 0xDEF7 | 0xDEF7 |
FontPaletteUsername3 | 0xC631 | 0xC631 | |
FontPaletteUsername4 | 0xA108 | 0xA108 | |
BipsUserPalette | Si se usa o no el color del DS Profile como paleta de colores para los puntos en la barra del rodillo | 0 | |
BoxUserPalette | Si se usa o no el color del DS Profile como paleta de las cajas que contienen los símbolos de los juegos en el Tema DSi | 0 | |
BoxEmptyUserPalette | Si se usa o no el color del DS Profile como paleta de cajas vacias en el Tema 3DS | 0 | |
BoxFullUserPalette | Si se usa o no el color del DS Profile como paleta de cajas que contiene los símbolos de los juegos en el Tema 3DS | 0 | |
BraceUserPalette | Si se usa o no el color del DS Profile como paleta del tirante al comienzo y fin de la lista de juegos | 0 | |
BubbleUserPalette | Si se usa o no el color del DS Profile como paleta del extremo de la burbuja del título | 0 | 0 |
ButtonArrowUserPalette | Whether or not to use the DS Profile color for the palette of the arrow buttons on the bottom of the screen | 1 | |
CornerButtonUserPalette | Si se usa o no el color del DS Profile como paleta del Menú DSi y íconos de Ajustes en el menú SELECT | 0 | |
CursorUserPalette | Si se usa o no el color del DS Profile como paleta del cursor | 0 | |
DialogBoxUserPalette | Si se usa o no el color del perfil como paleta de colores para los cuadros emergentes | 0 | 1 |
FolderUserPalette | Si se usa o no el color del DS Profile como paleta de las carpetas | 0 | 0 |
LaunchDotsUserPalette | Si se usa o no el color del perfil como paleta de colores para los puntos que aparecen al iniciar una aplicación | 1 | |
MovingArrowUserPalette | Si se usa o no el color del perfil como paleta de colores para la flecha que se muestra al mover iconos de sitio | 1 | |
ProgressUserPalette | Whether or not to use the DS Profile color for the palette of the loading progress spinner | 1 | 1 |
ScrollWindowUserPalette | Whether or not to use the DS Profile color for the palette of the background to the scroll window on the scrollbar | 0 | |
SmallCartUserPalette | Whether or not to use the DS Profile color for the palette of the cartridge icons | 0 | 0 |
StartBorderUserPalette | Whether or not to use the DS Profile color for the palette of the start border | 1 | |
StartTextUserPalette | Whether or not to use the DS Profile color for the palette of the start text | 1 | |
WirelessIconsUserPalette | Whether or not to use the DS Profile color for the palette of the wireless icons | 0 | 0 |
IconA26UserPalette | Whether or not to use the DS Profile color for the palette of the Atari 2600 icon | 0 | 0 |
IconCOLUserPalette | Whether or not to use the DS Profile color for the palette of the ColecoVision icon | 0 | 0 |
IconGBUserPalette | Whether or not to use the DS Profile color for the palette of the Game Boy icon | 0 | 0 |
IconGBAUserPalette | Whether or not to use the DS Profile color for the palette of the Game Boy Advance icon | 0 | 0 |
IconGBAModeUserPalette | Whether or not to use the DS Profile color for the palette of the native GBA Mode icon | 0 | 0 |
IconGGUserPalette | Whether or not to use the DS Profile color for the palette of the Game Gear icon | 0 | 0 |
IconIMGUserPalette | Whether or not to use the DS Profile color for the palette of the image icon | 0 | 0 |
IconINTUserPalette | Whether or not to use the DS Profile color for the palette of the Intellivision icon | 0 | 0 |
IconM5UserPalette | Whether or not to use the DS Profile color for the palette of the Sord M5 icon | 0 | 0 |
IconManualUserPalette | Whether or not to use the DS Profile color for the palette of the manual icon | 0 | 0 |
IconMDUserPalette | Whether or not to use the DS Profile color for the palette of the Genesis/Mega Drive icon | 0 | 0 |
IconNESUserPalette | Whether or not to use the DS Profile color for the palette of the NES/Famicom icon | 0 | 0 |
IconNGPUserPalette | Whether or not to use the DS Profile color for the palette of the Neo Geo Pocket icon | 0 | 0 |
IconPCEUserPalette | Whether or not to use the DS Profile color for the palette of the PC Engine/TurboGrafx-16 icon | 0 | 0 |
IconPLGUserPalette | Whether or not to use the DS Profile color for the palette of the DSTWO plugin icon | 0 | 0 |
IconSettingsUserPalette | Whether or not to use the DS Profile color for the palette of the DSi Settings icon | 0 | 0 |
IconSGUserPalette | Whether or not to use the DS Profile color for the palette of the SG-1000 icon | 0 | 0 |
IconSMSUserPalette | Whether or not to use the DS Profile color for the palette of the Master System icon | 0 | 0 |
IconSNESUserPalette | Whether or not to use the DS Profile color for the palette of the SNES icon | 0 | 0 |
IconUnknownUserPalette | Whether or not to use the DS Profile color for the palette of the unknown (missing) icon | 0 | 0 |
IconWSUserPalette | Whether or not to use the DS Profile color for the palette of the WonderSwan icon | 0 | 0 |
UsernameUserPalette | Whether or not to use the DS Profile color for the palette of the username | 1 | 1 |
ProgressBarUserPalette | Whether or not to use the DS Profile color as the color of the progress bar | 1 | 1 |
ProgressBarColor | The color of the progress bar if ProgressBarUserPalette is disabled | 0x7C00 | 0x7C00 |
UseAlphaBlend | Whether or not to blend the colors of the top screen text (the date/time and username) with the colors of the background | 1 | 1 |
DarkLoading | Whether or not to fade to black instead of white during loading screens | 0 | 0 |
RenderPhoto | Whether or not to draw a photo on the top screen | 0 | 1 |
RotatingCubesRenderY | The Y position on the top screen to draw the rotating cubes | 78 | |
PlayStartupJingle | Whether or not to use the startup sound before the main BGM. See the custom SFX page for more information | 1 | 0 |
StartupJingleDelayAdjust | The amount of samples early in the startup sound the BGM should start at | 0 | 0 |
Opciones del Modo Macro #
You may add specific override options to theme.ini
for use in Macro Mode. To do this, add [MACRO]
to a blank line at the bottom of the configuration file, then add any specified configurations below it.
Música y sonidos personalizados #
The DSi and 3DS UIs also support custom music. See DSi/3DS Themes - Custom SFX for more details.
Fuentes personalizadas #
You may put Custom Fonts in the font
folder for use in the theme. You can also add override fonts for the date & time using date_time.nftr
, and the console username with username.nftr
.
Paletas personalizadas #
For the paletted textures (grf
folder), you can optionally add override palette sets which are used when the corresponding UserPalette
setting is enabled. Palette set files can be created using this editor. When using the editor, import the image you would like to work with, then create a palette for each of the 16 DS Profile colors. You can use this example palette file as a starting point.
Las 16 filas de paletas corresponden a cada color de perfil y deben estar en el siguiente orden:
- Gris
- Marrón
- Rojo
- Rosa
- Naranja
- Amarillo
- Verde lima
- Verde
- Verde oscuro
- Turquesa
- Cian/Azul claro
- Azul
- Azul oscuro
- Violeta/Morado Oscuro
- Morado
- Magenta
Once you’ve created a palette file, place it in the palettes
folder. The name of the palette file should match the name of its image but with a .bin
extension instead (ex. start_border.bin
will be applied to start_border.bmp
).
You may also put a username.bin
palette file to change the palettes of the username font. Make sure to set the palette editor to Font Mode
when creating this file.
Parte 3: Añadir la skin a TWiLight Menu++ #
Once you’ve edited some graphics and would like to test your theme, simply copy your theme folder (the folder containing the background
, battery
, etc folders) to sd:/_nds/TWiLightMenu/3dsmenu/themes/
or sd:/_nds/TWiLightMenu/dsimenu/themes/
for 3DS and DSi theme themes respectively.
Part 4: Sharing your theme #
Once you’ve completed your theme, you can share it with the community by creating a Pull Request adding it to the DS-Homebrew/twlmenu-extras GitHub repository in a .7z
file. If you’re unfamiliar with using git you can also simply create an issue on that repository with a zip file of your theme requesting it be added.