Hacking Nintendont Themes and Custom Mods

AbdallahTerro

da KiNG
OP
Member
Joined
Jan 14, 2012
Messages
6,052
Trophies
0
Location
Ideas factory :)
Website
ccabz.wordpress.com
XP
3,123
Country
Nintendont MasterMOD by ABZ

Latest Version Download Link
Latest Source Patch Download Link

Website: http://send0r.de/Nintendont/MasterMod/


Background Info:
-----------------
Nintendont Mastermod is a Fork of "Nintendont" the famous GC loader for Wii and WiiU/vWii, with the following features:

1. Supports using and online downloading custom backgrounds for the Nintendont application using white and black font colors
This includes more than 60 readily available themes online, downloadable from within the app
2. Supports using and online downloading Loading backgrounds with and without progress bars, replacing the verbose output
This includes more than 1000 themes including 2 for each GC game (with and without a progress bar)
3. Supports silent booting of the games into a black screen
4. Online updates for latest mastermod revision, older stable revisions and other Nintendont Mods
5. Online download of GC and Triforce bios files
6. Many tweaks such as custom Nunchuck button maps, custom HDD pinging option

Changelog:
------------
* Added Missing themes detection when downloading all custom game themes
* Added Preview Pack for loader and app themes (can be enabled or disabled)
* Nintendont Mastermod can now download all custom game themes with one click
* Updated Mastermod to v4.xxx using new FatFS support
* Added 16 Black Nintendont Backgrounds
* Added More stable revisions v2.x and 3.x to Stable Nintendont Download Menu

* All Custom Game Loader Themes are downloadable via the mod and available online
* Loader Themes now also work when the game is booted using Nintendont app
* Added Custom Game Theme as loaders themes using ID3.png or ID3X.png

* Added Credits Page
* Added 16 Gradient Themes for Nintendont App
* Added 16 Unicolor Themes for Nintendont App
* Added 16 Dark Themes for Nintendont App + Fade in/out effects
* Added Disable HDD pinging to settings, when off default timer set to 1 min 50 secs
* Added Segaboot bios download for Triforce games
* Added ipl-bios fixes when booting games, ipl files
* Added Nunchuck support using the following configurations:
Nintendont MasterMod Nunchuck Configs and Button maps:
Available Configs:
------------------
(2) = Alt-Naggers (default) //convenient for most games uses c+Dpad as c-stick
(2 + plus) = Naggers config //uses tilt as c-stick
(2 + minus) = Troopage config //handy in many situations
(2 + Left) = Abz general config //for arcade games or games that require few buttons
(2 + right) = Howards general config //matching button names to action
(2 + up) = racing 1 //for games that use AnalogR and AnalogL for gas and break
(2 + down) = racing 2 //for games that require A held for gas

You can select configs and enable/disable IR by:
------------------------------------------------
press button_2 (puts in config mode and turns IR off)
press config button (selects the desired config - skip this step for the default)
release the config button (keep holding button_2)
press button_Z (turns IR on or off for the just selected config. If the wiimotes is pointed at the screen you can see IR toggle on and off if the screen accepts cStick input. )
release button_Z
release button_2 (ends configuration)

Full button mapping:
--------------------
Home = Start/Pause in all configs
(2+1) = Exit to Loader or HBC in all configs
--------------------------------------------
Press (2 or 2&Z) = Alt-Naggers or Shooters
//A=A B=R Z=L (+ = 1/2R) (- = 1/2L)
//C or B not held Up=Z Down=B Right=X Left=Y B=R Z=L
//C held Dpad=controls cStick Z=1/2L B=1/2R
//B held DPAD=Standard

Press (2&Z) to to enable/disable IR for Shooters config
in shooters config IR controls c-Stick thus c+DPAD=Standard

Press (2 & plus) = Naggers
//same as Alt-naggers with tilt as C-STICK with C button held and C+DPAD as GC-DPAD

Press (2 + minus ± Z) = Troopage config (add (Z) to to enable IR as c-stick) (add (Z) to enable IR as c-stick)
//A=A
//C not pressed +=X -=B Z=L B=R Dpad=cStick
//C pressed +=Y -=Z Z=1/2L B=1/2R Dpad=Standard

Press (2 + Left ± Z) = Abz general config
//A=A B=B C=X Z=Y -=Z +=R Dpad=Standard

Press (2 + right ± Z) = Howards general config
//A=A B=B Z=Z +=X -=Y Dpad=Standard
//C not pressed L R tilt tied to L R analog triggers.
//C pressed tilt control the cStick

Press (2 + up ± Z) = racing games that use AnalogR and AnalogL for gas and break
//A=A B=B Z=Z +=X -=Y Dpad=Standard
//C not pressed backwards forward tilt tied to L R analog triggers.
//C pressed tilt control the cStick

Press (2 + down ± Z) = racing games that require A held for gas
//A=Z B=B Z=A +=X -=Y Dpad=Standard
//C not pressed L R tilt tied to L R analog triggers.
//C pressed tilt control the cStick
--------------------------------------------------------------------------------------------------------------------------------

The Updates and Themes Download Menu:

LOekgoy.jpg


Now you can preview a theme before downloading it too!
S7dGDZG.jpg


Nintendont Mastermod can download:

*All Custom Game Loader themes with or without progress bar (Available for all 600 games)
GMSX.png
GEO.png
GSM.png
D42X.png


*Loader themes with progress bars (For USB Loader Users)
VCtHzJj.jpg


*Nintendont App Light Themes
xUt1px4.jpg


*Nintendont App Dark Themes
sZqhMU3.jpg


*Nintendont App Gradient Themes
OCYgBWG.jpg


*Nintendont App Black themes
xOVyXPJ.jpg


*Nintendont App Unicolor Themes
K7rI2dH.jpg


It also has a beautiful credits page:
zKup3hy.jpg


Since Many new themes gets added periodically, all removed themes can be found here:
https://www.dropbox.com/sh/o45wvndxaakj6kv/AABwxWmuY6HEqcIxVyXczoXwa?dl=0

It also has an online internal updater
For first time users or to manually install the latest mod download it from here:

Manual update link: http://nintendont.gxarena.com/themes/boot.dol
Source Patch: http://nintendont.gxarena.com/themes/Themes.patch


To manually update the backgrounds or to use your custom ones:
Here's a link to all backgrounds (loader + nintendont) in a single 7zip file, for users who don't want to connect the wii online for update purposes:
http://www.mediafire.com/download/ocp3sdddr3fvdq7/All_Themes.7z

Use one Loader/Game Loader theme and one Nintendont theme at a time

To manually install your custom PNG background:
------------------------------------------------------------------
*Loader Theme:
Place NinBackLight.png or NinBackDark.png or NinBackBars.png or NinBackNoBar.png in ( /apps/nintendont) folder

*Custom Game Loader Themes:

Place ID3.png (splash screen) or ID3X.png (loading bar) in ( /apps/nintendont) folder
P.S> Delete all Loader themes mentioned above first
ID3 is the first 3 letters/Numbers of the game ID
ID3X is same as ID3 with an "X" as 4th letter

*Nintendont App Theme:

Place NinBack.png for Light Background-Black text or NinLegacy.png for Dark Background-White text in ( /apps/nintendont) folder

In case B is pressed during autoboot, the default theme, NinBack.png or NinLegacy.png gets loaded automatically
Also same when launched from HBC with autoboot off

Recommended USB Loaders:
--------------------------------------
WiiFlow MasterMod: http://nintendont.gxarena.com/banners/wiiflow_mastermod_wiiuwide.7z

WiiFlow 1076 Mod: http://nintendont.gxarena.com/banners/wiiflow_1076_mod_wiiuwide.7z

USB Loader GX 1243: http://www.mediafire.com/download/23w0our2lle1g72/R1243.7z

USB Loader GX 1234 DS3-WUP Default-GUI Mod: https://dl.dropboxusercontent.com/u/101209384/ds3/usbloader-gui-read-only-1234-ds3-wup-patch.rar

USB Loader GX 1234 DS3-WUP Tabs-GUI Mod: http://nintendont.gxarena.com/banners/1234mod-ds3-wup-tabs-boot.7z

CFG USB Loader rev 70.78: http://nintendont.gxarena.com/banners/usbloader_cfg.7z

CFG USB Loader rev 71-Taiwan: https://www.dropbox.com/s/nk23gtnv6z9rokq/cfg71beta49t2.rar?dl=0

CFG USB Loader Mod rev 70.78.8 by nitraiolo: http://nintendont.gxarena.com/banners/cfg_mod_70_78_8.7z

P.S> these CFG dols use their own app and loader backgrounds stored in \apps\usbloader so cancel autoboot and download the custom backgrounds on first use
for the Taiwan-mod nintendont's boot.dol can also be renamed "loader.dol" and placed in "\usb-loader" folder

--------------------------------------------------------------------------------------------------------------------------------
Mr. Mysterio has created a Nintendont mod that plays the BIOS animation on a separate thread while the game is booting.
Link: http://send0r.de/Nintendont/Mr. Mysterio's Mod/
Special thanks to send0r for keeping this updated to the latest Nintendont version.
--------------------------------------------------------------------------------------------------------------------------------


Historical Background:
First big THANKS to the nintendont coders, devs and commiters for the great job they did already.

Since Nintendont rev2.217+ supports custom Background and TrueType Fonts I made this thread to help users create custom nintendont mods using the existing code. (special thanks to JoostinOnline for making this update)

Nintendont is officially using one of the best backgrounds made back then in the nintendont logo competition.
A verbose loading info is displayed to show loading and error messages.
2v2761z.jpg

I'll show you how you can make a build that looks like this:


2i75zfa.jpg


Let's start:
------------
1. So where are the source files located:

the background and font are found in "nintendon-t-read-only\loader\data\" folder
background.png and font.ttf respectively (small caps including extension)

the code used to display the verbose info is found in both main.c and menu.c files located in "nintendon-t-read-only\loader\source" folder

menu.c has the info used to display Nintendont version/build and firmware in upper left corner
at the end of the file:
Code:
void PrintInfo()
{
        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*1, "Nintendont Loader v%d.%d (%s)", NIN_VERSION>>16, NIN_VERSION&0xFFFF, IsWiiU() ? "Wii U" : "Wii");
        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*2, "Built  : %s %s", __DATE__, __TIME__ );
        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*3, "Firmware: %d.%d.%d", *(vu16*)0x80003140, *(vu8*)0x80003142, *(vu8*)0x80003143 );
}

This defines the font size, color, x position, y position, text to display

we can edit this text to make our own title for instance:
PrintFormat(22, 0xFFFFFF00, MENU_POS_X + 50*1, MENU_POS_Y + 50*1, "Nintendont Loader v%d.%d (%s)", NIN_VERSION>>16, NIN_VERSION&0xFFFF, IsWiiU() ? "Wii U" : "Wii");
PrintFormat(14, 0xFFFFFF00, MENU_POS_X + 200*1, MENU_POS_Y + 40*2, "Custom Nunchuck Mod by Abz");
2zr2sy8.jpg



main.c on the other hand has all the other verbose stuff including "Press B to cancel Autoboot" in the center, Press Home, A, B for settings at the top right corner and all the loading progress stuff, like checking DI, FS and what not....

Press B to cancel autoboot is in line 233
PrintFormat(DEFAULT_SIZE, BLACK,320-90, MENU_POS_Y +20*10,"B: Cancel Autoboot");

Home:Exit A:Select SD/USb in lines 263-268
PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X + 430, MENU_POS_Y + 20*1, "Home: Exit");
PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X + 430, MENU_POS_Y + 20*2, "A : Select");
PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X + 53 * 6 - 8, MENU_POS_Y + 20 * 6, UseSD ? "<" : " ");
PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X + 53 * 6 - 8, MENU_POS_Y + 20 * 7, UseSD ? " " : "<");
PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X + 47 * 6 - 8, MENU_POS_Y + 20 * 6, " SD ");
PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X + 47 * 6 - 8, MENU_POS_Y + 20 * 7, "USB ")

The verbose loading and error messages in lines 453-570
Code:
        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*6, "Loading patched kernel ...\r\n");
        UpdateScreen();
        while(1)
        {
                DCInvalidateRange( (void*)0x90004100, 0x20 );
                if( STATUS_LOADING == 0xdeadbeef )
                        break;

                PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*6, "Loading patched kernel... %d", STATUS_LOADING);
                if(STATUS_LOADING == 0)
                {
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*7, "ES_Init...");
                // Cleans the -1 when it's past it to avoid confusion if another error happens. e.g. before it showed "81" instead of "8" if the controller was unplugged.
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X + 163, MENU_POS_Y + 20*6, " ");
                }
                if(STATUS_LOADING > 0 && STATUS_LOADING < 20)
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*7, "ES_Init... Done!");
                if(STATUS_LOADING == 2)
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*8, "Init SD device...");
                if(STATUS_LOADING > 2 && STATUS_LOADING < 20)
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*8, "Init SD device... Done!");
                if(STATUS_LOADING == -2)
                        PrintFormat(DEFAULT_SIZE, MAROON, MENU_POS_X, MENU_POS_Y + 20*8, "Init SD device... Error! %d  Shutting down", STATUS_ERROR);
                if(STATUS_LOADING == 3)
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*9, "Mounting USB/SD device...");
                if(STATUS_LOADING > 3 && STATUS_LOADING < 20)
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*9, "Mounting USB/SD device... Done!");
                if(STATUS_LOADING == -3)
                        PrintFormat(DEFAULT_SIZE, MAROON, MENU_POS_X, MENU_POS_Y + 20*9, "Mounting USB/SD device... Error! %d  Shutting down", STATUS_ERROR);
                if(STATUS_LOADING == 5)
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*10, "Checking FS...");
                if(STATUS_LOADING > 5 && STATUS_LOADING < 20)
                {
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*10, "Checking FS... Done!");
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*11, "Drive size: %.02f%s Sector size: %d", STATUS_DRIVE, STATUS_GB_MB ? "GB" : "MB", STATUS_SECTOR);
                }
                if(STATUS_LOADING == -5)
                        PrintFormat(DEFAULT_SIZE, MAROON, MENU_POS_X, MENU_POS_Y + 20*10, "Checking FS... Error! %d Shutting down", STATUS_ERROR);
                if(STATUS_LOADING == 6)
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*12, "ES_LoadModules...");
                if(STATUS_LOADING > 6 && STATUS_LOADING < 20)
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*12, "ES_LoadModules... Done!");
                if(STATUS_LOADING == -6)
                        PrintFormat(DEFAULT_SIZE, MAROON, MENU_POS_X, MENU_POS_Y + 20*12, "ES_LoadModules... Error! %d Shutting down", STATUS_ERROR);
                if(STATUS_LOADING == 7)
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*13, "Loading config...");
                if(STATUS_LOADING > 7 && STATUS_LOADING < 20)
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*13, "Loading config... Done!");
                if(STATUS_LOADING == 8)
                {
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*14, "Init HID devices... ");
                        if ( STATUS_ERROR == 1)
                        {
                                PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*15, "          Plug Controller in %s usb port", IsWiiU() ? "BOTTOM REAR" : "TOP");
                        }
                        else
                                PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*15, "%50s", " ");
                }
                if(STATUS_LOADING > 8 && STATUS_LOADING < 20)
                {
                        if ((ncfg->MaxPads == 1) && (ncfg->Config & NIN_CFG_HID))
                                PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*14, "Init HID devices... Using Gamecube and HID Ports");
                        else if ((ncfg->MaxPads > 0) && (ncfg->Config & NIN_CFG_HID))
                                PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*14, "Init HID devices... Using Gamecube, HID, and BT Ports");
                        else if (ncfg->MaxPads > 0)
                                PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*14, "Init HID devices... Using Gamecube and BT Ports");
                        else if (ncfg->Config & NIN_CFG_HID)
                                PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*14, "Init HID devices... Using HID and Bluetooth Ports");
                        else
                                PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*14, "Init HID devices... Using Bluetooth Ports... Done!");
                }
                if(STATUS_LOADING == -8)
                {
                        PrintFormat(DEFAULT_SIZE, MAROON, MENU_POS_X, MENU_POS_Y + 20*14, "Init HID devices... Failed! Shutting down");
                        switch (STATUS_ERROR)
                        {
                                case -1:
                                        PrintFormat(DEFAULT_SIZE, MAROON, MENU_POS_X, MENU_POS_Y + 20*15, "No Controller plugged in %s usb port %10s", IsWiiU() ? "BOTTOM REAR" : "TOP", " ");
                                        break;
                                case -2:
                                        PrintFormat(DEFAULT_SIZE, MAROON, MENU_POS_X, MENU_POS_Y + 20*15, "Missing %s:/controller.ini %20s", GetRootDevice(), " ");
                                        break;
                                case -3:
                                        PrintFormat(DEFAULT_SIZE, MAROON, MENU_POS_X, MENU_POS_Y + 20*15, "Controller does not match %s:/controller.ini %6s", GetRootDevice(), " ");
                                        break;
                                case -4:
                                        PrintFormat(DEFAULT_SIZE, MAROON, MENU_POS_X, MENU_POS_Y + 20*15, "Invalid Polltype in %s:/controller.ini %12s", GetRootDevice(), " ");
                                        break;
                                case -5:
                                        PrintFormat(DEFAULT_SIZE, MAROON, MENU_POS_X, MENU_POS_Y + 20*15, "Invalid DPAD value in %s:/controller.ini %9s", GetRootDevice(), " ");
                                        break;
                                case -6:
                                        PrintFormat(DEFAULT_SIZE, MAROON, MENU_POS_X, MENU_POS_Y + 20*15, "PS3 controller init error %25s", " ");
                                        break;
                                default:
                                        PrintFormat(DEFAULT_SIZE, MAROON, MENU_POS_X, MENU_POS_Y + 20*15, "Unknown error %d %35s", STATUS_ERROR, " ");
                                        break;
                        }
                }
                if(STATUS_LOADING == 9)
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*15, "Init DI... %40s", " ");
                if(STATUS_LOADING > 9 && STATUS_LOADING < 20)
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*15, "Init DI... Done! %35s", " ");
                if(STATUS_LOADING == 10)
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*16, "Init CARD...");
                if(STATUS_LOADING > 10 && STATUS_LOADING < 20)
                        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*16, "Init CARD... Done!");
                Screenshot();
                GRRLIB_Screen2Texture(0, 0, screen_buffer, GX_FALSE); // Copy all status messages
                GRRLIB_Render();
                GRRLIB_DrawImg(0, 0, background, 0, 1, 1, 0xFFFFFFFF);
                PrintInfo();
        }

        gprintf("Nintendont at your service!\r\n");

        GRRLIB_DrawImg(0, 0, screen_buffer, 0, 1, 1, 0xFFFFFFFF); // Draw all status messages
        PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*17, "Nintendont kernel looping, loading game...");

To hide a line you need to comment the code by adding // at the beginning of PrintFormat line
ex: hiding Press B to cancel Autoboot
//PrintFormat(DEFAULT_SIZE, BLACK, 320 - 90, MENU_POS_Y + 20*10, "B: Cancel Autoboot");

The code I used to make the old progress bar is the following:
Code:
    PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 50*1, MENU_POS_Y + 20*19, "||||||||||||||||||");
    UpdateScreen();
    while(1)
    {
        DCInvalidateRange( (void*)0x90004100, 0x20 );
        if( STATUS_LOADING == 0xdeadbeef )
            break;

        PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 50*1, MENU_POS_Y + 20*19, "||||||||||||||||||");
        if(STATUS_LOADING == 0)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 90*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING > 0 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 110*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING == 2)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 130*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING > 2 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 150*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING == 3)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 170*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING > 3 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 190*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING == 4)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 210*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING > 4 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 230*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING == 5)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 250*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING > 5 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 270*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING == 6)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 290*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING > 6 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 310*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING == 7)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 330*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING > 7 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 350*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING == 8)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 370*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING > 8 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 390*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING == 9)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 410*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING > 9 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 430*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING == 10)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 450*1, MENU_POS_Y + 20*19, "|||||||||");
        if(STATUS_LOADING > 10 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 470*1, MENU_POS_Y + 20*19, "|||||||||");
        FPAD_Update();
        Screenshot();
        GRRLIB_Screen2Texture(0, 0, screen_buffer, GX_FALSE); // Copy all status messages
        GRRLIB_Render();
        GRRLIB_DrawImg(0, 0, background, 0, 1, 1, 0xFFFFFFFF);
        PrintInfo();
    }

    //gprintf("Nintendont at your service!\r\n");

    GRRLIB_DrawImg(0, 0, screen_buffer, 0, 1, 1, 0xFFFFFFFF); // Draw all status messages
            PrintFormat(DEFAULT_SIZE, 0xFFFFFF00, MENU_POS_X + 490*1, MENU_POS_Y + 20*19, "|||||||||");
    GRRLIB_Render();
I used the Gamecuben Font:http://www.dafont.com/gamecube.font
and This background:
5uhkph.png


The new Progress bar is a continuous loading strip
30blqb9.png

I used "Times New Roman font and this code to make it work:
Code:
    while(1)
    {
        DCInvalidateRange( (void*)0x90004100, 0x20 );
        if( STATUS_LOADING == 0xdeadbeef )
            break;
        PrintInfo();
        PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 50*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING == 0)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 90*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING > 0 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 110*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING == 2)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 130*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING > 2 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 150*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING == 3)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 170*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING > 3 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 190*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING == 4)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 210*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING > 4 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 230*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING == 5)
          PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 250*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING > 5 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 270*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING == 6)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 290*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING > 6 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 310*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING == 7)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 330*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING > 7 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 350*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING == 8)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 370*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING > 8 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 390*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING == 9)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 410*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING > 9 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 430*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING == 10)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 450*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        if(STATUS_LOADING > 10 && STATUS_LOADING < 20)
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 470*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
        GRRLIB_Screen2Texture(0, 0, screen_buffer, GX_FALSE); // Copy all status messages
        GRRLIB_Render();
        GRRLIB_DrawImg(0, 0, background, 0, 1, 1, 0xFFFFFFFF);
        PrintInfo();
    }

    //gprintf("Nintendont at your service!\r\n");

    GRRLIB_DrawImg(0, 0, screen_buffer, 0, 1, 1, 0xFFFFFFFF); // Draw all status messages
            PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 490*1, MENU_POS_Y + 20*19, "\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88");
    GRRLIB_Render();
//    memcpy( (void*)0x80000000, (void*)0x90140000, 0x1200000 );
    DVDStartCache();
    GRRLIB_FreeTexture(background);
    GRRLIB_FreeTexture(screen_buffer);
    GRRLIB_FreeTTF(myFont);
    GRRLIB_Exit();

You can also hide all verbose stuff altogether to make loading screens like the ones below by just adding
Code:
return;
to the first line of PrintFormat (nintendon-t-read-only\loader\source\font.c)
1zw13t4.jpg


vx251w.jpg


Please feel free to share your custom mods and backgrounds/fonts/sources here to keep all this stuff in one place. This will keep the main nintendont thread clean.

My custom mods has nunchuck support which is still a private beta wip stuff, so I won't be able to share them here until this stuff is officially commited, however all the info needed to make them is there now and I'll be glad to help you out.

Download links for my mods - no nunchuck support:

rev 234 and 223 (with ustealth support)
rev 223

To take screensots of the loading screen you need to edit the source:
uncomment \loader\include\global.h line 41:
#define SCREENSHOT

and add this code not in bold to /loader/source/main.c line around line 256 between the bold lines:

ncfg->VideoMode &= ~NIN_VID_PROG;

#ifdef SCREENSHOT
GRRLIB_DrawImg(0, 0, background, 0, 1, 1, 0xFFFFFFFF);
PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 50*1, MENU_POS_Y + 20*19, "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588");
PrintFormat(DEFAULT_SIZE, 0x45587C00, MENU_POS_X + 50*1, MENU_POS_Y + 20*19, "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588");
GRRLIB_ScrShot("Screenshot.png");
GRRLIB_DrawImg(0, 0, background, 0, 1, 1, 0xFFFFFFFF);
#endif

if((ncfg->Config & NIN_CFG_AUTO_BOOT) == 0)

My Nintendont Mod now uses works in the following manner:
you have to place either NinBackLight.png or NinBackDark.png in the boot.dol or loader dol folder
then you get 3 cases:
1. no NinBackLight.png or NinBackDark.png >> Nintendont boots normally using default background
2. NinBackDark.png is found >> Nintendont will hide all text and loads that background with a silver loading progress bar
3. NinBackLight.png is found or both files found >> Nintendont will hide all text and loads that background with a custom purple loading progress bar

In case B is pressed during autoboot, the default theme gets loaded automatically
Also the default background will load when launched from HBC with autoboot off

here's the download link for rev240 folder, 2 sample pngs included:
https://www.dropbox.com/sh/66yqzf5cduh9mqu/AAC8_gGflDH2mYmc574ZY4EGa?dl=0


sample NinBackDark.png file:
m7ch2q.png


And for rev 241 with both default font and Times New Roman font (latter has wider and sharper progress bar)

rev241 with default font
https://www.dropbox.com/sh/88s22zwolzyqmvr/AADG4fyk4Yha911LoAkj1dtVa?dl=0

rev241 with Times NR font
https://www.dropbox.com/sh/lipfp8a68jopufp/AACF2HoVcDCflwF33uove2NDa?dl=0

Backgrounds included in Dropbox folders for both the default font and the Times NR mod

rev247 using condensed default font to fix smoothness of progress bar
https://www.dropbox.com/sh/uyx1vtsgyuvr2ok/AACl2Vf_wiYV21qB53aARQI9a?dl=0

Colors and Hex codes:
For all the color codes: http://www.nthelp.com/colorcodes.htm
Unicode and UTF-8 Codes: http://www.utf8-chartable.de/unicode-utf8-table.pl?start=9600&number=128&names=-&utf8=string-literal
 
Last edited by AbdallahTerro,

DemitriArcane

Well-Known Member
Member
Joined
Nov 20, 2014
Messages
129
Trophies
0
Age
31
XP
80
Country
This is good thanks but i have a request. Could you make the Gamecube Intro into the loading screen for Nintendont. I would like to somehow see this boot before the game does, even if it is modified a little to show Nintendont Gamecube instead of nintendo. (Possibly Colour change the cube as well)

 

AbdallahTerro

da KiNG
OP
Member
Joined
Jan 14, 2012
Messages
6,052
Trophies
0
Location
Ideas factory :)
Website
ccabz.wordpress.com
XP
3,123
Country
That did the trick! Now I understand, all those ifs included the previous messages and that's why they overlapped. Thanks.
And sorry for filling this thread with posts about custom mods. It's a good idea to create a new thread.
correct me if I'm wrong:

To show one status at a time (to make things look like USBLoader GX loading screen for instance) you need to comment or delete all the if functions like the one below in bold with > and < function

if(STATUS_LOADING ==2)
PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*8, "Init SD device...");
if(STATUS_LOADING > 2 && STATUS_LOADING < 20)
PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*8, "Init SD device... Done!");
 

NicoCP

Well-Known Member
Newcomer
Joined
Aug 7, 2013
Messages
49
Trophies
0
Age
31
XP
74
Country
Argentina
correct me if I'm wrong:

To show one status at a time (to make things look like USBLoader GX loading screen for instance) you need to comment or delete all the if functions like the one below in bold with > and < function

if(STATUS_LOADING ==2)
PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*8, "Init SD device...");
if(STATUS_LOADING > 2 && STATUS_LOADING < 20)
PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*8, "Init SD device... Done!");


Yes, exactly.

I also deleted/commented the lines between brackets, for example:

if(STATUS_LOADING ==2)
PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*8, "Init SD device...");
if(STATUS_LOADING > 2 && STATUS_LOADING < 20)
PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*8, "Init SD device... Done!");

Or:

if(STATUS_LOADING ==2)
PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*8, "Init SD device...");
if(STATUS_LOADING > 2 && STATUS_LOADING < 20) {
PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*8, "Init SD device... Done!");
PrintFormat(DEFAULT_SIZE, BLACK, MENU_POS_X, MENU_POS_Y + 20*8, "Another text");
}
 

NicoCP

Well-Known Member
Newcomer
Joined
Aug 7, 2013
Messages
49
Trophies
0
Age
31
XP
74
Country
Argentina
I was working on a mod that when you load a game, you have the GameCube logo in the center, and all the verbose loading text is centered below that logo, on a single line.
That way, if something goes wrong while loading a game, it tells you what went wrong (like the original dol, but it doesn't fill the whole screen with text).

So far I made some little tests, and the changes I made are:
  • Change the font color to white (my background is black)
  • Comment all the ifs like "if(STATUS_LOADING > ....)" (including the PrintFormat under it)
  • Change where it prints the text, all set with the same MENU_POS_Y + some value and variable MENU_POS_X (depends on the lenght of the message)
Also, this only looks nice if you load games from an USB Loader. If you start Nintendont from the Homebrew Channel, well... it looks bad :P (the main menu and others, I only worked in the loading screen of a game)
I need to find a way to have another background for the main menu (or no background at all) to make it look good.
 

Acidflare

HomeBrew Beta Tester
Member
Joined
Aug 16, 2013
Messages
1,106
Trophies
0
Age
34
Location
Nether World
XP
268
Country
Canada
you could always try using ASCII art :P that would look cool I would definitely use an ASCII art loading screen for nintendon't

use ASCII art as text + Verbose
 

AbdallahTerro

da KiNG
OP
Member
Joined
Jan 14, 2012
Messages
6,052
Trophies
0
Location
Ideas factory :)
Website
ccabz.wordpress.com
XP
3,123
Country
I have many suggestions to the devs too to make this job easier and more productive:

1. allow background.png and font.ttf to be read from custom location before loading the default ones
2. also allow reading position, size, color and what not from a custom .ini file before loading the default ones
3. since zip files are supported the ini, png and ttf can be zipped and placed in a theme folder and themes selected from loader menu
4. allow custom background for sd/usb selection (game list)
5. animated gif support with ogg to make loading movies like gamecube movie
 
  • Like
Reactions: AlexandreKH

AbdallahTerro

da KiNG
OP
Member
Joined
Jan 14, 2012
Messages
6,052
Trophies
0
Location
Ideas factory :)
Website
ccabz.wordpress.com
XP
3,123
Country
oh and for the colors you need to use the hex value:
example White = 0xFFFFFF00
this is 0x(Red Value)(Green Value)(Blue Value)(transparency Value)
so red is 0xFF000000
blue is 0x0000FF00 and so on...
Any graphics editor or internet website can convert the color to this hex value in case you want custom colors
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • No one is chatting at the moment.
    K3Nv2 @ K3Nv2: Sorry for accidentally bending over