From 14f98e4b30f1b25460a1c6f6238617d27c03cb94 Mon Sep 17 00:00:00 2001 From: Sunk <69110309+Sunketchupm@users.noreply.github.com> Date: Sun, 16 Mar 2025 23:04:09 -0400 Subject: [PATCH] Add automatic toggle (#707) --- lang/Czech.ini | 3 +++ lang/Dutch.ini | 3 +++ lang/English.ini | 3 +++ lang/French.ini | 3 +++ lang/German.ini | 3 +++ lang/Italian.ini | 3 +++ lang/Japanese.ini | 3 +++ lang/Polish.ini | 3 +++ lang/Portuguese.ini | 3 +++ lang/Russian.ini | 3 +++ lang/Spanish.ini | 3 +++ src/game/camera.c | 9 +++++++-- src/game/camera.h | 6 ++++++ src/pc/configfile.c | 4 ++-- src/pc/configfile.h | 2 +- src/pc/djui/djui_panel_camera.c | 3 ++- 16 files changed, 51 insertions(+), 6 deletions(-) diff --git a/lang/Czech.ini b/lang/Czech.ini index ecb291b78..cc0380e3e 100644 --- a/lang/Czech.ini +++ b/lang/Czech.ini @@ -75,6 +75,9 @@ FREE_CAMERA_USE_DPAD = "Chování DPad" FREE_CAMERA_COLLISION = "Kolize kamery" ROMHACK_CAMERA_TITLE = "ROMHACK\KAMERA" ROMHACK_CAMERA = "Romhack kamera" +ROMHACK_CAMERA_AUTOMATIC = "Automaticky" +ROMHACK_CAMERA_ON = "Zapnuto" +ROMHACK_CAMERA_Off = "Vypnuto" ROMHACK_CAMERA_IN_BOWSER = "Použít v soubojích s Bowserem" ROMHACK_CAMERA_COLLISION = "Kolize kamery" ROMHACK_CAMERA_L_CENTERING = "L Centrování" diff --git a/lang/Dutch.ini b/lang/Dutch.ini index 7612dbaa6..ab263c583 100644 --- a/lang/Dutch.ini +++ b/lang/Dutch.ini @@ -75,6 +75,9 @@ FREE_CAMERA_USE_DPAD = "DPad-gedrag" FREE_CAMERA_COLLISION = "Camera-botsingen" ROMHACK_CAMERA_TITLE = "ROMHACK\nCAMERA" ROMHACK_CAMERA = "Romhack Camera" +ROMHACK_CAMERA_AUTOMATIC = "Automatisch" +ROMHACK_CAMERA_ON = "Aan" +ROMHACK_CAMERA_Off = "Uit" ROMHACK_CAMERA_IN_BOWSER = "Gebruik in Bowser-gevechten" ROMHACK_CAMERA_COLLISION = "Camera botsingen" ROMHACK_CAMERA_L_CENTERING = "L-centrering" diff --git a/lang/English.ini b/lang/English.ini index fbe4e04e0..d34f6cbb9 100644 --- a/lang/English.ini +++ b/lang/English.ini @@ -75,6 +75,9 @@ FREE_CAMERA_USE_DPAD = "DPad Behavior" FREE_CAMERA_COLLISION = "Camera Collisions" ROMHACK_CAMERA_TITLE = "ROMHACK\nCAMERA" ROMHACK_CAMERA = "Romhack Camera" +ROMHACK_CAMERA_AUTOMATIC = "Automatic" +ROMHACK_CAMERA_ON = "On" +ROMHACK_CAMERA_Off = "Off" ROMHACK_CAMERA_IN_BOWSER = "Use in Bowser fights" ROMHACK_CAMERA_COLLISION = "Camera Collisions" ROMHACK_CAMERA_L_CENTERING = "L Centering" diff --git a/lang/French.ini b/lang/French.ini index e6aa72c8d..56caaf831 100644 --- a/lang/French.ini +++ b/lang/French.ini @@ -75,6 +75,9 @@ FREE_CAMERA_USE_DPAD = "Comportement du DPAD" FREE_CAMERA_COLLISION = "Collisions de la caméra" ROMHACK_CAMERA_TITLE = "CAMÉRA\nROMHACK" ROMHACK_CAMERA = "Caméra Romhack" +ROMHACK_CAMERA_AUTOMATIC = "Automatique" +ROMHACK_CAMERA_ON = "Activé" +ROMHACK_CAMERA_Off = "Désactivé" ROMHACK_CAMERA_IN_BOWSER = "Utiliser dans les combats contre Bowser" ROMHACK_CAMERA_COLLISION = "Collisions de caméra" ROMHACK_CAMERA_L_CENTERING = "Centrage en L" diff --git a/lang/German.ini b/lang/German.ini index ea612a579..db3f43b8d 100644 --- a/lang/German.ini +++ b/lang/German.ini @@ -75,6 +75,9 @@ FREE_CAMERA_USE_DPAD = "DPad-Verhalten" FREE_CAMERA_COLLISION = "Kamerakollisionen" ROMHACK_CAMERA_TITLE = "ROMHACK\nKAMERA" ROMHACK_CAMERA = "Romhack-Kamera" +ROMHACK_CAMERA_AUTOMATIC = "Automatisch" +ROMHACK_CAMERA_ON = "Ein" +ROMHACK_CAMERA_Off = "Aus" ROMHACK_CAMERA_IN_BOWSER = "In Bowser-Kämpfen verwenden" ROMHACK_CAMERA_COLLISION = "Kamerakollisionen" ROMHACK_CAMERA_L_CENTERING = "L-Zentrierung" diff --git a/lang/Italian.ini b/lang/Italian.ini index 08f2551f0..16ea46ebc 100644 --- a/lang/Italian.ini +++ b/lang/Italian.ini @@ -75,6 +75,9 @@ FREE_CAMERA_USE_DPAD = "Comportamento del DPad" FREE_CAMERA_COLLISION = "Collisioni della telecamera" ROMHACK_CAMERA_TITLE = "TELECAMERA\nROMHACK" ROMHACK_CAMERA = "Telecamera Romhack" +ROMHACK_CAMERA_AUTOMATIC = "Automatico" +ROMHACK_CAMERA_ON = "Acceso" +ROMHACK_CAMERA_Off = "Spento" ROMHACK_CAMERA_IN_BOWSER = "Da usare nei combattimenti con Bowser" ROMHACK_CAMERA_COLLISION = "Collisioni della telecamera" ROMHACK_CAMERA_L_CENTERING = "Centratura a L" diff --git a/lang/Japanese.ini b/lang/Japanese.ini index 3395bfd2e..b4a76a407 100644 --- a/lang/Japanese.ini +++ b/lang/Japanese.ini @@ -75,6 +75,9 @@ FREE_CAMERA_USE_DPAD = "DPad の動作" FREE_CAMERA_COLLISION = "カメラの衝突" ROMHACK_CAMERA_TITLE = "ROMHACK\nCAMERA" ROMHACK_CAMERA = "ロムハックカメラ" +ROMHACK_CAMERA_AUTOMATIC = "自動" +ROMHACK_CAMERA_ON = "オン" +ROMHACK_CAMERA_OFF = "オフ" ROMHACK_CAMERA_IN_BOWSER = "クッパ戦で使用" ROMHACK_CAMERA_COLLISION = "カメラの衝突" ROMHACK_CAMERA_L_CENTERING = "Lセンタリング" diff --git a/lang/Polish.ini b/lang/Polish.ini index 26141e4a6..ff9bccd60 100644 --- a/lang/Polish.ini +++ b/lang/Polish.ini @@ -75,6 +75,9 @@ FREE_CAMERA_USE_DPAD = "Zachowanie DPada" FREE_CAMERA_COLLISION = "Kolizje kamery" ROMHACK_CAMERA_TITLE = "KAMERA\nROMHACK" ROMHACK_CAMERA = "Kamera Romhack" +ROMHACK_CAMERA_AUTOMATIC = "Automatyczny" +ROMHACK_CAMERA_ON = "Włączony" +ROMHACK_CAMERA_Off = "Wył" ROMHACK_CAMERA_IN_BOWSER = "Używaj w walkach z Bowserem" ROMHACK_CAMERA_COLLISION = "Kolizje kamery" ROMHACK_CAMERA_L_CENTERING = "Wyśrodkowanie L" diff --git a/lang/Portuguese.ini b/lang/Portuguese.ini index 10869f926..040320c74 100644 --- a/lang/Portuguese.ini +++ b/lang/Portuguese.ini @@ -75,6 +75,9 @@ FREE_CAMERA_USE_DPAD = "Usar D-Pad" FREE_CAMERA_COLLISION = "Colisões da câmera" ROMHACK_CAMERA_TITLE = "CÂMERA\nROMHACK" ROMHACK_CAMERA = "Câmera Romhack" +ROMHACK_CAMERA_AUTOMATIC = "Automático" +ROMHACK_CAMERA_ON = "Ligada" +ROMHACK_CAMERA_Off = "Desligada" ROMHACK_CAMERA_IN_BOWSER = "Usar em lutas com o Bowser" ROMHACK_CAMERA_COLLISION = "Colisões da câmera" ROMHACK_CAMERA_L_CENTERING = "Centralizar com L" diff --git a/lang/Russian.ini b/lang/Russian.ini index a1dd39eea..966eab8b3 100644 --- a/lang/Russian.ini +++ b/lang/Russian.ini @@ -75,6 +75,9 @@ FREE_CAMERA_USE_DPAD = "Поведение DPad" FREE_CAMERA_COLLISION = "Коллизии камеры" ROMHACK_CAMERA_TITLE = "ROMHACK\nCAMERA" ROMHACK_CAMERA = "Камера Romhack" +ROMHACK_CAMERA_AUTOMATIC = "Автоматически" +ROMHACK_CAMERA_ON = "Вкл" +ROMHACK_CAMERA_Off = "Выключено" ROMHACK_CAMERA_IN_BOWSER = "Использовать в боях с Боузером" ROMHACK_CAMERA_COLLISION = "Коллизии камеры" ROMHACK_CAMERA_L_CENTERING = "Центрирование L" diff --git a/lang/Spanish.ini b/lang/Spanish.ini index 074c8bf44..83e74658e 100644 --- a/lang/Spanish.ini +++ b/lang/Spanish.ini @@ -75,6 +75,9 @@ FREE_CAMERA_USE_DPAD = "Comportamiento del DPad" FREE_CAMERA_COLLISION = "Colisiones de la cámara" ROMHACK_CAMERA_TITLE = "CÁMARA\nROMHACK" ROMHACK_CAMERA = "Cámara Romhack" +ROMHACK_CAMERA_AUTOMATIC = "Automática" +ROMHACK_CAMERA_ON = "Encendida" +ROMHACK_CAMERA_Off = "Apagada" ROMHACK_CAMERA_IN_BOWSER = "Usar en peleas con Bowser" ROMHACK_CAMERA_COLLISION = "Colisiones de cámara" ROMHACK_CAMERA_L_CENTERING = "Centrado L" diff --git a/src/game/camera.c b/src/game/camera.c index 3a8046607..1ba0c7c2d 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -12199,8 +12199,13 @@ s32 snap_to_45_degrees(s16 angle) { void romhack_camera_init_settings(void) { if (gRomhackCameraSettings.modsOnly) { return; } - enum RomhackCameraOverride override = configEnableRomhackCamera ? - (configRomhackCameraBowserFights ? RCO_ALL_INCLUDING_VANILLA : RCO_ALL_VANILLA_EXCEPT_BOWSER) : RCO_DISABLE; + enum RomhackCameraOverride override = RCO_DISABLE; + if (configEnableRomhackCamera == RCE_AUTOMATIC) { + override = configRomhackCameraBowserFights ? RCO_ALL : RCO_ALL_EXCEPT_BOWSER; + } else if (configEnableRomhackCamera == RCE_ON) { + override = configRomhackCameraBowserFights ? RCO_ALL_INCLUDING_VANILLA : RCO_ALL_VANILLA_EXCEPT_BOWSER; + } + gRomhackCameraSettings.enable = override; gCameraUseCourseSpecificSettings = (override == RCO_DISABLE && dynos_level_is_vanilla_level(gCurrLevelNum)); gRomhackCameraSettings.collisions = configRomhackCameraHasCollision; diff --git a/src/game/camera.h b/src/game/camera.h index ffda0647a..4371cc168 100644 --- a/src/game/camera.h +++ b/src/game/camera.h @@ -19,6 +19,12 @@ enum RomhackCameraOverride { RCO_DISABLE }; +enum RomhackCameraEnable { + RCE_AUTOMATIC, + RCE_ON, + RCE_OFF +}; + struct RomhackCameraSettings { enum RomhackCameraOverride enable; u8 centering; diff --git a/src/pc/configfile.c b/src/pc/configfile.c index 440b6160b..fd4b285d8 100644 --- a/src/pc/configfile.c +++ b/src/pc/configfile.c @@ -138,7 +138,7 @@ unsigned int configCameraAggr = 0; unsigned int configCameraPan = 0; unsigned int configCameraDegrade = 50; // 0 - 100% // romhack camera settings -bool configEnableRomhackCamera = false; +unsigned int configEnableRomhackCamera = 0; // 0 for automatic, 1 for force on, 2 for force off bool configRomhackCameraBowserFights = false; bool configRomhackCameraHasCollision = false; bool configRomhackCameraHasCentering = false; @@ -283,7 +283,7 @@ static const struct ConfigOption options[] = { {.name = "bettercam_pan_level", .type = CONFIG_TYPE_UINT, .uintValue = &configCameraPan}, {.name = "bettercam_degrade", .type = CONFIG_TYPE_UINT, .uintValue = &configCameraDegrade}, // romhack camera settings - {.name = "romhackcam_enable", .type = CONFIG_TYPE_BOOL, .boolValue = &configEnableRomhackCamera}, + {.name = "romhackcam_enable", .type = CONFIG_TYPE_UINT, .uintValue = &configEnableRomhackCamera}, {.name = "romhackcam_bowser", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraBowserFights}, {.name = "romhackcam_collision", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraHasCollision}, {.name = "romhackcam_centering", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraHasCentering}, diff --git a/src/pc/configfile.h b/src/pc/configfile.h index cf88e88b7..d68b007ce 100644 --- a/src/pc/configfile.h +++ b/src/pc/configfile.h @@ -90,7 +90,7 @@ extern unsigned int configCameraAggr; extern unsigned int configCameraPan; extern unsigned int configCameraDegrade; // romhack camera settings -extern bool configEnableRomhackCamera; +extern unsigned int configEnableRomhackCamera; extern bool configRomhackCameraBowserFights; extern bool configRomhackCameraHasCollision; extern bool configRomhackCameraHasCentering; diff --git a/src/pc/djui/djui_panel_camera.c b/src/pc/djui/djui_panel_camera.c index b89906631..ed367dd1a 100644 --- a/src/pc/djui/djui_panel_camera.c +++ b/src/pc/djui/djui_panel_camera.c @@ -41,7 +41,8 @@ void djui_panel_romhack_camera_create(struct DjuiBase* caller) { struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(CAMERA, ROMHACK_CAMERA_TITLE), false); struct DjuiBase* body = djui_three_panel_get_body(panel); { - djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA), &configEnableRomhackCamera, djui_panel_romhack_camera_value_changed); + char* choices[3] = { DLANG(CAMERA, ROMHACK_CAMERA_AUTOMATIC), DLANG(CAMERA, ROMHACK_CAMERA_ON), DLANG(CAMERA, ROMHACK_CAMERA_OFF) }; + djui_selectionbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA), choices, 3, &configEnableRomhackCamera, djui_panel_romhack_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_IN_BOWSER), &configRomhackCameraBowserFights, djui_panel_romhack_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_COLLISION), &configRomhackCameraHasCollision, djui_panel_romhack_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_L_CENTERING), &configRomhackCameraHasCentering, djui_panel_romhack_camera_value_changed);