def install_nsp(nsp_file, usb_drive):
"""Installs an NSP game to a USB drive.
Args:
nsp_file: The path to the NSP file.
usb_drive: The path to the USB drive.
"""
# Create a temporary directory to store the extracted NSP files.
temp_dir = os.path.join(usb_drive, ".nsp_temp")
os.makedirs(temp_dir, exist_ok=True)
# Extract the NSP files to the temporary directory.
nx.archive.extract_nsp(nsp_file, temp_dir)
# Move the NSP files to the appropriate location on the USB drive.
nx.file.move(temp_dir, usb_drive)
# Delete the temporary directory.
os.rmdir(temp_dir)
def run_nsp(nsp_file, usb_drive):
"""Runs an NSP game from a USB drive.
Args:
nsp_file: The path to the NSP file.
usb_drive: The path to the USB drive.
"""
# Mount the USB drive.
nx.mount.mount_usb_drive(usb_drive)
# Start the NSP game.
nx.app.start_title(nsp_file)
# Unmount the USB drive.
nx.mount.unmount_usb_drive(usb_drive)
def main():
"""The main entry point for the homebrew app."""
# Get the path to the USB drive.
usb_drive = nx.interface.get_usb_drive_path()
# If the USB drive is not mounted, prompt the user to insert it.
if not nx.mount.is_usb_drive_mounted(usb_drive):
nx.console.log("Please insert a USB drive.")
nx.input.wait_for_button_press()
# Get the path to the NSP file.
nsp_file = nx.file.select_file()
# Install the NSP game to the USB drive.
install_nsp(nsp_file, usb_drive)
# Run the NSP game from the USB drive.
run_nsp(nsp_file, usb_drive)
if __name__ == "__main__":
main()
It just says:
To compile this Python application into a homebrew app, you can use the following command:
// Install an NSP game to an external USB drive.
void InstallNSPGameToUSB(const char* nsp_file, const char* usb_path) {
// Open the NSP game file.
FILE* file = fopen(nsp_file, "rb");
if (!file) {
return;
}
// Get the file size.
fseek(file, 0, SEEK_END);
size_t size = ftell(file);
fseek(file, 0, SEEK_SET);
// Allocate a buffer to store the NSP game file.
uint8_t* buffer = (uint8_t*)malloc(size);
if (!buffer) {
fclose(file);
return;
}
// Read the NSP game file into the buffer.
fread(buffer, 1, size, file);
fclose(file);
// Open the USB device.
handle_t usb_device;
swipc_usb_open(&usb_device, usb_path);
// Write the NSP game file to the USB device.
swipc_usb_write(usb_device, buffer, size);
// Close the USB device.
swipc_usb_close(usb_device);
// Free the buffer.
free(buffer);
}
// Uninstall an NSP game from an external USB drive.
void UninstallNSPGameFromUSB(const char* usb_path) {
// Open the USB device.
handle_t usb_device;
swipc_usb_open(&usb_device, usb_path);
// Remove the NSP game file from the USB device.
swipc_usb_remove(usb_device, "NSP");
// Close the USB device.
swipc_usb_close(usb_device);
}
// Run an NSP game from an external USB drive.
void RunNSPGameFromUSB(const char* usb_path) {
// Open the USB device.
handle_t usb_device;
swipc_usb_open(&usb_device, usb_path);
// Read the NSP game file from the USB device.
size_t size = swipc_usb_get_file_size(usb_device, "NSP");
uint8_t* buffer = (uint8_t*)malloc(size);
swipc_usb_read(usb_device, buffer, size, 0);
// Close the USB device.
swipc_usb_close(usb_device);
// Load the NSP game file into memory.
nx_applet_load_package_memory(buffer, size, 0);
// Start the NSP game.
nx_applet_start();
// Wait for the NSP game to exit.
nx_applet_wait();
// Free the buffer.
free(buffer);
}
int main(void) {
// Initialize the Nintendo Switch.
switch_init();
// Get the path to the NSP game file.
char* nsp_file = switch_select_file();
if (!nsp_file) {
switch_exit();
return 1;
}
// Get the path to the external USB drive.
char* usb_path = switch_select_path();
if (!usb_path) {
switch_exit();
return 1;
}
// Install the NSP game to the external USB drive.
InstallNSPGameToUSB(nsp_file, usb_path);
// Run the NSP game from the external USB drive.
RunNSPGameFromUSB(usb_path);
// Uninstall the NSP game from the external USB drive.
UninstallNSPGameFromUSB(usb_path);
Last month we got confirmation of a new model of Switch 2 to better comply with upcoming EU regulations. With the legislation set to come into effect in February of...
Ocarina of Time is back in style as the upcoming Switch 2 remake looms on the horizon. But what's a fan of the game to do over the next few months? If you've been...
Tired of waiting for Game Freak to bring Pokemon Emerald to modern platforms? We've got you covered with a brand new port in the works. Currently available on GitHub...
For fans of Sinnoh, the pickings are slim. If you want the best experience you're left deciding between the updated region in Platinum, or the somewhat controversial...
The Switch 2 has been out for a year now, but you shouldn't count the original system out yet! Released a few days ago, popular PS2 emulator NetherSX2 has found its...
If you've been waiting for an excuse to replay Super Mario Sunshine and happen to have up to nine friends, do I have some good news for you. Released earlier today...
Hot on the heels of their NetherSX2 port, @Nagaa is back with another hugely anticipated release: a Switch port of the popular Wii U emulator Cemu. We've got more...
The Pokemon series is known for its vast assortment of spin off titles, with the majority being well-received. We've had an assortment of Mystery Dungeon titles, a...
Right on the heels of a NetherSX2 port, the Switch once again proves it's still got some life left in it as 3DS emulation graces the system. Promising mostly...
In this time of everything costing more a year after it's released, it's nice to see some things sticking to the old ways. Capcom have today announced that the latest...
Last month we got confirmation of a new model of Switch 2 to better comply with upcoming EU regulations. With the legislation set to come into effect in February of...
Ocarina of Time is back in style as the upcoming Switch 2 remake looms on the horizon. But what's a fan of the game to do over the next few months? If you've been...
Tired of waiting for Game Freak to bring Pokemon Emerald to modern platforms? We've got you covered with a brand new port in the works. Currently available on GitHub...
Amidst news of layoffs and cancellations in the wake of Xbox's larger changes, Bethesda has today come out with a statement discussing their active projects. In this...
Announced today during the Octopath Traveler 8th Anniversary live stream, it's been confirmed that both the first game and its sequel will be launching on the Switch...
For fans of Sinnoh, the pickings are slim. If you want the best experience you're left deciding between the updated region in Platinum, or the somewhat controversial...
In this time of everything costing more a year after it's released, it's nice to see some things sticking to the old ways. Capcom have today announced that the latest...
It's a good time to be a first generation Pokemon fan. But when was it not a good time to be one? In recent weeks we've seen a native LOVE2D recreation of Pokemon Red...
If you've been waiting for an excuse to replay Super Mario Sunshine and happen to have up to nine friends, do I have some good news for you. Released earlier today...
The Pokemon series is known for its vast assortment of spin off titles, with the majority being well-received. We've had an assortment of Mystery Dungeon titles, a...