From f880be6998c92547fdd7eb9268a40379b058df33 Mon Sep 17 00:00:00 2001 From: Reonu Date: Tue, 11 Jan 2022 16:11:58 +0000 Subject: [PATCH 01/36] reonucam initial commit --- include/config/config_camera.h | 33 +- include/text_strings.h.in | 552 ++++++++++++++++++++++++++++++ src/game/camera.c | 127 ++++++- src/game/camera.h | 12 + src/game/game_init.c | 4 + src/game/ingame_menu.c | 53 +++ src/game/mario.c | 14 + src/game/mario_actions_airborne.c | 14 + src/game/save_file.c | 13 + src/game/save_file.h | 8 +- 10 files changed, 821 insertions(+), 9 deletions(-) create mode 100644 include/text_strings.h.in diff --git a/include/config/config_camera.h b/include/config/config_camera.h index 3fea62ba16..6f1359dfe8 100644 --- a/include/config/config_camera.h +++ b/include/config/config_camera.h @@ -49,12 +49,14 @@ */ // #define PUPPYCAM -/** - * Note: Reonucam is available, but because we had no time to test it properly, it's included as a patch rather than being in the code by default. - * Run this command to apply the patch if you want to use it: - * tools/apply_patch.sh enhancements/reonucam.patch - * Consider it a beta, but it should work fine. Please report any bugs with it. Applying the patch will simply add a define here, so you can still turn it off even after patching. - */ +// Enables Reonucam, a custom camera that aims to be a more feature-rich "aglabcam" that also uses less buttons. +// An explanation the features can be seen here: https://www.youtube.com/watch?v=TQNkznX9Z3k (please note that the analog feature shown at the end is no longer present) +// #define REONUCAM + +// Note: Reonucam is available, but because we had no time to test it properly, it's included as a patch rather than being in the code by default. +// Run this command to apply the patch if you want to use it: +// tools/apply_patch.sh enhancements/reonucam.patch +// Consider it a beta, but it should work fine. Please report any bugs with it. Applying the patch will simply add a define here, so you can still turn it off even after patching. /**********************************/ /***** Vanilla config options *****/ @@ -74,3 +76,22 @@ #ifdef ENABLE_VANILLA_LEVEL_SPECIFIC_CHECKS #define ENABLE_VANILLA_CAM_PROCESSING #endif + +// Reonucam overrides +#ifdef REONUCAM + // Use course default mode + #ifndef USE_COURSE_DEFAULT_MODE + #define USE_COURSE_DEFAULT_MODE + #endif + + // Force camera mode to 8 Dir + #ifdef FORCED_CAMERA_MODE + #undef FORCED_CAMERA_MODE + #endif + #define FORCED_CAMERA_MODE CAMERA_MODE_8_DIRECTIONS + + // Disable vanilla cam processing + #ifdef ENABLE_VANILLA_CAM_PROCESSING + #undef ENABLE_VANILLA_CAM_PROCESSING + #endif +#endif diff --git a/include/text_strings.h.in b/include/text_strings.h.in new file mode 100644 index 0000000000..22b43a2f42 --- /dev/null +++ b/include/text_strings.h.in @@ -0,0 +1,552 @@ +#ifndef TEXT_STRINGS_H +#define TEXT_STRINGS_H + +#include "text_menu_strings.h" + +#if defined(PUPPYCAM) +#define NC_CAMX_EN _("Camera X Sensitivity") +#define NC_CAMY_EN _("Camera Y Sensitivity") +#define NC_INVERTX_EN _("Invert X Axis") +#define NC_INVERTY_EN _("Invert Y Axis") +#define NC_CAMC_EN _("Camera Centre Speed") +#define NC_ANALOGUE_EN _("Analogue Camera") +#define NC_SCHEME_EN _("Control Scheme") +#define OPTION_ENABLED_EN _("Enabled") +#define OPTION_DISABLED_EN _("Disabled") +#define OPTION_SCHEME1_EN _("Double Tap") +#define OPTION_SCHEME2_EN _("Single Press") +#define OPTION_SCHEME3_EN _("Classic") +#define OPTION_LANGUAGE_EN _("Language") +#define NC_WIDE_EN _("Widescreen") +#define NC_HIGHLIGHT_L _(">") +#define NC_HIGHLIGHT_R _("<") +#define NC_BUTTON_EN _("[R]: Options") +#define NC_BUTTON2_EN _("[R]: Return") +#define NC_OPTION_EN _("OPTIONS") + +#if MULTILANG +#define NC_CAMX_FR _("Sensibilite sur l'axe X") +#define NC_CAMY_FR _("Sensibilite sur l'axe Y") +#define NC_INVERTX_FR _("Invertir Axe X") +#define NC_INVERTY_FR _("Invertir Axe Y") +#define NC_CAMC_FR _("Vitesse de Centrage") +#define NC_ANALOGUE_FR _("Camera Analogue") +#define NC_SCHEME_FR _("Control Scheme") +#define OPTION_ENABLED_FR _("Active") +#define OPTION_DISABLED_FR _("Desactive") +#define OPTION_SCHEME1_FR _("Double Tap") +#define OPTION_SCHEME2_FR _("Single Press") +#define OPTION_SCHEME3_FR _("Classic") +#define OPTION_LANGUAGE_FR _("Language") +#define NC_WIDE_FR _("Widescreen") +#define NC_BUTTON_FR _("[R]: Options") +#define NC_BUTTON2_FR _("[R]: Retournez") +#define NC_OPTION_FR _("OPTIONS") + +#define NC_CAMX_DE _("Camera X Sensitivity") +#define NC_CAMY_DE _("Camera Y Sensitivity") +#define NC_INVERTY_DE _("Invert Y Axis") +#define NC_INVERTX_DE _("Invert X Axis") +#define NC_CAMC_DE _("Camera Centre Speed") +#define NC_ANALOGUE_DE _("Analogue Camera") +#define NC_SCHEME_DE _("Control Scheme") +#define OPTION_ENABLED_DE _("Enabled") +#define OPTION_DISABLED_DE _("Disabled") +#define OPTION_SCHEME1_DE _("Double Tap") +#define OPTION_SCHEME2_DE _("Single Press") +#define OPTION_SCHEME3_DE _("Classic") +#define OPTION_LANGUAGE_DE _("Language") +#define NC_WIDE_DE _("Widescreen") +#define NC_BUTTON_DE _("[R]: Options") +#define NC_BUTTON2_DE _("[R]: Return") +#define NC_OPTION_DE _("OPTIONS") +#endif +#endif + +/** + * Global Symbols + */ +#define TEXT_ZERO _("0") +#define TEXT_COIN _("$") +#define TEXT_STAR _("★") +#define TEXT_COIN_X _("$×") +#define TEXT_STAR_X _("★×") +#define TEXT_VARIABLE_X _("×") +#define TEXT_UNFILLED_STAR _("☆") + +/** + * Global Text + */ +// File Select +#define TEXT_NEW _("NEW") // New File Text +#define TEXT_4DASHES _("----") // Used in Score File Menu + +// Ingame Menu +#define TEXT_PAUSE _("PAUSE") // Pause text, Castle Courses +#define TEXT_HUD_CONGRATULATIONS _("CONGRATULATIONS") // Course Complete Text, Bowser Courses + +//Widescreen stuff +#if defined(WIDE) && !defined(PUPPYCAM) +#define TEXT_HUD_CURRENT_RATIO_43 _("ASPECT RATIO: 4:3") +#define TEXT_HUD_CURRENT_RATIO_169 _("ASPECT RATIO: 16:9") +#define TEXT_HUD_PRESS_L _("PRESS L TO SWITCH") +#endif + +//Reonucam +#ifdef REONUCAM +#define TEXT_CAM_INFO_SLOWEST _("CAM SPEED: SLOWEST") +#define TEXT_CAM_INFO_SLOW _("CAM SPEED: SLOW") +#define TEXT_CAM_INFO_MEDIUM _("CAM SPEED: MEDIUM") +#define TEXT_CAM_INFO_FAST _("CAM SPEED: FAST") +#define TEXT_CAM_INFO_FASTEST _("CAM SPEED: FASTEST") +#endif + +#if defined(VERSION_JP) || defined(VERSION_SH) + +/** + * File Select Text + */ +// Main Screens +// JPHUD menu strings are defined in "text_menu_strings.h.in" +#define TEXT_MARIO TEXT_JPHUD_MARIO // View Score Menu +#define TEXT_SELECT_FILE TEXT_JPHUD_SELECT_FILE +#define TEXT_CHECK_FILE TEXT_JPHUD_CHECK_FILE +#define TEXT_COPY_FILE TEXT_JPHUD_COPY_FILE +#define TEXT_ERASE_FILE TEXT_JPHUD_ERASE_FILE +#define TEXT_SOUND_SELECT TEXT_JPHUD_SOUND_SELECT + +#define TEXT_FILE_MARIO_A _("マリオA") +#define TEXT_FILE_MARIO_B _("マリオB") +#define TEXT_FILE_MARIO_C _("マリオC") +#define TEXT_FILE_MARIO_D _("マリオD") + +// Menu Options +#define TEXT_SCORE _("スコア") +#define TEXT_COPY _("コピー") +#define TEXT_ERASE _("けす") + +// Sound Options +#define TEXT_STEREO _("ステレオ") +#define TEXT_MONO _("モノラル") +#define TEXT_HEADSET _("ヘッドホン") + +// Misc Menu Text +#define TEXT_SAVED_DATA_EXISTS _("ファイルにデータがはいってます") +#define TEXT_NO_SAVED_DATA_EXISTS _("ファイルにデータがありません") + +// Inside a Menu +#define TEXT_RETURN _("もどる") +#define TEXT_CHECK_SCORE _("スコアをみる") +#define TEXT_COPY_FILE_BUTTON _("ファイルコピー") +#define TEXT_ERASE_FILE_BUTTON _("ファイルけす") + +// Score Menu +#define TEXT_HI_SCORE _("ハイスコア") +#define TEXT_MY_SCORE _("マイスコア") +#define TEXT_SCORE_MARIO_A _("マリオA") +#define TEXT_SCORE_MARIO_B _("マリオB") +#define TEXT_SCORE_MARIO_C _("マリオC") +#define TEXT_SCORE_MARIO_D _("マリオD") + +// Copy Menu +#define TEXT_COPY_IT_TO_WHERE _("どこにコピーしますか?") +#define TEXT_COPYING_COMPLETED _("コピーおわりました") +#define TEXT_NO_FILE_TO_COPY_FROM _("からのファイルがありません") + +// Erase Menu +#define TEXT_SURE _("ほんと?") +#define TEXT_YES _("はい") +#define TEXT_NO _("いいえ") +#define TEXT_FILE_MARIO_A_JUST_ERASED _("マリオAをけしました") + +/** + * Menus Text (Pause, Course Completed) + */ +// Main Courses +#define TEXT_COURSE _("コース") +#define TEXT_MYSCORE _("マイスコア") +#define TEXT_CONTINUE _("つづけて マリオする?") +#define TEXT_EXIT_COURSE _("コースからでる?") +#define TEXT_CAMERA_ANGLE_R _("Rボタンのカメラきりかえ") + +// Camera Options +#define TEXT_LAKITU_MARIO _("ジュゲム↔マリオ") +#define TEXT_LAKITU_STOP _("ジュゲム↔ストップ") +#define TEXT_NORMAL_UPCLOSE _("(おすすめ)(リアル)") +#define TEXT_NORMAL_FIXED _("(おすすめ)(とまる)") + +// Course Completed Misc Text +#define TEXT_CATCH _("キャッチ!") +#define TEXT_CLEAR _("クリア!") +#define TEXT_HUD_HI_SCORE _("HISCORE") + +// Save Options +#define TEXT_SAVE_AND_CONTINUE _("セーブしてつづける?") +#define TEXT_SAVE_AND_QUIT _("セーブしておわる?") +#define TEXT_CONTINUE_WITHOUT_SAVING _("セーブしないでつづける?") + +/** + * Ending Peach cutscene text. + */ +#define TEXT_FILE_MARIO_EXCLAMATION _("マリオ!!") +#define TEXT_POWER_STARS_RESTORED _("おしろにスターが もどったのね") +#define TEXT_THANKS_TO_YOU _("みんな あなたのおかげだわ!") +#define TEXT_THANK_YOU_MARIO _("ありがとう マリオ") +#define TEXT_SOMETHING_SPECIAL _("なにか おれいをしなくちゃ・・") +#define TEXT_LISTEN_EVERYBODY _("さあ みんな") +#define TEXT_LETS_HAVE_CAKE _("おいしいケーキを やきましょう") +#define TEXT_FOR_MARIO _("マリオの ために・・・") +#define TEXT_FILE_MARIO_QUESTION _("マリオ?") + +#endif + +#if defined(VERSION_US) || defined(VERSION_EU) + +/** + * File Select Text + */ +// Main Screens +#define TEXT_MARIO _("MARIO") // View Score Menu +#define TEXT_SELECT_FILE _("SELECT FILE") +#define TEXT_CHECK_FILE _("CHECK FILE") +#define TEXT_COPY_FILE _("COPY FILE") +#define TEXT_ERASE_FILE _("ERASE FILE") +#define TEXT_SOUND_SELECT _("SOUND SELECT") +#define TEXT_FILE_MARIO_A _("MARIO A") +#define TEXT_FILE_MARIO_B _("MARIO B") +#define TEXT_FILE_MARIO_C _("MARIO C") +#define TEXT_FILE_MARIO_D _("MARIO D") + +// Menu Options +#define TEXT_SCORE _("SCORE") +#define TEXT_COPY _("COPY") +#define TEXT_ERASE _("ERASE") + +// Sound Options +#define TEXT_STEREO _("STEREO") +#define TEXT_MONO _("MONO") +#define TEXT_HEADSET _("HEADSET") + +// Misc Menu Text +#define TEXT_SAVED_DATA_EXISTS _("SAVED DATA EXITS") // Misspell +#define TEXT_NO_SAVED_DATA_EXISTS _("NO SAVED DATA EXISTS") + +// Inside a Menu +#define TEXT_RETURN _("RETURN") +#define TEXT_CHECK_SCORE _("CHECK SCORE") +#define TEXT_COPY_FILE_BUTTON _("COPY FILE") +#define TEXT_ERASE_FILE_BUTTON _("ERASE FILE") + +// Score Menu +#define TEXT_HI_SCORE _("HI SCORE") +#define TEXT_MY_SCORE _("MY SCORE") +// Score Mario Text ("☺" is the Mario face defined in the US/EU menu char table) +#define TEXT_SCORE_MARIO_A _("☺A") +#define TEXT_SCORE_MARIO_B _("☺B") +#define TEXT_SCORE_MARIO_C _("☺C") +#define TEXT_SCORE_MARIO_D _("☺D") + +// Copy Menu +#define TEXT_COPY_IT_TO_WHERE _("COPY IT TO WHERE?") +#define TEXT_COPYING_COMPLETED _("COPYING COMPLETED") +#define TEXT_NO_FILE_TO_COPY_FROM _("NO EMPTY FILE") + +// Erase Menu +#define TEXT_SURE _("SURE?") +#define TEXT_YES _("YES") +#define TEXT_NO _("NO") +#define TEXT_FILE_MARIO_A_JUST_ERASED _("MARIO A JUST ERASED") + +/** + * Menus Text (Pause, Course Completed) + */ +// Main Courses +#define TEXT_COURSE _("COURSE") +#define TEXT_MYSCORE _("MYSCORE") +#define TEXT_CONTINUE _("CONTINUE") +#define TEXT_EXIT_COURSE _("EXIT COURSE") +#ifndef VERSION_EU // "R" text is different in EU +#define TEXT_CAMERA_ANGLE_R _("SET CAMERA ANGLE WITH R") +#endif + +// Camera Options +#define TEXT_LAKITU_MARIO _("LAKITU + MARIO") +#define TEXT_LAKITU_STOP _("LAKITU + STOP") +#define TEXT_NORMAL_UPCLOSE __("(NORMAL)(UP-CLOSE)") +#define TEXT_NORMAL_FIXED __("(NORMAL)(FIXED)") + +// Course Completed Misc Text +#define TEXT_CATCH _("CATCH") +#define TEXT_CLEAR _("CLEAR") +#define TEXT_HUD_HI_SCORE _("HI SCORE") + +// Save Options +#define TEXT_SAVE_AND_CONTINUE _("SAVE & CONTINUE") +#define TEXT_SAVE_AND_QUIT _("SAVE & QUIT") +#define TEXT_CONTINUE_WITHOUT_SAVING _("CONTINUE, DON'T SAVE") + +/** + * Ending Peach cutscene text. + */ +#define TEXT_FILE_MARIO_EXCLAMATION _("Mario!") +#define TEXT_POWER_STARS_RESTORED __("The power of the Stars is restored to the castle...") +#define TEXT_THANKS_TO_YOU __("...and it's all thanks to you!") +#define TEXT_THANK_YOU_MARIO __("Thank you, Mario!") +#define TEXT_SOMETHING_SPECIAL __("We have to do something special for you...") +#define TEXT_LISTEN_EVERYBODY _("Listen, everybody,") +#define TEXT_LETS_HAVE_CAKE _("let's bake a delicious cake...") +#define TEXT_FOR_MARIO _("...for Mario...") +#define TEXT_FILE_MARIO_QUESTION _("Mario!") + +#endif + + +#define TEXT_ENGLISH _("ENGLISH") +#define TEXT_FRENCH _("FRANÇAIS") +#define TEXT_GERMAN _("DEUTSCH") + +#if MULTILANG + +/** + * File Select Text + */ +#define TEXT_RETURN_FR _("RETOUR") +#define TEXT_RETURN_DE _("ZURÜCK") + +#define TEXT_CHECK_SCORE_FR _("SCORE") +#define TEXT_CHECK_SCORE_DE _("LEISTUNG") + +#define TEXT_COPY_FILE_FR _("COPIER") +#define TEXT_COPY_FILE_DE _("KOPIEREN") + +#define TEXT_ERASE_FILE_FR _("EFFACER") +#define TEXT_ERASE_FILE_DE _("LÖSCHEN") + +#define TEXT_SELECT_FILE_FR _("CHOISIR FICHIER") +#define TEXT_SELECT_FILE_DE _("WwHLE SPIEL") + +#define TEXT_SCORE_FR _("SCORE") +#define TEXT_SCORE_DE _("LEISTUNG") + +#define TEXT_COPY_FR _("COPIER") +#define TEXT_COPY_DE _("KOPIEREN") + +#define TEXT_ERASE_FR _("EFFACER") +#define TEXT_ERASE_DE _("LÖSCHEN") + +#define TEXT_OPTION _("OPTION") // new in EU +#define TEXT_OPTION_FR _("OPTION") +#define TEXT_OPTION_DE _("OPTIONEN") + +#define TEXT_CHECK_FILE_FR _("VOIR SCORE") +#define TEXT_CHECK_FILE_DE _("VON WELCHEM SPIEL") + +#define TEXT_NO_SAVED_DATA_EXISTS_FR _("AUCUNE SAUVEGARDE DISPONIBLE") +#define TEXT_NO_SAVED_DATA_EXISTS_DE _("KEIN SPIEL VORHANDEN") + +#define TEXT_COPY_FILE_BUTTON_FR _("COPIER FICHIER") +#define TEXT_COPY_FILE_BUTTON_DE _("SPIEL KOPIEREN") + +#define TEXT_COPY_IT_TO_WHERE_FR _("COPIER SUR?") +#define TEXT_COPY_IT_TO_WHERE_DE _("WOHIN KOPIEREN?") + +#define TEXT_COPYING_COMPLETED_FR _("COPIE ACHEVEÉ") +#define TEXT_COPYING_COMPLETED_DE _("SPIEL KOPIERT") + +#define TEXT_SAVED_DATA_EXISTS_FR _("SAVEGARDE EXISTANTE") +#define TEXT_SAVED_DATA_EXISTS_DE _("BEREITS BELEGT") + +#define TEXT_NO_FILE_TO_COPY_FROM_FR _("AUCUN FICHIER VIDE") +#define TEXT_NO_FILE_TO_COPY_FROM_DE _("KEIN PLATZ VORHANDEN") + +#define TEXT_YES_FR _("OUI") +#define TEXT_YES_DE _("JA") + +#define TEXT_NO_FR _("NON") +#define TEXT_NO_DE _("NEIN") + +#define TEXT_ERASE_FILE_BUTTON_FR _("EFFACER FICHIER") +#define TEXT_ERASE_FILE_BUTTON_DE _("SPIEL LxSCHEN") + +#define TEXT_SURE_FR _("OK?") +#define TEXT_SURE_DE _("SICHER?") + +#define TEXT_FILE_MARIO_A_JUST_ERASED_FR _("MARIO A EFFACÉ") +#define TEXT_FILE_MARIO_A_JUST_ERASED_DE _("MARIO A GELÖSCHT") + +#define TEXT_SOUND_SELECT_FR _("SON") +#define TEXT_SOUND_SELECT_DE _("SOUND") + +#define TEXT_LANGUAGE_SELECT _("LANGUAGE SELECT") // new in EU +#define TEXT_LANGUAGE_SELECT_FR _("SELECTION LANGUE") +#define TEXT_LANGUAGE_SELECT_DE _("WwHLE SPRACHE") + +#define TEXT_STEREO_FR _("STÉRÉO") +#define TEXT_MONO_FR _("MONO") +#define TEXT_HEADSET_FR _("CASQUE") + +#define TEXT_STEREO_DE _("STEREO") +#define TEXT_MONO_DE _("MONO") +#define TEXT_HEADSET_DE _("PHONES") + +#define TEXT_HI_SCORE_FR _("MEILLEUR SCORE") +#define TEXT_HI_SCORE_DE _("BESTLEISTUNG") + +#define TEXT_MY_SCORE_FR _("MON SCORE") +#define TEXT_MY_SCORE_DE _("LEISTUNG") + +#define TEXT_NEW_FR _("VIDE") +#define TEXT_NEW_DE _("FREI") + + +/** + * Menus Text (Pause, Course Completed) + */ +// Main Courses +// English, "R" text is different +#define TEXT_CAMERA_ANGLE_R _("SET CAMERA ANGLE WITH [R]") +// French +#define TEXT_COURSE_FR _("NIVEAU") +#define TEXT_MY_SCORE_FR _("MON SCORE") +#define TEXT_CONTINUE_FR _("CONTINUER") +#define TEXT_EXIT_COURSE_FR _("QUITTER NIVEAU") +#define TEXT_CAMERA_ANGLE_R_FR _("RÉGLAGE CAMÉRA AVEC [R]") +// German +#define TEXT_COURSE_DE _("KURS") +#define TEXT_MY_SCORE_DE _("LEISTUNG") +#define TEXT_CONTINUE_DE _("WEITER") +#define TEXT_EXIT_COURSE_DE _("KURS VERLASSEN") +#define TEXT_CAMERA_ANGLE_R_DE _("KAMERA MIT [R] VERSTELLEN") + +// Camera Options +// French +#define TEXT_NORMAL_UPCLOSE_FR __("(NORMAL)(GROS-PLAN)") +#define TEXT_NORMAL_FIXED_FR __("(NORMAL)(FIXE)") +// German +#define TEXT_NORMAL_UPCLOSE_DE __("(NORMAL)(WEIT-ZOOM)") +#define TEXT_NORMAL_FIXED_DE __("(NORMAL)(STATIV)") + +// Course Completed Misc Text +// French +#define TEXT_HUD_HI_SCORE_FR _("MEILLEUR SCORE") +#define TEXT_HUD_CONGRATULATIONS_FR _("FELICITATIONS") +// German +#define TEXT_HUD_HI_SCORE_DE _("BESTLEISTUNG") +#define TEXT_HUD_CONGRATULATIONS_DE _("GRATULATION") + +// Save Options +// French +#define TEXT_SAVE_AND_CONTINUE_FR _("SAUVEGARDER & CONTINUER") +#define TEXT_SAVE_AND_QUIT_FR _("SAUVEGARDER & QUITTER") +#define TEXT_CONTINUE_WITHOUT_SAVING_FR _("CONTINUER SANS SAUVEGARDER") +// German +#define TEXT_SAVE_AND_CONTINUE_DE _("SPEICHERN & WEITER") +#define TEXT_SAVE_AND_QUIT_DE _("SPEICHERN & ENDE") +#define TEXT_CONTINUE_WITHOUT_SAVING_DE _("WEITER OHNE ZU SPEICHERN") + +/** + * Ending Peach cutscene text. + */ +// French +#define TEXT_POWER_STARS_RESTORED_FR _("Grâce aux étoiles, le château a retrouvé ses pouvoirs...") +#define TEXT_THANKS_TO_YOU_FR _("...et ceci grâce à toi!") +#define TEXT_THANK_YOU_MARIO_FR _("Merci, Mario!") +#define TEXT_SOMETHING_SPECIAL_FR _("Tu mérites une récompense...") +#define TEXT_COME_ON_EVERYBODY_FR _("Venez les amis...") +#define TEXT_LETS_HAVE_CAKE_FR _("Allons préparer un délicieux gâteau...") +#define TEXT_FOR_MARIO_FR _("...pour Mario...") +// German +#define TEXT_POWER_STARS_RESTORED_DE _("Die Macht der Sterne ruht wieder sicher im Schloss...") +#define TEXT_THANKS_TO_YOU_DE _("...und alles dank Deiner Hilfe!") +#define TEXT_THANK_YOU_MARIO_DE _("Vielen Dank, Mario!") +#define TEXT_SOMETHING_SPECIAL_DE _("Wir haben eine Überraschung für Dich...") +#define TEXT_COME_ON_EVERYBODY_DE _("Hört alle her...") +#define TEXT_LETS_HAVE_CAKE_DE _("Laßt uns einen leckeren Kuchen backen...") +#define TEXT_FOR_MARIO_DE _("...für Mario...") + +/** + * Course Table names for Score Menu Save view + */ +#define TEXT_MENU_BOB _(" 1 BOB-OMB BATTLEFIELD") +#define TEXT_MENU_WF _(" 2 WHOMP'S FORTRESS") +#define TEXT_MENU_JRB _(" 3 JOLLY ROGER BAY") +#define TEXT_MENU_CCM _(" 4 COOL, COOL MOUNTAIN") +#define TEXT_MENU_BBH _(" 5 BIG BOO'S HAUNT") +#define TEXT_MENU_HMC _(" 6 HAZY MAZE CAVE") +#define TEXT_MENU_LLL _(" 7 LETHAL LAVA LAND") +#define TEXT_MENU_SSL _(" 8 SHIFTING SAND LAND") +#define TEXT_MENU_DDD _(" 9 DIRE, DIRE DOCKS") +#define TEXT_MENU_SL _("10 SNOWMAN'S LAND") +#define TEXT_MENU_WDW _("11 WET-DRY WORLD") +#define TEXT_MENU_TTM _("12 TALL, TALL MOUNTAIN") +#define TEXT_MENU_THI _("13 TINY-HUGE ISLAND") +#define TEXT_MENU_TTC _("14 TICK TOCK CLOCK") +#define TEXT_MENU_RR _("15 RAINBOW RIDE") +#define TEXT_MENU_BITDW _(" BOWSER IN THE DARK WORLD") +#define TEXT_MENU_BITFS _(" BOWSER IN THE FIRE SEA") +#define TEXT_MENU_BITS _(" BOWSER IN THE SKY") +#define TEXT_MENU_PSS _(" THE PRINCESS'S SECRET SLIDE") +#define TEXT_MENU_COTMC _(" CAVERN OF THE METAL CAP") +#define TEXT_MENU_TOTWC _(" TOWER OF THE WING CAP") +#define TEXT_MENU_VCUTM _(" VANISH CAP UNDER THE MOAT") +#define TEXT_MENU_WMOTR _(" WING MARIO OVER THE RAINBOW") +#define TEXT_MENU_SA _(" THE SECRET AQUARIUM") +#define TEXT_MENU_NONE _("") +#define TEXT_MENU_STARS _(" CASTLE SECRET STARS") + +#define TEXT_MENU_BOB_FR _(" 1 BATAILLE DE BOB-OMB") +#define TEXT_MENU_WF_FR _(" 2 FORTERESSE DE WHOMP") +#define TEXT_MENU_JRB_FR _(" 3 BAIE DES PIRATES") +#define TEXT_MENU_CCM_FR _(" 4 MONTAGNE GLA-GLA") +#define TEXT_MENU_BBH_FR _(" 5 MANOIR DE BIG BOO") +#define TEXT_MENU_HMC_FR _(" 6 CAVERNE BRUMEUSE") +#define TEXT_MENU_LLL_FR _(" 7 LAVES FATALES") +#define TEXT_MENU_SSL_FR _(" 8 SABLES TROP MOUVANTS") +#define TEXT_MENU_DDD_FR _(" 9 AFFREUX BASSIN") +#define TEXT_MENU_SL_FR _("10 CHEZ LE ROI DES NEIGES") +#define TEXT_MENU_WDW_FR _("11 MONDE TREMPE-SECHE") +#define TEXT_MENU_TTM_FR _("12 TROP HAUTE MONTAGNE") +#define TEXT_MENU_THI_FR _("13 ILE GRANDS-PETITS") +#define TEXT_MENU_TTC_FR _("14 HORLOGE TIC-TAC") +#define TEXT_MENU_RR_FR _("15 COURSE ARC-EN-CIEL") +#define TEXT_MENU_BITDW_FR _(" BOWSER DES TENEBRES") +#define TEXT_MENU_BITFS_FR _(" BOWSER DES LAVES") +#define TEXT_MENU_BITS_FR _(" BOWSER DES CIEUX") +#define TEXT_MENU_PSS_FR _(" GLISSADE DE LA PRINCESSE") +#define TEXT_MENU_COTMC_FR _(" MINE DES CASQUETTES-METAL") +#define TEXT_MENU_TOTWC_FR _(" INTERRUPTEUR DE LA TOUR AILEE") +#define TEXT_MENU_VCUTM_FR _(" INVISIBLE SOUS LES DOUVES") +#define TEXT_MENU_WMOTR_FR _(" AU-DELA DE L'ARC-EN-CIEL") +#define TEXT_MENU_SA_FR _(" AQUARIUM SECRET") +#define TEXT_MENU_NONE_FR _("") +#define TEXT_MENU_STARS_FR _(" ETOILES SECRETES") + +#define TEXT_MENU_BOB_DE _(" 1 BOB-OMBS BOMBENBERG") +#define TEXT_MENU_WF_DE _(" 2 WUMMPS WUCHTWALL") +#define TEXT_MENU_JRB_DE _(" 3 PIRATENBUCHT PANIK") +#define TEXT_MENU_CCM_DE _(" 4 BIBBERBERG BOB") +#define TEXT_MENU_BBH_DE _(" 5 BIG BOOS BURG") +#define TEXT_MENU_HMC_DE _(" 6 GRÜNE GIFTGROTTE") +#define TEXT_MENU_LLL_DE _(" 7 LAVA LAGUNE") +#define TEXT_MENU_SSL_DE _(" 8 WOBIWABA WÜSTE") +#define TEXT_MENU_DDD_DE _(" 9 WILDE WASSERWERFT") +#define TEXT_MENU_SL_DE _("10 FROSTBEULEN FRUST") +#define TEXT_MENU_WDW_DE _("11 ATLANTIS AQUARIA") +#define TEXT_MENU_TTM_DE _("12 FLIEGENPILZ FIASKO") +#define TEXT_MENU_THI_DE _("13 GULLIVER GUMBA") +#define TEXT_MENU_TTC_DE _("14 TICK TACK TRAUMA") +#define TEXT_MENU_RR_DE _("15 REGENBOGEN RASEREI") +#define TEXT_MENU_BITDW_DE _(" BOWSERS SCHATTENWELT") +#define TEXT_MENU_BITFS_DE _(" BOWSERS LAVASEE") +#define TEXT_MENU_BITS_DE _(" BOWSERS LUFTSCHLOSS") +#define TEXT_MENU_PSS_DE _(" TOADSTOOLS RUTSCHBAHN") +#define TEXT_MENU_COTMC_DE _(" GRÜNER SCHALTERPALAST") +#define TEXT_MENU_TOTWC_DE _(" ROTER SCHALTERPALAST") +#define TEXT_MENU_VCUTM_DE _(" BLAUER SCHALTERPALAST") +#define TEXT_MENU_WMOTR_DE _(" REGENBOGEN FEUERWERK") +#define TEXT_MENU_SA_DE _(" VERSTECKTES AQUARIUM") +#define TEXT_MENU_NONE_DE _("") +#define TEXT_MENU_STARS_DE _(" GEHEIME STERNE") +#endif // VERSION_EU + +#endif // TEXT_STRINGS_H diff --git a/src/game/camera.c b/src/game/camera.c index 8cd629d0af..fdfa40c52e 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -75,6 +75,10 @@ * */ +#ifdef REONUCAM +struct ReonucamState gReonucamState = { 2, FALSE, FALSE, FALSE, 0, 0, }; +#endif + // BSS /** * Stores Lakitu's position from the last frame, used for transitioning in next_lakitu_state() @@ -453,6 +457,25 @@ CameraTransition sModeTransitions[] = { extern u8 sDanceCutsceneIndexTable[][4]; extern u8 sZoomOutAreaMasks[]; +#ifdef REONUCAM +// Returns the camera speed based on the user's camera speed setting +f32 set_camera_speed(void) { + switch(gReonucamState.speed) { + case 0: + return 0.5f; + case 1: + return 1; + case 2: + return 1.5f; + case 3: + return 2; + case 4: + return 3.5f; + } + return 0; +} +#endif + /** * Starts a camera shake triggered by an interaction */ @@ -872,9 +895,30 @@ s32 update_8_directions_camera(struct Camera *c, Vec3f focus, Vec3f pos) { s16 pitch = look_down_slopes(camYaw); f32 posY; f32 focusY; +#ifdef REONUCAM + f32 yOff; +#else f32 yOff = 125.f; +#endif f32 baseDist = 1000.f; +#ifdef REONUCAM + if (gMarioState->action & ACT_FLAG_SWIMMING) { + yOff = -125.f; + } else { + yOff = 125.f; + } + + if ((gPlayer1Controller->buttonDown & R_TRIG) && (gPlayer1Controller->buttonDown & U_CBUTTONS)) { + gReonucamState.keepCliffCam = 1; + pitch = DEGREES(60); + } else if (((gPlayer1Controller->buttonDown & U_CBUTTONS) || (gPlayer1Controller->buttonDown & R_TRIG)) && gReonucamState.keepCliffCam) { + pitch = DEGREES(60); + } else { + gReonucamState.keepCliffCam = 0; + } +#endif + sAreaYaw = camYaw; calc_y_to_curr_floor(&posY, 1.f, 200.f, &focusY, 0.9f, 200.f); focus_on_mario(focus, pos, posY + yOff, focusY + yOff, sLakituDist + baseDist, pitch, camYaw); @@ -1116,13 +1160,60 @@ s32 snap_to_45_degrees(s16 angle) { return angle; } +#ifdef REONUCAM +void reonucam_handler(void) { + // Get the camera speed based on the user's setting + f32 cameraSpeed = set_camera_speed(); + //45º rotations + if ((gPlayer1Controller->buttonPressed & L_CBUTTONS) && !(gPlayer1Controller->buttonDown & R_TRIG)) { + s8DirModeBaseYaw -= DEGREES(45); + } else if ((gPlayer1Controller->buttonPressed & R_CBUTTONS) && !(gPlayer1Controller->buttonDown & R_TRIG)) { + s8DirModeBaseYaw += DEGREES(45); + } + //Smooth rotation + if (gPlayer1Controller->buttonDown & R_TRIG) { + if (gPlayer1Controller->buttonDown & L_CBUTTONS) { + s8DirModeBaseYaw -= DEGREES(cameraSpeed); + } else if (gPlayer1Controller->buttonDown & R_CBUTTONS) { + s8DirModeBaseYaw += DEGREES(cameraSpeed); + } + gReonucamState.rButtonCounter++; // This increses whenever R is held. + } else { + if (gReonucamState.rButtonCounter > 0 && gReonucamState.rButtonCounter <= 5 && !((gPlayer1Controller->buttonDown & L_CBUTTONS) || (gPlayer1Controller->buttonDown & R_CBUTTONS) || (gMarioState->action & ACT_FLAG_SWIMMING_OR_FLYING))) { + // This centers the camera behind mario. It triggers when you let go of R in less than 5 frames. + s8DirModeYawOffset = 0; + s8DirModeBaseYaw = gMarioState->faceAngle[1]-0x8000; + gMarioState->area->camera->yaw = s8DirModeBaseYaw; + play_sound_rbutton_changed(); + } + gReonucamState.rButtonCounter = 0; + } + if (gPlayer1Controller->buttonPressed & R_TRIG) { + if (gReonucamState.rButtonCounter2 <= 5) { + set_cam_angle(CAM_ANGLE_MARIO); // Enter mario cam if R is pressed 2 times in less than 5 frames + gReonucamState.rButtonCounter2 = 6; + } else { + gReonucamState.rButtonCounter2 = 0; + } + } else { + gReonucamState.rButtonCounter2++; + } + if (gPlayer1Controller->buttonPressed & D_JPAD) { + s8DirModeBaseYaw = snap_to_45_degrees(s8DirModeBaseYaw); // Lock the camera to the nearest 45deg axis + } +} +#endif + /** * A mode that only has 8 camera angles, 45 degrees apart */ void mode_8_directions_camera(struct Camera *c) { Vec3f pos; s16 oldAreaYaw = sAreaYaw; - +#ifdef REONUCAM + reonucam_handler(); + radial_camera_input(c); +#else radial_camera_input(c); if (gPlayer1Controller->buttonPressed & R_CBUTTONS) { @@ -1149,13 +1240,18 @@ void mode_8_directions_camera(struct Camera *c) { s8DirModeYawOffset = snap_to_45_degrees(s8DirModeYawOffset); } #endif - +#endif lakitu_zoom(400.f, 0x900); c->nextYaw = update_8_directions_camera(c, c->focus, pos); +#ifdef REONUCAM + set_camera_height(c, pos[1]); +#endif c->pos[0] = pos[0]; c->pos[2] = pos[2]; sAreaYawChange = sAreaYaw - oldAreaYaw; +#ifndef REONUCAM set_camera_height(c, pos[1]); +#endif } /** @@ -2751,6 +2847,9 @@ void set_camera_mode(struct Camera *c, s16 mode, s16 frames) { #ifndef ENABLE_VANILLA_CAM_PROCESSING if (mode == CAMERA_MODE_8_DIRECTIONS) { // Helps transition from any camera mode to 8dir +#ifdef REONUCAM + s8DirModeBaseYaw = 0; +#endif s8DirModeYawOffset = snap_to_45_degrees(c->yaw); } #endif @@ -2882,14 +2981,23 @@ void update_camera(struct Camera *c) { // Only process R_TRIG if 'fixed' is not selected in the menu if (cam_select_alt_mode(CAM_SELECTION_NONE) == CAM_SELECTION_MARIO) { if (gPlayer1Controller->buttonPressed & R_TRIG) { +#ifdef REONUCAM + if (set_cam_angle(0) == CAM_ANGLE_MARIO) { + s8DirModeBaseYaw = snap_to_45_degrees(s8DirModeBaseYaw); + set_cam_angle(CAM_ANGLE_LAKITU); + } +#else if (set_cam_angle(0) == CAM_ANGLE_LAKITU) { set_cam_angle(CAM_ANGLE_MARIO); } else { set_cam_angle(CAM_ANGLE_LAKITU); } +#endif } } +#ifndef REONUCAM play_sound_if_cam_switched_to_lakitu_or_mario(); +#endif } // Initialize the camera @@ -4545,15 +4653,21 @@ void play_camera_buzz_if_c_sideways(void) { } void play_sound_cbutton_up(void) { +#ifndef REONUCAM play_sound(SOUND_MENU_CAMERA_ZOOM_IN, gGlobalSoundSource); +#endif } void play_sound_cbutton_down(void) { +#ifndef REONUCAM play_sound(SOUND_MENU_CAMERA_ZOOM_OUT, gGlobalSoundSource); +#endif } void play_sound_cbutton_side(void) { +#ifndef REONUCAM play_sound(SOUND_MENU_CAMERA_TURN, gGlobalSoundSource); +#endif } void play_sound_button_change_blocked(void) { @@ -4652,7 +4766,11 @@ void radial_camera_input(struct Camera *c) { } // Zoom in / enter C-Up +#ifdef REONUCAM + if ((gPlayer1Controller->buttonPressed & U_CBUTTONS) && !(gPlayer1Controller->buttonDown & R_TRIG)) { +#else if (gPlayer1Controller->buttonPressed & U_CBUTTONS) { +#endif if (gCameraMovementFlags & CAM_MOVE_ZOOMED_OUT) { gCameraMovementFlags &= ~CAM_MOVE_ZOOMED_OUT; play_sound_cbutton_up(); @@ -4741,6 +4859,7 @@ void handle_c_button_movement(struct Camera *c) { } } + /** * Zero the 10 cvars. */ @@ -5210,7 +5329,11 @@ void set_camera_mode_8_directions(struct Camera *c) { if (c->mode != CAMERA_MODE_8_DIRECTIONS) { c->mode = CAMERA_MODE_8_DIRECTIONS; sStatusFlags &= ~CAM_FLAG_SMOOTH_MOVEMENT; +#ifdef REONUCAM + s8DirModeBaseYaw = snap_to_45_degrees(s8DirModeBaseYaw); +#else s8DirModeBaseYaw = 0; +#endif s8DirModeYawOffset = 0; } } diff --git a/src/game/camera.h b/src/game/camera.h index fcd1f59f97..ad8bc11aa1 100644 --- a/src/game/camera.h +++ b/src/game/camera.h @@ -90,6 +90,18 @@ #define CAM_MODE_LAKITU_WAS_ZOOMED_OUT 0x02 #define CAM_MODE_MARIO_SELECTED 0x04 +#ifdef REONUCAM +struct ReonucamState { + u8 speed; + u8 waterCamOverride; + u8 flyingCamOverride; + u8 keepCliffCam; + u16 rButtonCounter; + u16 rButtonCounter2; +}; +extern struct ReonucamState gReonucamState; +#endif + enum CameraSelection { CAM_SELECTION_NONE, CAM_SELECTION_MARIO, diff --git a/src/game/game_init.c b/src/game/game_init.c index bec0cfd3ec..47307f68d8 100644 --- a/src/game/game_init.c +++ b/src/game/game_init.c @@ -31,6 +31,7 @@ #include "vc_ultra.h" #include "profiling.h" #include "emutest.h" +#include "camera.h" // Emulators that the Instant Input patch should not be applied to #define INSTANT_INPUT_BLACKLIST (EMU_CONSOLE | EMU_WIIVC | EMU_ARES | EMU_SIMPLE64 | EMU_CEN64) @@ -785,6 +786,9 @@ void thread5_game_loop(UNUSED void *arg) { play_music(SEQ_PLAYER_SFX, SEQUENCE_ARGS(0, SEQ_SOUND_PLAYER), 0); set_sound_mode(save_file_get_sound_mode()); +#ifdef REONUCAM + gReonucamState.speed = save_file_get_camera_speed(); +#endif #ifdef WIDE gConfig.widescreen = save_file_get_widescreen_mode(); #endif diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c index 56c27c42a5..289c4743d6 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c @@ -89,6 +89,14 @@ const struct LanguageTables gLanguageTables[] = DEFINE_LANGUAGE_ARRAY( LANGUAGE_TABLES(dialog_table_es, course_name_table_es, act_name_table_es) ); +#ifdef REONUCAM +u8 textCamInfoSlowest[] = { TEXT_CAM_INFO_SLOWEST }; +u8 textCamInfoSlow[] = { TEXT_CAM_INFO_SLOW }; +u8 textCamInfoMedium[] = { TEXT_CAM_INFO_MEDIUM }; +u8 textCamInfoFast[] = { TEXT_CAM_INFO_FAST}; +u8 textCamInfoFastest[] = { TEXT_CAM_INFO_FASTEST }; +#endif + extern u8 gLastCompletedCourseNum; extern u8 gLastCompletedStarNum; @@ -1525,6 +1533,48 @@ void reset_red_coins_collected(void) { gRedCoinsCollected = 0; } +#ifdef REONUCAM +void render_reonucam_speed_setting(void) { + gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + switch (gReonucamState.speed) { + case 0: + print_generic_string(190, 20, textCamInfoSlowest); + break; + case 1: + print_generic_string(190, 20, textCamInfoSlow); + break; + case 2: + print_generic_string(190, 20, textCamInfoMedium); + break; + case 3: + print_generic_string(190, 20, textCamInfoFast); + break; + case 4: + print_generic_string(190, 20, textCamInfoFastest); + break; + } + gSPDisplayList(gDisplayListHead++, dl_ia_text_end); + + if (gPlayer1Controller->buttonPressed & R_JPAD) { + if (gReonucamState.speed < 4) { + gReonucamState.speed += 1; + } else { + gReonucamState.speed = 0; + } + save_file_set_camera_speed(gReonucamState.speed); + } else if (gPlayer1Controller->buttonPressed & L_JPAD) { + if (gReonucamState.speed > 0) { + gReonucamState.speed -= 1; + } else { + gReonucamState.speed = 4; + } + save_file_set_camera_speed(gReonucamState.speed); + } +} +#endif + + void change_dialog_camera_angle(void) { if (cam_select_alt_mode(0) == CAM_SELECTION_MARIO) { gDialogCameraAngleIndex = CAM_SELECTION_MARIO; @@ -2052,6 +2102,9 @@ s32 render_pause_courses_and_castle(void) { } #if defined(WIDE) && !defined(PUPPYCAM) render_widescreen_setting(); +#endif +#ifdef REONUCAM + render_reonucam_speed_setting(); #endif gDialogTextAlpha += 25; if (gDialogTextAlpha > 250) { diff --git a/src/game/mario.c b/src/game/mario.c index af26781131..4a21e33129 100644 --- a/src/game/mario.c +++ b/src/game/mario.c @@ -1381,8 +1381,22 @@ void update_mario_inputs(struct MarioState *m) { void set_submerged_cam_preset_and_spawn_bubbles(struct MarioState *m) { f32 heightBelowWater; s16 camPreset; +#ifdef REONUCAM + // skip if not submerged + if ((m->action & ACT_GROUP_MASK) != ACT_GROUP_SUBMERGED) return; + // R Trigger toggles camera mode override + if ((gPlayer1Controller->buttonPressed & R_TRIG) && (m->action & ACT_FLAG_SWIMMING)) { + gReonucamState.waterCamOverride ^= 1; + } + + // If override, set mode to 8 dir. Otherwise, use normal water processing + if (gReonucamState.waterCamOverride) { + if (m->area->camera->mode != CAMERA_MODE_8_DIRECTIONS) set_camera_mode(m->area->camera, CAMERA_MODE_8_DIRECTIONS, 1); + } else { +#else if ((m->action & ACT_GROUP_MASK) == ACT_GROUP_SUBMERGED) { +#endif heightBelowWater = (f32)(m->waterLevel - 80) - m->pos[1]; camPreset = m->area->camera->mode; diff --git a/src/game/mario_actions_airborne.c b/src/game/mario_actions_airborne.c index c6e1526773..9d88bde5b7 100644 --- a/src/game/mario_actions_airborne.c +++ b/src/game/mario_actions_airborne.c @@ -1669,6 +1669,12 @@ s32 act_shot_from_cannon(struct MarioState *m) { s32 act_flying(struct MarioState *m) { s16 startPitch = m->faceAngle[0]; +#ifdef REONUCAM + if (gPlayer1Controller->buttonPressed & R_TRIG) { + gReonucamState.flyingCamOverride ^= 1; + } +#endif + if (m->input & INPUT_Z_PRESSED) { if (m->area->camera->mode == FLYING_CAMERA_MODE) { set_camera_mode(m->area->camera, m->area->camera->defMode, 1); @@ -1683,9 +1689,17 @@ s32 act_flying(struct MarioState *m) { return set_mario_action(m, ACT_FREEFALL, 0); } +#ifdef REONUCAM + if (!gReonucamState.flyingCamOverride && m->area->camera->mode != FLYING_CAMERA_MODE) { + set_camera_mode(m->area->camera, FLYING_CAMERA_MODE, 1); + } else if (gReonucamState.flyingCamOverride && m->area->camera->mode != CAMERA_MODE_8_DIRECTIONS) { + set_camera_mode(m->area->camera, CAMERA_MODE_8_DIRECTIONS, 1); + } +#else if (m->area->camera->mode != FLYING_CAMERA_MODE) { set_camera_mode(m->area->camera, FLYING_CAMERA_MODE, 1); } +#endif if (m->actionState == ACT_STATE_FLYING_SPIN) { if (m->actionArg == ACT_ARG_FLYING_FROM_CANNON) { diff --git a/src/game/save_file.c b/src/game/save_file.c index 5682478633..c5d78d1a7c 100644 --- a/src/game/save_file.c +++ b/src/game/save_file.c @@ -730,6 +730,19 @@ u32 save_file_get_sound_mode(void) { return gSaveBuffer.menuData.soundMode; } +#ifdef REONUCAM +void save_file_set_camera_speed(u8 speed) { + gSaveBuffer.menuData.cameraSpeedSetting = speed; + gMainMenuDataModified = TRUE; + save_main_menu_data(); +} + +u8 save_file_get_camera_speed(void) { + return gSaveBuffer.menuData.cameraSpeedSetting; +} + +#endif + void save_file_move_cap_to_default_location(void) { if (save_file_get_flags() & SAVE_FLAG_CAP_ON_GROUND) { switch (gSaveBuffer.files[gCurrSaveFileNum - 1][0].capLevel) { diff --git a/src/game/save_file.h b/src/game/save_file.h index 41a2c69457..f27135dedb 100644 --- a/src/game/save_file.h +++ b/src/game/save_file.h @@ -65,7 +65,9 @@ struct MainMenuSaveData { #ifdef MULTILANG u8 language: 3; #endif - +#ifdef REONUCAM + u8 cameraSpeedSetting: 3; +#endif #ifdef PUPPYCAM u8 firstBoot; struct gPuppyOptions saveOptions; @@ -187,6 +189,10 @@ u32 save_file_get_sound_mode(void); u32 save_file_get_widescreen_mode(void); void save_file_set_widescreen_mode(u8 mode); #endif +#ifdef REONUCAM +u8 save_file_get_camera_speed(void); +void save_file_set_camera_speed(u8 speed); +#endif void save_file_move_cap_to_default_location(void); void disable_warp_checkpoint(void); From 69606acb309e6a4f8d486ae39cd1c1f85f0a2187 Mon Sep 17 00:00:00 2001 From: Reonu Date: Tue, 2 Apr 2024 16:43:18 +0100 Subject: [PATCH 02/36] delete text_srings.h.in file --- include/text_strings.h.in | 552 -------------------------------------- 1 file changed, 552 deletions(-) delete mode 100644 include/text_strings.h.in diff --git a/include/text_strings.h.in b/include/text_strings.h.in deleted file mode 100644 index 22b43a2f42..0000000000 --- a/include/text_strings.h.in +++ /dev/null @@ -1,552 +0,0 @@ -#ifndef TEXT_STRINGS_H -#define TEXT_STRINGS_H - -#include "text_menu_strings.h" - -#if defined(PUPPYCAM) -#define NC_CAMX_EN _("Camera X Sensitivity") -#define NC_CAMY_EN _("Camera Y Sensitivity") -#define NC_INVERTX_EN _("Invert X Axis") -#define NC_INVERTY_EN _("Invert Y Axis") -#define NC_CAMC_EN _("Camera Centre Speed") -#define NC_ANALOGUE_EN _("Analogue Camera") -#define NC_SCHEME_EN _("Control Scheme") -#define OPTION_ENABLED_EN _("Enabled") -#define OPTION_DISABLED_EN _("Disabled") -#define OPTION_SCHEME1_EN _("Double Tap") -#define OPTION_SCHEME2_EN _("Single Press") -#define OPTION_SCHEME3_EN _("Classic") -#define OPTION_LANGUAGE_EN _("Language") -#define NC_WIDE_EN _("Widescreen") -#define NC_HIGHLIGHT_L _(">") -#define NC_HIGHLIGHT_R _("<") -#define NC_BUTTON_EN _("[R]: Options") -#define NC_BUTTON2_EN _("[R]: Return") -#define NC_OPTION_EN _("OPTIONS") - -#if MULTILANG -#define NC_CAMX_FR _("Sensibilite sur l'axe X") -#define NC_CAMY_FR _("Sensibilite sur l'axe Y") -#define NC_INVERTX_FR _("Invertir Axe X") -#define NC_INVERTY_FR _("Invertir Axe Y") -#define NC_CAMC_FR _("Vitesse de Centrage") -#define NC_ANALOGUE_FR _("Camera Analogue") -#define NC_SCHEME_FR _("Control Scheme") -#define OPTION_ENABLED_FR _("Active") -#define OPTION_DISABLED_FR _("Desactive") -#define OPTION_SCHEME1_FR _("Double Tap") -#define OPTION_SCHEME2_FR _("Single Press") -#define OPTION_SCHEME3_FR _("Classic") -#define OPTION_LANGUAGE_FR _("Language") -#define NC_WIDE_FR _("Widescreen") -#define NC_BUTTON_FR _("[R]: Options") -#define NC_BUTTON2_FR _("[R]: Retournez") -#define NC_OPTION_FR _("OPTIONS") - -#define NC_CAMX_DE _("Camera X Sensitivity") -#define NC_CAMY_DE _("Camera Y Sensitivity") -#define NC_INVERTY_DE _("Invert Y Axis") -#define NC_INVERTX_DE _("Invert X Axis") -#define NC_CAMC_DE _("Camera Centre Speed") -#define NC_ANALOGUE_DE _("Analogue Camera") -#define NC_SCHEME_DE _("Control Scheme") -#define OPTION_ENABLED_DE _("Enabled") -#define OPTION_DISABLED_DE _("Disabled") -#define OPTION_SCHEME1_DE _("Double Tap") -#define OPTION_SCHEME2_DE _("Single Press") -#define OPTION_SCHEME3_DE _("Classic") -#define OPTION_LANGUAGE_DE _("Language") -#define NC_WIDE_DE _("Widescreen") -#define NC_BUTTON_DE _("[R]: Options") -#define NC_BUTTON2_DE _("[R]: Return") -#define NC_OPTION_DE _("OPTIONS") -#endif -#endif - -/** - * Global Symbols - */ -#define TEXT_ZERO _("0") -#define TEXT_COIN _("$") -#define TEXT_STAR _("★") -#define TEXT_COIN_X _("$×") -#define TEXT_STAR_X _("★×") -#define TEXT_VARIABLE_X _("×") -#define TEXT_UNFILLED_STAR _("☆") - -/** - * Global Text - */ -// File Select -#define TEXT_NEW _("NEW") // New File Text -#define TEXT_4DASHES _("----") // Used in Score File Menu - -// Ingame Menu -#define TEXT_PAUSE _("PAUSE") // Pause text, Castle Courses -#define TEXT_HUD_CONGRATULATIONS _("CONGRATULATIONS") // Course Complete Text, Bowser Courses - -//Widescreen stuff -#if defined(WIDE) && !defined(PUPPYCAM) -#define TEXT_HUD_CURRENT_RATIO_43 _("ASPECT RATIO: 4:3") -#define TEXT_HUD_CURRENT_RATIO_169 _("ASPECT RATIO: 16:9") -#define TEXT_HUD_PRESS_L _("PRESS L TO SWITCH") -#endif - -//Reonucam -#ifdef REONUCAM -#define TEXT_CAM_INFO_SLOWEST _("CAM SPEED: SLOWEST") -#define TEXT_CAM_INFO_SLOW _("CAM SPEED: SLOW") -#define TEXT_CAM_INFO_MEDIUM _("CAM SPEED: MEDIUM") -#define TEXT_CAM_INFO_FAST _("CAM SPEED: FAST") -#define TEXT_CAM_INFO_FASTEST _("CAM SPEED: FASTEST") -#endif - -#if defined(VERSION_JP) || defined(VERSION_SH) - -/** - * File Select Text - */ -// Main Screens -// JPHUD menu strings are defined in "text_menu_strings.h.in" -#define TEXT_MARIO TEXT_JPHUD_MARIO // View Score Menu -#define TEXT_SELECT_FILE TEXT_JPHUD_SELECT_FILE -#define TEXT_CHECK_FILE TEXT_JPHUD_CHECK_FILE -#define TEXT_COPY_FILE TEXT_JPHUD_COPY_FILE -#define TEXT_ERASE_FILE TEXT_JPHUD_ERASE_FILE -#define TEXT_SOUND_SELECT TEXT_JPHUD_SOUND_SELECT - -#define TEXT_FILE_MARIO_A _("マリオA") -#define TEXT_FILE_MARIO_B _("マリオB") -#define TEXT_FILE_MARIO_C _("マリオC") -#define TEXT_FILE_MARIO_D _("マリオD") - -// Menu Options -#define TEXT_SCORE _("スコア") -#define TEXT_COPY _("コピー") -#define TEXT_ERASE _("けす") - -// Sound Options -#define TEXT_STEREO _("ステレオ") -#define TEXT_MONO _("モノラル") -#define TEXT_HEADSET _("ヘッドホン") - -// Misc Menu Text -#define TEXT_SAVED_DATA_EXISTS _("ファイルにデータがはいってます") -#define TEXT_NO_SAVED_DATA_EXISTS _("ファイルにデータがありません") - -// Inside a Menu -#define TEXT_RETURN _("もどる") -#define TEXT_CHECK_SCORE _("スコアをみる") -#define TEXT_COPY_FILE_BUTTON _("ファイルコピー") -#define TEXT_ERASE_FILE_BUTTON _("ファイルけす") - -// Score Menu -#define TEXT_HI_SCORE _("ハイスコア") -#define TEXT_MY_SCORE _("マイスコア") -#define TEXT_SCORE_MARIO_A _("マリオA") -#define TEXT_SCORE_MARIO_B _("マリオB") -#define TEXT_SCORE_MARIO_C _("マリオC") -#define TEXT_SCORE_MARIO_D _("マリオD") - -// Copy Menu -#define TEXT_COPY_IT_TO_WHERE _("どこにコピーしますか?") -#define TEXT_COPYING_COMPLETED _("コピーおわりました") -#define TEXT_NO_FILE_TO_COPY_FROM _("からのファイルがありません") - -// Erase Menu -#define TEXT_SURE _("ほんと?") -#define TEXT_YES _("はい") -#define TEXT_NO _("いいえ") -#define TEXT_FILE_MARIO_A_JUST_ERASED _("マリオAをけしました") - -/** - * Menus Text (Pause, Course Completed) - */ -// Main Courses -#define TEXT_COURSE _("コース") -#define TEXT_MYSCORE _("マイスコア") -#define TEXT_CONTINUE _("つづけて マリオする?") -#define TEXT_EXIT_COURSE _("コースからでる?") -#define TEXT_CAMERA_ANGLE_R _("Rボタンのカメラきりかえ") - -// Camera Options -#define TEXT_LAKITU_MARIO _("ジュゲム↔マリオ") -#define TEXT_LAKITU_STOP _("ジュゲム↔ストップ") -#define TEXT_NORMAL_UPCLOSE _("(おすすめ)(リアル)") -#define TEXT_NORMAL_FIXED _("(おすすめ)(とまる)") - -// Course Completed Misc Text -#define TEXT_CATCH _("キャッチ!") -#define TEXT_CLEAR _("クリア!") -#define TEXT_HUD_HI_SCORE _("HISCORE") - -// Save Options -#define TEXT_SAVE_AND_CONTINUE _("セーブしてつづける?") -#define TEXT_SAVE_AND_QUIT _("セーブしておわる?") -#define TEXT_CONTINUE_WITHOUT_SAVING _("セーブしないでつづける?") - -/** - * Ending Peach cutscene text. - */ -#define TEXT_FILE_MARIO_EXCLAMATION _("マリオ!!") -#define TEXT_POWER_STARS_RESTORED _("おしろにスターが もどったのね") -#define TEXT_THANKS_TO_YOU _("みんな あなたのおかげだわ!") -#define TEXT_THANK_YOU_MARIO _("ありがとう マリオ") -#define TEXT_SOMETHING_SPECIAL _("なにか おれいをしなくちゃ・・") -#define TEXT_LISTEN_EVERYBODY _("さあ みんな") -#define TEXT_LETS_HAVE_CAKE _("おいしいケーキを やきましょう") -#define TEXT_FOR_MARIO _("マリオの ために・・・") -#define TEXT_FILE_MARIO_QUESTION _("マリオ?") - -#endif - -#if defined(VERSION_US) || defined(VERSION_EU) - -/** - * File Select Text - */ -// Main Screens -#define TEXT_MARIO _("MARIO") // View Score Menu -#define TEXT_SELECT_FILE _("SELECT FILE") -#define TEXT_CHECK_FILE _("CHECK FILE") -#define TEXT_COPY_FILE _("COPY FILE") -#define TEXT_ERASE_FILE _("ERASE FILE") -#define TEXT_SOUND_SELECT _("SOUND SELECT") -#define TEXT_FILE_MARIO_A _("MARIO A") -#define TEXT_FILE_MARIO_B _("MARIO B") -#define TEXT_FILE_MARIO_C _("MARIO C") -#define TEXT_FILE_MARIO_D _("MARIO D") - -// Menu Options -#define TEXT_SCORE _("SCORE") -#define TEXT_COPY _("COPY") -#define TEXT_ERASE _("ERASE") - -// Sound Options -#define TEXT_STEREO _("STEREO") -#define TEXT_MONO _("MONO") -#define TEXT_HEADSET _("HEADSET") - -// Misc Menu Text -#define TEXT_SAVED_DATA_EXISTS _("SAVED DATA EXITS") // Misspell -#define TEXT_NO_SAVED_DATA_EXISTS _("NO SAVED DATA EXISTS") - -// Inside a Menu -#define TEXT_RETURN _("RETURN") -#define TEXT_CHECK_SCORE _("CHECK SCORE") -#define TEXT_COPY_FILE_BUTTON _("COPY FILE") -#define TEXT_ERASE_FILE_BUTTON _("ERASE FILE") - -// Score Menu -#define TEXT_HI_SCORE _("HI SCORE") -#define TEXT_MY_SCORE _("MY SCORE") -// Score Mario Text ("☺" is the Mario face defined in the US/EU menu char table) -#define TEXT_SCORE_MARIO_A _("☺A") -#define TEXT_SCORE_MARIO_B _("☺B") -#define TEXT_SCORE_MARIO_C _("☺C") -#define TEXT_SCORE_MARIO_D _("☺D") - -// Copy Menu -#define TEXT_COPY_IT_TO_WHERE _("COPY IT TO WHERE?") -#define TEXT_COPYING_COMPLETED _("COPYING COMPLETED") -#define TEXT_NO_FILE_TO_COPY_FROM _("NO EMPTY FILE") - -// Erase Menu -#define TEXT_SURE _("SURE?") -#define TEXT_YES _("YES") -#define TEXT_NO _("NO") -#define TEXT_FILE_MARIO_A_JUST_ERASED _("MARIO A JUST ERASED") - -/** - * Menus Text (Pause, Course Completed) - */ -// Main Courses -#define TEXT_COURSE _("COURSE") -#define TEXT_MYSCORE _("MYSCORE") -#define TEXT_CONTINUE _("CONTINUE") -#define TEXT_EXIT_COURSE _("EXIT COURSE") -#ifndef VERSION_EU // "R" text is different in EU -#define TEXT_CAMERA_ANGLE_R _("SET CAMERA ANGLE WITH R") -#endif - -// Camera Options -#define TEXT_LAKITU_MARIO _("LAKITU + MARIO") -#define TEXT_LAKITU_STOP _("LAKITU + STOP") -#define TEXT_NORMAL_UPCLOSE __("(NORMAL)(UP-CLOSE)") -#define TEXT_NORMAL_FIXED __("(NORMAL)(FIXED)") - -// Course Completed Misc Text -#define TEXT_CATCH _("CATCH") -#define TEXT_CLEAR _("CLEAR") -#define TEXT_HUD_HI_SCORE _("HI SCORE") - -// Save Options -#define TEXT_SAVE_AND_CONTINUE _("SAVE & CONTINUE") -#define TEXT_SAVE_AND_QUIT _("SAVE & QUIT") -#define TEXT_CONTINUE_WITHOUT_SAVING _("CONTINUE, DON'T SAVE") - -/** - * Ending Peach cutscene text. - */ -#define TEXT_FILE_MARIO_EXCLAMATION _("Mario!") -#define TEXT_POWER_STARS_RESTORED __("The power of the Stars is restored to the castle...") -#define TEXT_THANKS_TO_YOU __("...and it's all thanks to you!") -#define TEXT_THANK_YOU_MARIO __("Thank you, Mario!") -#define TEXT_SOMETHING_SPECIAL __("We have to do something special for you...") -#define TEXT_LISTEN_EVERYBODY _("Listen, everybody,") -#define TEXT_LETS_HAVE_CAKE _("let's bake a delicious cake...") -#define TEXT_FOR_MARIO _("...for Mario...") -#define TEXT_FILE_MARIO_QUESTION _("Mario!") - -#endif - - -#define TEXT_ENGLISH _("ENGLISH") -#define TEXT_FRENCH _("FRANÇAIS") -#define TEXT_GERMAN _("DEUTSCH") - -#if MULTILANG - -/** - * File Select Text - */ -#define TEXT_RETURN_FR _("RETOUR") -#define TEXT_RETURN_DE _("ZURÜCK") - -#define TEXT_CHECK_SCORE_FR _("SCORE") -#define TEXT_CHECK_SCORE_DE _("LEISTUNG") - -#define TEXT_COPY_FILE_FR _("COPIER") -#define TEXT_COPY_FILE_DE _("KOPIEREN") - -#define TEXT_ERASE_FILE_FR _("EFFACER") -#define TEXT_ERASE_FILE_DE _("LÖSCHEN") - -#define TEXT_SELECT_FILE_FR _("CHOISIR FICHIER") -#define TEXT_SELECT_FILE_DE _("WwHLE SPIEL") - -#define TEXT_SCORE_FR _("SCORE") -#define TEXT_SCORE_DE _("LEISTUNG") - -#define TEXT_COPY_FR _("COPIER") -#define TEXT_COPY_DE _("KOPIEREN") - -#define TEXT_ERASE_FR _("EFFACER") -#define TEXT_ERASE_DE _("LÖSCHEN") - -#define TEXT_OPTION _("OPTION") // new in EU -#define TEXT_OPTION_FR _("OPTION") -#define TEXT_OPTION_DE _("OPTIONEN") - -#define TEXT_CHECK_FILE_FR _("VOIR SCORE") -#define TEXT_CHECK_FILE_DE _("VON WELCHEM SPIEL") - -#define TEXT_NO_SAVED_DATA_EXISTS_FR _("AUCUNE SAUVEGARDE DISPONIBLE") -#define TEXT_NO_SAVED_DATA_EXISTS_DE _("KEIN SPIEL VORHANDEN") - -#define TEXT_COPY_FILE_BUTTON_FR _("COPIER FICHIER") -#define TEXT_COPY_FILE_BUTTON_DE _("SPIEL KOPIEREN") - -#define TEXT_COPY_IT_TO_WHERE_FR _("COPIER SUR?") -#define TEXT_COPY_IT_TO_WHERE_DE _("WOHIN KOPIEREN?") - -#define TEXT_COPYING_COMPLETED_FR _("COPIE ACHEVEÉ") -#define TEXT_COPYING_COMPLETED_DE _("SPIEL KOPIERT") - -#define TEXT_SAVED_DATA_EXISTS_FR _("SAVEGARDE EXISTANTE") -#define TEXT_SAVED_DATA_EXISTS_DE _("BEREITS BELEGT") - -#define TEXT_NO_FILE_TO_COPY_FROM_FR _("AUCUN FICHIER VIDE") -#define TEXT_NO_FILE_TO_COPY_FROM_DE _("KEIN PLATZ VORHANDEN") - -#define TEXT_YES_FR _("OUI") -#define TEXT_YES_DE _("JA") - -#define TEXT_NO_FR _("NON") -#define TEXT_NO_DE _("NEIN") - -#define TEXT_ERASE_FILE_BUTTON_FR _("EFFACER FICHIER") -#define TEXT_ERASE_FILE_BUTTON_DE _("SPIEL LxSCHEN") - -#define TEXT_SURE_FR _("OK?") -#define TEXT_SURE_DE _("SICHER?") - -#define TEXT_FILE_MARIO_A_JUST_ERASED_FR _("MARIO A EFFACÉ") -#define TEXT_FILE_MARIO_A_JUST_ERASED_DE _("MARIO A GELÖSCHT") - -#define TEXT_SOUND_SELECT_FR _("SON") -#define TEXT_SOUND_SELECT_DE _("SOUND") - -#define TEXT_LANGUAGE_SELECT _("LANGUAGE SELECT") // new in EU -#define TEXT_LANGUAGE_SELECT_FR _("SELECTION LANGUE") -#define TEXT_LANGUAGE_SELECT_DE _("WwHLE SPRACHE") - -#define TEXT_STEREO_FR _("STÉRÉO") -#define TEXT_MONO_FR _("MONO") -#define TEXT_HEADSET_FR _("CASQUE") - -#define TEXT_STEREO_DE _("STEREO") -#define TEXT_MONO_DE _("MONO") -#define TEXT_HEADSET_DE _("PHONES") - -#define TEXT_HI_SCORE_FR _("MEILLEUR SCORE") -#define TEXT_HI_SCORE_DE _("BESTLEISTUNG") - -#define TEXT_MY_SCORE_FR _("MON SCORE") -#define TEXT_MY_SCORE_DE _("LEISTUNG") - -#define TEXT_NEW_FR _("VIDE") -#define TEXT_NEW_DE _("FREI") - - -/** - * Menus Text (Pause, Course Completed) - */ -// Main Courses -// English, "R" text is different -#define TEXT_CAMERA_ANGLE_R _("SET CAMERA ANGLE WITH [R]") -// French -#define TEXT_COURSE_FR _("NIVEAU") -#define TEXT_MY_SCORE_FR _("MON SCORE") -#define TEXT_CONTINUE_FR _("CONTINUER") -#define TEXT_EXIT_COURSE_FR _("QUITTER NIVEAU") -#define TEXT_CAMERA_ANGLE_R_FR _("RÉGLAGE CAMÉRA AVEC [R]") -// German -#define TEXT_COURSE_DE _("KURS") -#define TEXT_MY_SCORE_DE _("LEISTUNG") -#define TEXT_CONTINUE_DE _("WEITER") -#define TEXT_EXIT_COURSE_DE _("KURS VERLASSEN") -#define TEXT_CAMERA_ANGLE_R_DE _("KAMERA MIT [R] VERSTELLEN") - -// Camera Options -// French -#define TEXT_NORMAL_UPCLOSE_FR __("(NORMAL)(GROS-PLAN)") -#define TEXT_NORMAL_FIXED_FR __("(NORMAL)(FIXE)") -// German -#define TEXT_NORMAL_UPCLOSE_DE __("(NORMAL)(WEIT-ZOOM)") -#define TEXT_NORMAL_FIXED_DE __("(NORMAL)(STATIV)") - -// Course Completed Misc Text -// French -#define TEXT_HUD_HI_SCORE_FR _("MEILLEUR SCORE") -#define TEXT_HUD_CONGRATULATIONS_FR _("FELICITATIONS") -// German -#define TEXT_HUD_HI_SCORE_DE _("BESTLEISTUNG") -#define TEXT_HUD_CONGRATULATIONS_DE _("GRATULATION") - -// Save Options -// French -#define TEXT_SAVE_AND_CONTINUE_FR _("SAUVEGARDER & CONTINUER") -#define TEXT_SAVE_AND_QUIT_FR _("SAUVEGARDER & QUITTER") -#define TEXT_CONTINUE_WITHOUT_SAVING_FR _("CONTINUER SANS SAUVEGARDER") -// German -#define TEXT_SAVE_AND_CONTINUE_DE _("SPEICHERN & WEITER") -#define TEXT_SAVE_AND_QUIT_DE _("SPEICHERN & ENDE") -#define TEXT_CONTINUE_WITHOUT_SAVING_DE _("WEITER OHNE ZU SPEICHERN") - -/** - * Ending Peach cutscene text. - */ -// French -#define TEXT_POWER_STARS_RESTORED_FR _("Grâce aux étoiles, le château a retrouvé ses pouvoirs...") -#define TEXT_THANKS_TO_YOU_FR _("...et ceci grâce à toi!") -#define TEXT_THANK_YOU_MARIO_FR _("Merci, Mario!") -#define TEXT_SOMETHING_SPECIAL_FR _("Tu mérites une récompense...") -#define TEXT_COME_ON_EVERYBODY_FR _("Venez les amis...") -#define TEXT_LETS_HAVE_CAKE_FR _("Allons préparer un délicieux gâteau...") -#define TEXT_FOR_MARIO_FR _("...pour Mario...") -// German -#define TEXT_POWER_STARS_RESTORED_DE _("Die Macht der Sterne ruht wieder sicher im Schloss...") -#define TEXT_THANKS_TO_YOU_DE _("...und alles dank Deiner Hilfe!") -#define TEXT_THANK_YOU_MARIO_DE _("Vielen Dank, Mario!") -#define TEXT_SOMETHING_SPECIAL_DE _("Wir haben eine Überraschung für Dich...") -#define TEXT_COME_ON_EVERYBODY_DE _("Hört alle her...") -#define TEXT_LETS_HAVE_CAKE_DE _("Laßt uns einen leckeren Kuchen backen...") -#define TEXT_FOR_MARIO_DE _("...für Mario...") - -/** - * Course Table names for Score Menu Save view - */ -#define TEXT_MENU_BOB _(" 1 BOB-OMB BATTLEFIELD") -#define TEXT_MENU_WF _(" 2 WHOMP'S FORTRESS") -#define TEXT_MENU_JRB _(" 3 JOLLY ROGER BAY") -#define TEXT_MENU_CCM _(" 4 COOL, COOL MOUNTAIN") -#define TEXT_MENU_BBH _(" 5 BIG BOO'S HAUNT") -#define TEXT_MENU_HMC _(" 6 HAZY MAZE CAVE") -#define TEXT_MENU_LLL _(" 7 LETHAL LAVA LAND") -#define TEXT_MENU_SSL _(" 8 SHIFTING SAND LAND") -#define TEXT_MENU_DDD _(" 9 DIRE, DIRE DOCKS") -#define TEXT_MENU_SL _("10 SNOWMAN'S LAND") -#define TEXT_MENU_WDW _("11 WET-DRY WORLD") -#define TEXT_MENU_TTM _("12 TALL, TALL MOUNTAIN") -#define TEXT_MENU_THI _("13 TINY-HUGE ISLAND") -#define TEXT_MENU_TTC _("14 TICK TOCK CLOCK") -#define TEXT_MENU_RR _("15 RAINBOW RIDE") -#define TEXT_MENU_BITDW _(" BOWSER IN THE DARK WORLD") -#define TEXT_MENU_BITFS _(" BOWSER IN THE FIRE SEA") -#define TEXT_MENU_BITS _(" BOWSER IN THE SKY") -#define TEXT_MENU_PSS _(" THE PRINCESS'S SECRET SLIDE") -#define TEXT_MENU_COTMC _(" CAVERN OF THE METAL CAP") -#define TEXT_MENU_TOTWC _(" TOWER OF THE WING CAP") -#define TEXT_MENU_VCUTM _(" VANISH CAP UNDER THE MOAT") -#define TEXT_MENU_WMOTR _(" WING MARIO OVER THE RAINBOW") -#define TEXT_MENU_SA _(" THE SECRET AQUARIUM") -#define TEXT_MENU_NONE _("") -#define TEXT_MENU_STARS _(" CASTLE SECRET STARS") - -#define TEXT_MENU_BOB_FR _(" 1 BATAILLE DE BOB-OMB") -#define TEXT_MENU_WF_FR _(" 2 FORTERESSE DE WHOMP") -#define TEXT_MENU_JRB_FR _(" 3 BAIE DES PIRATES") -#define TEXT_MENU_CCM_FR _(" 4 MONTAGNE GLA-GLA") -#define TEXT_MENU_BBH_FR _(" 5 MANOIR DE BIG BOO") -#define TEXT_MENU_HMC_FR _(" 6 CAVERNE BRUMEUSE") -#define TEXT_MENU_LLL_FR _(" 7 LAVES FATALES") -#define TEXT_MENU_SSL_FR _(" 8 SABLES TROP MOUVANTS") -#define TEXT_MENU_DDD_FR _(" 9 AFFREUX BASSIN") -#define TEXT_MENU_SL_FR _("10 CHEZ LE ROI DES NEIGES") -#define TEXT_MENU_WDW_FR _("11 MONDE TREMPE-SECHE") -#define TEXT_MENU_TTM_FR _("12 TROP HAUTE MONTAGNE") -#define TEXT_MENU_THI_FR _("13 ILE GRANDS-PETITS") -#define TEXT_MENU_TTC_FR _("14 HORLOGE TIC-TAC") -#define TEXT_MENU_RR_FR _("15 COURSE ARC-EN-CIEL") -#define TEXT_MENU_BITDW_FR _(" BOWSER DES TENEBRES") -#define TEXT_MENU_BITFS_FR _(" BOWSER DES LAVES") -#define TEXT_MENU_BITS_FR _(" BOWSER DES CIEUX") -#define TEXT_MENU_PSS_FR _(" GLISSADE DE LA PRINCESSE") -#define TEXT_MENU_COTMC_FR _(" MINE DES CASQUETTES-METAL") -#define TEXT_MENU_TOTWC_FR _(" INTERRUPTEUR DE LA TOUR AILEE") -#define TEXT_MENU_VCUTM_FR _(" INVISIBLE SOUS LES DOUVES") -#define TEXT_MENU_WMOTR_FR _(" AU-DELA DE L'ARC-EN-CIEL") -#define TEXT_MENU_SA_FR _(" AQUARIUM SECRET") -#define TEXT_MENU_NONE_FR _("") -#define TEXT_MENU_STARS_FR _(" ETOILES SECRETES") - -#define TEXT_MENU_BOB_DE _(" 1 BOB-OMBS BOMBENBERG") -#define TEXT_MENU_WF_DE _(" 2 WUMMPS WUCHTWALL") -#define TEXT_MENU_JRB_DE _(" 3 PIRATENBUCHT PANIK") -#define TEXT_MENU_CCM_DE _(" 4 BIBBERBERG BOB") -#define TEXT_MENU_BBH_DE _(" 5 BIG BOOS BURG") -#define TEXT_MENU_HMC_DE _(" 6 GRÜNE GIFTGROTTE") -#define TEXT_MENU_LLL_DE _(" 7 LAVA LAGUNE") -#define TEXT_MENU_SSL_DE _(" 8 WOBIWABA WÜSTE") -#define TEXT_MENU_DDD_DE _(" 9 WILDE WASSERWERFT") -#define TEXT_MENU_SL_DE _("10 FROSTBEULEN FRUST") -#define TEXT_MENU_WDW_DE _("11 ATLANTIS AQUARIA") -#define TEXT_MENU_TTM_DE _("12 FLIEGENPILZ FIASKO") -#define TEXT_MENU_THI_DE _("13 GULLIVER GUMBA") -#define TEXT_MENU_TTC_DE _("14 TICK TACK TRAUMA") -#define TEXT_MENU_RR_DE _("15 REGENBOGEN RASEREI") -#define TEXT_MENU_BITDW_DE _(" BOWSERS SCHATTENWELT") -#define TEXT_MENU_BITFS_DE _(" BOWSERS LAVASEE") -#define TEXT_MENU_BITS_DE _(" BOWSERS LUFTSCHLOSS") -#define TEXT_MENU_PSS_DE _(" TOADSTOOLS RUTSCHBAHN") -#define TEXT_MENU_COTMC_DE _(" GRÜNER SCHALTERPALAST") -#define TEXT_MENU_TOTWC_DE _(" ROTER SCHALTERPALAST") -#define TEXT_MENU_VCUTM_DE _(" BLAUER SCHALTERPALAST") -#define TEXT_MENU_WMOTR_DE _(" REGENBOGEN FEUERWERK") -#define TEXT_MENU_SA_DE _(" VERSTECKTES AQUARIUM") -#define TEXT_MENU_NONE_DE _("") -#define TEXT_MENU_STARS_DE _(" GEHEIME STERNE") -#endif // VERSION_EU - -#endif // TEXT_STRINGS_H From fc86b1145646a54663c89dc128abdc64fc9186cc Mon Sep 17 00:00:00 2001 From: Reonu Date: Wed, 17 Apr 2024 19:39:14 +0100 Subject: [PATCH 03/36] removed oudated config info --- include/config/config_camera.h | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/include/config/config_camera.h b/include/config/config_camera.h index 6f1359dfe8..04ce981616 100644 --- a/include/config/config_camera.h +++ b/include/config/config_camera.h @@ -51,12 +51,8 @@ // Enables Reonucam, a custom camera that aims to be a more feature-rich "aglabcam" that also uses less buttons. // An explanation the features can be seen here: https://www.youtube.com/watch?v=TQNkznX9Z3k (please note that the analog feature shown at the end is no longer present) -// #define REONUCAM +#define REONUCAM -// Note: Reonucam is available, but because we had no time to test it properly, it's included as a patch rather than being in the code by default. -// Run this command to apply the patch if you want to use it: -// tools/apply_patch.sh enhancements/reonucam.patch -// Consider it a beta, but it should work fine. Please report any bugs with it. Applying the patch will simply add a define here, so you can still turn it off even after patching. /**********************************/ /***** Vanilla config options *****/ From 111a5a7c10b4bf4b9eb9a2c601464800f60b7e63 Mon Sep 17 00:00:00 2001 From: Reonu Date: Wed, 17 Apr 2024 19:39:49 +0100 Subject: [PATCH 04/36] cleaner printing code + multilang --- src/game/camera.c | 22 ++------------- src/game/camera.h | 2 +- src/game/ingame_menu.c | 62 +++++++++++++++++------------------------- 3 files changed, 28 insertions(+), 58 deletions(-) diff --git a/src/game/camera.c b/src/game/camera.c index fdfa40c52e..ad4df48dff 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -457,25 +457,6 @@ CameraTransition sModeTransitions[] = { extern u8 sDanceCutsceneIndexTable[][4]; extern u8 sZoomOutAreaMasks[]; -#ifdef REONUCAM -// Returns the camera speed based on the user's camera speed setting -f32 set_camera_speed(void) { - switch(gReonucamState.speed) { - case 0: - return 0.5f; - case 1: - return 1; - case 2: - return 1.5f; - case 3: - return 2; - case 4: - return 3.5f; - } - return 0; -} -#endif - /** * Starts a camera shake triggered by an interaction */ @@ -1161,9 +1142,10 @@ s32 snap_to_45_degrees(s16 angle) { } #ifdef REONUCAM +f32 cameraSpeeds[] = {0.5f, 1.f, 1.5f, 2.f, 3.5f}; // The camera speed settings, from slowest to fastest. void reonucam_handler(void) { // Get the camera speed based on the user's setting - f32 cameraSpeed = set_camera_speed(); + f32 cameraSpeed = cameraSpeeds[gReonucamState.speed]; //45º rotations if ((gPlayer1Controller->buttonPressed & L_CBUTTONS) && !(gPlayer1Controller->buttonDown & R_TRIG)) { s8DirModeBaseYaw -= DEGREES(45); diff --git a/src/game/camera.h b/src/game/camera.h index ad8bc11aa1..1a7e3f4d95 100644 --- a/src/game/camera.h +++ b/src/game/camera.h @@ -92,7 +92,7 @@ #ifdef REONUCAM struct ReonucamState { - u8 speed; + s8 speed; u8 waterCamOverride; u8 flyingCamOverride; u8 keepCliffCam; diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c index 289c4743d6..70469aeb04 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c @@ -89,14 +89,6 @@ const struct LanguageTables gLanguageTables[] = DEFINE_LANGUAGE_ARRAY( LANGUAGE_TABLES(dialog_table_es, course_name_table_es, act_name_table_es) ); -#ifdef REONUCAM -u8 textCamInfoSlowest[] = { TEXT_CAM_INFO_SLOWEST }; -u8 textCamInfoSlow[] = { TEXT_CAM_INFO_SLOW }; -u8 textCamInfoMedium[] = { TEXT_CAM_INFO_MEDIUM }; -u8 textCamInfoFast[] = { TEXT_CAM_INFO_FAST}; -u8 textCamInfoFastest[] = { TEXT_CAM_INFO_FASTEST }; -#endif - extern u8 gLastCompletedCourseNum; extern u8 gLastCompletedStarNum; @@ -1533,44 +1525,40 @@ void reset_red_coins_collected(void) { gRedCoinsCollected = 0; } +LangArray textReonucam1 = DEFINE_LANGUAGE_ARRAY( + "CAMERA SPEED: %d", + "FRENCH PLACEHOLDER: %d", + "KAMERA GESCHWINDIGKEIT: %d", + "JAPANESE PLACEHOLDER: %d", + "VELOCIDAD DE CÁMARA: %d"); + +LangArray textReonucam2 = DEFINE_LANGUAGE_ARRAY( + "DPAD TO CHANGE", + "FRENCH PLACEHOLDER", + "DPAD ZU ÄNDERN", + "JAPANESE PLACEHOLDER", + "DPAD PARA CAMBIAR"); + #ifdef REONUCAM void render_reonucam_speed_setting(void) { + char buf[25]; gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); - switch (gReonucamState.speed) { - case 0: - print_generic_string(190, 20, textCamInfoSlowest); - break; - case 1: - print_generic_string(190, 20, textCamInfoSlow); - break; - case 2: - print_generic_string(190, 20, textCamInfoMedium); - break; - case 3: - print_generic_string(190, 20, textCamInfoFast); - break; - case 4: - print_generic_string(190, 20, textCamInfoFastest); - break; - } + sprintf(buf, LANG_ARRAY(textReonucam1), gReonucamState.speed +1 ); + + print_generic_string_aligned(310, 24, buf, TEXT_ALIGN_RIGHT); + print_generic_string_aligned(310, 8, LANG_ARRAY(textReonucam2), TEXT_ALIGN_RIGHT); + + gSPDisplayList(gDisplayListHead++, dl_ia_text_end); if (gPlayer1Controller->buttonPressed & R_JPAD) { - if (gReonucamState.speed < 4) { - gReonucamState.speed += 1; - } else { - gReonucamState.speed = 0; - } - save_file_set_camera_speed(gReonucamState.speed); + gReonucamState.speed++; } else if (gPlayer1Controller->buttonPressed & L_JPAD) { - if (gReonucamState.speed > 0) { - gReonucamState.speed -= 1; - } else { - gReonucamState.speed = 4; - } - save_file_set_camera_speed(gReonucamState.speed); + gReonucamState.speed--; } + gReonucamState.speed = (gReonucamState.speed + 5) % 5; + save_file_set_camera_speed(gReonucamState.speed); } #endif From 8b54cf6f17333046f887dfe7830f95416ad1baa4 Mon Sep 17 00:00:00 2001 From: Reonu Date: Wed, 17 Apr 2024 21:25:08 +0100 Subject: [PATCH 05/36] add camera collision --- include/config/config_camera.h | 7 +++++- src/game/camera.c | 44 ++++++++++++++++++++++++++++++++-- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/include/config/config_camera.h b/include/config/config_camera.h index 04ce981616..9b771be9ed 100644 --- a/include/config/config_camera.h +++ b/include/config/config_camera.h @@ -49,9 +49,14 @@ */ // #define PUPPYCAM +/** + * Enables camera collision for 8 direction camera and, by extension, to Reonucam if enabled. + */ +//#define EIGHT_DIR_CAMERA_COLLISION + // Enables Reonucam, a custom camera that aims to be a more feature-rich "aglabcam" that also uses less buttons. // An explanation the features can be seen here: https://www.youtube.com/watch?v=TQNkznX9Z3k (please note that the analog feature shown at the end is no longer present) -#define REONUCAM +//#define REONUCAM /**********************************/ diff --git a/src/game/camera.c b/src/game/camera.c index ad4df48dff..e36f9cf1ee 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -1141,6 +1141,43 @@ s32 snap_to_45_degrees(s16 angle) { return angle; } +#ifdef EIGHT_DIR_CAMERA_COLLISION +void eight_dir_collision_handler(struct Camera *c) { + struct Surface *surf; + Vec3f camdir; + Vec3f origin; + Vec3f thick; + Vec3f hitpos; + vec3f_copy(origin,gMarioState->pos); + origin[1] += 50.0f; + camdir[0] = c->pos[0] - origin[0]; + camdir[1] = c->pos[1] - origin[1]; + camdir[2] = c->pos[2] - origin[2]; + find_surface_on_ray(origin, camdir, &surf, hitpos, (RAYCAST_FIND_FLOOR | RAYCAST_FIND_WALL | RAYCAST_FIND_CEIL)); + if (surf) { + f32 distFromSurf = 100.0f; + f32 dist; + f32 yDist = 0; + Vec3f camToMario; + vec3f_diff(camToMario, gMarioState->pos, hitpos); + s16 yaw = atan2s(camToMario[2], camToMario[0]); + vec3f_get_lateral_dist(hitpos,gMarioState->pos, &dist); + #define MIN_CAMERA_DISTANCE 300.0f // Minimum distance between Mario and the camera. See the next comment. + if (dist < MIN_CAMERA_DISTANCE) { + distFromSurf += (dist - MIN_CAMERA_DISTANCE); // If Mario runs right up to the screen, the camera pull back slightly... + yDist = MIN_CAMERA_DISTANCE - CLAMP(dist, 0, MIN_CAMERA_DISTANCE); // ...and also up slightly. + } + thick[0] = sins(yaw) * distFromSurf; + thick[1] = yDist; + thick[2] = coss(yaw) * distFromSurf; + vec3f_add(hitpos,thick); + vec3f_copy(c->pos,hitpos); + + } + c->yaw = atan2s(c->pos[2] - gMarioState->pos[2], c->pos[0] - gMarioState->pos[0]); +} +#endif + #ifdef REONUCAM f32 cameraSpeeds[] = {0.5f, 1.f, 1.5f, 2.f, 3.5f}; // The camera speed settings, from slowest to fastest. void reonucam_handler(void) { @@ -1148,9 +1185,9 @@ void reonucam_handler(void) { f32 cameraSpeed = cameraSpeeds[gReonucamState.speed]; //45º rotations if ((gPlayer1Controller->buttonPressed & L_CBUTTONS) && !(gPlayer1Controller->buttonDown & R_TRIG)) { - s8DirModeBaseYaw -= DEGREES(45); + s8DirModeBaseYaw = snap_to_45_degrees(s8DirModeBaseYaw - DEGREES(45)); } else if ((gPlayer1Controller->buttonPressed & R_CBUTTONS) && !(gPlayer1Controller->buttonDown & R_TRIG)) { - s8DirModeBaseYaw += DEGREES(45); + s8DirModeBaseYaw = snap_to_45_degrees(s8DirModeBaseYaw + DEGREES(45)); } //Smooth rotation if (gPlayer1Controller->buttonDown & R_TRIG) { @@ -1231,6 +1268,9 @@ void mode_8_directions_camera(struct Camera *c) { c->pos[0] = pos[0]; c->pos[2] = pos[2]; sAreaYawChange = sAreaYaw - oldAreaYaw; +#ifdef EIGHT_DIR_CAMERA_COLLISION + eight_dir_collision_handler(c); +#endif #ifndef REONUCAM set_camera_height(c, pos[1]); #endif From 3c49d2fa499d0025b667cd2f6b92c6444cff65a7 Mon Sep 17 00:00:00 2001 From: Reonu Date: Wed, 17 Apr 2024 21:45:41 +0100 Subject: [PATCH 06/36] add comment --- include/config/config_camera.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/config/config_camera.h b/include/config/config_camera.h index 9b771be9ed..eb07ebb214 100644 --- a/include/config/config_camera.h +++ b/include/config/config_camera.h @@ -51,12 +51,14 @@ /** * Enables camera collision for 8 direction camera and, by extension, to Reonucam if enabled. + * If you enable it, please consider using surface types with the SURFACE_FLAG_NO_CAM_COLLISION flag for small obstacles, + * such as fences, pillars, signs, etc, in order to make your game more enjoyable and not let the camera get in the way of gameplay. */ -//#define EIGHT_DIR_CAMERA_COLLISION +#define EIGHT_DIR_CAMERA_COLLISION // Enables Reonucam, a custom camera that aims to be a more feature-rich "aglabcam" that also uses less buttons. // An explanation the features can be seen here: https://www.youtube.com/watch?v=TQNkznX9Z3k (please note that the analog feature shown at the end is no longer present) -//#define REONUCAM +#define REONUCAM /**********************************/ From ba9fb419d9c2725891ef577d35b9958654578e34 Mon Sep 17 00:00:00 2001 From: Reonu Date: Wed, 17 Apr 2024 21:53:44 +0100 Subject: [PATCH 07/36] cast the ray from 300 units above mario --- src/game/camera.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/camera.c b/src/game/camera.c index e36f9cf1ee..bf0d58f537 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -1149,7 +1149,7 @@ void eight_dir_collision_handler(struct Camera *c) { Vec3f thick; Vec3f hitpos; vec3f_copy(origin,gMarioState->pos); - origin[1] += 50.0f; + origin[1] += 300.0f; // the ray is cast from 300 units above Mario in order to prevent small obstacles from constantly snapping the camera camdir[0] = c->pos[0] - origin[0]; camdir[1] = c->pos[1] - origin[1]; camdir[2] = c->pos[2] - origin[2]; From 54727ceef176c2fb9fa95ebd48b6f82f8a634388 Mon Sep 17 00:00:00 2001 From: Reonu Date: Wed, 17 Apr 2024 22:58:02 +0100 Subject: [PATCH 08/36] set default camera speed to medium --- src/game/save_file.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/game/save_file.c b/src/game/save_file.c index c5d78d1a7c..898d82bb90 100644 --- a/src/game/save_file.c +++ b/src/game/save_file.c @@ -236,6 +236,10 @@ static void wipe_main_menu_data(void) { gSaveBuffer.menuData.coinScoreAges[1] = 0x2AAAAAAA; gSaveBuffer.menuData.coinScoreAges[2] = 0x15555555; +#ifdef REONUCAM + gSaveBuffer.menuData.cameraSpeedSetting = 2; +#endif + gMainMenuDataModified = TRUE; save_main_menu_data(); } From b91fb4255cb1b5443a517f7e0f3af5de17a7e5c5 Mon Sep 17 00:00:00 2001 From: Reonu Date: Wed, 17 Apr 2024 22:59:26 +0100 Subject: [PATCH 09/36] add comment --- src/game/save_file.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/save_file.c b/src/game/save_file.c index 898d82bb90..2e222ca254 100644 --- a/src/game/save_file.c +++ b/src/game/save_file.c @@ -237,7 +237,7 @@ static void wipe_main_menu_data(void) { gSaveBuffer.menuData.coinScoreAges[2] = 0x15555555; #ifdef REONUCAM - gSaveBuffer.menuData.cameraSpeedSetting = 2; + gSaveBuffer.menuData.cameraSpeedSetting = 2; // Set default Reonucam speed to medium on first boot #endif gMainMenuDataModified = TRUE; From 54bd5bc9033ae79b722890a3c53bb449027e039a Mon Sep 17 00:00:00 2001 From: Reonu Date: Wed, 17 Apr 2024 23:01:40 +0100 Subject: [PATCH 10/36] clarify config_camera stuff --- include/config/config_camera.h | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/include/config/config_camera.h b/include/config/config_camera.h index eb07ebb214..7351adc9da 100644 --- a/include/config/config_camera.h +++ b/include/config/config_camera.h @@ -40,26 +40,25 @@ #define FAST_VERTICAL_CAMERA_MOVEMENT /** - * Enables "parallel lakitu camera" or "aglab cam" which lets you move the camera smoothly with the D-pad. - */ -#define PARALLEL_LAKITU_CAM - -/** - * Enables Puppy Camera 2, a rewritten camera that can be freely configured and modified. - */ -// #define PUPPYCAM - -/** - * Enables camera collision for 8 direction camera and, by extension, to Reonucam if enabled. + * Enables camera collision for 8 direction camera and, by extension, to Parallel Lakitu cam or Reonucam if enabled. * If you enable it, please consider using surface types with the SURFACE_FLAG_NO_CAM_COLLISION flag for small obstacles, * such as fences, pillars, signs, etc, in order to make your game more enjoyable and not let the camera get in the way of gameplay. */ #define EIGHT_DIR_CAMERA_COLLISION -// Enables Reonucam, a custom camera that aims to be a more feature-rich "aglabcam" that also uses less buttons. +/** + * Enables "parallel lakitu camera" or "aglab cam" which lets you move the camera smoothly with the D-pad. Will be disabled if Reonucam is enabled. + */ +#define PARALLEL_LAKITU_CAM + +// Enables Reonucam, a custom camera that aims to be a more feature-rich "aglabcam" that doesn't use a single button more than the vanilla camera. // An explanation the features can be seen here: https://www.youtube.com/watch?v=TQNkznX9Z3k (please note that the analog feature shown at the end is no longer present) #define REONUCAM +/** + * Enables Puppy Camera 2, a rewritten camera that can be freely configured and modified. + */ +// #define PUPPYCAM /**********************************/ /***** Vanilla config options *****/ From 8875cc312cfe5640cc29fb0906022af4a45cc879 Mon Sep 17 00:00:00 2001 From: Reonu Date: Wed, 17 Apr 2024 23:05:42 +0100 Subject: [PATCH 11/36] put safewuards in the right place --- include/config/config_camera.h | 21 +-------------------- include/config/config_safeguards.h | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/include/config/config_camera.h b/include/config/config_camera.h index 7351adc9da..afa50b0e98 100644 --- a/include/config/config_camera.h +++ b/include/config/config_camera.h @@ -53,7 +53,7 @@ // Enables Reonucam, a custom camera that aims to be a more feature-rich "aglabcam" that doesn't use a single button more than the vanilla camera. // An explanation the features can be seen here: https://www.youtube.com/watch?v=TQNkznX9Z3k (please note that the analog feature shown at the end is no longer present) -#define REONUCAM +//#define REONUCAM /** * Enables Puppy Camera 2, a rewritten camera that can be freely configured and modified. @@ -78,22 +78,3 @@ #ifdef ENABLE_VANILLA_LEVEL_SPECIFIC_CHECKS #define ENABLE_VANILLA_CAM_PROCESSING #endif - -// Reonucam overrides -#ifdef REONUCAM - // Use course default mode - #ifndef USE_COURSE_DEFAULT_MODE - #define USE_COURSE_DEFAULT_MODE - #endif - - // Force camera mode to 8 Dir - #ifdef FORCED_CAMERA_MODE - #undef FORCED_CAMERA_MODE - #endif - #define FORCED_CAMERA_MODE CAMERA_MODE_8_DIRECTIONS - - // Disable vanilla cam processing - #ifdef ENABLE_VANILLA_CAM_PROCESSING - #undef ENABLE_VANILLA_CAM_PROCESSING - #endif -#endif diff --git a/include/config/config_safeguards.h b/include/config/config_safeguards.h index 8462ec10c2..e027ea6f6d 100644 --- a/include/config/config_safeguards.h +++ b/include/config/config_safeguards.h @@ -139,6 +139,31 @@ #define FLYING_CAMERA_MODE CAMERA_MODE_BEHIND_MARIO #endif // !FLYING_CAMERA_MODE +// Reonucam overrides +#ifdef REONUCAM + // Use course default mode + #ifndef USE_COURSE_DEFAULT_MODE + #define USE_COURSE_DEFAULT_MODE + #endif + + // Force camera mode to 8 Dir + #ifdef FORCED_CAMERA_MODE + #undef FORCED_CAMERA_MODE + #endif + #define FORCED_CAMERA_MODE CAMERA_MODE_8_DIRECTIONS + + // Disable vanilla cam processing + #ifdef ENABLE_VANILLA_CAM_PROCESSING + #undef ENABLE_VANILLA_CAM_PROCESSING + #endif + + // Disable aglab cam + #ifdef PARALLEL_LAKITU_CAM + #undef PARALLEL_LAKITU_CAM + #endif +#endif + + /***************** * config_game.h From d794f3a9dc1551bf81e3ad6fda30d7195880d555 Mon Sep 17 00:00:00 2001 From: Reonu Date: Wed, 17 Apr 2024 23:05:57 +0100 Subject: [PATCH 12/36] update french reonucam text --- src/game/ingame_menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c index 70469aeb04..b85b2bdbcf 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c @@ -1527,14 +1527,14 @@ void reset_red_coins_collected(void) { LangArray textReonucam1 = DEFINE_LANGUAGE_ARRAY( "CAMERA SPEED: %d", - "FRENCH PLACEHOLDER: %d", + "VITESSE CAMÉRA: %d", "KAMERA GESCHWINDIGKEIT: %d", "JAPANESE PLACEHOLDER: %d", "VELOCIDAD DE CÁMARA: %d"); LangArray textReonucam2 = DEFINE_LANGUAGE_ARRAY( "DPAD TO CHANGE", - "FRENCH PLACEHOLDER", + "CHANGER AVEC DPAD", "DPAD ZU ÄNDERN", "JAPANESE PLACEHOLDER", "DPAD PARA CAMBIAR"); From 835f877f63f2dda30991a1b7ee48880a1f39c5c8 Mon Sep 17 00:00:00 2001 From: Reonu Date: Wed, 17 Apr 2024 23:44:39 +0100 Subject: [PATCH 13/36] remove unnecesary define and fix flying --- src/game/camera.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/game/camera.c b/src/game/camera.c index bf0d58f537..6409c483bd 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -876,16 +876,15 @@ s32 update_8_directions_camera(struct Camera *c, Vec3f focus, Vec3f pos) { s16 pitch = look_down_slopes(camYaw); f32 posY; f32 focusY; -#ifdef REONUCAM - f32 yOff; -#else f32 yOff = 125.f; -#endif + f32 baseDist = 1000.f; #ifdef REONUCAM if (gMarioState->action & ACT_FLAG_SWIMMING) { yOff = -125.f; + } else if (gMarioState->action & ACT_FLAG_SWIMMING_OR_FLYING) { + yOff = 325.f; } else { yOff = 125.f; } From 1555667928a31cab1ec6b69337c77f38311584fb Mon Sep 17 00:00:00 2001 From: Reonu Date: Wed, 17 Apr 2024 23:48:12 +0100 Subject: [PATCH 14/36] fix spacing --- src/game/camera.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/game/camera.c b/src/game/camera.c index 6409c483bd..a3ccec0d6c 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -1143,16 +1143,21 @@ s32 snap_to_45_degrees(s16 angle) { #ifdef EIGHT_DIR_CAMERA_COLLISION void eight_dir_collision_handler(struct Camera *c) { struct Surface *surf; + Vec3f camdir; Vec3f origin; Vec3f thick; Vec3f hitpos; + vec3f_copy(origin,gMarioState->pos); + origin[1] += 300.0f; // the ray is cast from 300 units above Mario in order to prevent small obstacles from constantly snapping the camera camdir[0] = c->pos[0] - origin[0]; camdir[1] = c->pos[1] - origin[1]; camdir[2] = c->pos[2] - origin[2]; + find_surface_on_ray(origin, camdir, &surf, hitpos, (RAYCAST_FIND_FLOOR | RAYCAST_FIND_WALL | RAYCAST_FIND_CEIL)); + if (surf) { f32 distFromSurf = 100.0f; f32 dist; @@ -1171,23 +1176,27 @@ void eight_dir_collision_handler(struct Camera *c) { thick[2] = coss(yaw) * distFromSurf; vec3f_add(hitpos,thick); vec3f_copy(c->pos,hitpos); - } + c->yaw = atan2s(c->pos[2] - gMarioState->pos[2], c->pos[0] - gMarioState->pos[0]); + } #endif #ifdef REONUCAM f32 cameraSpeeds[] = {0.5f, 1.f, 1.5f, 2.f, 3.5f}; // The camera speed settings, from slowest to fastest. + void reonucam_handler(void) { // Get the camera speed based on the user's setting f32 cameraSpeed = cameraSpeeds[gReonucamState.speed]; + //45º rotations if ((gPlayer1Controller->buttonPressed & L_CBUTTONS) && !(gPlayer1Controller->buttonDown & R_TRIG)) { s8DirModeBaseYaw = snap_to_45_degrees(s8DirModeBaseYaw - DEGREES(45)); } else if ((gPlayer1Controller->buttonPressed & R_CBUTTONS) && !(gPlayer1Controller->buttonDown & R_TRIG)) { s8DirModeBaseYaw = snap_to_45_degrees(s8DirModeBaseYaw + DEGREES(45)); } + //Smooth rotation if (gPlayer1Controller->buttonDown & R_TRIG) { if (gPlayer1Controller->buttonDown & L_CBUTTONS) { @@ -1206,6 +1215,7 @@ void reonucam_handler(void) { } gReonucamState.rButtonCounter = 0; } + if (gPlayer1Controller->buttonPressed & R_TRIG) { if (gReonucamState.rButtonCounter2 <= 5) { set_cam_angle(CAM_ANGLE_MARIO); // Enter mario cam if R is pressed 2 times in less than 5 frames @@ -1216,9 +1226,6 @@ void reonucam_handler(void) { } else { gReonucamState.rButtonCounter2++; } - if (gPlayer1Controller->buttonPressed & D_JPAD) { - s8DirModeBaseYaw = snap_to_45_degrees(s8DirModeBaseYaw); // Lock the camera to the nearest 45deg axis - } } #endif From b8b86cc5a02b8c7f2569045e7b15f59ca613240b Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 18 Apr 2024 00:43:45 +0100 Subject: [PATCH 15/36] add japanese text --- src/game/ingame_menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c index b85b2bdbcf..bcd2a06aa9 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c @@ -1529,14 +1529,14 @@ LangArray textReonucam1 = DEFINE_LANGUAGE_ARRAY( "CAMERA SPEED: %d", "VITESSE CAMÉRA: %d", "KAMERA GESCHWINDIGKEIT: %d", - "JAPANESE PLACEHOLDER: %d", + "カメラそくど: %d", "VELOCIDAD DE CÁMARA: %d"); LangArray textReonucam2 = DEFINE_LANGUAGE_ARRAY( "DPAD TO CHANGE", "CHANGER AVEC DPAD", "DPAD ZU ÄNDERN", - "JAPANESE PLACEHOLDER", + "DPADでへんこう", "DPAD PARA CAMBIAR"); #ifdef REONUCAM From ccb9a8eff9b2f3628acda3d3494c5534d68f17a7 Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 18 Apr 2024 09:57:48 +0100 Subject: [PATCH 16/36] remove formatting change --- src/game/camera.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/game/camera.c b/src/game/camera.c index a3ccec0d6c..41ff3c1fef 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -877,7 +877,6 @@ s32 update_8_directions_camera(struct Camera *c, Vec3f focus, Vec3f pos) { f32 posY; f32 focusY; f32 yOff = 125.f; - f32 baseDist = 1000.f; #ifdef REONUCAM From af17caf53a6bffcfdbd17b169da9d32acc39eac5 Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 18 Apr 2024 10:09:34 +0100 Subject: [PATCH 17/36] update readme --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index cda57beb68..5bd0e24ac3 100644 --- a/README.md +++ b/README.md @@ -63,8 +63,7 @@ Thanks to Frame#5375 and AloXado320 for also helping with silhouette stuff - Removed course-specific camera processing * - Ability to set Mario's movement speed when hanging from a ceiling * - Tighter hanging controls (Mario will face the direction of the analog stick directly while hanging from a ceiling) * -- reonucam3: custom camera by Reonu. This is included as a .patch file in the enhancements folder, you need to apply it if you want this camera. - This video shows a rundown of the features: https://youtu.be/TQNkznX9Z3k +- reonucam: custom camera by Reonu. Now included as a define in config_camera.h. This video shows a rundown of the features (note that the analog camera feature show at the end is no longer present): https://youtu.be/TQNkznX9Z3k - Ability to disable Mario getting suck in snow or sand **Hacker QOL:** From 2a40167fcff842c2b7b0be148bb95d9782122fe9 Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 18 Apr 2024 10:13:48 +0100 Subject: [PATCH 18/36] update readme again --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5bd0e24ac3..ad8d2a323e 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ Thanks to Frame#5375 and AloXado320 for also helping with silhouette stuff - Removed course-specific camera processing * - Ability to set Mario's movement speed when hanging from a ceiling * - Tighter hanging controls (Mario will face the direction of the analog stick directly while hanging from a ceiling) * -- reonucam: custom camera by Reonu. Now included as a define in config_camera.h. This video shows a rundown of the features (note that the analog camera feature show at the end is no longer present): https://youtu.be/TQNkznX9Z3k +- reonucam: custom camera by Reonu. Now included as a define in config_camera.h. - Ability to disable Mario getting suck in snow or sand **Hacker QOL:** From 5db1d1d861156b5a6f5603871d42d78dcd4b396c Mon Sep 17 00:00:00 2001 From: Reonu Date: Sat, 20 Apr 2024 11:08:28 +0100 Subject: [PATCH 19/36] Fix capitalization --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ad8d2a323e..e422ac4b67 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ Thanks to Frame#5375 and AloXado320 for also helping with silhouette stuff - Removed course-specific camera processing * - Ability to set Mario's movement speed when hanging from a ceiling * - Tighter hanging controls (Mario will face the direction of the analog stick directly while hanging from a ceiling) * -- reonucam: custom camera by Reonu. Now included as a define in config_camera.h. +- Reonucam: Custom camera by Reonu. Now included as a define in config_camera.h. - Ability to disable Mario getting suck in snow or sand **Hacker QOL:** From 5ce47978d88f68fa99f7a4bb7ef89be310e48250 Mon Sep 17 00:00:00 2001 From: Reonu Date: Sat, 20 Apr 2024 11:09:21 +0100 Subject: [PATCH 20/36] fix space --- include/config/config_camera.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/config/config_camera.h b/include/config/config_camera.h index afa50b0e98..6e60cfdf27 100644 --- a/include/config/config_camera.h +++ b/include/config/config_camera.h @@ -58,7 +58,7 @@ /** * Enables Puppy Camera 2, a rewritten camera that can be freely configured and modified. */ -// #define PUPPYCAM +//#define PUPPYCAM /**********************************/ /***** Vanilla config options *****/ From f4ec4306dd345f8c7697f92b878487d1fcf8650b Mon Sep 17 00:00:00 2001 From: Reonu Date: Sat, 20 Apr 2024 11:12:31 +0100 Subject: [PATCH 21/36] remove unnecessary ifdefs --- include/config/config_safeguards.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/include/config/config_safeguards.h b/include/config/config_safeguards.h index e027ea6f6d..a8ad664e81 100644 --- a/include/config/config_safeguards.h +++ b/include/config/config_safeguards.h @@ -153,14 +153,10 @@ #define FORCED_CAMERA_MODE CAMERA_MODE_8_DIRECTIONS // Disable vanilla cam processing - #ifdef ENABLE_VANILLA_CAM_PROCESSING #undef ENABLE_VANILLA_CAM_PROCESSING - #endif // Disable aglab cam - #ifdef PARALLEL_LAKITU_CAM #undef PARALLEL_LAKITU_CAM - #endif #endif From 56f4b9c331fd8610a7f395a981fb2f769af571e6 Mon Sep 17 00:00:00 2001 From: Reonu Date: Sat, 20 Apr 2024 11:49:55 +0100 Subject: [PATCH 22/36] address requested changes --- src/game/camera.c | 26 +++++++++++++++++++------- src/game/ingame_menu.c | 5 +++-- src/game/mario.c | 7 +++++-- src/game/mario_actions_cutscene.c | 5 ++++- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/game/camera.c b/src/game/camera.c index 41ff3c1fef..2fd5640c75 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -1140,6 +1140,10 @@ s32 snap_to_45_degrees(s16 angle) { } #ifdef EIGHT_DIR_CAMERA_COLLISION + +#define MIN_CAMERA_DISTANCE 300.0f // Minimum distance between Mario and the camera. +#define VERTICAL_RAY_OFFSET 300.0f // The ray is cast from 300 units above Mario in order to prevent small obstacles from constantly snapping the camera + void eight_dir_collision_handler(struct Camera *c) { struct Surface *surf; @@ -1150,7 +1154,7 @@ void eight_dir_collision_handler(struct Camera *c) { vec3f_copy(origin,gMarioState->pos); - origin[1] += 300.0f; // the ray is cast from 300 units above Mario in order to prevent small obstacles from constantly snapping the camera + origin[1] += VERTICAL_RAY_OFFSET; camdir[0] = c->pos[0] - origin[0]; camdir[1] = c->pos[1] - origin[1]; camdir[2] = c->pos[2] - origin[2]; @@ -1165,7 +1169,6 @@ void eight_dir_collision_handler(struct Camera *c) { vec3f_diff(camToMario, gMarioState->pos, hitpos); s16 yaw = atan2s(camToMario[2], camToMario[0]); vec3f_get_lateral_dist(hitpos,gMarioState->pos, &dist); - #define MIN_CAMERA_DISTANCE 300.0f // Minimum distance between Mario and the camera. See the next comment. if (dist < MIN_CAMERA_DISTANCE) { distFromSurf += (dist - MIN_CAMERA_DISTANCE); // If Mario runs right up to the screen, the camera pull back slightly... yDist = MIN_CAMERA_DISTANCE - CLAMP(dist, 0, MIN_CAMERA_DISTANCE); // ...and also up slightly. @@ -1184,6 +1187,7 @@ void eight_dir_collision_handler(struct Camera *c) { #ifdef REONUCAM f32 cameraSpeeds[] = {0.5f, 1.f, 1.5f, 2.f, 3.5f}; // The camera speed settings, from slowest to fastest. +#define R_DOUBLE_TAP_WINDOW 5 // How many frames the player has to double tap R in order to ender Mario cam mode. void reonucam_handler(void) { // Get the camera speed based on the user's setting @@ -1203,9 +1207,11 @@ void reonucam_handler(void) { } else if (gPlayer1Controller->buttonDown & R_CBUTTONS) { s8DirModeBaseYaw += DEGREES(cameraSpeed); } - gReonucamState.rButtonCounter++; // This increses whenever R is held. + if (gReonucamState.rButtonCounter++ > 100) { // This increses whenever R is held. + gReonucamState.rButtonCounter = 100; + } } else { - if (gReonucamState.rButtonCounter > 0 && gReonucamState.rButtonCounter <= 5 && !((gPlayer1Controller->buttonDown & L_CBUTTONS) || (gPlayer1Controller->buttonDown & R_CBUTTONS) || (gMarioState->action & ACT_FLAG_SWIMMING_OR_FLYING))) { + if (gReonucamState.rButtonCounter > 0 && gReonucamState.rButtonCounter <= R_DOUBLE_TAP_WINDOW && !((gPlayer1Controller->buttonDown & L_CBUTTONS) || (gPlayer1Controller->buttonDown & R_CBUTTONS) || (gMarioState->action & ACT_FLAG_SWIMMING_OR_FLYING))) { // This centers the camera behind mario. It triggers when you let go of R in less than 5 frames. s8DirModeYawOffset = 0; s8DirModeBaseYaw = gMarioState->faceAngle[1]-0x8000; @@ -1216,15 +1222,21 @@ void reonucam_handler(void) { } if (gPlayer1Controller->buttonPressed & R_TRIG) { - if (gReonucamState.rButtonCounter2 <= 5) { + if (gReonucamState.rButtonCounter2 <= R_DOUBLE_TAP_WINDOW) { set_cam_angle(CAM_ANGLE_MARIO); // Enter mario cam if R is pressed 2 times in less than 5 frames - gReonucamState.rButtonCounter2 = 6; + gReonucamState.rButtonCounter2 = R_DOUBLE_TAP_WINDOW + 1; } else { gReonucamState.rButtonCounter2 = 0; } } else { - gReonucamState.rButtonCounter2++; + if (gReonucamState.rButtonCounter2++ > 100) { + gReonucamState.rButtonCounter2 = 100; + } } + + print_text_fmt_int(20, 40, "R %d", gReonucamState.rButtonCounter); + print_text_fmt_int(20, 20, "R %d", gReonucamState.rButtonCounter2); + } #endif diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c index bcd2a06aa9..326a40c24d 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c @@ -1525,6 +1525,8 @@ void reset_red_coins_collected(void) { gRedCoinsCollected = 0; } +#ifdef REONUCAM + LangArray textReonucam1 = DEFINE_LANGUAGE_ARRAY( "CAMERA SPEED: %d", "VITESSE CAMÉRA: %d", @@ -1539,9 +1541,8 @@ LangArray textReonucam2 = DEFINE_LANGUAGE_ARRAY( "DPADでへんこう", "DPAD PARA CAMBIAR"); -#ifdef REONUCAM void render_reonucam_speed_setting(void) { - char buf[25]; + char buf[32]; gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); sprintf(buf, LANG_ARRAY(textReonucam1), gReonucamState.speed +1 ); diff --git a/src/game/mario.c b/src/game/mario.c index 4a21e33129..9554ab56e8 100644 --- a/src/game/mario.c +++ b/src/game/mario.c @@ -1383,7 +1383,8 @@ void set_submerged_cam_preset_and_spawn_bubbles(struct MarioState *m) { s16 camPreset; #ifdef REONUCAM // skip if not submerged - if ((m->action & ACT_GROUP_MASK) != ACT_GROUP_SUBMERGED) return; + if ((m->action & ACT_GROUP_MASK) != ACT_GROUP_SUBMERGED) + return; // R Trigger toggles camera mode override if ((gPlayer1Controller->buttonPressed & R_TRIG) && (m->action & ACT_FLAG_SWIMMING)) { @@ -1392,7 +1393,9 @@ void set_submerged_cam_preset_and_spawn_bubbles(struct MarioState *m) { // If override, set mode to 8 dir. Otherwise, use normal water processing if (gReonucamState.waterCamOverride) { - if (m->area->camera->mode != CAMERA_MODE_8_DIRECTIONS) set_camera_mode(m->area->camera, CAMERA_MODE_8_DIRECTIONS, 1); + if (m->area->camera->mode != CAMERA_MODE_8_DIRECTIONS) { + set_camera_mode(m->area->camera, CAMERA_MODE_8_DIRECTIONS, 1); + } } else { #else if ((m->action & ACT_GROUP_MASK) == ACT_GROUP_SUBMERGED) { diff --git a/src/game/mario_actions_cutscene.c b/src/game/mario_actions_cutscene.c index e09a64b4ac..12a65d71f0 100644 --- a/src/game/mario_actions_cutscene.c +++ b/src/game/mario_actions_cutscene.c @@ -506,7 +506,10 @@ s32 act_debug_free_move(struct MarioState *m) { f32 speed = (gPlayer1Controller->buttonDown & B_BUTTON) ? 4.0f : 1.0f; if (gPlayer1Controller->buttonDown & Z_TRIG) speed = 0.01f; - if (m->area->camera->mode != CAMERA_MODE_8_DIRECTIONS) set_camera_mode(m->area->camera, CAMERA_MODE_8_DIRECTIONS, 1); + if (m->area->camera->mode != CAMERA_MODE_8_DIRECTIONS) { + set_camera_mode(m->area->camera, CAMERA_MODE_8_DIRECTIONS, 1); + } + set_mario_animation(m, MARIO_ANIM_A_POSE); vec3f_copy(pos, m->pos); From 725596d4a33046c2e4f7cdfb1766c0af2e3c5380 Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 13 Feb 2025 15:01:56 +0000 Subject: [PATCH 23/36] Reduce ifdefs in mode_8_directions_camera --- src/game/camera.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/game/camera.c b/src/game/camera.c index 2fd5640c75..75eb4971cf 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -1189,7 +1189,9 @@ void eight_dir_collision_handler(struct Camera *c) { f32 cameraSpeeds[] = {0.5f, 1.f, 1.5f, 2.f, 3.5f}; // The camera speed settings, from slowest to fastest. #define R_DOUBLE_TAP_WINDOW 5 // How many frames the player has to double tap R in order to ender Mario cam mode. -void reonucam_handler(void) { +void reonucam_handler(struct Camera *c) { + Vec3f pos; + s16 oldAreaYaw = sAreaYaw; // Get the camera speed based on the user's setting f32 cameraSpeed = cameraSpeeds[gReonucamState.speed]; @@ -1234,9 +1236,17 @@ void reonucam_handler(void) { } } - print_text_fmt_int(20, 40, "R %d", gReonucamState.rButtonCounter); - print_text_fmt_int(20, 20, "R %d", gReonucamState.rButtonCounter2); - + radial_camera_input(c); + + lakitu_zoom(400.f, 0x900); + c->nextYaw = update_8_directions_camera(c, c->focus, pos); + + set_camera_height(c, pos[1]); + + c->pos[0] = pos[0]; + c->pos[2] = pos[2]; + sAreaYawChange = sAreaYaw - oldAreaYaw; + eight_dir_collision_handler(c); } #endif @@ -1247,8 +1257,7 @@ void mode_8_directions_camera(struct Camera *c) { Vec3f pos; s16 oldAreaYaw = sAreaYaw; #ifdef REONUCAM - reonucam_handler(); - radial_camera_input(c); + reonucam_handler(c); #else radial_camera_input(c); @@ -1275,22 +1284,17 @@ void mode_8_directions_camera(struct Camera *c) { else if (gPlayer1Controller->buttonPressed & D_JPAD) { s8DirModeYawOffset = snap_to_45_degrees(s8DirModeYawOffset); } -#endif #endif lakitu_zoom(400.f, 0x900); c->nextYaw = update_8_directions_camera(c, c->focus, pos); -#ifdef REONUCAM - set_camera_height(c, pos[1]); -#endif c->pos[0] = pos[0]; c->pos[2] = pos[2]; sAreaYawChange = sAreaYaw - oldAreaYaw; #ifdef EIGHT_DIR_CAMERA_COLLISION eight_dir_collision_handler(c); #endif -#ifndef REONUCAM set_camera_height(c, pos[1]); -#endif + #endif } /** From 32e904c5d8767cc951d88b2f37b50988922d3340 Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 13 Feb 2025 15:38:32 +0000 Subject: [PATCH 24/36] Minor formatting changes --- src/game/camera.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/game/camera.c b/src/game/camera.c index 75eb4971cf..040d280d88 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -4902,7 +4902,6 @@ void handle_c_button_movement(struct Camera *c) { } } - /** * Zero the 10 cvars. */ From 1b7df11f9895f6b28681278510dde1548e0a7639 Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 13 Feb 2025 15:52:06 +0000 Subject: [PATCH 25/36] remove unnecessary line --- src/game/camera.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/game/camera.c b/src/game/camera.c index 040d280d88..7df1f0d914 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -5371,11 +5371,7 @@ void set_camera_mode_8_directions(struct Camera *c) { if (c->mode != CAMERA_MODE_8_DIRECTIONS) { c->mode = CAMERA_MODE_8_DIRECTIONS; sStatusFlags &= ~CAM_FLAG_SMOOTH_MOVEMENT; -#ifdef REONUCAM - s8DirModeBaseYaw = snap_to_45_degrees(s8DirModeBaseYaw); -#else s8DirModeBaseYaw = 0; -#endif s8DirModeYawOffset = 0; } } From 32ad8eeafff72f1f60d64d065e24783b94f10f2e Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 13 Feb 2025 16:01:43 +0000 Subject: [PATCH 26/36] cleaned up camera sound stuff --- include/config/config_safeguards.h | 5 +++++ src/game/camera.c | 8 +------- src/game/camera.h | 2 ++ 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/include/config/config_safeguards.h b/include/config/config_safeguards.h index a8ad664e81..bf0da9094a 100644 --- a/include/config/config_safeguards.h +++ b/include/config/config_safeguards.h @@ -157,6 +157,11 @@ // Disable aglab cam #undef PARALLEL_LAKITU_CAM + + // Disable camera sounds + #define play_sound_cbutton_up() + #define play_sound_cbutton_down() + #define play_sound_cbutton_side() #endif diff --git a/src/game/camera.c b/src/game/camera.c index 7df1f0d914..8b606c521e 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -4695,24 +4695,18 @@ void play_camera_buzz_if_c_sideways(void) { } } -void play_sound_cbutton_up(void) { #ifndef REONUCAM +void play_sound_cbutton_up(void) { play_sound(SOUND_MENU_CAMERA_ZOOM_IN, gGlobalSoundSource); -#endif } void play_sound_cbutton_down(void) { -#ifndef REONUCAM play_sound(SOUND_MENU_CAMERA_ZOOM_OUT, gGlobalSoundSource); -#endif } void play_sound_cbutton_side(void) { -#ifndef REONUCAM play_sound(SOUND_MENU_CAMERA_TURN, gGlobalSoundSource); #endif -} - void play_sound_button_change_blocked(void) { play_sound(SOUND_MENU_CAMERA_BUZZ, gGlobalSoundSource); } diff --git a/src/game/camera.h b/src/game/camera.h index 1a7e3f4d95..e456a3e015 100644 --- a/src/game/camera.h +++ b/src/game/camera.h @@ -781,9 +781,11 @@ s32 offset_yaw_outward_radial(struct Camera *c, s16 areaYaw); void play_camera_buzz_if_cdown(void); void play_camera_buzz_if_cbutton(void); void play_camera_buzz_if_c_sideways(void); +#ifndef REONUCAM void play_sound_cbutton_up(void); void play_sound_cbutton_down(void); void play_sound_cbutton_side(void); +#endif void play_sound_button_change_blocked(void); void play_sound_rbutton_changed(void); void play_sound_if_cam_switched_to_lakitu_or_mario(void); From d440b12457af9be39cd47ae396e37a205b30fd8a Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 13 Feb 2025 16:05:14 +0000 Subject: [PATCH 27/36] fix spaces --- include/config/config_camera.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/config/config_camera.h b/include/config/config_camera.h index 6e60cfdf27..9c2b620c15 100644 --- a/include/config/config_camera.h +++ b/include/config/config_camera.h @@ -53,12 +53,12 @@ // Enables Reonucam, a custom camera that aims to be a more feature-rich "aglabcam" that doesn't use a single button more than the vanilla camera. // An explanation the features can be seen here: https://www.youtube.com/watch?v=TQNkznX9Z3k (please note that the analog feature shown at the end is no longer present) -//#define REONUCAM +//# define REONUCAM /** * Enables Puppy Camera 2, a rewritten camera that can be freely configured and modified. */ -//#define PUPPYCAM +// #define PUPPYCAM /**********************************/ /***** Vanilla config options *****/ From e3ec7e56efe942b5654635378988e15db47afe70 Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 13 Feb 2025 16:05:29 +0000 Subject: [PATCH 28/36] nitpics --- include/config/config_safeguards.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/config/config_safeguards.h b/include/config/config_safeguards.h index bf0da9094a..ee12711a40 100644 --- a/include/config/config_safeguards.h +++ b/include/config/config_safeguards.h @@ -142,7 +142,8 @@ // Reonucam overrides #ifdef REONUCAM // Use course default mode - #ifndef USE_COURSE_DEFAULT_MODE + #ifdef USE_COURSE_DEFAULT_MODE + #undef USE_COURSE_DEFAULT_MODE #define USE_COURSE_DEFAULT_MODE #endif From b2841560aa200643c970df1f6443f69325582921 Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 13 Feb 2025 16:06:43 +0000 Subject: [PATCH 29/36] fix spaces properly --- include/config/config_camera.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/config/config_camera.h b/include/config/config_camera.h index 9c2b620c15..7f36e58710 100644 --- a/include/config/config_camera.h +++ b/include/config/config_camera.h @@ -53,7 +53,7 @@ // Enables Reonucam, a custom camera that aims to be a more feature-rich "aglabcam" that doesn't use a single button more than the vanilla camera. // An explanation the features can be seen here: https://www.youtube.com/watch?v=TQNkznX9Z3k (please note that the analog feature shown at the end is no longer present) -//# define REONUCAM +// #define REONUCAM /** * Enables Puppy Camera 2, a rewritten camera that can be freely configured and modified. From e15a57e72a61a3658e345ae158f18f5c14322e5d Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 13 Feb 2025 16:12:27 +0000 Subject: [PATCH 30/36] use ARRAY_COUNT for camera speeds --- src/game/camera.c | 2 +- src/game/camera.h | 2 ++ src/game/ingame_menu.c | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/game/camera.c b/src/game/camera.c index 8b606c521e..3194f01aed 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -1186,7 +1186,7 @@ void eight_dir_collision_handler(struct Camera *c) { #endif #ifdef REONUCAM -f32 cameraSpeeds[] = {0.5f, 1.f, 1.5f, 2.f, 3.5f}; // The camera speed settings, from slowest to fastest. +f32 cameraSpeeds[5] = {0.5f, 1.f, 1.5f, 2.f, 3.5f}; // The camera speed settings, from slowest to fastest. #define R_DOUBLE_TAP_WINDOW 5 // How many frames the player has to double tap R in order to ender Mario cam mode. void reonucam_handler(struct Camera *c) { diff --git a/src/game/camera.h b/src/game/camera.h index e456a3e015..f66abe5b92 100644 --- a/src/game/camera.h +++ b/src/game/camera.h @@ -785,6 +785,8 @@ void play_camera_buzz_if_c_sideways(void); void play_sound_cbutton_up(void); void play_sound_cbutton_down(void); void play_sound_cbutton_side(void); +#else +extern f32 cameraSpeeds[5]; #endif void play_sound_button_change_blocked(void); void play_sound_rbutton_changed(void); diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c index 326a40c24d..9b28f9c21c 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c @@ -1545,7 +1545,7 @@ void render_reonucam_speed_setting(void) { char buf[32]; gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); - sprintf(buf, LANG_ARRAY(textReonucam1), gReonucamState.speed +1 ); + sprintf(buf, LANG_ARRAY(textReonucam1), gReonucamState.speed + 1); print_generic_string_aligned(310, 24, buf, TEXT_ALIGN_RIGHT); print_generic_string_aligned(310, 8, LANG_ARRAY(textReonucam2), TEXT_ALIGN_RIGHT); @@ -1558,7 +1558,7 @@ void render_reonucam_speed_setting(void) { } else if (gPlayer1Controller->buttonPressed & L_JPAD) { gReonucamState.speed--; } - gReonucamState.speed = (gReonucamState.speed + 5) % 5; + gReonucamState.speed = (gReonucamState.speed + ARRAY_COUNT(cameraSpeeds)) % ARRAY_COUNT(cameraSpeeds); save_file_set_camera_speed(gReonucamState.speed); } #endif From 24743f69058474e7c4a466743e0d9c851d837309 Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 13 Feb 2025 16:13:12 +0000 Subject: [PATCH 31/36] use block comment --- include/config/config_camera.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/include/config/config_camera.h b/include/config/config_camera.h index 7f36e58710..b6dff70bbf 100644 --- a/include/config/config_camera.h +++ b/include/config/config_camera.h @@ -50,9 +50,10 @@ * Enables "parallel lakitu camera" or "aglab cam" which lets you move the camera smoothly with the D-pad. Will be disabled if Reonucam is enabled. */ #define PARALLEL_LAKITU_CAM - -// Enables Reonucam, a custom camera that aims to be a more feature-rich "aglabcam" that doesn't use a single button more than the vanilla camera. -// An explanation the features can be seen here: https://www.youtube.com/watch?v=TQNkznX9Z3k (please note that the analog feature shown at the end is no longer present) +/** + * Enables Reonucam, a custom camera that aims to be a more feature-rich "aglabcam" that doesn't use a single button more than the vanilla camera. + * An explanation the features can be seen here: https://www.youtube.com/watch?v=TQNkznX9Z3k (please note that the analog feature shown at the end is no longer present) + */ // #define REONUCAM /** From 86134d2b90b06791b4cb5af0aec3f6ee2e239597 Mon Sep 17 00:00:00 2001 From: Reonu Date: Sun, 16 Feb 2025 15:44:36 +0000 Subject: [PATCH 32/36] make the game build without reonucam --- src/game/camera.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/game/camera.c b/src/game/camera.c index 3194f01aed..94acb92f1e 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -1178,9 +1178,11 @@ void eight_dir_collision_handler(struct Camera *c) { thick[2] = coss(yaw) * distFromSurf; vec3f_add(hitpos,thick); vec3f_copy(c->pos,hitpos); + c->yaw = yaw; + } + else { + c->yaw = atan2s(c->pos[2] - gMarioState->pos[2], c->pos[0] - gMarioState->pos[0]); } - - c->yaw = atan2s(c->pos[2] - gMarioState->pos[2], c->pos[0] - gMarioState->pos[0]); } #endif @@ -4706,6 +4708,7 @@ void play_sound_cbutton_down(void) { void play_sound_cbutton_side(void) { play_sound(SOUND_MENU_CAMERA_TURN, gGlobalSoundSource); +} #endif void play_sound_button_change_blocked(void) { play_sound(SOUND_MENU_CAMERA_BUZZ, gGlobalSoundSource); From eb78b1c350fb5ae7555ac16a8c2533bd43cbee7a Mon Sep 17 00:00:00 2001 From: Reonu Date: Sun, 16 Feb 2025 15:44:56 +0000 Subject: [PATCH 33/36] newline --- src/game/camera.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/game/camera.c b/src/game/camera.c index 94acb92f1e..32a9ad9375 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -4710,6 +4710,7 @@ void play_sound_cbutton_side(void) { play_sound(SOUND_MENU_CAMERA_TURN, gGlobalSoundSource); } #endif + void play_sound_button_change_blocked(void) { play_sound(SOUND_MENU_CAMERA_BUZZ, gGlobalSoundSource); } From bedd59aa06a71a3b7ecda69bae465f26f86c4bf4 Mon Sep 17 00:00:00 2001 From: Reonu Date: Sun, 16 Feb 2025 15:45:57 +0000 Subject: [PATCH 34/36] reorder savefile settigns --- src/game/save_file.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/game/save_file.h b/src/game/save_file.h index f27135dedb..d68b584441 100644 --- a/src/game/save_file.h +++ b/src/game/save_file.h @@ -59,15 +59,15 @@ struct MainMenuSaveData { // on the high score screen. u32 coinScoreAges[NUM_SAVE_FILES]; u8 soundMode: 2; -#ifdef WIDE - u8 wideMode: 1; -#endif #ifdef MULTILANG u8 language: 3; #endif #ifdef REONUCAM u8 cameraSpeedSetting: 3; #endif +#ifdef WIDE + u8 wideMode: 1; +#endif #ifdef PUPPYCAM u8 firstBoot; struct gPuppyOptions saveOptions; From e99a03820aa9cd5104d3f640abf10bb92704676c Mon Sep 17 00:00:00 2001 From: Reonu Date: Sun, 16 Feb 2025 15:47:05 +0000 Subject: [PATCH 35/36] rename cameraSpeeds to reonucamSpeeds --- src/game/camera.c | 4 ++-- src/game/camera.h | 2 +- src/game/ingame_menu.c | 2 +- src/game/save_file.c | 6 +++--- src/game/save_file.h | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/game/camera.c b/src/game/camera.c index 32a9ad9375..982d5a02d6 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -1188,14 +1188,14 @@ void eight_dir_collision_handler(struct Camera *c) { #endif #ifdef REONUCAM -f32 cameraSpeeds[5] = {0.5f, 1.f, 1.5f, 2.f, 3.5f}; // The camera speed settings, from slowest to fastest. +f32 reonucamSpeeds[5] = {0.5f, 1.f, 1.5f, 2.f, 3.5f}; // The camera speed settings, from slowest to fastest. #define R_DOUBLE_TAP_WINDOW 5 // How many frames the player has to double tap R in order to ender Mario cam mode. void reonucam_handler(struct Camera *c) { Vec3f pos; s16 oldAreaYaw = sAreaYaw; // Get the camera speed based on the user's setting - f32 cameraSpeed = cameraSpeeds[gReonucamState.speed]; + f32 cameraSpeed = reonucamSpeeds[gReonucamState.speed]; //45º rotations if ((gPlayer1Controller->buttonPressed & L_CBUTTONS) && !(gPlayer1Controller->buttonDown & R_TRIG)) { diff --git a/src/game/camera.h b/src/game/camera.h index f66abe5b92..a44b058079 100644 --- a/src/game/camera.h +++ b/src/game/camera.h @@ -786,7 +786,7 @@ void play_sound_cbutton_up(void); void play_sound_cbutton_down(void); void play_sound_cbutton_side(void); #else -extern f32 cameraSpeeds[5]; +extern f32 reonucamSpeeds[5]; #endif void play_sound_button_change_blocked(void); void play_sound_rbutton_changed(void); diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c index 9b28f9c21c..fe0d3587ee 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c @@ -1558,7 +1558,7 @@ void render_reonucam_speed_setting(void) { } else if (gPlayer1Controller->buttonPressed & L_JPAD) { gReonucamState.speed--; } - gReonucamState.speed = (gReonucamState.speed + ARRAY_COUNT(cameraSpeeds)) % ARRAY_COUNT(cameraSpeeds); + gReonucamState.speed = (gReonucamState.speed + ARRAY_COUNT(reonucamSpeeds)) % ARRAY_COUNT(reonucamSpeeds); save_file_set_camera_speed(gReonucamState.speed); } #endif diff --git a/src/game/save_file.c b/src/game/save_file.c index 2e222ca254..6c4108c8f1 100644 --- a/src/game/save_file.c +++ b/src/game/save_file.c @@ -237,7 +237,7 @@ static void wipe_main_menu_data(void) { gSaveBuffer.menuData.coinScoreAges[2] = 0x15555555; #ifdef REONUCAM - gSaveBuffer.menuData.cameraSpeedSetting = 2; // Set default Reonucam speed to medium on first boot + gSaveBuffer.menuData.reonucamSpeedsetting = 2; // Set default Reonucam speed to medium on first boot #endif gMainMenuDataModified = TRUE; @@ -736,13 +736,13 @@ u32 save_file_get_sound_mode(void) { #ifdef REONUCAM void save_file_set_camera_speed(u8 speed) { - gSaveBuffer.menuData.cameraSpeedSetting = speed; + gSaveBuffer.menuData.reonucamSpeedsetting = speed; gMainMenuDataModified = TRUE; save_main_menu_data(); } u8 save_file_get_camera_speed(void) { - return gSaveBuffer.menuData.cameraSpeedSetting; + return gSaveBuffer.menuData.reonucamSpeedsetting; } #endif diff --git a/src/game/save_file.h b/src/game/save_file.h index d68b584441..0975ada6be 100644 --- a/src/game/save_file.h +++ b/src/game/save_file.h @@ -63,7 +63,7 @@ struct MainMenuSaveData { u8 language: 3; #endif #ifdef REONUCAM - u8 cameraSpeedSetting: 3; + u8 reonucamSpeedsetting: 3; #endif #ifdef WIDE u8 wideMode: 1; From 2dc732e613753f22129c11771a2cda8d4bcd95ac Mon Sep 17 00:00:00 2001 From: Reonu Date: Sun, 16 Feb 2025 15:50:29 +0000 Subject: [PATCH 36/36] mute camera sound properly --- include/config/config_camera.h | 2 +- include/config/config_safeguards.h | 1 + src/game/camera.c | 21 ++++++++++----------- src/game/camera.h | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/include/config/config_camera.h b/include/config/config_camera.h index b6dff70bbf..53ca5a52a8 100644 --- a/include/config/config_camera.h +++ b/include/config/config_camera.h @@ -54,7 +54,7 @@ * Enables Reonucam, a custom camera that aims to be a more feature-rich "aglabcam" that doesn't use a single button more than the vanilla camera. * An explanation the features can be seen here: https://www.youtube.com/watch?v=TQNkznX9Z3k (please note that the analog feature shown at the end is no longer present) */ -// #define REONUCAM +#define REONUCAM /** * Enables Puppy Camera 2, a rewritten camera that can be freely configured and modified. diff --git a/include/config/config_safeguards.h b/include/config/config_safeguards.h index ee12711a40..e741b25b46 100644 --- a/include/config/config_safeguards.h +++ b/include/config/config_safeguards.h @@ -163,6 +163,7 @@ #define play_sound_cbutton_up() #define play_sound_cbutton_down() #define play_sound_cbutton_side() + #define play_sound_if_cam_switched_to_lakitu_or_mario() #endif diff --git a/src/game/camera.c b/src/game/camera.c index 982d5a02d6..0b833d774c 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -3040,9 +3040,7 @@ void update_camera(struct Camera *c) { #endif } } -#ifndef REONUCAM play_sound_if_cam_switched_to_lakitu_or_mario(); -#endif } // Initialize the camera @@ -4709,15 +4707,6 @@ void play_sound_cbutton_down(void) { void play_sound_cbutton_side(void) { play_sound(SOUND_MENU_CAMERA_TURN, gGlobalSoundSource); } -#endif - -void play_sound_button_change_blocked(void) { - play_sound(SOUND_MENU_CAMERA_BUZZ, gGlobalSoundSource); -} - -void play_sound_rbutton_changed(void) { - play_sound(SOUND_MENU_CLICK_CHANGE_VIEW, gGlobalSoundSource); -} void play_sound_if_cam_switched_to_lakitu_or_mario(void) { if (sCameraSoundFlags & CAM_SOUND_MARIO_ACTIVE) { @@ -4729,6 +4718,16 @@ void play_sound_if_cam_switched_to_lakitu_or_mario(void) { sCameraSoundFlags &= ~(CAM_SOUND_MARIO_ACTIVE | CAM_SOUND_NORMAL_ACTIVE); } +#endif + +void play_sound_button_change_blocked(void) { + play_sound(SOUND_MENU_CAMERA_BUZZ, gGlobalSoundSource); +} + +void play_sound_rbutton_changed(void) { + play_sound(SOUND_MENU_CLICK_CHANGE_VIEW, gGlobalSoundSource); +} + /** * Handles input for radial, outwards radial, parallel tracking, and 8 direction mode. */ diff --git a/src/game/camera.h b/src/game/camera.h index a44b058079..a4a7df37c2 100644 --- a/src/game/camera.h +++ b/src/game/camera.h @@ -785,12 +785,12 @@ void play_camera_buzz_if_c_sideways(void); void play_sound_cbutton_up(void); void play_sound_cbutton_down(void); void play_sound_cbutton_side(void); +void play_sound_if_cam_switched_to_lakitu_or_mario(void); #else extern f32 reonucamSpeeds[5]; #endif void play_sound_button_change_blocked(void); void play_sound_rbutton_changed(void); -void play_sound_if_cam_switched_to_lakitu_or_mario(void); void radial_camera_input(struct Camera *c); void trigger_cutscene_dialog(s32 trigger); void handle_c_button_movement(struct Camera *c);