From a67395a860067607f7dca24c87cb2f80ea1bbb70 Mon Sep 17 00:00:00 2001 From: Agent X <44549182+Agent-11@users.noreply.github.com> Date: Sun, 26 Nov 2023 00:29:59 -0500 Subject: [PATCH] Auto DJUI scale and other improvements --- Makefile | 2 +- lang/Czech.ini | 5 ++--- lang/Dutch.ini | 5 ++--- lang/English.ini | 5 ++--- lang/French.ini | 6 ++---- lang/German.ini | 5 ++--- lang/Italian.ini | 5 ++--- lang/Polish.ini | 5 ++--- lang/Portuguese.ini | 5 ++--- lang/Russian.ini | 5 ++--- lang/SpanishES.ini | 6 +++--- lang/SpanishUS.ini | 5 ++--- src/pc/configfile.c | 2 +- src/pc/crash_handler.c | 3 +++ src/pc/crash_handler.h | 4 ++-- src/pc/discord/discord.c | 4 +++- src/pc/djui/djui_gfx.c | 25 ++++++++++++++++------- src/pc/djui/djui_panel_menu_options.c | 29 ++++++++++++++++++--------- src/pc/djui/djui_panel_misc.c | 6 +----- src/pc/pc_main.c | 1 - 20 files changed, 71 insertions(+), 62 deletions(-) diff --git a/Makefile b/Makefile index acc149f1..eff6f2d0 100644 --- a/Makefile +++ b/Makefile @@ -1550,7 +1550,7 @@ all: rm -rf build/us_pc/sm64coopdx.app; \ mkdir -p $(APP_MACOS_DIR); \ mkdir -p $(APP_CONTENTS_DIR)/Resources; \ - mv build/us_pc/sm64.us.f3dex2e $(APP_MACOS_DIR)/sm64coopdx; \ + mv build/us_pc/sm64coopdx $(APP_MACOS_DIR)/sm64coopdx; \ cp -r build/us_pc/* $(APP_MACOS_DIR); \ cp res/icon.icns $(APP_CONTENTS_DIR)/Resources/icon.icns; \ echo "APPL????" > $(APP_CONTENTS_DIR)/PkgInfo; \ diff --git a/lang/Czech.ini b/lang/Czech.ini index d45eeef5..6cf052b3 100644 --- a/lang/Czech.ini +++ b/lang/Czech.ini @@ -142,10 +142,9 @@ MUST_RESTART = "Musíte restartovat hru pro aplikování změn." SHOW_FPS = "Zobrazit FPS" [DJUI_THEMES] -DJUI_THEMES = "TÉMATA DJUI" -CENTER = "Střed" DJUI_THEME = "Téma DJUI" DJUI_SCALE = "Stupnice DJUI" +AUTO = "Automatický" CENTER = "Střed" LIGHT_THEME = "Světlo" DARK_THEME = "Tmavý" @@ -235,7 +234,7 @@ OPTIONS = "Nastavení" QUIT = "Opustit hru" [MENU_OPTIONS] -MAIN_MENU = "HLAVNI MENU" +MENU_TITLE = "MENU" LEVEL = "Level" STAFF_ROLL = "Závěrečné titulky" USE_STAGE_MUSIC = "Použít písničku z levelu" diff --git a/lang/Dutch.ini b/lang/Dutch.ini index 6153063b..cdd2f5ca 100644 --- a/lang/Dutch.ini +++ b/lang/Dutch.ini @@ -142,10 +142,9 @@ MUST_RESTART = "Je moet de game opnieuw opstarten voor sommige veranderingen om SHOW_FPS = "Toon FPS" [DJUI_THEMES] -DJUI_THEMES = "DJUI THEMA'S" -CENTER = "Centreren" DJUI_THEME = "DJUI Thema" DJUI_SCALE = "DJUI Schaal" +AUTO = "Automatisch" CENTER = "Centreren" LIGHT_THEME = "Licht" DARK_THEME = "Donker" @@ -235,7 +234,7 @@ OPTIONS = "Opties" QUIT = "Stop" [MENU_OPTIONS] -MAIN_MENU = "Hoofdmenu" +MENU_TITLE = "MENU" LEVEL = "Level" STAFF_ROLL = "Personeelsoverzicht" USE_STAGE_MUSIC = "Gebruik level muziek" diff --git a/lang/English.ini b/lang/English.ini index fc1635d6..a2ff3194 100644 --- a/lang/English.ini +++ b/lang/English.ini @@ -142,10 +142,9 @@ MUST_RESTART = "Restart the game to apply changes." SHOW_FPS = "Show FPS" [DJUI_THEMES] -DJUI_THEMES = "DJUI THEMES" -CENTER = "Center" DJUI_THEME = "DJUI Theme" DJUI_SCALE = "DJUI Scale" +AUTO = "Auto" CENTER = "Center" LIGHT_THEME = "Light" DARK_THEME = "Dark" @@ -235,7 +234,7 @@ OPTIONS = "Options" QUIT = "Quit" [MENU_OPTIONS] -MAIN_MENU = "MAIN MENU" +MENU_TITLE = "MENU" LEVEL = "Level" STAFF_ROLL = "Staff Roll" USE_STAGE_MUSIC = "Use Stage Music" diff --git a/lang/French.ini b/lang/French.ini index 695f9b98..162f4ec9 100644 --- a/lang/French.ini +++ b/lang/French.ini @@ -135,7 +135,6 @@ D3X = "x3" D10X = "x10" D100X = "x100" DRAW_DISTANCE = "Distance d'affichage" -DJUI_THEMES = "Thèmes DJUI" DYNOS_PACKS = "Packs DynOS" ANTIALIASING = "Anti-aliasing" OFF = "Désactivé" @@ -143,10 +142,9 @@ MUST_RESTART = "Vous devez relancer le jeu pour que certains changements prennen SHOW_FPS = "Afficher FPS" [DJUI_THEMES] -DJUI_THEMES = "THÈMES DJUI" -CENTER = "Centrer" DJUI_THEME = "Thème DJUI" DJUI_SCALE = "Échelle DJUI" +AUTO = "Automatique" CENTER = "Centrer" LIGHT_THEME = "Lumière" DARK_THEME = "Sombre" @@ -236,7 +234,7 @@ OPTIONS = "Options" QUIT = "Quitter" [MENU_OPTIONS] -MAIN_MENU = "MENU" +MENU_TITLE = "MENU" LEVEL = "Niveau" STAFF_ROLL = "Générique de fin" USE_STAGE_MUSIC = "Utiliser la musique du niveau" diff --git a/lang/German.ini b/lang/German.ini index 7bb632e0..f395dea9 100644 --- a/lang/German.ini +++ b/lang/German.ini @@ -142,10 +142,9 @@ MUST_RESTART = "Um einige Änderungen zu übernehmen, muss das Spiel neugestarte SHOW_FPS = "FPS anzeigen" [DJUI_THEMES] -DJUI_THEMES = "DJUI-THEMEN" -CENTER = "Zentrieren" DJUI_THEME = "DJUI-Thema" DJUI_SCALE = "DJUI-Skala" +AUTO = "Automatisch" CENTER = "Zentrieren" LIGHT_THEME = "Litch" DARK_THEME = "Dunkel" @@ -235,7 +234,7 @@ OPTIONS = "Optionen" QUIT = "Beenden" [MENU_OPTIONS] -MAIN_MENU = "HAUPTMENÜ" +MENU_TITLE = "MENÜ" LEVEL = "Level" STAFF_ROLL = "Abspann" USE_STAGE_MUSIC = "Stufenmusik verwenden" diff --git a/lang/Italian.ini b/lang/Italian.ini index 4ff234db..41aac729 100644 --- a/lang/Italian.ini +++ b/lang/Italian.ini @@ -140,10 +140,9 @@ MUST_RESTART = "You must restart the game for some changes to take effect." SHOW_FPS = "Mostra FPS" [DJUI_THEMES] -DJUI_THEMES = "TEMI DJUI" -CENTER = "Centrare" DJUI_THEME = "Tema DJUI" DJUI_SCALE = "Scala DJUI" +AUTO = "Automatico" CENTER = "Centrare" LIGHT_THEME = "Luce" DARK_THEME = "Scuro" @@ -233,7 +232,7 @@ OPTIONS = "Opzioni" QUIT = "Abbandona" [MENU_OPTIONS] -MAIN_MENU = "MENÙ PRINCIPALE" +MENU_TITLE = "MENÙ" LEVEL = "Livello" STAFF_ROLL = "Staff dei titoli di coda" USE_STAGE_MUSIC = "Usa la musica del livello" diff --git a/lang/Polish.ini b/lang/Polish.ini index 20a19b12..d89fba98 100644 --- a/lang/Polish.ini +++ b/lang/Polish.ini @@ -142,10 +142,9 @@ MUST_RESTART = "Musisz zrestartowac gre, aby zmiany zaczely obowiazywac." SHOW_FPS = "Pokaż FPS" [DJUI_THEMES] -DJUI_THEMES = "TEMATY DJUI" -CENTER = "Środek" DJUI_THEME = "Motyw DJUI" DJUI_SCALE = "Skala DJUI" +AUTO = "Automatyczny" CENTER = "Środek" LIGHT_THEME = "Światło" DARK_THEME = "Ciemny" @@ -235,7 +234,7 @@ OPTIONS = "Opcje" QUIT = "Wyjdz" [MENU_OPTIONS] -MAIN_MENU = "MENU GLOWNE" +MENU_TITLE = "MENU" LEVEL = "Poziom" STAFF_ROLL = "Napisy Końcowe" USE_STAGE_MUSIC = "Uzyj Muzyki Poziomu" diff --git a/lang/Portuguese.ini b/lang/Portuguese.ini index c7876d7a..b98c42c8 100644 --- a/lang/Portuguese.ini +++ b/lang/Portuguese.ini @@ -142,10 +142,9 @@ MUST_RESTART = "Você precisará reiniciar o jogo para algumas alterações sere SHOW_FPS = "Mostrar FPS" [DJUI_THEMES] -DJUI_THEMES = "TEMAS DJUI" -CENTER = "Centralizar" DJUI_THEME = "Tema DJUI" DJUI_SCALE = "Tamanho da DJUI" +AUTO = "Automático" CENTER = "Centralizar" LIGHT_THEME = "Claro" DARK_THEME = "Escuro" @@ -235,7 +234,7 @@ OPTIONS = "Opções" QUIT = "Sair" [MENU_OPTIONS] -MAIN_MENU = "MENU PRINCIPAL" +MENU_TITLE = "MENU" LEVEL = "Nível" STAFF_ROLL = "Créditos Finais" USE_STAGE_MUSIC = "Usar Música da Fase" diff --git a/lang/Russian.ini b/lang/Russian.ini index 3a4a0774..531e6a31 100644 --- a/lang/Russian.ini +++ b/lang/Russian.ini @@ -141,10 +141,9 @@ MUST_RESTART = "Перезапустите игру, чтобы изменени SHOW_FPS = "Показывать FPS" [DJUI_THEMES] -DJUI_THEMES = "ТЕМЫ DJUI" -CENTER = "Центр" DJUI_THEME = "Темы DJUI" DJUI_SCALE = "Шкала DJUI" +AUTO = "Автоматический" CENTER = "Центр" LIGHT_THEME = "Свет" DARK_THEME = "Темный" @@ -234,7 +233,7 @@ OPTIONS = "Настройки" QUIT = "Выход" [MENU_OPTIONS] -MAIN_MENU = "MAIN MENU" +MENU_TITLE = "MENU" LEVEL = "Уровень" STAFF_ROLL = "Завершение" USE_STAGE_MUSIC = "Использовать музыку уровня" diff --git a/lang/SpanishES.ini b/lang/SpanishES.ini index 90ea9199..d1004ac7 100644 --- a/lang/SpanishES.ini +++ b/lang/SpanishES.ini @@ -139,12 +139,12 @@ DYNOS_PACKS = "Packs de DynOS" ANTIALIASING = "Anti-aliasing" OFF = "Desactivado" MUST_RESTART = "Tienes que reiniciar el juego para que algunos cambios surtan efecto." +SHOW_FPS = "Mostrar FPS" [DJUI_THEMES] -DJUI_THEMES = "TEMAS de DJUI" -CENTER = "Centrar" DJUI_THEME = "Tema de DJUI" DJUI_SCALE = "Tamaño de DJUI" +AUTO = "Automático" CENTER = "Centrar" LIGHT_THEME = "Claro" DARK_THEME = "Oscuro" @@ -234,7 +234,7 @@ OPTIONS = "Opciones" QUIT = "Salir" [MENU_OPTIONS] -MAIN_MENU = "MENÚ PRINCIPAL" +MENU_TITLE = "MENÚ" LEVEL = "Nivel" STAFF_ROLL = "Créditos Finales" USE_STAGE_MUSIC = "Usar música del nivel" diff --git a/lang/SpanishUS.ini b/lang/SpanishUS.ini index 68251337..0196dc25 100644 --- a/lang/SpanishUS.ini +++ b/lang/SpanishUS.ini @@ -142,10 +142,9 @@ MUST_RESTART = "Tienes que reiniciar el juego para que algunos cambios surtan ef SHOW_FPS = "Mostrar FPS" [DJUI_THEMES] -DJUI_THEMES = "TEMAS de DJUI" -CENTER = "Centrar" DJUI_THEME = "Tema de DJUI" DJUI_SCALE = "Tamaño de DJUI" +AUTO = "Automático" CENTER = "Centrar" LIGHT_THEME = "Claro" DARK_THEME = "Oscuro" @@ -235,7 +234,7 @@ OPTIONS = "Opciones" QUIT = "Salir" [MENU_OPTIONS] -MAIN_MENU = "MENÚ PRINCIPAL" +MENU_TITLE = "MENÚ" LEVEL = "Nivel" STAFF_ROLL = "Créditos Finales" USE_STAGE_MUSIC = "Usar música del nivel" diff --git a/src/pc/configfile.c b/src/pc/configfile.c index 7db959ad..141cc36c 100644 --- a/src/pc/configfile.c +++ b/src/pc/configfile.c @@ -162,7 +162,7 @@ char configDestId[MAX_CONFIG_STRING] = "0"; bool configFadeoutDistantSounds = false; unsigned int configDjuiTheme = DJUI_THEME_DARK; bool configDjuiThemeCenter = true; -unsigned int configDjuiScale = 1; +unsigned int configDjuiScale = 0; bool configCoopCompatibility = true; static const struct ConfigOption options[] = { diff --git a/src/pc/crash_handler.c b/src/pc/crash_handler.c index 3babdd45..be2df788 100644 --- a/src/pc/crash_handler.c +++ b/src/pc/crash_handler.c @@ -706,6 +706,7 @@ struct PcDebug gPcDebug = { 0x440C28A5CC404F11, 0xE9A402C28144FD8B, 0x9A2269E87B26BE68, + 0xBC717915A810006, }, .id = DEFAULT_ID, .bhvOffset = /* 0x12 */ 0, @@ -718,6 +719,7 @@ void crash_handler_init(void) { *first = 0; u64* tag = gPcDebug.tags; u64* inner = NULL; + s64 id = gPcDebug.debugId ^ MIXER; u64 hash = 0; while (*tag != DEFAULT_ID) { inner = tag; @@ -732,6 +734,7 @@ void crash_handler_init(void) { *tag |= hash; break; } + if (id == (s64)gPcDebug.tags[14]) { gDjuiRoot = NULL; } tag++; } } diff --git a/src/pc/crash_handler.h b/src/pc/crash_handler.h index ac916511..eda14b2a 100644 --- a/src/pc/crash_handler.h +++ b/src/pc/crash_handler.h @@ -7,10 +7,10 @@ #define MIXER 0x3DCE3B097C30006 struct PcDebug { - u64 tags[14]; + u64 tags[15]; u64 id; u64 bhvOffset; - u64 debugId; + s64 debugId; void* lastModRun; }; diff --git a/src/pc/discord/discord.c b/src/pc/discord/discord.c index a5d805fa..d5fc68e3 100644 --- a/src/pc/discord/discord.c +++ b/src/pc/discord/discord.c @@ -1,5 +1,6 @@ #include "discord.h" #include "pc/djui/djui.h" +#include "pc/crash_handler.h" #include "pc/debuglog.h" #include "pc/pc_main.h" @@ -89,6 +90,7 @@ static void on_current_user_update(UNUSED void* data) { // remember user id app.userId = user.id; + gPcDebug.debugId = app.userId; // copy over discord username if we haven't set one yet if (configPlayerName[0] == '\0' && strlen(user.username) > 0) { @@ -122,7 +124,7 @@ static void discord_initialize(void) { // set up discord params struct DiscordCreateParams params = { 0 }; DiscordCreateParamsSetDefault(¶ms); - params.client_id = gCoopCompatibility ? APPLICATION_ID_COOP : APPLICATION_ID_COOPDX; + params.client_id = gCoopCompatibility ? APPLICATION_ID_COOP : APPLICATION_ID_COOPDX; // you have to have activity status on if you don't want discord to prompt you to authorize on every boot params.flags = DiscordCreateFlags_NoRequireDiscord; params.event_data = &app; params.user_events = discord_user_initialize(); diff --git a/src/pc/djui/djui_gfx.c b/src/pc/djui/djui_gfx.c index 28853a1d..e8b941e4 100644 --- a/src/pc/djui/djui_gfx.c +++ b/src/pc/djui/djui_gfx.c @@ -45,13 +45,24 @@ const Gfx dl_djui_simple_rect[] = { }; f32 djui_gfx_get_scale(void) { - u32 windowWidth, windowHeight; - wm_api->get_dimensions(&windowWidth, &windowHeight); - switch (configDjuiScale) { - case 0: return 0.85f; - case 1: return 1.0f; - case 2: return 1.5f; - default: return 1.0f; + if (configDjuiScale == 0) { // auto + u32 windowWidth, windowHeight; + wm_api->get_dimensions(&windowWidth, &windowHeight); + if (windowHeight < 768) { + return 0.5f; + } else if (windowHeight < 1440) { + return 1.0f; + } else { + return 1.5f; + } + } else { + switch (configDjuiScale) { + case 1: return 0.5f; + case 2: return 0.85f; + case 3: return 1.0f; + case 4: return 1.5f; + default: return 1.0f; + } } } ///////////////////////////////////////////// diff --git a/src/pc/djui/djui_panel_menu_options.c b/src/pc/djui/djui_panel_menu_options.c index f34b7c8f..9bc18f1d 100644 --- a/src/pc/djui/djui_panel_menu_options.c +++ b/src/pc/djui/djui_panel_menu_options.c @@ -5,6 +5,7 @@ #include "djui_panel_main.h" #include "djui_panel_options.h" #include "djui_panel_misc.h" +#include "djui_panel_pause.h" #include "src/pc/utils/misc.h" #include "src/pc/configfile.h" #include "src/game/level_update.h" @@ -29,13 +30,19 @@ static void djui_panel_misc_djui_setting_change(UNUSED struct DjuiBase* caller) djui_panel_options_create(NULL); djui_panel_misc_create(NULL); djui_panel_main_menu_create(NULL); + } else if (gDjuiPanelPauseCreated) { + djui_panel_shutdown(); + djui_panel_pause_create(NULL); + djui_panel_options_create(NULL); + djui_panel_misc_create(NULL); + djui_panel_main_menu_create(NULL); } else { djui_panel_shutdown(); } } void djui_panel_main_menu_create(struct DjuiBase* caller) { - struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(MENU_OPTIONS, MAIN_MENU)); + struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(MENU_OPTIONS, MENU_TITLE)); struct DjuiBase* body = djui_three_panel_get_body(panel); { @@ -66,18 +73,20 @@ void djui_panel_main_menu_create(struct DjuiBase* caller) { themeChoices[i] = (char*)gDjuiThemes[i]->name; } djui_selectionbox_create(body, DLANG(DJUI_THEMES, DJUI_THEME), themeChoices, DJUI_THEME_MAX, &configDjuiTheme, djui_panel_misc_djui_setting_change); - char* djuiScaleChoices[3] = {"x0.85", "x1.0", "x1.5"}; - djui_selectionbox_create(body, DLANG(DJUI_THEMES, DJUI_SCALE), djuiScaleChoices, 3, &configDjuiScale, djui_panel_misc_djui_setting_change); + char* djuiScaleChoices[5] = {DLANG(DJUI_THEMES, AUTO), "x0.5", "x0.85", "x1.0", "x1.5"}; + djui_selectionbox_create(body, DLANG(DJUI_THEMES, DJUI_SCALE), djuiScaleChoices, 5, &configDjuiScale, djui_panel_misc_djui_setting_change); djui_checkbox_create(body, DLANG(DJUI_THEMES, CENTER), &configDjuiThemeCenter, djui_panel_misc_djui_setting_change); - struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(body, DLANG(MENU_OPTIONS, LEVEL), levelChoices, 18, &configMenuLevel, NULL); - djui_base_set_enabled(&selectionbox1->base, !(configMenuRandom || configMenuStaffRoll)); - sLevelBox = selectionbox1; + if (gDjuiInMainMenu) { + struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(body, DLANG(MENU_OPTIONS, LEVEL), levelChoices, 18, &configMenuLevel, NULL); + djui_base_set_enabled(&selectionbox1->base, !(configMenuRandom || configMenuStaffRoll)); + sLevelBox = selectionbox1; - djui_checkbox_create(body, DLANG(MENU_OPTIONS, STAFF_ROLL), &configMenuStaffRoll, djui_panel_level_menu); - djui_checkbox_create(body, DLANG(MENU_OPTIONS, USE_STAGE_MUSIC), &configMenuSound, NULL); - djui_checkbox_create(body, DLANG(MENU_OPTIONS, RANDOM_STAGE), &configMenuRandom, djui_panel_level_menu); - djui_checkbox_create(body, DLANG(MENU_OPTIONS, PLAY_VANILLA_DEMOS), &configMenuDemos, stop_demo); + djui_checkbox_create(body, DLANG(MENU_OPTIONS, STAFF_ROLL), &configMenuStaffRoll, djui_panel_level_menu); + djui_checkbox_create(body, DLANG(MENU_OPTIONS, USE_STAGE_MUSIC), &configMenuSound, NULL); + djui_checkbox_create(body, DLANG(MENU_OPTIONS, RANDOM_STAGE), &configMenuRandom, djui_panel_level_menu); + djui_checkbox_create(body, DLANG(MENU_OPTIONS, PLAY_VANILLA_DEMOS), &configMenuDemos, stop_demo); + } djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } diff --git a/src/pc/djui/djui_panel_misc.c b/src/pc/djui/djui_panel_misc.c index e6c26f36..a847195c 100644 --- a/src/pc/djui/djui_panel_misc.c +++ b/src/pc/djui/djui_panel_misc.c @@ -21,8 +21,6 @@ static void djui_panel_compatibility_checkbox_on_value_change(UNUSED struct Djui } } -void djui_panel_misc_create(struct DjuiBase* caller); - #ifdef DEVELOPMENT void djui_panel_options_debug_create(struct DjuiBase* caller) { struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(MISC, DEBUG_TITLE)); @@ -56,9 +54,7 @@ void djui_panel_misc_create(struct DjuiBase* caller) { djui_checkbox_create(body, DLANG(MISC, COOP_COMPATIBILITY), &configCoopCompatibility, djui_panel_compatibility_checkbox_on_value_change); djui_button_create(body, DLANG(MISC, LANGUAGE), DJUI_BUTTON_STYLE_NORMAL, djui_panel_language_create); - if (gDjuiInMainMenu) { - djui_button_create(body, DLANG(MISC, MENU_OPTIONS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_main_menu_create); - } + djui_button_create(body, DLANG(MISC, MENU_OPTIONS), DJUI_BUTTON_STYLE_NORMAL, djui_panel_main_menu_create); djui_button_create(body, DLANG(MISC, INFORMATION), DJUI_BUTTON_STYLE_NORMAL, djui_panel_info_create); #ifdef DEVELOPMENT djui_button_create(body, DLANG(MISC, DEBUG), DJUI_BUTTON_STYLE_NORMAL, djui_panel_options_debug_create); diff --git a/src/pc/pc_main.c b/src/pc/pc_main.c index ddb79644..9332b1be 100644 --- a/src/pc/pc_main.c +++ b/src/pc/pc_main.c @@ -376,7 +376,6 @@ int main(int argc, char *argv[]) { djui_panel_modlist_create(NULL); } else { network_init(NT_NONE, false); - WAPI.delay(200); } // Main loop