Skip to content

Instantly share code, notes, and snippets.

@jarrodnorwell
Last active April 19, 2025 11:10
Show Gist options
  • Save jarrodnorwell/7c6c798b800087baa71e459f36f96788 to your computer and use it in GitHub Desktop.
Save jarrodnorwell/7c6c798b800087baa71e459f36f96788 to your computer and use it in GitHub Desktop.
-(void) updateSettings {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
bool (^boolean)(NSString *) = ^bool(NSString *key) { return [defaults boolForKey:key]; };
float (^_float)(NSString *) = ^float(NSString *key) { return [[NSNumber numberWithDouble:[defaults doubleForKey:key]] floatValue]; };
s32 (^signed32)(NSString *) = ^s32(NSString *key) { return [[NSNumber numberWithDouble:[defaults doubleForKey:key]] intValue]; };
u16 (^unsigned16)(NSString *) = ^u16(NSString *key) { return [[NSNumber numberWithDouble:[defaults doubleForKey:key]] intValue]; };
u32 (^unsigned32)(NSString *) = ^u32(NSString *key) { return [[NSNumber numberWithDouble:[defaults doubleForKey:key]] intValue]; };
std::string (^string)(NSString *) = ^std::string(NSString *key) { return std::string{[[defaults stringForKey:key] UTF8String]}; };
Settings::values.camera_name[Service::CAM::InnerCamera] = "av_front";
Settings::values.camera_name[Service::CAM::OuterLeftCamera] = "av_rear";
Settings::values.camera_name[Service::CAM::OuterLeftCamera] = "av_rear";
// Core
Settings::values.use_cpu_jit.SetValue(boolean(@"cytrus.cpuJIT"));
Settings::values.cpu_clock_percentage.SetValue(signed32(@"cytrus.cpuClockPercentage"));
Settings::values.is_new_3ds.SetValue(boolean(@"cytrus.new3DS"));
Settings::values.lle_applets.SetValue(boolean(@"cytrus.lleApplets"));
Settings::values.deterministic_async_operations.SetValue(boolean(@"cytrus.deterministicAsyncOperations"));
Settings::values.enable_required_online_lle_modules.SetValue(boolean(@"cytrus.enableRequiredOnlineLLEModules"));
// System
Settings::values.region_value.SetValue(signed32(@"cytrus.regionValue"));
Settings::values.plugin_loader_enabled.SetValue(boolean(@"cytrus.pluginLoader"));
Settings::values.allow_plugin_loader.SetValue(boolean(@"cytrus.allowPluginLoader"));
Settings::values.steps_per_hour.SetValue(unsigned16(@"cytrus.stepsPerHour"));
// Renderer
Settings::values.spirv_shader_gen.SetValue(boolean(@"cytrus.spirvShaderGeneration"));
Settings::values.async_shader_compilation.SetValue(boolean(@"cytrus.useAsyncShaderCompilation"));
Settings::values.async_presentation.SetValue(boolean(@"cytrus.useAsyncPresentation"));
Settings::values.use_hw_shader.SetValue(boolean(@"cytrus.useHardwareShaders"));
Settings::values.use_disk_shader_cache.SetValue(boolean(@"cytrus.useDiskShaderCache"));
Settings::values.shaders_accurate_mul.SetValue(boolean(@"cytrus.useShadersAccurateMul"));
Settings::values.use_vsync_new.SetValue(boolean(@"cytrus.useNewVSync"));
Settings::values.use_shader_jit.SetValue(boolean(@"cytrus.useShaderJIT"));
Settings::values.resolution_factor.SetValue(unsigned32(@"cytrus.resolutionFactor"));
Settings::values.texture_filter.SetValue(static_cast<Settings::TextureFilter>(unsigned32(@"cytrus.textureFilter")));
Settings::values.texture_sampling.SetValue(static_cast<Settings::TextureSampling>(unsigned32(@"cytrus.textureSampling")));
Settings::values.delay_game_render_thread_us.SetValue(unsigned16(@"cytrus.delayGameRenderThreadUS"));
Settings::values.layout_option.SetValue(static_cast<Settings::LayoutOption>(unsigned32(@"cytrus.layoutOption")));
Settings::values.custom_top_x.SetValue(unsigned16(@"cytrus.customTopX"));
Settings::values.custom_top_y.SetValue(unsigned16(@"cytrus.customTopY"));
Settings::values.custom_top_width.SetValue(unsigned16(@"cytrus.customTopWidth"));
Settings::values.custom_top_height.SetValue(unsigned16(@"cytrus.customTopHeight"));
Settings::values.custom_bottom_x.SetValue(unsigned16(@"cytrus.customBottomX"));
Settings::values.custom_bottom_y.SetValue(unsigned16(@"cytrus.customBottomY"));
Settings::values.custom_bottom_width.SetValue(unsigned16(@"cytrus.customBottomWidth"));
Settings::values.custom_bottom_height.SetValue(unsigned16(@"cytrus.customBottomHeight"));
Settings::values.custom_second_layer_opacity.SetValue(unsigned16(@"cytrus.customSecondLayerOpacity"));
Settings::values.render_3d.SetValue(static_cast<Settings::StereoRenderOption>(unsigned32(@"cytrus.render3D")));
Settings::values.factor_3d.SetValue(unsigned32(@"cytrus.factor3D"));
Settings::values.mono_render_option.SetValue(static_cast<Settings::MonoRenderOption>(unsigned32(@"cytrus.monoRender")));
Settings::values.filter_mode.SetValue(boolean(@"cytrus.filterMode"));
Settings::values.pp_shader_name.SetValue(string(@"cytrus.ppShaderName"));
Settings::values.anaglyph_shader_name.SetValue(string(@"cytrus.anaglyphShaderName"));
Settings::values.dump_textures.SetValue(boolean(@"cytrus.dumpTextures"));
Settings::values.custom_textures.SetValue(boolean(@"cytrus.customTextures"));
Settings::values.preload_textures.SetValue(boolean(@"cytrus.preloadTextures"));
Settings::values.async_custom_loading.SetValue(boolean(@"cytrus.asyncCustomLoading"));
Settings::values.disable_right_eye_render.SetValue(boolean(@"cytrus.disableRightEyeRender"));
// Audio
Settings::values.audio_muted = boolean(@"cytrus.audioMuted");
Settings::values.audio_emulation.SetValue(static_cast<Settings::AudioEmulation>(unsigned32(@"cytrus.audioEmulation")));
Settings::values.enable_audio_stretching.SetValue(boolean(@"cytrus.audioStretching"));
Settings::values.enable_realtime_audio.SetValue(boolean(@"cytrus.realtimeAudio"));
Settings::values.volume.SetValue(_float(@"cytrus.volume"));
Settings::values.output_type.SetValue(static_cast<AudioCore::SinkType>(unsigned32(@"cytrus.outputType")));
Settings::values.input_type.SetValue(static_cast<AudioCore::InputType>(unsigned32(@"cytrus.inputType")));
// Miscellaneous
std::string log_filter{"*:Info"};
switch ([defaults integerForKey:@"cytrus.logLevel"]) {
case 0:
log_filter = std::string{"*:Trace"};
break;
case 1:
log_filter = std::string{"*:Debug"};
break;
case 2:
log_filter = std::string{"*:Info"};
break;
case 3:
log_filter = std::string{"*:Warning"};
break;
case 4:
log_filter = std::string{"*:Error"};
break;
case 5:
log_filter = std::string{"*:Critical"};
break;
default:
break;
}
Settings::values.log_filter.SetValue(log_filter);
NetSettings::values.web_api_url = string(@"cytrus.webAPIURL");
Common::Log::Filter filter;
filter.ParseFilterString(Settings::values.log_filter.GetValue());
Common::Log::SetGlobalFilter(filter);
/*
case systemLanguage = "cytrus.systemLanguage"
case username = "cytrus.username"
*/
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment