Here 's the start of QuickResolutionPlugin for Aroma, I'm running into compilation errors from the toolchain because I'm trying to build on osx. But if anyone wants to take this and build it who has the whole toolchain or improve it .... and post the wps plugin file back here. That would be Beyond incredible ...
The idea is the plugin displays your currently set resolution (not sure how its going to interpret 1080i setting )
then gives a user the option to choose between the three progressive resolutions : 1080p, 720p, 480p,
it then prompts users to confirm the resolution choice .... Then resets the system menu to your setting .....Seems simple ....
Here's the files for your viewing pleasure to get someone started, I'll attach them below ...
Makefile :
# -----------------------------
# QuickResolutionPlugin Makefile
# -----------------------------
TITLE := QuickResolution
TARGET := $(TITLE).elf
# Toolchain paths
DEVKITPRO_PATH := /System/Volumes/Data/opt/devkitpro
DEVKITPPC_PATH := $(DEVKITPRO_PATH)/devkitPPC
# Compiler (use GCC as C++ compiler)
CXX := $(DEVKITPPC_PATH)/bin/powerpc-eabi-gcc-15.2.0
# Source / Object files
SRC := source/main.cpp
OBJ := $(SRC:.cpp=.o)
# Include paths
CFLAGS := -std=gnu++20 -O2 -mcpu=powerpc -meabi -mhard-float \
-I$(DEVKITPRO_PATH)/wut/include \
-I$(DEVKITPRO_PATH)/wut/include/sysapp \
-I$(DEVKITPRO_PATH)/wut/include/padscore \
-I$(DEVKITPPC_PATH)/powerpc-eabi/include \
-I/Users/studio/Projects/WiiUPluginSystem/include
# Linker flags
LDFLAGS := -L$(DEVKITPRO_PATH)/wut/lib \
-L$(DEVKITPPC_PATH)/powerpc-eabi/lib \
-lcoreinit -lsysapp -lc -lgcc
# -----------------------------
# Default target
# -----------------------------
all: $(TARGET)
# Link ELF
$(TARGET): $(OBJ)
$(CXX) $(OBJ) -o $@ $(LDFLAGS)
# Compile C++ files using GCC
%.o: %.cpp
$(CXX) $(CFLAGS) -x c++ -c $< -o $@
# Clean build
clean:
rm -f $(OBJ) $(TARGET) $(TITLE).wps
# Package WUPS plugin
wps: all
zip -r $(TITLE).wps $(TARGET) meta/
meta/plugin.xml :
<plugin>
<name>Quick Resolution</name>
<author>Super64</author>
<version>1.0</version>
<description>
Quickly change Wii U display resolution.
Features:
- Current resolution status line
- Select 480p, 720p, 1080p
- Restart Menu only when ready
</description>
</plugin>
main.cpp :
#include <wups.h>
#include <wups/config.h>
#include <wups/config/WUPSConfigItemMultipleValues.h>
#include <wups/config/WUPSConfigItemBoolean.h>
#include <sysapp/config.h> // SYSAppGetInteger / SYSAppSetInteger / SYSAppSave
#include <sysapp/launch.h> // SYSLaunchMenu
#include <string>
#include <vector>
WUPS_PLUGIN_NAME("Quick Resolution");
WUPS_PLUGIN_DESCRIPTION("Quickly change Wii U display resolution");
WUPS_PLUGIN_VERSION("1.0");
WUPS_PLUGIN_AUTHOR("Super64");
WUPS_PLUGIN_LICENSE("GPL");
// -----------------------------
// Global plugin state
// -----------------------------
static int currentResolution = 1;
// Convert value to readable string
const char* ResolutionName(int value)
{
switch(value)
{
case 0: return "480p";
case 1: return "720p";
case 3: return "1080p";
default: return "Unknown";
}
}
// Set resolution and save
void SetResolution(int value)
{
currentResolution = value;
SYSAppSetInteger("/config/system/display/resolution", value);
SYSAppSave();
}
// Restart system menu
void RestartMenu()
{
SYSLaunchMenu();
}
// -----------------------------
// Plugin initialization
// -----------------------------
INITIALIZE_PLUGIN()
{
SYSAppGetInteger("/config/system/display/resolution", ¤tResolution);
}
// -----------------------------
// Callbacks
// -----------------------------
void OnResolutionChanged(WUPSConfigItemMultipleValues* item, int32_t newValue)
{
(void)item; // unused
SetResolution(newValue);
}
void OnRestartToggled(WUPSConfigItemBoolean* item, bool value)
{
(void)item; (void)value;
RestartMenu();
}
// -----------------------------
// Config menu items (global scope)
// -----------------------------
static const std::vector<WUPSConfigItemMultipleValues::ValuePair> resolutionOptions = {
{0, "480p"},
{1, "720p"},
{3, "1080p"}
};
static auto resolutionDropdown = WUPSConfigItemMultipleValues::CreateFromIndex(
std::optional<std::string>("resolution"),
"Display Resolution",
currentResolution,
0,
resolutionOptions.size() - 1,
std::span<const WUPSConfigItemMultipleValues::ValuePair>(resolutionOptions.data(), resolutionOptions.size()),
OnResolutionChanged
);
static auto restartButton = WUPSConfigItemBoolean::Create(
std::optional<std::string>("restart_menu"),
"Restart System Menu",
false,
false,
OnRestartToggled
);
// Register config items
WUPS_CONFIG_ITEMS(
&resolutionDropdown,
&restartButton
);
'QuickResolution' plugin folder has the Makefile and two folders ....one folder is 'meta', with the meta/plugin.xml file and the other folder is 'source' with the main.cpp file
.
The idea is the plugin displays your currently set resolution (not sure how its going to interpret 1080i setting )
then gives a user the option to choose between the three progressive resolutions : 1080p, 720p, 480p,
it then prompts users to confirm the resolution choice .... Then resets the system menu to your setting .....Seems simple ....
Here's the files for your viewing pleasure to get someone started, I'll attach them below ...
Makefile :
# -----------------------------
# QuickResolutionPlugin Makefile
# -----------------------------
TITLE := QuickResolution
TARGET := $(TITLE).elf
# Toolchain paths
DEVKITPRO_PATH := /System/Volumes/Data/opt/devkitpro
DEVKITPPC_PATH := $(DEVKITPRO_PATH)/devkitPPC
# Compiler (use GCC as C++ compiler)
CXX := $(DEVKITPPC_PATH)/bin/powerpc-eabi-gcc-15.2.0
# Source / Object files
SRC := source/main.cpp
OBJ := $(SRC:.cpp=.o)
# Include paths
CFLAGS := -std=gnu++20 -O2 -mcpu=powerpc -meabi -mhard-float \
-I$(DEVKITPRO_PATH)/wut/include \
-I$(DEVKITPRO_PATH)/wut/include/sysapp \
-I$(DEVKITPRO_PATH)/wut/include/padscore \
-I$(DEVKITPPC_PATH)/powerpc-eabi/include \
-I/Users/studio/Projects/WiiUPluginSystem/include
# Linker flags
LDFLAGS := -L$(DEVKITPRO_PATH)/wut/lib \
-L$(DEVKITPPC_PATH)/powerpc-eabi/lib \
-lcoreinit -lsysapp -lc -lgcc
# -----------------------------
# Default target
# -----------------------------
all: $(TARGET)
# Link ELF
$(TARGET): $(OBJ)
$(CXX) $(OBJ) -o $@ $(LDFLAGS)
# Compile C++ files using GCC
%.o: %.cpp
$(CXX) $(CFLAGS) -x c++ -c $< -o $@
# Clean build
clean:
rm -f $(OBJ) $(TARGET) $(TITLE).wps
# Package WUPS plugin
wps: all
zip -r $(TITLE).wps $(TARGET) meta/
meta/plugin.xml :
<plugin>
<name>Quick Resolution</name>
<author>Super64</author>
<version>1.0</version>
<description>
Quickly change Wii U display resolution.
Features:
- Current resolution status line
- Select 480p, 720p, 1080p
- Restart Menu only when ready
</description>
</plugin>
main.cpp :
#include <wups.h>
#include <wups/config.h>
#include <wups/config/WUPSConfigItemMultipleValues.h>
#include <wups/config/WUPSConfigItemBoolean.h>
#include <sysapp/config.h> // SYSAppGetInteger / SYSAppSetInteger / SYSAppSave
#include <sysapp/launch.h> // SYSLaunchMenu
#include <string>
#include <vector>
WUPS_PLUGIN_NAME("Quick Resolution");
WUPS_PLUGIN_DESCRIPTION("Quickly change Wii U display resolution");
WUPS_PLUGIN_VERSION("1.0");
WUPS_PLUGIN_AUTHOR("Super64");
WUPS_PLUGIN_LICENSE("GPL");
// -----------------------------
// Global plugin state
// -----------------------------
static int currentResolution = 1;
// Convert value to readable string
const char* ResolutionName(int value)
{
switch(value)
{
case 0: return "480p";
case 1: return "720p";
case 3: return "1080p";
default: return "Unknown";
}
}
// Set resolution and save
void SetResolution(int value)
{
currentResolution = value;
SYSAppSetInteger("/config/system/display/resolution", value);
SYSAppSave();
}
// Restart system menu
void RestartMenu()
{
SYSLaunchMenu();
}
// -----------------------------
// Plugin initialization
// -----------------------------
INITIALIZE_PLUGIN()
{
SYSAppGetInteger("/config/system/display/resolution", ¤tResolution);
}
// -----------------------------
// Callbacks
// -----------------------------
void OnResolutionChanged(WUPSConfigItemMultipleValues* item, int32_t newValue)
{
(void)item; // unused
SetResolution(newValue);
}
void OnRestartToggled(WUPSConfigItemBoolean* item, bool value)
{
(void)item; (void)value;
RestartMenu();
}
// -----------------------------
// Config menu items (global scope)
// -----------------------------
static const std::vector<WUPSConfigItemMultipleValues::ValuePair> resolutionOptions = {
{0, "480p"},
{1, "720p"},
{3, "1080p"}
};
static auto resolutionDropdown = WUPSConfigItemMultipleValues::CreateFromIndex(
std::optional<std::string>("resolution"),
"Display Resolution",
currentResolution,
0,
resolutionOptions.size() - 1,
std::span<const WUPSConfigItemMultipleValues::ValuePair>(resolutionOptions.data(), resolutionOptions.size()),
OnResolutionChanged
);
static auto restartButton = WUPSConfigItemBoolean::Create(
std::optional<std::string>("restart_menu"),
"Restart System Menu",
false,
false,
OnRestartToggled
);
// Register config items
WUPS_CONFIG_ITEMS(
&resolutionDropdown,
&restartButton
);
'QuickResolution' plugin folder has the Makefile and two folders ....one folder is 'meta', with the meta/plugin.xml file and the other folder is 'source' with the main.cpp file
.






